summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--Makefile.am21
-rw-r--r--Makefile.in303
-rw-r--r--NEWS178
-rw-r--r--TODO37
-rw-r--r--aclocal.m41
-rwxr-xr-xautogen.sh29
-rw-r--r--callouts/Makefile.am60
-rw-r--r--callouts/Makefile.in180
-rw-r--r--callouts/nm-avahi-autoipd-action.c2
-rw-r--r--callouts/nm-dispatcher-api.h (renamed from callouts/nm-dispatcher-action.h)17
-rw-r--r--callouts/nm-dispatcher-utils.c165
-rw-r--r--callouts/nm-dispatcher.c (renamed from callouts/nm-dispatcher-action.c)188
-rw-r--r--callouts/nm-dispatcher.xml6
-rw-r--r--callouts/org.freedesktop.nm_dispatcher.service.in2
-rw-r--r--callouts/tests/Makefile.am10
-rw-r--r--callouts/tests/Makefile.in50
-rw-r--r--callouts/tests/dispatcher-old-down1
-rw-r--r--callouts/tests/dispatcher-old-up1
-rw-r--r--callouts/tests/dispatcher-old-vpn-down1
-rw-r--r--callouts/tests/dispatcher-old-vpn-up1
-rw-r--r--callouts/tests/test-dispatcher-envp.c58
-rw-r--r--cli/Makefile.in21
-rw-r--r--cli/completion/Makefile.in21
-rw-r--r--cli/completion/nmcli1307
-rw-r--r--cli/src/Makefile.am5
-rw-r--r--cli/src/Makefile.in147
-rw-r--r--cli/src/common.c785
-rw-r--r--cli/src/common.h33
-rw-r--r--cli/src/connections.c8455
-rw-r--r--cli/src/connections.h2
-rw-r--r--cli/src/devices.c2095
-rw-r--r--cli/src/network-manager.c920
-rw-r--r--cli/src/network-manager.h6
-rw-r--r--cli/src/nmcli.c149
-rw-r--r--cli/src/nmcli.h56
-rw-r--r--cli/src/settings.c7434
-rw-r--r--cli/src/settings.h63
-rw-r--r--cli/src/utils.c799
-rw-r--r--cli/src/utils.h67
-rw-r--r--config.h.in66
-rwxr-xr-xconfigure1736
-rw-r--r--configure.ac252
-rw-r--r--data/Makefile.am19
-rw-r--r--data/Makefile.in82
-rw-r--r--data/NetworkManager-dispatcher.service.in6
-rw-r--r--data/NetworkManager-wait-online-systemd-pre200.service.in2
-rw-r--r--data/NetworkManager-wait-online.service.in2
-rw-r--r--data/NetworkManager.service.in6
-rw-r--r--data/server.conf.in16
-rw-r--r--docs/Makefile.in21
-rw-r--r--docs/api/Makefile.in77
-rw-r--r--docs/api/html/home.pngbin256 -> 654 bytes
-rw-r--r--docs/api/html/index.html8
-rw-r--r--docs/api/html/ix01.html18
-rw-r--r--docs/api/html/left-insensitive.pngbin395 -> 0 bytes
-rw-r--r--docs/api/html/left.pngbin262 -> 459 bytes
-rw-r--r--docs/api/html/license.html18
-rw-r--r--docs/api/html/ref-dbus.html18
-rw-r--r--docs/api/html/ref-migrating.html24
-rw-r--r--docs/api/html/ref-settings.html369
-rw-r--r--docs/api/html/right-insensitive.pngbin373 -> 0 bytes
-rw-r--r--docs/api/html/right.pngbin261 -> 472 bytes
-rw-r--r--docs/api/html/secrets-flags.html18
-rw-r--r--docs/api/html/spec.html596
-rw-r--r--docs/api/html/style.css247
-rw-r--r--docs/api/html/up-insensitive.pngbin374 -> 0 bytes
-rw-r--r--docs/api/html/up.pngbin260 -> 406 bytes
-rw-r--r--docs/api/settings-spec.xml305
-rw-r--r--docs/api/spec.html596
-rw-r--r--docs/api/version.xml2
-rw-r--r--docs/libnm-glib/Makefile.am1
-rw-r--r--docs/libnm-glib/Makefile.in75
-rw-r--r--docs/libnm-glib/html/NMAccessPoint.html1152
-rw-r--r--docs/libnm-glib/html/NMActiveConnection.html1086
-rw-r--r--docs/libnm-glib/html/NMClient.html3019
-rw-r--r--docs/libnm-glib/html/NMDHCP4Config.html309
-rw-r--r--docs/libnm-glib/html/NMDHCP6Config.html309
-rw-r--r--docs/libnm-glib/html/NMDevice.html2632
-rw-r--r--docs/libnm-glib/html/NMDeviceAdsl.html340
-rw-r--r--docs/libnm-glib/html/NMDeviceBond.html528
-rw-r--r--docs/libnm-glib/html/NMDeviceBridge.html536
-rw-r--r--docs/libnm-glib/html/NMDeviceBt.html539
-rw-r--r--docs/libnm-glib/html/NMDeviceEthernet.html618
-rw-r--r--docs/libnm-glib/html/NMDeviceGeneric.html273
-rw-r--r--docs/libnm-glib/html/NMDeviceInfiniband.html453
-rw-r--r--docs/libnm-glib/html/NMDeviceModem.html393
-rw-r--r--docs/libnm-glib/html/NMDeviceOlpcMesh.html510
-rw-r--r--docs/libnm-glib/html/NMDeviceTeam.html354
-rw-r--r--docs/libnm-glib/html/NMDeviceVlan.html530
-rw-r--r--docs/libnm-glib/html/NMDeviceWifi.html1093
-rw-r--r--docs/libnm-glib/html/NMDeviceWimax.html1084
-rw-r--r--docs/libnm-glib/html/NMIP4Config.html646
-rw-r--r--docs/libnm-glib/html/NMIP6Config.html609
-rw-r--r--docs/libnm-glib/html/NMObject.html444
-rw-r--r--docs/libnm-glib/html/NMRemoteConnection.html845
-rw-r--r--docs/libnm-glib/html/NMRemoteSettings.html1337
-rw-r--r--docs/libnm-glib/html/NMSecretAgent.html1166
-rw-r--r--docs/libnm-glib/html/NMVPNConnection.html396
-rw-r--r--docs/libnm-glib/html/NMWimaxNsp.html587
-rw-r--r--docs/libnm-glib/html/annotation-glossary.html47
-rw-r--r--docs/libnm-glib/html/api-index-full.html1431
-rw-r--r--docs/libnm-glib/html/ch02.html28
-rw-r--r--docs/libnm-glib/html/home.pngbin256 -> 654 bytes
-rw-r--r--docs/libnm-glib/html/index.html18
-rw-r--r--docs/libnm-glib/html/index.sgml895
-rw-r--r--docs/libnm-glib/html/left-insensitive.pngbin395 -> 0 bytes
-rw-r--r--docs/libnm-glib/html/left.pngbin262 -> 459 bytes
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html495
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html397
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMVpnPluginUiWidget.html446
-rw-r--r--docs/libnm-glib/html/libnm-glib-nm-types.html45
-rw-r--r--docs/libnm-glib/html/libnm-glib-nm-vpn-plugin-utils.html195
-rw-r--r--docs/libnm-glib/html/libnm-glib.devhelp21028
-rw-r--r--docs/libnm-glib/html/object-tree.html72
-rw-r--r--docs/libnm-glib/html/ref-overview.html18
-rw-r--r--docs/libnm-glib/html/right-insensitive.pngbin373 -> 0 bytes
-rw-r--r--docs/libnm-glib/html/right.pngbin261 -> 472 bytes
-rw-r--r--docs/libnm-glib/html/style.css247
-rw-r--r--docs/libnm-glib/html/up-insensitive.pngbin374 -> 0 bytes
-rw-r--r--docs/libnm-glib/html/up.pngbin260 -> 406 bytes
-rw-r--r--docs/libnm-glib/libnm-glib-docs.xml2
-rw-r--r--docs/libnm-glib/libnm-glib-sections.txt238
-rw-r--r--docs/libnm-glib/libnm-glib.types4
-rw-r--r--docs/libnm-glib/tmpl/nm-access-point.sgml69
-rw-r--r--docs/libnm-glib/tmpl/nm-active-connection.sgml208
-rw-r--r--docs/libnm-glib/tmpl/nm-client.sgml174
-rw-r--r--docs/libnm-glib/tmpl/nm-device-adsl.sgml24
-rw-r--r--docs/libnm-glib/tmpl/nm-device-bond.sgml34
-rw-r--r--docs/libnm-glib/tmpl/nm-device-bridge.sgml34
-rw-r--r--docs/libnm-glib/tmpl/nm-device-bt.sgml34
-rw-r--r--docs/libnm-glib/tmpl/nm-device-ethernet.sgml39
-rw-r--r--docs/libnm-glib/tmpl/nm-device-generic.sgml111
-rw-r--r--docs/libnm-glib/tmpl/nm-device-infiniband.sgml29
-rw-r--r--docs/libnm-glib/tmpl/nm-device-modem.sgml29
-rw-r--r--docs/libnm-glib/tmpl/nm-device-olpc-mesh.sgml34
-rw-r--r--docs/libnm-glib/tmpl/nm-device-team.sgml142
-rw-r--r--docs/libnm-glib/tmpl/nm-device-vlan.sgml35
-rw-r--r--docs/libnm-glib/tmpl/nm-device-wifi.sgml79
-rw-r--r--docs/libnm-glib/tmpl/nm-device-wimax.sgml78
-rw-r--r--docs/libnm-glib/tmpl/nm-device.sgml248
-rw-r--r--docs/libnm-glib/tmpl/nm-dhcp4-config.sgml24
-rw-r--r--docs/libnm-glib/tmpl/nm-dhcp6-config.sgml24
-rw-r--r--docs/libnm-glib/tmpl/nm-ip4-config.sgml90
-rw-r--r--docs/libnm-glib/tmpl/nm-ip6-config.sgml104
-rw-r--r--docs/libnm-glib/tmpl/nm-object.sgml39
-rw-r--r--docs/libnm-glib/tmpl/nm-remote-connection.sgml135
-rw-r--r--docs/libnm-glib/tmpl/nm-remote-settings.sgml112
-rw-r--r--docs/libnm-glib/tmpl/nm-secret-agent.sgml68
-rw-r--r--docs/libnm-glib/tmpl/nm-vpn-connection.sgml39
-rw-r--r--docs/libnm-glib/tmpl/nm-vpn-plugin-ui-interface.sgml33
-rw-r--r--docs/libnm-glib/tmpl/nm-vpn-plugin.sgml39
-rw-r--r--docs/libnm-glib/tmpl/nm-wimax-nsp.sgml34
-rw-r--r--docs/libnm-glib/version.xml2
-rw-r--r--docs/libnm-util/Makefile.am5
-rw-r--r--docs/libnm-util/Makefile.in79
-rw-r--r--docs/libnm-util/html/NMConnection.html3188
-rw-r--r--docs/libnm-util/html/NMSetting.html1828
-rw-r--r--docs/libnm-util/html/NMSetting8021x.html5379
-rw-r--r--docs/libnm-util/html/NMSettingAdsl.html827
-rw-r--r--docs/libnm-util/html/NMSettingBluetooth.html463
-rw-r--r--docs/libnm-util/html/NMSettingBond.html1017
-rw-r--r--docs/libnm-util/html/NMSettingBridge.html863
-rw-r--r--docs/libnm-util/html/NMSettingBridgePort.html511
-rw-r--r--docs/libnm-util/html/NMSettingCdma.html584
-rw-r--r--docs/libnm-util/html/NMSettingConnection.html1925
-rw-r--r--docs/libnm-util/html/NMSettingDcb.html1250
-rw-r--r--docs/libnm-util/html/NMSettingGeneric.html198
-rw-r--r--docs/libnm-util/html/NMSettingGsm.html1434
-rw-r--r--docs/libnm-util/html/NMSettingIP4Config.html3401
-rw-r--r--docs/libnm-util/html/NMSettingIP6Config.html3413
-rw-r--r--docs/libnm-util/html/NMSettingInfiniband.html576
-rw-r--r--docs/libnm-util/html/NMSettingOlpcMesh.html384
-rw-r--r--docs/libnm-util/html/NMSettingPPP.html1679
-rw-r--r--docs/libnm-util/html/NMSettingPPPOE.html584
-rw-r--r--docs/libnm-util/html/NMSettingSerial.html659
-rw-r--r--docs/libnm-util/html/NMSettingTeam.html290
-rw-r--r--docs/libnm-util/html/NMSettingTeamPort.html247
-rw-r--r--docs/libnm-util/html/NMSettingVPN.html1082
-rw-r--r--docs/libnm-util/html/NMSettingVlan.html1259
-rw-r--r--docs/libnm-util/html/NMSettingWimax.html423
-rw-r--r--docs/libnm-util/html/NMSettingWired.html1580
-rw-r--r--docs/libnm-util/html/NMSettingWireless.html1844
-rw-r--r--docs/libnm-util/html/NMSettingWirelessSecurity.html2470
-rw-r--r--docs/libnm-util/html/annotation-glossary.html45
-rw-r--r--docs/libnm-util/html/api-index-full.html2385
-rw-r--r--docs/libnm-util/html/ch01.html34
-rw-r--r--docs/libnm-util/html/home.pngbin256 -> 654 bytes
-rw-r--r--docs/libnm-util/html/index.html24
-rw-r--r--docs/libnm-util/html/index.sgml1287
-rw-r--r--docs/libnm-util/html/left-insensitive.pngbin395 -> 0 bytes
-rw-r--r--docs/libnm-util/html/left.pngbin262 -> 459 bytes
-rw-r--r--docs/libnm-util/html/libnm-util-nm-utils.html2733
-rw-r--r--docs/libnm-util/html/libnm-util.devhelp21865
-rw-r--r--docs/libnm-util/html/object-tree.html157
-rw-r--r--docs/libnm-util/html/right-insensitive.pngbin373 -> 0 bytes
-rw-r--r--docs/libnm-util/html/right.pngbin261 -> 472 bytes
-rw-r--r--docs/libnm-util/html/style.css247
-rw-r--r--docs/libnm-util/html/up-insensitive.pngbin374 -> 0 bytes
-rw-r--r--docs/libnm-util/html/up.pngbin260 -> 406 bytes
-rw-r--r--docs/libnm-util/libnm-util-docs.sgml4
-rw-r--r--docs/libnm-util/libnm-util-sections.txt325
-rw-r--r--docs/libnm-util/libnm-util.types9
-rw-r--r--docs/libnm-util/tmpl/nm-connection.sgml107
-rw-r--r--docs/libnm-util/tmpl/nm-setting-8021x.sgml207
-rw-r--r--docs/libnm-util/tmpl/nm-setting-adsl.sgml52
-rw-r--r--docs/libnm-util/tmpl/nm-setting-bluetooth.sgml27
-rw-r--r--docs/libnm-util/tmpl/nm-setting-bond.sgml93
-rw-r--r--docs/libnm-util/tmpl/nm-setting-bridge-port.sgml32
-rw-r--r--docs/libnm-util/tmpl/nm-setting-bridge.sgml73
-rw-r--r--docs/libnm-util/tmpl/nm-setting-cdma.sgml37
-rw-r--r--docs/libnm-util/tmpl/nm-setting-connection.sgml75
-rw-r--r--docs/libnm-util/tmpl/nm-setting-dcb.sgml487
-rw-r--r--docs/libnm-util/tmpl/nm-setting-generic.sgml82
-rw-r--r--docs/libnm-util/tmpl/nm-setting-gsm.sgml101
-rw-r--r--docs/libnm-util/tmpl/nm-setting-infiniband.sgml74
-rw-r--r--docs/libnm-util/tmpl/nm-setting-ip4-config.sgml134
-rw-r--r--docs/libnm-util/tmpl/nm-setting-ip6-config.sgml124
-rw-r--r--docs/libnm-util/tmpl/nm-setting-olpc-mesh.sgml32
-rw-r--r--docs/libnm-util/tmpl/nm-setting-ppp.sgml107
-rw-r--r--docs/libnm-util/tmpl/nm-setting-pppoe.sgml37
-rw-r--r--docs/libnm-util/tmpl/nm-setting-private.sgml39
-rw-r--r--docs/libnm-util/tmpl/nm-setting-serial.sgml42
-rw-r--r--docs/libnm-util/tmpl/nm-setting-team-port.sgml103
-rw-r--r--docs/libnm-util/tmpl/nm-setting-team.sgml124
-rw-r--r--docs/libnm-util/tmpl/nm-setting-vlan.sgml70
-rw-r--r--docs/libnm-util/tmpl/nm-setting-vpn.sgml39
-rw-r--r--docs/libnm-util/tmpl/nm-setting-wimax.sgml23
-rw-r--r--docs/libnm-util/tmpl/nm-setting-wired.sgml139
-rw-r--r--docs/libnm-util/tmpl/nm-setting-wireless-security.sgml132
-rw-r--r--docs/libnm-util/tmpl/nm-setting-wireless.sgml151
-rw-r--r--docs/libnm-util/tmpl/nm-setting.sgml16
-rw-r--r--docs/libnm-util/tmpl/nm-utils.sgml109
-rw-r--r--docs/libnm-util/version.xml2
-rw-r--r--examples/C/Makefile.in21
-rw-r--r--examples/C/glib/Makefile.in21
-rw-r--r--examples/C/glib/add-connection-dbus-glib.c2
-rw-r--r--examples/C/glib/add-connection-libnm-glib.c2
-rw-r--r--examples/C/glib/get-active-connections-dbus-glib.c69
-rw-r--r--examples/C/glib/get-ap-info-libnm-glib.c8
-rw-r--r--examples/C/glib/list-connections-dbus-glib.c18
-rw-r--r--examples/C/glib/list-connections-libnm-glib.c6
-rw-r--r--examples/C/glib/monitor-nm-running-GDBus.c8
-rw-r--r--examples/C/glib/monitor-nm-running-dbus-glib.c2
-rw-r--r--examples/C/glib/monitor-nm-state-GDBus.c8
-rw-r--r--examples/C/qt/Makefile.in21
-rw-r--r--examples/C/qt/monitor-nm-running.cpp4
-rw-r--r--examples/Makefile.in21
-rwxr-xr-xexamples/dispatcher/70-wifi-wired-exclusive.sh27
-rw-r--r--examples/dispatcher/Makefile.in21
-rw-r--r--examples/python/Makefile.am15
-rw-r--r--examples/python/Makefile.in286
-rw-r--r--examples/python/dbus/Makefile.am13
-rw-r--r--examples/python/dbus/Makefile.in586
-rwxr-xr-xexamples/python/dbus/add-connection.py (renamed from examples/python/add-connection.py)0
-rwxr-xr-xexamples/python/dbus/add-system-wifi-connection.py (renamed from examples/python/add-system-wifi-connection.py)0
-rwxr-xr-xexamples/python/dbus/disconnect-device.py62
-rwxr-xr-xexamples/python/dbus/get-active-connection-uuids.py56
-rwxr-xr-xexamples/python/dbus/is-wwan-default.py78
-rwxr-xr-xexamples/python/dbus/list-connections.py107
-rwxr-xr-xexamples/python/dbus/list-devices.py83
-rwxr-xr-x[-rw-r--r--]examples/python/dbus/nm-state.py (renamed from examples/python/nm-state.py)0
-rwxr-xr-xexamples/python/dbus/show-bssids.py78
-rwxr-xr-xexamples/python/dbus/update-ip4-method.py82
-rwxr-xr-xexamples/python/dbus/update-secrets.py116
-rwxr-xr-xexamples/python/dbus/vpn.py152
-rw-r--r--examples/python/gi/Makefile.am9
-rw-r--r--examples/python/gi/Makefile.in582
-rwxr-xr-xexamples/python/gi/add_connection.py101
-rwxr-xr-xexamples/python/gi/device-state-ip4config.py64
-rwxr-xr-xexamples/python/gi/firewall-zone.py87
-rwxr-xr-xexamples/python/gi/get-active-connections.py34
-rwxr-xr-xexamples/python/gi/get_ips.py163
-rwxr-xr-xexamples/python/gi/list-connections.py50
-rwxr-xr-xexamples/python/gi/show-wifi-networks.py73
-rwxr-xr-xexamples/python/gi/update-ip4-method.py96
-rw-r--r--examples/ruby/Makefile.in21
-rwxr-xr-xexamples/ruby/list-devices.rb7
-rw-r--r--examples/shell/Makefile.in21
-rwxr-xr-xexamples/shell/list-devices.sh4
-rw-r--r--gtk-doc.make39
-rw-r--r--include/Makefile.am3
-rw-r--r--include/Makefile.in24
-rw-r--r--include/NetworkManager.h28
-rw-r--r--include/NetworkManagerVPN.h2
-rw-r--r--include/nm-glib-compat.h109
-rw-r--r--include/nm-gvaluearray-compat.h107
-rw-r--r--include/nm-test-utils.h680
-rw-r--r--include/nm-version.h57
-rw-r--r--include/nm-version.h.in55
-rw-r--r--initscript/paldo/NetworkManager.in56
-rw-r--r--introspection/Makefile.am7
-rw-r--r--introspection/Makefile.in28
-rw-r--r--introspection/all.xml.in2
-rw-r--r--introspection/nm-active-connection.xml73
-rw-r--r--introspection/nm-agent-manager.xml18
-rw-r--r--introspection/nm-device-generic.xml27
-rw-r--r--introspection/nm-device-gre.xml81
-rw-r--r--introspection/nm-device-macvlan.xml33
-rw-r--r--introspection/nm-device-team.xml34
-rw-r--r--introspection/nm-device-tun.xml55
-rw-r--r--introspection/nm-device-veth.xml21
-rw-r--r--introspection/nm-device-vxlan.xml122
-rw-r--r--introspection/nm-device-wifi.xml28
-rw-r--r--introspection/nm-device-wimax.xml7
-rw-r--r--introspection/nm-device.xml52
-rw-r--r--introspection/nm-ip4-config.xml32
-rw-r--r--introspection/nm-ip6-config.xml18
-rw-r--r--introspection/nm-manager.xml40
-rw-r--r--introspection/nm-secret-agent.xml63
-rw-r--r--introspection/nm-settings-connection.xml63
-rw-r--r--introspection/nm-settings.xml99
-rw-r--r--introspection/nm-vpn-plugin.xml76
-rw-r--r--introspection/vpn-errors.xml46
-rw-r--r--libgsystem/COPYING481
-rw-r--r--libgsystem/Makefile-libgsystem.am42
-rw-r--r--libgsystem/README10
-rw-r--r--libgsystem/gsystem-console.c443
-rw-r--r--libgsystem/gsystem-console.h59
-rw-r--r--libgsystem/gsystem-file-utils.c1644
-rw-r--r--libgsystem/gsystem-file-utils.h172
-rw-r--r--libgsystem/gsystem-glib-compat.h54
-rw-r--r--libgsystem/gsystem-local-alloc.c72
-rw-r--r--libgsystem/gsystem-local-alloc.h164
-rw-r--r--libgsystem/gsystem-log.c167
-rw-r--r--libgsystem/gsystem-log.h42
-rw-r--r--libgsystem/gsystem-shutil.c460
-rw-r--r--libgsystem/gsystem-shutil.h47
-rw-r--r--libgsystem/gsystem-subprocess-context-private.h65
-rw-r--r--libgsystem/gsystem-subprocess-context.c501
-rw-r--r--libgsystem/gsystem-subprocess-context.h128
-rw-r--r--libgsystem/gsystem-subprocess.c966
-rw-r--r--libgsystem/gsystem-subprocess.h101
-rw-r--r--libgsystem/libgsystem.h49
-rw-r--r--libnm-glib/Makefile.am33
-rw-r--r--libnm-glib/Makefile.in143
-rw-r--r--libnm-glib/libnm-glib-test.c10
-rw-r--r--libnm-glib/libnm-glib-vpn.ver1
-rw-r--r--libnm-glib/libnm-glib.pc.in2
-rw-r--r--libnm-glib/libnm-glib.ver47
-rw-r--r--libnm-glib/libnm_glib.c6
-rw-r--r--libnm-glib/nm-access-point.c29
-rw-r--r--libnm-glib/nm-access-point.h1
-rw-r--r--libnm-glib/nm-active-connection.c351
-rw-r--r--libnm-glib/nm-active-connection.h31
-rw-r--r--libnm-glib/nm-client.c467
-rw-r--r--libnm-glib/nm-client.h26
-rw-r--r--libnm-glib/nm-dbus-helpers-private.h38
-rw-r--r--libnm-glib/nm-dbus-helpers.c107
-rw-r--r--libnm-glib/nm-device-adsl.c20
-rw-r--r--libnm-glib/nm-device-bond.c36
-rw-r--r--libnm-glib/nm-device-bridge.c36
-rw-r--r--libnm-glib/nm-device-bt.c28
-rw-r--r--libnm-glib/nm-device-ethernet.c35
-rw-r--r--libnm-glib/nm-device-ethernet.h4
-rw-r--r--libnm-glib/nm-device-generic.c289
-rw-r--r--libnm-glib/nm-device-generic.h81
-rw-r--r--libnm-glib/nm-device-infiniband.c35
-rw-r--r--libnm-glib/nm-device-modem.c59
-rw-r--r--libnm-glib/nm-device-olpc-mesh.c32
-rw-r--r--libnm-glib/nm-device-team.c356
-rw-r--r--libnm-glib/nm-device-team.h85
-rw-r--r--libnm-glib/nm-device-vlan.c49
-rw-r--r--libnm-glib/nm-device-vlan.h2
-rw-r--r--libnm-glib/nm-device-wifi.c123
-rw-r--r--libnm-glib/nm-device-wifi.h1
-rw-r--r--libnm-glib/nm-device-wimax.c112
-rw-r--r--libnm-glib/nm-device-wimax.h1
-rw-r--r--libnm-glib/nm-device.c786
-rw-r--r--libnm-glib/nm-device.h48
-rw-r--r--libnm-glib/nm-dhcp4-config.c31
-rw-r--r--libnm-glib/nm-dhcp6-config.c31
-rw-r--r--libnm-glib/nm-glib-enum-types.c122
-rw-r--r--libnm-glib/nm-glib-enum-types.h12
-rw-r--r--libnm-glib/nm-glib-marshal.c204
-rw-r--r--libnm-glib/nm-glib-marshal.h44
-rw-r--r--libnm-glib/nm-ip4-config.c213
-rw-r--r--libnm-glib/nm-ip4-config.h10
-rw-r--r--libnm-glib/nm-ip6-config.c248
-rw-r--r--libnm-glib/nm-ip6-config.h22
-rw-r--r--libnm-glib/nm-object-private.h17
-rw-r--r--libnm-glib/nm-object.c526
-rw-r--r--libnm-glib/nm-object.h2
-rw-r--r--libnm-glib/nm-remote-connection.c509
-rw-r--r--libnm-glib/nm-remote-connection.h63
-rw-r--r--libnm-glib/nm-remote-settings.c550
-rw-r--r--libnm-glib/nm-remote-settings.h27
-rw-r--r--libnm-glib/nm-secret-agent.c167
-rw-r--r--libnm-glib/nm-secret-agent.h23
-rw-r--r--libnm-glib/nm-types.c3
-rw-r--r--libnm-glib/nm-vpn-connection.c19
-rw-r--r--libnm-glib/nm-vpn-enum-types.c1
-rw-r--r--libnm-glib/nm-vpn-plugin-ui-interface.h8
-rw-r--r--libnm-glib/nm-vpn-plugin.c311
-rw-r--r--libnm-glib/nm-vpn-plugin.h41
-rw-r--r--libnm-glib/nm-wimax-nsp.c14
-rw-r--r--libnm-glib/tests/Makefile.am36
-rw-r--r--libnm-glib/tests/Makefile.in105
-rwxr-xr-xlibnm-glib/tests/test-fake-nm.py776
-rw-r--r--libnm-glib/tests/test-nm-client.c953
-rw-r--r--libnm-glib/tests/test-remote-settings-client.c24
-rwxr-xr-xlibnm-glib/tests/test-remote-settings-service.py37
-rw-r--r--libnm-util/Makefile.am44
-rw-r--r--libnm-util/Makefile.in450
-rw-r--r--libnm-util/crypto.c82
-rw-r--r--libnm-util/crypto.h3
-rw-r--r--libnm-util/crypto_gnutls.c26
-rw-r--r--libnm-util/crypto_nss.c24
-rw-r--r--libnm-util/libnm-util.pc.in2
-rw-r--r--libnm-util/libnm-util.ver97
-rw-r--r--libnm-util/nm-connection.c730
-rw-r--r--libnm-util/nm-connection.h36
-rw-r--r--libnm-util/nm-param-spec-specialized.c45
-rw-r--r--libnm-util/nm-setting-8021x.c790
-rw-r--r--libnm-util/nm-setting-8021x.h32
-rw-r--r--libnm-util/nm-setting-adsl.c70
-rw-r--r--libnm-util/nm-setting-bluetooth.c62
-rw-r--r--libnm-util/nm-setting-bond.c315
-rw-r--r--libnm-util/nm-setting-bond.h26
-rw-r--r--libnm-util/nm-setting-bridge-port.c28
-rw-r--r--libnm-util/nm-setting-bridge.c103
-rw-r--r--libnm-util/nm-setting-bridge.h4
-rw-r--r--libnm-util/nm-setting-cdma.c51
-rw-r--r--libnm-util/nm-setting-connection.c458
-rw-r--r--libnm-util/nm-setting-connection.h40
-rw-r--r--libnm-util/nm-setting-dcb.c1268
-rw-r--r--libnm-util/nm-setting-dcb.h189
-rw-r--r--libnm-util/nm-setting-generic.c100
-rw-r--r--libnm-util/nm-setting-generic.h78
-rw-r--r--libnm-util/nm-setting-gsm.c149
-rw-r--r--libnm-util/nm-setting-gsm.h42
-rw-r--r--libnm-util/nm-setting-infiniband.c183
-rw-r--r--libnm-util/nm-setting-infiniband.h4
-rw-r--r--libnm-util/nm-setting-ip4-config.c509
-rw-r--r--libnm-util/nm-setting-ip4-config.h32
-rw-r--r--libnm-util/nm-setting-ip6-config.c385
-rw-r--r--libnm-util/nm-setting-ip6-config.h32
-rw-r--r--libnm-util/nm-setting-olpc-mesh.c48
-rw-r--r--libnm-util/nm-setting-ppp.c91
-rw-r--r--libnm-util/nm-setting-pppoe.c46
-rw-r--r--libnm-util/nm-setting-private.h53
-rw-r--r--libnm-util/nm-setting-serial.c19
-rw-r--r--libnm-util/nm-setting-team-port.c188
-rw-r--r--libnm-util/nm-setting-team-port.h79
-rw-r--r--libnm-util/nm-setting-team.c270
-rw-r--r--libnm-util/nm-setting-team.h81
-rw-r--r--libnm-util/nm-setting-vlan.c203
-rw-r--r--libnm-util/nm-setting-vlan.h15
-rw-r--r--libnm-util/nm-setting-vpn.c141
-rw-r--r--libnm-util/nm-setting-vpn.h6
-rw-r--r--libnm-util/nm-setting-wimax.c43
-rw-r--r--libnm-util/nm-setting-wired.c334
-rw-r--r--libnm-util/nm-setting-wired.h26
-rw-r--r--libnm-util/nm-setting-wireless-security.c441
-rw-r--r--libnm-util/nm-setting-wireless-security.h42
-rw-r--r--libnm-util/nm-setting-wireless.c381
-rw-r--r--libnm-util/nm-setting-wireless.h31
-rw-r--r--libnm-util/nm-setting.c568
-rw-r--r--libnm-util/nm-setting.h13
-rw-r--r--libnm-util/nm-utils-enum-types.c105
-rw-r--r--libnm-util/nm-utils-enum-types.h10
-rw-r--r--libnm-util/nm-utils-private.h35
-rw-r--r--libnm-util/nm-utils.c1404
-rw-r--r--libnm-util/nm-utils.h38
-rw-r--r--libnm-util/nm-value-transforms.c594
-rw-r--r--libnm-util/tests/Makefile.am28
-rw-r--r--libnm-util/tests/Makefile.in233
-rw-r--r--libnm-util/tests/certs/Makefile.am3
-rw-r--r--libnm-util/tests/certs/Makefile.in24
-rw-r--r--libnm-util/tests/certs/test-aes-key.pem30
-rw-r--r--libnm-util/tests/test-crypto.c40
-rw-r--r--libnm-util/tests/test-general.c1159
-rw-r--r--libnm-util/tests/test-secrets.c108
-rw-r--r--libnm-util/tests/test-setting-8021x.c5
-rw-r--r--libnm-util/tests/test-setting-dcb.c328
-rw-r--r--libnm-util/tests/test-settings-defaults.c8
-rw-r--r--m4/ax_lib_readline.m4106
-rw-r--r--m4/compiler_warnings.m42
-rw-r--r--m4/gnome-code-coverage.m48
-rw-r--r--m4/gtk-doc.m447
-rw-r--r--man/Makefile.am56
-rw-r--r--man/Makefile.in87
-rw-r--r--man/NetworkManager.8251
-rw-r--r--man/NetworkManager.8.in157
-rw-r--r--man/NetworkManager.conf.5458
-rw-r--r--man/NetworkManager.conf.5.in266
-rw-r--r--man/nm-online.1.in21
-rw-r--r--man/nm-settings.53029
-rw-r--r--man/nm-system-settings.conf.5.in3
-rw-r--r--man/nm-tool.1.in19
-rw-r--r--man/nmcli-examples.5676
-rw-r--r--man/nmcli.1.in881
-rw-r--r--po/POTFILES.in83
-rw-r--r--po/POTFILES.skip1
-rw-r--r--po/as.po8262
-rw-r--r--po/bg.po4
-rw-r--r--po/bn_IN.po2
-rw-r--r--po/ca.po4
-rw-r--r--po/cs.po8
-rw-r--r--po/da.po4
-rw-r--r--po/de.po6925
-rw-r--r--po/el.po4
-rw-r--r--po/en_GB.po4
-rw-r--r--po/eo.po4
-rw-r--r--po/es.po12
-rw-r--r--po/eu.po4
-rw-r--r--po/fi.po2
-rw-r--r--po/fr.po2
-rw-r--r--po/gl.po6
-rw-r--r--po/gu.po6479
-rw-r--r--po/hi.po6230
-rw-r--r--po/hr.po4
-rw-r--r--po/hu.po3018
-rw-r--r--po/id.po4
-rw-r--r--po/it.po6195
-rw-r--r--po/ja.po6049
-rw-r--r--po/kn.po6500
-rw-r--r--po/ko.po4
-rw-r--r--po/lt.po4820
-rw-r--r--po/ml.po1460
-rw-r--r--po/mr.po6869
-rw-r--r--po/or.po6377
-rw-r--r--po/pa.po4
-rw-r--r--po/pl.po6581
-rw-r--r--po/pt_BR.po6332
-rw-r--r--po/ru.po2
-rw-r--r--po/sl.po4
-rw-r--r--po/sr.po4
-rw-r--r--po/sr@latin.po4
-rw-r--r--po/sv.po4
-rw-r--r--po/ta.po7020
-rw-r--r--po/te.po6403
-rw-r--r--po/tr.po2595
-rw-r--r--po/uk.po7350
-rw-r--r--po/zh_CN.po4
-rw-r--r--po/zh_TW.po4
-rw-r--r--policy/Makefile.in21
-rw-r--r--policy/org.freedesktop.NetworkManager.policy.in.in9
-rw-r--r--src/Makefile.am604
-rw-r--r--src/Makefile.in1789
-rw-r--r--src/NetworkManagerUtils.c1151
-rw-r--r--src/NetworkManagerUtils.h46
-rw-r--r--src/bluez-manager/Makefile.am44
-rw-r--r--src/bluez-manager/nm-bluez-manager.h69
-rw-r--r--src/bluez-manager/nm-bluez4-adapter.h69
-rw-r--r--src/config/nm-config-device.c82
-rw-r--r--src/config/nm-config-device.h47
-rw-r--r--src/config/nm-config.c604
-rw-r--r--src/config/nm-config.h78
-rw-r--r--src/config/tests/Makefile.am30
-rw-r--r--src/config/tests/Makefile.in (renamed from src/posix-signals/Makefile.in)238
-rw-r--r--src/config/tests/NetworkManager.conf15
-rw-r--r--src/config/tests/bad.conf1
-rw-r--r--src/config/tests/conf.d/00-overrides.conf11
-rw-r--r--src/config/tests/conf.d/10-more.conf11
-rw-r--r--src/config/tests/conf.d/90-last.conf5
-rw-r--r--src/config/tests/nm-test-device.c101
-rw-r--r--src/config/tests/nm-test-device.h52
-rw-r--r--src/config/tests/test-config.c305
-rw-r--r--src/devices/adsl/Makefile.am63
-rw-r--r--src/devices/adsl/Makefile.in (renamed from src/generated/Makefile.in)285
-rw-r--r--src/devices/adsl/exports.ver7
-rw-r--r--src/devices/adsl/nm-adsl-enum-types.c12
-rw-r--r--src/devices/adsl/nm-adsl-enum-types.h17
-rw-r--r--src/devices/adsl/nm-atm-manager.c266
-rw-r--r--src/devices/adsl/nm-atm-manager.h (renamed from src/nm-rfkill.h)45
-rw-r--r--src/devices/adsl/nm-device-adsl-glue.h73
-rw-r--r--src/devices/adsl/nm-device-adsl.c (renamed from src/nm-device-adsl.c)333
-rw-r--r--src/devices/adsl/nm-device-adsl.h (renamed from src/nm-device-adsl.h)10
-rw-r--r--src/devices/bluetooth/Makefile.am74
-rw-r--r--src/devices/bluetooth/Makefile.in (renamed from src/dns-manager/Makefile.in)297
-rw-r--r--src/devices/bluetooth/exports.ver7
-rw-r--r--src/devices/bluetooth/nm-bluez-common.h (renamed from src/bluez-manager/nm-bluez-common.h)24
-rw-r--r--src/devices/bluetooth/nm-bluez-device.c (renamed from src/bluez-manager/nm-bluez-device.c)619
-rw-r--r--src/devices/bluetooth/nm-bluez-device.h (renamed from src/bluez-manager/nm-bluez-device.h)13
-rw-r--r--src/devices/bluetooth/nm-bluez-manager.c428
-rw-r--r--src/devices/bluetooth/nm-bluez-manager.h44
-rw-r--r--src/devices/bluetooth/nm-bluez4-adapter.c (renamed from src/bluez-manager/nm-bluez4-adapter.c)172
-rw-r--r--src/devices/bluetooth/nm-bluez4-adapter.h69
-rw-r--r--src/devices/bluetooth/nm-bluez4-manager.c (renamed from src/bluez-manager/nm-bluez4-manager.c)139
-rw-r--r--src/devices/bluetooth/nm-bluez4-manager.h62
-rw-r--r--src/devices/bluetooth/nm-bluez5-manager.c (renamed from src/bluez-manager/nm-bluez-manager.c)139
-rw-r--r--src/devices/bluetooth/nm-bluez5-manager.h62
-rw-r--r--src/devices/bluetooth/nm-bt-enum-types.c32
-rw-r--r--src/devices/bluetooth/nm-bt-enum-types.h19
-rw-r--r--src/devices/bluetooth/nm-device-bt-glue.h73
-rw-r--r--src/devices/bluetooth/nm-device-bt.c (renamed from src/nm-device-bt.c)385
-rw-r--r--src/devices/bluetooth/nm-device-bt.h (renamed from src/nm-device-bt.h)7
-rw-r--r--src/devices/nm-device-bond.c612
-rw-r--r--src/devices/nm-device-bond.h (renamed from src/nm-device-bond.h)14
-rw-r--r--src/devices/nm-device-bridge.c588
-rw-r--r--src/devices/nm-device-bridge.h (renamed from src/nm-device-bridge.h)16
-rw-r--r--src/devices/nm-device-ethernet.c (renamed from src/nm-device-ethernet.c)1043
-rw-r--r--src/devices/nm-device-ethernet.h (renamed from src/nm-device-ethernet.h)14
-rw-r--r--src/devices/nm-device-factory.c106
-rw-r--r--src/devices/nm-device-factory.h136
-rw-r--r--src/devices/nm-device-generic.c217
-rw-r--r--src/devices/nm-device-generic.h61
-rw-r--r--src/devices/nm-device-gre.c278
-rw-r--r--src/devices/nm-device-gre.h63
-rw-r--r--src/devices/nm-device-infiniband.c (renamed from src/nm-device-infiniband.c)341
-rw-r--r--src/devices/nm-device-infiniband.h (renamed from src/nm-device-infiniband.h)17
-rw-r--r--src/devices/nm-device-macvlan.c181
-rw-r--r--src/devices/nm-device-macvlan.h56
-rw-r--r--src/devices/nm-device-private.h (renamed from src/nm-device-private.h)32
-rw-r--r--src/devices/nm-device-team.c894
-rw-r--r--src/devices/nm-device-team.h64
-rw-r--r--src/devices/nm-device-tun.c294
-rw-r--r--src/devices/nm-device-tun.h59
-rw-r--r--src/devices/nm-device-veth.c171
-rw-r--r--src/devices/nm-device-veth.h54
-rw-r--r--src/devices/nm-device-vlan.c659
-rw-r--r--src/devices/nm-device-vlan.h (renamed from src/nm-device-vlan.h)14
-rw-r--r--src/devices/nm-device-vxlan.c372
-rw-r--r--src/devices/nm-device-vxlan.h69
-rw-r--r--src/devices/nm-device.c7966
-rw-r--r--src/devices/nm-device.h (renamed from src/nm-device.h)186
-rw-r--r--src/devices/wifi/Makefile.am78
-rw-r--r--src/devices/wifi/Makefile.in (renamed from src/supplicant-manager/Makefile.in)278
-rw-r--r--src/devices/wifi/exports.ver7
-rw-r--r--src/devices/wifi/nm-device-olpc-mesh-glue.h73
-rw-r--r--src/devices/wifi/nm-device-olpc-mesh.c (renamed from src/nm-device-olpc-mesh.c)642
-rw-r--r--src/devices/wifi/nm-device-olpc-mesh.h (renamed from src/nm-device-olpc-mesh.h)8
-rw-r--r--src/devices/wifi/nm-device-wifi-glue.h167
-rw-r--r--src/devices/wifi/nm-device-wifi.c (renamed from src/nm-device-wifi.c)1613
-rw-r--r--src/devices/wifi/nm-device-wifi.h (renamed from src/nm-device-wifi.h)14
-rw-r--r--src/devices/wifi/nm-wifi-ap-utils.c (renamed from src/nm-wifi-ap-utils.c)17
-rw-r--r--src/devices/wifi/nm-wifi-ap-utils.h (renamed from src/nm-wifi-ap-utils.h)0
-rw-r--r--src/devices/wifi/nm-wifi-ap.c (renamed from src/nm-wifi-ap.c)52
-rw-r--r--src/devices/wifi/nm-wifi-ap.h (renamed from src/nm-wifi-ap.h)6
-rw-r--r--src/devices/wifi/nm-wifi-enum-types.c58
-rw-r--r--src/devices/wifi/nm-wifi-enum-types.h21
-rw-r--r--src/devices/wifi/nm-wifi-factory.c89
-rw-r--r--src/devices/wifi/tests/Makefile.am28
-rw-r--r--src/devices/wifi/tests/Makefile.in (renamed from src/bluez-manager/Makefile.in)313
-rw-r--r--src/devices/wifi/tests/test-wifi-ap-utils.c (renamed from src/tests/test-wifi-ap-utils.c)357
-rw-r--r--src/devices/wimax/Makefile.am (renamed from src/wimax/Makefile.am)49
-rw-r--r--src/devices/wimax/Makefile.in (renamed from src/vpn-manager/Makefile.in)260
-rw-r--r--src/devices/wimax/exports.ver7
-rw-r--r--src/devices/wimax/iwmxsdk.c (renamed from src/wimax/iwmxsdk.c)63
-rw-r--r--src/devices/wimax/iwmxsdk.h (renamed from src/wimax/iwmxsdk.h)6
-rw-r--r--src/devices/wimax/nm-device-wimax.c (renamed from src/wimax/nm-device-wimax.c)346
-rw-r--r--src/devices/wimax/nm-device-wimax.h (renamed from src/wimax/nm-device-wimax.h)18
-rw-r--r--src/devices/wimax/nm-wimax-factory.c89
-rw-r--r--src/devices/wimax/nm-wimax-nsp.c (renamed from src/wimax/nm-wimax-nsp.c)31
-rw-r--r--src/devices/wimax/nm-wimax-nsp.h (renamed from src/wimax/nm-wimax-nsp.h)0
-rw-r--r--src/devices/wimax/nm-wimax-types.h (renamed from src/wimax/nm-wimax-types.h)0
-rw-r--r--src/devices/wimax/nm-wimax-util.c (renamed from src/wimax/nm-wimax-util.c)0
-rw-r--r--src/devices/wimax/nm-wimax-util.h (renamed from src/wimax/nm-wimax-util.h)0
-rw-r--r--src/devices/wwan/Makefile.am95
-rw-r--r--src/devices/wwan/Makefile.in (renamed from src/wimax/Makefile.in)260
-rw-r--r--src/devices/wwan/README (renamed from src/modem-manager/README)6
-rw-r--r--src/devices/wwan/exports.ver7
-rw-r--r--src/devices/wwan/nm-device-modem-glue.h73
-rw-r--r--src/devices/wwan/nm-device-modem.c (renamed from src/nm-device-modem.c)362
-rw-r--r--src/devices/wwan/nm-device-modem.h (renamed from src/nm-device-modem.h)8
-rw-r--r--src/devices/wwan/nm-modem-broadband.c (renamed from src/modem-manager/nm-modem-broadband.c)436
-rw-r--r--src/devices/wwan/nm-modem-broadband.h (renamed from src/modem-manager/nm-modem-broadband.h)13
-rw-r--r--src/devices/wwan/nm-modem-enum-types.c64
-rw-r--r--src/devices/wwan/nm-modem-enum-types.h21
-rw-r--r--src/devices/wwan/nm-modem-manager.c (renamed from src/modem-manager/nm-modem-manager.c)248
-rw-r--r--src/devices/wwan/nm-modem-manager.h (renamed from src/modem-manager/nm-modem-manager.h)29
-rw-r--r--src/devices/wwan/nm-modem-old-types.h70
-rw-r--r--src/devices/wwan/nm-modem-old.c1139
-rw-r--r--src/devices/wwan/nm-modem-old.h53
-rw-r--r--src/devices/wwan/nm-modem.c (renamed from src/modem-manager/nm-modem.c)416
-rw-r--r--src/devices/wwan/nm-modem.h (renamed from src/modem-manager/nm-modem.h)88
-rw-r--r--src/devices/wwan/nm-wwan-factory.c136
-rw-r--r--src/devices/wwan/nm-wwan-factory.h (renamed from src/nm-netlink-compat.h)27
-rw-r--r--src/devices/wwan/wwan-exports.ver28
-rw-r--r--src/dhcp-manager/Makefile.am76
-rw-r--r--src/dhcp-manager/Makefile.in505
-rw-r--r--src/dhcp-manager/nm-dhcp-client.c424
-rw-r--r--src/dhcp-manager/nm-dhcp-client.h21
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.c313
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.h10
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient.c284
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient.h4
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.c31
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.h2
-rw-r--r--src/dhcp-manager/nm-dhcp-helper.c (renamed from callouts/nm-dhcp-client-action.c)185
-rw-r--r--src/dhcp-manager/nm-dhcp-helper.conf (renamed from callouts/nm-dhcp-client.conf)0
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.c380
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.h24
-rw-r--r--src/dhcp-manager/tests/Makefile.am29
-rw-r--r--src/dhcp-manager/tests/Makefile.in214
-rw-r--r--src/dhcp-manager/tests/leases/basic.leases31
-rw-r--r--src/dhcp-manager/tests/leases/malformed1.leases15
-rw-r--r--src/dhcp-manager/tests/leases/malformed2.leases15
-rw-r--r--src/dhcp-manager/tests/leases/malformed3.leases15
-rw-r--r--src/dhcp-manager/tests/test-dhcp-dhclient.c237
-rw-r--r--src/dns-manager/Makefile.am35
-rw-r--r--src/dns-manager/nm-dns-dnsmasq.c73
-rw-r--r--src/dns-manager/nm-dns-dnsmasq.h2
-rw-r--r--src/dns-manager/nm-dns-manager.c325
-rw-r--r--src/dns-manager/nm-dns-manager.h28
-rw-r--r--src/dns-manager/nm-dns-plugin.h1
-rw-r--r--src/dns-manager/nm-dns-unbound.c79
-rw-r--r--src/dns-manager/nm-dns-unbound.h44
-rw-r--r--src/dns-manager/nm-dns-utils.c13
-rw-r--r--src/dnsmasq-manager/Makefile.am19
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-manager.c59
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-utils.c77
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-utils.h (renamed from include/nm-test-helpers.h)38
-rw-r--r--src/dnsmasq-manager/tests/Makefile.am23
-rw-r--r--src/dnsmasq-manager/tests/Makefile.in (renamed from src/ip6-manager/Makefile.in)248
-rw-r--r--src/dnsmasq-manager/tests/test-dnsmasq-utils.c115
-rw-r--r--src/firewall-manager/Makefile.am21
-rw-r--r--src/firewall-manager/nm-firewall-manager.c80
-rw-r--r--src/generated/Makefile.am91
-rw-r--r--src/generated/nm-marshal.c744
-rw-r--r--src/generated/nm-marshal.h159
-rw-r--r--src/ip6-manager/Makefile.am27
-rw-r--r--src/ip6-manager/nm-ip6-manager.c1747
-rw-r--r--src/ip6-manager/nm-ip6-manager.h88
-rw-r--r--src/logging/Makefile.am14
-rw-r--r--src/logging/nm-logging.c358
-rw-r--r--src/logging/nm-logging.h101
-rw-r--r--src/main.c338
-rw-r--r--src/modem-manager/Makefile.am43
-rw-r--r--src/modem-manager/Makefile.in789
-rw-r--r--src/modem-manager/nm-modem-cdma.c358
-rw-r--r--src/modem-manager/nm-modem-cdma.h59
-rw-r--r--src/modem-manager/nm-modem-generic.c445
-rw-r--r--src/modem-manager/nm-modem-generic.h69
-rw-r--r--src/modem-manager/nm-modem-gsm.c644
-rw-r--r--src/modem-manager/nm-modem-gsm.h59
-rw-r--r--src/modem-manager/nm-modem-types.h106
-rw-r--r--src/nm-access-point-glue.h73
-rw-r--r--src/nm-activation-request.c266
-rw-r--r--src/nm-activation-request.h14
-rw-r--r--src/nm-active-connection-glue.h73
-rw-r--r--src/nm-active-connection.c668
-rw-r--r--src/nm-active-connection.h62
-rw-r--r--src/nm-agent-manager-glue.h170
-rw-r--r--src/nm-auth-subject.c216
-rw-r--r--src/nm-auth-subject.h70
-rw-r--r--src/nm-call-store.c209
-rw-r--r--src/nm-config.c294
-rw-r--r--src/nm-config.h59
-rw-r--r--src/nm-connection-provider.c54
-rw-r--r--src/nm-connection-provider.h33
-rw-r--r--src/nm-connectivity.c15
-rw-r--r--src/nm-connectivity.h4
-rw-r--r--src/nm-dbus-manager.c652
-rw-r--r--src/nm-dbus-manager.h54
-rw-r--r--src/nm-dcb.c426
-rw-r--r--src/nm-dcb.h100
-rw-r--r--src/nm-device-bond-glue.h73
-rw-r--r--src/nm-device-bond.c526
-rw-r--r--src/nm-device-bridge-glue.h73
-rw-r--r--src/nm-device-bridge.c579
-rw-r--r--src/nm-device-ethernet-glue.h73
-rw-r--r--src/nm-device-factory.h91
-rw-r--r--src/nm-device-generic-glue.h73
-rw-r--r--src/nm-device-glue.h78
-rw-r--r--src/nm-device-gre-glue.h73
-rw-r--r--src/nm-device-infiniband-glue.h73
-rw-r--r--src/nm-device-macvlan-glue.h73
-rw-r--r--src/nm-device-team-glue.h73
-rw-r--r--src/nm-device-tun-glue.h73
-rw-r--r--src/nm-device-veth-glue.h73
-rw-r--r--src/nm-device-vlan-glue.h73
-rw-r--r--src/nm-device-vlan.c777
-rw-r--r--src/nm-device-vxlan-glue.h73
-rw-r--r--src/nm-device-wired.c564
-rw-r--r--src/nm-device-wired.h57
-rw-r--r--src/nm-device.c5706
-rw-r--r--src/nm-dhcp4-config-glue.h73
-rw-r--r--src/nm-dhcp4-config.c26
-rw-r--r--src/nm-dhcp4-config.h2
-rw-r--r--src/nm-dhcp6-config-glue.h73
-rw-r--r--src/nm-dhcp6-config.c26
-rw-r--r--src/nm-dhcp6-config.h2
-rw-r--r--src/nm-dispatcher.c603
-rw-r--r--src/nm-dispatcher.h39
-rw-r--r--src/nm-enum-types.c (renamed from src/generated/nm-enum-types.c)782
-rw-r--r--src/nm-enum-types.h (renamed from src/generated/nm-enum-types.h)128
-rw-r--r--src/nm-hostname-provider.c54
-rw-r--r--src/nm-hostname-provider.h44
-rw-r--r--src/nm-ip4-config-glue.h73
-rw-r--r--src/nm-ip4-config.c1912
-rw-r--r--src/nm-ip4-config.h203
-rw-r--r--src/nm-ip6-config-glue.h73
-rw-r--r--src/nm-ip6-config.c1772
-rw-r--r--src/nm-ip6-config.h167
-rw-r--r--src/nm-manager-auth.c339
-rw-r--r--src/nm-manager-auth.h26
-rw-r--r--src/nm-manager-glue.h416
-rw-r--r--src/nm-manager.c4531
-rw-r--r--src/nm-manager.h22
-rw-r--r--src/nm-netlink-compat.c85
-rw-r--r--src/nm-netlink-monitor.c943
-rw-r--r--src/nm-netlink-monitor.h102
-rw-r--r--src/nm-netlink-utils.c465
-rw-r--r--src/nm-netlink-utils.h83
-rw-r--r--src/nm-policy-hostname.c264
-rw-r--r--src/nm-policy-hostname.h51
-rw-r--r--src/nm-policy-hosts.c95
-rw-r--r--src/nm-policy.c1232
-rw-r--r--src/nm-ppp-manager-glue.h174
-rw-r--r--src/nm-properties-changed-signal.c215
-rw-r--r--src/nm-properties-changed-signal.h7
-rw-r--r--src/nm-rfkill-manager.c422
-rw-r--r--src/nm-rfkill-manager.h72
-rw-r--r--src/nm-session-monitor-ck.c6
-rw-r--r--src/nm-session-monitor-null.c7
-rw-r--r--src/nm-session-monitor-systemd.c29
-rw-r--r--src/nm-settings-connection-glue.h171
-rw-r--r--src/nm-settings-glue.h219
-rw-r--r--src/nm-sleep-monitor-systemd.c146
-rw-r--r--src/nm-sleep-monitor-upower.c6
-rw-r--r--src/nm-system.c2603
-rw-r--r--src/nm-system.h143
-rw-r--r--src/nm-udev-manager.c674
-rw-r--r--src/nm-udev-manager.h74
-rw-r--r--src/nm-vpn-connection-glue.h73
-rw-r--r--src/org.freedesktop.NetworkManager.conf114
-rw-r--r--src/platform/Makefile.am1
-rw-r--r--src/platform/Makefile.in (renamed from src/firewall-manager/Makefile.in)348
-rw-r--r--src/platform/nm-fake-platform.c1352
-rw-r--r--src/platform/nm-fake-platform.h49
-rw-r--r--src/platform/nm-linux-platform.c4180
-rw-r--r--src/platform/nm-linux-platform.h49
-rw-r--r--src/platform/nm-platform.c2618
-rw-r--r--src/platform/nm-platform.h634
-rw-r--r--src/platform/tests/Makefile.am116
-rw-r--r--src/platform/tests/Makefile.in1702
-rw-r--r--src/platform/tests/dump.c136
-rw-r--r--src/platform/tests/monitor.c30
-rw-r--r--src/platform/tests/platform.c897
-rw-r--r--src/platform/tests/test-address.c265
-rw-r--r--src/platform/tests/test-cleanup.c95
-rw-r--r--src/platform/tests/test-common.c174
-rw-r--r--src/platform/tests/test-common.h42
-rw-r--r--src/platform/tests/test-link.c557
-rw-r--r--src/platform/tests/test-route.c255
-rw-r--r--src/platform/wifi/wifi-utils-nl80211.c (renamed from src/wifi/wifi-utils-nl80211.c)210
-rw-r--r--src/platform/wifi/wifi-utils-nl80211.h (renamed from src/wifi/wifi-utils-nl80211.h)0
-rw-r--r--src/platform/wifi/wifi-utils-private.h (renamed from src/wifi/wifi-utils-private.h)5
-rw-r--r--src/platform/wifi/wifi-utils-wext.c (renamed from src/wifi/wifi-utils-wext.c)23
-rw-r--r--src/platform/wifi/wifi-utils-wext.h (renamed from src/wifi/wifi-utils-wext.h)0
-rw-r--r--src/platform/wifi/wifi-utils.c (renamed from src/wifi/wifi-utils.c)28
-rw-r--r--src/platform/wifi/wifi-utils.h (renamed from src/wifi/wifi-utils.h)8
-rw-r--r--src/posix-signals/Makefile.am14
-rw-r--r--src/ppp-manager/Makefile.am46
-rw-r--r--src/ppp-manager/Makefile.in134
-rw-r--r--src/ppp-manager/nm-ppp-manager.c296
-rw-r--r--src/ppp-manager/nm-pppd-plugin.c24
-rw-r--r--src/rdisc/Makefile.am1
-rw-r--r--src/rdisc/Makefile.in753
-rw-r--r--src/rdisc/nm-fake-rdisc.c134
-rw-r--r--src/rdisc/nm-fake-rdisc.h49
-rw-r--r--src/rdisc/nm-lndp-rdisc.c700
-rw-r--r--src/rdisc/nm-lndp-rdisc.h49
-rw-r--r--src/rdisc/nm-rdisc.c191
-rw-r--r--src/rdisc/nm-rdisc.h139
-rw-r--r--src/rdisc/tests/Makefile.am36
-rw-r--r--src/rdisc/tests/Makefile.in (renamed from src/logging/Makefile.in)120
-rw-r--r--src/rdisc/tests/rdisc.c80
-rw-r--r--src/settings/Makefile.am86
-rw-r--r--src/settings/nm-agent-manager.c1022
-rw-r--r--src/settings/nm-agent-manager.h19
-rw-r--r--src/settings/nm-default-wired-connection.c197
-rw-r--r--src/settings/nm-default-wired-connection.h56
-rw-r--r--src/settings/nm-inotify-helper.c15
-rw-r--r--src/settings/nm-secret-agent.c141
-rw-r--r--src/settings/nm-secret-agent.h25
-rw-r--r--src/settings/nm-settings-connection.c793
-rw-r--r--src/settings/nm-settings-connection.h38
-rw-r--r--src/settings/nm-settings-error.h1
-rw-r--r--src/settings/nm-settings.c1223
-rw-r--r--src/settings/nm-settings.h28
-rw-r--r--src/settings/nm-system-config-interface.c57
-rw-r--r--src/settings/nm-system-config-interface.h62
-rw-r--r--src/settings/plugins/Makefile.am2
-rw-r--r--src/settings/plugins/Makefile.in23
-rw-r--r--src/settings/plugins/example/Makefile.am15
-rw-r--r--src/settings/plugins/example/Makefile.in89
-rw-r--r--src/settings/plugins/example/nm-example-connection.c8
-rw-r--r--src/settings/plugins/example/plugin.c147
-rw-r--r--src/settings/plugins/example/writer.c2
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.am17
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.in46
-rw-r--r--src/settings/plugins/ifcfg-rh/common.h30
-rw-r--r--src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c286
-rw-r--r--src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h11
-rw-r--r--src/settings/plugins/ifcfg-rh/plugin.c578
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c2169
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.h12
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.c612
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.h63
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.am56
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.in305
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am43
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in70
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem012
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:22
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:992
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem112
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem1:12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem212
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem2:13
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main1
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb43
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-booleans12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-percent12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-uints12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-default-app-priorities7
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-pgpct-not-10012
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-booleans12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-percent12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-uints12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-fabric6
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-vn2vn6
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-nm-controlled-unrecognized6
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-noip3
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master6
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port5
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port-empty-config4
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-unrecognized7
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-hidden10
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1X-subj-matches17
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1x-ttls-eapgtc13
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-plus-ip26
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-send-hostname12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-static-routes-legacy1
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/route6-test-wired-ipv6-manual3
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c7
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c3967
-rw-r--r--src/settings/plugins/ifcfg-rh/utils.c144
-rw-r--r--src/settings/plugins/ifcfg-rh/utils.h7
-rw-r--r--src/settings/plugins/ifcfg-rh/writer.c729
-rw-r--r--src/settings/plugins/ifcfg-rh/writer.h3
-rw-r--r--src/settings/plugins/ifcfg-suse/Makefile.am19
-rw-r--r--src/settings/plugins/ifcfg-suse/Makefile.in49
-rw-r--r--src/settings/plugins/ifcfg-suse/plugin.c2
-rw-r--r--src/settings/plugins/ifnet/Makefile.am28
-rw-r--r--src/settings/plugins/ifnet/Makefile.in76
-rw-r--r--src/settings/plugins/ifnet/connection_parser.c366
-rw-r--r--src/settings/plugins/ifnet/connection_parser.h13
-rw-r--r--src/settings/plugins/ifnet/errors.c (renamed from src/nm-policy-hosts.h)21
-rw-r--r--src/settings/plugins/ifnet/errors.h30
-rw-r--r--src/settings/plugins/ifnet/net_parser.c95
-rw-r--r--src/settings/plugins/ifnet/net_parser.h1
-rw-r--r--src/settings/plugins/ifnet/net_utils.c165
-rw-r--r--src/settings/plugins/ifnet/net_utils.h4
-rw-r--r--src/settings/plugins/ifnet/nm-ifnet-connection.c118
-rw-r--r--src/settings/plugins/ifnet/nm-ifnet-connection.h6
-rw-r--r--src/settings/plugins/ifnet/plugin.c350
-rw-r--r--src/settings/plugins/ifnet/plugin.h2
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.am32
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.in150
-rw-r--r--src/settings/plugins/ifnet/tests/net.all4
-rw-r--r--src/settings/plugins/ifnet/tests/test_all.c61
-rw-r--r--src/settings/plugins/ifnet/wpa_parser.c28
-rw-r--r--src/settings/plugins/ifupdown/Makefile.am13
-rw-r--r--src/settings/plugins/ifupdown/Makefile.in58
-rw-r--r--src/settings/plugins/ifupdown/interface_parser.c96
-rw-r--r--src/settings/plugins/ifupdown/nm-ifupdown-connection.c17
-rw-r--r--src/settings/plugins/ifupdown/parser.c125
-rw-r--r--src/settings/plugins/ifupdown/plugin.c131
-rw-r--r--src/settings/plugins/ifupdown/tests/Makefile.am22
-rw-r--r--src/settings/plugins/ifupdown/tests/Makefile.in198
-rw-r--r--src/settings/plugins/ifupdown/tests/test-ifupdown.c138
-rw-r--r--src/settings/plugins/ifupdown/tests/test20-source-stanza1
-rw-r--r--src/settings/plugins/ifupdown/tests/test20-source-stanza.eth02
-rw-r--r--src/settings/plugins/ifupdown/tests/test20-source-stanza.eth12
-rw-r--r--src/settings/plugins/keyfile/Makefile.am8
-rw-r--r--src/settings/plugins/keyfile/Makefile.in29
-rw-r--r--src/settings/plugins/keyfile/common.h4
-rw-r--r--src/settings/plugins/keyfile/nm-keyfile-connection.c38
-rw-r--r--src/settings/plugins/keyfile/nm-keyfile-connection.h4
-rw-r--r--src/settings/plugins/keyfile/plugin.c603
-rw-r--r--src/settings/plugins/keyfile/plugin.h2
-rw-r--r--src/settings/plugins/keyfile/reader.c407
-rw-r--r--src/settings/plugins/keyfile/tests/Makefile.am28
-rw-r--r--src/settings/plugins/keyfile/tests/Makefile.in237
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Makefile.am4
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Makefile.in25
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_IB_Old_Format13
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_Old_Format10
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wired_Group_Name13
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wireless_Group_Names16
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection22
-rw-r--r--src/settings/plugins/keyfile/tests/test-keyfile.c545
-rw-r--r--src/settings/plugins/keyfile/utils.c176
-rw-r--r--src/settings/plugins/keyfile/utils.h49
-rw-r--r--src/settings/plugins/keyfile/writer.c337
-rw-r--r--src/settings/tests/Makefile.am13
-rw-r--r--src/settings/tests/Makefile.in188
-rw-r--r--src/settings/tests/test-wired-defname.c26
-rw-r--r--src/supplicant-manager/Makefile.am34
-rw-r--r--src/supplicant-manager/nm-call-store.c111
-rw-r--r--src/supplicant-manager/nm-call-store.h (renamed from src/nm-call-store.h)16
-rw-r--r--src/supplicant-manager/nm-supplicant-config.c127
-rw-r--r--src/supplicant-manager/nm-supplicant-config.h4
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.c507
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.h2
-rw-r--r--src/supplicant-manager/nm-supplicant-manager.c3
-rw-r--r--src/supplicant-manager/nm-supplicant-settings-verify.c3
-rw-r--r--src/supplicant-manager/tests/Makefile.am19
-rw-r--r--src/supplicant-manager/tests/Makefile.in209
-rw-r--r--src/supplicant-manager/tests/test-supplicant-config.c117
-rw-r--r--src/tests/Makefile.am74
-rw-r--r--src/tests/Makefile.in342
-rw-r--r--src/tests/test-dcb.c357
-rw-r--r--src/tests/test-dhcp-options.c296
-rw-r--r--src/tests/test-general.c614
-rw-r--r--src/tests/test-ip4-config.c355
-rw-r--r--src/tests/test-ip6-config.c338
-rw-r--r--src/tests/test-policy-hosts.c176
-rw-r--r--src/tests/test-resolvconf-capture.c226
-rw-r--r--src/vpn-manager/Makefile.am49
-rw-r--r--src/vpn-manager/nm-vpn-connection.c1383
-rw-r--r--src/vpn-manager/nm-vpn-connection.h15
-rw-r--r--src/vpn-manager/nm-vpn-manager.c202
-rw-r--r--src/vpn-manager/nm-vpn-manager.h10
-rw-r--r--src/vpn-manager/nm-vpn-service.c390
-rw-r--r--src/vpn-manager/nm-vpn-service.h18
-rw-r--r--src/wifi/Makefile.am29
-rw-r--r--src/wifi/Makefile.in755
-rw-r--r--src/wimax/nm-wimax-factory.c58
-rw-r--r--test/Makefile.am17
-rw-r--r--test/Makefile.in73
-rw-r--r--test/nm-online.c172
-rw-r--r--test/nm-tool.c795
-rw-r--r--tools/Makefile.am17
-rw-r--r--tools/Makefile.in51
-rw-r--r--tools/generate-settings-spec.c63
-rwxr-xr-xtools/glib-mkenums570
-rw-r--r--tools/manpages-docbook.xsl5
-rw-r--r--tui/Makefile.am126
-rw-r--r--tui/Makefile.in (renamed from src/settings/Makefile.in)581
-rw-r--r--tui/newt/Makefile.am54
-rw-r--r--tui/newt/Makefile.in (renamed from src/dnsmasq-manager/Makefile.in)189
-rw-r--r--tui/newt/nmt-newt-button-box.c385
-rw-r--r--tui/newt/nmt-newt-button-box.h65
-rw-r--r--tui/newt/nmt-newt-button.c260
-rw-r--r--tui/newt/nmt-newt-button.h53
-rw-r--r--tui/newt/nmt-newt-checkbox.c235
-rw-r--r--tui/newt/nmt-newt-checkbox.h53
-rw-r--r--tui/newt/nmt-newt-component.c307
-rw-r--r--tui/newt/nmt-newt-component.h57
-rw-r--r--tui/newt/nmt-newt-container.c252
-rw-r--r--tui/newt/nmt-newt-container.h61
-rw-r--r--tui/newt/nmt-newt-entry-numeric.c213
-rw-r--r--tui/newt/nmt-newt-entry-numeric.h51
-rw-r--r--tui/newt/nmt-newt-entry.c536
-rw-r--r--tui/newt/nmt-newt-entry.h74
-rw-r--r--tui/newt/nmt-newt-form.c743
-rw-r--r--tui/newt/nmt-newt-form.h66
-rw-r--r--tui/newt/nmt-newt-grid.c472
-rw-r--r--tui/newt/nmt-newt-grid.h72
-rw-r--r--tui/newt/nmt-newt-hacks.c103
-rw-r--r--tui/newt/nmt-newt-hacks.h42
-rw-r--r--tui/newt/nmt-newt-label.c323
-rw-r--r--tui/newt/nmt-newt-label.h66
-rw-r--r--tui/newt/nmt-newt-listbox.c543
-rw-r--r--tui/newt/nmt-newt-listbox.h71
-rw-r--r--tui/newt/nmt-newt-popup.c343
-rw-r--r--tui/newt/nmt-newt-popup.h62
-rw-r--r--tui/newt/nmt-newt-section.c408
-rw-r--r--tui/newt/nmt-newt-section.h57
-rw-r--r--tui/newt/nmt-newt-separator.c66
-rw-r--r--tui/newt/nmt-newt-separator.h49
-rw-r--r--tui/newt/nmt-newt-stack.c366
-rw-r--r--tui/newt/nmt-newt-stack.h61
-rw-r--r--tui/newt/nmt-newt-textbox.c292
-rw-r--r--tui/newt/nmt-newt-textbox.h59
-rw-r--r--tui/newt/nmt-newt-toggle-button.c234
-rw-r--r--tui/newt/nmt-newt-toggle-button.h54
-rw-r--r--tui/newt/nmt-newt-types.h50
-rw-r--r--tui/newt/nmt-newt-utils.c392
-rw-r--r--tui/newt/nmt-newt-utils.h53
-rw-r--r--tui/newt/nmt-newt-widget.c664
-rw-r--r--tui/newt/nmt-newt-widget.h118
-rw-r--r--tui/newt/nmt-newt.h39
-rw-r--r--tui/nm-editor-bindings.c1676
-rw-r--r--tui/nm-editor-bindings.h99
-rw-r--r--tui/nm-editor-utils.c423
-rw-r--r--tui/nm-editor-utils.h44
-rw-r--r--tui/nmt-address-list.c284
-rw-r--r--tui/nmt-address-list.h57
-rw-r--r--tui/nmt-connect-connection-list.c720
-rw-r--r--tui/nmt-connect-connection-list.h61
-rw-r--r--tui/nmt-device-entry.c589
-rw-r--r--tui/nmt-device-entry.h61
-rw-r--r--tui/nmt-edit-connection-list.c568
-rw-r--r--tui/nmt-edit-connection-list.h61
-rw-r--r--tui/nmt-editor-page.c227
-rw-r--r--tui/nmt-editor-page.h57
-rw-r--r--tui/nmt-editor.c330
-rw-r--r--tui/nmt-editor.h51
-rw-r--r--tui/nmt-ip-entry.c265
-rw-r--r--tui/nmt-ip-entry.h52
-rw-r--r--tui/nmt-mac-entry.c236
-rw-r--r--tui/nmt-mac-entry.h54
-rw-r--r--tui/nmt-mtu-entry.c191
-rw-r--r--tui/nmt-mtu-entry.h49
-rw-r--r--tui/nmt-page-bond.c436
-rw-r--r--tui/nmt-page-bond.h50
-rw-r--r--tui/nmt-page-bridge-port.c92
-rw-r--r--tui/nmt-page-bridge-port.h49
-rw-r--r--tui/nmt-page-bridge.c153
-rw-r--r--tui/nmt-page-bridge.h50
-rw-r--r--tui/nmt-page-device.c151
-rw-r--r--tui/nmt-page-device.h51
-rw-r--r--tui/nmt-page-ethernet.c97
-rw-r--r--tui/nmt-page-ethernet.h50
-rw-r--r--tui/nmt-page-grid.c458
-rw-r--r--tui/nmt-page-grid.h62
-rw-r--r--tui/nmt-page-infiniband.c107
-rw-r--r--tui/nmt-page-infiniband.h50
-rw-r--r--tui/nmt-page-ip4.c203
-rw-r--r--tui/nmt-page-ip4.h51
-rw-r--r--tui/nmt-page-ip6.c201
-rw-r--r--tui/nmt-page-ip6.h51
-rw-r--r--tui/nmt-page-main.c327
-rw-r--r--tui/nmt-page-main.h51
-rw-r--r--tui/nmt-page-team-port.c125
-rw-r--r--tui/nmt-page-team-port.h49
-rw-r--r--tui/nmt-page-team.c195
-rw-r--r--tui/nmt-page-team.h50
-rw-r--r--tui/nmt-page-vlan.c163
-rw-r--r--tui/nmt-page-vlan.h50
-rw-r--r--tui/nmt-page-wifi.c389
-rw-r--r--tui/nmt-page-wifi.h50
-rw-r--r--tui/nmt-password-dialog.c343
-rw-r--r--tui/nmt-password-dialog.h57
-rw-r--r--tui/nmt-password-fields.c310
-rw-r--r--tui/nmt-password-fields.h55
-rw-r--r--tui/nmt-route-editor.c219
-rw-r--r--tui/nmt-route-editor.h51
-rw-r--r--tui/nmt-route-entry.c323
-rw-r--r--tui/nmt-route-entry.h51
-rw-r--r--tui/nmt-route-table.c395
-rw-r--r--tui/nmt-route-table.h49
-rw-r--r--tui/nmt-secret-agent.c646
-rw-r--r--tui/nmt-secret-agent.h57
-rw-r--r--tui/nmt-slave-list.c264
-rw-r--r--tui/nmt-slave-list.h52
-rw-r--r--tui/nmt-utils.c151
-rw-r--r--tui/nmt-utils.h46
-rw-r--r--tui/nmt-widget-list.c491
-rw-r--r--tui/nmt-widget-list.h69
-rw-r--r--tui/nmtui-connect.c353
-rw-r--r--tui/nmtui-connect.h28
-rw-r--r--tui/nmtui-edit.c505
-rw-r--r--tui/nmtui-edit.h44
-rw-r--r--tui/nmtui-hostname.c124
-rw-r--r--tui/nmtui-hostname.h28
-rw-r--r--tui/nmtui.c310
-rw-r--r--tui/nmtui.h34
-rw-r--r--valgrind.suppressions131
-rw-r--r--vapi/Makefile.in21
1157 files changed, 278204 insertions, 119724 deletions
diff --git a/ChangeLog b/ChangeLog
index b611b3d4f..70a11a288 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -10246,7 +10246,7 @@
for NM service; only emit when state really changes
- Use hash tables correctly so that the key (which was previously owned
by the D-Bus message) now has the same lifetime as the value, since
- the key is now taken from the the NMVPNConnection itself. This
+ the key is now taken from the NMVPNConnection itself. This
really fixes the double-VPN names in the applet
2007-08-13 Dan Williams <dcbw@redhat.com>
diff --git a/Makefile.am b/Makefile.am
index 89a338b0b..b41bfa90f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,7 @@
include $(GLIB_MAKEFILE)
SUBDIRS = \
+ . \
include \
libnm-util \
libnm-glib \
@@ -8,16 +9,19 @@ SUBDIRS = \
src \
callouts \
cli \
+ tui \
tools \
policy \
data \
test \
po \
- man \
docs \
+ man \
examples \
vapi
+@GNOME_CODE_COVERAGE_RULES@
+
EXTRA_DIST = \
CONTRIBUTING \
NetworkManager.pc.in \
@@ -25,10 +29,12 @@ EXTRA_DIST = \
intltool-merge.in \
intltool-update.in \
Makefile.glib \
- autogen.sh
+ autogen.sh \
+ valgrind.suppressions
DISTCHECK_CONFIGURE_FLAGS = \
- --with-tests=yes \
+ --enable-tests=yes \
+ --with-valgrind=no \
--enable-gtk-doc \
--enable-more-warnings=yes \
--with-udev-dir=$$dc_install_base/lib/udev \
@@ -47,6 +53,13 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
CLEANFILES = cscope.in.out cscope.out cscope.po.out
-.PHONY: cscope
cscope:
cscope -b -q -R -Iinclude -ssrc -slibnm-glib -slibnm-util -scli/src;
+
+libgsystem_srcpath := libgsystem
+libgsystem_cflags := $(filter-out -DGLIB_VERSION%,$(GLIB_CFLAGS)) -I$(srcdir)/libgsystem
+libgsystem_libs = $(GLIB_LIBS)
+include libgsystem/Makefile-libgsystem.am
+noinst_LTLIBRARIES = libgsystem.la
+
+.PHONY: cscope
diff --git a/Makefile.in b/Makefile.in
index c111de253..fbbc632b8 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -14,6 +14,24 @@
@SET_MAKE@
+# Copyright (C) 2012 Colin Walters <walters@verbum.org>
+#
+# 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., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
@@ -78,23 +96,22 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = .
-DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
- $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/configure $(am__configure_deps) \
- $(srcdir)/config.h.in \
+DIST_COMMON = $(srcdir)/libgsystem/Makefile-libgsystem.am INSTALL NEWS \
+ README AUTHORS ChangeLog $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(srcdir)/config.h.in \
$(top_srcdir)/initscript/RedHat/NetworkManager.in \
$(top_srcdir)/initscript/Debian/NetworkManager.in \
$(top_srcdir)/initscript/Slackware/rc.networkmanager.in \
$(top_srcdir)/initscript/SUSE/networkmanager.in \
$(top_srcdir)/initscript/Arch/networkmanager.in \
- $(top_srcdir)/initscript/paldo/NetworkManager.in \
$(top_srcdir)/initscript/Mandriva/networkmanager.in \
$(top_srcdir)/initscript/linexa/networkmanager.in \
- $(srcdir)/NetworkManager.pc.in ABOUT-NLS COPYING TODO \
- build-aux/compile build-aux/config.guess \
- build-aux/config.rpath build-aux/config.sub build-aux/depcomp \
- build-aux/install-sh build-aux/missing build-aux/ltmain.sh \
+ $(srcdir)/NetworkManager.pc.in ABOUT-NLS \
+ $(top_srcdir)/build-aux/depcomp COPYING TODO build-aux/compile \
+ build-aux/config.guess build-aux/config.rpath \
+ build-aux/config.sub build-aux/depcomp build-aux/install-sh \
+ build-aux/missing build-aux/ltmain.sh \
$(top_srcdir)/build-aux/compile \
$(top_srcdir)/build-aux/config.guess \
$(top_srcdir)/build-aux/config.rpath \
@@ -102,8 +119,10 @@ DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
$(top_srcdir)/build-aux/install-sh \
$(top_srcdir)/build-aux/ltmain.sh \
$(top_srcdir)/build-aux/missing
+subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -125,10 +144,27 @@ CONFIG_CLEAN_FILES = initscript/RedHat/NetworkManager \
initscript/Debian/NetworkManager \
initscript/Slackware/rc.networkmanager \
initscript/SUSE/networkmanager initscript/Arch/networkmanager \
- initscript/paldo/NetworkManager \
initscript/Mandriva/networkmanager \
initscript/linexa/networkmanager NetworkManager.pc
CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+libgsystem_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_libgsystem_la_OBJECTS = libgsystem_la-gsystem-local-alloc.lo \
+ libgsystem_la-gsystem-console.lo \
+ libgsystem_la-gsystem-file-utils.lo \
+ libgsystem_la-gsystem-shutil.lo libgsystem_la-gsystem-log.lo \
+ libgsystem_la-gsystem-subprocess-context.lo \
+ libgsystem_la-gsystem-subprocess.lo
+libgsystem_la_OBJECTS = $(am_libgsystem_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libgsystem_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libgsystem_la_CFLAGS) \
+ $(CFLAGS) $(libgsystem_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -141,8 +177,30 @@ AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
-SOURCES =
-DIST_SOURCES =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libgsystem_la_SOURCES)
+DIST_SOURCES = $(libgsystem_la_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -282,12 +340,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -312,7 +373,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -357,12 +417,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -379,6 +443,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -406,11 +472,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -425,6 +496,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -487,6 +559,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -497,7 +570,9 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = \
+ . \
include \
libnm-util \
libnm-glib \
@@ -505,27 +580,24 @@ SUBDIRS = \
src \
callouts \
cli \
+ tui \
tools \
policy \
data \
test \
po \
- man \
docs \
+ man \
examples \
vapi
-EXTRA_DIST = \
- CONTRIBUTING \
- NetworkManager.pc.in \
- intltool-extract.in \
- intltool-merge.in \
- intltool-update.in \
- Makefile.glib \
- autogen.sh
-
+EXTRA_DIST = CONTRIBUTING NetworkManager.pc.in intltool-extract.in \
+ intltool-merge.in intltool-update.in Makefile.glib autogen.sh \
+ valgrind.suppressions $(libgsystem_srcpath)/README \
+ $(libgsystem_srcpath)/COPYING
DISTCHECK_CONFIGURE_FLAGS = \
- --with-tests=yes \
+ --enable-tests=yes \
+ --with-valgrind=no \
--enable-gtk-doc \
--enable-more-warnings=yes \
--with-udev-dir=$$dc_install_base/lib/udev \
@@ -540,13 +612,41 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = NetworkManager.pc
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
CLEANFILES = cscope.in.out cscope.out cscope.po.out
+libgsystem_srcpath := libgsystem
+libgsystem_cflags := $(filter-out -DGLIB_VERSION%,$(GLIB_CFLAGS)) -I$(srcdir)/libgsystem
+libgsystem_libs = $(GLIB_LIBS)
+libgsystem_la_SOURCES = \
+ $(libgsystem_srcpath)/gsystem-local-alloc.h \
+ $(libgsystem_srcpath)/gsystem-local-alloc.c \
+ $(libgsystem_srcpath)/gsystem-console.h \
+ $(libgsystem_srcpath)/gsystem-console.c \
+ $(libgsystem_srcpath)/gsystem-file-utils.h \
+ $(libgsystem_srcpath)/gsystem-file-utils.c \
+ $(libgsystem_srcpath)/gsystem-glib-compat.h \
+ $(libgsystem_srcpath)/gsystem-shutil.h \
+ $(libgsystem_srcpath)/gsystem-shutil.c \
+ $(libgsystem_srcpath)/gsystem-log.h \
+ $(libgsystem_srcpath)/gsystem-log.c \
+ $(libgsystem_srcpath)/gsystem-subprocess-context.h \
+ $(libgsystem_srcpath)/gsystem-subprocess-context-private.h \
+ $(libgsystem_srcpath)/gsystem-subprocess-context.c \
+ $(libgsystem_srcpath)/gsystem-subprocess.h \
+ $(libgsystem_srcpath)/gsystem-subprocess.c \
+ $(libgsystem_srcpath)/libgsystem.h \
+ $(NULL)
+
+libgsystem_la_CFLAGS = $(AM_CFLAGS) $(libgsystem_cflags)
+libgsystem_la_LDFLAGS = -avoid-version -Bsymbolic-functions -export-symbols-regex "^gs_" -no-undefined -export-dynamic
+libgsystem_la_LIBADD = $(libgsystem_libs)
+noinst_LTLIBRARIES = libgsystem.la
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/libgsystem/Makefile-libgsystem.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -569,6 +669,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
+$(srcdir)/libgsystem/Makefile-libgsystem.am:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -603,8 +704,6 @@ initscript/SUSE/networkmanager: $(top_builddir)/config.status $(top_srcdir)/init
cd $(top_builddir) && $(SHELL) ./config.status $@
initscript/Arch/networkmanager: $(top_builddir)/config.status $(top_srcdir)/initscript/Arch/networkmanager.in
cd $(top_builddir) && $(SHELL) ./config.status $@
-initscript/paldo/NetworkManager: $(top_builddir)/config.status $(top_srcdir)/initscript/paldo/NetworkManager.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
initscript/Mandriva/networkmanager: $(top_builddir)/config.status $(top_srcdir)/initscript/Mandriva/networkmanager.in
cd $(top_builddir) && $(SHELL) ./config.status $@
initscript/linexa/networkmanager: $(top_builddir)/config.status $(top_srcdir)/initscript/linexa/networkmanager.in
@@ -612,6 +711,104 @@ initscript/linexa/networkmanager: $(top_builddir)/config.status $(top_srcdir)/in
NetworkManager.pc: $(top_builddir)/config.status $(srcdir)/NetworkManager.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libgsystem.la: $(libgsystem_la_OBJECTS) $(libgsystem_la_DEPENDENCIES) $(EXTRA_libgsystem_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgsystem_la_LINK) $(libgsystem_la_OBJECTS) $(libgsystem_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsystem_la-gsystem-console.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsystem_la-gsystem-file-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsystem_la-gsystem-local-alloc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsystem_la-gsystem-log.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsystem_la-gsystem-shutil.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsystem_la-gsystem-subprocess-context.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsystem_la-gsystem-subprocess.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgsystem_la-gsystem-local-alloc.lo: $(libgsystem_srcpath)/gsystem-local-alloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -MT libgsystem_la-gsystem-local-alloc.lo -MD -MP -MF $(DEPDIR)/libgsystem_la-gsystem-local-alloc.Tpo -c -o libgsystem_la-gsystem-local-alloc.lo `test -f '$(libgsystem_srcpath)/gsystem-local-alloc.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-local-alloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsystem_la-gsystem-local-alloc.Tpo $(DEPDIR)/libgsystem_la-gsystem-local-alloc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(libgsystem_srcpath)/gsystem-local-alloc.c' object='libgsystem_la-gsystem-local-alloc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -c -o libgsystem_la-gsystem-local-alloc.lo `test -f '$(libgsystem_srcpath)/gsystem-local-alloc.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-local-alloc.c
+
+libgsystem_la-gsystem-console.lo: $(libgsystem_srcpath)/gsystem-console.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -MT libgsystem_la-gsystem-console.lo -MD -MP -MF $(DEPDIR)/libgsystem_la-gsystem-console.Tpo -c -o libgsystem_la-gsystem-console.lo `test -f '$(libgsystem_srcpath)/gsystem-console.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-console.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsystem_la-gsystem-console.Tpo $(DEPDIR)/libgsystem_la-gsystem-console.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(libgsystem_srcpath)/gsystem-console.c' object='libgsystem_la-gsystem-console.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -c -o libgsystem_la-gsystem-console.lo `test -f '$(libgsystem_srcpath)/gsystem-console.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-console.c
+
+libgsystem_la-gsystem-file-utils.lo: $(libgsystem_srcpath)/gsystem-file-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -MT libgsystem_la-gsystem-file-utils.lo -MD -MP -MF $(DEPDIR)/libgsystem_la-gsystem-file-utils.Tpo -c -o libgsystem_la-gsystem-file-utils.lo `test -f '$(libgsystem_srcpath)/gsystem-file-utils.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-file-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsystem_la-gsystem-file-utils.Tpo $(DEPDIR)/libgsystem_la-gsystem-file-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(libgsystem_srcpath)/gsystem-file-utils.c' object='libgsystem_la-gsystem-file-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -c -o libgsystem_la-gsystem-file-utils.lo `test -f '$(libgsystem_srcpath)/gsystem-file-utils.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-file-utils.c
+
+libgsystem_la-gsystem-shutil.lo: $(libgsystem_srcpath)/gsystem-shutil.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -MT libgsystem_la-gsystem-shutil.lo -MD -MP -MF $(DEPDIR)/libgsystem_la-gsystem-shutil.Tpo -c -o libgsystem_la-gsystem-shutil.lo `test -f '$(libgsystem_srcpath)/gsystem-shutil.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-shutil.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsystem_la-gsystem-shutil.Tpo $(DEPDIR)/libgsystem_la-gsystem-shutil.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(libgsystem_srcpath)/gsystem-shutil.c' object='libgsystem_la-gsystem-shutil.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -c -o libgsystem_la-gsystem-shutil.lo `test -f '$(libgsystem_srcpath)/gsystem-shutil.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-shutil.c
+
+libgsystem_la-gsystem-log.lo: $(libgsystem_srcpath)/gsystem-log.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -MT libgsystem_la-gsystem-log.lo -MD -MP -MF $(DEPDIR)/libgsystem_la-gsystem-log.Tpo -c -o libgsystem_la-gsystem-log.lo `test -f '$(libgsystem_srcpath)/gsystem-log.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-log.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsystem_la-gsystem-log.Tpo $(DEPDIR)/libgsystem_la-gsystem-log.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(libgsystem_srcpath)/gsystem-log.c' object='libgsystem_la-gsystem-log.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -c -o libgsystem_la-gsystem-log.lo `test -f '$(libgsystem_srcpath)/gsystem-log.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-log.c
+
+libgsystem_la-gsystem-subprocess-context.lo: $(libgsystem_srcpath)/gsystem-subprocess-context.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -MT libgsystem_la-gsystem-subprocess-context.lo -MD -MP -MF $(DEPDIR)/libgsystem_la-gsystem-subprocess-context.Tpo -c -o libgsystem_la-gsystem-subprocess-context.lo `test -f '$(libgsystem_srcpath)/gsystem-subprocess-context.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-subprocess-context.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsystem_la-gsystem-subprocess-context.Tpo $(DEPDIR)/libgsystem_la-gsystem-subprocess-context.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(libgsystem_srcpath)/gsystem-subprocess-context.c' object='libgsystem_la-gsystem-subprocess-context.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -c -o libgsystem_la-gsystem-subprocess-context.lo `test -f '$(libgsystem_srcpath)/gsystem-subprocess-context.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-subprocess-context.c
+
+libgsystem_la-gsystem-subprocess.lo: $(libgsystem_srcpath)/gsystem-subprocess.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -MT libgsystem_la-gsystem-subprocess.lo -MD -MP -MF $(DEPDIR)/libgsystem_la-gsystem-subprocess.Tpo -c -o libgsystem_la-gsystem-subprocess.lo `test -f '$(libgsystem_srcpath)/gsystem-subprocess.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-subprocess.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsystem_la-gsystem-subprocess.Tpo $(DEPDIR)/libgsystem_la-gsystem-subprocess.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(libgsystem_srcpath)/gsystem-subprocess.c' object='libgsystem_la-gsystem-subprocess.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsystem_la_CFLAGS) $(CFLAGS) -c -o libgsystem_la-gsystem-subprocess.lo `test -f '$(libgsystem_srcpath)/gsystem-subprocess.c' || echo '$(srcdir)/'`$(libgsystem_srcpath)/gsystem-subprocess.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -927,7 +1124,7 @@ distcleancheck: distclean
exit 1; } >&2
check-am: all-am
check: check-recursive
-all-am: Makefile $(DATA) config.h
+all-am: Makefile $(LTLIBRARIES) $(DATA) config.h
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
@@ -967,13 +1164,15 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
-clean-am: clean-generic clean-libtool mostlyclean-am
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr \
- distclean-libtool distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags
dvi: dvi-recursive
@@ -1018,12 +1217,14 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
pdf: pdf-recursive
@@ -1039,27 +1240,31 @@ uninstall-am: uninstall-pkgconfigDATA
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
am--refresh check check-am clean clean-cscope clean-generic \
- clean-libtool cscope cscopelist-am ctags ctags-am dist \
- dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
- dist-xz dist-zip distcheck distclean distclean-generic \
- distclean-hdr distclean-libtool distclean-tags distcleancheck \
- distdir distuninstallcheck dvi dvi-am html html-am info \
- info-am install install-am install-data install-data-am \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-pkgconfigDATA \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
- uninstall-am uninstall-pkgconfigDATA
+ clean-libtool clean-noinstLTLIBRARIES cscope cscopelist-am \
+ ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
+ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-pkgconfigDATA
include $(GLIB_MAKEFILE)
-.PHONY: cscope
+@GNOME_CODE_COVERAGE_RULES@
+
cscope:
cscope -b -q -R -Iinclude -ssrc -slibnm-glib -slibnm-util -scli/src;
+.PHONY: cscope
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/NEWS b/NEWS
index 5a6ecf7da..6de295203 100644
--- a/NEWS
+++ b/NEWS
@@ -1,122 +1,59 @@
-================================================
-NetworkManager-0.9.8.10
-Overview of changes since NetworkManager-0.9.8.8
-================================================
-
-This is a new stable release of NetworkManager. Notable changes include:
-
-* Fixed two problems that could result in gnome-shell showing
- incorrect icons. (In particular, fixed the problem where the network
- icon would disappear when certain VPNs were activated.)
-* Fixed a bug that allowed a user to disconnect a connection that
- they didn't have permissions on.
-* Dispatcher scripts now receive correct IPv6 addresses, and also
- correct DHCP information on lease-change events.
-* NetworkManager no longer tries to start ModemManager itself on
- systemd-using systems
-* Activating a second ethernet connection while another is already
- active will now not move the default route.
-* Fixed some edge cases where one user could deactivate a connection
- owned by another.
-* Fix handling of dhcp-send-hostname property with ifcfg-rh
-* DHCP now works even if you have a global dhclient.conf that
- specifies a (non-NetworkManager) script to run
-* The dhcpcd backend now requests that dhcpcd only do DHCPv4, fixing
- some WWAN devices that don't react well to seeing IPv6 packets.
-* Fixed the default value of bridge priority
-* The D-Bus policy file has been updated to include the
- NetworkManager-iodine VPN plugin
-* It is possible to specify the path to dnsmasq at build time
-* Removed a GLib 2.32 dependency that accidentally snuck into 0.9.8.8
-* Fixed a bunch of memory leaks
-* Fixed a bunch of miscellaneous crashes
-* Removed some less-useful bits of logging output
-
-
-================================================
-NetworkManager-0.9.8.8
-Overview of changes since NetworkManager-0.9.8.6
-================================================
-
-This is a new stable release of NetworkManager. Notable changes include:
-
-* Fixes to the BlueZ code
-* A few memory leak fixes
-* Minor docs fixes
-
-================================================
-NetworkManager-0.9.8.6
-Overview of changes since NetworkManager-0.9.8.4
-================================================
-
-This is a new stable release of NetworkManager. Notable changes include:
-
-* Now supports BlueZ 5. If you are still using BlueZ 4, configure with
- --enable-bluez4 to disable BlueZ 5 support and enable BlueZ 4 support.
- (It is not possible to build with support for both versions.)
-
-
-================================================
-NetworkManager-0.9.8.4
-Overview of changes since NetworkManager-0.9.8.2
-================================================
-
-This is a new stable release of NetworkManager. Notable changes include:
-
-* Removed some spurious warnings
-* Root clients running outside a login session now have the right permissions
-* WiFi AP mode and EAP-FAST support are now detected correctly
-* Bonding config removes inappropriate options when switching modes
-* Fix reading of bond connections with keyfile plugin
-* Fix hang when dbus-daemon restarts
-* Fix crash when VPN disconnection fails
-* The dispatcher now exposes IPv6 VPN info, and IPv4/IPv6 DNS search domains
-* Build fix to support dhcpcd 6.x
-* Fix crash on startup when no dhcp client is available
-* Fix device descriptions when using the latest udev
-* Fix some possible obscure problems at startup
-* Always clear the default route correctly when disconnecting mobile broadband
-* Keyfile plugin now ignores more emacs temporary files
-* When using dnsmasq, pass all nameservers to it, not just the first
-* Kill dhclient if nm-dhcp-client-action encounters a fatal error
-* Fix dispatcher systemd unit install
-* Make ifcfg-rh VLAN parsing match initscripts better
-* Change threshold for WiFi background scanning under WPA Enterprise
-* Fix crash when deleting a currently-active connection
-* Fix ifcfg-rh's handling of IPV6_DEFAULTGW
-* Fix manager State transitions when connectivity checking is enabled
-* Add Connectivity property to distinguish portals from "limited connectivity"
-* Add PrimaryConnection and ActivatingConnection properties to simplify UI code
-* Old connection files containing UUIDs without hyphens work again
-
-
==============================================
-NetworkManager-0.9.8.2
+NetworkManager-0.9.10
Overview of changes since NetworkManager-0.9.8
==============================================
This is a new stable release of NetworkManager. Notable changes include:
-* Memory leak fixes
-* Ensure the ifcfg-rh plugin saves the bridging STP setting correctly
-* Also request static routes from DHCP servers
-* Fix crash when dbus-daemon restarts
-* Look harder for the machine ID and don't crash if we don't have one
-* Copy DHCP leasefiles from the previous location if necessary
-* Wait up to 120 seconds for modems to connect
-* Don't crash for PPPoE connections with no wired setting
-* Fix AvailableConnections for some WiFi connections
-* Ensure new available connections generate the PropertiesChanged signal
-* Ensure the keyfile plugin reads all-default VLAN connections correctly
-* Suppress the kernel's automatic creation of bond0
-* Make the SecretAgent API introspectable for bindings
-* Ensure ActiveConnections get torn down when device is unavailable
-* Ensure ifupdown plugin rechecks unmanaged devices on interface changes
-* Don't prematurely think IPv6 has succeeded due to left-over addresses
-* Fix various systemd issues and add service file for the dispatcher
-* Updates for new ModemManager API changes
-* Fix crash on Wi-Fi when IP configuration times out
-
+* Added a new curses-based client called "nmtui" for easier console operation
+* Added interactive connection editing and creation mode to nmcli with detailed
+ help and tab completion support
+* nmcli bash completion has been greatly improved
+* Added support for Data Center Bridging (DCB) and FibreChannel over Ethernet (FCoE)
+* IPv6 autoconfiguration is now done in userspace with libndp instead of the kernel
+* The D-Bus daemon is no longer required for root-only operation
+* WiFi, ADSL, WWAN, and Bluetooth are now optional plugins, reducing install size
+* Added support for Infiniband Partitions
+* Network connection files are no longer watched by default, use "nmcli con reload"
+ to notice changes made externally or set "monitor-connection-files=true" in
+ NetworkManager.conf's [main] section
+* Connections can now be locked to interface names in addition to hardware/MAC addresses
+* A new "ignore-carrier" configuration option is available to ignore the carrier
+ on selected interfaces
+* A new "dns=none" option has been added to suppress changes to /etc/resolv.conf
+* Changes made to IP addresses, IP routes, and master/slave relationships from
+ external tools are now recognized and reflected in the D-Bus API
+* Assuming the existing configuration of interfaces without changing that
+ configuration is now more reliable
+* The 'root' user is no longer subject to PolicyKit access controls and usage
+ of D-Bus "at_console" permissions has been removed
+* Configuration file snippets can be dropped in /etc/NetworkManager/conf.d to
+ change smaller sets of configuration options
+* Added IP-level support for more software/virtual interfaces types including
+ GRE, macvlan, macvtap, tun, tap, veth, and vxlan interfaces
+* All network interfaces known to the kernel are now exposed through
+ the D-Bus interface
+* Improved support for routing-only VPNs like openswan/libreswan/strongswan
+* Added support for "temporary" connections which are not saved to disk until
+ requested
+* Added WWAN autoconnect support and fixed issues with airplane mode handling
+* NetworkManager-wait-online systemd service behavior is more reliable
+* The dispatcher timeout has increased to 10 minutes, and new "pre-up" and
+ "pre-down" events have been added which block activation until complete
+* NetworkManager no longer prevents Wake-on-LAN functionality from working
+* PPPoE now requires userland "rp-pppoe" to work around kernel bugs with
+ that prevent detecting server-side termination of the PPP link
+* An ARP announcement is now sent after IPv4 addresses are configured
+* Added a DNS plugin for dnssec-trigger for better DNSSEC operation
+* More properties are now exposed via the D-Bus properties interface in
+ addition to getter/setter functions
+* Added support for custom IP address ranges for Shared connections
+* Fatal connection failures now block automatic reconnection more reliably
+* VPN connection IP details are now available via the D-Bus interface
+* VPN plugins can now request additional/new secrets from the user during the
+ connection process
+* 'veth' interfaces are now unmanaged by default to cooperate better with
+ external tools
==============================================
NetworkManager-0.9.8
@@ -152,21 +89,6 @@ This is a new stable release of NetworkManager. Notable changes include:
* Fix canceling secrets requests in GUI agents
* Always enable Proactive Key Caching (PKC, also called OKC) for WPA Enterprise
WiFi configurations
-* libnl 3.2.7 or later is required
-* The internal crashdump handling has been removed
-* A DHCPv6 DUID is now generated from /etc/machine-id and sent to the DHCPv6 server
- if not overridden by an administrator-defined DUID
-* Bond interfaces now wait for a ready slave before starting automatic IP configuration
-* The kernel WiFi rfkill state is now synced to the user-requested WirelessEnabled
- state at startup
-* Fix issue with duplicate ActiveConnection objects if a connection was reactivated
- on a device
-* Fix race when looking up hostname and concurrently updating DNS
-* Always load the 'keyfile' settings plugin, even if no plugins are specified
-* Add a new WiFi device ADHOC capability; not all devices/drivers support IBSS mode
-* Fix an issue with quick wpa_supplicant restarts not being noticed
-* Expose the AvailableConnections property through libnm-glib
-* Fix usage of libnm-glib's NMRemoteConnection from GObject Introspection bindings
==============================================
diff --git a/TODO b/TODO
index 2e32f9147..113310309 100644
--- a/TODO
+++ b/TODO
@@ -254,6 +254,14 @@ network connections change. NetworkManager is a perfect place to do this since
it tracks which network connections are active, and it already queries the
network for automatic proxy configuration via DHCP and WPAD.
+However, proxy handling is complicated and may require use of Javascript to
+parse PAC files provided by WPAD, and this is not something NetworkManager
+should do itself. Instead, that should be left to "proxy handlers", or external
+utilities like libproxy or pacrunner that take raw proxy information, parse it,
+and tell applications what proxy server to use for a specific network resource.
+NetworkManager should provide all the proxy information it can find to these
+external proxy handlers via the D-Bus interface and dispatcher scripts.
+
We should add a new NMSetting subclass called NMSettingProxy that holds
necessary proxy configuration. The properties of this setting should be a
superset of what is provided in the Firefox proxy configuration screen and the
@@ -281,22 +289,19 @@ Proxy control panel; this should include at a minimum:
After completing IP configuration but still during the NM_DEVICE_STATE_IP_CONFIG
activation stage, NetworkManager would merge the automatically supplied proxy
configuration (from DHCP's WPAD option) with user-provided overrides from the
-NMSettingProxy and send the results to the system. The 'default' connection's
-proxy configuration would be preferred, so we'd have to update proxy
-configuration from nm-policy.c the same time we update DNS information and the
-default route.
-
-The merged proxy configuration would then be sent to the system. There is no
-canonical proxy daemon in-use, so we should have plugins (if not separate
-shared libraries, then certainly encapsulated source files that implement a
-common glib GInterface or are subclasses of eg a parent NMProxyHandler class)
-that handle different system proxy handlers. Some of the proxy handlers are:
-
- libproxy: need to figure out how it gets proxy info and have NM write merged
- proxy config out to that location
- pacrunner: a D-Bus enabled daemon, NM would call D-Bus methods of the
- pacrunner service with the proxy information
- GNOME/KDE: how do these desktop environments retrieve proxy configuration?
+NMSettingProxy export the resulting proxy configuration via D-Bus and dispatcher
+scripts. The 'default' connection's proxy configuration would be preferred, so
+we'd have to update proxy configuration from nm-policy.c the same time we update
+DNS information and the default route.
+
+Merged proxy information should be exposed in two places. First, it should be
+exported over D-Bus as a property of the org.freedesktop.NetworkManager.Device
+interface. This property should be named "ProxyInfo" and should have the
+D-Bus signature "a{sv}" (eg, dictionary) and should mirror the properties from
+the NMSettingProxy object.
+
+Second, it should be exported via the dispatcher to dispatcher scripts when
+with the "up" and "down" events.
* Better Tablet/Mobile Behavior
diff --git a/aclocal.m4 b/aclocal.m4
index 2042a9e79..ca9f86f32 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1369,6 +1369,7 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+m4_include([m4/ax_lib_readline.m4])
m4_include([m4/compiler_warnings.m4])
m4_include([m4/gettext.m4])
m4_include([m4/gnome-code-coverage.m4])
diff --git a/autogen.sh b/autogen.sh
index ef6d20f5e..1b56207af 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,8 +1,15 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
+set -e
+
srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
+if test -z "$srcdir"; then
+ srcdir=.
+fi
+
+olddir=`pwd`
+
REQUIRED_AUTOMAKE_VERSION=1.9
PKG_NAME=NetworkManager
@@ -13,12 +20,20 @@ PKG_NAME=NetworkManager
exit 1
}
-(cd $srcdir;
- gtkdocize || exit 1
- autopoint --force
- AUTOPOINT='intltoolize --automake --copy' autoreconf --force --install --verbose
-)
+cd $srcdir
+
+# Fetch submodules if needed
+if test -d $srcdir/.git; then
+ echo "+ Setting up submodules"
+ git submodule init
+ git submodule update
+fi
+
+gtkdocize
+autopoint --force
+AUTOPOINT='intltoolize --automake --copy' autoreconf --force --install --verbose
+cd $olddir
if test -z "$NOCONFIGURE"; then
- $srcdir/configure --enable-maintainer-mode "$@"
+ exec $srcdir/configure --enable-maintainer-mode "$@"
fi
diff --git a/callouts/Makefile.am b/callouts/Makefile.am
index b27fdd79f..a8c9026fe 100644
--- a/callouts/Makefile.am
+++ b/callouts/Makefile.am
@@ -1,5 +1,17 @@
SUBDIRS = . tests
+AM_CPPFLAGS = \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/libnm-util \
+ -I${top_builddir}/libnm-util \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DNMCONFDIR=\"$(nmconfdir)\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DLIBEXECDIR=\"$(libexecdir)\"
+
###########################################
# Test libraries
###########################################
@@ -10,58 +22,29 @@ noinst_LTLIBRARIES = \
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = \
- nm-dhcp-client.conf \
nm-dispatcher.conf \
nm-avahi-autoipd.conf
libexec_PROGRAMS = \
- nm-dhcp-client.action \
- nm-dispatcher.action \
+ nm-dispatcher \
nm-avahi-autoipd.action
-nm_dhcp_client_action_SOURCES = \
- nm-dhcp-client-action.c
-
-nm_dhcp_client_action_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- -DNMCONFDIR=\"$(nmconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
-nm_dhcp_client_action_LDADD = $(DBUS_LIBS)
-
nm_avahi_autoipd_action_SOURCES = \
nm-avahi-autoipd-action.c
-nm_avahi_autoipd_action_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
nm_avahi_autoipd_action_LDADD = \
$(DBUS_LIBS) \
$(GLIB_LIBS)
-nm_dispatcher_action_SOURCES = \
- nm-dispatcher-action.c \
- nm-dispatcher-action.h \
+nm_dispatcher_SOURCES = \
+ nm-dispatcher.c \
+ nm-dispatcher-api.h \
nm-dispatcher-utils.c \
nm-dispatcher-utils.h
-nm_dispatcher_action_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNMCONFDIR=\"$(nmconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
-nm_dispatcher_action_LDADD = \
+nm_dispatcher_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(DBUS_LIBS) \
$(GLIB_LIBS)
@@ -78,12 +61,7 @@ libtest_dispatcher_envp_la_SOURCES = \
nm-dispatcher-utils.h
libtest_dispatcher_envp_la_CPPFLAGS = \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS)
+ $(AM_CPPFLAGS)
libtest_dispatcher_envp_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
@@ -110,6 +88,8 @@ edit = @sed \
dispatcherdir=$(sysconfdir)/NetworkManager/dispatcher.d
install-data-hook:
$(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)
+ $(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)/pre-down.d
+ $(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)/pre-up.d
BUILT_SOURCES = nm-dispatcher-glue.h
diff --git a/callouts/Makefile.in b/callouts/Makefile.in
index 7a58e3986..06abda447 100644
--- a/callouts/Makefile.in
+++ b/callouts/Makefile.in
@@ -80,13 +80,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-libexec_PROGRAMS = nm-dhcp-client.action$(EXEEXT) \
- nm-dispatcher.action$(EXEEXT) nm-avahi-autoipd.action$(EXEEXT)
+libexec_PROGRAMS = nm-dispatcher$(EXEEXT) \
+ nm-avahi-autoipd.action$(EXEEXT)
subdir = callouts
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -122,22 +123,16 @@ am__installdirs = "$(DESTDIR)$(libexecdir)" \
"$(DESTDIR)$(udevrulesdir)"
PROGRAMS = $(libexec_PROGRAMS)
am_nm_avahi_autoipd_action_OBJECTS = \
- nm_avahi_autoipd_action-nm-avahi-autoipd-action.$(OBJEXT)
+ nm-avahi-autoipd-action.$(OBJEXT)
nm_avahi_autoipd_action_OBJECTS = \
$(am_nm_avahi_autoipd_action_OBJECTS)
nm_avahi_autoipd_action_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-am_nm_dhcp_client_action_OBJECTS = \
- nm_dhcp_client_action-nm-dhcp-client-action.$(OBJEXT)
-nm_dhcp_client_action_OBJECTS = $(am_nm_dhcp_client_action_OBJECTS)
-nm_dhcp_client_action_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_nm_dispatcher_action_OBJECTS = \
- nm_dispatcher_action-nm-dispatcher-action.$(OBJEXT) \
- nm_dispatcher_action-nm-dispatcher-utils.$(OBJEXT)
-nm_dispatcher_action_OBJECTS = $(am_nm_dispatcher_action_OBJECTS)
-nm_dispatcher_action_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
+am_nm_dispatcher_OBJECTS = nm-dispatcher.$(OBJEXT) \
+ nm-dispatcher-utils.$(OBJEXT)
+nm_dispatcher_OBJECTS = $(am_nm_dispatcher_OBJECTS)
+nm_dispatcher_DEPENDENCIES = $(top_builddir)/libnm-util/libnm-util.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -173,13 +168,9 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libtest_dispatcher_envp_la_SOURCES) \
- $(nm_avahi_autoipd_action_SOURCES) \
- $(nm_dhcp_client_action_SOURCES) \
- $(nm_dispatcher_action_SOURCES)
+ $(nm_avahi_autoipd_action_SOURCES) $(nm_dispatcher_SOURCES)
DIST_SOURCES = $(libtest_dispatcher_envp_la_SOURCES) \
- $(nm_avahi_autoipd_action_SOURCES) \
- $(nm_dhcp_client_action_SOURCES) \
- $(nm_dispatcher_action_SOURCES)
+ $(nm_avahi_autoipd_action_SOURCES) $(nm_dispatcher_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -300,12 +291,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -330,7 +324,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -375,12 +368,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -397,6 +394,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -424,11 +423,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -443,6 +447,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -505,6 +510,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -515,7 +521,20 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
+AM_CPPFLAGS = \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/libnm-util \
+ -I${top_builddir}/libnm-util \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DNMCONFDIR=\"$(nmconfdir)\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DLIBEXECDIR=\"$(libexecdir)\"
+
###########################################
# Test libraries
@@ -525,50 +544,23 @@ noinst_LTLIBRARIES = \
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = \
- nm-dhcp-client.conf \
nm-dispatcher.conf \
nm-avahi-autoipd.conf
-nm_dhcp_client_action_SOURCES = \
- nm-dhcp-client-action.c
-
-nm_dhcp_client_action_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- -DNMCONFDIR=\"$(nmconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
-nm_dhcp_client_action_LDADD = $(DBUS_LIBS)
nm_avahi_autoipd_action_SOURCES = \
nm-avahi-autoipd-action.c
-nm_avahi_autoipd_action_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
nm_avahi_autoipd_action_LDADD = \
$(DBUS_LIBS) \
$(GLIB_LIBS)
-nm_dispatcher_action_SOURCES = \
- nm-dispatcher-action.c \
- nm-dispatcher-action.h \
+nm_dispatcher_SOURCES = \
+ nm-dispatcher.c \
+ nm-dispatcher-api.h \
nm-dispatcher-utils.c \
nm-dispatcher-utils.h
-nm_dispatcher_action_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNMCONFDIR=\"$(nmconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
-nm_dispatcher_action_LDADD = \
+nm_dispatcher_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(DBUS_LIBS) \
$(GLIB_LIBS)
@@ -582,12 +574,7 @@ libtest_dispatcher_envp_la_SOURCES = \
nm-dispatcher-utils.h
libtest_dispatcher_envp_la_CPPFLAGS = \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS)
+ $(AM_CPPFLAGS)
libtest_dispatcher_envp_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
@@ -717,13 +704,9 @@ nm-avahi-autoipd.action$(EXEEXT): $(nm_avahi_autoipd_action_OBJECTS) $(nm_avahi_
@rm -f nm-avahi-autoipd.action$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(nm_avahi_autoipd_action_OBJECTS) $(nm_avahi_autoipd_action_LDADD) $(LIBS)
-nm-dhcp-client.action$(EXEEXT): $(nm_dhcp_client_action_OBJECTS) $(nm_dhcp_client_action_DEPENDENCIES) $(EXTRA_nm_dhcp_client_action_DEPENDENCIES)
- @rm -f nm-dhcp-client.action$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(nm_dhcp_client_action_OBJECTS) $(nm_dhcp_client_action_LDADD) $(LIBS)
-
-nm-dispatcher.action$(EXEEXT): $(nm_dispatcher_action_OBJECTS) $(nm_dispatcher_action_DEPENDENCIES) $(EXTRA_nm_dispatcher_action_DEPENDENCIES)
- @rm -f nm-dispatcher.action$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(nm_dispatcher_action_OBJECTS) $(nm_dispatcher_action_LDADD) $(LIBS)
+nm-dispatcher$(EXEEXT): $(nm_dispatcher_OBJECTS) $(nm_dispatcher_DEPENDENCIES) $(EXTRA_nm_dispatcher_DEPENDENCIES)
+ @rm -f nm-dispatcher$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(nm_dispatcher_OBJECTS) $(nm_dispatcher_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -732,10 +715,9 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_dispatcher_envp_la-nm-dispatcher-utils.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm_avahi_autoipd_action-nm-avahi-autoipd-action.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm_dhcp_client_action-nm-dhcp-client-action.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm_dispatcher_action-nm-dispatcher-action.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm_dispatcher_action-nm-dispatcher-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-avahi-autoipd-action.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dispatcher-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dispatcher.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -765,62 +747,6 @@ libtest_dispatcher_envp_la-nm-dispatcher-utils.lo: nm-dispatcher-utils.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dispatcher_envp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_dispatcher_envp_la-nm-dispatcher-utils.lo `test -f 'nm-dispatcher-utils.c' || echo '$(srcdir)/'`nm-dispatcher-utils.c
-nm_avahi_autoipd_action-nm-avahi-autoipd-action.o: nm-avahi-autoipd-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_avahi_autoipd_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_avahi_autoipd_action-nm-avahi-autoipd-action.o -MD -MP -MF $(DEPDIR)/nm_avahi_autoipd_action-nm-avahi-autoipd-action.Tpo -c -o nm_avahi_autoipd_action-nm-avahi-autoipd-action.o `test -f 'nm-avahi-autoipd-action.c' || echo '$(srcdir)/'`nm-avahi-autoipd-action.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_avahi_autoipd_action-nm-avahi-autoipd-action.Tpo $(DEPDIR)/nm_avahi_autoipd_action-nm-avahi-autoipd-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-avahi-autoipd-action.c' object='nm_avahi_autoipd_action-nm-avahi-autoipd-action.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_avahi_autoipd_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_avahi_autoipd_action-nm-avahi-autoipd-action.o `test -f 'nm-avahi-autoipd-action.c' || echo '$(srcdir)/'`nm-avahi-autoipd-action.c
-
-nm_avahi_autoipd_action-nm-avahi-autoipd-action.obj: nm-avahi-autoipd-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_avahi_autoipd_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_avahi_autoipd_action-nm-avahi-autoipd-action.obj -MD -MP -MF $(DEPDIR)/nm_avahi_autoipd_action-nm-avahi-autoipd-action.Tpo -c -o nm_avahi_autoipd_action-nm-avahi-autoipd-action.obj `if test -f 'nm-avahi-autoipd-action.c'; then $(CYGPATH_W) 'nm-avahi-autoipd-action.c'; else $(CYGPATH_W) '$(srcdir)/nm-avahi-autoipd-action.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_avahi_autoipd_action-nm-avahi-autoipd-action.Tpo $(DEPDIR)/nm_avahi_autoipd_action-nm-avahi-autoipd-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-avahi-autoipd-action.c' object='nm_avahi_autoipd_action-nm-avahi-autoipd-action.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_avahi_autoipd_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_avahi_autoipd_action-nm-avahi-autoipd-action.obj `if test -f 'nm-avahi-autoipd-action.c'; then $(CYGPATH_W) 'nm-avahi-autoipd-action.c'; else $(CYGPATH_W) '$(srcdir)/nm-avahi-autoipd-action.c'; fi`
-
-nm_dhcp_client_action-nm-dhcp-client-action.o: nm-dhcp-client-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_client_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dhcp_client_action-nm-dhcp-client-action.o -MD -MP -MF $(DEPDIR)/nm_dhcp_client_action-nm-dhcp-client-action.Tpo -c -o nm_dhcp_client_action-nm-dhcp-client-action.o `test -f 'nm-dhcp-client-action.c' || echo '$(srcdir)/'`nm-dhcp-client-action.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dhcp_client_action-nm-dhcp-client-action.Tpo $(DEPDIR)/nm_dhcp_client_action-nm-dhcp-client-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-client-action.c' object='nm_dhcp_client_action-nm-dhcp-client-action.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_client_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dhcp_client_action-nm-dhcp-client-action.o `test -f 'nm-dhcp-client-action.c' || echo '$(srcdir)/'`nm-dhcp-client-action.c
-
-nm_dhcp_client_action-nm-dhcp-client-action.obj: nm-dhcp-client-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_client_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dhcp_client_action-nm-dhcp-client-action.obj -MD -MP -MF $(DEPDIR)/nm_dhcp_client_action-nm-dhcp-client-action.Tpo -c -o nm_dhcp_client_action-nm-dhcp-client-action.obj `if test -f 'nm-dhcp-client-action.c'; then $(CYGPATH_W) 'nm-dhcp-client-action.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp-client-action.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dhcp_client_action-nm-dhcp-client-action.Tpo $(DEPDIR)/nm_dhcp_client_action-nm-dhcp-client-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-client-action.c' object='nm_dhcp_client_action-nm-dhcp-client-action.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_client_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dhcp_client_action-nm-dhcp-client-action.obj `if test -f 'nm-dhcp-client-action.c'; then $(CYGPATH_W) 'nm-dhcp-client-action.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp-client-action.c'; fi`
-
-nm_dispatcher_action-nm-dispatcher-action.o: nm-dispatcher-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dispatcher_action-nm-dispatcher-action.o -MD -MP -MF $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-action.Tpo -c -o nm_dispatcher_action-nm-dispatcher-action.o `test -f 'nm-dispatcher-action.c' || echo '$(srcdir)/'`nm-dispatcher-action.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-action.Tpo $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dispatcher-action.c' object='nm_dispatcher_action-nm-dispatcher-action.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dispatcher_action-nm-dispatcher-action.o `test -f 'nm-dispatcher-action.c' || echo '$(srcdir)/'`nm-dispatcher-action.c
-
-nm_dispatcher_action-nm-dispatcher-action.obj: nm-dispatcher-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dispatcher_action-nm-dispatcher-action.obj -MD -MP -MF $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-action.Tpo -c -o nm_dispatcher_action-nm-dispatcher-action.obj `if test -f 'nm-dispatcher-action.c'; then $(CYGPATH_W) 'nm-dispatcher-action.c'; else $(CYGPATH_W) '$(srcdir)/nm-dispatcher-action.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-action.Tpo $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dispatcher-action.c' object='nm_dispatcher_action-nm-dispatcher-action.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dispatcher_action-nm-dispatcher-action.obj `if test -f 'nm-dispatcher-action.c'; then $(CYGPATH_W) 'nm-dispatcher-action.c'; else $(CYGPATH_W) '$(srcdir)/nm-dispatcher-action.c'; fi`
-
-nm_dispatcher_action-nm-dispatcher-utils.o: nm-dispatcher-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dispatcher_action-nm-dispatcher-utils.o -MD -MP -MF $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-utils.Tpo -c -o nm_dispatcher_action-nm-dispatcher-utils.o `test -f 'nm-dispatcher-utils.c' || echo '$(srcdir)/'`nm-dispatcher-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-utils.Tpo $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dispatcher-utils.c' object='nm_dispatcher_action-nm-dispatcher-utils.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dispatcher_action-nm-dispatcher-utils.o `test -f 'nm-dispatcher-utils.c' || echo '$(srcdir)/'`nm-dispatcher-utils.c
-
-nm_dispatcher_action-nm-dispatcher-utils.obj: nm-dispatcher-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dispatcher_action-nm-dispatcher-utils.obj -MD -MP -MF $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-utils.Tpo -c -o nm_dispatcher_action-nm-dispatcher-utils.obj `if test -f 'nm-dispatcher-utils.c'; then $(CYGPATH_W) 'nm-dispatcher-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-dispatcher-utils.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-utils.Tpo $(DEPDIR)/nm_dispatcher_action-nm-dispatcher-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dispatcher-utils.c' object='nm_dispatcher_action-nm-dispatcher-utils.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dispatcher_action_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dispatcher_action-nm-dispatcher-utils.obj `if test -f 'nm-dispatcher-utils.c'; then $(CYGPATH_W) 'nm-dispatcher-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-dispatcher-utils.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
@@ -1190,6 +1116,8 @@ nm-dispatcher-glue.h: nm-dispatcher.xml
$(edit) $< >$@
install-data-hook:
$(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)
+ $(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)/pre-down.d
+ $(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)/pre-up.d
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/callouts/nm-avahi-autoipd-action.c b/callouts/nm-avahi-autoipd-action.c
index 440efadee..f84eed712 100644
--- a/callouts/nm-avahi-autoipd-action.c
+++ b/callouts/nm-avahi-autoipd-action.c
@@ -90,7 +90,9 @@ main (int argc, char *argv[])
dbus_bool_t result;
char *event, *iface, *address;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
if (argc != 4) {
fprintf (stderr, "Error: expected 3 arguments (event, interface, address).\n");
diff --git a/callouts/nm-dispatcher-action.h b/callouts/nm-dispatcher-api.h
index 9fea487ad..03e40f775 100644
--- a/callouts/nm-dispatcher-action.h
+++ b/callouts/nm-dispatcher-api.h
@@ -20,6 +20,10 @@
#include <dbus/dbus-glib.h>
+#define NMD_SCRIPT_DIR_DEFAULT NMCONFDIR "/dispatcher.d"
+#define NMD_SCRIPT_DIR_PRE_UP NMD_SCRIPT_DIR_DEFAULT "/pre-up.d"
+#define NMD_SCRIPT_DIR_PRE_DOWN NMD_SCRIPT_DIR_DEFAULT "/pre-down.d"
+
/* dbus-glib types for dispatcher call return value */
#define DISPATCHER_TYPE_RESULT (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_INVALID))
#define DISPATCHER_TYPE_RESULT_ARRAY (dbus_g_type_get_collection ("GPtrArray", DISPATCHER_TYPE_RESULT))
@@ -36,6 +40,19 @@
#define NMD_DEVICE_PROPS_STATE "state"
#define NMD_DEVICE_PROPS_PATH "path"
+/* Actions */
+#define NMD_ACTION_HOSTNAME "hostname"
+#define NMD_ACTION_PRE_UP "pre-up"
+#define NMD_ACTION_UP "up"
+#define NMD_ACTION_PRE_DOWN "pre-down"
+#define NMD_ACTION_DOWN "down"
+#define NMD_ACTION_VPN_PRE_UP "vpn-pre-up"
+#define NMD_ACTION_VPN_UP "vpn-up"
+#define NMD_ACTION_VPN_PRE_DOWN "vpn-pre-down"
+#define NMD_ACTION_VPN_DOWN "vpn-down"
+#define NMD_ACTION_DHCP4_CHANGE "dhcp4-change"
+#define NMD_ACTION_DHCP6_CHANGE "dhcp6-change"
+
typedef enum {
DISPATCH_RESULT_UNKNOWN = 0,
DISPATCH_RESULT_SUCCESS = 1,
diff --git a/callouts/nm-dispatcher-utils.c b/callouts/nm-dispatcher-utils.c
index e5240a7dc..b1d11daf3 100644
--- a/callouts/nm-dispatcher-utils.c
+++ b/callouts/nm-dispatcher-utils.c
@@ -30,7 +30,7 @@
#include <nm-setting-ip6-config.h>
#include <nm-setting-connection.h>
-#include "nm-dispatcher-action.h"
+#include "nm-dispatcher-api.h"
#include "nm-utils.h"
#include "nm-dispatcher-utils.h"
@@ -96,6 +96,8 @@ construct_ip4_items (GSList *items, GHashTable *ip4_config, const char *prefix)
guint32 num, i;
GString *tmp;
GValue *val;
+ char str_addr[INET_ADDRSTRLEN];
+ char str_gw[INET_ADDRSTRLEN];
if (ip4_config == NULL)
return items;
@@ -110,30 +112,19 @@ construct_ip4_items (GSList *items, GHashTable *ip4_config, const char *prefix)
for (iter = addresses, num = 0; iter; iter = g_slist_next (iter)) {
NMIP4Address *addr = (NMIP4Address *) iter->data;
- char str_addr[INET_ADDRSTRLEN + 1];
- char str_gw[INET_ADDRSTRLEN + 1];
- struct in_addr tmp_addr;
guint32 ip_prefix = nm_ip4_address_get_prefix (addr);
char *addrtmp;
- memset (str_addr, 0, sizeof (str_addr));
- tmp_addr.s_addr = nm_ip4_address_get_address (addr);
- if (!inet_ntop (AF_INET, &tmp_addr, str_addr, sizeof (str_addr)))
- continue;
-
- memset (str_gw, 0, sizeof (str_gw));
- tmp_addr.s_addr = nm_ip4_address_get_gateway (addr);
- inet_ntop (AF_INET, &tmp_addr, str_gw, sizeof (str_gw));
+ nm_utils_inet4_ntop (nm_ip4_address_get_address (addr), str_addr);
+ nm_utils_inet4_ntop (nm_ip4_address_get_gateway (addr), str_gw);
addrtmp = g_strdup_printf ("%sIP4_ADDRESS_%d=%s/%d %s", prefix, num++, str_addr, ip_prefix, str_gw);
items = g_slist_prepend (items, addrtmp);
}
if (num)
items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ADDRESSES=%d", prefix, num));
- if (addresses) {
- g_slist_foreach (addresses, (GFunc) nm_ip4_address_unref, NULL);
- g_slist_free (addresses);
- }
+ if (addresses)
+ g_slist_free_full (addresses, (GDestroyNotify) nm_ip4_address_unref);
/* DNS servers */
val = g_hash_table_lookup (ip4_config, "nameservers");
@@ -146,17 +137,13 @@ construct_ip4_items (GSList *items, GHashTable *ip4_config, const char *prefix)
tmp = g_string_new (NULL);
g_string_append_printf (tmp, "%sIP4_NAMESERVERS=", prefix);
for (i = 0; i < dns->len; i++) {
- struct in_addr addr;
- char buf[INET_ADDRSTRLEN + 1];
-
- addr.s_addr = g_array_index (dns, guint32, i);
- memset (buf, 0, sizeof (buf));
- if (inet_ntop (AF_INET, &addr, buf, sizeof (buf))) {
- if (!first)
- g_string_append_c (tmp, ' ');
- g_string_append (tmp, buf);
- first = FALSE;
- }
+ guint32 addr;
+
+ addr = g_array_index (dns, guint32, i);
+ if (!first)
+ g_string_append_c (tmp, ' ');
+ g_string_append (tmp, nm_utils_inet4_ntop (addr, NULL));
+ first = FALSE;
}
items = g_slist_prepend (items, tmp->str);
g_string_free (tmp, FALSE);
@@ -176,17 +163,13 @@ construct_ip4_items (GSList *items, GHashTable *ip4_config, const char *prefix)
tmp = g_string_new (NULL);
g_string_append_printf (tmp, "%sIP4_WINS_SERVERS=", prefix);
for (i = 0; i < wins->len; i++) {
- struct in_addr addr;
- char buf[INET_ADDRSTRLEN + 1];
-
- addr.s_addr = g_array_index (wins, guint32, i);
- memset (buf, 0, sizeof (buf));
- if (inet_ntop (AF_INET, &addr, buf, sizeof (buf))) {
- if (!first)
- g_string_append_c (tmp, ' ');
- g_string_append (tmp, buf);
- first = FALSE;
- }
+ guint32 addr;
+
+ addr = g_array_index (wins, guint32, i);
+ if (!first)
+ g_string_append_c (tmp, ' ');
+ g_string_append (tmp, nm_utils_inet4_ntop (addr, NULL));
+ first = FALSE;
}
items = g_slist_prepend (items, tmp->str);
g_string_free (tmp, FALSE);
@@ -199,30 +182,19 @@ construct_ip4_items (GSList *items, GHashTable *ip4_config, const char *prefix)
for (iter = routes, num = 0; iter; iter = g_slist_next (iter)) {
NMIP4Route *route = (NMIP4Route *) iter->data;
- char str_addr[INET_ADDRSTRLEN + 1];
- char str_nh[INET_ADDRSTRLEN + 1];
- struct in_addr tmp_addr;
guint32 ip_prefix = nm_ip4_route_get_prefix (route);
guint32 metric = nm_ip4_route_get_metric (route);
char *routetmp;
- memset (str_addr, 0, sizeof (str_addr));
- tmp_addr.s_addr = nm_ip4_route_get_dest (route);
- if (!inet_ntop (AF_INET, &tmp_addr, str_addr, sizeof (str_addr)))
- continue;
+ nm_utils_inet4_ntop (nm_ip4_route_get_dest (route), str_addr);
+ nm_utils_inet4_ntop (nm_ip4_route_get_next_hop (route), str_gw);
- memset (str_nh, 0, sizeof (str_nh));
- tmp_addr.s_addr = nm_ip4_route_get_next_hop (route);
- inet_ntop (AF_INET, &tmp_addr, str_nh, sizeof (str_nh));
-
- routetmp = g_strdup_printf ("%sIP4_ROUTE_%d=%s/%d %s %d", prefix, num++, str_addr, ip_prefix, str_nh, metric);
+ routetmp = g_strdup_printf ("%sIP4_ROUTE_%d=%s/%d %s %d", prefix, num++, str_addr, ip_prefix, str_gw, metric);
items = g_slist_prepend (items, routetmp);
}
items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ROUTES=%d", prefix, num));
- if (routes) {
- g_slist_foreach (routes, (GFunc) nm_ip4_route_unref, NULL);
- g_slist_free (routes);
- }
+ if (routes)
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip4_route_unref);
return items;
}
@@ -255,6 +227,8 @@ construct_ip6_items (GSList *items, GHashTable *ip6_config, const char *prefix)
guint32 num;
GString *tmp;
GValue *val;
+ char str_addr[INET6_ADDRSTRLEN];
+ char str_gw[INET6_ADDRSTRLEN];
if (ip6_config == NULL)
return items;
@@ -269,27 +243,19 @@ construct_ip6_items (GSList *items, GHashTable *ip6_config, const char *prefix)
for (iter = addresses, num = 0; iter; iter = g_slist_next (iter)) {
NMIP6Address *addr = (NMIP6Address *) iter->data;
- char str_addr[INET6_ADDRSTRLEN];
- char str_gw[INET6_ADDRSTRLEN];
- const struct in6_addr *tmp_addr;
guint32 ip_prefix = nm_ip6_address_get_prefix (addr);
char *addrtmp;
- tmp_addr = nm_ip6_address_get_address (addr);
- inet_ntop (AF_INET6, tmp_addr, str_addr, sizeof (str_addr));
-
- tmp_addr = nm_ip6_address_get_gateway (addr);
- inet_ntop (AF_INET6, tmp_addr, str_gw, sizeof (str_gw));
+ nm_utils_inet6_ntop (nm_ip6_address_get_address (addr), str_addr);
+ nm_utils_inet6_ntop (nm_ip6_address_get_gateway (addr), str_gw);
addrtmp = g_strdup_printf ("%sIP6_ADDRESS_%d=%s/%d %s", prefix, num++, str_addr, ip_prefix, str_gw);
items = g_slist_prepend (items, addrtmp);
}
if (num)
items = g_slist_prepend (items, g_strdup_printf ("%sIP6_NUM_ADDRESSES=%d", prefix, num));
- if (addresses) {
- g_slist_foreach (addresses, (GFunc) nm_ip6_address_unref, NULL);
- g_slist_free (addresses);
- }
+ if (addresses)
+ g_slist_free_full (addresses, (GDestroyNotify) nm_ip6_address_unref);
/* DNS servers */
val = g_hash_table_lookup (ip6_config, "nameservers");
@@ -297,23 +263,20 @@ construct_ip6_items (GSList *items, GHashTable *ip6_config, const char *prefix)
dns = nm_utils_ip6_dns_from_gvalue (val);
if (g_slist_length (dns)) {
+ gboolean first = TRUE;
+
tmp = g_string_new (NULL);
g_string_append_printf (tmp, "%sIP6_NAMESERVERS=", prefix);
for (iter = dns; iter; iter = g_slist_next (iter)) {
const struct in6_addr *addr = iter->data;
- gboolean first = TRUE;
- char buf[INET6_ADDRSTRLEN + 1];
-
- memset (buf, 0, sizeof (buf));
- if (inet_ntop (AF_INET6, addr, buf, sizeof (buf))) {
- if (!first)
- g_string_append_c (tmp, ' ');
- g_string_append (tmp, buf);
- first = FALSE;
- }
+
+ if (!first)
+ g_string_append_c (tmp, ' ');
+ g_string_append (tmp, nm_utils_inet6_ntop (addr, NULL));
+ first = FALSE;
}
-
+
items = g_slist_prepend (items, tmp->str);
g_string_free (tmp, FALSE);
}
@@ -328,31 +291,20 @@ construct_ip6_items (GSList *items, GHashTable *ip6_config, const char *prefix)
for (iter = routes, num = 0; iter; iter = g_slist_next (iter)) {
NMIP6Route *route = (NMIP6Route *) iter->data;
- char str_addr[INET6_ADDRSTRLEN + 1];
- char str_nh[INET6_ADDRSTRLEN + 1];
- const struct in6_addr *tmp_addr;
guint32 ip_prefix = nm_ip6_route_get_prefix (route);
guint32 metric = nm_ip6_route_get_metric (route);
char *routetmp;
- memset (str_addr, 0, sizeof (str_addr));
- tmp_addr = nm_ip6_route_get_dest (route);
- if (!inet_ntop (AF_INET6, &tmp_addr, str_addr, sizeof (str_addr)))
- continue;
+ nm_utils_inet6_ntop (nm_ip6_route_get_dest (route), str_addr);
+ nm_utils_inet6_ntop (nm_ip6_route_get_next_hop (route), str_gw);
- memset (str_nh, 0, sizeof (str_nh));
- tmp_addr = nm_ip6_route_get_next_hop (route);
- inet_ntop (AF_INET6, &tmp_addr, str_nh, sizeof (str_nh));
-
- routetmp = g_strdup_printf ("%sIP6_ROUTE_%d=%s/%d %s %d", prefix, num++, str_addr, ip_prefix, str_nh, metric);
+ routetmp = g_strdup_printf ("%sIP6_ROUTE_%d=%s/%d %s %d", prefix, num++, str_addr, ip_prefix, str_gw, metric);
items = g_slist_prepend (items, routetmp);
}
if (num)
items = g_slist_prepend (items, g_strdup_printf ("%sIP6_NUM_ROUTES=%d", prefix, num));
- if (routes) {
- g_slist_foreach (routes, (GFunc) nm_ip6_route_unref, NULL);
- g_slist_free (routes);
- }
+ if (routes)
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip6_route_unref);
return items;
}
@@ -393,10 +345,10 @@ nm_dispatcher_utils_construct_envp (const char *action,
char **out_iface)
{
const char *iface = NULL, *ip_iface = NULL;
- const char *uuid = NULL, *id = NULL;
+ const char *uuid = NULL, *id = NULL, *path;
NMDeviceState dev_state = NM_DEVICE_STATE_UNKNOWN;
GValue *value;
- char **envp = NULL;
+ char **envp = NULL, *path_item;
GSList *items = NULL, *iter;
guint i;
GHashTable *con_setting_hash;
@@ -407,7 +359,7 @@ nm_dispatcher_utils_construct_envp (const char *action,
/* Hostname changes don't require a device nor contain a connection */
if (!strcmp (action, "hostname"))
- return g_new0 (char *, 1);
+ goto done;
/* Canonicalize the VPN interface name; "" is used when passing it through
* D-Bus so make sure that's fixed up here.
@@ -453,7 +405,7 @@ nm_dispatcher_utils_construct_envp (const char *action,
return NULL;
}
ip_iface = g_value_get_string (value);
- }
+ }
/* Device type */
value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_TYPE);
@@ -493,12 +445,6 @@ nm_dispatcher_utils_construct_envp (const char *action,
items = construct_ip6_items (items, vpn_ip6_props, "VPN_");
}
- /* Convert the list to an environment pointer */
- envp = g_new0 (char *, g_slist_length (items) + 1);
- for (iter = items, i = 0; iter; iter = g_slist_next (iter), i++)
- envp[i] = (char *) iter->data;
- g_slist_free (items);
-
/* Backwards compat: 'iface' is set in this order:
* 1) VPN interface name
* 2) Device IP interface name
@@ -511,6 +457,19 @@ nm_dispatcher_utils_construct_envp (const char *action,
else
*out_iface = g_strdup (iface);
+ done:
+ path = g_getenv ("PATH");
+ if (path) {
+ path_item = g_strdup_printf ("PATH=%s", path);
+ items = g_slist_prepend (items, path_item);
+ }
+
+ /* Convert the list to an environment pointer */
+ envp = g_new0 (char *, g_slist_length (items) + 1);
+ for (iter = items, i = 0; iter; iter = g_slist_next (iter), i++)
+ envp[i] = (char *) iter->data;
+ g_slist_free (items);
+
return envp;
}
diff --git a/callouts/nm-dispatcher-action.c b/callouts/nm-dispatcher.c
index de53f1231..733af511f 100644
--- a/callouts/nm-dispatcher-action.c
+++ b/callouts/nm-dispatcher.c
@@ -31,23 +31,27 @@
#include <arpa/inet.h>
#include <glib.h>
+#include <glib-unix.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <dbus/dbus-glib.h>
-#include "nm-dispatcher-action.h"
+#include "nm-dispatcher-api.h"
#include "nm-dispatcher-utils.h"
-
-#define NMD_SCRIPT_DIR NMCONFDIR "/dispatcher.d"
+#include "nm-glib-compat.h"
static GMainLoop *loop = NULL;
static gboolean debug = FALSE;
+typedef struct Request Request;
+
typedef struct {
GObject parent;
/* Private data */
+ Request *current_request;
+ GQueue *pending_requests;
guint quit_id;
gboolean persist;
} Handler;
@@ -77,6 +81,7 @@ impl_dispatch (Handler *h,
const char *vpn_ip_iface,
GHashTable *vpn_ip4_props,
GHashTable *vpn_ip6_props,
+ gboolean request_debug,
DBusGMethodInvocation *context);
#include "nm-dispatcher-glue.h"
@@ -92,8 +97,6 @@ handler_class_init (HandlerClass *h_class)
{
}
-typedef struct Request Request;
-
static void dispatch_one_script (Request *request);
typedef struct {
@@ -112,6 +115,8 @@ struct Request {
char *action;
char *iface;
char **envp;
+ gboolean debug;
+
GPtrArray *scripts; /* list of ScriptInfo */
guint idx;
@@ -120,8 +125,10 @@ struct Request {
};
static void
-script_info_free (ScriptInfo *info)
+script_info_free (gpointer ptr)
{
+ ScriptInfo *info = ptr;
+
g_free (info->script);
g_free (info->error);
g_free (info);
@@ -133,10 +140,8 @@ request_free (Request *request)
g_free (request->action);
g_free (request->iface);
g_strfreev (request->envp);
- if (request->scripts) {
- g_ptr_array_foreach (request->scripts, (GFunc) script_info_free, NULL);
+ if (request->scripts)
g_ptr_array_free (request->scripts, TRUE);
- }
}
static gboolean
@@ -147,24 +152,57 @@ quit_timeout_cb (gpointer user_data)
}
static void
-quit_timeout_reschedule (Handler *h)
+quit_timeout_cancel (Handler *h)
{
- if (h->quit_id)
+ if (h->quit_id) {
g_source_remove (h->quit_id);
+ h->quit_id = 0;
+ }
+}
+
+static void
+quit_timeout_reschedule (Handler *h)
+{
+ quit_timeout_cancel (h);
if (!h->persist)
h->quit_id = g_timeout_add_seconds (10, quit_timeout_cb, NULL);
}
+static void
+start_request (Request *request)
+{
+ if (request->iface)
+ g_message ("Dispatching action '%s' for %s", request->action, request->iface);
+ else
+ g_message ("Dispatching action '%s'", request->action);
+
+ request->handler->current_request = request;
+ dispatch_one_script (request);
+}
+
+static void
+next_request (Handler *h)
+{
+ Request *request = g_queue_pop_head (h->pending_requests);
+
+ if (request) {
+ start_request (request);
+ return;
+ }
+
+ h->current_request = NULL;
+ quit_timeout_reschedule (h);
+}
+
static gboolean
next_script (gpointer user_data)
{
Request *request = user_data;
+ Handler *h = request->handler;
GPtrArray *results;
GValueArray *item;
guint i;
- quit_timeout_reschedule (request->handler);
-
request->idx++;
if (request->idx < request->scripts->len) {
dispatch_one_script (request);
@@ -175,7 +213,7 @@ next_script (gpointer user_data)
results = g_ptr_array_new_full (request->scripts->len, (GDestroyNotify) g_value_array_free);
for (i = 0; i < request->scripts->len; i++) {
ScriptInfo *script = g_ptr_array_index (request->scripts, i);
- GValue elt = {0, };
+ GValue elt = G_VALUE_INIT;
item = g_value_array_new (3);
@@ -201,9 +239,17 @@ next_script (gpointer user_data)
}
dbus_g_method_return (request->context, results);
+ g_ptr_array_unref (results);
+ if (request->debug) {
+ if (request->iface)
+ g_message ("Dispatch '%s' on %s complete", request->action, request->iface);
+ else
+ g_message ("Dispatch '%s' complete", request->action);
+ }
request_free (request);
- g_ptr_array_unref (results);
+
+ next_request (h);
return FALSE;
}
@@ -238,7 +284,10 @@ script_watch_cb (GPid pid, gint status, gpointer user_data)
script->script);
}
- if (script->result != DISPATCH_RESULT_SUCCESS) {
+ if (script->result == DISPATCH_RESULT_SUCCESS) {
+ if (script->request->debug)
+ g_message ("Script '%s' complete", script->script);
+ } else {
script->result = DISPATCH_RESULT_FAILED;
g_warning ("%s", script->error);
}
@@ -271,33 +320,33 @@ script_timeout_cb (gpointer user_data)
}
static inline gboolean
-check_permissions (struct stat *s, GError **error)
+check_permissions (struct stat *s, const char **out_error_msg)
{
g_return_val_if_fail (s != NULL, FALSE);
- g_return_val_if_fail (error != NULL, FALSE);
- g_return_val_if_fail (*error == NULL, FALSE);
+ g_return_val_if_fail (out_error_msg != NULL, FALSE);
+ g_return_val_if_fail (*out_error_msg == NULL, FALSE);
/* Only accept regular files */
if (!S_ISREG (s->st_mode)) {
- g_set_error (error, 0, 0, "not a regular file.");
+ *out_error_msg = "not a regular file.";
return FALSE;
}
/* Only accept files owned by root */
if (s->st_uid != 0) {
- g_set_error (error, 0, 0, "not owned by root.");
+ *out_error_msg = "not owned by root.";
return FALSE;
}
/* Only accept files not writable by group or other, and not SUID */
if (s->st_mode & (S_IWGRP | S_IWOTH | S_ISUID)) {
- g_set_error (error, 0, 0, "writable by group or other, or set-UID.");
+ *out_error_msg = "writable by group or other, or set-UID.";
return FALSE;
}
/* Only accept files executable by the owner */
if (!(s->st_mode & S_IXUSR)) {
- g_set_error (error, 0, 0, "not executable by owner.");
+ *out_error_msg = "not executable by owner.";
return FALSE;
}
@@ -334,6 +383,8 @@ child_setup (gpointer user_data G_GNUC_UNUSED)
setpgid (pid, pid);
}
+#define SCRIPT_TIMEOUT 600 /* 10 minutes */
+
static void
dispatch_one_script (Request *request)
{
@@ -346,12 +397,12 @@ dispatch_one_script (Request *request)
argv[2] = request->action;
argv[3] = NULL;
- if (debug)
- g_message ("Script: %s %s %s", script->script, request->iface ? request->iface : "(none)", request->action);
+ if (request->debug)
+ g_message ("Running script '%s'", script->script);
if (g_spawn_async ("/", argv, request->envp, G_SPAWN_DO_NOT_REAP_CHILD, child_setup, request, &script->pid, &error)) {
request->script_watch_id = g_child_watch_add (script->pid, (GChildWatchFunc) script_watch_cb, script);
- request->script_timeout_id = g_timeout_add_seconds (3, script_timeout_cb, script);
+ request->script_timeout_id = g_timeout_add_seconds (SCRIPT_TIMEOUT, script_timeout_cb, script);
} else {
g_warning ("Failed to execute script '%s': (%d) %s",
script->script, error->code, error->message);
@@ -365,16 +416,26 @@ dispatch_one_script (Request *request)
}
static GSList *
-find_scripts (void)
+find_scripts (const char *str_action)
{
GDir *dir;
const char *filename;
GSList *sorted = NULL;
GError *error = NULL;
-
- if (!(dir = g_dir_open (NMD_SCRIPT_DIR, 0, &error))) {
- g_warning ("Failed to open dispatcher directory '%s': (%d) %s",
- NMD_SCRIPT_DIR, error->code, error->message);
+ const char *dirname;
+
+ if ( strcmp (str_action, NMD_ACTION_PRE_UP) == 0
+ || strcmp (str_action, NMD_ACTION_VPN_PRE_UP) == 0)
+ dirname = NMD_SCRIPT_DIR_PRE_UP;
+ else if ( strcmp (str_action, NMD_ACTION_PRE_DOWN) == 0
+ || strcmp (str_action, NMD_ACTION_VPN_PRE_DOWN) == 0)
+ dirname = NMD_SCRIPT_DIR_PRE_DOWN;
+ else
+ dirname = NMD_SCRIPT_DIR_DEFAULT;
+
+ if (!(dir = g_dir_open (dirname, 0, &error))) {
+ g_message ("Failed to open dispatcher directory '%s': (%d) %s",
+ dirname, error->code, error->message);
g_error_free (error);
return NULL;
}
@@ -383,22 +444,26 @@ find_scripts (void)
char *path;
struct stat st;
int err;
+ const char *err_msg = NULL;
if (!check_filename (filename))
continue;
- path = g_build_filename (NMD_SCRIPT_DIR, filename, NULL);
+ path = g_build_filename (dirname, filename, NULL);
err = stat (path, &st);
if (err)
g_warning ("Failed to stat '%s': %d", path, err);
- else if (!check_permissions (&st, &error)) {
- g_warning ("Cannot execute '%s': %s", path, error->message);
- g_clear_error (&error);
- } else {
+ else if (S_ISDIR (st.st_mode))
+ ; /* silently skip. */
+ else if (!check_permissions (&st, &err_msg))
+ g_warning ("Cannot execute '%s': %s", path, err_msg);
+ else {
/* success */
sorted = g_slist_insert_sorted (sorted, path, (GCompareFunc) g_strcmp0);
+ path = NULL;
}
+ g_free (path);
}
g_dir_close (dir);
@@ -418,6 +483,7 @@ impl_dispatch (Handler *h,
const char *vpn_ip_iface,
GHashTable *vpn_ip4_props,
GHashTable *vpn_ip6_props,
+ gboolean request_debug,
DBusGMethodInvocation *context)
{
GSList *sorted_scripts = NULL;
@@ -426,17 +492,18 @@ impl_dispatch (Handler *h,
char **p;
char *iface = NULL;
- sorted_scripts = find_scripts ();
+ sorted_scripts = find_scripts (str_action);
if (!sorted_scripts) {
dbus_g_method_return (context, g_ptr_array_new ());
return;
}
- quit_timeout_reschedule (h);
+ quit_timeout_cancel (h);
request = g_malloc0 (sizeof (*request));
request->handler = h;
+ request->debug = request_debug || debug;
request->context = context;
request->action = g_strdup (str_action);
@@ -453,7 +520,7 @@ impl_dispatch (Handler *h,
vpn_ip6_props,
&iface);
- if (debug) {
+ if (request->debug) {
g_message ("------------ Action ID %p '%s' Interface %s Environment ------------",
context, str_action, iface ? iface : "(none)");
for (p = request->envp; *p; p++)
@@ -463,7 +530,7 @@ impl_dispatch (Handler *h,
request->iface = g_strdup (iface);
- request->scripts = g_ptr_array_sized_new (5);
+ request->scripts = g_ptr_array_new_full (5, script_info_free);
for (iter = sorted_scripts; iter; iter = g_slist_next (iter)) {
ScriptInfo *s = g_malloc0 (sizeof (*s));
s->request = request;
@@ -472,8 +539,10 @@ impl_dispatch (Handler *h,
}
g_slist_free (sorted_scripts);
- /* start dispatching scripts */
- dispatch_one_script (request);
+ if (h->current_request)
+ g_queue_push_tail (h->pending_requests, request);
+ else
+ start_request (request);
}
static void
@@ -596,27 +665,15 @@ logging_shutdown (void)
closelog ();
}
-static void
-signal_handler (int signo)
+static gboolean
+signal_handler (gpointer user_data)
{
- if (signo == SIGINT || signo == SIGTERM) {
- g_message ("Caught signal %d, shutting down...", signo);
- g_main_loop_quit (loop);
- }
-}
+ int signo = GPOINTER_TO_INT (user_data);
-static void
-setup_signals (void)
-{
- struct sigaction action;
- sigset_t mask;
-
- sigemptyset (&mask);
- action.sa_handler = signal_handler;
- action.sa_mask = mask;
- action.sa_flags = 0;
- sigaction (SIGTERM, &action, NULL);
- sigaction (SIGINT, &action, NULL);
+ g_message ("Caught signal %d, shutting down...", signo);
+ g_main_loop_quit (loop);
+
+ return G_SOURCE_REMOVE;
}
int
@@ -646,8 +703,12 @@ main (int argc, char **argv)
g_option_context_free (opt_ctx);
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
- setup_signals ();
+#endif
+
+ g_unix_signal_add (SIGTERM, signal_handler, GINT_TO_POINTER (SIGTERM));
+ g_unix_signal_add (SIGINT, signal_handler, GINT_TO_POINTER (SIGINT));
if (!debug)
logging_setup ();
@@ -662,6 +723,7 @@ main (int argc, char **argv)
if (!handler)
return 1;
handler->persist = persist;
+ handler->pending_requests = g_queue_new ();
dbus_g_object_type_install_info (HANDLER_TYPE, &dbus_glib_nm_dispatcher_object_info);
dbus_g_connection_register_g_object (bus,
@@ -673,7 +735,9 @@ main (int argc, char **argv)
g_main_loop_run (loop);
+ g_queue_free (handler->pending_requests);
g_object_unref (handler);
+
dbus_g_connection_unref (bus);
if (!debug)
diff --git a/callouts/nm-dispatcher.xml b/callouts/nm-dispatcher.xml
index cba61508d..1ae138b35 100644
--- a/callouts/nm-dispatcher.xml
+++ b/callouts/nm-dispatcher.xml
@@ -75,6 +75,12 @@
</tp:docstring>
</arg>
+ <arg name="debug" type="b" direction="in">
+ <tp:docstring>
+ Whether to log debug output.
+ </tp:docstring>
+ </arg>
+
<arg name="results" type="a(sus)" direction="out">
<tp:docstring>
Results of dispatching operations. Each element of the returned
diff --git a/callouts/org.freedesktop.nm_dispatcher.service.in b/callouts/org.freedesktop.nm_dispatcher.service.in
index 9feb3b468..ff037cca9 100644
--- a/callouts/org.freedesktop.nm_dispatcher.service.in
+++ b/callouts/org.freedesktop.nm_dispatcher.service.in
@@ -1,6 +1,6 @@
[D-BUS Service]
Name=org.freedesktop.nm_dispatcher
-Exec=@libexecdir@/nm-dispatcher.action
+Exec=@libexecdir@/nm-dispatcher
User=root
SystemdService=dbus-org.freedesktop.nm-dispatcher.service
diff --git a/callouts/tests/Makefile.am b/callouts/tests/Makefile.am
index d33d0f91b..de4b5f529 100644
--- a/callouts/tests/Makefile.am
+++ b/callouts/tests/Makefile.am
@@ -5,7 +5,10 @@ AM_CPPFLAGS = \
-I${top_builddir}/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
- -I$(top_srcdir)/callouts
+ -I$(top_srcdir)/callouts \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS)
noinst_PROGRAMS = \
test-dispatcher-envp
@@ -15,11 +18,6 @@ noinst_PROGRAMS = \
test_dispatcher_envp_SOURCES = \
test-dispatcher-envp.c
-test_dispatcher_envp_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(AM_CPPFLAGS)
-
test_dispatcher_envp_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/callouts/libtest-dispatcher-envp.la \
diff --git a/callouts/tests/Makefile.in b/callouts/tests/Makefile.in
index c28aee5c4..25255b59e 100644
--- a/callouts/tests/Makefile.in
+++ b/callouts/tests/Makefile.in
@@ -83,7 +83,8 @@ subdir = callouts/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -103,7 +104,8 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am__test_dispatcher_envp_SOURCES_DIST = test-dispatcher-envp.c
-@ENABLE_TESTS_TRUE@am_test_dispatcher_envp_OBJECTS = test_dispatcher_envp-test-dispatcher-envp.$(OBJEXT)
+@ENABLE_TESTS_TRUE@am_test_dispatcher_envp_OBJECTS = \
+@ENABLE_TESTS_TRUE@ test-dispatcher-envp.$(OBJEXT)
test_dispatcher_envp_OBJECTS = $(am_test_dispatcher_envp_OBJECTS)
am__DEPENDENCIES_1 =
@ENABLE_TESTS_TRUE@test_dispatcher_envp_DEPENDENCIES = \
@@ -200,12 +202,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -230,7 +235,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -275,12 +279,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -297,6 +305,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -324,11 +334,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -343,6 +358,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -405,6 +421,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -415,23 +432,22 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
@ENABLE_TESTS_TRUE@ -I${top_builddir}/include \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/callouts
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/callouts \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS)
####### dispatcher envp #######
@ENABLE_TESTS_TRUE@test_dispatcher_envp_SOURCES = \
@ENABLE_TESTS_TRUE@ test-dispatcher-envp.c
-@ENABLE_TESTS_TRUE@test_dispatcher_envp_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(AM_CPPFLAGS)
-
@ENABLE_TESTS_TRUE@test_dispatcher_envp_LDADD = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/callouts/libtest-dispatcher-envp.la \
@@ -498,7 +514,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dispatcher_envp-test-dispatcher-envp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dispatcher-envp.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -521,20 +537,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-test_dispatcher_envp-test-dispatcher-envp.o: test-dispatcher-envp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dispatcher_envp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_dispatcher_envp-test-dispatcher-envp.o -MD -MP -MF $(DEPDIR)/test_dispatcher_envp-test-dispatcher-envp.Tpo -c -o test_dispatcher_envp-test-dispatcher-envp.o `test -f 'test-dispatcher-envp.c' || echo '$(srcdir)/'`test-dispatcher-envp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_dispatcher_envp-test-dispatcher-envp.Tpo $(DEPDIR)/test_dispatcher_envp-test-dispatcher-envp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-dispatcher-envp.c' object='test_dispatcher_envp-test-dispatcher-envp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dispatcher_envp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_dispatcher_envp-test-dispatcher-envp.o `test -f 'test-dispatcher-envp.c' || echo '$(srcdir)/'`test-dispatcher-envp.c
-
-test_dispatcher_envp-test-dispatcher-envp.obj: test-dispatcher-envp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dispatcher_envp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_dispatcher_envp-test-dispatcher-envp.obj -MD -MP -MF $(DEPDIR)/test_dispatcher_envp-test-dispatcher-envp.Tpo -c -o test_dispatcher_envp-test-dispatcher-envp.obj `if test -f 'test-dispatcher-envp.c'; then $(CYGPATH_W) 'test-dispatcher-envp.c'; else $(CYGPATH_W) '$(srcdir)/test-dispatcher-envp.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_dispatcher_envp-test-dispatcher-envp.Tpo $(DEPDIR)/test_dispatcher_envp-test-dispatcher-envp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-dispatcher-envp.c' object='test_dispatcher_envp-test-dispatcher-envp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dispatcher_envp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_dispatcher_envp-test-dispatcher-envp.obj `if test -f 'test-dispatcher-envp.c'; then $(CYGPATH_W) 'test-dispatcher-envp.c'; else $(CYGPATH_W) '$(srcdir)/test-dispatcher-envp.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/callouts/tests/dispatcher-old-down b/callouts/tests/dispatcher-old-down
index 6396287f7..836f35328 100644
--- a/callouts/tests/dispatcher-old-down
+++ b/callouts/tests/dispatcher-old-down
@@ -12,6 +12,7 @@ interface=wlan0
path=/org/freedesktop/NetworkManager/Devices/0
[env]
+PATH=
CONNECTION_UUID=3fd2a33a-d81b-423f-ae99-e6baba742311
CONNECTION_ID=Random Connection
DEVICE_IFACE=wlan0
diff --git a/callouts/tests/dispatcher-old-up b/callouts/tests/dispatcher-old-up
index 76e3be8de..a35812eeb 100644
--- a/callouts/tests/dispatcher-old-up
+++ b/callouts/tests/dispatcher-old-up
@@ -31,6 +31,7 @@ nameservers=68.87.77.134 68.87.72.134 192.168.1.1
domains=hsd1.mn.comcast.net.
[env]
+PATH=
CONNECTION_UUID=3fd2a33a-d81b-423f-ae99-e6baba742311
CONNECTION_ID=Random Connection
DEVICE_IFACE=wlan0
diff --git a/callouts/tests/dispatcher-old-vpn-down b/callouts/tests/dispatcher-old-vpn-down
index c11cbfd1e..4fab5e956 100644
--- a/callouts/tests/dispatcher-old-vpn-down
+++ b/callouts/tests/dispatcher-old-vpn-down
@@ -31,6 +31,7 @@ nameservers=68.87.77.134 68.87.72.134 192.168.1.1
domains=hsd1.mn.comcast.net.
[env]
+PATH=
CONNECTION_UUID=355653c0-34d3-4777-ad25-f9a498b7ef8e
CONNECTION_ID=Random Connection
DEVICE_IFACE=wlan0
diff --git a/callouts/tests/dispatcher-old-vpn-up b/callouts/tests/dispatcher-old-vpn-up
index ad47c91d5..3c350dbf0 100644
--- a/callouts/tests/dispatcher-old-vpn-up
+++ b/callouts/tests/dispatcher-old-vpn-up
@@ -31,6 +31,7 @@ nameservers=68.87.77.134 68.87.72.134 192.168.1.1
domains=hsd1.mn.comcast.net.
[env]
+PATH=
CONNECTION_UUID=355653c0-34d3-4777-ad25-f9a498b7ef8e
CONNECTION_ID=Random Connection
DEVICE_IFACE=wlan0
diff --git a/callouts/tests/test-dispatcher-envp.c b/callouts/tests/test-dispatcher-envp.c
index 25b5f61dc..a91ae2b27 100644
--- a/callouts/tests/test-dispatcher-envp.c
+++ b/callouts/tests/test-dispatcher-envp.c
@@ -29,7 +29,7 @@
#include "nm-setting-connection.h"
#include "nm-dispatcher-utils.h"
#include "nm-dbus-glib-types.h"
-#include "nm-dispatcher-action.h"
+#include "nm-dispatcher-api.h"
#include "nm-utils.h"
/*******************************************/
@@ -238,10 +238,10 @@ add_uint_array (GKeyFile *kf,
items = g_array_sized_new (FALSE, TRUE, sizeof (guint32), g_strv_length (split));
for (iter = split; iter && *iter; iter++) {
if (strlen (g_strstrip (*iter))) {
- struct in_addr addr;
+ guint32 addr;
g_assert_cmpint (inet_pton (AF_INET, *iter, &addr), ==, 1);
- g_array_append_val (items, addr.s_addr);
+ g_array_append_val (items, addr);
}
}
value_hash_add_uint_array (props, key, items);
@@ -294,7 +294,7 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
list = NULL;
for (iter = split; iter && *iter; iter++) {
NMIP4Address *addr;
- struct in_addr a;
+ guint32 a;
char *p;
if (strlen (g_strstrip (*iter)) == 0)
@@ -307,7 +307,7 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
*p++ = '\0';
g_assert_cmpint (inet_pton (AF_INET, *iter, &a), ==, 1);
- nm_ip4_address_set_address (addr, a.s_addr);
+ nm_ip4_address_set_address (addr, a);
nm_ip4_address_set_prefix (addr, (guint) atoi (p));
p = strchr (p, ' ');
@@ -315,7 +315,7 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
p++;
g_assert_cmpint (inet_pton (AF_INET, p, &a), ==, 1);
- nm_ip4_address_set_gateway (addr, a.s_addr);
+ nm_ip4_address_set_gateway (addr, a);
list = g_slist_append (list, addr);
}
@@ -338,7 +338,7 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
list = NULL;
for (iter = split; iter && *iter; iter++) {
NMIP4Route *route;
- struct in_addr a;
+ guint32 a;
char *p;
if (strlen (g_strstrip (*iter)) == 0)
@@ -351,7 +351,7 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
*p++ = '\0';
g_assert_cmpint (inet_pton (AF_INET, *iter, &a), ==, 1);
- nm_ip4_route_set_dest (route, a.s_addr);
+ nm_ip4_route_set_dest (route, a);
nm_ip4_route_set_prefix (route, (guint) atoi (p));
p = strchr (p, ' ');
@@ -359,7 +359,7 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
p++;
g_assert_cmpint (inet_pton (AF_INET, p, &a), ==, 1);
- nm_ip4_route_set_next_hop (route, a.s_addr);
+ nm_ip4_route_set_next_hop (route, a);
p = strchr (p, ' ');
g_assert (p);
@@ -560,10 +560,18 @@ test_generic (const char *path, const char *file, const char *override_vpn_ip_if
/* Compare dispatcher generated env and expected env */
for (iter = denv; iter && *iter; iter++) {
gpointer foo;
+ const char *i_value = *iter;
- foo = g_hash_table_lookup (expected_env, *iter);
+ if (strstr (i_value, "PATH=") == i_value) {
+ g_assert_cmpstr (&i_value[strlen("PATH=")], ==, g_getenv ("PATH"));
+
+ /* The path is constructed dynamically. Ignore the actual value. */
+ i_value = "PATH=";
+ }
+
+ foo = g_hash_table_lookup (expected_env, i_value);
if (!foo)
- g_warning ("Failed to find %s in environment", *iter);
+ g_warning ("Failed to find %s in environment", i_value);
g_assert (foo);
}
@@ -628,31 +636,23 @@ test_up_empty_vpn_iface (const char *path)
/*******************************************/
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
-
-#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
-
-int main (int argc, char **argv)
+int
+main (int argc, char **argv)
{
- GTestSuite *suite;
-
g_assert (argc > 1);
g_test_init (&argc, &argv, NULL);
- g_type_init ();
- suite = g_test_get_root ();
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
- g_test_suite_add (suite, TESTCASE (test_old_up, argv[1]));
- g_test_suite_add (suite, TESTCASE (test_old_down, argv[1]));
- g_test_suite_add (suite, TESTCASE (test_old_vpn_up, argv[1]));
- g_test_suite_add (suite, TESTCASE (test_old_vpn_down, argv[1]));
+ g_test_add_data_func ("/dispatcher/old_up", argv[1], (GTestDataFunc) test_old_up);
+ g_test_add_data_func ("/dispatcher/old_down", argv[1], (GTestDataFunc) test_old_down);
+ g_test_add_data_func ("/dispatcher/old_vpn_up", argv[1], (GTestDataFunc) test_old_vpn_up);
+ g_test_add_data_func ("/dispatcher/old_vpn_down", argv[1], (GTestDataFunc) test_old_vpn_down);
- g_test_suite_add (suite, TESTCASE (test_up_empty_vpn_iface, argv[1]));
+ g_test_add_data_func ("/dispatcher/up_empty_vpn_iface", argv[1], (GTestDataFunc) test_up_empty_vpn_iface);
return g_test_run ();
}
diff --git a/cli/Makefile.in b/cli/Makefile.in
index dd649e36a..11a64d425 100644
--- a/cli/Makefile.in
+++ b/cli/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = cli
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -204,12 +205,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -234,7 +238,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -279,12 +282,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -301,6 +308,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -328,11 +337,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -347,6 +361,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -409,6 +424,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -419,6 +435,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = src completion
all: all-recursive
diff --git a/cli/completion/Makefile.in b/cli/completion/Makefile.in
index 62cd8b59f..7b45c2b44 100644
--- a/cli/completion/Makefile.in
+++ b/cli/completion/Makefile.in
@@ -82,7 +82,8 @@ subdir = cli/completion
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(dist_completion_DATA)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -175,12 +176,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -205,7 +209,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -250,12 +253,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -272,6 +279,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -299,11 +308,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -318,6 +332,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -380,6 +395,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -390,6 +406,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
completiondir = $(datadir)/bash-completion/completions
dist_completion_DATA = nmcli
all: all-am
diff --git a/cli/completion/nmcli b/cli/completion/nmcli
index 7bd9431a3..343c73220 100644
--- a/cli/completion/nmcli
+++ b/cli/completion/nmcli
@@ -1,5 +1,5 @@
-# nmcli completion -*- shell-script -*-
-# Based on
+# nmcli(1) completion -*- shell-script -*-
+# Originally based on
# https://github.com/GArik/bash-completion/blob/master/completions/nmcli
_nmcli_list()
@@ -7,188 +7,1227 @@ _nmcli_list()
COMPREPLY=( $( compgen -W '$1' -- $cur ) )
}
-_nmcli_con_id()
+_nmcli_list_nl()
{
local IFS=$'\n'
- COMPREPLY=( $( compgen -W "$(nmcli -t -f NAME con list 2>/dev/null )" -- $cur ) )
+ COMPREPLY=( $( compgen -W '$1' -- $cur ) )
+
+ # Now escape special characters (spaces, single and double quotes),
+ # so that the argument is really regarded a single argument by bash.
+ # See http://stackoverflow.com/questions/1146098/properly-handling-spaces-and-quotes-in-bash-completion
+ local escaped_single_quote="'\''"
+ local i=0
+ local entry
+ for entry in ${COMPREPLY[*]}
+ do
+ if [[ "${cur:0:1}" == "'" ]]; then
+ # started with single quote, escaping only other single quotes
+ # [']bla'bla"bla\bla bla --> [']bla'\''bla"bla\bla bla
+ COMPREPLY[$i]="${entry//\'/${escaped_single_quote}}"
+ elif [[ "${cur:0:1}" == '"' ]]; then
+ # started with double quote, escaping all double quotes and all backslashes
+ # ["]bla'bla"bla\bla bla --> ["]bla'bla\"bla\\bla bla
+ entry="${entry//\\/\\\\}"
+ entry="${entry//\"/\\\"}"
+ COMPREPLY[$i]="$entry"
+ else
+ # no quotes in front, escaping _everything_
+ # [ ]bla'bla"bla\bla bla --> [ ]bla\'bla\"bla\\bla\ bla
+ entry="${entry//\\/\\\\}"
+ entry="${entry//\'/\'}"
+ entry="${entry//\"/\\\"}"
+ entry="${entry// /\\ }"
+ COMPREPLY[$i]="$entry"
+ fi
+ (( i++ ))
+ done
}
-_nmcli_con_uuid()
+_nmcli_con_show()
{
- COMPREPLY=( $( compgen -W "$(nmcli -t -f UUID con list 2>/dev/null )" -- $cur ) )
+ nmcli -t -f "$1" connection show $2 2> /dev/null
}
-_nmcli_ap_ssid()
+_nmcli_wifi_list()
{
- local IFS=$'\n'
- COMPREPLY=( $( compgen -W "$(nmcli -t -f SSID dev wifi list 2>/dev/null )" -- $cur ) )
+ nmcli -t -f "$1" device wifi list 2>/dev/null
}
-_nmcli_ab_bssid()
+_nmcli_dev_status()
{
- COMPREPLY=( $( compgen -W "$(nmcli -t -f BSSID dev wifi list 2>/dev/null )" -- $cur ) )
+ nmcli -t -f "$1" device status 2>/dev/null
}
-_nmcli()
+_nmcli_array_has_value() {
+ # expects the name of an array as first parameter and
+ # returns true if if one of the remaining arguments is
+ # contained in the array ${$1[@]}
+ eval "local ARRAY=(\"\${$1[@]}\")"
+ local arg a
+ shift
+ for arg; do
+ for a in "${ARRAY[@]}"; do
+ if [[ "$a" = "$arg" ]]; then
+ return 0
+ fi
+ done
+ done
+ return 1
+}
+
+_nmcli_array_delete_at()
{
- local cur prev words cword
- _init_completion || return
+ eval "local ARRAY=(\"\${$1[@]}\")"
+ local i
+ local tmp=()
+ local lower=$2
+ local upper=${3:-$lower}
- case $prev in
- -m|--mode)
- COMPREPLY=( $( compgen -W 'tabular multiline' -- $cur ) )
- return 0
+ # for some reason the following fails. So this clumsy workaround...
+ # A=(a "")
+ # echo " >> ${#A[@]}"
+ # >> 2
+ # A=("${A[@]:1}")
+ # echo " >> ${#A[@]}"
+ # >> 0
+ # ... seriously???
+
+ for i in "${!ARRAY[@]}"; do
+ if [[ "$i" -lt "$2" || "$i" -gt "${3-$2}" ]]; then
+ tmp=("${tmp[@]}" "${ARRAY[$i]}")
+ fi
+ done
+ eval "$1=(\"\${tmp[@]}\")"
+}
+
+_nmcli_compl_match_option()
+{
+ local S="$1"
+ local V
+ shift
+ if [[ "${S:0:2}" == "--" ]]; then
+ S="${S:2}"
+ elif [[ "${S:0:1}" == "-" ]]; then
+ S="${S:1}"
+ fi
+ for V; do
+ case "$V" in
+ "$S"*)
+ printf "%s" "$V"
+ return 0
+ ;;
+ esac
+ done
+ return 1
+}
+
+# OPTIONS appear first at the command line (before the OBJECT).
+# This iterates over the argument list and tries to complete
+# the options. If there are options that are to be completed,
+# zero is returned and completion will be performed.
+# Otherwise it will remove all the option parameters from the ${words[@]}
+# array and return with zero (so that completion of OBJECT can continue).
+_nmcli_compl_OPTIONS()
+{
+ local i W
+
+ for (( ; ; )); do
+ if [[ "${#words[@]}" -le 1 ]]; then
+ return 1
+ fi
+ W="$(_nmcli_compl_match_option "${words[0]}" "${LONG_OPTIONS[@]}")"
+ if [[ $? != 0 ]]; then
+ return 2
+ fi
+
+ # remove the options already seen.
+ for i in ${!LONG_OPTIONS[@]}; do
+ if [[ "${LONG_OPTIONS[$i]}" == "$W" ]]; then
+ _nmcli_array_delete_at LONG_OPTIONS $i
+ break
+ fi
+ done
+
+ if [[ "$HELP_ONLY_AS_FIRST" == '1' ]]; then
+ for i in ${!LONG_OPTIONS[@]}; do
+ if [[ "${LONG_OPTIONS[$i]}" == "help" ]]; then
+ _nmcli_array_delete_at LONG_OPTIONS $i
+ break
+ fi
+ done
+ fi
+
+ case "$W" in
+ terse)
+ _nmcli_array_delete_at words 0
+ ;;
+ pretty)
+ _nmcli_array_delete_at words 0
+ ;;
+ nocheck)
+ _nmcli_array_delete_at words 0
+ ;;
+ ask)
+ _nmcli_array_delete_at words 0
+ ;;
+ active)
+ _nmcli_array_delete_at words 0
+ ;;
+ version)
+ _nmcli_array_delete_at words 0
+ ;;
+ help)
+ _nmcli_array_delete_at words 0
+ if [[ "$HELP_ONLY_AS_FIRST" == 1 ]]; then
+ HELP_ONLY_AS_FIRST=0
+ return 0
+ fi
+ HELP_ONLY_AS_FIRST=0
+ ;;
+ temporary)
+ _nmcli_array_delete_at words 0
+ ;;
+ mode)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "tabular multiline"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
+ ;;
+ fields)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "all common
+ NAME UUID TYPE TIMESTAMP TIMESTAMP-REAL AUTOCONNECT READONLY DBUS-PATH ACTIVE DEVICE STATE ACTIVE-PATH
+ connection 802-3-ethernet 802-1x 802-11-wireless 802-11-wireless-security ipv4 ipv6 serial ppp pppoe gsm cdma bluetooth 802-11-olpc-mesh vpn wimax infiniband bond vlan adsl bridge bridge-port team team-port dcb
+ GENERAL IP4 DHCP4 IP6 DHCP6 VPN
+ profile active"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
+ ;;
+ escape)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "no yes"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
+ ;;
+ wait)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list ""
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
+ ;;
+ *)
+ # something unexpected. We are finished with parsing the OPTIONS.
+ return 2
+ ;;
+ esac
+ done
+}
+
+# after the OPTIONS, the OBJECT, the COMMAND and possible the COMMAND_CONNECTION, the syntax for nmcli
+# expects several options with parameters. This function can parse them and remove them from the words array.
+_nmcli_compl_ARGS()
+{
+ local OPTIONS_ALL N_REMOVE_WORDS REMOVE_OPTIONS OPTIONS_HAS_MANDATORY i
+ OPTIONS_ALL=("${OPTIONS[@]}")
+ OPTIONS_UNKNOWN_OPTION=
+
+ OPTIONS_HAS_MANDATORY=0
+ if [[ "${#OPTIONS_MANDATORY[@]}" -ge 1 ]]; then
+ OPTIONS_HAS_MANDATORY=1
+ fi
+
+ for (( ; ; )); do
+ if [[ "${#words[@]}" -le 1 ]]; then
+ # we have no more words left...
+ if [[ ${#OPTIONS[@]} -eq 0 ]]; then
+ return 1;
+ fi
+ if [[ "$COMMAND_ARGS_WAIT_OPTIONS" -ne 1 ]]; then
+ _nmcli_list "$(echo "${OPTIONS[@]}")"
+ return 0
+ fi
+ COMMAND_ARGS_WAIT_OPTIONS=0
+ return 1
+ fi
+ if ! _nmcli_array_has_value OPTIONS_ALL "${words[0]}"; then
+ # This is an entirely unknown option.
+ OPTIONS_UNKNOWN_OPTION="?${words[0]}"
+ return 1
+ fi
+ if [[ "$OPTIONS_HAS_MANDATORY" -eq 1 && "${#OPTIONS_MANDATORY[@]}" -eq 0 ]]; then
+ # we had some mandatory options, but they are all satisfied... stop here...
+ # This means, that we can continue with more additional options from the NEXT_GROUP.
+ return 1
+ fi
+
+ N_REMOVE_WORDS=2
+ REMOVE_OPTIONS=("${words[0]}")
+ case "${words[0]}" in
+ level)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "ERR WARN INFO DEBUG"
+ return 0
+ fi
+ ;;
+ domains)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ local OPTIONS_DOM=(ALL DEFAULT PLATFORM RFKILL ETHER WIFI BT MB DHCP4 DHCP6 PPP WIFI_SCAN IP4 IP6 AUTOIP4 DNS VPN SHARING SUPPLICANT AGENTS SETTINGS SUSPEND CORE DEVICE OLPC WIMAX INFINIBAND FIREWALL ADSL BOND VLAN BRIDGE DBUS_PROPS TEAM CONCHECK DCB DISPATCH)
+ if [[ "${words[1]}" != "" ]]; then
+
+ # split the comma separaeted domain string into its parts LOGD
+ local oIFS="$IFS"
+ IFS=","
+ local LOGD=($(printf '%s' "${words[1]}" | sed 's/\(^\|,\)/,#/g'))
+ IFS="$oIFS"
+ unset oIFS
+
+ local LOGDLAST LOGDLAST_IS_OPTION LOGDI i
+ # first we iterate over all present domains and remove them from OPTIONS_DOM
+ for LOGDI in ${LOGD[@]}; do
+ LOGDI="${LOGDI:1}"
+ LOGDLAST="$LOGDI"
+ LOGDLAST_IS_OPTION=0
+ for i in ${!OPTIONS_DOM[*]}; do
+ if [[ "${OPTIONS_DOM[$i]}" = "$LOGDI" ]]; then
+ LOGDLAST_IS_OPTION=1
+ unset OPTIONS_DOM[$i]
+ fi
+ done
+ done
+
+ local OPTIONS_DOM2=()
+ if [[ "$LOGDLAST" = "" ]]; then
+ # we have a word that ends with ','. Just append all remaining options.
+ for i in ${!OPTIONS_DOM[*]}; do
+ OPTIONS_DOM2[${#OPTIONS_DOM2[@]}]="${words[1]}${OPTIONS_DOM[$i]}"
+ done
+ else
+ # if the last option is not "" we keep only those option with the same prefix
+ # as the last domain (LOGDLAST)
+ for i in ${!OPTIONS_DOM[*]}; do
+ if [[ "${OPTIONS_DOM[$i]:0:${#LOGDLAST}}" == "$LOGDLAST" ]]; then
+ # modify the option with the present prefix
+ OPTIONS_DOM2[${#OPTIONS_DOM2[@]}]="${words[1]}${OPTIONS_DOM[$i]:${#LOGDLAST}}"
+ fi
+ done
+
+ if [[ $LOGDLAST_IS_OPTION -eq 1 ]]; then
+ # if the last logd itself was a valid iption, ${words[1]} is itself a valid match
+ OPTIONS_DOM2[${#OPTIONS_DOM2[@]}]="${words[1]}"
+
+ # also, add all remaining options by comma separated to the word.
+ for i in ${!OPTIONS_DOM[*]}; do
+ OPTIONS_DOM2[${#OPTIONS_DOM2[@]}]="${words[1]},${OPTIONS_DOM[$i]}"
+ done
+ fi
+ if [[ ${#OPTIONS_DOM2[@]} -eq 1 ]]; then
+ for i in ${!OPTIONS_DOM[*]}; do
+ if [[ "$LOGDLAST" != "${OPTIONS_DOM[$i]:0:${#LOGDLAST}}" ]]; then
+ OPTIONS_DOM2[${#OPTIONS_DOM2[@]}]="${OPTIONS_DOM2[0]},${OPTIONS_DOM[$i]}"
+ fi
+ done
+ fi
+
+ fi
+ OPTIONS_DOM=(${OPTIONS_DOM2[@]})
+ fi
+
+ _nmcli_list "$(echo "${OPTIONS_DOM[@]}")"
+ return 0
+ fi
+ ;;
+ type)
+ if [[ "$OPTIONS_TYPE" != "" ]]; then
+ return 1
+ fi
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ if [[ "${words[1]:0:1}" = "8" ]]; then
+ # usually we don't want to show the 802-x types (because the shorter aliases are more
+ # user friendly. Only complete them, if the current word already starts with an "8".
+ _nmcli_list "802-3-ethernet 802-11-wireless 802-11-olpc-mesh"
+ else
+ _nmcli_list "ethernet wifi wimax gsm cdma infiniband bluetooth vpn olpc-mesh vlan bond bond-slave bridge bridge-slave team team-slave pppoe"
+ fi
+ return 0
+ fi
+ OPTIONS_TYPE="${words[1]}"
+
+ if [[ "x$OPTIONS_MANDATORY_IFNAME" != x ]]; then
+ # the ifname is not a mandatory option for a few connection types...
+ # Check, if we have such a 'type' and remove the 'ifname' from the list
+ # of mandatory options.
+ case "$OPTIONS_TYPE" in
+ vl|vla|vlan| \
+ bond| \
+ team| \
+ bridge)
+ for i in ${!OPTIONS_MANDATORY[*]}; do
+ if [[ "${OPTIONS_MANDATORY[$i]}" = "ifname" ]]; then
+ unset OPTIONS_MANDATORY[$i]
+ fi
+ done
+ ;;
+ *)
+ ;;
+
+ esac
+ OPTIONS_MANDATORY_IFNAME=
+ fi
+ ;;
+ master)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ if [[ "${words[1]}" = "" ]]; then
+ _nmcli_list_nl "$(_nmcli_dev_status DEVICE)"
+ else
+ _nmcli_list_nl "$(printf "%s\n%s\n%s" "$(_nmcli_dev_status DEVICE)" "$(_nmcli_con_show UUID)")"
+ fi
+ return 0
+ fi
+ ;;
+ dev)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ if [[ "${words[1]}" = "" ]]; then
+ _nmcli_list_nl "$(_nmcli_dev_status DEVICE)"
+ else
+ _nmcli_list_nl "$(printf "%s\n%s\n%s" "$(_nmcli_dev_status DEVICE)" "$(_nmcli_wifi_list BSSID)" "$(_nmcli_con_show UUID)")"
+ fi
+ return 0
+ fi
+ ;;
+ primary| \
+ ifname)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_dev_status DEVICE)"
+ return 0
+ fi
+ ;;
+ mode)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "balance-rr active-backup balance-xor broadcast 802.3ad balance-tlb balance-alb"
+ return 0
+ fi
+ ;;
+ transport-mode)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "datagram connected"
+ return 0
+ fi
+ ;;
+ vpn-type)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "vpnc openvpn pptp openconnect openswan libreswan ssh l2tp iodine"
+ return 0
+ fi
+ ;;
+ bt-type)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "panu dun-gsm dun-cdma"
+ return 0
+ fi
+ ;;
+ wep-key-type)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "key phrase"
+ return 0
+ fi
+ ;;
+ autoconnect| \
+ stp| \
+ hairpin| \
+ save| \
+ private)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "yes no"
+ return 0
+ fi
+ ;;
+ config)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ compopt -o default
+ COMPREPLY=()
+ return 0
+ fi
+ ;;
+ ip4| \
+ ip6| \
+ gw4| \
+ gw6| \
+ priority| \
+ forward-delay| \
+ hello-time| \
+ max-age| \
+ ageing-time| \
+ nsp| \
+ path-cost| \
+ name| \
+ mtu| \
+ cloned-mac| \
+ addr| \
+ parent| \
+ miimon| \
+ arp-interval| \
+ arp-ip-target| \
+ downdelay| \
+ updelay| \
+ p-key| \
+ mac| \
+ id| \
+ flags| \
+ ingress| \
+ dhcp-anycast| \
+ channel| \
+ egress| \
+ apn| \
+ con-name| \
+ user| \
+ username| \
+ service| \
+ password)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ return 0
+ fi
+ ;;
+ ssid)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_wifi_list SSID)"
+ return 0
+ fi
+ ;;
+ ap| \
+ bssid)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_wifi_list BSSID)"
+ return 0
+ fi
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+
+
+ if [[ "${#OPTIONS_NEXT_GROUP[@]}" -gt 0 ]]; then
+ if _nmcli_array_has_value OPTIONS_NEXT_GROUP "${words[0]}"; then
+ # the current value is from the next group...
+ # We back off, because the current group is complete.
+ return 1
+ fi
+ fi
+
+ _nmcli_array_delete_at words 0 $((N_REMOVE_WORDS-1))
+ # remove the options already seen.
+ for i in ${!OPTIONS[*]}; do
+ if [[ "${OPTIONS[$i]}" = "${REMOVE_OPTIONS[0]}" || "${OPTIONS[$i]}" = "${REMOVE_OPTIONS[1]}" ]]; then
+ unset OPTIONS[$i]
+ fi
+ done
+ for i in ${!OPTIONS_MANDATORY[*]}; do
+ if [[ "${OPTIONS_MANDATORY[$i]}" = "${REMOVE_OPTIONS[0]}" || "${OPTIONS_MANDATORY[$i]}" = "${REMOVE_OPTIONS[1]}" ]]; then
+ unset OPTIONS_MANDATORY[$i]
+ fi
+ done
+ done
+}
+
+# some commands expect a connection as parameter. This connection can either be given
+# as id|uuid|path|apath. Parse that connection parameter.
+_nmcli_compl_ARGS_CONNECTION()
+{
+ if ! _nmcli_array_has_value OPTIONS "${words[0]}"; then
+ COMMAND_CONNECTION_TYPE=
+ COMMAND_CONNECTION_ID="${words[0]}"
+ _nmcli_array_delete_at words 0
+ return 1
+ fi
+ COMMAND_CONNECTION_TYPE="${words[0]}"
+ COMMAND_CONNECTION_ID="${words[1]}"
+ local CON_TYPE=
+ if [[ "x$COMMAND_CONNECTION_ACTIVE" != x ]]; then
+ CON_TYPE=--active
+ fi
+ case "${words[0]}" in
+ id)
+ if [[ ${#words[@]} -le 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_con_show NAME $CON_TYPE)"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
;;
- -f|--fields)
- COMPREPLY=( $( compgen -W 'all common' -- $cur ) )
- return 0
+ uuid)
+ if [[ ${#words[@]} -le 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_con_show UUID $CON_TYPE)"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
;;
- -e|--escape)
- _nmcli_list "yes no"
- return 0
+ path)
+ if [[ ${#words[@]} -le 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_con_show DBUS-PATH $CON_TYPE)"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
;;
- id)
- _nmcli_con_id
- return 0
+ apath)
+ if [[ ${#words[@]} -le 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_con_show ACTIVE-PATH --active)"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
;;
- uuid)
- _nmcli_con_uuid
- return 0
+ ifname)
+ if [[ ${#words[@]} -le 2 ]]; then
+ _nmcli_list_nl "$(_nmcli_dev_status DEVICE)"
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
;;
- iface)
- _available_interfaces
- return 0
+ *)
+ COMMAND_CONNECTION_TYPE=
+ COMMAND_CONNECTION_ID="${words[0]}"
+ _nmcli_array_delete_at words 0
;;
- bssid)
- _nmcli_ab_bssid
+ esac
+ return 1
+}
+
+_nmcli_compl_COMMAND() {
+ local command="$1"
+ shift
+ local V=("$@")
+ local H=
+ if [[ "${command[0]:0:1}" != '-' ]]; then
+ H=help
+ elif [[ "${command[0]:1:1}" == '-' || "${command[0]}" == "-" ]]; then
+ H=--help
+ else
+ H=-help
+ fi
+ if [[ "x$COMPL_COMMAND_NO_HELP" == x ]]; then
+ V=("${V[@]}" "$H")
+ fi
+ _nmcli_list "${V[*]}"
+}
+
+_nmcli_compl_COMMAND_nl() {
+ local command="$1"
+ local a="$2"
+ shift
+ shift
+ local V=("$@")
+ local H=
+ if [[ "${command[0]:0:1}" != '-' ]]; then
+ V=("${V[@]/#/--}")
+ H=help
+ elif [[ "${command[0]:1:1}" == '-' || "${command[0]}" == "-" ]]; then
+ V=("${V[@]/#/--}")
+ H=--help
+ else
+ V=("${V[@]/#/-}")
+ H=-help
+ fi
+ if [[ "x$COMPL_COMMAND_NO_HELP" == x ]]; then
+ V=("${V[@]}" "$H")
+ fi
+ local IFS=$'\n'
+ V="${V[*]}"
+ _nmcli_list_nl "$(printf "%s%s\n%s" "" "$V" "$a")"
+}
+
+_nmcli()
+{
+ local cur prev words cword i
+ _init_completion || return
+
+ # we don't care about any arguments after the current cursor position
+ # because we only parse from left to right. So, if there are some arguments
+ # right of the cursor, just ignore them. Also don't care about ${words[0]}.
+ _nmcli_array_delete_at words $((cword+1)) ${#words[@]}
+ _nmcli_array_delete_at words 0
+
+ # _init_completion returns the words with all the quotes and escaping
+ # characters. We don't care about them, drop them at first.
+ for i in ${!words[@]}; do
+ words[i]="$(printf '%s' "${words[i]}" | xargs printf '%s\n' 2>/dev/null || true)"
+ done
+
+ # In case the cursor is not at the end of the line,
+ # $cur consists of spaces that we want do remove.
+ # For example: `nmcli connection modify id <TAB> lo`
+ if [[ "$cur" =~ ^[[:space:]]+ ]]; then
+ cur=''
+ fi
+
+ local OPTIONS_UNKNOWN_OPTION OPTIONS_TYPE OPTIONS_TYPED OPTIONS OPTIONS_MANDATORY COMMAND_ARGS_WAIT_OPTIONS OPTIONS_IP OPTIONS_MANDATORY OPTIONS_NEXT_GROUP
+ local COMMAND_CONNECTION_TYPE COMMAND_CONNECTION_ID OPTIONS_MANDATORY_IFNAME HELP_ONLY_AS_FIRST
+ local COMMAND_CONNECTION_ACTIVE=""
+
+ HELP_ONLY_AS_FIRST=
+ local LONG_OPTIONS=(terse pretty mode fields escape nocheck ask wait version help)
+ _nmcli_compl_OPTIONS
+ i=$?
+
+ if [[ "$HELP_ONLY_AS_FIRST" == '0' ]]; then
+ # got a --help. No more completion.
+ return 0
+ fi
+
+ case $i in
+ 0)
return 0
;;
- wep-key-type)
- _nmcli_list "key phrase"
+ 1)
+ # we show for completion either the (remaining) OPTIONS
+ # (if the current word starts with a dash) or the OBJECT list
+ # otherwise.
+ if [[ "${words[0]:0:1}" != '-' ]]; then
+ OPTIONS=(help general networking radio connection device)
+ elif [[ "${words[0]:1:1}" == '-' || "${words[0]}" == "-" ]]; then
+ OPTIONS=("${LONG_OPTIONS[@]/#/--}")
+ else
+ OPTIONS=("${LONG_OPTIONS[@]/#/-}")
+ fi
+ _nmcli_list "${OPTIONS[*]}"
return 0
;;
esac
- if [[ $cword -eq 1 ]] ; then
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--terse --pretty --mode --fields \
- --escape --version --help' -- $cur ) )
- else
- COMPREPLY=( $( compgen -W "nm con dev" -- $cur ) )
- fi
- else
- local object=${words[1]}
- local command=${words[2]}
-
- case $object in
- nm)
- case $command in
- enable)
- _nmcli_list "true false"
- return 0
- ;;
- sleep)
- _nmcli_list "true false"
- return 0
+ local command="${words[1]}"
+ case "${words[0]}" in
+ h|he|hel|help)
+ ;;
+ g|ge|gen|gene|gener|genera|general)
+ if [[ ${#words[@]} -eq 2 ]]; then
+ _nmcli_compl_COMMAND "$command" status permissions logging hostname
+ elif [[ ${#words[@]} -gt 2 ]]; then
+ case "$command" in
+ ho|hos|host|hostn|hostna|hostnam|hostname)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" \
+ "$(printf '%s\n%s\n%s\n' \
+ "$(nmcli general hostname 2>/dev/null)" \
+ "$(cat /etc/hostname 2>/dev/null)" \
+ "$(hostnamectl status 2>/dev/null | sed -n '1s/^.\+hostname: \(.\+\)$/\1/p')" \
+ "$HOSTNAME")"
+ fi
;;
- wifi)
- _nmcli_list "on off"
- return 0
+ l|lo|log|logg|loggi|loggin|logging)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND "${words[2]}" level domains
+ else
+ _nmcli_array_delete_at words 0 1
+ OPTIONS=(level domains)
+ _nmcli_compl_ARGS
+ fi
;;
- wwan)
- _nmcli_list "on off"
- return 0
+ esac
+ fi
+ ;;
+ n|ne|net|netw|netwo|networ|network|networki|networkin|networking)
+ if [[ ${#words[@]} -eq 2 ]]; then
+ _nmcli_compl_COMMAND "$command" on off connectivity
+ elif [[ ${#words[@]} -eq 3 ]]; then
+ case "$command" in
+ c|co|con|conn|conne|connec|connect|connecti|connectiv|connectivi|connectivit|connectivity)
+ _nmcli_compl_COMMAND "${words[2]}" "check"
;;
- wimax)
- _nmcli_list "on off"
- return 0
+ esac
+ fi
+ ;;
+ r|ra|rad|radi|radio)
+ if [[ ${#words[@]} -eq 2 ]]; then
+ _nmcli_compl_COMMAND "$command" all wifi wwan wimax
+ elif [[ ${#words[@]} -eq 3 ]]; then
+ case "$command" in
+ a|al|all | w|wi|wif|wifi | ww|wwa|wwan | wim|wima|wimax)
+ _nmcli_compl_COMMAND "${words[2]}" "on off"
;;
esac
+ fi
+ ;;
+ c|co|con|conn|conne|connec|connect|connecti|connectio|connection)
+ if [[ ${#words[@]} -eq 2 ]]; then
+ _nmcli_compl_COMMAND "$command" show up down add modify edit delete reload load
+ elif [[ ${#words[@]} -gt 2 ]]; then
+ case "$command" in
+ s|sh|sho|show)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME)")" active
+ elif [[ ${#words[@]} -gt 3 ]]; then
+ _nmcli_array_delete_at words 0 1
- COMPREPLY=( $( compgen -W 'status permissions enable sleep \
- wifi wwan wimax' -- $cur ) )
- ;;
- con)
- case $command in
- list)
- COMPREPLY=( $( compgen -W 'id uuid' -- $cur ) )
- return 0
- ;;
- up)
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--nowait --timeout' \
- -- $cur ) )
- else
- COMPREPLY=( $( compgen -W 'id uuid iface ap nsp' \
- -- $cur ) )
+ LONG_OPTIONS=(help active)
+ HELP_ONLY_AS_FIRST=1
+ _nmcli_compl_OPTIONS
+ i=$?
+
+ if ! _nmcli_array_has_value LONG_OPTIONS active; then
+ COMMAND_CONNECTION_ACTIVE=1
+ fi
+
+ case $i in
+ 0)
+ return 0
+ ;;
+ 1)
+ if [[ "$HELP_ONLY_AS_FIRST" == 1 ]]; then
+ if [[ "x$COMMAND_CONNECTION_ACTIVE" = x ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME)")" "${LONG_OPTIONS[@]}"
+
+ else
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME --active)")" "${LONG_OPTIONS[@]}"
+ fi
+ fi
+ return 0
+ ;;
+ esac
+
+ OPTIONS=(id uuid path apath)
+ while [[ ${#words[@]} -gt 0 ]]; do
+ _nmcli_compl_ARGS_CONNECTION && return 0
+ done
+ if [[ "x$COMMAND_CONNECTION_ACTIVE" = x ]]; then
+ _nmcli_list_nl "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME)")"
+ else
+ _nmcli_list_nl "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME --active)")"
+ fi
fi
- return 0
;;
- down)
- COMPREPLY=( $( compgen -W 'id uuid' -- $cur ) )
- return 0
- ;;
- delete)
- COMPREPLY=( $( compgen -W 'id uuid' -- $cur ) )
- return 0
+ u|up)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "ifname\nid\nuuid\npath\n%s" "$(_nmcli_con_show NAME)")"
+ elif [[ ${#words[@]} -gt 3 ]]; then
+ _nmcli_array_delete_at words 0 1
+
+ LONG_OPTIONS=(help)
+ HELP_ONLY_AS_FIRST=1
+ _nmcli_compl_OPTIONS
+
+ case $? in
+ 0)
+ return 0
+ ;;
+ 1)
+ if [[ "$HELP_ONLY_AS_FIRST" == 1 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "ifname\nid\nuuid\npath\n%s" "$(_nmcli_con_show NAME)")" "${LONG_OPTIONS[@]}"
+ fi
+ return 0
+ ;;
+ esac
+
+ local COMMAND_CONNECTION_TYPE=''
+ OPTIONS=(ifname id uuid path)
+ _nmcli_compl_ARGS_CONNECTION && return 0
+
+ if [[ "$COMMAND_CONNECTION_TYPE" = "ifname" ]]; then
+ OPTIONS=(ap nsp)
+ else
+ OPTIONS=(ifname ap nsp)
+ fi
+ _nmcli_compl_ARGS
+ fi
;;
- esac
+ d|do|dow|down)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME --active)")"
+ elif [[ ${#words[@]} -gt 3 ]]; then
+ _nmcli_array_delete_at words 0 1
- COMPREPLY=( $( compgen -W 'list status up down delete' \
- -- $cur ) )
- ;;
- dev)
- case $command in
- list)
- COMPREPLY=( $( compgen -W 'iface' -- $cur ) )
- return 0
- ;;
- disconnect)
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--nowait --timeout' \
- -- $cur ) )
- else
- COMPREPLY=( $( compgen -W 'iface' -- $cur ) )
+ LONG_OPTIONS=(help)
+ HELP_ONLY_AS_FIRST=1
+ _nmcli_compl_OPTIONS
+ case $? in
+ 0)
+ return 0
+ ;;
+ 1)
+ if [[ "$HELP_ONLY_AS_FIRST" == 1 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME --active)")" "${LONG_OPTIONS[@]}"
+ fi
+ return 0
+ ;;
+ esac
+
+ OPTIONS=(id uuid path apath)
+ COMMAND_CONNECTION_ACTIVE=1
+ _nmcli_compl_ARGS_CONNECTION && return 0
fi
- return 0
;;
- wifi)
- local subcommand=${words[3]}
+ a|ad|add)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND "${words[2]}" type ifname con-name autoconnect
+ elif [[ ${#words[@]} -gt 3 ]]; then
+ _nmcli_array_delete_at words 0 1
+
+ LONG_OPTIONS=(help)
+ HELP_ONLY_AS_FIRST=1
+ _nmcli_compl_OPTIONS
+ case $? in
+ 0)
+ return 0
+ ;;
+ 1)
+ if [[ "$HELP_ONLY_AS_FIRST" == 1 ]]; then
+ _nmcli_compl_COMMAND "${words[2]}" type ifname con-name autoconnect
+ fi
+ return 0
+ ;;
+ esac
+
+ OPTIONS_TYPE=
+ OPTIONS=(type ifname con-name autoconnect save)
+ OPTIONS_MANDATORY=(type ifname)
+ COMMAND_ARGS_WAIT_OPTIONS=1
+ OPTIONS_MANDATORY_IFNAME=1
+ _nmcli_compl_ARGS && return 0
- case $subcommand in
- list)
- COMPREPLY=( $( compgen -W 'iface bssid' \
- -- $cur ) )
+ OPTIONS_MANDATORY_IFNAME=
+ if _nmcli_array_has_value OPTIONS "${OPTIONS_MANDATORY[@]}"; then
+ # we still have some missing mandatory options...
+ if [[ "$OPTIONS_UNKNOWN_OPTION" != '' ]]; then
+ if ! _nmcli_array_has_value OPTIONS "${OPTIONS_UNKNOWN_OPTION:1}"; then
+ # if we encountered an unknown option while having mandatory
+ # options, just return.
+ return 0
+ fi
+ fi
+ _nmcli_list "$(echo "${OPTIONS[@]}")"
return 0
- ;;
- connect)
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--private \
- --nowait --timeout' -- $cur ) )
+ fi
+
+ OPTIONS_IP=(ip4 ip6 gw4 gw6)
+ OPTIONS_MANDATORY=()
+ case "$OPTIONS_TYPE" in
+ 802-3|802-3-|802-3-e|802-3-et|802-3-eth|802-3-ethe|802-3-ether|802-3-ethern|802-3-etherne|802-3-ethernet| \
+ e|et|eth|ethe|ether|ethern|etherne|ethernet)
+ OPTIONS_TYPED=(mac cloned-mac mtu)
+ ;;
+ 802-11-w|802-11-wi|802-11-wir|802-11-wire|802-11-wirel|802-11-wirele|802-11-wireles|802-11-wireless| \
+ wif|wifi)
+ OPTIONS_TYPED=(ssid mac cloned-mac mtu)
+ OPTIONS_MANDATORY=(ssid)
+ ;;
+ wim|wima|wimax)
+ OPTIONS_TYPED=(mac nsp)
+ ;;
+ g|gs|gsm)
+ OPTIONS_TYPED=(apn user password)
+ OPTIONS_MANDATORY=(apn)
+ ;;
+ c|cd|cdm|cdma)
+ OPTIONS_TYPED=(user password)
+ ;;
+ i|in|inf|infi|infin|infini|infinib|infiniba|infiniban|infiniband)
+ OPTIONS_TYPED=(mac mtu transport-mode parent p-key)
+ ;;
+ bl|blu|blue|bluet|blueto|bluetoo|bluetoot|bluetooth)
+ OPTIONS_TYPED=(addr bt-type)
+ ;;
+ vl|vla|vlan)
+ OPTIONS_TYPED=(dev id flags ingress egress mtu)
+ OPTIONS_MANDATORY=(dev)
+ ;;
+ bond)
+ OPTIONS_TYPED=(mode miimon downdelay updelay arp-interval arp-ip-target primary)
+ ;;
+ bond-|bond-s|bond-sl|bond-sla|bond-slav|bond-slave)
+ OPTIONS_TYPED=(master)
+ OPTIONS_MANDATORY=(master)
+ OPTIONS_IP=()
+ ;;
+ team)
+ OPTIONS_TYPED=(config)
+ ;;
+ team-|team-s|team-sl|team-sla|team-slav|team-slave)
+ OPTIONS_TYPED=(master config)
+ OPTIONS_MANDATORY=(master)
+ OPTIONS_IP=()
+ ;;
+ bridge)
+ OPTIONS_TYPED=(stp priority forward-delay hello-time max-age ageing-time mac)
+ ;;
+ bridge-|bridge-s|bridge-sl|bridge-sla|bridge-slav|bridge-slave)
+ OPTIONS_TYPED=(master priority path-cost hairpin)
+ OPTIONS_MANDATORY=(master)
+ OPTIONS_IP=()
+ ;;
+ vp|vpn)
+ OPTIONS_TYPED=(vpn-type user)
+ OPTIONS_MANDATORY=(vpn-type)
+ ;;
+ 802-11-o|802-11-ol|802-11-olp|802-11-olpc|802-11-olpc-|802-11-olpc-m|802-11-olpc-me|802-11-olpc-mes|802-11-olpc-mesh| \
+ o|ol|olp|olpc|olpc-|olpc-m|olpc-me|olpc-mes|olpc-mesh)
+ OPTIONS_TYPED=(ssid channel dhcp-anycast)
+ OPTIONS_MANDATORY=(ssid)
+ ;;
+ p|pp|ppp|pppo|pppoe)
+ OPTIONS_TYPED=(username password service mtu mac)
+ OPTIONS_MANDATORY=(username)
+ ;;
+ *)
+ # for an unknown connection type, we stop completion here
+ return 0
+ ;;
+ esac
+ if [[ "$COMMAND_ARGS_WAIT_OPTIONS" -ne 1 ]]; then
+ # means, we are at the end of options. Nothing more to parse, just show
+ # what are the options now.
+ if [[ "${#OPTIONS_MANDATORY[@]}" -gt 0 ]]; then
+ _nmcli_list "$(echo "${OPTIONS[@]}") $(echo "${OPTIONS_TYPED[@]}")"
else
- if [[ "$prev" == "connect" ]]; then
- _nmcli_ap_ssid
+ _nmcli_list "$(echo "${OPTIONS[@]}") $(echo "${OPTIONS_TYPED[@]}") $(echo "${OPTIONS_IP[@]}")"
+ fi
+ return 0
+ fi
+ if [[ "${#OPTIONS[@]}" -gt 0 ]]; then
+ # we still have some options from before, but no mandatory ones. Mix them with OPTIONS_TYPED
+ # and continue parsing the options...
+ OPTIONS=("${OPTIONS[@]}" "${OPTIONS_TYPED[@]}")
+ OPTIONS_NEXT_GROUP=("${OPTIONS_TYPED[@]}")
+ _nmcli_compl_ARGS && return 0
+
+ if [[ "$COMMAND_ARGS_WAIT_OPTIONS" -ne 1 ]]; then
+ # means, we are at the end of options. Nothing more to parse, just show
+ # what are the options now.
+ if [[ "${#OPTIONS_MANDATORY[@]}" -gt 0 ]]; then
+ _nmcli_list "$(echo "${OPTIONS[@]}")"
else
- COMPREPLY=( $( compgen -W 'password \
- wep-key-type iface bssid name' \
- -- $cur ) )
+ _nmcli_list "$(echo "${OPTIONS[@]}") $(echo "${OPTIONS_IP[@]}")"
+ fi
+ return 0
+ fi
+
+ if [[ "$OPTIONS_UNKNOWN_OPTION" != "" ]]; then
+ # there was an unknown option specified. Maybe we have to stop with the completion.
+ if [[ "${#OPTIONS_MANDATORY[@]}" -gt 0 ]]; then
+ # we have an unknown option, but still mandatory ones that must be fullfiled first.
+ return 0
fi
+ if ! _nmcli_array_has_value OPTIONS_IP "${OPTIONS_UNKNOWN_OPTION:1}"; then
+ # the unknown option is NOT an IP option.
+ return 0
+ fi
+ # The unknown option is an IP option, which is fine... continue...
fi
+
+ fi
+ OPTIONS=("${OPTIONS_TYPED[@]}")
+ OPTIONS_NEXT_GROUP=()
+
+ if [[ "${#OPTIONS_MANDATORY[@]}" -ge 1 ]]; then
+ # we have some mandatory options... don't check for IP options yet...
+ _nmcli_compl_ARGS && return 0
+
+ if _nmcli_array_has_value OPTIONS "${OPTIONS_MANDATORY[@]}"; then
+ _nmcli_list "$(echo "${OPTIONS[@]}")"
+ return 0
+ fi
+
+ if [[ "$OPTIONS_UNKNOWN_OPTION" != "" ]]; then
+ if ! _nmcli_array_has_value OPTIONS_IP "${OPTIONS_UNKNOWN_OPTION:1}"; then
+ # the unknown option is NOT an IP option.
+ return 0
+ fi
+ fi
+ fi
+
+
+ # no mandatory options... do final completion including IP options
+ OPTIONS=("${OPTIONS[@]}" "${OPTIONS_IP[@]}")
+ OPTIONS_NEXT_GROUP=("${OPTIONS_IP[@]}")
+ _nmcli_compl_ARGS && return 0
+
+ if [[ "$OPTIONS_UNKNOWN_OPTION" != "" ]]; then
return 0
- ;;
- esac
+ fi
- COMPREPLY=( $( compgen -W 'list connect' -- $cur ) )
- return 0
+ if [[ "$COMMAND_ARGS_WAIT_OPTIONS" -ne 1 ]]; then
+ # means, we are at the end of options. Nothing more to parse, just show
+ # what are the options now.
+ _nmcli_list "$(echo "${OPTIONS[@]}")"
+ return 0
+ fi
+
+ # process the last group of options, as the OPTIONS_TYPED are already handled...
+ OPTIONS=("${OPTIONS_IP[@]}")
+ OPTIONS_NEXT_GROUP=()
+ COMMAND_ARGS_WAIT_OPTIONS=0
+ _nmcli_compl_ARGS && return 0
+ fi
;;
- esac
+ e|ed|edi|edit)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\ntype\ncon-name\n%s" "$(_nmcli_con_show NAME)")"
+ elif [[ ${#words[@]} -gt 3 ]]; then
+ _nmcli_array_delete_at words 0 1
- COMPREPLY=( $( compgen -W 'status list disconnect wifi' \
- -- $cur ) )
- ;;
- esac
+ LONG_OPTIONS=(help)
+ HELP_ONLY_AS_FIRST=1
+ _nmcli_compl_OPTIONS
- fi
+ case $? in
+ 0)
+ return 0
+ ;;
+ 1)
+ if [[ "$HELP_ONLY_AS_FIRST" == 1 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\ntype\ncon-name\n%s" "$(_nmcli_con_show NAME)")" "${LONG_OPTIONS[@]}"
+ fi
+ return 0
+ ;;
+ esac
+
+ if [[ "${words[0]}" = 'type' || "${words[0]}" = 'con-name' ]]; then
+ OPTIONS=(type con-name)
+ _nmcli_compl_ARGS
+ else
+ OPTIONS=(id uuid path apath)
+ _nmcli_compl_ARGS_CONNECTION
+ fi
+ fi
+ ;;
+ m|mo|mod|modi|modif|modify)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\n%s" "$(_nmcli_con_show NAME)")" temporary
+ elif [[ ${#words[@]} -gt 3 ]]; then
+ _nmcli_array_delete_at words 0 1
+
+ LONG_OPTIONS=(help temporary)
+ HELP_ONLY_AS_FIRST=1
+ _nmcli_compl_OPTIONS
+ case $? in
+ 0)
+ return 0
+ ;;
+ 1)
+ if [[ "$HELP_ONLY_AS_FIRST" == 1 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\n%s" "$(_nmcli_con_show NAME)")" "${LONG_OPTIONS[@]}"
+ fi
+ return 0
+ ;;
+ esac
+
+ OPTIONS=(id uuid path apath)
+ _nmcli_compl_ARGS_CONNECTION && return 0
+ while [[ "${#words[@]}" -gt 0 ]]; do
+ if [[ ${#words[@]} -le 1 ]]; then
+ _nmcli_list_nl "$(nmcli --fields profile connection show "${COMMAND_CONNECTION_TYPE:-id}" "$COMMAND_CONNECTION_ID" 2>/dev/null | sed -n 's/^\([^:]\+\):.*/\1/p')"
+ return 0
+ elif [[ ${#words[@]} -le 2 ]]; then
+ return 0
+ fi
+ _nmcli_array_delete_at words 0 1
+ done
+ _nmcli_list_nl "$(nmcli --fields profile connection show "${COMMAND_CONNECTION_TYPE:-id}" "$COMMAND_CONNECTION_ID" 2>/dev/null | sed -n 's/^\([^:]\+\):.*/\1/p')"
+ return 0
+ fi
+ ;;
+ de|del|dele|delet|delete)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\n%s" "$(_nmcli_con_show NAME)")"
+ elif [[ ${#words[@]} -gt 3 ]]; then
+ _nmcli_array_delete_at words 0 1
+
+ LONG_OPTIONS=(help)
+ _nmcli_compl_OPTIONS
+ case $? in
+ 0)
+ return 0
+ ;;
+ 1)
+ if ! _nmcli_array_has_value LONG_OPTIONS "help"; then
+ return 0
+ fi
+ ;;
+ esac
+
+ OPTIONS=(id uuid path apath)
+ while [[ ${#words[@]} -gt 0 ]]; do
+ _nmcli_compl_ARGS_CONNECTION && return 0
+ done
+ _nmcli_list_nl "$(printf "id\nuuid\npath\n%s" "$(_nmcli_con_show NAME)")"
+ fi
+ ;;
+ l|lo|loa|load)
+ if [[ ${#words[@]} -gt 2 ]]; then
+ # we should also complete for help/--help, but who to mix that
+ # with file name completion?
+ compopt -o default
+ COMPREPLY=()
+ fi
+ ;;
+ esac
+ fi
+ ;;
+ d|de|dev|devi|devic|device)
+ if [[ ${#words[@]} -eq 2 ]]; then
+ _nmcli_compl_COMMAND "$command" status show connect disconnect wifi wimax
+ elif [[ ${#words[@]} -gt 2 ]]; then
+ case "$command" in
+ s|st|sta|stat|statu|status)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND "${words[2]}"
+ fi
+ ;;
+ sh|sho|show| \
+ c|co|con|conn|conne|connec|connect| \
+ d|di|dis|disc|disco|discon|disconn|disconne|disconnec|disconnect)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(_nmcli_dev_status DEVICE)"
+ fi
+ ;;
+ w|wi|wif|wifi)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND "${words[2]}" list connect rescan
+ else
+ case "${words[2]}" in
+ l|li|lis|list)
+ _nmcli_array_delete_at words 0 2
+ OPTIONS=(ifname bssid)
+ _nmcli_compl_ARGS
+ ;;
+ c|co|con|conn|conne|connec|connect)
+ if [[ ${#words[@]} -eq 4 ]]; then
+ if [[ "${words[3]}" = "" ]]; then
+ _nmcli_list_nl "$(_nmcli_wifi_list SSID)"
+ else
+ _nmcli_list_nl "$(printf "%s\n%s" "$(_nmcli_wifi_list SSID)" "$(_nmcli_wifi_list BSSID)")"
+ fi
+ else
+ _nmcli_array_delete_at words 0 3
+ local OPTIONS=(password wep-key-type ifname bssid name private)
+ _nmcli_compl_ARGS
+ fi
+ ;;
+ r|re|res|resc|resca|rescan)
+ _nmcli_array_delete_at words 0 2
+ OPTIONS=(ifname)
+ _nmcli_compl_ARGS
+ ;;
+ esac
+ fi
+ ;;
+ wim|wima|wimax)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND "${words[2]}" list
+ else
+ case "${words[2]}" in
+ l|li|lis|list)
+ _nmcli_array_delete_at words 0 2
+ OPTIONS=(ifname nsp)
+ _nmcli_compl_ARGS
+ ;;
+ esac
+ fi
+ ;;
+
+ esac
+ fi
+ ;;
+ esac
return 0
} &&
diff --git a/cli/src/Makefile.am b/cli/src/Makefile.am
index 1cd2a0067..e61c03689 100644
--- a/cli/src/Makefile.am
+++ b/cli/src/Makefile.am
@@ -1,7 +1,7 @@
bin_PROGRAMS = \
nmcli
-nmcli_CPPFLAGS = \
+AM_CPPFLAGS = \
-I${top_srcdir} \
-I${top_srcdir}/include \
-I${top_builddir}/include \
@@ -10,6 +10,8 @@ nmcli_CPPFLAGS = \
-I${top_srcdir}/libnm-glib \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
+ -DG_LOG_DOMAIN=\""nmcli"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DNMCLI_LOCALEDIR=\"$(datadir)/locale\"
nmcli_SOURCES = \
@@ -31,6 +33,7 @@ nmcli_SOURCES = \
nmcli_LDADD = \
$(DBUS_LIBS) \
$(GLIB_LIBS) \
+ $(READLINE_LIBS) \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la
diff --git a/cli/src/Makefile.in b/cli/src/Makefile.in
index 468465719..8f3129c70 100644
--- a/cli/src/Makefile.in
+++ b/cli/src/Makefile.in
@@ -83,7 +83,8 @@ subdir = cli/src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -103,14 +104,13 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
-am_nmcli_OBJECTS = nmcli-common.$(OBJEXT) nmcli-connections.$(OBJEXT) \
- nmcli-devices.$(OBJEXT) nmcli-network-manager.$(OBJEXT) \
- nmcli-settings.$(OBJEXT) nmcli-nmcli.$(OBJEXT) \
- nmcli-utils.$(OBJEXT)
+am_nmcli_OBJECTS = common.$(OBJEXT) connections.$(OBJEXT) \
+ devices.$(OBJEXT) network-manager.$(OBJEXT) settings.$(OBJEXT) \
+ nmcli.$(OBJEXT) utils.$(OBJEXT)
nmcli_OBJECTS = $(am_nmcli_OBJECTS)
am__DEPENDENCIES_1 =
nmcli_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(top_builddir)/libnm-util/libnm-util.la \
+ $(am__DEPENDENCIES_1) $(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -202,12 +202,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -232,7 +235,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -277,12 +279,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -299,6 +305,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -326,11 +334,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -345,6 +358,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -407,6 +421,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -417,7 +432,8 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-nmcli_CPPFLAGS = \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
-I${top_srcdir} \
-I${top_srcdir}/include \
-I${top_builddir}/include \
@@ -426,6 +442,8 @@ nmcli_CPPFLAGS = \
-I${top_srcdir}/libnm-glib \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
+ -DG_LOG_DOMAIN=\""nmcli"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DNMCLI_LOCALEDIR=\"$(datadir)/locale\"
nmcli_SOURCES = \
@@ -447,6 +465,7 @@ nmcli_SOURCES = \
nmcli_LDADD = \
$(DBUS_LIBS) \
$(GLIB_LIBS) \
+ $(READLINE_LIBS) \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la
@@ -544,13 +563,13 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-common.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-connections.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-devices.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-network-manager.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-nmcli.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-settings.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connections.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/devices.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/network-manager.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/settings.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -573,104 +592,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-nmcli-common.o: common.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-common.o -MD -MP -MF $(DEPDIR)/nmcli-common.Tpo -c -o nmcli-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-common.Tpo $(DEPDIR)/nmcli-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='nmcli-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
-
-nmcli-common.obj: common.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-common.obj -MD -MP -MF $(DEPDIR)/nmcli-common.Tpo -c -o nmcli-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-common.Tpo $(DEPDIR)/nmcli-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='nmcli-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
-
-nmcli-connections.o: connections.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-connections.o -MD -MP -MF $(DEPDIR)/nmcli-connections.Tpo -c -o nmcli-connections.o `test -f 'connections.c' || echo '$(srcdir)/'`connections.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-connections.Tpo $(DEPDIR)/nmcli-connections.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connections.c' object='nmcli-connections.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-connections.o `test -f 'connections.c' || echo '$(srcdir)/'`connections.c
-
-nmcli-connections.obj: connections.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-connections.obj -MD -MP -MF $(DEPDIR)/nmcli-connections.Tpo -c -o nmcli-connections.obj `if test -f 'connections.c'; then $(CYGPATH_W) 'connections.c'; else $(CYGPATH_W) '$(srcdir)/connections.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-connections.Tpo $(DEPDIR)/nmcli-connections.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connections.c' object='nmcli-connections.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-connections.obj `if test -f 'connections.c'; then $(CYGPATH_W) 'connections.c'; else $(CYGPATH_W) '$(srcdir)/connections.c'; fi`
-
-nmcli-devices.o: devices.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-devices.o -MD -MP -MF $(DEPDIR)/nmcli-devices.Tpo -c -o nmcli-devices.o `test -f 'devices.c' || echo '$(srcdir)/'`devices.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-devices.Tpo $(DEPDIR)/nmcli-devices.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices.c' object='nmcli-devices.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-devices.o `test -f 'devices.c' || echo '$(srcdir)/'`devices.c
-
-nmcli-devices.obj: devices.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-devices.obj -MD -MP -MF $(DEPDIR)/nmcli-devices.Tpo -c -o nmcli-devices.obj `if test -f 'devices.c'; then $(CYGPATH_W) 'devices.c'; else $(CYGPATH_W) '$(srcdir)/devices.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-devices.Tpo $(DEPDIR)/nmcli-devices.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices.c' object='nmcli-devices.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-devices.obj `if test -f 'devices.c'; then $(CYGPATH_W) 'devices.c'; else $(CYGPATH_W) '$(srcdir)/devices.c'; fi`
-
-nmcli-network-manager.o: network-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-network-manager.o -MD -MP -MF $(DEPDIR)/nmcli-network-manager.Tpo -c -o nmcli-network-manager.o `test -f 'network-manager.c' || echo '$(srcdir)/'`network-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-network-manager.Tpo $(DEPDIR)/nmcli-network-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='network-manager.c' object='nmcli-network-manager.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-network-manager.o `test -f 'network-manager.c' || echo '$(srcdir)/'`network-manager.c
-
-nmcli-network-manager.obj: network-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-network-manager.obj -MD -MP -MF $(DEPDIR)/nmcli-network-manager.Tpo -c -o nmcli-network-manager.obj `if test -f 'network-manager.c'; then $(CYGPATH_W) 'network-manager.c'; else $(CYGPATH_W) '$(srcdir)/network-manager.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-network-manager.Tpo $(DEPDIR)/nmcli-network-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='network-manager.c' object='nmcli-network-manager.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-network-manager.obj `if test -f 'network-manager.c'; then $(CYGPATH_W) 'network-manager.c'; else $(CYGPATH_W) '$(srcdir)/network-manager.c'; fi`
-
-nmcli-settings.o: settings.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-settings.o -MD -MP -MF $(DEPDIR)/nmcli-settings.Tpo -c -o nmcli-settings.o `test -f 'settings.c' || echo '$(srcdir)/'`settings.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-settings.Tpo $(DEPDIR)/nmcli-settings.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings.c' object='nmcli-settings.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-settings.o `test -f 'settings.c' || echo '$(srcdir)/'`settings.c
-
-nmcli-settings.obj: settings.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-settings.obj -MD -MP -MF $(DEPDIR)/nmcli-settings.Tpo -c -o nmcli-settings.obj `if test -f 'settings.c'; then $(CYGPATH_W) 'settings.c'; else $(CYGPATH_W) '$(srcdir)/settings.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-settings.Tpo $(DEPDIR)/nmcli-settings.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings.c' object='nmcli-settings.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-settings.obj `if test -f 'settings.c'; then $(CYGPATH_W) 'settings.c'; else $(CYGPATH_W) '$(srcdir)/settings.c'; fi`
-
-nmcli-nmcli.o: nmcli.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-nmcli.o -MD -MP -MF $(DEPDIR)/nmcli-nmcli.Tpo -c -o nmcli-nmcli.o `test -f 'nmcli.c' || echo '$(srcdir)/'`nmcli.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-nmcli.Tpo $(DEPDIR)/nmcli-nmcli.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nmcli.c' object='nmcli-nmcli.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-nmcli.o `test -f 'nmcli.c' || echo '$(srcdir)/'`nmcli.c
-
-nmcli-nmcli.obj: nmcli.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-nmcli.obj -MD -MP -MF $(DEPDIR)/nmcli-nmcli.Tpo -c -o nmcli-nmcli.obj `if test -f 'nmcli.c'; then $(CYGPATH_W) 'nmcli.c'; else $(CYGPATH_W) '$(srcdir)/nmcli.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-nmcli.Tpo $(DEPDIR)/nmcli-nmcli.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nmcli.c' object='nmcli-nmcli.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-nmcli.obj `if test -f 'nmcli.c'; then $(CYGPATH_W) 'nmcli.c'; else $(CYGPATH_W) '$(srcdir)/nmcli.c'; fi`
-
-nmcli-utils.o: utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-utils.o -MD -MP -MF $(DEPDIR)/nmcli-utils.Tpo -c -o nmcli-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-utils.Tpo $(DEPDIR)/nmcli-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='nmcli-utils.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c
-
-nmcli-utils.obj: utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmcli-utils.obj -MD -MP -MF $(DEPDIR)/nmcli-utils.Tpo -c -o nmcli-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nmcli-utils.Tpo $(DEPDIR)/nmcli-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='nmcli-utils.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nmcli_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmcli-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/cli/src/common.c b/cli/src/common.c
index 15ddcada4..e6712a8d6 100644
--- a/cli/src/common.c
+++ b/cli/src/common.c
@@ -16,59 +16,68 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2012 Red Hat, Inc.
+ * (C) Copyright 2012 - 2014 Red Hat, Inc.
*/
#include "config.h"
#include <glib.h>
#include <glib/gi18n.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <readline/readline.h>
+#include <readline/history.h>
#include "common.h"
#include "utils.h"
/* Available fields for IPv4 group */
-static NmcOutputField nmc_fields_ip4_config[] = {
- {"GROUP", N_("GROUP"), 15, NULL, 0}, /* 0 */
- {"ADDRESS", N_("ADDRESS"), 68, NULL, 0}, /* 1 */
- {"ROUTE", N_("ROUTE"), 68, NULL, 0}, /* 2 */
- {"DNS", N_("DNS"), 35, NULL, 0}, /* 3 */
- {"DOMAIN", N_("DOMAIN"), 35, NULL, 0}, /* 4 */
- {"WINS", N_("WINS"), 20, NULL, 0}, /* 5 */
- {NULL, NULL, 0, NULL, 0}
+NmcOutputField nmc_fields_ip4_config[] = {
+ {"GROUP", N_("GROUP"), 15}, /* 0 */
+ {"ADDRESS", N_("ADDRESS"), 68}, /* 1 */
+ {"ROUTE", N_("ROUTE"), 68}, /* 2 */
+ {"DNS", N_("DNS"), 35}, /* 3 */
+ {"DOMAIN", N_("DOMAIN"), 35}, /* 4 */
+ {"WINS", N_("WINS"), 20}, /* 5 */
+ {NULL, NULL, 0}
};
#define NMC_FIELDS_IP4_CONFIG_ALL "GROUP,ADDRESS,ROUTE,DNS,DOMAIN,WINS"
/* Available fields for DHCPv4 group */
-static NmcOutputField nmc_fields_dhcp4_config[] = {
- {"GROUP", N_("GROUP"), 15, NULL, 0}, /* 0 */
- {"OPTION", N_("OPTION"), 80, NULL, 0}, /* 1 */
- {NULL, NULL, 0, NULL, 0}
+NmcOutputField nmc_fields_dhcp4_config[] = {
+ {"GROUP", N_("GROUP"), 15}, /* 0 */
+ {"OPTION", N_("OPTION"), 80}, /* 1 */
+ {NULL, NULL, 0}
};
#define NMC_FIELDS_DHCP4_CONFIG_ALL "GROUP,OPTION"
/* Available fields for IPv6 group */
-static NmcOutputField nmc_fields_ip6_config[] = {
- {"GROUP", N_("GROUP"), 15, NULL, 0}, /* 0 */
- {"ADDRESS", N_("ADDRESS"), 95, NULL, 0}, /* 1 */
- {"ROUTE", N_("ROUTE"), 95, NULL, 0}, /* 2 */
- {"DNS", N_("DNS"), 60, NULL, 0}, /* 3 */
- {"DOMAIN", N_("DOMAIN"), 35, NULL, 0}, /* 4 */
- {NULL, NULL, 0, NULL, 0}
+NmcOutputField nmc_fields_ip6_config[] = {
+ {"GROUP", N_("GROUP"), 15}, /* 0 */
+ {"ADDRESS", N_("ADDRESS"), 95}, /* 1 */
+ {"ROUTE", N_("ROUTE"), 95}, /* 2 */
+ {"DNS", N_("DNS"), 60}, /* 3 */
+ {"DOMAIN", N_("DOMAIN"), 35}, /* 4 */
+ {NULL, NULL, 0}
};
#define NMC_FIELDS_IP6_CONFIG_ALL "GROUP,ADDRESS,ROUTE,DNS,DOMAIN"
/* Available fields for DHCPv6 group */
-static NmcOutputField nmc_fields_dhcp6_config[] = {
- {"GROUP", N_("GROUP"), 15, NULL, 0}, /* 0 */
- {"OPTION", N_("OPTION"), 80, NULL, 0}, /* 1 */
- {NULL, NULL, 0, NULL, 0}
+NmcOutputField nmc_fields_dhcp6_config[] = {
+ {"GROUP", N_("GROUP"), 15}, /* 0 */
+ {"OPTION", N_("OPTION"), 80}, /* 1 */
+ {NULL, NULL, 0}
};
#define NMC_FIELDS_DHCP6_CONFIG_ALL "GROUP,OPTION"
gboolean
-print_ip4_config (NMIP4Config *cfg4, NmCli *nmc, const char *group_prefix)
+print_ip4_config (NMIP4Config *cfg4,
+ NmCli *nmc,
+ const char *group_prefix,
+ const char *one_field)
{
GSList *list, *iter;
const GArray *array;
@@ -79,17 +88,18 @@ print_ip4_config (NMIP4Config *cfg4, NmCli *nmc, const char *group_prefix)
char **domain_arr = NULL;
char **wins_arr = NULL;
int i = 0;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
if (cfg4 == NULL)
return FALSE;
- nmc->allowed_fields = nmc_fields_ip4_config;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_IP4_CONFIG_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_ip4_config;
+ tmpl_len = sizeof (nmc_fields_ip4_config);
+ nmc->print_fields.indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_IP4_CONFIG_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
/* addresses */
list = (GSList *) nm_ip4_config_get_addresses (cfg4);
@@ -144,7 +154,7 @@ print_ip4_config (NMIP4Config *cfg4, NmCli *nmc, const char *group_prefix)
if (ptr_array) {
domain_arr = g_new (char *, ptr_array->len + 1);
for (i = 0; i < ptr_array->len; i++)
- domain_arr[i] = g_ptr_array_index (ptr_array, i);
+ domain_arr[i] = g_strdup (g_ptr_array_index (ptr_array, i));
domain_arr[i] = NULL;
}
@@ -159,27 +169,28 @@ print_ip4_config (NMIP4Config *cfg4, NmCli *nmc, const char *group_prefix)
wins_arr[i] = NULL;
}
- set_val_str (nmc->allowed_fields, 0, group_prefix);
- set_val_arr (nmc->allowed_fields, 1, (const char **) addr_arr);
- set_val_arr (nmc->allowed_fields, 2, (const char **) route_arr);
- set_val_arr (nmc->allowed_fields, 3, (const char **) dns_arr);
- set_val_arr (nmc->allowed_fields, 4, (const char **) domain_arr);
- set_val_arr (nmc->allowed_fields, 5, (const char **) wins_arr);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, group_prefix);
+ set_val_arr (arr, 1, addr_arr);
+ set_val_arr (arr, 2, route_arr);
+ set_val_arr (arr, 3, dns_arr);
+ set_val_arr (arr, 4, domain_arr);
+ set_val_arr (arr, 5, wins_arr);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- g_strfreev (addr_arr);
- g_strfreev (route_arr);
- g_strfreev (dns_arr);
- g_free (domain_arr);
- g_strfreev (wins_arr);
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
return TRUE;
}
gboolean
-print_ip6_config (NMIP6Config *cfg6, NmCli *nmc, const char *group_prefix)
+print_ip6_config (NMIP6Config *cfg6,
+ NmCli *nmc,
+ const char *group_prefix,
+ const char *one_field)
{
GSList *list, *iter;
const GPtrArray *ptr_array;
@@ -188,17 +199,18 @@ print_ip6_config (NMIP6Config *cfg6, NmCli *nmc, const char *group_prefix)
char **dns_arr = NULL;
char **domain_arr = NULL;
int i = 0;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
if (cfg6 == NULL)
return FALSE;
- nmc->allowed_fields = nmc_fields_ip6_config;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_IP6_CONFIG_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_ip6_config;
+ tmpl_len = sizeof (nmc_fields_ip6_config);
+ nmc->print_fields.indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_IP6_CONFIG_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
/* addresses */
list = (GSList *) nm_ip6_config_get_addresses (cfg6);
@@ -252,35 +264,36 @@ print_ip6_config (NMIP6Config *cfg6, NmCli *nmc, const char *group_prefix)
if (ptr_array) {
domain_arr = g_new (char *, ptr_array->len + 1);
for (i = 0; i < ptr_array->len; i++)
- domain_arr[i] = g_ptr_array_index (ptr_array, i);
+ domain_arr[i] = g_strdup (g_ptr_array_index (ptr_array, i));
domain_arr[i] = NULL;
}
- set_val_str (nmc->allowed_fields, 0, group_prefix);
- set_val_arr (nmc->allowed_fields, 1, (const char **) addr_arr);
- set_val_arr (nmc->allowed_fields, 2, (const char **) route_arr);
- set_val_arr (nmc->allowed_fields, 3, (const char **) dns_arr);
- set_val_arr (nmc->allowed_fields, 4, (const char **) domain_arr);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, group_prefix);
+ set_val_arr (arr, 1, addr_arr);
+ set_val_arr (arr, 2, route_arr);
+ set_val_arr (arr, 3, dns_arr);
+ set_val_arr (arr, 4, domain_arr);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- g_strfreev (addr_arr);
- g_strfreev (route_arr);
- g_strfreev (dns_arr);
- g_free (domain_arr);
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
return TRUE;
}
gboolean
-print_dhcp4_config (NMDHCP4Config *dhcp4, NmCli *nmc, const char *group_prefix)
+print_dhcp4_config (NMDHCP4Config *dhcp4,
+ NmCli *nmc,
+ const char *group_prefix,
+ const char *one_field)
{
GHashTable *table;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
if (dhcp4 == NULL)
return FALSE;
@@ -292,10 +305,12 @@ print_dhcp4_config (NMDHCP4Config *dhcp4, NmCli *nmc, const char *group_prefix)
char **options_arr = NULL;
int i = 0;
- nmc->allowed_fields = nmc_fields_dhcp4_config;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DHCP4_CONFIG_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_dhcp4_config;
+ tmpl_len = sizeof (nmc_fields_dhcp4_config);
+ nmc->print_fields.indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_DHCP4_CONFIG_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
options_arr = g_new (char *, g_hash_table_size (table) + 1);
g_hash_table_iter_init (&table_iter, table);
@@ -303,13 +318,15 @@ print_dhcp4_config (NMDHCP4Config *dhcp4, NmCli *nmc, const char *group_prefix)
options_arr[i++] = g_strdup_printf ("%s = %s", (char *) key, (char *) value);
options_arr[i] = NULL;
- set_val_str (nmc->allowed_fields, 0, group_prefix);
- set_val_arr (nmc->allowed_fields, 1, (const char **) options_arr);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, group_prefix);
+ set_val_arr (arr, 1, options_arr);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- g_strfreev (options_arr);
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
return TRUE;
}
@@ -317,12 +334,14 @@ print_dhcp4_config (NMDHCP4Config *dhcp4, NmCli *nmc, const char *group_prefix)
}
gboolean
-print_dhcp6_config (NMDHCP6Config *dhcp6, NmCli *nmc, const char *group_prefix)
+print_dhcp6_config (NMDHCP6Config *dhcp6,
+ NmCli *nmc,
+ const char *group_prefix,
+ const char *one_field)
{
GHashTable *table;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
if (dhcp6 == NULL)
return FALSE;
@@ -334,10 +353,12 @@ print_dhcp6_config (NMDHCP6Config *dhcp6, NmCli *nmc, const char *group_prefix)
char **options_arr = NULL;
int i = 0;
- nmc->allowed_fields = nmc_fields_dhcp6_config;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DHCP6_CONFIG_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_dhcp6_config;
+ tmpl_len = sizeof (nmc_fields_dhcp6_config);
+ nmc->print_fields.indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_DHCP6_CONFIG_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
options_arr = g_new (char *, g_hash_table_size (table) + 1);
g_hash_table_iter_init (&table_iter, table);
@@ -345,19 +366,313 @@ print_dhcp6_config (NMDHCP6Config *dhcp6, NmCli *nmc, const char *group_prefix)
options_arr[i++] = g_strdup_printf ("%s = %s", (char *) key, (char *) value);
options_arr[i] = NULL;
- set_val_str (nmc->allowed_fields, 0, group_prefix);
- set_val_arr (nmc->allowed_fields, 1, (const char **) options_arr);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, group_prefix);
+ set_val_arr (arr, 1, options_arr);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- g_strfreev (options_arr);
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
return TRUE;
}
return FALSE;
}
+/*
+ * Parse IPv4 address from string to NMIP4Address stucture.
+ * ip_str is the IPv4 address in the form address/prefix
+ * gw_str is the gateway address (it is optional)
+ */
+NMIP4Address *
+nmc_parse_and_build_ip4_address (const char *ip_str, const char *gw_str, GError **error)
+{
+ NMIP4Address *addr = NULL;
+ guint32 ip4_addr, gw_addr;
+ char *tmp;
+ char *plen;
+ long int prefix;
+
+ g_return_val_if_fail (ip_str != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ tmp = g_strdup (ip_str);
+ plen = strchr (tmp, '/'); /* prefix delimiter */
+ if (plen)
+ *plen++ = '\0';
+
+ if (inet_pton (AF_INET, tmp, &ip4_addr) < 1) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid IPv4 address '%s'"), tmp);
+ goto finish;
+ }
+
+ prefix = 32;
+ if (plen) {
+ if (!nmc_string_to_int (plen, TRUE, 1, 32, &prefix)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid prefix '%s'; <1-32> allowed"), plen);
+ goto finish;
+ }
+ }
+
+ if (inet_pton (AF_INET, gw_str ? gw_str : "0.0.0.0", &gw_addr) < 1) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid gateway '%s'"), gw_str);
+ goto finish;
+ }
+
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, ip4_addr);
+ nm_ip4_address_set_prefix (addr, (guint32) prefix);
+ nm_ip4_address_set_gateway (addr, gw_addr);
+
+finish:
+ g_free (tmp);
+ return addr;
+}
+
+/*
+ * Parse IPv6 address from string to NMIP6Address stucture.
+ * ip_str is the IPv6 address in the form address/prefix
+ * gw_str is the gateway address (it is optional)
+ */
+NMIP6Address *
+nmc_parse_and_build_ip6_address (const char *ip_str, const char *gw_str, GError **error)
+{
+ NMIP6Address *addr = NULL;
+ struct in6_addr ip_addr, gw_addr;
+ char *tmp;
+ char *plen;
+ long int prefix;
+
+ g_return_val_if_fail (ip_str != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ tmp = g_strdup (ip_str);
+ plen = strchr (tmp, '/'); /* prefix delimiter */
+ if (plen)
+ *plen++ = '\0';
+
+ if (inet_pton (AF_INET6, tmp, &ip_addr) < 1) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid IPv6 address '%s'"), tmp);
+ goto finish;
+ }
+
+ prefix = 128;
+ if (plen) {
+ if (!nmc_string_to_int (plen, TRUE, 1, 128, &prefix)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid prefix '%s'; <1-128> allowed"), plen);
+ goto finish;
+ }
+ }
+
+ if (inet_pton (AF_INET6, gw_str ? gw_str : "::", &gw_addr) < 1) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid gateway '%s'"), gw_str);
+ goto finish;
+ }
+
+ addr = nm_ip6_address_new ();
+ nm_ip6_address_set_address (addr, &ip_addr);
+ nm_ip6_address_set_prefix (addr, (guint32) prefix);
+ nm_ip6_address_set_gateway (addr, &gw_addr);
+
+finish:
+ g_free (tmp);
+ return addr;
+}
+
+typedef struct {
+ long int prefix;
+ long int metric;
+ union _IpDest {
+ guint32 ip4_dst;
+ struct in6_addr ip6_dst;
+ } dst;
+ union _IpNextHop {
+ guint32 ip4_nh;
+ struct in6_addr ip6_nh;
+ } nh;
+} ParsedRoute;
+
+/*
+ * _parse_and_build_route:
+ * @family: AF_INET or AF_INET6
+ * @first: the route destination in the form of "address/prefix"
+ (/prefix is optional)
+ * @second: (allow-none): next hop address, if third is not NULL. Otherwise it could be
+ either next hop address or metric. (It can be NULL when @third is NULL).
+ * @third: (allow-none): route metric
+ * @out: (out): route struct to fill
+ * @error: location to store GError
+ *
+ * Parse route from strings and fill @out parameter.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
+ */
+static gboolean
+_parse_and_build_route (int family,
+ const char *first,
+ const char *second,
+ const char *third,
+ ParsedRoute *out,
+ GError **error)
+{
+ int max_prefix;
+ char *tmp, *plen;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (family == AF_INET || family == AF_INET6, FALSE);
+ g_return_val_if_fail (first != NULL, FALSE);
+ g_return_val_if_fail (second || !third, FALSE);
+ g_return_val_if_fail (out, FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ max_prefix = (family == AF_INET) ? 32 : 128;
+ /* initialize default values */
+ out->prefix = max_prefix;
+ out->metric = 0;
+ if (family == AF_INET)
+ out->nh.ip4_nh = 0;
+ else
+ out->nh.ip6_nh = in6addr_any;
+
+ tmp = g_strdup (first);
+ plen = strchr (tmp, '/'); /* prefix delimiter */
+ if (plen)
+ *plen++ = '\0';
+
+ if (inet_pton (family, tmp, family == AF_INET ? (void *) &out->dst.ip4_dst : (void *) &out->dst.ip6_dst) < 1) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid route destination address '%s'"), tmp);
+ goto finish;
+ }
+
+ if (plen) {
+ if (!nmc_string_to_int (plen, TRUE, 1, max_prefix, &out->prefix)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid prefix '%s'; <1-%d> allowed"),
+ plen, max_prefix);
+ goto finish;
+ }
+ }
+
+ if (second) {
+ if (inet_pton (family, second, family == AF_INET ? (void *) &out->nh.ip4_nh : (void *) &out->nh.ip6_nh) < 1) {
+ if (third) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid next hop address '%s'"), second);
+ goto finish;
+ } else {
+ /* 'second' can be a metric */
+ if (!nmc_string_to_int (second, TRUE, 0, G_MAXUINT32, &out->metric)) {
+ g_set_error (error, 1, 0, _("the second component of route ('%s') is neither "
+ "a next hop address nor a metric"), second);
+ goto finish;
+ }
+ }
+ }
+ }
+
+ if (third) {
+ if (!nmc_string_to_int (third, TRUE, 0, G_MAXUINT32, &out->metric)) {
+ g_set_error (error, 1, 0, _("invalid metric '%s'"), third);
+ goto finish;
+ }
+ }
+
+ /* We don't accept default routes as NetworkManager handles it itself */
+ if ( (family == AF_INET && out->dst.ip4_dst == 0)
+ || (family == AF_INET6 && IN6_IS_ADDR_UNSPECIFIED (&out->dst.ip6_dst))) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("default route cannot be added (NetworkManager handles it by itself)"));
+ goto finish;
+ }
+
+ success = TRUE;
+
+finish:
+ g_free (tmp);
+ return success;
+}
+
+/*
+ * nmc_parse_and_build_ip4_route:
+ * @first: the IPv4 route destination in the form of "address/prefix"
+ (/prefix is optional)
+ * @second: (allow-none): next hop address, if third is not NULL. Otherwise it could be
+ either next hop address or metric. (It can be NULL when @third is NULL).
+ * @third: (allow-none): route metric
+ * @error: location to store GError
+ *
+ * Parse IPv4 route from strings to NMIP4Route stucture.
+ *
+ * Returns: route as a NMIP4Route object, or %NULL on failure
+ */
+NMIP4Route *
+nmc_parse_and_build_ip4_route (const char *first,
+ const char *second,
+ const char *third,
+ GError **error)
+{
+ ParsedRoute tmp_route;
+ NMIP4Route *route = NULL;
+
+ g_return_val_if_fail (first != NULL, NULL);
+ g_return_val_if_fail (second || !third, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ if (_parse_and_build_route (AF_INET, first, second, third, &tmp_route, error)) {
+ route = nm_ip4_route_new ();
+ nm_ip4_route_set_dest (route, tmp_route.dst.ip4_dst);
+ nm_ip4_route_set_prefix (route, (guint32) tmp_route.prefix);
+ nm_ip4_route_set_next_hop (route, tmp_route.nh.ip4_nh);
+ nm_ip4_route_set_metric (route, (guint32) tmp_route.metric);
+ }
+ return route;
+}
+
+/*
+ * nmc_parse_and_build_ip6_route:
+ * @first: the IPv6 route destination in the form of "address/prefix"
+ (/prefix is optional)
+ * @second: (allow-none): next hop address, if third is not NULL. Otherwise it could be
+ either next hop address or metric. (It can be NULL when @third is NULL).
+ * @third: (allow-none): route metric
+ * @error: location to store GError
+ *
+ * Parse IPv6 route from strings to NMIP6Route stucture.
+ *
+ * Returns: route as a NMIP6Route object, or %NULL on failure
+ */
+NMIP6Route *
+nmc_parse_and_build_ip6_route (const char *first,
+ const char *second,
+ const char *third,
+ GError **error)
+{
+ ParsedRoute tmp_route;
+ NMIP6Route *route = NULL;
+
+ g_return_val_if_fail (first != NULL, NULL);
+ g_return_val_if_fail (second || !third, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ if (_parse_and_build_route (AF_INET6, first, second, third, &tmp_route, error)) {
+ route = nm_ip6_route_new ();
+ nm_ip6_route_set_dest (route, &tmp_route.dst.ip6_dst);
+ nm_ip6_route_set_prefix (route, (guint32) tmp_route.prefix);
+ nm_ip6_route_set_next_hop (route, &tmp_route.nh.ip6_nh);
+ nm_ip6_route_set_metric (route, (guint32) tmp_route.metric);
+ }
+ return route;
+}
+
const char *
nmc_device_state_to_string (NMDeviceState state)
{
@@ -560,8 +875,294 @@ nmc_device_reason_to_string (NMDeviceStateReason reason)
case NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED:
return _("A secondary connection of the base connection failed");
+ case NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED:
+ return _("DCB or FCoE setup failed");
+
+ case NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED:
+ return _("teamd control failed");
+
+ case NM_DEVICE_STATE_REASON_MODEM_FAILED:
+ return _("Modem failed or no longer available");
+
+ case NM_DEVICE_STATE_REASON_MODEM_AVAILABLE:
+ return _("Modem now ready and available");
+
+ case NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT:
+ return _("SIM PIN was incorrect");
+
default:
+ /* TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason) */
return _("Unknown");
}
}
+
+/* Max priority values from libnm-util/nm-setting-vlan.c */
+#define MAX_SKB_PRIO G_MAXUINT32
+#define MAX_8021P_PRIO 7 /* Max 802.1p priority */
+
+/*
+ * Parse VLAN priority mappings from the following format: 2:1,3:4,7:3
+ * and verify if the priority numbers are valid
+ *
+ * Return: string array with split maps, or NULL on error
+ * Caller is responsible for freeing the array.
+ */
+char **
+nmc_vlan_parse_priority_maps (const char *priority_map,
+ NMVlanPriorityMap map_type,
+ GError **error)
+{
+ char **mapping = NULL, **iter;
+ unsigned long from, to, from_max, to_max;
+
+ g_return_val_if_fail (priority_map != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ if (map_type == NM_VLAN_INGRESS_MAP) {
+ from_max = MAX_8021P_PRIO;
+ to_max = MAX_SKB_PRIO;
+ } else {
+ from_max = MAX_SKB_PRIO;
+ to_max = MAX_8021P_PRIO;
+ }
+
+ mapping = g_strsplit (priority_map, ",", 0);
+ for (iter = mapping; iter && *iter; iter++) {
+ char *left, *right;
+
+ left = g_strstrip (*iter);
+ right = strchr (left, ':');
+ if (!right) {
+ g_set_error (error, 1, 0, _("invalid priority map '%s'"), *iter);
+ g_strfreev (mapping);
+ return NULL;
+ }
+ *right++ = '\0';
+
+ if (!nmc_string_to_uint (left, TRUE, 0, from_max, &from)) {
+ g_set_error (error, 1, 0, _("priority '%s' is not valid (<0-%ld>)"),
+ left, from_max);
+ g_strfreev (mapping);
+ return NULL;
+ }
+ if (!nmc_string_to_uint (right, TRUE, 0, to_max, &to)) {
+ g_set_error (error, 1, 0, _("priority '%s' is not valid (<0-%ld>)"),
+ right, to_max);
+ g_strfreev (mapping);
+ return NULL;
+ }
+ *(right-1) = ':'; /* Put back ':' */
+ }
+ return mapping;
+}
+
+const char *
+nmc_bond_validate_mode (const char *mode, GError **error)
+{
+ unsigned long mode_int;
+ static const char *valid_modes[] = { "balance-rr",
+ "active-backup",
+ "balance-xor",
+ "broadcast",
+ "802.3ad",
+ "balance-tlb",
+ "balance-alb",
+ NULL };
+ if (nmc_string_to_uint (mode, TRUE, 0, 6, &mode_int)) {
+ /* Translate bonding mode numbers to mode names:
+ * https://www.kernel.org/doc/Documentation/networking/bonding.txt
+ */
+ return valid_modes[mode_int];
+ } else
+ return nmc_string_is_valid (mode, valid_modes, error);
+}
+
+/*
+ * nmc_team_check_config:
+ * @config: file name with team config, or raw team JSON config data
+ * @out_config: raw team JSON config data (with removed new-line characters)
+ * @error: location to store error, or %NUL
+ *
+ * Check team config from @config parameter and return the checked/sanitized
+ * config in @out_config.
+ *
+ * Returns: %TRUE if the config is valid, %FALSE if it is invalid
+ */
+gboolean
+nmc_team_check_config (const char *config, char **out_config, GError **error)
+{
+ char *contents = NULL;
+ size_t c_len = 0;
+
+ *out_config = NULL;
+
+ if (!config || strlen (config) == strspn (config, " \t"))
+ return TRUE;
+
+ /* 'config' can be either a file name or raw JSON config data */
+ if (g_file_test (config, G_FILE_TEST_EXISTS))
+ (void) g_file_get_contents (config, &contents, NULL, NULL);
+ else
+ contents = g_strdup (config);
+
+ if (contents) {
+ g_strstrip (contents);
+ c_len = strlen (contents);
+ }
+
+ /* Do a simple validity check */
+ if (!contents || !contents[0] || c_len > 100000 || contents[0] != '{' || contents[c_len-1] != '}') {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("'%s' is not a valid team configuration or file name."), config);
+ g_free (contents);
+ return FALSE;
+ }
+ *out_config = g_strdelimit (contents, "\r\n", ' ');
+ return TRUE;
+}
+
+/*
+ * nmc_find_connection:
+ * @list: list of NMConnections to search in
+ * @filter_type: "id", "uuid", "path" or %NULL
+ * @filter_val: connection to find (connection name, UUID or path)
+ * @start: where to start in @list. The location is updated so that the function
+ * can be called multiple times (for connections with the same name).
+ *
+ * Find a connection in @list according to @filter_val. @filter_type determines
+ * what property is used for comparison. When @filter_type is NULL, compare
+ * @filter_val against all types. Otherwise, only compare against the specified
+ * type. If 'path' filter type is specified, comparison against numeric index
+ * (in addition to the whole path) is allowed.
+ *
+ * Returns: found connection, or %NULL
+ */
+NMConnection *
+nmc_find_connection (GSList *list,
+ const char *filter_type,
+ const char *filter_val,
+ GSList **start)
+{
+ NMConnection *connection;
+ NMConnection *found = NULL;
+ GSList *iterator;
+ const char *id;
+ const char *uuid;
+ const char *path, *path_num;
+
+ iterator = (start && *start) ? *start : list;
+ while (iterator) {
+ connection = NM_CONNECTION (iterator->data);
+
+ id = nm_connection_get_id (connection);
+ uuid = nm_connection_get_uuid (connection);
+ path = nm_connection_get_path (connection);
+ path_num = path ? strrchr (path, '/') + 1 : NULL;
+
+ /* When filter_type is NULL, compare connection ID (filter_val)
+ * against all types. Otherwise, only compare against the specific
+ * type. If 'path' filter type is specified, comparison against
+ * numeric index (in addition to the whole path) is allowed.
+ */
+ if ( ( (!filter_type || strcmp (filter_type, "id") == 0)
+ && strcmp (filter_val, id) == 0)
+ || ( (!filter_type || strcmp (filter_type, "uuid") == 0)
+ && strcmp (filter_val, uuid) == 0)
+ || ( (!filter_type || strcmp (filter_type, "path") == 0)
+ && (g_strcmp0 (filter_val, path) == 0 || (filter_type && g_strcmp0 (filter_val, path_num) == 0)))) {
+ if (!start)
+ return connection;
+ if (found) {
+ *start = iterator;
+ return found;
+ }
+ found = connection;
+ }
+
+ iterator = g_slist_next (iterator);
+ }
+
+ if (start)
+ *start = NULL;
+ return found;
+}
+
+/**
+ * nmc_cleanup_readline:
+ *
+ * Cleanup readline when nmcli is terminated with a signal.
+ * It makes sure the terminal is not garbled.
+ */
+void
+nmc_cleanup_readline (void)
+{
+ rl_free_line_state ();
+ rl_cleanup_after_signal ();
+}
+
+/**
+ * nmc_readline:
+ * @prompt_fmt: prompt to print (telling user what to enter). It is standard
+ * printf() format string
+ * @...: a list of arguments according to the @prompt_fmt format string
+ *
+ * Wrapper around libreadline's readline() function.
+ *
+ * Returns: the user provided string. In case the user entered empty string,
+ * this function returns NULL.
+ */
+char *
+nmc_readline (const char *prompt_fmt, ...)
+{
+ va_list args;
+ char *prompt, *str;
+
+ va_start (args, prompt_fmt);
+ prompt = g_strdup_vprintf (prompt_fmt, args);
+ va_end (args);
+
+ str = readline (prompt);
+ /* Return NULL, not empty string */
+ if (str && *str == '\0') {
+ g_free (str);
+ str = NULL;
+ }
+
+ if (str && *str)
+ add_history (str);
+
+ g_free (prompt);
+ return str;
+}
+
+/**
+ * nmc_rl_gen_func_basic:
+ * @text: text to complete
+ * @state: readline state; says whether start from scratch (state == 0)
+ * @words: strings for completion
+ *
+ * Basic function generating list of completion strings for readline.
+ * See e.g. http://cnswww.cns.cwru.edu/php/chet/readline/readline.html#SEC49
+ */
+char *
+nmc_rl_gen_func_basic (const char *text, int state, const char **words)
+{
+ static int list_idx, len;
+ const char *name;
+
+ if (!state) {
+ list_idx = 0;
+ len = strlen (text);
+ }
+
+ /* Return the next name which partially matches one from the 'words' list. */
+ while ((name = words[list_idx])) {
+ list_idx++;
+
+ if (strncmp (name, text, len) == 0)
+ return g_strdup (name);
+ }
+ return NULL;
+}
+
diff --git a/cli/src/common.h b/cli/src/common.h
index 89412d283..228375b97 100644
--- a/cli/src/common.h
+++ b/cli/src/common.h
@@ -16,7 +16,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2012 Red Hat, Inc.
+ * (C) Copyright 2012 - 2014 Red Hat, Inc.
*/
#ifndef NMC_COMMON_H
@@ -32,12 +32,35 @@
#include "nmcli.h"
-gboolean print_ip4_config (NMIP4Config *cfg4, NmCli *nmc, const char *group_prefix);
-gboolean print_ip6_config (NMIP6Config *cfg6, NmCli *nmc, const char *group_prefix);
-gboolean print_dhcp4_config (NMDHCP4Config *dhcp4, NmCli *nmc, const char *group_prefix);
-gboolean print_dhcp6_config (NMDHCP6Config *dhcp6, NmCli *nmc, const char *group_prefix);
+gboolean print_ip4_config (NMIP4Config *cfg4, NmCli *nmc, const char *group_prefix, const char *one_field);
+gboolean print_ip6_config (NMIP6Config *cfg6, NmCli *nmc, const char *group_prefix, const char *one_field);
+gboolean print_dhcp4_config (NMDHCP4Config *dhcp4, NmCli *nmc, const char *group_prefix, const char *one_field);
+gboolean print_dhcp6_config (NMDHCP6Config *dhcp6, NmCli *nmc, const char *group_prefix, const char *one_field);
+
+NMIP4Address *nmc_parse_and_build_ip4_address (const char *ip_str, const char *gw_str, GError **error);
+NMIP6Address *nmc_parse_and_build_ip6_address (const char *ip_str, const char *gw_str, GError **error);
+
+NMIP4Route *nmc_parse_and_build_ip4_route (const char *first, const char *second, const char *third, GError **error);
+NMIP6Route *nmc_parse_and_build_ip6_route (const char *first, const char *second, const char *third, GError **error);
const char * nmc_device_state_to_string (NMDeviceState state);
const char * nmc_device_reason_to_string (NMDeviceStateReason reason);
+char **
+nmc_vlan_parse_priority_maps (const char *priority_map,
+ NMVlanPriorityMap map_type,
+ GError **error);
+
+const char *nmc_bond_validate_mode (const char *mode, GError **error);
+gboolean nmc_team_check_config (const char *config, char **out_config, GError **error);
+
+NMConnection *nmc_find_connection (GSList *list,
+ const char *filter_type,
+ const char *filter_val,
+ GSList **start);
+
+void nmc_cleanup_readline (void);
+char *nmc_readline (const char *prompt_fmt, ...) G_GNUC_PRINTF (1, 2);
+char *nmc_rl_gen_func_basic (const char *text, int state, const char **words);
+
#endif /* NMC_COMMON_H */
diff --git a/cli/src/connections.c b/cli/src/connections.c
index b39b447ea..d17f7f126 100644
--- a/cli/src/connections.c
+++ b/cli/src/connections.c
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
@@ -30,6 +30,8 @@
#include <errno.h>
#include <signal.h>
#include <netinet/ether.h>
+#include <readline/readline.h>
+#include <readline/history.h>
#include <nm-client.h>
#include <nm-device-ethernet.h>
@@ -43,6 +45,7 @@
#include <nm-device-olpc-mesh.h>
#include <nm-device-infiniband.h>
#include <nm-device-bond.h>
+#include <nm-device-team.h>
#include <nm-device-bridge.h>
#include <nm-device-vlan.h>
#include <nm-remote-settings.h>
@@ -54,50 +57,104 @@
#include "settings.h"
#include "connections.h"
-
-/* Available fields for 'con list' */
-static NmcOutputField nmc_fields_con_list[] = {
- {"NAME", N_("NAME"), 25, NULL, 0}, /* 0 */
- {"UUID", N_("UUID"), 38, NULL, 0}, /* 1 */
- {"TYPE", N_("TYPE"), 17, NULL, 0}, /* 2 */
- {"TIMESTAMP", N_("TIMESTAMP"), 12, NULL, 0}, /* 3 */
- {"TIMESTAMP-REAL", N_("TIMESTAMP-REAL"), 34, NULL, 0}, /* 4 */
- {"AUTOCONNECT", N_("AUTOCONNECT"), 13, NULL, 0}, /* 5 */
- {"READONLY", N_("READONLY"), 10, NULL, 0}, /* 6 */
- {"DBUS-PATH", N_("DBUS-PATH"), 42, NULL, 0}, /* 7 */
- {NULL, NULL, 0, NULL, 0}
+/* Activation timeout waiting for bond/team/bridge slaves (in seconds) */
+#define SLAVES_UP_TIMEOUT 10
+
+/* define some prompts for connection editor */
+#define EDITOR_PROMPT_SETTING _("Setting name? ")
+#define EDITOR_PROMPT_PROPERTY _("Property name? ")
+#define EDITOR_PROMPT_CON_TYPE _("Enter connection type: ")
+
+/* define some other prompts */
+#define PROMPT_CON_TYPE _("Connection type: ")
+#define PROMPT_VPN_TYPE _("VPN type: ")
+#define PROMPT_BOND_MASTER _("Bond master: ")
+#define PROMPT_TEAM_MASTER _("Team master: ")
+#define PROMPT_BRIDGE_MASTER _("Bridge master: ")
+#define PROMPT_CONNECTION _("Connection (name, UUID, or path): ")
+
+static const char *nmc_known_vpns[] =
+ { "openvpn", "vpnc", "pptp", "openconnect", "openswan", "libreswan",
+ "ssh", "l2tp", "iodine", NULL };
+
+/* Available fields for 'connection show' */
+static NmcOutputField nmc_fields_con_show[] = {
+ {"NAME", N_("NAME"), 25}, /* 0 */
+ {"UUID", N_("UUID"), 38}, /* 1 */
+ {"TYPE", N_("TYPE"), 17}, /* 2 */
+ {"TIMESTAMP", N_("TIMESTAMP"), 12}, /* 3 */
+ {"TIMESTAMP-REAL", N_("TIMESTAMP-REAL"), 34}, /* 4 */
+ {"AUTOCONNECT", N_("AUTOCONNECT"), 13}, /* 5 */
+ {"READONLY", N_("READONLY"), 10}, /* 6 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 42}, /* 7 */
+ {"ACTIVE", N_("ACTIVE"), 10}, /* 8 */
+ {"DEVICE", N_("DEVICE"), 10}, /* 9 */
+ {"STATE", N_("STATE"), 12}, /* 10 */
+ {"ACTIVE-PATH", N_("ACTIVE-PATH"), 51}, /* 11 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_CON_LIST_ALL "NAME,UUID,TYPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,READONLY,DBUS-PATH"
-#define NMC_FIELDS_CON_LIST_COMMON "NAME,UUID,TYPE,TIMESTAMP-REAL"
+#define NMC_FIELDS_CON_SHOW_ALL "NAME,UUID,TYPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,READONLY,DBUS-PATH,"\
+ "ACTIVE,DEVICE,STATE,ACTIVE-PATH"
+#define NMC_FIELDS_CON_SHOW_COMMON "NAME,UUID,TYPE,DEVICE"
/* Helper macro to define fields */
-#define SETTING_FIELD(setting, width) { setting, N_(setting), width, NULL, 0 }
-
-/* Available settings for 'con list id/uuid <con>' */
+#define SETTING_FIELD(setting, props) { setting, N_(setting), 0, props, NULL, FALSE, FALSE, 0 }
+
+/* defined in settings.c */
+extern NmcOutputField nmc_fields_setting_connection[];
+extern NmcOutputField nmc_fields_setting_wired[];
+extern NmcOutputField nmc_fields_setting_8021X[];
+extern NmcOutputField nmc_fields_setting_wireless[];
+extern NmcOutputField nmc_fields_setting_wireless_security[];
+extern NmcOutputField nmc_fields_setting_ip4_config[];
+extern NmcOutputField nmc_fields_setting_ip6_config[];
+extern NmcOutputField nmc_fields_setting_serial[];
+extern NmcOutputField nmc_fields_setting_ppp[];
+extern NmcOutputField nmc_fields_setting_pppoe[];
+extern NmcOutputField nmc_fields_setting_adsl[];
+extern NmcOutputField nmc_fields_setting_gsm[];
+extern NmcOutputField nmc_fields_setting_cdma[];
+extern NmcOutputField nmc_fields_setting_bluetooth[];
+extern NmcOutputField nmc_fields_setting_olpc_mesh[];
+extern NmcOutputField nmc_fields_setting_vpn[];
+extern NmcOutputField nmc_fields_setting_wimax[];
+extern NmcOutputField nmc_fields_setting_infiniband[];
+extern NmcOutputField nmc_fields_setting_bond[];
+extern NmcOutputField nmc_fields_setting_vlan[];
+extern NmcOutputField nmc_fields_setting_bridge[];
+extern NmcOutputField nmc_fields_setting_bridge_port[];
+extern NmcOutputField nmc_fields_setting_team[];
+extern NmcOutputField nmc_fields_setting_team_port[];
+extern NmcOutputField nmc_fields_setting_dcb[];
+
+/* Available settings for 'connection show <con>' - profile part */
static NmcOutputField nmc_fields_settings_names[] = {
- SETTING_FIELD (NM_SETTING_CONNECTION_SETTING_NAME, 0), /* 0 */
- SETTING_FIELD (NM_SETTING_WIRED_SETTING_NAME, 0), /* 1 */
- SETTING_FIELD (NM_SETTING_802_1X_SETTING_NAME, 0), /* 2 */
- SETTING_FIELD (NM_SETTING_WIRELESS_SETTING_NAME, 0), /* 3 */
- SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, 0), /* 4 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_SETTING_NAME, 0), /* 5 */
- SETTING_FIELD (NM_SETTING_IP6_CONFIG_SETTING_NAME, 0), /* 6 */
- SETTING_FIELD (NM_SETTING_SERIAL_SETTING_NAME, 0), /* 7 */
- SETTING_FIELD (NM_SETTING_PPP_SETTING_NAME, 0), /* 8 */
- SETTING_FIELD (NM_SETTING_PPPOE_SETTING_NAME, 0), /* 9 */
- SETTING_FIELD (NM_SETTING_GSM_SETTING_NAME, 0), /* 10 */
- SETTING_FIELD (NM_SETTING_CDMA_SETTING_NAME, 0), /* 11 */
- SETTING_FIELD (NM_SETTING_BLUETOOTH_SETTING_NAME, 0), /* 12 */
- SETTING_FIELD (NM_SETTING_OLPC_MESH_SETTING_NAME, 0), /* 13 */
- SETTING_FIELD (NM_SETTING_VPN_SETTING_NAME, 0), /* 14 */
- SETTING_FIELD (NM_SETTING_WIMAX_SETTING_NAME, 0), /* 15 */
- SETTING_FIELD (NM_SETTING_INFINIBAND_SETTING_NAME, 0), /* 16 */
- SETTING_FIELD (NM_SETTING_BOND_SETTING_NAME, 0), /* 17 */
- SETTING_FIELD (NM_SETTING_VLAN_SETTING_NAME, 0), /* 18 */
- SETTING_FIELD (NM_SETTING_ADSL_SETTING_NAME, 0), /* 19 */
- SETTING_FIELD (NM_SETTING_BRIDGE_SETTING_NAME, 0), /* 20 */
- SETTING_FIELD (NM_SETTING_BRIDGE_PORT_SETTING_NAME, 0), /* 21 */
- {NULL, NULL, 0, NULL, 0}
+ SETTING_FIELD (NM_SETTING_CONNECTION_SETTING_NAME, nmc_fields_setting_connection + 1), /* 0 */
+ SETTING_FIELD (NM_SETTING_WIRED_SETTING_NAME, nmc_fields_setting_wired + 1), /* 1 */
+ SETTING_FIELD (NM_SETTING_802_1X_SETTING_NAME, nmc_fields_setting_8021X + 1), /* 2 */
+ SETTING_FIELD (NM_SETTING_WIRELESS_SETTING_NAME, nmc_fields_setting_wireless + 1), /* 3 */
+ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, nmc_fields_setting_wireless_security + 1), /* 4 */
+ SETTING_FIELD (NM_SETTING_IP4_CONFIG_SETTING_NAME, nmc_fields_setting_ip4_config + 1), /* 5 */
+ SETTING_FIELD (NM_SETTING_IP6_CONFIG_SETTING_NAME, nmc_fields_setting_ip6_config + 1), /* 6 */
+ SETTING_FIELD (NM_SETTING_SERIAL_SETTING_NAME, nmc_fields_setting_serial + 1), /* 7 */
+ SETTING_FIELD (NM_SETTING_PPP_SETTING_NAME, nmc_fields_setting_ppp + 1), /* 8 */
+ SETTING_FIELD (NM_SETTING_PPPOE_SETTING_NAME, nmc_fields_setting_pppoe + 1), /* 9 */
+ SETTING_FIELD (NM_SETTING_GSM_SETTING_NAME, nmc_fields_setting_gsm + 1), /* 10 */
+ SETTING_FIELD (NM_SETTING_CDMA_SETTING_NAME, nmc_fields_setting_cdma + 1), /* 11 */
+ SETTING_FIELD (NM_SETTING_BLUETOOTH_SETTING_NAME, nmc_fields_setting_bluetooth + 1), /* 12 */
+ SETTING_FIELD (NM_SETTING_OLPC_MESH_SETTING_NAME, nmc_fields_setting_olpc_mesh + 1), /* 13 */
+ SETTING_FIELD (NM_SETTING_VPN_SETTING_NAME, nmc_fields_setting_vpn + 1), /* 14 */
+ SETTING_FIELD (NM_SETTING_WIMAX_SETTING_NAME, nmc_fields_setting_wimax + 1), /* 15 */
+ SETTING_FIELD (NM_SETTING_INFINIBAND_SETTING_NAME, nmc_fields_setting_infiniband + 1), /* 16 */
+ SETTING_FIELD (NM_SETTING_BOND_SETTING_NAME, nmc_fields_setting_bond + 1), /* 17 */
+ SETTING_FIELD (NM_SETTING_VLAN_SETTING_NAME, nmc_fields_setting_vlan + 1), /* 18 */
+ SETTING_FIELD (NM_SETTING_ADSL_SETTING_NAME, nmc_fields_setting_adsl + 1), /* 19 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_SETTING_NAME, nmc_fields_setting_bridge + 1), /* 20 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_PORT_SETTING_NAME, nmc_fields_setting_bridge_port + 1), /* 21 */
+ SETTING_FIELD (NM_SETTING_TEAM_SETTING_NAME, nmc_fields_setting_team + 1), /* 22 */
+ SETTING_FIELD (NM_SETTING_TEAM_PORT_SETTING_NAME, nmc_fields_setting_team_port + 1), /* 23 */
+ SETTING_FIELD (NM_SETTING_DCB_SETTING_NAME, nmc_fields_setting_dcb + 1), /* 24 */
+ {NULL, NULL, 0, NULL, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTINGS_NAMES_ALL_X NM_SETTING_CONNECTION_SETTING_NAME","\
NM_SETTING_WIRED_SETTING_NAME","\
@@ -119,7 +176,10 @@ static NmcOutputField nmc_fields_settings_names[] = {
NM_SETTING_BOND_SETTING_NAME","\
NM_SETTING_VLAN_SETTING_NAME","\
NM_SETTING_BRIDGE_SETTING_NAME","\
- NM_SETTING_BRIDGE_PORT_SETTING_NAME
+ NM_SETTING_BRIDGE_PORT_SETTING_NAME","\
+ NM_SETTING_TEAM_SETTING_NAME","\
+ NM_SETTING_TEAM_PORT_SETTING_NAME"," \
+ NM_SETTING_DCB_SETTING_NAME
#if WITH_WIMAX
#define NMC_FIELDS_SETTINGS_NAMES_ALL NMC_FIELDS_SETTINGS_NAMES_ALL_X","\
NM_SETTING_WIMAX_SETTING_NAME
@@ -127,54 +187,65 @@ static NmcOutputField nmc_fields_settings_names[] = {
#define NMC_FIELDS_SETTINGS_NAMES_ALL NMC_FIELDS_SETTINGS_NAMES_ALL_X
#endif
-
-/* Available fields for 'con status' */
-static NmcOutputField nmc_fields_con_status[] = {
- {"GROUP", N_("GROUP"), 9, NULL, 0}, /* 0 */ /* used only for 'GENERAL' group listing */
- {"NAME", N_("NAME"), 25, NULL, 0}, /* 1 */
- {"UUID", N_("UUID"), 38, NULL, 0}, /* 2 */
- {"DEVICES", N_("DEVICES"), 10, NULL, 0}, /* 3 */
- {"STATE", N_("STATE"), 12, NULL, 0}, /* 4 */
- {"DEFAULT", N_("DEFAULT"), 8, NULL, 0}, /* 5 */
- {"DEFAULT6", N_("DEFAULT6"), 9, NULL, 0}, /* 6 */
- {"SPEC-OBJECT", N_("SPEC-OBJECT"), 10, NULL, 0}, /* 7 */
- {"VPN", N_("VPN"), 5, NULL, 0}, /* 8 */
- {"DBUS-PATH", N_("DBUS-PATH"), 51, NULL, 0}, /* 9 */
- {"CON-PATH", N_("CON-PATH"), 44, NULL, 0}, /* 10 */
- {"ZONE", N_("ZONE"), 15, NULL, 0}, /* 11 */
- {"MASTER-PATH", N_("MASTER-PATH"), 44, NULL, 0}, /* 12 */
- {NULL, NULL, 0, NULL, 0}
+/* Active connection data */
+/* Available fields for GENERAL group */
+static NmcOutputField nmc_fields_con_active_details_general[] = {
+ {"GROUP", N_("GROUP"), 9}, /* 0 */
+ {"NAME", N_("NAME"), 25}, /* 1 */
+ {"UUID", N_("UUID"), 38}, /* 2 */
+ {"DEVICES", N_("DEVICES"), 10}, /* 3 */
+ {"STATE", N_("STATE"), 12}, /* 4 */
+ {"DEFAULT", N_("DEFAULT"), 8}, /* 5 */
+ {"DEFAULT6", N_("DEFAULT6"), 9}, /* 6 */
+ {"SPEC-OBJECT", N_("SPEC-OBJECT"), 10}, /* 7 */
+ {"VPN", N_("VPN"), 5}, /* 8 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 51}, /* 9 */
+ {"CON-PATH", N_("CON-PATH"), 44}, /* 10 */
+ {"ZONE", N_("ZONE"), 15}, /* 11 */
+ {"MASTER-PATH", N_("MASTER-PATH"), 44}, /* 12 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_CON_STATUS_ALL "NAME,UUID,DEVICES,STATE,DEFAULT,DEFAULT6,VPN,ZONE,DBUS-PATH,CON-PATH,SPEC-OBJECT,MASTER-PATH"
-#define NMC_FIELDS_CON_STATUS_COMMON "NAME,UUID,DEVICES,DEFAULT,VPN,MASTER-PATH"
-
-/* Available fields for 'con status id/uuid/path <con>' */
-static NmcOutputField nmc_fields_status_details_groups[] = {
- {"GENERAL", N_("GENERAL"), 9, NULL, 0}, /* 0 */
- {"IP", N_("IP"), 5, NULL, 0}, /* 1 */
- {"VPN", N_("VPN"), 5, NULL, 0}, /* 2 */
- {NULL, NULL, 0, NULL, 0}
-};
-#define NMC_FIELDS_CON_STATUS_DETAILS_ALL "GENERAL,IP,VPN"
-
-/* GENERAL group is the same as nmc_fields_con_status */
-#define NMC_FIELDS_CON_STATUS_DETAILS_GENERAL_ALL "GROUP,"NMC_FIELDS_CON_STATUS_ALL
+#define NMC_FIELDS_CON_ACTIVE_DETAILS_GENERAL_ALL "GROUP,NAME,UUID,DEVICES,STATE,DEFAULT,DEFAULT6,"\
+ "VPN,ZONE,DBUS-PATH,CON-PATH,SPEC-OBJECT,MASTER-PATH"
/* IP group is handled by common.c */
/* Available fields for VPN group */
-static NmcOutputField nmc_fields_status_details_vpn[] = {
- {"GROUP", N_("GROUP"), 9, NULL, 0}, /* 0 */
- {"TYPE", N_("TYPE"), 15, NULL, 0}, /* 1 */
- {"USERNAME", N_("USERNAME"), 15, NULL, 0}, /* 2 */
- {"GATEWAY", N_("GATEWAY"), 25, NULL, 0}, /* 3 */
- {"BANNER", N_("BANNER"), 120, NULL, 0}, /* 4 */
- {"VPN-STATE", N_("VPN-STATE"), 40, NULL, 0}, /* 5 */
- {"CFG", N_("CFG"), 120, NULL, 0}, /* 6 */
- {NULL, NULL, 0, NULL, 0}
+static NmcOutputField nmc_fields_con_active_details_vpn[] = {
+ {"GROUP", N_("GROUP"), 9}, /* 0 */
+ {"TYPE", N_("TYPE"), 15}, /* 1 */
+ {"USERNAME", N_("USERNAME"), 15}, /* 2 */
+ {"GATEWAY", N_("GATEWAY"), 25}, /* 3 */
+ {"BANNER", N_("BANNER"), 120}, /* 4 */
+ {"VPN-STATE", N_("VPN-STATE"), 40}, /* 5 */
+ {"CFG", N_("CFG"), 120}, /* 6 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_CON_STATUS_DETAILS_VPN_ALL "GROUP,TYPE,USERNAME,GATEWAY,BANNER,VPN-STATE,CFG"
+#define NMC_FIELDS_CON_ACTIVE_DETAILS_VPN_ALL "GROUP,TYPE,USERNAME,GATEWAY,BANNER,VPN-STATE,CFG"
+
+/* defined in common.c */
+extern NmcOutputField nmc_fields_ip4_config[];
+extern NmcOutputField nmc_fields_ip6_config[];
+extern NmcOutputField nmc_fields_dhcp4_config[];
+extern NmcOutputField nmc_fields_dhcp6_config[];
+
+/* Available fields for 'connection show <con>' - active part */
+static NmcOutputField nmc_fields_con_active_details_groups[] = {
+ {"GENERAL", N_("GENERAL"), 0, nmc_fields_con_active_details_general + 1}, /* 0 */
+ {"IP4", N_("IP4"), 0, nmc_fields_ip4_config + 1 }, /* 1 */
+ {"DHCP4", N_("DHCP4"), 0, nmc_fields_dhcp4_config + 1 }, /* 2 */
+ {"IP6", N_("IP6"), 0, nmc_fields_ip6_config + 1 }, /* 3 */
+ {"DHCP6", N_("DHCP6"), 0, nmc_fields_dhcp6_config + 1 }, /* 4 */
+ {"VPN", N_("VPN"), 0, nmc_fields_con_active_details_vpn + 1 }, /* 5 */
+ {NULL, NULL, 0, NULL}
+};
+#define NMC_FIELDS_CON_ACTIVE_DETAILS_ALL "GENERAL,IP4,DHCP4,IP6,DHCP6,VPN"
+/* Pseudo group names for 'connection show <con>' */
+/* e.g.: nmcli -f profile con show my-eth0 */
+/* e.g.: nmcli -f active con show my-eth0 */
+#define CON_SHOW_DETAIL_GROUP_PROFILE "profile"
+#define CON_SHOW_DETAIL_GROUP_ACTIVE "active"
typedef struct {
NmCli *nmc;
@@ -188,270 +259,293 @@ extern GMainLoop *loop;
static ArgsInfo args_info;
static guint progress_id = 0; /* ID of event source for displaying progress */
+/* for readline TAB completion in editor */
+typedef struct {
+ NmCli *nmc;
+ char *con_type;
+ NMConnection *connection;
+ NMSetting *setting;
+} TabCompletionInfo;
+static TabCompletionInfo nmc_tab_completion = {NULL, NULL, NULL, NULL};
+
+/* Global variable defined in nmcli.c - used for TAB completion */
+extern NmCli nm_cli;
+
+static char *gen_connection_types (const char *text, int state);
+
static void
usage (void)
{
fprintf (stderr,
- _("Usage: nmcli connection { COMMAND | help }\n"
- " COMMAND := { list | status | up | down | delete }\n\n"
- " list [id <id> | uuid <id>]\n"
- " status [id <id> | uuid <id> | path <path>]\n"
+ _("Usage: nmcli connection { COMMAND | help }\n\n"
+ "COMMAND := { show | up | down | add | modify | edit | delete | reload | load }\n\n"
+ " show [--active] [[id | uuid | path | apath] <ID>] ...\n\n"
#if WITH_WIMAX
- " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--nowait] [--timeout <timeout>]\n"
+ " up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n\n"
#else
- " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout <timeout>]\n"
+ " up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n\n"
#endif
- " down id <id> | uuid <id>\n"
- " delete id <id> | uuid <id>\n"
- "\n"
- ));
+ " down [id | uuid | path | apath] <ID>\n\n"
+ " add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n\n"
+ " modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n\n"
+ " edit [id | uuid | path] <ID>\n"
+ " edit [type <new_con_type>] [con-name <new_con_name>]\n\n"
+ " delete [id | uuid | path] <ID>\n\n"
+ " reload\n\n"
+ " load <filename> [ <filename>... ]\n\n"));
}
-/* The real commands that do something - i.e. not 'help', etc. */
-static const char *real_con_commands[] = {
- "list",
- "status",
- "up",
- "down",
- "delete",
- NULL
-};
-
-/* quit main loop */
static void
-quit (void)
+usage_connection_show (void)
{
- if (progress_id) {
- g_source_remove (progress_id);
- nmc_terminal_erase_line ();
- }
-
- g_main_loop_quit (loop); /* quit main loop */
+ fprintf (stderr,
+ _("Usage: nmcli connection show { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [--active]\n"
+ "\n"
+ "List in-memory and on-disk connection profiles, some of which may also be\n"
+ "active if a device is using that connection profile. Without a parameter, all\n"
+ "profiles are listed. When --active option is specified, only the active\n"
+ "profiles are shown.\n"
+ "\n"
+ "ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+ "\n"
+ "Show details for specified connections. By default, both static configuration\n"
+ "and active connection data are displayed. It is possible to filter the output\n"
+ "using global '--fields' option. Refer to the manual page for more information.\n"
+ "When --active option is specified, only the active profiles are taken into\n"
+ "account.\n"));
}
-static gboolean
-nmc_connection_detail (NMConnection *connection, NmCli *nmc)
+static void
+usage_connection_up (void)
{
- GError *error = NULL;
- GArray *print_settings_array;
- int i;
- char *fields_str;
- char *fields_all = NMC_FIELDS_SETTINGS_NAMES_ALL;
- char *fields_common = NMC_FIELDS_SETTINGS_NAMES_ALL;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
- gboolean was_output = FALSE;
-
- if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
- fields_str = fields_common;
- else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
- fields_str = fields_all;
- else
- fields_str = nmc->required_fields;
-
- print_settings_array = parse_output_fields (fields_str, nmc_fields_settings_names, &error);
- if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'con list': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'con list': %s; allowed fields: %s"), error->message, NMC_FIELDS_SETTINGS_NAMES_ALL);
- g_error_free (error);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- return FALSE;
- }
-
- nmc->allowed_fields = nmc_fields_settings_names;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ONLY;
- nmc->print_fields.header_name = _("Connection details");
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTINGS_NAMES_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields);
-
- /* Loop through the required settings and print them. */
- for (i = 0; i < print_settings_array->len; i++) {
- NMSetting *setting;
- int section_idx = g_array_index (print_settings_array, int, i);
-
- if (nmc->print_output != NMC_PRINT_TERSE && !nmc->multiline_output && was_output)
- printf ("\n"); /* Empty line */
-
- was_output = FALSE;
-
- setting = nm_connection_get_setting_by_name (connection, nmc_fields_settings_names[section_idx].name);
- if (setting) {
- setting_details (setting, nmc);
- was_output = TRUE;
- continue;
- }
- }
-
- if (print_settings_array)
- g_array_free (print_settings_array, FALSE);
-
- return NMC_RESULT_SUCCESS;
+ fprintf (stderr,
+ _("Usage: nmcli connection up { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+ "\n"
+ "Activate a connection on a device. The profile to activate is identified by its\n"
+ "name, UUID or D-Bus path.\n"
+ "\n"
+ "ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+ "\n"
+ "Activate a device with a connection. The connection profile is selected\n"
+ "automatically by NetworkManager.\n"
+ "\n"
+ "ifname - specifies the device to active the connection on\n"
+ "ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+ "nsp - specifies NSP to connect to (only valid for WiMAX)\n\n"));
}
static void
-show_connection (NMConnection *data, gpointer user_data)
+usage_connection_down (void)
{
- NMConnection *connection = (NMConnection *) data;
- NmCli *nmc = (NmCli *) user_data;
- NMSettingConnection *s_con;
- guint64 timestamp;
- time_t timestamp_real;
- char *timestamp_str;
- char timestamp_real_str[64];
-
- s_con = nm_connection_get_setting_connection (connection);
- if (s_con) {
- /* Obtain field values */
- timestamp = nm_setting_connection_get_timestamp (s_con);
- timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
- timestamp_real = timestamp;
- strftime (timestamp_real_str, sizeof (timestamp_real_str), "%c", localtime (&timestamp_real));
-
- nmc->allowed_fields[0].value = nm_setting_connection_get_id (s_con);
- nmc->allowed_fields[1].value = nm_setting_connection_get_uuid (s_con);
- nmc->allowed_fields[2].value = nm_setting_connection_get_connection_type (s_con);
- nmc->allowed_fields[3].value = timestamp_str;
- nmc->allowed_fields[4].value = timestamp ? timestamp_real_str : _("never");
- nmc->allowed_fields[5].value = nm_setting_connection_get_autoconnect (s_con) ? _("yes") : _("no");
- nmc->allowed_fields[6].value = nm_setting_connection_get_read_only (s_con) ? _("yes") : _("no");
- nmc->allowed_fields[7].value = nm_connection_get_path (connection);
-
- nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
- print_fields (nmc->print_fields, nmc->allowed_fields);
-
- g_free (timestamp_str);
- }
+ fprintf (stderr,
+ _("Usage: nmcli connection down { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+ "\n"
+ "Deactivate a connection from a device (without preventing the device from\n"
+ "further auto-activation). The profile to deactivate is identified by its name,\n"
+ "UUID or D-Bus path.\n\n"));
}
-static NMConnection *
-find_connection (GSList *list, const char *filter_type, const char *filter_val)
+static void
+usage_connection_add (void)
{
- NMSettingConnection *s_con;
- NMConnection *connection;
- GSList *iterator;
- const char *id;
- const char *uuid;
-
- iterator = list;
- while (iterator) {
- connection = NM_CONNECTION (iterator->data);
- s_con = nm_connection_get_setting_connection (connection);
- if (s_con) {
- id = nm_setting_connection_get_id (s_con);
- uuid = nm_setting_connection_get_uuid (s_con);
- if (filter_type) {
- if ((strcmp (filter_type, "id") == 0 && strcmp (filter_val, id) == 0) ||
- (strcmp (filter_type, "uuid") == 0 && strcmp (filter_val, uuid) == 0)) {
- return connection;
- }
- }
- }
- iterator = g_slist_next (iterator);
- }
+ fprintf (stderr,
+ _("Usage: nmcli connection add { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n\n"
+ " COMMON_OPTIONS:\n"
+ " type <type>\n"
+ " ifname <interface name> | \"*\"\n"
+ " [con-name <connection name>]\n"
+ " [autoconnect yes|no]\n\n"
+ " [save yes|no]\n\n"
+ " TYPE_SPECIFIC_OPTIONS:\n"
+ " ethernet: [mac <MAC address>]\n"
+ " [cloned-mac <cloned MAC address>]\n"
+ " [mtu <MTU>]\n\n"
+ " wifi: ssid <SSID>\n"
+ " [mac <MAC address>]\n"
+ " [cloned-mac <cloned MAC address>]\n"
+ " [mtu <MTU>]\n\n"
+ " wimax: [mac <MAC address>]\n"
+ " [nsp <NSP>]\n\n"
+ " pppoe: username <PPPoE username>\n"
+ " [password <PPPoE password>]\n"
+ " [service <PPPoE service name>]\n"
+ " [mtu <MTU>]\n"
+ " [mac <MAC address>]\n\n"
+ " gsm: apn <APN>\n"
+ " [user <username>]\n"
+ " [password <password>]\n\n"
+ " cdma: [user <username>]\n"
+ " [password <password>]\n\n"
+ " infiniband: [mac <MAC address>]\n"
+ " [mtu <MTU>]\n"
+ " [transport-mode datagram | connected]\n"
+ " [parent <ifname>]\n"
+ " [p-key <IPoIB P_Key>]\n\n"
+ " bluetooth: [addr <bluetooth address>]\n"
+ " [bt-type panu|dun-gsm|dun-cdma]\n\n"
+ " vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+ " id <VLAN ID>\n"
+ " [flags <VLAN flags>]\n"
+ " [ingress <ingress priority mapping>]\n"
+ " [egress <egress priority mapping>]\n"
+ " [mtu <MTU>]\n\n"
+ " bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) | broadcast (3) |\n"
+ " 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\n"
+ " [primary <ifname>]\n"
+ " [miimon <num>]\n"
+ " [downdelay <num>]\n"
+ " [updelay <num>]\n"
+ " [arp-interval <num>]\n"
+ " [arp-ip-target <num>]\n\n"
+ " bond-slave: master <master (ifname, or connection UUID or name)>\n\n"
+ " team: [config <file>|<raw JSON data>]\n\n"
+ " team-slave: master <master (ifname, or connection UUID or name)>\n"
+ " [config <file>|<raw JSON data>]\n\n"
+ " bridge: [stp yes|no]\n"
+ " [priority <num>]\n"
+ " [forward-delay <2-30>]\n"
+ " [hello-time <1-10>]\n"
+ " [max-age <6-40>]\n"
+ " [ageing-time <0-1000000>]\n"
+ " [mac <MAC address>]\n\n"
+ " bridge-slave: master <master (ifname, or connection UUID or name)>\n"
+ " [priority <0-63>]\n"
+ " [path-cost <1-65535>]\n"
+ " [hairpin yes|no]\n\n"
+ " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|ssh|l2tp|iodine|...\n"
+ " [user <username>]\n\n"
+ " olpc-mesh: ssid <SSID>\n"
+ " [channel <1-13>]\n"
+ " [dhcp-anycast <MAC address>]\n\n"
+ " IP_OPTIONS:\n"
+ " [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+ " [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n\n"));
+}
- return NULL;
+static void
+usage_connection_modify (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli connection modify { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
+ "\n"
+ "Modify one or more properties of the connection profile.\n"
+ "The profile is identified by its name, UUID or D-Bus path. For multi-valued\n"
+ "properties you can use optional '+' or '-' prefix to the property name.\n"
+ "The '+' sign allows appending items instead of overwriting the whole value.\n"
+ "The '-' sign allows removing selected items instead of the whole value.\n"
+ "\n"
+ "Examples:\n"
+ "nmcli con mod home-wifi wifi.ssid rakosnicek\n"
+ "nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.2/24, 10.10.1.5/8\"\n"
+ "nmcli con mod em1-1 +ipv4.dns 8.8.4.4\n"
+ "nmcli con mod em1-1 -ipv4.dns 1\n"
+ "nmcli con mod em1-1 -ipv6.addr \"abbe::cafe/56\"\n"
+ "nmcli con mod bond0 +bond.options mii=500\n"
+ "nmcli con mod bond0 -bond.options downdelay\n\n"));
}
-static NMCResultCode
-do_connections_list (NmCli *nmc, int argc, char **argv)
+static void
+usage_connection_edit (void)
{
- GError *error1 = NULL;
- GError *error2 = NULL;
- char *fields_str;
- char *fields_all = NMC_FIELDS_CON_LIST_ALL;
- char *fields_common = NMC_FIELDS_CON_LIST_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
- gboolean valid_param_specified = FALSE;
+ fprintf (stderr,
+ _("Usage: nmcli connection edit { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [id | uuid | path] <ID>\n"
+ "\n"
+ "Edit an existing connection profile in an interactive editor.\n"
+ "The profile is identified by its name, UUID or D-Bus path\n"
+ "\n"
+ "ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+ "\n"
+ "Add a new connection profile in an interactive editor.\n\n"));
+}
- nmc->should_wait = FALSE;
+static void
+usage_connection_delete (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli connection delete { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [id | uuid | path] <ID>\n"
+ "\n"
+ "Delete a connection profile.\n"
+ "The profile is identified by its name, UUID or D-Bus path.\n\n"));
+}
- if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
- fields_str = fields_common;
- else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
- fields_str = fields_all;
- else
- fields_str = nmc->required_fields;
+static void
+usage_connection_reload (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli connection reload { help }\n"
+ "\n"
+ "Reload all connection files from disk.\n\n"));
+}
- nmc->allowed_fields = nmc_fields_con_list;
- nmc->print_fields.indices = parse_output_fields (fields_str, nmc->allowed_fields, &error1);
- /* error1 is checked later - it's not valid for connection details */
+static void
+usage_connection_load (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli connection load { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := <filename> [<filename>...]\n"
+ "\n"
+ "Load/reload one or more connection files from disk. Use this after manually\n"
+ "editing a connection file to ensure that NetworkManager is aware of its latest\n"
+ "state.\n\n"));
+}
- if (argc == 0) {
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error2))
- goto error;
- if (error1)
- goto error;
- valid_param_specified = TRUE;
- /* Print headers */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("Connection list");
- print_fields (nmc->print_fields, nmc->allowed_fields);
+/* The real commands that do something - i.e. not 'help', etc. */
+static const char *real_con_commands[] = {
+ "show",
+ "up",
+ "down",
+ "add",
+ "modify",
+ "edit",
+ "delete",
+ "reload",
+ "load",
+ NULL
+};
- /* Print values */
- g_slist_foreach (nmc->system_connections, (GFunc) show_connection, nmc);
+/* quit main loop */
+static void
+quit (void)
+{
+ if (progress_id) {
+ g_source_remove (progress_id);
+ progress_id = 0;
+ nmc_terminal_erase_line ();
}
- else {
- while (argc > 0) {
- if (strcmp (*argv, "id") == 0 || strcmp (*argv, "uuid") == 0) {
- const char *selector = *argv;
- NMConnection *con;
-
- if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- return nmc->return_value;
- }
- valid_param_specified = TRUE;
- if (!nmc->mode_specified)
- nmc->multiline_output = TRUE; /* multiline mode is default for 'con list id|uuid' */
- con = find_connection (nmc->system_connections, selector, *argv);
- if (con) {
- nmc_connection_detail (con, nmc);
- }
- else {
- g_string_printf (nmc->return_text, _("Error: %s - no such connection."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- }
- break;
- }
- else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
- }
+ g_main_loop_quit (loop); /* quit main loop */
+}
- argc--;
- argv++;
- }
- }
+static const char *
+construct_header_name (const char *base, const char *spec)
+{
+ static char header_name[128];
- if (!valid_param_specified) {
- g_string_printf (nmc->return_text, _("Error: no valid parameter specified."));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- }
- return nmc->return_value;
+ if (spec == NULL)
+ return base;
-error:
- if (error1) {
- if (error1->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'con list': %s"), error1->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'con list': %s; allowed fields: %s"), error1->message, NMC_FIELDS_CON_LIST_ALL);
- g_error_free (error1);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- }
- if (error2) {
- g_string_printf (nmc->return_text, _("Error: %s."), error2->message);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- g_error_free (error2);
- }
+ g_strlcpy (header_name, base, sizeof (header_name));
+ g_strlcat (header_name, " (", sizeof (header_name));
+ g_strlcat (header_name, spec, sizeof (header_name));
+ g_strlcat (header_name, ")", sizeof (header_name));
- return nmc->return_value;
+ return header_name;
}
static const char *
@@ -495,6 +589,55 @@ vpn_connection_state_to_string (NMVPNConnectionState state)
}
}
+/* Caller has to free the returned string */
+static char *
+get_ac_device_string (NMActiveConnection *active)
+{
+ GString *dev_str;
+ const GPtrArray *devices;
+ int i;
+
+ if (!active)
+ return NULL;
+
+ /* Get devices of the active connection */
+ dev_str = g_string_new (NULL);
+ devices = nm_active_connection_get_devices (active);
+ for (i = 0; devices && (i < devices->len); i++) {
+ NMDevice *device = g_ptr_array_index (devices, i);
+ const char *dev_iface = nm_device_get_iface (device);
+
+ if (dev_iface) {
+ g_string_append (dev_str, dev_iface);
+ g_string_append_c (dev_str, ',');
+ }
+ }
+ if (dev_str->len > 0)
+ g_string_truncate (dev_str, dev_str->len - 1); /* Cut off last ',' */
+
+ return g_string_free (dev_str, FALSE);
+}
+
+static NMActiveConnection *
+get_ac_for_connection (const GPtrArray *active_cons, NMConnection *connection)
+{
+ const char *con_path;
+ int i;
+ NMActiveConnection *ac = NULL;
+
+ /* Is the connection active? */
+ con_path = nm_connection_get_path (connection);
+ for (i = 0; active_cons && i < active_cons->len; i++) {
+ NMActiveConnection *candidate = g_ptr_array_index (active_cons, i);
+
+ if (!g_strcmp0 (nm_active_connection_get_connection (candidate), con_path)) {
+ ac = candidate;
+ break;
+ }
+ }
+ return ac;
+}
+
static NMConnection *
get_connection_for_active (const GSList *con_list, NMActiveConnection *active)
{
@@ -514,7 +657,188 @@ get_connection_for_active (const GSList *con_list, NMActiveConnection *active)
}
static gboolean
-fill_in_fields_con_status (NMActiveConnection *active, GSList *con_list)
+nmc_connection_profile_details (NMConnection *connection, NmCli *nmc)
+{
+ GError *error = NULL;
+ GArray *print_settings_array;
+ GPtrArray *prop_array = NULL;
+ int i;
+ char *fields_str;
+ char *fields_all = NMC_FIELDS_SETTINGS_NAMES_ALL;
+ char *fields_common = NMC_FIELDS_SETTINGS_NAMES_ALL;
+ const char *base_hdr = _("Connection profile details");
+ gboolean was_output = FALSE;
+
+ if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
+ fields_str = fields_common;
+ else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
+ fields_str = fields_all;
+ else
+ fields_str = nmc->required_fields;
+
+ print_settings_array = parse_output_fields (fields_str, nmc_fields_settings_names, TRUE, &prop_array, &error);
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: 'connection show': %s"), error->message);
+ g_error_free (error);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ return FALSE;
+ }
+ g_assert (print_settings_array);
+
+ /* Main header */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, nm_connection_get_id (connection));
+ nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTINGS_NAMES_ALL,
+ nmc_fields_settings_names, FALSE, NULL, NULL);
+
+ nmc_fields_settings_names[0].flags = NMC_OF_FLAG_MAIN_HEADER_ONLY;
+ print_required_fields (nmc, nmc_fields_settings_names);
+
+ /* Loop through the required settings and print them. */
+ for (i = 0; i < print_settings_array->len; i++) {
+ NMSetting *setting;
+ int section_idx = g_array_index (print_settings_array, int, i);
+ const char *prop_name = (const char *) g_ptr_array_index (prop_array, i);
+
+ if (nmc->print_output != NMC_PRINT_TERSE && !nmc->multiline_output && was_output)
+ printf ("\n"); /* Empty line */
+
+ was_output = FALSE;
+
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
+
+ setting = nm_connection_get_setting_by_name (connection, nmc_fields_settings_names[section_idx].name);
+ if (setting) {
+ setting_details (setting, nmc, prop_name);
+ was_output = TRUE;
+ continue;
+ }
+ }
+
+ g_array_free (print_settings_array, TRUE);
+ if (prop_array)
+ g_ptr_array_free (prop_array, TRUE);
+
+ return TRUE;
+}
+
+static NMActiveConnection *
+find_active_connection (const GPtrArray *active_cons,
+ const GSList *cons,
+ const char *filter_type,
+ const char *filter_val,
+ int *idx)
+{
+ int i;
+ int start = (idx && *idx > 0) ? *idx : 0;
+ const char *path, *a_path, *path_num, *a_path_num;
+ const char *id;
+ const char *uuid;
+ NMConnection *con;
+ NMActiveConnection *found = NULL;
+
+ for (i = start; active_cons && (i < active_cons->len); i++) {
+ NMActiveConnection *candidate = g_ptr_array_index (active_cons, i);
+
+ path = nm_active_connection_get_connection (candidate);
+ a_path = nm_object_get_path (NM_OBJECT (candidate));
+ uuid = nm_active_connection_get_uuid (candidate);
+ path_num = path ? strrchr (path, '/') + 1 : NULL;
+ a_path_num = a_path ? strrchr (a_path, '/') + 1 : NULL;
+
+ con = get_connection_for_active (cons, candidate);
+ id = nm_connection_get_id (con);
+
+ /* When filter_type is NULL, compare connection ID (filter_val)
+ * against all types. Otherwise, only compare against the specific
+ * type. If 'path' or 'apath' filter types are specified, comparison
+ * against numeric index (in addition to the whole path) is allowed.
+ */
+ if ( ( (!filter_type || strcmp (filter_type, "id") == 0)
+ && strcmp (filter_val, id) == 0)
+ || ( (!filter_type || strcmp (filter_type, "uuid") == 0)
+ && strcmp (filter_val, uuid) == 0)
+ || ( (!filter_type || strcmp (filter_type, "path") == 0)
+ && (g_strcmp0 (filter_val, path) == 0 || (filter_type && g_strcmp0 (filter_val, path_num) == 0)))
+ || ( (!filter_type || strcmp (filter_type, "apath") == 0)
+ && (g_strcmp0 (filter_val, a_path) == 0 || (filter_type && g_strcmp0 (filter_val, a_path_num) == 0)))) {
+ if (!idx)
+ return candidate;
+ if (found) {
+ *idx = i;
+ return found;
+ }
+ found = candidate;
+ }
+ }
+
+ if (idx)
+ *idx = 0;
+ return found;
+}
+
+static void
+fill_output_connection (gpointer data, gpointer user_data, gboolean active_only)
+{
+ NMConnection *connection = (NMConnection *) data;
+ NmCli *nmc = (NmCli *) user_data;
+ NMSettingConnection *s_con;
+ guint64 timestamp;
+ time_t timestamp_real;
+ char *timestamp_str;
+ char *timestamp_real_str = "";
+ NmcOutputField *arr;
+ NMActiveConnection *ac = NULL;
+ const char *ac_path = NULL;
+ const char *ac_state = NULL;
+ char *ac_dev = NULL;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ ac = get_ac_for_connection (nm_client_get_active_connections (nmc->client), connection);
+ if (active_only && !ac)
+ return;
+
+ if (ac) {
+ ac_path = nm_object_get_path (NM_OBJECT (ac));
+ ac_state = active_connection_state_to_string (nm_active_connection_get_state (ac));
+ ac_dev = get_ac_device_string (ac);
+ }
+
+ /* Obtain field values */
+ timestamp = nm_setting_connection_get_timestamp (s_con);
+ timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
+ if (timestamp) {
+ timestamp_real = timestamp;
+ timestamp_real_str = g_malloc0 (64);
+ strftime (timestamp_real_str, 64, "%c", localtime (&timestamp_real));
+ }
+
+ arr = nmc_dup_fields_array (nmc_fields_con_show,
+ sizeof (nmc_fields_con_show),
+ 0);
+ set_val_strc (arr, 0, nm_setting_connection_get_id (s_con));
+ set_val_strc (arr, 1, nm_setting_connection_get_uuid (s_con));
+ set_val_strc (arr, 2, nm_setting_connection_get_connection_type (s_con));
+ set_val_str (arr, 3, timestamp_str);
+ set_val_str (arr, 4, timestamp ? timestamp_real_str : g_strdup (_("never")));
+ set_val_strc (arr, 5, nm_setting_connection_get_autoconnect (s_con) ? _("yes") : _("no"));
+ set_val_strc (arr, 6, nm_setting_connection_get_read_only (s_con) ? _("yes") : _("no"));
+ set_val_strc (arr, 7, nm_connection_get_path (connection));
+ set_val_strc (arr, 8, ac ? _("yes") : _("no"));
+ set_val_str (arr, 9, ac_dev);
+ set_val_strc (arr, 10, ac_state);
+ set_val_strc (arr, 11, ac_path);
+
+ g_ptr_array_add (nmc->output_data, arr);
+}
+
+static void
+fill_output_active_connection (NMActiveConnection *active,
+ NmCli *nmc,
+ gboolean with_group,
+ guint32 o_flags)
{
GSList *iter;
const char *active_path;
@@ -523,7 +847,10 @@ fill_in_fields_con_status (NMActiveConnection *active, GSList *con_list)
GString *dev_str;
NMActiveConnectionState state;
int i;
- gboolean success = FALSE;
+ GSList *con_list = nmc->system_connections;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+ int idx_start = with_group ? 0 : 1;
active_path = nm_active_connection_get_connection (active);
state = nm_active_connection_get_state (active);
@@ -543,20 +870,29 @@ fill_in_fields_con_status (NMActiveConnection *active, GSList *con_list)
if (dev_str->len > 0)
g_string_truncate (dev_str, dev_str->len - 1); /* Cut off last ',' */
+ tmpl = nmc_fields_con_active_details_general;
+ tmpl_len = sizeof (nmc_fields_con_active_details_general);
+ if (!with_group) {
+ tmpl++;
+ tmpl_len -= sizeof (NmcOutputField);
+ }
+
/* Fill field values */
- nmc_fields_con_status[0].value = nmc_fields_status_details_groups[0].name;
- nmc_fields_con_status[1].value = _("N/A");
- nmc_fields_con_status[2].value = nm_active_connection_get_uuid (active);
- nmc_fields_con_status[3].value = dev_str->str;
- nmc_fields_con_status[4].value = active_connection_state_to_string (state);
- nmc_fields_con_status[5].value = nm_active_connection_get_default (active) ? _("yes") : _("no");
- nmc_fields_con_status[6].value = nm_active_connection_get_default6 (active) ? _("yes") : _("no");
- nmc_fields_con_status[7].value = nm_active_connection_get_specific_object (active);
- nmc_fields_con_status[8].value = NM_IS_VPN_CONNECTION (active) ? _("yes") : _("no");
- nmc_fields_con_status[9].value = nm_object_get_path (NM_OBJECT (active));
- nmc_fields_con_status[10].value = nm_active_connection_get_connection (active);
- nmc_fields_con_status[11].value = _("N/A");
- nmc_fields_con_status[12].value = nm_active_connection_get_master (active);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, o_flags);
+ if (with_group)
+ set_val_strc (arr, 0, nmc_fields_con_active_details_groups[0].name);
+ set_val_strc (arr, 1-idx_start, _("N/A"));
+ set_val_strc (arr, 2-idx_start, nm_active_connection_get_uuid (active));
+ set_val_str (arr, 3-idx_start, dev_str->str);
+ set_val_strc (arr, 4-idx_start, active_connection_state_to_string (state));
+ set_val_strc (arr, 5-idx_start, nm_active_connection_get_default (active) ? _("yes") : _("no"));
+ set_val_strc (arr, 6-idx_start, nm_active_connection_get_default6 (active) ? _("yes") : _("no"));
+ set_val_strc (arr, 7-idx_start, nm_active_connection_get_specific_object (active));
+ set_val_strc (arr, 8-idx_start, NM_IS_VPN_CONNECTION (active) ? _("yes") : _("no"));
+ set_val_strc (arr, 9-idx_start, nm_object_get_path (NM_OBJECT (active)));
+ set_val_strc (arr, 10-idx_start, nm_active_connection_get_connection (active));
+ set_val_strc (arr, 11-idx_start, _("N/A"));
+ set_val_strc (arr, 12-idx_start, nm_active_connection_get_master (active));
for (iter = con_list; iter; iter = g_slist_next (iter)) {
NMConnection *connection = (NMConnection *) iter->data;
@@ -568,75 +904,15 @@ fill_in_fields_con_status (NMActiveConnection *active, GSList *con_list)
g_assert (s_con != NULL);
/* Fill field values that depend on NMConnection */
- nmc_fields_con_status[1].value = nm_setting_connection_get_id (s_con);
- nmc_fields_con_status[11].value = nm_setting_connection_get_zone (s_con);
+ set_val_strc (arr, 1-idx_start, nm_setting_connection_get_id (s_con));
+ set_val_strc (arr, 11-idx_start, nm_setting_connection_get_zone (s_con));
- success = TRUE;
break;
}
}
+ g_ptr_array_add (nmc->output_data, arr);
- /* Just free GString here, the char array has to be freed after printing
- * (by free_fields_con_status()) */
g_string_free (dev_str, FALSE);
- return success;
-}
-
-static void
-free_fields_con_status (void)
-{
- /* Just DEVICES string was dynamically allocated */
- g_free ((char *) nmc_fields_con_status[3].value);
- nmc_fields_con_status[3].value = NULL;
-}
-
-static void
-show_active_connection (gpointer data, gpointer user_data)
-{
- NMActiveConnection *active = NM_ACTIVE_CONNECTION (data);
- NmCli *nmc = (NmCli *) user_data;
-
- fill_in_fields_con_status (active, nmc->system_connections);
-
- nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
- print_fields (nmc->print_fields, nmc->allowed_fields);
-
- free_fields_con_status ();
-}
-
-static NMActiveConnection *
-find_active_connection (const GPtrArray *active_cons, const GSList *cons,
- const char *filter_type, const char *filter_val)
-{
- int i;
- const char *s_path, *a_path;
- const char *id;
- const char *uuid;
- NMConnection *con;
- NMSettingConnection *s_con;
-
- for (i = 0; active_cons && (i < active_cons->len); i++) {
- NMActiveConnection *candidate = g_ptr_array_index (active_cons, i);
-
- s_path = nm_active_connection_get_connection (candidate);
- a_path = nm_object_get_path (NM_OBJECT (candidate));
- uuid = nm_active_connection_get_uuid (candidate);
-
- con = get_connection_for_active (cons, candidate);
- s_con = nm_connection_get_setting_connection (con);
- g_assert (s_con != NULL);
- id = nm_setting_connection_get_id (s_con);
-
- if (filter_type) {
- if ( (strcmp (filter_type, "id") == 0 && strcmp (filter_val, id) == 0)
- || (strcmp (filter_type, "uuid") == 0 && strcmp (filter_val, uuid) == 0)
- || (strcmp (filter_type, "path") == 0 && strcmp (filter_val, s_path) == 0)
- || (strcmp (filter_type, "path") == 0 && strcmp (filter_val, a_path) == 0)) {
- return candidate;
- }
- }
- }
- return NULL;
}
typedef struct {
@@ -683,6 +959,9 @@ find_vpn_gateway_key (const char *vpn_type)
if (g_strcmp0 (vpn_type, "pptp") == 0) return "gateway";
if (g_strcmp0 (vpn_type, "openconnect") == 0) return "gateway";
if (g_strcmp0 (vpn_type, "openswan") == 0) return "right";
+ if (g_strcmp0 (vpn_type, "libreswan") == 0) return "right";
+ if (g_strcmp0 (vpn_type, "ssh") == 0) return "remote";
+ if (g_strcmp0 (vpn_type, "l2tp") == 0) return "gateway";
return "";
}
@@ -694,6 +973,8 @@ find_vpn_username_key (const char *vpn_type)
if (g_strcmp0 (vpn_type, "pptp") == 0) return "user";
if (g_strcmp0 (vpn_type, "openconnect") == 0) return "username";
if (g_strcmp0 (vpn_type, "openswan") == 0) return "leftxauthusername";
+ if (g_strcmp0 (vpn_type, "libreswan") == 0) return "leftxauthusername";
+ if (g_strcmp0 (vpn_type, "l2tp") == 0) return "user";
return "";
}
@@ -726,17 +1007,18 @@ get_vpn_data_item (NMConnection *connection, enum VpnDataItem vpn_data_item)
/* FIXME end */
static gboolean
-nmc_active_connection_detail (NMActiveConnection *acon, NmCli *nmc)
+nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
{
GError *error = NULL;
GArray *print_groups;
+ GPtrArray *group_fields = NULL;
int i;
char *fields_str;
- char *fields_all = NMC_FIELDS_CON_STATUS_DETAILS_ALL;
- char *fields_common = NMC_FIELDS_CON_STATUS_DETAILS_ALL;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ char *fields_all = NMC_FIELDS_CON_ACTIVE_DETAILS_ALL;
+ char *fields_common = NMC_FIELDS_CON_ACTIVE_DETAILS_ALL;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+ const char *base_hdr = _("Activate connection details");
gboolean was_output = FALSE;
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
@@ -746,77 +1028,93 @@ nmc_active_connection_detail (NMActiveConnection *acon, NmCli *nmc)
else
fields_str = nmc->required_fields;
- print_groups = parse_output_fields (fields_str, nmc_fields_status_details_groups, &error);
+ print_groups = parse_output_fields (fields_str, nmc_fields_con_active_details_groups, TRUE, &group_fields, &error);
if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'con status': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'con status': %s; allowed fields: %s"), error->message, NMC_FIELDS_CON_STATUS_DETAILS_ALL);
+ g_string_printf (nmc->return_text, _("Error: 'connection show': %s"), error->message);
g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
+ g_assert (print_groups);
+
+ /* Main header */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, nm_active_connection_get_uuid (acon));
+ nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_CON_ACTIVE_DETAILS_ALL,
+ nmc_fields_con_active_details_groups, FALSE, NULL, NULL);
- nmc->allowed_fields = nmc_fields_status_details_groups;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ONLY;
- nmc->print_fields.header_name = _("Active connection details");
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_CON_STATUS_DETAILS_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ nmc_fields_con_active_details_groups[0].flags = NMC_OF_FLAG_MAIN_HEADER_ONLY;
+ print_required_fields (nmc, nmc_fields_con_active_details_groups);
/* Loop through the groups and print them. */
for (i = 0; i < print_groups->len; i++) {
int group_idx = g_array_index (print_groups, int, i);
+ char *group_fld = (char *) g_ptr_array_index (group_fields, i);
if (nmc->print_output != NMC_PRINT_TERSE && !nmc->multiline_output && was_output)
printf ("\n"); /* Empty line */
was_output = FALSE;
- /* GENERAL */
- if (strcasecmp (nmc_fields_status_details_groups[group_idx].name, nmc_fields_status_details_groups[0].name) == 0) {
- nmc->allowed_fields = nmc_fields_con_status;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_CON_STATUS_DETAILS_GENERAL_ALL, nmc->allowed_fields, NULL);
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
- /* Print field names */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ /* GENERAL */
+ if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[0].name) == 0) {
+ /* Add field names */
+ tmpl = nmc_fields_con_active_details_general;
+ tmpl_len = sizeof (nmc_fields_con_active_details_general);
+ nmc->print_fields.indices = parse_output_fields (group_fld ? group_fld : NMC_FIELDS_CON_ACTIVE_DETAILS_GENERAL_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
/* Fill in values */
- fill_in_fields_con_status (acon, nmc->system_connections);
+ fill_output_active_connection (acon, nmc, TRUE, NMC_OF_FLAG_SECTION_PREFIX);
- /* and print them */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ print_data (nmc); /* Print all data */
- free_fields_con_status ();
was_output = TRUE;
}
- /* IP */
- if (strcasecmp (nmc_fields_status_details_groups[group_idx].name, nmc_fields_status_details_groups[1].name) == 0) {
- const GPtrArray *devices;
- int j;
+ /* IP4 */
+ if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[1].name) == 0) {
+ gboolean b1 = FALSE;
+ NMIP4Config *cfg4 = nm_active_connection_get_ip4_config (acon);
- devices = nm_active_connection_get_devices (acon);
- for (j = 0; devices && (j < devices->len); j++) {
- gboolean b1 = FALSE, b2 = FALSE, b3 = FALSE, b4 = FALSE;
- NMDevice *device = g_ptr_array_index (devices, j);
- NMIP4Config *cfg4 = nm_device_get_ip4_config (device);
- NMIP6Config *cfg6 = nm_device_get_ip6_config (device);
- NMDHCP4Config *dhcp4 = nm_device_get_dhcp4_config (device);
- NMDHCP6Config *dhcp6 = nm_device_get_dhcp6_config (device);
+ b1 = print_ip4_config (cfg4, nmc, "IP4", group_fld);
+ was_output = was_output || b1;
+ }
- b1 = print_ip4_config (cfg4, nmc, "IP4");
- b2 = print_dhcp4_config (dhcp4, nmc, "DHCP4");
- b3 = print_ip6_config (cfg6, nmc, "IP6");
- b4 = print_dhcp6_config (dhcp6, nmc, "DHCP6");
- was_output = was_output || b1 || b2 || b3 || b4;
- }
+ /* DHCP4 */
+ if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[2].name) == 0) {
+ gboolean b1 = FALSE;
+ NMDHCP4Config *dhcp4 = nm_active_connection_get_dhcp4_config (acon);
+
+ b1 = print_dhcp4_config (dhcp4, nmc, "DHCP4", group_fld);
+ was_output = was_output || b1;
+ }
+
+ /* IP6 */
+ if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[3].name) == 0) {
+ gboolean b1 = FALSE;
+ NMIP6Config *cfg6 = nm_active_connection_get_ip6_config (acon);
+
+ b1 = print_ip6_config (cfg6, nmc, "IP6", group_fld);
+ was_output = was_output || b1;
+ }
+
+ /* DHCP6 */
+ if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[4].name) == 0) {
+ gboolean b1 = FALSE;
+ NMDHCP6Config *dhcp6 = nm_active_connection_get_dhcp6_config (acon);
+
+ b1 = print_dhcp6_config (dhcp6, nmc, "DHCP6", group_fld);
+ was_output = was_output || b1;
}
/* VPN */
if (NM_IS_VPN_CONNECTION (acon) &&
- strcasecmp (nmc_fields_status_details_groups[group_idx].name, nmc_fields_status_details_groups[2].name) == 0) {
+ strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[5].name) == 0) {
NMConnection *con;
NMSettingConnection *s_con;
NMSettingVPN *s_vpn;
@@ -831,12 +1129,12 @@ nmc_active_connection_detail (NMActiveConnection *acon, NmCli *nmc)
s_con = nm_connection_get_setting_connection (con);
g_assert (s_con != NULL);
- nmc->allowed_fields = nmc_fields_status_details_vpn;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_CON_STATUS_DETAILS_VPN_ALL, nmc->allowed_fields, NULL);
-
- /* Print field names */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ tmpl = nmc_fields_con_active_details_vpn;
+ tmpl_len = sizeof (nmc_fields_con_active_details_vpn);
+ nmc->print_fields.indices = parse_output_fields (group_fld ? group_fld : NMC_FIELDS_CON_ACTIVE_DETAILS_VPN_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
s_vpn = nm_connection_get_setting_vpn (con);
if (s_vpn) {
@@ -858,64 +1156,167 @@ nmc_active_connection_detail (NMActiveConnection *acon, NmCli *nmc)
vpn_state = nm_vpn_connection_get_vpn_state (NM_VPN_CONNECTION (acon));
vpn_state_str = g_strdup_printf ("%d - %s", vpn_state, vpn_connection_state_to_string (vpn_state));
- /* Print values */
- set_val_str (nmc->allowed_fields, 0, nmc_fields_status_details_groups[2].name);
- set_val_str (nmc->allowed_fields, 1, type_str);
- set_val_str (nmc->allowed_fields, 2, username ? username : get_vpn_data_item (con, VPN_DATA_ITEM_USERNAME));
- set_val_str (nmc->allowed_fields, 3, get_vpn_data_item (con, VPN_DATA_ITEM_GATEWAY));
- set_val_str (nmc->allowed_fields, 4, banner_str);
- set_val_str (nmc->allowed_fields, 5, vpn_state_str);
- set_val_arr (nmc->allowed_fields, 6, (const char **) vpn_data_array);
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields);
-
- g_free (type_str);
- g_free (banner_str);
- g_free (vpn_state_str);
- g_strfreev (vpn_data_array);
+ /* Add values */
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_con_active_details_groups[5].name);
+ set_val_str (arr, 1, type_str);
+ set_val_strc (arr, 2, username ? username : get_vpn_data_item (con, VPN_DATA_ITEM_USERNAME));
+ set_val_strc (arr, 3, get_vpn_data_item (con, VPN_DATA_ITEM_GATEWAY));
+ set_val_str (arr, 4, banner_str);
+ set_val_str (arr, 5, vpn_state_str);
+ set_val_arr (arr, 6, vpn_data_array);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
}
- if (print_groups)
- g_array_free (print_groups, FALSE);
+ g_array_free (print_groups, TRUE);
+ if (group_fields)
+ g_ptr_array_free (group_fields, TRUE);
return TRUE;
}
-static NMCResultCode
-do_connections_status (NmCli *nmc, int argc, char **argv)
+static gboolean
+split_required_fields_for_con_show (const char *input,
+ char **profile_flds,
+ char **active_flds,
+ GError **error)
{
- const GPtrArray *active_cons;
- GError *err = NULL;
- GError *err1 = NULL;
+ char **fields, **iter;
+ char *dot;
+ GString *str1, *str2;
+ gboolean found;
+ gboolean group_profile = FALSE;
+ gboolean group_active = FALSE;
+ gboolean success = TRUE;
+ gboolean is_all, is_common;
+ int i;
- nmc->should_wait = FALSE;
+ if (!input) {
+ *profile_flds = NULL;
+ *active_flds = NULL;
+ return TRUE;
+ }
- if (!nmc_is_nm_running (nmc, &err)) {
- if (err) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), err->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (err);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ str1 = g_string_new (NULL);
+ str2 = g_string_new (NULL);
+
+ /* Split supplied fields string */
+ fields = g_strsplit_set (input, ",", -1);
+ for (iter = fields; iter && *iter; iter++) {
+ g_strstrip (*iter);
+ dot = strchr (*iter, '.');
+ if (dot)
+ *dot = '\0';
+
+ is_all = !dot && strcasecmp (*iter, "all") == 0;
+ is_common = !dot && strcasecmp (*iter, "common") == 0;
+
+ found = FALSE;
+
+ for (i = 0; nmc_fields_settings_names[i].name; i++) {
+ if ( is_all || is_common
+ || !strcasecmp (*iter, nmc_fields_settings_names[i].name)) {
+ if (dot)
+ *dot = '.';
+ g_string_append (str1, *iter);
+ g_string_append_c (str1, ',');
+ found = TRUE;
+ break;
+ }
}
- goto error;
+ if (found)
+ continue;
+ for (i = 0; nmc_fields_con_active_details_groups[i].name; i++) {
+ if ( is_all || is_common
+ || !strcasecmp (*iter, nmc_fields_con_active_details_groups[i].name)) {
+ if (dot)
+ *dot = '.';
+ g_string_append (str2, *iter);
+ g_string_append_c (str2, ',');
+ found = TRUE;
+ break;
+ }
+ }
+ if (!found) {
+ if (dot)
+ *dot = '.';
+ if (!strcasecmp (*iter, CON_SHOW_DETAIL_GROUP_PROFILE))
+ group_profile = TRUE;
+ else if (!strcasecmp (*iter, CON_SHOW_DETAIL_GROUP_ACTIVE))
+ group_active = TRUE;
+ else {
+ char *allowed1 = nmc_get_allowed_fields (nmc_fields_settings_names, -1);
+ char *allowed2 = nmc_get_allowed_fields (nmc_fields_con_active_details_groups, -1);
+ g_set_error (error, NMCLI_ERROR, 0, _("invalid field '%s'; allowed fields: %s and %s, or %s,%s"),
+ *iter, allowed1, allowed2, CON_SHOW_DETAIL_GROUP_PROFILE, CON_SHOW_DETAIL_GROUP_ACTIVE);
+ g_free (allowed1);
+ g_free (allowed2);
+ success = FALSE;
+ break;
+ }
+ }
+ }
+ if (fields)
+ g_strfreev (fields);
+
+ /* Handle pseudo groups: profile, active */
+ if (success && group_profile) {
+ if (str1->len > 0) {
+ g_set_error (error, NMCLI_ERROR, 0, _("'%s' has to be alone"),
+ CON_SHOW_DETAIL_GROUP_PROFILE);
+ success = FALSE;
+ } else
+ g_string_assign (str1, "all,");
+ }
+ if (success && group_active) {
+ if (str2->len > 0) {
+ g_set_error (error, NMCLI_ERROR, 0, _("'%s' has to be alone"),
+ CON_SHOW_DETAIL_GROUP_ACTIVE);
+ success = FALSE;
+ } else
+ g_string_assign (str2, "all,");
}
- /* Get active connections */
+ if (success) {
+ if (str1->len > 0)
+ g_string_truncate (str1, str1->len - 1);
+ if (str2->len > 0)
+ g_string_truncate (str2, str2->len - 1);
+ *profile_flds = g_string_free (str1, str1->len == 0);
+ *active_flds = g_string_free (str2, str2->len == 0);
+ } else {
+ g_string_free (str1, TRUE);
+ g_string_free (str2, TRUE);
+ }
+ return success;
+}
+
+static NMCResultCode
+do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv)
+{
+ GError *err = NULL;
+ char *profile_flds = NULL, *active_flds = NULL;
+
+ nmc->should_wait = FALSE;
nmc->get_client (nmc);
- active_cons = nm_client_get_active_connections (nmc->client);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ goto finish;
+ }
if (argc == 0) {
char *fields_str;
- char *fields_all = NMC_FIELDS_CON_STATUS_ALL;
- char *fields_common = NMC_FIELDS_CON_STATUS_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ char *fields_all = NMC_FIELDS_CON_SHOW_ALL;
+ char *fields_common = NMC_FIELDS_CON_SHOW_COMMON;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+ GSList *iter;
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
fields_str = fields_common;
@@ -924,61 +1325,127 @@ do_connections_status (NmCli *nmc, int argc, char **argv)
else
fields_str = nmc->required_fields;
- nmc->allowed_fields = nmc_fields_con_status + 1 ;
- nmc->print_fields.indices = parse_output_fields (fields_str, nmc->allowed_fields, &err1);
- if (err1)
- goto error;
+ tmpl = nmc_fields_con_show;
+ tmpl_len = sizeof (nmc_fields_con_show);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &err);
+ if (err) {
+ goto finish;
+ }
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &err))
+ goto finish;
+
+ /* Add headers */
+ nmc->print_fields.header_name = active_only ? _("NetworkManager active profiles") :
+ _("NetworkManager connection profiles");
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ /* Add values */
+ for (iter = nmc->system_connections; iter; iter = g_slist_next (iter)) {
+ NMConnection *con = NM_CONNECTION (iter->data);
+ fill_output_connection (con, nmc, active_only);
+ }
+ print_data (nmc); /* Print all data */
+ } else {
+ gboolean new_line = FALSE;
+ gboolean without_fields = (nmc->required_fields == NULL);
+ const GPtrArray *active_cons = nm_client_get_active_connections (nmc->client);
+ GSList *pos = NULL;
- /* Print headers */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("Active connections");
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ /* multiline mode is default for 'connection show <ID>' */
+ if (!nmc->mode_specified)
+ nmc->multiline_output = TRUE;
+
+ /* Split required fields into the settings and active ones. */
+ if (!split_required_fields_for_con_show (nmc->required_fields, &profile_flds, &active_flds, &err))
+ goto finish;
+ g_free (nmc->required_fields);
+ nmc->required_fields = NULL;
- if (active_cons && active_cons->len)
- g_ptr_array_foreach ((GPtrArray *) active_cons, show_active_connection, (gpointer) nmc);
- } else {
while (argc > 0) {
+ NMConnection *con;
+ NMActiveConnection *acon = NULL;
+ const char *selector = NULL;
+
if ( strcmp (*argv, "id") == 0
|| strcmp (*argv, "uuid") == 0
- || strcmp (*argv, "path") == 0) {
- const char *selector = *argv;
- NMActiveConnection *acon;
-
+ || strcmp (*argv, "path") == 0
+ || strcmp (*argv, "apath") == 0) {
+ selector = *argv;
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- return nmc->return_value;
+ goto finish;
}
- if (!nmc->mode_specified)
- nmc->multiline_output = TRUE; /* multiline mode is default for 'con status id|uuid|path' */
+ }
- acon = find_active_connection (active_cons, nmc->system_connections, selector, *argv);
- if (acon) {
- nmc_active_connection_detail (acon, nmc);
- } else {
- g_string_printf (nmc->return_text, _("Error: '%s' is not an active connection."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ /* Find connection by id, uuid, path or apath */
+ con = nmc_find_connection (nmc->system_connections, selector, *argv, &pos);
+ if (!con) {
+ acon = find_active_connection (active_cons, nmc->system_connections, selector, *argv, NULL);
+ if (acon)
+ con = get_connection_for_active (nmc->system_connections, acon);
+ }
+
+ /* Print connection details */
+ if (con) {
+ gboolean res;
+
+ /* Filter only active connections */
+ if (!acon)
+ acon = get_ac_for_connection (active_cons, con);
+ if (active_only && !acon) {
+ next_arg (&argc, &argv);
+ continue;
}
- break;
+
+ /* Show an empty line between connections */
+ if (new_line)
+ printf ("\n");
+
+ /* Show profile configuration */
+ if (without_fields || profile_flds) {
+ nmc->required_fields = profile_flds;
+ res = nmc_connection_profile_details (con, nmc);
+ nmc->required_fields = NULL;
+ if (!res)
+ goto finish;
+ }
+
+ /* If the profile is active, print also active details */
+ if (without_fields || active_flds) {
+ if (acon) {
+ nmc->required_fields = active_flds;
+ res = nmc_active_connection_details (acon, nmc);
+ nmc->required_fields = NULL;
+ if (!res)
+ goto finish;
+ }
+ }
+ new_line = TRUE;
} else {
- g_string_printf (nmc->return_text, _("Error: unknown parameter: %s"), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_string_printf (nmc->return_text, _("Error: %s - no such connection profile."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto finish;
}
-
- argc--;
- argv++;
+
+ /* Take next argument.
+ * But for pos != NULL we have more connections of the same name,
+ * so process the same argument again.
+ */
+ if (!pos)
+ next_arg (&argc, &argv);
}
}
-error:
- if (err1) {
- if (err1->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'con status': %s"), err1->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'con status': %s; allowed fields: %s"), err1->message, NMC_FIELDS_CON_STATUS_ALL);
- g_error_free (err1);
+finish:
+ if (err) {
+ g_string_printf (nmc->return_text, _("Error: %s."), err->message);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_error_free (err);
}
+ g_free (profile_flds);
+ g_free (active_flds);
return nmc->return_value;
}
@@ -1199,13 +1666,13 @@ active_connection_state_cb (NMActiveConnection *active, GParamSpec *pspec, gpoin
state = nm_active_connection_get_state (active);
if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
- if (nmc->print_output == NMC_PRINT_PRETTY) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
nmc_terminal_erase_line ();
- printf (_("Connection successfully activated (D-Bus active path: %s)\n"),
- nm_object_get_path (NM_OBJECT (active)));
- }
+ printf (_("Connection successfully activated (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (active)));
quit ();
- } else if (state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) {
+ } else if ( state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+ || state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) {
g_string_printf (nmc->return_text, _("Error: Connection activation failed."));
nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
quit ();
@@ -1229,11 +1696,10 @@ vpn_connection_state_cb (NMVPNConnection *vpn,
break;
case NM_VPN_CONNECTION_STATE_ACTIVATED:
- if (nmc->print_output == NMC_PRINT_PRETTY) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
nmc_terminal_erase_line ();
- printf (_("VPN connection successfully activated (D-Bus active path: %s)\n"),
- nm_object_get_path (NM_OBJECT (vpn)));
- }
+ printf (_("VPN connection successfully activated (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (vpn)));
quit ();
break;
@@ -1250,85 +1716,6 @@ vpn_connection_state_cb (NMVPNConnection *vpn,
}
}
-/* --- VPN state workaround BEGIN --- */
-static NMVPNConnectionState
-dbus_get_vpn_state (const char *path)
-{
- DBusGConnection *connection;
- DBusGProxy *proxy;
- GError *error = NULL;
- GValue value = {0,};
- NMVPNConnectionState state = NM_VPN_CONNECTION_STATE_UNKNOWN;
-
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
- proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- path,
- "org.freedesktop.DBus.Properties");
- if (!proxy) {
- g_warning ("%s: couldn't create D-Bus object proxy.", __func__);
- dbus_g_connection_unref (connection);
- return NM_VPN_CONNECTION_STATE_UNKNOWN;
- }
-
- /* Get VpnState property for object 'path' through D-Bus Get() call. */
- if (dbus_g_proxy_call (proxy,
- "Get", &error,
- G_TYPE_STRING, NM_DBUS_INTERFACE_VPN_CONNECTION,
- G_TYPE_STRING, "VpnState",
- G_TYPE_INVALID,
- G_TYPE_VALUE, &value, G_TYPE_INVALID)) {
-
- state = g_value_get_uint (&value);
- } else {
- g_warning ("Error in getting active connection 'Vpn' property: (%d) %s",
- error->code, error->message);
- g_error_free (error);
- }
-
- g_object_unref (proxy);
- dbus_g_connection_unref (connection);
-
- return state;
-}
-
-typedef struct {
- NmCli *nmc;
- NMVPNConnection *vpn;
-} VpnGetStateInfo;
-
-static gboolean
-get_vpn_state_cb (gpointer user_data)
-{
- VpnGetStateInfo *info = (VpnGetStateInfo *) user_data;
- NmCli *nmc = info->nmc;
- NMVPNConnection *vpn = info->vpn;
- NMVPNConnectionState state;
-
- if (!NM_IS_OBJECT (vpn)) {
- /* Active connection failed and dissapeared, quit. */
- g_string_printf (nmc->return_text, _("Error: Connection activation failed."));
- nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
- quit ();
- g_free (info);
- return FALSE;
- }
-
- state = dbus_get_vpn_state (nm_object_get_path (NM_OBJECT (vpn)));
-
- vpn_connection_state_cb (vpn, state, NM_VPN_CONNECTION_STATE_REASON_UNKNOWN, nmc);
-
- if ( state == NM_VPN_CONNECTION_STATE_ACTIVATED
- || state == NM_VPN_CONNECTION_STATE_FAILED
- || state == NM_VPN_CONNECTION_STATE_DISCONNECTED) {
-
- g_free (info);
- return FALSE;
- } else
- return TRUE;
-}
-/* --- VPN state workaround END --- */
-
static gboolean
timeout_cb (gpointer user_data)
{
@@ -1368,15 +1755,9 @@ progress_vpn_cb (gpointer user_data)
NMVPNConnection *vpn = (NMVPNConnection *) user_data;
const char *str;
- /* VPN state workaround */
-#if 0
str = NM_IS_VPN_CONNECTION (vpn) ?
vpn_connection_state_to_string (nm_vpn_connection_get_vpn_state (vpn)) :
"";
-#endif
- str = NM_IS_OBJECT (vpn) ?
- vpn_connection_state_to_string (dbus_get_vpn_state (nm_object_get_path (NM_OBJECT (vpn)))) :
- "";
nmc_terminal_show_progress (str);
@@ -1388,6 +1769,35 @@ typedef struct {
NMDevice *device;
} ActivateConnectionInfo;
+static gboolean
+master_iface_slaves_check (gpointer user_data)
+{
+ ActivateConnectionInfo *info = (ActivateConnectionInfo *) user_data;
+ NmCli *nmc = info->nmc;
+ NMDevice *device = info->device;
+ const GPtrArray *slaves = NULL;
+
+ if (NM_IS_DEVICE_BOND (device))
+ slaves = nm_device_bond_get_slaves (NM_DEVICE_BOND (device));
+ else if (NM_IS_DEVICE_TEAM (device))
+ slaves = nm_device_team_get_slaves (NM_DEVICE_TEAM (device));
+ else if (NM_IS_DEVICE_BRIDGE (device))
+ slaves = nm_device_bridge_get_slaves (NM_DEVICE_BRIDGE (device));
+ else
+ g_warning ("%s: should not be reached.", __func__);
+
+ if (!slaves) {
+ g_string_printf (nmc->return_text,
+ _("Error: Device '%s' is waiting for slaves before proceeding with activation."),
+ nm_device_get_iface (device));
+ nmc->return_value = NMC_RESULT_ERROR_TIMEOUT_EXPIRED;
+ quit ();
+ }
+
+ g_free (info);
+ return FALSE;
+}
+
static void
activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *error, gpointer user_data)
{
@@ -1395,6 +1805,7 @@ activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *er
NmCli *nmc = info->nmc;
NMDevice *device = info->device;
NMActiveConnectionState state;
+ const GPtrArray *ac_devs;
if (error) {
g_string_printf (nmc->return_text, _("Error: Connection activation failed: %s"), error->message);
@@ -1402,18 +1813,23 @@ activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *er
quit ();
} else {
state = nm_active_connection_get_state (active);
+ if (!device) {
+ /* device could be NULL for virtual devices. Fill it here. */
+ ac_devs = nm_active_connection_get_devices (active);
+ info->device = device = ac_devs && ac_devs->len > 0 ? g_ptr_array_index (ac_devs, 0) : NULL;
+ }
if (nmc->nowait_flag || state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
/* User doesn't want to wait or already activated */
- if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED && nmc->print_output == NMC_PRINT_PRETTY) {
+ if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
printf (_("Connection successfully activated (D-Bus active path: %s)\n"),
nm_object_get_path (NM_OBJECT (active)));
}
quit ();
} else {
if (NM_IS_VPN_CONNECTION (active)) {
- VpnGetStateInfo *vpn_info;
-
/* Monitor VPN state */
g_signal_connect (G_OBJECT (active), "vpn-state-changed", G_CALLBACK (vpn_connection_state_cb), nmc);
@@ -1423,19 +1839,6 @@ activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *er
g_source_remove (progress_id);
progress_id = g_timeout_add (120, progress_vpn_cb, NM_VPN_CONNECTION (active));
}
-
- /* --- workaround BEGIN --- */
- /* There is a bug in libnm-glib or dbus-glib - 'vpn-state-changed' signal
- * is never issued. After inspection it appears that PropertiesChanged and
- * VpnStateChanged D-Bus signals are not processed, even if they are seen
- * on D-Bus (checked via dbus-monitor). Until the bug is identified and
- * fixed, we check the VPN state every second.
- */
- vpn_info = g_malloc0 (sizeof (VpnGetStateInfo));
- vpn_info->nmc = nmc;
- vpn_info->vpn = NM_VPN_CONNECTION (active);
- g_timeout_add_seconds (1, get_vpn_state_cb, vpn_info);
- /* --- workaround END --- */
} else {
g_signal_connect (active, "notify::state", G_CALLBACK (active_connection_state_cb), nmc);
@@ -1449,61 +1852,150 @@ activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *er
/* Start timer not to loop forever when signals are not emitted */
g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc);
+
+ /* Check for bond or team or bridge slaves */
+ if ( NM_IS_DEVICE_BOND (device)
+ || NM_IS_DEVICE_TEAM (device)
+ || NM_IS_DEVICE_BRIDGE (device)) {
+ g_timeout_add_seconds (SLAVES_UP_TIMEOUT, master_iface_slaves_check, info);
+ return; /* info will be freed in master_iface_slaves_check () */
+ }
}
}
g_free (info);
}
-static NMCResultCode
-do_connection_up (NmCli *nmc, int argc, char **argv)
+/* We were using nm_connection_get_virtual_iface_name() to determine whether the
+ * connection is virtual or not. But it did't work for VLANs without
+ * vlan.interface-name. nm_connection_get_virtual_iface_name() returns NULL for those.
+ * So we need to use our own implementation for now.
+ */
+static gboolean
+is_connection_virtual (NMConnection *connection)
+{
+ if ( nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
+ return TRUE;
+ if (nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ NMSettingInfiniband *s_infi = nm_connection_get_setting_infiniband (connection);
+ int p_key = nm_setting_infiniband_get_p_key (s_infi);
+ const char *parent = nm_setting_infiniband_get_parent (s_infi);
+
+ if (p_key != -1 && parent)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+nmc_activate_connection (NmCli *nmc,
+ NMConnection *connection,
+ const char *ifname,
+ const char *ap,
+ const char *nsp,
+ NMClientActivateFn callback,
+ GError **error)
{
ActivateConnectionInfo *info;
NMDevice *device = NULL;
const char *spec_object = NULL;
gboolean device_found;
+ GError *local = NULL;
+
+ g_return_val_if_fail (nmc != NULL, FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (connection) {
+ device_found = find_device_for_connection (nmc, connection, ifname, ap, nsp, &device, &spec_object, &local);
+
+ /* Virtual connection may not have their interfaces created yet */
+ if (!device_found && !is_connection_virtual (connection)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_CON_ACTIVATION,
+ "%s", local && local->message ? local->message : _("unknown error"));
+ g_clear_error (&local);
+ return FALSE;
+ }
+ } else if (ifname) {
+ device = nm_client_get_device_by_iface (nmc->client, ifname);
+ if (!device) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_NOT_FOUND,
+ _("unknown device '%s'."), ifname);
+ return FALSE;
+ }
+ } else {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_NOT_FOUND,
+ _("neither a valid connection nor device given"));
+ return FALSE;
+ }
+
+ info = g_malloc0 (sizeof (ActivateConnectionInfo));
+ info->nmc = nmc;
+ info->device = device;
+
+ nm_client_activate_connection (nmc->client,
+ connection,
+ device,
+ spec_object,
+ callback,
+ info);
+ return TRUE;
+}
+
+static NMCResultCode
+do_connection_up (NmCli *nmc, int argc, char **argv)
+{
NMConnection *connection = NULL;
- NMSettingConnection *s_con;
- const char *con_type;
- const char *iface = NULL;
+ const char *ifname = NULL;
const char *ap = NULL;
const char *nsp = NULL;
- gboolean id_specified = FALSE;
- gboolean wait = TRUE;
GError *error = NULL;
- gboolean is_virtual = FALSE;
+ const char *selector = NULL;
+ const char *name = NULL;
+ char *line = NULL;
- /* Set default timeout for connection activation. It can take quite a long time.
- * Using 90 seconds.
+ /*
+ * Set default timeout for connection activation.
+ * Activation can take quite a long time, use 90 seconds.
*/
- nmc->timeout = 90;
+ if (nmc->timeout == -1)
+ nmc->timeout = 90;
- while (argc > 0) {
- if (strcmp (*argv, "id") == 0 || strcmp (*argv, "uuid") == 0) {
- const char *selector = *argv;
- id_specified = TRUE;
+ if (argc == 0) {
+ if (nmc->ask) {
+ line = nmc_readline (PROMPT_CONNECTION);
+ name = line ? line : "";
+ }
+ } else if (strcmp (*argv, "ifname") != 0) {
+ if ( strcmp (*argv, "id") == 0
+ || strcmp (*argv, "uuid") == 0
+ || strcmp (*argv, "path") == 0) {
+ selector = *argv;
if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
+ g_string_printf (nmc->return_text, _("Error: %s argument is missing."), selector);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
+ name = *argv;
+ }
+ name = *argv;
+ next_arg (&argc, &argv);
+ }
- connection = find_connection (nmc->system_connections, selector, *argv);
+ if (name)
+ connection = nmc_find_connection (nmc->system_connections, selector, name, NULL);
- if (!connection) {
- g_string_printf (nmc->return_text, _("Error: Unknown connection: %s."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- goto error;
- }
- }
- else if (strcmp (*argv, "iface") == 0) {
+ while (argc > 0) {
+ if (strcmp (*argv, "ifname") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- iface = *argv;
+ ifname = *argv;
}
else if (strcmp (*argv, "ap") == 0) {
if (next_arg (&argc, &argv) != 0) {
@@ -1525,23 +2017,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
nsp = *argv;
}
#endif
- else if (strcmp (*argv, "--nowait") == 0) {
- wait = FALSE;
- } else if (strcmp (*argv, "--timeout") == 0) {
- if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
- }
-
- errno = 0;
- nmc->timeout = strtol (*argv, NULL, 10);
- if (errno || nmc->timeout < 0) {
- g_string_printf (nmc->return_text, _("Error: timeout value '%s' is not valid."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
- }
- } else {
+ else {
fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
}
@@ -1549,292 +2025,6591 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
argv++;
}
- if (!id_specified) {
- g_string_printf (nmc->return_text, _("Error: id or uuid has to be specified."));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ /* create NMClient */
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
goto error;
}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
+ /* Use nowait_flag instead of should_wait because exiting has to be postponed till
+ * active_connection_state_cb() is called. That gives NM time to check our permissions
+ * and we can follow activation progress.
+ */
+ nmc->nowait_flag = (nmc->timeout == 0);
+ nmc->should_wait = TRUE;
+
+ if (!nmc_activate_connection (nmc, connection, ifname, ap, nsp, activate_connection_cb, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."),
+ error ? error->message : _("unknown error"));
+ nmc->return_value = error ? error->code : NMC_RESULT_ERROR_CON_ACTIVATION;
+ g_clear_error (&error);
goto error;
}
+ /* Start progress indication */
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ progress_id = g_timeout_add (120, progress_cb, _("preparing"));
+
+ g_free (line);
+ return nmc->return_value;
+error:
+ nmc->should_wait = FALSE;
+ g_free (line);
+ return nmc->return_value;
+}
+
+static NMCResultCode
+do_connection_down (NmCli *nmc, int argc, char **argv)
+{
+ NMActiveConnection *active;
+ const GPtrArray *active_cons;
+ char *line = NULL;
+ char **arg_arr = NULL;
+ char **arg_ptr = argv;
+ int arg_num = argc;
+ int idx = 0;
+
+ if (argc == 0) {
+ if (nmc->ask) {
+ line = nmc_readline (PROMPT_CONNECTION);
+ nmc_string_to_arg_array (line, "", &arg_arr, &arg_num);
+ arg_ptr = arg_arr;
+ }
+ if (arg_num == 0) {
+ g_string_printf (nmc->return_text, _("Error: No connection specified."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ }
+
/* create NMClient */
nmc->get_client (nmc);
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ goto error;
+ }
+
+ /* Get active connections */
+ active_cons = nm_client_get_active_connections (nmc->client);
+ while (arg_num > 0) {
+ const char *selector = NULL;
+
+ if ( strcmp (*arg_ptr, "id") == 0
+ || strcmp (*arg_ptr, "uuid") == 0
+ || strcmp (*arg_ptr, "path") == 0
+ || strcmp (*arg_ptr, "apath") == 0) {
+
+ selector = *arg_ptr;
+ if (next_arg (&arg_num, &arg_ptr) != 0) {
+ g_string_printf (nmc->return_text, _("Error: %s argument is missing."), selector);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ }
+
+ active = find_active_connection (active_cons, nmc->system_connections, selector, *arg_ptr, &idx);
+ if (active) {
+ nm_client_deactivate_connection (nmc->client, active);
+ } else {
+ g_string_printf (nmc->return_text, _("Error: '%s' is not an active connection."), *arg_ptr);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto error;
+ }
+
+ if (idx == 0)
+ next_arg (&arg_num, &arg_ptr);
+ }
+
+ // FIXME: do something better then sleep()
+ /* Don't quit immediatelly and give NM time to check our permissions */
+ sleep (1);
+
+error:
+ nmc->should_wait = FALSE;
+ g_strfreev (arg_arr);
+ return nmc->return_value;
+}
+
+/*----------------------------------------------------------------------------*/
+
+typedef struct NameItem {
+ const char *name;
+ const char *alias;
+ const struct NameItem *settings;
+ gboolean mandatory;
+} NameItem;
+
+static const NameItem nmc_generic_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_ethernet_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
+ { NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_DCB_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_infiniband_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_INFINIBAND_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_wifi_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRELESS_SETTING_NAME, "wifi", NULL, TRUE },
+ { NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, "wifi-sec", NULL, FALSE },
+ { NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_wimax_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIMAX_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_gsm_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_GSM_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_cdma_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_CDMA_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_mobile_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_PPP_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_GSM_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_CDMA_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_bluetooth_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_BLUETOOTH_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_adsl_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_ADSL_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+/* PPPoE is a base connection type from historical reasons.
+ * See libnm-util/nm-setting.c:_nm_setting_is_base_type()
+ */
+static const NameItem nmc_pppoe_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
+ { NM_SETTING_PPPOE_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_PPP_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_olpc_mesh_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_OLPC_MESH_SETTING_NAME, "olpc-mesh", NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_vpn_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_VPN_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_vlan_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
+ { NM_SETTING_VLAN_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_bond_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_BOND_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_team_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_TEAM_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_bridge_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_BRIDGE_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_bond_slave_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
+ { NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_team_slave_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
+ { NM_SETTING_TEAM_PORT_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+static const NameItem nmc_bridge_slave_settings [] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_BRIDGE_PORT_SETTING_NAME, NULL, NULL, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
+ { NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
+ { NULL, NULL, NULL, FALSE }
+};
+
+
+/* Available connection types */
+static const NameItem nmc_valid_connection_types[] = {
+ { NM_SETTING_GENERIC_SETTING_NAME, NULL, nmc_generic_settings },
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet", nmc_ethernet_settings },
+ { NM_SETTING_PPPOE_SETTING_NAME, NULL, nmc_pppoe_settings },
+ { NM_SETTING_WIRELESS_SETTING_NAME, "wifi", nmc_wifi_settings },
+ { NM_SETTING_WIMAX_SETTING_NAME, NULL, nmc_wimax_settings },
+ { NM_SETTING_GSM_SETTING_NAME, NULL, nmc_gsm_settings },
+ { NM_SETTING_CDMA_SETTING_NAME, NULL, nmc_cdma_settings },
+ { NM_SETTING_INFINIBAND_SETTING_NAME, NULL, nmc_infiniband_settings },
+ { NM_SETTING_ADSL_SETTING_NAME, NULL, nmc_adsl_settings },
+ { NM_SETTING_BLUETOOTH_SETTING_NAME, NULL, nmc_bluetooth_settings },
+ { NM_SETTING_VPN_SETTING_NAME, NULL, nmc_vpn_settings },
+ { NM_SETTING_OLPC_MESH_SETTING_NAME, "olpc-mesh", nmc_olpc_mesh_settings },
+ { NM_SETTING_VLAN_SETTING_NAME, NULL, nmc_vlan_settings },
+ { NM_SETTING_BOND_SETTING_NAME, NULL, nmc_bond_settings },
+ { NM_SETTING_TEAM_SETTING_NAME, NULL, nmc_team_settings },
+ { NM_SETTING_BRIDGE_SETTING_NAME, NULL, nmc_bridge_settings },
+ { "bond-slave", NULL, nmc_bond_slave_settings },
+ { "team-slave", NULL, nmc_team_slave_settings },
+ { "bridge-slave", NULL, nmc_bridge_slave_settings },
+ { NULL, NULL, NULL }
+};
+
+/*
+ * Return an alias for the 'name' if exists, else return the 'name'.
+ * The returned string must not be freed.
+ */
+static const char *
+get_name_alias (const char *name, const NameItem array[])
+{
+ const NameItem *iter = &array[0];
+
+ if (!name)
+ return NULL;
+
+ while (iter && iter->name) {
+ if (!strcmp (name, iter->name)) {
+ if (iter->alias)
+ return iter->alias;
+ else
+ return iter->name;
+ }
+ iter++;
+ }
+ return name;
+}
+
+/*
+ * Construct a string with names and aliases from the array formatted as:
+ * "name (alias), name, name (alias), name, name"
+ *
+ * Returns: string; the caller is responsible for freeing it.
+ */
+static char *
+get_valid_options_string (const NameItem array[])
+{
+ const NameItem *iter = &array[0];
+ GString *str;
+
+ str = g_string_sized_new (150);
+ while (iter && iter->name) {
+ if (str->len)
+ g_string_append (str, ", ");
+ if (iter->alias)
+ g_string_append_printf (str, "%s (%s)", iter->name, iter->alias);
+ else
+ g_string_append (str, iter->name);
+ iter++;
+ }
+ return g_string_free (str, FALSE);
+}
+
+/*
+ * Check if 'val' is valid string in either array->name or array->alias.
+ * It accepts shorter string provided they are not ambiguous.
+ * 'val' == NULL doesn't hurt.
+ *
+ * Returns: pointer to array->name string or NULL on failure.
+ * The returned string must not be freed.
+ */
+static const char *
+check_valid_name (const char *val, const NameItem array[], GError **error)
+{
+ const NameItem *iter;
+ GPtrArray *tmp_arr;
+ const char *str;
+ GError *tmp_err = NULL;
+
+ /* Create a temporary array that can be used in nmc_string_is_valid() */
+ tmp_arr = g_ptr_array_sized_new (30);
+ iter = &array[0];
+ while (iter && iter->name) {
+ g_ptr_array_add (tmp_arr, (gpointer) iter->name);
+ if (iter->alias)
+ g_ptr_array_add (tmp_arr, (gpointer) iter->alias);
+ iter++;
+ }
+ g_ptr_array_add (tmp_arr, (gpointer) NULL);
+
+ /* Check string validity */
+ str = nmc_string_is_valid (val, (const char **) tmp_arr->pdata, &tmp_err);
+ if (!str) {
+ if (tmp_err->code == 1)
+ g_propagate_error (error, tmp_err);
+ else {
+ /* We want to handle aliases, so construct own error message */
+ char *err_str = get_valid_options_string (array);
+ g_set_error (error, 1, 0, _("'%s' not among [%s]"),
+ val ? val : "", err_str);
+ g_free (err_str);
+ g_clear_error (&tmp_err);
+ }
+ g_ptr_array_free (tmp_arr, TRUE);
+ return NULL;
+ }
+
+ /* Return a pointer to the found string in passed 'array' */
+ iter = &array[0];
+ while (iter && iter->name) {
+ if ( (iter->name && g_strcmp0 (iter->name, str) == 0)
+ || (iter->alias && g_strcmp0 (iter->alias, str) == 0)) {
+ g_ptr_array_free (tmp_arr, TRUE);
+ return iter->name;
+ }
+ iter++;
+ }
+ /* We should not really come here */
+ g_ptr_array_free (tmp_arr, TRUE);
+ g_set_error (error, 1, 0, _("Unknown error"));
+ return NULL;
+}
+
+static const NameItem *
+get_valid_settings_array (const char *con_type)
+{
+ guint i, num;
+
+ if (!con_type)
+ return NULL;
+
+ num = G_N_ELEMENTS (nmc_valid_connection_types);
+ for (i = 0; i < num; i++) {
+ if (!g_strcmp0 (con_type, nmc_valid_connection_types[i].name))
+ return nmc_valid_connection_types[i].settings;
+ }
+ return NULL;
+}
+
+static gboolean
+is_setting_mandatory (NMConnection *connection, NMSetting *setting)
+{
+ NMSettingConnection *s_con;
+ const char *c_type;
+ const NameItem *item;
+ const char *name;
+
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
- con_type = nm_setting_connection_get_connection_type (s_con);
+ c_type = nm_setting_connection_get_connection_type (s_con);
- if ( nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)
- || nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)
- || nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
- is_virtual = TRUE;
+ name = nm_setting_get_name (setting);
+
+ item = get_valid_settings_array (c_type);
+ while (item && item->name) {
+ if (!strcmp (name, item->name))
+ return item->mandatory;
+ item++;
+ }
+ return FALSE;
+}
+
+/*----------------------------------------------------------------------------*/
+
+static gboolean
+check_and_convert_mac (const char *mac,
+ GByteArray **mac_array,
+ int type,
+ const char *keyword,
+ GError **error)
+{
+ GByteArray *local_mac_array = NULL;
+ g_return_val_if_fail (mac_array == NULL || *mac_array == NULL, FALSE);
+
+ if (!mac)
+ return TRUE;
+
+ local_mac_array = nm_utils_hwaddr_atoba (mac, type);
+ if (!local_mac_array) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: '%s': '%s' is not a valid %s MAC address."),
+ keyword, mac, type == ARPHRD_INFINIBAND ? _("InfiniBand") : _("Ethernet"));
+ return FALSE;
+ }
+
+ if (mac_array)
+ *mac_array = local_mac_array;
+ else
+ if (local_mac_array)
+ g_byte_array_free (local_mac_array, TRUE);
+
+ return TRUE;
+}
+
+static gboolean
+check_and_convert_mtu (const char *mtu, guint32 *mtu_int, GError **error)
+{
+ unsigned long local_mtu_int;
+
+ if (!mtu)
+ return TRUE;
+
+ if (!nmc_string_to_uint (mtu, TRUE, 0, G_MAXUINT32, &local_mtu_int)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'mtu': '%s' is not a valid MTU."), mtu);
+ return FALSE;
+ }
+ if (mtu_int)
+ *mtu_int = (guint32) local_mtu_int;
+ return TRUE;
+}
+
+static gboolean
+check_infiniband_parent (const char *parent, GError **error)
+{
+ if (!parent)
+ return TRUE;
+
+ if (!nm_utils_iface_valid_name (parent)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'parent': '%s' is not a valid interface name."), parent);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+static gboolean
+check_infiniband_p_key (const char *p_key, guint32 *p_key_int, GError **error)
+{
+ unsigned long local_p_key_int;
+ gboolean p_key_valid = FALSE;
+ if (!p_key)
+ return TRUE;
+
+ if (!strncmp (p_key, "0x", 2))
+ p_key_valid = nmc_string_to_uint_base (p_key + 2, 16, TRUE, 0, G_MAXUINT16, &local_p_key_int);
+ else
+ p_key_valid = nmc_string_to_uint (p_key, TRUE, 0, G_MAXUINT16, &local_p_key_int);
+ if (!p_key_valid) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."), p_key);
+ return FALSE;
+ }
+ if (p_key_int)
+ *p_key_int = (guint32) local_p_key_int;
+ return TRUE;
+}
+
+/* Checks InfiniBand mode.
+ * It accepts shortcuts and normalizes them ('mode' argument is modified on success).
+ */
+static gboolean
+check_infiniband_mode (char **mode, GError **error)
+{
+ char *tmp;
+ const char *checked_mode;
+ const char *modes[] = { "datagram", "connected", NULL };
+
+ if (!mode || !*mode)
+ return TRUE;
+
+ tmp = g_strstrip (g_strdup (*mode));
+ checked_mode = nmc_string_is_valid (tmp, modes, NULL);
+ g_free (tmp);
+ if (checked_mode) {
+ g_free (*mode);
+ *mode = g_strdup (checked_mode);
+ } else
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, connected]."), *mode);
+ return !!checked_mode;
+}
+
+static gboolean
+check_and_convert_vlan_flags (const char *flags, guint32 *flags_int, GError **error)
+{
+ unsigned long local_flags_int;
+
+ if (!flags)
+ return TRUE;
+
+ if (!nmc_string_to_uint (flags, TRUE, 0, 7, &local_flags_int)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'flags': '%s' is not valid; use <0-7>."), flags);
+ return FALSE;
+ }
+ if (flags_int)
+ *flags_int = (guint32) local_flags_int;
+ return TRUE;
+}
+
+static gboolean
+check_and_convert_vlan_prio_maps (const char *prio_map,
+ NMVlanPriorityMap type,
+ char ***prio_map_arr,
+ GError **error)
+{
+ char **local_prio_map_arr;
+ GError *local_err = NULL;
+
+ if (!prio_map)
+ return TRUE;
+
+ if (!(local_prio_map_arr = nmc_vlan_parse_priority_maps (prio_map, type, &local_err))) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: '%s': '%s' is not valid; %s "),
+ type == NM_VLAN_INGRESS_MAP ? "ingress" : "egress",
+ prio_map, local_err->message);
+ return FALSE;
+ }
+
+ if (prio_map_arr)
+ *prio_map_arr = local_prio_map_arr;
+ return TRUE;
+}
+
+static gboolean
+add_ip4_address_to_connection (NMIP4Address *ip4addr, NMConnection *connection)
+{
+ NMSettingIP4Config *s_ip4;
+ gboolean ret;
+
+ if (!ip4addr)
+ return TRUE;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (!s_ip4) {
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+ g_object_set (s_ip4,
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NULL);
+ }
+ ret = nm_setting_ip4_config_add_address (s_ip4, ip4addr);
+ nm_ip4_address_unref (ip4addr);
+
+ return ret;
+}
+
+static gboolean
+add_ip6_address_to_connection (NMIP6Address *ip6addr, NMConnection *connection)
+{
+ NMSettingIP6Config *s_ip6;
+ gboolean ret;
+
+ if (!ip6addr)
+ return TRUE;
+
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ if (!s_ip6) {
+ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+ g_object_set (s_ip6,
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NULL);
+ }
+ ret = nm_setting_ip6_config_add_address (s_ip6, ip6addr);
+ nm_ip6_address_unref (ip6addr);
+
+ return ret;
+}
+
+static char *
+unique_master_iface_ifname (GSList *list,
+ const char *type,
+ const char *ifname_property,
+ const char *try_name)
+{
+ NMConnection *connection;
+ NMSetting *setting;
+ char *new_name;
+ unsigned int num = 1;
+ GSList *iterator = list;
+ char *ifname_val = NULL;
+
+ new_name = g_strdup (try_name);
+ while (iterator) {
+ connection = NM_CONNECTION (iterator->data);
+ setting = nm_connection_get_setting_by_name (connection, type);
+ if (!setting) {
+ iterator = g_slist_next (iterator);
+ continue;
+ }
+
+ g_object_get (setting, ifname_property, &ifname_val, NULL);
+ if (g_strcmp0 (new_name, ifname_val) == 0) {
+ g_free (new_name);
+ new_name = g_strdup_printf ("%s%d", try_name, num++);
+ iterator = list;
+ } else
+ iterator = g_slist_next (iterator);
+ g_free (ifname_val);
+ }
+ return new_name;
+}
+
+static const char *
+_strip_master_prefix (const char *master, const char *(**func)(NMConnection *))
+{
+ if (!master)
+ return NULL;
+
+ if (g_str_has_prefix (master, "ifname/")) {
+ master = master + strlen ("ifname/");
+ if (func)
+ *func = nm_connection_get_virtual_iface_name;
+ } else if (g_str_has_prefix (master, "uuid/")) {
+ master = master + strlen ("uuid/");
+ if (func)
+ *func = nm_connection_get_uuid;
+ } else if (g_str_has_prefix (master, "id/")) {
+ master = master + strlen ("id/");
+ if (func)
+ *func = nm_connection_get_id;
+ }
+ return master;
+}
+
+/* verify_master_for_slave:
+ * @connections: list af all connections
+ * @master: UUID, ifname or ID of the master connection
+ * @type: virtual connection type (bond, team, bridge, ...)
+ *
+ * Check whether master is a valid interface name, UUID or ID of some @type connection.
+ * First UUID and ifname are checked. If they don't match, ID is checked
+ * and replaced by UUID on a match.
+ *
+ * Returns: identifier of master connection if found, %NULL otherwise
+ */
+static const char *
+verify_master_for_slave (GSList *connections,
+ const char *master,
+ const char *type)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ const char *con_type, *id, *uuid, *ifname;
+ GSList *iterator = connections;
+ const char *found_by_id = NULL;
+ const char *out_master = NULL;
+ const char *(*func) (NMConnection *) = NULL;
+
+ if (!master)
+ return NULL;
+
+ master = _strip_master_prefix (master, &func);
+ while (iterator) {
+ connection = NM_CONNECTION (iterator->data);
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ con_type = nm_setting_connection_get_connection_type (s_con);
+ if (g_strcmp0 (con_type, type) != 0) {
+ iterator = g_slist_next (iterator);
+ continue;
+ }
+ if (func) {
+ /* There was a prefix; only compare to that type. */
+ if (g_strcmp0 (master, func (connection)) == 0) {
+ if (func == nm_connection_get_id)
+ out_master = nm_connection_get_uuid (connection);
+ else
+ out_master = master;
+ break;
+ }
+ } else {
+ id = nm_connection_get_id (connection);
+ uuid = nm_connection_get_uuid (connection);
+ ifname = nm_connection_get_virtual_iface_name (connection);
+ if ( g_strcmp0 (master, uuid) == 0
+ || g_strcmp0 (master, ifname) == 0) {
+ out_master = master;
+ break;
+ }
+ if (!found_by_id && g_strcmp0 (master, id) == 0)
+ found_by_id = uuid;
+ }
+
+ iterator = g_slist_next (iterator);
+ }
+ return out_master ? out_master : found_by_id;
+}
+
+static gboolean
+bridge_prop_string_to_uint (const char *str,
+ const char *nmc_arg,
+ GType bridge_type,
+ const char *propname,
+ unsigned long *out_val,
+ GError **error)
+{
+ GParamSpecUInt *pspec;
+
+ pspec = (GParamSpecUInt *) g_object_class_find_property (g_type_class_peek (bridge_type),
+ propname);
+ g_assert (G_IS_PARAM_SPEC_UINT (pspec));
+
+ if (!nmc_string_to_uint (str, TRUE, pspec->minimum, pspec->maximum, out_val)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: '%s': '%s' is not valid; use <%u-%u>."),
+ nmc_arg, str, pspec->minimum, pspec->maximum);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#define WORD_YES "yes"
+#define WORD_NO "no"
+#define WORD_LOC_YES _("yes")
+#define WORD_LOC_NO _("no")
+static const char *
+prompt_yes_no (gboolean default_yes, char *delim)
+{
+ static char prompt[128] = { 0 };
+
+ if (!delim)
+ delim = "";
+
+ snprintf (prompt, sizeof (prompt), "(%s/%s) [%s]%s ",
+ WORD_LOC_YES, WORD_LOC_NO,
+ default_yes ? WORD_LOC_YES : WORD_LOC_NO, delim);
+
+ return prompt;
+}
+
+static gboolean
+normalize_yes_no (char **yes_no)
+{
+ char *tmp;
+ const char *checked_yes_no;
+ const char *strv[] = { WORD_LOC_YES, WORD_LOC_NO, NULL };
+
+ if (!yes_no || !*yes_no)
+ return FALSE;
+
+ tmp = g_strstrip (g_strdup (*yes_no));
+ checked_yes_no = nmc_string_is_valid (tmp, strv, NULL);
+ g_free (tmp);
+ if (g_strcmp0 (checked_yes_no, WORD_LOC_YES) == 0) {
+ g_free (*yes_no);
+ *yes_no = g_strdup (WORD_YES);
+ } else if (g_strcmp0 (checked_yes_no, WORD_LOC_NO) == 0) {
+ g_free (*yes_no);
+ *yes_no = g_strdup (WORD_NO);
+ }
+ return !!checked_yes_no;
+}
+
+static gboolean
+want_provide_opt_args (const char *type, int num)
+{
+ char *answer;
+ gboolean ret = TRUE;
+
+ /* Ask for optional arguments. */
+ printf (ngettext ("There is %d optional argument for '%s' connection type.\n",
+ "There are %d optional arguments for '%s' connection type.\n", num),
+ num, type);
+ answer = nmc_readline (ngettext ("Do you want to provide it? %s",
+ "Do you want to provide them? %s", num),
+ prompt_yes_no (TRUE, NULL));
+ answer = answer ? g_strstrip (answer) : NULL;
+ if (answer && matches (answer, WORD_LOC_YES) != 0)
+ ret = FALSE;
+ g_free (answer);
+ return ret;
+}
+
+static void
+do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **cloned_mac)
+{
+ gboolean once_more;
+ GError *error = NULL;
+ const char *type = ethernet ? _("ethernet") : _("Wi-Fi");
+
+ /* Ask for optional arguments */
+ if (!want_provide_opt_args (type, 3))
+ return;
+
+ if (!*mtu) {
+ do {
+ *mtu = nmc_readline (_("MTU [auto]: "));
+ once_more = !check_and_convert_mtu (*mtu, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mtu);
+ }
+ } while (once_more);
+ }
+ if (!*mac) {
+ do {
+ *mac = nmc_readline (_("MAC [none]: "));
+ once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mac);
+ }
+ } while (once_more);
+ }
+ if (!*cloned_mac) {
+ do {
+ *cloned_mac = nmc_readline (_("Cloned MAC [none]: "));
+ once_more = !check_and_convert_mac (*cloned_mac, NULL, ARPHRD_ETHER, "cloned-mac", &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*cloned_mac);
+ }
+ } while (once_more);
+ }
+}
+
+#define WORD_DATAGRAM "datagram"
+#define WORD_CONNECTED "connected"
+#define PROMPT_IB_MODE "(" WORD_DATAGRAM "/" WORD_CONNECTED ") [" WORD_DATAGRAM "]: "
+static void
+do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent, char **p_key)
+{
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional arguments */
+ if (!want_provide_opt_args (_("InfiniBand"), 5))
+ return;
+
+ if (!*mtu) {
+ do {
+ *mtu = nmc_readline (_("MTU [auto]: "));
+ once_more = !check_and_convert_mtu (*mtu, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mtu);
+ }
+ } while (once_more);
+ }
+ if (!*mac) {
+ do {
+ *mac = nmc_readline (_("MAC [none]: "));
+ once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_INFINIBAND, "mac", &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mac);
+ }
+ } while (once_more);
+ }
+ if (!*mode) {
+ do {
+ *mode = nmc_readline (_("Transport mode %s"), PROMPT_IB_MODE);
+ if (!*mode)
+ *mode = g_strdup ("datagram");
+ once_more = !check_infiniband_mode (mode, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mode);
+ }
+ } while (once_more);
+ }
+ if (!*parent) {
+ do {
+ *parent = nmc_readline (_("Parent interface [none]: "));
+ once_more = !check_infiniband_parent (*parent, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*parent);
+ }
+ } while (once_more);
+ }
+ if (!*p_key) {
+ do {
+ *p_key = nmc_readline (_("P_KEY [none]: "));
+ once_more = !check_infiniband_p_key (*p_key, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*p_key);
+ }
+ /* If parent is specified, so has to be P_KEY */
+ if (!once_more && *parent && !*p_key) {
+ once_more = TRUE;
+ printf (_("Error: 'p-key' is mandatory when 'parent' is specified.\n"));
+ }
+ } while (once_more);
+ }
+}
+
+static void
+do_questionnaire_wifi (char **mtu, char **mac, char **cloned_mac)
+{
+ /* At present, the optional Wi-Fi arguments are the same as for ethernet. */
+ return do_questionnaire_ethernet (FALSE, mtu, mac, cloned_mac);
+}
+
+static void
+do_questionnaire_wimax (char **mac)
+{
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional 'wimax' arguments. */
+ if (!want_provide_opt_args (_("WiMAX"), 1))
+ return;
+
+ if (!*mac) {
+ do {
+ *mac = nmc_readline (_("MAC [none]: "));
+ once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mac);
+ }
+ } while (once_more);
+ }
+}
+
+static void
+do_questionnaire_pppoe (char **password, char **service, char **mtu, char **mac)
+{
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional 'pppoe' arguments. */
+ if (!want_provide_opt_args (_("PPPoE"), 4))
+ return;
+
+ if (!*password)
+ *password = nmc_readline (_("Password [none]: "));
+ if (!*service)
+ *service = nmc_readline (_("Service [none]: "));
+
+ if (!*mtu) {
+ do {
+ *mtu = nmc_readline (_("MTU [auto]: "));
+ once_more = !check_and_convert_mtu (*mtu, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mtu);
+ }
+ } while (once_more);
+ }
+ if (!*mac) {
+ do {
+ *mac = nmc_readline (_("MAC [none]: "));
+ once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mac);
+ }
+ } while (once_more);
+ }
+}
+
+static void
+do_questionnaire_mobile (char **user, char **password)
+{
+ /* Ask for optional 'gsm' or 'cdma' arguments. */
+ if (!want_provide_opt_args (_("mobile broadband"), 2))
+ return;
+
+ if (!*user)
+ *user = nmc_readline (_("Username [none]: "));
+ if (!*password)
+ *password = nmc_readline (_("Password [none]: "));
+}
+
+#define WORD_PANU "panu"
+#define WORD_DUN_GSM "dun-gsm"
+#define WORD_DUN_CDMA "dun-cdma"
+#define PROMPT_BT_TYPE "(" WORD_PANU "/" WORD_DUN_GSM "/" WORD_DUN_CDMA ") [" WORD_PANU "]: "
+static void
+do_questionnaire_bluetooth (char **bt_type)
+{
+ gboolean once_more;
+
+ /* Ask for optional 'bluetooth' arguments. */
+ if (!want_provide_opt_args (_("bluetooth"), 1))
+ return;
+
+ if (!*bt_type) {
+ const char *types[] = { "dun", "dun-gsm", "dun-cdma", "panu", NULL };
+ const char *tmp;
+ do {
+ *bt_type = nmc_readline (_("Bluetooth type %s"), PROMPT_BT_TYPE);
+ if (!*bt_type)
+ *bt_type = g_strdup ("panu");
+ tmp = nmc_string_is_valid (*bt_type, types, NULL);
+ once_more = !tmp;
+ if (once_more) {
+ printf (_("Error: 'bt-type': '%s' is not a valid bluetooth type.\n"), *bt_type);
+ g_free (*bt_type);
+ }
+ } while (once_more);
+ g_free (*bt_type);
+ *bt_type = g_strdup (tmp);
+ }
+}
+
+static void
+do_questionnaire_vlan (char **mtu, char **flags, char **ingress, char **egress)
+{
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional 'vlan' arguments. */
+ if (!want_provide_opt_args (_("VLAN"), 4))
+ return;
+
+ if (!*mtu) {
+ do {
+ *mtu = nmc_readline (_("MTU [auto]: "));
+ once_more = !check_and_convert_mtu (*mtu, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mtu);
+ }
+ } while (once_more);
+ }
+ if (!*flags) {
+ do {
+ *flags = nmc_readline (_("VLAN flags (<0-7>) [none]: "));
+ once_more = !check_and_convert_vlan_flags (*flags, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*flags);
+ }
+ } while (once_more);
+ }
+ if (!*ingress) {
+ do {
+ *ingress = nmc_readline (_("Ingress priority maps [none]: "));
+ once_more = !check_and_convert_vlan_prio_maps (*ingress, NM_VLAN_INGRESS_MAP, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*ingress);
+ }
+ } while (once_more);
+ }
+ if (!*egress) {
+ do {
+ *egress = nmc_readline (_("Egress priority maps [none]: "));
+ once_more = !check_and_convert_vlan_prio_maps (*egress, NM_VLAN_EGRESS_MAP, NULL, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*egress);
+ }
+ } while (once_more);
+ }
+}
+
+#define PROMPT_BOND_MODE _("Bonding mode [balance-rr]: ")
+#define WORD_MIIMON "miimon"
+#define WORD_ARP "arp"
+#define PROMPT_BOND_MON_MODE "(" WORD_MIIMON "/" WORD_ARP ") [" WORD_MIIMON "]: "
+static void
+do_questionnaire_bond (char **mode, char **primary, char **miimon,
+ char **downdelay, char **updelay,
+ char **arpinterval, char **arpiptarget)
+{
+ char *monitor_mode;
+ unsigned long tmp;
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional 'bond' arguments. */
+ if (!want_provide_opt_args (_("bond"), 7))
+ return;
+
+ if (!*mode) {
+ const char *mode_tmp;
+ do {
+ *mode = nmc_readline (PROMPT_BOND_MODE);
+ if (!*mode)
+ *mode = g_strdup ("balance-rr");
+ mode_tmp = nmc_bond_validate_mode (*mode, &error);
+ g_free (*mode);
+ if (mode_tmp) {
+ *mode = g_strdup (mode_tmp);
+ } else {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ }
+ } while (!mode_tmp);
+ }
+
+ if (g_strcmp0 (*mode, "active-backup") == 0 && !*primary) {
+ do {
+ *primary = nmc_readline (_("Bonding primary interface [none]: "));
+ once_more = *primary && !nm_utils_iface_valid_name (*primary);
+ if (once_more) {
+ printf (_("Error: 'primary': '%s' is not a valid interface name.\n"),
+ *primary);
+ g_free (*primary);
+ }
+ } while (once_more);
+ }
+
+ do {
+ monitor_mode = nmc_readline (_("Bonding monitoring mode %s"), PROMPT_BOND_MON_MODE);
+ if (!monitor_mode)
+ monitor_mode = g_strdup (WORD_MIIMON);
+ g_strstrip (monitor_mode);
+ once_more = matches (monitor_mode, WORD_MIIMON) != 0 && matches (monitor_mode, WORD_ARP) != 0;
+ if (once_more) {
+ printf (_("Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"),
+ monitor_mode, WORD_MIIMON, WORD_ARP);
+ g_free (monitor_mode);
+ }
+ } while (once_more);
+
+ if (matches (monitor_mode, WORD_MIIMON) == 0) {
+ if (!*miimon) {
+ do {
+ *miimon = nmc_readline (_("Bonding miimon [100]: "));
+ once_more = *miimon && !nmc_string_to_uint (*miimon, TRUE, 0, G_MAXUINT32, &tmp);
+ if (once_more) {
+ printf (_("Error: 'miimon': '%s' is not a valid number <0-%u>.\n"),
+ *miimon, G_MAXUINT32);
+ g_free (*miimon);
+ }
+ } while (once_more);
+ }
+ if (!*downdelay) {
+ do {
+ *downdelay = nmc_readline (_("Bonding downdelay [0]: "));
+ once_more = *downdelay && !nmc_string_to_uint (*downdelay, TRUE, 0, G_MAXUINT32, &tmp);
+ if (once_more) {
+ printf (_("Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"),
+ *downdelay, G_MAXUINT32);
+ g_free (*downdelay);
+ }
+ } while (once_more);
+ }
+ if (!*updelay) {
+ do {
+ *updelay = nmc_readline (_("Bonding updelay [0]: "));
+ once_more = *updelay && !nmc_string_to_uint (*updelay, TRUE, 0, G_MAXUINT32, &tmp);
+ if (once_more) {
+ printf (_("Error: 'updelay': '%s' is not a valid number <0-%u>.\n"),
+ *updelay, G_MAXUINT32);
+ g_free (*updelay);
+ }
+ } while (once_more);
+ }
+ } else {
+ if (!*arpinterval) {
+ do {
+ *arpinterval = nmc_readline (_("Bonding arp-interval [0]: "));
+ once_more = *arpinterval && !nmc_string_to_uint (*arpinterval, TRUE, 0, G_MAXUINT32, &tmp);
+ if (once_more) {
+ printf (_("Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"),
+ *arpinterval, G_MAXUINT32);
+ g_free (*arpinterval);
+ }
+ } while (once_more);
+ }
+ if (!*arpiptarget) {
+ //FIXME: verify the string
+ *arpiptarget = nmc_readline (_("Bonding arp-ip-target [none]: "));
+ }
+ }
+
+ g_free (monitor_mode);
+}
+
+static void
+do_questionnaire_team_common (const char *type_name, char **config)
+{
+ gboolean once_more;
+ char *json = NULL;
+ GError *error = NULL;
+
+ /* Ask for optional arguments. */
+ if (!want_provide_opt_args (type_name, 1))
+ return;
+
+ if (!*config) {
+ do {
+ *config = nmc_readline (_("Team JSON configuration [none]: "));
+ once_more = !nmc_team_check_config (*config, &json, &error);
+ if (once_more) {
+ printf ("Error: %s\n", error->message);
+ g_clear_error (&error);
+ g_free (*config);
+ }
+ } while (once_more);
+ }
+
+ *config = json;
+}
+
+/* Both team and team-slave curently have just ithe same one optional argument */
+static void
+do_questionnaire_team (char **config)
+{
+ do_questionnaire_team_common (_("team"), config);
+}
+
+static void
+do_questionnaire_team_slave (char **config)
+{
+ do_questionnaire_team_common (_("team-slave"), config);
+}
+
+static void
+do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **hello_time,
+ char **max_age, char **ageing_time, char **mac)
+{
+ unsigned long tmp;
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional 'bridge' arguments. */
+ if (!want_provide_opt_args (_("bridge"), 7))
+ return;
+
+ if (!*stp) {
+ gboolean stp_bool;
+ do {
+ *stp = nmc_readline (_("Enable STP %s"), prompt_yes_no (TRUE, ":"));
+ *stp = *stp ? *stp : g_strdup ("yes");
+ normalize_yes_no (stp);
+ once_more = !nmc_string_to_bool (*stp, &stp_bool, &error);
+ if (once_more) {
+ printf (_("Error: 'stp': %s.\n"), error->message);
+ g_clear_error (&error);
+ g_free (*stp);
+ }
+ } while (once_more);
+ }
+ if (!*priority) {
+ do {
+ *priority = nmc_readline (_("STP priority [32768]: "));
+ *priority = *priority ? *priority : g_strdup ("32768");
+ once_more = !nmc_string_to_uint (*priority, TRUE, 0, G_MAXUINT16, &tmp);
+ if (once_more) {
+ printf (_("Error: 'priority': '%s' is not a valid number <0-%d>.\n"),
+ *priority, G_MAXUINT16);
+ g_free (*priority);
+ }
+ } while (once_more);
+ }
+ if (!*fwd_delay) {
+ do {
+ *fwd_delay = nmc_readline (_("Forward delay [15]: "));
+ *fwd_delay = *fwd_delay ? *fwd_delay : g_strdup ("15");
+ once_more = !nmc_string_to_uint (*fwd_delay, TRUE, 2, 30, &tmp);
+ if (once_more) {
+ printf (_("Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"),
+ *fwd_delay);
+ g_free (*fwd_delay);
+ }
+ } while (once_more);
+ }
+
+ if (!*hello_time) {
+ do {
+ *hello_time = nmc_readline (_("Hello time [2]: "));
+ *hello_time = *hello_time ? *hello_time : g_strdup ("2");
+ once_more = !nmc_string_to_uint (*hello_time, TRUE, 1, 10, &tmp);
+ if (once_more) {
+ printf (_("Error: 'hello-time': '%s' is not a valid number <1-10>.\n"),
+ *hello_time);
+ g_free (*hello_time);
+ }
+ } while (once_more);
+ }
+ if (!*max_age) {
+ do {
+ *max_age = nmc_readline (_("Max age [20]: "));
+ *max_age = *max_age ? *max_age : g_strdup ("20");
+ once_more = !nmc_string_to_uint (*max_age, TRUE, 6, 40, &tmp);
+ if (once_more) {
+ printf (_("Error: 'max-age': '%s' is not a valid number <6-40>.\n"),
+ *max_age);
+ g_free (*max_age);
+ }
+ } while (once_more);
+ }
+ if (!*ageing_time) {
+ do {
+ *ageing_time = nmc_readline (_("MAC address ageing time [300]: "));
+ *ageing_time = *ageing_time ? *ageing_time : g_strdup ("300");
+ once_more = !nmc_string_to_uint (*ageing_time, TRUE, 0, 1000000, &tmp);
+ if (once_more) {
+ printf (_("Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"),
+ *ageing_time);
+ g_free (*ageing_time);
+ }
+ } while (once_more);
+ }
+ if (!*mac) {
+ do {
+ *mac = nmc_get_user_input (_("MAC [none]: "));
+ once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mac);
+ }
+ } while (once_more);
+ }
+}
+
+static void
+do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin)
+{
+ unsigned long tmp;
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional 'bridge-slave' arguments. */
+ if (!want_provide_opt_args (_("bridge-slave"), 3))
+ return;
+
+ if (!*priority) {
+ do {
+ *priority = nmc_readline (_("Bridge port priority [32]: "));
+ *priority = *priority ? *priority : g_strdup ("32");
+ once_more = !bridge_prop_string_to_uint (*priority, "priority", NM_TYPE_SETTING_BRIDGE_PORT,
+ NM_SETTING_BRIDGE_PORT_PRIORITY, &tmp, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*priority);
+ }
+ } while (once_more);
+ }
+ if (!*path_cost) {
+ do {
+ *path_cost = nmc_readline (_("Bridge port STP path cost [100]: "));
+ *path_cost = *path_cost ? *path_cost : g_strdup ("100");
+ once_more = !bridge_prop_string_to_uint (*path_cost, "path-cost", NM_TYPE_SETTING_BRIDGE_PORT,
+ NM_SETTING_BRIDGE_PORT_PATH_COST, &tmp, &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*path_cost);
+ }
+ } while (once_more);
+ }
+ if (!*hairpin) {
+ gboolean hairpin_bool;
+ do {
+ *hairpin = nmc_readline (_("Hairpin %s"), prompt_yes_no (TRUE, ":"));
+ *hairpin = *hairpin ? *hairpin : g_strdup ("yes");
+ normalize_yes_no (hairpin);
+ once_more = !nmc_string_to_bool (*hairpin, &hairpin_bool, &error);
+ if (once_more) {
+ printf (_("Error: 'hairpin': %s.\n"), error->message);
+ g_clear_error (&error);
+ g_free (*hairpin);
+ }
+ } while (once_more);
+ }
+}
+
+static void
+do_questionnaire_vpn (char **user)
+{
+ /* Ask for optional 'vpn' arguments. */
+ if (!want_provide_opt_args (_("VPN"), 1))
+ return;
+
+ if (!*user)
+ *user = nmc_readline (_("Username [none]: "));
+}
+
+static void
+do_questionnaire_olpc (char **channel, char **dhcp_anycast)
+{
+ unsigned long tmp;
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional 'olpc' arguments. */
+ if (!want_provide_opt_args (_("OLPC Mesh"), 2))
+ return;
+
+ if (!*channel) {
+ do {
+ *channel = nmc_readline (_("OLPC Mesh channel [1]: "));
+ once_more = *channel && !nmc_string_to_uint (*channel, TRUE, 1, 13, &tmp);
+ if (once_more) {
+ printf (_("Error: 'channel': '%s' is not a valid number <1-13>.\n"),
+ *channel);
+ g_free (*channel);
+ }
+ } while (once_more);
+ }
+ if (!*dhcp_anycast) {
+ do {
+ *dhcp_anycast = nmc_readline (_("DHCP anycast MAC address [none]: "));
+ once_more = !check_and_convert_mac (*dhcp_anycast, NULL, ARPHRD_ETHER, "dhcp-anycast", &error);
+ if (once_more) {
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*dhcp_anycast);
+ }
+ } while (once_more);
+ }
+}
+
+static gboolean
+split_address (char* str, char **ip, char **gw, char **rest)
+{
+ size_t n1, n2, n3, n4, n5;
+
+ *ip = *gw = *rest = NULL;
+ if (!str)
+ return FALSE;
+
+ n1 = strspn (str, " \t");
+ n2 = strcspn (str+n1, " \t\0") + n1;
+ n3 = strspn (str+n2, " \t") + n2;
+ n4 = strcspn (str+n3, " \t\0") + n3;
+ n5 = strspn (str+n4, " \t") + n4;
+
+ str[n2] = str[n4] = '\0';
+ *ip = str[n1] ? str + n1 : NULL;
+ *gw = str[n3] ? str + n3 : NULL;
+ *rest = str[n5] ? str + n5 : NULL;
+
+ return TRUE;
+}
+
+static void
+ask_for_ip_addresses (NMConnection *connection, int family)
+{
+ gboolean ip_loop;
+ GError *error = NULL;
+ char *str, *ip, *gw, *rest;
+ const char *prompt;
+ gboolean added;
+ gpointer ipaddr;
+
+ if (family == 4)
+ prompt =_("IPv4 address (IP[/plen] [gateway]) [none]: ");
+ else
+ prompt =_("IPv6 address (IP[/plen] [gateway]) [none]: ");
+
+ ip_loop = TRUE;
+ do {
+ str = nmc_readline ("%s", prompt);
+ split_address (str, &ip, &gw, &rest);
+ if (ip) {
+ if (family == 4)
+ ipaddr = nmc_parse_and_build_ip4_address (ip, gw, &error);
+ else
+ ipaddr = nmc_parse_and_build_ip6_address (ip, gw, &error);
+ if (ipaddr) {
+ if (family == 4)
+ added = add_ip4_address_to_connection ((NMIP4Address *) ipaddr, connection);
+ else
+ added = add_ip6_address_to_connection ((NMIP6Address *) ipaddr, connection);
+ gw = gw ? gw : (family == 4) ? "0.0.0.0" : "::";
+ if (added)
+ printf (_(" Address successfully added: %s %s\n"), ip, gw);
+ else
+ printf (_(" Warning: address already present: %s %s\n"), ip, gw);
+ if (rest)
+ printf (_(" Warning: ignoring garbage at the end: '%s'\n"), rest);
+ } else {
+ g_prefix_error (&error, _("Error: "));
+ printf ("%s\n", error->message);
+ g_clear_error (&error);
+ }
+ } else
+ ip_loop = FALSE;
+
+ g_free (str);
+ } while (ip_loop);
+}
+
+static void
+do_questionnaire_ip (NMConnection *connection)
+{
+ char *answer;
+
+ /* Ask for IP addresses */
+ answer = nmc_readline (_("Do you want to add IP addresses? %s"), prompt_yes_no (TRUE, NULL));
+ answer = answer ? g_strstrip (answer) : NULL;
+ if (answer && matches (answer, WORD_LOC_YES) != 0) {
+ g_free (answer);
+ return;
+ }
+
+ printf (_("Press <Enter> to finish adding addresses.\n"));
+
+ ask_for_ip_addresses (connection, 4);
+ ask_for_ip_addresses (connection, 6);
+
+ g_free (answer);
+ return;
+}
+
+static gboolean
+complete_connection_by_type (NMConnection *connection,
+ const char *con_type,
+ GSList *all_connections,
+ gboolean ask,
+ int argc,
+ char **argv,
+ GError **error)
+{
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingInfiniband *s_infiniband;
+ NMSettingWireless *s_wifi;
+ NMSettingWimax *s_wimax;
+ NMSettingPPPOE *s_pppoe;
+ NMSettingGsm *s_gsm;
+ NMSettingCdma *s_cdma;
+ NMSettingBluetooth *s_bt;
+ NMSettingVlan *s_vlan;
+ NMSettingBond *s_bond;
+ NMSettingTeam *s_team;
+ NMSettingTeamPort *s_team_port;
+ NMSettingBridge *s_bridge;
+ NMSettingBridgePort *s_bridge_port;
+ NMSettingVPN *s_vpn;
+ NMSettingOlpcMesh *s_olpc_mesh;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ if (!strcmp (con_type, NM_SETTING_WIRED_SETTING_NAME)) {
+ /* Build up the settings required for 'ethernet' */
+ gboolean success = FALSE;
+ const char *mtu_c = NULL;
+ char *mtu = NULL;
+ guint32 mtu_int = 0;
+ const char *mac_c = NULL;
+ char *mac = NULL;
+ const char *cloned_mac_c = NULL;
+ char *cloned_mac = NULL;
+ GByteArray *array = NULL;
+ GByteArray *cloned_array = NULL;
+ nmc_arg_t exp_args[] = { {"mtu", TRUE, &mtu_c, FALSE},
+ {"mac", TRUE, &mac_c, FALSE},
+ {"cloned-mac", TRUE, &cloned_mac_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ mtu = mtu_c ? g_strdup (mtu_c) : NULL;
+ mac = mac_c ? g_strdup (mac_c) : NULL;
+ cloned_mac = cloned_mac_c ? g_strdup (cloned_mac_c) : NULL;
+ if (ask)
+ do_questionnaire_ethernet (TRUE, &mtu, &mac, &cloned_mac);
+
+ if (!check_and_convert_mtu (mtu, &mtu_int, error))
+ goto cleanup_wired;
+ if (!check_and_convert_mac (mac, &array, ARPHRD_ETHER, "mac", error))
+ goto cleanup_wired;
+ if (!check_and_convert_mac (cloned_mac, &cloned_array, ARPHRD_ETHER, "cloned-mac", error))
+ goto cleanup_wired;
+
+ /* Add ethernet setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ if (mtu)
+ g_object_set (s_wired, NM_SETTING_WIRED_MTU, mtu_int, NULL);
+ if (array)
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, array, NULL);
+ if (cloned_array)
+ g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, cloned_array, NULL);
+
+ success = TRUE;
+cleanup_wired:
+ g_free (mtu);
+ g_free (mac);
+ g_free (cloned_mac);
+ if (array)
+ g_byte_array_free (array, TRUE);
+ if (cloned_array)
+ g_byte_array_free (cloned_array, TRUE);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ /* Build up the settings required for 'infiniband' */
+ gboolean success = FALSE;
+ const char *mtu_c = NULL;
+ char *mtu = NULL;
+ guint32 mtu_int = 0;
+ const char *mac_c = NULL;
+ char *mac = NULL;
+ GByteArray *array = NULL;
+ const char *mode_c = NULL;
+ char *mode = NULL;
+ const char *parent_c = NULL;
+ char *parent = NULL;
+ const char *p_key_c = NULL;
+ char *p_key = NULL;
+ guint32 p_key_int = 0;
+ nmc_arg_t exp_args[] = { {"mtu", TRUE, &mtu_c, FALSE},
+ {"mac", TRUE, &mac_c, FALSE},
+ {"transport-mode", TRUE, &mode_c, FALSE},
+ {"parent", TRUE, &parent_c, FALSE},
+ {"p-key", TRUE, &p_key_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ mtu = mtu_c ? g_strdup (mtu_c) : NULL;
+ mac = mac_c ? g_strdup (mac_c) : NULL;
+ mode = mode_c ? g_strdup (mode_c) : NULL;
+ parent = parent_c ? g_strdup (parent_c) : NULL;
+ p_key = p_key_c ? g_strdup (p_key_c) : NULL;
+ if (ask)
+ do_questionnaire_infiniband (&mtu, &mac, &mode, &parent, &p_key);
+
+ if (!check_and_convert_mtu (mtu, &mtu_int, error))
+ goto cleanup_ib;
+ if (!check_and_convert_mac (mac, &array, ARPHRD_INFINIBAND, "mac", error))
+ goto cleanup_ib;
+ if (!check_infiniband_mode (&mode, error))
+ goto cleanup_ib;
+ if (p_key) {
+ if (!check_infiniband_p_key (p_key, &p_key_int, error))
+ goto cleanup_ib;
+ if (!check_infiniband_parent (parent, error))
+ goto cleanup_ib;
+ } else if (parent) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'parent': not valid without 'p-key'."));
+ goto cleanup_ib;
+ }
+
+ /* Add 'infiniband' setting */
+ s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
+
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_TRANSPORT_MODE, mode ? mode : "datagram", NULL);
+ if (mtu)
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MTU, mtu_int, NULL);
+ if (array) {
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, array, NULL);
+ g_byte_array_free (array, TRUE);
+ }
+ if (p_key)
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_P_KEY, p_key_int, NULL);
+ if (parent)
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_PARENT, parent, NULL);
+
+
+ success = TRUE;
+cleanup_ib:
+ g_free (mtu);
+ g_free (mac);
+ g_free (mode);
+ g_free (parent);
+ g_free (p_key);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_WIRELESS_SETTING_NAME)) {
+ /* Build up the settings required for 'wifi' */
+ gboolean success = FALSE;
+ char *ssid_ask = NULL;
+ const char *ssid = NULL;
+ GByteArray *ssid_arr = NULL;
+ const char *mtu_c = NULL;
+ char *mtu = NULL;
+ guint32 mtu_int = 0;
+ const char *mac_c = NULL;
+ char *mac = NULL;
+ GByteArray *mac_array = NULL;
+ const char *cloned_mac_c = NULL;
+ char *cloned_mac = NULL;
+ GByteArray *cloned_mac_array = NULL;
+ nmc_arg_t exp_args[] = { {"ssid", TRUE, &ssid, !ask},
+ {"mtu", TRUE, &mtu_c, FALSE},
+ {"mac", TRUE, &mac_c, FALSE},
+ {"cloned-mac", TRUE, &cloned_mac_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!ssid && ask)
+ ssid = ssid_ask = nmc_readline (_("SSID: "));
+ if (!ssid) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'ssid' is required."));
+ return FALSE;
+ }
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ mtu = mtu_c ? g_strdup (mtu_c) : NULL;
+ mac = mac_c ? g_strdup (mac_c) : NULL;
+ cloned_mac = cloned_mac_c ? g_strdup (cloned_mac_c) : NULL;
+ if (ask)
+ do_questionnaire_wifi (&mtu, &mac, &cloned_mac);
+
+ if (!check_and_convert_mtu (mtu, &mtu_int, error))
+ goto cleanup_wifi;
+ if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error))
+ goto cleanup_wifi;
+ if (!check_and_convert_mac (cloned_mac, &cloned_mac_array, ARPHRD_ETHER, "cloned-mac", error))
+ goto cleanup_wifi;
+
+ /* Add wifi setting */
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+ ssid_arr = g_byte_array_sized_new (strlen (ssid));
+ g_byte_array_append (ssid_arr, (const guint8 *) ssid, strlen (ssid));
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid_arr, NULL);
+
+ if (mtu)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_MTU, mtu_int, NULL);
+ if (mac_array)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, mac_array, NULL);
+ if (cloned_mac_array)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, cloned_mac_array, NULL);
+
+ success = TRUE;
+cleanup_wifi:
+ g_free (ssid_ask);
+ g_free (mtu);
+ g_free (mac);
+ g_free (cloned_mac);
+ if (ssid_arr)
+ g_byte_array_free (ssid_arr, TRUE);
+ if (mac_array)
+ g_byte_array_free (mac_array, TRUE);
+ if (cloned_mac_array)
+ g_byte_array_free (cloned_mac_array, TRUE);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_WIMAX_SETTING_NAME)) {
+ /* Build up the settings required for 'wimax' */
+ gboolean success = FALSE;
+ const char *nsp_name = NULL;
+ char *nsp_name_ask = NULL;
+ const char *mac_c = NULL;
+ char *mac = NULL;
+ GByteArray *mac_array = NULL;
+ nmc_arg_t exp_args[] = { {"nsp", TRUE, &nsp_name, !ask},
+ {"mac", TRUE, &mac_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!nsp_name && ask)
+ nsp_name = nsp_name_ask = nmc_readline (_("WiMAX NSP name: "));
+ if (!nsp_name) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'nsp' is required."));
+ goto cleanup_wimax;
+ }
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ mac = mac_c ? g_strdup (mac_c) : NULL;
+ if (ask)
+ do_questionnaire_wimax (&mac);
+
+ if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error))
+ goto cleanup_wimax;
+
+ /* Add 'wimax' setting */
+ s_wimax = (NMSettingWimax *) nm_setting_wimax_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wimax));
+ g_object_set (s_wimax, NM_SETTING_WIMAX_NETWORK_NAME, nsp_name, NULL);
+
+ if (mac_array) {
+ g_object_set (s_wimax, NM_SETTING_WIMAX_MAC_ADDRESS, mac_array, NULL);
+ g_byte_array_free (mac_array, TRUE);
+ }
+
+ success = TRUE;
+cleanup_wimax:
+ g_free (nsp_name_ask);
+ g_free (mac);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_PPPOE_SETTING_NAME)) {
+ /* Build up the settings required for 'pppoe' */
+ gboolean success = FALSE;
+ const char *username = NULL;
+ char *username_ask = NULL;
+ const char *password_c = NULL;
+ char *password = NULL;
+ const char *service_c = NULL;
+ char *service = NULL;
+ const char *mtu_c = NULL;
+ char *mtu = NULL;
+ guint32 mtu_int = 0;
+ const char *mac_c = NULL;
+ char *mac = NULL;
+ GByteArray *mac_array = NULL;
+ nmc_arg_t exp_args[] = { {"username", TRUE, &username, !ask},
+ {"password", TRUE, &password_c, FALSE},
+ {"service", TRUE, &service_c, FALSE},
+ {"mtu", TRUE, &mtu_c, FALSE},
+ {"mac", TRUE, &mac_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!username && ask)
+ username = username_ask = nmc_readline (_("PPPoE username: "));
+ if (!username) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'username' is required."));
+ goto cleanup_pppoe;
+ }
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ password = g_strdup (password_c);
+ service = g_strdup (service_c);
+ mtu = g_strdup (mtu_c);
+ mac = g_strdup (mac_c);
+ if (ask)
+ do_questionnaire_pppoe (&password, &service, &mtu, &mac);
+
+ if (!check_and_convert_mtu (mtu, &mtu_int, error))
+ goto cleanup_pppoe;
+ if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error))
+ goto cleanup_pppoe;
+
+ /* Add 'pppoe' setting */
+ s_pppoe = (NMSettingPPPOE *) nm_setting_pppoe_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_pppoe));
+ g_object_set (s_pppoe, NM_SETTING_PPPOE_USERNAME, username, NULL);
+ g_object_set (s_pppoe, NM_SETTING_PPPOE_PASSWORD, password, NULL);
+ g_object_set (s_pppoe, NM_SETTING_PPPOE_SERVICE, service, NULL);
+
+ /* Add ethernet setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+ if (mtu)
+ g_object_set (s_wired, NM_SETTING_WIRED_MTU, mtu_int, NULL);
+ if (mac_array)
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac_array, NULL);
+
+ success = TRUE;
+cleanup_pppoe:
+ g_free (username_ask);
+ g_free (password);
+ g_free (service);
+ g_free (mtu);
+ g_free (mac);
+ if (mac_array)
+ g_byte_array_free (mac_array, TRUE);
+ if (!success)
+ return FALSE;
+
+ } else if ( !strcmp (con_type, NM_SETTING_GSM_SETTING_NAME)
+ || !strcmp (con_type, NM_SETTING_CDMA_SETTING_NAME)) {
+ /* Build up the settings required for 'gsm' or 'cdma' mobile broadband */
+ gboolean success = FALSE;
+ const char *apn = NULL;
+ char *apn_ask = NULL;
+ const char *user_c = NULL;
+ char *user = NULL;
+ const char *password_c = NULL;
+ char *password = NULL;
+ gboolean is_gsm;
+ int i = 0;
+ nmc_arg_t gsm_args[] = { {NULL}, {NULL}, {NULL}, /* placeholders */
+ {NULL} };
+
+ is_gsm = !strcmp (con_type, NM_SETTING_GSM_SETTING_NAME);
+
+ if (is_gsm)
+ gsm_args[i++] = (nmc_arg_t) {"apn", TRUE, &apn, !ask};
+ gsm_args[i++] = (nmc_arg_t) {"user", TRUE, &user_c, FALSE};
+ gsm_args[i++] = (nmc_arg_t) {"password", TRUE, &password_c, FALSE};
+ gsm_args[i++] = (nmc_arg_t) {NULL};
+
+ if (!nmc_parse_args (gsm_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!apn && ask && is_gsm)
+ apn = apn_ask = nmc_readline (_("APN: "));
+ if (!apn && is_gsm) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'apn' is required."));
+ goto cleanup_mobile;
+ }
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ user = user_c ? g_strdup (user_c) : NULL;
+ password = password_c ? g_strdup (password_c) : NULL;
+ if (ask)
+ do_questionnaire_mobile (&user, &password);
+
+ if (is_gsm) {
+ g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, NM_SETTING_GSM_SETTING_NAME, NULL);
+
+ /* Add 'gsm' setting */
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_gsm));
+ g_object_set (s_gsm,
+ NM_SETTING_GSM_NUMBER, "*99#",
+ NM_SETTING_GSM_APN, apn,
+ NM_SETTING_GSM_USERNAME, user,
+ NM_SETTING_GSM_PASSWORD, password,
+ NULL);
+ g_free (apn_ask);
+ } else {
+ g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, NM_SETTING_CDMA_SETTING_NAME, NULL);
+
+ /* Add 'cdma' setting */
+ s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_cdma));
+ g_object_set (s_cdma,
+ NM_SETTING_CDMA_NUMBER, "#777",
+ NM_SETTING_CDMA_USERNAME, user,
+ NM_SETTING_CDMA_PASSWORD, password,
+ NULL);
+ }
+
+ success = TRUE;
+cleanup_mobile:
+ g_free (user);
+ g_free (password);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_BLUETOOTH_SETTING_NAME)) {
+ /* Build up the settings required for 'bluetooth' */
+ gboolean success = FALSE;
+ const char *addr = NULL;
+ char *addr_ask = NULL;
+ const char *bt_type_c = NULL;
+ char *bt_type = NULL;
+ GByteArray *array = NULL;
+ nmc_arg_t exp_args[] = { {"addr", TRUE, &addr, !ask},
+ {"bt-type", TRUE, &bt_type_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!addr && ask)
+ addr = addr_ask = nmc_readline (_("Bluetooth device address: "));
+ if (!addr) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'addr' is required."));
+ return FALSE;
+ }
+ if (!check_and_convert_mac (addr, &array, ARPHRD_ETHER, "addr", error))
+ goto cleanup_bt;
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ bt_type = bt_type_c ? g_strdup (bt_type_c) : NULL;
+ if (ask)
+ do_questionnaire_bluetooth (&bt_type);
+
+ /* Default to 'panu' if bt-type is not provided. */
+ if (!bt_type)
+ bt_type = g_strdup (NM_SETTING_BLUETOOTH_TYPE_PANU);
+
+ /* Add 'bluetooth' setting */
+ s_bt = (NMSettingBluetooth *) nm_setting_bluetooth_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_bt));
+
+ if (array) {
+ g_object_set (s_bt, NM_SETTING_BLUETOOTH_BDADDR, array, NULL);
+ g_byte_array_free (array, TRUE);
+ }
+
+ /* 'dun' type requires adding 'gsm' or 'cdma' setting */
+ if ( !strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN)
+ || !strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN"-gsm")) {
+ bt_type = g_strdup (NM_SETTING_BLUETOOTH_TYPE_DUN);
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_gsm));
+ g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
+// g_object_set (s_gsm, NM_SETTING_GSM_APN, "FIXME", NULL;
+
+ } else if (!strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN"-cdma")) {
+ bt_type = g_strdup (NM_SETTING_BLUETOOTH_TYPE_DUN);
+ s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_cdma));
+ g_object_set (s_cdma, NM_SETTING_CDMA_NUMBER, "#777", NULL);
+
+ } else if (!strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_PANU)) {
+ /* no op */
+ } else {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."),
+ bt_type, NM_SETTING_BLUETOOTH_TYPE_PANU, NM_SETTING_BLUETOOTH_TYPE_DUN,
+ NM_SETTING_BLUETOOTH_TYPE_DUN"-gsm", NM_SETTING_BLUETOOTH_TYPE_DUN"-cdma");
+ goto cleanup_bt;
+ }
+ g_object_set (s_bt, NM_SETTING_BLUETOOTH_TYPE, bt_type, NULL);
+
+ success = TRUE;
+cleanup_bt:
+ g_free (addr_ask);
+ g_free (bt_type);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_VLAN_SETTING_NAME)) {
+ /* Build up the settings required for 'vlan' */
+ gboolean success = FALSE;
+ const char *ifname = NULL;
+ const char *parent = NULL;
+ char *parent_ask = NULL;
+ const char *vlan_id = NULL;
+ char *vlan_id_ask = NULL;
+ unsigned long id = 0;
+ const char *flags_c = NULL;
+ char *flags = NULL;
+ guint32 flags_int = 0;
+ const char *ingress_c = NULL, *egress_c = NULL;
+ char *ingress = NULL, *egress = NULL;
+ char **ingress_arr = NULL, **egress_arr = NULL, **p;
+ const char *mtu_c = NULL;
+ char *mtu = NULL;
+ guint32 mtu_int;
+ GByteArray *addr_array = NULL;
+ nmc_arg_t exp_args[] = { {"dev", TRUE, &parent, !ask},
+ {"id", TRUE, &vlan_id, !ask},
+ {"flags", TRUE, &flags_c, FALSE},
+ {"ingress", TRUE, &ingress_c, FALSE},
+ {"egress", TRUE, &egress_c, FALSE},
+ {"mtu", TRUE, &mtu_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!parent && ask)
+ parent = parent_ask = nmc_readline (_("VLAN parent device or connection UUID: "));
+ if (!parent) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'dev' is required."));
+ return FALSE;
+ }
+ if (!vlan_id && ask)
+ vlan_id = vlan_id_ask = nmc_readline (_("VLAN ID <0-4095>: "));
+ if (!vlan_id) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'id' is required."));
+ goto cleanup_vlan;
+ }
+ if (vlan_id) {
+ if (!nmc_string_to_uint (vlan_id, TRUE, 0, 4095, &id)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'id': '%s' is not valid; use <0-4095>."),
+ vlan_id);
+ goto cleanup_vlan;
+ }
+ }
+
+ if ( !(addr_array = nm_utils_hwaddr_atoba (parent, ARPHRD_ETHER))
+ && !nm_utils_is_uuid (parent)
+ && !nm_utils_iface_valid_name (parent)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'dev': '%s' is neither UUID, interface name, nor MAC."),
+ parent);
+ goto cleanup_vlan;
+ }
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ mtu = mtu_c ? g_strdup (mtu_c) : NULL;
+ flags = flags_c ? g_strdup (flags_c) : NULL;
+ ingress = ingress_c ? g_strdup (ingress_c) : NULL;
+ egress = egress_c ? g_strdup (egress_c) : NULL;
+ if (ask)
+ do_questionnaire_vlan (&mtu, &flags, &ingress, &egress);
+
+ /* ifname is taken from connection's ifname */
+ ifname = nm_setting_connection_get_interface_name (s_con);
+
+ if (!check_and_convert_mtu (mtu, &mtu_int, error))
+ goto cleanup_vlan;
+ if (!check_and_convert_vlan_flags (flags, &flags_int, error))
+ goto cleanup_vlan;
+ if (!check_and_convert_vlan_prio_maps (ingress, NM_VLAN_INGRESS_MAP, &ingress_arr, error))
+ goto cleanup_vlan;
+ if (!check_and_convert_vlan_prio_maps (egress, NM_VLAN_EGRESS_MAP, &egress_arr, error))
+ goto cleanup_vlan;
+
+ /* Add 'vlan' setting */
+ s_vlan = (NMSettingVlan *) nm_setting_vlan_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_vlan));
+
+ /* Add 'wired' setting if necessary */
+ if (mtu || addr_array) {
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ if (mtu)
+ g_object_set (s_wired, NM_SETTING_WIRED_MTU, mtu_int, NULL);
+ if (addr_array)
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, addr_array, NULL);
+ }
+
+ /* Set 'vlan' properties */
+ if (!addr_array)
+ g_object_set (s_vlan, NM_SETTING_VLAN_PARENT, parent, NULL);
+
+ if (ifname)
+ g_object_set (s_vlan, NM_SETTING_VLAN_INTERFACE_NAME, ifname, NULL);
+ g_object_set (s_vlan, NM_SETTING_VLAN_ID, id, NULL);
+
+ if (flags)
+ g_object_set (s_vlan, NM_SETTING_VLAN_FLAGS, flags_int, NULL);
+ for (p = ingress_arr; p && *p; p++)
+ nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_INGRESS_MAP, *p);
+ for (p = egress_arr; p && *p; p++)
+ nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_EGRESS_MAP, *p);
+
+ success = TRUE;
+cleanup_vlan:
+ g_free (mtu);
+ g_free (flags);
+ g_free (ingress);
+ g_free (egress);
+ if (addr_array)
+ g_byte_array_free (addr_array, TRUE);
+ g_free (parent_ask);
+ g_free (vlan_id_ask);
+ g_strfreev (ingress_arr);
+ g_strfreev (egress_arr);
+ if (!success)
+ return FALSE;
- device_found = find_device_for_connection (nmc, connection, iface, ap, nsp, &device, &spec_object, &error);
- /* Virtual connection may not have their interfaces created yet */
- if (!device_found && !is_virtual) {
- if (error)
- g_string_printf (nmc->return_text, _("Error: No suitable device found: %s."), error->message);
+ } else if (!strcmp (con_type, NM_SETTING_BOND_SETTING_NAME)) {
+ /* Build up the settings required for 'bond' */
+ gboolean success = FALSE;
+ char *bond_ifname = NULL;
+ const char *ifname = NULL;
+ const char *bond_mode_c = NULL;
+ char *bond_mode = NULL;
+ const char *bond_primary_c = NULL;
+ char *bond_primary = NULL;
+ const char *bond_miimon_c = NULL;
+ char *bond_miimon = NULL;
+ const char *bond_downdelay_c = NULL;
+ char *bond_downdelay = NULL;
+ const char *bond_updelay_c = NULL;
+ char *bond_updelay = NULL;
+ const char *bond_arpinterval_c = NULL;
+ char *bond_arpinterval = NULL;
+ const char *bond_arpiptarget_c = NULL;
+ char *bond_arpiptarget = NULL;
+ nmc_arg_t exp_args[] = { {"mode", TRUE, &bond_mode_c, FALSE},
+ {"primary", TRUE, &bond_primary_c, FALSE},
+ {"miimon", TRUE, &bond_miimon_c, FALSE},
+ {"downdelay", TRUE, &bond_downdelay_c, FALSE},
+ {"updelay", TRUE, &bond_updelay_c, FALSE},
+ {"arp-interval", TRUE, &bond_arpinterval_c, FALSE},
+ {"arp-ip-target", TRUE, &bond_arpiptarget_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ bond_mode = bond_mode_c ? g_strdup (bond_mode_c) : NULL;
+ bond_primary = bond_primary_c ? g_strdup (bond_primary_c) : NULL;
+ bond_miimon = bond_miimon_c ? g_strdup (bond_miimon_c) : NULL;
+ bond_downdelay = bond_downdelay_c ? g_strdup (bond_downdelay_c) : NULL;
+ bond_updelay = bond_updelay_c ? g_strdup (bond_updelay_c) : NULL;
+ bond_arpinterval = bond_arpinterval_c ? g_strdup (bond_arpinterval_c) : NULL;
+ bond_arpiptarget = bond_arpiptarget_c ? g_strdup (bond_arpiptarget_c) : NULL;
+ if (ask)
+ do_questionnaire_bond (&bond_mode, &bond_primary, &bond_miimon,
+ &bond_downdelay, &bond_updelay,
+ &bond_arpinterval, &bond_arpiptarget);
+
+ /* Use connection's ifname as 'bond' ifname if exists, else generate one */
+ ifname = nm_setting_connection_get_interface_name (s_con);
+ if (!ifname)
+ bond_ifname = unique_master_iface_ifname (all_connections,
+ NM_SETTING_BOND_SETTING_NAME,
+ NM_SETTING_BOND_INTERFACE_NAME,
+ "nm-bond");
+ else
+ bond_ifname = g_strdup (ifname);
+
+ /* Add 'bond' setting */
+ s_bond = (NMSettingBond *) nm_setting_bond_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_bond));
+
+ /* Set bond options */
+ g_object_set (s_bond, NM_SETTING_BOND_INTERFACE_NAME, bond_ifname, NULL);
+ if (bond_mode) {
+ GError *err = NULL;
+ const char *bm;
+ if (!(bm = nmc_bond_validate_mode (bond_mode, &err))) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'mode': %s."), err->message);
+ g_clear_error (&err);
+ goto cleanup_bond;
+ }
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_MODE, bm);
+ }
+ if (bond_primary) {
+ if (!nm_utils_iface_valid_name (bond_primary)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'primary': '%s' is not a valid interface name."),
+ bond_primary);
+ goto cleanup_bond;
+ }
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_PRIMARY, bond_primary);
+ }
+ if (bond_miimon)
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_MIIMON, bond_miimon);
+ if (bond_downdelay && strcmp (bond_downdelay, "0") != 0)
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY, bond_downdelay);
+ if (bond_updelay && strcmp (bond_updelay, "0") != 0)
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_UPDELAY, bond_updelay);
+ if (bond_arpinterval && strcmp (bond_arpinterval, "0") != 0)
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL, bond_arpinterval);
+ if (bond_arpiptarget)
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET, bond_arpiptarget);
+
+ success = TRUE;
+cleanup_bond:
+ g_free (bond_ifname);
+ g_free (bond_mode);
+ g_free (bond_primary);
+ g_free (bond_miimon);
+ g_free (bond_downdelay);
+ g_free (bond_updelay);
+ g_free (bond_arpinterval);
+ g_free (bond_arpiptarget);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, "bond-slave")) {
+ /* Build up the settings required for 'bond-slave' */
+ const char *master = NULL;
+ char *master_ask = NULL;
+ const char *checked_master = NULL;
+ const char *type = NULL;
+ nmc_arg_t exp_args[] = { {"master", TRUE, &master, !ask},
+ {"type", TRUE, &type, FALSE},
+ {NULL} };
+
+ /* Set global variables for use in TAB completion */
+ nmc_tab_completion.con_type = NM_SETTING_BOND_SETTING_NAME;
+
+ if (!nmc_parse_args (exp_args, TRUE, &argc, &argv, error))
+ return FALSE;
+
+ if (!master && ask)
+ master = master_ask = nmc_readline (PROMPT_BOND_MASTER);
+ if (!master) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'master' is required."));
+ return FALSE;
+ }
+ /* Verify master argument */
+ checked_master = verify_master_for_slave (all_connections, master, NM_SETTING_BOND_SETTING_NAME);
+ if (!checked_master)
+ printf (_("Warning: master='%s' doesn't refer to any existing profile.\n"), master);
+
+ if (type)
+ printf (_("Warning: 'type' is currently ignored. "
+ "We only support ethernet slaves for now.\n"));
+
+ /* Change properties in 'connection' setting */
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : _strip_master_prefix (master, NULL),
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME,
+ NULL);
+
+ /* Add ethernet setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ g_free (master_ask);
+
+ } else if (!strcmp (con_type, NM_SETTING_TEAM_SETTING_NAME)) {
+ /* Build up the settings required for 'team' */
+ gboolean success = FALSE;
+ char *team_ifname = NULL;
+ const char *ifname = NULL;
+ const char *config_c = NULL;
+ char *config = NULL;
+ char *json = NULL;
+ nmc_arg_t exp_args[] = { {"config", TRUE, &config_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ config = g_strdup (config_c);
+ if (ask)
+ do_questionnaire_team (&config);
+
+ /* Use connection's ifname as 'team' ifname if exists, else generate one */
+ ifname = nm_setting_connection_get_interface_name (s_con);
+ if (!ifname)
+ team_ifname = unique_master_iface_ifname (all_connections,
+ NM_SETTING_TEAM_SETTING_NAME,
+ NM_SETTING_TEAM_INTERFACE_NAME,
+ "nm-team");
+ else
+ team_ifname = g_strdup (ifname);
+
+ /* Add 'team' setting */
+ s_team = (NMSettingTeam *) nm_setting_team_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_team));
+
+ if (!nmc_team_check_config (config, &json, error)) {
+ g_prefix_error (error, _("Error: "));
+ goto cleanup_team;
+ }
+
+ /* Set team options */
+ g_object_set (s_team, NM_SETTING_TEAM_INTERFACE_NAME, team_ifname, NULL);
+ g_object_set (s_team, NM_SETTING_TEAM_CONFIG, json, NULL);
+
+ success = TRUE;
+cleanup_team:
+ g_free (team_ifname);
+ g_free (config);
+ g_free (json);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, "team-slave")) {
+ /* Build up the settings required for 'team-slave' */
+ gboolean success = FALSE;
+ const char *master = NULL;
+ char *master_ask = NULL;
+ const char *checked_master = NULL;
+ const char *type = NULL;
+ const char *config_c = NULL;
+ char *config = NULL;
+ char *json = NULL;
+ nmc_arg_t exp_args[] = { {"master", TRUE, &master, !ask},
+ {"type", TRUE, &type, FALSE},
+ {"config", TRUE, &config_c, FALSE},
+ {NULL} };
+
+ /* Set global variables for use in TAB completion */
+ nmc_tab_completion.con_type = NM_SETTING_TEAM_SETTING_NAME;
+
+ if (!nmc_parse_args (exp_args, TRUE, &argc, &argv, error))
+ return FALSE;
+
+ if (!master && ask)
+ master = master_ask = nmc_readline (PROMPT_TEAM_MASTER);
+ if (!master) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'master' is required."));
+ return FALSE;
+ }
+ /* Verify master argument */
+ checked_master = verify_master_for_slave (all_connections, master, NM_SETTING_TEAM_SETTING_NAME);
+ if (!checked_master)
+ printf (_("Warning: master='%s' doesn't refer to any existing profile.\n"), master);
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ config = g_strdup (config_c);
+ if (ask)
+ do_questionnaire_team_slave (&config);
+
+ if (type)
+ printf (_("Warning: 'type' is currently ignored. "
+ "We only support ethernet slaves for now.\n"));
+
+ /* Add 'team-port' setting */
+ s_team_port = (NMSettingTeamPort *) nm_setting_team_port_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_team_port));
+
+ if (!nmc_team_check_config (config, &json, error)) {
+ g_prefix_error (error, _("Error: "));
+ goto cleanup_team_slave;
+ }
+
+ /* Set team-port options */
+ g_object_set (s_team_port, NM_SETTING_TEAM_PORT_CONFIG, json, NULL);
+
+ /* Change properties in 'connection' setting */
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : _strip_master_prefix (master, NULL),
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME,
+ NULL);
+
+ /* Add ethernet setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ success = TRUE;
+cleanup_team_slave:
+ g_free (master_ask);
+ g_free (config);
+ g_free (json);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_BRIDGE_SETTING_NAME)) {
+ /* Build up the settings required for 'bridge' */
+ gboolean success = FALSE;
+ char *bridge_ifname = NULL;
+ const char *ifname = NULL;
+ const char *stp_c = NULL;
+ char *stp = NULL;
+ const char *priority_c = NULL;
+ char *priority = NULL;
+ const char *fwd_delay_c = NULL;
+ char *fwd_delay = NULL;
+ const char *hello_time_c = NULL;
+ char *hello_time = NULL;
+ const char *max_age_c = NULL;
+ char *max_age = NULL;
+ const char *ageing_time_c = NULL;
+ char *ageing_time = NULL;
+ gboolean stp_bool;
+ unsigned long stp_prio_int, fwd_delay_int, hello_time_int,
+ max_age_int, ageing_time_int;
+ const char *mac_c = NULL;
+ char *mac = NULL;
+ GByteArray *mac_array = NULL;
+ nmc_arg_t exp_args[] = { {"stp", TRUE, &stp_c, FALSE},
+ {"priority", TRUE, &priority_c, FALSE},
+ {"forward-delay", TRUE, &fwd_delay_c, FALSE},
+ {"hello-time", TRUE, &hello_time_c, FALSE},
+ {"max-age", TRUE, &max_age_c, FALSE},
+ {"ageing-time", TRUE, &ageing_time_c, FALSE},
+ {"mac", TRUE, &mac_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ stp = stp_c ? g_strdup (stp_c) : NULL;
+ priority = priority_c ? g_strdup (priority_c) : NULL;
+ fwd_delay = fwd_delay_c ? g_strdup (fwd_delay_c) : NULL;
+ hello_time = hello_time_c ? g_strdup (hello_time_c) : NULL;
+ max_age = max_age_c ? g_strdup (max_age_c) : NULL;
+ ageing_time = ageing_time_c ? g_strdup (ageing_time_c) : NULL;
+ mac = g_strdup (mac_c);
+ if (ask)
+ do_questionnaire_bridge (&stp, &priority, &fwd_delay, &hello_time,
+ &max_age, &ageing_time, &mac);
+
+ /* Use connection's ifname as 'bridge' ifname if exists, else generate one */
+ ifname = nm_setting_connection_get_interface_name (s_con);
+ if (!ifname)
+ bridge_ifname = unique_master_iface_ifname (all_connections,
+ NM_SETTING_BRIDGE_SETTING_NAME,
+ NM_SETTING_BRIDGE_INTERFACE_NAME,
+ "nm-bridge");
+ else
+ bridge_ifname = g_strdup (ifname);
+
+ if (stp) {
+ GError *tmp_err = NULL;
+ if (!nmc_string_to_bool (stp, &stp_bool, &tmp_err)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'stp': %s."), tmp_err->message);
+ g_clear_error (&tmp_err);
+ goto cleanup_bridge;
+ }
+ }
+
+ /* Add 'bond' setting */
+ /* Must be done *before* bridge_prop_string_to_uint() so that the type is known */
+ s_bridge = (NMSettingBridge *) nm_setting_bridge_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_bridge));
+
+ if (priority)
+ if (!bridge_prop_string_to_uint (priority, "priority", NM_TYPE_SETTING_BRIDGE,
+ NM_SETTING_BRIDGE_PRIORITY, &stp_prio_int, error))
+ goto cleanup_bridge;
+ if (fwd_delay)
+ if (!bridge_prop_string_to_uint (fwd_delay, "forward-delay", NM_TYPE_SETTING_BRIDGE,
+ NM_SETTING_BRIDGE_FORWARD_DELAY, &fwd_delay_int, error))
+ goto cleanup_bridge;
+ if (hello_time)
+ if (!bridge_prop_string_to_uint (hello_time, "hello-time", NM_TYPE_SETTING_BRIDGE,
+ NM_SETTING_BRIDGE_HELLO_TIME, &hello_time_int, error))
+ goto cleanup_bridge;
+ if (max_age)
+ if (!bridge_prop_string_to_uint (max_age, "max-age", NM_TYPE_SETTING_BRIDGE,
+ NM_SETTING_BRIDGE_MAX_AGE, &max_age_int, error))
+ goto cleanup_bridge;
+ if (ageing_time)
+ if (!bridge_prop_string_to_uint (ageing_time, "ageing-time", NM_TYPE_SETTING_BRIDGE,
+ NM_SETTING_BRIDGE_AGEING_TIME, &ageing_time_int, error))
+ goto cleanup_bridge;
+ if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error))
+ goto cleanup_bridge;
+
+ /* Set bridge options */
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_INTERFACE_NAME, bridge_ifname, NULL);
+ if (stp)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_STP, stp_bool, NULL);
+ if (priority)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_PRIORITY, stp_prio_int, NULL);
+ if (fwd_delay)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_FORWARD_DELAY, fwd_delay_int, NULL);
+ if (hello_time)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_HELLO_TIME, hello_time_int, NULL);
+ if (max_age)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_MAX_AGE, max_age_int, NULL);
+ if (ageing_time)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_AGEING_TIME, ageing_time_int, NULL);
+ if (mac_array)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, mac_array, NULL);
+
+ success = TRUE;
+cleanup_bridge:
+ g_free (bridge_ifname);
+ g_free (stp);
+ g_free (priority);
+ g_free (fwd_delay);
+ g_free (hello_time);
+ g_free (max_age);
+ g_free (ageing_time);
+ g_free (mac);
+ if (mac_array)
+ g_byte_array_free (mac_array, TRUE);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, "bridge-slave")) {
+ /* Build up the settings required for 'bridge-slave' */
+ gboolean success = FALSE;
+ const char *master = NULL;
+ char *master_ask = NULL;
+ const char *checked_master = NULL;
+ const char *type = NULL;
+ const char *priority_c = NULL;
+ char *priority = NULL;
+ const char *path_cost_c = NULL;
+ char *path_cost = NULL;
+ const char *hairpin_c = NULL;
+ char *hairpin = NULL;
+ unsigned long prio_int, path_cost_int;
+ gboolean hairpin_bool;
+ nmc_arg_t exp_args[] = { {"master", TRUE, &master, !ask},
+ {"type", TRUE, &type, FALSE},
+ {"priority", TRUE, &priority_c, FALSE},
+ {"path-cost", TRUE, &path_cost_c, FALSE},
+ {"hairpin", TRUE, &hairpin_c, FALSE},
+ {NULL} };
+
+ /* Set global variables for use in TAB completion */
+ nmc_tab_completion.con_type = NM_SETTING_BRIDGE_SETTING_NAME;
+
+ if (!nmc_parse_args (exp_args, TRUE, &argc, &argv, error))
+ return FALSE;
+
+ if (!master && ask)
+ master = master_ask = nmc_readline (PROMPT_BRIDGE_MASTER);
+ if (!master) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'master' is required."));
+ return FALSE;
+ }
+ /* Verify master argument */
+ checked_master = verify_master_for_slave (all_connections, master, NM_SETTING_BRIDGE_SETTING_NAME);
+ if (!checked_master)
+ printf (_("Warning: master='%s' doesn't refer to any existing profile.\n"), master);
+
+ if (type)
+ printf (_("Warning: 'type' is currently ignored. "
+ "We only support ethernet slaves for now.\n"));
+
+ /* Add 'bridge-port' setting */
+ /* Must be done *before* bridge_prop_string_to_uint() so that the type is known */
+ s_bridge_port = (NMSettingBridgePort *) nm_setting_bridge_port_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_bridge_port));
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ priority = priority_c ? g_strdup (priority_c) : NULL;
+ path_cost = path_cost_c ? g_strdup (path_cost_c) : NULL;
+ hairpin = hairpin_c ? g_strdup (hairpin_c) : NULL;
+ if (ask)
+ do_questionnaire_bridge_slave (&priority, &path_cost, &hairpin);
+
+ if (priority)
+ if (!bridge_prop_string_to_uint (priority, "priority", NM_TYPE_SETTING_BRIDGE_PORT,
+ NM_SETTING_BRIDGE_PORT_PRIORITY, &prio_int, error))
+ goto cleanup_bridge_slave;
+ if (path_cost)
+ if (!bridge_prop_string_to_uint (path_cost, "path-cost", NM_TYPE_SETTING_BRIDGE_PORT,
+ NM_SETTING_BRIDGE_PORT_PATH_COST, &path_cost_int, error))
+ goto cleanup_bridge_slave;
+ if (hairpin) {
+ GError *tmp_err = NULL;
+ if (!nmc_string_to_bool (hairpin, &hairpin_bool, &tmp_err)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'hairpin': %s."), tmp_err->message);
+ g_clear_error (&tmp_err);
+ goto cleanup_bridge_slave;
+ }
+ }
+
+ /* Change properties in 'connection' setting */
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : _strip_master_prefix (master, NULL),
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
+ NULL);
+
+ /* Add ethernet setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ if (priority)
+ g_object_set (s_bridge_port, NM_SETTING_BRIDGE_PORT_PRIORITY, prio_int, NULL);
+ if (path_cost)
+ g_object_set (s_bridge_port, NM_SETTING_BRIDGE_PORT_PATH_COST, path_cost_int, NULL);
+ if (hairpin)
+ g_object_set (s_bridge_port, NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, hairpin_bool, NULL);
+
+ success = TRUE;
+cleanup_bridge_slave:
+ g_free (master_ask);
+ g_free (priority);
+ g_free (path_cost);
+ g_free (hairpin);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_VPN_SETTING_NAME)) {
+ /* Build up the settings required for 'vpn' */
+ gboolean success = FALSE;
+ const char *vpn_type = NULL;
+ char *vpn_type_ask = NULL;
+ const char *user_c = NULL;
+ char *user = NULL;
+ const char *st;
+ char *service_type = NULL;
+ nmc_arg_t exp_args[] = { {"vpn-type", TRUE, &vpn_type, !ask},
+ {"user", TRUE, &user_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!vpn_type && ask)
+ vpn_type = vpn_type_ask = nmc_readline (PROMPT_VPN_TYPE);
+ if (!vpn_type) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'vpn-type' is required."));
+ goto cleanup_vpn;
+ }
+ if (vpn_type_ask)
+ vpn_type = g_strstrip (vpn_type_ask);
+
+ if (!(st = nmc_string_is_valid (vpn_type, nmc_known_vpns, NULL))) {
+ printf (_("Warning: 'vpn-type': %s not known.\n"), vpn_type);
+ st = vpn_type;
+ }
+ service_type = g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, st);
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ user = user_c ? g_strdup (user_c) : NULL;
+ if (ask)
+ do_questionnaire_vpn (&user);
+
+ /* Add 'vpn' setting */
+ s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_vpn));
+
+ g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, service_type, NULL);
+ g_object_set (s_vpn, NM_SETTING_VPN_USER_NAME, user, NULL);
+
+ success = TRUE;
+cleanup_vpn:
+ g_free (vpn_type_ask);
+ g_free (service_type);
+ g_free (user);
+ if (!success)
+ return FALSE;
+
+ } else if (!strcmp (con_type, NM_SETTING_OLPC_MESH_SETTING_NAME)) {
+ /* Build up the settings required for 'olpc' */
+ gboolean success = FALSE;
+ char *ssid_ask = NULL;
+ const char *ssid = NULL;
+ GByteArray *ssid_arr;
+ const char *channel_c = NULL;
+ char *channel = NULL;
+ unsigned long chan;
+ const char *dhcp_anycast_c = NULL;
+ char *dhcp_anycast = NULL;
+ GByteArray *array = NULL;
+ nmc_arg_t exp_args[] = { {"ssid", TRUE, &ssid, !ask},
+ {"channel", TRUE, &channel_c, FALSE},
+ {"dhcp-anycast", TRUE, &dhcp_anycast_c, FALSE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
+ return FALSE;
+
+ if (!ssid && ask)
+ ssid = ssid_ask = nmc_readline (_("SSID: "));
+ if (!ssid) {
+ g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'ssid' is required."));
+ goto cleanup_olpc;
+ }
+
+ /* Also ask for all optional arguments if '--ask' is specified. */
+ channel = channel_c ? g_strdup (channel_c) : NULL;
+ dhcp_anycast = dhcp_anycast_c ? g_strdup (dhcp_anycast_c) : NULL;
+ if (ask)
+ do_questionnaire_olpc (&channel, &dhcp_anycast);
+
+ if (channel) {
+ if (!nmc_string_to_uint (channel, TRUE, 1, 13, &chan)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: 'channel': '%s' is not valid; use <1-13>."),
+ channel);
+ goto cleanup_olpc;
+ }
+ }
+ if (!check_and_convert_mac (dhcp_anycast, &array, ARPHRD_ETHER, "dhcp-anycast", error))
+ goto cleanup_olpc;
+
+ /* Add OLPC mesh setting */
+ s_olpc_mesh = (NMSettingOlpcMesh *) nm_setting_olpc_mesh_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_olpc_mesh));
+
+ ssid_arr = g_byte_array_sized_new (strlen (ssid));
+ g_byte_array_append (ssid_arr, (const guint8 *) ssid, strlen (ssid));
+ g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_SSID, ssid_arr, NULL);
+ if (channel)
+ g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_CHANNEL, chan, NULL);
else
- g_string_printf (nmc->return_text, _("Error: No suitable device found."));
+ g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_CHANNEL, 1, NULL);
+ if (array) {
+ g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, array, NULL);
+ g_byte_array_free (array, TRUE);
+ }
+ g_byte_array_free (ssid_arr, TRUE);
+
+ success = TRUE;
+cleanup_olpc:
+ g_free (ssid_ask);
+ g_free (channel);
+ g_free (dhcp_anycast);
+ if (!success)
+ return FALSE;
+
+ } else {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: '%s' is not a valid connection type."),
+ con_type);
+ return FALSE;
+ }
+
+ /* Read and add IP configuration */
+ if ( strcmp (con_type, "bond-slave") != 0
+ && strcmp (con_type, "team-slave") != 0
+ && strcmp (con_type, "bridge-slave") != 0) {
+
+ NMIP4Address *ip4addr = NULL;
+ NMIP6Address *ip6addr = NULL;
+ const char *ip4 = NULL, *gw4 = NULL, *ip6 = NULL, *gw6 = NULL;
+ nmc_arg_t exp_args[] = { {"ip4", TRUE, &ip4, FALSE}, {"gw4", TRUE, &gw4, FALSE},
+ {"ip6", TRUE, &ip6, FALSE}, {"gw6", TRUE, &gw6, FALSE},
+ {NULL} };
+
+ while (argc) {
+ nmc_arg_t *p;
+
+ /* reset 'found' flag */
+ for (p = exp_args; p->name; p++)
+ p->found = FALSE;
+
+ ip4 = gw4 = ip6 = gw6 = NULL;
+
+ if (!nmc_parse_args (exp_args, TRUE, &argc, &argv, error))
+ return FALSE;
+
+ /* coverity[dead_error_begin] */
+ if (ip4) {
+ ip4addr = nmc_parse_and_build_ip4_address (ip4, gw4, error);
+ if (!ip4addr) {
+ g_prefix_error (error, _("Error: "));
+ return FALSE;
+ }
+ add_ip4_address_to_connection (ip4addr, connection);
+ }
+
+ /* coverity[dead_error_begin] */
+ if (ip6) {
+ ip6addr = nmc_parse_and_build_ip6_address (ip6, gw6, error);
+ if (!ip6addr) {
+ g_prefix_error (error, _("Error: "));
+ return FALSE;
+ }
+ add_ip6_address_to_connection (ip6addr, connection);
+ }
+ }
+
+ /* Ask for addresses if '--ask' is specified. */
+ if (ask)
+ do_questionnaire_ip (connection);
+ }
+
+ return TRUE;
+}
+
+static char *
+unique_connection_name (GSList *list, const char *try_name)
+{
+ NMConnection *connection;
+ const char *name;
+ char *new_name;
+ unsigned int num = 1;
+ GSList *iterator = list;
+
+ new_name = g_strdup (try_name);
+ while (iterator) {
+ connection = NM_CONNECTION (iterator->data);
+
+ name = nm_connection_get_id (connection);
+ if (g_strcmp0 (new_name, name) == 0) {
+ g_free (new_name);
+ new_name = g_strdup_printf ("%s-%d", try_name, num++);
+ iterator = list;
+ }
+ iterator = g_slist_next (iterator);
+ }
+ return new_name;
+}
+
+typedef struct {
+ NmCli *nmc;
+ char *con_name;
+} AddConnectionInfo;
+
+static void
+add_connection_cb (NMRemoteSettings *settings,
+ NMRemoteConnection *connection,
+ GError *error,
+ gpointer user_data)
+{
+ AddConnectionInfo *info = (AddConnectionInfo *) user_data;
+ NmCli *nmc = info->nmc;
+
+ if (error) {
+ g_string_printf (nmc->return_text,
+ _("Error: Failed to add '%s' connection: (%d) %s"),
+ info->con_name, error->code, error->message);
nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ } else {
+ printf (_("Connection '%s' (%s) successfully added.\n"),
+ nm_connection_get_id (NM_CONNECTION (connection)),
+ nm_connection_get_uuid (NM_CONNECTION (connection)));
+ }
+
+ g_free (info->con_name);
+ g_free (info);
+ quit ();
+}
+
+static gboolean
+add_new_connection (gboolean persistent,
+ NMRemoteSettings *settings,
+ NMConnection *connection,
+ NMRemoteSettingsAddConnectionFunc callback,
+ gpointer user_data)
+{
+ if (persistent)
+ return nm_remote_settings_add_connection (settings, connection, callback, user_data);
+ else
+ return nm_remote_settings_add_connection_unsaved (settings, connection, callback, user_data);
+}
+
+static void
+update_connection (gboolean persistent,
+ NMRemoteConnection *connection,
+ NMRemoteConnectionResultFunc callback,
+ gpointer user_data)
+{
+ if (persistent)
+ nm_remote_connection_commit_changes (connection, callback, user_data);
+ else
+ nm_remote_connection_commit_changes_unsaved (connection, callback, user_data);
+}
+
+static char *
+gen_func_vpn_types (const char *text, int state)
+{
+ return nmc_rl_gen_func_basic (text, state, nmc_known_vpns);
+}
+
+static char *
+gen_func_bool_values_l10n (const char *text, int state)
+{
+ const char *words[] = { WORD_LOC_YES, WORD_LOC_NO, NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_func_ib_type (const char *text, int state)
+{
+ const char *words[] = { "datagram", "connected", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_func_bt_type (const char *text, int state)
+{
+ const char *words[] = { "panu", "dun-gsm", "dun-cdma", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_func_bond_mode (const char *text, int state)
+{
+ const char *words[] = { "balance-rr", "active-backup", "balance-xor", "broadcast",
+ "802.3ad", "balance-tlb", "balance-alb", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+static char *
+gen_func_bond_mon_mode (const char *text, int state)
+{
+ const char *words[] = { "miimon", "arp", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_func_master_ifnames (const char *text, int state)
+{
+ GSList *iter;
+ GPtrArray *ifnames;
+ char *ret;
+ NMConnection *con;
+ NMSettingConnection *s_con;
+ const char *con_type, *ifname;
+
+ if (!nm_cli.system_connections)
+ return NULL;
+
+ /* Disable appending space after completion */
+ rl_completion_append_character = '\0';
+
+ ifnames = g_ptr_array_sized_new (20);
+ for (iter = nm_cli.system_connections; iter; iter = g_slist_next (iter)) {
+ con = NM_CONNECTION (iter->data);
+ s_con = nm_connection_get_setting_connection (con);
+ g_assert (s_con);
+ con_type = nm_setting_connection_get_connection_type (s_con);
+ if (g_strcmp0 (con_type, nmc_tab_completion.con_type) != 0)
+ continue;
+ ifname = nm_connection_get_virtual_iface_name (con);
+ g_ptr_array_add (ifnames, (gpointer) ifname);
+ }
+ g_ptr_array_add (ifnames, (gpointer) NULL);
+
+ ret = nmc_rl_gen_func_basic (text, state, (const char **) ifnames->pdata);
+
+ g_ptr_array_free (ifnames, TRUE);
+ return ret;
+}
+
+static gboolean
+is_single_word (const char* line)
+{
+ size_t n1, n2, n3;
+
+ n1 = strspn (line, " \t");
+ n2 = strcspn (line+n1, " \t\0") + n1;
+ n3 = strspn (line+n2, " \t");
+
+ if (n3 == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static char **
+nmcli_con_add_tab_completion (const char *text, int start, int end)
+{
+ char **match_array = NULL;
+ rl_compentry_func_t *generator_func = NULL;
+
+ /* Disable readline's default filename completion */
+ rl_attempted_completion_over = 1;
+
+ /* Restore standard append character to space */
+ rl_completion_append_character = ' ';
+
+ if (!is_single_word (rl_line_buffer))
+ return NULL;
+
+ if (g_strcmp0 (rl_prompt, PROMPT_CON_TYPE) == 0)
+ generator_func = gen_connection_types;
+ else if (g_strcmp0 (rl_prompt, PROMPT_VPN_TYPE) == 0)
+ generator_func = gen_func_vpn_types;
+ else if ( g_strcmp0 (rl_prompt, PROMPT_BOND_MASTER) == 0
+ || g_strcmp0 (rl_prompt, PROMPT_TEAM_MASTER) == 0
+ || g_strcmp0 (rl_prompt, PROMPT_BRIDGE_MASTER) == 0)
+ generator_func = gen_func_master_ifnames;
+ else if ( g_str_has_suffix (rl_prompt, prompt_yes_no (TRUE, NULL))
+ || g_str_has_suffix (rl_prompt, prompt_yes_no (TRUE, ":"))
+ || g_str_has_suffix (rl_prompt, prompt_yes_no (FALSE, NULL))
+ || g_str_has_suffix (rl_prompt, prompt_yes_no (FALSE, ":")))
+ generator_func = gen_func_bool_values_l10n;
+ else if (g_str_has_suffix (rl_prompt, PROMPT_IB_MODE))
+ generator_func = gen_func_ib_type;
+ else if (g_str_has_suffix (rl_prompt, PROMPT_BT_TYPE))
+ generator_func = gen_func_bt_type;
+ else if (g_str_has_prefix (rl_prompt, PROMPT_BOND_MODE))
+ generator_func = gen_func_bond_mode;
+ else if (g_str_has_suffix (rl_prompt, PROMPT_BOND_MON_MODE))
+ generator_func = gen_func_bond_mon_mode;
+
+ if (generator_func)
+ match_array = rl_completion_matches (text, generator_func);
+
+ return match_array;
+}
+
+static NMCResultCode
+do_connection_add (NmCli *nmc, int argc, char **argv)
+{
+ NMConnection *connection = NULL;
+ NMSettingConnection *s_con;
+ char *uuid;
+ char *default_name = NULL;
+ const char *type = NULL;
+ char *type_ask = NULL;
+ const char *con_name = NULL;
+ const char *autoconnect = NULL;
+ gboolean auto_bool = TRUE;
+ const char *ifname = NULL;
+ char *ifname_ask = NULL;
+ gboolean ifname_mandatory = TRUE;
+ const char *save = NULL;
+ gboolean save_bool = TRUE;
+ AddConnectionInfo *info = NULL;
+ const char *setting_name;
+ GError *error = NULL;
+ nmc_arg_t exp_args[] = { {"type", TRUE, &type, !nmc->ask},
+ {"con-name", TRUE, &con_name, FALSE},
+ {"autoconnect", TRUE, &autoconnect, FALSE},
+ {"ifname", TRUE, &ifname, FALSE},
+ {"save", TRUE, &save, FALSE},
+ {NULL} };
+
+ rl_attempted_completion_function = (rl_completion_func_t *) nmcli_con_add_tab_completion;
+
+ nmc->return_value = NMC_RESULT_SUCCESS;
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, &error)) {
+ g_string_assign (nmc->return_text, error->message);
+ nmc->return_value = error->code;
+ g_clear_error (&error);
+ goto error;
+ }
+
+ if (!type && nmc->ask) {
+ char *types_tmp = get_valid_options_string (nmc_valid_connection_types);
+ printf ("Valid types: [%s]\n", types_tmp);
+ type = type_ask = nmc_readline (PROMPT_CON_TYPE);
+ g_free (types_tmp);
+ }
+ if (!type) {
+ g_string_printf (nmc->return_text, _("Error: 'type' argument is required."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ if (type_ask)
+ type = g_strstrip (type_ask);
+
+ if (!(setting_name = check_valid_name (type, nmc_valid_connection_types, &error))) {
+ g_string_printf (nmc->return_text, _("Error: invalid connection type; %s."),
+ error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_clear_error (&error);
+ goto error;
+ }
+ if (autoconnect) {
+ GError *tmp_err = NULL;
+ if (!nmc_string_to_bool (autoconnect, &auto_bool, &tmp_err)) {
+ g_string_printf (nmc->return_text, _("Error: 'autoconnect': %s."),
+ tmp_err->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_clear_error (&tmp_err);
+ goto error;
+ }
+ }
+ if (save) {
+ GError *tmp_err = NULL;
+ if (!nmc_string_to_bool (save, &save_bool, &tmp_err)) {
+ g_string_printf (nmc->return_text, _("Error: 'save': %s."),
+ tmp_err->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_clear_error (&tmp_err);
+ goto error;
+ }
+ }
+
+ /* ifname is mandatory for all connection types except virtual ones (bond, team, bridge, vlan) */
+ if ( strcmp (type, NM_SETTING_BOND_SETTING_NAME) == 0
+ || strcmp (type, NM_SETTING_TEAM_SETTING_NAME) == 0
+ || strcmp (type, NM_SETTING_BRIDGE_SETTING_NAME) == 0
+ || strcmp (type, NM_SETTING_VLAN_SETTING_NAME) == 0)
+ ifname_mandatory = FALSE;
+
+ if (!ifname && ifname_mandatory && nmc->ask) {
+ ifname = ifname_ask = nmc_readline (_("Interface name [*]: "));
+ if (!ifname)
+ ifname = ifname_ask = g_strdup ("*");
+ }
+ if (!ifname && ifname_mandatory) {
+ g_string_printf (nmc->return_text, _("Error: 'ifname' argument is required."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ if (ifname) {
+ if (!nm_utils_iface_valid_name (ifname) && strcmp (ifname, "*") != 0) {
+ g_string_printf (nmc->return_text,
+ _("Error: 'ifname': '%s' is not a valid interface nor '*'."),
+ ifname);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ /* Special value of '*' means no specific interface name */
+ if (strcmp (ifname, "*") == 0)
+ ifname = NULL;
+ }
+
+ /* Create a new connection object */
+ connection = nm_connection_new ();
+
+ /* Build up the 'connection' setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ uuid = nm_utils_uuid_generate ();
+ if (con_name)
+ default_name = g_strdup (con_name);
+ else {
+ char *try_name = ifname ?
+ g_strdup_printf ("%s-%s", get_name_alias (setting_name, nmc_valid_connection_types), ifname)
+ : g_strdup (get_name_alias (setting_name, nmc_valid_connection_types));
+ default_name = unique_connection_name (nmc->system_connections, try_name);
+ g_free (try_name);
+ }
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, default_name,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, setting_name,
+ NM_SETTING_CONNECTION_AUTOCONNECT, auto_bool,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, ifname,
+ NULL);
+ g_free (uuid);
+ g_free (default_name);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ if (!complete_connection_by_type (connection,
+ setting_name,
+ nmc->system_connections,
+ nmc->ask,
+ argc,
+ argv,
+ &error)) {
+ g_string_assign (nmc->return_text, error->message);
+ nmc->return_value = error->code;
g_clear_error (&error);
goto error;
}
- /* Use nowait_flag instead of should_wait because exiting has to be postponed till
- * active_connection_state_cb() is called. That gives NM time to check our permissions
- * and we can follow activation progress.
- */
- nmc->nowait_flag = !wait;
nmc->should_wait = TRUE;
- info = g_malloc0 (sizeof (ActivateConnectionInfo));
+ info = g_malloc0 (sizeof (AddConnectionInfo));
info->nmc = nmc;
- info->device = device;
+ info->con_name = g_strdup (nm_connection_get_id (connection));
- nm_client_activate_connection (nmc->client,
- connection,
- device,
- spec_object,
- activate_connection_cb,
- info);
+ /* Tell the settings service to add the new connection */
+ add_new_connection (save_bool,
+ nmc->system_settings,
+ connection,
+ add_connection_cb,
+ info);
- /* Start progress indication */
- if (nmc->print_output == NMC_PRINT_PRETTY)
- progress_id = g_timeout_add (120, progress_cb, "preparing");
+ if (connection)
+ g_object_unref (connection);
return nmc->return_value;
+
error:
+ if (connection)
+ g_object_unref (connection);
+ g_free (type_ask);
+ g_free (ifname_ask);
+
nmc->should_wait = FALSE;
return nmc->return_value;
}
-static NMCResultCode
-do_connection_down (NmCli *nmc, int argc, char **argv)
+
+/*----------------------------------------------------------------------------*/
+/* Functions for readline TAB completion in editor */
+
+static void
+uuid_display_hook (char **array, int len, int max_len)
{
- NMConnection *connection = NULL;
- NMActiveConnection *active = NULL;
- GError *error = NULL;
- const GPtrArray *active_cons;
- const char *con_path;
- const char *active_path;
- gboolean id_specified = FALSE;
- gboolean wait = TRUE;
- int i;
+ NMConnection *con;
+ int i, max = 0;
+ char *tmp;
+ const char *id;
- while (argc > 0) {
- if (strcmp (*argv, "id") == 0 || strcmp (*argv, "uuid") == 0) {
- const char *selector = *argv;
- id_specified = TRUE;
+ for (i = 1; i <= len; i++) {
+ con = nmc_find_connection (nmc_tab_completion.nmc->system_connections, "uuid", array[i], NULL);
+ id = con ? nm_connection_get_id (con) : NULL;
+ if (id) {
+ tmp = g_strdup_printf ("%s (%s)", array[i], id);
+ g_free (array[i]);
+ array[i] = tmp;
+ if (max < strlen (id))
+ max = strlen (id);
+ }
+ }
+ rl_display_match_list (array, len, max_len + max + 3);
+ rl_forced_update_display ();
+}
- if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+static char *pre_input_deftext;
+static int
+set_deftext (void)
+{
+ if (pre_input_deftext && rl_startup_hook) {
+ rl_insert_text (pre_input_deftext);
+ g_free (pre_input_deftext);
+ pre_input_deftext = NULL;
+ rl_startup_hook = NULL;
+ }
+ return 0;
+}
+
+static char *
+gen_nmcli_cmds_menu (const char *text, int state)
+{
+ const char *words[] = { "goto", "set", "remove", "describe", "print", "verify",
+ "save", "activate", "back", "help", "quit", "nmcli",
+ NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_nmcli_cmds_submenu (const char *text, int state)
+{
+ const char *words[] = { "set", "add", "change", "remove", "describe",
+ "print", "back", "help", "quit",
+ NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_cmd_nmcli (const char *text, int state)
+{
+ const char *words[] = { "status-line", "save-confirmation", "prompt-color", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_cmd_nmcli_prompt_color (const char *text, int state)
+{
+ const char *words[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_func_bool_values (const char *text, int state)
+{
+ const char *words[] = { "yes", "no", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_cmd_verify0 (const char *text, int state)
+{
+ const char *words[] = { "all", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_cmd_print0 (const char *text, int state)
+{
+ static char **words = NULL;
+ char *ret = NULL;
+
+ if (!state) {
+ GHashTable *settings;
+ GHashTableIter iter;
+ const char *setting_name;
+ int i = 0;
+
+ settings = nm_connection_to_hash (nmc_tab_completion.connection, NM_SETTING_HASH_FLAG_NO_SECRETS);
+ words = g_new (char *, g_hash_table_size (settings) + 2);
+ g_hash_table_iter_init (&iter, settings);
+ while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, NULL))
+ words [i++] = g_strdup (setting_name);
+ words[i++] = g_strdup ("all");
+ words[i] = NULL;
+ g_hash_table_unref (settings);
+ }
+
+ if (words) {
+ ret = nmc_rl_gen_func_basic (text, state, (const char **) words);
+ if (ret == NULL) {
+ g_strfreev (words);
+ words = NULL;
+ }
+ }
+ return ret;
+}
+
+static char *
+gen_cmd_print2 (const char *text, int state)
+{
+ const char *words[] = { "setting", "connection", "all", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_cmd_save (const char *text, int state)
+{
+ const char *words[] = { "persistent", "temporary", NULL };
+ return nmc_rl_gen_func_basic (text, state, words);
+}
+
+static char *
+gen_connection_types (const char *text, int state)
+{
+ static int list_idx, len;
+ const char *c_type, *a_type;
+
+ if (!state) {
+ list_idx = 0;
+ len = strlen (text);
+ }
+
+ while (nmc_valid_connection_types[list_idx].name) {
+ a_type = nmc_valid_connection_types[list_idx].alias;
+ c_type = nmc_valid_connection_types[list_idx].name;
+ list_idx++;
+ if (a_type && !strncmp (text, a_type, len))
+ return g_strdup (a_type);
+ if (c_type && !strncmp (text, c_type, len))
+ return g_strdup (c_type);
+ }
+
+ return NULL;
+}
+
+static char *
+gen_setting_names (const char *text, int state)
+{
+ static int list_idx, len;
+ const char *s_name, *a_name;
+ const NameItem *valid_settings_arr;
+
+ if (!state) {
+ list_idx = 0;
+ len = strlen (text);
+ }
+
+ valid_settings_arr = get_valid_settings_array (nmc_tab_completion.con_type);
+ if (!valid_settings_arr)
+ return NULL;
+ while (valid_settings_arr[list_idx].name) {
+ a_name = valid_settings_arr[list_idx].alias;
+ s_name = valid_settings_arr[list_idx].name;
+ list_idx++;
+ if (len == 0 && a_name)
+ return g_strdup_printf ("%s (%s)", s_name, a_name);
+ if (a_name && !strncmp (text, a_name, len))
+ return g_strdup (a_name);
+ if (s_name && !strncmp (text, s_name, len))
+ return g_strdup (s_name);
+ }
+ return NULL;
+}
+
+static char *
+gen_property_names (const char *text, int state)
+{
+ NMSetting *setting = NULL;
+ char **valid_props = NULL;
+ char *ret = NULL;
+ const char *line = rl_line_buffer;
+ const char *setting_name;
+ char **strv = NULL;
+ const NameItem *valid_settings_arr;
+ const char *p1;
+
+ /* Try to get the setting from 'line' - setting_name.property */
+ p1 = strchr (line, '.');
+ if (p1) {
+ while (p1 > line && !g_ascii_isspace (*p1))
+ p1--;
+
+ strv = g_strsplit (p1+1, ".", 2);
+
+ valid_settings_arr = get_valid_settings_array (nmc_tab_completion.con_type);
+ setting_name = check_valid_name (strv[0], valid_settings_arr, NULL);
+ setting = nmc_setting_new_for_name (setting_name);
+ } else {
+ /* Else take the current setting, if any */
+ setting = nmc_tab_completion.setting ? g_object_ref (nmc_tab_completion.setting) : NULL;
+ }
+
+ if (setting) {
+ valid_props = nmc_setting_get_valid_properties (setting);
+ ret = nmc_rl_gen_func_basic (text, state, (const char **) valid_props);
+ }
+
+ g_strfreev (strv);
+ g_strfreev (valid_props);
+ if (setting)
+ g_object_unref (setting);
+ return ret;
+}
+
+static char *
+gen_compat_devices (const char *text, int state)
+{
+ int i, j = 0;
+ const GPtrArray *devices;
+ const char **compatible_devices;
+ char *ret;
+
+ devices = nm_client_get_devices (nmc_tab_completion.nmc->client);
+ if (!devices || devices->len < 1)
+ return NULL;
+
+ compatible_devices = g_new (const char *, devices->len + 1);
+ for (i = 0; i < devices->len; i++) {
+ NMDevice *dev = g_ptr_array_index (devices, i);
+ const char *ifname = nm_device_get_iface (dev);
+ NMDevice *device = NULL;
+ const char *spec_object = NULL;
+
+ if (find_device_for_connection (nmc_tab_completion.nmc, nmc_tab_completion.connection,
+ ifname, NULL, NULL, &device, &spec_object, NULL)) {
+ compatible_devices[j++] = ifname;
+ }
+ }
+ compatible_devices[j] = NULL;
+
+ ret = nmc_rl_gen_func_basic (text, state, compatible_devices);
+
+ g_free (compatible_devices);
+ return ret;
+}
+
+static char *
+gen_vpn_uuids (const char *text, int state)
+{
+ GSList *iter;
+ guint len;
+ int i = 0;
+ const char **uuids;
+ char *ret;
+
+ len = g_slist_length (nmc_tab_completion.nmc->system_connections);
+ if (len < 1)
+ return NULL;
+
+ uuids = g_new (const char *, len + 1);
+ for (iter = nmc_tab_completion.nmc->system_connections; iter; iter = g_slist_next (iter)) {
+ const char *type = nm_connection_get_connection_type (NM_CONNECTION (iter->data));
+
+ if (g_strcmp0 (type, NM_SETTING_VPN_SETTING_NAME) == 0)
+ uuids[i++] = nm_connection_get_uuid (NM_CONNECTION (iter->data));
+ }
+ uuids[i] = NULL;
+
+ ret = nmc_rl_gen_func_basic (text, state, uuids);
+
+ g_free (uuids);
+ return ret;
+}
+
+static rl_compentry_func_t *
+get_gen_func_cmd_nmcli (const char *str)
+{
+ if (!str)
+ return NULL;
+ if (matches (str, "status-line") == 0)
+ return gen_func_bool_values;
+ if (matches (str, "save-confirmation") == 0)
+ return gen_func_bool_values;
+ if (matches (str, "prompt-color") == 0)
+ return gen_cmd_nmcli_prompt_color;
+ return NULL;
+}
+
+/*
+ * Helper function parsing line for completion.
+ * IN:
+ * line : the whole line to be parsed
+ * end : the position of cursor in the line
+ * cmd : command to match
+ * OUT:
+ * cw_num : is set to the word number being completed (1, 2, 3, 4).
+ * prev_word : returns the previous word (so that we have some context).
+ *
+ * Returns TRUE when the first word of the 'line' matches 'cmd'.
+ *
+ * Examples:
+ * line="rem" cmd="remove" -> TRUE cw_num=1
+ * line="set con" cmd="set" -> TRUE cw_num=2
+ * line="go ipv4.method" cmd="goto" -> TRUE cw_num=2
+ * line=" des eth.mtu " cmd="describe" -> TRUE cw_num=3
+ * line=" bla ipv4.method" cmd="goto" -> FALSE
+ */
+static gboolean
+should_complete_cmd (const char *line, int end, const char *cmd,
+ int *cw_num, char **prev_word)
+{
+ char *tmp;
+ const char *word1, *word2, *word3;
+ size_t n1, n2, n3, n4, n5, n6;
+ gboolean word1_done, word2_done, word3_done;
+ gboolean ret = FALSE;
+
+ if (!line)
+ return FALSE;
+
+ tmp = g_strdup (line);
+
+ n1 = strspn (tmp, " \t");
+ n2 = strcspn (tmp+n1, " \t\0") + n1;
+ n3 = strspn (tmp+n2, " \t") + n2;
+ n4 = strcspn (tmp+n3, " \t\0") + n3;
+ n5 = strspn (tmp+n4, " \t") + n4;
+ n6 = strcspn (tmp+n5, " \t\0") + n5;
+
+ word1_done = end > n2;
+ word2_done = end > n4;
+ word3_done = end > n6;
+ tmp[n2] = tmp[n4] = tmp[n6] = '\0';
+
+ word1 = tmp[n1] ? tmp + n1 : NULL;
+ word2 = tmp[n3] ? tmp + n3 : NULL;
+ word3 = tmp[n5] ? tmp + n5 : NULL;
+
+ if (!word1_done) {
+ if (cw_num)
+ *cw_num = 1;
+ if (prev_word)
+ *prev_word = NULL;
+ } else if (!word2_done) {
+ if (cw_num)
+ *cw_num = 2;
+ if (prev_word)
+ *prev_word = g_strdup (word1);
+ } else if (!word3_done) {
+ if (cw_num)
+ *cw_num = 3;
+ if (prev_word)
+ *prev_word = g_strdup (word2);
+ } else {
+ if (cw_num)
+ *cw_num = 4;
+ if (prev_word)
+ *prev_word = g_strdup (word3);
+ }
+
+ if (word1 && matches (word1, cmd) == 0)
+ ret = TRUE;
+
+ g_free (tmp);
+ return ret;
+}
+
+static char *
+extract_property_name (const char *prompt, const char *line)
+{
+ char *prop = NULL;
+
+ /* If prompt is set take the property name from it, else extract it from line */
+ if (!prompt) {
+ const char *p1;
+ size_t num;
+ p1 = strchr (line, '.');
+ if (p1) {
+ p1++;
+ } else {
+ size_t n1, n2, n3;
+ n1 = strspn (line, " \t");
+ n2 = strcspn (line+n1, " \t\0") + n1;
+ n3 = strspn (line+n2, " \t") + n2;
+ p1 = line + n3;
+ }
+ num = strcspn (p1, " \t\0");
+ prop = g_strndup (p1, num);
+ } else {
+ const char *p1, *dot;
+ size_t num;
+ p1 = strchr (prompt, ' ');
+ /* prompt looks like this: "nmcli 802-1x>" or "nmcli 802-1x.pac-file>" */
+ if (p1) {
+ dot = strchr (p1 + 1, '.');
+ p1 = dot ? dot + 1 : p1;
+ num = strcspn (p1, ">");
+ prop = g_strndup (p1, num);
+ }
+ }
+
+ return prop;
+}
+
+static gboolean
+should_complete_files (const char *prompt, const char *line)
+{
+ char *prop;
+ gboolean found = FALSE;
+ const char *file_properties[] = {
+ /* '802-1x' properties */
+ "ca-cert",
+ "ca-path",
+ "client-cert",
+ "pac-file",
+ "phase2-ca-cert",
+ "phase2-ca-path",
+ "phase2-client-cert",
+ "private-key",
+ "phase2-private-key",
+ /* 'team' and 'team-port' properties */
+ "config",
+ NULL
+ };
+
+ prop = extract_property_name (prompt, line);
+ if (prop) {
+ found = !!nmc_string_is_valid (prop, file_properties, NULL);
+ g_free (prop);
+ }
+ return found;
+}
+
+static gboolean
+should_complete_vpn_uuids (const char *prompt, const char *line)
+{
+ char *prop;
+ gboolean found = FALSE;
+ const char *uuid_properties[] = {
+ /* 'connection' properties */
+ "secondaries",
+ NULL
+ };
+
+ prop = extract_property_name (prompt, line);
+ if (prop) {
+ found = !!nmc_string_is_valid (prop, uuid_properties, NULL);
+ g_free (prop);
+ }
+ return found;
+}
+
+/* from readline */
+extern int rl_complete_with_tilde_expansion;
+
+/*
+ * Attempt to complete on the contents of TEXT. START and END show the
+ * region of TEXT that contains the word to complete. We can use the
+ * entire line in case we want to do some simple parsing. Return the
+ * array of matches, or NULL if there aren't any.
+ */
+static char **
+nmcli_editor_tab_completion (const char *text, int start, int end)
+{
+ char **match_array = NULL;
+ const char *line = rl_line_buffer;
+ const char *prompt = rl_prompt;
+ rl_compentry_func_t *generator_func = NULL;
+ gboolean copy_char;
+ const char *p1;
+ char *p2, *prompt_tmp;
+ char *word = NULL;
+ size_t n1;
+ int num;
+
+ /* Restore standard append character to space */
+ rl_completion_append_character = ' ';
+
+ /* Restore standard function for displaying matches */
+ rl_completion_display_matches_hook = NULL;
+
+ /* Disable default filename completion */
+ rl_attempted_completion_over = 1;
+
+ /* Enable tilde expansion when filenames are completed */
+ rl_complete_with_tilde_expansion = 1;
+
+ /* Filter out possible ANSI color escape sequences */
+ p1 = prompt;
+ p2 = prompt_tmp = g_strdup (prompt);
+ copy_char = TRUE;
+ while (*p1) {
+ if (*p1 == '\33')
+ copy_char = FALSE;
+ if (copy_char)
+ *p2++ = *p1;
+ if (!copy_char && *p1 == 'm')
+ copy_char = TRUE;
+ p1++;
+ }
+ *p2 = '\0';
+
+ /* Find the first non-space character */
+ n1 = strspn (line, " \t");
+
+ /* Choose the right generator function */
+ if (strcmp (prompt_tmp, EDITOR_PROMPT_CON_TYPE) == 0)
+ generator_func = gen_connection_types;
+ else if (strcmp (prompt_tmp, EDITOR_PROMPT_SETTING) == 0)
+ generator_func = gen_setting_names;
+ else if (strcmp (prompt_tmp, EDITOR_PROMPT_PROPERTY) == 0)
+ generator_func = gen_property_names;
+ else if ( g_str_has_suffix (rl_prompt, prompt_yes_no (TRUE, NULL))
+ || g_str_has_suffix (rl_prompt, prompt_yes_no (FALSE, NULL)))
+ generator_func = gen_func_bool_values_l10n;
+ else if (g_str_has_prefix (prompt_tmp, "nmcli")) {
+ if (!strchr (prompt_tmp, '.')) {
+ int level = g_str_has_prefix (prompt_tmp, "nmcli>") ? 0 : 1;
+ const char *dot = strchr (line, '.');
+
+ /* Main menu - level 0,1 */
+ if (start == n1)
+ generator_func = gen_nmcli_cmds_menu;
+ else {
+ if (should_complete_cmd (line, end, "goto", &num, NULL) && num <= 2) {
+ if (level == 0 && (!dot || dot >= line + end))
+ generator_func = gen_setting_names;
+ else
+ generator_func = gen_property_names;
+ } else if (should_complete_cmd (line, end, "set", &num, NULL)) {
+ if (num < 3) {
+ if (level == 0 && (!dot || dot >= line + end)) {
+ generator_func = gen_setting_names;
+ rl_completion_append_character = '.';
+ } else
+ generator_func = gen_property_names;
+ } else if (num >= 3) {
+ if (num == 3 && should_complete_files (NULL, line))
+ rl_attempted_completion_over = 0;
+ if (should_complete_vpn_uuids (NULL, line)) {
+ rl_completion_display_matches_hook = uuid_display_hook;
+ generator_func = gen_vpn_uuids;
+ }
+ }
+ } else if ( ( should_complete_cmd (line, end, "remove", &num, NULL)
+ || should_complete_cmd (line, end, "describe", &num, NULL))
+ && num <= 2) {
+ if (level == 0 && (!dot || dot >= line + end)) {
+ generator_func = gen_setting_names;
+ rl_completion_append_character = '.';
+ } else
+ generator_func = gen_property_names;
+ } else if (should_complete_cmd (line, end, "nmcli", &num, &word)) {
+ if (num < 3)
+ generator_func = gen_cmd_nmcli;
+ else if (num == 3)
+ generator_func = get_gen_func_cmd_nmcli (word);
+ } else if (should_complete_cmd (line, end, "print", &num, NULL) && num <= 2) {
+ if (level == 0 && (!dot || dot >= line + end))
+ generator_func = gen_cmd_print0;
+ else
+ generator_func = gen_property_names;
+ } else if (should_complete_cmd (line, end, "verify", &num, NULL) && num <= 2) {
+ generator_func = gen_cmd_verify0;
+ } else if (should_complete_cmd (line, end, "activate", &num, NULL) && num <= 2) {
+ generator_func = gen_compat_devices;
+ } else if (should_complete_cmd (line, end, "save", &num, NULL) && num <= 2) {
+ generator_func = gen_cmd_save;
+ } else if (should_complete_cmd (line, end, "help", &num, NULL) && num <= 2)
+ generator_func = gen_nmcli_cmds_menu;
}
+ } else {
+ /* Submenu - level 2 */
+ if (start == n1)
+ generator_func = gen_nmcli_cmds_submenu;
+ else {
+ if ( should_complete_cmd (line, end, "add", &num, NULL)
+ || should_complete_cmd (line, end, "set", &num, NULL)) {
+ if (num <= 2 && should_complete_files (prompt_tmp, line))
+ rl_attempted_completion_over = 0;
+ else if (should_complete_vpn_uuids (prompt_tmp, line)) {
+ rl_completion_display_matches_hook = uuid_display_hook;
+ generator_func = gen_vpn_uuids;
+ }
+ }
+ if (should_complete_cmd (line, end, "print", &num, NULL) && num <= 2)
+ generator_func = gen_cmd_print2;
+ else if (should_complete_cmd (line, end, "help", &num, NULL) && num <= 2)
+ generator_func = gen_nmcli_cmds_submenu;
+ }
+ }
+ }
- connection = find_connection (nmc->system_connections, selector, *argv);
+ if (generator_func)
+ match_array = rl_completion_matches (text, generator_func);
- if (!connection) {
- g_string_printf (nmc->return_text, _("Error: Unknown connection: %s."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- goto error;
+ g_free (prompt_tmp);
+ g_free (word);
+ return match_array;
+}
+
+#define NMCLI_EDITOR_HISTORY ".nmcli-history"
+
+static void
+load_history_cmds (const char *uuid)
+{
+ GKeyFile *kf;
+ char *filename;
+ char **keys;
+ char *line;
+ size_t i;
+ GError *err = NULL;
+
+ filename = g_build_filename (g_get_home_dir (), NMCLI_EDITOR_HISTORY, NULL);
+ kf = g_key_file_new ();
+ if (!g_key_file_load_from_file (kf, filename, G_KEY_FILE_KEEP_COMMENTS, &err)) {
+ if (err->code == G_KEY_FILE_ERROR_PARSE)
+ printf ("Warning: %s parse error: %s\n", filename, err->message);
+ g_key_file_free (kf);
+ g_free (filename);
+ return;
+ }
+ keys = g_key_file_get_keys (kf, uuid, NULL, NULL);
+ for (i = 0; keys && keys[i]; i++) {
+ line = g_key_file_get_string (kf, uuid, keys[i], NULL);
+ if (line && *line)
+ add_history (line);
+ g_free (line);
+ }
+ g_strfreev (keys);
+ g_key_file_free (kf);
+ g_free (filename);
+}
+
+static void
+save_history_cmds (const char *uuid)
+{
+ HIST_ENTRY **hist = NULL;
+ GKeyFile *kf;
+ char *filename;
+ size_t i;
+ char *key;
+ char *data;
+ gsize len = 0;
+ GError *err = NULL;
+
+ hist = history_list ();
+ if (hist) {
+ filename = g_build_filename (g_get_home_dir (), NMCLI_EDITOR_HISTORY, NULL);
+ kf = g_key_file_new ();
+ if (!g_key_file_load_from_file (kf, filename, G_KEY_FILE_KEEP_COMMENTS, &err)) {
+ if ( err->code != G_FILE_ERROR_NOENT
+ && err->code != G_KEY_FILE_ERROR_NOT_FOUND) {
+ printf ("Warning: %s parse error: %s\n", filename, err->message);
+ g_key_file_free (kf);
+ g_free (filename);
+ g_clear_error (&err);
+ return;
}
+ g_clear_error (&err);
}
- else if (strcmp (*argv, "--nowait") == 0) {
- wait = FALSE;
+
+ /* Remove previous history group and save new history entries */
+ g_key_file_remove_group (kf, uuid, NULL);
+ for (i = 0; hist[i]; i++)
+ {
+ key = g_strdup_printf ("%zd", i);
+ g_key_file_set_string (kf, uuid, key, hist[i]->line);
+ g_free (key);
}
- else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+
+ /* Write history to file */
+ data = g_key_file_to_data (kf, &len, NULL);
+ if (data) {
+ g_file_set_contents (filename, data, len, NULL);
+ g_free (data);
}
+ g_key_file_free (kf);
+ g_free (filename);
+ }
+}
- argc--;
- argv++;
+/*----------------------------------------------------------------------------*/
+
+static void
+editor_show_connection (NMConnection *connection, NmCli *nmc)
+{
+ nmc->print_output = NMC_PRINT_PRETTY;
+ nmc->multiline_output = TRUE;
+ nmc->escape_values = 0;
+
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
+
+ nmc_connection_profile_details (connection, nmc);
+}
+
+static void
+editor_show_setting (NMSetting *setting, NmCli *nmc)
+{
+ printf (_("['%s' setting values]\n"),
+ nm_setting_get_name (setting));
+
+ nmc->print_output = NMC_PRINT_NORMAL;
+ nmc->multiline_output = TRUE;
+ nmc->escape_values = 0;
+
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
+
+ setting_details (setting, nmc, NULL);
+}
+
+typedef enum {
+ NMC_EDITOR_MAIN_CMD_UNKNOWN = 0,
+ NMC_EDITOR_MAIN_CMD_GOTO,
+ NMC_EDITOR_MAIN_CMD_REMOVE,
+ NMC_EDITOR_MAIN_CMD_SET,
+ NMC_EDITOR_MAIN_CMD_DESCRIBE,
+ NMC_EDITOR_MAIN_CMD_PRINT,
+ NMC_EDITOR_MAIN_CMD_VERIFY,
+ NMC_EDITOR_MAIN_CMD_SAVE,
+ NMC_EDITOR_MAIN_CMD_ACTIVATE,
+ NMC_EDITOR_MAIN_CMD_BACK,
+ NMC_EDITOR_MAIN_CMD_HELP,
+ NMC_EDITOR_MAIN_CMD_NMCLI,
+ NMC_EDITOR_MAIN_CMD_QUIT,
+} NmcEditorMainCmd;
+
+static NmcEditorMainCmd
+parse_editor_main_cmd (const char *cmd, char **cmd_arg)
+{
+ NmcEditorMainCmd editor_cmd = NMC_EDITOR_MAIN_CMD_UNKNOWN;
+ char **vec;
+
+ vec = nmc_strsplit_set (cmd, " \t", 2);
+ if (g_strv_length (vec) < 1) {
+ if (cmd_arg)
+ *cmd_arg = NULL;
+ return NMC_EDITOR_MAIN_CMD_UNKNOWN;
}
- if (!id_specified) {
- g_string_printf (nmc->return_text, _("Error: id or uuid has to be specified."));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ if (matches (vec[0], "goto") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_GOTO;
+ else if (matches (vec[0], "remove") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_REMOVE;
+ else if (matches (vec[0], "set") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_SET;
+ else if (matches (vec[0], "describe") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_DESCRIBE;
+ else if (matches (vec[0], "print") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_PRINT;
+ else if (matches (vec[0], "verify") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_VERIFY;
+ else if (matches (vec[0], "save") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_SAVE;
+ else if (matches (vec[0], "activate") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_ACTIVATE;
+ else if (matches (vec[0], "back") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_BACK;
+ else if (matches (vec[0], "help") == 0 || strcmp (vec[0], "?") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_HELP;
+ else if (matches (vec[0], "quit") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_QUIT;
+ else if (matches (vec[0], "nmcli") == 0)
+ editor_cmd = NMC_EDITOR_MAIN_CMD_NMCLI;
+
+ /* set pointer to command argument */
+ if (cmd_arg)
+ *cmd_arg = vec[1] ? g_strstrip (g_strdup (vec[1])) : NULL;
+
+ g_strfreev (vec);
+ return editor_cmd;
+}
+
+static void
+editor_main_usage (void)
+{
+ printf ("------------------------------------------------------------------------------\n");
+ /* TRANSLATORS: do not translate command names and keywords before ::
+ * However, you should translate terms enclosed in <>.
+ */
+ printf (_("---[ Main menu ]---\n"
+ "goto [<setting> | <prop>] :: go to a setting or property\n"
+ "remove <setting>[.<prop>] | <prop> :: remove setting or reset property value\n"
+ "set [<setting>.<prop> <value>] :: set property value\n"
+ "describe [<setting>.<prop>] :: describe property\n"
+ "print [all | <setting>[.<prop>]] :: print the connection\n"
+ "verify [all] :: verify the connection\n"
+ "save [persistent|temporary] :: save the connection\n"
+ "activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+ "back :: go one level up (back)\n"
+ "help/? [<command>] :: print this help\n"
+ "nmcli <conf-option> <value> :: nmcli configuration\n"
+ "quit :: exit nmcli\n"));
+ printf ("------------------------------------------------------------------------------\n");
+}
+
+static void
+editor_main_help (const char *command)
+{
+ if (!command)
+ editor_main_usage ();
+ else {
+ /* detailed command descriptions */
+ NmcEditorMainCmd cmd = parse_editor_main_cmd (command, NULL);
+
+ switch (cmd) {
+ case NMC_EDITOR_MAIN_CMD_GOTO:
+ printf (_("goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n\n"
+ "This command enters into a setting or property for editing it.\n\n"
+ "Examples: nmcli> goto connection\n"
+ " nmcli connection> goto secondaries\n"
+ " nmcli> goto ipv4.addresses\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_REMOVE:
+ printf (_("remove <setting>[.<prop>] :: remove setting or reset property value\n\n"
+ "This command removes an entire setting from the connection, or if a property\n"
+ "is given, resets that property to the default value.\n\n"
+ "Examples: nmcli> remove wifi-sec\n"
+ " nmcli> remove eth.mtu\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_SET:
+ printf (_("set [<setting>.<prop> <value>] :: set property value\n\n"
+ "This command sets property value.\n\n"
+ "Example: nmcli> set con.id My connection\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_DESCRIBE:
+ printf (_("describe [<setting>.<prop>] :: describe property\n\n"
+ "Shows property description. You can consult nm-settings(5) "
+ "manual page to see all NM settings and properties.\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_PRINT:
+ printf (_("print [all] :: print setting or connection values\n\n"
+ "Shows current property or the whole connection.\n\n"
+ "Example: nmcli ipv4> print all\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_VERIFY:
+ printf (_("verify [all] :: verify setting or connection validity\n\n"
+ "Verifies whether the setting or connection is valid and can "
+ "be saved later. It indicates invalid values on error.\n\n"
+ "Examples: nmcli> verify\n"
+ " nmcli bond> verify\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_SAVE:
+ printf (_("save [persistent|temporary] :: save the connection\n\n"
+ "Sends the connection profile to NetworkManager that either will save it\n"
+ "persistently, or will only keep it in memory. 'save' without an argument\n"
+ "means 'save persistent'.\n"
+ "Note that once you save the profile persistently those settings are saved\n"
+ "across reboot or restart. Subsequent changes can also be temporary or\n"
+ "persistent, but any temporary changes will not persist across reboot or\n"
+ "restart. If you want to fully remove the persistent connection, the connection\n"
+ "profile must be deleted.\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_ACTIVATE:
+ printf (_("activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n\n"
+ "Activates the connection.\n\n"
+ "Available options:\n"
+ "<ifname> - device the connection will be activated on\n"
+ "/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not specified)\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_BACK:
+ printf (_("back :: go to upper menu level\n\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_HELP:
+ printf (_("help/? [<command>] :: help for the nmcli commands\n\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_NMCLI:
+ printf (_("nmcli [<conf-option> <value>] :: nmcli configuration\n\n"
+ "Configures nmcli. The following options are available:\n"
+ "status-line yes | no [default: no]\n"
+ "save-confirmation yes | no [default: yes]\n"
+ "prompt-color <0-8> [default: 0]\n"
+ " 0 = normal\n"
+ " 1 = \33[30mblack\33[0m\n"
+ " 2 = \33[31mred\33[0m\n"
+ " 3 = \33[32mgreen\33[0m\n"
+ " 4 = \33[33myellow\33[0m\n"
+ " 5 = \33[34mblue\33[0m\n"
+ " 6 = \33[35mmagenta\33[0m\n"
+ " 7 = \33[36mcyan\33[0m\n"
+ " 8 = \33[37mwhite\33[0m\n"
+ "\n"
+ "Examples: nmcli> nmcli status-line yes\n"
+ " nmcli> nmcli save-confirmation no\n"
+ " nmcli> nmcli prompt-color 3\n"));
+ break;
+ case NMC_EDITOR_MAIN_CMD_QUIT:
+ printf (_("quit :: exit nmcli\n\n"
+ "This command exits nmcli. When the connection being edited "
+ "is not saved, the user is asked to confirm the action.\n"));
+ break;
+ default:
+ printf (_("Unknown command: '%s'\n"), command);
+ break;
+ }
}
+}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
+typedef enum {
+ NMC_EDITOR_SUB_CMD_UNKNOWN = 0,
+ NMC_EDITOR_SUB_CMD_SET,
+ NMC_EDITOR_SUB_CMD_ADD,
+ NMC_EDITOR_SUB_CMD_CHANGE,
+ NMC_EDITOR_SUB_CMD_REMOVE,
+ NMC_EDITOR_SUB_CMD_DESCRIBE,
+ NMC_EDITOR_SUB_CMD_PRINT,
+ NMC_EDITOR_SUB_CMD_BACK,
+ NMC_EDITOR_SUB_CMD_HELP,
+ NMC_EDITOR_SUB_CMD_QUIT
+} NmcEditorSubCmd;
+
+static NmcEditorSubCmd
+parse_editor_sub_cmd (const char *cmd, char **cmd_arg)
+{
+ NmcEditorSubCmd editor_cmd = NMC_EDITOR_SUB_CMD_UNKNOWN;
+ char **vec;
+
+ vec = nmc_strsplit_set (cmd, " \t", 2);
+ if (g_strv_length (vec) < 1) {
+ if (cmd_arg)
+ *cmd_arg = NULL;
+ return NMC_EDITOR_SUB_CMD_UNKNOWN;
+ }
+
+ if (matches (vec[0], "set") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_SET;
+ else if (matches (vec[0], "add") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_ADD;
+ else if (matches (vec[0], "change") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_CHANGE;
+ else if (matches (vec[0], "remove") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_REMOVE;
+ else if (matches (vec[0], "describe") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_DESCRIBE;
+ else if (matches (vec[0], "print") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_PRINT;
+ else if (matches (vec[0], "back") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_BACK;
+ else if (matches (vec[0], "help") == 0 || strcmp (vec[0], "?") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_HELP;
+ else if (matches (vec[0], "quit") == 0)
+ editor_cmd = NMC_EDITOR_SUB_CMD_QUIT;
+
+ /* set pointer to command argument */
+ if (cmd_arg)
+ *cmd_arg = g_strdup (vec[1]);
+
+ g_strfreev (vec);
+ return editor_cmd;
+}
+
+static void
+editor_sub_help (void)
+{
+ printf ("------------------------------------------------------------------------------\n");
+ /* TRANSLATORS: do not translate command names and keywords before ::
+ * However, you should translate terms enclosed in <>.
+ */
+ printf (_("---[ Property menu ]---\n"
+ "set [<value>] :: set new value\n"
+ "add [<value>] :: add new option to the property\n"
+ "change :: change current value\n"
+ "remove [<index> | <option>] :: delete the value\n"
+ "describe :: describe property\n"
+ "print [setting | connection] :: print property (setting/connection) value(s)\n"
+ "back :: go to upper level\n"
+ "help/? [<command>] :: print this help or command description\n"
+ "quit :: exit nmcli\n"));
+ printf ("------------------------------------------------------------------------------\n");
+}
+
+static void
+editor_sub_usage (const char *command)
+{
+
+ if (!command)
+ editor_sub_help ();
+ else {
+ /* detailed command descriptions */
+ NmcEditorSubCmd cmdsub = parse_editor_sub_cmd (command, NULL);
+
+ switch (cmdsub) {
+ case NMC_EDITOR_SUB_CMD_SET:
+ printf (_("set [<value>] :: set new value\n\n"
+ "This command sets provided <value> to this property\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_ADD:
+ printf (_("add [<value>] :: append new value to the property\n\n"
+ "This command adds provided <value> to this property, if "
+ "the property is of a container type. For single-valued "
+ "properties the property value is replaced (same as 'set').\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_CHANGE:
+ printf (_("change :: change current value\n\n"
+ "Displays current value and allows editing it.\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_REMOVE:
+ printf (_("remove [<value>|<index>|<option name>] :: delete the value\n\n"
+ "Removes the property value. For single-valued properties, this sets the\n"
+ "property back to its default value. For container-type properties, this removes\n"
+ "all the values of that property, or you can specify an argument to remove just\n"
+ "a single item or option. The argument is either a value or index of the item to\n"
+ "remove, or an option name (for properties with named options).\n\n"
+ "Examples: nmcli ipv4.dns> remove 8.8.8.8\n"
+ " nmcli ipv4.dns> remove 2\n"
+ " nmcli bond.options> remove downdelay\n\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_DESCRIBE:
+ printf (_("describe :: describe property\n\n"
+ "Shows property description. You can consult nm-settings(5) "
+ "manual page to see all NM settings and properties.\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_PRINT:
+ printf (_("print [property|setting|connection] :: print property (setting, connection) value(s)\n\n"
+ "Shows property value. Providing an argument you can also display "
+ "values for the whole setting or connection.\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_BACK:
+ printf (_("back :: go to upper menu level\n\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_HELP:
+ printf (_("help/? [<command>] :: help for nmcli commands\n\n"));
+ break;
+ case NMC_EDITOR_SUB_CMD_QUIT:
+ printf (_("quit :: exit nmcli\n\n"
+ "This command exits nmcli. When the connection being edited "
+ "is not saved, the user is asked to confirm the action.\n"));
+ break;
+ default:
+ printf (_("Unknown command: '%s'\n"), command);
+ break;
+ }
+ }
+}
+
+/*----------------------------------------------------------------------------*/
+
+typedef struct {
+ NMDevice *device;
+ NMActiveConnection *ac;
+ guint monitor_id;
+} MonitorACInfo;
+
+static gboolean nmc_editor_cb_called;
+static GError *nmc_editor_error;
+static MonitorACInfo *nmc_editor_monitor_ac;
+static GMutex nmc_editor_mutex;
+static GCond nmc_editor_cond;
+
+/*
+ * Store 'error' to shared 'nmc_editor_error' and monitoring info to
+ * 'nmc_editor_monitor_ac' and signal the condition so that
+ * the 'editor-thread' thread could process that.
+ */
+static void
+set_info_and_signal_editor_thread (GError *error, MonitorACInfo *monitor_ac_info)
+{
+ g_mutex_lock (&nmc_editor_mutex);
+ nmc_editor_cb_called = TRUE;
+ nmc_editor_error = error ? g_error_copy (error) : NULL;
+ nmc_editor_monitor_ac = monitor_ac_info;
+ g_cond_signal (&nmc_editor_cond);
+ g_mutex_unlock (&nmc_editor_mutex);
+}
+
+static void
+add_connection_editor_cb (NMRemoteSettings *settings,
+ NMRemoteConnection *connection,
+ GError *error,
+ gpointer user_data)
+{
+ set_info_and_signal_editor_thread (error, NULL);
+}
+
+static void
+update_connection_editor_cb (NMRemoteConnection *connection,
+ GError *error,
+ gpointer user_data)
+{
+ set_info_and_signal_editor_thread (error, NULL);
+}
+
+static gboolean
+progress_activation_editor_cb (gpointer user_data)
+{
+ MonitorACInfo *info = (MonitorACInfo *) user_data;
+ NMDevice *device = info->device;
+ NMActiveConnection *ac = info->ac;
+ NMActiveConnectionState ac_state;
+ NMDeviceState dev_state;
+
+ if (!device || !ac)
+ goto finish;
+
+ ac_state = nm_active_connection_get_state (ac);
+ dev_state = nm_device_get_state (device);
+
+ nmc_terminal_show_progress (nmc_device_state_to_string (dev_state));
+
+ if ( ac_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ || dev_state == NM_DEVICE_STATE_ACTIVATED) {
+ nmc_terminal_erase_line ();
+ printf (_("Connection successfully activated (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (ac)));
+ goto finish; /* we are done */
+ } else if ( ac_state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+ || dev_state == NM_DEVICE_STATE_FAILED) {
+ nmc_terminal_erase_line ();
+ printf (_("Error: Connection activation failed.\n"));
+ goto finish; /* we are done */
+ }
+
+ return TRUE;
+
+finish:
+ if (device)
+ g_object_unref (device);
+ if (ac)
+ g_object_unref (ac);
+ return FALSE;
+}
+
+static void
+activate_connection_editor_cb (NMClient *client,
+ NMActiveConnection *active,
+ GError *error,
+ gpointer user_data)
+{
+ ActivateConnectionInfo *info = (ActivateConnectionInfo *) user_data;
+ NMDevice *device = info->device;
+ const GPtrArray *ac_devs;
+ MonitorACInfo *monitor_ac_info = NULL;
+
+ if (!error) {
+ if (!device) {
+ ac_devs = nm_active_connection_get_devices (active);
+ device = ac_devs && ac_devs->len > 0 ? g_ptr_array_index (ac_devs, 0) : NULL;
+ }
+ if (device) {
+ monitor_ac_info = g_malloc0 (sizeof (AddConnectionInfo));
+ monitor_ac_info->device = g_object_ref (device);
+ monitor_ac_info->ac = active ? g_object_ref (active) : NULL;
+ monitor_ac_info->monitor_id = g_timeout_add (120, progress_activation_editor_cb, monitor_ac_info);
+ }
+ }
+ set_info_and_signal_editor_thread (error, monitor_ac_info);
+}
+
+/*----------------------------------------------------------------------------*/
+
+static void
+print_property_description (NMSetting *setting, const char *prop_name)
+{
+ char *desc;
+
+ desc = nmc_setting_get_property_desc (setting, prop_name);
+ printf ("\n=== [%s] ===\n%s\n", prop_name, desc);
+ g_free (desc);
+}
+
+static void
+print_setting_description (NMSetting *setting)
+{
+ /* Show description of all properties */
+ char **all_props;
+ int i;
+
+ all_props = nmc_setting_get_valid_properties (setting);
+ printf (("<<< %s >>>\n"), nm_setting_get_name (setting));
+ for (i = 0; all_props && all_props[i]; i++)
+ print_property_description (setting, all_props[i]);
+ g_strfreev (all_props);
+}
+
+static gboolean
+connection_remove_setting (NMConnection *connection, NMSetting *setting)
+{
+ gboolean mandatory;
+
+ g_return_val_if_fail (setting, FALSE);
+
+ mandatory = is_setting_mandatory (connection, setting);
+ if (!mandatory) {
+ nm_connection_remove_setting (connection, G_OBJECT_TYPE (setting));
+ return TRUE;
+ }
+ printf (_("Error: setting '%s' is mandatory and cannot be removed.\n"),
+ nm_setting_get_name (setting));
+ return FALSE;
+}
+
+static void
+editor_show_status_line (NMConnection *connection, gboolean dirty, gboolean temp)
+{
+ NMSettingConnection *s_con;
+ const char *con_type, *con_id, *con_uuid;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ con_type = nm_setting_connection_get_connection_type (s_con);
+ con_id = nm_connection_get_id (connection);
+ con_uuid = nm_connection_get_uuid (connection);
+
+ /* TRANSLATORS: status line in nmcli connection editor */
+ printf (_("[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"),
+ con_type, con_id, con_uuid,
+ dirty ? _("yes") : _("no"),
+ temp ? _("yes") : _("no"));
+}
+
+static gboolean
+refresh_remote_connection (GWeakRef *weak, NMRemoteConnection **remote)
+{
+ gboolean previous;
+
+ g_return_val_if_fail (remote != NULL, FALSE);
+
+ previous = (*remote != NULL);
+ if (*remote)
+ g_object_unref (*remote);
+ *remote = g_weak_ref_get (weak);
+
+ return (previous && !*remote);
+}
+
+static gboolean
+is_connection_dirty (NMConnection *connection, NMRemoteConnection *remote)
+{
+ return !nm_connection_compare (connection,
+ remote ? NM_CONNECTION (remote) : NULL,
+ NM_SETTING_COMPARE_FLAG_EXACT);
+}
+
+static gboolean
+confirm_quit (void)
+{
+ char *answer;
+ gboolean want_quit = FALSE;
+
+ answer = nmc_readline (_("The connection is not saved. "
+ "Do you really want to quit? %s"),
+ prompt_yes_no (FALSE, NULL));
+ answer = answer ? g_strstrip (answer) : NULL;
+ if (answer && matches (answer, WORD_LOC_YES) == 0)
+ want_quit = TRUE;
+
+ g_free (answer);
+ return want_quit;
+}
+
+/*
+ * Submenu for detailed property editing
+ * Return: TRUE - continue; FALSE - should quit
+ */
+static gboolean
+property_edit_submenu (NmCli *nmc,
+ NMConnection *connection,
+ NMRemoteConnection **rem_con,
+ GWeakRef *rem_con_weak,
+ NMSetting *curr_setting,
+ const char *prop_name)
+{
+ NmcEditorSubCmd cmdsub;
+ gboolean cmd_property_loop = TRUE;
+ gboolean should_quit = FALSE;
+ char *prop_val_user;
+ gboolean set_result;
+ GError *tmp_err = NULL;
+ char *prompt;
+ gboolean dirty;
+ GValue prop_g_value = G_VALUE_INIT;
+ gboolean temp_changes;
+ gboolean removed;
+
+ prompt = nmc_colorize (nmc->editor_prompt_color, "nmcli %s.%s> ",
+ nm_setting_get_name (curr_setting), prop_name);
+
+ while (cmd_property_loop) {
+ char *cmd_property_user;
+ char *cmd_property_arg;
+
+ /* Get the remote connection again, it may have disapeared */
+ removed = refresh_remote_connection (rem_con_weak, rem_con);
+ if (removed)
+ printf (_("The connection profile has been removed from another client. "
+ "You may type 'save' in the main menu to restore it.\n"));
+
+ /* Connection is dirty? (not saved or differs from the saved) */
+ dirty = is_connection_dirty (connection, *rem_con);
+ temp_changes = *rem_con ? nm_remote_connection_get_unsaved (*rem_con) : TRUE;
+ if (nmc->editor_status_line)
+ editor_show_status_line (connection, dirty, temp_changes);
+
+ cmd_property_user = nmc_readline ("%s", prompt);
+ if (!cmd_property_user || *cmd_property_user == '\0')
+ continue;
+ cmdsub = parse_editor_sub_cmd (g_strstrip (cmd_property_user), &cmd_property_arg);
+
+ switch (cmdsub) {
+ case NMC_EDITOR_SUB_CMD_SET:
+ case NMC_EDITOR_SUB_CMD_ADD:
+ /* list, arrays,...: SET replaces the whole property value
+ * ADD adds the new value(s)
+ * single values: : both SET and ADD sets the new value
+ */
+ if (!cmd_property_arg)
+ prop_val_user = nmc_readline (_("Enter '%s' value: "), prop_name);
+ else
+ prop_val_user = g_strdup (cmd_property_arg);
+
+ /* nmc_setting_set_property() only adds new value, thus we have to
+ * remove the original value and save it for error cases.
+ */
+ if (cmdsub == NMC_EDITOR_SUB_CMD_SET) {
+ nmc_property_get_gvalue (curr_setting, prop_name, &prop_g_value);
+ nmc_property_set_default_value (curr_setting, prop_name);
+ }
+
+ set_result = nmc_setting_set_property (curr_setting, prop_name, prop_val_user, &tmp_err);
+ g_free (prop_val_user);
+ if (!set_result) {
+ printf (_("Error: failed to set '%s' property: %s\n"), prop_name, tmp_err->message);
+ g_clear_error (&tmp_err);
+ if (cmdsub == NMC_EDITOR_SUB_CMD_SET)
+ nmc_property_set_gvalue (curr_setting, prop_name, &prop_g_value);
+ }
+ if (G_IS_VALUE (&prop_g_value))
+ g_value_unset (&prop_g_value);
+ break;
+
+ case NMC_EDITOR_SUB_CMD_CHANGE:
+ rl_startup_hook = set_deftext;
+ pre_input_deftext = nmc_setting_get_property_out2in (curr_setting, prop_name, NULL);
+ prop_val_user = nmc_readline (_("Edit '%s' value: "), prop_name);
+
+ nmc_property_get_gvalue (curr_setting, prop_name, &prop_g_value);
+ nmc_property_set_default_value (curr_setting, prop_name);
+
+ if (!nmc_setting_set_property (curr_setting, prop_name, prop_val_user, &tmp_err)) {
+ printf (_("Error: failed to set '%s' property: %s\n"), prop_name, tmp_err->message);
+ g_clear_error (&tmp_err);
+ nmc_property_set_gvalue (curr_setting, prop_name, &prop_g_value);
+ }
+ g_free (prop_val_user);
+ if (G_IS_VALUE (&prop_g_value))
+ g_value_unset (&prop_g_value);
+ break;
+
+ case NMC_EDITOR_SUB_CMD_REMOVE:
+ if (cmd_property_arg) {
+ unsigned long val_int = G_MAXUINT32;
+ char *option = NULL;
+
+ if (!nmc_string_to_uint (cmd_property_arg, TRUE, 0, G_MAXUINT32, &val_int))
+ option = g_strdup (cmd_property_arg);
+
+ if (!nmc_setting_remove_property_option (curr_setting, prop_name,
+ option ? g_strstrip (option) : NULL,
+ (guint32) val_int,
+ &tmp_err)) {
+ printf (_("Error: %s\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ g_free (option);
+ } else {
+ if (!nmc_setting_reset_property (curr_setting, prop_name, &tmp_err)) {
+ printf (_("Error: failed to remove value of '%s': %s\n"), prop_name,
+ tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ }
+ break;
+
+ case NMC_EDITOR_SUB_CMD_DESCRIBE:
+ /* Show property description */
+ print_property_description (curr_setting, prop_name);
+ break;
+
+ case NMC_EDITOR_SUB_CMD_PRINT:
+ /* Print current connection settings/properties */
+ if (cmd_property_arg) {
+ if (matches (cmd_property_arg, "setting") == 0)
+ editor_show_setting (curr_setting, nmc);
+ else if ( matches (cmd_property_arg, "connection") == 0
+ || matches (cmd_property_arg, "all") == 0)
+ editor_show_connection (connection, nmc);
+ else
+ printf (_("Unknown command argument: '%s'\n"), cmd_property_arg);
+ } else {
+ char *prop_val = nmc_setting_get_property (curr_setting, prop_name, NULL);
+ printf ("%s: %s\n", prop_name, prop_val);
+ g_free (prop_val);
+ }
+ break;
+
+ case NMC_EDITOR_SUB_CMD_BACK:
+ cmd_property_loop = FALSE;
+ break;
+
+ case NMC_EDITOR_SUB_CMD_HELP:
+ editor_sub_usage (cmd_property_arg);
+ break;
+
+ case NMC_EDITOR_SUB_CMD_QUIT:
+ if (is_connection_dirty (connection, *rem_con)) {
+ if (confirm_quit ()) {
+ cmd_property_loop = FALSE;
+ should_quit = TRUE; /* we will quit nmcli */
+ }
+ } else {
+ cmd_property_loop = FALSE;
+ should_quit = TRUE; /* we will quit nmcli */
+ }
+ break;
+
+ case NMC_EDITOR_SUB_CMD_UNKNOWN:
+ default:
+ printf (_("Unknown command: '%s'\n"), cmd_property_user);
+ break;
+ }
+ g_free (cmd_property_user);
+ g_free (cmd_property_arg);
+ }
+ g_free (prompt);
+
+ return !should_quit;
+}
+
+/*
+ * Split 'str' in the following format: [[[setting.]property] [value]]
+ * and return the components in 'setting', 'property' and 'value'
+ * Use g_free() to deallocate the returned strings.
+ */
+static void
+split_editor_main_cmd_args (const char *str, char **setting, char **property, char **value)
+{
+ char **args, **items;
+
+ if (!str)
+ return;
+
+ args = nmc_strsplit_set (str, " \t", 2);
+ if (args[0]) {
+ items = nmc_strsplit_set (args[0], ".", 2);
+ if (g_strv_length (items) == 2) {
+ if (setting)
+ *setting = g_strdup (items[0]);
+ if (property)
+ *property = g_strdup (items[1]);
} else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ if (property)
+ *property = g_strdup (items[0]);
}
- goto error;
+ g_strfreev (items);
+
+ if (value && args[1])
+ *value = g_strstrip (g_strdup (args[1]));
}
+ g_strfreev (args);
+}
- /* create NMClient */
- nmc->get_client (nmc);
+static NMSetting *
+is_setting_valid (NMConnection *connection, const NameItem *valid_settings, char *setting)
+{
+ const char *setting_name;
- con_path = nm_connection_get_path (connection);
+ if (!(setting_name = check_valid_name (setting, valid_settings, NULL)))
+ return NULL;
+ return nm_connection_get_setting_by_name (connection, setting_name);
+}
- active_cons = nm_client_get_active_connections (nmc->client);
- for (i = 0; active_cons && (i < active_cons->len); i++) {
- NMActiveConnection *candidate = g_ptr_array_index (active_cons, i);
+static char *
+is_property_valid (NMSetting *setting, const char *property, GError **error)
+{
+ char **valid_props = NULL;
+ const char *prop_name;
+ char *ret;
+
+ valid_props = nmc_setting_get_valid_properties (setting);
+ prop_name = nmc_string_is_valid (property, (const char **) valid_props, error);
+ ret = prop_name ? g_strdup (prop_name) : NULL;
+ g_strfreev (valid_props);
+ return ret;
+}
- active_path = nm_active_connection_get_connection (candidate);
- if (!strcmp (active_path, con_path)) {
- active = candidate;
+static NMSetting *
+create_setting_by_name (const char *name, const NameItem *valid_settings)
+{
+ const char *setting_name;
+ NMSetting *setting = NULL;
+
+ /* Get a valid setting name */
+ setting_name = check_valid_name (name, valid_settings, NULL);
+
+ if (setting_name) {
+ setting = nmc_setting_new_for_name (setting_name);
+ if (!setting)
+ return NULL; /* This should really not happen */
+ nmc_setting_custom_init (setting);
+ }
+ return setting;
+}
+
+static const char *
+ask_check_setting (const char *arg,
+ const NameItem *valid_settings_arr,
+ const char *valid_settings_str)
+{
+ char *setting_name_user;
+ const char *setting_name;
+ GError *err = NULL;
+
+ if (!arg) {
+ printf (_("Available settings: %s\n"), valid_settings_str);
+ setting_name_user = nmc_readline (EDITOR_PROMPT_SETTING);
+ } else
+ setting_name_user = g_strdup (arg);
+
+ if (setting_name_user)
+ g_strstrip (setting_name_user);
+
+ if (!(setting_name = check_valid_name (setting_name_user, valid_settings_arr, &err))) {
+ printf (_("Error: invalid setting name; %s\n"), err->message);
+ g_clear_error (&err);
+ }
+ g_free (setting_name_user);
+ return setting_name;
+}
+
+static const char *
+ask_check_property (const char *arg,
+ const char **valid_props,
+ const char *valid_props_str)
+{
+ char *prop_name_user;
+ const char *prop_name;
+ GError *tmp_err = NULL;
+
+ if (!arg) {
+ printf (_("Available properties: %s\n"), valid_props_str);
+ prop_name_user = nmc_readline (EDITOR_PROMPT_PROPERTY);
+ if (prop_name_user)
+ g_strstrip (prop_name_user);
+ } else
+ prop_name_user = g_strdup (arg);
+
+ if (!(prop_name = nmc_string_is_valid (prop_name_user, valid_props, &tmp_err))) {
+ printf (_("Error: property %s\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ g_free (prop_name_user);
+ return prop_name;
+}
+
+/* Copy timestamp from src do dst */
+static void
+update_connection_timestamp (NMConnection *src, NMConnection *dst)
+{
+ NMSettingConnection *s_con_src, *s_con_dst;
+
+ s_con_src = nm_connection_get_setting_connection (src);
+ s_con_dst = nm_connection_get_setting_connection (dst);
+ if (s_con_src && s_con_dst) {
+ guint64 timestamp = nm_setting_connection_get_timestamp (s_con_src);
+ g_object_set (s_con_dst, NM_SETTING_CONNECTION_TIMESTAMP, timestamp, NULL);
+ }
+}
+
+static gboolean
+confirm_connection_saving (NMConnection *local, NMConnection *remote)
+{
+ NMSettingConnection *s_con_loc, *s_con_rem;
+ gboolean ac_local, ac_remote;
+ gboolean confirmed = TRUE;
+
+ s_con_loc = nm_connection_get_setting_connection (local);
+ g_assert (s_con_loc);
+ ac_local = nm_setting_connection_get_autoconnect (s_con_loc);
+
+ if (remote) {
+ s_con_rem = nm_connection_get_setting_connection (remote);
+ g_assert (s_con_rem);
+ ac_remote = nm_setting_connection_get_autoconnect (s_con_rem);
+ } else
+ ac_remote = FALSE;
+
+ if (ac_local && !ac_remote) {
+ char *answer;
+ answer = nmc_readline (_("Saving the connection with 'autoconnect=yes'. "
+ "That might result in an immediate activation of the connection.\n"
+ "Do you still want to save? %s"), prompt_yes_no (TRUE, NULL));
+ answer = answer ? g_strstrip (answer) : NULL;
+ if (!answer || matches (answer, WORD_LOC_YES) == 0)
+ confirmed = TRUE;
+ else
+ confirmed = FALSE;
+ g_free (answer);
+ }
+ return confirmed;
+}
+
+typedef struct {
+ guint level;
+ char *main_prompt;
+ NMSetting *curr_setting;
+ char **valid_props;
+ char *valid_props_str;
+} NmcEditorMenuContext;
+
+static void
+menu_switch_to_level0 (NmcEditorMenuContext *menu_ctx,
+ const char *prompt,
+ NmcTermColor prompt_color)
+{
+ menu_ctx->level = 0;
+ g_free (menu_ctx->main_prompt);
+ menu_ctx->main_prompt = nmc_colorize (prompt_color, "%s", prompt);
+ menu_ctx->curr_setting = NULL;
+ g_strfreev (menu_ctx->valid_props);
+ menu_ctx->valid_props = NULL;
+ g_free (menu_ctx->valid_props_str);
+ menu_ctx->valid_props_str = NULL;
+}
+
+static void
+menu_switch_to_level1 (NmcEditorMenuContext *menu_ctx,
+ NMSetting *setting,
+ const char *setting_name,
+ NmcTermColor prompt_color)
+{
+ menu_ctx->level = 1;
+ g_free (menu_ctx->main_prompt);
+ menu_ctx->main_prompt = nmc_colorize (prompt_color, "nmcli %s> ", setting_name);
+ menu_ctx->curr_setting = setting;
+ g_strfreev (menu_ctx->valid_props);
+ menu_ctx->valid_props = nmc_setting_get_valid_properties (menu_ctx->curr_setting);
+ g_free (menu_ctx->valid_props_str);
+ menu_ctx->valid_props_str = g_strjoinv (", ", menu_ctx->valid_props);
+}
+
+static gboolean
+editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_type)
+{
+ NMRemoteConnection *rem_con;
+ NMRemoteConnection *con_tmp;
+ GWeakRef weak = { { NULL } };
+ gboolean removed;
+ NmcEditorMainCmd cmd;
+ char *cmd_user;
+ gboolean cmd_loop = TRUE;
+ char *cmd_arg = NULL;
+ char *cmd_arg_s, *cmd_arg_p, *cmd_arg_v;
+ const char *BASE_PROMPT = "nmcli> ";
+ const NameItem *valid_settings_arr = NULL;
+ char *valid_settings_str = NULL;
+ AddConnectionInfo *info = NULL;
+ gboolean dirty;
+ gboolean temp_changes;
+ GError *err1 = NULL;
+ NmcEditorMenuContext menu_ctx;
+
+ valid_settings_arr = get_valid_settings_array (connection_type);
+ valid_settings_str = get_valid_options_string (valid_settings_arr);
+ printf (_("You may edit the following settings: %s\n"), valid_settings_str);
+
+ menu_ctx.level = 0;
+ menu_ctx.main_prompt = nmc_colorize (nmc->editor_prompt_color, BASE_PROMPT);
+ menu_ctx.curr_setting = NULL;
+ menu_ctx.valid_props = NULL;
+ menu_ctx.valid_props_str = NULL;
+
+ /* Get remote connection */
+ con_tmp = nm_remote_settings_get_connection_by_uuid (nmc->system_settings,
+ nm_connection_get_uuid (connection));
+ g_weak_ref_init (&weak, con_tmp);
+ rem_con = g_weak_ref_get (&weak);
+
+ while (cmd_loop) {
+ /* Connection is dirty? (not saved or differs from the saved) */
+ dirty = is_connection_dirty (connection, rem_con);
+ temp_changes = rem_con ? nm_remote_connection_get_unsaved (rem_con) : TRUE;
+ if (nmc->editor_status_line)
+ editor_show_status_line (connection, dirty, temp_changes);
+
+ /* Read user input */
+ cmd_user = nmc_readline ("%s", menu_ctx.main_prompt);
+
+ /* Get the remote connection again, it may have disapeared */
+ removed = refresh_remote_connection (&weak, &rem_con);
+ if (removed)
+ printf (_("The connection profile has been removed from another client. "
+ "You may type 'save' to restore it.\n"));
+
+ if (!cmd_user || *cmd_user == '\0')
+ continue;
+ cmd = parse_editor_main_cmd (g_strstrip (cmd_user), &cmd_arg);
+
+ cmd_arg_s = NULL;
+ cmd_arg_p = NULL;
+ cmd_arg_v = NULL;
+ split_editor_main_cmd_args (cmd_arg, &cmd_arg_s, &cmd_arg_p, &cmd_arg_v);
+ switch (cmd) {
+ case NMC_EDITOR_MAIN_CMD_SET:
+ /* Set property value */
+ if (!cmd_arg) {
+ if (menu_ctx.level == 1) {
+ const char *prop_name;
+ char *prop_val_user = NULL;
+ const char *avals;
+ GError *tmp_err = NULL;
+
+ prop_name = ask_check_property (cmd_arg,
+ (const char **) menu_ctx.valid_props,
+ menu_ctx.valid_props_str);
+ if (!prop_name)
+ break;
+
+ avals = nmc_setting_get_property_allowed_values (menu_ctx.curr_setting, prop_name);
+ if (avals)
+ printf (_("Allowed values for '%s' property: %s\n"), prop_name, avals);
+
+ prop_val_user = nmc_readline (_("Enter '%s' value: "), prop_name);
+
+ /* Set property value */
+ if (!nmc_setting_set_property (menu_ctx.curr_setting, prop_name, prop_val_user, &tmp_err)) {
+ printf (_("Error: failed to set '%s' property: %s\n"), prop_name, tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ } else {
+ printf (_("Error: no setting selected; valid are [%s]\n"), valid_settings_str);
+ printf (_("use 'goto <setting>' first, or 'set <setting>.<property>'\n"));
+ }
+ } else {
+ NMSetting *ss = NULL;
+ gboolean created_ss = FALSE;
+ char *prop_name;
+ GError *tmp_err = NULL;
+
+ if (cmd_arg_s) {
+ /* setting provided as "setting.property" */
+ ss = is_setting_valid (connection, valid_settings_arr, cmd_arg_s);
+ if (!ss) {
+ ss = create_setting_by_name (cmd_arg_s, valid_settings_arr);
+ if (!ss) {
+ printf (_("Error: invalid setting argument '%s'; valid are [%s]\n"),
+ cmd_arg_s, valid_settings_str);
+ break;
+ }
+ created_ss = TRUE;
+ }
+ } else {
+ if (menu_ctx.curr_setting)
+ ss = menu_ctx.curr_setting;
+ else {
+ printf (_("Error: missing setting for '%s' property\n"), cmd_arg_p);
+ break;
+ }
+ }
+
+ prop_name = is_property_valid (ss, cmd_arg_p, &tmp_err);
+ if (!prop_name) {
+ printf (_("Error: invalid property: %s\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ if (created_ss)
+ g_object_unref (ss);
+ break;
+ }
+
+
+
+ /* Ask for value */
+ if (!cmd_arg_v) {
+ const char *avals = nmc_setting_get_property_allowed_values (ss, prop_name);
+ if (avals)
+ printf (_("Allowed values for '%s' property: %s\n"), prop_name, avals);
+
+ cmd_arg_v = nmc_readline (_("Enter '%s' value: "), prop_name);
+ }
+
+ /* Set property value */
+ if (!nmc_setting_set_property (ss, prop_name, cmd_arg_v, &tmp_err)) {
+ printf (_("Error: failed to set '%s' property: %s\n"),
+ prop_name, tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+
+ if (created_ss)
+ nm_connection_add_setting (connection, ss);
+ g_free (prop_name);
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_GOTO:
+ /* cmd_arg_s != NULL means 'setting.property' argument */
+ if (menu_ctx.level == 0 || cmd_arg_s) {
+ /* in top level - no setting selected yet */
+ const char *setting_name;
+ NMSetting *setting;
+ const char *user_arg = cmd_arg_s ? cmd_arg_s : cmd_arg_p;
+
+ setting_name = ask_check_setting (user_arg, valid_settings_arr, valid_settings_str);
+ if (!setting_name)
+ break;
+
+ setting = nm_connection_get_setting_by_name (connection, setting_name);
+ if (!setting) {
+ setting = nmc_setting_new_for_name (setting_name);
+ if (!setting) {
+ printf (_("Error: unknown setting '%s'\n"), setting_name);
+ break;
+ }
+ nmc_setting_custom_init (setting);
+ nm_connection_add_setting (connection, setting);
+ }
+ /* Set global variable for use in TAB completion */
+ nmc_tab_completion.setting = setting;
+
+ /* Switch to level 1 */
+ menu_switch_to_level1 (&menu_ctx, setting, setting_name, nmc->editor_prompt_color);
+
+ if (!cmd_arg_s) {
+ printf (_("You may edit the following properties: %s\n"), menu_ctx.valid_props_str);
+ break;
+ }
+ }
+ if (menu_ctx.level == 1 || cmd_arg_s) {
+ /* level 1 - setting selected */
+ const char *prop_name;
+
+ prop_name = ask_check_property (cmd_arg_p,
+ (const char **) menu_ctx.valid_props,
+ menu_ctx.valid_props_str);
+ if (!prop_name)
+ break;
+
+ /* submenu - level 2 - editing properties */
+ cmd_loop = property_edit_submenu (nmc,
+ connection,
+ &rem_con,
+ &weak,
+ menu_ctx.curr_setting,
+ prop_name);
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_REMOVE:
+ /* Remove setting from connection, or delete value of a property */
+ if (!cmd_arg) {
+ if (menu_ctx.level == 1) {
+ GError *tmp_err = NULL;
+ const char *prop_name;
+
+ prop_name = ask_check_property (cmd_arg,
+ (const char **) menu_ctx.valid_props,
+ menu_ctx.valid_props_str);
+ if (!prop_name)
+ break;
+
+ /* Delete property value */
+ if (!nmc_setting_reset_property (menu_ctx.curr_setting, prop_name, &tmp_err)) {
+ printf (_("Error: failed to remove value of '%s': %s\n"), prop_name,
+ tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ } else
+ printf (_("Error: no argument given; valid are [%s]\n"), valid_settings_str);
+ } else {
+ NMSetting *ss = NULL;
+ gboolean descr_all;
+ char *user_s;
+
+ /* cmd_arg_s != NULL means argument is "setting.property" */
+ descr_all = !cmd_arg_s && !menu_ctx.curr_setting;
+ user_s = descr_all ? cmd_arg_p : cmd_arg_s ? cmd_arg_s : NULL;
+ if (user_s) {
+ ss = is_setting_valid (connection, valid_settings_arr, user_s);
+ if (!ss) {
+ if (check_valid_name (user_s, valid_settings_arr, NULL))
+ printf (_("Setting '%s' is not present in the connection.\n"), user_s);
+ else
+ printf (_("Error: invalid setting argument '%s'; valid are [%s]\n"),
+ user_s, valid_settings_str);
+ break;
+ }
+ } else
+ ss = menu_ctx.curr_setting;
+
+ if (descr_all) {
+ /* Remove setting from the connection */
+ connection_remove_setting (connection, ss);
+ if (ss == menu_ctx.curr_setting) {
+ /* If we removed the setting we are in, go up */
+ menu_switch_to_level0 (&menu_ctx, BASE_PROMPT, nmc->editor_prompt_color);
+ nmc_tab_completion.setting = NULL; /* for TAB completion */
+ }
+ } else {
+ GError *tmp_err = NULL;
+ char *prop_name = is_property_valid (ss, cmd_arg_p, &tmp_err);
+ if (prop_name) {
+ /* Delete property value */
+ if (!nmc_setting_reset_property (ss, prop_name, &tmp_err)) {
+ printf (_("Error: failed to remove value of '%s': %s\n"), prop_name,
+ tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ } else {
+ /* If the string is not a property, try it as a setting */
+ NMSetting *s_tmp;
+ s_tmp = is_setting_valid (connection, valid_settings_arr, cmd_arg_p);
+ if (s_tmp) {
+ /* Remove setting from the connection */
+ connection_remove_setting (connection, s_tmp);
+ /* coverity[copy_paste_error] - suppress Coverity COPY_PASTE_ERROR defect */
+ if (ss == menu_ctx.curr_setting) {
+ /* If we removed the setting we are in, go up */
+ menu_switch_to_level0 (&menu_ctx, BASE_PROMPT, nmc->editor_prompt_color);
+ nmc_tab_completion.setting = NULL; /* for TAB completion */
+ }
+ } else
+ printf (_("Error: %s properties, nor it is a setting name.\n"),
+ tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ g_free (prop_name);
+ }
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_DESCRIBE:
+ /* Print property description */
+ if (!cmd_arg) {
+ if (menu_ctx.level == 1) {
+ const char *prop_name;
+
+ prop_name = ask_check_property (cmd_arg,
+ (const char **) menu_ctx.valid_props,
+ menu_ctx.valid_props_str);
+ if (!prop_name)
+ break;
+
+ /* Show property description */
+ print_property_description (menu_ctx.curr_setting, prop_name);
+ } else {
+ printf (_("Error: no setting selected; valid are [%s]\n"), valid_settings_str);
+ printf (_("use 'goto <setting>' first, or 'describe <setting>.<property>'\n"));
+ }
+ } else {
+ NMSetting *ss = NULL;
+ gboolean unref_ss = FALSE;
+ gboolean descr_all;
+ char *user_s;
+
+ /* cmd_arg_s != NULL means argument is "setting.property" */
+ descr_all = !cmd_arg_s && !menu_ctx.curr_setting;
+ user_s = descr_all ? cmd_arg_p : cmd_arg_s ? cmd_arg_s : NULL;
+ if (user_s) {
+ ss = is_setting_valid (connection, valid_settings_arr, user_s);
+ if (!ss) {
+ ss = create_setting_by_name (user_s, valid_settings_arr);
+ if (!ss) {
+ printf (_("Error: invalid setting argument '%s'; valid are [%s]\n"),
+ user_s, valid_settings_str);
+ break;
+ }
+ unref_ss = TRUE;
+ }
+ } else
+ ss = menu_ctx.curr_setting;
+
+ if (descr_all) {
+ /* Show description for all properties */
+ print_setting_description (ss);
+ } else {
+ GError *tmp_err = NULL;
+ char *prop_name = is_property_valid (ss, cmd_arg_p, &tmp_err);
+ if (prop_name) {
+ /* Show property description */
+ print_property_description (ss, prop_name);
+ } else {
+ /* If the string is not a property, try it as a setting */
+ NMSetting *s_tmp;
+ s_tmp = is_setting_valid (connection, valid_settings_arr, cmd_arg_p);
+ if (s_tmp)
+ print_setting_description (s_tmp);
+ else
+ printf (_("Error: invalid property: %s, "
+ "neither a valid setting name.\n"),
+ tmp_err->message);
+ g_clear_error (&tmp_err);
+ }
+ g_free (prop_name);
+ }
+ if (unref_ss)
+ g_object_unref (ss);
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_PRINT:
+ /* Print current connection settings/properties */
+ if (cmd_arg) {
+ if (strcmp (cmd_arg, "all") == 0)
+ editor_show_connection (connection, nmc);
+ else {
+ NMSetting *ss = NULL;
+ gboolean whole_setting;
+ char *user_s;
+
+ /* cmd_arg_s != NULL means argument is "setting.property" */
+ whole_setting = !cmd_arg_s && !menu_ctx.curr_setting;
+ user_s = whole_setting ? cmd_arg_p : cmd_arg_s ? cmd_arg_s : NULL;
+ if (user_s) {
+ const char *s_name;
+ s_name = check_valid_name (user_s, valid_settings_arr, NULL);
+ if (!s_name) {
+ printf (_("Error: unknown setting: '%s'\n"), user_s);
+ break;
+ }
+ ss = nm_connection_get_setting_by_name (connection, s_name);
+ if (!ss) {
+ printf (_("Error: '%s' setting not present in the connection\n"), s_name);
+ break;
+ }
+ } else
+ ss = menu_ctx.curr_setting;
+
+ if (whole_setting) {
+ /* Print the whole setting */
+ editor_show_setting (ss, nmc);
+ } else {
+ GError *err = NULL;
+ char *prop_name = is_property_valid (ss, cmd_arg_p, &err);
+ if (prop_name) {
+ /* Print one property */
+ char *prop_val = nmc_setting_get_property (ss, prop_name, NULL);
+ printf ("%s.%s: %s\n", nm_setting_get_name (ss),prop_name , prop_val);
+ g_free (prop_val);
+ } else {
+ /* If the string is not a property, try it as a setting */
+ NMSetting *s_tmp;
+ s_tmp = is_setting_valid (connection, valid_settings_arr, cmd_arg_p);
+ if (s_tmp) {
+ /* Print the whole setting */
+ editor_show_setting (s_tmp, nmc);
+ } else
+ printf (_("Error: invalid property: %s%s\n"),
+ err->message,
+ cmd_arg_s ? "" : _(", neither a valid setting name"));
+ g_clear_error (&err);
+ }
+ g_free (prop_name);
+ }
+ }
+ } else {
+ if (menu_ctx.curr_setting)
+ editor_show_setting (menu_ctx.curr_setting, nmc);
+ else
+ editor_show_connection (connection, nmc);
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_VERIFY:
+ /* Verify current setting or the whole connection */
+ if ( menu_ctx.curr_setting
+ && (!cmd_arg || strcmp (cmd_arg, "all") != 0)) {
+ GError *tmp_err = NULL;
+ (void) nm_setting_verify (menu_ctx.curr_setting, NULL, &tmp_err);
+ printf (_("Verify setting '%s': %s\n"),
+ nm_setting_get_name (menu_ctx.curr_setting),
+ tmp_err ? tmp_err->message : "OK");
+ g_clear_error (&tmp_err);
+ } else {
+ GError *tmp_err = NULL;
+ (void) nm_connection_verify (connection, &tmp_err);
+ printf (_("Verify connection: %s\n"),
+ tmp_err ? tmp_err->message : "OK");
+ g_clear_error (&tmp_err);
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_SAVE:
+ /* Save the connection */
+ if (nm_connection_verify (connection, &err1)) {
+ gboolean persistent = TRUE;
+
+ /* parse argument */
+ if (cmd_arg) {
+ if (matches (cmd_arg, "temporary") == 0)
+ persistent = FALSE;
+ else if (matches (cmd_arg, "persistent") == 0)
+ persistent = TRUE;
+ else {
+ printf (_("Error: invalid argument '%s'\n"), cmd_arg);
+ break;
+ }
+ }
+
+ /* Ask for save confirmation if the connection changes to autoconnect=yes */
+ if (nmc->editor_save_confirmation)
+ if (!confirm_connection_saving (connection, NM_CONNECTION (rem_con)))
+ break;
+
+ if (!rem_con) {
+ /* Tell the settings service to add the new connection */
+ info = g_malloc0 (sizeof (AddConnectionInfo));
+ info->nmc = nmc;
+ info->con_name = g_strdup (nm_connection_get_id (connection));
+ add_new_connection (persistent,
+ nmc->system_settings,
+ connection,
+ add_connection_editor_cb,
+ info);
+ } else {
+ /* Save/update already saved (existing) connection */
+ nm_connection_replace_settings_from_connection (NM_CONNECTION (rem_con),
+ connection,
+ NULL);
+ update_connection (persistent, rem_con, update_connection_editor_cb, NULL);
+ }
+
+ g_mutex_lock (&nmc_editor_mutex);
+ //FIXME: add also a timeout for cases the callback is not called
+ while (!nmc_editor_cb_called)
+ g_cond_wait (&nmc_editor_cond, &nmc_editor_mutex);
+
+ if (nmc_editor_error) {
+ printf (_("Error: Failed to save '%s' (%s) connection: (%d) %s\n"),
+ nm_connection_get_id (connection),
+ nm_connection_get_uuid (connection),
+ nmc_editor_error->code, nmc_editor_error->message);
+
+ g_error_free (nmc_editor_error);
+ } else {
+ printf (!rem_con ?
+ _("Connection '%s' (%s) successfully saved.\n") :
+ _("Connection '%s' (%s) successfully updated.\n"),
+ nm_connection_get_id (connection),
+ nm_connection_get_uuid (connection));
+
+ con_tmp = nm_remote_settings_get_connection_by_uuid (nmc->system_settings,
+ nm_connection_get_uuid (connection));
+ g_weak_ref_set (&weak, con_tmp);
+ refresh_remote_connection (&weak, &rem_con);
+
+ /* Replace local connection with the remote one to be sure they are equal.
+ * This mitigates problems with plugins not preserving some properties or
+ * adding ipv{4,6} settings when not present.
+ */
+ if (con_tmp) {
+ char *s_name = NULL;
+ if (menu_ctx.curr_setting)
+ s_name = g_strdup (nm_setting_get_name (menu_ctx.curr_setting));
+
+ /* Update settings in the local connection */
+ nm_connection_replace_settings_from_connection (connection,
+ NM_CONNECTION (con_tmp),
+ NULL);
+
+ /* Also update setting for menu context and TAB-completion */
+ menu_ctx.curr_setting = s_name ? nm_connection_get_setting_by_name (connection, s_name) : NULL;
+ nmc_tab_completion.setting = menu_ctx.curr_setting;
+ g_free (s_name);
+ }
+ }
+
+ nmc_editor_cb_called = FALSE;
+ nmc_editor_error = NULL;
+ g_mutex_unlock (&nmc_editor_mutex);
+ } else
+ printf (_("Error: connection verification failed: %s\n"),
+ err1 ? err1->message : _("(unknown error)"));
+
+ g_clear_error (&err1);
break;
+
+ case NMC_EDITOR_MAIN_CMD_ACTIVATE:
+ {
+ GError *tmp_err = NULL;
+ const char *ifname = cmd_arg_p;
+ const char *ap_nsp = cmd_arg_v;
+
+ /* When only AP/NSP is specified it is prepended with '/' */
+ if (!cmd_arg_v) {
+ if (ifname && ifname[0] == '/') {
+ ap_nsp = ifname + 1;
+ ifname = NULL;
+ }
+ } else
+ ap_nsp = ap_nsp && ap_nsp[0] == '/' ? ap_nsp + 1 : ap_nsp;
+
+ if (is_connection_dirty (connection, rem_con)) {
+ printf (_("Error: connection is not saved. Type 'save' first.\n"));
+ break;
+ }
+ if (!nm_connection_verify (NM_CONNECTION (rem_con), &tmp_err)) {
+ printf (_("Error: connection is not valid: %s\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ break;
+ }
+ nmc->get_client (nmc);
+
+ nmc->nowait_flag = FALSE;
+ nmc->should_wait = TRUE;
+ nmc->print_output = NMC_PRINT_PRETTY;
+ if (!nmc_activate_connection (nmc, NM_CONNECTION (rem_con), ifname, ap_nsp, ap_nsp,
+ activate_connection_editor_cb, &tmp_err)) {
+ printf (_("Error: Cannot activate connection: %s.\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ break;
+ }
+
+ g_mutex_lock (&nmc_editor_mutex);
+ while (!nmc_editor_cb_called)
+ g_cond_wait (&nmc_editor_cond, &nmc_editor_mutex);
+
+ if (nmc_editor_error) {
+ printf (_("Error: Failed to activate '%s' (%s) connection: (%d) %s\n"),
+ nm_connection_get_id (connection),
+ nm_connection_get_uuid (connection),
+ nmc_editor_error->code, nmc_editor_error->message);
+ g_error_free (nmc_editor_error);
+ } else {
+ printf (_("Monitoring connection activation (press any key to continue)\n"));
+ nmc_get_user_input ("");
+ }
+
+ if (nmc_editor_monitor_ac) {
+ if (nmc_editor_monitor_ac->monitor_id)
+ g_source_remove (nmc_editor_monitor_ac->monitor_id);
+ g_free (nmc_editor_monitor_ac);
+ }
+ nmc_editor_cb_called = FALSE;
+ nmc_editor_error = NULL;
+ nmc_editor_monitor_ac = NULL;
+ g_mutex_unlock (&nmc_editor_mutex);
+
+ /* Update timestamp in local connection */
+ update_connection_timestamp (NM_CONNECTION (rem_con), connection);
+
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_BACK:
+ /* Go back (up) an the menu */
+ if (menu_ctx.level == 1) {
+ menu_switch_to_level0 (&menu_ctx, BASE_PROMPT, nmc->editor_prompt_color);
+ nmc_tab_completion.setting = NULL; /* for TAB completion */
+ }
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_HELP:
+ /* Print command help */
+ editor_main_help (cmd_arg);
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_NMCLI:
+ if (cmd_arg_p && matches (cmd_arg_p, "status-line") == 0) {
+ GError *tmp_err = NULL;
+ gboolean bb;
+ if (!nmc_string_to_bool (cmd_arg_v ? g_strstrip (cmd_arg_v) : "", &bb, &tmp_err)) {
+ printf (_("Error: status-line: %s\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ } else
+ nmc->editor_status_line = bb;
+ } else if (cmd_arg_p && matches (cmd_arg_p, "save-confirmation") == 0) {
+ GError *tmp_err = NULL;
+ gboolean bb;
+ if (!nmc_string_to_bool (cmd_arg_v ? g_strstrip (cmd_arg_v) : "", &bb, &tmp_err)) {
+ printf (_("Error: save-confirmation: %s\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ } else
+ nmc->editor_save_confirmation = bb;
+ } else if (cmd_arg_p && matches (cmd_arg_p, "prompt-color") == 0) {
+ unsigned long color;
+ if (!nmc_string_to_uint (cmd_arg_v ? g_strstrip (cmd_arg_v) : "X",
+ TRUE, 0, 8, &color))
+ printf (_("Error: bad color number: '%s'; use <0-8>\n"),
+ cmd_arg_v ? cmd_arg_v : "");
+ else {
+ nmc->editor_prompt_color = color;
+ g_free (menu_ctx.main_prompt);
+ if (menu_ctx.level == 0)
+ menu_ctx.main_prompt = nmc_colorize (nmc->editor_prompt_color, BASE_PROMPT);
+ else
+ menu_ctx.main_prompt = nmc_colorize (nmc->editor_prompt_color, "nmcli %s> ",
+ nm_setting_get_name (menu_ctx.curr_setting));
+ }
+ } else if (!cmd_arg_p) {
+ printf (_("Current nmcli configuration:\n"));
+ printf ("status-line: %s\n"
+ "save-confirmation: %s\n"
+ "prompt-color: %d\n",
+ nmc->editor_status_line ? "yes" : "no",
+ nmc->editor_save_confirmation ? "yes" : "no",
+ nmc->editor_prompt_color);
+ } else
+ printf (_("Invalid configuration option '%s'; allowed [%s]\n"),
+ cmd_arg_v ? cmd_arg_v : "", "status-line, save-confirmation, prompt-color");
+
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_QUIT:
+ if (is_connection_dirty (connection, rem_con)) {
+ if (confirm_quit ())
+ cmd_loop = FALSE; /* quit command loop */
+ } else
+ cmd_loop = FALSE; /* quit command loop */
+ break;
+
+ case NMC_EDITOR_MAIN_CMD_UNKNOWN:
+ default:
+ printf (_("Unknown command: '%s'\n"), cmd_user);
+ break;
+ }
+
+ g_free (cmd_user);
+ g_free (cmd_arg);
+ g_free (cmd_arg_s);
+ g_free (cmd_arg_p);
+ g_free (cmd_arg_v);
+ }
+ g_free (valid_settings_str);
+ g_free (menu_ctx.main_prompt);
+ g_strfreev (menu_ctx.valid_props);
+ g_free (menu_ctx.valid_props_str);
+ if (rem_con)
+ g_object_unref (rem_con);
+ g_weak_ref_clear (&weak);
+
+ /* Save history file */
+ save_history_cmds (nm_connection_get_uuid (connection));
+
+ return TRUE;
+}
+
+static const char *
+get_ethernet_device_name (NmCli *nmc)
+{
+ const GPtrArray *devices;
+ int i;
+
+ nmc->get_client (nmc);
+ devices = nm_client_get_devices (nmc->client);
+ for (i = 0; devices && (i < devices->len); i++) {
+ NMDevice *dev = g_ptr_array_index (devices, i);
+ if (NM_IS_DEVICE_ETHERNET (dev))
+ return nm_device_get_iface (dev);
+ }
+ return NULL;
+}
+
+static void
+editor_init_new_connection (NmCli *nmc, NMConnection *connection)
+{
+ NMSetting *setting, *base_setting;
+ NMSettingConnection *s_con;
+ const char *con_type;
+ const char *slave_type = NULL;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ con_type = nm_setting_connection_get_connection_type (s_con);
+
+ /* Initialize new connection according to its type using sensible defaults. */
+
+ if (g_strcmp0 (con_type, "bond-slave") == 0)
+ slave_type = NM_SETTING_BOND_SETTING_NAME;
+ if (g_strcmp0 (con_type, "team-slave") == 0)
+ slave_type = NM_SETTING_TEAM_SETTING_NAME;
+ if (g_strcmp0 (con_type, "bridge-slave") == 0)
+ slave_type = NM_SETTING_BRIDGE_SETTING_NAME;
+
+ if (slave_type) {
+ const char *dev_ifname = get_ethernet_device_name (nmc);
+
+ /* For bond/team/bridge slaves add 'wired' setting */
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_MASTER, dev_ifname ? dev_ifname : "eth0",
+ NM_SETTING_CONNECTION_SLAVE_TYPE, slave_type,
+ NULL);
+ } else {
+ /* Add a "base" setting to the connection by default */
+ base_setting = nmc_setting_new_for_name (con_type);
+ if (!base_setting)
+ return;
+ nm_connection_add_setting (connection, base_setting);
+
+ /* Set a sensible bond/team/bridge interface name by default */
+ if (g_strcmp0 (con_type, NM_SETTING_BOND_SETTING_NAME) == 0)
+ g_object_set (NM_SETTING_BOND (base_setting),
+ NM_SETTING_BOND_INTERFACE_NAME, "nm-bond",
+ NULL);
+ if (g_strcmp0 (con_type, NM_SETTING_TEAM_SETTING_NAME) == 0)
+ g_object_set (NM_SETTING_TEAM (base_setting),
+ NM_SETTING_TEAM_INTERFACE_NAME, "nm-team",
+ NULL);
+ if (g_strcmp0 (con_type, NM_SETTING_BRIDGE_SETTING_NAME) == 0)
+ g_object_set (NM_SETTING_BRIDGE (base_setting),
+ NM_SETTING_BRIDGE_INTERFACE_NAME, "nm-bridge",
+ NULL);
+
+ /* Set sensible initial VLAN values */
+ if (g_strcmp0 (con_type, NM_SETTING_VLAN_SETTING_NAME) == 0) {
+ const char *dev_ifname = get_ethernet_device_name (nmc);
+
+ g_object_set (NM_SETTING_VLAN (base_setting),
+ NM_SETTING_VLAN_PARENT, dev_ifname ? dev_ifname : "eth0",
+ NM_SETTING_VLAN_ID, 1,
+ NULL);
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_MASTER, dev_ifname ? dev_ifname : "eth0",
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_VLAN_SETTING_NAME,
+ NULL);
+ }
+
+ /* Initialize 'transport-mode' so that 'infiniband' is valid */
+ if (g_strcmp0 (con_type, NM_SETTING_INFINIBAND_SETTING_NAME) == 0)
+ g_object_set (NM_SETTING_INFINIBAND (base_setting),
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
+ NULL);
+
+ /* Initialize 'number' so that 'cdma' is valid */
+ if (g_strcmp0 (con_type, NM_SETTING_CDMA_SETTING_NAME) == 0)
+ g_object_set (NM_SETTING_CDMA (base_setting),
+ NM_SETTING_CDMA_NUMBER, "#777",
+ NULL);
+
+ /* Initialize 'number' so that 'gsm' is valid */
+ if (g_strcmp0 (con_type, NM_SETTING_GSM_SETTING_NAME) == 0)
+ g_object_set (NM_SETTING_GSM (base_setting),
+ NM_SETTING_GSM_NUMBER, "*99#",
+ NULL);
+
+ /* Wi-Fi */
+ if (g_strcmp0 (con_type, NM_SETTING_WIRELESS_SETTING_NAME) == 0) {
+ /* For Wi-Fi set mode to "infrastructure". Even though mode == NULL
+ * is regarded as "infrastructure", explicit value makes no doubts.
+ */
+ g_object_set (NM_SETTING_WIRELESS (base_setting),
+ NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA,
+ NULL);
+
+ /* Do custom initialization for wifi setting */
+ nmc_setting_custom_init (base_setting);
+ }
+
+ /* Always add IPv4 and IPv6 settings for non-slave connections */
+ setting = nm_setting_ip4_config_new ();
+ nmc_setting_custom_init (setting);
+ nm_connection_add_setting (connection, setting);
+
+ setting = nm_setting_ip6_config_new ();
+ nmc_setting_custom_init (setting);
+ nm_connection_add_setting (connection, setting);
+ }
+}
+
+static void
+editor_init_existing_connection (NMConnection *connection)
+{
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ NMSettingWireless *s_wireless;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ s_wireless = nm_connection_get_setting_wireless (connection);
+
+ if (s_ip4)
+ nmc_setting_ip4_connect_handlers (s_ip4);
+ if (s_ip6)
+ nmc_setting_ip6_connect_handlers (s_ip6);
+ if (s_wireless)
+ nmc_setting_wireless_connect_handlers (s_wireless);
+}
+
+static NMCResultCode
+do_connection_edit (NmCli *nmc, int argc, char **argv)
+{
+ NMConnection *connection = NULL;
+ NMSettingConnection *s_con;
+ const char *connection_type;
+ char *uuid;
+ char *default_name = NULL;
+ const char *type = NULL;
+ char *type_ask = NULL;
+ const char *con_name = NULL;
+ const char *con = NULL;
+ const char *con_id = NULL;
+ const char *con_uuid = NULL;
+ const char *con_path = NULL;
+ const char *selector = NULL;
+ char *tmp_str;
+ GError *error = NULL;
+ GError *err1 = NULL;
+ nmc_arg_t exp_args[] = { {"type", TRUE, &type, FALSE},
+ {"con-name", TRUE, &con_name, FALSE},
+ {"id", TRUE, &con_id, FALSE},
+ {"uuid", TRUE, &con_uuid, FALSE},
+ {"path", TRUE, &con_path, FALSE},
+ {NULL} };
+
+ nmc->return_value = NMC_RESULT_SUCCESS;
+
+ if (argc == 1)
+ con = *argv;
+ else {
+ if (!nmc_parse_args (exp_args, TRUE, &argc, &argv, &error)) {
+ g_string_assign (nmc->return_text, error->message);
+ nmc->return_value = error->code;
+ g_clear_error (&error);
+ goto error;
+ }
+ }
+
+ /* Setup some readline completion stuff */
+ /* Set a pointer to an alternative function to create matches */
+ rl_attempted_completion_function = (rl_completion_func_t *) nmcli_editor_tab_completion;
+ /* Use ' ' and '.' as word break characters */
+ rl_completer_word_break_characters = ". ";
+
+ if (!con) {
+ if (con_id && !con_uuid && !con_path) {
+ con = con_id;
+ selector = "id";
+ } else if (con_uuid && !con_id && !con_path) {
+ con = con_uuid;
+ selector = "uuid";
+ } else if (con_path && !con_id && !con_uuid) {
+ con = con_path;
+ selector = "path";
+ } else if (!con_path && !con_id && !con_uuid) {
+ /* no-op */
+ } else {
+ g_string_printf (nmc->return_text,
+ _("Error: only one of 'id', uuid, or 'path' can be provided."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ }
+
+ if (con) {
+ /* Existing connection */
+ NMConnection *found_con;
+
+ found_con = nmc_find_connection (nmc->system_connections, selector, con, NULL);
+ if (!found_con) {
+ g_string_printf (nmc->return_text, _("Error: Unknown connection '%s'."), con);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto error;
+ }
+
+ /* Duplicate the connection and use that so that we need not
+ * differentiate existing vs. new later
+ */
+ connection = nm_connection_duplicate (found_con);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ connection_type = nm_setting_connection_get_connection_type (s_con);
+
+ if (type)
+ printf (_("Warning: editing existing connection '%s'; 'type' argument is ignored\n"),
+ nm_connection_get_id (connection));
+ if (con_name)
+ printf (_("Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"),
+ nm_connection_get_id (connection));
+
+ /* Load previously saved history commands for the connection */
+ load_history_cmds (nm_connection_get_uuid (connection));
+
+ editor_init_existing_connection (connection);
+ } else {
+ /* New connection */
+ connection_type = check_valid_name (type, nmc_valid_connection_types, &err1);
+ tmp_str = get_valid_options_string (nmc_valid_connection_types);
+
+ while (!connection_type) {
+ if (!type)
+ printf (_("Valid connection types: %s\n"), tmp_str);
+ else
+ printf (_("Error: invalid connection type; %s\n"), err1->message);
+ g_clear_error (&err1);
+
+ type_ask = nmc_readline (EDITOR_PROMPT_CON_TYPE);
+ type = type_ask = type_ask ? g_strstrip (type_ask) : NULL;
+ connection_type = check_valid_name (type_ask, nmc_valid_connection_types, &err1);
+ g_free (type_ask);
}
+ g_free (tmp_str);
+
+ /* Create a new connection object */
+ connection = nm_connection_new ();
+
+ /* Build up the 'connection' setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ uuid = nm_utils_uuid_generate ();
+ if (con_name)
+ default_name = g_strdup (con_name);
+ else
+ default_name = unique_connection_name (nmc->system_connections,
+ get_name_alias (connection_type, nmc_valid_connection_types));
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, default_name,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, connection_type,
+ NULL);
+ g_free (uuid);
+ g_free (default_name);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ /* Initialize the new connection so that it is valid from the start */
+ editor_init_new_connection (nmc, connection);
}
- if (active)
- nm_client_deactivate_connection (nmc->client, active);
+ printf ("\n");
+ printf (_("===| nmcli interactive connection editor |==="));
+ printf ("\n\n");
+ if (con)
+ printf (_("Editing existing '%s' connection: '%s'"), connection_type, con);
else
- fprintf (stderr, _("Warning: Connection not active\n"));
- sleep (1); /* Don't quit immediatelly and give NM time to check our permissions */
+ printf (_("Adding a new '%s' connection"), connection_type);
+ printf ("\n\n");
+ printf (_("Type 'help' or '?' for available commands."));
+ printf ("\n");
+ printf (_("Type 'describe [<setting>.<prop>]' for detailed property description."));
+ printf ("\n\n");
+
+ /* Set global variables for use in TAB completion */
+ nmc_tab_completion.nmc = nmc;
+ nmc_tab_completion.con_type = g_strdup (connection_type);
+ nmc_tab_completion.connection = connection;
+
+ /* Run menu loop */
+ editor_menu_main (nmc, connection, connection_type);
+
+ if (connection)
+ g_object_unref (connection);
+ g_free (nmc_tab_completion.con_type);
+
+ nmc->should_wait = TRUE;
+ return nmc->return_value;
error:
+ g_assert (!connection);
+ g_free (type_ask);
+
nmc->should_wait = FALSE;
return nmc->return_value;
}
+
static void
-delete_cb (NMRemoteConnection *con, GError *err, gpointer user_data)
+modify_connection_cb (NMRemoteConnection *connection,
+ GError *error,
+ gpointer user_data)
{
NmCli *nmc = (NmCli *) user_data;
- if (err) {
- g_string_printf (nmc->return_text, _("Error: Connection deletion failed: %s"), err->message);
- nmc->return_value = NMC_RESULT_ERROR_CON_DEL;
+ if (error) {
+ g_string_printf (nmc->return_text,
+ _("Error: Failed to modify connection '%s': (%d) %s"),
+ nm_connection_get_id (NM_CONNECTION (connection)),
+ error->code, error->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ } else {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ printf (_("Connection '%s' (%s) successfully modified.\n"),
+ nm_connection_get_id (NM_CONNECTION (connection)),
+ nm_connection_get_uuid (NM_CONNECTION (connection)));
}
quit ();
}
+static NMCResultCode
+do_connection_modify (NmCli *nmc,
+ gboolean temporary,
+ int argc,
+ char **argv)
+{
+ NMConnection *connection = NULL;
+ NMRemoteConnection *rc = NULL;
+ NMSetting *setting;
+ NMSettingConnection *s_con;
+ const char *con_type;
+ const char *name;
+ const char *selector = NULL;
+ const char *s_dot_p;
+ const char *value;
+ char **strv = NULL;
+ const char *setting_name;
+ char *property_name = NULL;
+ gboolean append = FALSE;
+ gboolean remove = FALSE;
+ GError *error = NULL;
+
+ nmc->should_wait = FALSE;
+
+ /* create NMClient */
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ goto finish;
+ }
+
+ if (argc == 0) {
+ g_string_printf (nmc->return_text, _("Error: No arguments provided."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ if ( strcmp (*argv, "id") == 0
+ || strcmp (*argv, "uuid") == 0
+ || strcmp (*argv, "path") == 0) {
+
+ selector = *argv;
+ if (next_arg (&argc, &argv) != 0) {
+ g_string_printf (nmc->return_text, _("Error: %s argument is missing."),
+ selector);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ name = *argv;
+ }
+ name = *argv;
+ if (!name) {
+ g_string_printf (nmc->return_text, _("Error: connection ID is missing."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ connection = nmc_find_connection (nmc->system_connections, selector, name, NULL);
+ if (!connection) {
+ g_string_printf (nmc->return_text, _("Error: Unknown connection '%s'."), name);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto finish;
+ }
+ rc = nm_remote_settings_get_connection_by_uuid (nmc->system_settings,
+ nm_connection_get_uuid (connection));
+ if (!rc) {
+ g_string_printf (nmc->return_text, _("Error: Unknown connection '%s'."), name);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto finish;
+ }
+ s_con = nm_connection_get_setting_connection (NM_CONNECTION (rc));
+ g_assert (s_con);
+ con_type = nm_setting_connection_get_connection_type (s_con);
+
+ if (next_arg (&argc, &argv) != 0) {
+ g_string_printf (nmc->return_text, _("Error: <setting>.<property> argument is missing."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+
+ /* Go through arguments and set properties */
+ while (argc) {
+ s_dot_p = *argv;
+ next_arg (&argc, &argv);
+ value = *argv;
+ next_arg (&argc, &argv);
+
+ if (!s_dot_p) {
+ g_string_printf (nmc->return_text, _("Error: <setting>.<property> argument is missing."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ if (!value) {
+ g_string_printf (nmc->return_text, _("Error: value for '%s' is missing."), s_dot_p);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ /* Empty string will reset the value to default */
+ if (value[0] == '\0')
+ value = NULL;
+
+ if (s_dot_p[0] == '+') {
+ s_dot_p++;
+ append = TRUE;
+ } else if (s_dot_p[0] == '-') {
+ s_dot_p++;
+ remove = TRUE;
+ }
+
+ strv = g_strsplit (s_dot_p, ".", 2);
+ if (g_strv_length (strv) != 2) {
+ g_string_printf (nmc->return_text, _("Error: invalid <setting>.<property> '%s'."),
+ s_dot_p);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+
+ setting_name = check_valid_name (strv[0], get_valid_settings_array (con_type), &error);
+ if (!setting_name) {
+ g_string_printf (nmc->return_text, _("Error: invalid or not allowed setting '%s': %s."),
+ strv[0], error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ setting = nm_connection_get_setting_by_name (NM_CONNECTION (rc), setting_name);
+ if (!setting) {
+ setting = nmc_setting_new_for_name (setting_name);
+ if (!setting) {
+ /* This should really not happen */
+ g_string_printf (nmc->return_text,
+ "Error: don't know how to create '%s' setting.",
+ setting_name);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ goto finish;
+ }
+ nm_connection_add_setting (NM_CONNECTION (rc), setting);
+ }
+
+ property_name = is_property_valid (setting, strv[1], &error);
+ if (!property_name) {
+ g_string_printf (nmc->return_text, _("Error: invalid property '%s': %s."),
+ strv[1], error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+
+ if (!remove) {
+ /* Set/add value */
+ if (!append)
+ nmc_setting_reset_property (setting, property_name, NULL);
+ if (!nmc_setting_set_property (setting, property_name, value, &error)) {
+ g_string_printf (nmc->return_text, _("Error: failed to modify %s.%s: %s."),
+ strv[0], strv[1], error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ } else {
+ /* Remove value
+ * - either empty: remove whole value
+ * - or specified by index <0-n>: remove item at the index
+ * - or option name: remove item with the option name
+ */
+ if (value) {
+ unsigned long idx;
+ if (nmc_string_to_uint (value, TRUE, 0, G_MAXUINT32, &idx))
+ nmc_setting_remove_property_option (setting, property_name, NULL, idx, &error);
+ else
+ nmc_setting_remove_property_option (setting, property_name, value, 0, &error);
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: failed to remove a value from %s.%s: %s."),
+ strv[0], strv[1], error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ } else
+ nmc_setting_reset_property (setting, property_name, NULL);
+ }
+
+ g_strfreev (strv);
+ strv = NULL;
+ }
+
+ update_connection (!temporary, rc, modify_connection_cb, nmc);
+
+finish:
+ nmc->should_wait = (nmc->return_value == NMC_RESULT_SUCCESS);
+ g_free (property_name);
+ if (strv)
+ g_strfreev (strv);
+ g_clear_error (&error);
+ return nmc->return_value;
+}
+
+
+typedef struct {
+ NmCli *nmc;
+ int counter;
+} DeleteStateInfo;
+
static void
-connection_removed_cb (NMRemoteConnection *con, gpointer user_data)
+delete_cb (NMRemoteConnection *con, GError *err, gpointer user_data)
{
- NmCli *nmc = (NmCli *) user_data;
+ DeleteStateInfo *info = (DeleteStateInfo *) user_data;
- nmc->return_value = NMC_RESULT_SUCCESS;
- quit ();
+ if (err) {
+ g_string_printf (info->nmc->return_text, _("Error: Connection deletion failed: %s"), err->message);
+ info->nmc->return_value = NMC_RESULT_ERROR_CON_DEL;
+ }
+
+ info->counter--;
+ if (info->counter == 0) {
+ g_free (info);
+ quit ();
+ }
}
static NMCResultCode
do_connection_delete (NmCli *nmc, int argc, char **argv)
{
NMConnection *connection = NULL;
- const char *selector = NULL;
- const char *id = NULL;
- GError *error = NULL;
+ DeleteStateInfo *del_info = NULL;
+ char *line = NULL;
+ char **arg_arr = NULL;
+ char **arg_ptr = argv;
+ int arg_num = argc;
+ GString *invalid_cons = NULL;
+ gboolean del_info_free = FALSE;
+ GSList *pos = NULL;
- while (argc > 0) {
- if (strcmp (*argv, "id") == 0 || strcmp (*argv, "uuid") == 0) {
- selector = *argv;
- if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
+ nmc->return_value = NMC_RESULT_SUCCESS;
+ nmc->should_wait = FALSE;
+
+ /* create NMClient */
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ goto finish;
+ }
+
+ if (argc == 0) {
+ if (nmc->ask) {
+ line = nmc_readline (PROMPT_CONNECTION);
+ nmc_string_to_arg_array (line, "", &arg_arr, &arg_num);
+ arg_ptr = arg_arr;
+ }
+ if (arg_num == 0) {
+ g_string_printf (nmc->return_text, _("Error: No connection specified."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ }
+
+ del_info = g_malloc0 (sizeof (DeleteStateInfo));
+ del_info->nmc = nmc;
+ del_info->counter = 0;
+ del_info_free = TRUE;
+
+ while (arg_num > 0) {
+ const char *selector = NULL;
+
+ if ( strcmp (*arg_ptr, "id") == 0
+ || strcmp (*arg_ptr, "uuid") == 0
+ || strcmp (*arg_ptr, "path") == 0) {
+ selector = *arg_ptr;
+ if (next_arg (&arg_num, &arg_ptr) != 0) {
+ g_string_printf (nmc->return_text, _("Error: %s argument is missing."), selector);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ goto finish;
}
- id = *argv;
}
- else
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
- argc--;
- argv++;
+ connection = nmc_find_connection (nmc->system_connections, selector, *arg_ptr, &pos);
+ if (!connection) {
+ if (nmc->print_output != NMC_PRINT_TERSE)
+ printf (_("Error: unknown connection: %s\n"), *arg_ptr);
+
+ if (!invalid_cons)
+ invalid_cons = g_string_new (NULL);
+ g_string_append_printf (invalid_cons, "'%s', ", *arg_ptr);
+
+ /* take the next argument and continue */
+ next_arg (&arg_num, &arg_ptr);
+ continue;
+ }
+
+ /* We need to wait a bit so that nmcli's permissions can be checked.
+ * We will exit when D-Bus return (error) messages are received.
+ */
+ nmc->should_wait = TRUE;
+
+ /* del_info deallocation is handled in delete_cb() */
+ del_info_free = FALSE;
+
+ del_info->counter++;
+
+ /* Delete the connection */
+ nm_remote_connection_delete (NM_REMOTE_CONNECTION (connection), delete_cb, del_info);
+
+ /* Take next argument (if there's no other connection of the same name) */
+ if (!pos)
+ next_arg (&arg_num, &arg_ptr);
}
- if (!id) {
- g_string_printf (nmc->return_text, _("Error: id or uuid has to be specified."));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+finish:
+ if (del_info_free)
+ g_free (del_info);
+ g_strfreev (arg_arr);
+
+ if (invalid_cons) {
+ g_string_truncate (invalid_cons, invalid_cons->len-2); /* truncate trailing ", " */
+ g_string_printf (nmc->return_text, _("Error: cannot delete unknown connection(s): %s."),
+ invalid_cons->str);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ g_string_free (invalid_cons, TRUE);
}
+ return nmc->return_value;
+}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+static NMCResultCode
+do_connection_reload (NmCli *nmc, int argc, char **argv)
+{
+ GError *error = NULL;
+
+ nmc->return_value = NMC_RESULT_SUCCESS;
+ nmc->should_wait = FALSE;
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ return nmc->return_value;
+ }
+
+ if (!nm_remote_settings_reload_connections (nmc->system_settings, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ if (error->code == NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE)
nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
- goto error;
+ else
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_clear_error (&error);
}
- connection = find_connection (nmc->system_connections, selector, id);
+ return nmc->return_value;
+}
- if (!connection) {
- g_string_printf (nmc->return_text, _("Error: Unknown connection: %s."), id);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- goto error;
+static NMCResultCode
+do_connection_load (NmCli *nmc, int argc, char **argv)
+{
+ GError *error = NULL;
+ char **filenames, **failures = NULL;
+ int i;
+
+ nmc->return_value = NMC_RESULT_SUCCESS;
+ nmc->should_wait = FALSE;
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ return nmc->return_value;
}
- /* We need to wait a bit so that nmcli's permissions can be queried.
- * We will exit either on "Removed" signal or when D-Bus return (error)
- * message is received.
- */
- nmc->should_wait = TRUE;
+ if (argc == 0) {
+ g_string_printf (nmc->return_text, _("Error: No connection specified."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ return nmc->return_value;
+ }
- /* Connect to "Removed" signal to be able to exit when connection was removed */
- g_signal_connect (connection, NM_REMOTE_CONNECTION_REMOVED, G_CALLBACK (connection_removed_cb), nmc);
+ filenames = g_new (char *, argc + 1);
+ for (i = 0; i < argc; i++)
+ filenames[i] = argv[i];
+ filenames[i] = NULL;
- /* Delete the connection */
- nm_remote_connection_delete (NM_REMOTE_CONNECTION (connection), delete_cb, nmc);
+ nm_remote_settings_load_connections (nmc->system_settings, filenames, &failures, &error);
+ g_free (filenames);
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_error_free (error);
+ }
- return nmc->return_value;
+ if (failures) {
+ for (i = 0; failures[i]; i++)
+ fprintf (stderr, _("Could not load file '%s'\n"), failures[i]);
+ g_strfreev (failures);
+ }
-error:
- nmc->should_wait = FALSE;
return nmc->return_value;
}
+
+typedef struct {
+ NmCli *nmc;
+ int argc;
+ char **argv;
+} NmcEditorThreadData;
+
+static GThread *editor_thread;
+static NmcEditorThreadData editor_thread_data;
+
+/*
+ * We need to run do_connection_edit() in a thread so that
+ * glib main loop is not blocked and could receive and process D-Bus
+ * return messages.
+ */
+static gpointer
+connection_editor_thread_func (gpointer data)
+{
+ NmcEditorThreadData *td = (NmcEditorThreadData *) data;
+
+ /* run editor for editing/adding connections */
+ td->nmc->return_value = do_connection_edit (td->nmc, td->argc, td->argv);
+
+ /* quit glib main loop now that we are done with this thread */
+ quit ();
+
+ return NULL;
+}
+
+static char *
+gen_func_connection_names (const char *text, int state)
+{
+ int i = 0;
+ GSList *iter;
+ const char **connections;
+ char *ret;
+
+ if (!nm_cli.system_connections)
+ return NULL;
+
+ connections = g_new (const char *, g_slist_length (nm_cli.system_connections) + 1);
+ for (iter = nm_cli.system_connections; iter; iter = g_slist_next (iter)) {
+ NMConnection *con = NM_CONNECTION (iter->data);
+ const char *id = nm_connection_get_id (con);
+ connections[i++] = id;
+ }
+ connections[i] = NULL;
+
+ ret = nmc_rl_gen_func_basic (text, state, connections);
+
+ g_free (connections);
+ return ret;
+}
+
+static char **
+nmcli_con_tab_completion (const char *text, int start, int end)
+{
+ char **match_array = NULL;
+ rl_compentry_func_t *generator_func = NULL;
+
+ /* Disable readline's default filename completion */
+ rl_attempted_completion_over = 1;
+
+ /* Disable appending space after completion */
+ rl_completion_append_character = '\0';
+
+ if (!is_single_word (rl_line_buffer))
+ return NULL;
+
+ if (g_strcmp0 (rl_prompt, PROMPT_CONNECTION) == 0)
+ generator_func = gen_func_connection_names;
+
+ if (generator_func)
+ match_array = rl_completion_matches (text, generator_func);
+
+ return match_array;
+}
+
static NMCResultCode
parse_cmd (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
+ rl_attempted_completion_function = (rl_completion_func_t *) nmcli_con_tab_completion;
+
if (argc == 0) {
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
goto opt_error;
- nmc->return_value = do_connections_list (nmc, argc, argv);
+ nmc->return_value = do_connections_show (nmc, FALSE, argc, argv);
} else {
-
- if (matches (*argv, "list") == 0) {
- nmc->return_value = do_connections_list (nmc, argc-1, argv+1);
+ if (nmc_arg_is_help (*argv)) {
+ usage ();
+ goto usage_exit;
}
- else if (matches(*argv, "status") == 0) {
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
- nmc->return_value = do_connections_status (nmc, argc-1, argv+1);
+ else if (matches (*argv, "show") == 0) {
+ gboolean active = FALSE;
+
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_show ();
+ goto usage_exit;
+ }
+
+ next_arg (&argc, &argv);
+ if (nmc_arg_is_option (*argv, "active")) {
+ active = TRUE;
+ next_arg (&argc, &argv);
+ }
+ nmc->return_value = do_connections_show (nmc, active, argc, argv);
}
else if (matches(*argv, "up") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_up ();
+ goto usage_exit;
+ }
nmc->return_value = do_connection_up (nmc, argc-1, argv+1);
}
else if (matches(*argv, "down") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_down ();
+ goto usage_exit;
+ }
nmc->return_value = do_connection_down (nmc, argc-1, argv+1);
}
+ else if (matches(*argv, "add") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_add ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_connection_add (nmc, argc-1, argv+1);
+ }
+ else if (matches(*argv, "edit") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_edit ();
+ goto usage_exit;
+ }
+ editor_thread_data.nmc = nmc;
+ editor_thread_data.argc = argc - 1;
+ editor_thread_data.argv = argv + 1;
+ editor_thread = g_thread_new ("editor-thread", connection_editor_thread_func, &editor_thread_data);
+ g_thread_unref (editor_thread);
+ }
else if (matches(*argv, "delete") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_delete ();
+ goto usage_exit;
+ }
nmc->return_value = do_connection_delete (nmc, argc-1, argv+1);
}
- else if ( matches (*argv, "help") == 0
- || (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0)
- || (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) {
- usage ();
- nmc->should_wait = FALSE;
+ else if (matches(*argv, "reload") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_reload ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_connection_reload (nmc, argc-1, argv+1);
+ }
+ else if (matches(*argv, "load") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_load ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_connection_load (nmc, argc-1, argv+1);
+ }
+ else if (matches (*argv, "modify") == 0) {
+ gboolean temporary = FALSE;
+
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_connection_modify ();
+ goto usage_exit;
+ }
+ next_arg (&argc, &argv);
+ if (nmc_arg_is_option (*argv, "temporary")) {
+ temporary = TRUE;
+ next_arg (&argc, &argv);
+ }
+ nmc->return_value = do_connection_modify (nmc, temporary, argc, argv);
}
else {
usage ();
- g_string_printf (nmc->return_text, _("Error: 'con' command '%s' is not valid."), *argv);
+ g_string_printf (nmc->return_text, _("Error: '%s' is not valid 'connection' command."), *argv);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
nmc->should_wait = FALSE;
}
@@ -1842,6 +8617,10 @@ parse_cmd (NmCli *nmc, int argc, char **argv)
return nmc->return_value;
+usage_exit:
+ nmc->should_wait = FALSE;
+ return nmc->return_value;
+
opt_error:
g_string_printf (nmc->return_text, _("Error: %s."), error->message);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
@@ -1869,8 +8648,6 @@ get_connections_cb (NMRemoteSettings *settings, gpointer user_data)
NMCResultCode
do_connections (NmCli *nmc, int argc, char **argv)
{
- DBusGConnection *bus;
- GError *error = NULL;
int i = 0;
gboolean real_cmd = FALSE;
@@ -1899,17 +8676,8 @@ do_connections (NmCli *nmc, int argc, char **argv)
args_info.argc = argc;
args_info.argv = argv;
- /* connect to DBus' system bus */
- bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (error || !bus) {
- g_string_printf (nmc->return_text, _("Error: could not connect to D-Bus."));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- nmc->should_wait = FALSE;
- return nmc->return_value;
- }
-
/* get system settings */
- if (!(nmc->system_settings = nm_remote_settings_new (bus))) {
+ if (!(nmc->system_settings = nm_remote_settings_new (NULL))) {
g_string_printf (nmc->return_text, _("Error: Could not get system settings."));
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
nmc->should_wait = FALSE;
@@ -1930,9 +8698,6 @@ do_connections (NmCli *nmc, int argc, char **argv)
g_signal_connect (nmc->system_settings, NM_REMOTE_SETTINGS_CONNECTIONS_READ,
G_CALLBACK (get_connections_cb), &args_info);
-
- dbus_g_connection_unref (bus);
-
/* The rest will be done in get_connection_cb() callback.
* We need to wait for signals that connections are read.
*/
diff --git a/cli/src/connections.h b/cli/src/connections.h
index a1ed1c1cf..c73685979 100644
--- a/cli/src/connections.h
+++ b/cli/src/connections.h
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
#ifndef NMC_CONNECTIONS_H
diff --git a/cli/src/devices.c b/cli/src/devices.c
index ffad9801c..17492066b 100644
--- a/cli/src/devices.c
+++ b/cli/src/devices.c
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
@@ -24,6 +24,7 @@
#include <stdlib.h>
#include <errno.h>
#include <netinet/ether.h>
+#include <readline/readline.h>
#include <glib.h>
#include <glib/gi18n.h>
@@ -65,185 +66,203 @@
#include "common.h"
#include "devices.h"
+/* define some prompts */
+#define PROMPT_INTERFACE _("Interface: ")
-/* Available fields for 'dev status' */
+/* Available fields for 'device status' */
static NmcOutputField nmc_fields_dev_status[] = {
- {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 0 */
- {"TYPE", N_("TYPE"), 17, NULL, 0}, /* 1 */
- {"STATE", N_("STATE"), 13, NULL, 0}, /* 2 */
- {"DBUS-PATH", N_("DBUS-PATH"), 43, NULL, 0}, /* 3 */
- {NULL, NULL, 0, NULL, 0}
+ {"DEVICE", N_("DEVICE"), 10}, /* 0 */
+ {"TYPE", N_("TYPE"), 17}, /* 1 */
+ {"STATE", N_("STATE"), 13}, /* 2 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 43}, /* 3 */
+ {"CONNECTION", N_("CONNECTION"), 20}, /* 4 */
+ {"CON-UUID", N_("CON-UUID"), 38}, /* 5 */
+ {"CON-PATH", N_("CON-PATH"), 51}, /* 6 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_STATUS_ALL "DEVICE,TYPE,STATE,DBUS-PATH"
-#define NMC_FIELDS_DEV_STATUS_COMMON "DEVICE,TYPE,STATE"
-
-
-/* Available sections for 'dev list' */
-static NmcOutputField nmc_fields_dev_list_sections[] = {
- {"GENERAL", N_("GENERAL"), 0, NULL, 0}, /* 0 */
- {"CAPABILITIES", N_("CAPABILITIES"), 0, NULL, 0}, /* 1 */
- {"WIFI-PROPERTIES", N_("WIFI-PROPERTIES"), 0, NULL, 0}, /* 2 */
- {"AP", N_("AP"), 0, NULL, 0}, /* 3 */
- {"WIRED-PROPERTIES", N_("WIRED-PROPERTIES"), 0, NULL, 0}, /* 4 */
- {"WIMAX-PROPERTIES", N_("WIMAX-PROPERTIES"), 0, NULL, 0}, /* 5 */
- {"NSP", N_("NSP"), 0, NULL, 0}, /* 6 */
- {"IP4", N_("IP4"), 0, NULL, 0}, /* 7 */
- {"DHCP4", N_("DHCP4"), 0, NULL, 0}, /* 8 */
- {"IP6", N_("IP6"), 0, NULL, 0}, /* 9 */
- {"DHCP6", N_("DHCP6"), 0, NULL, 0}, /* 10 */
- {"BOND", N_("BOND"), 0, NULL, 0}, /* 11 */
- {"VLAN", N_("VLAN"), 0, NULL, 0}, /* 12 */
- {"CONNECTIONS", N_("CONNECTIONS"), 0, NULL, 0}, /* 13 */
- {NULL, NULL, 0, NULL, 0}
+#define NMC_FIELDS_DEV_STATUS_ALL "DEVICE,TYPE,STATE,DBUS-PATH,CONNECTION,CON-UUID,CON-PATH"
+#define NMC_FIELDS_DEV_STATUS_COMMON "DEVICE,TYPE,STATE,CONNECTION"
+
+
+/* Available fields for 'device show' - GENERAL part */
+static NmcOutputField nmc_fields_dev_show_general[] = {
+ {"NAME", N_("NAME"), 10}, /* 0 */
+ {"DEVICE", N_("DEVICE"), 10}, /* 1 */
+ {"TYPE", N_("TYPE"), 17}, /* 2 */
+ {"VENDOR", N_("VENDOR"), 20}, /* 3 */
+ {"PRODUCT", N_("PRODUCT"), 50}, /* 4 */
+ {"DRIVER", N_("DRIVER"), 9}, /* 5 */
+ {"DRIVER-VERSION", N_("DRIVER-VERSION"), 18}, /* 6 */
+ {"FIRMWARE-VERSION", N_("FIRMWARE-VERSION"), 18}, /* 7 */
+ {"HWADDR", N_("HWADDR"), 19}, /* 8 */
+ {"MTU", N_("MTU"), 10}, /* 9 */
+ {"STATE", N_("STATE"), 14}, /* 10 */
+ {"REASON", N_("REASON"), 25}, /* 11 */
+ {"UDI", N_("UDI"), 64}, /* 12 */
+ {"IP-IFACE", N_("IP-IFACE"), 10}, /* 13 */
+ {"NM-MANAGED", N_("NM-MANAGED"), 15}, /* 14 */
+ {"AUTOCONNECT", N_("AUTOCONNECT"), 15}, /* 15 */
+ {"FIRMWARE-MISSING", N_("FIRMWARE-MISSING"), 18}, /* 16 */
+ {"CONNECTION", N_("CONNECTION"), 20}, /* 17 */
+ {"CON-UUID", N_("CON-UUID"), 38}, /* 18 */
+ {"CON-PATH", N_("CON-PATH"), 51}, /* 19 */
+ {NULL, NULL, 0}
};
-#if WITH_WIMAX
-#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL "GENERAL,CAPABILITIES,BOND,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
-#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON "GENERAL,CAPABILITIES,BOND,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
-#else
-#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL "GENERAL,CAPABILITIES,BOND,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4,DHCP4,IP6,DHCP6"
-#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON "GENERAL,CAPABILITIES,BOND,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4,DHCP4,IP6,DHCP6"
-#endif
-
-/* Available fields for 'dev list' - GENERAL part */
-static NmcOutputField nmc_fields_dev_list_general[] = {
- {"NAME", N_("NAME"), 10, NULL, 0}, /* 0 */
- {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 1 */
- {"TYPE", N_("TYPE"), 17, NULL, 0}, /* 2 */
- {"VENDOR", N_("VENDOR"), 20, NULL, 0}, /* 3 */
- {"PRODUCT", N_("PRODUCT"), 50, NULL, 0}, /* 4 */
- {"DRIVER", N_("DRIVER"), 9, NULL, 0}, /* 5 */
- {"DRIVER-VERSION", N_("DRIVER-VERSION"), 18, NULL, 0}, /* 6 */
- {"FIRMWARE-VERSION", N_("FIRMWARE-VERSION"), 18, NULL, 0}, /* 7 */
- {"HWADDR", N_("HWADDR"), 19, NULL, 0}, /* 8 */
- {"STATE", N_("STATE"), 14, NULL, 0}, /* 9 */
- {"REASON", N_("REASON"), 25, NULL, 0}, /* 10 */
- {"UDI", N_("UDI"), 64, NULL, 0}, /* 11 */
- {"IP-IFACE", N_("IP-IFACE"), 10, NULL, 0}, /* 12 */
- {"NM-MANAGED", N_("NM-MANAGED"), 15, NULL, 0}, /* 13 */
- {"AUTOCONNECT", N_("AUTOCONNECT"), 15, NULL, 0}, /* 14 */
- {"FIRMWARE-MISSING", N_("FIRMWARE-MISSING"), 18, NULL, 0}, /* 15 */
- {"CONNECTION", N_("CONNECTION"), 51, NULL, 0}, /* 16 */
- {NULL, NULL, 0, NULL, 0}
+#define NMC_FIELDS_DEV_SHOW_GENERAL_ALL "NAME,DEVICE,TYPE,VENDOR,PRODUCT,DRIVER,DRIVER-VERSION,FIRMWARE-VERSION,HWADDR,MTU,STATE,REASON,"\
+ "UDI,IP-IFACE,NM-MANAGED,AUTOCONNECT,FIRMWARE-MISSING,CONNECTION,CON-UUID,CON-PATH"
+#define NMC_FIELDS_DEV_SHOW_GENERAL_COMMON "NAME,DEVICE,TYPE,VENDOR,PRODUCT,DRIVER,HWADDR,STATE"
+
+/* Available fields for 'device show' - CONNECTIONS part */
+static NmcOutputField nmc_fields_dev_show_connections[] = {
+ {"NAME", N_("NAME"), 10}, /* 0 */
+ {"AVAILABLE-CONNECTION-PATHS", N_("AVAILABLE-CONNECTION-PATHS"), 80}, /* 1 */
+ {"AVAILABLE-CONNECTIONS", N_("AVAILABLE-CONNECTIONS"), 80}, /* 2 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_LIST_GENERAL_ALL "NAME,DEVICE,TYPE,VENDOR,PRODUCT,DRIVER,DRIVER-VERSION,FIRMWARE-VERSION,HWADDR,STATE,REASON,UDI,IP-IFACE,"\
- "NM-MANAGED,AUTOCONNECT,FIRMWARE-MISSING,CONNECTION"
-#define NMC_FIELDS_DEV_LIST_GENERAL_COMMON "NAME,DEVICE,TYPE,VENDOR,PRODUCT,DRIVER,HWADDR,STATE"
-
-/* Available fields for 'dev list' - CONNECTIONS part */
-static NmcOutputField nmc_fields_dev_list_connections[] = {
- {"NAME", N_("NAME"), 10, NULL, 0}, /* 0 */
- {"AVAILABLE-CONNECTION-PATHS", N_("AVAILABLE-CONNECTION-PATHS"), 80, NULL, 0}, /* 1 */
- {"AVAILABLE-CONNECTIONS", N_("AVAILABLE-CONNECTIONS"), 80, NULL, 0}, /* 2 */
- {NULL, NULL, 0, NULL, 0}
+#define NMC_FIELDS_DEV_SHOW_CONNECTIONS_ALL "AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
+#define NMC_FIELDS_DEV_SHOW_CONNECTIONS_COMMON "AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
+
+/* Available fields for 'device show' - CAPABILITIES part */
+static NmcOutputField nmc_fields_dev_show_cap[] = {
+ {"NAME", N_("NAME"), 13}, /* 0 */
+ {"CARRIER-DETECT", N_("CARRIER-DETECT"), 16}, /* 1 */
+ {"SPEED", N_("SPEED"), 10}, /* 2 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_LIST_CONNECTIONS_ALL "AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
-#define NMC_FIELDS_DEV_LIST_CONNECTIONS_COMMON "AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
-
-/* Available fields for 'dev list' - CAPABILITIES part */
-static NmcOutputField nmc_fields_dev_list_cap[] = {
- {"NAME", N_("NAME"), 13, NULL, 0}, /* 0 */
- {"CARRIER-DETECT", N_("CARRIER-DETECT"), 16, NULL, 0}, /* 1 */
- {"SPEED", N_("SPEED"), 10, NULL, 0}, /* 2 */
- {NULL, NULL, 0, NULL, 0}
+#define NMC_FIELDS_DEV_SHOW_CAP_ALL "NAME,CARRIER-DETECT,SPEED"
+#define NMC_FIELDS_DEV_SHOW_CAP_COMMON "NAME,CARRIER-DETECT,SPEED"
+
+/* Available fields for 'device show' - wired properties part */
+static NmcOutputField nmc_fields_dev_show_wired_prop[] = {
+ {"NAME", N_("NAME"), 18}, /* 0 */
+ {"CARRIER", N_("CARRIER"), 10}, /* 1 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_LIST_CAP_ALL "NAME,CARRIER-DETECT,SPEED"
-#define NMC_FIELDS_DEV_LIST_CAP_COMMON "NAME,CARRIER-DETECT,SPEED"
-
-/* Available fields for 'dev list' - wired properties part */
-static NmcOutputField nmc_fields_dev_list_wired_prop[] = {
- {"NAME", N_("NAME"), 18, NULL, 0}, /* 0 */
- {"CARRIER", N_("CARRIER"), 10, NULL, 0}, /* 1 */
- {NULL, NULL, 0, NULL, 0}
+#define NMC_FIELDS_DEV_SHOW_WIRED_PROP_ALL "NAME,CARRIER"
+#define NMC_FIELDS_DEV_SHOW_WIRED_PROP_COMMON "NAME,CARRIER"
+
+/* Available fields for 'device show' - wireless properties part */
+static NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
+ {"NAME", N_("NAME"), 18}, /* 0 */
+ {"WEP", N_("WEP"), 5}, /* 1 */
+ {"WPA", N_("WPA"), 5}, /* 2 */
+ {"WPA2", N_("WPA2"), 6}, /* 3 */
+ {"TKIP", N_("TKIP"), 6}, /* 4 */
+ {"CCMP", N_("CCMP"), 6}, /* 5 */
+ {"AP", N_("AP"), 6}, /* 6 */
+ {"ADHOC", N_("ADHOC"), 6}, /* 7 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_LIST_WIRED_PROP_ALL "NAME,CARRIER"
-#define NMC_FIELDS_DEV_LIST_WIRED_PROP_COMMON "NAME,CARRIER"
-
-
-/* Available fields for 'dev list' - wireless properties part */
-static NmcOutputField nmc_fields_dev_list_wifi_prop[] = {
- {"NAME", N_("NAME"), 18, NULL, 0}, /* 0 */
- {"WEP", N_("WEP"), 5, NULL, 0}, /* 1 */
- {"WPA", N_("WPA"), 5, NULL, 0}, /* 2 */
- {"WPA2", N_("WPA2"), 6, NULL, 0}, /* 3 */
- {"TKIP", N_("TKIP"), 6, NULL, 0}, /* 4 */
- {"CCMP", N_("CCMP"), 6, NULL, 0}, /* 5 */
- {"AP", N_("AP"), 6, NULL, 0}, /* 6 */
- {"ADHOC", N_("ADHOC"), 6, NULL, 0}, /* 7 */
- {NULL, NULL, 0, NULL, 0}
-};
-#define NMC_FIELDS_DEV_LIST_WIFI_PROP_ALL "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC"
-#define NMC_FIELDS_DEV_LIST_WIFI_PROP_COMMON "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC"
-
-#if WITH_WIMAX
-/* Available fields for 'dev list' - wimax properties part */
-static NmcOutputField nmc_fields_dev_list_wimax_prop[] = {
- {"NAME", N_("NAME"), 18, NULL, 0}, /* 0 */
- {"CTR-FREQ", N_("CTR-FREQ"), 7, NULL, 0}, /* 1 */
- {"RSSI", N_("RSSI"), 5, NULL, 0}, /* 2 */
- {"CINR", N_("CINR"), 5, NULL, 0}, /* 3 */
- {"TX-POW", N_("TX-POW"), 5, NULL, 0}, /* 4 */
- {"BSID", N_("BSID"), 18, NULL, 0}, /* 5 */
- {NULL, NULL, 0, NULL, 0}
+#define NMC_FIELDS_DEV_SHOW_WIFI_PROP_ALL "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC"
+#define NMC_FIELDS_DEV_SHOW_WIFI_PROP_COMMON "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC"
+
+/* Available fields for 'device show' - wimax properties part */
+static NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
+ {"NAME", N_("NAME"), 18}, /* 0 */
+ {"CTR-FREQ", N_("CTR-FREQ"), 7}, /* 1 */
+ {"RSSI", N_("RSSI"), 5}, /* 2 */
+ {"CINR", N_("CINR"), 5}, /* 3 */
+ {"TX-POW", N_("TX-POW"), 5}, /* 4 */
+ {"BSID", N_("BSID"), 18}, /* 5 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_LIST_WIMAX_PROP_ALL "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
-#define NMC_FIELDS_DEV_LIST_WIMAX_PROP_COMMON "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
-#endif
+#define NMC_FIELDS_DEV_SHOW_WIMAX_PROP_ALL "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
+#define NMC_FIELDS_DEV_SHOW_WIMAX_PROP_COMMON "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
-/* Available fields for 'dev wifi list' */
+/* Available fields for 'device wifi list' */
static NmcOutputField nmc_fields_dev_wifi_list[] = {
- {"NAME", N_("NAME"), 15, NULL, 0}, /* 0 */
- {"SSID", N_("SSID"), 33, NULL, 0}, /* 1 */
- {"BSSID", N_("BSSID"), 19, NULL, 0}, /* 2 */
- {"MODE", N_("MODE"), 16, NULL, 0}, /* 3 */
- {"FREQ", N_("FREQ"), 10, NULL, 0}, /* 4 */
- {"RATE", N_("RATE"), 10, NULL, 0}, /* 5 */
- {"SIGNAL", N_("SIGNAL"), 8, NULL, 0}, /* 6 */
- {"SECURITY", N_("SECURITY"), 10, NULL, 0}, /* 7 */
- {"WPA-FLAGS", N_("WPA-FLAGS"), 25, NULL, 0}, /* 8 */
- {"RSN-FLAGS", N_("RSN-FLAGS"), 25, NULL, 0}, /* 9 */
- {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 10 */
- {"ACTIVE", N_("ACTIVE"), 8, NULL, 0}, /* 11 */
- {"DBUS-PATH", N_("DBUS-PATH"), 46, NULL, 0}, /* 12 */
- {NULL, NULL, 0, NULL, 0}
+ {"NAME", N_("NAME"), 15}, /* 0 */
+ {"SSID", N_("SSID"), 33}, /* 1 */
+ {"SSID-HEX", N_("SSID-HEX"), 66}, /* 2 */
+ {"BSSID", N_("BSSID"), 19}, /* 3 */
+ {"MODE", N_("MODE"), 16}, /* 4 */
+ {"CHAN", N_("CHAN"), 6}, /* 5 */
+ {"FREQ", N_("FREQ"), 10}, /* 6 */
+ {"RATE", N_("RATE"), 10}, /* 7 */
+ {"SIGNAL", N_("SIGNAL"), 8}, /* 8 */
+ {"BARS", N_("BARS"), 6}, /* 9 */
+ {"SECURITY", N_("SECURITY"), 10}, /* 10 */
+ {"WPA-FLAGS", N_("WPA-FLAGS"), 25}, /* 11 */
+ {"RSN-FLAGS", N_("RSN-FLAGS"), 25}, /* 12 */
+ {"DEVICE", N_("DEVICE"), 10}, /* 13 */
+ {"ACTIVE", N_("ACTIVE"), 8}, /* 14 */
+ {"IN-USE", N_("*"), 1}, /* 15 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 46}, /* 16 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_WIFI_LIST_ALL "SSID,BSSID,MODE,FREQ,RATE,SIGNAL,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,DBUS-PATH"
-#define NMC_FIELDS_DEV_WIFI_LIST_COMMON "SSID,BSSID,MODE,FREQ,RATE,SIGNAL,SECURITY,ACTIVE"
+#define NMC_FIELDS_DEV_WIFI_LIST_ALL "SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,"\
+ "WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH"
+#define NMC_FIELDS_DEV_WIFI_LIST_COMMON "IN-USE,SSID,MODE,CHAN,RATE,SIGNAL,BARS,SECURITY"
#define NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIFI_LIST_COMMON
-#if WITH_WIMAX
-/* Available fields for 'dev wimax list' */
+/* Available fields for 'device wimax list' */
static NmcOutputField nmc_fields_dev_wimax_list[] = {
- {"NAME", N_("NAME"), 15, NULL, 0}, /* 0 */
- {"NSP", N_("NSP"), 33, NULL, 0}, /* 1 */
- {"SIGNAL", N_("SIGNAL"), 8, NULL, 0}, /* 2 */
- {"TYPE", N_("TYPE"), 16, NULL, 0}, /* 3 */
- {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 4 */
- {"ACTIVE", N_("ACTIVE"), 8, NULL, 0}, /* 5 */
- {"DBUS-PATH", N_("DBUS-PATH"), 46, NULL, 0}, /* 6 */
- {NULL, NULL, 0, NULL, 0}
+ {"NAME", N_("NAME"), 15}, /* 0 */
+ {"NSP", N_("NSP"), 33}, /* 1 */
+ {"SIGNAL", N_("SIGNAL"), 8}, /* 2 */
+ {"TYPE", N_("TYPE"), 16}, /* 3 */
+ {"DEVICE", N_("DEVICE"), 10}, /* 4 */
+ {"ACTIVE", N_("ACTIVE"), 8}, /* 5 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 46}, /* 6 */
+ {NULL, NULL, 0}
};
#define NMC_FIELDS_DEV_WIMAX_LIST_ALL "NSP,SIGNAL,TYPE,DEVICE,ACTIVE,DBUS-PATH"
#define NMC_FIELDS_DEV_WIMAX_LIST_COMMON "NSP,SIGNAL,TYPE,DEVICE,ACTIVE"
#define NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIMAX_LIST_COMMON
-#endif
-/* Available fields for 'dev list' - BOND part */
-static NmcOutputField nmc_fields_dev_list_bond_prop[] = {
- {"NAME", N_("NAME"), 18, NULL, 0}, /* 0 */
- {"SLAVES", N_("SLAVES"), 20, NULL, 0}, /* 1 */
- {NULL, NULL, 0, NULL, 0}
+/* Available fields for 'device show' - BOND part */
+static NmcOutputField nmc_fields_dev_show_bond_prop[] = {
+ {"NAME", N_("NAME"), 18}, /* 0 */
+ {"SLAVES", N_("SLAVES"), 20}, /* 1 */
+ {NULL, NULL, 0}
+};
+#define NMC_FIELDS_DEV_SHOW_BOND_PROP_ALL "NAME,SLAVES"
+#define NMC_FIELDS_DEV_SHOW_BOND_PROP_COMMON "NAME,SLAVES"
+
+/* Available fields for 'device show' - VLAN part */
+static NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
+ {"NAME", N_("NAME"), 18}, /* 0 */
+ {"ID", N_("ID"), 5}, /* 1 */
+ {NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_LIST_BOND_PROP_ALL "NAME,SLAVES"
-#define NMC_FIELDS_DEV_LIST_BOND_PROP_COMMON "NAME,SLAVES"
-
-/* Available fields for 'dev list' - VLAN part */
-static NmcOutputField nmc_fields_dev_list_vlan_prop[] = {
- {"NAME", N_("NAME"), 18, NULL, 0}, /* 0 */
- {"ID", N_("ID"), 5, NULL, 0}, /* 1 */
- {NULL, NULL, 0, NULL, 0}
+#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_ALL "NAME,ID"
+#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_COMMON "NAME,ID"
+
+/* defined in common.c */
+extern NmcOutputField nmc_fields_ip4_config[];
+extern NmcOutputField nmc_fields_ip6_config[];
+extern NmcOutputField nmc_fields_dhcp4_config[];
+extern NmcOutputField nmc_fields_dhcp6_config[];
+
+/* Available sections for 'device show' */
+static NmcOutputField nmc_fields_dev_show_sections[] = {
+ {"GENERAL", N_("GENERAL"), 0, nmc_fields_dev_show_general + 1 }, /* 0 */
+ {"CAPABILITIES", N_("CAPABILITIES"), 0, nmc_fields_dev_show_cap + 1 }, /* 1 */
+ {"WIFI-PROPERTIES", N_("WIFI-PROPERTIES"), 0, nmc_fields_dev_show_wifi_prop + 1 }, /* 2 */
+ {"AP", N_("AP"), 0, nmc_fields_dev_wifi_list + 1 }, /* 3 */
+ {"WIRED-PROPERTIES", N_("WIRED-PROPERTIES"), 0, nmc_fields_dev_show_wired_prop + 1 }, /* 4 */
+ {"WIMAX-PROPERTIES", N_("WIMAX-PROPERTIES"), 0, nmc_fields_dev_show_wimax_prop + 1 }, /* 5 */
+ {"NSP", N_("NSP"), 0, nmc_fields_dev_wimax_list + 1 }, /* 6 */
+ {"IP4", N_("IP4"), 0, nmc_fields_ip4_config + 1 }, /* 7 */
+ {"DHCP4", N_("DHCP4"), 0, nmc_fields_dhcp4_config + 1 }, /* 8 */
+ {"IP6", N_("IP6"), 0, nmc_fields_ip6_config + 1 }, /* 9 */
+ {"DHCP6", N_("DHCP6"), 0, nmc_fields_dhcp6_config + 1 }, /* 10 */
+ {"BOND", N_("BOND"), 0, nmc_fields_dev_show_bond_prop + 1 }, /* 11 */
+ {"VLAN", N_("VLAN"), 0, nmc_fields_dev_show_vlan_prop + 1 }, /* 12 */
+ {"CONNECTIONS", N_("CONNECTIONS"), 0, nmc_fields_dev_show_connections + 1 }, /* 13 */
+ {NULL, NULL, 0, NULL }
};
-#define NMC_FIELDS_DEV_LIST_VLAN_PROP_ALL "NAME,ID"
-#define NMC_FIELDS_DEV_LIST_VLAN_PROP_COMMON "NAME,ID"
+#if WITH_WIMAX
+#define NMC_FIELDS_DEV_SHOW_SECTIONS_ALL "GENERAL,CAPABILITIES,BOND,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,"\
+ "WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
+#define NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON "GENERAL.DEVICE,GENERAL.TYPE,GENERAL.HWADDR,GENERAL.MTU,GENERAL.STATE,"\
+ "GENERAL.CONNECTION,GENERAL.CON-PATH,WIRED-PROPERTIES,IP4,IP6"
+#else
+#define NMC_FIELDS_DEV_SHOW_SECTIONS_ALL "GENERAL,CAPABILITIES,BOND,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,"\
+ "IP4,DHCP4,IP6,DHCP6"
+#define NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON "GENERAL.DEVICE,GENERAL.TYPE,GENERAL.HWADDR,GENERAL.MTU,GENERAL.STATE,"\
+ "GENERAL.CONNECTION,GENERAL.CON-PATH,WIRED-PROPERTIES,IP4,IP6"
+#endif
/* glib main loop variable - defined in nmcli.c */
@@ -257,23 +276,127 @@ usage (void)
fprintf (stderr,
_("Usage: nmcli device { COMMAND | help }\n\n"
#if WITH_WIMAX
- " COMMAND := { status | list | disconnect | wifi | wimax }\n\n"
+ "COMMAND := { status | show | connect | disconnect | wifi | wimax }\n\n"
#else
- " COMMAND := { status | list | disconnect | wifi }\n\n"
+ "COMMAND := { status | show | connect | disconnect | wifi }\n\n"
#endif
- " status\n"
- " list [iface <iface>]\n"
- " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
- " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
- " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [iface <iface>] [bssid <BSSID>] [name <name>]\n"
- " [--private] [--nowait] [--timeout <timeout>]\n"
+ " status\n\n"
+ " show [<ifname>]\n\n"
+ " connect <ifname>\n\n"
+ " disconnect <ifname>\n\n"
+ " wifi [list [ifname <ifname>] [bssid <BSSID>]]\n\n"
+ " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [ifname <ifname>]\n"
+ " [bssid <BSSID>] [name <name>] [private yes|no]\n\n"
+ " wifi rescan [[ifname] <ifname>]\n\n"
#if WITH_WIMAX
- " wimax [list [iface <iface>] [nsp <name>]]\n"
+ " wimax [list [ifname <ifname>] [nsp <name>]]\n\n"
#endif
- "\n"
));
}
+static void
+usage_device_status (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli device status { help }\n"
+ "\n"
+ "Show status for all devices.\n"
+ "By default, the following columns are shown:\n"
+ " DEVICE - interface name\n"
+ " TYPE - device type\n"
+ " STATE - device state\n"
+ " CONNECTION - connection activated on device (if any)\n"
+ "Displayed columns can be changed using '--fields' global option. 'status' is\n"
+ "the default command, which means 'nmcli device' calls 'nmcli device status'.\n\n"));
+}
+
+static void
+usage_device_show (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli device show { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [<ifname>]\n"
+ "\n"
+ "Show details of device(s).\n"
+ "The command lists details for all devices, or for a given device.\n\n"));
+}
+
+static void
+usage_device_connect (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli device connect { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := <ifname>\n"
+ "\n"
+ "Connect the device.\n"
+ "NetworkManager will try to find a suitable connection that will be activated.\n"
+ "It will also consider connections that are not set to auto-connect.\n\n"));
+}
+
+static void
+usage_device_disconnect (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := <ifname>\n"
+ "\n"
+ "Disconnect the device.\n"
+ "The command disconnects the device and prevents it from auto-activating\n"
+ "further connections without user/manual intervention.\n\n"));
+}
+
+static void
+usage_device_wifi (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli device wifi { ARGUMENTS | help }\n"
+ "\n"
+ "Perform operation on Wi-Fi devices.\n"
+ "\n"
+ "ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+ "\n"
+ "List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+ "used to list APs for a particular interface, or with a specific BSSID.\n"
+ "\n"
+ "ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [ifname <ifname>]\n"
+ " [bssid <BSSID>] [name <name>] [private yes|no]\n"
+ "\n"
+ "Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+ "a new connection and then activates it on a device. This is a command-line\n"
+ "counterpart of clicking an SSID in a GUI client. The command always creates\n"
+ "a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+ "networks. If a connection for the network already exists, it is better to\n"
+ "bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+ "only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+ "assumed that IP configuration is obtained via DHCP.\n"
+ "\n"
+ "ARGUMENTS := rescan [[ifname] <ifname>]\n"
+ "\n"
+ "Request that NetworkManager immediately re-scan for available access points.\n"
+ "NetworkManager scans Wi-Fi networks periodically, but in some cases it might\n"
+ "be useful to start scanning manually. Note that this command does not show\n"
+ "the APs, use 'nmcli device wifi list' for that.\n\n"));
+}
+
+#if WITH_WIMAX
+static void
+usage_device_wimax (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli device wimax { ARGUMENTS | help }\n"
+ "\n"
+ "Perform operation on WiMAX devices.\n"
+ "\n"
+ "ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+ "\n"
+ "List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+ "list networks for a particular interface, or with a specific NSP.\n\n"));
+}
+#endif
+
/* quit main loop */
static void
quit (void)
@@ -286,47 +409,46 @@ quit (void)
g_main_loop_quit (loop); /* quit main loop */
}
-/* Convert device type to string. Use setting names strings to match with
- * connection type names.
- */
-static const char *
-device_type_to_string (NMDevice *device)
+static int
+compare_devices (const void *a, const void *b)
{
- NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE;
-
- switch (nm_device_get_device_type (device)) {
- case NM_DEVICE_TYPE_ETHERNET:
- return NM_SETTING_WIRED_SETTING_NAME;
- case NM_DEVICE_TYPE_ADSL:
- return NM_SETTING_ADSL_SETTING_NAME;
- case NM_DEVICE_TYPE_WIFI:
- return NM_SETTING_WIRELESS_SETTING_NAME;
- case NM_DEVICE_TYPE_MODEM:
- caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
- if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
- return NM_SETTING_GSM_SETTING_NAME;
- else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
- return NM_SETTING_CDMA_SETTING_NAME;
- return _("Unknown");
- case NM_DEVICE_TYPE_BT:
- return NM_SETTING_BLUETOOTH_SETTING_NAME;
- case NM_DEVICE_TYPE_OLPC_MESH:
- return NM_SETTING_OLPC_MESH_SETTING_NAME;
-#if WITH_WIMAX
- case NM_DEVICE_TYPE_WIMAX:
- return NM_SETTING_WIMAX_SETTING_NAME;
-#endif
- case NM_DEVICE_TYPE_INFINIBAND:
- return NM_SETTING_INFINIBAND_SETTING_NAME;
- case NM_DEVICE_TYPE_BOND:
- return NM_SETTING_BOND_SETTING_NAME;
- case NM_DEVICE_TYPE_VLAN:
- return NM_SETTING_VLAN_SETTING_NAME;
- case NM_DEVICE_TYPE_BRIDGE:
- return NM_SETTING_BRIDGE_SETTING_NAME;
- default:
- return _("Unknown");
+ NMDevice *da = *(NMDevice **)a;
+ NMDevice *db = *(NMDevice **)b;
+ int cmp;
+
+ /* Sort by later device states first */
+ cmp = nm_device_get_state (db) - nm_device_get_state (da);
+ if (cmp != 0)
+ return cmp;
+
+ cmp = g_strcmp0 (nm_device_get_type_description (da),
+ nm_device_get_type_description (db));
+ if (cmp != 0)
+ return cmp;
+
+ return g_strcmp0 (nm_device_get_iface (da),
+ nm_device_get_iface (db));
+}
+
+static NMDevice **
+get_devices_sorted (NMClient *client)
+{
+ const GPtrArray *devs;
+ NMDevice **sorted;
+
+ devs = nm_client_get_devices (client);
+ if (!devs) {
+ sorted = g_new (NMDevice *, 1);
+ sorted[0] = NULL;
+ return sorted;
}
+
+ sorted = g_new (NMDevice *, devs->len + 1);
+ memcpy (sorted, devs->pdata, devs->len * sizeof (NMDevice *));
+ sorted[devs->len] = NULL;
+
+ qsort (sorted, devs->len, sizeof (NMDevice *), compare_devices);
+ return sorted;
}
static char *
@@ -374,15 +496,17 @@ ap_wpa_rsn_flags_to_string (NM80211ApSecurityFlags flags)
typedef struct {
NmCli *nmc;
int index;
+ guint32 output_flags;
const char* active_bssid;
const char* device;
} APInfo;
static void
-detail_access_point (gpointer data, gpointer user_data)
+fill_output_access_point (gpointer data, gpointer user_data)
{
NMAccessPoint *ap = NM_ACCESS_POINT (data);
APInfo *info = (APInfo *) user_data;
+ NmcOutputField *arr;
gboolean active = FALSE;
NM80211ApFlags flags;
NM80211ApSecurityFlags wpa_flags, rsn_flags;
@@ -391,9 +515,16 @@ detail_access_point (gpointer data, gpointer user_data)
const GByteArray *ssid;
const char *bssid;
NM80211Mode mode;
- char *freq_str, *ssid_str, *bitrate_str, *strength_str, *wpa_flags_str, *rsn_flags_str;
+ char *channel_str, *freq_str, *ssid_str = NULL, *ssid_hex_str = NULL,
+ *bitrate_str, *strength_str, *wpa_flags_str, *rsn_flags_str;
GString *security_str;
char *ap_name;
+ const char *sig_level_0 = "____";
+ const char *sig_level_1 = "â–‚___";
+ const char *sig_level_2 = "â–‚â–„__";
+ const char *sig_level_3 = "â–‚â–„â–†_";
+ const char *sig_level_4 = "▂▄▆█";
+ const char *sig_bars;
if (info->active_bssid) {
const char *current_bssid = nm_access_point_get_bssid (ap);
@@ -410,75 +541,89 @@ detail_access_point (gpointer data, gpointer user_data)
freq = nm_access_point_get_frequency (ap);
mode = nm_access_point_get_mode (ap);
bitrate = nm_access_point_get_max_bitrate (ap);
- strength = nm_access_point_get_strength (ap);
+ strength = MIN (nm_access_point_get_strength (ap), 100);
/* Convert to strings */
- ssid_str = ssid_to_printable ((const char *) ssid->data, ssid->len);
+ if (ssid) {
+ ssid_str = nm_utils_ssid_to_utf8 (ssid);
+ ssid_hex_str = ssid_to_hex ((const char *) ssid->data, ssid->len);
+ }
+ channel_str = g_strdup_printf ("%u", nm_utils_wifi_freq_to_channel (freq));
freq_str = g_strdup_printf (_("%u MHz"), freq);
- bitrate_str = g_strdup_printf (_("%u MB/s"), bitrate/1000);
+ bitrate_str = g_strdup_printf (_("%u Mbit/s"), bitrate/1000);
strength_str = g_strdup_printf ("%u", strength);
wpa_flags_str = ap_wpa_rsn_flags_to_string (wpa_flags);
rsn_flags_str = ap_wpa_rsn_flags_to_string (rsn_flags);
+ sig_bars = strength > 80 ? sig_level_4 :
+ strength > 55 ? sig_level_3 :
+ strength > 30 ? sig_level_2 :
+ strength > 5 ? sig_level_1 :
+ sig_level_0;
security_str = g_string_new (NULL);
- if ( !(flags & NM_802_11_AP_FLAGS_PRIVACY)
- && (wpa_flags != NM_802_11_AP_SEC_NONE)
- && (rsn_flags != NM_802_11_AP_SEC_NONE))
- g_string_append (security_str, _("Encrypted: "));
if ( (flags & NM_802_11_AP_FLAGS_PRIVACY)
&& (wpa_flags == NM_802_11_AP_SEC_NONE)
- && (rsn_flags == NM_802_11_AP_SEC_NONE))
- g_string_append (security_str, _("WEP "));
- if (wpa_flags != NM_802_11_AP_SEC_NONE)
- g_string_append (security_str, _("WPA "));
- if (rsn_flags != NM_802_11_AP_SEC_NONE)
- g_string_append (security_str, _("WPA2 "));
+ && (rsn_flags == NM_802_11_AP_SEC_NONE)) {
+ g_string_append (security_str, _("WEP"));
+ g_string_append_c (security_str, ' ');
+ }
+ if (wpa_flags != NM_802_11_AP_SEC_NONE) {
+ g_string_append (security_str, _("WPA1"));
+ g_string_append_c (security_str, ' ');
+ }
+ if (rsn_flags != NM_802_11_AP_SEC_NONE) {
+ g_string_append (security_str, _("WPA2"));
+ g_string_append_c (security_str, ' ');
+ }
if ( (wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
- || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
- g_string_append (security_str, _("Enterprise "));
+ || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) {
+ g_string_append (security_str, _("802.1X"));
+ g_string_append_c (security_str, ' ');
+ }
if (security_str->len > 0)
g_string_truncate (security_str, security_str->len-1); /* Chop off last space */
+ arr = nmc_dup_fields_array (nmc_fields_dev_wifi_list,
+ sizeof (nmc_fields_dev_wifi_list),
+ info->output_flags);
+
ap_name = g_strdup_printf ("AP[%d]", info->index++); /* AP */
- info->nmc->allowed_fields[0].value = ap_name;
- info->nmc->allowed_fields[1].value = ssid_str;
- info->nmc->allowed_fields[2].value = bssid;
- info->nmc->allowed_fields[3].value = mode == NM_802_11_MODE_ADHOC ? _("Ad-Hoc")
- : mode == NM_802_11_MODE_INFRA ? _("Infrastructure")
- : _("Unknown");
- info->nmc->allowed_fields[4].value = freq_str;
- info->nmc->allowed_fields[5].value = bitrate_str;
- info->nmc->allowed_fields[6].value = strength_str;
- info->nmc->allowed_fields[7].value = security_str->str;
- info->nmc->allowed_fields[8].value = wpa_flags_str;
- info->nmc->allowed_fields[9].value = rsn_flags_str;
- info->nmc->allowed_fields[10].value = info->device;
- info->nmc->allowed_fields[11].value = active ? _("yes") : _("no");
- info->nmc->allowed_fields[12].value = nm_object_get_path (NM_OBJECT (ap));
-
- info->nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
- print_fields (info->nmc->print_fields, info->nmc->allowed_fields);
-
- g_free (ap_name);
- g_free (ssid_str);
- g_free (freq_str);
- g_free (bitrate_str);
- g_free (strength_str);
- g_free (wpa_flags_str);
- g_free (rsn_flags_str);
- g_string_free (security_str, TRUE);
+ set_val_str (arr, 0, ap_name);
+ set_val_str (arr, 1, ssid_str);
+ set_val_str (arr, 2, ssid_hex_str);
+ set_val_strc (arr, 3, bssid);
+ set_val_strc (arr, 4, mode == NM_802_11_MODE_ADHOC ? _("Ad-Hoc")
+ : mode == NM_802_11_MODE_INFRA ? _("Infra")
+ : _("N/A"));
+ set_val_str (arr, 5, channel_str);
+ set_val_str (arr, 6, freq_str);
+ set_val_str (arr, 7, bitrate_str);
+ set_val_str (arr, 8, strength_str);
+ set_val_strc (arr, 9, sig_bars);
+ set_val_str (arr, 10, security_str->str);
+ set_val_str (arr, 11, wpa_flags_str);
+ set_val_str (arr, 12, rsn_flags_str);
+ set_val_strc (arr, 13, info->device);
+ set_val_strc (arr, 14, active ? _("yes") : _("no"));
+ set_val_strc (arr, 15, active ? "*" : " ");
+ set_val_strc (arr, 16, nm_object_get_path (NM_OBJECT (ap)));
+
+ g_ptr_array_add (info->nmc->output_data, arr);
+
+ g_string_free (security_str, FALSE);
}
#if WITH_WIMAX
static void
-detail_wimax_nsp (NMWimaxNsp *nsp, NmCli *nmc, NMDevice *dev, int idx)
+fill_output_wimax_nsp (NMWimaxNsp *nsp, NmCli *nmc, NMDevice *dev, int idx, guint32 o_flags)
{
NMDeviceWimax *wimax = NM_DEVICE_WIMAX (dev);
char *nsp_name, *quality_str;
const char *ntype;
gboolean active = FALSE;
+ NmcOutputField *arr;
switch (nm_wimax_nsp_get_network_type (nsp)) {
case NM_WIMAX_NSP_NETWORK_TYPE_HOME:
@@ -503,32 +648,64 @@ detail_wimax_nsp (NMWimaxNsp *nsp, NmCli *nmc, NMDevice *dev, int idx)
quality_str = g_strdup_printf ("%u", nm_wimax_nsp_get_signal_quality (nsp));
nsp_name = g_strdup_printf ("NSP[%d]", idx); /* NSP */
- nmc->allowed_fields[0].value = nsp_name;
- nmc->allowed_fields[1].value = nm_wimax_nsp_get_name (nsp);
- nmc->allowed_fields[2].value = quality_str;
- nmc->allowed_fields[3].value = ntype;
- nmc->allowed_fields[4].value = nm_device_get_iface (dev);
- nmc->allowed_fields[5].value = active ? _("yes") : _("no");
- nmc->allowed_fields[6].value = nm_object_get_path (NM_OBJECT (nsp));
+ arr = nmc_dup_fields_array (nmc_fields_dev_wimax_list,
+ sizeof (nmc_fields_dev_wimax_list),
+ o_flags);
+ set_val_str (arr, 0, nsp_name);
+ set_val_strc (arr, 1, nm_wimax_nsp_get_name (nsp));
+ set_val_str (arr, 2, quality_str);
+ set_val_strc (arr, 3, ntype);
+ set_val_strc (arr, 4, nm_device_get_iface (dev));
+ set_val_strc (arr, 5, active ? _("yes") : _("no"));
+ set_val_strc (arr, 6, nm_object_get_path (NM_OBJECT (nsp)));
+
+ g_ptr_array_add (nmc->output_data, arr);
+}
+#endif
+
+static const char *
+construct_header_name (const char *base, const char *spec)
+{
+ static char header_name[128];
- nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ if (spec == NULL)
+ return base;
- g_free (nsp_name);
- g_free (quality_str);
+ g_strlcpy (header_name, base, sizeof (header_name));
+ g_strlcat (header_name, " (", sizeof (header_name));
+ g_strlcat (header_name, spec, sizeof (header_name));
+ g_strlcat (header_name, ")", sizeof (header_name));
+
+ return header_name;
}
-#endif
-struct cb_info {
- NMClient *client;
- const GPtrArray *active;
-};
+static const char *
+get_active_connection_id (NMDevice *device)
+{
+ const GPtrArray *avail_cons;
+ NMActiveConnection *ac;
+ const char *ac_uuid;
+ int i;
-static void
-show_device_info (gpointer data, gpointer user_data)
+ ac = nm_device_get_active_connection (device);
+ if (!ac)
+ return NULL;
+ ac_uuid = nm_active_connection_get_uuid (ac);
+
+ avail_cons = nm_device_get_available_connections (device);
+ for (i = 0; avail_cons && (i < avail_cons->len); i++) {
+ NMRemoteConnection *candidate = g_ptr_array_index (avail_cons, i);
+ const char *test_uuid = nm_connection_get_uuid (NM_CONNECTION (candidate));
+
+ if (g_strcmp0 (ac_uuid, test_uuid) == 0)
+ return nm_connection_get_id (NM_CONNECTION (candidate));
+ }
+ return NULL;
+}
+
+static gboolean
+show_device_info (NMDevice *device, NmCli *nmc)
{
- NMDevice *device = NM_DEVICE (data);
- NmCli *nmc = (NmCli *) user_data;
GError *error = NULL;
APInfo *info;
const char *hwaddr = NULL;
@@ -537,18 +714,21 @@ show_device_info (gpointer data, gpointer user_data)
NMDeviceCapabilities caps;
NMActiveConnection *acon;
guint32 speed;
- char *speed_str = NULL;
- char *state_str = NULL;
- char *reason_str = NULL;
+ char *speed_str, *state_str, *reason_str, *mtu_str;
GArray *sections_array;
int k;
char *fields_str;
- char *fields_all = NMC_FIELDS_DEV_LIST_SECTIONS_ALL;
- char *fields_common = NMC_FIELDS_DEV_LIST_SECTIONS_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ char *fields_all = NMC_FIELDS_DEV_SHOW_SECTIONS_ALL;
+ char *fields_common = NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
gboolean was_output = FALSE;
+ NMIP4Config *cfg4;
+ NMIP6Config *cfg6;
+ NMDHCP4Config *dhcp4;
+ NMDHCP6Config *dhcp6;
+ const char *base_hdr = _("Device details");
+ GPtrArray *fields_in_section = NULL;
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
fields_str = fields_common;
@@ -557,94 +737,87 @@ show_device_info (gpointer data, gpointer user_data)
else
fields_str = nmc->required_fields;
- sections_array = parse_output_fields (fields_str, nmc_fields_dev_list_sections, &error);
+ sections_array = parse_output_fields (fields_str, nmc_fields_dev_show_sections, TRUE, &fields_in_section, &error);
if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'dev list': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'dev list': %s; allowed fields: %s"), error->message, NMC_FIELDS_DEV_LIST_SECTIONS_ALL);
+ g_string_printf (nmc->return_text, _("Error: 'device show': %s"), error->message);
g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- return;
+ return FALSE;
}
/* Main header */
- nmc->allowed_fields = nmc_fields_dev_list_general;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ONLY;
- nmc->print_fields.header_name = _("Device details");
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_GENERAL_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, nm_device_get_iface (device));
+ nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_SHOW_GENERAL_ALL,
+ nmc_fields_dev_show_general, FALSE, NULL, NULL);
+
+ nmc_fields_dev_show_general[0].flags = NMC_OF_FLAG_MAIN_HEADER_ONLY;
+ print_required_fields (nmc, nmc_fields_dev_show_general);
/* Loop through the required sections and print them. */
for (k = 0; k < sections_array->len; k++) {
int section_idx = g_array_index (sections_array, int, k);
+ char *section_fld = (char *) g_ptr_array_index (fields_in_section, k);
if (nmc->print_output != NMC_PRINT_TERSE && !nmc->multiline_output && was_output)
- printf ("\n"); /* Empty line */
+ printf ("\n"); /* Print empty line between groups in tabular mode */
was_output = FALSE;
+ /* Remove any previous data */
+ nmc_empty_output_fields (nmc);
+
state = nm_device_get_state_reason (device, &reason);
/* section GENERAL */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[0].name)) {
- nmc->allowed_fields = nmc_fields_dev_list_general;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_GENERAL_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- if (NM_IS_DEVICE_ETHERNET (device))
- hwaddr = nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device));
- else if (NM_IS_DEVICE_WIFI (device))
- hwaddr = nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device));
-#if WITH_WIMAX
- else if (NM_IS_DEVICE_WIMAX (device))
- hwaddr = nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device));
-#endif
- else if (NM_IS_DEVICE_INFINIBAND (device))
- hwaddr = nm_device_infiniband_get_hw_address (NM_DEVICE_INFINIBAND (device));
- else if (NM_IS_DEVICE_BOND (device))
- hwaddr = nm_device_bond_get_hw_address (NM_DEVICE_BOND (device));
- else if (NM_IS_DEVICE_VLAN (device))
- hwaddr = nm_device_vlan_get_hw_address (NM_DEVICE_VLAN (device));
- else if (NM_IS_DEVICE_BRIDGE (device))
- hwaddr = nm_device_bridge_get_hw_address (NM_DEVICE_BRIDGE (device));
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[0].name)) {
+ tmpl = nmc_fields_dev_show_general;
+ tmpl_len = sizeof (nmc_fields_dev_show_general);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_GENERAL_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
state_str = g_strdup_printf ("%d (%s)", state, nmc_device_state_to_string (state));
reason_str = g_strdup_printf ("%d (%s)", reason, nmc_device_reason_to_string (reason));
-
- nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[0].name; /* "GENERAL"*/
- nmc->allowed_fields[1].value = nm_device_get_iface (device);
- nmc->allowed_fields[2].value = device_type_to_string (device);
- nmc->allowed_fields[3].value = nm_device_get_vendor (device);
- nmc->allowed_fields[4].value = nm_device_get_product (device);
- nmc->allowed_fields[5].value = nm_device_get_driver (device) ? nm_device_get_driver (device) : _("(unknown)");
- nmc->allowed_fields[6].value = nm_device_get_driver_version (device);
- nmc->allowed_fields[7].value = nm_device_get_firmware_version (device);
- nmc->allowed_fields[8].value = hwaddr ? hwaddr : _("(unknown)");
- nmc->allowed_fields[9].value = state_str;
- nmc->allowed_fields[10].value = reason_str;
- nmc->allowed_fields[11].value = nm_device_get_udi (device);
- nmc->allowed_fields[12].value = nm_device_get_ip_iface (device);
- nmc->allowed_fields[13].value = nm_device_get_managed (device) ? _("yes") : _("no");
- nmc->allowed_fields[14].value = nm_device_get_autoconnect (device) ? _("yes") : _("no");
- nmc->allowed_fields[15].value = nm_device_get_firmware_missing (device) ? _("yes") : _("no");
- nmc->allowed_fields[16].value = (acon = nm_device_get_active_connection (device)) ?
- nm_object_get_path (NM_OBJECT (acon)) : _("not connected");
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
- g_free (state_str);
- g_free (reason_str);
+ hwaddr = nm_device_get_hw_address (device);
+ mtu_str = g_strdup_printf ("%u", nm_device_get_mtu (device));
+ acon = nm_device_get_active_connection (device);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[0].name); /* "GENERAL"*/
+ set_val_strc (arr, 1, nm_device_get_iface (device));
+ set_val_strc (arr, 2, nm_device_get_type_description (device));
+ set_val_strc (arr, 3, nm_device_get_vendor (device));
+ set_val_strc (arr, 4, nm_device_get_product (device));
+ set_val_strc (arr, 5, nm_device_get_driver (device) ? nm_device_get_driver (device) : _("(unknown)"));
+ set_val_strc (arr, 6, nm_device_get_driver_version (device));
+ set_val_strc (arr, 7, nm_device_get_firmware_version (device));
+ set_val_strc (arr, 8, hwaddr ? hwaddr : _("(unknown)"));
+ set_val_str (arr, 9, mtu_str);
+ set_val_str (arr, 10, state_str);
+ set_val_str (arr, 11, reason_str);
+ set_val_strc (arr, 12, nm_device_get_udi (device));
+ set_val_strc (arr, 13, nm_device_get_ip_iface (device));
+ set_val_strc (arr, 14, nm_device_get_managed (device) ? _("yes") : _("no"));
+ set_val_strc (arr, 15, nm_device_get_autoconnect (device) ? _("yes") : _("no"));
+ set_val_strc (arr, 16, nm_device_get_firmware_missing (device) ? _("yes") : _("no"));
+ set_val_strc (arr, 17, get_active_connection_id (device));
+ set_val_strc (arr, 18, acon ? nm_active_connection_get_uuid (acon) : NULL);
+ set_val_strc (arr, 19, acon ? nm_object_get_path (NM_OBJECT (acon)) : NULL);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
/* section CAPABILITIES */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[1].name)) {
- nmc->allowed_fields = nmc_fields_dev_list_cap;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_CAP_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[1].name)) {
+ tmpl = nmc_fields_dev_show_cap;
+ tmpl_len = sizeof (nmc_fields_dev_show_cap);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_CAP_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
caps = nm_device_get_capabilities (device);
speed = 0;
@@ -656,20 +829,18 @@ show_device_info (gpointer data, gpointer user_data)
speed = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device));
speed /= 1000;
}
- if (speed)
- speed_str = g_strdup_printf (_("%u Mb/s"), speed);
+ speed_str = speed ? g_strdup_printf (_("%u Mb/s"), speed) : g_strdup (_("unknown"));
- nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[1].name; /* "CAPABILITIES" */
- nmc->allowed_fields[1].value = (caps & NM_DEVICE_CAP_CARRIER_DETECT) ? _("yes") : _("no");
- nmc->allowed_fields[2].value = speed_str ? speed_str : _("unknown");
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[1].name); /* "CAPABILITIES" */
+ set_val_strc (arr, 1, (caps & NM_DEVICE_CAP_CARRIER_DETECT) ? _("yes") : _("no"));
+ set_val_str (arr, 2, speed_str);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
- g_free (speed_str);
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
-
/* Wireless specific information */
if ((NM_IS_DEVICE_WIFI (device))) {
NMDeviceWifiCapabilities wcaps;
@@ -678,167 +849,177 @@ show_device_info (gpointer data, gpointer user_data)
const GPtrArray *aps;
/* section WIFI-PROPERTIES */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[2].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[2].name)) {
wcaps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device));
- nmc->allowed_fields = nmc_fields_dev_list_wifi_prop;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_WIFI_PROP_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[2].name; /* "WIFI-PROPERTIES" */
- nmc->allowed_fields[1].value = (wcaps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104)) ? _("yes") : _("no");
- nmc->allowed_fields[2].value = (wcaps & NM_WIFI_DEVICE_CAP_WPA) ? _("yes") : _("no");
- nmc->allowed_fields[3].value = (wcaps & NM_WIFI_DEVICE_CAP_RSN) ? _("yes") : _("no");
- nmc->allowed_fields[4].value = (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP) ? _("yes") : _("no");
- nmc->allowed_fields[5].value = (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP) ? _("yes") : _("no");
- nmc->allowed_fields[6].value = (wcaps & NM_WIFI_DEVICE_CAP_AP) ? _("yes") : _("no");
- nmc->allowed_fields[7].value = (wcaps & NM_WIFI_DEVICE_CAP_ADHOC) ? _("yes") : _("no");
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ tmpl = nmc_fields_dev_show_wifi_prop;
+ tmpl_len = sizeof (nmc_fields_dev_show_wifi_prop);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_WIFI_PROP_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[2].name); /* "WIFI-PROPERTIES" */
+ set_val_strc (arr, 1, (wcaps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104)) ?
+ _("yes") : _("no"));
+ set_val_strc (arr, 2, (wcaps & NM_WIFI_DEVICE_CAP_WPA) ? _("yes") : _("no"));
+ set_val_strc (arr, 3, (wcaps & NM_WIFI_DEVICE_CAP_RSN) ? _("yes") : _("no"));
+ set_val_strc (arr, 4, (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP) ? _("yes") : _("no"));
+ set_val_strc (arr, 5, (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP) ? _("yes") : _("no"));
+ set_val_strc (arr, 6, (wcaps & NM_WIFI_DEVICE_CAP_AP) ? _("yes") : _("no"));
+ set_val_strc (arr, 7, (wcaps & NM_WIFI_DEVICE_CAP_ADHOC) ? _("yes") : _("no"));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
/* section AP */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[3].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[3].name)) {
if (state == NM_DEVICE_STATE_ACTIVATED) {
active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device));
active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL;
}
- nmc->allowed_fields = nmc_fields_dev_wifi_list;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_dev_wifi_list;
+ tmpl_len = sizeof (nmc_fields_dev_wifi_list);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
info = g_malloc0 (sizeof (APInfo));
info->nmc = nmc;
info->index = 1;
+ info->output_flags = NMC_OF_FLAG_SECTION_PREFIX;
info->active_bssid = active_bssid;
info->device = nm_device_get_iface (device);
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
if (aps && aps->len)
- g_ptr_array_foreach ((GPtrArray *) aps, detail_access_point, (gpointer) info);
+ g_ptr_array_foreach ((GPtrArray *) aps, fill_output_access_point, (gpointer) info);
g_free (info);
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
} else if (NM_IS_DEVICE_ETHERNET (device)) {
/* WIRED-PROPERTIES */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[4].name)) {
- nmc->allowed_fields = nmc_fields_dev_list_wired_prop;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_WIRED_PROP_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[4].name; /* "WIRED-PROPERTIES" */
- nmc->allowed_fields[1].value = (nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device))) ? _("on") : _("off");
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[4].name)) {
+ tmpl = nmc_fields_dev_show_wired_prop;
+ tmpl_len = sizeof (nmc_fields_dev_show_wired_prop);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_WIRED_PROP_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[4].name); /* "WIRED-PROPERTIES" */
+ set_val_strc (arr, 1, (nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device))) ?
+ _("on") : _("off"));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
}
#if WITH_WIMAX
else if (NM_IS_DEVICE_WIMAX (device)) {
/* WIMAX-PROPERTIES */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[5].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[5].name)) {
char *cfreq = NULL, *rssi = NULL, *cinr = NULL, *txpow = NULL;
guint tmp_uint;
gint tmp_int;
- const char *bsid;
-
- nmc->allowed_fields = nmc_fields_dev_list_wimax_prop;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_WIMAX_PROP_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
- nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[5].name; /* "WIMAX-PROPERTIES" */
+ /* Field names */
+ tmpl = nmc_fields_dev_show_wimax_prop;
+ tmpl_len = sizeof (nmc_fields_dev_show_wimax_prop);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_WIMAX_PROP_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
/* Center frequency */
tmp_uint = nm_device_wimax_get_center_frequency (NM_DEVICE_WIMAX (device));
if (tmp_uint)
cfreq = g_strdup_printf ("%'.1f MHz", (double) tmp_uint / 1000.0);
- nmc->allowed_fields[1].value = cfreq ? cfreq : "";
/* RSSI */
tmp_int = nm_device_wimax_get_rssi (NM_DEVICE_WIMAX (device));
if (tmp_int)
rssi = g_strdup_printf ("%d dBm", tmp_int);
- nmc->allowed_fields[2].value = rssi ? rssi : "";
/* CINR */
tmp_int = nm_device_wimax_get_cinr (NM_DEVICE_WIMAX (device));
if (tmp_int)
cinr = g_strdup_printf ("%d dB", tmp_int);
- nmc->allowed_fields[3].value = cinr ? cinr : "";
/* TX Power */
tmp_int = nm_device_wimax_get_tx_power (NM_DEVICE_WIMAX (device));
if (tmp_int)
txpow = g_strdup_printf ("%'.2f dBm", (float) tmp_int / 2.0);
- nmc->allowed_fields[4].value = txpow ? txpow : "";
- /* BSID */
- bsid = nm_device_wimax_get_bsid (NM_DEVICE_WIMAX (device));
- nmc->allowed_fields[5].value = bsid ? bsid : "";
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[5].name); /* "WIMAX-PROPERTIES" */
+ set_val_str (arr, 1, cfreq);
+ set_val_str (arr, 2, rssi);
+ set_val_str (arr, 3, cinr);
+ set_val_str (arr, 4, txpow);
+ set_val_strc (arr, 5, nm_device_wimax_get_bsid (NM_DEVICE_WIMAX (device)));
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
/* section NSP */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[6].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[6].name)) {
const GPtrArray *nsps;
int g, idx = 1;
- nmc->allowed_fields = nmc_fields_dev_wimax_list;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
+ tmpl = nmc_fields_dev_wimax_list;
+ tmpl_len = sizeof (nmc_fields_dev_wimax_list);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (device));
for (g = 0; nsps && g < nsps->len; g++) {
NMWimaxNsp *nsp = g_ptr_array_index (nsps, g);
- detail_wimax_nsp (nsp, nmc, device, idx++);
+ fill_output_wimax_nsp (nsp, nmc, device, idx++, NMC_OF_FLAG_SECTION_PREFIX);
}
+ print_data (nmc); /* Print all data */
was_output = TRUE;
}
}
#endif
/* IP configuration info */
- if (state == NM_DEVICE_STATE_ACTIVATED) {
- NMIP4Config *cfg4 = nm_device_get_ip4_config (device);
- NMIP6Config *cfg6 = nm_device_get_ip6_config (device);
- NMDHCP4Config *dhcp4 = nm_device_get_dhcp4_config (device);
- NMDHCP6Config *dhcp6 = nm_device_get_dhcp6_config (device);
-
- /* IP4 */
- if (cfg4 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[7].name))
- was_output = print_ip4_config (cfg4, nmc, nmc_fields_dev_list_sections[7].name);
-
- /* DHCP4 */
- if (dhcp4 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[8].name))
- was_output = print_dhcp4_config (dhcp4, nmc, nmc_fields_dev_list_sections[8].name);
-
- /* IP6 */
- if (cfg6 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[9].name))
- was_output = print_ip6_config (cfg6, nmc, nmc_fields_dev_list_sections[9].name);
-
- /* DHCP6 */
- if (dhcp6 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[10].name))
- was_output = print_dhcp6_config (dhcp6, nmc, nmc_fields_dev_list_sections[10].name);
- }
+ cfg4 = nm_device_get_ip4_config (device);
+ cfg6 = nm_device_get_ip6_config (device);
+ dhcp4 = nm_device_get_dhcp4_config (device);
+ dhcp6 = nm_device_get_dhcp6_config (device);
+
+ /* IP4 */
+ if (cfg4 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[7].name))
+ was_output = print_ip4_config (cfg4, nmc, nmc_fields_dev_show_sections[7].name, section_fld);
+
+ /* DHCP4 */
+ if (dhcp4 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[8].name))
+ was_output = print_dhcp4_config (dhcp4, nmc, nmc_fields_dev_show_sections[8].name, section_fld);
+
+ /* IP6 */
+ if (cfg6 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[9].name))
+ was_output = print_ip6_config (cfg6, nmc, nmc_fields_dev_show_sections[9].name, section_fld);
+
+ /* DHCP6 */
+ if (dhcp6 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[10].name))
+ was_output = print_dhcp6_config (dhcp6, nmc, nmc_fields_dev_show_sections[10].name, section_fld);
/* Bond-specific information */
if ((NM_IS_DEVICE_BOND (device))) {
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[11].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[11].name)) {
const GPtrArray *slaves;
GString *bond_slaves_str;
int idx;
@@ -857,54 +1038,61 @@ show_device_info (gpointer data, gpointer user_data)
if (bond_slaves_str->len > 0)
g_string_truncate (bond_slaves_str, bond_slaves_str->len-1); /* Chop off last space */
- nmc->allowed_fields = nmc_fields_dev_list_bond_prop;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_BOND_PROP_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_dev_show_bond_prop;
+ tmpl_len = sizeof (nmc_fields_dev_show_bond_prop);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_BOND_PROP_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[11].name; /* "BOND" */
- nmc->allowed_fields[1].value = bond_slaves_str->str;
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[11].name); /* "BOND" */
+ set_val_str (arr, 1, bond_slaves_str->str);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- g_string_free (bond_slaves_str, TRUE);
+ g_string_free (bond_slaves_str, FALSE);
was_output = TRUE;
}
}
/* VLAN-specific information */
if ((NM_IS_DEVICE_VLAN (device))) {
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[12].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[12].name)) {
char * vlan_id_str = g_strdup_printf ("%u", nm_device_vlan_get_vlan_id (NM_DEVICE_VLAN (device)));
- nmc->allowed_fields = nmc_fields_dev_list_vlan_prop;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_VLAN_PROP_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_dev_show_vlan_prop;
+ tmpl_len = sizeof (nmc_fields_dev_show_vlan_prop);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_VLAN_PROP_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[12].name; /* "VLAN" */
- nmc->allowed_fields[1].value = vlan_id_str;
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[12].name); /* "VLAN" */
+ set_val_str (arr, 1, vlan_id_str);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- g_free (vlan_id_str);
was_output = TRUE;
}
}
/* section CONNECTIONS */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[13].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[13].name)) {
const GPtrArray *avail_cons;
GString *ac_paths_str;
char **ac_arr = NULL;
int i;
- nmc->allowed_fields = nmc_fields_dev_list_connections;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_CONNECTIONS_ALL, nmc->allowed_fields, NULL);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ tmpl = nmc_fields_dev_show_connections;
+ tmpl_len = sizeof (nmc_fields_dev_show_connections);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_CONNECTIONS_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
/* available-connections */
avail_cons = nm_device_get_available_connections (device);
@@ -930,47 +1118,59 @@ show_device_info (gpointer data, gpointer user_data)
if (ac_paths_str->len > 0)
g_string_append_c (ac_paths_str, '}');
- set_val_str (nmc->allowed_fields, 0, nmc_fields_dev_list_sections[13].name); /* "CONNECTIONS" */
- set_val_str (nmc->allowed_fields, 1, ac_paths_str->str);
- set_val_arr (nmc->allowed_fields, 2, (const char **) ac_arr);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[13].name); /* "CONNECTIONS" */
+ set_val_str (arr, 1, ac_paths_str->str);
+ set_val_arr (arr, 2, (ac_arr));
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- g_string_free (ac_paths_str, TRUE);
- g_strfreev (ac_arr);
+ g_string_free (ac_paths_str, FALSE);
was_output = TRUE;
}
}
if (sections_array)
g_array_free (sections_array, TRUE);
+ if (fields_in_section)
+ g_ptr_array_free (fields_in_section, TRUE);
+
+ return TRUE;
}
static void
-show_device_status (NMDevice *device, NmCli *nmc)
+fill_output_device_status (NMDevice *device, NmCli *nmc)
{
- nmc->allowed_fields[0].value = nm_device_get_iface (device);
- nmc->allowed_fields[1].value = device_type_to_string (device);
- nmc->allowed_fields[2].value = nmc_device_state_to_string (nm_device_get_state (device));
- nmc->allowed_fields[3].value = nm_object_get_path (NM_OBJECT (device));
-
- nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ NMActiveConnection *ac;
+ NmcOutputField *arr = nmc_dup_fields_array (nmc_fields_dev_status,
+ sizeof (nmc_fields_dev_status),
+ 0);
+
+ ac = nm_device_get_active_connection (device);
+
+ set_val_strc (arr, 0, nm_device_get_iface (device));
+ set_val_strc (arr, 1, nm_device_get_type_description (device));
+ set_val_strc (arr, 2, nmc_device_state_to_string (nm_device_get_state (device)));
+ set_val_strc (arr, 3, nm_object_get_path (NM_OBJECT (device)));
+ set_val_strc (arr, 4, get_active_connection_id (device));
+ set_val_strc (arr, 5, ac ? nm_active_connection_get_uuid (ac) : NULL);
+ set_val_strc (arr, 6, ac ? nm_object_get_path (NM_OBJECT (ac)) : NULL);
+
+ g_ptr_array_add (nmc->output_data, arr);
}
static NMCResultCode
do_devices_status (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
- const GPtrArray *devices;
+ NMDevice **devices;
int i;
char *fields_str;
char *fields_all = NMC_FIELDS_DEV_STATUS_ALL;
char *fields_common = NMC_FIELDS_DEV_STATUS_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
while (argc > 0) {
fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
@@ -985,45 +1185,41 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
else
fields_str = nmc->required_fields;
- nmc->allowed_fields = nmc_fields_dev_status;
- nmc->print_fields.indices = parse_output_fields (fields_str, nmc->allowed_fields, &error);
+ tmpl = nmc_fields_dev_status;
+ tmpl_len = sizeof (nmc_fields_dev_status);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'dev status': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'dev status': %s; allowed fields: %s"), error->message, NMC_FIELDS_DEV_STATUS_ALL);
+ g_string_printf (nmc->return_text, _("Error: 'device status': %s"), error->message);
g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
goto error;
}
if (!nmc_versions_match (nmc))
goto error;
- /* Print headers */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
+ /* Add headers */
nmc->print_fields.header_name = _("Status of devices");
- print_fields (nmc->print_fields, nmc->allowed_fields);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->get_client (nmc);
- devices = nm_client_get_devices (nmc->client);
- for (i = 0; devices && (i < devices->len); i++) {
- NMDevice *device = g_ptr_array_index (devices, i);
- show_device_status (device, nmc);
- }
+ devices = get_devices_sorted (nmc->client);
+ for (i = 0; devices[i]; i++)
+ fill_output_device_status (devices[i], nmc);
+
+ /* Now print all data */
+ print_data (nmc);
+
+ g_free (devices);
return NMC_RESULT_SUCCESS;
@@ -1032,89 +1228,67 @@ error:
}
static NMCResultCode
-do_devices_list (NmCli *nmc, int argc, char **argv)
+do_devices_show (NmCli *nmc, int argc, char **argv)
{
- const GPtrArray *devices;
- GError *error = NULL;
+ NMDevice **devices = NULL;
NMDevice *device = NULL;
- const char *iface = NULL;
- gboolean iface_specified = FALSE;
+ const char *ifname = NULL;
int i;
+ gboolean ret;
- while (argc > 0) {
- if (strcmp (*argv, "iface") == 0) {
- iface_specified = TRUE;
-
- if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
- }
-
- iface = *argv;
- } else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
- }
-
- argc--;
- argv++;
+ if (argc == 1)
+ ifname = *argv;
+ else if (argc > 1) {
+ g_string_printf (nmc->return_text, _("Error: invalid extra argument '%s'."), *(argv+1));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
goto error;
}
if (!nmc_versions_match (nmc))
goto error;
- nmc->get_client (nmc);
- devices = nm_client_get_devices (nmc->client);
+ devices = get_devices_sorted (nmc->client);
- if (iface_specified) {
- for (i = 0; devices && (i < devices->len); i++) {
- NMDevice *candidate = g_ptr_array_index (devices, i);
+ if (ifname) {
+ /* Interface specified; show details only for the device */
+ for (i = 0; devices[i]; i++) {
+ NMDevice *candidate = devices[i];
const char *dev_iface = nm_device_get_iface (candidate);
- if (!g_strcmp0 (dev_iface, iface))
+ if (!g_strcmp0 (dev_iface, ifname))
device = candidate;
}
if (!device) {
- g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), iface);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), ifname);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
show_device_info (device, nmc);
} else {
- if (devices)
- g_ptr_array_foreach ((GPtrArray *) devices, show_device_info, nmc);
+ /* Show details for all devices */
+ for (i = 0; devices[i]; i++) {
+ nmc_empty_output_fields (nmc);
+ ret = show_device_info (devices[i], nmc);
+ if (!ret)
+ break;
+ if (devices[i + 1])
+ printf ("\n"); /* Empty line */
+ }
}
error:
+ g_free (devices);
return nmc->return_value;
}
-static void
-device_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
-{
- NmCli *nmc = (NmCli *) user_data;
- NMDeviceState state;
-
- state = nm_device_get_state (device);
-
- if (state == NM_DEVICE_STATE_DISCONNECTED) {
- g_string_printf (nmc->return_text, _("Success: Device '%s' successfully disconnected."), nm_device_get_iface (device));
- quit ();
- }
-}
-
static gboolean
timeout_cb (gpointer user_data)
{
@@ -1139,6 +1313,165 @@ progress_cb (gpointer user_data)
}
static void
+connected_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
+{
+ NMActiveConnection *active = (NMActiveConnection *) user_data;
+ NMDeviceState state;
+
+ state = nm_device_get_state (device);
+
+ if (state == NM_DEVICE_STATE_ACTIVATED) {
+ nmc_terminal_erase_line ();
+ printf (_("Device '%s' successfully activated with '%s'.\n"),
+ nm_device_get_iface (device),
+ nm_active_connection_get_uuid (active));
+ quit ();
+ }
+}
+
+static void
+connect_device_cb (NMClient *client, NMActiveConnection *active, GError *error, gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+ const GPtrArray *devices;
+ NMDevice *device;
+ NMDeviceState state;
+
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: Device activation failed: %s"),
+ error->message ? error->message : _("(unknown)"));
+ nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ quit ();
+ } else {
+ g_assert (active);
+ devices = nm_active_connection_get_devices (active);
+ if (!devices || devices->len == 0) {
+ g_string_printf (nmc->return_text, _("Error: Device activation failed: device was disconnected"));
+ nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ quit ();
+ return;
+ }
+
+ device = g_ptr_array_index (devices, 0);
+ state = nm_device_get_state (device);
+
+ if (nmc->nowait_flag || state == NM_DEVICE_STATE_ACTIVATED) {
+ /* Don't want to wait or device already activated */
+ if (state == NM_DEVICE_STATE_ACTIVATED && nmc->print_output == NMC_PRINT_PRETTY) {
+ nmc_terminal_erase_line ();
+ printf (_("Device '%s' has been connected.\n"), nm_device_get_iface (device));
+ }
+ quit ();
+ } else {
+ g_signal_connect (device, "notify::state", G_CALLBACK (connected_state_cb), active);
+ /* Start timer not to loop forever if "notify::state" signal is not issued */
+ g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc);
+ }
+ }
+}
+
+static NMCResultCode
+do_device_connect (NmCli *nmc, int argc, char **argv)
+{
+ NMDevice **devices;
+ NMDevice *device = NULL;
+ const char *ifname = NULL;
+ char *ifname_ask = NULL;
+ int i;
+
+ /* Set default timeout for connect operation. */
+ if (nmc->timeout == -1)
+ nmc->timeout = 90;
+
+ if (argc == 0) {
+ if (nmc->ask)
+ ifname = ifname_ask = nmc_readline (PROMPT_INTERFACE);
+
+ if (!ifname_ask) {
+ g_string_printf (nmc->return_text, _("Error: No interface specified."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ } else {
+ ifname = *argv;
+ }
+
+ if (!ifname) {
+ g_string_printf (nmc->return_text, _("Error: No interface specified."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+
+ if (next_arg (&argc, &argv) == 0) {
+ g_string_printf (nmc->return_text, _("Error: extra argument not allowed: '%s'."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+
+ nmc->get_client (nmc);
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ goto error;
+ }
+
+ if (!nmc_versions_match (nmc))
+ goto error;
+
+ devices = get_devices_sorted (nmc->client);
+ for (i = 0; devices[i]; i++) {
+ NMDevice *candidate = devices[i];
+ const char *dev_iface = nm_device_get_iface (candidate);
+
+ if (!g_strcmp0 (dev_iface, ifname))
+ device = candidate;
+ }
+ g_free (devices);
+
+ if (!device) {
+ g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), ifname);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto error;
+ }
+
+ /*
+ * Use nowait_flag instead of should_wait, because exiting has to be postponed
+ * till connect_device_cb() is called, giving NM time to check our permissions.
+ */
+ nmc->nowait_flag = (nmc->timeout == 0);
+ nmc->should_wait = TRUE;
+ nm_client_activate_connection (nmc->client,
+ NULL, /* let NM find a connection automatically */
+ device,
+ NULL,
+ connect_device_cb,
+ nmc);
+
+ /* Start progress indication */
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ progress_id = g_timeout_add (120, progress_cb, device);
+
+error:
+ g_free (ifname_ask);
+
+ return nmc->return_value;
+}
+
+static void
+disconnect_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+ NMDeviceState state;
+
+ state = nm_device_get_state (device);
+
+ if (state == NM_DEVICE_STATE_DISCONNECTED) {
+ g_string_printf (nmc->return_text, _("Success: Device '%s' successfully disconnected."), nm_device_get_iface (device));
+ quit ();
+ }
+}
+
+static void
disconnect_device_cb (NMDevice *device, GError *error, gpointer user_data)
{
NmCli *nmc = (NmCli *) user_data;
@@ -1156,13 +1489,14 @@ disconnect_device_cb (NMDevice *device, GError *error, gpointer user_data)
if (nmc->nowait_flag || state == NM_DEVICE_STATE_DISCONNECTED) {
/* Don't want to wait or device already disconnected */
- if (state == NM_DEVICE_STATE_DISCONNECTED && nmc->print_output == NMC_PRINT_PRETTY) {
- nmc_terminal_erase_line ();
+ if (state == NM_DEVICE_STATE_DISCONNECTED) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
printf (_("Device '%s' has been disconnected.\n"), nm_device_get_iface (device));
}
quit ();
} else {
- g_signal_connect (device, "notify::state", G_CALLBACK (device_state_cb), nmc);
+ g_signal_connect (device, "notify::state", G_CALLBACK (disconnect_state_cb), nmc);
/* Start timer not to loop forever if "notify::state" signal is not issued */
g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc);
}
@@ -1173,93 +1507,72 @@ disconnect_device_cb (NMDevice *device, GError *error, gpointer user_data)
static NMCResultCode
do_device_disconnect (NmCli *nmc, int argc, char **argv)
{
- const GPtrArray *devices;
- GError *error = NULL;
+ NMDevice **devices;
NMDevice *device = NULL;
- const char *iface = NULL;
- gboolean iface_specified = FALSE;
- gboolean wait = TRUE;
+ const char *ifname = NULL;
+ char *ifname_ask = NULL;
int i;
- /* Set default timeout for disconnect operation */
- nmc->timeout = 10;
+ /* Set default timeout for disconnect operation. */
+ if (nmc->timeout == -1)
+ nmc->timeout = 10;
- while (argc > 0) {
- if (strcmp (*argv, "iface") == 0) {
- iface_specified = TRUE;
-
- if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
- }
-
- iface = *argv;
- } else if (strcmp (*argv, "--nowait") == 0) {
- wait = FALSE;
- } else if (strcmp (*argv, "--timeout") == 0) {
- if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
- }
-
- errno = 0;
- nmc->timeout = strtol (*argv, NULL, 10);
- if (errno || nmc->timeout < 0) {
- g_string_printf (nmc->return_text, _("Error: timeout value '%s' is not valid."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
- }
+ if (argc == 0) {
+ if (nmc->ask)
+ ifname = ifname_ask = nmc_readline (PROMPT_INTERFACE);
- } else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+ if (!ifname_ask) {
+ g_string_printf (nmc->return_text, _("Error: No interface specified."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
}
+ } else {
+ ifname = *argv;
+ }
- argc--;
- argv++;
+ if (!ifname) {
+ g_string_printf (nmc->return_text, _("Error: No interface specified."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
}
- if (!iface_specified) {
- g_string_printf (nmc->return_text, _("Error: iface has to be specified."));
+ if (next_arg (&argc, &argv) == 0) {
+ g_string_printf (nmc->return_text, _("Error: extra argument not allowed: '%s'."), *argv);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
+ nmc->get_client (nmc);
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
goto error;
}
if (!nmc_versions_match (nmc))
goto error;
- nmc->get_client (nmc);
- devices = nm_client_get_devices (nmc->client);
- for (i = 0; devices && (i < devices->len); i++) {
- NMDevice *candidate = g_ptr_array_index (devices, i);
+ devices = get_devices_sorted (nmc->client);
+ for (i = 0; devices[i]; i++) {
+ NMDevice *candidate = devices[i];
const char *dev_iface = nm_device_get_iface (candidate);
- if (!g_strcmp0 (dev_iface, iface))
+ if (!g_strcmp0 (dev_iface, ifname))
device = candidate;
}
+ g_free (devices);
if (!device) {
- g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), iface);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), ifname);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
- /* Use nowait_flag instead of should_wait because exitting has to be postponed till disconnect_device_cb()
- * is called, giving NM time to check our permissions */
- nmc->nowait_flag = !wait;
+ /*
+ * Use nowait_flag instead of should_wait, because exiting has to be postponed
+ * till disconnect_device_cb() is called, giving NM time to check our permissions.
+ */
+ nmc->nowait_flag = (nmc->timeout == 0);
nmc->should_wait = TRUE;
nm_device_disconnect (device, disconnect_device_cb, nmc);
@@ -1278,20 +1591,29 @@ show_acces_point_info (NMDevice *device, NmCli *nmc)
const char *active_bssid = NULL;
const GPtrArray *aps;
APInfo *info;
+ NmcOutputField *arr;
if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device));
active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL;
}
+ arr = nmc_dup_fields_array (nmc_fields_dev_wifi_list, sizeof (nmc_fields_dev_wifi_list),
+ NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
info = g_malloc0 (sizeof (APInfo));
info->nmc = nmc;
info->index = 1;
+ info->output_flags = 0;
info->active_bssid = active_bssid;
info->device = nm_device_get_iface (device);
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
if (aps && aps->len)
- g_ptr_array_foreach ((GPtrArray *) aps, detail_access_point, (gpointer) info);
+ g_ptr_array_foreach ((GPtrArray *) aps, fill_output_access_point, (gpointer) info);
+
+ print_data (nmc); /* Print all data */
+ nmc_empty_output_fields (nmc);
g_free (info);
}
@@ -1301,27 +1623,27 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
GError *error = NULL;
NMDevice *device = NULL;
NMAccessPoint *ap = NULL;
- const char *iface = NULL;
+ const char *ifname = NULL;
const char *bssid_user = NULL;
- const GPtrArray *devices;
+ NMDevice **devices = NULL;
const GPtrArray *aps;
APInfo *info;
int i, j;
char *fields_str;
char *fields_all = NMC_FIELDS_DEV_WIFI_LIST_ALL;
char *fields_common = NMC_FIELDS_DEV_WIFI_LIST_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+ const char *base_hdr = _("Wi-Fi scan list");
while (argc > 0) {
- if (strcmp (*argv, "iface") == 0) {
+ if (strcmp (*argv, "ifname") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- iface = *argv;
+ ifname = *argv;
} else if (strcmp (*argv, "bssid") == 0 || strcmp (*argv, "hwaddr") == 0) {
/* hwaddr is deprecated and will be removed later */
if (next_arg (&argc, &argv) != 0) {
@@ -1338,7 +1660,6 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
argv++;
}
-
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
fields_str = fields_common;
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
@@ -1346,58 +1667,49 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
else
fields_str = nmc->required_fields;
- nmc->allowed_fields = nmc_fields_dev_wifi_list;
- nmc->print_fields.indices = parse_output_fields (fields_str, nmc->allowed_fields, &error);
+ tmpl = nmc_fields_dev_wifi_list;
+ tmpl_len = sizeof (nmc_fields_dev_wifi_list);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'dev wifi': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'dev wifi': %s; allowed fields: %s"), error->message, NMC_FIELDS_DEV_WIFI_LIST_ALL);
+ g_string_printf (nmc->return_text, _("Error: 'device wifi': %s"), error->message);
g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
goto error;
}
if (!nmc_versions_match (nmc))
goto error;
- /* Print headers */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("WiFi scan list");
-
- nmc->get_client (nmc);
- devices = nm_client_get_devices (nmc->client);
- if (iface) {
+ devices = get_devices_sorted (nmc->client);
+ if (ifname) {
/* Device specified - list only APs of this interface */
- for (i = 0; devices && (i < devices->len); i++) {
- NMDevice *candidate = g_ptr_array_index (devices, i);
+ for (i = 0; devices[i]; i++) {
+ NMDevice *candidate = devices[i];
const char *dev_iface = nm_device_get_iface (candidate);
- if (!g_strcmp0 (dev_iface, iface)) {
+ if (!g_strcmp0 (dev_iface, ifname)) {
device = candidate;
break;
}
}
-
if (!device) {
- g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), iface);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), ifname);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
+ /* Main header name */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, ifname);
+
if (NM_IS_DEVICE_WIFI (device)) {
if (bssid_user) {
/* Specific AP requested - list only that */
@@ -1413,38 +1725,50 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
g_free (bssid_up);
}
if (!ap) {
- g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."), bssid_user);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."),
+ bssid_user);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
+ /* Add headers (field names) */
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
info = g_malloc0 (sizeof (APInfo));
info->nmc = nmc;
info->index = 1;
+ info->output_flags = 0;
info->active_bssid = NULL;
info->device = nm_device_get_iface (device);
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
- detail_access_point (ap, info);
+
+ fill_output_access_point (ap, info);
+
+ print_data (nmc); /* Print all data */
g_free (info);
} else {
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
show_acces_point_info (device, nmc);
}
} else {
- g_string_printf (nmc->return_text, _("Error: Device '%s' is not a WiFi device."), iface);
+ g_string_printf (nmc->return_text, _("Error: Device '%s' is not a Wi-Fi device."), ifname);
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
goto error;
}
} else {
/* List APs for all devices */
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
if (bssid_user) {
/* Specific AP requested - list only that */
- for (i = 0; devices && (i < devices->len); i++) {
- NMDevice *dev = g_ptr_array_index (devices, i);
+ for (i = 0; devices[i]; i++) {
+ NMDevice *dev = devices[i];
if (!NM_IS_DEVICE_WIFI (dev))
continue;
+ /* Main header name */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, nm_device_get_iface (dev));
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (dev));
for (j = 0; aps && (j < aps->len); j++) {
char *bssid_up;
@@ -1458,22 +1782,30 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
info = g_malloc0 (sizeof (APInfo));
info->nmc = nmc;
info->index = 1;
+ info->output_flags = 0;
info->active_bssid = NULL;
info->device = nm_device_get_iface (dev);
- detail_access_point (ap, info);
+ fill_output_access_point (ap, info);
g_free (info);
}
g_free (bssid_up);
}
+ print_data (nmc); /* Print all data */
+ nmc_empty_output_fields (nmc);
}
if (!ap) {
- g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."), bssid_user);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."),
+ bssid_user);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
} else {
- for (i = 0; devices && (i < devices->len); i++) {
- NMDevice *dev = g_ptr_array_index (devices, i);
+ for (i = 0; devices[i]; i++) {
+ NMDevice *dev = devices[i];
+
+ /* Main header name */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr,
+ nm_device_get_iface (dev));
if (NM_IS_DEVICE_WIFI (dev))
show_acces_point_info (dev, nmc);
}
@@ -1481,6 +1813,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
}
error:
+ g_free (devices);
return nmc->return_value;
}
@@ -1494,13 +1827,12 @@ monitor_device_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data
state = nm_device_get_state_reason (device, &reason);
if (state == NM_DEVICE_STATE_ACTIVATED) {
- if (nmc->print_output == NMC_PRINT_PRETTY) {
- NMActiveConnection *active = nm_device_get_active_connection (device);
+ NMActiveConnection *active = nm_device_get_active_connection (device);
+ if (nmc->print_output == NMC_PRINT_PRETTY)
nmc_terminal_erase_line ();
- printf (_("Connection with UUID '%s' created and activated on device '%s'\n"),
- nm_active_connection_get_uuid (active), nm_device_get_iface (device));
- }
+ printf (_("Connection with UUID '%s' created and activated on device '%s'\n"),
+ nm_active_connection_get_uuid (active), nm_device_get_iface (device));
quit ();
} else if (state == NM_DEVICE_STATE_FAILED) {
g_string_printf (nmc->return_text, _("Error: Connection activation failed: (%d) %s."),
@@ -1543,7 +1875,9 @@ add_and_activate_cb (NMClient *client,
if (nmc->nowait_flag || state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
/* User doesn't want to wait or already activated */
- if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED && nmc->print_output == NMC_PRINT_PRETTY) {
+ if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
printf (_("Connection with UUID '%s' created and activated on device '%s'\n"),
nm_active_connection_get_uuid (active), nm_device_get_iface (device));
}
@@ -1617,16 +1951,20 @@ find_ap_on_device (NMDevice *device, GByteArray *bssid, const char *ssid)
if (ssid) {
/* Parameter is SSID */
- const GByteArray *candidate_ssid = nm_access_point_get_ssid (candidate_ap);
- char *ssid_tmp = nm_utils_ssid_to_utf8 (candidate_ssid);
+ const GByteArray *candidate_ssid;
- /* Compare SSIDs */
- if (strcmp (ssid, ssid_tmp) == 0) {
- ap = candidate_ap;
+ candidate_ssid = nm_access_point_get_ssid (candidate_ap);
+ if (candidate_ssid) {
+ char *ssid_tmp = nm_utils_ssid_to_utf8 (candidate_ssid);
+
+ /* Compare SSIDs */
+ if (strcmp (ssid, ssid_tmp) == 0) {
+ ap = candidate_ap;
+ g_free (ssid_tmp);
+ break;
+ }
g_free (ssid_tmp);
- break;
}
- g_free (ssid_tmp);
} else if (bssid) {
/* Parameter is BSSID */
const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
@@ -1650,27 +1988,31 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
{
NMDevice *device = NULL;
NMAccessPoint *ap = NULL;
+ NM80211ApFlags ap_flags;
+ NM80211ApSecurityFlags ap_wpa_flags;
+ NM80211ApSecurityFlags ap_rsn_flags;
NMConnection *connection = NULL;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
AddAndActivateInfo *info;
const char *param_user = NULL;
- const char *iface = NULL;
+ const char *ifname = NULL;
const char *bssid = NULL;
const char *password = NULL;
const char *con_name = NULL;
gboolean private = FALSE;
- gboolean wait = TRUE;
gboolean wep_passphrase = FALSE;
GByteArray *bssid1_arr = NULL;
GByteArray *bssid2_arr = NULL;
const GPtrArray *devices;
int devices_idx;
- GError *error = NULL;
+ char *ssid_ask = NULL;
+ char *passwd_ask = NULL;
- /* Default timeout for waiting for operation completion */
- nmc->timeout = 90;
+ /* Set default timeout waiting for operation completion. */
+ if (nmc->timeout == -1)
+ nmc->timeout = 90;
/* Get the first compulsory argument (SSID or BSSID) */
if (argc > 0) {
@@ -1680,20 +2022,27 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
argc--;
argv++;
} else {
- g_string_printf (nmc->return_text, _("Error: SSID or BSSID are missing."));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ if (nmc->ask) {
+ ssid_ask = nmc_readline (_("SSID or BSSID: "));
+ param_user = ssid_ask ? ssid_ask : "";
+ bssid1_arr = nm_utils_hwaddr_atoba (param_user, ARPHRD_ETHER);
+ }
+ if (!ssid_ask) {
+ g_string_printf (nmc->return_text, _("Error: SSID or BSSID are missing."));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
}
/* Get the rest of the parameters */
while (argc > 0) {
- if (strcmp (*argv, "iface") == 0) {
+ if (strcmp (*argv, "ifname") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- iface = *argv;
+ ifname = *argv;
} else if (strcmp (*argv, "bssid") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
@@ -1739,22 +2088,17 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
goto error;
}
con_name = *argv;
- } else if (strcmp (*argv, "--private") == 0) {
- private = TRUE;
- } else if (strcmp (*argv, "--nowait") == 0) {
- wait = FALSE;
- } else if (strcmp (*argv, "--timeout") == 0) {
+ } else if (strcmp (*argv, "private") == 0) {
+ GError *err_tmp = NULL;
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
-
- errno = 0;
- nmc->timeout = strtol (*argv, NULL, 10);
- if (errno || nmc->timeout < 0) {
- g_string_printf (nmc->return_text, _("Error: timeout value '%s' is not valid."), *argv);
+ if (!nmc_string_to_bool (*argv, &private, &err_tmp)) {
+ g_string_printf (nmc->return_text, _("Error: %s: %s."), *(argv-1), err_tmp->message);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_clear_error (&err_tmp);
goto error;
}
} else {
@@ -1778,31 +2122,26 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
goto error;
}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
goto error;
}
if (!nmc_versions_match (nmc))
goto error;
- nmc->get_client (nmc);
devices = nm_client_get_devices (nmc->client);
/* Find a device to activate the connection on */
devices_idx = 0;
- device = find_wifi_device_by_iface (devices, iface, &devices_idx);
+ device = find_wifi_device_by_iface (devices, ifname, &devices_idx);
if (!device) {
- if (iface)
- g_string_printf (nmc->return_text, _("Error: Device '%s' is not a Wi-Fi device."), iface);
+ if (ifname)
+ g_string_printf (nmc->return_text, _("Error: Device '%s' is not a Wi-Fi device."), ifname);
else
g_string_printf (nmc->return_text, _("Error: No Wi-Fi device found."));
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
@@ -1811,8 +2150,8 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
/* Find an AP to connect to */
ap = find_ap_on_device (device, bssid1_arr, bssid1_arr ? NULL : param_user);
- if (!ap && !iface) {
- /* AP not found. iface was not specified, so try finding the AP on another device. */
+ if (!ap && !ifname) {
+ /* AP not found. ifname was not specified, so try finding the AP on another device. */
while ((device = find_wifi_device_by_iface (devices, NULL, &devices_idx)) != NULL) {
ap = find_ap_on_device (device, bssid1_arr, bssid1_arr ? NULL : param_user);
if (ap)
@@ -1825,7 +2164,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
g_string_printf (nmc->return_text, _("Error: No network with SSID '%s' found."), param_user);
else
g_string_printf (nmc->return_text, _("Error: No access point with BSSID '%s' found."), param_user);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
@@ -1853,42 +2192,50 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
/* 'bssid' parameter is used to restrict the conenction only to the BSSID */
g_object_set (s_wifi, NM_SETTING_WIRELESS_BSSID, bssid2_arr, NULL);
}
- if (password) {
- NM80211ApFlags flags = nm_access_point_get_flags (ap);
- NM80211ApSecurityFlags wpa_flags = nm_access_point_get_wpa_flags (ap);
- NM80211ApSecurityFlags rsn_flags = nm_access_point_get_rsn_flags (ap);
- s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+ /* handle password */
+ ap_flags = nm_access_point_get_flags (ap);
+ ap_wpa_flags = nm_access_point_get_wpa_flags (ap);
+ ap_rsn_flags = nm_access_point_get_rsn_flags (ap);
+
+ /* Set password for WEP or WPA-PSK. */
+ if (ap_flags & NM_802_11_AP_FLAGS_PRIVACY) {
+ /* Ask for missing password when one is expected and '--ask' is used */
+ if (!password && nmc->ask)
+ password = passwd_ask = nmc_readline (_("Password: "));
+
+ if (password) {
+ if (!connection)
+ connection = nm_connection_new ();
+ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
- /* Set password for WEP or WPA-PSK. */
- if (flags & NM_802_11_AP_FLAGS_PRIVACY) {
- if (wpa_flags == NM_802_11_AP_SEC_NONE && rsn_flags == NM_802_11_AP_SEC_NONE) {
+ if (ap_wpa_flags == NM_802_11_AP_SEC_NONE && ap_rsn_flags == NM_802_11_AP_SEC_NONE) {
/* WEP */
nm_setting_wireless_security_set_wep_key (s_wsec, 0, password);
g_object_set (G_OBJECT (s_wsec),
NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
wep_passphrase ? NM_WEP_KEY_TYPE_PASSPHRASE: NM_WEP_KEY_TYPE_KEY,
NULL);
- } else if ( !(wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
- && !(rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) {
+ } else if ( !(ap_wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
+ && !(ap_rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) {
/* WPA PSK */
g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_PSK, password, NULL);
}
}
- // FIXME: WPA-Enterprise is not supported yet.
- // We are not able to determine and fill all the parameters for
- // 802.1X authentication automatically without user providing
- // the data. Adding nmcli options for the 8021x setting would
- // clutter the command. However, that could be solved later by
- // implementing add/edit connections support for nmcli.
}
+ // FIXME: WPA-Enterprise is not supported yet.
+ // We are not able to determine and fill all the parameters for
+ // 802.1X authentication automatically without user providing
+ // the data. Adding nmcli options for the 8021x setting would
+ // clutter the command. However, that could be solved later by
+ // implementing add/edit connections support for nmcli.
/* nowait_flag indicates user input. should_wait says whether quit in start().
* We have to delay exit after add_and_activate_cb() is called, even if
* the user doesn't want to wait, in order to give NM time to check our
* permissions. */
- nmc->nowait_flag = !wait;
+ nmc->nowait_flag = (nmc->timeout == 0);
nmc->should_wait = TRUE;
info = g_malloc0 (sizeof (AddAndActivateInfo));
@@ -1907,7 +2254,67 @@ error:
g_byte_array_free (bssid1_arr, TRUE);
if (bssid2_arr)
g_byte_array_free (bssid2_arr, TRUE);
+ g_free (ssid_ask);
+ g_free (passwd_ask);
+
+ return nmc->return_value;
+}
+
+static void
+request_rescan_cb (NMDeviceWifi *device, GError *error, gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: %s."),
+ error->message ? error->message : _("unknown"));
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ }
+ quit ();
+}
+
+static NMCResultCode
+do_device_wifi_rescan (NmCli *nmc, int argc, char **argv)
+{
+ NMDevice *device;
+ const char *ifname = NULL;
+ const GPtrArray *devices;
+ int devices_idx;
+
+ nmc->should_wait = TRUE;
+
+ /* Get the parameters */
+ if (argc > 0) {
+ if (strcmp (*argv, "ifname") == 0) {
+ if (next_arg (&argc, &argv) != 0) {
+ g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+ }
+ ifname = *argv;
+ }
+
+ /* Find Wi-Fi device to scan on. When no ifname is provided, the first Wi-Fi is used. */
+ nmc->get_client (nmc);
+ devices = nm_client_get_devices (nmc->client);
+ devices_idx = 0;
+ device = find_wifi_device_by_iface (devices, ifname, &devices_idx);
+
+ if (!device) {
+ if (ifname)
+ g_string_printf (nmc->return_text, _("Error: Device '%s' is not a Wi-Fi device."), ifname);
+ else
+ g_string_printf (nmc->return_text, _("Error: No Wi-Fi device found."));
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ goto error;
+ }
+ nm_device_wifi_request_scan_simple (NM_DEVICE_WIFI (device), request_rescan_cb, nmc);
+
+ return nmc->return_value;
+error:
+ nmc->should_wait = FALSE;
return nmc->return_value;
}
@@ -1921,8 +2328,10 @@ do_device_wifi (NmCli *nmc, int argc, char **argv)
nmc->return_value = do_device_wifi_list (nmc, argc-1, argv+1);
} else if (matches (*argv, "connect") == 0) {
nmc->return_value = do_device_wifi_connect_network (nmc, argc-1, argv+1);
+ } else if (matches (*argv, "rescan") == 0) {
+ nmc->return_value = do_device_wifi_rescan (nmc, argc-1, argv+1);
} else {
- g_string_printf (nmc->return_text, _("Error: 'dev wifi' command '%s' is not valid."), *argv);
+ g_string_printf (nmc->return_text, _("Error: 'device wifi' command '%s' is not valid."), *argv);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
}
}
@@ -1936,13 +2345,21 @@ show_nsp_info (NMDevice *device, NmCli *nmc)
{
const GPtrArray *nsps;
int i, idx = 1;
+ NmcOutputField *arr;
+
+ /* Add headers (field names) */
+ arr = nmc_dup_fields_array (nmc_fields_dev_wimax_list, sizeof (nmc_fields_dev_wimax_list),
+ NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (device));
for (i = 0; nsps && i < nsps->len; i++) {
NMWimaxNsp *nsp = g_ptr_array_index (nsps, i);
- detail_wimax_nsp (nsp, nmc, device, idx++);
+ fill_output_wimax_nsp (nsp, nmc, device, idx++, 0);
}
+ print_data (nmc); /* Print all data */
+ nmc_empty_output_fields (nmc);
}
static NMCResultCode
@@ -1951,7 +2368,7 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
GError *error = NULL;
NMDevice *device = NULL;
NMWimaxNsp *nsp = NULL;
- const char *iface = NULL;
+ const char *ifname = NULL;
const char *nsp_user = NULL;
const GPtrArray *devices;
const GPtrArray *nsps;
@@ -1959,18 +2376,18 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
char *fields_str;
char *fields_all = NMC_FIELDS_DEV_WIMAX_LIST_ALL;
char *fields_common = NMC_FIELDS_DEV_WIMAX_LIST_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+ const char *base_hdr = _("WiMAX NSP list");
while (argc > 0) {
- if (strcmp (*argv, "iface") == 0) {
+ if (strcmp (*argv, "ifname") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- iface = *argv;
+ ifname = *argv;
} else if (strcmp (*argv, "nsp") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
@@ -1993,58 +2410,50 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
else
fields_str = nmc->required_fields;
- nmc->allowed_fields = nmc_fields_dev_wimax_list;
- nmc->print_fields.indices = parse_output_fields (fields_str, nmc->allowed_fields, &error);
+ tmpl = nmc_fields_dev_wimax_list;
+ tmpl_len = sizeof (nmc_fields_dev_wimax_list);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'dev wimax': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'dev wimax': %s; allowed fields: %s"), error->message, NMC_FIELDS_DEV_WIMAX_LIST_ALL);
+ g_string_printf (nmc->return_text, _("Error: 'device wimax': %s"), error->message);
g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto error;
}
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
+ nmc->get_client (nmc);
+
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
goto error;
}
if (!nmc_versions_match (nmc))
goto error;
- /* Print headers */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("WiMAX NSP list");
-
- nmc->get_client (nmc);
devices = nm_client_get_devices (nmc->client);
- if (iface) {
+ if (ifname) {
/* Device specified - list only NSPs of this interface */
for (i = 0; devices && (i < devices->len); i++) {
NMDevice *candidate = g_ptr_array_index (devices, i);
const char *dev_iface = nm_device_get_iface (candidate);
- if (!g_strcmp0 (dev_iface, iface)) {
+ if (!g_strcmp0 (dev_iface, ifname)) {
device = candidate;
break;
}
}
if (!device) {
- g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), iface);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), ifname);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
+ /* Main header name */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, ifname);
+
if (NM_IS_DEVICE_WIMAX (device)) {
if (nsp_user) {
/* Specific NSP requested - list only that */
@@ -2061,23 +2470,24 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
}
if (!nsp) {
g_string_printf (nmc->return_text, _("Error: NSP with name '%s' not found."), nsp_user);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
- detail_wimax_nsp (nsp, nmc, device, 1);
+ /* Add headers (field names) */
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+ fill_output_wimax_nsp (nsp, nmc, device, 1, 0);
+ print_data (nmc); /* Print all data */
} else {
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
show_nsp_info (device, nmc);
}
} else {
- g_string_printf (nmc->return_text, _("Error: Device '%s' is not a WiMAX device."), iface);
+ g_string_printf (nmc->return_text, _("Error: Device '%s' is not a WiMAX device."), ifname);
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
goto error;
}
} else {
/* List NSPs for all devices */
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
if (nsp_user) {
/* Specific NSP requested - list only that */
for (i = 0; devices && (i < devices->len); i++) {
@@ -2087,6 +2497,12 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
if (!NM_IS_DEVICE_WIMAX (dev))
continue;
+ /* Main header name */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, nm_device_get_iface (dev));
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (dev));
for (j = 0, nsp = NULL; nsps && (j < nsps->len); j++) {
NMWimaxNsp *candidate_nsp = g_ptr_array_index (nsps, j);
@@ -2096,19 +2512,26 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
nsp_up = g_ascii_strup (nsp_user, -1);
if (!strcmp (nsp_up, candidate_name)) {
nsp = candidate_nsp;
- detail_wimax_nsp (nsp, nmc, dev, idx);
+ fill_output_wimax_nsp (nsp, nmc, dev, idx, 0);
}
g_free (nsp_up);
}
+ print_data (nmc); /* Print all data */
+ nmc_empty_output_fields (nmc);
}
if (!nsp) {
g_string_printf (nmc->return_text, _("Error: Access point with nsp '%s' not found."), nsp_user);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto error;
}
} else {
for (i = 0; devices && (i < devices->len); i++) {
NMDevice *dev = g_ptr_array_index (devices, i);
+
+ /* Main header name */
+ nmc->print_fields.header_name = (char *) construct_header_name (base_hdr,
+ nm_device_get_iface (dev));
+
if (NM_IS_DEVICE_WIMAX (dev))
show_nsp_info (dev, nmc);
}
@@ -2129,7 +2552,7 @@ do_device_wimax (NmCli *nmc, int argc, char **argv)
nmc->return_value = do_device_wimax_list (nmc, argc-1, argv+1);
}
else {
- g_string_printf (nmc->return_text, _("Error: 'dev wimax' command '%s' is not valid."), *argv);
+ g_string_printf (nmc->return_text, _("Error: 'device wimax' command '%s' is not valid."), *argv);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
}
}
@@ -2138,11 +2561,82 @@ do_device_wimax (NmCli *nmc, int argc, char **argv)
}
#endif
+static gboolean
+is_single_word (const char* line)
+{
+ size_t n1, n2, n3;
+
+ n1 = strspn (line, " \t");
+ n2 = strcspn (line+n1, " \t\0") + n1;
+ n3 = strspn (line+n2, " \t");
+
+ if (n3 == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/* Global variable defined in nmcli.c */
+extern NmCli nm_cli;
+
+static char *
+gen_func_ifnames (const char *text, int state)
+{
+ int i, j = 0;
+ const GPtrArray *devices;
+ const char **ifnames;
+ char *ret;
+
+ nm_cli.get_client (&nm_cli);
+ devices = nm_client_get_devices (nm_cli.client);
+ if (!devices || devices->len < 1)
+ return NULL;
+
+ ifnames = g_new (const char *, devices->len + 1);
+ for (i = 0; i < devices->len; i++) {
+ NMDevice *dev = g_ptr_array_index (devices, i);
+ const char *ifname = nm_device_get_iface (dev);
+ ifnames[j++] = ifname;
+ }
+ ifnames[j] = NULL;
+
+ ret = nmc_rl_gen_func_basic (text, state, ifnames);
+
+ g_free (ifnames);
+ return ret;
+}
+
+static char **
+nmcli_device_tab_completion (const char *text, int start, int end)
+{
+ char **match_array = NULL;
+ rl_compentry_func_t *generator_func = NULL;
+
+ /* Disable readline's default filename completion */
+ rl_attempted_completion_over = 1;
+
+ /* Disable appending space after completion */
+ rl_completion_append_character = '\0';
+
+ if (!is_single_word (rl_line_buffer))
+ return NULL;
+
+ if (g_strcmp0 (rl_prompt, PROMPT_INTERFACE) == 0)
+ generator_func = gen_func_ifnames;
+
+ if (generator_func)
+ match_array = rl_completion_matches (text, generator_func);
+
+ return match_array;
+}
+
NMCResultCode
do_devices (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
+ rl_attempted_completion_function = (rl_completion_func_t *) nmcli_device_tab_completion;
+
if (argc == 0) {
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
goto opt_error;
@@ -2150,36 +2644,62 @@ do_devices (NmCli *nmc, int argc, char **argv)
}
if (argc > 0) {
- if (matches (*argv, "status") == 0) {
+ if (nmc_arg_is_help (*argv)) {
+ usage ();
+ goto usage_exit;
+ }
+ else if (matches (*argv, "status") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_device_status ();
+ goto usage_exit;
+ }
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
goto opt_error;
nmc->return_value = do_devices_status (nmc, argc-1, argv+1);
}
- else if (matches (*argv, "list") == 0) {
+ else if (matches (*argv, "show") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_device_show ();
+ goto usage_exit;
+ }
if (!nmc->mode_specified)
- nmc->multiline_output = TRUE; /* multiline mode is default for 'dev list' */
- nmc->return_value = do_devices_list (nmc, argc-1, argv+1);
+ nmc->multiline_output = TRUE; /* multiline mode is default for 'device show' */
+ nmc->return_value = do_devices_show (nmc, argc-1, argv+1);
+ }
+ else if (matches (*argv, "connect") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_device_connect ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_device_connect (nmc, argc-1, argv+1);
}
else if (matches (*argv, "disconnect") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_device_disconnect ();
+ goto usage_exit;
+ }
nmc->return_value = do_device_disconnect (nmc, argc-1, argv+1);
}
else if (matches (*argv, "wifi") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_device_wifi ();
+ goto usage_exit;
+ }
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
goto opt_error;
nmc->return_value = do_device_wifi (nmc, argc-1, argv+1);
}
#if WITH_WIMAX
else if (matches (*argv, "wimax") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_device_wimax ();
+ goto usage_exit;
+ }
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
goto opt_error;
nmc->return_value = do_device_wimax (nmc, argc-1, argv+1);
}
#endif
- else if ( matches (*argv, "help") == 0
- || (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0)
- || (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) {
- usage ();
- }
else {
usage ();
g_string_printf (nmc->return_text, _("Error: 'dev' command '%s' is not valid."), *argv);
@@ -2187,6 +2707,7 @@ do_devices (NmCli *nmc, int argc, char **argv)
}
}
+usage_exit:
return nmc->return_value;
opt_error:
diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c
index 8fb5f6cf6..ed074c6de 100644
--- a/cli/src/network-manager.c
+++ b/cli/src/network-manager.c
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
@@ -32,67 +32,223 @@
#include "network-manager.h"
-/* Available fields for 'nm status' */
+/* Available fields for 'general status' */
static NmcOutputField nmc_fields_nm_status[] = {
- {"RUNNING", N_("RUNNING"), 15, NULL, 0}, /* 0 */
- {"VERSION", N_("VERSION"), 10, NULL, 0}, /* 1 */
- {"STATE", N_("STATE"), 15, NULL, 0}, /* 2 */
- {"NET-ENABLED", N_("NET-ENABLED"), 13, NULL, 0}, /* 3 */
- {"WIFI-HARDWARE", N_("WIFI-HARDWARE"), 15, NULL, 0}, /* 4 */
- {"WIFI", N_("WIFI"), 10, NULL, 0}, /* 5 */
- {"WWAN-HARDWARE", N_("WWAN-HARDWARE"), 15, NULL, 0}, /* 6 */
- {"WWAN", N_("WWAN"), 10, NULL, 0}, /* 7 */
- {"WIMAX-HARDWARE", N_("WIMAX-HARDWARE"), 15, NULL, 0}, /* 8 */
- {"WIMAX", N_("WIMAX"), 10, NULL, 0}, /* 9 */
- {NULL, NULL, 0, NULL, 0}
+ {"RUNNING", N_("RUNNING"), 15}, /* 0 */
+ {"VERSION", N_("VERSION"), 10}, /* 1 */
+ {"STATE", N_("STATE"), 15}, /* 2 */
+ {"STARTUP", N_("STARTUP"), 10}, /* 3 */
+ {"CONNECTIVITY", N_("CONNECTIVITY"), 15}, /* 4 */
+ {"NETWORKING", N_("NETWORKING"), 13}, /* 5 */
+ {"WIFI-HW", N_("WIFI-HW"), 15}, /* 6 */
+ {"WIFI", N_("WIFI"), 10}, /* 7 */
+ {"WWAN-HW", N_("WWAN-HW"), 15}, /* 8 */
+ {"WWAN", N_("WWAN"), 10}, /* 9 */
+ {"WIMAX-HW", N_("WIMAX-HW"), 15}, /* 10 */
+ {"WIMAX", N_("WIMAX"), 10}, /* 11 */
+ {NULL, NULL, 0}
};
#if WITH_WIMAX
-#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,NET-ENABLED,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN,WIMAX-HARDWARE,WIMAX"
+#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,STARTUP,CONNECTIVITY,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
+#define NMC_FIELDS_NM_STATUS_SWITCH "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
+#define NMC_FIELDS_NM_STATUS_RADIO "WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
#else
-#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,NET-ENABLED,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
+#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,STARTUP,CONNECTIVITY,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
+#define NMC_FIELDS_NM_STATUS_SWITCH "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
+#define NMC_FIELDS_NM_STATUS_RADIO "WIFI-HW,WIFI,WWAN-HW,WWAN"
#endif
-#define NMC_FIELDS_NM_STATUS_COMMON "RUNNING,STATE,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
-#define NMC_FIELDS_NM_NET_ENABLED "NET-ENABLED"
+#define NMC_FIELDS_NM_STATUS_COMMON "STATE,CONNECTIVITY,WIFI-HW,WIFI,WWAN-HW,WWAN"
+#define NMC_FIELDS_NM_NETWORKING "NETWORKING"
#define NMC_FIELDS_NM_WIFI "WIFI"
#define NMC_FIELDS_NM_WWAN "WWAN"
#define NMC_FIELDS_NM_WIMAX "WIMAX"
+#define NMC_FIELDS_NM_CONNECTIVITY "CONNECTIVITY"
-/* Available fields for 'nm permissions' */
+
+/* Available fields for 'general permissions' */
static NmcOutputField nmc_fields_nm_permissions[] = {
- {"PERMISSION", N_("PERMISSION"), 57, NULL, 0}, /* 0 */
- {"VALUE", N_("VALUE"), 10, NULL, 0}, /* 1 */
- {NULL, NULL, 0, NULL, 0}
+ {"PERMISSION", N_("PERMISSION"), 57}, /* 0 */
+ {"VALUE", N_("VALUE"), 10}, /* 1 */
+ {NULL, NULL, 0}
};
#define NMC_FIELDS_NM_PERMISSIONS_ALL "PERMISSION,VALUE"
#define NMC_FIELDS_NM_PERMISSIONS_COMMON "PERMISSION,VALUE"
+/* Available fields for 'general logging' */
+static NmcOutputField nmc_fields_nm_logging[] = {
+ {"LEVEL", N_("LEVEL"), 10}, /* 0 */
+ {"DOMAINS", N_("DOMAINS"), 70}, /* 1 */
+ {NULL, NULL, 0}
+};
+#define NMC_FIELDS_NM_LOGGING_ALL "LEVEL,DOMAINS"
+#define NMC_FIELDS_NM_LOGGING_COMMON "LEVEL,DOMAINS"
+
/* glib main loop variable - defined in nmcli.c */
extern GMainLoop *loop;
+
+static void
+usage_general (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli general { COMMAND | help }\n\n"
+ "COMMAND := { status | hostname | permissions | logging }\n\n"
+ " status\n\n"
+ " hostname [<hostname>]\n\n"
+ " permissions\n\n"
+ " logging [level <log level>] [domains <log domains>]\n\n"));
+}
+
+static void
+usage_general_status (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli general status { help }\n"
+ "\n"
+ "Show overall status of NetworkManager.\n"
+ "'status' is the default action, which means 'nmcli gen' calls 'nmcli gen status'\n\n"));
+}
+
+static void
+usage_general_hostname (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli general hostname { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [<hostname>]\n"
+ "\n"
+ "Get or change persistent system hostname.\n"
+ "With no arguments, this prints currently configured hostname. When you pass\n"
+ "a hostname, NetworkManager will set it as the new persistent system hostname.\n\n"));
+}
+
+static void
+usage_general_permissions (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli general permissions { help }\n"
+ "\n"
+ "Show caller permissions for authenticated operations.\n\n"));
+}
+
+static void
+usage_general_logging (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli general logging { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+ "\n"
+ "Get or change NetworkManager logging level and domains.\n"
+ "Without any argument current logging level and domains are shown. In order to\n"
+ "change logging state, provide level and/or domain. Please refer to the man page\n"
+ "for the list of possible logging domains.\n\n"));
+}
+
+static void
+usage_networking (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli networking { COMMAND | help }\n\n"
+ "COMMAND := { [ on | off | connectivity ] }\n\n"
+ " on\n\n"
+ " off\n\n"
+ " connectivity [check]\n\n"));
+}
+
+static void
+usage_networking_on (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli networking on { help }\n"
+ "\n"
+ "Switch networking on.\n\n"));
+}
+
+static void
+usage_networking_off (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli networking off { help }\n"
+ "\n"
+ "Switch networking off.\n\n"));
+}
+
+static void
+usage_networking_connectivity (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [check]\n"
+ "\n"
+ "Get network connectivity state.\n"
+ "The optional 'check' argument makes NetworkManager re-check the connectivity.\n\n"));
+
+}
+
static void
-usage (void)
+usage_radio (void)
{
fprintf (stderr,
- _("Usage: nmcli nm { COMMAND | help }\n\n"
+ _("Usage: nmcli radio { COMMAND | help }\n\n"
#if WITH_WIMAX
- " COMMAND := { status | permissions | enable | sleep | wifi | wwan | wimax }\n\n"
+ "COMMAND := { all | wifi | wwan | wimax }\n\n"
+ " all | wifi | wwan | wimax [ on | off ]\n\n"
#else
- " COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n\n"
-#endif
- " status\n"
- " permissions\n"
- " enable [true|false]\n"
- " sleep [true|false]\n"
- " wifi [on|off]\n"
- " wwan [on|off]\n"
-#if WITH_WIMAX
- " wimax [on|off]\n"
+ "COMMAND := { all | wifi | wwan }\n\n"
+ " all | wifi | wwan [ on | off ]\n\n"
#endif
- "\n"
));
}
+static void
+usage_radio_all (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli radio all { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [on | off]\n"
+ "\n"
+ "Get status of all radio switches, or turn them on/off.\n\n"));
+}
+
+static void
+usage_radio_wifi (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [on | off]\n"
+ "\n"
+ "Get status of Wi-Fi radio switch, or turn it on/off.\n\n"));
+}
+
+static void
+usage_radio_wwan (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [on | off]\n"
+ "\n"
+ "Get status of mobile broadband radio switch, or turn it on/off.\n\n"));
+}
+
+#if WITH_WIMAX
+static void
+usage_radio_wimax (void)
+{
+ fprintf (stderr,
+ _("Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [on | off]\n"
+ "\n"
+ "Get status of WiMAX radio switch, or turn it on/off.\n\n"));
+}
+#endif
+
/* quit main loop */
static void
quit (void)
@@ -124,11 +280,30 @@ nm_state_to_string (NMState state)
}
}
-static NMCResultCode
-show_nm_status (NmCli *nmc)
+static const char *
+nm_connectivity_to_string (NMConnectivityState connectivity)
+{
+ switch (connectivity) {
+ case NM_CONNECTIVITY_NONE:
+ return _("none");
+ case NM_CONNECTIVITY_PORTAL:
+ return _("portal");
+ case NM_CONNECTIVITY_LIMITED:
+ return _("limited");
+ case NM_CONNECTIVITY_FULL:
+ return _("full");
+ case NM_CONNECTIVITY_UNKNOWN:
+ default:
+ return _("unknown");
+ }
+}
+
+static gboolean
+show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_flds)
{
- gboolean nm_running;
+ gboolean nm_running, startup = FALSE;
NMState state = NM_STATE_UNKNOWN;
+ NMConnectivityState connectivity = NM_CONNECTIVITY_UNKNOWN;
const char *net_enabled_str;
const char *wireless_hw_enabled_str, *wireless_enabled_str;
const char *wwan_hw_enabled_str, *wwan_enabled_str;
@@ -137,11 +312,10 @@ show_nm_status (NmCli *nmc)
#endif
GError *error = NULL;
const char *fields_str;
- const char *fields_all = NMC_FIELDS_NM_STATUS_ALL;
- const char *fields_common = NMC_FIELDS_NM_STATUS_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ const char *fields_all = print_flds ? print_flds : NMC_FIELDS_NM_STATUS_ALL;
+ const char *fields_common = print_flds ? print_flds : NMC_FIELDS_NM_STATUS_COMMON;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
fields_str = fields_common;
@@ -150,26 +324,27 @@ show_nm_status (NmCli *nmc)
else
fields_str = nmc->required_fields;
- nmc->allowed_fields = nmc_fields_nm_status;
- nmc->print_fields.indices = parse_output_fields (fields_str, nmc->allowed_fields, &error);
+ tmpl = nmc_fields_nm_status;
+ tmpl_len = sizeof (nmc_fields_nm_status);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'nm status': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'nm status': %s; allowed fields: %s"), error->message, NMC_FIELDS_NM_STATUS_ALL);
+ g_string_printf (nmc->return_text, _("Error: only these fields are allowed: %s"), fields_all);
g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- return nmc->return_value;
+ return FALSE;
}
- nm_running = nmc_is_nm_running (nmc, NULL);
+ nmc->get_client (nmc); /* create NMClient */
+
+ nm_running = nm_client_get_manager_running (nmc->client);
if (nm_running) {
if (!nmc_versions_match (nmc))
- goto error;
+ return FALSE;
- nmc->get_client (nmc); /* create NMClient */
state = nm_client_get_state (nmc->client);
+ startup = nm_client_get_startup (nmc->client);
+ connectivity = nm_client_get_connectivity (nmc->client);
net_enabled_str = nm_client_networking_get_enabled (nmc->client) ? _("enabled") : _("disabled");
wireless_hw_enabled_str = nm_client_wireless_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
wireless_enabled_str = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
@@ -189,30 +364,30 @@ show_nm_status (NmCli *nmc)
#endif
}
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("NetworkManager status");
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- nmc->allowed_fields[0].value = nm_running ? _("running") : _("not running");
- nmc->allowed_fields[1].value = nm_running ? nm_client_get_version (nmc->client) : _("unknown");
- nmc->allowed_fields[2].value = nm_state_to_string (state);
- nmc->allowed_fields[3].value = net_enabled_str;
- nmc->allowed_fields[4].value = wireless_hw_enabled_str;
- nmc->allowed_fields[5].value = wireless_enabled_str;
- nmc->allowed_fields[6].value = wwan_hw_enabled_str;
- nmc->allowed_fields[7].value = wwan_enabled_str;
+ nmc->print_fields.header_name = pretty_header_name ? (char *) pretty_header_name : _("NetworkManager status");
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
+ set_val_strc (arr, 0, nm_running ? _("running") : _("not running"));
+ set_val_strc (arr, 1, nm_running ? nm_client_get_version (nmc->client) : _("unknown"));
+ set_val_strc (arr, 2, nm_state_to_string (state));
+ set_val_strc (arr, 3, nm_running ? (startup ? _("starting") : _("started")) : _("unknown"));
+ set_val_strc (arr, 4, nm_connectivity_to_string (connectivity));
+ set_val_strc (arr, 5, net_enabled_str);
+ set_val_strc (arr, 6, wireless_hw_enabled_str);
+ set_val_strc (arr, 7, wireless_enabled_str);
+ set_val_strc (arr, 8, wwan_hw_enabled_str);
+ set_val_strc (arr, 9, wwan_enabled_str);
#if WITH_WIMAX
- nmc->allowed_fields[8].value = wimax_hw_enabled_str;
- nmc->allowed_fields[9].value = wimax_enabled_str;
+ set_val_strc (arr, 10, wimax_hw_enabled_str);
+ set_val_strc (arr, 11, wimax_enabled_str);
#endif
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ print_data (nmc); /* Print all data */
- return NMC_RESULT_SUCCESS;
-
-error:
- return nmc->return_value;
+ return TRUE;
}
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
@@ -274,7 +449,7 @@ permission_result_to_string (NMClientPermissionResult perm_result)
}
}
-static NMCResultCode
+static gboolean
show_nm_permissions (NmCli *nmc)
{
NMClientPermission perm;
@@ -282,9 +457,8 @@ show_nm_permissions (NmCli *nmc)
const char *fields_str;
const char *fields_all = NMC_FIELDS_NM_PERMISSIONS_ALL;
const char *fields_common = NMC_FIELDS_NM_PERMISSIONS_COMMON;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
fields_str = fields_common;
@@ -293,311 +467,451 @@ show_nm_permissions (NmCli *nmc)
else
fields_str = nmc->required_fields;
- nmc->allowed_fields = nmc_fields_nm_permissions;
- nmc->print_fields.indices = parse_output_fields (fields_str, nmc->allowed_fields, &error);
+ tmpl = nmc_fields_nm_permissions;
+ tmpl_len = sizeof (nmc_fields_nm_permissions);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
if (error) {
- if (error->code == 0)
- g_string_printf (nmc->return_text, _("Error: 'nm permissions': %s"), error->message);
- else
- g_string_printf (nmc->return_text, _("Error: 'nm permissions': %s; allowed fields: %s"), error->message, NMC_FIELDS_NM_PERMISSIONS_ALL);
+ g_string_printf (nmc->return_text, _("Error: 'general permissions': %s"), error->message);
g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- return nmc->return_value;
- }
-
- if (!nmc_is_nm_running (nmc, &error)) {
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (error);
- } else {
- g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
- nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
- }
- goto error;
+ return FALSE;
}
nmc->get_client (nmc); /* create NMClient */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
+ if (!nm_client_get_manager_running (nmc->client)) {
+ g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+ nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+ return FALSE;
+ }
+
nmc->print_fields.header_name = _("NetworkManager permissions");
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
for (perm = NM_CLIENT_PERMISSION_NONE + 1; perm <= NM_CLIENT_PERMISSION_LAST; perm++) {
NMClientPermissionResult perm_result = nm_client_get_permission_result (nmc->client, perm);
- set_val_str (nmc->allowed_fields, 0, permission_to_string (perm));
- set_val_str (nmc->allowed_fields, 1, permission_result_to_string (perm_result));
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
+ set_val_strc (arr, 0, permission_to_string (perm));
+ set_val_strc (arr, 1, permission_result_to_string (perm_result));
+ g_ptr_array_add (nmc->output_data, arr);
}
- return NMC_RESULT_SUCCESS;
+ print_data (nmc); /* Print all data */
-error:
- return nmc->return_value;
+ return TRUE;
}
-/* libnm-glib doesn't provide API fro Sleep method - implement D-Bus call ourselves */
-static void networking_set_sleep (NmCli *nmc, gboolean in_sleep)
+static gboolean
+show_general_logging (NmCli *nmc)
{
- DBusGConnection *connection = NULL;
- DBusGProxy *proxy = NULL;
- GError *err = NULL;
+ char *level = NULL;
+ char *domains = NULL;
+ GError *error = NULL;
+ const char *fields_str;
+ const char *fields_all = NMC_FIELDS_NM_LOGGING_ALL;
+ const char *fields_common = NMC_FIELDS_NM_LOGGING_COMMON;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
- if (!connection) {
- g_string_printf (nmc->return_text, _("Error: Couldn't connect to system bus: %s"), err->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (err);
- goto gone;
+ if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
+ fields_str = fields_common;
+ else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
+ fields_str = fields_all;
+ else
+ fields_str = nmc->required_fields;
+
+ tmpl = nmc_fields_nm_logging;
+ tmpl_len = sizeof (nmc_fields_nm_logging);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
+
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: 'general logging': %s"), error->message);
+ g_error_free (error);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ return FALSE;
}
- proxy = dbus_g_proxy_new_for_name (connection,
- "org.freedesktop.NetworkManager",
- "/org/freedesktop/NetworkManager",
- "org.freedesktop.NetworkManager");
- if (!proxy) {
- g_string_printf (nmc->return_text, _("Error: Couldn't create D-Bus object proxy."));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- goto gone;
+ nmc->get_client (nmc); /* create NMClient */
+ nm_client_get_logging (nmc->client, &level, &domains, &error);
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_error_free (error);
+ return FALSE;
}
- if (!dbus_g_proxy_call (proxy, "Sleep", &err, G_TYPE_BOOLEAN, in_sleep, G_TYPE_INVALID, G_TYPE_INVALID)) {
- g_string_printf (nmc->return_text, _("Error in sleep: %s"), err->message);
+ nmc->print_fields.header_name = _("NetworkManager logging");
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
+ set_val_str (arr, 0, level);
+ set_val_str (arr, 1, domains);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static void
+save_hostname_cb (NMRemoteSettings *settings, GError *error, gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: failed to set hostname: (%d) %s"),
+ error->code, error->message);
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_error_free (err);
}
-
-gone:
- if (connection) dbus_g_connection_unref (connection);
- if (proxy) g_object_unref (proxy);
+ quit ();
}
-/* entry point function for global network manager related commands 'nmcli nm' */
+/*
+ * Entry point function for general operations 'nmcli general'
+ */
NMCResultCode
-do_network_manager (NmCli *nmc, int argc, char **argv)
+do_general (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
- gboolean sleep_flag;
- gboolean enable_net;
- gboolean enable_wifi;
- gboolean enable_wwan;
-#if WITH_WIMAX
- gboolean enable_wimax;
-#endif
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
if (argc == 0) {
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
- nmc->return_value = show_nm_status (nmc);
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ show_nm_status (nmc, NULL, NULL);
}
if (argc > 0) {
- if (matches (*argv, "status") == 0) {
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
- nmc->return_value = show_nm_status (nmc);
+ if (nmc_arg_is_help (*argv)) {
+ usage_general ();
+ }
+ else if (matches (*argv, "status") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_general_status ();
+ goto finish;
+ }
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ show_nm_status (nmc, NULL, NULL);
+ }
+ else if (matches (*argv, "hostname") == 0) {
+ NMRemoteSettings *rem_settings;
+
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_general_hostname ();
+ goto finish;
+ }
+
+ /* get system settings */
+ if (!(rem_settings = nm_remote_settings_new (NULL))) {
+ g_string_printf (nmc->return_text, _("Error: Could not get system settings."));
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ goto finish;
+ }
+
+ if (next_arg (&argc, &argv) != 0) {
+ /* no arguments -> get hostname */
+ char *hostname = NULL;
+
+ g_object_get (rem_settings, NM_REMOTE_SETTINGS_HOSTNAME, &hostname, NULL);
+ if (hostname)
+ printf ("%s\n", hostname);
+ g_free (hostname);
+ } else {
+ /* hostname provided -> set it */
+ const char *hostname = *argv;
+
+ if (next_arg (&argc, &argv) == 0)
+ printf ("Warning: ignoring extra garbage after '%s' hostname\n", hostname);
+
+ nmc->should_wait = TRUE;
+ nm_remote_settings_save_hostname (rem_settings, hostname, save_hostname_cb, nmc);
+ }
}
else if (matches (*argv, "permissions") == 0) {
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
- nmc->return_value = show_nm_permissions (nmc);
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_general_permissions ();
+ goto finish;
+ }
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
+ show_nm_permissions (nmc);
}
- else if (matches (*argv, "enable") == 0) {
+ else if (matches (*argv, "logging") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_general_logging ();
+ goto finish;
+ }
if (next_arg (&argc, &argv) != 0) {
- /* no argument, show current state of networking */
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
- if (nmc->required_fields && strcasecmp (nmc->required_fields, "NET-ENABLED")) {
- g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"),
- nmc->required_fields, NMC_FIELDS_NM_NET_ENABLED);
+ /* no arguments -> get logging level and domains */
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
+ goto finish;
}
- nmc->allowed_fields = nmc_fields_nm_status;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_NET_ENABLED, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("Networking enabled");
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- if (nmc_is_nm_running (nmc, NULL)) {
- nmc->get_client (nmc); /* create NMClient */
- nmc->allowed_fields[3].value = nm_client_networking_get_enabled (nmc->client) ? _("enabled") : _("disabled");
- } else
- nmc->allowed_fields[3].value = _("unknown");
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ show_general_logging (nmc);
} else {
- if (!strcmp (*argv, "true"))
- enable_net = TRUE;
- else if (!strcmp (*argv, "false"))
- enable_net = FALSE;
- else {
- g_string_printf (nmc->return_text, _("Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
+ /* arguments provided -> set logging level and domains */
+ const char *level = NULL;
+ const char *domains = NULL;
+ nmc_arg_t exp_args[] = { {"level", TRUE, &level, TRUE},
+ {"domains", TRUE, &domains, TRUE},
+ {NULL} };
+
+ if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, &error)) {
+ g_string_assign (nmc->return_text, error->message);
+ nmc->return_value = error->code;
+ goto finish;
}
+
nmc->get_client (nmc); /* create NMClient */
- nm_client_networking_set_enabled (nmc->client, enable_net);
+ nm_client_set_logging (nmc->client, level, domains, &error);
+ if (error) {
+ if (g_error_matches (error, DBUS_GERROR, DBUS_GERROR_ACCESS_DENIED))
+ g_string_printf (nmc->return_text, _("Error: access denied to set logging; %s"), error->message);
+ else
+ g_string_printf (nmc->return_text, _("Error: %s"), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto finish;
+ }
}
}
- else if (matches (*argv, "sleep") == 0) {
+ else {
+ usage_general ();
+ g_string_printf (nmc->return_text, _("Error: 'general' command '%s' is not valid."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ }
+ }
+
+finish:
+ if (error)
+ g_error_free (error);
+ return nmc->return_value;
+}
+
+static gboolean
+nmc_switch_show (NmCli *nmc, const char *switch_name, const char *header)
+{
+ g_return_val_if_fail (nmc != NULL, FALSE);
+ g_return_val_if_fail (switch_name != NULL, FALSE);
+
+ if (nmc->required_fields && strcasecmp (nmc->required_fields, switch_name) != 0) {
+ g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here (allowed field: %s)"),
+ nmc->required_fields, switch_name);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ return FALSE;
+ }
+ if (nmc->print_output == NMC_PRINT_NORMAL)
+ nmc->print_output = NMC_PRINT_TERSE;
+
+ if (!nmc->required_fields)
+ nmc->required_fields = g_strdup (switch_name);
+ return show_nm_status (nmc, header, NULL);
+}
+
+static gboolean
+nmc_switch_parse_on_off (NmCli *nmc, const char *arg1, const char *arg2, gboolean *res)
+{
+ g_return_val_if_fail (nmc != NULL, FALSE);
+ g_return_val_if_fail (arg1 && arg2, FALSE);
+ g_return_val_if_fail (res != NULL, FALSE);
+
+ if (!strcmp (arg2, "on"))
+ *res = TRUE;
+ else if (!strcmp (arg2, "off"))
+ *res = FALSE;
+ else {
+ g_string_printf (nmc->return_text, _("Error: invalid '%s' argument: '%s' (use on/off)."), arg1, arg2);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+show_networking_connectivity (NmCli *nmc)
+{
+ return nmc_switch_show (nmc, NMC_FIELDS_NM_CONNECTIVITY, _("Connectivity"));
+}
+
+/*
+ * Entry point function for 'nmcli networking'
+ */
+NMCResultCode
+do_networking (NmCli *nmc, int argc, char **argv)
+{
+ gboolean enable_flag;
+
+ if (argc == 0)
+ nmc_switch_show (nmc, NMC_FIELDS_NM_NETWORKING, _("Networking"));
+ else if (argc > 0) {
+ if (nmc_arg_is_help (*argv)) {
+ usage_networking ();
+ } else if (matches (*argv, "connectivity") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_networking_connectivity ();
+ goto finish;
+ }
if (next_arg (&argc, &argv) != 0) {
- g_string_printf (nmc->return_text, _("Error: Sleeping status is not exported by NetworkManager."));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ /* no arguments -> get current state */
+ show_networking_connectivity (nmc);
+ } else if (matches (*argv, "check") == 0) {
+ GError *error = NULL;
+
+ nmc->get_client (nmc); /* create NMClient */
+ nm_client_check_connectivity (nmc->client, NULL, &error);
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_clear_error (&error);
+ } else
+ show_networking_connectivity (nmc);
} else {
- if (!strcmp (*argv, "true"))
- sleep_flag = TRUE;
- else if (!strcmp (*argv, "false"))
- sleep_flag = FALSE;
- else {
- g_string_printf (nmc->return_text, _("Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."), *argv);
+ usage_networking ();
+ g_string_printf (nmc->return_text, _("Error: 'networking connectivity' command '%s' is not valid."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ }
+ } else if (nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag)) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ if (enable_flag)
+ usage_networking_on ();
+ else
+ usage_networking_off ();
+ goto finish;
+ }
+
+ nmc->get_client (nmc); /* create NMClient */
+ nm_client_networking_set_enabled (nmc->client, enable_flag);
+ } else {
+ usage_networking ();
+ g_string_printf (nmc->return_text, _("Error: 'networking' command '%s' is not valid."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ }
+ }
+
+finish:
+ quit ();
+ return nmc->return_value;
+}
+
+/*
+ * Entry point function for radio switch commands 'nmcli radio'
+ */
+NMCResultCode
+do_radio (NmCli *nmc, int argc, char **argv)
+{
+ GError *error = NULL;
+ gboolean enable_flag;
+
+ if (argc == 0) {
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ g_error_free (error);
+ goto finish;
+ }
+ show_nm_status (nmc, _("Radio switches"), NMC_FIELDS_NM_STATUS_RADIO);
+ }
+
+ if (argc > 0) {
+ if (nmc_arg_is_help (*argv)) {
+ usage_radio ();
+ }
+ else if (matches (*argv, "all") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_radio_all ();
+ goto finish;
+ }
+ if (next_arg (&argc, &argv) != 0) {
+ /* no argument, show all radio switches */
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
+ g_error_free (error);
+ goto finish;
}
- networking_set_sleep (nmc, sleep_flag);
+ show_nm_status (nmc, _("Radio switches"), NMC_FIELDS_NM_STATUS_RADIO);
+ } else {
+ if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
+ goto finish;
+
+ nmc->get_client (nmc); /* create NMClient */
+ nm_client_wireless_set_enabled (nmc->client, enable_flag);
+ nm_client_wimax_set_enabled (nmc->client, enable_flag);
+ nm_client_wwan_set_enabled (nmc->client, enable_flag);
}
}
else if (matches (*argv, "wifi") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_radio_wifi ();
+ goto finish;
+ }
if (next_arg (&argc, &argv) != 0) {
/* no argument, show current WiFi state */
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
- if (nmc->required_fields && strcasecmp (nmc->required_fields, "WIFI")) {
- g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"),
- nmc->required_fields, NMC_FIELDS_NM_WIFI);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
- }
- nmc->allowed_fields = nmc_fields_nm_status;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_WIFI, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("WiFi enabled");
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- if (nmc_is_nm_running (nmc, NULL)) {
- nmc->get_client (nmc); /* create NMClient */
- nmc->allowed_fields[5].value = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
- } else
- nmc->allowed_fields[5].value = _("unknown");
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ nmc_switch_show (nmc, NMC_FIELDS_NM_WIFI, _("Wi-Fi radio switch"));
} else {
- if (!strcmp (*argv, "on"))
- enable_wifi = TRUE;
- else if (!strcmp (*argv, "off"))
- enable_wifi = FALSE;
- else {
- g_string_printf (nmc->return_text, _("Error: invalid 'wifi' parameter: '%s'."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
- }
+ if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
+ goto finish;
+
nmc->get_client (nmc); /* create NMClient */
- nm_client_wireless_set_enabled (nmc->client, enable_wifi);
+ nm_client_wireless_set_enabled (nmc->client, enable_flag);
}
}
else if (matches (*argv, "wwan") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_radio_wwan ();
+ goto finish;
+ }
if (next_arg (&argc, &argv) != 0) {
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
- /* no argument, show current WWAN state */
- if (nmc->required_fields && strcasecmp (nmc->required_fields, "WWAN")) {
- g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"),
- nmc->required_fields, NMC_FIELDS_NM_WWAN);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
- }
- nmc->allowed_fields = nmc_fields_nm_status;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_WWAN, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("WWAN enabled");
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- if (nmc_is_nm_running (nmc, NULL)) {
- nmc->get_client (nmc); /* create NMClient */
- nmc->allowed_fields[7].value = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
- } else
- nmc->allowed_fields[7].value = _("unknown");
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ /* no argument, show current WWAN (mobile broadband) state */
+ nmc_switch_show (nmc, NMC_FIELDS_NM_WWAN, _("WWAN radio switch"));
} else {
- if (!strcmp (*argv, "on"))
- enable_wwan = TRUE;
- else if (!strcmp (*argv, "off"))
- enable_wwan = FALSE;
- else {
- g_string_printf (nmc->return_text, _("Error: invalid 'wwan' parameter: '%s'."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
- }
+ if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
+ goto finish;
+
nmc->get_client (nmc); /* create NMClient */
- nm_client_wwan_set_enabled (nmc->client, enable_wwan);
+ nm_client_wwan_set_enabled (nmc->client, enable_flag);
}
}
#if WITH_WIMAX
else if (matches (*argv, "wimax") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_radio_wimax ();
+ goto finish;
+ }
if (next_arg (&argc, &argv) != 0) {
- if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
- goto opt_error;
/* no argument, show current WiMAX state */
- if (nmc->required_fields && strcasecmp (nmc->required_fields, "WIMAX")) {
- g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"),
- nmc->required_fields, NMC_FIELDS_NM_WIMAX);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
- }
- nmc->allowed_fields = nmc_fields_nm_status;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_WIMAX, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
- nmc->print_fields.header_name = _("WiMAX enabled");
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-
- if (nmc_is_nm_running (nmc, NULL)) {
- nmc->get_client (nmc); /* create NMClient */
- nmc->allowed_fields[9].value = nm_client_wimax_get_enabled (nmc->client) ? _("enabled") : _("disabled");
- } else
- nmc->allowed_fields[9].value = _("unknown");
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ nmc_switch_show (nmc, NMC_FIELDS_NM_WIMAX, _("WiMAX radio switch"));
} else {
- if (!strcmp (*argv, "on"))
- enable_wimax = TRUE;
- else if (!strcmp (*argv, "off"))
- enable_wimax = FALSE;
- else {
- g_string_printf (nmc->return_text, _("Error: invalid 'wimax' parameter: '%s'."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto end;
- }
+ if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
+ goto finish;
+
nmc->get_client (nmc); /* create NMClient */
- nm_client_wimax_set_enabled (nmc->client, enable_wimax);
+ nm_client_wimax_set_enabled (nmc->client, enable_flag);
}
}
#endif
- else if ( matches (*argv, "help") == 0
- || (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0)
- || (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) {
- usage ();
- }
else {
- usage ();
- g_string_printf (nmc->return_text, _("Error: 'nm' command '%s' is not valid."), *argv);
+ usage_radio ();
+ g_string_printf (nmc->return_text, _("Error: 'radio' command '%s' is not valid."), *argv);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
}
}
-end:
+finish:
quit ();
return nmc->return_value;
-
-opt_error:
- quit ();
- g_string_printf (nmc->return_text, _("Error: %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- g_error_free (error);
- return nmc->return_value;
}
+
diff --git a/cli/src/network-manager.h b/cli/src/network-manager.h
index 93cc1b077..bccba7cee 100644
--- a/cli/src/network-manager.h
+++ b/cli/src/network-manager.h
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 Red Hat, Inc.
+ * (C) Copyright 2010 - 2012 Red Hat, Inc.
*/
#ifndef NMC_NETWORK_MANAGER_H
@@ -22,6 +22,8 @@
#include "nmcli.h"
-NMCResultCode do_network_manager (NmCli *nmc, int argc, char **argv);
+NMCResultCode do_general (NmCli *nmc, int argc, char **argv);
+NMCResultCode do_networking (NmCli *nmc, int argc, char **argv);
+NMCResultCode do_radio (NmCli *nmc, int argc, char **argv);
#endif /* NMC_NETWORK_MANAGER_H */
diff --git a/cli/src/nmcli.c b/cli/src/nmcli.c
index 757ff92ba..66288c20a 100644
--- a/cli/src/nmcli.c
+++ b/cli/src/nmcli.c
@@ -16,7 +16,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
/* Generated configuration file */
@@ -26,6 +26,7 @@
#include <string.h>
#include <stdlib.h>
#include <signal.h>
+#include <pthread.h>
#include <locale.h>
#include <glib.h>
@@ -36,6 +37,7 @@
#include "nmcli.h"
#include "utils.h"
+#include "common.h"
#include "connections.h"
#include "devices.h"
#include "network-manager.h"
@@ -46,6 +48,10 @@
# define NMCLI_VERSION VERSION
#endif
+/* Global NmCli object */
+// FIXME: Currently, we pass NmCli over in most APIs, but we might refactor
+// that and use the global variable directly instead.
+NmCli nm_cli;
typedef struct {
NmCli *nmc;
@@ -55,6 +61,7 @@ typedef struct {
/* --- Global variables --- */
GMainLoop *loop = NULL;
+static sigset_t signal_set;
/* Get an error quark for use with GError */
@@ -82,11 +89,15 @@ usage (const char *prog_name)
" -f[ields] <field1,field2,...>|all|common specify fields to output\n"
" -e[scape] yes|no escape columns separators in values\n"
" -n[ocheck] don't check nmcli and NetworkManager versions\n"
+ " -a[sk] ask for missing parameters\n"
+ " -w[ait] <seconds> set timeout waiting for finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
- " nm NetworkManager's status\n"
+ " g[eneral] NetworkManager's general status and operations\n"
+ " n[etworking] overall networking control\n"
+ " r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"),
@@ -104,7 +115,9 @@ static const struct cmd {
const char *cmd;
NMCResultCode (*func) (NmCli *nmc, int argc, char **argv);
} nmcli_cmds[] = {
- { "nm", do_network_manager },
+ { "general", do_general },
+ { "networking", do_networking },
+ { "radio", do_radio },
{ "connection", do_connections },
{ "device", do_devices },
{ "help", do_help },
@@ -183,9 +196,9 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- if (!strcmp (argv[1], "tabular"))
+ if (matches (argv[1], "tabular") == 0)
nmc->multiline_output = FALSE;
- else if (!strcmp (argv[1], "multiline"))
+ else if (matches (argv[1], "multiline") == 0)
nmc->multiline_output = TRUE;
else {
g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt);
@@ -199,9 +212,9 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- if (!strcmp (argv[1], "yes"))
+ if (matches (argv[1], "yes") == 0)
nmc->escape_values = TRUE;
- else if (!strcmp (argv[1], "no"))
+ else if (matches (argv[1], "no") == 0)
nmc->escape_values = FALSE;
else {
g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt);
@@ -218,6 +231,23 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->required_fields = g_strdup (argv[1]);
} else if (matches (opt, "-nocheck") == 0) {
nmc->nocheck_ver = TRUE;
+ } else if (matches (opt, "-ask") == 0) {
+ nmc->ask = TRUE;
+ } else if (matches (opt, "-wait") == 0) {
+ unsigned long timeout;
+ next_arg (&argc, &argv);
+ if (argc <= 1) {
+ g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ return nmc->return_value;
+ }
+ if (!nmc_string_to_uint (argv[1], TRUE, 0, G_MAXINT, &timeout)) {
+ g_string_printf (nmc->return_text, _("Error: '%s' is not a valid timeout for '%s' option."),
+ argv[1], opt);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ return nmc->return_value;
+ }
+ nmc->timeout = (int) timeout;
} else if (matches (opt, "-version") == 0) {
printf (_("nmcli tool, version %s\n"), NMCLI_VERSION);
return NMC_RESULT_SUCCESS;
@@ -240,27 +270,68 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
return nmc->return_value;
}
-static void
-signal_handler (int signo)
-{
- if (signo == SIGINT || signo == SIGTERM) {
- g_message (_("Caught signal %d, shutting down..."), signo);
- g_main_loop_quit (loop);
+void *signal_handling_thread (void *arg);
+/*
+ * Thread function waiting for signals and processing them.
+ * Wait for signals in signal set. The semantics of sigwait() require that all
+ * threads (including the thread calling sigwait()) have the signal masked, for
+ * reliable operation. Otherwise, a signal that arrives while this thread is
+ * not blocked in sigwait() might be delivered to another thread.
+ */
+void *
+signal_handling_thread (void *arg) {
+ int signo;
+
+ while (1) {
+ sigwait (&signal_set, &signo);
+
+ switch (signo) {
+ case SIGINT:
+ case SIGQUIT:
+ case SIGTERM:
+ nmc_cleanup_readline ();
+ printf (_("\nError: nmcli terminated by signal %d."), signo);
+ exit (1);
+ break;
+ default:
+ break;
+ }
}
+ return NULL;
}
-static void
+/*
+ * Mask the signals we are interested in and create a signal handling thread.
+ * Because all threads inherit the signal mask from their creator, all threads
+ * in the process will have the signals masked. That's why setup_signals() has
+ * to be called before creating other threads.
+ */
+static gboolean
setup_signals (void)
{
- struct sigaction action;
- sigset_t mask;
-
- sigemptyset (&mask);
- action.sa_handler = signal_handler;
- action.sa_mask = mask;
- action.sa_flags = 0;
- sigaction (SIGTERM, &action, NULL);
- sigaction (SIGINT, &action, NULL);
+ pthread_t signal_thread_id;
+ int status;
+
+ sigemptyset (&signal_set);
+ sigaddset (&signal_set, SIGINT);
+ sigaddset (&signal_set, SIGQUIT);
+ sigaddset (&signal_set, SIGTERM);
+
+ /* Block all signals of interest. */
+ status = pthread_sigmask (SIG_BLOCK, &signal_set, NULL);
+ if (status != 0) {
+ fprintf (stderr, _("Failed to set signal mask: %d"), status);
+ return FALSE;
+ }
+
+ /* Create the signal handling thread. */
+ status = pthread_create (&signal_thread_id, NULL, signal_handling_thread, NULL);
+ if (status != 0) {
+ fprintf (stderr, _("Failed to create signal handling thread: %d"), status);
+ return FALSE;
+ }
+
+ return TRUE;
}
static NMClient *
@@ -287,7 +358,7 @@ nmc_init (NmCli *nmc)
nmc->return_value = NMC_RESULT_SUCCESS;
nmc->return_text = g_string_new (_("Success"));
- nmc->timeout = 10;
+ nmc->timeout = -1;
nmc->system_settings = NULL;
nmc->system_settings_running = FALSE;
@@ -300,9 +371,13 @@ nmc_init (NmCli *nmc)
nmc->mode_specified = FALSE;
nmc->escape_values = TRUE;
nmc->required_fields = NULL;
- nmc->allowed_fields = NULL;
+ nmc->output_data = g_ptr_array_new_full (20, g_free);
memset (&nmc->print_fields, '\0', sizeof (NmcPrintFields));
nmc->nocheck_ver = FALSE;
+ nmc->ask = FALSE;
+ nmc->editor_status_line = FALSE;
+ nmc->editor_save_confirmation = TRUE;
+ nmc->editor_prompt_color = NMC_TERM_COLOR_NORMAL;
}
static void
@@ -316,8 +391,8 @@ nmc_cleanup (NmCli *nmc)
g_slist_free (nmc->system_connections);
g_free (nmc->required_fields);
- if (nmc->print_fields.indices)
- g_array_free (nmc->print_fields.indices, TRUE);
+ nmc_empty_output_fields (nmc);
+ g_ptr_array_unref (nmc->output_data);
}
static gboolean
@@ -336,8 +411,11 @@ start (gpointer data)
int
main (int argc, char *argv[])
{
- NmCli nmc;
- ArgsInfo args_info = { &nmc, argc, argv };
+ ArgsInfo args_info = { &nm_cli, argc, argv };
+
+ /* Set up unix signal handling */
+ if (!setup_signals ())
+ exit (NMC_RESULT_ERROR_UNKNOWN);
/* Set locale to use environment variables */
setlocale (LC_ALL, "");
@@ -349,22 +427,23 @@ main (int argc, char *argv[])
textdomain (GETTEXT_PACKAGE);
#endif
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
- nmc_init (&nmc);
+ nmc_init (&nm_cli);
g_idle_add (start, &args_info);
loop = g_main_loop_new (NULL, FALSE); /* create main loop */
- setup_signals (); /* setup UNIX signals */
g_main_loop_run (loop); /* run main loop */
/* Print result descripting text */
- if (nmc.return_value != NMC_RESULT_SUCCESS) {
- fprintf (stderr, "%s\n", nmc.return_text->str);
+ if (nm_cli.return_value != NMC_RESULT_SUCCESS) {
+ fprintf (stderr, "%s\n", nm_cli.return_text->str);
}
g_main_loop_unref (loop);
- nmc_cleanup (&nmc);
+ nmc_cleanup (&nm_cli);
- return nmc.return_value;
+ return nm_cli.return_value;
}
diff --git a/cli/src/nmcli.h b/cli/src/nmcli.h
index 8928126b4..b300c6d39 100644
--- a/cli/src/nmcli.h
+++ b/cli/src/nmcli.h
@@ -55,7 +55,10 @@ typedef enum {
NMC_RESULT_ERROR_NM_NOT_RUNNING = 8,
/* nmcli and NetworkManager versions mismatch */
- NMC_RESULT_ERROR_VERSIONS_MISMATCH = 9
+ NMC_RESULT_ERROR_VERSIONS_MISMATCH = 9,
+
+ /* Connection/Device/AP not found */
+ NMC_RESULT_ERROR_NOT_FOUND = 10
} NMCResultCode;
typedef enum {
@@ -66,33 +69,40 @@ typedef enum {
/* === Output fields === */
/* Flags for NmcOutputField */
-#define NMC_OF_FLAG_ARRAY 0x00000001 /* 'value' is an NULL-terminated array rather then a single string */
-
-typedef struct {
- const char *name; /* Field's name */
- const char *name_l10n; /* Field's name for translation */
- int width; /* Width in screen columns */
- const void *value; /* Value of current field - char* or char** */
- guint32 flags; /* Flags */
+#define NMC_OF_FLAG_FIELD_NAMES 0x00000001 /* Print field names instead of values */
+#define NMC_OF_FLAG_SECTION_PREFIX 0x00000002 /* Use the first value as section prefix for the other field names - just in multiline */
+#define NMC_OF_FLAG_MAIN_HEADER_ADD 0x00000004 /* Print main header in addition to values/field names */
+#define NMC_OF_FLAG_MAIN_HEADER_ONLY 0x00000008 /* Print main header only */
+
+typedef struct _NmcOutputField {
+ const char *name; /* Field's name */
+ const char *name_l10n; /* Field's name for translation */
+ int width; /* Width in screen columns */
+ struct _NmcOutputField *group; /* Points to an array with available section field names if this is a section (group) field */
+ void *value; /* Value of current field - char* or char** (NULL-terminated array) */
+ gboolean value_is_array; /* Whether value is char** instead of char* */
+ gboolean free_value; /* Whether to free the value */
+ guint32 flags; /* Flags - whether and how to print values/field names/headers */
} NmcOutputField;
-/* Flags for NmcPrintFields */
-#define NMC_PF_FLAG_MULTILINE 0x00000001 /* Multiline output instead of tabular */
-#define NMC_PF_FLAG_TERSE 0x00000002 /* Terse output mode */
-#define NMC_PF_FLAG_PRETTY 0x00000004 /* Pretty output mode */
-#define NMC_PF_FLAG_MAIN_HEADER_ADD 0x00000008 /* Print main header in addition to values/field names */
-#define NMC_PF_FLAG_MAIN_HEADER_ONLY 0x00000010 /* Print main header only */
-#define NMC_PF_FLAG_FIELD_NAMES 0x00000020 /* Print field names instead of values */
-#define NMC_PF_FLAG_ESCAPE 0x00000040 /* Escape column separator and '\' */
-#define NMC_PF_FLAG_SECTION_PREFIX 0x00000080 /* Use the first value as section prefix for the other field names - just in multiline */
-
typedef struct {
GArray *indices; /* Array of field indices to the array of allowed fields */
char *header_name; /* Name of the output */
int indent; /* Indent by this number of spaces */
- guint32 flags; /* Various flags for controlling output: see NMC_PF_FLAG_* values */
} NmcPrintFields;
+typedef enum {
+ NMC_TERM_COLOR_NORMAL = 0,
+ NMC_TERM_COLOR_BLACK = 1,
+ NMC_TERM_COLOR_RED = 2,
+ NMC_TERM_COLOR_GREEN = 3,
+ NMC_TERM_COLOR_YELLOW = 4,
+ NMC_TERM_COLOR_BLUE = 5,
+ NMC_TERM_COLOR_MAGENTA = 6,
+ NMC_TERM_COLOR_CYAN = 7,
+ NMC_TERM_COLOR_WHITE = 8
+} NmcTermColor;
+
/* NmCli - main structure */
typedef struct _NmCli {
NMClient *client; /* Pointer to NMClient of libnm-glib */
@@ -114,9 +124,13 @@ typedef struct _NmCli {
gboolean mode_specified; /* Whether tabular/multiline mode was specified via '--mode' option */
gboolean escape_values; /* Whether to escape ':' and '\' in terse tabular mode */
char *required_fields; /* Required fields in output: '--fields' option */
- NmcOutputField *allowed_fields; /* Array of allowed fields for particular commands */
+ GPtrArray *output_data; /* GPtrArray of arrays of NmcOutputField structs - accumulates data for output */
NmcPrintFields print_fields; /* Structure with field indices to print */
gboolean nocheck_ver; /* Don't check nmcli and NM versions: option '--nocheck' */
+ gboolean ask; /* Ask for missing parameters: option '--ask' */
+ gboolean editor_status_line; /* Whether to display status line in connection editor */
+ gboolean editor_save_confirmation; /* Whether to ask for confirmation on saving connections with 'autoconnect=yes' */
+ NmcTermColor editor_prompt_color; /* Color of prompt in connection editor */
} NmCli;
/* Error quark for GError domain */
diff --git a/cli/src/settings.c b/cli/src/settings.c
index 1b3d0fd00..0fc708b35 100644
--- a/cli/src/settings.c
+++ b/cli/src/settings.c
@@ -14,43 +14,50 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
-#include "net/if_arp.h"
+#include <net/if_arp.h>
+#include <stdio.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <libnm-util/nm-utils.h>
#include "utils.h"
+#include "common.h"
#include "settings.h"
+/* Forward declarations */
+static char *wep_key_type_to_string (NMWepKeyType type);
/* Helper macro to define fields */
-#define SETTING_FIELD(setting, width) { setting, N_(setting), width, NULL, 0 }
+#define SETTING_FIELD(setting, width) { setting, N_(setting), width, NULL, FALSE, FALSE, 0 }
/* Available fields for NM_SETTING_CONNECTION_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_connection[] = {
- SETTING_FIELD ("name", 15), /* 0 */
- SETTING_FIELD (NM_SETTING_CONNECTION_ID, 25), /* 1 */
- SETTING_FIELD (NM_SETTING_CONNECTION_UUID, 38), /* 2 */
- SETTING_FIELD (NM_SETTING_CONNECTION_TYPE, 17), /* 3 */
- SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT, 13), /* 4 */
- SETTING_FIELD (NM_SETTING_CONNECTION_TIMESTAMP, 10), /* 5 */
- SETTING_FIELD (NM_SETTING_CONNECTION_READ_ONLY, 10), /* 6 */
- SETTING_FIELD (NM_SETTING_CONNECTION_PERMISSIONS, 30), /* 7 */
- SETTING_FIELD (NM_SETTING_CONNECTION_ZONE, 10), /* 8 */
- SETTING_FIELD (NM_SETTING_CONNECTION_MASTER, 20), /* 9 */
- SETTING_FIELD (NM_SETTING_CONNECTION_SLAVE_TYPE, 20), /* 10 */
- SETTING_FIELD (NM_SETTING_CONNECTION_SECONDARIES, 40), /* 11 */
- {NULL, NULL, 0, NULL, 0}
+NmcOutputField nmc_fields_setting_connection[] = {
+ SETTING_FIELD ("name", 15), /* 0 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_ID, 25), /* 1 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_UUID, 38), /* 2 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_INTERFACE_NAME, 20), /* 3 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_TYPE, 17), /* 4 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT, 13), /* 5 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_TIMESTAMP, 10), /* 6 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_READ_ONLY, 10), /* 7 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_PERMISSIONS, 30), /* 8 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_ZONE, 10), /* 9 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_MASTER, 20), /* 10 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_SLAVE_TYPE, 20), /* 11 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_SECONDARIES, 40), /* 12 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, 30), /* 13 */
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_CONNECTION_ALL "name"","\
NM_SETTING_CONNECTION_ID","\
NM_SETTING_CONNECTION_UUID","\
+ NM_SETTING_CONNECTION_INTERFACE_NAME","\
NM_SETTING_CONNECTION_TYPE","\
NM_SETTING_CONNECTION_AUTOCONNECT","\
NM_SETTING_CONNECTION_TIMESTAMP","\
@@ -59,11 +66,12 @@ static NmcOutputField nmc_fields_setting_connection[] = {
NM_SETTING_CONNECTION_ZONE","\
NM_SETTING_CONNECTION_MASTER","\
NM_SETTING_CONNECTION_SLAVE_TYPE","\
- NM_SETTING_CONNECTION_SECONDARIES
+ NM_SETTING_CONNECTION_SECONDARIES","\
+ NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT
#define NMC_FIELDS_SETTING_CONNECTION_COMMON NMC_FIELDS_SETTING_CONNECTION_ALL
/* Available fields for NM_SETTING_WIRED_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_wired[] = {
+NmcOutputField nmc_fields_setting_wired[] = {
SETTING_FIELD ("name", 17), /* 0 */
SETTING_FIELD (NM_SETTING_WIRED_PORT, 8), /* 1 */
SETTING_FIELD (NM_SETTING_WIRED_SPEED, 10), /* 2 */
@@ -76,7 +84,7 @@ static NmcOutputField nmc_fields_setting_wired[] = {
SETTING_FIELD (NM_SETTING_WIRED_S390_SUBCHANNELS, 20), /* 9 */
SETTING_FIELD (NM_SETTING_WIRED_S390_NETTYPE, 15), /* 10 */
SETTING_FIELD (NM_SETTING_WIRED_S390_OPTIONS, 20), /* 11 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_WIRED_ALL "name"","\
NM_SETTING_WIRED_PORT","\
@@ -93,7 +101,7 @@ static NmcOutputField nmc_fields_setting_wired[] = {
#define NMC_FIELDS_SETTING_WIRED_COMMON NMC_FIELDS_SETTING_WIRED_ALL
/* Available fields for NM_SETTING_802_1X_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_8021X[] = {
+NmcOutputField nmc_fields_setting_8021X[] = {
SETTING_FIELD ("name", 10), /* 0 */
SETTING_FIELD (NM_SETTING_802_1X_EAP, 10), /* 1 */
SETTING_FIELD (NM_SETTING_802_1X_IDENTITY, 15), /* 2 */
@@ -127,7 +135,7 @@ static NmcOutputField nmc_fields_setting_8021X[] = {
SETTING_FIELD (NM_SETTING_802_1X_PIN, 8), /* 30 */
SETTING_FIELD (NM_SETTING_802_1X_PIN_FLAGS, 20), /* 31 */
SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS, 17), /* 32 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_802_1X_ALL "name"","\
NM_SETTING_802_1X_EAP","\
@@ -165,7 +173,7 @@ static NmcOutputField nmc_fields_setting_8021X[] = {
#define NMC_FIELDS_SETTING_802_1X_COMMON NMC_FIELDS_SETTING_802_1X_ALL
/* Available fields for NM_SETTING_WIRELESS_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_wireless[] = {
+NmcOutputField nmc_fields_setting_wireless[] = {
SETTING_FIELD ("name", 17), /* 0 */
SETTING_FIELD (NM_SETTING_WIRELESS_SSID, 34), /* 1 */
SETTING_FIELD (NM_SETTING_WIRELESS_MODE, 15), /* 2 */
@@ -179,9 +187,8 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, 39), /* 10 */
SETTING_FIELD (NM_SETTING_WIRELESS_MTU, 6), /* 11 */
SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS, 35), /* 12 */
- SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 25), /* 13 */
- SETTING_FIELD (NM_SETTING_WIRELESS_HIDDEN, 10), /* 14 */
- {NULL, NULL, 0, NULL, 0}
+ SETTING_FIELD (NM_SETTING_WIRELESS_HIDDEN, 10), /* 13 */
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_WIRELESS_ALL "name"","\
NM_SETTING_WIRELESS_SSID","\
@@ -196,12 +203,11 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST","\
NM_SETTING_WIRELESS_MTU","\
NM_SETTING_WIRELESS_SEEN_BSSIDS","\
- NM_SETTING_WIRELESS_SEC","\
NM_SETTING_WIRELESS_HIDDEN
#define NMC_FIELDS_SETTING_WIRELESS_COMMON NMC_FIELDS_SETTING_WIRELESS_ALL
/* Available fields for NM_SETTING_WIRELESS_SECURITY_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_wireless_security[] = {
+NmcOutputField nmc_fields_setting_wireless_security[] = {
SETTING_FIELD ("name", 25), /* 0 */
SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, 10), /* 1 */
SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 15), /* 2 */
@@ -220,7 +226,7 @@ static NmcOutputField nmc_fields_setting_wireless_security[] = {
SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, 20), /* 15 */
SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, 15), /* 16 */
SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, 20), /* 17 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_WIRELESS_SECURITY_ALL "name"","\
NM_SETTING_WIRELESS_SECURITY_KEY_MGMT","\
@@ -243,7 +249,7 @@ static NmcOutputField nmc_fields_setting_wireless_security[] = {
#define NMC_FIELDS_SETTING_WIRELESS_SECURITY_COMMON NMC_FIELDS_SETTING_WIRELESS_SECURITY_ALL
/* Available fields for NM_SETTING_IP4_CONFIG_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_ip4_config[] = {
+NmcOutputField nmc_fields_setting_ip4_config[] = {
SETTING_FIELD ("name", 8), /* 0 */
SETTING_FIELD (NM_SETTING_IP4_CONFIG_METHOD, 10), /* 1 */
SETTING_FIELD (NM_SETTING_IP4_CONFIG_DNS, 20), /* 2 */
@@ -257,7 +263,7 @@ static NmcOutputField nmc_fields_setting_ip4_config[] = {
SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, 14), /* 10 */
SETTING_FIELD (NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, 15), /* 11 */
SETTING_FIELD (NM_SETTING_IP4_CONFIG_MAY_FAIL, 12), /* 12 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_IP4_CONFIG_ALL "name"","\
NM_SETTING_IP4_CONFIG_METHOD","\
@@ -275,7 +281,7 @@ static NmcOutputField nmc_fields_setting_ip4_config[] = {
#define NMC_FIELDS_SETTING_IP4_CONFIG_COMMON NMC_FIELDS_SETTING_IP4_CONFIG_ALL
/* Available fields for NM_SETTING_IP6_CONFIG_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_ip6_config[] = {
+NmcOutputField nmc_fields_setting_ip6_config[] = {
SETTING_FIELD ("name", 8), /* 0 */
SETTING_FIELD (NM_SETTING_IP6_CONFIG_METHOD, 10), /* 1 */
SETTING_FIELD (NM_SETTING_IP6_CONFIG_DNS, 20), /* 2 */
@@ -288,7 +294,7 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = {
SETTING_FIELD (NM_SETTING_IP6_CONFIG_MAY_FAIL, 12), /* 9 */
SETTING_FIELD (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, 15), /* 10 */
SETTING_FIELD (NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME, 14), /* 11 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_IP6_CONFIG_ALL "name"","\
NM_SETTING_IP6_CONFIG_METHOD","\
@@ -305,14 +311,14 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = {
#define NMC_FIELDS_SETTING_IP6_CONFIG_COMMON NMC_FIELDS_SETTING_IP4_CONFIG_ALL
/* Available fields for NM_SETTING_SERIAL_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_serial[] = {
+NmcOutputField nmc_fields_setting_serial[] = {
SETTING_FIELD ("name", 10), /* 0 */
SETTING_FIELD (NM_SETTING_SERIAL_BAUD, 10), /* 1 */
SETTING_FIELD (NM_SETTING_SERIAL_BITS, 10), /* 2 */
SETTING_FIELD (NM_SETTING_SERIAL_PARITY, 10), /* 3 */
SETTING_FIELD (NM_SETTING_SERIAL_STOPBITS, 10), /* 4 */
SETTING_FIELD (NM_SETTING_SERIAL_SEND_DELAY, 12), /* 5 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_SERIAL_ALL "name"","\
NM_SETTING_SERIAL_BAUD","\
@@ -323,7 +329,7 @@ static NmcOutputField nmc_fields_setting_serial[] = {
#define NMC_FIELDS_SETTING_SERIAL_COMMON NMC_FIELDS_SETTING_SERIAL_ALL
/* Available fields for NM_SETTING_PPP_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_ppp[] = {
+NmcOutputField nmc_fields_setting_ppp[] = {
SETTING_FIELD ("name", 10), /* 0 */
SETTING_FIELD (NM_SETTING_PPP_NOAUTH, 10), /* 1 */
SETTING_FIELD (NM_SETTING_PPP_REFUSE_EAP, 10), /* 2 */
@@ -343,7 +349,7 @@ static NmcOutputField nmc_fields_setting_ppp[] = {
SETTING_FIELD (NM_SETTING_PPP_MTU, 10), /* 16 */
SETTING_FIELD (NM_SETTING_PPP_LCP_ECHO_FAILURE, 17), /* 17 */
SETTING_FIELD (NM_SETTING_PPP_LCP_ECHO_INTERVAL, 18), /* 18 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_PPP_ALL "name"","\
NM_SETTING_PPP_NOAUTH","\
@@ -367,13 +373,13 @@ static NmcOutputField nmc_fields_setting_ppp[] = {
#define NMC_FIELDS_SETTING_PPP_COMMON NMC_FIELDS_SETTING_PPP_ALL
/* Available fields for NM_SETTING_PPPOE_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_pppoe[] = {
+NmcOutputField nmc_fields_setting_pppoe[] = {
SETTING_FIELD ("name", 10), /* 0 */
SETTING_FIELD (NM_SETTING_PPPOE_SERVICE, 12), /* 1 */
SETTING_FIELD (NM_SETTING_PPPOE_USERNAME, 15), /* 2 */
SETTING_FIELD (NM_SETTING_PPPOE_PASSWORD, 15), /* 3 */
SETTING_FIELD (NM_SETTING_PPPOE_PASSWORD_FLAGS, 20), /* 4 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_PPPOE_ALL "name"","\
NM_SETTING_PPPOE_SERVICE","\
@@ -383,7 +389,7 @@ static NmcOutputField nmc_fields_setting_pppoe[] = {
#define NMC_FIELDS_SETTING_PPPOE_COMMON NMC_FIELDS_SETTING_PPPOE_ALL
/* Available fields for NM_SETTING_ADSL_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_adsl[] = {
+NmcOutputField nmc_fields_setting_adsl[] = {
SETTING_FIELD ("name", 10), /* 0 */
SETTING_FIELD (NM_SETTING_ADSL_USERNAME, 15), /* 1 */
SETTING_FIELD (NM_SETTING_ADSL_PASSWORD, 15), /* 2 */
@@ -392,7 +398,7 @@ static NmcOutputField nmc_fields_setting_adsl[] = {
SETTING_FIELD (NM_SETTING_ADSL_ENCAPSULATION, 10), /* 5 */
SETTING_FIELD (NM_SETTING_ADSL_VPI, 10), /* 6 */
SETTING_FIELD (NM_SETTING_ADSL_VCI, 10), /* 7 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_ADSL_ALL "name"","\
NM_SETTING_ADSL_USERNAME","\
@@ -405,7 +411,7 @@ static NmcOutputField nmc_fields_setting_adsl[] = {
#define NMC_FIELDS_SETTING_ADSL_COMMON NMC_FIELDS_SETTING_ADSL_ALL
/* Available fields for NM_SETTING_GSM_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_gsm[] = {
+NmcOutputField nmc_fields_setting_gsm[] = {
SETTING_FIELD ("name", 10), /* 0 */
SETTING_FIELD (NM_SETTING_GSM_NUMBER, 10), /* 1 */
SETTING_FIELD (NM_SETTING_GSM_USERNAME, 15), /* 2 */
@@ -418,7 +424,7 @@ static NmcOutputField nmc_fields_setting_gsm[] = {
SETTING_FIELD (NM_SETTING_GSM_PIN, 10), /* 9 */
SETTING_FIELD (NM_SETTING_GSM_PIN_FLAGS, 20), /* 10 */
SETTING_FIELD (NM_SETTING_GSM_HOME_ONLY, 10), /* 11 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_GSM_ALL "name"","\
NM_SETTING_GSM_NUMBER","\
@@ -435,13 +441,13 @@ static NmcOutputField nmc_fields_setting_gsm[] = {
#define NMC_FIELDS_SETTING_GSM_COMMON NMC_FIELDS_SETTING_GSM_ALL
/* Available fields for NM_SETTING_CDMA_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_cdma[] = {
+NmcOutputField nmc_fields_setting_cdma[] = {
SETTING_FIELD ("name", 10), /* 0 */
SETTING_FIELD (NM_SETTING_CDMA_NUMBER, 15), /* 1 */
SETTING_FIELD (NM_SETTING_CDMA_USERNAME, 15), /* 2 */
SETTING_FIELD (NM_SETTING_CDMA_PASSWORD, 15), /* 3 */
SETTING_FIELD (NM_SETTING_CDMA_PASSWORD_FLAGS, 20), /* 4 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_CDMA_ALL "name"","\
NM_SETTING_CDMA_NUMBER","\
@@ -451,11 +457,11 @@ static NmcOutputField nmc_fields_setting_cdma[] = {
#define NMC_FIELDS_SETTING_CDMA_COMMON NMC_FIELDS_SETTING_CDMA_ALL
/* Available fields for NM_SETTING_BLUETOOTH_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_bluetooth[] = {
+NmcOutputField nmc_fields_setting_bluetooth[] = {
SETTING_FIELD ("name", 11), /* 0 */
SETTING_FIELD (NM_SETTING_BLUETOOTH_BDADDR, 19), /* 1 */
SETTING_FIELD (NM_SETTING_BLUETOOTH_TYPE, 10), /* 2 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_BLUETOOTH_ALL "name"","\
NM_SETTING_BLUETOOTH_BDADDR","\
@@ -463,12 +469,12 @@ static NmcOutputField nmc_fields_setting_bluetooth[] = {
#define NMC_FIELDS_SETTING_BLUETOOTH_COMMON NMC_FIELDS_SETTING_BLUETOOTH_ALL
/* Available fields for NM_SETTING_OLPC_MESH_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_olpc_mesh[] = {
+NmcOutputField nmc_fields_setting_olpc_mesh[] = {
SETTING_FIELD ("name", 18), /* 0 */
SETTING_FIELD (NM_SETTING_OLPC_MESH_SSID, 34), /* 1 */
SETTING_FIELD (NM_SETTING_OLPC_MESH_CHANNEL, 12), /* 2 */
SETTING_FIELD (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, 17), /* 3 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_OLPC_MESH_ALL "name"","\
NM_SETTING_OLPC_MESH_SSID","\
@@ -477,13 +483,13 @@ static NmcOutputField nmc_fields_setting_olpc_mesh[] = {
#define NMC_FIELDS_SETTING_OLPC_MESH_COMMON NMC_FIELDS_SETTING_OLPC_MESH_ALL
/* Available fields for NM_SETTING_VPN_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_vpn[] = {
+NmcOutputField nmc_fields_setting_vpn[] = {
SETTING_FIELD ("name", 6), /* 0 */
SETTING_FIELD (NM_SETTING_VPN_SERVICE_TYPE, 40), /* 1 */
SETTING_FIELD (NM_SETTING_VPN_USER_NAME, 12), /* 2 */
SETTING_FIELD (NM_SETTING_VPN_DATA, 30), /* 3 */
SETTING_FIELD (NM_SETTING_VPN_SECRETS, 15), /* 4 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_VPN_ALL "name"","\
NM_SETTING_VPN_SERVICE_TYPE","\
@@ -493,11 +499,11 @@ static NmcOutputField nmc_fields_setting_vpn[] = {
#define NMC_FIELDS_SETTING_VPN_COMMON NMC_FIELDS_SETTING_VPN_ALL
/* Available fields for NM_SETTING_WIMAX_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_wimax[] = {
+NmcOutputField nmc_fields_setting_wimax[] = {
SETTING_FIELD ("name", 6), /* 0 */
SETTING_FIELD (NM_SETTING_WIMAX_MAC_ADDRESS, 19), /* 1 */
SETTING_FIELD (NM_SETTING_WIMAX_NETWORK_NAME, 40), /* 2 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_WIMAX_ALL "name"","\
NM_SETTING_WIMAX_MAC_ADDRESS","\
@@ -505,25 +511,29 @@ static NmcOutputField nmc_fields_setting_wimax[] = {
#define NMC_FIELDS_SETTING_WIMAX_COMMON NMC_FIELDS_SETTING_WIMAX_ALL
/* Available fields for NM_SETTING_INFINIBAND_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_infiniband[] = {
+NmcOutputField nmc_fields_setting_infiniband[] = {
SETTING_FIELD ("name", 12), /* 0 */
SETTING_FIELD (NM_SETTING_INFINIBAND_MAC_ADDRESS, 61), /* 1 */
SETTING_FIELD (NM_SETTING_INFINIBAND_MTU, 6), /* 2 */
SETTING_FIELD (NM_SETTING_INFINIBAND_TRANSPORT_MODE, 12), /* 3 */
- {NULL, NULL, 0, NULL, 0}
+ SETTING_FIELD (NM_SETTING_INFINIBAND_P_KEY, 6), /* 4 */
+ SETTING_FIELD (NM_SETTING_INFINIBAND_PARENT, 16), /* 5 */
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_INFINIBAND_ALL "name"","\
NM_SETTING_INFINIBAND_MAC_ADDRESS","\
- NM_SETTING_INFINIBAND_MTU","\
- NM_SETTING_INFINIBAND_TRANSPORT_MODE
-#define NMC_FIELDS_SETTING_INFINIBAND_COMMON NMC_FIELDS_SETTING_INFINIBAND_ALL
+ NM_SETTING_INFINIBAND_MTU"," \
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE"," \
+ NM_SETTING_INFINIBAND_P_KEY"," \
+ NM_SETTING_INFINIBAND_PARENT
+#define NMC_FIELDS_SETTING_INFINIBAND_COMMON NMC_FIELDS_SETTING_INFINIBAND_ALL \
/* Available fields for NM_SETTING_BOND_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_bond[] = {
+NmcOutputField nmc_fields_setting_bond[] = {
SETTING_FIELD ("name", 8), /* 0 */
SETTING_FIELD (NM_SETTING_BOND_INTERFACE_NAME, 15), /* 1 */
SETTING_FIELD (NM_SETTING_BOND_OPTIONS, 30), /* 2 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_BOND_ALL "name"","\
NM_SETTING_BOND_INTERFACE_NAME","\
@@ -531,7 +541,7 @@ static NmcOutputField nmc_fields_setting_bond[] = {
#define NMC_FIELDS_SETTING_BOND_COMMON NMC_FIELDS_SETTING_BOND_ALL
/* Available fields for NM_SETTING_VLAN_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_vlan[] = {
+NmcOutputField nmc_fields_setting_vlan[] = {
SETTING_FIELD ("name", 6), /* 0 */
SETTING_FIELD (NM_SETTING_VLAN_INTERFACE_NAME, 15), /* 1 */
SETTING_FIELD (NM_SETTING_VLAN_PARENT, 8), /* 2 */
@@ -539,7 +549,7 @@ static NmcOutputField nmc_fields_setting_vlan[] = {
SETTING_FIELD (NM_SETTING_VLAN_FLAGS, 45), /* 4 */
SETTING_FIELD (NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, 22), /* 5 */
SETTING_FIELD (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, 22), /* 6 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_VLAN_ALL "name"","\
NM_SETTING_VLAN_INTERFACE_NAME","\
@@ -551,19 +561,21 @@ static NmcOutputField nmc_fields_setting_vlan[] = {
#define NMC_FIELDS_SETTING_VLAN_COMMON NMC_FIELDS_SETTING_VLAN_ALL
/* Available fields for NM_SETTING_BRIDGE_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_bridge[] = {
+NmcOutputField nmc_fields_setting_bridge[] = {
SETTING_FIELD ("name", 8), /* 0 */
SETTING_FIELD (NM_SETTING_BRIDGE_INTERFACE_NAME, 15), /* 1 */
- SETTING_FIELD (NM_SETTING_BRIDGE_STP, 5), /* 2 */
- SETTING_FIELD (NM_SETTING_BRIDGE_PRIORITY, 6), /* 3 */
- SETTING_FIELD (NM_SETTING_BRIDGE_FORWARD_DELAY, 6), /* 4 */
- SETTING_FIELD (NM_SETTING_BRIDGE_HELLO_TIME, 6), /* 5 */
- SETTING_FIELD (NM_SETTING_BRIDGE_MAX_AGE, 6), /* 6 */
- SETTING_FIELD (NM_SETTING_BRIDGE_AGEING_TIME, 6), /* 7 */
- {NULL, NULL, 0, NULL, 0}
+ SETTING_FIELD (NM_SETTING_BRIDGE_MAC_ADDRESS, 19), /* 2 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_STP, 5), /* 3 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_PRIORITY, 6), /* 4 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_FORWARD_DELAY, 6), /* 5 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_HELLO_TIME, 6), /* 6 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_MAX_AGE, 6), /* 7 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_AGEING_TIME, 6), /* 8 */
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_BRIDGE_ALL "name"","\
NM_SETTING_BRIDGE_INTERFACE_NAME","\
+ NM_SETTING_BRIDGE_MAC_ADDRESS","\
NM_SETTING_BRIDGE_STP","\
NM_SETTING_BRIDGE_PRIORITY","\
NM_SETTING_BRIDGE_FORWARD_DELAY","\
@@ -573,12 +585,12 @@ static NmcOutputField nmc_fields_setting_bridge[] = {
#define NMC_FIELDS_SETTING_BRIDGE_COMMON NMC_FIELDS_SETTING_BRIDGE_ALL
/* Available fields for NM_SETTING_BRIDGE_PORT_SETTING_NAME */
-static NmcOutputField nmc_fields_setting_bridge_port[] = {
+NmcOutputField nmc_fields_setting_bridge_port[] = {
SETTING_FIELD ("name", 8), /* 0 */
SETTING_FIELD (NM_SETTING_BRIDGE_PORT_PRIORITY, 10), /* 1 */
SETTING_FIELD (NM_SETTING_BRIDGE_PORT_PATH_COST, 12), /* 2 */
SETTING_FIELD (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, 15), /* 3 */
- {NULL, NULL, 0, NULL, 0}
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_BRIDGE_PORT_ALL "name"","\
NM_SETTING_BRIDGE_PORT_PRIORITY","\
@@ -586,15 +598,76 @@ static NmcOutputField nmc_fields_setting_bridge_port[] = {
NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE
#define NMC_FIELDS_SETTING_BRIDGE_PORT_COMMON NMC_FIELDS_SETTING_BRIDGE_PORT_ALL
+/* Available fields for NM_SETTING_TEAM_SETTING_NAME */
+NmcOutputField nmc_fields_setting_team[] = {
+ SETTING_FIELD ("name", 8), /* 0 */
+ SETTING_FIELD (NM_SETTING_TEAM_INTERFACE_NAME, 15), /* 1 */
+ SETTING_FIELD (NM_SETTING_TEAM_CONFIG, 30), /* 2 */
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
+};
+#define NMC_FIELDS_SETTING_TEAM_ALL "name"","\
+ NM_SETTING_TEAM_INTERFACE_NAME","\
+ NM_SETTING_TEAM_CONFIG
+#define NMC_FIELDS_SETTING_TEAM_COMMON NMC_FIELDS_SETTING_TEAM_ALL
+
+/* Available fields for NM_SETTING_TEAM_PORT_SETTING_NAME */
+NmcOutputField nmc_fields_setting_team_port[] = {
+ SETTING_FIELD ("name", 8), /* 0 */
+ SETTING_FIELD (NM_SETTING_TEAM_PORT_CONFIG, 30), /* 1 */
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
+};
+#define NMC_FIELDS_SETTING_TEAM_PORT_ALL "name"","\
+ NM_SETTING_TEAM_PORT_CONFIG
+#define NMC_FIELDS_SETTING_TEAM_PORT_COMMON NMC_FIELDS_SETTING_TEAM_PORT_ALL
+
+/* Available fields for NM_SETTING_DCB_SETTING_NAME */
+NmcOutputField nmc_fields_setting_dcb[] = {
+ SETTING_FIELD ("name", 8), /* 0 */
+ SETTING_FIELD (NM_SETTING_DCB_APP_FCOE_FLAGS, 5), /* 1 */
+ SETTING_FIELD (NM_SETTING_DCB_APP_FCOE_PRIORITY, 5), /* 2 */
+ SETTING_FIELD (NM_SETTING_DCB_APP_FCOE_MODE, 8), /* 3 */
+ SETTING_FIELD (NM_SETTING_DCB_APP_ISCSI_FLAGS, 5), /* 4 */
+ SETTING_FIELD (NM_SETTING_DCB_APP_ISCSI_PRIORITY, 5), /* 5 */
+ SETTING_FIELD (NM_SETTING_DCB_APP_FIP_FLAGS, 5), /* 6 */
+ SETTING_FIELD (NM_SETTING_DCB_APP_FIP_PRIORITY, 5), /* 7 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, 5), /* 8 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL, 10), /* 9 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, 5), /* 10 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_GROUP_ID, 10), /* 11 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH, 30), /* 12 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_BANDWIDTH, 30), /* 13 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH, 10), /* 14 */
+ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS, 30), /* 15 */
+ {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
+};
+#define NMC_FIELDS_SETTING_DCB_ALL "name"","\
+ NM_SETTING_DCB_APP_FCOE_FLAGS","\
+ NM_SETTING_DCB_APP_FCOE_PRIORITY","\
+ NM_SETTING_DCB_APP_FCOE_MODE","\
+ NM_SETTING_DCB_APP_ISCSI_FLAGS","\
+ NM_SETTING_DCB_APP_ISCSI_PRIORITY","\
+ NM_SETTING_DCB_APP_FIP_FLAGS","\
+ NM_SETTING_DCB_APP_FIP_PRIORITY","\
+ NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS","\
+ NM_SETTING_DCB_PRIORITY_FLOW_CONTROL","\
+ NM_SETTING_DCB_PRIORITY_GROUP_FLAGS","\
+ NM_SETTING_DCB_PRIORITY_GROUP_ID","\
+ NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH","\
+ NM_SETTING_DCB_PRIORITY_BANDWIDTH","\
+ NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH","\
+ NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS
+#define NMC_FIELDS_SETTING_DCB_COMMON NMC_FIELDS_SETTING_DCB_ALL
+
+/*----------------------------------------------------------------------------*/
static char *
wep_key_type_to_string (NMWepKeyType type)
{
switch (type) {
case NM_WEP_KEY_TYPE_KEY:
- return g_strdup_printf (_("%d (hex-ascii-key)"), type);
+ return g_strdup_printf (_("%d (key)"), type);
case NM_WEP_KEY_TYPE_PASSPHRASE:
- return g_strdup_printf (_("%d (104/128-bit passphrase)"), type);
+ return g_strdup_printf (_("%d (passphrase)"), type);
case NM_WEP_KEY_TYPE_UNKNOWN:
default:
return g_strdup_printf (_("%d (unknown)"), type);
@@ -658,7 +731,7 @@ allowed_bands_to_string (guint32 bands)
g_string_append (band_str, _("WCDMA 3GPP UMTS 2600 MHz, "));
if (band_str->str[band_str->len-1] == '(')
- g_string_assign (band_str, _("unknown"));
+ g_string_append (band_str, _("unknown"));
else
g_string_truncate (band_str, band_str->len-2); /* chop off trailing ', ' */
@@ -686,7 +759,7 @@ vlan_flags_to_string (guint32 flags)
g_string_append (flag_str, _("LOOSE_BINDING, "));
if (flag_str->str[flag_str->len-1] == '(')
- g_string_assign (flag_str, _("unknown"));
+ g_string_append (flag_str, _("unknown"));
else
g_string_truncate (flag_str, flag_str->len-2); /* chop off trailing ', ' */
@@ -748,7 +821,7 @@ secret_flags_to_string (guint32 flags)
g_string_append (flag_str, _("not required, "));
if (flag_str->str[flag_str->len-1] == '(')
- g_string_assign (flag_str, _("unknown"));
+ g_string_append (flag_str, _("unknown"));
else
g_string_truncate (flag_str, flag_str->len-2); /* chop off trailing ', ' */
@@ -757,1335 +830,6504 @@ secret_flags_to_string (guint32 flags)
return g_string_free (flag_str, FALSE);
}
-/*----------------------------------------------------------------------------*/
-
-gboolean
-setting_details (NMSetting *setting, NmCli *nmc)
+static void
+vpn_data_item (const char *key, const char *value, gpointer user_data)
{
- GType setting_type;
+ GString *ret_str = (GString *) user_data;
- g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ if (ret_str->len != 0)
+ g_string_append (ret_str, ", ");
- setting_type = G_OBJECT_TYPE (setting);
-
- if (setting_type == NM_TYPE_SETTING_CONNECTION)
- return setting_connection_details (NM_SETTING_CONNECTION (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_WIRED)
- return setting_wired_details (NM_SETTING_WIRED (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_802_1X)
- return setting_802_1X_details (NM_SETTING_802_1X (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_WIRELESS)
- return setting_wireless_details (NM_SETTING_WIRELESS (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_WIRELESS_SECURITY)
- return setting_wireless_security_details (NM_SETTING_WIRELESS_SECURITY (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_IP4_CONFIG)
- return setting_ip4_config_details (NM_SETTING_IP4_CONFIG (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_IP6_CONFIG)
- return setting_ip6_config_details (NM_SETTING_IP6_CONFIG (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_SERIAL)
- return setting_serial_details (NM_SETTING_SERIAL (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_PPP)
- return setting_ppp_details (NM_SETTING_PPP (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_PPPOE)
- return setting_pppoe_details (NM_SETTING_PPPOE (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_GSM)
- return setting_gsm_details (NM_SETTING_GSM (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_CDMA)
- return setting_cdma_details (NM_SETTING_CDMA (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_BLUETOOTH)
- return setting_bluetooth_details (NM_SETTING_BLUETOOTH (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_OLPC_MESH)
- return setting_olpc_mesh_details (NM_SETTING_OLPC_MESH (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_VPN)
- return setting_vpn_details (NM_SETTING_VPN (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_WIMAX)
- return setting_wimax_details (NM_SETTING_WIMAX (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_INFINIBAND)
- return setting_infiniband_details (NM_SETTING_INFINIBAND (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_BOND)
- return setting_bond_details (NM_SETTING_BOND (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_VLAN)
- return setting_vlan_details (NM_SETTING_VLAN (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_ADSL)
- return setting_adsl_details (NM_SETTING_ADSL (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_BRIDGE)
- return setting_bridge_details (NM_SETTING_BRIDGE (setting), nmc);
- else if (setting_type == NM_TYPE_SETTING_BRIDGE_PORT)
- return setting_bridge_port_details (NM_SETTING_BRIDGE_PORT (setting), nmc);
- else
- /* should not be reached */
- return FALSE;
+ g_string_append_printf (ret_str, "%s = %s", key, value);
}
-gboolean
-setting_connection_details (NMSettingConnection *s_con, NmCli *nmc)
-{
- guint64 timestamp;
- char *timestamp_str;
- const char *perm_item;
- const char *perm_type;
- GString *perm = NULL;
- GString *secondaries = NULL;
- int i;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
-
- g_return_val_if_fail (NM_IS_SETTING_CONNECTION (s_con), FALSE);
- nmc->allowed_fields = nmc_fields_setting_connection;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_CONNECTION_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
-
- timestamp = nm_setting_connection_get_timestamp (s_con);
- timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
-
- /* get permissions */
- perm = g_string_new (NULL);
- for (i = 0; i < nm_setting_connection_get_num_permissions (s_con); i++) {
- nm_setting_connection_get_permission (s_con, i, &perm_type, &perm_item, NULL);
- g_string_append_printf (perm, "%s:%s,", perm_type, perm_item);
+/* === property get functions === */
+#define DEFINE_GETTER(func_name, property_name) \
+ static char * \
+ func_name (NMSetting *setting) \
+ { \
+ char *s; \
+ GValue val = G_VALUE_INIT; \
+ g_value_init (&val, G_TYPE_STRING); \
+ g_object_get_property (G_OBJECT (setting), property_name, &val); \
+ /* Getters return allocated values, and returning the string \
+ * the GValue copied from the object without unsetting the \
+ * GValue fulfills that requirement. */ \
+ s = g_value_dup_string (&val); \
+ g_value_unset (&val); \
+ return s; \
}
- if (perm->len > 0)
- g_string_truncate (perm, perm->len-1); /* remove trailing , */
- /* get secondaries */
- secondaries = g_string_new (NULL);
- for (i = 0; i < nm_setting_connection_get_num_secondaries (s_con); i++) {
- const char *sec_uuid = nm_setting_connection_get_secondary (s_con, i);
- g_string_append_printf (secondaries, "%s,", sec_uuid);
+#define DEFINE_SECRET_FLAGS_GETTER(func_name, property_name) \
+ static char * \
+ func_name (NMSetting *setting) \
+ { \
+ guint v; \
+ GValue val = G_VALUE_INIT; \
+ g_value_init (&val, G_TYPE_UINT); \
+ g_object_get_property (G_OBJECT (setting), property_name, &val); \
+ v = g_value_get_uint (&val); \
+ g_value_unset (&val); \
+ return secret_flags_to_string (v); \
}
- if (secondaries->len > 0)
- g_string_truncate (secondaries, secondaries->len-1); /* remove trailing , */
-
- nmc->allowed_fields[0].value = NM_SETTING_CONNECTION_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_connection_get_id (s_con);
- nmc->allowed_fields[2].value = nm_setting_connection_get_uuid (s_con);
- nmc->allowed_fields[3].value = nm_setting_connection_get_connection_type (s_con);
- nmc->allowed_fields[4].value = nm_setting_connection_get_autoconnect (s_con) ? _("yes") : _("no");
- nmc->allowed_fields[5].value = timestamp_str;
- nmc->allowed_fields[6].value = nm_setting_connection_get_read_only (s_con) ? ("yes") : _("no");
- nmc->allowed_fields[7].value = perm->str;
- nmc->allowed_fields[8].value = nm_setting_connection_get_zone (s_con);
- nmc->allowed_fields[9].value = nm_setting_connection_get_master (s_con);
- nmc->allowed_fields[10].value = nm_setting_connection_get_slave_type (s_con);
- nmc->allowed_fields[11].value = secondaries->str;
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
-
- g_free (timestamp_str);
- g_string_free (perm, TRUE);
- g_string_free (secondaries, TRUE);
- return TRUE;
-}
-
-gboolean
-setting_wired_details (NMSettingWired *s_wired, NmCli *nmc)
-{
- const GByteArray *mac;
- const GSList *iter;
- const GPtrArray *s390_channels;
- int i;
- char *speed_str, *mtu_str, *device_mac_str = NULL, *cloned_mac_str = NULL;
- GString *mac_blacklist_s, *s390_channels_s, *s390_options_s;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
-
- g_return_val_if_fail (NM_IS_SETTING_WIRED (s_wired), FALSE);
-
- nmc->allowed_fields = nmc_fields_setting_wired;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_WIRED_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
-
- speed_str = g_strdup_printf ("%d", nm_setting_wired_get_speed (s_wired));
- mtu_str = g_strdup_printf ("%d", nm_setting_wired_get_mtu (s_wired));
- mac = nm_setting_wired_get_mac_address (s_wired);
- if (mac)
- device_mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_ETHER);
- mac = nm_setting_wired_get_cloned_mac_address (s_wired);
- if (mac)
- cloned_mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_ETHER);
-
- mac_blacklist_s = g_string_new (NULL);
- iter = nm_setting_wired_get_mac_address_blacklist (s_wired);
- while (iter) {
- g_string_append_printf (mac_blacklist_s, "%s,", (char *) iter->data);
- iter = iter->next;
- }
- g_string_truncate (mac_blacklist_s, mac_blacklist_s->len-1); /* chop off trailing ',' */
-
- s390_channels_s = g_string_new (NULL);
- s390_channels = nm_setting_wired_get_s390_subchannels (s_wired);
- for (i = 0; s390_channels && i < s390_channels->len; i++)
- g_string_append_printf (s390_channels_s, "%s,", (char *) g_ptr_array_index (s390_channels, i));
- g_string_truncate (s390_channels_s, s390_channels_s->len-1); /* chop off trailing ',' */
-
- s390_options_s = g_string_new (NULL);
- for (i = 0; i < nm_setting_wired_get_num_s390_options (s_wired); i++) {
- const char *key, *value;
-
- nm_setting_wired_get_s390_option (s_wired, i, &key, &value);
- g_string_append_printf (s390_options_s, "%s=%s,", key, value);
+#define DEFINE_HWADDR_GETTER(func_name, property_name) \
+ static char * \
+ func_name (NMSetting *setting) \
+ { \
+ GValue val = G_VALUE_INIT; \
+ GArray *array; \
+ char *hwaddr = NULL; \
+ g_value_init (&val, DBUS_TYPE_G_UCHAR_ARRAY); \
+ g_object_get_property (G_OBJECT (setting), property_name, &val); \
+ array = g_value_get_boxed (&val); \
+ if (array && array->len) \
+ hwaddr = nm_utils_hwaddr_ntoa_len (array->data, array->len); \
+ g_value_unset (&val); \
+ return hwaddr; \
}
- g_string_truncate (s390_options_s, s390_options_s->len-1); /* chop off trailing ',' */
-
- nmc->allowed_fields[0].value = NM_SETTING_WIRED_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_wired_get_port (s_wired);
- nmc->allowed_fields[2].value = speed_str;
- nmc->allowed_fields[3].value = nm_setting_wired_get_duplex (s_wired);
- nmc->allowed_fields[4].value = nm_setting_wired_get_auto_negotiate (s_wired) ? _("yes") : _("no");
- nmc->allowed_fields[5].value = device_mac_str;
- nmc->allowed_fields[6].value = cloned_mac_str;
- nmc->allowed_fields[7].value = mac_blacklist_s->str;
- nmc->allowed_fields[8].value = strcmp (mtu_str, "0") ? mtu_str : _("auto");
- nmc->allowed_fields[9].value = s390_channels_s->str;
- nmc->allowed_fields[10].value = nm_setting_wired_get_s390_nettype (s_wired);
- nmc->allowed_fields[11].value = s390_options_s->str;
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
- g_free (speed_str);
- g_free (device_mac_str);
- g_free (cloned_mac_str);
- g_free (mtu_str);
- g_string_free (mac_blacklist_s, TRUE);
- g_string_free (s390_channels_s, TRUE);
- g_string_free (s390_options_s, TRUE);
-
- return TRUE;
-}
+/* --- NM_SETTING_802_1X_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_802_1X_get_eap, NM_SETTING_802_1X_EAP)
+DEFINE_GETTER (nmc_property_802_1X_get_identity, NM_SETTING_802_1X_IDENTITY)
+DEFINE_GETTER (nmc_property_802_1X_get_anonymous_identity, NM_SETTING_802_1X_ANONYMOUS_IDENTITY)
+DEFINE_GETTER (nmc_property_802_1X_get_pac_file, NM_SETTING_802_1X_PAC_FILE)
+DEFINE_GETTER (nmc_property_802_1X_get_ca_path, NM_SETTING_802_1X_CA_PATH)
+DEFINE_GETTER (nmc_property_802_1X_get_subject_match, NM_SETTING_802_1X_SUBJECT_MATCH)
+DEFINE_GETTER (nmc_property_802_1X_get_altsubject_matches, NM_SETTING_802_1X_ALTSUBJECT_MATCHES)
+DEFINE_GETTER (nmc_property_802_1X_get_phase1_peapver, NM_SETTING_802_1X_PHASE1_PEAPVER)
+DEFINE_GETTER (nmc_property_802_1X_get_phase1_peaplabel, NM_SETTING_802_1X_PHASE1_PEAPLABEL)
+DEFINE_GETTER (nmc_property_802_1X_get_phase1_fast_provisioning, NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING)
+DEFINE_GETTER (nmc_property_802_1X_get_phase2_auth, NM_SETTING_802_1X_PHASE2_AUTH)
+DEFINE_GETTER (nmc_property_802_1X_get_phase2_autheap, NM_SETTING_802_1X_PHASE2_AUTHEAP)
+DEFINE_GETTER (nmc_property_802_1X_get_phase2_ca_path, NM_SETTING_802_1X_PHASE2_CA_PATH)
+DEFINE_GETTER (nmc_property_802_1X_get_phase2_subject_match, NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH)
+DEFINE_GETTER (nmc_property_802_1X_get_phase2_altsubject_matches, NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES)
+DEFINE_GETTER (nmc_property_802_1X_get_password, NM_SETTING_802_1X_PASSWORD)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_password_flags, NM_SETTING_802_1X_PASSWORD_FLAGS)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_password_raw_flags, NM_SETTING_802_1X_PASSWORD_RAW_FLAGS)
+DEFINE_GETTER (nmc_property_802_1X_get_private_key_password, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_private_key_password_flags, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS)
+DEFINE_GETTER (nmc_property_802_1X_get_phase2_private_key_password, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_phase2_private_key_password_flags, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS)
+DEFINE_GETTER (nmc_property_802_1X_get_pin, NM_SETTING_802_1X_PIN)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_pin_flags, NM_SETTING_802_1X_PIN_FLAGS)
+DEFINE_GETTER (nmc_property_802_1X_get_system_ca_certs, NM_SETTING_802_1X_SYSTEM_CA_CERTS)
-gboolean
-setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc)
+static char *
+nmc_property_802_1X_get_ca_cert (NMSetting *setting)
{
+ NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
NMSetting8021xCKScheme scheme;
- GString *eap_str, *alt_sub_match, *phase2_alt_sub_match;
- char *ca_cert_str = NULL, *client_cert_str = NULL, *phase2_ca_cert_str = NULL;
- char *phase2_client_cert_str = NULL, *private_key_str = NULL, *phase2_private_key_str = NULL, *pswd_raw_str = NULL;
- char *pswd_flags, *pswd_raw_flags, *priv_key_pswd_flags, *phase2_priv_key_pswd_flags, *pin_flags;
- int i;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
-
- g_return_val_if_fail (NM_IS_SETTING_802_1X (s_8021X), FALSE);
+ char *ca_cert_str = NULL;
- nmc->allowed_fields = nmc_fields_setting_8021X;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_802_1X_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
-
- eap_str = g_string_new (NULL);
- for (i = 0; i < nm_setting_802_1x_get_num_eap_methods (s_8021X); i++) {
- if (i > 0)
- g_string_append_c (eap_str, ',');
- g_string_append (eap_str, nm_setting_802_1x_get_eap_method (s_8021X, i));
- }
scheme = nm_setting_802_1x_get_ca_cert_scheme (s_8021X);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
ca_cert_str = byte_array_to_string (nm_setting_802_1x_get_ca_cert_blob (s_8021X));
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
ca_cert_str = g_strdup (nm_setting_802_1x_get_ca_cert_path (s_8021X));
+ return ca_cert_str;
+}
+
+static char *
+nmc_property_802_1X_get_client_cert (NMSetting *setting)
+{
+ NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
+ NMSetting8021xCKScheme scheme;
+ char *client_cert_str = NULL;
+
scheme = nm_setting_802_1x_get_client_cert_scheme (s_8021X);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
client_cert_str = byte_array_to_string (nm_setting_802_1x_get_client_cert_blob (s_8021X));
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
client_cert_str = g_strdup (nm_setting_802_1x_get_client_cert_path (s_8021X));
+ return client_cert_str;
+}
+
+static char *
+nmc_property_802_1X_get_phase2_ca_cert (NMSetting *setting)
+{
+ NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
+ NMSetting8021xCKScheme scheme;
+ char *phase2_ca_cert_str = NULL;
+
scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (s_8021X);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
phase2_ca_cert_str = byte_array_to_string (nm_setting_802_1x_get_phase2_ca_cert_blob (s_8021X));
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
phase2_ca_cert_str = g_strdup (nm_setting_802_1x_get_phase2_ca_cert_path (s_8021X));
+ return phase2_ca_cert_str;
+}
+
+static char *
+nmc_property_802_1X_get_phase2_client_cert (NMSetting *setting)
+{
+ NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
+ NMSetting8021xCKScheme scheme;
+ char *phase2_client_cert_str = NULL;
+
scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (s_8021X);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
phase2_client_cert_str = byte_array_to_string (nm_setting_802_1x_get_phase2_client_cert_blob (s_8021X));
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
phase2_client_cert_str = g_strdup (nm_setting_802_1x_get_phase2_client_cert_path (s_8021X));
+ return phase2_client_cert_str;
+}
+
+static char *
+nmc_property_802_1X_get_password_raw (NMSetting *setting)
+{
+ NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
+ return byte_array_to_string (nm_setting_802_1x_get_password_raw (s_8021X));
+}
+
+static char *
+nmc_property_802_1X_get_private_key (NMSetting *setting)
+{
+ NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
+ NMSetting8021xCKScheme scheme;
+ char *private_key_str = NULL;
+
scheme = nm_setting_802_1x_get_private_key_scheme (s_8021X);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
private_key_str = byte_array_to_string (nm_setting_802_1x_get_private_key_blob (s_8021X));
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
private_key_str = g_strdup (nm_setting_802_1x_get_private_key_path (s_8021X));
+ return private_key_str;
+}
+
+static char *
+nmc_property_802_1X_get_phase2_private_key (NMSetting *setting)
+{
+ NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
+ NMSetting8021xCKScheme scheme;
+ char *phase2_private_key_str = NULL;
+
scheme = nm_setting_802_1x_get_phase2_private_key_scheme (s_8021X);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
phase2_private_key_str = byte_array_to_string (nm_setting_802_1x_get_phase2_private_key_blob (s_8021X));
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
phase2_private_key_str = g_strdup (nm_setting_802_1x_get_phase2_private_key_path (s_8021X));
- alt_sub_match = g_string_new (NULL);
- for (i = 0; i < nm_setting_802_1x_get_num_altsubject_matches (s_8021X); i++)
- g_string_append_printf (alt_sub_match, "%s,", nm_setting_802_1x_get_altsubject_match (s_8021X, i));
- g_string_truncate (alt_sub_match, alt_sub_match->len-1); /* chop off trailing ',' */
-
- phase2_alt_sub_match = g_string_new (NULL);
- for (i = 0; i < nm_setting_802_1x_get_num_phase2_altsubject_matches (s_8021X); i++)
- g_string_append_printf (phase2_alt_sub_match, "%s,", nm_setting_802_1x_get_phase2_altsubject_match (s_8021X, i));
- g_string_truncate (phase2_alt_sub_match, phase2_alt_sub_match->len-1); /* chop off trailing ',' */
-
- pswd_raw_str = byte_array_to_string (nm_setting_802_1x_get_password_raw (s_8021X));
-
- pswd_flags = secret_flags_to_string (nm_setting_802_1x_get_password_flags (s_8021X));
- pswd_raw_flags = secret_flags_to_string (nm_setting_802_1x_get_password_raw_flags (s_8021X));
- priv_key_pswd_flags = secret_flags_to_string (nm_setting_802_1x_get_private_key_password_flags (s_8021X));
- phase2_priv_key_pswd_flags = secret_flags_to_string (nm_setting_802_1x_get_phase2_private_key_password_flags (s_8021X));
- pin_flags = secret_flags_to_string (nm_setting_802_1x_get_pin_flags (s_8021X));
-
- nmc->allowed_fields[0].value = NM_SETTING_802_1X_SETTING_NAME;
- nmc->allowed_fields[1].value = eap_str->str;
- nmc->allowed_fields[2].value = nm_setting_802_1x_get_identity (s_8021X);
- nmc->allowed_fields[3].value = nm_setting_802_1x_get_anonymous_identity (s_8021X);
- nmc->allowed_fields[4].value = nm_setting_802_1x_get_pac_file (s_8021X);
- nmc->allowed_fields[5].value = ca_cert_str;
- nmc->allowed_fields[6].value = nm_setting_802_1x_get_ca_path (s_8021X);
- nmc->allowed_fields[7].value = nm_setting_802_1x_get_subject_match (s_8021X);
- nmc->allowed_fields[8].value = alt_sub_match->str;
- nmc->allowed_fields[9].value = client_cert_str;
- nmc->allowed_fields[10].value = nm_setting_802_1x_get_phase1_peapver (s_8021X);
- nmc->allowed_fields[11].value = nm_setting_802_1x_get_phase1_peaplabel (s_8021X);
- nmc->allowed_fields[12].value = nm_setting_802_1x_get_phase1_fast_provisioning (s_8021X);
- nmc->allowed_fields[13].value = nm_setting_802_1x_get_phase2_auth (s_8021X);
- nmc->allowed_fields[14].value = nm_setting_802_1x_get_phase2_autheap (s_8021X);
- nmc->allowed_fields[15].value = phase2_ca_cert_str;
- nmc->allowed_fields[16].value = nm_setting_802_1x_get_phase2_ca_path (s_8021X);
- nmc->allowed_fields[17].value = nm_setting_802_1x_get_phase2_subject_match (s_8021X);
- nmc->allowed_fields[18].value = phase2_alt_sub_match->str;
- nmc->allowed_fields[19].value = phase2_client_cert_str;
- nmc->allowed_fields[20].value = nm_setting_802_1x_get_password (s_8021X);
- nmc->allowed_fields[21].value = pswd_flags;
- nmc->allowed_fields[22].value = pswd_raw_str;
- nmc->allowed_fields[23].value = pswd_raw_flags;
- nmc->allowed_fields[24].value = private_key_str;
- nmc->allowed_fields[25].value = nm_setting_802_1x_get_private_key_password (s_8021X);
- nmc->allowed_fields[26].value = priv_key_pswd_flags;
- nmc->allowed_fields[27].value = phase2_private_key_str;
- nmc->allowed_fields[28].value = nm_setting_802_1x_get_phase2_private_key_password (s_8021X);
- nmc->allowed_fields[29].value = phase2_priv_key_pswd_flags;
- nmc->allowed_fields[30].value = nm_setting_802_1x_get_pin (s_8021X);
- nmc->allowed_fields[31].value = pin_flags;
- nmc->allowed_fields[32].value = nm_setting_802_1x_get_system_ca_certs (s_8021X) ? _("yes") : _("no");
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
-
- g_free (ca_cert_str);
- g_free (client_cert_str);
- g_free (phase2_ca_cert_str);
- g_free (phase2_client_cert_str);
- g_free (private_key_str);
- g_free (phase2_private_key_str);
- g_free (pswd_flags);
- g_free (pswd_raw_str);
- g_free (pswd_raw_flags);
- g_free (priv_key_pswd_flags);
- g_free (phase2_priv_key_pswd_flags);
- g_free (pin_flags);
- g_string_free (eap_str, TRUE);
- g_string_free (alt_sub_match, TRUE);
- g_string_free (phase2_alt_sub_match, TRUE);
+ return phase2_private_key_str;
+}
- return TRUE;
+/* --- NM_SETTING_ADSL_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_adsl_get_username, NM_SETTING_ADSL_USERNAME)
+DEFINE_GETTER (nmc_property_adsl_get_password, NM_SETTING_ADSL_PASSWORD)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_adsl_get_password_flags, NM_SETTING_ADSL_PASSWORD_FLAGS)
+DEFINE_GETTER (nmc_property_adsl_get_protocol, NM_SETTING_ADSL_PROTOCOL)
+DEFINE_GETTER (nmc_property_adsl_get_encapsulation, NM_SETTING_ADSL_ENCAPSULATION)
+DEFINE_GETTER (nmc_property_adsl_get_vpi, NM_SETTING_ADSL_VPI)
+DEFINE_GETTER (nmc_property_adsl_get_vci, NM_SETTING_ADSL_VCI)
+
+/* --- NM_SETTING_BLUETOOTH_SETTING_NAME property get functions --- */
+DEFINE_HWADDR_GETTER (nmc_property_bluetooth_get_bdaddr, NM_SETTING_BLUETOOTH_BDADDR)
+DEFINE_GETTER (nmc_property_bluetooth_get_type, NM_SETTING_BLUETOOTH_TYPE)
+
+/* --- NM_SETTING_BOND_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_bond_get_interface_name, NM_SETTING_BOND_INTERFACE_NAME)
+
+static char *
+nmc_property_bond_get_options (NMSetting *setting)
+{
+ NMSettingBond *s_bond = NM_SETTING_BOND (setting);
+ GString *bond_options_s;
+ int i;
+
+ bond_options_s = g_string_new (NULL);
+ for (i = 0; i < nm_setting_bond_get_num_options (s_bond); i++) {
+ const char *key, *value;
+
+ nm_setting_bond_get_option (s_bond, i, &key, &value);
+ g_string_append_printf (bond_options_s, "%s=%s,", key, value);
+ }
+ g_string_truncate (bond_options_s, bond_options_s->len-1); /* chop off trailing ',' */
+
+ return g_string_free (bond_options_s, FALSE);
}
-gboolean
-setting_wireless_details (NMSettingWireless *s_wireless, NmCli *nmc)
+/* --- NM_SETTING_BRIDGE_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_bridge_get_interface_name, NM_SETTING_BRIDGE_INTERFACE_NAME)
+DEFINE_HWADDR_GETTER (nmc_property_bridge_get_mac_address, NM_SETTING_BRIDGE_MAC_ADDRESS)
+DEFINE_GETTER (nmc_property_bridge_get_stp, NM_SETTING_BRIDGE_STP)
+DEFINE_GETTER (nmc_property_bridge_get_priority, NM_SETTING_BRIDGE_PRIORITY)
+DEFINE_GETTER (nmc_property_bridge_get_forward_delay, NM_SETTING_BRIDGE_FORWARD_DELAY)
+DEFINE_GETTER (nmc_property_bridge_get_hello_time, NM_SETTING_BRIDGE_HELLO_TIME)
+DEFINE_GETTER (nmc_property_bridge_get_max_age, NM_SETTING_BRIDGE_MAX_AGE)
+DEFINE_GETTER (nmc_property_bridge_get_ageing_time, NM_SETTING_BRIDGE_AGEING_TIME)
+
+/* --- NM_SETTING_BRIDGE_PORT_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_bridge_port_get_priority, NM_SETTING_BRIDGE_PORT_PRIORITY)
+DEFINE_GETTER (nmc_property_bridge_port_get_path_cost, NM_SETTING_BRIDGE_PORT_PATH_COST)
+DEFINE_GETTER (nmc_property_bridge_port_get_hairpin_mode, NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE)
+
+/* --- NM_SETTING_TEAM_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_team_get_interface_name, NM_SETTING_TEAM_INTERFACE_NAME)
+DEFINE_GETTER (nmc_property_team_get_config, NM_SETTING_TEAM_CONFIG)
+
+/* --- NM_SETTING_TEAM_PORT_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_team_port_get_config, NM_SETTING_TEAM_PORT_CONFIG)
+
+/* --- NM_SETTING_CDMA_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_cdma_get_number, NM_SETTING_CDMA_NUMBER)
+DEFINE_GETTER (nmc_property_cdma_get_username, NM_SETTING_CDMA_USERNAME)
+DEFINE_GETTER (nmc_property_cdma_get_password, NM_SETTING_CDMA_PASSWORD)
+
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_cdma_get_password_flags, NM_SETTING_CDMA_PASSWORD_FLAGS)
+
+/* --- NM_SETTING_CONNECTION_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_connection_get_id, NM_SETTING_CONNECTION_ID)
+DEFINE_GETTER (nmc_property_connection_get_uuid, NM_SETTING_CONNECTION_UUID)
+DEFINE_GETTER (nmc_property_connection_get_interface_name, NM_SETTING_CONNECTION_INTERFACE_NAME)
+DEFINE_GETTER (nmc_property_connection_get_type, NM_SETTING_CONNECTION_TYPE)
+DEFINE_GETTER (nmc_property_connection_get_autoconnect, NM_SETTING_CONNECTION_AUTOCONNECT)
+DEFINE_GETTER (nmc_property_connection_get_timestamp, NM_SETTING_CONNECTION_TIMESTAMP)
+DEFINE_GETTER (nmc_property_connection_get_read_only, NM_SETTING_CONNECTION_READ_ONLY)
+
+static char *
+nmc_property_connection_get_permissions (NMSetting *setting)
{
+ NMSettingConnection *s_con = NM_SETTING_CONNECTION (setting);
+ GString *perm = NULL;
+ const char *perm_item;
+ const char *perm_type;
int i;
- const GByteArray *ssid, *bssid, *mac;
- char *channel_str, *rate_str, *tx_power_str, *mtu_str;
- char *device_mac_str = NULL, *cloned_mac_str = NULL, *ssid_str = NULL, *bssid_str = NULL;
- GString *mac_blacklist, *seen_bssids;
- const GSList *iter;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
- g_return_val_if_fail (NM_IS_SETTING_WIRELESS (s_wireless), FALSE);
+ perm = g_string_new (NULL);
+ for (i = 0; i < nm_setting_connection_get_num_permissions (s_con); i++) {
+ if (nm_setting_connection_get_permission (s_con, i, &perm_type, &perm_item, NULL))
+ g_string_append_printf (perm, "%s:%s,", perm_type, perm_item);
+ }
+ if (perm->len > 0)
+ g_string_truncate (perm, perm->len-1); /* remove trailing , */
+
+ return g_string_free (perm, FALSE);
+}
+
+DEFINE_GETTER (nmc_property_connection_get_zone, NM_SETTING_CONNECTION_ZONE)
+DEFINE_GETTER (nmc_property_connection_get_master, NM_SETTING_CONNECTION_MASTER)
+DEFINE_GETTER (nmc_property_connection_get_slave_type, NM_SETTING_CONNECTION_SLAVE_TYPE)
+DEFINE_GETTER (nmc_property_connection_get_secondaries, NM_SETTING_CONNECTION_SECONDARIES)
+DEFINE_GETTER (nmc_property_connection_get_gateway_ping_timeout, NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT)
+
+/* --- NM_SETTING_DCB_SETTING_NAME property get functions --- */
+static char *
+dcb_flags_to_string (NMSettingDcbFlags flags)
+{
+ GString *flag_str;
+
+ if (flags == 0)
+ return g_strdup (_("0 (disabled)"));
+
+ flag_str = g_string_new (NULL);
+ g_string_printf (flag_str, "%d (", flags);
+
+ if (flags & NM_SETTING_DCB_FLAG_ENABLE)
+ g_string_append (flag_str, _("enabled, "));
+ if (flags & NM_SETTING_DCB_FLAG_ADVERTISE)
+ g_string_append (flag_str, _("advertise, "));
+ if (flags & NM_SETTING_DCB_FLAG_WILLING)
+ g_string_append (flag_str, _("willing, "));
+
+ if (flag_str->str[flag_str->len-1] == '(')
+ g_string_append (flag_str, _("unknown"));
+ else
+ g_string_truncate (flag_str, flag_str->len-2); /* chop off trailing ', ' */
+
+ g_string_append_c (flag_str, ')');
+
+ return g_string_free (flag_str, FALSE);
+}
+
+#define DEFINE_DCB_FLAGS_GETTER(func_name, property_name) \
+ static char * \
+ func_name (NMSetting *setting) \
+ { \
+ guint v; \
+ GValue val = G_VALUE_INIT; \
+ g_value_init (&val, G_TYPE_UINT); \
+ g_object_get_property (G_OBJECT (setting), property_name, &val); \
+ v = g_value_get_uint (&val); \
+ g_value_unset (&val); \
+ return dcb_flags_to_string (v); \
+ }
+
+static char *
+dcb_app_priority_to_string (gint priority)
+{
+ return (priority == -1) ? g_strdup (_("-1 (unset)")) : g_strdup_printf ("%d", priority);
+}
+
+#define DEFINE_DCB_APP_PRIORITY_GETTER(func_name, property_name) \
+ static char * \
+ func_name (NMSetting *setting) \
+ { \
+ int v; \
+ GValue val = G_VALUE_INIT; \
+ g_value_init (&val, G_TYPE_INT); \
+ g_object_get_property (G_OBJECT (setting), property_name, &val); \
+ v = g_value_get_int (&val); \
+ g_value_unset (&val); \
+ return dcb_app_priority_to_string (v); \
+ }
- nmc->allowed_fields = nmc_fields_setting_wireless;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_WIRELESS_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+#define DEFINE_DCB_BOOL_GETTER(func_name, getter_func_name) \
+ static char * \
+ func_name (NMSetting *setting) \
+ { \
+ NMSettingDcb *s_dcb = NM_SETTING_DCB (setting); \
+ GString *str; \
+ guint i; \
+ \
+ str = g_string_new (NULL); \
+ for (i = 0; i < 8; i++) { \
+ if (getter_func_name (s_dcb, i)) \
+ g_string_append_c (str, '1'); \
+ else \
+ g_string_append_c (str, '0'); \
+\
+ if (i < 7) \
+ g_string_append_c (str, ','); \
+ } \
+\
+ return g_string_free (str, FALSE); \
+ }
+
+#define DEFINE_DCB_UINT_GETTER(func_name, getter_func_name) \
+ static char * \
+ func_name (NMSetting *setting) \
+ { \
+ NMSettingDcb *s_dcb = NM_SETTING_DCB (setting); \
+ GString *str; \
+ guint i; \
+ \
+ str = g_string_new (NULL); \
+ for (i = 0; i < 8; i++) { \
+ g_string_append_printf (str, "%u", getter_func_name (s_dcb, i)); \
+ if (i < 7) \
+ g_string_append_c (str, ','); \
+ } \
+\
+ return g_string_free (str, FALSE); \
+ }
+
+DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_app_fcoe_flags, NM_SETTING_DCB_APP_FCOE_FLAGS)
+DEFINE_DCB_APP_PRIORITY_GETTER (nmc_property_dcb_get_app_fcoe_priority, NM_SETTING_DCB_APP_FCOE_PRIORITY)
+DEFINE_GETTER (nmc_property_dcb_get_app_fcoe_mode, NM_SETTING_DCB_APP_FCOE_MODE)
+DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_app_iscsi_flags, NM_SETTING_DCB_APP_ISCSI_FLAGS)
+DEFINE_DCB_APP_PRIORITY_GETTER (nmc_property_dcb_get_app_iscsi_priority, NM_SETTING_DCB_APP_ISCSI_PRIORITY)
+DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_app_fip_flags, NM_SETTING_DCB_APP_FIP_FLAGS)
+DEFINE_DCB_APP_PRIORITY_GETTER (nmc_property_dcb_get_app_fip_priority, NM_SETTING_DCB_APP_FIP_PRIORITY)
+
+DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_pfc_flags, NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS)
+DEFINE_DCB_BOOL_GETTER (nmc_property_dcb_get_pfc, nm_setting_dcb_get_priority_flow_control)
+
+DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_pg_flags, NM_SETTING_DCB_PRIORITY_GROUP_FLAGS)
+DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_group_id, nm_setting_dcb_get_priority_group_id)
+DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_group_bandwidth, nm_setting_dcb_get_priority_group_bandwidth)
+DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_bandwidth, nm_setting_dcb_get_priority_bandwidth)
+DEFINE_DCB_BOOL_GETTER (nmc_property_dcb_get_pg_strict, nm_setting_dcb_get_priority_strict_bandwidth)
+DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_traffic_class, nm_setting_dcb_get_priority_traffic_class)
+
+/* --- NM_SETTING_GSM_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_gsm_get_number, NM_SETTING_GSM_NUMBER)
+DEFINE_GETTER (nmc_property_gsm_get_username, NM_SETTING_GSM_USERNAME)
+DEFINE_GETTER (nmc_property_gsm_get_password, NM_SETTING_GSM_PASSWORD)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_gsm_get_password_flags, NM_SETTING_GSM_PASSWORD_FLAGS)
+DEFINE_GETTER (nmc_property_gsm_get_apn, NM_SETTING_GSM_APN)
+DEFINE_GETTER (nmc_property_gsm_get_network_id, NM_SETTING_GSM_NETWORK_ID)
+DEFINE_GETTER (nmc_property_gsm_get_network_type, NM_SETTING_GSM_NETWORK_TYPE)
+
+static char *
+nmc_property_gsm_get_allowed_bands (NMSetting *setting)
+{
+ NMSettingGsm *s_gsm = NM_SETTING_GSM (setting);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ return allowed_bands_to_string (nm_setting_gsm_get_allowed_bands (s_gsm));
+G_GNUC_END_IGNORE_DEPRECATIONS
+}
+
+DEFINE_GETTER (nmc_property_gsm_get_pin, NM_SETTING_GSM_PIN)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_gsm_get_pin_flags, NM_SETTING_GSM_PIN_FLAGS)
+DEFINE_GETTER (nmc_property_gsm_get_home_only, NM_SETTING_GSM_HOME_ONLY)
+
+/* --- NM_SETTING_INFINIBAND_SETTING_NAME property get functions --- */
+DEFINE_HWADDR_GETTER (nmc_property_ib_get_mac_address, NM_SETTING_INFINIBAND_MAC_ADDRESS)
+DEFINE_GETTER (nmc_property_ib_get_transport_mode, NM_SETTING_INFINIBAND_TRANSPORT_MODE)
+
+static char *
+nmc_property_ib_get_mtu (NMSetting *setting)
+{
+ NMSettingInfiniband *s_infiniband = NM_SETTING_INFINIBAND (setting);
+ int mtu;
+
+ mtu = nm_setting_infiniband_get_mtu (s_infiniband);
+ if (mtu == 0)
+ return g_strdup (_("auto"));
+ else
+ return g_strdup_printf ("%d", mtu);
+}
+
+static char *
+nmc_property_ib_get_p_key (NMSetting *setting)
+{
+ NMSettingInfiniband *s_infiniband = NM_SETTING_INFINIBAND (setting);
+ int p_key;
+
+ p_key = nm_setting_infiniband_get_p_key (s_infiniband);
+ if (p_key == -1)
+ return g_strdup (_("default"));
+ else
+ return g_strdup_printf ("0x%04x", p_key);
+}
+
+DEFINE_GETTER (nmc_property_ib_get_parent, NM_SETTING_INFINIBAND_PARENT)
+
+/* --- NM_SETTING_IP4_CONFIG_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_ipv4_get_method, NM_SETTING_IP4_CONFIG_METHOD)
+DEFINE_GETTER (nmc_property_ipv4_get_dns, NM_SETTING_IP4_CONFIG_DNS)
+DEFINE_GETTER (nmc_property_ipv4_get_dns_search, NM_SETTING_IP4_CONFIG_DNS_SEARCH)
+DEFINE_GETTER (nmc_property_ipv4_get_addresses, NM_SETTING_IP4_CONFIG_ADDRESSES)
+DEFINE_GETTER (nmc_property_ipv4_get_routes, NM_SETTING_IP4_CONFIG_ROUTES)
+DEFINE_GETTER (nmc_property_ipv4_get_ignore_auto_routes, NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES)
+DEFINE_GETTER (nmc_property_ipv4_get_ignore_auto_dns, NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS)
+DEFINE_GETTER (nmc_property_ipv4_get_dhcp_client_id, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID)
+DEFINE_GETTER (nmc_property_ipv4_get_dhcp_send_hostname, NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME)
+DEFINE_GETTER (nmc_property_ipv4_get_dhcp_hostname, NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME)
+DEFINE_GETTER (nmc_property_ipv4_get_never_default, NM_SETTING_IP4_CONFIG_NEVER_DEFAULT)
+DEFINE_GETTER (nmc_property_ipv4_get_may_fail, NM_SETTING_IP4_CONFIG_MAY_FAIL)
+
+/* --- NM_SETTING_IP6_CONFIG_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_ipv6_get_method, NM_SETTING_IP6_CONFIG_METHOD)
+DEFINE_GETTER (nmc_property_ipv6_get_dns, NM_SETTING_IP6_CONFIG_DNS)
+DEFINE_GETTER (nmc_property_ipv6_get_dns_search, NM_SETTING_IP6_CONFIG_DNS_SEARCH)
+DEFINE_GETTER (nmc_property_ipv6_get_addresses, NM_SETTING_IP6_CONFIG_ADDRESSES)
+DEFINE_GETTER (nmc_property_ipv6_get_routes, NM_SETTING_IP6_CONFIG_ROUTES)
+DEFINE_GETTER (nmc_property_ipv6_get_ignore_auto_routes, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES)
+DEFINE_GETTER (nmc_property_ipv6_get_ignore_auto_dns, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS)
+DEFINE_GETTER (nmc_property_ipv6_get_never_default, NM_SETTING_IP6_CONFIG_NEVER_DEFAULT)
+DEFINE_GETTER (nmc_property_ipv6_get_may_fail, NM_SETTING_IP6_CONFIG_MAY_FAIL)
+DEFINE_GETTER (nmc_property_ipv6_get_dhcp_hostname, NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME)
+
+static char *
+nmc_property_ipv6_get_ip6_privacy (NMSetting *setting)
+{
+ NMSettingIP6Config *s_ip6 = NM_SETTING_IP6_CONFIG (setting);
+ return ip6_privacy_to_string (nm_setting_ip6_config_get_ip6_privacy (s_ip6));
+}
+
+/* --- NM_SETTING_OLPC_MESH_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_olpc_get_channel, NM_SETTING_OLPC_MESH_CHANNEL)
+DEFINE_HWADDR_GETTER (nmc_property_olpc_get_anycast_address, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS)
+
+static char *
+nmc_property_olpc_get_ssid (NMSetting *setting)
+{
+ NMSettingOlpcMesh *s_olpc_mesh = NM_SETTING_OLPC_MESH (setting);
+ const GByteArray *ssid;
+ char *ssid_str = NULL;
+
+ ssid = nm_setting_olpc_mesh_get_ssid (s_olpc_mesh);
+ if (ssid)
+ ssid_str = nm_utils_ssid_to_utf8 (ssid);
+
+ return ssid_str;
+}
+
+/* --- NM_SETTING_PPP_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_ppp_get_noauth, NM_SETTING_PPP_NOAUTH)
+DEFINE_GETTER (nmc_property_ppp_get_refuse_eap, NM_SETTING_PPP_REFUSE_EAP)
+DEFINE_GETTER (nmc_property_ppp_get_refuse_pap, NM_SETTING_PPP_REFUSE_PAP)
+DEFINE_GETTER (nmc_property_ppp_get_refuse_chap, NM_SETTING_PPP_REFUSE_CHAP)
+DEFINE_GETTER (nmc_property_ppp_get_refuse_mschap, NM_SETTING_PPP_REFUSE_MSCHAP)
+DEFINE_GETTER (nmc_property_ppp_get_refuse_mschapv2, NM_SETTING_PPP_REFUSE_MSCHAPV2)
+DEFINE_GETTER (nmc_property_ppp_get_nobsdcomp, NM_SETTING_PPP_NOBSDCOMP)
+DEFINE_GETTER (nmc_property_ppp_get_nodeflate, NM_SETTING_PPP_NODEFLATE)
+DEFINE_GETTER (nmc_property_ppp_get_no_vj_comp, NM_SETTING_PPP_NO_VJ_COMP)
+DEFINE_GETTER (nmc_property_ppp_get_require_mppe, NM_SETTING_PPP_REQUIRE_MPPE)
+DEFINE_GETTER (nmc_property_ppp_get_require_mppe_128, NM_SETTING_PPP_REQUIRE_MPPE_128)
+DEFINE_GETTER (nmc_property_ppp_get_mppe_stateful, NM_SETTING_PPP_MPPE_STATEFUL)
+DEFINE_GETTER (nmc_property_ppp_get_crtscts, NM_SETTING_PPP_CRTSCTS)
+DEFINE_GETTER (nmc_property_ppp_get_baud, NM_SETTING_PPP_BAUD)
+DEFINE_GETTER (nmc_property_ppp_get_mru, NM_SETTING_PPP_MRU)
+DEFINE_GETTER (nmc_property_ppp_get_mtu, NM_SETTING_PPP_MTU)
+DEFINE_GETTER (nmc_property_ppp_get_lcp_echo_failure, NM_SETTING_PPP_LCP_ECHO_FAILURE)
+DEFINE_GETTER (nmc_property_ppp_get_lcp_echo_interval, NM_SETTING_PPP_LCP_ECHO_INTERVAL)
+
+/* --- NM_SETTING_PPPOE_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_pppoe_get_service, NM_SETTING_PPPOE_SERVICE)
+DEFINE_GETTER (nmc_property_pppoe_get_username, NM_SETTING_PPPOE_USERNAME)
+DEFINE_GETTER (nmc_property_pppoe_get_password, NM_SETTING_PPPOE_PASSWORD)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_pppoe_get_password_flags, NM_SETTING_PPPOE_PASSWORD_FLAGS)
+
+/* --- NM_SETTING_SERIAL_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_serial_get_baud, NM_SETTING_SERIAL_BAUD)
+DEFINE_GETTER (nmc_property_serial_get_bits, NM_SETTING_SERIAL_BITS)
+DEFINE_GETTER (nmc_property_serial_get_parity, NM_SETTING_SERIAL_PARITY)
+DEFINE_GETTER (nmc_property_serial_get_stopbits, NM_SETTING_SERIAL_STOPBITS)
+DEFINE_GETTER (nmc_property_serial_get_send_delay, NM_SETTING_SERIAL_SEND_DELAY)
+
+/* --- NM_SETTING_VLAN_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_vlan_get_interface_name, NM_SETTING_VLAN_INTERFACE_NAME)
+DEFINE_GETTER (nmc_property_vlan_get_parent, NM_SETTING_VLAN_PARENT)
+DEFINE_GETTER (nmc_property_vlan_get_id, NM_SETTING_VLAN_ID)
+
+
+static char *
+nmc_property_vlan_get_flags (NMSetting *setting)
+{
+ NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting);
+ return vlan_flags_to_string (nm_setting_vlan_get_flags (s_vlan));
+}
+
+static char *
+nmc_property_vlan_get_ingress_priority_map (NMSetting *setting)
+{
+ NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting);
+ return vlan_priorities_to_string (s_vlan, NM_VLAN_INGRESS_MAP);
+}
+
+static char *
+nmc_property_vlan_get_egress_priority_map (NMSetting *setting)
+{
+ NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting);
+ return vlan_priorities_to_string (s_vlan, NM_VLAN_EGRESS_MAP);
+}
+
+/* --- NM_SETTING_VPN_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_vpn_get_service_type, NM_SETTING_VPN_SERVICE_TYPE)
+DEFINE_GETTER (nmc_property_vpn_get_user_name, NM_SETTING_VPN_USER_NAME)
+
+static char *
+nmc_property_vpn_get_data (NMSetting *setting)
+{
+ NMSettingVPN *s_vpn = NM_SETTING_VPN (setting);
+ GString *data_item_str;
+
+ data_item_str = g_string_new (NULL);
+ nm_setting_vpn_foreach_data_item (s_vpn, &vpn_data_item, data_item_str);
+
+ return g_string_free (data_item_str, FALSE);
+}
+
+static char *
+nmc_property_vpn_get_secrets (NMSetting *setting)
+{
+ NMSettingVPN *s_vpn = NM_SETTING_VPN (setting);
+ GString *secret_str;
+
+ secret_str = g_string_new (NULL);
+ nm_setting_vpn_foreach_secret (s_vpn, &vpn_data_item, secret_str);
+
+ return g_string_free (secret_str, FALSE);
+}
+
+/* --- NM_SETTING_WIMAX_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_wimax_get_network_name, NM_SETTING_WIMAX_NETWORK_NAME)
+DEFINE_HWADDR_GETTER (nmc_property_wimax_get_mac_address, NM_SETTING_WIMAX_MAC_ADDRESS)
+
+/* --- NM_SETTING_WIRED_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_wired_get_port, NM_SETTING_WIRED_PORT)
+DEFINE_GETTER (nmc_property_wired_get_speed, NM_SETTING_WIRED_SPEED)
+DEFINE_GETTER (nmc_property_wired_get_duplex, NM_SETTING_WIRED_DUPLEX)
+DEFINE_GETTER (nmc_property_wired_get_auto_negotiate, NM_SETTING_WIRED_AUTO_NEGOTIATE)
+DEFINE_HWADDR_GETTER (nmc_property_wired_get_mac_address, NM_SETTING_WIRED_MAC_ADDRESS)
+DEFINE_HWADDR_GETTER (nmc_property_wired_get_cloned_mac_address, NM_SETTING_WIRED_CLONED_MAC_ADDRESS)
+DEFINE_GETTER (nmc_property_wired_get_mac_address_blacklist, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST)
+DEFINE_GETTER (nmc_property_wired_get_s390_subchannels, NM_SETTING_WIRED_S390_SUBCHANNELS)
+DEFINE_GETTER (nmc_property_wired_get_s390_nettype, NM_SETTING_WIRED_S390_NETTYPE)
+DEFINE_GETTER (nmc_property_wired_get_s390_options, NM_SETTING_WIRED_S390_OPTIONS)
+
+static char *
+nmc_property_wired_get_mtu (NMSetting *setting)
+{
+ NMSettingWired *s_wired = NM_SETTING_WIRED (setting);
+ int mtu;
+
+ mtu = nm_setting_wired_get_mtu (s_wired);
+ if (mtu == 0)
+ return g_strdup (_("auto"));
+ else
+ return g_strdup_printf ("%d", mtu);
+}
+
+/* --- NM_SETTING_WIRELESS_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_wireless_get_mode, NM_SETTING_WIRELESS_MODE)
+DEFINE_GETTER (nmc_property_wireless_get_band, NM_SETTING_WIRELESS_BAND)
+DEFINE_GETTER (nmc_property_wireless_get_channel, NM_SETTING_WIRELESS_CHANNEL)
+DEFINE_HWADDR_GETTER (nmc_property_wireless_get_bssid, NM_SETTING_WIRELESS_BSSID)
+DEFINE_GETTER (nmc_property_wireless_get_rate, NM_SETTING_WIRELESS_RATE)
+DEFINE_GETTER (nmc_property_wireless_get_tx_power, NM_SETTING_WIRELESS_TX_POWER)
+DEFINE_HWADDR_GETTER (nmc_property_wireless_get_mac_address, NM_SETTING_WIRELESS_MAC_ADDRESS)
+DEFINE_HWADDR_GETTER (nmc_property_wireless_get_cloned_mac_address, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS)
+DEFINE_GETTER (nmc_property_wireless_get_mac_address_blacklist, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST)
+DEFINE_GETTER (nmc_property_wireless_get_seen_bssids, NM_SETTING_WIRELESS_SEEN_BSSIDS)
+DEFINE_GETTER (nmc_property_wireless_get_hidden, NM_SETTING_WIRELESS_HIDDEN)
+
+static char *
+nmc_property_wireless_get_ssid (NMSetting *setting)
+{
+ NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting);
+ const GByteArray *ssid;
+ char *ssid_str = NULL;
ssid = nm_setting_wireless_get_ssid (s_wireless);
if (ssid)
- ssid_str = ssid_to_printable ((const char *) ssid->data, ssid->len);
- channel_str = g_strdup_printf ("%d", nm_setting_wireless_get_channel (s_wireless));
- rate_str = g_strdup_printf ("%d", nm_setting_wireless_get_rate (s_wireless));
- bssid = nm_setting_wireless_get_bssid (s_wireless);
- if (bssid)
- bssid_str = nm_utils_hwaddr_ntoa (bssid->data, ARPHRD_ETHER);
- tx_power_str = g_strdup_printf ("%d", nm_setting_wireless_get_tx_power (s_wireless));
- mtu_str = g_strdup_printf ("%d", nm_setting_wireless_get_mtu (s_wireless));
- mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac)
- device_mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_ETHER);
- mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
- if (mac)
- cloned_mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_ETHER);
-
- mac_blacklist = g_string_new (NULL);
- iter = nm_setting_wireless_get_mac_address_blacklist (s_wireless);
- while (iter) {
- g_string_append_printf (mac_blacklist, "%s,", (char *) iter->data);
- iter = iter->next;
- }
- g_string_truncate (mac_blacklist, mac_blacklist->len-1); /* chop off trailing ',' */
-
- seen_bssids = g_string_new (NULL);
- for (i = 0; i < nm_setting_wireless_get_num_seen_bssids (s_wireless); i++) {
- if (i > 0)
- g_string_append_c (seen_bssids, ',');
- g_string_append (seen_bssids, nm_setting_wireless_get_seen_bssid (s_wireless, i));
- }
-
- nmc->allowed_fields[0].value = NM_SETTING_WIRELESS_SETTING_NAME;
- nmc->allowed_fields[1].value = ssid_str;
- nmc->allowed_fields[2].value = nm_setting_wireless_get_mode (s_wireless);
- nmc->allowed_fields[3].value = nm_setting_wireless_get_band (s_wireless);
- nmc->allowed_fields[4].value = channel_str;
- nmc->allowed_fields[5].value = bssid_str;
- nmc->allowed_fields[6].value = rate_str;
- nmc->allowed_fields[7].value = tx_power_str;
- nmc->allowed_fields[8].value = device_mac_str;
- nmc->allowed_fields[9].value = cloned_mac_str;
- nmc->allowed_fields[10].value = mac_blacklist->str;
- nmc->allowed_fields[11].value = strcmp (mtu_str, "0") ? mtu_str : _("auto");
- nmc->allowed_fields[12].value = seen_bssids->str;
- nmc->allowed_fields[13].value = nm_setting_wireless_get_security (s_wireless);
- nmc->allowed_fields[14].value = nm_setting_wireless_get_hidden (s_wireless) ? _("yes") : _("no");
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
-
- g_free (ssid_str);
- g_free (channel_str);
- g_free (bssid_str);
- g_free (rate_str);
- g_free (tx_power_str);
- g_free (device_mac_str);
- g_free (cloned_mac_str);
- g_free (mtu_str);
- g_string_free (seen_bssids, TRUE);
- g_string_free (mac_blacklist, TRUE);
+ ssid_str = nm_utils_ssid_to_utf8 (ssid);
+
+ return ssid_str;
+}
+
+static char *
+nmc_property_wireless_get_mtu (NMSetting *setting)
+{
+ NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting);
+ int mtu;
+
+ mtu = nm_setting_wireless_get_mtu (s_wireless);
+ if (mtu == 0)
+ return g_strdup (_("auto"));
+ else
+ return g_strdup_printf ("%d", mtu);
+}
+
+/* --- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME property get functions --- */
+DEFINE_GETTER (nmc_property_wifi_sec_get_key_mgmt, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT)
+DEFINE_GETTER (nmc_property_wifi_sec_get_wep_tx_keyidx, NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX)
+DEFINE_GETTER (nmc_property_wifi_sec_get_auth_alg, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG)
+DEFINE_GETTER (nmc_property_wifi_sec_get_proto, NM_SETTING_WIRELESS_SECURITY_PROTO)
+DEFINE_GETTER (nmc_property_wifi_sec_get_pairwise, NM_SETTING_WIRELESS_SECURITY_PAIRWISE)
+DEFINE_GETTER (nmc_property_wifi_sec_get_group, NM_SETTING_WIRELESS_SECURITY_GROUP)
+DEFINE_GETTER (nmc_property_wifi_sec_get_leap_username, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_wifi_sec_get_wep_key_flags, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS)
+DEFINE_GETTER (nmc_property_wifi_sec_get_psk, NM_SETTING_WIRELESS_SECURITY_PSK)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_wifi_sec_get_psk_flags, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS)
+DEFINE_GETTER (nmc_property_wifi_sec_get_leap_password, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD)
+DEFINE_SECRET_FLAGS_GETTER (nmc_property_wifi_sec_get_leap_password_flags, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS)
+
+static char *
+nmc_property_wifi_sec_get_wep_key0 (NMSetting *setting)
+{
+ NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting);
+ return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 0));
+}
+
+static char *
+nmc_property_wifi_sec_get_wep_key1 (NMSetting *setting)
+{
+ NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting);
+ return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1));
+}
+
+static char *
+nmc_property_wifi_sec_get_wep_key2 (NMSetting *setting)
+{
+ NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting);
+ return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 2));
+}
+
+static char *
+nmc_property_wifi_sec_get_wep_key3 (NMSetting *setting)
+{
+ NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting);
+ return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 3));
+}
+
+static char *
+nmc_property_wifi_sec_get_wep_key_type (NMSetting *setting)
+{
+ NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting);
+ return wep_key_type_to_string (nm_setting_wireless_security_get_wep_key_type (s_wireless_sec));
+}
+
+/*----------------------------------------------------------------------------*/
+
+static void
+nmc_value_transform_bool_string (const GValue *src_value,
+ GValue *dest_value)
+{
+ dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_int ? "yes" : "no");
+}
+
+static void
+nmc_value_transform_char_string (const GValue *src_value,
+ GValue *dest_value)
+{
+ dest_value->data[0].v_pointer = g_strdup_printf ("%c", src_value->data[0].v_uint);
+}
+
+static void __attribute__((constructor))
+register_nmcli_value_transforms (void)
+{
+ g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_STRING, nmc_value_transform_bool_string);
+ g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_STRING, nmc_value_transform_char_string);
+}
+
+/*----------------------------------------------------------------------------*/
+
+/* Main hash table storing function pointer for manipulating properties */
+static GHashTable *nmc_properties = NULL;
+typedef char * (*NmcPropertyGetFunc) (NMSetting *);
+typedef gboolean (*NmcPropertySetFunc) (NMSetting *, const char *, const char *, GError **);
+typedef gboolean (*NmcPropertyRemoveFunc) (NMSetting *, const char *, const char *, guint32, GError **);
+typedef const char * (*NmcPropertyDescribeFunc) (NMSetting *, const char *);
+typedef const char * (*NmcPropertyValuesFunc) (NMSetting *, const char *);
+typedef char * (*NmcPropertyOut2InFunc) (const char *);
+
+typedef struct {
+ NmcPropertyGetFunc get_func; /* func getting property values */
+ NmcPropertySetFunc set_func; /* func adding/setting property values */
+ NmcPropertyRemoveFunc remove_func; /* func removing items from container options */
+ NmcPropertyDescribeFunc describe_func; /* func returning property description */
+ NmcPropertyValuesFunc values_func; /* func returning allowed property values */
+ NmcPropertyOut2InFunc out2in_func; /* func converting property values from output to input format */
+} NmcPropertyFuncs;
+
+/*
+ * We need NmCli in some _set_property functions, and they aren't passed NmCli.
+ * So use the global variable.
+ */
+/* Global variable defined in nmcli.c */
+extern NmCli nm_cli;
+
+NMSetting *
+nmc_setting_new_for_name (const char *name)
+{
+ GType stype;
+ NMSetting *setting = NULL;
+
+ if (name) {
+ stype = nm_connection_lookup_setting_type (name);
+ if (stype != G_TYPE_INVALID) {
+ setting = g_object_new (stype, NULL);
+ g_warn_if_fail (NM_IS_SETTING (setting));
+ }
+ }
+ return setting;
+}
+
+static gboolean
+get_answer (const char *prop, const char *value)
+{
+ char *tmp_str;
+ char *question;
+ gboolean answer = FALSE;
+
+ if (value)
+ question = g_strdup_printf (_("Do you also want to set '%s' to '%s'? [yes]: "), prop, value);
+ else
+ question = g_strdup_printf (_("Do you also want to clear '%s'? [yes]: "), prop);
+ tmp_str = nmc_get_user_input (question);
+ if (!tmp_str || matches (tmp_str, "yes") == 0)
+ answer = TRUE;
+ g_free (tmp_str);
+ g_free (question);
+ return answer;
+}
+
+static void ipv4_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data);
+static void ipv6_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data);
+
+static void
+ipv4_addresses_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ static gboolean answered = FALSE;
+ static gboolean answer = FALSE;
+
+ g_signal_handlers_block_by_func (object, G_CALLBACK (ipv4_method_changed_cb), NULL);
+
+ /* If we have some IP addresses set method to 'manual'.
+ * Else if the method was 'manual', change it back to 'auto'.
+ */
+ if (nm_setting_ip4_config_get_num_addresses (NM_SETTING_IP4_CONFIG (object))) {
+ if (g_strcmp0 (nm_setting_ip4_config_get_method (NM_SETTING_IP4_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
+ if (!answered) {
+ answered = TRUE;
+ answer = get_answer ("ipv4.method", "manual");
+ }
+ if (answer)
+ g_object_set (object, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
+ }
+ } else {
+ answered = FALSE;
+ if (!g_strcmp0 (nm_setting_ip4_config_get_method (NM_SETTING_IP4_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL))
+ g_object_set (object, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ }
+
+ g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv4_method_changed_cb), NULL);
+}
+
+static void
+ipv4_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ static GValue value = G_VALUE_INIT;
+ static gboolean answered = FALSE;
+ static gboolean answer = FALSE;
+
+ g_signal_handlers_block_by_func (object, G_CALLBACK (ipv4_addresses_changed_cb), NULL);
+
+ /* If method != manual, remove addresses (save them for restoring them later when method becomes 'manual' */
+ if (g_strcmp0 (nm_setting_ip4_config_get_method (NM_SETTING_IP4_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
+ if (nm_setting_ip4_config_get_num_addresses (NM_SETTING_IP4_CONFIG (object))) {
+ if (!answered) {
+ answered = TRUE;
+ answer = get_answer ("ipv4.addresses", NULL);
+ }
+ if (answer) {
+ if (G_IS_VALUE (&value))
+ g_value_unset (&value);
+ nmc_property_get_gvalue (NM_SETTING (object), NM_SETTING_IP4_CONFIG_ADDRESSES, &value);
+ g_object_set (object, NM_SETTING_IP4_CONFIG_ADDRESSES, NULL, NULL);
+ }
+ }
+ } else {
+ answered = FALSE;
+ if (G_IS_VALUE (&value)) {
+ nmc_property_set_gvalue (NM_SETTING (object), NM_SETTING_IP4_CONFIG_ADDRESSES, &value);
+ g_value_unset (&value);
+ }
+ }
+
+ g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv4_addresses_changed_cb), NULL);
+}
+
+static void
+ipv6_addresses_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ static gboolean answered = FALSE;
+ static gboolean answer = FALSE;
+
+ g_signal_handlers_block_by_func (object, G_CALLBACK (ipv6_method_changed_cb), NULL);
+
+ /* If we have some IP addresses set method to 'manual'.
+ * Else if the method was 'manual', change it back to 'auto'.
+ */
+ if (nm_setting_ip6_config_get_num_addresses (NM_SETTING_IP6_CONFIG (object))) {
+ if (g_strcmp0 (nm_setting_ip6_config_get_method (NM_SETTING_IP6_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ if (!answered) {
+ answered = TRUE;
+ answer = get_answer ("ipv6.method", "manual");
+ }
+ if (answer)
+ g_object_set (object, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL, NULL);
+ }
+ } else {
+ answered = FALSE;
+ if (!g_strcmp0 (nm_setting_ip6_config_get_method (NM_SETTING_IP6_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL))
+ g_object_set (object, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+ }
+
+ g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv6_method_changed_cb), NULL);
+}
+
+static void
+ipv6_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ static GValue value = G_VALUE_INIT;
+ static gboolean answered = FALSE;
+ static gboolean answer = FALSE;
+
+ g_signal_handlers_block_by_func (object, G_CALLBACK (ipv6_addresses_changed_cb), NULL);
+
+ /* If method != manual, remove addresses (save them for restoring them later when method becomes 'manual' */
+ if (g_strcmp0 (nm_setting_ip6_config_get_method (NM_SETTING_IP6_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ if (nm_setting_ip6_config_get_num_addresses (NM_SETTING_IP6_CONFIG (object))) {
+ if (!answered) {
+ answered = TRUE;
+ answer = get_answer ("ipv6.addresses", NULL);
+ }
+ if (answer) {
+ if (G_IS_VALUE (&value))
+ g_value_unset (&value);
+ nmc_property_get_gvalue (NM_SETTING (object), NM_SETTING_IP6_CONFIG_ADDRESSES, &value);
+ g_object_set (object, NM_SETTING_IP6_CONFIG_ADDRESSES, NULL, NULL);
+ }
+ }
+ } else {
+ answered = FALSE;
+ if (G_IS_VALUE (&value)) {
+ nmc_property_set_gvalue (NM_SETTING (object), NM_SETTING_IP6_CONFIG_ADDRESSES, &value);
+ g_value_unset (&value);
+ }
+ }
+ g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv6_addresses_changed_cb), NULL);
+}
+
+static void
+wireless_band_channel_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ const char *value = NULL, *mode;
+ char str[16];
+ NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (object);
+
+ if (strcmp (g_param_spec_get_name (pspec), NM_SETTING_WIRELESS_BAND) == 0) {
+ value = nm_setting_wireless_get_band (s_wireless);
+ if (!value)
+ return;
+ } else {
+ guint32 channel = nm_setting_wireless_get_channel (s_wireless);
+
+ if (channel == 0)
+ return;
+
+ g_snprintf (str, sizeof (str), "%d", nm_setting_wireless_get_channel (s_wireless));
+ value = str;
+ }
+
+ mode = nm_setting_wireless_get_mode (NM_SETTING_WIRELESS (object));
+ if (!mode || !*mode || strcmp (mode, NM_SETTING_WIRELESS_MODE_INFRA) == 0) {
+ printf (_("Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"),
+ nm_setting_get_name (NM_SETTING (s_wireless)), g_param_spec_get_name (pspec),
+ value);
+ }
+}
+
+void
+nmc_setting_ip4_connect_handlers (NMSettingIP4Config *setting)
+{
+ g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
+
+ g_signal_connect (setting, "notify::" NM_SETTING_IP4_CONFIG_ADDRESSES,
+ G_CALLBACK (ipv4_addresses_changed_cb), NULL);
+ g_signal_connect (setting, "notify::" NM_SETTING_IP4_CONFIG_METHOD,
+ G_CALLBACK (ipv4_method_changed_cb), NULL);
+}
+
+void
+nmc_setting_ip6_connect_handlers (NMSettingIP6Config *setting)
+{
+ g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
+
+ g_signal_connect (setting, "notify::" NM_SETTING_IP6_CONFIG_ADDRESSES,
+ G_CALLBACK (ipv6_addresses_changed_cb), NULL);
+ g_signal_connect (setting, "notify::" NM_SETTING_IP6_CONFIG_METHOD,
+ G_CALLBACK (ipv6_method_changed_cb), NULL);
+}
+
+void
+nmc_setting_wireless_connect_handlers (NMSettingWireless *setting)
+{
+ g_return_if_fail (NM_IS_SETTING_WIRELESS (setting));
+
+ g_signal_connect (setting, "notify::" NM_SETTING_WIRELESS_BAND,
+ G_CALLBACK (wireless_band_channel_changed_cb), NULL);
+ g_signal_connect (setting, "notify::" NM_SETTING_WIRELESS_CHANNEL,
+ G_CALLBACK (wireless_band_channel_changed_cb), NULL);
+}
+
+/*
+ * Customize some properties of the setting so that the setting has sensible
+ * values.
+ */
+void
+nmc_setting_custom_init (NMSetting *setting)
+{
+ g_return_if_fail (NM_IS_SETTING (setting));
+
+ if (NM_IS_SETTING_IP4_CONFIG (setting)) {
+ g_object_set (NM_SETTING_IP4_CONFIG (setting),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL);
+ nmc_setting_ip4_connect_handlers (NM_SETTING_IP4_CONFIG (setting));
+ } else if (NM_IS_SETTING_IP6_CONFIG (setting)) {
+ g_object_set (NM_SETTING_IP6_CONFIG (setting),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NULL);
+ nmc_setting_ip6_connect_handlers (NM_SETTING_IP6_CONFIG (setting));
+ } else if (NM_IS_SETTING_WIRELESS (setting)) {
+ g_object_set (NM_SETTING_WIRELESS (setting),
+ NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA,
+ NULL);
+ nmc_setting_wireless_connect_handlers (NM_SETTING_WIRELESS (setting));
+ }
+}
+
+/* === SetFunc, RemoveFunc, DescribeFunc, ValuesFunc functions === */
+static gboolean
+verify_string_list (char **strv,
+ const char *prop,
+ gboolean (*validate_func) (const char *),
+ GError **error)
+{
+ char **iter;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ for (iter = strv; iter && *iter; iter++) {
+ if (**iter == '\0')
+ continue;
+ if (validate_func) {
+ if (!validate_func (*iter)) {
+ g_set_error (error, 1, 0, _("'%s' is not valid"),
+ *iter);
+ return FALSE;
+ }
+ }
+ }
return TRUE;
}
-gboolean
-setting_wireless_security_details (NMSettingWirelessSecurity *s_wireless_sec, NmCli *nmc)
+/* Validate 'val' number against to int property spec */
+static gboolean
+validate_int (NMSetting *setting, const char* prop, gint val, GError **error)
{
- int i;
- char *wep_tx_keyidx_str, *wep_key_type_str, *wep_flags, *psk_flags, *leap_flags;
- GString *protos, *pairwises, *groups;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ GParamSpec *pspec;
+ GValue value = G_VALUE_INIT;
+ gboolean success = TRUE;
+
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, val);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop);
+ g_assert (G_IS_PARAM_SPEC (pspec));
+ if (g_param_value_validate (pspec, &value)) {
+ GParamSpecInt *pspec_int = (GParamSpecInt *) pspec;
+ g_set_error (error, 1, 0, _("'%d' is not valid; use <%d-%d>"),
+ val, pspec_int->minimum, pspec_int->maximum);
+ success = FALSE;
+ }
+ g_value_unset (&value);
+ return success;
+}
- g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (s_wireless_sec), FALSE);
+/* Validate 'val' number against to uint property spec */
+static gboolean
+validate_uint (NMSetting *setting, const char* prop, guint val, GError **error)
+{
+ GParamSpec *pspec;
+ GValue value = G_VALUE_INIT;
+ gboolean success = TRUE;
+
+ g_value_init (&value, G_TYPE_UINT);
+ g_value_set_uint (&value, val);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop);
+ g_assert (G_IS_PARAM_SPEC (pspec));
+ if (g_param_value_validate (pspec, &value)) {
+ GParamSpecUInt *pspec_uint = (GParamSpecUInt *) pspec;
+ g_set_error (error, 1, 0, _("'%u' is not valid; use <%d-%d>"),
+ val, pspec_uint->minimum, pspec_uint->maximum);
+ success = FALSE;
+ }
+ g_value_unset (&value);
+ return success;
+}
+
+static gboolean
+check_and_set_string (NMSetting *setting,
+ const char *prop,
+ const char *val,
+ const char **valid_strv,
+ GError **error)
+{
+ const char *checked_val;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- nmc->allowed_fields = nmc_fields_setting_wireless_security;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_WIRELESS_SECURITY_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
-
- wep_tx_keyidx_str = g_strdup_printf ("%d", nm_setting_wireless_security_get_wep_tx_keyidx (s_wireless_sec));
- protos = g_string_new (NULL);
- for (i = 0; i < nm_setting_wireless_security_get_num_protos (s_wireless_sec); i++) {
- if (i > 0)
- g_string_append_c (protos, ',');
- g_string_append (protos, nm_setting_wireless_security_get_proto (s_wireless_sec, i));
- }
- pairwises = g_string_new (NULL);
- for (i = 0; i < nm_setting_wireless_security_get_num_pairwise (s_wireless_sec); i++) {
- if (i > 0)
- g_string_append_c (pairwises, ',');
- g_string_append (pairwises, nm_setting_wireless_security_get_pairwise (s_wireless_sec, i));
- }
- groups = g_string_new (NULL);
- for (i = 0; i < nm_setting_wireless_security_get_num_groups (s_wireless_sec); i++) {
- if (i > 0)
- g_string_append_c (groups, ',');
- g_string_append (groups, nm_setting_wireless_security_get_group (s_wireless_sec, i));
- }
- wep_key_type_str = wep_key_type_to_string (nm_setting_wireless_security_get_wep_key_type (s_wireless_sec));
-
- wep_flags = secret_flags_to_string (nm_setting_wireless_security_get_wep_key_flags (s_wireless_sec));
- psk_flags = secret_flags_to_string (nm_setting_wireless_security_get_psk_flags (s_wireless_sec));
- leap_flags = secret_flags_to_string (nm_setting_wireless_security_get_leap_password_flags (s_wireless_sec));
-
- nmc->allowed_fields[0].value = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
- nmc->allowed_fields[2].value = wep_tx_keyidx_str;
- nmc->allowed_fields[3].value = nm_setting_wireless_security_get_auth_alg (s_wireless_sec);
- nmc->allowed_fields[4].value = protos->str;
- nmc->allowed_fields[5].value = pairwises->str;
- nmc->allowed_fields[6].value = groups->str;
- nmc->allowed_fields[7].value = nm_setting_wireless_security_get_leap_username (s_wireless_sec);
- nmc->allowed_fields[8].value = nm_setting_wireless_security_get_wep_key (s_wireless_sec, 0);
- nmc->allowed_fields[9].value = nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1);
- nmc->allowed_fields[10].value = nm_setting_wireless_security_get_wep_key (s_wireless_sec, 2);
- nmc->allowed_fields[11].value = nm_setting_wireless_security_get_wep_key (s_wireless_sec, 3);
- nmc->allowed_fields[12].value = wep_flags;
- nmc->allowed_fields[13].value = wep_key_type_str;
- nmc->allowed_fields[14].value = nm_setting_wireless_security_get_psk (s_wireless_sec);
- nmc->allowed_fields[15].value = psk_flags;
- nmc->allowed_fields[16].value = nm_setting_wireless_security_get_leap_password (s_wireless_sec);
- nmc->allowed_fields[17].value = leap_flags;
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
-
- g_free (wep_tx_keyidx_str);
- g_free (wep_key_type_str);
- g_free (wep_flags);
- g_free (psk_flags);
- g_free (leap_flags);
- g_string_free (protos, TRUE);
- g_string_free (pairwises, TRUE);
- g_string_free (groups, TRUE);
+ checked_val = nmc_string_is_valid (val, valid_strv, error);
+ if (!checked_val)
+ return FALSE;
+ g_object_set (setting, prop, checked_val, NULL);
return TRUE;
}
-gboolean
-setting_ip4_config_details (NMSettingIP4Config *s_ip4, NmCli *nmc)
+#define DEFINE_SETTER_STR_LIST_MULTI(def_func, s_macro, set_func) \
+ static gboolean \
+ def_func (NMSetting *setting, \
+ const char *prop, \
+ const char *val, \
+ const char **valid_strv, \
+ GError **error) \
+ { \
+ char **strv = NULL, **iter; \
+ const char *item; \
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); \
+ strv = nmc_strsplit_set (val, " \t,", 0); \
+ for (iter = strv; iter && *iter; iter++) { \
+ if (!(item = nmc_string_is_valid (g_strstrip (*iter), valid_strv, error))) { \
+ g_strfreev (strv); \
+ return FALSE; \
+ } \
+ set_func (s_macro (setting), item); \
+ } \
+ g_strfreev (strv); \
+ return TRUE; \
+ }
+
+#define DEFINE_SETTER_OPTIONS(def_func, s_macro, s_type, add_func, valid_func1, valid_func2) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \
+ { \
+ char **strv = NULL, **iter; \
+ const char **(*valid_func1_p) (s_type *) = valid_func1; \
+ const char * (*valid_func2_p) (const char *, const char *, GError **) = valid_func2; \
+ const char *opt_name, *opt_val; \
+ \
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); \
+ \
+ strv = nmc_strsplit_set (val, ",", 0); \
+ for (iter = strv; iter && *iter; iter++) { \
+ char *left = g_strstrip (*iter); \
+ char *right = strchr (left, '='); \
+ if (!right) { \
+ g_set_error (error, 1, 0, _("'%s' is not valid; use <option>=<value>"), *iter); \
+ g_strfreev (strv); \
+ return FALSE; \
+ } \
+ *right++ = '\0'; \
+ \
+ if (valid_func1_p) { \
+ const char **valid_options = valid_func1_p (s_macro (setting)); \
+ if (!(opt_name = nmc_string_is_valid (g_strstrip (left), valid_options, error))) { \
+ g_strfreev (strv); \
+ return FALSE; \
+ } \
+ } else \
+ opt_name = g_strstrip (left);\
+ \
+ opt_val = g_strstrip (right); \
+ if (valid_func2_p) { \
+ if (!(opt_val = valid_func2_p ((const char *) left, (const char *) opt_val, error))) { \
+ g_strfreev (strv); \
+ return FALSE; \
+ }\
+ }\
+ add_func (s_macro (setting), opt_name, opt_val); \
+ } \
+ g_strfreev (strv); \
+ return TRUE; \
+ }
+
+#define DEFINE_REMOVER_INDEX(def_func, s_macro, num_func, rem_func) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *option, guint32 idx, GError **error) \
+ { \
+ guint32 num; \
+ if (option) { \
+ g_set_error (error, 1, 0, _("index '%s' is not valid"), option); \
+ return FALSE; \
+ } \
+ num = num_func (s_macro (setting)); \
+ if (num == 0) { \
+ g_set_error_literal (error, 1, 0, _("no item to remove")); \
+ return FALSE; \
+ } \
+ if (idx >= num) { \
+ g_set_error (error, 1, 0, _("index '%d' is not in range <0-%d>"), idx, num - 1); \
+ return FALSE; \
+ } \
+ rem_func (s_macro (setting), idx); \
+ return TRUE; \
+ }
+
+#define DEFINE_REMOVER_INDEX_OR_VALUE(def_func, s_macro, num_func, rem_func_idx, rem_func_val) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *value, guint32 idx, GError **error) \
+ { \
+ guint32 num; \
+ if (value) { \
+ gboolean ret; \
+ char *value_stripped = g_strstrip (g_strdup (value)); \
+ ret = rem_func_val (s_macro (setting), value_stripped, error); \
+ g_free (value_stripped); \
+ return ret; \
+ } \
+ num = num_func (s_macro (setting)); \
+ if (num == 0) { \
+ g_set_error_literal (error, 1, 0, _("no item to remove")); \
+ return FALSE; \
+ } \
+ if (idx >= num) { \
+ g_set_error (error, 1, 0, _("index '%d' is not in range <0-%d>"), idx, num - 1); \
+ return FALSE; \
+ } \
+ rem_func_idx (s_macro (setting), idx); \
+ return TRUE; \
+ }
+
+#define DEFINE_REMOVER_OPTION(def_func, s_macro, rem_func) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *option, guint32 idx, GError **error) \
+ { \
+ gboolean success = FALSE; \
+ if (option && *option) { \
+ success = rem_func (s_macro (setting), option); \
+ if (!success) \
+ g_set_error (error, 1, 0, _("invalid option '%s'"), option); \
+ } else \
+ g_set_error_literal (error, 1, 0, _("missing option")); \
+ return success; \
+ }
+
+#define DEFINE_ALLOWED_VAL_FUNC(def_func, valid_values) \
+ static const char * \
+ def_func (NMSetting *setting, const char *prop) \
+ { \
+ static char *values = NULL; \
+ if (G_UNLIKELY (values == NULL)) \
+ values = g_strjoinv (", ", (char **) valid_values); \
+ return values; \
+ }
+
+/* --- generic property setter functions --- */
+static gboolean
+nmc_property_set_string (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- GString *dns_str, *dns_search_str, *addr_str, *route_str;
- int i, num;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ g_object_set (setting, prop, val, NULL);
+ return TRUE;
+}
- g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (s_ip4), FALSE);
+static gboolean
+nmc_property_set_int (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ long val_int;
- nmc->allowed_fields = nmc_fields_setting_ip4_config;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_IP4_CONFIG_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- dns_str = g_string_new (NULL);
- num = nm_setting_ip4_config_get_num_dns (s_ip4);
- for (i = 0; i < num; i++) {
- char buf[INET_ADDRSTRLEN];
- guint32 ip;
-
- ip = nm_setting_ip4_config_get_dns (s_ip4, i);
- memset (buf, 0, sizeof (buf));
- inet_ntop (AF_INET, (const void *) &ip, buf, sizeof (buf));
- if (i > 0)
- g_string_append (dns_str, ", ");
- g_string_append (dns_str, buf);
+ if (!nmc_string_to_int (val, TRUE, G_MININT, G_MAXINT, &val_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid number (or out of range)"), val);
+ return FALSE;
}
- dns_search_str = g_string_new (NULL);
- num = nm_setting_ip4_config_get_num_dns_searches (s_ip4);
- for (i = 0; i < num; i++) {
- const char *domain;
-
- domain = nm_setting_ip4_config_get_dns_search (s_ip4, i);
- if (i > 0)
- g_string_append (dns_search_str, ", ");
- g_string_append (dns_search_str, domain);
+ /* Validate the number according to the property spec */
+ if (!validate_int (setting, prop, (gint) val_int, error))
+ return FALSE;
+
+ g_object_set (setting, prop, val_int, NULL);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_set_uint (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ unsigned long val_int;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_string_to_uint (val, TRUE, 0, G_MAXUINT, &val_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid number (or out of range)"), val);
+ return FALSE;
+ }
+
+ /* Validate the number according to the property spec */
+ if (!validate_uint (setting, prop, (guint) val_int, error))
+ return FALSE;
+
+ g_object_set (setting, prop, val_int, NULL);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_set_bool (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ gboolean val_bool;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_string_to_bool (val, &val_bool, error))
+ return FALSE;
+
+ g_object_set (setting, prop, val_bool, NULL);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_set_ssid (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ GByteArray *ssid_arr;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (strlen (val) > 32) {
+ g_set_error (error, 1, 0, _("'%s' is not valid"), val);
+ return FALSE;
}
- addr_str = g_string_new (NULL);
- num = nm_setting_ip4_config_get_num_addresses (s_ip4);
- for (i = 0; i < num; i++) {
- char buf[INET_ADDRSTRLEN];
- char *tmp;
- NMIP4Address *addr;
- guint32 ip;
+ ssid_arr = g_byte_array_sized_new (strlen (val));
+ g_byte_array_append (ssid_arr, (const guint8 *) val, strlen (val));
+ g_object_set (setting, prop, ssid_arr, NULL);
+
+ return TRUE;
+}
+
+static gboolean
+nmc_property_set_mac (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ GByteArray *array;
- if (i > 0)
- g_string_append (addr_str, "; ");
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- g_string_append (addr_str, "{ ");
+ array = nm_utils_hwaddr_atoba (val, ARPHRD_ETHER);
+ if (!array) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid Ethernet MAC"), val);
+ return FALSE;
+ }
- addr = nm_setting_ip4_config_get_address (s_ip4, i);
+ g_object_set (setting, prop, array, NULL);
+ g_byte_array_free (array, TRUE);
+ return TRUE;
+}
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_address_get_address (addr);
- inet_ntop (AF_INET, (const void *) &ip, buf, sizeof (buf));
- g_string_append_printf (addr_str, "ip = %s", buf);
+static gboolean
+nmc_property_set_mtu (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ const char *mtu = val;
- tmp = g_strdup_printf ("/%u", nm_ip4_address_get_prefix (addr));
- g_string_append (addr_str, tmp);
- g_free (tmp);
+ if (strcmp (mtu, "auto") == 0)
+ mtu = "0";
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_address_get_gateway (addr);
- inet_ntop (AF_INET, (const void *) &ip, buf, sizeof (buf));
- g_string_append_printf (addr_str, ", gw = %s", buf);
+ return nmc_property_set_uint (setting, prop, mtu, error);
+}
- g_string_append (addr_str, " }");
+static gboolean
+nmc_property_set_ifname (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nm_utils_iface_valid_name (val)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid interface name"), val);
+ return FALSE;
+ }
+ g_object_set (setting, prop, val, NULL);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_set_flags (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ unsigned long flags = 0, val_int;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ if (!nmc_string_to_uint (*iter, TRUE, 0, G_MAXUINT32, &val_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a number"), *iter);
+ g_strfreev (strv);
+ return FALSE;
+ }
+ flags += val_int;
}
+ g_strfreev (strv);
- route_str = g_string_new (NULL);
- num = nm_setting_ip4_config_get_num_routes (s_ip4);
- for (i = 0; i < num; i++) {
- char buf[INET_ADDRSTRLEN];
- char *tmp;
- NMIP4Route *route;
- guint32 ip;
+ /* Validate the number according to the property spec */
+ if (!validate_uint (setting, prop, (guint) flags, error))
+ return FALSE;
- if (i > 0)
- g_string_append (route_str, "; ");
+ g_object_set (setting, prop, (guint) flags, NULL);
+ return TRUE;
+}
+
+static gboolean
+nmc_util_is_domain (const char *domain)
+{
+ //FIXME: implement
+ return TRUE;
+}
+
+static gboolean
+nmc_property_set_byte_array (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ char *val_strip;
+ const char *delimiters = " \t,";
+ long int val_int;
+ char *bin;
+ GByteArray *array = NULL;
+ gboolean success = TRUE;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ val_strip = g_strstrip (g_strdup (val));
+
+ /* First try hex string in the format of AAbbCCDd */
+ bin = nm_utils_hexstr2bin (val_strip, strlen (val_strip));
+ if (bin) {
+ array = g_byte_array_sized_new (strlen (val_strip)/2);
+ g_byte_array_append (array, (const guint8 *) bin, strlen (val_strip)/2);
+ g_free (bin);
+ goto done;
+ }
+
+ /* Otherwise, consider the following format: AA b 0xCc D */
+ strv = nmc_strsplit_set (val_strip, delimiters, 0);
+ array = g_byte_array_sized_new (g_strv_length (strv));
+ for (iter = strv; iter && *iter; iter++) {
+ if (!nmc_string_to_int_base (g_strstrip (*iter), 16, TRUE, 0, 255, &val_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid hex character"), *iter);
+ success = FALSE;
+ goto done;
+ }
+ g_byte_array_append (array, (const guint8 *) &val_int, 1);
+ }
- g_string_append (route_str, "{ ");
+done:
+ if (success)
+ g_object_set (setting, prop, array, NULL);
- route = nm_setting_ip4_config_get_route (s_ip4, i);
+ g_strfreev (strv);
+ if (array)
+ g_byte_array_free (array, TRUE);
+ return success;
+}
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_route_get_dest (route);
- inet_ntop (AF_INET, (const void *) &ip, buf, sizeof (buf));
- g_string_append_printf (route_str, "dst = %s", buf);
+#define DEFINE_SETTER_MAC_BLACKLIST(def_func, s_macro, add_func) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \
+ { \
+ guint8 buf[32]; \
+ char **list = NULL, **iter; \
+ GSList *macaddr_blacklist = NULL; \
+ \
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); \
+ \
+ list = nmc_strsplit_set (val, " \t,", 0); \
+ for (iter = list; iter && *iter; iter++) { \
+ if (!nm_utils_hwaddr_aton (*iter, ARPHRD_ETHER, buf)) { \
+ g_set_error (error, 1, 0, _("'%s' is not a valid MAC"), *iter); \
+ g_strfreev (list); \
+ g_slist_free (macaddr_blacklist); \
+ return FALSE; \
+ } \
+ } \
+ \
+ for (iter = list; iter && *iter; iter++) \
+ add_func (s_macro (setting), *iter); \
+ \
+ g_strfreev (list); \
+ return TRUE; \
+ }
- tmp = g_strdup_printf ("/%u", nm_ip4_route_get_prefix (route));
- g_string_append (route_str, tmp);
- g_free (tmp);
+static char *
+nmc_property_out2in_cut_paren (const char *out_format)
+{
+ const char *p;
+ size_t n;
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_route_get_next_hop (route);
- inet_ntop (AF_INET, (const void *) &ip, buf, sizeof (buf));
- g_string_append_printf (route_str, ", nh = %s", buf);
+ p = strstr (out_format, " (");
+ n = p ? p - out_format : strlen (out_format);
+ return g_strndup (out_format, n);
+}
- tmp = g_strdup_printf (", mt = %u", nm_ip4_route_get_metric (route));
- g_string_append (route_str, tmp);
- g_free (tmp);
+/* --- NM_SETTING_CONNECTION_SETTING_NAME property setter functions --- */
+#if 0
+/*
+ * Setting/removing UUID has been forbidden.
+ * Should it be enabled later, this function can be used.
+ */
+static gboolean
+nmc_property_con_set_uuid (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- g_string_append (route_str, " }");
+ if (!nm_utils_is_uuid (val)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid UUID"), val);
+ return FALSE;
}
+ g_object_set (setting, prop, val, NULL);
+ return TRUE;
+}
+#endif
- nmc->allowed_fields[0].value = NM_SETTING_IP4_CONFIG_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_ip4_config_get_method (s_ip4);
- nmc->allowed_fields[2].value = dns_str->str;
- nmc->allowed_fields[3].value = dns_search_str->str;
- nmc->allowed_fields[4].value = addr_str->str;
- nmc->allowed_fields[5].value = route_str->str;
- nmc->allowed_fields[6].value = nm_setting_ip4_config_get_ignore_auto_routes (s_ip4) ? _("yes") : _("no");
- nmc->allowed_fields[7].value = nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) ? _("yes") : _("no");
- nmc->allowed_fields[8].value = nm_setting_ip4_config_get_dhcp_client_id (s_ip4);
- nmc->allowed_fields[9].value = nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4) ? _("yes") : _("no");
- nmc->allowed_fields[10].value = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
- nmc->allowed_fields[11].value = nm_setting_ip4_config_get_never_default (s_ip4) ? _("yes") : _("no");
- nmc->allowed_fields[12].value = nm_setting_ip4_config_get_may_fail (s_ip4) ? _("yes") : _("no");
+/* 'permissions' */
+/* define from libnm-util/nm-setting-connection.c */
+#define PERM_USER_PREFIX "user:"
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+static gboolean
+permissions_valid (const char *perm)
+{
+ if (!perm || perm[0] == '\0')
+ return FALSE;
- g_string_free (dns_str, TRUE);
- g_string_free (dns_search_str, TRUE);
- g_string_free (addr_str, TRUE);
- g_string_free (route_str, TRUE);
+ if (strncmp (perm, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0) {
+ if ( strlen (perm) <= strlen (PERM_USER_PREFIX)
+ || strchr (perm + strlen (PERM_USER_PREFIX), ':'))
+ return FALSE;
+ } else {
+ if (strchr (perm, ':'))
+ return FALSE;
+ }
return TRUE;
}
-gboolean
-setting_ip6_config_details (NMSettingIP6Config *s_ip6, NmCli *nmc)
+static gboolean
+nmc_property_connection_set_permissions (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- GString *dns_str, *dns_search_str, *addr_str, *route_str;
- char *ip6_privacy_str;
- int i, num;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ char **strv = NULL;
+ guint i = 0;
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (s_ip6), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- nmc->allowed_fields = nmc_fields_setting_ip6_config;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_IP6_CONFIG_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ if (!verify_string_list (strv, prop, permissions_valid, error)) {
+ g_strfreev (strv);
+ return FALSE;
+ }
+
+ for (i = 0; strv && strv[i]; i++) {
+ const char *user;
- dns_str = g_string_new (NULL);
- num = nm_setting_ip6_config_get_num_dns (s_ip6);
- for (i = 0; i < num; i++) {
- char buf[INET6_ADDRSTRLEN];
- const struct in6_addr *ip;
+ if (strncmp (strv[i], PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0)
+ user = strv[i]+strlen (PERM_USER_PREFIX);
+ else
+ user = strv[i];
- ip = nm_setting_ip6_config_get_dns (s_ip6, i);
- memset (buf, 0, sizeof (buf));
- inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
- if (i > 0)
- g_string_append (dns_str, ", ");
- g_string_append (dns_str, buf);
+ nm_setting_connection_add_permission (NM_SETTING_CONNECTION (setting), "user", user, NULL);
}
- dns_search_str = g_string_new (NULL);
- num = nm_setting_ip6_config_get_num_dns_searches (s_ip6);
- for (i = 0; i < num; i++) {
- const char *domain;
+ return TRUE;
+}
+
+static gboolean
+_validate_and_remove_connection_permission (NMSettingConnection *setting,
+ const char *perm,
+ GError **error)
+{
+ gboolean ret;
+
+ ret = nm_setting_connection_remove_permission_by_value (setting, "user", perm, NULL);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain permission '%s'"), perm);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_connection_remove_permissions,
+ NM_SETTING_CONNECTION,
+ nm_setting_connection_get_num_permissions,
+ nm_setting_connection_remove_permission,
+ _validate_and_remove_connection_permission)
+
+static const char *
+nmc_property_connection_describe_permissions (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of user permissions. This is a list of user names formatted as:\n"
+ " [user:]<user name 1>, [user:]<user name 2>,...\n"
+ "The items can be separated by commas or spaces.\n\n"
+ "Example: alice bob charlie\n");
+}
+
+/* 'master' */
+static gboolean
+nmc_property_con_set_master (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!val)
+ ;
+ else if (!*val)
+ val = NULL;
+ else if ( !nm_utils_iface_valid_name (val)
+ && !nm_utils_is_uuid (val)) {
+ g_set_error (error, 1, 0,
+ _("'%s' is not valid master; use ifname or connection UUID"),
+ val);
+ return FALSE;
+ }
+ g_object_set (setting, prop, val, NULL);
+ return TRUE;
+}
+
+/* 'slave-type' */
+static const char *con_valid_slave_types[] = {
+ NM_SETTING_BOND_SETTING_NAME,
+ NM_SETTING_BRIDGE_SETTING_NAME,
+ NM_SETTING_VLAN_SETTING_NAME,
+ NULL
+};
+
+static gboolean
+nmc_property_con_set_slave_type (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, con_valid_slave_types, error);
+}
+
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_con_allowed_slave_type, con_valid_slave_types)
- domain = nm_setting_ip6_config_get_dns_search (s_ip6, i);
- if (i > 0)
- g_string_append (dns_search_str, ", ");
- g_string_append (dns_search_str, domain);
+/* 'secondaries' */
+static gboolean
+nmc_property_connection_set_secondaries (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ NMConnection *con;
+ char **strv = NULL, **iter;
+ guint i = 0;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ if (**iter == '\0')
+ continue;
+
+ if (nm_utils_is_uuid (*iter)) {
+ con = nmc_find_connection (nm_cli.system_connections,
+ "uuid", *iter, NULL);
+ if (!con)
+ printf (_("Warning: %s is not an UUID of any existing connection profile\n"), *iter);
+ else {
+ /* Currenly NM only supports VPN connections as secondaries */
+ if (!nm_connection_is_type (con, NM_SETTING_VPN_SETTING_NAME)) {
+ g_set_error (error, 1, 0, _("'%s' is not a VPN connection profile"), *iter);
+ g_strfreev (strv);
+ return FALSE;
+ }
+ }
+ } else {
+ con = nmc_find_connection (nm_cli.system_connections,
+ "id", *iter, NULL);
+ if (!con) {
+ g_set_error (error, 1, 0, _("'%s' is not a name of any exiting profile"), *iter);
+ g_strfreev (strv);
+ return FALSE;
+ }
+
+ /* Currenly NM only supports VPN connections as secondaries */
+ if (!nm_connection_is_type (con, NM_SETTING_VPN_SETTING_NAME)) {
+ g_set_error (error, 1, 0, _("'%s' is not a VPN connection profile"), *iter);
+ g_strfreev (strv);
+ return FALSE;
+ }
+
+ /* translate id to uuid */
+ g_free (*iter);
+ *iter = g_strdup (nm_connection_get_uuid (con));
+ }
}
- addr_str = g_string_new (NULL);
- num = nm_setting_ip6_config_get_num_addresses (s_ip6);
- for (i = 0; i < num; i++) {
- char buf[INET6_ADDRSTRLEN];
- char *tmp;
- NMIP6Address *addr;
- const struct in6_addr *ip;
+ while (strv && strv[i])
+ nm_setting_connection_add_secondary (NM_SETTING_CONNECTION (setting), strv[i++]);
+ g_strfreev (strv);
- if (i > 0)
- g_string_append (addr_str, "; ");
+ return TRUE;
+}
- g_string_append (addr_str, "{ ");
+static gboolean
+_validate_and_remove_connection_secondary (NMSettingConnection *setting,
+ const char *secondary_uuid,
+ GError **error)
+{
+ gboolean ret;
- addr = nm_setting_ip6_config_get_address (s_ip6, i);
+ if (!nm_utils_is_uuid (secondary_uuid)) {
+ g_set_error (error, 1, 0,
+ _("the value '%s' is not a valid UUID"), secondary_uuid);
+ return FALSE;
+ }
- memset (buf, 0, sizeof (buf));
- ip = nm_ip6_address_get_address (addr);
- inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
- g_string_append_printf (addr_str, "ip = %s", buf);
+ ret = nm_setting_connection_remove_secondary_by_value (setting, secondary_uuid);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain UUID '%s'"), secondary_uuid);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_connection_remove_secondaries,
+ NM_SETTING_CONNECTION,
+ nm_setting_connection_get_num_secondaries,
+ nm_setting_connection_remove_secondary,
+ _validate_and_remove_connection_secondary)
+
+static const char *
+nmc_property_connection_describe_secondaries (NMSetting *setting, const char *prop)
+{
+ return _("Enter secondary connections that should be activated when this connection is\n"
+ "activated. Connections can be specified either by UUID or ID (name). nmcli\n"
+ "transparently translates names to UUIDs. Note that NetworkManager only supports\n"
+ "VPNs as secondary connections at the moment.\n"
+ "The items can be separated by commas or spaces.\n\n"
+ "Example: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n");
+}
- tmp = g_strdup_printf ("/%u", nm_ip6_address_get_prefix (addr));
- g_string_append (addr_str, tmp);
- g_free (tmp);
+/* --- NM_SETTING_802_1X_SETTING_NAME property setter functions --- */
+#define DEFINE_SETTER_STR_LIST(def_func, set_func) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \
+ { \
+ char **strv = NULL; \
+ guint i = 0; \
+ \
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); \
+ \
+ strv = nmc_strsplit_set (val, " \t,", 0); \
+ while (strv && strv[i]) \
+ set_func (NM_SETTING_802_1X (setting), strv[i++]); \
+ g_strfreev (strv); \
+ return TRUE; \
+ }
- memset (buf, 0, sizeof (buf));
- ip = nm_ip6_address_get_gateway (addr);
- inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
- g_string_append_printf (addr_str, ", gw = %s", buf);
+#define DEFINE_SETTER_CERT(def_func, set_func) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \
+ { \
+ const char *SCHEME_PATH = "file://"; \
+ char *val_strip = g_strstrip (g_strdup (val)); \
+ char *p = val_strip; \
+ gboolean success; \
+ \
+ if (strncmp (val_strip, SCHEME_PATH, strlen (SCHEME_PATH)) == 0) \
+ p += strlen (SCHEME_PATH); \
+ \
+ success = set_func (NM_SETTING_802_1X (setting), \
+ p, \
+ NM_SETTING_802_1X_CK_SCHEME_PATH, \
+ NULL, \
+ error); \
+ g_free (val_strip); \
+ return success; \
+ }
- g_string_append (addr_str, " }");
+#define DEFINE_SETTER_PRIV_KEY(def_func, pwd_func, set_func) \
+ static gboolean \
+ def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \
+ { \
+ char **strv = NULL; \
+ const char *SCHEME_PATH = "file://"; \
+ char *val_strip = g_strstrip (g_strdup (val)); \
+ char *p = val_strip; \
+ const char *path, *password; \
+ gboolean success; \
+ \
+ if (strncmp (val_strip, SCHEME_PATH, strlen (SCHEME_PATH)) == 0) \
+ p += strlen (SCHEME_PATH); \
+ \
+ strv = nmc_strsplit_set (p, " \t,", 2); \
+ path = strv[0]; \
+ if (g_strv_length (strv) == 2) \
+ password = strv[1]; \
+ else \
+ password = pwd_func (NM_SETTING_802_1X (setting)); \
+ if (password) { \
+ char *tmp_pwd = g_strdup (password); \
+ success = set_func (NM_SETTING_802_1X (setting), \
+ path, \
+ tmp_pwd, \
+ NM_SETTING_802_1X_CK_SCHEME_PATH, \
+ NULL, \
+ error); \
+ g_free (tmp_pwd); \
+ } else { \
+ success = FALSE; \
+ g_set_error_literal (error, 1, 0, _("private key password not provided")); \
+ } \
+ g_free (val_strip); \
+ g_strfreev (strv); \
+ return success; \
}
- route_str = g_string_new (NULL);
- num = nm_setting_ip6_config_get_num_routes (s_ip6);
- for (i = 0; i < num; i++) {
- char buf[INET6_ADDRSTRLEN];
- char *tmp;
- NMIP6Route *route;
- const struct in6_addr *ip;
+/* 'eap' */
+DEFINE_SETTER_STR_LIST_MULTI (check_and_add_802_1X_eap,
+ NM_SETTING_802_1X,
+ nm_setting_802_1x_add_eap_method)
+static gboolean
+nmc_property_802_1X_set_eap (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ const char *valid_eap[] = { "leap", "md5", "tls", "peap", "ttls", "sim", "fast", "pwd", NULL };
+ return check_and_add_802_1X_eap (setting, prop, val, valid_eap, error);
+}
+
+static gboolean
+_validate_and_remove_eap_method (NMSetting8021x *setting,
+ const char *eap,
+ GError **error)
+{
+ gboolean ret;
+
+ ret = nm_setting_802_1x_remove_eap_method_by_value(setting, eap);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain EAP method '%s'"), eap);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_802_1X_remove_eap,
+ NM_SETTING_802_1X,
+ nm_setting_802_1x_get_num_eap_methods,
+ nm_setting_802_1x_remove_eap_method,
+ _validate_and_remove_eap_method)
+
+/* 'ca-cert' */
+DEFINE_SETTER_CERT (nmc_property_802_1X_set_ca_cert, nm_setting_802_1x_set_ca_cert)
+
+/* 'altsubject-matches' */
+DEFINE_SETTER_STR_LIST (nmc_property_802_1X_set_altsubject_matches, nm_setting_802_1x_add_altsubject_match)
+
+static gboolean
+_validate_and_remove_altsubject_match (NMSetting8021x *setting,
+ const char *altsubject_match,
+ GError **error)
+{
+ gboolean ret;
+
+ ret = nm_setting_802_1x_remove_altsubject_match_by_value (setting, altsubject_match);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain alternative subject match '%s'"),
+ altsubject_match);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_802_1X_remove_altsubject_matches,
+ NM_SETTING_802_1X,
+ nm_setting_802_1x_get_num_altsubject_matches,
+ nm_setting_802_1x_remove_altsubject_match,
+ _validate_and_remove_altsubject_match)
+
+/* 'client-cert' */
+DEFINE_SETTER_CERT (nmc_property_802_1X_set_client_cert, nm_setting_802_1x_set_client_cert)
+
+/* 'phase2-ca-cert' */
+DEFINE_SETTER_CERT (nmc_property_802_1X_set_phase2_ca_cert, nm_setting_802_1x_set_phase2_ca_cert)
+
+/* 'phase2-altsubject-matches' */
+DEFINE_SETTER_STR_LIST (nmc_property_802_1X_set_phase2_altsubject_matches, nm_setting_802_1x_add_phase2_altsubject_match)
+
+static gboolean
+_validate_and_remove_phase2_altsubject_match (NMSetting8021x *setting,
+ const char *phase2_altsubject_match,
+ GError **error)
+{
+ gboolean ret;
+
+ ret = nm_setting_802_1x_remove_phase2_altsubject_match_by_value (setting, phase2_altsubject_match);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain \"phase2\" alternative subject match '%s'"),
+ phase2_altsubject_match);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_802_1X_remove_phase2_altsubject_matches,
+ NM_SETTING_802_1X,
+ nm_setting_802_1x_get_num_phase2_altsubject_matches,
+ nm_setting_802_1x_remove_phase2_altsubject_match,
+ _validate_and_remove_phase2_altsubject_match)
+
+/* 'phase2-client-cert' */
+DEFINE_SETTER_CERT (nmc_property_802_1X_set_phase2_client_cert, nm_setting_802_1x_set_phase2_client_cert)
+
+/* 'private-key' */
+DEFINE_SETTER_PRIV_KEY (nmc_property_802_1X_set_private_key,
+ nm_setting_802_1x_get_private_key_password,
+ nm_setting_802_1x_set_private_key)
+
+/* 'phase2-private-key' */
+DEFINE_SETTER_PRIV_KEY (nmc_property_802_1X_set_phase2_private_key,
+ nm_setting_802_1x_get_phase2_private_key_password,
+ nm_setting_802_1x_set_phase2_private_key)
+
+static const char *
+nmc_property_802_1X_describe_private_key (NMSetting *setting, const char *prop)
+{
+ return _("Enter path to a private key and the key password (if not set yet):\n"
+ " <file path> [<password>]\n"
+ "Example: /home/cimrman/jara-priv-key Dardanely\n");
+}
+
+/* 'phase1-peapver' */
+static const char *_802_1X_valid_phase1_peapvers[] = { "0", "1", NULL };
+
+static gboolean
+nmc_property_802_1X_set_phase1_peapver (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, _802_1X_valid_phase1_peapvers, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_802_1X_allowed_phase1_peapver, _802_1X_valid_phase1_peapvers)
+
+/* 'phase1-peaplabel' */
+static const char *_802_1X_valid_phase1_peaplabels[] = { "0", "1", NULL };
+
+static gboolean
+nmc_property_802_1X_set_phase1_peaplabel (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, _802_1X_valid_phase1_peaplabels, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_802_1X_allowed_phase1_peaplabel, _802_1X_valid_phase1_peaplabels)
+
+/* 'phase1-fast-provisioning' */
+static const char *_802_1X_valid_phase1_fast_provisionings[] = { "0", "1", "2", "3", NULL };
+
+static gboolean
+nmc_property_802_1X_set_phase1_fast_provisioning (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, _802_1X_valid_phase1_fast_provisionings, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_802_1X_allowed_phase1_fast_provisioning, _802_1X_valid_phase1_fast_provisionings)
+
+/* 'phase2-auth' */
+static const char *_802_1X_valid_phase2_auths[] =
+ { "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", "tls", NULL };
+
+static gboolean
+nmc_property_802_1X_set_phase2_auth (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, _802_1X_valid_phase2_auths, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_802_1X_allowed_phase2_auth, _802_1X_valid_phase2_auths)
+
+/* 'phase2-autheap' */
+static const char *_802_1X_valid_phase2_autheaps[] = { "md5", "mschapv2", "otp", "gtc", "tls", NULL };
+static gboolean
+nmc_property_802_1X_set_phase2_autheap (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, _802_1X_valid_phase2_autheaps, error);
+}
- if (i > 0)
- g_string_append (route_str, "; ");
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_802_1X_allowed_phase2_autheap, _802_1X_valid_phase2_autheaps)
- g_string_append (route_str, "{ ");
+/* 'password-raw' */
+static gboolean
+nmc_property_802_1X_set_password_raw (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return nmc_property_set_byte_array (setting, prop, val, error);
+}
- route = nm_setting_ip6_config_get_route (s_ip6, i);
+static const char *
+nmc_property_802_1X_describe_password_raw (NMSetting *setting, const char *prop)
+{
+ return _("Enter bytes as a list of hexadecimal values.\n"
+ "Two formats are accepted:\n"
+ "(a) a string of hexadecimal digits, where each two digits represent one byte\n"
+ "(b) space-separated list of bytes written as hexadecimal digits "
+ "(with optional 0x/0X prefix, and optional leading 0).\n\n"
+ "Examples: ab0455a6ea3a74C2\n"
+ " ab 4 55 0xa6 ea 3a 74 C2\n");
+}
- memset (buf, 0, sizeof (buf));
- ip = nm_ip6_route_get_dest (route);
- inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
- g_string_append_printf (route_str, "dst = %s", buf);
+/* --- NM_SETTING_ADSL_SETTING_NAME property setter functions --- */
+/* 'protocol' */
+static const char *adsl_valid_protocols[] = {
+ NM_SETTING_ADSL_PROTOCOL_PPPOA,
+ NM_SETTING_ADSL_PROTOCOL_PPPOE,
+ NM_SETTING_ADSL_PROTOCOL_IPOATM,
+ NULL
+};
- tmp = g_strdup_printf ("/%u", nm_ip6_route_get_prefix (route));
- g_string_append (route_str, tmp);
- g_free (tmp);
+static gboolean
+nmc_property_adsl_set_protocol (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, adsl_valid_protocols, error);
+}
- memset (buf, 0, sizeof (buf));
- ip = nm_ip6_route_get_next_hop (route);
- inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
- g_string_append_printf (route_str, ", nh = %s", buf);
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_adsl_allowed_protocol, adsl_valid_protocols)
- tmp = g_strdup_printf (", mt = %u", nm_ip6_route_get_metric (route));
- g_string_append (route_str, tmp);
- g_free (tmp);
+/* 'encapsulation' */
+static const char *adsl_valid_encapsulations[] = {
+ NM_SETTING_ADSL_ENCAPSULATION_VCMUX,
+ NM_SETTING_ADSL_ENCAPSULATION_LLC,
+ NULL
+};
- g_string_append (route_str, " }");
+static gboolean
+nmc_property_adsl_set_encapsulation (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, adsl_valid_encapsulations, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_adsl_allowed_encapsulation, adsl_valid_encapsulations)
+
+/* --- NM_SETTING_BLUETOOTH_SETTING_NAME property setter functions --- */
+/* 'type' */
+static gboolean
+nmc_property_bluetooth_set_type (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ const char *types[] = {
+ NM_SETTING_BLUETOOTH_TYPE_DUN,
+ NM_SETTING_BLUETOOTH_TYPE_PANU,
+ NULL };
+
+ return check_and_set_string (setting, prop, val, types, error);
+}
+
+/* --- NM_SETTING_BOND_SETTING_NAME property setter functions --- */
+/* 'options' */
+/* example: miimon=100,mode=balance-rr, updelay=5 */
+static gboolean
+_validate_and_remove_bond_option (NMSettingBond *setting, const char *option)
+{
+ const char *opt;
+ const char **valid_options;
+
+ valid_options = nm_setting_bond_get_valid_options (setting);
+ opt = nmc_string_is_valid (option, valid_options, NULL);
+
+ if (opt)
+ return nm_setting_bond_remove_option (setting, opt);
+ else
+ return FALSE;
+}
+
+/* Validate bonding 'options' values */
+static const char *
+_validate_bond_option_value (const char *option, const char *value, GError **error)
+{
+ if (!g_strcmp0 (option, NM_SETTING_BOND_OPTION_MODE))
+ return nmc_bond_validate_mode (value, error);
+
+ return value;
+}
+
+DEFINE_SETTER_OPTIONS (nmc_property_bond_set_options,
+ NM_SETTING_BOND,
+ NMSettingBond,
+ nm_setting_bond_add_option,
+ nm_setting_bond_get_valid_options,
+ _validate_bond_option_value)
+DEFINE_REMOVER_OPTION (nmc_property_bond_remove_option_options,
+ NM_SETTING_BOND,
+ _validate_and_remove_bond_option)
+
+static const char *
+nmc_property_bond_describe_options (NMSetting *setting, const char *prop)
+{
+ static char *desc = NULL;
+ const char **valid_options;
+ char *options_str;
+
+ if (G_UNLIKELY (desc == NULL)) {
+ valid_options = nm_setting_bond_get_valid_options (NM_SETTING_BOND (setting));
+ options_str = g_strjoinv (", ", (char **) valid_options);
+
+ desc = g_strdup_printf (_("Enter a list of bonding options formatted as:\n"
+ " option = <value>, option = <value>,... \n"
+ "Valid options are: %s\n"
+ "'mode' can be provided as a name or a number:\n"
+ "balance-rr = 0\n"
+ "active-backup = 1\n"
+ "balance-xor = 2\n"
+ "broadcast = 3\n"
+ "802.3ad = 4\n"
+ "balance-tlb = 5\n"
+ "balance-alb = 6\n\n"
+ "Example: mode=2,miimon=120\n"), options_str);
+ g_free (options_str);
}
+ return desc;
+}
+
+static const char *
+nmc_property_bond_allowed_options (NMSetting *setting, const char *prop)
+{
+ const char **valid_options;
+ static char *allowed_vals = NULL;
- ip6_privacy_str = ip6_privacy_to_string (nm_setting_ip6_config_get_ip6_privacy (s_ip6));
+ if (G_UNLIKELY (allowed_vals == NULL)) {
+ valid_options = nm_setting_bond_get_valid_options (NM_SETTING_BOND (setting));
+ allowed_vals = g_strjoinv (", ", (char **) valid_options);
+ }
+ return allowed_vals;
+}
- nmc->allowed_fields[0].value = NM_SETTING_IP6_CONFIG_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_ip6_config_get_method (s_ip6);
- nmc->allowed_fields[2].value = dns_str->str;
- nmc->allowed_fields[3].value = dns_search_str->str;
- nmc->allowed_fields[4].value = addr_str->str;
- nmc->allowed_fields[5].value = route_str->str;
- nmc->allowed_fields[6].value = nm_setting_ip6_config_get_ignore_auto_routes (s_ip6) ? _("yes") : _("no");
- nmc->allowed_fields[7].value = nm_setting_ip6_config_get_ignore_auto_dns (s_ip6) ? _("yes") : _("no");
- nmc->allowed_fields[8].value = nm_setting_ip6_config_get_never_default (s_ip6) ? _("yes") : _("no");
- nmc->allowed_fields[9].value = nm_setting_ip6_config_get_may_fail (s_ip6) ? _("yes") : _("no");
- nmc->allowed_fields[10].value = ip6_privacy_str;
- nmc->allowed_fields[11].value = nm_setting_ip6_config_get_dhcp_hostname (s_ip6);
+/* --- NM_SETTING_INFINIBAND_SETTING_NAME property setter functions --- */
+/* 'mac-addresss' */
+static gboolean
+nmc_property_ib_set_mac (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ GByteArray *array;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- g_string_free (dns_str, TRUE);
- g_string_free (dns_search_str, TRUE);
- g_string_free (addr_str, TRUE);
- g_string_free (route_str, TRUE);
- g_free (ip6_privacy_str);
+ array = nm_utils_hwaddr_atoba (val, ARPHRD_INFINIBAND);
+ if (!array) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid InfiniBand MAC"), val);
+ return FALSE;
+ }
+ g_object_set (setting, prop, array, NULL);
+ g_byte_array_free (array, TRUE);
return TRUE;
}
-gboolean
-setting_serial_details (NMSettingSerial *s_serial, NmCli *nmc)
+/* 'transport-mode' */
+static const char *ib_valid_transport_modes[] = { "datagram", "connected", NULL };
+
+static gboolean
+nmc_property_ib_set_transport_mode (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- char *baud_str, *bits_str, *parity_str, *stopbits_str, *send_delay_str;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ return check_and_set_string (setting, prop, val, ib_valid_transport_modes, error);
+}
- g_return_val_if_fail (NM_IS_SETTING_SERIAL (s_serial), FALSE);
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_ib_allowed_transport_mode, ib_valid_transport_modes)
- nmc->allowed_fields = nmc_fields_setting_serial;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_SERIAL_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+/* 'p-key' */
+static gboolean
+nmc_property_ib_set_p_key (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ gboolean p_key_valid = FALSE;
+ long p_key_int;
- baud_str = g_strdup_printf ("%d", nm_setting_serial_get_baud (s_serial));
- bits_str = g_strdup_printf ("%d", nm_setting_serial_get_bits (s_serial));
- parity_str = g_strdup_printf ("%c", nm_setting_serial_get_parity (s_serial));
- stopbits_str = g_strdup_printf ("%d", nm_setting_serial_get_stopbits (s_serial));
- send_delay_str = g_strdup_printf ("%" G_GUINT64_FORMAT, nm_setting_serial_get_send_delay (s_serial));
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- nmc->allowed_fields[0].value = NM_SETTING_SERIAL_SETTING_NAME;
- nmc->allowed_fields[1].value = baud_str;
- nmc->allowed_fields[2].value = bits_str;
- nmc->allowed_fields[3].value = parity_str;
- nmc->allowed_fields[4].value = stopbits_str;
- nmc->allowed_fields[5].value = send_delay_str;
+ if (!strncasecmp (val, "0x", 2))
+ p_key_valid = nmc_string_to_int_base (val + 2, 16, TRUE, 0, G_MAXUINT16, &p_key_int);
+ else
+ p_key_valid = nmc_string_to_int (val, TRUE, -1, G_MAXUINT16, &p_key_int);
+
+ if (!p_key_valid) {
+ if (strcmp (val, "default") == 0)
+ p_key_int = -1;
+ else {
+ g_set_error (error, 1, 0, _("'%s' is not a valid IBoIP P_Key"), val);
+ return FALSE;
+ }
+ }
+ g_object_set (setting, prop, (gint) p_key_int, NULL);
+ return TRUE;
+}
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+/* --- NM_SETTING_IP4_CONFIG_SETTING_NAME property setter functions --- */
+/* 'method' */
+static const char *ipv4_valid_methods[] = {
+ NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
+ NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP4_CONFIG_METHOD_SHARED,
+ NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
+ NULL
+};
- g_free (baud_str);
- g_free (bits_str);
- g_free (parity_str);
- g_free (stopbits_str);
- g_free (send_delay_str);
+static gboolean
+nmc_property_ipv4_set_method (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ /* Silently accept "static" and convert to "manual" */
+ if (val && strlen (val) > 1 && matches (val, "static") == 0)
+ val = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
+ return check_and_set_string (setting, prop, val, ipv4_valid_methods, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_ipv4_allowed_method, ipv4_valid_methods)
+
+/* 'dns' */
+static gboolean
+nmc_property_ipv4_set_dns (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ guint32 ip4_addr;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ if (inet_pton (AF_INET, g_strstrip (*iter), &ip4_addr) < 1) {
+ g_set_error (error, 1, 0, _("invalid IPv4 address '%s'"), *iter);
+ g_strfreev (strv);
+ return FALSE;
+ }
+ nm_setting_ip4_config_add_dns (NM_SETTING_IP4_CONFIG (setting), ip4_addr);
+ }
+ g_strfreev (strv);
return TRUE;
}
-gboolean
-setting_ppp_details (NMSettingPPP *s_ppp, NmCli *nmc)
+static gboolean
+_validate_and_remove_ipv4_dns (NMSettingIP4Config *setting,
+ const char *dns,
+ GError **error)
{
- char *baud_str, *mru_str, *mtu_str, *lcp_echo_failure_str, *lcp_echo_interval_str;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ guint32 ip4_addr;
+ gboolean ret;
- g_return_val_if_fail (NM_IS_SETTING_PPP (s_ppp), FALSE);
+ if (inet_pton (AF_INET, dns, &ip4_addr) < 1) {
+ g_set_error (error, 1, 0, _("invalid IPv4 address '%s'"), dns);
+ return FALSE;
+ }
- nmc->allowed_fields = nmc_fields_setting_ppp;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_PPP_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
-
- baud_str = g_strdup_printf ("%d", nm_setting_ppp_get_baud (s_ppp));
- mru_str = g_strdup_printf ("%d", nm_setting_ppp_get_mru (s_ppp));
- mtu_str = g_strdup_printf ("%d", nm_setting_ppp_get_mtu (s_ppp));
- lcp_echo_failure_str = g_strdup_printf ("%d", nm_setting_ppp_get_lcp_echo_failure (s_ppp));
- lcp_echo_interval_str = g_strdup_printf ("%d", nm_setting_ppp_get_lcp_echo_interval (s_ppp));
-
- nmc->allowed_fields[0].value = NM_SETTING_PPP_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_ppp_get_noauth (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[2].value = nm_setting_ppp_get_refuse_eap (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[3].value = nm_setting_ppp_get_refuse_pap (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[4].value = nm_setting_ppp_get_refuse_chap (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[5].value = nm_setting_ppp_get_refuse_mschap (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[6].value = nm_setting_ppp_get_refuse_mschapv2 (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[7].value = nm_setting_ppp_get_nobsdcomp (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[8].value = nm_setting_ppp_get_nodeflate (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[9].value = nm_setting_ppp_get_no_vj_comp (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[10].value = nm_setting_ppp_get_require_mppe (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[11].value = nm_setting_ppp_get_require_mppe_128 (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[12].value = nm_setting_ppp_get_mppe_stateful (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[13].value = nm_setting_ppp_get_crtscts (s_ppp) ? _("yes") : _("no");
- nmc->allowed_fields[14].value = baud_str;
- nmc->allowed_fields[15].value = mru_str;
- nmc->allowed_fields[16].value = mtu_str;
- nmc->allowed_fields[17].value = lcp_echo_failure_str;
- nmc->allowed_fields[18].value = lcp_echo_interval_str;
-
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
-
- g_free (baud_str);
- g_free (mru_str);
- g_free (mtu_str);
- g_free (lcp_echo_failure_str);
- g_free (lcp_echo_interval_str);
+ ret = nm_setting_ip4_config_remove_dns_by_value (setting, ip4_addr);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain DNS server '%s'"), dns);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv4_remove_dns,
+ NM_SETTING_IP4_CONFIG,
+ nm_setting_ip4_config_get_num_dns,
+ nm_setting_ip4_config_remove_dns,
+ _validate_and_remove_ipv4_dns)
+
+static const char *
+nmc_property_ipv4_describe_dns (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of IPv4 addresses of DNS servers.\n\n"
+ "Example: 8.8.8.8, 8.8.4.4\n");
+}
+
+/* 'dns-search' */
+static gboolean
+nmc_property_ipv4_set_dns_search (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL;
+ guint i = 0;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ if (!verify_string_list (strv, prop, nmc_util_is_domain, error)) {
+ g_strfreev (strv);
+ return FALSE;
+ }
+
+ while (strv && strv[i])
+ nm_setting_ip4_config_add_dns_search (NM_SETTING_IP4_CONFIG (setting), strv[i++]);
+ g_strfreev (strv);
return TRUE;
}
-gboolean
-setting_pppoe_details (NMSettingPPPOE *s_pppoe, NmCli *nmc)
+static gboolean
+_validate_and_remove_ipv4_dns_search (NMSettingIP4Config *setting,
+ const char *dns_search,
+ GError **error)
{
- char *pswd_flags;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ gboolean ret;
+
+ ret = nm_setting_ip4_config_remove_dns_search_by_value (setting, dns_search);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain DNS search domain '%s'"),
+ dns_search);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv4_remove_dns_search,
+ NM_SETTING_IP4_CONFIG,
+ nm_setting_ip4_config_get_num_dns_searches,
+ nm_setting_ip4_config_remove_dns_search,
+ _validate_and_remove_ipv4_dns_search)
+
+/* 'addresses' */
+static NMIP4Address *
+_parse_ipv4_address (const char *address, GError **error)
+{
+ char *value = g_strdup (address);
+ char **addrv;
+ NMIP4Address *ip4addr;
+
+ addrv = nmc_strsplit_set (g_strstrip (value), " \t", 0);
+ if (addrv[0] == NULL || g_strv_length (addrv) > 2) {
+ g_set_error (error, 1, 0, _("'%s' is not valid (use ip[/prefix] [gateway])"),
+ address);
+ g_free (value);
+ g_strfreev (addrv);
+ return NULL;
+ }
+ ip4addr = nmc_parse_and_build_ip4_address (addrv[0], addrv[1], error);
+ g_free (value);
+ g_strfreev (addrv);
+ return ip4addr;
+}
- g_return_val_if_fail (NM_IS_SETTING_PPPOE (s_pppoe), FALSE);
+static gboolean
+nmc_property_ipv4_set_addresses (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ NMIP4Address *ip4addr;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, ",", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ ip4addr = _parse_ipv4_address (*iter, error);
+ if (!ip4addr) {
+ g_strfreev (strv);
+ return FALSE;
+ }
+ nm_setting_ip4_config_add_address (NM_SETTING_IP4_CONFIG (setting), ip4addr);
+ nm_ip4_address_unref (ip4addr);
+ }
+ g_strfreev (strv);
+ return TRUE;
+}
+
+static gboolean
+_validate_and_remove_ipv4_address (NMSettingIP4Config *setting,
+ const char *address,
+ GError **error)
+{
+ NMIP4Address *ip4addr;
+ gboolean ret;
- nmc->allowed_fields = nmc_fields_setting_pppoe;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_PPPOE_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ ip4addr = _parse_ipv4_address (address, error);
+ if (!ip4addr)
+ return FALSE;
- pswd_flags = secret_flags_to_string (nm_setting_pppoe_get_password_flags (s_pppoe));
+ ret = nm_setting_ip4_config_remove_address_by_value (setting, ip4addr);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain IP address '%s'"), address);
+ nm_ip4_address_unref (ip4addr);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv4_remove_addresses,
+ NM_SETTING_IP4_CONFIG,
+ nm_setting_ip4_config_get_num_addresses,
+ nm_setting_ip4_config_remove_address,
+ _validate_and_remove_ipv4_address)
+
+static const char *
+nmc_property_ipv4_describe_addresses (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of IPv4 addresses formatted as:\n"
+ " ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+ "Missing prefix is regarded as prefix of 32.\n\n"
+ "Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n");
+}
- nmc->allowed_fields[0].value = NM_SETTING_PPPOE_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_pppoe_get_service (s_pppoe);
- nmc->allowed_fields[2].value = nm_setting_pppoe_get_username (s_pppoe);
- nmc->allowed_fields[3].value = nm_setting_pppoe_get_password (s_pppoe);
- nmc->allowed_fields[4].value = pswd_flags;
+/*
+ * from: { ip = 1.2.3.4/24, gw = 1.2.3.254 }; { ip = 2.2.2.2/16, gw = 5.5.5.5 }
+ * to: 1.2.3.4/24 1.2.3.254, 2.2.2.2/16 5.5.5.5
+ * from: { ip = 11::22/64, gw = 22::33 }; { ip = ab::cd/64, gw = ab::1 }
+ * to: 11::22/64 22:33, ab::cd/64 ab::1
+*/
+static char *
+nmc_property_out2in_addresses (const char *out_format)
+{
+ GRegex *regex;
+ GString *str;
+ char **strv;
+ int i;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ str = g_string_sized_new (128);
+ regex = g_regex_new ("\\{ ip = ([^/]+)/([^,]+), gw = ([^ ]+) \\}", 0, 0, NULL);
+
+ strv = g_regex_split (regex, out_format, 0);
+ for (i = 1; strv && strv[i] && strv[i+1] && strv[i+2]; i=i+4) {
+ g_string_append (str, strv[i]); /* IP */
+ g_string_append_c (str, '/');
+ g_string_append (str, strv[i+1]); /* prefix */
+ g_string_append_c (str, ' ');
+ g_string_append (str, strv[i+2]); /* gateway */
+ g_string_append (str, ", ");
+ }
+ if (str->len > 0)
+ g_string_truncate (str, str->len - 2);
- g_free (pswd_flags);
+ g_strfreev (strv);
+ g_regex_unref (regex);
+ return g_string_free (str, FALSE);
+}
+
+/* 'routes' */
+static NMIP4Route *
+_parse_ipv4_route (const char *route, GError **error)
+{
+ char *value = g_strdup (route);
+ char **routev;
+ guint len;
+ NMIP4Route *ip4route = NULL;
+
+ routev = nmc_strsplit_set (g_strstrip (value), " \t", 0);
+ len = g_strv_length (routev);
+ if (len < 1 || len > 3) {
+ g_set_error (error, 1, 0, _("'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"),
+ route);
+ goto finish;
+ }
+ ip4route = nmc_parse_and_build_ip4_route (routev[0], routev[1], len >= 2 ? routev[2] : NULL, error);
+
+finish:
+ g_free (value);
+ g_strfreev (routev);
+ return ip4route;
+}
+
+static gboolean
+nmc_property_ipv4_set_routes (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ NMIP4Route *ip4route;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, ",", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ ip4route = _parse_ipv4_route (*iter, error);
+ if (!ip4route) {
+ g_strfreev (strv);
+ return FALSE;
+ }
+ nm_setting_ip4_config_add_route (NM_SETTING_IP4_CONFIG (setting), ip4route);
+ nm_ip4_route_unref (ip4route);
+ }
+ g_strfreev (strv);
return TRUE;
}
-gboolean
-setting_gsm_details (NMSettingGsm *s_gsm, NmCli *nmc)
+static gboolean
+_validate_and_remove_ipv4_route (NMSettingIP4Config *setting,
+ const char *route,
+ GError **error)
{
- char *network_type_str, *allowed_bands_str, *pswd_flags, *pin_flags;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NMIP4Route *ip4route;
+ gboolean ret;
- g_return_val_if_fail (NM_IS_SETTING_GSM (s_gsm), FALSE);
+ ip4route = _parse_ipv4_route (route, error);
+ if (!ip4route)
+ return FALSE;
+
+ ret = nm_setting_ip4_config_remove_route_by_value (setting, ip4route);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain route '%s'"), route);
+ nm_ip4_route_unref (ip4route);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv4_remove_routes,
+ NM_SETTING_IP4_CONFIG,
+ nm_setting_ip4_config_get_num_routes,
+ nm_setting_ip4_config_remove_route,
+ _validate_and_remove_ipv4_route)
+
+static const char *
+nmc_property_ipv4_describe_routes (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of IPv4 routes formatted as:\n"
+ " ip[/prefix] [next-hop] [metric],...\n\n"
+ "Missing prefix is regarded as a prefix of 32.\n"
+ "Missing next-hop is regarded as 0.0.0.0.\n"
+ "Missing metric or 0 means a default metric (NM/kernel will set a default value).\n\n"
+ "Examples: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+ " 10.1.2.0/24\n");
+}
+
+static char *
+nmc_property_out2in_routes (const char *out_format)
+{
+ GRegex *regex;
+ GString *str;
+ char **strv;
+ int i;
- nmc->allowed_fields = nmc_fields_setting_gsm;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_GSM_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ str = g_string_sized_new (128);
+ regex = g_regex_new ("\\{ dst = ([^/]+)/([^,]+), nh = ([^,]+), mt = ([^ ]+) \\}", 0, 0, NULL);
+
+ strv = g_regex_split (regex, out_format, 0);
+ for (i = 1; strv && strv[i] && strv[i+1] && strv[i+2] && strv[i+3]; i=i+5) {
+ g_string_append (str, strv[i]); /* IP */
+ g_string_append_c (str, '/');
+ g_string_append (str, strv[i+1]); /* prefix */
+ g_string_append_c (str, ' ');
+ g_string_append (str, strv[i+2]); /* next hop */
+ g_string_append_c (str, ' ');
+ g_string_append (str, strv[i+3]); /* metric */
+ g_string_append (str, ", ");
+ }
+ if (str->len > 0)
+ g_string_truncate (str, str->len - 2);
- network_type_str = g_strdup_printf ("%d", nm_setting_gsm_get_network_type (s_gsm));
- allowed_bands_str = allowed_bands_to_string (nm_setting_gsm_get_allowed_bands (s_gsm));
+ g_strfreev (strv);
+ g_regex_unref (regex);
- pswd_flags = secret_flags_to_string (nm_setting_gsm_get_password_flags (s_gsm));
- pin_flags = secret_flags_to_string (nm_setting_gsm_get_pin_flags (s_gsm));
+ return g_string_free (str, FALSE);
+}
- nmc->allowed_fields[0].value = NM_SETTING_GSM_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_gsm_get_number (s_gsm);
- nmc->allowed_fields[2].value = nm_setting_gsm_get_username (s_gsm);
- nmc->allowed_fields[3].value = nm_setting_gsm_get_password (s_gsm);
- nmc->allowed_fields[4].value = pswd_flags;
- nmc->allowed_fields[5].value = nm_setting_gsm_get_apn (s_gsm);
- nmc->allowed_fields[6].value = nm_setting_gsm_get_network_id (s_gsm);
- nmc->allowed_fields[7].value = network_type_str;
- nmc->allowed_fields[8].value = allowed_bands_str;
- nmc->allowed_fields[9].value = nm_setting_gsm_get_pin (s_gsm);
- nmc->allowed_fields[10].value = pin_flags;
- nmc->allowed_fields[11].value = nm_setting_gsm_get_home_only (s_gsm) ? _("yes") : _("no");
+/* --- NM_SETTING_IP6_CONFIG_SETTING_NAME property setter functions --- */
+/* 'method' */
+static const char *ipv6_valid_methods[] = {
+ NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP6_CONFIG_METHOD_DHCP,
+ NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL,
+ NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP6_CONFIG_METHOD_SHARED,
+ NULL
+};
+
+static gboolean
+nmc_property_ipv6_set_method (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ /* Silently accept "static" and convert to "manual" */
+ if (val && strlen (val) > 1 && matches (val, "static") == 0)
+ val = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ return check_and_set_string (setting, prop, val, ipv6_valid_methods, error);
+}
- g_free (network_type_str);
- g_free (allowed_bands_str);
- g_free (pswd_flags);
- g_free (pin_flags);
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_ipv6_allowed_method, ipv6_valid_methods)
+/* 'dns' */
+static gboolean
+nmc_property_ipv6_set_dns (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ struct in6_addr ip6_addr;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ if (inet_pton (AF_INET6, g_strstrip (*iter), &ip6_addr) < 1) {
+ g_set_error (error, 1, 0, _("invalid IPv6 address '%s'"), *iter);
+ g_strfreev (strv);
+ return FALSE;
+ }
+ nm_setting_ip6_config_add_dns (NM_SETTING_IP6_CONFIG (setting), &ip6_addr);
+ }
+ g_strfreev (strv);
return TRUE;
}
-gboolean
-setting_cdma_details (NMSettingCdma *s_cdma, NmCli *nmc)
+static gboolean
+_validate_and_remove_ipv6_dns (NMSettingIP6Config *setting,
+ const char *dns,
+ GError **error)
{
- char *pswd_flags;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ struct in6_addr ip6_addr;
+ gboolean ret;
- g_return_val_if_fail (NM_IS_SETTING_CDMA (s_cdma), FALSE);
+ if (inet_pton (AF_INET6, dns, &ip6_addr) < 1) {
+ g_set_error (error, 1, 0, _("invalid IPv6 address '%s'"), dns);
+ return FALSE;
+ }
- nmc->allowed_fields = nmc_fields_setting_cdma;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_CDMA_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ ret = nm_setting_ip6_config_remove_dns_by_value (setting, &ip6_addr);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain DNS server '%s'"), dns);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv6_remove_dns,
+ NM_SETTING_IP6_CONFIG,
+ nm_setting_ip6_config_get_num_dns,
+ nm_setting_ip6_config_remove_dns,
+ _validate_and_remove_ipv6_dns)
+
+static const char *
+nmc_property_ipv6_describe_dns (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of IPv6 addresses of DNS servers. If the IPv6 "
+ "configuration method is 'auto' these DNS servers are appended "
+ "to those (if any) returned by automatic configuration. DNS "
+ "servers cannot be used with the 'shared' or 'link-local' IPv6 "
+ "configuration methods, as there is no upstream network. In "
+ "all other IPv6 configuration methods, these DNS "
+ "servers are used as the only DNS servers for this connection.\n\n"
+ "Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n");
+}
- pswd_flags = secret_flags_to_string (nm_setting_cdma_get_password_flags (s_cdma));
+/* 'dns-search' */
+static gboolean
+nmc_property_ipv6_set_dns_search (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL;
+ guint i = 0;
- nmc->allowed_fields[0].value = NM_SETTING_CDMA_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_cdma_get_number (s_cdma);
- nmc->allowed_fields[2].value = nm_setting_cdma_get_username (s_cdma);
- nmc->allowed_fields[3].value = nm_setting_cdma_get_password (s_cdma);
- nmc->allowed_fields[4].value = pswd_flags;
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ if (!verify_string_list (strv, prop, nmc_util_is_domain, error)) {
+ g_strfreev (strv);
+ return FALSE;
+ }
- g_free (pswd_flags);
+ while (strv && strv[i])
+ nm_setting_ip6_config_add_dns_search (NM_SETTING_IP6_CONFIG (setting), strv[i++]);
+ g_strfreev (strv);
return TRUE;
}
-gboolean
-setting_bluetooth_details (NMSettingBluetooth *s_bluetooth, NmCli *nmc)
+static gboolean
+_validate_and_remove_ipv6_dns_search (NMSettingIP6Config *setting,
+ const char *dns_search,
+ GError **error)
{
- const GByteArray *bdaddr;
- char *bdaddr_str = NULL;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ gboolean ret;
+
+ ret = nm_setting_ip6_config_remove_dns_search_by_value (setting, dns_search);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain DNS search domain '%s'"),
+ dns_search);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv6_remove_dns_search,
+ NM_SETTING_IP6_CONFIG,
+ nm_setting_ip6_config_get_num_dns_searches,
+ nm_setting_ip6_config_remove_dns_search,
+ _validate_and_remove_ipv6_dns_search)
+
+/* 'addresses' */
+static NMIP6Address *
+_parse_ipv6_address (const char *address, GError **error)
+{
+ char *value = g_strstrip (g_strdup (address));
+ char **addrv;
+ NMIP6Address *ip6addr;
+
+ addrv = nmc_strsplit_set (g_strstrip (value), " \t", 0);
+ if (addrv[0] == NULL || g_strv_length (addrv) > 2) {
+ g_set_error (error, 1, 0, _("'%s' is not valid (use ip[/prefix] [gateway])"),
+ address);
+ g_free (value);
+ g_strfreev (addrv);
+ return NULL;
+ }
+ ip6addr = nmc_parse_and_build_ip6_address (addrv[0], addrv[1], error);
+ g_free (value);
+ g_strfreev (addrv);
+ return ip6addr;
+}
- g_return_val_if_fail (NM_IS_SETTING_BLUETOOTH (s_bluetooth), FALSE);
+static gboolean
+nmc_property_ipv6_set_addresses (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ NMIP6Address *ip6addr;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, ",", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ ip6addr = _parse_ipv6_address (*iter, error);
+ if (!ip6addr) {
+ g_strfreev (strv);
+ return FALSE;
+ }
+ nm_setting_ip6_config_add_address (NM_SETTING_IP6_CONFIG (setting), ip6addr);
+ nm_ip6_address_unref (ip6addr);
+ }
+ g_strfreev (strv);
+ return TRUE;
+}
- nmc->allowed_fields = nmc_fields_setting_bluetooth;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_BLUETOOTH_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+static gboolean
+_validate_and_remove_ipv6_address (NMSettingIP6Config *setting,
+ const char *address,
+ GError **error)
+{
+ NMIP6Address *ip6addr;
+ gboolean ret;
- bdaddr = nm_setting_bluetooth_get_bdaddr (s_bluetooth);
- if (bdaddr)
- bdaddr_str = nm_utils_hwaddr_ntoa (bdaddr->data, ARPHRD_ETHER);
+ ip6addr = _parse_ipv6_address (address, error);
+ if (!ip6addr)
+ return FALSE;
- nmc->allowed_fields[0].value = NM_SETTING_BLUETOOTH_SETTING_NAME;
- nmc->allowed_fields[1].value = bdaddr_str;
- nmc->allowed_fields[2].value = nm_setting_bluetooth_get_connection_type (s_bluetooth);
+ ret = nm_setting_ip6_config_remove_address_by_value (setting, ip6addr);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain IP address '%s'"), address);
+ nm_ip6_address_unref (ip6addr);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv6_remove_addresses,
+ NM_SETTING_IP6_CONFIG,
+ nm_setting_ip6_config_get_num_addresses,
+ nm_setting_ip6_config_remove_address,
+ _validate_and_remove_ipv6_address)
+
+static const char *
+nmc_property_ipv6_describe_addresses (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of IPv6 addresses formatted as:\n"
+ " ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+ "Missing prefix is regarded as prefix of 128.\n\n"
+ "Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:326b\n");
+}
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+/* 'routes' */
+static NMIP6Route *
+_parse_ipv6_route (const char *route, GError **error)
+{
+ char *value = g_strdup (route);
+ char **routev;
+ guint len;
+ NMIP6Route *ip6route = NULL;
+
+ routev = nmc_strsplit_set (g_strstrip (value), " \t", 0);
+ len = g_strv_length (routev);
+ if (len < 1 || len > 3) {
+ g_set_error (error, 1, 0, _("'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"),
+ route);
+ goto finish;
+ }
+ ip6route = nmc_parse_and_build_ip6_route (routev[0], routev[1], len >= 2 ? routev[2] : NULL, error);
- g_free (bdaddr_str);
+finish:
+ g_free (value);
+ g_strfreev (routev);
+ return ip6route;
+}
+static gboolean
+nmc_property_ipv6_set_routes (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ NMIP6Route *ip6route;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ strv = nmc_strsplit_set (val, ",", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ ip6route = _parse_ipv6_route (*iter, error);
+ if (!ip6route) {
+ g_strfreev (strv);
+ return FALSE;
+ }
+ nm_setting_ip6_config_add_route (NM_SETTING_IP6_CONFIG (setting), ip6route);
+ nm_ip6_route_unref (ip6route);
+ }
+ g_strfreev (strv);
return TRUE;
}
-gboolean
-setting_olpc_mesh_details (NMSettingOlpcMesh *s_olpc_mesh, NmCli *nmc)
+static gboolean
+_validate_and_remove_ipv6_route (NMSettingIP6Config *setting,
+ const char *route,
+ GError **error)
{
- const GByteArray *ssid, *dhcp_anycast;
- char *channel_str, *ssid_str = NULL, *dhcp_anycast_str = NULL;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NMIP6Route *ip6route;
+ gboolean ret;
- g_return_val_if_fail (NM_IS_SETTING_OLPC_MESH (s_olpc_mesh), FALSE);
+ ip6route = _parse_ipv6_route (route, error);
+ if (!ip6route)
+ return FALSE;
+
+ ret = nm_setting_ip6_config_remove_route_by_value (setting, ip6route);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain route '%s'"), route);
+ nm_ip6_route_unref (ip6route);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv6_remove_routes,
+ NM_SETTING_IP6_CONFIG,
+ nm_setting_ip6_config_get_num_routes,
+ nm_setting_ip6_config_remove_route,
+ _validate_and_remove_ipv6_route)
+
+static const char *
+nmc_property_ipv6_describe_routes (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of IPv6 routes formatted as:\n"
+ " ip[/prefix] [next-hop] [metric],...\n\n"
+ "Missing prefix is regarded as a prefix of 128.\n"
+ "Missing next-hop is regarded as \"::\".\n"
+ "Missing metric or 0 means a default metric (NM/kernel will set a default value).\n\n"
+ "Examples: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:db8:beef::3 2\n"
+ " abbe::/64 55\n");
+}
- nmc->allowed_fields = nmc_fields_setting_olpc_mesh;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_OLPC_MESH_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+static gboolean
+nmc_property_ipv6_set_ip6_privacy (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ unsigned long val_int;
- ssid = nm_setting_olpc_mesh_get_ssid (s_olpc_mesh);
- if (ssid)
- ssid_str = ssid_to_printable ((const char *) ssid->data, ssid->len);
- channel_str = g_strdup_printf ("%d", nm_setting_olpc_mesh_get_channel (s_olpc_mesh));
- dhcp_anycast = nm_setting_olpc_mesh_get_dhcp_anycast_address (s_olpc_mesh);
- if (dhcp_anycast)
- dhcp_anycast_str = nm_utils_hwaddr_ntoa (dhcp_anycast->data, ARPHRD_ETHER);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_string_to_uint (val, FALSE, 0, 0, &val_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a number"), val);
+ return FALSE;
+ }
+
+ if ( val_int != NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED
+ && val_int != NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR
+ && val_int != NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR) {
+ g_set_error (error, 1, 0, _("'%s' is not valid; use 0, 1, or 2"), val);
+ return FALSE;
+ }
+
+ g_object_set (setting, prop, val_int, NULL);
+ return TRUE;
+}
+
+/* --- NM_SETTING_OLPC_MESH_SETTING_NAME property setter functions --- */
+static gboolean
+nmc_property_olpc_set_channel (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ unsigned long chan_int;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_string_to_uint (val, TRUE, 1, 13, &chan_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid channel; use <1-13>"), val);
+ return FALSE;
+ }
+ g_object_set (setting, prop, chan_int, NULL);
+ return TRUE;
+}
+
+
+/* --- NM_SETTING_SERIAL_SETTING_NAME property setter functions --- */
+static gboolean
+nmc_property_serial_set_parity (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char parity;
+
+ if (val[0] == 'E' || val[0] == 'e')
+ parity = 'E';
+ else if (val[0] == 'O' || val[0] == 'o')
+ parity = 'o';
+ else if (val[0] == 'N' || val[0] == 'n')
+ parity = 'n';
+ else {
+ g_set_error (error, 1, 0, _("'%s' is not valid; use [e, o, n]"), val);
+ return FALSE;
+ }
+
+ g_object_set (setting, prop, parity, NULL);
+ return TRUE;
+}
+
+/* --- NM_SETTING_TEAM_SETTING_NAME property functions --- */
+/* --- NM_SETTING_TEAM_PORT_SETTING_NAME property functions --- */
+static gboolean
+nmc_property_team_set_config (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char *json = NULL;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_team_check_config (val, &json, error)) {
+ return FALSE;
+ }
+ g_object_set (setting, prop, json, NULL);
+ g_free (json);
+ return TRUE;
+}
+
+static const char *
+nmc_property_team_describe_config (NMSetting *setting, const char *prop)
+{
+ return _("nmcli can accepts both direct JSON configuration data and a file name containing "
+ "the configuration. In the latter case the file is read and the contents is put "
+ "into this property.\n\n"
+ "Examples: set team.config "
+ "{ \"device\": \"team0\", \"runner\": {\"name\": \"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+ " set team.config /etc/my-team.conf\n");
+}
+
+/* --- NM_SETTING_VLAN_SETTING_NAME property setter functions --- */
+static gboolean
+nmc_property_vlan_set_prio_map (NMSetting *setting,
+ const char *prop,
+ const char *val,
+ NMVlanPriorityMap map_type,
+ GError **error)
+{
+ char **prio_map, **p;
+
+ prio_map = nmc_vlan_parse_priority_maps (val, map_type, error);
+ if (!prio_map)
+ return FALSE;
+
+ for (p = prio_map; p && *p; p++)
+ nm_setting_vlan_add_priority_str (NM_SETTING_VLAN (setting), map_type, *p);
+
+ g_strfreev (prio_map);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_vlan_remove_prio_map (NMSetting *setting,
+ const char *prop,
+ guint32 idx,
+ NMVlanPriorityMap map_type,
+ GError **error)
+{
+ guint32 num;
+
+ num = nm_setting_vlan_get_num_priorities (NM_SETTING_VLAN (setting), map_type);
+ if (num == 0) {
+ g_set_error_literal (error, 1, 0, _("no priority to remove"));
+ return FALSE;
+ }
+ if (idx >= num) {
+ g_set_error (error, 1, 0, _("index '%d' is not in the range of <0-%d>"),
+ idx, num - 1);
+ return FALSE;
+ }
+
+ nm_setting_vlan_remove_priority (NM_SETTING_VLAN (setting), map_type, idx);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_vlan_set_ingress_priority_map (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return nmc_property_vlan_set_prio_map (setting, prop, val, NM_VLAN_INGRESS_MAP, error);
+}
+
+static gboolean
+nmc_property_vlan_set_egress_priority_map (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return nmc_property_vlan_set_prio_map (setting, prop, val, NM_VLAN_EGRESS_MAP, error);
+}
+
+static gboolean
+nmc_property_vlan_remove_priority_map (NMSetting *setting,
+ const char *prop,
+ const char *value,
+ guint32 idx,
+ NMVlanPriorityMap map,
+ GError **error)
+{
+ /* If value != NULL, remove by value */
+ if (value) {
+ gboolean ret;
+ char **prio_map;
+ char *val = g_strdup (value);
+
+ prio_map = nmc_vlan_parse_priority_maps (val, map, error);
+ if (!prio_map)
+ return FALSE;
+ if (prio_map[1])
+ printf (_("Warning: only one mapping at a time is supported; taking the first one (%s)\n"),
+ prio_map[0]);
+ ret = nm_setting_vlan_remove_priority_str_by_value (NM_SETTING_VLAN (setting),
+ map,
+ prio_map[0]);
+
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain mapping '%s'"), prio_map[0]);
+ g_free (val);
+ g_strfreev (prio_map);
+ return ret;
+ }
+
+ /* Else remove by index */
+ return nmc_property_vlan_remove_prio_map (setting, prop, idx, map, error);
+}
+
+static gboolean
+nmc_property_vlan_remove_ingress_priority_map (NMSetting *setting,
+ const char *prop,
+ const char *value,
+ guint32 idx,
+ GError **error)
+{
+ return nmc_property_vlan_remove_priority_map (setting,
+ prop,
+ value,
+ idx,
+ NM_VLAN_INGRESS_MAP,
+ error);
+}
+
+static gboolean
+nmc_property_vlan_remove_egress_priority_map (NMSetting *setting,
+ const char *prop,
+ const char *value,
+ guint32 idx,
+ GError **error)
+{
+ return nmc_property_vlan_remove_priority_map (setting,
+ prop,
+ value,
+ idx,
+ NM_VLAN_EGRESS_MAP,
+ error);
+}
+
+/* --- NM_SETTING_VPN_SETTING_NAME property setter functions --- */
+/* 'data' */
+DEFINE_SETTER_OPTIONS (nmc_property_vpn_set_data,
+ NM_SETTING_VPN,
+ NMSettingVPN,
+ nm_setting_vpn_add_data_item,
+ NULL,
+ NULL)
+DEFINE_REMOVER_OPTION (nmc_property_vpn_remove_option_data,
+ NM_SETTING_VPN,
+ nm_setting_vpn_remove_data_item)
+
+/* 'secrets' */
+DEFINE_SETTER_OPTIONS (nmc_property_vpn_set_secrets,
+ NM_SETTING_VPN,
+ NMSettingVPN,
+ nm_setting_vpn_add_secret,
+ NULL,
+ NULL)
+DEFINE_REMOVER_OPTION (nmc_property_vpn_remove_option_secret,
+ NM_SETTING_VPN,
+ nm_setting_vpn_remove_secret)
+
+/* --- NM_SETTING_WIMAX_SETTING_NAME property setter functions --- */
+/* No specific functions */
+
+/* --- NM_SETTING_WIRED_SETTING_NAME property setter functions --- */
+#if 0
+/*
+ * Do not allow setting 'port' and 'duplex' for now. They are not implemented in
+ * NM core, nor in ifcfg-rh plugin. Enable this when it gets done.
+ */
+/* 'port' */
+static const char *wired_valid_ports[] = { "tp", "aui", "bnc", "mii", NULL };
+
+static gboolean
+nmc_property_wired_set_port (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, wired_valid_ports, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wired_allowed_port, wired_valid_ports)
+
+/* 'duplex' */
+static const char *wired_valid_duplexes[] = { "half", "full", NULL };
+
+static gboolean
+nmc_property_wired_set_duplex (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, wired_valid_duplexes, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wired_allowed_duplex, wired_valid_duplexes)
+#endif
+
+/* 'mac-address-blacklist' */
+DEFINE_SETTER_MAC_BLACKLIST (nmc_property_wired_set_mac_address_blacklist,
+ NM_SETTING_WIRED,
+ nm_setting_wired_add_mac_blacklist_item)
+
+static gboolean
+_validate_and_remove_wired_mac_blacklist_item (NMSettingWired *setting,
+ const char *mac,
+ GError **error)
+{
+ gboolean ret;
+ guint8 buf[32];
+
+ if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid MAC address"), mac);
+ return FALSE;
+ }
+
+ ret = nm_setting_wired_remove_mac_blacklist_item_by_value (setting, mac);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain MAC address '%s'"), mac);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_wired_remove_mac_address_blacklist,
+ NM_SETTING_WIRED,
+ nm_setting_wired_get_num_mac_blacklist_items,
+ nm_setting_wired_remove_mac_blacklist_item,
+ _validate_and_remove_wired_mac_blacklist_item)
+
+/* 's390-subchannels' */
+static gboolean
+nmc_property_wired_set_s390_subchannels (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ GPtrArray *s390_subchannels;
+
+ //FIXME: both libnm-util and ifcfg-rh also allow two strings (3rd is optional)
+ strv = nmc_strsplit_set (val, " ,\t", 0);
+ if (g_strv_length (strv) != 3) {
+ g_set_error (error, 1, 0, _("'%s' is not valid; 3 strings should be provided"),
+ val);
+ g_strfreev (strv);
+ return FALSE;
+ }
+
+ s390_subchannels = g_ptr_array_sized_new (3);
+ for (iter = strv; iter && *iter; iter++)
+ g_ptr_array_add (s390_subchannels, *iter);
+
+ g_object_set (setting, prop, s390_subchannels, NULL);
+ g_strfreev (strv);
+ g_ptr_array_free (s390_subchannels, TRUE);
+ return TRUE;
+}
+
+static const char *
+nmc_property_wired_describe_s390_subchannels (NMSetting *setting, const char *prop)
+{
+ return _("Enter a list of three channels (comma or space separated).\n\n"
+ "Example: 0.0.0e20 0.0.0e21 0.0.0e22\n");
+}
+
+/* 's390-nettype' */
+static const char *wired_valid_s390_nettypes[] = { "qeth", "lcs", "ctc", NULL };
+
+static gboolean
+nmc_property_wired_set_s390_nettype (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, wired_valid_s390_nettypes, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wired_allowed_s390_nettype, wired_valid_s390_nettypes)
+
+/* 's390-options' */
+DEFINE_SETTER_OPTIONS (nmc_property_wired_set_s390_options,
+ NM_SETTING_WIRED,
+ NMSettingWired,
+ nm_setting_wired_add_s390_option,
+ nm_setting_wired_get_valid_s390_options,
+ NULL)
+DEFINE_REMOVER_OPTION (nmc_property_wired_remove_option_s390_options,
+ NM_SETTING_WIRED,
+ nm_setting_wired_remove_s390_option)
+
+static const char *
+nmc_property_wired_allowed_s390_options (NMSetting *setting, const char *prop)
+{
+ const char **valid_options;
+ static char *allowed_vals = NULL;
+
+ if (G_UNLIKELY (allowed_vals == NULL)) {
+ valid_options = nm_setting_wired_get_valid_s390_options (NM_SETTING_WIRED (setting));
+ allowed_vals = g_strjoinv (", ", (char **) valid_options);
+ }
+ return allowed_vals;
+}
- nmc->allowed_fields[0].value = NM_SETTING_OLPC_MESH_SETTING_NAME;
- nmc->allowed_fields[1].value = ssid_str;
- nmc->allowed_fields[2].value = channel_str;
- nmc->allowed_fields[3].value = dhcp_anycast_str;
+static const char *
+nmc_property_wired_describe_s390_options (NMSetting *setting, const char *prop)
+{
+ static char *desc = NULL;
+ const char **valid_options;
+ char *options_str;
+
+ if (G_UNLIKELY (desc == NULL)) {
+ valid_options = nm_setting_wired_get_valid_s390_options (NM_SETTING_WIRED (setting));
+ options_str = g_strjoinv (", ", (char **) valid_options);
+
+ desc = g_strdup_printf (_("Enter a list of S/390 options formatted as:\n"
+ " option = <value>, option = <value>,...\n"
+ "Valid options are: %s\n"),
+ options_str);
+ g_free (options_str);
+ }
+ return desc;
+}
+
+/* --- NM_SETTING_WIRELESS_SETTING_NAME property setter functions --- */
+/* 'mode' */
+static const char *wifi_valid_modes[] = {
+ NM_SETTING_WIRELESS_MODE_INFRA,
+ NM_SETTING_WIRELESS_MODE_ADHOC,
+ NM_SETTING_WIRELESS_MODE_AP,
+ NULL
+};
+
+static gboolean
+nmc_property_wifi_set_mode (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, wifi_valid_modes, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wifi_allowed_mode, wifi_valid_modes)
+
+/* 'band' */
+static const char *wifi_valid_bands[] = { "a", "bg", NULL };
+
+static gboolean
+nmc_property_wifi_set_band (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, wifi_valid_bands, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wifi_allowed_band, wifi_valid_bands)
+
+/* 'channel' */
+static gboolean
+nmc_property_wifi_set_channel (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ unsigned long chan_int;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_string_to_uint (val, FALSE, 0, 0, &chan_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid channel"), val);
+ return FALSE;
+ }
+
+ if ( !nm_utils_wifi_is_channel_valid (chan_int, "a")
+ && !nm_utils_wifi_is_channel_valid (chan_int, "bg")) {
+ g_set_error (error, 1, 0, _("'%ld' is not a valid channel"), chan_int);
+ return FALSE;
+ }
+
+ g_object_set (setting, prop, chan_int, NULL);
+ return TRUE;
+}
+
+/* 'mac-address-blacklist' */
+DEFINE_SETTER_MAC_BLACKLIST (nmc_property_wireless_set_mac_address_blacklist,
+ NM_SETTING_WIRELESS,
+ nm_setting_wireless_add_mac_blacklist_item)
+
+static gboolean
+_validate_and_remove_wifi_mac_blacklist_item (NMSettingWireless *setting,
+ const char *mac,
+ GError **error)
+{
+ gboolean ret;
+ guint8 buf[32];
+
+ if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid MAC address"), mac);
+ return FALSE;
+ }
+
+ ret = nm_setting_wireless_remove_mac_blacklist_item_by_value (setting, mac);
+ if (!ret)
+ g_set_error (error, 1, 0, _("the property doesn't contain MAC address '%s'"), mac);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_wireless_remove_mac_address_blacklist,
+ NM_SETTING_WIRELESS,
+ nm_setting_wireless_get_num_mac_blacklist_items,
+ nm_setting_wireless_remove_mac_blacklist_item,
+ _validate_and_remove_wifi_mac_blacklist_item)
+
+/* --- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME property setter functions --- */
+/* 'key-mgmt' */
+static const char *wifi_sec_valid_key_mgmts[] = { "none", "ieee8021x", "wpa-none", "wpa-psk", "wpa-eap", NULL };
+
+static gboolean
+nmc_property_wifi_sec_set_key_mgmt (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, wifi_sec_valid_key_mgmts, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wifi_sec_allowed_key_mgmt, wifi_sec_valid_key_mgmts)
+
+/* 'auth-alg' */
+static const char *wifi_sec_valid_auth_algs[] = { "open", "shared", "leap", NULL };
+
+static gboolean
+nmc_property_wifi_sec_set_auth_alg (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, wifi_sec_valid_auth_algs, error);
+}
+
+DEFINE_SETTER_STR_LIST_MULTI (check_and_add_wifi_sec_proto,
+ NM_SETTING_WIRELESS_SECURITY,
+ nm_setting_wireless_security_add_proto)
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wifi_sec_allowed_auth_alg, wifi_sec_valid_auth_algs)
+
+/* 'proto' */
+static const char *wifi_sec_valid_protos[] = { "wpa", "rsn", NULL };
+
+static gboolean
+nmc_property_wifi_sec_set_proto (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_add_wifi_sec_proto (setting, prop, val, wifi_sec_valid_protos, error);
+}
+
+static gboolean
+_validate_and_remove_wifi_sec_proto (NMSettingWirelessSecurity *setting,
+ const char *proto,
+ GError **error)
+{
+ gboolean ret;
+ const char *valid;
+
+ valid = nmc_string_is_valid (proto, wifi_sec_valid_protos, error);
+ if (!valid)
+ return FALSE;
+
+ ret = nm_setting_wireless_security_remove_proto_by_value (setting, proto);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain protocol '%s'"), proto);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_wifi_sec_remove_proto,
+ NM_SETTING_WIRELESS_SECURITY,
+ nm_setting_wireless_security_get_num_protos,
+ nm_setting_wireless_security_remove_proto,
+ _validate_and_remove_wifi_sec_proto)
+
+DEFINE_SETTER_STR_LIST_MULTI (check_and_add_wifi_sec_pairwise,
+ NM_SETTING_WIRELESS_SECURITY,
+ nm_setting_wireless_security_add_pairwise)
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wifi_sec_allowed_proto, wifi_sec_valid_protos)
+
+/* 'pairwise' */
+static const char *wifi_sec_valid_pairwises[] = { "tkip", "ccmp", NULL };
+
+static gboolean
+nmc_property_wifi_sec_set_pairwise (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_add_wifi_sec_pairwise (setting, prop, val, wifi_sec_valid_pairwises, error);
+}
+
+static gboolean
+_validate_and_remove_wifi_sec_pairwise (NMSettingWirelessSecurity *setting,
+ const char *pairwise,
+ GError **error)
+{
+ gboolean ret;
+ const char *valid;
+
+ valid = nmc_string_is_valid (pairwise, wifi_sec_valid_pairwises, error);
+ if (!valid)
+ return FALSE;
+
+ ret = nm_setting_wireless_security_remove_pairwise_by_value (setting, pairwise);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain protocol '%s'"), pairwise);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_wifi_sec_remove_pairwise,
+ NM_SETTING_WIRELESS_SECURITY,
+ nm_setting_wireless_security_get_num_pairwise,
+ nm_setting_wireless_security_remove_pairwise,
+ _validate_and_remove_wifi_sec_pairwise)
+
+DEFINE_SETTER_STR_LIST_MULTI (check_and_add_wifi_sec_group,
+ NM_SETTING_WIRELESS_SECURITY,
+ nm_setting_wireless_security_add_group)
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wifi_sec_allowed_pairwise, wifi_sec_valid_pairwises)
+
+/* 'group' */
+static const char *wifi_sec_valid_groups[] = { "wep40", "wep104", "tkip", "ccmp", NULL };
+
+static gboolean
+nmc_property_wifi_sec_set_group (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_add_wifi_sec_group (setting, prop, val, wifi_sec_valid_groups, error);
+}
+
+static gboolean
+_validate_and_remove_wifi_sec_group (NMSettingWirelessSecurity *setting,
+ const char *group,
+ GError **error)
+{
+ gboolean ret;
+ const char *valid;
+
+ valid = nmc_string_is_valid (group, wifi_sec_valid_groups, error);
+ if (!valid)
+ return FALSE;
+
+ ret = nm_setting_wireless_security_remove_group_by_value (setting, group);
+ if (!ret)
+ g_set_error (error, 1, 0,
+ _("the property doesn't contain protocol '%s'"), group);
+ return ret;
+}
+DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_wifi_sec_remove_group,
+ NM_SETTING_WIRELESS_SECURITY,
+ nm_setting_wireless_security_get_num_groups,
+ nm_setting_wireless_security_remove_group,
+ _validate_and_remove_wifi_sec_group)
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_wifi_sec_allowed_group, wifi_sec_valid_groups)
+
+/* 'wep-key' */
+static gboolean
+nmc_property_wifi_set_wep_key (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ NMWepKeyType guessed_type = NM_WEP_KEY_TYPE_UNKNOWN;
+ NMWepKeyType type;
+ guint32 prev_idx, idx;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* Get currently set type */
+ type = nm_setting_wireless_security_get_wep_key_type (NM_SETTING_WIRELESS_SECURITY (setting));
+
+ /* Guess key type */
+ if (nm_utils_wep_key_valid (val, NM_WEP_KEY_TYPE_KEY))
+ guessed_type = NM_WEP_KEY_TYPE_KEY;
+ else if (nm_utils_wep_key_valid (val, NM_WEP_KEY_TYPE_PASSPHRASE))
+ guessed_type = NM_WEP_KEY_TYPE_PASSPHRASE;
+
+ if (guessed_type == NM_WEP_KEY_TYPE_UNKNOWN) {
+ g_set_error (error, 1, 0, _("'%s' is not valid"), val);
+ return FALSE;
+ }
+
+ if (type != NM_WEP_KEY_TYPE_UNKNOWN && type != guessed_type) {
+ if (nm_utils_wep_key_valid (val, type))
+ guessed_type = type;
+ else {
+ g_set_error (error, 1, 0,
+ _("'%s' not compatible with %s '%s', please change the key or set the right %s first."),
+ val, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, wep_key_type_to_string (type),
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE);
+ return FALSE;
+ }
+ }
+ prev_idx = nm_setting_wireless_security_get_wep_tx_keyidx (NM_SETTING_WIRELESS_SECURITY (setting));
+ idx = prop[strlen (prop) - 1] - '0';
+ printf (_("WEP key is guessed to be of '%s'\n"), wep_key_type_to_string (guessed_type));
+ if (idx != prev_idx)
+ printf (_("WEP key index set to '%d'\n"), idx);
+
+ g_object_set (setting, prop, val, NULL);
+ g_object_set (setting, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, guessed_type, NULL);
+ if (idx != prev_idx)
+ g_object_set (setting, NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, idx, NULL);
+ return TRUE;
+}
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+/* 'wep-key-type' */
+static gboolean
+nmc_property_wifi_set_wep_key_type (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ unsigned long type_int;
+ const char *valid_wep_types[] = { "unknown", "key", "passphrase", NULL };
+ const char *type_str = NULL;
+ const char *key0, *key1,* key2, *key3;
+ NMWepKeyType type = NM_WEP_KEY_TYPE_UNKNOWN;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_string_to_uint (val, TRUE, 0, 2, &type_int)) {
+ if (!(type_str = nmc_string_is_valid (val, valid_wep_types, NULL))) {
+ g_set_error (error, 1, 0, _("'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"), val);
+ return FALSE;
+ }
+ if (type_str == valid_wep_types[1])
+ type = NM_WEP_KEY_TYPE_KEY;
+ else if (type_str == valid_wep_types[2])
+ type = NM_WEP_KEY_TYPE_PASSPHRASE;
+ } else
+ type = (NMWepKeyType) type_int;
+
+ /* Check type compatibility with set keys */
+ key0 = nm_setting_wireless_security_get_wep_key (NM_SETTING_WIRELESS_SECURITY (setting), 0);
+ key1 = nm_setting_wireless_security_get_wep_key (NM_SETTING_WIRELESS_SECURITY (setting), 1);
+ key2 = nm_setting_wireless_security_get_wep_key (NM_SETTING_WIRELESS_SECURITY (setting), 2);
+ key3 = nm_setting_wireless_security_get_wep_key (NM_SETTING_WIRELESS_SECURITY (setting), 3);
+ if (key0 && !nm_utils_wep_key_valid (key0, type))
+ printf (_("Warning: '%s' is not compatible with '%s' type, please change or delete the key.\n"),
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, wep_key_type_to_string (type));
+ if (key1 && !nm_utils_wep_key_valid (key1, type))
+ printf (_("Warning: '%s' is not compatible with '%s' type, please change or delete the key.\n"),
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY1, wep_key_type_to_string (type));
+ if (key2 && !nm_utils_wep_key_valid (key2, type))
+ printf (_("Warning: '%s' is not compatible with '%s' type, please change or delete the key.\n"),
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY2, wep_key_type_to_string (type));
+ if (key3 && !nm_utils_wep_key_valid (key3, type))
+ printf (_("Warning: '%s' is not compatible with '%s' type, please change or delete the key.\n"),
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY3, wep_key_type_to_string (type));
+
+ g_object_set (setting, prop, type, NULL);
+ return TRUE;
+}
+
+static const char *
+nmc_property_wifi_describe_wep_key_type (NMSetting *setting, const char *prop)
+{
+ static char *desc = NULL;
+
+ if (G_UNLIKELY (desc == NULL)) {
+ desc = g_strdup_printf (_("Enter the type of WEP keys. The accepted values are: "
+ "0 or unknown, 1 or key, and 2 or passphrase.\n"));
+ }
+ return desc;
+}
+
+/* 'psk' */
+static gboolean
+nmc_property_wifi_set_psk (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nm_utils_wpa_psk_valid (val)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid PSK"), val);
+ return FALSE;
+ }
+ g_object_set (setting, prop, val, NULL);
+ return TRUE;
+}
+
+#define DCB_ALL_FLAGS (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE | NM_SETTING_DCB_FLAG_WILLING)
+
+/* DCB stuff */
+static gboolean
+nmc_property_dcb_set_flags (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ char **strv = NULL, **iter;
+ NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE;
+ long int t;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* Check for overall hex numeric value */
+ if (nmc_string_to_int_base (val, 0, TRUE, 0, DCB_ALL_FLAGS, &t))
+ flags = (guint) t;
+ else {
+ /* Check for individual flag numbers */
+ strv = nmc_strsplit_set (val, " \t,", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ if (!nmc_string_to_int_base (*iter, 0, TRUE, 0, DCB_ALL_FLAGS, &t))
+ t = -1;
+
+ if ( g_ascii_strcasecmp (*iter, "enable") == 0
+ || g_ascii_strcasecmp (*iter, "enabled") == 0
+ || t == NM_SETTING_DCB_FLAG_ENABLE)
+ flags |= NM_SETTING_DCB_FLAG_ENABLE;
+ else if ( g_ascii_strcasecmp (*iter, "advertise") == 0
+ || t == NM_SETTING_DCB_FLAG_ADVERTISE)
+ flags |= NM_SETTING_DCB_FLAG_ADVERTISE;
+ else if ( g_ascii_strcasecmp (*iter, "willing") == 0
+ || t == NM_SETTING_DCB_FLAG_WILLING)
+ flags |= NM_SETTING_DCB_FLAG_WILLING;
+ else if ( g_ascii_strcasecmp (*iter, "disable") == 0
+ || g_ascii_strcasecmp (*iter, "disabled") == 0
+ || t == 0) {
+ /* pass */
+ } else {
+ g_set_error (error, 1, 0, _("'%s' is not a valid DCB flag"), *iter);
+ return FALSE;
+ }
+ }
+ g_strfreev (strv);
+ }
+
+ /* Validate the number according to the property spec */
+ if (!validate_uint (setting, prop, (guint) flags, error))
+ return FALSE;
+
+ g_object_set (setting, prop, (guint) flags, NULL);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_dcb_set_priority (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ long int priority = 0;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!nmc_string_to_int (val, FALSE, -1, 7, &priority)) {
+ g_set_error (error, 1, 0, _("'%s' is not a DCB app priority"), val);
+ return FALSE;
+ }
+
+ /* Validate the number according to the property spec */
+ if (!validate_int (setting, prop, (gint) priority, error))
+ return FALSE;
+
+ g_object_set (setting, prop, (gint) priority, NULL);
+ return TRUE;
+}
+
+static gboolean
+dcb_parse_uint_array (const char *val,
+ guint max,
+ guint other,
+ guint *out_array,
+ GError **error)
+{
+ char **items, **iter;
+ guint i = 0;
+
+ g_return_val_if_fail (out_array != NULL, FALSE);
+
+ items = g_strsplit_set (val, ",", -1);
+ if (g_strv_length (items) != 8) {
+ g_set_error_literal (error, 1, 0, _("must contain 8 comma-separated numbers"));
+ goto error;
+ }
- g_free (ssid_str);
- g_free (channel_str);
- g_free (dhcp_anycast_str);
+ for (iter = items; iter && *iter; iter++) {
+ long int num = 0;
+ gboolean success;
+
+ *iter = g_strstrip (*iter);
+ success = nmc_string_to_int_base (*iter, 10, TRUE, 0, other ? other : max, &num);
+
+ /* If number is greater than 'max' it must equal 'other' */
+ if (success && other && (num > max) && (num != other))
+ success = FALSE;
+
+ if (!success) {
+ if (other) {
+ g_set_error (error, 1, 0, _("'%s' not a number between 0 and %u (inclusive) or %u"),
+ *iter, max, other);
+ } else {
+ g_set_error (error, 1, 0, _("'%s' not a number between 0 and %u (inclusive)"),
+ *iter, max);
+ }
+ goto error;
+ }
+ out_array[i++] = (guint) num;
+ }
return TRUE;
+
+error:
+ g_strfreev (items);
+ return FALSE;
}
static void
-vpn_data_item (const char *key, const char *value, gpointer user_data)
+dcb_check_feature_enabled (NMSettingDcb *s_dcb, const char *flags_prop)
{
- GString *ret_str = (GString *) user_data;
+ NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE;
- if (ret_str->len != 0)
- g_string_append (ret_str, ", ");
+ g_object_get (s_dcb, flags_prop, &flags, NULL);
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE))
+ printf (_("Warning: changes will have no effect until '%s' includes 1 (enabled)\n\n"), flags_prop);
+}
- g_string_append_printf (ret_str, "%s = %s", key, value);
+static gboolean
+nmc_property_dcb_set_pfc (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ guint i = 0;
+ guint nums[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!dcb_parse_uint_array (val, 1, 0, nums, error))
+ return FALSE;
+
+ for (i = 0; i < 8; i++)
+ nm_setting_dcb_set_priority_flow_control (NM_SETTING_DCB (setting), i, !!nums[i]);
+
+ dcb_check_feature_enabled (NM_SETTING_DCB (setting), NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS);
+ return TRUE;
}
-gboolean
-setting_vpn_details (NMSettingVPN *s_vpn, NmCli *nmc)
+static gboolean
+nmc_property_dcb_set_pg_group_id (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- GString *data_item_str, *secret_str;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ guint i = 0;
+ guint nums[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- g_return_val_if_fail (NM_IS_SETTING_VPN (s_vpn), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- nmc->allowed_fields = nmc_fields_setting_vpn;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_VPN_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ if (!dcb_parse_uint_array (val, 7, 15, nums, error))
+ return FALSE;
- data_item_str = g_string_new (NULL);
- secret_str = g_string_new (NULL);
- nm_setting_vpn_foreach_data_item (s_vpn, &vpn_data_item, data_item_str);
- nm_setting_vpn_foreach_secret (s_vpn, &vpn_data_item, secret_str);
+ for (i = 0; i < 8; i++)
+ nm_setting_dcb_set_priority_group_id (NM_SETTING_DCB (setting), i, nums[i]);
+
+ dcb_check_feature_enabled (NM_SETTING_DCB (setting), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS);
+ return TRUE;
+}
- nmc->allowed_fields[0].value = NM_SETTING_VPN_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_vpn_get_service_type (s_vpn);
- nmc->allowed_fields[2].value = nm_setting_vpn_get_user_name (s_vpn);
- nmc->allowed_fields[3].value = data_item_str->str;
- nmc->allowed_fields[4].value = secret_str->str;
+static gboolean
+nmc_property_dcb_set_pg_group_bandwidth (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ guint i = 0, sum = 0;
+ guint nums[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- g_string_free (data_item_str, TRUE);
- g_string_free (secret_str, TRUE);
+ if (!dcb_parse_uint_array (val, 100, 0, nums, error))
+ return FALSE;
+ for (i = 0; i < 8; i++)
+ sum += nums[i];
+ if (sum != 100) {
+ g_set_error_literal (error, 1, 0, _("bandwidth percentages must total 100%%"));
+ return FALSE;
+ }
+
+ for (i = 0; i < 8; i++)
+ nm_setting_dcb_set_priority_group_bandwidth (NM_SETTING_DCB (setting), i, nums[i]);
+
+ dcb_check_feature_enabled (NM_SETTING_DCB (setting), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS);
return TRUE;
}
-gboolean
-setting_wimax_details (NMSettingWimax *s_wimax, NmCli *nmc)
+static gboolean
+nmc_property_dcb_set_pg_bandwidth (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- const GByteArray *mac;
- char *device_mac_str = NULL;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ guint i = 0;
+ guint nums[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- g_return_val_if_fail (NM_IS_SETTING_WIMAX (s_wimax), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!dcb_parse_uint_array (val, 100, 0, nums, error))
+ return FALSE;
+
+ for (i = 0; i < 8; i++)
+ nm_setting_dcb_set_priority_bandwidth (NM_SETTING_DCB (setting), i, nums[i]);
+
+ dcb_check_feature_enabled (NM_SETTING_DCB (setting), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_dcb_set_pg_strict (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ guint i = 0;
+ guint nums[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!dcb_parse_uint_array (val, 1, 0, nums, error))
+ return FALSE;
- nmc->allowed_fields = nmc_fields_setting_wimax;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_WIMAX_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ for (i = 0; i < 8; i++)
+ nm_setting_dcb_set_priority_strict_bandwidth (NM_SETTING_DCB (setting), i, !!nums[i]);
- mac = nm_setting_wimax_get_mac_address (s_wimax);
- if (mac)
- device_mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_ETHER);
+ dcb_check_feature_enabled (NM_SETTING_DCB (setting), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS);
+ return TRUE;
+}
+
+static gboolean
+nmc_property_dcb_set_pg_traffic_class (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ guint i = 0;
+ guint nums[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- nmc->allowed_fields[0].value = NM_SETTING_WIMAX_SETTING_NAME;
- nmc->allowed_fields[1].value = device_mac_str;
- nmc->allowed_fields[2].value = nm_setting_wimax_get_network_name (s_wimax);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ if (!dcb_parse_uint_array (val, 7, 0, nums, error))
+ return FALSE;
- g_free (device_mac_str);
+ for (i = 0; i < 8; i++)
+ nm_setting_dcb_set_priority_traffic_class (NM_SETTING_DCB (setting), i, nums[i]);
+ dcb_check_feature_enabled (NM_SETTING_DCB (setting), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS);
return TRUE;
}
+/* 'app-fcoe-mode' */
+static const char *_dcb_valid_fcoe_modes[] = { NM_SETTING_DCB_FCOE_MODE_FABRIC,
+ NM_SETTING_DCB_FCOE_MODE_VN2VN,
+ NULL };
+
+static gboolean
+nmc_property_dcb_set_app_fcoe_mode (NMSetting *setting, const char *prop, const char *val, GError **error)
+{
+ return check_and_set_string (setting, prop, val, _dcb_valid_fcoe_modes, error);
+}
+
+DEFINE_ALLOWED_VAL_FUNC (nmc_property_dcb_allowed_app_fcoe_modes, _dcb_valid_fcoe_modes)
+
+/*----------------------------------------------------------------------------*/
+
+static void
+nmc_add_prop_funcs (char *key,
+ NmcPropertyGetFunc get_func,
+ NmcPropertySetFunc set_func,
+ NmcPropertyRemoveFunc remove_func,
+ NmcPropertyDescribeFunc describe_func,
+ NmcPropertyValuesFunc values_func,
+ NmcPropertyOut2InFunc out2in_func)
+{
+ NmcPropertyFuncs *item = g_malloc0 (sizeof (NmcPropertyFuncs));
+ item->get_func = get_func;
+ item->set_func = set_func;
+ item->remove_func = remove_func;
+ item->describe_func = describe_func;
+ item->values_func = values_func;
+ item->out2in_func = out2in_func;
+
+ g_hash_table_insert (nmc_properties, key, item);
+}
+
+/* concatenate setting name and property name */
+#define GLUE(A,B) (g_strconcat ((NM_SETTING_##A##_SETTING_NAME),(NM_SETTING_##A##_##B), NULL))
+void
+nmc_properties_init (void)
+{
+ if (G_LIKELY (nmc_properties))
+ return;
+
+ /* create properties hash table */
+ nmc_properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+ /* Add editable properties for NM_SETTING_802_1X_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (802_1X, EAP),
+ nmc_property_802_1X_get_eap,
+ nmc_property_802_1X_set_eap,
+ nmc_property_802_1X_remove_eap,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, IDENTITY),
+ nmc_property_802_1X_get_identity,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, ANONYMOUS_IDENTITY),
+ nmc_property_802_1X_get_anonymous_identity,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PAC_FILE),
+ nmc_property_802_1X_get_pac_file,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, CA_CERT),
+ nmc_property_802_1X_get_ca_cert,
+ nmc_property_802_1X_set_ca_cert,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, CA_PATH),
+ nmc_property_802_1X_get_ca_path,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, SUBJECT_MATCH),
+ nmc_property_802_1X_get_subject_match,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, ALTSUBJECT_MATCHES),
+ nmc_property_802_1X_get_altsubject_matches,
+ nmc_property_802_1X_set_altsubject_matches,
+ nmc_property_802_1X_remove_altsubject_matches,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, CLIENT_CERT),
+ nmc_property_802_1X_get_client_cert,
+ nmc_property_802_1X_set_client_cert,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE1_PEAPVER),
+ nmc_property_802_1X_get_phase1_peapver,
+ nmc_property_802_1X_set_phase1_peapver,
+ NULL,
+ NULL,
+ nmc_property_802_1X_allowed_phase1_peapver,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE1_PEAPLABEL),
+ nmc_property_802_1X_get_phase1_peaplabel,
+ nmc_property_802_1X_set_phase1_peaplabel,
+ NULL,
+ NULL,
+ nmc_property_802_1X_allowed_phase1_peaplabel,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE1_FAST_PROVISIONING),
+ nmc_property_802_1X_get_phase1_fast_provisioning,
+ nmc_property_802_1X_set_phase1_fast_provisioning,
+ NULL,
+ NULL,
+ nmc_property_802_1X_allowed_phase1_fast_provisioning,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_AUTH),
+ nmc_property_802_1X_get_phase2_auth,
+ nmc_property_802_1X_set_phase2_auth,
+ NULL,
+ NULL,
+ nmc_property_802_1X_allowed_phase2_auth,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_AUTHEAP),
+ nmc_property_802_1X_get_phase2_autheap,
+ nmc_property_802_1X_set_phase2_autheap,
+ NULL,
+ NULL,
+ nmc_property_802_1X_allowed_phase2_autheap,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_CA_CERT),
+ nmc_property_802_1X_get_phase2_ca_cert,
+ nmc_property_802_1X_set_phase2_ca_cert,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_CA_PATH),
+ nmc_property_802_1X_get_phase2_ca_path,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_SUBJECT_MATCH),
+ nmc_property_802_1X_get_phase2_subject_match,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_ALTSUBJECT_MATCHES),
+ nmc_property_802_1X_get_phase2_altsubject_matches,
+ nmc_property_802_1X_set_phase2_altsubject_matches,
+ nmc_property_802_1X_remove_phase2_altsubject_matches,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_CLIENT_CERT),
+ nmc_property_802_1X_get_phase2_client_cert,
+ nmc_property_802_1X_set_phase2_client_cert,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PASSWORD),
+ nmc_property_802_1X_get_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PASSWORD_FLAGS),
+ nmc_property_802_1X_get_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (802_1X, PASSWORD_RAW),
+ nmc_property_802_1X_get_password_raw,
+ nmc_property_802_1X_set_password_raw,
+ NULL,
+ nmc_property_802_1X_describe_password_raw,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PASSWORD_RAW_FLAGS),
+ nmc_property_802_1X_get_password_raw_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (802_1X, PRIVATE_KEY),
+ nmc_property_802_1X_get_private_key,
+ nmc_property_802_1X_set_private_key,
+ NULL,
+ nmc_property_802_1X_describe_private_key,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PRIVATE_KEY_PASSWORD),
+ nmc_property_802_1X_get_private_key_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PRIVATE_KEY_PASSWORD_FLAGS),
+ nmc_property_802_1X_get_private_key_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_PRIVATE_KEY),
+ nmc_property_802_1X_get_phase2_private_key,
+ nmc_property_802_1X_set_phase2_private_key,
+ NULL,
+ nmc_property_802_1X_describe_private_key,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_PRIVATE_KEY_PASSWORD),
+ nmc_property_802_1X_get_phase2_private_key_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PHASE2_PRIVATE_KEY_PASSWORD_FLAGS),
+ nmc_property_802_1X_get_phase2_private_key_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (802_1X, PIN),
+ nmc_property_802_1X_get_pin,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (802_1X, PIN_FLAGS),
+ nmc_property_802_1X_get_pin_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (802_1X, SYSTEM_CA_CERTS),
+ nmc_property_802_1X_get_system_ca_certs,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_ADSL_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (ADSL, USERNAME),
+ nmc_property_adsl_get_username,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (ADSL, PASSWORD),
+ nmc_property_adsl_get_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (ADSL, PASSWORD_FLAGS),
+ nmc_property_adsl_get_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (ADSL, PROTOCOL),
+ nmc_property_adsl_get_protocol,
+ nmc_property_adsl_set_protocol,
+ NULL,
+ NULL,
+ nmc_property_adsl_allowed_protocol,
+ NULL);
+ nmc_add_prop_funcs (GLUE (ADSL, ENCAPSULATION),
+ nmc_property_adsl_get_encapsulation,
+ nmc_property_adsl_set_encapsulation,
+ NULL,
+ NULL,
+ nmc_property_adsl_allowed_encapsulation,
+ NULL);
+ nmc_add_prop_funcs (GLUE (ADSL, VPI),
+ nmc_property_adsl_get_vpi,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (ADSL, VCI),
+ nmc_property_adsl_get_vci,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_BLUETOOTH_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (BLUETOOTH, BDADDR),
+ nmc_property_bluetooth_get_bdaddr,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BLUETOOTH, TYPE),
+ nmc_property_bluetooth_get_type,
+ nmc_property_bluetooth_set_type,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_BOND_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (BOND, INTERFACE_NAME),
+ nmc_property_bond_get_interface_name,
+ nmc_property_set_ifname,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BOND, OPTIONS),
+ nmc_property_bond_get_options,
+ nmc_property_bond_set_options,
+ nmc_property_bond_remove_option_options,
+ nmc_property_bond_describe_options,
+ nmc_property_bond_allowed_options,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_BRIDGE_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (BRIDGE, INTERFACE_NAME),
+ nmc_property_bridge_get_interface_name,
+ nmc_property_set_ifname,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE, MAC_ADDRESS),
+ nmc_property_bridge_get_mac_address,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE, STP),
+ nmc_property_bridge_get_stp,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE, PRIORITY),
+ nmc_property_bridge_get_priority,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE, FORWARD_DELAY),
+ nmc_property_bridge_get_forward_delay,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE, HELLO_TIME),
+ nmc_property_bridge_get_hello_time,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE, MAX_AGE),
+ nmc_property_bridge_get_max_age,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE, AGEING_TIME),
+ nmc_property_bridge_get_ageing_time,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_BRIDGE_PORT_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (BRIDGE_PORT, PRIORITY),
+ nmc_property_bridge_port_get_priority,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE_PORT, PATH_COST),
+ nmc_property_bridge_port_get_path_cost,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (BRIDGE_PORT, HAIRPIN_MODE),
+ nmc_property_bridge_port_get_hairpin_mode,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_CDMA_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (CDMA, NUMBER),
+ nmc_property_cdma_get_number,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CDMA, USERNAME),
+ nmc_property_cdma_get_username,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CDMA, PASSWORD),
+ nmc_property_cdma_get_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CDMA, PASSWORD_FLAGS),
+ nmc_property_cdma_get_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+
+ /* Add editable properties for NM_SETTING_CONNECTION_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (CONNECTION, ID),
+ nmc_property_connection_get_id,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, UUID),
+ nmc_property_connection_get_uuid,
+ NULL, /* forbid setting/removing UUID */
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, INTERFACE_NAME),
+ nmc_property_connection_get_interface_name,
+ nmc_property_set_ifname,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, TYPE),
+ nmc_property_connection_get_type,
+ NULL, /* read-only */
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, AUTOCONNECT),
+ nmc_property_connection_get_autoconnect,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, TIMESTAMP),
+ nmc_property_connection_get_timestamp,
+ NULL, /* read-only */
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, READ_ONLY),
+ nmc_property_connection_get_read_only,
+ NULL, /* 'read-only' is read-only :-) */
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, PERMISSIONS),
+ nmc_property_connection_get_permissions,
+ nmc_property_connection_set_permissions,
+ nmc_property_connection_remove_permissions,
+ nmc_property_connection_describe_permissions,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, ZONE),
+ nmc_property_connection_get_zone,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, MASTER),
+ nmc_property_connection_get_master,
+ nmc_property_con_set_master,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, SLAVE_TYPE),
+ nmc_property_connection_get_slave_type,
+ nmc_property_con_set_slave_type,
+ NULL,
+ NULL,
+ nmc_property_con_allowed_slave_type,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, SECONDARIES),
+ nmc_property_connection_get_secondaries,
+ nmc_property_connection_set_secondaries,
+ nmc_property_connection_remove_secondaries,
+ nmc_property_connection_describe_secondaries,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, GATEWAY_PING_TIMEOUT),
+ nmc_property_connection_get_gateway_ping_timeout,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_DCB_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (DCB, APP_FCOE_FLAGS),
+ nmc_property_dcb_get_app_fcoe_flags,
+ nmc_property_dcb_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, APP_FCOE_MODE),
+ nmc_property_dcb_get_app_fcoe_mode,
+ nmc_property_dcb_set_app_fcoe_mode,
+ NULL,
+ NULL,
+ nmc_property_dcb_allowed_app_fcoe_modes,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, APP_FCOE_PRIORITY),
+ nmc_property_dcb_get_app_fcoe_priority,
+ nmc_property_dcb_set_priority,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, APP_ISCSI_FLAGS),
+ nmc_property_dcb_get_app_iscsi_flags,
+ nmc_property_dcb_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, APP_ISCSI_PRIORITY),
+ nmc_property_dcb_get_app_iscsi_priority,
+ nmc_property_dcb_set_priority,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, APP_FIP_FLAGS),
+ nmc_property_dcb_get_app_fip_flags,
+ nmc_property_dcb_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, APP_FIP_PRIORITY),
+ nmc_property_dcb_get_app_fip_priority,
+ nmc_property_dcb_set_priority,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_FLOW_CONTROL_FLAGS),
+ nmc_property_dcb_get_pfc_flags,
+ nmc_property_dcb_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_FLOW_CONTROL),
+ nmc_property_dcb_get_pfc,
+ nmc_property_dcb_set_pfc,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_GROUP_FLAGS),
+ nmc_property_dcb_get_pg_flags,
+ nmc_property_dcb_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_GROUP_ID),
+ nmc_property_dcb_get_pg_group_id,
+ nmc_property_dcb_set_pg_group_id,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_GROUP_BANDWIDTH),
+ nmc_property_dcb_get_pg_group_bandwidth,
+ nmc_property_dcb_set_pg_group_bandwidth,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_BANDWIDTH),
+ nmc_property_dcb_get_pg_bandwidth,
+ nmc_property_dcb_set_pg_bandwidth,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_STRICT_BANDWIDTH),
+ nmc_property_dcb_get_pg_strict,
+ nmc_property_dcb_set_pg_strict,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (DCB, PRIORITY_TRAFFIC_CLASS),
+ nmc_property_dcb_get_pg_traffic_class,
+ nmc_property_dcb_set_pg_traffic_class,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_GSM_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (GSM, NUMBER),
+ nmc_property_gsm_get_number,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (GSM, USERNAME),
+ nmc_property_gsm_get_username,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (GSM, PASSWORD),
+ nmc_property_gsm_get_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (GSM, PASSWORD_FLAGS),
+ nmc_property_gsm_get_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (GSM, APN),
+ nmc_property_gsm_get_apn,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (GSM, NETWORK_ID),
+ nmc_property_gsm_get_network_id,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (GSM, NETWORK_TYPE),
+ nmc_property_gsm_get_network_type,
+ nmc_property_set_int,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (GSM, ALLOWED_BANDS),
+ nmc_property_gsm_get_allowed_bands,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (GSM, PIN),
+ nmc_property_gsm_get_pin,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (GSM, PIN_FLAGS),
+ nmc_property_gsm_get_pin_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (GSM, HOME_ONLY),
+ nmc_property_gsm_get_home_only,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_INFINIBAND_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (INFINIBAND, MAC_ADDRESS),
+ nmc_property_ib_get_mac_address,
+ nmc_property_ib_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (INFINIBAND, MTU),
+ nmc_property_ib_get_mtu,
+ nmc_property_set_mtu,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (INFINIBAND, TRANSPORT_MODE),
+ nmc_property_ib_get_transport_mode,
+ nmc_property_ib_set_transport_mode,
+ NULL,
+ NULL,
+ nmc_property_ib_allowed_transport_mode,
+ NULL);
+ nmc_add_prop_funcs (GLUE (INFINIBAND, P_KEY),
+ nmc_property_ib_get_p_key,
+ nmc_property_ib_set_p_key,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (INFINIBAND, PARENT),
+ nmc_property_ib_get_parent,
+ nmc_property_set_ifname,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_IP4_CONFIG_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, METHOD),
+ nmc_property_ipv4_get_method,
+ nmc_property_ipv4_set_method,
+ NULL,
+ NULL,
+ nmc_property_ipv4_allowed_method,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, DNS),
+ nmc_property_ipv4_get_dns,
+ nmc_property_ipv4_set_dns,
+ nmc_property_ipv4_remove_dns,
+ nmc_property_ipv4_describe_dns,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, DNS_SEARCH),
+ nmc_property_ipv4_get_dns_search,
+ nmc_property_ipv4_set_dns_search,
+ nmc_property_ipv4_remove_dns_search,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, ADDRESSES),
+ nmc_property_ipv4_get_addresses,
+ nmc_property_ipv4_set_addresses,
+ nmc_property_ipv4_remove_addresses,
+ nmc_property_ipv4_describe_addresses,
+ NULL,
+ nmc_property_out2in_addresses);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, ROUTES),
+ nmc_property_ipv4_get_routes,
+ nmc_property_ipv4_set_routes,
+ nmc_property_ipv4_remove_routes,
+ nmc_property_ipv4_describe_routes,
+ NULL,
+ nmc_property_out2in_routes);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, IGNORE_AUTO_ROUTES),
+ nmc_property_ipv4_get_ignore_auto_routes,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, IGNORE_AUTO_DNS),
+ nmc_property_ipv4_get_ignore_auto_dns,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, DHCP_CLIENT_ID),
+ nmc_property_ipv4_get_dhcp_client_id,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, DHCP_SEND_HOSTNAME),
+ nmc_property_ipv4_get_dhcp_send_hostname,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, DHCP_HOSTNAME),
+ nmc_property_ipv4_get_dhcp_hostname,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, NEVER_DEFAULT),
+ nmc_property_ipv4_get_never_default,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP4_CONFIG, MAY_FAIL),
+ nmc_property_ipv4_get_may_fail,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_IP6_CONFIG_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, METHOD),
+ nmc_property_ipv6_get_method,
+ nmc_property_ipv6_set_method,
+ NULL,
+ NULL,
+ nmc_property_ipv6_allowed_method,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, DNS),
+ nmc_property_ipv6_get_dns,
+ nmc_property_ipv6_set_dns,
+ nmc_property_ipv6_remove_dns,
+ nmc_property_ipv6_describe_dns,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, DNS_SEARCH),
+ nmc_property_ipv6_get_dns_search,
+ nmc_property_ipv6_set_dns_search,
+ nmc_property_ipv6_remove_dns_search,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, ADDRESSES),
+ nmc_property_ipv6_get_addresses,
+ nmc_property_ipv6_set_addresses,
+ nmc_property_ipv6_remove_addresses,
+ nmc_property_ipv6_describe_addresses,
+ NULL,
+ nmc_property_out2in_addresses);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, ROUTES),
+ nmc_property_ipv6_get_routes,
+ nmc_property_ipv6_set_routes,
+ nmc_property_ipv6_remove_routes,
+ nmc_property_ipv6_describe_routes,
+ NULL,
+ nmc_property_out2in_routes);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, IGNORE_AUTO_ROUTES),
+ nmc_property_ipv6_get_ignore_auto_routes,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, IGNORE_AUTO_DNS),
+ nmc_property_ipv6_get_ignore_auto_dns,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, NEVER_DEFAULT),
+ nmc_property_ipv6_get_never_default,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, MAY_FAIL),
+ nmc_property_ipv6_get_may_fail,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, IP6_PRIVACY),
+ nmc_property_ipv6_get_ip6_privacy,
+ nmc_property_ipv6_set_ip6_privacy,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (IP6_CONFIG, DHCP_HOSTNAME),
+ nmc_property_ipv6_get_dhcp_hostname,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_OLPC_MESH_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (OLPC_MESH, SSID),
+ nmc_property_olpc_get_ssid,
+ nmc_property_set_ssid,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (OLPC_MESH, CHANNEL),
+ nmc_property_olpc_get_channel,
+ nmc_property_olpc_set_channel,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (OLPC_MESH, DHCP_ANYCAST_ADDRESS),
+ nmc_property_olpc_get_anycast_address,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_PPP_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (PPP, NOAUTH),
+ nmc_property_ppp_get_noauth,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, REFUSE_EAP),
+ nmc_property_ppp_get_refuse_eap,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, REFUSE_PAP),
+ nmc_property_ppp_get_refuse_pap,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, REFUSE_CHAP),
+ nmc_property_ppp_get_refuse_chap,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, REFUSE_MSCHAP),
+ nmc_property_ppp_get_refuse_mschap,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, REFUSE_MSCHAPV2),
+ nmc_property_ppp_get_refuse_mschapv2,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, NOBSDCOMP),
+ nmc_property_ppp_get_nobsdcomp,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, NODEFLATE),
+ nmc_property_ppp_get_nodeflate,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, NO_VJ_COMP),
+ nmc_property_ppp_get_no_vj_comp,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, REQUIRE_MPPE),
+ nmc_property_ppp_get_require_mppe,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, REQUIRE_MPPE_128),
+ nmc_property_ppp_get_require_mppe_128,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, MPPE_STATEFUL),
+ nmc_property_ppp_get_mppe_stateful,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, CRTSCTS),
+ nmc_property_ppp_get_crtscts,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, BAUD),
+ nmc_property_ppp_get_baud,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, MRU),
+ nmc_property_ppp_get_mru,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, MTU),
+ nmc_property_ppp_get_mtu,
+ nmc_property_set_mtu,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, LCP_ECHO_FAILURE),
+ nmc_property_ppp_get_lcp_echo_failure,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPP, LCP_ECHO_INTERVAL),
+ nmc_property_ppp_get_lcp_echo_interval,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_PPPOE_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (PPPOE, SERVICE),
+ nmc_property_pppoe_get_service,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPPOE, USERNAME),
+ nmc_property_pppoe_get_username,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPPOE, PASSWORD),
+ nmc_property_pppoe_get_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (PPPOE, PASSWORD_FLAGS),
+ nmc_property_pppoe_get_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+
+ /* Add editable properties for NM_SETTING_SERIAL_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (SERIAL, BAUD),
+ nmc_property_serial_get_baud,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (SERIAL, BITS),
+ nmc_property_serial_get_bits,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (SERIAL, PARITY),
+ nmc_property_serial_get_parity,
+ nmc_property_serial_set_parity,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (SERIAL, STOPBITS),
+ nmc_property_serial_get_stopbits,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (SERIAL, SEND_DELAY),
+ nmc_property_serial_get_send_delay,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_TEAM_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (TEAM, INTERFACE_NAME),
+ nmc_property_team_get_interface_name,
+ nmc_property_set_ifname,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (TEAM, CONFIG),
+ nmc_property_team_get_config,
+ nmc_property_team_set_config,
+ NULL,
+ nmc_property_team_describe_config,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_TEAM_PORT_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (TEAM_PORT, CONFIG),
+ nmc_property_team_port_get_config,
+ nmc_property_team_set_config,
+ NULL,
+ nmc_property_team_describe_config,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_VLAN_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (VLAN, INTERFACE_NAME),
+ nmc_property_vlan_get_interface_name,
+ nmc_property_set_ifname,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VLAN, PARENT),
+ nmc_property_vlan_get_parent,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VLAN, ID),
+ nmc_property_vlan_get_id,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VLAN, FLAGS),
+ nmc_property_vlan_get_flags,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VLAN, INGRESS_PRIORITY_MAP),
+ nmc_property_vlan_get_ingress_priority_map,
+ nmc_property_vlan_set_ingress_priority_map,
+ nmc_property_vlan_remove_ingress_priority_map,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VLAN, EGRESS_PRIORITY_MAP),
+ nmc_property_vlan_get_egress_priority_map,
+ nmc_property_vlan_set_egress_priority_map,
+ nmc_property_vlan_remove_egress_priority_map,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_VPN_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (VPN, SERVICE_TYPE),
+ nmc_property_vpn_get_service_type,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VPN, USER_NAME),
+ nmc_property_vpn_get_user_name,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VPN, DATA),
+ nmc_property_vpn_get_data,
+ nmc_property_vpn_set_data,
+ nmc_property_vpn_remove_option_data,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (VPN, SECRETS),
+ nmc_property_vpn_get_secrets,
+ nmc_property_vpn_set_secrets,
+ nmc_property_vpn_remove_option_secret,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_WIMAX_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (WIMAX, NETWORK_NAME),
+ nmc_property_wimax_get_network_name,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIMAX, MAC_ADDRESS),
+ nmc_property_wimax_get_mac_address,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_WIRED_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (WIRED, PORT),
+ nmc_property_wired_get_port,
+ NULL, /*nmc_property_wired_set_port,*/
+ NULL,
+ NULL,
+ NULL, /*nmc_property_wired_allowed_port,*/
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, SPEED),
+ nmc_property_wired_get_speed,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, DUPLEX),
+ nmc_property_wired_get_duplex,
+ NULL, /*nmc_property_wired_set_duplex,*/
+ NULL,
+ NULL,
+ NULL,
+ NULL); /*nmc_property_wired_allowed_duplex);*/
+ nmc_add_prop_funcs (GLUE (WIRED, AUTO_NEGOTIATE),
+ nmc_property_wired_get_auto_negotiate,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, MAC_ADDRESS),
+ nmc_property_wired_get_mac_address,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, CLONED_MAC_ADDRESS),
+ nmc_property_wired_get_cloned_mac_address,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, MAC_ADDRESS_BLACKLIST),
+ nmc_property_wired_get_mac_address_blacklist,
+ nmc_property_wired_set_mac_address_blacklist,
+ nmc_property_wired_remove_mac_address_blacklist,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, MTU),
+ nmc_property_wired_get_mtu,
+ nmc_property_set_mtu,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, S390_SUBCHANNELS),
+ nmc_property_wired_get_s390_subchannels,
+ nmc_property_wired_set_s390_subchannels,
+ NULL,
+ nmc_property_wired_describe_s390_subchannels,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, S390_NETTYPE),
+ nmc_property_wired_get_s390_nettype,
+ nmc_property_wired_set_s390_nettype,
+ NULL,
+ NULL,
+ nmc_property_wired_allowed_s390_nettype,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRED, S390_OPTIONS),
+ nmc_property_wired_get_s390_options,
+ nmc_property_wired_set_s390_options,
+ nmc_property_wired_remove_option_s390_options,
+ nmc_property_wired_describe_s390_options,
+ nmc_property_wired_allowed_s390_options,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_WIRELESS_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (WIRELESS, SSID),
+ nmc_property_wireless_get_ssid,
+ nmc_property_set_ssid,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, MODE),
+ nmc_property_wireless_get_mode,
+ nmc_property_wifi_set_mode,
+ NULL,
+ NULL,
+ nmc_property_wifi_allowed_mode,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, BAND),
+ nmc_property_wireless_get_band,
+ nmc_property_wifi_set_band,
+ NULL,
+ NULL,
+ nmc_property_wifi_allowed_band,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, CHANNEL),
+ nmc_property_wireless_get_channel,
+ nmc_property_wifi_set_channel,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, BSSID),
+ nmc_property_wireless_get_bssid,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ /*
+ * Do not allow setting 'rate' and 'tx-power'. They are not implemented in
+ * NM core, nor in ifcfg-rh plugin (thus not preserved over re-reading).
+ */
+ nmc_add_prop_funcs (GLUE (WIRELESS, RATE),
+ nmc_property_wireless_get_rate,
+ NULL, /* editing rate disabled */
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, TX_POWER),
+ nmc_property_wireless_get_tx_power,
+ NULL, /* editing tx-power disabled */
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, MAC_ADDRESS),
+ nmc_property_wireless_get_mac_address,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, CLONED_MAC_ADDRESS),
+ nmc_property_wireless_get_cloned_mac_address,
+ nmc_property_set_mac,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, MAC_ADDRESS_BLACKLIST),
+ nmc_property_wireless_get_mac_address_blacklist,
+ nmc_property_wireless_set_mac_address_blacklist,
+ nmc_property_wireless_remove_mac_address_blacklist,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, SEEN_BSSIDS),
+ nmc_property_wireless_get_seen_bssids,
+ NULL, /* read-only */
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, MTU),
+ nmc_property_wireless_get_mtu,
+ nmc_property_set_mtu,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS, HIDDEN),
+ nmc_property_wireless_get_hidden,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ /* Add editable properties for NM_SETTING_WIRELESS_SECURITY_SETTING_NAME */
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, KEY_MGMT),
+ nmc_property_wifi_sec_get_key_mgmt,
+ nmc_property_wifi_sec_set_key_mgmt,
+ NULL,
+ NULL,
+ nmc_property_wifi_sec_allowed_key_mgmt,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_TX_KEYIDX),
+ nmc_property_wifi_sec_get_wep_tx_keyidx,
+ nmc_property_set_uint,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, AUTH_ALG),
+ nmc_property_wifi_sec_get_auth_alg,
+ nmc_property_wifi_sec_set_auth_alg,
+ NULL,
+ NULL,
+ nmc_property_wifi_sec_allowed_auth_alg,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, PROTO),
+ nmc_property_wifi_sec_get_proto,
+ nmc_property_wifi_sec_set_proto,
+ nmc_property_wifi_sec_remove_proto,
+ NULL,
+ nmc_property_wifi_sec_allowed_proto,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, PAIRWISE),
+ nmc_property_wifi_sec_get_pairwise,
+ nmc_property_wifi_sec_set_pairwise,
+ nmc_property_wifi_sec_remove_pairwise,
+ NULL,
+ nmc_property_wifi_sec_allowed_pairwise,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, GROUP),
+ nmc_property_wifi_sec_get_group,
+ nmc_property_wifi_sec_set_group,
+ nmc_property_wifi_sec_remove_group,
+ NULL,
+ nmc_property_wifi_sec_allowed_group,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, LEAP_USERNAME),
+ nmc_property_wifi_sec_get_leap_username,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_KEY0),
+ nmc_property_wifi_sec_get_wep_key0,
+ nmc_property_wifi_set_wep_key,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_KEY1),
+ nmc_property_wifi_sec_get_wep_key1,
+ nmc_property_wifi_set_wep_key,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_KEY2),
+ nmc_property_wifi_sec_get_wep_key2,
+ nmc_property_wifi_set_wep_key,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_KEY3),
+ nmc_property_wifi_sec_get_wep_key3,
+ nmc_property_wifi_set_wep_key,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_KEY_FLAGS),
+ nmc_property_wifi_sec_get_wep_key_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_KEY_TYPE),
+ nmc_property_wifi_sec_get_wep_key_type,
+ nmc_property_wifi_set_wep_key_type,
+ NULL,
+ nmc_property_wifi_describe_wep_key_type,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, PSK),
+ nmc_property_wifi_sec_get_psk,
+ nmc_property_wifi_set_psk,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, PSK_FLAGS),
+ nmc_property_wifi_sec_get_psk_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, LEAP_PASSWORD),
+ nmc_property_wifi_sec_get_leap_password,
+ nmc_property_set_string,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, LEAP_PASSWORD_FLAGS),
+ nmc_property_wifi_sec_get_leap_password_flags,
+ nmc_property_set_flags,
+ NULL,
+ NULL,
+ NULL,
+ nmc_property_out2in_cut_paren);
+}
+
+void
+nmc_properties_cleanup ()
+{
+ if (nmc_properties)
+ g_hash_table_destroy (nmc_properties);
+}
+
+static const NmcPropertyFuncs *
+nmc_properties_find (const char *s_name, const char *p_name)
+{
+ NmcPropertyFuncs *item = NULL;
+ char *key;
+
+ /* FIXME: maybe it's better to init it globally */
+ nmc_properties_init ();
+
+ key = g_strdup_printf ("%s%s", s_name, p_name);
+ item = (NmcPropertyFuncs *) g_hash_table_lookup (nmc_properties, key);
+ g_free (key);
+
+ return item;
+}
+
+static char *
+get_property_val (NMSetting *setting, const char *prop, gboolean convert, GError **error)
+{
+ const NmcPropertyFuncs *item;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ item = nmc_properties_find (nm_setting_get_name (setting), prop);
+ if (item && item->get_func) {
+ char *prop_val = item->get_func (setting);
+ if (convert && item->out2in_func) {
+ char *converted = item->out2in_func (prop_val);
+ g_free (prop_val);
+ return converted;
+ } else
+ return prop_val;
+ }
+
+ g_set_error_literal (error, 1, 0, _("don't know how to get the property value"));
+ return NULL;
+}
+
+/*
+ * Generic function for getting property value.
+ *
+ * Gets property value as a string by calling specialized functions.
+ *
+ * Returns: current property value. The caller must free the returned string.
+ */
+char *
+nmc_setting_get_property (NMSetting *setting, const char *prop, GError **error)
+{
+ return get_property_val (setting, prop, FALSE, error);
+}
+
+/*
+ * The same as nmc_setting_get_property(), but in addition converts
+ * usual output format into a simpler one, used as input in the editor.
+ */
+char *
+nmc_setting_get_property_out2in (NMSetting *setting, const char *prop, GError **error)
+{
+ return get_property_val (setting, prop, TRUE, error);
+}
+
+/*
+ * Generic function for setting property value.
+ *
+ * Sets property=val in setting by calling specialized functions.
+ * If val is NULL then default property value is set.
+ *
+ * Returns: TRUE on success; FALSE on failure and sets error
+ */
gboolean
-setting_infiniband_details (NMSettingInfiniband *s_infiniband, NmCli *nmc)
+nmc_setting_set_property (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- const GByteArray *mac;
- char *mtu_str, *mac_str = NULL;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ const NmcPropertyFuncs *item;
- g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (s_infiniband), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ item = nmc_properties_find (nm_setting_get_name (setting), prop);
+ if (item && item->set_func) {
+ if (!val) {
+ /* No value argument sets default value */
+ nmc_property_set_default_value (setting, prop);
+ return TRUE;
+ }
+ return item->set_func (setting, prop, val, error);
+ }
- nmc->allowed_fields = nmc_fields_setting_infiniband;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_INFINIBAND_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ g_set_error_literal (error, 1, 0, _("the property can't be changed"));
+ return FALSE;
+}
- mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- if (mac)
- mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_INFINIBAND);
- mtu_str = g_strdup_printf ("%d", nm_setting_infiniband_get_mtu (s_infiniband));
+void
+nmc_property_set_default_value (NMSetting *setting, const char *prop)
+{
+ GValue value = G_VALUE_INIT;
+ GParamSpec *param_spec;
+
+ param_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop);
+ if (param_spec) {
+ g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (param_spec));
+ g_param_value_set_default (param_spec, &value);
+ g_object_set_property (G_OBJECT (setting), prop, &value);
+ }
+}
+
+/*
+ * Generic function for reseting (single value) properties.
+ *
+ * The function resets the property value to the default one. It respects
+ * nmcli restrictions for changing properties. So if 'set_func' is NULL,
+ * reseting the value is denied.
+ *
+ * Returns: TRUE on success; FALSE on failure and sets error
+ */
+gboolean
+nmc_setting_reset_property (NMSetting *setting, const char *prop, GError **error)
+{
+ const NmcPropertyFuncs *item;
- nmc->allowed_fields[0].value = NM_SETTING_INFINIBAND_SETTING_NAME;
- nmc->allowed_fields[1].value = mac_str;
- nmc->allowed_fields[2].value = strcmp (mtu_str, "0") ? mtu_str : _("auto");
- nmc->allowed_fields[3].value = nm_setting_infiniband_get_transport_mode (s_infiniband);
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ item = nmc_properties_find (nm_setting_get_name (setting), prop);
+ if (item && item->set_func) {
+ nmc_property_set_default_value (setting, prop);
+ return TRUE;
+ }
+ g_set_error_literal (error, 1, 0, _("the property can't be changed"));
+ return FALSE;
+}
+
+/*
+ * Generic function for removing items for collection-type properties.
+ *
+ * If 'option' is not NULL, it tries to remove it, otherwise 'idx' is used.
+ * For single-value properties (not having specialized remove function) this
+ * function does nothing and just returns TRUE.
+ *
+ * Returns: TRUE on success; FALSE on failure and sets error
+ */
+gboolean
+nmc_setting_remove_property_option (NMSetting *setting,
+ const char *prop,
+ const char *option,
+ guint32 idx,
+ GError **error)
+{
+ const NmcPropertyFuncs *item;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- g_free (mac_str);
- g_free (mtu_str);
+ item = nmc_properties_find (nm_setting_get_name (setting), prop);
+ if (item && item->remove_func)
+ return item->remove_func (setting, prop, option, idx, error);
return TRUE;
}
-gboolean
-setting_bond_details (NMSettingBond *s_bond, NmCli *nmc)
+/*
+ * Get valid property names for a setting.
+ *
+ * Returns: string array with the properties or NULL on failure.
+ * The returned value should be freed with g_strfreev()
+ */
+char **
+nmc_setting_get_valid_properties (NMSetting *setting)
{
- GString *bond_options_s;
+ char **valid_props = NULL;
+ GParamSpec **props, **iter;
+ guint num;
int i;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
- g_return_val_if_fail (NM_IS_SETTING_BOND (s_bond), FALSE);
+ /* Iterate through properties */
+ i = 0;
+ props = g_object_class_list_properties (G_OBJECT_GET_CLASS (G_OBJECT (setting)), &num);
+ valid_props = g_malloc0 (sizeof (char*) * (num + 1));
+ for (iter = props; iter && *iter; iter++) {
+ const char *key_name = g_param_spec_get_name (*iter);
- nmc->allowed_fields = nmc_fields_setting_bond;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_BOND_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ /* Add all properties except for "name" that is non-editable */
+ if (g_strcmp0 (key_name, "name") != 0)
+ valid_props[i++] = g_strdup (key_name);
+ }
+ valid_props[i] = NULL;
- bond_options_s = g_string_new (NULL);
- for (i = 0; i < nm_setting_bond_get_num_options (s_bond); i++) {
- const char *key, *value;
+ return valid_props;
+}
- nm_setting_bond_get_option (s_bond, i, &key, &value);
- g_string_append_printf (bond_options_s, "%s=%s,", key, value);
+/*
+ * Return allowed values for 'prop' as a string.
+ */
+const char *
+nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop)
+{
+
+ const NmcPropertyFuncs *item;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+
+ item = nmc_properties_find (nm_setting_get_name (setting), prop);
+ if (item && item->values_func)
+ return item->values_func (setting, prop);
+
+ return NULL;
+}
+
+/*
+ * Create a description string for a property.
+ *
+ * It returns a description got from properties blurb, concatenated with
+ * nmcli specific description (if it exists).
+ *
+ * Returns: property description or NULL on failure. The caller must free the string.
+ */
+char *
+nmc_setting_get_property_desc (NMSetting *setting, const char *prop)
+{
+ GParamSpec *spec;
+ const NmcPropertyFuncs *item;
+ const char *setting_desc = "";
+ const char *setting_desc_title = "";
+ const char *nmcli_desc = NULL;
+ const char *nmcli_desc_title = "";
+ const char *nmcli_nl = "";
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+
+ spec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop);
+ if (spec) {
+ setting_desc = g_param_spec_get_blurb (spec);
+ setting_desc_title = _("[NM property description]");
}
- g_string_truncate (bond_options_s, bond_options_s->len-1); /* chop off trailing ',' */
- nmc->allowed_fields[0].value = NM_SETTING_BOND_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_bond_get_interface_name (s_bond);
- nmc->allowed_fields[2].value = bond_options_s->str;
+ item = nmc_properties_find (nm_setting_get_name (setting), prop);
+ if (item && item->describe_func) {
+ nmcli_desc = item->describe_func (setting, prop);
+ nmcli_desc_title = _("[nmcli specific description]");
+ nmcli_nl = "\n";
+ }
+
+ return g_strdup_printf ("%s\n%s\n%s%s%s%s",
+ setting_desc_title, setting_desc,
+ nmcli_nl, nmcli_desc_title, nmcli_nl,
+ nmcli_desc ? nmcli_desc : "");
+}
+
+/*
+ * Gets setting:prop property value and returns it in 'value'.
+ * Caller is responsible for freeing the GValue resources using g_value_unset()
+ */
+gboolean
+nmc_property_get_gvalue (NMSetting *setting, const char *prop, GValue *value)
+{
+ GParamSpec *param_spec;
+
+ param_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop);
+ if (param_spec) {
+ memset (value, 0, sizeof (GValue));
+ g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (param_spec));
+ g_object_get_property (G_OBJECT (setting), prop, value);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/*
+ * Sets setting:prop property value from 'value'.
+ */
+gboolean
+nmc_property_set_gvalue (NMSetting *setting, const char *prop, GValue *value)
+{
+ GParamSpec *param_spec;
+
+ param_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop);
+ if (param_spec && G_VALUE_TYPE (value) == G_PARAM_SPEC_VALUE_TYPE (param_spec)) {
+ g_object_set_property (G_OBJECT (setting), prop, value);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/*----------------------------------------------------------------------------*/
+
+static gboolean
+setting_connection_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingConnection *s_con = NM_SETTING_CONNECTION (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (s_con), FALSE);
- g_string_free (bond_options_s, TRUE);
+ tmpl = nmc_fields_setting_connection;
+ tmpl_len = sizeof (nmc_fields_setting_connection);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_CONNECTION_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_connection_get_id (setting));
+ set_val_str (arr, 2, nmc_property_connection_get_uuid (setting));
+ set_val_str (arr, 3, nmc_property_connection_get_interface_name (setting));
+ set_val_str (arr, 4, nmc_property_connection_get_type (setting));
+ set_val_str (arr, 5, nmc_property_connection_get_autoconnect (setting));
+ set_val_str (arr, 6, nmc_property_connection_get_timestamp (setting));
+ set_val_str (arr, 7, nmc_property_connection_get_read_only (setting));
+ set_val_str (arr, 8, nmc_property_connection_get_permissions (setting));
+ set_val_str (arr, 9, nmc_property_connection_get_zone (setting));
+ set_val_str (arr, 10, nmc_property_connection_get_master (setting));
+ set_val_str (arr, 11, nmc_property_connection_get_slave_type (setting));
+ set_val_str (arr, 12, nmc_property_connection_get_secondaries (setting));
+ set_val_str (arr, 13, nmc_property_connection_get_gateway_ping_timeout (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
return TRUE;
}
-gboolean
-setting_vlan_details (NMSettingVlan *s_vlan, NmCli *nmc)
+static gboolean
+setting_wired_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
{
- char *vlan_id_str, *vlan_flags_str, *vlan_ingress_prio_str, *vlan_egress_prio_str;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NMSettingWired *s_wired = NM_SETTING_WIRED (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- g_return_val_if_fail (NM_IS_SETTING_VLAN (s_vlan), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (s_wired), FALSE);
- nmc->allowed_fields = nmc_fields_setting_vlan;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_VLAN_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ tmpl = nmc_fields_setting_wired;
+ tmpl_len = sizeof (nmc_fields_setting_wired);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_WIRED_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_wired_get_port (setting));
+ set_val_str (arr, 2, nmc_property_wired_get_speed (setting));
+ set_val_str (arr, 3, nmc_property_wired_get_duplex (setting));
+ set_val_str (arr, 4, nmc_property_wired_get_auto_negotiate (setting));
+ set_val_str (arr, 5, nmc_property_wired_get_mac_address (setting));
+ set_val_str (arr, 6, nmc_property_wired_get_cloned_mac_address (setting));
+ set_val_str (arr, 7, nmc_property_wired_get_mac_address_blacklist (setting));
+ set_val_str (arr, 8, nmc_property_wired_get_mtu (setting));
+ set_val_str (arr, 9, nmc_property_wired_get_s390_subchannels (setting));
+ set_val_str (arr, 10, nmc_property_wired_get_s390_nettype (setting));
+ set_val_str (arr, 11, nmc_property_wired_get_s390_options (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
- vlan_id_str = g_strdup_printf ("%d", nm_setting_vlan_get_id (s_vlan));
- vlan_flags_str = vlan_flags_to_string (nm_setting_vlan_get_flags (s_vlan));
- vlan_ingress_prio_str = vlan_priorities_to_string (s_vlan, NM_VLAN_INGRESS_MAP);
- vlan_egress_prio_str = vlan_priorities_to_string (s_vlan, NM_VLAN_EGRESS_MAP);
+ return TRUE;
+}
- nmc->allowed_fields[0].value = NM_SETTING_VLAN_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_vlan_get_interface_name (s_vlan);
- nmc->allowed_fields[2].value = nm_setting_vlan_get_parent (s_vlan);
- nmc->allowed_fields[3].value = vlan_id_str;
- nmc->allowed_fields[4].value = vlan_flags_str;
- nmc->allowed_fields[5].value = vlan_ingress_prio_str;
- nmc->allowed_fields[6].value = vlan_egress_prio_str;
+static gboolean
+setting_802_1X_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSetting8021x *s_8021x = NM_SETTING_802_1X (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (s_8021x), FALSE);
+
+ tmpl = nmc_fields_setting_8021X;
+ tmpl_len = sizeof (nmc_fields_setting_8021X);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_802_1X_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_802_1X_get_eap (setting));
+ set_val_str (arr, 2, nmc_property_802_1X_get_identity (setting));
+ set_val_str (arr, 3, nmc_property_802_1X_get_anonymous_identity (setting));
+ set_val_str (arr, 4, nmc_property_802_1X_get_pac_file (setting));
+ set_val_str (arr, 5, nmc_property_802_1X_get_ca_cert (setting));
+ set_val_str (arr, 6, nmc_property_802_1X_get_ca_path (setting));
+ set_val_str (arr, 7, nmc_property_802_1X_get_subject_match (setting));
+ set_val_str (arr, 8, nmc_property_802_1X_get_altsubject_matches (setting));
+ set_val_str (arr, 9, nmc_property_802_1X_get_client_cert (setting));
+ set_val_str (arr, 10, nmc_property_802_1X_get_phase1_peapver (setting));
+ set_val_str (arr, 11, nmc_property_802_1X_get_phase1_peaplabel (setting));
+ set_val_str (arr, 12, nmc_property_802_1X_get_phase1_fast_provisioning (setting));
+ set_val_str (arr, 13, nmc_property_802_1X_get_phase2_auth (setting));
+ set_val_str (arr, 14, nmc_property_802_1X_get_phase2_autheap (setting));
+ set_val_str (arr, 15, nmc_property_802_1X_get_phase2_ca_cert (setting));
+ set_val_str (arr, 16, nmc_property_802_1X_get_phase2_ca_path (setting));
+ set_val_str (arr, 17, nmc_property_802_1X_get_phase2_subject_match (setting));
+ set_val_str (arr, 18, nmc_property_802_1X_get_phase2_altsubject_matches (setting));
+ set_val_str (arr, 19, nmc_property_802_1X_get_phase2_client_cert (setting));
+ set_val_str (arr, 20, nmc_property_802_1X_get_password (setting));
+ set_val_str (arr, 21, nmc_property_802_1X_get_password_flags (setting));
+ set_val_str (arr, 22, nmc_property_802_1X_get_password_raw (setting));
+ set_val_str (arr, 23, nmc_property_802_1X_get_password_raw_flags (setting));
+ set_val_str (arr, 24, nmc_property_802_1X_get_private_key (setting));
+ set_val_str (arr, 25, nmc_property_802_1X_get_private_key_password (setting));
+ set_val_str (arr, 26, nmc_property_802_1X_get_private_key_password_flags (setting));
+ set_val_str (arr, 27, nmc_property_802_1X_get_phase2_private_key (setting));
+ set_val_str (arr, 28, nmc_property_802_1X_get_phase2_private_key_password (setting));
+ set_val_str (arr, 29, nmc_property_802_1X_get_phase2_private_key_password_flags (setting));
+ set_val_str (arr, 30, nmc_property_802_1X_get_pin (setting));
+ set_val_str (arr, 31, nmc_property_802_1X_get_pin_flags (setting));
+ set_val_str (arr, 32, nmc_property_802_1X_get_system_ca_certs (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ return TRUE;
+}
- g_free (vlan_id_str);
- g_free (vlan_flags_str);
- g_free (vlan_ingress_prio_str);
- g_free (vlan_egress_prio_str);
+static gboolean
+setting_wireless_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (s_wireless), FALSE);
+
+ tmpl = nmc_fields_setting_wireless;
+ tmpl_len = sizeof (nmc_fields_setting_wireless);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_WIRELESS_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_wireless_get_ssid (setting));
+ set_val_str (arr, 2, nmc_property_wireless_get_mode (setting));
+ set_val_str (arr, 3, nmc_property_wireless_get_band (setting));
+ set_val_str (arr, 4, nmc_property_wireless_get_channel (setting));
+ set_val_str (arr, 5, nmc_property_wireless_get_bssid (setting));
+ set_val_str (arr, 6, nmc_property_wireless_get_rate (setting));
+ set_val_str (arr, 7, nmc_property_wireless_get_tx_power (setting));
+ set_val_str (arr, 8, nmc_property_wireless_get_mac_address (setting));
+ set_val_str (arr, 9, nmc_property_wireless_get_cloned_mac_address (setting));
+ set_val_str (arr, 10, nmc_property_wireless_get_mac_address_blacklist (setting));
+ set_val_str (arr, 11, nmc_property_wireless_get_mtu (setting));
+ set_val_str (arr, 12, nmc_property_wireless_get_seen_bssids (setting));
+ set_val_str (arr, 13, nmc_property_wireless_get_hidden (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
return TRUE;
}
-gboolean
-setting_adsl_details (NMSettingAdsl *s_adsl, NmCli *nmc)
+static gboolean
+setting_wireless_security_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
{
- char *pswd_flags;
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- g_return_val_if_fail (NM_IS_SETTING_ADSL (s_adsl), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (s_wireless_sec), FALSE);
- nmc->allowed_fields = nmc_fields_setting_adsl;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_ADSL_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ tmpl = nmc_fields_setting_wireless_security;
+ tmpl_len = sizeof (nmc_fields_setting_wireless_security);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_WIRELESS_SECURITY_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_wifi_sec_get_key_mgmt (setting));
+ set_val_str (arr, 2, nmc_property_wifi_sec_get_wep_tx_keyidx (setting));
+ set_val_str (arr, 3, nmc_property_wifi_sec_get_auth_alg (setting));
+ set_val_str (arr, 4, nmc_property_wifi_sec_get_proto (setting));
+ set_val_str (arr, 5, nmc_property_wifi_sec_get_pairwise (setting));
+ set_val_str (arr, 6, nmc_property_wifi_sec_get_group (setting));
+ set_val_str (arr, 7, nmc_property_wifi_sec_get_leap_username (setting));
+ set_val_str (arr, 8, nmc_property_wifi_sec_get_wep_key0 (setting));
+ set_val_str (arr, 9, nmc_property_wifi_sec_get_wep_key1 (setting));
+ set_val_str (arr, 10, nmc_property_wifi_sec_get_wep_key2 (setting));
+ set_val_str (arr, 11, nmc_property_wifi_sec_get_wep_key3 (setting));
+ set_val_str (arr, 12, nmc_property_wifi_sec_get_wep_key_flags (setting));
+ set_val_str (arr, 13, nmc_property_wifi_sec_get_wep_key_type (setting));
+ set_val_str (arr, 14, nmc_property_wifi_sec_get_psk (setting));
+ set_val_str (arr, 15, nmc_property_wifi_sec_get_psk_flags (setting));
+ set_val_str (arr, 16, nmc_property_wifi_sec_get_leap_password (setting));
+ set_val_str (arr, 17, nmc_property_wifi_sec_get_leap_password_flags (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
- pswd_flags = secret_flags_to_string (nm_setting_adsl_get_password_flags (s_adsl));
+ return TRUE;
+}
- nmc->allowed_fields[0].value = NM_SETTING_ADSL_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_adsl_get_username (s_adsl);
- nmc->allowed_fields[2].value = nm_setting_adsl_get_password (s_adsl);
- nmc->allowed_fields[3].value = pswd_flags;
- nmc->allowed_fields[4].value = nm_setting_adsl_get_protocol (s_adsl);
- nmc->allowed_fields[5].value = nm_setting_adsl_get_encapsulation (s_adsl);
- nmc->allowed_fields[6].value = g_strdup_printf ("%d", nm_setting_adsl_get_vpi (s_adsl));
- nmc->allowed_fields[7].value = g_strdup_printf ("%d", nm_setting_adsl_get_vci (s_adsl));
+static gboolean
+setting_ip4_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingIP4Config *s_ip4 = NM_SETTING_IP4_CONFIG (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (s_ip4), FALSE);
- g_free (pswd_flags);
- g_free ((char*) nmc->allowed_fields[6].value);
- g_free ((char*) nmc->allowed_fields[7].value);
+ tmpl = nmc_fields_setting_ip4_config;
+ tmpl_len = sizeof (nmc_fields_setting_ip4_config);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_IP4_CONFIG_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_ipv4_get_method (setting));
+ set_val_str (arr, 2, nmc_property_ipv4_get_dns (setting));
+ set_val_str (arr, 3, nmc_property_ipv4_get_dns_search (setting));
+ set_val_str (arr, 4, nmc_property_ipv4_get_addresses (setting));
+ set_val_str (arr, 5, nmc_property_ipv4_get_routes (setting));
+ set_val_str (arr, 6, nmc_property_ipv4_get_ignore_auto_routes (setting));
+ set_val_str (arr, 7, nmc_property_ipv4_get_ignore_auto_dns (setting));
+ set_val_str (arr, 8, nmc_property_ipv4_get_dhcp_client_id (setting));
+ set_val_str (arr, 9, nmc_property_ipv4_get_dhcp_send_hostname (setting));
+ set_val_str (arr, 10, nmc_property_ipv4_get_dhcp_hostname (setting));
+ set_val_str (arr, 11, nmc_property_ipv4_get_never_default (setting));
+ set_val_str (arr, 12, nmc_property_ipv4_get_may_fail (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
return TRUE;
}
-gboolean
-setting_bridge_details (NMSettingBridge *s_bridge, NmCli *nmc)
+static gboolean
+setting_ip6_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
{
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NMSettingIP6Config *s_ip6 = NM_SETTING_IP6_CONFIG (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- g_return_val_if_fail (NM_IS_SETTING_BRIDGE (s_bridge), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (s_ip6), FALSE);
+
+ tmpl = nmc_fields_setting_ip6_config;
+ tmpl_len = sizeof (nmc_fields_setting_ip6_config);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_IP6_CONFIG_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_ipv6_get_method (setting));
+ set_val_str (arr, 2, nmc_property_ipv6_get_dns (setting));
+ set_val_str (arr, 3, nmc_property_ipv6_get_dns_search (setting));
+ set_val_str (arr, 4, nmc_property_ipv6_get_addresses (setting));
+ set_val_str (arr, 5, nmc_property_ipv6_get_routes (setting));
+ set_val_str (arr, 6, nmc_property_ipv6_get_ignore_auto_routes (setting));
+ set_val_str (arr, 7, nmc_property_ipv6_get_ignore_auto_dns (setting));
+ set_val_str (arr, 8, nmc_property_ipv6_get_never_default (setting));
+ set_val_str (arr, 9, nmc_property_ipv6_get_may_fail (setting));
+ set_val_str (arr, 10, nmc_property_ipv6_get_ip6_privacy (setting));
+ set_val_str (arr, 11, nmc_property_ipv6_get_dhcp_hostname (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_serial_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingSerial *s_serial = NM_SETTING_SERIAL (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- nmc->allowed_fields = nmc_fields_setting_bridge;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_BRIDGE_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ g_return_val_if_fail (NM_IS_SETTING_SERIAL (s_serial), FALSE);
- nmc->allowed_fields[0].value = NM_SETTING_BRIDGE_SETTING_NAME;
- nmc->allowed_fields[1].value = nm_setting_bridge_get_interface_name (s_bridge);
- nmc->allowed_fields[2].value = nm_setting_bridge_get_stp (s_bridge) ? _("yes") : _("no");
- nmc->allowed_fields[3].value = g_strdup_printf ("%u", nm_setting_bridge_get_priority (s_bridge));
- nmc->allowed_fields[4].value = g_strdup_printf ("%u", nm_setting_bridge_get_forward_delay (s_bridge));
- nmc->allowed_fields[5].value = g_strdup_printf ("%u", nm_setting_bridge_get_hello_time (s_bridge));
- nmc->allowed_fields[6].value = g_strdup_printf ("%u", nm_setting_bridge_get_max_age (s_bridge));
- nmc->allowed_fields[7].value = g_strdup_printf ("%u", nm_setting_bridge_get_ageing_time (s_bridge));
+ tmpl = nmc_fields_setting_serial;
+ tmpl_len = sizeof (nmc_fields_setting_serial);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_SERIAL_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_serial_get_baud (setting));
+ set_val_str (arr, 2, nmc_property_serial_get_bits (setting));
+ set_val_str (arr, 3, nmc_property_serial_get_parity (setting));
+ set_val_str (arr, 4, nmc_property_serial_get_stopbits (setting));
+ set_val_str (arr, 5, nmc_property_serial_get_send_delay (setting));
+ g_ptr_array_add (nmc->output_data, arr);
- /* free values */
- g_free ((char*) nmc->allowed_fields[3].value);
- g_free ((char*) nmc->allowed_fields[4].value);
- g_free ((char*) nmc->allowed_fields[5].value);
- g_free ((char*) nmc->allowed_fields[6].value);
- g_free ((char*) nmc->allowed_fields[7].value);
+ print_data (nmc); /* Print all data */
return TRUE;
}
-gboolean
-setting_bridge_port_details (NMSettingBridgePort *s_bridge_port, NmCli *nmc)
+static gboolean
+setting_ppp_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingPPP *s_ppp = NM_SETTING_PPP (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_PPP (s_ppp), FALSE);
+
+ tmpl = nmc_fields_setting_ppp;
+ tmpl_len = sizeof (nmc_fields_setting_ppp);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_PPP_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_ppp_get_noauth (setting));
+ set_val_str (arr, 2, nmc_property_ppp_get_refuse_eap (setting));
+ set_val_str (arr, 3, nmc_property_ppp_get_refuse_pap (setting));
+ set_val_str (arr, 4, nmc_property_ppp_get_refuse_chap (setting));
+ set_val_str (arr, 5, nmc_property_ppp_get_refuse_mschap (setting));
+ set_val_str (arr, 6, nmc_property_ppp_get_refuse_mschapv2 (setting));
+ set_val_str (arr, 7, nmc_property_ppp_get_nobsdcomp (setting));
+ set_val_str (arr, 8, nmc_property_ppp_get_nodeflate (setting));
+ set_val_str (arr, 9, nmc_property_ppp_get_no_vj_comp (setting));
+ set_val_str (arr, 10, nmc_property_ppp_get_require_mppe (setting));
+ set_val_str (arr, 11, nmc_property_ppp_get_require_mppe_128 (setting));
+ set_val_str (arr, 12, nmc_property_ppp_get_mppe_stateful (setting));
+ set_val_str (arr, 13, nmc_property_ppp_get_crtscts (setting));
+ set_val_str (arr, 14, nmc_property_ppp_get_baud (setting));
+ set_val_str (arr, 15, nmc_property_ppp_get_mru (setting));
+ set_val_str (arr, 16, nmc_property_ppp_get_mtu (setting));
+ set_val_str (arr, 17, nmc_property_ppp_get_lcp_echo_failure (setting));
+ set_val_str (arr, 18, nmc_property_ppp_get_lcp_echo_interval (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_pppoe_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingPPPOE *s_pppoe = NM_SETTING_PPPOE (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_PPPOE (s_pppoe), FALSE);
+
+ tmpl = nmc_fields_setting_pppoe;
+ tmpl_len = sizeof (nmc_fields_setting_pppoe);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_PPPOE_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_pppoe_get_service (setting));
+ set_val_str (arr, 2, nmc_property_pppoe_get_username (setting));
+ set_val_str (arr, 3, nmc_property_pppoe_get_password (setting));
+ set_val_str (arr, 4, nmc_property_pppoe_get_password_flags (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_gsm_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingGsm *s_gsm = NM_SETTING_GSM (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_GSM (s_gsm), FALSE);
+
+ tmpl = nmc_fields_setting_gsm;
+ tmpl_len = sizeof (nmc_fields_setting_gsm);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_GSM_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_gsm_get_number (setting));
+ set_val_str (arr, 2, nmc_property_gsm_get_username (setting));
+ set_val_str (arr, 3, nmc_property_gsm_get_password (setting));
+ set_val_str (arr, 4, nmc_property_gsm_get_password_flags (setting));
+ set_val_str (arr, 5, nmc_property_gsm_get_apn (setting));
+ set_val_str (arr, 6, nmc_property_gsm_get_network_id (setting));
+ set_val_str (arr, 7, nmc_property_gsm_get_network_type (setting));
+ set_val_str (arr, 8, nmc_property_gsm_get_allowed_bands (setting));
+ set_val_str (arr, 9, nmc_property_gsm_get_pin (setting));
+ set_val_str (arr, 10, nmc_property_gsm_get_pin_flags (setting));
+ set_val_str (arr, 11, nmc_property_gsm_get_home_only (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_cdma_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingCdma *s_cdma = NM_SETTING_CDMA (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_CDMA (s_cdma), FALSE);
+
+ tmpl = nmc_fields_setting_cdma;
+ tmpl_len = sizeof (nmc_fields_setting_cdma);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_CDMA_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_cdma_get_number (setting));
+ set_val_str (arr, 2, nmc_property_cdma_get_username (setting));
+ set_val_str (arr, 3, nmc_property_cdma_get_password (setting));
+ set_val_str (arr, 4, nmc_property_cdma_get_password_flags (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_bluetooth_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingBluetooth *s_bluetooth = NM_SETTING_BLUETOOTH (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_BLUETOOTH (s_bluetooth), FALSE);
+
+ tmpl = nmc_fields_setting_bluetooth;
+ tmpl_len = sizeof (nmc_fields_setting_bluetooth);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_BLUETOOTH_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_bluetooth_get_bdaddr (setting));
+ set_val_str (arr, 2, nmc_property_bluetooth_get_type (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_olpc_mesh_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingOlpcMesh *s_olpc_mesh = NM_SETTING_OLPC_MESH (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_OLPC_MESH (s_olpc_mesh), FALSE);
+
+ tmpl = nmc_fields_setting_olpc_mesh;
+ tmpl_len = sizeof (nmc_fields_setting_olpc_mesh);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_OLPC_MESH_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_olpc_get_ssid (setting));
+ set_val_str (arr, 2, nmc_property_olpc_get_channel (setting));
+ set_val_str (arr, 3, nmc_property_olpc_get_anycast_address (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_vpn_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingVPN *s_vpn = NM_SETTING_VPN (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_VPN (s_vpn), FALSE);
+
+ tmpl = nmc_fields_setting_vpn;
+ tmpl_len = sizeof (nmc_fields_setting_vpn);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_VPN_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_vpn_get_service_type (setting));
+ set_val_str (arr, 2, nmc_property_vpn_get_user_name (setting));
+ set_val_str (arr, 3, nmc_property_vpn_get_data (setting));
+ set_val_str (arr, 4, nmc_property_vpn_get_secrets (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_wimax_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingWimax *s_wimax = NM_SETTING_WIMAX (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIMAX (s_wimax), FALSE);
+
+ tmpl = nmc_fields_setting_wimax;
+ tmpl_len = sizeof (nmc_fields_setting_wimax);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_WIMAX_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_wimax_get_mac_address (setting));
+ set_val_str (arr, 2, nmc_property_wimax_get_network_name (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_infiniband_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingInfiniband *s_infiniband = NM_SETTING_INFINIBAND (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (s_infiniband), FALSE);
+
+ tmpl = nmc_fields_setting_infiniband;
+ tmpl_len = sizeof (nmc_fields_setting_infiniband);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_INFINIBAND_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_ib_get_mac_address (setting));
+ set_val_str (arr, 2, nmc_property_ib_get_mtu (setting));
+ set_val_str (arr, 3, nmc_property_ib_get_transport_mode (setting));
+ set_val_str (arr, 4, nmc_property_ib_get_p_key (setting));
+ set_val_str (arr, 5, nmc_property_ib_get_parent (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_bond_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingBond *s_bond = NM_SETTING_BOND (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_BOND (s_bond), FALSE);
+
+ tmpl = nmc_fields_setting_bond;
+ tmpl_len = sizeof (nmc_fields_setting_bond);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_BOND_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_bond_get_interface_name (setting));
+ set_val_str (arr, 2, nmc_property_bond_get_options (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_vlan_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_VLAN (s_vlan), FALSE);
+
+ tmpl = nmc_fields_setting_vlan;
+ tmpl_len = sizeof (nmc_fields_setting_vlan);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_VLAN_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_vlan_get_interface_name (setting));
+ set_val_str (arr, 2, nmc_property_vlan_get_parent (setting));
+ set_val_str (arr, 3, nmc_property_vlan_get_id (setting));
+ set_val_str (arr, 4, nmc_property_vlan_get_flags (setting));
+ set_val_str (arr, 5, nmc_property_vlan_get_ingress_priority_map (setting));
+ set_val_str (arr, 6, nmc_property_vlan_get_egress_priority_map (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_adsl_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingAdsl *s_adsl = NM_SETTING_ADSL (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (s_adsl), FALSE);
+
+ tmpl = nmc_fields_setting_adsl;
+ tmpl_len = sizeof (nmc_fields_setting_adsl);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_ADSL_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_adsl_get_username (setting));
+ set_val_str (arr, 2, nmc_property_adsl_get_password (setting));
+ set_val_str (arr, 3, nmc_property_adsl_get_password_flags (setting));
+ set_val_str (arr, 4, nmc_property_adsl_get_protocol (setting));
+ set_val_str (arr, 5, nmc_property_adsl_get_encapsulation (setting));
+ set_val_str (arr, 6, nmc_property_adsl_get_vpi (setting));
+ set_val_str (arr, 7, nmc_property_adsl_get_vci (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_bridge_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingBridge *s_bridge = NM_SETTING_BRIDGE (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (s_bridge), FALSE);
+
+ tmpl = nmc_fields_setting_bridge;
+ tmpl_len = sizeof (nmc_fields_setting_bridge);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_BRIDGE_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_bridge_get_interface_name (setting));
+ set_val_str (arr, 2, nmc_property_bridge_get_mac_address (setting));
+ set_val_str (arr, 3, nmc_property_bridge_get_stp (setting));
+ set_val_str (arr, 4, nmc_property_bridge_get_priority (setting));
+ set_val_str (arr, 5, nmc_property_bridge_get_forward_delay (setting));
+ set_val_str (arr, 6, nmc_property_bridge_get_hello_time (setting));
+ set_val_str (arr, 7, nmc_property_bridge_get_max_age (setting));
+ set_val_str (arr, 8, nmc_property_bridge_get_ageing_time (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_bridge_port_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
{
- guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
- guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
- guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
+ NMSettingBridgePort *s_bridge_port = NM_SETTING_BRIDGE_PORT (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
g_return_val_if_fail (NM_IS_SETTING_BRIDGE_PORT (s_bridge_port), FALSE);
- nmc->allowed_fields = nmc_fields_setting_bridge_port;
- nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_BRIDGE_PORT_ALL, nmc->allowed_fields, NULL);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */
+ tmpl = nmc_fields_setting_bridge_port;
+ tmpl_len = sizeof (nmc_fields_setting_bridge_port);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_BRIDGE_PORT_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_bridge_port_get_priority (setting));
+ set_val_str (arr, 2, nmc_property_bridge_port_get_path_cost (setting));
+ set_val_str (arr, 3, nmc_property_bridge_port_get_hairpin_mode (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_team_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingTeam *s_team = NM_SETTING_TEAM (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
- nmc->allowed_fields[0].value = NM_SETTING_BRIDGE_PORT_SETTING_NAME;
- nmc->allowed_fields[1].value = g_strdup_printf ("%u", nm_setting_bridge_port_get_priority (s_bridge_port));
- nmc->allowed_fields[2].value = g_strdup_printf ("%u", nm_setting_bridge_port_get_path_cost (s_bridge_port));
- nmc->allowed_fields[3].value = nm_setting_bridge_port_get_hairpin_mode (s_bridge_port) ? _("yes") : _("no");
+ g_return_val_if_fail (NM_IS_SETTING_TEAM (s_team), FALSE);
- nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
- print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+ tmpl = nmc_fields_setting_team;
+ tmpl_len = sizeof (nmc_fields_setting_team);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_TEAM_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
- g_free ((char*) nmc->allowed_fields[1].value);
- g_free ((char*) nmc->allowed_fields[2].value);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_team_get_interface_name (setting));
+ set_val_str (arr, 2, nmc_property_team_get_config (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
return TRUE;
}
+static gboolean
+setting_team_port_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingTeamPort *s_team_port = NM_SETTING_TEAM_PORT (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (s_team_port), FALSE);
+
+ tmpl = nmc_fields_setting_team_port;
+ tmpl_len = sizeof (nmc_fields_setting_team_port);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_TEAM_PORT_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_team_port_get_config (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+static gboolean
+setting_dcb_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ NMSettingDcb *s_dcb = NM_SETTING_DCB (setting);
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_DCB (s_dcb), FALSE);
+
+ tmpl = nmc_fields_setting_dcb;
+ tmpl_len = sizeof (nmc_fields_setting_dcb);
+ nmc->print_fields.indices = parse_output_fields (one_prop ? one_prop : NMC_FIELDS_SETTING_DCB_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_str (arr, 0, g_strdup (nm_setting_get_name (setting)));
+ set_val_str (arr, 1, nmc_property_dcb_get_app_fcoe_flags (setting));
+ set_val_str (arr, 2, nmc_property_dcb_get_app_fcoe_priority (setting));
+ set_val_str (arr, 3, nmc_property_dcb_get_app_fcoe_mode (setting));
+ set_val_str (arr, 4, nmc_property_dcb_get_app_iscsi_flags (setting));
+ set_val_str (arr, 5, nmc_property_dcb_get_app_iscsi_priority (setting));
+ set_val_str (arr, 6, nmc_property_dcb_get_app_fip_flags (setting));
+ set_val_str (arr, 7, nmc_property_dcb_get_app_fip_priority (setting));
+ set_val_str (arr, 8, nmc_property_dcb_get_pfc_flags (setting));
+ set_val_str (arr, 9, nmc_property_dcb_get_pfc (setting));
+ set_val_str (arr, 10, nmc_property_dcb_get_pg_flags (setting));
+ set_val_str (arr, 11, nmc_property_dcb_get_pg_group_id (setting));
+ set_val_str (arr, 12, nmc_property_dcb_get_pg_group_bandwidth (setting));
+ set_val_str (arr, 13, nmc_property_dcb_get_pg_bandwidth (setting));
+ set_val_str (arr, 14, nmc_property_dcb_get_pg_strict (setting));
+ set_val_str (arr, 15, nmc_property_dcb_get_pg_traffic_class (setting));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ return TRUE;
+}
+
+typedef struct {
+ const char *sname;
+ gboolean (*func) (NMSetting *setting, NmCli *nmc, const char *one_prop);
+} SettingDetails;
+
+static const SettingDetails detail_printers[] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, setting_connection_details },
+ { NM_SETTING_WIRED_SETTING_NAME, setting_wired_details },
+ { NM_SETTING_802_1X_SETTING_NAME, setting_802_1X_details },
+ { NM_SETTING_WIRELESS_SETTING_NAME, setting_wireless_details },
+ { NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, setting_wireless_security_details },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, setting_ip4_config_details },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME, setting_ip6_config_details },
+ { NM_SETTING_SERIAL_SETTING_NAME, setting_serial_details },
+ { NM_SETTING_PPP_SETTING_NAME, setting_ppp_details },
+ { NM_SETTING_PPPOE_SETTING_NAME, setting_pppoe_details },
+ { NM_SETTING_GSM_SETTING_NAME, setting_gsm_details },
+ { NM_SETTING_CDMA_SETTING_NAME, setting_cdma_details },
+ { NM_SETTING_BLUETOOTH_SETTING_NAME, setting_bluetooth_details },
+ { NM_SETTING_OLPC_MESH_SETTING_NAME, setting_olpc_mesh_details },
+ { NM_SETTING_VPN_SETTING_NAME, setting_vpn_details },
+ { NM_SETTING_WIMAX_SETTING_NAME, setting_wimax_details },
+ { NM_SETTING_INFINIBAND_SETTING_NAME, setting_infiniband_details },
+ { NM_SETTING_BOND_SETTING_NAME, setting_bond_details },
+ { NM_SETTING_VLAN_SETTING_NAME, setting_vlan_details },
+ { NM_SETTING_ADSL_SETTING_NAME, setting_adsl_details },
+ { NM_SETTING_BRIDGE_SETTING_NAME, setting_bridge_details },
+ { NM_SETTING_BRIDGE_PORT_SETTING_NAME, setting_bridge_port_details },
+ { NM_SETTING_TEAM_SETTING_NAME, setting_team_details },
+ { NM_SETTING_TEAM_PORT_SETTING_NAME, setting_team_port_details },
+ { NM_SETTING_DCB_SETTING_NAME, setting_dcb_details },
+ { NULL },
+};
+
+gboolean
+setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+{
+ const SettingDetails *iter = &detail_printers[0];
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+
+ while (iter->sname) {
+ if (nm_connection_lookup_setting_type (iter->sname) == G_OBJECT_TYPE (setting))
+ return iter->func (setting, nmc, one_prop);
+ iter++;
+ }
+
+ g_assert_not_reached ();
+ return FALSE;
+}
+
diff --git a/cli/src/settings.h b/cli/src/settings.h
index 15e5577f4..709c8977f 100644
--- a/cli/src/settings.h
+++ b/cli/src/settings.h
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2013 Red Hat, Inc.
*/
#ifndef NMC_SETTINGS_H
@@ -42,33 +42,48 @@
#include <nm-setting-bridge.h>
#include <nm-setting-bridge-port.h>
#include <nm-setting-vlan.h>
+#include <nm-setting-dcb.h>
#include "nmcli.h"
#include "utils.h"
+/* --- Functions --- */
-gboolean setting_details (NMSetting *ssetting, NmCli *nmc);
-gboolean setting_connection_details (NMSettingConnection *s_con, NmCli *nmc);
-gboolean setting_wired_details (NMSettingWired *s_wired, NmCli *nmc);
-gboolean setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc);
-gboolean setting_wireless_details (NMSettingWireless *s_wireless, NmCli *nmc);
-gboolean setting_wireless_security_details (NMSettingWirelessSecurity *s_wsec, NmCli *nmc);
-gboolean setting_ip4_config_details (NMSettingIP4Config *s_ip4, NmCli *nmc);
-gboolean setting_ip6_config_details (NMSettingIP6Config *s_ip6, NmCli *nmc);
-gboolean setting_serial_details (NMSettingSerial *s_serial, NmCli *nmc);
-gboolean setting_ppp_details (NMSettingPPP *s_ppp, NmCli *nmc);
-gboolean setting_pppoe_details (NMSettingPPPOE *s_pppoe, NmCli *nmc);
-gboolean setting_gsm_details (NMSettingGsm *s_gsm, NmCli *nmc);
-gboolean setting_cdma_details (NMSettingCdma *s_cdma, NmCli *nmc);
-gboolean setting_bluetooth_details (NMSettingBluetooth *s_bluetooth, NmCli *nmc);
-gboolean setting_olpc_mesh_details (NMSettingOlpcMesh *s_olpc_mesh, NmCli *nmc);
-gboolean setting_vpn_details (NMSettingVPN *s_vpn, NmCli *nmc);
-gboolean setting_wimax_details (NMSettingWimax *s_wimax, NmCli *nmc);
-gboolean setting_infiniband_details (NMSettingInfiniband *s_infiniband, NmCli *nmc);
-gboolean setting_bond_details (NMSettingBond *s_bond, NmCli *nmc);
-gboolean setting_vlan_details (NMSettingVlan *s_vlan, NmCli *nmc);
-gboolean setting_adsl_details (NMSettingAdsl *s_adsl, NmCli *nmc);
-gboolean setting_bridge_details (NMSettingBridge *s_bridge, NmCli *nmc);
-gboolean setting_bridge_port_details (NMSettingBridgePort *s_bridge_port, NmCli *nmc);
+void nmc_properties_init (void);
+void nmc_properties_cleanup (void);
+
+NMSetting *nmc_setting_new_for_name (const char *name);
+void nmc_setting_custom_init (NMSetting *setting);
+void nmc_setting_ip4_connect_handlers (NMSettingIP4Config *setting);
+void nmc_setting_ip6_connect_handlers (NMSettingIP6Config *setting);
+void nmc_setting_wireless_connect_handlers (NMSettingWireless *setting);
+
+char **nmc_setting_get_valid_properties (NMSetting *setting);
+char *nmc_setting_get_property_desc (NMSetting *setting, const char *prop);
+const char *nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop);
+char *nmc_setting_get_property (NMSetting *setting,
+ const char *prop,
+ GError **error);
+char *nmc_setting_get_property_out2in (NMSetting *setting,
+ const char *prop,
+ GError **error);
+gboolean nmc_setting_set_property (NMSetting *setting,
+ const char *prop,
+ const char *val,
+ GError **error);
+gboolean nmc_setting_reset_property (NMSetting *setting,
+ const char *prop,
+ GError **error);
+gboolean nmc_setting_remove_property_option (NMSetting *setting,
+ const char *prop,
+ const char *option,
+ guint32 idx,
+ GError **error);
+void nmc_property_set_default_value (NMSetting *setting, const char *prop);
+
+gboolean nmc_property_get_gvalue (NMSetting *setting, const char *prop, GValue *value);
+gboolean nmc_property_set_gvalue (NMSetting *setting, const char *prop, GValue *value);
+
+gboolean setting_details (NMSetting *ssetting, NmCli *nmc, const char *one_prop);
#endif /* NMC_SETTINGS_H */
diff --git a/cli/src/utils.c b/cli/src/utils.c
index ab0a5dba1..9b513f5a0 100644
--- a/cli/src/utils.c
+++ b/cli/src/utils.c
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
/* Generated configuration file */
@@ -22,6 +22,8 @@
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
@@ -36,8 +38,8 @@
int
matches (const char *cmd, const char *pattern)
{
- int len = strlen (cmd);
- if (len > strlen (pattern))
+ size_t len = strlen (cmd);
+ if (!len || len > strlen (pattern))
return -1;
return memcmp (pattern, cmd, len);
}
@@ -57,14 +59,116 @@ next_arg (int *argc, char ***argv)
return 0;
}
+gboolean
+nmc_arg_is_help (const char *arg)
+{
+ if (!arg)
+ return FALSE;
+ if ( matches (arg, "help") == 0
+ || (g_str_has_prefix (arg, "-") && matches (arg+1, "help") == 0)
+ || (g_str_has_prefix (arg, "--") && matches (arg+2, "help") == 0)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+gboolean
+nmc_arg_is_option (const char *str, const char *opt_name)
+{
+ const char *p;
+
+ if (!str || !*str)
+ return FALSE;
+
+ if (str[0] != '-')
+ return FALSE;
+
+ p = (str[1] == '-') ? str + 2 : str + 1;
+
+ return (*p ? (matches (p, opt_name) == 0) : FALSE);
+}
+
+
/*
- * Convert SSID to a printable form.
- * If it is an UTF-8 string, enclose it in quotes and return it.
- * Otherwise convert it to a hex string representation.
+ * Helper function to parse command-line arguments.
+ * arg_arr: description of arguments to look for
+ * last: whether these are last expected arguments
+ * argc: command-line argument array
+ * argv: command-line argument array size
+ * error: error set on a failure (when FALSE is returned)
+ * Returns: TRUE on success, FALSE on an error and sets 'error'
+ */
+gboolean
+nmc_parse_args (nmc_arg_t *arg_arr, gboolean last, int *argc, char ***argv, GError **error)
+{
+ nmc_arg_t *p;
+ gboolean found;
+ gboolean have_mandatory;
+
+ g_return_val_if_fail (arg_arr != NULL, FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ while (*argc > 0) {
+ found = FALSE;
+
+ for (p = arg_arr; p->name; p++) {
+ if (strcmp (**argv, p->name) == 0) {
+
+ if (p->found) {
+ /* Don't allow repeated arguments, because the argument of the same
+ * name could be used later on the line for another purpose. Assume
+ * that's the case and return.
+ */
+ return TRUE;
+ }
+
+ if (p->has_value) {
+ if (next_arg (argc, argv) != 0) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: value for '%s' argument is required."), *(*argv-1));
+ return FALSE;
+ }
+ *(p->value) = **argv;
+ }
+ p->found = TRUE;
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (!found) {
+ have_mandatory = TRUE;
+ for (p = arg_arr; p->name; p++) {
+ if (p->mandatory && !p->found) {
+ have_mandatory = FALSE;
+ break;
+ }
+ }
+
+ if (have_mandatory && !last)
+ return TRUE;
+
+ if (p->name)
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: Argument '%s' was expected, but '%s' provided."), p->name, **argv);
+ else
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: Unexpected argument '%s'"), **argv);
+ return FALSE;
+ }
+
+ next_arg (argc, argv);
+ }
+
+ return TRUE;
+}
+
+/*
+ * Convert SSID to a hex string representation.
* Caller has to free the returned string using g_free()
*/
char *
-ssid_to_printable (const char *str, gsize len)
+ssid_to_hex (const char *str, gsize len)
{
GString *printable;
char *printable_str;
@@ -73,9 +177,6 @@ ssid_to_printable (const char *str, gsize len)
if (str == NULL || len == 0)
return NULL;
- if (g_utf8_validate (str, len, NULL))
- return g_strdup_printf ("'%.*s'", (int) len, str);
-
printable = g_string_new (NULL);
for (i = 0; i < len; i++) {
g_string_append_printf (printable, "%02X", (unsigned char) str[i]);
@@ -91,19 +192,19 @@ ssid_to_printable (const char *str, gsize len)
char *
nmc_ip4_address_as_string (guint32 ip, GError **error)
{
- struct in_addr tmp_addr;
+ guint32 tmp_addr;
char buf[INET_ADDRSTRLEN];
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
memset (&buf, '\0', sizeof (buf));
- tmp_addr.s_addr = ip;
+ tmp_addr = ip;
if (inet_ntop (AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN)) {
return g_strdup (buf);
} else {
g_set_error (error, NMCLI_ERROR, 0, _("Error converting IP4 address '0x%X' to text form"),
- ntohl (tmp_addr.s_addr));
+ ntohl (tmp_addr));
return NULL;
}
}
@@ -170,6 +271,298 @@ nmc_terminal_show_progress (const char *str)
idx = 0;
}
+const char *
+nmc_term_color_sequence (NmcTermColor color)
+{
+ switch (color) {
+ case NMC_TERM_COLOR_BLACK:
+ return "\33[30m";
+ break;
+ case NMC_TERM_COLOR_RED:
+ return "\33[31m";
+ break;
+ case NMC_TERM_COLOR_GREEN:
+ return "\33[32m";
+ break;
+ case NMC_TERM_COLOR_YELLOW:
+ return "\33[33m";
+ break;
+ case NMC_TERM_COLOR_BLUE:
+ return "\33[34m";
+ break;
+ case NMC_TERM_COLOR_MAGENTA:
+ return "\33[35m";
+ break;
+ case NMC_TERM_COLOR_CYAN:
+ return "\33[36m";
+ break;
+ case NMC_TERM_COLOR_WHITE:
+ return "\33[37m";
+ break;
+ default:
+ return "";
+ break;
+ }
+}
+
+char *
+nmc_colorize (NmcTermColor color, const char *fmt, ...)
+{
+ va_list args;
+ char *str, *colored;
+ const char *ansi_color, *color_end;
+
+ va_start (args, fmt);
+ str = g_strdup_vprintf (fmt, args);
+ va_end (args);
+
+ ansi_color = nmc_term_color_sequence (color);
+ if (*ansi_color)
+ color_end = "\33[0m";
+ else
+ color_end = "";
+
+ colored = g_strdup_printf ("%s%s%s", ansi_color, str, color_end);
+ g_free (str);
+ return colored;
+}
+
+/*
+ * Convert string to signed integer.
+ * If required, the resulting number is checked to be in the <min,max> range.
+ */
+gboolean
+nmc_string_to_int_base (const char *str,
+ int base,
+ gboolean range_check,
+ long int min,
+ long int max,
+ long int *value)
+{
+ char *end;
+ long int tmp;
+
+ errno = 0;
+ tmp = strtol (str, &end, base);
+ if (errno || *end != '\0' || (range_check && (tmp < min || tmp > max))) {
+ return FALSE;
+ }
+ *value = tmp;
+ return TRUE;
+}
+
+/*
+ * Convert string to unsigned integer.
+ * If required, the resulting number is checked to be in the <min,max> range.
+ */
+gboolean
+nmc_string_to_uint_base (const char *str,
+ int base,
+ gboolean range_check,
+ unsigned long int min,
+ unsigned long int max,
+ unsigned long int *value)
+{
+ char *end;
+ unsigned long int tmp;
+
+ errno = 0;
+ tmp = strtoul (str, &end, base);
+ if (errno || *end != '\0' || (range_check && (tmp < min || tmp > max))) {
+ return FALSE;
+ }
+ *value = tmp;
+ return TRUE;
+}
+
+gboolean
+nmc_string_to_int (const char *str,
+ gboolean range_check,
+ long int min,
+ long int max,
+ long int *value)
+{
+ return nmc_string_to_int_base (str, 10, range_check, min, max, value);
+}
+
+gboolean
+nmc_string_to_uint (const char *str,
+ gboolean range_check,
+ unsigned long int min,
+ unsigned long int max,
+ unsigned long int *value)
+{
+ return nmc_string_to_uint_base (str, 10, range_check, min, max, value);
+}
+
+gboolean
+nmc_string_to_bool (const char *str, gboolean *val_bool, GError **error)
+{
+ const char *s_true[] = { "true", "yes", "on", NULL };
+ const char *s_false[] = { "false", "no", "off", NULL };
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (g_strcmp0 (str, "o") == 0) {
+ g_set_error (error, 1, 0,
+ _("'%s' is ambiguous (on x off)"), str);
+ return FALSE;
+ }
+
+ if (nmc_string_is_valid (str, s_true, NULL))
+ *val_bool = TRUE;
+ else if (nmc_string_is_valid (str, s_false, NULL))
+ *val_bool = FALSE;
+ else {
+ g_set_error (error, 1, 0,
+ _("'%s' is not valid; use [%s] or [%s]"),
+ str, "true, yes, on", "false, no, off");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*
+ * Ask user for input and return the string.
+ * The caller is responsible for freeing the returned string.
+ */
+char *
+nmc_get_user_input (const char *ask_str)
+{
+ char *line = NULL;
+ size_t line_ln = 0;
+ ssize_t num;
+
+ fprintf (stdout, "%s", ask_str);
+ num = getline (&line, &line_ln, stdin);
+
+ /* Remove newline from the string */
+ if (num < 1 || (num == 1 && line[0] == '\n')) {
+ g_free (line);
+ line = NULL;
+ } else {
+ if (line[num-1] == '\n')
+ line[num-1] = '\0';
+ }
+
+ return line;
+}
+
+/*
+ * Split string in 'line' according to 'delim' to (argument) array.
+ */
+int
+nmc_string_to_arg_array (const char *line, const char *delim, char ***argv, int *argc)
+{
+ int i = 0;
+ char **arr;
+
+ arr = g_strsplit_set (line ? line : "", delim ? delim : " \t", 0);
+ while (arr && arr[i])
+ i++;
+
+ *argc = i;
+ *argv = arr;
+
+ return 0;
+}
+
+/*
+ * Check whether 'input' is contained in 'allowed' array. It performs case
+ * insensitive comparison and supports shortcut strings if they are unique.
+ * Returns: a pointer to found string in allowed array on success or NULL.
+ * On failure: error->code : 0 - string not found; 1 - string is ambiguous
+ */
+const char *
+nmc_string_is_valid (const char *input, const char **allowed, GError **error)
+{
+ const char **p;
+ size_t input_ln, p_len;
+ gboolean prev_match = FALSE;
+ const char *ret = NULL;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ if (!input || !*input)
+ goto finish;
+
+ input_ln = strlen (input);
+ for (p = allowed; p && *p; p++) {
+ p_len = strlen (*p);
+ if (g_ascii_strncasecmp (input, *p, input_ln) == 0) {
+ if (input_ln == p_len) {
+ ret = *p;
+ break;
+ }
+ if (!prev_match)
+ ret = *p;
+ else {
+ g_set_error (error, 1, 1, _("'%s' is ambiguous (%s x %s)"),
+ input, ret, *p);
+ return NULL;
+ }
+ prev_match = TRUE;
+ }
+ }
+
+finish:
+ if (ret == NULL) {
+ char *valid_vals = g_strjoinv (", ", (char **) allowed);
+ if (!input || !*input) {
+ g_set_error (error, 1, 0, _("missing name, try one of [%s]"),
+ valid_vals);
+ } else {
+ g_set_error (error, 1, 0, _("'%s' not among [%s]"),
+ input ? input : "", valid_vals);
+ }
+
+ g_free (valid_vals);
+ }
+ return ret;
+}
+
+/*
+ * Convert string array (char **) to GSList.
+ *
+ * Returns: pointer to newly created GSList. Caller should free it.
+ */
+GSList *
+nmc_util_strv_to_slist (char **strv)
+{
+ GSList *list = NULL;
+ guint i = 0;
+
+ while (strv && strv[i])
+ list = g_slist_prepend (list, g_strdup (strv[i++]));
+
+ return g_slist_reverse (list);
+}
+
+/*
+ * Wrapper function for g_strsplit_set() that removes empty strings
+ * from the vector as they are not useful in most cases.
+ */
+char **
+nmc_strsplit_set (const char *str, const char *delimiter, int max_tokens)
+{
+ char **result;
+ uint i;
+ uint j;
+
+ result = g_strsplit_set (str, delimiter, max_tokens);
+
+ /* remove empty strings */
+ for (i = 0; result && result[i]; i++) {
+ if (*(result[i]) == '\0') {
+ g_free (result[i]);
+ for (j = i; result[j]; j++)
+ result[j] = result[j + 1];
+ i--;
+ }
+ }
+ return result;
+}
+
/*
* Find out how many columns an UTF-8 string occupies on the screen
*/
@@ -189,54 +582,165 @@ nmc_string_screen_width (const char *start, const char *end)
}
void
-set_val_str (NmcOutputField fields_array[], guint32 idx, const char *value)
+set_val_str (NmcOutputField fields_array[], guint32 idx, char *value)
{
- fields_array[idx].flags = 0;
fields_array[idx].value = value;
+ fields_array[idx].value_is_array = FALSE;
+ fields_array[idx].free_value = TRUE;
}
void
-set_val_arr (NmcOutputField fields_array[], guint32 idx, const char **value)
+set_val_strc (NmcOutputField fields_array[], guint32 idx, const char *value)
+{
+ fields_array[idx].value = (char *) value;
+ fields_array[idx].value_is_array = FALSE;
+ fields_array[idx].free_value = FALSE;
+}
+
+void
+set_val_arr (NmcOutputField fields_array[], guint32 idx, char **value)
{
- fields_array[idx].flags = NMC_OF_FLAG_ARRAY;
fields_array[idx].value = value;
+ fields_array[idx].value_is_array = TRUE;
+ fields_array[idx].free_value = TRUE;
+}
+
+void
+set_val_arrc (NmcOutputField fields_array[], guint32 idx, const char **value)
+{
+ fields_array[idx].value = (char **) value;
+ fields_array[idx].value_is_array = TRUE;
+ fields_array[idx].free_value = FALSE;
}
/*
- * Parse comma separated fields in 'fields_str' according to 'fields_array'.
- * IN: 'field_str': comma-separated fields names
- * 'fields_array': array of allowed fields
- * RETURN: GArray with indices representing fields in 'fields_array'.
- * Caller is responsible to free it.
+ * Free 'value' members in array of NmcOutputField
+ */
+void
+nmc_free_output_field_values (NmcOutputField fields_array[])
+{
+ NmcOutputField *iter = fields_array;
+
+ while (iter && iter->name) {
+ if (iter->free_value) {
+ if (iter->value_is_array)
+ g_strfreev ((char **) iter->value);
+ else
+ g_free ((char *) iter->value);
+ iter->value = NULL;
+ }
+ iter++;
+ }
+}
+
+/**
+ * parse_output_fields:
+ * @field_str: comma-separated field names to parse
+ * @fields_array: array of allowed fields
+ * @parse_groups: whether the fields can contain group prefix (e.g. general.driver)
+ * @group_fields: (out) (allow-none): array of field names for particular groups
+ * @error: (out) (allow-none): location to store error, or %NULL
+ *
+ * Parses comma separated fields in @fields_str according to @fields_array.
+ * When @parse_groups is %TRUE, fields can be in the form 'group.field'. Then
+ * @group_fields will be filled with the required field for particular group.
+ * @group_fields array corresponds to the returned array.
+ * Examples:
+ * @field_str: "type,name,uuid" | "ip4,general.device" | "ip4.address,ip6"
+ * returned array: 2 0 1 | 7 0 | 7 9
+ * @group_fields: NULL NULL NULL | NULL "device" | "address" NULL
+ *
+ * Returns: #GArray with indices representing fields in @fields_array.
+ * Caller is responsible for freeing the array.
*/
GArray *
-parse_output_fields (const char *fields_str, const NmcOutputField fields_array[], GError **error)
+parse_output_fields (const char *fields_str,
+ const NmcOutputField fields_array[],
+ gboolean parse_groups,
+ GPtrArray **group_fields,
+ GError **error)
{
char **fields, **iter;
GArray *array;
- int i;
+ int i, j;
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ g_return_val_if_fail (group_fields == NULL || *group_fields == NULL, NULL);
array = g_array_new (FALSE, FALSE, sizeof (int));
+ if (parse_groups && group_fields)
+ *group_fields = g_ptr_array_new_full (20, (GDestroyNotify) g_free);
/* Split supplied fields string */
fields = g_strsplit_set (fields_str, ",", -1);
for (iter = fields; iter && *iter; iter++) {
- for (i = 0; fields_array[i].name; i++) {
- if (strcasecmp (*iter, fields_array[i].name) == 0) {
- g_array_append_val (array, i);
- break;
+ int idx = -1;
+
+ g_strstrip (*iter);
+ if (parse_groups) {
+ /* e.g. "general.device,general.driver,ip4,ip6" */
+ gboolean found = FALSE;
+ char *left = *iter;
+ char *right = strchr (*iter, '.');
+
+ if (right)
+ *right++ = '\0';
+
+ for (i = 0; fields_array[i].name; i++) {
+ if (strcasecmp (left, fields_array[i].name) == 0) {
+ NmcOutputField *valid_names = fields_array[i].group;
+ idx = i;
+ if (!right && !valid_names) {
+ found = TRUE;
+ break;
+ }
+ for (j = 0; valid_names && valid_names[j].name; j++) {
+ if (!right || strcasecmp (right, valid_names[j].name) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ if (found)
+ break;
+ }
+ if (found) {
+ /* Add index to array, and field name (or NULL) to group_fields array */
+ g_array_append_val (array, idx);
+ if (group_fields && *group_fields)
+ g_ptr_array_add (*group_fields, g_strdup (right));
+ }
+ if (right)
+ *(right-1) = '.'; /* Restore the original string */
+ } else {
+ /* e.g. "general,ip4,ip6" */
+ for (i = 0; fields_array[i].name; i++) {
+ if (strcasecmp (*iter, fields_array[i].name) == 0) {
+ g_array_append_val (array, i);
+ break;
+ }
}
}
+
+ /* Field was not found - error case */
if (fields_array[i].name == NULL) {
+ /* Set GError */
if (!strcasecmp (*iter, "all") || !strcasecmp (*iter, "common"))
g_set_error (error, NMCLI_ERROR, 0, _("field '%s' has to be alone"), *iter);
+ else {
+ char *allowed_fields = nmc_get_allowed_fields (fields_array, idx);
+ g_set_error (error, NMCLI_ERROR, 1, _("invalid field '%s'; allowed fields: %s"),
+ *iter, allowed_fields);
+ g_free (allowed_fields);
+ }
- else
- g_set_error (error, NMCLI_ERROR, 1, _("invalid field '%s'"), *iter);
+ /* Free arrays on error */
g_array_free (array, TRUE);
array = NULL;
+ if (group_fields && *group_fields) {
+ g_ptr_array_free (*group_fields, TRUE);
+ *group_fields = NULL;
+ }
goto done;
}
}
@@ -246,6 +750,35 @@ done:
return array;
}
+/**
+* nmc_get_allowed_fields:
+* @fields_array: array of fields
+* @group_idx: index to the array (for second-level array in 'group' member),
+* or -1
+*
+* Returns: string of allowed fields names.
+* Caller is responsible for freeing the array.
+*/
+char *
+nmc_get_allowed_fields (const NmcOutputField fields_array[], int group_idx)
+{
+ GString *allowed_fields = g_string_sized_new (256);
+ int i;
+
+ if (group_idx != -1 && fields_array[group_idx].group) {
+ NmcOutputField *second_level = fields_array[group_idx].group;
+ for (i = 0; second_level[i].name; i++)
+ g_string_append_printf (allowed_fields, "%s.%s,",
+ fields_array[group_idx].name, second_level[i].name);
+ } else {
+ for (i = 0; fields_array[i].name; i++)
+ g_string_append_printf (allowed_fields, "%s,", fields_array[i].name);
+ }
+ g_string_truncate (allowed_fields, allowed_fields->len - 1);
+
+ return g_string_free (allowed_fields, FALSE);
+}
+
gboolean
nmc_terse_option_check (NMCPrintOutput print_output, const char *fields, GError **error)
{
@@ -264,14 +797,68 @@ nmc_terse_option_check (NMCPrintOutput print_output, const char *fields, GError
return TRUE;
}
+NmcOutputField *
+nmc_dup_fields_array (NmcOutputField fields[], size_t size, guint32 flags)
+{
+ NmcOutputField *row;
+
+ row = g_malloc0 (size);
+ memcpy (row, fields, size);
+ row[0].flags = flags;
+
+ return row;
+}
+
+void
+nmc_empty_output_fields (NmCli *nmc)
+{
+ guint i;
+
+ /* Free values in field structure */
+ for (i = 0; i < nmc->output_data->len; i++) {
+ NmcOutputField *fld_arr = g_ptr_array_index (nmc->output_data, i);
+ nmc_free_output_field_values (fld_arr);
+ }
+
+ /* Empty output_data array */
+ if (nmc->output_data->len > 0)
+ g_ptr_array_remove_range (nmc->output_data, 0, nmc->output_data->len);
+
+ if (nmc->print_fields.indices) {
+ g_array_free (nmc->print_fields.indices, TRUE);
+ nmc->print_fields.indices = NULL;
+ }
+}
+
+static char *
+get_value_to_print (NmcOutputField *fields,
+ gboolean field_name,
+ const char *not_set_str,
+ gboolean *dealloc)
+{
+ gboolean is_array = fields->value_is_array;
+ char *value;
+
+ if (field_name)
+ value = _(fields->name_l10n);
+ else
+ value = fields->value ?
+ (is_array ? g_strjoinv (" | ", (char **) fields->value) :
+ (char *) fields->value) :
+ (char *) not_set_str;
+ *dealloc = fields->value && is_array && !field_name;
+ return value;
+}
+
/*
* Print both headers or values of 'field_values' array.
- * Entries to print and their order are specified via indices
- * in 'fields.indices' array.
- * 'fields.flags' specify various aspects influencing the output.
+ * Entries to print and their order are specified via indices in
+ * 'nmc->print_fields.indices' array.
+ * Various flags influencing the output of fields are set up in the first item
+ * of 'field_values' array.
*/
void
-print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
+print_required_fields (NmCli *nmc, const NmcOutputField field_values[])
{
GString *str;
int width1, width2;
@@ -280,14 +867,15 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
char *indent_str;
const char *not_set_str = "--";
int i;
- gboolean multiline = fields.flags & NMC_PF_FLAG_MULTILINE;
- gboolean terse = fields.flags & NMC_PF_FLAG_TERSE;
- gboolean pretty = fields.flags & NMC_PF_FLAG_PRETTY;
- gboolean main_header_add = fields.flags & NMC_PF_FLAG_MAIN_HEADER_ADD;
- gboolean main_header_only = fields.flags & NMC_PF_FLAG_MAIN_HEADER_ONLY;
- gboolean field_names = fields.flags & NMC_PF_FLAG_FIELD_NAMES;
- gboolean escape = fields.flags & NMC_PF_FLAG_ESCAPE;
- gboolean section_prefix = fields.flags & NMC_PF_FLAG_SECTION_PREFIX;
+ const NmcPrintFields fields = nmc->print_fields;
+ gboolean multiline = nmc->multiline_output;
+ gboolean terse = (nmc->print_output == NMC_PRINT_TERSE);
+ gboolean pretty = (nmc->print_output == NMC_PRINT_PRETTY);
+ gboolean escape = nmc->escape_values;
+ gboolean main_header_add = field_values[0].flags & NMC_OF_FLAG_MAIN_HEADER_ADD;
+ gboolean main_header_only = field_values[0].flags & NMC_OF_FLAG_MAIN_HEADER_ONLY;
+ gboolean field_names = field_values[0].flags & NMC_OF_FLAG_FIELD_NAMES;
+ gboolean section_prefix = field_values[0].flags & NMC_OF_FLAG_SECTION_PREFIX;
gboolean main_header = main_header_add || main_header_only;
/* No headers are printed in terse mode:
@@ -319,25 +907,29 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
for (i = 0; i < fields.indices->len; i++) {
char *tmp;
int idx = g_array_index (fields.indices, int, i);
- guint32 value_is_array = field_values[idx].flags & NMC_OF_FLAG_ARRAY;
+ gboolean is_array = field_values[idx].value_is_array;
/* section prefix can't be an array */
- g_assert (!value_is_array || !section_prefix || idx != 0);
+ g_assert (!is_array || !section_prefix || idx != 0);
if (section_prefix && idx == 0) /* The first field is section prefix */
continue;
- if (value_is_array) {
+ if (is_array) {
/* value is a null-terminated string array */
const char **p;
int j;
for (p = (const char **) field_values[idx].value, j = 1; p && *p; p++, j++) {
- tmp = g_strdup_printf ("%s%s%s[%d]:", section_prefix ? (const char*) field_values[0].value : "",
- section_prefix ? "." : "",
- _(field_values[idx].name_l10n),
- j);
- printf ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT, tmp, *p ? *p : not_set_str);
+ tmp = g_strdup_printf ("%s%s%s[%d]:",
+ section_prefix ? (const char*) field_values[0].value : "",
+ section_prefix ? "." : "",
+ _(field_values[idx].name_l10n),
+ j);
+ width1 = strlen (tmp);
+ width2 = nmc_string_screen_width (tmp, NULL);
+ printf ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT+width1-width2, tmp,
+ *p ? *p : not_set_str);
g_free (tmp);
}
} else {
@@ -345,10 +937,14 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
const char *hdr_name = (const char*) field_values[0].value;
const char *val = (const char*) field_values[idx].value;
- tmp = g_strdup_printf ("%s%s%s:", section_prefix ? hdr_name : "",
- section_prefix ? "." : "",
- _(field_values[idx].name_l10n));
- printf ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT, tmp, val ? val : not_set_str);
+ tmp = g_strdup_printf ("%s%s%s:",
+ section_prefix ? hdr_name : "",
+ section_prefix ? "." : "",
+ _(field_values[idx].name_l10n));
+ width1 = strlen (tmp);
+ width2 = nmc_string_screen_width (tmp, NULL);
+ printf ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT+width1-width2, tmp,
+ val ? val : not_set_str);
g_free (tmp);
}
}
@@ -366,14 +962,8 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
for (i = 0; i < fields.indices->len; i++) {
int idx = g_array_index (fields.indices, int, i);
- guint32 value_is_array = field_values[idx].flags & NMC_OF_FLAG_ARRAY;
- char *value;
- if (field_names)
- value = _(field_values[idx].name_l10n);
- else
- value = field_values[idx].value ?
- (value_is_array ? g_strjoinv (" | ", (char **) field_values[idx].value) : (char *) field_values[idx].value) :
- (char *) not_set_str;
+ gboolean dealloc;
+ char *value = get_value_to_print ((NmcOutputField *) field_values+idx, field_names, not_set_str, &dealloc);
if (terse) {
if (escape) {
@@ -396,7 +986,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
table_width += field_values[idx].width + width1 - width2 + 1;
}
- if (value_is_array && field_values[idx].value && !field_values)
+ if (dealloc)
g_free (value);
}
@@ -438,57 +1028,56 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
}
/*
- * Find out whether NetworkManager is running (via D-Bus NameHasOwner), assuring
- * NetworkManager won't be autostart (by D-Bus) if not running.
- * We can't use NMClient (nm_client_get_manager_running()) because NMClient
- * constructor calls GetPermissions of NM_DBUS_SERVICE, which would autostart
- * NetworkManger if it is configured as D-Bus launchable service.
+ * Print nmc->output_data
+ *
+ * It first finds out maximal string length in columns and fill the value to
+ * 'width' member of NmcOutputField, so that columns in tabular output are
+ * properly aligned. Then each object (row in tabular) is printed using
+ * print_required_fields() function.
*/
-gboolean
-nmc_is_nm_running (NmCli *nmc, GError **error)
+void
+print_data (NmCli *nmc)
{
- DBusGConnection *connection = NULL;
- DBusGProxy *proxy = NULL;
- GError *err = NULL;
- gboolean has_owner = FALSE;
+ int i, j;
+ size_t len;
+ NmcOutputField *row;
+ int num_fields = 0;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+ if (!nmc->output_data || nmc->output_data->len < 1)
+ return;
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
- if (!connection) {
- g_string_printf (nmc->return_text, _("Error: Couldn't connect to system bus: %s"), err->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_propagate_error (error, err);
- goto done;
+ /* How many fields? */
+ row = g_ptr_array_index (nmc->output_data, 0);
+ while (row->name) {
+ num_fields++;
+ row++;
}
- proxy = dbus_g_proxy_new_for_name (connection,
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus",
- "org.freedesktop.DBus");
- if (!proxy) {
- g_string_printf (nmc->return_text, _("Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- if (error)
- g_set_error_literal (error, NMCLI_ERROR, 0, nmc->return_text->str);
- goto done;
+ /* Find out maximal string lengths */
+ for (i = 0; i < num_fields; i++) {
+ size_t max_width = 0;
+ for (j = 0; j < nmc->output_data->len; j++) {
+ gboolean field_names, dealloc;
+ char *value;
+ row = g_ptr_array_index (nmc->output_data, j);
+ field_names = row[0].flags & NMC_OF_FLAG_FIELD_NAMES;
+ value = get_value_to_print (row+i, field_names, "--", &dealloc);
+ len = nmc_string_screen_width (value, NULL);
+ max_width = len > max_width ? len : max_width;
+ if (dealloc)
+ g_free (value);
+ }
+ for (j = 0; j < nmc->output_data->len; j++) {
+ row = g_ptr_array_index (nmc->output_data, j);
+ row[i].width = max_width + 1;
+ }
}
- if (!org_freedesktop_DBus_name_has_owner (proxy, NM_DBUS_SERVICE, &has_owner, &err)) {
- g_string_printf (nmc->return_text, _("Error: NameHasOwner request failed: %s"),
- (err && err->message) ? err->message : _("(unknown)"));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- g_propagate_error (error, err);
- goto done;
+ /* Now we can print the data. */
+ for (i = 0; i < nmc->output_data->len; i++) {
+ row = g_ptr_array_index (nmc->output_data, i);
+ print_required_fields (nmc, row);
}
-
-done:
- if (connection)
- dbus_g_connection_unref (connection);
- if (proxy)
- g_object_unref (proxy);
-
- return has_owner;
}
/*
diff --git a/cli/src/utils.h b/cli/src/utils.h
index 81ce1633f..e92952f33 100644
--- a/cli/src/utils.h
+++ b/cli/src/utils.h
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2012 Red Hat, Inc.
+ * (C) Copyright 2010 - 2014 Red Hat, Inc.
*/
#ifndef NMC_UTILS_H
@@ -24,21 +24,74 @@
#include "nmcli.h"
+/* === Types === */
+
+typedef struct {
+ const char *name;
+ gboolean has_value;
+ const char **value;
+ gboolean mandatory;
+ gboolean found;
+} nmc_arg_t;
+
/* === Functions === */
int matches (const char *cmd, const char *pattern);
int next_arg (int *argc, char ***argv);
-char *ssid_to_printable (const char *str, gsize len);
+gboolean nmc_arg_is_help (const char *arg);
+gboolean nmc_arg_is_option (const char *arg, const char *opt_name);
+gboolean nmc_parse_args (nmc_arg_t *arg_arr, gboolean last, int *argc, char ***argv, GError **error);
+char *ssid_to_hex (const char *str, gsize len);
+gboolean nmc_string_to_int_base (const char *str,
+ int base,
+ gboolean range_check,
+ long int min,
+ long int max,
+ long int *value);
+gboolean nmc_string_to_uint_base (const char *str,
+ int base,
+ gboolean range_check,
+ unsigned long int min,
+ unsigned long int max,
+ unsigned long int *value);
+gboolean nmc_string_to_int (const char *str,
+ gboolean range_check,
+ long int min,
+ long int max,
+ long int *value);
+gboolean nmc_string_to_uint (const char *str,
+ gboolean range_check,
+ unsigned long int min,
+ unsigned long int max,
+ unsigned long int *value);
+gboolean nmc_string_to_bool (const char *str, gboolean *val_bool, GError **error);
char *nmc_ip4_address_as_string (guint32 ip, GError **error);
char *nmc_ip6_address_as_string (const struct in6_addr *ip, GError **error);
void nmc_terminal_erase_line (void);
void nmc_terminal_show_progress (const char *str);
+const char *nmc_term_color_sequence (NmcTermColor color);
+char *nmc_colorize (NmcTermColor color, const char * fmt, ...);
+char *nmc_get_user_input (const char *ask_str);
+int nmc_string_to_arg_array (const char *line, const char *delim, char ***argv, int *argc);
+const char *nmc_string_is_valid (const char *input, const char **allowed, GError **error);
+GSList *nmc_util_strv_to_slist (char **strv);
+char **nmc_strsplit_set (const char *str, const char *delimiter, int max_tokens);
int nmc_string_screen_width (const char *start, const char *end);
-void set_val_str (NmcOutputField fields_array[], guint32 index, const char *value);
-void set_val_arr (NmcOutputField fields_array[], guint32 index, const char **value);
-GArray *parse_output_fields (const char *fields_str, const NmcOutputField fields_array[], GError **error);
+void set_val_str (NmcOutputField fields_array[], guint32 index, char *value);
+void set_val_strc (NmcOutputField fields_array[], guint32 index, const char *value);
+void set_val_arr (NmcOutputField fields_array[], guint32 index, char **value);
+void set_val_arrc (NmcOutputField fields_array[], guint32 index, const char **value);
+void nmc_free_output_field_values (NmcOutputField fields_array[]);
+GArray *parse_output_fields (const char *fields_str,
+ const NmcOutputField fields_array[],
+ gboolean parse_groups,
+ GPtrArray **group_fields,
+ GError **error);
+char *nmc_get_allowed_fields (const NmcOutputField fields_array[], int group_idx);
gboolean nmc_terse_option_check (NMCPrintOutput print_output, const char *fields, GError **error);
-void print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]);
-gboolean nmc_is_nm_running (NmCli *nmc, GError **error);
+NmcOutputField *nmc_dup_fields_array (NmcOutputField fields[], size_t size, guint32 flags);
+void nmc_empty_output_fields (NmCli *nmc);
+void print_required_fields (NmCli *nmc, const NmcOutputField field_values[]);
+void print_data (NmCli *nmc);
gboolean nmc_versions_match (NmCli *nmc);
#endif /* NMC_UTILS_H */
diff --git a/config.h.in b/config.h.in
index 1f3a6e6a7..273a7875e 100644
--- a/config.h.in
+++ b/config.h.in
@@ -24,6 +24,13 @@
the CoreFoundation framework. */
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+/* Define if you have dbus-glib >= 0.100 */
+#undef HAVE_DBUS_GLIB_100
+
+/* Define if you have a dbus-glib with
+ dbus_g_method_invocation_get_g_connection() */
+#undef HAVE_DBUS_GLIB_GMI_GET_CONNECTION
+
/* Define if the GNU dcgettext() function is already present or preinstalled.
*/
#undef HAVE_DCGETTEXT
@@ -31,38 +38,47 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
/* Define if you have libgnutls */
#undef HAVE_GNUTLS
+/* Define to 1 if you have the <history.h> header file. */
+#undef HAVE_HISTORY_H
+
/* Define if you have the iconv() function and it works. */
#undef HAVE_ICONV
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
+/* Define if you have libsoup */
+#undef HAVE_LIBSOUP
+
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Define if nl80211 has critical protocol support */
+#undef HAVE_NL80211_CRITICAL_PROTOCOL_CMDS
+
/* Define if you have NSS */
#undef HAVE_NSS
-/* Define to 1 if you have the <paths.h> header file. */
-#undef HAVE_PATHS_H
-
/* Define to 1 if you have the <pppd/pppd.h> header file. */
#undef HAVE_PPPD_PPPD_H
-/* Define to 1 if you have the `select' function. */
-#undef HAVE_SELECT
+/* Define to 1 if you have the <readline.h> header file. */
+#undef HAVE_READLINE_H
+
+/* Define to 1 if you have the <readline/history.h> header file. */
+#undef HAVE_READLINE_HISTORY_H
-/* Define to 1 if you have the `socket' function. */
-#undef HAVE_SOCKET
+/* Define to 1 if you have the <readline/readline.h> header file. */
+#undef HAVE_READLINE_READLINE_H
+
+/* Define if you have SELinux support */
+#undef HAVE_SELINUX
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
@@ -76,27 +92,15 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
-/* Define to 1 if you have the <syslog.h> header file. */
-#undef HAVE_SYSLOG_H
-
/* Define if systemd support is available */
#undef HAVE_SYSTEMD
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H
-
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
-/* Define to 1 if you have the `uname' function. */
-#undef HAVE_UNAME
-
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
@@ -146,6 +150,12 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
+/* Define to path of pppd binary */
+#undef PPPD_PATH
+
+/* Define to path of pppoe binary */
+#undef PPPOE_PATH
+
/* Path to resolvconf (if enabled) */
#undef RESOLVCONF_PATH
@@ -155,9 +165,6 @@
/* Define to path to system CA certificates */
#undef SYSTEM_CA_PATH
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
@@ -183,9 +190,6 @@
/* Version number of package */
#undef VERSION
-/* Define if you have BlueZ 4 support */
-#undef WITH_BLUEZ4
-
/* Define if you want connectivity checking support */
#undef WITH_CONCHECK
@@ -198,6 +202,9 @@
/* Define if you have PPP support */
#undef WITH_PPP
+/* Define if you have Teamd control support */
+#undef WITH_TEAMDCTL
+
/* Define if you have WiMAX support */
#undef WITH_WIMAX
@@ -224,7 +231,4 @@
#undef _POSIX_SOURCE
/* Define to `int' if <sys/types.h> does not define. */
-#undef mode_t
-
-/* Define to `int' if <sys/types.h> does not define. */
#undef pid_t
diff --git a/configure b/configure
index 735e2aa30..551c19556 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for NetworkManager 0.9.8.10.
+# Generated by GNU Autoconf 2.69 for NetworkManager 0.9.10.0.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='NetworkManager'
PACKAGE_TARNAME='NetworkManager'
-PACKAGE_VERSION='0.9.8.10'
-PACKAGE_STRING='NetworkManager 0.9.8.10'
+PACKAGE_VERSION='0.9.10.0'
+PACKAGE_STRING='NetworkManager 0.9.10.0'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager'
PACKAGE_URL=''
@@ -633,9 +633,12 @@ ac_includes_default="\
#endif"
gt_needs=
+enable_option_checking=no
ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
+LIBOBJS
+subdirs
INSTALL_PREGEN_MANPAGES_FALSE
INSTALL_PREGEN_MANPAGES_TRUE
GTK_DOC_USE_REBASE_FALSE
@@ -648,24 +651,29 @@ GTK_DOC_BUILD_HTML_FALSE
GTK_DOC_BUILD_HTML_TRUE
ENABLE_GTK_DOC_FALSE
ENABLE_GTK_DOC_TRUE
-HAVE_GTK_DOC_FALSE
-HAVE_GTK_DOC_TRUE
GTKDOC_DEPS_LIBS
GTKDOC_DEPS_CFLAGS
HTML_DIR
GTKDOC_MKPDF
GTKDOC_REBASE
-GTKDOC_CHECK_PATH
GTKDOC_CHECK
-RUN_ROOT_TESTS_FALSE
-RUN_ROOT_TESTS_TRUE
+VALGRIND_RULES
+REQUIRE_ROOT_TESTS_FALSE
+REQUIRE_ROOT_TESTS_TRUE
ENABLE_TESTS_FALSE
ENABLE_TESTS_TRUE
+with_valgrind
ENABLE_VAPIGEN_FALSE
ENABLE_VAPIGEN_TRUE
VAPIGEN_MAKEFILE
VAPIGEN_VAPIDIR
VAPIGEN
+BUILD_NMTUI_FALSE
+BUILD_NMTUI_TRUE
+NEWT_LIBS
+NEWT_CFLAGS
+LIBNDP_LIBS
+LIBNDP_CFLAGS
WITH_CONCHECK_FALSE
WITH_CONCHECK_TRUE
LIBSOUP_LIBS
@@ -684,6 +692,8 @@ WITH_MODEM_MANAGER_1_FALSE
WITH_MODEM_MANAGER_1_TRUE
MM_GLIB_LIBS
MM_GLIB_CFLAGS
+PPPOE_PATH
+PPPD_PATH
PPPD_PLUGIN_DIR
WITH_PPP_FALSE
WITH_PPP_TRUE
@@ -707,14 +717,23 @@ WITH_POLKIT_FALSE
WITH_POLKIT_TRUE
POLKIT_LIBS
POLKIT_CFLAGS
+WITH_TEAMDCTL_FALSE
+WITH_TEAMDCTL_TRUE
+LIBTEAMDCTL_LIBS
+LIBTEAMDCTL_CFLAGS
WITH_WIMAX_FALSE
WITH_WIMAX_TRUE
IWMX_SDK_LIBS
IWMX_SDK_CFLAGS
+READLINE_LIBS
UUID_LIBS
UUID_CFLAGS
LIBNL_LIBS
LIBNL_CFLAGS
+HAVE_SELINUX_FALSE
+HAVE_SELINUX_TRUE
+SELINUX_LIBS
+SELINUX_CFLAGS
SUSPEND_RESUME_SYSTEMD_FALSE
SUSPEND_RESUME_SYSTEMD_TRUE
SUSPEND_RESUME_UPOWER_FALSE
@@ -735,8 +754,6 @@ SYSTEMD_200_CFLAGS
systemdsystemunitdir
HAVE_SYSTEMD_FALSE
HAVE_SYSTEMD_TRUE
-WITH_BLUEZ4_FALSE
-WITH_BLUEZ4_TRUE
UDEV_BASE_DIR
WITH_QT_FALSE
WITH_QT_TRUE
@@ -757,6 +774,10 @@ GUDEV_LIBS
GUDEV_CFLAGS
GLIB_LIBS
GLIB_CFLAGS
+HAVE_DBUS_GLIB_100_FALSE
+HAVE_DBUS_GLIB_100_TRUE
+DBUS_GLIB_100_LIBS
+DBUS_GLIB_100_CFLAGS
DBUS_LIBS
DBUS_CFLAGS
PKG_CONFIG_LIBDIR
@@ -774,6 +795,7 @@ LCOV
CODE_COVERAGE_ENABLED
CODE_COVERAGE_ENABLED_FALSE
CODE_COVERAGE_ENABLED_TRUE
+DISTRO_NETWORK_SERVICE
CONFIG_PLUGIN_IFNET_FALSE
CONFIG_PLUGIN_IFNET_TRUE
CONFIG_PLUGIN_IFUPDOWN_FALSE
@@ -836,7 +858,6 @@ INTLTOOL_EXTRACT
INTLTOOL_MERGE
INTLTOOL_UPDATE
USE_NLS
-LIBOBJS
NM_VERSION
NM_MICRO_VERSION
NM_MINOR_VERSION
@@ -990,17 +1011,20 @@ with_wext
enable_introspection
enable_qt
with_udev_dir
-enable_bluez4
with_systemdsystemunitdir
with_session_tracking
with_suspend_resume
+with_selinux
enable_wimax
+enable_teamdctl
enable_polkit
enable_modify_system
with_crypto
with_dbus_sys_dir
enable_ppp
with_pppd_plugin_dir
+with_pppd
+with_pppoe
with_modem_manager_1
with_dhclient
with_dhcpcd
@@ -1011,12 +1035,12 @@ with_dnsmasq
with_system_ca_path
with_kernel_firmware_dir
enable_concheck
+with_nmtui
enable_more_warnings
enable_vala
enable_tests
+with_valgrind
with_tests
-with_docs
-enable_doc
with_html_dir
enable_gtk_doc
enable_gtk_doc_html
@@ -1040,6 +1064,8 @@ PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
DBUS_CFLAGS
DBUS_LIBS
+DBUS_GLIB_100_CFLAGS
+DBUS_GLIB_100_LIBS
GLIB_CFLAGS
GLIB_LIBS
GUDEV_CFLAGS
@@ -1052,12 +1078,16 @@ SYSTEMD_LOGIN_CFLAGS
SYSTEMD_LOGIN_LIBS
SYSTEMD_INHIBIT_CFLAGS
SYSTEMD_INHIBIT_LIBS
+SELINUX_CFLAGS
+SELINUX_LIBS
LIBNL_CFLAGS
LIBNL_LIBS
UUID_CFLAGS
UUID_LIBS
IWMX_SDK_CFLAGS
IWMX_SDK_LIBS
+LIBTEAMDCTL_CFLAGS
+LIBTEAMDCTL_LIBS
POLKIT_CFLAGS
POLKIT_LIBS
NSS_CFLAGS
@@ -1068,9 +1098,13 @@ MM_GLIB_CFLAGS
MM_GLIB_LIBS
LIBSOUP_CFLAGS
LIBSOUP_LIBS
+LIBNDP_CFLAGS
+LIBNDP_LIBS
+NEWT_CFLAGS
+NEWT_LIBS
GTKDOC_DEPS_CFLAGS
GTKDOC_DEPS_LIBS'
-
+ac_subdirs_all='libndp'
# Initialize some variables set by options.
ac_init_help=
@@ -1610,7 +1644,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures NetworkManager 0.9.8.10 to adapt to many kinds of systems.
+\`configure' configures NetworkManager 0.9.10.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1680,7 +1714,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of NetworkManager 0.9.8.10:";;
+ short | recursive ) echo "Configuration of NetworkManager 0.9.10.0:";;
esac
cat <<\_ACEOF
@@ -1712,8 +1746,8 @@ Optional Features:
--enable-introspection=[no/auto/yes]
Enable introspection for this build
--enable-qt enable Qt examples
- --enable-bluez4 build with BlueZ 4 support instead of BlueZ 5
--enable-wimax enable WiMAX support
+ --enable-teamdctl enable Teamd control support
--enable-polkit enable PolicyKit support
--enable-modify-system Allow users to modify system connections
--enable-ppp enable PPP/PPPoE support
@@ -1723,8 +1757,6 @@ Optional Features:
build Vala bindings [[default=auto]]
--enable-tests=root|yes|no
Build NetworkManager tests (default: yes)
- --enable-doc Build NetworkManager documentation (deprecated, use
- --enable-gtk-doc)
--enable-gtk-doc use gtk-doc to build documentation [[default=no]]
--enable-gtk-doc-html build documentation in html format [[default=yes]]
--enable-gtk-doc-pdf build documentation in pdf format [[default=no]]
@@ -1754,12 +1786,18 @@ Optional Packages:
--with-suspend-resume=upower|systemd
Build NetworkManager with specific suspend/resume
support
+ --with-selinux=yes|no|auto
+ Build with SELinux (default: auto)
--with-crypto=nss|gnutls
Cryptography library to use for certificate and key
operations
--with-dbus-sys-dir=DIR where D-BUS system.d directory is
--with-pppd-plugin-dir=DIR
path to the pppd plugins directory
+ --with-pppd=/path/to/pppd
+ path to pppd binary
+ --with-pppoe=/path/to/pppoe
+ path to pppoe binary
--with-modem-manager-1 Enable new ModemManager1 interface support
--with-dhclient=yes|no|path
Enable dhclient 4.x support
@@ -1777,9 +1815,11 @@ Optional Packages:
--with-kernel-firmware-dir=DIR
where kernel firmware directory is (default is
/lib/firmware)
+ --with-nmtui=yes|no Build nmtui
+ --with-valgrind=yes|no|path
+ Use valgrind to memory-check the tests (default:
+ yes)
--with-tests Build NetworkManager tests (deprecated)
- --with-docs Build NetworkManager documentation (deprecated, use
- --enable-gtk-doc)
--with-html-dir=PATH path to installed docs
Some influential environment variables:
@@ -1801,6 +1841,10 @@ Some influential environment variables:
path overriding pkg-config's built-in search path
DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config
DBUS_LIBS linker flags for DBUS, overriding pkg-config
+ DBUS_GLIB_100_CFLAGS
+ C compiler flags for DBUS_GLIB_100, overriding pkg-config
+ DBUS_GLIB_100_LIBS
+ linker flags for DBUS_GLIB_100, overriding pkg-config
GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
GLIB_LIBS linker flags for GLIB, overriding pkg-config
GUDEV_CFLAGS
@@ -1820,6 +1864,10 @@ Some influential environment variables:
C compiler flags for SYSTEMD_INHIBIT, overriding pkg-config
SYSTEMD_INHIBIT_LIBS
linker flags for SYSTEMD_INHIBIT, overriding pkg-config
+ SELINUX_CFLAGS
+ C compiler flags for SELINUX, overriding pkg-config
+ SELINUX_LIBS
+ linker flags for SELINUX, overriding pkg-config
LIBNL_CFLAGS
C compiler flags for LIBNL, overriding pkg-config
LIBNL_LIBS linker flags for LIBNL, overriding pkg-config
@@ -1829,6 +1877,10 @@ Some influential environment variables:
C compiler flags for IWMX_SDK, overriding pkg-config
IWMX_SDK_LIBS
linker flags for IWMX_SDK, overriding pkg-config
+ LIBTEAMDCTL_CFLAGS
+ C compiler flags for LIBTEAMDCTL, overriding pkg-config
+ LIBTEAMDCTL_LIBS
+ linker flags for LIBTEAMDCTL, overriding pkg-config
POLKIT_CFLAGS
C compiler flags for POLKIT, overriding pkg-config
POLKIT_LIBS linker flags for POLKIT, overriding pkg-config
@@ -1845,6 +1897,11 @@ Some influential environment variables:
C compiler flags for LIBSOUP, overriding pkg-config
LIBSOUP_LIBS
linker flags for LIBSOUP, overriding pkg-config
+ LIBNDP_CFLAGS
+ C compiler flags for LIBNDP, overriding pkg-config
+ LIBNDP_LIBS linker flags for LIBNDP, overriding pkg-config
+ NEWT_CFLAGS C compiler flags for NEWT, overriding pkg-config
+ NEWT_LIBS linker flags for NEWT, overriding pkg-config
GTKDOC_DEPS_CFLAGS
C compiler flags for GTKDOC_DEPS, overriding pkg-config
GTKDOC_DEPS_LIBS
@@ -1916,7 +1973,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-NetworkManager configure 0.9.8.10
+NetworkManager configure 0.9.10.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2460,7 +2517,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by NetworkManager $as_me 0.9.8.10, which was
+It was created by NetworkManager $as_me 0.9.10.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2843,6 +2900,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
am__api_version='1.13'
# Find a good install program. We prefer a C program (faster),
@@ -3329,7 +3387,7 @@ fi
# Define the identity of the package.
PACKAGE='NetworkManager'
- VERSION='0.9.8.10'
+ VERSION='0.9.10.0'
cat >>confdefs.h <<_ACEOF
@@ -3496,7 +3554,6 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; }
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
# Check whether --enable-maintainer-mode was given.
@@ -5793,7 +5850,6 @@ fi
-
# C++ only required if --enable-qt=yes
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -16581,151 +16637,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
NM_MAJOR_VERSION=0
NM_MINOR_VERSION=9
-NM_MICRO_VERSION=8
-NM_VERSION=0.9.8.10
-NM_GIT_SHA=b784f9700adc363b077d26e5ac6412ff7c410b22
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-for ac_header in fcntl.h paths.h sys/ioctl.h sys/time.h syslog.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
+NM_MICRO_VERSION=10
+NM_VERSION=0.9.10.0
+NM_GIT_SHA=6eb82acd6dce882f4b91aafcf68dd9e143ce34e2
-ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
-if test "x$ac_cv_type_mode_t" = xyes; then :
-else
-cat >>confdefs.h <<_ACEOF
-#define mode_t int
-_ACEOF
-fi
ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
if test "x$ac_cv_type_pid_t" = xyes; then :
@@ -16738,158 +16657,6 @@ _ACEOF
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_time=yes
-else
- ac_cv_header_time=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
-
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
-
-fi
-
-
-if test $ac_cv_c_compiler_gnu = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
-$as_echo_n "checking whether $CC needs -traditional... " >&6; }
-if ${ac_cv_prog_gcc_traditional+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_pattern="Autoconf.*'x'"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sgtty.h>
-Autoconf TIOCGETP
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then :
- ac_cv_prog_gcc_traditional=yes
-else
- ac_cv_prog_gcc_traditional=no
-fi
-rm -f conftest*
-
-
- if test $ac_cv_prog_gcc_traditional = no; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <termio.h>
-Autoconf TCGETA
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then :
- ac_cv_prog_gcc_traditional=yes
-fi
-rm -f conftest*
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
-$as_echo "$ac_cv_prog_gcc_traditional" >&6; }
- if test $ac_cv_prog_gcc_traditional = yes; then
- CC="$CC -traditional"
- fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
-$as_echo_n "checking for working memcmp... " >&6; }
-if ${ac_cv_func_memcmp_working+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_memcmp_working=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* Some versions of memcmp are not 8-bit clean. */
- char c0 = '\100', c1 = '\200', c2 = '\201';
- if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
- return 1;
-
- /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
- or more and with at least one buffer not starting on a 4-byte boundary.
- William Lewis provided this test program. */
- {
- char foo[21];
- char bar[21];
- int i;
- for (i = 0; i < 4; i++)
- {
- char *a = foo + i;
- char *b = bar + i;
- strcpy (a, "--------01111111");
- strcpy (b, "--------10000000");
- if (memcmp (a, b, 16) >= 0)
- return 1;
- }
- return 0;
- }
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_memcmp_working=yes
-else
- ac_cv_func_memcmp_working=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
-$as_echo "$ac_cv_func_memcmp_working" >&6; }
-test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
- *" memcmp.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS memcmp.$ac_objext"
- ;;
-esac
-
-
-for ac_func in select socket uname
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
@@ -19808,6 +19575,12 @@ else
CONFIG_PLUGIN_IFNET_FALSE=
fi
+
+if test "$enable_ifcfg_rh" = "yes"; then
+ DISTRO_NETWORK_SERVICE=network.service
+fi
+
+
# Code coverage
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5
@@ -19841,7 +19614,7 @@ $as_echo "$enable_code_coverage" >&6; }
fi
# List of supported lcov versions.
- lcov_version_list="1.6 1.7 1.8 1.9"
+ lcov_version_list="1.6 1.7 1.8 1.9 1.10"
# Extract the first word of "lcov", so it can be a program name with args.
set dummy lcov; ac_word=$2
@@ -20003,7 +19776,7 @@ code_coverage_quiet_0 = --quiet
# Use recursive makes in order to ignore errors during check
check-code-coverage:
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
-$(MAKE) $(AM_MAKEFLAGS) -k check
$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
else
@@ -20012,7 +19785,7 @@ endif
# Capture code coverage data
code-coverage-capture: code-coverage-capture-hook
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
$(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(PACKAGE_NAME)-$(PACKAGE_VERSION)" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_OPTIONS)
$(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)"
-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
@@ -20025,11 +19798,13 @@ endif
# Hook rule executed before code-coverage-capture, overridable by the user
code-coverage-capture-hook:
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
clean: code-coverage-clean
code-coverage-clean:
-$(LCOV) --directory $(top_builddir) -z
-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
-find . -name "*.gcda" -o -name "*.gcov" -delete
+endif
GITIGNOREFILES ?=
GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
@@ -20149,6 +19924,43 @@ if test "$ac_have_nl80211" = no; then
as_fn_error $? "Linux kernel development header linux/nl80211.h not installed or not functional" "$LINENO" 5
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Linux kernel nl80211 Critical Protocol Start/Stop" >&5
+$as_echo_n "checking Linux kernel nl80211 Critical Protocol Start/Stop... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __user
+ #define __user
+ #endif
+ #include <sys/types.h>
+ #include <linux/types.h>
+ #include <sys/socket.h>
+ #include <linux/nl80211.h>
+int
+main ()
+{
+unsigned int a = NL80211_CMD_CRIT_PROTOCOL_START; a++;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_have_nl80211_critproto=yes
+else
+ ac_have_nl80211_critproto=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_have_nl80211_critproto" >&5
+$as_echo "$ac_have_nl80211_critproto" >&6; }
+if test "$ac_have_nl80211_critproto" = yes; then
+
+$as_echo "#define HAVE_NL80211_CRITICAL_PROTOCOL_CMDS 1" >>confdefs.h
+
+else
+
+$as_echo "#define HAVE_NL80211_CRITICAL_PROTOCOL_CMDS 0" >>confdefs.h
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Linux kernel VLAN_FLAG_LOOSE_BINDING enum value" >&5
$as_echo_n "checking Linux kernel VLAN_FLAG_LOOSE_BINDING enum value... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20576,12 +20388,142 @@ fi
-GLIB_VERSION_DEFINES="-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26 '-DGLIB_VERSION_MAX_ALLOWED=G_ENCODE_VERSION(2,34)'"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbus_g_method_invocation_get_g_connection in -ldbus-glib-1" >&5
+$as_echo_n "checking for dbus_g_method_invocation_get_g_connection in -ldbus-glib-1... " >&6; }
+if ${ac_cv_lib_dbus_glib_1_dbus_g_method_invocation_get_g_connection+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldbus-glib-1 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dbus_g_method_invocation_get_g_connection ();
+int
+main ()
+{
+return dbus_g_method_invocation_get_g_connection ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dbus_glib_1_dbus_g_method_invocation_get_g_connection=yes
+else
+ ac_cv_lib_dbus_glib_1_dbus_g_method_invocation_get_g_connection=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dbus_glib_1_dbus_g_method_invocation_get_g_connection" >&5
+$as_echo "$ac_cv_lib_dbus_glib_1_dbus_g_method_invocation_get_g_connection" >&6; }
+if test "x$ac_cv_lib_dbus_glib_1_dbus_g_method_invocation_get_g_connection" = xyes; then :
+ ac_have_gmi_get_con="1"
+else
+ ac_have_gmi_get_con="0"
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DBUS_GLIB_GMI_GET_CONNECTION $ac_have_gmi_get_con
+_ACEOF
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS_GLIB_100" >&5
+$as_echo_n "checking for DBUS_GLIB_100... " >&6; }
+
+if test -n "$DBUS_GLIB_100_CFLAGS"; then
+ pkg_cv_DBUS_GLIB_100_CFLAGS="$DBUS_GLIB_100_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= 0.100\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= 0.100") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_DBUS_GLIB_100_CFLAGS=`$PKG_CONFIG --cflags "dbus-glib-1 >= 0.100" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$DBUS_GLIB_100_LIBS"; then
+ pkg_cv_DBUS_GLIB_100_LIBS="$DBUS_GLIB_100_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= 0.100\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= 0.100") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_DBUS_GLIB_100_LIBS=`$PKG_CONFIG --libs "dbus-glib-1 >= 0.100" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ DBUS_GLIB_100_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "dbus-glib-1 >= 0.100" 2>&1`
+ else
+ DBUS_GLIB_100_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "dbus-glib-1 >= 0.100" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$DBUS_GLIB_100_PKG_ERRORS" >&5
+
+ have_dbus_glib_100=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_dbus_glib_100=no
+else
+ DBUS_GLIB_100_CFLAGS=$pkg_cv_DBUS_GLIB_100_CFLAGS
+ DBUS_GLIB_100_LIBS=$pkg_cv_DBUS_GLIB_100_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_dbus_glib_100=yes
+fi
+if (test "${have_dbus_glib_100}" = "yes"); then
+
+$as_echo "#define HAVE_DBUS_GLIB_100 1" >>confdefs.h
+
+else
+
+$as_echo "#define HAVE_DBUS_GLIB_100 0" >>confdefs.h
+
+fi
+ if test "${have_dbus_glib_100}" = "yes"; then
+ HAVE_DBUS_GLIB_100_TRUE=
+ HAVE_DBUS_GLIB_100_FALSE='#'
+else
+ HAVE_DBUS_GLIB_100_TRUE='#'
+ HAVE_DBUS_GLIB_100_FALSE=
+fi
-# dbus-glib uses GValueArray, which is deprecated as of GLib 2.32.
-# Set GLIB_VERSION_MIN_REQUIRED to something less than that to avoid
-# getting warnings. (GLIB_VERSION_2_26 is the oldest defined version.)
-DBUS_CFLAGS="$DBUS_CFLAGS $GLIB_VERSION_DEFINES"
pkg_failed=no
@@ -20592,12 +20534,12 @@ if test -n "$GLIB_CFLAGS"; then
pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.22 gmodule-2.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.22 gmodule-2.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.32 gmodule-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.32 gmodule-2.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "gio-unix-2.0 >= 2.22 gmodule-2.0" 2>/dev/null`
+ pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "gio-unix-2.0 >= 2.32 gmodule-2.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -20609,12 +20551,12 @@ if test -n "$GLIB_LIBS"; then
pkg_cv_GLIB_LIBS="$GLIB_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.22 gmodule-2.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.22 gmodule-2.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.32 gmodule-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.32 gmodule-2.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "gio-unix-2.0 >= 2.22 gmodule-2.0" 2>/dev/null`
+ pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "gio-unix-2.0 >= 2.32 gmodule-2.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -20635,14 +20577,14 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gio-unix-2.0 >= 2.22 gmodule-2.0" 2>&1`
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gio-unix-2.0 >= 2.32 gmodule-2.0" 2>&1`
else
- GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gio-unix-2.0 >= 2.22 gmodule-2.0" 2>&1`
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gio-unix-2.0 >= 2.32 gmodule-2.0" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$GLIB_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (gio-unix-2.0 >= 2.22 gmodule-2.0) were not met:
+ as_fn_error $? "Package requirements (gio-unix-2.0 >= 2.32 gmodule-2.0) were not met:
$GLIB_PKG_ERRORS
@@ -20674,7 +20616,9 @@ else
$as_echo "yes" >&6; }
fi
-GLIB_CFLAGS="$GLIB_CFLAGS $GLIB_VERSION_DEFINES"
+
+GLIB_CFLAGS="$GLIB_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32"
+
@@ -21020,31 +20964,6 @@ else
fi
-# BlueZ
-# Check whether --enable-bluez4 was given.
-if test "${enable_bluez4+set}" = set; then :
- enableval=$enable_bluez4; enable_bluez4=${enableval}
-fi
-
-if (test "${enable_bluez4}" = "yes"); then
-
-$as_echo "#define WITH_BLUEZ4 1" >>confdefs.h
-
-else
-
-$as_echo "#define WITH_BLUEZ4 0" >>confdefs.h
-
- enable_bluez4=no
-fi
- if test "${enable_bluez4}" = "yes"; then
- WITH_BLUEZ4_TRUE=
- WITH_BLUEZ4_FALSE='#'
-else
- WITH_BLUEZ4_TRUE='#'
- WITH_BLUEZ4_FALSE=
-fi
-
-
# systemd unit support
# Check whether --with-systemdsystemunitdir was given.
@@ -21446,6 +21365,111 @@ else
fi
+# SELinux support
+
+# Check whether --with-selinux was given.
+if test "${with_selinux+set}" = set; then :
+ withval=$with_selinux;
+else
+ with_selinux=auto
+fi
+
+if test "$with_selinux" = "yes" -o "$with_selinux" = "auto"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SELINUX" >&5
+$as_echo_n "checking for SELINUX... " >&6; }
+
+if test -n "$SELINUX_CFLAGS"; then
+ pkg_cv_SELINUX_CFLAGS="$SELINUX_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SELINUX_CFLAGS=`$PKG_CONFIG --cflags "libselinux" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SELINUX_LIBS"; then
+ pkg_cv_SELINUX_LIBS="$SELINUX_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SELINUX_LIBS=`$PKG_CONFIG --libs "libselinux" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SELINUX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libselinux" 2>&1`
+ else
+ SELINUX_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libselinux" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SELINUX_PKG_ERRORS" >&5
+
+ have_selinux=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_selinux=no
+else
+ SELINUX_CFLAGS=$pkg_cv_SELINUX_CFLAGS
+ SELINUX_LIBS=$pkg_cv_SELINUX_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_selinux=yes
+fi
+else
+ have_selinux=no
+fi
+if test "$with_selinux" = "yes" -a "$have_selinux" = "no"; then
+ as_fn_error $? "You must have libselinux installed to build --with-selinux=yes." "$LINENO" 5
+fi
+if test "$have_selinux" = "yes"; then
+
+$as_echo "#define HAVE_SELINUX 1" >>confdefs.h
+
+else
+
+$as_echo "#define HAVE_SELINUX 0" >>confdefs.h
+
+fi
+ if test "${have_selinux}" = "yes"; then
+ HAVE_SELINUX_TRUE=
+ HAVE_SELINUX_FALSE='#'
+else
+ HAVE_SELINUX_TRUE='#'
+ HAVE_SELINUX_FALSE=
+fi
+
+
# libnl support for the linux platform
pkg_failed=no
@@ -21456,12 +21480,12 @@ if test -n "$LIBNL_CFLAGS"; then
pkg_cv_LIBNL_CFLAGS="$LIBNL_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBNL_CFLAGS=`$PKG_CONFIG --cflags "libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0" 2>/dev/null`
+ pkg_cv_LIBNL_CFLAGS=`$PKG_CONFIG --cflags "libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -21473,12 +21497,12 @@ if test -n "$LIBNL_LIBS"; then
pkg_cv_LIBNL_LIBS="$LIBNL_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBNL_LIBS=`$PKG_CONFIG --libs "libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0" 2>/dev/null`
+ pkg_cv_LIBNL_LIBS=`$PKG_CONFIG --libs "libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -21499,14 +21523,14 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- LIBNL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0" 2>&1`
+ LIBNL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0" 2>&1`
else
- LIBNL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0" 2>&1`
+ LIBNL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$LIBNL_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0) were not met:
+ as_fn_error $? "Package requirements (libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0) were not met:
$LIBNL_PKG_ERRORS
@@ -21636,6 +21660,132 @@ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a readline compatible library" >&5
+$as_echo_n "checking for a readline compatible library... " >&6; }
+if ${ax_cv_lib_readline+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ORIG_LIBS="$LIBS"
+ for readline_lib in readline edit editline; do
+ # prefer ncurses since we use it for nmtui too
+ for termcap_lib in "" ncurses termcap curses; do
+ if test -z "$termcap_lib"; then
+ TRY_LIB="-l$readline_lib"
+ else
+ TRY_LIB="-l$readline_lib -l$termcap_lib"
+ fi
+ LIBS="$ORIG_LIBS $TRY_LIB"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char readline ();
+int
+main ()
+{
+return readline ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_lib_readline="$TRY_LIB"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -n "$ax_cv_lib_readline"; then
+ break
+ fi
+ done
+ if test -n "$ax_cv_lib_readline"; then
+ break
+ fi
+ done
+ LIBS="$ORIG_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_lib_readline" >&5
+$as_echo "$ax_cv_lib_readline" >&6; }
+
+ if test -z "$ax_cv_lib_readline"; then
+ as_fn_error $? "readline library with terminfo support is required (one of ncurses, curses, or termcap)" "$LINENO" 5
+ fi
+
+ LIBS="$LIBS $ax_cv_lib_readline"
+ for ac_header in readline.h readline/readline.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readline supports history" >&5
+$as_echo_n "checking whether readline supports history... " >&6; }
+if ${ax_cv_lib_readline_history+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_cv_lib_readline_history="no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char add_history ();
+int
+main ()
+{
+return add_history ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_lib_readline_history="yes"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_lib_readline_history" >&5
+$as_echo "$ax_cv_lib_readline_history" >&6; }
+ if test "$ax_cv_lib_readline_history" != "yes"; then
+ as_fn_error $? "readline history support is required" "$LINENO" 5
+ fi
+ for ac_header in history.h readline/history.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ READLINE_LIBS="$ax_cv_lib_readline"
+
+
+
# Intel WiMAX SDK checks
pkg_failed=no
@@ -21747,6 +21897,111 @@ else
fi
+# Teamd control checks
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBTEAMDCTL" >&5
+$as_echo_n "checking for LIBTEAMDCTL... " >&6; }
+
+if test -n "$LIBTEAMDCTL_CFLAGS"; then
+ pkg_cv_LIBTEAMDCTL_CFLAGS="$LIBTEAMDCTL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libteamdctl >= 1.9\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libteamdctl >= 1.9") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBTEAMDCTL_CFLAGS=`$PKG_CONFIG --cflags "libteamdctl >= 1.9" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBTEAMDCTL_LIBS"; then
+ pkg_cv_LIBTEAMDCTL_LIBS="$LIBTEAMDCTL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libteamdctl >= 1.9\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libteamdctl >= 1.9") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBTEAMDCTL_LIBS=`$PKG_CONFIG --libs "libteamdctl >= 1.9" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBTEAMDCTL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libteamdctl >= 1.9" 2>&1`
+ else
+ LIBTEAMDCTL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libteamdctl >= 1.9" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBTEAMDCTL_PKG_ERRORS" >&5
+
+ have_teamdctl=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_teamdctl=no
+else
+ LIBTEAMDCTL_CFLAGS=$pkg_cv_LIBTEAMDCTL_CFLAGS
+ LIBTEAMDCTL_LIBS=$pkg_cv_LIBTEAMDCTL_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_teamdctl=yes
+fi
+# Check whether --enable-teamdctl was given.
+if test "${enable_teamdctl+set}" = set; then :
+ enableval=$enable_teamdctl; enable_teamdctl=${enableval}
+else
+ enable_teamdctl=${have_teamdctl}
+fi
+
+if (test "${enable_teamdctl}" = "yes"); then
+ if test x"$have_teamdctl" = x"no"; then
+ as_fn_error $? "Teamd control is required" "$LINENO" 5
+ fi
+
+
+
+ # temporary bug workaround
+ LIBTEAMDCTL_CFLAGS=`echo $LIBTEAMDCTL_CFLAGS | sed -e 's:/teamdctl.h::'`
+
+$as_echo "#define WITH_TEAMDCTL 1" >>confdefs.h
+
+else
+
+$as_echo "#define WITH_TEAMDCTL 0" >>confdefs.h
+
+fi
+ if test "${enable_teamdctl}" = "yes"; then
+ WITH_TEAMDCTL_TRUE=
+ WITH_TEAMDCTL_FALSE='#'
+else
+ WITH_TEAMDCTL_TRUE='#'
+ WITH_TEAMDCTL_FALSE=
+fi
+
+
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POLKIT" >&5
@@ -22153,7 +22408,7 @@ GLIB_MAKEFILE='$(top_srcdir)/Makefile.glib'
GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
-GLIB_MKENUMS='$(top_srcdir)/tools/glib-mkenums'
+GLIB_MKENUMS=`pkg-config --variable=glib_mkenums glib-2.0`
@@ -22225,6 +22480,122 @@ else
fi
+
+# Check whether --with-pppd was given.
+if test "${with_pppd+set}" = set; then :
+ withval=$with_pppd;
+fi
+
+if test "x${with_pppd}" = x; then
+ # Extract the first word of "pppd", so it can be a program name with args.
+set dummy pppd; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PPPD_PATH+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PPPD_PATH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PPPD_PATH="$PPPD_PATH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/sbin:/usr/sbin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PPPD_PATH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PPPD_PATH=$ac_cv_path_PPPD_PATH
+if test -n "$PPPD_PATH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PPPD_PATH" >&5
+$as_echo "$PPPD_PATH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+else
+ PPPD_PATH="$with_pppd"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define PPPD_PATH "$PPPD_PATH"
+_ACEOF
+
+
+
+
+# Check whether --with-pppoe was given.
+if test "${with_pppoe+set}" = set; then :
+ withval=$with_pppoe;
+fi
+
+if test "x${with_pppoe}" = x; then
+ # Extract the first word of "pppoe", so it can be a program name with args.
+set dummy pppoe; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PPPOE_PATH+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PPPOE_PATH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PPPOE_PATH="$PPPOE_PATH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/sbin:/usr/sbin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PPPOE_PATH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PPPOE_PATH=$ac_cv_path_PPPOE_PATH
+if test -n "$PPPOE_PATH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PPPOE_PATH" >&5
+$as_echo "$PPPOE_PATH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+else
+ PPPOE_PATH="$with_pppoe"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define PPPOE_PATH "$PPPOE_PATH"
+_ACEOF
+
+
+
# ModemManager1 with libmm-glib
# Check whether --with-modem-manager-1 was given.
@@ -22878,6 +23249,16 @@ else
$as_echo "yes" >&6; }
have_libsoup=yes
fi
+if test "$have_libsoup" = "yes"; then
+
+$as_echo "#define HAVE_LIBSOUP 1" >>confdefs.h
+
+else
+
+$as_echo "#define HAVE_LIBSOUP 0" >>confdefs.h
+
+fi
+
# Check whether --enable-concheck was given.
if test "${enable_concheck+set}" = set; then :
enableval=$enable_concheck; enable_concheck=${enableval}
@@ -22908,6 +23289,192 @@ else
fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNDP" >&5
+$as_echo_n "checking for LIBNDP... " >&6; }
+
+if test -n "$LIBNDP_CFLAGS"; then
+ pkg_cv_LIBNDP_CFLAGS="$LIBNDP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libndp\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libndp") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBNDP_CFLAGS=`$PKG_CONFIG --cflags "libndp" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBNDP_LIBS"; then
+ pkg_cv_LIBNDP_LIBS="$LIBNDP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libndp\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libndp") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBNDP_LIBS=`$PKG_CONFIG --libs "libndp" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBNDP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libndp" 2>&1`
+ else
+ LIBNDP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libndp" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBNDP_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (libndp) were not met:
+
+$LIBNDP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LIBNDP_CFLAGS
+and LIBNDP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LIBNDP_CFLAGS
+and LIBNDP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ LIBNDP_CFLAGS=$pkg_cv_LIBNDP_CFLAGS
+ LIBNDP_LIBS=$pkg_cv_LIBNDP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+# Check whether --with-nmtui was given.
+if test "${with_nmtui+set}" = set; then :
+ withval=$with_nmtui;
+fi
+
+if test "$with_nmtui" != no; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NEWT" >&5
+$as_echo_n "checking for NEWT... " >&6; }
+
+if test -n "$NEWT_CFLAGS"; then
+ pkg_cv_NEWT_CFLAGS="$NEWT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnewt >= 0.52.15\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libnewt >= 0.52.15") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NEWT_CFLAGS=`$PKG_CONFIG --cflags "libnewt >= 0.52.15" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NEWT_LIBS"; then
+ pkg_cv_NEWT_LIBS="$NEWT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnewt >= 0.52.15\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libnewt >= 0.52.15") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NEWT_LIBS=`$PKG_CONFIG --libs "libnewt >= 0.52.15" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NEWT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnewt >= 0.52.15" 2>&1`
+ else
+ NEWT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnewt >= 0.52.15" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NEWT_PKG_ERRORS" >&5
+
+ build_nmtui=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ build_nmtui=no
+else
+ NEWT_CFLAGS=$pkg_cv_NEWT_CFLAGS
+ NEWT_LIBS=$pkg_cv_NEWT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ build_nmtui=yes
+fi
+else
+ build_nmtui=no
+fi
+if test "$with_nmtui" = yes -a "$build_nmtui" = no; then
+ as_fn_error $? "You must have libnewt installed to build nmtui." "$LINENO" 5
+fi
+ if test "$build_nmtui" = yes; then
+ BUILD_NMTUI_TRUE=
+ BUILD_NMTUI_FALSE='#'
+else
+ BUILD_NMTUI_TRUE='#'
+ BUILD_NMTUI_FALSE=
+fi
+
+
+
# Check whether --enable-more-warnings was given.
if test "${enable_more_warnings+set}" = set; then :
enableval=$enable_more_warnings; set_more_warnings="$enableval"
@@ -22923,7 +23490,7 @@ $as_echo "yes" >&6; }
CFLAGS="-Wall -std=gnu89 $CFLAGS"
for option in -Wshadow -Wmissing-declarations -Wmissing-prototypes \
- -Wdeclaration-after-statement \
+ -Wdeclaration-after-statement -Wformat-security \
-Wfloat-equal -Wno-unused-parameter -Wno-sign-compare \
-fno-strict-aliasing -Wno-unused-but-set-variable \
-Wundef -Wimplicit-function-declaration \
@@ -23215,6 +23782,12 @@ if test "${enable_tests+set}" = set; then :
enableval=$enable_tests;
fi
+
+# Check whether --with-valgrind was given.
+if test "${with_valgrind+set}" = set; then :
+ withval=$with_valgrind;
+fi
+
# Fallback to --with-tests
# Check whether --with-tests was given.
@@ -23225,96 +23798,41 @@ fi
if test -n "$with_tests"; then :
enable_tests="$with_tests"
fi
-# Default to --enable-tests
+# Default to --enable-tests --with-valgrind
if test -z "$enable_tests"; then :
enable_tests="yes"
fi
+if test -z "$with_valgrind"; then :
+ with_valgrind="yes"
+fi
# Normalize values
if test "$enable_tests" != "yes" -a "$enable_tests" != "root"; then :
enable_tests="no"
fi
-# Add conditionals
- if test "$enable_tests" != "no"; then
- ENABLE_TESTS_TRUE=
- ENABLE_TESTS_FALSE='#'
-else
- ENABLE_TESTS_TRUE='#'
- ENABLE_TESTS_FALSE=
-fi
-
- if test "$enable_tests" == "root"; then
- RUN_ROOT_TESTS_TRUE=
- RUN_ROOT_TESTS_FALSE='#'
-else
- RUN_ROOT_TESTS_TRUE='#'
- RUN_ROOT_TESTS_FALSE=
-fi
-
-
-# Backwards compatible documentation enable/disable
-
-# Check whether --with-docs was given.
-if test "${with_docs+set}" = set; then :
- withval=$with_docs;
-fi
-
-# Check whether --enable-doc was given.
-if test "${enable_doc+set}" = set; then :
- enableval=$enable_doc;
-fi
-
-if test "$with_docs" = "yes"; then :
- enable_gtk_doc="yes"
-fi
-if test "$enable_doc" = "yes"; then :
- enable_gtk_doc="yes"
-fi
-
-
-
- gtk_doc_requires="gtk-doc >= 1.0"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gtk-doc" >&5
-$as_echo_n "checking for gtk-doc... " >&6; }
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_doc_requires\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$gtk_doc_requires") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- have_gtk_doc=yes
-else
- have_gtk_doc=no
-fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gtk_doc" >&5
-$as_echo "$have_gtk_doc" >&6; }
-
- if test "$have_gtk_doc" = "no"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
- You will not be able to create source packages with 'make dist'
- because $gtk_doc_requires is not found." >&5
-$as_echo "$as_me: WARNING:
- You will not be able to create source packages with 'make dist'
- because $gtk_doc_requires is not found." >&2;}
- fi
-
- # Extract the first word of "gtkdoc-check", so it can be a program name with args.
-set dummy gtkdoc-check; ac_word=$2
+# Search for tools
+if test "$with_valgrind" == "yes"; then :
+ for ac_prog in valgrind
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GTKDOC_CHECK+:} false; then :
+if ${ac_cv_path_with_valgrind+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$GTKDOC_CHECK"; then
- ac_cv_prog_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ case $with_valgrind in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_with_valgrind="$with_valgrind" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_GTKDOC_CHECK="gtkdoc-check.test"
+ ac_cv_path_with_valgrind="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -23322,28 +23840,59 @@ done
done
IFS=$as_save_IFS
+ ;;
+esac
fi
-fi
-GTKDOC_CHECK=$ac_cv_prog_GTKDOC_CHECK
-if test -n "$GTKDOC_CHECK"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5
-$as_echo "$GTKDOC_CHECK" >&6; }
+with_valgrind=$ac_cv_path_with_valgrind
+if test -n "$with_valgrind"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_valgrind" >&5
+$as_echo "$with_valgrind" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
- # Extract the first word of "gtkdoc-check", so it can be a program name with args.
+ test -n "$with_valgrind" && break
+done
+test -n "$with_valgrind" || with_valgrind="no"
+
+fi
+# Add conditionals and substitutions
+ if test "$enable_tests" != "no"; then
+ ENABLE_TESTS_TRUE=
+ ENABLE_TESTS_FALSE='#'
+else
+ ENABLE_TESTS_TRUE='#'
+ ENABLE_TESTS_FALSE=
+fi
+
+ if test "$enable_tests" == "root"; then
+ REQUIRE_ROOT_TESTS_TRUE=
+ REQUIRE_ROOT_TESTS_FALSE='#'
+else
+ REQUIRE_ROOT_TESTS_TRUE='#'
+ REQUIRE_ROOT_TESTS_FALSE=
+fi
+
+if test "$with_valgrind" != "no"; then :
+ VALGRIND_RULES='TESTS_ENVIRONMENT = "$(top_srcdir)/tools/run-test-valgrind.sh" "$(LIBTOOL)" "$(with_valgrind)" "$(top_srcdir)/valgrind.suppressions"'
+
+fi
+
+
+
+
+ # Extract the first word of "gtkdoc-check", so it can be a program name with args.
set dummy gtkdoc-check; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GTKDOC_CHECK_PATH+:} false; then :
+if ${ac_cv_path_GTKDOC_CHECK+:} false; then :
$as_echo_n "(cached) " >&6
else
- case $GTKDOC_CHECK_PATH in
+ case $GTKDOC_CHECK in
[\\/]* | ?:[\\/]*)
- ac_cv_path_GTKDOC_CHECK_PATH="$GTKDOC_CHECK_PATH" # Let the user override the test with a path.
+ ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -23353,7 +23902,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GTKDOC_CHECK_PATH="$as_dir/$ac_word$ac_exec_ext"
+ ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -23364,10 +23913,10 @@ IFS=$as_save_IFS
;;
esac
fi
-GTKDOC_CHECK_PATH=$ac_cv_path_GTKDOC_CHECK_PATH
-if test -n "$GTKDOC_CHECK_PATH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK_PATH" >&5
-$as_echo "$GTKDOC_CHECK_PATH" >&6; }
+GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK
+if test -n "$GTKDOC_CHECK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5
+$as_echo "$GTKDOC_CHECK" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
@@ -23480,19 +24029,18 @@ else
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5
-$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5
-$as_echo "$enable_gtk_doc" >&6; }
-
- if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then
- as_fn_error $? "
- You must have $gtk_doc_requires installed to build documentation for
- $PACKAGE_NAME. Please install gtk-doc or disable building the
- documentation by adding '--disable-gtk-doc' to '$0'." "$LINENO" 5
- fi
-
- if test "x$PACKAGE_NAME" != "xglib"; then
+ if test x$enable_gtk_doc = xyes; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ :
+else
+ as_fn_error $? "You need to have gtk-doc >= 1.0 installed to build $PACKAGE_NAME" "$LINENO" 5
+fi
+ if test "x$PACKAGE_NAME" != "xglib"; then
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5
@@ -23564,8 +24112,14 @@ else
$as_echo "yes" >&6; }
fi
+ fi
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5
+$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5
+$as_echo "$enable_gtk_doc" >&6; }
+
# Check whether --enable-gtk-doc-html was given.
if test "${enable_gtk_doc_html+set}" = set; then :
enableval=$enable_gtk_doc_html;
@@ -23590,14 +24144,6 @@ fi
fi
- if test x$have_gtk_doc = xyes; then
- HAVE_GTK_DOC_TRUE=
- HAVE_GTK_DOC_FALSE='#'
-else
- HAVE_GTK_DOC_TRUE='#'
- HAVE_GTK_DOC_FALSE=
-fi
-
if test x$enable_gtk_doc = xyes; then
ENABLE_GTK_DOC_TRUE=
ENABLE_GTK_DOC_FALSE='#'
@@ -23642,7 +24188,11 @@ fi
# check for pregenerated manpages to be installed
install_pregen_manpages=no
-if test "$enable_gtk_doc" != "yes" -a -f man/nm-settings.5; then
+if test "$enable_gtk_doc" != "yes" \
+ -a -f man/NetworkManager.conf.5 \
+ -a -f man/nm-settings.5 \
+ -a -f man/nmcli-examples.5 \
+ -a -f man/NetworkManager.8; then
install_pregen_manpages=yes
fi
if test "x${install_pregen_manpages}" = "xyes"; then
@@ -23655,7 +24205,11 @@ fi
-ac_config_files="$ac_config_files Makefile include/Makefile include/nm-version.h src/Makefile src/tests/Makefile src/generated/Makefile src/logging/Makefile src/posix-signals/Makefile src/dns-manager/Makefile src/vpn-manager/Makefile src/dhcp-manager/Makefile src/dhcp-manager/tests/Makefile src/ip6-manager/Makefile src/supplicant-manager/Makefile src/supplicant-manager/tests/Makefile src/ppp-manager/Makefile src/dnsmasq-manager/Makefile src/modem-manager/Makefile src/bluez-manager/Makefile src/wifi/Makefile src/firewall-manager/Makefile src/settings/Makefile src/settings/plugins/Makefile src/settings/plugins/ifupdown/Makefile src/settings/plugins/ifupdown/tests/Makefile src/settings/plugins/ifnet/Makefile src/settings/plugins/ifnet/tests/Makefile src/settings/plugins/ifcfg-rh/Makefile src/settings/plugins/ifcfg-rh/tests/Makefile src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile src/settings/plugins/ifcfg-suse/Makefile src/settings/plugins/keyfile/Makefile src/settings/plugins/keyfile/tests/Makefile src/settings/plugins/keyfile/tests/keyfiles/Makefile src/settings/plugins/example/Makefile src/settings/tests/Makefile src/wimax/Makefile libnm-util/libnm-util.pc libnm-util/Makefile libnm-util/tests/Makefile libnm-util/tests/certs/Makefile libnm-glib/libnm-glib.pc libnm-glib/libnm-glib-vpn.pc libnm-glib/Makefile libnm-glib/tests/Makefile callouts/Makefile callouts/tests/Makefile tools/Makefile cli/Makefile cli/src/Makefile cli/completion/Makefile test/Makefile initscript/RedHat/NetworkManager initscript/Debian/NetworkManager initscript/Slackware/rc.networkmanager initscript/SUSE/networkmanager initscript/Arch/networkmanager initscript/paldo/NetworkManager initscript/Mandriva/networkmanager initscript/linexa/networkmanager introspection/Makefile introspection/all.xml man/Makefile man/NetworkManager.8 man/NetworkManager.conf.5 man/nm-system-settings.conf.5 man/nm-tool.1 man/nm-online.1 man/nmcli.1 po/Makefile.in policy/Makefile policy/org.freedesktop.NetworkManager.policy.in data/Makefile docs/Makefile docs/api/Makefile docs/api/version.xml docs/libnm-glib/Makefile docs/libnm-glib/version.xml docs/libnm-util/Makefile docs/libnm-util/version.xml NetworkManager.pc examples/Makefile examples/shell/Makefile examples/python/Makefile examples/ruby/Makefile examples/C/Makefile examples/C/glib/Makefile examples/C/qt/Makefile examples/dispatcher/Makefile vapi/Makefile"
+ac_config_files="$ac_config_files Makefile include/Makefile include/nm-version.h src/Makefile src/tests/Makefile src/config/tests/Makefile src/dhcp-manager/Makefile src/dhcp-manager/tests/Makefile src/dnsmasq-manager/tests/Makefile src/supplicant-manager/tests/Makefile src/ppp-manager/Makefile src/settings/plugins/Makefile src/settings/plugins/ifupdown/Makefile src/settings/plugins/ifupdown/tests/Makefile src/settings/plugins/ifnet/Makefile src/settings/plugins/ifnet/tests/Makefile src/settings/plugins/ifcfg-rh/Makefile src/settings/plugins/ifcfg-rh/tests/Makefile src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile src/settings/plugins/ifcfg-suse/Makefile src/settings/plugins/keyfile/Makefile src/settings/plugins/keyfile/tests/Makefile src/settings/plugins/keyfile/tests/keyfiles/Makefile src/settings/plugins/example/Makefile src/settings/tests/Makefile src/platform/Makefile src/platform/tests/Makefile src/rdisc/Makefile src/rdisc/tests/Makefile src/devices/adsl/Makefile src/devices/wimax/Makefile src/devices/bluetooth/Makefile src/devices/wifi/Makefile src/devices/wifi/tests/Makefile src/devices/wwan/Makefile libnm-util/libnm-util.pc libnm-util/Makefile libnm-util/tests/Makefile libnm-util/tests/certs/Makefile libnm-glib/libnm-glib.pc libnm-glib/libnm-glib-vpn.pc libnm-glib/Makefile libnm-glib/tests/Makefile callouts/Makefile callouts/tests/Makefile tools/Makefile cli/Makefile cli/src/Makefile cli/completion/Makefile tui/Makefile tui/newt/Makefile test/Makefile initscript/RedHat/NetworkManager initscript/Debian/NetworkManager initscript/Slackware/rc.networkmanager initscript/SUSE/networkmanager initscript/Arch/networkmanager initscript/Mandriva/networkmanager initscript/linexa/networkmanager introspection/Makefile introspection/all.xml man/Makefile man/nm-system-settings.conf.5 man/nm-online.1 man/nmcli.1 po/Makefile.in policy/Makefile policy/org.freedesktop.NetworkManager.policy.in data/Makefile docs/Makefile docs/api/Makefile docs/api/version.xml docs/libnm-glib/Makefile docs/libnm-glib/version.xml docs/libnm-util/Makefile docs/libnm-util/version.xml NetworkManager.pc examples/Makefile examples/shell/Makefile examples/python/Makefile examples/python/dbus/Makefile examples/python/gi/Makefile examples/ruby/Makefile examples/C/Makefile examples/C/glib/Makefile examples/C/qt/Makefile examples/dispatcher/Makefile vapi/Makefile"
+
+
+
+subdirs="$subdirs libndp"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -23831,6 +24385,10 @@ if test -z "${WITH_WEXT_TRUE}" && test -z "${WITH_WEXT_FALSE}"; then
as_fn_error $? "conditional \"WITH_WEXT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_DBUS_GLIB_100_TRUE}" && test -z "${HAVE_DBUS_GLIB_100_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_DBUS_GLIB_100\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then
as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -23839,10 +24397,6 @@ if test -z "${WITH_QT_TRUE}" && test -z "${WITH_QT_FALSE}"; then
as_fn_error $? "conditional \"WITH_QT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${WITH_BLUEZ4_TRUE}" && test -z "${WITH_BLUEZ4_FALSE}"; then
- as_fn_error $? "conditional \"WITH_BLUEZ4\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${HAVE_SYSTEMD_TRUE}" && test -z "${HAVE_SYSTEMD_FALSE}"; then
as_fn_error $? "conditional \"HAVE_SYSTEMD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -23867,10 +24421,18 @@ if test -z "${SUSPEND_RESUME_SYSTEMD_TRUE}" && test -z "${SUSPEND_RESUME_SYSTEMD
as_fn_error $? "conditional \"SUSPEND_RESUME_SYSTEMD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_SELINUX_TRUE}" && test -z "${HAVE_SELINUX_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_SELINUX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${WITH_WIMAX_TRUE}" && test -z "${WITH_WIMAX_FALSE}"; then
as_fn_error $? "conditional \"WITH_WIMAX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${WITH_TEAMDCTL_TRUE}" && test -z "${WITH_TEAMDCTL_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_TEAMDCTL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${WITH_POLKIT_TRUE}" && test -z "${WITH_POLKIT_FALSE}"; then
as_fn_error $? "conditional \"WITH_POLKIT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -23895,6 +24457,10 @@ if test -z "${WITH_CONCHECK_TRUE}" && test -z "${WITH_CONCHECK_FALSE}"; then
as_fn_error $? "conditional \"WITH_CONCHECK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${BUILD_NMTUI_TRUE}" && test -z "${BUILD_NMTUI_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_NMTUI\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_VAPIGEN_TRUE}" && test -z "${ENABLE_VAPIGEN_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_VAPIGEN\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -23903,12 +24469,8 @@ if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_TESTS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${RUN_ROOT_TESTS_TRUE}" && test -z "${RUN_ROOT_TESTS_FALSE}"; then
- as_fn_error $? "conditional \"RUN_ROOT_TESTS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_GTK_DOC_TRUE}" && test -z "${HAVE_GTK_DOC_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_GTK_DOC\" was never defined.
+if test -z "${REQUIRE_ROOT_TESTS_TRUE}" && test -z "${REQUIRE_ROOT_TESTS_FALSE}"; then
+ as_fn_error $? "conditional \"REQUIRE_ROOT_TESTS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
@@ -24332,7 +24894,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by NetworkManager $as_me 0.9.8.10, which was
+This file was extended by NetworkManager $as_me 0.9.10.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -24398,7 +24960,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-NetworkManager config.status 0.9.8.10
+NetworkManager config.status 0.9.10.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -24918,23 +25480,12 @@ do
"include/nm-version.h") CONFIG_FILES="$CONFIG_FILES include/nm-version.h" ;;
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
"src/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/tests/Makefile" ;;
- "src/generated/Makefile") CONFIG_FILES="$CONFIG_FILES src/generated/Makefile" ;;
- "src/logging/Makefile") CONFIG_FILES="$CONFIG_FILES src/logging/Makefile" ;;
- "src/posix-signals/Makefile") CONFIG_FILES="$CONFIG_FILES src/posix-signals/Makefile" ;;
- "src/dns-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/dns-manager/Makefile" ;;
- "src/vpn-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/vpn-manager/Makefile" ;;
+ "src/config/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/config/tests/Makefile" ;;
"src/dhcp-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/dhcp-manager/Makefile" ;;
"src/dhcp-manager/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/dhcp-manager/tests/Makefile" ;;
- "src/ip6-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/ip6-manager/Makefile" ;;
- "src/supplicant-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/supplicant-manager/Makefile" ;;
+ "src/dnsmasq-manager/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/dnsmasq-manager/tests/Makefile" ;;
"src/supplicant-manager/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/supplicant-manager/tests/Makefile" ;;
"src/ppp-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/ppp-manager/Makefile" ;;
- "src/dnsmasq-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/dnsmasq-manager/Makefile" ;;
- "src/modem-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/modem-manager/Makefile" ;;
- "src/bluez-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/bluez-manager/Makefile" ;;
- "src/wifi/Makefile") CONFIG_FILES="$CONFIG_FILES src/wifi/Makefile" ;;
- "src/firewall-manager/Makefile") CONFIG_FILES="$CONFIG_FILES src/firewall-manager/Makefile" ;;
- "src/settings/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/Makefile" ;;
"src/settings/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/Makefile" ;;
"src/settings/plugins/ifupdown/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ifupdown/Makefile" ;;
"src/settings/plugins/ifupdown/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ifupdown/tests/Makefile" ;;
@@ -24949,7 +25500,16 @@ do
"src/settings/plugins/keyfile/tests/keyfiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/keyfile/tests/keyfiles/Makefile" ;;
"src/settings/plugins/example/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/example/Makefile" ;;
"src/settings/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/tests/Makefile" ;;
- "src/wimax/Makefile") CONFIG_FILES="$CONFIG_FILES src/wimax/Makefile" ;;
+ "src/platform/Makefile") CONFIG_FILES="$CONFIG_FILES src/platform/Makefile" ;;
+ "src/platform/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/platform/tests/Makefile" ;;
+ "src/rdisc/Makefile") CONFIG_FILES="$CONFIG_FILES src/rdisc/Makefile" ;;
+ "src/rdisc/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/rdisc/tests/Makefile" ;;
+ "src/devices/adsl/Makefile") CONFIG_FILES="$CONFIG_FILES src/devices/adsl/Makefile" ;;
+ "src/devices/wimax/Makefile") CONFIG_FILES="$CONFIG_FILES src/devices/wimax/Makefile" ;;
+ "src/devices/bluetooth/Makefile") CONFIG_FILES="$CONFIG_FILES src/devices/bluetooth/Makefile" ;;
+ "src/devices/wifi/Makefile") CONFIG_FILES="$CONFIG_FILES src/devices/wifi/Makefile" ;;
+ "src/devices/wifi/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/devices/wifi/tests/Makefile" ;;
+ "src/devices/wwan/Makefile") CONFIG_FILES="$CONFIG_FILES src/devices/wwan/Makefile" ;;
"libnm-util/libnm-util.pc") CONFIG_FILES="$CONFIG_FILES libnm-util/libnm-util.pc" ;;
"libnm-util/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-util/Makefile" ;;
"libnm-util/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-util/tests/Makefile" ;;
@@ -24964,22 +25524,20 @@ do
"cli/Makefile") CONFIG_FILES="$CONFIG_FILES cli/Makefile" ;;
"cli/src/Makefile") CONFIG_FILES="$CONFIG_FILES cli/src/Makefile" ;;
"cli/completion/Makefile") CONFIG_FILES="$CONFIG_FILES cli/completion/Makefile" ;;
+ "tui/Makefile") CONFIG_FILES="$CONFIG_FILES tui/Makefile" ;;
+ "tui/newt/Makefile") CONFIG_FILES="$CONFIG_FILES tui/newt/Makefile" ;;
"test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
"initscript/RedHat/NetworkManager") CONFIG_FILES="$CONFIG_FILES initscript/RedHat/NetworkManager" ;;
"initscript/Debian/NetworkManager") CONFIG_FILES="$CONFIG_FILES initscript/Debian/NetworkManager" ;;
"initscript/Slackware/rc.networkmanager") CONFIG_FILES="$CONFIG_FILES initscript/Slackware/rc.networkmanager" ;;
"initscript/SUSE/networkmanager") CONFIG_FILES="$CONFIG_FILES initscript/SUSE/networkmanager" ;;
"initscript/Arch/networkmanager") CONFIG_FILES="$CONFIG_FILES initscript/Arch/networkmanager" ;;
- "initscript/paldo/NetworkManager") CONFIG_FILES="$CONFIG_FILES initscript/paldo/NetworkManager" ;;
"initscript/Mandriva/networkmanager") CONFIG_FILES="$CONFIG_FILES initscript/Mandriva/networkmanager" ;;
"initscript/linexa/networkmanager") CONFIG_FILES="$CONFIG_FILES initscript/linexa/networkmanager" ;;
"introspection/Makefile") CONFIG_FILES="$CONFIG_FILES introspection/Makefile" ;;
"introspection/all.xml") CONFIG_FILES="$CONFIG_FILES introspection/all.xml" ;;
"man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
- "man/NetworkManager.8") CONFIG_FILES="$CONFIG_FILES man/NetworkManager.8" ;;
- "man/NetworkManager.conf.5") CONFIG_FILES="$CONFIG_FILES man/NetworkManager.conf.5" ;;
"man/nm-system-settings.conf.5") CONFIG_FILES="$CONFIG_FILES man/nm-system-settings.conf.5" ;;
- "man/nm-tool.1") CONFIG_FILES="$CONFIG_FILES man/nm-tool.1" ;;
"man/nm-online.1") CONFIG_FILES="$CONFIG_FILES man/nm-online.1" ;;
"man/nmcli.1") CONFIG_FILES="$CONFIG_FILES man/nmcli.1" ;;
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
@@ -24997,6 +25555,8 @@ do
"examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
"examples/shell/Makefile") CONFIG_FILES="$CONFIG_FILES examples/shell/Makefile" ;;
"examples/python/Makefile") CONFIG_FILES="$CONFIG_FILES examples/python/Makefile" ;;
+ "examples/python/dbus/Makefile") CONFIG_FILES="$CONFIG_FILES examples/python/dbus/Makefile" ;;
+ "examples/python/gi/Makefile") CONFIG_FILES="$CONFIG_FILES examples/python/gi/Makefile" ;;
"examples/ruby/Makefile") CONFIG_FILES="$CONFIG_FILES examples/ruby/Makefile" ;;
"examples/C/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/Makefile" ;;
"examples/C/glib/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/glib/Makefile" ;;
@@ -26655,6 +27215,151 @@ if test "$no_create" != yes; then
# would make configure fail if this is the last instruction.
$ac_cs_success || as_fn_exit 1
fi
+
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for ac_arg
+ do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case $ac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ ac_arg="--prefix=$prefix"
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+ # Pass --silent
+ if test "$silent" = yes; then
+ ac_sub_configure_args="--silent $ac_sub_configure_args"
+ fi
+
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+ ac_popdir=`pwd`
+ for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$ac_dir" || continue
+
+ ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+ $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
+ $as_echo "$ac_msg" >&6
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ cd "$ac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ ac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ ac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.in"; then
+ # This should be Cygnus configure.
+ ac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+ # Make the cache file name correct relative to the subdirectory.
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+ *) # Relative name.
+ ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+ as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
+ fi
+
+ cd "$ac_popdir"
+ done
+fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
@@ -26686,6 +27391,7 @@ if test "${enable_polkit}" = "yes"; then
else
echo " policykit: no"
fi
+echo " selinux: $have_selinux"
echo
echo "Features:"
@@ -26694,7 +27400,8 @@ echo " wimax: $enable_wimax"
echo " ppp: $enable_ppp"
echo " modemmanager-1: $with_modem_manager_1"
echo " concheck: $enable_concheck"
-echo " bluez 4: $enable_bluez4"
+echo " libteamdctl: $enable_teamdctl"
+echo " nmtui: $build_nmtui"
echo
echo "Configuration plugins"
@@ -26717,5 +27424,6 @@ echo
echo "Miscellaneous:"
echo " documentation: $enable_gtk_doc"
echo " tests: $enable_tests"
+echo " valgrind: $with_valgrind"
echo " code coverage: $enable_code_coverage"
echo
diff --git a/configure.ac b/configure.ac
index c32a8dc5e..94b07580e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,11 +3,11 @@ AC_PREREQ([2.63])
dnl The NM version number
m4_define([nm_major_version], [0])
m4_define([nm_minor_version], [9])
-m4_define([nm_micro_version], [8])
-m4_define([nm_nano_version], [10])
+m4_define([nm_micro_version], [10])
+m4_define([nm_nano_version], [0])
m4_define([nm_version],
[nm_major_version.nm_minor_version.nm_micro_version.nm_nano_version])
-m4_define([nm_git_sha], [m4_esyscmd([ ( [[ -d ./.git/ && "$(realpath ./.git/)" = "$(realpath "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null)" ]] && git rev-parse --verify -q HEAD 2>/dev/null ) || true ])])
+m4_define([nm_git_sha], [m4_esyscmd([ ( [ -d ./.git/ ] && [ "$(readlink -f ./.git/)" = "$(readlink -f "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null)" ] && git rev-parse --verify -q HEAD 2>/dev/null ) || true ])])
AC_INIT([NetworkManager], [nm_version],
[http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager],
@@ -17,9 +17,22 @@ AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([build-aux])
-AM_INIT_AUTOMAKE([1.11 tar-ustar no-dist-gzip dist-bzip2 -Wno-portability])
+dnl Initialize automake. automake < 1.12 didn't have serial-tests and
+dnl gives an error if it sees this, but for automake >= 1.13
+dnl serial-tests is required so we have to include it. Solution is to
+dnl test for the version of automake (by running an external command)
+dnl and provide it if necessary. Note we have to do this entirely using
+dnl m4 macros since automake queries this macro by running
+dnl 'autoconf --trace ...'.
+m4_define([serial_tests], [
+ m4_esyscmd([automake --version |
+ head -1 |
+ awk '{split ($NF,a,"."); if (a[1] == 1 && a[2] >= 12) { print "serial-tests" }}'
+ ])
+])
+AM_INIT_AUTOMAKE(1.11 serial_tests tar-ustar no-dist-gzip dist-bzip2 -Wno-portability) dnl NB: Do not [quote] this parameter.
AM_MAINTAINER_MODE([enable])
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+AM_SILENT_RULES([yes])
dnl Define _SYSTEM_EXTENSIONS for various things like strcasestr()
AC_USE_SYSTEM_EXTENSIONS
@@ -29,7 +42,6 @@ dnl Require programs
dnl
AC_PROG_CC
AM_PROG_CC_C_O
-AC_PROG_INSTALL
# C++ only required if --enable-qt=yes
AC_PROG_CXX
@@ -50,24 +62,9 @@ AC_SUBST(NM_MICRO_VERSION)
AC_SUBST(NM_VERSION)
dnl
-dnl Required headers
-dnl
-AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h paths.h sys/ioctl.h sys/time.h syslog.h unistd.h)
-
-dnl
dnl Checks for typedefs, structures, and compiler characteristics.
dnl
-AC_TYPE_MODE_T
AC_TYPE_PID_T
-AC_HEADER_TIME
-
-dnl
-dnl Checks for library functions.
-dnl
-AC_PROG_GCC_TRADITIONAL
-AC_FUNC_MEMCMP
-AC_CHECK_FUNCS(select socket uname)
dnl
dnl translation support
@@ -115,6 +112,12 @@ AM_CONDITIONAL(CONFIG_PLUGIN_IFCFG_RH, test "$enable_ifcfg_rh" = "yes")
AM_CONDITIONAL(CONFIG_PLUGIN_IFCFG_SUSE, test "$enable_ifcfg_suse" = "yes")
AM_CONDITIONAL(CONFIG_PLUGIN_IFUPDOWN, test "$enable_ifupdown" = "yes")
AM_CONDITIONAL(CONFIG_PLUGIN_IFNET, test "$enable_ifnet" = "yes")
+
+if test "$enable_ifcfg_rh" = "yes"; then
+ DISTRO_NETWORK_SERVICE=network.service
+fi
+AC_SUBST(DISTRO_NETWORK_SERVICE)
+
# Code coverage
GNOME_CODE_COVERAGE
@@ -174,8 +177,28 @@ if test "$ac_have_nl80211" = no; then
AC_MSG_ERROR(Linux kernel development header linux/nl80211.h not installed or not functional)
fi
+AC_MSG_CHECKING([Linux kernel nl80211 Critical Protocol Start/Stop])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#ifndef __user
+ #define __user
+ #endif
+ #include <sys/types.h>
+ #include <linux/types.h>
+ #include <sys/socket.h>
+ #include <linux/nl80211.h>]],
+ [[unsigned int a = NL80211_CMD_CRIT_PROTOCOL_START; a++;]])],
+ [ac_have_nl80211_critproto=yes],
+ [ac_have_nl80211_critproto=no])
+AC_MSG_RESULT($ac_have_nl80211_critproto)
+if test "$ac_have_nl80211_critproto" = yes; then
+ AC_DEFINE(HAVE_NL80211_CRITICAL_PROTOCOL_CMDS, 1, [Define if nl80211 has critical protocol support])
+else
+ AC_DEFINE(HAVE_NL80211_CRITICAL_PROTOCOL_CMDS, 0, [Define if nl80211 has critical protocol support])
+fi
+
dnl
-dnl Default to using WEXT but allow it to be disabled
+dnl Check for newer VLAN flags
dnl
AC_MSG_CHECKING([Linux kernel VLAN_FLAG_LOOSE_BINDING enum value])
AC_COMPILE_IFELSE(
@@ -214,15 +237,28 @@ PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.1 dbus-glib-1 >= 0.94)
AC_SUBST(DBUS_CFLAGS)
AC_SUBST(DBUS_LIBS)
-GLIB_VERSION_DEFINES="-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26 '-DGLIB_VERSION_MAX_ALLOWED=G_ENCODE_VERSION(2,34)'"
+AC_CHECK_LIB([dbus-glib-1], [dbus_g_method_invocation_get_g_connection], ac_have_gmi_get_con="1", ac_have_gmi_get_con="0")
+AC_DEFINE_UNQUOTED(HAVE_DBUS_GLIB_GMI_GET_CONNECTION, $ac_have_gmi_get_con, [Define if you have a dbus-glib with dbus_g_method_invocation_get_g_connection()])
-# dbus-glib uses GValueArray, which is deprecated as of GLib 2.32.
-# Set GLIB_VERSION_MIN_REQUIRED to something less than that to avoid
-# getting warnings. (GLIB_VERSION_2_26 is the oldest defined version.)
-DBUS_CFLAGS="$DBUS_CFLAGS $GLIB_VERSION_DEFINES"
+dnl
+dnl Only dbus-glib >= 0.100 can use private dbus connections
+dnl
+PKG_CHECK_MODULES(DBUS_GLIB_100, [dbus-glib-1 >= 0.100], [have_dbus_glib_100=yes],[have_dbus_glib_100=no])
+if (test "${have_dbus_glib_100}" = "yes"); then
+ AC_DEFINE(HAVE_DBUS_GLIB_100, 1, [Define if you have dbus-glib >= 0.100])
+else
+ AC_DEFINE(HAVE_DBUS_GLIB_100, 0, [Define if you have dbus-glib >= 0.100])
+fi
+AM_CONDITIONAL(HAVE_DBUS_GLIB_100, test "${have_dbus_glib_100}" = "yes")
+
+PKG_CHECK_MODULES(GLIB, gio-unix-2.0 >= 2.32 gmodule-2.0)
+
+dnl GLIB_VERSION_MIN_REQUIRED should match the version above.
+dnl GLIB_VERSION_MAX_ALLOWED should be set to the same version;
+dnl nm-glib-compat.h will cause it to be overridden for the functions
+dnl we have compat versions of.
+GLIB_CFLAGS="$GLIB_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32"
-PKG_CHECK_MODULES(GLIB, gio-unix-2.0 >= 2.22 gmodule-2.0)
-GLIB_CFLAGS="$GLIB_CFLAGS $GLIB_VERSION_DEFINES"
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
@@ -257,18 +293,6 @@ else
fi
AC_SUBST(UDEV_BASE_DIR)
-# BlueZ
-AC_ARG_ENABLE(bluez4, AS_HELP_STRING([--enable-bluez4],
- [build with BlueZ 4 support instead of BlueZ 5]),
- [enable_bluez4=${enableval}])
-if (test "${enable_bluez4}" = "yes"); then
- AC_DEFINE(WITH_BLUEZ4, 1, [Define if you have BlueZ 4 support])
-else
- AC_DEFINE(WITH_BLUEZ4, 0, [Define if you have BlueZ 4 support])
- enable_bluez4=no
-fi
-AM_CONDITIONAL(WITH_BLUEZ4, test "${enable_bluez4}" = "yes")
-
# systemd unit support
AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
[Directory for systemd service files]))
@@ -336,8 +360,25 @@ esac
AM_CONDITIONAL(SUSPEND_RESUME_UPOWER, test "x$with_suspend_resume" = "xupower")
AM_CONDITIONAL(SUSPEND_RESUME_SYSTEMD, test "x$with_suspend_resume" = "xsystemd")
+# SELinux support
+AC_ARG_WITH(selinux, AS_HELP_STRING([--with-selinux=yes|no|auto], [Build with SELinux (default: auto)]),,[with_selinux=auto])
+if test "$with_selinux" = "yes" -o "$with_selinux" = "auto"; then
+ PKG_CHECK_MODULES(SELINUX, libselinux, [have_selinux=yes], [have_selinux=no])
+else
+ have_selinux=no
+fi
+if test "$with_selinux" = "yes" -a "$have_selinux" = "no"; then
+ AC_MSG_ERROR([You must have libselinux installed to build --with-selinux=yes.])
+fi
+if test "$have_selinux" = "yes"; then
+ AC_DEFINE(HAVE_SELINUX, 1, [Define if you have SELinux support])
+else
+ AC_DEFINE(HAVE_SELINUX, 0, [Define if you have SELinux support])
+fi
+AM_CONDITIONAL(HAVE_SELINUX, test "${have_selinux}" = "yes")
+
# libnl support for the linux platform
-PKG_CHECK_MODULES(LIBNL, libnl-3.0 >= 3.2.7 libnl-route-3.0 libnl-genl-3.0)
+PKG_CHECK_MODULES(LIBNL, libnl-3.0 >= 3.2.8 libnl-route-3.0 libnl-genl-3.0)
AC_SUBST(LIBNL_CFLAGS)
AC_SUBST(LIBNL_LIBS)
@@ -346,6 +387,9 @@ PKG_CHECK_MODULES(UUID, uuid)
AC_SUBST(UUID_CFLAGS)
AC_SUBST(UUID_LIBS)
+dnl Checks for readline library - used by nmcli
+AX_LIB_READLINE
+
# Intel WiMAX SDK checks
PKG_CHECK_MODULES(IWMX_SDK, [libiWmxSdk-0 >= 1.5.1], [have_wimax=yes],[have_wimax=no])
AC_ARG_ENABLE(wimax, AS_HELP_STRING([--enable-wimax], [enable WiMAX support]),
@@ -371,6 +415,25 @@ else
fi
AM_CONDITIONAL(WITH_WIMAX, test "${enable_wimax}" = "yes")
+# Teamd control checks
+PKG_CHECK_MODULES(LIBTEAMDCTL, [libteamdctl >= 1.9], [have_teamdctl=yes],[have_teamdctl=no])
+AC_ARG_ENABLE(teamdctl, AS_HELP_STRING([--enable-teamdctl], [enable Teamd control support]),
+ [enable_teamdctl=${enableval}], [enable_teamdctl=${have_teamdctl}])
+if (test "${enable_teamdctl}" = "yes"); then
+ if test x"$have_teamdctl" = x"no"; then
+ AC_MSG_ERROR(Teamd control is required)
+ fi
+
+ AC_SUBST(LIBTEAMDCTL_CFLAGS)
+ AC_SUBST(LIBTEAMDCTL_LIBS)
+ # temporary bug workaround
+ LIBTEAMDCTL_CFLAGS=`echo $LIBTEAMDCTL_CFLAGS | sed -e 's:/teamdctl.h::'`
+ AC_DEFINE(WITH_TEAMDCTL, 1, [Define if you have Teamd control support])
+else
+ AC_DEFINE(WITH_TEAMDCTL, 0, [Define if you have Teamd control support])
+fi
+AM_CONDITIONAL(WITH_TEAMDCTL, test "${enable_teamdctl}" = "yes")
+
PKG_CHECK_MODULES(POLKIT, [polkit-gobject-1 >= 0.97], [have_polkit=yes],[have_polkit=no])
AC_ARG_ENABLE(polkit, AS_HELP_STRING([--enable-polkit], [enable PolicyKit support]),
[enable_polkit=${enableval}], [enable_polkit=${have_polkit}])
@@ -443,7 +506,7 @@ GLIB_MAKEFILE='$(top_srcdir)/Makefile.glib'
AC_SUBST(GLIB_MAKEFILE)
GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
AC_SUBST(GLIB_GENMARSHAL)
-GLIB_MKENUMS='$(top_srcdir)/tools/glib-mkenums'
+GLIB_MKENUMS=`pkg-config --variable=glib_mkenums glib-2.0`
AC_SUBST(GLIB_MKENUMS)
AC_ARG_WITH(dbus-sys-dir, AS_HELP_STRING([--with-dbus-sys-dir=DIR], [where D-BUS system.d directory is]))
@@ -477,6 +540,24 @@ else
fi
AC_SUBST(PPPD_PLUGIN_DIR)
+AC_ARG_WITH(pppd, AS_HELP_STRING([--with-pppd=/path/to/pppd], [path to pppd binary]))
+if test "x${with_pppd}" = x; then
+ AC_PATH_PROG(PPPD_PATH, pppd, [], $PATH:/sbin:/usr/sbin)
+else
+ PPPD_PATH="$with_pppd"
+fi
+AC_DEFINE_UNQUOTED(PPPD_PATH, "$PPPD_PATH", [Define to path of pppd binary])
+AC_SUBST(PPPD_PATH)
+
+AC_ARG_WITH(pppoe, AS_HELP_STRING([--with-pppoe=/path/to/pppoe], [path to pppoe binary]))
+if test "x${with_pppoe}" = x; then
+ AC_PATH_PROG(PPPOE_PATH, pppoe, [], $PATH:/sbin:/usr/sbin)
+else
+ PPPOE_PATH="$with_pppoe"
+fi
+AC_DEFINE_UNQUOTED(PPPOE_PATH, "$PPPOE_PATH", [Define to path of pppoe binary])
+AC_SUBST(PPPOE_PATH)
+
# ModemManager1 with libmm-glib
AC_ARG_WITH(modem-manager-1, AS_HELP_STRING([--with-modem-manager-1], [Enable new ModemManager1 interface support]),,[with_modem_manager_1=auto])
if (test "${with_modem_manager_1}" != "no"); then
@@ -612,6 +693,12 @@ AC_DEFINE_UNQUOTED(KERNEL_FIRMWARE_DIR, "$KERNEL_FIRMWARE_DIR", [Define to path
AC_SUBST(KERNEL_FIRMWARE_DIR)
PKG_CHECK_MODULES(LIBSOUP, [libsoup-2.4 >= 2.26], [have_libsoup=yes],[have_libsoup=no])
+if test "$have_libsoup" = "yes"; then
+ AC_DEFINE(HAVE_LIBSOUP, 1, [Define if you have libsoup])
+else
+ AC_DEFINE(HAVE_LIBSOUP, 0, [Define if you have libsoup])
+fi
+
AC_ARG_ENABLE(concheck, AS_HELP_STRING([--enable-concheck], [enable connectivity checking support]),
[enable_concheck=${enableval}], [enable_concheck=${have_libsoup}])
if (test "${enable_concheck}" = "yes"); then
@@ -626,6 +713,20 @@ else
fi
AM_CONDITIONAL(WITH_CONCHECK, test "${enable_concheck}" = "yes")
+PKG_CHECK_MODULES(LIBNDP, [libndp])
+
+AC_ARG_WITH(nmtui, AS_HELP_STRING([--with-nmtui=yes|no], [Build nmtui]))
+if test "$with_nmtui" != no; then
+ PKG_CHECK_MODULES(NEWT, [libnewt >= 0.52.15], [build_nmtui=yes], [build_nmtui=no])
+else
+ build_nmtui=no
+fi
+if test "$with_nmtui" = yes -a "$build_nmtui" = no; then
+ AC_MSG_ERROR([You must have libnewt installed to build nmtui.])
+fi
+AM_CONDITIONAL(BUILD_NMTUI, test "$build_nmtui" = yes)
+
+
NM_COMPILER_WARNINGS
dnl -------------------------
@@ -636,27 +737,34 @@ VAPIGEN_CHECK(0.17.1.24)
# Tests, utilities and documentation
AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests=root|yes|no], [Build NetworkManager tests (default: yes)]))
+AC_ARG_WITH(valgrind, AS_HELP_STRING([--with-valgrind=yes|no|path], [Use valgrind to memory-check the tests (default: yes)]))
# Fallback to --with-tests
AC_ARG_WITH(tests, AS_HELP_STRING([--with-tests], [Build NetworkManager tests (deprecated)]))
AS_IF([test -n "$with_tests"], enable_tests="$with_tests")
-# Default to --enable-tests
+# Default to --enable-tests --with-valgrind
AS_IF([test -z "$enable_tests"], enable_tests="yes")
+AS_IF([test -z "$with_valgrind"], with_valgrind="yes")
# Normalize values
AS_IF([test "$enable_tests" != "yes" -a "$enable_tests" != "root"], enable_tests="no")
-# Add conditionals
+# Search for tools
+AS_IF([test "$with_valgrind" == "yes"],
+ [AC_PATH_PROGS(with_valgrind, valgrind, no)])
+# Add conditionals and substitutions
AM_CONDITIONAL(ENABLE_TESTS, test "$enable_tests" != "no")
-AM_CONDITIONAL(RUN_ROOT_TESTS, test "$enable_tests" == "root")
+AM_CONDITIONAL(REQUIRE_ROOT_TESTS, test "$enable_tests" == "root")
+AS_IF([test "$with_valgrind" != "no"],
+ AC_SUBST(VALGRIND_RULES, 'TESTS_ENVIRONMENT = "$(top_srcdir)/tools/run-test-valgrind.sh" "$(LIBTOOL)" "$(with_valgrind)" "$(top_srcdir)/valgrind.suppressions"'),
+ AC_SUBST(VALGRIND_RULES, []))
-# Backwards compatible documentation enable/disable
-AC_ARG_WITH(docs, AS_HELP_STRING([--with-docs], [Build NetworkManager documentation (deprecated, use --enable-gtk-doc)]))
-AC_ARG_ENABLE(doc, AS_HELP_STRING([--enable-doc], [Build NetworkManager documentation (deprecated, use --enable-gtk-doc)]))
-AS_IF([test "$with_docs" = "yes"], enable_gtk_doc="yes")
-AS_IF([test "$enable_doc" = "yes"], enable_gtk_doc="yes")
GTK_DOC_CHECK(1.0)
# check for pregenerated manpages to be installed
install_pregen_manpages=no
-if test "$enable_gtk_doc" != "yes" -a -f man/nm-settings.5; then
+if test "$enable_gtk_doc" != "yes" \
+ -a -f man/NetworkManager.conf.5 \
+ -a -f man/nm-settings.5 \
+ -a -f man/nmcli-examples.5 \
+ -a -f man/NetworkManager.8; then
install_pregen_manpages=yes
fi
AM_CONDITIONAL(INSTALL_PREGEN_MANPAGES, test "x${install_pregen_manpages}" = "xyes")
@@ -668,23 +776,12 @@ include/Makefile
include/nm-version.h
src/Makefile
src/tests/Makefile
-src/generated/Makefile
-src/logging/Makefile
-src/posix-signals/Makefile
-src/dns-manager/Makefile
-src/vpn-manager/Makefile
+src/config/tests/Makefile
src/dhcp-manager/Makefile
src/dhcp-manager/tests/Makefile
-src/ip6-manager/Makefile
-src/supplicant-manager/Makefile
+src/dnsmasq-manager/tests/Makefile
src/supplicant-manager/tests/Makefile
src/ppp-manager/Makefile
-src/dnsmasq-manager/Makefile
-src/modem-manager/Makefile
-src/bluez-manager/Makefile
-src/wifi/Makefile
-src/firewall-manager/Makefile
-src/settings/Makefile
src/settings/plugins/Makefile
src/settings/plugins/ifupdown/Makefile
src/settings/plugins/ifupdown/tests/Makefile
@@ -699,7 +796,16 @@ src/settings/plugins/keyfile/tests/Makefile
src/settings/plugins/keyfile/tests/keyfiles/Makefile
src/settings/plugins/example/Makefile
src/settings/tests/Makefile
-src/wimax/Makefile
+src/platform/Makefile
+src/platform/tests/Makefile
+src/rdisc/Makefile
+src/rdisc/tests/Makefile
+src/devices/adsl/Makefile
+src/devices/wimax/Makefile
+src/devices/bluetooth/Makefile
+src/devices/wifi/Makefile
+src/devices/wifi/tests/Makefile
+src/devices/wwan/Makefile
libnm-util/libnm-util.pc
libnm-util/Makefile
libnm-util/tests/Makefile
@@ -714,22 +820,20 @@ tools/Makefile
cli/Makefile
cli/src/Makefile
cli/completion/Makefile
+tui/Makefile
+tui/newt/Makefile
test/Makefile
initscript/RedHat/NetworkManager
initscript/Debian/NetworkManager
initscript/Slackware/rc.networkmanager
initscript/SUSE/networkmanager
initscript/Arch/networkmanager
-initscript/paldo/NetworkManager
initscript/Mandriva/networkmanager
initscript/linexa/networkmanager
introspection/Makefile
introspection/all.xml
man/Makefile
-man/NetworkManager.8
-man/NetworkManager.conf.5
man/nm-system-settings.conf.5
-man/nm-tool.1
man/nm-online.1
man/nmcli.1
po/Makefile.in
@@ -747,6 +851,8 @@ NetworkManager.pc
examples/Makefile
examples/shell/Makefile
examples/python/Makefile
+examples/python/dbus/Makefile
+examples/python/gi/Makefile
examples/ruby/Makefile
examples/C/Makefile
examples/C/glib/Makefile
@@ -754,6 +860,7 @@ examples/C/qt/Makefile
examples/dispatcher/Makefile
vapi/Makefile
])
+AC_CONFIG_SUBDIRS([libndp])
AC_OUTPUT
# Print build configuration
@@ -781,6 +888,7 @@ if test "${enable_polkit}" = "yes"; then
else
echo " policykit: no"
fi
+echo " selinux: $have_selinux"
echo
echo "Features:"
@@ -789,7 +897,8 @@ echo " wimax: $enable_wimax"
echo " ppp: $enable_ppp"
echo " modemmanager-1: $with_modem_manager_1"
echo " concheck: $enable_concheck"
-echo " bluez 4: $enable_bluez4"
+echo " libteamdctl: $enable_teamdctl"
+echo " nmtui: $build_nmtui"
echo
echo "Configuration plugins"
@@ -812,5 +921,6 @@ echo
echo "Miscellaneous:"
echo " documentation: $enable_gtk_doc"
echo " tests: $enable_tests"
+echo " valgrind: $with_valgrind"
echo " code coverage: $enable_code_coverage"
echo
diff --git a/data/Makefile.am b/data/Makefile.am
index 71a390d5a..e91361a71 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -25,25 +25,38 @@ service_DATA = $(service_in_files:.service.in=.service)
$(service_DATA): $(service_in_files) Makefile
$(edit) $< >$@
+
+install-exec-local:
+ install -d $(DESTDIR)$(systemdsystemunitdir)/network-online.target.wants
+ ln -sf $(systemdsystemunitdir)/NetworkManager-wait-online.service $(DESTDIR)$(systemdsystemunitdir)/network-online.target.wants
endif
+examplesdir = $(docdir)/examples
+examples_DATA = server.conf
+
+server.conf: server.conf.in
+ $(edit) $< >$@
+
edit = sed \
-e 's|@bindir[@]|$(bindir)|g' \
-e 's|@sbindir[@]|$(sbindir)|g' \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
- -e 's|@libexecdir[@]|$(libexecdir)|g'
+ -e 's|@libexecdir[@]|$(libexecdir)|g' \
+ -e 's|@DISTRO_NETWORK_SERVICE[@]|$(DISTRO_NETWORK_SERVICE)|g'
EXTRA_DIST = \
NetworkManager.service.in \
NetworkManager-wait-online.service.in \
NetworkManager-wait-online-systemd-pre200.service.in \
NetworkManager-dispatcher.service.in \
- org.freedesktop.NetworkManager.service.in
+ org.freedesktop.NetworkManager.service.in \
+ server.conf.in
CLEANFILES = \
NetworkManager.service \
NetworkManager-wait-online.service \
NetworkManager-dispatcher.service \
- org.freedesktop.NetworkManager.service
+ org.freedesktop.NetworkManager.service \
+ server.conf
diff --git a/data/Makefile.in b/data/Makefile.in
index 9496a3aa2..7ff338dc7 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -81,7 +81,8 @@ host_triplet = @host@
subdir = data
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -145,9 +146,9 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(servicedir)" \
+am__installdirs = "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(servicedir)" \
"$(DESTDIR)$(systemdsystemunitdir)"
-DATA = $(service_DATA) $(systemdsystemunit_DATA)
+DATA = $(examples_DATA) $(service_DATA) $(systemdsystemunit_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
@@ -175,12 +176,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -205,7 +209,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -250,12 +253,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -272,6 +279,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -299,11 +308,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -318,6 +332,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -380,6 +395,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -390,6 +406,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@HAVE_SYSTEMD_TRUE@systemdsystemunit_DATA = \
@HAVE_SYSTEMD_TRUE@ NetworkManager.service \
@HAVE_SYSTEMD_TRUE@ NetworkManager-wait-online.service \
@@ -398,25 +415,30 @@ with_resolvconf = @with_resolvconf@
@HAVE_SYSTEMD_TRUE@servicedir = $(datadir)/dbus-1/system-services
@HAVE_SYSTEMD_TRUE@service_in_files = org.freedesktop.NetworkManager.service.in
@HAVE_SYSTEMD_TRUE@service_DATA = $(service_in_files:.service.in=.service)
+examplesdir = $(docdir)/examples
+examples_DATA = server.conf
edit = sed \
-e 's|@bindir[@]|$(bindir)|g' \
-e 's|@sbindir[@]|$(sbindir)|g' \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
- -e 's|@libexecdir[@]|$(libexecdir)|g'
+ -e 's|@libexecdir[@]|$(libexecdir)|g' \
+ -e 's|@DISTRO_NETWORK_SERVICE[@]|$(DISTRO_NETWORK_SERVICE)|g'
EXTRA_DIST = \
NetworkManager.service.in \
NetworkManager-wait-online.service.in \
NetworkManager-wait-online-systemd-pre200.service.in \
NetworkManager-dispatcher.service.in \
- org.freedesktop.NetworkManager.service.in
+ org.freedesktop.NetworkManager.service.in \
+ server.conf.in
CLEANFILES = \
NetworkManager.service \
NetworkManager-wait-online.service \
NetworkManager-dispatcher.service \
- org.freedesktop.NetworkManager.service
+ org.freedesktop.NetworkManager.service \
+ server.conf
all: all-am
@@ -457,6 +479,27 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-examplesDATA: $(examples_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(examplesdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(examplesdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(examplesdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(examplesdir)" || exit $$?; \
+ done
+
+uninstall-examplesDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(examplesdir)'; $(am__uninstall_files_from_dir)
install-serviceDATA: $(service_DATA)
@$(NORMAL_INSTALL)
@list='$(service_DATA)'; test -n "$(servicedir)" || list=; \
@@ -540,7 +583,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
- for dir in "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(systemdsystemunitdir)"; do \
+ for dir in "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(systemdsystemunitdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -574,6 +617,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+@HAVE_SYSTEMD_FALSE@install-exec-local:
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -594,13 +638,14 @@ info: info-am
info-am:
-install-data-am: install-serviceDATA install-systemdsystemunitDATA
+install-data-am: install-examplesDATA install-serviceDATA \
+ install-systemdsystemunitDATA
install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am:
+install-exec-am: install-exec-local
install-html: install-html-am
@@ -638,7 +683,8 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-serviceDATA uninstall-systemdsystemunitDATA
+uninstall-am: uninstall-examplesDATA uninstall-serviceDATA \
+ uninstall-systemdsystemunitDATA
.MAKE: install-am install-strip
@@ -646,15 +692,16 @@ uninstall-am: uninstall-serviceDATA uninstall-systemdsystemunitDATA
cscopelist-am ctags-am distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
+ install-dvi-am install-examplesDATA install-exec \
+ install-exec-am install-exec-local install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-serviceDATA install-strip \
install-systemdsystemunitDATA installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
- ps ps-am tags-am uninstall uninstall-am uninstall-serviceDATA \
- uninstall-systemdsystemunitDATA
+ ps ps-am tags-am uninstall uninstall-am uninstall-examplesDATA \
+ uninstall-serviceDATA uninstall-systemdsystemunitDATA
@HAVE_SYSTEMD_TRUE@NetworkManager.service: NetworkManager.service.in
@@ -671,6 +718,13 @@ uninstall-am: uninstall-serviceDATA uninstall-systemdsystemunitDATA
@HAVE_SYSTEMD_TRUE@$(service_DATA): $(service_in_files) Makefile
@HAVE_SYSTEMD_TRUE@ $(edit) $< >$@
+@HAVE_SYSTEMD_TRUE@install-exec-local:
+@HAVE_SYSTEMD_TRUE@ install -d $(DESTDIR)$(systemdsystemunitdir)/network-online.target.wants
+@HAVE_SYSTEMD_TRUE@ ln -sf $(systemdsystemunitdir)/NetworkManager-wait-online.service $(DESTDIR)$(systemdsystemunitdir)/network-online.target.wants
+
+server.conf: server.conf.in
+ $(edit) $< >$@
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/data/NetworkManager-dispatcher.service.in b/data/NetworkManager-dispatcher.service.in
index 442f67aaf..c450478ba 100644
--- a/data/NetworkManager-dispatcher.service.in
+++ b/data/NetworkManager-dispatcher.service.in
@@ -4,7 +4,11 @@ Description=Network Manager Script Dispatcher Service
[Service]
Type=dbus
BusName=org.freedesktop.nm_dispatcher
-ExecStart=@libexecdir@/nm-dispatcher.action
+ExecStart=@libexecdir@/nm-dispatcher
+
+# We want to allow scripts to spawn long-running daemons, so tell
+# systemd to not clean up when nm-dispatcher exits
+KillMode=process
[Install]
Alias=dbus-org.freedesktop.nm-dispatcher.service
diff --git a/data/NetworkManager-wait-online-systemd-pre200.service.in b/data/NetworkManager-wait-online-systemd-pre200.service.in
index fd9be418e..d145a79ff 100644
--- a/data/NetworkManager-wait-online-systemd-pre200.service.in
+++ b/data/NetworkManager-wait-online-systemd-pre200.service.in
@@ -7,7 +7,7 @@ Before=network.target
[Service]
Type=oneshot
-ExecStart=@bindir@/nm-online -q --timeout=30
+ExecStart=@bindir@/nm-online -s -q --timeout=30
[Install]
WantedBy=network.target
diff --git a/data/NetworkManager-wait-online.service.in b/data/NetworkManager-wait-online.service.in
index b81c5b023..6ad6942cc 100644
--- a/data/NetworkManager-wait-online.service.in
+++ b/data/NetworkManager-wait-online.service.in
@@ -7,7 +7,7 @@ Before=network.target network-online.target
[Service]
Type=oneshot
-ExecStart=@bindir@/nm-online -q --timeout=30
+ExecStart=@bindir@/nm-online -s -q --timeout=30
[Install]
WantedBy=multi-user.target
diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
index ddc162754..84a9c959c 100644
--- a/data/NetworkManager.service.in
+++ b/data/NetworkManager.service.in
@@ -1,16 +1,12 @@
[Unit]
Description=Network Manager
Wants=network.target
-Before=network.target
+Before=network.target @DISTRO_NETWORK_SERVICE@
[Service]
Type=dbus
BusName=org.freedesktop.NetworkManager
ExecStart=@sbindir@/NetworkManager --no-daemon
-# Suppress stderr to eliminate duplicated messages in syslog. NM calls openlog()
-# with LOG_PERROR when run in foreground. But systemd redirects stderr to
-# syslog by default, which results in logging each message twice.
-StandardError=null
# NM doesn't want systemd to kill its children for it
KillMode=process
diff --git a/data/server.conf.in b/data/server.conf.in
new file mode 100644
index 000000000..a63be5110
--- /dev/null
+++ b/data/server.conf.in
@@ -0,0 +1,16 @@
+# This configuration file, when placed into into
+# @sysconfdir@/NetworkManager/conf.d will change NetworkManager's
+# behavior to what's expected on "traditional UNIX server" type
+# deployments.
+#
+# See "man NetworkManager.conf" for more information about these
+# individual keys.
+
+[main]
+# Do not do automatic (DHCP/SLAAC) configuration on ethernet devices
+# with no other matching connections.
+no-auto-default=*
+
+# Ignore the carrier (cable plugged in) state when attempting to
+# activate static-IP connections.
+ignore-carrier=*
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 42046844f..f976adda1 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = docs
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -204,12 +205,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -234,7 +238,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -279,12 +282,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -301,6 +308,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -328,11 +337,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -347,6 +361,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -409,6 +424,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -419,6 +435,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = libnm-glib libnm-util api
all: all-recursive
diff --git a/docs/api/Makefile.in b/docs/api/Makefile.in
index 8681680c8..ed0643e3a 100644
--- a/docs/api/Makefile.in
+++ b/docs/api/Makefile.in
@@ -87,7 +87,8 @@ DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(srcdir)/version.xml.in
subdir = docs/api
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -151,12 +152,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -181,7 +185,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -226,12 +229,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -248,6 +255,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -275,11 +284,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -294,6 +308,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -356,6 +371,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -366,6 +382,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
AUTOMAKE_OPTIONS = 1.7
XSLTPROC = xsltproc --xinclude --nonet
XMLS = $(wildcard $(top_srcdir)/introspection/nm-*.xml)
@@ -440,14 +457,13 @@ REPORT_FILES = \
$(DOC_MODULE)-undeclared.txt \
$(DOC_MODULE)-unused.txt
-CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) \
- gtkdoc-check.test html/* tmpl/* xml/* \
- NetworkManager-sections.txt NetworkManager-overrides.txt \
- $(GENERATED_FILES)
-@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
-@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
-@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
-@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) html/* \
+ tmpl/* xml/* NetworkManager-sections.txt \
+ NetworkManager-overrides.txt $(GENERATED_FILES)
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
#### setup ####
GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_$(V))
@@ -568,7 +584,6 @@ distdir: $(DISTFILES)
dist-hook
check-am: all-am
check: check-am
-@ENABLE_GTK_DOC_FALSE@all-local:
all-am: Makefile all-local
installdirs:
install: install-am
@@ -700,15 +715,8 @@ uninstall-am: uninstall-local
# Top-level SGML file includes (depends on) settings-spec.xml
$(DOC_MAIN_SGML_FILE): settings-spec.xml
-gtkdoc-check.test: Makefile
- $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
- echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
- chmod +x $@
-
-all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
-.PHONY: all-gtk-doc
-
-@ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc
+@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+@ENABLE_GTK_DOC_FALSE@all-local:
docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
@@ -719,19 +727,17 @@ setup-build.stamp:
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
- destdir=`dirname $(abs_builddir)/$$file` ;\
- test -d "$$destdir" || mkdir -p "$$destdir"; \
test -f $(abs_srcdir)/$$file && \
- cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
test -d $(abs_srcdir)/tmpl && \
- { cp -pR $(abs_srcdir)/tmpl $(abs_builddir)/; \
+ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \
chmod -R u+w $(abs_builddir)/tmpl; } \
fi
$(AM_V_at)touch setup-build.stamp
-scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
$(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
@@ -761,7 +767,7 @@ tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DO
$(GTK_DOC_V_TMPL)gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
$(AM_V_at)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
if test -w $(abs_srcdir) ; then \
- cp -pR $(abs_builddir)/tmpl $(abs_srcdir)/; \
+ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \
fi \
fi
$(AM_V_at)touch tmpl-build.stamp
@@ -773,7 +779,7 @@ $(srcdir)/tmpl/*.sgml:
@true
sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
- -$(GTK_DOC_V_XML)chmod -R u+w $(srcdir) && _source_dir='' ; \
+ $(GTK_DOC_V_XML)-chmod -R u+w $(srcdir) && _source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
@@ -835,9 +841,6 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
clean-local:
@rm -f *~ *.bak
@rm -rf .libs
- @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
- rm -f $(DOC_MODULE).types; \
- fi
distclean-local:
@rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
@@ -883,14 +886,12 @@ uninstall-local:
#
# Require gtk-doc when making dist
#
-@HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
-@HAVE_GTK_DOC_FALSE@dist-check-gtkdoc:
-@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc is needed to run 'make dist'. ***"
-@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc was not found when 'configure' ran. ***"
-@HAVE_GTK_DOC_FALSE@ @echo "*** please install gtk-doc and rerun 'configure'. ***"
-@HAVE_GTK_DOC_FALSE@ @false
-
-dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
@mkdir $(distdir)/tmpl
@mkdir $(distdir)/html
@-cp ./tmpl/*.sgml $(distdir)/tmpl
diff --git a/docs/api/html/home.png b/docs/api/html/home.png
index 9346b336a..17003611d 100644
--- a/docs/api/html/home.png
+++ b/docs/api/html/home.png
Binary files differ
diff --git a/docs/api/html/index.html b/docs/api/html/index.html
index 778d86ae2..08c517de8 100644
--- a/docs/api/html/index.html
+++ b/docs/api/html/index.html
@@ -2,11 +2,11 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NetworkManager D-Bus Reference Manual: NetworkManager D-Bus Reference Manual</title>
+<title>NetworkManager D-Bus Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="next" href="ref-dbus.html" title="D-Bus API Reference">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -14,7 +14,7 @@
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">NetworkManager D-Bus Reference Manual</p></th></tr></table></div>
-<div><p class="releaseinfo">Version 0.9.8.10
+<div><p class="releaseinfo">Version 0.9.10.0
</p></div>
<div><p class="copyright">Copyright © 2012 The NetworkManager Authors</p></div>
<div><div class="legalnotice">
@@ -73,6 +73,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/api/html/ix01.html b/docs/api/html/ix01.html
index 31506c915..ae39f8505 100644
--- a/docs/api/html/ix01.html
+++ b/docs/api/html/ix01.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NetworkManager D-Bus Reference Manual: Index</title>
+<title>Index</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="up" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="prev" href="ref-migrating.html" title="Migrating from NetworkManager 0.8 to NetworkManager 0.9">
<link rel="next" href="license.html" title="Appendix A. License">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="ref-migrating.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="license.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ref-migrating.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">NetworkManager D-Bus Reference Manual</th>
+<td><a accesskey="n" href="license.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
@@ -26,6 +26,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/api/html/left-insensitive.png b/docs/api/html/left-insensitive.png
deleted file mode 100644
index 3269393a7..000000000
--- a/docs/api/html/left-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/api/html/left.png b/docs/api/html/left.png
index 2abde032b..2d05b3d5b 100644
--- a/docs/api/html/left.png
+++ b/docs/api/html/left.png
Binary files differ
diff --git a/docs/api/html/license.html b/docs/api/html/license.html
index 10c38b2ec..6cd55c467 100644
--- a/docs/api/html/license.html
+++ b/docs/api/html/license.html
@@ -2,21 +2,21 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NetworkManager D-Bus Reference Manual: Appendix A. License</title>
+<title>Appendix A. License</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="up" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="prev" href="ix01.html" title="Index">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="ix01.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ix01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">NetworkManager D-Bus Reference Manual</th>
+<td> </td>
</tr></table>
<div class="appendix">
<div class="titlepage"><div><div><h1 class="title">
@@ -380,6 +380,6 @@ Public License instead of this License.
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/api/html/ref-dbus.html b/docs/api/html/ref-dbus.html
index dff6d1c97..353bfa5b8 100644
--- a/docs/api/html/ref-dbus.html
+++ b/docs/api/html/ref-dbus.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NetworkManager D-Bus Reference Manual: D-Bus API Reference</title>
+<title>D-Bus API Reference</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="up" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="prev" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="next" href="ref-settings.html" title="Network Configuration Setting Specification">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="ref-settings.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">NetworkManager D-Bus Reference Manual</th>
+<td><a accesskey="n" href="ref-settings.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
@@ -30,6 +30,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/api/html/ref-migrating.html b/docs/api/html/ref-migrating.html
index 2ea302242..00545851b 100644
--- a/docs/api/html/ref-migrating.html
+++ b/docs/api/html/ref-migrating.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NetworkManager D-Bus Reference Manual: Migrating from NetworkManager 0.8 to NetworkManager 0.9</title>
+<title>Migrating from NetworkManager 0.8 to NetworkManager 0.9</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="up" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="prev" href="secrets-flags.html" title="Secret flag types">
<link rel="next" href="ix01.html" title="Index">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="secrets-flags.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="ix01.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="secrets-flags.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">NetworkManager D-Bus Reference Manual</th>
+<td><a accesskey="n" href="ix01.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
@@ -256,7 +256,7 @@
are now string-based permissions. The mapping is as follows:
</p>
<div class="table">
-<a name="id-1.4.3.7.3.2"></a><p class="title"><b>Table 23. </b></p>
+<a name="id-1.4.3.7.3.2"></a><p class="title"><b>Table 26. </b></p>
<div class="table-contents"><table border="1">
<colgroup>
<col>
@@ -424,7 +424,7 @@
following values:
</p>
<div class="table">
-<a name="id-1.4.3.13.2.1"></a><p class="title"><b>Table 24. </b></p>
+<a name="id-1.4.3.13.2.1"></a><p class="title"><b>Table 27. </b></p>
<div class="table-contents"><table border="1">
<colgroup>
<col>
@@ -496,7 +496,7 @@
their replacements:
</p>
<div class="table">
-<a name="id-1.4.3.14.2.2"></a><p class="title"><b>Table 25. </b></p>
+<a name="id-1.4.3.14.2.2"></a><p class="title"><b>Table 28. </b></p>
<div class="table-contents"><table border="1">
<colgroup>
<col>
@@ -536,6 +536,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/api/html/ref-settings.html b/docs/api/html/ref-settings.html
index b32f6b015..dbaf10d24 100644
--- a/docs/api/html/ref-settings.html
+++ b/docs/api/html/ref-settings.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NetworkManager D-Bus Reference Manual: Network Configuration Setting Specification</title>
+<title>Network Configuration Setting Specification</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="up" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="prev" href="ref-dbus.html" title="D-Bus API Reference">
<link rel="next" href="secrets-flags.html" title="Secret flag types">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="ref-dbus.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="secrets-flags.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ref-dbus.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">NetworkManager D-Bus Reference Manual</th>
+<td><a accesskey="n" href="secrets-flags.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
@@ -63,8 +63,8 @@
<tr>
<td><pre class="screen">eap</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: 'leap', 'md5', 'tls', 'peap', 'ttls', and 'fast'. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.</td>
+<td><pre class="screen"></pre></td>
+<td>The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: 'leap', 'md5', 'tls', 'peap', 'ttls', 'pwd', and 'fast'. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.</td>
</tr>
<tr>
<td><pre class="screen">identity</pre></td>
@@ -105,7 +105,7 @@
<tr>
<td><pre class="screen">altsubject-matches</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>List of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.</td>
</tr>
<tr>
@@ -165,7 +165,7 @@
<tr>
<td><pre class="screen">phase2-altsubject-matches</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>List of strings to be matched against List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner 'phase 2' authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.</td>
</tr>
<tr>
@@ -396,7 +396,7 @@
<tr>
<td><pre class="screen">options</pre></td>
<td><pre class="screen">dict of (string::string)</pre></td>
-<td><pre class="screen">[ ]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Dictionary of key/value pairs of bonding options. Both keys and values must be strings. Option names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).</td>
</tr>
</tbody>
@@ -433,6 +433,12 @@
<td>The name of the virtual in-kernel bridging network interface</td>
</tr>
<tr>
+<td><pre class="screen">mac-address</pre></td>
+<td><pre class="screen">byte array</pre></td>
+<td><pre class="screen">[]</pre></td>
+<td>The MAC address of the bridge</td>
+</tr>
+<tr>
<td><pre class="screen">stp</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">TRUE</pre></td>
@@ -466,7 +472,7 @@
<td><pre class="screen">ageing-time</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">300</pre></td>
-<td>The ethernet MAC address aging time, in seconds.</td>
+<td>The Ethernet MAC address aging time, in seconds.</td>
</tr>
</tbody>
</table></div>
@@ -601,7 +607,13 @@
<td><pre class="screen">uuid</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Universally unique connection identifier. Must be in the format '2815492f-7e56-435e-b2e9-246bd7cdc664' (ie, contains only hexadecimal characters and '-'). The UUID should be assigned when the connection is created and never changed as long as the connection still applies to the same network. For example, it should not be changed when the user changes the connection's 'id', but should be recreated when the WiFi SSID, mobile broadband network provider, or the connection type changes.</td>
+<td>Universally unique connection identifier. Must be in the format '2815492f-7e56-435e-b2e9-246bd7cdc664' (ie, contains only hexadecimal characters and '-'). The UUID should be assigned when the connection is created and never changed as long as the connection still applies to the same network. For example, it should not be changed when the user changes the connection's 'id', but should be recreated when the Wi-Fi SSID, mobile broadband network provider, or the connection type changes.</td>
+</tr>
+<tr>
+<td><pre class="screen">interface-name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Interface name this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.</td>
</tr>
<tr>
<td><pre class="screen">type</pre></td>
@@ -612,7 +624,7 @@
<tr>
<td><pre class="screen">permissions</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>An array of strings defining what access a given user has to this connection. If this is NULL or empty, all users are allowed to access this connection. Otherwise a user is allowed to access this connection if and only if they are in this array. Each entry is of the form "[type]:[id]:[reserved]", for example: "user:dcbw:blah" At this time only the 'user' [type] is allowed. Any other values are ignored and reserved for future use. [id] is the username that this permission refers to, which may not contain the ':' character. Any [reserved] information (if present) must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.</td>
</tr>
<tr>
@@ -625,7 +637,7 @@
<td><pre class="screen">timestamp</pre></td>
<td><pre class="screen">uint64</pre></td>
<td><pre class="screen">0</pre></td>
-<td>Timestamp (in seconds since the Unix Epoch) that the connection was last successfully activated. Settings services should update the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp.</td>
+<td>Timestamp (in seconds since the Unix Epoch) that the connection was last successfully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).</td>
</tr>
<tr>
<td><pre class="screen">read-only</pre></td>
@@ -654,8 +666,131 @@
<tr>
<td><pre class="screen">secondaries</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>List of connection UUIDs that should be activated when the base connection itself is activated.</td>
+<td><pre class="screen"></pre></td>
+<td>List of connection UUIDs that should be activated when the base connection itself is activated. Currently only VPN connections are supported.</td>
+</tr>
+<tr>
+<td><pre class="screen">gateway-ping-timeout</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p><br class="table-break">
+</p>
+<div class="table">
+<a name="id-1.3.3.2.9"></a><p class="title"><b>Table 9. dcb setting</b></p>
+<div class="table-contents"><table summary="dcb setting" border="1">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>Key Name</th>
+<th>Value Type</th>
+<th>Default Value</th>
+<th>Value Description</th>
+</tr></thead>
+<tbody>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">dcb</pre></td>
+<td>The setting's name; these names are defined by the specification and cannot be changed after the object has been created. Each setting class has a name, and all objects of that class share the same name.</td>
+</tr>
+<tr>
+<td><pre class="screen">app-fcoe-flags</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>Specifies the flags for the DCB FCoE application. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+</tr>
+<tr>
+<td><pre class="screen">app-fcoe-priority</pre></td>
+<td><pre class="screen">int32</pre></td>
+<td><pre class="screen">-1</pre></td>
+<td>The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the 'app-fcoe-flags' property includes the 'enabled' flag.</td>
+</tr>
+<tr>
+<td><pre class="screen">app-fcoe-mode</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">"fabric"</pre></td>
+<td>The FCoe controller mode; either 'fabric' (default) or 'vn2vn'.</td>
+</tr>
+<tr>
+<td><pre class="screen">app-iscsi-flags</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>Specifies the flags for the DCB iSCSI application. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+</tr>
+<tr>
+<td><pre class="screen">app-iscsi-priority</pre></td>
+<td><pre class="screen">int32</pre></td>
+<td><pre class="screen">-1</pre></td>
+<td>The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the 'app-iscsi-flags' property includes the 'enabled' flag.</td>
+</tr>
+<tr>
+<td><pre class="screen">app-fip-flags</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>Specifies the flags for the DCB FIP application. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+</tr>
+<tr>
+<td><pre class="screen">app-fip-priority</pre></td>
+<td><pre class="screen">int32</pre></td>
+<td><pre class="screen">-1</pre></td>
+<td>The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the 'app-fip-flags' property includes the 'enabled' flag.</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-flow-control-flags</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>Specifies the flags for DCB Priority Flow Control. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-flow-control</pre></td>
+<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen"></pre></td>
+<td>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause. Allowed values are 0 (do not transmit pause) and 1 (transmit pause).</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-group-flags</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>Specifies the flags for DCB Priority Groups. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-group-id</pre></td>
+<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen"></pre></td>
+<td>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group.</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-group-bandwidth</pre></td>
+<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen"></pre></td>
+<td>An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percent.</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-bandwidth</pre></td>
+<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen"></pre></td>
+<td>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percent.</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-strict-bandwidth</pre></td>
+<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen"></pre></td>
+<td>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group. Allowed values are 0 (the priority may not utilize all bandwidth) or 1 (the priority may utilize all bandwidth).</td>
+</tr>
+<tr>
+<td><pre class="screen">priority-traffic-class</pre></td>
+<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen"></pre></td>
+<td>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped.</td>
</tr>
</tbody>
</table></div>
@@ -663,7 +798,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.9"></a><p class="title"><b>Table 9. gsm setting</b></p>
+<a name="id-1.3.3.2.10"></a><p class="title"><b>Table 10. gsm setting</b></p>
<div class="table-contents"><table summary="gsm setting" border="1">
<colgroup>
<col>
@@ -724,7 +859,7 @@
<td><pre class="screen">network-type</pre></td>
<td><pre class="screen">int32</pre></td>
<td><pre class="screen">-1</pre></td>
-<td>Network preference to force the device to only use specific network technologies. The permitted values are: -1: any, 0: 3G only, 1: GPRS/EDGE only, 2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only. Note that not all devices allow network preference control.</td>
+<td>Network preference to force the device to only use specific network technologies. The permitted values are: -1: any, 0: 3G only, 1: GPRS/EDGE only, 2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only. Notes: This property is deprecated and NetworkManager from 0.9.10 onwards doesn't use this property when talking to ModemManager.Also, not all devices allow network preference control.</td>
</tr>
<tr>
<td><pre class="screen">pin</pre></td>
@@ -742,7 +877,7 @@
<td><pre class="screen">allowed-bands</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">1</pre></td>
-<td>Bitfield of allowed frequency bands. Note that not all devices allow frequency band control.</td>
+<td>Bitfield of allowed frequency bands.Notes: This property is deprecated and NetworkManager from 0.9.10 onwards doesn't use this property when talking to ModemManager.Also, not all devices allow frequency band control.</td>
</tr>
<tr>
<td><pre class="screen">home-only</pre></td>
@@ -756,7 +891,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.10"></a><p class="title"><b>Table 10. infiniband setting</b></p>
+<a name="id-1.3.3.2.11"></a><p class="title"><b>Table 11. infiniband setting</b></p>
<div class="table-contents"><table summary="infiniband setting" border="1">
<colgroup>
<col>
@@ -795,13 +930,25 @@
<td><pre class="screen"></pre></td>
<td>The IPoIB transport mode. Either 'datagram' or 'connected'.</td>
</tr>
+<tr>
+<td><pre class="screen">p-key</pre></td>
+<td><pre class="screen">int32</pre></td>
+<td><pre class="screen">-1</pre></td>
+<td>The InfiniBand P_Key. Either -1 for the default, or a 16-bit unsigned integer.</td>
+</tr>
+<tr>
+<td><pre class="screen">parent</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>The interface name of the parent device, or NULL</td>
+</tr>
</tbody>
</table></div>
</div>
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.11"></a><p class="title"><b>Table 11. ipv4 setting</b></p>
+<a name="id-1.3.3.2.12"></a><p class="title"><b>Table 12. ipv4 setting</b></p>
<div class="table-contents"><table summary="ipv4 setting" border="1">
<colgroup>
<col>
@@ -831,25 +978,31 @@
<tr>
<td><pre class="screen">dns</pre></td>
<td><pre class="screen">array of uint32</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>List of DNS servers (network byte order). For the 'auto' method, these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared', 'link-local', or 'disabled' methods as there is no upstream network. In all other methods, these DNS servers are used as the only DNS servers for this connection.</td>
</tr>
<tr>
<td><pre class="screen">dns-search</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>List of DNS search domains. For the 'auto' method, these search domains are appended to those returned by automatic configuration. Search domains cannot be used with the 'shared', 'link-local', or 'disabled' methods as there is no upstream network. In all other methods, these search domains are used as the only search domains for this connection.</td>
</tr>
<tr>
<td><pre class="screen">addresses</pre></td>
<td><pre class="screen">array of array of uint32</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet. For the 'auto' method, given IP addresses are appended to those returned by automatic configuration. Addresses cannot be used with the 'shared', 'link-local', or 'disabled' methods as addressing is either automatic or disabled with these methods.</td>
</tr>
<tr>
+<td><pre class="screen">address-labels</pre></td>
+<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Internal use only</td>
+</tr>
+<tr>
<td><pre class="screen">routes</pre></td>
<td><pre class="screen">array of array of uint32</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Array of IPv4 route structures. Each IPv4 route structure is composed of 4 32-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 - 32), the third being the next-hop (network byte order) if any, and the fourth being the route metric. For the 'auto' method, given IP routes are appended to those returned by automatic configuration. Routes cannot be used with the 'shared', 'link-local', or 'disabled', methods as there is no upstream network.</td>
</tr>
<tr>
@@ -900,7 +1053,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.12"></a><p class="title"><b>Table 12. ipv6 setting</b></p>
+<a name="id-1.3.3.2.13"></a><p class="title"><b>Table 13. ipv6 setting</b></p>
<div class="table-contents"><table summary="ipv6 setting" border="1">
<colgroup>
<col>
@@ -925,7 +1078,7 @@
<td><pre class="screen">method</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>IPv6 configuration method. If 'auto' is specified then the appropriate automatic method (PPP, router advertisement, etc) is used for the device and most other properties can be left unset. To force the use of DHCP only, specify 'dhcp'; this method is only valid for ethernet-based hardware. If 'link-local' is specified, then an IPv6 link-local address will be assigned to the interface. If 'manual' is specified, static IP addressing is used and at least one IP address must be given in the 'addresses' property. If 'ignore' is specified, IPv6 configuration is not done. This property must be set. NOTE: the 'shared' methodis not yet supported.</td>
+<td>IPv6 configuration method. If 'auto' is specified then the appropriate automatic method (PPP, router advertisement, etc) is used for the device and most other properties can be left unset. To force the use of DHCP only, specify 'dhcp'; this method is only valid for Ethernet-based hardware. If 'link-local' is specified, then an IPv6 link-local address will be assigned to the interface. If 'manual' is specified, static IP addressing is used and at least one IP address must be given in the 'addresses' property. If 'ignore' is specified, IPv6 configuration is not done. This property must be set. Note: the 'shared' method is not yet supported.</td>
</tr>
<tr>
<td><pre class="screen">dhcp-hostname</pre></td>
@@ -936,25 +1089,25 @@
<tr>
<td><pre class="screen">dns</pre></td>
<td><pre class="screen">array of byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Array of DNS servers, where each member of the array is a byte array containing the IPv6 address of the DNS server (in network byte order). For the 'auto' method, these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared' or 'link-local' methods as there is no usptream network. In all other methods, these DNS servers are used as the only DNS servers for this connection.</td>
</tr>
<tr>
<td><pre class="screen">dns-search</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>List of DNS search domains. For the 'auto' method, these search domains are appended to those returned by automatic configuration. Search domains cannot be used with the 'shared' or 'link-local' methods as there is no upstream network. In all other methods, these search domains are used as the only search domains for this connection.</td>
</tr>
<tr>
<td><pre class="screen">addresses</pre></td>
<td><pre class="screen">array of (byte array, uint32, byte array)</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Array of IPv6 address structures. Each IPv6 address structure is composed of 3 members, the first being a byte array containing the IPv6 address (network byte order), the second a 32-bit integer containing the IPv6 address prefix, and the third a byte array containing the IPv6 address (network byte order) of the gateway associated with this address, if any. If no gateway is given, the third element should be given as all zeros. For the 'auto' method, given IP addresses are appended to those returned by automatic configuration. Addresses cannot be used with the 'shared' or 'link-local' methods as the interface is automatically assigned an address with these methods.</td>
</tr>
<tr>
<td><pre class="screen">routes</pre></td>
<td><pre class="screen">array of (byte array, uint32, byte array, uint32)</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Array of IPv6 route structures. Each IPv6 route structure is composed of 4 members; the first being the destination IPv6 network or address (network byte order) as a byte array, the second the destination network or address IPv6 prefix, the third being the next-hop IPv6 address (network byte order) if any, and the fourth being the route metric. For the 'auto' method, given IP routes are appended to those returned by automatic configuration. Routes cannot be used with the 'shared' or 'link-local' methods because there is no upstream network.</td>
</tr>
<tr>
@@ -993,7 +1146,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.13"></a><p class="title"><b>Table 13. 802-11-olpc-mesh setting</b></p>
+<a name="id-1.3.3.2.14"></a><p class="title"><b>Table 14. 802-11-olpc-mesh setting</b></p>
<div class="table-contents"><table summary="802-11-olpc-mesh setting" border="1">
<colgroup>
<col>
@@ -1038,7 +1191,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.14"></a><p class="title"><b>Table 14. ppp setting</b></p>
+<a name="id-1.3.3.2.15"></a><p class="title"><b>Table 15. ppp setting</b></p>
<div class="table-contents"><table summary="ppp setting" border="1">
<colgroup>
<col>
@@ -1173,7 +1326,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.15"></a><p class="title"><b>Table 15. pppoe setting</b></p>
+<a name="id-1.3.3.2.16"></a><p class="title"><b>Table 16. pppoe setting</b></p>
<div class="table-contents"><table summary="pppoe setting" border="1">
<colgroup>
<col>
@@ -1198,7 +1351,7 @@
<td><pre class="screen">service</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified serivce. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.</td>
+<td>If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.</td>
</tr>
<tr>
<td><pre class="screen">username</pre></td>
@@ -1224,7 +1377,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.16"></a><p class="title"><b>Table 16. serial setting</b></p>
+<a name="id-1.3.3.2.17"></a><p class="title"><b>Table 17. serial setting</b></p>
<div class="table-contents"><table summary="serial setting" border="1">
<colgroup>
<col>
@@ -1281,7 +1434,79 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.17"></a><p class="title"><b>Table 17. vlan setting</b></p>
+<a name="id-1.3.3.2.18"></a><p class="title"><b>Table 18. team setting</b></p>
+<div class="table-contents"><table summary="team setting" border="1">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>Key Name</th>
+<th>Value Type</th>
+<th>Default Value</th>
+<th>Value Description</th>
+</tr></thead>
+<tbody>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">team</pre></td>
+<td>The setting's name; these names are defined by the specification and cannot be changed after the object has been created. Each setting class has a name, and all objects of that class share the same name.</td>
+</tr>
+<tr>
+<td><pre class="screen">interface-name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>The name of the virtual in-kernel team network interface</td>
+</tr>
+<tr>
+<td><pre class="screen">config</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>JSON configuration for the team network interface. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p><br class="table-break">
+</p>
+<div class="table">
+<a name="id-1.3.3.2.19"></a><p class="title"><b>Table 19. team-port setting</b></p>
+<div class="table-contents"><table summary="team-port setting" border="1">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>Key Name</th>
+<th>Value Type</th>
+<th>Default Value</th>
+<th>Value Description</th>
+</tr></thead>
+<tbody>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">team-port</pre></td>
+<td>The setting's name; these names are defined by the specification and cannot be changed after the object has been created. Each setting class has a name, and all objects of that class share the same name.</td>
+</tr>
+<tr>
+<td><pre class="screen">config</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>JSON configuration for the team port. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the dafault configuration is used. See man teamd.conf for the format details.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p><br class="table-break">
+</p>
+<div class="table">
+<a name="id-1.3.3.2.20"></a><p class="title"><b>Table 20. vlan setting</b></p>
<div class="table-contents"><table summary="vlan setting" border="1">
<colgroup>
<col>
@@ -1306,13 +1531,13 @@
<td><pre class="screen">interface-name</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>If given, specifies the kernel name of the VLAN interface. If not given, a default name will be constructed from the interface described by the parent interface and the 'id' property, ex 'eth2.1'. The parent interface may be given by the 'parent' property or by a hardware address property, eg the 'wired' settings' 'mac-address' property.</td>
+<td>If given, specifies the kernel name of the VLAN interface. If not given, a default name will be constructed from the interface described by the parent interface and the 'id' property, ex 'eth2.1'. The parent interface may be given by the 'parent' property or by the 'mac-address' property of a 'wired' setting.</td>
</tr>
<tr>
<td><pre class="screen">parent</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain a hardware address in a hardware-specific setting, like the 'wired' settings' 'mac-address' property.</td>
+<td>If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain a 'wired' setting with a 'mac-address' property.</td>
</tr>
<tr>
<td><pre class="screen">id</pre></td>
@@ -1329,13 +1554,13 @@
<tr>
<td><pre class="screen">ingress-priority-map</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format 'from:to' where both 'from' and 'to' are unsigned integers, ie '7:3'.</td>
</tr>
<tr>
<td><pre class="screen">egress-priority-map</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format 'from:to' where both 'from' and 'to' are unsigned integers, ie '7:3'.</td>
</tr>
</tbody>
@@ -1344,7 +1569,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.18"></a><p class="title"><b>Table 18. vpn setting</b></p>
+<a name="id-1.3.3.2.21"></a><p class="title"><b>Table 21. vpn setting</b></p>
<div class="table-contents"><table summary="vpn setting" border="1">
<colgroup>
<col>
@@ -1380,13 +1605,13 @@
<tr>
<td><pre class="screen">data</pre></td>
<td><pre class="screen">dict of (string::string)</pre></td>
-<td><pre class="screen">[ ]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.</td>
</tr>
<tr>
<td><pre class="screen">secrets</pre></td>
<td><pre class="screen">dict of (string::string)</pre></td>
-<td><pre class="screen">[ ]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings.</td>
</tr>
</tbody>
@@ -1395,7 +1620,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.19"></a><p class="title"><b>Table 19. wimax setting</b></p>
+<a name="id-1.3.3.2.22"></a><p class="title"><b>Table 22. wimax setting</b></p>
<div class="table-contents"><table summary="wimax setting" border="1">
<colgroup>
<col>
@@ -1434,7 +1659,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.20"></a><p class="title"><b>Table 20. 802-3-ethernet setting</b></p>
+<a name="id-1.3.3.2.23"></a><p class="title"><b>Table 23. 802-3-ethernet setting</b></p>
<div class="table-contents"><table summary="802-3-ethernet setting" border="1">
<colgroup>
<col>
@@ -1483,7 +1708,7 @@
<td><pre class="screen">mac-address</pre></td>
<td><pre class="screen">byte array</pre></td>
<td><pre class="screen">[]</pre></td>
-<td>If specified, this connection will only apply to the ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</td>
+<td>If specified, this connection will only apply to the Ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</td>
</tr>
<tr>
<td><pre class="screen">cloned-mac-address</pre></td>
@@ -1494,8 +1719,8 @@
<tr>
<td><pre class="screen">mac-address-blacklist</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>If specified, this connection will never apply to the ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).</td>
+<td><pre class="screen"></pre></td>
+<td>If specified, this connection will never apply to the Ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).</td>
</tr>
<tr>
<td><pre class="screen">mtu</pre></td>
@@ -1506,7 +1731,7 @@
<tr>
<td><pre class="screen">s390-subchannels</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Identifies specific subchannels that this network device uses for communcation with z/VM or s390 host. Like the 'mac-address' property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.</td>
</tr>
<tr>
@@ -1518,7 +1743,7 @@
<tr>
<td><pre class="screen">s390-options</pre></td>
<td><pre class="screen">dict of (string::string)</pre></td>
-<td><pre class="screen">[ ]</pre></td>
+<td><pre class="screen"></pre></td>
<td>Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include 'portno', 'layer2', 'portname', 'protocol', among others.</td>
</tr>
</tbody>
@@ -1527,7 +1752,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.21"></a><p class="title"><b>Table 21. 802-11-wireless setting</b></p>
+<a name="id-1.3.3.2.24"></a><p class="title"><b>Table 24. 802-11-wireless setting</b></p>
<div class="table-contents"><table summary="802-11-wireless setting" border="1">
<colgroup>
<col>
@@ -1552,25 +1777,25 @@
<td><pre class="screen">ssid</pre></td>
<td><pre class="screen">byte array</pre></td>
<td><pre class="screen">[]</pre></td>
-<td>SSID of the WiFi network. Must be specified.</td>
+<td>SSID of the Wi-Fi network. Must be specified.</td>
</tr>
<tr>
<td><pre class="screen">mode</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>WiFi network mode; one of 'infrastructure', 'adhoc' or 'ap'. If blank, infrastructure is assumed.</td>
+<td>Wi-Fi network mode; one of 'infrastructure', 'adhoc' or 'ap'. If blank, infrastructure is assumed.</td>
</tr>
<tr>
<td><pre class="screen">band</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>802.11 frequency band of the network. One of 'a' for 5GHz 802.11a or 'bg' for 2.4GHz 802.11. This will lock associations to the WiFi network to the specific band, i.e. if 'a' is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.</td>
+<td>802.11 frequency band of the network. One of 'a' for 5GHz 802.11a or 'bg' for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if 'a' is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.</td>
</tr>
<tr>
<td><pre class="screen">channel</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">0</pre></td>
-<td>Wireless channel to use for the WiFi connection. The device will only join (or create for Ad-Hoc networks) a WiFi network on the specified channel. Because channel numbers overlap between bands, this property also requires the 'band' property to be set.</td>
+<td>Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the 'band' property to be set.</td>
</tr>
<tr>
<td><pre class="screen">bssid</pre></td>
@@ -1594,18 +1819,18 @@
<td><pre class="screen">mac-address</pre></td>
<td><pre class="screen">byte array</pre></td>
<td><pre class="screen">[]</pre></td>
-<td>If specified, this connection will only apply to the WiFi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</td>
+<td>If specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</td>
</tr>
<tr>
<td><pre class="screen">cloned-mac-address</pre></td>
<td><pre class="screen">byte array</pre></td>
<td><pre class="screen">[]</pre></td>
-<td>If specified, request that the WiFi device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</td>
+<td>If specified, request that the Wi-Fi device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</td>
</tr>
<tr>
<td><pre class="screen">mac-address-blacklist</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>A list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg '00:11:22:33:44:55').</td>
</tr>
<tr>
@@ -1617,8 +1842,8 @@
<tr>
<td><pre class="screen">seen-bssids</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55') that have been detected as part of the WiFI network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BBSID list of NetworkManager. The changes you make to this property will not be preserved.</td>
+<td><pre class="screen"></pre></td>
+<td>A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55') that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved.</td>
</tr>
<tr>
<td><pre class="screen">security</pre></td>
@@ -1638,7 +1863,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id-1.3.3.2.22"></a><p class="title"><b>Table 22. 802-11-wireless-security setting</b></p>
+<a name="id-1.3.3.2.25"></a><p class="title"><b>Table 25. 802-11-wireless-security setting</b></p>
<div class="table-contents"><table summary="802-11-wireless-security setting" border="1">
<colgroup>
<col>
@@ -1663,7 +1888,7 @@
<td><pre class="screen">key-mgmt</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Key management used for the connection. One of 'none' (WEP), 'ieee8021x' (Dynamic WEP), 'wpa-none' (WPA-PSK Ad-Hoc), 'wpa-psk' (infrastructure WPA-PSK), or 'wpa-eap' (WPA-Enterprise). This property must be set for any WiFi connection that uses security.</td>
+<td>Key management used for the connection. One of 'none' (WEP), 'ieee8021x' (Dynamic WEP), 'wpa-none' (WPA-PSK Ad-Hoc), 'wpa-psk' (infrastructure WPA-PSK), or 'wpa-eap' (WPA-Enterprise). This property must be set for any Wi-Fi connection that uses security.</td>
</tr>
<tr>
<td><pre class="screen">wep-tx-keyidx</pre></td>
@@ -1680,19 +1905,19 @@
<tr>
<td><pre class="screen">proto</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>List of strings specifying the allowed WPA protocol versions to use. Each element may be one 'wpa' (allow WPA) or 'rsn' (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed.</td>
</tr>
<tr>
<td><pre class="screen">pairwise</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'wep40', 'wep104', 'tkip' or 'ccmp'.</td>
+<td><pre class="screen"></pre></td>
+<td>A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'tkip' or 'ccmp'.</td>
</tr>
<tr>
<td><pre class="screen">group</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen">[]</pre></td>
+<td><pre class="screen"></pre></td>
<td>A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'wep40', 'wep104', 'tkip', or 'ccmp'.</td>
</tr>
<tr>
@@ -1741,7 +1966,7 @@
<td><pre class="screen">psk</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Pre-Shared-Key for WPA networks. If the key is 64-characters long, it must contain only hexadecimal characters and is interpreted as a hexadecimal WPA key. Otherwise, the key must be between 8 and 63 ASCII characters (as specified in the 802.11i standard) and is interpreted as a WPA passphrase, and is hashed to derive the actual WPA-PSK used when connecting to the WiFi network.</td>
+<td>Pre-Shared-Key for WPA networks. If the key is 64-characters long, it must contain only hexadecimal characters and is interpreted as a hexadecimal WPA key. Otherwise, the key must be between 8 and 63 ASCII characters (as specified in the 802.11i standard) and is interpreted as a WPA passphrase, and is hashed to derive the actual WPA-PSK used when connecting to the Wi-Fi network.</td>
</tr>
<tr>
<td><pre class="screen">psk-flags</pre></td>
@@ -1770,6 +1995,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/api/html/right-insensitive.png b/docs/api/html/right-insensitive.png
deleted file mode 100644
index 4c95785b9..000000000
--- a/docs/api/html/right-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/api/html/right.png b/docs/api/html/right.png
index 76260ec88..92832e3a4 100644
--- a/docs/api/html/right.png
+++ b/docs/api/html/right.png
Binary files differ
diff --git a/docs/api/html/secrets-flags.html b/docs/api/html/secrets-flags.html
index 91d40d5de..4948a0a42 100644
--- a/docs/api/html/secrets-flags.html
+++ b/docs/api/html/secrets-flags.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NetworkManager D-Bus Reference Manual: Secret flag types</title>
+<title>Secret flag types</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="NetworkManager D-Bus Reference Manual">
<link rel="up" href="ref-settings.html" title="Network Configuration Setting Specification">
<link rel="prev" href="ref-settings.html" title="Network Configuration Setting Specification">
<link rel="next" href="ref-migrating.html" title="Migrating from NetworkManager 0.8 to NetworkManager 0.9">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ref-settings.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="ref-settings.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="ref-migrating.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ref-settings.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ref-settings.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">NetworkManager D-Bus Reference Manual</th>
+<td><a accesskey="n" href="ref-migrating.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -59,6 +59,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/api/html/spec.html b/docs/api/html/spec.html
index 0573bc4fa..84819cabc 100644
--- a/docs/api/html/spec.html
+++ b/docs/api/html/spec.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.8.10</title><style type="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.10.0</title><style type="text/css">
body {
font-family: sans-serif;
@@ -97,7 +97,7 @@
margin-right: 4em;
}
- </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.8.10</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
+ </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.10.0</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
<p>This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
@@ -111,7 +111,7 @@ General Public License for more details.</p>
<p>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.</p>
-</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
+</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Team">org.freedesktop.NetworkManager.Device.Team</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Generic">org.freedesktop.NetworkManager.Device.Generic</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
<h1><a name="org.freedesktop.NetworkManager" id="org.freedesktop.NetworkManager"></a>org.freedesktop.NetworkManager</h1><h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.GetDevices" id="org.freedesktop.NetworkManager.GetDevices">GetDevices</a> (
) &#8594;
@@ -140,17 +140,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Activate a connection using the supplied device.
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>o</code></dt><dd>
- The connection to activate the devices with.
+ The connection to activate. If "/" is given, a valid device path must
+ be given, and NetworkManager picks the best connection to activate for
+ the given device. VPN connections must always pass a valid connection
+ path.
</dd><dt><code>device</code> -
<code>o</code></dt><dd>
- The object path of device to be activated for physical connections. This parameter is ignored for VPN connections, because the specific_object (if provided) specifies the device to use.
+ The object path of device to be activated for physical connections.
+ This parameter is ignored for VPN connections, because the
+ specific_object (if provided) specifies the device to use.
</dd><dt><code>specific_object</code> -
<code>o</code></dt><dd>
The path of a connection-type-specific object this activation should use.
This parameter is currently ignored for wired and mobile broadband connections,
and the value of "/" should be used (ie, no specific object). For WiFi
connections, pass the object path of a specific AP from the card's scan
- list, or "/" to pick and AP automatically. For VPN connections, pass
+ list, or "/" to pick an AP automatically. For VPN connections, pass
the object path of an ActiveConnection object that should serve as the
"base" connection (to which the VPN connections lifetime will be tied),
or pass "/" and NM will automatically use the current default device.
@@ -254,13 +259,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<code>s</code></dt><dd>
A combination of logging domains separated by commas (','), or "NONE"
to disable logging. Each domain enables logging for operations
- related to that domain. Available domains are: [HW, RFKILL, ETHER,
+ related to that domain. Available domains are: [PLATFORM, RFKILL, ETHER,
WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS,
VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE,
- OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN]. In addition to
- these domains, the following special domains can be used: [NONE, ALL,
- DEFAULT, DHCP, IP]. If an empty string is given, the log level is
- changed but the current set of log domains remains unchanged.
+ OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN, BRIDGE, DBUS_PROPS,
+ TEAM, CONCHECK, DCB, DISPATCH].
+ In addition to these domains, the following special domains can be used:
+ [NONE, ALL, DEFAULT, DHCP, IP]. You can also specify that some domains
+ should log at a different level from the default by appending a colon (':')
+ and a log level (eg, 'WIFI:DEBUG'). If an empty string is given, the
+ log level is changed but the current set of log domains remains
+ unchanged.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.GetLogging" id="org.freedesktop.NetworkManager.GetLogging">GetLogging</a> (
) &#8594;
@@ -328,7 +337,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>device_path</code> -
<code>o</code></dt><dd>
The object path of the device that was just removed.
- </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>NetworkingEnabled</code> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Devices</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ The list of network devices/interfaces NetworkManager knows about.
+ </dd><dt><code>NetworkingEnabled</code> -
<code>b</code> -
<code>(read)</code></dt><dd>
Indicates if overall networking is currently enabled or not. See the
@@ -376,6 +389,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
The object path of an active connection that is currently
being activated and which is expected to become the new
PrimaryConnection when it finishes activating.
+ </dd><dt><code>Startup</code> -
+ <code>b</code> -
+ <code>(read)</code></dt><dd>
+ Indicates whether NM is still starting up; this becomes FALSE
+ when NM has finished attempting to activate every connection
+ that it might be able to activate at startup.
</dd><dt><code>Version</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
@@ -534,9 +553,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dt><dd>
Flags describing the capabilities of the device.
</dd><dt><code>Ip4Address</code> -
- <code>i</code> -
+ <code>u</code> -
<code>(read)</code></dt><dd>
- The IPv4 address bound to the device. FIXME: what about devices with &gt;1 IP address?
+ DEPRECATED; use the 'Addresses' property of the 'Ip4Config' object instead.
</dd><dt><code>State</code> -
<code>u</code> -
<code>(read)</code>
@@ -600,6 +619,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<code>ao</code> -
<code>(read)</code></dt><dd>
An array of object paths of every configured connection that is currently 'available' through this device.
+ </dd><dt><code>PhysicalPortId</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ If non-empty, an (opaque) indicator of the physical network
+ port associated with the device. This can be used to recognize
+ when two seemingly-separate hardware devices are actually just
+ different virtual interfaces to the same physical port.
+ </dd><dt><code>Mtu</code> -
+ <code>u</code> -
+ <code>(read)</code></dt><dd>
+ The device MTU (maximum transmission unit).
</dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_DEVICE_STATE" id="type-NM_DEVICE_STATE">NM_DEVICE_STATE</a></h3><dl><dt><code>NM_DEVICE_STATE_UNKNOWN = 0</code></dt><dd>
The device is in an unknown state.
</dd><dt><code>NM_DEVICE_STATE_UNMANAGED = 10</code></dt><dd>
@@ -652,6 +682,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
The device is an ADSL device supporting PPPoE and PPPoATM protocols.
</dd><dt><code>NM_DEVICE_TYPE_BRIDGE = 13</code></dt><dd>
The device is a bridge interface.
+ </dd><dt><code>NM_DEVICE_TYPE_GENERIC = 14</code></dt><dd>
+ The device is a generic interface type unrecognized by NetworkManager.
+ </dd><dt><code>NM_DEVICE_TYPE_TEAM = 15</code></dt><dd>
+ The device is a team master interface.
</dd></dl><h3><a name="type-NM_DEVICE_STATE_REASON" id="type-NM_DEVICE_STATE_REASON">NM_DEVICE_STATE_REASON</a></h3><dl><dt><code>NM_DEVICE_STATE_REASON_UNKNOWN = 0</code></dt><dd>
The reason for the device state change is unknown.
</dd><dt><code>NM_DEVICE_STATE_REASON_NONE = 1</code></dt><dd>
@@ -762,6 +796,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
The 802.11 Wi-Fi network could not be found.
</dd><dt><code>NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54</code></dt><dd>
A secondary connection of the base connection failed.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55</code></dt><dd>
+ DCB or FCoE setup failed.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56</code></dt><dd>
+ teamd control failed.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_MODEM_FAILED = 57</code></dt><dd>
+ Modem failed or no longer available.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58</code></dt><dd>
+ Modem now ready and available.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59</code></dt><dd>
+ The SIM PIN was incorrect.
</dd></dl><h2>Sets of flags:</h2><h3 xmlns=""><a name="type-NM_DEVICE_CAP" id="type-NM_DEVICE_CAP">NM_DEVICE_CAP</a></h3><dl><dt><code>NM_DEVICE_CAP_NONE = 0x0</code></dt><dd>Null capability.</dd><dt><code>NM_DEVICE_CAP_NM_SUPPORTED = 0x1</code></dt><dd>The device is supported by NetworkManager.</dd><dt><code>NM_DEVICE_CAP_CARRIER_DETECT = 0x2</code></dt><dd>The device supports carrier detection.</dd></dl><h2>Structure types:</h2><div class="struct"><h3><a name="type-NM_DEVICE_STATE_REASON_STRUCT" id="type-NM_DEVICE_STATE_REASON_STRUCT">NM_DEVICE_STATE_REASON_STRUCT</a> - (
u: state, u: reason
)
@@ -807,10 +851,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
) &#8594;
ao</h3><div class="docstring">
- Get the list of access points visible to this device.
+ DEPRECATED. Get the list of access points visible to this device. Note
+ that this list does not include access points which hide their SSID. To
+ retrieve a list of all access points (including hidden ones) use the
+ GetAllAccessPoints() method.
+ </div><div><h4>Returns</h4><dl><dt><code>access_points</code> -
+ <code>ao</code></dt><dd>
+ List of access point object paths.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Device.Wireless.GetAllAccessPoints" id="org.freedesktop.NetworkManager.Device.Wireless.GetAllAccessPoints">GetAllAccessPoints</a> (
+
+ ) &#8594;
+ ao</h3><div class="docstring">
+ Get the list of all access points visible to this device, including
+ hidden ones for which the SSID is not yet known.
</div><div><h4>Returns</h4><dl><dt><code>access_points</code> -
<code>ao</code></dt><dd>
- List of access point object paths
+ List of access point object paths.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Device.Wireless.RequestScan" id="org.freedesktop.NetworkManager.Device.Wireless.RequestScan">RequestScan</a> (
a{sv}: options
) &#8594;
@@ -860,6 +916,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<code>u</code> -
<code>(read)</code></dt><dd>
The bit rate currently used by the wireless device, in kilobits/second (Kb/s).
+ </dd><dt><code>AccessPoints</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ List of object paths of access point visible to this wireless device.
</dd><dt><code>ActiveAccessPoint</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
@@ -992,7 +1052,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>nsp</code> -
<code>o</code></dt><dd>
The object path of the NSP that has disappeared.
- </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>HwAddress</code> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Nsps</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ List of object paths of Network Service Providers (NSPs) visible to this
+ WiMAX device.
+ </dd><dt><code>HwAddress</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
Hardware address of the device.
@@ -1093,6 +1158,45 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
slaved to this device.
</dd></dl>
+ <h1><a name="org.freedesktop.NetworkManager.Device.Team" id="org.freedesktop.NetworkManager.Device.Team"></a>org.freedesktop.NetworkManager.Device.Team</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.Team.PropertiesChanged" id="org.freedesktop.NetworkManager.Device.Team.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>HwAddress</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ Hardware address of the device.
+ </dd><dt><code>Carrier</code> -
+ <code>b</code> -
+ <code>(read)</code></dt><dd>
+ Indicates whether the physical carrier is found (e.g. whether a cable is plugged in or not).
+ </dd><dt><code>Slaves</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ Array of object paths representing devices which are currently
+ slaved to this device.
+ </dd></dl>
+
+ <h1><a name="org.freedesktop.NetworkManager.Device.Generic" id="org.freedesktop.NetworkManager.Device.Generic"></a>org.freedesktop.NetworkManager.Device.Generic</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.Generic.PropertiesChanged" id="org.freedesktop.NetworkManager.Device.Generic.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>HwAddress</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ Hardware address of the device.
+ </dd><dt><code>TypeDescription</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ A (non-localized) description of the interface type, if known.
+ </dd></dl>
+
<h1><a name="org.freedesktop.NetworkManager.Device.Vlan" id="org.freedesktop.NetworkManager.Device.Vlan"></a>org.freedesktop.NetworkManager.Device.Vlan</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.Vlan.PropertiesChanged" id="org.freedesktop.NetworkManager.Device.Vlan.PropertiesChanged">PropertiesChanged</a> (
a{sv}: properties
)</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
@@ -1146,34 +1250,56 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Network type of the NSP.
<dl><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN = 0x0</code></dt><dd>Unknown network.</dd><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_HOME = 0x1</code></dt><dd>Home network.</dd><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_PARTNER = 0x2</code></dt><dd>Partner network.</dd><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER = 0x3</code></dt><dd>Roaming partner network.</dd></dl>
- <h1><a name="org.freedesktop.NetworkManager.IP4Config" id="org.freedesktop.NetworkManager.IP4Config"></a>org.freedesktop.NetworkManager.IP4Config</h1><p>Interface has no methods.</p><p>Interface has no signals.</p><h2>Properties:</h2><dl><dt><code>Addresses</code> -
+ <h1><a name="org.freedesktop.NetworkManager.IP4Config" id="org.freedesktop.NetworkManager.IP4Config"></a>org.freedesktop.NetworkManager.IP4Config</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.IP4Config.PropertiesChanged" id="org.freedesktop.NetworkManager.IP4Config.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</dd><dt><code>Addresses</code> -
<code>aau</code> -
<code>(read)</code></dt><dd>Array of tuples of IPv4 address/prefix/gateway. All 3
elements of each tuple are in network byte order. Essentially:
[(addr, prefix, gateway), (addr, prefix, gateway), ...]
- </dd><dt><code>Nameservers</code> -
- <code>au</code> -
- <code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>WinsServers</code> -
- <code>au</code> -
- <code>(read)</code></dt><dd>The Windows Internet Name Service servers associated with the connection. Each address is in network byte order.</dd><dt><code>Domains</code> -
- <code>as</code> -
- <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Routes</code> -
+ </dd><dt><code>Routes</code> -
<code>aau</code> -
<code>(read)</code></dt><dd>Tuples of IPv4 route/prefix/next-hop/metric. All 4 elements
of each tuple are in network byte order. 'route' and 'next hop' are IPv4
addresses, while prefix and metric are simple unsigned integers. Essentially:
[(route, prefix, next-hop, metric), (route, prefix, next-hop, metric), ...]
- </dd></dl>
+ </dd><dt><code>Nameservers</code> -
+ <code>au</code> -
+ <code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>Domains</code> -
+ <code>as</code> -
+ <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Searches</code> -
+ <code>as</code> -
+ <code>(read)</code></dt><dd>A list of dns searches.</dd><dt><code>WinsServers</code> -
+ <code>au</code> -
+ <code>(read)</code></dt><dd>The Windows Internet Name Service servers associated with the connection. Each address is in network byte order.</dd></dl>
- <h1><a name="org.freedesktop.NetworkManager.IP6Config" id="org.freedesktop.NetworkManager.IP6Config"></a>org.freedesktop.NetworkManager.IP6Config</h1><p>Interface has no methods.</p><p>Interface has no signals.</p><h2>Properties:</h2><dl><dt><code>Addresses</code> -
+ <h1><a name="org.freedesktop.NetworkManager.IP6Config" id="org.freedesktop.NetworkManager.IP6Config"></a>org.freedesktop.NetworkManager.IP6Config</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.IP6Config.PropertiesChanged" id="org.freedesktop.NetworkManager.IP6Config.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</dd><dt><code>Addresses</code> -
<code>a(ayuay)</code> -
- <code>(read)</code></dt><dd>Tuples of IPv6 address/prefix/gateway.</dd><dt><code>Nameservers</code> -
+ <code>(read)</code></dt><dd>Tuples of IPv6 address/prefix/gateway.</dd><dt><code>Routes</code> -
+ <code>a(ayuayu)</code> -
+ <code>(read)</code></dt><dd>Tuples of IPv6 route/prefix/next-hop/metric.</dd><dt><code>Nameservers</code> -
<code>aay</code> -
<code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>Domains</code> -
<code>as</code> -
- <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Routes</code> -
- <code>a(ayuayu)</code> -
- <code>(read)</code></dt><dd>Tuples of IPv6 route/prefix/next-hop/metric.</dd></dl>
+ <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Searches</code> -
+ <code>as</code> -
+ <code>(read)</code></dt><dd>A list of dns searches.</dd></dl>
<h1><a name="org.freedesktop.NetworkManager.DHCP4Config" id="org.freedesktop.NetworkManager.DHCP4Config"></a>org.freedesktop.NetworkManager.DHCP4Config</h1>
Options and configuration returned by the IPv4 DHCP server.
@@ -1236,6 +1362,62 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div><div><h4>Returns</h4><dl><dt><code>path</code> -
<code>o</code></dt><dd>
Object path of the new connection that was just added.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.AddConnectionUnsaved" id="org.freedesktop.NetworkManager.Settings.AddConnectionUnsaved">AddConnectionUnsaved</a> (
+ a{sa{sv}}: connection
+ ) &#8594;
+ o</h3><div class="docstring">
+ Add new connection but do not save it to disk immediately. This
+ operation does not start the network connection unless (1) device is
+ idle and able to connect to the network described by the new connection,
+ and (2) the connection is allowed to be started automatically.
+
+ Use the 'Save' method on the connection to save these changes
+ to disk. Note that unsaved changes will be lost if the
+ connection is reloaded from disk (either automatically on file
+ change or due to an explicit ReloadConnections call).
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>a{sa{sv}}</code></dt><dd>
+ Connection settings and properties.
+ </dd></dl></div><div><h4>Returns</h4><dl><dt><code>path</code> -
+ <code>o</code></dt><dd>
+ Object path of the new connection that was just added.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.LoadConnections" id="org.freedesktop.NetworkManager.Settings.LoadConnections">LoadConnections</a> (
+ as: filenames
+ ) &#8594;
+ b, as</h3><div class="docstring">
+ Loads or reloads the indicated connections from disk. You
+ should call this after making changes directly to an on-disk
+ connection file to make sure that NetworkManager sees the
+ changes. (If "monitor-connection-files" in NetworkManager.conf
+ is "true", then this will have no real effect, but is
+ harmless.) As with AddConnection(), this operation does not
+ necessarily start the network connection.
+ </div><div><h4>Parameters</h4><dl><dt><code>filenames</code> -
+ <code>as</code></dt><dd>
+ Array of paths to on-disk connection profiles in directories
+ monitored by NetworkManager.
+ </dd></dl></div><div><h4>Returns</h4><dl><dt><code>status</code> -
+ <code>b</code></dt><dd>
+ Success or failure of the operation as a whole. True if
+ NetworkManager at least tried to load the indicated
+ connections, even if it did not succeed. False if an error
+ occurred before trying to load the connections (eg,
+ permission denied).
+ </dd><dt><code>failures</code> -
+ <code>as</code></dt><dd>
+ Paths of connection files that could not be loaded.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.ReloadConnections" id="org.freedesktop.NetworkManager.Settings.ReloadConnections">ReloadConnections</a> (
+
+ ) &#8594;
+ b</h3><div class="docstring">
+ Tells NetworkManager to reload all connection files from disk,
+ including noticing any added or deleted connection files. By
+ default, connections are re-read automatically any time they
+ change, so you only need to use this command if you have set
+ "monitor-connection-files=false" in NetworkManager.conf.
+ </div><div><h4>Returns</h4><dl><dt><code>status</code> -
+ <code>b</code></dt><dd>
+ Success or failure.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.SaveHostname" id="org.freedesktop.NetworkManager.Settings.SaveHostname">SaveHostname</a> (
s: hostname
) &#8594;
@@ -1265,7 +1447,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>o</code></dt><dd>
Object path of the new connection.
- </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Hostname</code> -
+ </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.ConnectionRemoved" id="org.freedesktop.NetworkManager.Settings.ConnectionRemoved">ConnectionRemoved</a> (
+ o: connection
+ )</h3><div class="docstring">
+ Emitted when a connection is no longer available. This happens when
+ the connection is deleted or if it is no longer accessible by any of
+ the system's logged-in users. After receipt of this signal, the
+ connection no longer exists and cannot be used. Also see the
+ Settings.Connection.Removed signal.
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>o</code></dt><dd>
+ Object path of the removed connection.
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Connections</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ List of object paths of available network connection profiles.
+ </dd><dt><code>Hostname</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
The machine hostname stored in persistent configuration.
@@ -1282,10 +1479,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
a{sa{sv}}: properties
) &#8594;
nothing</h3><div class="docstring">
- Update the connection with new settings and properties, replacing
- all previous settings and properties. Secrets may be part of the
- update request, and will be either stored in persistent storage or
- given to a Secret Agent for storage, depending on the request.
+ Update the connection with new settings and properties (replacing
+ all previous settings and properties) and save the connection to
+ disk. Secrets may be part of the update request, and will be either
+ stored in persistent storage or sent to a Secret Agent for storage,
+ depending on the flags associated with each secret.
+ </div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sa{sv}}</code></dt><dd>
+ New connection settings, properties, and (optionally) secrets.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.UpdateUnsaved" id="org.freedesktop.NetworkManager.Settings.Connection.UpdateUnsaved">UpdateUnsaved</a> (
+ a{sa{sv}}: properties
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Update the connection with new settings and properties (replacing
+ all previous settings and properties) but do not immediately save
+ the connection to disk. Secrets may be part of the update request
+ and may sent to a Secret Agent for storage, depending on the
+ flags associated with each secret.
+
+ Use the 'Save' method to save these changes to disk. Note
+ that unsaved changes will be lost if the connection is
+ reloaded from disk (either automatically on file change or
+ due to an explicit ReloadConnections call).
</div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
<code>a{sa{sv}}</code></dt><dd>
New connection settings, properties, and (optionally) secrets.
@@ -1324,7 +1539,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
</dt><dd>
Nested settings maps containing secrets.
- </dd></dl></div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Updated" id="org.freedesktop.NetworkManager.Settings.Connection.Updated">Updated</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Save" id="org.freedesktop.NetworkManager.Settings.Connection.Save">Save</a> (
+
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Saves a "dirty" connection (that had previously been
+ updated with UpdateUnsaved) to persistent storage.
+ </div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Updated" id="org.freedesktop.NetworkManager.Settings.Connection.Updated">Updated</a> (
)</h3><div class="docstring">
Emitted when any settings or permissions change. When handling
@@ -1336,9 +1557,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
)</h3><div class="docstring">
Emitted when this connection is no longer available. This
happens when the connection is deleted or if it is no longer
- accessable by any of the system's logged-in users. After
- receipt of this signal, the object no longer exists.
- </div></div><p>Interface has no properties.</p>
+ accessible by any of the system's logged-in users. After
+ receipt of this signal, the object no longer exists. Also
+ see the Settings.ConnectionRemoved signal.
+ </div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.PropertiesChanged" id="org.freedesktop.NetworkManager.Settings.Connection.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values.
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Unsaved</code> -
+ <code>b</code> -
+ <code>(read)</code></dt><dd>
+ If set, indicates that the in-memory state of the
+ connection does not match the on-disk state. This flag
+ will be set when UpdateUnsaved() is called or when any
+ connection details change, and cleared when the connection
+ is saved to disk via Save() or from internal operations.
+ </dd></dl>
<h1><a name="org.freedesktop.NetworkManager.Connection.Active" id="org.freedesktop.NetworkManager.Connection.Active"></a>org.freedesktop.NetworkManager.Connection.Active</h1>
@@ -1356,32 +1593,85 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
A dictionary mapping property names to variant boxed values
</dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Connection</code> -
<code>o</code> -
- <code>(read)</code></dt><dd>The path of the connection.</dd><dt><code>SpecificObject</code> -
+ <code>(read)</code></dt><dd>
+ The path of the connection.
+ </dd><dt><code>SpecificObject</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
A specific object associated with the active connection. This property
reflects the specific object used during connection activation, and will
not change over the lifetime of the ActiveConnection once set.
+ </dd><dt><code>Id</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ The ID of the connection, provided as a convenience so that clients
+ do not have to retrieve all connection details.
</dd><dt><code>Uuid</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
The UUID of the connection, provided as a convenience so that clients
do not have to retrieve all connection details.
+ </dd><dt><code>Type</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ The type of the connection, provided as a convenience so that clients
+ do not have to retrieve all connection details.
</dd><dt><code>Devices</code> -
<code>ao</code> -
- <code>(read)</code></dt><dd>Array of object paths representing devices which are part of this active connection.</dd><dt><code>State</code> -
+ <code>(read)</code></dt><dd>
+ Array of object paths representing devices which are part of this active
+ connection.
+ </dd><dt><code>State</code> -
<code>u</code> -
<code>(read)</code>
(<a xmlns="" href="#type-NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a>)
- </dt><dd>The state of this active connection.</dd><dt><code>Default</code> -
+ </dt><dd>
+ The state of this active connection.
+ </dd><dt><code>Default</code> -
<code>b</code> -
- <code>(read)</code></dt><dd>Whether this active connection is the default IPv4 connection, i.e. whether it currently owns the default IPv4 route.</dd><dt><code>Default6</code> -
+ <code>(read)</code></dt><dd>
+ Whether this active connection is the default IPv4 connection, i.e.
+ whether it currently owns the default IPv4 route.
+ </dd><dt><code>Ip4Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Ip4Config object describing the configuration of the
+ connection. Only valid when the connection is in the
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ </dd><dt><code>Dhcp4Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Dhcp4Config object describing the DHCP options
+ returned by the DHCP server (assuming the connection used DHCP). Only
+ valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ state.
+ </dd><dt><code>Default6</code> -
<code>b</code> -
- <code>(read)</code></dt><dd>Whether this active connection is the default IPv6 connection, i.e. whether it currently owns the default IPv6 route.</dd><dt><code>Vpn</code> -
+ <code>(read)</code></dt><dd>
+ Whether this active connection is the default IPv6 connection, i.e.
+ whether it currently owns the default IPv6 route.
+ </dd><dt><code>Ip6Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Ip6Config object describing the configuration of the
+ connection. Only valid when the connection is in the
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ </dd><dt><code>Dhcp6Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Dhcp6Config object describing the DHCP options
+ returned by the DHCP server (assuming the connection used DHCP). Only
+ valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ state.
+ </dd><dt><code>Vpn</code> -
<code>b</code> -
- <code>(read)</code></dt><dd>Whether this active connection is also a VPN connection.</dd><dt><code>Master</code> -
+ <code>(read)</code></dt><dd>
+ Whether this active connection is also a VPN connection.
+ </dd><dt><code>Master</code> -
<code>o</code> -
- <code>(read)</code></dt><dd>The path to the master device if the connection is a slave.</dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_ACTIVE_CONNECTION_STATE" id="type-NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a></h3><dl><dt><code>NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0</code></dt><dd>
+ <code>(read)</code></dt><dd>
+ The path to the master device if the connection is a slave.
+ </dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_ACTIVE_CONNECTION_STATE" id="type-NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a></h3><dl><dt><code>NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0</code></dt><dd>
The active connection is in an unknown state.
</dd><dt><code>NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1</code></dt><dd>
The connection is activating.
@@ -1408,6 +1698,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
identifier is limited in length to 255 characters with a minimum
of 3 characters. An example valid identifier is 'org.gnome.nm-applet'
(without quotes).
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AgentManager.RegisterWithCapabilities" id="org.freedesktop.NetworkManager.AgentManager.RegisterWithCapabilities">RegisterWithCapabilities</a> (
+ s: identifier, u: capabilities
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Like Register() but indicates agent capabilities to NetworkManager.
+ </div><div><h4>Parameters</h4><dl><dt><code>identifier</code> -
+ <code>s</code></dt><dd>
+ See the Register() method's identifier argument.
+ </dd><dt><code>capabilities</code> -
+ <code>u</code>
+ (<a xmlns="" href="#type-NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a>)
+ </dt><dd>
+ Indicates various agent capabilities to NetworkManager.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AgentManager.Unregister" id="org.freedesktop.NetworkManager.AgentManager.Unregister">Unregister</a> (
) &#8594;
@@ -1426,7 +1729,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
itself and should not expect its SaveSecrets() method to be called.
SaveSecrets() will be called eg if some program other than the
agent itself (like a connection editor) changes the secrets out of
- band.
+ band. The agent should implement this D-Bus interface on an object
+ with the path /org/freedesktop/NetworkManager/SecretAgent.
<h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.GetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.GetSecrets">GetSecrets</a> (
a{sa{sv}}: connection, o: connection_path, s: setting_name, as: hints, u: flags
) &#8594;
@@ -1436,7 +1740,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
and the user enters new secrets, the agent is expected to save
the new secrets to persistent storage (if the secret's flags
include AGENT_OWNED) as NetworkManager will not send these
- secrets back to the same agent via a SaveSecrets() call.
+ secrets back to the same agent via a SaveSecrets() call. If
+ the user canceled any interaction, the agent should return the
+ UserCanceled error (see below).
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>a{sa{sv}}</code>
(<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
@@ -1463,7 +1769,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
required, so in some cases no hints may be given. The Agent
should return any secrets it has, or that it thinks are
required, regardless of what hints NetworkManager sends
- in this request.
+ in this request. Some hints have special prefixes that
+ provide information to the agent; for example, VPN requests
+ may send server-specific messages prefixed with
+ "x-vpn-message:".
</dd><dt><code>flags</code> -
<code>u</code>
(<a xmlns="" href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a>)
@@ -1480,7 +1789,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Nested settings maps containing secrets. Each setting MUST
contain at least the 'name' field, containing the name of
the setting, and one or more secrets.
- </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets">CancelGetSecrets</a> (
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.SecretAgent.NotAuthorized</code></dt><dd>
+ Should be returned when the process requesting secrets is
+ not authorized to do so (like if the caller is not root
+ or not NetworkManager).
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.InvalidConnection</code></dt><dd>
+ Should be returned if the 'connection' argument is invalid.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.UserCanceled</code></dt><dd>
+ Should be returned when the user has canceled the request.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.AgentCanceled</code></dt><dd>
+ Should be returned when NetworkManager has requested that
+ the agent cancel the request.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.InternalError</code></dt><dd>
+ Should be returned if the agent has encountered some internal
+ error processing the request.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.NoSecrets</code></dt><dd>
+ Should be returned if there are no available secrets, for
+ example if user interaction is not allowed and there are
+ no secrets stored by the agent for this connection.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets">CancelGetSecrets</a> (
o: connection_path, s: setting_name
) &#8594;
nothing</h3><div class="docstring">
@@ -1551,7 +1878,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
D-Bus interface, as opposed to automatically initiated by
NetworkManager in response to (for example) scan results or
carrier changes.
- </dd></dl>
+ </dd></dl><h3 xmlns=""><a name="type-NM_SECRET_AGENT_CAPABILITIES" id="type-NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a></h3><dl><dt><code>NM_SECRET_AGENT_CAPABILITY_NONE = 0x0</code></dt><dd>No special capabilities.</dd><dt><code>NM_SECRET_AGENT_CAPABILITY_VPN_HINTS = 0x1</code></dt><dd>
+ The agent supports passing hints to VPN plugin authentication
+ dialogs.
+ </dd></dl>
<h1><a name="org.freedesktop.NetworkManager.VPN.Connection" id="org.freedesktop.NetworkManager.VPN.Connection"></a>org.freedesktop.NetworkManager.VPN.Connection</h1>
@@ -1631,13 +1961,67 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
a{sa{sv}}: connection
) &#8594;
nothing</h3><div class="docstring">
- Tells the plugin to connect.
+ Tells the plugin to connect. Interactive secrets requests (eg, emitting
+ the SecretsRequired signal) are not allowed.
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>a{sa{sv}}</code>
+ (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+ </dt><dd>
+ Describes the connection to be established.
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</code></dt><dd>
+ The plugin is already starting, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</code></dt><dd>
+ The plugin is already connected, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>
+ The plugin is already stopping, and another stop request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>
+ A binary providing the service failed to launch.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.WrongState</code></dt><dd>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.ConnectInteractive" id="org.freedesktop.NetworkManager.VPN.Plugin.ConnectInteractive">ConnectInteractive</a> (
+ a{sa{sv}}: connection, a{sv}: details
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Tells the plugin to connect, allowing interactive secrets requests (eg
+ the plugin is allowed to emit the SecretsRequired signal if the VPN
+ service indicates that it needs additional secrets during the connect
+ process).
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>a{sa{sv}}</code>
(<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
</dt><dd>
Describes the connection to be established.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</code></dt><dd>The request could not be processed because the VPN connection is already being started.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</code></dt><dd>The request could not be processed because a VPN connection was already active.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>The request could not be processed because the VPN connection is already being stopped.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>Invalid arguments were passed with the request. FIXME: too general.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>A binary providing the service failed to launch.<em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets" id="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets">NeedSecrets</a> (
+ </dd><dt><code>details</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ Additional details about the Connect process.
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</code></dt><dd>
+ The plugin is already starting, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</code></dt><dd>
+ The plugin is already connected, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>
+ The plugin is already stopping, and another stop request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>
+ A binary providing the service failed to launch.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.WrongState</code></dt><dd>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported</code></dt><dd>
+ The request could not be processed because the plugin does not support
+ interactive operations, such as ConnectInteractive() or NewSecrets().
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets" id="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets">NeedSecrets</a> (
a{sa{sv}}: settings
) &#8594;
s</h3><div class="docstring">
@@ -1650,12 +2034,20 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div><div><h4>Returns</h4><dl><dt><code>setting_name</code> -
<code>s</code></dt><dd>
The setting name within the provided connection that requires secrets, if any.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</code></dt><dd>The request could not be processed because the VPN connection settings were invalid.<em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect" id="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect">Disconnect</a> (
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</code></dt><dd>
+ The request could not be processed because the connection was invalid. It
+ usually means that the connection's VPN setting was missing some required
+ data item or secret.
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect" id="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect">Disconnect</a> (
) &#8594;
nothing</h3><div class="docstring">
Disconnect the plugin.
- </div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>The request could not be processed because the VPN connection is already being stopped.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</code></dt><dd>The request could not be processed because the VPN connection was already stopped.<em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig" id="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig">SetConfig</a> (
+ </div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>
+ The plugin is already stopping, and another stop request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</code></dt><dd>
+ The plugin is already stopped, and another disconnect request was received.
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig" id="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig">SetConfig</a> (
a{sv}: config
) &#8594;
nothing</h3><div class="docstring">
@@ -1695,7 +2087,31 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>reason</code> -
<code>s</code></dt><dd>
The reason for the failure.
- </dd></dl></div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged" id="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged">StateChanged</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.NewSecrets" id="org.freedesktop.NetworkManager.VPN.Plugin.NewSecrets">NewSecrets</a> (
+ a{sa{sv}}: connection
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Called in response to a SecretsRequired signal to deliver updated secrets
+ or other information to the plugin.
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>a{sa{sv}}</code>
+ (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+ </dt><dd>
+ Describes the connection including the new secrets.
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.WrongState</code></dt><dd>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>
+ A binary providing the service failed to launch.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported</code></dt><dd>
+ The request could not be processed because the plugin does not support
+ interactive operations, such as ConnectInteractive() or NewSecrets().
+ <em>(generic description)</em></dd></dl></div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged" id="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged">StateChanged</a> (
u: state
)</h3><div class="docstring">
Emitted when the plugin state changes.
@@ -1704,7 +2120,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<a xmlns="" href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a>)
</dt><dd>
The new state of the plugin.
- </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Config" id="org.freedesktop.NetworkManager.VPN.Plugin.Config">Config</a> (
+ </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.SecretsRequired" id="org.freedesktop.NetworkManager.VPN.Plugin.SecretsRequired">SecretsRequired</a> (
+ s: message, as: secrets
+ )</h3><div class="docstring">
+ Emitted during an ongoing ConnectInteractive() request when the plugin
+ has determined that new secrets are required. NetworkManager will then
+ call the NewSecrets() method with a connection hash including the new
+ secrets.
+ </div><div><h4>Parameters</h4><dl><dt><code>message</code> -
+ <code>s</code></dt><dd>
+ Informational message, if any, about the request. For example, if
+ a second PIN is required, could indicate to the user to wait for
+ the token code to change until entering the next PIN.
+ </dd><dt><code>secrets</code> -
+ <code>as</code></dt><dd>
+ Array of strings of VPN secret names which the plugin thinks
+ secrets may be required for, or other VPN-specific data to be
+ processed by the VPN's front-end.
+ </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Config" id="org.freedesktop.NetworkManager.VPN.Plugin.Config">Config</a> (
a{sv}: config
)</h3><div class="docstring">
The plugin obtained generic configuration information.
@@ -1807,16 +2240,42 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<h1>Errors:</h1>
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.General" id="org.freedesktop.NetworkManager.VPN.Error.General"></a>org.freedesktop.NetworkManager.VPN.Error.General</h2>This is a drab, nondescript error.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</h2>The request could not be processed because the VPN connection is already being started.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</h2>The request could not be processed because a VPN connection was already active.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</h2>The request could not be processed because the VPN connection is already being stopped.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</h2>The request could not be processed because the VPN connection was already stopped.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.WrongState" id="org.freedesktop.NetworkManager.VPN.Error.WrongState"></a>org.freedesktop.NetworkManager.VPN.Error.WrongState</h2>The request could not be processed because the VPN connection is in the wrong state for this type of request. FIXME: too general?
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.BadArguments" id="org.freedesktop.NetworkManager.VPN.Error.BadArguments"></a>org.freedesktop.NetworkManager.VPN.Error.BadArguments</h2>Invalid arguments were passed with the request. FIXME: too general.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed" id="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"></a>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</h2>A binary providing the service failed to launch.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid" id="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid"></a>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</h2>The request could not be processed because the VPN connection settings were invalid.
-<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.General" id="org.freedesktop.NetworkManager.VPN.Error.General"></a>org.freedesktop.NetworkManager.VPN.Error.General</h2>General failure without further details.
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</h2>
+ The plugin is already starting, and another connect request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</h2>
+ The plugin is already connected, and another connect request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</h2>
+ The plugin is already stopping, and another stop request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</h2>
+ The plugin is already stopped, and another disconnect request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.WrongState" id="org.freedesktop.NetworkManager.VPN.Error.WrongState"></a>org.freedesktop.NetworkManager.VPN.Error.WrongState</h2>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.BadArguments" id="org.freedesktop.NetworkManager.VPN.Error.BadArguments"></a>org.freedesktop.NetworkManager.VPN.Error.BadArguments</h2>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed" id="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"></a>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</h2>
+ A binary providing the service failed to launch.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid" id="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid"></a>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</h2>
+ The request could not be processed because the connection was invalid. It
+ usually means that the connection's VPN setting was missing some required
+ data item or secret.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported" id="org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported"></a>org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported</h2>
+ The request could not be processed because the plugin does not support
+ interactive operations, such as ConnectInteractive() or NewSecrets().
+
+<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Team">org.freedesktop.NetworkManager.Device.Team</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Generic">org.freedesktop.NetworkManager.Device.Generic</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
- u</li><li><code><a href="#type-NM_802_11_AP_SEC">NM_802_11_AP_SEC</a></code>
- u</li><li><code><a href="#type-NM_802_11_DEVICE_CAP">NM_802_11_DEVICE_CAP</a></code>
- u</li><li><code><a href="#type-NM_802_11_MODE">NM_802_11_MODE</a></code>
@@ -1830,6 +2289,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
- u</li><li><code><a href="#type-NM_DEVICE_STATE_REASON_STRUCT">NM_DEVICE_STATE_REASON_STRUCT</a></code>
- ( u, u )
</li><li><code><a href="#type-NM_DEVICE_TYPE">NM_DEVICE_TYPE</a></code>
+ - u</li><li><code><a href="#type-NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a></code>
- u</li><li><code><a href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a></code>
- u</li><li><code><a href="#type-NM_STATE">NM_STATE</a></code>
- u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a></code>
diff --git a/docs/api/html/style.css b/docs/api/html/style.css
index 705a5c9ad..d6f6c26ec 100644
--- a/docs/api/html/style.css
+++ b/docs/api/html/style.css
@@ -1,23 +1,15 @@
-body
-{
- font-family: cantarell, sans-serif;
-}
.synopsis, .classsynopsis
{
/* tango:aluminium 1/2 */
background: #eeeeec;
- background: rgba(238, 238, 236, 0.5);
- border: solid 1px rgb(238, 238, 236);
+ border: solid 1px #d3d7cf;
padding: 0.5em;
}
.programlisting
{
/* tango:sky blue 0/1 */
- /* fallback for no rgba support */
background: #e6f3ff;
border: solid 1px #729fcf;
- background: rgba(114, 159, 207, 0.1);
- border: solid 1px rgba(114, 159, 207, 0.2);
padding: 0.5em;
}
.variablelist
@@ -35,6 +27,7 @@ body
{
position: relative;
top: 0em ! important;
+
}
/* this is needed so that the local anchors are displayed below the naviagtion */
div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
@@ -53,20 +46,16 @@ body
*/
body
{
- padding-top: 5em;
- padding-bottom: 500px;
- max-width: 60em;
- }
- p
- {
- max-width: 60em;
+ padding-top: 3.2em;
+ padding-bottom: 20em;
}
/* style and size the navigation bar */
table.navigation#top
{
position: fixed;
- background: #e2e2e2;
- border-bottom: solid 1px #babdb6;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
margin-top: 0;
margin-bottom: 0;
top: 0;
@@ -76,57 +65,21 @@ body
}
.navigation a, .navigation a:visited
{
- /* tango:sky blue 3 */
- color: #204a87;
+ /* tango:scarlet red 3 */
+ color: #a40000;
}
.navigation a:hover
{
- /* tango:sky blue 2 */
- color: #3465a4;
+ /* tango:scarlet red 1 */
+ color: #ef2929;
}
td.shortcuts
{
- /* tango:sky blue 2 */
- color: #3465a4;
+ /* tango:scarlet red 1 */
+ color: #ef2929;
font-size: 80%;
white-space: nowrap;
}
- td.shortcuts .dim
- {
- color: #babdb6;
- }
-}
-@media screen and (min-width: 60em) {
- /* screen larger than 60em */
- body { margin: auto; }
-}
-@media screen and (max-width: 60em) {
- /* screen less than 60em */
- #nav_hierarchy { display: none; }
- #nav_interfaces { display: none; }
- #nav_prerequisites { display: none; }
- #nav_derived_interfaces { display: none; }
- #nav_implementations { display: none; }
- #nav_child_properties { display: none; }
- #nav_style_properties { display: none; }
- #nav_index { display: none; }
- #nav_glossary { display: none; }
- .gallery_image { display: none; }
- .property_flags { display: none; }
- .signal_flags { display: none; }
- .parameter_annotations { display: none; }
- .enum_member_annotations { display: none; }
- .struct_member_annotations { display: none; }
- .union_member_annotations { display: none; }
- /* now that a column is hidden, optimize space */
- col.parameters_name { width: auto; }
- col.parameters_description { width: auto; }
- col.struct_members_name { width: auto; }
- col.struct_members_description { width: auto; }
- col.enum_members_name { width: auto; }
- col.enum_members_description { width: auto; }
- col.union_members_name { width: auto; }
- col.union_members_description { width: auto; }
}
@media print {
table.navigation {
@@ -136,8 +89,9 @@ body
div.titlepage table.navigation {
visibility: visible;
display: table;
- background: #e2e2e2;
- border: solid 1px #babdb6;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
margin-top: 0;
margin-bottom: 0;
top: 0;
@@ -148,7 +102,7 @@ body
.navigation .title
{
- font-size: 120%;
+ font-size: 200%;
}
div.gallery-float
@@ -178,67 +132,6 @@ a:hover
color: #729fcf;
}
-div.informaltable table
-{
- border-collapse: separate;
- border-spacing: 20px 3px;
- border: none;
-}
-
-div.informaltable table td, div.informaltable table th
-{
- vertical-align: top;
-}
-
-.function_type,
-.variable_type,
-.property_type,
-.signal_type,
-.parameter_name,
-.struct_member_name,
-.union_member_name,
-.define_keyword,
-.datatype_keyword,
-.typedef_keyword
-{
- text-align: right;
-}
-
-/* dim non-primary columns */
-.c_punctuation,
-.function_type,
-.variable_type,
-.property_type,
-.signal_type,
-.define_keyword,
-.datatype_keyword,
-.typedef_keyword,
-.property_flags,
-.signal_flags,
-.parameter_annotations,
-.enum_member_annotations,
-.struct_member_annotations,
-.union_member_annotations
-{
- color: #888a85;
-}
-
-.function_type a,
-.function_type a:visited,
-.function_type a:hover,
-.property_type a,
-.property_type a:visited,
-.property_type a:hover,
-.signal_type a,
-.signal_type a:visited,
-.signal_type a:hover,
-.signal_flags a,
-.signal_flags a:visited,
-.signal_flags a:hover
-{
- color: #729fcf;
-}
-
div.table table
{
border-collapse: collapse;
@@ -261,43 +154,14 @@ div.table table th
background-color: #d3d7cf;
}
-h4
-{
- color: #555753;
-}
-
hr
{
- /* tango:aluminium 1 */
- color: #d3d7cf;
- background: #d3d7cf;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
border: none 0px;
height: 1px;
clear: both;
- margin: 2.0em 0em 2.0em 0em;
-}
-
-dl.toc dt
-{
- padding-bottom: 0.25em;
-}
-
-dl.toc > dd > dl > dt
-{
- padding-top: 0.25em;
- padding-bottom: 0.25em;
-}
-
-dl.toc > dt
-{
- padding-top: 1em;
- padding-bottom: 0.5em;
- font-weight: bold;
-}
-
-.parameter
-{
- font-style: normal;
}
.footer
@@ -309,70 +173,31 @@ dl.toc > dt
font-size: 80%;
}
-.informalfigure,
-.figure
-{
- margin: 1em;
-}
-
-.informalexample,
-.example
-{
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
.warning
{
/* tango:orange 0/1 */
background: #ffeed9;
- background: rgba(252, 175, 62, 0.1);
border-color: #ffb04f;
- border-color: rgba(252, 175, 62, 0.2);
}
.note
{
/* tango:chameleon 0/0.5 */
background: #d8ffb2;
- background: rgba(138, 226, 52, 0.1);
border-color: #abf562;
- border-color: rgba(138, 226, 52, 0.2);
}
-div.blockquote
-{
- border-color: #eeeeec;
-}
-.note, .warning, div.blockquote
+.note, .warning
{
padding: 0.5em;
border-width: 1px;
border-style: solid;
- margin: 2em;
}
-.note p, .warning p
+.note h3, .warning h3
{
- margin: 0;
+ margin-top: 0.0em
}
-
-div.warning h3.title,
-div.note h3.title
-{
- display: none;
-}
-
-p + div.section
-{
- margin-top: 1em;
-}
-
-div.refnamediv,
-div.refsynopsisdiv,
-div.refsect1,
-div.refsect2,
-div.toc,
-div.section
+.note p, .warning p
{
- margin-bottom: 1em;
+ margin-bottom: 0.0em
}
/* blob links */
@@ -385,22 +210,11 @@ h2 .extralinks, h3 .extralinks
font-weight: normal;
}
-.lineart
-{
- color: #d3d7cf;
- font-weight: normal;
-}
-
.annotation
{
/* tango:aluminium 5 */
color: #555753;
- font-weight: normal;
-}
-
-.structfield
-{
- font-style: normal;
+ font-size: 80%;
font-weight: normal;
}
@@ -423,7 +237,6 @@ h2 .extralinks, h3 .extralinks
.listing_frame {
/* tango:sky blue 1 */
border: solid 1px #729fcf;
- border: solid 1px rgba(114, 159, 207, 0.2);
padding: 0px;
}
@@ -433,27 +246,19 @@ h2 .extralinks, h3 .extralinks
padding: 0.5em;
}
.listing_lines {
- /* this just adds visual clutter and
- takes precious room from small screens */
- display: none;
-}
-.listing_lines {
/* tango:sky blue 0.5 */
background: #a6c5e3;
- background: rgba(114, 159, 207, 0.2);
/* tango:aluminium 6 */
color: #2e3436;
}
.listing_code {
/* tango:sky blue 0 */
background: #e6f3ff;
- background: rgba(114, 159, 207, 0.1);
}
.listing_code .programlisting {
/* override from previous */
border: none 0px;
padding: 0px;
- background: none;
}
.listing_lines pre, .listing_code pre {
margin: 0px;
diff --git a/docs/api/html/up-insensitive.png b/docs/api/html/up-insensitive.png
deleted file mode 100644
index f40498606..000000000
--- a/docs/api/html/up-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/api/html/up.png b/docs/api/html/up.png
index 80b4b37e9..85b3e2a27 100644
--- a/docs/api/html/up.png
+++ b/docs/api/html/up.png
Binary files differ
diff --git a/docs/api/settings-spec.xml b/docs/api/settings-spec.xml
index c7b88b4e1..a0c54945f 100644
--- a/docs/api/settings-spec.xml
+++ b/docs/api/settings-spec.xml
@@ -25,8 +25,8 @@
<row>
<entry><screen>eap</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: 'leap', 'md5', 'tls', 'peap', 'ttls', and 'fast'. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.</entry>
+ <entry><screen></screen></entry>
+ <entry>The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: 'leap', 'md5', 'tls', 'peap', 'ttls', 'pwd', and 'fast'. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.</entry>
</row>
<row>
<entry><screen>identity</screen></entry>
@@ -67,7 +67,7 @@
<row>
<entry><screen>altsubject-matches</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>List of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.</entry>
</row>
<row>
@@ -127,7 +127,7 @@
<row>
<entry><screen>phase2-altsubject-matches</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>List of strings to be matched against List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner 'phase 2' authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.</entry>
</row>
<row>
@@ -340,7 +340,7 @@
<row>
<entry><screen>options</screen></entry>
<entry><screen>dict of (string::string)</screen></entry>
- <entry><screen>[ ]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Dictionary of key/value pairs of bonding options. Both keys and values must be strings. Option names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).</entry>
</row>
</tbody>
@@ -371,6 +371,12 @@
<entry>The name of the virtual in-kernel bridging network interface</entry>
</row>
<row>
+ <entry><screen>mac-address</screen></entry>
+ <entry><screen>byte array</screen></entry>
+ <entry><screen>[]</screen></entry>
+ <entry>The MAC address of the bridge</entry>
+ </row>
+ <row>
<entry><screen>stp</screen></entry>
<entry><screen>boolean</screen></entry>
<entry><screen>TRUE</screen></entry>
@@ -404,7 +410,7 @@
<entry><screen>ageing-time</screen></entry>
<entry><screen>uint32</screen></entry>
<entry><screen>300</screen></entry>
- <entry>The ethernet MAC address aging time, in seconds.</entry>
+ <entry>The Ethernet MAC address aging time, in seconds.</entry>
</row>
</tbody>
</tgroup>
@@ -521,7 +527,13 @@
<entry><screen>uuid</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>Universally unique connection identifier. Must be in the format '2815492f-7e56-435e-b2e9-246bd7cdc664' (ie, contains only hexadecimal characters and '-'). The UUID should be assigned when the connection is created and never changed as long as the connection still applies to the same network. For example, it should not be changed when the user changes the connection's 'id', but should be recreated when the WiFi SSID, mobile broadband network provider, or the connection type changes.</entry>
+ <entry>Universally unique connection identifier. Must be in the format '2815492f-7e56-435e-b2e9-246bd7cdc664' (ie, contains only hexadecimal characters and '-'). The UUID should be assigned when the connection is created and never changed as long as the connection still applies to the same network. For example, it should not be changed when the user changes the connection's 'id', but should be recreated when the Wi-Fi SSID, mobile broadband network provider, or the connection type changes.</entry>
+ </row>
+ <row>
+ <entry><screen>interface-name</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>Interface name this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.</entry>
</row>
<row>
<entry><screen>type</screen></entry>
@@ -532,7 +544,7 @@
<row>
<entry><screen>permissions</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>An array of strings defining what access a given user has to this connection. If this is NULL or empty, all users are allowed to access this connection. Otherwise a user is allowed to access this connection if and only if they are in this array. Each entry is of the form "[type]:[id]:[reserved]", for example: "user:dcbw:blah" At this time only the 'user' [type] is allowed. Any other values are ignored and reserved for future use. [id] is the username that this permission refers to, which may not contain the ':' character. Any [reserved] information (if present) must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.</entry>
</row>
<row>
@@ -545,7 +557,7 @@
<entry><screen>timestamp</screen></entry>
<entry><screen>uint64</screen></entry>
<entry><screen>0</screen></entry>
- <entry>Timestamp (in seconds since the Unix Epoch) that the connection was last successfully activated. Settings services should update the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp.</entry>
+ <entry>Timestamp (in seconds since the Unix Epoch) that the connection was last successfully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).</entry>
</row>
<row>
<entry><screen>read-only</screen></entry>
@@ -574,8 +586,125 @@
<row>
<entry><screen>secondaries</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>List of connection UUIDs that should be activated when the base connection itself is activated.</entry>
+ <entry><screen></screen></entry>
+ <entry>List of connection UUIDs that should be activated when the base connection itself is activated. Currently only VPN connections are supported.</entry>
+ </row>
+ <row>
+ <entry><screen>gateway-ping-timeout</screen></entry>
+ <entry><screen>uint32</screen></entry>
+ <entry><screen>0</screen></entry>
+ <entry>If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
+<table>
+ <title>dcb setting</title>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Key Name</entry>
+ <entry>Value Type</entry>
+ <entry>Default Value</entry>
+ <entry>Value Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><screen>name</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen>dcb</screen></entry>
+ <entry>The setting's name; these names are defined by the specification and cannot be changed after the object has been created. Each setting class has a name, and all objects of that class share the same name.</entry>
+ </row>
+ <row>
+ <entry><screen>app-fcoe-flags</screen></entry>
+ <entry><screen>uint32</screen></entry>
+ <entry><screen>0</screen></entry>
+ <entry>Specifies the flags for the DCB FCoE application. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <xref linkend="secrets-flags"/> for flag values)</entry>
+ </row>
+ <row>
+ <entry><screen>app-fcoe-priority</screen></entry>
+ <entry><screen>int32</screen></entry>
+ <entry><screen>-1</screen></entry>
+ <entry>The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the 'app-fcoe-flags' property includes the 'enabled' flag.</entry>
+ </row>
+ <row>
+ <entry><screen>app-fcoe-mode</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen>"fabric"</screen></entry>
+ <entry>The FCoe controller mode; either 'fabric' (default) or 'vn2vn'.</entry>
+ </row>
+ <row>
+ <entry><screen>app-iscsi-flags</screen></entry>
+ <entry><screen>uint32</screen></entry>
+ <entry><screen>0</screen></entry>
+ <entry>Specifies the flags for the DCB iSCSI application. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <xref linkend="secrets-flags"/> for flag values)</entry>
+ </row>
+ <row>
+ <entry><screen>app-iscsi-priority</screen></entry>
+ <entry><screen>int32</screen></entry>
+ <entry><screen>-1</screen></entry>
+ <entry>The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the 'app-iscsi-flags' property includes the 'enabled' flag.</entry>
+ </row>
+ <row>
+ <entry><screen>app-fip-flags</screen></entry>
+ <entry><screen>uint32</screen></entry>
+ <entry><screen>0</screen></entry>
+ <entry>Specifies the flags for the DCB FIP application. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <xref linkend="secrets-flags"/> for flag values)</entry>
+ </row>
+ <row>
+ <entry><screen>app-fip-priority</screen></entry>
+ <entry><screen>int32</screen></entry>
+ <entry><screen>-1</screen></entry>
+ <entry>The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the 'app-fip-flags' property includes the 'enabled' flag.</entry>
+ </row>
+ <row>
+ <entry><screen>priority-flow-control-flags</screen></entry>
+ <entry><screen>uint32</screen></entry>
+ <entry><screen>0</screen></entry>
+ <entry>Specifies the flags for DCB Priority Flow Control. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <xref linkend="secrets-flags"/> for flag values)</entry>
+ </row>
+ <row>
+ <entry><screen>priority-flow-control</screen></entry>
+ <entry><screen>array of uint32</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause. Allowed values are 0 (do not transmit pause) and 1 (transmit pause).</entry>
+ </row>
+ <row>
+ <entry><screen>priority-group-flags</screen></entry>
+ <entry><screen>uint32</screen></entry>
+ <entry><screen>0</screen></entry>
+ <entry>Specifies the flags for DCB Priority Groups. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing). (see <xref linkend="secrets-flags"/> for flag values)</entry>
+ </row>
+ <row>
+ <entry><screen>priority-group-id</screen></entry>
+ <entry><screen>array of uint32</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group.</entry>
+ </row>
+ <row>
+ <entry><screen>priority-group-bandwidth</screen></entry>
+ <entry><screen>array of uint32</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percent.</entry>
+ </row>
+ <row>
+ <entry><screen>priority-bandwidth</screen></entry>
+ <entry><screen>array of uint32</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percent.</entry>
+ </row>
+ <row>
+ <entry><screen>priority-strict-bandwidth</screen></entry>
+ <entry><screen>array of uint32</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group. Allowed values are 0 (the priority may not utilize all bandwidth) or 1 (the priority may utilize all bandwidth).</entry>
+ </row>
+ <row>
+ <entry><screen>priority-traffic-class</screen></entry>
+ <entry><screen>array of uint32</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped.</entry>
</row>
</tbody>
</tgroup>
@@ -638,7 +767,7 @@
<entry><screen>network-type</screen></entry>
<entry><screen>int32</screen></entry>
<entry><screen>-1</screen></entry>
- <entry>Network preference to force the device to only use specific network technologies. The permitted values are: -1: any, 0: 3G only, 1: GPRS/EDGE only, 2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only. Note that not all devices allow network preference control.</entry>
+ <entry>Network preference to force the device to only use specific network technologies. The permitted values are: -1: any, 0: 3G only, 1: GPRS/EDGE only, 2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only. Notes: This property is deprecated and NetworkManager from 0.9.10 onwards doesn't use this property when talking to ModemManager.Also, not all devices allow network preference control.</entry>
</row>
<row>
<entry><screen>pin</screen></entry>
@@ -656,7 +785,7 @@
<entry><screen>allowed-bands</screen></entry>
<entry><screen>uint32</screen></entry>
<entry><screen>1</screen></entry>
- <entry>Bitfield of allowed frequency bands. Note that not all devices allow frequency band control.</entry>
+ <entry>Bitfield of allowed frequency bands.Notes: This property is deprecated and NetworkManager from 0.9.10 onwards doesn't use this property when talking to ModemManager.Also, not all devices allow frequency band control.</entry>
</row>
<row>
<entry><screen>home-only</screen></entry>
@@ -703,6 +832,18 @@
<entry><screen></screen></entry>
<entry>The IPoIB transport mode. Either 'datagram' or 'connected'.</entry>
</row>
+ <row>
+ <entry><screen>p-key</screen></entry>
+ <entry><screen>int32</screen></entry>
+ <entry><screen>-1</screen></entry>
+ <entry>The InfiniBand P_Key. Either -1 for the default, or a 16-bit unsigned integer.</entry>
+ </row>
+ <row>
+ <entry><screen>parent</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>The interface name of the parent device, or NULL</entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -733,25 +874,31 @@
<row>
<entry><screen>dns</screen></entry>
<entry><screen>array of uint32</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>List of DNS servers (network byte order). For the 'auto' method, these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared', 'link-local', or 'disabled' methods as there is no upstream network. In all other methods, these DNS servers are used as the only DNS servers for this connection.</entry>
</row>
<row>
<entry><screen>dns-search</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>List of DNS search domains. For the 'auto' method, these search domains are appended to those returned by automatic configuration. Search domains cannot be used with the 'shared', 'link-local', or 'disabled' methods as there is no upstream network. In all other methods, these search domains are used as the only search domains for this connection.</entry>
</row>
<row>
<entry><screen>addresses</screen></entry>
<entry><screen>array of array of uint32</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet. For the 'auto' method, given IP addresses are appended to those returned by automatic configuration. Addresses cannot be used with the 'shared', 'link-local', or 'disabled' methods as addressing is either automatic or disabled with these methods.</entry>
</row>
<row>
+ <entry><screen>address-labels</screen></entry>
+ <entry><screen>array of string</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>Internal use only</entry>
+ </row>
+ <row>
<entry><screen>routes</screen></entry>
<entry><screen>array of array of uint32</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Array of IPv4 route structures. Each IPv4 route structure is composed of 4 32-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 - 32), the third being the next-hop (network byte order) if any, and the fourth being the route metric. For the 'auto' method, given IP routes are appended to those returned by automatic configuration. Routes cannot be used with the 'shared', 'link-local', or 'disabled', methods as there is no upstream network.</entry>
</row>
<row>
@@ -821,7 +968,7 @@
<entry><screen>method</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>IPv6 configuration method. If 'auto' is specified then the appropriate automatic method (PPP, router advertisement, etc) is used for the device and most other properties can be left unset. To force the use of DHCP only, specify 'dhcp'; this method is only valid for ethernet-based hardware. If 'link-local' is specified, then an IPv6 link-local address will be assigned to the interface. If 'manual' is specified, static IP addressing is used and at least one IP address must be given in the 'addresses' property. If 'ignore' is specified, IPv6 configuration is not done. This property must be set. NOTE: the 'shared' methodis not yet supported.</entry>
+ <entry>IPv6 configuration method. If 'auto' is specified then the appropriate automatic method (PPP, router advertisement, etc) is used for the device and most other properties can be left unset. To force the use of DHCP only, specify 'dhcp'; this method is only valid for Ethernet-based hardware. If 'link-local' is specified, then an IPv6 link-local address will be assigned to the interface. If 'manual' is specified, static IP addressing is used and at least one IP address must be given in the 'addresses' property. If 'ignore' is specified, IPv6 configuration is not done. This property must be set. Note: the 'shared' method is not yet supported.</entry>
</row>
<row>
<entry><screen>dhcp-hostname</screen></entry>
@@ -832,25 +979,25 @@
<row>
<entry><screen>dns</screen></entry>
<entry><screen>array of byte array</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Array of DNS servers, where each member of the array is a byte array containing the IPv6 address of the DNS server (in network byte order). For the 'auto' method, these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared' or 'link-local' methods as there is no usptream network. In all other methods, these DNS servers are used as the only DNS servers for this connection.</entry>
</row>
<row>
<entry><screen>dns-search</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>List of DNS search domains. For the 'auto' method, these search domains are appended to those returned by automatic configuration. Search domains cannot be used with the 'shared' or 'link-local' methods as there is no upstream network. In all other methods, these search domains are used as the only search domains for this connection.</entry>
</row>
<row>
<entry><screen>addresses</screen></entry>
<entry><screen>array of (byte array, uint32, byte array)</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Array of IPv6 address structures. Each IPv6 address structure is composed of 3 members, the first being a byte array containing the IPv6 address (network byte order), the second a 32-bit integer containing the IPv6 address prefix, and the third a byte array containing the IPv6 address (network byte order) of the gateway associated with this address, if any. If no gateway is given, the third element should be given as all zeros. For the 'auto' method, given IP addresses are appended to those returned by automatic configuration. Addresses cannot be used with the 'shared' or 'link-local' methods as the interface is automatically assigned an address with these methods.</entry>
</row>
<row>
<entry><screen>routes</screen></entry>
<entry><screen>array of (byte array, uint32, byte array, uint32)</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Array of IPv6 route structures. Each IPv6 route structure is composed of 4 members; the first being the destination IPv6 network or address (network byte order) as a byte array, the second the destination network or address IPv6 prefix, the third being the next-hop IPv6 address (network byte order) if any, and the fourth being the route metric. For the 'auto' method, given IP routes are appended to those returned by automatic configuration. Routes cannot be used with the 'shared' or 'link-local' methods because there is no upstream network.</entry>
</row>
<row>
@@ -1076,7 +1223,7 @@
<entry><screen>service</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified serivce. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.</entry>
+ <entry>If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.</entry>
</row>
<row>
<entry><screen>username</screen></entry>
@@ -1151,6 +1298,66 @@
</tgroup>
</table>
<table>
+ <title>team setting</title>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Key Name</entry>
+ <entry>Value Type</entry>
+ <entry>Default Value</entry>
+ <entry>Value Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><screen>name</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen>team</screen></entry>
+ <entry>The setting's name; these names are defined by the specification and cannot be changed after the object has been created. Each setting class has a name, and all objects of that class share the same name.</entry>
+ </row>
+ <row>
+ <entry><screen>interface-name</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>The name of the virtual in-kernel team network interface</entry>
+ </row>
+ <row>
+ <entry><screen>config</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>JSON configuration for the team network interface. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
+<table>
+ <title>team-port setting</title>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Key Name</entry>
+ <entry>Value Type</entry>
+ <entry>Default Value</entry>
+ <entry>Value Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><screen>name</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen>team-port</screen></entry>
+ <entry>The setting's name; these names are defined by the specification and cannot be changed after the object has been created. Each setting class has a name, and all objects of that class share the same name.</entry>
+ </row>
+ <row>
+ <entry><screen>config</screen></entry>
+ <entry><screen>string</screen></entry>
+ <entry><screen></screen></entry>
+ <entry>JSON configuration for the team port. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the dafault configuration is used. See man teamd.conf for the format details.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
+<table>
<title>vlan setting</title>
<tgroup cols="4">
<thead>
@@ -1172,13 +1379,13 @@
<entry><screen>interface-name</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>If given, specifies the kernel name of the VLAN interface. If not given, a default name will be constructed from the interface described by the parent interface and the 'id' property, ex 'eth2.1'. The parent interface may be given by the 'parent' property or by a hardware address property, eg the 'wired' settings' 'mac-address' property.</entry>
+ <entry>If given, specifies the kernel name of the VLAN interface. If not given, a default name will be constructed from the interface described by the parent interface and the 'id' property, ex 'eth2.1'. The parent interface may be given by the 'parent' property or by the 'mac-address' property of a 'wired' setting.</entry>
</row>
<row>
<entry><screen>parent</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain a hardware address in a hardware-specific setting, like the 'wired' settings' 'mac-address' property.</entry>
+ <entry>If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain a 'wired' setting with a 'mac-address' property.</entry>
</row>
<row>
<entry><screen>id</screen></entry>
@@ -1195,13 +1402,13 @@
<row>
<entry><screen>ingress-priority-map</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format 'from:to' where both 'from' and 'to' are unsigned integers, ie '7:3'.</entry>
</row>
<row>
<entry><screen>egress-priority-map</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format 'from:to' where both 'from' and 'to' are unsigned integers, ie '7:3'.</entry>
</row>
</tbody>
@@ -1240,13 +1447,13 @@
<row>
<entry><screen>data</screen></entry>
<entry><screen>dict of (string::string)</screen></entry>
- <entry><screen>[ ]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.</entry>
</row>
<row>
<entry><screen>secrets</screen></entry>
<entry><screen>dict of (string::string)</screen></entry>
- <entry><screen>[ ]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings.</entry>
</row>
</tbody>
@@ -1331,7 +1538,7 @@
<entry><screen>mac-address</screen></entry>
<entry><screen>byte array</screen></entry>
<entry><screen>[]</screen></entry>
- <entry>If specified, this connection will only apply to the ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</entry>
+ <entry>If specified, this connection will only apply to the Ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</entry>
</row>
<row>
<entry><screen>cloned-mac-address</screen></entry>
@@ -1342,8 +1549,8 @@
<row>
<entry><screen>mac-address-blacklist</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>If specified, this connection will never apply to the ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).</entry>
+ <entry><screen></screen></entry>
+ <entry>If specified, this connection will never apply to the Ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).</entry>
</row>
<row>
<entry><screen>mtu</screen></entry>
@@ -1354,7 +1561,7 @@
<row>
<entry><screen>s390-subchannels</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Identifies specific subchannels that this network device uses for communcation with z/VM or s390 host. Like the 'mac-address' property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.</entry>
</row>
<row>
@@ -1366,7 +1573,7 @@
<row>
<entry><screen>s390-options</screen></entry>
<entry><screen>dict of (string::string)</screen></entry>
- <entry><screen>[ ]</screen></entry>
+ <entry><screen></screen></entry>
<entry>Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include 'portno', 'layer2', 'portname', 'protocol', among others.</entry>
</row>
</tbody>
@@ -1394,25 +1601,25 @@
<entry><screen>ssid</screen></entry>
<entry><screen>byte array</screen></entry>
<entry><screen>[]</screen></entry>
- <entry>SSID of the WiFi network. Must be specified.</entry>
+ <entry>SSID of the Wi-Fi network. Must be specified.</entry>
</row>
<row>
<entry><screen>mode</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>WiFi network mode; one of 'infrastructure', 'adhoc' or 'ap'. If blank, infrastructure is assumed.</entry>
+ <entry>Wi-Fi network mode; one of 'infrastructure', 'adhoc' or 'ap'. If blank, infrastructure is assumed.</entry>
</row>
<row>
<entry><screen>band</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>802.11 frequency band of the network. One of 'a' for 5GHz 802.11a or 'bg' for 2.4GHz 802.11. This will lock associations to the WiFi network to the specific band, i.e. if 'a' is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.</entry>
+ <entry>802.11 frequency band of the network. One of 'a' for 5GHz 802.11a or 'bg' for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if 'a' is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.</entry>
</row>
<row>
<entry><screen>channel</screen></entry>
<entry><screen>uint32</screen></entry>
<entry><screen>0</screen></entry>
- <entry>Wireless channel to use for the WiFi connection. The device will only join (or create for Ad-Hoc networks) a WiFi network on the specified channel. Because channel numbers overlap between bands, this property also requires the 'band' property to be set.</entry>
+ <entry>Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the 'band' property to be set.</entry>
</row>
<row>
<entry><screen>bssid</screen></entry>
@@ -1436,18 +1643,18 @@
<entry><screen>mac-address</screen></entry>
<entry><screen>byte array</screen></entry>
<entry><screen>[]</screen></entry>
- <entry>If specified, this connection will only apply to the WiFi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</entry>
+ <entry>If specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</entry>
</row>
<row>
<entry><screen>cloned-mac-address</screen></entry>
<entry><screen>byte array</screen></entry>
<entry><screen>[]</screen></entry>
- <entry>If specified, request that the WiFi device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</entry>
+ <entry>If specified, request that the Wi-Fi device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</entry>
</row>
<row>
<entry><screen>mac-address-blacklist</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>A list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg '00:11:22:33:44:55').</entry>
</row>
<row>
@@ -1459,8 +1666,8 @@
<row>
<entry><screen>seen-bssids</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55') that have been detected as part of the WiFI network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BBSID list of NetworkManager. The changes you make to this property will not be preserved.</entry>
+ <entry><screen></screen></entry>
+ <entry>A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55') that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved.</entry>
</row>
<row>
<entry><screen>security</screen></entry>
@@ -1499,7 +1706,7 @@
<entry><screen>key-mgmt</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>Key management used for the connection. One of 'none' (WEP), 'ieee8021x' (Dynamic WEP), 'wpa-none' (WPA-PSK Ad-Hoc), 'wpa-psk' (infrastructure WPA-PSK), or 'wpa-eap' (WPA-Enterprise). This property must be set for any WiFi connection that uses security.</entry>
+ <entry>Key management used for the connection. One of 'none' (WEP), 'ieee8021x' (Dynamic WEP), 'wpa-none' (WPA-PSK Ad-Hoc), 'wpa-psk' (infrastructure WPA-PSK), or 'wpa-eap' (WPA-Enterprise). This property must be set for any Wi-Fi connection that uses security.</entry>
</row>
<row>
<entry><screen>wep-tx-keyidx</screen></entry>
@@ -1516,19 +1723,19 @@
<row>
<entry><screen>proto</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>List of strings specifying the allowed WPA protocol versions to use. Each element may be one 'wpa' (allow WPA) or 'rsn' (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed.</entry>
</row>
<row>
<entry><screen>pairwise</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'wep40', 'wep104', 'tkip' or 'ccmp'.</entry>
+ <entry><screen></screen></entry>
+ <entry>A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'tkip' or 'ccmp'.</entry>
</row>
<row>
<entry><screen>group</screen></entry>
<entry><screen>array of string</screen></entry>
- <entry><screen>[]</screen></entry>
+ <entry><screen></screen></entry>
<entry>A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'wep40', 'wep104', 'tkip', or 'ccmp'.</entry>
</row>
<row>
@@ -1577,7 +1784,7 @@
<entry><screen>psk</screen></entry>
<entry><screen>string</screen></entry>
<entry><screen></screen></entry>
- <entry>Pre-Shared-Key for WPA networks. If the key is 64-characters long, it must contain only hexadecimal characters and is interpreted as a hexadecimal WPA key. Otherwise, the key must be between 8 and 63 ASCII characters (as specified in the 802.11i standard) and is interpreted as a WPA passphrase, and is hashed to derive the actual WPA-PSK used when connecting to the WiFi network.</entry>
+ <entry>Pre-Shared-Key for WPA networks. If the key is 64-characters long, it must contain only hexadecimal characters and is interpreted as a hexadecimal WPA key. Otherwise, the key must be between 8 and 63 ASCII characters (as specified in the 802.11i standard) and is interpreted as a WPA passphrase, and is hashed to derive the actual WPA-PSK used when connecting to the Wi-Fi network.</entry>
</row>
<row>
<entry><screen>psk-flags</screen></entry>
diff --git a/docs/api/spec.html b/docs/api/spec.html
index 0573bc4fa..84819cabc 100644
--- a/docs/api/spec.html
+++ b/docs/api/spec.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.8.10</title><style type="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.10.0</title><style type="text/css">
body {
font-family: sans-serif;
@@ -97,7 +97,7 @@
margin-right: 4em;
}
- </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.8.10</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
+ </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.10.0</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
<p>This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
@@ -111,7 +111,7 @@ General Public License for more details.</p>
<p>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.</p>
-</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
+</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Team">org.freedesktop.NetworkManager.Device.Team</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Generic">org.freedesktop.NetworkManager.Device.Generic</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
<h1><a name="org.freedesktop.NetworkManager" id="org.freedesktop.NetworkManager"></a>org.freedesktop.NetworkManager</h1><h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.GetDevices" id="org.freedesktop.NetworkManager.GetDevices">GetDevices</a> (
) &#8594;
@@ -140,17 +140,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Activate a connection using the supplied device.
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>o</code></dt><dd>
- The connection to activate the devices with.
+ The connection to activate. If "/" is given, a valid device path must
+ be given, and NetworkManager picks the best connection to activate for
+ the given device. VPN connections must always pass a valid connection
+ path.
</dd><dt><code>device</code> -
<code>o</code></dt><dd>
- The object path of device to be activated for physical connections. This parameter is ignored for VPN connections, because the specific_object (if provided) specifies the device to use.
+ The object path of device to be activated for physical connections.
+ This parameter is ignored for VPN connections, because the
+ specific_object (if provided) specifies the device to use.
</dd><dt><code>specific_object</code> -
<code>o</code></dt><dd>
The path of a connection-type-specific object this activation should use.
This parameter is currently ignored for wired and mobile broadband connections,
and the value of "/" should be used (ie, no specific object). For WiFi
connections, pass the object path of a specific AP from the card's scan
- list, or "/" to pick and AP automatically. For VPN connections, pass
+ list, or "/" to pick an AP automatically. For VPN connections, pass
the object path of an ActiveConnection object that should serve as the
"base" connection (to which the VPN connections lifetime will be tied),
or pass "/" and NM will automatically use the current default device.
@@ -254,13 +259,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<code>s</code></dt><dd>
A combination of logging domains separated by commas (','), or "NONE"
to disable logging. Each domain enables logging for operations
- related to that domain. Available domains are: [HW, RFKILL, ETHER,
+ related to that domain. Available domains are: [PLATFORM, RFKILL, ETHER,
WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS,
VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE,
- OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN]. In addition to
- these domains, the following special domains can be used: [NONE, ALL,
- DEFAULT, DHCP, IP]. If an empty string is given, the log level is
- changed but the current set of log domains remains unchanged.
+ OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN, BRIDGE, DBUS_PROPS,
+ TEAM, CONCHECK, DCB, DISPATCH].
+ In addition to these domains, the following special domains can be used:
+ [NONE, ALL, DEFAULT, DHCP, IP]. You can also specify that some domains
+ should log at a different level from the default by appending a colon (':')
+ and a log level (eg, 'WIFI:DEBUG'). If an empty string is given, the
+ log level is changed but the current set of log domains remains
+ unchanged.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.GetLogging" id="org.freedesktop.NetworkManager.GetLogging">GetLogging</a> (
) &#8594;
@@ -328,7 +337,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>device_path</code> -
<code>o</code></dt><dd>
The object path of the device that was just removed.
- </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>NetworkingEnabled</code> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Devices</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ The list of network devices/interfaces NetworkManager knows about.
+ </dd><dt><code>NetworkingEnabled</code> -
<code>b</code> -
<code>(read)</code></dt><dd>
Indicates if overall networking is currently enabled or not. See the
@@ -376,6 +389,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
The object path of an active connection that is currently
being activated and which is expected to become the new
PrimaryConnection when it finishes activating.
+ </dd><dt><code>Startup</code> -
+ <code>b</code> -
+ <code>(read)</code></dt><dd>
+ Indicates whether NM is still starting up; this becomes FALSE
+ when NM has finished attempting to activate every connection
+ that it might be able to activate at startup.
</dd><dt><code>Version</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
@@ -534,9 +553,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dt><dd>
Flags describing the capabilities of the device.
</dd><dt><code>Ip4Address</code> -
- <code>i</code> -
+ <code>u</code> -
<code>(read)</code></dt><dd>
- The IPv4 address bound to the device. FIXME: what about devices with &gt;1 IP address?
+ DEPRECATED; use the 'Addresses' property of the 'Ip4Config' object instead.
</dd><dt><code>State</code> -
<code>u</code> -
<code>(read)</code>
@@ -600,6 +619,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<code>ao</code> -
<code>(read)</code></dt><dd>
An array of object paths of every configured connection that is currently 'available' through this device.
+ </dd><dt><code>PhysicalPortId</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ If non-empty, an (opaque) indicator of the physical network
+ port associated with the device. This can be used to recognize
+ when two seemingly-separate hardware devices are actually just
+ different virtual interfaces to the same physical port.
+ </dd><dt><code>Mtu</code> -
+ <code>u</code> -
+ <code>(read)</code></dt><dd>
+ The device MTU (maximum transmission unit).
</dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_DEVICE_STATE" id="type-NM_DEVICE_STATE">NM_DEVICE_STATE</a></h3><dl><dt><code>NM_DEVICE_STATE_UNKNOWN = 0</code></dt><dd>
The device is in an unknown state.
</dd><dt><code>NM_DEVICE_STATE_UNMANAGED = 10</code></dt><dd>
@@ -652,6 +682,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
The device is an ADSL device supporting PPPoE and PPPoATM protocols.
</dd><dt><code>NM_DEVICE_TYPE_BRIDGE = 13</code></dt><dd>
The device is a bridge interface.
+ </dd><dt><code>NM_DEVICE_TYPE_GENERIC = 14</code></dt><dd>
+ The device is a generic interface type unrecognized by NetworkManager.
+ </dd><dt><code>NM_DEVICE_TYPE_TEAM = 15</code></dt><dd>
+ The device is a team master interface.
</dd></dl><h3><a name="type-NM_DEVICE_STATE_REASON" id="type-NM_DEVICE_STATE_REASON">NM_DEVICE_STATE_REASON</a></h3><dl><dt><code>NM_DEVICE_STATE_REASON_UNKNOWN = 0</code></dt><dd>
The reason for the device state change is unknown.
</dd><dt><code>NM_DEVICE_STATE_REASON_NONE = 1</code></dt><dd>
@@ -762,6 +796,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
The 802.11 Wi-Fi network could not be found.
</dd><dt><code>NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54</code></dt><dd>
A secondary connection of the base connection failed.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55</code></dt><dd>
+ DCB or FCoE setup failed.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56</code></dt><dd>
+ teamd control failed.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_MODEM_FAILED = 57</code></dt><dd>
+ Modem failed or no longer available.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58</code></dt><dd>
+ Modem now ready and available.
+ </dd><dt><code>NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59</code></dt><dd>
+ The SIM PIN was incorrect.
</dd></dl><h2>Sets of flags:</h2><h3 xmlns=""><a name="type-NM_DEVICE_CAP" id="type-NM_DEVICE_CAP">NM_DEVICE_CAP</a></h3><dl><dt><code>NM_DEVICE_CAP_NONE = 0x0</code></dt><dd>Null capability.</dd><dt><code>NM_DEVICE_CAP_NM_SUPPORTED = 0x1</code></dt><dd>The device is supported by NetworkManager.</dd><dt><code>NM_DEVICE_CAP_CARRIER_DETECT = 0x2</code></dt><dd>The device supports carrier detection.</dd></dl><h2>Structure types:</h2><div class="struct"><h3><a name="type-NM_DEVICE_STATE_REASON_STRUCT" id="type-NM_DEVICE_STATE_REASON_STRUCT">NM_DEVICE_STATE_REASON_STRUCT</a> - (
u: state, u: reason
)
@@ -807,10 +851,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
) &#8594;
ao</h3><div class="docstring">
- Get the list of access points visible to this device.
+ DEPRECATED. Get the list of access points visible to this device. Note
+ that this list does not include access points which hide their SSID. To
+ retrieve a list of all access points (including hidden ones) use the
+ GetAllAccessPoints() method.
+ </div><div><h4>Returns</h4><dl><dt><code>access_points</code> -
+ <code>ao</code></dt><dd>
+ List of access point object paths.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Device.Wireless.GetAllAccessPoints" id="org.freedesktop.NetworkManager.Device.Wireless.GetAllAccessPoints">GetAllAccessPoints</a> (
+
+ ) &#8594;
+ ao</h3><div class="docstring">
+ Get the list of all access points visible to this device, including
+ hidden ones for which the SSID is not yet known.
</div><div><h4>Returns</h4><dl><dt><code>access_points</code> -
<code>ao</code></dt><dd>
- List of access point object paths
+ List of access point object paths.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Device.Wireless.RequestScan" id="org.freedesktop.NetworkManager.Device.Wireless.RequestScan">RequestScan</a> (
a{sv}: options
) &#8594;
@@ -860,6 +916,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<code>u</code> -
<code>(read)</code></dt><dd>
The bit rate currently used by the wireless device, in kilobits/second (Kb/s).
+ </dd><dt><code>AccessPoints</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ List of object paths of access point visible to this wireless device.
</dd><dt><code>ActiveAccessPoint</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
@@ -992,7 +1052,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>nsp</code> -
<code>o</code></dt><dd>
The object path of the NSP that has disappeared.
- </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>HwAddress</code> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Nsps</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ List of object paths of Network Service Providers (NSPs) visible to this
+ WiMAX device.
+ </dd><dt><code>HwAddress</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
Hardware address of the device.
@@ -1093,6 +1158,45 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
slaved to this device.
</dd></dl>
+ <h1><a name="org.freedesktop.NetworkManager.Device.Team" id="org.freedesktop.NetworkManager.Device.Team"></a>org.freedesktop.NetworkManager.Device.Team</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.Team.PropertiesChanged" id="org.freedesktop.NetworkManager.Device.Team.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>HwAddress</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ Hardware address of the device.
+ </dd><dt><code>Carrier</code> -
+ <code>b</code> -
+ <code>(read)</code></dt><dd>
+ Indicates whether the physical carrier is found (e.g. whether a cable is plugged in or not).
+ </dd><dt><code>Slaves</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ Array of object paths representing devices which are currently
+ slaved to this device.
+ </dd></dl>
+
+ <h1><a name="org.freedesktop.NetworkManager.Device.Generic" id="org.freedesktop.NetworkManager.Device.Generic"></a>org.freedesktop.NetworkManager.Device.Generic</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.Generic.PropertiesChanged" id="org.freedesktop.NetworkManager.Device.Generic.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>HwAddress</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ Hardware address of the device.
+ </dd><dt><code>TypeDescription</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ A (non-localized) description of the interface type, if known.
+ </dd></dl>
+
<h1><a name="org.freedesktop.NetworkManager.Device.Vlan" id="org.freedesktop.NetworkManager.Device.Vlan"></a>org.freedesktop.NetworkManager.Device.Vlan</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.Vlan.PropertiesChanged" id="org.freedesktop.NetworkManager.Device.Vlan.PropertiesChanged">PropertiesChanged</a> (
a{sv}: properties
)</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
@@ -1146,34 +1250,56 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Network type of the NSP.
<dl><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN = 0x0</code></dt><dd>Unknown network.</dd><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_HOME = 0x1</code></dt><dd>Home network.</dd><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_PARTNER = 0x2</code></dt><dd>Partner network.</dd><dt><code>NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER = 0x3</code></dt><dd>Roaming partner network.</dd></dl>
- <h1><a name="org.freedesktop.NetworkManager.IP4Config" id="org.freedesktop.NetworkManager.IP4Config"></a>org.freedesktop.NetworkManager.IP4Config</h1><p>Interface has no methods.</p><p>Interface has no signals.</p><h2>Properties:</h2><dl><dt><code>Addresses</code> -
+ <h1><a name="org.freedesktop.NetworkManager.IP4Config" id="org.freedesktop.NetworkManager.IP4Config"></a>org.freedesktop.NetworkManager.IP4Config</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.IP4Config.PropertiesChanged" id="org.freedesktop.NetworkManager.IP4Config.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</dd><dt><code>Addresses</code> -
<code>aau</code> -
<code>(read)</code></dt><dd>Array of tuples of IPv4 address/prefix/gateway. All 3
elements of each tuple are in network byte order. Essentially:
[(addr, prefix, gateway), (addr, prefix, gateway), ...]
- </dd><dt><code>Nameservers</code> -
- <code>au</code> -
- <code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>WinsServers</code> -
- <code>au</code> -
- <code>(read)</code></dt><dd>The Windows Internet Name Service servers associated with the connection. Each address is in network byte order.</dd><dt><code>Domains</code> -
- <code>as</code> -
- <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Routes</code> -
+ </dd><dt><code>Routes</code> -
<code>aau</code> -
<code>(read)</code></dt><dd>Tuples of IPv4 route/prefix/next-hop/metric. All 4 elements
of each tuple are in network byte order. 'route' and 'next hop' are IPv4
addresses, while prefix and metric are simple unsigned integers. Essentially:
[(route, prefix, next-hop, metric), (route, prefix, next-hop, metric), ...]
- </dd></dl>
+ </dd><dt><code>Nameservers</code> -
+ <code>au</code> -
+ <code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>Domains</code> -
+ <code>as</code> -
+ <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Searches</code> -
+ <code>as</code> -
+ <code>(read)</code></dt><dd>A list of dns searches.</dd><dt><code>WinsServers</code> -
+ <code>au</code> -
+ <code>(read)</code></dt><dd>The Windows Internet Name Service servers associated with the connection. Each address is in network byte order.</dd></dl>
- <h1><a name="org.freedesktop.NetworkManager.IP6Config" id="org.freedesktop.NetworkManager.IP6Config"></a>org.freedesktop.NetworkManager.IP6Config</h1><p>Interface has no methods.</p><p>Interface has no signals.</p><h2>Properties:</h2><dl><dt><code>Addresses</code> -
+ <h1><a name="org.freedesktop.NetworkManager.IP6Config" id="org.freedesktop.NetworkManager.IP6Config"></a>org.freedesktop.NetworkManager.IP6Config</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.IP6Config.PropertiesChanged" id="org.freedesktop.NetworkManager.IP6Config.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</dd><dt><code>Addresses</code> -
<code>a(ayuay)</code> -
- <code>(read)</code></dt><dd>Tuples of IPv6 address/prefix/gateway.</dd><dt><code>Nameservers</code> -
+ <code>(read)</code></dt><dd>Tuples of IPv6 address/prefix/gateway.</dd><dt><code>Routes</code> -
+ <code>a(ayuayu)</code> -
+ <code>(read)</code></dt><dd>Tuples of IPv6 route/prefix/next-hop/metric.</dd><dt><code>Nameservers</code> -
<code>aay</code> -
<code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>Domains</code> -
<code>as</code> -
- <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Routes</code> -
- <code>a(ayuayu)</code> -
- <code>(read)</code></dt><dd>Tuples of IPv6 route/prefix/next-hop/metric.</dd></dl>
+ <code>(read)</code></dt><dd>A list of domains this address belongs to.</dd><dt><code>Searches</code> -
+ <code>as</code> -
+ <code>(read)</code></dt><dd>A list of dns searches.</dd></dl>
<h1><a name="org.freedesktop.NetworkManager.DHCP4Config" id="org.freedesktop.NetworkManager.DHCP4Config"></a>org.freedesktop.NetworkManager.DHCP4Config</h1>
Options and configuration returned by the IPv4 DHCP server.
@@ -1236,6 +1362,62 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div><div><h4>Returns</h4><dl><dt><code>path</code> -
<code>o</code></dt><dd>
Object path of the new connection that was just added.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.AddConnectionUnsaved" id="org.freedesktop.NetworkManager.Settings.AddConnectionUnsaved">AddConnectionUnsaved</a> (
+ a{sa{sv}}: connection
+ ) &#8594;
+ o</h3><div class="docstring">
+ Add new connection but do not save it to disk immediately. This
+ operation does not start the network connection unless (1) device is
+ idle and able to connect to the network described by the new connection,
+ and (2) the connection is allowed to be started automatically.
+
+ Use the 'Save' method on the connection to save these changes
+ to disk. Note that unsaved changes will be lost if the
+ connection is reloaded from disk (either automatically on file
+ change or due to an explicit ReloadConnections call).
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>a{sa{sv}}</code></dt><dd>
+ Connection settings and properties.
+ </dd></dl></div><div><h4>Returns</h4><dl><dt><code>path</code> -
+ <code>o</code></dt><dd>
+ Object path of the new connection that was just added.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.LoadConnections" id="org.freedesktop.NetworkManager.Settings.LoadConnections">LoadConnections</a> (
+ as: filenames
+ ) &#8594;
+ b, as</h3><div class="docstring">
+ Loads or reloads the indicated connections from disk. You
+ should call this after making changes directly to an on-disk
+ connection file to make sure that NetworkManager sees the
+ changes. (If "monitor-connection-files" in NetworkManager.conf
+ is "true", then this will have no real effect, but is
+ harmless.) As with AddConnection(), this operation does not
+ necessarily start the network connection.
+ </div><div><h4>Parameters</h4><dl><dt><code>filenames</code> -
+ <code>as</code></dt><dd>
+ Array of paths to on-disk connection profiles in directories
+ monitored by NetworkManager.
+ </dd></dl></div><div><h4>Returns</h4><dl><dt><code>status</code> -
+ <code>b</code></dt><dd>
+ Success or failure of the operation as a whole. True if
+ NetworkManager at least tried to load the indicated
+ connections, even if it did not succeed. False if an error
+ occurred before trying to load the connections (eg,
+ permission denied).
+ </dd><dt><code>failures</code> -
+ <code>as</code></dt><dd>
+ Paths of connection files that could not be loaded.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.ReloadConnections" id="org.freedesktop.NetworkManager.Settings.ReloadConnections">ReloadConnections</a> (
+
+ ) &#8594;
+ b</h3><div class="docstring">
+ Tells NetworkManager to reload all connection files from disk,
+ including noticing any added or deleted connection files. By
+ default, connections are re-read automatically any time they
+ change, so you only need to use this command if you have set
+ "monitor-connection-files=false" in NetworkManager.conf.
+ </div><div><h4>Returns</h4><dl><dt><code>status</code> -
+ <code>b</code></dt><dd>
+ Success or failure.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.SaveHostname" id="org.freedesktop.NetworkManager.Settings.SaveHostname">SaveHostname</a> (
s: hostname
) &#8594;
@@ -1265,7 +1447,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>o</code></dt><dd>
Object path of the new connection.
- </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Hostname</code> -
+ </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.ConnectionRemoved" id="org.freedesktop.NetworkManager.Settings.ConnectionRemoved">ConnectionRemoved</a> (
+ o: connection
+ )</h3><div class="docstring">
+ Emitted when a connection is no longer available. This happens when
+ the connection is deleted or if it is no longer accessible by any of
+ the system's logged-in users. After receipt of this signal, the
+ connection no longer exists and cannot be used. Also see the
+ Settings.Connection.Removed signal.
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>o</code></dt><dd>
+ Object path of the removed connection.
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Connections</code> -
+ <code>ao</code> -
+ <code>(read)</code></dt><dd>
+ List of object paths of available network connection profiles.
+ </dd><dt><code>Hostname</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
The machine hostname stored in persistent configuration.
@@ -1282,10 +1479,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
a{sa{sv}}: properties
) &#8594;
nothing</h3><div class="docstring">
- Update the connection with new settings and properties, replacing
- all previous settings and properties. Secrets may be part of the
- update request, and will be either stored in persistent storage or
- given to a Secret Agent for storage, depending on the request.
+ Update the connection with new settings and properties (replacing
+ all previous settings and properties) and save the connection to
+ disk. Secrets may be part of the update request, and will be either
+ stored in persistent storage or sent to a Secret Agent for storage,
+ depending on the flags associated with each secret.
+ </div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sa{sv}}</code></dt><dd>
+ New connection settings, properties, and (optionally) secrets.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.UpdateUnsaved" id="org.freedesktop.NetworkManager.Settings.Connection.UpdateUnsaved">UpdateUnsaved</a> (
+ a{sa{sv}}: properties
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Update the connection with new settings and properties (replacing
+ all previous settings and properties) but do not immediately save
+ the connection to disk. Secrets may be part of the update request
+ and may sent to a Secret Agent for storage, depending on the
+ flags associated with each secret.
+
+ Use the 'Save' method to save these changes to disk. Note
+ that unsaved changes will be lost if the connection is
+ reloaded from disk (either automatically on file change or
+ due to an explicit ReloadConnections call).
</div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
<code>a{sa{sv}}</code></dt><dd>
New connection settings, properties, and (optionally) secrets.
@@ -1324,7 +1539,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
</dt><dd>
Nested settings maps containing secrets.
- </dd></dl></div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Updated" id="org.freedesktop.NetworkManager.Settings.Connection.Updated">Updated</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Save" id="org.freedesktop.NetworkManager.Settings.Connection.Save">Save</a> (
+
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Saves a "dirty" connection (that had previously been
+ updated with UpdateUnsaved) to persistent storage.
+ </div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Updated" id="org.freedesktop.NetworkManager.Settings.Connection.Updated">Updated</a> (
)</h3><div class="docstring">
Emitted when any settings or permissions change. When handling
@@ -1336,9 +1557,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
)</h3><div class="docstring">
Emitted when this connection is no longer available. This
happens when the connection is deleted or if it is no longer
- accessable by any of the system's logged-in users. After
- receipt of this signal, the object no longer exists.
- </div></div><p>Interface has no properties.</p>
+ accessible by any of the system's logged-in users. After
+ receipt of this signal, the object no longer exists. Also
+ see the Settings.ConnectionRemoved signal.
+ </div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.PropertiesChanged" id="org.freedesktop.NetworkManager.Settings.Connection.PropertiesChanged">PropertiesChanged</a> (
+ a{sv}: properties
+ )</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ A dictionary mapping property names to variant boxed values.
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Unsaved</code> -
+ <code>b</code> -
+ <code>(read)</code></dt><dd>
+ If set, indicates that the in-memory state of the
+ connection does not match the on-disk state. This flag
+ will be set when UpdateUnsaved() is called or when any
+ connection details change, and cleared when the connection
+ is saved to disk via Save() or from internal operations.
+ </dd></dl>
<h1><a name="org.freedesktop.NetworkManager.Connection.Active" id="org.freedesktop.NetworkManager.Connection.Active"></a>org.freedesktop.NetworkManager.Connection.Active</h1>
@@ -1356,32 +1593,85 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
A dictionary mapping property names to variant boxed values
</dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Connection</code> -
<code>o</code> -
- <code>(read)</code></dt><dd>The path of the connection.</dd><dt><code>SpecificObject</code> -
+ <code>(read)</code></dt><dd>
+ The path of the connection.
+ </dd><dt><code>SpecificObject</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
A specific object associated with the active connection. This property
reflects the specific object used during connection activation, and will
not change over the lifetime of the ActiveConnection once set.
+ </dd><dt><code>Id</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ The ID of the connection, provided as a convenience so that clients
+ do not have to retrieve all connection details.
</dd><dt><code>Uuid</code> -
<code>s</code> -
<code>(read)</code></dt><dd>
The UUID of the connection, provided as a convenience so that clients
do not have to retrieve all connection details.
+ </dd><dt><code>Type</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ The type of the connection, provided as a convenience so that clients
+ do not have to retrieve all connection details.
</dd><dt><code>Devices</code> -
<code>ao</code> -
- <code>(read)</code></dt><dd>Array of object paths representing devices which are part of this active connection.</dd><dt><code>State</code> -
+ <code>(read)</code></dt><dd>
+ Array of object paths representing devices which are part of this active
+ connection.
+ </dd><dt><code>State</code> -
<code>u</code> -
<code>(read)</code>
(<a xmlns="" href="#type-NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a>)
- </dt><dd>The state of this active connection.</dd><dt><code>Default</code> -
+ </dt><dd>
+ The state of this active connection.
+ </dd><dt><code>Default</code> -
<code>b</code> -
- <code>(read)</code></dt><dd>Whether this active connection is the default IPv4 connection, i.e. whether it currently owns the default IPv4 route.</dd><dt><code>Default6</code> -
+ <code>(read)</code></dt><dd>
+ Whether this active connection is the default IPv4 connection, i.e.
+ whether it currently owns the default IPv4 route.
+ </dd><dt><code>Ip4Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Ip4Config object describing the configuration of the
+ connection. Only valid when the connection is in the
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ </dd><dt><code>Dhcp4Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Dhcp4Config object describing the DHCP options
+ returned by the DHCP server (assuming the connection used DHCP). Only
+ valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ state.
+ </dd><dt><code>Default6</code> -
<code>b</code> -
- <code>(read)</code></dt><dd>Whether this active connection is the default IPv6 connection, i.e. whether it currently owns the default IPv6 route.</dd><dt><code>Vpn</code> -
+ <code>(read)</code></dt><dd>
+ Whether this active connection is the default IPv6 connection, i.e.
+ whether it currently owns the default IPv6 route.
+ </dd><dt><code>Ip6Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Ip6Config object describing the configuration of the
+ connection. Only valid when the connection is in the
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ </dd><dt><code>Dhcp6Config</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the Dhcp6Config object describing the DHCP options
+ returned by the DHCP server (assuming the connection used DHCP). Only
+ valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ state.
+ </dd><dt><code>Vpn</code> -
<code>b</code> -
- <code>(read)</code></dt><dd>Whether this active connection is also a VPN connection.</dd><dt><code>Master</code> -
+ <code>(read)</code></dt><dd>
+ Whether this active connection is also a VPN connection.
+ </dd><dt><code>Master</code> -
<code>o</code> -
- <code>(read)</code></dt><dd>The path to the master device if the connection is a slave.</dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_ACTIVE_CONNECTION_STATE" id="type-NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a></h3><dl><dt><code>NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0</code></dt><dd>
+ <code>(read)</code></dt><dd>
+ The path to the master device if the connection is a slave.
+ </dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_ACTIVE_CONNECTION_STATE" id="type-NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a></h3><dl><dt><code>NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0</code></dt><dd>
The active connection is in an unknown state.
</dd><dt><code>NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1</code></dt><dd>
The connection is activating.
@@ -1408,6 +1698,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
identifier is limited in length to 255 characters with a minimum
of 3 characters. An example valid identifier is 'org.gnome.nm-applet'
(without quotes).
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AgentManager.RegisterWithCapabilities" id="org.freedesktop.NetworkManager.AgentManager.RegisterWithCapabilities">RegisterWithCapabilities</a> (
+ s: identifier, u: capabilities
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Like Register() but indicates agent capabilities to NetworkManager.
+ </div><div><h4>Parameters</h4><dl><dt><code>identifier</code> -
+ <code>s</code></dt><dd>
+ See the Register() method's identifier argument.
+ </dd><dt><code>capabilities</code> -
+ <code>u</code>
+ (<a xmlns="" href="#type-NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a>)
+ </dt><dd>
+ Indicates various agent capabilities to NetworkManager.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AgentManager.Unregister" id="org.freedesktop.NetworkManager.AgentManager.Unregister">Unregister</a> (
) &#8594;
@@ -1426,7 +1729,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
itself and should not expect its SaveSecrets() method to be called.
SaveSecrets() will be called eg if some program other than the
agent itself (like a connection editor) changes the secrets out of
- band.
+ band. The agent should implement this D-Bus interface on an object
+ with the path /org/freedesktop/NetworkManager/SecretAgent.
<h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.GetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.GetSecrets">GetSecrets</a> (
a{sa{sv}}: connection, o: connection_path, s: setting_name, as: hints, u: flags
) &#8594;
@@ -1436,7 +1740,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
and the user enters new secrets, the agent is expected to save
the new secrets to persistent storage (if the secret's flags
include AGENT_OWNED) as NetworkManager will not send these
- secrets back to the same agent via a SaveSecrets() call.
+ secrets back to the same agent via a SaveSecrets() call. If
+ the user canceled any interaction, the agent should return the
+ UserCanceled error (see below).
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>a{sa{sv}}</code>
(<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
@@ -1463,7 +1769,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
required, so in some cases no hints may be given. The Agent
should return any secrets it has, or that it thinks are
required, regardless of what hints NetworkManager sends
- in this request.
+ in this request. Some hints have special prefixes that
+ provide information to the agent; for example, VPN requests
+ may send server-specific messages prefixed with
+ "x-vpn-message:".
</dd><dt><code>flags</code> -
<code>u</code>
(<a xmlns="" href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a>)
@@ -1480,7 +1789,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Nested settings maps containing secrets. Each setting MUST
contain at least the 'name' field, containing the name of
the setting, and one or more secrets.
- </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets">CancelGetSecrets</a> (
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.SecretAgent.NotAuthorized</code></dt><dd>
+ Should be returned when the process requesting secrets is
+ not authorized to do so (like if the caller is not root
+ or not NetworkManager).
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.InvalidConnection</code></dt><dd>
+ Should be returned if the 'connection' argument is invalid.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.UserCanceled</code></dt><dd>
+ Should be returned when the user has canceled the request.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.AgentCanceled</code></dt><dd>
+ Should be returned when NetworkManager has requested that
+ the agent cancel the request.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.InternalError</code></dt><dd>
+ Should be returned if the agent has encountered some internal
+ error processing the request.
+ </dd><dt><code>org.freedesktop.NetworkManager.SecretAgent.NoSecrets</code></dt><dd>
+ Should be returned if there are no available secrets, for
+ example if user interaction is not allowed and there are
+ no secrets stored by the agent for this connection.
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets">CancelGetSecrets</a> (
o: connection_path, s: setting_name
) &#8594;
nothing</h3><div class="docstring">
@@ -1551,7 +1878,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
D-Bus interface, as opposed to automatically initiated by
NetworkManager in response to (for example) scan results or
carrier changes.
- </dd></dl>
+ </dd></dl><h3 xmlns=""><a name="type-NM_SECRET_AGENT_CAPABILITIES" id="type-NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a></h3><dl><dt><code>NM_SECRET_AGENT_CAPABILITY_NONE = 0x0</code></dt><dd>No special capabilities.</dd><dt><code>NM_SECRET_AGENT_CAPABILITY_VPN_HINTS = 0x1</code></dt><dd>
+ The agent supports passing hints to VPN plugin authentication
+ dialogs.
+ </dd></dl>
<h1><a name="org.freedesktop.NetworkManager.VPN.Connection" id="org.freedesktop.NetworkManager.VPN.Connection"></a>org.freedesktop.NetworkManager.VPN.Connection</h1>
@@ -1631,13 +1961,67 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
a{sa{sv}}: connection
) &#8594;
nothing</h3><div class="docstring">
- Tells the plugin to connect.
+ Tells the plugin to connect. Interactive secrets requests (eg, emitting
+ the SecretsRequired signal) are not allowed.
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>a{sa{sv}}</code>
+ (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+ </dt><dd>
+ Describes the connection to be established.
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</code></dt><dd>
+ The plugin is already starting, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</code></dt><dd>
+ The plugin is already connected, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>
+ The plugin is already stopping, and another stop request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>
+ A binary providing the service failed to launch.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.WrongState</code></dt><dd>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.ConnectInteractive" id="org.freedesktop.NetworkManager.VPN.Plugin.ConnectInteractive">ConnectInteractive</a> (
+ a{sa{sv}}: connection, a{sv}: details
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Tells the plugin to connect, allowing interactive secrets requests (eg
+ the plugin is allowed to emit the SecretsRequired signal if the VPN
+ service indicates that it needs additional secrets during the connect
+ process).
</div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
<code>a{sa{sv}}</code>
(<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
</dt><dd>
Describes the connection to be established.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</code></dt><dd>The request could not be processed because the VPN connection is already being started.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</code></dt><dd>The request could not be processed because a VPN connection was already active.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>The request could not be processed because the VPN connection is already being stopped.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>Invalid arguments were passed with the request. FIXME: too general.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>A binary providing the service failed to launch.<em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets" id="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets">NeedSecrets</a> (
+ </dd><dt><code>details</code> -
+ <code>a{sv}</code>
+ (<a xmlns="" href="#type-String_Variant_Map">String_Variant_Map</a>)
+ </dt><dd>
+ Additional details about the Connect process.
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</code></dt><dd>
+ The plugin is already starting, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</code></dt><dd>
+ The plugin is already connected, and another connect request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>
+ The plugin is already stopping, and another stop request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>
+ A binary providing the service failed to launch.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.WrongState</code></dt><dd>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported</code></dt><dd>
+ The request could not be processed because the plugin does not support
+ interactive operations, such as ConnectInteractive() or NewSecrets().
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets" id="org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets">NeedSecrets</a> (
a{sa{sv}}: settings
) &#8594;
s</h3><div class="docstring">
@@ -1650,12 +2034,20 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div><div><h4>Returns</h4><dl><dt><code>setting_name</code> -
<code>s</code></dt><dd>
The setting name within the provided connection that requires secrets, if any.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</code></dt><dd>The request could not be processed because the VPN connection settings were invalid.<em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect" id="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect">Disconnect</a> (
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</code></dt><dd>
+ The request could not be processed because the connection was invalid. It
+ usually means that the connection's VPN setting was missing some required
+ data item or secret.
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect" id="org.freedesktop.NetworkManager.VPN.Plugin.Disconnect">Disconnect</a> (
) &#8594;
nothing</h3><div class="docstring">
Disconnect the plugin.
- </div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>The request could not be processed because the VPN connection is already being stopped.<em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</code></dt><dd>The request could not be processed because the VPN connection was already stopped.<em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig" id="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig">SetConfig</a> (
+ </div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</code></dt><dd>
+ The plugin is already stopping, and another stop request was received.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</code></dt><dd>
+ The plugin is already stopped, and another disconnect request was received.
+ <em>(generic description)</em></dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig" id="org.freedesktop.NetworkManager.VPN.Plugin.SetConfig">SetConfig</a> (
a{sv}: config
) &#8594;
nothing</h3><div class="docstring">
@@ -1695,7 +2087,31 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div><div><h4>Parameters</h4><dl><dt><code>reason</code> -
<code>s</code></dt><dd>
The reason for the failure.
- </dd></dl></div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged" id="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged">StateChanged</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.NewSecrets" id="org.freedesktop.NetworkManager.VPN.Plugin.NewSecrets">NewSecrets</a> (
+ a{sa{sv}}: connection
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Called in response to a SecretsRequired signal to deliver updated secrets
+ or other information to the plugin.
+ </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+ <code>a{sa{sv}}</code>
+ (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+ </dt><dd>
+ Describes the connection including the new secrets.
+ </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.VPN.Error.WrongState</code></dt><dd>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.BadArguments</code></dt><dd>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</code></dt><dd>
+ A binary providing the service failed to launch.
+ <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported</code></dt><dd>
+ The request could not be processed because the plugin does not support
+ interactive operations, such as ConnectInteractive() or NewSecrets().
+ <em>(generic description)</em></dd></dl></div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged" id="org.freedesktop.NetworkManager.VPN.Plugin.StateChanged">StateChanged</a> (
u: state
)</h3><div class="docstring">
Emitted when the plugin state changes.
@@ -1704,7 +2120,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<a xmlns="" href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a>)
</dt><dd>
The new state of the plugin.
- </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Config" id="org.freedesktop.NetworkManager.VPN.Plugin.Config">Config</a> (
+ </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.SecretsRequired" id="org.freedesktop.NetworkManager.VPN.Plugin.SecretsRequired">SecretsRequired</a> (
+ s: message, as: secrets
+ )</h3><div class="docstring">
+ Emitted during an ongoing ConnectInteractive() request when the plugin
+ has determined that new secrets are required. NetworkManager will then
+ call the NewSecrets() method with a connection hash including the new
+ secrets.
+ </div><div><h4>Parameters</h4><dl><dt><code>message</code> -
+ <code>s</code></dt><dd>
+ Informational message, if any, about the request. For example, if
+ a second PIN is required, could indicate to the user to wait for
+ the token code to change until entering the next PIN.
+ </dd><dt><code>secrets</code> -
+ <code>as</code></dt><dd>
+ Array of strings of VPN secret names which the plugin thinks
+ secrets may be required for, or other VPN-specific data to be
+ processed by the VPN's front-end.
+ </dd></dl></div></div><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Plugin.Config" id="org.freedesktop.NetworkManager.VPN.Plugin.Config">Config</a> (
a{sv}: config
)</h3><div class="docstring">
The plugin obtained generic configuration information.
@@ -1807,16 +2240,42 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<h1>Errors:</h1>
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.General" id="org.freedesktop.NetworkManager.VPN.Error.General"></a>org.freedesktop.NetworkManager.VPN.Error.General</h2>This is a drab, nondescript error.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</h2>The request could not be processed because the VPN connection is already being started.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</h2>The request could not be processed because a VPN connection was already active.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</h2>The request could not be processed because the VPN connection is already being stopped.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</h2>The request could not be processed because the VPN connection was already stopped.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.WrongState" id="org.freedesktop.NetworkManager.VPN.Error.WrongState"></a>org.freedesktop.NetworkManager.VPN.Error.WrongState</h2>The request could not be processed because the VPN connection is in the wrong state for this type of request. FIXME: too general?
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.BadArguments" id="org.freedesktop.NetworkManager.VPN.Error.BadArguments"></a>org.freedesktop.NetworkManager.VPN.Error.BadArguments</h2>Invalid arguments were passed with the request. FIXME: too general.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed" id="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"></a>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</h2>A binary providing the service failed to launch.
- <h2><a name="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid" id="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid"></a>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</h2>The request could not be processed because the VPN connection settings were invalid.
-<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.General" id="org.freedesktop.NetworkManager.VPN.Error.General"></a>org.freedesktop.NetworkManager.VPN.Error.General</h2>General failure without further details.
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StartingInProgress</h2>
+ The plugin is already starting, and another connect request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted</h2>
+ The plugin is already connected, and another connect request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress" id="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"></a>org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress</h2>
+ The plugin is already stopping, and another stop request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped" id="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped"></a>org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped</h2>
+ The plugin is already stopped, and another disconnect request was received.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.WrongState" id="org.freedesktop.NetworkManager.VPN.Error.WrongState"></a>org.freedesktop.NetworkManager.VPN.Error.WrongState</h2>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.BadArguments" id="org.freedesktop.NetworkManager.VPN.Error.BadArguments"></a>org.freedesktop.NetworkManager.VPN.Error.BadArguments</h2>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed" id="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"></a>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</h2>
+ A binary providing the service failed to launch.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid" id="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid"></a>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</h2>
+ The request could not be processed because the connection was invalid. It
+ usually means that the connection's VPN setting was missing some required
+ data item or secret.
+
+ <h2><a name="org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported" id="org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported"></a>org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported</h2>
+ The request could not be processed because the plugin does not support
+ interactive operations, such as ConnectInteractive() or NewSecrets().
+
+<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Infiniband">org.freedesktop.NetworkManager.Device.Infiniband</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bond">org.freedesktop.NetworkManager.Device.Bond</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bridge">org.freedesktop.NetworkManager.Device.Bridge</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Team">org.freedesktop.NetworkManager.Device.Team</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Generic">org.freedesktop.NetworkManager.Device.Generic</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Vlan">org.freedesktop.NetworkManager.Device.Vlan</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Adsl">org.freedesktop.NetworkManager.Device.Adsl</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
- u</li><li><code><a href="#type-NM_802_11_AP_SEC">NM_802_11_AP_SEC</a></code>
- u</li><li><code><a href="#type-NM_802_11_DEVICE_CAP">NM_802_11_DEVICE_CAP</a></code>
- u</li><li><code><a href="#type-NM_802_11_MODE">NM_802_11_MODE</a></code>
@@ -1830,6 +2289,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
- u</li><li><code><a href="#type-NM_DEVICE_STATE_REASON_STRUCT">NM_DEVICE_STATE_REASON_STRUCT</a></code>
- ( u, u )
</li><li><code><a href="#type-NM_DEVICE_TYPE">NM_DEVICE_TYPE</a></code>
+ - u</li><li><code><a href="#type-NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a></code>
- u</li><li><code><a href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a></code>
- u</li><li><code><a href="#type-NM_STATE">NM_STATE</a></code>
- u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a></code>
diff --git a/docs/api/version.xml b/docs/api/version.xml
index dd62f24f0..82e28fcb1 100644
--- a/docs/api/version.xml
+++ b/docs/api/version.xml
@@ -1 +1 @@
-0.9.8.10
+0.9.10.0
diff --git a/docs/libnm-glib/Makefile.am b/docs/libnm-glib/Makefile.am
index 84807e25d..c6c9edf8f 100644
--- a/docs/libnm-glib/Makefile.am
+++ b/docs/libnm-glib/Makefile.am
@@ -76,6 +76,7 @@ GTKDOC_CFLAGS = \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
-I$(top_builddir)/libnm-glib \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
diff --git a/docs/libnm-glib/Makefile.in b/docs/libnm-glib/Makefile.in
index 3cfc7313f..a6406abe9 100644
--- a/docs/libnm-glib/Makefile.in
+++ b/docs/libnm-glib/Makefile.in
@@ -87,7 +87,8 @@ DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(srcdir)/version.xml.in
subdir = docs/libnm-glib
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -151,12 +152,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -181,7 +185,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -226,12 +229,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -248,6 +255,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -275,11 +284,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -294,6 +308,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -356,6 +371,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -366,6 +382,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
AUTOMAKE_OPTIONS = 1.6
# The name of the module
@@ -443,6 +460,7 @@ GTKDOC_CFLAGS = \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
-I$(top_builddir)/libnm-glib \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
@@ -490,12 +508,12 @@ REPORT_FILES = \
$(DOC_MODULE)-unused.txt
CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) \
- gtkdoc-check.test libnm-glib-sections.txt \
- libnm-glib-overrides.txt html/* tmpl/* xml/*
-@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
-@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
-@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
-@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+ libnm-glib-sections.txt libnm-glib-overrides.txt html/* tmpl/* \
+ xml/*
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
#### setup ####
GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_$(V))
@@ -616,7 +634,6 @@ distdir: $(DISTFILES)
dist-hook
check-am: all-am
check: check-am
-@ENABLE_GTK_DOC_FALSE@all-local:
all-am: Makefile all-local
installdirs:
install: install-am
@@ -734,15 +751,8 @@ uninstall-am: uninstall-local
uninstall-am uninstall-local
-gtkdoc-check.test: Makefile
- $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
- echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
- chmod +x $@
-
-all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
-.PHONY: all-gtk-doc
-
-@ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc
+@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+@ENABLE_GTK_DOC_FALSE@all-local:
docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
@@ -753,19 +763,17 @@ setup-build.stamp:
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
- destdir=`dirname $(abs_builddir)/$$file` ;\
- test -d "$$destdir" || mkdir -p "$$destdir"; \
test -f $(abs_srcdir)/$$file && \
- cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
test -d $(abs_srcdir)/tmpl && \
- { cp -pR $(abs_srcdir)/tmpl $(abs_builddir)/; \
+ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \
chmod -R u+w $(abs_builddir)/tmpl; } \
fi
$(AM_V_at)touch setup-build.stamp
-scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
$(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
@@ -795,7 +803,7 @@ tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DO
$(GTK_DOC_V_TMPL)gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
$(AM_V_at)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
if test -w $(abs_srcdir) ; then \
- cp -pR $(abs_builddir)/tmpl $(abs_srcdir)/; \
+ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \
fi \
fi
$(AM_V_at)touch tmpl-build.stamp
@@ -807,7 +815,7 @@ $(srcdir)/tmpl/*.sgml:
@true
sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
- -$(GTK_DOC_V_XML)chmod -R u+w $(srcdir) && _source_dir='' ; \
+ $(GTK_DOC_V_XML)-chmod -R u+w $(srcdir) && _source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
@@ -869,9 +877,6 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
clean-local:
@rm -f *~ *.bak
@rm -rf .libs
- @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
- rm -f $(DOC_MODULE).types; \
- fi
distclean-local:
@rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
@@ -917,14 +922,12 @@ uninstall-local:
#
# Require gtk-doc when making dist
#
-@HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
-@HAVE_GTK_DOC_FALSE@dist-check-gtkdoc:
-@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc is needed to run 'make dist'. ***"
-@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc was not found when 'configure' ran. ***"
-@HAVE_GTK_DOC_FALSE@ @echo "*** please install gtk-doc and rerun 'configure'. ***"
-@HAVE_GTK_DOC_FALSE@ @false
-
-dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
@mkdir $(distdir)/tmpl
@mkdir $(distdir)/html
@-cp ./tmpl/*.sgml $(distdir)/tmpl
diff --git a/docs/libnm-glib/html/NMAccessPoint.html b/docs/libnm-glib/html/NMAccessPoint.html
index ee09109e1..7c72487cb 100644
--- a/docs/libnm-glib/html/NMAccessPoint.html
+++ b/docs/libnm-glib/html/NMAccessPoint.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMAccessPoint</title>
+<title>NMAccessPoint</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMWimaxNsp.html" title="NMWimaxNsp">
<link rel="next" href="NMIP4Config.html" title="NMIP4Config">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMAccessPoint.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMAccessPoint.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMAccessPoint.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMWimaxNsp.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMIP4Config.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMWimaxNsp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMIP4Config.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMAccessPoint.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMAccessPoint.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMAccessPoint.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMAccessPoint.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMAccessPoint.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMAccessPoint"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,241 +39,67 @@
<h2><span class="refentrytitle"><a name="NMAccessPoint.top_of_page"></a>NMAccessPoint</span></h2>
<p>NMAccessPoint</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMAccessPoint.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-new" title="nm_access_point_new ()">nm_access_point_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NM80211ApFlags</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-flags" title="nm_access_point_get_flags ()">nm_access_point_get_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NM80211ApSecurityFlags</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-wpa-flags" title="nm_access_point_get_wpa_flags ()">nm_access_point_get_wpa_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NM80211ApSecurityFlags</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-rsn-flags" title="nm_access_point_get_rsn_flags ()">nm_access_point_get_rsn_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-ssid" title="nm_access_point_get_ssid ()">nm_access_point_get_ssid</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-bssid" title="nm_access_point_get_bssid ()">nm_access_point_get_bssid</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-frequency" title="nm_access_point_get_frequency ()">nm_access_point_get_frequency</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NM80211Mode</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-mode" title="nm_access_point_get_mode ()">nm_access_point_get_mode</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-max-bitrate" title="nm_access_point_get_max_bitrate ()">nm_access_point_get_max_bitrate</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-strength" title="nm_access_point_get_strength ()">nm_access_point_get_strength</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-filter-connections" title="nm_access_point_filter_connections ()">nm_access_point_filter_connections</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-connection-valid" title="nm_access_point_connection_valid ()">nm_access_point_connection_valid</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-hw-address" title="nm_access_point_get_hw_address ()">nm_access_point_get_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMAccessPoint.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-FLAGS:CAPS" title="NM_ACCESS_POINT_FLAGS">NM_ACCESS_POINT_FLAGS</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-WPA-FLAGS:CAPS" title="NM_ACCESS_POINT_WPA_FLAGS">NM_ACCESS_POINT_WPA_FLAGS</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-RSN-FLAGS:CAPS" title="NM_ACCESS_POINT_RSN_FLAGS">NM_ACCESS_POINT_RSN_FLAGS</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-SSID:CAPS" title="NM_ACCESS_POINT_SSID">NM_ACCESS_POINT_SSID</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-BSSID:CAPS" title="NM_ACCESS_POINT_BSSID">NM_ACCESS_POINT_BSSID</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-FREQUENCY:CAPS" title="NM_ACCESS_POINT_FREQUENCY">NM_ACCESS_POINT_FREQUENCY</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-MODE:CAPS" title="NM_ACCESS_POINT_MODE">NM_ACCESS_POINT_MODE</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-MAX-BITRATE:CAPS" title="NM_ACCESS_POINT_MAX_BITRATE">NM_ACCESS_POINT_MAX_BITRATE</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-STRENGTH:CAPS" title="NM_ACCESS_POINT_STRENGTH">NM_ACCESS_POINT_STRENGTH</a>
+#define <a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-HW-ADDRESS:CAPS" title="NM_ACCESS_POINT_HW_ADDRESS">NM_ACCESS_POINT_HW_ADDRESS</a>
+ <a class="link" href="NMAccessPoint.html#NMAccessPoint-struct" title="NMAccessPoint">NMAccessPoint</a>;
+ <a class="link" href="NMAccessPoint.html#NMAccessPointClass" title="NMAccessPointClass">NMAccessPointClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMAccessPoint.html#nm-access-point-new" title="nm_access_point_new ()">nm_access_point_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+<span class="returnvalue">NM80211ApFlags</span> <a class="link" href="NMAccessPoint.html#nm-access-point-get-flags" title="nm_access_point_get_flags ()">nm_access_point_get_flags</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<span class="returnvalue">NM80211ApSecurityFlags</span> <a class="link" href="NMAccessPoint.html#nm-access-point-get-wpa-flags" title="nm_access_point_get_wpa_flags ()">nm_access_point_get_wpa_flags</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<span class="returnvalue">NM80211ApSecurityFlags</span> <a class="link" href="NMAccessPoint.html#nm-access-point-get-rsn-flags" title="nm_access_point_get_rsn_flags ()">nm_access_point_get_rsn_flags</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMAccessPoint.html#nm-access-point-get-ssid" title="nm_access_point_get_ssid ()">nm_access_point_get_ssid</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMAccessPoint.html#nm-access-point-get-bssid" title="nm_access_point_get_bssid ()">nm_access_point_get_bssid</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMAccessPoint.html#nm-access-point-get-frequency" title="nm_access_point_get_frequency ()">nm_access_point_get_frequency</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<span class="returnvalue">NM80211Mode</span> <a class="link" href="NMAccessPoint.html#nm-access-point-get-mode" title="nm_access_point_get_mode ()">nm_access_point_get_mode</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMAccessPoint.html#nm-access-point-get-max-bitrate" title="nm_access_point_get_max_bitrate ()">nm_access_point_get_max_bitrate</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> <a class="link" href="NMAccessPoint.html#nm-access-point-get-strength" title="nm_access_point_get_strength ()">nm_access_point_get_strength</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMAccessPoint.html#nm-access-point-filter-connections" title="nm_access_point_filter_connections ()">nm_access_point_filter_connections</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMAccessPoint.html#nm-access-point-connection-valid" title="nm_access_point_connection_valid ()">nm_access_point_connection_valid</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMAccessPoint.html#nm-access-point-get-hw-address" title="nm_access_point_get_hw_address ()">nm_access_point_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMAccessPoint.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--bssid" title="The “bssid†property">bssid</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--flags" title="The “flags†property">flags</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--frequency" title="The “frequency†property">frequency</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--max-bitrate" title="The “max-bitrate†property">max-bitrate</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--mode" title="The “mode†property">mode</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--rsn-flags" title="The “rsn-flags†property">rsn-flags</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMSsid</span> *</td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--ssid" title="The “ssid†property">ssid</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a></td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--strength" title="The “strength†property">strength</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMAccessPoint.html#NMAccessPoint--wpa-flags" title="The “wpa-flags†property">wpa-flags</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMAccessPoint.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMAccessPoint
+</pre>
</div>
<div class="refsect1">
-<a name="NMAccessPoint.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-FLAGS:CAPS" title="NM_ACCESS_POINT_FLAGS">NM_ACCESS_POINT_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-WPA-FLAGS:CAPS" title="NM_ACCESS_POINT_WPA_FLAGS">NM_ACCESS_POINT_WPA_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-RSN-FLAGS:CAPS" title="NM_ACCESS_POINT_RSN_FLAGS">NM_ACCESS_POINT_RSN_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-SSID:CAPS" title="NM_ACCESS_POINT_SSID">NM_ACCESS_POINT_SSID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-BSSID:CAPS" title="NM_ACCESS_POINT_BSSID">NM_ACCESS_POINT_BSSID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-FREQUENCY:CAPS" title="NM_ACCESS_POINT_FREQUENCY">NM_ACCESS_POINT_FREQUENCY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-MODE:CAPS" title="NM_ACCESS_POINT_MODE">NM_ACCESS_POINT_MODE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-MAX-BITRATE:CAPS" title="NM_ACCESS_POINT_MAX_BITRATE">NM_ACCESS_POINT_MAX_BITRATE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-STRENGTH:CAPS" title="NM_ACCESS_POINT_STRENGTH">NM_ACCESS_POINT_STRENGTH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-HW-ADDRESS:CAPS" title="NM_ACCESS_POINT_HW_ADDRESS">NM_ACCESS_POINT_HW_ADDRESS</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMAccessPoint.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMAccessPoint implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMAccessPoint.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMAccessPoint
+<a name="NMAccessPoint.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--bssid" title='The "bssid" property'>bssid</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--flags" title='The "flags" property'>flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--frequency" title='The "frequency" property'>frequency</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--max-bitrate" title='The "max-bitrate" property'>max-bitrate</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--mode" title='The "mode" property'>mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--rsn-flags" title='The "rsn-flags" property'>rsn-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--ssid" title='The "ssid" property'>ssid</a>" <span class="type">NMSsid</span>* : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--strength" title='The "strength" property'>strength</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--wpa-flags" title='The "wpa-flags" property'>wpa-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
</pre>
</div>
<div class="refsect1">
@@ -274,580 +108,580 @@
</p>
</div>
<div class="refsect1">
-<a name="NMAccessPoint.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-access-point-new"></a><h3>nm_access_point_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_access_point_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBusobject path of the access point</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.2.6"></a><h4>Returns</h4>
-<p> a new access point. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NMAccessPoint.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-ACCESS-POINT-FLAGS:CAPS"></a><h3>NM_ACCESS_POINT_FLAGS</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_FLAGS "flags"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-flags"></a><h3>nm_access_point_get_flags ()</h3>
-<pre class="programlisting"><span class="returnvalue">NM80211ApFlags</span>
-nm_access_point_get_flags (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the flags of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.3.6"></a><h4>Returns</h4>
-<p> the flags</p>
-<p></p>
-</div>
+<a name="NM-ACCESS-POINT-WPA-FLAGS:CAPS"></a><h3>NM_ACCESS_POINT_WPA_FLAGS</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_WPA_FLAGS "wpa-flags"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-wpa-flags"></a><h3>nm_access_point_get_wpa_flags ()</h3>
-<pre class="programlisting"><span class="returnvalue">NM80211ApSecurityFlags</span>
-nm_access_point_get_wpa_flags (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the WPA (version 1) flags of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.4.6"></a><h4>Returns</h4>
-<p> the WPA flags</p>
-<p></p>
-</div>
+<a name="NM-ACCESS-POINT-RSN-FLAGS:CAPS"></a><h3>NM_ACCESS_POINT_RSN_FLAGS</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_RSN_FLAGS "rsn-flags"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-rsn-flags"></a><h3>nm_access_point_get_rsn_flags ()</h3>
-<pre class="programlisting"><span class="returnvalue">NM80211ApSecurityFlags</span>
-nm_access_point_get_rsn_flags (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the RSN (Robust Secure Network, ie WPA version 2) flags of the access
-point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.5.6"></a><h4>Returns</h4>
-<p> the RSN flags</p>
-<p></p>
-</div>
+<a name="NM-ACCESS-POINT-SSID:CAPS"></a><h3>NM_ACCESS_POINT_SSID</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_SSID "ssid"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-ssid"></a><h3>nm_access_point_get_ssid ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_access_point_get_ssid (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the SSID of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.6.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> containing the SSID. This is the internal copy used by the
-access point, and must not be modified.</p>
-<p></p>
-</div>
+<a name="NM-ACCESS-POINT-BSSID:CAPS"></a><h3>NM_ACCESS_POINT_BSSID</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_BSSID "bssid"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-bssid"></a><h3>nm_access_point_get_bssid ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_access_point_get_bssid (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the Basic Service Set ID (BSSID) of the WiFi access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.7.6"></a><h4>Returns</h4>
-<p> the BSSID of the access point. This is an internal string and must
-not be modified or freed.</p>
-<p></p>
-</div>
+<a name="NM-ACCESS-POINT-FREQUENCY:CAPS"></a><h3>NM_ACCESS_POINT_FREQUENCY</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_FREQUENCY "frequency"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-frequency"></a><h3>nm_access_point_get_frequency ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_access_point_get_frequency (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the frequency of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.8.6"></a><h4>Returns</h4>
-<p> the frequency</p>
-<p></p>
-</div>
+<a name="NM-ACCESS-POINT-MODE:CAPS"></a><h3>NM_ACCESS_POINT_MODE</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_MODE "mode"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-mode"></a><h3>nm_access_point_get_mode ()</h3>
-<pre class="programlisting"><span class="returnvalue">NM80211Mode</span>
-nm_access_point_get_mode (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the mode of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.9.6"></a><h4>Returns</h4>
-<p> the mode</p>
-<p></p>
+<a name="NM-ACCESS-POINT-MAX-BITRATE:CAPS"></a><h3>NM_ACCESS_POINT_MAX_BITRATE</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_MAX_BITRATE "max-bitrate"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACCESS-POINT-STRENGTH:CAPS"></a><h3>NM_ACCESS_POINT_STRENGTH</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_STRENGTH "strength"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-max-bitrate"></a><h3>nm_access_point_get_max_bitrate ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_access_point_get_max_bitrate (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the maximum bit rate of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-ACCESS-POINT-HW-ADDRESS:CAPS"></a><h3>NM_ACCESS_POINT_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_ACCESS_POINT_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.10.6"></a><h4>Returns</h4>
-<p> the maximum bit rate</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NMAccessPoint-struct"></a><h3>NMAccessPoint</h3>
+<pre class="programlisting">typedef struct _NMAccessPoint NMAccessPoint;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMAccessPointClass"></a><h3>NMAccessPointClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMAccessPointClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-strength"></a><h3>nm_access_point_get_strength ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>
-nm_access_point_get_strength (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<p>Gets the current signal strength of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-access-point-new"></a><h3>nm_access_point_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_access_point_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBusobject path of the access point</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new access point. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.11.6"></a><h4>Returns</h4>
-<p> the signal strength</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-filter-connections"></a><h3>nm_access_point_filter_connections ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_access_point_filter_connections (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
- <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);</pre>
-<p>Filters a given list of connections for a given <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> object and
-return connections which may be activated with the access point. Any
-returned connections will match the <em class="parameter"><code>ap</code></em>
-'s SSID and (if given) BSSID and
-other attributes like security settings, channel, etc.</p>
-<p>To obtain the list of connections that are compatible with this access point,
-use <a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()"><code class="function">nm_remote_settings_list_connections()</code></a> and then filter the returned list
-for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> using <a class="link" href="NMDevice.html#nm-device-filter-connections" title="nm_device_filter_connections ()"><code class="function">nm_device_filter_connections()</code></a> and finally
-filter that list with this function.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.12.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-access-point-get-flags"></a><h3>nm_access_point_get_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">NM80211ApFlags</span> nm_access_point_get_flags (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
+<p>
+Gets the flags of the access point.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> to filter connections for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>connections</p></td>
-<td class="parameter_description"><p> a list of
-<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the flags</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.12.7"></a><h4>Returns</h4>
-<p> a
-list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>ap</code></em>
-.
-The elements of the list are owned by their creator and should not be freed
-by the caller, but the returned list itself is owned by the caller and should
-be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. </p>
-<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-connection-valid"></a><h3>nm_access_point_connection_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_access_point_connection_valid (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Validates a given connection against a given WiFi access point to ensure that
-the connection may be activated with that AP. The connection must match the
-<em class="parameter"><code>ap</code></em>
-'s SSID, (if given) BSSID, and other attributes like security settings,
-channel, band, etc.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-access-point-get-wpa-flags"></a><h3>nm_access_point_get_wpa_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">NM80211ApSecurityFlags</span> nm_access_point_get_wpa_flags (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
+<p>
+Gets the WPA (version 1) flags of the access point.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> to validate <em class="parameter"><code>connection</code></em>
-against</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>ap</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the WPA flags</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this WiFi AP,
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it cannot be.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-access-point-get-hw-address"></a><h3>nm_access_point_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_access_point_get_hw_address (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
-<div class="warning">
-<p><code class="literal">nm_access_point_get_hw_address</code> has been deprecated since version 0.9 and should not be used in newly-written code.</p>
-<p>Use <a class="link" href="NMAccessPoint.html#nm-access-point-get-bssid" title="nm_access_point_get_bssid ()"><code class="function">nm_access_point_get_bssid()</code></a> instead.</p>
-</div>
-<p>Gets the hardware (MAC) address of the access point.</p>
-<div class="refsect3">
-<a name="id-1.3.17.8.14.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-access-point-get-rsn-flags"></a><h3>nm_access_point_get_rsn_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">NM80211ApSecurityFlags</span> nm_access_point_get_rsn_flags (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
+<p>
+Gets the RSN (Robust Secure Network, ie WPA version 2) flags of the access
+point.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ap</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the RSN flags</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.17.8.14.7"></a><h4>Returns</h4>
-<p> the hardware address of the access point. This is the internal string used by the
-access point and must not be modified.</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMAccessPoint.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-FLAGS:CAPS"></a><h3>NM_ACCESS_POINT_FLAGS</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_FLAGS "flags"
-</pre>
+<a name="nm-access-point-get-ssid"></a><h3>nm_access_point_get_ssid ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_access_point_get_ssid (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
<p>
+Gets the SSID of the access point.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> containing the SSID. This is the internal copy used by the
+access point, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-WPA-FLAGS:CAPS"></a><h3>NM_ACCESS_POINT_WPA_FLAGS</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_WPA_FLAGS "wpa-flags"
-</pre>
+<a name="nm-access-point-get-bssid"></a><h3>nm_access_point_get_bssid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_access_point_get_bssid (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
<p>
+Gets the Basic Service Set ID (BSSID) of the Wi-Fi access point.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the BSSID of the access point. This is an internal string and must
+not be modified or freed.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-RSN-FLAGS:CAPS"></a><h3>NM_ACCESS_POINT_RSN_FLAGS</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_RSN_FLAGS "rsn-flags"
-</pre>
+<a name="nm-access-point-get-frequency"></a><h3>nm_access_point_get_frequency ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_access_point_get_frequency (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
<p>
+Gets the frequency of the access point.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the frequency</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-SSID:CAPS"></a><h3>NM_ACCESS_POINT_SSID</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_SSID "ssid"
-</pre>
+<a name="nm-access-point-get-mode"></a><h3>nm_access_point_get_mode ()</h3>
+<pre class="programlisting"><span class="returnvalue">NM80211Mode</span> nm_access_point_get_mode (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
<p>
+Gets the mode of the access point.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the mode</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-BSSID:CAPS"></a><h3>NM_ACCESS_POINT_BSSID</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_BSSID "bssid"
-</pre>
+<a name="nm-access-point-get-max-bitrate"></a><h3>nm_access_point_get_max_bitrate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_access_point_get_max_bitrate (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
<p>
+Gets the maximum bit rate of the access point in kbit/s.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the maximum bit rate (kbit/s)</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-FREQUENCY:CAPS"></a><h3>NM_ACCESS_POINT_FREQUENCY</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_FREQUENCY "frequency"
-</pre>
+<a name="nm-access-point-get-strength"></a><h3>nm_access_point_get_strength ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> nm_access_point_get_strength (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
<p>
+Gets the current signal strength of the access point.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the signal strength</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-MODE:CAPS"></a><h3>NM_ACCESS_POINT_MODE</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_MODE "mode"
-</pre>
+<a name="nm-access-point-filter-connections"></a><h3>nm_access_point_filter_connections ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_access_point_filter_connections (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);</pre>
<p>
+Filters a given list of connections for a given <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> object and
+return connections which may be activated with the access point. Any
+returned connections will match the <em class="parameter"><code>ap</code></em>'s SSID and (if given) BSSID and
+other attributes like security settings, channel, etc.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-ACCESS-POINT-MAX-BITRATE:CAPS"></a><h3>NM_ACCESS_POINT_MAX_BITRATE</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_MAX_BITRATE "max-bitrate"
-</pre>
<p>
+To obtain the list of connections that are compatible with this access point,
+use <a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()"><code class="function">nm_remote_settings_list_connections()</code></a> and then filter the returned list
+for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> using <a class="link" href="NMDevice.html#nm-device-filter-connections" title="nm_device_filter_connections ()"><code class="function">nm_device_filter_connections()</code></a> and finally
+filter that list with this function.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>an <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> to filter connections for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connections</code></em> :</span></p></td>
+<td>a list of
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a
+list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>ap</code></em>.
+The elements of the list are owned by their creator and should not be freed
+by the caller, but the returned list itself is owned by the caller and should
+be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-STRENGTH:CAPS"></a><h3>NM_ACCESS_POINT_STRENGTH</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_STRENGTH "strength"
-</pre>
+<a name="nm-access-point-connection-valid"></a><h3>nm_access_point_connection_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_access_point_connection_valid (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
+Validates a given connection against a given Wi-Fi access point to ensure that
+the connection may be activated with that AP. The connection must match the
+<em class="parameter"><code>ap</code></em>'s SSID, (if given) BSSID, and other attributes like security settings,
+channel, band, etc.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>an <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> to validate <em class="parameter"><code>connection</code></em> against</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>ap</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this Wi-Fi AP,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it cannot be.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACCESS-POINT-HW-ADDRESS:CAPS"></a><h3>NM_ACCESS_POINT_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_ACCESS_POINT_HW_ADDRESS "hw-address"
-</pre>
+<a name="nm-access-point-get-hw-address"></a><h3>nm_access_point_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_access_point_get_hw_address (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">nm_access_point_get_hw_address</code> has been deprecated since version 0.9 and should not be used in newly-written code. Use <a class="link" href="NMAccessPoint.html#nm-access-point-get-bssid" title="nm_access_point_get_bssid ()"><code class="function">nm_access_point_get_bssid()</code></a> instead.</p>
+</div>
<p>
+Gets the hardware (MAC) address of the access point.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address of the access point. This is the internal string used by the
+access point and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMAccessPoint.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMAccessPoint--bssid"></a><h3>The <code class="literal">“bssidâ€</code> property</h3>
-<pre class="programlisting"> “bssid†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>BSSID.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--bssid"></a><h3>The <code class="literal">"bssid"</code> property</h3>
+<pre class="programlisting"> "bssid" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The BSSID of the access point.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--flags"></a><h3>The <code class="literal">“flagsâ€</code> property</h3>
-<pre class="programlisting"> “flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--flags"></a><h3>The <code class="literal">"flags"</code> property</h3>
+<pre class="programlisting"> "flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The flags of the access point.
+</p>
<p>Allowed values: &lt;= 1</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--frequency"></a><h3>The <code class="literal">“frequencyâ€</code> property</h3>
-<pre class="programlisting"> “frequency†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Frequency.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--frequency"></a><h3>The <code class="literal">"frequency"</code> property</h3>
+<pre class="programlisting"> "frequency" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The frequency of the access point.
+</p>
<p>Allowed values: &lt;= 10000</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware address of the access point.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--max-bitrate"></a><h3>The <code class="literal">“max-bitrateâ€</code> property</h3>
-<pre class="programlisting"> “max-bitrate†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Max Bitrate.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--max-bitrate"></a><h3>The <code class="literal">"max-bitrate"</code> property</h3>
+<pre class="programlisting"> "max-bitrate" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The maximum bit rate of the access point in kbit/s.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--mode"></a><h3>The <code class="literal">“modeâ€</code> property</h3>
-<pre class="programlisting"> “mode†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Mode.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--mode"></a><h3>The <code class="literal">"mode"</code> property</h3>
+<pre class="programlisting"> "mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The mode of the access point; either "infrastructure" (a central
+coordinator of the wireless network allowing clients to connect) or
+"ad-hoc" (a network with no central controller).
+</p>
<p>Allowed values: [1,2]</p>
<p>Default value: 2</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--rsn-flags"></a><h3>The <code class="literal">“rsn-flagsâ€</code> property</h3>
-<pre class="programlisting"> “rsn-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>RSN Flags.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--rsn-flags"></a><h3>The <code class="literal">"rsn-flags"</code> property</h3>
+<pre class="programlisting"> "rsn-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The RSN flags of the access point.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--ssid"></a><h3>The <code class="literal">“ssidâ€</code> property</h3>
-<pre class="programlisting"> “ssid†<span class="type">NMSsid</span> *</pre>
-<p>SSID.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--ssid"></a><h3>The <code class="literal">"ssid"</code> property</h3>
+<pre class="programlisting"> "ssid" <span class="type">NMSsid</span>* : Read</pre>
+<p>
+The SSID of the access point.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--strength"></a><h3>The <code class="literal">“strengthâ€</code> property</h3>
-<pre class="programlisting"> “strength†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a></pre>
-<p>Strength.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--strength"></a><h3>The <code class="literal">"strength"</code> property</h3>
+<pre class="programlisting"> "strength" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> : Read</pre>
+<p>
+The current signal strength of the access point.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMAccessPoint--wpa-flags"></a><h3>The <code class="literal">“wpa-flagsâ€</code> property</h3>
-<pre class="programlisting"> “wpa-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>WPA Flags.</p>
-<p>Flags: Read</p>
+<a name="NMAccessPoint--wpa-flags"></a><h3>The <code class="literal">"wpa-flags"</code> property</h3>
+<pre class="programlisting"> "wpa-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The WPA flags of the access point.
+</p>
<p>Default value: 0</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMActiveConnection.html b/docs/libnm-glib/html/NMActiveConnection.html
index ba775eab7..0e8471d51 100644
--- a/docs/libnm-glib/html/NMActiveConnection.html
+++ b/docs/libnm-glib/html/NMActiveConnection.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMActiveConnection</title>
+<title>NMActiveConnection</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMClient.html" title="NMClient">
<link rel="next" href="NMDevice.html" title="NMDevice">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMActiveConnection.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMActiveConnection.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMActiveConnection.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMClient.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDevice.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMClient.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDevice.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMActiveConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMActiveConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMActiveConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMActiveConnection.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMActiveConnection.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMActiveConnection"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,595 +39,825 @@
<h2><span class="refentrytitle"><a name="NMActiveConnection.top_of_page"></a>NMActiveConnection</span></h2>
<p>NMActiveConnection</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMActiveConnection.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-CONNECTION:CAPS" title="NM_ACTIVE_CONNECTION_CONNECTION">NM_ACTIVE_CONNECTION_CONNECTION</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-ID:CAPS" title="NM_ACTIVE_CONNECTION_ID">NM_ACTIVE_CONNECTION_ID</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-UUID:CAPS" title="NM_ACTIVE_CONNECTION_UUID">NM_ACTIVE_CONNECTION_UUID</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-TYPE:CAPS" title="NM_ACTIVE_CONNECTION_TYPE">NM_ACTIVE_CONNECTION_TYPE</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT:CAPS" title="NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT">NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEVICES:CAPS" title="NM_ACTIVE_CONNECTION_DEVICES">NM_ACTIVE_CONNECTION_DEVICES</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-STATE:CAPS" title="NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT:CAPS" title="NM_ACTIVE_CONNECTION_DEFAULT">NM_ACTIVE_CONNECTION_DEFAULT</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_IP4_CONFIG">NM_ACTIVE_CONNECTION_IP4_CONFIG</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_DHCP4_CONFIG">NM_ACTIVE_CONNECTION_DHCP4_CONFIG</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT6:CAPS" title="NM_ACTIVE_CONNECTION_DEFAULT6">NM_ACTIVE_CONNECTION_DEFAULT6</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_IP6_CONFIG">NM_ACTIVE_CONNECTION_IP6_CONFIG</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_DHCP6_CONFIG">NM_ACTIVE_CONNECTION_DHCP6_CONFIG</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-VPN:CAPS" title="NM_ACTIVE_CONNECTION_VPN">NM_ACTIVE_CONNECTION_VPN</a>
+#define <a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-MASTER:CAPS" title="NM_ACTIVE_CONNECTION_MASTER">NM_ACTIVE_CONNECTION_MASTER</a>
+ <a class="link" href="NMActiveConnection.html#NMActiveConnection-struct" title="NMActiveConnection">NMActiveConnection</a>;
+ <a class="link" href="NMActiveConnection.html#NMActiveConnectionClass" title="NMActiveConnectionClass">NMActiveConnectionClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMActiveConnection.html#nm-active-connection-new" title="nm_active_connection_new ()">nm_active_connection_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-connection" title="nm_active_connection_get_connection ()">nm_active_connection_get_connection</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-id" title="nm_active_connection_get_id ()">nm_active_connection_get_id</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-uuid" title="nm_active_connection_get_uuid ()">nm_active_connection_get_uuid</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-connection-type" title="nm_active_connection_get_connection_type ()">nm_active_connection_get_connection_type</a>
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-specific-object" title="nm_active_connection_get_specific_object ()">nm_active_connection_get_specific_object</a>
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-devices" title="nm_active_connection_get_devices ()">nm_active_connection_get_devices</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<span class="returnvalue">NMActiveConnectionState</span> <a class="link" href="NMActiveConnection.html#nm-active-connection-get-state" title="nm_active_connection_get_state ()">nm_active_connection_get_state</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-master" title="nm_active_connection_get_master ()">nm_active_connection_get_master</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMActiveConnection.html#nm-active-connection-get-default" title="nm_active_connection_get_default ()">nm_active_connection_get_default</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="returnvalue">NMIP4Config</span></a> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-ip4-config" title="nm_active_connection_get_ip4_config ()">nm_active_connection_get_ip4_config</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="returnvalue">NMDHCP4Config</span></a> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-dhcp4-config" title="nm_active_connection_get_dhcp4_config ()">nm_active_connection_get_dhcp4_config</a>
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMActiveConnection.html#nm-active-connection-get-default6" title="nm_active_connection_get_default6 ()">nm_active_connection_get_default6</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="returnvalue">NMIP6Config</span></a> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-ip6-config" title="nm_active_connection_get_ip6_config ()">nm_active_connection_get_ip6_config</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="returnvalue">NMDHCP6Config</span></a> * <a class="link" href="NMActiveConnection.html#nm-active-connection-get-dhcp6-config" title="nm_active_connection_get_dhcp6_config ()">nm_active_connection_get_dhcp6_config</a>
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMActiveConnection.html#nm-active-connection-get-vpn" title="nm_active_connection_get_vpn ()">nm_active_connection_get_vpn</a> (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);
+</pre>
+</div>
<div class="refsect1">
-<a name="NMActiveConnection.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMActiveConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMActiveConnection
+ +----<a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMActiveConnection.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMActiveConnection implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMActiveConnection.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--connection" title='The "connection" property'>connection</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--default" title='The "default" property'>default</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--default6" title='The "default6" property'>default6</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--devices" title='The "devices" property'>devices</a>" <span class="type">NMObjectArray</span>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--dhcp4-config" title='The "dhcp4-config" property'>dhcp4-config</a>" <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--dhcp6-config" title='The "dhcp6-config" property'>dhcp6-config</a>" <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--id" title='The "id" property'>id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--ip4-config" title='The "ip4-config" property'>ip4-config</a>" <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--ip6-config" title='The "ip6-config" property'>ip6-config</a>" <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--master" title='The "master" property'>master</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--specific-object" title='The "specific-object" property'>specific-object</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title='The "state" property'>state</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--type" title='The "type" property'>type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--uuid" title='The "uuid" property'>uuid</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--vpn" title='The "vpn" property'>vpn</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMActiveConnection.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMActiveConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-CONNECTION:CAPS"></a><h3>NM_ACTIVE_CONNECTION_CONNECTION</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_CONNECTION "connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-ID:CAPS"></a><h3>NM_ACTIVE_CONNECTION_ID</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_ID "id"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-UUID:CAPS"></a><h3>NM_ACTIVE_CONNECTION_UUID</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_UUID "uuid"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-TYPE:CAPS"></a><h3>NM_ACTIVE_CONNECTION_TYPE</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_TYPE "type"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT:CAPS"></a><h3>NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT "specific-object"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-DEVICES:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DEVICES</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DEVICES "devices"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-STATE:CAPS"></a><h3>NM_ACTIVE_CONNECTION_STATE</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_STATE "state"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-DEFAULT:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DEFAULT</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DEFAULT "default"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS"></a><h3>NM_ACTIVE_CONNECTION_IP4_CONFIG</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_IP4_CONFIG "ip4-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DHCP4_CONFIG</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DHCP4_CONFIG "dhcp4-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-DEFAULT6:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DEFAULT6</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DEFAULT6 "default6"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS"></a><h3>NM_ACTIVE_CONNECTION_IP6_CONFIG</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_IP6_CONFIG "ip6-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DHCP6_CONFIG</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DHCP6_CONFIG "dhcp6-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-VPN:CAPS"></a><h3>NM_ACTIVE_CONNECTION_VPN</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_VPN "vpn"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ACTIVE-CONNECTION-MASTER:CAPS"></a><h3>NM_ACTIVE_CONNECTION_MASTER</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_MASTER "master"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMActiveConnection-struct"></a><h3>NMActiveConnection</h3>
+<pre class="programlisting">typedef struct _NMActiveConnection NMActiveConnection;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMActiveConnectionClass"></a><h3>NMActiveConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMActiveConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-new"></a><h3>nm_active_connection_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_active_connection_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-new" title="nm_active_connection_new ()">nm_active_connection_new</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-connection" title="nm_active_connection_get_connection ()">nm_active_connection_get_connection</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-uuid" title="nm_active_connection_get_uuid ()">nm_active_connection_get_uuid</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new active connection. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-connection"></a><h3>nm_active_connection_get_connection ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_connection (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>'s DBus object path. This is often used with
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-path" title="nm_remote_settings_get_connection_by_path ()"><code class="function">nm_remote_settings_get_connection_by_path()</code></a> to retrieve the
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object that describes the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-specific-object" title="nm_active_connection_get_specific_object ()">nm_active_connection_get_specific_object</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-devices" title="nm_active_connection_get_devices ()">nm_active_connection_get_devices</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the object path of the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> which this <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+is an active instance of. This is the internal string used by the
+connection, and must not be modified.</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-id"></a><h3>nm_active_connection_get_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_id (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>'s ID.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<span class="returnvalue">NMActiveConnectionState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-state" title="nm_active_connection_get_state ()">nm_active_connection_get_state</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-default" title="nm_active_connection_get_default ()">nm_active_connection_get_default</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the ID of the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> that backs the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+This is the internal string used by the connection, and must not be modified.</td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-uuid"></a><h3>nm_active_connection_get_uuid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>'s UUID.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-default6" title="nm_active_connection_get_default6 ()">nm_active_connection_get_default6</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-master" title="nm_active_connection_get_master ()">nm_active_connection_get_master</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the UUID of the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> that backs the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+This is the internal string used by the connection, and must not be modified.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMActiveConnection.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-connection-type"></a><h3>nm_active_connection_get_connection_type ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_connection_type
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>'s type.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--connection" title="The “connection†property">connection</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--default" title="The “default†property">default</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--default6" title="The “default6†property">default6</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMObjectArray</span> *</td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--devices" title="The “devices†property">devices</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--master" title="The “master†property">master</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--specific-object" title="The “specific-object†property">specific-object</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title="The “state†property">state</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
</tr>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMActiveConnection.html#NMActiveConnection--uuid" title="The “uuid†property">uuid</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the type of the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> that backs the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+This is the internal string used by the connection, and must not be modified.</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<div class="refsect1">
-<a name="NMActiveConnection.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-specific-object"></a><h3>nm_active_connection_get_specific_object ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_specific_object
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the "specific object" used at the activation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-CONNECTION:CAPS" title="NM_ACTIVE_CONNECTION_CONNECTION">NM_ACTIVE_CONNECTION_CONNECTION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-UUID:CAPS" title="NM_ACTIVE_CONNECTION_UUID">NM_ACTIVE_CONNECTION_UUID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT:CAPS" title="NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT">NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEVICES:CAPS" title="NM_ACTIVE_CONNECTION_DEVICES">NM_ACTIVE_CONNECTION_DEVICES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-STATE:CAPS" title="NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</a></td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT:CAPS" title="NM_ACTIVE_CONNECTION_DEFAULT">NM_ACTIVE_CONNECTION_DEFAULT</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the specific object's DBus path. This is the internal string used by the
+connection, and must not be modified.</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-devices"></a><h3>nm_active_connection_get_devices ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_active_connection_get_devices (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the <a href="NMDevice.html"><span class="type">NMDevices</span></a> used for the active connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT6:CAPS" title="NM_ACTIVE_CONNECTION_DEFAULT6">NM_ACTIVE_CONNECTION_DEFAULT6</a></td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-MASTER:CAPS" title="NM_ACTIVE_CONNECTION_MASTER">NM_ACTIVE_CONNECTION_MASTER</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing <a href="NMDevice.html"><span class="type">NMDevices</span></a>.
+This is the internal copy used by the connection, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMActiveConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMActiveConnection
- <span class="lineart">╰──</span> <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMActiveConnection.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-state"></a><h3>nm_active_connection_get_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMActiveConnectionState</span> nm_active_connection_get_state (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
<p>
+Gets the active connection's state.
</p>
-</div>
-<div class="refsect1">
-<a name="NMActiveConnection.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-active-connection-new"></a><h3>nm_active_connection_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_active_connection_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the state</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.2.6"></a><h4>Returns</h4>
-<p> a new active connection. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-connection"></a><h3>nm_active_connection_get_connection ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_active_connection_get_connection (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Gets the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>'s DBus object path.</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-master"></a><h3>nm_active_connection_get_master ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_master (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the path to the master <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the path of the master <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> of the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+This is the internal string used by the connection, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.3.6"></a><h4>Returns</h4>
-<p> the object path of the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> inside of <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
-This is the internal string used by the connection, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-uuid"></a><h3>nm_active_connection_get_uuid ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_active_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Gets the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>'s UUID.</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-default"></a><h3>nm_active_connection_get_default ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_active_connection_get_default (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Whether the active connection is the default IPv4 one (that is, is used for
+the default IPv4 route and DNS information).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the active connection is the default IPv4 connection</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.4.6"></a><h4>Returns</h4>
-<p> the UUID of the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> that backs the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
-This is the internal string used by the connection, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-specific-object"></a><h3>nm_active_connection_get_specific_object ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_active_connection_get_specific_object
- (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Gets the "specific object" used at the activation.</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-ip4-config"></a><h3>nm_active_connection_get_ip4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="returnvalue">NMIP4Config</span></a> * nm_active_connection_get_ip4_config (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> associated with the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+connection is not in the <code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code>
+state. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.5.6"></a><h4>Returns</h4>
-<p> the specific object's DBus path. This is the internal string used by the
-connection, and must not be modified.</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-devices"></a><h3>nm_active_connection_get_devices ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_active_connection_get_devices (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Gets the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>s used for the active connections.</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-dhcp4-config"></a><h3>nm_active_connection_get_dhcp4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="returnvalue">NMDHCP4Config</span></a> * nm_active_connection_get_dhcp4_config
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> (if any) associated with the
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+connection does not use DHCP, or is not in the
+<code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code> state. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.6.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>s.
-This is the internal copy used by the connection, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-state"></a><h3>nm_active_connection_get_state ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMActiveConnectionState</span>
-nm_active_connection_get_state (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Gets the active connection's state.</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-default6"></a><h3>nm_active_connection_get_default6 ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_active_connection_get_default6 (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Whether the active connection is the default IPv6 one (that is, is used for
+the default IPv6 route and DNS information).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the active connection is the default IPv6 connection</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.7.6"></a><h4>Returns</h4>
-<p> the state</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-default"></a><h3>nm_active_connection_get_default ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_active_connection_get_default (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Whether the active connection is the default IPv4 one (that is, is used for
-the default IPv4 route and DNS information).</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-ip6-config"></a><h3>nm_active_connection_get_ip6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="returnvalue">NMIP6Config</span></a> * nm_active_connection_get_ip6_config (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> associated with the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+connection is not in the <code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code>
+state. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.8.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the active connection is the default IPv4 connection</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-default6"></a><h3>nm_active_connection_get_default6 ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_active_connection_get_default6 (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Whether the active connection is the default IPv6 one (that is, is used for
-the default IPv6 route and DNS information).</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-dhcp6-config"></a><h3>nm_active_connection_get_dhcp6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="returnvalue">NMDHCP6Config</span></a> * nm_active_connection_get_dhcp6_config
+ (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> (if any) associated with the
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+connection does not use DHCPv6, or is not in the
+<code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code> state. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.9.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the active connection is the default IPv6 connection</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-active-connection-get-master"></a><h3>nm_active_connection_get_master ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_active_connection_get_master (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
-<p>Gets the path to the master <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> of the connection.</p>
-<div class="refsect3">
-<a name="id-1.3.3.8.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-active-connection-get-vpn"></a><h3>nm_active_connection_get_vpn ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_active_connection_get_vpn (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
+<p>
+Whether the active connection is a VPN connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the active connection is a VPN connection</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.3.8.10.6"></a><h4>Returns</h4>
-<p> the path of the master <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> of the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
-This is the internal string used by the connection, and must not be modified.</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
</div>
<div class="refsect1">
-<a name="NMActiveConnection.other_details"></a><h2>Types and Values</h2>
+<a name="NMActiveConnection.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-CONNECTION:CAPS"></a><h3>NM_ACTIVE_CONNECTION_CONNECTION</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_CONNECTION "connection"
-</pre>
+<a name="NMActiveConnection--connection"></a><h3>The <code class="literal">"connection"</code> property</h3>
+<pre class="programlisting"> "connection" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The connection's path of the active connection.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-UUID:CAPS"></a><h3>NM_ACTIVE_CONNECTION_UUID</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_UUID "uuid"
-</pre>
+<a name="NMActiveConnection--default"></a><h3>The <code class="literal">"default"</code> property</h3>
+<pre class="programlisting"> "default" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>
+Whether the active connection is the default IPv4 one.
</p>
+<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT:CAPS"></a><h3>NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT "specific-object"
-</pre>
+<a name="NMActiveConnection--default6"></a><h3>The <code class="literal">"default6"</code> property</h3>
+<pre class="programlisting"> "default6" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>
+Whether the active connection is the default IPv6 one.
</p>
+<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-DEVICES:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DEVICES</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DEVICES "devices"
-</pre>
-<p>
-</p>
+<a name="NMActiveConnection--devices"></a><h3>The <code class="literal">"devices"</code> property</h3>
+<pre class="programlisting"> "devices" <span class="type">NMObjectArray</span>* : Read</pre>
+<p>Devices.</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-STATE:CAPS"></a><h3>NM_ACTIVE_CONNECTION_STATE</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_STATE "state"
-</pre>
+<a name="NMActiveConnection--dhcp4-config"></a><h3>The <code class="literal">"dhcp4-config"</code> property</h3>
+<pre class="programlisting"> "dhcp4-config" <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> of the connection.
</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-DEFAULT:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DEFAULT</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DEFAULT "default"
-</pre>
+<a name="NMActiveConnection--dhcp6-config"></a><h3>The <code class="literal">"dhcp6-config"</code> property</h3>
+<pre class="programlisting"> "dhcp6-config" <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> of the connection.
</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-DEFAULT6:CAPS"></a><h3>NM_ACTIVE_CONNECTION_DEFAULT6</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_DEFAULT6 "default6"
-</pre>
+<a name="NMActiveConnection--id"></a><h3>The <code class="literal">"id"</code> property</h3>
+<pre class="programlisting"> "id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The active connection's ID
</p>
+<p>Default value: NULL</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-ACTIVE-CONNECTION-MASTER:CAPS"></a><h3>NM_ACTIVE_CONNECTION_MASTER</h3>
-<pre class="programlisting">#define NM_ACTIVE_CONNECTION_MASTER "master"
-</pre>
+<a name="NMActiveConnection--ip4-config"></a><h3>The <code class="literal">"ip4-config"</code> property</h3>
+<pre class="programlisting"> "ip4-config" <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> of the connection.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMActiveConnection.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMActiveConnection--connection"></a><h3>The <code class="literal">“connectionâ€</code> property</h3>
-<pre class="programlisting"> “connection†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Connection.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMActiveConnection--default"></a><h3>The <code class="literal">“defaultâ€</code> property</h3>
-<pre class="programlisting"> “default†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Is the default IPv4 active connection.</p>
-<p>Flags: Read</p>
-<p>Default value: FALSE</p>
+<a name="NMActiveConnection--ip6-config"></a><h3>The <code class="literal">"ip6-config"</code> property</h3>
+<pre class="programlisting"> "ip6-config" <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>* : Read</pre>
+<p>
+The <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> of the connection.
+</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMActiveConnection--default6"></a><h3>The <code class="literal">“default6â€</code> property</h3>
-<pre class="programlisting"> “default6†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Is the default IPv6 active connection.</p>
-<p>Flags: Read</p>
-<p>Default value: FALSE</p>
+<a name="NMActiveConnection--master"></a><h3>The <code class="literal">"master"</code> property</h3>
+<pre class="programlisting"> "master" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The path of the master device if one exists.
+</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMActiveConnection--devices"></a><h3>The <code class="literal">“devicesâ€</code> property</h3>
-<pre class="programlisting"> “devices†<span class="type">NMObjectArray</span> *</pre>
-<p>Devices.</p>
-<p>Flags: Read</p>
+<a name="NMActiveConnection--specific-object"></a><h3>The <code class="literal">"specific-object"</code> property</h3>
+<pre class="programlisting"> "specific-object" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The specific object's path of the active connection.
+</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMActiveConnection--master"></a><h3>The <code class="literal">“masterâ€</code> property</h3>
-<pre class="programlisting"> “master†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Path of the master device.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
+<a name="NMActiveConnection--state"></a><h3>The <code class="literal">"state"</code> property</h3>
+<pre class="programlisting"> "state" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The state of the active connection.
+</p>
+<p>Allowed values: &lt;= 3</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMActiveConnection--specific-object"></a><h3>The <code class="literal">“specific-objectâ€</code> property</h3>
-<pre class="programlisting"> “specific-object†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Specific object.</p>
-<p>Flags: Read</p>
+<a name="NMActiveConnection--type"></a><h3>The <code class="literal">"type"</code> property</h3>
+<pre class="programlisting"> "type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The active connection's type
+</p>
<p>Default value: NULL</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMActiveConnection--state"></a><h3>The <code class="literal">“stateâ€</code> property</h3>
-<pre class="programlisting"> “state†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>State.</p>
-<p>Flags: Read</p>
-<p>Allowed values: &lt;= 3</p>
-<p>Default value: 0</p>
+<a name="NMActiveConnection--uuid"></a><h3>The <code class="literal">"uuid"</code> property</h3>
+<pre class="programlisting"> "uuid" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The active connection's UUID
+</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMActiveConnection--uuid"></a><h3>The <code class="literal">“uuidâ€</code> property</h3>
-<pre class="programlisting"> “uuid†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>UUID.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
+<a name="NMActiveConnection--vpn"></a><h3>The <code class="literal">"vpn"</code> property</h3>
+<pre class="programlisting"> "vpn" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the active connection is a VPN connection.
+</p>
+<p>Default value: FALSE</p>
+<p class="since">Since 0.9.10</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMClient.html b/docs/libnm-glib/html/NMClient.html
index 842183d9c..67de27865 100644
--- a/docs/libnm-glib/html/NMClient.html
+++ b/docs/libnm-glib/html/NMClient.html
@@ -2,29 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMClient</title>
+<title>NMClient</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="ch02.html" title="libnm-glib API Reference">
<link rel="next" href="NMActiveConnection.html" title="NMActiveConnection">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMClient.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMClient.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMClient.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMClient.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="ch02.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMActiveConnection.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMActiveConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMClient.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMClient.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMClient.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMClient.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMClient.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMClient.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMClient"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,2150 +41,1950 @@
<h2><span class="refentrytitle"><a name="NMClient.top_of_page"></a>NMClient</span></h2>
<p>NMClient</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMClient.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMClient.html#NM-CLIENT-VERSION:CAPS" title="NM_CLIENT_VERSION">NM_CLIENT_VERSION</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-STATE:CAPS" title="NM_CLIENT_STATE">NM_CLIENT_STATE</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-STARTUP:CAPS" title="NM_CLIENT_STARTUP">NM_CLIENT_STARTUP</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-MANAGER-RUNNING:CAPS" title="NM_CLIENT_MANAGER_RUNNING">NM_CLIENT_MANAGER_RUNNING</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-NETWORKING-ENABLED:CAPS" title="NM_CLIENT_NETWORKING_ENABLED">NM_CLIENT_NETWORKING_ENABLED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-WIRELESS-ENABLED:CAPS" title="NM_CLIENT_WIRELESS_ENABLED">NM_CLIENT_WIRELESS_ENABLED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WIRELESS_HARDWARE_ENABLED">NM_CLIENT_WIRELESS_HARDWARE_ENABLED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-WWAN-ENABLED:CAPS" title="NM_CLIENT_WWAN_ENABLED">NM_CLIENT_WWAN_ENABLED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WWAN_HARDWARE_ENABLED">NM_CLIENT_WWAN_HARDWARE_ENABLED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-WIMAX-ENABLED:CAPS" title="NM_CLIENT_WIMAX_ENABLED">NM_CLIENT_WIMAX_ENABLED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WIMAX_HARDWARE_ENABLED">NM_CLIENT_WIMAX_HARDWARE_ENABLED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS" title="NM_CLIENT_ACTIVE_CONNECTIONS">NM_CLIENT_ACTIVE_CONNECTIONS</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-CONNECTIVITY:CAPS" title="NM_CLIENT_CONNECTIVITY">NM_CLIENT_CONNECTIVITY</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-PRIMARY-CONNECTION:CAPS" title="NM_CLIENT_PRIMARY_CONNECTION">NM_CLIENT_PRIMARY_CONNECTION</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-ACTIVATING-CONNECTION:CAPS" title="NM_CLIENT_ACTIVATING_CONNECTION">NM_CLIENT_ACTIVATING_CONNECTION</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-DEVICES:CAPS" title="NM_CLIENT_DEVICES">NM_CLIENT_DEVICES</a>
+enum <a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission">NMClientPermission</a>;
+enum <a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult">NMClientPermissionResult</a>;
+enum <a class="link" href="NMClient.html#NMClientError" title="enum NMClientError">NMClientError</a>;
+#define <a class="link" href="NMClient.html#NM-CLIENT-ERROR:CAPS" title="NM_CLIENT_ERROR">NM_CLIENT_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMClient.html#nm-client-error-quark" title="nm_client_error_quark ()">nm_client_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+ <a class="link" href="NMClient.html#NMClient-struct" title="NMClient">NMClient</a>;
+ <a class="link" href="NMClient.html#NMClientClass" title="NMClientClass">NMClientClass</a>;
+<a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> * <a class="link" href="NMClient.html#nm-client-new" title="nm_client_new ()">nm_client_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()">nm_client_new_async</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> * <a class="link" href="NMClient.html#nm-client-new-finish" title="nm_client_new_finish ()">nm_client_new_finish</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMClient.html#nm-client-get-devices" title="nm_client_get_devices ()">nm_client_get_devices</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * <a class="link" href="NMClient.html#nm-client-get-device-by-path" title="nm_client_get_device_by_path ()">nm_client_get_device_by_path</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);
+<a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * <a class="link" href="NMClient.html#nm-client-get-device-by-iface" title="nm_client_get_device_by_iface ()">nm_client_get_device_by_iface</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *iface</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()">*NMClientActivateFn</a>) (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active_connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-activate-connection" title="nm_client_activate_connection ()">nm_client_activate_connection</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
+ <em class="parameter"><code><a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()"><span class="type">NMClientActivateFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()">*NMClientAddActivateFn</a>) (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *new_connection_path</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-add-and-activate-connection" title="nm_client_add_and_activate_connection ()">nm_client_add_and_activate_connection</a>
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *partial</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
+ <em class="parameter"><code><a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()"><span class="type">NMClientAddActivateFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-deactivate-connection" title="nm_client_deactivate_connection ()">nm_client_deactivate_connection</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-networking-get-enabled" title="nm_client_networking_get_enabled ()">nm_client_networking_get_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-networking-set-enabled" title="nm_client_networking_set_enabled ()">nm_client_networking_set_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-wireless-get-enabled" title="nm_client_wireless_get_enabled ()">nm_client_wireless_get_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-wireless-set-enabled" title="nm_client_wireless_set_enabled ()">nm_client_wireless_set_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-wireless-hardware-get-enabled" title="nm_client_wireless_hardware_get_enabled ()">nm_client_wireless_hardware_get_enabled</a>
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-wwan-get-enabled" title="nm_client_wwan_get_enabled ()">nm_client_wwan_get_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-wwan-set-enabled" title="nm_client_wwan_set_enabled ()">nm_client_wwan_set_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-wwan-hardware-get-enabled" title="nm_client_wwan_hardware_get_enabled ()">nm_client_wwan_hardware_get_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-wimax-get-enabled" title="nm_client_wimax_get_enabled ()">nm_client_wimax_get_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-wimax-set-enabled" title="nm_client_wimax_set_enabled ()">nm_client_wimax_set_enabled</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-wimax-hardware-get-enabled" title="nm_client_wimax_hardware_get_enabled ()">nm_client_wimax_hardware_get_enabled</a>
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMClient.html#nm-client-get-version" title="nm_client_get_version ()">nm_client_get_version</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<span class="returnvalue">NMState</span> <a class="link" href="NMClient.html#nm-client-get-state" title="nm_client_get_state ()">nm_client_get_state</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-get-startup" title="nm_client_get_startup ()">nm_client_get_startup</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-get-manager-running" title="nm_client_get_manager_running ()">nm_client_get_manager_running</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMClient.html#nm-client-get-active-connections" title="nm_client_get_active_connections ()">nm_client_get_active_connections</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-sleep" title="nm_client_sleep ()">nm_client_sleep</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> sleep_</code></em>);
+<a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="returnvalue">NMClientPermissionResult</span></a> <a class="link" href="NMClient.html#nm-client-get-permission-result" title="nm_client_get_permission_result ()">nm_client_get_permission_result</a>
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a> permission</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-get-logging" title="nm_client_get_logging ()">nm_client_get_logging</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **level</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **domains</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMClient.html#nm-client-set-logging" title="nm_client_set_logging ()">nm_client_set_logging</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *level</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *domains</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<span class="returnvalue">NMConnectivityState</span> <a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()">nm_client_get_connectivity</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<span class="returnvalue">NMConnectivityState</span> <a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()">nm_client_check_connectivity</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()">nm_client_check_connectivity_async</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">NMConnectivityState</span> <a class="link" href="NMClient.html#nm-client-check-connectivity-finish" title="nm_client_check_connectivity_finish ()">nm_client_check_connectivity_finish</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * <a class="link" href="NMClient.html#nm-client-get-primary-connection" title="nm_client_get_primary_connection ()">nm_client_get_primary_connection</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * <a class="link" href="NMClient.html#nm-client-get-activating-connection" title="nm_client_get_activating_connection ()">nm_client_get_activating_connection</a>
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMClient.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMClient
+</pre>
+</div>
<div class="refsect1">
-<a name="NMClient.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMClient.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMClient implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMClient.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMClient.html#NMClient--activating-connection" title='The "activating-connection" property'>activating-connection</a>" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read
+ "<a class="link" href="NMClient.html#NMClient--active-connections" title='The "active-connections" property'>active-connections</a>" <span class="type">NMObjectArray</span>* : Read
+ "<a class="link" href="NMClient.html#NMClient--connectivity" title='The "connectivity" property'>connectivity</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMClient.html#NMClient--devices" title='The "devices" property'>devices</a>" <span class="type">NMObjectArray</span>* : Read
+ "<a class="link" href="NMClient.html#NMClient--manager-running" title='The "manager-running" property'>manager-running</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMClient.html#NMClient--networking-enabled" title='The "networking-enabled" property'>networking-enabled</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMClient.html#NMClient--primary-connection" title='The "primary-connection" property'>primary-connection</a>" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read
+ "<a class="link" href="NMClient.html#NMClient--startup" title='The "startup" property'>startup</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMClient.html#NMClient--state" title='The "state" property'>state</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMClient.html#NMClient--version" title='The "version" property'>version</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMClient.html#NMClient--wimax-enabled" title='The "wimax-enabled" property'>wimax-enabled</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMClient.html#NMClient--wimax-hardware-enabled" title='The "wimax-hardware-enabled" property'>wimax-hardware-enabled</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMClient.html#NMClient--wireless-enabled" title='The "wireless-enabled" property'>wireless-enabled</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMClient.html#NMClient--wireless-hardware-enabled" title='The "wireless-hardware-enabled" property'>wireless-hardware-enabled</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMClient.html#NMClient--wwan-enabled" title='The "wwan-enabled" property'>wwan-enabled</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMClient.html#NMClient--wwan-hardware-enabled" title='The "wwan-hardware-enabled" property'>wwan-hardware-enabled</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMClient.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMClient.html#NMClient-device-added" title='The "device-added" signal'>device-added</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMClient.html#NMClient-device-removed" title='The "device-removed" signal'>device-removed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMClient.html#NMClient-permission-changed" title='The "permission-changed" signal'>permission-changed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMClient.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMClient.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-CLIENT-VERSION:CAPS"></a><h3>NM_CLIENT_VERSION</h3>
+<pre class="programlisting">#define NM_CLIENT_VERSION "version"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-STATE:CAPS"></a><h3>NM_CLIENT_STATE</h3>
+<pre class="programlisting">#define NM_CLIENT_STATE "state"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-STARTUP:CAPS"></a><h3>NM_CLIENT_STARTUP</h3>
+<pre class="programlisting">#define NM_CLIENT_STARTUP "startup"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-MANAGER-RUNNING:CAPS"></a><h3>NM_CLIENT_MANAGER_RUNNING</h3>
+<pre class="programlisting">#define NM_CLIENT_MANAGER_RUNNING "manager-running"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-NETWORKING-ENABLED:CAPS"></a><h3>NM_CLIENT_NETWORKING_ENABLED</h3>
+<pre class="programlisting">#define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-WIRELESS-ENABLED:CAPS"></a><h3>NM_CLIENT_WIRELESS_ENABLED</h3>
+<pre class="programlisting">#define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS"></a><h3>NM_CLIENT_WIRELESS_HARDWARE_ENABLED</h3>
+<pre class="programlisting">#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-WWAN-ENABLED:CAPS"></a><h3>NM_CLIENT_WWAN_ENABLED</h3>
+<pre class="programlisting">#define NM_CLIENT_WWAN_ENABLED "wwan-enabled"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS"></a><h3>NM_CLIENT_WWAN_HARDWARE_ENABLED</h3>
+<pre class="programlisting">#define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-WIMAX-ENABLED:CAPS"></a><h3>NM_CLIENT_WIMAX_ENABLED</h3>
+<pre class="programlisting">#define NM_CLIENT_WIMAX_ENABLED "wimax-enabled"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS"></a><h3>NM_CLIENT_WIMAX_HARDWARE_ENABLED</h3>
+<pre class="programlisting">#define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-ACTIVE-CONNECTIONS:CAPS"></a><h3>NM_CLIENT_ACTIVE_CONNECTIONS</h3>
+<pre class="programlisting">#define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-CONNECTIVITY:CAPS"></a><h3>NM_CLIENT_CONNECTIVITY</h3>
+<pre class="programlisting">#define NM_CLIENT_CONNECTIVITY "connectivity"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-PRIMARY-CONNECTION:CAPS"></a><h3>NM_CLIENT_PRIMARY_CONNECTION</h3>
+<pre class="programlisting">#define NM_CLIENT_PRIMARY_CONNECTION "primary-connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-ACTIVATING-CONNECTION:CAPS"></a><h3>NM_CLIENT_ACTIVATING_CONNECTION</h3>
+<pre class="programlisting">#define NM_CLIENT_ACTIVATING_CONNECTION "activating-connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-DEVICES:CAPS"></a><h3>NM_CLIENT_DEVICES</h3>
+<pre class="programlisting">#define NM_CLIENT_DEVICES "devices"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClientPermission"></a><h3>enum NMClientPermission</h3>
+<pre class="programlisting">typedef enum {
+ NM_CLIENT_PERMISSION_NONE = 0,
+ NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK = 1,
+ NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI = 2,
+ NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN = 3,
+ NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX = 4,
+ NM_CLIENT_PERMISSION_SLEEP_WAKE = 5,
+ NM_CLIENT_PERMISSION_NETWORK_CONTROL = 6,
+ NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED = 7,
+ NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN = 8,
+ NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9,
+ NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10,
+ NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11,
+
+ NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME
+} NMClientPermission;
+</pre>
+<p>
+<a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a> values indicate various permissions that NetworkManager
+clients can obtain to perform certain tasks on behalf of the current user.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-new" title="nm_client_new ()">nm_client_new</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-NONE:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_NONE</code></span></p></td>
+<td>unknown or no permission
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()">nm_client_new_async</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-NETWORK:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK</code></span></p></td>
+<td>controls whether networking
+ can be globally enabled or disabled
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-new-finish" title="nm_client_new_finish ()">nm_client_new_finish</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIFI:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI</code></span></p></td>
+<td>controls whether Wi-Fi can be
+ globally enabled or disabled
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-devices" title="nm_client_get_devices ()">nm_client_get_devices</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WWAN:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN</code></span></p></td>
+<td>controls whether WWAN (3G) can be
+ globally enabled or disabled
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-device-by-path" title="nm_client_get_device_by_path ()">nm_client_get_device_by_path</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIMAX:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX</code></span></p></td>
+<td>controls whether WiMAX can be
+ globally enabled or disabled
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-device-by-iface" title="nm_client_get_device_by_iface ()">nm_client_get_device_by_iface</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-SLEEP-WAKE:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_SLEEP_WAKE</code></span></p></td>
+<td>controls whether the client can ask
+ NetworkManager to sleep and wake
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()">*NMClientActivateFn</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-NETWORK-CONTROL:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_NETWORK_CONTROL</code></span></p></td>
+<td>controls whether networking connections
+ can be started, stopped, and changed
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-activate-connection" title="nm_client_activate_connection ()">nm_client_activate_connection</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-WIFI-SHARE-PROTECTED:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED</code></span></p></td>
+<td>controls whether a password
+ protected Wi-Fi hotspot can be created
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()">*NMClientAddActivateFn</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-WIFI-SHARE-OPEN:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN</code></span></p></td>
+<td>controls whether an open Wi-Fi hotspot
+ can be created
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-add-and-activate-connection" title="nm_client_add_and_activate_connection ()">nm_client_add_and_activate_connection</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-deactivate-connection" title="nm_client_deactivate_connection ()">nm_client_deactivate_connection</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-networking-get-enabled" title="nm_client_networking_get_enabled ()">nm_client_networking_get_enabled</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM</code></span></p></td>
+<td>controls whether connections
+ that are available to all users can be modified
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-networking-set-enabled" title="nm_client_networking_set_enabled ()">nm_client_networking_set_enabled</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN</code></span></p></td>
+<td>controls whether connections
+ owned by the current user can be modified
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wireless-get-enabled" title="nm_client_wireless_get_enabled ()">nm_client_wireless_get_enabled</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME</code></span></p></td>
+<td>controls whether the
+ persistent hostname can be changed
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wireless-set-enabled" title="nm_client_wireless_set_enabled ()">nm_client_wireless_set_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wireless-hardware-get-enabled" title="nm_client_wireless_hardware_get_enabled ()">nm_client_wireless_hardware_get_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wwan-get-enabled" title="nm_client_wwan_get_enabled ()">nm_client_wwan_get_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wwan-set-enabled" title="nm_client_wwan_set_enabled ()">nm_client_wwan_set_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wwan-hardware-get-enabled" title="nm_client_wwan_hardware_get_enabled ()">nm_client_wwan_hardware_get_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wimax-get-enabled" title="nm_client_wimax_get_enabled ()">nm_client_wimax_get_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wimax-set-enabled" title="nm_client_wimax_set_enabled ()">nm_client_wimax_set_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-wimax-hardware-get-enabled" title="nm_client_wimax_hardware_get_enabled ()">nm_client_wimax_hardware_get_enabled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-version" title="nm_client_get_version ()">nm_client_get_version</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-state" title="nm_client_get_state ()">nm_client_get_state</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-manager-running" title="nm_client_get_manager_running ()">nm_client_get_manager_running</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-active-connections" title="nm_client_get_active_connections ()">nm_client_get_active_connections</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-sleep" title="nm_client_sleep ()">nm_client_sleep</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="returnvalue">NMClientPermissionResult</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-permission-result" title="nm_client_get_permission_result ()">nm_client_get_permission_result</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-logging" title="nm_client_get_logging ()">nm_client_get_logging</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-set-logging" title="nm_client_set_logging ()">nm_client_set_logging</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMConnectivityState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()">nm_client_get_connectivity</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMConnectivityState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()">nm_client_check_connectivity</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()">nm_client_check_connectivity_async</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMConnectivityState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-check-connectivity-finish" title="nm_client_check_connectivity_finish ()">nm_client_check_connectivity_finish</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-primary-connection" title="nm_client_get_primary_connection ()">nm_client_get_primary_connection</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMClient.html#nm-client-get-activating-connection" title="nm_client_get_activating_connection ()">nm_client_get_activating_connection</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CLIENT-PERMISSION-LAST:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_LAST</code></span></p></td>
+<td>a reserved boundary value
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMClient.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NMClientPermissionResult"></a><h3>enum NMClientPermissionResult</h3>
+<pre class="programlisting">typedef enum {
+ NM_CLIENT_PERMISSION_RESULT_UNKNOWN = 0,
+ NM_CLIENT_PERMISSION_RESULT_YES,
+ NM_CLIENT_PERMISSION_RESULT_AUTH,
+ NM_CLIENT_PERMISSION_RESULT_NO
+} NMClientPermissionResult;
+</pre>
+<p>
+<a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="type">NMClientPermissionResult</span></a> values indicate what authorizations and permissions
+the user requires to obtain a given <a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *</td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--activating-connection" title="The “activating-connection†property">activating-connection</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMObjectArray</span> *</td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--active-connections" title="The “active-connections†property">active-connections</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--connectivity" title="The “connectivity†property">connectivity</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--manager-running" title="The “manager-running†property">manager-running</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--networking-enabled" title="The “networking-enabled†property">networking-enabled</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *</td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--primary-connection" title="The “primary-connection†property">primary-connection</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--state" title="The “state†property">state</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--version" title="The “version†property">version</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--wimax-enabled" title="The “wimax-enabled†property">wimax-enabled</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--wimax-hardware-enabled" title="The “wimax-hardware-enabled†property">wimax-hardware-enabled</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--wireless-enabled" title="The “wireless-enabled†property">wireless-enabled</a></td>
-<td class="property_flags">Read / Write</td>
+<td><p><a name="NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_RESULT_UNKNOWN</code></span></p></td>
+<td>unknown or no authorization
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--wireless-hardware-enabled" title="The “wireless-hardware-enabled†property">wireless-hardware-enabled</a></td>
-<td class="property_flags">Read</td>
+<td><p><a name="NM-CLIENT-PERMISSION-RESULT-YES:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_RESULT_YES</code></span></p></td>
+<td>the permission is available
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--wwan-enabled" title="The “wwan-enabled†property">wwan-enabled</a></td>
-<td class="property_flags">Read / Write</td>
+<td><p><a name="NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_RESULT_AUTH</code></span></p></td>
+<td>authorization is necessary before the
+ permission is available
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMClient.html#NMClient--wwan-hardware-enabled" title="The “wwan-hardware-enabled†property">wwan-hardware-enabled</a></td>
-<td class="property_flags">Read</td>
+<td><p><a name="NM-CLIENT-PERMISSION-RESULT-NO:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_PERMISSION_RESULT_NO</code></span></p></td>
+<td>permission to perform the operation is
+ denied by system policy
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMClient.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NMClientError"></a><h3>enum NMClientError</h3>
+<pre class="programlisting">typedef enum {
+ NM_CLIENT_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING, /*&lt; nick=ManagerNotRunning &gt;*/
+} NMClientError;
+</pre>
+<p>
+Describes errors that may result from operations involving a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMClient.html#NMClient-device-added" title="The “device-added†signal">device-added</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr>
-<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMClient.html#NMClient-device-removed" title="The “device-removed†signal">device-removed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+<td><p><a name="NM-CLIENT-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
</tr>
<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMClient.html#NMClient-permission-changed" title="The “permission-changed†signal">permission-changed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+<td><p><a name="NM-CLIENT-ERROR-MANAGER-NOT-RUNNING:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_ERROR_MANAGER_NOT_RUNNING</code></span></p></td>
+<td>an operation that requires NetworkManager
+ failed because NetworkManager is not running
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMClient.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-ERROR:CAPS"></a><h3>NM_CLIENT_ERROR</h3>
+<pre class="programlisting">#define NM_CLIENT_ERROR nm_client_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-error-quark"></a><h3>nm_client_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_client_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-VERSION:CAPS" title="NM_CLIENT_VERSION">NM_CLIENT_VERSION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-STATE:CAPS" title="NM_CLIENT_STATE">NM_CLIENT_STATE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-MANAGER-RUNNING:CAPS" title="NM_CLIENT_MANAGER_RUNNING">NM_CLIENT_MANAGER_RUNNING</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-NETWORKING-ENABLED:CAPS" title="NM_CLIENT_NETWORKING_ENABLED">NM_CLIENT_NETWORKING_ENABLED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-WIRELESS-ENABLED:CAPS" title="NM_CLIENT_WIRELESS_ENABLED">NM_CLIENT_WIRELESS_ENABLED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WIRELESS_HARDWARE_ENABLED">NM_CLIENT_WIRELESS_HARDWARE_ENABLED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-WWAN-ENABLED:CAPS" title="NM_CLIENT_WWAN_ENABLED">NM_CLIENT_WWAN_ENABLED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WWAN_HARDWARE_ENABLED">NM_CLIENT_WWAN_HARDWARE_ENABLED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-WIMAX-ENABLED:CAPS" title="NM_CLIENT_WIMAX_ENABLED">NM_CLIENT_WIMAX_ENABLED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WIMAX_HARDWARE_ENABLED">NM_CLIENT_WIMAX_HARDWARE_ENABLED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS" title="NM_CLIENT_ACTIVE_CONNECTIONS">NM_CLIENT_ACTIVE_CONNECTIONS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-CONNECTIVITY:CAPS" title="NM_CLIENT_CONNECTIVITY">NM_CLIENT_CONNECTIVITY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-PRIMARY-CONNECTION:CAPS" title="NM_CLIENT_PRIMARY_CONNECTION">NM_CLIENT_PRIMARY_CONNECTION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-ACTIVATING-CONNECTION:CAPS" title="NM_CLIENT_ACTIVATING_CONNECTION">NM_CLIENT_ACTIVATING_CONNECTION</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission">NMClientPermission</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult">NMClientPermissionResult</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> errors.</td>
+</tr></tbody>
</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<div class="refsect1">
-<a name="NMClient.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMClient
-</pre>
+<hr>
+<div class="refsect2">
+<a name="NMClient-struct"></a><h3>NMClient</h3>
+<pre class="programlisting">typedef struct _NMClient NMClient;</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMClient.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="NMClientClass"></a><h3>NMClientClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Signals */
+ void (*device_added) (NMClient *client, NMDevice *device);
+ void (*device_removed) (NMClient *client, NMDevice *device);
+ void (*permission_changed) (NMClient *client,
+ NMClientPermission permission,
+ NMClientPermissionResult result);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMClientClass;
+</pre>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMClient.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-client-new"></a><h3>nm_client_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> *
-nm_client_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>.</p>
-<p>Note that this will do blocking D-Bus calls to initialize the
-client. You can use <a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()"><code class="function">nm_client_new_async()</code></a> if you want to avoid
-that.</p>
-<p>NOTE: <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> provides information about devices and a mechanism to
+<hr>
+<div class="refsect2">
+<a name="nm-client-new"></a><h3>nm_client_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> * nm_client_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>.
+</p>
+<p>
+Note that this will do blocking D-Bus calls to initialize the
+client. You can use <a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()"><code class="function">nm_client_new_async()</code></a> if you want to avoid
+that.
+</p>
+<p>
+NOTE: <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> provides information about devices and a mechanism to
control them. To access and modify network configuration data, use the
-<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.2.7"></a><h4>Returns</h4>
-<p> a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p>
-<p></p>
-</div>
+<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> or NULL on an error</td>
+</tr></tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-client-new-async"></a><h3>nm_client_new_async ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_new_async (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> and begins asynchronously initializing it.
-<em class="parameter"><code>callback</code></em>
- will be called when it is done; use
-<a class="link" href="NMClient.html#nm-client-new-finish" title="nm_client_new_finish ()"><code class="function">nm_client_new_finish()</code></a> to get the result.</p>
-<p>NOTE: <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> provides information about devices and a mechanism to
+<a name="nm-client-new-async"></a><h3>nm_client_new_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_new_async (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> and begins asynchronously initializing it.
+<em class="parameter"><code>callback</code></em> will be called when it is done; use
+<a class="link" href="NMClient.html#nm-client-new-finish" title="nm_client_new_finish ()"><code class="function">nm_client_new_finish()</code></a> to get the result. Note that on an error,
+the callback can be invoked with two first parameters as NULL.
+</p>
+<p>
+NOTE: <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> provides information about devices and a mechanism to
control them. To access and modify network configuration data, use the
-<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.3.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>cancellable</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>cancellable</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p>callback to call when the client is created</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to call when the client is created</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>data for <em class="parameter"><code>callback</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>data for <em class="parameter"><code>callback</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-new-finish"></a><h3>nm_client_new_finish ()</h3>
-<pre class="programlisting"><a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> *
-nm_client_new_finish (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Gets the result of an <a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()"><code class="function">nm_client_new_async()</code></a> call.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-new-finish"></a><h3>nm_client_new_finish ()</h3>
+<pre class="programlisting"><a class="link" href="NMClient.html" title="NMClient"><span class="returnvalue">NMClient</span></a> * nm_client_new_finish (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Gets the result of an <a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()"><code class="function">nm_client_new_async()</code></a> call.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>result</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on error</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.4.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-devices"></a><h3>nm_client_get_devices ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_client_get_devices (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Gets all the known network devices. Use <code class="function">nm_device_get_type()</code> or the
+<a name="nm-client-get-devices"></a><h3>nm_client_get_devices ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_client_get_devices (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Gets all the known network devices. Use <code class="function">nm_device_get_type()</code> or the
<code class="function">NM_IS_DEVICE_XXXX()</code> functions to determine what kind of device member of the
returned array is, and then you may use device-specific methods such as
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address" title="nm_device_ethernet_get_hw_address ()"><code class="function">nm_device_ethernet_get_hw_address()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address" title="nm_device_ethernet_get_hw_address ()"><code class="function">nm_device_ethernet_get_hw_address()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>
+containing all the <a href="NMDevice.html"><span class="type">NMDevices</span></a>. The returned array is owned by the
+<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> object and should not be modified. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.5.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>
-containing all the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>s. The returned array is owned by the
-<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> object and should not be modified. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-device-by-path"></a><h3>nm_client_get_device_by_path ()</h3>
-<pre class="programlisting"><a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> *
-nm_client_get_device_by_path (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
-<p>Gets a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> from a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-device-by-path"></a><h3>nm_client_get_device_by_path ()</h3>
+<pre class="programlisting"><a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * nm_client_get_device_by_path (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
+<p>
+Gets a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> from a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>object_path</code></em> :</span></p></td>
+<td>the object path to search for</td>
</tr>
<tr>
-<td class="parameter_name"><p>object_path</p></td>
-<td class="parameter_description"><p>the object path to search for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> for the given <em class="parameter"><code>object_path</code></em> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.6.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> for the given <em class="parameter"><code>object_path</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-device-by-iface"></a><h3>nm_client_get_device_by_iface ()</h3>
-<pre class="programlisting"><a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> *
-nm_client_get_device_by_iface (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *iface</code></em>);</pre>
-<p>Gets a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> from a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-device-by-iface"></a><h3>nm_client_get_device_by_iface ()</h3>
+<pre class="programlisting"><a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * nm_client_get_device_by_iface (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *iface</code></em>);</pre>
+<p>
+Gets a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> from a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iface</code></em> :</span></p></td>
+<td>the interface name to search for</td>
</tr>
<tr>
-<td class="parameter_name"><p>iface</p></td>
-<td class="parameter_description"><p>the interface name to search for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> for the given <em class="parameter"><code>iface</code></em> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.7.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> for the given <em class="parameter"><code>iface</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMClientActivateFn"></a><h3>NMClientActivateFn ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMClientActivateFn<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active_connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<a name="NMClientActivateFn"></a><h3>NMClientActivateFn ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMClientActivateFn) (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active_connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-client-activate-connection"></a><h3>nm_client_activate_connection ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_activate_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
- <em class="parameter"><code><a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()"><span class="type">NMClientActivateFn</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Starts a connection to a particular network using the configuration settings
-from <em class="parameter"><code>connection</code></em>
- and the network device <em class="parameter"><code>device</code></em>
-. Certain connection types
+<a name="nm-client-activate-connection"></a><h3>nm_client_activate_connection ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_activate_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
+ <em class="parameter"><code><a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()"><span class="type">NMClientActivateFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Starts a connection to a particular network using the configuration settings
+from <em class="parameter"><code>connection</code></em> and the network device <em class="parameter"><code>device</code></em>. Certain connection types
also take a "specific object" which is the object path of a connection-
-specific object, like an <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> for WiFi connections, or an
+specific object, like an <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> for Wi-Fi connections, or an
<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> for WiMAX connections, to which you wish to connect. If the
specific object is not given, NetworkManager can, in some cases, automatically
-determine which network to connect to given the settings in <em class="parameter"><code>connection</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+determine which network to connect to given the settings in <em class="parameter"><code>connection</code></em>.
+</p>
+<p>
+If <em class="parameter"><code>connection</code></em> is not given for a device-based activation, NetworkManager
+picks the best available connection for the device and activates it.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p> the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>specific_object</p></td>
-<td class="parameter_description"><p> the object path of a connection-type-specific
+<td><p><span class="term"><em class="parameter"><code>specific_object</code></em> :</span></p></td>
+<td>the object path of a connection-type-specific
object this activation should use. This parameter is currently ignored for
-wired and mobile broadband connections, and the value of <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> should be used
-(ie, no specific object). For WiFi or WiMAX connections, pass the object
-path of a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> or <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> owned by <em class="parameter"><code>device</code></em>
-, which you can
-get using <a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()"><code class="function">nm_object_get_path()</code></a>, and which will be used to complete the
-details of the newly added connection. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+wired and mobile broadband connections, and the value of <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> should be used
+(ie, no specific object). For Wi-Fi or WiMAX connections, pass the object
+path of a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> or <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> owned by <em class="parameter"><code>device</code></em>, which you can
+get using <a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()"><code class="function">nm_object_get_path()</code></a>, and which will be used to complete the
+details of the newly added connection. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> the function to call when the call is done. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>the function to call when the call is done. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> user data to pass to the callback function. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data to pass to the callback function. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMClientAddActivateFn"></a><h3>NMClientAddActivateFn ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMClientAddActivateFn<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *new_connection_path</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<a name="NMClientAddActivateFn"></a><h3>NMClientAddActivateFn ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMClientAddActivateFn) (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *new_connection_path</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-client-add-and-activate-connection"></a><h3>nm_client_add_and_activate_connection ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_add_and_activate_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *partial</code></em>,
- <em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
- <em class="parameter"><code><a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()"><span class="type">NMClientAddActivateFn</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Adds a new connection using the given details (if any) as a template,
+<a name="nm-client-add-and-activate-connection"></a><h3>nm_client_add_and_activate_connection ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_add_and_activate_connection
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *partial</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
+ <em class="parameter"><code><a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()"><span class="type">NMClientAddActivateFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Adds a new connection using the given details (if any) as a template,
automatically filling in missing settings with the capabilities of the
given device and specific object. The new connection is then activated.
-Cannot be used for VPN connections at this time.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+Cannot be used for VPN connections at this time.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>partial</p></td>
-<td class="parameter_description"><p> an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to add; the connection may be
-partially filled (or even <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>) and will be completed by NetworkManager
-using the given <em class="parameter"><code>device</code></em>
-and <em class="parameter"><code>specific_object</code></em>
-before being added. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>partial</code></em> :</span></p></td>
+<td>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to add; the connection may be
+partially filled (or even <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>) and will be completed by NetworkManager
+using the given <em class="parameter"><code>device</code></em> and <em class="parameter"><code>specific_object</code></em> before being added. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>specific_object</p></td>
-<td class="parameter_description"><p> the object path of a connection-type-specific
+<td><p><span class="term"><em class="parameter"><code>specific_object</code></em> :</span></p></td>
+<td>the object path of a connection-type-specific
object this activation should use. This parameter is currently ignored for
-wired and mobile broadband connections, and the value of <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> should be used
-(ie, no specific object). For WiFi or WiMAX connections, pass the object
-path of a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> or <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> owned by <em class="parameter"><code>device</code></em>
-, which you can
-get using <a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()"><code class="function">nm_object_get_path()</code></a>, and which will be used to complete the
-details of the newly added connection. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+wired and mobile broadband connections, and the value of <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> should be used
+(ie, no specific object). For Wi-Fi or WiMAX connections, pass the object
+path of a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> or <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> owned by <em class="parameter"><code>device</code></em>, which you can
+get using <a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()"><code class="function">nm_object_get_path()</code></a>, and which will be used to complete the
+details of the newly added connection. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> the function to call when the call is done. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>the function to call when the call is done. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> user data to pass to the callback function. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data to pass to the callback function. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-deactivate-connection"></a><h3>nm_client_deactivate_connection ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_deactivate_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active</code></em>);</pre>
-<p>Deactivates an active <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-deactivate-connection"></a><h3>nm_client_deactivate_connection ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_deactivate_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active</code></em>);</pre>
+<p>
+Deactivates an active <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>active</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> to deactivate</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>active</code></em> :</span></p></td>
+<td>the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> to deactivate</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-networking-get-enabled"></a><h3>nm_client_networking_get_enabled ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_networking_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Whether networking is enabled or disabled.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-networking-get-enabled"></a><h3>nm_client_networking_get_enabled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_networking_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Whether networking is enabled or disabled.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if networking is enabled, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if networking is disabled</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if networking is enabled, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if networking is disabled</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-networking-set-enabled"></a><h3>nm_client_networking_set_enabled ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_networking_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
-<p>Enables or disables networking. When networking is disabled, all controlled
+<a name="nm-client-networking-set-enabled"></a><h3>nm_client_networking_set_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_networking_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Enables or disables networking. When networking is disabled, all controlled
interfaces are disconnected and deactivated. When networking is enabled,
-all controlled interfaces are available for activation.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+all controlled interfaces are available for activation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>enabled</p></td>
-<td class="parameter_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to set networking enabled, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to set networking disabled</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to set networking enabled, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to set networking disabled</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-wireless-get-enabled"></a><h3>nm_client_wireless_get_enabled ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_wireless_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Determines whether the wireless is enabled.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.15.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if wireless is enabled</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-client-wireless-set-enabled"></a><h3>nm_client_wireless_set_enabled ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_wireless_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
-<p>Enables or disables wireless devices.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wireless-get-enabled"></a><h3>nm_client_wireless_get_enabled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_wireless_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Determines whether the wireless is enabled.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>enabled</p></td>
-<td class="parameter_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable wireless</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if wireless is enabled</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-client-wireless-hardware-get-enabled"></a><h3>nm_client_wireless_hardware_get_enabled ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_wireless_hardware_get_enabled
- (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Determines whether the wireless hardware is enabled.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.17.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the wireless hardware is enabled</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-client-wwan-get-enabled"></a><h3>nm_client_wwan_get_enabled ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_wwan_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Determines whether WWAN is enabled.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.18.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if WWAN is enabled</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-wwan-set-enabled"></a><h3>nm_client_wwan_set_enabled ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_wwan_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
-<p>Enables or disables WWAN devices.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wireless-set-enabled"></a><h3>nm_client_wireless_set_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_wireless_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Enables or disables wireless devices.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>enabled</p></td>
-<td class="parameter_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable WWAN</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable wireless</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-wwan-hardware-get-enabled"></a><h3>nm_client_wwan_hardware_get_enabled ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_wwan_hardware_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Determines whether the WWAN hardware is enabled.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wireless-hardware-get-enabled"></a><h3>nm_client_wireless_hardware_get_enabled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_wireless_hardware_get_enabled
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Determines whether the wireless hardware is enabled.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the wireless hardware is enabled</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.20.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the WWAN hardware is enabled</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-wimax-get-enabled"></a><h3>nm_client_wimax_get_enabled ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_wimax_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Determines whether WiMAX is enabled.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wwan-get-enabled"></a><h3>nm_client_wwan_get_enabled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_wwan_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Determines whether WWAN is enabled.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if WWAN is enabled</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.21.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if WiMAX is enabled</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-wimax-set-enabled"></a><h3>nm_client_wimax_set_enabled ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_wimax_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
-<p>Enables or disables WiMAX devices.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wwan-set-enabled"></a><h3>nm_client_wwan_set_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_wwan_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Enables or disables WWAN devices.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>enabled</p></td>
-<td class="parameter_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable WiMAX</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable WWAN</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-wimax-hardware-get-enabled"></a><h3>nm_client_wimax_hardware_get_enabled ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_wimax_hardware_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Determines whether the WiMAX hardware is enabled.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wwan-hardware-get-enabled"></a><h3>nm_client_wwan_hardware_get_enabled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_wwan_hardware_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Determines whether the WWAN hardware is enabled.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the WWAN hardware is enabled</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.23.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the WiMAX hardware is enabled</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-version"></a><h3>nm_client_get_version ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_client_get_version (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Gets NetworkManager version.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wimax-get-enabled"></a><h3>nm_client_wimax_get_enabled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_wimax_get_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Determines whether WiMAX is enabled.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if WiMAX is enabled</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.24.6"></a><h4>Returns</h4>
-<p> string with the version</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-state"></a><h3>nm_client_get_state ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMState</span>
-nm_client_get_state (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Gets the current daemon state.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wimax-set-enabled"></a><h3>nm_client_wimax_set_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_wimax_set_enabled (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Enables or disables WiMAX devices.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable WiMAX</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.25.6"></a><h4>Returns</h4>
-<p> the current <code class="literal">NMState</code></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-manager-running"></a><h3>nm_client_get_manager_running ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_get_manager_running (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Determines whether the daemon is running.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-wimax-hardware-get-enabled"></a><h3>nm_client_wimax_hardware_get_enabled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_wimax_hardware_get_enabled
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Determines whether the WiMAX hardware is enabled.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the WiMAX hardware is enabled</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.26.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the daemon is running</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-active-connections"></a><h3>nm_client_get_active_connections ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_client_get_active_connections (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Gets the active connections.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.27.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-version"></a><h3>nm_client_get_version ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_client_get_version (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Gets NetworkManager version.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>string with the version</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.27.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>
-containing all the active <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>s.
-The returned array is owned by the client and should not be modified. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.ActiveConnection]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-sleep"></a><h3>nm_client_sleep ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_sleep (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> sleep_</code></em>);</pre>
-<p>Deprecated; use <a class="link" href="NMClient.html#nm-client-networking-set-enabled" title="nm_client_networking_set_enabled ()"><code class="function">nm_client_networking_set_enabled()</code></a> instead.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.28.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-state"></a><h3>nm_client_get_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMState</span> nm_client_get_state (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Gets the current daemon state.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>sleep_</p></td>
-<td class="parameter_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to put the daemon to sleep</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current <code class="literal">NMState</code>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-permission-result"></a><h3>nm_client_get_permission_result ()</h3>
-<pre class="programlisting"><a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="returnvalue">NMClientPermissionResult</span></a>
-nm_client_get_permission_result (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a> permission</code></em>);</pre>
-<p>Requests the result of a specific permission, which indicates whether the
-client can or cannot perform the action the permission represents</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.29.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-startup"></a><h3>nm_client_get_startup ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_get_startup (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Tests whether the daemon is still in the process of activating
+connections at startup.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>permission</p></td>
-<td class="parameter_description"><p>the permission for which to return the result, one of <a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>whether the daemon is still starting up</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.29.6"></a><h4>Returns</h4>
-<p> the permission's result, one of <a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="type">NMClientPermissionResult</span></a></p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-logging"></a><h3>nm_client_get_logging ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_get_logging (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><span class="type">char</span> **level</code></em>,
- <em class="parameter"><code><span class="type">char</span> **domains</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Gets NetworkManager current logging level and domains.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.30.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-manager-running"></a><h3>nm_client_get_manager_running ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_get_manager_running (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Determines whether the daemon is running.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>level</p></td>
-<td class="parameter_description"><p> return location for logging level string. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>domains</p></td>
-<td class="parameter_description"><p> return location for log domains string. The string is
-a list of domains separated by ",". </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p> return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the daemon is running</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.30.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-set-logging"></a><h3>nm_client_set_logging ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_client_set_logging (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *level</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *domains</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Sets NetworkManager logging level and/or domains.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.31.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-active-connections"></a><h3>nm_client_get_active_connections ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_client_get_active_connections (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Gets the active connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>level</p></td>
-<td class="parameter_description"><p> logging level to set (<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or an empty string for no change). </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>domains</p></td>
-<td class="parameter_description"><p> logging domains to set. The string should be a list of log
-domains separated by ",". (<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or an empty string for no change). </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p> return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>
+containing all the active <a href="NMActiveConnection.html"><span class="type">NMActiveConnections</span></a>.
+The returned array is owned by the client and should not be modified. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.ActiveConnection]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.31.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-connectivity"></a><h3>nm_client_get_connectivity ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMConnectivityState</span>
-nm_client_get_connectivity (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Gets the current network connectivity state. Contrast
-<a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()"><code class="function">nm_client_check_connectivity()</code></a> and
-<a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()"><code class="function">nm_client_check_connectivity_async()</code></a>, which re-check the
-connectivity state first before returning any information.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.32.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-sleep"></a><h3>nm_client_sleep ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_sleep (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> sleep_</code></em>);</pre>
+<p>
+Deprecated; use <a class="link" href="NMClient.html#nm-client-networking-set-enabled" title="nm_client_networking_set_enabled ()"><code class="function">nm_client_networking_set_enabled()</code></a> instead.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sleep_</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to put the daemon to sleep</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.32.6"></a><h4>Returns</h4>
-<p> the current connectivity state</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8.4</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-check-connectivity"></a><h3>nm_client_check_connectivity ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMConnectivityState</span>
-nm_client_check_connectivity (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Updates the network connectivity state and returns the (new)
-current state. Contrast <a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()"><code class="function">nm_client_get_connectivity()</code></a>, which returns
-the most recent known state without re-checking.</p>
-<p>This is a blocking call; use <a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()"><code class="function">nm_client_check_connectivity_async()</code></a>
-if you do not want to block.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.33.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-permission-result"></a><h3>nm_client_get_permission_result ()</h3>
+<pre class="programlisting"><a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="returnvalue">NMClientPermissionResult</span></a> nm_client_get_permission_result
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a> permission</code></em>);</pre>
+<p>
+Requests the result of a specific permission, which indicates whether the
+client can or cannot perform the action the permission represents
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>cancellable</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>permission</code></em> :</span></p></td>
+<td>the permission for which to return the result, one of <a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the permission's result, one of <a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="type">NMClientPermissionResult</span></a>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.33.7"></a><h4>Returns</h4>
-<p> the (new) current connectivity state</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8.4</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-client-check-connectivity-async"></a><h3>nm_client_check_connectivity_async ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_client_check_connectivity_async (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Asynchronously updates the network connectivity state and invokes
-<em class="parameter"><code>callback</code></em>
- when complete. Contrast <a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()"><code class="function">nm_client_get_connectivity()</code></a>,
-which (immediately) returns the most recent known state without
-re-checking, and <a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()"><code class="function">nm_client_check_connectivity()</code></a>, which blocks.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.34.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-logging"></a><h3>nm_client_get_logging ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_get_logging (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **level</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **domains</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Gets NetworkManager current logging level and domains.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>cancellable</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>level</code></em> :</span></p></td>
+<td>return location for logging level string. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p>callback to call with the result</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>domains</code></em> :</span></p></td>
+<td>return location for log domains string. The string is
+a list of domains separated by ",". <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>data for <em class="parameter"><code>callback</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</td>
</tr>
</tbody>
</table></div>
-</div>
-<p class="since">Since 0.9.8.4</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-client-check-connectivity-finish"></a><h3>nm_client_check_connectivity_finish ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMConnectivityState</span>
-nm_client_check_connectivity_finish (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Retrieves the result of an <a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()"><code class="function">nm_client_check_connectivity_async()</code></a>
-call.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.35.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-set-logging"></a><h3>nm_client_set_logging ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_set_logging (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *level</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *domains</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Sets NetworkManager logging level and/or domains.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>result</p></td>
-<td class="parameter_description"><p>the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>level</code></em> :</span></p></td>
+<td>logging level to set (<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> or an empty string for no change). <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>domains</code></em> :</span></p></td>
+<td>logging domains to set. The string should be a list of log
+domains separated by ",". (<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> or an empty string for no change). <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.35.6"></a><h4>Returns</h4>
-<p> the (new) current connectivity state</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-client-get-primary-connection"></a><h3>nm_client_get_primary_connection ()</h3>
-<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> *
-nm_client_get_primary_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> corresponding to the primary active
-network device.</p>
-<p>In particular, when there is no VPN active, or the VPN does not
-have the default route, this returns the active connection that has
-the default route. If there is a VPN active with the default route,
-then this function returns the active connection that contains the
-route to the VPN endpoint.</p>
-<p>If there is no default route, or the default route is over a
-non-NetworkManager-recognized device, this will return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.36.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.36.8"></a><h4>Returns</h4>
-<p> the appropriate <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>, if
-any. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-<p class="since">Since 0.9.8.4</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-client-get-activating-connection"></a><h3>nm_client_get_activating_connection ()</h3>
-<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> *
-nm_client_get_activating_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
-<p>Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> corresponding to a
-currently-activating connection that is expected to become the new
-<a class="link" href="NMClient.html#NMClient--primary-connection" title="The “primary-connection†property"><span class="type">“primary-connectionâ€</span></a> upon successful activation.</p>
-<div class="refsect3">
-<a name="id-1.3.2.9.37.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-connectivity"></a><h3>nm_client_get_connectivity ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMConnectivityState</span> nm_client_get_connectivity (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Gets the current network connectivity state. Contrast
+<a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()"><code class="function">nm_client_check_connectivity()</code></a> and
+<a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()"><code class="function">nm_client_check_connectivity_async()</code></a>, which re-check the
+connectivity state first before returning any information.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>client</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current connectivity state</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.2.9.37.6"></a><h4>Returns</h4>
-<p> the appropriate <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>, if
-any. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-<p class="since">Since 0.9.8.4</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMClient.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-CLIENT-VERSION:CAPS"></a><h3>NM_CLIENT_VERSION</h3>
-<pre class="programlisting">#define NM_CLIENT_VERSION "version"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-STATE:CAPS"></a><h3>NM_CLIENT_STATE</h3>
-<pre class="programlisting">#define NM_CLIENT_STATE "state"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-MANAGER-RUNNING:CAPS"></a><h3>NM_CLIENT_MANAGER_RUNNING</h3>
-<pre class="programlisting">#define NM_CLIENT_MANAGER_RUNNING "manager-running"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-NETWORKING-ENABLED:CAPS"></a><h3>NM_CLIENT_NETWORKING_ENABLED</h3>
-<pre class="programlisting">#define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
-</pre>
-<p>
-</p>
+<p class="since">Since 0.9.8.6</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-CLIENT-WIRELESS-ENABLED:CAPS"></a><h3>NM_CLIENT_WIRELESS_ENABLED</h3>
-<pre class="programlisting">#define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled"
-</pre>
+<a name="nm-client-check-connectivity"></a><h3>nm_client_check_connectivity ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMConnectivityState</span> nm_client_check_connectivity (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
+Updates the network connectivity state and returns the (new)
+current state. Contrast <a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()"><code class="function">nm_client_get_connectivity()</code></a>, which returns
+the most recent known state without re-checking.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS"></a><h3>NM_CLIENT_WIRELESS_HARDWARE_ENABLED</h3>
-<pre class="programlisting">#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-WWAN-ENABLED:CAPS"></a><h3>NM_CLIENT_WWAN_ENABLED</h3>
-<pre class="programlisting">#define NM_CLIENT_WWAN_ENABLED "wwan-enabled"
-</pre>
<p>
+This is a blocking call; use <a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()"><code class="function">nm_client_check_connectivity_async()</code></a>
+if you do not want to block.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS"></a><h3>NM_CLIENT_WWAN_HARDWARE_ENABLED</h3>
-<pre class="programlisting">#define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-WIMAX-ENABLED:CAPS"></a><h3>NM_CLIENT_WIMAX_ENABLED</h3>
-<pre class="programlisting">#define NM_CLIENT_WIMAX_ENABLED "wimax-enabled"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS"></a><h3>NM_CLIENT_WIMAX_HARDWARE_ENABLED</h3>
-<pre class="programlisting">#define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-ACTIVE-CONNECTIONS:CAPS"></a><h3>NM_CLIENT_ACTIVE_CONNECTIONS</h3>
-<pre class="programlisting">#define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-CONNECTIVITY:CAPS"></a><h3>NM_CLIENT_CONNECTIVITY</h3>
-<pre class="programlisting">#define NM_CLIENT_CONNECTIVITY "connectivity"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-PRIMARY-CONNECTION:CAPS"></a><h3>NM_CLIENT_PRIMARY_CONNECTION</h3>
-<pre class="programlisting">#define NM_CLIENT_PRIMARY_CONNECTION "primary-connection"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-CLIENT-ACTIVATING-CONNECTION:CAPS"></a><h3>NM_CLIENT_ACTIVATING_CONNECTION</h3>
-<pre class="programlisting">#define NM_CLIENT_ACTIVATING_CONNECTION "activating-connection"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMClientPermission"></a><h3>enum NMClientPermission</h3>
-<p><a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a> values indicate various permissions that NetworkManager
-clients can obtain to perform certain tasks on behalf of the current user.</p>
-<div class="refsect3">
-<a name="id-1.3.2.10.16.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-NONE:CAPS"></a>NM_CLIENT_PERMISSION_NONE</p></td>
-<td class="enum_member_description">
-<p>unknown or no permission</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-NETWORK:CAPS"></a>NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK</p></td>
-<td class="enum_member_description">
-<p>controls whether networking
- can be globally enabled or disabled</p>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIFI:CAPS"></a>NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI</p></td>
-<td class="enum_member_description">
-<p>controls whether WiFi can be
- globally enabled or disabled</p>
+<td><p><span class="term"><em class="parameter"><code>cancellable</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WWAN:CAPS"></a>NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN</p></td>
-<td class="enum_member_description">
-<p>controls whether WWAN (3G) can be
- globally enabled or disabled</p>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIMAX:CAPS"></a>NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX</p></td>
-<td class="enum_member_description">
-<p>controls whether WiMAX can be
- globally enabled or disabled</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the (new) current connectivity state</td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-check-connectivity-async"></a><h3>nm_client_check_connectivity_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_check_connectivity_async (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Asynchronously updates the network connectivity state and invokes
+<em class="parameter"><code>callback</code></em> when complete. Contrast <a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()"><code class="function">nm_client_get_connectivity()</code></a>,
+which (immediately) returns the most recent known state without
+re-checking, and <a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()"><code class="function">nm_client_check_connectivity()</code></a>, which blocks.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-SLEEP-WAKE:CAPS"></a>NM_CLIENT_PERMISSION_SLEEP_WAKE</p></td>
-<td class="enum_member_description">
-<p>controls whether the client can ask
- NetworkManager to sleep and wake</p>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-NETWORK-CONTROL:CAPS"></a>NM_CLIENT_PERMISSION_NETWORK_CONTROL</p></td>
-<td class="enum_member_description">
-<p>controls whether networking connections
- can be started, stopped, and changed</p>
+<td><p><span class="term"><em class="parameter"><code>cancellable</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-WIFI-SHARE-PROTECTED:CAPS"></a>NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED</p></td>
-<td class="enum_member_description">
-<p>controls whether a password
- protected WiFi hotspot can be created</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to call with the result</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-WIFI-SHARE-OPEN:CAPS"></a>NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN</p></td>
-<td class="enum_member_description">
-<p>controls whether an open WiFi hotspot
- can be created</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>data for <em class="parameter"><code>callback</code></em>.</td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-check-connectivity-finish"></a><h3>nm_client_check_connectivity_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMConnectivityState</span> nm_client_check_connectivity_finish (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Retrieves the result of an <a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()"><code class="function">nm_client_check_connectivity_async()</code></a>
+call.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS"></a>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM</p></td>
-<td class="enum_member_description">
-<p>controls whether connections
- that are available to all users can be modified</p>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS"></a>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN</p></td>
-<td class="enum_member_description">
-<p>controls whether connections
- owned by the current user can be modified</p>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS"></a>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME</p></td>
-<td class="enum_member_description">
-<p>controls whether the
- persistent hostname can be changed</p>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-LAST:CAPS"></a>NM_CLIENT_PERMISSION_LAST</p></td>
-<td class="enum_member_description">
-<p>a reserved boundary value</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the (new) current connectivity state</td>
</tr>
</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.8.6</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClientPermissionResult"></a><h3>enum NMClientPermissionResult</h3>
-<p><a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="type">NMClientPermissionResult</span></a> values indicate what authorizations and permissions
-the user requires to obtain a given <a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.2.10.17.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-client-get-primary-connection"></a><h3>nm_client_get_primary_connection ()</h3>
+<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * nm_client_get_primary_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> corresponding to the primary active
+network device.
+</p>
+<p>
+In particular, when there is no VPN active, or the VPN does not
+have the default route, this returns the active connection that has
+the default route. If there is a VPN active with the default route,
+then this function returns the active connection that contains the
+route to the VPN endpoint.
+</p>
+<p>
+If there is no default route, or the default route is over a
+non-NetworkManager-recognized device, this will return <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS"></a>NM_CLIENT_PERMISSION_RESULT_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or no authorization</p>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-RESULT-YES:CAPS"></a>NM_CLIENT_PERMISSION_RESULT_YES</p></td>
-<td class="enum_member_description">
-<p>the permission is available</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the appropriate <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>, if
+any. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-activating-connection"></a><h3>nm_client_get_activating_connection ()</h3>
+<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * nm_client_get_activating_connection
+ (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> corresponding to a
+currently-activating connection that is expected to become the new
+<a class="link" href="NMClient.html#NMClient--primary-connection" title='The "primary-connection" property'><span class="type">"primary-connection"</span></a> upon successful activation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS"></a>NM_CLIENT_PERMISSION_RESULT_AUTH</p></td>
-<td class="enum_member_description">
-<p>authorization is necessary before the
- permission is available</p>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>an <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-RESULT-NO:CAPS"></a>NM_CLIENT_PERMISSION_RESULT_NO</p></td>
-<td class="enum_member_description">
-<p>permission to perform the operation is
- denied by system policy</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the appropriate <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>, if
+any. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.8.6</p>
</div>
</div>
<div class="refsect1">
<a name="NMClient.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMClient--activating-connection"></a><h3>The <code class="literal">“activating-connectionâ€</code> property</h3>
-<pre class="programlisting"> “activating-connection†<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *</pre>
-<p>Activating connection.</p>
-<p>Flags: Read</p>
-<p class="since">Since 0.9.8.4</p>
+<a name="NMClient--activating-connection"></a><h3>The <code class="literal">"activating-connection"</code> property</h3>
+<pre class="programlisting"> "activating-connection" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read</pre>
+<p>
+The <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> of the activating connection that is
+likely to become the new <a class="link" href="NMClient.html#NMClient--primary-connection" title='The "primary-connection" property'><span class="type">"primary-connection"</span></a>.
+</p>
+<p class="since">Since 0.9.8.6</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--active-connections"></a><h3>The <code class="literal">“active-connectionsâ€</code> property</h3>
-<pre class="programlisting"> “active-connections†<span class="type">NMObjectArray</span> *</pre>
+<a name="NMClient--active-connections"></a><h3>The <code class="literal">"active-connections"</code> property</h3>
+<pre class="programlisting"> "active-connections" <span class="type">NMObjectArray</span>* : Read</pre>
<p>Active connections.</p>
-<p>Flags: Read</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--connectivity"></a><h3>The <code class="literal">“connectivityâ€</code> property</h3>
-<pre class="programlisting"> “connectivity†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Connectivity state.</p>
-<p>Flags: Read</p>
+<a name="NMClient--connectivity"></a><h3>The <code class="literal">"connectivity"</code> property</h3>
+<pre class="programlisting"> "connectivity" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The network connectivity state.
+</p>
<p>Allowed values: &lt;= 4</p>
<p>Default value: 0</p>
-<p class="since">Since 0.9.8.4</p>
+<p class="since">Since 0.9.8.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--devices"></a><h3>The <code class="literal">"devices"</code> property</h3>
+<pre class="programlisting"> "devices" <span class="type">NMObjectArray</span>* : Read</pre>
+<p>
+List of known network devices.
+</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--manager-running"></a><h3>The <code class="literal">“manager-runningâ€</code> property</h3>
-<pre class="programlisting"> “manager-running†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--manager-running"></a><h3>The <code class="literal">"manager-running"</code> property</h3>
+<pre class="programlisting"> "manager-running" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>Whether NetworkManager is running.</p>
-<p>Flags: Read</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--networking-enabled"></a><h3>The <code class="literal">“networking-enabledâ€</code> property</h3>
-<pre class="programlisting"> “networking-enabled†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--networking-enabled"></a><h3>The <code class="literal">"networking-enabled"</code> property</h3>
+<pre class="programlisting"> "networking-enabled" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
<p>Is networking enabled.</p>
-<p>Flags: Read / Write</p>
<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--primary-connection"></a><h3>The <code class="literal">“primary-connectionâ€</code> property</h3>
-<pre class="programlisting"> “primary-connection†<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *</pre>
-<p>Primary connection.</p>
-<p>Flags: Read</p>
-<p class="since">Since 0.9.8.4</p>
+<a name="NMClient--primary-connection"></a><h3>The <code class="literal">"primary-connection"</code> property</h3>
+<pre class="programlisting"> "primary-connection" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read</pre>
+<p>
+The <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> of the device with the default route;
+see <a class="link" href="NMClient.html#nm-client-get-primary-connection" title="nm_client_get_primary_connection ()"><code class="function">nm_client_get_primary_connection()</code></a> for more details.
+</p>
+<p class="since">Since 0.9.8.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--startup"></a><h3>The <code class="literal">"startup"</code> property</h3>
+<pre class="programlisting"> "startup" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the daemon is still starting up.
+</p>
+<p>Default value: FALSE</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--state"></a><h3>The <code class="literal">“stateâ€</code> property</h3>
-<pre class="programlisting"> “state†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>NetworkManager state.</p>
-<p>Flags: Read</p>
+<a name="NMClient--state"></a><h3>The <code class="literal">"state"</code> property</h3>
+<pre class="programlisting"> "state" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The current daemon state.
+</p>
<p>Allowed values: &lt;= 70</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--version"></a><h3>The <code class="literal">“versionâ€</code> property</h3>
-<pre class="programlisting"> “version†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>NetworkManager version.</p>
-<p>Flags: Read</p>
+<a name="NMClient--version"></a><h3>The <code class="literal">"version"</code> property</h3>
+<pre class="programlisting"> "version" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The NetworkManager version.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--wimax-enabled"></a><h3>The <code class="literal">“wimax-enabledâ€</code> property</h3>
-<pre class="programlisting"> “wimax-enabled†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--wimax-enabled"></a><h3>The <code class="literal">"wimax-enabled"</code> property</h3>
+<pre class="programlisting"> "wimax-enabled" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
<p>Is WiMAX enabled.</p>
-<p>Flags: Read / Write</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--wimax-hardware-enabled"></a><h3>The <code class="literal">“wimax-hardware-enabledâ€</code> property</h3>
-<pre class="programlisting"> “wimax-hardware-enabled†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--wimax-hardware-enabled"></a><h3>The <code class="literal">"wimax-hardware-enabled"</code> property</h3>
+<pre class="programlisting"> "wimax-hardware-enabled" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>Is WiMAX hardware enabled.</p>
-<p>Flags: Read</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--wireless-enabled"></a><h3>The <code class="literal">“wireless-enabledâ€</code> property</h3>
-<pre class="programlisting"> “wireless-enabled†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--wireless-enabled"></a><h3>The <code class="literal">"wireless-enabled"</code> property</h3>
+<pre class="programlisting"> "wireless-enabled" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
<p>Is wireless enabled.</p>
-<p>Flags: Read / Write</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--wireless-hardware-enabled"></a><h3>The <code class="literal">“wireless-hardware-enabledâ€</code> property</h3>
-<pre class="programlisting"> “wireless-hardware-enabled†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--wireless-hardware-enabled"></a><h3>The <code class="literal">"wireless-hardware-enabled"</code> property</h3>
+<pre class="programlisting"> "wireless-hardware-enabled" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>Is wireless hardware enabled.</p>
-<p>Flags: Read</p>
<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--wwan-enabled"></a><h3>The <code class="literal">“wwan-enabledâ€</code> property</h3>
-<pre class="programlisting"> “wwan-enabled†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--wwan-enabled"></a><h3>The <code class="literal">"wwan-enabled"</code> property</h3>
+<pre class="programlisting"> "wwan-enabled" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
<p>Is WWAN enabled.</p>
-<p>Flags: Read / Write</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient--wwan-hardware-enabled"></a><h3>The <code class="literal">“wwan-hardware-enabledâ€</code> property</h3>
-<pre class="programlisting"> “wwan-hardware-enabled†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMClient--wwan-hardware-enabled"></a><h3>The <code class="literal">"wwan-hardware-enabled"</code> property</h3>
+<pre class="programlisting"> "wwan-hardware-enabled" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>Is WWAN hardware enabled.</p>
-<p>Flags: Read</p>
<p>Default value: FALSE</p>
</div>
</div>
<div class="refsect1">
<a name="NMClient.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMClient-device-added"></a><h3>The <code class="literal">“device-addedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client,
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *device,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMClient-device-added"></a><h3>The <code class="literal">"device-added"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client,
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *device,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies that a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> is added.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>the client that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>the new device. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMClient.Device]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient-device-removed"></a><h3>The <code class="literal">“device-removedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client,
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *device,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMClient-device-removed"></a><h3>The <code class="literal">"device-removed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client,
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *device,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies that a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> is removed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>the client that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>the removed device. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMClient.Device]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMClient-permission-changed"></a><h3>The <code class="literal">“permission-changedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> permission,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> result,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMClient-permission-changed"></a><h3>The <code class="literal">"permission-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> permission,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> result,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies that a permission has changed
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
+<td>the client that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>permission</code></em> :</span></p></td>
+<td>a permission from <a class="link" href="NMClient.html#NMClientPermission" title="enum NMClientPermission"><span class="type">NMClientPermission</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the permission's result, one of <a class="link" href="NMClient.html#NMClientPermissionResult" title="enum NMClientPermissionResult"><span class="type">NMClientPermissionResult</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDHCP4Config.html b/docs/libnm-glib/html/NMDHCP4Config.html
index 5809f4b71..aff131653 100644
--- a/docs/libnm-glib/html/NMDHCP4Config.html
+++ b/docs/libnm-glib/html/NMDHCP4Config.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDHCP4Config</title>
+<title>NMDHCP4Config</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMIP6Config.html" title="NMIP6Config">
<link rel="next" href="NMDHCP6Config.html" title="NMDHCP6Config">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDHCP4Config.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDHCP4Config.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDHCP4Config.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMIP6Config.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDHCP6Config.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMIP6Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDHCP6Config.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDHCP4Config.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDHCP4Config.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDHCP4Config.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDHCP4Config.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDHCP4Config.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDHCP4Config"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,76 +39,38 @@
<h2><span class="refentrytitle"><a name="NMDHCP4Config.top_of_page"></a>NMDHCP4Config</span></h2>
<p>NMDHCP4Config</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDHCP4Config.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-new" title="nm_dhcp4_config_new ()">nm_dhcp4_config_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-options" title="nm_dhcp4_config_get_options ()">nm_dhcp4_config_get_options</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-one-option" title="nm_dhcp4_config_get_one_option ()">nm_dhcp4_config_get_one_option</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDHCP4Config.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="NMDHCP4Config.html#NMDHCP4Config-struct" title="NMDHCP4Config">NMDHCP4Config</a>;
+ <a class="link" href="NMDHCP4Config.html#NMDHCP4ConfigClass" title="NMDHCP4ConfigClass">NMDHCP4ConfigClass</a>;
+#define <a class="link" href="NMDHCP4Config.html#NM-DHCP4-CONFIG-OPTIONS:CAPS" title="NM_DHCP4_CONFIG_OPTIONS">NM_DHCP4_CONFIG_OPTIONS</a>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-new" title="nm_dhcp4_config_new ()">nm_dhcp4_config_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-options" title="nm_dhcp4_config_get_options ()">nm_dhcp4_config_get_options</a> (<em class="parameter"><code><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-one-option" title="nm_dhcp4_config_get_one_option ()">nm_dhcp4_config_get_one_option</a> (<em class="parameter"><code><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *config</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *option</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDHCP4Config.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody><tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDHCP4Config.html#NMDHCP4Config--options" title="The “options†property">options</a></td>
-<td class="property_flags">Read</td>
-</tr></tbody>
-</table></div>
+<a name="NMDHCP4Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMDHCP4Config
+</pre>
</div>
<div class="refsect1">
-<a name="NMDHCP4Config.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDHCP4Config.html#NM-DHCP4-CONFIG-OPTIONS:CAPS" title="NM_DHCP4_CONFIG_OPTIONS">NM_DHCP4_CONFIG_OPTIONS</a></td>
-</tr></tbody>
-</table></div>
+<a name="NMDHCP4Config.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDHCP4Config implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDHCP4Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMDHCP4Config
+<a name="NMDHCP4Config.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDHCP4Config.html#NMDHCP4Config--options" title='The "options" property'>options</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read
</pre>
</div>
<div class="refsect1">
@@ -109,128 +79,145 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDHCP4Config.functions_details"></a><h2>Functions</h2>
+<a name="NMDHCP4Config.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDHCP4Config-struct"></a><h3>NMDHCP4Config</h3>
+<pre class="programlisting">typedef struct _NMDHCP4Config NMDHCP4Config;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDHCP4ConfigClass"></a><h3>NMDHCP4ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDHCP4ConfigClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DHCP4-CONFIG-OPTIONS:CAPS"></a><h3>NM_DHCP4_CONFIG_OPTIONS</h3>
+<pre class="programlisting">#define NM_DHCP4_CONFIG_OPTIONS "options"
+</pre>
+<p>
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-dhcp4-config-new"></a><h3>nm_dhcp4_config_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_dhcp4_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.20.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-dhcp4-config-new"></a><h3>nm_dhcp4_config_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_dhcp4_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>object_path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>object_path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new configuration. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.20.8.2.6"></a><h4>Returns</h4>
-<p> a new configuration. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-dhcp4-config-get-options"></a><h3>nm_dhcp4_config_get_options ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-nm_dhcp4_config_get_options (<em class="parameter"><code><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *config</code></em>);</pre>
-<p>Gets all the options contained in the configuration.</p>
-<div class="refsect3">
-<a name="id-1.3.20.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-dhcp4-config-get-options"></a><h3>nm_dhcp4_config_get_options ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * nm_dhcp4_config_get_options (<em class="parameter"><code><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *config</code></em>);</pre>
+<p>
+Gets all the options contained in the configuration.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing strings for keys and values.
+This is the internal copy used by the configuration, and must not be modified. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.20.8.3.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing strings for keys and values.
-This is the internal copy used by the configuration, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-dhcp4-config-get-one-option"></a><h3>nm_dhcp4_config_get_one_option ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_dhcp4_config_get_one_option (<em class="parameter"><code><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *config</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *option</code></em>);</pre>
-<p>Gets one option by option name.</p>
-<div class="refsect3">
-<a name="id-1.3.20.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-dhcp4-config-get-one-option"></a><h3>nm_dhcp4_config_get_one_option ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_dhcp4_config_get_one_option (<em class="parameter"><code><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *config</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *option</code></em>);</pre>
+<p>
+Gets one option by option name.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>option</code></em> :</span></p></td>
+<td>the option to retrieve</td>
</tr>
<tr>
-<td class="parameter_name"><p>option</p></td>
-<td class="parameter_description"><p>the option to retrieve</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the configuration option's value. This is the internal string used by the
+configuration, and must not be modified.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.20.8.4.6"></a><h4>Returns</h4>
-<p> the configuration option's value. This is the internal string used by the
-configuration, and must not be modified.</p>
-<p></p>
-</div>
-</div>
</div>
<div class="refsect1">
-<a name="NMDHCP4Config.other_details"></a><h2>Types and Values</h2>
+<a name="NMDHCP4Config.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-DHCP4-CONFIG-OPTIONS:CAPS"></a><h3>NM_DHCP4_CONFIG_OPTIONS</h3>
-<pre class="programlisting">#define NM_DHCP4_CONFIG_OPTIONS "options"
-</pre>
+<a name="NMDHCP4Config--options"></a><h3>The <code class="literal">"options"</code> property</h3>
+<pre class="programlisting"> "options" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing options of the configuration.
+</p>
+<p>
+Type: GLib.HashTable(utf8,GObject.Value)
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDHCP4Config.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMDHCP4Config--options"></a><h3>The <code class="literal">“optionsâ€</code> property</h3>
-<pre class="programlisting"> “options†<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *</pre>
-<p>Options.</p>
-<p>Flags: Read</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDHCP6Config.html b/docs/libnm-glib/html/NMDHCP6Config.html
index 6d0c04f6b..cc5b4931f 100644
--- a/docs/libnm-glib/html/NMDHCP6Config.html
+++ b/docs/libnm-glib/html/NMDHCP6Config.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDHCP6Config</title>
+<title>NMDHCP6Config</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDHCP4Config.html" title="NMDHCP4Config">
<link rel="next" href="NMObject.html" title="NMObject">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDHCP6Config.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDHCP6Config.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDHCP6Config.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDHCP4Config.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMObject.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDHCP4Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMObject.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDHCP6Config.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDHCP6Config.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDHCP6Config.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDHCP6Config.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDHCP6Config.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDHCP6Config"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,76 +39,38 @@
<h2><span class="refentrytitle"><a name="NMDHCP6Config.top_of_page"></a>NMDHCP6Config</span></h2>
<p>NMDHCP6Config</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDHCP6Config.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-new" title="nm_dhcp6_config_new ()">nm_dhcp6_config_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-options" title="nm_dhcp6_config_get_options ()">nm_dhcp6_config_get_options</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-one-option" title="nm_dhcp6_config_get_one_option ()">nm_dhcp6_config_get_one_option</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDHCP6Config.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="NMDHCP6Config.html#NMDHCP6Config-struct" title="NMDHCP6Config">NMDHCP6Config</a>;
+ <a class="link" href="NMDHCP6Config.html#NMDHCP6ConfigClass" title="NMDHCP6ConfigClass">NMDHCP6ConfigClass</a>;
+#define <a class="link" href="NMDHCP6Config.html#NM-DHCP6-CONFIG-OPTIONS:CAPS" title="NM_DHCP6_CONFIG_OPTIONS">NM_DHCP6_CONFIG_OPTIONS</a>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-new" title="nm_dhcp6_config_new ()">nm_dhcp6_config_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-options" title="nm_dhcp6_config_get_options ()">nm_dhcp6_config_get_options</a> (<em class="parameter"><code><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-one-option" title="nm_dhcp6_config_get_one_option ()">nm_dhcp6_config_get_one_option</a> (<em class="parameter"><code><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *config</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *option</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDHCP6Config.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody><tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDHCP6Config.html#NMDHCP6Config--options" title="The “options†property">options</a></td>
-<td class="property_flags">Read</td>
-</tr></tbody>
-</table></div>
+<a name="NMDHCP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMDHCP6Config
+</pre>
</div>
<div class="refsect1">
-<a name="NMDHCP6Config.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDHCP6Config.html#NM-DHCP6-CONFIG-OPTIONS:CAPS" title="NM_DHCP6_CONFIG_OPTIONS">NM_DHCP6_CONFIG_OPTIONS</a></td>
-</tr></tbody>
-</table></div>
+<a name="NMDHCP6Config.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDHCP6Config implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDHCP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMDHCP6Config
+<a name="NMDHCP6Config.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDHCP6Config.html#NMDHCP6Config--options" title='The "options" property'>options</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read
</pre>
</div>
<div class="refsect1">
@@ -109,128 +79,145 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDHCP6Config.functions_details"></a><h2>Functions</h2>
+<a name="NMDHCP6Config.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDHCP6Config-struct"></a><h3>NMDHCP6Config</h3>
+<pre class="programlisting">typedef struct _NMDHCP6Config NMDHCP6Config;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDHCP6ConfigClass"></a><h3>NMDHCP6ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDHCP6ConfigClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DHCP6-CONFIG-OPTIONS:CAPS"></a><h3>NM_DHCP6_CONFIG_OPTIONS</h3>
+<pre class="programlisting">#define NM_DHCP6_CONFIG_OPTIONS "options"
+</pre>
+<p>
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-dhcp6-config-new"></a><h3>nm_dhcp6_config_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_dhcp6_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.21.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-dhcp6-config-new"></a><h3>nm_dhcp6_config_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_dhcp6_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>object_path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>object_path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new configuration. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.21.8.2.6"></a><h4>Returns</h4>
-<p> a new configuration. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-dhcp6-config-get-options"></a><h3>nm_dhcp6_config_get_options ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-nm_dhcp6_config_get_options (<em class="parameter"><code><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *config</code></em>);</pre>
-<p>Gets all the options contained in the configuration.</p>
-<div class="refsect3">
-<a name="id-1.3.21.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-dhcp6-config-get-options"></a><h3>nm_dhcp6_config_get_options ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * nm_dhcp6_config_get_options (<em class="parameter"><code><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *config</code></em>);</pre>
+<p>
+Gets all the options contained in the configuration.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing strings for keys and values.
+This is the internal copy used by the configuration, and must not be modified. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.21.8.3.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing strings for keys and values.
-This is the internal copy used by the configuration, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-dhcp6-config-get-one-option"></a><h3>nm_dhcp6_config_get_one_option ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_dhcp6_config_get_one_option (<em class="parameter"><code><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *config</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *option</code></em>);</pre>
-<p>Gets one option by option name.</p>
-<div class="refsect3">
-<a name="id-1.3.21.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-dhcp6-config-get-one-option"></a><h3>nm_dhcp6_config_get_one_option ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_dhcp6_config_get_one_option (<em class="parameter"><code><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *config</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *option</code></em>);</pre>
+<p>
+Gets one option by option name.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>option</code></em> :</span></p></td>
+<td>the option to retrieve</td>
</tr>
<tr>
-<td class="parameter_name"><p>option</p></td>
-<td class="parameter_description"><p>the option to retrieve</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the configuration option's value. This is the internal string used by the
+configuration, and must not be modified.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.21.8.4.6"></a><h4>Returns</h4>
-<p> the configuration option's value. This is the internal string used by the
-configuration, and must not be modified.</p>
-<p></p>
-</div>
-</div>
</div>
<div class="refsect1">
-<a name="NMDHCP6Config.other_details"></a><h2>Types and Values</h2>
+<a name="NMDHCP6Config.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-DHCP6-CONFIG-OPTIONS:CAPS"></a><h3>NM_DHCP6_CONFIG_OPTIONS</h3>
-<pre class="programlisting">#define NM_DHCP6_CONFIG_OPTIONS "options"
-</pre>
+<a name="NMDHCP6Config--options"></a><h3>The <code class="literal">"options"</code> property</h3>
+<pre class="programlisting"> "options" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing options of the configuration.
+</p>
+<p>
+Type: GLib.HashTable(utf8,GObject.Value)
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDHCP6Config.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMDHCP6Config--options"></a><h3>The <code class="literal">“optionsâ€</code> property</h3>
-<pre class="programlisting"> “options†<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *</pre>
-<p>Options.</p>
-<p>Flags: Read</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDevice.html b/docs/libnm-glib/html/NMDevice.html
index 35d1dd2a6..ad4e490b9 100644
--- a/docs/libnm-glib/html/NMDevice.html
+++ b/docs/libnm-glib/html/NMDevice.html
@@ -2,29 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDevice</title>
+<title>NMDevice</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMActiveConnection.html" title="NMActiveConnection">
<link rel="next" href="NMDeviceEthernet.html" title="NMDeviceEthernet">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDevice.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDevice.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDevice.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMDevice.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMActiveConnection.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceEthernet.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMActiveConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceEthernet.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDevice.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDevice.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDevice.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDevice.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDevice.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMDevice.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDevice"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,1710 +41,1703 @@
<h2><span class="refentrytitle"><a name="NMDevice.top_of_page"></a>NMDevice</span></h2>
<p>NMDevice</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDevice.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDevice.html#NMDeviceError" title="enum NMDeviceError">NMDeviceError</a>;
+#define <a class="link" href="NMDevice.html#NM-DEVICE-ERROR:CAPS" title="NM_DEVICE_ERROR">NM_DEVICE_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDevice.html#nm-device-error-quark" title="nm_device_error_quark ()">nm_device_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDevice.html#NM-DEVICE-DEVICE-TYPE:CAPS" title="NM_DEVICE_DEVICE_TYPE">NM_DEVICE_DEVICE_TYPE</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-UDI:CAPS" title="NM_DEVICE_UDI">NM_DEVICE_UDI</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-INTERFACE:CAPS" title="NM_DEVICE_INTERFACE">NM_DEVICE_INTERFACE</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-IP-INTERFACE:CAPS" title="NM_DEVICE_IP_INTERFACE">NM_DEVICE_IP_INTERFACE</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-DRIVER:CAPS" title="NM_DEVICE_DRIVER">NM_DEVICE_DRIVER</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-DRIVER-VERSION:CAPS" title="NM_DEVICE_DRIVER_VERSION">NM_DEVICE_DRIVER_VERSION</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-FIRMWARE-VERSION:CAPS" title="NM_DEVICE_FIRMWARE_VERSION">NM_DEVICE_FIRMWARE_VERSION</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-CAPABILITIES:CAPS" title="NM_DEVICE_CAPABILITIES">NM_DEVICE_CAPABILITIES</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-MANAGED:CAPS" title="NM_DEVICE_MANAGED">NM_DEVICE_MANAGED</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-AUTOCONNECT:CAPS" title="NM_DEVICE_AUTOCONNECT">NM_DEVICE_AUTOCONNECT</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-FIRMWARE-MISSING:CAPS" title="NM_DEVICE_FIRMWARE_MISSING">NM_DEVICE_FIRMWARE_MISSING</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-IP4-CONFIG:CAPS" title="NM_DEVICE_IP4_CONFIG">NM_DEVICE_IP4_CONFIG</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-DHCP4-CONFIG:CAPS" title="NM_DEVICE_DHCP4_CONFIG">NM_DEVICE_DHCP4_CONFIG</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS" title="NM_DEVICE_IP6_CONFIG">NM_DEVICE_IP6_CONFIG</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS" title="NM_DEVICE_DHCP6_CONFIG">NM_DEVICE_DHCP6_CONFIG</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-STATE:CAPS" title="NM_DEVICE_STATE">NM_DEVICE_STATE</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-STATE-REASON:CAPS" title="NM_DEVICE_STATE_REASON">NM_DEVICE_STATE_REASON</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS" title="NM_DEVICE_ACTIVE_CONNECTION">NM_DEVICE_ACTIVE_CONNECTION</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS" title="NM_DEVICE_AVAILABLE_CONNECTIONS">NM_DEVICE_AVAILABLE_CONNECTIONS</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-VENDOR:CAPS" title="NM_DEVICE_VENDOR">NM_DEVICE_VENDOR</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-PRODUCT:CAPS" title="NM_DEVICE_PRODUCT">NM_DEVICE_PRODUCT</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-PHYSICAL-PORT-ID:CAPS" title="NM_DEVICE_PHYSICAL_PORT_ID">NM_DEVICE_PHYSICAL_PORT_ID</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-MTU:CAPS" title="NM_DEVICE_MTU">NM_DEVICE_MTU</a>
+ <a class="link" href="NMDevice.html#NMDevice-struct" title="NMDevice">NMDevice</a>;
+ <a class="link" href="NMDevice.html#NMDeviceClass" title="NMDeviceClass">NMDeviceClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDevice.html#nm-device-new" title="nm_device_new ()">nm_device_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-iface" title="nm_device_get_iface ()">nm_device_get_iface</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-ip-iface" title="nm_device_get_ip_iface ()">nm_device_get_ip_iface</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<span class="returnvalue">NMDeviceType</span> <a class="link" href="NMDevice.html#nm-device-get-device-type" title="nm_device_get_device_type ()">nm_device_get_device_type</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-udi" title="nm_device_get_udi ()">nm_device_get_udi</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-driver" title="nm_device_get_driver ()">nm_device_get_driver</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-driver-version" title="nm_device_get_driver_version ()">nm_device_get_driver_version</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-firmware-version" title="nm_device_get_firmware_version ()">nm_device_get_firmware_version</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-type-description" title="nm_device_get_type_description ()">nm_device_get_type_description</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-hw-address" title="nm_device_get_hw_address ()">nm_device_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<span class="returnvalue">NMDeviceCapabilities</span> <a class="link" href="NMDevice.html#nm-device-get-capabilities" title="nm_device_get_capabilities ()">nm_device_get_capabilities</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDevice.html#nm-device-get-managed" title="nm_device_get_managed ()">nm_device_get_managed</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDevice.html#nm-device-get-autoconnect" title="nm_device_get_autoconnect ()">nm_device_get_autoconnect</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMDevice.html#nm-device-set-autoconnect" title="nm_device_set_autoconnect ()">nm_device_set_autoconnect</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> autoconnect</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDevice.html#nm-device-get-firmware-missing" title="nm_device_get_firmware_missing ()">nm_device_get_firmware_missing</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="returnvalue">NMIP4Config</span></a> * <a class="link" href="NMDevice.html#nm-device-get-ip4-config" title="nm_device_get_ip4_config ()">nm_device_get_ip4_config</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="returnvalue">NMDHCP4Config</span></a> * <a class="link" href="NMDevice.html#nm-device-get-dhcp4-config" title="nm_device_get_dhcp4_config ()">nm_device_get_dhcp4_config</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="returnvalue">NMIP6Config</span></a> * <a class="link" href="NMDevice.html#nm-device-get-ip6-config" title="nm_device_get_ip6_config ()">nm_device_get_ip6_config</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="returnvalue">NMDHCP6Config</span></a> * <a class="link" href="NMDevice.html#nm-device-get-dhcp6-config" title="nm_device_get_dhcp6_config ()">nm_device_get_dhcp6_config</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<span class="returnvalue">NMDeviceState</span> <a class="link" href="NMDevice.html#nm-device-get-state" title="nm_device_get_state ()">nm_device_get_state</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<span class="returnvalue">NMDeviceState</span> <a class="link" href="NMDevice.html#nm-device-get-state-reason" title="nm_device_get_state_reason ()">nm_device_get_state_reason</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><span class="type">NMDeviceStateReason</span> *reason</code></em>);
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * <a class="link" href="NMDevice.html#nm-device-get-active-connection" title="nm_device_get_active_connection ()">nm_device_get_active_connection</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMDevice.html#nm-device-get-available-connections" title="nm_device_get_available_connections ()">nm_device_get_available_connections</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-physical-port-id" title="nm_device_get_physical_port_id ()">nm_device_get_physical_port_id</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMDevice.html#nm-device-get-mtu" title="nm_device_get_mtu ()">nm_device_get_mtu</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-product" title="nm_device_get_product ()">nm_device_get_product</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-vendor" title="nm_device_get_vendor ()">nm_device_get_vendor</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-description" title="nm_device_get_description ()">nm_device_get_description</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<span class="returnvalue">char</span> ** <a class="link" href="NMDevice.html#nm-device-disambiguate-names" title="nm_device_disambiguate_names ()">nm_device_disambiguate_names</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> **devices</code></em>,
+ <em class="parameter"><code><span class="type">int</span> num_devices</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()">*NMDeviceDeactivateFn</a>) (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMDevice.html#nm-device-disconnect" title="nm_device_disconnect ()">nm_device_disconnect</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()"><span class="type">NMDeviceDeactivateFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMDevice.html#nm-device-filter-connections" title="nm_device_filter_connections ()">nm_device_filter_connections</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()">nm_device_connection_valid</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDevice.html#nm-device-connection-compatible" title="nm_device_connection_compatible ()">nm_device_connection_compatible</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="NMDevice.html#nm-device-get-setting-type" title="nm_device_get_setting_type ()">nm_device_get_setting_type</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDevice.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMDevice
+ +----<a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+ +----<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+ +----<a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+ +----<a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+ +----<a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+ +----<a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+ +----<a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
+ +----<a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+ +----<a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+ +----<a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+ +----<a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+ +----<a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+ +----<a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDevice.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDevice implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMDevice.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDevice.html#NMDevice--active-connection" title='The "active-connection" property'>active-connection</a>" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--autoconnect" title='The "autoconnect" property'>autoconnect</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMDevice.html#NMDevice--available-connections" title='The "available-connections" property'>available-connections</a>" <span class="type">NMObjectArray</span>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--capabilities" title='The "capabilities" property'>capabilities</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--device-type" title='The "device-type" property'>device-type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--dhcp4-config" title='The "dhcp4-config" property'>dhcp4-config</a>" <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--dhcp6-config" title='The "dhcp6-config" property'>dhcp6-config</a>" <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--driver" title='The "driver" property'>driver</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--driver-version" title='The "driver-version" property'>driver-version</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--firmware-missing" title='The "firmware-missing" property'>firmware-missing</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--firmware-version" title='The "firmware-version" property'>firmware-version</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--interface" title='The "interface" property'>interface</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--ip-interface" title='The "ip-interface" property'>ip-interface</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--ip4-config" title='The "ip4-config" property'>ip4-config</a>" <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--ip6-config" title='The "ip6-config" property'>ip6-config</a>" <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--managed" title='The "managed" property'>managed</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--mtu" title='The "mtu" property'>mtu</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--physical-port-id" title='The "physical-port-id" property'>physical-port-id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--product" title='The "product" property'>product</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--state" title='The "state" property'>state</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--state-reason" title='The "state-reason" property'>state-reason</a>" <span class="type">GValueArray_guint+guint_*</span> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--udi" title='The "udi" property'>udi</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--vendor" title='The "vendor" property'>vendor</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+</pre>
+</div>
<div class="refsect1">
-<a name="NMDevice.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDevice.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDevice.html#NMDevice-state-changed" title='The "state-changed" signal'>state-changed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDevice.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDevice.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDeviceError"></a><h3>enum NMDeviceError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_ERROR_INTERFACE_MISMATCH, /*&lt; nick=InterfaceMismatch &gt;*/
+} NMDeviceError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-new" title="nm_device_new ()">nm_device_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-iface" title="nm_device_get_iface ()">nm_device_get_iface</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-ip-iface" title="nm_device_get_ip_iface ()">nm_device_get_ip_iface</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMDeviceType</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-device-type" title="nm_device_get_device_type ()">nm_device_get_device_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-udi" title="nm_device_get_udi ()">nm_device_get_udi</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-driver" title="nm_device_get_driver ()">nm_device_get_driver</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-driver-version" title="nm_device_get_driver_version ()">nm_device_get_driver_version</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-firmware-version" title="nm_device_get_firmware_version ()">nm_device_get_firmware_version</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMDeviceCapabilities</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-capabilities" title="nm_device_get_capabilities ()">nm_device_get_capabilities</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-managed" title="nm_device_get_managed ()">nm_device_get_managed</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-autoconnect" title="nm_device_get_autoconnect ()">nm_device_get_autoconnect</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-set-autoconnect" title="nm_device_set_autoconnect ()">nm_device_set_autoconnect</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-firmware-missing" title="nm_device_get_firmware_missing ()">nm_device_get_firmware_missing</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="returnvalue">NMIP4Config</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-ip4-config" title="nm_device_get_ip4_config ()">nm_device_get_ip4_config</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="returnvalue">NMDHCP4Config</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-dhcp4-config" title="nm_device_get_dhcp4_config ()">nm_device_get_dhcp4_config</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="returnvalue">NMIP6Config</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-ip6-config" title="nm_device_get_ip6_config ()">nm_device_get_ip6_config</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="returnvalue">NMDHCP6Config</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-dhcp6-config" title="nm_device_get_dhcp6_config ()">nm_device_get_dhcp6_config</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMDeviceState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-state" title="nm_device_get_state ()">nm_device_get_state</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">NMDeviceState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-state-reason" title="nm_device_get_state_reason ()">nm_device_get_state_reason</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-ERROR-INTERFACE-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_INTERFACE_MISMATCH</code></span></p></td>
+<td>the interface names of the connection and the
+ device mismatched
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-ERROR:CAPS"></a><h3>NM_DEVICE_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_ERROR nm_device_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-error-quark"></a><h3>nm_device_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-DEVICE-TYPE:CAPS"></a><h3>NM_DEVICE_DEVICE_TYPE</h3>
+<pre class="programlisting">#define NM_DEVICE_DEVICE_TYPE "device-type"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-UDI:CAPS"></a><h3>NM_DEVICE_UDI</h3>
+<pre class="programlisting">#define NM_DEVICE_UDI "udi"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-INTERFACE:CAPS"></a><h3>NM_DEVICE_INTERFACE</h3>
+<pre class="programlisting">#define NM_DEVICE_INTERFACE "interface"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-IP-INTERFACE:CAPS"></a><h3>NM_DEVICE_IP_INTERFACE</h3>
+<pre class="programlisting">#define NM_DEVICE_IP_INTERFACE "ip-interface"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-DRIVER:CAPS"></a><h3>NM_DEVICE_DRIVER</h3>
+<pre class="programlisting">#define NM_DEVICE_DRIVER "driver"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-DRIVER-VERSION:CAPS"></a><h3>NM_DEVICE_DRIVER_VERSION</h3>
+<pre class="programlisting">#define NM_DEVICE_DRIVER_VERSION "driver-version"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-FIRMWARE-VERSION:CAPS"></a><h3>NM_DEVICE_FIRMWARE_VERSION</h3>
+<pre class="programlisting">#define NM_DEVICE_FIRMWARE_VERSION "firmware-version"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_CAPABILITIES</h3>
+<pre class="programlisting">#define NM_DEVICE_CAPABILITIES "capabilities"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-MANAGED:CAPS"></a><h3>NM_DEVICE_MANAGED</h3>
+<pre class="programlisting">#define NM_DEVICE_MANAGED "managed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-AUTOCONNECT:CAPS"></a><h3>NM_DEVICE_AUTOCONNECT</h3>
+<pre class="programlisting">#define NM_DEVICE_AUTOCONNECT "autoconnect"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-FIRMWARE-MISSING:CAPS"></a><h3>NM_DEVICE_FIRMWARE_MISSING</h3>
+<pre class="programlisting">#define NM_DEVICE_FIRMWARE_MISSING "firmware-missing"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-IP4-CONFIG:CAPS"></a><h3>NM_DEVICE_IP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DEVICE_IP4_CONFIG "ip4-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-DHCP4-CONFIG:CAPS"></a><h3>NM_DEVICE_DHCP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DEVICE_DHCP4_CONFIG "dhcp4-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-IP6-CONFIG:CAPS"></a><h3>NM_DEVICE_IP6_CONFIG</h3>
+<pre class="programlisting">#define NM_DEVICE_IP6_CONFIG "ip6-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-DHCP6-CONFIG:CAPS"></a><h3>NM_DEVICE_DHCP6_CONFIG</h3>
+<pre class="programlisting">#define NM_DEVICE_DHCP6_CONFIG "dhcp6-config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-STATE:CAPS"></a><h3>NM_DEVICE_STATE</h3>
+<pre class="programlisting">#define NM_DEVICE_STATE "state"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-STATE-REASON:CAPS"></a><h3>NM_DEVICE_STATE_REASON</h3>
+<pre class="programlisting">#define NM_DEVICE_STATE_REASON "state-reason"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-ACTIVE-CONNECTION:CAPS"></a><h3>NM_DEVICE_ACTIVE_CONNECTION</h3>
+<pre class="programlisting">#define NM_DEVICE_ACTIVE_CONNECTION "active-connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS"></a><h3>NM_DEVICE_AVAILABLE_CONNECTIONS</h3>
+<pre class="programlisting">#define NM_DEVICE_AVAILABLE_CONNECTIONS "available-connections"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-VENDOR:CAPS"></a><h3>NM_DEVICE_VENDOR</h3>
+<pre class="programlisting">#define NM_DEVICE_VENDOR "vendor"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-PRODUCT:CAPS"></a><h3>NM_DEVICE_PRODUCT</h3>
+<pre class="programlisting">#define NM_DEVICE_PRODUCT "product"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-PHYSICAL-PORT-ID:CAPS"></a><h3>NM_DEVICE_PHYSICAL_PORT_ID</h3>
+<pre class="programlisting">#define NM_DEVICE_PHYSICAL_PORT_ID "physical-port-id"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-MTU:CAPS"></a><h3>NM_DEVICE_MTU</h3>
+<pre class="programlisting">#define NM_DEVICE_MTU "mtu"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDevice-struct"></a><h3>NMDevice</h3>
+<pre class="programlisting">typedef struct _NMDevice NMDevice;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceClass"></a><h3>NMDeviceClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Signals */
+ void (*state_changed) (NMDevice *device,
+ NMDeviceState new_state,
+ NMDeviceState old_state,
+ NMDeviceStateReason reason);
+
+ gboolean (*connection_compatible) (NMDevice *device,
+ NMConnection *connection,
+ GError **error);
+
+ const char * (*get_type_description) (NMDevice *device);
+ const char * (*get_hw_address) (NMDevice *device);
+
+ GType (*get_setting_type) (NMDevice *device);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+} NMDeviceClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-new"></a><h3>nm_device_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-active-connection" title="nm_device_get_active_connection ()">nm_device_get_active_connection</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-available-connections" title="nm_device_get_available_connections ()">nm_device_get_available_connections</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-product" title="nm_device_get_product ()">nm_device_get_product</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-iface"></a><h3>nm_device_get_iface ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_iface (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the interface name of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-get-vendor" title="nm_device_get_vendor ()">nm_device_get_vendor</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()">*NMDeviceDeactivateFn</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the interface of the device. This is the internal string used by the
+device, and must not be modified.</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-ip-iface"></a><h3>nm_device_get_ip_iface ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_ip_iface (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the IP interface name of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> over which IP traffic flows
+when the device is in the ACTIVATED state.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-disconnect" title="nm_device_disconnect ()">nm_device_disconnect</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-filter-connections" title="nm_device_filter_connections ()">nm_device_filter_connections</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP traffic interface of the device. This is the internal string
+used by the device, and must not be modified.</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-device-type"></a><h3>nm_device_get_device_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMDeviceType</span> nm_device_get_device_type (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Returns the numeric type of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>, ie Ethernet, Wi-Fi, etc.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()">nm_device_connection_valid</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDevice.html#nm-device-connection-compatible" title="nm_device_connection_compatible ()">nm_device_connection_compatible</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the device type</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDevice.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-udi"></a><h3>nm_device_get_udi ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_udi (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the Unique Device Identifier of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--active-connection" title="The “active-connection†property">active-connection</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--autoconnect" title="The “autoconnect†property">autoconnect</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMObjectArray</span> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--available-connections" title="The “available-connections†property">available-connections</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--capabilities" title="The “capabilities†property">capabilities</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--device-type" title="The “device-type†property">device-type</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--dhcp4-config" title="The “dhcp4-config†property">dhcp4-config</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--dhcp6-config" title="The “dhcp6-config†property">dhcp6-config</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--driver" title="The “driver†property">driver</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--driver-version" title="The “driver-version†property">driver-version</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--firmware-missing" title="The “firmware-missing†property">firmware-missing</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--firmware-version" title="The “firmware-version†property">firmware-version</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--interface" title="The “interface†property">interface</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--ip-interface" title="The “ip-interface†property">ip-interface</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--ip4-config" title="The “ip4-config†property">ip4-config</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--ip6-config" title="The “ip6-config†property">ip6-config</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--managed" title="The “managed†property">managed</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--product" title="The “product†property">product</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--state" title="The “state†property">state</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GValueArray_guint+guint_*</span></td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--state-reason" title="The “state-reason†property">state-reason</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--udi" title="The “udi†property">udi</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
</tr>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDevice.html#NMDevice--vendor" title="The “vendor†property">vendor</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the Unique Device Identifier of the device. This identifier may be
+used to gather more information about the device from various operating
+system services like udev or sysfs.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDevice.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
-</colgroup>
-<tbody><tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMDevice.html#NMDevice-state-changed" title="The “state-changed†signal">state-changed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMDevice.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-driver"></a><h3>nm_device_get_driver ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_driver (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the driver of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-DEVICE-TYPE:CAPS" title="NM_DEVICE_DEVICE_TYPE">NM_DEVICE_DEVICE_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-UDI:CAPS" title="NM_DEVICE_UDI">NM_DEVICE_UDI</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-INTERFACE:CAPS" title="NM_DEVICE_INTERFACE">NM_DEVICE_INTERFACE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-IP-INTERFACE:CAPS" title="NM_DEVICE_IP_INTERFACE">NM_DEVICE_IP_INTERFACE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-DRIVER:CAPS" title="NM_DEVICE_DRIVER">NM_DEVICE_DRIVER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-DRIVER-VERSION:CAPS" title="NM_DEVICE_DRIVER_VERSION">NM_DEVICE_DRIVER_VERSION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-FIRMWARE-VERSION:CAPS" title="NM_DEVICE_FIRMWARE_VERSION">NM_DEVICE_FIRMWARE_VERSION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-CAPABILITIES:CAPS" title="NM_DEVICE_CAPABILITIES">NM_DEVICE_CAPABILITIES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-MANAGED:CAPS" title="NM_DEVICE_MANAGED">NM_DEVICE_MANAGED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-AUTOCONNECT:CAPS" title="NM_DEVICE_AUTOCONNECT">NM_DEVICE_AUTOCONNECT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-FIRMWARE-MISSING:CAPS" title="NM_DEVICE_FIRMWARE_MISSING">NM_DEVICE_FIRMWARE_MISSING</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-IP4-CONFIG:CAPS" title="NM_DEVICE_IP4_CONFIG">NM_DEVICE_IP4_CONFIG</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-DHCP4-CONFIG:CAPS" title="NM_DEVICE_DHCP4_CONFIG">NM_DEVICE_DHCP4_CONFIG</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS" title="NM_DEVICE_IP6_CONFIG">NM_DEVICE_IP6_CONFIG</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS" title="NM_DEVICE_DHCP6_CONFIG">NM_DEVICE_DHCP6_CONFIG</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-STATE:CAPS" title="NM_DEVICE_STATE">NM_DEVICE_STATE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-STATE-REASON:CAPS" title="NM_DEVICE_STATE_REASON">NM_DEVICE_STATE_REASON</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS" title="NM_DEVICE_ACTIVE_CONNECTION">NM_DEVICE_ACTIVE_CONNECTION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS" title="NM_DEVICE_AVAILABLE_CONNECTIONS">NM_DEVICE_AVAILABLE_CONNECTIONS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-VENDOR:CAPS" title="NM_DEVICE_VENDOR">NM_DEVICE_VENDOR</a></td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDevice.html#NM-DEVICE-PRODUCT:CAPS" title="NM_DEVICE_PRODUCT">NM_DEVICE_PRODUCT</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the driver of the device. This is the internal string used by the
+device, and must not be modified.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDevice.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMDevice
- <span class="lineart">├──</span> <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
- <span class="lineart">├──</span> <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMDevice.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-driver-version"></a><h3>nm_device_get_driver_version ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_driver_version (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
<p>
+Gets the driver version of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
</p>
-</div>
-<div class="refsect1">
-<a name="NMDevice.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-device-new"></a><h3>nm_device_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the version of the device driver. This is the internal string used by the
+device, and must not be modified.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.2.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-iface"></a><h3>nm_device_get_iface ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_iface (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the interface name of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-firmware-version"></a><h3>nm_device_get_firmware_version ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_firmware_version (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the firmware version of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the firmware version of the device. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.3.6"></a><h4>Returns</h4>
-<p> the interface of the device. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-ip-iface"></a><h3>nm_device_get_ip_iface ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_ip_iface (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the IP interface name of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> over which IP traffic flows
-when the device is in the ACTIVATED state.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-type-description"></a><h3>nm_device_get_type_description ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_type_description (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets a (non-localized) description of the type of device that
+<em class="parameter"><code>device</code></em> is.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the type description of the device. This is the internal
+string used by the device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.4.6"></a><h4>Returns</h4>
-<p> the IP traffic interface of the device. This is the internal string
-used by the device, and must not be modified.</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-device-type"></a><h3>nm_device_get_device_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMDeviceType</span>
-nm_device_get_device_type (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Returns the numeric type of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>, ie ethernet, wifi, etc.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-hw-address"></a><h3>nm_device_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_hw_address (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the current a hardware address (MAC) for the <em class="parameter"><code>device</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current MAC of the device, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+This is the internal string used by the device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.5.6"></a><h4>Returns</h4>
-<p> the device type</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-udi"></a><h3>nm_device_get_udi ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_udi (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the Unique Device Identifier of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-capabilities"></a><h3>nm_device_get_capabilities ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMDeviceCapabilities</span> nm_device_get_capabilities (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the device' capabilities.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the capabilities</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.6.6"></a><h4>Returns</h4>
-<p> the Unique Device Identifier of the device. This identifier may be
-used to gather more information about the device from various operating
-system services like udev or sysfs.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-driver"></a><h3>nm_device_get_driver ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_driver (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the driver of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-managed"></a><h3>nm_device_get_managed ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_get_managed (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Whether the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> is managed by NetworkManager.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device is managed by NetworkManager</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.7.6"></a><h4>Returns</h4>
-<p> the driver of the device. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-driver-version"></a><h3>nm_device_get_driver_version ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_driver_version (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the driver version of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-autoconnect"></a><h3>nm_device_get_autoconnect ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_get_autoconnect (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Whether the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> can be autoconnected.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device is allowed to be autoconnected</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.8.6"></a><h4>Returns</h4>
-<p> the version of the device driver. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-firmware-version"></a><h3>nm_device_get_firmware_version ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_firmware_version (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the firmware version of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-set-autoconnect"></a><h3>nm_device_set_autoconnect ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_device_set_autoconnect (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> autoconnect</code></em>);</pre>
+<p>
+Enables or disables automatic activation of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>autoconnect</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable autoconnecting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.9.6"></a><h4>Returns</h4>
-<p> the firmware version of the device. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-capabilities"></a><h3>nm_device_get_capabilities ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMDeviceCapabilities</span>
-nm_device_get_capabilities (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the device' capabilities.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-firmware-missing"></a><h3>nm_device_get_firmware_missing ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_get_firmware_missing (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Indicates that firmware required for the device's operation is likely
+to be missing.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if firmware required for the device's operation is likely
+to be missing.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.10.6"></a><h4>Returns</h4>
-<p> the capabilities</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-managed"></a><h3>nm_device_get_managed ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_get_managed (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Whether the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> is managed by NetworkManager.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-ip4-config"></a><h3>nm_device_get_ip4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="returnvalue">NMIP4Config</span></a> * nm_device_get_ip4_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+Note that as of NetworkManager 0.9.10, you can alternatively use
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-ip4-config" title="nm_active_connection_get_ip4_config ()"><code class="function">nm_active_connection_get_ip4_config()</code></a>, which also works with VPN
+connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.11.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device is managed by NetworkManager</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-autoconnect"></a><h3>nm_device_get_autoconnect ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_get_autoconnect (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Whether the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> can be autoconnected.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-dhcp4-config"></a><h3>nm_device_get_dhcp4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="returnvalue">NMDHCP4Config</span></a> * nm_device_get_dhcp4_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+Note that as of NetworkManager 0.9.10, you can alternatively use
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-dhcp4-config" title="nm_active_connection_get_dhcp4_config ()"><code class="function">nm_active_connection_get_dhcp4_config()</code></a>, which also works with VPN
+connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated or not
+using DHCP. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.12.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device is allowed to be autoconnected</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-set-autoconnect"></a><h3>nm_device_set_autoconnect ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_device_set_autoconnect (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> autoconnect</code></em>);</pre>
-<p>Enables or disables automatic activation of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-ip6-config"></a><h3>nm_device_get_ip6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="returnvalue">NMIP6Config</span></a> * nm_device_get_ip6_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+Note that as of NetworkManager 0.9.10, you can alternatively use
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-ip6-config" title="nm_active_connection_get_ip6_config ()"><code class="function">nm_active_connection_get_ip6_config()</code></a>, which also works with VPN
+connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>autoconnect</p></td>
-<td class="parameter_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable autoconnecting</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-firmware-missing"></a><h3>nm_device_get_firmware_missing ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_get_firmware_missing (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Indicates that firmware required for the device's operation is likely
-to be missing.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-dhcp6-config"></a><h3>nm_device_get_dhcp6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="returnvalue">NMDHCP6Config</span></a> * nm_device_get_dhcp6_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+Note that as of NetworkManager 0.9.10, you can alternatively use
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-dhcp6-config" title="nm_active_connection_get_dhcp6_config ()"><code class="function">nm_active_connection_get_dhcp6_config()</code></a>, which also works with VPN
+connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated or not
+using DHCP. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.14.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if firmware required for the device's operation is likely
-to be missing.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-ip4-config"></a><h3>nm_device_get_ip4_config ()</h3>
-<pre class="programlisting"><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="returnvalue">NMIP4Config</span></a> *
-nm_device_get_ip4_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the current <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-state"></a><h3>nm_device_get_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMDeviceState</span> nm_device_get_state (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> state.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current device state</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.15.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-dhcp4-config"></a><h3>nm_device_get_dhcp4_config ()</h3>
-<pre class="programlisting"><a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="returnvalue">NMDHCP4Config</span></a> *
-nm_device_get_dhcp4_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the current <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-state-reason"></a><h3>nm_device_get_state_reason ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMDeviceState</span> nm_device_get_state_reason (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><span class="type">NMDeviceStateReason</span> *reason</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> state (return value) and the reason for entering
+the state (<em class="parameter"><code>reason</code></em> argument).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
+<td>location to store reason (<span class="type">NMDeviceStateReason</span>), or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current device state</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.16.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated or not
-using DHCP. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-ip6-config"></a><h3>nm_device_get_ip6_config ()</h3>
-<pre class="programlisting"><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="returnvalue">NMIP6Config</span></a> *
-nm_device_get_ip6_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the current <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-active-connection"></a><h3>nm_device_get_active_connection ()</h3>
+<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * nm_device_get_active_connection (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object which owns this device during activation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is
+not part of an active connection. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.17.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-dhcp6-config"></a><h3>nm_device_get_dhcp6_config ()</h3>
-<pre class="programlisting"><a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="returnvalue">NMDHCP6Config</span></a> *
-nm_device_get_dhcp6_config (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the current <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-available-connections"></a><h3>nm_device_get_available_connections ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_device_get_available_connections (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the <a href="NMRemoteConnection.html"><span class="type">NMRemoteConnections</span></a> currently known to the daemon that could
+be activated on <em class="parameter"><code>device</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>
+containing <a href="NMRemoteConnection.html"><span class="type">NMRemoteConnections</span></a>. This is the internal copy used by
+the connection, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.RemoteConnection]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.18.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated or not
-using DHCP. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-state"></a><h3>nm_device_get_state ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMDeviceState</span>
-nm_device_get_state (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the current <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> state.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-physical-port-id"></a><h3>nm_device_get_physical_port_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_physical_port_id (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the physical port ID of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>. If non-<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, this is
+an opaque string that can be used to recognize when
+seemingly-unrelated <a href="NMDevice.html"><span class="type">NMDevices</span></a> are actually just different virtual
+ports on a single physical port. (Eg, NPAR / SR-IOV.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the physical port ID of the device, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the port
+ID is unknown. This is the internal string used by the device and
+must not be modified.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.19.6"></a><h4>Returns</h4>
-<p> the current device state</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-state-reason"></a><h3>nm_device_get_state_reason ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMDeviceState</span>
-nm_device_get_state_reason (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><span class="type">NMDeviceStateReason</span> *reason</code></em>);</pre>
-<p>Gets the current <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> state (return value) and the reason for entering
-the state (<em class="parameter"><code>reason</code></em>
- argument).</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-mtu"></a><h3>nm_device_get_mtu ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_device_get_mtu (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the MTU of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>reason</p></td>
-<td class="parameter_description"><p> location to store reason (<span class="type">NMDeviceStateReason</span>), or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the MTU of the device.</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.20.6"></a><h4>Returns</h4>
-<p> the current device state</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-active-connection"></a><h3>nm_device_get_active_connection ()</h3>
-<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> *
-nm_device_get_active_connection (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object which owns this device during activation.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-product"></a><h3>nm_device_get_product ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_product (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the product string of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the product name of the device. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.21.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is
-not part of an active connection. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-available-connections"></a><h3>nm_device_get_available_connections ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_device_get_available_connections (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the <a href="NMRemoteConnection.html"><span class="type">NMRemoteConnections</span></a> currently known to the daemon that could
-be activated on <em class="parameter"><code>device</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-vendor"></a><h3>nm_device_get_vendor ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_vendor (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the vendor string of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the vendor name of the device. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.22.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>
-containing <a href="NMRemoteConnection.html"><span class="type">NMRemoteConnections</span></a>. This is the internal copy used by
-the connection, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.RemoteConnection]</span></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-product"></a><h3>nm_device_get_product ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_product (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the product string of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-get-description"></a><h3>nm_device_get_description ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_description (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets a description of <em class="parameter"><code>device</code></em>, incorporating the results of
+<code class="function">nm_device_get_short_vendor()</code> and <code class="function">nm_device_get_short_product()</code>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a description of <em class="parameter"><code>device</code></em>. If either the vendor or the
+product name is unknown, this returns the interface name.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.23.6"></a><h4>Returns</h4>
-<p> the product name of the device. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-get-vendor"></a><h3>nm_device_get_vendor ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_get_vendor (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
-<p>Gets the vendor string of the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-disambiguate-names"></a><h3>nm_device_disambiguate_names ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> ** nm_device_disambiguate_names (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> **devices</code></em>,
+ <em class="parameter"><code><span class="type">int</span> num_devices</code></em>);</pre>
+<p>
+Generates a list of short-ish unique presentation names for the
+devices in <em class="parameter"><code>devices</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>devices</code></em> :</span></p></td>
+<td>an array of <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=num_devices]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num_devices</code></em> :</span></p></td>
+<td>length of <em class="parameter"><code>devices</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the device names. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.24.6"></a><h4>Returns</h4>
-<p> the vendor name of the device. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceDeactivateFn"></a><h3>NMDeviceDeactivateFn ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMDeviceDeactivateFn<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<a name="NMDeviceDeactivateFn"></a><h3>NMDeviceDeactivateFn ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMDeviceDeactivateFn) (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-disconnect"></a><h3>nm_device_disconnect ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_device_disconnect (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()"><span class="type">NMDeviceDeactivateFn</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Disconnects the device if currently connected, and prevents the device from
+<a name="nm-device-disconnect"></a><h3>nm_device_disconnect ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_device_disconnect (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()"><span class="type">NMDeviceDeactivateFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Disconnects the device if currently connected, and prevents the device from
automatically connecting to networks until the next manual network connection
-request.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+request.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> callback to be called when disconnect
-operation completes. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when disconnect
+operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-filter-connections"></a><h3>nm_device_filter_connections ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_device_filter_connections (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);</pre>
-<p>Filters a given list of connections for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and return
+<a name="nm-device-filter-connections"></a><h3>nm_device_filter_connections ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_device_filter_connections (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);</pre>
+<p>
+Filters a given list of connections for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and return
connections which may be activated with the device. For example if <em class="parameter"><code>device</code></em>
-
-is a WiFi device that supports only WEP encryption, the returned list will
-contain any WiFi connections in <em class="parameter"><code>connections</code></em>
- that allow connection to
+is a Wi-Fi device that supports only WEP encryption, the returned list will
+contain any Wi-Fi connections in <em class="parameter"><code>connections</code></em> that allow connection to
unencrypted or WEP-enabled SSIDs. The returned list will not contain
-Ethernet, Bluetooth, WiFi WPA connections, or any other connection that is
+Ethernet, Bluetooth, Wi-Fi WPA connections, or any other connection that is
incompatible with the device. To get the full list of connections see
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()"><code class="function">nm_remote_settings_list_connections()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.27.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()"><code class="function">nm_remote_settings_list_connections()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> to filter connections for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> to filter connections for</td>
</tr>
<tr>
-<td class="parameter_name"><p>connections</p></td>
-<td class="parameter_description"><p> a list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span></td>
+<td><p><span class="term"><em class="parameter"><code>connections</code></em> :</span></p></td>
+<td>a list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+</td>
</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.27.6"></a><h4>Returns</h4>
-<p> a
-list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>device</code></em>
-.
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a
+list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>device</code></em>.
The elements of the list are owned by their creator and should not be freed
by the caller, but the returned list itself is owned by the caller and should
-be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. </p>
-<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span></p>
-</div>
+be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-connection-valid"></a><h3>nm_device_connection_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_connection_valid (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Validates a given connection for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and returns
+<a name="nm-device-connection-valid"></a><h3>nm_device_connection_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_connection_valid (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Validates a given connection for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and returns
whether the connection may be activated with the device. For example if
-<em class="parameter"><code>device</code></em>
- is a WiFi device that supports only WEP encryption, the connection
-will only be valid if it is a WiFi connection which describes a WEP or open
+<em class="parameter"><code>device</code></em> is a Wi-Fi device that supports only WEP encryption, the connection
+will only be valid if it is a Wi-Fi connection which describes a WEP or open
network, and will not be valid if it describes a WPA network, or if it is
an Ethernet, Bluetooth, WWAN, etc connection that is incompatible with the
-device.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.28.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+device.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> to validate <em class="parameter"><code>connection</code></em>
-against</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> to validate <em class="parameter"><code>connection</code></em> against</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>device</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>device</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this device, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+if is incompatible with the device's capabilities and characteristics.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.28.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this device, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
-if is incompatible with the device's capabilities and characteristics.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-connection-compatible"></a><h3>nm_device_connection_compatible ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_connection_compatible (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Validates a given connection for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and returns
+<a name="nm-device-connection-compatible"></a><h3>nm_device_connection_compatible ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_connection_compatible (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Validates a given connection for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and returns
whether the connection may be activated with the device. For example if
-<em class="parameter"><code>device</code></em>
- is a WiFi device that supports only WEP encryption, the connection
-will only be valid if it is a WiFi connection which describes a WEP or open
+<em class="parameter"><code>device</code></em> is a Wi-Fi device that supports only WEP encryption, the connection
+will only be valid if it is a Wi-Fi connection which describes a WEP or open
network, and will not be valid if it describes a WPA network, or if it is
an Ethernet, Bluetooth, WWAN, etc connection that is incompatible with the
-device.</p>
-<p>This function does the same as <a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()"><code class="function">nm_device_connection_valid()</code></a>, i.e. checking
+device.
+</p>
+<p>
+This function does the same as <a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()"><code class="function">nm_device_connection_valid()</code></a>, i.e. checking
compatibility of the given device and connection. But, in addition, it sets
-GError when FALSE is returned.</p>
-<div class="refsect3">
-<a name="id-1.3.4.9.29.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+GError when FALSE is returned.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> to validate <em class="parameter"><code>connection</code></em>
-against</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> to validate <em class="parameter"><code>connection</code></em> against</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>device</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>device</code></em>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>return location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this device, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+if is incompatible with the device's capabilities and characteristics.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.4.9.29.7"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this device, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
-if is incompatible with the device's capabilities and characteristics.</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDevice.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-DEVICE-DEVICE-TYPE:CAPS"></a><h3>NM_DEVICE_DEVICE_TYPE</h3>
-<pre class="programlisting">#define NM_DEVICE_DEVICE_TYPE "device-type"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-UDI:CAPS"></a><h3>NM_DEVICE_UDI</h3>
-<pre class="programlisting">#define NM_DEVICE_UDI "udi"
-</pre>
+<a name="nm-device-get-setting-type"></a><h3>nm_device_get_setting_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> nm_device_get_setting_type (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
<p>
+Gets the (primary) <a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html"><span class="type">NMSetting</span></a> subtype associated with connections
+that can be used on <em class="parameter"><code>device</code></em>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<em class="parameter"><code>device</code></em>'s associated <a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html"><span class="type">NMSetting</span></a> type</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-INTERFACE:CAPS"></a><h3>NM_DEVICE_INTERFACE</h3>
-<pre class="programlisting">#define NM_DEVICE_INTERFACE "interface"
-</pre>
-<p>
-</p>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMDevice.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-DEVICE-IP-INTERFACE:CAPS"></a><h3>NM_DEVICE_IP_INTERFACE</h3>
-<pre class="programlisting">#define NM_DEVICE_IP_INTERFACE "ip-interface"
-</pre>
+<a name="NMDevice--active-connection"></a><h3>The <code class="literal">"active-connection"</code> property</h3>
+<pre class="programlisting"> "active-connection" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object that "owns" this device during activation.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-DRIVER:CAPS"></a><h3>NM_DEVICE_DRIVER</h3>
-<pre class="programlisting">#define NM_DEVICE_DRIVER "driver"
-</pre>
+<a name="NMDevice--autoconnect"></a><h3>The <code class="literal">"autoconnect"</code> property</h3>
+<pre class="programlisting"> "autoconnect" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
<p>
+Whether the device can auto-activate a connection.
</p>
+<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-DRIVER-VERSION:CAPS"></a><h3>NM_DEVICE_DRIVER_VERSION</h3>
-<pre class="programlisting">#define NM_DEVICE_DRIVER_VERSION "driver-version"
-</pre>
+<a name="NMDevice--available-connections"></a><h3>The <code class="literal">"available-connections"</code> property</h3>
+<pre class="programlisting"> "available-connections" <span class="type">NMObjectArray</span>* : Read</pre>
<p>
+The available connections (<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>) of the device
</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-FIRMWARE-VERSION:CAPS"></a><h3>NM_DEVICE_FIRMWARE_VERSION</h3>
-<pre class="programlisting">#define NM_DEVICE_FIRMWARE_VERSION "firmware-version"
-</pre>
+<a name="NMDevice--capabilities"></a><h3>The <code class="literal">"capabilities"</code> property</h3>
+<pre class="programlisting"> "capabilities" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The capabilities of the device.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_CAPABILITIES</h3>
-<pre class="programlisting">#define NM_DEVICE_CAPABILITIES "capabilities"
-</pre>
+<a name="NMDevice--device-type"></a><h3>The <code class="literal">"device-type"</code> property</h3>
+<pre class="programlisting"> "device-type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The numeric type of the device.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-MANAGED:CAPS"></a><h3>NM_DEVICE_MANAGED</h3>
-<pre class="programlisting">#define NM_DEVICE_MANAGED "managed"
-</pre>
+<a name="NMDevice--dhcp4-config"></a><h3>The <code class="literal">"dhcp4-config"</code> property</h3>
+<pre class="programlisting"> "dhcp4-config" <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> of the device.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-AUTOCONNECT:CAPS"></a><h3>NM_DEVICE_AUTOCONNECT</h3>
-<pre class="programlisting">#define NM_DEVICE_AUTOCONNECT "autoconnect"
-</pre>
+<a name="NMDevice--dhcp6-config"></a><h3>The <code class="literal">"dhcp6-config"</code> property</h3>
+<pre class="programlisting"> "dhcp6-config" <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> of the device.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-FIRMWARE-MISSING:CAPS"></a><h3>NM_DEVICE_FIRMWARE_MISSING</h3>
-<pre class="programlisting">#define NM_DEVICE_FIRMWARE_MISSING "firmware-missing"
-</pre>
+<a name="NMDevice--driver"></a><h3>The <code class="literal">"driver"</code> property</h3>
+<pre class="programlisting"> "driver" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The driver of the device.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-IP4-CONFIG:CAPS"></a><h3>NM_DEVICE_IP4_CONFIG</h3>
-<pre class="programlisting">#define NM_DEVICE_IP4_CONFIG "ip4-config"
-</pre>
+<a name="NMDevice--driver-version"></a><h3>The <code class="literal">"driver-version"</code> property</h3>
+<pre class="programlisting"> "driver-version" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The version of the device driver.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-DHCP4-CONFIG:CAPS"></a><h3>NM_DEVICE_DHCP4_CONFIG</h3>
-<pre class="programlisting">#define NM_DEVICE_DHCP4_CONFIG "dhcp4-config"
-</pre>
+<a name="NMDevice--firmware-missing"></a><h3>The <code class="literal">"firmware-missing"</code> property</h3>
+<pre class="programlisting"> "firmware-missing" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>
+When <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> indicates the device is likely missing firmware required
+for its operation.
</p>
+<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-IP6-CONFIG:CAPS"></a><h3>NM_DEVICE_IP6_CONFIG</h3>
-<pre class="programlisting">#define NM_DEVICE_IP6_CONFIG "ip6-config"
-</pre>
+<a name="NMDevice--firmware-version"></a><h3>The <code class="literal">"firmware-version"</code> property</h3>
+<pre class="programlisting"> "firmware-version" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The firmware version of the device.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-DHCP6-CONFIG:CAPS"></a><h3>NM_DEVICE_DHCP6_CONFIG</h3>
-<pre class="programlisting">#define NM_DEVICE_DHCP6_CONFIG "dhcp6-config"
-</pre>
+<a name="NMDevice--interface"></a><h3>The <code class="literal">"interface"</code> property</h3>
+<pre class="programlisting"> "interface" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The interface of the device.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-STATE:CAPS"></a><h3>NM_DEVICE_STATE</h3>
-<pre class="programlisting">#define NM_DEVICE_STATE "state"
-</pre>
+<a name="NMDevice--ip-interface"></a><h3>The <code class="literal">"ip-interface"</code> property</h3>
+<pre class="programlisting"> "ip-interface" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The IP interface of the device which should be used for all IP-related
+operations like addressing and routing.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-STATE-REASON:CAPS"></a><h3>NM_DEVICE_STATE_REASON</h3>
-<pre class="programlisting">#define NM_DEVICE_STATE_REASON "state-reason"
-</pre>
+<a name="NMDevice--ip4-config"></a><h3>The <code class="literal">"ip4-config"</code> property</h3>
+<pre class="programlisting"> "ip4-config" <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> of the device.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-ACTIVE-CONNECTION:CAPS"></a><h3>NM_DEVICE_ACTIVE_CONNECTION</h3>
-<pre class="programlisting">#define NM_DEVICE_ACTIVE_CONNECTION "active-connection"
-</pre>
+<a name="NMDevice--ip6-config"></a><h3>The <code class="literal">"ip6-config"</code> property</h3>
+<pre class="programlisting"> "ip6-config" <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>* : Read</pre>
<p>
+The <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> of the device.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS"></a><h3>NM_DEVICE_AVAILABLE_CONNECTIONS</h3>
-<pre class="programlisting">#define NM_DEVICE_AVAILABLE_CONNECTIONS "available-connections"
-</pre>
+<a name="NMDevice--managed"></a><h3>The <code class="literal">"managed"</code> property</h3>
+<pre class="programlisting"> "managed" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>
+Whether the device is managed by NetworkManager.
</p>
+<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-VENDOR:CAPS"></a><h3>NM_DEVICE_VENDOR</h3>
-<pre class="programlisting">#define NM_DEVICE_VENDOR "vendor"
-</pre>
+<a name="NMDevice--mtu"></a><h3>The <code class="literal">"mtu"</code> property</h3>
+<pre class="programlisting"> "mtu" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The MTU of the device.
</p>
+<p>Default value: 1500</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-PRODUCT:CAPS"></a><h3>NM_DEVICE_PRODUCT</h3>
-<pre class="programlisting">#define NM_DEVICE_PRODUCT "product"
-</pre>
+<a name="NMDevice--physical-port-id"></a><h3>The <code class="literal">"physical-port-id"</code> property</h3>
+<pre class="programlisting"> "physical-port-id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The physical port ID of the device. (See
+<a class="link" href="NMDevice.html#nm-device-get-physical-port-id" title="nm_device_get_physical_port_id ()"><code class="function">nm_device_get_physical_port_id()</code></a>.)
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDevice.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMDevice--active-connection"></a><h3>The <code class="literal">“active-connectionâ€</code> property</h3>
-<pre class="programlisting"> “active-connection†<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *</pre>
-<p>Active Connection.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--autoconnect"></a><h3>The <code class="literal">“autoconnectâ€</code> property</h3>
-<pre class="programlisting"> “autoconnect†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Autoconnect.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--available-connections"></a><h3>The <code class="literal">“available-connectionsâ€</code> property</h3>
-<pre class="programlisting"> “available-connections†<span class="type">NMObjectArray</span> *</pre>
-<p>Available Connections.</p>
-<p>Flags: Read</p>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--capabilities"></a><h3>The <code class="literal">“capabilitiesâ€</code> property</h3>
-<pre class="programlisting"> “capabilities†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Capabilities.</p>
-<p>Flags: Read</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--device-type"></a><h3>The <code class="literal">“device-typeâ€</code> property</h3>
-<pre class="programlisting"> “device-type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Numeric device type (ie ethernet, wifi, etc).</p>
-<p>Flags: Read</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--dhcp4-config"></a><h3>The <code class="literal">“dhcp4-configâ€</code> property</h3>
-<pre class="programlisting"> “dhcp4-config†<a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a> *</pre>
-<p>DHCP4 Config.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--dhcp6-config"></a><h3>The <code class="literal">“dhcp6-configâ€</code> property</h3>
-<pre class="programlisting"> “dhcp6-config†<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="type">NMDHCP6Config</span></a> *</pre>
-<p>DHCP6 Config.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--driver"></a><h3>The <code class="literal">“driverâ€</code> property</h3>
-<pre class="programlisting"> “driver†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Driver.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--driver-version"></a><h3>The <code class="literal">“driver-versionâ€</code> property</h3>
-<pre class="programlisting"> “driver-version†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Driver Version.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--firmware-missing"></a><h3>The <code class="literal">“firmware-missingâ€</code> property</h3>
-<pre class="programlisting"> “firmware-missing†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Firmware missing.</p>
-<p>Flags: Read</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--firmware-version"></a><h3>The <code class="literal">“firmware-versionâ€</code> property</h3>
-<pre class="programlisting"> “firmware-version†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Firmware Version.</p>
-<p>Flags: Read</p>
<p>Default value: NULL</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDevice--interface"></a><h3>The <code class="literal">“interfaceâ€</code> property</h3>
-<pre class="programlisting"> “interface†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Interface name.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--ip-interface"></a><h3>The <code class="literal">“ip-interfaceâ€</code> property</h3>
-<pre class="programlisting"> “ip-interface†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>IP Interface name.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--ip4-config"></a><h3>The <code class="literal">“ip4-configâ€</code> property</h3>
-<pre class="programlisting"> “ip4-config†<a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *</pre>
-<p>IP4 Config.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--ip6-config"></a><h3>The <code class="literal">“ip6-configâ€</code> property</h3>
-<pre class="programlisting"> “ip6-config†<a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *</pre>
-<p>IP6 Config.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--managed"></a><h3>The <code class="literal">“managedâ€</code> property</h3>
-<pre class="programlisting"> “managed†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Managed.</p>
-<p>Flags: Read</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDevice--product"></a><h3>The <code class="literal">“productâ€</code> property</h3>
-<pre class="programlisting"> “product†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Product string.</p>
-<p>Flags: Read</p>
+<a name="NMDevice--product"></a><h3>The <code class="literal">"product"</code> property</h3>
+<pre class="programlisting"> "product" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The product string of the device.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDevice--state"></a><h3>The <code class="literal">“stateâ€</code> property</h3>
-<pre class="programlisting"> “state†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>State.</p>
-<p>Flags: Read</p>
+<a name="NMDevice--state"></a><h3>The <code class="literal">"state"</code> property</h3>
+<pre class="programlisting"> "state" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The state of the device.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDevice--state-reason"></a><h3>The <code class="literal">“state-reasonâ€</code> property</h3>
-<pre class="programlisting"> “state-reason†<span class="type">GValueArray_guint+guint_*</span></pre>
-<p>StateReason.</p>
-<p>Flags: Read</p>
+<a name="NMDevice--state-reason"></a><h3>The <code class="literal">"state-reason"</code> property</h3>
+<pre class="programlisting"> "state-reason" <span class="type">GValueArray_guint+guint_*</span> : Read</pre>
+<p>
+The state and reason of the device.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDevice--udi"></a><h3>The <code class="literal">“udiâ€</code> property</h3>
-<pre class="programlisting"> “udi†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Unique Device Identifier.</p>
-<p>Flags: Read</p>
+<a name="NMDevice--udi"></a><h3>The <code class="literal">"udi"</code> property</h3>
+<pre class="programlisting"> "udi" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+An operating-system specific device hardware identifier; this is not
+unique to a specific hardware device across reboots or hotplugs. It
+is an opaque string which for some device types (Bluetooth, Modem)
+contains an identifier provided by the underlying hardware service daemon
+such as Bluez or ModemManager, and clients can use this property to
+request more information about the device from those services.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDevice--vendor"></a><h3>The <code class="literal">“vendorâ€</code> property</h3>
-<pre class="programlisting"> “vendor†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Vendor string.</p>
-<p>Flags: Read</p>
+<a name="NMDevice--vendor"></a><h3>The <code class="literal">"vendor"</code> property</h3>
+<pre class="programlisting"> "vendor" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The vendor string of the device.
+</p>
<p>Default value: NULL</p>
</div>
</div>
<div class="refsect1">
<a name="NMDevice.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMDevice-state-changed"></a><h3>The <code class="literal">“state-changedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> new_state,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> old_state,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> reason,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMDevice-state-changed"></a><h3>The <code class="literal">"state-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> new_state,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> old_state,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> reason,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies the state change of a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>the device object that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_state</code></em> :</span></p></td>
+<td>the new state of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>old_state</code></em> :</span></p></td>
+<td>the previous state of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
+<td>the reason describing the state change</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceAdsl.html b/docs/libnm-glib/html/NMDeviceAdsl.html
index fef737a4e..8f20351f6 100644
--- a/docs/libnm-glib/html/NMDeviceAdsl.html
+++ b/docs/libnm-glib/html/NMDeviceAdsl.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceAdsl</title>
+<title>NMDeviceAdsl</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceWimax.html" title="NMDeviceWimax">
<link rel="next" href="NMDeviceBond.html" title="NMDeviceBond">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceAdsl.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceAdsl.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceAdsl.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceWimax.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceBond.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceWimax.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceBond.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceAdsl.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceAdsl.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceAdsl.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceAdsl.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceAdsl.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceAdsl"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,87 +39,40 @@
<h2><span class="refentrytitle"><a name="NMDeviceAdsl.top_of_page"></a>NMDeviceAdsl</span></h2>
<p>NMDeviceAdsl</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDeviceAdsl.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-error-quark" title="nm_device_adsl_error_quark ()">nm_device_adsl_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-new" title="nm_device_adsl_new ()">nm_device_adsl_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-get-carrier" title="nm_device_adsl_get_carrier ()">nm_device_adsl_get_carrier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceAdsl.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceAdsl.html#NMDeviceAdslError" title="enum NMDeviceAdslError">NMDeviceAdslError</a>;
+#define <a class="link" href="NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR:CAPS" title="NM_DEVICE_ADSL_ERROR">NM_DEVICE_ADSL_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceAdsl.html#nm-device-adsl-error-quark" title="nm_device_adsl_error_quark ()">nm_device_adsl_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS" title="NM_DEVICE_ADSL_CARRIER">NM_DEVICE_ADSL_CARRIER</a>
+ <a class="link" href="NMDeviceAdsl.html#NMDeviceAdsl-struct" title="NMDeviceAdsl">NMDeviceAdsl</a>;
+ <a class="link" href="NMDeviceAdsl.html#NMDeviceAdslClass" title="NMDeviceAdslClass">NMDeviceAdslClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceAdsl.html#nm-device-adsl-new" title="nm_device_adsl_new ()">nm_device_adsl_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceAdsl.html#nm-device-adsl-get-carrier" title="nm_device_adsl_get_carrier ()">nm_device_adsl_get_carrier</a> (<em class="parameter"><code><a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a> *device</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceAdsl.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody><tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceAdsl.html#NMDeviceAdsl--carrier" title="The “carrier†property">carrier</a></td>
-<td class="property_flags">Read</td>
-</tr></tbody>
-</table></div>
+<a name="NMDeviceAdsl.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceAdsl
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceAdsl.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceAdsl.html#NMDeviceAdslError" title="enum NMDeviceAdslError">NMDeviceAdslError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR:CAPS" title="NM_DEVICE_ADSL_ERROR">NM_DEVICE_ADSL_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS" title="NM_DEVICE_ADSL_CARRIER">NM_DEVICE_ADSL_CARRIER</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceAdsl.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceAdsl implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDeviceAdsl.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceAdsl
+<a name="NMDeviceAdsl.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceAdsl.html#NMDeviceAdsl--carrier" title='The "carrier" property'>carrier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
</pre>
</div>
<div class="refsect1">
@@ -120,149 +81,170 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDeviceAdsl.functions_details"></a><h2>Functions</h2>
+<a name="NMDeviceAdsl.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-device-adsl-error-quark"></a><h3>nm_device_adsl_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_adsl_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.10.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-adsl-new"></a><h3>nm_device_adsl_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_adsl_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.10.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceAdslError"></a><h3>enum NMDeviceAdslError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_ADSL_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_ADSL_ERROR_NOT_ADSL_CONNECTION, /*&lt; nick=NotAdslConnection &gt;*/
+ NM_DEVICE_ADSL_ERROR_INVALID_ADSL_CONNECTION, /*&lt; nick=InvalidAdslConnection &gt;*/
+} NMDeviceAdslError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-ADSL-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ADSL_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ADSL-ERROR-NOT-ADSL-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ADSL_ERROR_NOT_ADSL_CONNECTION</code></span></p></td>
+<td>the connection was not of ADSL type
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-ADSL-ERROR-INVALID-ADSL-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ADSL_ERROR_INVALID_ADSL_CONNECTION</code></span></p></td>
+<td>the ADSL connection was invalid
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.10.8.3.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-ADSL-ERROR:CAPS"></a><h3>NM_DEVICE_ADSL_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_ADSL_ERROR nm_device_adsl_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-adsl-get-carrier"></a><h3>nm_device_adsl_get_carrier ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_adsl_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a> *device</code></em>);</pre>
-<p>Whether the device has carrier.</p>
-<div class="refsect3">
-<a name="id-1.3.10.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-adsl-error-quark"></a><h3>nm_device_adsl_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_adsl_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.10.8.4.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-ADSL-CARRIER:CAPS"></a><h3>NM_DEVICE_ADSL_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_ADSL_CARRIER "carrier"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceAdsl-struct"></a><h3>NMDeviceAdsl</h3>
+<pre class="programlisting">typedef struct _NMDeviceAdsl NMDeviceAdsl;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceAdslClass"></a><h3>NMDeviceAdslClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceAdslClass;
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceAdsl.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMDeviceAdslError"></a><h3>enum NMDeviceAdslError</h3>
-<div class="refsect3">
-<a name="id-1.3.10.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-adsl-new"></a><h3>nm_device_adsl_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_adsl_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ADSL-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_ADSL_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ADSL-ERROR-NOT-ADSL-CONNECTION:CAPS"></a>NM_DEVICE_ADSL_ERROR_NOT_ADSL_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of ADSL type</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ADSL-ERROR-INVALID-ADSL-CONNECTION:CAPS"></a>NM_DEVICE_ADSL_ERROR_INVALID_ADSL_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the ADSL connection was invalid</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-ADSL-ERROR:CAPS"></a><h3>NM_DEVICE_ADSL_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_ADSL_ERROR nm_device_adsl_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-ADSL-CARRIER:CAPS"></a><h3>NM_DEVICE_ADSL_CARRIER</h3>
-<pre class="programlisting">#define NM_DEVICE_ADSL_CARRIER "carrier"
-</pre>
+<a name="nm-device-adsl-get-carrier"></a><h3>nm_device_adsl_get_carrier ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_adsl_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a> *device</code></em>);</pre>
<p>
+Whether the device has carrier.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl"><span class="type">NMDeviceAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceAdsl.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMDeviceAdsl--carrier"></a><h3>The <code class="literal">“carrierâ€</code> property</h3>
-<pre class="programlisting"> “carrier†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Carrier.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceAdsl--carrier"></a><h3>The <code class="literal">"carrier"</code> property</h3>
+<pre class="programlisting"> "carrier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the device has carrier.
+</p>
<p>Default value: FALSE</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceBond.html b/docs/libnm-glib/html/NMDeviceBond.html
index d86a8f049..9a5025875 100644
--- a/docs/libnm-glib/html/NMDeviceBond.html
+++ b/docs/libnm-glib/html/NMDeviceBond.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceBond</title>
+<title>NMDeviceBond</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceAdsl.html" title="NMDeviceAdsl">
<link rel="next" href="NMDeviceBridge.html" title="NMDeviceBridge">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceBond.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceBond.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceBond.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceAdsl.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceBridge.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceAdsl.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceBridge.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceBond.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceBond.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceBond.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceBond.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceBond.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceBond"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,123 +39,46 @@
<h2><span class="refentrytitle"><a name="NMDeviceBond.top_of_page"></a>NMDeviceBond</span></h2>
<p>NMDeviceBond</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDeviceBond.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBond.html#nm-device-bond-error-quark" title="nm_device_bond_error_quark ()">nm_device_bond_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBond.html#nm-device-bond-new" title="nm_device_bond_new ()">nm_device_bond_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBond.html#nm-device-bond-get-hw-address" title="nm_device_bond_get_hw_address ()">nm_device_bond_get_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBond.html#nm-device-bond-get-carrier" title="nm_device_bond_get_carrier ()">nm_device_bond_get_carrier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBond.html#nm-device-bond-get-slaves" title="nm_device_bond_get_slaves ()">nm_device_bond_get_slaves</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceBond.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceBond.html#NMDeviceBondError" title="enum NMDeviceBondError">NMDeviceBondError</a>;
+#define <a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-ERROR:CAPS" title="NM_DEVICE_BOND_ERROR">NM_DEVICE_BOND_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceBond.html#nm-device-bond-error-quark" title="nm_device_bond_error_quark ()">nm_device_bond_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-HW-ADDRESS:CAPS" title="NM_DEVICE_BOND_HW_ADDRESS">NM_DEVICE_BOND_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-CARRIER:CAPS" title="NM_DEVICE_BOND_CARRIER">NM_DEVICE_BOND_CARRIER</a>
+#define <a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-SLAVES:CAPS" title="NM_DEVICE_BOND_SLAVES">NM_DEVICE_BOND_SLAVES</a>
+ <a class="link" href="NMDeviceBond.html#NMDeviceBond-struct" title="NMDeviceBond">NMDeviceBond</a>;
+ <a class="link" href="NMDeviceBond.html#NMDeviceBondClass" title="NMDeviceBondClass">NMDeviceBondClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceBond.html#nm-device-bond-new" title="nm_device_bond_new ()">nm_device_bond_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceBond.html#nm-device-bond-get-hw-address" title="nm_device_bond_get_hw_address ()">nm_device_bond_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceBond.html#nm-device-bond-get-carrier" title="nm_device_bond_get_carrier ()">nm_device_bond_get_carrier</a> (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMDeviceBond.html#nm-device-bond-get-slaves" title="nm_device_bond_get_slaves ()">nm_device_bond_get_slaves</a> (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceBond.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceBond.html#NMDeviceBond--carrier" title="The “carrier†property">carrier</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceBond.html#NMDeviceBond--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMObjectArray</span> *</td>
-<td class="property_name"><a class="link" href="NMDeviceBond.html#NMDeviceBond--slaves" title="The “slaves†property">slaves</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceBond.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceBond
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceBond.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceBond.html#NMDeviceBondError" title="enum NMDeviceBondError">NMDeviceBondError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-ERROR:CAPS" title="NM_DEVICE_BOND_ERROR">NM_DEVICE_BOND_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-HW-ADDRESS:CAPS" title="NM_DEVICE_BOND_HW_ADDRESS">NM_DEVICE_BOND_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-CARRIER:CAPS" title="NM_DEVICE_BOND_CARRIER">NM_DEVICE_BOND_CARRIER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-SLAVES:CAPS" title="NM_DEVICE_BOND_SLAVES">NM_DEVICE_BOND_SLAVES</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceBond.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceBond implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDeviceBond.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceBond
+<a name="NMDeviceBond.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceBond.html#NMDeviceBond--carrier" title='The "carrier" property'>carrier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDeviceBond.html#NMDeviceBond--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceBond.html#NMDeviceBond--slaves" title='The "slaves" property'>slaves</a>" <span class="type">NMObjectArray</span>* : Read
</pre>
</div>
<div class="refsect1">
@@ -156,248 +87,265 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDeviceBond.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-device-bond-error-quark"></a><h3>nm_device_bond_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_bond_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.11.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
+<a name="NMDeviceBond.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-device-bond-new"></a><h3>nm_device_bond_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_bond_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.11.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceBondError"></a><h3>enum NMDeviceBondError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_BOND_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_BOND_ERROR_NOT_BOND_CONNECTION, /*&lt; nick=NotBondConnection &gt;*/
+ NM_DEVICE_BOND_ERROR_INVALID_BOND_CONNECTION, /*&lt; nick=InvalidBondConnection &gt;*/
+ NM_DEVICE_BOND_ERROR_INTERFACE_MISMATCH, /*&lt; nick=InterfaceMismatch &gt;*/
+} NMDeviceBondError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-BOND-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BOND_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-BOND-ERROR-NOT-BOND-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BOND_ERROR_NOT_BOND_CONNECTION</code></span></p></td>
+<td>the connection was not of bond type
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-BOND-ERROR-INVALID-BOND-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BOND_ERROR_INVALID_BOND_CONNECTION</code></span></p></td>
+<td>the bond connection was invalid
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-BOND-ERROR-INTERFACE-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BOND_ERROR_INTERFACE_MISMATCH</code></span></p></td>
+<td>the interfaces of the connection and the device mismatched
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.11.8.3.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bond-get-hw-address"></a><h3>nm_device_bond_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_bond_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);</pre>
-<p>Gets the hardware (MAC) address of the <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.11.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.11.8.4.6"></a><h4>Returns</h4>
-<p> the hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
+<a name="NM-DEVICE-BOND-ERROR:CAPS"></a><h3>NM_DEVICE_BOND_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_BOND_ERROR nm_device_bond_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bond-get-carrier"></a><h3>nm_device_bond_get_carrier ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_bond_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);</pre>
-<p>Whether the device has carrier.</p>
-<div class="refsect3">
-<a name="id-1.3.11.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-bond-error-quark"></a><h3>nm_device_bond_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_bond_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.11.8.5.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</p>
-<p></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-BOND-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_BOND_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_BOND_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bond-get-slaves"></a><h3>nm_device_bond_get_slaves ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_device_bond_get_slaves (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);</pre>
-<p>Gets the devices currently slaved to <em class="parameter"><code>device</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.3.11.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-BOND-CARRIER:CAPS"></a><h3>NM_DEVICE_BOND_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_BOND_CARRIER "carrier"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.11.8.6.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
-<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>s that are slaves of <em class="parameter"><code>device</code></em>
-. This is the internal
-copy used by the device, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-BOND-SLAVES:CAPS"></a><h3>NM_DEVICE_BOND_SLAVES</h3>
+<pre class="programlisting">#define NM_DEVICE_BOND_SLAVES "slaves"
+</pre>
+<p>
+</p>
</div>
-<p class="since">Since 0.9.6.4</p>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBond-struct"></a><h3>NMDeviceBond</h3>
+<pre class="programlisting">typedef struct _NMDeviceBond NMDeviceBond;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBondClass"></a><h3>NMDeviceBondClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceBondClass;
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceBond.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMDeviceBondError"></a><h3>enum NMDeviceBondError</h3>
-<div class="refsect3">
-<a name="id-1.3.11.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-bond-new"></a><h3>nm_device_bond_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_bond_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BOND-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_BOND_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BOND-ERROR-NOT-BOND-CONNECTION:CAPS"></a>NM_DEVICE_BOND_ERROR_NOT_BOND_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of bond type</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BOND-ERROR-INVALID-BOND-CONNECTION:CAPS"></a>NM_DEVICE_BOND_ERROR_INVALID_BOND_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the bond connection was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BOND-ERROR-INTERFACE-MISMATCH:CAPS"></a>NM_DEVICE_BOND_ERROR_INTERFACE_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the interfaces of the connection and the device mismatched</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BOND-ERROR:CAPS"></a><h3>NM_DEVICE_BOND_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_BOND_ERROR nm_device_bond_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-BOND-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_BOND_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_BOND_HW_ADDRESS "hw-address"
-</pre>
+<a name="nm-device-bond-get-hw-address"></a><h3>nm_device_bond_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_bond_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);</pre>
<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a>
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BOND-CARRIER:CAPS"></a><h3>NM_DEVICE_BOND_CARRIER</h3>
-<pre class="programlisting">#define NM_DEVICE_BOND_CARRIER "carrier"
-</pre>
+<a name="nm-device-bond-get-carrier"></a><h3>nm_device_bond_get_carrier ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_bond_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);</pre>
<p>
+Whether the device has carrier.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BOND-SLAVES:CAPS"></a><h3>NM_DEVICE_BOND_SLAVES</h3>
-<pre class="programlisting">#define NM_DEVICE_BOND_SLAVES "slaves"
-</pre>
+<a name="nm-device-bond-get-slaves"></a><h3>nm_device_bond_get_slaves ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_device_bond_get_slaves (<em class="parameter"><code><a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a> *device</code></em>);</pre>
<p>
+Gets the devices currently slaved to <em class="parameter"><code>device</code></em>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBond.html" title="NMDeviceBond"><span class="type">NMDeviceBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
+<a href="NMDevice.html"><span class="type">NMDevices</span></a> that are slaves of <em class="parameter"><code>device</code></em>. This is the internal
+copy used by the device, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.6.4</p>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceBond.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMDeviceBond--carrier"></a><h3>The <code class="literal">“carrierâ€</code> property</h3>
-<pre class="programlisting"> “carrier†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Carrier.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceBond--carrier"></a><h3>The <code class="literal">"carrier"</code> property</h3>
+<pre class="programlisting"> "carrier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the device has carrier.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceBond--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Currently set hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceBond--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceBond--slaves"></a><h3>The <code class="literal">“slavesâ€</code> property</h3>
-<pre class="programlisting"> “slaves†<span class="type">NMObjectArray</span> *</pre>
-<p>Slaves.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceBond--slaves"></a><h3>The <code class="literal">"slaves"</code> property</h3>
+<pre class="programlisting"> "slaves" <span class="type">NMObjectArray</span>* : Read</pre>
+<p>
+The devices (<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>) slaved to the bond device.
+</p>
<p class="since">Since 0.9.8</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceBridge.html b/docs/libnm-glib/html/NMDeviceBridge.html
index 6ef3f5e4c..2b7594ad2 100644
--- a/docs/libnm-glib/html/NMDeviceBridge.html
+++ b/docs/libnm-glib/html/NMDeviceBridge.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceBridge</title>
+<title>NMDeviceBridge</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceBond.html" title="NMDeviceBond">
-<link rel="next" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="next" href="NMDeviceTeam.html" title="NMDeviceTeam">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceBridge.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceBridge.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceBridge.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceBond.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceInfiniband.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceBond.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceTeam.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceBridge.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceBridge.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceBridge.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceBridge.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceBridge.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceBridge"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,123 +39,46 @@
<h2><span class="refentrytitle"><a name="NMDeviceBridge.top_of_page"></a>NMDeviceBridge</span></h2>
<p>NMDeviceBridge</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDeviceBridge.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-error-quark" title="nm_device_bridge_error_quark ()">nm_device_bridge_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-new" title="nm_device_bridge_new ()">nm_device_bridge_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-hw-address" title="nm_device_bridge_get_hw_address ()">nm_device_bridge_get_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-carrier" title="nm_device_bridge_get_carrier ()">nm_device_bridge_get_carrier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-slaves" title="nm_device_bridge_get_slaves ()">nm_device_bridge_get_slaves</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceBridge.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceBridge.html#NMDeviceBridgeError" title="enum NMDeviceBridgeError">NMDeviceBridgeError</a>;
+#define <a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR:CAPS" title="NM_DEVICE_BRIDGE_ERROR">NM_DEVICE_BRIDGE_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceBridge.html#nm-device-bridge-error-quark" title="nm_device_bridge_error_quark ()">nm_device_bridge_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS" title="NM_DEVICE_BRIDGE_HW_ADDRESS">NM_DEVICE_BRIDGE_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-CARRIER:CAPS" title="NM_DEVICE_BRIDGE_CARRIER">NM_DEVICE_BRIDGE_CARRIER</a>
+#define <a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-SLAVES:CAPS" title="NM_DEVICE_BRIDGE_SLAVES">NM_DEVICE_BRIDGE_SLAVES</a>
+ <a class="link" href="NMDeviceBridge.html#NMDeviceBridge-struct" title="NMDeviceBridge">NMDeviceBridge</a>;
+ <a class="link" href="NMDeviceBridge.html#NMDeviceBridgeClass" title="NMDeviceBridgeClass">NMDeviceBridgeClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceBridge.html#nm-device-bridge-new" title="nm_device_bridge_new ()">nm_device_bridge_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-hw-address" title="nm_device_bridge_get_hw_address ()">nm_device_bridge_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-carrier" title="nm_device_bridge_get_carrier ()">nm_device_bridge_get_carrier</a> (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-slaves" title="nm_device_bridge_get_slaves ()">nm_device_bridge_get_slaves</a> (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceBridge.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceBridge.html#NMDeviceBridge--carrier" title="The “carrier†property">carrier</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceBridge.html#NMDeviceBridge--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMObjectArray</span> *</td>
-<td class="property_name"><a class="link" href="NMDeviceBridge.html#NMDeviceBridge--slaves" title="The “slaves†property">slaves</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceBridge.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceBridge
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceBridge.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceBridge.html#NMDeviceBridgeError" title="enum NMDeviceBridgeError">NMDeviceBridgeError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR:CAPS" title="NM_DEVICE_BRIDGE_ERROR">NM_DEVICE_BRIDGE_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS" title="NM_DEVICE_BRIDGE_HW_ADDRESS">NM_DEVICE_BRIDGE_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-CARRIER:CAPS" title="NM_DEVICE_BRIDGE_CARRIER">NM_DEVICE_BRIDGE_CARRIER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-SLAVES:CAPS" title="NM_DEVICE_BRIDGE_SLAVES">NM_DEVICE_BRIDGE_SLAVES</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceBridge.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceBridge implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDeviceBridge.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceBridge
+<a name="NMDeviceBridge.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--carrier" title='The "carrier" property'>carrier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--slaves" title='The "slaves" property'>slaves</a>" <span class="type">NMObjectArray</span>* : Read
</pre>
</div>
<div class="refsect1">
@@ -156,255 +87,272 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDeviceBridge.functions_details"></a><h2>Functions</h2>
+<a name="NMDeviceBridge.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-device-bridge-error-quark"></a><h3>nm_device_bridge_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_bridge_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.12.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> errors.</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-bridge-new"></a><h3>nm_device_bridge_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_bridge_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.12.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceBridgeError"></a><h3>enum NMDeviceBridgeError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_BRIDGE_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_BRIDGE_ERROR_NOT_BRIDGE_CONNECTION, /*&lt; nick=NotBridgeConnection &gt;*/
+ NM_DEVICE_BRIDGE_ERROR_INVALID_BRIDGE_CONNECTION, /*&lt; nick=InvalidBridgeConnection &gt;*/
+ NM_DEVICE_BRIDGE_ERROR_INTERFACE_MISMATCH, /*&lt; nick=InterfaceMismatch &gt;*/
+} NMDeviceBridgeError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-BRIDGE-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BRIDGE_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-BRIDGE-ERROR-NOT-BRIDGE-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BRIDGE_ERROR_NOT_BRIDGE_CONNECTION</code></span></p></td>
+<td>the connection was not of bridge type
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-BRIDGE-ERROR-INVALID-BRIDGE-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BRIDGE_ERROR_INVALID_BRIDGE_CONNECTION</code></span></p></td>
+<td>the bridge connection was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-BRIDGE-ERROR-INTERFACE-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BRIDGE_ERROR_INTERFACE_MISMATCH</code></span></p></td>
+<td>the interfaces of the connection and the device mismatched
+</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.12.8.3.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bridge-get-hw-address"></a><h3>nm_device_bridge_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_bridge_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);</pre>
-<p>Gets the hardware (MAC) address of the <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.12.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.12.8.4.6"></a><h4>Returns</h4>
-<p> the hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
+<a name="NM-DEVICE-BRIDGE-ERROR:CAPS"></a><h3>NM_DEVICE_BRIDGE_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_BRIDGE_ERROR nm_device_bridge_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bridge-get-carrier"></a><h3>nm_device_bridge_get_carrier ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_bridge_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);</pre>
-<p>Whether the device has carrier.</p>
-<div class="refsect3">
-<a name="id-1.3.12.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-bridge-error-quark"></a><h3>nm_device_bridge_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_bridge_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> errors.</td>
</tr></tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.12.8.5.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bridge-get-slaves"></a><h3>nm_device_bridge_get_slaves ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_device_bridge_get_slaves (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);</pre>
-<p>Gets the devices currently slaved to <em class="parameter"><code>device</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.3.12.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_BRIDGE_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_BRIDGE_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.12.8.6.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
-<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>s that are slaves of <em class="parameter"><code>device</code></em>
-. This is the internal
-copy used by the device, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-BRIDGE-CARRIER:CAPS"></a><h3>NM_DEVICE_BRIDGE_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_BRIDGE_CARRIER "carrier"
+</pre>
+<p>
+</p>
</div>
-<p class="since">Since 0.9.8</p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-BRIDGE-SLAVES:CAPS"></a><h3>NM_DEVICE_BRIDGE_SLAVES</h3>
+<pre class="programlisting">#define NM_DEVICE_BRIDGE_SLAVES "slaves"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBridge-struct"></a><h3>NMDeviceBridge</h3>
+<pre class="programlisting">typedef struct _NMDeviceBridge NMDeviceBridge;</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceBridge.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMDeviceBridgeError"></a><h3>enum NMDeviceBridgeError</h3>
-<div class="refsect3">
-<a name="id-1.3.12.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceBridgeClass"></a><h3>NMDeviceBridgeClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceBridgeClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-bridge-new"></a><h3>nm_device_bridge_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_bridge_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BRIDGE-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_BRIDGE_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BRIDGE-ERROR-NOT-BRIDGE-CONNECTION:CAPS"></a>NM_DEVICE_BRIDGE_ERROR_NOT_BRIDGE_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of bridge type</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BRIDGE-ERROR-INVALID-BRIDGE-CONNECTION:CAPS"></a>NM_DEVICE_BRIDGE_ERROR_INVALID_BRIDGE_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the bridge connection was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BRIDGE-ERROR-INTERFACE-MISMATCH:CAPS"></a>NM_DEVICE_BRIDGE_ERROR_INTERFACE_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the interfaces of the connection and the device mismatched</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BRIDGE-ERROR:CAPS"></a><h3>NM_DEVICE_BRIDGE_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_BRIDGE_ERROR nm_device_bridge_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_BRIDGE_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_BRIDGE_HW_ADDRESS "hw-address"
-</pre>
+<a name="nm-device-bridge-get-hw-address"></a><h3>nm_device_bridge_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_bridge_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);</pre>
<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a>
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BRIDGE-CARRIER:CAPS"></a><h3>NM_DEVICE_BRIDGE_CARRIER</h3>
-<pre class="programlisting">#define NM_DEVICE_BRIDGE_CARRIER "carrier"
-</pre>
+<a name="nm-device-bridge-get-carrier"></a><h3>nm_device_bridge_get_carrier ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_bridge_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);</pre>
<p>
+Whether the device has carrier.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BRIDGE-SLAVES:CAPS"></a><h3>NM_DEVICE_BRIDGE_SLAVES</h3>
-<pre class="programlisting">#define NM_DEVICE_BRIDGE_SLAVES "slaves"
-</pre>
+<a name="nm-device-bridge-get-slaves"></a><h3>nm_device_bridge_get_slaves ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_device_bridge_get_slaves (<em class="parameter"><code><a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a> *device</code></em>);</pre>
<p>
+Gets the devices currently slaved to <em class="parameter"><code>device</code></em>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge"><span class="type">NMDeviceBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
+<a href="NMDevice.html"><span class="type">NMDevices</span></a> that are slaves of <em class="parameter"><code>device</code></em>. This is the internal
+copy used by the device, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceBridge.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMDeviceBridge--carrier"></a><h3>The <code class="literal">“carrierâ€</code> property</h3>
-<pre class="programlisting"> “carrier†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Carrier.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceBridge--carrier"></a><h3>The <code class="literal">"carrier"</code> property</h3>
+<pre class="programlisting"> "carrier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the device has carrier.
+</p>
<p>Default value: FALSE</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceBridge--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Currently set hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceBridge--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
<p>Default value: NULL</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceBridge--slaves"></a><h3>The <code class="literal">“slavesâ€</code> property</h3>
-<pre class="programlisting"> “slaves†<span class="type">NMObjectArray</span> *</pre>
-<p>Slaves.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceBridge--slaves"></a><h3>The <code class="literal">"slaves"</code> property</h3>
+<pre class="programlisting"> "slaves" <span class="type">NMObjectArray</span>* : Read</pre>
+<p>
+The devices (<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>) slaved to the bridge device.
+</p>
<p class="since">Since 0.9.8</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceBt.html b/docs/libnm-glib/html/NMDeviceBt.html
index e951a85a6..e3a59fc79 100644
--- a/docs/libnm-glib/html/NMDeviceBt.html
+++ b/docs/libnm-glib/html/NMDeviceBt.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceBt</title>
+<title>NMDeviceBt</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceModem.html" title="NMDeviceModem">
<link rel="next" href="NMDeviceWimax.html" title="NMDeviceWimax">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceBt.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceBt.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceBt.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceModem.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceWimax.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceModem.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceWimax.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceBt.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceBt.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceBt.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceBt.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceBt.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceBt"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,382 +39,321 @@
<h2><span class="refentrytitle"><a name="NMDeviceBt.top_of_page"></a>NMDeviceBt</span></h2>
<p>NMDeviceBt</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceBt.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceBt.html#NMDeviceBtError" title="enum NMDeviceBtError">NMDeviceBtError</a>;
+#define <a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-ERROR:CAPS" title="NM_DEVICE_BT_ERROR">NM_DEVICE_BT_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceBt.html#nm-device-bt-error-quark" title="nm_device_bt_error_quark ()">nm_device_bt_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-HW-ADDRESS:CAPS" title="NM_DEVICE_BT_HW_ADDRESS">NM_DEVICE_BT_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-NAME:CAPS" title="NM_DEVICE_BT_NAME">NM_DEVICE_BT_NAME</a>
+#define <a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-CAPABILITIES:CAPS" title="NM_DEVICE_BT_CAPABILITIES">NM_DEVICE_BT_CAPABILITIES</a>
+ <a class="link" href="NMDeviceBt.html#NMDeviceBt-struct" title="NMDeviceBt">NMDeviceBt</a>;
+ <a class="link" href="NMDeviceBt.html#NMDeviceBtClass" title="NMDeviceBtClass">NMDeviceBtClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceBt.html#nm-device-bt-new" title="nm_device_bt_new ()">nm_device_bt_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceBt.html#nm-device-bt-get-hw-address" title="nm_device_bt_get_hw_address ()">nm_device_bt_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceBt.html#nm-device-bt-get-name" title="nm_device_bt_get_name ()">nm_device_bt_get_name</a> (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);
+<span class="returnvalue">NMBluetoothCapabilities</span> <a class="link" href="NMDeviceBt.html#nm-device-bt-get-capabilities" title="nm_device_bt_get_capabilities ()">nm_device_bt_get_capabilities</a> (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);
+</pre>
+</div>
<div class="refsect1">
-<a name="NMDeviceBt.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceBt.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceBt
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBt.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceBt implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBt.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceBt.html#NMDeviceBt--bt-capabilities" title='The "bt-capabilities" property'>bt-capabilities</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDeviceBt.html#NMDeviceBt--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceBt.html#NMDeviceBt--name" title='The "name" property'>name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBt.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBt.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDeviceBtError"></a><h3>enum NMDeviceBtError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_BT_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_BT_ERROR_NOT_BT_CONNECTION, /*&lt; nick=NotBtConnection &gt;*/
+ NM_DEVICE_BT_ERROR_INVALID_BT_CONNECTION, /*&lt; nick=InvalidBtConnection &gt;*/
+ NM_DEVICE_BT_ERROR_INVALID_DEVICE_MAC, /*&lt; nick=InvalidDeviceMac &gt;*/
+ NM_DEVICE_BT_ERROR_MAC_MISMATCH, /*&lt; nick=MacMismatch &gt;*/
+ NM_DEVICE_BT_ERROR_MISSING_DEVICE_CAPS, /*&lt; nick=MissingDeviceCaps &gt;*/
+} NMDeviceBtError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBt.html#nm-device-bt-error-quark" title="nm_device_bt_error_quark ()">nm_device_bt_error_quark</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-BT-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BT_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBt.html#nm-device-bt-new" title="nm_device_bt_new ()">nm_device_bt_new</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-BT-ERROR-NOT-BT-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BT_ERROR_NOT_BT_CONNECTION</code></span></p></td>
+<td>the connection was not of bluetooth type
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBt.html#nm-device-bt-get-hw-address" title="nm_device_bt_get_hw_address ()">nm_device_bt_get_hw_address</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-BT-ERROR-INVALID-BT-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BT_ERROR_INVALID_BT_CONNECTION</code></span></p></td>
+<td>the bluetooth connection was invalid
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBt.html#nm-device-bt-get-name" title="nm_device_bt_get_name ()">nm_device_bt_get_name</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-BT-ERROR-INVALID-DEVICE-MAC:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BT_ERROR_INVALID_DEVICE_MAC</code></span></p></td>
+<td>the device's MAC was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">NMBluetoothCapabilities</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceBt.html#nm-device-bt-get-capabilities" title="nm_device_bt_get_capabilities ()">nm_device_bt_get_capabilities</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-BT-ERROR-MAC-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BT_ERROR_MAC_MISMATCH</code></span></p></td>
+<td>the MACs of the connection and the device mismatched
</td>
</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceBt.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceBt.html#NMDeviceBt--bt-capabilities" title="The “bt-capabilities†property">bt-capabilities</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceBt.html#NMDeviceBt--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceBt.html#NMDeviceBt--name" title="The “name†property">name</a></td>
-<td class="property_flags">Read</td>
+<td><p><a name="NM-DEVICE-BT-ERROR-MISSING-DEVICE-CAPS"></a><span class="term"><code class="literal">NM_DEVICE_BT_ERROR_MISSING_DEVICE_CAPS</code></span></p></td>
+<td>the device missed required capabilities
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceBt.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-BT-ERROR:CAPS"></a><h3>NM_DEVICE_BT_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_BT_ERROR nm_device_bt_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-bt-error-quark"></a><h3>nm_device_bt_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_bt_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceBt.html#NMDeviceBtError" title="enum NMDeviceBtError">NMDeviceBtError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-ERROR:CAPS" title="NM_DEVICE_BT_ERROR">NM_DEVICE_BT_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-HW-ADDRESS:CAPS" title="NM_DEVICE_BT_HW_ADDRESS">NM_DEVICE_BT_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-NAME:CAPS" title="NM_DEVICE_BT_NAME">NM_DEVICE_BT_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-CAPABILITIES:CAPS" title="NM_DEVICE_BT_CAPABILITIES">NM_DEVICE_BT_CAPABILITIES</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceBt.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceBt
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-BT-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_BT_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_BT_HW_ADDRESS "hw-address"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceBt.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-BT-NAME:CAPS"></a><h3>NM_DEVICE_BT_NAME</h3>
+<pre class="programlisting">#define NM_DEVICE_BT_NAME "name"
+</pre>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceBt.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="nm-device-bt-error-quark"></a><h3>nm_device_bt_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_bt_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.8.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> errors.</p>
-<p></p>
+<a name="NM-DEVICE-BT-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_BT_CAPABILITIES</h3>
+<pre class="programlisting">#define NM_DEVICE_BT_CAPABILITIES "bt-capabilities"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBt-struct"></a><h3>NMDeviceBt</h3>
+<pre class="programlisting">typedef struct _NMDeviceBt NMDeviceBt;</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bt-new"></a><h3>nm_device_bt_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_bt_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.8.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceBtClass"></a><h3>NMDeviceBtClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceBtClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-bt-new"></a><h3>nm_device_bt_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_bt_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.8.8.3.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bt-get-hw-address"></a><h3>nm_device_bt_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_bt_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);</pre>
-<p>Gets the hardware (MAC) address of the <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.8.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-bt-get-hw-address"></a><h3>nm_device_bt_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_bt_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);</pre>
+<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.8.8.4.6"></a><h4>Returns</h4>
-<p> the hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bt-get-name"></a><h3>nm_device_bt_get_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_bt_get_name (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);</pre>
-<p>Gets the name of the <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.8.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-bt-get-name"></a><h3>nm_device_bt_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_bt_get_name (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);</pre>
+<p>
+Gets the name of the <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name of the device</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.8.8.5.6"></a><h4>Returns</h4>
-<p> the name of the device</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-bt-get-capabilities"></a><h3>nm_device_bt_get_capabilities ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMBluetoothCapabilities</span>
-nm_device_bt_get_capabilities (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);</pre>
-<p>Returns the Bluetooth device's usable capabilities.</p>
-<div class="refsect3">
-<a name="id-1.3.8.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.8.8.6.6"></a><h4>Returns</h4>
-<p> a combination of <span class="type">NMBluetoothCapabilities</span></p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceBt.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NMDeviceBtError"></a><h3>enum NMDeviceBtError</h3>
-<div class="refsect3">
-<a name="id-1.3.8.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-bt-get-capabilities"></a><h3>nm_device_bt_get_capabilities ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMBluetoothCapabilities</span> nm_device_bt_get_capabilities (<em class="parameter"><code><a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a> *device</code></em>);</pre>
+<p>
+Returns the Bluetooth device's usable capabilities.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BT-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_BT_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BT-ERROR-NOT-BT-CONNECTION:CAPS"></a>NM_DEVICE_BT_ERROR_NOT_BT_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of bluetooth type</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BT-ERROR-INVALID-BT-CONNECTION:CAPS"></a>NM_DEVICE_BT_ERROR_INVALID_BT_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the bluetooth connection was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BT-ERROR-INVALID-DEVICE-MAC:CAPS"></a>NM_DEVICE_BT_ERROR_INVALID_DEVICE_MAC</p></td>
-<td class="enum_member_description">
-<p>the device's MAC was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BT-ERROR-MAC-MISMATCH:CAPS"></a>NM_DEVICE_BT_ERROR_MAC_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the MACs of the connection and the device mismatched</p>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><span class="type">NMDeviceBt</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-BT-ERROR-MISSING-DEVICE-CAPS"></a>NM_DEVICE_BT_ERROR_MISSING_DEVICE_CAPS</p></td>
-<td class="enum_member_description">
-<p>the device missed required capabilities</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a combination of <span class="type">NMBluetoothCapabilities</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-BT-ERROR:CAPS"></a><h3>NM_DEVICE_BT_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_BT_ERROR nm_device_bt_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
+<div class="refsect1">
+<a name="NMDeviceBt.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-DEVICE-BT-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_BT_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_BT_HW_ADDRESS "hw-address"
-</pre>
+<a name="NMDeviceBt--bt-capabilities"></a><h3>The <code class="literal">"bt-capabilities"</code> property</h3>
+<pre class="programlisting"> "bt-capabilities" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The device's bluetooth capabilities, a combination of <span class="type">NMBluetoothCapabilities</span>.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BT-NAME:CAPS"></a><h3>NM_DEVICE_BT_NAME</h3>
-<pre class="programlisting">#define NM_DEVICE_BT_NAME "name"
-</pre>
+<a name="NMDeviceBt--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The hardware (MAC) address of the device.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-BT-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_BT_CAPABILITIES</h3>
-<pre class="programlisting">#define NM_DEVICE_BT_CAPABILITIES "bt-capabilities"
-</pre>
+<a name="NMDeviceBt--name"></a><h3>The <code class="literal">"name"</code> property</h3>
+<pre class="programlisting"> "name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The name of the bluetooth device.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceBt.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMDeviceBt--bt-capabilities"></a><h3>The <code class="literal">“bt-capabilitiesâ€</code> property</h3>
-<pre class="programlisting"> “bt-capabilities†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Bluetooth capabilities.</p>
-<p>Flags: Read</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceBt--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Hardware MAC address.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceBt--name"></a><h3>The <code class="literal">“nameâ€</code> property</h3>
-<pre class="programlisting"> “name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Device name.</p>
-<p>Flags: Read</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceEthernet.html b/docs/libnm-glib/html/NMDeviceEthernet.html
index 98767b2eb..96c3a0740 100644
--- a/docs/libnm-glib/html/NMDeviceEthernet.html
+++ b/docs/libnm-glib/html/NMDeviceEthernet.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceEthernet</title>
+<title>NMDeviceEthernet</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDevice.html" title="NMDevice">
<link rel="next" href="NMDeviceWifi.html" title="NMDeviceWifi">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceEthernet.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceEthernet.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceEthernet.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDevice.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceWifi.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDevice.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceWifi.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceEthernet.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceEthernet.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceEthernet.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceEthernet.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceEthernet.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceEthernet"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,140 +39,50 @@
<h2><span class="refentrytitle"><a name="NMDeviceEthernet.top_of_page"></a>NMDeviceEthernet</span></h2>
<p>NMDeviceEthernet</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDeviceEthernet.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-error-quark" title="nm_device_ethernet_error_quark ()">nm_device_ethernet_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-new" title="nm_device_ethernet_new ()">nm_device_ethernet_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address" title="nm_device_ethernet_get_hw_address ()">nm_device_ethernet_get_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address" title="nm_device_ethernet_get_permanent_hw_address ()">nm_device_ethernet_get_permanent_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-speed" title="nm_device_ethernet_get_speed ()">nm_device_ethernet_get_speed</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-carrier" title="nm_device_ethernet_get_carrier ()">nm_device_ethernet_get_carrier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceEthernet.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceEthernet.html#NMDeviceEthernetError" title="enum NMDeviceEthernetError">NMDeviceEthernetError</a>;
+#define <a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR:CAPS" title="NM_DEVICE_ETHERNET_ERROR">NM_DEVICE_ETHERNET_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-error-quark" title="nm_device_ethernet_error_quark ()">nm_device_ethernet_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS" title="NM_DEVICE_ETHERNET_HW_ADDRESS">NM_DEVICE_ETHERNET_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS" title="NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS">NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-SPEED:CAPS" title="NM_DEVICE_ETHERNET_SPEED">NM_DEVICE_ETHERNET_SPEED</a>
+#define <a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-CARRIER:CAPS" title="NM_DEVICE_ETHERNET_CARRIER">NM_DEVICE_ETHERNET_CARRIER</a>
+ <a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet-struct" title="NMDeviceEthernet">NMDeviceEthernet</a>;
+ <a class="link" href="NMDeviceEthernet.html#NMDeviceEthernetClass" title="NMDeviceEthernetClass">NMDeviceEthernetClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-new" title="nm_device_ethernet_new ()">nm_device_ethernet_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address" title="nm_device_ethernet_get_hw_address ()">nm_device_ethernet_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address" title="nm_device_ethernet_get_permanent_hw_address ()">nm_device_ethernet_get_permanent_hw_address</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-speed" title="nm_device_ethernet_get_speed ()">nm_device_ethernet_get_speed</a> (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-carrier" title="nm_device_ethernet_get_carrier ()">nm_device_ethernet_get_carrier</a> (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceEthernet.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--carrier" title="The “carrier†property">carrier</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address" title="The “perm-hw-address†property">perm-hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--speed" title="The “speed†property">speed</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceEthernet.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceEthernet
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceEthernet.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceEthernet.html#NMDeviceEthernetError" title="enum NMDeviceEthernetError">NMDeviceEthernetError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR:CAPS" title="NM_DEVICE_ETHERNET_ERROR">NM_DEVICE_ETHERNET_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS" title="NM_DEVICE_ETHERNET_HW_ADDRESS">NM_DEVICE_ETHERNET_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS" title="NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS">NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-SPEED:CAPS" title="NM_DEVICE_ETHERNET_SPEED">NM_DEVICE_ETHERNET_SPEED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-CARRIER:CAPS" title="NM_DEVICE_ETHERNET_CARRIER">NM_DEVICE_ETHERNET_CARRIER</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceEthernet.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceEthernet implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDeviceEthernet.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceEthernet
+<a name="NMDeviceEthernet.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--carrier" title='The "carrier" property'>carrier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address" title='The "perm-hw-address" property'>perm-hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--speed" title='The "speed" property'>speed</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
</pre>
</div>
<div class="refsect1">
@@ -173,295 +91,311 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDeviceEthernet.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-device-ethernet-error-quark"></a><h3>nm_device_ethernet_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_ethernet_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.5.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
+<a name="NMDeviceEthernet.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-device-ethernet-new"></a><h3>nm_device_ethernet_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_ethernet_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.5.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceEthernetError"></a><h3>enum NMDeviceEthernetError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_ETHERNET_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_ETHERNET_ERROR_NOT_ETHERNET_CONNECTION, /*&lt; nick=NotEthernetConnection &gt;*/
+ NM_DEVICE_ETHERNET_ERROR_INVALID_ETHERNET_CONNECTION, /*&lt; nick=InvalidEthernetConnection &gt;*/
+ NM_DEVICE_ETHERNET_ERROR_INVALID_DEVICE_MAC, /*&lt; nick=InvalidDeviceMac &gt;*/
+ NM_DEVICE_ETHERNET_ERROR_MAC_MISMATCH, /*&lt; nick=MacMismatch &gt;*/
+} NMDeviceEthernetError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-ETHERNET-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ETHERNET_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ETHERNET-ERROR-NOT-ETHERNET-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ETHERNET_ERROR_NOT_ETHERNET_CONNECTION</code></span></p></td>
+<td>the connection was not of Ethernet or PPPoE type
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ETHERNET-ERROR-INVALID-ETHERNET-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ETHERNET_ERROR_INVALID_ETHERNET_CONNECTION</code></span></p></td>
+<td>the Ethernet connection was invalid
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-ETHERNET-ERROR-INVALID-DEVICE-MAC:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ETHERNET_ERROR_INVALID_DEVICE_MAC</code></span></p></td>
+<td>the device's MAC was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ETHERNET-ERROR-MAC-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ETHERNET_ERROR_MAC_MISMATCH</code></span></p></td>
+<td>the MACs of the connection and the device mismatched
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.5.8.3.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-ethernet-get-hw-address"></a><h3>nm_device_ethernet_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_ethernet_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
-<p>Gets the active hardware (MAC) address of the <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.5.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.5.8.4.6"></a><h4>Returns</h4>
-<p> the active hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
+<a name="NM-DEVICE-ETHERNET-ERROR:CAPS"></a><h3>NM_DEVICE_ETHERNET_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_ETHERNET_ERROR nm_device_ethernet_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-ethernet-get-permanent-hw-address"></a><h3>nm_device_ethernet_get_permanent_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_ethernet_get_permanent_hw_address
- (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
-<p>Gets the permanent hardware (MAC) address of the <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.5.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-ethernet-error-quark"></a><h3>nm_device_ethernet_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_ethernet_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.5.8.5.6"></a><h4>Returns</h4>
-<p> the permanent hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-ethernet-get-speed"></a><h3>nm_device_ethernet_get_speed ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_device_ethernet_get_speed (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
-<p>Gets the speed of the <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.5.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.5.8.6.6"></a><h4>Returns</h4>
-<p> the speed of the device</p>
-<p></p>
+<a name="NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_ETHERNET_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_ETHERNET_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS "perm-hw-address"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-ethernet-get-carrier"></a><h3>nm_device_ethernet_get_carrier ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_ethernet_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
-<p>Whether the device has carrier.</p>
-<div class="refsect3">
-<a name="id-1.3.5.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-ETHERNET-SPEED:CAPS"></a><h3>NM_DEVICE_ETHERNET_SPEED</h3>
+<pre class="programlisting">#define NM_DEVICE_ETHERNET_SPEED "speed"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.5.8.7.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-ETHERNET-CARRIER:CAPS"></a><h3>NM_DEVICE_ETHERNET_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_ETHERNET_CARRIER "carrier"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceEthernet-struct"></a><h3>NMDeviceEthernet</h3>
+<pre class="programlisting">typedef struct _NMDeviceEthernet NMDeviceEthernet;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceEthernetClass"></a><h3>NMDeviceEthernetClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceEthernetClass;
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceEthernet.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMDeviceEthernetError"></a><h3>enum NMDeviceEthernetError</h3>
-<div class="refsect3">
-<a name="id-1.3.5.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-ethernet-new"></a><h3>nm_device_ethernet_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_ethernet_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ETHERNET-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_ETHERNET_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ETHERNET-ERROR-NOT-ETHERNET-CONNECTION:CAPS"></a>NM_DEVICE_ETHERNET_ERROR_NOT_ETHERNET_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of ethernet or PPPoE type</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ETHERNET-ERROR-INVALID-ETHERNET-CONNECTION:CAPS"></a>NM_DEVICE_ETHERNET_ERROR_INVALID_ETHERNET_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the ethernet connection was invalid</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ETHERNET-ERROR-INVALID-DEVICE-MAC:CAPS"></a>NM_DEVICE_ETHERNET_ERROR_INVALID_DEVICE_MAC</p></td>
-<td class="enum_member_description">
-<p>the device's MAC was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-ETHERNET-ERROR-MAC-MISMATCH:CAPS"></a>NM_DEVICE_ETHERNET_ERROR_MAC_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the MACs of the connection and the device mismatched</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-ETHERNET-ERROR:CAPS"></a><h3>NM_DEVICE_ETHERNET_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_ETHERNET_ERROR nm_device_ethernet_error_quark ()
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_ETHERNET_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_ETHERNET_HW_ADDRESS "hw-address"
-</pre>
+<a name="nm-device-ethernet-get-hw-address"></a><h3>nm_device_ethernet_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_ethernet_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
<p>
+Gets the active hardware (MAC) address of the <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the active hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS "perm-hw-address"
-</pre>
+<a name="nm-device-ethernet-get-permanent-hw-address"></a><h3>nm_device_ethernet_get_permanent_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_ethernet_get_permanent_hw_address
+ (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
<p>
+Gets the permanent hardware (MAC) address of the <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the permanent hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-ETHERNET-SPEED:CAPS"></a><h3>NM_DEVICE_ETHERNET_SPEED</h3>
-<pre class="programlisting">#define NM_DEVICE_ETHERNET_SPEED "speed"
-</pre>
+<a name="nm-device-ethernet-get-speed"></a><h3>nm_device_ethernet_get_speed ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_device_ethernet_get_speed (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
<p>
+Gets the speed of the <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the speed of the device</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-ETHERNET-CARRIER:CAPS"></a><h3>NM_DEVICE_ETHERNET_CARRIER</h3>
-<pre class="programlisting">#define NM_DEVICE_ETHERNET_CARRIER "carrier"
-</pre>
+<a name="nm-device-ethernet-get-carrier"></a><h3>nm_device_ethernet_get_carrier ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_ethernet_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a> *device</code></em>);</pre>
<p>
+Whether the device has carrier.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet"><span class="type">NMDeviceEthernet</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceEthernet.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMDeviceEthernet--carrier"></a><h3>The <code class="literal">“carrierâ€</code> property</h3>
-<pre class="programlisting"> “carrier†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Carrier.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceEthernet--carrier"></a><h3>The <code class="literal">"carrier"</code> property</h3>
+<pre class="programlisting"> "carrier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the device has carrier.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceEthernet--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Currently set hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceEthernet--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The active hardware (MAC) address of the device.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceEthernet--perm-hw-address"></a><h3>The <code class="literal">“perm-hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “perm-hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Permanent hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceEthernet--perm-hw-address"></a><h3>The <code class="literal">"perm-hw-address"</code> property</h3>
+<pre class="programlisting"> "perm-hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The permanent hardware (MAC) address of the device.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceEthernet--speed"></a><h3>The <code class="literal">“speedâ€</code> property</h3>
-<pre class="programlisting"> “speed†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Speed.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceEthernet--speed"></a><h3>The <code class="literal">"speed"</code> property</h3>
+<pre class="programlisting"> "speed" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The speed of the device.
+</p>
<p>Default value: 0</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceGeneric.html b/docs/libnm-glib/html/NMDeviceGeneric.html
new file mode 100644
index 000000000..adc23c0b5
--- /dev/null
+++ b/docs/libnm-glib/html/NMDeviceGeneric.html
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceGeneric</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm-glib Reference Manual">
+<link rel="up" href="ch02.html" title="libnm-glib API Reference">
+<link rel="prev" href="NMDeviceTeam.html" title="NMDeviceTeam">
+<link rel="next" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceTeam.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceInfiniband.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceGeneric.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceGeneric.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceGeneric.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceGeneric.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceGeneric.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMDeviceGeneric"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceGeneric.top_of_page"></a>NMDeviceGeneric</span></h2>
+<p>NMDeviceGeneric</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceGeneric.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceGeneric.html#NMDeviceGenericError" title="enum NMDeviceGenericError">NMDeviceGenericError</a>;
+#define <a class="link" href="NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR:CAPS" title="NM_DEVICE_GENERIC_ERROR">NM_DEVICE_GENERIC_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceGeneric.html#nm-device-generic-error-quark" title="nm_device_generic_error_quark ()">nm_device_generic_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceGeneric.html#NM-DEVICE-GENERIC-HW-ADDRESS:CAPS" title="NM_DEVICE_GENERIC_HW_ADDRESS">NM_DEVICE_GENERIC_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceGeneric.html#NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS" title="NM_DEVICE_GENERIC_TYPE_DESCRIPTION">NM_DEVICE_GENERIC_TYPE_DESCRIPTION</a>
+ <a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric-struct" title="NMDeviceGeneric">NMDeviceGeneric</a>;
+ <a class="link" href="NMDeviceGeneric.html#NMDeviceGenericClass" title="NMDeviceGenericClass">NMDeviceGenericClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceGeneric.html#nm-device-generic-new" title="nm_device_generic_new ()">nm_device_generic_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceGeneric.html#nm-device-generic-get-hw-address" title="nm_device_generic_get_hw_address ()">nm_device_generic_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric"><span class="type">NMDeviceGeneric</span></a> *device</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceGeneric.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceGeneric
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceGeneric.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceGeneric implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceGeneric.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric--type-description" title='The "type-description" property'>type-description</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceGeneric.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceGeneric.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDeviceGenericError"></a><h3>enum NMDeviceGenericError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_GENERIC_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION, /*&lt; nick=NotGenericConnection &gt;*/
+ NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME, /*&lt; nick=MissingInterfaceName &gt;*/
+} NMDeviceGenericError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-GENERIC-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_GENERIC_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-GENERIC-ERROR-NOT-GENERIC-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION</code></span></p></td>
+<td>the connection was not of generic type
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-GENERIC-ERROR-MISSING-INTERFACE-NAME:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME</code></span></p></td>
+<td>the connection did not specify the interface name
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-GENERIC-ERROR:CAPS"></a><h3>NM_DEVICE_GENERIC_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_GENERIC_ERROR nm_device_generic_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-generic-error-quark"></a><h3>nm_device_generic_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_generic_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric"><span class="type">NMDeviceGeneric</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric"><span class="type">NMDeviceGeneric</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-GENERIC-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_GENERIC_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_GENERIC_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS"></a><h3>NM_DEVICE_GENERIC_TYPE_DESCRIPTION</h3>
+<pre class="programlisting">#define NM_DEVICE_GENERIC_TYPE_DESCRIPTION "type-description"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceGeneric-struct"></a><h3>NMDeviceGeneric</h3>
+<pre class="programlisting">typedef struct _NMDeviceGeneric NMDeviceGeneric;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceGenericClass"></a><h3>NMDeviceGenericClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceGenericClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-generic-new"></a><h3>nm_device_generic_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_generic_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric"><span class="type">NMDeviceGeneric</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-generic-get-hw-address"></a><h3>nm_device_generic_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_generic_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric"><span class="type">NMDeviceGeneric</span></a> *device</code></em>);</pre>
+<p>
+Gets the hardware address of the <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric"><span class="type">NMDeviceGeneric</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric"><span class="type">NMDeviceGeneric</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMDeviceGeneric.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMDeviceGeneric--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware address of the device.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceGeneric--type-description"></a><h3>The <code class="literal">"type-description"</code> property</h3>
+<pre class="programlisting"> "type-description" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+A description of the specific type of device this is, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+if not known.
+</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceInfiniband.html b/docs/libnm-glib/html/NMDeviceInfiniband.html
index 037438936..e4aed60ab 100644
--- a/docs/libnm-glib/html/NMDeviceInfiniband.html
+++ b/docs/libnm-glib/html/NMDeviceInfiniband.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceInfiniband</title>
+<title>NMDeviceInfiniband</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
-<link rel="prev" href="NMDeviceBridge.html" title="NMDeviceBridge">
+<link rel="prev" href="NMDeviceGeneric.html" title="NMDeviceGeneric">
<link rel="next" href="NMDeviceVlan.html" title="NMDeviceVlan">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceInfiniband.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceInfiniband.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceInfiniband.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceBridge.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceVlan.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceGeneric.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceVlan.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceInfiniband.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceInfiniband.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceInfiniband.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceInfiniband.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceInfiniband.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceInfiniband"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,106 +39,43 @@
<h2><span class="refentrytitle"><a name="NMDeviceInfiniband.top_of_page"></a>NMDeviceInfiniband</span></h2>
<p>NMDeviceInfiniband</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDeviceInfiniband.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-error-quark" title="nm_device_infiniband_error_quark ()">nm_device_infiniband_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-new" title="nm_device_infiniband_new ()">nm_device_infiniband_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address" title="nm_device_infiniband_get_hw_address ()">nm_device_infiniband_get_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-carrier" title="nm_device_infiniband_get_carrier ()">nm_device_infiniband_get_carrier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceInfiniband.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceInfiniband.html#NMDeviceInfinibandError" title="enum NMDeviceInfinibandError">NMDeviceInfinibandError</a>;
+#define <a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR:CAPS" title="NM_DEVICE_INFINIBAND_ERROR">NM_DEVICE_INFINIBAND_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-error-quark" title="nm_device_infiniband_error_quark ()">nm_device_infiniband_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS" title="NM_DEVICE_INFINIBAND_HW_ADDRESS">NM_DEVICE_INFINIBAND_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-CARRIER:CAPS" title="NM_DEVICE_INFINIBAND_CARRIER">NM_DEVICE_INFINIBAND_CARRIER</a>
+ <a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband-struct" title="NMDeviceInfiniband">NMDeviceInfiniband</a>;
+ <a class="link" href="NMDeviceInfiniband.html#NMDeviceInfinibandClass" title="NMDeviceInfinibandClass">NMDeviceInfinibandClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-new" title="nm_device_infiniband_new ()">nm_device_infiniband_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address" title="nm_device_infiniband_get_hw_address ()">nm_device_infiniband_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-carrier" title="nm_device_infiniband_get_carrier ()">nm_device_infiniband_get_carrier</a> (<em class="parameter"><code><a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> *device</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceInfiniband.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--carrier" title="The “carrier†property">carrier</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceInfiniband.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceInfiniband
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceInfiniband.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceInfiniband.html#NMDeviceInfinibandError" title="enum NMDeviceInfinibandError">NMDeviceInfinibandError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR:CAPS" title="NM_DEVICE_INFINIBAND_ERROR">NM_DEVICE_INFINIBAND_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS" title="NM_DEVICE_INFINIBAND_HW_ADDRESS">NM_DEVICE_INFINIBAND_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-CARRIER:CAPS" title="NM_DEVICE_INFINIBAND_CARRIER">NM_DEVICE_INFINIBAND_CARRIER</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceInfiniband.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceInfiniband implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDeviceInfiniband.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceInfiniband
+<a name="NMDeviceInfiniband.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--carrier" title='The "carrier" property'>carrier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
</pre>
</div>
<div class="refsect1">
@@ -139,207 +84,225 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDeviceInfiniband.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-device-infiniband-error-quark"></a><h3>nm_device_infiniband_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_infiniband_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.13.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
+<a name="NMDeviceInfiniband.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-device-infiniband-new"></a><h3>nm_device_infiniband_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_infiniband_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.13.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceInfinibandError"></a><h3>enum NMDeviceInfinibandError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_INFINIBAND_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_INFINIBAND_ERROR_NOT_INFINIBAND_CONNECTION, /*&lt; nick=NotInfinibandConnection &gt;*/
+ NM_DEVICE_INFINIBAND_ERROR_INVALID_INFINIBAND_CONNECTION, /*&lt; nick=InvalidInfinibandConnection &gt;*/
+ NM_DEVICE_INFINIBAND_ERROR_INVALID_DEVICE_MAC, /*&lt; nick=InvalidDeviceMac &gt;*/
+ NM_DEVICE_INFINIBAND_ERROR_MAC_MISMATCH, /*&lt; nick=MacMismatch &gt;*/
+} NMDeviceInfinibandError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-INFINIBAND-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_INFINIBAND_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-INFINIBAND-ERROR-NOT-INFINIBAND-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_INFINIBAND_ERROR_NOT_INFINIBAND_CONNECTION</code></span></p></td>
+<td>the connection was not of InfiniBand type
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-INFINIBAND-ERROR-INVALID-INFINIBAND-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_INFINIBAND_ERROR_INVALID_INFINIBAND_CONNECTION</code></span></p></td>
+<td>the InfiniBand connection was invalid
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-INFINIBAND-ERROR-INVALID-DEVICE-MAC:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_INFINIBAND_ERROR_INVALID_DEVICE_MAC</code></span></p></td>
+<td>the device's MAC was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-INFINIBAND-ERROR-MAC-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_INFINIBAND_ERROR_MAC_MISMATCH</code></span></p></td>
+<td>the MACs of the connection and the device mismatched
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.13.8.3.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-INFINIBAND-ERROR:CAPS"></a><h3>NM_DEVICE_INFINIBAND_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_INFINIBAND_ERROR nm_device_infiniband_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-infiniband-get-hw-address"></a><h3>nm_device_infiniband_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_infiniband_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> *device</code></em>);</pre>
-<p>Gets the hardware (MAC) address of the <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.13.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-infiniband-error-quark"></a><h3>nm_device_infiniband_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_infiniband_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.13.8.4.6"></a><h4>Returns</h4>
-<p> the hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-infiniband-get-carrier"></a><h3>nm_device_infiniband_get_carrier ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_infiniband_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> *device</code></em>);</pre>
-<p>Whether the device has carrier.</p>
-<div class="refsect3">
-<a name="id-1.3.13.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_INFINIBAND_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_INFINIBAND_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.13.8.5.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-INFINIBAND-CARRIER:CAPS"></a><h3>NM_DEVICE_INFINIBAND_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_INFINIBAND_CARRIER "carrier"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceInfiniband-struct"></a><h3>NMDeviceInfiniband</h3>
+<pre class="programlisting">typedef struct _NMDeviceInfiniband NMDeviceInfiniband;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceInfinibandClass"></a><h3>NMDeviceInfinibandClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceInfinibandClass;
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceInfiniband.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMDeviceInfinibandError"></a><h3>enum NMDeviceInfinibandError</h3>
-<div class="refsect3">
-<a name="id-1.3.13.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-infiniband-new"></a><h3>nm_device_infiniband_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_infiniband_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-INFINIBAND-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_INFINIBAND_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-INFINIBAND-ERROR-NOT-INFINIBAND-CONNECTION:CAPS"></a>NM_DEVICE_INFINIBAND_ERROR_NOT_INFINIBAND_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of InfiniBand type</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-INFINIBAND-ERROR-INVALID-INFINIBAND-CONNECTION:CAPS"></a>NM_DEVICE_INFINIBAND_ERROR_INVALID_INFINIBAND_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the InfiniBand connection was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-INFINIBAND-ERROR-INVALID-DEVICE-MAC:CAPS"></a>NM_DEVICE_INFINIBAND_ERROR_INVALID_DEVICE_MAC</p></td>
-<td class="enum_member_description">
-<p>the device's MAC was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-INFINIBAND-ERROR-MAC-MISMATCH:CAPS"></a>NM_DEVICE_INFINIBAND_ERROR_MAC_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the MACs of the connection and the device mismatched</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-INFINIBAND-ERROR:CAPS"></a><h3>NM_DEVICE_INFINIBAND_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_INFINIBAND_ERROR nm_device_infiniband_error_quark ()
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_INFINIBAND_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_INFINIBAND_HW_ADDRESS "hw-address"
-</pre>
+<a name="nm-device-infiniband-get-hw-address"></a><h3>nm_device_infiniband_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_infiniband_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> *device</code></em>);</pre>
<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a>
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-INFINIBAND-CARRIER:CAPS"></a><h3>NM_DEVICE_INFINIBAND_CARRIER</h3>
-<pre class="programlisting">#define NM_DEVICE_INFINIBAND_CARRIER "carrier"
-</pre>
+<a name="nm-device-infiniband-get-carrier"></a><h3>nm_device_infiniband_get_carrier ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_infiniband_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a> *device</code></em>);</pre>
<p>
+Whether the device has carrier.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"><span class="type">NMDeviceInfiniband</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceInfiniband.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMDeviceInfiniband--carrier"></a><h3>The <code class="literal">“carrierâ€</code> property</h3>
-<pre class="programlisting"> “carrier†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Carrier.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceInfiniband--carrier"></a><h3>The <code class="literal">"carrier"</code> property</h3>
+<pre class="programlisting"> "carrier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the device has carrier.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceInfiniband--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Currently set hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceInfiniband--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceModem.html b/docs/libnm-glib/html/NMDeviceModem.html
index bf7038a8b..d5fb1cdf8 100644
--- a/docs/libnm-glib/html/NMDeviceModem.html
+++ b/docs/libnm-glib/html/NMDeviceModem.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceModem</title>
+<title>NMDeviceModem</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceWifi.html" title="NMDeviceWifi">
<link rel="next" href="NMDeviceBt.html" title="NMDeviceBt">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceModem.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceModem.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceModem.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceWifi.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceBt.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceWifi.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceBt.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceModem.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceModem.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceModem.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceModem.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceModem.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceModem"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,98 +39,43 @@
<h2><span class="refentrytitle"><a name="NMDeviceModem.top_of_page"></a>NMDeviceModem</span></h2>
<p>NMDeviceModem</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDeviceModem.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceModem.html#nm-device-modem-error-quark" title="nm_device_modem_error_quark ()">nm_device_modem_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMDeviceModemCapabilities</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceModem.html#nm-device-modem-get-modem-capabilities" title="nm_device_modem_get_modem_capabilities ()">nm_device_modem_get_modem_capabilities</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMDeviceModemCapabilities</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceModem.html#nm-device-modem-get-current-capabilities" title="nm_device_modem_get_current_capabilities ()">nm_device_modem_get_current_capabilities</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceModem.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceModem.html#NMDeviceModemError" title="enum NMDeviceModemError">NMDeviceModemError</a>;
+#define <a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-ERROR:CAPS" title="NM_DEVICE_MODEM_ERROR">NM_DEVICE_MODEM_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceModem.html#nm-device-modem-error-quark" title="nm_device_modem_error_quark ()">nm_device_modem_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS" title="NM_DEVICE_MODEM_MODEM_CAPABILITIES">NM_DEVICE_MODEM_MODEM_CAPABILITIES</a>
+#define <a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS" title="NM_DEVICE_MODEM_CURRENT_CAPABILITIES">NM_DEVICE_MODEM_CURRENT_CAPABILITIES</a>
+ <a class="link" href="NMDeviceModem.html#NMDeviceModem-struct" title="NMDeviceModem">NMDeviceModem</a>;
+ <a class="link" href="NMDeviceModem.html#NMDeviceModemClass" title="NMDeviceModemClass">NMDeviceModemClass</a>;
+<span class="returnvalue">NMDeviceModemCapabilities</span> <a class="link" href="NMDeviceModem.html#nm-device-modem-get-modem-capabilities" title="nm_device_modem_get_modem_capabilities ()">nm_device_modem_get_modem_capabilities</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);
+<span class="returnvalue">NMDeviceModemCapabilities</span> <a class="link" href="NMDeviceModem.html#nm-device-modem-get-current-capabilities" title="nm_device_modem_get_current_capabilities ()">nm_device_modem_get_current_capabilities</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceModem.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceModem.html#NMDeviceModem--current-capabilities" title="The “current-capabilities†property">current-capabilities</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceModem.html#NMDeviceModem--modem-capabilities" title="The “modem-capabilities†property">modem-capabilities</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceModem.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceModem
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceModem.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceModem.html#NMDeviceModemError" title="enum NMDeviceModemError">NMDeviceModemError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-ERROR:CAPS" title="NM_DEVICE_MODEM_ERROR">NM_DEVICE_MODEM_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS" title="NM_DEVICE_MODEM_MODEM_CAPABILITIES">NM_DEVICE_MODEM_MODEM_CAPABILITIES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS" title="NM_DEVICE_MODEM_CURRENT_CAPABILITIES">NM_DEVICE_MODEM_CURRENT_CAPABILITIES</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceModem.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceModem implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDeviceModem.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceModem
+<a name="NMDeviceModem.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceModem.html#NMDeviceModem--current-capabilities" title='The "current-capabilities" property'>current-capabilities</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDeviceModem.html#NMDeviceModem--modem-capabilities" title='The "modem-capabilities" property'>modem-capabilities</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
</pre>
</div>
<div class="refsect1">
@@ -131,125 +84,45 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDeviceModem.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-device-modem-error-quark"></a><h3>nm_device_modem_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_modem_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.7.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-modem-get-modem-capabilities"></a><h3>nm_device_modem_get_modem_capabilities ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMDeviceModemCapabilities</span>
-nm_device_modem_get_modem_capabilities
- (<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);</pre>
-<p>Returns a bitfield of the generic access technology families the modem
-supports. Not all capabilities are available concurrently however; some
-may require a firmware reload or reinitialization.</p>
-<div class="refsect3">
-<a name="id-1.3.7.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.7.8.3.6"></a><h4>Returns</h4>
-<p> the generic access technology families the modem supports</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-modem-get-current-capabilities"></a><h3>nm_device_modem_get_current_capabilities ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMDeviceModemCapabilities</span>
-nm_device_modem_get_current_capabilities
- (<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);</pre>
-<p>Returns a bitfield of the generic access technology families the modem
-supports without a firmware reload or reinitialization. This value
-represents the network types the modem can immediately connect to.</p>
-<div class="refsect3">
-<a name="id-1.3.7.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.7.8.4.6"></a><h4>Returns</h4>
-<p> the generic access technology families the modem supports without
-a firmware reload or other reinitialization</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceModem.other_details"></a><h2>Types and Values</h2>
+<a name="NMDeviceModem.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NMDeviceModemError"></a><h3>enum NMDeviceModemError</h3>
-<div class="refsect3">
-<a name="id-1.3.7.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_MODEM_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_MODEM_ERROR_NOT_MODEM_CONNECTION, /*&lt; nick=NotModemConnection &gt;*/
+ NM_DEVICE_MODEM_ERROR_INVALID_MODEM_CONNECTION, /*&lt; nick=InvalidModemConnection &gt;*/
+ NM_DEVICE_MODEM_ERROR_MISSING_DEVICE_CAPS, /*&lt; nick=MissingDeviceCaps &gt;*/
+} NMDeviceModemError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-MODEM-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_MODEM_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-DEVICE-MODEM-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-MODEM-ERROR-NOT-MODEM-CONNECTION:CAPS"></a>NM_DEVICE_MODEM_ERROR_NOT_MODEM_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of modem type</p>
+<td><p><a name="NM-DEVICE-MODEM-ERROR-NOT-MODEM-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_ERROR_NOT_MODEM_CONNECTION</code></span></p></td>
+<td>the connection was not of modem type
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-MODEM-ERROR-INVALID-MODEM-CONNECTION:CAPS"></a>NM_DEVICE_MODEM_ERROR_INVALID_MODEM_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the modem connection was invalid</p>
+<td><p><a name="NM-DEVICE-MODEM-ERROR-INVALID-MODEM-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_ERROR_INVALID_MODEM_CONNECTION</code></span></p></td>
+<td>the modem connection was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-MODEM-ERROR-MISSING-DEVICE-CAPS"></a>NM_DEVICE_MODEM_ERROR_MISSING_DEVICE_CAPS</p></td>
-<td class="enum_member_description">
-<p>the device missed required capabilities</p>
+<td><p><a name="NM-DEVICE-MODEM-ERROR-MISSING-DEVICE-CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_ERROR_MISSING_DEVICE_CAPS</code></span></p></td>
+<td>the device missed required capabilities
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-DEVICE-MODEM-ERROR:CAPS"></a><h3>NM_DEVICE_MODEM_ERROR</h3>
@@ -260,6 +133,24 @@ a firmware reload or other reinitialization</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-device-modem-error-quark"></a><h3>nm_device_modem_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_modem_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_MODEM_MODEM_CAPABILITIES</h3>
<pre class="programlisting">#define NM_DEVICE_MODEM_MODEM_CAPABILITIES "modem-capabilities"
</pre>
@@ -274,28 +165,116 @@ a firmware reload or other reinitialization</p>
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceModem-struct"></a><h3>NMDeviceModem</h3>
+<pre class="programlisting">typedef struct _NMDeviceModem NMDeviceModem;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceModemClass"></a><h3>NMDeviceModemClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceModemClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-modem-get-modem-capabilities"></a><h3>nm_device_modem_get_modem_capabilities ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMDeviceModemCapabilities</span> nm_device_modem_get_modem_capabilities
+ (<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);</pre>
+<p>
+Returns a bitfield of the generic access technology families the modem
+supports. Not all capabilities are available concurrently however; some
+may require a firmware reload or reinitialization.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the generic access technology families the modem supports</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-modem-get-current-capabilities"></a><h3>nm_device_modem_get_current_capabilities ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMDeviceModemCapabilities</span> nm_device_modem_get_current_capabilities
+ (<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);</pre>
+<p>
+Returns a bitfield of the generic access technology families the modem
+supports without a firmware reload or reinitialization. This value
+represents the network types the modem can immediately connect to.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the generic access technology families the modem supports without
+a firmware reload or other reinitialization</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<div class="refsect1">
<a name="NMDeviceModem.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMDeviceModem--current-capabilities"></a><h3>The <code class="literal">“current-capabilitiesâ€</code> property</h3>
-<pre class="programlisting"> “current-capabilities†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Current capabilities.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceModem--current-capabilities"></a><h3>The <code class="literal">"current-capabilities"</code> property</h3>
+<pre class="programlisting"> "current-capabilities" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The generic family of access technologies the modem currently supports
+without a firmware reload or reinitialization.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceModem--modem-capabilities"></a><h3>The <code class="literal">“modem-capabilitiesâ€</code> property</h3>
-<pre class="programlisting"> “modem-capabilities†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Modem capabilities.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceModem--modem-capabilities"></a><h3>The <code class="literal">"modem-capabilities"</code> property</h3>
+<pre class="programlisting"> "modem-capabilities" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The generic family of access technologies the modem supports. Not all
+capabilities are available at the same time however; some modems require
+a firmware reload or other reinitialization to switch between eg
+CDMA/EVDO and GSM/UMTS.
+</p>
<p>Default value: 0</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceOlpcMesh.html b/docs/libnm-glib/html/NMDeviceOlpcMesh.html
index 8fc759f19..482b949bc 100644
--- a/docs/libnm-glib/html/NMDeviceOlpcMesh.html
+++ b/docs/libnm-glib/html/NMDeviceOlpcMesh.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceOlpcMesh</title>
+<title>NMDeviceOlpcMesh</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceVlan.html" title="NMDeviceVlan">
<link rel="next" href="NMWimaxNsp.html" title="NMWimaxNsp">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceOlpcMesh.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceOlpcMesh.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceOlpcMesh.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceVlan.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMWimaxNsp.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceVlan.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMWimaxNsp.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceOlpcMesh.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceOlpcMesh.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceOlpcMesh.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceOlpcMesh.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceOlpcMesh.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceOlpcMesh"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,124 +39,47 @@
<h2><span class="refentrytitle"><a name="NMDeviceOlpcMesh.top_of_page"></a>NMDeviceOlpcMesh</span></h2>
<p>NMDeviceOlpcMesh</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMDeviceOlpcMesh.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark" title="nm_device_olpc_mesh_error_quark ()">nm_device_olpc_mesh_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new" title="nm_device_olpc_mesh_new ()">nm_device_olpc_mesh_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address" title="nm_device_olpc_mesh_get_hw_address ()">nm_device_olpc_mesh_get_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="returnvalue">NMDeviceWifi</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion" title="nm_device_olpc_mesh_get_companion ()">nm_device_olpc_mesh_get_companion</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel" title="nm_device_olpc_mesh_get_active_channel ()">nm_device_olpc_mesh_get_active_channel</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceOlpcMesh.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshError" title="enum NMDeviceOlpcMeshError">NMDeviceOlpcMeshError</a>;
+#define <a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR:CAPS" title="NM_DEVICE_OLPC_MESH_ERROR">NM_DEVICE_OLPC_MESH_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark" title="nm_device_olpc_mesh_error_quark ()">nm_device_olpc_mesh_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS" title="NM_DEVICE_OLPC_MESH_HW_ADDRESS">NM_DEVICE_OLPC_MESH_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-COMPANION:CAPS" title="NM_DEVICE_OLPC_MESH_COMPANION">NM_DEVICE_OLPC_MESH_COMPANION</a>
+#define <a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS" title="NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL">NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL</a>
+ <a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>;
+ <a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshClass" title="NMDeviceOlpcMeshClass">NMDeviceOlpcMeshClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new" title="nm_device_olpc_mesh_new ()">nm_device_olpc_mesh_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address" title="nm_device_olpc_mesh_get_hw_address ()">nm_device_olpc_mesh_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);
+<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="returnvalue">NMDeviceWifi</span></a> * <a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion" title="nm_device_olpc_mesh_get_companion ()">nm_device_olpc_mesh_get_companion</a> (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel" title="nm_device_olpc_mesh_get_active_channel ()">nm_device_olpc_mesh_get_active_channel</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceOlpcMesh.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel" title="The “active-channel†property">active-channel</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion" title="The “companion†property">companion</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceOlpcMesh.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceOlpcMesh
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceOlpcMesh.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshError" title="enum NMDeviceOlpcMeshError">NMDeviceOlpcMeshError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR:CAPS" title="NM_DEVICE_OLPC_MESH_ERROR">NM_DEVICE_OLPC_MESH_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS" title="NM_DEVICE_OLPC_MESH_HW_ADDRESS">NM_DEVICE_OLPC_MESH_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-COMPANION:CAPS" title="NM_DEVICE_OLPC_MESH_COMPANION">NM_DEVICE_OLPC_MESH_COMPANION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS" title="NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL">NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceOlpcMesh.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceOlpcMesh implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMDeviceOlpcMesh.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceOlpcMesh
+<a name="NMDeviceOlpcMesh.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel" title='The "active-channel" property'>active-channel</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion" title='The "companion" property'>companion</a>" <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>* : Read
+ "<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
</pre>
</div>
<div class="refsect1">
@@ -157,236 +88,255 @@
</p>
</div>
<div class="refsect1">
-<a name="NMDeviceOlpcMesh.functions_details"></a><h2>Functions</h2>
+<a name="NMDeviceOlpcMesh.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-device-olpc-mesh-error-quark"></a><h3>nm_device_olpc_mesh_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_olpc_mesh_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.15.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-olpc-mesh-new"></a><h3>nm_device_olpc_mesh_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_olpc_mesh_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.15.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceOlpcMeshError"></a><h3>enum NMDeviceOlpcMeshError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_OLPC_MESH_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_OLPC_MESH_ERROR_NOT_OLPC_MESH_CONNECTION, /*&lt; nick=NotOlpcMeshConnection &gt;*/
+ NM_DEVICE_OLPC_MESH_ERROR_INVALID_OLPC_MESH_CONNECTION, /*&lt; nick=InvalidOlpcMeshConnection &gt;*/
+} NMDeviceOlpcMeshError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-OLPC-MESH-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_OLPC_MESH_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-OLPC-MESH-ERROR-NOT-OLPC-MESH-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_OLPC_MESH_ERROR_NOT_OLPC_MESH_CONNECTION</code></span></p></td>
+<td>the connection was not of Olpc Mesh type
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-DEVICE-OLPC-MESH-ERROR-INVALID-OLPC-MESH-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_OLPC_MESH_ERROR_INVALID_OLPC_MESH_CONNECTION</code></span></p></td>
+<td>the Olpc Mesh connection was invalid
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.15.8.3.6"></a><h4>Returns</h4>
-<p> a new OlpcMesh device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-olpc-mesh-get-hw-address"></a><h3>nm_device_olpc_mesh_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_olpc_mesh_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);</pre>
-<p>Gets the hardware (MAC) address of the <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.15.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.15.8.4.6"></a><h4>Returns</h4>
-<p> the hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
+<a name="NM-DEVICE-OLPC-MESH-ERROR:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_ERROR nm_device_olpc_mesh_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-olpc-mesh-get-companion"></a><h3>nm_device_olpc_mesh_get_companion ()</h3>
-<pre class="programlisting"><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="returnvalue">NMDeviceWifi</span></a> *
-nm_device_olpc_mesh_get_companion (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);</pre>
-<p>Gets the companion device of the <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.15.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-olpc-mesh-error-quark"></a><h3>nm_device_olpc_mesh_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_olpc_mesh_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.15.8.5.6"></a><h4>Returns</h4>
-<p> the companion of the device of <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-olpc-mesh-get-active-channel"></a><h3>nm_device_olpc_mesh_get_active_channel ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_device_olpc_mesh_get_active_channel
- (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);</pre>
-<p>Returns the active channel of the <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> device.</p>
-<div class="refsect3">
-<a name="id-1.3.15.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-OLPC-MESH-COMPANION:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_COMPANION</h3>
+<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_COMPANION "companion"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.15.8.6.6"></a><h4>Returns</h4>
-<p> active channel of the device</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL</h3>
+<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL "active-channel"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceOlpcMesh-struct"></a><h3>NMDeviceOlpcMesh</h3>
+<pre class="programlisting">typedef struct _NMDeviceOlpcMesh NMDeviceOlpcMesh;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceOlpcMeshClass"></a><h3>NMDeviceOlpcMeshClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceOlpcMeshClass;
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceOlpcMesh.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMDeviceOlpcMeshError"></a><h3>enum NMDeviceOlpcMeshError</h3>
-<div class="refsect3">
-<a name="id-1.3.15.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-olpc-mesh-new"></a><h3>nm_device_olpc_mesh_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_olpc_mesh_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-OLPC-MESH-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_OLPC_MESH_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-OLPC-MESH-ERROR-NOT-OLPC-MESH-CONNECTION:CAPS"></a>NM_DEVICE_OLPC_MESH_ERROR_NOT_OLPC_MESH_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of Olpc Mesh type</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-OLPC-MESH-ERROR-INVALID-OLPC-MESH-CONNECTION:CAPS"></a>NM_DEVICE_OLPC_MESH_ERROR_INVALID_OLPC_MESH_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the Olpc Mesh connection was invalid</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new OlpcMesh device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-OLPC-MESH-ERROR:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_ERROR nm_device_olpc_mesh_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_HW_ADDRESS "hw-address"
-</pre>
+<a name="nm-device-olpc-mesh-get-hw-address"></a><h3>nm_device_olpc_mesh_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_olpc_mesh_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);</pre>
<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-OLPC-MESH-COMPANION:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_COMPANION</h3>
-<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_COMPANION "companion"
-</pre>
+<a name="nm-device-olpc-mesh-get-companion"></a><h3>nm_device_olpc_mesh_get_companion ()</h3>
+<pre class="programlisting"><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="returnvalue">NMDeviceWifi</span></a> * nm_device_olpc_mesh_get_companion (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);</pre>
<p>
+Gets the companion device of the <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the companion of the device of <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL</h3>
-<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL "active-channel"
-</pre>
+<a name="nm-device-olpc-mesh-get-active-channel"></a><h3>nm_device_olpc_mesh_get_active_channel ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_device_olpc_mesh_get_active_channel
+ (<em class="parameter"><code><a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> *device</code></em>);</pre>
<p>
+Returns the active channel of the <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a> device.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"><span class="type">NMDeviceOlpcMesh</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>active channel of the device</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceOlpcMesh.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMDeviceOlpcMesh--active-channel"></a><h3>The <code class="literal">“active-channelâ€</code> property</h3>
-<pre class="programlisting"> “active-channel†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Active channel.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceOlpcMesh--active-channel"></a><h3>The <code class="literal">"active-channel"</code> property</h3>
+<pre class="programlisting"> "active-channel" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The device's active channel.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceOlpcMesh--companion"></a><h3>The <code class="literal">“companionâ€</code> property</h3>
-<pre class="programlisting"> “companion†<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *</pre>
-<p>Companion device.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceOlpcMesh--companion"></a><h3>The <code class="literal">"companion"</code> property</h3>
+<pre class="programlisting"> "companion" <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>* : Read</pre>
+<p>
+The companion device.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceOlpcMesh--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceOlpcMesh--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceTeam.html b/docs/libnm-glib/html/NMDeviceTeam.html
new file mode 100644
index 000000000..4557c4b95
--- /dev/null
+++ b/docs/libnm-glib/html/NMDeviceTeam.html
@@ -0,0 +1,354 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceTeam</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm-glib Reference Manual">
+<link rel="up" href="ch02.html" title="libnm-glib API Reference">
+<link rel="prev" href="NMDeviceBridge.html" title="NMDeviceBridge">
+<link rel="next" href="NMDeviceGeneric.html" title="NMDeviceGeneric">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceBridge.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceGeneric.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceTeam.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceTeam.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceTeam.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceTeam.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceTeam.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMDeviceTeam"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceTeam.top_of_page"></a>NMDeviceTeam</span></h2>
+<p>NMDeviceTeam</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceTeam.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceTeam.html#NMDeviceTeamError" title="enum NMDeviceTeamError">NMDeviceTeamError</a>;
+#define <a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR:CAPS" title="NM_DEVICE_TEAM_ERROR">NM_DEVICE_TEAM_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceTeam.html#nm-device-team-error-quark" title="nm_device_team_error_quark ()">nm_device_team_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-HW-ADDRESS:CAPS" title="NM_DEVICE_TEAM_HW_ADDRESS">NM_DEVICE_TEAM_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-CARRIER:CAPS" title="NM_DEVICE_TEAM_CARRIER">NM_DEVICE_TEAM_CARRIER</a>
+#define <a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-SLAVES:CAPS" title="NM_DEVICE_TEAM_SLAVES">NM_DEVICE_TEAM_SLAVES</a>
+ <a class="link" href="NMDeviceTeam.html#NMDeviceTeam-struct" title="NMDeviceTeam">NMDeviceTeam</a>;
+ <a class="link" href="NMDeviceTeam.html#NMDeviceTeamClass" title="NMDeviceTeamClass">NMDeviceTeamClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceTeam.html#nm-device-team-new" title="nm_device_team_new ()">nm_device_team_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceTeam.html#nm-device-team-get-hw-address" title="nm_device_team_get_hw_address ()">nm_device_team_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceTeam.html#nm-device-team-get-carrier" title="nm_device_team_get_carrier ()">nm_device_team_get_carrier</a> (<em class="parameter"><code><a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> *device</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMDeviceTeam.html#nm-device-team-get-slaves" title="nm_device_team_get_slaves ()">nm_device_team_get_slaves</a> (<em class="parameter"><code><a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> *device</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceTeam.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceTeam
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceTeam.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceTeam implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceTeam.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceTeam.html#NMDeviceTeam--carrier" title='The "carrier" property'>carrier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDeviceTeam.html#NMDeviceTeam--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceTeam.html#NMDeviceTeam--slaves" title='The "slaves" property'>slaves</a>" <span class="type">NMObjectArray</span>* : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceTeam.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceTeam.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDeviceTeamError"></a><h3>enum NMDeviceTeamError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_TEAM_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION, /*&lt; nick=NotTeamConnection &gt;*/
+ NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION, /*&lt; nick=InvalidTeamConnection &gt;*/
+ NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH, /*&lt; nick=InterfaceMismatch &gt;*/
+} NMDeviceTeamError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-TEAM-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TEAM_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TEAM-ERROR-NOT-TEAM-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION</code></span></p></td>
+<td>the connection was not of team type
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TEAM-ERROR-INVALID-TEAM-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION</code></span></p></td>
+<td>the team connection was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TEAM-ERROR-INTERFACE-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH</code></span></p></td>
+<td>the interfaces of the connection and the device mismatched
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-TEAM-ERROR:CAPS"></a><h3>NM_DEVICE_TEAM_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_TEAM_ERROR nm_device_team_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-team-error-quark"></a><h3>nm_device_team_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_team_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-TEAM-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_TEAM_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_TEAM_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-TEAM-CARRIER:CAPS"></a><h3>NM_DEVICE_TEAM_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_TEAM_CARRIER "carrier"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-TEAM-SLAVES:CAPS"></a><h3>NM_DEVICE_TEAM_SLAVES</h3>
+<pre class="programlisting">#define NM_DEVICE_TEAM_SLAVES "slaves"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceTeam-struct"></a><h3>NMDeviceTeam</h3>
+<pre class="programlisting">typedef struct _NMDeviceTeam NMDeviceTeam;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceTeamClass"></a><h3>NMDeviceTeamClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceTeamClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-team-new"></a><h3>nm_device_team_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_team_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-team-get-hw-address"></a><h3>nm_device_team_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_team_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> *device</code></em>);</pre>
+<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-team-get-carrier"></a><h3>nm_device_team_get_carrier ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_team_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> *device</code></em>);</pre>
+<p>
+Whether the device has carrier.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-team-get-slaves"></a><h3>nm_device_team_get_slaves ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_device_team_get_slaves (<em class="parameter"><code><a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a> *device</code></em>);</pre>
+<p>
+Gets the devices currently enslaved to <em class="parameter"><code>device</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam"><span class="type">NMDeviceTeam</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
+<a href="NMDevice.html"><span class="type">NMDevices</span></a> that are slaves of <em class="parameter"><code>device</code></em>. This is the internal
+copy used by the device, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.Device]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMDeviceTeam.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMDeviceTeam--carrier"></a><h3>The <code class="literal">"carrier"</code> property</h3>
+<pre class="programlisting"> "carrier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+Whether the device has carrier.
+</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceTeam--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceTeam--slaves"></a><h3>The <code class="literal">"slaves"</code> property</h3>
+<pre class="programlisting"> "slaves" <span class="type">NMObjectArray</span>* : Read</pre>
+<p>
+The devices (<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>) enslaved to the team device.
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceVlan.html b/docs/libnm-glib/html/NMDeviceVlan.html
index b7952355f..89e4a9ce3 100644
--- a/docs/libnm-glib/html/NMDeviceVlan.html
+++ b/docs/libnm-glib/html/NMDeviceVlan.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceVlan</title>
+<title>NMDeviceVlan</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">
<link rel="next" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceVlan.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceVlan.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceVlan.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceInfiniband.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceOlpcMesh.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceInfiniband.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceOlpcMesh.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceVlan.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceVlan.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceVlan.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceVlan.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceVlan.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceVlan"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,368 +39,312 @@
<h2><span class="refentrytitle"><a name="NMDeviceVlan.top_of_page"></a>NMDeviceVlan</span></h2>
<p>NMDeviceVlan</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceVlan.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceVlan.html#NMDeviceVlanError" title="enum NMDeviceVlanError">NMDeviceVlanError</a>;
+#define <a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR:CAPS" title="NM_DEVICE_VLAN_ERROR">NM_DEVICE_VLAN_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceVlan.html#nm-device-vlan-error-quark" title="nm_device_vlan_error_quark ()">nm_device_vlan_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-HW-ADDRESS:CAPS" title="NM_DEVICE_VLAN_HW_ADDRESS">NM_DEVICE_VLAN_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-CARRIER:CAPS" title="NM_DEVICE_VLAN_CARRIER">NM_DEVICE_VLAN_CARRIER</a>
+#define <a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS" title="NM_DEVICE_VLAN_VLAN_ID">NM_DEVICE_VLAN_VLAN_ID</a>
+ <a class="link" href="NMDeviceVlan.html#NMDeviceVlan-struct" title="NMDeviceVlan">NMDeviceVlan</a>;
+ <a class="link" href="NMDeviceVlan.html#NMDeviceVlanClass" title="NMDeviceVlanClass">NMDeviceVlanClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceVlan.html#nm-device-vlan-new" title="nm_device_vlan_new ()">nm_device_vlan_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-hw-address" title="nm_device_vlan_get_hw_address ()">nm_device_vlan_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-carrier" title="nm_device_vlan_get_carrier ()">nm_device_vlan_get_carrier</a> (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-vlan-id" title="nm_device_vlan_get_vlan_id ()">nm_device_vlan_get_vlan_id</a> (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceVlan.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceVlan
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceVlan.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceVlan implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceVlan.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--carrier" title='The "carrier" property'>carrier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--vlan-id" title='The "vlan-id" property'>vlan-id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceVlan.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
<div class="refsect1">
-<a name="NMDeviceVlan.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceVlan.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDeviceVlanError"></a><h3>enum NMDeviceVlanError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_VLAN_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_VLAN_ERROR_NOT_VLAN_CONNECTION, /*&lt; nick=NotVlanConnection &gt;*/
+ NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION, /*&lt; nick=InvalidVlanConnection &gt;*/
+ NM_DEVICE_VLAN_ERROR_ID_MISMATCH, /*&lt; nick=IdMismatch &gt;*/
+ NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH, /*&lt; nick=InterfaceMismatch &gt;*/
+ NM_DEVICE_VLAN_ERROR_MAC_MISMATCH, /*&lt; nick=MacMismatch &gt;*/
+} NMDeviceVlanError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-error-quark" title="nm_device_vlan_error_quark ()">nm_device_vlan_error_quark</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-VLAN-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_VLAN_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-new" title="nm_device_vlan_new ()">nm_device_vlan_new</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-VLAN-ERROR-NOT-VLAN-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_VLAN_ERROR_NOT_VLAN_CONNECTION</code></span></p></td>
+<td>the connection was not of VLAN type
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-hw-address" title="nm_device_vlan_get_hw_address ()">nm_device_vlan_get_hw_address</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-VLAN-ERROR-INVALID-VLAN-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION</code></span></p></td>
+<td>the VLAN connection was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-carrier" title="nm_device_vlan_get_carrier ()">nm_device_vlan_get_carrier</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-VLAN-ERROR-ID-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_VLAN_ERROR_ID_MISMATCH</code></span></p></td>
+<td>the VLAN identifiers of the connection and the device mismatched
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+<td><p><a name="NM-DEVICE-VLAN-ERROR-INTERFACE-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH</code></span></p></td>
+<td>the interfaces of the connection and the device mismatched
</td>
-<td class="function_name">
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-vlan-id" title="nm_device_vlan_get_vlan_id ()">nm_device_vlan_get_vlan_id</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceVlan.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceVlan.html#NMDeviceVlan--carrier" title="The “carrier†property">carrier</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceVlan.html#NMDeviceVlan--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceVlan.html#NMDeviceVlan--vlan-id" title="The “vlan-id†property">vlan-id</a></td>
-<td class="property_flags">Read</td>
+<td><p><a name="NM-DEVICE-VLAN-ERROR-MAC-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_VLAN_ERROR_MAC_MISMATCH</code></span></p></td>
+<td>the MACs of the connection and the device mismatched
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceVlan.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-VLAN-ERROR:CAPS"></a><h3>NM_DEVICE_VLAN_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_VLAN_ERROR nm_device_vlan_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-vlan-error-quark"></a><h3>nm_device_vlan_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_vlan_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceVlan.html#NMDeviceVlanError" title="enum NMDeviceVlanError">NMDeviceVlanError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR:CAPS" title="NM_DEVICE_VLAN_ERROR">NM_DEVICE_VLAN_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-HW-ADDRESS:CAPS" title="NM_DEVICE_VLAN_HW_ADDRESS">NM_DEVICE_VLAN_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-CARRIER:CAPS" title="NM_DEVICE_VLAN_CARRIER">NM_DEVICE_VLAN_CARRIER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS" title="NM_DEVICE_VLAN_VLAN_ID">NM_DEVICE_VLAN_VLAN_ID</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceVlan.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceVlan
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-VLAN-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_VLAN_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_VLAN_HW_ADDRESS "hw-address"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceVlan.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-VLAN-CARRIER:CAPS"></a><h3>NM_DEVICE_VLAN_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_VLAN_CARRIER "carrier"
+</pre>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceVlan.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="nm-device-vlan-error-quark"></a><h3>nm_device_vlan_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_vlan_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.14.8.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> errors.</p>
-<p></p>
+<a name="NM-DEVICE-VLAN-VLAN-ID:CAPS"></a><h3>NM_DEVICE_VLAN_VLAN_ID</h3>
+<pre class="programlisting">#define NM_DEVICE_VLAN_VLAN_ID "vlan-id"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceVlan-struct"></a><h3>NMDeviceVlan</h3>
+<pre class="programlisting">typedef struct _NMDeviceVlan NMDeviceVlan;</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-vlan-new"></a><h3>nm_device_vlan_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_vlan_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.14.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceVlanClass"></a><h3>NMDeviceVlanClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceVlanClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-vlan-new"></a><h3>nm_device_vlan_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_vlan_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.14.8.3.6"></a><h4>Returns</h4>
-<p> a new device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-vlan-get-hw-address"></a><h3>nm_device_vlan_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_vlan_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);</pre>
-<p>Gets the hardware (MAC) address of the <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.14.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-vlan-get-hw-address"></a><h3>nm_device_vlan_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_vlan_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);</pre>
+<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.14.8.4.6"></a><h4>Returns</h4>
-<p> the hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-vlan-get-carrier"></a><h3>nm_device_vlan_get_carrier ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_device_vlan_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);</pre>
-<p>Whether the device has carrier.</p>
-<div class="refsect3">
-<a name="id-1.3.14.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-vlan-get-carrier"></a><h3>nm_device_vlan_get_carrier ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_vlan_get_carrier (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);</pre>
+<p>
+Whether the device has carrier.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.14.8.5.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device has carrier</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-vlan-get-vlan-id"></a><h3>nm_device_vlan_get_vlan_id ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-nm_device_vlan_get_vlan_id (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.3.14.8.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-vlan-get-vlan-id"></a><h3>nm_device_vlan_get_vlan_id ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_device_vlan_get_vlan_id (<em class="parameter"><code><a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a> *device</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.14.8.6.5"></a><h4>Returns</h4>
-<p> the device's VLAN ID</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceVlan.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NMDeviceVlanError"></a><h3>enum NMDeviceVlanError</h3>
-<div class="refsect3">
-<a name="id-1.3.14.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-VLAN-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_VLAN_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-VLAN-ERROR-NOT-VLAN-CONNECTION:CAPS"></a>NM_DEVICE_VLAN_ERROR_NOT_VLAN_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of VLAN type</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-VLAN-ERROR-INVALID-VLAN-CONNECTION:CAPS"></a>NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the VLAN connection was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-VLAN-ERROR-ID-MISMATCH:CAPS"></a>NM_DEVICE_VLAN_ERROR_ID_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the VLAN identifiers of the connection and the device mismatched</p>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan"><span class="type">NMDeviceVlan</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-VLAN-ERROR-INTERFACE-MISMATCH:CAPS"></a>NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the interfaces of the connection and the device mismatched</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the device's VLAN ID</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMDeviceVlan.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-DEVICE-VLAN-ERROR:CAPS"></a><h3>NM_DEVICE_VLAN_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_VLAN_ERROR nm_device_vlan_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-VLAN-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_VLAN_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_VLAN_HW_ADDRESS "hw-address"
-</pre>
+<a name="NMDeviceVlan--carrier"></a><h3>The <code class="literal">"carrier"</code> property</h3>
+<pre class="programlisting"> "carrier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>
+Whether the device has carrier.
</p>
+<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-VLAN-CARRIER:CAPS"></a><h3>NM_DEVICE_VLAN_CARRIER</h3>
-<pre class="programlisting">#define NM_DEVICE_VLAN_CARRIER "carrier"
-</pre>
+<a name="NMDeviceVlan--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The hardware (MAC) address of the device.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-VLAN-VLAN-ID:CAPS"></a><h3>NM_DEVICE_VLAN_VLAN_ID</h3>
-<pre class="programlisting">#define NM_DEVICE_VLAN_VLAN_ID "vlan-id"
-</pre>
+<a name="NMDeviceVlan--vlan-id"></a><h3>The <code class="literal">"vlan-id"</code> property</h3>
+<pre class="programlisting"> "vlan-id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The device's VLAN ID.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceVlan.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMDeviceVlan--carrier"></a><h3>The <code class="literal">“carrierâ€</code> property</h3>
-<pre class="programlisting"> “carrier†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Carrier.</p>
-<p>Flags: Read</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceVlan--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Currently set hardware MAC address.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceVlan--vlan-id"></a><h3>The <code class="literal">“vlan-idâ€</code> property</h3>
-<pre class="programlisting"> “vlan-id†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>VLAN ID.</p>
-<p>Flags: Read</p>
<p>Allowed values: &lt;= 4095</p>
<p>Default value: 0</p>
</div>
@@ -400,6 +352,6 @@ nm_device_vlan_get_vlan_id (<em class="parameter"><code><a class="link" href="NM
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceWifi.html b/docs/libnm-glib/html/NMDeviceWifi.html
index 61d0228bd..63492658d 100644
--- a/docs/libnm-glib/html/NMDeviceWifi.html
+++ b/docs/libnm-glib/html/NMDeviceWifi.html
@@ -2,29 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceWifi</title>
+<title>NMDeviceWifi</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceEthernet.html" title="NMDeviceEthernet">
<link rel="next" href="NMDeviceModem.html" title="NMDeviceModem">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceWifi.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceWifi.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceWifi.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMDeviceWifi.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceEthernet.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceModem.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceEthernet.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceModem.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceWifi.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceWifi.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceWifi.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceWifi.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceWifi.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMDeviceWifi.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceWifi"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,762 +41,678 @@
<h2><span class="refentrytitle"><a name="NMDeviceWifi.top_of_page"></a>NMDeviceWifi</span></h2>
<p>NMDeviceWifi</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceWifi.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceWifi.html#NMDeviceWifiError" title="enum NMDeviceWifiError">NMDeviceWifiError</a>;
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR:CAPS" title="NM_DEVICE_WIFI_ERROR">NM_DEVICE_WIFI_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceWifi.html#nm-device-wifi-error-quark" title="nm_device_wifi_error_quark ()">nm_device_wifi_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-HW-ADDRESS:CAPS" title="NM_DEVICE_WIFI_HW_ADDRESS">NM_DEVICE_WIFI_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS" title="NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS">NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-MODE:CAPS" title="NM_DEVICE_WIFI_MODE">NM_DEVICE_WIFI_MODE</a>
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-BITRATE:CAPS" title="NM_DEVICE_WIFI_BITRATE">NM_DEVICE_WIFI_BITRATE</a>
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS" title="NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT">NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT</a>
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-CAPABILITIES:CAPS" title="NM_DEVICE_WIFI_CAPABILITIES">NM_DEVICE_WIFI_CAPABILITIES</a>
+#define <a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-ACCESS-POINTS:CAPS" title="NM_DEVICE_WIFI_ACCESS_POINTS">NM_DEVICE_WIFI_ACCESS_POINTS</a>
+ <a class="link" href="NMDeviceWifi.html#NMDeviceWifi-struct" title="NMDeviceWifi">NMDeviceWifi</a>;
+ <a class="link" href="NMDeviceWifi.html#NMDeviceWifiClass" title="NMDeviceWifiClass">NMDeviceWifiClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceWifi.html#nm-device-wifi-new" title="nm_device_wifi_new ()">nm_device_wifi_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-hw-address" title="nm_device_wifi_get_hw_address ()">nm_device_wifi_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address" title="nm_device_wifi_get_permanent_hw_address ()">nm_device_wifi_get_permanent_hw_address</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);
+<span class="returnvalue">NM80211Mode</span> <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-mode" title="nm_device_wifi_get_mode ()">nm_device_wifi_get_mode</a> (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-bitrate" title="nm_device_wifi_get_bitrate ()">nm_device_wifi_get_bitrate</a> (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);
+<span class="returnvalue">NMDeviceWifiCapabilities</span> <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-capabilities" title="nm_device_wifi_get_capabilities ()">nm_device_wifi_get_capabilities</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);
+<a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> * <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-active-access-point" title="nm_device_wifi_get_active_access_point ()">nm_device_wifi_get_active_access_point</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);
+<a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> * <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path" title="nm_device_wifi_get_access_point_by_path ()">nm_device_wifi_get_access_point_by_path</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-points" title="nm_device_wifi_get_access_points ()">nm_device_wifi_get_access_points</a> (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMDeviceWifi.html#NMDeviceWifiRequestScanFn" title="NMDeviceWifiRequestScanFn ()">*NMDeviceWifiRequestScanFn</a>) (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMDeviceWifi.html#nm-device-wifi-request-scan-simple" title="nm_device_wifi_request_scan_simple ()">nm_device_wifi_request_scan_simple</a> (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDeviceWifi.html#NMDeviceWifiRequestScanFn" title="NMDeviceWifiRequestScanFn ()"><span class="type">NMDeviceWifiRequestScanFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+</pre>
+</div>
<div class="refsect1">
-<a name="NMDeviceWifi.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-error-quark" title="nm_device_wifi_error_quark ()">nm_device_wifi_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-new" title="nm_device_wifi_new ()">nm_device_wifi_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-hw-address" title="nm_device_wifi_get_hw_address ()">nm_device_wifi_get_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address" title="nm_device_wifi_get_permanent_hw_address ()">nm_device_wifi_get_permanent_hw_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NM80211Mode</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-mode" title="nm_device_wifi_get_mode ()">nm_device_wifi_get_mode</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-bitrate" title="nm_device_wifi_get_bitrate ()">nm_device_wifi_get_bitrate</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMDeviceWifiCapabilities</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-capabilities" title="nm_device_wifi_get_capabilities ()">nm_device_wifi_get_capabilities</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-active-access-point" title="nm_device_wifi_get_active_access_point ()">nm_device_wifi_get_active_access_point</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path" title="nm_device_wifi_get_access_point_by_path ()">nm_device_wifi_get_access_point_by_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-points" title="nm_device_wifi_get_access_points ()">nm_device_wifi_get_access_points</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMDeviceWifi.html#NMDeviceWifiRequestScanFn" title="NMDeviceWifiRequestScanFn ()">*NMDeviceWifiRequestScanFn</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-request-scan-simple" title="nm_device_wifi_request_scan_simple ()">nm_device_wifi_request_scan_simple</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMDeviceWifi.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceWifi
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWifi.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceWifi implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
<a name="NMDeviceWifi.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi--active-access-point" title="The “active-access-point†property">active-access-point</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi--bitrate" title="The “bitrate†property">bitrate</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi--mode" title="The “mode†property">mode</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi--perm-hw-address" title="The “perm-hw-address†property">perm-hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities" title="The “wireless-capabilities†property">wireless-capabilities</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--access-points" title='The "access-points" property'>access-points</a>" <span class="type">NMObjectArray</span>* : Read
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--active-access-point" title='The "active-access-point" property'>active-access-point</a>" <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>* : Read
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--bitrate" title='The "bitrate" property'>bitrate</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--mode" title='The "mode" property'>mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--perm-hw-address" title='The "perm-hw-address" property'>perm-hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities" title='The "wireless-capabilities" property'>wireless-capabilities</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+</pre>
</div>
<div class="refsect1">
<a name="NMDeviceWifi.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-added" title="The “access-point-added†signal">access-point-added</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr>
-<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-removed" title="The “access-point-removed†signal">access-point-removed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr>
-</tbody>
-</table></div>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-added" title='The "access-point-added" signal'>access-point-added</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-removed" title='The "access-point-removed" signal'>access-point-removed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
</div>
<div class="refsect1">
-<a name="NMDeviceWifi.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceWifi.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWifi.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDeviceWifiError"></a><h3>enum NMDeviceWifiError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_WIFI_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_WIFI_ERROR_NOT_WIFI_CONNECTION, /*&lt; nick=NotWifiConnection &gt;*/
+ NM_DEVICE_WIFI_ERROR_INVALID_WIFI_CONNECTION, /*&lt; nick=InvalidWifiConnection &gt;*/
+ NM_DEVICE_WIFI_ERROR_INVALID_DEVICE_MAC, /*&lt; nick=InvalidDeviceMac &gt;*/
+ NM_DEVICE_WIFI_ERROR_MAC_MISMATCH, /*&lt; nick=MacMismatch &gt;*/
+ NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_WPA_CAPS, /*&lt; nick=MissingDeviceWpaCaps &gt;*/
+ NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_RSN_CAPS, /*&lt; nick=MissingDeviceRsnCaps &gt;*/
+} NMDeviceWifiError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NMDeviceWifiError" title="enum NMDeviceWifiError">NMDeviceWifiError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR:CAPS" title="NM_DEVICE_WIFI_ERROR">NM_DEVICE_WIFI_ERROR</a></td>
+<td><p><a name="NM-DEVICE-WIFI-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIFI_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-HW-ADDRESS:CAPS" title="NM_DEVICE_WIFI_HW_ADDRESS">NM_DEVICE_WIFI_HW_ADDRESS</a></td>
+<td><p><a name="NM-DEVICE-WIFI-ERROR-NOT-WIFI-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIFI_ERROR_NOT_WIFI_CONNECTION</code></span></p></td>
+<td>the connection was not of Wi-Fi type
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS" title="NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS">NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS</a></td>
+<td><p><a name="NM-DEVICE-WIFI-ERROR-INVALID-WIFI-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIFI_ERROR_INVALID_WIFI_CONNECTION</code></span></p></td>
+<td>the Wi-Fi connection was invalid
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-MODE:CAPS" title="NM_DEVICE_WIFI_MODE">NM_DEVICE_WIFI_MODE</a></td>
+<td><p><a name="NM-DEVICE-WIFI-ERROR-INVALID-DEVICE-MAC:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIFI_ERROR_INVALID_DEVICE_MAC</code></span></p></td>
+<td>the device's MAC was invalid
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-BITRATE:CAPS" title="NM_DEVICE_WIFI_BITRATE">NM_DEVICE_WIFI_BITRATE</a></td>
+<td><p><a name="NM-DEVICE-WIFI-ERROR-MAC-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIFI_ERROR_MAC_MISMATCH</code></span></p></td>
+<td>the MACs of the connection and the device mismatched
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS" title="NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT">NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT</a></td>
+<td><p><a name="NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-WPA-CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_WPA_CAPS</code></span></p></td>
+<td>the device missed WPA capabilities
+required by the connection
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-CAPABILITIES:CAPS" title="NM_DEVICE_WIFI_CAPABILITIES">NM_DEVICE_WIFI_CAPABILITIES</a></td>
+<td><p><a name="NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-RSN-CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_RSN_CAPS</code></span></p></td>
+<td>the device missed RSN capabilities
+required by the connection
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceWifi.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceWifi
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIFI-ERROR:CAPS"></a><h3>NM_DEVICE_WIFI_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_ERROR nm_device_wifi_error_quark ()
</pre>
-</div>
-<div class="refsect1">
-<a name="NMDeviceWifi.description"></a><h2>Description</h2>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMDeviceWifi.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-device-wifi-error-quark"></a><h3>nm_device_wifi_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_wifi_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> errors.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-new"></a><h3>nm_device_wifi_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_wifi_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wifi-error-quark"></a><h3>nm_device_wifi_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_wifi_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.3.6"></a><h4>Returns</h4>
-<p> a new WiFi device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-hw-address"></a><h3>nm_device_wifi_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_wifi_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
-<p>Gets the actual hardware (MAC) address of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.6.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-WIFI-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_WIFI_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.4.6"></a><h4>Returns</h4>
-<p> the actual hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS "perm-hw-address"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIFI-MODE:CAPS"></a><h3>NM_DEVICE_WIFI_MODE</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_MODE "mode"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-permanent-hw-address"></a><h3>nm_device_wifi_get_permanent_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_wifi_get_permanent_hw_address
- (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
-<p>Gets the permanent hardware (MAC) address of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.6.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-WIFI-BITRATE:CAPS"></a><h3>NM_DEVICE_WIFI_BITRATE</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_BITRATE "bitrate"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.5.6"></a><h4>Returns</h4>
-<p> the permanent hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS"></a><h3>NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT "active-access-point"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIFI-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_WIFI_CAPABILITIES</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-mode"></a><h3>nm_device_wifi_get_mode ()</h3>
-<pre class="programlisting"><span class="returnvalue">NM80211Mode</span>
-nm_device_wifi_get_mode (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
-<p>Gets the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> mode.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-DEVICE-WIFI-ACCESS-POINTS:CAPS"></a><h3>NM_DEVICE_WIFI_ACCESS_POINTS</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_ACCESS_POINTS "access-points"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.6.6"></a><h4>Returns</h4>
-<p> the mode</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceWifi-struct"></a><h3>NMDeviceWifi</h3>
+<pre class="programlisting">typedef struct _NMDeviceWifi NMDeviceWifi;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceWifiClass"></a><h3>NMDeviceWifiClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Signals */
+ void (*access_point_added) (NMDeviceWifi *device, NMAccessPoint *ap);
+ void (*access_point_removed) (NMDeviceWifi *device, NMAccessPoint *ap);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceWifiClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-bitrate"></a><h3>nm_device_wifi_get_bitrate ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_device_wifi_get_bitrate (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
-<p>Gets the bit rate of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wifi-new"></a><h3>nm_device_wifi_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_wifi_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new Wi-Fi device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.7.6"></a><h4>Returns</h4>
-<p> the bit rate</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-capabilities"></a><h3>nm_device_wifi_get_capabilities ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMDeviceWifiCapabilities</span>
-nm_device_wifi_get_capabilities (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
-<p>Gets the WIFI capabilities of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wifi-get-hw-address"></a><h3>nm_device_wifi_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_wifi_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
+<p>
+Gets the actual hardware (MAC) address of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the actual hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.8.6"></a><h4>Returns</h4>
-<p> the capabilities</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-active-access-point"></a><h3>nm_device_wifi_get_active_access_point ()</h3>
-<pre class="programlisting"><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> *
-nm_device_wifi_get_active_access_point
- (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
-<p>Gets the active <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wifi-get-permanent-hw-address"></a><h3>nm_device_wifi_get_permanent_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_wifi_get_permanent_hw_address
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
+<p>
+Gets the permanent hardware (MAC) address of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the permanent hardware address. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.9.6"></a><h4>Returns</h4>
-<p> the access point or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is active. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-access-point-by-path"></a><h3>nm_device_wifi_get_access_point_by_path ()</h3>
-<pre class="programlisting"><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> *
-nm_device_wifi_get_access_point_by_path
- (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Gets a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> by path.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wifi-get-mode"></a><h3>nm_device_wifi_get_mode ()</h3>
+<pre class="programlisting"><span class="returnvalue">NM80211Mode</span> nm_device_wifi_get_mode (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> mode.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the object path of the access point</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the mode</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.10.6"></a><h4>Returns</h4>
-<p> the access point or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wifi-get-access-points"></a><h3>nm_device_wifi_get_access_points ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_device_wifi_get_access_points (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
-<p>Gets all the scanned access points of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wifi-get-bitrate"></a><h3>nm_device_wifi_get_bitrate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_device_wifi_get_bitrate (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
+<p>
+Gets the bit rate of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> in kbit/s.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the bit rate (kbit/s)</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.6.9.11.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing all the
-scanned <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>s.
-The returned array is owned by the client and should not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.AccessPoint]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceWifiRequestScanFn"></a><h3>NMDeviceWifiRequestScanFn ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMDeviceWifiRequestScanFn<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<a name="nm-device-wifi-get-capabilities"></a><h3>nm_device_wifi_get_capabilities ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMDeviceWifiCapabilities</span> nm_device_wifi_get_capabilities
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
<p>
+Gets the Wi-Fi capabilities of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-wifi-request-scan-simple"></a><h3>nm_device_wifi_request_scan_simple ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_device_wifi_request_scan_simple (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
- <em class="parameter"><code><a class="link" href="NMDeviceWifi.html#NMDeviceWifiRequestScanFn" title="NMDeviceWifiRequestScanFn ()"><span class="type">NMDeviceWifiRequestScanFn</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Request NM to scan for access points on the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>. This function only
-instructs NM to perform scanning. Use <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-points" title="nm_device_wifi_get_access_points ()"><code class="function">nm_device_wifi_get_access_points()</code></a>
-to get available access points.</p>
-<div class="refsect3">
-<a name="id-1.3.6.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> the function to call when the call is done. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> user data to pass to the callback function. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the capabilities</td>
</tr>
</tbody>
</table></div>
</div>
-<p class="since">Since 0.9.8</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceWifi.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMDeviceWifiError"></a><h3>enum NMDeviceWifiError</h3>
-<div class="refsect3">
-<a name="id-1.3.6.10.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wifi-get-active-access-point"></a><h3>nm_device_wifi_get_active_access_point ()</h3>
+<pre class="programlisting"><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> * nm_device_wifi_get_active_access_point
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
+<p>
+Gets the active <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIFI-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_WIFI_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIFI-ERROR-NOT-WIFI-CONNECTION:CAPS"></a>NM_DEVICE_WIFI_ERROR_NOT_WIFI_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of Wi-Fi type</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the access point or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is active. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wifi-get-access-point-by-path"></a><h3>nm_device_wifi_get_access_point_by_path ()</h3>
+<pre class="programlisting"><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="returnvalue">NMAccessPoint</span></a> * nm_device_wifi_get_access_point_by_path
+ (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Gets a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> by path.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIFI-ERROR-INVALID-WIFI-CONNECTION:CAPS"></a>NM_DEVICE_WIFI_ERROR_INVALID_WIFI_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the Wi-Fi connection was invalid</p>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIFI-ERROR-INVALID-DEVICE-MAC:CAPS"></a>NM_DEVICE_WIFI_ERROR_INVALID_DEVICE_MAC</p></td>
-<td class="enum_member_description">
-<p>the device's MAC was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the object path of the access point</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIFI-ERROR-MAC-MISMATCH:CAPS"></a>NM_DEVICE_WIFI_ERROR_MAC_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the MACs of the connection and the device mismatched</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the access point or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wifi-get-access-points"></a><h3>nm_device_wifi_get_access_points ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_device_wifi_get_access_points (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>);</pre>
+<p>
+Gets all the scanned access points of the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-WPA-CAPS"></a>NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_WPA_CAPS</p></td>
-<td class="enum_member_description">
-<p>the device missed WPA capabilities
-required by the connection</p>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-RSN-CAPS"></a>NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_RSN_CAPS</p></td>
-<td class="enum_member_description">
-<p>the device missed RSN capabilities
-required by the connection</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing all the
+scanned <a href="NMAccessPoint.html"><span class="type">NMAccessPoints</span></a>.
+The returned array is owned by the client and should not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.AccessPoint]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIFI-ERROR:CAPS"></a><h3>NM_DEVICE_WIFI_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_WIFI_ERROR nm_device_wifi_error_quark ()
-</pre>
+<a name="NMDeviceWifiRequestScanFn"></a><h3>NMDeviceWifiRequestScanFn ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMDeviceWifiRequestScanFn) (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIFI-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_WIFI_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_WIFI_HW_ADDRESS "hw-address"
-</pre>
+<a name="nm-device-wifi-request-scan-simple"></a><h3>nm_device_wifi_request_scan_simple ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_device_wifi_request_scan_simple (<em class="parameter"><code><a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device</code></em>,
+ <em class="parameter"><code><a class="link" href="NMDeviceWifi.html#NMDeviceWifiRequestScanFn" title="NMDeviceWifiRequestScanFn ()"><span class="type">NMDeviceWifiRequestScanFn</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
+Request NM to scan for access points on the <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>. This function only
+instructs NM to perform scanning. Use <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-points" title="nm_device_wifi_get_access_points ()"><code class="function">nm_device_wifi_get_access_points()</code></a>
+to get available access points.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>the function to call when the call is done. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data to pass to the callback function. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS "perm-hw-address"
-</pre>
-<p>
-</p>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMDeviceWifi.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-DEVICE-WIFI-MODE:CAPS"></a><h3>NM_DEVICE_WIFI_MODE</h3>
-<pre class="programlisting">#define NM_DEVICE_WIFI_MODE "mode"
-</pre>
+<a name="NMDeviceWifi--access-points"></a><h3>The <code class="literal">"access-points"</code> property</h3>
+<pre class="programlisting"> "access-points" <span class="type">NMObjectArray</span>* : Read</pre>
<p>
+List of all Wi-Fi access points the device can see.
</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIFI-BITRATE:CAPS"></a><h3>NM_DEVICE_WIFI_BITRATE</h3>
-<pre class="programlisting">#define NM_DEVICE_WIFI_BITRATE "bitrate"
-</pre>
+<a name="NMDeviceWifi--active-access-point"></a><h3>The <code class="literal">"active-access-point"</code> property</h3>
+<pre class="programlisting"> "active-access-point" <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>* : Read</pre>
<p>
+The active <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> of the device.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS"></a><h3>NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT</h3>
-<pre class="programlisting">#define NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT "active-access-point"
-</pre>
+<a name="NMDeviceWifi--bitrate"></a><h3>The <code class="literal">"bitrate"</code> property</h3>
+<pre class="programlisting"> "bitrate" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The bit rate of the device in kbit/s.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIFI-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_WIFI_CAPABILITIES</h3>
-<pre class="programlisting">#define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities"
-</pre>
+<a name="NMDeviceWifi--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The hardware (MAC) address of the device.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceWifi.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMDeviceWifi--active-access-point"></a><h3>The <code class="literal">“active-access-pointâ€</code> property</h3>
-<pre class="programlisting"> “active-access-point†<a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *</pre>
-<p>Active Access Point.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWifi--bitrate"></a><h3>The <code class="literal">“bitrateâ€</code> property</h3>
-<pre class="programlisting"> “bitrate†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Bit Rate.</p>
-<p>Flags: Read</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWifi--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Currently set hardware MAC address.</p>
-<p>Flags: Read</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceWifi--mode"></a><h3>The <code class="literal">“modeâ€</code> property</h3>
-<pre class="programlisting"> “mode†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Mode.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceWifi--mode"></a><h3>The <code class="literal">"mode"</code> property</h3>
+<pre class="programlisting"> "mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The mode of the device.
+</p>
<p>Allowed values: &lt;= 3</p>
<p>Default value: 2</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceWifi--perm-hw-address"></a><h3>The <code class="literal">“perm-hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “perm-hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Permanent hardware MAC address.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceWifi--perm-hw-address"></a><h3>The <code class="literal">"perm-hw-address"</code> property</h3>
+<pre class="programlisting"> "perm-hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceWifi--wireless-capabilities"></a><h3>The <code class="literal">“wireless-capabilitiesâ€</code> property</h3>
-<pre class="programlisting"> “wireless-capabilities†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Wireless Capabilities.</p>
-<p>Flags: Read</p>
+<a name="NMDeviceWifi--wireless-capabilities"></a><h3>The <code class="literal">"wireless-capabilities"</code> property</h3>
+<pre class="programlisting"> "wireless-capabilities" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The wireless capabilities of the device.
+</p>
<p>Default value: 0</p>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceWifi.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMDeviceWifi-access-point-added"></a><h3>The <code class="literal">“access-point-addedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device,
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *ap,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMDeviceWifi-access-point-added"></a><h3>The <code class="literal">"access-point-added"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device,
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *ap,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies that a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> is added to the Wi-Fi device.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>the Wi-Fi device that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>the new access point</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceWifi-access-point-removed"></a><h3>The <code class="literal">“access-point-removedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device,
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *ap,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMDeviceWifi-access-point-removed"></a><h3>The <code class="literal">"access-point-removed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi"><span class="type">NMDeviceWifi</span></a> *device,
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *ap,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies that a <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> is removed from the Wi-Fi device.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>the Wi-Fi device that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap</code></em> :</span></p></td>
+<td>the removed access point</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMDeviceWimax.html b/docs/libnm-glib/html/NMDeviceWimax.html
index c496a2c62..60e44b58c 100644
--- a/docs/libnm-glib/html/NMDeviceWimax.html
+++ b/docs/libnm-glib/html/NMDeviceWimax.html
@@ -2,29 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMDeviceWimax</title>
+<title>NMDeviceWimax</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceBt.html" title="NMDeviceBt">
<link rel="next" href="NMDeviceAdsl.html" title="NMDeviceAdsl">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMDeviceWimax.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMDeviceWimax.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMDeviceWimax.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMDeviceWimax.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceBt.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDeviceAdsl.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceBt.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDeviceAdsl.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDeviceWimax.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDeviceWimax.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDeviceWimax.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDeviceWimax.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDeviceWimax.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMDeviceWimax.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMDeviceWimax"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,745 +41,662 @@
<h2><span class="refentrytitle"><a name="NMDeviceWimax.top_of_page"></a>NMDeviceWimax</span></h2>
<p>NMDeviceWimax</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceWimax.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMDeviceWimax.html#NMDeviceWimaxError" title="enum NMDeviceWimaxError">NMDeviceWimaxError</a>;
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR:CAPS" title="NM_DEVICE_WIMAX_ERROR">NM_DEVICE_WIMAX_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMDeviceWimax.html#nm-device-wimax-error-quark" title="nm_device_wimax_error_quark ()">nm_device_wimax_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-HW-ADDRESS:CAPS" title="NM_DEVICE_WIMAX_HW_ADDRESS">NM_DEVICE_WIMAX_HW_ADDRESS</a>
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS" title="NM_DEVICE_WIMAX_ACTIVE_NSP">NM_DEVICE_WIMAX_ACTIVE_NSP</a>
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS" title="NM_DEVICE_WIMAX_CENTER_FREQUENCY">NM_DEVICE_WIMAX_CENTER_FREQUENCY</a>
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-RSSI:CAPS" title="NM_DEVICE_WIMAX_RSSI">NM_DEVICE_WIMAX_RSSI</a>
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-CINR:CAPS" title="NM_DEVICE_WIMAX_CINR">NM_DEVICE_WIMAX_CINR</a>
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-TX-POWER:CAPS" title="NM_DEVICE_WIMAX_TX_POWER">NM_DEVICE_WIMAX_TX_POWER</a>
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-BSID:CAPS" title="NM_DEVICE_WIMAX_BSID">NM_DEVICE_WIMAX_BSID</a>
+#define <a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-NSPS:CAPS" title="NM_DEVICE_WIMAX_NSPS">NM_DEVICE_WIMAX_NSPS</a>
+ <a class="link" href="NMDeviceWimax.html#NMDeviceWimax-struct" title="NMDeviceWimax">NMDeviceWimax</a>;
+ <a class="link" href="NMDeviceWimax.html#NMDeviceWimaxClass" title="NMDeviceWimaxClass">NMDeviceWimaxClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMDeviceWimax.html#nm-device-wimax-new" title="nm_device_wimax_new ()">nm_device_wimax_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-hw-address" title="nm_device_wimax_get_hw_address ()">nm_device_wimax_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);
+<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> * <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-active-nsp" title="nm_device_wimax_get_active_nsp ()">nm_device_wimax_get_active_nsp</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);
+<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> * <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsp-by-path" title="nm_device_wimax_get_nsp_by_path ()">nm_device_wimax_get_nsp_by_path</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsps" title="nm_device_wimax_get_nsps ()">nm_device_wimax_get_nsps</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-center-frequency" title="nm_device_wimax_get_center_frequency ()">nm_device_wimax_get_center_frequency</a>
+ (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-rssi" title="nm_device_wimax_get_rssi ()">nm_device_wimax_get_rssi</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-cinr" title="nm_device_wimax_get_cinr ()">nm_device_wimax_get_cinr</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-tx-power" title="nm_device_wimax_get_tx_power ()">nm_device_wimax_get_tx_power</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-bsid" title="nm_device_wimax_get_bsid ()">nm_device_wimax_get_bsid</a> (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWimax.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----NMDeviceWimax
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWimax.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDeviceWimax implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWimax.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--active-nsp" title='The "active-nsp" property'>active-nsp</a>" <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>* : Read
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--bsid" title='The "bsid" property'>bsid</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--center-frequency" title='The "center-frequency" property'>center-frequency</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--cinr" title='The "cinr" property'>cinr</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--hw-address" title='The "hw-address" property'>hw-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--nsps" title='The "nsps" property'>nsps</a>" <span class="type">NMObjectArray</span>* : Read
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--rssi" title='The "rssi" property'>rssi</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--tx-power" title='The "tx-power" property'>tx-power</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read
+</pre>
+</div>
<div class="refsect1">
-<a name="NMDeviceWimax.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMDeviceWimax.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-added" title='The "nsp-added" signal'>nsp-added</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-removed" title='The "nsp-removed" signal'>nsp-removed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWimax.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWimax.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDeviceWimaxError"></a><h3>enum NMDeviceWimaxError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_WIMAX_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_DEVICE_WIMAX_ERROR_NOT_WIMAX_CONNECTION, /*&lt; nick=NotWimaxConnection &gt;*/
+ NM_DEVICE_WIMAX_ERROR_INVALID_WIMAX_CONNECTION, /*&lt; nick=InvalidWimaxConnection &gt;*/
+ NM_DEVICE_WIMAX_ERROR_INVALID_DEVICE_MAC, /*&lt; nick=InvalidDeviceMac &gt;*/
+ NM_DEVICE_WIMAX_ERROR_MAC_MISMATCH, /*&lt; nick=MacMismatch &gt;*/
+} NMDeviceWimaxError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-error-quark" title="nm_device_wimax_error_quark ()">nm_device_wimax_error_quark</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-WIMAX-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIMAX_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-new" title="nm_device_wimax_new ()">nm_device_wimax_new</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-WIMAX-ERROR-NOT-WIMAX-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIMAX_ERROR_NOT_WIMAX_CONNECTION</code></span></p></td>
+<td>the connection was not of WiMax type
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-hw-address" title="nm_device_wimax_get_hw_address ()">nm_device_wimax_get_hw_address</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-WIMAX-ERROR-INVALID-WIMAX-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIMAX_ERROR_INVALID_WIMAX_CONNECTION</code></span></p></td>
+<td>the WiMax connection was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-active-nsp" title="nm_device_wimax_get_active_nsp ()">nm_device_wimax_get_active_nsp</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-WIMAX-ERROR-INVALID-DEVICE-MAC:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIMAX_ERROR_INVALID_DEVICE_MAC</code></span></p></td>
+<td>the device's MAC was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsp-by-path" title="nm_device_wimax_get_nsp_by_path ()">nm_device_wimax_get_nsp_by_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsps" title="nm_device_wimax_get_nsps ()">nm_device_wimax_get_nsps</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-center-frequency" title="nm_device_wimax_get_center_frequency ()">nm_device_wimax_get_center_frequency</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-rssi" title="nm_device_wimax_get_rssi ()">nm_device_wimax_get_rssi</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-DEVICE-WIMAX-ERROR-MAC-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_WIMAX_ERROR_MAC_MISMATCH</code></span></p></td>
+<td>the MACs of the connection and the device mismatched
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-ERROR:CAPS"></a><h3>NM_DEVICE_WIMAX_ERROR</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_ERROR nm_device_wimax_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wimax-error-quark"></a><h3>nm_device_wimax_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_device_wimax_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_WIMAX_HW_ADDRESS</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_HW_ADDRESS "hw-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS"></a><h3>NM_DEVICE_WIMAX_ACTIVE_NSP</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_ACTIVE_NSP "active-nsp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS"></a><h3>NM_DEVICE_WIMAX_CENTER_FREQUENCY</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_CENTER_FREQUENCY "center-frequency"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-RSSI:CAPS"></a><h3>NM_DEVICE_WIMAX_RSSI</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_RSSI "rssi"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-CINR:CAPS"></a><h3>NM_DEVICE_WIMAX_CINR</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_CINR "cinr"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-TX-POWER:CAPS"></a><h3>NM_DEVICE_WIMAX_TX_POWER</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_TX_POWER "tx-power"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-BSID:CAPS"></a><h3>NM_DEVICE_WIMAX_BSID</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_BSID "bsid"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-WIMAX-NSPS:CAPS"></a><h3>NM_DEVICE_WIMAX_NSPS</h3>
+<pre class="programlisting">#define NM_DEVICE_WIMAX_NSPS "nsps"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceWimax-struct"></a><h3>NMDeviceWimax</h3>
+<pre class="programlisting">typedef struct _NMDeviceWimax NMDeviceWimax;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceWimaxClass"></a><h3>NMDeviceWimaxClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+
+ /* Signals */
+ void (*nsp_added) (NMDeviceWimax *self, NMWimaxNsp *nsp);
+ void (*nsp_removed) (NMDeviceWimax *self, NMWimaxNsp *nsp);
+} NMDeviceWimaxClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wimax-new"></a><h3>nm_device_wimax_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_device_wimax_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-cinr" title="nm_device_wimax_get_cinr ()">nm_device_wimax_get_cinr</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-tx-power" title="nm_device_wimax_get_tx_power ()">nm_device_wimax_get_tx_power</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the D-Bus object path of the WiMAX device</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-bsid" title="nm_device_wimax_get_bsid ()">nm_device_wimax_get_bsid</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new WiMAX device. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-device-wimax-get-hw-address"></a><h3>nm_device_wimax_get_hw_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_wimax_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);</pre>
+<p>
+Gets the hardware (MAC) address of the <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax--active-nsp" title="The “active-nsp†property">active-nsp</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax--bsid" title="The “bsid†property">bsid</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax--center-frequency" title="The “center-frequency†property">center-frequency</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax--cinr" title="The “cinr†property">cinr</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax--hw-address" title="The “hw-address†property">hw-address</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax--rssi" title="The “rssi†property">rssi</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><em class="parameter"><code>wimax</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax--tx-power" title="The “tx-power†property">tx-power</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the hardware address. This is the internal string used by the
+device, and must not be modified.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-device-wimax-get-active-nsp"></a><h3>nm_device_wimax_get_active_nsp ()</h3>
+<pre class="programlisting"><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> * nm_device_wimax_get_active_nsp (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);</pre>
+<p>
+Gets the active <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-added" title="The “nsp-added†signal">nsp-added</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+<td><p><span class="term"><em class="parameter"><code>wimax</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
</tr>
<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-removed" title="The “nsp-removed†signal">nsp-removed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the access point or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is active. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-device-wimax-get-nsp-by-path"></a><h3>nm_device_wimax_get_nsp_by_path ()</h3>
+<pre class="programlisting"><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> * nm_device_wimax_get_nsp_by_path (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Gets a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> by path.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NMDeviceWimaxError" title="enum NMDeviceWimaxError">NMDeviceWimaxError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR:CAPS" title="NM_DEVICE_WIMAX_ERROR">NM_DEVICE_WIMAX_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-HW-ADDRESS:CAPS" title="NM_DEVICE_WIMAX_HW_ADDRESS">NM_DEVICE_WIMAX_HW_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS" title="NM_DEVICE_WIMAX_ACTIVE_NSP">NM_DEVICE_WIMAX_ACTIVE_NSP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS" title="NM_DEVICE_WIMAX_CENTER_FREQUENCY">NM_DEVICE_WIMAX_CENTER_FREQUENCY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-RSSI:CAPS" title="NM_DEVICE_WIMAX_RSSI">NM_DEVICE_WIMAX_RSSI</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-CINR:CAPS" title="NM_DEVICE_WIMAX_CINR">NM_DEVICE_WIMAX_CINR</a></td>
+<td><p><span class="term"><em class="parameter"><code>wimax</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-TX-POWER:CAPS" title="NM_DEVICE_WIMAX_TX_POWER">NM_DEVICE_WIMAX_TX_POWER</a></td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the object path of the NSP</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-BSID:CAPS" title="NM_DEVICE_WIMAX_BSID">NM_DEVICE_WIMAX_BSID</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the access point or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">╰──</span> NMDeviceWimax
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.description"></a><h2>Description</h2>
-<p>
-</p>
-</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-device-wimax-error-quark"></a><h3>nm_device_wimax_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_device_wimax_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> errors.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wimax-new"></a><h3>nm_device_wimax_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_device_wimax_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wimax-get-nsps"></a><h3>nm_device_wimax_get_nsps ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_device_wimax_get_nsps (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);</pre>
+<p>
+Gets all the scanned NSPs of the <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>wimax</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the D-Bus object path of the WiMAX device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
+all the scanned <a href="NMWimaxNsp.html"><span class="type">NMWimaxNsps</span></a>.
+The returned array is owned by the client and should not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.WimaxNsp]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.3.6"></a><h4>Returns</h4>
-<p> a new WiMAX device. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-wimax-get-hw-address"></a><h3>nm_device_wimax_get_hw_address ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_wimax_get_hw_address (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);</pre>
-<p>Gets the hardware (MAC) address of the <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p>
-<div class="refsect3">
-<a name="id-1.3.9.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>wimax</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.4.6"></a><h4>Returns</h4>
-<p> the hardware address. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wimax-get-active-nsp"></a><h3>nm_device_wimax_get_active_nsp ()</h3>
-<pre class="programlisting"><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> *
-nm_device_wimax_get_active_nsp (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);</pre>
-<p>Gets the active <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>wimax</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.5.6"></a><h4>Returns</h4>
-<p> the access point or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is active. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-wimax-get-nsp-by-path"></a><h3>nm_device_wimax_get_nsp_by_path ()</h3>
-<pre class="programlisting"><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="returnvalue">NMWimaxNsp</span></a> *
-nm_device_wimax_get_nsp_by_path (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Gets a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> by path.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wimax-get-center-frequency"></a><h3>nm_device_wimax_get_center_frequency ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_device_wimax_get_center_frequency
+ (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
+<p>
+Gets the center frequency (in KHz) of the radio channel the device is using
+to communicate with the network when connected. Has no meaning when the
+device is not connected.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>wimax</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the object path of the NSP</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the center frequency in KHz, or 0</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.6.6"></a><h4>Returns</h4>
-<p> the access point or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-wimax-get-nsps"></a><h3>nm_device_wimax_get_nsps ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_device_wimax_get_nsps (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *wimax</code></em>);</pre>
-<p>Gets all the scanned NSPs of the <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>wimax</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.7.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
-all the scanned <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>s.
-The returned array is owned by the client and should not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.WimaxNsp]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-device-wimax-get-center-frequency"></a><h3>nm_device_wimax_get_center_frequency ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-nm_device_wimax_get_center_frequency (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
-<p>Gets the center frequency (in KHz) of the radio channel the device is using
-to communicate with the network when connected. Has no meaning when the
-device is not connected.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.8.6"></a><h4>Returns</h4>
-<p> the center frequency in KHz, or 0</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wimax-get-rssi"></a><h3>nm_device_wimax_get_rssi ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-nm_device_wimax_get_rssi (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
-<p>Gets the RSSI of the current radio link in dBm. This value indicates how
+<a name="nm-device-wimax-get-rssi"></a><h3>nm_device_wimax_get_rssi ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> nm_device_wimax_get_rssi (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
+<p>
+Gets the RSSI of the current radio link in dBm. This value indicates how
strong the raw received RF signal from the base station is, but does not
indicate the overall quality of the radio link. Has no meaning when the
-device is not connected.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+device is not connected.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the RSSI in dBm, or 0</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.9.6"></a><h4>Returns</h4>
-<p> the RSSI in dBm, or 0</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wimax-get-cinr"></a><h3>nm_device_wimax_get_cinr ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-nm_device_wimax_get_cinr (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
-<p>Gets the CINR (Carrier to Interference + Noise Ratio) of the current radio
+<a name="nm-device-wimax-get-cinr"></a><h3>nm_device_wimax_get_cinr ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> nm_device_wimax_get_cinr (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
+<p>
+Gets the CINR (Carrier to Interference + Noise Ratio) of the current radio
link in dB. CINR is a more accurate measure of radio link quality. Has no
-meaning when the device is not connected.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+meaning when the device is not connected.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the CINR in dB, or 0</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.10.6"></a><h4>Returns</h4>
-<p> the CINR in dB, or 0</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wimax-get-tx-power"></a><h3>nm_device_wimax_get_tx_power ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-nm_device_wimax_get_tx_power (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
-<p>Average power of the last burst transmitted by the device, in units of
+<a name="nm-device-wimax-get-tx-power"></a><h3>nm_device_wimax_get_tx_power ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> nm_device_wimax_get_tx_power (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
+<p>
+Average power of the last burst transmitted by the device, in units of
0.5 dBm. i.e. a TxPower of -11 represents an actual device TX power of
--5.5 dBm. Has no meaning when the device is not connected.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+-5.5 dBm. Has no meaning when the device is not connected.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the TX power in dBm, or 0</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.11.6"></a><h4>Returns</h4>
-<p> the TX power in dBm, or 0</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-device-wimax-get-bsid"></a><h3>nm_device_wimax_get_bsid ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_device_wimax_get_bsid (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
-<p>Gets the ID of the serving Base Station when the device is connected.</p>
-<div class="refsect3">
-<a name="id-1.3.9.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.9.9.12.6"></a><h4>Returns</h4>
-<p> the ID of the serving Base Station, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NMDeviceWimaxError"></a><h3>enum NMDeviceWimaxError</h3>
-<div class="refsect3">
-<a name="id-1.3.9.10.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-device-wimax-get-bsid"></a><h3>nm_device_wimax_get_bsid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_wimax_get_bsid (<em class="parameter"><code><a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self</code></em>);</pre>
+<p>
+Gets the ID of the serving Base Station when the device is connected.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIMAX-ERROR-UNKNOWN:CAPS"></a>NM_DEVICE_WIMAX_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIMAX-ERROR-NOT-WIMAX-CONNECTION:CAPS"></a>NM_DEVICE_WIMAX_ERROR_NOT_WIMAX_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection was not of WiMax type</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIMAX-ERROR-INVALID-WIMAX-CONNECTION:CAPS"></a>NM_DEVICE_WIMAX_ERROR_INVALID_WIMAX_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the WiMax connection was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIMAX-ERROR-INVALID-DEVICE-MAC:CAPS"></a>NM_DEVICE_WIMAX_ERROR_INVALID_DEVICE_MAC</p></td>
-<td class="enum_member_description">
-<p>the device's MAC was invalid</p>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-DEVICE-WIMAX-ERROR-MAC-MISMATCH:CAPS"></a>NM_DEVICE_WIMAX_ERROR_MAC_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the MACs of the connection and the device mismatched</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the ID of the serving Base Station, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMDeviceWimax.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-ERROR:CAPS"></a><h3>NM_DEVICE_WIMAX_ERROR</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_ERROR nm_device_wimax_error_quark ()
-</pre>
+<a name="NMDeviceWimax--active-nsp"></a><h3>The <code class="literal">"active-nsp"</code> property</h3>
+<pre class="programlisting"> "active-nsp" <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>* : Read</pre>
<p>
+The active <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> of the device.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-HW-ADDRESS:CAPS"></a><h3>NM_DEVICE_WIMAX_HW_ADDRESS</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_HW_ADDRESS "hw-address"
-</pre>
+<a name="NMDeviceWimax--bsid"></a><h3>The <code class="literal">"bsid"</code> property</h3>
+<pre class="programlisting"> "bsid" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The ID of the serving base station as received from the network. Has
+no meaning when the device is not connected.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS"></a><h3>NM_DEVICE_WIMAX_ACTIVE_NSP</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_ACTIVE_NSP "active-nsp"
-</pre>
+<a name="NMDeviceWimax--center-frequency"></a><h3>The <code class="literal">"center-frequency"</code> property</h3>
+<pre class="programlisting"> "center-frequency" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The center frequency (in KHz) of the radio channel the device is using to
+communicate with the network when connected. Has no meaning when the
+device is not connected.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS"></a><h3>NM_DEVICE_WIMAX_CENTER_FREQUENCY</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_CENTER_FREQUENCY "center-frequency"
-</pre>
+<a name="NMDeviceWimax--cinr"></a><h3>The <code class="literal">"cinr"</code> property</h3>
+<pre class="programlisting"> "cinr" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre>
<p>
+CINR (Carrier to Interference + Noise Ratio) of the current radio link
+in dB. CINR is a more accurate measure of radio link quality. Has no
+meaning when the device is not connected.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-RSSI:CAPS"></a><h3>NM_DEVICE_WIMAX_RSSI</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_RSSI "rssi"
-</pre>
+<a name="NMDeviceWimax--hw-address"></a><h3>The <code class="literal">"hw-address"</code> property</h3>
+<pre class="programlisting"> "hw-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The hardware (MAC) address of the device.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-CINR:CAPS"></a><h3>NM_DEVICE_WIMAX_CINR</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_CINR "cinr"
-</pre>
+<a name="NMDeviceWimax--nsps"></a><h3>The <code class="literal">"nsps"</code> property</h3>
+<pre class="programlisting"> "nsps" <span class="type">NMObjectArray</span>* : Read</pre>
<p>
+List of all WiMAX Network Service Providers the device can see.
</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-TX-POWER:CAPS"></a><h3>NM_DEVICE_WIMAX_TX_POWER</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_TX_POWER "tx-power"
-</pre>
+<a name="NMDeviceWimax--rssi"></a><h3>The <code class="literal">"rssi"</code> property</h3>
+<pre class="programlisting"> "rssi" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre>
<p>
+RSSI of the current radio link in dBm. This value indicates how strong
+the raw received RF signal from the base station is, but does not
+indicate the overall quality of the radio link. Has no meaning when the
+device is not connected.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-DEVICE-WIMAX-BSID:CAPS"></a><h3>NM_DEVICE_WIMAX_BSID</h3>
-<pre class="programlisting">#define NM_DEVICE_WIMAX_BSID "bsid"
-</pre>
+<a name="NMDeviceWimax--tx-power"></a><h3>The <code class="literal">"tx-power"</code> property</h3>
+<pre class="programlisting"> "tx-power" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre>
<p>
+Average power of the last burst transmitted by the device, in units of
+0.5 dBm. i.e. a TxPower of -11 represents an actual device TX power of
+-5.5 dBm. Has no meaning when the device is not connected.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMDeviceWimax.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMDeviceWimax--active-nsp"></a><h3>The <code class="literal">“active-nspâ€</code> property</h3>
-<pre class="programlisting"> “active-nsp†<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *</pre>
-<p>Active NSP.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWimax--bsid"></a><h3>The <code class="literal">“bsidâ€</code> property</h3>
-<pre class="programlisting"> “bsid†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>BSID.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWimax--center-frequency"></a><h3>The <code class="literal">“center-frequencyâ€</code> property</h3>
-<pre class="programlisting"> “center-frequency†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Center frequency.</p>
-<p>Flags: Read</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWimax--cinr"></a><h3>The <code class="literal">“cinrâ€</code> property</h3>
-<pre class="programlisting"> “cinr†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>CINR.</p>
-<p>Flags: Read</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWimax--hw-address"></a><h3>The <code class="literal">“hw-addressâ€</code> property</h3>
-<pre class="programlisting"> “hw-address†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Hardware MAC address.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWimax--rssi"></a><h3>The <code class="literal">“rssiâ€</code> property</h3>
-<pre class="programlisting"> “rssi†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>RSSI.</p>
-<p>Flags: Read</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMDeviceWimax--tx-power"></a><h3>The <code class="literal">“tx-powerâ€</code> property</h3>
-<pre class="programlisting"> “tx-power†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>TX Power.</p>
-<p>Flags: Read</p>
<p>Default value: 0</p>
</div>
</div>
<div class="refsect1">
<a name="NMDeviceWimax.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMDeviceWimax-nsp-added"></a><h3>The <code class="literal">“nsp-addedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self,
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *nsp,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMDeviceWimax-nsp-added"></a><h3>The <code class="literal">"nsp-added"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self,
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *nsp,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies that a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> is added to the wimax device.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>the wimax device that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nsp</code></em> :</span></p></td>
+<td>the new NSP</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMDeviceWimax-nsp-removed"></a><h3>The <code class="literal">“nsp-removedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self,
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *nsp,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMDeviceWimax-nsp-removed"></a><h3>The <code class="literal">"nsp-removed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax"><span class="type">NMDeviceWimax</span></a> *self,
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *nsp,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Notifies that a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> is removed from the wimax device.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>the wimax device that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nsp</code></em> :</span></p></td>
+<td>the removed NSP</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMIP4Config.html b/docs/libnm-glib/html/NMIP4Config.html
index 4c5fbe766..ca30a7b2a 100644
--- a/docs/libnm-glib/html/NMIP4Config.html
+++ b/docs/libnm-glib/html/NMIP4Config.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMIP4Config</title>
+<title>NMIP4Config</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMAccessPoint.html" title="NMAccessPoint">
<link rel="next" href="NMIP6Config.html" title="NMIP6Config">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMIP4Config.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMIP4Config.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMIP4Config.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMAccessPoint.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMIP6Config.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMAccessPoint.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMIP6Config.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMIP4Config.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMIP4Config.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMIP4Config.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMIP4Config.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMIP4Config.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMIP4Config"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,405 +39,431 @@
<h2><span class="refentrytitle"><a name="NMIP4Config.top_of_page"></a>NMIP4Config</span></h2>
<p>NMIP4Config</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMIP4Config.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="NMIP4Config.html#NMIP4Config-struct" title="NMIP4Config">NMIP4Config</a>;
+ <a class="link" href="NMIP4Config.html#NMIP4ConfigClass" title="NMIP4ConfigClass">NMIP4ConfigClass</a>;
+#define <a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-GATEWAY:CAPS" title="NM_IP4_CONFIG_GATEWAY">NM_IP4_CONFIG_GATEWAY</a>
+#define <a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-ADDRESSES:CAPS" title="NM_IP4_CONFIG_ADDRESSES">NM_IP4_CONFIG_ADDRESSES</a>
+#define <a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-ROUTES:CAPS" title="NM_IP4_CONFIG_ROUTES">NM_IP4_CONFIG_ROUTES</a>
+#define <a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-NAMESERVERS:CAPS" title="NM_IP4_CONFIG_NAMESERVERS">NM_IP4_CONFIG_NAMESERVERS</a>
+#define <a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-DOMAINS:CAPS" title="NM_IP4_CONFIG_DOMAINS">NM_IP4_CONFIG_DOMAINS</a>
+#define <a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-SEARCHES:CAPS" title="NM_IP4_CONFIG_SEARCHES">NM_IP4_CONFIG_SEARCHES</a>
+#define <a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-WINS-SERVERS:CAPS" title="NM_IP4_CONFIG_WINS_SERVERS">NM_IP4_CONFIG_WINS_SERVERS</a>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMIP4Config.html#nm-ip4-config-new" title="nm_ip4_config_new ()">nm_ip4_config_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMIP4Config.html#nm-ip4-config-get-gateway" title="nm_ip4_config_get_gateway ()">nm_ip4_config_get_gateway</a> (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMIP4Config.html#nm-ip4-config-get-addresses" title="nm_ip4_config_get_addresses ()">nm_ip4_config_get_addresses</a> (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMIP4Config.html#nm-ip4-config-get-routes" title="nm_ip4_config_get_routes ()">nm_ip4_config_get_routes</a> (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * <a class="link" href="NMIP4Config.html#nm-ip4-config-get-nameservers" title="nm_ip4_config_get_nameservers ()">nm_ip4_config_get_nameservers</a> (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMIP4Config.html#nm-ip4-config-get-domains" title="nm_ip4_config_get_domains ()">nm_ip4_config_get_domains</a> (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMIP4Config.html#nm-ip4-config-get-searches" title="nm_ip4_config_get_searches ()">nm_ip4_config_get_searches</a> (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * <a class="link" href="NMIP4Config.html#nm-ip4-config-get-wins-servers" title="nm_ip4_config_get_wins_servers ()">nm_ip4_config_get_wins_servers</a> (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIP4Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMIP4Config
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIP4Config.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMIP4Config implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMIP4Config.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMIP4Config.html#NMIP4Config--addresses" title='The "addresses" property'>addresses</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read
+ "<a class="link" href="NMIP4Config.html#NMIP4Config--domains" title='The "domains" property'>domains</a>" <span class="type">NMStringArray</span>* : Read
+ "<a class="link" href="NMIP4Config.html#NMIP4Config--gateway" title='The "gateway" property'>gateway</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMIP4Config.html#NMIP4Config--nameservers" title='The "nameservers" property'>nameservers</a>" <span class="type">NMUintArray</span>* : Read
+ "<a class="link" href="NMIP4Config.html#NMIP4Config--routes" title='The "routes" property'>routes</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read
+ "<a class="link" href="NMIP4Config.html#NMIP4Config--searches" title='The "searches" property'>searches</a>" <span class="type">NMStringArray</span>* : Read
+ "<a class="link" href="NMIP4Config.html#NMIP4Config--wins-servers" title='The "wins-servers" property'>wins-servers</a>" <span class="type">NMUintArray</span>* : Read
+</pre>
+</div>
<div class="refsect1">
-<a name="NMIP4Config.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMIP4Config.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMIP4Config.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMIP4Config-struct"></a><h3>NMIP4Config</h3>
+<pre class="programlisting">typedef struct _NMIP4Config NMIP4Config;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIP4ConfigClass"></a><h3>NMIP4ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMIP4ConfigClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP4-CONFIG-GATEWAY:CAPS"></a><h3>NM_IP4_CONFIG_GATEWAY</h3>
+<pre class="programlisting">#define NM_IP4_CONFIG_GATEWAY "gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP4-CONFIG-ADDRESSES:CAPS"></a><h3>NM_IP4_CONFIG_ADDRESSES</h3>
+<pre class="programlisting">#define NM_IP4_CONFIG_ADDRESSES "addresses"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP4-CONFIG-ROUTES:CAPS"></a><h3>NM_IP4_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_IP4_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP4-CONFIG-NAMESERVERS:CAPS"></a><h3>NM_IP4_CONFIG_NAMESERVERS</h3>
+<pre class="programlisting">#define NM_IP4_CONFIG_NAMESERVERS "nameservers"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP4-CONFIG-DOMAINS:CAPS"></a><h3>NM_IP4_CONFIG_DOMAINS</h3>
+<pre class="programlisting">#define NM_IP4_CONFIG_DOMAINS "domains"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP4-CONFIG-SEARCHES:CAPS"></a><h3>NM_IP4_CONFIG_SEARCHES</h3>
+<pre class="programlisting">#define NM_IP4_CONFIG_SEARCHES "searches"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP4-CONFIG-WINS-SERVERS:CAPS"></a><h3>NM_IP4_CONFIG_WINS_SERVERS</h3>
+<pre class="programlisting">#define NM_IP4_CONFIG_WINS_SERVERS "wins-servers"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip4-config-new"></a><h3>nm_ip4_config_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_ip4_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP4Config.html#nm-ip4-config-new" title="nm_ip4_config_new ()">nm_ip4_config_new</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-addresses" title="nm_ip4_config_get_addresses ()">nm_ip4_config_get_addresses</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-nameservers" title="nm_ip4_config_get_nameservers ()">nm_ip4_config_get_nameservers</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-domains" title="nm_ip4_config_get_domains ()">nm_ip4_config_get_domains</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-routes" title="nm_ip4_config_get_routes ()">nm_ip4_config_get_routes</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>object_path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-wins-servers" title="nm_ip4_config_get_wins_servers ()">nm_ip4_config_get_wins_servers</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new IP4 configuration. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMIP4Config.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-ip4-config-get-gateway"></a><h3>nm_ip4_config_get_gateway ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_ip4_config_get_gateway (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP4 gateway address.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
-<td class="property_name"><a class="link" href="NMIP4Config.html#NMIP4Config--addresses" title="The “addresses†property">addresses</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMStringArray</span> *</td>
-<td class="property_name"><a class="link" href="NMIP4Config.html#NMIP4Config--domains" title="The “domains†property">domains</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMUintArray</span> *</td>
-<td class="property_name"><a class="link" href="NMIP4Config.html#NMIP4Config--nameservers" title="The “nameservers†property">nameservers</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
-<td class="property_name"><a class="link" href="NMIP4Config.html#NMIP4Config--routes" title="The “routes†property">routes</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="property_type">
-<span class="type">NMUintArray</span> *</td>
-<td class="property_name"><a class="link" href="NMIP4Config.html#NMIP4Config--wins-servers" title="The “wins-servers†property">wins-servers</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP4 address of the gateway.</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<div class="refsect1">
-<a name="NMIP4Config.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-ip4-config-get-addresses"></a><h3>nm_ip4_config_get_addresses ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_ip4_config_get_addresses (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP4 addresses (containing the address, prefix, and gateway).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-ADDRESSES:CAPS" title="NM_IP4_CONFIG_ADDRESSES">NM_IP4_CONFIG_ADDRESSES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-NAMESERVERS:CAPS" title="NM_IP4_CONFIG_NAMESERVERS">NM_IP4_CONFIG_NAMESERVERS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-DOMAINS:CAPS" title="NM_IP4_CONFIG_DOMAINS">NM_IP4_CONFIG_DOMAINS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-ROUTES:CAPS" title="NM_IP4_CONFIG_ROUTES">NM_IP4_CONFIG_ROUTES</a></td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-WINS-SERVERS:CAPS" title="NM_IP4_CONFIG_WINS_SERVERS">NM_IP4_CONFIG_WINS_SERVERS</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>es.
+This is the internal copy used by the configuration and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Address]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMIP4Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMIP4Config
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMIP4Config.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="nm-ip4-config-get-routes"></a><h3>nm_ip4_config_get_routes ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_ip4_config_get_routes (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
<p>
+Gets the routes.
</p>
-</div>
-<div class="refsect1">
-<a name="NMIP4Config.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-ip4-config-new"></a><h3>nm_ip4_config_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_ip4_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.18.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>object_path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing
+<a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Routes</span></a>. This is the internal copy used by the configuration,
+and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Route]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.18.8.2.6"></a><h4>Returns</h4>
-<p> a new IP4 configuration. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-config-get-addresses"></a><h3>nm_ip4_config_get_addresses ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_ip4_config_get_addresses (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
-<p>Gets the IP4 addresses (containing the address, prefix, and gateway).</p>
-<div class="refsect3">
-<a name="id-1.3.18.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-config-get-nameservers"></a><h3>nm_ip4_config_get_nameservers ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * nm_ip4_config_get_nameservers (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the domain name servers (DNS).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> containing <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a>.
+This is the internal copy used by the configuration and must not be
+modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint32]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.18.8.3.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>es.
-This is the internal copy used by the configuration and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Address]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-config-get-nameservers"></a><h3>nm_ip4_config_get_nameservers ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> *
-nm_ip4_config_get_nameservers (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
-<p>Gets the domain name servers (DNS).</p>
-<div class="refsect3">
-<a name="id-1.3.18.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-config-get-domains"></a><h3>nm_ip4_config_get_domains ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_ip4_config_get_domains (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the domain names.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing domains as strings. This is the
+internal copy used by the configuration, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.18.8.4.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> containing <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><code class="literal">guint32</code></a>s. This is the internal copy used by the
-configuration and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint32]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-config-get-domains"></a><h3>nm_ip4_config_get_domains ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_ip4_config_get_domains (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
-<p>Gets the domain names.</p>
-<div class="refsect3">
-<a name="id-1.3.18.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.18.8.5.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing domains as strings. This is the
-internal copy used by the configuration, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-ip4-config-get-routes"></a><h3>nm_ip4_config_get_routes ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_ip4_config_get_routes (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
-<p>Gets the routes.</p>
-<div class="refsect3">
-<a name="id-1.3.18.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-config-get-searches"></a><h3>nm_ip4_config_get_searches ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_ip4_config_get_searches (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the dns searches.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing dns searches as strings. This is the
+internal copy used by the configuration, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.18.8.6.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing
-<a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>s. This is the internal copy used by the configuration,
-and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Route]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-config-get-wins-servers"></a><h3>nm_ip4_config_get_wins_servers ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> *
-nm_ip4_config_get_wins_servers (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
-<p>Gets the Windows Internet Name Service servers (WINS).</p>
-<div class="refsect3">
-<a name="id-1.3.18.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-config-get-wins-servers"></a><h3>nm_ip4_config_get_wins_servers ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * nm_ip4_config_get_wins_servers (<em class="parameter"><code><a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the Windows Internet Name Service servers (WINS).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP4Config.html" title="NMIP4Config"><span class="type">NMIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> containing <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a>.
+This is the internal copy used by the configuration and must not be
+modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint32]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.18.8.7.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> containing <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><code class="literal">guint32</code></a>s.
-This is the internal copy used by the configuration and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint32]</span></p>
-</div>
-</div>
</div>
<div class="refsect1">
-<a name="NMIP4Config.other_details"></a><h2>Types and Values</h2>
+<a name="NMIP4Config.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-IP4-CONFIG-ADDRESSES:CAPS"></a><h3>NM_IP4_CONFIG_ADDRESSES</h3>
-<pre class="programlisting">#define NM_IP4_CONFIG_ADDRESSES "addresses"
-</pre>
+<a name="NMIP4Config--addresses"></a><h3>The <code class="literal">"addresses"</code> property</h3>
+<pre class="programlisting"> "addresses" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>es of the configuration.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-IP4-CONFIG-NAMESERVERS:CAPS"></a><h3>NM_IP4_CONFIG_NAMESERVERS</h3>
-<pre class="programlisting">#define NM_IP4_CONFIG_NAMESERVERS "nameservers"
-</pre>
+<a name="NMIP4Config--domains"></a><h3>The <code class="literal">"domains"</code> property</h3>
+<pre class="programlisting"> "domains" <span class="type">NMStringArray</span>* : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing domain strings of the configuration.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-IP4-CONFIG-DOMAINS:CAPS"></a><h3>NM_IP4_CONFIG_DOMAINS</h3>
-<pre class="programlisting">#define NM_IP4_CONFIG_DOMAINS "domains"
-</pre>
+<a name="NMIP4Config--gateway"></a><h3>The <code class="literal">"gateway"</code> property</h3>
+<pre class="programlisting"> "gateway" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The IP4 gateway address of the configuration as string.
</p>
+<p>Default value: NULL</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-IP4-CONFIG-ROUTES:CAPS"></a><h3>NM_IP4_CONFIG_ROUTES</h3>
-<pre class="programlisting">#define NM_IP4_CONFIG_ROUTES "routes"
-</pre>
+<a name="NMIP4Config--nameservers"></a><h3>The <code class="literal">"nameservers"</code> property</h3>
+<pre class="programlisting"> "nameservers" <span class="type">NMUintArray</span>* : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> containing name servers (<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a>) of the configuration.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-IP4-CONFIG-WINS-SERVERS:CAPS"></a><h3>NM_IP4_CONFIG_WINS_SERVERS</h3>
-<pre class="programlisting">#define NM_IP4_CONFIG_WINS_SERVERS "wins-servers"
-</pre>
+<a name="NMIP4Config--routes"></a><h3>The <code class="literal">"routes"</code> property</h3>
+<pre class="programlisting"> "routes" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing <span class="type">NMSettingIP4Routes</span> of the configuration.
</p>
</div>
-</div>
-<div class="refsect1">
-<a name="NMIP4Config.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMIP4Config--addresses"></a><h3>The <code class="literal">“addressesâ€</code> property</h3>
-<pre class="programlisting"> “addresses†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
-<p>Addresses.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMIP4Config--domains"></a><h3>The <code class="literal">“domainsâ€</code> property</h3>
-<pre class="programlisting"> “domains†<span class="type">NMStringArray</span> *</pre>
-<p>Domains.</p>
-<p>Flags: Read</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMIP4Config--nameservers"></a><h3>The <code class="literal">“nameserversâ€</code> property</h3>
-<pre class="programlisting"> “nameservers†<span class="type">NMUintArray</span> *</pre>
-<p>Nameservers.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMIP4Config--routes"></a><h3>The <code class="literal">“routesâ€</code> property</h3>
-<pre class="programlisting"> “routes†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
-<p>Routes.</p>
-<p>Flags: Read</p>
+<a name="NMIP4Config--searches"></a><h3>The <code class="literal">"searches"</code> property</h3>
+<pre class="programlisting"> "searches" <span class="type">NMStringArray</span>* : Read</pre>
+<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing dns search strings of the configuration.
+</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMIP4Config--wins-servers"></a><h3>The <code class="literal">“wins-serversâ€</code> property</h3>
-<pre class="programlisting"> “wins-servers†<span class="type">NMUintArray</span> *</pre>
-<p>WINS Servers.</p>
-<p>Flags: Read</p>
+<a name="NMIP4Config--wins-servers"></a><h3>The <code class="literal">"wins-servers"</code> property</h3>
+<pre class="programlisting"> "wins-servers" <span class="type">NMUintArray</span>* : Read</pre>
+<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> containing WINS servers (<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a>) of the configuration.
+</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMIP6Config.html b/docs/libnm-glib/html/NMIP6Config.html
index 4d918c546..9f0865a2d 100644
--- a/docs/libnm-glib/html/NMIP6Config.html
+++ b/docs/libnm-glib/html/NMIP6Config.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMIP6Config</title>
+<title>NMIP6Config</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMIP4Config.html" title="NMIP4Config">
<link rel="next" href="NMDHCP4Config.html" title="NMDHCP4Config">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMIP6Config.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMIP6Config.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMIP6Config.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMIP4Config.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMDHCP4Config.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMIP4Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMDHCP4Config.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMIP6Config.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMIP6Config.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMIP6Config.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMIP6Config.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMIP6Config.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMIP6Config"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,349 +39,450 @@
<h2><span class="refentrytitle"><a name="NMIP6Config.top_of_page"></a>NMIP6Config</span></h2>
<p>NMIP6Config</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMIP6Config.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="NMIP6Config.html#NMIP6Config-struct" title="NMIP6Config">NMIP6Config</a>;
+ <a class="link" href="NMIP6Config.html#NMIP6ConfigClass" title="NMIP6ConfigClass">NMIP6ConfigClass</a>;
+#define <a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-GATEWAY:CAPS" title="NM_IP6_CONFIG_GATEWAY">NM_IP6_CONFIG_GATEWAY</a>
+#define <a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-ADDRESSES:CAPS" title="NM_IP6_CONFIG_ADDRESSES">NM_IP6_CONFIG_ADDRESSES</a>
+#define <a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-ROUTES:CAPS" title="NM_IP6_CONFIG_ROUTES">NM_IP6_CONFIG_ROUTES</a>
+#define <a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-NAMESERVERS:CAPS" title="NM_IP6_CONFIG_NAMESERVERS">NM_IP6_CONFIG_NAMESERVERS</a>
+#define <a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-DOMAINS:CAPS" title="NM_IP6_CONFIG_DOMAINS">NM_IP6_CONFIG_DOMAINS</a>
+#define <a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-SEARCHES:CAPS" title="NM_IP6_CONFIG_SEARCHES">NM_IP6_CONFIG_SEARCHES</a>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMIP6Config.html#nm-ip6-config-new" title="nm_ip6_config_new ()">nm_ip6_config_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMIP6Config.html#nm-ip6-config-get-gateway" title="nm_ip6_config_get_gateway ()">nm_ip6_config_get_gateway</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMIP6Config.html#nm-ip6-config-get-addresses" title="nm_ip6_config_get_addresses ()">nm_ip6_config_get_addresses</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMIP6Config.html#nm-ip6-config-get-routes" title="nm_ip6_config_get_routes ()">nm_ip6_config_get_routes</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMIP6Config.html#nm-ip6-config-get-num-nameservers" title="nm_ip6_config_get_num_nameservers ()">nm_ip6_config_get_num_nameservers</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);
+const struct <span class="returnvalue">in6_addr</span> * <a class="link" href="NMIP6Config.html#nm-ip6-config-get-nameserver" title="nm_ip6_config_get_nameserver ()">nm_ip6_config_get_nameserver</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMIP6Config.html#nm-ip6-config-get-nameservers" title="nm_ip6_config_get_nameservers ()">nm_ip6_config_get_nameservers</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMIP6Config.html#nm-ip6-config-get-domains" title="nm_ip6_config_get_domains ()">nm_ip6_config_get_domains</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMIP6Config.html#nm-ip6-config-get-searches" title="nm_ip6_config_get_searches ()">nm_ip6_config_get_searches</a> (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMIP6Config
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIP6Config.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMIP6Config implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
<div class="refsect1">
-<a name="NMIP6Config.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMIP6Config.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMIP6Config.html#NMIP6Config--addresses" title='The "addresses" property'>addresses</a>" <span class="type">NMIP6AddressObjectArray</span>* : Read
+ "<a class="link" href="NMIP6Config.html#NMIP6Config--domains" title='The "domains" property'>domains</a>" <span class="type">NMStringArray</span>* : Read
+ "<a class="link" href="NMIP6Config.html#NMIP6Config--gateway" title='The "gateway" property'>gateway</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMIP6Config.html#NMIP6Config--nameservers" title='The "nameservers" property'>nameservers</a>" <span class="type">NMIP6AddressArray</span>* : Read
+ "<a class="link" href="NMIP6Config.html#NMIP6Config--routes" title='The "routes" property'>routes</a>" <span class="type">NMIP6RouteObjectArray</span>* : Read
+ "<a class="link" href="NMIP6Config.html#NMIP6Config--searches" title='The "searches" property'>searches</a>" <span class="type">NMStringArray</span>* : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIP6Config.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMIP6Config.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMIP6Config-struct"></a><h3>NMIP6Config</h3>
+<pre class="programlisting">typedef struct _NMIP6Config NMIP6Config;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIP6ConfigClass"></a><h3>NMIP6ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMIP6ConfigClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP6-CONFIG-GATEWAY:CAPS"></a><h3>NM_IP6_CONFIG_GATEWAY</h3>
+<pre class="programlisting">#define NM_IP6_CONFIG_GATEWAY "gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP6-CONFIG-ADDRESSES:CAPS"></a><h3>NM_IP6_CONFIG_ADDRESSES</h3>
+<pre class="programlisting">#define NM_IP6_CONFIG_ADDRESSES "addresses"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP6-CONFIG-ROUTES:CAPS"></a><h3>NM_IP6_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_IP6_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP6-CONFIG-NAMESERVERS:CAPS"></a><h3>NM_IP6_CONFIG_NAMESERVERS</h3>
+<pre class="programlisting">#define NM_IP6_CONFIG_NAMESERVERS "nameservers"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP6-CONFIG-DOMAINS:CAPS"></a><h3>NM_IP6_CONFIG_DOMAINS</h3>
+<pre class="programlisting">#define NM_IP6_CONFIG_DOMAINS "domains"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP6-CONFIG-SEARCHES:CAPS"></a><h3>NM_IP6_CONFIG_SEARCHES</h3>
+<pre class="programlisting">#define NM_IP6_CONFIG_SEARCHES "searches"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip6-config-new"></a><h3>nm_ip6_config_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_ip6_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP6Config.html#nm-ip6-config-new" title="nm_ip6_config_new ()">nm_ip6_config_new</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-addresses" title="nm_ip6_config_get_addresses ()">nm_ip6_config_get_addresses</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>object_path</code></em> :</span></p></td>
+<td>the DBus object path of the device</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-nameservers" title="nm_ip6_config_get_nameservers ()">nm_ip6_config_get_nameservers</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new IP6 configuration. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip6-config-get-gateway"></a><h3>nm_ip6_config_get_gateway ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_ip6_config_get_gateway (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP6 gateway.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-domains" title="nm_ip6_config_get_domains ()">nm_ip6_config_get_domains</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-routes" title="nm_ip6_config_get_routes ()">nm_ip6_config_get_routes</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 gateway of the configuration.</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<div class="refsect1">
-<a name="NMIP6Config.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-ip6-config-get-addresses"></a><h3>nm_ip6_config_get_addresses ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_ip6_config_get_addresses (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP6 addresses (containing the address, prefix, and gateway).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<span class="type">NMIP6AddressObjectArray</span> *</td>
-<td class="property_name"><a class="link" href="NMIP6Config.html#NMIP6Config--addresses" title="The “addresses†property">addresses</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMStringArray</span> *</td>
-<td class="property_name"><a class="link" href="NMIP6Config.html#NMIP6Config--domains" title="The “domains†property">domains</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">NMIP6AddressArray</span> *</td>
-<td class="property_name"><a class="link" href="NMIP6Config.html#NMIP6Config--nameservers" title="The “nameservers†property">nameservers</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="property_type">
-<span class="type">NMIP6RouteObjectArray</span> *</td>
-<td class="property_name"><a class="link" href="NMIP6Config.html#NMIP6Config--routes" title="The “routes†property">routes</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing
+<a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>es. This is the internal copy used by the configuration
+and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Address]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMIP6Config.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-ip6-config-get-routes"></a><h3>nm_ip6_config_get_routes ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_ip6_config_get_routes (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the routes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-ADDRESSES:CAPS" title="NM_IP6_CONFIG_ADDRESSES">NM_IP6_CONFIG_ADDRESSES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-NAMESERVERS:CAPS" title="NM_IP6_CONFIG_NAMESERVERS">NM_IP6_CONFIG_NAMESERVERS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-DOMAINS:CAPS" title="NM_IP6_CONFIG_DOMAINS">NM_IP6_CONFIG_DOMAINS</a></td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-ROUTES:CAPS" title="NM_IP6_CONFIG_ROUTES">NM_IP6_CONFIG_ROUTES</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing
+<a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Routes</span></a>. This is the internal copy used by the configuration,
+and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Route]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMIP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMIP6Config
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMIP6Config.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="nm-ip6-config-get-num-nameservers"></a><h3>nm_ip6_config_get_num_nameservers ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip6_config_get_num_nameservers (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
<p>
+Gets the number of the domain name servers in the configuration.
</p>
-</div>
-<div class="refsect1">
-<a name="NMIP6Config.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-ip6-config-new"></a><h3>nm_ip6_config_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_ip6_config_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *object_path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.19.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>object_path</p></td>
-<td class="parameter_description"><p>the DBus object path of the device</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of domain name servers</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.19.8.2.6"></a><h4>Returns</h4>
-<p> a new IP6 configuration. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-config-get-addresses"></a><h3>nm_ip6_config_get_addresses ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_ip6_config_get_addresses (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
-<p>Gets the IP6 addresses (containing the address, prefix, and gateway).</p>
-<div class="refsect3">
-<a name="id-1.3.19.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-config-get-nameserver"></a><h3>nm_ip6_config_get_nameserver ()</h3>
+<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> * nm_ip6_config_get_nameserver (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<p>
+Gets the domain name server at index <em class="parameter"><code>idx</code></em> in the configuration.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>index of the nameserver to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 address of domain name server at index <em class="parameter"><code>iidx</code></em>. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.19.8.3.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing
-<a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>es. This is the internal copy used by the configuration
-and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Address]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-config-get-nameservers"></a><h3>nm_ip6_config_get_nameservers ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_ip6_config_get_nameservers (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
-<p>Gets the domain name servers (DNS).</p>
-<div class="refsect3">
-<a name="id-1.3.19.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-config-get-nameservers"></a><h3>nm_ip6_config_get_nameservers ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_ip6_config_get_nameservers (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the domain name servers (DNS).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.19.8.4.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing elements of type 'struct in6_addr' which
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing elements of type 'struct in6_addr' which
contain the addresses of nameservers of the configuration. This is the
-internal copy used by the configuration and must not be modified.</p>
-<p></p>
-</div>
+internal copy used by the configuration and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-config-get-domains"></a><h3>nm_ip6_config_get_domains ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_ip6_config_get_domains (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
-<p>Gets the domain names.</p>
-<div class="refsect3">
-<a name="id-1.3.19.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-config-get-domains"></a><h3>nm_ip6_config_get_domains ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_ip6_config_get_domains (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the domain names.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing domains as strings.
+This is the internal copy used by the configuration, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.19.8.5.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing domains as strings.
-This is the internal copy used by the configuration, and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-config-get-routes"></a><h3>nm_ip6_config_get_routes ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_ip6_config_get_routes (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
-<p>Gets the routes.</p>
-<div class="refsect3">
-<a name="id-1.3.19.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-config-get-searches"></a><h3>nm_ip6_config_get_searches ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_ip6_config_get_searches (<em class="parameter"><code><a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a> *config</code></em>);</pre>
+<p>
+Gets the dns searches.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>config</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="type">NMIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing dns searches as strings.
+This is the internal copy used by the configuration, and must not be modified. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.19.8.6.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> containing
-<a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>s. This is the internal copy used by the configuration,
-and must not be modified. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Route]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
</div>
<div class="refsect1">
-<a name="NMIP6Config.other_details"></a><h2>Types and Values</h2>
+<a name="NMIP6Config.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-IP6-CONFIG-ADDRESSES:CAPS"></a><h3>NM_IP6_CONFIG_ADDRESSES</h3>
-<pre class="programlisting">#define NM_IP6_CONFIG_ADDRESSES "addresses"
-</pre>
+<a name="NMIP6Config--addresses"></a><h3>The <code class="literal">"addresses"</code> property</h3>
+<pre class="programlisting"> "addresses" <span class="type">NMIP6AddressObjectArray</span>* : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing the IPv6 addresses; use
+<a href="https://developer.gnome.org/libnm-util/0.9/libnm-util-nm-utils.html#nm-utils-ip6-addresses-from-gvalue"><code class="function">nm_utils_ip6_addresses_from_gvalue()</code></a> to return a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of
+<span class="type">NMSettingIP6Address</span> objects that is more usable than the raw data.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-IP6-CONFIG-NAMESERVERS:CAPS"></a><h3>NM_IP6_CONFIG_NAMESERVERS</h3>
-<pre class="programlisting">#define NM_IP6_CONFIG_NAMESERVERS "nameservers"
-</pre>
+<a name="NMIP6Config--domains"></a><h3>The <code class="literal">"domains"</code> property</h3>
+<pre class="programlisting"> "domains" <span class="type">NMStringArray</span>* : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing domain strings of the configuration.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-IP6-CONFIG-DOMAINS:CAPS"></a><h3>NM_IP6_CONFIG_DOMAINS</h3>
-<pre class="programlisting">#define NM_IP6_CONFIG_DOMAINS "domains"
-</pre>
+<a name="NMIP6Config--gateway"></a><h3>The <code class="literal">"gateway"</code> property</h3>
+<pre class="programlisting"> "gateway" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The IPv6 gateway as string
</p>
+<p>Default value: NULL</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-IP6-CONFIG-ROUTES:CAPS"></a><h3>NM_IP6_CONFIG_ROUTES</h3>
-<pre class="programlisting">#define NM_IP6_CONFIG_ROUTES "routes"
-</pre>
+<a name="NMIP6Config--nameservers"></a><h3>The <code class="literal">"nameservers"</code> property</h3>
+<pre class="programlisting"> "nameservers" <span class="type">NMIP6AddressArray</span>* : Read</pre>
<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing elements of type 'struct ip6_addr' which
+contain the addresses of nameservers of the configuration.
</p>
</div>
-</div>
-<div class="refsect1">
-<a name="NMIP6Config.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMIP6Config--addresses"></a><h3>The <code class="literal">“addressesâ€</code> property</h3>
-<pre class="programlisting"> “addresses†<span class="type">NMIP6AddressObjectArray</span> *</pre>
-<p>Addresses.</p>
-<p>Flags: Read</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMIP6Config--domains"></a><h3>The <code class="literal">“domainsâ€</code> property</h3>
-<pre class="programlisting"> “domains†<span class="type">NMStringArray</span> *</pre>
-<p>Domains.</p>
-<p>Flags: Read</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMIP6Config--nameservers"></a><h3>The <code class="literal">“nameserversâ€</code> property</h3>
-<pre class="programlisting"> “nameservers†<span class="type">NMIP6AddressArray</span> *</pre>
-<p>Nameservers.</p>
-<p>Flags: Read</p>
+<a name="NMIP6Config--routes"></a><h3>The <code class="literal">"routes"</code> property</h3>
+<pre class="programlisting"> "routes" <span class="type">NMIP6RouteObjectArray</span>* : Read</pre>
+<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing the IPv6 routes; use
+<a href="https://developer.gnome.org/libnm-util/0.9/libnm-util-nm-utils.html#nm-utils-ip6-routes-from-gvalue"><code class="function">nm_utils_ip6_routes_from_gvalue()</code></a> to return a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of
+<span class="type">NMSettingIP6Address</span> objects that is more usable than the raw data.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMIP6Config--routes"></a><h3>The <code class="literal">“routesâ€</code> property</h3>
-<pre class="programlisting"> “routes†<span class="type">NMIP6RouteObjectArray</span> *</pre>
-<p>Routes.</p>
-<p>Flags: Read</p>
+<a name="NMIP6Config--searches"></a><h3>The <code class="literal">"searches"</code> property</h3>
+<pre class="programlisting"> "searches" <span class="type">NMStringArray</span>* : Read</pre>
+<p>
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing dns search strings of the configuration.
+</p>
+<p class="since">Since 0.9.10</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMObject.html b/docs/libnm-glib/html/NMObject.html
index 6d3c8a09e..99b05001e 100644
--- a/docs/libnm-glib/html/NMObject.html
+++ b/docs/libnm-glib/html/NMObject.html
@@ -2,29 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMObject</title>
+<title>NMObject</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDHCP6Config.html" title="NMDHCP6Config">
<link rel="next" href="NMRemoteConnection.html" title="NMRemoteConnection">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMObject.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMObject.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMObject.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMObject.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDHCP6Config.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMRemoteConnection.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDHCP6Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMRemoteConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMObject.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMObject.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMObject.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMObject.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMObject.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMObject.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMObject"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,286 +41,281 @@
<h2><span class="refentrytitle"><a name="NMObject.top_of_page"></a>NMObject</span></h2>
<p>NMObject</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMObject.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMObject.html#NMObjectError" title="enum NMObjectError">NMObjectError</a>;
+#define <a class="link" href="NMObject.html#NM-OBJECT-ERROR:CAPS" title="NM_OBJECT_ERROR">NM_OBJECT_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMObject.html#nm-object-error-quark" title="nm_object_error_quark ()">nm_object_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS" title="NM_OBJECT_DBUS_CONNECTION">NM_OBJECT_DBUS_CONNECTION</a>
+#define <a class="link" href="NMObject.html#NM-OBJECT-DBUS-PATH:CAPS" title="NM_OBJECT_DBUS_PATH">NM_OBJECT_DBUS_PATH</a>
+ <a class="link" href="NMObject.html#NMObject-struct" title="NMObject">NMObject</a>;
+ <a class="link" href="NMObject.html#NMObjectClass" title="NMObjectClass">NMObjectClass</a>;
+<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> * <a class="link" href="NMObject.html#nm-object-get-connection" title="nm_object_get_connection ()">nm_object_get_connection</a> (<em class="parameter"><code><a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *object</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()">nm_object_get_path</a> (<em class="parameter"><code><a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *object</code></em>);
+</pre>
+</div>
<div class="refsect1">
-<a name="NMObject.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMObject.html#nm-object-error-quark" title="nm_object_error_quark ()">nm_object_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMObject.html#nm-object-get-connection" title="nm_object_get_connection ()">nm_object_get_connection</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()">nm_object_get_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMObject.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----NMObject
+ +----<a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+ +----<a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+ +----<a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+ +----<a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+ +----<a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+ +----<a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+ +----<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMObject.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMObject implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
<a name="NMObject.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</td>
-<td class="property_name"><a class="link" href="NMObject.html#NMObject--dbus-connection" title="The “dbus-connection†property">dbus-connection</a></td>
-<td class="property_flags">Read / Write / Construct Only</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMObject.html#NMObject--dbus-path" title="The “dbus-path†property">dbus-path</a></td>
-<td class="property_flags">Read / Write / Construct Only</td>
-</tr>
-</tbody>
-</table></div>
+<pre class="synopsis">
+ "<a class="link" href="NMObject.html#NMObject--dbus-connection" title='The "dbus-connection" property'>dbus-connection</a>" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Read / Write / Construct Only
+ "<a class="link" href="NMObject.html#NMObject--dbus-path" title='The "dbus-path" property'>dbus-path</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only
+</pre>
</div>
<div class="refsect1">
<a name="NMObject.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
-</colgroup>
-<tbody><tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMObject.html#NMObject-object-creation-failed" title="The “object-creation-failed†signal">object-creation-failed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr></tbody>
-</table></div>
+<pre class="synopsis">
+ "<a class="link" href="NMObject.html#NMObject-object-creation-failed" title='The "object-creation-failed" signal'>object-creation-failed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMObject.description"></a><h2>Description</h2>
+<p>
+</p>
</div>
<div class="refsect1">
-<a name="NMObject.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMObject.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMObjectError"></a><h3>enum NMObjectError</h3>
+<pre class="programlisting">typedef enum {
+ NM_OBJECT_ERROR_UNKNOWN = 0,
+ NM_OBJECT_ERROR_OBJECT_CREATION_FAILURE,
+} NMObjectError;
+</pre>
+<p>
+Describes errors that may result from operations involving a <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMObject.html#NMObjectError" title="enum NMObjectError">NMObjectError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMObject.html#NM-OBJECT-ERROR:CAPS" title="NM_OBJECT_ERROR">NM_OBJECT_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS" title="NM_OBJECT_DBUS_CONNECTION">NM_OBJECT_DBUS_CONNECTION</a></td>
+<td><p><a name="NM-OBJECT-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_OBJECT_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMObject.html#NM-OBJECT-DBUS-PATH:CAPS" title="NM_OBJECT_DBUS_PATH">NM_OBJECT_DBUS_PATH</a></td>
+<td><p><a name="NM-OBJECT-ERROR-OBJECT-CREATION-FAILURE:CAPS"></a><span class="term"><code class="literal">NM_OBJECT_ERROR_OBJECT_CREATION_FAILURE</code></span></p></td>
+<td>an error ocured while creating an <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMObject.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> NMObject
- <span class="lineart">├──</span> <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
- <span class="lineart">├──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">├──</span> <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
- <span class="lineart">├──</span> <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
- <span class="lineart">├──</span> <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
- <span class="lineart">├──</span> <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
- <span class="lineart">├──</span> <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
- <span class="lineart">├──</span> <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
- <span class="lineart">╰──</span> <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+<hr>
+<div class="refsect2">
+<a name="NM-OBJECT-ERROR:CAPS"></a><h3>NM_OBJECT_ERROR</h3>
+<pre class="programlisting">#define NM_OBJECT_ERROR nm_object_error_quark ()
</pre>
-</div>
-<div class="refsect1">
-<a name="NMObject.description"></a><h2>Description</h2>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMObject.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-object-error-quark"></a><h3>nm_object_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_object_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.22.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> errors.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-object-get-connection"></a><h3>nm_object_get_connection ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> *
-nm_object_get_connection (<em class="parameter"><code><a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *object</code></em>);</pre>
-<p>Gets the <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>'s DBusGConnection.</p>
-<div class="refsect3">
-<a name="id-1.3.22.9.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-object-error-quark"></a><h3>nm_object_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_object_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>object</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.22.9.3.6"></a><h4>Returns</h4>
-<p> the connection. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-object-get-path"></a><h3>nm_object_get_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_object_get_path (<em class="parameter"><code><a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *object</code></em>);</pre>
-<p>Gets the DBus path of the <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.22.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>object</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-OBJECT-DBUS-CONNECTION:CAPS"></a><h3>NM_OBJECT_DBUS_CONNECTION</h3>
+<pre class="programlisting">#define NM_OBJECT_DBUS_CONNECTION "dbus-connection"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.3.22.9.4.6"></a><h4>Returns</h4>
-<p> the object's path. This is the internal string used by the
-device, and must not be modified.</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-OBJECT-DBUS-PATH:CAPS"></a><h3>NM_OBJECT_DBUS_PATH</h3>
+<pre class="programlisting">#define NM_OBJECT_DBUS_PATH "dbus-path"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMObject-struct"></a><h3>NMObject</h3>
+<pre class="programlisting">typedef struct _NMObject NMObject;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMObjectClass"></a><h3>NMObjectClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* Signals */
+ /* The "object-creation-failed" signal is PRIVATE for libnm-glib and
+ * is not meant for any external usage. It indicates that an error
+ * occured during creation of an object.
+ */
+ void (*object_creation_failed) (NMObject *master_object,
+ GError *error,
+ char *failed_path);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMObjectClass;
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMObject.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMObjectError"></a><h3>enum NMObjectError</h3>
-<p>Describes errors that may result from operations involving a <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.22.10.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-object-get-connection"></a><h3>nm_object_get_connection ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> * nm_object_get_connection (<em class="parameter"><code><a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *object</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>'s DBusGConnection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-OBJECT-ERROR-UNKNOWN:CAPS"></a>NM_OBJECT_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-OBJECT-ERROR-OBJECT-CREATION-FAILURE:CAPS"></a>NM_OBJECT_ERROR_OBJECT_CREATION_FAILURE</p></td>
-<td class="enum_member_description">
-<p>an error ocured while creating an <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a></p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-OBJECT-ERROR:CAPS"></a><h3>NM_OBJECT_ERROR</h3>
-<pre class="programlisting">#define NM_OBJECT_ERROR nm_object_error_quark ()
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-OBJECT-DBUS-CONNECTION:CAPS"></a><h3>NM_OBJECT_DBUS_CONNECTION</h3>
-<pre class="programlisting">#define NM_OBJECT_DBUS_CONNECTION "dbus-connection"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-OBJECT-DBUS-PATH:CAPS"></a><h3>NM_OBJECT_DBUS_PATH</h3>
-<pre class="programlisting">#define NM_OBJECT_DBUS_PATH "dbus-path"
-</pre>
+<a name="nm-object-get-path"></a><h3>nm_object_get_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_object_get_path (<em class="parameter"><code><a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *object</code></em>);</pre>
<p>
+Gets the DBus path of the <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the object's path. This is the internal string used by the
+device, and must not be modified.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMObject.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMObject--dbus-connection"></a><h3>The <code class="literal">“dbus-connectionâ€</code> property</h3>
-<pre class="programlisting"> “dbus-connection†<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</pre>
+<a name="NMObject--dbus-connection"></a><h3>The <code class="literal">"dbus-connection"</code> property</h3>
+<pre class="programlisting"> "dbus-connection" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Read / Write / Construct Only</pre>
<p>Connection.</p>
-<p>Flags: Read / Write / Construct Only</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMObject--dbus-path"></a><h3>The <code class="literal">“dbus-pathâ€</code> property</h3>
-<pre class="programlisting"> “dbus-path†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<a name="NMObject--dbus-path"></a><h3>The <code class="literal">"dbus-path"</code> property</h3>
+<pre class="programlisting"> "dbus-path" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre>
<p>DBus Object Path.</p>
-<p>Flags: Read / Write / Construct Only</p>
<p>Default value: NULL</p>
</div>
</div>
<div class="refsect1">
<a name="NMObject.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMObject-object-creation-failed"></a><h3>The <code class="literal">“object-creation-failedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *master_object,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> error,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> failed_path,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMObject-object-creation-failed"></a><h3>The <code class="literal">"object-creation-failed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> *master_object,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> error,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> failed_path,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Indicates that an error occured while creating an <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> object
+during property handling of <em class="parameter"><code>master_object</code></em>.
+</p>
+<p>
+Note: Be aware that the signal is private for libnm-glib's internal
+ use.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>master_object</code></em> :</span></p></td>
+<td>the object that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>the error that occured while creating object</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>failed_path</code></em> :</span></p></td>
+<td>object path of the failed object</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMRemoteConnection.html b/docs/libnm-glib/html/NMRemoteConnection.html
index 36b650d58..a5d9e2149 100644
--- a/docs/libnm-glib/html/NMRemoteConnection.html
+++ b/docs/libnm-glib/html/NMRemoteConnection.html
@@ -2,29 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMRemoteConnection</title>
+<title>NMRemoteConnection</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMObject.html" title="NMObject">
<link rel="next" href="NMRemoteSettings.html" title="NMRemoteSettings">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMRemoteConnection.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMRemoteConnection.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMRemoteConnection.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMRemoteConnection.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMObject.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMRemoteSettings.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMObject.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMRemoteSettings.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMRemoteConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMRemoteConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMRemoteConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMRemoteConnection.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMRemoteConnection.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMRemoteConnection.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMRemoteConnection"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,511 +41,635 @@
<h2><span class="refentrytitle"><a name="NMRemoteConnection.top_of_page"></a>NMRemoteConnection</span></h2>
<p>NMRemoteConnection</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMRemoteConnection.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMRemoteConnection.html#NMRemoteConnectionError" title="enum NMRemoteConnectionError">NMRemoteConnectionError</a>;
+#define <a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR:CAPS" title="NM_REMOTE_CONNECTION_ERROR">NM_REMOTE_CONNECTION_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMRemoteConnection.html#nm-remote-connection-error-quark" title="nm_remote_connection_error_quark ()">nm_remote_connection_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UNSAVED:CAPS" title="NM_REMOTE_CONNECTION_UNSAVED">NM_REMOTE_CONNECTION_UNSAVED</a>
+#define <a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UPDATED:CAPS" title="NM_REMOTE_CONNECTION_UPDATED">NM_REMOTE_CONNECTION_UPDATED</a>
+#define <a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-REMOVED:CAPS" title="NM_REMOTE_CONNECTION_REMOVED">NM_REMOTE_CONNECTION_REMOVED</a>
+ <a class="link" href="NMRemoteConnection.html#NMRemoteConnection-struct" title="NMRemoteConnection">NMRemoteConnection</a>;
+ <a class="link" href="NMRemoteConnection.html#NMRemoteConnectionClass" title="NMRemoteConnectionClass">NMRemoteConnectionClass</a>;
+<span class="returnvalue">void</span> (<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()">*NMRemoteConnectionResultFunc</a>) (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+typedef <a class="link" href="NMRemoteConnection.html#NMRemoteConnectionCommitFunc" title="NMRemoteConnectionCommitFunc">NMRemoteConnectionCommitFunc</a>;
+typedef <a class="link" href="NMRemoteConnection.html#NMRemoteConnectionDeleteFunc" title="NMRemoteConnectionDeleteFunc">NMRemoteConnectionDeleteFunc</a>;
+<span class="returnvalue">void</span> (<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc" title="NMRemoteConnectionGetSecretsFunc ()">*NMRemoteConnectionGetSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMRemoteConnection.html#nm-remote-connection-new" title="nm_remote_connection_new ()">nm_remote_connection_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()">nm_remote_connection_commit_changes</a> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes-unsaved" title="nm_remote_connection_commit_changes_unsaved ()">nm_remote_connection_commit_changes_unsaved</a>
+ (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMRemoteConnection.html#nm-remote-connection-save" title="nm_remote_connection_save ()">nm_remote_connection_save</a> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()">nm_remote_connection_delete</a> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()">nm_remote_connection_get_secrets</a> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc" title="NMRemoteConnectionGetSecretsFunc ()"><span class="type">NMRemoteConnectionGetSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-unsaved" title="nm_remote_connection_get_unsaved ()">nm_remote_connection_get_unsaved</a> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMRemoteConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html">NMConnection</a>
+ +----NMRemoteConnection
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMRemoteConnection.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMRemoteConnection implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMRemoteConnection.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--bus" title='The "bus" property'>bus</a>" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Write / Construct Only
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-connection" title='The "dbus-connection" property'>dbus-connection</a>" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Write / Construct Only
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-path" title='The "dbus-path" property'>dbus-path</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Write / Construct Only
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--unsaved" title='The "unsaved" property'>unsaved</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+</pre>
+</div>
<div class="refsect1">
-<a name="NMRemoteConnection.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMRemoteConnection.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-removed" title='The "removed" signal'>removed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-updated" title='The "updated" signal'>updated</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-visible" title='The "visible" signal'>visible</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMRemoteConnection.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMRemoteConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMRemoteConnectionError"></a><h3>enum NMRemoteConnectionError</h3>
+<pre class="programlisting">typedef enum {
+ NM_REMOTE_CONNECTION_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_REMOTE_CONNECTION_ERROR_DISCONNECTED, /*&lt; nick=Disconnected &gt;*/
+} NMRemoteConnectionError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionCommitFunc" title="NMRemoteConnectionCommitFunc ()">*NMRemoteConnectionCommitFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-REMOTE-CONNECTION-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_REMOTE_CONNECTION_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionDeleteFunc" title="NMRemoteConnectionDeleteFunc ()">*NMRemoteConnectionDeleteFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc" title="NMRemoteConnectionGetSecretsFunc ()">*NMRemoteConnectionGetSecretsFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-new" title="nm_remote_connection_new ()">nm_remote_connection_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()">nm_remote_connection_commit_changes</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()">nm_remote_connection_delete</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()">nm_remote_connection_get_secrets</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-REMOTE-CONNECTION-ERROR-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_REMOTE_CONNECTION_ERROR_DISCONNECTED</code></span></p></td>
+<td>dbus disconnected
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMRemoteConnection.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-CONNECTION-ERROR:CAPS"></a><h3>NM_REMOTE_CONNECTION_ERROR</h3>
+<pre class="programlisting">#define NM_REMOTE_CONNECTION_ERROR (nm_remote_connection_error_quark ())
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-error-quark"></a><h3>nm_remote_connection_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_remote_connection_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</td>
-<td class="property_name"><a class="link" href="NMRemoteConnection.html#NMRemoteConnection--bus" title="The “bus†property">bus</a></td>
-<td class="property_flags">Write / Construct Only</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</td>
-<td class="property_name"><a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-connection" title="The “dbus-connection†property">dbus-connection</a></td>
-<td class="property_flags">Write / Construct Only</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-path" title="The “dbus-path†property">dbus-path</a></td>
-<td class="property_flags">Write / Construct Only</td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMRemoteConnection.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-CONNECTION-UNSAVED:CAPS"></a><h3>NM_REMOTE_CONNECTION_UNSAVED</h3>
+<pre class="programlisting">#define NM_REMOTE_CONNECTION_UNSAVED "unsaved"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-CONNECTION-UPDATED:CAPS"></a><h3>NM_REMOTE_CONNECTION_UPDATED</h3>
+<pre class="programlisting">#define NM_REMOTE_CONNECTION_UPDATED "updated"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-CONNECTION-REMOVED:CAPS"></a><h3>NM_REMOTE_CONNECTION_REMOVED</h3>
+<pre class="programlisting">#define NM_REMOTE_CONNECTION_REMOVED "removed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnection-struct"></a><h3>NMRemoteConnection</h3>
+<pre class="programlisting">typedef struct _NMRemoteConnection NMRemoteConnection;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnectionClass"></a><h3>NMRemoteConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ NMConnectionClass parent_class;
+
+ /* Signals */
+ void (*updated) (NMRemoteConnection *connection,
+ GHashTable *new_settings);
+
+ void (*removed) (NMRemoteConnection *connection);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMRemoteConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnectionResultFunc"></a><h3>NMRemoteConnectionResultFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMRemoteConnectionResultFunc) (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Called when NetworkManager has finished an asynchronous operation on a
+connection, like commit changes, deleting, saving, etc.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMRemoteConnection.html#NMRemoteConnection-removed" title="The “removed†signal">removed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the connection for which an operation was performed</td>
</tr>
<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMRemoteConnection.html#NMRemoteConnection-updated" title="The “updated†signal">updated</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on failure, a descriptive error</td>
</tr>
<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMRemoteConnection.html#NMRemoteConnection-visible" title="The “visible†signal">visible</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data passed to function which began the operation</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMRemoteConnection.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UPDATED:CAPS" title="NM_REMOTE_CONNECTION_UPDATED">NM_REMOTE_CONNECTION_UPDATED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-REMOVED:CAPS" title="NM_REMOTE_CONNECTION_REMOVED">NM_REMOTE_CONNECTION_REMOVED</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMRemoteConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html">NMConnection</a>
- <span class="lineart">╰──</span> NMRemoteConnection
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnectionCommitFunc"></a><h3>NMRemoteConnectionCommitFunc</h3>
+<pre class="programlisting">typedef NMRemoteConnectionResultFunc NMRemoteConnectionCommitFunc;
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMRemoteConnection.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnectionDeleteFunc"></a><h3>NMRemoteConnectionDeleteFunc</h3>
+<pre class="programlisting">typedef NMRemoteConnectionResultFunc NMRemoteConnectionDeleteFunc;
+</pre>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMRemoteConnection.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="NMRemoteConnectionCommitFunc"></a><h3>NMRemoteConnectionCommitFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMRemoteConnectionCommitFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Called when NetworkManager has committed outstanding changes to a connection
-to backing storage as a result of <a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()"><code class="function">nm_remote_connection_commit_changes()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.23.9.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMRemoteConnectionGetSecretsFunc"></a><h3>NMRemoteConnectionGetSecretsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMRemoteConnectionGetSecretsFunc) (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Called when NetworkManager returns secrets in response to a request for
+secrets via <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()"><code class="function">nm_remote_connection_get_secrets()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the connection for which updates are to be committed</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the connection for which secrets were requested</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>secrets</code></em> :</span></p></td>
+<td>on success, a hash table of
+hash tables, with each inner hash mapping a setting property to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>
+containing that property's value. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on failure, a descriptive error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on failure, a descriptive error</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data passed to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()"><code class="function">nm_remote_connection_commit_changes()</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data passed to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()"><code class="function">nm_remote_connection_get_secrets()</code></a>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteConnectionDeleteFunc"></a><h3>NMRemoteConnectionDeleteFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMRemoteConnectionDeleteFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Called when NetworkManager has deleted a connection as a result of
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()"><code class="function">nm_remote_connection_delete()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.23.9.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-connection-new"></a><h3>nm_remote_connection_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_remote_connection_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new object representing the remote connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the connection to be deleted</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>bus</code></em> :</span></p></td>
+<td>a valid and connected D-Bus connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on failure, a descriptive error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the D-Bus path of the connection as exported by the settings service</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data passed to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()"><code class="function">nm_remote_connection_delete()</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new remote connection object on success, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteConnectionGetSecretsFunc"></a><h3>NMRemoteConnectionGetSecretsFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMRemoteConnectionGetSecretsFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Called when NetworkManager returns secrets in response to a request for
-secrets via <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()"><code class="function">nm_remote_connection_get_secrets()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.23.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-connection-commit-changes"></a><h3>nm_remote_connection_commit_changes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_commit_changes (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Send any local changes to the settings and properties of this connection to
+NetworkManager, which will immediately save them to disk.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the connection for which secrets were requested</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>secrets</p></td>
-<td class="parameter_description"><p> on success, a hash table of
-hash tables, with each inner hash mapping a setting property to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>
-containing that property's value. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span></td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on failure, a descriptive error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a function to be called when the
+commit completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data passed to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()"><code class="function">nm_remote_connection_get_secrets()</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-connection-new"></a><h3>nm_remote_connection_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> *
-nm_remote_connection_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new object representing the remote connection.</p>
-<div class="refsect3">
-<a name="id-1.3.23.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-connection-commit-changes-unsaved"></a><h3>nm_remote_connection_commit_changes_unsaved ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_commit_changes_unsaved
+ (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Send any local changes to the settings and properties of this connection to
+NetworkManager. The changes are not saved to disk until either
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-save" title="nm_remote_connection_save ()"><code class="function">nm_remote_connection_save()</code></a> or <a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()"><code class="function">nm_remote_connection_commit_changes()</code></a> is
+called.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>bus</p></td>
-<td class="parameter_description"><p>a valid and connected D-Bus connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a function to be called when the
+commit completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the D-Bus path of the connection as exported by the settings service</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.23.9.5.6"></a><h4>Returns</h4>
-<p> the new remote connection object on success, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-connection-commit-changes"></a><h3>nm_remote_connection_commit_changes ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_remote_connection_commit_changes (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionCommitFunc" title="NMRemoteConnectionCommitFunc ()"><span class="type">NMRemoteConnectionCommitFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Save any local changes to the settings and properties of this connection and
-save them in the settings service.</p>
-<div class="refsect3">
-<a name="id-1.3.23.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-connection-save"></a><h3>nm_remote_connection_save ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_save (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Saves the connection to disk if the connection has changes that have not yet
+been written to disk, or if the connection has never been saved.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> a function to be called when the
-commit completes. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a function to be called when the
+save completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-connection-delete"></a><h3>nm_remote_connection_delete ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_remote_connection_delete (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionDeleteFunc" title="NMRemoteConnectionDeleteFunc ()"><span class="type">NMRemoteConnectionDeleteFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Delete the connection.</p>
-<div class="refsect3">
-<a name="id-1.3.23.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-connection-delete"></a><h3>nm_remote_connection_delete ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_delete (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()"><span class="type">NMRemoteConnectionResultFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Delete the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> a function to be called when the delete completes. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a function to be called when the delete completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-connection-get-secrets"></a><h3>nm_remote_connection_get_secrets ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_remote_connection_get_secrets (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
- <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc" title="NMRemoteConnectionGetSecretsFunc ()"><span class="type">NMRemoteConnectionGetSecretsFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Request the connection's secrets.</p>
-<div class="refsect3">
-<a name="id-1.3.23.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-connection-get-secrets"></a><h3>nm_remote_connection_get_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_get_secrets (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc" title="NMRemoteConnectionGetSecretsFunc ()"><span class="type">NMRemoteConnectionGetSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Request the connection's secrets.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>setting_name</p></td>
-<td class="parameter_description"><p>the <a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html"><span class="type">NMSetting</span></a> object name to get secrets for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the <a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html"><span class="type">NMSetting</span></a> object name to get secrets for</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> a function to be called when the update completes;
-must not be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a function to be called when the update completes;
+must not be <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMRemoteConnection.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-REMOTE-CONNECTION-UPDATED:CAPS"></a><h3>NM_REMOTE_CONNECTION_UPDATED</h3>
-<pre class="programlisting">#define NM_REMOTE_CONNECTION_UPDATED "updated"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-REMOTE-CONNECTION-REMOVED:CAPS"></a><h3>NM_REMOTE_CONNECTION_REMOVED</h3>
-<pre class="programlisting">#define NM_REMOTE_CONNECTION_REMOVED "removed"
-</pre>
-<p>
-</p>
+<a name="nm-remote-connection-get-unsaved"></a><h3>nm_remote_connection_get_unsaved ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_remote_connection_get_unsaved (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the remote connection contains changes that have not
+been saved to disk, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the connection is the same as its on-disk
+representation.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
</div>
<div class="refsect1">
<a name="NMRemoteConnection.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMRemoteConnection--bus"></a><h3>The <code class="literal">“busâ€</code> property</h3>
-<pre class="programlisting"> “bus†<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</pre>
+<a name="NMRemoteConnection--bus"></a><h3>The <code class="literal">"bus"</code> property</h3>
+<pre class="programlisting"> "bus" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Write / Construct Only</pre>
<p>DBusGConnection.</p>
-<p>Flags: Write / Construct Only</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteConnection--dbus-connection"></a><h3>The <code class="literal">“dbus-connectionâ€</code> property</h3>
-<pre class="programlisting"> “dbus-connection†<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</pre>
+<a name="NMRemoteConnection--dbus-connection"></a><h3>The <code class="literal">"dbus-connection"</code> property</h3>
+<pre class="programlisting"> "dbus-connection" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Write / Construct Only</pre>
<p>DBusGConnection.</p>
-<p>Flags: Write / Construct Only</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteConnection--dbus-path"></a><h3>The <code class="literal">“dbus-pathâ€</code> property</h3>
-<pre class="programlisting"> “dbus-path†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<a name="NMRemoteConnection--dbus-path"></a><h3>The <code class="literal">"dbus-path"</code> property</h3>
+<pre class="programlisting"> "dbus-path" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Write / Construct Only</pre>
<p>DBus Object Path.</p>
-<p>Flags: Write / Construct Only</p>
<p>Default value: NULL</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnection--unsaved"></a><h3>The <code class="literal">"unsaved"</code> property</h3>
+<pre class="programlisting"> "unsaved" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the remote connection contains changes that have not been saved
+to disk, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the connection is the same as its on-disk representation.
+</p>
+<p>Default value: FALSE</p>
+<p class="since">Since 0.9.10</p>
+</div>
</div>
<div class="refsect1">
<a name="NMRemoteConnection.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMRemoteConnection-removed"></a><h3>The <code class="literal">“removedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMRemoteConnection-removed"></a><h3>The <code class="literal">"removed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+This signal is emitted when a connection is either deleted or becomes
+invisible to the current user.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteConnection-updated"></a><h3>The <code class="literal">“updatedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMRemoteConnection-updated"></a><h3>The <code class="literal">"updated"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+This signal is emitted when a connection changes, and it is
+still visible to the user.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteConnection-visible"></a><h3>The <code class="literal">“visibleâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *nmremoteconnection,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg1,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMRemoteConnection-visible"></a><h3>The <code class="literal">"visible"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *nmremoteconnection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg1,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nmremoteconnection</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMRemoteSettings.html b/docs/libnm-glib/html/NMRemoteSettings.html
index be81004ef..fe7118c89 100644
--- a/docs/libnm-glib/html/NMRemoteSettings.html
+++ b/docs/libnm-glib/html/NMRemoteSettings.html
@@ -2,755 +2,1038 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMRemoteSettings</title>
+<title>NMRemoteSettings</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMRemoteConnection.html" title="NMRemoteConnection">
<link rel="next" href="libnm-glib-nm-types.html" title="nm-types">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMRemoteSettings.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMRemoteSettings.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMRemoteSettings.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMRemoteSettings.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMRemoteConnection.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="libnm-glib-nm-types.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMRemoteConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="libnm-glib-nm-types.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMRemoteSettings.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMRemoteSettings.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMRemoteSettings.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMRemoteSettings.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMRemoteSettings.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMRemoteSettings.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMRemoteSettings"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="NMRemoteSettings.top_of_page"></a>NMRemoteSettings</span></h2>
-<p>NMRemoteSettings</p>
+<p>NMRemoteSettings — A helper for NetworkManager's settings API</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMRemoteSettings.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">enum <a class="link" href="NMRemoteSettings.html#NMRemoteSettingsError" title="enum NMRemoteSettingsError">NMRemoteSettingsError</a>;
+#define <a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR:CAPS" title="NM_REMOTE_SETTINGS_ERROR">NM_REMOTE_SETTINGS_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-error-quark" title="nm_remote_settings_error_quark ()">nm_remote_settings_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-BUS:CAPS" title="NM_REMOTE_SETTINGS_BUS">NM_REMOTE_SETTINGS_BUS</a>
+#define <a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS" title="NM_REMOTE_SETTINGS_SERVICE_RUNNING">NM_REMOTE_SETTINGS_SERVICE_RUNNING</a>
+#define <a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-HOSTNAME:CAPS" title="NM_REMOTE_SETTINGS_HOSTNAME">NM_REMOTE_SETTINGS_HOSTNAME</a>
+#define <a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS" title="NM_REMOTE_SETTINGS_CAN_MODIFY">NM_REMOTE_SETTINGS_CAN_MODIFY</a>
+#define <a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS" title="NM_REMOTE_SETTINGS_NEW_CONNECTION">NM_REMOTE_SETTINGS_NEW_CONNECTION</a>
+#define <a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS" title="NM_REMOTE_SETTINGS_CONNECTIONS_READ">NM_REMOTE_SETTINGS_CONNECTIONS_READ</a>
+<span class="returnvalue">void</span> (<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()">*NMRemoteSettingsAddConnectionFunc</a>)
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsLoadConnectionsFunc" title="NMRemoteSettingsLoadConnectionsFunc ()">*NMRemoteSettingsLoadConnectionsFunc</a>)
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **failures</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc" title="NMRemoteSettingsSaveHostnameFunc ()">*NMRemoteSettingsSaveHostnameFunc</a>) (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+struct <a class="link" href="NMRemoteSettings.html#NMRemoteSettings-struct" title="struct NMRemoteSettings">NMRemoteSettings</a>;
+struct <a class="link" href="NMRemoteSettings.html#NMRemoteSettingsClass" title="struct NMRemoteSettingsClass">NMRemoteSettingsClass</a>;
+<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> * <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new" title="nm_remote_settings_new ()">nm_remote_settings_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()">nm_remote_settings_new_async</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> * <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-finish" title="nm_remote_settings_new_finish ()">nm_remote_settings_new_finish</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()">nm_remote_settings_list_connections</a> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>);
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-id" title="nm_remote_settings_get_connection_by_id ()">nm_remote_settings_get_connection_by_id</a>
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *id</code></em>);
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-path" title="nm_remote_settings_get_connection_by_path ()">nm_remote_settings_get_connection_by_path</a>
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-uuid" title="nm_remote_settings_get_connection_by_uuid ()">nm_remote_settings_get_connection_by_uuid</a>
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *uuid</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-add-connection" title="nm_remote_settings_add_connection ()">nm_remote_settings_add_connection</a> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()"><span class="type">NMRemoteSettingsAddConnectionFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-add-connection-unsaved" title="nm_remote_settings_add_connection_unsaved ()">nm_remote_settings_add_connection_unsaved</a>
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()"><span class="type">NMRemoteSettingsAddConnectionFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-load-connections" title="nm_remote_settings_load_connections ()">nm_remote_settings_load_connections</a> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **filenames</code></em>,
+ <em class="parameter"><code><span class="type">char</span> ***failures</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-reload-connections" title="nm_remote_settings_reload_connections ()">nm_remote_settings_reload_connections</a>
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-save-hostname" title="nm_remote_settings_save_hostname ()">nm_remote_settings_save_hostname</a> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *hostname</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc" title="NMRemoteSettingsSaveHostnameFunc ()"><span class="type">NMRemoteSettingsSaveHostnameFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMRemoteSettings.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----NMRemoteSettings
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMRemoteSettings.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMRemoteSettings implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMRemoteSettings.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--bus" title='The "bus" property'>bus</a>" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Read / Write / Construct Only
+ "<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--can-modify" title='The "can-modify" property'>can-modify</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+ "<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--hostname" title='The "hostname" property'>hostname</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--service-running" title='The "service-running" property'>service-running</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMRemoteSettings.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMRemoteSettings.html#NMRemoteSettings-connections-read" title='The "connections-read" signal'>connections-read</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMRemoteSettings.html#NMRemoteSettings-new-connection" title='The "new-connection" signal'>new-connection</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMRemoteSettings.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object represents NetworkManager's "settings" service,
+which stores network configuration and allows authenticated clients to
+add, delete, and modify that configuration. The data required to connect
+to a specific network is called a "connection" and encapsulated by the
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> object. Once a connection is known to NetworkManager, having
+either been added by a user or read from on-disk storage, the
+<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object creates a <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object which
+represents this stored connection. Use the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object to
+perform any operations like modification or deletion.
+</p>
+<p>
+To add a new network connection to the NetworkManager settings service, first
+build up a template <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> object. Since this connection is not yet
+added to NetworkManager, it is known only to your program and is not yet
+an <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>. Then ask <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> to add your connection.
+When the connection is added successfully, the supplied callback is called
+and returns to your program the new <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> which represents
+the stored object known to NetworkManager.
+</p>
+<p>
+</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
+<span class="function">added_cb</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">NMRemoteSettings</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">settings</span><span class="symbol">,</span>
+<span class="normal"> </span><span class="usertype">NMRemoteConnection</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">remote</span><span class="symbol">,</span>
+<span class="normal"> </span><span class="usertype">GError</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">error</span><span class="symbol">,</span>
+<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> user_data</span><span class="symbol">)</span>
+<span class="cbracket">{</span>
+<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">error</span><span class="symbol">)</span>
+<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Error adding connection: %s"</span><span class="symbol">,</span><span class="normal"> error</span><span class="symbol">-&gt;</span><span class="normal">message</span><span class="symbol">);</span>
+<span class="normal"> </span><span class="keyword">else</span><span class="normal"> </span><span class="cbracket">{</span>
+<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Added: %s</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-get-path">nm_connection_get_path</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">NM_CONNECTION</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">remote</span><span class="symbol">)));</span>
+<span class="normal"> </span><span class="comment">/* Use 'remote' with nm_remote_connection_commit_changes() to save</span>
+<span class="comment"> * changes and nm_remote_connection_delete() to delete the connection */</span>
+<span class="normal"> </span><span class="cbracket">}</span>
+<span class="cbracket">}</span>
+
+<span class="keyword">static</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean">gboolean</a></span>
+<span class="function">add_wired_connection</span><span class="normal"> </span><span class="symbol">(</span><span class="keyword">const</span><span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">human_name</span><span class="symbol">)</span>
+<span class="cbracket">{</span>
+<span class="normal"> </span><span class="usertype">NMConnection</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">connection</span><span class="symbol">;</span>
+<span class="normal"> </span><span class="usertype">NMSettingConnection</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">s_con</span><span class="symbol">;</span>
+<span class="normal"> </span><span class="usertype">NMSettingWired</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">s_wired</span><span class="symbol">;</span>
+<span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">uuid</span><span class="symbol">;</span>
+<span class="normal"> </span><span class="usertype">gboolean</span><span class="normal"> success</span><span class="symbol">;</span>
+
+<span class="normal"> connection </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-new">nm_connection_new</a></span><span class="normal"> </span><span class="symbol">();</span>
+
+<span class="normal"> </span><span class="comment">/* Build up the 'connection' setting */</span>
+<span class="normal"> s_con </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="https://developer.gnome.org/libnm-util/0.9/NMSettingConnection.html">NMSettingConnection</a> </span><span class="symbol">*)</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMSettingConnection.html#nm-setting-connection-new">nm_setting_connection_new</a></span><span class="normal"> </span><span class="symbol">();</span>
+<span class="normal"> uuid </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/libnm-util-nm-utils.html#nm-utils-uuid-generate">nm_utils_uuid_generate</a></span><span class="normal"> </span><span class="symbol">();</span>
+<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-set">g_object_set</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#G-OBJECT:CAPS">G_OBJECT</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">s_con</span><span class="symbol">),</span>
+<span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingConnection.html#NM-SETTING-CONNECTION-UUID:CAPS">NM_SETTING_CONNECTION_UUID</a></span><span class="symbol">,</span><span class="normal"> uuid</span><span class="symbol">,</span>
+<span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS">NM_SETTING_CONNECTION_ID</a></span><span class="symbol">,</span><span class="normal"> human_name</span><span class="symbol">,</span>
+<span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingConnection.html#NM-SETTING-CONNECTION-TYPE:CAPS">NM_SETTING_CONNECTION_TYPE</a></span><span class="symbol">,</span><span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS">NM_SETTING_WIRED_SETTING_NAME</a></span><span class="symbol">,</span>
+<span class="normal"> <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
+<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">uuid</span><span class="symbol">);</span>
+<span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-add-setting">nm_connection_add_setting</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">connection</span><span class="symbol">,</span><span class="normal"> </span><span class="function">NM_SETTING</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">s_con</span><span class="symbol">));</span>
+
+<span class="normal"> </span><span class="comment">/* Add the required 'wired' setting as this is a wired connection */</span>
+<span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-add-setting">nm_connection_add_setting</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">connection</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMSettingWired.html#nm-setting-wired-new">nm_setting_wired_new</a></span><span class="normal"> </span><span class="symbol">());</span>
+
+<span class="normal"> </span><span class="comment">/* Add an 'ipv4' setting using AUTO configuration (eg DHCP) */</span>
+<span class="normal"> s_ip4 </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html">NMSettingIP4Config</a> </span><span class="symbol">*)</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#nm-setting-ip4-config-new">nm_setting_ip4_config_new</a></span><span class="normal"> </span><span class="symbol">();</span>
+<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-set">g_object_set</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#G-OBJECT:CAPS">G_OBJECT</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">s_ip4</span><span class="symbol">),</span>
+<span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD:CAPS">NM_SETTING_IP4_CONFIG_METHOD</a></span><span class="symbol">,</span><span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS">NM_SETTING_IP4_CONFIG_METHOD_AUTO</a></span><span class="symbol">,</span>
+<span class="normal"> <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
+<span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-add-setting">nm_connection_add_setting</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">connection</span><span class="symbol">,</span><span class="normal"> </span><span class="function">NM_SETTING</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">s_ip4</span><span class="symbol">));</span>
+
+<span class="normal"> </span><span class="comment">/* Ask NetworkManager to store the connection */</span>
+<span class="normal"> success </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="NMRemoteSettings.html#nm-remote-settings-add-connection">nm_remote_settings_add_connection</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">settings</span><span class="symbol">,</span><span class="normal"> connection</span><span class="symbol">,</span><span class="normal"> added_cb</span><span class="symbol">,</span><span class="normal"> loop</span><span class="symbol">);</span>
+
+<span class="normal"> </span><span class="comment">/* Release the template connection; the actual stored connection will</span>
+<span class="comment"> * be returned in added_cb() */</span>
+<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">connection</span><span class="symbol">);</span>
+
+<span class="normal"> </span><span class="comment">/* Let glib event loop run and added_cb() will be called when NetworkManager</span>
+<span class="comment"> * is done adding the new connection. */</span>
+
+<span class="normal"> </span><span class="keyword">return</span><span class="normal"> success</span><span class="symbol">;</span>
+<span class="cbracket">}</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p>
+</p>
+</div>
<div class="refsect1">
-<a name="NMRemoteSettings.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMRemoteSettings.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMRemoteSettingsError"></a><h3>enum NMRemoteSettingsError</h3>
+<pre class="programlisting">typedef enum {
+ NM_REMOTE_SETTINGS_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED, /*&lt; nick=ConnectionRemoved &gt;*/
+ NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE, /*&lt; nick=ConnectionUnavailable &gt;*/
+ NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE, /*&lt; nick=ServiceUnavailable &gt;*/
+} NMRemoteSettingsError;
+</pre>
+<p>
+Describes errors that may result from operations involving a <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-error-quark" title="nm_remote_settings_error_quark ()">nm_remote_settings_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()">*NMRemoteSettingsAddConnectionFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc" title="NMRemoteSettingsSaveHostnameFunc ()">*NMRemoteSettingsSaveHostnameFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new" title="nm_remote_settings_new ()">nm_remote_settings_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()">nm_remote_settings_new_async</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-finish" title="nm_remote_settings_new_finish ()">nm_remote_settings_new_finish</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()">nm_remote_settings_list_connections</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-path" title="nm_remote_settings_get_connection_by_path ()">nm_remote_settings_get_connection_by_path</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-REMOTE-SETTINGS-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_REMOTE_SETTINGS_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-uuid" title="nm_remote_settings_get_connection_by_uuid ()">nm_remote_settings_get_connection_by_uuid</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-REMOTE-SETTINGS-ERROR-CONNECTION-REMOVED:CAPS"></a><span class="term"><code class="literal">NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED</code></span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object
+ was removed before it was completely initialized
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-add-connection" title="nm_remote_settings_add_connection ()">nm_remote_settings_add_connection</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-REMOTE-SETTINGS-ERROR-CONNECTION-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE</code></span></p></td>
+<td>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object
+ is not visible or otherwise unreadable
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-save-hostname" title="nm_remote_settings_save_hostname ()">nm_remote_settings_save_hostname</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-REMOTE-SETTINGS-ERROR-SERVICE-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE</code></span></p></td>
+<td>NetworkManager is not running.
+ (Since 0.9.10)
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMRemoteSettings.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</td>
-<td class="property_name"><a class="link" href="NMRemoteSettings.html#NMRemoteSettings--bus" title="The “bus†property">bus</a></td>
-<td class="property_flags">Read / Write / Construct Only</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMRemoteSettings.html#NMRemoteSettings--can-modify" title="The “can-modify†property">can-modify</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMRemoteSettings.html#NMRemoteSettings--hostname" title="The “hostname†property">hostname</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMRemoteSettings.html#NMRemoteSettings--service-running" title="The “service-running†property">service-running</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-SETTINGS-ERROR:CAPS"></a><h3>NM_REMOTE_SETTINGS_ERROR</h3>
+<pre class="programlisting">#define NM_REMOTE_SETTINGS_ERROR nm_remote_settings_error_quark ()
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMRemoteSettings.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-remote-settings-error-quark"></a><h3>nm_remote_settings_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_remote_settings_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMRemoteSettings.html#NMRemoteSettings-connections-read" title="The “connections-read†signal">connections-read</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr>
-<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMRemoteSettings.html#NMRemoteSettings-new-connection" title="The “new-connection†signal">new-connection</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMRemoteSettings.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsError" title="enum NMRemoteSettingsError">NMRemoteSettingsError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR:CAPS" title="NM_REMOTE_SETTINGS_ERROR">NM_REMOTE_SETTINGS_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-BUS:CAPS" title="NM_REMOTE_SETTINGS_BUS">NM_REMOTE_SETTINGS_BUS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS" title="NM_REMOTE_SETTINGS_SERVICE_RUNNING">NM_REMOTE_SETTINGS_SERVICE_RUNNING</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-HOSTNAME:CAPS" title="NM_REMOTE_SETTINGS_HOSTNAME">NM_REMOTE_SETTINGS_HOSTNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS" title="NM_REMOTE_SETTINGS_CAN_MODIFY">NM_REMOTE_SETTINGS_CAN_MODIFY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS" title="NM_REMOTE_SETTINGS_NEW_CONNECTION">NM_REMOTE_SETTINGS_NEW_CONNECTION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMRemoteSettings.html#NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS" title="NM_REMOTE_SETTINGS_CONNECTIONS_READ">NM_REMOTE_SETTINGS_CONNECTIONS_READ</a></td>
-</tr>
-</tbody>
-</table></div>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-SETTINGS-BUS:CAPS"></a><h3>NM_REMOTE_SETTINGS_BUS</h3>
+<pre class="programlisting">#define NM_REMOTE_SETTINGS_BUS "bus"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMRemoteSettings.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> NMRemoteSettings
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS"></a><h3>NM_REMOTE_SETTINGS_SERVICE_RUNNING</h3>
+<pre class="programlisting">#define NM_REMOTE_SETTINGS_SERVICE_RUNNING "service-running"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMRemoteSettings.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-SETTINGS-HOSTNAME:CAPS"></a><h3>NM_REMOTE_SETTINGS_HOSTNAME</h3>
+<pre class="programlisting">#define NM_REMOTE_SETTINGS_HOSTNAME "hostname"
+</pre>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMRemoteSettings.functions_details"></a><h2>Functions</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS"></a><h3>NM_REMOTE_SETTINGS_CAN_MODIFY</h3>
+<pre class="programlisting">#define NM_REMOTE_SETTINGS_CAN_MODIFY "can-modify"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS"></a><h3>NM_REMOTE_SETTINGS_NEW_CONNECTION</h3>
+<pre class="programlisting">#define NM_REMOTE_SETTINGS_NEW_CONNECTION "new-connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS"></a><h3>NM_REMOTE_SETTINGS_CONNECTIONS_READ</h3>
+<pre class="programlisting">#define NM_REMOTE_SETTINGS_CONNECTIONS_READ "connections-read"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteSettingsAddConnectionFunc"></a><h3>NMRemoteSettingsAddConnectionFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMRemoteSettingsAddConnectionFunc)
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-remote-settings-error-quark"></a><h3>nm_remote_settings_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_remote_settings_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> errors.</p>
-<p></p>
+<a name="NMRemoteSettingsLoadConnectionsFunc"></a><h3>NMRemoteSettingsLoadConnectionsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMRemoteSettingsLoadConnectionsFunc)
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **failures</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteSettingsSaveHostnameFunc"></a><h3>NMRemoteSettingsSaveHostnameFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMRemoteSettingsSaveHostnameFunc) (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteSettingsAddConnectionFunc"></a><h3>NMRemoteSettingsAddConnectionFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMRemoteSettingsAddConnectionFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<a name="NMRemoteSettings-struct"></a><h3>struct NMRemoteSettings</h3>
+<pre class="programlisting">struct NMRemoteSettings;</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteSettingsSaveHostnameFunc"></a><h3>NMRemoteSettingsSaveHostnameFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMRemoteSettingsSaveHostnameFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<a name="NMRemoteSettingsClass"></a><h3>struct NMRemoteSettingsClass</h3>
+<pre class="programlisting">struct NMRemoteSettingsClass {
+ GObjectClass parent;
+
+ /* Signals */
+ void (*new_connection) (NMRemoteSettings *settings,
+ NMRemoteConnection *connection);
+
+ void (*connections_read) (NMRemoteSettings *settings);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+};
+</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-new"></a><h3>nm_remote_settings_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> *
-nm_remote_settings_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>);</pre>
-<p>Creates a new object representing the remote settings service.</p>
-<p>Note that this will do blocking D-Bus calls to initialize the
-settings object. You can use <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()"><code class="function">nm_remote_settings_new_async()</code></a> if you
-want to avoid that.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.5.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-new"></a><h3>nm_remote_settings_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> * nm_remote_settings_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>);</pre>
+<p>
+Creates a new object representing the remote settings service.
+</p>
+<p>
+Note that this will do blocking D-Bus calls to initialize the
+settings object. You can use <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()"><code class="function">nm_remote_settings_new_async()</code></a> if you
+want to avoid that.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>bus</p></td>
-<td class="parameter_description"><p> a valid and connected D-Bus connection. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bus</code></em> :</span></p></td>
+<td>a valid and connected D-Bus connection. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new remote settings object on success, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.24.9.5.7"></a><h4>Returns</h4>
-<p> the new remote settings object on success, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-new-async"></a><h3>nm_remote_settings_new_async ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_remote_settings_new_async (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Creates a new object representing the remote settings service and
-begins asynchronously initializing it. <em class="parameter"><code>callback</code></em>
- will be called
-when it is done; use <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-finish" title="nm_remote_settings_new_finish ()"><code class="function">nm_remote_settings_new_finish()</code></a> to get the
-result.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-new-async"></a><h3>nm_remote_settings_new_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_settings_new_async (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *bus</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Creates a new object representing the remote settings service and
+begins asynchronously initializing it. <em class="parameter"><code>callback</code></em> will be called
+when it is done; use <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-finish" title="nm_remote_settings_new_finish ()"><code class="function">nm_remote_settings_new_finish()</code></a> to get the
+result.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>bus</p></td>
-<td class="parameter_description"><p> a valid and connected D-Bus connection. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>bus</code></em> :</span></p></td>
+<td>a valid and connected D-Bus connection. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>cancellable</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>cancellable</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gio/unstable/GCancellable.html"><span class="type">GCancellable</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p>callback to call when the settings object is created</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to call when the settings object is created</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>data for <em class="parameter"><code>callback</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>data for <em class="parameter"><code>callback</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-new-finish"></a><h3>nm_remote_settings_new_finish ()</h3>
-<pre class="programlisting"><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> *
-nm_remote_settings_new_finish (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Gets the result of an <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()"><code class="function">nm_remote_settings_new_async()</code></a> call.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-new-finish"></a><h3>nm_remote_settings_new_finish ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="returnvalue">NMRemoteSettings</span></a> * nm_remote_settings_new_finish (<em class="parameter"><code><a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Gets the result of an <a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()"><code class="function">nm_remote_settings_new_async()</code></a> call.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>result</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html"><span class="type">GAsyncResult</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location for a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on error</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.24.9.7.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> object, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-list-connections"></a><h3>nm_remote_settings_list_connections ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_remote_settings_list_connections (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.3.24.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-list-connections"></a><h3>nm_remote_settings_list_connections ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_remote_settings_list_connections (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>settings</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.24.9.8.5"></a><h4>Returns</h4>
-<p> a
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a
list containing all connections provided by the remote settings service.
Each element of the returned list is a <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><code class="literal">NMRemoteConnection</code></a> instance, which is
owned by the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a> object and should not be freed by the caller.
The returned list is, however, owned by the caller and should be freed
-using <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when no longer required. </p>
-<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.RemoteConnection]</span></p>
-</div>
+using <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when no longer required. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMClient.RemoteConnection]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-get-connection-by-path"></a><h3>nm_remote_settings_get_connection_by_path ()</h3>
-<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> *
-nm_remote_settings_get_connection_by_path
- (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Returns the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><code class="literal">NMRemoteConnection</code></a> representing the connection at <em class="parameter"><code>path</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-get-connection-by-id"></a><h3>nm_remote_settings_get_connection_by_id ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_remote_settings_get_connection_by_id
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *id</code></em>);</pre>
+<p>
+Returns the first matching <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><code class="literal">NMRemoteConnection</code></a> matching a given <em class="parameter"><code>id</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>settings</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>the id of the remote connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the D-Bus object path of the remote connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the remote connection object on success, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if no
+matching object was found. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.24.9.9.6"></a><h4>Returns</h4>
-<p> the remote connection object on success, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the object was
-not known. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-get-connection-by-uuid"></a><h3>nm_remote_settings_get_connection_by_uuid ()</h3>
-<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> *
-nm_remote_settings_get_connection_by_uuid
- (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *uuid</code></em>);</pre>
-<p>Returns the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><code class="literal">NMRemoteConnection</code></a> identified by <em class="parameter"><code>uuid</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-get-connection-by-path"></a><h3>nm_remote_settings_get_connection_by_path ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_remote_settings_get_connection_by_path
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><code class="literal">NMRemoteConnection</code></a> representing the connection at <em class="parameter"><code>path</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>settings</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the D-Bus object path of the remote connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>uuid</p></td>
-<td class="parameter_description"><p>the UUID of the remote connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the remote connection object on success, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the object was
+not known. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.24.9.10.6"></a><h4>Returns</h4>
-<p> the remote connection object on success, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the object was
-not known. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-add-connection"></a><h3>nm_remote_settings_add_connection ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_remote_settings_add_connection (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()"><span class="type">NMRemoteSettingsAddConnectionFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Requests that the remote settings service add the given settings to a new
-connection.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-get-connection-by-uuid"></a><h3>nm_remote_settings_get_connection_by_uuid ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_remote_settings_get_connection_by_uuid
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *uuid</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><code class="literal">NMRemoteConnection</code></a> identified by <em class="parameter"><code>uuid</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>settings</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the connection to add. Note that this object's settings will be
-added, not the object itself</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> callback to be called when the add operation completes. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>uuid</code></em> :</span></p></td>
+<td>the UUID of the remote connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the remote connection object on success, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the object was
+not known. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.24.9.11.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the request was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it failed</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-remote-settings-save-hostname"></a><h3>nm_remote_settings_save_hostname ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_remote_settings_save_hostname (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *hostname</code></em>,
- <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc" title="NMRemoteSettingsSaveHostnameFunc ()"><span class="type">NMRemoteSettingsSaveHostnameFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Requests that the machine's persistent hostname be set to the specified value
-or cleared.</p>
-<div class="refsect3">
-<a name="id-1.3.24.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-add-connection"></a><h3>nm_remote_settings_add_connection ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_remote_settings_add_connection (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()"><span class="type">NMRemoteSettingsAddConnectionFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Requests that the remote settings service add the given settings to a new
+connection. The connection is immediately written to disk. <em class="parameter"><code>connection</code></em> is
+untouched by this function and only serves as a template of the settings to
+add. The <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object that represents what NetworkManager
+actually added is returned to <em class="parameter"><code>callback</code></em> when the addition operation is complete.
+</p>
+<p>
+Note that the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> returned in <em class="parameter"><code>callback</code></em> may not contain
+identical settings to <em class="parameter"><code>connection</code></em> as NetworkManager may perform automatic
+completion and/or normalization of connection properties.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>settings</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the connection to add. Note that this object's settings will be
+added, not the object itself</td>
</tr>
<tr>
-<td class="parameter_name"><p>hostname</p></td>
-<td class="parameter_description"><p>the new persistent hostname to set, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to clear any existing
-persistent hostname</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the add operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> callback to be called when the
-hostname operation completes. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the request was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it failed</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.24.9.12.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the request was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it failed</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMRemoteSettings.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMRemoteSettingsError"></a><h3>enum NMRemoteSettingsError</h3>
-<p>Describes errors that may result from operations involving a <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.24.10.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-remote-settings-add-connection-unsaved"></a><h3>nm_remote_settings_add_connection_unsaved ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_remote_settings_add_connection_unsaved
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()"><span class="type">NMRemoteSettingsAddConnectionFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Requests that the remote settings service add the given settings to a new
+connection. The connection is not written to disk, which may be done at
+a later time by calling the connection's <a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()"><code class="function">nm_remote_connection_commit_changes()</code></a>
+method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-REMOTE-SETTINGS-ERROR-UNKNOWN:CAPS"></a>NM_REMOTE_SETTINGS_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-REMOTE-SETTINGS-ERROR-CONNECTION-REMOVED:CAPS"></a>NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED</p></td>
-<td class="enum_member_description">
-<p>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object
- was removed before it was completely initialized</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the connection to add. Note that this object's settings will be
+added, not the object itself</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the add operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-REMOTE-SETTINGS-ERROR-CONNECTION-UNAVAILABLE:CAPS"></a>NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE</p></td>
-<td class="enum_member_description">
-<p>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> object
- is not visible or otherwise unreadable</p>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the request was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it failed</td>
</tr>
</tbody>
</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-REMOTE-SETTINGS-ERROR:CAPS"></a><h3>NM_REMOTE_SETTINGS_ERROR</h3>
-<pre class="programlisting">#define NM_REMOTE_SETTINGS_ERROR nm_remote_settings_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-REMOTE-SETTINGS-BUS:CAPS"></a><h3>NM_REMOTE_SETTINGS_BUS</h3>
-<pre class="programlisting">#define NM_REMOTE_SETTINGS_BUS "bus"
-</pre>
-<p>
-</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS"></a><h3>NM_REMOTE_SETTINGS_SERVICE_RUNNING</h3>
-<pre class="programlisting">#define NM_REMOTE_SETTINGS_SERVICE_RUNNING "service-running"
-</pre>
+<a name="nm-remote-settings-load-connections"></a><h3>nm_remote_settings_load_connections ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_remote_settings_load_connections (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **filenames</code></em>,
+ <em class="parameter"><code><span class="type">char</span> ***failures</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
+Requests that the remote settings service load or reload the given files,
+adding or updating the connections described within.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-REMOTE-SETTINGS-HOSTNAME:CAPS"></a><h3>NM_REMOTE_SETTINGS_HOSTNAME</h3>
-<pre class="programlisting">#define NM_REMOTE_SETTINGS_HOSTNAME "hostname"
-</pre>
<p>
+The changes to the indicated files will not yet be reflected in
+<em class="parameter"><code>settings</code></em>'s connections array when the function returns.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS"></a><h3>NM_REMOTE_SETTINGS_CAN_MODIFY</h3>
-<pre class="programlisting">#define NM_REMOTE_SETTINGS_CAN_MODIFY "can-modify"
-</pre>
<p>
+If all of the indicated files were successfully loaded, the
+function will return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, and <em class="parameter"><code>failures</code></em> will be set to <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. If
+NetworkManager tried to load the files, but some (or all) failed,
+then <em class="parameter"><code>failures</code></em> will be set to a <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of the
+filenames that failed to load.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filenames</code></em> :</span></p></td>
+<td>
+<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of filenames to load</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>failures</code></em> :</span></p></td>
+<td>on return, a <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of
+filenames that failed to load. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>return location for <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if NetworkManager at least tried to load <em class="parameter"><code>filenames</code></em>,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if an error occurred (eg, permission denied).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS"></a><h3>NM_REMOTE_SETTINGS_NEW_CONNECTION</h3>
-<pre class="programlisting">#define NM_REMOTE_SETTINGS_NEW_CONNECTION "new-connection"
-</pre>
+<a name="nm-remote-settings-reload-connections"></a><h3>nm_remote_settings_reload_connections ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_remote_settings_reload_connections
+ (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
+Requests that the remote settings service reload all connection
+files from disk, adding, updating, and removing connections until
+the in-memory state matches the on-disk state.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>return location for <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS"></a><h3>NM_REMOTE_SETTINGS_CONNECTIONS_READ</h3>
-<pre class="programlisting">#define NM_REMOTE_SETTINGS_CONNECTIONS_READ "connections-read"
-</pre>
+<a name="nm-remote-settings-save-hostname"></a><h3>nm_remote_settings_save_hostname ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_remote_settings_save_hostname (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *hostname</code></em>,
+ <em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc" title="NMRemoteSettingsSaveHostnameFunc ()"><span class="type">NMRemoteSettingsSaveHostnameFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
+Requests that the machine's persistent hostname be set to the specified value
+or cleared.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>settings</code></em> :</span></p></td>
+<td>the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><code class="literal">NMRemoteSettings</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hostname</code></em> :</span></p></td>
+<td>the new persistent hostname to set, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> to clear any existing
+persistent hostname</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the
+hostname operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the request was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it failed</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMRemoteSettings.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMRemoteSettings--bus"></a><h3>The <code class="literal">“busâ€</code> property</h3>
-<pre class="programlisting"> “bus†<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *</pre>
+<a name="NMRemoteSettings--bus"></a><h3>The <code class="literal">"bus"</code> property</h3>
+<pre class="programlisting"> "bus" <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>* : Read / Write / Construct Only</pre>
<p>DBusGConnection.</p>
-<p>Flags: Read / Write / Construct Only</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteSettings--can-modify"></a><h3>The <code class="literal">“can-modifyâ€</code> property</h3>
-<pre class="programlisting"> “can-modify†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMRemoteSettings--can-modify"></a><h3>The <code class="literal">"can-modify"</code> property</h3>
+<pre class="programlisting"> "can-modify" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>Can modify anything (hostname, connections, etc).</p>
-<p>Flags: Read</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteSettings--hostname"></a><h3>The <code class="literal">“hostnameâ€</code> property</h3>
-<pre class="programlisting"> “hostname†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<a name="NMRemoteSettings--hostname"></a><h3>The <code class="literal">"hostname"</code> property</h3>
+<pre class="programlisting"> "hostname" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>Persistent hostname.</p>
-<p>Flags: Read</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteSettings--service-running"></a><h3>The <code class="literal">“service-runningâ€</code> property</h3>
-<pre class="programlisting"> “service-running†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<a name="NMRemoteSettings--service-running"></a><h3>The <code class="literal">"service-running"</code> property</h3>
+<pre class="programlisting"> "service-running" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>Is service running.</p>
-<p>Flags: Read</p>
<p>Default value: FALSE</p>
</div>
</div>
<div class="refsect1">
<a name="NMRemoteSettings.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMRemoteSettings-connections-read"></a><h3>The <code class="literal">“connections-readâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *nmremotesettings,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMRemoteSettings-connections-read"></a><h3>The <code class="literal">"connections-read"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *nmremotesettings,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nmremotesettings</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMRemoteSettings-new-connection"></a><h3>The <code class="literal">“new-connectionâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *nmremotesettings,
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *arg1,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMRemoteSettings-new-connection"></a><h3>The <code class="literal">"new-connection"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *nmremotesettings,
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *arg1,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nmremotesettings</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
+<div class="refsect1">
+<a name="NMRemoteSettings.see-also"></a><h2>See Also</h2>
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>, <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMSecretAgent.html b/docs/libnm-glib/html/NMSecretAgent.html
index 94bc4e1f0..2aee97d92 100644
--- a/docs/libnm-glib/html/NMSecretAgent.html
+++ b/docs/libnm-glib/html/NMSecretAgent.html
@@ -2,29 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMSecretAgent</title>
+<title>NMSecretAgent</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="libnm-glib-nm-types.html" title="nm-types">
<link rel="next" href="NMVPNConnection.html" title="NMVPNConnection">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSecretAgent.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSecretAgent.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSecretAgent.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMSecretAgent.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="libnm-glib-nm-types.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMVPNConnection.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libnm-glib-nm-types.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMVPNConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSecretAgent.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSecretAgent.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSecretAgent.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSecretAgent.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMSecretAgent.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSecretAgent"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,230 +39,318 @@
<h2><span class="refentrytitle"><a name="NMSecretAgent.top_of_page"></a>NMSecretAgent</span></h2>
<p>NMSecretAgent</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSecretAgent.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-ERROR:CAPS" title="NM_SECRET_AGENT_ERROR">NM_SECRET_AGENT_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSecretAgent.html#nm-secret-agent-error-quark" title="nm_secret_agent_error_quark ()">nm_secret_agent_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+enum <a class="link" href="NMSecretAgent.html#NMSecretAgentError" title="enum NMSecretAgentError">NMSecretAgentError</a>;
+enum <a class="link" href="NMSecretAgent.html#NMSecretAgentCapabilities" title="enum NMSecretAgentCapabilities">NMSecretAgentCapabilities</a>;
+enum <a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags">NMSecretAgentGetSecretsFlags</a>;
+#define <a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-IDENTIFIER:CAPS" title="NM_SECRET_AGENT_IDENTIFIER">NM_SECRET_AGENT_IDENTIFIER</a>
+#define <a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-AUTO-REGISTER:CAPS" title="NM_SECRET_AGENT_AUTO_REGISTER">NM_SECRET_AGENT_AUTO_REGISTER</a>
+#define <a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-REGISTERED:CAPS" title="NM_SECRET_AGENT_REGISTERED">NM_SECRET_AGENT_REGISTERED</a>
+#define <a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITIES:CAPS" title="NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a>
+#define <a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS" title="NM_SECRET_AGENT_REGISTRATION_RESULT">NM_SECRET_AGENT_REGISTRATION_RESULT</a>
+ <a class="link" href="NMSecretAgent.html#NMSecretAgent-struct" title="NMSecretAgent">NMSecretAgent</a>;
+<span class="returnvalue">void</span> (<a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()">*NMSecretAgentGetSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()">*NMSecretAgentSaveSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> (<a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()">*NMSecretAgentDeleteSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+ <a class="link" href="NMSecretAgent.html#NMSecretAgentClass" title="NMSecretAgentClass">NMSecretAgentClass</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgent.html#nm-secret-agent-register" title="nm_secret_agent_register ()">nm_secret_agent_register</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgent.html#nm-secret-agent-unregister" title="nm_secret_agent_unregister ()">nm_secret_agent_unregister</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgent.html#nm-secret-agent-get-registered" title="nm_secret_agent_get_registered ()">nm_secret_agent_get_registered</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSecretAgent.html#nm-secret-agent-get-secrets" title="nm_secret_agent_get_secrets ()">nm_secret_agent_get_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **hints</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()"><span class="type">NMSecretAgentGetSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSecretAgent.html#nm-secret-agent-save-secrets" title="nm_secret_agent_save_secrets ()">nm_secret_agent_save_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()"><span class="type">NMSecretAgentSaveSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSecretAgent.html#nm-secret-agent-delete-secrets" title="nm_secret_agent_delete_secrets ()">nm_secret_agent_delete_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()"><span class="type">NMSecretAgentDeleteSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSecretAgent.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----NMSecretAgent
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSecretAgent.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSecretAgent.html#NMSecretAgent--auto-register" title='The "auto-register" property'>auto-register</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSecretAgent.html#NMSecretAgent--capabilities" title='The "capabilities" property'>capabilities</a>" <a class="link" href="NMSecretAgent.html#NMSecretAgentCapabilities" title="enum NMSecretAgentCapabilities"><span class="type">NMSecretAgentCapabilities</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSecretAgent.html#NMSecretAgent--identifier" title='The "identifier" property'>identifier</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only
+ "<a class="link" href="NMSecretAgent.html#NMSecretAgent--registered" title='The "registered" property'>registered</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSecretAgent.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSecretAgent.html#NMSecretAgent-registration-result" title='The "registration-result" signal'>registration-result</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSecretAgent.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
<div class="refsect1">
-<a name="NMSecretAgent.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSecretAgent.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-ERROR:CAPS"></a><h3>NM_SECRET_AGENT_ERROR</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_ERROR (nm_secret_agent_error_quark ())
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-error-quark"></a><h3>nm_secret_agent_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_secret_agent_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentError"></a><h3>enum NMSecretAgentError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED = 0, /*&lt; nick=NotAuthorized &gt;*/
+ NM_SECRET_AGENT_ERROR_INVALID_CONNECTION, /*&lt; nick=InvalidConnection &gt;*/
+ NM_SECRET_AGENT_ERROR_USER_CANCELED, /*&lt; nick=UserCanceled &gt;*/
+ NM_SECRET_AGENT_ERROR_AGENT_CANCELED, /*&lt; nick=AgentCanceled &gt;*/
+ NM_SECRET_AGENT_ERROR_INTERNAL_ERROR, /*&lt; nick=InternalError &gt;*/
+ NM_SECRET_AGENT_ERROR_NO_SECRETS, /*&lt; nick=NoSecrets &gt;*/
+} NMSecretAgentError;
+</pre>
+<p>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentError" title="enum NMSecretAgentError"><span class="type">NMSecretAgentError</span></a> values are passed by secret agents back to NetworkManager
+when they encounter problems retrieving secrets on behalf of NM.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-ERROR:CAPS" title="NM_SECRET_AGENT_ERROR">NM_SECRET_AGENT_ERROR</a></td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-error-quark" title="nm_secret_agent_error_quark ()">nm_secret_agent_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()">*NMSecretAgentGetSecretsFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SECRET-AGENT-ERROR-NOT-AUTHORIZED:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED</code></span></p></td>
+<td>the caller (ie, NetworkManager) is not
+ authorized to make this request
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()">*NMSecretAgentSaveSecretsFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_INVALID_CONNECTION</code></span></p></td>
+<td>the connection for which secrets
+ were requested could not be found
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()">*NMSecretAgentDeleteSecretsFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_USER_CANCELED</code></span></p></td>
+<td>the request was canceled by the user
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-register" title="nm_secret_agent_register ()">nm_secret_agent_register</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_AGENT_CANCELED</code></span></p></td>
+<td>the agent canceled the request
+ because it was requested to do so by NetworkManager
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-unregister" title="nm_secret_agent_unregister ()">nm_secret_agent_unregister</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SECRET-AGENT-ERROR-INTERNAL-ERROR:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_INTERNAL_ERROR</code></span></p></td>
+<td>some internal error in the agent caused
+ the request to fail
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-get-registered" title="nm_secret_agent_get_registered ()">nm_secret_agent_get_registered</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-get-secrets" title="nm_secret_agent_get_secrets ()">nm_secret_agent_get_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-save-secrets" title="nm_secret_agent_save_secrets ()">nm_secret_agent_save_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-delete-secrets" title="nm_secret_agent_delete_secrets ()">nm_secret_agent_delete_secrets</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_NO_SECRETS</code></span></p></td>
+<td>the agent cannot find any secrets for this
+ connection
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSecretAgent.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentCapabilities"></a><h3>enum NMSecretAgentCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ NM_SECRET_AGENT_CAPABILITY_NONE = 0x0,
+ NM_SECRET_AGENT_CAPABILITY_VPN_HINTS = 0x1,
+
+ /* boundary value */
+ NM_SECRET_AGENT_CAPABILITY_LAST = NM_SECRET_AGENT_CAPABILITY_VPN_HINTS
+} NMSecretAgentCapabilities;
+</pre>
+<p>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentCapabilities" title="enum NMSecretAgentCapabilities"><span class="type">NMSecretAgentCapabilities</span></a> indicate various capabilities of the agent.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSecretAgent.html#NMSecretAgent--auto-register" title="The “auto-register†property">auto-register</a></td>
-<td class="property_flags">Read / Write / Construct</td>
+<td><p><a name="NM-SECRET-AGENT-CAPABILITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_CAPABILITY_NONE</code></span></p></td>
+<td>the agent supports no special capabilities
+</td>
</tr>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSecretAgent.html#NMSecretAgent--identifier" title="The “identifier†property">identifier</a></td>
-<td class="property_flags">Read / Write / Construct Only</td>
+<td><p><a name="NM-SECRET-AGENT-CAPABILITY-VPN-HINTS:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_CAPABILITY_VPN_HINTS</code></span></p></td>
+<td>the agent supports sending hints given
+by the NMSecretAgentClass::<code class="function">get_secrets()</code> class method to VPN plugin
+authentication dialogs.
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSecretAgent.html#NMSecretAgent--registered" title="The “registered†property">registered</a></td>
-<td class="property_flags">Read</td>
+<td><p><a name="NM-SECRET-AGENT-CAPABILITY-LAST:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_CAPABILITY_LAST</code></span></p></td>
+<td>bounds checking value; should not be used.
+</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<div class="refsect1">
-<a name="NMSecretAgent.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
-</colgroup>
-<tbody><tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMSecretAgent.html#NMSecretAgent-registration-result" title="The “registration-result†signal">registration-result</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSecretAgent.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentGetSecretsFlags"></a><h3>enum NMSecretAgentGetSecretsFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE = 0x0,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW = 0x2,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED = 0x4
+} NMSecretAgentGetSecretsFlags;
+</pre>
+<p>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> values modify the behavior of a GetSecrets request.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSecretAgent.html#NMSecretAgentError" title="enum NMSecretAgentError">NMSecretAgentError</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags">NMSecretAgentGetSecretsFlags</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-IDENTIFIER:CAPS" title="NM_SECRET_AGENT_IDENTIFIER">NM_SECRET_AGENT_IDENTIFIER</a></td>
+<td><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE</code></span></p></td>
+<td>no special behavior; by default no
+user interaction is allowed and requests for secrets are fulfilled from
+persistent storage, or if no secrets are available an error is returned.
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-AUTO-REGISTER:CAPS" title="NM_SECRET_AGENT_AUTO_REGISTER">NM_SECRET_AGENT_AUTO_REGISTER</a></td>
+<td><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION</code></span></p></td>
+<td>allows the request to
+interact with the user, possibly prompting via UI for secrets if any are
+required, or if none are found in persistent storage.
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-REGISTERED:CAPS" title="NM_SECRET_AGENT_REGISTERED">NM_SECRET_AGENT_REGISTERED</a></td>
+<td><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW</code></span></p></td>
+<td>explicitly prompt for new
+secrets from the user. This flag signals that NetworkManager thinks any
+existing secrets are invalid or wrong. This flag implies that interaction
+is allowed.
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS" title="NM_SECRET_AGENT_REGISTRATION_RESULT">NM_SECRET_AGENT_REGISTRATION_RESULT</a></td>
+<td><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED</code></span></p></td>
+<td>set if the request was
+initiated by user-requested action via the D-Bus interface, as opposed to
+automatically initiated by NetworkManager in response to (for example) scan
+results or carrier changes.
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSecretAgent.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> NMSecretAgent
+<hr>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-IDENTIFIER:CAPS"></a><h3>NM_SECRET_AGENT_IDENTIFIER</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_IDENTIFIER "identifier"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSecretAgent.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-AUTO-REGISTER:CAPS"></a><h3>NM_SECRET_AGENT_AUTO_REGISTER</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_AUTO_REGISTER "auto-register"
+</pre>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMSecretAgent.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SECRET-AGENT-ERROR:CAPS"></a><h3>NM_SECRET_AGENT_ERROR</h3>
-<pre class="programlisting">#define NM_SECRET_AGENT_ERROR (nm_secret_agent_error_quark ())
+<a name="NM-SECRET-AGENT-REGISTERED:CAPS"></a><h3>NM_SECRET_AGENT_REGISTERED</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_REGISTERED "registered"
</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-secret-agent-error-quark"></a><h3>nm_secret_agent_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_secret_agent_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<a name="NM-SECRET-AGENT-CAPABILITIES:CAPS"></a><h3>NM_SECRET_AGENT_CAPABILITIES</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_CAPABILITIES "capabilities"
+</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.3.5"></a><h4>Returns</h4>
-<p></p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS"></a><h3>NM_SECRET_AGENT_REGISTRATION_RESULT</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_REGISTRATION_RESULT "registration-result"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSecretAgentGetSecretsFunc"></a><h3>NMSecretAgentGetSecretsFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMSecretAgentGetSecretsFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Called as a result of a request by NM to retrieve secrets. When the
+<a name="NMSecretAgent-struct"></a><h3>NMSecretAgent</h3>
+<pre class="programlisting">typedef struct _NMSecretAgent NMSecretAgent;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentGetSecretsFunc"></a><h3>NMSecretAgentGetSecretsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentGetSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Called as a result of a request by NM to retrieve secrets. When the
<a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> subclass has finished retrieving secrets and is ready to
return them, or to return an error, this function should be called with
-those secrets or the error.</p>
-<p>To easily create the hash table to return the WiFi PSK, you could do
-something like this:</p>
+those secrets or the error.
+</p>
+<p>
+To easily create the hash table to return the Wi-Fi PSK, you could do
+something like this:
+</p>
<div class="example">
-<a name="id-1.3.26.9.4.6"></a><p class="title"><b>Example 1. Creating a secrets hash</b></p>
+<a name="id-1.3.28.8.13.5.1"></a><p class="title"><b>Example 1. Creating a secrets hash</b></p>
<div class="example-contents">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -284,9 +379,9 @@ something like this:</p>
<span class="normal">s_wsec </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="https://developer.gnome.org/libnm-util/0.9/NMSettingWirelessSecurity.html">NMSettingWirelessSecurity</a> </span><span class="symbol">*)</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMSettingWirelessSecurity.html#nm-setting-wireless-security-new">nm_setting_wireless_security_new</a></span><span class="normal"> </span><span class="symbol">();</span>
<span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-set">g_object_set</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#G-OBJECT:CAPS">G_OBJECT</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">s_wsec</span><span class="symbol">),</span>
<span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK:CAPS">NM_SETTING_WIRELESS_SECURITY_PSK</a></span><span class="symbol">,</span><span class="normal"> </span><span class="string">"my really cool PSK"</span><span class="symbol">,</span>
-<span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
+<span class="normal"> <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
<span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-add-setting">nm_connection_add_setting</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">secrets</span><span class="symbol">,</span><span class="normal"> </span><span class="function">NM_SETTING</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">s_wsec</span><span class="symbol">));</span>
-<span class="normal">secrets_hash </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-to-hash">nm_connection_to_hash</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">secrets</span><span class="symbol">,</span><span class="normal"> NM_SETTING_HASH_FLAG_ALL</span><span class="symbol">);</span>
+<span class="normal">secrets_hash </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-to-hash">nm_connection_to_hash</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">secrets</span><span class="symbol">,</span><span class="normal"> <a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS">NM_SETTING_HASH_FLAG_ALL</a></span><span class="symbol">);</span>
<span class="symbol">(</span><span class="normal">call the NMSecretAgentGetSecretsFunc </span><span class="usertype">with</span><span class="normal"> secrets_hash</span><span class="symbol">)</span>
@@ -298,591 +393,516 @@ something like this:</p>
</div>
</div>
-<br class="example-break"><div class="refsect3">
-<a name="id-1.3.26.9.4.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<p><br class="example-break">
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>agent</p></td>
-<td class="parameter_description"><p>the secret agent object</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>agent</code></em> :</span></p></td>
+<td>the secret agent object</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p> the connection for which secrets were requested,
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the connection for which secrets were requested,
note that this object will be unrefed after the callback has returned, use
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a>/<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a> if you want to use this object after the callback
-has returned. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+has returned. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>secrets</p></td>
-<td class="parameter_description"><p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing
+<td><p><span class="term"><em class="parameter"><code>secrets</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing
the requested secrets in the same format as an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> hash (as
created by <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#nm-connection-to-hash"><code class="function">nm_connection_to_hash()</code></a> for example). Each key in <em class="parameter"><code>secrets</code></em>
should be the name of a <a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html"><span class="type">NMSetting</span></a> object (like "802-11-wireless-security")
and each value should be a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>. The sub-hashes map string:<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>
where the string is the setting property name (like "psk") and the value
-is the secret. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span></td>
+is the secret. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>if the secrets request failed, give a descriptive error here</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>if the secrets request failed, give a descriptive error here</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>caller-specific data to be passed to the function</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to the function</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSecretAgentSaveSecretsFunc"></a><h3>NMSecretAgentSaveSecretsFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMSecretAgentSaveSecretsFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Called as a result of a request by NM to save secrets. When the
+<a name="NMSecretAgentSaveSecretsFunc"></a><h3>NMSecretAgentSaveSecretsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentSaveSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Called as a result of a request by NM to save secrets. When the
<a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> subclass has finished saving the secrets, this function
-should be called.</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+should be called.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>agent</p></td>
-<td class="parameter_description"><p>the secret agent object</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>agent</code></em> :</span></p></td>
+<td>the secret agent object</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p> the connection for which secrets were to be saved,
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the connection for which secrets were to be saved,
note that this object will be unrefed after the callback has returned, use
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a>/<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a> if you want to use this object after the callback
-has returned. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+has returned. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>if the saving secrets failed, give a descriptive error here</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>if the saving secrets failed, give a descriptive error here</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>caller-specific data to be passed to the function</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to the function</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSecretAgentDeleteSecretsFunc"></a><h3>NMSecretAgentDeleteSecretsFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMSecretAgentDeleteSecretsFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Called as a result of a request by NM to delete secrets. When the
+<a name="NMSecretAgentDeleteSecretsFunc"></a><h3>NMSecretAgentDeleteSecretsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentDeleteSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Called as a result of a request by NM to delete secrets. When the
<a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> subclass has finished deleting the secrets, this function
-should be called.</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+should be called.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>agent</p></td>
-<td class="parameter_description"><p>the secret agent object</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>agent</code></em> :</span></p></td>
+<td>the secret agent object</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p> the connection for which secrets were to be deleted,
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the connection for which secrets were to be deleted,
note that this object will be unrefed after the callback has returned, use
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a>/<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a> if you want to use this object after the callback
-has returned. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+has returned. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>if the deleting secrets failed, give a descriptive error here</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>if the deleting secrets failed, give a descriptive error here</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>caller-specific data to be passed to the function</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to the function</td>
</tr>
</tbody>
</table></div>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentClass"></a><h3>NMSecretAgentClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* Virtual methods for subclasses */
+
+ /* Called when the subclass should retrieve and return secrets. Subclass
+ * must copy or reference any arguments it may require after returning from
+ * this method, as the arguments will freed (except for 'self', 'callback',
+ * and 'user_data' of course). If the request is canceled, the callback
+ * should still be called, but with the NM_SECRET_AGENT_ERROR_AGENT_CANCELED
+ * error.
+ */
+ void (*get_secrets) (NMSecretAgent *self,
+ NMConnection *connection,
+ const char *connection_path,
+ const char *setting_name,
+ const char **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFunc callback,
+ gpointer user_data);
+
+ /* Called when the subclass should cancel an outstanding request to
+ * get secrets for a given connection. Canceling the request MUST
+ * call the callback that was passed along with the initial get_secrets
+ * call, sending the NM_SECRET_AGENT_ERROR/NM_SECRET_AGENT_ERROR_AGENT_CANCELED
+ * error to that callback.
+ */
+ void (*cancel_get_secrets) (NMSecretAgent *self,
+ const char *connection_path,
+ const char *setting_name);
+
+ /* Called when the subclass should save the secrets contained in the
+ * connection to backing storage. Subclass must copy or reference any
+ * arguments it may require after returning from this method, as the
+ * arguments will freed (except for 'self', 'callback', and 'user_data'
+ * of course).
+ */
+ void (*save_secrets) (NMSecretAgent *self,
+ NMConnection *connection,
+ const char *connection_path,
+ NMSecretAgentSaveSecretsFunc callback,
+ gpointer user_data);
+
+ /* Called when the subclass should delete the secrets contained in the
+ * connection from backing storage. Subclass must copy or reference any
+ * arguments it may require after returning from this method, as the
+ * arguments will freed (except for 'self', 'callback', and 'user_data'
+ * of course).
+ */
+ void (*delete_secrets) (NMSecretAgent *self,
+ NMConnection *connection,
+ const char *connection_path,
+ NMSecretAgentDeleteSecretsFunc callback,
+ gpointer user_data);
+
+ /* Signals */
+ void (*registration_result) (NMSecretAgent *agent, GError *error);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMSecretAgentClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-secret-agent-register"></a><h3>nm_secret_agent_register ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_secret_agent_register (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);</pre>
-<p>Registers the <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> with the NetworkManager secret manager,
+<a name="nm-secret-agent-register"></a><h3>nm_secret_agent_register ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_secret_agent_register (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);</pre>
+<p>
+Registers the <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> with the NetworkManager secret manager,
indicating to NetworkManager that the agent is able to provide and save
secrets for connections on behalf of its user. Registration is an
asynchronous operation and its success or failure is indicated via the
-'registration-result' signal.</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+'registration-result' signal.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.26.9.7.6"></a><h4>Returns</h4>
-<p> a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if registration was successfully requested (this does
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if registration was successfully requested (this does
not mean registration itself was successful), <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if registration was not
-successfully requested.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-secret-agent-unregister"></a><h3>nm_secret_agent_unregister ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_secret_agent_unregister (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);</pre>
-<p>Unregisters the <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> with the NetworkManager secret manager,
-indicating to NetworkManager that the agent is will no longer provide or
-store secrets on behalf of this user.</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+successfully requested.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.26.9.8.6"></a><h4>Returns</h4>
-<p> a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if unregistration was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-secret-agent-get-registered"></a><h3>nm_secret_agent_get_registered ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_secret_agent_get_registered (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.3.26.9.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.26.9.9.5"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the agent is registered, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-secret-agent-get-secrets"></a><h3>nm_secret_agent_get_secrets ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_secret_agent_get_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **hints</code></em>,
- <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
- <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()"><span class="type">NMSecretAgentGetSecretsFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Asyncronously retrieve secrets belonging to <em class="parameter"><code>connection</code></em>
- for the
-setting <em class="parameter"><code>setting_name</code></em>
-. <em class="parameter"><code>flags</code></em>
- indicate specific behavior that the secret
-agent should use when performing the request, for example returning only
-existing secrets without user interaction, or requesting entirely new
-secrets from the user.</p>
-<p>Virtual: get_secrets</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.10.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-secret-agent-unregister"></a><h3>nm_secret_agent_unregister ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_secret_agent_unregister (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);</pre>
+<p>
+Unregisters the <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> with the NetworkManager secret manager,
+indicating to NetworkManager that the agent is will no longer provide or
+store secrets on behalf of this user.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> for which we're asked secrets</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>setting_name</p></td>
-<td class="parameter_description"><p>the name of the secret setting</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>hints</p></td>
-<td class="parameter_description"><p> hints to the agent. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>flags that modify the behavior of the request</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> a callback, to be invoked when the operation is done. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if unregistration was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-secret-agent-save-secrets"></a><h3>nm_secret_agent_save_secrets ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_secret_agent_save_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()"><span class="type">NMSecretAgentSaveSecretsFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Asyncronously ensure that all secrets inside <em class="parameter"><code>connection</code></em>
-
-are stored to disk.</p>
-<p>Virtual: save_secrets</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.11.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-secret-agent-get-registered"></a><h3>nm_secret_agent_get_registered ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_secret_agent_get_registered (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> a callback, to be invoked when the operation is done. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the agent is registered, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-secret-agent-delete-secrets"></a><h3>nm_secret_agent_delete_secrets ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_secret_agent_delete_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()"><span class="type">NMSecretAgentDeleteSecretsFunc</span></a> callback</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Asynchronously ask the agent to delete all saved secrets belonging to
-<em class="parameter"><code>connection</code></em>
-.</p>
-<p>Virtual: delete_secrets</p>
-<div class="refsect3">
-<a name="id-1.3.26.9.12.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-secret-agent-get-secrets"></a><h3>nm_secret_agent_get_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_get_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **hints</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()"><span class="type">NMSecretAgentGetSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Asyncronously retrieve secrets belonging to <em class="parameter"><code>connection</code></em> for the
+setting <em class="parameter"><code>setting_name</code></em>. <em class="parameter"><code>flags</code></em> indicate specific behavior that the secret
+agent should use when performing the request, for example returning only
+existing secrets without user interaction, or requesting entirely new
+secrets from the user.
+</p>
+<p>
+Virtual: get_secrets
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>self</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> for which we're asked secrets</td>
</tr>
<tr>
-<td class="parameter_name"><p>callback</p></td>
-<td class="parameter_description"><p> a callback, to be invoked when the operation is done. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the name of the secret setting</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>hints</code></em> :</span></p></td>
+<td>hints to the agent. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>flags that modify the behavior of the request</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a callback, to be invoked when the operation is done. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSecretAgent.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMSecretAgentError"></a><h3>enum NMSecretAgentError</h3>
-<p><a class="link" href="NMSecretAgent.html#NMSecretAgentError" title="enum NMSecretAgentError"><span class="type">NMSecretAgentError</span></a> values are passed by secret agents back to NetworkManager
-when they encounter problems retrieving secrets on behalf of NM.</p>
-<div class="refsect3">
-<a name="id-1.3.26.10.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-secret-agent-save-secrets"></a><h3>nm_secret_agent_save_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_save_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()"><span class="type">NMSecretAgentSaveSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Asyncronously ensure that all secrets inside <em class="parameter"><code>connection</code></em>
+are stored to disk.
+</p>
+<p>
+Virtual: save_secrets
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-ERROR-NOT-AUTHORIZED:CAPS"></a>NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED</p></td>
-<td class="enum_member_description">
-<p>the caller (ie, NetworkManager) is not
- authorized to make this request</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS"></a>NM_SECRET_AGENT_ERROR_INVALID_CONNECTION</p></td>
-<td class="enum_member_description">
-<p>the connection for which secrets
- were requested could not be found</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS"></a>NM_SECRET_AGENT_ERROR_USER_CANCELED</p></td>
-<td class="enum_member_description">
-<p>the request was canceled by the user</p>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS"></a>NM_SECRET_AGENT_ERROR_AGENT_CANCELED</p></td>
-<td class="enum_member_description">
-<p>the agent canceled the request
- because it was requested to do so by NetworkManager</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-ERROR-INTERNAL-ERROR:CAPS"></a>NM_SECRET_AGENT_ERROR_INTERNAL_ERROR</p></td>
-<td class="enum_member_description">
-<p>some internal error in the agent caused
- the request to fail</p>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a callback, to be invoked when the operation is done. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS"></a>NM_SECRET_AGENT_ERROR_NO_SECRETS</p></td>
-<td class="enum_member_description">
-<p>the agent cannot find any secrets for this
- connection</p>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSecretAgentGetSecretsFlags"></a><h3>enum NMSecretAgentGetSecretsFlags</h3>
-<p><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> values modify the behavior of a GetSecrets request.</p>
-<div class="refsect3">
-<a name="id-1.3.26.10.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-secret-agent-delete-secrets"></a><h3>nm_secret_agent_delete_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_delete_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()"><span class="type">NMSecretAgentDeleteSecretsFunc</span></a> callback</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Asynchronously ask the agent to delete all saved secrets belonging to
+<em class="parameter"><code>connection</code></em>.
+</p>
+<p>
+Virtual: delete_secrets
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS"></a>NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE</p></td>
-<td class="enum_member_description">
-<p>no special behavior; by default no
-user interaction is allowed and requests for secrets are fulfilled from
-persistent storage, or if no secrets are available an error is returned.</p>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS"></a>NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION</p></td>
-<td class="enum_member_description">
-<p>allows the request to
-interact with the user, possibly prompting via UI for secrets if any are
-required, or if none are found in persistent storage.</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS"></a>NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW</p></td>
-<td class="enum_member_description">
-<p>explicitly prompt for new
-secrets from the user. This flag signals that NetworkManager thinks any
-existing secrets are invalid or wrong. This flag implies that interaction
-is allowed.</p>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>a callback, to be invoked when the operation is done. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS"></a>NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED</p></td>
-<td class="enum_member_description">
-<p>set if the request was
-initiated by user-requested action via the D-Bus interface, as opposed to
-automatically initiated by NetworkManager in response to (for example) scan
-results or carrier changes.</p>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMSecretAgent.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SECRET-AGENT-IDENTIFIER:CAPS"></a><h3>NM_SECRET_AGENT_IDENTIFIER</h3>
-<pre class="programlisting">#define NM_SECRET_AGENT_IDENTIFIER "identifier"
-</pre>
+<a name="NMSecretAgent--auto-register"></a><h3>The <code class="literal">"auto-register"</code> property</h3>
+<pre class="programlisting"> "auto-register" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
<p>
+If TRUE, the agent will attempt to automatically register itself after
+it is created (via an idle handler) and to re-register itself if
+NetworkManager restarts. If FALSE, the agent does not automatically
+register with NetworkManager, and <a class="link" href="NMSecretAgent.html#nm-secret-agent-register" title="nm_secret_agent_register ()"><code class="function">nm_secret_agent_register()</code></a> must be
+called. If 'auto-register' is TRUE, calling <a class="link" href="NMSecretAgent.html#nm-secret-agent-unregister" title="nm_secret_agent_unregister ()"><code class="function">nm_secret_agent_unregister()</code></a>
+will suppress auto-registration until <a class="link" href="NMSecretAgent.html#nm-secret-agent-register" title="nm_secret_agent_register ()"><code class="function">nm_secret_agent_register()</code></a> is
+called, which re-enables auto-registration.
</p>
+<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SECRET-AGENT-AUTO-REGISTER:CAPS"></a><h3>NM_SECRET_AGENT_AUTO_REGISTER</h3>
-<pre class="programlisting">#define NM_SECRET_AGENT_AUTO_REGISTER "auto-register"
-</pre>
+<a name="NMSecretAgent--capabilities"></a><h3>The <code class="literal">"capabilities"</code> property</h3>
+<pre class="programlisting"> "capabilities" <a class="link" href="NMSecretAgent.html#NMSecretAgentCapabilities" title="enum NMSecretAgentCapabilities"><span class="type">NMSecretAgentCapabilities</span></a> : Read / Write / Construct</pre>
<p>
+A bitfield of <a class="link" href="NMSecretAgent.html#NMSecretAgentCapabilities" title="enum NMSecretAgentCapabilities"><code class="literal">NMSecretAgentCapabilities</code></a>.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SECRET-AGENT-REGISTERED:CAPS"></a><h3>NM_SECRET_AGENT_REGISTERED</h3>
-<pre class="programlisting">#define NM_SECRET_AGENT_REGISTERED "registered"
-</pre>
+<a name="NMSecretAgent--identifier"></a><h3>The <code class="literal">"identifier"</code> property</h3>
+<pre class="programlisting"> "identifier" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre>
<p>
+Identifies this agent; only one agent in each user session may use the
+same identifier. Identifier formatting follows the same rules as
+D-Bus bus names with the exception that the ':' character is not
+allowed. The valid set of characters is "[A-Z][a-z][0-9]_-." and the
+identifier is limited in length to 255 characters with a minimum
+of 3 characters. An example valid identifier is 'org.gnome.nm-applet'
+(without quotes).
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS"></a><h3>NM_SECRET_AGENT_REGISTRATION_RESULT</h3>
-<pre class="programlisting">#define NM_SECRET_AGENT_REGISTRATION_RESULT "registration-result"
-</pre>
+<a name="NMSecretAgent--registered"></a><h3>The <code class="literal">"registered"</code> property</h3>
+<pre class="programlisting"> "registered" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
<p>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the agent is registered with NetworkManager, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSecretAgent.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSecretAgent--auto-register"></a><h3>The <code class="literal">“auto-registerâ€</code> property</h3>
-<pre class="programlisting"> “auto-register†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Auto Register.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSecretAgent--identifier"></a><h3>The <code class="literal">“identifierâ€</code> property</h3>
-<pre class="programlisting"> “identifier†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Identifier.</p>
-<p>Flags: Read / Write / Construct Only</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSecretAgent--registered"></a><h3>The <code class="literal">“registeredâ€</code> property</h3>
-<pre class="programlisting"> “registered†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Registered.</p>
-<p>Flags: Read</p>
<p>Default value: FALSE</p>
</div>
</div>
<div class="refsect1">
<a name="NMSecretAgent.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMSecretAgent-registration-result"></a><h3>The <code class="literal">“registration-resultâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> error,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMSecretAgent-registration-result"></a><h3>The <code class="literal">"registration-result"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> error,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+Indicates the result of a registration request; if <em class="parameter"><code>error</code></em> is NULL the
+request was successful.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>agent</code></em> :</span></p></td>
+<td>the agent that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>the error, if any, that occured while registering</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMVPNConnection.html b/docs/libnm-glib/html/NMVPNConnection.html
index 1b1238f9d..4241b4674 100644
--- a/docs/libnm-glib/html/NMVPNConnection.html
+++ b/docs/libnm-glib/html/NMVPNConnection.html
@@ -2,29 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMVPNConnection</title>
+<title>NMVPNConnection</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMSecretAgent.html" title="NMSecretAgent">
<link rel="next" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMVPNConnection.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMVPNConnection.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMVPNConnection.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMVPNConnection.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSecretAgent.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="libnm-glib-NMVPNPlugin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSecretAgent.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="libnm-glib-NMVPNPlugin.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMVPNConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMVPNConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMVPNConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMVPNConnection.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMVPNConnection.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMVPNConnection.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMVPNConnection"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,105 +41,46 @@
<h2><span class="refentrytitle"><a name="NMVPNConnection.top_of_page"></a>NMVPNConnection</span></h2>
<p>NMVPNConnection</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMVPNConnection.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMVPNConnection.html#nm-vpn-connection-new" title="nm_vpn_connection_new ()">nm_vpn_connection_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMVPNConnectionState</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-vpn-state" title="nm_vpn_connection_get_vpn_state ()">nm_vpn_connection_get_vpn_state</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-banner" title="nm_vpn_connection_get_banner ()">nm_vpn_connection_get_banner</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMVPNConnection.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMVPNConnection.html#NM-VPN-CONNECTION-VPN-STATE:CAPS" title="NM_VPN_CONNECTION_VPN_STATE">NM_VPN_CONNECTION_VPN_STATE</a>
+#define <a class="link" href="NMVPNConnection.html#NM-VPN-CONNECTION-BANNER:CAPS" title="NM_VPN_CONNECTION_BANNER">NM_VPN_CONNECTION_BANNER</a>
+ <a class="link" href="NMVPNConnection.html#NMVPNConnection-struct" title="NMVPNConnection">NMVPNConnection</a>;
+ <a class="link" href="NMVPNConnection.html#NMVPNConnectionClass" title="NMVPNConnectionClass">NMVPNConnectionClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMVPNConnection.html#nm-vpn-connection-new" title="nm_vpn_connection_new ()">nm_vpn_connection_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+<span class="returnvalue">NMVPNConnectionState</span> <a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-vpn-state" title="nm_vpn_connection_get_vpn_state ()">nm_vpn_connection_get_vpn_state</a> (<em class="parameter"><code><a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *vpn</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-banner" title="nm_vpn_connection_get_banner ()">nm_vpn_connection_get_banner</a> (<em class="parameter"><code><a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *vpn</code></em>);
+</pre>
</div>
<div class="refsect1">
-<a name="NMVPNConnection.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMVPNConnection.html#NMVPNConnection--banner" title="The “banner†property">banner</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMVPNConnection.html#NMVPNConnection--vpn-state" title="The “vpn-state†property">vpn-state</a></td>
-<td class="property_flags">Read</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMVPNConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----<a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+ +----NMVPNConnection
+</pre>
</div>
<div class="refsect1">
-<a name="NMVPNConnection.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
-</colgroup>
-<tbody><tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMVPNConnection.html#NMVPNConnection-vpn-state-changed" title="The “vpn-state-changed†signal">vpn-state-changed</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr></tbody>
-</table></div>
+<a name="NMVPNConnection.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMVPNConnection implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
</div>
<div class="refsect1">
-<a name="NMVPNConnection.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMVPNConnection.html#NM-VPN-CONNECTION-VPN-STATE:CAPS" title="NM_VPN_CONNECTION_VPN_STATE">NM_VPN_CONNECTION_VPN_STATE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMVPNConnection.html#NM-VPN-CONNECTION-BANNER:CAPS" title="NM_VPN_CONNECTION_BANNER">NM_VPN_CONNECTION_BANNER</a></td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMVPNConnection.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMVPNConnection.html#NMVPNConnection--banner" title='The "banner" property'>banner</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMVPNConnection.html#NMVPNConnection--vpn-state" title='The "vpn-state" property'>vpn-state</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+</pre>
</div>
<div class="refsect1">
-<a name="NMVPNConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
- <span class="lineart">╰──</span> NMVPNConnection
+<a name="NMVPNConnection.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMVPNConnection.html#NMVPNConnection-vpn-state-changed" title='The "vpn-state-changed" signal'>vpn-state-changed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
</pre>
</div>
<div class="refsect1">
@@ -139,130 +89,152 @@
</p>
</div>
<div class="refsect1">
-<a name="NMVPNConnection.functions_details"></a><h2>Functions</h2>
+<a name="NMVPNConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-VPN-CONNECTION-VPN-STATE:CAPS"></a><h3>NM_VPN_CONNECTION_VPN_STATE</h3>
+<pre class="programlisting">#define NM_VPN_CONNECTION_VPN_STATE "vpn-state"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-CONNECTION-BANNER:CAPS"></a><h3>NM_VPN_CONNECTION_BANNER</h3>
+<pre class="programlisting">#define NM_VPN_CONNECTION_BANNER "banner"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVPNConnection-struct"></a><h3>NMVPNConnection</h3>
+<pre class="programlisting">typedef struct _NMVPNConnection NMVPNConnection;</pre>
+<p>
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-vpn-connection-new"></a><h3>nm_vpn_connection_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_vpn_connection_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.27.9.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMVPNConnectionClass"></a><h3>NMVPNConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ NMActiveConnectionClass parent;
+
+ /* Signals */
+ void (*vpn_state_changed) (NMVPNConnection *connection,
+ NMVPNConnectionState state,
+ NMVPNConnectionStateReason reason);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMVPNConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-connection-new"></a><h3>nm_vpn_connection_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_vpn_connection_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the DBus object path of the new connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the DBus object path of the new connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new connection object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.27.9.2.6"></a><h4>Returns</h4>
-<p> a new connection object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-connection-get-vpn-state"></a><h3>nm_vpn_connection_get_vpn_state ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMVPNConnectionState</span>
-nm_vpn_connection_get_vpn_state (<em class="parameter"><code><a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *vpn</code></em>);</pre>
-<p>Gets the current <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> state.</p>
-<div class="refsect3">
-<a name="id-1.3.27.9.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-vpn-connection-get-vpn-state"></a><h3>nm_vpn_connection_get_vpn_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMVPNConnectionState</span> nm_vpn_connection_get_vpn_state (<em class="parameter"><code><a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *vpn</code></em>);</pre>
+<p>
+Gets the current <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> state.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>vpn</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vpn</code></em> :</span></p></td>
+<td>a <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the VPN state of the active VPN connection.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.27.9.3.6"></a><h4>Returns</h4>
-<p> the VPN state of the active VPN connection.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-connection-get-banner"></a><h3>nm_vpn_connection_get_banner ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_vpn_connection_get_banner (<em class="parameter"><code><a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *vpn</code></em>);</pre>
-<p>Gets the VPN login banner of the active <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.27.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-vpn-connection-get-banner"></a><h3>nm_vpn_connection_get_banner ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_vpn_connection_get_banner (<em class="parameter"><code><a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *vpn</code></em>);</pre>
+<p>
+Gets the VPN login banner of the active <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>vpn</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vpn</code></em> :</span></p></td>
+<td>a <a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the VPN login banner of the VPN connection. This is the internal
+string used by the connection, and must not be modified.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.27.9.4.6"></a><h4>Returns</h4>
-<p> the VPN login banner of the VPN connection. This is the internal
-string used by the connection, and must not be modified.</p>
-<p></p>
-</div>
-</div>
</div>
<div class="refsect1">
-<a name="NMVPNConnection.other_details"></a><h2>Types and Values</h2>
+<a name="NMVPNConnection.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-VPN-CONNECTION-VPN-STATE:CAPS"></a><h3>NM_VPN_CONNECTION_VPN_STATE</h3>
-<pre class="programlisting">#define NM_VPN_CONNECTION_VPN_STATE "vpn-state"
-</pre>
+<a name="NMVPNConnection--banner"></a><h3>The <code class="literal">"banner"</code> property</h3>
+<pre class="programlisting"> "banner" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
<p>
+The VPN login banner of the active VPN connection.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-VPN-CONNECTION-BANNER:CAPS"></a><h3>NM_VPN_CONNECTION_BANNER</h3>
-<pre class="programlisting">#define NM_VPN_CONNECTION_BANNER "banner"
-</pre>
+<a name="NMVPNConnection--vpn-state"></a><h3>The <code class="literal">"vpn-state"</code> property</h3>
+<pre class="programlisting"> "vpn-state" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
+The VPN state of the active VPN connection.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMVPNConnection.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMVPNConnection--banner"></a><h3>The <code class="literal">“bannerâ€</code> property</h3>
-<pre class="programlisting"> “banner†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Login Banner.</p>
-<p>Flags: Read</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMVPNConnection--vpn-state"></a><h3>The <code class="literal">“vpn-stateâ€</code> property</h3>
-<pre class="programlisting"> “vpn-state†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Current VPN state.</p>
-<p>Flags: Read</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
@@ -270,18 +242,34 @@ string used by the connection, and must not be modified.</p>
<div class="refsect1">
<a name="NMVPNConnection.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMVPNConnection-vpn-state-changed"></a><h3>The <code class="literal">“vpn-state-changedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *nmvpnconnection,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg2,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<a name="NMVPNConnection-vpn-state-changed"></a><h3>The <code class="literal">"vpn-state-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMVPNConnection.html" title="NMVPNConnection"><span class="type">NMVPNConnection</span></a> *nmvpnconnection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg2,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nmvpnconnection</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/NMWimaxNsp.html b/docs/libnm-glib/html/NMWimaxNsp.html
index 0976c9ff9..736d56fdd 100644
--- a/docs/libnm-glib/html/NMWimaxNsp.html
+++ b/docs/libnm-glib/html/NMWimaxNsp.html
@@ -2,28 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMWimaxNsp</title>
+<title>NMWimaxNsp</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">
<link rel="next" href="NMAccessPoint.html" title="NMAccessPoint">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMWimaxNsp.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMWimaxNsp.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMWimaxNsp.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMDeviceOlpcMesh.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMAccessPoint.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMDeviceOlpcMesh.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMAccessPoint.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMWimaxNsp.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMWimaxNsp.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMWimaxNsp.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMWimaxNsp.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMWimaxNsp.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMWimaxNsp"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,423 +39,350 @@
<h2><span class="refentrytitle"><a name="NMWimaxNsp.top_of_page"></a>NMWimaxNsp</span></h2>
<p>NMWimaxNsp</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMWimaxNsp.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-NAME:CAPS" title="NM_WIMAX_NSP_NAME">NM_WIMAX_NSP_NAME</a>
+#define <a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS" title="NM_WIMAX_NSP_SIGNAL_QUALITY">NM_WIMAX_NSP_SIGNAL_QUALITY</a>
+#define <a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE:CAPS" title="NM_WIMAX_NSP_NETWORK_TYPE">NM_WIMAX_NSP_NETWORK_TYPE</a>
+enum <a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType" title="enum NMWimaxNspNetworkType">NMWimaxNspNetworkType</a>;
+ <a class="link" href="NMWimaxNsp.html#NMWimaxNsp-struct" title="NMWimaxNsp">NMWimaxNsp</a>;
+ <a class="link" href="NMWimaxNsp.html#NMWimaxNspClass" title="NMWimaxNspClass">NMWimaxNspClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-new" title="nm_wimax_nsp_new ()">nm_wimax_nsp_new</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-name" title="nm_wimax_nsp_get_name ()">nm_wimax_nsp_get_name</a> (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality" title="nm_wimax_nsp_get_signal_quality ()">nm_wimax_nsp_get_signal_quality</a> (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);
+<a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType" title="enum NMWimaxNspNetworkType"><span class="returnvalue">NMWimaxNspNetworkType</span></a> <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-network-type" title="nm_wimax_nsp_get_network_type ()">nm_wimax_nsp_get_network_type</a> (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-filter-connections" title="nm_wimax_nsp_filter_connections ()">nm_wimax_nsp_filter_connections</a> (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-connection-valid" title="nm_wimax_nsp_connection_valid ()">nm_wimax_nsp_connection_valid</a> (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMWimaxNsp.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ +----NMWimaxNsp
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMWimaxNsp.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMWimaxNsp implements
+ <a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a> and <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMWimaxNsp.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--name" title='The "name" property'>name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
+ "<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--network-type" title='The "network-type" property'>network-type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+ "<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--signal-quality" title='The "signal-quality" property'>signal-quality</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMWimaxNsp.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
<div class="refsect1">
-<a name="NMWimaxNsp.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMWimaxNsp.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-WIMAX-NSP-NAME:CAPS"></a><h3>NM_WIMAX_NSP_NAME</h3>
+<pre class="programlisting">#define NM_WIMAX_NSP_NAME "name"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS"></a><h3>NM_WIMAX_NSP_SIGNAL_QUALITY</h3>
+<pre class="programlisting">#define NM_WIMAX_NSP_SIGNAL_QUALITY "signal-quality"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-WIMAX-NSP-NETWORK-TYPE:CAPS"></a><h3>NM_WIMAX_NSP_NETWORK_TYPE</h3>
+<pre class="programlisting">#define NM_WIMAX_NSP_NETWORK_TYPE "network-type"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMWimaxNspNetworkType"></a><h3>enum NMWimaxNspNetworkType</h3>
+<pre class="programlisting">typedef enum {
+ NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN = 0,
+ NM_WIMAX_NSP_NETWORK_TYPE_HOME = 1,
+ NM_WIMAX_NSP_NETWORK_TYPE_PARTNER = 2,
+ NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER = 3
+} NMWimaxNspNetworkType;
+</pre>
+<p>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-new" title="nm_wimax_nsp_new ()">nm_wimax_nsp_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-name" title="nm_wimax_nsp_get_name ()">nm_wimax_nsp_get_name</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN</code></span></p></td>
+<td>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality" title="nm_wimax_nsp_get_signal_quality ()">nm_wimax_nsp_get_signal_quality</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-HOME:CAPS"></a><span class="term"><code class="literal">NM_WIMAX_NSP_NETWORK_TYPE_HOME</code></span></p></td>
+<td>
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType" title="enum NMWimaxNspNetworkType"><span class="returnvalue">NMWimaxNspNetworkType</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-network-type" title="nm_wimax_nsp_get_network_type ()">nm_wimax_nsp_get_network_type</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-PARTNER:CAPS"></a><span class="term"><code class="literal">NM_WIMAX_NSP_NETWORK_TYPE_PARTNER</code></span></p></td>
+<td>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-filter-connections" title="nm_wimax_nsp_filter_connections ()">nm_wimax_nsp_filter_connections</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-connection-valid" title="nm_wimax_nsp_connection_valid ()">nm_wimax_nsp_connection_valid</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-ROAMING-PARTNER:CAPS"></a><span class="term"><code class="literal">NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER</code></span></p></td>
+<td>
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMWimaxNsp.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NMWimaxNsp-struct"></a><h3>NMWimaxNsp</h3>
+<pre class="programlisting">typedef struct _NMWimaxNsp NMWimaxNsp;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMWimaxNspClass"></a><h3>NMWimaxNspClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMWimaxNspClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-wimax-nsp-new"></a><h3>nm_wimax_nsp_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_wimax_nsp_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMWimaxNsp.html#NMWimaxNsp--name" title="The “name†property">name</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a>
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMWimaxNsp.html#NMWimaxNsp--network-type" title="The “network-type†property">network-type</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the D-Bus object path of the WiMAX NSP</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMWimaxNsp.html#NMWimaxNsp--signal-quality" title="The “signal-quality†property">signal-quality</a></td>
-<td class="property_flags">Read</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new WiMAX NSP. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMWimaxNsp.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-wimax-nsp-get-name"></a><h3>nm_wimax_nsp_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_wimax_nsp_get_name (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);</pre>
+<p>
+Gets the name of the wimax NSP
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-NAME:CAPS" title="NM_WIMAX_NSP_NAME">NM_WIMAX_NSP_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS" title="NM_WIMAX_NSP_SIGNAL_QUALITY">NM_WIMAX_NSP_SIGNAL_QUALITY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE:CAPS" title="NM_WIMAX_NSP_NETWORK_TYPE">NM_WIMAX_NSP_NETWORK_TYPE</a></td>
+<td><p><span class="term"><em class="parameter"><code>nsp</code></em> :</span></p></td>
+<td>a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>
+</td>
</tr>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType" title="enum NMWimaxNspNetworkType">NMWimaxNspNetworkType</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMWimaxNsp.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">╰──</span> NMWimaxNsp
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMWimaxNsp.description"></a><h2>Description</h2>
+<hr>
+<div class="refsect2">
+<a name="nm-wimax-nsp-get-signal-quality"></a><h3>nm_wimax_nsp_get_signal_quality ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_wimax_nsp_get_signal_quality (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);</pre>
<p>
+Gets the WPA signal quality of the wimax NSP.
</p>
-</div>
-<div class="refsect1">
-<a name="NMWimaxNsp.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-wimax-nsp-new"></a><h3>nm_wimax_nsp_new ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_wimax_nsp_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.16.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>nsp</code></em> :</span></p></td>
+<td>a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the D-Bus object path of the WiMAX NSP</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the signal quality</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.16.8.2.6"></a><h4>Returns</h4>
-<p> a new WiMAX NSP. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-wimax-nsp-get-name"></a><h3>nm_wimax_nsp_get_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_wimax_nsp_get_name (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);</pre>
-<p>Gets the name of the wimax NSP</p>
-<div class="refsect3">
-<a name="id-1.3.16.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>nsp</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.16.8.3.6"></a><h4>Returns</h4>
-<p> the name</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-wimax-nsp-get-signal-quality"></a><h3>nm_wimax_nsp_get_signal_quality ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_wimax_nsp_get_signal_quality (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);</pre>
-<p>Gets the WPA signal quality of the wimax NSP.</p>
-<div class="refsect3">
-<a name="id-1.3.16.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>nsp</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.16.8.4.6"></a><h4>Returns</h4>
-<p> the signal quality</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-wimax-nsp-get-network-type"></a><h3>nm_wimax_nsp_get_network_type ()</h3>
-<pre class="programlisting"><a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType" title="enum NMWimaxNspNetworkType"><span class="returnvalue">NMWimaxNspNetworkType</span></a>
-nm_wimax_nsp_get_network_type (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);</pre>
-<p>Gets the network type of the wimax NSP.</p>
-<div class="refsect3">
-<a name="id-1.3.16.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>nsp</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.16.8.5.6"></a><h4>Returns</h4>
-<p> the network type</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-wimax-nsp-filter-connections"></a><h3>nm_wimax_nsp_filter_connections ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_wimax_nsp_filter_connections (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
- <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);</pre>
-<p>Filters a given list of connections for a given <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> object and
-return connections which may be activated with the access point. Any
-returned connections will match the <em class="parameter"><code>nsp</code></em>
-'s network name and other attributes.</p>
-<div class="refsect3">
-<a name="id-1.3.16.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-wimax-nsp-get-network-type"></a><h3>nm_wimax_nsp_get_network_type ()</h3>
+<pre class="programlisting"><a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType" title="enum NMWimaxNspNetworkType"><span class="returnvalue">NMWimaxNspNetworkType</span></a> nm_wimax_nsp_get_network_type (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>);</pre>
+<p>
+Gets the network type of the wimax NSP.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>nsp</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> to filter connections for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>nsp</code></em> :</span></p></td>
+<td>a <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>connections</p></td>
-<td class="parameter_description"><p> a list of
-<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the network type</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.16.8.6.6"></a><h4>Returns</h4>
-<p> a
-list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>nsp</code></em>
-.
-The elements of the list are owned by their creator and should not be freed
-by the caller, but the returned list itself is owned by the caller and should
-be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. </p>
-<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-wimax-nsp-connection-valid"></a><h3>nm_wimax_nsp_connection_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_wimax_nsp_connection_valid (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Validates a given connection against a given WiMAX NSP to ensure that the
-connection may be activated with that NSP. The connection must match the
-<em class="parameter"><code>nsp</code></em>
-'s network name and other attributes.</p>
-<div class="refsect3">
-<a name="id-1.3.16.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-wimax-nsp-filter-connections"></a><h3>nm_wimax_nsp_filter_connections ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_wimax_nsp_filter_connections (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);</pre>
+<p>
+Filters a given list of connections for a given <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> object and
+return connections which may be activated with the access point. Any
+returned connections will match the <em class="parameter"><code>nsp</code></em>'s network name and other attributes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>nsp</p></td>
-<td class="parameter_description"><p>an <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> to validate <em class="parameter"><code>connection</code></em>
-against</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>nsp</code></em> :</span></p></td>
+<td>an <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> to filter connections for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connections</code></em> :</span></p></td>
+<td>a list of
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>nsp</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a
+list of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>nsp</code></em>.
+The elements of the list are owned by their creator and should not be freed
+by the caller, but the returned list itself is owned by the caller and should
+be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.16.8.7.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this WiMAX NSP,
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it cannot be.</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMWimaxNsp.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-WIMAX-NSP-NAME:CAPS"></a><h3>NM_WIMAX_NSP_NAME</h3>
-<pre class="programlisting">#define NM_WIMAX_NSP_NAME "name"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS"></a><h3>NM_WIMAX_NSP_SIGNAL_QUALITY</h3>
-<pre class="programlisting">#define NM_WIMAX_NSP_SIGNAL_QUALITY "signal-quality"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-WIMAX-NSP-NETWORK-TYPE:CAPS"></a><h3>NM_WIMAX_NSP_NETWORK_TYPE</h3>
-<pre class="programlisting">#define NM_WIMAX_NSP_NETWORK_TYPE "network-type"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMWimaxNspNetworkType"></a><h3>enum NMWimaxNspNetworkType</h3>
+<a name="nm-wimax-nsp-connection-valid"></a><h3>nm_wimax_nsp_connection_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_wimax_nsp_connection_valid (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
+Validates a given connection against a given WiMAX NSP to ensure that the
+connection may be activated with that NSP. The connection must match the
+<em class="parameter"><code>nsp</code></em>'s network name and other attributes.
</p>
-<div class="refsect3">
-<a name="id-1.3.16.9.5.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-UNKNOWN:CAPS"></a>NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN</p></td>
-<td class="enum_member_description"> </td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-HOME:CAPS"></a>NM_WIMAX_NSP_NETWORK_TYPE_HOME</p></td>
-<td class="enum_member_description"> </td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>nsp</code></em> :</span></p></td>
+<td>an <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> to validate <em class="parameter"><code>connection</code></em> against</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-PARTNER:CAPS"></a>NM_WIMAX_NSP_NETWORK_TYPE_PARTNER</p></td>
-<td class="enum_member_description"> </td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>nsp</code></em>
+</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-WIMAX-NSP-NETWORK-TYPE-ROAMING-PARTNER:CAPS"></a>NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER</p></td>
-<td class="enum_member_description"> </td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection may be activated with this WiMAX NSP,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it cannot be.</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-</div>
<div class="refsect1">
<a name="NMWimaxNsp.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMWimaxNsp--name"></a><h3>The <code class="literal">“nameâ€</code> property</h3>
-<pre class="programlisting"> “name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Name.</p>
-<p>Flags: Read</p>
+<a name="NMWimaxNsp--name"></a><h3>The <code class="literal">"name"</code> property</h3>
+<pre class="programlisting"> "name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
+<p>
+The name of the WiMAX NSP.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMWimaxNsp--network-type"></a><h3>The <code class="literal">“network-typeâ€</code> property</h3>
-<pre class="programlisting"> “network-type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Network Type.</p>
-<p>Flags: Read</p>
+<a name="NMWimaxNsp--network-type"></a><h3>The <code class="literal">"network-type"</code> property</h3>
+<pre class="programlisting"> "network-type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The network type of the WiMAX NSP.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMWimaxNsp--signal-quality"></a><h3>The <code class="literal">“signal-qualityâ€</code> property</h3>
-<pre class="programlisting"> “signal-quality†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Signal Quality.</p>
-<p>Flags: Read</p>
+<a name="NMWimaxNsp--signal-quality"></a><h3>The <code class="literal">"signal-quality"</code> property</h3>
+<pre class="programlisting"> "signal-quality" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The signal quality of the WiMAX NSP.
+</p>
<p>Allowed values: &lt;= 100</p>
<p>Default value: 0</p>
</div>
@@ -455,6 +390,6 @@ against</p></td>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/annotation-glossary.html b/docs/libnm-glib/html/annotation-glossary.html
index ede100278..7c26248c6 100644
--- a/docs/libnm-glib/html/annotation-glossary.html
+++ b/docs/libnm-glib/html/annotation-glossary.html
@@ -2,32 +2,37 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: Annotation Glossary</title>
+<title>Annotation Glossary</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="index.html" title="libnm-glib Reference Manual">
<link rel="prev" href="api-index-full.html" title="API Index">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"><span id="nav_glossary"><a class="shortcut" href="#glsA">A</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsC">C</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsE">E</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsO">O</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsS">S</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsT">T</a></span></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td> </td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#glsA">A</a>
+  | 
+ <a class="shortcut" href="#glsC">C</a>
+  | 
+ <a class="shortcut" href="#glsE">E</a>
+  | 
+ <a class="shortcut" href="#glsO">O</a>
+  | 
+ <a class="shortcut" href="#glsS">S</a>
+  | 
+ <a class="shortcut" href="#glsT">T</a>
+</td></tr>
+</table>
<div class="glossary">
<div class="titlepage"><div><div><h1 class="title">
<a name="annotation-glossary"></a>Annotation Glossary</h1></div></div></div>
@@ -55,9 +60,11 @@
<dd class="glossdef"><p>Free data after the code is done.</p></dd>
<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
<dd class="glossdef"><p>Don't free data after the code is done.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-type"></a>type</span></dt>
+<dd class="glossdef"><p>Override the parsed C type with given type.</p></dd>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/api-index-full.html b/docs/libnm-glib/html/api-index-full.html
index 822db0461..b576616e4 100644
--- a/docs/libnm-glib/html/api-index-full.html
+++ b/docs/libnm-glib/html/api-index-full.html
@@ -2,81 +2,94 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: API Index</title>
+<title>API Index</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="index.html" title="libnm-glib Reference Manual">
<link rel="prev" href="object-tree.html" title="Object Hierarchy">
<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxA">A</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxC">C</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxD">D</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxI">I</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxO">O</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxR">R</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxS">S</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxV">V</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxW">W</a></span></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="object-tree.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="object-tree.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#idxA">A</a>
+  | 
+ <a class="shortcut" href="#idxC">C</a>
+  | 
+ <a class="shortcut" href="#idxD">D</a>
+  | 
+ <a class="shortcut" href="#idxI">I</a>
+  | 
+ <a class="shortcut" href="#idxO">O</a>
+  | 
+ <a class="shortcut" href="#idxR">R</a>
+  | 
+ <a class="shortcut" href="#idxS">S</a>
+  | 
+ <a class="shortcut" href="#idxV">V</a>
+  | 
+ <a class="shortcut" href="#idxW">W</a>
+</td></tr>
+</table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
<a name="api-index-full"></a>API Index</h1></div></div></div>
<a name="idx"></a><a name="idxA"></a><h3 class="title">A</h3>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--bssid" title="The “bssid†property">NMAccessPoint:bssid</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint-struct" title="NMAccessPoint">NMAccessPoint</a>, struct in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--flags" title="The “flags†property">NMAccessPoint:flags</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--bssid" title='The "bssid" property'>NMAccessPoint:bssid</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--frequency" title="The “frequency†property">NMAccessPoint:frequency</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--flags" title='The "flags" property'>NMAccessPoint:flags</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--hw-address" title="The “hw-address†property">NMAccessPoint:hw-address</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--frequency" title='The "frequency" property'>NMAccessPoint:frequency</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--max-bitrate" title="The “max-bitrate†property">NMAccessPoint:max-bitrate</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--hw-address" title='The "hw-address" property'>NMAccessPoint:hw-address</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--mode" title="The “mode†property">NMAccessPoint:mode</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--max-bitrate" title='The "max-bitrate" property'>NMAccessPoint:max-bitrate</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--rsn-flags" title="The “rsn-flags†property">NMAccessPoint:rsn-flags</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--mode" title='The "mode" property'>NMAccessPoint:mode</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--ssid" title="The “ssid†property">NMAccessPoint:ssid</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--rsn-flags" title='The "rsn-flags" property'>NMAccessPoint:rsn-flags</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--strength" title="The “strength†property">NMAccessPoint:strength</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--ssid" title='The "ssid" property'>NMAccessPoint:ssid</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#NMAccessPoint--wpa-flags" title="The “wpa-flags†property">NMAccessPoint:wpa-flags</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--strength" title='The "strength" property'>NMAccessPoint:strength</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint--wpa-flags" title='The "wpa-flags" property'>NMAccessPoint:wpa-flags</a>, object property in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NMAccessPointClass" title="NMAccessPointClass">NMAccessPointClass</a>, struct in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
@@ -84,11 +97,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-connection-valid" title="nm_access_point_connection_valid ()">nm_access_point_connection_valid</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-connection-valid" title="nm_access_point_connection_valid ()">nm_access_point_connection_valid</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-filter-connections" title="nm_access_point_filter_connections ()">nm_access_point_filter_connections</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-filter-connections" title="nm_access_point_filter_connections ()">nm_access_point_filter_connections</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
@@ -100,43 +113,43 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-bssid" title="nm_access_point_get_bssid ()">nm_access_point_get_bssid</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-bssid" title="nm_access_point_get_bssid ()">nm_access_point_get_bssid</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-flags" title="nm_access_point_get_flags ()">nm_access_point_get_flags</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-flags" title="nm_access_point_get_flags ()">nm_access_point_get_flags</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-frequency" title="nm_access_point_get_frequency ()">nm_access_point_get_frequency</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-frequency" title="nm_access_point_get_frequency ()">nm_access_point_get_frequency</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-hw-address" title="nm_access_point_get_hw_address ()">nm_access_point_get_hw_address</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-hw-address" title="nm_access_point_get_hw_address ()">nm_access_point_get_hw_address</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-max-bitrate" title="nm_access_point_get_max_bitrate ()">nm_access_point_get_max_bitrate</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-max-bitrate" title="nm_access_point_get_max_bitrate ()">nm_access_point_get_max_bitrate</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-mode" title="nm_access_point_get_mode ()">nm_access_point_get_mode</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-mode" title="nm_access_point_get_mode ()">nm_access_point_get_mode</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-rsn-flags" title="nm_access_point_get_rsn_flags ()">nm_access_point_get_rsn_flags</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-rsn-flags" title="nm_access_point_get_rsn_flags ()">nm_access_point_get_rsn_flags</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-ssid" title="nm_access_point_get_ssid ()">nm_access_point_get_ssid</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-ssid" title="nm_access_point_get_ssid ()">nm_access_point_get_ssid</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-strength" title="nm_access_point_get_strength ()">nm_access_point_get_strength</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-strength" title="nm_access_point_get_strength ()">nm_access_point_get_strength</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-get-wpa-flags" title="nm_access_point_get_wpa_flags ()">nm_access_point_get_wpa_flags</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-get-wpa-flags" title="nm_access_point_get_wpa_flags ()">nm_access_point_get_wpa_flags</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
@@ -152,7 +165,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMAccessPoint.html#nm-access-point-new" title="nm_access_point_new ()">nm_access_point_new</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+<a class="link" href="NMAccessPoint.html#nm-access-point-new" title="nm_access_point_new ()">nm_access_point_new</a>, function in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
</dt>
<dd></dd>
<dt>
@@ -172,35 +185,71 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--connection" title="The “connection†property">NMActiveConnection:connection</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection-struct" title="NMActiveConnection">NMActiveConnection</a>, struct in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--connection" title='The "connection" property'>NMActiveConnection:connection</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--default" title='The "default" property'>NMActiveConnection:default</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--default6" title='The "default6" property'>NMActiveConnection:default6</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--devices" title='The "devices" property'>NMActiveConnection:devices</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--dhcp4-config" title='The "dhcp4-config" property'>NMActiveConnection:dhcp4-config</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--dhcp6-config" title='The "dhcp6-config" property'>NMActiveConnection:dhcp6-config</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--id" title='The "id" property'>NMActiveConnection:id</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--ip4-config" title='The "ip4-config" property'>NMActiveConnection:ip4-config</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--default" title="The “default†property">NMActiveConnection:default</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--ip6-config" title='The "ip6-config" property'>NMActiveConnection:ip6-config</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--default6" title="The “default6†property">NMActiveConnection:default6</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--master" title='The "master" property'>NMActiveConnection:master</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--devices" title="The “devices†property">NMActiveConnection:devices</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--specific-object" title='The "specific-object" property'>NMActiveConnection:specific-object</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--master" title="The “master†property">NMActiveConnection:master</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title='The "state" property'>NMActiveConnection:state</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--specific-object" title="The “specific-object†property">NMActiveConnection:specific-object</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--type" title='The "type" property'>NMActiveConnection:type</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title="The “state†property">NMActiveConnection:state</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--uuid" title='The "uuid" property'>NMActiveConnection:uuid</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#NMActiveConnection--uuid" title="The “uuid†property">NMActiveConnection:uuid</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection--vpn" title='The "vpn" property'>NMActiveConnection:vpn</a>, object property in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnectionClass" title="NMActiveConnectionClass">NMActiveConnectionClass</a>, struct in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
@@ -220,35 +269,83 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-connection" title="nm_active_connection_get_connection ()">nm_active_connection_get_connection</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_DHCP4_CONFIG">NM_ACTIVE_CONNECTION_DHCP4_CONFIG</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_DHCP6_CONFIG">NM_ACTIVE_CONNECTION_DHCP6_CONFIG</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-connection" title="nm_active_connection_get_connection ()">nm_active_connection_get_connection</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-connection-type" title="nm_active_connection_get_connection_type ()">nm_active_connection_get_connection_type</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-default" title="nm_active_connection_get_default ()">nm_active_connection_get_default</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-default6" title="nm_active_connection_get_default6 ()">nm_active_connection_get_default6</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-devices" title="nm_active_connection_get_devices ()">nm_active_connection_get_devices</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-dhcp4-config" title="nm_active_connection_get_dhcp4_config ()">nm_active_connection_get_dhcp4_config</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-dhcp6-config" title="nm_active_connection_get_dhcp6_config ()">nm_active_connection_get_dhcp6_config</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-id" title="nm_active_connection_get_id ()">nm_active_connection_get_id</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-default" title="nm_active_connection_get_default ()">nm_active_connection_get_default</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-ip4-config" title="nm_active_connection_get_ip4_config ()">nm_active_connection_get_ip4_config</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-default6" title="nm_active_connection_get_default6 ()">nm_active_connection_get_default6</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-ip6-config" title="nm_active_connection_get_ip6_config ()">nm_active_connection_get_ip6_config</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-devices" title="nm_active_connection_get_devices ()">nm_active_connection_get_devices</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-master" title="nm_active_connection_get_master ()">nm_active_connection_get_master</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-master" title="nm_active_connection_get_master ()">nm_active_connection_get_master</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-specific-object" title="nm_active_connection_get_specific_object ()">nm_active_connection_get_specific_object</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-specific-object" title="nm_active_connection_get_specific_object ()">nm_active_connection_get_specific_object</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-state" title="nm_active_connection_get_state ()">nm_active_connection_get_state</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-state" title="nm_active_connection_get_state ()">nm_active_connection_get_state</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-uuid" title="nm_active_connection_get_uuid ()">nm_active_connection_get_uuid</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-get-uuid" title="nm_active_connection_get_uuid ()">nm_active_connection_get_uuid</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-vpn" title="nm_active_connection_get_vpn ()">nm_active_connection_get_vpn</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-ID:CAPS" title="NM_ACTIVE_CONNECTION_ID">NM_ACTIVE_CONNECTION_ID</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_IP4_CONFIG">NM_ACTIVE_CONNECTION_IP4_CONFIG</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS" title="NM_ACTIVE_CONNECTION_IP6_CONFIG">NM_ACTIVE_CONNECTION_IP6_CONFIG</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
@@ -256,7 +353,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMActiveConnection.html#nm-active-connection-new" title="nm_active_connection_new ()">nm_active_connection_new</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+<a class="link" href="NMActiveConnection.html#nm-active-connection-new" title="nm_active_connection_new ()">nm_active_connection_new</a>, function in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
<dt>
@@ -268,84 +365,112 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-TYPE:CAPS" title="NM_ACTIVE_CONNECTION_TYPE">NM_ACTIVE_CONNECTION_TYPE</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-UUID:CAPS" title="NM_ACTIVE_CONNECTION_UUID">NM_ACTIVE_CONNECTION_UUID</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
</dt>
<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-VPN:CAPS" title="NM_ACTIVE_CONNECTION_VPN">NM_ACTIVE_CONNECTION_VPN</a>, macro in <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+</dt>
+<dd></dd>
<a name="idxC"></a><h3 class="title">C</h3>
<dt>
-<a class="link" href="NMClient.html#NMClient-device-added" title="The “device-added†signal">NMClient::device-added</a>, object signal in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient-struct" title="NMClient">NMClient</a>, struct in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClient-device-added" title='The "device-added" signal'>NMClient::device-added</a>, object signal in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClient-device-removed" title='The "device-removed" signal'>NMClient::device-removed</a>, object signal in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClient-permission-changed" title='The "permission-changed" signal'>NMClient::permission-changed</a>, object signal in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClient--activating-connection" title='The "activating-connection" property'>NMClient:activating-connection</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClient--active-connections" title='The "active-connections" property'>NMClient:active-connections</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient-device-removed" title="The “device-removed†signal">NMClient::device-removed</a>, object signal in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--connectivity" title='The "connectivity" property'>NMClient:connectivity</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient-permission-changed" title="The “permission-changed†signal">NMClient::permission-changed</a>, object signal in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--devices" title='The "devices" property'>NMClient:devices</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--activating-connection" title="The “activating-connection†property">NMClient:activating-connection</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--manager-running" title='The "manager-running" property'>NMClient:manager-running</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--active-connections" title="The “active-connections†property">NMClient:active-connections</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--networking-enabled" title='The "networking-enabled" property'>NMClient:networking-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--connectivity" title="The “connectivity†property">NMClient:connectivity</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--primary-connection" title='The "primary-connection" property'>NMClient:primary-connection</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--manager-running" title="The “manager-running†property">NMClient:manager-running</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--startup" title='The "startup" property'>NMClient:startup</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--networking-enabled" title="The “networking-enabled†property">NMClient:networking-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--state" title='The "state" property'>NMClient:state</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--primary-connection" title="The “primary-connection†property">NMClient:primary-connection</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--version" title='The "version" property'>NMClient:version</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--state" title="The “state†property">NMClient:state</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--wimax-enabled" title='The "wimax-enabled" property'>NMClient:wimax-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--version" title="The “version†property">NMClient:version</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--wimax-hardware-enabled" title='The "wimax-hardware-enabled" property'>NMClient:wimax-hardware-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--wimax-enabled" title="The “wimax-enabled†property">NMClient:wimax-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--wireless-enabled" title='The "wireless-enabled" property'>NMClient:wireless-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--wimax-hardware-enabled" title="The “wimax-hardware-enabled†property">NMClient:wimax-hardware-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--wireless-hardware-enabled" title='The "wireless-hardware-enabled" property'>NMClient:wireless-hardware-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--wireless-enabled" title="The “wireless-enabled†property">NMClient:wireless-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--wwan-enabled" title='The "wwan-enabled" property'>NMClient:wwan-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--wireless-hardware-enabled" title="The “wireless-hardware-enabled†property">NMClient:wireless-hardware-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClient--wwan-hardware-enabled" title='The "wwan-hardware-enabled" property'>NMClient:wwan-hardware-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--wwan-enabled" title="The “wwan-enabled†property">NMClient:wwan-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()">NMClientActivateFn</a>, user_function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClient--wwan-hardware-enabled" title="The “wwan-hardware-enabled†property">NMClient:wwan-hardware-enabled</a>, object property in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()">NMClientAddActivateFn</a>, user_function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()">NMClientActivateFn</a>, user_function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClientClass" title="NMClientClass">NMClientClass</a>, struct in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()">NMClientAddActivateFn</a>, user_function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NMClientError" title="enum NMClientError">NMClientError</a>, enum in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -357,7 +482,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-activate-connection" title="nm_client_activate_connection ()">nm_client_activate_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-activate-connection" title="nm_client_activate_connection ()">nm_client_activate_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -369,19 +494,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-add-and-activate-connection" title="nm_client_add_and_activate_connection ()">nm_client_add_and_activate_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-add-and-activate-connection" title="nm_client_add_and_activate_connection ()">nm_client_add_and_activate_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()">nm_client_check_connectivity</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-check-connectivity" title="nm_client_check_connectivity ()">nm_client_check_connectivity</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()">nm_client_check_connectivity_async</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-check-connectivity-async" title="nm_client_check_connectivity_async ()">nm_client_check_connectivity_async</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-check-connectivity-finish" title="nm_client_check_connectivity_finish ()">nm_client_check_connectivity_finish</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-check-connectivity-finish" title="nm_client_check_connectivity_finish ()">nm_client_check_connectivity_finish</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -389,55 +514,71 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-deactivate-connection" title="nm_client_deactivate_connection ()">nm_client_deactivate_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-deactivate-connection" title="nm_client_deactivate_connection ()">nm_client_deactivate_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-activating-connection" title="nm_client_get_activating_connection ()">nm_client_get_activating_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NM-CLIENT-DEVICES:CAPS" title="NM_CLIENT_DEVICES">NM_CLIENT_DEVICES</a>, macro in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-active-connections" title="nm_client_get_active_connections ()">nm_client_get_active_connections</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NM-CLIENT-ERROR:CAPS" title="NM_CLIENT_ERROR">NM_CLIENT_ERROR</a>, macro in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()">nm_client_get_connectivity</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-error-quark" title="nm_client_error_quark ()">nm_client_error_quark</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-devices" title="nm_client_get_devices ()">nm_client_get_devices</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-activating-connection" title="nm_client_get_activating_connection ()">nm_client_get_activating_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-device-by-iface" title="nm_client_get_device_by_iface ()">nm_client_get_device_by_iface</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-active-connections" title="nm_client_get_active_connections ()">nm_client_get_active_connections</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-device-by-path" title="nm_client_get_device_by_path ()">nm_client_get_device_by_path</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-connectivity" title="nm_client_get_connectivity ()">nm_client_get_connectivity</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-logging" title="nm_client_get_logging ()">nm_client_get_logging</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-devices" title="nm_client_get_devices ()">nm_client_get_devices</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-manager-running" title="nm_client_get_manager_running ()">nm_client_get_manager_running</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-device-by-iface" title="nm_client_get_device_by_iface ()">nm_client_get_device_by_iface</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-permission-result" title="nm_client_get_permission_result ()">nm_client_get_permission_result</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-device-by-path" title="nm_client_get_device_by_path ()">nm_client_get_device_by_path</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-primary-connection" title="nm_client_get_primary_connection ()">nm_client_get_primary_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-logging" title="nm_client_get_logging ()">nm_client_get_logging</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-state" title="nm_client_get_state ()">nm_client_get_state</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-manager-running" title="nm_client_get_manager_running ()">nm_client_get_manager_running</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-get-version" title="nm_client_get_version ()">nm_client_get_version</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-get-permission-result" title="nm_client_get_permission_result ()">nm_client_get_permission_result</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#nm-client-get-primary-connection" title="nm_client_get_primary_connection ()">nm_client_get_primary_connection</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#nm-client-get-startup" title="nm_client_get_startup ()">nm_client_get_startup</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#nm-client-get-state" title="nm_client_get_state ()">nm_client_get_state</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#nm-client-get-version" title="nm_client_get_version ()">nm_client_get_version</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -449,23 +590,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-networking-get-enabled" title="nm_client_networking_get_enabled ()">nm_client_networking_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-networking-get-enabled" title="nm_client_networking_get_enabled ()">nm_client_networking_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-networking-set-enabled" title="nm_client_networking_set_enabled ()">nm_client_networking_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-networking-set-enabled" title="nm_client_networking_set_enabled ()">nm_client_networking_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-new" title="nm_client_new ()">nm_client_new</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-new" title="nm_client_new ()">nm_client_new</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()">nm_client_new_async</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-new-async" title="nm_client_new_async ()">nm_client_new_async</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-new-finish" title="nm_client_new_finish ()">nm_client_new_finish</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-new-finish" title="nm_client_new_finish ()">nm_client_new_finish</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -473,11 +614,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-set-logging" title="nm_client_set_logging ()">nm_client_set_logging</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-set-logging" title="nm_client_set_logging ()">nm_client_set_logging</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#nm-client-sleep" title="nm_client_sleep ()">nm_client_sleep</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-sleep" title="nm_client_sleep ()">nm_client_sleep</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#NM-CLIENT-STARTUP:CAPS" title="NM_CLIENT_STARTUP">NM_CLIENT_STARTUP</a>, macro in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -493,7 +638,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wimax-get-enabled" title="nm_client_wimax_get_enabled ()">nm_client_wimax_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wimax-get-enabled" title="nm_client_wimax_get_enabled ()">nm_client_wimax_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -501,11 +646,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wimax-hardware-get-enabled" title="nm_client_wimax_hardware_get_enabled ()">nm_client_wimax_hardware_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wimax-hardware-get-enabled" title="nm_client_wimax_hardware_get_enabled ()">nm_client_wimax_hardware_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wimax-set-enabled" title="nm_client_wimax_set_enabled ()">nm_client_wimax_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wimax-set-enabled" title="nm_client_wimax_set_enabled ()">nm_client_wimax_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -513,7 +658,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wireless-get-enabled" title="nm_client_wireless_get_enabled ()">nm_client_wireless_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wireless-get-enabled" title="nm_client_wireless_get_enabled ()">nm_client_wireless_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -521,11 +666,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wireless-hardware-get-enabled" title="nm_client_wireless_hardware_get_enabled ()">nm_client_wireless_hardware_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wireless-hardware-get-enabled" title="nm_client_wireless_hardware_get_enabled ()">nm_client_wireless_hardware_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wireless-set-enabled" title="nm_client_wireless_set_enabled ()">nm_client_wireless_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wireless-set-enabled" title="nm_client_wireless_set_enabled ()">nm_client_wireless_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -533,7 +678,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wwan-get-enabled" title="nm_client_wwan_get_enabled ()">nm_client_wwan_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wwan-get-enabled" title="nm_client_wwan_get_enabled ()">nm_client_wwan_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
@@ -541,104 +686,124 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wwan-hardware-get-enabled" title="nm_client_wwan_hardware_get_enabled ()">nm_client_wwan_hardware_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wwan-hardware-get-enabled" title="nm_client_wwan_hardware_get_enabled ()">nm_client_wwan_hardware_get_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMClient.html#nm-client-wwan-set-enabled" title="nm_client_wwan_set_enabled ()">nm_client_wwan_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+<a class="link" href="NMClient.html#nm-client-wwan-set-enabled" title="nm_client_wwan_set_enabled ()">nm_client_wwan_set_enabled</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
</dt>
<dd></dd>
<a name="idxD"></a><h3 class="title">D</h3>
<dt>
-<a class="link" href="NMDevice.html#NMDevice-state-changed" title="The “state-changed†signal">NMDevice::state-changed</a>, object signal in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice-struct" title="NMDevice">NMDevice</a>, struct in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDevice-state-changed" title='The "state-changed" signal'>NMDevice::state-changed</a>, object signal in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDevice--active-connection" title='The "active-connection" property'>NMDevice:active-connection</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDevice--autoconnect" title='The "autoconnect" property'>NMDevice:autoconnect</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDevice--available-connections" title='The "available-connections" property'>NMDevice:available-connections</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDevice--capabilities" title='The "capabilities" property'>NMDevice:capabilities</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--active-connection" title="The “active-connection†property">NMDevice:active-connection</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--device-type" title='The "device-type" property'>NMDevice:device-type</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--autoconnect" title="The “autoconnect†property">NMDevice:autoconnect</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--dhcp4-config" title='The "dhcp4-config" property'>NMDevice:dhcp4-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--available-connections" title="The “available-connections†property">NMDevice:available-connections</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--dhcp6-config" title='The "dhcp6-config" property'>NMDevice:dhcp6-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--capabilities" title="The “capabilities†property">NMDevice:capabilities</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--driver" title='The "driver" property'>NMDevice:driver</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--device-type" title="The “device-type†property">NMDevice:device-type</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--driver-version" title='The "driver-version" property'>NMDevice:driver-version</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--dhcp4-config" title="The “dhcp4-config†property">NMDevice:dhcp4-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--firmware-missing" title='The "firmware-missing" property'>NMDevice:firmware-missing</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--dhcp6-config" title="The “dhcp6-config†property">NMDevice:dhcp6-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--firmware-version" title='The "firmware-version" property'>NMDevice:firmware-version</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--driver" title="The “driver†property">NMDevice:driver</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--interface" title='The "interface" property'>NMDevice:interface</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--driver-version" title="The “driver-version†property">NMDevice:driver-version</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--ip-interface" title='The "ip-interface" property'>NMDevice:ip-interface</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--firmware-missing" title="The “firmware-missing†property">NMDevice:firmware-missing</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--ip4-config" title='The "ip4-config" property'>NMDevice:ip4-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--firmware-version" title="The “firmware-version†property">NMDevice:firmware-version</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--ip6-config" title='The "ip6-config" property'>NMDevice:ip6-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--interface" title="The “interface†property">NMDevice:interface</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--managed" title='The "managed" property'>NMDevice:managed</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--ip-interface" title="The “ip-interface†property">NMDevice:ip-interface</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--mtu" title='The "mtu" property'>NMDevice:mtu</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--ip4-config" title="The “ip4-config†property">NMDevice:ip4-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--physical-port-id" title='The "physical-port-id" property'>NMDevice:physical-port-id</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--ip6-config" title="The “ip6-config†property">NMDevice:ip6-config</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--product" title='The "product" property'>NMDevice:product</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--managed" title="The “managed†property">NMDevice:managed</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--state" title='The "state" property'>NMDevice:state</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--product" title="The “product†property">NMDevice:product</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--state-reason" title='The "state-reason" property'>NMDevice:state-reason</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--state" title="The “state†property">NMDevice:state</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--udi" title='The "udi" property'>NMDevice:udi</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--state-reason" title="The “state-reason†property">NMDevice:state-reason</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDevice--vendor" title='The "vendor" property'>NMDevice:vendor</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--udi" title="The “udi†property">NMDevice:udi</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceAdsl.html#NMDeviceAdsl-struct" title="NMDeviceAdsl">NMDeviceAdsl</a>, struct in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDevice--vendor" title="The “vendor†property">NMDevice:vendor</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceAdsl.html#NMDeviceAdsl--carrier" title='The "carrier" property'>NMDeviceAdsl:carrier</a>, object property in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceAdsl.html#NMDeviceAdsl--carrier" title="The “carrier†property">NMDeviceAdsl:carrier</a>, object property in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
+<a class="link" href="NMDeviceAdsl.html#NMDeviceAdslClass" title="NMDeviceAdslClass">NMDeviceAdslClass</a>, struct in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
</dt>
<dd></dd>
<dt>
@@ -646,15 +811,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#NMDeviceBond--carrier" title="The “carrier†property">NMDeviceBond:carrier</a>, object property in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#NMDeviceBond-struct" title="NMDeviceBond">NMDeviceBond</a>, struct in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#NMDeviceBond--hw-address" title="The “hw-address†property">NMDeviceBond:hw-address</a>, object property in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#NMDeviceBond--carrier" title='The "carrier" property'>NMDeviceBond:carrier</a>, object property in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#NMDeviceBond--slaves" title="The “slaves†property">NMDeviceBond:slaves</a>, object property in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#NMDeviceBond--hw-address" title='The "hw-address" property'>NMDeviceBond:hw-address</a>, object property in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBond.html#NMDeviceBond--slaves" title='The "slaves" property'>NMDeviceBond:slaves</a>, object property in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBond.html#NMDeviceBondClass" title="NMDeviceBondClass">NMDeviceBondClass</a>, struct in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
@@ -662,15 +835,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--carrier" title="The “carrier†property">NMDeviceBridge:carrier</a>, object property in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#NMDeviceBridge-struct" title="NMDeviceBridge">NMDeviceBridge</a>, struct in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--hw-address" title="The “hw-address†property">NMDeviceBridge:hw-address</a>, object property in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--carrier" title='The "carrier" property'>NMDeviceBridge:carrier</a>, object property in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--slaves" title="The “slaves†property">NMDeviceBridge:slaves</a>, object property in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--hw-address" title='The "hw-address" property'>NMDeviceBridge:hw-address</a>, object property in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBridge.html#NMDeviceBridge--slaves" title='The "slaves" property'>NMDeviceBridge:slaves</a>, object property in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBridge.html#NMDeviceBridgeClass" title="NMDeviceBridgeClass">NMDeviceBridgeClass</a>, struct in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
@@ -678,15 +859,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#NMDeviceBt--bt-capabilities" title="The “bt-capabilities†property">NMDeviceBt:bt-capabilities</a>, object property in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#NMDeviceBt-struct" title="NMDeviceBt">NMDeviceBt</a>, struct in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBt.html#NMDeviceBt--bt-capabilities" title='The "bt-capabilities" property'>NMDeviceBt:bt-capabilities</a>, object property in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#NMDeviceBt--hw-address" title="The “hw-address†property">NMDeviceBt:hw-address</a>, object property in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#NMDeviceBt--hw-address" title='The "hw-address" property'>NMDeviceBt:hw-address</a>, object property in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#NMDeviceBt--name" title="The “name†property">NMDeviceBt:name</a>, object property in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#NMDeviceBt--name" title='The "name" property'>NMDeviceBt:name</a>, object property in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBt.html#NMDeviceBtClass" title="NMDeviceBtClass">NMDeviceBtClass</a>, struct in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
@@ -694,23 +883,39 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()">NMDeviceDeactivateFn</a>, user_function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NMDeviceClass" title="NMDeviceClass">NMDeviceClass</a>, struct in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()">NMDeviceDeactivateFn</a>, user_function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDeviceError" title="enum NMDeviceError">NMDeviceError</a>, enum in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet-struct" title="NMDeviceEthernet">NMDeviceEthernet</a>, struct in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--carrier" title='The "carrier" property'>NMDeviceEthernet:carrier</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--carrier" title="The “carrier†property">NMDeviceEthernet:carrier</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--hw-address" title='The "hw-address" property'>NMDeviceEthernet:hw-address</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--hw-address" title="The “hw-address†property">NMDeviceEthernet:hw-address</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address" title='The "perm-hw-address" property'>NMDeviceEthernet:perm-hw-address</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address" title="The “perm-hw-address†property">NMDeviceEthernet:perm-hw-address</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--speed" title='The "speed" property'>NMDeviceEthernet:speed</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet--speed" title="The “speed†property">NMDeviceEthernet:speed</a>, object property in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernetClass" title="NMDeviceEthernetClass">NMDeviceEthernetClass</a>, struct in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
@@ -718,11 +923,39 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--carrier" title="The “carrier†property">NMDeviceInfiniband:carrier</a>, object property in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+<a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric-struct" title="NMDeviceGeneric">NMDeviceGeneric</a>, struct in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address" title="The “hw-address†property">NMDeviceInfiniband:hw-address</a>, object property in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+<a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric--hw-address" title='The "hw-address" property'>NMDeviceGeneric:hw-address</a>, object property in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric--type-description" title='The "type-description" property'>NMDeviceGeneric:type-description</a>, object property in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceGeneric.html#NMDeviceGenericClass" title="NMDeviceGenericClass">NMDeviceGenericClass</a>, struct in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceGeneric.html#NMDeviceGenericError" title="enum NMDeviceGenericError">NMDeviceGenericError</a>, enum in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband-struct" title="NMDeviceInfiniband">NMDeviceInfiniband</a>, struct in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--carrier" title='The "carrier" property'>NMDeviceInfiniband:carrier</a>, object property in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address" title='The "hw-address" property'>NMDeviceInfiniband:hw-address</a>, object property in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceInfiniband.html#NMDeviceInfinibandClass" title="NMDeviceInfinibandClass">NMDeviceInfinibandClass</a>, struct in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
</dt>
<dd></dd>
<dt>
@@ -730,11 +963,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceModem.html#NMDeviceModem--current-capabilities" title="The “current-capabilities†property">NMDeviceModem:current-capabilities</a>, object property in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+<a class="link" href="NMDeviceModem.html#NMDeviceModem-struct" title="NMDeviceModem">NMDeviceModem</a>, struct in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceModem.html#NMDeviceModem--modem-capabilities" title="The “modem-capabilities†property">NMDeviceModem:modem-capabilities</a>, object property in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+<a class="link" href="NMDeviceModem.html#NMDeviceModem--current-capabilities" title='The "current-capabilities" property'>NMDeviceModem:current-capabilities</a>, object property in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceModem.html#NMDeviceModem--modem-capabilities" title='The "modem-capabilities" property'>NMDeviceModem:modem-capabilities</a>, object property in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceModem.html#NMDeviceModemClass" title="NMDeviceModemClass">NMDeviceModemClass</a>, struct in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
</dt>
<dd></dd>
<dt>
@@ -742,15 +983,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel" title="The “active-channel†property">NMDeviceOlpcMesh:active-channel</a>, object property in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>, struct in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel" title='The "active-channel" property'>NMDeviceOlpcMesh:active-channel</a>, object property in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion" title="The “companion†property">NMDeviceOlpcMesh:companion</a>, object property in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion" title='The "companion" property'>NMDeviceOlpcMesh:companion</a>, object property in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address" title="The “hw-address†property">NMDeviceOlpcMesh:hw-address</a>, object property in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address" title='The "hw-address" property'>NMDeviceOlpcMesh:hw-address</a>, object property in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshClass" title="NMDeviceOlpcMeshClass">NMDeviceOlpcMeshClass</a>, struct in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
</dt>
<dd></dd>
<dt>
@@ -758,15 +1007,47 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--carrier" title="The “carrier†property">NMDeviceVlan:carrier</a>, object property in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceTeam.html#NMDeviceTeam-struct" title="NMDeviceTeam">NMDeviceTeam</a>, struct in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NMDeviceTeam--carrier" title='The "carrier" property'>NMDeviceTeam:carrier</a>, object property in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NMDeviceTeam--hw-address" title='The "hw-address" property'>NMDeviceTeam:hw-address</a>, object property in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NMDeviceTeam--slaves" title='The "slaves" property'>NMDeviceTeam:slaves</a>, object property in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NMDeviceTeamClass" title="NMDeviceTeamClass">NMDeviceTeamClass</a>, struct in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--hw-address" title="The “hw-address†property">NMDeviceVlan:hw-address</a>, object property in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceTeam.html#NMDeviceTeamError" title="enum NMDeviceTeamError">NMDeviceTeamError</a>, enum in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--vlan-id" title="The “vlan-id†property">NMDeviceVlan:vlan-id</a>, object property in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceVlan.html#NMDeviceVlan-struct" title="NMDeviceVlan">NMDeviceVlan</a>, struct in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--carrier" title='The "carrier" property'>NMDeviceVlan:carrier</a>, object property in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--hw-address" title='The "hw-address" property'>NMDeviceVlan:hw-address</a>, object property in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--vlan-id" title='The "vlan-id" property'>NMDeviceVlan:vlan-id</a>, object property in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NMDeviceVlanClass" title="NMDeviceVlanClass">NMDeviceVlanClass</a>, struct in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
</dt>
<dd></dd>
<dt>
@@ -774,35 +1055,47 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-added" title="The “access-point-added†signal">NMDeviceWifi::access-point-added</a>, object signal in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-struct" title="NMDeviceWifi">NMDeviceWifi</a>, struct in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-added" title='The "access-point-added" signal'>NMDeviceWifi::access-point-added</a>, object signal in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-removed" title="The “access-point-removed†signal">NMDeviceWifi::access-point-removed</a>, object signal in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-access-point-removed" title='The "access-point-removed" signal'>NMDeviceWifi::access-point-removed</a>, object signal in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--active-access-point" title="The “active-access-point†property">NMDeviceWifi:active-access-point</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--access-points" title='The "access-points" property'>NMDeviceWifi:access-points</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--bitrate" title="The “bitrate†property">NMDeviceWifi:bitrate</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--active-access-point" title='The "active-access-point" property'>NMDeviceWifi:active-access-point</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--hw-address" title="The “hw-address†property">NMDeviceWifi:hw-address</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--bitrate" title='The "bitrate" property'>NMDeviceWifi:bitrate</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--mode" title="The “mode†property">NMDeviceWifi:mode</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--hw-address" title='The "hw-address" property'>NMDeviceWifi:hw-address</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--perm-hw-address" title="The “perm-hw-address†property">NMDeviceWifi:perm-hw-address</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--mode" title='The "mode" property'>NMDeviceWifi:mode</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities" title="The “wireless-capabilities†property">NMDeviceWifi:wireless-capabilities</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--perm-hw-address" title='The "perm-hw-address" property'>NMDeviceWifi:perm-hw-address</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities" title='The "wireless-capabilities" property'>NMDeviceWifi:wireless-capabilities</a>, object property in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifiClass" title="NMDeviceWifiClass">NMDeviceWifiClass</a>, struct in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
@@ -810,43 +1103,55 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#NMDeviceWifiRequestScanFn" title="NMDeviceWifiRequestScanFn ()">NMDeviceWifiRequestScanFn</a>, user_function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifiRequestScanFn" title="NMDeviceWifiRequestScanFn ()">NMDeviceWifiRequestScanFn</a>, user_function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-struct" title="NMDeviceWimax">NMDeviceWimax</a>, struct in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-added" title='The "nsp-added" signal'>NMDeviceWimax::nsp-added</a>, object signal in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-removed" title='The "nsp-removed" signal'>NMDeviceWimax::nsp-removed</a>, object signal in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-added" title="The “nsp-added†signal">NMDeviceWimax::nsp-added</a>, object signal in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--active-nsp" title='The "active-nsp" property'>NMDeviceWimax:active-nsp</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-nsp-removed" title="The “nsp-removed†signal">NMDeviceWimax::nsp-removed</a>, object signal in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--bsid" title='The "bsid" property'>NMDeviceWimax:bsid</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--active-nsp" title="The “active-nsp†property">NMDeviceWimax:active-nsp</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--center-frequency" title='The "center-frequency" property'>NMDeviceWimax:center-frequency</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--bsid" title="The “bsid†property">NMDeviceWimax:bsid</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--cinr" title='The "cinr" property'>NMDeviceWimax:cinr</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--center-frequency" title="The “center-frequency†property">NMDeviceWimax:center-frequency</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--hw-address" title='The "hw-address" property'>NMDeviceWimax:hw-address</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--cinr" title="The “cinr†property">NMDeviceWimax:cinr</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--nsps" title='The "nsps" property'>NMDeviceWimax:nsps</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--hw-address" title="The “hw-address†property">NMDeviceWimax:hw-address</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--rssi" title='The "rssi" property'>NMDeviceWimax:rssi</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--rssi" title="The “rssi†property">NMDeviceWimax:rssi</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--tx-power" title='The "tx-power" property'>NMDeviceWimax:tx-power</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#NMDeviceWimax--tx-power" title="The “tx-power†property">NMDeviceWimax:tx-power</a>, object property in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimaxClass" title="NMDeviceWimaxClass">NMDeviceWimaxClass</a>, struct in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
@@ -866,15 +1171,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-error-quark" title="nm_device_adsl_error_quark ()">nm_device_adsl_error_quark</a>, function in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
+<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-error-quark" title="nm_device_adsl_error_quark ()">nm_device_adsl_error_quark</a>, function in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-get-carrier" title="nm_device_adsl_get_carrier ()">nm_device_adsl_get_carrier</a>, function in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
+<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-get-carrier" title="nm_device_adsl_get_carrier ()">nm_device_adsl_get_carrier</a>, function in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-new" title="nm_device_adsl_new ()">nm_device_adsl_new</a>, function in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
+<a class="link" href="NMDeviceAdsl.html#nm-device-adsl-new" title="nm_device_adsl_new ()">nm_device_adsl_new</a>, function in <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
</dt>
<dd></dd>
<dt>
@@ -894,19 +1199,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#nm-device-bond-error-quark" title="nm_device_bond_error_quark ()">nm_device_bond_error_quark</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#nm-device-bond-error-quark" title="nm_device_bond_error_quark ()">nm_device_bond_error_quark</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#nm-device-bond-get-carrier" title="nm_device_bond_get_carrier ()">nm_device_bond_get_carrier</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#nm-device-bond-get-carrier" title="nm_device_bond_get_carrier ()">nm_device_bond_get_carrier</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#nm-device-bond-get-hw-address" title="nm_device_bond_get_hw_address ()">nm_device_bond_get_hw_address</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#nm-device-bond-get-hw-address" title="nm_device_bond_get_hw_address ()">nm_device_bond_get_hw_address</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#nm-device-bond-get-slaves" title="nm_device_bond_get_slaves ()">nm_device_bond_get_slaves</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#nm-device-bond-get-slaves" title="nm_device_bond_get_slaves ()">nm_device_bond_get_slaves</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
@@ -914,7 +1219,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBond.html#nm-device-bond-new" title="nm_device_bond_new ()">nm_device_bond_new</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+<a class="link" href="NMDeviceBond.html#nm-device-bond-new" title="nm_device_bond_new ()">nm_device_bond_new</a>, function in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
</dt>
<dd></dd>
<dt>
@@ -930,19 +1235,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-error-quark" title="nm_device_bridge_error_quark ()">nm_device_bridge_error_quark</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#nm-device-bridge-error-quark" title="nm_device_bridge_error_quark ()">nm_device_bridge_error_quark</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-carrier" title="nm_device_bridge_get_carrier ()">nm_device_bridge_get_carrier</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-carrier" title="nm_device_bridge_get_carrier ()">nm_device_bridge_get_carrier</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-hw-address" title="nm_device_bridge_get_hw_address ()">nm_device_bridge_get_hw_address</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-hw-address" title="nm_device_bridge_get_hw_address ()">nm_device_bridge_get_hw_address</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-slaves" title="nm_device_bridge_get_slaves ()">nm_device_bridge_get_slaves</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#nm-device-bridge-get-slaves" title="nm_device_bridge_get_slaves ()">nm_device_bridge_get_slaves</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
@@ -950,7 +1255,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBridge.html#nm-device-bridge-new" title="nm_device_bridge_new ()">nm_device_bridge_new</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+<a class="link" href="NMDeviceBridge.html#nm-device-bridge-new" title="nm_device_bridge_new ()">nm_device_bridge_new</a>, function in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
</dt>
<dd></dd>
<dt>
@@ -966,19 +1271,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#nm-device-bt-error-quark" title="nm_device_bt_error_quark ()">nm_device_bt_error_quark</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#nm-device-bt-error-quark" title="nm_device_bt_error_quark ()">nm_device_bt_error_quark</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#nm-device-bt-get-capabilities" title="nm_device_bt_get_capabilities ()">nm_device_bt_get_capabilities</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#nm-device-bt-get-capabilities" title="nm_device_bt_get_capabilities ()">nm_device_bt_get_capabilities</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#nm-device-bt-get-hw-address" title="nm_device_bt_get_hw_address ()">nm_device_bt_get_hw_address</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#nm-device-bt-get-hw-address" title="nm_device_bt_get_hw_address ()">nm_device_bt_get_hw_address</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#nm-device-bt-get-name" title="nm_device_bt_get_name ()">nm_device_bt_get_name</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#nm-device-bt-get-name" title="nm_device_bt_get_name ()">nm_device_bt_get_name</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
@@ -990,7 +1295,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceBt.html#nm-device-bt-new" title="nm_device_bt_new ()">nm_device_bt_new</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+<a class="link" href="NMDeviceBt.html#nm-device-bt-new" title="nm_device_bt_new ()">nm_device_bt_new</a>, function in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
<dt>
@@ -998,11 +1303,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-connection-compatible" title="nm_device_connection_compatible ()">nm_device_connection_compatible</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-connection-compatible" title="nm_device_connection_compatible ()">nm_device_connection_compatible</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()">nm_device_connection_valid</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()">nm_device_connection_valid</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
@@ -1018,7 +1323,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-disconnect" title="nm_device_disconnect ()">nm_device_disconnect</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-disambiguate-names" title="nm_device_disambiguate_names ()">nm_device_disambiguate_names</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-disconnect" title="nm_device_disconnect ()">nm_device_disconnect</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
@@ -1030,6 +1339,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-ERROR:CAPS" title="NM_DEVICE_ERROR">NM_DEVICE_ERROR</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-error-quark" title="nm_device_error_quark ()">nm_device_error_quark</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-CARRIER:CAPS" title="NM_DEVICE_ETHERNET_CARRIER">NM_DEVICE_ETHERNET_CARRIER</a>, macro in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
@@ -1038,23 +1355,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-error-quark" title="nm_device_ethernet_error_quark ()">nm_device_ethernet_error_quark</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-error-quark" title="nm_device_ethernet_error_quark ()">nm_device_ethernet_error_quark</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-carrier" title="nm_device_ethernet_get_carrier ()">nm_device_ethernet_get_carrier</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-carrier" title="nm_device_ethernet_get_carrier ()">nm_device_ethernet_get_carrier</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address" title="nm_device_ethernet_get_hw_address ()">nm_device_ethernet_get_hw_address</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address" title="nm_device_ethernet_get_hw_address ()">nm_device_ethernet_get_hw_address</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address" title="nm_device_ethernet_get_permanent_hw_address ()">nm_device_ethernet_get_permanent_hw_address</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address" title="nm_device_ethernet_get_permanent_hw_address ()">nm_device_ethernet_get_permanent_hw_address</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-speed" title="nm_device_ethernet_get_speed ()">nm_device_ethernet_get_speed</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-get-speed" title="nm_device_ethernet_get_speed ()">nm_device_ethernet_get_speed</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
@@ -1062,7 +1379,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-new" title="nm_device_ethernet_new ()">nm_device_ethernet_new</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+<a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-new" title="nm_device_ethernet_new ()">nm_device_ethernet_new</a>, function in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
</dt>
<dd></dd>
<dt>
@@ -1074,7 +1391,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-filter-connections" title="nm_device_filter_connections ()">nm_device_filter_connections</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-filter-connections" title="nm_device_filter_connections ()">nm_device_filter_connections</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
@@ -1086,87 +1403,135 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-active-connection" title="nm_device_get_active_connection ()">nm_device_get_active_connection</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR:CAPS" title="NM_DEVICE_GENERIC_ERROR">NM_DEVICE_GENERIC_ERROR</a>, macro in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-autoconnect" title="nm_device_get_autoconnect ()">nm_device_get_autoconnect</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceGeneric.html#nm-device-generic-error-quark" title="nm_device_generic_error_quark ()">nm_device_generic_error_quark</a>, function in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-available-connections" title="nm_device_get_available_connections ()">nm_device_get_available_connections</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceGeneric.html#nm-device-generic-get-hw-address" title="nm_device_generic_get_hw_address ()">nm_device_generic_get_hw_address</a>, function in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-capabilities" title="nm_device_get_capabilities ()">nm_device_get_capabilities</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceGeneric.html#NM-DEVICE-GENERIC-HW-ADDRESS:CAPS" title="NM_DEVICE_GENERIC_HW_ADDRESS">NM_DEVICE_GENERIC_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-device-type" title="nm_device_get_device_type ()">nm_device_get_device_type</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceGeneric.html#nm-device-generic-new" title="nm_device_generic_new ()">nm_device_generic_new</a>, function in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-dhcp4-config" title="nm_device_get_dhcp4_config ()">nm_device_get_dhcp4_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDeviceGeneric.html#NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS" title="NM_DEVICE_GENERIC_TYPE_DESCRIPTION">NM_DEVICE_GENERIC_TYPE_DESCRIPTION</a>, macro in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-dhcp6-config" title="nm_device_get_dhcp6_config ()">nm_device_get_dhcp6_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-active-connection" title="nm_device_get_active_connection ()">nm_device_get_active_connection</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-driver" title="nm_device_get_driver ()">nm_device_get_driver</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-autoconnect" title="nm_device_get_autoconnect ()">nm_device_get_autoconnect</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-driver-version" title="nm_device_get_driver_version ()">nm_device_get_driver_version</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-available-connections" title="nm_device_get_available_connections ()">nm_device_get_available_connections</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-firmware-missing" title="nm_device_get_firmware_missing ()">nm_device_get_firmware_missing</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-capabilities" title="nm_device_get_capabilities ()">nm_device_get_capabilities</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-firmware-version" title="nm_device_get_firmware_version ()">nm_device_get_firmware_version</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-description" title="nm_device_get_description ()">nm_device_get_description</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-iface" title="nm_device_get_iface ()">nm_device_get_iface</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-device-type" title="nm_device_get_device_type ()">nm_device_get_device_type</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-ip4-config" title="nm_device_get_ip4_config ()">nm_device_get_ip4_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-dhcp4-config" title="nm_device_get_dhcp4_config ()">nm_device_get_dhcp4_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-ip6-config" title="nm_device_get_ip6_config ()">nm_device_get_ip6_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-dhcp6-config" title="nm_device_get_dhcp6_config ()">nm_device_get_dhcp6_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-ip-iface" title="nm_device_get_ip_iface ()">nm_device_get_ip_iface</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-driver" title="nm_device_get_driver ()">nm_device_get_driver</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-managed" title="nm_device_get_managed ()">nm_device_get_managed</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-driver-version" title="nm_device_get_driver_version ()">nm_device_get_driver_version</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-product" title="nm_device_get_product ()">nm_device_get_product</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-firmware-missing" title="nm_device_get_firmware_missing ()">nm_device_get_firmware_missing</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-state" title="nm_device_get_state ()">nm_device_get_state</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-firmware-version" title="nm_device_get_firmware_version ()">nm_device_get_firmware_version</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-state-reason" title="nm_device_get_state_reason ()">nm_device_get_state_reason</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-hw-address" title="nm_device_get_hw_address ()">nm_device_get_hw_address</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-udi" title="nm_device_get_udi ()">nm_device_get_udi</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-iface" title="nm_device_get_iface ()">nm_device_get_iface</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-get-vendor" title="nm_device_get_vendor ()">nm_device_get_vendor</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-get-ip4-config" title="nm_device_get_ip4_config ()">nm_device_get_ip4_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-ip6-config" title="nm_device_get_ip6_config ()">nm_device_get_ip6_config</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-ip-iface" title="nm_device_get_ip_iface ()">nm_device_get_ip_iface</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-managed" title="nm_device_get_managed ()">nm_device_get_managed</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-mtu" title="nm_device_get_mtu ()">nm_device_get_mtu</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-physical-port-id" title="nm_device_get_physical_port_id ()">nm_device_get_physical_port_id</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-product" title="nm_device_get_product ()">nm_device_get_product</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-setting-type" title="nm_device_get_setting_type ()">nm_device_get_setting_type</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-state" title="nm_device_get_state ()">nm_device_get_state</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-state-reason" title="nm_device_get_state_reason ()">nm_device_get_state_reason</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-type-description" title="nm_device_get_type_description ()">nm_device_get_type_description</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-udi" title="nm_device_get_udi ()">nm_device_get_udi</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-get-vendor" title="nm_device_get_vendor ()">nm_device_get_vendor</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
@@ -1178,15 +1543,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-error-quark" title="nm_device_infiniband_error_quark ()">nm_device_infiniband_error_quark</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-error-quark" title="nm_device_infiniband_error_quark ()">nm_device_infiniband_error_quark</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-carrier" title="nm_device_infiniband_get_carrier ()">nm_device_infiniband_get_carrier</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-carrier" title="nm_device_infiniband_get_carrier ()">nm_device_infiniband_get_carrier</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address" title="nm_device_infiniband_get_hw_address ()">nm_device_infiniband_get_hw_address</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address" title="nm_device_infiniband_get_hw_address ()">nm_device_infiniband_get_hw_address</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
</dt>
<dd></dd>
<dt>
@@ -1194,7 +1559,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-new" title="nm_device_infiniband_new ()">nm_device_infiniband_new</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+<a class="link" href="NMDeviceInfiniband.html#nm-device-infiniband-new" title="nm_device_infiniband_new ()">nm_device_infiniband_new</a>, function in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
</dt>
<dd></dd>
<dt>
@@ -1226,15 +1591,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceModem.html#nm-device-modem-error-quark" title="nm_device_modem_error_quark ()">nm_device_modem_error_quark</a>, function in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+<a class="link" href="NMDeviceModem.html#nm-device-modem-error-quark" title="nm_device_modem_error_quark ()">nm_device_modem_error_quark</a>, function in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceModem.html#nm-device-modem-get-current-capabilities" title="nm_device_modem_get_current_capabilities ()">nm_device_modem_get_current_capabilities</a>, function in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+<a class="link" href="NMDeviceModem.html#nm-device-modem-get-current-capabilities" title="nm_device_modem_get_current_capabilities ()">nm_device_modem_get_current_capabilities</a>, function in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceModem.html#nm-device-modem-get-modem-capabilities" title="nm_device_modem_get_modem_capabilities ()">nm_device_modem_get_modem_capabilities</a>, function in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+<a class="link" href="NMDeviceModem.html#nm-device-modem-get-modem-capabilities" title="nm_device_modem_get_modem_capabilities ()">nm_device_modem_get_modem_capabilities</a>, function in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
</dt>
<dd></dd>
<dt>
@@ -1242,7 +1607,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-new" title="nm_device_new ()">nm_device_new</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#NM-DEVICE-MTU:CAPS" title="NM_DEVICE_MTU">NM_DEVICE_MTU</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-new" title="nm_device_new ()">nm_device_new</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
@@ -1258,19 +1627,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark" title="nm_device_olpc_mesh_error_quark ()">nm_device_olpc_mesh_error_quark</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark" title="nm_device_olpc_mesh_error_quark ()">nm_device_olpc_mesh_error_quark</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel" title="nm_device_olpc_mesh_get_active_channel ()">nm_device_olpc_mesh_get_active_channel</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel" title="nm_device_olpc_mesh_get_active_channel ()">nm_device_olpc_mesh_get_active_channel</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion" title="nm_device_olpc_mesh_get_companion ()">nm_device_olpc_mesh_get_companion</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion" title="nm_device_olpc_mesh_get_companion ()">nm_device_olpc_mesh_get_companion</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address" title="nm_device_olpc_mesh_get_hw_address ()">nm_device_olpc_mesh_get_hw_address</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address" title="nm_device_olpc_mesh_get_hw_address ()">nm_device_olpc_mesh_get_hw_address</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
</dt>
<dd></dd>
<dt>
@@ -1278,7 +1647,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new" title="nm_device_olpc_mesh_new ()">nm_device_olpc_mesh_new</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+<a class="link" href="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new" title="nm_device_olpc_mesh_new ()">nm_device_olpc_mesh_new</a>, function in <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-PHYSICAL-PORT-ID:CAPS" title="NM_DEVICE_PHYSICAL_PORT_ID">NM_DEVICE_PHYSICAL_PORT_ID</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
@@ -1286,7 +1659,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDevice.html#nm-device-set-autoconnect" title="nm_device_set_autoconnect ()">nm_device_set_autoconnect</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+<a class="link" href="NMDevice.html#nm-device-set-autoconnect" title="nm_device_set_autoconnect ()">nm_device_set_autoconnect</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
<dt>
@@ -1298,6 +1671,42 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-CARRIER:CAPS" title="NM_DEVICE_TEAM_CARRIER">NM_DEVICE_TEAM_CARRIER</a>, macro in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR:CAPS" title="NM_DEVICE_TEAM_ERROR">NM_DEVICE_TEAM_ERROR</a>, macro in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#nm-device-team-error-quark" title="nm_device_team_error_quark ()">nm_device_team_error_quark</a>, function in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#nm-device-team-get-carrier" title="nm_device_team_get_carrier ()">nm_device_team_get_carrier</a>, function in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#nm-device-team-get-hw-address" title="nm_device_team_get_hw_address ()">nm_device_team_get_hw_address</a>, function in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#nm-device-team-get-slaves" title="nm_device_team_get_slaves ()">nm_device_team_get_slaves</a>, function in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-HW-ADDRESS:CAPS" title="NM_DEVICE_TEAM_HW_ADDRESS">NM_DEVICE_TEAM_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#nm-device-team-new" title="nm_device_team_new ()">nm_device_team_new</a>, function in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NM-DEVICE-TEAM-SLAVES:CAPS" title="NM_DEVICE_TEAM_SLAVES">NM_DEVICE_TEAM_SLAVES</a>, macro in <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMDevice.html#NM-DEVICE-UDI:CAPS" title="NM_DEVICE_UDI">NM_DEVICE_UDI</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
@@ -1314,19 +1723,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-error-quark" title="nm_device_vlan_error_quark ()">nm_device_vlan_error_quark</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceVlan.html#nm-device-vlan-error-quark" title="nm_device_vlan_error_quark ()">nm_device_vlan_error_quark</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-carrier" title="nm_device_vlan_get_carrier ()">nm_device_vlan_get_carrier</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-carrier" title="nm_device_vlan_get_carrier ()">nm_device_vlan_get_carrier</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-hw-address" title="nm_device_vlan_get_hw_address ()">nm_device_vlan_get_hw_address</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-hw-address" title="nm_device_vlan_get_hw_address ()">nm_device_vlan_get_hw_address</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-vlan-id" title="nm_device_vlan_get_vlan_id ()">nm_device_vlan_get_vlan_id</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-vlan-id" title="nm_device_vlan_get_vlan_id ()">nm_device_vlan_get_vlan_id</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
</dt>
<dd></dd>
<dt>
@@ -1334,7 +1743,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceVlan.html#nm-device-vlan-new" title="nm_device_vlan_new ()">nm_device_vlan_new</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+<a class="link" href="NMDeviceVlan.html#nm-device-vlan-new" title="nm_device_vlan_new ()">nm_device_vlan_new</a>, function in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
</dt>
<dd></dd>
<dt>
@@ -1342,6 +1751,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-ACCESS-POINTS:CAPS" title="NM_DEVICE_WIFI_ACCESS_POINTS">NM_DEVICE_WIFI_ACCESS_POINTS</a>, macro in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS" title="NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT">NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT</a>, macro in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
@@ -1358,39 +1771,39 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-error-quark" title="nm_device_wifi_error_quark ()">nm_device_wifi_error_quark</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-error-quark" title="nm_device_wifi_error_quark ()">nm_device_wifi_error_quark</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-points" title="nm_device_wifi_get_access_points ()">nm_device_wifi_get_access_points</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-points" title="nm_device_wifi_get_access_points ()">nm_device_wifi_get_access_points</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path" title="nm_device_wifi_get_access_point_by_path ()">nm_device_wifi_get_access_point_by_path</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path" title="nm_device_wifi_get_access_point_by_path ()">nm_device_wifi_get_access_point_by_path</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-active-access-point" title="nm_device_wifi_get_active_access_point ()">nm_device_wifi_get_active_access_point</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-active-access-point" title="nm_device_wifi_get_active_access_point ()">nm_device_wifi_get_active_access_point</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-bitrate" title="nm_device_wifi_get_bitrate ()">nm_device_wifi_get_bitrate</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-bitrate" title="nm_device_wifi_get_bitrate ()">nm_device_wifi_get_bitrate</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-capabilities" title="nm_device_wifi_get_capabilities ()">nm_device_wifi_get_capabilities</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-capabilities" title="nm_device_wifi_get_capabilities ()">nm_device_wifi_get_capabilities</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-hw-address" title="nm_device_wifi_get_hw_address ()">nm_device_wifi_get_hw_address</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-hw-address" title="nm_device_wifi_get_hw_address ()">nm_device_wifi_get_hw_address</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-mode" title="nm_device_wifi_get_mode ()">nm_device_wifi_get_mode</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-mode" title="nm_device_wifi_get_mode ()">nm_device_wifi_get_mode</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address" title="nm_device_wifi_get_permanent_hw_address ()">nm_device_wifi_get_permanent_hw_address</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address" title="nm_device_wifi_get_permanent_hw_address ()">nm_device_wifi_get_permanent_hw_address</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
@@ -1402,7 +1815,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-new" title="nm_device_wifi_new ()">nm_device_wifi_new</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-new" title="nm_device_wifi_new ()">nm_device_wifi_new</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
@@ -1410,7 +1823,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWifi.html#nm-device-wifi-request-scan-simple" title="nm_device_wifi_request_scan_simple ()">nm_device_wifi_request_scan_simple</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+<a class="link" href="NMDeviceWifi.html#nm-device-wifi-request-scan-simple" title="nm_device_wifi_request_scan_simple ()">nm_device_wifi_request_scan_simple</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
</dt>
<dd></dd>
<dt>
@@ -1434,43 +1847,43 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-error-quark" title="nm_device_wimax_error_quark ()">nm_device_wimax_error_quark</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-error-quark" title="nm_device_wimax_error_quark ()">nm_device_wimax_error_quark</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-active-nsp" title="nm_device_wimax_get_active_nsp ()">nm_device_wimax_get_active_nsp</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-active-nsp" title="nm_device_wimax_get_active_nsp ()">nm_device_wimax_get_active_nsp</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-bsid" title="nm_device_wimax_get_bsid ()">nm_device_wimax_get_bsid</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-bsid" title="nm_device_wimax_get_bsid ()">nm_device_wimax_get_bsid</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-center-frequency" title="nm_device_wimax_get_center_frequency ()">nm_device_wimax_get_center_frequency</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-center-frequency" title="nm_device_wimax_get_center_frequency ()">nm_device_wimax_get_center_frequency</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-cinr" title="nm_device_wimax_get_cinr ()">nm_device_wimax_get_cinr</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-cinr" title="nm_device_wimax_get_cinr ()">nm_device_wimax_get_cinr</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-hw-address" title="nm_device_wimax_get_hw_address ()">nm_device_wimax_get_hw_address</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-hw-address" title="nm_device_wimax_get_hw_address ()">nm_device_wimax_get_hw_address</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsps" title="nm_device_wimax_get_nsps ()">nm_device_wimax_get_nsps</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsps" title="nm_device_wimax_get_nsps ()">nm_device_wimax_get_nsps</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsp-by-path" title="nm_device_wimax_get_nsp_by_path ()">nm_device_wimax_get_nsp_by_path</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-nsp-by-path" title="nm_device_wimax_get_nsp_by_path ()">nm_device_wimax_get_nsp_by_path</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-rssi" title="nm_device_wimax_get_rssi ()">nm_device_wimax_get_rssi</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-rssi" title="nm_device_wimax_get_rssi ()">nm_device_wimax_get_rssi</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-tx-power" title="nm_device_wimax_get_tx_power ()">nm_device_wimax_get_tx_power</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-get-tx-power" title="nm_device_wimax_get_tx_power ()">nm_device_wimax_get_tx_power</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
@@ -1478,7 +1891,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDeviceWimax.html#nm-device-wimax-new" title="nm_device_wimax_new ()">nm_device_wimax_new</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+<a class="link" href="NMDeviceWimax.html#nm-device-wimax-new" title="nm_device_wimax_new ()">nm_device_wimax_new</a>, function in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-NSPS:CAPS" title="NM_DEVICE_WIMAX_NSPS">NM_DEVICE_WIMAX_NSPS</a>, macro in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
</dt>
<dd></dd>
<dt>
@@ -1490,19 +1907,27 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP4Config.html#NMDHCP4Config--options" title="The “options†property">NMDHCP4Config:options</a>, object property in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+<a class="link" href="NMDHCP4Config.html#NMDHCP4Config-struct" title="NMDHCP4Config">NMDHCP4Config</a>, struct in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDHCP4Config.html#NMDHCP4Config--options" title='The "options" property'>NMDHCP4Config:options</a>, object property in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDHCP4Config.html#NMDHCP4ConfigClass" title="NMDHCP4ConfigClass">NMDHCP4ConfigClass</a>, struct in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-one-option" title="nm_dhcp4_config_get_one_option ()">nm_dhcp4_config_get_one_option</a>, function in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-one-option" title="nm_dhcp4_config_get_one_option ()">nm_dhcp4_config_get_one_option</a>, function in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-options" title="nm_dhcp4_config_get_options ()">nm_dhcp4_config_get_options</a>, function in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-get-options" title="nm_dhcp4_config_get_options ()">nm_dhcp4_config_get_options</a>, function in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-new" title="nm_dhcp4_config_new ()">nm_dhcp4_config_new</a>, function in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+<a class="link" href="NMDHCP4Config.html#nm-dhcp4-config-new" title="nm_dhcp4_config_new ()">nm_dhcp4_config_new</a>, function in <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
</dt>
<dd></dd>
<dt>
@@ -1510,19 +1935,27 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP6Config.html#NMDHCP6Config--options" title="The “options†property">NMDHCP6Config:options</a>, object property in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+<a class="link" href="NMDHCP6Config.html#NMDHCP6Config-struct" title="NMDHCP6Config">NMDHCP6Config</a>, struct in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDHCP6Config.html#NMDHCP6Config--options" title='The "options" property'>NMDHCP6Config:options</a>, object property in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-one-option" title="nm_dhcp6_config_get_one_option ()">nm_dhcp6_config_get_one_option</a>, function in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+<a class="link" href="NMDHCP6Config.html#NMDHCP6ConfigClass" title="NMDHCP6ConfigClass">NMDHCP6ConfigClass</a>, struct in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-options" title="nm_dhcp6_config_get_options ()">nm_dhcp6_config_get_options</a>, function in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-one-option" title="nm_dhcp6_config_get_one_option ()">nm_dhcp6_config_get_one_option</a>, function in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-new" title="nm_dhcp6_config_new ()">nm_dhcp6_config_new</a>, function in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-get-options" title="nm_dhcp6_config_get_options ()">nm_dhcp6_config_get_options</a>, function in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDHCP6Config.html#nm-dhcp6-config-new" title="nm_dhcp6_config_new ()">nm_dhcp6_config_new</a>, function in <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
</dt>
<dd></dd>
<dt>
@@ -1531,23 +1964,39 @@
<dd></dd>
<a name="idxI"></a><h3 class="title">I</h3>
<dt>
-<a class="link" href="NMIP4Config.html#NMIP4Config--addresses" title="The “addresses†property">NMIP4Config:addresses</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#NMIP4Config-struct" title="NMIP4Config">NMIP4Config</a>, struct in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#NMIP4Config--domains" title="The “domains†property">NMIP4Config:domains</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#NMIP4Config--addresses" title='The "addresses" property'>NMIP4Config:addresses</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#NMIP4Config--nameservers" title="The “nameservers†property">NMIP4Config:nameservers</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#NMIP4Config--domains" title='The "domains" property'>NMIP4Config:domains</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#NMIP4Config--routes" title="The “routes†property">NMIP4Config:routes</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#NMIP4Config--gateway" title='The "gateway" property'>NMIP4Config:gateway</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#NMIP4Config--wins-servers" title="The “wins-servers†property">NMIP4Config:wins-servers</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#NMIP4Config--nameservers" title='The "nameservers" property'>NMIP4Config:nameservers</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP4Config.html#NMIP4Config--routes" title='The "routes" property'>NMIP4Config:routes</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP4Config.html#NMIP4Config--searches" title='The "searches" property'>NMIP4Config:searches</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP4Config.html#NMIP4Config--wins-servers" title='The "wins-servers" property'>NMIP4Config:wins-servers</a>, object property in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP4Config.html#NMIP4ConfigClass" title="NMIP4ConfigClass">NMIP4ConfigClass</a>, struct in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
@@ -1559,23 +2008,35 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-addresses" title="nm_ip4_config_get_addresses ()">nm_ip4_config_get_addresses</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-GATEWAY:CAPS" title="NM_IP4_CONFIG_GATEWAY">NM_IP4_CONFIG_GATEWAY</a>, macro in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-domains" title="nm_ip4_config_get_domains ()">nm_ip4_config_get_domains</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-get-addresses" title="nm_ip4_config_get_addresses ()">nm_ip4_config_get_addresses</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-nameservers" title="nm_ip4_config_get_nameservers ()">nm_ip4_config_get_nameservers</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-get-domains" title="nm_ip4_config_get_domains ()">nm_ip4_config_get_domains</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-routes" title="nm_ip4_config_get_routes ()">nm_ip4_config_get_routes</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-get-gateway" title="nm_ip4_config_get_gateway ()">nm_ip4_config_get_gateway</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#nm-ip4-config-get-wins-servers" title="nm_ip4_config_get_wins_servers ()">nm_ip4_config_get_wins_servers</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-get-nameservers" title="nm_ip4_config_get_nameservers ()">nm_ip4_config_get_nameservers</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-get-routes" title="nm_ip4_config_get_routes ()">nm_ip4_config_get_routes</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-get-searches" title="nm_ip4_config_get_searches ()">nm_ip4_config_get_searches</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-get-wins-servers" title="nm_ip4_config_get_wins_servers ()">nm_ip4_config_get_wins_servers</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
@@ -1583,7 +2044,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP4Config.html#nm-ip4-config-new" title="nm_ip4_config_new ()">nm_ip4_config_new</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+<a class="link" href="NMIP4Config.html#nm-ip4-config-new" title="nm_ip4_config_new ()">nm_ip4_config_new</a>, function in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
@@ -1591,23 +2052,43 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-SEARCHES:CAPS" title="NM_IP4_CONFIG_SEARCHES">NM_IP4_CONFIG_SEARCHES</a>, macro in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMIP4Config.html#NM-IP4-CONFIG-WINS-SERVERS:CAPS" title="NM_IP4_CONFIG_WINS_SERVERS">NM_IP4_CONFIG_WINS_SERVERS</a>, macro in <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#NMIP6Config--addresses" title="The “addresses†property">NMIP6Config:addresses</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#NMIP6Config-struct" title="NMIP6Config">NMIP6Config</a>, struct in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#NMIP6Config--addresses" title='The "addresses" property'>NMIP6Config:addresses</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#NMIP6Config--domains" title='The "domains" property'>NMIP6Config:domains</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#NMIP6Config--domains" title="The “domains†property">NMIP6Config:domains</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#NMIP6Config--gateway" title='The "gateway" property'>NMIP6Config:gateway</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#NMIP6Config--nameservers" title="The “nameservers†property">NMIP6Config:nameservers</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#NMIP6Config--nameservers" title='The "nameservers" property'>NMIP6Config:nameservers</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#NMIP6Config--routes" title="The “routes†property">NMIP6Config:routes</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#NMIP6Config--routes" title='The "routes" property'>NMIP6Config:routes</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#NMIP6Config--searches" title='The "searches" property'>NMIP6Config:searches</a>, object property in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#NMIP6ConfigClass" title="NMIP6ConfigClass">NMIP6ConfigClass</a>, struct in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
@@ -1619,19 +2100,39 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-addresses" title="nm_ip6_config_get_addresses ()">nm_ip6_config_get_addresses</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-GATEWAY:CAPS" title="NM_IP6_CONFIG_GATEWAY">NM_IP6_CONFIG_GATEWAY</a>, macro in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-addresses" title="nm_ip6_config_get_addresses ()">nm_ip6_config_get_addresses</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-domains" title="nm_ip6_config_get_domains ()">nm_ip6_config_get_domains</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-gateway" title="nm_ip6_config_get_gateway ()">nm_ip6_config_get_gateway</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-domains" title="nm_ip6_config_get_domains ()">nm_ip6_config_get_domains</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-nameserver" title="nm_ip6_config_get_nameserver ()">nm_ip6_config_get_nameserver</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-nameservers" title="nm_ip6_config_get_nameservers ()">nm_ip6_config_get_nameservers</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-nameservers" title="nm_ip6_config_get_nameservers ()">nm_ip6_config_get_nameservers</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#nm-ip6-config-get-routes" title="nm_ip6_config_get_routes ()">nm_ip6_config_get_routes</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-num-nameservers" title="nm_ip6_config_get_num_nameservers ()">nm_ip6_config_get_num_nameservers</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-routes" title="nm_ip6_config_get_routes ()">nm_ip6_config_get_routes</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-get-searches" title="nm_ip6_config_get_searches ()">nm_ip6_config_get_searches</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
@@ -1639,24 +2140,36 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMIP6Config.html#nm-ip6-config-new" title="nm_ip6_config_new ()">nm_ip6_config_new</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+<a class="link" href="NMIP6Config.html#nm-ip6-config-new" title="nm_ip6_config_new ()">nm_ip6_config_new</a>, function in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
<dt>
<a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-ROUTES:CAPS" title="NM_IP6_CONFIG_ROUTES">NM_IP6_CONFIG_ROUTES</a>, macro in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
</dt>
<dd></dd>
+<dt>
+<a class="link" href="NMIP6Config.html#NM-IP6-CONFIG-SEARCHES:CAPS" title="NM_IP6_CONFIG_SEARCHES">NM_IP6_CONFIG_SEARCHES</a>, macro in <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+</dt>
+<dd></dd>
<a name="idxO"></a><h3 class="title">O</h3>
<dt>
-<a class="link" href="NMObject.html#NMObject-object-creation-failed" title="The “object-creation-failed†signal">NMObject::object-creation-failed</a>, object signal in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+<a class="link" href="NMObject.html#NMObject-struct" title="NMObject">NMObject</a>, struct in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMObject.html#NMObject-object-creation-failed" title='The "object-creation-failed" signal'>NMObject::object-creation-failed</a>, object signal in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMObject.html#NMObject--dbus-connection" title='The "dbus-connection" property'>NMObject:dbus-connection</a>, object property in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMObject.html#NMObject--dbus-connection" title="The “dbus-connection†property">NMObject:dbus-connection</a>, object property in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+<a class="link" href="NMObject.html#NMObject--dbus-path" title='The "dbus-path" property'>NMObject:dbus-path</a>, object property in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMObject.html#NMObject--dbus-path" title="The “dbus-path†property">NMObject:dbus-path</a>, object property in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+<a class="link" href="NMObject.html#NMObjectClass" title="NMObjectClass">NMObjectClass</a>, struct in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
</dt>
<dd></dd>
<dt>
@@ -1676,80 +2189,108 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMObject.html#nm-object-error-quark" title="nm_object_error_quark ()">nm_object_error_quark</a>, function in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+<a class="link" href="NMObject.html#nm-object-error-quark" title="nm_object_error_quark ()">nm_object_error_quark</a>, function in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMObject.html#nm-object-get-connection" title="nm_object_get_connection ()">nm_object_get_connection</a>, function in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+<a class="link" href="NMObject.html#nm-object-get-connection" title="nm_object_get_connection ()">nm_object_get_connection</a>, function in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()">nm_object_get_path</a>, function in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+<a class="link" href="NMObject.html#nm-object-get-path" title="nm_object_get_path ()">nm_object_get_path</a>, function in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
</dt>
<dd></dd>
<a name="idxR"></a><h3 class="title">R</h3>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-removed" title="The “removed†signal">NMRemoteConnection::removed</a>, object signal in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-struct" title="NMRemoteConnection">NMRemoteConnection</a>, struct in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-removed" title='The "removed" signal'>NMRemoteConnection::removed</a>, object signal in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-updated" title='The "updated" signal'>NMRemoteConnection::updated</a>, object signal in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-visible" title='The "visible" signal'>NMRemoteConnection::visible</a>, object signal in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--bus" title='The "bus" property'>NMRemoteConnection:bus</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-connection" title='The "dbus-connection" property'>NMRemoteConnection:dbus-connection</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-updated" title="The “updated†signal">NMRemoteConnection::updated</a>, object signal in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-path" title='The "dbus-path" property'>NMRemoteConnection:dbus-path</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnection-visible" title="The “visible†signal">NMRemoteConnection::visible</a>, object signal in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--unsaved" title='The "unsaved" property'>NMRemoteConnection:unsaved</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--bus" title="The “bus†property">NMRemoteConnection:bus</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionClass" title="NMRemoteConnectionClass">NMRemoteConnectionClass</a>, struct in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-connection" title="The “dbus-connection†property">NMRemoteConnection:dbus-connection</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionCommitFunc" title="NMRemoteConnectionCommitFunc">NMRemoteConnectionCommitFunc</a>, typedef in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--dbus-path" title="The “dbus-path†property">NMRemoteConnection:dbus-path</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionDeleteFunc" title="NMRemoteConnectionDeleteFunc">NMRemoteConnectionDeleteFunc</a>, typedef in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionCommitFunc" title="NMRemoteConnectionCommitFunc ()">NMRemoteConnectionCommitFunc</a>, user_function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionError" title="enum NMRemoteConnectionError">NMRemoteConnectionError</a>, enum in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionDeleteFunc" title="NMRemoteConnectionDeleteFunc ()">NMRemoteConnectionDeleteFunc</a>, user_function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc" title="NMRemoteConnectionGetSecretsFunc ()">NMRemoteConnectionGetSecretsFunc</a>, user_function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc" title="NMRemoteConnectionGetSecretsFunc ()">NMRemoteConnectionGetSecretsFunc</a>, user_function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NMRemoteConnectionResultFunc" title="NMRemoteConnectionResultFunc ()">NMRemoteConnectionResultFunc</a>, user_function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettings-connections-read" title="The “connections-read†signal">NMRemoteSettings::connections-read</a>, object signal in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettings-struct" title="struct NMRemoteSettings">NMRemoteSettings</a>, struct in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettings-new-connection" title="The “new-connection†signal">NMRemoteSettings::new-connection</a>, object signal in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettings-connections-read" title='The "connections-read" signal'>NMRemoteSettings::connections-read</a>, object signal in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--bus" title="The “bus†property">NMRemoteSettings:bus</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettings-new-connection" title='The "new-connection" signal'>NMRemoteSettings::new-connection</a>, object signal in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--can-modify" title="The “can-modify†property">NMRemoteSettings:can-modify</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--bus" title='The "bus" property'>NMRemoteSettings:bus</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--hostname" title="The “hostname†property">NMRemoteSettings:hostname</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--can-modify" title='The "can-modify" property'>NMRemoteSettings:can-modify</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--service-running" title="The “service-running†property">NMRemoteSettings:service-running</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--hostname" title='The "hostname" property'>NMRemoteSettings:hostname</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()">NMRemoteSettingsAddConnectionFunc</a>, user_function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettings--service-running" title='The "service-running" property'>NMRemoteSettings:service-running</a>, object property in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()">NMRemoteSettingsAddConnectionFunc</a>, user_function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsClass" title="struct NMRemoteSettingsClass">NMRemoteSettingsClass</a>, struct in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
@@ -1757,23 +2298,43 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc" title="NMRemoteSettingsSaveHostnameFunc ()">NMRemoteSettingsSaveHostnameFunc</a>, user_function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsLoadConnectionsFunc" title="NMRemoteSettingsLoadConnectionsFunc ()">NMRemoteSettingsLoadConnectionsFunc</a>, user_function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc" title="NMRemoteSettingsSaveHostnameFunc ()">NMRemoteSettingsSaveHostnameFunc</a>, user_function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()">nm_remote_connection_commit_changes</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes-unsaved" title="nm_remote_connection_commit_changes_unsaved ()">nm_remote_connection_commit_changes_unsaved</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes" title="nm_remote_connection_commit_changes ()">nm_remote_connection_commit_changes</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()">nm_remote_connection_delete</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()">nm_remote_connection_delete</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR:CAPS" title="NM_REMOTE_CONNECTION_ERROR">NM_REMOTE_CONNECTION_ERROR</a>, macro in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()">nm_remote_connection_get_secrets</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-error-quark" title="nm_remote_connection_error_quark ()">nm_remote_connection_error_quark</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteConnection.html#nm-remote-connection-new" title="nm_remote_connection_new ()">nm_remote_connection_new</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets" title="nm_remote_connection_get_secrets ()">nm_remote_connection_get_secrets</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-unsaved" title="nm_remote_connection_get_unsaved ()">nm_remote_connection_get_unsaved</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-new" title="nm_remote_connection_new ()">nm_remote_connection_new</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
@@ -1781,11 +2342,23 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-save" title="nm_remote_connection_save ()">nm_remote_connection_save</a>, function in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UNSAVED:CAPS" title="NM_REMOTE_CONNECTION_UNSAVED">NM_REMOTE_CONNECTION_UNSAVED</a>, macro in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UPDATED:CAPS" title="NM_REMOTE_CONNECTION_UPDATED">NM_REMOTE_CONNECTION_UPDATED</a>, macro in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-add-connection" title="nm_remote_settings_add_connection ()">nm_remote_settings_add_connection</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-add-connection" title="nm_remote_settings_add_connection ()">nm_remote_settings_add_connection</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-add-connection-unsaved" title="nm_remote_settings_add_connection_unsaved ()">nm_remote_settings_add_connection_unsaved</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
@@ -1805,15 +2378,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-error-quark" title="nm_remote_settings_error_quark ()">nm_remote_settings_error_quark</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-error-quark" title="nm_remote_settings_error_quark ()">nm_remote_settings_error_quark</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-path" title="nm_remote_settings_get_connection_by_path ()">nm_remote_settings_get_connection_by_path</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-id" title="nm_remote_settings_get_connection_by_id ()">nm_remote_settings_get_connection_by_id</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-uuid" title="nm_remote_settings_get_connection_by_uuid ()">nm_remote_settings_get_connection_by_uuid</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-path" title="nm_remote_settings_get_connection_by_path ()">nm_remote_settings_get_connection_by_path</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-get-connection-by-uuid" title="nm_remote_settings_get_connection_by_uuid ()">nm_remote_settings_get_connection_by_uuid</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
@@ -1821,15 +2398,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()">nm_remote_settings_list_connections</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-list-connections" title="nm_remote_settings_list_connections ()">nm_remote_settings_list_connections</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new" title="nm_remote_settings_new ()">nm_remote_settings_new</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-load-connections" title="nm_remote_settings_load_connections ()">nm_remote_settings_load_connections</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()">nm_remote_settings_new_async</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new" title="nm_remote_settings_new ()">nm_remote_settings_new</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-async" title="nm_remote_settings_new_async ()">nm_remote_settings_new_async</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
@@ -1837,11 +2418,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-finish" title="nm_remote_settings_new_finish ()">nm_remote_settings_new_finish</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-new-finish" title="nm_remote_settings_new_finish ()">nm_remote_settings_new_finish</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-reload-connections" title="nm_remote_settings_reload_connections ()">nm_remote_settings_reload_connections</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMRemoteSettings.html#nm-remote-settings-save-hostname" title="nm_remote_settings_save_hostname ()">nm_remote_settings_save_hostname</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+<a class="link" href="NMRemoteSettings.html#nm-remote-settings-save-hostname" title="nm_remote_settings_save_hostname ()">nm_remote_settings_save_hostname</a>, function in <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
</dt>
<dd></dd>
<dt>
@@ -1850,23 +2435,39 @@
<dd></dd>
<a name="idxS"></a><h3 class="title">S</h3>
<dt>
-<a class="link" href="NMSecretAgent.html#NMSecretAgent-registration-result" title="The “registration-result†signal">NMSecretAgent::registration-result</a>, object signal in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NMSecretAgent-struct" title="NMSecretAgent">NMSecretAgent</a>, struct in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgent.html#NMSecretAgent-registration-result" title='The "registration-result" signal'>NMSecretAgent::registration-result</a>, object signal in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgent.html#NMSecretAgent--auto-register" title='The "auto-register" property'>NMSecretAgent:auto-register</a>, object property in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#NMSecretAgent--auto-register" title="The “auto-register†property">NMSecretAgent:auto-register</a>, object property in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NMSecretAgent--capabilities" title='The "capabilities" property'>NMSecretAgent:capabilities</a>, object property in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#NMSecretAgent--identifier" title="The “identifier†property">NMSecretAgent:identifier</a>, object property in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NMSecretAgent--identifier" title='The "identifier" property'>NMSecretAgent:identifier</a>, object property in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#NMSecretAgent--registered" title="The “registered†property">NMSecretAgent:registered</a>, object property in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NMSecretAgent--registered" title='The "registered" property'>NMSecretAgent:registered</a>, object property in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()">NMSecretAgentDeleteSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentCapabilities" title="enum NMSecretAgentCapabilities">NMSecretAgentCapabilities</a>, enum in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentClass" title="NMSecretAgentClass">NMSecretAgentClass</a>, struct in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()">NMSecretAgentDeleteSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
@@ -1878,11 +2479,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()">NMSecretAgentGetSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()">NMSecretAgentGetSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()">NMSecretAgentSaveSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()">NMSecretAgentSaveSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
@@ -1890,7 +2491,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-delete-secrets" title="nm_secret_agent_delete_secrets ()">nm_secret_agent_delete_secrets</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITIES:CAPS" title="NM_SECRET_AGENT_CAPABILITIES">NM_SECRET_AGENT_CAPABILITIES</a>, macro in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgent.html#nm-secret-agent-delete-secrets" title="nm_secret_agent_delete_secrets ()">nm_secret_agent_delete_secrets</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
@@ -1898,15 +2503,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-error-quark" title="nm_secret_agent_error_quark ()">nm_secret_agent_error_quark</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#nm-secret-agent-error-quark" title="nm_secret_agent_error_quark ()">nm_secret_agent_error_quark</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-get-registered" title="nm_secret_agent_get_registered ()">nm_secret_agent_get_registered</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#nm-secret-agent-get-registered" title="nm_secret_agent_get_registered ()">nm_secret_agent_get_registered</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-get-secrets" title="nm_secret_agent_get_secrets ()">nm_secret_agent_get_secrets</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#nm-secret-agent-get-secrets" title="nm_secret_agent_get_secrets ()">nm_secret_agent_get_secrets</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
@@ -1914,7 +2519,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-register" title="nm_secret_agent_register ()">nm_secret_agent_register</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#nm-secret-agent-register" title="nm_secret_agent_register ()">nm_secret_agent_register</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
@@ -1926,24 +2531,40 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-save-secrets" title="nm_secret_agent_save_secrets ()">nm_secret_agent_save_secrets</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#nm-secret-agent-save-secrets" title="nm_secret_agent_save_secrets ()">nm_secret_agent_save_secrets</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSecretAgent.html#nm-secret-agent-unregister" title="nm_secret_agent_unregister ()">nm_secret_agent_unregister</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+<a class="link" href="NMSecretAgent.html#nm-secret-agent-unregister" title="nm_secret_agent_unregister ()">nm_secret_agent_unregister</a>, function in <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</dt>
<dd></dd>
<a name="idxV"></a><h3 class="title">V</h3>
<dt>
-<a class="link" href="NMVPNConnection.html#NMVPNConnection-vpn-state-changed" title="The “vpn-state-changed†signal">NMVPNConnection::vpn-state-changed</a>, object signal in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+<a class="link" href="NMVPNConnection.html#NMVPNConnection-struct" title="NMVPNConnection">NMVPNConnection</a>, struct in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMVPNConnection.html#NMVPNConnection-vpn-state-changed" title='The "vpn-state-changed" signal'>NMVPNConnection::vpn-state-changed</a>, object signal in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMVPNConnection.html#NMVPNConnection--banner" title='The "banner" property'>NMVPNConnection:banner</a>, object property in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMVPNConnection.html#NMVPNConnection--banner" title="The “banner†property">NMVPNConnection:banner</a>, object property in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+<a class="link" href="NMVPNConnection.html#NMVPNConnection--vpn-state" title='The "vpn-state" property'>NMVPNConnection:vpn-state</a>, object property in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMVPNConnection.html#NMVPNConnection--vpn-state" title="The “vpn-state†property">NMVPNConnection:vpn-state</a>, object property in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+<a class="link" href="NMVPNConnection.html#NMVPNConnectionClass" title="NMVPNConnectionClass">NMVPNConnectionClass</a>, struct in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin">NMVPNPlugin</a>, struct in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPluginClass" title="NMVPNPluginClass">NMVPNPluginClass</a>, struct in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
@@ -1951,15 +2572,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiCapability" title="enum NMVpnPluginUiCapability">NMVpnPluginUiCapability</a>, enum in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiCapability" title="enum NMVpnPluginUiCapability">NMVpnPluginUiCapability</a>, enum in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiFactory" title="NMVpnPluginUiFactory ()">NMVpnPluginUiFactory</a>, user_function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiFactory" title="NMVpnPluginUiFactory ()">NMVpnPluginUiFactory</a>, user_function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiInterfaceProp" title="enum NMVpnPluginUiInterfaceProp">NMVpnPluginUiInterfaceProp</a>, enum in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface">NMVpnPluginUiInterface</a>, struct in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterfaceProp" title="enum NMVpnPluginUiInterfaceProp">NMVpnPluginUiInterfaceProp</a>, enum in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface">NMVpnPluginUiWidgetInterface</a>, struct in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
@@ -1967,15 +2596,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-banner" title="nm_vpn_connection_get_banner ()">nm_vpn_connection_get_banner</a>, function in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+<a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-banner" title="nm_vpn_connection_get_banner ()">nm_vpn_connection_get_banner</a>, function in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-vpn-state" title="nm_vpn_connection_get_vpn_state ()">nm_vpn_connection_get_vpn_state</a>, function in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+<a class="link" href="NMVPNConnection.html#nm-vpn-connection-get-vpn-state" title="nm_vpn_connection_get_vpn_state ()">nm_vpn_connection_get_vpn_state</a>, function in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMVPNConnection.html#nm-vpn-connection-new" title="nm_vpn_connection_new ()">nm_vpn_connection_new</a>, function in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+<a class="link" href="NMVPNConnection.html#nm-vpn-connection-new" title="nm_vpn_connection_new ()">nm_vpn_connection_new</a>, function in <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
</dt>
<dd></dd>
<dt>
@@ -1987,43 +2616,47 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-disconnect" title="nm_vpn_plugin_disconnect ()">nm_vpn_plugin_disconnect</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-disconnect" title="nm_vpn_plugin_disconnect ()">nm_vpn_plugin_disconnect</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-error-quark" title="nm_vpn_plugin_error_quark ()">nm_vpn_plugin_error_quark</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-error-quark" title="nm_vpn_plugin_error_quark ()">nm_vpn_plugin_error_quark</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-failure" title="nm_vpn_plugin_failure ()">nm_vpn_plugin_failure</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-failure" title="nm_vpn_plugin_failure ()">nm_vpn_plugin_failure</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-connection" title="nm_vpn_plugin_get_connection ()">nm_vpn_plugin_get_connection</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-connection" title="nm_vpn_plugin_get_connection ()">nm_vpn_plugin_get_connection</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-state" title="nm_vpn_plugin_get_state ()">nm_vpn_plugin_get_state</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-state" title="nm_vpn_plugin_get_state ()">nm_vpn_plugin_get_state</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-secrets-required" title="nm_vpn_plugin_secrets_required ()">nm_vpn_plugin_secrets_required</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-config" title="nm_vpn_plugin_set_config ()">nm_vpn_plugin_set_config</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-config" title="nm_vpn_plugin_set_config ()">nm_vpn_plugin_set_config</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip4-config" title="nm_vpn_plugin_set_ip4_config ()">nm_vpn_plugin_set_ip4_config</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip4-config" title="nm_vpn_plugin_set_ip4_config ()">nm_vpn_plugin_set_ip4_config</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip6-config" title="nm_vpn_plugin_set_ip6_config ()">nm_vpn_plugin_set_ip6_config</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip6-config" title="nm_vpn_plugin_set_ip6_config ()">nm_vpn_plugin_set_ip6_config</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-login-banner" title="nm_vpn_plugin_set_login_banner ()">nm_vpn_plugin_set_login_banner</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-login-banner" title="nm_vpn_plugin_set_login_banner ()">nm_vpn_plugin_set_login_banner</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-state" title="nm_vpn_plugin_set_state ()">nm_vpn_plugin_set_state</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
+<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-state" title="nm_vpn_plugin_set_state ()">nm_vpn_plugin_set_state</a>, function in <a class="link" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">NMVPNPlugin</a>
</dt>
<dd></dd>
<dt>
@@ -2031,76 +2664,84 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-factory" title="nm_vpn_plugin_ui_factory ()">nm_vpn_plugin_ui_factory</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-factory" title="nm_vpn_plugin_ui_factory ()">nm_vpn_plugin_ui_factory</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-delete-connection" title="nm_vpn_plugin_ui_interface_delete_connection ()">nm_vpn_plugin_ui_interface_delete_connection</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-delete-connection" title="nm_vpn_plugin_ui_interface_delete_connection ()">nm_vpn_plugin_ui_interface_delete_connection</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_DESC">NM_VPN_PLUGIN_UI_INTERFACE_DESC</a>, macro in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_DESC">NM_VPN_PLUGIN_UI_INTERFACE_DESC</a>, macro in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-export" title="nm_vpn_plugin_ui_interface_export ()">nm_vpn_plugin_ui_interface_export</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-export" title="nm_vpn_plugin_ui_interface_export ()">nm_vpn_plugin_ui_interface_export</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-capabilities" title="nm_vpn_plugin_ui_interface_get_capabilities ()">nm_vpn_plugin_ui_interface_get_capabilities</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-capabilities" title="nm_vpn_plugin_ui_interface_get_capabilities ()">nm_vpn_plugin_ui_interface_get_capabilities</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-suggested-name" title="nm_vpn_plugin_ui_interface_get_suggested_name ()">nm_vpn_plugin_ui_interface_get_suggested_name</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-suggested-name" title="nm_vpn_plugin_ui_interface_get_suggested_name ()">nm_vpn_plugin_ui_interface_get_suggested_name</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-import" title="nm_vpn_plugin_ui_interface_import ()">nm_vpn_plugin_ui_interface_import</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-import" title="nm_vpn_plugin_ui_interface_import ()">nm_vpn_plugin_ui_interface_import</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_NAME">NM_VPN_PLUGIN_UI_INTERFACE_NAME</a>, macro in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_NAME">NM_VPN_PLUGIN_UI_INTERFACE_NAME</a>, macro in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_SERVICE">NM_VPN_PLUGIN_UI_INTERFACE_SERVICE</a>, macro in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_SERVICE">NM_VPN_PLUGIN_UI_INTERFACE_SERVICE</a>, macro in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-ui-factory" title="nm_vpn_plugin_ui_interface_ui_factory ()">nm_vpn_plugin_ui_interface_ui_factory</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-ui-factory" title="nm_vpn_plugin_ui_interface_ui_factory ()">nm_vpn_plugin_ui_interface_ui_factory</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-get-widget" title="nm_vpn_plugin_ui_widget_interface_get_widget ()">nm_vpn_plugin_ui_widget_interface_get_widget</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-get-widget" title="nm_vpn_plugin_ui_widget_interface_get_widget ()">nm_vpn_plugin_ui_widget_interface_get_widget</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-save-secrets" title="nm_vpn_plugin_ui_widget_interface_save_secrets ()">nm_vpn_plugin_ui_widget_interface_save_secrets</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-save-secrets" title="nm_vpn_plugin_ui_widget_interface_save_secrets ()">nm_vpn_plugin_ui_widget_interface_save_secrets</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-update-connection" title="nm_vpn_plugin_ui_widget_interface_update_connection ()">nm_vpn_plugin_ui_widget_interface_update_connection</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">NMVpnPluginUiWidget</a>
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-update-connection" title="nm_vpn_plugin_ui_widget_interface_update_connection ()">nm_vpn_plugin_ui_widget_interface_update_connection</a>, function in <a class="link" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">NMVpnPluginUi</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-get-secret-flags" title="nm_vpn_plugin_utils_get_secret_flags ()">nm_vpn_plugin_utils_get_secret_flags</a>, function in <a class="link" href="libnm-glib-nm-vpn-plugin-utils.html" title="nm-vpn-plugin-utils">nm-vpn-plugin-utils</a>
+<a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-get-secret-flags" title="nm_vpn_plugin_utils_get_secret_flags ()">nm_vpn_plugin_utils_get_secret_flags</a>, function in <a class="link" href="libnm-glib-nm-vpn-plugin-utils.html" title="nm-vpn-plugin-utils">nm-vpn-plugin-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-read-vpn-details" title="nm_vpn_plugin_utils_read_vpn_details ()">nm_vpn_plugin_utils_read_vpn_details</a>, function in <a class="link" href="libnm-glib-nm-vpn-plugin-utils.html" title="nm-vpn-plugin-utils">nm-vpn-plugin-utils</a>
+<a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-read-vpn-details" title="nm_vpn_plugin_utils_read_vpn_details ()">nm_vpn_plugin_utils_read_vpn_details</a>, function in <a class="link" href="libnm-glib-nm-vpn-plugin-utils.html" title="nm-vpn-plugin-utils">nm-vpn-plugin-utils</a>
</dt>
<dd></dd>
<a name="idxW"></a><h3 class="title">W</h3>
<dt>
-<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--name" title="The “name†property">NMWimaxNsp:name</a>, object property in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#NMWimaxNsp-struct" title="NMWimaxNsp">NMWimaxNsp</a>, struct in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--name" title='The "name" property'>NMWimaxNsp:name</a>, object property in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--network-type" title='The "network-type" property'>NMWimaxNsp:network-type</a>, object property in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--network-type" title="The “network-type†property">NMWimaxNsp:network-type</a>, object property in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--signal-quality" title='The "signal-quality" property'>NMWimaxNsp:signal-quality</a>, object property in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#NMWimaxNsp--signal-quality" title="The “signal-quality†property">NMWimaxNsp:signal-quality</a>, object property in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#NMWimaxNspClass" title="NMWimaxNspClass">NMWimaxNspClass</a>, struct in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
@@ -2108,23 +2749,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-connection-valid" title="nm_wimax_nsp_connection_valid ()">nm_wimax_nsp_connection_valid</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-connection-valid" title="nm_wimax_nsp_connection_valid ()">nm_wimax_nsp_connection_valid</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-filter-connections" title="nm_wimax_nsp_filter_connections ()">nm_wimax_nsp_filter_connections</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-filter-connections" title="nm_wimax_nsp_filter_connections ()">nm_wimax_nsp_filter_connections</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-name" title="nm_wimax_nsp_get_name ()">nm_wimax_nsp_get_name</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-name" title="nm_wimax_nsp_get_name ()">nm_wimax_nsp_get_name</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-network-type" title="nm_wimax_nsp_get_network_type ()">nm_wimax_nsp_get_network_type</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-network-type" title="nm_wimax_nsp_get_network_type ()">nm_wimax_nsp_get_network_type</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality" title="nm_wimax_nsp_get_signal_quality ()">nm_wimax_nsp_get_signal_quality</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality" title="nm_wimax_nsp_get_signal_quality ()">nm_wimax_nsp_get_signal_quality</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
@@ -2136,7 +2777,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-new" title="nm_wimax_nsp_new ()">nm_wimax_nsp_new</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+<a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-new" title="nm_wimax_nsp_new ()">nm_wimax_nsp_new</a>, function in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
</dt>
<dd></dd>
<dt>
@@ -2146,6 +2787,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/ch02.html b/docs/libnm-glib/html/ch02.html
index 573515a1e..c730745b5 100644
--- a/docs/libnm-glib/html/ch02.html
+++ b/docs/libnm-glib/html/ch02.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: libnm-glib API Reference</title>
+<title>libnm-glib API Reference</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="index.html" title="libnm-glib Reference Manual">
<link rel="prev" href="ref-overview.html" title="Object Overview">
<link rel="next" href="NMClient.html" title="NMClient">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="ref-overview.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMClient.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ref-overview.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMClient.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
@@ -57,6 +57,12 @@
<span class="refentrytitle"><a href="NMDeviceBridge.html">NMDeviceBridge</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="NMDeviceTeam.html">NMDeviceTeam</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceGeneric.html">NMDeviceGeneric</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMDeviceInfiniband.html">NMDeviceInfiniband</a></span><span class="refpurpose"></span>
</dt>
<dt>
@@ -90,7 +96,7 @@
<span class="refentrytitle"><a href="NMRemoteConnection.html">NMRemoteConnection</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="NMRemoteSettings.html">NMRemoteSettings</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="NMRemoteSettings.html">NMRemoteSettings</a></span><span class="refpurpose"> — A helper for NetworkManager's settings API</span>
</dt>
<dt>
<span class="refentrytitle"><a href="libnm-glib-nm-types.html">nm-types</a></span><span class="refpurpose"></span>
@@ -105,7 +111,7 @@
<span class="refentrytitle"><a href="libnm-glib-NMVPNPlugin.html">NMVPNPlugin</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="libnm-glib-NMVpnPluginUiWidget.html">NMVpnPluginUiWidget</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="libnm-glib-NMVpnPluginUi.html">NMVpnPluginUi</a></span><span class="refpurpose"></span>
</dt>
<dt>
<span class="refentrytitle"><a href="libnm-glib-nm-vpn-plugin-utils.html">nm-vpn-plugin-utils</a></span><span class="refpurpose"></span>
@@ -114,6 +120,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/home.png b/docs/libnm-glib/html/home.png
index 9346b336a..17003611d 100644
--- a/docs/libnm-glib/html/home.png
+++ b/docs/libnm-glib/html/home.png
Binary files differ
diff --git a/docs/libnm-glib/html/index.html b/docs/libnm-glib/html/index.html
index e231d8284..588c303c8 100644
--- a/docs/libnm-glib/html/index.html
+++ b/docs/libnm-glib/html/index.html
@@ -2,11 +2,11 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: libnm-glib Reference Manual</title>
+<title>libnm-glib Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="next" href="ref-overview.html" title="Object Overview">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm-glib Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for libnm-glib 0.9.8.10
+ for libnm-glib 0.9.10.0
The latest version of this documentation can be found on-line at
<a class="ulink" href="https://developer.gnome.org/libnm-glib/0.9/" target="_top">https://developer.gnome.org/libnm-glib/0.9/</a>.
@@ -84,6 +84,12 @@
<span class="refentrytitle"><a href="NMDeviceBridge.html">NMDeviceBridge</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="NMDeviceTeam.html">NMDeviceTeam</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceGeneric.html">NMDeviceGeneric</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMDeviceInfiniband.html">NMDeviceInfiniband</a></span><span class="refpurpose"></span>
</dt>
<dt>
@@ -117,7 +123,7 @@
<span class="refentrytitle"><a href="NMRemoteConnection.html">NMRemoteConnection</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="NMRemoteSettings.html">NMRemoteSettings</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="NMRemoteSettings.html">NMRemoteSettings</a></span><span class="refpurpose"> — A helper for NetworkManager's settings API</span>
</dt>
<dt>
<span class="refentrytitle"><a href="libnm-glib-nm-types.html">nm-types</a></span><span class="refpurpose"></span>
@@ -132,7 +138,7 @@
<span class="refentrytitle"><a href="libnm-glib-NMVPNPlugin.html">NMVPNPlugin</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="libnm-glib-NMVpnPluginUiWidget.html">NMVpnPluginUiWidget</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="libnm-glib-NMVpnPluginUi.html">NMVpnPluginUi</a></span><span class="refpurpose"></span>
</dt>
<dt>
<span class="refentrytitle"><a href="libnm-glib-nm-vpn-plugin-utils.html">nm-vpn-plugin-utils</a></span><span class="refpurpose"></span>
@@ -145,6 +151,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/index.sgml b/docs/libnm-glib/html/index.sgml
index c4c30f65c..5aab1ec14 100644
--- a/docs/libnm-glib/html/index.sgml
+++ b/docs/libnm-glib/html/index.sgml
@@ -1,12 +1,54 @@
<ONLINE href="https://developer.gnome.org/libnm-glib/0.9/">
<ANCHOR id="NMClient" href="libnm-glib/NMClient.html">
-<ANCHOR id="NMClient.functions" href="libnm-glib/NMClient.html#NMClient.functions">
+<ANCHOR id="NMClient.synopsis" href="libnm-glib/NMClient.html#NMClient.synopsis">
+<ANCHOR id="NMClient.object-hierarchy" href="libnm-glib/NMClient.html#NMClient.object-hierarchy">
+<ANCHOR id="NMClient.implemented-interfaces" href="libnm-glib/NMClient.html#NMClient.implemented-interfaces">
<ANCHOR id="NMClient.properties" href="libnm-glib/NMClient.html#NMClient.properties">
<ANCHOR id="NMClient.signals" href="libnm-glib/NMClient.html#NMClient.signals">
-<ANCHOR id="NMClient.other" href="libnm-glib/NMClient.html#NMClient.other">
-<ANCHOR id="NMClient.object-hierarchy" href="libnm-glib/NMClient.html#NMClient.object-hierarchy">
<ANCHOR id="NMClient.description" href="libnm-glib/NMClient.html#NMClient.description">
-<ANCHOR id="NMClient.functions_details" href="libnm-glib/NMClient.html#NMClient.functions_details">
+<ANCHOR id="NMClient.details" href="libnm-glib/NMClient.html#NMClient.details">
+<ANCHOR id="NM-CLIENT-VERSION:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-VERSION:CAPS">
+<ANCHOR id="NM-CLIENT-STATE:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-STATE:CAPS">
+<ANCHOR id="NM-CLIENT-STARTUP:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-STARTUP:CAPS">
+<ANCHOR id="NM-CLIENT-MANAGER-RUNNING:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-MANAGER-RUNNING:CAPS">
+<ANCHOR id="NM-CLIENT-NETWORKING-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-NETWORKING-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIRELESS-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIRELESS-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WWAN-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WWAN-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIMAX-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIMAX-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-ACTIVE-CONNECTIONS:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS">
+<ANCHOR id="NM-CLIENT-CONNECTIVITY:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-CONNECTIVITY:CAPS">
+<ANCHOR id="NM-CLIENT-PRIMARY-CONNECTION:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PRIMARY-CONNECTION:CAPS">
+<ANCHOR id="NM-CLIENT-ACTIVATING-CONNECTION:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-ACTIVATING-CONNECTION:CAPS">
+<ANCHOR id="NM-CLIENT-DEVICES:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-DEVICES:CAPS">
+<ANCHOR id="NMClientPermission" href="libnm-glib/NMClient.html#NMClientPermission">
+<ANCHOR id="NM-CLIENT-PERMISSION-NONE:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-NONE:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-NETWORK:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-NETWORK:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIFI:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIFI:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WWAN:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WWAN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIMAX:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIMAX:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SLEEP-WAKE:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SLEEP-WAKE:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-NETWORK-CONTROL:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-NETWORK-CONTROL:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-WIFI-SHARE-PROTECTED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-WIFI-SHARE-PROTECTED:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-WIFI-SHARE-OPEN:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-WIFI-SHARE-OPEN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-LAST:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-LAST:CAPS">
+<ANCHOR id="NMClientPermissionResult" href="libnm-glib/NMClient.html#NMClientPermissionResult">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-YES:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-RESULT-YES:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-NO:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-RESULT-NO:CAPS">
+<ANCHOR id="NMClientError" href="libnm-glib/NMClient.html#NMClientError">
+<ANCHOR id="NM-CLIENT-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-CLIENT-ERROR-MANAGER-NOT-RUNNING:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-ERROR-MANAGER-NOT-RUNNING:CAPS">
+<ANCHOR id="NM-CLIENT-ERROR:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-ERROR:CAPS">
+<ANCHOR id="nm-client-error-quark" href="libnm-glib/NMClient.html#nm-client-error-quark">
+<ANCHOR id="NMClient-struct" href="libnm-glib/NMClient.html#NMClient-struct">
+<ANCHOR id="NMClientClass" href="libnm-glib/NMClient.html#NMClientClass">
<ANCHOR id="nm-client-new" href="libnm-glib/NMClient.html#nm-client-new">
<ANCHOR id="nm-client-new-async" href="libnm-glib/NMClient.html#nm-client-new-async">
<ANCHOR id="nm-client-new-finish" href="libnm-glib/NMClient.html#nm-client-new-finish">
@@ -31,6 +73,7 @@
<ANCHOR id="nm-client-wimax-hardware-get-enabled" href="libnm-glib/NMClient.html#nm-client-wimax-hardware-get-enabled">
<ANCHOR id="nm-client-get-version" href="libnm-glib/NMClient.html#nm-client-get-version">
<ANCHOR id="nm-client-get-state" href="libnm-glib/NMClient.html#nm-client-get-state">
+<ANCHOR id="nm-client-get-startup" href="libnm-glib/NMClient.html#nm-client-get-startup">
<ANCHOR id="nm-client-get-manager-running" href="libnm-glib/NMClient.html#nm-client-get-manager-running">
<ANCHOR id="nm-client-get-active-connections" href="libnm-glib/NMClient.html#nm-client-get-active-connections">
<ANCHOR id="nm-client-sleep" href="libnm-glib/NMClient.html#nm-client-sleep">
@@ -43,30 +86,15 @@
<ANCHOR id="nm-client-check-connectivity-finish" href="libnm-glib/NMClient.html#nm-client-check-connectivity-finish">
<ANCHOR id="nm-client-get-primary-connection" href="libnm-glib/NMClient.html#nm-client-get-primary-connection">
<ANCHOR id="nm-client-get-activating-connection" href="libnm-glib/NMClient.html#nm-client-get-activating-connection">
-<ANCHOR id="NMClient.other_details" href="libnm-glib/NMClient.html#NMClient.other_details">
-<ANCHOR id="NM-CLIENT-VERSION:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-VERSION:CAPS">
-<ANCHOR id="NM-CLIENT-STATE:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-STATE:CAPS">
-<ANCHOR id="NM-CLIENT-MANAGER-RUNNING:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-MANAGER-RUNNING:CAPS">
-<ANCHOR id="NM-CLIENT-NETWORKING-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-NETWORKING-ENABLED:CAPS">
-<ANCHOR id="NM-CLIENT-WIRELESS-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIRELESS-ENABLED:CAPS">
-<ANCHOR id="NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS">
-<ANCHOR id="NM-CLIENT-WWAN-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WWAN-ENABLED:CAPS">
-<ANCHOR id="NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS">
-<ANCHOR id="NM-CLIENT-WIMAX-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIMAX-ENABLED:CAPS">
-<ANCHOR id="NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS">
-<ANCHOR id="NM-CLIENT-ACTIVE-CONNECTIONS:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS">
-<ANCHOR id="NM-CLIENT-CONNECTIVITY:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-CONNECTIVITY:CAPS">
-<ANCHOR id="NM-CLIENT-PRIMARY-CONNECTION:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PRIMARY-CONNECTION:CAPS">
-<ANCHOR id="NM-CLIENT-ACTIVATING-CONNECTION:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-ACTIVATING-CONNECTION:CAPS">
-<ANCHOR id="NMClientPermission" href="libnm-glib/NMClient.html#NMClientPermission">
-<ANCHOR id="NMClientPermissionResult" href="libnm-glib/NMClient.html#NMClientPermissionResult">
<ANCHOR id="NMClient.property-details" href="libnm-glib/NMClient.html#NMClient.property-details">
<ANCHOR id="NMClient--activating-connection" href="libnm-glib/NMClient.html#NMClient--activating-connection">
<ANCHOR id="NMClient--active-connections" href="libnm-glib/NMClient.html#NMClient--active-connections">
<ANCHOR id="NMClient--connectivity" href="libnm-glib/NMClient.html#NMClient--connectivity">
+<ANCHOR id="NMClient--devices" href="libnm-glib/NMClient.html#NMClient--devices">
<ANCHOR id="NMClient--manager-running" href="libnm-glib/NMClient.html#NMClient--manager-running">
<ANCHOR id="NMClient--networking-enabled" href="libnm-glib/NMClient.html#NMClient--networking-enabled">
<ANCHOR id="NMClient--primary-connection" href="libnm-glib/NMClient.html#NMClient--primary-connection">
+<ANCHOR id="NMClient--startup" href="libnm-glib/NMClient.html#NMClient--startup">
<ANCHOR id="NMClient--state" href="libnm-glib/NMClient.html#NMClient--state">
<ANCHOR id="NMClient--version" href="libnm-glib/NMClient.html#NMClient--version">
<ANCHOR id="NMClient--wimax-enabled" href="libnm-glib/NMClient.html#NMClient--wimax-enabled">
@@ -80,47 +108,99 @@
<ANCHOR id="NMClient-device-removed" href="libnm-glib/NMClient.html#NMClient-device-removed">
<ANCHOR id="NMClient-permission-changed" href="libnm-glib/NMClient.html#NMClient-permission-changed">
<ANCHOR id="NMActiveConnection" href="libnm-glib/NMActiveConnection.html">
-<ANCHOR id="NMActiveConnection.functions" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.functions">
-<ANCHOR id="NMActiveConnection.properties" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.properties">
-<ANCHOR id="NMActiveConnection.other" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.other">
+<ANCHOR id="NMActiveConnection.synopsis" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.synopsis">
<ANCHOR id="NMActiveConnection.object-hierarchy" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.object-hierarchy">
+<ANCHOR id="NMActiveConnection.implemented-interfaces" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.implemented-interfaces">
+<ANCHOR id="NMActiveConnection.properties" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.properties">
<ANCHOR id="NMActiveConnection.description" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.description">
-<ANCHOR id="NMActiveConnection.functions_details" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.functions_details">
-<ANCHOR id="nm-active-connection-new" href="libnm-glib/NMActiveConnection.html#nm-active-connection-new">
-<ANCHOR id="nm-active-connection-get-connection" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-connection">
-<ANCHOR id="nm-active-connection-get-uuid" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-uuid">
-<ANCHOR id="nm-active-connection-get-specific-object" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-specific-object">
-<ANCHOR id="nm-active-connection-get-devices" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-devices">
-<ANCHOR id="nm-active-connection-get-state" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-state">
-<ANCHOR id="nm-active-connection-get-default" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-default">
-<ANCHOR id="nm-active-connection-get-default6" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-default6">
-<ANCHOR id="nm-active-connection-get-master" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-master">
-<ANCHOR id="NMActiveConnection.other_details" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.other_details">
+<ANCHOR id="NMActiveConnection.details" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.details">
<ANCHOR id="NM-ACTIVE-CONNECTION-CONNECTION:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-CONNECTION:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-ID:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-ID:CAPS">
<ANCHOR id="NM-ACTIVE-CONNECTION-UUID:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-UUID:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-TYPE:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-TYPE:CAPS">
<ANCHOR id="NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT:CAPS">
<ANCHOR id="NM-ACTIVE-CONNECTION-DEVICES:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEVICES:CAPS">
<ANCHOR id="NM-ACTIVE-CONNECTION-STATE:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-STATE:CAPS">
<ANCHOR id="NM-ACTIVE-CONNECTION-DEFAULT:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS">
<ANCHOR id="NM-ACTIVE-CONNECTION-DEFAULT6:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT6:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-VPN:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-VPN:CAPS">
<ANCHOR id="NM-ACTIVE-CONNECTION-MASTER:CAPS" href="libnm-glib/NMActiveConnection.html#NM-ACTIVE-CONNECTION-MASTER:CAPS">
+<ANCHOR id="NMActiveConnection-struct" href="libnm-glib/NMActiveConnection.html#NMActiveConnection-struct">
+<ANCHOR id="NMActiveConnectionClass" href="libnm-glib/NMActiveConnection.html#NMActiveConnectionClass">
+<ANCHOR id="nm-active-connection-new" href="libnm-glib/NMActiveConnection.html#nm-active-connection-new">
+<ANCHOR id="nm-active-connection-get-connection" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-connection">
+<ANCHOR id="nm-active-connection-get-id" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-id">
+<ANCHOR id="nm-active-connection-get-uuid" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-uuid">
+<ANCHOR id="nm-active-connection-get-connection-type" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-connection-type">
+<ANCHOR id="nm-active-connection-get-specific-object" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-specific-object">
+<ANCHOR id="nm-active-connection-get-devices" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-devices">
+<ANCHOR id="nm-active-connection-get-state" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-state">
+<ANCHOR id="nm-active-connection-get-master" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-master">
+<ANCHOR id="nm-active-connection-get-default" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-default">
+<ANCHOR id="nm-active-connection-get-ip4-config" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-ip4-config">
+<ANCHOR id="nm-active-connection-get-dhcp4-config" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-dhcp4-config">
+<ANCHOR id="nm-active-connection-get-default6" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-default6">
+<ANCHOR id="nm-active-connection-get-ip6-config" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-ip6-config">
+<ANCHOR id="nm-active-connection-get-dhcp6-config" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-dhcp6-config">
+<ANCHOR id="nm-active-connection-get-vpn" href="libnm-glib/NMActiveConnection.html#nm-active-connection-get-vpn">
<ANCHOR id="NMActiveConnection.property-details" href="libnm-glib/NMActiveConnection.html#NMActiveConnection.property-details">
<ANCHOR id="NMActiveConnection--connection" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--connection">
<ANCHOR id="NMActiveConnection--default" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--default">
<ANCHOR id="NMActiveConnection--default6" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--default6">
<ANCHOR id="NMActiveConnection--devices" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--devices">
+<ANCHOR id="NMActiveConnection--dhcp4-config" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--dhcp4-config">
+<ANCHOR id="NMActiveConnection--dhcp6-config" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--dhcp6-config">
+<ANCHOR id="NMActiveConnection--id" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--id">
+<ANCHOR id="NMActiveConnection--ip4-config" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--ip4-config">
+<ANCHOR id="NMActiveConnection--ip6-config" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--ip6-config">
<ANCHOR id="NMActiveConnection--master" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--master">
<ANCHOR id="NMActiveConnection--specific-object" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--specific-object">
<ANCHOR id="NMActiveConnection--state" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--state">
+<ANCHOR id="NMActiveConnection--type" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--type">
<ANCHOR id="NMActiveConnection--uuid" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--uuid">
+<ANCHOR id="NMActiveConnection--vpn" href="libnm-glib/NMActiveConnection.html#NMActiveConnection--vpn">
<ANCHOR id="NMDevice" href="libnm-glib/NMDevice.html">
-<ANCHOR id="NMDevice.functions" href="libnm-glib/NMDevice.html#NMDevice.functions">
+<ANCHOR id="NMDevice.synopsis" href="libnm-glib/NMDevice.html#NMDevice.synopsis">
+<ANCHOR id="NMDevice.object-hierarchy" href="libnm-glib/NMDevice.html#NMDevice.object-hierarchy">
+<ANCHOR id="NMDevice.implemented-interfaces" href="libnm-glib/NMDevice.html#NMDevice.implemented-interfaces">
<ANCHOR id="NMDevice.properties" href="libnm-glib/NMDevice.html#NMDevice.properties">
<ANCHOR id="NMDevice.signals" href="libnm-glib/NMDevice.html#NMDevice.signals">
-<ANCHOR id="NMDevice.other" href="libnm-glib/NMDevice.html#NMDevice.other">
-<ANCHOR id="NMDevice.object-hierarchy" href="libnm-glib/NMDevice.html#NMDevice.object-hierarchy">
<ANCHOR id="NMDevice.description" href="libnm-glib/NMDevice.html#NMDevice.description">
-<ANCHOR id="NMDevice.functions_details" href="libnm-glib/NMDevice.html#NMDevice.functions_details">
+<ANCHOR id="NMDevice.details" href="libnm-glib/NMDevice.html#NMDevice.details">
+<ANCHOR id="NMDeviceError" href="libnm-glib/NMDevice.html#NMDeviceError">
+<ANCHOR id="NM-DEVICE-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-INTERFACE-MISMATCH:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-ERROR-INTERFACE-MISMATCH:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-ERROR:CAPS">
+<ANCHOR id="nm-device-error-quark" href="libnm-glib/NMDevice.html#nm-device-error-quark">
+<ANCHOR id="NM-DEVICE-DEVICE-TYPE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DEVICE-TYPE:CAPS">
+<ANCHOR id="NM-DEVICE-UDI:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-UDI:CAPS">
+<ANCHOR id="NM-DEVICE-INTERFACE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-INTERFACE:CAPS">
+<ANCHOR id="NM-DEVICE-IP-INTERFACE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-IP-INTERFACE:CAPS">
+<ANCHOR id="NM-DEVICE-DRIVER:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DRIVER:CAPS">
+<ANCHOR id="NM-DEVICE-DRIVER-VERSION:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DRIVER-VERSION:CAPS">
+<ANCHOR id="NM-DEVICE-FIRMWARE-VERSION:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-FIRMWARE-VERSION:CAPS">
+<ANCHOR id="NM-DEVICE-CAPABILITIES:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-CAPABILITIES:CAPS">
+<ANCHOR id="NM-DEVICE-MANAGED:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-MANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-AUTOCONNECT:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-AUTOCONNECT:CAPS">
+<ANCHOR id="NM-DEVICE-FIRMWARE-MISSING:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-FIRMWARE-MISSING:CAPS">
+<ANCHOR id="NM-DEVICE-IP4-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-IP4-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-DHCP4-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DHCP4-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-IP6-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-DHCP6-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-STATE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-STATE-REASON:CAPS">
+<ANCHOR id="NM-DEVICE-ACTIVE-CONNECTION:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS">
+<ANCHOR id="NM-DEVICE-VENDOR:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-VENDOR:CAPS">
+<ANCHOR id="NM-DEVICE-PRODUCT:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-PRODUCT:CAPS">
+<ANCHOR id="NM-DEVICE-PHYSICAL-PORT-ID:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-PHYSICAL-PORT-ID:CAPS">
+<ANCHOR id="NM-DEVICE-MTU:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-MTU:CAPS">
+<ANCHOR id="NMDevice-struct" href="libnm-glib/NMDevice.html#NMDevice-struct">
+<ANCHOR id="NMDeviceClass" href="libnm-glib/NMDevice.html#NMDeviceClass">
<ANCHOR id="nm-device-new" href="libnm-glib/NMDevice.html#nm-device-new">
<ANCHOR id="nm-device-get-iface" href="libnm-glib/NMDevice.html#nm-device-get-iface">
<ANCHOR id="nm-device-get-ip-iface" href="libnm-glib/NMDevice.html#nm-device-get-ip-iface">
@@ -129,6 +209,8 @@
<ANCHOR id="nm-device-get-driver" href="libnm-glib/NMDevice.html#nm-device-get-driver">
<ANCHOR id="nm-device-get-driver-version" href="libnm-glib/NMDevice.html#nm-device-get-driver-version">
<ANCHOR id="nm-device-get-firmware-version" href="libnm-glib/NMDevice.html#nm-device-get-firmware-version">
+<ANCHOR id="nm-device-get-type-description" href="libnm-glib/NMDevice.html#nm-device-get-type-description">
+<ANCHOR id="nm-device-get-hw-address" href="libnm-glib/NMDevice.html#nm-device-get-hw-address">
<ANCHOR id="nm-device-get-capabilities" href="libnm-glib/NMDevice.html#nm-device-get-capabilities">
<ANCHOR id="nm-device-get-managed" href="libnm-glib/NMDevice.html#nm-device-get-managed">
<ANCHOR id="nm-device-get-autoconnect" href="libnm-glib/NMDevice.html#nm-device-get-autoconnect">
@@ -142,35 +224,18 @@
<ANCHOR id="nm-device-get-state-reason" href="libnm-glib/NMDevice.html#nm-device-get-state-reason">
<ANCHOR id="nm-device-get-active-connection" href="libnm-glib/NMDevice.html#nm-device-get-active-connection">
<ANCHOR id="nm-device-get-available-connections" href="libnm-glib/NMDevice.html#nm-device-get-available-connections">
+<ANCHOR id="nm-device-get-physical-port-id" href="libnm-glib/NMDevice.html#nm-device-get-physical-port-id">
+<ANCHOR id="nm-device-get-mtu" href="libnm-glib/NMDevice.html#nm-device-get-mtu">
<ANCHOR id="nm-device-get-product" href="libnm-glib/NMDevice.html#nm-device-get-product">
<ANCHOR id="nm-device-get-vendor" href="libnm-glib/NMDevice.html#nm-device-get-vendor">
+<ANCHOR id="nm-device-get-description" href="libnm-glib/NMDevice.html#nm-device-get-description">
+<ANCHOR id="nm-device-disambiguate-names" href="libnm-glib/NMDevice.html#nm-device-disambiguate-names">
<ANCHOR id="NMDeviceDeactivateFn" href="libnm-glib/NMDevice.html#NMDeviceDeactivateFn">
<ANCHOR id="nm-device-disconnect" href="libnm-glib/NMDevice.html#nm-device-disconnect">
<ANCHOR id="nm-device-filter-connections" href="libnm-glib/NMDevice.html#nm-device-filter-connections">
<ANCHOR id="nm-device-connection-valid" href="libnm-glib/NMDevice.html#nm-device-connection-valid">
<ANCHOR id="nm-device-connection-compatible" href="libnm-glib/NMDevice.html#nm-device-connection-compatible">
-<ANCHOR id="NMDevice.other_details" href="libnm-glib/NMDevice.html#NMDevice.other_details">
-<ANCHOR id="NM-DEVICE-DEVICE-TYPE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DEVICE-TYPE:CAPS">
-<ANCHOR id="NM-DEVICE-UDI:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-UDI:CAPS">
-<ANCHOR id="NM-DEVICE-INTERFACE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-INTERFACE:CAPS">
-<ANCHOR id="NM-DEVICE-IP-INTERFACE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-IP-INTERFACE:CAPS">
-<ANCHOR id="NM-DEVICE-DRIVER:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DRIVER:CAPS">
-<ANCHOR id="NM-DEVICE-DRIVER-VERSION:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DRIVER-VERSION:CAPS">
-<ANCHOR id="NM-DEVICE-FIRMWARE-VERSION:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-FIRMWARE-VERSION:CAPS">
-<ANCHOR id="NM-DEVICE-CAPABILITIES:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-CAPABILITIES:CAPS">
-<ANCHOR id="NM-DEVICE-MANAGED:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-MANAGED:CAPS">
-<ANCHOR id="NM-DEVICE-AUTOCONNECT:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-AUTOCONNECT:CAPS">
-<ANCHOR id="NM-DEVICE-FIRMWARE-MISSING:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-FIRMWARE-MISSING:CAPS">
-<ANCHOR id="NM-DEVICE-IP4-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-IP4-CONFIG:CAPS">
-<ANCHOR id="NM-DEVICE-DHCP4-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DHCP4-CONFIG:CAPS">
-<ANCHOR id="NM-DEVICE-IP6-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS">
-<ANCHOR id="NM-DEVICE-DHCP6-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS">
-<ANCHOR id="NM-DEVICE-STATE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-STATE:CAPS">
-<ANCHOR id="NM-DEVICE-STATE-REASON:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-STATE-REASON:CAPS">
-<ANCHOR id="NM-DEVICE-ACTIVE-CONNECTION:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS">
-<ANCHOR id="NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS">
-<ANCHOR id="NM-DEVICE-VENDOR:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-VENDOR:CAPS">
-<ANCHOR id="NM-DEVICE-PRODUCT:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-PRODUCT:CAPS">
+<ANCHOR id="nm-device-get-setting-type" href="libnm-glib/NMDevice.html#nm-device-get-setting-type">
<ANCHOR id="NMDevice.property-details" href="libnm-glib/NMDevice.html#NMDevice.property-details">
<ANCHOR id="NMDevice--active-connection" href="libnm-glib/NMDevice.html#NMDevice--active-connection">
<ANCHOR id="NMDevice--autoconnect" href="libnm-glib/NMDevice.html#NMDevice--autoconnect">
@@ -188,6 +253,8 @@
<ANCHOR id="NMDevice--ip4-config" href="libnm-glib/NMDevice.html#NMDevice--ip4-config">
<ANCHOR id="NMDevice--ip6-config" href="libnm-glib/NMDevice.html#NMDevice--ip6-config">
<ANCHOR id="NMDevice--managed" href="libnm-glib/NMDevice.html#NMDevice--managed">
+<ANCHOR id="NMDevice--mtu" href="libnm-glib/NMDevice.html#NMDevice--mtu">
+<ANCHOR id="NMDevice--physical-port-id" href="libnm-glib/NMDevice.html#NMDevice--physical-port-id">
<ANCHOR id="NMDevice--product" href="libnm-glib/NMDevice.html#NMDevice--product">
<ANCHOR id="NMDevice--state" href="libnm-glib/NMDevice.html#NMDevice--state">
<ANCHOR id="NMDevice--state-reason" href="libnm-glib/NMDevice.html#NMDevice--state-reason">
@@ -196,39 +263,63 @@
<ANCHOR id="NMDevice.signal-details" href="libnm-glib/NMDevice.html#NMDevice.signal-details">
<ANCHOR id="NMDevice-state-changed" href="libnm-glib/NMDevice.html#NMDevice-state-changed">
<ANCHOR id="NMDeviceEthernet" href="libnm-glib/NMDeviceEthernet.html">
-<ANCHOR id="NMDeviceEthernet.functions" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.functions">
-<ANCHOR id="NMDeviceEthernet.properties" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.properties">
-<ANCHOR id="NMDeviceEthernet.other" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.other">
+<ANCHOR id="NMDeviceEthernet.synopsis" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.synopsis">
<ANCHOR id="NMDeviceEthernet.object-hierarchy" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.object-hierarchy">
+<ANCHOR id="NMDeviceEthernet.implemented-interfaces" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.implemented-interfaces">
+<ANCHOR id="NMDeviceEthernet.properties" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.properties">
<ANCHOR id="NMDeviceEthernet.description" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.description">
-<ANCHOR id="NMDeviceEthernet.functions_details" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.functions_details">
-<ANCHOR id="nm-device-ethernet-error-quark" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-error-quark">
-<ANCHOR id="nm-device-ethernet-new" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-new">
-<ANCHOR id="nm-device-ethernet-get-hw-address" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-hw-address">
-<ANCHOR id="nm-device-ethernet-get-permanent-hw-address" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address">
-<ANCHOR id="nm-device-ethernet-get-speed" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-speed">
-<ANCHOR id="nm-device-ethernet-get-carrier" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-carrier">
-<ANCHOR id="NMDeviceEthernet.other_details" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.other_details">
+<ANCHOR id="NMDeviceEthernet.details" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.details">
<ANCHOR id="NMDeviceEthernetError" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernetError">
+<ANCHOR id="NM-DEVICE-ETHERNET-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-ETHERNET-ERROR-NOT-ETHERNET-CONNECTION:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-NOT-ETHERNET-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-ETHERNET-ERROR-INVALID-ETHERNET-CONNECTION:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-INVALID-ETHERNET-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-ETHERNET-ERROR-INVALID-DEVICE-MAC:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-INVALID-DEVICE-MAC:CAPS">
+<ANCHOR id="NM-DEVICE-ETHERNET-ERROR-MAC-MISMATCH:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-MAC-MISMATCH:CAPS">
<ANCHOR id="NM-DEVICE-ETHERNET-ERROR:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR:CAPS">
+<ANCHOR id="nm-device-ethernet-error-quark" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-error-quark">
<ANCHOR id="NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-ETHERNET-SPEED:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-SPEED:CAPS">
<ANCHOR id="NM-DEVICE-ETHERNET-CARRIER:CAPS" href="libnm-glib/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-CARRIER:CAPS">
+<ANCHOR id="NMDeviceEthernet-struct" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet-struct">
+<ANCHOR id="NMDeviceEthernetClass" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernetClass">
+<ANCHOR id="nm-device-ethernet-new" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-new">
+<ANCHOR id="nm-device-ethernet-get-hw-address" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-hw-address">
+<ANCHOR id="nm-device-ethernet-get-permanent-hw-address" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address">
+<ANCHOR id="nm-device-ethernet-get-speed" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-speed">
+<ANCHOR id="nm-device-ethernet-get-carrier" href="libnm-glib/NMDeviceEthernet.html#nm-device-ethernet-get-carrier">
<ANCHOR id="NMDeviceEthernet.property-details" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet.property-details">
<ANCHOR id="NMDeviceEthernet--carrier" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet--carrier">
<ANCHOR id="NMDeviceEthernet--hw-address" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet--hw-address">
<ANCHOR id="NMDeviceEthernet--perm-hw-address" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address">
<ANCHOR id="NMDeviceEthernet--speed" href="libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet--speed">
<ANCHOR id="NMDeviceWifi" href="libnm-glib/NMDeviceWifi.html">
-<ANCHOR id="NMDeviceWifi.functions" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.functions">
+<ANCHOR id="NMDeviceWifi.synopsis" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.synopsis">
+<ANCHOR id="NMDeviceWifi.object-hierarchy" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.object-hierarchy">
+<ANCHOR id="NMDeviceWifi.implemented-interfaces" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.implemented-interfaces">
<ANCHOR id="NMDeviceWifi.properties" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.properties">
<ANCHOR id="NMDeviceWifi.signals" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.signals">
-<ANCHOR id="NMDeviceWifi.other" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.other">
-<ANCHOR id="NMDeviceWifi.object-hierarchy" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.object-hierarchy">
<ANCHOR id="NMDeviceWifi.description" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.description">
-<ANCHOR id="NMDeviceWifi.functions_details" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.functions_details">
+<ANCHOR id="NMDeviceWifi.details" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.details">
+<ANCHOR id="NMDeviceWifiError" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifiError">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR-NOT-WIFI-CONNECTION:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-NOT-WIFI-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR-INVALID-WIFI-CONNECTION:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-INVALID-WIFI-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR-INVALID-DEVICE-MAC:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-INVALID-DEVICE-MAC:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR-MAC-MISMATCH:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-MAC-MISMATCH:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-WPA-CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-WPA-CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-RSN-CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-RSN-CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ERROR:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR:CAPS">
<ANCHOR id="nm-device-wifi-error-quark" href="libnm-glib/NMDeviceWifi.html#nm-device-wifi-error-quark">
+<ANCHOR id="NM-DEVICE-WIFI-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-MODE:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-MODE:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-BITRATE:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-BITRATE:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-CAPABILITIES:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-CAPABILITIES:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ACCESS-POINTS:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ACCESS-POINTS:CAPS">
+<ANCHOR id="NMDeviceWifi-struct" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi-struct">
+<ANCHOR id="NMDeviceWifiClass" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifiClass">
<ANCHOR id="nm-device-wifi-new" href="libnm-glib/NMDeviceWifi.html#nm-device-wifi-new">
<ANCHOR id="nm-device-wifi-get-hw-address" href="libnm-glib/NMDeviceWifi.html#nm-device-wifi-get-hw-address">
<ANCHOR id="nm-device-wifi-get-permanent-hw-address" href="libnm-glib/NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address">
@@ -240,16 +331,8 @@
<ANCHOR id="nm-device-wifi-get-access-points" href="libnm-glib/NMDeviceWifi.html#nm-device-wifi-get-access-points">
<ANCHOR id="NMDeviceWifiRequestScanFn" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifiRequestScanFn">
<ANCHOR id="nm-device-wifi-request-scan-simple" href="libnm-glib/NMDeviceWifi.html#nm-device-wifi-request-scan-simple">
-<ANCHOR id="NMDeviceWifi.other_details" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.other_details">
-<ANCHOR id="NMDeviceWifiError" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifiError">
-<ANCHOR id="NM-DEVICE-WIFI-ERROR:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR:CAPS">
-<ANCHOR id="NM-DEVICE-WIFI-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-HW-ADDRESS:CAPS">
-<ANCHOR id="NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS">
-<ANCHOR id="NM-DEVICE-WIFI-MODE:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-MODE:CAPS">
-<ANCHOR id="NM-DEVICE-WIFI-BITRATE:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-BITRATE:CAPS">
-<ANCHOR id="NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS">
-<ANCHOR id="NM-DEVICE-WIFI-CAPABILITIES:CAPS" href="libnm-glib/NMDeviceWifi.html#NM-DEVICE-WIFI-CAPABILITIES:CAPS">
<ANCHOR id="NMDeviceWifi.property-details" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi.property-details">
+<ANCHOR id="NMDeviceWifi--access-points" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi--access-points">
<ANCHOR id="NMDeviceWifi--active-access-point" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi--active-access-point">
<ANCHOR id="NMDeviceWifi--bitrate" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi--bitrate">
<ANCHOR id="NMDeviceWifi--hw-address" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi--hw-address">
@@ -260,54 +343,83 @@
<ANCHOR id="NMDeviceWifi-access-point-added" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi-access-point-added">
<ANCHOR id="NMDeviceWifi-access-point-removed" href="libnm-glib/NMDeviceWifi.html#NMDeviceWifi-access-point-removed">
<ANCHOR id="NMDeviceModem" href="libnm-glib/NMDeviceModem.html">
-<ANCHOR id="NMDeviceModem.functions" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.functions">
-<ANCHOR id="NMDeviceModem.properties" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.properties">
-<ANCHOR id="NMDeviceModem.other" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.other">
+<ANCHOR id="NMDeviceModem.synopsis" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.synopsis">
<ANCHOR id="NMDeviceModem.object-hierarchy" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.object-hierarchy">
+<ANCHOR id="NMDeviceModem.implemented-interfaces" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.implemented-interfaces">
+<ANCHOR id="NMDeviceModem.properties" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.properties">
<ANCHOR id="NMDeviceModem.description" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.description">
-<ANCHOR id="NMDeviceModem.functions_details" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.functions_details">
-<ANCHOR id="nm-device-modem-error-quark" href="libnm-glib/NMDeviceModem.html#nm-device-modem-error-quark">
-<ANCHOR id="nm-device-modem-get-modem-capabilities" href="libnm-glib/NMDeviceModem.html#nm-device-modem-get-modem-capabilities">
-<ANCHOR id="nm-device-modem-get-current-capabilities" href="libnm-glib/NMDeviceModem.html#nm-device-modem-get-current-capabilities">
-<ANCHOR id="NMDeviceModem.other_details" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.other_details">
+<ANCHOR id="NMDeviceModem.details" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.details">
<ANCHOR id="NMDeviceModemError" href="libnm-glib/NMDeviceModem.html#NMDeviceModemError">
+<ANCHOR id="NM-DEVICE-MODEM-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-ERROR-NOT-MODEM-CONNECTION:CAPS" href="libnm-glib/NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-NOT-MODEM-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-ERROR-INVALID-MODEM-CONNECTION:CAPS" href="libnm-glib/NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-INVALID-MODEM-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-ERROR-MISSING-DEVICE-CAPS" href="libnm-glib/NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-MISSING-DEVICE-CAPS">
<ANCHOR id="NM-DEVICE-MODEM-ERROR:CAPS" href="libnm-glib/NMDeviceModem.html#NM-DEVICE-MODEM-ERROR:CAPS">
+<ANCHOR id="nm-device-modem-error-quark" href="libnm-glib/NMDeviceModem.html#nm-device-modem-error-quark">
<ANCHOR id="NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS" href="libnm-glib/NMDeviceModem.html#NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS">
<ANCHOR id="NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS" href="libnm-glib/NMDeviceModem.html#NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS">
+<ANCHOR id="NMDeviceModem-struct" href="libnm-glib/NMDeviceModem.html#NMDeviceModem-struct">
+<ANCHOR id="NMDeviceModemClass" href="libnm-glib/NMDeviceModem.html#NMDeviceModemClass">
+<ANCHOR id="nm-device-modem-get-modem-capabilities" href="libnm-glib/NMDeviceModem.html#nm-device-modem-get-modem-capabilities">
+<ANCHOR id="nm-device-modem-get-current-capabilities" href="libnm-glib/NMDeviceModem.html#nm-device-modem-get-current-capabilities">
<ANCHOR id="NMDeviceModem.property-details" href="libnm-glib/NMDeviceModem.html#NMDeviceModem.property-details">
<ANCHOR id="NMDeviceModem--current-capabilities" href="libnm-glib/NMDeviceModem.html#NMDeviceModem--current-capabilities">
<ANCHOR id="NMDeviceModem--modem-capabilities" href="libnm-glib/NMDeviceModem.html#NMDeviceModem--modem-capabilities">
<ANCHOR id="NMDeviceBt" href="libnm-glib/NMDeviceBt.html">
-<ANCHOR id="NMDeviceBt.functions" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.functions">
-<ANCHOR id="NMDeviceBt.properties" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.properties">
-<ANCHOR id="NMDeviceBt.other" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.other">
+<ANCHOR id="NMDeviceBt.synopsis" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.synopsis">
<ANCHOR id="NMDeviceBt.object-hierarchy" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.object-hierarchy">
+<ANCHOR id="NMDeviceBt.implemented-interfaces" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.implemented-interfaces">
+<ANCHOR id="NMDeviceBt.properties" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.properties">
<ANCHOR id="NMDeviceBt.description" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.description">
-<ANCHOR id="NMDeviceBt.functions_details" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.functions_details">
-<ANCHOR id="nm-device-bt-error-quark" href="libnm-glib/NMDeviceBt.html#nm-device-bt-error-quark">
-<ANCHOR id="nm-device-bt-new" href="libnm-glib/NMDeviceBt.html#nm-device-bt-new">
-<ANCHOR id="nm-device-bt-get-hw-address" href="libnm-glib/NMDeviceBt.html#nm-device-bt-get-hw-address">
-<ANCHOR id="nm-device-bt-get-name" href="libnm-glib/NMDeviceBt.html#nm-device-bt-get-name">
-<ANCHOR id="nm-device-bt-get-capabilities" href="libnm-glib/NMDeviceBt.html#nm-device-bt-get-capabilities">
-<ANCHOR id="NMDeviceBt.other_details" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.other_details">
+<ANCHOR id="NMDeviceBt.details" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.details">
<ANCHOR id="NMDeviceBtError" href="libnm-glib/NMDeviceBt.html#NMDeviceBtError">
+<ANCHOR id="NM-DEVICE-BT-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-BT-ERROR-NOT-BT-CONNECTION:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-ERROR-NOT-BT-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-BT-ERROR-INVALID-BT-CONNECTION:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-ERROR-INVALID-BT-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-BT-ERROR-INVALID-DEVICE-MAC:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-ERROR-INVALID-DEVICE-MAC:CAPS">
+<ANCHOR id="NM-DEVICE-BT-ERROR-MAC-MISMATCH:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-ERROR-MAC-MISMATCH:CAPS">
+<ANCHOR id="NM-DEVICE-BT-ERROR-MISSING-DEVICE-CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-ERROR-MISSING-DEVICE-CAPS">
<ANCHOR id="NM-DEVICE-BT-ERROR:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-ERROR:CAPS">
+<ANCHOR id="nm-device-bt-error-quark" href="libnm-glib/NMDeviceBt.html#nm-device-bt-error-quark">
<ANCHOR id="NM-DEVICE-BT-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-BT-NAME:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-NAME:CAPS">
<ANCHOR id="NM-DEVICE-BT-CAPABILITIES:CAPS" href="libnm-glib/NMDeviceBt.html#NM-DEVICE-BT-CAPABILITIES:CAPS">
+<ANCHOR id="NMDeviceBt-struct" href="libnm-glib/NMDeviceBt.html#NMDeviceBt-struct">
+<ANCHOR id="NMDeviceBtClass" href="libnm-glib/NMDeviceBt.html#NMDeviceBtClass">
+<ANCHOR id="nm-device-bt-new" href="libnm-glib/NMDeviceBt.html#nm-device-bt-new">
+<ANCHOR id="nm-device-bt-get-hw-address" href="libnm-glib/NMDeviceBt.html#nm-device-bt-get-hw-address">
+<ANCHOR id="nm-device-bt-get-name" href="libnm-glib/NMDeviceBt.html#nm-device-bt-get-name">
+<ANCHOR id="nm-device-bt-get-capabilities" href="libnm-glib/NMDeviceBt.html#nm-device-bt-get-capabilities">
<ANCHOR id="NMDeviceBt.property-details" href="libnm-glib/NMDeviceBt.html#NMDeviceBt.property-details">
<ANCHOR id="NMDeviceBt--bt-capabilities" href="libnm-glib/NMDeviceBt.html#NMDeviceBt--bt-capabilities">
<ANCHOR id="NMDeviceBt--hw-address" href="libnm-glib/NMDeviceBt.html#NMDeviceBt--hw-address">
<ANCHOR id="NMDeviceBt--name" href="libnm-glib/NMDeviceBt.html#NMDeviceBt--name">
<ANCHOR id="NMDeviceWimax" href="libnm-glib/NMDeviceWimax.html">
-<ANCHOR id="NMDeviceWimax.functions" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.functions">
+<ANCHOR id="NMDeviceWimax.synopsis" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.synopsis">
+<ANCHOR id="NMDeviceWimax.object-hierarchy" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.object-hierarchy">
+<ANCHOR id="NMDeviceWimax.implemented-interfaces" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.implemented-interfaces">
<ANCHOR id="NMDeviceWimax.properties" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.properties">
<ANCHOR id="NMDeviceWimax.signals" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.signals">
-<ANCHOR id="NMDeviceWimax.other" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.other">
-<ANCHOR id="NMDeviceWimax.object-hierarchy" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.object-hierarchy">
<ANCHOR id="NMDeviceWimax.description" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.description">
-<ANCHOR id="NMDeviceWimax.functions_details" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.functions_details">
+<ANCHOR id="NMDeviceWimax.details" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.details">
+<ANCHOR id="NMDeviceWimaxError" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimaxError">
+<ANCHOR id="NM-DEVICE-WIMAX-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-ERROR-NOT-WIMAX-CONNECTION:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-NOT-WIMAX-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-ERROR-INVALID-WIMAX-CONNECTION:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-INVALID-WIMAX-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-ERROR-INVALID-DEVICE-MAC:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-INVALID-DEVICE-MAC:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-ERROR-MAC-MISMATCH:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-MAC-MISMATCH:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-ERROR:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR:CAPS">
<ANCHOR id="nm-device-wimax-error-quark" href="libnm-glib/NMDeviceWimax.html#nm-device-wimax-error-quark">
+<ANCHOR id="NM-DEVICE-WIMAX-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-RSSI:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-RSSI:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-CINR:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-CINR:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-TX-POWER:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-TX-POWER:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-BSID:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-BSID:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-NSPS:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-NSPS:CAPS">
+<ANCHOR id="NMDeviceWimax-struct" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax-struct">
+<ANCHOR id="NMDeviceWimaxClass" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimaxClass">
<ANCHOR id="nm-device-wimax-new" href="libnm-glib/NMDeviceWimax.html#nm-device-wimax-new">
<ANCHOR id="nm-device-wimax-get-hw-address" href="libnm-glib/NMDeviceWimax.html#nm-device-wimax-get-hw-address">
<ANCHOR id="nm-device-wimax-get-active-nsp" href="libnm-glib/NMDeviceWimax.html#nm-device-wimax-get-active-nsp">
@@ -318,179 +430,267 @@
<ANCHOR id="nm-device-wimax-get-cinr" href="libnm-glib/NMDeviceWimax.html#nm-device-wimax-get-cinr">
<ANCHOR id="nm-device-wimax-get-tx-power" href="libnm-glib/NMDeviceWimax.html#nm-device-wimax-get-tx-power">
<ANCHOR id="nm-device-wimax-get-bsid" href="libnm-glib/NMDeviceWimax.html#nm-device-wimax-get-bsid">
-<ANCHOR id="NMDeviceWimax.other_details" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.other_details">
-<ANCHOR id="NMDeviceWimaxError" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimaxError">
-<ANCHOR id="NM-DEVICE-WIMAX-ERROR:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR:CAPS">
-<ANCHOR id="NM-DEVICE-WIMAX-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-HW-ADDRESS:CAPS">
-<ANCHOR id="NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS">
-<ANCHOR id="NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS">
-<ANCHOR id="NM-DEVICE-WIMAX-RSSI:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-RSSI:CAPS">
-<ANCHOR id="NM-DEVICE-WIMAX-CINR:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-CINR:CAPS">
-<ANCHOR id="NM-DEVICE-WIMAX-TX-POWER:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-TX-POWER:CAPS">
-<ANCHOR id="NM-DEVICE-WIMAX-BSID:CAPS" href="libnm-glib/NMDeviceWimax.html#NM-DEVICE-WIMAX-BSID:CAPS">
<ANCHOR id="NMDeviceWimax.property-details" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.property-details">
<ANCHOR id="NMDeviceWimax--active-nsp" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--active-nsp">
<ANCHOR id="NMDeviceWimax--bsid" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--bsid">
<ANCHOR id="NMDeviceWimax--center-frequency" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--center-frequency">
<ANCHOR id="NMDeviceWimax--cinr" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--cinr">
<ANCHOR id="NMDeviceWimax--hw-address" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--hw-address">
+<ANCHOR id="NMDeviceWimax--nsps" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--nsps">
<ANCHOR id="NMDeviceWimax--rssi" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--rssi">
<ANCHOR id="NMDeviceWimax--tx-power" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax--tx-power">
<ANCHOR id="NMDeviceWimax.signal-details" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax.signal-details">
<ANCHOR id="NMDeviceWimax-nsp-added" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax-nsp-added">
<ANCHOR id="NMDeviceWimax-nsp-removed" href="libnm-glib/NMDeviceWimax.html#NMDeviceWimax-nsp-removed">
<ANCHOR id="NMDeviceAdsl" href="libnm-glib/NMDeviceAdsl.html">
-<ANCHOR id="NMDeviceAdsl.functions" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.functions">
-<ANCHOR id="NMDeviceAdsl.properties" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.properties">
-<ANCHOR id="NMDeviceAdsl.other" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.other">
+<ANCHOR id="NMDeviceAdsl.synopsis" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.synopsis">
<ANCHOR id="NMDeviceAdsl.object-hierarchy" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.object-hierarchy">
+<ANCHOR id="NMDeviceAdsl.implemented-interfaces" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.implemented-interfaces">
+<ANCHOR id="NMDeviceAdsl.properties" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.properties">
<ANCHOR id="NMDeviceAdsl.description" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.description">
-<ANCHOR id="NMDeviceAdsl.functions_details" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.functions_details">
-<ANCHOR id="nm-device-adsl-error-quark" href="libnm-glib/NMDeviceAdsl.html#nm-device-adsl-error-quark">
-<ANCHOR id="nm-device-adsl-new" href="libnm-glib/NMDeviceAdsl.html#nm-device-adsl-new">
-<ANCHOR id="nm-device-adsl-get-carrier" href="libnm-glib/NMDeviceAdsl.html#nm-device-adsl-get-carrier">
-<ANCHOR id="NMDeviceAdsl.other_details" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.other_details">
+<ANCHOR id="NMDeviceAdsl.details" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.details">
<ANCHOR id="NMDeviceAdslError" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdslError">
+<ANCHOR id="NM-DEVICE-ADSL-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-ADSL-ERROR-NOT-ADSL-CONNECTION:CAPS" href="libnm-glib/NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR-NOT-ADSL-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-ADSL-ERROR-INVALID-ADSL-CONNECTION:CAPS" href="libnm-glib/NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR-INVALID-ADSL-CONNECTION:CAPS">
<ANCHOR id="NM-DEVICE-ADSL-ERROR:CAPS" href="libnm-glib/NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR:CAPS">
+<ANCHOR id="nm-device-adsl-error-quark" href="libnm-glib/NMDeviceAdsl.html#nm-device-adsl-error-quark">
<ANCHOR id="NM-DEVICE-ADSL-CARRIER:CAPS" href="libnm-glib/NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS">
+<ANCHOR id="NMDeviceAdsl-struct" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl-struct">
+<ANCHOR id="NMDeviceAdslClass" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdslClass">
+<ANCHOR id="nm-device-adsl-new" href="libnm-glib/NMDeviceAdsl.html#nm-device-adsl-new">
+<ANCHOR id="nm-device-adsl-get-carrier" href="libnm-glib/NMDeviceAdsl.html#nm-device-adsl-get-carrier">
<ANCHOR id="NMDeviceAdsl.property-details" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl.property-details">
<ANCHOR id="NMDeviceAdsl--carrier" href="libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl--carrier">
<ANCHOR id="NMDeviceBond" href="libnm-glib/NMDeviceBond.html">
-<ANCHOR id="NMDeviceBond.functions" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.functions">
-<ANCHOR id="NMDeviceBond.properties" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.properties">
-<ANCHOR id="NMDeviceBond.other" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.other">
+<ANCHOR id="NMDeviceBond.synopsis" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.synopsis">
<ANCHOR id="NMDeviceBond.object-hierarchy" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.object-hierarchy">
+<ANCHOR id="NMDeviceBond.implemented-interfaces" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.implemented-interfaces">
+<ANCHOR id="NMDeviceBond.properties" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.properties">
<ANCHOR id="NMDeviceBond.description" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.description">
-<ANCHOR id="NMDeviceBond.functions_details" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.functions_details">
-<ANCHOR id="nm-device-bond-error-quark" href="libnm-glib/NMDeviceBond.html#nm-device-bond-error-quark">
-<ANCHOR id="nm-device-bond-new" href="libnm-glib/NMDeviceBond.html#nm-device-bond-new">
-<ANCHOR id="nm-device-bond-get-hw-address" href="libnm-glib/NMDeviceBond.html#nm-device-bond-get-hw-address">
-<ANCHOR id="nm-device-bond-get-carrier" href="libnm-glib/NMDeviceBond.html#nm-device-bond-get-carrier">
-<ANCHOR id="nm-device-bond-get-slaves" href="libnm-glib/NMDeviceBond.html#nm-device-bond-get-slaves">
-<ANCHOR id="NMDeviceBond.other_details" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.other_details">
+<ANCHOR id="NMDeviceBond.details" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.details">
<ANCHOR id="NMDeviceBondError" href="libnm-glib/NMDeviceBond.html#NMDeviceBondError">
+<ANCHOR id="NM-DEVICE-BOND-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-BOND-ERROR-NOT-BOND-CONNECTION:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-ERROR-NOT-BOND-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-BOND-ERROR-INVALID-BOND-CONNECTION:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-ERROR-INVALID-BOND-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-BOND-ERROR-INTERFACE-MISMATCH:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-ERROR-INTERFACE-MISMATCH:CAPS">
<ANCHOR id="NM-DEVICE-BOND-ERROR:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-ERROR:CAPS">
+<ANCHOR id="nm-device-bond-error-quark" href="libnm-glib/NMDeviceBond.html#nm-device-bond-error-quark">
<ANCHOR id="NM-DEVICE-BOND-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-BOND-CARRIER:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-CARRIER:CAPS">
<ANCHOR id="NM-DEVICE-BOND-SLAVES:CAPS" href="libnm-glib/NMDeviceBond.html#NM-DEVICE-BOND-SLAVES:CAPS">
+<ANCHOR id="NMDeviceBond-struct" href="libnm-glib/NMDeviceBond.html#NMDeviceBond-struct">
+<ANCHOR id="NMDeviceBondClass" href="libnm-glib/NMDeviceBond.html#NMDeviceBondClass">
+<ANCHOR id="nm-device-bond-new" href="libnm-glib/NMDeviceBond.html#nm-device-bond-new">
+<ANCHOR id="nm-device-bond-get-hw-address" href="libnm-glib/NMDeviceBond.html#nm-device-bond-get-hw-address">
+<ANCHOR id="nm-device-bond-get-carrier" href="libnm-glib/NMDeviceBond.html#nm-device-bond-get-carrier">
+<ANCHOR id="nm-device-bond-get-slaves" href="libnm-glib/NMDeviceBond.html#nm-device-bond-get-slaves">
<ANCHOR id="NMDeviceBond.property-details" href="libnm-glib/NMDeviceBond.html#NMDeviceBond.property-details">
<ANCHOR id="NMDeviceBond--carrier" href="libnm-glib/NMDeviceBond.html#NMDeviceBond--carrier">
<ANCHOR id="NMDeviceBond--hw-address" href="libnm-glib/NMDeviceBond.html#NMDeviceBond--hw-address">
<ANCHOR id="NMDeviceBond--slaves" href="libnm-glib/NMDeviceBond.html#NMDeviceBond--slaves">
<ANCHOR id="NMDeviceBridge" href="libnm-glib/NMDeviceBridge.html">
-<ANCHOR id="NMDeviceBridge.functions" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.functions">
-<ANCHOR id="NMDeviceBridge.properties" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.properties">
-<ANCHOR id="NMDeviceBridge.other" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.other">
+<ANCHOR id="NMDeviceBridge.synopsis" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.synopsis">
<ANCHOR id="NMDeviceBridge.object-hierarchy" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.object-hierarchy">
+<ANCHOR id="NMDeviceBridge.implemented-interfaces" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.implemented-interfaces">
+<ANCHOR id="NMDeviceBridge.properties" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.properties">
<ANCHOR id="NMDeviceBridge.description" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.description">
-<ANCHOR id="NMDeviceBridge.functions_details" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.functions_details">
-<ANCHOR id="nm-device-bridge-error-quark" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-error-quark">
-<ANCHOR id="nm-device-bridge-new" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-new">
-<ANCHOR id="nm-device-bridge-get-hw-address" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-get-hw-address">
-<ANCHOR id="nm-device-bridge-get-carrier" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-get-carrier">
-<ANCHOR id="nm-device-bridge-get-slaves" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-get-slaves">
-<ANCHOR id="NMDeviceBridge.other_details" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.other_details">
+<ANCHOR id="NMDeviceBridge.details" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.details">
<ANCHOR id="NMDeviceBridgeError" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridgeError">
+<ANCHOR id="NM-DEVICE-BRIDGE-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-BRIDGE-ERROR-NOT-BRIDGE-CONNECTION:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-NOT-BRIDGE-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-BRIDGE-ERROR-INVALID-BRIDGE-CONNECTION:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-INVALID-BRIDGE-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-BRIDGE-ERROR-INTERFACE-MISMATCH:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-INTERFACE-MISMATCH:CAPS">
<ANCHOR id="NM-DEVICE-BRIDGE-ERROR:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR:CAPS">
+<ANCHOR id="nm-device-bridge-error-quark" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-error-quark">
<ANCHOR id="NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-BRIDGE-CARRIER:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-CARRIER:CAPS">
<ANCHOR id="NM-DEVICE-BRIDGE-SLAVES:CAPS" href="libnm-glib/NMDeviceBridge.html#NM-DEVICE-BRIDGE-SLAVES:CAPS">
+<ANCHOR id="NMDeviceBridge-struct" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge-struct">
+<ANCHOR id="NMDeviceBridgeClass" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridgeClass">
+<ANCHOR id="nm-device-bridge-new" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-new">
+<ANCHOR id="nm-device-bridge-get-hw-address" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-get-hw-address">
+<ANCHOR id="nm-device-bridge-get-carrier" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-get-carrier">
+<ANCHOR id="nm-device-bridge-get-slaves" href="libnm-glib/NMDeviceBridge.html#nm-device-bridge-get-slaves">
<ANCHOR id="NMDeviceBridge.property-details" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge.property-details">
<ANCHOR id="NMDeviceBridge--carrier" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge--carrier">
<ANCHOR id="NMDeviceBridge--hw-address" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge--hw-address">
<ANCHOR id="NMDeviceBridge--slaves" href="libnm-glib/NMDeviceBridge.html#NMDeviceBridge--slaves">
+<ANCHOR id="NMDeviceTeam" href="libnm-glib/NMDeviceTeam.html">
+<ANCHOR id="NMDeviceTeam.synopsis" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam.synopsis">
+<ANCHOR id="NMDeviceTeam.object-hierarchy" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam.object-hierarchy">
+<ANCHOR id="NMDeviceTeam.implemented-interfaces" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam.implemented-interfaces">
+<ANCHOR id="NMDeviceTeam.properties" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam.properties">
+<ANCHOR id="NMDeviceTeam.description" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam.description">
+<ANCHOR id="NMDeviceTeam.details" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam.details">
+<ANCHOR id="NMDeviceTeamError" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeamError">
+<ANCHOR id="NM-DEVICE-TEAM-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-ERROR-NOT-TEAM-CONNECTION:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-NOT-TEAM-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-ERROR-INVALID-TEAM-CONNECTION:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-INVALID-TEAM-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-ERROR-INTERFACE-MISMATCH:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-INTERFACE-MISMATCH:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-ERROR:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR:CAPS">
+<ANCHOR id="nm-device-team-error-quark" href="libnm-glib/NMDeviceTeam.html#nm-device-team-error-quark">
+<ANCHOR id="NM-DEVICE-TEAM-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-CARRIER:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-SLAVES:CAPS" href="libnm-glib/NMDeviceTeam.html#NM-DEVICE-TEAM-SLAVES:CAPS">
+<ANCHOR id="NMDeviceTeam-struct" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam-struct">
+<ANCHOR id="NMDeviceTeamClass" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeamClass">
+<ANCHOR id="nm-device-team-new" href="libnm-glib/NMDeviceTeam.html#nm-device-team-new">
+<ANCHOR id="nm-device-team-get-hw-address" href="libnm-glib/NMDeviceTeam.html#nm-device-team-get-hw-address">
+<ANCHOR id="nm-device-team-get-carrier" href="libnm-glib/NMDeviceTeam.html#nm-device-team-get-carrier">
+<ANCHOR id="nm-device-team-get-slaves" href="libnm-glib/NMDeviceTeam.html#nm-device-team-get-slaves">
+<ANCHOR id="NMDeviceTeam.property-details" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam.property-details">
+<ANCHOR id="NMDeviceTeam--carrier" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam--carrier">
+<ANCHOR id="NMDeviceTeam--hw-address" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam--hw-address">
+<ANCHOR id="NMDeviceTeam--slaves" href="libnm-glib/NMDeviceTeam.html#NMDeviceTeam--slaves">
+<ANCHOR id="NMDeviceGeneric" href="libnm-glib/NMDeviceGeneric.html">
+<ANCHOR id="NMDeviceGeneric.synopsis" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric.synopsis">
+<ANCHOR id="NMDeviceGeneric.object-hierarchy" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric.object-hierarchy">
+<ANCHOR id="NMDeviceGeneric.implemented-interfaces" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric.implemented-interfaces">
+<ANCHOR id="NMDeviceGeneric.properties" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric.properties">
+<ANCHOR id="NMDeviceGeneric.description" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric.description">
+<ANCHOR id="NMDeviceGeneric.details" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric.details">
+<ANCHOR id="NMDeviceGenericError" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGenericError">
+<ANCHOR id="NM-DEVICE-GENERIC-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-GENERIC-ERROR-NOT-GENERIC-CONNECTION:CAPS" href="libnm-glib/NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR-NOT-GENERIC-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-GENERIC-ERROR-MISSING-INTERFACE-NAME:CAPS" href="libnm-glib/NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR-MISSING-INTERFACE-NAME:CAPS">
+<ANCHOR id="NM-DEVICE-GENERIC-ERROR:CAPS" href="libnm-glib/NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR:CAPS">
+<ANCHOR id="nm-device-generic-error-quark" href="libnm-glib/NMDeviceGeneric.html#nm-device-generic-error-quark">
+<ANCHOR id="NM-DEVICE-GENERIC-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceGeneric.html#NM-DEVICE-GENERIC-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS" href="libnm-glib/NMDeviceGeneric.html#NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS">
+<ANCHOR id="NMDeviceGeneric-struct" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric-struct">
+<ANCHOR id="NMDeviceGenericClass" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGenericClass">
+<ANCHOR id="nm-device-generic-new" href="libnm-glib/NMDeviceGeneric.html#nm-device-generic-new">
+<ANCHOR id="nm-device-generic-get-hw-address" href="libnm-glib/NMDeviceGeneric.html#nm-device-generic-get-hw-address">
+<ANCHOR id="NMDeviceGeneric.property-details" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric.property-details">
+<ANCHOR id="NMDeviceGeneric--hw-address" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric--hw-address">
+<ANCHOR id="NMDeviceGeneric--type-description" href="libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric--type-description">
<ANCHOR id="NMDeviceInfiniband" href="libnm-glib/NMDeviceInfiniband.html">
-<ANCHOR id="NMDeviceInfiniband.functions" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.functions">
-<ANCHOR id="NMDeviceInfiniband.properties" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.properties">
-<ANCHOR id="NMDeviceInfiniband.other" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.other">
+<ANCHOR id="NMDeviceInfiniband.synopsis" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.synopsis">
<ANCHOR id="NMDeviceInfiniband.object-hierarchy" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.object-hierarchy">
+<ANCHOR id="NMDeviceInfiniband.implemented-interfaces" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.implemented-interfaces">
+<ANCHOR id="NMDeviceInfiniband.properties" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.properties">
<ANCHOR id="NMDeviceInfiniband.description" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.description">
-<ANCHOR id="NMDeviceInfiniband.functions_details" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.functions_details">
-<ANCHOR id="nm-device-infiniband-error-quark" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-error-quark">
-<ANCHOR id="nm-device-infiniband-new" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-new">
-<ANCHOR id="nm-device-infiniband-get-hw-address" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address">
-<ANCHOR id="nm-device-infiniband-get-carrier" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-get-carrier">
-<ANCHOR id="NMDeviceInfiniband.other_details" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.other_details">
+<ANCHOR id="NMDeviceInfiniband.details" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.details">
<ANCHOR id="NMDeviceInfinibandError" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfinibandError">
+<ANCHOR id="NM-DEVICE-INFINIBAND-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-INFINIBAND-ERROR-NOT-INFINIBAND-CONNECTION:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-NOT-INFINIBAND-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-INFINIBAND-ERROR-INVALID-INFINIBAND-CONNECTION:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-INVALID-INFINIBAND-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-INFINIBAND-ERROR-INVALID-DEVICE-MAC:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-INVALID-DEVICE-MAC:CAPS">
+<ANCHOR id="NM-DEVICE-INFINIBAND-ERROR-MAC-MISMATCH:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-MAC-MISMATCH:CAPS">
<ANCHOR id="NM-DEVICE-INFINIBAND-ERROR:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR:CAPS">
+<ANCHOR id="nm-device-infiniband-error-quark" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-error-quark">
<ANCHOR id="NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-INFINIBAND-CARRIER:CAPS" href="libnm-glib/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-CARRIER:CAPS">
+<ANCHOR id="NMDeviceInfiniband-struct" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband-struct">
+<ANCHOR id="NMDeviceInfinibandClass" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfinibandClass">
+<ANCHOR id="nm-device-infiniband-new" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-new">
+<ANCHOR id="nm-device-infiniband-get-hw-address" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address">
+<ANCHOR id="nm-device-infiniband-get-carrier" href="libnm-glib/NMDeviceInfiniband.html#nm-device-infiniband-get-carrier">
<ANCHOR id="NMDeviceInfiniband.property-details" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband.property-details">
<ANCHOR id="NMDeviceInfiniband--carrier" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband--carrier">
<ANCHOR id="NMDeviceInfiniband--hw-address" href="libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address">
<ANCHOR id="NMDeviceVlan" href="libnm-glib/NMDeviceVlan.html">
-<ANCHOR id="NMDeviceVlan.functions" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.functions">
-<ANCHOR id="NMDeviceVlan.properties" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.properties">
-<ANCHOR id="NMDeviceVlan.other" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.other">
+<ANCHOR id="NMDeviceVlan.synopsis" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.synopsis">
<ANCHOR id="NMDeviceVlan.object-hierarchy" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.object-hierarchy">
+<ANCHOR id="NMDeviceVlan.implemented-interfaces" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.implemented-interfaces">
+<ANCHOR id="NMDeviceVlan.properties" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.properties">
<ANCHOR id="NMDeviceVlan.description" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.description">
-<ANCHOR id="NMDeviceVlan.functions_details" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.functions_details">
-<ANCHOR id="nm-device-vlan-error-quark" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-error-quark">
-<ANCHOR id="nm-device-vlan-new" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-new">
-<ANCHOR id="nm-device-vlan-get-hw-address" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-get-hw-address">
-<ANCHOR id="nm-device-vlan-get-carrier" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-get-carrier">
-<ANCHOR id="nm-device-vlan-get-vlan-id" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-get-vlan-id">
-<ANCHOR id="NMDeviceVlan.other_details" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.other_details">
+<ANCHOR id="NMDeviceVlan.details" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.details">
<ANCHOR id="NMDeviceVlanError" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlanError">
+<ANCHOR id="NM-DEVICE-VLAN-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-ERROR-NOT-VLAN-CONNECTION:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-NOT-VLAN-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-ERROR-INVALID-VLAN-CONNECTION:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-INVALID-VLAN-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-ERROR-ID-MISMATCH:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-ID-MISMATCH:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-ERROR-INTERFACE-MISMATCH:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-INTERFACE-MISMATCH:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-ERROR-MAC-MISMATCH:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-MAC-MISMATCH:CAPS">
<ANCHOR id="NM-DEVICE-VLAN-ERROR:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR:CAPS">
+<ANCHOR id="nm-device-vlan-error-quark" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-error-quark">
<ANCHOR id="NM-DEVICE-VLAN-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-VLAN-CARRIER:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-CARRIER:CAPS">
<ANCHOR id="NM-DEVICE-VLAN-VLAN-ID:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS">
+<ANCHOR id="NMDeviceVlan-struct" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan-struct">
+<ANCHOR id="NMDeviceVlanClass" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlanClass">
+<ANCHOR id="nm-device-vlan-new" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-new">
+<ANCHOR id="nm-device-vlan-get-hw-address" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-get-hw-address">
+<ANCHOR id="nm-device-vlan-get-carrier" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-get-carrier">
+<ANCHOR id="nm-device-vlan-get-vlan-id" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-get-vlan-id">
<ANCHOR id="NMDeviceVlan.property-details" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan.property-details">
<ANCHOR id="NMDeviceVlan--carrier" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan--carrier">
<ANCHOR id="NMDeviceVlan--hw-address" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan--hw-address">
<ANCHOR id="NMDeviceVlan--vlan-id" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan--vlan-id">
<ANCHOR id="NMDeviceOlpcMesh" href="libnm-glib/NMDeviceOlpcMesh.html">
-<ANCHOR id="NMDeviceOlpcMesh.functions" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.functions">
-<ANCHOR id="NMDeviceOlpcMesh.properties" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.properties">
-<ANCHOR id="NMDeviceOlpcMesh.other" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.other">
+<ANCHOR id="NMDeviceOlpcMesh.synopsis" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.synopsis">
<ANCHOR id="NMDeviceOlpcMesh.object-hierarchy" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.object-hierarchy">
+<ANCHOR id="NMDeviceOlpcMesh.implemented-interfaces" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.implemented-interfaces">
+<ANCHOR id="NMDeviceOlpcMesh.properties" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.properties">
<ANCHOR id="NMDeviceOlpcMesh.description" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.description">
-<ANCHOR id="NMDeviceOlpcMesh.functions_details" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.functions_details">
-<ANCHOR id="nm-device-olpc-mesh-error-quark" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark">
-<ANCHOR id="nm-device-olpc-mesh-new" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new">
-<ANCHOR id="nm-device-olpc-mesh-get-hw-address" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address">
-<ANCHOR id="nm-device-olpc-mesh-get-companion" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion">
-<ANCHOR id="nm-device-olpc-mesh-get-active-channel" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel">
-<ANCHOR id="NMDeviceOlpcMesh.other_details" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.other_details">
+<ANCHOR id="NMDeviceOlpcMesh.details" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.details">
<ANCHOR id="NMDeviceOlpcMeshError" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMeshError">
+<ANCHOR id="NM-DEVICE-OLPC-MESH-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-OLPC-MESH-ERROR-NOT-OLPC-MESH-CONNECTION:CAPS" href="libnm-glib/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR-NOT-OLPC-MESH-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-OLPC-MESH-ERROR-INVALID-OLPC-MESH-CONNECTION:CAPS" href="libnm-glib/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR-INVALID-OLPC-MESH-CONNECTION:CAPS">
<ANCHOR id="NM-DEVICE-OLPC-MESH-ERROR:CAPS" href="libnm-glib/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR:CAPS">
+<ANCHOR id="nm-device-olpc-mesh-error-quark" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark">
<ANCHOR id="NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS" href="libnm-glib/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS">
<ANCHOR id="NM-DEVICE-OLPC-MESH-COMPANION:CAPS" href="libnm-glib/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-COMPANION:CAPS">
<ANCHOR id="NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS" href="libnm-glib/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS">
+<ANCHOR id="NMDeviceOlpcMesh-struct" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct">
+<ANCHOR id="NMDeviceOlpcMeshClass" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMeshClass">
+<ANCHOR id="nm-device-olpc-mesh-new" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new">
+<ANCHOR id="nm-device-olpc-mesh-get-hw-address" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address">
+<ANCHOR id="nm-device-olpc-mesh-get-companion" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion">
+<ANCHOR id="nm-device-olpc-mesh-get-active-channel" href="libnm-glib/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel">
<ANCHOR id="NMDeviceOlpcMesh.property-details" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.property-details">
<ANCHOR id="NMDeviceOlpcMesh--active-channel" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel">
<ANCHOR id="NMDeviceOlpcMesh--companion" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion">
<ANCHOR id="NMDeviceOlpcMesh--hw-address" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address">
<ANCHOR id="NMWimaxNsp" href="libnm-glib/NMWimaxNsp.html">
-<ANCHOR id="NMWimaxNsp.functions" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.functions">
-<ANCHOR id="NMWimaxNsp.properties" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.properties">
-<ANCHOR id="NMWimaxNsp.other" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.other">
+<ANCHOR id="NMWimaxNsp.synopsis" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.synopsis">
<ANCHOR id="NMWimaxNsp.object-hierarchy" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.object-hierarchy">
+<ANCHOR id="NMWimaxNsp.implemented-interfaces" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.implemented-interfaces">
+<ANCHOR id="NMWimaxNsp.properties" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.properties">
<ANCHOR id="NMWimaxNsp.description" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.description">
-<ANCHOR id="NMWimaxNsp.functions_details" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.functions_details">
+<ANCHOR id="NMWimaxNsp.details" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.details">
+<ANCHOR id="NM-WIMAX-NSP-NAME:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NAME:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE:CAPS">
+<ANCHOR id="NMWimaxNspNetworkType" href="libnm-glib/NMWimaxNsp.html#NMWimaxNspNetworkType">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-UNKNOWN:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-UNKNOWN:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-HOME:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-HOME:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-PARTNER:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-PARTNER:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-ROAMING-PARTNER:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-ROAMING-PARTNER:CAPS">
+<ANCHOR id="NMWimaxNsp-struct" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp-struct">
+<ANCHOR id="NMWimaxNspClass" href="libnm-glib/NMWimaxNsp.html#NMWimaxNspClass">
<ANCHOR id="nm-wimax-nsp-new" href="libnm-glib/NMWimaxNsp.html#nm-wimax-nsp-new">
<ANCHOR id="nm-wimax-nsp-get-name" href="libnm-glib/NMWimaxNsp.html#nm-wimax-nsp-get-name">
<ANCHOR id="nm-wimax-nsp-get-signal-quality" href="libnm-glib/NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality">
<ANCHOR id="nm-wimax-nsp-get-network-type" href="libnm-glib/NMWimaxNsp.html#nm-wimax-nsp-get-network-type">
<ANCHOR id="nm-wimax-nsp-filter-connections" href="libnm-glib/NMWimaxNsp.html#nm-wimax-nsp-filter-connections">
<ANCHOR id="nm-wimax-nsp-connection-valid" href="libnm-glib/NMWimaxNsp.html#nm-wimax-nsp-connection-valid">
-<ANCHOR id="NMWimaxNsp.other_details" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.other_details">
-<ANCHOR id="NM-WIMAX-NSP-NAME:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NAME:CAPS">
-<ANCHOR id="NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS">
-<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE:CAPS" href="libnm-glib/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE:CAPS">
-<ANCHOR id="NMWimaxNspNetworkType" href="libnm-glib/NMWimaxNsp.html#NMWimaxNspNetworkType">
<ANCHOR id="NMWimaxNsp.property-details" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp.property-details">
<ANCHOR id="NMWimaxNsp--name" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp--name">
<ANCHOR id="NMWimaxNsp--network-type" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp--network-type">
<ANCHOR id="NMWimaxNsp--signal-quality" href="libnm-glib/NMWimaxNsp.html#NMWimaxNsp--signal-quality">
<ANCHOR id="NMAccessPoint" href="libnm-glib/NMAccessPoint.html">
-<ANCHOR id="NMAccessPoint.functions" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.functions">
-<ANCHOR id="NMAccessPoint.properties" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.properties">
-<ANCHOR id="NMAccessPoint.other" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.other">
+<ANCHOR id="NMAccessPoint.synopsis" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.synopsis">
<ANCHOR id="NMAccessPoint.object-hierarchy" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.object-hierarchy">
+<ANCHOR id="NMAccessPoint.implemented-interfaces" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.implemented-interfaces">
+<ANCHOR id="NMAccessPoint.properties" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.properties">
<ANCHOR id="NMAccessPoint.description" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.description">
-<ANCHOR id="NMAccessPoint.functions_details" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.functions_details">
+<ANCHOR id="NMAccessPoint.details" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.details">
+<ANCHOR id="NM-ACCESS-POINT-FLAGS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-FLAGS:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-WPA-FLAGS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-WPA-FLAGS:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-RSN-FLAGS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-RSN-FLAGS:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-SSID:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-SSID:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-BSSID:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-BSSID:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-FREQUENCY:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-FREQUENCY:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-MODE:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-MODE:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-MAX-BITRATE:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-MAX-BITRATE:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-STRENGTH:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-STRENGTH:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-HW-ADDRESS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-HW-ADDRESS:CAPS">
+<ANCHOR id="NMAccessPoint-struct" href="libnm-glib/NMAccessPoint.html#NMAccessPoint-struct">
+<ANCHOR id="NMAccessPointClass" href="libnm-glib/NMAccessPoint.html#NMAccessPointClass">
<ANCHOR id="nm-access-point-new" href="libnm-glib/NMAccessPoint.html#nm-access-point-new">
<ANCHOR id="nm-access-point-get-flags" href="libnm-glib/NMAccessPoint.html#nm-access-point-get-flags">
<ANCHOR id="nm-access-point-get-wpa-flags" href="libnm-glib/NMAccessPoint.html#nm-access-point-get-wpa-flags">
@@ -504,17 +704,6 @@
<ANCHOR id="nm-access-point-filter-connections" href="libnm-glib/NMAccessPoint.html#nm-access-point-filter-connections">
<ANCHOR id="nm-access-point-connection-valid" href="libnm-glib/NMAccessPoint.html#nm-access-point-connection-valid">
<ANCHOR id="nm-access-point-get-hw-address" href="libnm-glib/NMAccessPoint.html#nm-access-point-get-hw-address">
-<ANCHOR id="NMAccessPoint.other_details" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.other_details">
-<ANCHOR id="NM-ACCESS-POINT-FLAGS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-FLAGS:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-WPA-FLAGS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-WPA-FLAGS:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-RSN-FLAGS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-RSN-FLAGS:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-SSID:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-SSID:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-BSSID:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-BSSID:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-FREQUENCY:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-FREQUENCY:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-MODE:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-MODE:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-MAX-BITRATE:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-MAX-BITRATE:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-STRENGTH:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-STRENGTH:CAPS">
-<ANCHOR id="NM-ACCESS-POINT-HW-ADDRESS:CAPS" href="libnm-glib/NMAccessPoint.html#NM-ACCESS-POINT-HW-ADDRESS:CAPS">
<ANCHOR id="NMAccessPoint.property-details" href="libnm-glib/NMAccessPoint.html#NMAccessPoint.property-details">
<ANCHOR id="NMAccessPoint--bssid" href="libnm-glib/NMAccessPoint.html#NMAccessPoint--bssid">
<ANCHOR id="NMAccessPoint--flags" href="libnm-glib/NMAccessPoint.html#NMAccessPoint--flags">
@@ -527,155 +716,198 @@
<ANCHOR id="NMAccessPoint--strength" href="libnm-glib/NMAccessPoint.html#NMAccessPoint--strength">
<ANCHOR id="NMAccessPoint--wpa-flags" href="libnm-glib/NMAccessPoint.html#NMAccessPoint--wpa-flags">
<ANCHOR id="NMIP4Config" href="libnm-glib/NMIP4Config.html">
-<ANCHOR id="NMIP4Config.functions" href="libnm-glib/NMIP4Config.html#NMIP4Config.functions">
-<ANCHOR id="NMIP4Config.properties" href="libnm-glib/NMIP4Config.html#NMIP4Config.properties">
-<ANCHOR id="NMIP4Config.other" href="libnm-glib/NMIP4Config.html#NMIP4Config.other">
+<ANCHOR id="NMIP4Config.synopsis" href="libnm-glib/NMIP4Config.html#NMIP4Config.synopsis">
<ANCHOR id="NMIP4Config.object-hierarchy" href="libnm-glib/NMIP4Config.html#NMIP4Config.object-hierarchy">
+<ANCHOR id="NMIP4Config.implemented-interfaces" href="libnm-glib/NMIP4Config.html#NMIP4Config.implemented-interfaces">
+<ANCHOR id="NMIP4Config.properties" href="libnm-glib/NMIP4Config.html#NMIP4Config.properties">
<ANCHOR id="NMIP4Config.description" href="libnm-glib/NMIP4Config.html#NMIP4Config.description">
-<ANCHOR id="NMIP4Config.functions_details" href="libnm-glib/NMIP4Config.html#NMIP4Config.functions_details">
+<ANCHOR id="NMIP4Config.details" href="libnm-glib/NMIP4Config.html#NMIP4Config.details">
+<ANCHOR id="NMIP4Config-struct" href="libnm-glib/NMIP4Config.html#NMIP4Config-struct">
+<ANCHOR id="NMIP4ConfigClass" href="libnm-glib/NMIP4Config.html#NMIP4ConfigClass">
+<ANCHOR id="NM-IP4-CONFIG-GATEWAY:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-GATEWAY:CAPS">
+<ANCHOR id="NM-IP4-CONFIG-ADDRESSES:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-ADDRESSES:CAPS">
+<ANCHOR id="NM-IP4-CONFIG-ROUTES:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-IP4-CONFIG-NAMESERVERS:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-NAMESERVERS:CAPS">
+<ANCHOR id="NM-IP4-CONFIG-DOMAINS:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-DOMAINS:CAPS">
+<ANCHOR id="NM-IP4-CONFIG-SEARCHES:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-SEARCHES:CAPS">
+<ANCHOR id="NM-IP4-CONFIG-WINS-SERVERS:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-WINS-SERVERS:CAPS">
<ANCHOR id="nm-ip4-config-new" href="libnm-glib/NMIP4Config.html#nm-ip4-config-new">
+<ANCHOR id="nm-ip4-config-get-gateway" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-gateway">
<ANCHOR id="nm-ip4-config-get-addresses" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-addresses">
+<ANCHOR id="nm-ip4-config-get-routes" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-routes">
<ANCHOR id="nm-ip4-config-get-nameservers" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-nameservers">
<ANCHOR id="nm-ip4-config-get-domains" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-domains">
-<ANCHOR id="nm-ip4-config-get-routes" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-routes">
+<ANCHOR id="nm-ip4-config-get-searches" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-searches">
<ANCHOR id="nm-ip4-config-get-wins-servers" href="libnm-glib/NMIP4Config.html#nm-ip4-config-get-wins-servers">
-<ANCHOR id="NMIP4Config.other_details" href="libnm-glib/NMIP4Config.html#NMIP4Config.other_details">
-<ANCHOR id="NM-IP4-CONFIG-ADDRESSES:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-ADDRESSES:CAPS">
-<ANCHOR id="NM-IP4-CONFIG-NAMESERVERS:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-NAMESERVERS:CAPS">
-<ANCHOR id="NM-IP4-CONFIG-DOMAINS:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-DOMAINS:CAPS">
-<ANCHOR id="NM-IP4-CONFIG-ROUTES:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-ROUTES:CAPS">
-<ANCHOR id="NM-IP4-CONFIG-WINS-SERVERS:CAPS" href="libnm-glib/NMIP4Config.html#NM-IP4-CONFIG-WINS-SERVERS:CAPS">
<ANCHOR id="NMIP4Config.property-details" href="libnm-glib/NMIP4Config.html#NMIP4Config.property-details">
<ANCHOR id="NMIP4Config--addresses" href="libnm-glib/NMIP4Config.html#NMIP4Config--addresses">
<ANCHOR id="NMIP4Config--domains" href="libnm-glib/NMIP4Config.html#NMIP4Config--domains">
+<ANCHOR id="NMIP4Config--gateway" href="libnm-glib/NMIP4Config.html#NMIP4Config--gateway">
<ANCHOR id="NMIP4Config--nameservers" href="libnm-glib/NMIP4Config.html#NMIP4Config--nameservers">
<ANCHOR id="NMIP4Config--routes" href="libnm-glib/NMIP4Config.html#NMIP4Config--routes">
+<ANCHOR id="NMIP4Config--searches" href="libnm-glib/NMIP4Config.html#NMIP4Config--searches">
<ANCHOR id="NMIP4Config--wins-servers" href="libnm-glib/NMIP4Config.html#NMIP4Config--wins-servers">
<ANCHOR id="NMIP6Config" href="libnm-glib/NMIP6Config.html">
-<ANCHOR id="NMIP6Config.functions" href="libnm-glib/NMIP6Config.html#NMIP6Config.functions">
-<ANCHOR id="NMIP6Config.properties" href="libnm-glib/NMIP6Config.html#NMIP6Config.properties">
-<ANCHOR id="NMIP6Config.other" href="libnm-glib/NMIP6Config.html#NMIP6Config.other">
+<ANCHOR id="NMIP6Config.synopsis" href="libnm-glib/NMIP6Config.html#NMIP6Config.synopsis">
<ANCHOR id="NMIP6Config.object-hierarchy" href="libnm-glib/NMIP6Config.html#NMIP6Config.object-hierarchy">
+<ANCHOR id="NMIP6Config.implemented-interfaces" href="libnm-glib/NMIP6Config.html#NMIP6Config.implemented-interfaces">
+<ANCHOR id="NMIP6Config.properties" href="libnm-glib/NMIP6Config.html#NMIP6Config.properties">
<ANCHOR id="NMIP6Config.description" href="libnm-glib/NMIP6Config.html#NMIP6Config.description">
-<ANCHOR id="NMIP6Config.functions_details" href="libnm-glib/NMIP6Config.html#NMIP6Config.functions_details">
+<ANCHOR id="NMIP6Config.details" href="libnm-glib/NMIP6Config.html#NMIP6Config.details">
+<ANCHOR id="NMIP6Config-struct" href="libnm-glib/NMIP6Config.html#NMIP6Config-struct">
+<ANCHOR id="NMIP6ConfigClass" href="libnm-glib/NMIP6Config.html#NMIP6ConfigClass">
+<ANCHOR id="NM-IP6-CONFIG-GATEWAY:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-GATEWAY:CAPS">
+<ANCHOR id="NM-IP6-CONFIG-ADDRESSES:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-ADDRESSES:CAPS">
+<ANCHOR id="NM-IP6-CONFIG-ROUTES:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-IP6-CONFIG-NAMESERVERS:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-NAMESERVERS:CAPS">
+<ANCHOR id="NM-IP6-CONFIG-DOMAINS:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-DOMAINS:CAPS">
+<ANCHOR id="NM-IP6-CONFIG-SEARCHES:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-SEARCHES:CAPS">
<ANCHOR id="nm-ip6-config-new" href="libnm-glib/NMIP6Config.html#nm-ip6-config-new">
+<ANCHOR id="nm-ip6-config-get-gateway" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-gateway">
<ANCHOR id="nm-ip6-config-get-addresses" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-addresses">
+<ANCHOR id="nm-ip6-config-get-routes" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-routes">
+<ANCHOR id="nm-ip6-config-get-num-nameservers" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-num-nameservers">
+<ANCHOR id="nm-ip6-config-get-nameserver" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-nameserver">
<ANCHOR id="nm-ip6-config-get-nameservers" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-nameservers">
<ANCHOR id="nm-ip6-config-get-domains" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-domains">
-<ANCHOR id="nm-ip6-config-get-routes" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-routes">
-<ANCHOR id="NMIP6Config.other_details" href="libnm-glib/NMIP6Config.html#NMIP6Config.other_details">
-<ANCHOR id="NM-IP6-CONFIG-ADDRESSES:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-ADDRESSES:CAPS">
-<ANCHOR id="NM-IP6-CONFIG-NAMESERVERS:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-NAMESERVERS:CAPS">
-<ANCHOR id="NM-IP6-CONFIG-DOMAINS:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-DOMAINS:CAPS">
-<ANCHOR id="NM-IP6-CONFIG-ROUTES:CAPS" href="libnm-glib/NMIP6Config.html#NM-IP6-CONFIG-ROUTES:CAPS">
+<ANCHOR id="nm-ip6-config-get-searches" href="libnm-glib/NMIP6Config.html#nm-ip6-config-get-searches">
<ANCHOR id="NMIP6Config.property-details" href="libnm-glib/NMIP6Config.html#NMIP6Config.property-details">
<ANCHOR id="NMIP6Config--addresses" href="libnm-glib/NMIP6Config.html#NMIP6Config--addresses">
<ANCHOR id="NMIP6Config--domains" href="libnm-glib/NMIP6Config.html#NMIP6Config--domains">
+<ANCHOR id="NMIP6Config--gateway" href="libnm-glib/NMIP6Config.html#NMIP6Config--gateway">
<ANCHOR id="NMIP6Config--nameservers" href="libnm-glib/NMIP6Config.html#NMIP6Config--nameservers">
<ANCHOR id="NMIP6Config--routes" href="libnm-glib/NMIP6Config.html#NMIP6Config--routes">
+<ANCHOR id="NMIP6Config--searches" href="libnm-glib/NMIP6Config.html#NMIP6Config--searches">
<ANCHOR id="NMDHCP4Config" href="libnm-glib/NMDHCP4Config.html">
-<ANCHOR id="NMDHCP4Config.functions" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.functions">
-<ANCHOR id="NMDHCP4Config.properties" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.properties">
-<ANCHOR id="NMDHCP4Config.other" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.other">
+<ANCHOR id="NMDHCP4Config.synopsis" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.synopsis">
<ANCHOR id="NMDHCP4Config.object-hierarchy" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.object-hierarchy">
+<ANCHOR id="NMDHCP4Config.implemented-interfaces" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.implemented-interfaces">
+<ANCHOR id="NMDHCP4Config.properties" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.properties">
<ANCHOR id="NMDHCP4Config.description" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.description">
-<ANCHOR id="NMDHCP4Config.functions_details" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.functions_details">
+<ANCHOR id="NMDHCP4Config.details" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.details">
+<ANCHOR id="NMDHCP4Config-struct" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config-struct">
+<ANCHOR id="NMDHCP4ConfigClass" href="libnm-glib/NMDHCP4Config.html#NMDHCP4ConfigClass">
+<ANCHOR id="NM-DHCP4-CONFIG-OPTIONS:CAPS" href="libnm-glib/NMDHCP4Config.html#NM-DHCP4-CONFIG-OPTIONS:CAPS">
<ANCHOR id="nm-dhcp4-config-new" href="libnm-glib/NMDHCP4Config.html#nm-dhcp4-config-new">
<ANCHOR id="nm-dhcp4-config-get-options" href="libnm-glib/NMDHCP4Config.html#nm-dhcp4-config-get-options">
<ANCHOR id="nm-dhcp4-config-get-one-option" href="libnm-glib/NMDHCP4Config.html#nm-dhcp4-config-get-one-option">
-<ANCHOR id="NMDHCP4Config.other_details" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.other_details">
-<ANCHOR id="NM-DHCP4-CONFIG-OPTIONS:CAPS" href="libnm-glib/NMDHCP4Config.html#NM-DHCP4-CONFIG-OPTIONS:CAPS">
<ANCHOR id="NMDHCP4Config.property-details" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config.property-details">
<ANCHOR id="NMDHCP4Config--options" href="libnm-glib/NMDHCP4Config.html#NMDHCP4Config--options">
<ANCHOR id="NMDHCP6Config" href="libnm-glib/NMDHCP6Config.html">
-<ANCHOR id="NMDHCP6Config.functions" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.functions">
-<ANCHOR id="NMDHCP6Config.properties" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.properties">
-<ANCHOR id="NMDHCP6Config.other" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.other">
+<ANCHOR id="NMDHCP6Config.synopsis" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.synopsis">
<ANCHOR id="NMDHCP6Config.object-hierarchy" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.object-hierarchy">
+<ANCHOR id="NMDHCP6Config.implemented-interfaces" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.implemented-interfaces">
+<ANCHOR id="NMDHCP6Config.properties" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.properties">
<ANCHOR id="NMDHCP6Config.description" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.description">
-<ANCHOR id="NMDHCP6Config.functions_details" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.functions_details">
+<ANCHOR id="NMDHCP6Config.details" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.details">
+<ANCHOR id="NMDHCP6Config-struct" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config-struct">
+<ANCHOR id="NMDHCP6ConfigClass" href="libnm-glib/NMDHCP6Config.html#NMDHCP6ConfigClass">
+<ANCHOR id="NM-DHCP6-CONFIG-OPTIONS:CAPS" href="libnm-glib/NMDHCP6Config.html#NM-DHCP6-CONFIG-OPTIONS:CAPS">
<ANCHOR id="nm-dhcp6-config-new" href="libnm-glib/NMDHCP6Config.html#nm-dhcp6-config-new">
<ANCHOR id="nm-dhcp6-config-get-options" href="libnm-glib/NMDHCP6Config.html#nm-dhcp6-config-get-options">
<ANCHOR id="nm-dhcp6-config-get-one-option" href="libnm-glib/NMDHCP6Config.html#nm-dhcp6-config-get-one-option">
-<ANCHOR id="NMDHCP6Config.other_details" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.other_details">
-<ANCHOR id="NM-DHCP6-CONFIG-OPTIONS:CAPS" href="libnm-glib/NMDHCP6Config.html#NM-DHCP6-CONFIG-OPTIONS:CAPS">
<ANCHOR id="NMDHCP6Config.property-details" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config.property-details">
<ANCHOR id="NMDHCP6Config--options" href="libnm-glib/NMDHCP6Config.html#NMDHCP6Config--options">
<ANCHOR id="NMObject" href="libnm-glib/NMObject.html">
-<ANCHOR id="NMObject.functions" href="libnm-glib/NMObject.html#NMObject.functions">
+<ANCHOR id="NMObject.synopsis" href="libnm-glib/NMObject.html#NMObject.synopsis">
+<ANCHOR id="NMObject.object-hierarchy" href="libnm-glib/NMObject.html#NMObject.object-hierarchy">
+<ANCHOR id="NMObject.implemented-interfaces" href="libnm-glib/NMObject.html#NMObject.implemented-interfaces">
<ANCHOR id="NMObject.properties" href="libnm-glib/NMObject.html#NMObject.properties">
<ANCHOR id="NMObject.signals" href="libnm-glib/NMObject.html#NMObject.signals">
-<ANCHOR id="NMObject.other" href="libnm-glib/NMObject.html#NMObject.other">
-<ANCHOR id="NMObject.object-hierarchy" href="libnm-glib/NMObject.html#NMObject.object-hierarchy">
<ANCHOR id="NMObject.description" href="libnm-glib/NMObject.html#NMObject.description">
-<ANCHOR id="NMObject.functions_details" href="libnm-glib/NMObject.html#NMObject.functions_details">
-<ANCHOR id="nm-object-error-quark" href="libnm-glib/NMObject.html#nm-object-error-quark">
-<ANCHOR id="nm-object-get-connection" href="libnm-glib/NMObject.html#nm-object-get-connection">
-<ANCHOR id="nm-object-get-path" href="libnm-glib/NMObject.html#nm-object-get-path">
-<ANCHOR id="NMObject.other_details" href="libnm-glib/NMObject.html#NMObject.other_details">
+<ANCHOR id="NMObject.details" href="libnm-glib/NMObject.html#NMObject.details">
<ANCHOR id="NMObjectError" href="libnm-glib/NMObject.html#NMObjectError">
+<ANCHOR id="NM-OBJECT-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMObject.html#NM-OBJECT-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-OBJECT-ERROR-OBJECT-CREATION-FAILURE:CAPS" href="libnm-glib/NMObject.html#NM-OBJECT-ERROR-OBJECT-CREATION-FAILURE:CAPS">
<ANCHOR id="NM-OBJECT-ERROR:CAPS" href="libnm-glib/NMObject.html#NM-OBJECT-ERROR:CAPS">
+<ANCHOR id="nm-object-error-quark" href="libnm-glib/NMObject.html#nm-object-error-quark">
<ANCHOR id="NM-OBJECT-DBUS-CONNECTION:CAPS" href="libnm-glib/NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS">
<ANCHOR id="NM-OBJECT-DBUS-PATH:CAPS" href="libnm-glib/NMObject.html#NM-OBJECT-DBUS-PATH:CAPS">
+<ANCHOR id="NMObject-struct" href="libnm-glib/NMObject.html#NMObject-struct">
+<ANCHOR id="NMObjectClass" href="libnm-glib/NMObject.html#NMObjectClass">
+<ANCHOR id="nm-object-get-connection" href="libnm-glib/NMObject.html#nm-object-get-connection">
+<ANCHOR id="nm-object-get-path" href="libnm-glib/NMObject.html#nm-object-get-path">
<ANCHOR id="NMObject.property-details" href="libnm-glib/NMObject.html#NMObject.property-details">
<ANCHOR id="NMObject--dbus-connection" href="libnm-glib/NMObject.html#NMObject--dbus-connection">
<ANCHOR id="NMObject--dbus-path" href="libnm-glib/NMObject.html#NMObject--dbus-path">
<ANCHOR id="NMObject.signal-details" href="libnm-glib/NMObject.html#NMObject.signal-details">
<ANCHOR id="NMObject-object-creation-failed" href="libnm-glib/NMObject.html#NMObject-object-creation-failed">
<ANCHOR id="NMRemoteConnection" href="libnm-glib/NMRemoteConnection.html">
-<ANCHOR id="NMRemoteConnection.functions" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.functions">
+<ANCHOR id="NMRemoteConnection.synopsis" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.synopsis">
+<ANCHOR id="NMRemoteConnection.object-hierarchy" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.object-hierarchy">
+<ANCHOR id="NMRemoteConnection.implemented-interfaces" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.implemented-interfaces">
<ANCHOR id="NMRemoteConnection.properties" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.properties">
<ANCHOR id="NMRemoteConnection.signals" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.signals">
-<ANCHOR id="NMRemoteConnection.other" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.other">
-<ANCHOR id="NMRemoteConnection.object-hierarchy" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.object-hierarchy">
<ANCHOR id="NMRemoteConnection.description" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.description">
-<ANCHOR id="NMRemoteConnection.functions_details" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.functions_details">
+<ANCHOR id="NMRemoteConnection.details" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.details">
+<ANCHOR id="NMRemoteConnectionError" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnectionError">
+<ANCHOR id="NM-REMOTE-CONNECTION-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-REMOTE-CONNECTION-ERROR-DISCONNECTED:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR-DISCONNECTED:CAPS">
+<ANCHOR id="NM-REMOTE-CONNECTION-ERROR:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR:CAPS">
+<ANCHOR id="nm-remote-connection-error-quark" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-error-quark">
+<ANCHOR id="NM-REMOTE-CONNECTION-UNSAVED:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-UNSAVED:CAPS">
+<ANCHOR id="NM-REMOTE-CONNECTION-UPDATED:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-UPDATED:CAPS">
+<ANCHOR id="NM-REMOTE-CONNECTION-REMOVED:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="NMRemoteConnection-struct" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection-struct">
+<ANCHOR id="NMRemoteConnectionClass" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnectionClass">
+<ANCHOR id="NMRemoteConnectionResultFunc" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnectionResultFunc">
<ANCHOR id="NMRemoteConnectionCommitFunc" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnectionCommitFunc">
<ANCHOR id="NMRemoteConnectionDeleteFunc" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnectionDeleteFunc">
<ANCHOR id="NMRemoteConnectionGetSecretsFunc" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc">
<ANCHOR id="nm-remote-connection-new" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-new">
<ANCHOR id="nm-remote-connection-commit-changes" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-commit-changes">
+<ANCHOR id="nm-remote-connection-commit-changes-unsaved" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-commit-changes-unsaved">
+<ANCHOR id="nm-remote-connection-save" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-save">
<ANCHOR id="nm-remote-connection-delete" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-delete">
<ANCHOR id="nm-remote-connection-get-secrets" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-get-secrets">
-<ANCHOR id="NMRemoteConnection.other_details" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.other_details">
-<ANCHOR id="NM-REMOTE-CONNECTION-UPDATED:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-UPDATED:CAPS">
-<ANCHOR id="NM-REMOTE-CONNECTION-REMOVED:CAPS" href="libnm-glib/NMRemoteConnection.html#NM-REMOTE-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="nm-remote-connection-get-unsaved" href="libnm-glib/NMRemoteConnection.html#nm-remote-connection-get-unsaved">
<ANCHOR id="NMRemoteConnection.property-details" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.property-details">
<ANCHOR id="NMRemoteConnection--bus" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection--bus">
<ANCHOR id="NMRemoteConnection--dbus-connection" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection--dbus-connection">
<ANCHOR id="NMRemoteConnection--dbus-path" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection--dbus-path">
+<ANCHOR id="NMRemoteConnection--unsaved" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection--unsaved">
<ANCHOR id="NMRemoteConnection.signal-details" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection.signal-details">
<ANCHOR id="NMRemoteConnection-removed" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection-removed">
<ANCHOR id="NMRemoteConnection-updated" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection-updated">
<ANCHOR id="NMRemoteConnection-visible" href="libnm-glib/NMRemoteConnection.html#NMRemoteConnection-visible">
<ANCHOR id="NMRemoteSettings" href="libnm-glib/NMRemoteSettings.html">
-<ANCHOR id="NMRemoteSettings.functions" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.functions">
+<ANCHOR id="NMRemoteSettings.synopsis" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.synopsis">
+<ANCHOR id="NMRemoteSettings.object-hierarchy" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.object-hierarchy">
+<ANCHOR id="NMRemoteSettings.implemented-interfaces" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.implemented-interfaces">
<ANCHOR id="NMRemoteSettings.properties" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.properties">
<ANCHOR id="NMRemoteSettings.signals" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.signals">
-<ANCHOR id="NMRemoteSettings.other" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.other">
-<ANCHOR id="NMRemoteSettings.object-hierarchy" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.object-hierarchy">
<ANCHOR id="NMRemoteSettings.description" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.description">
-<ANCHOR id="NMRemoteSettings.functions_details" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.functions_details">
+<ANCHOR id="NMRemoteSettings.details" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.details">
+<ANCHOR id="NMRemoteSettingsError" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettingsError">
+<ANCHOR id="NM-REMOTE-SETTINGS-ERROR-UNKNOWN:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-ERROR-CONNECTION-REMOVED:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-ERROR-CONNECTION-UNAVAILABLE:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-CONNECTION-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-ERROR-SERVICE-UNAVAILABLE:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-SERVICE-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-ERROR:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR:CAPS">
<ANCHOR id="nm-remote-settings-error-quark" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-error-quark">
+<ANCHOR id="NM-REMOTE-SETTINGS-BUS:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-BUS:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-HOSTNAME:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-HOSTNAME:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS">
+<ANCHOR id="NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS">
<ANCHOR id="NMRemoteSettingsAddConnectionFunc" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc">
+<ANCHOR id="NMRemoteSettingsLoadConnectionsFunc" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettingsLoadConnectionsFunc">
<ANCHOR id="NMRemoteSettingsSaveHostnameFunc" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc">
+<ANCHOR id="NMRemoteSettings-struct" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings-struct">
+<ANCHOR id="NMRemoteSettingsClass" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettingsClass">
<ANCHOR id="nm-remote-settings-new" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-new">
<ANCHOR id="nm-remote-settings-new-async" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-new-async">
<ANCHOR id="nm-remote-settings-new-finish" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-new-finish">
<ANCHOR id="nm-remote-settings-list-connections" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-list-connections">
+<ANCHOR id="nm-remote-settings-get-connection-by-id" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-get-connection-by-id">
<ANCHOR id="nm-remote-settings-get-connection-by-path" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-get-connection-by-path">
<ANCHOR id="nm-remote-settings-get-connection-by-uuid" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-get-connection-by-uuid">
<ANCHOR id="nm-remote-settings-add-connection" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-add-connection">
+<ANCHOR id="nm-remote-settings-add-connection-unsaved" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-add-connection-unsaved">
+<ANCHOR id="nm-remote-settings-load-connections" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-load-connections">
+<ANCHOR id="nm-remote-settings-reload-connections" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-reload-connections">
<ANCHOR id="nm-remote-settings-save-hostname" href="libnm-glib/NMRemoteSettings.html#nm-remote-settings-save-hostname">
-<ANCHOR id="NMRemoteSettings.other_details" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.other_details">
-<ANCHOR id="NMRemoteSettingsError" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettingsError">
-<ANCHOR id="NM-REMOTE-SETTINGS-ERROR:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR:CAPS">
-<ANCHOR id="NM-REMOTE-SETTINGS-BUS:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-BUS:CAPS">
-<ANCHOR id="NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS">
-<ANCHOR id="NM-REMOTE-SETTINGS-HOSTNAME:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-HOSTNAME:CAPS">
-<ANCHOR id="NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS">
-<ANCHOR id="NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS">
-<ANCHOR id="NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS" href="libnm-glib/NMRemoteSettings.html#NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS">
<ANCHOR id="NMRemoteSettings.property-details" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.property-details">
<ANCHOR id="NMRemoteSettings--bus" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings--bus">
<ANCHOR id="NMRemoteSettings--can-modify" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings--can-modify">
@@ -684,113 +916,145 @@
<ANCHOR id="NMRemoteSettings.signal-details" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.signal-details">
<ANCHOR id="NMRemoteSettings-connections-read" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings-connections-read">
<ANCHOR id="NMRemoteSettings-new-connection" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings-new-connection">
+<ANCHOR id="NMRemoteSettings.see-also" href="libnm-glib/NMRemoteSettings.html#NMRemoteSettings.see-also">
<ANCHOR id="libnm-glib-nm-types" href="libnm-glib/libnm-glib-nm-types.html">
-<ANCHOR id="libnm-glib-nm-types.object-hierarchy" href="libnm-glib/libnm-glib-nm-types.html#libnm-glib-nm-types.object-hierarchy">
+<ANCHOR id="libnm-glib-nm-types.synopsis" href="libnm-glib/libnm-glib-nm-types.html#libnm-glib-nm-types.synopsis">
<ANCHOR id="libnm-glib-nm-types.description" href="libnm-glib/libnm-glib-nm-types.html#libnm-glib-nm-types.description">
-<ANCHOR id="libnm-glib-nm-types.functions_details" href="libnm-glib/libnm-glib-nm-types.html#libnm-glib-nm-types.functions_details">
-<ANCHOR id="libnm-glib-nm-types.other_details" href="libnm-glib/libnm-glib-nm-types.html#libnm-glib-nm-types.other_details">
+<ANCHOR id="libnm-glib-nm-types.details" href="libnm-glib/libnm-glib-nm-types.html#libnm-glib-nm-types.details">
<ANCHOR id="NMSecretAgent" href="libnm-glib/NMSecretAgent.html">
-<ANCHOR id="NMSecretAgent.functions" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.functions">
+<ANCHOR id="NMSecretAgent.synopsis" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.synopsis">
+<ANCHOR id="NMSecretAgent.object-hierarchy" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.object-hierarchy">
<ANCHOR id="NMSecretAgent.properties" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.properties">
<ANCHOR id="NMSecretAgent.signals" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.signals">
-<ANCHOR id="NMSecretAgent.other" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.other">
-<ANCHOR id="NMSecretAgent.object-hierarchy" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.object-hierarchy">
<ANCHOR id="NMSecretAgent.description" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.description">
-<ANCHOR id="NMSecretAgent.functions_details" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.functions_details">
+<ANCHOR id="NMSecretAgent.details" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.details">
<ANCHOR id="NM-SECRET-AGENT-ERROR:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-ERROR:CAPS">
<ANCHOR id="nm-secret-agent-error-quark" href="libnm-glib/NMSecretAgent.html#nm-secret-agent-error-quark">
+<ANCHOR id="NMSecretAgentError" href="libnm-glib/NMSecretAgent.html#NMSecretAgentError">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-NOT-AUTHORIZED:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-ERROR-NOT-AUTHORIZED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-INTERNAL-ERROR:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-ERROR-INTERNAL-ERROR:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS">
+<ANCHOR id="NMSecretAgentCapabilities" href="libnm-glib/NMSecretAgent.html#NMSecretAgentCapabilities">
+<ANCHOR id="NM-SECRET-AGENT-CAPABILITY-NONE:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-CAPABILITY-VPN-HINTS:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITY-VPN-HINTS:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-CAPABILITY-LAST:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITY-LAST:CAPS">
+<ANCHOR id="NMSecretAgentGetSecretsFlags" href="libnm-glib/NMSecretAgent.html#NMSecretAgentGetSecretsFlags">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-IDENTIFIER:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-IDENTIFIER:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-AUTO-REGISTER:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-AUTO-REGISTER:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-REGISTERED:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-REGISTERED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-CAPABILITIES:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITIES:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS">
+<ANCHOR id="NMSecretAgent-struct" href="libnm-glib/NMSecretAgent.html#NMSecretAgent-struct">
<ANCHOR id="NMSecretAgentGetSecretsFunc" href="libnm-glib/NMSecretAgent.html#NMSecretAgentGetSecretsFunc">
<ANCHOR id="NMSecretAgentSaveSecretsFunc" href="libnm-glib/NMSecretAgent.html#NMSecretAgentSaveSecretsFunc">
<ANCHOR id="NMSecretAgentDeleteSecretsFunc" href="libnm-glib/NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc">
+<ANCHOR id="NMSecretAgentClass" href="libnm-glib/NMSecretAgent.html#NMSecretAgentClass">
<ANCHOR id="nm-secret-agent-register" href="libnm-glib/NMSecretAgent.html#nm-secret-agent-register">
<ANCHOR id="nm-secret-agent-unregister" href="libnm-glib/NMSecretAgent.html#nm-secret-agent-unregister">
<ANCHOR id="nm-secret-agent-get-registered" href="libnm-glib/NMSecretAgent.html#nm-secret-agent-get-registered">
<ANCHOR id="nm-secret-agent-get-secrets" href="libnm-glib/NMSecretAgent.html#nm-secret-agent-get-secrets">
<ANCHOR id="nm-secret-agent-save-secrets" href="libnm-glib/NMSecretAgent.html#nm-secret-agent-save-secrets">
<ANCHOR id="nm-secret-agent-delete-secrets" href="libnm-glib/NMSecretAgent.html#nm-secret-agent-delete-secrets">
-<ANCHOR id="NMSecretAgent.other_details" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.other_details">
-<ANCHOR id="NMSecretAgentError" href="libnm-glib/NMSecretAgent.html#NMSecretAgentError">
-<ANCHOR id="NMSecretAgentGetSecretsFlags" href="libnm-glib/NMSecretAgent.html#NMSecretAgentGetSecretsFlags">
-<ANCHOR id="NM-SECRET-AGENT-IDENTIFIER:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-IDENTIFIER:CAPS">
-<ANCHOR id="NM-SECRET-AGENT-AUTO-REGISTER:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-AUTO-REGISTER:CAPS">
-<ANCHOR id="NM-SECRET-AGENT-REGISTERED:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-REGISTERED:CAPS">
-<ANCHOR id="NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS" href="libnm-glib/NMSecretAgent.html#NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS">
<ANCHOR id="NMSecretAgent.property-details" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.property-details">
<ANCHOR id="NMSecretAgent--auto-register" href="libnm-glib/NMSecretAgent.html#NMSecretAgent--auto-register">
+<ANCHOR id="NMSecretAgent--capabilities" href="libnm-glib/NMSecretAgent.html#NMSecretAgent--capabilities">
<ANCHOR id="NMSecretAgent--identifier" href="libnm-glib/NMSecretAgent.html#NMSecretAgent--identifier">
<ANCHOR id="NMSecretAgent--registered" href="libnm-glib/NMSecretAgent.html#NMSecretAgent--registered">
<ANCHOR id="NMSecretAgent.signal-details" href="libnm-glib/NMSecretAgent.html#NMSecretAgent.signal-details">
<ANCHOR id="NMSecretAgent-registration-result" href="libnm-glib/NMSecretAgent.html#NMSecretAgent-registration-result">
<ANCHOR id="NMVPNConnection" href="libnm-glib/NMVPNConnection.html">
-<ANCHOR id="NMVPNConnection.functions" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.functions">
+<ANCHOR id="NMVPNConnection.synopsis" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.synopsis">
+<ANCHOR id="NMVPNConnection.object-hierarchy" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.object-hierarchy">
+<ANCHOR id="NMVPNConnection.implemented-interfaces" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.implemented-interfaces">
<ANCHOR id="NMVPNConnection.properties" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.properties">
<ANCHOR id="NMVPNConnection.signals" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.signals">
-<ANCHOR id="NMVPNConnection.other" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.other">
-<ANCHOR id="NMVPNConnection.object-hierarchy" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.object-hierarchy">
<ANCHOR id="NMVPNConnection.description" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.description">
-<ANCHOR id="NMVPNConnection.functions_details" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.functions_details">
+<ANCHOR id="NMVPNConnection.details" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.details">
+<ANCHOR id="NM-VPN-CONNECTION-VPN-STATE:CAPS" href="libnm-glib/NMVPNConnection.html#NM-VPN-CONNECTION-VPN-STATE:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-BANNER:CAPS" href="libnm-glib/NMVPNConnection.html#NM-VPN-CONNECTION-BANNER:CAPS">
+<ANCHOR id="NMVPNConnection-struct" href="libnm-glib/NMVPNConnection.html#NMVPNConnection-struct">
+<ANCHOR id="NMVPNConnectionClass" href="libnm-glib/NMVPNConnection.html#NMVPNConnectionClass">
<ANCHOR id="nm-vpn-connection-new" href="libnm-glib/NMVPNConnection.html#nm-vpn-connection-new">
<ANCHOR id="nm-vpn-connection-get-vpn-state" href="libnm-glib/NMVPNConnection.html#nm-vpn-connection-get-vpn-state">
<ANCHOR id="nm-vpn-connection-get-banner" href="libnm-glib/NMVPNConnection.html#nm-vpn-connection-get-banner">
-<ANCHOR id="NMVPNConnection.other_details" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.other_details">
-<ANCHOR id="NM-VPN-CONNECTION-VPN-STATE:CAPS" href="libnm-glib/NMVPNConnection.html#NM-VPN-CONNECTION-VPN-STATE:CAPS">
-<ANCHOR id="NM-VPN-CONNECTION-BANNER:CAPS" href="libnm-glib/NMVPNConnection.html#NM-VPN-CONNECTION-BANNER:CAPS">
<ANCHOR id="NMVPNConnection.property-details" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.property-details">
<ANCHOR id="NMVPNConnection--banner" href="libnm-glib/NMVPNConnection.html#NMVPNConnection--banner">
<ANCHOR id="NMVPNConnection--vpn-state" href="libnm-glib/NMVPNConnection.html#NMVPNConnection--vpn-state">
<ANCHOR id="NMVPNConnection.signal-details" href="libnm-glib/NMVPNConnection.html#NMVPNConnection.signal-details">
<ANCHOR id="NMVPNConnection-vpn-state-changed" href="libnm-glib/NMVPNConnection.html#NMVPNConnection-vpn-state-changed">
<ANCHOR id="libnm-glib-NMVPNPlugin" href="libnm-glib/libnm-glib-NMVPNPlugin.html">
-<ANCHOR id="libnm-glib-NMVPNPlugin.functions" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.functions">
-<ANCHOR id="libnm-glib-NMVPNPlugin.other" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.other">
-<ANCHOR id="libnm-glib-NMVPNPlugin.object-hierarchy" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.object-hierarchy">
+<ANCHOR id="libnm-glib-NMVPNPlugin.synopsis" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.synopsis">
<ANCHOR id="libnm-glib-NMVPNPlugin.description" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.description">
-<ANCHOR id="libnm-glib-NMVPNPlugin.functions_details" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.functions_details">
+<ANCHOR id="libnm-glib-NMVPNPlugin.details" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.details">
+<ANCHOR id="NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-STATE:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-STATE:CAPS">
+<ANCHOR id="NMVPNPluginError" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NMVPNPluginError">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-GENERAL:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-GENERAL:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-CONNECTION-INVALID:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-CONNECTION-INVALID:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-INTERACTIVE-NOT-SUPPORTED:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-INTERACTIVE-NOT-SUPPORTED:CAPS">
+<ANCHOR id="NMVPNPlugin" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NMVPNPlugin">
+<ANCHOR id="NMVPNPluginClass" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NMVPNPluginClass">
<ANCHOR id="nm-vpn-plugin-error-quark" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-error-quark">
<ANCHOR id="nm-vpn-plugin-get-connection" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-connection">
<ANCHOR id="nm-vpn-plugin-get-state" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-state">
<ANCHOR id="nm-vpn-plugin-set-state" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-state">
+<ANCHOR id="nm-vpn-plugin-secrets-required" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-secrets-required">
<ANCHOR id="nm-vpn-plugin-set-login-banner" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-login-banner">
<ANCHOR id="nm-vpn-plugin-failure" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-failure">
<ANCHOR id="nm-vpn-plugin-set-config" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-config">
<ANCHOR id="nm-vpn-plugin-set-ip4-config" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip4-config">
<ANCHOR id="nm-vpn-plugin-set-ip6-config" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip6-config">
<ANCHOR id="nm-vpn-plugin-disconnect" href="libnm-glib/libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-disconnect">
-<ANCHOR id="libnm-glib-NMVPNPlugin.other_details" href="libnm-glib/libnm-glib-NMVPNPlugin.html#libnm-glib-NMVPNPlugin.other_details">
-<ANCHOR id="NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS">
-<ANCHOR id="NM-VPN-PLUGIN-STATE:CAPS" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-STATE:CAPS">
-<ANCHOR id="NMVPNPluginError" href="libnm-glib/libnm-glib-NMVPNPlugin.html#NMVPNPluginError">
-<ANCHOR id="libnm-glib-NMVpnPluginUiWidget" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html">
-<ANCHOR id="libnm-glib-NMVpnPluginUiWidget.functions" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#libnm-glib-NMVpnPluginUiWidget.functions">
-<ANCHOR id="libnm-glib-NMVpnPluginUiWidget.other" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#libnm-glib-NMVpnPluginUiWidget.other">
-<ANCHOR id="libnm-glib-NMVpnPluginUiWidget.object-hierarchy" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#libnm-glib-NMVpnPluginUiWidget.object-hierarchy">
-<ANCHOR id="libnm-glib-NMVpnPluginUiWidget.description" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#libnm-glib-NMVpnPluginUiWidget.description">
-<ANCHOR id="libnm-glib-NMVpnPluginUiWidget.functions_details" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#libnm-glib-NMVpnPluginUiWidget.functions_details">
-<ANCHOR id="NMVpnPluginUiFactory" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiFactory">
-<ANCHOR id="nm-vpn-plugin-ui-factory" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-factory">
-<ANCHOR id="nm-vpn-plugin-ui-interface-ui-factory" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-ui-factory">
-<ANCHOR id="nm-vpn-plugin-ui-interface-get-capabilities" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-capabilities">
-<ANCHOR id="nm-vpn-plugin-ui-interface-import" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-import">
-<ANCHOR id="nm-vpn-plugin-ui-interface-export" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-export">
-<ANCHOR id="nm-vpn-plugin-ui-interface-get-suggested-name" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-suggested-name">
-<ANCHOR id="nm-vpn-plugin-ui-interface-delete-connection" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-delete-connection">
-<ANCHOR id="nm-vpn-plugin-ui-widget-interface-get-widget" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-get-widget">
-<ANCHOR id="nm-vpn-plugin-ui-widget-interface-update-connection" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-update-connection">
-<ANCHOR id="nm-vpn-plugin-ui-widget-interface-save-secrets" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-save-secrets">
-<ANCHOR id="libnm-glib-NMVpnPluginUiWidget.other_details" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#libnm-glib-NMVpnPluginUiWidget.other_details">
-<ANCHOR id="NMVpnPluginUiCapability" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiCapability">
-<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS">
-<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS">
-<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS">
-<ANCHOR id="NMVpnPluginUiInterfaceProp" href="libnm-glib/libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiInterfaceProp">
+<ANCHOR id="libnm-glib-NMVpnPluginUi" href="libnm-glib/libnm-glib-NMVpnPluginUi.html">
+<ANCHOR id="libnm-glib-NMVpnPluginUi.synopsis" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#libnm-glib-NMVpnPluginUi.synopsis">
+<ANCHOR id="libnm-glib-NMVpnPluginUi.description" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#libnm-glib-NMVpnPluginUi.description">
+<ANCHOR id="libnm-glib-NMVpnPluginUi.details" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#libnm-glib-NMVpnPluginUi.details">
+<ANCHOR id="NMVpnPluginUiFactory" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiFactory">
+<ANCHOR id="nm-vpn-plugin-ui-factory" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-factory">
+<ANCHOR id="NMVpnPluginUiCapability" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiCapability">
+<ANCHOR id="NM-VPN-PLUGIN-UI-CAPABILITY-NONE:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-CAPABILITY-IMPORT:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-IMPORT:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-CAPABILITY-EXPORT:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-EXPORT:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-CAPABILITY-IPV6:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-IPV6:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS">
+<ANCHOR id="NMVpnPluginUiInterfaceProp" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterfaceProp">
+<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-PROP-FIRST:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-FIRST:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-PROP-NAME:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-NAME:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-PROP-DESC:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-DESC:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-UI-INTERFACE-PROP-SERVICE:CAPS" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-SERVICE:CAPS">
+<ANCHOR id="NMVpnPluginUiInterface" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface">
+<ANCHOR id="nm-vpn-plugin-ui-interface-ui-factory" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-ui-factory">
+<ANCHOR id="nm-vpn-plugin-ui-interface-get-capabilities" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-capabilities">
+<ANCHOR id="nm-vpn-plugin-ui-interface-import" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-import">
+<ANCHOR id="nm-vpn-plugin-ui-interface-export" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-export">
+<ANCHOR id="nm-vpn-plugin-ui-interface-get-suggested-name" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-suggested-name">
+<ANCHOR id="nm-vpn-plugin-ui-interface-delete-connection" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-delete-connection">
+<ANCHOR id="NMVpnPluginUiWidgetInterface" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface">
+<ANCHOR id="nm-vpn-plugin-ui-widget-interface-get-widget" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-get-widget">
+<ANCHOR id="nm-vpn-plugin-ui-widget-interface-update-connection" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-update-connection">
+<ANCHOR id="nm-vpn-plugin-ui-widget-interface-save-secrets" href="libnm-glib/libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-save-secrets">
<ANCHOR id="libnm-glib-nm-vpn-plugin-utils" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html">
-<ANCHOR id="libnm-glib-nm-vpn-plugin-utils.functions" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#libnm-glib-nm-vpn-plugin-utils.functions">
-<ANCHOR id="libnm-glib-nm-vpn-plugin-utils.object-hierarchy" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#libnm-glib-nm-vpn-plugin-utils.object-hierarchy">
+<ANCHOR id="libnm-glib-nm-vpn-plugin-utils.synopsis" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#libnm-glib-nm-vpn-plugin-utils.synopsis">
<ANCHOR id="libnm-glib-nm-vpn-plugin-utils.description" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#libnm-glib-nm-vpn-plugin-utils.description">
-<ANCHOR id="libnm-glib-nm-vpn-plugin-utils.functions_details" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#libnm-glib-nm-vpn-plugin-utils.functions_details">
+<ANCHOR id="libnm-glib-nm-vpn-plugin-utils.details" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#libnm-glib-nm-vpn-plugin-utils.details">
<ANCHOR id="nm-vpn-plugin-utils-read-vpn-details" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-read-vpn-details">
<ANCHOR id="nm-vpn-plugin-utils-get-secret-flags" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-get-secret-flags">
-<ANCHOR id="libnm-glib-nm-vpn-plugin-utils.other_details" href="libnm-glib/libnm-glib-nm-vpn-plugin-utils.html#libnm-glib-nm-vpn-plugin-utils.other_details">
<ANCHOR id="annotation-glossterm-allow-none" href="libnm-glib/annotation-glossary.html#annotation-glossterm-allow-none">
<ANCHOR id="annotation-glossterm-array" href="libnm-glib/annotation-glossary.html#annotation-glossterm-array">
<ANCHOR id="annotation-glossterm-closure" href="libnm-glib/annotation-glossary.html#annotation-glossterm-closure">
@@ -800,3 +1064,4 @@
<ANCHOR id="annotation-glossterm-transfer container" href="libnm-glib/annotation-glossary.html#annotation-glossterm-transfer container">
<ANCHOR id="annotation-glossterm-transfer full" href="libnm-glib/annotation-glossary.html#annotation-glossterm-transfer full">
<ANCHOR id="annotation-glossterm-transfer none" href="libnm-glib/annotation-glossary.html#annotation-glossterm-transfer none">
+<ANCHOR id="annotation-glossterm-type" href="libnm-glib/annotation-glossary.html#annotation-glossterm-type">
diff --git a/docs/libnm-glib/html/left-insensitive.png b/docs/libnm-glib/html/left-insensitive.png
deleted file mode 100644
index 3269393a7..000000000
--- a/docs/libnm-glib/html/left-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/libnm-glib/html/left.png b/docs/libnm-glib/html/left.png
index 2abde032b..2d05b3d5b 100644
--- a/docs/libnm-glib/html/left.png
+++ b/docs/libnm-glib/html/left.png
Binary files differ
diff --git a/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html b/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html
index 41a3ce7c3..2b71816b9 100644
--- a/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html
+++ b/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html
@@ -2,27 +2,30 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMVPNPlugin</title>
+<title>NMVPNPlugin</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMVPNConnection.html" title="NMVPNConnection">
-<link rel="next" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="next" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#libnm-glib-NMVPNPlugin.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#libnm-glib-NMVPNPlugin.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMVPNConnection.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="libnm-glib-NMVpnPluginUiWidget.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMVPNConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="libnm-glib-NMVpnPluginUi.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libnm-glib-NMVPNPlugin.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-glib-NMVPNPlugin.description" class="shortcut">Description</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="libnm-glib-NMVPNPlugin"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -30,348 +33,334 @@
<h2><span class="refentrytitle"><a name="libnm-glib-NMVPNPlugin.top_of_page"></a>NMVPNPlugin</span></h2>
<p>NMVPNPlugin</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-glib-NMVPNPlugin.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS" title="NM_VPN_PLUGIN_DBUS_SERVICE_NAME">NM_VPN_PLUGIN_DBUS_SERVICE_NAME</a>
+#define <a class="link" href="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-STATE:CAPS" title="NM_VPN_PLUGIN_STATE">NM_VPN_PLUGIN_STATE</a>
+enum <a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPluginError" title="enum NMVPNPluginError">NMVPNPluginError</a>;
+ <a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin">NMVPNPlugin</a>;
+ <a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPluginClass" title="NMVPNPluginClass">NMVPNPluginClass</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-error-quark" title="nm_vpn_plugin_error_quark ()">nm_vpn_plugin_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> * <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-connection" title="nm_vpn_plugin_get_connection ()">nm_vpn_plugin_get_connection</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>);
+<span class="returnvalue">NMVPNServiceState</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-state" title="nm_vpn_plugin_get_state ()">nm_vpn_plugin_get_state</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-state" title="nm_vpn_plugin_set_state ()">nm_vpn_plugin_set_state</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><span class="type">NMVPNServiceState</span> state</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-secrets-required" title="nm_vpn_plugin_secrets_required ()">nm_vpn_plugin_secrets_required</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *message</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **hints</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-login-banner" title="nm_vpn_plugin_set_login_banner ()">nm_vpn_plugin_set_login_banner</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *banner</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-failure" title="nm_vpn_plugin_failure ()">nm_vpn_plugin_failure</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><span class="type">NMVPNPluginFailure</span> reason</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-config" title="nm_vpn_plugin_set_config ()">nm_vpn_plugin_set_config</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *config</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip4-config" title="nm_vpn_plugin_set_ip4_config ()">nm_vpn_plugin_set_ip4_config</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *ip4_config</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip6-config" title="nm_vpn_plugin_set_ip6_config ()">nm_vpn_plugin_set_ip6_config</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *ip6_config</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-disconnect" title="nm_vpn_plugin_disconnect ()">nm_vpn_plugin_disconnect</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **err</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-glib-NMVPNPlugin.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
<div class="refsect1">
-<a name="libnm-glib-NMVPNPlugin.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="libnm-glib-NMVPNPlugin.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS"></a><h3>NM_VPN_PLUGIN_DBUS_SERVICE_NAME</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_DBUS_SERVICE_NAME "service-name"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-STATE:CAPS"></a><h3>NM_VPN_PLUGIN_STATE</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_STATE "state"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVPNPluginError"></a><h3>enum NMVPNPluginError</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_PLUGIN_ERROR_GENERAL, /*&lt; nick=General &gt;*/
+ NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS, /*&lt; nick=StartingInProgress &gt;*/
+ NM_VPN_PLUGIN_ERROR_ALREADY_STARTED, /*&lt; nick=AlreadyStarted &gt;*/
+ NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS, /*&lt; nick=StoppingInProgress &gt;*/
+ NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED, /*&lt; nick=AlreadyStopped &gt;*/
+ NM_VPN_PLUGIN_ERROR_WRONG_STATE, /*&lt; nick=WrongState &gt;*/
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, /*&lt; nick=BadArguments &gt;*/
+ NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED, /*&lt; nick=LaunchFailed &gt;*/
+ NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID, /*&lt; nick=ConnectionInvalid &gt;*/
+ NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED /*&lt; nick=InteractiveNotSupported &gt;*/
+} NMVPNPluginError;
+</pre>
+<p>
+Returned by the VPN service plugin to indicate errors.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-error-quark" title="nm_vpn_plugin_error_quark ()">nm_vpn_plugin_error_quark</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-GENERAL:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_GENERAL</code></span></p></td>
+<td>general failure
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-connection" title="nm_vpn_plugin_get_connection ()">nm_vpn_plugin_get_connection</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS</code></span></p></td>
+<td>the plugin is already starting,
+ and another connect request was received
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">NMVPNServiceState</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-state" title="nm_vpn_plugin_get_state ()">nm_vpn_plugin_get_state</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_ALREADY_STARTED</code></span></p></td>
+<td>the plugin is already connected, and
+ another connect request was received
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-state" title="nm_vpn_plugin_set_state ()">nm_vpn_plugin_set_state</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS</code></span></p></td>
+<td>the plugin is already stopping,
+ and another stop request was received
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-login-banner" title="nm_vpn_plugin_set_login_banner ()">nm_vpn_plugin_set_login_banner</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED</code></span></p></td>
+<td>the plugin is already stopped, and
+ another disconnect request was received
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-failure" title="nm_vpn_plugin_failure ()">nm_vpn_plugin_failure</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_WRONG_STATE</code></span></p></td>
+<td>the operation could not be performed in
+ this state
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-config" title="nm_vpn_plugin_set_config ()">nm_vpn_plugin_set_config</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS</code></span></p></td>
+<td>the operation could not be performed as
+ the request contained malformed arguments, or arguments of unexpected type.
+ Usually means that one of the VPN setting data items or secrets was not of
+ the expected type (ie int, string, bool, etc).
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip4-config" title="nm_vpn_plugin_set_ip4_config ()">nm_vpn_plugin_set_ip4_config</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED</code></span></p></td>
+<td>a child process failed to launch
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip6-config" title="nm_vpn_plugin_set_ip6_config ()">nm_vpn_plugin_set_ip6_config</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-CONNECTION-INVALID:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID</code></span></p></td>
+<td>the operation could not be performed
+ because the connection was invalid. Usually means that the connection's
+ VPN setting was missing some required data item or secret.
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-disconnect" title="nm_vpn_plugin_disconnect ()">nm_vpn_plugin_disconnect</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-VPN-PLUGIN-ERROR-INTERACTIVE-NOT-SUPPORTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED</code></span></p></td>
+<td>the operation could not be
+ performed as the plugin does not support interactive operations, such as
+ <code class="function">ConnectInteractive()</code> or <code class="function">NewSecrets()</code>
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVPNPlugin.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS" title="NM_VPN_PLUGIN_DBUS_SERVICE_NAME">NM_VPN_PLUGIN_DBUS_SERVICE_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-STATE:CAPS" title="NM_VPN_PLUGIN_STATE">NM_VPN_PLUGIN_STATE</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPluginError" title="enum NMVPNPluginError">NMVPNPluginError</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVPNPlugin.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">
+<hr>
+<div class="refsect2">
+<a name="NMVPNPlugin"></a><h3>NMVPNPlugin</h3>
+<pre class="programlisting">typedef struct {
+ GObject parent;
+} NMVPNPlugin;
</pre>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVPNPlugin.description"></a><h2>Description</h2>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVPNPlugin.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-error-quark"></a><h3>nm_vpn_plugin_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_vpn_plugin_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<a name="NMVPNPluginClass"></a><h3>NMVPNPluginClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* virtual methods */
+ gboolean (*connect) (NMVPNPlugin *plugin,
+ NMConnection *connection,
+ GError **err);
+
+ gboolean (*need_secrets) (NMVPNPlugin *plugin,
+ NMConnection *connection,
+ char **setting_name,
+ GError **error);
+
+ gboolean (*disconnect) (NMVPNPlugin *plugin,
+ GError **err);
+
+ /* Signals */
+ void (*state_changed) (NMVPNPlugin *plugin,
+ NMVPNServiceState state);
+
+ void (*ip4_config) (NMVPNPlugin *plugin,
+ GHashTable *ip4_config);
+
+ void (*login_banner) (NMVPNPlugin *plugin,
+ const char *banner);
+
+ void (*failure) (NMVPNPlugin *plugin,
+ NMVPNPluginFailure reason);
+
+ void (*quit) (NMVPNPlugin *plugin);
+
+ void (*config) (NMVPNPlugin *plugin,
+ GHashTable *config);
+
+ void (*ip6_config) (NMVPNPlugin *plugin,
+ GHashTable *config);
+
+ /* more methods */
+ gboolean (*new_secrets) (NMVPNPlugin *plugin,
+ NMConnection *connection,
+ GError **error);
+
+ gboolean (*connect_interactive) (NMVPNPlugin *plugin,
+ NMConnection *connection,
+ GHashTable *details,
+ GError **error);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+} NMVPNPluginClass;
+</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.3.28.7.2.5"></a><h4>Returns</h4>
-<p></p>
-</div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-get-connection"></a><h3>nm_vpn_plugin_get_connection ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> *
-nm_vpn_plugin_get_connection (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>);</pre>
+<a name="nm-vpn-plugin-error-quark"></a><h3>nm_vpn_plugin_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_vpn_plugin_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.3.28.7.3.5"></a><h4>Returns</h4>
-<p></p>
-</div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-get-state"></a><h3>nm_vpn_plugin_get_state ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMVPNServiceState</span>
-nm_vpn_plugin_get_state (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>);</pre>
+<a name="nm-vpn-plugin-get-connection"></a><h3>nm_vpn_plugin_get_connection ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="returnvalue">DBusGConnection</span></a> * nm_vpn_plugin_get_connection (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>);</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.3.28.7.4.5"></a><h4>Returns</h4>
-<p></p>
-</div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-set-state"></a><h3>nm_vpn_plugin_set_state ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_vpn_plugin_set_state (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>,
- <em class="parameter"><code><span class="type">NMVPNServiceState</span> state</code></em>);</pre>
+<a name="nm-vpn-plugin-get-state"></a><h3>nm_vpn_plugin_get_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMVPNServiceState</span> nm_vpn_plugin_get_state (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-set-login-banner"></a><h3>nm_vpn_plugin_set_login_banner ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_vpn_plugin_set_login_banner (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *banner</code></em>);</pre>
+<a name="nm-vpn-plugin-set-state"></a><h3>nm_vpn_plugin_set_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_vpn_plugin_set_state (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><span class="type">NMVPNServiceState</span> state</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-failure"></a><h3>nm_vpn_plugin_failure ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_vpn_plugin_failure (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>,
- <em class="parameter"><code><span class="type">NMVPNPluginFailure</span> reason</code></em>);</pre>
+<a name="nm-vpn-plugin-secrets-required"></a><h3>nm_vpn_plugin_secrets_required ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_vpn_plugin_secrets_required (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *message</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **hints</code></em>);</pre>
<p>
+Called by VPN plugin implementations to signal to NetworkManager that secrets
+are required during the connection process. This signal may be used to
+request new secrets when the secrets originally provided by NetworkManager
+are insufficient, or the VPN process indicates that it needs additional
+information to complete the request.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>plugin</code></em> :</span></p></td>
+<td>the <a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>an information message about why secrets are required, if any</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hints</code></em> :</span></p></td>
+<td>VPN specific secret names for required new secrets</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-set-config"></a><h3>nm_vpn_plugin_set_config ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_vpn_plugin_set_config (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *config</code></em>);</pre>
+<a name="nm-vpn-plugin-set-login-banner"></a><h3>nm_vpn_plugin_set_login_banner ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_vpn_plugin_set_login_banner (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *banner</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-set-ip4-config"></a><h3>nm_vpn_plugin_set_ip4_config ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_vpn_plugin_set_ip4_config (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *ip4_config</code></em>);</pre>
+<a name="nm-vpn-plugin-failure"></a><h3>nm_vpn_plugin_failure ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_vpn_plugin_failure (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><span class="type">NMVPNPluginFailure</span> reason</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-set-ip6-config"></a><h3>nm_vpn_plugin_set_ip6_config ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_vpn_plugin_set_ip6_config (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *ip6_config</code></em>);</pre>
+<a name="nm-vpn-plugin-set-config"></a><h3>nm_vpn_plugin_set_config ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_vpn_plugin_set_config (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *config</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-disconnect"></a><h3>nm_vpn_plugin_disconnect ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_vpn_plugin_disconnect (<em class="parameter"><code><span class="type">NMVPNPlugin</span> *plugin</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **err</code></em>);</pre>
+<a name="nm-vpn-plugin-set-ip4-config"></a><h3>nm_vpn_plugin_set_ip4_config ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_vpn_plugin_set_ip4_config (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *ip4_config</code></em>);</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.3.28.7.11.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVPNPlugin.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS"></a><h3>NM_VPN_PLUGIN_DBUS_SERVICE_NAME</h3>
-<pre class="programlisting">#define NM_VPN_PLUGIN_DBUS_SERVICE_NAME "service-name"
-</pre>
+<a name="nm-vpn-plugin-set-ip6-config"></a><h3>nm_vpn_plugin_set_ip6_config ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_vpn_plugin_set_ip6_config (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *ip6_config</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-VPN-PLUGIN-STATE:CAPS"></a><h3>NM_VPN_PLUGIN_STATE</h3>
-<pre class="programlisting">#define NM_VPN_PLUGIN_STATE "state"
-</pre>
+<a name="nm-vpn-plugin-disconnect"></a><h3>nm_vpn_plugin_disconnect ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_disconnect (<em class="parameter"><code><a class="link" href="libnm-glib-NMVPNPlugin.html#NMVPNPlugin" title="NMVPNPlugin"><span class="type">NMVPNPlugin</span></a> *plugin</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **err</code></em>);</pre>
<p>
</p>
</div>
-<hr>
-<div class="refsect2">
-<a name="NMVPNPluginError"></a><h3>enum NMVPNPluginError</h3>
-<p>Returned by the VPN service plugin to indicate errors.</p>
-<div class="refsect3">
-<a name="id-1.3.28.8.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-GENERAL:CAPS"></a>NM_VPN_PLUGIN_ERROR_GENERAL</p></td>
-<td class="enum_member_description">
-<p>general failure</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS"></a>NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS</p></td>
-<td class="enum_member_description">
-<p>the plugin is already starting,
- and another connect request was received</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS"></a>NM_VPN_PLUGIN_ERROR_ALREADY_STARTED</p></td>
-<td class="enum_member_description">
-<p>the plugin is already connected, and
- another connect request was received</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS"></a>NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS</p></td>
-<td class="enum_member_description">
-<p>the plugin is already stopping,
- and another stop request was received</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS"></a>NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED</p></td>
-<td class="enum_member_description">
-<p>the plugin is already stopped, and
- another disconnect request was received</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS"></a>NM_VPN_PLUGIN_ERROR_WRONG_STATE</p></td>
-<td class="enum_member_description">
-<p>the operation could not be performed in
- this state</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS"></a>NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS</p></td>
-<td class="enum_member_description">
-<p>the operation could not be performed as
- the request contained malformed arguments, or arguments of unexpected type.
- Usually means that one of the VPN setting data items or secrets was not of
- the expected type (ie int, string, bool, etc).</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS"></a>NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED</p></td>
-<td class="enum_member_description">
-<p>a child process failed to launch</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-ERROR-CONNECTION-INVALID:CAPS"></a>NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID</p></td>
-<td class="enum_member_description">
-<p>the operation could not be performed
- because the connection was invalid. Usually means that the connection's
- VPN setting was missing some required data item or secret.</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
new file mode 100644
index 000000000..44ec7e14d
--- /dev/null
+++ b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
@@ -0,0 +1,397 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMVpnPluginUi</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm-glib Reference Manual">
+<link rel="up" href="ch02.html" title="libnm-glib API Reference">
+<link rel="prev" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">
+<link rel="next" href="libnm-glib-nm-vpn-plugin-utils.html" title="nm-vpn-plugin-utils">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libnm-glib-NMVPNPlugin.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="libnm-glib-nm-vpn-plugin-utils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libnm-glib-NMVpnPluginUi.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-glib-NMVpnPluginUi.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-glib-NMVpnPluginUi"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-glib-NMVpnPluginUi.top_of_page"></a>NMVpnPluginUi</span></h2>
+<p>NMVpnPluginUi</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-glib-NMVpnPluginUi.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="returnvalue">NMVpnPluginUiInterface</span></a> * (<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiFactory" title="NMVpnPluginUiFactory ()">*NMVpnPluginUiFactory</a>) (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="returnvalue">NMVpnPluginUiInterface</span></a> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-factory" title="nm_vpn_plugin_ui_factory ()">nm_vpn_plugin_ui_factory</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+enum <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiCapability" title="enum NMVpnPluginUiCapability">NMVpnPluginUiCapability</a>;
+#define <a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_NAME">NM_VPN_PLUGIN_UI_INTERFACE_NAME</a>
+#define <a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_DESC">NM_VPN_PLUGIN_UI_INTERFACE_DESC</a>
+#define <a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_SERVICE">NM_VPN_PLUGIN_UI_INTERFACE_SERVICE</a>
+enum <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterfaceProp" title="enum NMVpnPluginUiInterfaceProp">NMVpnPluginUiInterfaceProp</a>;
+struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface">NMVpnPluginUiInterface</a>;
+<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="returnvalue">NMVpnPluginUiWidgetInterface</span></a> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-ui-factory" title="nm_vpn_plugin_ui_interface_ui_factory ()">nm_vpn_plugin_ui_interface_ui_factory</a>
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-capabilities" title="nm_vpn_plugin_ui_interface_get_capabilities ()">nm_vpn_plugin_ui_interface_get_capabilities</a>
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>);
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-import" title="nm_vpn_plugin_ui_interface_import ()">nm_vpn_plugin_ui_interface_import</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-export" title="nm_vpn_plugin_ui_interface_export ()">nm_vpn_plugin_ui_interface_export</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-suggested-name" title="nm_vpn_plugin_ui_interface_get_suggested_name ()">nm_vpn_plugin_ui_interface_get_suggested_name</a>
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-delete-connection" title="nm_vpn_plugin_ui_interface_delete_connection ()">nm_vpn_plugin_ui_interface_delete_connection</a>
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface">NMVpnPluginUiWidgetInterface</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-get-widget" title="nm_vpn_plugin_ui_widget_interface_get_widget ()">nm_vpn_plugin_ui_widget_interface_get_widget</a>
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-update-connection" title="nm_vpn_plugin_ui_widget_interface_update_connection ()">nm_vpn_plugin_ui_widget_interface_update_connection</a>
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-save-secrets" title="nm_vpn_plugin_ui_widget_interface_save_secrets ()">nm_vpn_plugin_ui_widget_interface_save_secrets</a>
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-glib-NMVpnPluginUi.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-glib-NMVpnPluginUi.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMVpnPluginUiFactory"></a><h3>NMVpnPluginUiFactory ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="returnvalue">NMVpnPluginUiInterface</span></a> * (*NMVpnPluginUiFactory) (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-factory"></a><h3>nm_vpn_plugin_ui_factory ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="returnvalue">NMVpnPluginUiInterface</span></a> * nm_vpn_plugin_ui_factory (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnPluginUiCapability"></a><h3>enum NMVpnPluginUiCapability</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_PLUGIN_UI_CAPABILITY_NONE = 0x00,
+ NM_VPN_PLUGIN_UI_CAPABILITY_IMPORT = 0x01,
+ NM_VPN_PLUGIN_UI_CAPABILITY_EXPORT = 0x02,
+ NM_VPN_PLUGIN_UI_CAPABILITY_IPV6 = 0x04
+} NMVpnPluginUiCapability;
+</pre>
+<p>
+Flags that indicate to UI programs certain capabilities of the plugin.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_CAPABILITY_NONE</code></span></p></td>
+<td>unknown or no capability
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-IMPORT:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_CAPABILITY_IMPORT</code></span></p></td>
+<td>the plugin can import new connections
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-EXPORT:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_CAPABILITY_EXPORT</code></span></p></td>
+<td>the plugin can export connections
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-IPV6:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_CAPABILITY_IPV6</code></span></p></td>
+<td>the plugin supports IPv6 addressing
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS"></a><h3>NM_VPN_PLUGIN_UI_INTERFACE_NAME</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_UI_INTERFACE_NAME "name"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS"></a><h3>NM_VPN_PLUGIN_UI_INTERFACE_DESC</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_UI_INTERFACE_DESC "desc"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS"></a><h3>NM_VPN_PLUGIN_UI_INTERFACE_SERVICE</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_UI_INTERFACE_SERVICE "service"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnPluginUiInterfaceProp"></a><h3>enum NMVpnPluginUiInterfaceProp</h3>
+<pre class="programlisting">typedef enum {
+ /* private */
+ NM_VPN_PLUGIN_UI_INTERFACE_PROP_FIRST = 0x1000,
+
+ /* public */
+ NM_VPN_PLUGIN_UI_INTERFACE_PROP_NAME = NM_VPN_PLUGIN_UI_INTERFACE_PROP_FIRST,
+ NM_VPN_PLUGIN_UI_INTERFACE_PROP_DESC,
+ NM_VPN_PLUGIN_UI_INTERFACE_PROP_SERVICE
+} NMVpnPluginUiInterfaceProp;
+</pre>
+<p>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> property numbers that plugins should override to provide certain
+information to UI programs.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-INTERFACE-PROP-FIRST:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_INTERFACE_PROP_FIRST</code></span></p></td>
+<td>
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-INTERFACE-PROP-NAME:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_INTERFACE_PROP_NAME</code></span></p></td>
+<td>the VPN plugin's name
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-INTERFACE-PROP-DESC:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_INTERFACE_PROP_DESC</code></span></p></td>
+<td>description of the VPN plugin and what
+VPN services it supports
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-UI-INTERFACE-PROP-SERVICE:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_UI_INTERFACE_PROP_SERVICE</code></span></p></td>
+<td>the D-Bus service name used by the
+plugin's VPN service daemon
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnPluginUiInterface"></a><h3>struct NMVpnPluginUiInterface</h3>
+<pre class="programlisting">struct NMVpnPluginUiInterface {
+ GTypeInterface g_iface;
+
+ /* Plugin's factory function that returns a GObject that implements
+ * NMVpnPluginUiWidgetInterface, pre-filled with values from 'connection'
+ * if non-NULL.
+ */
+ NMVpnPluginUiWidgetInterface * (*ui_factory) (NMVpnPluginUiInterface *iface,
+ NMConnection *connection,
+ GError **error);
+
+ /* Plugin's capabiltity function that returns a bitmask of capabilities
+ * described by NM_VPN_PLUGIN_UI_CAPABILITY_* defines.
+ */
+ guint32 (*get_capabilities) (NMVpnPluginUiInterface *iface);
+
+ /* Try to import a connection from the specified path. On success, return a
+ * partial NMConnection object. On error, return NULL and set 'error' with
+ * additional information. Note that 'error' can be NULL, in which case no
+ * additional error information should be provided.
+ */
+ NMConnection * (*import_from_file) (NMVpnPluginUiInterface *iface,
+ const char *path,
+ GError **error);
+
+ /* Export the given connection to the specified path. Return TRUE on success.
+ * On error, return FALSE and set 'error' with additional error information.
+ * Note that 'error' can be NULL, in which case no additional error information
+ * should be provided.
+ */
+ gboolean (*export_to_file) (NMVpnPluginUiInterface *iface,
+ const char *path,
+ NMConnection *connection,
+ GError **error);
+
+ /* For a given connection, return a suggested file name. Returned value should
+ * be NULL or a suggested file name allocated via g_malloc/g_new/etc to be freed
+ * by the caller.
+ */
+ char * (*get_suggested_name) (NMVpnPluginUiInterface *iface, NMConnection *connection);
+
+ /* Deprecated and no longer used */
+ gboolean (*delete_connection) (NMVpnPluginUiInterface *iface, NMConnection *connection, GError **error);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+};
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-interface-ui-factory"></a><h3>nm_vpn_plugin_ui_interface_ui_factory ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="returnvalue">NMVpnPluginUiWidgetInterface</span></a> * nm_vpn_plugin_ui_interface_ui_factory
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-interface-get-capabilities"></a><h3>nm_vpn_plugin_ui_interface_get_capabilities ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_vpn_plugin_ui_interface_get_capabilities
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-interface-import"></a><h3>nm_vpn_plugin_ui_interface_import ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * nm_vpn_plugin_ui_interface_import (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-interface-export"></a><h3>nm_vpn_plugin_ui_interface_export ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_interface_export (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-interface-get-suggested-name"></a><h3>nm_vpn_plugin_ui_interface_get_suggested_name ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_vpn_plugin_ui_interface_get_suggested_name
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-interface-delete-connection"></a><h3>nm_vpn_plugin_ui_interface_delete_connection ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_interface_delete_connection
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnPluginUiWidgetInterface"></a><h3>struct NMVpnPluginUiWidgetInterface</h3>
+<pre class="programlisting">struct NMVpnPluginUiWidgetInterface {
+ GTypeInterface g_iface;
+
+ /* Return the GtkWidget for the VPN's UI */
+ GObject * (*get_widget) (NMVpnPluginUiWidgetInterface *iface);
+
+ /* Called to save the user-entered options to the connection object. Should
+ * return FALSE and set 'error' if the current options are invalid. 'error'
+ * should contain enough information for the plugin to determine which UI
+ * widget is invalid at a later point in time. For example, creating unique
+ * error codes for what error occurred and populating the message field
+ * of 'error' with the name of the invalid property.
+ */
+ gboolean (*update_connection) (NMVpnPluginUiWidgetInterface *iface,
+ NMConnection *connection,
+ GError **error);
+
+ /* Deprecated and no longer used */
+ gboolean (*save_secrets) (NMVpnPluginUiWidgetInterface *iface,
+ NMConnection *connection,
+ GError **error);
+
+ /* Emitted when the value of a UI widget changes. May trigger a validity
+ * check via update_connection() to write values to the connection */
+ void (*changed) (NMVpnPluginUiWidgetInterface *iface);
+};
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-widget-interface-get-widget"></a><h3>nm_vpn_plugin_ui_widget_interface_get_widget ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> * nm_vpn_plugin_ui_widget_interface_get_widget
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-widget-interface-update-connection"></a><h3>nm_vpn_plugin_ui_widget_interface_update_connection ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_widget_interface_update_connection
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-plugin-ui-widget-interface-save-secrets"></a><h3>nm_vpn_plugin_ui_widget_interface_save_secrets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_widget_interface_save_secrets
+ (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUiWidget.html b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUiWidget.html
deleted file mode 100644
index 01eb80ee3..000000000
--- a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUiWidget.html
+++ /dev/null
@@ -1,446 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: NMVpnPluginUiWidget</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="libnm-glib Reference Manual">
-<link rel="up" href="ch02.html" title="libnm-glib API Reference">
-<link rel="prev" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">
-<link rel="next" href="libnm-glib-nm-vpn-plugin-utils.html" title="nm-vpn-plugin-utils">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#libnm-glib-NMVpnPluginUiWidget.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#libnm-glib-NMVpnPluginUiWidget.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="libnm-glib-NMVPNPlugin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="libnm-glib-nm-vpn-plugin-utils.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="libnm-glib-NMVpnPluginUiWidget"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="libnm-glib-NMVpnPluginUiWidget.top_of_page"></a>NMVpnPluginUiWidget</span></h2>
-<p>NMVpnPluginUiWidget</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="libnm-glib-NMVpnPluginUiWidget.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMVpnPluginUiInterface</span> *
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiFactory" title="NMVpnPluginUiFactory ()">*NMVpnPluginUiFactory</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMVpnPluginUiInterface</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-factory" title="nm_vpn_plugin_ui_factory ()">nm_vpn_plugin_ui_factory</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">NMVpnPluginUiWidgetInterface</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-ui-factory" title="nm_vpn_plugin_ui_interface_ui_factory ()">nm_vpn_plugin_ui_interface_ui_factory</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-capabilities" title="nm_vpn_plugin_ui_interface_get_capabilities ()">nm_vpn_plugin_ui_interface_get_capabilities</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-import" title="nm_vpn_plugin_ui_interface_import ()">nm_vpn_plugin_ui_interface_import</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-export" title="nm_vpn_plugin_ui_interface_export ()">nm_vpn_plugin_ui_interface_export</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-suggested-name" title="nm_vpn_plugin_ui_interface_get_suggested_name ()">nm_vpn_plugin_ui_interface_get_suggested_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-delete-connection" title="nm_vpn_plugin_ui_interface_delete_connection ()">nm_vpn_plugin_ui_interface_delete_connection</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-get-widget" title="nm_vpn_plugin_ui_widget_interface_get_widget ()">nm_vpn_plugin_ui_widget_interface_get_widget</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-update-connection" title="nm_vpn_plugin_ui_widget_interface_update_connection ()">nm_vpn_plugin_ui_widget_interface_update_connection</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-save-secrets" title="nm_vpn_plugin_ui_widget_interface_save_secrets ()">nm_vpn_plugin_ui_widget_interface_save_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVpnPluginUiWidget.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiCapability" title="enum NMVpnPluginUiCapability">NMVpnPluginUiCapability</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_NAME">NM_VPN_PLUGIN_UI_INTERFACE_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_DESC">NM_VPN_PLUGIN_UI_INTERFACE_DESC</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS" title="NM_VPN_PLUGIN_UI_INTERFACE_SERVICE">NM_VPN_PLUGIN_UI_INTERFACE_SERVICE</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiInterfaceProp" title="enum NMVpnPluginUiInterfaceProp">NMVpnPluginUiInterfaceProp</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVpnPluginUiWidget.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">
-</pre>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVpnPluginUiWidget.description"></a><h2>Description</h2>
-<p>
-</p>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVpnPluginUiWidget.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="NMVpnPluginUiFactory"></a><h3>NMVpnPluginUiFactory ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMVpnPluginUiInterface</span> *
-<span class="c_punctuation">(</span>*NMVpnPluginUiFactory<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.2.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-factory"></a><h3>nm_vpn_plugin_ui_factory ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMVpnPluginUiInterface</span> *
-nm_vpn_plugin_ui_factory (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.3.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-interface-ui-factory"></a><h3>nm_vpn_plugin_ui_interface_ui_factory ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMVpnPluginUiWidgetInterface</span> *
-nm_vpn_plugin_ui_interface_ui_factory (<em class="parameter"><code><span class="type">NMVpnPluginUiInterface</span> *iface</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.4.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-interface-get-capabilities"></a><h3>nm_vpn_plugin_ui_interface_get_capabilities ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_vpn_plugin_ui_interface_get_capabilities
- (<em class="parameter"><code><span class="type">NMVpnPluginUiInterface</span> *iface</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.5.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-interface-import"></a><h3>nm_vpn_plugin_ui_interface_import ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> *
-nm_vpn_plugin_ui_interface_import (<em class="parameter"><code><span class="type">NMVpnPluginUiInterface</span> *iface</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.6.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-interface-export"></a><h3>nm_vpn_plugin_ui_interface_export ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_vpn_plugin_ui_interface_export (<em class="parameter"><code><span class="type">NMVpnPluginUiInterface</span> *iface</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.7.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-interface-get-suggested-name"></a><h3>nm_vpn_plugin_ui_interface_get_suggested_name ()</h3>
-<pre class="programlisting"><span class="returnvalue">char</span> *
-nm_vpn_plugin_ui_interface_get_suggested_name
- (<em class="parameter"><code><span class="type">NMVpnPluginUiInterface</span> *iface</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.8.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-interface-delete-connection"></a><h3>nm_vpn_plugin_ui_interface_delete_connection ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_vpn_plugin_ui_interface_delete_connection
- (<em class="parameter"><code><span class="type">NMVpnPluginUiInterface</span> *iface</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.9.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-widget-interface-get-widget"></a><h3>nm_vpn_plugin_ui_widget_interface_get_widget ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="returnvalue">GObject</span></a> *
-nm_vpn_plugin_ui_widget_interface_get_widget
- (<em class="parameter"><code><span class="type">NMVpnPluginUiWidgetInterface</span> *iface</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.10.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-widget-interface-update-connection"></a><h3>nm_vpn_plugin_ui_widget_interface_update_connection ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_vpn_plugin_ui_widget_interface_update_connection
- (<em class="parameter"><code><span class="type">NMVpnPluginUiWidgetInterface</span> *iface</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.11.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-vpn-plugin-ui-widget-interface-save-secrets"></a><h3>nm_vpn_plugin_ui_widget_interface_save_secrets ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_vpn_plugin_ui_widget_interface_save_secrets
- (<em class="parameter"><code><span class="type">NMVpnPluginUiWidgetInterface</span> *iface</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.3.29.7.12.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-NMVpnPluginUiWidget.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NMVpnPluginUiCapability"></a><h3>enum NMVpnPluginUiCapability</h3>
-<p>Flags that indicate to UI programs certain capabilities of the plugin.</p>
-<div class="refsect3">
-<a name="id-1.3.29.8.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-NONE:CAPS"></a>NM_VPN_PLUGIN_UI_CAPABILITY_NONE</p></td>
-<td class="enum_member_description">
-<p>unknown or no capability</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-IMPORT:CAPS"></a>NM_VPN_PLUGIN_UI_CAPABILITY_IMPORT</p></td>
-<td class="enum_member_description">
-<p>the plugin can import new connections</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-EXPORT:CAPS"></a>NM_VPN_PLUGIN_UI_CAPABILITY_EXPORT</p></td>
-<td class="enum_member_description">
-<p>the plugin can export connections</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-UI-CAPABILITY-IPV6:CAPS"></a>NM_VPN_PLUGIN_UI_CAPABILITY_IPV6</p></td>
-<td class="enum_member_description">
-<p>the plugin supports IPv6 addressing</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS"></a><h3>NM_VPN_PLUGIN_UI_INTERFACE_NAME</h3>
-<pre class="programlisting">#define NM_VPN_PLUGIN_UI_INTERFACE_NAME "name"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS"></a><h3>NM_VPN_PLUGIN_UI_INTERFACE_DESC</h3>
-<pre class="programlisting">#define NM_VPN_PLUGIN_UI_INTERFACE_DESC "desc"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS"></a><h3>NM_VPN_PLUGIN_UI_INTERFACE_SERVICE</h3>
-<pre class="programlisting">#define NM_VPN_PLUGIN_UI_INTERFACE_SERVICE "service"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMVpnPluginUiInterfaceProp"></a><h3>enum NMVpnPluginUiInterfaceProp</h3>
-<p><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> property numbers that plugins should override to provide certain
-information to UI programs.</p>
-<div class="refsect3">
-<a name="id-1.3.29.8.6.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-UI-INTERFACE-PROP-NAME:CAPS"></a>NM_VPN_PLUGIN_UI_INTERFACE_PROP_NAME</p></td>
-<td class="enum_member_description">
-<p>the VPN plugin's name</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-UI-INTERFACE-PROP-DESC:CAPS"></a>NM_VPN_PLUGIN_UI_INTERFACE_PROP_DESC</p></td>
-<td class="enum_member_description">
-<p>description of the VPN plugin and what
-VPN services it supports</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-VPN-PLUGIN-UI-INTERFACE-PROP-SERVICE:CAPS"></a>NM_VPN_PLUGIN_UI_INTERFACE_PROP_SERVICE</p></td>
-<td class="enum_member_description">
-<p>the D-Bus service name used by the
-plugin's VPN service daemon</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>
- Generated by GTK-Doc V1.20</div>
-</body>
-</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/libnm-glib-nm-types.html b/docs/libnm-glib/html/libnm-glib-nm-types.html
index c54f111e1..3793ddcd8 100644
--- a/docs/libnm-glib/html/libnm-glib-nm-types.html
+++ b/docs/libnm-glib/html/libnm-glib-nm-types.html
@@ -2,27 +2,30 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: nm-types</title>
+<title>nm-types</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
<link rel="prev" href="NMRemoteSettings.html" title="NMRemoteSettings">
<link rel="next" href="NMSecretAgent.html" title="NMSecretAgent">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#libnm-glib-nm-types.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#libnm-glib-nm-types.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMRemoteSettings.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSecretAgent.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMRemoteSettings.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="NMSecretAgent.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libnm-glib-nm-types.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-glib-nm-types.description" class="shortcut">Description</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="libnm-glib-nm-types"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -30,12 +33,11 @@
<h2><span class="refentrytitle"><a name="libnm-glib-nm-types.top_of_page"></a>nm-types</span></h2>
<p>nm-types</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="libnm-glib-nm-types.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">
-</pre>
+<div class="refsynopsisdiv">
+<a name="libnm-glib-nm-types.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"></pre>
</div>
<div class="refsect1">
<a name="libnm-glib-nm-types.description"></a><h2>Description</h2>
@@ -43,14 +45,11 @@
</p>
</div>
<div class="refsect1">
-<a name="libnm-glib-nm-types.functions_details"></a><h2>Functions</h2>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-nm-types.other_details"></a><h2>Types and Values</h2>
+<a name="libnm-glib-nm-types.details"></a><h2>Details</h2>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/libnm-glib-nm-vpn-plugin-utils.html b/docs/libnm-glib/html/libnm-glib-nm-vpn-plugin-utils.html
index cbb16e38b..0d883d082 100644
--- a/docs/libnm-glib/html/libnm-glib-nm-vpn-plugin-utils.html
+++ b/docs/libnm-glib/html/libnm-glib-nm-vpn-plugin-utils.html
@@ -2,27 +2,30 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: nm-vpn-plugin-utils</title>
+<title>nm-vpn-plugin-utils</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="ch02.html" title="libnm-glib API Reference">
-<link rel="prev" href="libnm-glib-NMVpnPluginUiWidget.html" title="NMVpnPluginUiWidget">
+<link rel="prev" href="libnm-glib-NMVpnPluginUi.html" title="NMVpnPluginUi">
<link rel="next" href="object-tree.html" title="Object Hierarchy">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#libnm-glib-nm-vpn-plugin-utils.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#libnm-glib-nm-vpn-plugin-utils.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="libnm-glib-NMVpnPluginUiWidget.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="object-tree.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libnm-glib-NMVpnPluginUi.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="object-tree.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libnm-glib-nm-vpn-plugin-utils.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-glib-nm-vpn-plugin-utils.description" class="shortcut">Description</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="libnm-glib-nm-vpn-plugin-utils"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -30,38 +33,18 @@
<h2><span class="refentrytitle"><a name="libnm-glib-nm-vpn-plugin-utils.top_of_page"></a>nm-vpn-plugin-utils</span></h2>
<p>nm-vpn-plugin-utils</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="libnm-glib-nm-vpn-plugin-utils.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-read-vpn-details" title="nm_vpn_plugin_utils_read_vpn_details ()">nm_vpn_plugin_utils_read_vpn_details</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-get-secret-flags" title="nm_vpn_plugin_utils_get_secret_flags ()">nm_vpn_plugin_utils_get_secret_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-nm-vpn-plugin-utils.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">
+<div class="refsynopsisdiv">
+<a name="libnm-glib-nm-vpn-plugin-utils.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-read-vpn-details" title="nm_vpn_plugin_utils_read_vpn_details ()">nm_vpn_plugin_utils_read_vpn_details</a>
+ (<em class="parameter"><code><span class="type">int</span> fd</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_data</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_secrets</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-get-secret-flags" title="nm_vpn_plugin_utils_get_secret_flags ()">nm_vpn_plugin_utils_get_secret_flags</a>
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *data</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> *out_flags</code></em>);
</pre>
</div>
<div class="refsect1">
@@ -70,103 +53,91 @@
</p>
</div>
<div class="refsect1">
-<a name="libnm-glib-nm-vpn-plugin-utils.functions_details"></a><h2>Functions</h2>
+<a name="libnm-glib-nm-vpn-plugin-utils.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-vpn-plugin-utils-read-vpn-details"></a><h3>nm_vpn_plugin_utils_read_vpn_details ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_vpn_plugin_utils_read_vpn_details (<em class="parameter"><code><span class="type">int</span> fd</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_data</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_secrets</code></em>);</pre>
-<p>Parses key/value pairs from a file descriptor (normally stdin) passed by
-an applet when the applet calls the authentication dialog of the VPN plugin.</p>
-<div class="refsect3">
-<a name="id-1.3.30.6.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-vpn-plugin-utils-read-vpn-details"></a><h3>nm_vpn_plugin_utils_read_vpn_details ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_utils_read_vpn_details
+ (<em class="parameter"><code><span class="type">int</span> fd</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_data</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_secrets</code></em>);</pre>
+<p>
+Parses key/value pairs from a file descriptor (normally stdin) passed by
+an applet when the applet calls the authentication dialog of the VPN plugin.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>fd</p></td>
-<td class="parameter_description"><p>file descriptor to read from, usually stdin (0)</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>file descriptor to read from, usually stdin (0)</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_data</p></td>
-<td class="parameter_description"><p> on successful return, a hash table
-(mapping char*:char*) containing the key/value pairs of VPN data items. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>out_data</code></em> :</span></p></td>
+<td>on successful return, a hash table
+(mapping char*:char*) containing the key/value pairs of VPN data items. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_secrets</p></td>
-<td class="parameter_description"><p> on successful return, a hash table
-(mapping char*:char*) containing the key/value pairsof VPN secrets. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>out_secrets</code></em> :</span></p></td>
+<td>on successful return, a hash table
+(mapping char*:char*) containing the key/value pairsof VPN secrets. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if reading values was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.30.6.2.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if reading values was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-vpn-plugin-utils-get-secret-flags"></a><h3>nm_vpn_plugin_utils_get_secret_flags ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_vpn_plugin_utils_get_secret_flags (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *data</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
- <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> *out_flags</code></em>);</pre>
-<p>Given a VPN secret key name, attempts to find the corresponding flags data
-item in <em class="parameter"><code>data</code></em>
-. If found, converts the flags data item to
-<a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> and returns it.</p>
-<div class="refsect3">
-<a name="id-1.3.30.6.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-vpn-plugin-utils-get-secret-flags"></a><h3>nm_vpn_plugin_utils_get_secret_flags ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_utils_get_secret_flags
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *data</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> *out_flags</code></em>);</pre>
+<p>
+Given a VPN secret key name, attempts to find the corresponding flags data
+item in <em class="parameter"><code>data</code></em>. If found, converts the flags data item to
+<a href="https://developer.gnome.org/libnm-util/0.9/NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> and returns it.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>hash table containing VPN key/value pair data items</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>hash table containing VPN key/value pair data items</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>secret_name</code></em> :</span></p></td>
+<td>VPN secret key name for which to retrieve flags for</td>
</tr>
<tr>
-<td class="parameter_name"><p>secret_name</p></td>
-<td class="parameter_description"><p>VPN secret key name for which to retrieve flags for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_flags</code></em> :</span></p></td>
+<td>on success, the flags associated with <em class="parameter"><code>secret_name</code></em>. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_flags</p></td>
-<td class="parameter_description"><p> on success, the flags associated with <em class="parameter"><code>secret_name</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the flag data item was found and successfully converted
+to flags, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.3.30.6.3.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the flag data item was found and successfully converted
-to flags, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="libnm-glib-nm-vpn-plugin-utils.other_details"></a><h2>Types and Values</h2>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/libnm-glib.devhelp2 b/docs/libnm-glib/html/libnm-glib.devhelp2
index 4e60b47e7..f552f3e18 100644
--- a/docs/libnm-glib/html/libnm-glib.devhelp2
+++ b/docs/libnm-glib/html/libnm-glib.devhelp2
@@ -15,6 +15,8 @@
<sub name="NMDeviceAdsl" link="NMDeviceAdsl.html"/>
<sub name="NMDeviceBond" link="NMDeviceBond.html"/>
<sub name="NMDeviceBridge" link="NMDeviceBridge.html"/>
+ <sub name="NMDeviceTeam" link="NMDeviceTeam.html"/>
+ <sub name="NMDeviceGeneric" link="NMDeviceGeneric.html"/>
<sub name="NMDeviceInfiniband" link="NMDeviceInfiniband.html"/>
<sub name="NMDeviceVlan" link="NMDeviceVlan.html"/>
<sub name="NMDeviceOlpcMesh" link="NMDeviceOlpcMesh.html"/>
@@ -31,7 +33,7 @@
<sub name="NMSecretAgent" link="NMSecretAgent.html"/>
<sub name="NMVPNConnection" link="NMVPNConnection.html"/>
<sub name="NMVPNPlugin" link="libnm-glib-NMVPNPlugin.html"/>
- <sub name="NMVpnPluginUiWidget" link="libnm-glib-NMVpnPluginUiWidget.html"/>
+ <sub name="NMVpnPluginUi" link="libnm-glib-NMVpnPluginUi.html"/>
<sub name="nm-vpn-plugin-utils" link="libnm-glib-nm-vpn-plugin-utils.html"/>
</sub>
<sub name="Object Hierarchy" link="object-tree.html"/>
@@ -39,44 +41,9 @@
<sub name="Annotation Glossary" link="annotation-glossary.html"/>
</chapters>
<functions>
- <keyword type="function" name="nm_client_new ()" link="NMClient.html#nm-client-new"/>
- <keyword type="function" name="nm_client_new_async ()" link="NMClient.html#nm-client-new-async"/>
- <keyword type="function" name="nm_client_new_finish ()" link="NMClient.html#nm-client-new-finish"/>
- <keyword type="function" name="nm_client_get_devices ()" link="NMClient.html#nm-client-get-devices"/>
- <keyword type="function" name="nm_client_get_device_by_path ()" link="NMClient.html#nm-client-get-device-by-path"/>
- <keyword type="function" name="nm_client_get_device_by_iface ()" link="NMClient.html#nm-client-get-device-by-iface"/>
- <keyword type="function" name="NMClientActivateFn ()" link="NMClient.html#NMClientActivateFn"/>
- <keyword type="function" name="nm_client_activate_connection ()" link="NMClient.html#nm-client-activate-connection"/>
- <keyword type="function" name="NMClientAddActivateFn ()" link="NMClient.html#NMClientAddActivateFn"/>
- <keyword type="function" name="nm_client_add_and_activate_connection ()" link="NMClient.html#nm-client-add-and-activate-connection"/>
- <keyword type="function" name="nm_client_deactivate_connection ()" link="NMClient.html#nm-client-deactivate-connection"/>
- <keyword type="function" name="nm_client_networking_get_enabled ()" link="NMClient.html#nm-client-networking-get-enabled"/>
- <keyword type="function" name="nm_client_networking_set_enabled ()" link="NMClient.html#nm-client-networking-set-enabled"/>
- <keyword type="function" name="nm_client_wireless_get_enabled ()" link="NMClient.html#nm-client-wireless-get-enabled"/>
- <keyword type="function" name="nm_client_wireless_set_enabled ()" link="NMClient.html#nm-client-wireless-set-enabled"/>
- <keyword type="function" name="nm_client_wireless_hardware_get_enabled ()" link="NMClient.html#nm-client-wireless-hardware-get-enabled"/>
- <keyword type="function" name="nm_client_wwan_get_enabled ()" link="NMClient.html#nm-client-wwan-get-enabled"/>
- <keyword type="function" name="nm_client_wwan_set_enabled ()" link="NMClient.html#nm-client-wwan-set-enabled"/>
- <keyword type="function" name="nm_client_wwan_hardware_get_enabled ()" link="NMClient.html#nm-client-wwan-hardware-get-enabled"/>
- <keyword type="function" name="nm_client_wimax_get_enabled ()" link="NMClient.html#nm-client-wimax-get-enabled"/>
- <keyword type="function" name="nm_client_wimax_set_enabled ()" link="NMClient.html#nm-client-wimax-set-enabled"/>
- <keyword type="function" name="nm_client_wimax_hardware_get_enabled ()" link="NMClient.html#nm-client-wimax-hardware-get-enabled"/>
- <keyword type="function" name="nm_client_get_version ()" link="NMClient.html#nm-client-get-version"/>
- <keyword type="function" name="nm_client_get_state ()" link="NMClient.html#nm-client-get-state"/>
- <keyword type="function" name="nm_client_get_manager_running ()" link="NMClient.html#nm-client-get-manager-running"/>
- <keyword type="function" name="nm_client_get_active_connections ()" link="NMClient.html#nm-client-get-active-connections"/>
- <keyword type="function" name="nm_client_sleep ()" link="NMClient.html#nm-client-sleep"/>
- <keyword type="function" name="nm_client_get_permission_result ()" link="NMClient.html#nm-client-get-permission-result"/>
- <keyword type="function" name="nm_client_get_logging ()" link="NMClient.html#nm-client-get-logging" since="0.9.8"/>
- <keyword type="function" name="nm_client_set_logging ()" link="NMClient.html#nm-client-set-logging" since="0.9.8"/>
- <keyword type="function" name="nm_client_get_connectivity ()" link="NMClient.html#nm-client-get-connectivity" since="0.9.8.4"/>
- <keyword type="function" name="nm_client_check_connectivity ()" link="NMClient.html#nm-client-check-connectivity" since="0.9.8.4"/>
- <keyword type="function" name="nm_client_check_connectivity_async ()" link="NMClient.html#nm-client-check-connectivity-async" since="0.9.8.4"/>
- <keyword type="function" name="nm_client_check_connectivity_finish ()" link="NMClient.html#nm-client-check-connectivity-finish" since="0.9.8.4"/>
- <keyword type="function" name="nm_client_get_primary_connection ()" link="NMClient.html#nm-client-get-primary-connection" since="0.9.8.4"/>
- <keyword type="function" name="nm_client_get_activating_connection ()" link="NMClient.html#nm-client-get-activating-connection" since="0.9.8.4"/>
<keyword type="macro" name="NM_CLIENT_VERSION" link="NMClient.html#NM-CLIENT-VERSION:CAPS"/>
<keyword type="macro" name="NM_CLIENT_STATE" link="NMClient.html#NM-CLIENT-STATE:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_STARTUP" link="NMClient.html#NM-CLIENT-STARTUP:CAPS"/>
<keyword type="macro" name="NM_CLIENT_MANAGER_RUNNING" link="NMClient.html#NM-CLIENT-MANAGER-RUNNING:CAPS"/>
<keyword type="macro" name="NM_CLIENT_NETWORKING_ENABLED" link="NMClient.html#NM-CLIENT-NETWORKING-ENABLED:CAPS"/>
<keyword type="macro" name="NM_CLIENT_WIRELESS_ENABLED" link="NMClient.html#NM-CLIENT-WIRELESS-ENABLED:CAPS"/>
@@ -89,78 +56,121 @@
<keyword type="macro" name="NM_CLIENT_CONNECTIVITY" link="NMClient.html#NM-CLIENT-CONNECTIVITY:CAPS"/>
<keyword type="macro" name="NM_CLIENT_PRIMARY_CONNECTION" link="NMClient.html#NM-CLIENT-PRIMARY-CONNECTION:CAPS"/>
<keyword type="macro" name="NM_CLIENT_ACTIVATING_CONNECTION" link="NMClient.html#NM-CLIENT-ACTIVATING-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_DEVICES" link="NMClient.html#NM-CLIENT-DEVICES:CAPS"/>
<keyword type="enum" name="enum NMClientPermission" link="NMClient.html#NMClientPermission"/>
<keyword type="enum" name="enum NMClientPermissionResult" link="NMClient.html#NMClientPermissionResult"/>
- <keyword type="property" name="The “activating-connection†property" link="NMClient.html#NMClient--activating-connection"/>
- <keyword type="property" name="The “active-connections†property" link="NMClient.html#NMClient--active-connections"/>
- <keyword type="property" name="The “connectivity†property" link="NMClient.html#NMClient--connectivity"/>
- <keyword type="property" name="The “manager-running†property" link="NMClient.html#NMClient--manager-running"/>
- <keyword type="property" name="The “networking-enabled†property" link="NMClient.html#NMClient--networking-enabled"/>
- <keyword type="property" name="The “primary-connection†property" link="NMClient.html#NMClient--primary-connection"/>
- <keyword type="property" name="The “state†property" link="NMClient.html#NMClient--state"/>
- <keyword type="property" name="The “version†property" link="NMClient.html#NMClient--version"/>
- <keyword type="property" name="The “wimax-enabled†property" link="NMClient.html#NMClient--wimax-enabled"/>
- <keyword type="property" name="The “wimax-hardware-enabled†property" link="NMClient.html#NMClient--wimax-hardware-enabled"/>
- <keyword type="property" name="The “wireless-enabled†property" link="NMClient.html#NMClient--wireless-enabled"/>
- <keyword type="property" name="The “wireless-hardware-enabled†property" link="NMClient.html#NMClient--wireless-hardware-enabled"/>
- <keyword type="property" name="The “wwan-enabled†property" link="NMClient.html#NMClient--wwan-enabled"/>
- <keyword type="property" name="The “wwan-hardware-enabled†property" link="NMClient.html#NMClient--wwan-hardware-enabled"/>
- <keyword type="signal" name="The “device-added†signal" link="NMClient.html#NMClient-device-added"/>
- <keyword type="signal" name="The “device-removed†signal" link="NMClient.html#NMClient-device-removed"/>
- <keyword type="signal" name="The “permission-changed†signal" link="NMClient.html#NMClient-permission-changed"/>
- <keyword type="function" name="nm_active_connection_new ()" link="NMActiveConnection.html#nm-active-connection-new"/>
- <keyword type="function" name="nm_active_connection_get_connection ()" link="NMActiveConnection.html#nm-active-connection-get-connection"/>
- <keyword type="function" name="nm_active_connection_get_uuid ()" link="NMActiveConnection.html#nm-active-connection-get-uuid"/>
- <keyword type="function" name="nm_active_connection_get_specific_object ()" link="NMActiveConnection.html#nm-active-connection-get-specific-object"/>
- <keyword type="function" name="nm_active_connection_get_devices ()" link="NMActiveConnection.html#nm-active-connection-get-devices"/>
- <keyword type="function" name="nm_active_connection_get_state ()" link="NMActiveConnection.html#nm-active-connection-get-state"/>
- <keyword type="function" name="nm_active_connection_get_default ()" link="NMActiveConnection.html#nm-active-connection-get-default"/>
- <keyword type="function" name="nm_active_connection_get_default6 ()" link="NMActiveConnection.html#nm-active-connection-get-default6"/>
- <keyword type="function" name="nm_active_connection_get_master ()" link="NMActiveConnection.html#nm-active-connection-get-master"/>
+ <keyword type="enum" name="enum NMClientError" link="NMClient.html#NMClientError"/>
+ <keyword type="macro" name="NM_CLIENT_ERROR" link="NMClient.html#NM-CLIENT-ERROR:CAPS"/>
+ <keyword type="function" name="nm_client_error_quark ()" link="NMClient.html#nm-client-error-quark" since="0.9.10"/>
+ <keyword type="struct" name="NMClient" link="NMClient.html#NMClient-struct"/>
+ <keyword type="struct" name="NMClientClass" link="NMClient.html#NMClientClass"/>
+ <keyword type="function" name="nm_client_new ()" link="NMClient.html#nm-client-new"/>
+ <keyword type="function" name="nm_client_new_async ()" link="NMClient.html#nm-client-new-async"/>
+ <keyword type="function" name="nm_client_new_finish ()" link="NMClient.html#nm-client-new-finish"/>
+ <keyword type="function" name="nm_client_get_devices ()" link="NMClient.html#nm-client-get-devices"/>
+ <keyword type="function" name="nm_client_get_device_by_path ()" link="NMClient.html#nm-client-get-device-by-path"/>
+ <keyword type="function" name="nm_client_get_device_by_iface ()" link="NMClient.html#nm-client-get-device-by-iface"/>
+ <keyword type="function" name="NMClientActivateFn ()" link="NMClient.html#NMClientActivateFn"/>
+ <keyword type="function" name="nm_client_activate_connection ()" link="NMClient.html#nm-client-activate-connection"/>
+ <keyword type="function" name="NMClientAddActivateFn ()" link="NMClient.html#NMClientAddActivateFn"/>
+ <keyword type="function" name="nm_client_add_and_activate_connection ()" link="NMClient.html#nm-client-add-and-activate-connection"/>
+ <keyword type="function" name="nm_client_deactivate_connection ()" link="NMClient.html#nm-client-deactivate-connection"/>
+ <keyword type="function" name="nm_client_networking_get_enabled ()" link="NMClient.html#nm-client-networking-get-enabled"/>
+ <keyword type="function" name="nm_client_networking_set_enabled ()" link="NMClient.html#nm-client-networking-set-enabled"/>
+ <keyword type="function" name="nm_client_wireless_get_enabled ()" link="NMClient.html#nm-client-wireless-get-enabled"/>
+ <keyword type="function" name="nm_client_wireless_set_enabled ()" link="NMClient.html#nm-client-wireless-set-enabled"/>
+ <keyword type="function" name="nm_client_wireless_hardware_get_enabled ()" link="NMClient.html#nm-client-wireless-hardware-get-enabled"/>
+ <keyword type="function" name="nm_client_wwan_get_enabled ()" link="NMClient.html#nm-client-wwan-get-enabled"/>
+ <keyword type="function" name="nm_client_wwan_set_enabled ()" link="NMClient.html#nm-client-wwan-set-enabled"/>
+ <keyword type="function" name="nm_client_wwan_hardware_get_enabled ()" link="NMClient.html#nm-client-wwan-hardware-get-enabled"/>
+ <keyword type="function" name="nm_client_wimax_get_enabled ()" link="NMClient.html#nm-client-wimax-get-enabled"/>
+ <keyword type="function" name="nm_client_wimax_set_enabled ()" link="NMClient.html#nm-client-wimax-set-enabled"/>
+ <keyword type="function" name="nm_client_wimax_hardware_get_enabled ()" link="NMClient.html#nm-client-wimax-hardware-get-enabled"/>
+ <keyword type="function" name="nm_client_get_version ()" link="NMClient.html#nm-client-get-version"/>
+ <keyword type="function" name="nm_client_get_state ()" link="NMClient.html#nm-client-get-state"/>
+ <keyword type="function" name="nm_client_get_startup ()" link="NMClient.html#nm-client-get-startup" since="0.9.10"/>
+ <keyword type="function" name="nm_client_get_manager_running ()" link="NMClient.html#nm-client-get-manager-running"/>
+ <keyword type="function" name="nm_client_get_active_connections ()" link="NMClient.html#nm-client-get-active-connections"/>
+ <keyword type="function" name="nm_client_sleep ()" link="NMClient.html#nm-client-sleep"/>
+ <keyword type="function" name="nm_client_get_permission_result ()" link="NMClient.html#nm-client-get-permission-result"/>
+ <keyword type="function" name="nm_client_get_logging ()" link="NMClient.html#nm-client-get-logging" since="0.9.8"/>
+ <keyword type="function" name="nm_client_set_logging ()" link="NMClient.html#nm-client-set-logging" since="0.9.8"/>
+ <keyword type="function" name="nm_client_get_connectivity ()" link="NMClient.html#nm-client-get-connectivity" since="0.9.8.6"/>
+ <keyword type="function" name="nm_client_check_connectivity ()" link="NMClient.html#nm-client-check-connectivity" since="0.9.8.6"/>
+ <keyword type="function" name="nm_client_check_connectivity_async ()" link="NMClient.html#nm-client-check-connectivity-async" since="0.9.8.6"/>
+ <keyword type="function" name="nm_client_check_connectivity_finish ()" link="NMClient.html#nm-client-check-connectivity-finish" since="0.9.8.6"/>
+ <keyword type="function" name="nm_client_get_primary_connection ()" link="NMClient.html#nm-client-get-primary-connection" since="0.9.8.6"/>
+ <keyword type="function" name="nm_client_get_activating_connection ()" link="NMClient.html#nm-client-get-activating-connection" since="0.9.8.6"/>
+ <keyword type="property" name="The &quot;activating-connection&quot; property" link="NMClient.html#NMClient--activating-connection"/>
+ <keyword type="property" name="The &quot;active-connections&quot; property" link="NMClient.html#NMClient--active-connections"/>
+ <keyword type="property" name="The &quot;connectivity&quot; property" link="NMClient.html#NMClient--connectivity"/>
+ <keyword type="property" name="The &quot;devices&quot; property" link="NMClient.html#NMClient--devices"/>
+ <keyword type="property" name="The &quot;manager-running&quot; property" link="NMClient.html#NMClient--manager-running"/>
+ <keyword type="property" name="The &quot;networking-enabled&quot; property" link="NMClient.html#NMClient--networking-enabled"/>
+ <keyword type="property" name="The &quot;primary-connection&quot; property" link="NMClient.html#NMClient--primary-connection"/>
+ <keyword type="property" name="The &quot;startup&quot; property" link="NMClient.html#NMClient--startup"/>
+ <keyword type="property" name="The &quot;state&quot; property" link="NMClient.html#NMClient--state"/>
+ <keyword type="property" name="The &quot;version&quot; property" link="NMClient.html#NMClient--version"/>
+ <keyword type="property" name="The &quot;wimax-enabled&quot; property" link="NMClient.html#NMClient--wimax-enabled"/>
+ <keyword type="property" name="The &quot;wimax-hardware-enabled&quot; property" link="NMClient.html#NMClient--wimax-hardware-enabled"/>
+ <keyword type="property" name="The &quot;wireless-enabled&quot; property" link="NMClient.html#NMClient--wireless-enabled"/>
+ <keyword type="property" name="The &quot;wireless-hardware-enabled&quot; property" link="NMClient.html#NMClient--wireless-hardware-enabled"/>
+ <keyword type="property" name="The &quot;wwan-enabled&quot; property" link="NMClient.html#NMClient--wwan-enabled"/>
+ <keyword type="property" name="The &quot;wwan-hardware-enabled&quot; property" link="NMClient.html#NMClient--wwan-hardware-enabled"/>
+ <keyword type="signal" name="The &quot;device-added&quot; signal" link="NMClient.html#NMClient-device-added"/>
+ <keyword type="signal" name="The &quot;device-removed&quot; signal" link="NMClient.html#NMClient-device-removed"/>
+ <keyword type="signal" name="The &quot;permission-changed&quot; signal" link="NMClient.html#NMClient-permission-changed"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_CONNECTION" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_ACTIVE_CONNECTION_ID" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-ID:CAPS"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_UUID" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-UUID:CAPS"/>
+ <keyword type="macro" name="NM_ACTIVE_CONNECTION_TYPE" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-TYPE:CAPS"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT:CAPS"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_DEVICES" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEVICES:CAPS"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_STATE" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-STATE:CAPS"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_DEFAULT" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT:CAPS"/>
+ <keyword type="macro" name="NM_ACTIVE_CONNECTION_IP4_CONFIG" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_ACTIVE_CONNECTION_DHCP4_CONFIG" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_DEFAULT6" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT6:CAPS"/>
+ <keyword type="macro" name="NM_ACTIVE_CONNECTION_IP6_CONFIG" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_ACTIVE_CONNECTION_DHCP6_CONFIG" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_ACTIVE_CONNECTION_VPN" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-VPN:CAPS"/>
<keyword type="macro" name="NM_ACTIVE_CONNECTION_MASTER" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-MASTER:CAPS"/>
- <keyword type="property" name="The “connection†property" link="NMActiveConnection.html#NMActiveConnection--connection"/>
- <keyword type="property" name="The “default†property" link="NMActiveConnection.html#NMActiveConnection--default"/>
- <keyword type="property" name="The “default6†property" link="NMActiveConnection.html#NMActiveConnection--default6"/>
- <keyword type="property" name="The “devices†property" link="NMActiveConnection.html#NMActiveConnection--devices"/>
- <keyword type="property" name="The “master†property" link="NMActiveConnection.html#NMActiveConnection--master"/>
- <keyword type="property" name="The “specific-object†property" link="NMActiveConnection.html#NMActiveConnection--specific-object"/>
- <keyword type="property" name="The “state†property" link="NMActiveConnection.html#NMActiveConnection--state"/>
- <keyword type="property" name="The “uuid†property" link="NMActiveConnection.html#NMActiveConnection--uuid"/>
- <keyword type="function" name="nm_device_new ()" link="NMDevice.html#nm-device-new"/>
- <keyword type="function" name="nm_device_get_iface ()" link="NMDevice.html#nm-device-get-iface"/>
- <keyword type="function" name="nm_device_get_ip_iface ()" link="NMDevice.html#nm-device-get-ip-iface"/>
- <keyword type="function" name="nm_device_get_device_type ()" link="NMDevice.html#nm-device-get-device-type"/>
- <keyword type="function" name="nm_device_get_udi ()" link="NMDevice.html#nm-device-get-udi"/>
- <keyword type="function" name="nm_device_get_driver ()" link="NMDevice.html#nm-device-get-driver"/>
- <keyword type="function" name="nm_device_get_driver_version ()" link="NMDevice.html#nm-device-get-driver-version"/>
- <keyword type="function" name="nm_device_get_firmware_version ()" link="NMDevice.html#nm-device-get-firmware-version"/>
- <keyword type="function" name="nm_device_get_capabilities ()" link="NMDevice.html#nm-device-get-capabilities"/>
- <keyword type="function" name="nm_device_get_managed ()" link="NMDevice.html#nm-device-get-managed"/>
- <keyword type="function" name="nm_device_get_autoconnect ()" link="NMDevice.html#nm-device-get-autoconnect"/>
- <keyword type="function" name="nm_device_set_autoconnect ()" link="NMDevice.html#nm-device-set-autoconnect"/>
- <keyword type="function" name="nm_device_get_firmware_missing ()" link="NMDevice.html#nm-device-get-firmware-missing"/>
- <keyword type="function" name="nm_device_get_ip4_config ()" link="NMDevice.html#nm-device-get-ip4-config"/>
- <keyword type="function" name="nm_device_get_dhcp4_config ()" link="NMDevice.html#nm-device-get-dhcp4-config"/>
- <keyword type="function" name="nm_device_get_ip6_config ()" link="NMDevice.html#nm-device-get-ip6-config"/>
- <keyword type="function" name="nm_device_get_dhcp6_config ()" link="NMDevice.html#nm-device-get-dhcp6-config"/>
- <keyword type="function" name="nm_device_get_state ()" link="NMDevice.html#nm-device-get-state"/>
- <keyword type="function" name="nm_device_get_state_reason ()" link="NMDevice.html#nm-device-get-state-reason"/>
- <keyword type="function" name="nm_device_get_active_connection ()" link="NMDevice.html#nm-device-get-active-connection"/>
- <keyword type="function" name="nm_device_get_available_connections ()" link="NMDevice.html#nm-device-get-available-connections" since="0.9.8"/>
- <keyword type="function" name="nm_device_get_product ()" link="NMDevice.html#nm-device-get-product"/>
- <keyword type="function" name="nm_device_get_vendor ()" link="NMDevice.html#nm-device-get-vendor"/>
- <keyword type="function" name="NMDeviceDeactivateFn ()" link="NMDevice.html#NMDeviceDeactivateFn"/>
- <keyword type="function" name="nm_device_disconnect ()" link="NMDevice.html#nm-device-disconnect"/>
- <keyword type="function" name="nm_device_filter_connections ()" link="NMDevice.html#nm-device-filter-connections"/>
- <keyword type="function" name="nm_device_connection_valid ()" link="NMDevice.html#nm-device-connection-valid"/>
- <keyword type="function" name="nm_device_connection_compatible ()" link="NMDevice.html#nm-device-connection-compatible"/>
+ <keyword type="struct" name="NMActiveConnection" link="NMActiveConnection.html#NMActiveConnection-struct"/>
+ <keyword type="struct" name="NMActiveConnectionClass" link="NMActiveConnection.html#NMActiveConnectionClass"/>
+ <keyword type="function" name="nm_active_connection_new ()" link="NMActiveConnection.html#nm-active-connection-new"/>
+ <keyword type="function" name="nm_active_connection_get_connection ()" link="NMActiveConnection.html#nm-active-connection-get-connection"/>
+ <keyword type="function" name="nm_active_connection_get_id ()" link="NMActiveConnection.html#nm-active-connection-get-id" since="0.9.10"/>
+ <keyword type="function" name="nm_active_connection_get_uuid ()" link="NMActiveConnection.html#nm-active-connection-get-uuid"/>
+ <keyword type="function" name="nm_active_connection_get_connection_type ()" link="NMActiveConnection.html#nm-active-connection-get-connection-type" since="0.9.10"/>
+ <keyword type="function" name="nm_active_connection_get_specific_object ()" link="NMActiveConnection.html#nm-active-connection-get-specific-object"/>
+ <keyword type="function" name="nm_active_connection_get_devices ()" link="NMActiveConnection.html#nm-active-connection-get-devices"/>
+ <keyword type="function" name="nm_active_connection_get_state ()" link="NMActiveConnection.html#nm-active-connection-get-state"/>
+ <keyword type="function" name="nm_active_connection_get_master ()" link="NMActiveConnection.html#nm-active-connection-get-master"/>
+ <keyword type="function" name="nm_active_connection_get_default ()" link="NMActiveConnection.html#nm-active-connection-get-default"/>
+ <keyword type="function" name="nm_active_connection_get_ip4_config ()" link="NMActiveConnection.html#nm-active-connection-get-ip4-config" since="0.9.10"/>
+ <keyword type="function" name="nm_active_connection_get_dhcp4_config ()" link="NMActiveConnection.html#nm-active-connection-get-dhcp4-config" since="0.9.10"/>
+ <keyword type="function" name="nm_active_connection_get_default6 ()" link="NMActiveConnection.html#nm-active-connection-get-default6"/>
+ <keyword type="function" name="nm_active_connection_get_ip6_config ()" link="NMActiveConnection.html#nm-active-connection-get-ip6-config" since="0.9.10"/>
+ <keyword type="function" name="nm_active_connection_get_dhcp6_config ()" link="NMActiveConnection.html#nm-active-connection-get-dhcp6-config" since="0.9.10"/>
+ <keyword type="function" name="nm_active_connection_get_vpn ()" link="NMActiveConnection.html#nm-active-connection-get-vpn" since="0.9.10"/>
+ <keyword type="property" name="The &quot;connection&quot; property" link="NMActiveConnection.html#NMActiveConnection--connection"/>
+ <keyword type="property" name="The &quot;default&quot; property" link="NMActiveConnection.html#NMActiveConnection--default"/>
+ <keyword type="property" name="The &quot;default6&quot; property" link="NMActiveConnection.html#NMActiveConnection--default6"/>
+ <keyword type="property" name="The &quot;devices&quot; property" link="NMActiveConnection.html#NMActiveConnection--devices"/>
+ <keyword type="property" name="The &quot;dhcp4-config&quot; property" link="NMActiveConnection.html#NMActiveConnection--dhcp4-config"/>
+ <keyword type="property" name="The &quot;dhcp6-config&quot; property" link="NMActiveConnection.html#NMActiveConnection--dhcp6-config"/>
+ <keyword type="property" name="The &quot;id&quot; property" link="NMActiveConnection.html#NMActiveConnection--id"/>
+ <keyword type="property" name="The &quot;ip4-config&quot; property" link="NMActiveConnection.html#NMActiveConnection--ip4-config"/>
+ <keyword type="property" name="The &quot;ip6-config&quot; property" link="NMActiveConnection.html#NMActiveConnection--ip6-config"/>
+ <keyword type="property" name="The &quot;master&quot; property" link="NMActiveConnection.html#NMActiveConnection--master"/>
+ <keyword type="property" name="The &quot;specific-object&quot; property" link="NMActiveConnection.html#NMActiveConnection--specific-object"/>
+ <keyword type="property" name="The &quot;state&quot; property" link="NMActiveConnection.html#NMActiveConnection--state"/>
+ <keyword type="property" name="The &quot;type&quot; property" link="NMActiveConnection.html#NMActiveConnection--type"/>
+ <keyword type="property" name="The &quot;uuid&quot; property" link="NMActiveConnection.html#NMActiveConnection--uuid"/>
+ <keyword type="property" name="The &quot;vpn&quot; property" link="NMActiveConnection.html#NMActiveConnection--vpn"/>
+ <keyword type="enum" name="enum NMDeviceError" link="NMDevice.html#NMDeviceError"/>
+ <keyword type="macro" name="NM_DEVICE_ERROR" link="NMDevice.html#NM-DEVICE-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_error_quark ()" link="NMDevice.html#nm-device-error-quark" since="0.9.10"/>
<keyword type="macro" name="NM_DEVICE_DEVICE_TYPE" link="NMDevice.html#NM-DEVICE-DEVICE-TYPE:CAPS"/>
<keyword type="macro" name="NM_DEVICE_UDI" link="NMDevice.html#NM-DEVICE-UDI:CAPS"/>
<keyword type="macro" name="NM_DEVICE_INTERFACE" link="NMDevice.html#NM-DEVICE-INTERFACE:CAPS"/>
@@ -182,107 +192,148 @@
<keyword type="macro" name="NM_DEVICE_AVAILABLE_CONNECTIONS" link="NMDevice.html#NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_VENDOR" link="NMDevice.html#NM-DEVICE-VENDOR:CAPS"/>
<keyword type="macro" name="NM_DEVICE_PRODUCT" link="NMDevice.html#NM-DEVICE-PRODUCT:CAPS"/>
- <keyword type="property" name="The “active-connection†property" link="NMDevice.html#NMDevice--active-connection"/>
- <keyword type="property" name="The “autoconnect†property" link="NMDevice.html#NMDevice--autoconnect"/>
- <keyword type="property" name="The “available-connections†property" link="NMDevice.html#NMDevice--available-connections"/>
- <keyword type="property" name="The “capabilities†property" link="NMDevice.html#NMDevice--capabilities"/>
- <keyword type="property" name="The “device-type†property" link="NMDevice.html#NMDevice--device-type"/>
- <keyword type="property" name="The “dhcp4-config†property" link="NMDevice.html#NMDevice--dhcp4-config"/>
- <keyword type="property" name="The “dhcp6-config†property" link="NMDevice.html#NMDevice--dhcp6-config"/>
- <keyword type="property" name="The “driver†property" link="NMDevice.html#NMDevice--driver"/>
- <keyword type="property" name="The “driver-version†property" link="NMDevice.html#NMDevice--driver-version"/>
- <keyword type="property" name="The “firmware-missing†property" link="NMDevice.html#NMDevice--firmware-missing"/>
- <keyword type="property" name="The “firmware-version†property" link="NMDevice.html#NMDevice--firmware-version"/>
- <keyword type="property" name="The “interface†property" link="NMDevice.html#NMDevice--interface"/>
- <keyword type="property" name="The “ip-interface†property" link="NMDevice.html#NMDevice--ip-interface"/>
- <keyword type="property" name="The “ip4-config†property" link="NMDevice.html#NMDevice--ip4-config"/>
- <keyword type="property" name="The “ip6-config†property" link="NMDevice.html#NMDevice--ip6-config"/>
- <keyword type="property" name="The “managed†property" link="NMDevice.html#NMDevice--managed"/>
- <keyword type="property" name="The “product†property" link="NMDevice.html#NMDevice--product"/>
- <keyword type="property" name="The “state†property" link="NMDevice.html#NMDevice--state"/>
- <keyword type="property" name="The “state-reason†property" link="NMDevice.html#NMDevice--state-reason"/>
- <keyword type="property" name="The “udi†property" link="NMDevice.html#NMDevice--udi"/>
- <keyword type="property" name="The “vendor†property" link="NMDevice.html#NMDevice--vendor"/>
- <keyword type="signal" name="The “state-changed†signal" link="NMDevice.html#NMDevice-state-changed"/>
- <keyword type="function" name="nm_device_ethernet_error_quark ()" link="NMDeviceEthernet.html#nm-device-ethernet-error-quark"/>
- <keyword type="function" name="nm_device_ethernet_new ()" link="NMDeviceEthernet.html#nm-device-ethernet-new"/>
- <keyword type="function" name="nm_device_ethernet_get_hw_address ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address"/>
- <keyword type="function" name="nm_device_ethernet_get_permanent_hw_address ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address"/>
- <keyword type="function" name="nm_device_ethernet_get_speed ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-speed"/>
- <keyword type="function" name="nm_device_ethernet_get_carrier ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-carrier"/>
+ <keyword type="macro" name="NM_DEVICE_PHYSICAL_PORT_ID" link="NMDevice.html#NM-DEVICE-PHYSICAL-PORT-ID:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_MTU" link="NMDevice.html#NM-DEVICE-MTU:CAPS"/>
+ <keyword type="struct" name="NMDevice" link="NMDevice.html#NMDevice-struct"/>
+ <keyword type="struct" name="NMDeviceClass" link="NMDevice.html#NMDeviceClass"/>
+ <keyword type="function" name="nm_device_new ()" link="NMDevice.html#nm-device-new"/>
+ <keyword type="function" name="nm_device_get_iface ()" link="NMDevice.html#nm-device-get-iface"/>
+ <keyword type="function" name="nm_device_get_ip_iface ()" link="NMDevice.html#nm-device-get-ip-iface"/>
+ <keyword type="function" name="nm_device_get_device_type ()" link="NMDevice.html#nm-device-get-device-type"/>
+ <keyword type="function" name="nm_device_get_udi ()" link="NMDevice.html#nm-device-get-udi"/>
+ <keyword type="function" name="nm_device_get_driver ()" link="NMDevice.html#nm-device-get-driver"/>
+ <keyword type="function" name="nm_device_get_driver_version ()" link="NMDevice.html#nm-device-get-driver-version"/>
+ <keyword type="function" name="nm_device_get_firmware_version ()" link="NMDevice.html#nm-device-get-firmware-version"/>
+ <keyword type="function" name="nm_device_get_type_description ()" link="NMDevice.html#nm-device-get-type-description" since="0.9.10"/>
+ <keyword type="function" name="nm_device_get_hw_address ()" link="NMDevice.html#nm-device-get-hw-address" since="0.9.10"/>
+ <keyword type="function" name="nm_device_get_capabilities ()" link="NMDevice.html#nm-device-get-capabilities"/>
+ <keyword type="function" name="nm_device_get_managed ()" link="NMDevice.html#nm-device-get-managed"/>
+ <keyword type="function" name="nm_device_get_autoconnect ()" link="NMDevice.html#nm-device-get-autoconnect"/>
+ <keyword type="function" name="nm_device_set_autoconnect ()" link="NMDevice.html#nm-device-set-autoconnect"/>
+ <keyword type="function" name="nm_device_get_firmware_missing ()" link="NMDevice.html#nm-device-get-firmware-missing"/>
+ <keyword type="function" name="nm_device_get_ip4_config ()" link="NMDevice.html#nm-device-get-ip4-config"/>
+ <keyword type="function" name="nm_device_get_dhcp4_config ()" link="NMDevice.html#nm-device-get-dhcp4-config"/>
+ <keyword type="function" name="nm_device_get_ip6_config ()" link="NMDevice.html#nm-device-get-ip6-config"/>
+ <keyword type="function" name="nm_device_get_dhcp6_config ()" link="NMDevice.html#nm-device-get-dhcp6-config"/>
+ <keyword type="function" name="nm_device_get_state ()" link="NMDevice.html#nm-device-get-state"/>
+ <keyword type="function" name="nm_device_get_state_reason ()" link="NMDevice.html#nm-device-get-state-reason"/>
+ <keyword type="function" name="nm_device_get_active_connection ()" link="NMDevice.html#nm-device-get-active-connection"/>
+ <keyword type="function" name="nm_device_get_available_connections ()" link="NMDevice.html#nm-device-get-available-connections" since="0.9.8"/>
+ <keyword type="function" name="nm_device_get_physical_port_id ()" link="NMDevice.html#nm-device-get-physical-port-id" since="0.9.10"/>
+ <keyword type="function" name="nm_device_get_mtu ()" link="NMDevice.html#nm-device-get-mtu" since="0.9.10"/>
+ <keyword type="function" name="nm_device_get_product ()" link="NMDevice.html#nm-device-get-product"/>
+ <keyword type="function" name="nm_device_get_vendor ()" link="NMDevice.html#nm-device-get-vendor"/>
+ <keyword type="function" name="nm_device_get_description ()" link="NMDevice.html#nm-device-get-description" since="0.9.10"/>
+ <keyword type="function" name="nm_device_disambiguate_names ()" link="NMDevice.html#nm-device-disambiguate-names" since="0.9.10"/>
+ <keyword type="function" name="NMDeviceDeactivateFn ()" link="NMDevice.html#NMDeviceDeactivateFn"/>
+ <keyword type="function" name="nm_device_disconnect ()" link="NMDevice.html#nm-device-disconnect"/>
+ <keyword type="function" name="nm_device_filter_connections ()" link="NMDevice.html#nm-device-filter-connections"/>
+ <keyword type="function" name="nm_device_connection_valid ()" link="NMDevice.html#nm-device-connection-valid"/>
+ <keyword type="function" name="nm_device_connection_compatible ()" link="NMDevice.html#nm-device-connection-compatible"/>
+ <keyword type="function" name="nm_device_get_setting_type ()" link="NMDevice.html#nm-device-get-setting-type" since="0.9.10"/>
+ <keyword type="property" name="The &quot;active-connection&quot; property" link="NMDevice.html#NMDevice--active-connection"/>
+ <keyword type="property" name="The &quot;autoconnect&quot; property" link="NMDevice.html#NMDevice--autoconnect"/>
+ <keyword type="property" name="The &quot;available-connections&quot; property" link="NMDevice.html#NMDevice--available-connections"/>
+ <keyword type="property" name="The &quot;capabilities&quot; property" link="NMDevice.html#NMDevice--capabilities"/>
+ <keyword type="property" name="The &quot;device-type&quot; property" link="NMDevice.html#NMDevice--device-type"/>
+ <keyword type="property" name="The &quot;dhcp4-config&quot; property" link="NMDevice.html#NMDevice--dhcp4-config"/>
+ <keyword type="property" name="The &quot;dhcp6-config&quot; property" link="NMDevice.html#NMDevice--dhcp6-config"/>
+ <keyword type="property" name="The &quot;driver&quot; property" link="NMDevice.html#NMDevice--driver"/>
+ <keyword type="property" name="The &quot;driver-version&quot; property" link="NMDevice.html#NMDevice--driver-version"/>
+ <keyword type="property" name="The &quot;firmware-missing&quot; property" link="NMDevice.html#NMDevice--firmware-missing"/>
+ <keyword type="property" name="The &quot;firmware-version&quot; property" link="NMDevice.html#NMDevice--firmware-version"/>
+ <keyword type="property" name="The &quot;interface&quot; property" link="NMDevice.html#NMDevice--interface"/>
+ <keyword type="property" name="The &quot;ip-interface&quot; property" link="NMDevice.html#NMDevice--ip-interface"/>
+ <keyword type="property" name="The &quot;ip4-config&quot; property" link="NMDevice.html#NMDevice--ip4-config"/>
+ <keyword type="property" name="The &quot;ip6-config&quot; property" link="NMDevice.html#NMDevice--ip6-config"/>
+ <keyword type="property" name="The &quot;managed&quot; property" link="NMDevice.html#NMDevice--managed"/>
+ <keyword type="property" name="The &quot;mtu&quot; property" link="NMDevice.html#NMDevice--mtu"/>
+ <keyword type="property" name="The &quot;physical-port-id&quot; property" link="NMDevice.html#NMDevice--physical-port-id"/>
+ <keyword type="property" name="The &quot;product&quot; property" link="NMDevice.html#NMDevice--product"/>
+ <keyword type="property" name="The &quot;state&quot; property" link="NMDevice.html#NMDevice--state"/>
+ <keyword type="property" name="The &quot;state-reason&quot; property" link="NMDevice.html#NMDevice--state-reason"/>
+ <keyword type="property" name="The &quot;udi&quot; property" link="NMDevice.html#NMDevice--udi"/>
+ <keyword type="property" name="The &quot;vendor&quot; property" link="NMDevice.html#NMDevice--vendor"/>
+ <keyword type="signal" name="The &quot;state-changed&quot; signal" link="NMDevice.html#NMDevice-state-changed"/>
<keyword type="enum" name="enum NMDeviceEthernetError" link="NMDeviceEthernet.html#NMDeviceEthernetError"/>
<keyword type="macro" name="NM_DEVICE_ETHERNET_ERROR" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_ethernet_error_quark ()" link="NMDeviceEthernet.html#nm-device-ethernet-error-quark"/>
<keyword type="macro" name="NM_DEVICE_ETHERNET_HW_ADDRESS" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_ETHERNET_SPEED" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-SPEED:CAPS"/>
<keyword type="macro" name="NM_DEVICE_ETHERNET_CARRIER" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-CARRIER:CAPS"/>
- <keyword type="property" name="The “carrier†property" link="NMDeviceEthernet.html#NMDeviceEthernet--carrier"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceEthernet.html#NMDeviceEthernet--hw-address"/>
- <keyword type="property" name="The “perm-hw-address†property" link="NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address"/>
- <keyword type="property" name="The “speed†property" link="NMDeviceEthernet.html#NMDeviceEthernet--speed"/>
- <keyword type="function" name="nm_device_wifi_error_quark ()" link="NMDeviceWifi.html#nm-device-wifi-error-quark"/>
- <keyword type="function" name="nm_device_wifi_new ()" link="NMDeviceWifi.html#nm-device-wifi-new"/>
- <keyword type="function" name="nm_device_wifi_get_hw_address ()" link="NMDeviceWifi.html#nm-device-wifi-get-hw-address"/>
- <keyword type="function" name="nm_device_wifi_get_permanent_hw_address ()" link="NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address"/>
- <keyword type="function" name="nm_device_wifi_get_mode ()" link="NMDeviceWifi.html#nm-device-wifi-get-mode"/>
- <keyword type="function" name="nm_device_wifi_get_bitrate ()" link="NMDeviceWifi.html#nm-device-wifi-get-bitrate"/>
- <keyword type="function" name="nm_device_wifi_get_capabilities ()" link="NMDeviceWifi.html#nm-device-wifi-get-capabilities"/>
- <keyword type="function" name="nm_device_wifi_get_active_access_point ()" link="NMDeviceWifi.html#nm-device-wifi-get-active-access-point"/>
- <keyword type="function" name="nm_device_wifi_get_access_point_by_path ()" link="NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path"/>
- <keyword type="function" name="nm_device_wifi_get_access_points ()" link="NMDeviceWifi.html#nm-device-wifi-get-access-points"/>
- <keyword type="function" name="NMDeviceWifiRequestScanFn ()" link="NMDeviceWifi.html#NMDeviceWifiRequestScanFn"/>
- <keyword type="function" name="nm_device_wifi_request_scan_simple ()" link="NMDeviceWifi.html#nm-device-wifi-request-scan-simple" since="0.9.8"/>
+ <keyword type="struct" name="NMDeviceEthernet" link="NMDeviceEthernet.html#NMDeviceEthernet-struct"/>
+ <keyword type="struct" name="NMDeviceEthernetClass" link="NMDeviceEthernet.html#NMDeviceEthernetClass"/>
+ <keyword type="function" name="nm_device_ethernet_new ()" link="NMDeviceEthernet.html#nm-device-ethernet-new"/>
+ <keyword type="function" name="nm_device_ethernet_get_hw_address ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-hw-address"/>
+ <keyword type="function" name="nm_device_ethernet_get_permanent_hw_address ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address"/>
+ <keyword type="function" name="nm_device_ethernet_get_speed ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-speed"/>
+ <keyword type="function" name="nm_device_ethernet_get_carrier ()" link="NMDeviceEthernet.html#nm-device-ethernet-get-carrier"/>
+ <keyword type="property" name="The &quot;carrier&quot; property" link="NMDeviceEthernet.html#NMDeviceEthernet--carrier"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceEthernet.html#NMDeviceEthernet--hw-address"/>
+ <keyword type="property" name="The &quot;perm-hw-address&quot; property" link="NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address"/>
+ <keyword type="property" name="The &quot;speed&quot; property" link="NMDeviceEthernet.html#NMDeviceEthernet--speed"/>
<keyword type="enum" name="enum NMDeviceWifiError" link="NMDeviceWifi.html#NMDeviceWifiError"/>
<keyword type="macro" name="NM_DEVICE_WIFI_ERROR" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_wifi_error_quark ()" link="NMDeviceWifi.html#nm-device-wifi-error-quark"/>
<keyword type="macro" name="NM_DEVICE_WIFI_HW_ADDRESS" link="NMDeviceWifi.html#NM-DEVICE-WIFI-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS" link="NMDeviceWifi.html#NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIFI_MODE" link="NMDeviceWifi.html#NM-DEVICE-WIFI-MODE:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIFI_BITRATE" link="NMDeviceWifi.html#NM-DEVICE-WIFI-BITRATE:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIFI_CAPABILITIES" link="NMDeviceWifi.html#NM-DEVICE-WIFI-CAPABILITIES:CAPS"/>
- <keyword type="property" name="The “active-access-point†property" link="NMDeviceWifi.html#NMDeviceWifi--active-access-point"/>
- <keyword type="property" name="The “bitrate†property" link="NMDeviceWifi.html#NMDeviceWifi--bitrate"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceWifi.html#NMDeviceWifi--hw-address"/>
- <keyword type="property" name="The “mode†property" link="NMDeviceWifi.html#NMDeviceWifi--mode"/>
- <keyword type="property" name="The “perm-hw-address†property" link="NMDeviceWifi.html#NMDeviceWifi--perm-hw-address"/>
- <keyword type="property" name="The “wireless-capabilities†property" link="NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities"/>
- <keyword type="signal" name="The “access-point-added†signal" link="NMDeviceWifi.html#NMDeviceWifi-access-point-added"/>
- <keyword type="signal" name="The “access-point-removed†signal" link="NMDeviceWifi.html#NMDeviceWifi-access-point-removed"/>
- <keyword type="function" name="nm_device_modem_error_quark ()" link="NMDeviceModem.html#nm-device-modem-error-quark"/>
- <keyword type="function" name="nm_device_modem_get_modem_capabilities ()" link="NMDeviceModem.html#nm-device-modem-get-modem-capabilities"/>
- <keyword type="function" name="nm_device_modem_get_current_capabilities ()" link="NMDeviceModem.html#nm-device-modem-get-current-capabilities"/>
+ <keyword type="macro" name="NM_DEVICE_WIFI_ACCESS_POINTS" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ACCESS-POINTS:CAPS"/>
+ <keyword type="struct" name="NMDeviceWifi" link="NMDeviceWifi.html#NMDeviceWifi-struct"/>
+ <keyword type="struct" name="NMDeviceWifiClass" link="NMDeviceWifi.html#NMDeviceWifiClass"/>
+ <keyword type="function" name="nm_device_wifi_new ()" link="NMDeviceWifi.html#nm-device-wifi-new"/>
+ <keyword type="function" name="nm_device_wifi_get_hw_address ()" link="NMDeviceWifi.html#nm-device-wifi-get-hw-address"/>
+ <keyword type="function" name="nm_device_wifi_get_permanent_hw_address ()" link="NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address"/>
+ <keyword type="function" name="nm_device_wifi_get_mode ()" link="NMDeviceWifi.html#nm-device-wifi-get-mode"/>
+ <keyword type="function" name="nm_device_wifi_get_bitrate ()" link="NMDeviceWifi.html#nm-device-wifi-get-bitrate"/>
+ <keyword type="function" name="nm_device_wifi_get_capabilities ()" link="NMDeviceWifi.html#nm-device-wifi-get-capabilities"/>
+ <keyword type="function" name="nm_device_wifi_get_active_access_point ()" link="NMDeviceWifi.html#nm-device-wifi-get-active-access-point"/>
+ <keyword type="function" name="nm_device_wifi_get_access_point_by_path ()" link="NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path"/>
+ <keyword type="function" name="nm_device_wifi_get_access_points ()" link="NMDeviceWifi.html#nm-device-wifi-get-access-points"/>
+ <keyword type="function" name="NMDeviceWifiRequestScanFn ()" link="NMDeviceWifi.html#NMDeviceWifiRequestScanFn"/>
+ <keyword type="function" name="nm_device_wifi_request_scan_simple ()" link="NMDeviceWifi.html#nm-device-wifi-request-scan-simple" since="0.9.8"/>
+ <keyword type="property" name="The &quot;access-points&quot; property" link="NMDeviceWifi.html#NMDeviceWifi--access-points"/>
+ <keyword type="property" name="The &quot;active-access-point&quot; property" link="NMDeviceWifi.html#NMDeviceWifi--active-access-point"/>
+ <keyword type="property" name="The &quot;bitrate&quot; property" link="NMDeviceWifi.html#NMDeviceWifi--bitrate"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceWifi.html#NMDeviceWifi--hw-address"/>
+ <keyword type="property" name="The &quot;mode&quot; property" link="NMDeviceWifi.html#NMDeviceWifi--mode"/>
+ <keyword type="property" name="The &quot;perm-hw-address&quot; property" link="NMDeviceWifi.html#NMDeviceWifi--perm-hw-address"/>
+ <keyword type="property" name="The &quot;wireless-capabilities&quot; property" link="NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities"/>
+ <keyword type="signal" name="The &quot;access-point-added&quot; signal" link="NMDeviceWifi.html#NMDeviceWifi-access-point-added"/>
+ <keyword type="signal" name="The &quot;access-point-removed&quot; signal" link="NMDeviceWifi.html#NMDeviceWifi-access-point-removed"/>
<keyword type="enum" name="enum NMDeviceModemError" link="NMDeviceModem.html#NMDeviceModemError"/>
<keyword type="macro" name="NM_DEVICE_MODEM_ERROR" link="NMDeviceModem.html#NM-DEVICE-MODEM-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_modem_error_quark ()" link="NMDeviceModem.html#nm-device-modem-error-quark"/>
<keyword type="macro" name="NM_DEVICE_MODEM_MODEM_CAPABILITIES" link="NMDeviceModem.html#NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS"/>
<keyword type="macro" name="NM_DEVICE_MODEM_CURRENT_CAPABILITIES" link="NMDeviceModem.html#NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS"/>
- <keyword type="property" name="The “current-capabilities†property" link="NMDeviceModem.html#NMDeviceModem--current-capabilities"/>
- <keyword type="property" name="The “modem-capabilities†property" link="NMDeviceModem.html#NMDeviceModem--modem-capabilities"/>
- <keyword type="function" name="nm_device_bt_error_quark ()" link="NMDeviceBt.html#nm-device-bt-error-quark"/>
- <keyword type="function" name="nm_device_bt_new ()" link="NMDeviceBt.html#nm-device-bt-new"/>
- <keyword type="function" name="nm_device_bt_get_hw_address ()" link="NMDeviceBt.html#nm-device-bt-get-hw-address"/>
- <keyword type="function" name="nm_device_bt_get_name ()" link="NMDeviceBt.html#nm-device-bt-get-name"/>
- <keyword type="function" name="nm_device_bt_get_capabilities ()" link="NMDeviceBt.html#nm-device-bt-get-capabilities"/>
+ <keyword type="struct" name="NMDeviceModem" link="NMDeviceModem.html#NMDeviceModem-struct"/>
+ <keyword type="struct" name="NMDeviceModemClass" link="NMDeviceModem.html#NMDeviceModemClass"/>
+ <keyword type="function" name="nm_device_modem_get_modem_capabilities ()" link="NMDeviceModem.html#nm-device-modem-get-modem-capabilities"/>
+ <keyword type="function" name="nm_device_modem_get_current_capabilities ()" link="NMDeviceModem.html#nm-device-modem-get-current-capabilities"/>
+ <keyword type="property" name="The &quot;current-capabilities&quot; property" link="NMDeviceModem.html#NMDeviceModem--current-capabilities"/>
+ <keyword type="property" name="The &quot;modem-capabilities&quot; property" link="NMDeviceModem.html#NMDeviceModem--modem-capabilities"/>
<keyword type="enum" name="enum NMDeviceBtError" link="NMDeviceBt.html#NMDeviceBtError"/>
<keyword type="macro" name="NM_DEVICE_BT_ERROR" link="NMDeviceBt.html#NM-DEVICE-BT-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_bt_error_quark ()" link="NMDeviceBt.html#nm-device-bt-error-quark"/>
<keyword type="macro" name="NM_DEVICE_BT_HW_ADDRESS" link="NMDeviceBt.html#NM-DEVICE-BT-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_BT_NAME" link="NMDeviceBt.html#NM-DEVICE-BT-NAME:CAPS"/>
<keyword type="macro" name="NM_DEVICE_BT_CAPABILITIES" link="NMDeviceBt.html#NM-DEVICE-BT-CAPABILITIES:CAPS"/>
- <keyword type="property" name="The “bt-capabilities†property" link="NMDeviceBt.html#NMDeviceBt--bt-capabilities"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceBt.html#NMDeviceBt--hw-address"/>
- <keyword type="property" name="The “name†property" link="NMDeviceBt.html#NMDeviceBt--name"/>
- <keyword type="function" name="nm_device_wimax_error_quark ()" link="NMDeviceWimax.html#nm-device-wimax-error-quark"/>
- <keyword type="function" name="nm_device_wimax_new ()" link="NMDeviceWimax.html#nm-device-wimax-new"/>
- <keyword type="function" name="nm_device_wimax_get_hw_address ()" link="NMDeviceWimax.html#nm-device-wimax-get-hw-address"/>
- <keyword type="function" name="nm_device_wimax_get_active_nsp ()" link="NMDeviceWimax.html#nm-device-wimax-get-active-nsp"/>
- <keyword type="function" name="nm_device_wimax_get_nsp_by_path ()" link="NMDeviceWimax.html#nm-device-wimax-get-nsp-by-path"/>
- <keyword type="function" name="nm_device_wimax_get_nsps ()" link="NMDeviceWimax.html#nm-device-wimax-get-nsps"/>
- <keyword type="function" name="nm_device_wimax_get_center_frequency ()" link="NMDeviceWimax.html#nm-device-wimax-get-center-frequency"/>
- <keyword type="function" name="nm_device_wimax_get_rssi ()" link="NMDeviceWimax.html#nm-device-wimax-get-rssi"/>
- <keyword type="function" name="nm_device_wimax_get_cinr ()" link="NMDeviceWimax.html#nm-device-wimax-get-cinr"/>
- <keyword type="function" name="nm_device_wimax_get_tx_power ()" link="NMDeviceWimax.html#nm-device-wimax-get-tx-power"/>
- <keyword type="function" name="nm_device_wimax_get_bsid ()" link="NMDeviceWimax.html#nm-device-wimax-get-bsid"/>
+ <keyword type="struct" name="NMDeviceBt" link="NMDeviceBt.html#NMDeviceBt-struct"/>
+ <keyword type="struct" name="NMDeviceBtClass" link="NMDeviceBt.html#NMDeviceBtClass"/>
+ <keyword type="function" name="nm_device_bt_new ()" link="NMDeviceBt.html#nm-device-bt-new"/>
+ <keyword type="function" name="nm_device_bt_get_hw_address ()" link="NMDeviceBt.html#nm-device-bt-get-hw-address"/>
+ <keyword type="function" name="nm_device_bt_get_name ()" link="NMDeviceBt.html#nm-device-bt-get-name"/>
+ <keyword type="function" name="nm_device_bt_get_capabilities ()" link="NMDeviceBt.html#nm-device-bt-get-capabilities"/>
+ <keyword type="property" name="The &quot;bt-capabilities&quot; property" link="NMDeviceBt.html#NMDeviceBt--bt-capabilities"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceBt.html#NMDeviceBt--hw-address"/>
+ <keyword type="property" name="The &quot;name&quot; property" link="NMDeviceBt.html#NMDeviceBt--name"/>
<keyword type="enum" name="enum NMDeviceWimaxError" link="NMDeviceWimax.html#NMDeviceWimaxError"/>
<keyword type="macro" name="NM_DEVICE_WIMAX_ERROR" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_wimax_error_quark ()" link="NMDeviceWimax.html#nm-device-wimax-error-quark"/>
<keyword type="macro" name="NM_DEVICE_WIMAX_HW_ADDRESS" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIMAX_ACTIVE_NSP" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIMAX_CENTER_FREQUENCY" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS"/>
@@ -290,110 +341,151 @@
<keyword type="macro" name="NM_DEVICE_WIMAX_CINR" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-CINR:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIMAX_TX_POWER" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-TX-POWER:CAPS"/>
<keyword type="macro" name="NM_DEVICE_WIMAX_BSID" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-BSID:CAPS"/>
- <keyword type="property" name="The “active-nsp†property" link="NMDeviceWimax.html#NMDeviceWimax--active-nsp"/>
- <keyword type="property" name="The “bsid†property" link="NMDeviceWimax.html#NMDeviceWimax--bsid"/>
- <keyword type="property" name="The “center-frequency†property" link="NMDeviceWimax.html#NMDeviceWimax--center-frequency"/>
- <keyword type="property" name="The “cinr†property" link="NMDeviceWimax.html#NMDeviceWimax--cinr"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceWimax.html#NMDeviceWimax--hw-address"/>
- <keyword type="property" name="The “rssi†property" link="NMDeviceWimax.html#NMDeviceWimax--rssi"/>
- <keyword type="property" name="The “tx-power†property" link="NMDeviceWimax.html#NMDeviceWimax--tx-power"/>
- <keyword type="signal" name="The “nsp-added†signal" link="NMDeviceWimax.html#NMDeviceWimax-nsp-added"/>
- <keyword type="signal" name="The “nsp-removed†signal" link="NMDeviceWimax.html#NMDeviceWimax-nsp-removed"/>
- <keyword type="function" name="nm_device_adsl_error_quark ()" link="NMDeviceAdsl.html#nm-device-adsl-error-quark"/>
- <keyword type="function" name="nm_device_adsl_new ()" link="NMDeviceAdsl.html#nm-device-adsl-new"/>
- <keyword type="function" name="nm_device_adsl_get_carrier ()" link="NMDeviceAdsl.html#nm-device-adsl-get-carrier"/>
+ <keyword type="macro" name="NM_DEVICE_WIMAX_NSPS" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-NSPS:CAPS"/>
+ <keyword type="struct" name="NMDeviceWimax" link="NMDeviceWimax.html#NMDeviceWimax-struct"/>
+ <keyword type="struct" name="NMDeviceWimaxClass" link="NMDeviceWimax.html#NMDeviceWimaxClass"/>
+ <keyword type="function" name="nm_device_wimax_new ()" link="NMDeviceWimax.html#nm-device-wimax-new"/>
+ <keyword type="function" name="nm_device_wimax_get_hw_address ()" link="NMDeviceWimax.html#nm-device-wimax-get-hw-address"/>
+ <keyword type="function" name="nm_device_wimax_get_active_nsp ()" link="NMDeviceWimax.html#nm-device-wimax-get-active-nsp"/>
+ <keyword type="function" name="nm_device_wimax_get_nsp_by_path ()" link="NMDeviceWimax.html#nm-device-wimax-get-nsp-by-path"/>
+ <keyword type="function" name="nm_device_wimax_get_nsps ()" link="NMDeviceWimax.html#nm-device-wimax-get-nsps"/>
+ <keyword type="function" name="nm_device_wimax_get_center_frequency ()" link="NMDeviceWimax.html#nm-device-wimax-get-center-frequency"/>
+ <keyword type="function" name="nm_device_wimax_get_rssi ()" link="NMDeviceWimax.html#nm-device-wimax-get-rssi"/>
+ <keyword type="function" name="nm_device_wimax_get_cinr ()" link="NMDeviceWimax.html#nm-device-wimax-get-cinr"/>
+ <keyword type="function" name="nm_device_wimax_get_tx_power ()" link="NMDeviceWimax.html#nm-device-wimax-get-tx-power"/>
+ <keyword type="function" name="nm_device_wimax_get_bsid ()" link="NMDeviceWimax.html#nm-device-wimax-get-bsid"/>
+ <keyword type="property" name="The &quot;active-nsp&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--active-nsp"/>
+ <keyword type="property" name="The &quot;bsid&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--bsid"/>
+ <keyword type="property" name="The &quot;center-frequency&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--center-frequency"/>
+ <keyword type="property" name="The &quot;cinr&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--cinr"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--hw-address"/>
+ <keyword type="property" name="The &quot;nsps&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--nsps"/>
+ <keyword type="property" name="The &quot;rssi&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--rssi"/>
+ <keyword type="property" name="The &quot;tx-power&quot; property" link="NMDeviceWimax.html#NMDeviceWimax--tx-power"/>
+ <keyword type="signal" name="The &quot;nsp-added&quot; signal" link="NMDeviceWimax.html#NMDeviceWimax-nsp-added"/>
+ <keyword type="signal" name="The &quot;nsp-removed&quot; signal" link="NMDeviceWimax.html#NMDeviceWimax-nsp-removed"/>
<keyword type="enum" name="enum NMDeviceAdslError" link="NMDeviceAdsl.html#NMDeviceAdslError"/>
<keyword type="macro" name="NM_DEVICE_ADSL_ERROR" link="NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_adsl_error_quark ()" link="NMDeviceAdsl.html#nm-device-adsl-error-quark"/>
<keyword type="macro" name="NM_DEVICE_ADSL_CARRIER" link="NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS"/>
- <keyword type="property" name="The “carrier†property" link="NMDeviceAdsl.html#NMDeviceAdsl--carrier"/>
- <keyword type="function" name="nm_device_bond_error_quark ()" link="NMDeviceBond.html#nm-device-bond-error-quark"/>
- <keyword type="function" name="nm_device_bond_new ()" link="NMDeviceBond.html#nm-device-bond-new"/>
- <keyword type="function" name="nm_device_bond_get_hw_address ()" link="NMDeviceBond.html#nm-device-bond-get-hw-address"/>
- <keyword type="function" name="nm_device_bond_get_carrier ()" link="NMDeviceBond.html#nm-device-bond-get-carrier"/>
- <keyword type="function" name="nm_device_bond_get_slaves ()" link="NMDeviceBond.html#nm-device-bond-get-slaves" since="0.9.6.4"/>
+ <keyword type="struct" name="NMDeviceAdsl" link="NMDeviceAdsl.html#NMDeviceAdsl-struct"/>
+ <keyword type="struct" name="NMDeviceAdslClass" link="NMDeviceAdsl.html#NMDeviceAdslClass"/>
+ <keyword type="function" name="nm_device_adsl_new ()" link="NMDeviceAdsl.html#nm-device-adsl-new"/>
+ <keyword type="function" name="nm_device_adsl_get_carrier ()" link="NMDeviceAdsl.html#nm-device-adsl-get-carrier"/>
+ <keyword type="property" name="The &quot;carrier&quot; property" link="NMDeviceAdsl.html#NMDeviceAdsl--carrier"/>
<keyword type="enum" name="enum NMDeviceBondError" link="NMDeviceBond.html#NMDeviceBondError"/>
<keyword type="macro" name="NM_DEVICE_BOND_ERROR" link="NMDeviceBond.html#NM-DEVICE-BOND-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_bond_error_quark ()" link="NMDeviceBond.html#nm-device-bond-error-quark"/>
<keyword type="macro" name="NM_DEVICE_BOND_HW_ADDRESS" link="NMDeviceBond.html#NM-DEVICE-BOND-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_BOND_CARRIER" link="NMDeviceBond.html#NM-DEVICE-BOND-CARRIER:CAPS"/>
<keyword type="macro" name="NM_DEVICE_BOND_SLAVES" link="NMDeviceBond.html#NM-DEVICE-BOND-SLAVES:CAPS"/>
- <keyword type="property" name="The “carrier†property" link="NMDeviceBond.html#NMDeviceBond--carrier"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceBond.html#NMDeviceBond--hw-address"/>
- <keyword type="property" name="The “slaves†property" link="NMDeviceBond.html#NMDeviceBond--slaves"/>
- <keyword type="function" name="nm_device_bridge_error_quark ()" link="NMDeviceBridge.html#nm-device-bridge-error-quark" since="0.9.8"/>
- <keyword type="function" name="nm_device_bridge_new ()" link="NMDeviceBridge.html#nm-device-bridge-new" since="0.9.8"/>
- <keyword type="function" name="nm_device_bridge_get_hw_address ()" link="NMDeviceBridge.html#nm-device-bridge-get-hw-address" since="0.9.8"/>
- <keyword type="function" name="nm_device_bridge_get_carrier ()" link="NMDeviceBridge.html#nm-device-bridge-get-carrier" since="0.9.8"/>
- <keyword type="function" name="nm_device_bridge_get_slaves ()" link="NMDeviceBridge.html#nm-device-bridge-get-slaves" since="0.9.8"/>
+ <keyword type="struct" name="NMDeviceBond" link="NMDeviceBond.html#NMDeviceBond-struct"/>
+ <keyword type="struct" name="NMDeviceBondClass" link="NMDeviceBond.html#NMDeviceBondClass"/>
+ <keyword type="function" name="nm_device_bond_new ()" link="NMDeviceBond.html#nm-device-bond-new"/>
+ <keyword type="function" name="nm_device_bond_get_hw_address ()" link="NMDeviceBond.html#nm-device-bond-get-hw-address"/>
+ <keyword type="function" name="nm_device_bond_get_carrier ()" link="NMDeviceBond.html#nm-device-bond-get-carrier"/>
+ <keyword type="function" name="nm_device_bond_get_slaves ()" link="NMDeviceBond.html#nm-device-bond-get-slaves" since="0.9.6.4"/>
+ <keyword type="property" name="The &quot;carrier&quot; property" link="NMDeviceBond.html#NMDeviceBond--carrier"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceBond.html#NMDeviceBond--hw-address"/>
+ <keyword type="property" name="The &quot;slaves&quot; property" link="NMDeviceBond.html#NMDeviceBond--slaves"/>
<keyword type="enum" name="enum NMDeviceBridgeError" link="NMDeviceBridge.html#NMDeviceBridgeError" since="0.9.8"/>
<keyword type="macro" name="NM_DEVICE_BRIDGE_ERROR" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_bridge_error_quark ()" link="NMDeviceBridge.html#nm-device-bridge-error-quark" since="0.9.8"/>
<keyword type="macro" name="NM_DEVICE_BRIDGE_HW_ADDRESS" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_BRIDGE_CARRIER" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-CARRIER:CAPS"/>
<keyword type="macro" name="NM_DEVICE_BRIDGE_SLAVES" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-SLAVES:CAPS"/>
- <keyword type="property" name="The “carrier†property" link="NMDeviceBridge.html#NMDeviceBridge--carrier"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceBridge.html#NMDeviceBridge--hw-address"/>
- <keyword type="property" name="The “slaves†property" link="NMDeviceBridge.html#NMDeviceBridge--slaves"/>
- <keyword type="function" name="nm_device_infiniband_error_quark ()" link="NMDeviceInfiniband.html#nm-device-infiniband-error-quark"/>
- <keyword type="function" name="nm_device_infiniband_new ()" link="NMDeviceInfiniband.html#nm-device-infiniband-new"/>
- <keyword type="function" name="nm_device_infiniband_get_hw_address ()" link="NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address"/>
- <keyword type="function" name="nm_device_infiniband_get_carrier ()" link="NMDeviceInfiniband.html#nm-device-infiniband-get-carrier"/>
+ <keyword type="struct" name="NMDeviceBridge" link="NMDeviceBridge.html#NMDeviceBridge-struct"/>
+ <keyword type="struct" name="NMDeviceBridgeClass" link="NMDeviceBridge.html#NMDeviceBridgeClass"/>
+ <keyword type="function" name="nm_device_bridge_new ()" link="NMDeviceBridge.html#nm-device-bridge-new" since="0.9.8"/>
+ <keyword type="function" name="nm_device_bridge_get_hw_address ()" link="NMDeviceBridge.html#nm-device-bridge-get-hw-address" since="0.9.8"/>
+ <keyword type="function" name="nm_device_bridge_get_carrier ()" link="NMDeviceBridge.html#nm-device-bridge-get-carrier" since="0.9.8"/>
+ <keyword type="function" name="nm_device_bridge_get_slaves ()" link="NMDeviceBridge.html#nm-device-bridge-get-slaves" since="0.9.8"/>
+ <keyword type="property" name="The &quot;carrier&quot; property" link="NMDeviceBridge.html#NMDeviceBridge--carrier"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceBridge.html#NMDeviceBridge--hw-address"/>
+ <keyword type="property" name="The &quot;slaves&quot; property" link="NMDeviceBridge.html#NMDeviceBridge--slaves"/>
+ <keyword type="enum" name="enum NMDeviceTeamError" link="NMDeviceTeam.html#NMDeviceTeamError"/>
+ <keyword type="macro" name="NM_DEVICE_TEAM_ERROR" link="NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_team_error_quark ()" link="NMDeviceTeam.html#nm-device-team-error-quark" since="0.9.10"/>
+ <keyword type="macro" name="NM_DEVICE_TEAM_HW_ADDRESS" link="NMDeviceTeam.html#NM-DEVICE-TEAM-HW-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_TEAM_CARRIER" link="NMDeviceTeam.html#NM-DEVICE-TEAM-CARRIER:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_TEAM_SLAVES" link="NMDeviceTeam.html#NM-DEVICE-TEAM-SLAVES:CAPS"/>
+ <keyword type="struct" name="NMDeviceTeam" link="NMDeviceTeam.html#NMDeviceTeam-struct"/>
+ <keyword type="struct" name="NMDeviceTeamClass" link="NMDeviceTeam.html#NMDeviceTeamClass"/>
+ <keyword type="function" name="nm_device_team_new ()" link="NMDeviceTeam.html#nm-device-team-new" since="0.9.10"/>
+ <keyword type="function" name="nm_device_team_get_hw_address ()" link="NMDeviceTeam.html#nm-device-team-get-hw-address" since="0.9.10"/>
+ <keyword type="function" name="nm_device_team_get_carrier ()" link="NMDeviceTeam.html#nm-device-team-get-carrier" since="0.9.10"/>
+ <keyword type="function" name="nm_device_team_get_slaves ()" link="NMDeviceTeam.html#nm-device-team-get-slaves" since="0.9.10"/>
+ <keyword type="property" name="The &quot;carrier&quot; property" link="NMDeviceTeam.html#NMDeviceTeam--carrier"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceTeam.html#NMDeviceTeam--hw-address"/>
+ <keyword type="property" name="The &quot;slaves&quot; property" link="NMDeviceTeam.html#NMDeviceTeam--slaves"/>
+ <keyword type="enum" name="enum NMDeviceGenericError" link="NMDeviceGeneric.html#NMDeviceGenericError"/>
+ <keyword type="macro" name="NM_DEVICE_GENERIC_ERROR" link="NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_generic_error_quark ()" link="NMDeviceGeneric.html#nm-device-generic-error-quark" since="0.9.10"/>
+ <keyword type="macro" name="NM_DEVICE_GENERIC_HW_ADDRESS" link="NMDeviceGeneric.html#NM-DEVICE-GENERIC-HW-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_GENERIC_TYPE_DESCRIPTION" link="NMDeviceGeneric.html#NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS"/>
+ <keyword type="struct" name="NMDeviceGeneric" link="NMDeviceGeneric.html#NMDeviceGeneric-struct"/>
+ <keyword type="struct" name="NMDeviceGenericClass" link="NMDeviceGeneric.html#NMDeviceGenericClass"/>
+ <keyword type="function" name="nm_device_generic_new ()" link="NMDeviceGeneric.html#nm-device-generic-new" since="0.9.10"/>
+ <keyword type="function" name="nm_device_generic_get_hw_address ()" link="NMDeviceGeneric.html#nm-device-generic-get-hw-address" since="0.9.10"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceGeneric.html#NMDeviceGeneric--hw-address"/>
+ <keyword type="property" name="The &quot;type-description&quot; property" link="NMDeviceGeneric.html#NMDeviceGeneric--type-description"/>
<keyword type="enum" name="enum NMDeviceInfinibandError" link="NMDeviceInfiniband.html#NMDeviceInfinibandError"/>
<keyword type="macro" name="NM_DEVICE_INFINIBAND_ERROR" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_infiniband_error_quark ()" link="NMDeviceInfiniband.html#nm-device-infiniband-error-quark"/>
<keyword type="macro" name="NM_DEVICE_INFINIBAND_HW_ADDRESS" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_INFINIBAND_CARRIER" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-CARRIER:CAPS"/>
- <keyword type="property" name="The “carrier†property" link="NMDeviceInfiniband.html#NMDeviceInfiniband--carrier"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address"/>
- <keyword type="function" name="nm_device_vlan_error_quark ()" link="NMDeviceVlan.html#nm-device-vlan-error-quark"/>
- <keyword type="function" name="nm_device_vlan_new ()" link="NMDeviceVlan.html#nm-device-vlan-new"/>
- <keyword type="function" name="nm_device_vlan_get_hw_address ()" link="NMDeviceVlan.html#nm-device-vlan-get-hw-address"/>
- <keyword type="function" name="nm_device_vlan_get_carrier ()" link="NMDeviceVlan.html#nm-device-vlan-get-carrier"/>
- <keyword type="function" name="nm_device_vlan_get_vlan_id ()" link="NMDeviceVlan.html#nm-device-vlan-get-vlan-id"/>
+ <keyword type="struct" name="NMDeviceInfiniband" link="NMDeviceInfiniband.html#NMDeviceInfiniband-struct"/>
+ <keyword type="struct" name="NMDeviceInfinibandClass" link="NMDeviceInfiniband.html#NMDeviceInfinibandClass"/>
+ <keyword type="function" name="nm_device_infiniband_new ()" link="NMDeviceInfiniband.html#nm-device-infiniband-new"/>
+ <keyword type="function" name="nm_device_infiniband_get_hw_address ()" link="NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address"/>
+ <keyword type="function" name="nm_device_infiniband_get_carrier ()" link="NMDeviceInfiniband.html#nm-device-infiniband-get-carrier"/>
+ <keyword type="property" name="The &quot;carrier&quot; property" link="NMDeviceInfiniband.html#NMDeviceInfiniband--carrier"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address"/>
<keyword type="enum" name="enum NMDeviceVlanError" link="NMDeviceVlan.html#NMDeviceVlanError"/>
<keyword type="macro" name="NM_DEVICE_VLAN_ERROR" link="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_vlan_error_quark ()" link="NMDeviceVlan.html#nm-device-vlan-error-quark"/>
<keyword type="macro" name="NM_DEVICE_VLAN_HW_ADDRESS" link="NMDeviceVlan.html#NM-DEVICE-VLAN-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_VLAN_CARRIER" link="NMDeviceVlan.html#NM-DEVICE-VLAN-CARRIER:CAPS"/>
<keyword type="macro" name="NM_DEVICE_VLAN_VLAN_ID" link="NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS"/>
- <keyword type="property" name="The “carrier†property" link="NMDeviceVlan.html#NMDeviceVlan--carrier"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceVlan.html#NMDeviceVlan--hw-address"/>
- <keyword type="property" name="The “vlan-id†property" link="NMDeviceVlan.html#NMDeviceVlan--vlan-id"/>
- <keyword type="function" name="nm_device_olpc_mesh_error_quark ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark"/>
- <keyword type="function" name="nm_device_olpc_mesh_new ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new"/>
- <keyword type="function" name="nm_device_olpc_mesh_get_hw_address ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address"/>
- <keyword type="function" name="nm_device_olpc_mesh_get_companion ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion"/>
- <keyword type="function" name="nm_device_olpc_mesh_get_active_channel ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel"/>
+ <keyword type="struct" name="NMDeviceVlan" link="NMDeviceVlan.html#NMDeviceVlan-struct"/>
+ <keyword type="struct" name="NMDeviceVlanClass" link="NMDeviceVlan.html#NMDeviceVlanClass"/>
+ <keyword type="function" name="nm_device_vlan_new ()" link="NMDeviceVlan.html#nm-device-vlan-new"/>
+ <keyword type="function" name="nm_device_vlan_get_hw_address ()" link="NMDeviceVlan.html#nm-device-vlan-get-hw-address"/>
+ <keyword type="function" name="nm_device_vlan_get_carrier ()" link="NMDeviceVlan.html#nm-device-vlan-get-carrier"/>
+ <keyword type="function" name="nm_device_vlan_get_vlan_id ()" link="NMDeviceVlan.html#nm-device-vlan-get-vlan-id"/>
+ <keyword type="property" name="The &quot;carrier&quot; property" link="NMDeviceVlan.html#NMDeviceVlan--carrier"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceVlan.html#NMDeviceVlan--hw-address"/>
+ <keyword type="property" name="The &quot;vlan-id&quot; property" link="NMDeviceVlan.html#NMDeviceVlan--vlan-id"/>
<keyword type="enum" name="enum NMDeviceOlpcMeshError" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshError"/>
<keyword type="macro" name="NM_DEVICE_OLPC_MESH_ERROR" link="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_olpc_mesh_error_quark ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-error-quark"/>
<keyword type="macro" name="NM_DEVICE_OLPC_MESH_HW_ADDRESS" link="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_DEVICE_OLPC_MESH_COMPANION" link="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-COMPANION:CAPS"/>
<keyword type="macro" name="NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL" link="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS"/>
- <keyword type="property" name="The “active-channel†property" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel"/>
- <keyword type="property" name="The “companion†property" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion"/>
- <keyword type="property" name="The “hw-address†property" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address"/>
- <keyword type="function" name="nm_wimax_nsp_new ()" link="NMWimaxNsp.html#nm-wimax-nsp-new"/>
- <keyword type="function" name="nm_wimax_nsp_get_name ()" link="NMWimaxNsp.html#nm-wimax-nsp-get-name"/>
- <keyword type="function" name="nm_wimax_nsp_get_signal_quality ()" link="NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality"/>
- <keyword type="function" name="nm_wimax_nsp_get_network_type ()" link="NMWimaxNsp.html#nm-wimax-nsp-get-network-type"/>
- <keyword type="function" name="nm_wimax_nsp_filter_connections ()" link="NMWimaxNsp.html#nm-wimax-nsp-filter-connections"/>
- <keyword type="function" name="nm_wimax_nsp_connection_valid ()" link="NMWimaxNsp.html#nm-wimax-nsp-connection-valid"/>
+ <keyword type="struct" name="NMDeviceOlpcMesh" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct"/>
+ <keyword type="struct" name="NMDeviceOlpcMeshClass" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshClass"/>
+ <keyword type="function" name="nm_device_olpc_mesh_new ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-new"/>
+ <keyword type="function" name="nm_device_olpc_mesh_get_hw_address ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address"/>
+ <keyword type="function" name="nm_device_olpc_mesh_get_companion ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion"/>
+ <keyword type="function" name="nm_device_olpc_mesh_get_active_channel ()" link="NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel"/>
+ <keyword type="property" name="The &quot;active-channel&quot; property" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel"/>
+ <keyword type="property" name="The &quot;companion&quot; property" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address"/>
<keyword type="macro" name="NM_WIMAX_NSP_NAME" link="NMWimaxNsp.html#NM-WIMAX-NSP-NAME:CAPS"/>
<keyword type="macro" name="NM_WIMAX_NSP_SIGNAL_QUALITY" link="NMWimaxNsp.html#NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS"/>
<keyword type="macro" name="NM_WIMAX_NSP_NETWORK_TYPE" link="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE:CAPS"/>
<keyword type="enum" name="enum NMWimaxNspNetworkType" link="NMWimaxNsp.html#NMWimaxNspNetworkType"/>
- <keyword type="property" name="The “name†property" link="NMWimaxNsp.html#NMWimaxNsp--name"/>
- <keyword type="property" name="The “network-type†property" link="NMWimaxNsp.html#NMWimaxNsp--network-type"/>
- <keyword type="property" name="The “signal-quality†property" link="NMWimaxNsp.html#NMWimaxNsp--signal-quality"/>
- <keyword type="function" name="nm_access_point_new ()" link="NMAccessPoint.html#nm-access-point-new"/>
- <keyword type="function" name="nm_access_point_get_flags ()" link="NMAccessPoint.html#nm-access-point-get-flags"/>
- <keyword type="function" name="nm_access_point_get_wpa_flags ()" link="NMAccessPoint.html#nm-access-point-get-wpa-flags"/>
- <keyword type="function" name="nm_access_point_get_rsn_flags ()" link="NMAccessPoint.html#nm-access-point-get-rsn-flags"/>
- <keyword type="function" name="nm_access_point_get_ssid ()" link="NMAccessPoint.html#nm-access-point-get-ssid"/>
- <keyword type="function" name="nm_access_point_get_bssid ()" link="NMAccessPoint.html#nm-access-point-get-bssid"/>
- <keyword type="function" name="nm_access_point_get_frequency ()" link="NMAccessPoint.html#nm-access-point-get-frequency"/>
- <keyword type="function" name="nm_access_point_get_mode ()" link="NMAccessPoint.html#nm-access-point-get-mode"/>
- <keyword type="function" name="nm_access_point_get_max_bitrate ()" link="NMAccessPoint.html#nm-access-point-get-max-bitrate"/>
- <keyword type="function" name="nm_access_point_get_strength ()" link="NMAccessPoint.html#nm-access-point-get-strength"/>
- <keyword type="function" name="nm_access_point_filter_connections ()" link="NMAccessPoint.html#nm-access-point-filter-connections"/>
- <keyword type="function" name="nm_access_point_connection_valid ()" link="NMAccessPoint.html#nm-access-point-connection-valid"/>
- <keyword type="function" name="nm_access_point_get_hw_address ()" link="NMAccessPoint.html#nm-access-point-get-hw-address" deprecated="0.9: Use nm_access_point_get_bssid() instead."/>
+ <keyword type="struct" name="NMWimaxNsp" link="NMWimaxNsp.html#NMWimaxNsp-struct"/>
+ <keyword type="struct" name="NMWimaxNspClass" link="NMWimaxNsp.html#NMWimaxNspClass"/>
+ <keyword type="function" name="nm_wimax_nsp_new ()" link="NMWimaxNsp.html#nm-wimax-nsp-new"/>
+ <keyword type="function" name="nm_wimax_nsp_get_name ()" link="NMWimaxNsp.html#nm-wimax-nsp-get-name"/>
+ <keyword type="function" name="nm_wimax_nsp_get_signal_quality ()" link="NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality"/>
+ <keyword type="function" name="nm_wimax_nsp_get_network_type ()" link="NMWimaxNsp.html#nm-wimax-nsp-get-network-type"/>
+ <keyword type="function" name="nm_wimax_nsp_filter_connections ()" link="NMWimaxNsp.html#nm-wimax-nsp-filter-connections"/>
+ <keyword type="function" name="nm_wimax_nsp_connection_valid ()" link="NMWimaxNsp.html#nm-wimax-nsp-connection-valid"/>
+ <keyword type="property" name="The &quot;name&quot; property" link="NMWimaxNsp.html#NMWimaxNsp--name"/>
+ <keyword type="property" name="The &quot;network-type&quot; property" link="NMWimaxNsp.html#NMWimaxNsp--network-type"/>
+ <keyword type="property" name="The &quot;signal-quality&quot; property" link="NMWimaxNsp.html#NMWimaxNsp--signal-quality"/>
<keyword type="macro" name="NM_ACCESS_POINT_FLAGS" link="NMAccessPoint.html#NM-ACCESS-POINT-FLAGS:CAPS"/>
<keyword type="macro" name="NM_ACCESS_POINT_WPA_FLAGS" link="NMAccessPoint.html#NM-ACCESS-POINT-WPA-FLAGS:CAPS"/>
<keyword type="macro" name="NM_ACCESS_POINT_RSN_FLAGS" link="NMAccessPoint.html#NM-ACCESS-POINT-RSN-FLAGS:CAPS"/>
@@ -404,164 +496,356 @@
<keyword type="macro" name="NM_ACCESS_POINT_MAX_BITRATE" link="NMAccessPoint.html#NM-ACCESS-POINT-MAX-BITRATE:CAPS"/>
<keyword type="macro" name="NM_ACCESS_POINT_STRENGTH" link="NMAccessPoint.html#NM-ACCESS-POINT-STRENGTH:CAPS"/>
<keyword type="macro" name="NM_ACCESS_POINT_HW_ADDRESS" link="NMAccessPoint.html#NM-ACCESS-POINT-HW-ADDRESS:CAPS"/>
- <keyword type="property" name="The “bssid†property" link="NMAccessPoint.html#NMAccessPoint--bssid"/>
- <keyword type="property" name="The “flags†property" link="NMAccessPoint.html#NMAccessPoint--flags"/>
- <keyword type="property" name="The “frequency†property" link="NMAccessPoint.html#NMAccessPoint--frequency"/>
- <keyword type="property" name="The “hw-address†property" link="NMAccessPoint.html#NMAccessPoint--hw-address"/>
- <keyword type="property" name="The “max-bitrate†property" link="NMAccessPoint.html#NMAccessPoint--max-bitrate"/>
- <keyword type="property" name="The “mode†property" link="NMAccessPoint.html#NMAccessPoint--mode"/>
- <keyword type="property" name="The “rsn-flags†property" link="NMAccessPoint.html#NMAccessPoint--rsn-flags"/>
- <keyword type="property" name="The “ssid†property" link="NMAccessPoint.html#NMAccessPoint--ssid"/>
- <keyword type="property" name="The “strength†property" link="NMAccessPoint.html#NMAccessPoint--strength"/>
- <keyword type="property" name="The “wpa-flags†property" link="NMAccessPoint.html#NMAccessPoint--wpa-flags"/>
- <keyword type="function" name="nm_ip4_config_new ()" link="NMIP4Config.html#nm-ip4-config-new"/>
- <keyword type="function" name="nm_ip4_config_get_addresses ()" link="NMIP4Config.html#nm-ip4-config-get-addresses"/>
- <keyword type="function" name="nm_ip4_config_get_nameservers ()" link="NMIP4Config.html#nm-ip4-config-get-nameservers"/>
- <keyword type="function" name="nm_ip4_config_get_domains ()" link="NMIP4Config.html#nm-ip4-config-get-domains"/>
- <keyword type="function" name="nm_ip4_config_get_routes ()" link="NMIP4Config.html#nm-ip4-config-get-routes"/>
- <keyword type="function" name="nm_ip4_config_get_wins_servers ()" link="NMIP4Config.html#nm-ip4-config-get-wins-servers"/>
+ <keyword type="struct" name="NMAccessPoint" link="NMAccessPoint.html#NMAccessPoint-struct"/>
+ <keyword type="struct" name="NMAccessPointClass" link="NMAccessPoint.html#NMAccessPointClass"/>
+ <keyword type="function" name="nm_access_point_new ()" link="NMAccessPoint.html#nm-access-point-new"/>
+ <keyword type="function" name="nm_access_point_get_flags ()" link="NMAccessPoint.html#nm-access-point-get-flags"/>
+ <keyword type="function" name="nm_access_point_get_wpa_flags ()" link="NMAccessPoint.html#nm-access-point-get-wpa-flags"/>
+ <keyword type="function" name="nm_access_point_get_rsn_flags ()" link="NMAccessPoint.html#nm-access-point-get-rsn-flags"/>
+ <keyword type="function" name="nm_access_point_get_ssid ()" link="NMAccessPoint.html#nm-access-point-get-ssid"/>
+ <keyword type="function" name="nm_access_point_get_bssid ()" link="NMAccessPoint.html#nm-access-point-get-bssid"/>
+ <keyword type="function" name="nm_access_point_get_frequency ()" link="NMAccessPoint.html#nm-access-point-get-frequency"/>
+ <keyword type="function" name="nm_access_point_get_mode ()" link="NMAccessPoint.html#nm-access-point-get-mode"/>
+ <keyword type="function" name="nm_access_point_get_max_bitrate ()" link="NMAccessPoint.html#nm-access-point-get-max-bitrate"/>
+ <keyword type="function" name="nm_access_point_get_strength ()" link="NMAccessPoint.html#nm-access-point-get-strength"/>
+ <keyword type="function" name="nm_access_point_filter_connections ()" link="NMAccessPoint.html#nm-access-point-filter-connections"/>
+ <keyword type="function" name="nm_access_point_connection_valid ()" link="NMAccessPoint.html#nm-access-point-connection-valid"/>
+ <keyword type="function" name="nm_access_point_get_hw_address ()" link="NMAccessPoint.html#nm-access-point-get-hw-address" deprecated="0.9: Use nm_access_point_get_bssid() instead."/>
+ <keyword type="property" name="The &quot;bssid&quot; property" link="NMAccessPoint.html#NMAccessPoint--bssid"/>
+ <keyword type="property" name="The &quot;flags&quot; property" link="NMAccessPoint.html#NMAccessPoint--flags"/>
+ <keyword type="property" name="The &quot;frequency&quot; property" link="NMAccessPoint.html#NMAccessPoint--frequency"/>
+ <keyword type="property" name="The &quot;hw-address&quot; property" link="NMAccessPoint.html#NMAccessPoint--hw-address"/>
+ <keyword type="property" name="The &quot;max-bitrate&quot; property" link="NMAccessPoint.html#NMAccessPoint--max-bitrate"/>
+ <keyword type="property" name="The &quot;mode&quot; property" link="NMAccessPoint.html#NMAccessPoint--mode"/>
+ <keyword type="property" name="The &quot;rsn-flags&quot; property" link="NMAccessPoint.html#NMAccessPoint--rsn-flags"/>
+ <keyword type="property" name="The &quot;ssid&quot; property" link="NMAccessPoint.html#NMAccessPoint--ssid"/>
+ <keyword type="property" name="The &quot;strength&quot; property" link="NMAccessPoint.html#NMAccessPoint--strength"/>
+ <keyword type="property" name="The &quot;wpa-flags&quot; property" link="NMAccessPoint.html#NMAccessPoint--wpa-flags"/>
+ <keyword type="struct" name="NMIP4Config" link="NMIP4Config.html#NMIP4Config-struct"/>
+ <keyword type="struct" name="NMIP4ConfigClass" link="NMIP4Config.html#NMIP4ConfigClass"/>
+ <keyword type="macro" name="NM_IP4_CONFIG_GATEWAY" link="NMIP4Config.html#NM-IP4-CONFIG-GATEWAY:CAPS"/>
<keyword type="macro" name="NM_IP4_CONFIG_ADDRESSES" link="NMIP4Config.html#NM-IP4-CONFIG-ADDRESSES:CAPS"/>
+ <keyword type="macro" name="NM_IP4_CONFIG_ROUTES" link="NMIP4Config.html#NM-IP4-CONFIG-ROUTES:CAPS"/>
<keyword type="macro" name="NM_IP4_CONFIG_NAMESERVERS" link="NMIP4Config.html#NM-IP4-CONFIG-NAMESERVERS:CAPS"/>
<keyword type="macro" name="NM_IP4_CONFIG_DOMAINS" link="NMIP4Config.html#NM-IP4-CONFIG-DOMAINS:CAPS"/>
- <keyword type="macro" name="NM_IP4_CONFIG_ROUTES" link="NMIP4Config.html#NM-IP4-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_IP4_CONFIG_SEARCHES" link="NMIP4Config.html#NM-IP4-CONFIG-SEARCHES:CAPS"/>
<keyword type="macro" name="NM_IP4_CONFIG_WINS_SERVERS" link="NMIP4Config.html#NM-IP4-CONFIG-WINS-SERVERS:CAPS"/>
- <keyword type="property" name="The “addresses†property" link="NMIP4Config.html#NMIP4Config--addresses"/>
- <keyword type="property" name="The “domains†property" link="NMIP4Config.html#NMIP4Config--domains"/>
- <keyword type="property" name="The “nameservers†property" link="NMIP4Config.html#NMIP4Config--nameservers"/>
- <keyword type="property" name="The “routes†property" link="NMIP4Config.html#NMIP4Config--routes"/>
- <keyword type="property" name="The “wins-servers†property" link="NMIP4Config.html#NMIP4Config--wins-servers"/>
- <keyword type="function" name="nm_ip6_config_new ()" link="NMIP6Config.html#nm-ip6-config-new"/>
- <keyword type="function" name="nm_ip6_config_get_addresses ()" link="NMIP6Config.html#nm-ip6-config-get-addresses"/>
- <keyword type="function" name="nm_ip6_config_get_nameservers ()" link="NMIP6Config.html#nm-ip6-config-get-nameservers"/>
- <keyword type="function" name="nm_ip6_config_get_domains ()" link="NMIP6Config.html#nm-ip6-config-get-domains"/>
- <keyword type="function" name="nm_ip6_config_get_routes ()" link="NMIP6Config.html#nm-ip6-config-get-routes"/>
+ <keyword type="function" name="nm_ip4_config_new ()" link="NMIP4Config.html#nm-ip4-config-new"/>
+ <keyword type="function" name="nm_ip4_config_get_gateway ()" link="NMIP4Config.html#nm-ip4-config-get-gateway" since="0.9.10"/>
+ <keyword type="function" name="nm_ip4_config_get_addresses ()" link="NMIP4Config.html#nm-ip4-config-get-addresses"/>
+ <keyword type="function" name="nm_ip4_config_get_routes ()" link="NMIP4Config.html#nm-ip4-config-get-routes"/>
+ <keyword type="function" name="nm_ip4_config_get_nameservers ()" link="NMIP4Config.html#nm-ip4-config-get-nameservers"/>
+ <keyword type="function" name="nm_ip4_config_get_domains ()" link="NMIP4Config.html#nm-ip4-config-get-domains"/>
+ <keyword type="function" name="nm_ip4_config_get_searches ()" link="NMIP4Config.html#nm-ip4-config-get-searches" since="0.9.10"/>
+ <keyword type="function" name="nm_ip4_config_get_wins_servers ()" link="NMIP4Config.html#nm-ip4-config-get-wins-servers"/>
+ <keyword type="property" name="The &quot;addresses&quot; property" link="NMIP4Config.html#NMIP4Config--addresses"/>
+ <keyword type="property" name="The &quot;domains&quot; property" link="NMIP4Config.html#NMIP4Config--domains"/>
+ <keyword type="property" name="The &quot;gateway&quot; property" link="NMIP4Config.html#NMIP4Config--gateway"/>
+ <keyword type="property" name="The &quot;nameservers&quot; property" link="NMIP4Config.html#NMIP4Config--nameservers"/>
+ <keyword type="property" name="The &quot;routes&quot; property" link="NMIP4Config.html#NMIP4Config--routes"/>
+ <keyword type="property" name="The &quot;searches&quot; property" link="NMIP4Config.html#NMIP4Config--searches"/>
+ <keyword type="property" name="The &quot;wins-servers&quot; property" link="NMIP4Config.html#NMIP4Config--wins-servers"/>
+ <keyword type="struct" name="NMIP6Config" link="NMIP6Config.html#NMIP6Config-struct"/>
+ <keyword type="struct" name="NMIP6ConfigClass" link="NMIP6Config.html#NMIP6ConfigClass"/>
+ <keyword type="macro" name="NM_IP6_CONFIG_GATEWAY" link="NMIP6Config.html#NM-IP6-CONFIG-GATEWAY:CAPS"/>
<keyword type="macro" name="NM_IP6_CONFIG_ADDRESSES" link="NMIP6Config.html#NM-IP6-CONFIG-ADDRESSES:CAPS"/>
+ <keyword type="macro" name="NM_IP6_CONFIG_ROUTES" link="NMIP6Config.html#NM-IP6-CONFIG-ROUTES:CAPS"/>
<keyword type="macro" name="NM_IP6_CONFIG_NAMESERVERS" link="NMIP6Config.html#NM-IP6-CONFIG-NAMESERVERS:CAPS"/>
<keyword type="macro" name="NM_IP6_CONFIG_DOMAINS" link="NMIP6Config.html#NM-IP6-CONFIG-DOMAINS:CAPS"/>
- <keyword type="macro" name="NM_IP6_CONFIG_ROUTES" link="NMIP6Config.html#NM-IP6-CONFIG-ROUTES:CAPS"/>
- <keyword type="property" name="The “addresses†property" link="NMIP6Config.html#NMIP6Config--addresses"/>
- <keyword type="property" name="The “domains†property" link="NMIP6Config.html#NMIP6Config--domains"/>
- <keyword type="property" name="The “nameservers†property" link="NMIP6Config.html#NMIP6Config--nameservers"/>
- <keyword type="property" name="The “routes†property" link="NMIP6Config.html#NMIP6Config--routes"/>
- <keyword type="function" name="nm_dhcp4_config_new ()" link="NMDHCP4Config.html#nm-dhcp4-config-new"/>
- <keyword type="function" name="nm_dhcp4_config_get_options ()" link="NMDHCP4Config.html#nm-dhcp4-config-get-options"/>
- <keyword type="function" name="nm_dhcp4_config_get_one_option ()" link="NMDHCP4Config.html#nm-dhcp4-config-get-one-option"/>
+ <keyword type="macro" name="NM_IP6_CONFIG_SEARCHES" link="NMIP6Config.html#NM-IP6-CONFIG-SEARCHES:CAPS"/>
+ <keyword type="function" name="nm_ip6_config_new ()" link="NMIP6Config.html#nm-ip6-config-new"/>
+ <keyword type="function" name="nm_ip6_config_get_gateway ()" link="NMIP6Config.html#nm-ip6-config-get-gateway" since="0.9.10"/>
+ <keyword type="function" name="nm_ip6_config_get_addresses ()" link="NMIP6Config.html#nm-ip6-config-get-addresses"/>
+ <keyword type="function" name="nm_ip6_config_get_routes ()" link="NMIP6Config.html#nm-ip6-config-get-routes"/>
+ <keyword type="function" name="nm_ip6_config_get_num_nameservers ()" link="NMIP6Config.html#nm-ip6-config-get-num-nameservers" since="0.9.10"/>
+ <keyword type="function" name="nm_ip6_config_get_nameserver ()" link="NMIP6Config.html#nm-ip6-config-get-nameserver" since="0.9.10"/>
+ <keyword type="function" name="nm_ip6_config_get_nameservers ()" link="NMIP6Config.html#nm-ip6-config-get-nameservers"/>
+ <keyword type="function" name="nm_ip6_config_get_domains ()" link="NMIP6Config.html#nm-ip6-config-get-domains"/>
+ <keyword type="function" name="nm_ip6_config_get_searches ()" link="NMIP6Config.html#nm-ip6-config-get-searches" since="0.9.10"/>
+ <keyword type="property" name="The &quot;addresses&quot; property" link="NMIP6Config.html#NMIP6Config--addresses"/>
+ <keyword type="property" name="The &quot;domains&quot; property" link="NMIP6Config.html#NMIP6Config--domains"/>
+ <keyword type="property" name="The &quot;gateway&quot; property" link="NMIP6Config.html#NMIP6Config--gateway"/>
+ <keyword type="property" name="The &quot;nameservers&quot; property" link="NMIP6Config.html#NMIP6Config--nameservers"/>
+ <keyword type="property" name="The &quot;routes&quot; property" link="NMIP6Config.html#NMIP6Config--routes"/>
+ <keyword type="property" name="The &quot;searches&quot; property" link="NMIP6Config.html#NMIP6Config--searches"/>
+ <keyword type="struct" name="NMDHCP4Config" link="NMDHCP4Config.html#NMDHCP4Config-struct"/>
+ <keyword type="struct" name="NMDHCP4ConfigClass" link="NMDHCP4Config.html#NMDHCP4ConfigClass"/>
<keyword type="macro" name="NM_DHCP4_CONFIG_OPTIONS" link="NMDHCP4Config.html#NM-DHCP4-CONFIG-OPTIONS:CAPS"/>
- <keyword type="property" name="The “options†property" link="NMDHCP4Config.html#NMDHCP4Config--options"/>
- <keyword type="function" name="nm_dhcp6_config_new ()" link="NMDHCP6Config.html#nm-dhcp6-config-new"/>
- <keyword type="function" name="nm_dhcp6_config_get_options ()" link="NMDHCP6Config.html#nm-dhcp6-config-get-options"/>
- <keyword type="function" name="nm_dhcp6_config_get_one_option ()" link="NMDHCP6Config.html#nm-dhcp6-config-get-one-option"/>
+ <keyword type="function" name="nm_dhcp4_config_new ()" link="NMDHCP4Config.html#nm-dhcp4-config-new"/>
+ <keyword type="function" name="nm_dhcp4_config_get_options ()" link="NMDHCP4Config.html#nm-dhcp4-config-get-options"/>
+ <keyword type="function" name="nm_dhcp4_config_get_one_option ()" link="NMDHCP4Config.html#nm-dhcp4-config-get-one-option"/>
+ <keyword type="property" name="The &quot;options&quot; property" link="NMDHCP4Config.html#NMDHCP4Config--options"/>
+ <keyword type="struct" name="NMDHCP6Config" link="NMDHCP6Config.html#NMDHCP6Config-struct"/>
+ <keyword type="struct" name="NMDHCP6ConfigClass" link="NMDHCP6Config.html#NMDHCP6ConfigClass"/>
<keyword type="macro" name="NM_DHCP6_CONFIG_OPTIONS" link="NMDHCP6Config.html#NM-DHCP6-CONFIG-OPTIONS:CAPS"/>
- <keyword type="property" name="The “options†property" link="NMDHCP6Config.html#NMDHCP6Config--options"/>
- <keyword type="function" name="nm_object_error_quark ()" link="NMObject.html#nm-object-error-quark"/>
- <keyword type="function" name="nm_object_get_connection ()" link="NMObject.html#nm-object-get-connection"/>
- <keyword type="function" name="nm_object_get_path ()" link="NMObject.html#nm-object-get-path"/>
+ <keyword type="function" name="nm_dhcp6_config_new ()" link="NMDHCP6Config.html#nm-dhcp6-config-new"/>
+ <keyword type="function" name="nm_dhcp6_config_get_options ()" link="NMDHCP6Config.html#nm-dhcp6-config-get-options"/>
+ <keyword type="function" name="nm_dhcp6_config_get_one_option ()" link="NMDHCP6Config.html#nm-dhcp6-config-get-one-option"/>
+ <keyword type="property" name="The &quot;options&quot; property" link="NMDHCP6Config.html#NMDHCP6Config--options"/>
<keyword type="enum" name="enum NMObjectError" link="NMObject.html#NMObjectError"/>
<keyword type="macro" name="NM_OBJECT_ERROR" link="NMObject.html#NM-OBJECT-ERROR:CAPS"/>
+ <keyword type="function" name="nm_object_error_quark ()" link="NMObject.html#nm-object-error-quark"/>
<keyword type="macro" name="NM_OBJECT_DBUS_CONNECTION" link="NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS"/>
<keyword type="macro" name="NM_OBJECT_DBUS_PATH" link="NMObject.html#NM-OBJECT-DBUS-PATH:CAPS"/>
- <keyword type="property" name="The “dbus-connection†property" link="NMObject.html#NMObject--dbus-connection"/>
- <keyword type="property" name="The “dbus-path†property" link="NMObject.html#NMObject--dbus-path"/>
- <keyword type="signal" name="The “object-creation-failed†signal" link="NMObject.html#NMObject-object-creation-failed"/>
- <keyword type="function" name="NMRemoteConnectionCommitFunc ()" link="NMRemoteConnection.html#NMRemoteConnectionCommitFunc"/>
- <keyword type="function" name="NMRemoteConnectionDeleteFunc ()" link="NMRemoteConnection.html#NMRemoteConnectionDeleteFunc"/>
- <keyword type="function" name="NMRemoteConnectionGetSecretsFunc ()" link="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc"/>
- <keyword type="function" name="nm_remote_connection_new ()" link="NMRemoteConnection.html#nm-remote-connection-new"/>
- <keyword type="function" name="nm_remote_connection_commit_changes ()" link="NMRemoteConnection.html#nm-remote-connection-commit-changes"/>
- <keyword type="function" name="nm_remote_connection_delete ()" link="NMRemoteConnection.html#nm-remote-connection-delete"/>
- <keyword type="function" name="nm_remote_connection_get_secrets ()" link="NMRemoteConnection.html#nm-remote-connection-get-secrets"/>
+ <keyword type="struct" name="NMObject" link="NMObject.html#NMObject-struct"/>
+ <keyword type="struct" name="NMObjectClass" link="NMObject.html#NMObjectClass"/>
+ <keyword type="function" name="nm_object_get_connection ()" link="NMObject.html#nm-object-get-connection"/>
+ <keyword type="function" name="nm_object_get_path ()" link="NMObject.html#nm-object-get-path"/>
+ <keyword type="property" name="The &quot;dbus-connection&quot; property" link="NMObject.html#NMObject--dbus-connection"/>
+ <keyword type="property" name="The &quot;dbus-path&quot; property" link="NMObject.html#NMObject--dbus-path"/>
+ <keyword type="signal" name="The &quot;object-creation-failed&quot; signal" link="NMObject.html#NMObject-object-creation-failed"/>
+ <keyword type="enum" name="enum NMRemoteConnectionError" link="NMRemoteConnection.html#NMRemoteConnectionError"/>
+ <keyword type="macro" name="NM_REMOTE_CONNECTION_ERROR" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR:CAPS"/>
+ <keyword type="function" name="nm_remote_connection_error_quark ()" link="NMRemoteConnection.html#nm-remote-connection-error-quark"/>
+ <keyword type="macro" name="NM_REMOTE_CONNECTION_UNSAVED" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UNSAVED:CAPS"/>
<keyword type="macro" name="NM_REMOTE_CONNECTION_UPDATED" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UPDATED:CAPS"/>
<keyword type="macro" name="NM_REMOTE_CONNECTION_REMOVED" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-REMOVED:CAPS"/>
- <keyword type="property" name="The “bus†property" link="NMRemoteConnection.html#NMRemoteConnection--bus"/>
- <keyword type="property" name="The “dbus-connection†property" link="NMRemoteConnection.html#NMRemoteConnection--dbus-connection"/>
- <keyword type="property" name="The “dbus-path†property" link="NMRemoteConnection.html#NMRemoteConnection--dbus-path"/>
- <keyword type="signal" name="The “removed†signal" link="NMRemoteConnection.html#NMRemoteConnection-removed"/>
- <keyword type="signal" name="The “updated†signal" link="NMRemoteConnection.html#NMRemoteConnection-updated"/>
- <keyword type="signal" name="The “visible†signal" link="NMRemoteConnection.html#NMRemoteConnection-visible"/>
- <keyword type="function" name="nm_remote_settings_error_quark ()" link="NMRemoteSettings.html#nm-remote-settings-error-quark"/>
- <keyword type="function" name="NMRemoteSettingsAddConnectionFunc ()" link="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc"/>
- <keyword type="function" name="NMRemoteSettingsSaveHostnameFunc ()" link="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc"/>
- <keyword type="function" name="nm_remote_settings_new ()" link="NMRemoteSettings.html#nm-remote-settings-new"/>
- <keyword type="function" name="nm_remote_settings_new_async ()" link="NMRemoteSettings.html#nm-remote-settings-new-async"/>
- <keyword type="function" name="nm_remote_settings_new_finish ()" link="NMRemoteSettings.html#nm-remote-settings-new-finish"/>
- <keyword type="function" name="nm_remote_settings_list_connections ()" link="NMRemoteSettings.html#nm-remote-settings-list-connections"/>
- <keyword type="function" name="nm_remote_settings_get_connection_by_path ()" link="NMRemoteSettings.html#nm-remote-settings-get-connection-by-path"/>
- <keyword type="function" name="nm_remote_settings_get_connection_by_uuid ()" link="NMRemoteSettings.html#nm-remote-settings-get-connection-by-uuid"/>
- <keyword type="function" name="nm_remote_settings_add_connection ()" link="NMRemoteSettings.html#nm-remote-settings-add-connection"/>
- <keyword type="function" name="nm_remote_settings_save_hostname ()" link="NMRemoteSettings.html#nm-remote-settings-save-hostname"/>
+ <keyword type="struct" name="NMRemoteConnection" link="NMRemoteConnection.html#NMRemoteConnection-struct"/>
+ <keyword type="struct" name="NMRemoteConnectionClass" link="NMRemoteConnection.html#NMRemoteConnectionClass"/>
+ <keyword type="function" name="NMRemoteConnectionResultFunc ()" link="NMRemoteConnection.html#NMRemoteConnectionResultFunc"/>
+ <keyword type="typedef" name="NMRemoteConnectionCommitFunc" link="NMRemoteConnection.html#NMRemoteConnectionCommitFunc"/>
+ <keyword type="typedef" name="NMRemoteConnectionDeleteFunc" link="NMRemoteConnection.html#NMRemoteConnectionDeleteFunc"/>
+ <keyword type="function" name="NMRemoteConnectionGetSecretsFunc ()" link="NMRemoteConnection.html#NMRemoteConnectionGetSecretsFunc"/>
+ <keyword type="function" name="nm_remote_connection_new ()" link="NMRemoteConnection.html#nm-remote-connection-new"/>
+ <keyword type="function" name="nm_remote_connection_commit_changes ()" link="NMRemoteConnection.html#nm-remote-connection-commit-changes"/>
+ <keyword type="function" name="nm_remote_connection_commit_changes_unsaved ()" link="NMRemoteConnection.html#nm-remote-connection-commit-changes-unsaved" since="0.9.10"/>
+ <keyword type="function" name="nm_remote_connection_save ()" link="NMRemoteConnection.html#nm-remote-connection-save" since="0.9.10"/>
+ <keyword type="function" name="nm_remote_connection_delete ()" link="NMRemoteConnection.html#nm-remote-connection-delete"/>
+ <keyword type="function" name="nm_remote_connection_get_secrets ()" link="NMRemoteConnection.html#nm-remote-connection-get-secrets"/>
+ <keyword type="function" name="nm_remote_connection_get_unsaved ()" link="NMRemoteConnection.html#nm-remote-connection-get-unsaved" since="0.9.10"/>
+ <keyword type="property" name="The &quot;bus&quot; property" link="NMRemoteConnection.html#NMRemoteConnection--bus"/>
+ <keyword type="property" name="The &quot;dbus-connection&quot; property" link="NMRemoteConnection.html#NMRemoteConnection--dbus-connection"/>
+ <keyword type="property" name="The &quot;dbus-path&quot; property" link="NMRemoteConnection.html#NMRemoteConnection--dbus-path"/>
+ <keyword type="property" name="The &quot;unsaved&quot; property" link="NMRemoteConnection.html#NMRemoteConnection--unsaved"/>
+ <keyword type="signal" name="The &quot;removed&quot; signal" link="NMRemoteConnection.html#NMRemoteConnection-removed"/>
+ <keyword type="signal" name="The &quot;updated&quot; signal" link="NMRemoteConnection.html#NMRemoteConnection-updated"/>
+ <keyword type="signal" name="The &quot;visible&quot; signal" link="NMRemoteConnection.html#NMRemoteConnection-visible"/>
<keyword type="enum" name="enum NMRemoteSettingsError" link="NMRemoteSettings.html#NMRemoteSettingsError"/>
<keyword type="macro" name="NM_REMOTE_SETTINGS_ERROR" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR:CAPS"/>
+ <keyword type="function" name="nm_remote_settings_error_quark ()" link="NMRemoteSettings.html#nm-remote-settings-error-quark"/>
<keyword type="macro" name="NM_REMOTE_SETTINGS_BUS" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-BUS:CAPS"/>
<keyword type="macro" name="NM_REMOTE_SETTINGS_SERVICE_RUNNING" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-SERVICE-RUNNING:CAPS"/>
<keyword type="macro" name="NM_REMOTE_SETTINGS_HOSTNAME" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-HOSTNAME:CAPS"/>
<keyword type="macro" name="NM_REMOTE_SETTINGS_CAN_MODIFY" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-CAN-MODIFY:CAPS"/>
<keyword type="macro" name="NM_REMOTE_SETTINGS_NEW_CONNECTION" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-NEW-CONNECTION:CAPS"/>
<keyword type="macro" name="NM_REMOTE_SETTINGS_CONNECTIONS_READ" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-CONNECTIONS-READ:CAPS"/>
- <keyword type="property" name="The “bus†property" link="NMRemoteSettings.html#NMRemoteSettings--bus"/>
- <keyword type="property" name="The “can-modify†property" link="NMRemoteSettings.html#NMRemoteSettings--can-modify"/>
- <keyword type="property" name="The “hostname†property" link="NMRemoteSettings.html#NMRemoteSettings--hostname"/>
- <keyword type="property" name="The “service-running†property" link="NMRemoteSettings.html#NMRemoteSettings--service-running"/>
- <keyword type="signal" name="The “connections-read†signal" link="NMRemoteSettings.html#NMRemoteSettings-connections-read"/>
- <keyword type="signal" name="The “new-connection†signal" link="NMRemoteSettings.html#NMRemoteSettings-new-connection"/>
+ <keyword type="function" name="NMRemoteSettingsAddConnectionFunc ()" link="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc"/>
+ <keyword type="function" name="NMRemoteSettingsLoadConnectionsFunc ()" link="NMRemoteSettings.html#NMRemoteSettingsLoadConnectionsFunc"/>
+ <keyword type="function" name="NMRemoteSettingsSaveHostnameFunc ()" link="NMRemoteSettings.html#NMRemoteSettingsSaveHostnameFunc"/>
+ <keyword type="struct" name="struct NMRemoteSettings" link="NMRemoteSettings.html#NMRemoteSettings-struct"/>
+ <keyword type="struct" name="struct NMRemoteSettingsClass" link="NMRemoteSettings.html#NMRemoteSettingsClass"/>
+ <keyword type="function" name="nm_remote_settings_new ()" link="NMRemoteSettings.html#nm-remote-settings-new"/>
+ <keyword type="function" name="nm_remote_settings_new_async ()" link="NMRemoteSettings.html#nm-remote-settings-new-async"/>
+ <keyword type="function" name="nm_remote_settings_new_finish ()" link="NMRemoteSettings.html#nm-remote-settings-new-finish"/>
+ <keyword type="function" name="nm_remote_settings_list_connections ()" link="NMRemoteSettings.html#nm-remote-settings-list-connections"/>
+ <keyword type="function" name="nm_remote_settings_get_connection_by_id ()" link="NMRemoteSettings.html#nm-remote-settings-get-connection-by-id" since="0.9.10"/>
+ <keyword type="function" name="nm_remote_settings_get_connection_by_path ()" link="NMRemoteSettings.html#nm-remote-settings-get-connection-by-path"/>
+ <keyword type="function" name="nm_remote_settings_get_connection_by_uuid ()" link="NMRemoteSettings.html#nm-remote-settings-get-connection-by-uuid"/>
+ <keyword type="function" name="nm_remote_settings_add_connection ()" link="NMRemoteSettings.html#nm-remote-settings-add-connection"/>
+ <keyword type="function" name="nm_remote_settings_add_connection_unsaved ()" link="NMRemoteSettings.html#nm-remote-settings-add-connection-unsaved" since="0.9.10"/>
+ <keyword type="function" name="nm_remote_settings_load_connections ()" link="NMRemoteSettings.html#nm-remote-settings-load-connections" since="0.9.10"/>
+ <keyword type="function" name="nm_remote_settings_reload_connections ()" link="NMRemoteSettings.html#nm-remote-settings-reload-connections" since="0.9.10"/>
+ <keyword type="function" name="nm_remote_settings_save_hostname ()" link="NMRemoteSettings.html#nm-remote-settings-save-hostname"/>
+ <keyword type="property" name="The &quot;bus&quot; property" link="NMRemoteSettings.html#NMRemoteSettings--bus"/>
+ <keyword type="property" name="The &quot;can-modify&quot; property" link="NMRemoteSettings.html#NMRemoteSettings--can-modify"/>
+ <keyword type="property" name="The &quot;hostname&quot; property" link="NMRemoteSettings.html#NMRemoteSettings--hostname"/>
+ <keyword type="property" name="The &quot;service-running&quot; property" link="NMRemoteSettings.html#NMRemoteSettings--service-running"/>
+ <keyword type="signal" name="The &quot;connections-read&quot; signal" link="NMRemoteSettings.html#NMRemoteSettings-connections-read"/>
+ <keyword type="signal" name="The &quot;new-connection&quot; signal" link="NMRemoteSettings.html#NMRemoteSettings-new-connection"/>
<keyword type="macro" name="NM_SECRET_AGENT_ERROR" link="NMSecretAgent.html#NM-SECRET-AGENT-ERROR:CAPS"/>
- <keyword type="function" name="nm_secret_agent_error_quark ()" link="NMSecretAgent.html#nm-secret-agent-error-quark"/>
- <keyword type="function" name="NMSecretAgentGetSecretsFunc ()" link="NMSecretAgent.html#NMSecretAgentGetSecretsFunc"/>
- <keyword type="function" name="NMSecretAgentSaveSecretsFunc ()" link="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc"/>
- <keyword type="function" name="NMSecretAgentDeleteSecretsFunc ()" link="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc"/>
- <keyword type="function" name="nm_secret_agent_register ()" link="NMSecretAgent.html#nm-secret-agent-register"/>
- <keyword type="function" name="nm_secret_agent_unregister ()" link="NMSecretAgent.html#nm-secret-agent-unregister"/>
- <keyword type="function" name="nm_secret_agent_get_registered ()" link="NMSecretAgent.html#nm-secret-agent-get-registered"/>
- <keyword type="function" name="nm_secret_agent_get_secrets ()" link="NMSecretAgent.html#nm-secret-agent-get-secrets"/>
- <keyword type="function" name="nm_secret_agent_save_secrets ()" link="NMSecretAgent.html#nm-secret-agent-save-secrets"/>
- <keyword type="function" name="nm_secret_agent_delete_secrets ()" link="NMSecretAgent.html#nm-secret-agent-delete-secrets"/>
+ <keyword type="function" name="nm_secret_agent_error_quark ()" link="NMSecretAgent.html#nm-secret-agent-error-quark"/>
<keyword type="enum" name="enum NMSecretAgentError" link="NMSecretAgent.html#NMSecretAgentError"/>
+ <keyword type="enum" name="enum NMSecretAgentCapabilities" link="NMSecretAgent.html#NMSecretAgentCapabilities" since="0.9.10"/>
<keyword type="enum" name="enum NMSecretAgentGetSecretsFlags" link="NMSecretAgent.html#NMSecretAgentGetSecretsFlags"/>
<keyword type="macro" name="NM_SECRET_AGENT_IDENTIFIER" link="NMSecretAgent.html#NM-SECRET-AGENT-IDENTIFIER:CAPS"/>
<keyword type="macro" name="NM_SECRET_AGENT_AUTO_REGISTER" link="NMSecretAgent.html#NM-SECRET-AGENT-AUTO-REGISTER:CAPS"/>
<keyword type="macro" name="NM_SECRET_AGENT_REGISTERED" link="NMSecretAgent.html#NM-SECRET-AGENT-REGISTERED:CAPS"/>
+ <keyword type="macro" name="NM_SECRET_AGENT_CAPABILITIES" link="NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITIES:CAPS"/>
<keyword type="macro" name="NM_SECRET_AGENT_REGISTRATION_RESULT" link="NMSecretAgent.html#NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS"/>
- <keyword type="property" name="The “auto-register†property" link="NMSecretAgent.html#NMSecretAgent--auto-register"/>
- <keyword type="property" name="The “identifier†property" link="NMSecretAgent.html#NMSecretAgent--identifier"/>
- <keyword type="property" name="The “registered†property" link="NMSecretAgent.html#NMSecretAgent--registered"/>
- <keyword type="signal" name="The “registration-result†signal" link="NMSecretAgent.html#NMSecretAgent-registration-result"/>
- <keyword type="function" name="nm_vpn_connection_new ()" link="NMVPNConnection.html#nm-vpn-connection-new"/>
- <keyword type="function" name="nm_vpn_connection_get_vpn_state ()" link="NMVPNConnection.html#nm-vpn-connection-get-vpn-state"/>
- <keyword type="function" name="nm_vpn_connection_get_banner ()" link="NMVPNConnection.html#nm-vpn-connection-get-banner"/>
+ <keyword type="struct" name="NMSecretAgent" link="NMSecretAgent.html#NMSecretAgent-struct"/>
+ <keyword type="function" name="NMSecretAgentGetSecretsFunc ()" link="NMSecretAgent.html#NMSecretAgentGetSecretsFunc"/>
+ <keyword type="function" name="NMSecretAgentSaveSecretsFunc ()" link="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc"/>
+ <keyword type="function" name="NMSecretAgentDeleteSecretsFunc ()" link="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc"/>
+ <keyword type="struct" name="NMSecretAgentClass" link="NMSecretAgent.html#NMSecretAgentClass"/>
+ <keyword type="function" name="nm_secret_agent_register ()" link="NMSecretAgent.html#nm-secret-agent-register"/>
+ <keyword type="function" name="nm_secret_agent_unregister ()" link="NMSecretAgent.html#nm-secret-agent-unregister"/>
+ <keyword type="function" name="nm_secret_agent_get_registered ()" link="NMSecretAgent.html#nm-secret-agent-get-registered"/>
+ <keyword type="function" name="nm_secret_agent_get_secrets ()" link="NMSecretAgent.html#nm-secret-agent-get-secrets"/>
+ <keyword type="function" name="nm_secret_agent_save_secrets ()" link="NMSecretAgent.html#nm-secret-agent-save-secrets"/>
+ <keyword type="function" name="nm_secret_agent_delete_secrets ()" link="NMSecretAgent.html#nm-secret-agent-delete-secrets"/>
+ <keyword type="property" name="The &quot;auto-register&quot; property" link="NMSecretAgent.html#NMSecretAgent--auto-register"/>
+ <keyword type="property" name="The &quot;capabilities&quot; property" link="NMSecretAgent.html#NMSecretAgent--capabilities"/>
+ <keyword type="property" name="The &quot;identifier&quot; property" link="NMSecretAgent.html#NMSecretAgent--identifier"/>
+ <keyword type="property" name="The &quot;registered&quot; property" link="NMSecretAgent.html#NMSecretAgent--registered"/>
+ <keyword type="signal" name="The &quot;registration-result&quot; signal" link="NMSecretAgent.html#NMSecretAgent-registration-result"/>
<keyword type="macro" name="NM_VPN_CONNECTION_VPN_STATE" link="NMVPNConnection.html#NM-VPN-CONNECTION-VPN-STATE:CAPS"/>
<keyword type="macro" name="NM_VPN_CONNECTION_BANNER" link="NMVPNConnection.html#NM-VPN-CONNECTION-BANNER:CAPS"/>
- <keyword type="property" name="The “banner†property" link="NMVPNConnection.html#NMVPNConnection--banner"/>
- <keyword type="property" name="The “vpn-state†property" link="NMVPNConnection.html#NMVPNConnection--vpn-state"/>
- <keyword type="signal" name="The “vpn-state-changed†signal" link="NMVPNConnection.html#NMVPNConnection-vpn-state-changed"/>
- <keyword type="function" name="nm_vpn_plugin_error_quark ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-error-quark"/>
- <keyword type="function" name="nm_vpn_plugin_get_connection ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-connection"/>
- <keyword type="function" name="nm_vpn_plugin_get_state ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-state"/>
- <keyword type="function" name="nm_vpn_plugin_set_state ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-state"/>
- <keyword type="function" name="nm_vpn_plugin_set_login_banner ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-login-banner"/>
- <keyword type="function" name="nm_vpn_plugin_failure ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-failure"/>
- <keyword type="function" name="nm_vpn_plugin_set_config ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-config"/>
- <keyword type="function" name="nm_vpn_plugin_set_ip4_config ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip4-config"/>
- <keyword type="function" name="nm_vpn_plugin_set_ip6_config ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip6-config"/>
- <keyword type="function" name="nm_vpn_plugin_disconnect ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-disconnect"/>
+ <keyword type="struct" name="NMVPNConnection" link="NMVPNConnection.html#NMVPNConnection-struct"/>
+ <keyword type="struct" name="NMVPNConnectionClass" link="NMVPNConnection.html#NMVPNConnectionClass"/>
+ <keyword type="function" name="nm_vpn_connection_new ()" link="NMVPNConnection.html#nm-vpn-connection-new"/>
+ <keyword type="function" name="nm_vpn_connection_get_vpn_state ()" link="NMVPNConnection.html#nm-vpn-connection-get-vpn-state"/>
+ <keyword type="function" name="nm_vpn_connection_get_banner ()" link="NMVPNConnection.html#nm-vpn-connection-get-banner"/>
+ <keyword type="property" name="The &quot;banner&quot; property" link="NMVPNConnection.html#NMVPNConnection--banner"/>
+ <keyword type="property" name="The &quot;vpn-state&quot; property" link="NMVPNConnection.html#NMVPNConnection--vpn-state"/>
+ <keyword type="signal" name="The &quot;vpn-state-changed&quot; signal" link="NMVPNConnection.html#NMVPNConnection-vpn-state-changed"/>
<keyword type="macro" name="NM_VPN_PLUGIN_DBUS_SERVICE_NAME" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-DBUS-SERVICE-NAME:CAPS"/>
<keyword type="macro" name="NM_VPN_PLUGIN_STATE" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-STATE:CAPS"/>
<keyword type="enum" name="enum NMVPNPluginError" link="libnm-glib-NMVPNPlugin.html#NMVPNPluginError"/>
- <keyword type="function" name="NMVpnPluginUiFactory ()" link="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiFactory"/>
- <keyword type="function" name="nm_vpn_plugin_ui_factory ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-factory"/>
- <keyword type="function" name="nm_vpn_plugin_ui_interface_ui_factory ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-ui-factory"/>
- <keyword type="function" name="nm_vpn_plugin_ui_interface_get_capabilities ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-capabilities"/>
- <keyword type="function" name="nm_vpn_plugin_ui_interface_import ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-import"/>
- <keyword type="function" name="nm_vpn_plugin_ui_interface_export ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-export"/>
- <keyword type="function" name="nm_vpn_plugin_ui_interface_get_suggested_name ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-get-suggested-name"/>
- <keyword type="function" name="nm_vpn_plugin_ui_interface_delete_connection ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-interface-delete-connection"/>
- <keyword type="function" name="nm_vpn_plugin_ui_widget_interface_get_widget ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-get-widget"/>
- <keyword type="function" name="nm_vpn_plugin_ui_widget_interface_update_connection ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-update-connection"/>
- <keyword type="function" name="nm_vpn_plugin_ui_widget_interface_save_secrets ()" link="libnm-glib-NMVpnPluginUiWidget.html#nm-vpn-plugin-ui-widget-interface-save-secrets"/>
- <keyword type="enum" name="enum NMVpnPluginUiCapability" link="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiCapability"/>
- <keyword type="macro" name="NM_VPN_PLUGIN_UI_INTERFACE_NAME" link="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS"/>
- <keyword type="macro" name="NM_VPN_PLUGIN_UI_INTERFACE_DESC" link="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS"/>
- <keyword type="macro" name="NM_VPN_PLUGIN_UI_INTERFACE_SERVICE" link="libnm-glib-NMVpnPluginUiWidget.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS"/>
- <keyword type="enum" name="enum NMVpnPluginUiInterfaceProp" link="libnm-glib-NMVpnPluginUiWidget.html#NMVpnPluginUiInterfaceProp"/>
- <keyword type="function" name="nm_vpn_plugin_utils_read_vpn_details ()" link="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-read-vpn-details"/>
- <keyword type="function" name="nm_vpn_plugin_utils_get_secret_flags ()" link="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-get-secret-flags"/>
+ <keyword type="struct" name="NMVPNPlugin" link="libnm-glib-NMVPNPlugin.html#NMVPNPlugin"/>
+ <keyword type="struct" name="NMVPNPluginClass" link="libnm-glib-NMVPNPlugin.html#NMVPNPluginClass"/>
+ <keyword type="function" name="nm_vpn_plugin_error_quark ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-error-quark"/>
+ <keyword type="function" name="nm_vpn_plugin_get_connection ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-connection"/>
+ <keyword type="function" name="nm_vpn_plugin_get_state ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-get-state"/>
+ <keyword type="function" name="nm_vpn_plugin_set_state ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-state"/>
+ <keyword type="function" name="nm_vpn_plugin_secrets_required ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-secrets-required" since="0.9.10"/>
+ <keyword type="function" name="nm_vpn_plugin_set_login_banner ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-login-banner"/>
+ <keyword type="function" name="nm_vpn_plugin_failure ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-failure"/>
+ <keyword type="function" name="nm_vpn_plugin_set_config ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-config"/>
+ <keyword type="function" name="nm_vpn_plugin_set_ip4_config ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip4-config"/>
+ <keyword type="function" name="nm_vpn_plugin_set_ip6_config ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-set-ip6-config"/>
+ <keyword type="function" name="nm_vpn_plugin_disconnect ()" link="libnm-glib-NMVPNPlugin.html#nm-vpn-plugin-disconnect"/>
+ <keyword type="function" name="NMVpnPluginUiFactory ()" link="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiFactory"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_factory ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-factory"/>
+ <keyword type="enum" name="enum NMVpnPluginUiCapability" link="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiCapability"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_UI_INTERFACE_NAME" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-NAME:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_UI_INTERFACE_DESC" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-DESC:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_UI_INTERFACE_SERVICE" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-SERVICE:CAPS"/>
+ <keyword type="enum" name="enum NMVpnPluginUiInterfaceProp" link="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterfaceProp"/>
+ <keyword type="struct" name="struct NMVpnPluginUiInterface" link="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_interface_ui_factory ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-ui-factory"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_interface_get_capabilities ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-capabilities"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_interface_import ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-import"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_interface_export ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-export"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_interface_get_suggested_name ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-suggested-name"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_interface_delete_connection ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-delete-connection"/>
+ <keyword type="struct" name="struct NMVpnPluginUiWidgetInterface" link="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_widget_interface_get_widget ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-get-widget"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_widget_interface_update_connection ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-update-connection"/>
+ <keyword type="function" name="nm_vpn_plugin_ui_widget_interface_save_secrets ()" link="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-save-secrets"/>
+ <keyword type="function" name="nm_vpn_plugin_utils_read_vpn_details ()" link="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-read-vpn-details"/>
+ <keyword type="function" name="nm_vpn_plugin_utils_get_secret_flags ()" link="libnm-glib-nm-vpn-plugin-utils.html#nm-vpn-plugin-utils-get-secret-flags"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_NONE" link="NMClient.html#NM-CLIENT-PERMISSION-NONE:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK" link="NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-NETWORK:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI" link="NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIFI:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN" link="NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WWAN:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX" link="NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIMAX:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_SLEEP_WAKE" link="NMClient.html#NM-CLIENT-PERMISSION-SLEEP-WAKE:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_NETWORK_CONTROL" link="NMClient.html#NM-CLIENT-PERMISSION-NETWORK-CONTROL:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED" link="NMClient.html#NM-CLIENT-PERMISSION-WIFI-SHARE-PROTECTED:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN" link="NMClient.html#NM-CLIENT-PERMISSION-WIFI-SHARE-OPEN:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_LAST" link="NMClient.html#NM-CLIENT-PERMISSION-LAST:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_UNKNOWN" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_YES" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-YES:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_AUTH" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_NO" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-NO:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_ERROR_UNKNOWN" link="NMClient.html#NM-CLIENT-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_CLIENT_ERROR_MANAGER_NOT_RUNNING" link="NMClient.html#NM-CLIENT-ERROR-MANAGER-NOT-RUNNING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_UNKNOWN" link="NMDevice.html#NM-DEVICE-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_INTERFACE_MISMATCH" link="NMDevice.html#NM-DEVICE-ERROR-INTERFACE-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ETHERNET_ERROR_UNKNOWN" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ETHERNET_ERROR_NOT_ETHERNET_CONNECTION" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-NOT-ETHERNET-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ETHERNET_ERROR_INVALID_ETHERNET_CONNECTION" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-INVALID-ETHERNET-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ETHERNET_ERROR_INVALID_DEVICE_MAC" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-INVALID-DEVICE-MAC:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ETHERNET_ERROR_MAC_MISMATCH" link="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-ERROR-MAC-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIFI_ERROR_UNKNOWN" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIFI_ERROR_NOT_WIFI_CONNECTION" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-NOT-WIFI-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIFI_ERROR_INVALID_WIFI_CONNECTION" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-INVALID-WIFI-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIFI_ERROR_INVALID_DEVICE_MAC" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-INVALID-DEVICE-MAC:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIFI_ERROR_MAC_MISMATCH" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-MAC-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_WPA_CAPS" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-WPA-CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIFI_ERROR_MISSING_DEVICE_RSN_CAPS" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ERROR-MISSING-DEVICE-RSN-CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_ERROR_UNKNOWN" link="NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_ERROR_NOT_MODEM_CONNECTION" link="NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-NOT-MODEM-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_ERROR_INVALID_MODEM_CONNECTION" link="NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-INVALID-MODEM-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_ERROR_MISSING_DEVICE_CAPS" link="NMDeviceModem.html#NM-DEVICE-MODEM-ERROR-MISSING-DEVICE-CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BT_ERROR_UNKNOWN" link="NMDeviceBt.html#NM-DEVICE-BT-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BT_ERROR_NOT_BT_CONNECTION" link="NMDeviceBt.html#NM-DEVICE-BT-ERROR-NOT-BT-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BT_ERROR_INVALID_BT_CONNECTION" link="NMDeviceBt.html#NM-DEVICE-BT-ERROR-INVALID-BT-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BT_ERROR_INVALID_DEVICE_MAC" link="NMDeviceBt.html#NM-DEVICE-BT-ERROR-INVALID-DEVICE-MAC:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BT_ERROR_MAC_MISMATCH" link="NMDeviceBt.html#NM-DEVICE-BT-ERROR-MAC-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BT_ERROR_MISSING_DEVICE_CAPS" link="NMDeviceBt.html#NM-DEVICE-BT-ERROR-MISSING-DEVICE-CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIMAX_ERROR_UNKNOWN" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIMAX_ERROR_NOT_WIMAX_CONNECTION" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-NOT-WIMAX-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIMAX_ERROR_INVALID_WIMAX_CONNECTION" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-INVALID-WIMAX-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIMAX_ERROR_INVALID_DEVICE_MAC" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-INVALID-DEVICE-MAC:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_WIMAX_ERROR_MAC_MISMATCH" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-ERROR-MAC-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ADSL_ERROR_UNKNOWN" link="NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ADSL_ERROR_NOT_ADSL_CONNECTION" link="NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR-NOT-ADSL-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ADSL_ERROR_INVALID_ADSL_CONNECTION" link="NMDeviceAdsl.html#NM-DEVICE-ADSL-ERROR-INVALID-ADSL-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BOND_ERROR_UNKNOWN" link="NMDeviceBond.html#NM-DEVICE-BOND-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BOND_ERROR_NOT_BOND_CONNECTION" link="NMDeviceBond.html#NM-DEVICE-BOND-ERROR-NOT-BOND-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BOND_ERROR_INVALID_BOND_CONNECTION" link="NMDeviceBond.html#NM-DEVICE-BOND-ERROR-INVALID-BOND-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BOND_ERROR_INTERFACE_MISMATCH" link="NMDeviceBond.html#NM-DEVICE-BOND-ERROR-INTERFACE-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BRIDGE_ERROR_UNKNOWN" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BRIDGE_ERROR_NOT_BRIDGE_CONNECTION" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-NOT-BRIDGE-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BRIDGE_ERROR_INVALID_BRIDGE_CONNECTION" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-INVALID-BRIDGE-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_BRIDGE_ERROR_INTERFACE_MISMATCH" link="NMDeviceBridge.html#NM-DEVICE-BRIDGE-ERROR-INTERFACE-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TEAM_ERROR_UNKNOWN" link="NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION" link="NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-NOT-TEAM-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION" link="NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-INVALID-TEAM-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH" link="NMDeviceTeam.html#NM-DEVICE-TEAM-ERROR-INTERFACE-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_GENERIC_ERROR_UNKNOWN" link="NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION" link="NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR-NOT-GENERIC-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME" link="NMDeviceGeneric.html#NM-DEVICE-GENERIC-ERROR-MISSING-INTERFACE-NAME:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_INFINIBAND_ERROR_UNKNOWN" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_INFINIBAND_ERROR_NOT_INFINIBAND_CONNECTION" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-NOT-INFINIBAND-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_INFINIBAND_ERROR_INVALID_INFINIBAND_CONNECTION" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-INVALID-INFINIBAND-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_INFINIBAND_ERROR_INVALID_DEVICE_MAC" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-INVALID-DEVICE-MAC:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_INFINIBAND_ERROR_MAC_MISMATCH" link="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-ERROR-MAC-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_VLAN_ERROR_UNKNOWN" link="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_VLAN_ERROR_NOT_VLAN_CONNECTION" link="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-NOT-VLAN-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION" link="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-INVALID-VLAN-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_VLAN_ERROR_ID_MISMATCH" link="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-ID-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH" link="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-INTERFACE-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_VLAN_ERROR_MAC_MISMATCH" link="NMDeviceVlan.html#NM-DEVICE-VLAN-ERROR-MAC-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_OLPC_MESH_ERROR_UNKNOWN" link="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_OLPC_MESH_ERROR_NOT_OLPC_MESH_CONNECTION" link="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR-NOT-OLPC-MESH-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_OLPC_MESH_ERROR_INVALID_OLPC_MESH_CONNECTION" link="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ERROR-INVALID-OLPC-MESH-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN" link="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_WIMAX_NSP_NETWORK_TYPE_HOME" link="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-HOME:CAPS"/>
+ <keyword type="constant" name="NM_WIMAX_NSP_NETWORK_TYPE_PARTNER" link="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-PARTNER:CAPS"/>
+ <keyword type="constant" name="NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER" link="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-ROAMING-PARTNER:CAPS"/>
+ <keyword type="constant" name="NM_OBJECT_ERROR_UNKNOWN" link="NMObject.html#NM-OBJECT-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_OBJECT_ERROR_OBJECT_CREATION_FAILURE" link="NMObject.html#NM-OBJECT-ERROR-OBJECT-CREATION-FAILURE:CAPS"/>
+ <keyword type="constant" name="NM_REMOTE_CONNECTION_ERROR_UNKNOWN" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_REMOTE_CONNECTION_ERROR_DISCONNECTED" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-ERROR-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_REMOTE_SETTINGS_ERROR_UNKNOWN" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-CONNECTION-REMOVED:CAPS"/>
+ <keyword type="constant" name="NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-CONNECTION-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE" link="NMRemoteSettings.html#NM-REMOTE-SETTINGS-ERROR-SERVICE-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED" link="NMSecretAgent.html#NM-SECRET-AGENT-ERROR-NOT-AUTHORIZED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_INVALID_CONNECTION" link="NMSecretAgent.html#NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_USER_CANCELED" link="NMSecretAgent.html#NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_AGENT_CANCELED" link="NMSecretAgent.html#NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_INTERNAL_ERROR" link="NMSecretAgent.html#NM-SECRET-AGENT-ERROR-INTERNAL-ERROR:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_NO_SECRETS" link="NMSecretAgent.html#NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_CAPABILITY_NONE" link="NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_CAPABILITY_VPN_HINTS" link="NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITY-VPN-HINTS:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_CAPABILITY_LAST" link="NMSecretAgent.html#NM-SECRET-AGENT-CAPABILITY-LAST:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE" link="NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION" link="NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW" link="NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED" link="NMSecretAgent.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_GENERAL" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-GENERAL:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_ALREADY_STARTED" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_WRONG_STATE" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-CONNECTION-INVALID:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED" link="libnm-glib-NMVPNPlugin.html#NM-VPN-PLUGIN-ERROR-INTERACTIVE-NOT-SUPPORTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_CAPABILITY_NONE" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_CAPABILITY_IMPORT" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-IMPORT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_CAPABILITY_EXPORT" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-EXPORT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_CAPABILITY_IPV6" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-CAPABILITY-IPV6:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_INTERFACE_PROP_FIRST" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-FIRST:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_INTERFACE_PROP_NAME" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-NAME:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_INTERFACE_PROP_DESC" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-DESC:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_UI_INTERFACE_PROP_SERVICE" link="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-INTERFACE-PROP-SERVICE:CAPS"/>
</functions>
</book>
diff --git a/docs/libnm-glib/html/object-tree.html b/docs/libnm-glib/html/object-tree.html
index 199cb73d8..3145ab15a 100644
--- a/docs/libnm-glib/html/object-tree.html
+++ b/docs/libnm-glib/html/object-tree.html
@@ -2,58 +2,60 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: Object Hierarchy</title>
+<title>Object Hierarchy</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="index.html" title="libnm-glib Reference Manual">
<link rel="prev" href="libnm-glib-nm-vpn-plugin-utils.html" title="nm-vpn-plugin-utils">
<link rel="next" href="api-index-full.html" title="API Index">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="libnm-glib-nm-vpn-plugin-utils.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="libnm-glib-nm-vpn-plugin-utils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
<a name="object-tree"></a>Object Hierarchy</h1></div></div></div>
<pre class="screen">
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">├──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
- <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
- <span class="lineart">├──</span> <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
- <span class="lineart">├──</span> <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html">NMConnection</a>
- <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
+ <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+ <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+ <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+ <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+ <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+ <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+ <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+ <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</a>
+ <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+ <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+ <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+ <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+ <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+ <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+ <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+ <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+ <a class="link" href="NMIP4Config.html" title="NMIP4Config">NMIP4Config</a>
+ <a class="link" href="NMIP6Config.html" title="NMIP6Config">NMIP6Config</a>
+ <a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+ <a class="link" href="NMVPNConnection.html" title="NMVPNConnection">NMVPNConnection</a>
+ <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
+ <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
+ <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
+ <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html">NMConnection</a>
+ <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+ <a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</pre>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/ref-overview.html b/docs/libnm-glib/html/ref-overview.html
index ad919bb8c..6dd6954ca 100644
--- a/docs/libnm-glib/html/ref-overview.html
+++ b/docs/libnm-glib/html/ref-overview.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-glib Reference Manual: Object Overview</title>
+<title>Object Overview</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-glib Reference Manual">
<link rel="up" href="index.html" title="libnm-glib Reference Manual">
<link rel="prev" href="index.html" title="libnm-glib Reference Manual">
<link rel="next" href="ch02.html" title="libnm-glib API Reference">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="ch02.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-glib Reference Manual</th>
+<td><a accesskey="n" href="ch02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
@@ -42,6 +42,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-glib/html/right-insensitive.png b/docs/libnm-glib/html/right-insensitive.png
deleted file mode 100644
index 4c95785b9..000000000
--- a/docs/libnm-glib/html/right-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/libnm-glib/html/right.png b/docs/libnm-glib/html/right.png
index 76260ec88..92832e3a4 100644
--- a/docs/libnm-glib/html/right.png
+++ b/docs/libnm-glib/html/right.png
Binary files differ
diff --git a/docs/libnm-glib/html/style.css b/docs/libnm-glib/html/style.css
index 705a5c9ad..d6f6c26ec 100644
--- a/docs/libnm-glib/html/style.css
+++ b/docs/libnm-glib/html/style.css
@@ -1,23 +1,15 @@
-body
-{
- font-family: cantarell, sans-serif;
-}
.synopsis, .classsynopsis
{
/* tango:aluminium 1/2 */
background: #eeeeec;
- background: rgba(238, 238, 236, 0.5);
- border: solid 1px rgb(238, 238, 236);
+ border: solid 1px #d3d7cf;
padding: 0.5em;
}
.programlisting
{
/* tango:sky blue 0/1 */
- /* fallback for no rgba support */
background: #e6f3ff;
border: solid 1px #729fcf;
- background: rgba(114, 159, 207, 0.1);
- border: solid 1px rgba(114, 159, 207, 0.2);
padding: 0.5em;
}
.variablelist
@@ -35,6 +27,7 @@ body
{
position: relative;
top: 0em ! important;
+
}
/* this is needed so that the local anchors are displayed below the naviagtion */
div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
@@ -53,20 +46,16 @@ body
*/
body
{
- padding-top: 5em;
- padding-bottom: 500px;
- max-width: 60em;
- }
- p
- {
- max-width: 60em;
+ padding-top: 3.2em;
+ padding-bottom: 20em;
}
/* style and size the navigation bar */
table.navigation#top
{
position: fixed;
- background: #e2e2e2;
- border-bottom: solid 1px #babdb6;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
margin-top: 0;
margin-bottom: 0;
top: 0;
@@ -76,57 +65,21 @@ body
}
.navigation a, .navigation a:visited
{
- /* tango:sky blue 3 */
- color: #204a87;
+ /* tango:scarlet red 3 */
+ color: #a40000;
}
.navigation a:hover
{
- /* tango:sky blue 2 */
- color: #3465a4;
+ /* tango:scarlet red 1 */
+ color: #ef2929;
}
td.shortcuts
{
- /* tango:sky blue 2 */
- color: #3465a4;
+ /* tango:scarlet red 1 */
+ color: #ef2929;
font-size: 80%;
white-space: nowrap;
}
- td.shortcuts .dim
- {
- color: #babdb6;
- }
-}
-@media screen and (min-width: 60em) {
- /* screen larger than 60em */
- body { margin: auto; }
-}
-@media screen and (max-width: 60em) {
- /* screen less than 60em */
- #nav_hierarchy { display: none; }
- #nav_interfaces { display: none; }
- #nav_prerequisites { display: none; }
- #nav_derived_interfaces { display: none; }
- #nav_implementations { display: none; }
- #nav_child_properties { display: none; }
- #nav_style_properties { display: none; }
- #nav_index { display: none; }
- #nav_glossary { display: none; }
- .gallery_image { display: none; }
- .property_flags { display: none; }
- .signal_flags { display: none; }
- .parameter_annotations { display: none; }
- .enum_member_annotations { display: none; }
- .struct_member_annotations { display: none; }
- .union_member_annotations { display: none; }
- /* now that a column is hidden, optimize space */
- col.parameters_name { width: auto; }
- col.parameters_description { width: auto; }
- col.struct_members_name { width: auto; }
- col.struct_members_description { width: auto; }
- col.enum_members_name { width: auto; }
- col.enum_members_description { width: auto; }
- col.union_members_name { width: auto; }
- col.union_members_description { width: auto; }
}
@media print {
table.navigation {
@@ -136,8 +89,9 @@ body
div.titlepage table.navigation {
visibility: visible;
display: table;
- background: #e2e2e2;
- border: solid 1px #babdb6;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
margin-top: 0;
margin-bottom: 0;
top: 0;
@@ -148,7 +102,7 @@ body
.navigation .title
{
- font-size: 120%;
+ font-size: 200%;
}
div.gallery-float
@@ -178,67 +132,6 @@ a:hover
color: #729fcf;
}
-div.informaltable table
-{
- border-collapse: separate;
- border-spacing: 20px 3px;
- border: none;
-}
-
-div.informaltable table td, div.informaltable table th
-{
- vertical-align: top;
-}
-
-.function_type,
-.variable_type,
-.property_type,
-.signal_type,
-.parameter_name,
-.struct_member_name,
-.union_member_name,
-.define_keyword,
-.datatype_keyword,
-.typedef_keyword
-{
- text-align: right;
-}
-
-/* dim non-primary columns */
-.c_punctuation,
-.function_type,
-.variable_type,
-.property_type,
-.signal_type,
-.define_keyword,
-.datatype_keyword,
-.typedef_keyword,
-.property_flags,
-.signal_flags,
-.parameter_annotations,
-.enum_member_annotations,
-.struct_member_annotations,
-.union_member_annotations
-{
- color: #888a85;
-}
-
-.function_type a,
-.function_type a:visited,
-.function_type a:hover,
-.property_type a,
-.property_type a:visited,
-.property_type a:hover,
-.signal_type a,
-.signal_type a:visited,
-.signal_type a:hover,
-.signal_flags a,
-.signal_flags a:visited,
-.signal_flags a:hover
-{
- color: #729fcf;
-}
-
div.table table
{
border-collapse: collapse;
@@ -261,43 +154,14 @@ div.table table th
background-color: #d3d7cf;
}
-h4
-{
- color: #555753;
-}
-
hr
{
- /* tango:aluminium 1 */
- color: #d3d7cf;
- background: #d3d7cf;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
border: none 0px;
height: 1px;
clear: both;
- margin: 2.0em 0em 2.0em 0em;
-}
-
-dl.toc dt
-{
- padding-bottom: 0.25em;
-}
-
-dl.toc > dd > dl > dt
-{
- padding-top: 0.25em;
- padding-bottom: 0.25em;
-}
-
-dl.toc > dt
-{
- padding-top: 1em;
- padding-bottom: 0.5em;
- font-weight: bold;
-}
-
-.parameter
-{
- font-style: normal;
}
.footer
@@ -309,70 +173,31 @@ dl.toc > dt
font-size: 80%;
}
-.informalfigure,
-.figure
-{
- margin: 1em;
-}
-
-.informalexample,
-.example
-{
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
.warning
{
/* tango:orange 0/1 */
background: #ffeed9;
- background: rgba(252, 175, 62, 0.1);
border-color: #ffb04f;
- border-color: rgba(252, 175, 62, 0.2);
}
.note
{
/* tango:chameleon 0/0.5 */
background: #d8ffb2;
- background: rgba(138, 226, 52, 0.1);
border-color: #abf562;
- border-color: rgba(138, 226, 52, 0.2);
}
-div.blockquote
-{
- border-color: #eeeeec;
-}
-.note, .warning, div.blockquote
+.note, .warning
{
padding: 0.5em;
border-width: 1px;
border-style: solid;
- margin: 2em;
}
-.note p, .warning p
+.note h3, .warning h3
{
- margin: 0;
+ margin-top: 0.0em
}
-
-div.warning h3.title,
-div.note h3.title
-{
- display: none;
-}
-
-p + div.section
-{
- margin-top: 1em;
-}
-
-div.refnamediv,
-div.refsynopsisdiv,
-div.refsect1,
-div.refsect2,
-div.toc,
-div.section
+.note p, .warning p
{
- margin-bottom: 1em;
+ margin-bottom: 0.0em
}
/* blob links */
@@ -385,22 +210,11 @@ h2 .extralinks, h3 .extralinks
font-weight: normal;
}
-.lineart
-{
- color: #d3d7cf;
- font-weight: normal;
-}
-
.annotation
{
/* tango:aluminium 5 */
color: #555753;
- font-weight: normal;
-}
-
-.structfield
-{
- font-style: normal;
+ font-size: 80%;
font-weight: normal;
}
@@ -423,7 +237,6 @@ h2 .extralinks, h3 .extralinks
.listing_frame {
/* tango:sky blue 1 */
border: solid 1px #729fcf;
- border: solid 1px rgba(114, 159, 207, 0.2);
padding: 0px;
}
@@ -433,27 +246,19 @@ h2 .extralinks, h3 .extralinks
padding: 0.5em;
}
.listing_lines {
- /* this just adds visual clutter and
- takes precious room from small screens */
- display: none;
-}
-.listing_lines {
/* tango:sky blue 0.5 */
background: #a6c5e3;
- background: rgba(114, 159, 207, 0.2);
/* tango:aluminium 6 */
color: #2e3436;
}
.listing_code {
/* tango:sky blue 0 */
background: #e6f3ff;
- background: rgba(114, 159, 207, 0.1);
}
.listing_code .programlisting {
/* override from previous */
border: none 0px;
padding: 0px;
- background: none;
}
.listing_lines pre, .listing_code pre {
margin: 0px;
diff --git a/docs/libnm-glib/html/up-insensitive.png b/docs/libnm-glib/html/up-insensitive.png
deleted file mode 100644
index f40498606..000000000
--- a/docs/libnm-glib/html/up-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/libnm-glib/html/up.png b/docs/libnm-glib/html/up.png
index 80b4b37e9..85b3e2a27 100644
--- a/docs/libnm-glib/html/up.png
+++ b/docs/libnm-glib/html/up.png
Binary files differ
diff --git a/docs/libnm-glib/libnm-glib-docs.xml b/docs/libnm-glib/libnm-glib-docs.xml
index 77863aeca..761192462 100644
--- a/docs/libnm-glib/libnm-glib-docs.xml
+++ b/docs/libnm-glib/libnm-glib-docs.xml
@@ -75,6 +75,8 @@
<xi:include href="xml/nm-device-adsl.xml"/>
<xi:include href="xml/nm-device-bond.xml"/>
<xi:include href="xml/nm-device-bridge.xml"/>
+ <xi:include href="xml/nm-device-team.xml"/>
+ <xi:include href="xml/nm-device-generic.xml"/>
<xi:include href="xml/nm-device-infiniband.xml"/>
<xi:include href="xml/nm-device-vlan.xml"/>
<xi:include href="xml/nm-device-olpc-mesh.xml"/>
diff --git a/docs/libnm-glib/libnm-glib-sections.txt b/docs/libnm-glib/libnm-glib-sections.txt
index 60e744d7f..1ba95d1de 100644
--- a/docs/libnm-glib/libnm-glib-sections.txt
+++ b/docs/libnm-glib/libnm-glib-sections.txt
@@ -11,6 +11,8 @@ NM_ACCESS_POINT_MODE
NM_ACCESS_POINT_MAX_BITRATE
NM_ACCESS_POINT_STRENGTH
NM_ACCESS_POINT_HW_ADDRESS
+NMAccessPoint
+NMAccessPointClass
nm_access_point_new
nm_access_point_get_flags
nm_access_point_get_wpa_flags
@@ -25,8 +27,6 @@ nm_access_point_filter_connections
nm_access_point_connection_valid
nm_access_point_get_hw_address
<SUBSECTION Standard>
-NMAccessPoint
-NMAccessPointClass
NM_ACCESS_POINT
NM_ACCESS_POINT_CLASS
NM_ACCESS_POINT_GET_CLASS
@@ -40,25 +40,39 @@ nm_access_point_get_type
<FILE>nm-active-connection</FILE>
<TITLE>NMActiveConnection</TITLE>
NM_ACTIVE_CONNECTION_CONNECTION
+NM_ACTIVE_CONNECTION_ID
NM_ACTIVE_CONNECTION_UUID
+NM_ACTIVE_CONNECTION_TYPE
NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT
NM_ACTIVE_CONNECTION_DEVICES
NM_ACTIVE_CONNECTION_STATE
NM_ACTIVE_CONNECTION_DEFAULT
+NM_ACTIVE_CONNECTION_IP4_CONFIG
+NM_ACTIVE_CONNECTION_DHCP4_CONFIG
NM_ACTIVE_CONNECTION_DEFAULT6
+NM_ACTIVE_CONNECTION_IP6_CONFIG
+NM_ACTIVE_CONNECTION_DHCP6_CONFIG
+NM_ACTIVE_CONNECTION_VPN
NM_ACTIVE_CONNECTION_MASTER
+NMActiveConnection
+NMActiveConnectionClass
nm_active_connection_new
nm_active_connection_get_connection
+nm_active_connection_get_id
nm_active_connection_get_uuid
+nm_active_connection_get_connection_type
nm_active_connection_get_specific_object
nm_active_connection_get_devices
nm_active_connection_get_state
+nm_active_connection_get_master
nm_active_connection_get_default
+nm_active_connection_get_ip4_config
+nm_active_connection_get_dhcp4_config
nm_active_connection_get_default6
-nm_active_connection_get_master
+nm_active_connection_get_ip6_config
+nm_active_connection_get_dhcp6_config
+nm_active_connection_get_vpn
<SUBSECTION Standard>
-NMActiveConnection
-NMActiveConnectionClass
NM_ACTIVE_CONNECTION
NM_ACTIVE_CONNECTION_CLASS
NM_ACTIVE_CONNECTION_GET_CLASS
@@ -73,6 +87,7 @@ nm_active_connection_get_type
<TITLE>NMClient</TITLE>
NM_CLIENT_VERSION
NM_CLIENT_STATE
+NM_CLIENT_STARTUP
NM_CLIENT_MANAGER_RUNNING
NM_CLIENT_NETWORKING_ENABLED
NM_CLIENT_WIRELESS_ENABLED
@@ -85,8 +100,14 @@ NM_CLIENT_ACTIVE_CONNECTIONS
NM_CLIENT_CONNECTIVITY
NM_CLIENT_PRIMARY_CONNECTION
NM_CLIENT_ACTIVATING_CONNECTION
+NM_CLIENT_DEVICES
NMClientPermission
NMClientPermissionResult
+NMClientError
+NM_CLIENT_ERROR
+nm_client_error_quark
+NMClient
+NMClientClass
nm_client_new
nm_client_new_async
nm_client_new_finish
@@ -111,6 +132,7 @@ nm_client_wimax_set_enabled
nm_client_wimax_hardware_get_enabled
nm_client_get_version
nm_client_get_state
+nm_client_get_startup
nm_client_get_manager_running
nm_client_get_active_connections
nm_client_sleep
@@ -124,8 +146,6 @@ nm_client_check_connectivity_finish
nm_client_get_primary_connection
nm_client_get_activating_connection
<SUBSECTION Standard>
-NMClient
-NMClientClass
NM_CLIENT
NM_CLIENT_CLASS
NM_CLIENT_GET_CLASS
@@ -138,6 +158,9 @@ nm_client_get_type
<SECTION>
<FILE>nm-device</FILE>
<TITLE>NMDevice</TITLE>
+NMDeviceError
+NM_DEVICE_ERROR
+nm_device_error_quark
NM_DEVICE_DEVICE_TYPE
NM_DEVICE_UDI
NM_DEVICE_INTERFACE
@@ -159,6 +182,10 @@ NM_DEVICE_ACTIVE_CONNECTION
NM_DEVICE_AVAILABLE_CONNECTIONS
NM_DEVICE_VENDOR
NM_DEVICE_PRODUCT
+NM_DEVICE_PHYSICAL_PORT_ID
+NM_DEVICE_MTU
+NMDevice
+NMDeviceClass
nm_device_new
nm_device_get_iface
nm_device_get_ip_iface
@@ -167,6 +194,8 @@ nm_device_get_udi
nm_device_get_driver
nm_device_get_driver_version
nm_device_get_firmware_version
+nm_device_get_type_description
+nm_device_get_hw_address
nm_device_get_capabilities
nm_device_get_managed
nm_device_get_autoconnect
@@ -180,16 +209,19 @@ nm_device_get_state
nm_device_get_state_reason
nm_device_get_active_connection
nm_device_get_available_connections
+nm_device_get_physical_port_id
+nm_device_get_mtu
nm_device_get_product
nm_device_get_vendor
+nm_device_get_description
+nm_device_disambiguate_names
NMDeviceDeactivateFn
nm_device_disconnect
nm_device_filter_connections
nm_device_connection_valid
nm_device_connection_compatible
+nm_device_get_setting_type
<SUBSECTION Standard>
-NMDevice
-NMDeviceClass
NM_DEVICE
NM_DEVICE_CLASS
NM_DEVICE_GET_CLASS
@@ -206,11 +238,11 @@ NMDeviceAdslError
NM_DEVICE_ADSL_ERROR
nm_device_adsl_error_quark
NM_DEVICE_ADSL_CARRIER
+NMDeviceAdsl
+NMDeviceAdslClass
nm_device_adsl_new
nm_device_adsl_get_carrier
<SUBSECTION Standard>
-NMDeviceAdsl
-NMDeviceAdslClass
NM_DEVICE_ADSL
NM_DEVICE_ADSL_CLASS
NM_DEVICE_ADSL_GET_CLASS
@@ -229,13 +261,13 @@ nm_device_bond_error_quark
NM_DEVICE_BOND_HW_ADDRESS
NM_DEVICE_BOND_CARRIER
NM_DEVICE_BOND_SLAVES
+NMDeviceBond
+NMDeviceBondClass
nm_device_bond_new
nm_device_bond_get_hw_address
nm_device_bond_get_carrier
nm_device_bond_get_slaves
<SUBSECTION Standard>
-NMDeviceBond
-NMDeviceBondClass
NM_DEVICE_BOND
NM_DEVICE_BOND_CLASS
NM_DEVICE_BOND_GET_CLASS
@@ -254,13 +286,13 @@ nm_device_bridge_error_quark
NM_DEVICE_BRIDGE_HW_ADDRESS
NM_DEVICE_BRIDGE_CARRIER
NM_DEVICE_BRIDGE_SLAVES
+NMDeviceBridge
+NMDeviceBridgeClass
nm_device_bridge_new
nm_device_bridge_get_hw_address
nm_device_bridge_get_carrier
nm_device_bridge_get_slaves
<SUBSECTION Standard>
-NMDeviceBridge
-NMDeviceBridgeClass
NM_DEVICE_BRIDGE
NM_DEVICE_BRIDGE_CLASS
NM_DEVICE_BRIDGE_GET_CLASS
@@ -279,13 +311,13 @@ nm_device_bt_error_quark
NM_DEVICE_BT_HW_ADDRESS
NM_DEVICE_BT_NAME
NM_DEVICE_BT_CAPABILITIES
+NMDeviceBt
+NMDeviceBtClass
nm_device_bt_new
nm_device_bt_get_hw_address
nm_device_bt_get_name
nm_device_bt_get_capabilities
<SUBSECTION Standard>
-NMDeviceBt
-NMDeviceBtClass
NM_DEVICE_BT
NM_DEVICE_BT_CLASS
NM_DEVICE_BT_GET_CLASS
@@ -305,14 +337,14 @@ NM_DEVICE_ETHERNET_HW_ADDRESS
NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS
NM_DEVICE_ETHERNET_SPEED
NM_DEVICE_ETHERNET_CARRIER
+NMDeviceEthernet
+NMDeviceEthernetClass
nm_device_ethernet_new
nm_device_ethernet_get_hw_address
nm_device_ethernet_get_permanent_hw_address
nm_device_ethernet_get_speed
nm_device_ethernet_get_carrier
<SUBSECTION Standard>
-NMDeviceEthernet
-NMDeviceEthernetClass
NM_DEVICE_ETHERNET
NM_DEVICE_ETHERNET_CLASS
NM_DEVICE_ETHERNET_GET_CLASS
@@ -323,6 +355,28 @@ nm_device_ethernet_get_type
</SECTION>
<SECTION>
+<FILE>nm-device-generic</FILE>
+<TITLE>NMDeviceGeneric</TITLE>
+NMDeviceGenericError
+NM_DEVICE_GENERIC_ERROR
+nm_device_generic_error_quark
+NM_DEVICE_GENERIC_HW_ADDRESS
+NM_DEVICE_GENERIC_TYPE_DESCRIPTION
+NMDeviceGeneric
+NMDeviceGenericClass
+nm_device_generic_new
+nm_device_generic_get_hw_address
+<SUBSECTION Standard>
+NM_DEVICE_GENERIC
+NM_DEVICE_GENERIC_CLASS
+NM_DEVICE_GENERIC_GET_CLASS
+NM_IS_DEVICE_GENERIC
+NM_IS_DEVICE_GENERIC_CLASS
+NM_TYPE_DEVICE_GENERIC
+nm_device_generic_get_type
+</SECTION>
+
+<SECTION>
<FILE>nm-device-infiniband</FILE>
<TITLE>NMDeviceInfiniband</TITLE>
NMDeviceInfinibandError
@@ -330,12 +384,12 @@ NM_DEVICE_INFINIBAND_ERROR
nm_device_infiniband_error_quark
NM_DEVICE_INFINIBAND_HW_ADDRESS
NM_DEVICE_INFINIBAND_CARRIER
+NMDeviceInfiniband
+NMDeviceInfinibandClass
nm_device_infiniband_new
nm_device_infiniband_get_hw_address
nm_device_infiniband_get_carrier
<SUBSECTION Standard>
-NMDeviceInfiniband
-NMDeviceInfinibandClass
NM_DEVICE_INFINIBAND
NM_DEVICE_INFINIBAND_CLASS
NM_DEVICE_INFINIBAND_GET_CLASS
@@ -353,11 +407,11 @@ NM_DEVICE_MODEM_ERROR
nm_device_modem_error_quark
NM_DEVICE_MODEM_MODEM_CAPABILITIES
NM_DEVICE_MODEM_CURRENT_CAPABILITIES
+NMDeviceModem
+NMDeviceModemClass
nm_device_modem_get_modem_capabilities
nm_device_modem_get_current_capabilities
<SUBSECTION Standard>
-NMDeviceModem
-NMDeviceModemClass
NM_DEVICE_MODEM
NM_DEVICE_MODEM_CLASS
NM_DEVICE_MODEM_GET_CLASS
@@ -376,13 +430,13 @@ nm_device_olpc_mesh_error_quark
NM_DEVICE_OLPC_MESH_HW_ADDRESS
NM_DEVICE_OLPC_MESH_COMPANION
NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL
+NMDeviceOlpcMesh
+NMDeviceOlpcMeshClass
nm_device_olpc_mesh_new
nm_device_olpc_mesh_get_hw_address
nm_device_olpc_mesh_get_companion
nm_device_olpc_mesh_get_active_channel
<SUBSECTION Standard>
-NMDeviceOlpcMesh
-NMDeviceOlpcMeshClass
NM_DEVICE_OLPC_MESH
NM_DEVICE_OLPC_MESH_CLASS
NM_DEVICE_OLPC_MESH_GET_CLASS
@@ -393,6 +447,31 @@ nm_device_olpc_mesh_get_type
</SECTION>
<SECTION>
+<FILE>nm-device-team</FILE>
+<TITLE>NMDeviceTeam</TITLE>
+NMDeviceTeamError
+NM_DEVICE_TEAM_ERROR
+nm_device_team_error_quark
+NM_DEVICE_TEAM_HW_ADDRESS
+NM_DEVICE_TEAM_CARRIER
+NM_DEVICE_TEAM_SLAVES
+NMDeviceTeam
+NMDeviceTeamClass
+nm_device_team_new
+nm_device_team_get_hw_address
+nm_device_team_get_carrier
+nm_device_team_get_slaves
+<SUBSECTION Standard>
+NM_DEVICE_TEAM
+NM_DEVICE_TEAM_CLASS
+NM_DEVICE_TEAM_GET_CLASS
+NM_IS_DEVICE_TEAM
+NM_IS_DEVICE_TEAM_CLASS
+NM_TYPE_DEVICE_TEAM
+nm_device_team_get_type
+</SECTION>
+
+<SECTION>
<FILE>nm-device-vlan</FILE>
<TITLE>NMDeviceVlan</TITLE>
NMDeviceVlanError
@@ -401,13 +480,13 @@ nm_device_vlan_error_quark
NM_DEVICE_VLAN_HW_ADDRESS
NM_DEVICE_VLAN_CARRIER
NM_DEVICE_VLAN_VLAN_ID
+NMDeviceVlan
+NMDeviceVlanClass
nm_device_vlan_new
nm_device_vlan_get_hw_address
nm_device_vlan_get_carrier
nm_device_vlan_get_vlan_id
<SUBSECTION Standard>
-NMDeviceVlan
-NMDeviceVlanClass
NM_DEVICE_VLAN
NM_DEVICE_VLAN_CLASS
NM_DEVICE_VLAN_GET_CLASS
@@ -429,6 +508,9 @@ NM_DEVICE_WIFI_MODE
NM_DEVICE_WIFI_BITRATE
NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT
NM_DEVICE_WIFI_CAPABILITIES
+NM_DEVICE_WIFI_ACCESS_POINTS
+NMDeviceWifi
+NMDeviceWifiClass
nm_device_wifi_new
nm_device_wifi_get_hw_address
nm_device_wifi_get_permanent_hw_address
@@ -441,8 +523,6 @@ nm_device_wifi_get_access_points
NMDeviceWifiRequestScanFn
nm_device_wifi_request_scan_simple
<SUBSECTION Standard>
-NMDeviceWifi
-NMDeviceWifiClass
NM_DEVICE_WIFI
NM_DEVICE_WIFI_CLASS
NM_DEVICE_WIFI_GET_CLASS
@@ -465,6 +545,9 @@ NM_DEVICE_WIMAX_RSSI
NM_DEVICE_WIMAX_CINR
NM_DEVICE_WIMAX_TX_POWER
NM_DEVICE_WIMAX_BSID
+NM_DEVICE_WIMAX_NSPS
+NMDeviceWimax
+NMDeviceWimaxClass
nm_device_wimax_new
nm_device_wimax_get_hw_address
nm_device_wimax_get_active_nsp
@@ -476,8 +559,6 @@ nm_device_wimax_get_cinr
nm_device_wimax_get_tx_power
nm_device_wimax_get_bsid
<SUBSECTION Standard>
-NMDeviceWimax
-NMDeviceWimaxClass
NM_DEVICE_WIMAX
NM_DEVICE_WIMAX_CLASS
NM_DEVICE_WIMAX_GET_CLASS
@@ -490,13 +571,13 @@ nm_device_wimax_get_type
<SECTION>
<FILE>nm-dhcp4-config</FILE>
<TITLE>NMDHCP4Config</TITLE>
+NMDHCP4Config
+NMDHCP4ConfigClass
NM_DHCP4_CONFIG_OPTIONS
nm_dhcp4_config_new
nm_dhcp4_config_get_options
nm_dhcp4_config_get_one_option
<SUBSECTION Standard>
-NMDHCP4Config
-NMDHCP4ConfigClass
NM_DHCP4_CONFIG
NM_DHCP4_CONFIG_CLASS
NM_IS_DHCP4_CONFIG
@@ -508,13 +589,13 @@ nm_dhcp4_config_get_type
<SECTION>
<FILE>nm-dhcp6-config</FILE>
<TITLE>NMDHCP6Config</TITLE>
+NMDHCP6Config
+NMDHCP6ConfigClass
NM_DHCP6_CONFIG_OPTIONS
nm_dhcp6_config_new
nm_dhcp6_config_get_options
nm_dhcp6_config_get_one_option
<SUBSECTION Standard>
-NMDHCP6Config
-NMDHCP6ConfigClass
NM_DHCP6_CONFIG
NM_DHCP6_CONFIG_CLASS
NM_IS_DHCP6_CONFIG
@@ -526,39 +607,51 @@ nm_dhcp6_config_get_type
<SECTION>
<FILE>nm-glib-enum-types</FILE>
<SUBSECTION Standard>
+NM_TYPE_CLIENT_ERROR
NM_TYPE_CLIENT_PERMISSION
NM_TYPE_CLIENT_PERMISSION_RESULT
NM_TYPE_DEVICE_ADSL_ERROR
NM_TYPE_DEVICE_BOND_ERROR
NM_TYPE_DEVICE_BRIDGE_ERROR
NM_TYPE_DEVICE_BT_ERROR
+NM_TYPE_DEVICE_ERROR
NM_TYPE_DEVICE_ETHERNET_ERROR
+NM_TYPE_DEVICE_GENERIC_ERROR
NM_TYPE_DEVICE_INFINIBAND_ERROR
NM_TYPE_DEVICE_MODEM_ERROR
NM_TYPE_DEVICE_OLPC_MESH_ERROR
+NM_TYPE_DEVICE_TEAM_ERROR
NM_TYPE_DEVICE_VLAN_ERROR
NM_TYPE_DEVICE_WIFI_ERROR
NM_TYPE_DEVICE_WIMAX_ERROR
NM_TYPE_OBJECT_ERROR
+NM_TYPE_REMOTE_CONNECTION_ERROR
NM_TYPE_REMOTE_SETTINGS_ERROR
+NM_TYPE_SECRET_AGENT_CAPABILITIES
NM_TYPE_SECRET_AGENT_ERROR
NM_TYPE_SECRET_AGENT_GET_SECRETS_FLAGS
NM_TYPE_WIMAX_NSP_NETWORK_TYPE
+nm_client_error_get_type
nm_client_permission_get_type
nm_client_permission_result_get_type
nm_device_adsl_error_get_type
nm_device_bond_error_get_type
nm_device_bridge_error_get_type
nm_device_bt_error_get_type
+nm_device_error_get_type
nm_device_ethernet_error_get_type
+nm_device_generic_error_get_type
nm_device_infiniband_error_get_type
nm_device_modem_error_get_type
nm_device_olpc_mesh_error_get_type
+nm_device_team_error_get_type
nm_device_vlan_error_get_type
nm_device_wifi_error_get_type
nm_device_wimax_error_get_type
nm_object_error_get_type
+nm_remote_connection_error_get_type
nm_remote_settings_error_get_type
+nm_secret_agent_capabilities_get_type
nm_secret_agent_error_get_type
nm_secret_agent_get_secrets_flags_get_type
nm_wimax_nsp_network_type_get_type
@@ -567,20 +660,24 @@ nm_wimax_nsp_network_type_get_type
<SECTION>
<FILE>nm-ip4-config</FILE>
<TITLE>NMIP4Config</TITLE>
+NMIP4Config
+NMIP4ConfigClass
+NM_IP4_CONFIG_GATEWAY
NM_IP4_CONFIG_ADDRESSES
+NM_IP4_CONFIG_ROUTES
NM_IP4_CONFIG_NAMESERVERS
NM_IP4_CONFIG_DOMAINS
-NM_IP4_CONFIG_ROUTES
+NM_IP4_CONFIG_SEARCHES
NM_IP4_CONFIG_WINS_SERVERS
nm_ip4_config_new
+nm_ip4_config_get_gateway
nm_ip4_config_get_addresses
+nm_ip4_config_get_routes
nm_ip4_config_get_nameservers
nm_ip4_config_get_domains
-nm_ip4_config_get_routes
+nm_ip4_config_get_searches
nm_ip4_config_get_wins_servers
<SUBSECTION Standard>
-NMIP4Config
-NMIP4ConfigClass
NM_IP4_CONFIG
NM_IP4_CONFIG_CLASS
NM_IP4_CONFIG_GET_CLASS
@@ -593,18 +690,24 @@ nm_ip4_config_get_type
<SECTION>
<FILE>nm-ip6-config</FILE>
<TITLE>NMIP6Config</TITLE>
+NMIP6Config
+NMIP6ConfigClass
+NM_IP6_CONFIG_GATEWAY
NM_IP6_CONFIG_ADDRESSES
+NM_IP6_CONFIG_ROUTES
NM_IP6_CONFIG_NAMESERVERS
NM_IP6_CONFIG_DOMAINS
-NM_IP6_CONFIG_ROUTES
+NM_IP6_CONFIG_SEARCHES
nm_ip6_config_new
+nm_ip6_config_get_gateway
nm_ip6_config_get_addresses
+nm_ip6_config_get_routes
+nm_ip6_config_get_num_nameservers
+nm_ip6_config_get_nameserver
nm_ip6_config_get_nameservers
nm_ip6_config_get_domains
-nm_ip6_config_get_routes
+nm_ip6_config_get_searches
<SUBSECTION Standard>
-NMIP6Config
-NMIP6ConfigClass
NM_IP6_CONFIG
NM_IP6_CONFIG_CLASS
NM_IP6_CONFIG_GET_CLASS
@@ -622,11 +725,11 @@ NM_OBJECT_ERROR
nm_object_error_quark
NM_OBJECT_DBUS_CONNECTION
NM_OBJECT_DBUS_PATH
+NMObject
+NMObjectClass
nm_object_get_connection
nm_object_get_path
<SUBSECTION Standard>
-NMObject
-NMObjectClass
NM_IS_OBJECT
NM_IS_OBJECT_CLASS
NM_OBJECT
@@ -639,18 +742,26 @@ nm_object_get_type
<SECTION>
<FILE>nm-remote-connection</FILE>
<TITLE>NMRemoteConnection</TITLE>
+NMRemoteConnectionError
+NM_REMOTE_CONNECTION_ERROR
+nm_remote_connection_error_quark
+NM_REMOTE_CONNECTION_UNSAVED
NM_REMOTE_CONNECTION_UPDATED
NM_REMOTE_CONNECTION_REMOVED
+NMRemoteConnection
+NMRemoteConnectionClass
+NMRemoteConnectionResultFunc
NMRemoteConnectionCommitFunc
NMRemoteConnectionDeleteFunc
NMRemoteConnectionGetSecretsFunc
nm_remote_connection_new
nm_remote_connection_commit_changes
+nm_remote_connection_commit_changes_unsaved
+nm_remote_connection_save
nm_remote_connection_delete
nm_remote_connection_get_secrets
+nm_remote_connection_get_unsaved
<SUBSECTION Standard>
-NMRemoteConnection
-NMRemoteConnectionClass
NM_IS_REMOTE_CONNECTION
NM_IS_REMOTE_CONNECTION_CLASS
NM_REMOTE_CONNECTION
@@ -673,18 +784,23 @@ NM_REMOTE_SETTINGS_CAN_MODIFY
NM_REMOTE_SETTINGS_NEW_CONNECTION
NM_REMOTE_SETTINGS_CONNECTIONS_READ
NMRemoteSettingsAddConnectionFunc
+NMRemoteSettingsLoadConnectionsFunc
NMRemoteSettingsSaveHostnameFunc
+NMRemoteSettings
+NMRemoteSettingsClass
nm_remote_settings_new
nm_remote_settings_new_async
nm_remote_settings_new_finish
nm_remote_settings_list_connections
+nm_remote_settings_get_connection_by_id
nm_remote_settings_get_connection_by_path
nm_remote_settings_get_connection_by_uuid
nm_remote_settings_add_connection
+nm_remote_settings_add_connection_unsaved
+nm_remote_settings_load_connections
+nm_remote_settings_reload_connections
nm_remote_settings_save_hostname
<SUBSECTION Standard>
-NMRemoteSettings
-NMRemoteSettingsClass
NM_IS_REMOTE_SETTINGS
NM_IS_REMOTE_SETTINGS_CLASS
NM_REMOTE_SETTINGS
@@ -700,14 +816,18 @@ nm_remote_settings_get_type
NM_SECRET_AGENT_ERROR
nm_secret_agent_error_quark
NMSecretAgentError
+NMSecretAgentCapabilities
NMSecretAgentGetSecretsFlags
NM_SECRET_AGENT_IDENTIFIER
NM_SECRET_AGENT_AUTO_REGISTER
NM_SECRET_AGENT_REGISTERED
+NM_SECRET_AGENT_CAPABILITIES
NM_SECRET_AGENT_REGISTRATION_RESULT
+NMSecretAgent
NMSecretAgentGetSecretsFunc
NMSecretAgentSaveSecretsFunc
NMSecretAgentDeleteSecretsFunc
+NMSecretAgentClass
nm_secret_agent_register
nm_secret_agent_unregister
nm_secret_agent_get_registered
@@ -715,8 +835,6 @@ nm_secret_agent_get_secrets
nm_secret_agent_save_secrets
nm_secret_agent_delete_secrets
<SUBSECTION Standard>
-NMSecretAgent
-NMSecretAgentClass
NM_IS_SECRET_AGENT
NM_IS_SECRET_AGENT_CLASS
NM_SECRET_AGENT
@@ -750,12 +868,12 @@ nm_uint_array_get_type
<TITLE>NMVPNConnection</TITLE>
NM_VPN_CONNECTION_VPN_STATE
NM_VPN_CONNECTION_BANNER
+NMVPNConnection
+NMVPNConnectionClass
nm_vpn_connection_new
nm_vpn_connection_get_vpn_state
nm_vpn_connection_get_banner
<SUBSECTION Standard>
-NMVPNConnection
-NMVPNConnectionClass
NM_IS_VPN_CONNECTION
NM_IS_VPN_CONNECTION_CLASS
NM_TYPE_VPN_CONNECTION
@@ -782,10 +900,13 @@ nm_vpn_plugin_ui_interface_prop_get_type
NM_VPN_PLUGIN_DBUS_SERVICE_NAME
NM_VPN_PLUGIN_STATE
NMVPNPluginError
+NMVPNPlugin
+NMVPNPluginClass
nm_vpn_plugin_error_quark
nm_vpn_plugin_get_connection
nm_vpn_plugin_get_state
nm_vpn_plugin_set_state
+nm_vpn_plugin_secrets_required
nm_vpn_plugin_set_login_banner
nm_vpn_plugin_failure
nm_vpn_plugin_set_config
@@ -793,8 +914,6 @@ nm_vpn_plugin_set_ip4_config
nm_vpn_plugin_set_ip6_config
nm_vpn_plugin_disconnect
<SUBSECTION Standard>
-NMVPNPlugin
-NMVPNPluginClass
NM_IS_VPN_PLUGIN
NM_IS_VPN_PLUGIN_CLASS
NM_TYPE_VPN_PLUGIN
@@ -809,6 +928,7 @@ nm_vpn_plugin_get_type
<SECTION>
<FILE>nm-vpn-plugin-ui-interface</FILE>
<TITLE>NMVpnPluginUiWidget</TITLE>
+<TITLE>NMVpnPluginUi</TITLE>
NMVpnPluginUiFactory
nm_vpn_plugin_ui_factory
NMVpnPluginUiCapability
@@ -816,18 +936,18 @@ NM_VPN_PLUGIN_UI_INTERFACE_NAME
NM_VPN_PLUGIN_UI_INTERFACE_DESC
NM_VPN_PLUGIN_UI_INTERFACE_SERVICE
NMVpnPluginUiInterfaceProp
+NMVpnPluginUiInterface
nm_vpn_plugin_ui_interface_ui_factory
nm_vpn_plugin_ui_interface_get_capabilities
nm_vpn_plugin_ui_interface_import
nm_vpn_plugin_ui_interface_export
nm_vpn_plugin_ui_interface_get_suggested_name
nm_vpn_plugin_ui_interface_delete_connection
+NMVpnPluginUiWidgetInterface
nm_vpn_plugin_ui_widget_interface_get_widget
nm_vpn_plugin_ui_widget_interface_update_connection
nm_vpn_plugin_ui_widget_interface_save_secrets
<SUBSECTION Standard>
-NMVpnPluginUiInterface
-NMVpnPluginUiWidgetInterface
NM_IS_VPN_PLUGIN_UI_INTERFACE
NM_IS_VPN_PLUGIN_UI_WIDGET_INTERFACE
NM_TYPE_VPN_PLUGIN_UI_INTERFACE
@@ -853,6 +973,8 @@ NM_WIMAX_NSP_NAME
NM_WIMAX_NSP_SIGNAL_QUALITY
NM_WIMAX_NSP_NETWORK_TYPE
NMWimaxNspNetworkType
+NMWimaxNsp
+NMWimaxNspClass
nm_wimax_nsp_new
nm_wimax_nsp_get_name
nm_wimax_nsp_get_signal_quality
@@ -860,8 +982,6 @@ nm_wimax_nsp_get_network_type
nm_wimax_nsp_filter_connections
nm_wimax_nsp_connection_valid
<SUBSECTION Standard>
-NMWimaxNsp
-NMWimaxNspClass
NM_IS_WIMAX_NSP
NM_IS_WIMAX_NSP_CLASS
NM_TYPE_WIMAX_NSP
diff --git a/docs/libnm-glib/libnm-glib.types b/docs/libnm-glib/libnm-glib.types
index d8486f47a..01ab1ce63 100644
--- a/docs/libnm-glib/libnm-glib.types
+++ b/docs/libnm-glib/libnm-glib.types
@@ -11,6 +11,8 @@
#include <nm-device-infiniband.h>
#include <nm-device-bond.h>
#include <nm-device-bridge.h>
+#include <nm-device-team.h>
+#include <nm-device-generic.h>
#include <nm-device-vlan.h>
#include <nm-access-point.h>
#include <nm-ip4-config.h>
@@ -36,6 +38,8 @@ nm_device_adsl_get_type
nm_device_infiniband_get_type
nm_device_bond_get_type
nm_device_bridge_get_type
+nm_device_team_get_type
+nm_device_generic_get_type
nm_device_vlan_get_type
nm_wimax_nsp_get_type
nm_access_point_get_type
diff --git a/docs/libnm-glib/tmpl/nm-access-point.sgml b/docs/libnm-glib/tmpl/nm-access-point.sgml
index 2a2ecb1cd..ad78146c2 100644
--- a/docs/libnm-glib/tmpl/nm-access-point.sgml
+++ b/docs/libnm-glib/tmpl/nm-access-point.sgml
@@ -92,6 +92,75 @@ NMAccessPoint
+<!-- ##### STRUCT NMAccessPoint ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMAccessPoint:bssid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:frequency ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:max-bitrate ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:mode ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:rsn-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:ssid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:strength ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMAccessPoint:wpa-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMAccessPointClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_access_point_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-active-connection.sgml b/docs/libnm-glib/tmpl/nm-active-connection.sgml
index a72575280..457b84288 100644
--- a/docs/libnm-glib/tmpl/nm-active-connection.sgml
+++ b/docs/libnm-glib/tmpl/nm-active-connection.sgml
@@ -29,6 +29,13 @@ NMActiveConnection
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_ID ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_ACTIVE_CONNECTION_UUID ##### -->
<para>
@@ -36,6 +43,13 @@ NMActiveConnection
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_TYPE ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT ##### -->
<para>
@@ -64,6 +78,20 @@ NMActiveConnection
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_IP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_DHCP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_ACTIVE_CONNECTION_DEFAULT6 ##### -->
<para>
@@ -71,6 +99,27 @@ NMActiveConnection
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_IP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_DHCP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_VPN ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_ACTIVE_CONNECTION_MASTER ##### -->
<para>
@@ -78,6 +127,100 @@ NMActiveConnection
+<!-- ##### STRUCT NMActiveConnection ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMActiveConnection:connection ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:default ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:default6 ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:devices ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:dhcp4-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:dhcp6-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:ip4-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:ip6-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:master ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:specific-object ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:state ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:uuid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMActiveConnection:vpn ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMActiveConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_active_connection_new ##### -->
<para>
@@ -97,6 +240,15 @@ NMActiveConnection
@Returns:
+<!-- ##### FUNCTION nm_active_connection_get_id ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_active_connection_get_uuid ##### -->
<para>
@@ -106,6 +258,15 @@ NMActiveConnection
@Returns:
+<!-- ##### FUNCTION nm_active_connection_get_connection_type ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_active_connection_get_specific_object ##### -->
<para>
@@ -133,6 +294,15 @@ NMActiveConnection
@Returns:
+<!-- ##### FUNCTION nm_active_connection_get_master ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_active_connection_get_default ##### -->
<para>
@@ -142,6 +312,24 @@ NMActiveConnection
@Returns:
+<!-- ##### FUNCTION nm_active_connection_get_ip4_config ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_dhcp4_config ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_active_connection_get_default6 ##### -->
<para>
@@ -151,7 +339,25 @@ NMActiveConnection
@Returns:
-<!-- ##### FUNCTION nm_active_connection_get_master ##### -->
+<!-- ##### FUNCTION nm_active_connection_get_ip6_config ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_dhcp6_config ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_vpn ##### -->
<para>
</para>
diff --git a/docs/libnm-glib/tmpl/nm-client.sgml b/docs/libnm-glib/tmpl/nm-client.sgml
index ee1377d98..5d6814cc8 100644
--- a/docs/libnm-glib/tmpl/nm-client.sgml
+++ b/docs/libnm-glib/tmpl/nm-client.sgml
@@ -36,6 +36,13 @@ NMClient
+<!-- ##### MACRO NM_CLIENT_STARTUP ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_CLIENT_MANAGER_RUNNING ##### -->
<para>
@@ -120,6 +127,13 @@ NMClient
+<!-- ##### MACRO NM_CLIENT_DEVICES ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### ENUM NMClientPermission ##### -->
<para>
@@ -149,6 +163,157 @@ NMClient
@NM_CLIENT_PERMISSION_RESULT_AUTH:
@NM_CLIENT_PERMISSION_RESULT_NO:
+<!-- ##### ENUM NMClientError ##### -->
+<para>
+
+</para>
+
+@NM_CLIENT_ERROR_UNKNOWN:
+@NM_CLIENT_ERROR_MANAGER_NOT_RUNNING:
+
+<!-- ##### MACRO NM_CLIENT_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_client_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### STRUCT NMClient ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMClient::device-added ##### -->
+<para>
+
+</para>
+
+@nmclient: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL NMClient::device-removed ##### -->
+<para>
+
+</para>
+
+@nmclient: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL NMClient::permission-changed ##### -->
+<para>
+
+</para>
+
+@nmclient: the object which received the signal.
+@arg1:
+@arg2:
+
+<!-- ##### ARG NMClient:activating-connection ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:active-connections ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:connectivity ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:devices ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:manager-running ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:networking-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:primary-connection ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:startup ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:state ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:version ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:wimax-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:wimax-hardware-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:wireless-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:wireless-hardware-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:wwan-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:wwan-hardware-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMClientClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@device_added:
+@device_removed:
+@permission_changed:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_client_new ##### -->
<para>
@@ -382,6 +547,15 @@ NMClient
@Returns:
+<!-- ##### FUNCTION nm_client_get_startup ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
<!-- ##### FUNCTION nm_client_get_manager_running ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-adsl.sgml b/docs/libnm-glib/tmpl/nm-device-adsl.sgml
index 1c7e14c2f..111cf8a69 100644
--- a/docs/libnm-glib/tmpl/nm-device-adsl.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-adsl.sgml
@@ -54,6 +54,30 @@ NMDeviceAdsl
+<!-- ##### STRUCT NMDeviceAdsl ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceAdsl:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceAdslClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_adsl_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-bond.sgml b/docs/libnm-glib/tmpl/nm-device-bond.sgml
index 3270d9951..cc85389d3 100644
--- a/docs/libnm-glib/tmpl/nm-device-bond.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-bond.sgml
@@ -69,6 +69,40 @@ NMDeviceBond
+<!-- ##### STRUCT NMDeviceBond ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceBond:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceBond:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceBond:slaves ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceBondClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_bond_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-bridge.sgml b/docs/libnm-glib/tmpl/nm-device-bridge.sgml
index 650945771..3570bae37 100644
--- a/docs/libnm-glib/tmpl/nm-device-bridge.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-bridge.sgml
@@ -69,6 +69,40 @@ NMDeviceBridge
+<!-- ##### STRUCT NMDeviceBridge ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceBridge:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceBridge:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceBridge:slaves ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceBridgeClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_bridge_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-bt.sgml b/docs/libnm-glib/tmpl/nm-device-bt.sgml
index 44a6f6923..404ec8884 100644
--- a/docs/libnm-glib/tmpl/nm-device-bt.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-bt.sgml
@@ -71,6 +71,40 @@ NMDeviceBt
+<!-- ##### STRUCT NMDeviceBt ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceBt:bt-capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceBt:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceBt:name ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceBtClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_bt_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-ethernet.sgml b/docs/libnm-glib/tmpl/nm-device-ethernet.sgml
index 4d97c1890..a3771275b 100644
--- a/docs/libnm-glib/tmpl/nm-device-ethernet.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-ethernet.sgml
@@ -77,6 +77,45 @@ NMDeviceEthernet
+<!-- ##### STRUCT NMDeviceEthernet ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceEthernet:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceEthernet:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceEthernet:perm-hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceEthernet:speed ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceEthernetClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_ethernet_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-generic.sgml b/docs/libnm-glib/tmpl/nm-device-generic.sgml
new file mode 100644
index 000000000..e47323d5a
--- /dev/null
+++ b/docs/libnm-glib/tmpl/nm-device-generic.sgml
@@ -0,0 +1,111 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceGeneric
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### ENUM NMDeviceGenericError ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_GENERIC_ERROR_UNKNOWN:
+@NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION:
+@NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME:
+
+<!-- ##### MACRO NM_DEVICE_GENERIC_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_device_generic_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_DEVICE_GENERIC_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_GENERIC_TYPE_DESCRIPTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceGeneric ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceGeneric:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceGeneric:type-description ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceGenericClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
+<!-- ##### FUNCTION nm_device_generic_new ##### -->
+<para>
+
+</para>
+
+@connection:
+@path:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_generic_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm-glib/tmpl/nm-device-infiniband.sgml b/docs/libnm-glib/tmpl/nm-device-infiniband.sgml
index 73a3f3c4e..f50d415f4 100644
--- a/docs/libnm-glib/tmpl/nm-device-infiniband.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-infiniband.sgml
@@ -63,6 +63,35 @@ NMDeviceInfiniband
+<!-- ##### STRUCT NMDeviceInfiniband ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceInfiniband:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceInfiniband:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceInfinibandClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_infiniband_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-modem.sgml b/docs/libnm-glib/tmpl/nm-device-modem.sgml
index 007c3b42f..4e1cc83a6 100644
--- a/docs/libnm-glib/tmpl/nm-device-modem.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-modem.sgml
@@ -62,6 +62,35 @@ NMDeviceModem
+<!-- ##### STRUCT NMDeviceModem ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceModem:current-capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceModem:modem-capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceModemClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_modem_get_modem_capabilities ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-olpc-mesh.sgml b/docs/libnm-glib/tmpl/nm-device-olpc-mesh.sgml
index c8cccb2f5..fb78ba355 100644
--- a/docs/libnm-glib/tmpl/nm-device-olpc-mesh.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-olpc-mesh.sgml
@@ -68,6 +68,40 @@ NMDeviceOlpcMesh
+<!-- ##### STRUCT NMDeviceOlpcMesh ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceOlpcMesh:active-channel ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceOlpcMesh:companion ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceOlpcMesh:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceOlpcMeshClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_olpc_mesh_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-team.sgml b/docs/libnm-glib/tmpl/nm-device-team.sgml
new file mode 100644
index 000000000..cd73a4124
--- /dev/null
+++ b/docs/libnm-glib/tmpl/nm-device-team.sgml
@@ -0,0 +1,142 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceTeam
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### ENUM NMDeviceTeamError ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_TEAM_ERROR_UNKNOWN:
+@NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION:
+@NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION:
+@NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH:
+
+<!-- ##### MACRO NM_DEVICE_TEAM_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_device_team_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_DEVICE_TEAM_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_TEAM_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_TEAM_SLAVES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceTeam ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceTeam:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceTeam:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceTeam:slaves ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceTeamClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
+<!-- ##### FUNCTION nm_device_team_new ##### -->
+<para>
+
+</para>
+
+@connection:
+@path:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_team_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_team_get_carrier ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_team_get_slaves ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm-glib/tmpl/nm-device-vlan.sgml b/docs/libnm-glib/tmpl/nm-device-vlan.sgml
index 68534f559..2509a21d4 100644
--- a/docs/libnm-glib/tmpl/nm-device-vlan.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-vlan.sgml
@@ -32,6 +32,7 @@ NMDeviceVlan
@NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION:
@NM_DEVICE_VLAN_ERROR_ID_MISMATCH:
@NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH:
+@NM_DEVICE_VLAN_ERROR_MAC_MISMATCH:
<!-- ##### MACRO NM_DEVICE_VLAN_ERROR ##### -->
<para>
@@ -70,6 +71,40 @@ NMDeviceVlan
+<!-- ##### STRUCT NMDeviceVlan ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceVlan:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceVlan:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceVlan:vlan-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceVlanClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_vlan_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-wifi.sgml b/docs/libnm-glib/tmpl/nm-device-wifi.sgml
index 50df10211..932a7db38 100644
--- a/docs/libnm-glib/tmpl/nm-device-wifi.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-wifi.sgml
@@ -93,6 +93,85 @@ NMDeviceWifi
+<!-- ##### MACRO NM_DEVICE_WIFI_ACCESS_POINTS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceWifi ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMDeviceWifi::access-point-added ##### -->
+<para>
+
+</para>
+
+@nmdevicewifi: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL NMDeviceWifi::access-point-removed ##### -->
+<para>
+
+</para>
+
+@nmdevicewifi: the object which received the signal.
+@arg1:
+
+<!-- ##### ARG NMDeviceWifi:access-points ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWifi:active-access-point ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWifi:bitrate ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWifi:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWifi:mode ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWifi:perm-hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWifi:wireless-capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceWifiClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@access_point_added:
+@access_point_removed:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_device_wifi_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device-wimax.sgml b/docs/libnm-glib/tmpl/nm-device-wimax.sgml
index cc0c8c8ea..570d05399 100644
--- a/docs/libnm-glib/tmpl/nm-device-wimax.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-wimax.sgml
@@ -98,6 +98,84 @@ NMDeviceWimax
+<!-- ##### MACRO NM_DEVICE_WIMAX_NSPS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceWimax ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMDeviceWimax::nsp-added ##### -->
+<para>
+
+</para>
+
+@nmdevicewimax: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL NMDeviceWimax::nsp-removed ##### -->
+<para>
+
+</para>
+
+@nmdevicewimax: the object which received the signal.
+@arg1:
+
+<!-- ##### ARG NMDeviceWimax:active-nsp ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWimax:bsid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWimax:center-frequency ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWimax:cinr ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWimax:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWimax:nsps ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWimax:rssi ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceWimax:tx-power ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceWimaxClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@nsp_added:
+@nsp_removed:
+
<!-- ##### FUNCTION nm_device_wimax_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device.sgml b/docs/libnm-glib/tmpl/nm-device.sgml
index 1efb5ace8..a3c552861 100644
--- a/docs/libnm-glib/tmpl/nm-device.sgml
+++ b/docs/libnm-glib/tmpl/nm-device.sgml
@@ -22,6 +22,30 @@ NMDevice
<!-- ##### SECTION Image ##### -->
+<!-- ##### ENUM NMDeviceError ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_ERROR_UNKNOWN:
+@NM_DEVICE_ERROR_INTERFACE_MISMATCH:
+
+<!-- ##### MACRO NM_DEVICE_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_device_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
<!-- ##### MACRO NM_DEVICE_DEVICE_TYPE ##### -->
<para>
@@ -169,6 +193,166 @@ NMDevice
+<!-- ##### MACRO NM_DEVICE_PHYSICAL_PORT_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDevice ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMDevice::state-changed ##### -->
+<para>
+
+</para>
+
+@nmdevice: the object which received the signal.
+@arg1:
+@arg2:
+@arg3:
+
+<!-- ##### ARG NMDevice:active-connection ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:autoconnect ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:available-connections ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:device-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:dhcp4-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:dhcp6-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:driver ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:driver-version ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:firmware-missing ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:firmware-version ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:interface ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:ip-interface ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:ip4-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:ip6-config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:managed ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:mtu ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:physical-port-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:product ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:state ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:state-reason ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:udi ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDevice:vendor ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@state_changed:
+@connection_compatible:
+@get_type_description:
+@get_hw_address:
+@get_setting_type:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+
<!-- ##### FUNCTION nm_device_new ##### -->
<para>
@@ -242,6 +426,24 @@ NMDevice
@Returns:
+<!-- ##### FUNCTION nm_device_get_type_description ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
<!-- ##### FUNCTION nm_device_get_capabilities ##### -->
<para>
@@ -360,6 +562,24 @@ NMDevice
@Returns:
+<!-- ##### FUNCTION nm_device_get_physical_port_id ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_mtu ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
<!-- ##### FUNCTION nm_device_get_product ##### -->
<para>
@@ -378,6 +598,25 @@ NMDevice
@Returns:
+<!-- ##### FUNCTION nm_device_get_description ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_disambiguate_names ##### -->
+<para>
+
+</para>
+
+@devices:
+@num_devices:
+@Returns:
+
+
<!-- ##### USER_FUNCTION NMDeviceDeactivateFn ##### -->
<para>
@@ -429,3 +668,12 @@ NMDevice
@Returns:
+<!-- ##### FUNCTION nm_device_get_setting_type ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm-glib/tmpl/nm-dhcp4-config.sgml b/docs/libnm-glib/tmpl/nm-dhcp4-config.sgml
index 4f3d86024..35a6e3069 100644
--- a/docs/libnm-glib/tmpl/nm-dhcp4-config.sgml
+++ b/docs/libnm-glib/tmpl/nm-dhcp4-config.sgml
@@ -22,6 +22,30 @@ NMDHCP4Config
<!-- ##### SECTION Image ##### -->
+<!-- ##### STRUCT NMDHCP4Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDHCP4Config:options ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDHCP4ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### MACRO NM_DHCP4_CONFIG_OPTIONS ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-dhcp6-config.sgml b/docs/libnm-glib/tmpl/nm-dhcp6-config.sgml
index 7679b7d9f..3e00467cc 100644
--- a/docs/libnm-glib/tmpl/nm-dhcp6-config.sgml
+++ b/docs/libnm-glib/tmpl/nm-dhcp6-config.sgml
@@ -22,6 +22,30 @@ NMDHCP6Config
<!-- ##### SECTION Image ##### -->
+<!-- ##### STRUCT NMDHCP6Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDHCP6Config:options ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDHCP6ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### MACRO NM_DHCP6_CONFIG_OPTIONS ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-ip4-config.sgml b/docs/libnm-glib/tmpl/nm-ip4-config.sgml
index 996b3178d..499cf35fe 100644
--- a/docs/libnm-glib/tmpl/nm-ip4-config.sgml
+++ b/docs/libnm-glib/tmpl/nm-ip4-config.sgml
@@ -22,6 +22,67 @@ NMIP4Config
<!-- ##### SECTION Image ##### -->
+<!-- ##### STRUCT NMIP4Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMIP4Config:addresses ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP4Config:domains ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP4Config:gateway ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP4Config:nameservers ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP4Config:routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP4Config:searches ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP4Config:wins-servers ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMIP4ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
+<!-- ##### MACRO NM_IP4_CONFIG_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_IP4_CONFIG_ADDRESSES ##### -->
<para>
@@ -29,6 +90,13 @@ NMIP4Config
+<!-- ##### MACRO NM_IP4_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_IP4_CONFIG_NAMESERVERS ##### -->
<para>
@@ -43,7 +111,7 @@ NMIP4Config
-<!-- ##### MACRO NM_IP4_CONFIG_ROUTES ##### -->
+<!-- ##### MACRO NM_IP4_CONFIG_SEARCHES ##### -->
<para>
</para>
@@ -67,6 +135,15 @@ NMIP4Config
@Returns:
+<!-- ##### FUNCTION nm_ip4_config_get_gateway ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
<!-- ##### FUNCTION nm_ip4_config_get_addresses ##### -->
<para>
@@ -76,6 +153,15 @@ NMIP4Config
@Returns:
+<!-- ##### FUNCTION nm_ip4_config_get_routes ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
<!-- ##### FUNCTION nm_ip4_config_get_nameservers ##### -->
<para>
@@ -94,7 +180,7 @@ NMIP4Config
@Returns:
-<!-- ##### FUNCTION nm_ip4_config_get_routes ##### -->
+<!-- ##### FUNCTION nm_ip4_config_get_searches ##### -->
<para>
</para>
diff --git a/docs/libnm-glib/tmpl/nm-ip6-config.sgml b/docs/libnm-glib/tmpl/nm-ip6-config.sgml
index c65bd18dd..12fe2b1d6 100644
--- a/docs/libnm-glib/tmpl/nm-ip6-config.sgml
+++ b/docs/libnm-glib/tmpl/nm-ip6-config.sgml
@@ -22,6 +22,62 @@ NMIP6Config
<!-- ##### SECTION Image ##### -->
+<!-- ##### STRUCT NMIP6Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMIP6Config:addresses ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP6Config:domains ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP6Config:gateway ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP6Config:nameservers ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP6Config:routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIP6Config:searches ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMIP6ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
+<!-- ##### MACRO NM_IP6_CONFIG_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_IP6_CONFIG_ADDRESSES ##### -->
<para>
@@ -29,6 +85,13 @@ NMIP6Config
+<!-- ##### MACRO NM_IP6_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_IP6_CONFIG_NAMESERVERS ##### -->
<para>
@@ -43,7 +106,7 @@ NMIP6Config
-<!-- ##### MACRO NM_IP6_CONFIG_ROUTES ##### -->
+<!-- ##### MACRO NM_IP6_CONFIG_SEARCHES ##### -->
<para>
</para>
@@ -60,6 +123,15 @@ NMIP6Config
@Returns:
+<!-- ##### FUNCTION nm_ip6_config_get_gateway ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
<!-- ##### FUNCTION nm_ip6_config_get_addresses ##### -->
<para>
@@ -69,6 +141,34 @@ NMIP6Config
@Returns:
+<!-- ##### FUNCTION nm_ip6_config_get_routes ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip6_config_get_num_nameservers ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip6_config_get_nameserver ##### -->
+<para>
+
+</para>
+
+@config:
+@idx:
+@Returns:
+
+
<!-- ##### FUNCTION nm_ip6_config_get_nameservers ##### -->
<para>
@@ -87,7 +187,7 @@ NMIP6Config
@Returns:
-<!-- ##### FUNCTION nm_ip6_config_get_routes ##### -->
+<!-- ##### FUNCTION nm_ip6_config_get_searches ##### -->
<para>
</para>
diff --git a/docs/libnm-glib/tmpl/nm-object.sgml b/docs/libnm-glib/tmpl/nm-object.sgml
index 7d99e2c0d..bb17ec37f 100644
--- a/docs/libnm-glib/tmpl/nm-object.sgml
+++ b/docs/libnm-glib/tmpl/nm-object.sgml
@@ -60,6 +60,45 @@ NMObject
+<!-- ##### STRUCT NMObject ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMObject::object-creation-failed ##### -->
+<para>
+
+</para>
+
+@nmobject: the object which received the signal.
+@arg1:
+@arg2:
+
+<!-- ##### ARG NMObject:dbus-connection ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMObject:dbus-path ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMObjectClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@object_creation_failed:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_object_get_connection ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-remote-connection.sgml b/docs/libnm-glib/tmpl/nm-remote-connection.sgml
index c00178333..baaccae44 100644
--- a/docs/libnm-glib/tmpl/nm-remote-connection.sgml
+++ b/docs/libnm-glib/tmpl/nm-remote-connection.sgml
@@ -22,6 +22,37 @@ NMRemoteConnection
<!-- ##### SECTION Image ##### -->
+<!-- ##### ENUM NMRemoteConnectionError ##### -->
+<para>
+
+</para>
+
+@NM_REMOTE_CONNECTION_ERROR_UNKNOWN:
+@NM_REMOTE_CONNECTION_ERROR_DISCONNECTED:
+
+<!-- ##### MACRO NM_REMOTE_CONNECTION_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_remote_connection_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_REMOTE_CONNECTION_UNSAVED ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_REMOTE_CONNECTION_UPDATED ##### -->
<para>
@@ -36,17 +67,70 @@ NMRemoteConnection
-<!-- ##### USER_FUNCTION NMRemoteConnectionCommitFunc ##### -->
+<!-- ##### STRUCT NMRemoteConnection ##### -->
<para>
</para>
-@connection:
-@error:
-@user_data:
+<!-- ##### SIGNAL NMRemoteConnection::removed ##### -->
+<para>
+
+</para>
+
+@nmremoteconnection: the object which received the signal.
+
+<!-- ##### SIGNAL NMRemoteConnection::updated ##### -->
+<para>
+
+</para>
+
+@nmremoteconnection: the object which received the signal.
+
+<!-- ##### SIGNAL NMRemoteConnection::visible ##### -->
+<para>
+
+</para>
+
+@nmremoteconnection: the object which received the signal.
+@arg1:
+
+<!-- ##### ARG NMRemoteConnection:bus ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMRemoteConnection:dbus-connection ##### -->
+<para>
+
+</para>
-<!-- ##### USER_FUNCTION NMRemoteConnectionDeleteFunc ##### -->
+<!-- ##### ARG NMRemoteConnection:dbus-path ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMRemoteConnection:unsaved ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMRemoteConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent_class:
+@updated:
+@removed:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
+<!-- ##### USER_FUNCTION NMRemoteConnectionResultFunc ##### -->
<para>
</para>
@@ -56,6 +140,18 @@ NMRemoteConnection
@user_data:
+<!-- ##### TYPEDEF NMRemoteConnectionCommitFunc ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF NMRemoteConnectionDeleteFunc ##### -->
+<para>
+
+</para>
+
+
<!-- ##### USER_FUNCTION NMRemoteConnectionGetSecretsFunc ##### -->
<para>
@@ -87,6 +183,26 @@ NMRemoteConnection
@user_data:
+<!-- ##### FUNCTION nm_remote_connection_commit_changes_unsaved ##### -->
+<para>
+
+</para>
+
+@connection:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_remote_connection_save ##### -->
+<para>
+
+</para>
+
+@connection:
+@callback:
+@user_data:
+
+
<!-- ##### FUNCTION nm_remote_connection_delete ##### -->
<para>
@@ -108,3 +224,12 @@ NMRemoteConnection
@user_data:
+<!-- ##### FUNCTION nm_remote_connection_get_unsaved ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
diff --git a/docs/libnm-glib/tmpl/nm-remote-settings.sgml b/docs/libnm-glib/tmpl/nm-remote-settings.sgml
index 2f0ff5c8e..5b129a83b 100644
--- a/docs/libnm-glib/tmpl/nm-remote-settings.sgml
+++ b/docs/libnm-glib/tmpl/nm-remote-settings.sgml
@@ -30,6 +30,7 @@ NMRemoteSettings
@NM_REMOTE_SETTINGS_ERROR_UNKNOWN:
@NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED:
@NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE:
+@NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE:
<!-- ##### MACRO NM_REMOTE_SETTINGS_ERROR ##### -->
<para>
@@ -100,6 +101,17 @@ NMRemoteSettings
@user_data:
+<!-- ##### USER_FUNCTION NMRemoteSettingsLoadConnectionsFunc ##### -->
+<para>
+
+</para>
+
+@settings:
+@failures:
+@error:
+@user_data:
+
+
<!-- ##### USER_FUNCTION NMRemoteSettingsSaveHostnameFunc ##### -->
<para>
@@ -110,6 +122,62 @@ NMRemoteSettings
@user_data:
+<!-- ##### STRUCT NMRemoteSettings ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMRemoteSettings::connections-read ##### -->
+<para>
+
+</para>
+
+@nmremotesettings: the object which received the signal.
+
+<!-- ##### SIGNAL NMRemoteSettings::new-connection ##### -->
+<para>
+
+</para>
+
+@nmremotesettings: the object which received the signal.
+@arg1:
+
+<!-- ##### ARG NMRemoteSettings:bus ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMRemoteSettings:can-modify ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMRemoteSettings:hostname ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMRemoteSettings:service-running ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMRemoteSettingsClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@new_connection:
+@connections_read:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_remote_settings_new ##### -->
<para>
@@ -149,6 +217,16 @@ NMRemoteSettings
@Returns:
+<!-- ##### FUNCTION nm_remote_settings_get_connection_by_id ##### -->
+<para>
+
+</para>
+
+@settings:
+@id:
+@Returns:
+
+
<!-- ##### FUNCTION nm_remote_settings_get_connection_by_path ##### -->
<para>
@@ -181,6 +259,40 @@ NMRemoteSettings
@Returns:
+<!-- ##### FUNCTION nm_remote_settings_add_connection_unsaved ##### -->
+<para>
+
+</para>
+
+@settings:
+@connection:
+@callback:
+@user_data:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_settings_load_connections ##### -->
+<para>
+
+</para>
+
+@settings:
+@filenames:
+@failures:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_settings_reload_connections ##### -->
+<para>
+
+</para>
+
+@settings:
+@error:
+@Returns:
+
+
<!-- ##### FUNCTION nm_remote_settings_save_hostname ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-secret-agent.sgml b/docs/libnm-glib/tmpl/nm-secret-agent.sgml
index eb37ab5c7..a6f592c32 100644
--- a/docs/libnm-glib/tmpl/nm-secret-agent.sgml
+++ b/docs/libnm-glib/tmpl/nm-secret-agent.sgml
@@ -50,6 +50,15 @@ NMSecretAgent
@NM_SECRET_AGENT_ERROR_INTERNAL_ERROR:
@NM_SECRET_AGENT_ERROR_NO_SECRETS:
+<!-- ##### ENUM NMSecretAgentCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_SECRET_AGENT_CAPABILITY_NONE:
+@NM_SECRET_AGENT_CAPABILITY_VPN_HINTS:
+@NM_SECRET_AGENT_CAPABILITY_LAST:
+
<!-- ##### ENUM NMSecretAgentGetSecretsFlags ##### -->
<para>
@@ -81,6 +90,13 @@ NMSecretAgent
+<!-- ##### MACRO NM_SECRET_AGENT_CAPABILITIES ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_SECRET_AGENT_REGISTRATION_RESULT ##### -->
<para>
@@ -88,6 +104,40 @@ NMSecretAgent
+<!-- ##### STRUCT NMSecretAgent ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMSecretAgent::registration-result ##### -->
+<para>
+
+</para>
+
+@nmsecretagent: the object which received the signal.
+@arg1:
+
+<!-- ##### ARG NMSecretAgent:auto-register ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSecretAgent:capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSecretAgent:identifier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSecretAgent:registered ##### -->
+<para>
+
+</para>
+
<!-- ##### USER_FUNCTION NMSecretAgentGetSecretsFunc ##### -->
<para>
@@ -122,6 +172,24 @@ NMSecretAgent
@user_data:
+<!-- ##### STRUCT NMSecretAgentClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@get_secrets:
+@cancel_get_secrets:
+@save_secrets:
+@delete_secrets:
+@registration_result:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_secret_agent_register ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-vpn-connection.sgml b/docs/libnm-glib/tmpl/nm-vpn-connection.sgml
index 39d5ecc10..c20f145d6 100644
--- a/docs/libnm-glib/tmpl/nm-vpn-connection.sgml
+++ b/docs/libnm-glib/tmpl/nm-vpn-connection.sgml
@@ -36,6 +36,45 @@ NMVPNConnection
+<!-- ##### STRUCT NMVPNConnection ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMVPNConnection::vpn-state-changed ##### -->
+<para>
+
+</para>
+
+@nmvpnconnection: the object which received the signal.
+@arg1:
+@arg2:
+
+<!-- ##### ARG NMVPNConnection:banner ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMVPNConnection:vpn-state ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMVPNConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@vpn_state_changed:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_vpn_connection_new ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-vpn-plugin-ui-interface.sgml b/docs/libnm-glib/tmpl/nm-vpn-plugin-ui-interface.sgml
index 4aae6d51a..9f33e6e30 100644
--- a/docs/libnm-glib/tmpl/nm-vpn-plugin-ui-interface.sgml
+++ b/docs/libnm-glib/tmpl/nm-vpn-plugin-ui-interface.sgml
@@ -1,5 +1,5 @@
<!-- ##### SECTION Title ##### -->
-NMVpnPluginUiWidget
+NMVpnPluginUi
<!-- ##### SECTION Short_Description ##### -->
@@ -76,10 +76,30 @@ NMVpnPluginUiWidget
</para>
+@NM_VPN_PLUGIN_UI_INTERFACE_PROP_FIRST:
@NM_VPN_PLUGIN_UI_INTERFACE_PROP_NAME:
@NM_VPN_PLUGIN_UI_INTERFACE_PROP_DESC:
@NM_VPN_PLUGIN_UI_INTERFACE_PROP_SERVICE:
+<!-- ##### STRUCT NMVpnPluginUiInterface ##### -->
+<para>
+
+</para>
+
+@g_iface:
+@ui_factory:
+@get_capabilities:
+@import_from_file:
+@export_to_file:
+@get_suggested_name:
+@delete_connection:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_vpn_plugin_ui_interface_ui_factory ##### -->
<para>
@@ -144,6 +164,17 @@ NMVpnPluginUiWidget
@Returns:
+<!-- ##### STRUCT NMVpnPluginUiWidgetInterface ##### -->
+<para>
+
+</para>
+
+@g_iface:
+@get_widget:
+@update_connection:
+@save_secrets:
+@changed:
+
<!-- ##### FUNCTION nm_vpn_plugin_ui_widget_interface_get_widget ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-vpn-plugin.sgml b/docs/libnm-glib/tmpl/nm-vpn-plugin.sgml
index 2c0fd8eed..462514828 100644
--- a/docs/libnm-glib/tmpl/nm-vpn-plugin.sgml
+++ b/docs/libnm-glib/tmpl/nm-vpn-plugin.sgml
@@ -50,6 +50,35 @@ NMVPNPlugin
@NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS:
@NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED:
@NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID:
+@NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED:
+
+<!-- ##### STRUCT NMVPNPlugin ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### STRUCT NMVPNPluginClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@connect:
+@need_secrets:
+@disconnect:
+@state_changed:
+@ip4_config:
+@login_banner:
+@failure:
+@quit:
+@config:
+@ip6_config:
+@new_secrets:
+@connect_interactive:
+@_reserved1:
+@_reserved2:
<!-- ##### FUNCTION nm_vpn_plugin_error_quark ##### -->
<para>
@@ -87,6 +116,16 @@ NMVPNPlugin
@state:
+<!-- ##### FUNCTION nm_vpn_plugin_secrets_required ##### -->
+<para>
+
+</para>
+
+@plugin:
+@message:
+@hints:
+
+
<!-- ##### FUNCTION nm_vpn_plugin_set_login_banner ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-wimax-nsp.sgml b/docs/libnm-glib/tmpl/nm-wimax-nsp.sgml
index 8add56d43..f270a1d2d 100644
--- a/docs/libnm-glib/tmpl/nm-wimax-nsp.sgml
+++ b/docs/libnm-glib/tmpl/nm-wimax-nsp.sgml
@@ -53,6 +53,40 @@ NMWimaxNsp
@NM_WIMAX_NSP_NETWORK_TYPE_PARTNER:
@NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER:
+<!-- ##### STRUCT NMWimaxNsp ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMWimaxNsp:name ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMWimaxNsp:network-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMWimaxNsp:signal-quality ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMWimaxNspClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+@_reserved5:
+@_reserved6:
+
<!-- ##### FUNCTION nm_wimax_nsp_new ##### -->
<para>
diff --git a/docs/libnm-glib/version.xml b/docs/libnm-glib/version.xml
index dd62f24f0..82e28fcb1 100644
--- a/docs/libnm-glib/version.xml
+++ b/docs/libnm-glib/version.xml
@@ -1 +1 @@
-0.9.8.10
+0.9.10.0
diff --git a/docs/libnm-util/Makefile.am b/docs/libnm-util/Makefile.am
index 8b8b5aa14..45c746d97 100644
--- a/docs/libnm-util/Makefile.am
+++ b/docs/libnm-util/Makefile.am
@@ -33,7 +33,9 @@ IGNORE_HFILES= \
crypto.h \
nm-setting-template.h \
nm-utils-private.h \
- nm-param-spec-specialized.h
+ nm-setting-private.h \
+ nm-param-spec-specialized.h \
+ nm-test-utils.h
# Images to copy into HTML directory.
HTML_IMAGES =
@@ -50,6 +52,7 @@ extra_files =
GTKDOC_CFLAGS = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
diff --git a/docs/libnm-util/Makefile.in b/docs/libnm-util/Makefile.in
index ded02ca95..7079dd353 100644
--- a/docs/libnm-util/Makefile.in
+++ b/docs/libnm-util/Makefile.in
@@ -87,7 +87,8 @@ DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(srcdir)/version.xml.in
subdir = docs/libnm-util
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -151,12 +152,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -181,7 +185,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -226,12 +229,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -248,6 +255,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -275,11 +284,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -294,6 +308,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -356,6 +371,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -366,6 +382,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
AUTOMAKE_OPTIONS = 1.6
# The name of the module
@@ -400,7 +417,9 @@ IGNORE_HFILES = \
crypto.h \
nm-setting-template.h \
nm-utils-private.h \
- nm-param-spec-specialized.h
+ nm-setting-private.h \
+ nm-param-spec-specialized.h \
+ nm-test-utils.h
# Images to copy into HTML directory.
@@ -417,6 +436,7 @@ extra_files =
GTKDOC_CFLAGS = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
@@ -464,12 +484,12 @@ REPORT_FILES = \
$(DOC_MODULE)-unused.txt
CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) \
- gtkdoc-check.test libnm-util-sections.txt \
- libnm-util-overrides.txt html/* tmpl/* xml/*
-@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
-@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
-@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
-@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+ libnm-util-sections.txt libnm-util-overrides.txt html/* tmpl/* \
+ xml/*
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
#### setup ####
GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_$(V))
@@ -590,7 +610,6 @@ distdir: $(DISTFILES)
dist-hook
check-am: all-am
check: check-am
-@ENABLE_GTK_DOC_FALSE@all-local:
all-am: Makefile all-local
installdirs:
install: install-am
@@ -708,15 +727,8 @@ uninstall-am: uninstall-local
uninstall-am uninstall-local
-gtkdoc-check.test: Makefile
- $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
- echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
- chmod +x $@
-
-all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
-.PHONY: all-gtk-doc
-
-@ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc
+@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+@ENABLE_GTK_DOC_FALSE@all-local:
docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
@@ -727,19 +739,17 @@ setup-build.stamp:
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
- destdir=`dirname $(abs_builddir)/$$file` ;\
- test -d "$$destdir" || mkdir -p "$$destdir"; \
test -f $(abs_srcdir)/$$file && \
- cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
test -d $(abs_srcdir)/tmpl && \
- { cp -pR $(abs_srcdir)/tmpl $(abs_builddir)/; \
+ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \
chmod -R u+w $(abs_builddir)/tmpl; } \
fi
$(AM_V_at)touch setup-build.stamp
-scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
$(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
@@ -769,7 +779,7 @@ tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DO
$(GTK_DOC_V_TMPL)gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
$(AM_V_at)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
if test -w $(abs_srcdir) ; then \
- cp -pR $(abs_builddir)/tmpl $(abs_srcdir)/; \
+ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \
fi \
fi
$(AM_V_at)touch tmpl-build.stamp
@@ -781,7 +791,7 @@ $(srcdir)/tmpl/*.sgml:
@true
sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
- -$(GTK_DOC_V_XML)chmod -R u+w $(srcdir) && _source_dir='' ; \
+ $(GTK_DOC_V_XML)-chmod -R u+w $(srcdir) && _source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
@@ -843,9 +853,6 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
clean-local:
@rm -f *~ *.bak
@rm -rf .libs
- @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
- rm -f $(DOC_MODULE).types; \
- fi
distclean-local:
@rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
@@ -891,14 +898,12 @@ uninstall-local:
#
# Require gtk-doc when making dist
#
-@HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
-@HAVE_GTK_DOC_FALSE@dist-check-gtkdoc:
-@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc is needed to run 'make dist'. ***"
-@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc was not found when 'configure' ran. ***"
-@HAVE_GTK_DOC_FALSE@ @echo "*** please install gtk-doc and rerun 'configure'. ***"
-@HAVE_GTK_DOC_FALSE@ @false
-
-dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
@mkdir $(distdir)/tmpl
@mkdir $(distdir)/html
@-cp ./tmpl/*.sgml $(distdir)/tmpl
diff --git a/docs/libnm-util/html/NMConnection.html b/docs/libnm-util/html/NMConnection.html
index d764706ae..ef0d76b91 100644
--- a/docs/libnm-util/html/NMConnection.html
+++ b/docs/libnm-util/html/NMConnection.html
@@ -2,29 +2,36 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMConnection</title>
+<title>NMConnection</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="ch01.html" title="libnm-util API Reference">
<link rel="next" href="NMSetting.html" title="NMSetting">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMConnection.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMConnection.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMConnection.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> 
- <a href="#NMConnection.signals" class="shortcut">Signals</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="ch01.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSetting.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSetting.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMConnection.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMConnection.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMConnection"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,2216 +39,2029 @@
<h2><span class="refentrytitle"><a name="NMConnection.top_of_page"></a>NMConnection</span></h2>
<p>NMConnection — Describes a connection to specific network or provider</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMConnection.synopsis"></a><h2>Synopsis</h2>
+<a name="NMConnectionError"></a><pre class="synopsis">
+#include &lt;nm-connection.h&gt;
+
+#define <a class="link" href="NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS" title="NM_CONNECTION_SECRETS_UPDATED">NM_CONNECTION_SECRETS_UPDATED</a>
+#define <a class="link" href="NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS" title="NM_CONNECTION_SECRETS_CLEARED">NM_CONNECTION_SECRETS_CLEARED</a>
+#define <a class="link" href="NMConnection.html#NM-CONNECTION-CHANGED:CAPS" title="NM_CONNECTION_CHANGED">NM_CONNECTION_CHANGED</a>
+#define <a class="link" href="NMConnection.html#NM-CONNECTION-PATH:CAPS" title="NM_CONNECTION_PATH">NM_CONNECTION_PATH</a>
+enum <a class="link" href="NMConnection.html#NMConnectionError-enum" title="enum NMConnectionError">NMConnectionError</a>;
+#define <a class="link" href="NMConnection.html#NM-CONNECTION-ERROR:CAPS" title="NM_CONNECTION_ERROR">NM_CONNECTION_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMConnection.html#nm-connection-error-quark" title="nm_connection_error_quark ()">nm_connection_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+ <a class="link" href="NMConnection.html#NMConnection-struct" title="NMConnection">NMConnection</a>;
+ <a class="link" href="NMConnection.html#NMConnectionClass" title="NMConnectionClass">NMConnectionClass</a>;
+<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-new" title="nm_connection_new ()">nm_connection_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-new-from-hash" title="nm_connection_new_from_hash ()">nm_connection_new_from_hash</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-duplicate" title="nm_connection_duplicate ()">nm_connection_duplicate</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMConnection.html#nm-connection-create-setting" title="nm_connection_create_setting ()">nm_connection_create_setting</a> (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()">nm_connection_get_setting_by_name</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *new_settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-replace-settings-from-connection" title="nm_connection_replace_settings_from_connection ()">nm_connection_replace_settings_from_connection</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *new_connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_settings</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **hints</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()">nm_connection_clear_secrets_with_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-virtual-iface-name" title="nm_connection_get_virtual_iface_name ()">nm_connection_get_virtual_iface_name</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-for-each-setting-value" title="nm_connection_for_each_setting_value ()">nm_connection_for_each_setting_value</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()">nm_connection_to_hash</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="NMConnection.html#nm-connection-lookup-setting-type" title="nm_connection_lookup_setting_type ()">nm_connection_lookup_setting_type</a> (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="NMConnection.html#nm-connection-lookup-setting-type-by-quark" title="nm_connection_lookup_setting_type_by_quark ()">nm_connection_lookup_setting_type_by_quark</a>
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> error_quark</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-connection-type" title="nm_connection_get_connection_type ()">nm_connection_get_connection_type</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-virtual-device-description" title="nm_connection_get_virtual_device_description ()">nm_connection_get_virtual_device_description</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="returnvalue">NMSetting8021x</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-802-1x" title="nm_connection_get_setting_802_1x ()">nm_connection_get_setting_802_1x</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="returnvalue">NMSettingBluetooth</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-bluetooth" title="nm_connection_get_setting_bluetooth ()">nm_connection_get_setting_bluetooth</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="returnvalue">NMSettingBond</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-bond" title="nm_connection_get_setting_bond ()">nm_connection_get_setting_bond</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="returnvalue">NMSettingTeam</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-team" title="nm_connection_get_setting_team ()">nm_connection_get_setting_team</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="returnvalue">NMSettingTeamPort</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-team-port" title="nm_connection_get_setting_team_port ()">nm_connection_get_setting_team_port</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="returnvalue">NMSettingBridge</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-bridge" title="nm_connection_get_setting_bridge ()">nm_connection_get_setting_bridge</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="returnvalue">NMSettingBridgePort</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-bridge-port" title="nm_connection_get_setting_bridge_port ()">nm_connection_get_setting_bridge_port</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="returnvalue">NMSettingCdma</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-cdma" title="nm_connection_get_setting_cdma ()">nm_connection_get_setting_cdma</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="returnvalue">NMSettingConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-connection" title="nm_connection_get_setting_connection ()">nm_connection_get_setting_connection</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="returnvalue">NMSettingDcb</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-dcb" title="nm_connection_get_setting_dcb ()">nm_connection_get_setting_dcb</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="returnvalue">NMSettingGeneric</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-generic" title="nm_connection_get_setting_generic ()">nm_connection_get_setting_generic</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="returnvalue">NMSettingGsm</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-gsm" title="nm_connection_get_setting_gsm ()">nm_connection_get_setting_gsm</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="returnvalue">NMSettingInfiniband</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-infiniband" title="nm_connection_get_setting_infiniband ()">nm_connection_get_setting_infiniband</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="returnvalue">NMSettingIP4Config</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-ip4-config" title="nm_connection_get_setting_ip4_config ()">nm_connection_get_setting_ip4_config</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="returnvalue">NMSettingIP6Config</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-ip6-config" title="nm_connection_get_setting_ip6_config ()">nm_connection_get_setting_ip6_config</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="returnvalue">NMSettingOlpcMesh</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-olpc-mesh" title="nm_connection_get_setting_olpc_mesh ()">nm_connection_get_setting_olpc_mesh</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="returnvalue">NMSettingPPP</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-ppp" title="nm_connection_get_setting_ppp ()">nm_connection_get_setting_ppp</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="returnvalue">NMSettingPPPOE</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-pppoe" title="nm_connection_get_setting_pppoe ()">nm_connection_get_setting_pppoe</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="returnvalue">NMSettingSerial</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-serial" title="nm_connection_get_setting_serial ()">nm_connection_get_setting_serial</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="returnvalue">NMSettingVPN</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-vpn" title="nm_connection_get_setting_vpn ()">nm_connection_get_setting_vpn</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="returnvalue">NMSettingWimax</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wimax" title="nm_connection_get_setting_wimax ()">nm_connection_get_setting_wimax</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="returnvalue">NMSettingAdsl</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-adsl" title="nm_connection_get_setting_adsl ()">nm_connection_get_setting_adsl</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="returnvalue">NMSettingWired</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wired" title="nm_connection_get_setting_wired ()">nm_connection_get_setting_wired</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="returnvalue">NMSettingWireless</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wireless" title="nm_connection_get_setting_wireless ()">nm_connection_get_setting_wireless</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="returnvalue">NMSettingWirelessSecurity</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wireless-security" title="nm_connection_get_setting_wireless_security ()">nm_connection_get_setting_wireless_security</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="returnvalue">NMSettingVlan</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-vlan" title="nm_connection_get_setting_vlan ()">nm_connection_get_setting_vlan</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMConnectionError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----NMConnection
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMConnection.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMConnection.html#NMConnection--path" title='The "path" property'>path</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMConnection.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMConnection.html#NMConnection-changed" title='The "changed" signal'>changed</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMConnection.html#NMConnection-secrets-cleared" title='The "secrets-cleared" signal'>secrets-cleared</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+ "<a class="link" href="NMConnection.html#NMConnection-secrets-updated" title='The "secrets-updated" signal'>secrets-updated</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
<div class="refsect1">
-<a name="NMConnection.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMConnection.description"></a><h2>Description</h2>
+<p>
+An <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> describes all the settings and configuration values that
+are necessary to configure network devices for operation on a specific
+network. Connections are the fundamental operating object for
+NetworkManager; no device is connected without a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>, or
+disconnected without having been connected with a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<p>
+Each <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> contains a list of <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects usually referenced
+by name (using <a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()"><code class="function">nm_connection_get_setting_by_name()</code></a>) or by type (with
+<a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()"><code class="function">nm_connection_get_setting()</code></a>). The settings describe the actual parameters
+with which the network devices are configured, including device-specific
+parameters (MTU, SSID, APN, channel, rate, etc) and IP-level parameters
+(addresses, routes, addressing methods, etc).
+</p>
+</div>
+<div class="refsect1">
+<a name="NMConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-CONNECTION-SECRETS-UPDATED:CAPS"></a><h3>NM_CONNECTION_SECRETS_UPDATED</h3>
+<pre class="programlisting">#define NM_CONNECTION_SECRETS_UPDATED "secrets-updated"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CONNECTION-SECRETS-CLEARED:CAPS"></a><h3>NM_CONNECTION_SECRETS_CLEARED</h3>
+<pre class="programlisting">#define NM_CONNECTION_SECRETS_CLEARED "secrets-cleared"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CONNECTION-CHANGED:CAPS"></a><h3>NM_CONNECTION_CHANGED</h3>
+<pre class="programlisting">#define NM_CONNECTION_CHANGED "changed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CONNECTION-PATH:CAPS"></a><h3>NM_CONNECTION_PATH</h3>
+<pre class="programlisting">#define NM_CONNECTION_PATH "path"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnectionError-enum"></a><h3>enum NMConnectionError</h3>
+<pre class="programlisting">typedef enum {
+ NM_CONNECTION_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, /*&lt; nick=ConnectionSettingNotFound &gt;*/
+ NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, /*&lt; nick=ConnectionTypeInvalid &gt;*/
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND /*&lt; nick=SettingNotFound &gt;*/
+} NMConnectionError;
+</pre>
+<p>
+Describes errors that may result from operations involving a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-error-quark" title="nm_connection_error_quark ()">nm_connection_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-new" title="nm_connection_new ()">nm_connection_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-new-from-hash" title="nm_connection_new_from_hash ()">nm_connection_new_from_hash</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-duplicate" title="nm_connection_duplicate ()">nm_connection_duplicate</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-create-setting" title="nm_connection_create_setting ()">nm_connection_create_setting</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()">nm_connection_get_setting_by_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()">nm_connection_clear_secrets_with_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-virtual-iface-name" title="nm_connection_get_virtual_iface_name ()">nm_connection_get_virtual_iface_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-for-each-setting-value" title="nm_connection_for_each_setting_value ()">nm_connection_for_each_setting_value</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()">nm_connection_to_hash</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type" title="nm_connection_lookup_setting_type ()">nm_connection_lookup_setting_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type-by-quark" title="nm_connection_lookup_setting_type_by_quark ()">nm_connection_lookup_setting_type_by_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="returnvalue">NMSetting8021x</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-802-1x" title="nm_connection_get_setting_802_1x ()">nm_connection_get_setting_802_1x</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="returnvalue">NMSettingBluetooth</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bluetooth" title="nm_connection_get_setting_bluetooth ()">nm_connection_get_setting_bluetooth</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="returnvalue">NMSettingBond</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bond" title="nm_connection_get_setting_bond ()">nm_connection_get_setting_bond</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="returnvalue">NMSettingBridge</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bridge" title="nm_connection_get_setting_bridge ()">nm_connection_get_setting_bridge</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="returnvalue">NMSettingBridgePort</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bridge-port" title="nm_connection_get_setting_bridge_port ()">nm_connection_get_setting_bridge_port</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="returnvalue">NMSettingCdma</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-cdma" title="nm_connection_get_setting_cdma ()">nm_connection_get_setting_cdma</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="returnvalue">NMSettingConnection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-connection" title="nm_connection_get_setting_connection ()">nm_connection_get_setting_connection</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="returnvalue">NMSettingGsm</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-gsm" title="nm_connection_get_setting_gsm ()">nm_connection_get_setting_gsm</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="returnvalue">NMSettingInfiniband</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-infiniband" title="nm_connection_get_setting_infiniband ()">nm_connection_get_setting_infiniband</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="returnvalue">NMSettingIP4Config</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-ip4-config" title="nm_connection_get_setting_ip4_config ()">nm_connection_get_setting_ip4_config</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="returnvalue">NMSettingIP6Config</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-ip6-config" title="nm_connection_get_setting_ip6_config ()">nm_connection_get_setting_ip6_config</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="returnvalue">NMSettingOlpcMesh</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-olpc-mesh" title="nm_connection_get_setting_olpc_mesh ()">nm_connection_get_setting_olpc_mesh</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="returnvalue">NMSettingPPP</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-ppp" title="nm_connection_get_setting_ppp ()">nm_connection_get_setting_ppp</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="returnvalue">NMSettingPPPOE</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-pppoe" title="nm_connection_get_setting_pppoe ()">nm_connection_get_setting_pppoe</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="returnvalue">NMSettingSerial</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-serial" title="nm_connection_get_setting_serial ()">nm_connection_get_setting_serial</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="returnvalue">NMSettingVPN</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-vpn" title="nm_connection_get_setting_vpn ()">nm_connection_get_setting_vpn</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="returnvalue">NMSettingWimax</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wimax" title="nm_connection_get_setting_wimax ()">nm_connection_get_setting_wimax</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="returnvalue">NMSettingAdsl</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-adsl" title="nm_connection_get_setting_adsl ()">nm_connection_get_setting_adsl</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="returnvalue">NMSettingWired</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wired" title="nm_connection_get_setting_wired ()">nm_connection_get_setting_wired</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CONNECTION-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="returnvalue">NMSettingWireless</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless" title="nm_connection_get_setting_wireless ()">nm_connection_get_setting_wireless</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND</code></span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object
+ did not contain the required <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object, which must be
+ present for all connections
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="returnvalue">NMSettingWirelessSecurity</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless-security" title="nm_connection_get_setting_wireless_security ()">nm_connection_get_setting_wireless_security</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID</code></span></p></td>
+<td>the 'type' property of the
+ 'connection' setting did not point to a valid connection base type; ie
+ it was not a hardware-related setting like <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> or
+ <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>.
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="returnvalue">NMSettingVlan</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMConnection.html#nm-connection-get-setting-vlan" title="nm_connection_get_setting_vlan ()">nm_connection_get_setting_vlan</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_SETTING_NOT_FOUND</code></span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object
+ did not contain the specified <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMConnection.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-CONNECTION-ERROR:CAPS"></a><h3>NM_CONNECTION_ERROR</h3>
+<pre class="programlisting">#define NM_CONNECTION_ERROR nm_connection_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-error-quark"></a><h3>nm_connection_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_connection_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMConnection.html#NMConnection--path" title="The “path†property">path</a></td>
-<td class="property_flags">Read / Write / Construct</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMConnection.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NMConnection-struct"></a><h3>NMConnection</h3>
+<pre class="programlisting">typedef struct _NMConnection NMConnection;</pre>
+<p>
+The NMConnection struct contains only private data.
+It should only be accessed through the functions described below.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnectionClass"></a><h3>NMConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* Signals */
+ void (*secrets_updated) (NMConnection *connection, const char * setting);
+} NMConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-new"></a><h3>nm_connection_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * nm_connection_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object with no <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="signals_return">
-<col width="300px" class="signals_name">
-<col width="200px" class="signals_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMConnection.html#NMConnection-secrets-cleared" title="The “secrets-cleared†signal">secrets-cleared</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr>
-<tr>
-<td class="signal_type"><span class="returnvalue">void</span></td>
-<td class="signal_name"><a class="link" href="NMConnection.html#NMConnection-secrets-updated" title="The “secrets-updated†signal">secrets-updated</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMConnection.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-connection-new-from-hash"></a><h3>nm_connection_new_from_hash ()</h3>
+<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * nm_connection_new_from_hash (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> from a hash table describing the connection. See
+<a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a> for a description of the expected hash table.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMConnection.html#NMConnectionError" title="enum NMConnectionError">NMConnectionError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMConnection.html#NM-CONNECTION-ERROR:CAPS" title="NM_CONNECTION_ERROR">NM_CONNECTION_ERROR</a></td>
+<td><p><span class="term"><em class="parameter"><code>hash</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing
+the connection. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMConnection.html#NM-CONNECTION-PATH:CAPS" title="NM_CONNECTION_PATH">NM_CONNECTION_PATH</a></td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
</tr>
<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="NMConnection.html#NMConnection-struct" title="NMConnection">NMConnection</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object, populated with settings created
+from the values in the hash table, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the connection failed to
+validate</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMConnectionError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> NMConnection
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMConnection.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-connection.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMConnection.description"></a><h2>Description</h2>
-<p>An <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> describes all the settings and configuration values that
-are necessary to configure network devices for operation on a specific
-network. Connections are the fundamental operating object for
-NetworkManager; no device is connected without a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>, or
-disconnected without having been connected with a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.</p>
-<p>Each <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> contains a list of <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects usually referenced
-by name (using <a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()"><code class="function">nm_connection_get_setting_by_name()</code></a>) or by type (with
-<a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()"><code class="function">nm_connection_get_setting()</code></a>). The settings describe the actual parameters
-with which the network devices are configured, including device-specific
-parameters (MTU, SSID, APN, channel, rate, etc) and IP-level parameters
-(addresses, routes, addressing methods, etc).</p>
-</div>
-<div class="refsect1">
-<a name="NMConnection.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-connection-error-quark"></a><h3>nm_connection_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_connection_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-connection-new"></a><h3>nm_connection_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> *
-nm_connection_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object with no <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-new-from-hash"></a><h3>nm_connection_new_from_hash ()</h3>
-<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> *
-nm_connection_new_from_hash (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> from a hash table describing the connection. See
-<a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a> for a description of the expected hash table.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-duplicate"></a><h3>nm_connection_duplicate ()</h3>
+<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * nm_connection_duplicate (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Duplicates a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>hash</p></td>
-<td class="parameter_description"><p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing
-the connection. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span></td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to duplicate</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on unsuccessful return, an error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> containing the same settings and properties
+as the source <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.4.6"></a><h4>Returns</h4>
-<p> the new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object, populated with settings created
-from the values in the hash table, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the connection failed to
-validate</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-duplicate"></a><h3>nm_connection_duplicate ()</h3>
-<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> *
-nm_connection_duplicate (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Duplicates a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-create-setting"></a><h3>nm_connection_create_setting ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_connection_create_setting (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Create a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object of the desired type, given a setting name.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to duplicate</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>a setting name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new setting object, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the setting name was unknown. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.5.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> containing the same settings and properties
-as the source <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-create-setting"></a><h3>nm_connection_create_setting ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_connection_create_setting (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
-<p>Create a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object of the desired type, given a setting name.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-add-setting"></a><h3>nm_connection_add_setting ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_add_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
+<p>
+Adds a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to the connection, replacing any previous <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> of the
+same name which has previously been added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. The
+connection takes ownership of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object and does not increase
+the setting object's reference count.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>a setting name</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to add to the connection object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.6.6"></a><h4>Returns</h4>
-<p> the new setting object, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the setting name was unknown. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-add-setting"></a><h3>nm_connection_add_setting ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_connection_add_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
-<p>Adds a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to the connection, replacing any previous <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> of the
-same name which has previously been added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. The
-connection takes ownership of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object and does not increase
-the setting object's reference count.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-remove-setting"></a><h3>nm_connection_remove_setting ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_remove_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);</pre>
+<p>
+Removes the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> from the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. This
+operation dereferences the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p> the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to add to the connection object. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>setting_type</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting object to remove</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-remove-setting"></a><h3>nm_connection_remove_setting ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_connection_remove_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);</pre>
-<p>Removes the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> from the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. This
-operation dereferences the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting"></a><h3>nm_connection_get_setting ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_connection_get_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a>, if one has been previously added
+to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_type</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting object to return</td>
</tr>
<tr>
-<td class="parameter_name"><p>setting_type</p></td>
-<td class="parameter_description"><p>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting object to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if no setting of that type was previously
+added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting"></a><h3>nm_connection_get_setting ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_connection_get_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);</pre>
-<p>Gets the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a>, if one has been previously added
-to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-by-name"></a><h3>nm_connection_get_setting_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_connection_get_setting_by_name (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given name, if one has been previously added
+the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>setting_type</p></td>
-<td class="parameter_description"><p>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting object to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>a setting name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if no setting with that name was previously
+added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.9.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no setting of that type was previously
-added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-by-name"></a><h3>nm_connection_get_setting_by_name ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_connection_get_setting_by_name (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
-<p>Gets the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given name, if one has been previously added
-the the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-replace-settings"></a><h3>nm_connection_replace_settings ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_replace_settings (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *new_settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_settings</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> of settings. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>a setting name</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the settings were valid and added to the connection, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+if they were not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.10.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no setting with that name was previously
-added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-replace-settings"></a><h3>nm_connection_replace_settings ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_connection_replace_settings (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *new_settings</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.2.10.11.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-replace-settings-from-connection"></a><h3>nm_connection_replace_settings_from_connection ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_replace_settings_from_connection
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *new_connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Deep-copies the settings of <em class="parameter"><code>new_conenction</code></em> and replaces the settings of <em class="parameter"><code>connection</code></em>
+with the copied settings.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to replace the settings of <em class="parameter"><code>connection</code></em> with</td>
</tr>
<tr>
-<td class="parameter_name"><p>new_settings</p></td>
-<td class="parameter_description"><p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> of settings. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span></td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the settings were valid and added to the connection, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+if they were not</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.11.5"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the settings were valid and added to the connection, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
-if they were not</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-compare"></a><h3>nm_connection_compare ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_connection_compare (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
- <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);</pre>
-<p>Compares two <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects for similarity, with comparison behavior
-modified by a set of flags. See <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()"><code class="function">nm_setting_compare()</code></a> for a description of
-each flag's behavior.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-compare"></a><h3>nm_connection_compare ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_compare (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);</pre>
+<p>
+Compares two <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects for similarity, with comparison behavior
+modified by a set of flags. See <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()"><code class="function">nm_setting_compare()</code></a> for a description of
+each flag's behavior.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>a</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>b</p></td>
-<td class="parameter_description"><p>a second <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to compare with the first</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
+<td>a second <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to compare with the first</td>
</tr>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the comparison succeeds, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it does not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.12.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the comparison succeeds, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it does not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-diff"></a><h3>nm_connection_diff ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_connection_diff (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
- <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_settings</code></em>);</pre>
-<p>Compares two <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects for similarity, with comparison behavior
-modified by a set of flags. See <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()"><code class="function">nm_setting_compare()</code></a> for a description of
+<a name="nm-connection-diff"></a><h3>nm_connection_diff ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_diff (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_settings</code></em>);</pre>
+<p>
+Compares two <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects for similarity, with comparison behavior
+modified by a set of flags. See <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()"><code class="function">nm_setting_compare()</code></a> for a description of
each flag's behavior. If the connections differ, settings and keys within
-each setting that differ are added to the returned <em class="parameter"><code>out_settings</code></em>
- hash table.
-No values are returned, only key names.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+each setting that differ are added to the returned <em class="parameter"><code>out_settings</code></em> hash table.
+No values are returned, only key names.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>a</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>b</p></td>
-<td class="parameter_description"><p>a second <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to compare with the first</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
+<td>a second <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to compare with the first</td>
</tr>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_settings</p></td>
-<td class="parameter_description"><p> if the
+<td><p><span class="term"><em class="parameter"><code>out_settings</code></em> :</span></p></td>
+<td>if the
connections differ, on return a hash table mapping setting names to
second-level GHashTable (utf8 to guint32), which contains the key names that
-differ mapped to one or more of <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><code class="literal">NMSettingDiffResult</code></a> as a bitfield. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span></td>
+differ mapped to one or more of <a class="link" href="NMSetting.html#NMSettingDiffResult"><code class="literal">NMSettingDiffResult</code></a> as a bitfield. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connections contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do
+not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connections contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do
-not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-verify"></a><h3>nm_connection_verify ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_connection_verify (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Validates the connection and all its settings. Each setting's properties
+<a name="nm-connection-verify"></a><h3>nm_connection_verify ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_verify (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Validates the connection and all its settings. Each setting's properties
have allowed values, and some values are dependent on other values. For
-example, if a WiFi connection is security enabled, the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+example, if a Wi-Fi connection is security enabled, the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
setting object's 'security' property must contain the setting name of the
<a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object, which must also be present in the
connection for the connection to be valid. As another example, the
<a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object's 'mac-address' property must be a validly formatted
MAC address. The returned <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> contains information about which
-setting and which property failed validation, and how it failed validation.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+setting and which property failed validation, and how it failed validation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to verify</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to verify</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is valid, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.14.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is valid, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-need-secrets"></a><h3>nm_connection_need_secrets ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_connection_need_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **hints</code></em>);</pre>
-<p>Returns the name of the first setting object in the connection which would
+<a name="nm-connection-need-secrets"></a><h3>nm_connection_need_secrets ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_need_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **hints</code></em>);</pre>
+<p>
+Returns the name of the first setting object in the connection which would
need secrets to make a successful connection. The returned hints are only
intended as a guide to what secrets may be required, because in some
circumstances, there is no way to conclusively determine exactly which
-secrets are needed.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+secrets are needed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>hints</p></td>
-<td class="parameter_description"><p> the address of a pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>, initialized to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, which on
+<td><p><span class="term"><em class="parameter"><code>hints</code></em> :</span></p></td>
+<td>the address of a pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>, initialized to <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, which on
return points to an allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing the property names of
secrets of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> which may be required; the caller owns the array
and must free the array itself with <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-free"><code class="function">g_ptr_array_free()</code></a>, but not free its
-elements. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></td>
+elements. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the setting name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object which has invalid or
+missing secrets</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.15.6"></a><h4>Returns</h4>
-<p> the setting name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object which has invalid or
-missing secrets</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-clear-secrets"></a><h3>nm_connection_clear_secrets ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_connection_clear_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Clears and frees any secrets that may be stored in the connection, to avoid
-keeping secret data in memory when not needed.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-clear-secrets"></a><h3>nm_connection_clear_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_clear_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Clears and frees any secrets that may be stored in the connection, to avoid
+keeping secret data in memory when not needed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-clear-secrets-with-flags"></a><h3>nm_connection_clear_secrets_with_flags ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_connection_clear_secrets_with_flags
- (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Clears and frees secrets determined by <em class="parameter"><code>func</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-clear-secrets-with-flags"></a><h3>nm_connection_clear_secrets_with_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_clear_secrets_with_flags
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Clears and frees secrets determined by <em class="parameter"><code>func</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> function to be called to determine whether a
-specific secret should be cleared or not. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>function to be called to determine whether a
+specific secret should be cleared or not. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>caller-supplied data passed to <em class="parameter"><code>func</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-supplied data passed to <em class="parameter"><code>func</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-update-secrets"></a><h3>nm_connection_update_secrets ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_connection_update_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Update the specified setting's secrets, given a hash table of secrets
+<a name="nm-connection-update-secrets"></a><h3>nm_connection_update_secrets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_update_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Update the specified setting's secrets, given a hash table of secrets
intended for that setting (deserialized from D-Bus for example). Will also
extract the given setting's secrets hash if given a hash of hashes, as would
-be returned from <a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a>. If <em class="parameter"><code>setting_name</code></em>
- is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, expects
-a fully serialized <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> as returned by <a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a> and
-will update all secrets from all settings contained in <em class="parameter"><code>secrets</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+be returned from <a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a>. If <em class="parameter"><code>setting_name</code></em> is <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, expects
+a fully serialized <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> as returned by <a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a> and
+will update all secrets from all settings contained in <em class="parameter"><code>secrets</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the setting object name to which the secrets apply</td>
</tr>
<tr>
-<td class="parameter_name"><p>setting_name</p></td>
-<td class="parameter_description"><p>the setting object name to which the secrets apply</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>secrets</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping
+string:<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of setting property names and secrets of the given <em class="parameter"><code>setting_name</code></em>. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>secrets</p></td>
-<td class="parameter_description"><p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping
-string:<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of setting property names and secrets of the given <em class="parameter"><code>setting_name</code></em>
-. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span></td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secrets were successfully updated, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the update
+failed (tried to update secrets for a setting that doesn't exist, etc)</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.18.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secrets were successfully updated, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the update
-failed (tried to update secrets for a setting that doesn't exist, etc)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-set-path"></a><h3>nm_connection_set_path ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_connection_set_path (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
-<p>Sets the D-Bus path of the connection. This property is not serialized, and
-is only for the reference of the caller. Sets the <a class="link" href="NMConnection.html#NMConnection--path" title="The “path†property"><span class="type">“pathâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-set-path"></a><h3>nm_connection_set_path ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_set_path (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Sets the D-Bus path of the connection. This property is not serialized, and
+is only for the reference of the caller. Sets the <a class="link" href="NMConnection.html#NMConnection--path" title='The "path" property'><span class="type">"path"</span></a>
+property.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>path</p></td>
-<td class="parameter_description"><p>the D-Bus path of the connection as given by the settings service
-which provides the connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the D-Bus path of the connection as given by the settings service
+which provides the connection</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-path"></a><h3>nm_connection_get_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_connection_get_path (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Returns the connection's D-Bus path.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-path"></a><h3>nm_connection_get_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_path (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Returns the connection's D-Bus path.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the D-Bus path of the connection, previously set by a call to
+<a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()"><code class="function">nm_connection_set_path()</code></a>.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.20.6"></a><h4>Returns</h4>
-<p> the D-Bus path of the connection, previously set by a call to
-<a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()"><code class="function">nm_connection_set_path()</code></a>.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-virtual-iface-name"></a><h3>nm_connection_get_virtual_iface_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_connection_get_virtual_iface_name (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Returns the name of the virtual kernel interface which the connection
+<a name="nm-connection-get-virtual-iface-name"></a><h3>nm_connection_get_virtual_iface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_virtual_iface_name
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Returns the name of the virtual kernel interface which the connection
needs to use if specified in the settings. This function abstracts all
connection types which require this functionality. For all other
-connection types, this function will return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+connection types, this function will return <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>The <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>The <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>Name of the kernel interface or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.21.6"></a><h4>Returns</h4>
-<p> Name of the kernel interface or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-is-type"></a><h3>nm_connection_is_type ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_connection_is_type (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);</pre>
-<p>A convenience function to check if the given <em class="parameter"><code>connection</code></em>
- is a particular
-type (ie wired, wifi, ppp, etc). Checks the <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title="The “type†property"><span class="type">“typeâ€</span></a>
-property of the connection and matches that against <em class="parameter"><code>type</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-is-type"></a><h3>nm_connection_is_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_is_type (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);</pre>
+<p>
+A convenience function to check if the given <em class="parameter"><code>connection</code></em> is a particular
+type (ie wired, Wi-Fi, ppp, etc). Checks the <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'><span class="type">"type"</span></a>
+property of the connection and matches that against <em class="parameter"><code>type</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>a setting name to check the connection's type against (like
-<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SETTING_NAME"><code class="literal">NM_SETTING_WIRELESS_SETTING_NAME</code></a> or <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS" title="NM_SETTING_WIRED_SETTING_NAME"><code class="literal">NM_SETTING_WIRED_SETTING_NAME</code></a>)</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>a setting name to check the connection's type against (like
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SETTING_NAME"><code class="literal">NM_SETTING_WIRELESS_SETTING_NAME</code></a> or <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS" title="NM_SETTING_WIRED_SETTING_NAME"><code class="literal">NM_SETTING_WIRED_SETTING_NAME</code></a>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is of the given <em class="parameter"><code>type</code></em>, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.22.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is of the given <em class="parameter"><code>type</code></em>
-, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-for-each-setting-value"></a><h3>nm_connection_for_each_setting_value ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_connection_for_each_setting_value (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Iterates over the properties of each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object in the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>,
-calling the supplied user function for each property.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-for-each-setting-value"></a><h3>nm_connection_for_each_setting_value ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_for_each_setting_value
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Iterates over the properties of each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object in the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>,
+calling the supplied user function for each property.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> user-supplied function called for each setting's property. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>user-supplied function called for each setting's property. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data passed to <em class="parameter"><code>func</code></em>
-at each invocation</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data passed to <em class="parameter"><code>func</code></em> at each invocation</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-to-hash"></a><h3>nm_connection_to_hash ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-nm_connection_to_hash (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags" title="enum NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);</pre>
-<p>Converts the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing the connection,
+<a name="nm-connection-to-hash"></a><h3>nm_connection_to_hash ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * nm_connection_to_hash (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);</pre>
+<p>
+Converts the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing the connection,
suitable for marshalling over D-Bus or serializing. The hash table mapping
is string:<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> with each element in the returned hash representing
a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object. The keys are setting object names, and the values
are <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTables</span></a> mapping string:GValue, each of which represents the
-properties of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+properties of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>hash flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS"><code class="literal">NM_SETTING_HASH_FLAG_ALL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>hash flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS"><code class="literal">NM_SETTING_HASH_FLAG_ALL</code></a>
+</td>
</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.24.6"></a><h4>Returns</h4>
-<p> a new
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new
<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing the connection, its settings, and each setting's
properties. The caller owns the hash table and must unref the hash table
-with <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-unref"><code class="function">g_hash_table_unref()</code></a> when it is no longer needed. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span></p>
-</div>
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-unref"><code class="function">g_hash_table_unref()</code></a> when it is no longer needed. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-dump"></a><h3>nm_connection_dump ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_connection_dump (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>Print the connection to stdout. For debugging purposes ONLY, should NOT
+<a name="nm-connection-dump"></a><h3>nm_connection_dump ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_dump (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Print the connection to stdout. For debugging purposes ONLY, should NOT
be used for serialization of the connection or machine-parsed in any way. The
-output format is not guaranteed to be stable and may change at any time.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+output format is not guaranteed to be stable and may change at any time.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-lookup-setting-type"></a><h3>nm_connection_lookup_setting_type ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
-nm_connection_lookup_setting_type (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
-<p>Returns the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class for a given setting name.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-lookup-setting-type"></a><h3>nm_connection_lookup_setting_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> nm_connection_lookup_setting_type (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Returns the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class for a given setting name.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>a setting name</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>a setting name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.26.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-lookup-setting-type-by-quark"></a><h3>nm_connection_lookup_setting_type_by_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
-nm_connection_lookup_setting_type_by_quark
- (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> error_quark</code></em>);</pre>
-<p>Returns the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class for a given setting error quark.
-Useful for figuring out which setting a returned error is for.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.27.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-lookup-setting-type-by-quark"></a><h3>nm_connection_lookup_setting_type_by_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> nm_connection_lookup_setting_type_by_quark
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> error_quark</code></em>);</pre>
+<p>
+Returns the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class for a given setting error quark.
+Useful for figuring out which setting a returned error is for.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>error_quark</p></td>
-<td class="parameter_description"><p>a setting error quark</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error_quark</code></em> :</span></p></td>
+<td>a setting error quark</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.27.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-uuid"></a><h3>nm_connection_get_uuid ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return the UUID from the connection's <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.28.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-uuid"></a><h3>nm_connection_get_uuid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return the UUID from the connection's <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the UUID from the connection's 'connection' setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.28.6"></a><h4>Returns</h4>
-<p> the UUID from the connection's 'connection' setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-id"></a><h3>nm_connection_get_id ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_connection_get_id (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return the ID from the connection's <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.29.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-id"></a><h3>nm_connection_get_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_id (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return the ID from the connection's <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the ID from the connection's 'connection' setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.29.6"></a><h4>Returns</h4>
-<p> the ID from the connection's 'connection' setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-802-1x"></a><h3>nm_connection_get_setting_802_1x ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="returnvalue">NMSetting8021x</span></a> *
-nm_connection_get_setting_802_1x (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.30.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-connection-type"></a><h3>nm_connection_get_connection_type ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_connection_type (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return the type from the connection's <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the type from the connection's 'connection' setting</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.30.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-bluetooth"></a><h3>nm_connection_get_setting_bluetooth ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="returnvalue">NMSettingBluetooth</span></a> *
-nm_connection_get_setting_bluetooth (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.31.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-virtual-device-description"></a><h3>nm_connection_get_virtual_device_description ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_connection_get_virtual_device_description
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Returns the name that <a href="https://developer.gnome.org/libnm-glib/0.9/NMDevice.html#nm-device-disambiguate-names"><code class="function">nm_device_disambiguate_names()</code></a> would
+return for the virtual device that would be created for <em class="parameter"><code>connection</code></em>.
+Eg, "VLAN (eth1.1)".
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>an <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> for a virtual device type</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name of <em class="parameter"><code>connection</code></em>'s device,
+or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>connection</code></em> is not a virtual connection type. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.31.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-bond"></a><h3>nm_connection_get_setting_bond ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="returnvalue">NMSettingBond</span></a> *
-nm_connection_get_setting_bond (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.32.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-802-1x"></a><h3>nm_connection_get_setting_802_1x ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="returnvalue">NMSetting8021x</span></a> * nm_connection_get_setting_802_1x (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.32.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-bridge"></a><h3>nm_connection_get_setting_bridge ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="returnvalue">NMSettingBridge</span></a> *
-nm_connection_get_setting_bridge (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.33.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-bluetooth"></a><h3>nm_connection_get_setting_bluetooth ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="returnvalue">NMSettingBluetooth</span></a> * nm_connection_get_setting_bluetooth
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.33.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-bridge-port"></a><h3>nm_connection_get_setting_bridge_port ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="returnvalue">NMSettingBridgePort</span></a> *
-nm_connection_get_setting_bridge_port (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.34.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-bond"></a><h3>nm_connection_get_setting_bond ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="returnvalue">NMSettingBond</span></a> * nm_connection_get_setting_bond (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.34.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-cdma"></a><h3>nm_connection_get_setting_cdma ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="returnvalue">NMSettingCdma</span></a> *
-nm_connection_get_setting_cdma (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.35.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-team"></a><h3>nm_connection_get_setting_team ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="returnvalue">NMSettingTeam</span></a> * nm_connection_get_setting_team (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.35.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-connection"></a><h3>nm_connection_get_setting_connection ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="returnvalue">NMSettingConnection</span></a> *
-nm_connection_get_setting_connection (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.36.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-team-port"></a><h3>nm_connection_get_setting_team_port ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="returnvalue">NMSettingTeamPort</span></a> * nm_connection_get_setting_team_port (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.36.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-gsm"></a><h3>nm_connection_get_setting_gsm ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="returnvalue">NMSettingGsm</span></a> *
-nm_connection_get_setting_gsm (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.37.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-bridge"></a><h3>nm_connection_get_setting_bridge ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="returnvalue">NMSettingBridge</span></a> * nm_connection_get_setting_bridge (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.37.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-infiniband"></a><h3>nm_connection_get_setting_infiniband ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="returnvalue">NMSettingInfiniband</span></a> *
-nm_connection_get_setting_infiniband (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.38.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-bridge-port"></a><h3>nm_connection_get_setting_bridge_port ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="returnvalue">NMSettingBridgePort</span></a> * nm_connection_get_setting_bridge_port
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.38.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-ip4-config"></a><h3>nm_connection_get_setting_ip4_config ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="returnvalue">NMSettingIP4Config</span></a> *
-nm_connection_get_setting_ip4_config (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.39.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-cdma"></a><h3>nm_connection_get_setting_cdma ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="returnvalue">NMSettingCdma</span></a> * nm_connection_get_setting_cdma (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.39.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-ip6-config"></a><h3>nm_connection_get_setting_ip6_config ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="returnvalue">NMSettingIP6Config</span></a> *
-nm_connection_get_setting_ip6_config (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.40.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-connection"></a><h3>nm_connection_get_setting_connection ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="returnvalue">NMSettingConnection</span></a> * nm_connection_get_setting_connection
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.40.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-olpc-mesh"></a><h3>nm_connection_get_setting_olpc_mesh ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="returnvalue">NMSettingOlpcMesh</span></a> *
-nm_connection_get_setting_olpc_mesh (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.41.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-dcb"></a><h3>nm_connection_get_setting_dcb ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="returnvalue">NMSettingDcb</span></a> * nm_connection_get_setting_dcb (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.41.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-ppp"></a><h3>nm_connection_get_setting_ppp ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="returnvalue">NMSettingPPP</span></a> *
-nm_connection_get_setting_ppp (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.42.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-generic"></a><h3>nm_connection_get_setting_generic ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="returnvalue">NMSettingGeneric</span></a> * nm_connection_get_setting_generic (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.42.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-pppoe"></a><h3>nm_connection_get_setting_pppoe ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="returnvalue">NMSettingPPPOE</span></a> *
-nm_connection_get_setting_pppoe (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.43.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-gsm"></a><h3>nm_connection_get_setting_gsm ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="returnvalue">NMSettingGsm</span></a> * nm_connection_get_setting_gsm (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.43.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-serial"></a><h3>nm_connection_get_setting_serial ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="returnvalue">NMSettingSerial</span></a> *
-nm_connection_get_setting_serial (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.44.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-infiniband"></a><h3>nm_connection_get_setting_infiniband ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="returnvalue">NMSettingInfiniband</span></a> * nm_connection_get_setting_infiniband
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.44.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-vpn"></a><h3>nm_connection_get_setting_vpn ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="returnvalue">NMSettingVPN</span></a> *
-nm_connection_get_setting_vpn (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.45.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-ip4-config"></a><h3>nm_connection_get_setting_ip4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="returnvalue">NMSettingIP4Config</span></a> * nm_connection_get_setting_ip4_config
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.45.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-wimax"></a><h3>nm_connection_get_setting_wimax ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="returnvalue">NMSettingWimax</span></a> *
-nm_connection_get_setting_wimax (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.46.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-ip6-config"></a><h3>nm_connection_get_setting_ip6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="returnvalue">NMSettingIP6Config</span></a> * nm_connection_get_setting_ip6_config
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.46.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-adsl"></a><h3>nm_connection_get_setting_adsl ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="returnvalue">NMSettingAdsl</span></a> *
-nm_connection_get_setting_adsl (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.47.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-olpc-mesh"></a><h3>nm_connection_get_setting_olpc_mesh ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="returnvalue">NMSettingOlpcMesh</span></a> * nm_connection_get_setting_olpc_mesh (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.47.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-wired"></a><h3>nm_connection_get_setting_wired ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="returnvalue">NMSettingWired</span></a> *
-nm_connection_get_setting_wired (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.48.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-ppp"></a><h3>nm_connection_get_setting_ppp ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="returnvalue">NMSettingPPP</span></a> * nm_connection_get_setting_ppp (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.48.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-wireless"></a><h3>nm_connection_get_setting_wireless ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="returnvalue">NMSettingWireless</span></a> *
-nm_connection_get_setting_wireless (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.49.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-pppoe"></a><h3>nm_connection_get_setting_pppoe ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="returnvalue">NMSettingPPPOE</span></a> * nm_connection_get_setting_pppoe (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.49.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-wireless-security"></a><h3>nm_connection_get_setting_wireless_security ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="returnvalue">NMSettingWirelessSecurity</span></a> *
-nm_connection_get_setting_wireless_security
- (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.50.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-serial"></a><h3>nm_connection_get_setting_serial ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="returnvalue">NMSettingSerial</span></a> * nm_connection_get_setting_serial (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.50.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-connection-get-setting-vlan"></a><h3>nm_connection_get_setting_vlan ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="returnvalue">NMSettingVlan</span></a> *
-nm_connection_get_setting_vlan (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
-<p>A shortcut to return any <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> the connection might contain.</p>
-<div class="refsect3">
-<a name="id-1.2.2.10.51.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-vpn"></a><h3>nm_connection_get_setting_vpn ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="returnvalue">NMSettingVPN</span></a> * nm_connection_get_setting_vpn (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.2.10.51.6"></a><h4>Returns</h4>
-<p> an <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> if the connection contains one, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMConnection.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMConnectionError"></a><h3>enum NMConnectionError</h3>
-<p>Describes errors that may result from operations involving a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.2.11.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-connection-get-setting-wimax"></a><h3>nm_connection_get_setting_wimax ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="returnvalue">NMSettingWimax</span></a> * nm_connection_get_setting_wimax (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-CONNECTION-ERROR-UNKNOWN:CAPS"></a>NM_CONNECTION_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS"></a>NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND</p></td>
-<td class="enum_member_description">
-<p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object
- did not contain the required <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object, which must be
- present for all connections</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-adsl"></a><h3>nm_connection_get_setting_adsl ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="returnvalue">NMSettingAdsl</span></a> * nm_connection_get_setting_adsl (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS"></a>NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID</p></td>
-<td class="enum_member_description">
-<p>the 'type' property of the
- 'connection' setting did not point to a valid connection base type; ie
- it was not a hardware-related setting like <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> or
- <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>.</p>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS"></a>NM_CONNECTION_ERROR_SETTING_NOT_FOUND</p></td>
-<td class="enum_member_description">
-<p>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object
- did not contain the specified <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-wired"></a><h3>nm_connection_get_setting_wired ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="returnvalue">NMSettingWired</span></a> * nm_connection_get_setting_wired (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-CONNECTION-ERROR:CAPS"></a><h3>NM_CONNECTION_ERROR</h3>
-<pre class="programlisting">#define NM_CONNECTION_ERROR nm_connection_error_quark ()
-</pre>
+<a name="nm-connection-get-setting-wireless"></a><h3>nm_connection_get_setting_wireless ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="returnvalue">NMSettingWireless</span></a> * nm_connection_get_setting_wireless (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
+A shortcut to return any <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> the connection might contain.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-CONNECTION-PATH:CAPS"></a><h3>NM_CONNECTION_PATH</h3>
-<pre class="programlisting">#define NM_CONNECTION_PATH "path"
-</pre>
+<a name="nm-connection-get-setting-wireless-security"></a><h3>nm_connection_get_setting_wireless_security ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="returnvalue">NMSettingWirelessSecurity</span></a> * nm_connection_get_setting_wireless_security
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
+A shortcut to return any <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> the connection might contain.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMConnection-struct"></a><h3>NMConnection</h3>
-<pre class="programlisting">typedef struct _NMConnection NMConnection;</pre>
-<p>The NMConnection struct contains only private data.
-It should only be accessed through the functions described below.</p>
+<a name="nm-connection-get-setting-vlan"></a><h3>nm_connection_get_setting_vlan ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="returnvalue">NMSettingVlan</span></a> * nm_connection_get_setting_vlan (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> if the connection contains one, otherwise <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMConnection.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMConnection--path"></a><h3>The <code class="literal">“pathâ€</code> property</h3>
-<pre class="programlisting"> “path†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The connection's D-Bus path, used only by the calling process as a record
-of the D-Bus path of the connection as provided by a settings service.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMConnection--path"></a><h3>The <code class="literal">"path"</code> property</h3>
+<pre class="programlisting"> "path" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
+<p>
+The connection's D-Bus path, used only by the calling process as a record
+of the D-Bus path of the connection as provided by a settings service.
+</p>
<p>Default value: NULL</p>
</div>
</div>
<div class="refsect1">
<a name="NMConnection.signal-details"></a><h2>Signal Details</h2>
<div class="refsect2">
-<a name="NMConnection-secrets-cleared"></a><h3>The <code class="literal">“secrets-clearedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>The ::secrets-cleared signal is emitted when the secrets of a connection
-are cleared.</p>
-<div class="refsect3">
-<a name="id-1.2.2.13.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMConnection-changed"></a><h3>The <code class="literal">"changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+The ::changed signal is emitted when any property of any property
+(including secrets) of any setting of the connection is modified,
+or when settings are added or removed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the object on which the signal is emitted</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the object on which the signal is emitted</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<hr>
+<div class="refsect2">
+<a name="NMConnection-secrets-cleared"></a><h3>The <code class="literal">"secrets-cleared"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+The ::secrets-cleared signal is emitted when the secrets of a connection
+are cleared.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the object on which the signal is emitted</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMConnection-secrets-updated"></a><h3>The <code class="literal">“secrets-updatedâ€</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *setting_name,
- <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>The ::secrets-updated signal is emitted when the secrets of a setting
-have been changed.</p>
-<div class="refsect3">
-<a name="id-1.2.2.13.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMConnection-secrets-updated"></a><h3>The <code class="literal">"secrets-updated"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *setting_name,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+The ::secrets-updated signal is emitted when the secrets of a setting
+have been changed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>connection</p></td>
-<td class="parameter_description"><p>the object on which the signal is emitted</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the object on which the signal is emitted</td>
</tr>
<tr>
-<td class="parameter_name"><p>setting_name</p></td>
-<td class="parameter_description"><p>the setting name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> for which secrets were
-updated</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the setting name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> for which secrets were
+updated</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
</tr>
</tbody>
</table></div>
</div>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
-</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSetting.html b/docs/libnm-util/html/NMSetting.html
index ae62da3e8..d6e1af38d 100644
--- a/docs/libnm-util/html/NMSetting.html
+++ b/docs/libnm-util/html/NMSetting.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSetting</title>
+<title>NMSetting</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMConnection.html" title="NMConnection">
<link rel="next" href="NMSettingConnection.html" title="NMSettingConnection">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSetting.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSetting.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSetting.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMConnection.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingConnection.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSetting.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSetting.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSetting.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSetting.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSetting"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,305 +37,219 @@
<h2><span class="refentrytitle"><a name="NMSetting.top_of_page"></a>NMSetting</span></h2>
<p>NMSetting — Describes related configuration information</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSetting.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingError"></a><a name="NMSettingSecretFlags"></a><a name="NMSettingCompareFlags"></a><a name="NMSettingHashFlags"></a><a name="NMSettingDiffResult"></a><pre class="synopsis">
+#include &lt;nm-setting.h&gt;
+
+enum <a class="link" href="NMSetting.html#NMSettingError-enum" title="enum NMSettingError">NMSettingError</a>;
+#define <a class="link" href="NMSetting.html#NM-SETTING-ERROR:CAPS" title="NM_SETTING_ERROR">NM_SETTING_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSetting.html#nm-setting-error-quark" title="nm_setting_error_quark ()">nm_setting_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSetting.html#NM-SETTING-PARAM-SERIALIZE:CAPS" title="NM_SETTING_PARAM_SERIALIZE">NM_SETTING_PARAM_SERIALIZE</a>
+#define <a class="link" href="NMSetting.html#NM-SETTING-PARAM-REQUIRED:CAPS" title="NM_SETTING_PARAM_REQUIRED">NM_SETTING_PARAM_REQUIRED</a>
+#define <a class="link" href="NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS" title="NM_SETTING_PARAM_SECRET">NM_SETTING_PARAM_SECRET</a>
+#define <a class="link" href="NMSetting.html#NM-SETTING-PARAM-FUZZY-IGNORE:CAPS" title="NM_SETTING_PARAM_FUZZY_IGNORE">NM_SETTING_PARAM_FUZZY_IGNORE</a>
+#define <a class="link" href="NMSetting.html#NM-SETTING-NAME:CAPS" title="NM_SETTING_NAME">NM_SETTING_NAME</a>
+enum <a class="link" href="NMSetting.html#NMSettingSecretFlags-enum" title="enum NMSettingSecretFlags">NMSettingSecretFlags</a>;
+enum <a class="link" href="NMSetting.html#NMSettingCompareFlags-enum" title="enum NMSettingCompareFlags">NMSettingCompareFlags</a>;
+ <a class="link" href="NMSetting.html#NMSetting-struct" title="NMSetting">NMSetting</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> (<a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()">*NMSettingClearSecretsWithFlagsFn</a>) (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+ <a class="link" href="NMSetting.html#NMSettingClass" title="NMSettingClass">NMSettingClass</a>;
+<span class="returnvalue">void</span> (<a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()">*NMSettingValueIterFn</a>) (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamFlags"><span class="type">GParamFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+enum <a class="link" href="NMSetting.html#NMSettingHashFlags-enum" title="enum NMSettingHashFlags">NMSettingHashFlags</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="NMSetting.html#nm-setting-to-hash" title="nm_setting_to_hash ()">nm_setting_to_hash</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSetting.html#nm-setting-new-from-hash" title="nm_setting_new_from_hash ()">nm_setting_new_from_hash</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSetting.html#nm-setting-duplicate" title="nm_setting_duplicate ()">nm_setting_duplicate</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting.html#nm-setting-get-name" title="nm_setting_get_name ()">nm_setting_get_name</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting.html#nm-setting-verify" title="nm_setting_verify ()">nm_setting_verify</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *all_settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()">nm_setting_compare</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);
+enum <a class="link" href="NMSetting.html#NMSettingDiffResult-enum" title="enum NMSettingDiffResult">NMSettingDiffResult</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()">nm_setting_diff</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> invert_results</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **results</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()">nm_setting_enumerate_values</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="NMSetting.html#nm-setting-to-string" title="nm_setting_to_string ()">nm_setting_to_string</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting.html#nm-setting-clear-secrets" title="nm_setting_clear_secrets ()">nm_setting_clear_secrets</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting.html#nm-setting-clear-secrets-with-flags" title="nm_setting_clear_secrets_with_flags ()">nm_setting_clear_secrets_with_flags</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMSetting.html#nm-setting-need-secrets" title="nm_setting_need_secrets ()">nm_setting_need_secrets</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting.html#nm-setting-update-secrets" title="nm_setting_update_secrets ()">nm_setting_update_secrets</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting.html#nm-setting-get-secret-flags" title="nm_setting_get_secret_flags ()">nm_setting_get_secret_flags</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> *out_flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting.html#nm-setting-set-secret-flags" title="nm_setting_set_secret_flags ()">nm_setting_set_secret_flags</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting.html#nm-setting-get-virtual-iface-name" title="nm_setting_get_virtual_iface_name ()">nm_setting_get_virtual_iface_name</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSetting.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSetting.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingSecretFlags
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingCompareFlags
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----NMSetting
+ +----<a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+ +----<a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+ +----<a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+ +----<a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+ +----<a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
+ +----<a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+ +----<a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+ +----<a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+ +----<a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+ +----<a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+ +----<a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+ +----<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+ +----<a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+ +----<a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+ +----<a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+ +----<a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+ +----<a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+ +----<a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+ +----<a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+ +----<a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+ +----<a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+ +----<a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+ +----<a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+ +----<a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+ +----<a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+ +----<a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingHashFlags
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingDiffResult
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSetting.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSetting.html#NMSetting--name" title='The "name" property'>name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSetting.description"></a><h2>Description</h2>
+<p>
+Each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> contains properties that describe configuration that applies
+to a specific network layer (like IPv4 or IPv6 configuration) or device type
+(like Ethernet, or Wi-Fi). A collection of individual settings together
+make up an <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. Each property is strongly typed and usually has
+a number of allowed values. See each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass for a description
+of properties and allowed values.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSetting.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMSettingError-enum"></a><h3>enum NMSettingError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_ERROR_PROPERTY_NOT_FOUND, /*&lt; nick=PropertyNotFound &gt;*/
+ NM_SETTING_ERROR_PROPERTY_NOT_SECRET, /*&lt; nick=PropertyNotSecret &gt;*/
+ NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH /*&lt; nick=PropertyTypeMismatch &gt;*/
+} NMSettingError;
+</pre>
+<p>
+Describes errors that may result from operations involving a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-error-quark" title="nm_setting_error_quark ()">nm_setting_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NM-SETTING-PARAM-SERIALIZE:CAPS" title="NM_SETTING_PARAM_SERIALIZE">NM_SETTING_PARAM_SERIALIZE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NM-SETTING-PARAM-REQUIRED:CAPS" title="NM_SETTING_PARAM_REQUIRED">NM_SETTING_PARAM_REQUIRED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS" title="NM_SETTING_PARAM_SECRET">NM_SETTING_PARAM_SECRET</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NM-SETTING-PARAM-FUZZY-IGNORE:CAPS" title="NM_SETTING_PARAM_FUZZY_IGNORE">NM_SETTING_PARAM_FUZZY_IGNORE</a></td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()">*NMSettingClearSecretsWithFlagsFn</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()">*NMSettingValueIterFn</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-ERROR-PROPERTY-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_SETTING_ERROR_PROPERTY_NOT_FOUND</code></span></p></td>
+<td>a property required by the operation
+ was not found; for example, an attempt to update an invalid secret
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-to-hash" title="nm_setting_to_hash ()">nm_setting_to_hash</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-ERROR-PROPERTY-NOT-SECRET:CAPS"></a><span class="term"><code class="literal">NM_SETTING_ERROR_PROPERTY_NOT_SECRET</code></span></p></td>
+<td>an operation which requires a secret
+ was attempted on a non-secret property
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-new-from-hash" title="nm_setting_new_from_hash ()">nm_setting_new_from_hash</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-duplicate" title="nm_setting_duplicate ()">nm_setting_duplicate</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-get-name" title="nm_setting_get_name ()">nm_setting_get_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-verify" title="nm_setting_verify ()">nm_setting_verify</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()">nm_setting_compare</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()">nm_setting_diff</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()">nm_setting_enumerate_values</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-to-string" title="nm_setting_to_string ()">nm_setting_to_string</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-clear-secrets" title="nm_setting_clear_secrets ()">nm_setting_clear_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-clear-secrets-with-flags" title="nm_setting_clear_secrets_with_flags ()">nm_setting_clear_secrets_with_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-need-secrets" title="nm_setting_need_secrets ()">nm_setting_need_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-update-secrets" title="nm_setting_update_secrets ()">nm_setting_update_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-get-secret-flags" title="nm_setting_get_secret_flags ()">nm_setting_get_secret_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-set-secret-flags" title="nm_setting_set_secret_flags ()">nm_setting_set_secret_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting.html#nm-setting-get-virtual-iface-name" title="nm_setting_get_virtual_iface_name ()">nm_setting_get_virtual_iface_name</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-ERROR-PROPERTY-TYPE-MISMATCH:CAPS"></a><span class="term"><code class="literal">NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH</code></span></p></td>
+<td>the operation requires a property
+ of a specific type, or the value couldn't be transformed to the same type
+ as the property being acted upon
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSetting.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ERROR:CAPS"></a><h3>NM_SETTING_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_ERROR nm_setting_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-error-quark"></a><h3>nm_setting_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting.html#NMSetting--name" title="The “name†property">name</a></td>
-<td class="property_flags">Read / Write</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for NMSetting errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSetting.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NMSettingError" title="enum NMSettingError">NMSettingError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NM-SETTING-ERROR:CAPS" title="NM_SETTING_ERROR">NM_SETTING_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NM-SETTING-NAME:CAPS" title="NM_SETTING_NAME">NM_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags">NMSettingSecretFlags</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags">NMSettingCompareFlags</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="NMSetting.html#NMSetting-struct" title="NMSetting">NMSetting</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NMSettingHashFlags" title="enum NMSettingHashFlags">NMSettingHashFlags</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult">NMSettingDiffResult</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSetting.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">├──</span> NMSettingCompareFlags
- <span class="lineart">├──</span> NMSettingDiffResult
- <span class="lineart">├──</span> NMSettingError
- <span class="lineart">├──</span> NMSettingHashFlags
- <span class="lineart">╰──</span> NMSettingSecretFlags
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> NMSetting
- <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSetting.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSetting.description"></a><h2>Description</h2>
-<p>Each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> contains properties that describe configuration that applies
-to a specific network layer (like IPv4 or IPv6 configuration) or device type
-(like Ethernet, or WiFi). A collection of individual settings together
-make up an <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. Each property is strongly typed and usually has
-a number of allowed values. See each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass for a description
-of properties and allowed values.</p>
-</div>
-<div class="refsect1">
-<a name="NMSetting.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-error-quark"></a><h3>nm_setting_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for NMSetting errors.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-PARAM-SERIALIZE:CAPS"></a><h3>NM_SETTING_PARAM_SERIALIZE</h3>
@@ -364,1012 +284,924 @@ nm_setting_error_quark (<em class="parameter"><code><span class="type">void</spa
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingClearSecretsWithFlagsFn"></a><h3>NMSettingClearSecretsWithFlagsFn ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-<span class="c_punctuation">(</span>*NMSettingClearSecretsWithFlagsFn<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.3.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NM-SETTING-NAME:CAPS"></a><h3>NM_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_NAME "name"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingSecretFlags-enum"></a><h3>enum NMSettingSecretFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_SECRET_FLAG_NONE = 0x00000000,
+ NM_SETTING_SECRET_FLAG_AGENT_OWNED = 0x00000001,
+ NM_SETTING_SECRET_FLAG_NOT_SAVED = 0x00000002,
+ NM_SETTING_SECRET_FLAG_NOT_REQUIRED = 0x00000004
+
+ /* NOTE: if adding flags, update nm-setting-private.h as well */
+} NMSettingSecretFlags;
+</pre>
+<p>
+These flags indicate specific behavior related to handling of a secret. Each
+secret has a corresponding set of these flags which indicate how the secret
+is to be stored and/or requested when it is needed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>The setting for which secrets are being iterated</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-SECRET-FLAG-NONE:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SECRET_FLAG_NONE</code></span></p></td>
+<td>the system is responsible for providing and
+storing this secret (default)
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>secret</p></td>
-<td class="parameter_description"><p>The secret's name</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SECRET_FLAG_AGENT_OWNED</code></span></p></td>
+<td>a user secret agent is responsible
+for providing and storing this secret; when it is required agents will be
+asked to retrieve it
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>The secret's flags, eg <a class="link" href="NMSetting.html#NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS"><code class="literal">NM_SETTING_SECRET_FLAG_AGENT_OWNED</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-SECRET-FLAG-NOT-SAVED:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SECRET_FLAG_NOT_SAVED</code></span></p></td>
+<td>this secret should not be saved, but
+should be requested from the user each time it is needed
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>User data passed to <a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()"><code class="function">nm_connection_clear_secrets_with_flags()</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-SECRET-FLAG-NOT-REQUIRED:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SECRET_FLAG_NOT_REQUIRED</code></span></p></td>
+<td>in situations where it cannot be
+automatically determined that the secret is required (some VPNs and PPP
+providers dont require all secrets) this flag indicates that the specific
+secret is not required
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.7.5"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to clear the secret, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to not clear the secret</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingValueIterFn"></a><h3>NMSettingValueIterFn ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMSettingValueIterFn<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
- <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamFlags"><span class="type">GParamFlags</span></a> flags</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.3.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingCompareFlags-enum"></a><h3>enum NMSettingCompareFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_COMPARE_FLAG_EXACT = 0x00000000,
+ NM_SETTING_COMPARE_FLAG_FUZZY = 0x00000001,
+ NM_SETTING_COMPARE_FLAG_IGNORE_ID = 0x00000002,
+ NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS = 0x00000004,
+ NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS = 0x00000008,
+ NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS = 0x00000010
+
+ /* 0x80000000 is used for a private flag */
+} NMSettingCompareFlags;
+</pre>
+<p>
+These flags modify the comparison behavior when comparing two settings or
+two connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>The setting for which properties are being iterated, given to
-<a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()"><code class="function">nm_setting_enumerate_values()</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-EXACT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></span></p></td>
+<td>match all properties exactly
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>The value/property name</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-FUZZY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_FUZZY</code></span></p></td>
+<td>match only important attributes, like SSID,
+ type, security settings, etc. Does not match, for example, connection ID
+ or UUID.
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>The property's value</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-ID:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_IGNORE_ID</code></span></p></td>
+<td>ignore the connection's ID
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>The property's flags, like <a class="link" href="NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS" title="NM_SETTING_PARAM_SECRET"><code class="literal">NM_SETTING_PARAM_SECRET</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS</code></span></p></td>
+<td>ignore all secrets
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>User data passed to <a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()"><code class="function">nm_setting_enumerate_values()</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS</code></span></p></td>
+<td>ignore secrets for which
+the secret's flags indicate the secret is owned by a user secret agent
+(ie, the secret's flag includes <em class="parameter"><code>NM_SETTING_SECRET_FLAG_AGENT_OWNED</code></em>)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS</code></span></p></td>
+<td>ignore secrets for which
+the secret's flags indicate the secret should not be saved to persistent
+storage (ie, the secret's flag includes <em class="parameter"><code>NM_SETTING_SECRET_FLAG_NOT_SAVED</code></em>)
+</td>
</tr>
</tbody>
</table></div>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSetting-struct"></a><h3>NMSetting</h3>
+<pre class="programlisting">typedef struct _NMSetting NMSetting;</pre>
+<p>
+The NMSetting struct contains only private data.
+It should only be accessed through the functions described below.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-to-hash"></a><h3>nm_setting_to_hash ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-nm_setting_to_hash (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags" title="enum NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);</pre>
-<p>Converts the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping each setting property
-name to a GValue describing that property, suitable for marshalling over
-D-Bus or serializing. The mapping is string to GValue.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingClearSecretsWithFlagsFn"></a><h3>NMSettingClearSecretsWithFlagsFn ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> (*NMSettingClearSecretsWithFlagsFn) (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>The setting for which secrets are being iterated</td>
</tr>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>hash flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS"><code class="literal">NM_SETTING_HASH_FLAG_ALL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>secret</code></em> :</span></p></td>
+<td>The secret's name</td>
</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.9.6"></a><h4>Returns</h4>
-<p> a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>
-describing the setting's properties. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-new-from-hash"></a><h3>nm_setting_new_from_hash ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_new_from_hash (<em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object and populates that object with the properties
-contained in the hash table, using each hash key as the property to set,
-and each hash value as the value to set that property to. Setting properties
-are strongly typed, thus the GValue type of the hash value must be correct.
-See the documentation on each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object subclass for the correct
-property names and value types.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
<tr>
-<td class="parameter_name"><p>setting_type</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> type which the hash contains properties for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>The secret's flags, eg <a class="link" href="NMSetting.html#NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS"><code class="literal">NM_SETTING_SECRET_FLAG_AGENT_OWNED</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>hash</p></td>
-<td class="parameter_description"><p> the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing a
-string to GValue mapping of properties that apply to the setting. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span></td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>User data passed to <a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()"><code class="function">nm_connection_clear_secrets_with_flags()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to clear the secret, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to not clear the secret</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.10.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object populated with the properties from the
-hash table, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-duplicate"></a><h3>nm_setting_duplicate ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_duplicate (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
-<p>Duplicates a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to duplicate</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.11.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> containing the same properties and values as the
-source <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-get-name"></a><h3>nm_setting_get_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_get_name (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
-<p>Returns the type name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.12.6"></a><h4>Returns</h4>
-<p> a string containing the type name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object,
-like 'ppp' or 'wireless' or 'wired'.</p>
-<p></p>
-</div>
+<a name="NMSettingClass"></a><h3>NMSettingClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* Virtual functions */
+ gboolean (*verify) (NMSetting *setting,
+ GSList *all_settings,
+ GError **error);
+
+ GPtrArray *(*need_secrets) (NMSetting *setting);
+
+ int (*update_one_secret) (NMSetting *setting,
+ const char *key,
+ GValue *value,
+ GError **error);
+
+ gboolean (*get_secret_flags) (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags *out_flags,
+ GError **error);
+
+ gboolean (*set_secret_flags) (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags flags,
+ GError **error);
+
+ /* Returns TRUE if the given property contains the same value in both settings */
+ gboolean (*compare_property) (NMSetting *setting,
+ NMSetting *other,
+ const GParamSpec *prop_spec,
+ NMSettingCompareFlags flags);
+
+ gboolean (*clear_secrets_with_flags) (NMSetting *setting,
+ GParamSpec *pspec,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data);
+
+ const char *(*get_virtual_iface_name) (NMSetting *setting);
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+} NMSettingClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-verify"></a><h3>nm_setting_verify ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_verify (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *all_settings</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Validates the setting. Each setting's properties have allowed values, and
-some are dependent on other values (hence the need for <em class="parameter"><code>all_settings</code></em>
-). The
-returned <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> contains information about which property of the setting
-failed validation, and in what way that property failed validation.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingValueIterFn"></a><h3>NMSettingValueIterFn ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMSettingValueIterFn) (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamFlags"><span class="type">GParamFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to verify</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>The setting for which properties are being iterated, given to
+<a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()"><code class="function">nm_setting_enumerate_values()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>The value/property name</td>
</tr>
<tr>
-<td class="parameter_name"><p>all_settings</p></td>
-<td class="parameter_description"><p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of all settings
-in the connection from which <em class="parameter"><code>setting</code></em>
-came. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMSetting]</span></td>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>The property's value</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>The property's flags, like <a class="link" href="NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS" title="NM_SETTING_PARAM_SECRET"><code class="literal">NM_SETTING_PARAM_SECRET</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>User data passed to <a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()"><code class="function">nm_setting_enumerate_values()</code></a>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the setting is valid, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-compare"></a><h3>nm_setting_compare ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_compare (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *a</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *b</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);</pre>
-<p>Compares two <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects for similarity, with comparison behavior
-modified by a set of flags. See the documentation for <a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a>
-for a description of each flag's behavior.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingHashFlags-enum"></a><h3>enum NMSettingHashFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_HASH_FLAG_ALL = 0x00000000,
+ NM_SETTING_HASH_FLAG_NO_SECRETS = 0x00000001,
+ NM_SETTING_HASH_FLAG_ONLY_SECRETS = 0x00000002,
+} NMSettingHashFlags;
+</pre>
+<p>
+These flags determine which properties are added to the resulting hash
+when calling <a class="link" href="NMSetting.html#nm-setting-to-hash" title="nm_setting_to_hash ()"><code class="function">nm_setting_to_hash()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>a</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-HASH-FLAG-ALL:CAPS"></a><span class="term"><code class="literal">NM_SETTING_HASH_FLAG_ALL</code></span></p></td>
+<td>hash all properties (including secrets)
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>b</p></td>
-<td class="parameter_description"><p>a second <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to compare with the first</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-HASH-FLAG-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_SETTING_HASH_FLAG_NO_SECRETS</code></span></p></td>
+<td>do not include secrets
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-HASH-FLAG-ONLY-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_SETTING_HASH_FLAG_ONLY_SECRETS</code></span></p></td>
+<td>only hash secrets
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.14.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the comparison succeeds, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it does not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-diff"></a><h3>nm_setting_diff ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_diff (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *a</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *b</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> invert_results</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **results</code></em>);</pre>
-<p>Compares two <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects for similarity, with comparison behavior
-modified by a set of flags. See the documentation for <a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a>
-for a description of each flag's behavior. If the settings differ, the keys
-of each setting that differ from the other are added to <em class="parameter"><code>results</code></em>
-, mapped to
-one or more <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><span class="type">NMSettingDiffResult</span></a> values.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-to-hash"></a><h3>nm_setting_to_hash ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * nm_setting_to_hash (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);</pre>
+<p>
+Converts the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping each setting property
+name to a GValue describing that property, suitable for marshalling over
+D-Bus or serializing. The mapping is string to GValue.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>a</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>b</p></td>
-<td class="parameter_description"><p>a second <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to compare with the first</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>invert_results</p></td>
-<td class="parameter_description"><p>this parameter is used internally by libnm-util and should
-be set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>. If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> inverts the meaning of the <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><span class="type">NMSettingDiffResult</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>hash flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS"><code class="literal">NM_SETTING_HASH_FLAG_ALL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>results</p></td>
-<td class="parameter_description"><p> if the
-settings differ, on return a hash table mapping the differing keys to one or
-more <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><code class="literal">NMSettingDiffResult</code></a> values OR-ed together. If the settings do not
-differ, any hash table passed in is unmodified. If no hash table is passed
-in and the settings differ, a new one is created and returned. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>
+describing the setting's properties. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.15.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the settings contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-enumerate-values"></a><h3>nm_setting_enumerate_values ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_enumerate_values (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Iterates over each property of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object, calling the supplied
-user function for each property.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-new-from-hash"></a><h3>nm_setting_new_from_hash ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_new_from_hash (<em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object and populates that object with the properties
+contained in the hash table, using each hash key as the property to set,
+and each hash value as the value to set that property to. Setting properties
+are strongly typed, thus the GValue type of the hash value must be correct.
+See the documentation on each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object subclass for the correct
+property names and value types.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting_type</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> type which the hash contains properties for</td>
</tr>
<tr>
-<td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> user-supplied function called for each property of the setting. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>hash</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing a
+string to GValue mapping of properties that apply to the setting. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data passed to <em class="parameter"><code>func</code></em>
-at each invocation</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object populated with the properties from the
+hash table, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-to-string"></a><h3>nm_setting_to_string ()</h3>
-<pre class="programlisting"><span class="returnvalue">char</span> *
-nm_setting_to_string (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
-<p>Convert the setting into a string. For debugging purposes ONLY, should NOT
-be used for serialization of the setting, or machine-parsed in any way. The
-output format is not guaranteed to be stable and may change at any time.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-duplicate"></a><h3>nm_setting_duplicate ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_duplicate (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
+<p>
+Duplicates a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to duplicate</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> containing the same properties and values as the
+source <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.17.6"></a><h4>Returns</h4>
-<p> an allocated string containing a textual representation of the
-setting's properties and values (including secrets!), which the caller should
-free with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-clear-secrets"></a><h3>nm_setting_clear_secrets ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_clear_secrets (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
-<p>Resets and clears any secrets in the setting. Secrets should be added to the
-setting only when needed, and cleared immediately after use to prevent
-leakage of information.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-get-name"></a><h3>nm_setting_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_get_name (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
+<p>
+Returns the type name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string containing the type name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object,
+like 'ppp' or 'wireless' or 'wired'.</td>
+</tr>
+</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-clear-secrets-with-flags"></a><h3>nm_setting_clear_secrets_with_flags ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_clear_secrets_with_flags (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Clears and frees secrets determined by <em class="parameter"><code>func</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-verify"></a><h3>nm_setting_verify ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_verify (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *all_settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Validates the setting. Each setting's properties have allowed values, and
+some are dependent on other values (hence the need for <em class="parameter"><code>all_settings</code></em>). The
+returned <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> contains information about which property of the setting
+failed validation, and in what way that property failed validation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to verify</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>all_settings</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of all settings
+in the connection from which <em class="parameter"><code>setting</code></em> came. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMSetting]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> function to be called to determine whether a
-specific secret should be cleared or not. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>caller-supplied data passed to <em class="parameter"><code>func</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the setting is valid, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-need-secrets"></a><h3>nm_setting_need_secrets ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_setting_need_secrets (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
-<p>Returns an array of property names for each secret which may be required
-to make a successful connection. The returned hints are only intended as a
-guide to what secrets may be required, because in some circumstances, there
-is no way to conclusively determine exactly which secrets are needed.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-compare"></a><h3>nm_setting_compare ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_compare (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);</pre>
+<p>
+Compares two <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects for similarity, with comparison behavior
+modified by a set of flags. See the documentation for <a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a>
+for a description of each flag's behavior.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
+<td>a second <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to compare with the first</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the comparison succeeds, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it does not</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.20.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
-the property names of secrets of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> which may be required; the
-caller owns the array and must free it with <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-free"><code class="function">g_ptr_array_free()</code></a>, but must not
-free the elements. </p>
-<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-update-secrets"></a><h3>nm_setting_update_secrets ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_update_secrets (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Update the setting's secrets, given a hash table of secrets intended for that
-setting (deserialized from D-Bus for example).</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingDiffResult-enum"></a><h3>enum NMSettingDiffResult</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_DIFF_RESULT_UNKNOWN = 0x00000000,
+ NM_SETTING_DIFF_RESULT_IN_A = 0x00000001,
+ NM_SETTING_DIFF_RESULT_IN_B = 0x00000002,
+} NMSettingDiffResult;
+</pre>
+<p>
+These values indicate the result of a setting difference operation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-DIFF-RESULT-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DIFF_RESULT_UNKNOWN</code></span></p></td>
+<td>unknown result
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>secrets</p></td>
-<td class="parameter_description"><p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping
-string to <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of setting property names and secrets. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span></td>
+<td><p><a name="NM-SETTING-DIFF-RESULT-IN-A:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DIFF_RESULT_IN_A</code></span></p></td>
+<td>the property is present in setting A
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-DIFF-RESULT-IN-B:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DIFF_RESULT_IN_B</code></span></p></td>
+<td>the property is present in setting B
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.21.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secrets were successfully updated, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure to
-update one or more of the secrets.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-get-secret-flags"></a><h3>nm_setting_get_secret_flags ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_get_secret_flags (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> *out_flags</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>For a given secret, retrieves the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> describing how to
-handle that secret.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-diff"></a><h3>nm_setting_diff ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_diff (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> invert_results</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **results</code></em>);</pre>
+<p>
+Compares two <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects for similarity, with comparison behavior
+modified by a set of flags. See the documentation for <a class="link" href="NMSetting.html#NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a>
+for a description of each flag's behavior. If the settings differ, the keys
+of each setting that differ from the other are added to <em class="parameter"><code>results</code></em>, mapped to
+one or more <a class="link" href="NMSetting.html#NMSettingDiffResult"><span class="type">NMSettingDiffResult</span></a> values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>secret_name</p></td>
-<td class="parameter_description"><p>the secret key name to get flags for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
+<td>a second <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to compare with the first</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_flags</p></td>
-<td class="parameter_description"><p>on success, the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> for the secret</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>invert_results</code></em> :</span></p></td>
+<td>this parameter is used internally by libnm-util and should
+be set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>. If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> inverts the meaning of the <a class="link" href="NMSetting.html#NMSettingDiffResult"><span class="type">NMSettingDiffResult</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>results</code></em> :</span></p></td>
+<td>if the
+settings differ, on return a hash table mapping the differing keys to one or
+more <a class="link" href="NMSetting.html#NMSettingDiffResult"><code class="literal">NMSettingDiffResult</code></a> values OR-ed together. If the settings do not
+differ, any hash table passed in is unmodified. If no hash table is passed
+in and the settings differ, a new one is created and returned. <span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the settings contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.22.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success (if the given secret name was a valid property of
-this setting, and if that property is secret), <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-set-secret-flags"></a><h3>nm_setting_set_secret_flags ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_set_secret_flags (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>For a given secret, retrieves the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> describing how to
-handle that secret.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-enumerate-values"></a><h3>nm_setting_enumerate_values ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_enumerate_values (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Iterates over each property of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object, calling the supplied
+user function for each property.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>user-supplied function called for each property of the setting. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>secret_name</p></td>
-<td class="parameter_description"><p>the secret key name to set flags for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data passed to <em class="parameter"><code>func</code></em> at each invocation</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-to-string"></a><h3>nm_setting_to_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_setting_to_string (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
+<p>
+Convert the setting into a string. For debugging purposes ONLY, should NOT
+be used for serialization of the setting, or machine-parsed in any way. The
+output format is not guaranteed to be stable and may change at any time.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> for the secret</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an allocated string containing a textual representation of the
+setting's properties and values (including secrets!), which the caller should
+free with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.23.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success (if the given secret name was a valid property of
-this setting, and if that property is secret), <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-get-virtual-iface-name"></a><h3>nm_setting_get_virtual_iface_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_get_virtual_iface_name (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
-<p>Returns the name of the virtual kernel interface which the connection
-needs to use if specified in the settings.</p>
-<div class="refsect3">
-<a name="id-1.2.3.9.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-clear-secrets"></a><h3>nm_setting_clear_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_clear_secrets (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
+<p>
+Resets and clears any secrets in the setting. Secrets should be added to the
+setting only when needed, and cleared immediately after use to prevent
+leakage of information.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.3.9.24.6"></a><h4>Returns</h4>
-<p> Name of the virtual interface or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the setting does not
-support this feature</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSetting.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMSettingError"></a><h3>enum NMSettingError</h3>
-<p>Describes errors that may result from operations involving a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.3.10.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-clear-secrets-with-flags"></a><h3>nm_setting_clear_secrets_with_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_clear_secrets_with_flags (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Clears and frees secrets determined by <em class="parameter"><code>func</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-ERROR-PROPERTY-NOT-FOUND:CAPS"></a>NM_SETTING_ERROR_PROPERTY_NOT_FOUND</p></td>
-<td class="enum_member_description">
-<p>a property required by the operation
- was not found; for example, an attempt to update an invalid secret</p>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>function to be called to determine whether a
+specific secret should be cleared or not. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-ERROR-PROPERTY-NOT-SECRET:CAPS"></a>NM_SETTING_ERROR_PROPERTY_NOT_SECRET</p></td>
-<td class="enum_member_description">
-<p>an operation which requires a secret
- was attempted on a non-secret property</p>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-supplied data passed to <em class="parameter"><code>func</code></em>
</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-ERROR-PROPERTY-TYPE-MISMATCH:CAPS"></a>NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH</p></td>
-<td class="enum_member_description">
-<p>the operation requires a property
- of a specific type, or the value couldn't be transformed to the same type
- as the property being acted upon</p>
-</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-ERROR:CAPS"></a><h3>NM_SETTING_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_ERROR nm_setting_error_quark ()
-</pre>
+<a name="nm-setting-need-secrets"></a><h3>nm_setting_need_secrets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_setting_need_secrets (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
<p>
+Returns an array of property names for each secret which may be required
+to make a successful connection. The returned hints are only intended as a
+guide to what secrets may be required, because in some circumstances, there
+is no way to conclusively determine exactly which secrets are needed.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing
+the property names of secrets of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> which may be required; the
+caller owns the array and must free it with <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-free"><code class="function">g_ptr_array_free()</code></a>, but must not
+free the elements. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-NAME:CAPS"></a><h3>NM_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_NAME "name"
-</pre>
+<a name="nm-setting-update-secrets"></a><h3>nm_setting_update_secrets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_update_secrets (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
+Update the setting's secrets, given a hash table of secrets intended for that
+setting (deserialized from D-Bus for example).
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingSecretFlags"></a><h3>enum NMSettingSecretFlags</h3>
-<p>These flags indicate specific behavior related to handling of a secret. Each
-secret has a corresponding set of these flags which indicate how the secret
-is to be stored and/or requested when it is needed.</p>
-<div class="refsect3">
-<a name="id-1.2.3.10.5.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SECRET-FLAG-NONE:CAPS"></a>NM_SETTING_SECRET_FLAG_NONE</p></td>
-<td class="enum_member_description">
-<p>the system is responsible for providing and
-storing this secret (default)</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS"></a>NM_SETTING_SECRET_FLAG_AGENT_OWNED</p></td>
-<td class="enum_member_description">
-<p>a user secret agent is responsible
-for providing and storing this secret; when it is required agents will be
-asked to retrieve it</p>
+<td><p><span class="term"><em class="parameter"><code>secrets</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping
+string to <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of setting property names and secrets. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SECRET-FLAG-NOT-SAVED:CAPS"></a>NM_SETTING_SECRET_FLAG_NOT_SAVED</p></td>
-<td class="enum_member_description">
-<p>this secret should not be saved, but
-should be requested from the user each time it is needed</p>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SECRET-FLAG-NOT-REQUIRED:CAPS"></a>NM_SETTING_SECRET_FLAG_NOT_REQUIRED</p></td>
-<td class="enum_member_description">
-<p>in situations where it cannot be
-automatically determined that the secret is required (some VPNs and PPP
-providers dont require all secrets) this flag indicates that the specific
-secret is not required</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secrets were successfully updated, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure to
+update one or more of the secrets.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingCompareFlags"></a><h3>enum NMSettingCompareFlags</h3>
-<p>These flags modify the comparison behavior when comparing two settings or
-two connections.</p>
-<div class="refsect3">
-<a name="id-1.2.3.10.6.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-get-secret-flags"></a><h3>nm_setting_get_secret_flags ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_get_secret_flags (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> *out_flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+For a given secret, retrieves the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> describing how to
+handle that secret.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-COMPARE-FLAG-EXACT:CAPS"></a>NM_SETTING_COMPARE_FLAG_EXACT</p></td>
-<td class="enum_member_description">
-<p>match all properties exactly</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-COMPARE-FLAG-FUZZY:CAPS"></a>NM_SETTING_COMPARE_FLAG_FUZZY</p></td>
-<td class="enum_member_description">
-<p>match only important attributes, like SSID,
- type, security settings, etc. Does not match, for example, connection ID
- or UUID.</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>secret_name</code></em> :</span></p></td>
+<td>the secret key name to get flags for</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-ID:CAPS"></a>NM_SETTING_COMPARE_FLAG_IGNORE_ID</p></td>
-<td class="enum_member_description">
-<p>ignore the connection's ID</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_flags</code></em> :</span></p></td>
+<td>on success, the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> for the secret</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-SECRETS:CAPS"></a>NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS</p></td>
-<td class="enum_member_description">
-<p>ignore all secrets</p>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS"></a>NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS</p></td>
-<td class="enum_member_description">
-<p>ignore secrets for which
-the secret's flags indicate the secret is owned by a user secret agent
-(ie, the secret's flag includes <em class="parameter"><code>NM_SETTING_SECRET_FLAG_AGENT_OWNED</code></em>
-)</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS"></a>NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS</p></td>
-<td class="enum_member_description">
-<p>ignore secrets for which
-the secret's flags indicate the secret should not be saved to persistent
-storage (ie, the secret's flag includes <em class="parameter"><code>NM_SETTING_SECRET_FLAG_NOT_SAVED</code></em>
-)</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success (if the given secret name was a valid property of
+this setting, and if that property is secret), <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting-struct"></a><h3>NMSetting</h3>
-<pre class="programlisting">typedef struct _NMSetting NMSetting;</pre>
-<p>The NMSetting struct contains only private data.
-It should only be accessed through the functions described below.</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingHashFlags"></a><h3>enum NMSettingHashFlags</h3>
-<p>These flags determine which properties are added to the resulting hash
-when calling <a class="link" href="NMSetting.html#nm-setting-to-hash" title="nm_setting_to_hash ()"><code class="function">nm_setting_to_hash()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.3.10.8.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-set-secret-flags"></a><h3>nm_setting_set_secret_flags ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_set_secret_flags (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret_name</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+For a given secret, stores the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> describing how to
+handle that secret.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-HASH-FLAG-ALL:CAPS"></a>NM_SETTING_HASH_FLAG_ALL</p></td>
-<td class="enum_member_description">
-<p>hash all properties (including secrets)</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-HASH-FLAG-NO-SECRETS:CAPS"></a>NM_SETTING_HASH_FLAG_NO_SECRETS</p></td>
-<td class="enum_member_description">
-<p>do not include secrets</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>secret_name</code></em> :</span></p></td>
+<td>the secret key name to set flags for</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-HASH-FLAG-ONLY-SECRETS:CAPS"></a>NM_SETTING_HASH_FLAG_ONLY_SECRETS</p></td>
-<td class="enum_member_description">
-<p>only hash secrets</p>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> for the secret</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
</td>
-<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success (if the given secret name was a valid property of
+this setting, and if that property is secret), <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingDiffResult"></a><h3>enum NMSettingDiffResult</h3>
-<p>These values indicate the result of a setting difference operation.</p>
-<div class="refsect3">
-<a name="id-1.2.3.10.9.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-get-virtual-iface-name"></a><h3>nm_setting_get_virtual_iface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_get_virtual_iface_name (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
+<p>
+Returns the name of the virtual kernel interface which the connection
+needs to use if specified in the settings.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-DIFF-RESULT-UNKNOWN:CAPS"></a>NM_SETTING_DIFF_RESULT_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown result</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-DIFF-RESULT-IN-A:CAPS"></a>NM_SETTING_DIFF_RESULT_IN_A</p></td>
-<td class="enum_member_description">
-<p>the property is present in setting A</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-DIFF-RESULT-IN-B:CAPS"></a>NM_SETTING_DIFF_RESULT_IN_B</p></td>
-<td class="enum_member_description">
-<p>the property is present in setting B</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>Name of the virtual interface or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the setting does not
+support this feature</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-</div>
<div class="refsect1">
<a name="NMSetting.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSetting--name"></a><h3>The <code class="literal">“nameâ€</code> property</h3>
-<pre class="programlisting"> “name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The setting's name, which uniquely identifies the setting within the
+<a name="NMSetting--name"></a><h3>The <code class="literal">"name"</code> property</h3>
+<pre class="programlisting"> "name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The setting's name, which uniquely identifies the setting within the
connection. Each setting type has a name unique to that type, for
-example 'ppp' or 'wireless' or 'wired'.</p>
-<p>Flags: Read / Write</p>
+example "ppp" or "wireless" or "wired".
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSetting8021x.html b/docs/libnm-util/html/NMSetting8021x.html
index 67162eadb..a0bd18de6 100644
--- a/docs/libnm-util/html/NMSetting8021x.html
+++ b/docs/libnm-util/html/NMSetting8021x.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSetting8021x</title>
+<title>NMSetting8021x</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
-<link rel="prev" href="NMSettingAdsl.html" title="NMSettingAdsl">
+<link rel="prev" href="NMSettingDcb.html" title="NMSettingDcb">
<link rel="next" href="NMSettingIP4Config.html" title="NMSettingIP4Config">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSetting8021x.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSetting8021x.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSetting8021x.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingAdsl.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingIP4Config.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingDcb.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingIP4Config.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSetting8021x.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSetting8021x.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSetting8021x.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSetting8021x.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSetting8021x"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,3780 +37,3295 @@
<h2><span class="refentrytitle"><a name="NMSetting8021x.top_of_page"></a>NMSetting8021x</span></h2>
<p>NMSetting8021x — Describes 802.1x-authenticated connection properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSetting8021x.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSetting8021xCKFormat"></a><a name="NMSetting8021xCKScheme"></a><a name="NMSetting8021xError"></a><pre class="synopsis">
+#include &lt;nm-setting-8021x.h&gt;
+
+enum <a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat-enum" title="enum NMSetting8021xCKFormat">NMSetting8021xCKFormat</a>;
+enum <a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme-enum" title="enum NMSetting8021xCKScheme">NMSetting8021xCKScheme</a>;
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-SETTING-NAME:CAPS" title="NM_SETTING_802_1X_SETTING_NAME">NM_SETTING_802_1X_SETTING_NAME</a>
+enum <a class="link" href="NMSetting8021x.html#NMSetting8021xError-enum" title="enum NMSetting8021xError">NMSetting8021xError</a>;
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-ERROR:CAPS" title="NM_SETTING_802_1X_ERROR">NM_SETTING_802_1X_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-error-quark" title="nm_setting_802_1x_error_quark ()">nm_setting_802_1x_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-EAP:CAPS" title="NM_SETTING_802_1X_EAP">NM_SETTING_802_1X_EAP</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-IDENTITY:CAPS" title="NM_SETTING_802_1X_IDENTITY">NM_SETTING_802_1X_IDENTITY</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS" title="NM_SETTING_802_1X_ANONYMOUS_IDENTITY">NM_SETTING_802_1X_ANONYMOUS_IDENTITY</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PAC-FILE:CAPS" title="NM_SETTING_802_1X_PAC_FILE">NM_SETTING_802_1X_PAC_FILE</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CA-CERT:CAPS" title="NM_SETTING_802_1X_CA_CERT">NM_SETTING_802_1X_CA_CERT</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CA-PATH:CAPS" title="NM_SETTING_802_1X_CA_PATH">NM_SETTING_802_1X_CA_PATH</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-SUBJECT-MATCH:CAPS" title="NM_SETTING_802_1X_SUBJECT_MATCH">NM_SETTING_802_1X_SUBJECT_MATCH</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS" title="NM_SETTING_802_1X_ALTSUBJECT_MATCHES">NM_SETTING_802_1X_ALTSUBJECT_MATCHES</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CLIENT-CERT:CAPS" title="NM_SETTING_802_1X_CLIENT_CERT">NM_SETTING_802_1X_CLIENT_CERT</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS" title="NM_SETTING_802_1X_PHASE1_PEAPVER">NM_SETTING_802_1X_PHASE1_PEAPVER</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS" title="NM_SETTING_802_1X_PHASE1_PEAPLABEL">NM_SETTING_802_1X_PHASE1_PEAPLABEL</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS" title="NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING">NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTH:CAPS" title="NM_SETTING_802_1X_PHASE2_AUTH">NM_SETTING_802_1X_PHASE2_AUTH</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS" title="NM_SETTING_802_1X_PHASE2_AUTHEAP">NM_SETTING_802_1X_PHASE2_AUTHEAP</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS" title="NM_SETTING_802_1X_PHASE2_CA_CERT">NM_SETTING_802_1X_PHASE2_CA_CERT</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS" title="NM_SETTING_802_1X_PHASE2_CA_PATH">NM_SETTING_802_1X_PHASE2_CA_PATH</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS" title="NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH">NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS" title="NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES">NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS" title="NM_SETTING_802_1X_PHASE2_CLIENT_CERT">NM_SETTING_802_1X_PHASE2_CLIENT_CERT</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD:CAPS" title="NM_SETTING_802_1X_PASSWORD">NM_SETTING_802_1X_PASSWORD</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PASSWORD_FLAGS">NM_SETTING_802_1X_PASSWORD_FLAGS</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW:CAPS" title="NM_SETTING_802_1X_PASSWORD_RAW">NM_SETTING_802_1X_PASSWORD_RAW</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS" title="NM_SETTING_802_1X_PASSWORD_RAW_FLAGS">NM_SETTING_802_1X_PASSWORD_RAW_FLAGS</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY">NM_SETTING_802_1X_PRIVATE_KEY</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD">NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS">NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PIN:CAPS" title="NM_SETTING_802_1X_PIN">NM_SETTING_802_1X_PIN</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PIN-FLAGS:CAPS" title="NM_SETTING_802_1X_PIN_FLAGS">NM_SETTING_802_1X_PIN_FLAGS</a>
+#define <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS" title="NM_SETTING_802_1X_SYSTEM_CA_CERTS">NM_SETTING_802_1X_SYSTEM_CA_CERTS</a>
+ <a class="link" href="NMSetting8021x.html#NMSetting8021x-struct" title="NMSetting8021x">NMSetting8021x</a>;
+ <a class="link" href="NMSetting8021x.html#NMSetting8021xClass" title="NMSetting8021xClass">NMSetting8021xClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-new" title="nm_setting_802_1x_new ()">nm_setting_802_1x_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods" title="nm_setting_802_1x_get_num_eap_methods ()">nm_setting_802_1x_get_num_eap_methods</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-eap-method" title="nm_setting_802_1x_get_eap_method ()">nm_setting_802_1x_get_eap_method</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-eap-method" title="nm_setting_802_1x_add_eap_method ()">nm_setting_802_1x_add_eap_method</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *eap</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method" title="nm_setting_802_1x_remove_eap_method ()">nm_setting_802_1x_remove_eap_method</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method-by-value" title="nm_setting_802_1x_remove_eap_method_by_value ()">nm_setting_802_1x_remove_eap_method_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *eap</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods" title="nm_setting_802_1x_clear_eap_methods ()">nm_setting_802_1x_clear_eap_methods</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-identity" title="nm_setting_802_1x_get_identity ()">nm_setting_802_1x_get_identity</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity" title="nm_setting_802_1x_get_anonymous_identity ()">nm_setting_802_1x_get_anonymous_identity</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pac-file" title="nm_setting_802_1x_get_pac_file ()">nm_setting_802_1x_get_pac_file</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-system-ca-certs" title="nm_setting_802_1x_get_system_ca_certs ()">nm_setting_802_1x_get_system_ca_certs</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-path" title="nm_setting_802_1x_get_ca_path ()">nm_setting_802_1x_get_ca_path</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-path" title="nm_setting_802_1x_get_phase2_ca_path ()">nm_setting_802_1x_get_phase2_ca_path</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-scheme" title="nm_setting_802_1x_get_ca_cert_scheme ()">nm_setting_802_1x_get_ca_cert_scheme</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()">nm_setting_802_1x_get_ca_cert_blob</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()">nm_setting_802_1x_get_ca_cert_path</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert" title="nm_setting_802_1x_set_ca_cert ()">nm_setting_802_1x_set_ca_cert</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-subject-match" title="nm_setting_802_1x_get_subject_match ()">nm_setting_802_1x_get_subject_match</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-altsubject-matches" title="nm_setting_802_1x_get_num_altsubject_matches ()">nm_setting_802_1x_get_num_altsubject_matches</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match" title="nm_setting_802_1x_get_altsubject_match ()">nm_setting_802_1x_get_altsubject_match</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match" title="nm_setting_802_1x_add_altsubject_match ()">nm_setting_802_1x_add_altsubject_match</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *altsubject_match</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match" title="nm_setting_802_1x_remove_altsubject_match ()">nm_setting_802_1x_remove_altsubject_match</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match-by-value" title="nm_setting_802_1x_remove_altsubject_match_by_value ()">nm_setting_802_1x_remove_altsubject_match_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *altsubject_match</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches" title="nm_setting_802_1x_clear_altsubject_matches ()">nm_setting_802_1x_clear_altsubject_matches</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme" title="nm_setting_802_1x_get_client_cert_scheme ()">nm_setting_802_1x_get_client_cert_scheme</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()">nm_setting_802_1x_get_client_cert_blob</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()">nm_setting_802_1x_get_client_cert_path</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-client-cert" title="nm_setting_802_1x_set_client_cert ()">nm_setting_802_1x_set_client_cert</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peapver" title="nm_setting_802_1x_get_phase1_peapver ()">nm_setting_802_1x_get_phase1_peapver</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peaplabel" title="nm_setting_802_1x_get_phase1_peaplabel ()">nm_setting_802_1x_get_phase1_peaplabel</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-fast-provisioning" title="nm_setting_802_1x_get_phase1_fast_provisioning ()">nm_setting_802_1x_get_phase1_fast_provisioning</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-auth" title="nm_setting_802_1x_get_phase2_auth ()">nm_setting_802_1x_get_phase2_auth</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-autheap" title="nm_setting_802_1x_get_phase2_autheap ()">nm_setting_802_1x_get_phase2_autheap</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-scheme" title="nm_setting_802_1x_get_phase2_ca_cert_scheme ()">nm_setting_802_1x_get_phase2_ca_cert_scheme</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-blob" title="nm_setting_802_1x_get_phase2_ca_cert_blob ()">nm_setting_802_1x_get_phase2_ca_cert_blob</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-path" title="nm_setting_802_1x_get_phase2_ca_cert_path ()">nm_setting_802_1x_get_phase2_ca_cert_path</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert" title="nm_setting_802_1x_set_phase2_ca_cert ()">nm_setting_802_1x_set_phase2_ca_cert</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-subject-match" title="nm_setting_802_1x_get_phase2_subject_match ()">nm_setting_802_1x_get_phase2_subject_match</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-phase2-altsubject-matches" title="nm_setting_802_1x_get_num_phase2_altsubject_matches ()">nm_setting_802_1x_get_num_phase2_altsubject_matches</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match" title="nm_setting_802_1x_get_phase2_altsubject_match ()">nm_setting_802_1x_get_phase2_altsubject_match</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match" title="nm_setting_802_1x_add_phase2_altsubject_match ()">nm_setting_802_1x_add_phase2_altsubject_match</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *phase2_altsubject_match</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match" title="nm_setting_802_1x_remove_phase2_altsubject_match ()">nm_setting_802_1x_remove_phase2_altsubject_match</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match-by-value" title="nm_setting_802_1x_remove_phase2_altsubject_match_by_value ()">nm_setting_802_1x_remove_phase2_altsubject_match_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *phase2_altsubject_match</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches" title="nm_setting_802_1x_clear_phase2_altsubject_matches ()">nm_setting_802_1x_clear_phase2_altsubject_matches</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme" title="nm_setting_802_1x_get_phase2_client_cert_scheme ()">nm_setting_802_1x_get_phase2_client_cert_scheme</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob" title="nm_setting_802_1x_get_phase2_client_cert_blob ()">nm_setting_802_1x_get_phase2_client_cert_blob</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-path" title="nm_setting_802_1x_get_phase2_client_cert_path ()">nm_setting_802_1x_get_phase2_client_cert_path</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert" title="nm_setting_802_1x_set_phase2_client_cert ()">nm_setting_802_1x_set_phase2_client_cert</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password" title="nm_setting_802_1x_get_password ()">nm_setting_802_1x_get_password</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-flags" title="nm_setting_802_1x_get_password_flags ()">nm_setting_802_1x_get_password_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw" title="nm_setting_802_1x_get_password_raw ()">nm_setting_802_1x_get_password_raw</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw-flags" title="nm_setting_802_1x_get_password_raw_flags ()">nm_setting_802_1x_get_password_raw_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin" title="nm_setting_802_1x_get_pin ()">nm_setting_802_1x_get_pin</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin-flags" title="nm_setting_802_1x_get_pin_flags ()">nm_setting_802_1x_get_pin_flags</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-scheme" title="nm_setting_802_1x_get_private_key_scheme ()">nm_setting_802_1x_get_private_key_scheme</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-blob" title="nm_setting_802_1x_get_private_key_blob ()">nm_setting_802_1x_get_private_key_blob</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-path" title="nm_setting_802_1x_get_private_key_path ()">nm_setting_802_1x_get_private_key_path</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()">nm_setting_802_1x_set_private_key</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password" title="nm_setting_802_1x_get_private_key_password ()">nm_setting_802_1x_get_private_key_password</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password-flags" title="nm_setting_802_1x_get_private_key_password_flags ()">nm_setting_802_1x_get_private_key_password_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-format" title="nm_setting_802_1x_get_private_key_format ()">nm_setting_802_1x_get_private_key_format</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-scheme" title="nm_setting_802_1x_get_phase2_private_key_scheme ()">nm_setting_802_1x_get_phase2_private_key_scheme</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-blob" title="nm_setting_802_1x_get_phase2_private_key_blob ()">nm_setting_802_1x_get_phase2_private_key_blob</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-path" title="nm_setting_802_1x_get_phase2_private_key_path ()">nm_setting_802_1x_get_phase2_private_key_path</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()">nm_setting_802_1x_set_phase2_private_key</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password" title="nm_setting_802_1x_get_phase2_private_key_password ()">nm_setting_802_1x_get_phase2_private_key_password</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password-flags" title="nm_setting_802_1x_get_phase2_private_key_password_flags ()">nm_setting_802_1x_get_phase2_private_key_password_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format" title="nm_setting_802_1x_get_phase2_private_key_format ()">nm_setting_802_1x_get_phase2_private_key_format</a>
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSetting8021x.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSetting8021xCKFormat
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSetting8021xCKScheme
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSetting8021xError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSetting8021x
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSetting8021x.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSetting8021x.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--altsubject-matches" title='The "altsubject-matches" property'>altsubject-matches</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--anonymous-identity" title='The "anonymous-identity" property'>anonymous-identity</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title='The "ca-cert" property'>ca-cert</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-path" title='The "ca-path" property'>ca-path</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--client-cert" title='The "client-cert" property'>client-cert</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'>eap</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--identity" title='The "identity" property'>identity</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--pac-file" title='The "pac-file" property'>pac-file</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'>password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-flags" title='The "password-flags" property'>password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'>password-raw</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw-flags" title='The "password-raw-flags" property'>password-raw-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning" title='The "phase1-fast-provisioning" property'>phase1-fast-provisioning</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel" title='The "phase1-peaplabel" property'>phase1-peaplabel</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peapver" title='The "phase1-peapver" property'>phase1-peapver</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches" title='The "phase2-altsubject-matches" property'>phase2-altsubject-matches</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title='The "phase2-auth" property'>phase2-auth</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title='The "phase2-autheap" property'>phase2-autheap</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title='The "phase2-ca-cert" property'>phase2-ca-cert</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-path" title='The "phase2-ca-path" property'>phase2-ca-path</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-client-cert" title='The "phase2-client-cert" property'>phase2-client-cert</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title='The "phase2-private-key" property'>phase2-private-key</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'>phase2-private-key-password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags" title='The "phase2-private-key-password-flags" property'>phase2-private-key-password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-subject-match" title='The "phase2-subject-match" property'>phase2-subject-match</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title='The "pin" property'>pin</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin-flags" title='The "pin-flags" property'>pin-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title='The "private-key" property'>private-key</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title='The "private-key-password" property'>private-key-password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password-flags" title='The "private-key-password-flags" property'>private-key-password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--subject-match" title='The "subject-match" property'>subject-match</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title='The "system-ca-certs" property'>system-ca-certs</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSetting8021x.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+properties necessary for connection to 802.1x-authenticated networks, such as
+WPA and WPA2 Enterprise Wi-Fi networks and wired 802.1x networks. 802.1x
+connections typically use certificates and/or EAP authentication methods to
+securely verify, identify, and authenticate the client to the network itself,
+instead of simply relying on a widely shared static key.
+</p>
+<p>
+It's a good idea to read up on wpa_supplicant configuration before using this
+setting extensively, since most of the options here correspond closely with
+the relevant wpa_supplicant configuration options.
+</p>
+<p>
+Furthermore, to get a good idea of 802.1x, EAP, TLS, TTLS, etc and their
+applications to Wi-Fi and wired networks, you'll want to get copies of the
+following books.
+</p>
+<p>
+ 802.11 Wireless Networks: The Definitive Guide, Second Edition
+ Author: Matthew Gast
+ ISBN: 978-0596100520
+</p>
+<p>
+ Cisco Wireless LAN Security
+ Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky
+ ISBN: 978-1587051548
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSetting8021x.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMSetting8021xCKFormat-enum"></a><h3>enum NMSetting8021xCKFormat</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; underscore_name=nm_setting_802_1x_ck_format &gt;*/
+ NM_SETTING_802_1X_CK_FORMAT_UNKNOWN = 0,
+ NM_SETTING_802_1X_CK_FORMAT_X509,
+ NM_SETTING_802_1X_CK_FORMAT_RAW_KEY,
+ NM_SETTING_802_1X_CK_FORMAT_PKCS12
+} NMSetting8021xCKFormat;
+</pre>
+<p>
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> values indicate the general type of a certificate
+or private key
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-error-quark" title="nm_setting_802_1x_error_quark ()">nm_setting_802_1x_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-new" title="nm_setting_802_1x_new ()">nm_setting_802_1x_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods" title="nm_setting_802_1x_get_num_eap_methods ()">nm_setting_802_1x_get_num_eap_methods</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-eap-method" title="nm_setting_802_1x_get_eap_method ()">nm_setting_802_1x_get_eap_method</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-eap-method" title="nm_setting_802_1x_add_eap_method ()">nm_setting_802_1x_add_eap_method</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method" title="nm_setting_802_1x_remove_eap_method ()">nm_setting_802_1x_remove_eap_method</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods" title="nm_setting_802_1x_clear_eap_methods ()">nm_setting_802_1x_clear_eap_methods</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-identity" title="nm_setting_802_1x_get_identity ()">nm_setting_802_1x_get_identity</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity" title="nm_setting_802_1x_get_anonymous_identity ()">nm_setting_802_1x_get_anonymous_identity</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pac-file" title="nm_setting_802_1x_get_pac_file ()">nm_setting_802_1x_get_pac_file</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-system-ca-certs" title="nm_setting_802_1x_get_system_ca_certs ()">nm_setting_802_1x_get_system_ca_certs</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-path" title="nm_setting_802_1x_get_ca_path ()">nm_setting_802_1x_get_ca_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-path" title="nm_setting_802_1x_get_phase2_ca_path ()">nm_setting_802_1x_get_phase2_ca_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-scheme" title="nm_setting_802_1x_get_ca_cert_scheme ()">nm_setting_802_1x_get_ca_cert_scheme</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()">nm_setting_802_1x_get_ca_cert_blob</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()">nm_setting_802_1x_get_ca_cert_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert" title="nm_setting_802_1x_set_ca_cert ()">nm_setting_802_1x_set_ca_cert</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-subject-match" title="nm_setting_802_1x_get_subject_match ()">nm_setting_802_1x_get_subject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-altsubject-matches" title="nm_setting_802_1x_get_num_altsubject_matches ()">nm_setting_802_1x_get_num_altsubject_matches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match" title="nm_setting_802_1x_get_altsubject_match ()">nm_setting_802_1x_get_altsubject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match" title="nm_setting_802_1x_add_altsubject_match ()">nm_setting_802_1x_add_altsubject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match" title="nm_setting_802_1x_remove_altsubject_match ()">nm_setting_802_1x_remove_altsubject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches" title="nm_setting_802_1x_clear_altsubject_matches ()">nm_setting_802_1x_clear_altsubject_matches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme" title="nm_setting_802_1x_get_client_cert_scheme ()">nm_setting_802_1x_get_client_cert_scheme</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()">nm_setting_802_1x_get_client_cert_blob</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()">nm_setting_802_1x_get_client_cert_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-client-cert" title="nm_setting_802_1x_set_client_cert ()">nm_setting_802_1x_set_client_cert</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peapver" title="nm_setting_802_1x_get_phase1_peapver ()">nm_setting_802_1x_get_phase1_peapver</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peaplabel" title="nm_setting_802_1x_get_phase1_peaplabel ()">nm_setting_802_1x_get_phase1_peaplabel</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-fast-provisioning" title="nm_setting_802_1x_get_phase1_fast_provisioning ()">nm_setting_802_1x_get_phase1_fast_provisioning</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-auth" title="nm_setting_802_1x_get_phase2_auth ()">nm_setting_802_1x_get_phase2_auth</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-autheap" title="nm_setting_802_1x_get_phase2_autheap ()">nm_setting_802_1x_get_phase2_autheap</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-scheme" title="nm_setting_802_1x_get_phase2_ca_cert_scheme ()">nm_setting_802_1x_get_phase2_ca_cert_scheme</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-blob" title="nm_setting_802_1x_get_phase2_ca_cert_blob ()">nm_setting_802_1x_get_phase2_ca_cert_blob</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-path" title="nm_setting_802_1x_get_phase2_ca_cert_path ()">nm_setting_802_1x_get_phase2_ca_cert_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert" title="nm_setting_802_1x_set_phase2_ca_cert ()">nm_setting_802_1x_set_phase2_ca_cert</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-subject-match" title="nm_setting_802_1x_get_phase2_subject_match ()">nm_setting_802_1x_get_phase2_subject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-phase2-altsubject-matches" title="nm_setting_802_1x_get_num_phase2_altsubject_matches ()">nm_setting_802_1x_get_num_phase2_altsubject_matches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match" title="nm_setting_802_1x_get_phase2_altsubject_match ()">nm_setting_802_1x_get_phase2_altsubject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match" title="nm_setting_802_1x_add_phase2_altsubject_match ()">nm_setting_802_1x_add_phase2_altsubject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match" title="nm_setting_802_1x_remove_phase2_altsubject_match ()">nm_setting_802_1x_remove_phase2_altsubject_match</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches" title="nm_setting_802_1x_clear_phase2_altsubject_matches ()">nm_setting_802_1x_clear_phase2_altsubject_matches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme" title="nm_setting_802_1x_get_phase2_client_cert_scheme ()">nm_setting_802_1x_get_phase2_client_cert_scheme</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob" title="nm_setting_802_1x_get_phase2_client_cert_blob ()">nm_setting_802_1x_get_phase2_client_cert_blob</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-path" title="nm_setting_802_1x_get_phase2_client_cert_path ()">nm_setting_802_1x_get_phase2_client_cert_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert" title="nm_setting_802_1x_set_phase2_client_cert ()">nm_setting_802_1x_set_phase2_client_cert</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password" title="nm_setting_802_1x_get_password ()">nm_setting_802_1x_get_password</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-flags" title="nm_setting_802_1x_get_password_flags ()">nm_setting_802_1x_get_password_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw" title="nm_setting_802_1x_get_password_raw ()">nm_setting_802_1x_get_password_raw</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw-flags" title="nm_setting_802_1x_get_password_raw_flags ()">nm_setting_802_1x_get_password_raw_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin" title="nm_setting_802_1x_get_pin ()">nm_setting_802_1x_get_pin</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin-flags" title="nm_setting_802_1x_get_pin_flags ()">nm_setting_802_1x_get_pin_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-scheme" title="nm_setting_802_1x_get_private_key_scheme ()">nm_setting_802_1x_get_private_key_scheme</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-802-1X-CK-FORMAT-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_CK_FORMAT_UNKNOWN</code></span></p></td>
+<td>unknown file format
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-blob" title="nm_setting_802_1x_get_private_key_blob ()">nm_setting_802_1x_get_private_key_blob</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-802-1X-CK-FORMAT-X509:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_CK_FORMAT_X509</code></span></p></td>
+<td>file contains an X.509 format certificate
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-path" title="nm_setting_802_1x_get_private_key_path ()">nm_setting_802_1x_get_private_key_path</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-802-1X-CK-FORMAT-RAW-KEY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_CK_FORMAT_RAW_KEY</code></span></p></td>
+<td>file contains an old-style OpenSSL PEM
+or DER private key
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()">nm_setting_802_1x_set_private_key</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password" title="nm_setting_802_1x_get_private_key_password ()">nm_setting_802_1x_get_private_key_password</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password-flags" title="nm_setting_802_1x_get_private_key_password_flags ()">nm_setting_802_1x_get_private_key_password_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-format" title="nm_setting_802_1x_get_private_key_format ()">nm_setting_802_1x_get_private_key_format</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-scheme" title="nm_setting_802_1x_get_phase2_private_key_scheme ()">nm_setting_802_1x_get_phase2_private_key_scheme</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-blob" title="nm_setting_802_1x_get_phase2_private_key_blob ()">nm_setting_802_1x_get_phase2_private_key_blob</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-path" title="nm_setting_802_1x_get_phase2_private_key_path ()">nm_setting_802_1x_get_phase2_private_key_path</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()">nm_setting_802_1x_set_phase2_private_key</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-802-1X-CK-FORMAT-PKCS12:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_CK_FORMAT_PKCS12</code></span></p></td>
+<td>file contains a PKCS<span class="type">12</span> certificate
+and private key
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSetting8021xCKScheme-enum"></a><h3>enum NMSetting8021xCKScheme</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; underscore_name=nm_setting_802_1x_ck_scheme &gt;*/
+ NM_SETTING_802_1X_CK_SCHEME_UNKNOWN = 0,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ NM_SETTING_802_1X_CK_SCHEME_PATH
+} NMSetting8021xCKScheme;
+</pre>
+<p>
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> values indicate how a certificate or private key is
+stored in the setting properties, either as a blob of the item's data, or as
+a path to a certificate or private key file on the filesystem
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password" title="nm_setting_802_1x_get_phase2_private_key_password ()">nm_setting_802_1x_get_phase2_private_key_password</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-802-1X-CK-SCHEME-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_UNKNOWN</code></span></p></td>
+<td>unknown certificate or private key
+scheme
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password-flags" title="nm_setting_802_1x_get_phase2_private_key_password_flags ()">nm_setting_802_1x_get_phase2_private_key_password_flags</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></span></p></td>
+<td>certificate or key is stored as the raw
+item data
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format" title="nm_setting_802_1x_get_phase2_private_key_format ()">nm_setting_802_1x_get_phase2_private_key_format</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></span></p></td>
+<td>certificate or key is stored as a path
+to a file containing the certificate or key data
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSetting8021x.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-SETTING-NAME:CAPS"></a><h3>NM_SETTING_802_1X_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_SETTING_NAME "802-1x"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSetting8021xError-enum"></a><h3>enum NMSetting8021xError</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; underscore_name=nm_setting_802_1x_error &gt;*/
+ NM_SETTING_802_1X_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY /*&lt; nick=MissingProperty &gt;*/
+} NMSetting8021xError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--altsubject-matches" title="The “altsubject-matches†property">altsubject-matches</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--anonymous-identity" title="The “anonymous-identity†property">anonymous-identity</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title="The “ca-cert†property">ca-cert</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-path" title="The “ca-path†property">ca-path</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--client-cert" title="The “client-cert†property">client-cert</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title="The “eap†property">eap</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--identity" title="The “identity†property">identity</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--pac-file" title="The “pac-file†property">pac-file</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title="The “password†property">password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--password-flags" title="The “password-flags†property">password-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title="The “password-raw†property">password-raw</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw-flags" title="The “password-raw-flags†property">password-raw-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning" title="The “phase1-fast-provisioning†property">phase1-fast-provisioning</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel" title="The “phase1-peaplabel†property">phase1-peaplabel</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peapver" title="The “phase1-peapver†property">phase1-peapver</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches" title="The “phase2-altsubject-matches†property">phase2-altsubject-matches</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title="The “phase2-auth†property">phase2-auth</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title="The “phase2-autheap†property">phase2-autheap</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title="The “phase2-ca-cert†property">phase2-ca-cert</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-path" title="The “phase2-ca-path†property">phase2-ca-path</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-client-cert" title="The “phase2-client-cert†property">phase2-client-cert</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title="The “phase2-private-key†property">phase2-private-key</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title="The “phase2-private-key-password†property">phase2-private-key-password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags" title="The “phase2-private-key-password-flags†property">phase2-private-key-password-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-subject-match" title="The “phase2-subject-match†property">phase2-subject-match</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title="The “pin†property">pin</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--pin-flags" title="The “pin-flags†property">pin-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title="The “private-key†property">private-key</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title="The “private-key-password†property">private-key-password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password-flags" title="The “private-key-password-flags†property">private-key-password-flags</a></td>
-<td class="property_flags">Read / Write</td>
+<td><p><a name="NM-SETTING-802-1X-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
</tr>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--subject-match" title="The “subject-match†property">subject-match</a></td>
-<td class="property_flags">Read / Write</td>
+<td><p><a name="NM-SETTING-802-1X-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title="The “system-ca-certs†property">system-ca-certs</a></td>
-<td class="property_flags">Read / Write / Construct</td>
+<td><p><a name="NM-SETTING-802-1X-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_802_1X_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSetting8021x.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-ERROR:CAPS"></a><h3>NM_SETTING_802_1X_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_ERROR nm_setting_802_1x_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-802-1x-error-quark"></a><h3>nm_setting_802_1x_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_802_1x_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat">NMSetting8021xCKFormat</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme">NMSetting8021xCKScheme</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-SETTING-NAME:CAPS" title="NM_SETTING_802_1X_SETTING_NAME">NM_SETTING_802_1X_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NMSetting8021xError" title="enum NMSetting8021xError">NMSetting8021xError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-ERROR:CAPS" title="NM_SETTING_802_1X_ERROR">NM_SETTING_802_1X_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-EAP:CAPS" title="NM_SETTING_802_1X_EAP">NM_SETTING_802_1X_EAP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-IDENTITY:CAPS" title="NM_SETTING_802_1X_IDENTITY">NM_SETTING_802_1X_IDENTITY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS" title="NM_SETTING_802_1X_ANONYMOUS_IDENTITY">NM_SETTING_802_1X_ANONYMOUS_IDENTITY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PAC-FILE:CAPS" title="NM_SETTING_802_1X_PAC_FILE">NM_SETTING_802_1X_PAC_FILE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CA-CERT:CAPS" title="NM_SETTING_802_1X_CA_CERT">NM_SETTING_802_1X_CA_CERT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CA-PATH:CAPS" title="NM_SETTING_802_1X_CA_PATH">NM_SETTING_802_1X_CA_PATH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-SUBJECT-MATCH:CAPS" title="NM_SETTING_802_1X_SUBJECT_MATCH">NM_SETTING_802_1X_SUBJECT_MATCH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS" title="NM_SETTING_802_1X_ALTSUBJECT_MATCHES">NM_SETTING_802_1X_ALTSUBJECT_MATCHES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CLIENT-CERT:CAPS" title="NM_SETTING_802_1X_CLIENT_CERT">NM_SETTING_802_1X_CLIENT_CERT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS" title="NM_SETTING_802_1X_PHASE1_PEAPVER">NM_SETTING_802_1X_PHASE1_PEAPVER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS" title="NM_SETTING_802_1X_PHASE1_PEAPLABEL">NM_SETTING_802_1X_PHASE1_PEAPLABEL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS" title="NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING">NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTH:CAPS" title="NM_SETTING_802_1X_PHASE2_AUTH">NM_SETTING_802_1X_PHASE2_AUTH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS" title="NM_SETTING_802_1X_PHASE2_AUTHEAP">NM_SETTING_802_1X_PHASE2_AUTHEAP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS" title="NM_SETTING_802_1X_PHASE2_CA_CERT">NM_SETTING_802_1X_PHASE2_CA_CERT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS" title="NM_SETTING_802_1X_PHASE2_CA_PATH">NM_SETTING_802_1X_PHASE2_CA_PATH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS" title="NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH">NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS" title="NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES">NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS" title="NM_SETTING_802_1X_PHASE2_CLIENT_CERT">NM_SETTING_802_1X_PHASE2_CLIENT_CERT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD:CAPS" title="NM_SETTING_802_1X_PASSWORD">NM_SETTING_802_1X_PASSWORD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PASSWORD_FLAGS">NM_SETTING_802_1X_PASSWORD_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW:CAPS" title="NM_SETTING_802_1X_PASSWORD_RAW">NM_SETTING_802_1X_PASSWORD_RAW</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS" title="NM_SETTING_802_1X_PASSWORD_RAW_FLAGS">NM_SETTING_802_1X_PASSWORD_RAW_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY">NM_SETTING_802_1X_PRIVATE_KEY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD">NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS">NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PIN:CAPS" title="NM_SETTING_802_1X_PIN">NM_SETTING_802_1X_PIN</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-PIN-FLAGS:CAPS" title="NM_SETTING_802_1X_PIN_FLAGS">NM_SETTING_802_1X_PIN_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS" title="NM_SETTING_802_1X_SYSTEM_CA_CERTS">NM_SETTING_802_1X_SYSTEM_CA_CERTS</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSetting8021x.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">├──</span> NMSetting8021xCKFormat
- <span class="lineart">├──</span> NMSetting8021xCKScheme
- <span class="lineart">╰──</span> NMSetting8021xError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSetting8021x
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-EAP:CAPS"></a><h3>NM_SETTING_802_1X_EAP</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_EAP "eap"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSetting8021x.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-8021x.h&gt;
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-IDENTITY:CAPS"></a><h3>NM_SETTING_802_1X_IDENTITY</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_IDENTITY "identity"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSetting8021x.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-properties necessary for connection to 802.1x-authenticated networks, such as
-WPA and WPA2 Enterprise WiFi networks and wired 802.1x networks. 802.1x
-connections typically use certificates and/or EAP authentication methods to
-securely verify, identify, and authenticate the client to the network itself,
-instead of simply relying on a widely shared static key.</p>
-<p>It's a good idea to read up on wpa_supplicant configuration before using this
-setting extensively, since most of the options here correspond closely with
-the relevant wpa_supplicant configuration options.</p>
-<p>Furthermore, to get a good idea of 802.1x, EAP, TLS, TTLS, etc and their
-applications to WiFi and wired networks, you'll want to get copies of the
-following books.</p>
-<p> 802.11 Wireless Networks: The Definitive Guide, Second Edition
- Author: Matthew Gast
- ISBN: 978-0596100520</p>
-<p> Cisco Wireless LAN Security
- Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky
- ISBN: 978-1587051548</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS"></a><h3>NM_SETTING_802_1X_ANONYMOUS_IDENTITY</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_ANONYMOUS_IDENTITY "anonymous-identity"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSetting8021x.functions_details"></a><h2>Functions</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PAC-FILE:CAPS"></a><h3>NM_SETTING_802_1X_PAC_FILE</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PAC_FILE "pac-file"
+</pre>
+<p>
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-error-quark"></a><h3>nm_setting_802_1x_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_802_1x_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> errors.</p>
-<p></p>
+<a name="NM-SETTING-802-1X-CA-CERT:CAPS"></a><h3>NM_SETTING_802_1X_CA_CERT</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_CA_CERT "ca-cert"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-CA-PATH:CAPS"></a><h3>NM_SETTING_802_1X_CA_PATH</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_CA_PATH "ca-path"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-new"></a><h3>nm_setting_802_1x_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_802_1x_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> object</p>
-<p></p>
+<a name="NM-SETTING-802-1X-SUBJECT-MATCH:CAPS"></a><h3>NM_SETTING_802_1X_SUBJECT_MATCH</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_SUBJECT_MATCH "subject-match"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS"></a><h3>NM_SETTING_802_1X_ALTSUBJECT_MATCHES</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_ALTSUBJECT_MATCHES "altsubject-matches"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-num-eap-methods"></a><h3>nm_setting_802_1x_get_num_eap_methods ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_802_1x_get_num_eap_methods (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the number of eap methods allowed for use when connecting to the
-network. Generally only one EAP method is used. Use the functions
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-eap-method" title="nm_setting_802_1x_get_eap_method ()"><code class="function">nm_setting_802_1x_get_eap_method()</code></a>, <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-eap-method" title="nm_setting_802_1x_add_eap_method ()"><code class="function">nm_setting_802_1x_add_eap_method()</code></a>,
-and <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method" title="nm_setting_802_1x_remove_eap_method ()"><code class="function">nm_setting_802_1x_remove_eap_method()</code></a> for adding, removing, and retrieving
-allowed EAP methods.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NM-SETTING-802-1X-CLIENT-CERT:CAPS"></a><h3>NM_SETTING_802_1X_CLIENT_CERT</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_CLIENT_CERT "client-cert"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS"></a><h3>NM_SETTING_802_1X_PHASE1_PEAPVER</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE1_PEAPVER "phase1-peapver"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS"></a><h3>NM_SETTING_802_1X_PHASE1_PEAPLABEL</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE1_PEAPLABEL "phase1-peaplabel"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS"></a><h3>NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING "phase1-fast-provisioning"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-AUTH:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_AUTH</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_AUTH "phase2-auth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_AUTHEAP</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_AUTHEAP "phase2-autheap"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_CA_CERT</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_CA_CERT "phase2-ca-cert"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_CA_PATH</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_CA_PATH "phase2-ca-path"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH "phase2-subject-match"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES "phase2-altsubject-matches"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_CLIENT_CERT</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_CLIENT_CERT "phase2-client-cert"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PASSWORD:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD "password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD_FLAGS "password-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PASSWORD-RAW:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD_RAW</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD_RAW "password-raw"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD_RAW_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD_RAW_FLAGS "password-raw-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PRIVATE-KEY:CAPS"></a><h3>NM_SETTING_802_1X_PRIVATE_KEY</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PRIVATE_KEY "private-key"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS"></a><h3>NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD "private-key-password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS "private-key-password-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_PRIVATE_KEY</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY "phase2-private-key"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD "phase2-private-key-password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS "phase2-private-key-password-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PIN:CAPS"></a><h3>NM_SETTING_802_1X_PIN</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PIN "pin"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-PIN-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PIN_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_PIN_FLAGS "pin-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS"></a><h3>NM_SETTING_802_1X_SYSTEM_CA_CERTS</h3>
+<pre class="programlisting">#define NM_SETTING_802_1X_SYSTEM_CA_CERTS "system-ca-certs"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSetting8021x-struct"></a><h3>NMSetting8021x</h3>
+<pre class="programlisting">typedef struct _NMSetting8021x NMSetting8021x;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSetting8021xClass"></a><h3>NMSetting8021xClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSetting8021xClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-802-1x-new"></a><h3>nm_setting_802_1x_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_802_1x_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> object</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.4.6"></a><h4>Returns</h4>
-<p> the number of allowed EAP methods</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-eap-method"></a><h3>nm_setting_802_1x_get_eap_method ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_eap_method (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Returns the name of the allowed EAP method at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-num-eap-methods"></a><h3>nm_setting_802_1x_get_num_eap_methods ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_802_1x_get_num_eap_methods
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the number of eap methods allowed for use when connecting to the
+network. Generally only one EAP method is used. Use the functions
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-eap-method" title="nm_setting_802_1x_get_eap_method ()"><code class="function">nm_setting_802_1x_get_eap_method()</code></a>, <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-eap-method" title="nm_setting_802_1x_add_eap_method ()"><code class="function">nm_setting_802_1x_add_eap_method()</code></a>,
+and <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method" title="nm_setting_802_1x_remove_eap_method ()"><code class="function">nm_setting_802_1x_remove_eap_method()</code></a> for adding, removing, and retrieving
+allowed EAP methods.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the index of the EAP method name to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of allowed EAP methods</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.5.6"></a><h4>Returns</h4>
-<p> the name of the allowed EAP method at index <em class="parameter"><code>i</code></em>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-802-1x-get-eap-method"></a><h3>nm_setting_802_1x_get_eap_method ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_eap_method (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Returns the name of the allowed EAP method at index <em class="parameter"><code>i</code></em>.
</p>
-<p></p>
-</div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the index of the EAP method name to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name of the allowed EAP method at index <em class="parameter"><code>i</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-add-eap-method"></a><h3>nm_setting_802_1x_add_eap_method ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_add_eap_method (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *eap</code></em>);</pre>
-<p>Adds an allowed EAP method. The setting is not valid until at least one
-EAP method has been added. See <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title="The “eap†property"><span class="type">“eapâ€</span></a> property for a list of
-allowed EAP methods.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-add-eap-method"></a><h3>nm_setting_802_1x_add_eap_method ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_add_eap_method (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *eap</code></em>);</pre>
+<p>
+Adds an allowed EAP method. The setting is not valid until at least one
+EAP method has been added. See <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property for a list of
+allowed EAP methods.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>eap</code></em> :</span></p></td>
+<td>the name of the EAP method to allow for this connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>eap</p></td>
-<td class="parameter_description"><p>the name of the EAP method to allow for this connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the EAP method was successfully added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was
+not a valid method or if it was already allowed.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.6.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the EAP method was successfully added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was
-not a valid method or if it was already allowed.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-remove-eap-method"></a><h3>nm_setting_802_1x_remove_eap_method ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_802_1x_remove_eap_method (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the allowed EAP method at the specified index.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-remove-eap-method"></a><h3>nm_setting_802_1x_remove_eap_method ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_802_1x_remove_eap_method (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the allowed EAP method at the specified index.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the index of the EAP method to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the index of the EAP method to remove</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-clear-eap-methods"></a><h3>nm_setting_802_1x_clear_eap_methods ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_802_1x_clear_eap_methods (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Clears all allowed EAP methods.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-remove-eap-method-by-value"></a><h3>nm_setting_802_1x_remove_eap_method_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_remove_eap_method_by_value
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *eap</code></em>);</pre>
+<p>
+Removes the allowed EAP method <em class="parameter"><code>method</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>eap</code></em> :</span></p></td>
+<td>the name of the EAP method to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the EAP method was founs and removed, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-identity"></a><h3>nm_setting_802_1x_get_identity ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_identity (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the identifier used by some EAP methods (like TLS) to
-authenticate the user. Often this is a username or login name.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-clear-eap-methods"></a><h3>nm_setting_802_1x_clear_eap_methods ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_802_1x_clear_eap_methods (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Clears all allowed EAP methods.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.9.6"></a><h4>Returns</h4>
-<p> the user identifier</p>
-<p></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-802-1x-get-identity"></a><h3>nm_setting_802_1x_get_identity ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_identity (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the identifier used by some EAP methods (like TLS) to
+authenticate the user. Often this is a username or login name.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the user identifier</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-anonymous-identity"></a><h3>nm_setting_802_1x_get_anonymous_identity ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_anonymous_identity
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the anonymous identifier used by some EAP methods (like TTLS) to
+<a name="nm-setting-802-1x-get-anonymous-identity"></a><h3>nm_setting_802_1x_get_anonymous_identity ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_anonymous_identity
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the anonymous identifier used by some EAP methods (like TTLS) to
authenticate the user in the outer unencrypted "phase 1" authentication. The
-inner "phase 2" authentication will use the <a class="link" href="NMSetting8021x.html#NMSetting8021x--identity" title="The “identity†property"><span class="type">“identityâ€</span></a> in
-a secure form, if applicable for that EAP method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+inner "phase 2" authentication will use the <a class="link" href="NMSetting8021x.html#NMSetting8021x--identity" title='The "identity" property'><span class="type">"identity"</span></a> in
+a secure form, if applicable for that EAP method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the anonymous identifier</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.10.6"></a><h4>Returns</h4>
-<p> the anonymous identifier</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-pac-file"></a><h3>nm_setting_802_1x_get_pac_file ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_pac_file (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the file containing PAC credentials used by EAP-FAST method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-pac-file"></a><h3>nm_setting_802_1x_get_pac_file ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_pac_file (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the file containing PAC credentials used by EAP-FAST method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the PAC file</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.11.6"></a><h4>Returns</h4>
-<p> the PAC file</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-system-ca-certs"></a><h3>nm_setting_802_1x_get_system_ca_certs ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_get_system_ca_certs (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title="The “system-ca-certs†property"><span class="type">“system-ca-certsâ€</span></a> property. The
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-path" title="The “ca-path†property"><span class="type">“ca-pathâ€</span></a> and <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-path" title="The “phase2-ca-path†property"><span class="type">“phase2-ca-pathâ€</span></a>
-properties are ignored if the <a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title="The “system-ca-certs†property"><span class="type">“system-ca-certsâ€</span></a> property is
+<a name="nm-setting-802-1x-get-system-ca-certs"></a><h3>nm_setting_802_1x_get_system_ca_certs ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_get_system_ca_certs
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title='The "system-ca-certs" property'><span class="type">"system-ca-certs"</span></a> property. The
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-path" title='The "ca-path" property'><span class="type">"ca-path"</span></a> and <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-path" title='The "phase2-ca-path" property'><span class="type">"phase2-ca-path"</span></a>
+properties are ignored if the <a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title='The "system-ca-certs" property'><span class="type">"system-ca-certs"</span></a> property is
<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, in which case a system-wide CA certificate directory specified at
compile time (using the --system-ca-path configure option) is used in place
-of these properties.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+of these properties.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a system CA certificate path should be used, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.12.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a system CA certificate path should be used, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-ca-path"></a><h3>nm_setting_802_1x_get_ca_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_ca_path (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the path of the CA certificate directory if previously set. Systems
+<a name="nm-setting-802-1x-get-ca-path"></a><h3>nm_setting_802_1x_get_ca_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_ca_path (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the path of the CA certificate directory if previously set. Systems
will often have a directory that contains multiple individual CA certificates
which the supplicant can then add to the verification chain. This may be
-used in addition to the <a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title="The “ca-cert†property"><span class="type">“ca-certâ€</span></a> property to add more CA
-certificates for verifying the network to client.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+used in addition to the <a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title='The "ca-cert" property'><span class="type">"ca-cert"</span></a> property to add more CA
+certificates for verifying the network to client.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the CA certificate directory path</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.13.6"></a><h4>Returns</h4>
-<p> the CA certificate directory path</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-ca-path"></a><h3>nm_setting_802_1x_get_phase2_ca_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_ca_path (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the path of the "phase 2" CA certificate directory if previously set.
+<a name="nm-setting-802-1x-get-phase2-ca-path"></a><h3>nm_setting_802_1x_get_phase2_ca_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_ca_path
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the path of the "phase 2" CA certificate directory if previously set.
Systems will often have a directory that contains multiple individual CA
certificates which the supplicant can then add to the verification chain.
-This may be used in addition to the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title="The “phase2-ca-cert†property"><span class="type">“phase2-ca-certâ€</span></a> property
-to add more CA certificates for verifying the network to client.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+This may be used in addition to the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title='The "phase2-ca-cert" property'><span class="type">"phase2-ca-cert"</span></a> property
+to add more CA certificates for verifying the network to client.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 2" CA certificate directory path</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.14.6"></a><h4>Returns</h4>
-<p> the "phase 2" CA certificate directory path</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-ca-cert-scheme"></a><h3>nm_setting_802_1x_get_ca_cert_scheme ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-nm_setting_802_1x_get_ca_cert_scheme (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the scheme used to store the CA certificate. If the returned scheme
-is <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()"><code class="function">nm_setting_802_1x_get_ca_cert_blob()</code></a>;
-if <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()"><code class="function">nm_setting_802_1x_get_ca_cert_path()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-ca-cert-scheme"></a><h3>nm_setting_802_1x_get_ca_cert_scheme ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> nm_setting_802_1x_get_ca_cert_scheme
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the scheme used to store the CA certificate. If the returned scheme
+is <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()"><code class="function">nm_setting_802_1x_get_ca_cert_blob()</code></a>;
+if <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()"><code class="function">nm_setting_802_1x_get_ca_cert_path()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>scheme used to store the CA certificate (blob or path)</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.15.6"></a><h4>Returns</h4>
-<p> scheme used to store the CA certificate (blob or path)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-ca-cert-blob"></a><h3>nm_setting_802_1x_get_ca_cert_blob ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_802_1x_get_ca_cert_blob (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the CA certificate blob if the CA certificate is stored using the
+<a name="nm-setting-802-1x-get-ca-cert-blob"></a><h3>nm_setting_802_1x_get_ca_cert_blob ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_802_1x_get_ca_cert_blob (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the CA certificate blob if the CA certificate is stored using the
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme. Not all EAP methods use a
CA certificate (LEAP for example), and those that can take advantage of the
CA certificate allow it to be unset. Note that lack of a CA certificate
reduces security by allowing man-in-the-middle attacks, because the identity
-of the network cannot be confirmed by the client.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+of the network cannot be confirmed by the client.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the CA certificate data</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.16.6"></a><h4>Returns</h4>
-<p> the CA certificate data</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-ca-cert-path"></a><h3>nm_setting_802_1x_get_ca_cert_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_ca_cert_path (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the CA certificate path if the CA certificate is stored using the
+<a name="nm-setting-802-1x-get-ca-cert-path"></a><h3>nm_setting_802_1x_get_ca_cert_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_ca_cert_path (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the CA certificate path if the CA certificate is stored using the
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme. Not all EAP methods use a
CA certificate (LEAP for example), and those that can take advantage of the
CA certificate allow it to be unset. Note that lack of a CA certificate
reduces security by allowing man-in-the-middle attacks, because the identity
-of the network cannot be confirmed by the client.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+of the network cannot be confirmed by the client.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>path to the CA certificate file</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.17.6"></a><h4>Returns</h4>
-<p> path to the CA certificate file</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-set-ca-cert"></a><h3>nm_setting_802_1x_set_ca_cert ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_set_ca_cert (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title="The “ca-cert†property"><span class="type">“ca-certâ€</span></a> property
+<a name="nm-setting-802-1x-set-ca-cert"></a><h3>nm_setting_802_1x_set_ca_cert ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_ca_cert (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title='The "ca-cert" property'><span class="type">"ca-cert"</span></a> property
with the raw certificate data if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>
scheme, or with the path to the certificate file if using the
-<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>cert_path</p></td>
-<td class="parameter_description"><p>when <em class="parameter"><code>scheme</code></em>
-is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the CA certificate
file (PEM or DER format). The path must be UTF-8 encoded; use
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> with any <em class="parameter"><code>scheme</code></em>
-clears the CA certificate.</p></td>
-<td class="parameter_annotations"> </td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> with any <em class="parameter"><code>scheme</code></em>
+clears the CA certificate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
+<td>desired storage scheme for the certificate</td>
</tr>
<tr>
-<td class="parameter_name"><p>scheme</p></td>
-<td class="parameter_description"><p>desired storage scheme for the certificate</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_format</code></em> :</span></p></td>
+<td>on successful return, the type of the certificate added</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_format</p></td>
-<td class="parameter_description"><p>on successful return, the type of the certificate added</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on unsuccessful return, an error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.18.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-subject-match"></a><h3>nm_setting_802_1x_get_subject_match ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_subject_match (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.19.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-subject-match"></a><h3>nm_setting_802_1x_get_subject_match ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_subject_match (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.19.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting8021x.html#NMSetting8021x--subject-match" title="The “subject-match†property"><span class="type">“subject-matchâ€</span></a> property. This is the
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html#NMSetting8021x--subject-match" title='The "subject-match" property'><span class="type">"subject-match"</span></a> property. This is the
substring to be matched against the subject of the authentication
-server certificate, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> no subject verification is to be
-performed.</p>
-<p></p>
-</div>
+server certificate, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> no subject verification is to be
+performed.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-num-altsubject-matches"></a><h3>nm_setting_802_1x_get_num_altsubject_matches ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_802_1x_get_num_altsubject_matches
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the number of entries in the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--altsubject-matches" title="The “altsubject-matches†property"><span class="type">“altsubject-matchesâ€</span></a> property of this setting.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-num-altsubject-matches"></a><h3>nm_setting_802_1x_get_num_altsubject_matches ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_802_1x_get_num_altsubject_matches
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the number of entries in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--altsubject-matches" title='The "altsubject-matches" property'><span class="type">"altsubject-matches"</span></a> property of this setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of altsubject-matches entries.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.20.6"></a><h4>Returns</h4>
-<p> the number of altsubject-matches entries.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-altsubject-match"></a><h3>nm_setting_802_1x_get_altsubject_match ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_altsubject_match
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Returns the altSubjectName match at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-altsubject-match"></a><h3>nm_setting_802_1x_get_altsubject_match ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_altsubject_match
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Returns the altSubjectName match at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the zero-based index of the array of altSubjectName matches</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the zero-based index of the array of altSubjectName matches</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the altSubjectName match at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.21.6"></a><h4>Returns</h4>
-<p> the altSubjectName match at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-add-altsubject-match"></a><h3>nm_setting_802_1x_add_altsubject_match ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_add_altsubject_match
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *altsubject_match</code></em>);</pre>
-<p>Adds an allowed alternate subject name match. Until at least one
+<a name="nm-setting-802-1x-add-altsubject-match"></a><h3>nm_setting_802_1x_add_altsubject_match ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_add_altsubject_match
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *altsubject_match</code></em>);</pre>
+<p>
+Adds an allowed alternate subject name match. Until at least one
match is added, the altSubjectName of the remote authentication
-server is not verified.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+server is not verified.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>altsubject_match</code></em> :</span></p></td>
+<td>the altSubjectName to allow for this connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>altsubject_match</p></td>
-<td class="parameter_description"><p>the altSubjectName to allow for this connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the alternative subject name match was
+successfully added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was already allowed.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.22.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the alternative subject name match was
-successfully added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was already allowed.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-remove-altsubject-match"></a><h3>nm_setting_802_1x_remove_altsubject_match ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_802_1x_remove_altsubject_match
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the allowed altSubjectName at the specified index.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-remove-altsubject-match"></a><h3>nm_setting_802_1x_remove_altsubject_match ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_802_1x_remove_altsubject_match
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the allowed altSubjectName at the specified index.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the index of the altSubjectName match to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the index of the altSubjectName match to remove</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-clear-altsubject-matches"></a><h3>nm_setting_802_1x_clear_altsubject_matches ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_802_1x_clear_altsubject_matches
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Clears all altSubjectName matches.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-remove-altsubject-match-by-value"></a><h3>nm_setting_802_1x_remove_altsubject_match_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_remove_altsubject_match_by_value
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *altsubject_match</code></em>);</pre>
+<p>
+Removes the allowed altSubjectName <em class="parameter"><code>altsubject_match</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>altsubject_match</code></em> :</span></p></td>
+<td>the altSubjectName to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the alternative subject name match was found and removed,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-client-cert-scheme"></a><h3>nm_setting_802_1x_get_client_cert_scheme ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-nm_setting_802_1x_get_client_cert_scheme
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the scheme used to store the client certificate. If the returned scheme
-is <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>;
-if <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-clear-altsubject-matches"></a><h3>nm_setting_802_1x_clear_altsubject_matches ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_802_1x_clear_altsubject_matches
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Clears all altSubjectName matches.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.25.6"></a><h4>Returns</h4>
-<p> scheme used to store the client certificate (blob or path)</p>
-<p></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-802-1x-get-client-cert-scheme"></a><h3>nm_setting_802_1x_get_client_cert_scheme ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> nm_setting_802_1x_get_client_cert_scheme
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the scheme used to store the client certificate. If the returned scheme
+is <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>;
+if <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>, use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>scheme used to store the client certificate (blob or path)</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-client-cert-blob"></a><h3>nm_setting_802_1x_get_client_cert_blob ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_802_1x_get_client_cert_blob
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Client certificates are used to identify the connecting client to the network
+<a name="nm-setting-802-1x-get-client-cert-blob"></a><h3>nm_setting_802_1x_get_client_cert_blob ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_802_1x_get_client_cert_blob
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Client certificates are used to identify the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the client certificate data</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.26.6"></a><h4>Returns</h4>
-<p> the client certificate data</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-client-cert-path"></a><h3>nm_setting_802_1x_get_client_cert_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_client_cert_path
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Client certificates are used to identify the connecting client to the network
+<a name="nm-setting-802-1x-get-client-cert-path"></a><h3>nm_setting_802_1x_get_client_cert_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_client_cert_path
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Client certificates are used to identify the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.27.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>path to the client certificate file</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.27.6"></a><h4>Returns</h4>
-<p> path to the client certificate file</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-set-client-cert"></a><h3>nm_setting_802_1x_set_client_cert ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_set_client_cert (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--client-cert" title="The “client-cert†property"><span class="type">“client-certâ€</span></a>
+<a name="nm-setting-802-1x-set-client-cert"></a><h3>nm_setting_802_1x_set_client_cert ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_client_cert (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--client-cert" title='The "client-cert" property'><span class="type">"client-cert"</span></a>
property with the raw certificate data if using the
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the certificate
-file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p>
-<p>Client certificates are used to identify the connecting client to the network
+file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.
+</p>
+<p>
+Client certificates are used to identify the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.28.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>cert_path</p></td>
-<td class="parameter_description"><p>when <em class="parameter"><code>scheme</code></em>
-is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the client
certificate file (PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8
-encoded; use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> with
-any <em class="parameter"><code>scheme</code></em>
-clears the client certificate.</p></td>
-<td class="parameter_annotations"> </td>
+encoded; use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> with
+any <em class="parameter"><code>scheme</code></em> clears the client certificate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
+<td>desired storage scheme for the certificate</td>
</tr>
<tr>
-<td class="parameter_name"><p>scheme</p></td>
-<td class="parameter_description"><p>desired storage scheme for the certificate</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_format</code></em> :</span></p></td>
+<td>on successful return, the type of the certificate added</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_format</p></td>
-<td class="parameter_description"><p>on successful return, the type of the certificate added</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on unsuccessful return, an error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.28.7"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase1-peapver"></a><h3>nm_setting_802_1x_get_phase1_peapver ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase1_peapver (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.29.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase1-peapver"></a><h3>nm_setting_802_1x_get_phase1_peapver ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase1_peapver
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 1" PEAP version to be used when authenticating with
+EAP-PEAP as contained in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peapver" title='The "phase1-peapver" property'><span class="type">"phase1-peapver"</span></a> property. Valid
+values are <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> (unset), "0" (PEAP version 0), and "1" (PEAP version 1).</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.29.5"></a><h4>Returns</h4>
-<p> the "phase 1" PEAP version to be used when authenticating with
-EAP-PEAP as contained in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peapver" title="The “phase1-peapver†property"><span class="type">“phase1-peapverâ€</span></a> property. Valid
-values are <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (unset), "0" (PEAP version 0), and "1" (PEAP version 1).</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase1-peaplabel"></a><h3>nm_setting_802_1x_get_phase1_peaplabel ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase1_peaplabel
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.30.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase1-peaplabel"></a><h3>nm_setting_802_1x_get_phase1_peaplabel ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase1_peaplabel
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.30.5"></a><h4>Returns</h4>
-<p> whether the "phase 1" PEAP label is new-style or old-style, to be
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>whether the "phase 1" PEAP label is new-style or old-style, to be
used when authenticating with EAP-PEAP, as contained in the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel" title="The “phase1-peaplabel†property"><span class="type">“phase1-peaplabelâ€</span></a> property. Valid values are <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (unset),
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel" title='The "phase1-peaplabel" property'><span class="type">"phase1-peaplabel"</span></a> property. Valid values are <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> (unset),
"0" (use old-style label), and "1" (use new-style label). See the
-wpa_supplicant documentation for more details.</p>
-<p></p>
-</div>
+wpa_supplicant documentation for more details.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase1-fast-provisioning"></a><h3>nm_setting_802_1x_get_phase1_fast_provisioning ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase1_fast_provisioning
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.31.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase1-fast-provisioning"></a><h3>nm_setting_802_1x_get_phase1_fast_provisioning ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase1_fast_provisioning
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>whether "phase 1" PEAP fast provisioning should be used, as specified
+by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning" title='The "phase1-fast-provisioning" property'><span class="type">"phase1-fast-provisioning"</span></a> property. See the
+wpa_supplicant documentation for more details.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.31.5"></a><h4>Returns</h4>
-<p> whether "phase 1" PEAP fast provisioning should be used, as specified
-by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning" title="The “phase1-fast-provisioning†property"><span class="type">“phase1-fast-provisioningâ€</span></a> property. See the
-wpa_supplicant documentation for more details.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-auth"></a><h3>nm_setting_802_1x_get_phase2_auth ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_auth (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.32.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase2-auth"></a><h3>nm_setting_802_1x_get_phase2_auth ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_auth (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 2" non-EAP (ex MD5) allowed authentication method as
+specified by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title='The "phase2-auth" property'><span class="type">"phase2-auth"</span></a> property.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.32.5"></a><h4>Returns</h4>
-<p> the "phase 2" non-EAP (ex MD5) allowed authentication method as
-specified by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title="The “phase2-auth†property"><span class="type">“phase2-authâ€</span></a> property.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-autheap"></a><h3>nm_setting_802_1x_get_phase2_autheap ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_autheap (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.33.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase2-autheap"></a><h3>nm_setting_802_1x_get_phase2_autheap ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_autheap
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 2" EAP-based (ex TLS) allowed authentication method as
+specified by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title='The "phase2-autheap" property'><span class="type">"phase2-autheap"</span></a> property.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.33.5"></a><h4>Returns</h4>
-<p> the "phase 2" EAP-based (ex TLS) allowed authentication method as
-specified by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title="The “phase2-autheap†property"><span class="type">“phase2-autheapâ€</span></a> property.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-ca-cert-scheme"></a><h3>nm_setting_802_1x_get_phase2_ca_cert_scheme ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-nm_setting_802_1x_get_phase2_ca_cert_scheme
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the scheme used to store the "phase 2" CA certificate. If the
+<a name="nm-setting-802-1x-get-phase2-ca-cert-scheme"></a><h3>nm_setting_802_1x_get_phase2_ca_cert_scheme ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> nm_setting_802_1x_get_phase2_ca_cert_scheme
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the scheme used to store the "phase 2" CA certificate. If the
returned scheme is <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()"><code class="function">nm_setting_802_1x_get_ca_cert_blob()</code></a>; if <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>,
-use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()"><code class="function">nm_setting_802_1x_get_ca_cert_path()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.34.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()"><code class="function">nm_setting_802_1x_get_ca_cert_blob()</code></a>; if <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>,
+use <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()"><code class="function">nm_setting_802_1x_get_ca_cert_path()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>scheme used to store the "phase 2" CA certificate (blob or path)</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.34.6"></a><h4>Returns</h4>
-<p> scheme used to store the "phase 2" CA certificate (blob or path)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-ca-cert-blob"></a><h3>nm_setting_802_1x_get_phase2_ca_cert_blob ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_802_1x_get_phase2_ca_cert_blob
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the "phase 2" CA certificate blob if the CA certificate is stored
+<a name="nm-setting-802-1x-get-phase2-ca-cert-blob"></a><h3>nm_setting_802_1x_get_phase2_ca_cert_blob ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_802_1x_get_phase2_ca_cert_blob
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the "phase 2" CA certificate blob if the CA certificate is stored
using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme. Not all EAP methods use
a CA certificate (LEAP for example), and those that can take advantage of the
CA certificate allow it to be unset. Note that lack of a CA certificate
reduces security by allowing man-in-the-middle attacks, because the identity
-of the network cannot be confirmed by the client.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.35.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+of the network cannot be confirmed by the client.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 2" CA certificate data</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.35.6"></a><h4>Returns</h4>
-<p> the "phase 2" CA certificate data</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-ca-cert-path"></a><h3>nm_setting_802_1x_get_phase2_ca_cert_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_ca_cert_path
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the "phase 2" CA certificate path if the CA certificate is stored
+<a name="nm-setting-802-1x-get-phase2-ca-cert-path"></a><h3>nm_setting_802_1x_get_phase2_ca_cert_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_ca_cert_path
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the "phase 2" CA certificate path if the CA certificate is stored
using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme. Not all EAP methods use
a CA certificate (LEAP for example), and those that can take advantage of the
CA certificate allow it to be unset. Note that lack of a CA certificate
reduces security by allowing man-in-the-middle attacks, because the identity
-of the network cannot be confirmed by the client.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.36.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+of the network cannot be confirmed by the client.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>path to the "phase 2" CA certificate file</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.36.6"></a><h4>Returns</h4>
-<p> path to the "phase 2" CA certificate file</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-set-phase2-ca-cert"></a><h3>nm_setting_802_1x_set_phase2_ca_cert ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_set_phase2_ca_cert (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title="The “phase2-ca-cert†property"><span class="type">“phase2-ca-certâ€</span></a>
+<a name="nm-setting-802-1x-set-phase2-ca-cert"></a><h3>nm_setting_802_1x_set_phase2_ca_cert ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_phase2_ca_cert
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title='The "phase2-ca-cert" property'><span class="type">"phase2-ca-cert"</span></a>
property with the raw certificate data if using the
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the certificate
-file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.37.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>cert_path</p></td>
-<td class="parameter_description"><p>when <em class="parameter"><code>scheme</code></em>
-is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" CA
certificate file (PEM or DER format). The path must be UTF-8 encoded; use
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> with any <em class="parameter"><code>scheme</code></em>
-clears the "phase2" CA certificate.</p></td>
-<td class="parameter_annotations"> </td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> with any <em class="parameter"><code>scheme</code></em>
+clears the "phase2" CA certificate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
+<td>desired storage scheme for the certificate</td>
</tr>
<tr>
-<td class="parameter_name"><p>scheme</p></td>
-<td class="parameter_description"><p>desired storage scheme for the certificate</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_format</code></em> :</span></p></td>
+<td>on successful return, the type of the certificate added</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_format</p></td>
-<td class="parameter_description"><p>on successful return, the type of the certificate added</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on unsuccessful return, an error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.37.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-subject-match"></a><h3>nm_setting_802_1x_get_phase2_subject_match ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_subject_match
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.38.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase2-subject-match"></a><h3>nm_setting_802_1x_get_phase2_subject_match ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_subject_match
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.38.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-subject-match" title="The “phase2-subject-match†property"><span class="type">“phase2-subject-matchâ€</span></a> property. This is
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-subject-match" title='The "phase2-subject-match" property'><span class="type">"phase2-subject-match"</span></a> property. This is
the substring to be matched against the subject of the "phase 2"
-authentication server certificate, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> no subject verification
-is to be performed.</p>
-<p></p>
-</div>
+authentication server certificate, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> no subject verification
+is to be performed.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-num-phase2-altsubject-matches"></a><h3>nm_setting_802_1x_get_num_phase2_altsubject_matches ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_802_1x_get_num_phase2_altsubject_matches
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the number of entries in the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches" title="The “phase2-altsubject-matches†property"><span class="type">“phase2-altsubject-matchesâ€</span></a> property of this setting.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.39.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-num-phase2-altsubject-matches"></a><h3>nm_setting_802_1x_get_num_phase2_altsubject_matches ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_802_1x_get_num_phase2_altsubject_matches
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the number of entries in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches" title='The "phase2-altsubject-matches" property'><span class="type">"phase2-altsubject-matches"</span></a> property of this setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of phase2-altsubject-matches entries.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.39.6"></a><h4>Returns</h4>
-<p> the number of phase2-altsubject-matches entries.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-altsubject-match"></a><h3>nm_setting_802_1x_get_phase2_altsubject_match ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_altsubject_match
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Returns the "phase 2" altSubjectName match at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.40.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase2-altsubject-match"></a><h3>nm_setting_802_1x_get_phase2_altsubject_match ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_altsubject_match
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Returns the "phase 2" altSubjectName match at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the zero-based index of the array of "phase 2" altSubjectName matches</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the zero-based index of the array of "phase 2" altSubjectName matches</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 2" altSubjectName match at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.40.6"></a><h4>Returns</h4>
-<p> the "phase 2" altSubjectName match at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-add-phase2-altsubject-match"></a><h3>nm_setting_802_1x_add_phase2_altsubject_match ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_add_phase2_altsubject_match
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *phase2_altsubject_match</code></em>);</pre>
-<p>Adds an allowed alternate subject name match for "phase 2". Until
+<a name="nm-setting-802-1x-add-phase2-altsubject-match"></a><h3>nm_setting_802_1x_add_phase2_altsubject_match ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_add_phase2_altsubject_match
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *phase2_altsubject_match</code></em>);</pre>
+<p>
+Adds an allowed alternate subject name match for "phase 2". Until
at least one match is added, the altSubjectName of the "phase 2"
-remote authentication server is not verified.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.41.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+remote authentication server is not verified.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>phase2_altsubject_match</code></em> :</span></p></td>
+<td>the "phase 2" altSubjectName to allow for this
+connection</td>
</tr>
<tr>
-<td class="parameter_name"><p>phase2_altsubject_match</p></td>
-<td class="parameter_description"><p>the "phase 2" altSubjectName to allow for this
-connection</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the "phase 2" alternative subject name match was
+successfully added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was already allowed.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.41.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the "phase 2" alternative subject name match was
-successfully added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was already allowed.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-remove-phase2-altsubject-match"></a><h3>nm_setting_802_1x_remove_phase2_altsubject_match ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_802_1x_remove_phase2_altsubject_match
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the allowed "phase 2" altSubjectName at the specified index.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.42.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-remove-phase2-altsubject-match"></a><h3>nm_setting_802_1x_remove_phase2_altsubject_match ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_802_1x_remove_phase2_altsubject_match
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the allowed "phase 2" altSubjectName at the specified index.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the index of the "phase 2" altSubjectName match to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the index of the "phase 2" altSubjectName match to remove</td>
</tr>
</tbody>
</table></div>
</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-802-1x-remove-phase2-altsubject-match-by-value"></a><h3>nm_setting_802_1x_remove_phase2_altsubject_match_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_remove_phase2_altsubject_match_by_value
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *phase2_altsubject_match</code></em>);</pre>
+<p>
+Removes the allowed "phase 2" altSubjectName <em class="parameter"><code>phase2_altsubject_match</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>phase2_altsubject_match</code></em> :</span></p></td>
+<td>the "phase 2" altSubjectName to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the alternative subject name match for "phase 2" was found and removed,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-clear-phase2-altsubject-matches"></a><h3>nm_setting_802_1x_clear_phase2_altsubject_matches ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_802_1x_clear_phase2_altsubject_matches
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Clears all "phase 2" altSubjectName matches.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.43.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-clear-phase2-altsubject-matches"></a><h3>nm_setting_802_1x_clear_phase2_altsubject_matches ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_802_1x_clear_phase2_altsubject_matches
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Clears all "phase 2" altSubjectName matches.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-client-cert-scheme"></a><h3>nm_setting_802_1x_get_phase2_client_cert_scheme ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-nm_setting_802_1x_get_phase2_client_cert_scheme
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the scheme used to store the "phase 2" client certificate. If the
+<a name="nm-setting-802-1x-get-phase2-client-cert-scheme"></a><h3>nm_setting_802_1x_get_phase2_client_cert_scheme ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> nm_setting_802_1x_get_phase2_client_cert_scheme
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the scheme used to store the "phase 2" client certificate. If the
returned scheme is <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>; if
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>; if
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>, use
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.44.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>scheme used to store the "phase 2" client certificate (blob or path)</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.44.6"></a><h4>Returns</h4>
-<p> scheme used to store the "phase 2" client certificate (blob or path)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-client-cert-blob"></a><h3>nm_setting_802_1x_get_phase2_client_cert_blob ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_802_1x_get_phase2_client_cert_blob
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Client certificates are used to identify the connecting client to the network
+<a name="nm-setting-802-1x-get-phase2-client-cert-blob"></a><h3>nm_setting_802_1x_get_phase2_client_cert_blob ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_802_1x_get_phase2_client_cert_blob
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Client certificates are used to identify the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.45.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 2" client certificate data</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.45.6"></a><h4>Returns</h4>
-<p> the "phase 2" client certificate data</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-client-cert-path"></a><h3>nm_setting_802_1x_get_phase2_client_cert_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_client_cert_path
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Client certificates are used to identify the connecting client to the network
+<a name="nm-setting-802-1x-get-phase2-client-cert-path"></a><h3>nm_setting_802_1x_get_phase2_client_cert_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_client_cert_path
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Client certificates are used to identify the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.46.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>path to the "phase 2" client certificate file</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.46.6"></a><h4>Returns</h4>
-<p> path to the "phase 2" client certificate file</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-set-phase2-client-cert"></a><h3>nm_setting_802_1x_set_phase2_client_cert ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_set_phase2_client_cert
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-client-cert" title="The “phase2-client-cert†property"><span class="type">“phase2-client-certâ€</span></a>
+<a name="nm-setting-802-1x-set-phase2-client-cert"></a><h3>nm_setting_802_1x_set_phase2_client_cert ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_phase2_client_cert
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Reads a certificate from disk and sets the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-client-cert" title='The "phase2-client-cert" property'><span class="type">"phase2-client-cert"</span></a>
property with the raw certificate data if using the
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the certificate
-file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p>
-<p>Client certificates are used to identify the connecting client to the network
+file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.
+</p>
+<p>
+Client certificates are used to identify the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.47.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>cert_path</p></td>
-<td class="parameter_description"><p>when <em class="parameter"><code>scheme</code></em>
-is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" client
certificate file (PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8
-encoded; use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> with
-any <em class="parameter"><code>scheme</code></em>
-clears the "phase2" client certificate.</p></td>
-<td class="parameter_annotations"> </td>
+encoded; use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> with
+any <em class="parameter"><code>scheme</code></em> clears the "phase2" client certificate.</td>
</tr>
<tr>
-<td class="parameter_name"><p>scheme</p></td>
-<td class="parameter_description"><p>desired storage scheme for the certificate</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
+<td>desired storage scheme for the certificate</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_format</p></td>
-<td class="parameter_description"><p>on successful return, the type of the certificate added</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_format</code></em> :</span></p></td>
+<td>on successful return, the type of the certificate added</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on unsuccessful return, an error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.47.7"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-password"></a><h3>nm_setting_802_1x_get_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_password (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.48.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-password"></a><h3>nm_setting_802_1x_get_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_password (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the password used by the authentication method, if any, as specified
+by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'><span class="type">"password"</span></a> property</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.48.5"></a><h4>Returns</h4>
-<p> the password used by the authentication method, if any, as specified
-by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title="The “password†property"><span class="type">“passwordâ€</span></a> property</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-password-flags"></a><h3>nm_setting_802_1x_get_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_802_1x_get_password_flags (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.49.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-password-flags"></a><h3>nm_setting_802_1x_get_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_802_1x_get_password_flags
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'><span class="type">"password"</span></a>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.49.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title="The “password†property"><span class="type">“passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-password-raw"></a><h3>nm_setting_802_1x_get_password_raw ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_802_1x_get_password_raw (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.50.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-password-raw"></a><h3>nm_setting_802_1x_get_password_raw ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_802_1x_get_password_raw (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.50.5"></a><h4>Returns</h4>
-<p> the password used by the authentication method as a
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the password used by the authentication method as a
UTF-8-encoded array of bytes, as specified by the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title="The “password-raw†property"><span class="type">“password-rawâ€</span></a> property</p>
-<p></p>
-</div>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'><span class="type">"password-raw"</span></a> property</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-password-raw-flags"></a><h3>nm_setting_802_1x_get_password_raw_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_802_1x_get_password_raw_flags
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.51.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-password-raw-flags"></a><h3>nm_setting_802_1x_get_password_raw_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_802_1x_get_password_raw_flags
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'><span class="type">"password-raw"</span></a>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.51.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title="The “password-raw†property"><span class="type">“password-rawâ€</span></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-pin"></a><h3>nm_setting_802_1x_get_pin ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_pin (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.52.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-pin"></a><h3>nm_setting_802_1x_get_pin ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_pin (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the PIN used by the authentication method, if any, as specified
+by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title='The "pin" property'><span class="type">"pin"</span></a> property</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.52.5"></a><h4>Returns</h4>
-<p> the PIN used by the authentication method, if any, as specified
-by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title="The “pin†property"><span class="type">“pinâ€</span></a> property</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-pin-flags"></a><h3>nm_setting_802_1x_get_pin_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_802_1x_get_pin_flags (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.53.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-pin-flags"></a><h3>nm_setting_802_1x_get_pin_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_802_1x_get_pin_flags (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title='The "pin" property'><span class="type">"pin"</span></a>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.53.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title="The “pin†property"><span class="type">“pinâ€</span></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-private-key-scheme"></a><h3>nm_setting_802_1x_get_private_key_scheme ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-nm_setting_802_1x_get_private_key_scheme
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the scheme used to store the private key. If the returned scheme is
+<a name="nm-setting-802-1x-get-private-key-scheme"></a><h3>nm_setting_802_1x_get_private_key_scheme ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> nm_setting_802_1x_get_private_key_scheme
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the scheme used to store the private key. If the returned scheme is
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>; if
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>; if
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>, use
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.54.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>scheme used to store the private key (blob or path)</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.54.6"></a><h4>Returns</h4>
-<p> scheme used to store the private key (blob or path)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-private-key-blob"></a><h3>nm_setting_802_1x_get_private_key_blob ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_802_1x_get_private_key_blob
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Private keys are used to authenticate the connecting client to the network
+<a name="nm-setting-802-1x-get-private-key-blob"></a><h3>nm_setting_802_1x_get_private_key_blob ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_802_1x_get_private_key_blob
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Private keys are used to authenticate the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<p>WARNING: the private key property is not a "secret" property, and thus
+authentication method.
+</p>
+<p>
+WARNING: the private key property is not a "secret" property, and thus
unencrypted private key data may be readable by unprivileged users. Private
-keys should always be encrypted with a private key password.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.55.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+keys should always be encrypted with a private key password.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the private key data</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.55.7"></a><h4>Returns</h4>
-<p> the private key data</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-private-key-path"></a><h3>nm_setting_802_1x_get_private_key_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_private_key_path
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Private keys are used to authenticate the connecting client to the network
+<a name="nm-setting-802-1x-get-private-key-path"></a><h3>nm_setting_802_1x_get_private_key_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_private_key_path
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Private keys are used to authenticate the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.56.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>path to the private key file</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.56.6"></a><h4>Returns</h4>
-<p> path to the private key file</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-set-private-key"></a><h3>nm_setting_802_1x_set_private_key ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_set_private_key (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Private keys are used to authenticate the connecting client to the network
+<a name="nm-setting-802-1x-set-private-key"></a><h3>nm_setting_802_1x_set_private_key ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_private_key (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Private keys are used to authenticate the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<p>This function reads a private key from disk and sets the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title="The “private-key†property"><span class="type">“private-keyâ€</span></a> property with the private key file data if using
+authentication method.
+</p>
+<p>
+This function reads a private key from disk and sets the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title='The "private-key" property'><span class="type">"private-key"</span></a> property with the private key file data if using
the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the private
-key file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p>
-<p>If <em class="parameter"><code>password</code></em>
- is given, this function attempts to decrypt the private key to
-verify that <em class="parameter"><code>password</code></em>
- is correct, and if it is, updates the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title="The “private-key-password†property"><span class="type">“private-key-passwordâ€</span></a> property with the given <em class="parameter"><code>password</code></em>
-. If
-the decryption is unsuccessful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned, <em class="parameter"><code>error</code></em>
- is set, and no
-internal data is changed. If no <em class="parameter"><code>password</code></em>
- is given, the private key is
+key file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.
+</p>
+<p>
+If <em class="parameter"><code>password</code></em> is given, this function attempts to decrypt the private key to
+verify that <em class="parameter"><code>password</code></em> is correct, and if it is, updates the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title='The "private-key-password" property'><span class="type">"private-key-password"</span></a> property with the given <em class="parameter"><code>password</code></em>. If
+the decryption is unsuccessful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned, <em class="parameter"><code>error</code></em> is set, and no
+internal data is changed. If no <em class="parameter"><code>password</code></em> is given, the private key is
assumed to be valid, no decryption is performed, and the password may be set
-at a later time.</p>
-<p>WARNING: the private key property is not a "secret" property, and thus
+at a later time.
+</p>
+<p>
+WARNING: the private key property is not a "secret" property, and thus
unencrypted private key data using the BLOB scheme may be readable by
unprivileged users. Private keys should always be encrypted with a private
-key password to prevent unauthorized access to unencrypted private key data.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.57.8"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+key password to prevent unauthorized access to unencrypted private key data.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key_path</p></td>
-<td class="parameter_description"><p>when <em class="parameter"><code>scheme</code></em>
-is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
+<td><p><span class="term"><em class="parameter"><code>key_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the private key file
(PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8 encoded; use
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> with any <em class="parameter"><code>scheme</code></em>
-clears the private key.</p></td>
-<td class="parameter_annotations"> </td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> with any <em class="parameter"><code>scheme</code></em>
+clears the private key.</td>
</tr>
<tr>
-<td class="parameter_name"><p>password</p></td>
-<td class="parameter_description"><p>password used to decrypt the private key, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the password
+<td><p><span class="term"><em class="parameter"><code>password</code></em> :</span></p></td>
+<td>password used to decrypt the private key, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the password
is unknown. If the password is given but fails to decrypt the private key,
-an error is returned.</p></td>
-<td class="parameter_annotations"> </td>
+an error is returned.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
+<td>desired storage scheme for the private key</td>
</tr>
<tr>
-<td class="parameter_name"><p>scheme</p></td>
-<td class="parameter_description"><p>desired storage scheme for the private key</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_format</code></em> :</span></p></td>
+<td>on successful return, the type of the private key added</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_format</p></td>
-<td class="parameter_description"><p>on successful return, the type of the private key added</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on unsuccessful return, an error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.57.9"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-private-key-password"></a><h3>nm_setting_802_1x_get_private_key_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_private_key_password
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.58.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-private-key-password"></a><h3>nm_setting_802_1x_get_private_key_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_private_key_password
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the private key password used to decrypt the private key if
+previously set with <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()"><code class="function">nm_setting_802_1x_set_private_key()</code></a>, or the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title='The "private-key-password" property'><span class="type">"private-key-password"</span></a> property.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.58.5"></a><h4>Returns</h4>
-<p> the private key password used to decrypt the private key if
-previously set with <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()"><code class="function">nm_setting_802_1x_set_private_key()</code></a>, or the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title="The “private-key-password†property"><span class="type">“private-key-passwordâ€</span></a> property.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-private-key-password-flags"></a><h3>nm_setting_802_1x_get_private_key_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_802_1x_get_private_key_password_flags
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.59.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-private-key-password-flags"></a><h3>nm_setting_802_1x_get_private_key_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_802_1x_get_private_key_password_flags
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title='The "private-key-password" property'><span class="type">"private-key-password"</span></a>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.59.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title="The “private-key-password†property"><span class="type">“private-key-passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-private-key-format"></a><h3>nm_setting_802_1x_get_private_key_format ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a>
-nm_setting_802_1x_get_private_key_format
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.60.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-private-key-format"></a><h3>nm_setting_802_1x_get_private_key_format ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a> nm_setting_802_1x_get_private_key_format
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the data format of the private key data stored in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title='The "private-key" property'><span class="type">"private-key"</span></a> property</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.60.5"></a><h4>Returns</h4>
-<p> the data format of the private key data stored in the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title="The “private-key†property"><span class="type">“private-keyâ€</span></a> property</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-private-key-scheme"></a><h3>nm_setting_802_1x_get_phase2_private_key_scheme ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a>
-nm_setting_802_1x_get_phase2_private_key_scheme
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Returns the scheme used to store the "phase 2" private key. If the returned
+<a name="nm-setting-802-1x-get-phase2-private-key-scheme"></a><h3>nm_setting_802_1x_get_phase2_private_key_scheme ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="returnvalue">NMSetting8021xCKScheme</span></a> nm_setting_802_1x_get_phase2_private_key_scheme
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Returns the scheme used to store the "phase 2" private key. If the returned
scheme is <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, use
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>; if
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()"><code class="function">nm_setting_802_1x_get_client_cert_blob()</code></a>; if
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>, use
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.61.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()"><code class="function">nm_setting_802_1x_get_client_cert_path()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>scheme used to store the "phase 2" private key (blob or path)</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.61.6"></a><h4>Returns</h4>
-<p> scheme used to store the "phase 2" private key (blob or path)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-private-key-blob"></a><h3>nm_setting_802_1x_get_phase2_private_key_blob ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_802_1x_get_phase2_private_key_blob
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Private keys are used to authenticate the connecting client to the network
+<a name="nm-setting-802-1x-get-phase2-private-key-blob"></a><h3>nm_setting_802_1x_get_phase2_private_key_blob ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_802_1x_get_phase2_private_key_blob
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Private keys are used to authenticate the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<p>WARNING: the phase2 private key property is not a "secret" property, and thus
+authentication method.
+</p>
+<p>
+WARNING: the phase2 private key property is not a "secret" property, and thus
unencrypted private key data may be readable by unprivileged users. Private
-keys should always be encrypted with a private key password.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.62.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+keys should always be encrypted with a private key password.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the "phase 2" private key data</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.62.7"></a><h4>Returns</h4>
-<p> the "phase 2" private key data</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-private-key-path"></a><h3>nm_setting_802_1x_get_phase2_private_key_path ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_private_key_path
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<p>Private keys are used to authenticate the connecting client to the network
+<a name="nm-setting-802-1x-get-phase2-private-key-path"></a><h3>nm_setting_802_1x_get_phase2_private_key_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_private_key_path
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<p>
+Private keys are used to authenticate the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.63.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+authentication method.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>path to the "phase 2" private key file</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.63.6"></a><h4>Returns</h4>
-<p> path to the "phase 2" private key file</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-set-phase2-private-key"></a><h3>nm_setting_802_1x_set_phase2_private_key ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_802_1x_set_phase2_private_key
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
- <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Private keys are used to authenticate the connecting client to the network
+<a name="nm-setting-802-1x-set-phase2-private-key"></a><h3>nm_setting_802_1x_set_phase2_private_key ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_phase2_private_key
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Private keys are used to authenticate the connecting client to the network
when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
-authentication method.</p>
-<p>This function reads a private key from disk and sets the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title="The “phase2-private-key†property"><span class="type">“phase2-private-keyâ€</span></a> property with the private key file data if
+authentication method.
+</p>
+<p>
+This function reads a private key from disk and sets the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title='The "phase2-private-key" property'><span class="type">"phase2-private-key"</span></a> property with the private key file data if
using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the
-private key file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p>
-<p>If <em class="parameter"><code>password</code></em>
- is given, this function attempts to decrypt the private key to
-verify that <em class="parameter"><code>password</code></em>
- is correct, and if it is, updates the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title="The “phase2-private-key-password†property"><span class="type">“phase2-private-key-passwordâ€</span></a> property with the given
-<em class="parameter"><code>password</code></em>
-. If the decryption is unsuccessful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned, <em class="parameter"><code>error</code></em>
- is
-set, and no internal data is changed. If no <em class="parameter"><code>password</code></em>
- is given, the private
+private key file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.
+</p>
+<p>
+If <em class="parameter"><code>password</code></em> is given, this function attempts to decrypt the private key to
+verify that <em class="parameter"><code>password</code></em> is correct, and if it is, updates the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'><span class="type">"phase2-private-key-password"</span></a> property with the given
+<em class="parameter"><code>password</code></em>. If the decryption is unsuccessful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned, <em class="parameter"><code>error</code></em> is
+set, and no internal data is changed. If no <em class="parameter"><code>password</code></em> is given, the private
key is assumed to be valid, no decryption is performed, and the password may
-be set at a later time.</p>
-<p>WARNING: the "phase2" private key property is not a "secret" property, and
+be set at a later time.
+</p>
+<p>
+WARNING: the "phase2" private key property is not a "secret" property, and
thus unencrypted private key data using the BLOB scheme may be readable by
unprivileged users. Private keys should always be encrypted with a private
-key password to prevent unauthorized access to unencrypted private key data.</p>
-<div class="refsect3">
-<a name="id-1.2.20.9.64.8"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+key password to prevent unauthorized access to unencrypted private key data.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key_path</p></td>
-<td class="parameter_description"><p>when <em class="parameter"><code>scheme</code></em>
-is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
+<td><p><span class="term"><em class="parameter"><code>key_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" private
key file (PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8 encoded;
-use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> with any
-<em class="parameter"><code>scheme</code></em>
-clears the private key.</p></td>
-<td class="parameter_annotations"> </td>
+use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> with any
+<em class="parameter"><code>scheme</code></em> clears the private key.</td>
</tr>
<tr>
-<td class="parameter_name"><p>password</p></td>
-<td class="parameter_description"><p>password used to decrypt the private key, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the password
+<td><p><span class="term"><em class="parameter"><code>password</code></em> :</span></p></td>
+<td>password used to decrypt the private key, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the password
is unknown. If the password is given but fails to decrypt the private key,
-an error is returned.</p></td>
-<td class="parameter_annotations"> </td>
+an error is returned.</td>
</tr>
<tr>
-<td class="parameter_name"><p>scheme</p></td>
-<td class="parameter_description"><p>desired storage scheme for the private key</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
+<td>desired storage scheme for the private key</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_format</p></td>
-<td class="parameter_description"><p>on successful return, the type of the private key added</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_format</code></em> :</span></p></td>
+<td>on successful return, the type of the private key added</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>on unsuccessful return, an error</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.64.9"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was unsuccessful</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-private-key-password"></a><h3>nm_setting_802_1x_get_phase2_private_key_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_802_1x_get_phase2_private_key_password
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.65.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.65.5"></a><h4>Returns</h4>
-<p> the private key password used to decrypt the private key if
-previously set with <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()"><code class="function">nm_setting_802_1x_set_phase2_private_key()</code></a> or the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title="The “phase2-private-key-password†property"><span class="type">“phase2-private-key-passwordâ€</span></a> property.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-private-key-password-flags"></a><h3>nm_setting_802_1x_get_phase2_private_key_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_802_1x_get_phase2_private_key_password_flags
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.66.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase2-private-key-password"></a><h3>nm_setting_802_1x_get_phase2_private_key_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_802_1x_get_phase2_private_key_password
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.66.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title="The “phase2-private-key-password†property"><span class="type">“phase2-private-key-passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-802-1x-get-phase2-private-key-format"></a><h3>nm_setting_802_1x_get_phase2_private_key_format ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a>
-nm_setting_802_1x_get_phase2_private_key_format
- (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.20.9.67.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.20.9.67.5"></a><h4>Returns</h4>
-<p> the data format of the "phase 2" private key data stored in the
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title="The “phase2-private-key†property"><span class="type">“phase2-private-keyâ€</span></a> property</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSetting8021x.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NMSetting8021xCKFormat"></a><h3>enum NMSetting8021xCKFormat</h3>
-<p><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> values indicate the general type of a certificate
-or private key</p>
-<div class="refsect3">
-<a name="id-1.2.20.10.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-CK-FORMAT-UNKNOWN:CAPS"></a>NM_SETTING_802_1X_CK_FORMAT_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown file format</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-CK-FORMAT-X509:CAPS"></a>NM_SETTING_802_1X_CK_FORMAT_X509</p></td>
-<td class="enum_member_description">
-<p>file contains an X.509 format certificate</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-CK-FORMAT-RAW-KEY:CAPS"></a>NM_SETTING_802_1X_CK_FORMAT_RAW_KEY</p></td>
-<td class="enum_member_description">
-<p>file contains an old-style OpenSSL PEM
-or DER private key</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-CK-FORMAT-PKCS12:CAPS"></a>NM_SETTING_802_1X_CK_FORMAT_PKCS12</p></td>
-<td class="enum_member_description">
-<p>file contains a PKCS<span class="type">12</span> certificate
-and private key</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the private key password used to decrypt the private key if
+previously set with <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()"><code class="function">nm_setting_802_1x_set_phase2_private_key()</code></a> or the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'><span class="type">"phase2-private-key-password"</span></a> property.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021xCKScheme"></a><h3>enum NMSetting8021xCKScheme</h3>
-<p><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> values indicate how a certificate or private key is
-stored in the setting properties, either as a blob of the item's data, or as
-a path to a certificate or private key file on the filesystem</p>
-<div class="refsect3">
-<a name="id-1.2.20.10.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase2-private-key-password-flags"></a><h3>nm_setting_802_1x_get_phase2_private_key_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_802_1x_get_phase2_private_key_password_flags
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-CK-SCHEME-UNKNOWN:CAPS"></a>NM_SETTING_802_1X_CK_SCHEME_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown certificate or private key
-scheme</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"></a>NM_SETTING_802_1X_CK_SCHEME_BLOB</p></td>
-<td class="enum_member_description">
-<p>certificate or key is stored as the raw
-item data</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'><span class="type">"phase2-private-key-password"</span></a>
</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"></a>NM_SETTING_802_1X_CK_SCHEME_PATH</p></td>
-<td class="enum_member_description">
-<p>certificate or key is stored as a path
-to a file containing the certificate or key data</p>
-</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-SETTING-NAME:CAPS"></a><h3>NM_SETTING_802_1X_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_SETTING_NAME "802-1x"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021xError"></a><h3>enum NMSetting8021xError</h3>
-<div class="refsect3">
-<a name="id-1.2.20.10.5.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-802-1x-get-phase2-private-key-format"></a><h3>nm_setting_802_1x_get_phase2_private_key_format ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat"><span class="returnvalue">NMSetting8021xCKFormat</span></a> nm_setting_802_1x_get_phase2_private_key_format
+ (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_802_1X_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_802_1X_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-802-1X-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_802_1X_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the data format of the "phase 2" private key data stored in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title='The "phase2-private-key" property'><span class="type">"phase2-private-key"</span></a> property</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMSetting8021x.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-ERROR:CAPS"></a><h3>NM_SETTING_802_1X_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_ERROR nm_setting_802_1x_error_quark ()
-</pre>
+<a name="NMSetting8021x--altsubject-matches"></a><h3>The <code class="literal">"altsubject-matches"</code> property</h3>
+<pre class="programlisting"> "altsubject-matches" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+List of strings to be matched against the altSubjectName of the
+certificate presented by the authentication server. If the list is empty,
+no verification of the server certificate's altSubjectName is performed.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-EAP:CAPS"></a><h3>NM_SETTING_802_1X_EAP</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_EAP "eap"
-</pre>
+<a name="NMSetting8021x--anonymous-identity"></a><h3>The <code class="literal">"anonymous-identity"</code> property</h3>
+<pre class="programlisting"> "anonymous-identity" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Anonymous identity string for EAP authentication methods. Used as the
+unencrypted identity with EAP types that support different tunneled
+identity like EAP-TTLS.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-IDENTITY:CAPS"></a><h3>NM_SETTING_802_1X_IDENTITY</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_IDENTITY "identity"
-</pre>
+<a name="NMSetting8021x--ca-cert"></a><h3>The <code class="literal">"ca-cert"</code> property</h3>
+<pre class="programlisting"> "ca-cert" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+Contains the CA certificate if used by the EAP method specified in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS"></a><h3>NM_SETTING_802_1X_ANONYMOUS_IDENTITY</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_ANONYMOUS_IDENTITY "anonymous-identity"
-</pre>
<p>
+Certificate data is specified using a "scheme"; two are currently
+supported: blob and path. When using the blob scheme (which is backwards
+compatible with NM 0.7.x) this property should be set to the
+certificate's DER encoded data. When using the path scheme, this property
+should be set to the full UTF-8 encoded path of the certificate, prefixed
+with the string "file://" and ending with a terminating NUL byte. This
+property can be unset even if the EAP method supports CA certificates,
+but this allows man-in-the-middle attacks and is NOT recommended.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-PAC-FILE:CAPS"></a><h3>NM_SETTING_802_1X_PAC_FILE</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PAC_FILE "pac-file"
-</pre>
<p>
+Setting this property directly is discouraged; use the
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert" title="nm_setting_802_1x_set_ca_cert ()"><code class="function">nm_setting_802_1x_set_ca_cert()</code></a> function instead.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-CA-CERT:CAPS"></a><h3>NM_SETTING_802_1X_CA_CERT</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_CA_CERT "ca-cert"
-</pre>
+<a name="NMSetting8021x--ca-path"></a><h3>The <code class="literal">"ca-path"</code> property</h3>
+<pre class="programlisting"> "ca-path" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+UTF-8 encoded path to a directory containing PEM or DER formatted
+certificates to be added to the verification chain in addition to the
+certificate specified in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title='The "ca-cert" property'><span class="type">"ca-cert"</span></a> property.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-CA-PATH:CAPS"></a><h3>NM_SETTING_802_1X_CA_PATH</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_CA_PATH "ca-path"
-</pre>
+<a name="NMSetting8021x--client-cert"></a><h3>The <code class="literal">"client-cert"</code> property</h3>
+<pre class="programlisting"> "client-cert" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+Contains the client certificate if used by the EAP method specified in
+the <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-SUBJECT-MATCH:CAPS"></a><h3>NM_SETTING_802_1X_SUBJECT_MATCH</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_SUBJECT_MATCH "subject-match"
-</pre>
<p>
+Certificate data is specified using a "scheme"; two are currently
+supported: blob and path. When using the blob scheme (which is backwards
+compatible with NM 0.7.x) this property should be set to the
+certificate's DER encoded data. When using the path scheme, this property
+should be set to the full UTF-8 encoded path of the certificate, prefixed
+with the string "file://" and ending with a terminating NUL byte.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS"></a><h3>NM_SETTING_802_1X_ALTSUBJECT_MATCHES</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_ALTSUBJECT_MATCHES "altsubject-matches"
-</pre>
<p>
+Setting this property directly is discouraged; use the
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-client-cert" title="nm_setting_802_1x_set_client_cert ()"><code class="function">nm_setting_802_1x_set_client_cert()</code></a> function instead.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-CLIENT-CERT:CAPS"></a><h3>NM_SETTING_802_1X_CLIENT_CERT</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_CLIENT_CERT "client-cert"
-</pre>
+<a name="NMSetting8021x--eap"></a><h3>The <code class="literal">"eap"</code> property</h3>
+<pre class="programlisting"> "eap" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+The allowed EAP method to be used when authenticating to the network with
+802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd",
+and "fast". Each method requires different configuration using the
+properties of this setting; refer to wpa_supplicant documentation for the
+allowed combinations.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS"></a><h3>NM_SETTING_802_1X_PHASE1_PEAPVER</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE1_PEAPVER "phase1-peapver"
-</pre>
+<a name="NMSetting8021x--identity"></a><h3>The <code class="literal">"identity"</code> property</h3>
+<pre class="programlisting"> "identity" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Identity string for EAP authentication methods. Often the user's user or
+login name.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS"></a><h3>NM_SETTING_802_1X_PHASE1_PEAPLABEL</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE1_PEAPLABEL "phase1-peaplabel"
-</pre>
+<a name="NMSetting8021x--pac-file"></a><h3>The <code class="literal">"pac-file"</code> property</h3>
+<pre class="programlisting"> "pac-file" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+UTF-8 encoded file path containing PAC for EAP-FAST.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS"></a><h3>NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING "phase1-fast-provisioning"
-</pre>
+<a name="NMSetting8021x--password"></a><h3>The <code class="literal">"password"</code> property</h3>
+<pre class="programlisting"> "password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+UTF-8 encoded password used for EAP authentication methods. If both the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'><span class="type">"password"</span></a> property and the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'><span class="type">"password-raw"</span></a>
+property are specified, <a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'><span class="type">"password"</span></a> is preferred.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-AUTH:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_AUTH</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_AUTH "phase2-auth"
-</pre>
+<a name="NMSetting8021x--password-flags"></a><h3>The <code class="literal">"password-flags"</code> property</h3>
+<pre class="programlisting"> "password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
<p>
+Flags indicating how to handle the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'><span class="type">"password"</span></a> property.
</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_AUTHEAP</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_AUTHEAP "phase2-autheap"
-</pre>
+<a name="NMSetting8021x--password-raw"></a><h3>The <code class="literal">"password-raw"</code> property</h3>
+<pre class="programlisting"> "password-raw" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+Password used for EAP authentication methods, given as a byte array to
+allow passwords in other encodings than UTF-8 to be used. If both the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'><span class="type">"password"</span></a> property and the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'><span class="type">"password-raw"</span></a>
+property are specified, <a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'><span class="type">"password"</span></a> is preferred.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_CA_CERT</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_CA_CERT "phase2-ca-cert"
-</pre>
+<a name="NMSetting8021x--password-raw-flags"></a><h3>The <code class="literal">"password-raw-flags"</code> property</h3>
+<pre class="programlisting"> "password-raw-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
<p>
+Flags indicating how to handle the <a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'><span class="type">"password-raw"</span></a> property.
</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_CA_PATH</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_CA_PATH "phase2-ca-path"
-</pre>
+<a name="NMSetting8021x--phase1-fast-provisioning"></a><h3>The <code class="literal">"phase1-fast-provisioning"</code> property</h3>
+<pre class="programlisting"> "phase1-fast-provisioning" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Enables or disables in-line provisioning of EAP-FAST credentials when
+FAST is specified as the EAP method in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property.
+Recognized values are "0" (disabled), "1" (allow unauthenticated
+provisioning), "2" (allow authenticated provisioning), and "3" (allow
+both authenticated and unauthenticated provisioning). See the
+wpa_supplicant documentation for more details.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH "phase2-subject-match"
-</pre>
+<a name="NMSetting8021x--phase1-peaplabel"></a><h3>The <code class="literal">"phase1-peaplabel"</code> property</h3>
+<pre class="programlisting"> "phase1-peaplabel" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Forces use of the new PEAP label during key derivation. Some RADIUS
+servers may require forcing the new PEAP label to interoperate with
+PEAPv1. Set to "1" to force use of the new PEAP label. See the
+wpa_supplicant documentation for more details.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES "phase2-altsubject-matches"
-</pre>
+<a name="NMSetting8021x--phase1-peapver"></a><h3>The <code class="literal">"phase1-peapver"</code> property</h3>
+<pre class="programlisting"> "phase1-peapver" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Forces which PEAP version is used when PEAP is set as the EAP method in
+the <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property. When unset, the version reported by
+the server will be used. Sometimes when using older RADIUS servers, it
+is necessary to force the client to use a particular PEAP version. To do
+so, this property may be set to "0" or "1" to force that specific PEAP
+version.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_CLIENT_CERT</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_CLIENT_CERT "phase2-client-cert"
-</pre>
+<a name="NMSetting8021x--phase2-altsubject-matches"></a><h3>The <code class="literal">"phase2-altsubject-matches"</code> property</h3>
+<pre class="programlisting"> "phase2-altsubject-matches" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+List of strings to be matched against the altSubjectName of the
+certificate presented by the authentication server during the inner
+"phase 2" authentication. If the list is empty, no verification of the
+server certificate's altSubjectName is performed.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PASSWORD:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD "password"
-</pre>
+<a name="NMSetting8021x--phase2-auth"></a><h3>The <code class="literal">"phase2-auth"</code> property</h3>
+<pre class="programlisting"> "phase2-auth" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Specifies the allowed "phase 2" inner non-EAP authentication methods when
+an EAP method that uses an inner TLS tunnel is specified in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property. Recognized non-EAP "phase 2" methods are
+"pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls".
+Each "phase 2" inner method requires specific parameters for successful
+authentication; see the wpa_supplicant documentation for more details.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD_FLAGS "password-flags"
-</pre>
+<a name="NMSetting8021x--phase2-autheap"></a><h3>The <code class="literal">"phase2-autheap"</code> property</h3>
+<pre class="programlisting"> "phase2-autheap" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Specifies the allowed "phase 2" inner EAP-based authentication methods
+when an EAP method that uses an inner TLS tunnel is specified in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property. Recognized EAP-based "phase 2" methods are
+"md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method
+requires specific parameters for successful authentication; see the
+wpa_supplicant documentation for more details.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PASSWORD-RAW:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD_RAW</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD_RAW "password-raw"
-</pre>
+<a name="NMSetting8021x--phase2-ca-cert"></a><h3>The <code class="literal">"phase2-ca-cert"</code> property</h3>
+<pre class="programlisting"> "phase2-ca-cert" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+Contains the "phase 2" CA certificate if used by the EAP method specified
+in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title='The "phase2-auth" property'><span class="type">"phase2-auth"</span></a> or <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title='The "phase2-autheap" property'><span class="type">"phase2-autheap"</span></a>
+properties.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PASSWORD_RAW_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PASSWORD_RAW_FLAGS "password-raw-flags"
-</pre>
<p>
+Certificate data is specified using a "scheme"; two are currently
+supported: blob and path. When using the blob scheme (which is backwards
+compatible with NM 0.7.x) this property should be set to the
+certificate's DER encoded data. When using the path scheme, this property
+should be set to the full UTF-8 encoded path of the certificate, prefixed
+with the string "file://" and ending with a terminating NUL byte. This
+property can be unset even if the EAP method supports CA certificates,
+but this allows man-in-the-middle attacks and is NOT recommended.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-PRIVATE-KEY:CAPS"></a><h3>NM_SETTING_802_1X_PRIVATE_KEY</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PRIVATE_KEY "private-key"
-</pre>
<p>
+Setting this property directly is discouraged; use the
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert" title="nm_setting_802_1x_set_phase2_ca_cert ()"><code class="function">nm_setting_802_1x_set_phase2_ca_cert()</code></a> function instead.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS"></a><h3>NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD "private-key-password"
-</pre>
+<a name="NMSetting8021x--phase2-ca-path"></a><h3>The <code class="literal">"phase2-ca-path"</code> property</h3>
+<pre class="programlisting"> "phase2-ca-path" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+UTF-8 encoded path to a directory containing PEM or DER formatted
+certificates to be added to the verification chain in addition to the
+certificate specified in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title='The "phase2-ca-cert" property'><span class="type">"phase2-ca-cert"</span></a> property.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS "private-key-password-flags"
-</pre>
+<a name="NMSetting8021x--phase2-client-cert"></a><h3>The <code class="literal">"phase2-client-cert"</code> property</h3>
+<pre class="programlisting"> "phase2-client-cert" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+Contains the "phase 2" client certificate if used by the EAP method
+specified in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title='The "phase2-auth" property'><span class="type">"phase2-auth"</span></a> or
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title='The "phase2-autheap" property'><span class="type">"phase2-autheap"</span></a> properties.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_PRIVATE_KEY</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY "phase2-private-key"
-</pre>
<p>
+Certificate data is specified using a "scheme"; two are currently
+supported: blob and path. When using the blob scheme (which is backwards
+compatible with NM 0.7.x) this property should be set to the
+certificate's DER encoded data. When using the path scheme, this property
+should be set to the full UTF-8 encoded path of the certificate, prefixed
+with the string "file://" and ending with a terminating NUL byte. This
+property can be unset even if the EAP method supports CA certificates,
+but this allows man-in-the-middle attacks and is NOT recommended.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD "phase2-private-key-password"
-</pre>
<p>
+Setting this property directly is discouraged; use the
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert" title="nm_setting_802_1x_set_phase2_client_cert ()"><code class="function">nm_setting_802_1x_set_phase2_client_cert()</code></a> function instead.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS "phase2-private-key-password-flags"
-</pre>
+<a name="NMSetting8021x--phase2-private-key"></a><h3>The <code class="literal">"phase2-private-key"</code> property</h3>
+<pre class="programlisting"> "phase2-private-key" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+Contains the "phase 2" inner private key when the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title='The "phase2-auth" property'><span class="type">"phase2-auth"</span></a> or <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title='The "phase2-autheap" property'><span class="type">"phase2-autheap"</span></a> property is
+set to "tls".
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-PIN:CAPS"></a><h3>NM_SETTING_802_1X_PIN</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PIN "pin"
-</pre>
<p>
+Key data is specified using a "scheme"; two are currently supported: blob
+and path. When using the blob scheme and private keys, this property
+should be set to the key's encrypted PEM encoded data. When using private
+keys with the path scheme, this property should be set to the full UTF-8
+encoded path of the key, prefixed with the string "file://" and ending
+with a terminating NUL byte. When using PKCS<span class="type">12</span> format private keys and
+the blob scheme, this property should be set to the PKCS<span class="type">12</span> data and the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'><span class="type">"phase2-private-key-password"</span></a> property must be set to
+password used to decrypt the PKCS<span class="type">12</span> certificate and key. When using
+PKCS<span class="type">12</span> files and the path scheme, this property should be set to the
+full UTF-8 encoded path of the key, prefixed with the string "file://"
+and and ending with a terminating NUL byte, and as with the blob scheme
+the <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'><span class="type">"phase2-private-key-password"</span></a> property must be set to
+the password used to decode the PKCS<span class="type">12</span> private key and certificate.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-802-1X-PIN-FLAGS:CAPS"></a><h3>NM_SETTING_802_1X_PIN_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_PIN_FLAGS "pin-flags"
-</pre>
<p>
+Setting this property directly is discouraged; use the
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()"><code class="function">nm_setting_802_1x_set_phase2_private_key()</code></a> function instead.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS"></a><h3>NM_SETTING_802_1X_SYSTEM_CA_CERTS</h3>
-<pre class="programlisting">#define NM_SETTING_802_1X_SYSTEM_CA_CERTS "system-ca-certs"
-</pre>
+<a name="NMSetting8021x--phase2-private-key-password"></a><h3>The <code class="literal">"phase2-private-key-password"</code> property</h3>
+<pre class="programlisting"> "phase2-private-key-password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+The password used to decrypt the "phase 2" private key specified in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title='The "phase2-private-key" property'><span class="type">"phase2-private-key"</span></a> property when the private key either
+uses the path scheme, or is a PKCS<span class="type">12</span> format key. Setting this property
+directly is not generally necessary except when returning secrets to
+NetworkManager; it is generally set automatically when setting the
+private key by the <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()"><code class="function">nm_setting_802_1x_set_phase2_private_key()</code></a> function.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSetting8021x.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSetting8021x--altsubject-matches"></a><h3>The <code class="literal">“altsubject-matchesâ€</code> property</h3>
-<pre class="programlisting"> “altsubject-matches†<span class="type">GSList_gchararray_</span> *</pre>
-<p>List of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--anonymous-identity"></a><h3>The <code class="literal">“anonymous-identityâ€</code> property</h3>
-<pre class="programlisting"> “anonymous-identity†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--ca-cert"></a><h3>The <code class="literal">“ca-certâ€</code> property</h3>
-<pre class="programlisting"> “ca-cert†<span class="type">GArray_guchar_</span> *</pre>
-<p>Contains the CA certificate if used by the EAP method specified in the 'eap' property. Certificate data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--ca-path"></a><h3>The <code class="literal">“ca-pathâ€</code> property</h3>
-<pre class="programlisting"> “ca-path†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the 'ca-cert' property.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--client-cert"></a><h3>The <code class="literal">“client-certâ€</code> property</h3>
-<pre class="programlisting"> “client-cert†<span class="type">GArray_guchar_</span> *</pre>
-<p>Contains the client certificate if used by the EAP method specified in the 'eap' property. Certificate data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--eap"></a><h3>The <code class="literal">“eapâ€</code> property</h3>
-<pre class="programlisting"> “eap†<span class="type">GSList_gchararray_</span> *</pre>
-<p>The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: 'leap', 'md5', 'tls', 'peap', 'ttls', and 'fast'. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--identity"></a><h3>The <code class="literal">“identityâ€</code> property</h3>
-<pre class="programlisting"> “identity†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Identity string for EAP authentication methods. Often the user's user or login name.</p>
-<p>Flags: Read / Write</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--pac-file"></a><h3>The <code class="literal">“pac-fileâ€</code> property</h3>
-<pre class="programlisting"> “pac-file†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>UTF-8 encoded file path containing PAC for EAP-FAST.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--password"></a><h3>The <code class="literal">“passwordâ€</code> property</h3>
-<pre class="programlisting"> “password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>UTF-8 encoded password used for EAP authentication methods.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--password-flags"></a><h3>The <code class="literal">“password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the 802.1x password.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: &lt;= 7</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--password-raw"></a><h3>The <code class="literal">“password-rawâ€</code> property</h3>
-<pre class="programlisting"> “password-raw†<span class="type">GArray_guchar_</span> *</pre>
-<p>Password used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF-8 to be used. If both 'password' and 'password-raw' are given, 'password' is preferred.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--password-raw-flags"></a><h3>The <code class="literal">“password-raw-flagsâ€</code> property</h3>
-<pre class="programlisting"> “password-raw-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the 802.1x password byte array.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: &lt;= 7</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase1-fast-provisioning"></a><h3>The <code class="literal">“phase1-fast-provisioningâ€</code> property</h3>
-<pre class="programlisting"> “phase1-fast-provisioning†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the #NMSetting8021x:eap property. Allowed values are '0' (disabled), '1' (allow unauthenticated provisioning), '2' (allow authenticated provisioning), and '3' (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase1-peaplabel"></a><h3>The <code class="literal">“phase1-peaplabelâ€</code> property</h3>
-<pre class="programlisting"> “phase1-peaplabel†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Forces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to '1' to force use of the new PEAP label. See the wpa_supplicant documentation for more details.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase1-peapver"></a><h3>The <code class="literal">“phase1-peapverâ€</code> property</h3>
-<pre class="programlisting"> “phase1-peapver†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Forces which PEAP version is used when PEAP is set as the EAP method in 'eap' property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to '0' or '1' to force that specific PEAP version.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-altsubject-matches"></a><h3>The <code class="literal">“phase2-altsubject-matchesâ€</code> property</h3>
-<pre class="programlisting"> “phase2-altsubject-matches†<span class="type">GSList_gchararray_</span> *</pre>
-<p>List of strings to be matched against List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner 'phase 2' authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-auth"></a><h3>The <code class="literal">“phase2-authâ€</code> property</h3>
-<pre class="programlisting"> “phase2-auth†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Specifies the allowed 'phase 2' inner non-EAP authentication methods when an EAP method that uses an inner TLS tunnel is specified in the 'eap' property. Recognized non-EAP phase2 methods are 'pap', 'chap', 'mschap', 'mschapv2', 'gtc', 'otp', 'md5', and 'tls'. Each 'phase 2' inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-autheap"></a><h3>The <code class="literal">“phase2-autheapâ€</code> property</h3>
-<pre class="programlisting"> “phase2-autheap†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Specifies the allowed 'phase 2' inner EAP-based authentication methods when an EAP method that uses an inner TLS tunnel is specified in the 'eap' property. Recognized EAP-based 'phase 2' methods are 'md5', 'mschapv2', 'otp', 'gtc', and 'tls'. Each 'phase 2' inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-ca-cert"></a><h3>The <code class="literal">“phase2-ca-certâ€</code> property</h3>
-<pre class="programlisting"> “phase2-ca-cert†<span class="type">GArray_guchar_</span> *</pre>
-<p>Contains the 'phase 2' CA certificate if used by the EAP method specified in the 'phase2-auth' or 'phase2-autheap' properties. Certificate data is specified using a 'scheme'; two are currentlysupported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-ca-path"></a><h3>The <code class="literal">“phase2-ca-pathâ€</code> property</h3>
-<pre class="programlisting"> “phase2-ca-path†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the 'phase2-ca-cert' property.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-client-cert"></a><h3>The <code class="literal">“phase2-client-certâ€</code> property</h3>
-<pre class="programlisting"> “phase2-client-cert†<span class="type">GArray_guchar_</span> *</pre>
-<p>Contains the 'phase 2' client certificate if used by the EAP method specified in the 'phase2-auth' or 'phase2-autheap' properties. Certificate data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-private-key"></a><h3>The <code class="literal">“phase2-private-keyâ€</code> property</h3>
-<pre class="programlisting"> “phase2-private-key†<span class="type">GArray_guchar_</span> *</pre>
-<p>Contains the 'phase 2' inner private key when the 'phase2-auth' or 'phase2-autheap' property is set to 'tls'. Key data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and ending with a terminating NULL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the 'phase2-private-key-password' property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and and ending with a terminating NULL byte, and as with the blob scheme the 'phase2-private-key-password' property must be set to the password used to decode the PKCS#12 private key and certificate.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-private-key-password"></a><h3>The <code class="literal">“phase2-private-key-passwordâ€</code> property</h3>
-<pre class="programlisting"> “phase2-private-key-password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The password used to decrypt the 'phase 2' private key specified in the 'private-key' property when the phase2 private key either uses the path scheme, or if the phase2 private key is a PKCS#12 format key.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSetting8021x--phase2-private-key-password-flags"></a><h3>The <code class="literal">“phase2-private-key-password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “phase2-private-key-password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the 802.1x phase2 private key password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--phase2-private-key-password-flags"></a><h3>The <code class="literal">"phase2-private-key-password-flags"</code> property</h3>
+<pre class="programlisting"> "phase2-private-key-password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'><span class="type">"phase2-private-key-password"</span></a> property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--phase2-subject-match"></a><h3>The <code class="literal">“phase2-subject-matchâ€</code> property</h3>
-<pre class="programlisting"> “phase2-subject-match†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Substring to be matched against the subject of the certificate presented by the authentication server during the inner 'phase2' authentication. When unset, no verification of the authentication server certificate's subject is performed.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--phase2-subject-match"></a><h3>The <code class="literal">"phase2-subject-match"</code> property</h3>
+<pre class="programlisting"> "phase2-subject-match" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Substring to be matched against the subject of the certificate presented
+by the authentication server during the inner "phase 2"
+authentication. When unset, no verification of the authentication server
+certificate's subject is performed.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--pin"></a><h3>The <code class="literal">“pinâ€</code> property</h3>
-<pre class="programlisting"> “pin†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>PIN used for EAP authentication methods.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--pin"></a><h3>The <code class="literal">"pin"</code> property</h3>
+<pre class="programlisting"> "pin" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+PIN used for EAP authentication methods.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--pin-flags"></a><h3>The <code class="literal">“pin-flagsâ€</code> property</h3>
-<pre class="programlisting"> “pin-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the 802.1x PIN.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--pin-flags"></a><h3>The <code class="literal">"pin-flags"</code> property</h3>
+<pre class="programlisting"> "pin-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the <a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title='The "pin" property'><span class="type">"pin"</span></a> property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--private-key"></a><h3>The <code class="literal">“private-keyâ€</code> property</h3>
-<pre class="programlisting"> “private-key†<span class="type">GArray_guchar_</span> *</pre>
-<p>Contains the private key when the 'eap' property is set to 'tls'. Key data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and ending with a terminating NULL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the 'private-key-password' property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and and ending with a terminating NULL byte, and as with the blob scheme the 'private-key-password' property must be set to the password used to decode the PKCS#12 private key and certificate.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--private-key"></a><h3>The <code class="literal">"private-key"</code> property</h3>
+<pre class="programlisting"> "private-key" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
+<p>
+Contains the private key when the <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'><span class="type">"eap"</span></a> property is set to
+"tls".
+</p>
+<p>
+Key data is specified using a "scheme"; two are currently supported: blob
+and path. When using the blob scheme and private keys, this property
+should be set to the key's encrypted PEM encoded data. When using private
+keys with the path scheme, this property should be set to the full UTF-8
+encoded path of the key, prefixed with the string "file://" and ending
+with a terminating NUL byte. When using PKCS<span class="type">12</span> format private keys and
+the blob scheme, this property should be set to the PKCS<span class="type">12</span> data and the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title='The "private-key-password" property'><span class="type">"private-key-password"</span></a> property must be set to password
+used to decrypt the PKCS<span class="type">12</span> certificate and key. When using PKCS<span class="type">12</span> files
+and the path scheme, this property should be set to the full UTF-8
+encoded path of the key, prefixed with the string "file://" and and
+ending with a terminating NUL byte, and as with the blob scheme the
+"private-key-password" property must be set to the password used to
+decode the PKCS<span class="type">12</span> private key and certificate.
+</p>
+<p>
+Setting this property directly is discouraged; use the
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()"><code class="function">nm_setting_802_1x_set_private_key()</code></a> function instead.
+</p>
+<p>
+WARNING: <a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title='The "private-key" property'><span class="type">"private-key"</span></a> is not a "secret" property, and thus
+unencrypted private key data using the BLOB scheme may be readable by
+unprivileged users. Private keys should always be encrypted with a
+private key password to prevent unauthorized access to unencrypted
+private key data.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--private-key-password"></a><h3>The <code class="literal">“private-key-passwordâ€</code> property</h3>
-<pre class="programlisting"> “private-key-password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The password used to decrypt the private key specified in the 'private-key' property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--private-key-password"></a><h3>The <code class="literal">"private-key-password"</code> property</h3>
+<pre class="programlisting"> "private-key-password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The password used to decrypt the private key specified in the
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title='The "private-key" property'><span class="type">"private-key"</span></a> property when the private key either uses the
+path scheme, or if the private key is a PKCS<span class="type">12</span> format key. Setting this
+property directly is not generally necessary except when returning
+secrets to NetworkManager; it is generally set automatically when setting
+the private key by the <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()"><code class="function">nm_setting_802_1x_set_private_key()</code></a> function.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--private-key-password-flags"></a><h3>The <code class="literal">“private-key-password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “private-key-password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the 802.1x private key password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--private-key-password-flags"></a><h3>The <code class="literal">"private-key-password-flags"</code> property</h3>
+<pre class="programlisting"> "private-key-password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the <a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title='The "private-key-password" property'><span class="type">"private-key-password"</span></a>
+property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--subject-match"></a><h3>The <code class="literal">“subject-matchâ€</code> property</h3>
-<pre class="programlisting"> “subject-match†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Substring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSetting8021x--subject-match"></a><h3>The <code class="literal">"subject-match"</code> property</h3>
+<pre class="programlisting"> "subject-match" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Substring to be matched against the subject of the certificate presented
+by the authentication server. When unset, no verification of the
+authentication server certificate's subject is performed.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSetting8021x--system-ca-certs"></a><h3>The <code class="literal">“system-ca-certsâ€</code> property</h3>
-<pre class="programlisting"> “system-ca-certs†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>When TRUE, overrides 'ca-path' and 'phase2-ca-path' properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in addition to any certificates specified by the 'ca-cert' and 'phase2-ca-cert' properties.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSetting8021x--system-ca-certs"></a><h3>The <code class="literal">"system-ca-certs"</code> property</h3>
+<pre class="programlisting"> "system-ca-certs" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+When <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, overrides the <a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-path" title='The "ca-path" property'><span class="type">"ca-path"</span></a> and
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-path" title='The "phase2-ca-path" property'><span class="type">"phase2-ca-path"</span></a> properties using the system CA directory
+specified at configure time with the --system-ca-path switch. The
+certificates in this directory are added to the verification chain in
+addition to any certificates specified by the <a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title='The "ca-cert" property'><span class="type">"ca-cert"</span></a> and
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title='The "phase2-ca-cert" property'><span class="type">"phase2-ca-cert"</span></a> properties.
+</p>
<p>Default value: FALSE</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingAdsl.html b/docs/libnm-util/html/NMSettingAdsl.html
index 25a642bbc..ab37325d0 100644
--- a/docs/libnm-util/html/NMSettingAdsl.html
+++ b/docs/libnm-util/html/NMSettingAdsl.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingAdsl</title>
+<title>NMSettingAdsl</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">
-<link rel="next" href="NMSetting8021x.html" title="NMSetting8021x">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="next" href="NMSettingDcb.html" title="NMSettingDcb">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingAdsl.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingAdsl.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingAdsl.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingOlpcMesh.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSetting8021x.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingOlpcMesh.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingDcb.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingAdsl.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingAdsl.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingAdsl.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingAdsl.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingAdsl"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,438 +37,74 @@
<h2><span class="refentrytitle"><a name="NMSettingAdsl.top_of_page"></a>NMSettingAdsl</span></h2>
<p>NMSettingAdsl — Describes ADSL-based properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingAdsl.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-error-quark" title="nm_setting_adsl_error_quark ()">nm_setting_adsl_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-new" title="nm_setting_adsl_new ()">nm_setting_adsl_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-username" title="nm_setting_adsl_get_username ()">nm_setting_adsl_get_username</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password" title="nm_setting_adsl_get_password ()">nm_setting_adsl_get_password</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-protocol" title="nm_setting_adsl_get_protocol ()">nm_setting_adsl_get_protocol</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-encapsulation" title="nm_setting_adsl_get_encapsulation ()">nm_setting_adsl_get_encapsulation</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vpi" title="nm_setting_adsl_get_vpi ()">nm_setting_adsl_get_vpi</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vci" title="nm_setting_adsl_get_vci ()">nm_setting_adsl_get_vci</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password-flags" title="nm_setting_adsl_get_password_flags ()">nm_setting_adsl_get_password_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingAdsl.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdsl--encapsulation" title="The “encapsulation†property">encapsulation</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title="The “password†property">password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password-flags" title="The “password-flags†property">password-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdsl--protocol" title="The “protocol†property">protocol</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdsl--username" title="The “username†property">username</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vci" title="The “vci†property">vci</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vpi" title="The “vpi†property">vpi</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingAdsl.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-SETTING-NAME:CAPS" title="NM_SETTING_ADSL_SETTING_NAME">NM_SETTING_ADSL_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NMSettingAdslError" title="enum NMSettingAdslError">NMSettingAdslError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ERROR:CAPS" title="NM_SETTING_ADSL_ERROR">NM_SETTING_ADSL_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-USERNAME:CAPS" title="NM_SETTING_ADSL_USERNAME">NM_SETTING_ADSL_USERNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD:CAPS" title="NM_SETTING_ADSL_PASSWORD">NM_SETTING_ADSL_PASSWORD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS" title="NM_SETTING_ADSL_PASSWORD_FLAGS">NM_SETTING_ADSL_PASSWORD_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL:CAPS" title="NM_SETTING_ADSL_PROTOCOL">NM_SETTING_ADSL_PROTOCOL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION">NM_SETTING_ADSL_ENCAPSULATION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-VPI:CAPS" title="NM_SETTING_ADSL_VPI">NM_SETTING_ADSL_VPI</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-VCI:CAPS" title="NM_SETTING_ADSL_VCI">NM_SETTING_ADSL_VCI</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOA:CAPS" title="NM_SETTING_ADSL_PROTOCOL_PPPOA">NM_SETTING_ADSL_PROTOCOL_PPPOA</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOE:CAPS" title="NM_SETTING_ADSL_PROTOCOL_PPPOE">NM_SETTING_ADSL_PROTOCOL_PPPOE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS" title="NM_SETTING_ADSL_PROTOCOL_IPOATM">NM_SETTING_ADSL_PROTOCOL_IPOATM</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION_VCMUX">NM_SETTING_ADSL_ENCAPSULATION_VCMUX</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION_LLC">NM_SETTING_ADSL_ENCAPSULATION_LLC</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingAdsl.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingAdslError"></a><pre class="synopsis">
+#include &lt;nm-setting-adsl.h&gt;
+
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-SETTING-NAME:CAPS" title="NM_SETTING_ADSL_SETTING_NAME">NM_SETTING_ADSL_SETTING_NAME</a>
+enum <a class="link" href="NMSettingAdsl.html#NMSettingAdslError-enum" title="enum NMSettingAdslError">NMSettingAdslError</a>;
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ERROR:CAPS" title="NM_SETTING_ADSL_ERROR">NM_SETTING_ADSL_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-error-quark" title="nm_setting_adsl_error_quark ()">nm_setting_adsl_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-USERNAME:CAPS" title="NM_SETTING_ADSL_USERNAME">NM_SETTING_ADSL_USERNAME</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD:CAPS" title="NM_SETTING_ADSL_PASSWORD">NM_SETTING_ADSL_PASSWORD</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS" title="NM_SETTING_ADSL_PASSWORD_FLAGS">NM_SETTING_ADSL_PASSWORD_FLAGS</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL:CAPS" title="NM_SETTING_ADSL_PROTOCOL">NM_SETTING_ADSL_PROTOCOL</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION">NM_SETTING_ADSL_ENCAPSULATION</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-VPI:CAPS" title="NM_SETTING_ADSL_VPI">NM_SETTING_ADSL_VPI</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-VCI:CAPS" title="NM_SETTING_ADSL_VCI">NM_SETTING_ADSL_VCI</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOA:CAPS" title="NM_SETTING_ADSL_PROTOCOL_PPPOA">NM_SETTING_ADSL_PROTOCOL_PPPOA</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOE:CAPS" title="NM_SETTING_ADSL_PROTOCOL_PPPOE">NM_SETTING_ADSL_PROTOCOL_PPPOE</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS" title="NM_SETTING_ADSL_PROTOCOL_IPOATM">NM_SETTING_ADSL_PROTOCOL_IPOATM</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION_VCMUX">NM_SETTING_ADSL_ENCAPSULATION_VCMUX</a>
+#define <a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION_LLC">NM_SETTING_ADSL_ENCAPSULATION_LLC</a>
+ <a class="link" href="NMSettingAdsl.html#NMSettingAdsl-struct" title="NMSettingAdsl">NMSettingAdsl</a>;
+ <a class="link" href="NMSettingAdsl.html#NMSettingAdslClass" title="NMSettingAdslClass">NMSettingAdslClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-new" title="nm_setting_adsl_new ()">nm_setting_adsl_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-username" title="nm_setting_adsl_get_username ()">nm_setting_adsl_get_username</a> (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password" title="nm_setting_adsl_get_password ()">nm_setting_adsl_get_password</a> (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-protocol" title="nm_setting_adsl_get_protocol ()">nm_setting_adsl_get_protocol</a> (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-encapsulation" title="nm_setting_adsl_get_encapsulation ()">nm_setting_adsl_get_encapsulation</a> (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vpi" title="nm_setting_adsl_get_vpi ()">nm_setting_adsl_get_vpi</a> (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vci" title="nm_setting_adsl_get_vci ()">nm_setting_adsl_get_vci</a> (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password-flags" title="nm_setting_adsl_get_password_flags ()">nm_setting_adsl_get_password_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingAdsl.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingAdslError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingAdsl
+<pre class="synopsis">
+ GEnum
+ +----NMSettingAdslError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingAdsl
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingAdsl.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-adsl.h&gt;
+<a name="NMSettingAdsl.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--encapsulation" title='The "encapsulation" property'>encapsulation</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title='The "password" property'>password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password-flags" title='The "password-flags" property'>password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--protocol" title='The "protocol" property'>protocol</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--username" title='The "username" property'>username</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vci" title='The "vci" property'>vci</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vpi" title='The "vpi" property'>vpi</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
</pre>
</div>
<div class="refsect1">
<a name="NMSettingAdsl.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-properties of ADSL connections.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingAdsl.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-adsl-error-quark"></a><h3>nm_setting_adsl_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_adsl_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.19.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-new"></a><h3>nm_setting_adsl_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_adsl_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.19.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> object</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-get-username"></a><h3>nm_setting_adsl_get_username ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_adsl_get_username (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.19.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.19.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--username" title="The “username†property"><span class="type">“usernameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-get-password"></a><h3>nm_setting_adsl_get_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_adsl_get_password (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.19.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.19.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title="The “password†property"><span class="type">“passwordâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-get-protocol"></a><h3>nm_setting_adsl_get_protocol ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_adsl_get_protocol (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.19.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.19.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--protocol" title="The “protocol†property"><span class="type">“protocolâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-get-encapsulation"></a><h3>nm_setting_adsl_get_encapsulation ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_adsl_get_encapsulation (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.19.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.19.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--encapsulation" title="The “encapsulation†property"><span class="type">“encapsulationâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-get-vpi"></a><h3>nm_setting_adsl_get_vpi ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_adsl_get_vpi (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.19.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.19.9.8.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vpi" title="The “vpi†property"><span class="type">“vpiâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-get-vci"></a><h3>nm_setting_adsl_get_vci ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_adsl_get_vci (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.19.9.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.19.9.9.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vci" title="The “vci†property"><span class="type">“vciâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-adsl-get-password-flags"></a><h3>nm_setting_adsl_get_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_adsl_get_password_flags (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.19.9.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.19.9.10.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title="The “password†property"><span class="type">“passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
+<p>
+The <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+properties of ADSL connections.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingAdsl.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingAdsl.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-ADSL-SETTING-NAME:CAPS"></a><h3>NM_SETTING_ADSL_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_ADSL_SETTING_NAME "adsl"
@@ -472,42 +114,38 @@ nm_setting_adsl_get_password_flags (<em class="parameter"><code><a class="link"
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingAdslError"></a><h3>enum NMSettingAdslError</h3>
-<div class="refsect3">
-<a name="id-1.2.19.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingAdslError-enum"></a><h3>enum NMSettingAdslError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_ADSL_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_ADSL_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_ADSL_ERROR_MISSING_PROPERTY /*&lt; nick=MissingProperty &gt;*/
+} NMSettingAdslError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-ADSL-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_ADSL_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-ADSL-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_ADSL_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-ADSL-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_ADSL_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-ADSL-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_ADSL_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-ADSL-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_ADSL_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-ADSL-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_ADSL_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-ADSL-ERROR:CAPS"></a><h3>NM_SETTING_ADSL_ERROR</h3>
@@ -518,6 +156,24 @@ required</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-adsl-error-quark"></a><h3>nm_setting_adsl_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_adsl_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-ADSL-USERNAME:CAPS"></a><h3>NM_SETTING_ADSL_USERNAME</h3>
<pre class="programlisting">#define NM_SETTING_ADSL_USERNAME "username"
</pre>
@@ -612,64 +268,267 @@ required</p>
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingAdsl-struct"></a><h3>NMSettingAdsl</h3>
+<pre class="programlisting">typedef struct _NMSettingAdsl NMSettingAdsl;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingAdslClass"></a><h3>NMSettingAdslClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingAdslClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-new"></a><h3>nm_setting_adsl_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_adsl_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> object</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-get-username"></a><h3>nm_setting_adsl_get_username ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_adsl_get_username (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--username" title='The "username" property'><span class="type">"username"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-get-password"></a><h3>nm_setting_adsl_get_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_adsl_get_password (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title='The "password" property'><span class="type">"password"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-get-protocol"></a><h3>nm_setting_adsl_get_protocol ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_adsl_get_protocol (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--protocol" title='The "protocol" property'><span class="type">"protocol"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-get-encapsulation"></a><h3>nm_setting_adsl_get_encapsulation ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_adsl_get_encapsulation (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--encapsulation" title='The "encapsulation" property'><span class="type">"encapsulation"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-get-vpi"></a><h3>nm_setting_adsl_get_vpi ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_adsl_get_vpi (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vpi" title='The "vpi" property'><span class="type">"vpi"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-get-vci"></a><h3>nm_setting_adsl_get_vci ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_adsl_get_vci (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vci" title='The "vci" property'><span class="type">"vci"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-adsl-get-password-flags"></a><h3>nm_setting_adsl_get_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_adsl_get_password_flags (<em class="parameter"><code><a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title='The "password" property'><span class="type">"password"</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<div class="refsect1">
<a name="NMSettingAdsl.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingAdsl--encapsulation"></a><h3>The <code class="literal">“encapsulationâ€</code> property</h3>
-<pre class="programlisting"> “encapsulation†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Encapsulation of ADSL connection.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingAdsl--encapsulation"></a><h3>The <code class="literal">"encapsulation"</code> property</h3>
+<pre class="programlisting"> "encapsulation" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Encapsulation of ADSL connection. Can be "vcmux" or "llc".
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingAdsl--password"></a><h3>The <code class="literal">“passwordâ€</code> property</h3>
-<pre class="programlisting"> “password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Password used to authenticate with the pppoa service.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingAdsl--password"></a><h3>The <code class="literal">"password"</code> property</h3>
+<pre class="programlisting"> "password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Password used to authenticate with the ADSL service.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingAdsl--password-flags"></a><h3>The <code class="literal">“password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the ADSL password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingAdsl--password-flags"></a><h3>The <code class="literal">"password-flags"</code> property</h3>
+<pre class="programlisting"> "password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the <a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title='The "password" property'><span class="type">"password"</span></a> property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingAdsl--protocol"></a><h3>The <code class="literal">“protocolâ€</code> property</h3>
-<pre class="programlisting"> “protocol†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>ADSL connection protocol.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingAdsl--protocol"></a><h3>The <code class="literal">"protocol"</code> property</h3>
+<pre class="programlisting"> "protocol" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingAdsl--username"></a><h3>The <code class="literal">“usernameâ€</code> property</h3>
-<pre class="programlisting"> “username†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Username used to authenticate with the pppoa service.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingAdsl--username"></a><h3>The <code class="literal">"username"</code> property</h3>
+<pre class="programlisting"> "username" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Username used to authenticate with the ADSL service.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingAdsl--vci"></a><h3>The <code class="literal">“vciâ€</code> property</h3>
-<pre class="programlisting"> “vci†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>VCI of ADSL connection.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingAdsl--vci"></a><h3>The <code class="literal">"vci"</code> property</h3>
+<pre class="programlisting"> "vci" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+VCI of ADSL connection
+</p>
<p>Allowed values: &lt;= 65536</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingAdsl--vpi"></a><h3>The <code class="literal">“vpiâ€</code> property</h3>
-<pre class="programlisting"> “vpi†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>VPI of ADSL connection.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingAdsl--vpi"></a><h3>The <code class="literal">"vpi"</code> property</h3>
+<pre class="programlisting"> "vpi" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+VPI of ADSL connection
+</p>
<p>Allowed values: &lt;= 65536</p>
<p>Default value: 0</p>
</div>
@@ -677,6 +536,6 @@ required</p>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingBluetooth.html b/docs/libnm-util/html/NMSettingBluetooth.html
index 0fa1c00aa..d627ed93a 100644
--- a/docs/libnm-util/html/NMSettingBluetooth.html
+++ b/docs/libnm-util/html/NMSettingBluetooth.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingBluetooth</title>
+<title>NMSettingBluetooth</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">
<link rel="next" href="NMSettingSerial.html" title="NMSettingSerial">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingBluetooth.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingBluetooth.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingBluetooth.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingWirelessSecurity.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingSerial.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingWirelessSecurity.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingSerial.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingBluetooth.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingBluetooth.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingBluetooth.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingBluetooth.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingBluetooth"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,218 +37,59 @@
<h2><span class="refentrytitle"><a name="NMSettingBluetooth.top_of_page"></a>NMSettingBluetooth</span></h2>
<p>NMSettingBluetooth — Describes Bluetooth connection properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingBluetooth.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-error-quark" title="nm_setting_bluetooth_error_quark ()">nm_setting_bluetooth_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-new" title="nm_setting_bluetooth_new ()">nm_setting_bluetooth_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr" title="nm_setting_bluetooth_get_bdaddr ()">nm_setting_bluetooth_get_bdaddr</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type" title="nm_setting_bluetooth_get_connection_type ()">nm_setting_bluetooth_get_connection_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBluetooth.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--bdaddr" title="The “bdaddr†property">bdaddr</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--type" title="The “type†property">type</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBluetooth.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS" title="NM_SETTING_BLUETOOTH_SETTING_NAME">NM_SETTING_BLUETOOTH_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothError" title="enum NMSettingBluetoothError">NMSettingBluetoothError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR:CAPS" title="NM_SETTING_BLUETOOTH_ERROR">NM_SETTING_BLUETOOTH_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-BDADDR:CAPS" title="NM_SETTING_BLUETOOTH_BDADDR">NM_SETTING_BLUETOOTH_BDADDR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE:CAPS" title="NM_SETTING_BLUETOOTH_TYPE">NM_SETTING_BLUETOOTH_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_DUN">NM_SETTING_BLUETOOTH_TYPE_DUN</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_PANU">NM_SETTING_BLUETOOTH_TYPE_PANU</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBluetooth.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingBluetoothError"></a><pre class="synopsis">
+#include &lt;nm-setting-bluetooth.h&gt;
+
+#define <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS" title="NM_SETTING_BLUETOOTH_SETTING_NAME">NM_SETTING_BLUETOOTH_SETTING_NAME</a>
+enum <a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothError-enum" title="enum NMSettingBluetoothError">NMSettingBluetoothError</a>;
+#define <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR:CAPS" title="NM_SETTING_BLUETOOTH_ERROR">NM_SETTING_BLUETOOTH_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-error-quark" title="nm_setting_bluetooth_error_quark ()">nm_setting_bluetooth_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-BDADDR:CAPS" title="NM_SETTING_BLUETOOTH_BDADDR">NM_SETTING_BLUETOOTH_BDADDR</a>
+#define <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE:CAPS" title="NM_SETTING_BLUETOOTH_TYPE">NM_SETTING_BLUETOOTH_TYPE</a>
+#define <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_DUN">NM_SETTING_BLUETOOTH_TYPE_DUN</a>
+#define <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_PANU">NM_SETTING_BLUETOOTH_TYPE_PANU</a>
+ <a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth-struct" title="NMSettingBluetooth">NMSettingBluetooth</a>;
+ <a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothClass" title="NMSettingBluetoothClass">NMSettingBluetoothClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-new" title="nm_setting_bluetooth_new ()">nm_setting_bluetooth_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr" title="nm_setting_bluetooth_get_bdaddr ()">nm_setting_bluetooth_get_bdaddr</a> (<em class="parameter"><code><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type" title="nm_setting_bluetooth_get_connection_type ()">nm_setting_bluetooth_get_connection_type</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingBluetooth.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingBluetoothError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingBluetooth
+<pre class="synopsis">
+ GEnum
+ +----NMSettingBluetoothError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingBluetooth
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingBluetooth.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-bluetooth.h&gt;
+<a name="NMSettingBluetooth.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--bdaddr" title='The "bdaddr" property'>bdaddr</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--type" title='The "type" property'>type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
</pre>
</div>
<div class="refsect1">
<a name="NMSettingBluetooth.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+<p>
+The <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
properties necessary for connection to devices that provide network
connections via the Bluetooth Dial-Up Networking (DUN) and Network Access
-Point (NAP) profiles.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingBluetooth.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-bluetooth-error-quark"></a><h3>nm_setting_bluetooth_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_bluetooth_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.8.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bluetooth-new"></a><h3>nm_setting_bluetooth_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_bluetooth_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.8.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bluetooth-get-bdaddr"></a><h3>nm_setting_bluetooth_get_bdaddr ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_bluetooth_get_bdaddr (<em class="parameter"><code><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> *setting</code></em>);</pre>
-<p>Gets the Bluetooth address of the remote device which this setting
-describes a connection to.</p>
-<div class="refsect3">
-<a name="id-1.2.8.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.8.9.4.6"></a><h4>Returns</h4>
-<p> the Bluetooth address</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bluetooth-get-connection-type"></a><h3>nm_setting_bluetooth_get_connection_type ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_bluetooth_get_connection_type
- (<em class="parameter"><code><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> *setting</code></em>);</pre>
-<p>Returns the connection method for communicating with the remote device (i.e.
-either DUN to a DUN-capable device or PANU to a NAP-capable device).</p>
-<div class="refsect3">
-<a name="id-1.2.8.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.8.9.5.6"></a><h4>Returns</h4>
-<p> the type, either <code class="literal">NM_SETTING_BLUETOOTH_PANU</code> or <code class="literal">NM_SETTING_BLUETOOTH_DUN</code></p>
-<p></p>
-</div>
-</div>
+Point (NAP) profiles.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingBluetooth.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingBluetooth.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS"></a><h3>NM_SETTING_BLUETOOTH_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_BLUETOOTH_SETTING_NAME "bluetooth"
@@ -252,51 +99,46 @@ either DUN to a DUN-capable device or PANU to a NAP-capable device).</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBluetoothError"></a><h3>enum NMSettingBluetoothError</h3>
-<div class="refsect3">
-<a name="id-1.2.8.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingBluetoothError-enum"></a><h3>enum NMSettingBluetoothError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_BLUETOOTH_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND, /*&lt; nick=TypeSettingNotFound &gt;*/
+} NMSettingBluetoothError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BLUETOOTH-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_BLUETOOTH_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-BLUETOOTH-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BLUETOOTH_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BLUETOOTH-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-BLUETOOTH-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BLUETOOTH-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-BLUETOOTH-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BLUETOOTH-ERROR-TYPE-SETTING-NOT-FOUND:CAPS"></a>NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND</p></td>
-<td class="enum_member_description">
-<p>the connection
+<td><p><a name="NM-SETTING-BLUETOOTH-ERROR-TYPE-SETTING-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND</code></span></p></td>
+<td>the connection
did not contain a required type setting, ie for DUN connections the connection
-must also contain an <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> or <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> as appropriate</p>
+must also contain an <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> or <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> as appropriate
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-BLUETOOTH-ERROR:CAPS"></a><h3>NM_SETTING_BLUETOOTH_ERROR</h3>
@@ -307,6 +149,24 @@ must also contain an <a class="link" href="NMSettingGsm.html" title="NMSettingGs
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-bluetooth-error-quark"></a><h3>nm_setting_bluetooth_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_bluetooth_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-BLUETOOTH-BDADDR:CAPS"></a><h3>NM_SETTING_BLUETOOTH_BDADDR</h3>
<pre class="programlisting">#define NM_SETTING_BLUETOOTH_BDADDR "bdaddr"
</pre>
@@ -326,38 +186,141 @@ must also contain an <a class="link" href="NMSettingGsm.html" title="NMSettingGs
<a name="NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS"></a><h3>NM_SETTING_BLUETOOTH_TYPE_DUN</h3>
<pre class="programlisting">#define NM_SETTING_BLUETOOTH_TYPE_DUN "dun"
</pre>
-<p>Connection type describing a connection to devices that support the Bluetooth
-DUN profile.</p>
+<p>
+Connection type describing a connection to devices that support the Bluetooth
+DUN profile.
+</p>
</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS"></a><h3>NM_SETTING_BLUETOOTH_TYPE_PANU</h3>
<pre class="programlisting">#define NM_SETTING_BLUETOOTH_TYPE_PANU "panu"
</pre>
-<p>Connection type describing a connection to devices that support the Bluetooth
-NAP (Network Access Point) protocol, which accepts connections via PANU.</p>
+<p>
+Connection type describing a connection to devices that support the Bluetooth
+NAP (Network Access Point) protocol, which accepts connections via PANU.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBluetooth-struct"></a><h3>NMSettingBluetooth</h3>
+<pre class="programlisting">typedef struct _NMSettingBluetooth NMSettingBluetooth;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBluetoothClass"></a><h3>NMSettingBluetoothClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingBluetoothClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bluetooth-new"></a><h3>nm_setting_bluetooth_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_bluetooth_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bluetooth-get-bdaddr"></a><h3>nm_setting_bluetooth_get_bdaddr ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_bluetooth_get_bdaddr (<em class="parameter"><code><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> *setting</code></em>);</pre>
+<p>
+Gets the Bluetooth address of the remote device which this setting
+describes a connection to.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the Bluetooth address</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bluetooth-get-connection-type"></a><h3>nm_setting_bluetooth_get_connection_type ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_bluetooth_get_connection_type
+ (<em class="parameter"><code><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> *setting</code></em>);</pre>
+<p>
+Returns the connection method for communicating with the remote device (i.e.
+either DUN to a DUN-capable device or PANU to a NAP-capable device).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the type, either <code class="literal">NM_SETTING_BLUETOOTH_PANU</code> or <code class="literal">NM_SETTING_BLUETOOTH_DUN</code>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMSettingBluetooth.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingBluetooth--bdaddr"></a><h3>The <code class="literal">“bdaddrâ€</code> property</h3>
-<pre class="programlisting"> “bdaddr†<span class="type">GArray_guchar_</span> *</pre>
-<p>The Bluetooth address of the device.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingBluetooth--bdaddr"></a><h3>The <code class="literal">"bdaddr"</code> property</h3>
+<pre class="programlisting"> "bdaddr" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
+<p>
+The Bluetooth address of the device.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBluetooth--type"></a><h3>The <code class="literal">“typeâ€</code> property</h3>
-<pre class="programlisting"> “type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Either 'dun' for Dial-Up Networking connections or 'panu' for Personal Area Networking connections.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingBluetooth--type"></a><h3>The <code class="literal">"type"</code> property</h3>
+<pre class="programlisting"> "type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Either "dun" for Dial-Up Networking connections or "panu" for Personal
+Area Networking connections to devices supporting the NAP profile.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingBond.html b/docs/libnm-util/html/NMSettingBond.html
index b047b365e..ac130ddef 100644
--- a/docs/libnm-util/html/NMSettingBond.html
+++ b/docs/libnm-util/html/NMSettingBond.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingBond</title>
+<title>NMSettingBond</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingWimax.html" title="NMSettingWimax">
<link rel="next" href="NMSettingBridge.html" title="NMSettingBridge">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingBond.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingBond.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingBond.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingWimax.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingBridge.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingWimax.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingBridge.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingBond.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingBond.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingBond.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingBond.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingBond"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,662 +37,655 @@
<h2><span class="refentrytitle"><a name="NMSettingBond.top_of_page"></a>NMSettingBond</span></h2>
<p>NMSettingBond — Describes connection properties for bonds</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBond.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingBondError"></a><pre class="synopsis">
+#include &lt;nm-setting-bond.h&gt;
+
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS" title="NM_SETTING_BOND_SETTING_NAME">NM_SETTING_BOND_SETTING_NAME</a>
+enum <a class="link" href="NMSettingBond.html#NMSettingBondError-enum" title="enum NMSettingBondError">NMSettingBondError</a>;
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-ERROR:CAPS" title="NM_SETTING_BOND_ERROR">NM_SETTING_BOND_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingBond.html#nm-setting-bond-error-quark" title="nm_setting_bond_error_quark ()">nm_setting_bond_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-INTERFACE-NAME:CAPS" title="NM_SETTING_BOND_INTERFACE_NAME">NM_SETTING_BOND_INTERFACE_NAME</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTIONS:CAPS" title="NM_SETTING_BOND_OPTIONS">NM_SETTING_BOND_OPTIONS</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-MODE:CAPS" title="NM_SETTING_BOND_OPTION_MODE">NM_SETTING_BOND_OPTION_MODE</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-MIIMON:CAPS" title="NM_SETTING_BOND_OPTION_MIIMON">NM_SETTING_BOND_OPTION_MIIMON</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS" title="NM_SETTING_BOND_OPTION_DOWNDELAY">NM_SETTING_BOND_OPTION_DOWNDELAY</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-UPDELAY:CAPS" title="NM_SETTING_BOND_OPTION_UPDELAY">NM_SETTING_BOND_OPTION_UPDELAY</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS" title="NM_SETTING_BOND_OPTION_ARP_INTERVAL">NM_SETTING_BOND_OPTION_ARP_INTERVAL</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS" title="NM_SETTING_BOND_OPTION_ARP_IP_TARGET">NM_SETTING_BOND_OPTION_ARP_IP_TARGET</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS" title="NM_SETTING_BOND_OPTION_ARP_VALIDATE">NM_SETTING_BOND_OPTION_ARP_VALIDATE</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY:CAPS" title="NM_SETTING_BOND_OPTION_PRIMARY">NM_SETTING_BOND_OPTION_PRIMARY</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS" title="NM_SETTING_BOND_OPTION_PRIMARY_RESELECT">NM_SETTING_BOND_OPTION_PRIMARY_RESELECT</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS" title="NM_SETTING_BOND_OPTION_FAIL_OVER_MAC">NM_SETTING_BOND_OPTION_FAIL_OVER_MAC</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS" title="NM_SETTING_BOND_OPTION_USE_CARRIER">NM_SETTING_BOND_OPTION_USE_CARRIER</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-AD-SELECT:CAPS" title="NM_SETTING_BOND_OPTION_AD_SELECT">NM_SETTING_BOND_OPTION_AD_SELECT</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS" title="NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY">NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY</a>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS" title="NM_SETTING_BOND_OPTION_RESEND_IGMP">NM_SETTING_BOND_OPTION_RESEND_IGMP</a>
+ <a class="link" href="NMSettingBond.html#NMSettingBond-struct" title="NMSettingBond">NMSettingBond</a>;
+ <a class="link" href="NMSettingBond.html#NMSettingBondClass" title="NMSettingBondClass">NMSettingBondClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingBond.html#nm-setting-bond-new" title="nm_setting_bond_new ()">nm_setting_bond_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingBond.html#nm-setting-bond-get-interface-name" title="nm_setting_bond_get_interface_name ()">nm_setting_bond_get_interface_name</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingBond.html#nm-setting-bond-get-num-options" title="nm_setting_bond_get_num_options ()">nm_setting_bond_get_num_options</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingBond.html#nm-setting-bond-get-option" title="nm_setting_bond_get_option ()">nm_setting_bond_get_option</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_value</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-by-name" title="nm_setting_bond_get_option_by_name ()">nm_setting_bond_get_option_by_name</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingBond.html#nm-setting-bond-add-option" title="nm_setting_bond_add_option ()">nm_setting_bond_add_option</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingBond.html#nm-setting-bond-remove-option" title="nm_setting_bond_remove_option ()">nm_setting_bond_remove_option</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingBond.html#nm-setting-bond-validate-option" title="nm_setting_bond_validate_option ()">nm_setting_bond_validate_option</a> (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);
+const <span class="returnvalue">char</span> ** <a class="link" href="NMSettingBond.html#nm-setting-bond-get-valid-options" title="nm_setting_bond_get_valid_options ()">nm_setting_bond_get_valid_options</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-default" title="nm_setting_bond_get_option_default ()">nm_setting_bond_get_option_default</a> (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingBond.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingBondError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingBond
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingBond.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingBond.html#NMSettingBond--interface-name" title='The "interface-name" property'>interface-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingBond.html#NMSettingBond--options" title='The "options" property'>options</a>" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSettingBond.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingBond.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for bond connections.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingBond.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-SETTING-NAME:CAPS"></a><h3>NM_SETTING_BOND_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_SETTING_NAME "bond"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBondError-enum"></a><h3>enum NMSettingBondError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_BOND_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_BOND_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_BOND_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_BOND_ERROR_INVALID_OPTION, /*&lt; nick=InvalidOption &gt;*/
+ NM_SETTING_BOND_ERROR_MISSING_OPTION, /*&lt; nick=MissingOption &gt;*/
+} NMSettingBondError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-error-quark" title="nm_setting_bond_error_quark ()">nm_setting_bond_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-new" title="nm_setting_bond_new ()">nm_setting_bond_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-interface-name" title="nm_setting_bond_get_interface_name ()">nm_setting_bond_get_interface_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-num-options" title="nm_setting_bond_get_num_options ()">nm_setting_bond_get_num_options</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option" title="nm_setting_bond_get_option ()">nm_setting_bond_get_option</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BOND-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BOND_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-by-name" title="nm_setting_bond_get_option_by_name ()">nm_setting_bond_get_option_by_name</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BOND-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BOND_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-add-option" title="nm_setting_bond_add_option ()">nm_setting_bond_add_option</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BOND-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BOND_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-remove-option" title="nm_setting_bond_remove_option ()">nm_setting_bond_remove_option</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BOND-ERROR-INVALID-OPTION:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BOND_ERROR_INVALID_OPTION</code></span></p></td>
+<td>
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> **
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-valid-options" title="nm_setting_bond_get_valid_options ()">nm_setting_bond_get_valid_options</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-default" title="nm_setting_bond_get_option_default ()">nm_setting_bond_get_option_default</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BOND-ERROR-MISSING-OPTION:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BOND_ERROR_MISSING_OPTION</code></span></p></td>
+<td>
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingBond.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingBond.html#NMSettingBond--interface-name" title="The “interface-name†property">interface-name</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GHashTable_gchararray+gchararray_*</span></td>
-<td class="property_name"><a class="link" href="NMSettingBond.html#NMSettingBond--options" title="The “options†property">options</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-ERROR:CAPS"></a><h3>NM_SETTING_BOND_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_ERROR nm_setting_bond_error_quark ()
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBond.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bond-error-quark"></a><h3>nm_setting_bond_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_bond_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS" title="NM_SETTING_BOND_SETTING_NAME">NM_SETTING_BOND_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NMSettingBondError" title="enum NMSettingBondError">NMSettingBondError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-ERROR:CAPS" title="NM_SETTING_BOND_ERROR">NM_SETTING_BOND_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-INTERFACE-NAME:CAPS" title="NM_SETTING_BOND_INTERFACE_NAME">NM_SETTING_BOND_INTERFACE_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTIONS:CAPS" title="NM_SETTING_BOND_OPTIONS">NM_SETTING_BOND_OPTIONS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-MODE:CAPS" title="NM_SETTING_BOND_OPTION_MODE">NM_SETTING_BOND_OPTION_MODE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-MIIMON:CAPS" title="NM_SETTING_BOND_OPTION_MIIMON">NM_SETTING_BOND_OPTION_MIIMON</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS" title="NM_SETTING_BOND_OPTION_DOWNDELAY">NM_SETTING_BOND_OPTION_DOWNDELAY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-UPDELAY:CAPS" title="NM_SETTING_BOND_OPTION_UPDELAY">NM_SETTING_BOND_OPTION_UPDELAY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS" title="NM_SETTING_BOND_OPTION_ARP_INTERVAL">NM_SETTING_BOND_OPTION_ARP_INTERVAL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS" title="NM_SETTING_BOND_OPTION_ARP_IP_TARGET">NM_SETTING_BOND_OPTION_ARP_IP_TARGET</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingBond.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingBondError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingBond
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_BOND_INTERFACE_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_INTERFACE_NAME "interface-name"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBond.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-bond.h&gt;
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTIONS:CAPS"></a><h3>NM_SETTING_BOND_OPTIONS</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTIONS "options"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBond.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
-necessary for bond connections.</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-MODE:CAPS"></a><h3>NM_SETTING_BOND_OPTION_MODE</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_MODE "mode"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBond.functions_details"></a><h2>Functions</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-MIIMON:CAPS"></a><h3>NM_SETTING_BOND_OPTION_MIIMON</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_MIIMON "miimon"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS"></a><h3>NM_SETTING_BOND_OPTION_DOWNDELAY</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_DOWNDELAY "downdelay"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-UPDELAY:CAPS"></a><h3>NM_SETTING_BOND_OPTION_UPDELAY</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_UPDELAY "updelay"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS"></a><h3>NM_SETTING_BOND_OPTION_ARP_INTERVAL</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_ARP_INTERVAL "arp_interval"
+</pre>
+<p>
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-setting-bond-error-quark"></a><h3>nm_setting_bond_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_bond_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> errors.</p>
-<p></p>
+<a name="NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS"></a><h3>NM_SETTING_BOND_OPTION_ARP_IP_TARGET</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_ARP_IP_TARGET "arp_ip_target"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS"></a><h3>NM_SETTING_BOND_OPTION_ARP_VALIDATE</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_ARP_VALIDATE "arp_validate"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-new"></a><h3>nm_setting_bond_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_bond_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<a name="NM-SETTING-BOND-OPTION-PRIMARY:CAPS"></a><h3>NM_SETTING_BOND_OPTION_PRIMARY</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_PRIMARY "primary"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS"></a><h3>NM_SETTING_BOND_OPTION_PRIMARY_RESELECT</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_PRIMARY_RESELECT "primary_reselect"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS"></a><h3>NM_SETTING_BOND_OPTION_FAIL_OVER_MAC</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_FAIL_OVER_MAC "fail_over_mac"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS"></a><h3>NM_SETTING_BOND_OPTION_USE_CARRIER</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_USE_CARRIER "use_carrier"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-AD-SELECT:CAPS"></a><h3>NM_SETTING_BOND_OPTION_AD_SELECT</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_AD_SELECT "ad_select"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-get-interface-name"></a><h3>nm_setting_bond_get_interface_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_bond_get_interface_name (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.13.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS"></a><h3>NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY "xmit_hash_policy"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS"></a><h3>NM_SETTING_BOND_OPTION_RESEND_IGMP</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_RESEND_IGMP "resend_igmp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBond-struct"></a><h3>NMSettingBond</h3>
+<pre class="programlisting">typedef struct _NMSettingBond NMSettingBond;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBondClass"></a><h3>NMSettingBondClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingBondClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bond-new"></a><h3>nm_setting_bond_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_bond_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBond.html#NMSettingBond--interface-name" title="The “interface-name†property"><span class="type">“interface-nameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bond-get-interface-name"></a><h3>nm_setting_bond_get_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_bond_get_interface_name (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html#NMSettingBond--interface-name" title='The "interface-name" property'><span class="type">"interface-name"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-get-num-options"></a><h3>nm_setting_bond_get_num_options ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_bond_get_num_options (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);</pre>
-<p>Returns the number of options that should be set for this bond when it
+<a name="nm-setting-bond-get-num-options"></a><h3>nm_setting_bond_get_num_options ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_bond_get_num_options (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);</pre>
+<p>
+Returns the number of options that should be set for this bond when it
is activated. This can be used to retrieve each option individually
-using <a class="link" href="NMSettingBond.html#nm-setting-bond-get-option" title="nm_setting_bond_get_option ()"><code class="function">nm_setting_bond_get_option()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+using <a class="link" href="NMSettingBond.html#nm-setting-bond-get-option" title="nm_setting_bond_get_option ()"><code class="function">nm_setting_bond_get_option()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of bonding options</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.5.6"></a><h4>Returns</h4>
-<p> the number of bonding options</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-get-option"></a><h3>nm_setting_bond_get_option ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_bond_get_option (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **out_name</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **out_value</code></em>);</pre>
-<p>Given an index, return the value of the bonding option at that index. Indexes
+<a name="nm-setting-bond-get-option"></a><h3>nm_setting_bond_get_option ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_bond_get_option (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_value</code></em>);</pre>
+<p>
+Given an index, return the value of the bonding option at that index. Indexes
are *not* guaranteed to be static across modifications to options done by
-<a class="link" href="NMSettingBond.html#nm-setting-bond-add-option" title="nm_setting_bond_add_option ()"><code class="function">nm_setting_bond_add_option()</code></a> and <a class="link" href="NMSettingBond.html#nm-setting-bond-remove-option" title="nm_setting_bond_remove_option ()"><code class="function">nm_setting_bond_remove_option()</code></a>,
+<a class="link" href="NMSettingBond.html#nm-setting-bond-add-option" title="nm_setting_bond_add_option ()"><code class="function">nm_setting_bond_add_option()</code></a> and <a class="link" href="NMSettingBond.html#nm-setting-bond-remove-option" title="nm_setting_bond_remove_option ()"><code class="function">nm_setting_bond_remove_option()</code></a>,
and should not be used to refer to options except for short periods of time
-such as during option iteration.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+such as during option iteration.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>index of the desired option, from 0 to
+<a class="link" href="NMSettingBond.html#nm-setting-bond-get-num-options" title="nm_setting_bond_get_num_options ()"><code class="function">nm_setting_bond_get_num_options()</code></a> - 1</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>index of the desired option, from 0 to
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-num-options" title="nm_setting_bond_get_num_options ()"><code class="function">nm_setting_bond_get_num_options()</code></a> - 1</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_name</code></em> :</span></p></td>
+<td>on return, the name of the bonding option; this
+value is owned by the setting and should not be modified. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_name</p></td>
-<td class="parameter_description"><p> on return, the name of the bonding option; this
-value is owned by the setting and should not be modified. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>out_value</code></em> :</span></p></td>
+<td>on return, the value of the name of the bonding
+option; this value is owned by the setting and should not be modified. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_value</p></td>
-<td class="parameter_description"><p> on return, the value of the name of the bonding
-option; this value is owned by the setting and should not be modified. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success if the index was valid and an option was found,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the index was invalid (ie, greater than the number of options
+currently held by the setting)</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.6.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success if the index was valid and an option was found,
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the index was invalid (ie, greater than the number of options
-currently held by the setting)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-get-option-by-name"></a><h3>nm_setting_bond_get_option_by_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_bond_get_option_by_name (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
-<p>Returns the value associated with the bonding option specified by
-<em class="parameter"><code>name</code></em>
-, if it exists.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bond-get-option-by-name"></a><h3>nm_setting_bond_get_option_by_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_bond_get_option_by_name (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Returns the value associated with the bonding option specified by
+<em class="parameter"><code>name</code></em>, if it exists.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the option name for which to retrieve the value</td>
</tr>
<tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>the option name for which to retrieve the value</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the key/value pair was never added to the
+setting; the value is owned by the setting and must not be modified</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.7.6"></a><h4>Returns</h4>
-<p> the value, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the key/value pair was never added to the
-setting; the value is owned by the setting and must not be modified</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-add-option"></a><h3>nm_setting_bond_add_option ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_bond_add_option (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);</pre>
-<p>Add an option to the table. The option is compared to an internal list
+<a name="nm-setting-bond-add-option"></a><h3>nm_setting_bond_add_option ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_bond_add_option (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);</pre>
+<p>
+Add an option to the table. The option is compared to an internal list
of allowed options. Option names may contain only alphanumeric characters
(ie [a-zA-Z0-9]). Adding a new name replaces any existing name/value pair
-that may already exist.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+that may already exist.
+</p>
+<p>
+The order of how to set several options is relevant because there are options
+that conflict with each other.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>name for the option</td>
</tr>
<tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>name for the option</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>value for the option</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>value for the option</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the option was valid and was added to the internal option
+list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.8.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the option was valid and was added to the internal option
-list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-remove-option"></a><h3>nm_setting_bond_remove_option ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_bond_remove_option (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
-<p>Remove the bonding option referenced by <em class="parameter"><code>name</code></em>
- from the internal option
-list.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bond-remove-option"></a><h3>nm_setting_bond_remove_option ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_bond_remove_option (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Remove the bonding option referenced by <em class="parameter"><code>name</code></em> from the internal option
+list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>name of the option to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>name of the option to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the option was found and removed from the internal option
+list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.9.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the option was found and removed from the internal option
-list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bond-get-valid-options"></a><h3>nm_setting_bond_get_valid_options ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> **
-nm_setting_bond_get_valid_options (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);</pre>
-<p>Returns a list of valid bond options.</p>
-<div class="refsect3">
-<a name="id-1.2.13.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.10.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of strings of valid bond options. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bond-get-option-default"></a><h3>nm_setting_bond_get_option_default ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_bond_get_option_default (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.13.9.11.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bond-validate-option"></a><h3>nm_setting_bond_validate_option ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_bond_validate_option (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);</pre>
+<p>
+Checks whether <em class="parameter"><code>name</code></em> is a valid bond option and <em class="parameter"><code>value</code></em> is a valid value for
+the <em class="parameter"><code>name</code></em>. If <em class="parameter"><code>value</code></em> is <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, the function only validates the option name.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the option to validate</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the value of the option to validate</td>
</tr>
<tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>the name of the option</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, if the <em class="parameter"><code>value</code></em> is valid for the given name.
+If the <em class="parameter"><code>name</code></em> is not a valid option, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> will be returned.</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.13.9.11.5"></a><h4>Returns</h4>
-<p> the value of the bond option if not overridden by an entry in
-the <a class="link" href="NMSettingBond.html#NMSettingBond--options" title="The “options†property"><span class="type">“optionsâ€</span></a> property.</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBond.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SETTING-BOND-SETTING-NAME:CAPS"></a><h3>NM_SETTING_BOND_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_SETTING_NAME "bond"
-</pre>
+<a name="nm-setting-bond-get-valid-options"></a><h3>nm_setting_bond_get_valid_options ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> ** nm_setting_bond_get_valid_options (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>);</pre>
<p>
+Returns a list of valid bond options.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingBondError"></a><h3>enum NMSettingBondError</h3>
-<div class="refsect3">
-<a name="id-1.2.13.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BOND-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_BOND_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BOND-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_BOND_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of strings of valid bond options. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bond-get-option-default"></a><h3>nm_setting_bond_get_option_default ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_bond_get_option_default (<em class="parameter"><code><a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BOND-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_BOND_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BOND-ERROR-INVALID-OPTION:CAPS"></a>NM_SETTING_BOND_ERROR_INVALID_OPTION</p></td>
-<td class="enum_member_description"> </td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the option</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BOND-ERROR-MISSING-OPTION:CAPS"></a>NM_SETTING_BOND_ERROR_MISSING_OPTION</p></td>
-<td class="enum_member_description"> </td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value of the bond option if not overridden by an entry in
+the <a class="link" href="NMSettingBond.html#NMSettingBond--options" title='The "options" property'><span class="type">"options"</span></a> property.</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BOND-ERROR:CAPS"></a><h3>NM_SETTING_BOND_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_ERROR nm_setting_bond_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BOND-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_BOND_INTERFACE_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_INTERFACE_NAME "interface-name"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BOND-OPTIONS:CAPS"></a><h3>NM_SETTING_BOND_OPTIONS</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_OPTIONS "options"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BOND-OPTION-MODE:CAPS"></a><h3>NM_SETTING_BOND_OPTION_MODE</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_OPTION_MODE "mode"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BOND-OPTION-MIIMON:CAPS"></a><h3>NM_SETTING_BOND_OPTION_MIIMON</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_OPTION_MIIMON "miimon"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS"></a><h3>NM_SETTING_BOND_OPTION_DOWNDELAY</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_OPTION_DOWNDELAY "downdelay"
-</pre>
-<p>
-</p>
-</div>
-<hr>
+<div class="refsect1">
+<a name="NMSettingBond.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-BOND-OPTION-UPDELAY:CAPS"></a><h3>NM_SETTING_BOND_OPTION_UPDELAY</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_OPTION_UPDELAY "updelay"
-</pre>
+<a name="NMSettingBond--interface-name"></a><h3>The <code class="literal">"interface-name"</code> property</h3>
+<pre class="programlisting"> "interface-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+The name of the virtual in-kernel bonding network interface
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS"></a><h3>NM_SETTING_BOND_OPTION_ARP_INTERVAL</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_OPTION_ARP_INTERVAL "arp_interval"
-</pre>
+<a name="NMSettingBond--options"></a><h3>The <code class="literal">"options"</code> property</h3>
+<pre class="programlisting"> "options" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write</pre>
<p>
+Dictionary of key/value pairs of bonding options. Both keys and values
+must be strings. Option names must contain only alphanumeric characters
+(ie, [a-zA-Z0-9]).
</p>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS"></a><h3>NM_SETTING_BOND_OPTION_ARP_IP_TARGET</h3>
-<pre class="programlisting">#define NM_SETTING_BOND_OPTION_ARP_IP_TARGET "arp_ip_target"
-</pre>
-<p>
-</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBond.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingBond--interface-name"></a><h3>The <code class="literal">“interface-nameâ€</code> property</h3>
-<pre class="programlisting"> “interface-name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The name of the virtual in-kernel bonding network interface.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingBond--options"></a><h3>The <code class="literal">“optionsâ€</code> property</h3>
-<pre class="programlisting"> “options†<span class="type">GHashTable_gchararray+gchararray_*</span></pre>
-<p>Dictionary of key/value pairs of bonding options. Both keys and values must be strings. Option names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).</p>
-<p>Flags: Read / Write</p>
-</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingBridge.html b/docs/libnm-util/html/NMSettingBridge.html
index 8be803d61..c4bb92423 100644
--- a/docs/libnm-util/html/NMSettingBridge.html
+++ b/docs/libnm-util/html/NMSettingBridge.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingBridge</title>
+<title>NMSettingBridge</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingBond.html" title="NMSettingBond">
<link rel="next" href="NMSettingBridgePort.html" title="NMSettingBridgePort">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingBridge.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingBridge.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingBridge.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingBond.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingBridgePort.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingBond.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingBridgePort.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingBridge.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingBridge.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingBridge.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingBridge.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingBridge"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,604 +37,521 @@
<h2><span class="refentrytitle"><a name="NMSettingBridge.top_of_page"></a>NMSettingBridge</span></h2>
<p>NMSettingBridge — Describes connection properties for bridges</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBridge.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingBridgeError"></a><pre class="synopsis">
+#include &lt;nm-setting-bridge.h&gt;
+
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-SETTING-NAME:CAPS" title="NM_SETTING_BRIDGE_SETTING_NAME">NM_SETTING_BRIDGE_SETTING_NAME</a>
+enum <a class="link" href="NMSettingBridge.html#NMSettingBridgeError-enum" title="enum NMSettingBridgeError">NMSettingBridgeError</a>;
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR:CAPS" title="NM_SETTING_BRIDGE_ERROR">NM_SETTING_BRIDGE_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingBridge.html#nm-setting-bridge-error-quark" title="nm_setting_bridge_error_quark ()">nm_setting_bridge_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-INTERFACE-NAME:CAPS" title="NM_SETTING_BRIDGE_INTERFACE_NAME">NM_SETTING_BRIDGE_INTERFACE_NAME</a>
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS" title="NM_SETTING_BRIDGE_MAC_ADDRESS">NM_SETTING_BRIDGE_MAC_ADDRESS</a>
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-STP:CAPS" title="NM_SETTING_BRIDGE_STP">NM_SETTING_BRIDGE_STP</a>
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-PRIORITY:CAPS" title="NM_SETTING_BRIDGE_PRIORITY">NM_SETTING_BRIDGE_PRIORITY</a>
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS" title="NM_SETTING_BRIDGE_FORWARD_DELAY">NM_SETTING_BRIDGE_FORWARD_DELAY</a>
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-HELLO-TIME:CAPS" title="NM_SETTING_BRIDGE_HELLO_TIME">NM_SETTING_BRIDGE_HELLO_TIME</a>
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-MAX-AGE:CAPS" title="NM_SETTING_BRIDGE_MAX_AGE">NM_SETTING_BRIDGE_MAX_AGE</a>
+#define <a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-AGEING-TIME:CAPS" title="NM_SETTING_BRIDGE_AGEING_TIME">NM_SETTING_BRIDGE_AGEING_TIME</a>
+ <a class="link" href="NMSettingBridge.html#NMSettingBridge-struct" title="NMSettingBridge">NMSettingBridge</a>;
+ <a class="link" href="NMSettingBridge.html#NMSettingBridgeClass" title="NMSettingBridgeClass">NMSettingBridgeClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingBridge.html#nm-setting-bridge-new" title="nm_setting_bridge_new ()">nm_setting_bridge_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-interface-name" title="nm_setting_bridge_get_interface_name ()">nm_setting_bridge_get_interface_name</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-mac-address" title="nm_setting_bridge_get_mac_address ()">nm_setting_bridge_get_mac_address</a> (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-stp" title="nm_setting_bridge_get_stp ()">nm_setting_bridge_get_stp</a> (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-priority" title="nm_setting_bridge_get_priority ()">nm_setting_bridge_get_priority</a> (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-forward-delay" title="nm_setting_bridge_get_forward_delay ()">nm_setting_bridge_get_forward_delay</a> (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-hello-time" title="nm_setting_bridge_get_hello_time ()">nm_setting_bridge_get_hello_time</a> (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-max-age" title="nm_setting_bridge_get_max_age ()">nm_setting_bridge_get_max_age</a> (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-ageing-time" title="nm_setting_bridge_get_ageing_time ()">nm_setting_bridge_get_ageing_time</a> (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingBridge.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingBridgeError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingBridge
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSettingBridge.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingBridge.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--ageing-time" title='The "ageing-time" property'>ageing-time</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--forward-delay" title='The "forward-delay" property'>forward-delay</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--hello-time" title='The "hello-time" property'>hello-time</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--interface-name" title='The "interface-name" property'>interface-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--mac-address" title='The "mac-address" property'>mac-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--max-age" title='The "max-age" property'>max-age</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--priority" title='The "priority" property'>priority</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingBridge.html#NMSettingBridge--stp" title='The "stp" property'>stp</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingBridge.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for bridging connections.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingBridge.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-SETTING-NAME:CAPS"></a><h3>NM_SETTING_BRIDGE_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_SETTING_NAME "bridge"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridgeError-enum"></a><h3>enum NMSettingBridgeError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_BRIDGE_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_BRIDGE_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+} NMSettingBridgeError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-error-quark" title="nm_setting_bridge_error_quark ()">nm_setting_bridge_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-new" title="nm_setting_bridge_new ()">nm_setting_bridge_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-interface-name" title="nm_setting_bridge_get_interface_name ()">nm_setting_bridge_get_interface_name</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BRIDGE-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BRIDGE_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-stp" title="nm_setting_bridge_get_stp ()">nm_setting_bridge_get_stp</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BRIDGE-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-priority" title="nm_setting_bridge_get_priority ()">nm_setting_bridge_get_priority</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-forward-delay" title="nm_setting_bridge_get_forward_delay ()">nm_setting_bridge_get_forward_delay</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-hello-time" title="nm_setting_bridge_get_hello_time ()">nm_setting_bridge_get_hello_time</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-max-age" title="nm_setting_bridge_get_max_age ()">nm_setting_bridge_get_max_age</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-ageing-time" title="nm_setting_bridge_get_ageing_time ()">nm_setting_bridge_get_ageing_time</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-BRIDGE-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BRIDGE_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.8</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBridge.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridge.html#NMSettingBridge--ageing-time" title="The “ageing-time†property">ageing-time</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridge.html#NMSettingBridge--forward-delay" title="The “forward-delay†property">forward-delay</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridge.html#NMSettingBridge--hello-time" title="The “hello-time†property">hello-time</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingBridge.html#NMSettingBridge--interface-name" title="The “interface-name†property">interface-name</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridge.html#NMSettingBridge--max-age" title="The “max-age†property">max-age</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridge.html#NMSettingBridge--priority" title="The “priority†property">priority</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridge.html#NMSettingBridge--stp" title="The “stp†property">stp</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
-</table></div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-ERROR:CAPS"></a><h3>NM_SETTING_BRIDGE_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_ERROR nm_setting_bridge_error_quark ()
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBridge.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bridge-error-quark"></a><h3>nm_setting_bridge_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_bridge_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-SETTING-NAME:CAPS" title="NM_SETTING_BRIDGE_SETTING_NAME">NM_SETTING_BRIDGE_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NMSettingBridgeError" title="enum NMSettingBridgeError">NMSettingBridgeError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR:CAPS" title="NM_SETTING_BRIDGE_ERROR">NM_SETTING_BRIDGE_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-INTERFACE-NAME:CAPS" title="NM_SETTING_BRIDGE_INTERFACE_NAME">NM_SETTING_BRIDGE_INTERFACE_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-STP:CAPS" title="NM_SETTING_BRIDGE_STP">NM_SETTING_BRIDGE_STP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-PRIORITY:CAPS" title="NM_SETTING_BRIDGE_PRIORITY">NM_SETTING_BRIDGE_PRIORITY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS" title="NM_SETTING_BRIDGE_FORWARD_DELAY">NM_SETTING_BRIDGE_FORWARD_DELAY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-HELLO-TIME:CAPS" title="NM_SETTING_BRIDGE_HELLO_TIME">NM_SETTING_BRIDGE_HELLO_TIME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-MAX-AGE:CAPS" title="NM_SETTING_BRIDGE_MAX_AGE">NM_SETTING_BRIDGE_MAX_AGE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-AGEING-TIME:CAPS" title="NM_SETTING_BRIDGE_AGEING_TIME">NM_SETTING_BRIDGE_AGEING_TIME</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> errors.</td>
+</tr></tbody>
</table></div>
+<p class="since">Since 0.9.8</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBridge.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingBridgeError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingBridge
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_BRIDGE_INTERFACE_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_INTERFACE_NAME "interface-name"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBridge.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-bridge.h&gt;
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_BRIDGE_MAC_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_MAC_ADDRESS "mac-address"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBridge.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
-necessary for bridging connections.</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-STP:CAPS"></a><h3>NM_SETTING_BRIDGE_STP</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_STP "stp"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingBridge.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-error-quark"></a><h3>nm_setting_bridge_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_bridge_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.14.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> errors.</p>
-<p></p>
+<a name="NM-SETTING-BRIDGE-PRIORITY:CAPS"></a><h3>NM_SETTING_BRIDGE_PRIORITY</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_PRIORITY "priority"
+</pre>
+<p>
+</p>
</div>
-<p class="since">Since 0.9.8</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS"></a><h3>NM_SETTING_BRIDGE_FORWARD_DELAY</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_FORWARD_DELAY "forward-delay"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-new"></a><h3>nm_setting_bridge_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_bridge_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.14.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<a name="NM-SETTING-BRIDGE-HELLO-TIME:CAPS"></a><h3>NM_SETTING_BRIDGE_HELLO_TIME</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_HELLO_TIME "hello-time"
+</pre>
+<p>
+</p>
</div>
-<p class="since">Since 0.9.8</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-MAX-AGE:CAPS"></a><h3>NM_SETTING_BRIDGE_MAX_AGE</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_MAX_AGE "max-age"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-get-interface-name"></a><h3>nm_setting_bridge_get_interface_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_bridge_get_interface_name (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-SETTING-BRIDGE-AGEING-TIME:CAPS"></a><h3>NM_SETTING_BRIDGE_AGEING_TIME</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_AGEING_TIME "ageing-time"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridge.html#NMSettingBridge--interface-name" title="The “interface-name†property"><span class="type">“interface-nameâ€</span></a> property of the setting</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridge-struct"></a><h3>NMSettingBridge</h3>
+<pre class="programlisting">typedef struct _NMSettingBridge NMSettingBridge;</pre>
+<p>
+</p>
</div>
-<p class="since">Since 0.9.8</p>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridgeClass"></a><h3>NMSettingBridgeClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingBridgeClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-get-stp"></a><h3>nm_setting_bridge_get_stp ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_bridge_get_stp (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bridge-new"></a><h3>nm_setting_bridge_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_bridge_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridge.html#NMSettingBridge--stp" title="The “stp†property"><span class="type">“stpâ€</span></a> property of the setting</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-get-priority"></a><h3>nm_setting_bridge_get_priority ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-nm_setting_bridge_get_priority (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bridge-get-interface-name"></a><h3>nm_setting_bridge_get_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_bridge_get_interface_name
+ (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--interface-name" title='The "interface-name" property'><span class="type">"interface-name"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridge.html#NMSettingBridge--priority" title="The “priority†property"><span class="type">“priorityâ€</span></a> property of the setting</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-get-forward-delay"></a><h3>nm_setting_bridge_get_forward_delay ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-nm_setting_bridge_get_forward_delay (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bridge-get-mac-address"></a><h3>nm_setting_bridge_get_mac_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_bridge_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridge.html#NMSettingBridge--forward-delay" title="The “forward-delay†property"><span class="type">“forward-delayâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-get-hello-time"></a><h3>nm_setting_bridge_get_hello_time ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-nm_setting_bridge_get_hello_time (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bridge-get-stp"></a><h3>nm_setting_bridge_get_stp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_bridge_get_stp (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--stp" title='The "stp" property'><span class="type">"stp"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.8.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridge.html#NMSettingBridge--hello-time" title="The “hello-time†property"><span class="type">“hello-timeâ€</span></a> property of the setting</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-get-max-age"></a><h3>nm_setting_bridge_get_max_age ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-nm_setting_bridge_get_max_age (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bridge-get-priority"></a><h3>nm_setting_bridge_get_priority ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> nm_setting_bridge_get_priority (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--priority" title='The "priority" property'><span class="type">"priority"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.9.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridge.html#NMSettingBridge--max-age" title="The “max-age†property"><span class="type">“max-ageâ€</span></a> property of the setting</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-bridge-get-ageing-time"></a><h3>nm_setting_bridge_get_ageing_time ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_bridge_get_ageing_time (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bridge-get-forward-delay"></a><h3>nm_setting_bridge_get_forward_delay ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> nm_setting_bridge_get_forward_delay (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--forward-delay" title='The "forward-delay" property'><span class="type">"forward-delay"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.10.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridge.html#NMSettingBridge--ageing-time" title="The “ageing-time†property"><span class="type">“ageing-timeâ€</span></a> property of the setting</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBridge.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-SETTING-NAME:CAPS"></a><h3>NM_SETTING_BRIDGE_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_SETTING_NAME "bridge"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBridgeError"></a><h3>enum NMSettingBridgeError</h3>
-<div class="refsect3">
-<a name="id-1.2.14.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-bridge-get-hello-time"></a><h3>nm_setting_bridge_get_hello_time ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> nm_setting_bridge_get_hello_time (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BRIDGE-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_BRIDGE_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BRIDGE-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--hello-time" title='The "hello-time" property'><span class="type">"hello-time"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bridge-get-max-age"></a><h3>nm_setting_bridge_get_max_age ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> nm_setting_bridge_get_max_age (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BRIDGE-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_BRIDGE_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
</td>
-<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--max-age" title='The "max-age" property'><span class="type">"max-age"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-ERROR:CAPS"></a><h3>NM_SETTING_BRIDGE_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_ERROR nm_setting_bridge_error_quark ()
-</pre>
-<p>
-</p>
+<a name="nm-setting-bridge-get-ageing-time"></a><h3>nm_setting_bridge_get_ageing_time ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_bridge_get_ageing_time (<em class="parameter"><code><a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridge.html#NMSettingBridge--ageing-time" title='The "ageing-time" property'><span class="type">"ageing-time"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_BRIDGE_INTERFACE_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_INTERFACE_NAME "interface-name"
-</pre>
-<p>
-</p>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMSettingBridge.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-STP:CAPS"></a><h3>NM_SETTING_BRIDGE_STP</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_STP "stp"
-</pre>
+<a name="NMSettingBridge--ageing-time"></a><h3>The <code class="literal">"ageing-time"</code> property</h3>
+<pre class="programlisting"> "ageing-time" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+The Ethernet MAC address aging time, in seconds.
</p>
+<p>Allowed values: &lt;= 1000000</p>
+<p>Default value: 300</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-PRIORITY:CAPS"></a><h3>NM_SETTING_BRIDGE_PRIORITY</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_PRIORITY "priority"
-</pre>
+<a name="NMSettingBridge--forward-delay"></a><h3>The <code class="literal">"forward-delay"</code> property</h3>
+<pre class="programlisting"> "forward-delay" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+The Spanning Tree Protocol (STP) forwarding delay, in seconds.
</p>
+<p>Allowed values: &lt;= 30</p>
+<p>Default value: 15</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS"></a><h3>NM_SETTING_BRIDGE_FORWARD_DELAY</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_FORWARD_DELAY "forward-delay"
-</pre>
+<a name="NMSettingBridge--hello-time"></a><h3>The <code class="literal">"hello-time"</code> property</h3>
+<pre class="programlisting"> "hello-time" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+The Spanning Tree Protocol (STP) hello time, in seconds.
</p>
+<p>Allowed values: &lt;= 10</p>
+<p>Default value: 2</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-HELLO-TIME:CAPS"></a><h3>NM_SETTING_BRIDGE_HELLO_TIME</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_HELLO_TIME "hello-time"
-</pre>
+<a name="NMSettingBridge--interface-name"></a><h3>The <code class="literal">"interface-name"</code> property</h3>
+<pre class="programlisting"> "interface-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+The name of the virtual in-kernel bridging network interface
</p>
+<p>Default value: NULL</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-MAX-AGE:CAPS"></a><h3>NM_SETTING_BRIDGE_MAX_AGE</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_MAX_AGE "max-age"
-</pre>
+<a name="NMSettingBridge--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+If specified, the MAC address of bridge. When creating a new bridge, this
+MAC address will be set. When matching an existing (outside
+NetworkManager created) bridge, this MAC address must match.
</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-BRIDGE-AGEING-TIME:CAPS"></a><h3>NM_SETTING_BRIDGE_AGEING_TIME</h3>
-<pre class="programlisting">#define NM_SETTING_BRIDGE_AGEING_TIME "ageing-time"
-</pre>
+<a name="NMSettingBridge--max-age"></a><h3>The <code class="literal">"max-age"</code> property</h3>
+<pre class="programlisting"> "max-age" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+The Spanning Tree Protocol (STP) maximum message age, in seconds.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBridge.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingBridge--ageing-time"></a><h3>The <code class="literal">“ageing-timeâ€</code> property</h3>
-<pre class="programlisting"> “ageing-time†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>The ethernet MAC address aging time, in seconds.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Allowed values: &lt;= 1000000</p>
-<p>Default value: 300</p>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingBridge--forward-delay"></a><h3>The <code class="literal">“forward-delayâ€</code> property</h3>
-<pre class="programlisting"> “forward-delay†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>The Spanning Tree Protocol (STP) forwarding delay, in seconds.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Allowed values: &lt;= 30</p>
-<p>Default value: 15</p>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingBridge--hello-time"></a><h3>The <code class="literal">“hello-timeâ€</code> property</h3>
-<pre class="programlisting"> “hello-time†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>The Spanning Tree Protocol (STP) hello time, in seconds.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Allowed values: &lt;= 10</p>
-<p>Default value: 2</p>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingBridge--interface-name"></a><h3>The <code class="literal">“interface-nameâ€</code> property</h3>
-<pre class="programlisting"> “interface-name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The name of the virtual in-kernel bridging network interface.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingBridge--max-age"></a><h3>The <code class="literal">“max-ageâ€</code> property</h3>
-<pre class="programlisting"> “max-age†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>The Spanning Tree Protocol (STP) maximum message age, in seconds.</p>
-<p>Flags: Read / Write / Construct</p>
<p>Allowed values: &lt;= 40</p>
<p>Default value: 20</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBridge--priority"></a><h3>The <code class="literal">“priorityâ€</code> property</h3>
-<pre class="programlisting"> “priority†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are 'better'; the lowest priority bridge will be elected the root bridge.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingBridge--priority"></a><h3>The <code class="literal">"priority"</code> property</h3>
+<pre class="programlisting"> "priority" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower
+values are "better"; the lowest priority bridge will be elected the root
+bridge.
+</p>
<p>Allowed values: &lt;= 65535</p>
<p>Default value: 32768</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBridge--stp"></a><h3>The <code class="literal">“stpâ€</code> property</h3>
-<pre class="programlisting"> “stp†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingBridge--stp"></a><h3>The <code class="literal">"stp"</code> property</h3>
+<pre class="programlisting"> "stp" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.
+</p>
<p>Default value: TRUE</p>
<p class="since">Since 0.9.8</p>
</div>
@@ -636,6 +559,6 @@ required</p>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingBridgePort.html b/docs/libnm-util/html/NMSettingBridgePort.html
index 146e4a64c..9f3cdb360 100644
--- a/docs/libnm-util/html/NMSettingBridgePort.html
+++ b/docs/libnm-util/html/NMSettingBridgePort.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingBridgePort</title>
+<title>NMSettingBridgePort</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingBridge.html" title="NMSettingBridge">
-<link rel="next" href="NMSettingInfiniband.html" title="NMSettingInfiniband">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="next" href="NMSettingTeam.html" title="NMSettingTeam">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingBridgePort.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingBridgePort.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingBridgePort.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingBridge.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingInfiniband.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingBridge.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingTeam.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingBridgePort.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingBridgePort.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingBridgePort.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingBridgePort.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingBridgePort"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,252 +37,59 @@
<h2><span class="refentrytitle"><a name="NMSettingBridgePort.top_of_page"></a>NMSettingBridgePort</span></h2>
<p>NMSettingBridgePort — Describes connection properties for bridge ports</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingBridgePort.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-error-quark" title="nm_setting_bridge_port_error_quark ()">nm_setting_bridge_port_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-new" title="nm_setting_bridge_port_new ()">nm_setting_bridge_port_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-priority" title="nm_setting_bridge_port_get_priority ()">nm_setting_bridge_port_get_priority</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost" title="nm_setting_bridge_port_get_path_cost ()">nm_setting_bridge_port_get_path_cost</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode" title="nm_setting_bridge_port_get_hairpin_mode ()">nm_setting_bridge_port_get_hairpin_mode</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBridgePort.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode" title="The “hairpin-mode†property">hairpin-mode</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--path-cost" title="The “path-cost†property">path-cost</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--priority" title="The “priority†property">priority</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingBridgePort.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS" title="NM_SETTING_BRIDGE_PORT_SETTING_NAME">NM_SETTING_BRIDGE_PORT_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortError" title="enum NMSettingBridgePortError">NMSettingBridgePortError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR:CAPS" title="NM_SETTING_BRIDGE_PORT_ERROR">NM_SETTING_BRIDGE_PORT_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS" title="NM_SETTING_BRIDGE_PORT_PRIORITY">NM_SETTING_BRIDGE_PORT_PRIORITY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS" title="NM_SETTING_BRIDGE_PORT_PATH_COST">NM_SETTING_BRIDGE_PORT_PATH_COST</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS" title="NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE">NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBridgePort.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingBridgePortError"></a><pre class="synopsis">
+#include &lt;nm-setting-bridge-port.h&gt;
+
+#define <a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS" title="NM_SETTING_BRIDGE_PORT_SETTING_NAME">NM_SETTING_BRIDGE_PORT_SETTING_NAME</a>
+enum <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortError-enum" title="enum NMSettingBridgePortError">NMSettingBridgePortError</a>;
+#define <a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR:CAPS" title="NM_SETTING_BRIDGE_PORT_ERROR">NM_SETTING_BRIDGE_PORT_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-error-quark" title="nm_setting_bridge_port_error_quark ()">nm_setting_bridge_port_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS" title="NM_SETTING_BRIDGE_PORT_PRIORITY">NM_SETTING_BRIDGE_PORT_PRIORITY</a>
+#define <a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS" title="NM_SETTING_BRIDGE_PORT_PATH_COST">NM_SETTING_BRIDGE_PORT_PATH_COST</a>
+#define <a class="link" href="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS" title="NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE">NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE</a>
+ <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort-struct" title="NMSettingBridgePort">NMSettingBridgePort</a>;
+ <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortClass" title="NMSettingBridgePortClass">NMSettingBridgePortClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-new" title="nm_setting_bridge_port_new ()">nm_setting_bridge_port_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> <a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-priority" title="nm_setting_bridge_port_get_priority ()">nm_setting_bridge_port_get_priority</a> (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> <a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost" title="nm_setting_bridge_port_get_path_cost ()">nm_setting_bridge_port_get_path_cost</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode" title="nm_setting_bridge_port_get_hairpin_mode ()">nm_setting_bridge_port_get_hairpin_mode</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingBridgePort.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingBridgePortError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingBridgePort
+<pre class="synopsis">
+ GEnum
+ +----NMSettingBridgePortError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingBridgePort
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingBridgePort.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-bridge-port.h&gt;
+<a name="NMSettingBridgePort.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode" title='The "hairpin-mode" property'>hairpin-mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--path-cost" title='The "path-cost" property'>path-cost</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--priority" title='The "priority" property'>priority</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
</pre>
</div>
<div class="refsect1">
<a name="NMSettingBridgePort.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-optional properties that apply to bridge ports.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingBridgePort.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-bridge-port-error-quark"></a><h3>nm_setting_bridge_port_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_bridge_port_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.15.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> errors.</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bridge-port-new"></a><h3>nm_setting_bridge_port_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_bridge_port_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.15.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bridge-port-get-priority"></a><h3>nm_setting_bridge_port_get_priority ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-nm_setting_bridge_port_get_priority (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.15.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--priority" title="The “priority†property"><span class="type">“priorityâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bridge-port-get-path-cost"></a><h3>nm_setting_bridge_port_get_path_cost ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>
-nm_setting_bridge_port_get_path_cost (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.15.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--path-cost" title="The “path-cost†property"><span class="type">“path-costâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-bridge-port-get-hairpin-mode"></a><h3>nm_setting_bridge_port_get_hairpin_mode ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_bridge_port_get_hairpin_mode
- (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.15.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode" title="The “hairpin-mode†property"><span class="type">“hairpin-modeâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
+<p>
+The <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+optional properties that apply to bridge ports.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingBridgePort.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingBridgePort.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS"></a><h3>NM_SETTING_BRIDGE_PORT_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_BRIDGE_PORT_SETTING_NAME "bridge-port"
@@ -286,41 +99,37 @@ nm_setting_bridge_port_get_hairpin_mode
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBridgePortError"></a><h3>enum NMSettingBridgePortError</h3>
-<div class="refsect3">
-<a name="id-1.2.15.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingBridgePortError-enum"></a><h3>enum NMSettingBridgePortError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_BRIDGE_PORT_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_BRIDGE_PORT_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_BRIDGE_PORT_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+} NMSettingBridgePortError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BRIDGE-PORT-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_BRIDGE_PORT_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-BRIDGE-PORT-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BRIDGE_PORT_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BRIDGE-PORT-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_BRIDGE_PORT_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-BRIDGE-PORT-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BRIDGE_PORT_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-BRIDGE-PORT-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_BRIDGE_PORT_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and
-is required</p>
+<td><p><a name="NM-SETTING-BRIDGE-PORT-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_BRIDGE_PORT_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and
+is required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
@@ -333,6 +142,25 @@ is required</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-bridge-port-error-quark"></a><h3>nm_setting_bridge_port_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_bridge_port_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS"></a><h3>NM_SETTING_BRIDGE_PORT_PRIORITY</h3>
<pre class="programlisting">#define NM_SETTING_BRIDGE_PORT_PRIORITY "priority"
</pre>
@@ -355,33 +183,152 @@ is required</p>
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridgePort-struct"></a><h3>NMSettingBridgePort</h3>
+<pre class="programlisting">typedef struct _NMSettingBridgePort NMSettingBridgePort;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridgePortClass"></a><h3>NMSettingBridgePortClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingBridgePortClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bridge-port-new"></a><h3>nm_setting_bridge_port_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_bridge_port_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bridge-port-get-priority"></a><h3>nm_setting_bridge_port_get_priority ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> nm_setting_bridge_port_get_priority (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--priority" title='The "priority" property'><span class="type">"priority"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bridge-port-get-path-cost"></a><h3>nm_setting_bridge_port_get_path_cost ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a> nm_setting_bridge_port_get_path_cost
+ (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--path-cost" title='The "path-cost" property'><span class="type">"path-cost"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bridge-port-get-hairpin-mode"></a><h3>nm_setting_bridge_port_get_hairpin_mode ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_bridge_port_get_hairpin_mode
+ (<em class="parameter"><code><a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode" title='The "hairpin-mode" property'><span class="type">"hairpin-mode"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
+</div>
</div>
<div class="refsect1">
<a name="NMSettingBridgePort.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingBridgePort--hairpin-mode"></a><h3>The <code class="literal">“hairpin-modeâ€</code> property</h3>
-<pre class="programlisting"> “hairpin-mode†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Enables or disabled 'hairpin mode' for the port, which allows frames to be sent back out through the port the frame was received on.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingBridgePort--hairpin-mode"></a><h3>The <code class="literal">"hairpin-mode"</code> property</h3>
+<pre class="programlisting"> "hairpin-mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
+<p>
+Enables or disabled "hairpin mode" for the port, which allows frames to
+be sent back out through the port the frame was received on.
+</p>
<p>Default value: FALSE</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBridgePort--path-cost"></a><h3>The <code class="literal">“path-costâ€</code> property</h3>
-<pre class="programlisting"> “path-cost†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>The Spanning Tree Protocol (STP) port cost for destinations via this port.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingBridgePort--path-cost"></a><h3>The <code class="literal">"path-cost"</code> property</h3>
+<pre class="programlisting"> "path-cost" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+The Spanning Tree Protocol (STP) port cost for destinations via this
+port.
+</p>
<p>Allowed values: &lt;= 65535</p>
<p>Default value: 100</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingBridgePort--priority"></a><h3>The <code class="literal">“priorityâ€</code> property</h3>
-<pre class="programlisting"> “priority†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>The Spanning Tree Protocol (STP) priority of this bridge port.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingBridgePort--priority"></a><h3>The <code class="literal">"priority"</code> property</h3>
+<pre class="programlisting"> "priority" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+The Spanning Tree Protocol (STP) priority of this bridge port.
+</p>
<p>Allowed values: &lt;= 63</p>
<p>Default value: 32</p>
<p class="since">Since 0.9.8</p>
@@ -390,6 +337,6 @@ is required</p>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingCdma.html b/docs/libnm-util/html/NMSettingCdma.html
index 0693faa6a..3a201d2da 100644
--- a/docs/libnm-util/html/NMSettingCdma.html
+++ b/docs/libnm-util/html/NMSettingCdma.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingCdma</title>
+<title>NMSettingCdma</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingSerial.html" title="NMSettingSerial">
<link rel="next" href="NMSettingGsm.html" title="NMSettingGsm">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingCdma.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingCdma.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingCdma.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingSerial.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingGsm.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingSerial.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingGsm.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingCdma.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingCdma.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingCdma.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingCdma.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingCdma"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,290 +37,61 @@
<h2><span class="refentrytitle"><a name="NMSettingCdma.top_of_page"></a>NMSettingCdma</span></h2>
<p>NMSettingCdma — Describes CDMA-based mobile broadband properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingCdma.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-error-quark" title="nm_setting_cdma_error_quark ()">nm_setting_cdma_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-new" title="nm_setting_cdma_new ()">nm_setting_cdma_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-number" title="nm_setting_cdma_get_number ()">nm_setting_cdma_get_number</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-username" title="nm_setting_cdma_get_username ()">nm_setting_cdma_get_username</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password" title="nm_setting_cdma_get_password ()">nm_setting_cdma_get_password</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password-flags" title="nm_setting_cdma_get_password_flags ()">nm_setting_cdma_get_password_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingCdma.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingCdma.html#NMSettingCdma--number" title="The “number†property">number</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title="The “password†property">password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingCdma.html#NMSettingCdma--password-flags" title="The “password-flags†property">password-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingCdma.html#NMSettingCdma--username" title="The “username†property">username</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingCdma.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-SETTING-NAME:CAPS" title="NM_SETTING_CDMA_SETTING_NAME">NM_SETTING_CDMA_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingCdma.html#NMSettingCdmaError" title="enum NMSettingCdmaError">NMSettingCdmaError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-ERROR:CAPS" title="NM_SETTING_CDMA_ERROR">NM_SETTING_CDMA_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-NUMBER:CAPS" title="NM_SETTING_CDMA_NUMBER">NM_SETTING_CDMA_NUMBER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-USERNAME:CAPS" title="NM_SETTING_CDMA_USERNAME">NM_SETTING_CDMA_USERNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD:CAPS" title="NM_SETTING_CDMA_PASSWORD">NM_SETTING_CDMA_PASSWORD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS" title="NM_SETTING_CDMA_PASSWORD_FLAGS">NM_SETTING_CDMA_PASSWORD_FLAGS</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingCdma.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingCdmaError"></a><pre class="synopsis">
+#include &lt;nm-setting-cdma.h&gt;
+
+#define <a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-SETTING-NAME:CAPS" title="NM_SETTING_CDMA_SETTING_NAME">NM_SETTING_CDMA_SETTING_NAME</a>
+enum <a class="link" href="NMSettingCdma.html#NMSettingCdmaError-enum" title="enum NMSettingCdmaError">NMSettingCdmaError</a>;
+#define <a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-ERROR:CAPS" title="NM_SETTING_CDMA_ERROR">NM_SETTING_CDMA_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingCdma.html#nm-setting-cdma-error-quark" title="nm_setting_cdma_error_quark ()">nm_setting_cdma_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-NUMBER:CAPS" title="NM_SETTING_CDMA_NUMBER">NM_SETTING_CDMA_NUMBER</a>
+#define <a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-USERNAME:CAPS" title="NM_SETTING_CDMA_USERNAME">NM_SETTING_CDMA_USERNAME</a>
+#define <a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD:CAPS" title="NM_SETTING_CDMA_PASSWORD">NM_SETTING_CDMA_PASSWORD</a>
+#define <a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS" title="NM_SETTING_CDMA_PASSWORD_FLAGS">NM_SETTING_CDMA_PASSWORD_FLAGS</a>
+ <a class="link" href="NMSettingCdma.html#NMSettingCdma-struct" title="NMSettingCdma">NMSettingCdma</a>;
+ <a class="link" href="NMSettingCdma.html#NMSettingCdmaClass" title="NMSettingCdmaClass">NMSettingCdmaClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingCdma.html#nm-setting-cdma-new" title="nm_setting_cdma_new ()">nm_setting_cdma_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-number" title="nm_setting_cdma_get_number ()">nm_setting_cdma_get_number</a> (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-username" title="nm_setting_cdma_get_username ()">nm_setting_cdma_get_username</a> (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password" title="nm_setting_cdma_get_password ()">nm_setting_cdma_get_password</a> (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password-flags" title="nm_setting_cdma_get_password_flags ()">nm_setting_cdma_get_password_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingCdma.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingCdmaError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingCdma
+<pre class="synopsis">
+ GEnum
+ +----NMSettingCdmaError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingCdma
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingCdma.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-cdma.h&gt;
+<a name="NMSettingCdma.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingCdma.html#NMSettingCdma--number" title='The "number" property'>number</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title='The "password" property'>password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingCdma.html#NMSettingCdma--password-flags" title='The "password-flags" property'>password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingCdma.html#NMSettingCdma--username" title='The "username" property'>username</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
</pre>
</div>
<div class="refsect1">
<a name="NMSettingCdma.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+<p>
+The <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
properties that allow connections to IS-95-based mobile broadband
-networks, including those using CDMA2000/EVDO technology.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingCdma.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-cdma-error-quark"></a><h3>nm_setting_cdma_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_cdma_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.10.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-cdma-new"></a><h3>nm_setting_cdma_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_cdma_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.10.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> object</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-cdma-get-number"></a><h3>nm_setting_cdma_get_number ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_cdma_get_number (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.10.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.10.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingCdma.html#NMSettingCdma--number" title="The “number†property"><span class="type">“numberâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-cdma-get-username"></a><h3>nm_setting_cdma_get_username ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_cdma_get_username (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.10.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.10.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingCdma.html#NMSettingCdma--username" title="The “username†property"><span class="type">“usernameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-cdma-get-password"></a><h3>nm_setting_cdma_get_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_cdma_get_password (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.10.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.10.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title="The “password†property"><span class="type">“passwordâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-cdma-get-password-flags"></a><h3>nm_setting_cdma_get_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_cdma_get_password_flags (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.10.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.10.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title="The “password†property"><span class="type">“passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
+networks, including those using CDMA2000/EVDO technology.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingCdma.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingCdma.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-CDMA-SETTING-NAME:CAPS"></a><h3>NM_SETTING_CDMA_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_CDMA_SETTING_NAME "cdma"
@@ -324,50 +101,45 @@ nm_setting_cdma_get_password_flags (<em class="parameter"><code><a class="link"
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingCdmaError"></a><h3>enum NMSettingCdmaError</h3>
-<div class="refsect3">
-<a name="id-1.2.10.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingCdmaError-enum"></a><h3>enum NMSettingCdmaError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_CDMA_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_CDMA_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_CDMA_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING /*&lt; nick=MissingSerialSetting &gt;*/
+} NMSettingCdmaError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CDMA-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_CDMA_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-CDMA-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CDMA_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CDMA-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_CDMA_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-CDMA-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CDMA_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CDMA-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_CDMA_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-CDMA-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CDMA_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CDMA-ERROR-MISSING-SERIAL-SETTING:CAPS"></a>NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING</p></td>
-<td class="enum_member_description">
-<p>the required <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
-is missing in the connection</p>
+<td><p><a name="NM-SETTING-CDMA-ERROR-MISSING-SERIAL-SETTING:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING</code></span></p></td>
+<td>the required <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
+is missing in the connection
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-CDMA-ERROR:CAPS"></a><h3>NM_SETTING_CDMA_ERROR</h3>
@@ -378,6 +150,24 @@ is missing in the connection</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-cdma-error-quark"></a><h3>nm_setting_cdma_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_cdma_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-CDMA-NUMBER:CAPS"></a><h3>NM_SETTING_CDMA_NUMBER</h3>
<pre class="programlisting">#define NM_SETTING_CDMA_NUMBER "number"
</pre>
@@ -408,45 +198,185 @@ is missing in the connection</p>
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingCdma-struct"></a><h3>NMSettingCdma</h3>
+<pre class="programlisting">typedef struct _NMSettingCdma NMSettingCdma;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingCdmaClass"></a><h3>NMSettingCdmaClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingCdmaClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-cdma-new"></a><h3>nm_setting_cdma_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_cdma_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> object</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-cdma-get-number"></a><h3>nm_setting_cdma_get_number ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_cdma_get_number (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingCdma.html#NMSettingCdma--number" title='The "number" property'><span class="type">"number"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-cdma-get-username"></a><h3>nm_setting_cdma_get_username ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_cdma_get_username (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingCdma.html#NMSettingCdma--username" title='The "username" property'><span class="type">"username"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-cdma-get-password"></a><h3>nm_setting_cdma_get_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_cdma_get_password (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title='The "password" property'><span class="type">"password"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-cdma-get-password-flags"></a><h3>nm_setting_cdma_get_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_cdma_get_password_flags (<em class="parameter"><code><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title='The "password" property'><span class="type">"password"</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<div class="refsect1">
<a name="NMSettingCdma.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingCdma--number"></a><h3>The <code class="literal">“numberâ€</code> property</h3>
-<pre class="programlisting"> “number†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Number to dial when establishing a PPP data session with the CDMA-based mobile broadband network. If not specified, the default number (#777) is used when required.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingCdma--number"></a><h3>The <code class="literal">"number"</code> property</h3>
+<pre class="programlisting"> "number" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The number to dial to establish the connection to the CDMA-based mobile
+broadband network, if any. If not specified, the default number (<span class="type">777</span>)
+is used when required.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingCdma--password"></a><h3>The <code class="literal">“passwordâ€</code> property</h3>
-<pre class="programlisting"> “password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Password used to authenticate with the network, if required. Note that many providers do not require a password or accept any password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingCdma--password"></a><h3>The <code class="literal">"password"</code> property</h3>
+<pre class="programlisting"> "password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The password used to authenticate with the network, if required. Many
+providers do not require a password, or accept any password. But if a
+password is required, it is specified here.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingCdma--password-flags"></a><h3>The <code class="literal">“password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the CDMA password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingCdma--password-flags"></a><h3>The <code class="literal">"password-flags"</code> property</h3>
+<pre class="programlisting"> "password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the <a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title='The "password" property'><span class="type">"password"</span></a> property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingCdma--username"></a><h3>The <code class="literal">“usernameâ€</code> property</h3>
-<pre class="programlisting"> “username†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Username used to authenticate with the network, if required. Note that many providers do not require a username or accept any username.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingCdma--username"></a><h3>The <code class="literal">"username"</code> property</h3>
+<pre class="programlisting"> "username" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The username used to authenticate with the network, if required. Many
+providers do not require a username, or accept any username. But if a
+username is required, it is specified here.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingConnection.html b/docs/libnm-util/html/NMSettingConnection.html
index f212d48d0..7bf190c28 100644
--- a/docs/libnm-util/html/NMSettingConnection.html
+++ b/docs/libnm-util/html/NMSettingConnection.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingConnection</title>
+<title>NMSettingConnection</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSetting.html" title="NMSetting">
<link rel="next" href="NMSettingWired.html" title="NMSettingWired">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingConnection.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingConnection.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingConnection.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSetting.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingWired.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSetting.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingWired.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingConnection.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingConnection"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,1297 +37,1236 @@
<h2><span class="refentrytitle"><a name="NMSettingConnection.top_of_page"></a>NMSettingConnection</span></h2>
<p>NMSettingConnection — Describes general connection properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingConnection.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingConnectionError"></a><pre class="synopsis">
+#include &lt;nm-setting-connection.h&gt;
+
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-SETTING-NAME:CAPS" title="NM_SETTING_CONNECTION_SETTING_NAME">NM_SETTING_CONNECTION_SETTING_NAME</a>
+enum <a class="link" href="NMSettingConnection.html#NMSettingConnectionError-enum" title="enum NMSettingConnectionError">NMSettingConnectionError</a>;
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR:CAPS" title="NM_SETTING_CONNECTION_ERROR">NM_SETTING_CONNECTION_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-error-quark" title="nm_setting_connection_error_quark ()">nm_setting_connection_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS" title="NM_SETTING_CONNECTION_ID">NM_SETTING_CONNECTION_ID</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-UUID:CAPS" title="NM_SETTING_CONNECTION_UUID">NM_SETTING_CONNECTION_UUID</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS" title="NM_SETTING_CONNECTION_INTERFACE_NAME">NM_SETTING_CONNECTION_INTERFACE_NAME</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-TYPE:CAPS" title="NM_SETTING_CONNECTION_TYPE">NM_SETTING_CONNECTION_TYPE</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT">NM_SETTING_CONNECTION_AUTOCONNECT</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-TIMESTAMP:CAPS" title="NM_SETTING_CONNECTION_TIMESTAMP">NM_SETTING_CONNECTION_TIMESTAMP</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-READ-ONLY:CAPS" title="NM_SETTING_CONNECTION_READ_ONLY">NM_SETTING_CONNECTION_READ_ONLY</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-PERMISSIONS:CAPS" title="NM_SETTING_CONNECTION_PERMISSIONS">NM_SETTING_CONNECTION_PERMISSIONS</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-ZONE:CAPS" title="NM_SETTING_CONNECTION_ZONE">NM_SETTING_CONNECTION_ZONE</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-MASTER:CAPS" title="NM_SETTING_CONNECTION_MASTER">NM_SETTING_CONNECTION_MASTER</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS" title="NM_SETTING_CONNECTION_SLAVE_TYPE">NM_SETTING_CONNECTION_SLAVE_TYPE</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-SECONDARIES:CAPS" title="NM_SETTING_CONNECTION_SECONDARIES">NM_SETTING_CONNECTION_SECONDARIES</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS" title="NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT">NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT</a>
+ <a class="link" href="NMSettingConnection.html#NMSettingConnection-struct" title="NMSettingConnection">NMSettingConnection</a>;
+ <a class="link" href="NMSettingConnection.html#NMSettingConnectionClass" title="NMSettingConnectionClass">NMSettingConnectionClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-new" title="nm_setting_connection_new ()">nm_setting_connection_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-id" title="nm_setting_connection_get_id ()">nm_setting_connection_get_id</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-uuid" title="nm_setting_connection_get_uuid ()">nm_setting_connection_get_uuid</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-interface-name" title="nm_setting_connection_get_interface_name ()">nm_setting_connection_get_interface_name</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-connection-type" title="nm_setting_connection_get_connection_type ()">nm_setting_connection_get_connection_type</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-autoconnect" title="nm_setting_connection_get_autoconnect ()">nm_setting_connection_get_autoconnect</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-timestamp" title="nm_setting_connection_get_timestamp ()">nm_setting_connection_get_timestamp</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-read-only" title="nm_setting_connection_get_read_only ()">nm_setting_connection_get_read_only</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-permissions" title="nm_setting_connection_get_num_permissions ()">nm_setting_connection_get_num_permissions</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-permission" title="nm_setting_connection_get_permission ()">nm_setting_connection_get_permission</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_ptype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_pitem</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_detail</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-zone" title="nm_setting_connection_get_zone ()">nm_setting_connection_get_zone</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-permissions-user-allowed" title="nm_setting_connection_permissions_user_allowed ()">nm_setting_connection_permissions_user_allowed</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *uname</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-add-permission" title="nm_setting_connection_add_permission ()">nm_setting_connection_add_permission</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ptype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pitem</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *detail</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-permission" title="nm_setting_connection_remove_permission ()">nm_setting_connection_remove_permission</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-permission-by-value" title="nm_setting_connection_remove_permission_by_value ()">nm_setting_connection_remove_permission_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ptype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pitem</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *detail</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-master" title="nm_setting_connection_get_master ()">nm_setting_connection_get_master</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-is-slave-type" title="nm_setting_connection_is_slave_type ()">nm_setting_connection_is_slave_type</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-slave-type" title="nm_setting_connection_get_slave_type ()">nm_setting_connection_get_slave_type</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-secondaries" title="nm_setting_connection_get_num_secondaries ()">nm_setting_connection_get_num_secondaries</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-secondary" title="nm_setting_connection_get_secondary ()">nm_setting_connection_get_secondary</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-add-secondary" title="nm_setting_connection_add_secondary ()">nm_setting_connection_add_secondary</a> (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sec_uuid</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-secondary" title="nm_setting_connection_remove_secondary ()">nm_setting_connection_remove_secondary</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-secondary-by-value" title="nm_setting_connection_remove_secondary_by_value ()">nm_setting_connection_remove_secondary_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sec_uuid</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-gateway-ping-timeout" title="nm_setting_connection_get_gateway_ping_timeout ()">nm_setting_connection_get_gateway_ping_timeout</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingConnectionError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingConnection
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingConnection.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--autoconnect" title='The "autoconnect" property'>autoconnect</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout" title='The "gateway-ping-timeout" property'>gateway-ping-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title='The "id" property'>id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--interface-name" title='The "interface-name" property'>interface-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--master" title='The "master" property'>master</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title='The "permissions" property'>permissions</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--read-only" title='The "read-only" property'>read-only</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--secondaries" title='The "secondaries" property'>secondaries</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--slave-type" title='The "slave-type" property'>slave-type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--timestamp" title='The "timestamp" property'>timestamp</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'>type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--uuid" title='The "uuid" property'>uuid</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingConnection.html#NMSettingConnection--zone" title='The "zone" property'>zone</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingConnection.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+properties that apply to all <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects, regardless of what type
+of network connection they describe. Each <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object must contain
+a <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> setting.
+</p>
+</div>
<div class="refsect1">
-<a name="NMSettingConnection.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-SETTING-NAME:CAPS"></a><h3>NM_SETTING_CONNECTION_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_SETTING_NAME "connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingConnectionError-enum"></a><h3>enum NMSettingConnectionError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_CONNECTION_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND, /*&lt; nick=TypeSettingNotFound &gt;*/
+ NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED, /*&lt; nick=IpConfigNotAllowed &gt;*/
+} NMSettingConnectionError;
+</pre>
+<p>
+Describes errors that may result from operations involving a
+<a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-error-quark" title="nm_setting_connection_error_quark ()">nm_setting_connection_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-new" title="nm_setting_connection_new ()">nm_setting_connection_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-id" title="nm_setting_connection_get_id ()">nm_setting_connection_get_id</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-uuid" title="nm_setting_connection_get_uuid ()">nm_setting_connection_get_uuid</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-connection-type" title="nm_setting_connection_get_connection_type ()">nm_setting_connection_get_connection_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-autoconnect" title="nm_setting_connection_get_autoconnect ()">nm_setting_connection_get_autoconnect</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-timestamp" title="nm_setting_connection_get_timestamp ()">nm_setting_connection_get_timestamp</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-read-only" title="nm_setting_connection_get_read_only ()">nm_setting_connection_get_read_only</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-permissions" title="nm_setting_connection_get_num_permissions ()">nm_setting_connection_get_num_permissions</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-permission" title="nm_setting_connection_get_permission ()">nm_setting_connection_get_permission</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-zone" title="nm_setting_connection_get_zone ()">nm_setting_connection_get_zone</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-permissions-user-allowed" title="nm_setting_connection_permissions_user_allowed ()">nm_setting_connection_permissions_user_allowed</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-add-permission" title="nm_setting_connection_add_permission ()">nm_setting_connection_add_permission</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-permission" title="nm_setting_connection_remove_permission ()">nm_setting_connection_remove_permission</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-master" title="nm_setting_connection_get_master ()">nm_setting_connection_get_master</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-is-slave-type" title="nm_setting_connection_is_slave_type ()">nm_setting_connection_is_slave_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-slave-type" title="nm_setting_connection_get_slave_type ()">nm_setting_connection_get_slave_type</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-CONNECTION-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CONNECTION_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-secondaries" title="nm_setting_connection_get_num_secondaries ()">nm_setting_connection_get_num_secondaries</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-CONNECTION-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property's value is
+ invalid
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-secondary" title="nm_setting_connection_get_secondary ()">nm_setting_connection_get_secondary</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-CONNECTION-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>a required property is not
+ present
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-add-secondary" title="nm_setting_connection_add_secondary ()">nm_setting_connection_add_secondary</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-CONNECTION-ERROR-TYPE-SETTING-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND</code></span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object
+ referenced by the setting name contained in the
+ <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'><span class="type">"type"</span></a> property was not present in the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-secondary" title="nm_setting_connection_remove_secondary ()">nm_setting_connection_remove_secondary</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-CONNECTION-ERROR-IP-CONFIG-NOT-ALLOWED:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED</code></span></p></td>
+<td>ip configuration is not
+ allowed to be present.
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingConnection.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--autoconnect" title="The “autoconnect†property">autoconnect</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title="The “id†property">id</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--master" title="The “master†property">master</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title="The “permissions†property">permissions</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--read-only" title="The “read-only†property">read-only</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--secondaries" title="The “secondaries†property">secondaries</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--slave-type" title="The “slave-type†property">slave-type</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--timestamp" title="The “timestamp†property">timestamp</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title="The “type†property">type</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--uuid" title="The “uuid†property">uuid</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection--zone" title="The “zone†property">zone</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
-</table></div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-ERROR:CAPS"></a><h3>NM_SETTING_CONNECTION_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_ERROR nm_setting_connection_error_quark ()
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingConnection.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-connection-error-quark"></a><h3>nm_setting_connection_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_connection_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-SETTING-NAME:CAPS" title="NM_SETTING_CONNECTION_SETTING_NAME">NM_SETTING_CONNECTION_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NMSettingConnectionError" title="enum NMSettingConnectionError">NMSettingConnectionError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR:CAPS" title="NM_SETTING_CONNECTION_ERROR">NM_SETTING_CONNECTION_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS" title="NM_SETTING_CONNECTION_ID">NM_SETTING_CONNECTION_ID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-UUID:CAPS" title="NM_SETTING_CONNECTION_UUID">NM_SETTING_CONNECTION_UUID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-TYPE:CAPS" title="NM_SETTING_CONNECTION_TYPE">NM_SETTING_CONNECTION_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT">NM_SETTING_CONNECTION_AUTOCONNECT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-TIMESTAMP:CAPS" title="NM_SETTING_CONNECTION_TIMESTAMP">NM_SETTING_CONNECTION_TIMESTAMP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-READ-ONLY:CAPS" title="NM_SETTING_CONNECTION_READ_ONLY">NM_SETTING_CONNECTION_READ_ONLY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-PERMISSIONS:CAPS" title="NM_SETTING_CONNECTION_PERMISSIONS">NM_SETTING_CONNECTION_PERMISSIONS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-ZONE:CAPS" title="NM_SETTING_CONNECTION_ZONE">NM_SETTING_CONNECTION_ZONE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-MASTER:CAPS" title="NM_SETTING_CONNECTION_MASTER">NM_SETTING_CONNECTION_MASTER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS" title="NM_SETTING_CONNECTION_SLAVE_TYPE">NM_SETTING_CONNECTION_SLAVE_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-SECONDARIES:CAPS" title="NM_SETTING_CONNECTION_SECONDARIES">NM_SETTING_CONNECTION_SECONDARIES</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="NMSettingConnection.html#NMSettingConnection-struct" title="NMSettingConnection">NMSettingConnection</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingConnectionError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingConnection
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-ID:CAPS"></a><h3>NM_SETTING_CONNECTION_ID</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_ID "id"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingConnection.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-connection.h&gt;
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-UUID:CAPS"></a><h3>NM_SETTING_CONNECTION_UUID</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_UUID "uuid"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingConnection.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-properties that apply to all <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects, regardless of what type
-of network connection they describe. Each <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object must contain
-a <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> setting.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingConnection.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="nm-setting-connection-error-quark"></a><h3>nm_setting_connection_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_connection_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> errors.</p>
-<p></p>
+<a name="NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_CONNECTION_INTERFACE_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_INTERFACE_NAME "interface-name"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-TYPE:CAPS"></a><h3>NM_SETTING_CONNECTION_TYPE</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_TYPE "type"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-new"></a><h3>nm_setting_connection_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_connection_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object</p>
-<p></p>
+<a name="NM-SETTING-CONNECTION-AUTOCONNECT:CAPS"></a><h3>NM_SETTING_CONNECTION_AUTOCONNECT</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_AUTOCONNECT "autoconnect"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-TIMESTAMP:CAPS"></a><h3>NM_SETTING_CONNECTION_TIMESTAMP</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_TIMESTAMP "timestamp"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-id"></a><h3>nm_setting_connection_get_id ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_connection_get_id (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title="The “id†property"><span class="type">“idâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-SETTING-CONNECTION-READ-ONLY:CAPS"></a><h3>NM_SETTING_CONNECTION_READ_ONLY</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_READ_ONLY "read-only"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.4.6"></a><h4>Returns</h4>
-<p> the connection ID</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-PERMISSIONS:CAPS"></a><h3>NM_SETTING_CONNECTION_PERMISSIONS</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_PERMISSIONS "permissions"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-ZONE:CAPS"></a><h3>NM_SETTING_CONNECTION_ZONE</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_ZONE "zone"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-uuid"></a><h3>nm_setting_connection_get_uuid ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--uuid" title="The “uuid†property"><span class="type">“uuidâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-SETTING-CONNECTION-MASTER:CAPS"></a><h3>NM_SETTING_CONNECTION_MASTER</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_MASTER "master"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.5.6"></a><h4>Returns</h4>
-<p> the connection UUID</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS"></a><h3>NM_SETTING_CONNECTION_SLAVE_TYPE</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_SLAVE_TYPE "slave-type"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-SECONDARIES:CAPS"></a><h3>NM_SETTING_CONNECTION_SECONDARIES</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_SECONDARIES "secondaries"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-connection-type"></a><h3>nm_setting_connection_get_connection_type ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_connection_get_connection_type
- (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title="The “type†property"><span class="type">“typeâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS"></a><h3>NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT "gateway-ping-timeout"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.6.6"></a><h4>Returns</h4>
-<p> the connection type</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NMSettingConnection-struct"></a><h3>NMSettingConnection</h3>
+<pre class="programlisting">typedef struct _NMSettingConnection NMSettingConnection;</pre>
+<p>
+The NMSettingConnection struct contains only private data.
+It should only be accessed through the functions described below.
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingConnectionClass"></a><h3>NMSettingConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingConnectionClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-autoconnect"></a><h3>nm_setting_connection_get_autoconnect ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_connection_get_autoconnect (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--autoconnect" title="The “autoconnect†property"><span class="type">“autoconnectâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-new"></a><h3>nm_setting_connection_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_connection_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.7.6"></a><h4>Returns</h4>
-<p> the connection's autoconnect behavior</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-timestamp"></a><h3>nm_setting_connection_get_timestamp ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
-nm_setting_connection_get_timestamp (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--timestamp" title="The “timestamp†property"><span class="type">“timestampâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-id"></a><h3>nm_setting_connection_get_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_id (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title='The "id" property'><span class="type">"id"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection ID</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.8.6"></a><h4>Returns</h4>
-<p> the connection's timestamp</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-read-only"></a><h3>nm_setting_connection_get_read_only ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_connection_get_read_only (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--read-only" title="The “read-only†property"><span class="type">“read-onlyâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-uuid"></a><h3>nm_setting_connection_get_uuid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--uuid" title='The "uuid" property'><span class="type">"uuid"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection UUID</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.9.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is read-only, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-num-permissions"></a><h3>nm_setting_connection_get_num_permissions ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_connection_get_num_permissions
- (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the number of entires in the <a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title="The “permissions†property"><span class="type">“permissionsâ€</span></a>
-property of this setting.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-interface-name"></a><h3>nm_setting_connection_get_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_interface_name
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--interface-name" title='The "interface-name" property'><span class="type">"interface-name"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection's interface name</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.10.6"></a><h4>Returns</h4>
-<p> the number of permissions entires</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-permission"></a><h3>nm_setting_connection_get_permission ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_connection_get_permission (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **out_ptype</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **out_pitem</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **out_detail</code></em>);</pre>
-<p>Retrieve one of the entries of the <a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title="The “permissions†property"><span class="type">“permissionsâ€</span></a> property
-of this setting.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-connection-type"></a><h3>nm_setting_connection_get_connection_type ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_connection_type
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'><span class="type">"type"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>the zero-based index of the permissions entry</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection type</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-connection-get-autoconnect"></a><h3>nm_setting_connection_get_autoconnect ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_get_autoconnect
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--autoconnect" title='The "autoconnect" property'><span class="type">"autoconnect"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="parameter_name"><p>out_ptype</p></td>
-<td class="parameter_description"><p>on return, the permission type (at this time, always "user")</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_pitem</p></td>
-<td class="parameter_description"><p>on return, the permission item (formatted accoring to <em class="parameter"><code>ptype</code></em>
-, see
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title="The “permissions†property"><span class="type">“permissionsâ€</span></a> for more detail</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection's autoconnect behavior</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-connection-get-timestamp"></a><h3>nm_setting_connection_get_timestamp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a> nm_setting_connection_get_timestamp (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--timestamp" title='The "timestamp" property'><span class="type">"timestamp"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_detail</p></td>
-<td class="parameter_description"><p>on return, the permission detail (at this time, always <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>)</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection's timestamp</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.11.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a permission was returned, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if <em class="parameter"><code>idx</code></em>
-was invalid</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-zone"></a><h3>nm_setting_connection_get_zone ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_connection_get_zone (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--zone" title="The “zone†property"><span class="type">“zoneâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-read-only"></a><h3>nm_setting_connection_get_read_only ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_get_read_only (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--read-only" title='The "read-only" property'><span class="type">"read-only"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is read-only, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.12.6"></a><h4>Returns</h4>
-<p> the trust level of a connection</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-permissions-user-allowed"></a><h3>nm_setting_connection_permissions_user_allowed ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_connection_permissions_user_allowed
- (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *uname</code></em>);</pre>
-<p>Checks whether the given username is allowed to view/access this connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-num-permissions"></a><h3>nm_setting_connection_get_num_permissions ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_connection_get_num_permissions
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the number of entires in the <a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title='The "permissions" property'><span class="type">"permissions"</span></a>
+property of this setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>uname</p></td>
-<td class="parameter_description"><p>the user name to check permissions for</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of permissions entires</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the requested user is allowed to view this connection,
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the given user is not allowed to view this connection</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-add-permission"></a><h3>nm_setting_connection_add_permission ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_connection_add_permission (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *ptype</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *pitem</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *detail</code></em>);</pre>
-<p>Adds a permission to the connection's permission list. At this time, only
-the "user" permission type is supported, and <em class="parameter"><code>pitem</code></em>
- must be a username. See
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title="The “permissions†property"><span class="type">“permissionsâ€</span></a>: for more details.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-permission"></a><h3>nm_setting_connection_get_permission ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_get_permission
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_ptype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_pitem</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_detail</code></em>);</pre>
+<p>
+Retrieve one of the entries of the <a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title='The "permissions" property'><span class="type">"permissions"</span></a> property
+of this setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>ptype</p></td>
-<td class="parameter_description"><p>the permission type; at this time only "user" is supported</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zero-based index of the permissions entry</td>
</tr>
<tr>
-<td class="parameter_name"><p>pitem</p></td>
-<td class="parameter_description"><p>the permission item formatted as required for <em class="parameter"><code>ptype</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>out_ptype</code></em> :</span></p></td>
+<td>on return, the permission type (at this time, always "user")</td>
</tr>
<tr>
-<td class="parameter_name"><p>detail</p></td>
-<td class="parameter_description"><p> unused at this time; must be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>out_pitem</code></em> :</span></p></td>
+<td>on return, the permission item (formatted accoring to <em class="parameter"><code>ptype</code></em>, see
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title='The "permissions" property'><span class="type">"permissions"</span></a> for more detail</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_detail</code></em> :</span></p></td>
+<td>on return, the permission detail (at this time, always <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a permission was returned, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if <em class="parameter"><code>idx</code></em> was invalid</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.14.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the permission was unique and was successfully added to the
-list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if <em class="parameter"><code>ptype</code></em>
-or <em class="parameter"><code>pitem</code></em>
-was invalid or it the permission was already
-present in the list</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-remove-permission"></a><h3>nm_setting_connection_remove_permission ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_connection_remove_permission
- (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
-<p>Removes the permission at index <em class="parameter"><code>idx</code></em>
- from the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-zone"></a><h3>nm_setting_connection_get_zone ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_zone (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--zone" title='The "zone" property'><span class="type">"zone"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>the zero-based index of the permission to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the trust level of a connection</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-master"></a><h3>nm_setting_connection_get_master ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_connection_get_master (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--master" title="The “master†property"><span class="type">“masterâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-permissions-user-allowed"></a><h3>nm_setting_connection_permissions_user_allowed ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_permissions_user_allowed
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *uname</code></em>);</pre>
+<p>
+Checks whether the given username is allowed to view/access this connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uname</code></em> :</span></p></td>
+<td>the user name to check permissions for</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the requested user is allowed to view this connection,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the given user is not allowed to view this connection</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.16.6"></a><h4>Returns</h4>
-<p> interface name of the master device or UUID of the master
-connection.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-is-slave-type"></a><h3>nm_setting_connection_is_slave_type ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_connection_is_slave_type (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.4.9.17.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-add-permission"></a><h3>nm_setting_connection_add_permission ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_add_permission
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ptype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pitem</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *detail</code></em>);</pre>
+<p>
+Adds a permission to the connection's permission list. At this time, only
+the "user" permission type is supported, and <em class="parameter"><code>pitem</code></em> must be a username. See
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title='The "permissions" property'><span class="type">"permissions"</span></a>: for more details.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ptype</code></em> :</span></p></td>
+<td>the permission type; at this time only "user" is supported</td>
</tr>
<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>the setting name (ie <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS" title="NM_SETTING_BOND_SETTING_NAME"><span class="type">NM_SETTING_BOND_SETTING_NAME</span></a>) to be matched
-against <em class="parameter"><code>setting</code></em>
-'s slave type</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>pitem</code></em> :</span></p></td>
+<td>the permission item formatted as required for <em class="parameter"><code>ptype</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>detail</code></em> :</span></p></td>
+<td>unused at this time; must be <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the permission was unique and was successfully added to the
+list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if <em class="parameter"><code>ptype</code></em> or <em class="parameter"><code>pitem</code></em> was invalid or it the permission was already
+present in the list</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.17.5"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if connection is of the given slave <em class="parameter"><code>type</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-slave-type"></a><h3>nm_setting_connection_get_slave_type ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_connection_get_slave_type (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<p>Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--slave-type" title="The “slave-type†property"><span class="type">“slave-typeâ€</span></a> property of the connection.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-remove-permission"></a><h3>nm_setting_connection_remove_permission ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_connection_remove_permission
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<p>
+Removes the permission at index <em class="parameter"><code>idx</code></em> from the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zero-based index of the permission to remove</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.18.6"></a><h4>Returns</h4>
-<p> the type of slave this connection is, if any</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-num-secondaries"></a><h3>nm_setting_connection_get_num_secondaries ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_connection_get_num_secondaries
- (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.4.9.19.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-remove-permission-by-value"></a><h3>nm_setting_connection_remove_permission_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_remove_permission_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ptype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pitem</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *detail</code></em>);</pre>
+<p>
+Removes the permission from the connection.
+At this time, only the "user" permission type is supported, and <em class="parameter"><code>pitem</code></em> must
+be a username. See <a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title='The "permissions" property'><span class="type">"permissions"</span></a>: for more details.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ptype</code></em> :</span></p></td>
+<td>the permission type; at this time only "user" is supported</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pitem</code></em> :</span></p></td>
+<td>the permission item formatted as required for <em class="parameter"><code>ptype</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>detail</code></em> :</span></p></td>
+<td>unused at this time; must be <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the permission was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.19.5"></a><h4>Returns</h4>
-<p> the number of configured secondary connection UUIDs</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-get-secondary"></a><h3>nm_setting_connection_get_secondary ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_connection_get_secondary (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.4.9.20.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-master"></a><h3>nm_setting_connection_get_master ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_master (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--master" title='The "master" property'><span class="type">"master"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>the zero-based index of the secondary connection UUID entry</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>interface name of the master device or UUID of the master
+connection.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.20.5"></a><h4>Returns</h4>
-<p> the secondary connection UUID at index <em class="parameter"><code>idx</code></em>
-</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-add-secondary"></a><h3>nm_setting_connection_add_secondary ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_connection_add_secondary (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *sec_uuid</code></em>);</pre>
-<p>Adds a new secondary connetion UUID to the setting.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-is-slave-type"></a><h3>nm_setting_connection_is_slave_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_is_slave_type (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the setting name (ie <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS" title="NM_SETTING_BOND_SETTING_NAME"><span class="type">NM_SETTING_BOND_SETTING_NAME</span></a>) to be matched
+against <em class="parameter"><code>setting</code></em>'s slave type</td>
</tr>
<tr>
-<td class="parameter_name"><p>sec_uuid</p></td>
-<td class="parameter_description"><p>the secondary connection UUID to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if connection is of the given slave <em class="parameter"><code>type</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.4.9.21.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secondary connection UUID was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the UUID
-was already present</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-connection-remove-secondary"></a><h3>nm_setting_connection_remove_secondary ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_connection_remove_secondary
- (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
-<p>Removes the secondary coonnection UUID at index <em class="parameter"><code>idx</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.4.9.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-slave-type"></a><h3>nm_setting_connection_get_slave_type ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_slave_type
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<p>
+Returns the <a class="link" href="NMSettingConnection.html#NMSettingConnection--slave-type" title='The "slave-type" property'><span class="type">"slave-type"</span></a> property of the connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>index number of the secondary connection UUID</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the type of slave this connection is, if any</td>
</tr>
</tbody>
</table></div>
</div>
-<p class="since">Since 0.9.8</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingConnection.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-SETTING-NAME:CAPS"></a><h3>NM_SETTING_CONNECTION_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_SETTING_NAME "connection"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnectionError"></a><h3>enum NMSettingConnectionError</h3>
-<p>Describes errors that may result from operations involving a
-<a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.4.10.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-connection-get-num-secondaries"></a><h3>nm_setting_connection_get_num_secondaries ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_connection_get_num_secondaries
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CONNECTION-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_CONNECTION_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CONNECTION-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property's value is
- invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured secondary connection UUIDs</td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-connection-get-secondary"></a><h3>nm_setting_connection_get_secondary ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_secondary (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CONNECTION-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>a required property is not
- present</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CONNECTION-ERROR-TYPE-SETTING-NOT-FOUND:CAPS"></a>NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND</p></td>
-<td class="enum_member_description">
-<p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object
- referenced by the setting name contained in the
- <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title="The “type†property"><span class="type">“typeâ€</span></a> property was not present in the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a></p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zero-based index of the secondary connection UUID entry</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-CONNECTION-ERROR-IP-CONFIG-NOT-ALLOWED:CAPS"></a>NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED</p></td>
-<td class="enum_member_description">
-<p>ip configuration is not
- allowed to be present.</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the secondary connection UUID at index <em class="parameter"><code>idx</code></em>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-ERROR:CAPS"></a><h3>NM_SETTING_CONNECTION_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_ERROR nm_setting_connection_error_quark ()
-</pre>
-<p>
-</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-ID:CAPS"></a><h3>NM_SETTING_CONNECTION_ID</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_ID "id"
-</pre>
+<a name="nm-setting-connection-add-secondary"></a><h3>nm_setting_connection_add_secondary ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_add_secondary (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sec_uuid</code></em>);</pre>
<p>
+Adds a new secondary connetion UUID to the setting.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sec_uuid</code></em> :</span></p></td>
+<td>the secondary connection UUID to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secondary connection UUID was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the UUID
+was already present</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-UUID:CAPS"></a><h3>NM_SETTING_CONNECTION_UUID</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_UUID "uuid"
-</pre>
+<a name="nm-setting-connection-remove-secondary"></a><h3>nm_setting_connection_remove_secondary ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_connection_remove_secondary
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
<p>
+Removes the secondary coonnection UUID at index <em class="parameter"><code>idx</code></em>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>index number of the secondary connection UUID</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-TYPE:CAPS"></a><h3>NM_SETTING_CONNECTION_TYPE</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_TYPE "type"
-</pre>
+<a name="nm-setting-connection-remove-secondary-by-value"></a><h3>nm_setting_connection_remove_secondary_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_remove_secondary_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sec_uuid</code></em>);</pre>
<p>
+Removes the secondary coonnection UUID <em class="parameter"><code>sec_uuid</code></em>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sec_uuid</code></em> :</span></p></td>
+<td>the secondary connection UUID to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secondary connection UUID was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-AUTOCONNECT:CAPS"></a><h3>NM_SETTING_CONNECTION_AUTOCONNECT</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_AUTOCONNECT "autoconnect"
-</pre>
-<p>
-</p>
+<a name="nm-setting-connection-get-gateway-ping-timeout"></a><h3>nm_setting_connection_get_gateway_ping_timeout ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_connection_get_gateway_ping_timeout
+ (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value contained in the <a class="link" href="NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout" title='The "gateway-ping-timeout" property'><span class="type">"gateway-ping-timeout"</span></a>
+property.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-TIMESTAMP:CAPS"></a><h3>NM_SETTING_CONNECTION_TIMESTAMP</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_TIMESTAMP "timestamp"
-</pre>
-<p>
-</p>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMSettingConnection.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-READ-ONLY:CAPS"></a><h3>NM_SETTING_CONNECTION_READ_ONLY</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_READ_ONLY "read-only"
-</pre>
+<a name="NMSettingConnection--autoconnect"></a><h3>The <code class="literal">"autoconnect"</code> property</h3>
+<pre class="programlisting"> "autoconnect" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
<p>
+Whether or not the connection should be automatically connected by
+NetworkManager when the resources for the connection are available.
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to automatically activate the connection, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to require manual
+intervention to activate the connection.
</p>
+<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-PERMISSIONS:CAPS"></a><h3>NM_SETTING_CONNECTION_PERMISSIONS</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_PERMISSIONS "permissions"
-</pre>
+<a name="NMSettingConnection--gateway-ping-timeout"></a><h3>The <code class="literal">"gateway-ping-timeout"</code> property</h3>
+<pre class="programlisting"> "gateway-ping-timeout" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+If greater than zero, delay success of IP addressing until either the
+timeout is reached, or an IP gateway replies to a ping.
</p>
+<p>Allowed values: &lt;= 30</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-ZONE:CAPS"></a><h3>NM_SETTING_CONNECTION_ZONE</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_ZONE "zone"
-</pre>
+<a name="NMSettingConnection--id"></a><h3>The <code class="literal">"id"</code> property</h3>
+<pre class="programlisting"> "id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+A human readable unique identifier for the connection, like "Work Wi-Fi"
+or "T-Mobile 3G".
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-MASTER:CAPS"></a><h3>NM_SETTING_CONNECTION_MASTER</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_MASTER "master"
-</pre>
+<a name="NMSettingConnection--interface-name"></a><h3>The <code class="literal">"interface-name"</code> property</h3>
+<pre class="programlisting"> "interface-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+The name of the network interface this connection is bound to. If not
+set, then the connection can be attached to any interface of the
+appropriate type (subject to restrictions imposed by other settings).
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS"></a><h3>NM_SETTING_CONNECTION_SLAVE_TYPE</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_SLAVE_TYPE "slave-type"
-</pre>
<p>
+For connection types where interface names cannot easily be made
+persistent (e.g. mobile broadband or USB Ethernet), this property should
+not be used. Setting this property restricts the interfaces a connection
+can be used with, and if interface names change or are reordered the
+connection may be applied to the wrong interface.
</p>
+<p>Default value: NULL</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-CONNECTION-SECONDARIES:CAPS"></a><h3>NM_SETTING_CONNECTION_SECONDARIES</h3>
-<pre class="programlisting">#define NM_SETTING_CONNECTION_SECONDARIES "secondaries"
-</pre>
+<a name="NMSettingConnection--master"></a><h3>The <code class="literal">"master"</code> property</h3>
+<pre class="programlisting"> "master" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Interface name of the master device or UUID of the master connection.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingConnection-struct"></a><h3>NMSettingConnection</h3>
-<pre class="programlisting">typedef struct _NMSettingConnection NMSettingConnection;</pre>
-<p>The NMSettingConnection struct contains only private data.
-It should only be accessed through the functions described below.</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingConnection.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingConnection--autoconnect"></a><h3>The <code class="literal">“autoconnectâ€</code> property</h3>
-<pre class="programlisting"> “autoconnect†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Whether or not the connection should be automatically connected by
-NetworkManager when the resources for the connection are available.
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to automatically activate the connection, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to require manual
-intervention to activate the connection. Defaults to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingConnection--id"></a><h3>The <code class="literal">“idâ€</code> property</h3>
-<pre class="programlisting"> “id†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>A human readable unique idenfier for the connection, like "Work WiFi" or
-"T-Mobile 3G".</p>
-<p>Flags: Read / Write</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--master"></a><h3>The <code class="literal">“masterâ€</code> property</h3>
-<pre class="programlisting"> “master†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Interface name of the master device or UUID of the master connection.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingConnection--permissions"></a><h3>The <code class="literal">“permissionsâ€</code> property</h3>
-<pre class="programlisting"> “permissions†<span class="type">GSList_gchararray_</span> *</pre>
-<p>An array of strings defining what access a given user has to this
-connection. If this is NULL or empty, all users are allowed to access
+<a name="NMSettingConnection--permissions"></a><h3>The <code class="literal">"permissions"</code> property</h3>
+<pre class="programlisting"> "permissions" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
+<p>
+An array of strings defining what access a given user has to this
+connection. If this is <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> or empty, all users are allowed to access
this connection. Otherwise a user is allowed to access this connection
if and only if they are in this list. Each entry is of the form
-"[type]:[id]:[reserved]", for example:</p>
-<p> user:dcbw:blah</p>
-<p>At this time only the 'user' [type] is allowed. Any other values are
+"[type]:[id]:[reserved]"; for example, "user:dcbw:blah".
+</p>
+<p>
+At this time only the "user" [type] is allowed. Any other values are
ignored and reserved for future use. [id] is the username that this
-permission refers to, which may not contain the ':' character. Any
-[reserved] information present must be ignored and is reserved for
-future use. All of [type], [id], and [reserved] must be valid UTF-8.</p>
-<p>Flags: Read / Write</p>
+permission refers to, which may not contain the ":" character. Any
+[reserved] information present must be ignored and is reserved for future
+use. All of [type], [id], and [reserved] must be valid UTF-8.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--read-only"></a><h3>The <code class="literal">“read-onlyâ€</code> property</h3>
-<pre class="programlisting"> “read-only†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection can be modified using the providing settings
-service's D-Bus interface with the right privileges, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
-if the connection is read-only and cannot be modified.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingConnection--read-only"></a><h3>The <code class="literal">"read-only"</code> property</h3>
+<pre class="programlisting"> "read-only" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the connection can be modified using the provided settings
+service's D-Bus interface with the right privileges, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the
+connection is read-only and cannot be modified.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--secondaries"></a><h3>The <code class="literal">“secondariesâ€</code> property</h3>
-<pre class="programlisting"> “secondaries†<span class="type">GSList_gchararray_</span> *</pre>
-<p>List of connection UUIDs that should be activated when the base connection
-itself is activated.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingConnection--secondaries"></a><h3>The <code class="literal">"secondaries"</code> property</h3>
+<pre class="programlisting"> "secondaries" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
+<p>
+List of connection UUIDs that should be activated when the base
+connection itself is activated. Currently only VPN connections are
+supported.
+</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--slave-type"></a><h3>The <code class="literal">“slave-typeâ€</code> property</h3>
-<pre class="programlisting"> “slave-type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Setting name describing the type of slave device (ie
-<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS" title="NM_SETTING_BOND_SETTING_NAME"><span class="type">NM_SETTING_BOND_SETTING_NAME</span></a>) or NULL if this connection is not a slave.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingConnection--slave-type"></a><h3>The <code class="literal">"slave-type"</code> property</h3>
+<pre class="programlisting"> "slave-type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Setting name of the device type of this slave's master connection (eg,
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS" title="NM_SETTING_BOND_SETTING_NAME"><code class="literal">NM_SETTING_BOND_SETTING_NAME</code></a>), or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if this connection is not a
+slave.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--timestamp"></a><h3>The <code class="literal">“timestampâ€</code> property</h3>
-<pre class="programlisting"> “timestamp†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
-<p>The time, in seconds since the Unix Epoch, that the connection was last
-_successfully_ fully activated.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingConnection--timestamp"></a><h3>The <code class="literal">"timestamp"</code> property</h3>
+<pre class="programlisting"> "timestamp" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> : Read / Write / Construct</pre>
+<p>
+The time, in seconds since the Unix Epoch, that the connection was last
+_successfully_ fully activated.
+</p>
+<p>
+NetworkManager updates the connection timestamp periodically when the
+connection is active to ensure that an active connection has the latest
+timestamp. The property is only meant for reading (changes to this
+property will not be preserved).
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--type"></a><h3>The <code class="literal">“typeâ€</code> property</h3>
-<pre class="programlisting"> “type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The general hardware type of the device used for the network connection,
-contains the name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object that describes that hardware
-type's parameters. For example, for WiFi devices, the name of the
-<a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> setting.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingConnection--type"></a><h3>The <code class="literal">"type"</code> property</h3>
+<pre class="programlisting"> "type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Base type of the connection. For hardware-dependent connections, should
+contain the setting name of the hardware-type specific setting (ie,
+"802-3-ethernet" or "802-11-wireless" or "bluetooth", etc), and for
+non-hardware dependent connections like VPN or otherwise, should contain
+the setting name of that setting type (ie, "vpn" or "bridge", etc).
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--uuid"></a><h3>The <code class="literal">“uuidâ€</code> property</h3>
-<pre class="programlisting"> “uuid†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>A universally unique idenfier for the connection, for example generated
-with libuuid. Should be assigned when the connection is created, and
+<a name="NMSettingConnection--uuid"></a><h3>The <code class="literal">"uuid"</code> property</h3>
+<pre class="programlisting"> "uuid" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+A universally unique identifier for the connection, for example generated
+with libuuid. It should be assigned when the connection is created, and
never changed as long as the connection still applies to the same
-network. For example, should not be changed when the
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title="The “id†property"><span class="type">“idâ€</span></a> or <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> changes, but might need
-to be re-created when the WiFi SSID, mobile broadband network provider,
-or <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title="The “type†property"><span class="type">“typeâ€</span></a> changes.</p>
-<p>The UUID must be in the format '2815492f-7e56-435e-b2e9-246bd7cdc664'
-(ie, contains only hexadecimal characters and '-'). A suitable UUID may
-be generated by <a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()"><code class="function">nm_utils_uuid_generate()</code></a> or
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string" title="nm_utils_uuid_generate_from_string ()"><code class="function">nm_utils_uuid_generate_from_string()</code></a>.</p>
-<p>Flags: Read / Write</p>
+network. For example, it should not be changed when the
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title='The "id" property'><span class="type">"id"</span></a> property or <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> changes, but
+might need to be re-created when the Wi-Fi SSID, mobile broadband network
+provider, or <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'><span class="type">"type"</span></a> property changes.
+</p>
+<p>
+The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664"
+(ie, contains only hexadecimal characters and "-"). A suitable UUID may
+be generated by <a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()"><code class="function">nm_utils_uuid_generate()</code></a> or
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string" title="nm_utils_uuid_generate_from_string ()"><code class="function">nm_utils_uuid_generate_from_string()</code></a>.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingConnection--zone"></a><h3>The <code class="literal">“zoneâ€</code> property</h3>
-<pre class="programlisting"> “zone†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The trust level of a the connection.
-Free form case-insensitive string (for example "Home", "Work", "Public").
-NULL or unspecified zone means the connection will be placed in the
-default zone as defined by the firewall.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingConnection--zone"></a><h3>The <code class="literal">"zone"</code> property</h3>
+<pre class="programlisting"> "zone" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
+<p>
+The trust level of a the connection. Free form case-insensitive string
+(for example "Home", "Work", "Public"). <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> or unspecified zone means
+the connection will be placed in the default zone as defined by the
+firewall.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingDcb.html b/docs/libnm-util/html/NMSettingDcb.html
new file mode 100644
index 000000000..99bfdc764
--- /dev/null
+++ b/docs/libnm-util/html/NMSettingDcb.html
@@ -0,0 +1,1250 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingDcb</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm-util Reference Manual">
+<link rel="up" href="ch01.html" title="libnm-util API Reference">
+<link rel="prev" href="NMSettingAdsl.html" title="NMSettingAdsl">
+<link rel="next" href="NMSetting8021x.html" title="NMSetting8021x">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingAdsl.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSetting8021x.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingDcb.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingDcb.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingDcb.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingDcb.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMSettingDcb"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingDcb.top_of_page"></a>NMSettingDcb</span></h2>
+<p>NMSettingDcb — Connection properties for Data Center Bridging</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingDcb.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingDcbError"></a><a name="NMSettingDcbFlags"></a><pre class="synopsis">
+#include &lt;nm-setting-dcb.h&gt;
+
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-SETTING-NAME:CAPS" title="NM_SETTING_DCB_SETTING_NAME">NM_SETTING_DCB_SETTING_NAME</a>
+enum <a class="link" href="NMSettingDcb.html#NMSettingDcbError-enum" title="enum NMSettingDcbError">NMSettingDcbError</a>;
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-ERROR:CAPS" title="NM_SETTING_DCB_ERROR">NM_SETTING_DCB_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-error-quark" title="nm_setting_dcb_error_quark ()">nm_setting_dcb_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+enum <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags-enum" title="enum NMSettingDcbFlags">NMSettingDcbFlags</a>;
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS" title="NM_SETTING_DCB_FCOE_MODE_FABRIC">NM_SETTING_DCB_FCOE_MODE_FABRIC</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS" title="NM_SETTING_DCB_FCOE_MODE_VN2VN">NM_SETTING_DCB_FCOE_MODE_VN2VN</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS" title="NM_SETTING_DCB_APP_FCOE_FLAGS">NM_SETTING_DCB_APP_FCOE_FLAGS</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS" title="NM_SETTING_DCB_APP_FCOE_PRIORITY">NM_SETTING_DCB_APP_FCOE_PRIORITY</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-MODE:CAPS" title="NM_SETTING_DCB_APP_FCOE_MODE">NM_SETTING_DCB_APP_FCOE_MODE</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS" title="NM_SETTING_DCB_APP_ISCSI_FLAGS">NM_SETTING_DCB_APP_ISCSI_FLAGS</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS" title="NM_SETTING_DCB_APP_ISCSI_PRIORITY">NM_SETTING_DCB_APP_ISCSI_PRIORITY</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-FLAGS:CAPS" title="NM_SETTING_DCB_APP_FIP_FLAGS">NM_SETTING_DCB_APP_FIP_FLAGS</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS" title="NM_SETTING_DCB_APP_FIP_PRIORITY">NM_SETTING_DCB_APP_FIP_PRIORITY</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS" title="NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS">NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS" title="NM_SETTING_DCB_PRIORITY_FLOW_CONTROL">NM_SETTING_DCB_PRIORITY_FLOW_CONTROL</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS" title="NM_SETTING_DCB_PRIORITY_GROUP_FLAGS">NM_SETTING_DCB_PRIORITY_GROUP_FLAGS</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS" title="NM_SETTING_DCB_PRIORITY_GROUP_ID">NM_SETTING_DCB_PRIORITY_GROUP_ID</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS" title="NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH">NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS" title="NM_SETTING_DCB_PRIORITY_BANDWIDTH">NM_SETTING_DCB_PRIORITY_BANDWIDTH</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS" title="NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH">NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH</a>
+#define <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS" title="NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS">NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS</a>
+ <a class="link" href="NMSettingDcb.html#NMSettingDcb-struct" title="NMSettingDcb">NMSettingDcb</a>;
+ <a class="link" href="NMSettingDcb.html#NMSettingDcbClass" title="NMSettingDcbClass">NMSettingDcbClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingDcb.html#nm-setting-dcb-new" title="nm_setting_dcb_new ()">nm_setting_dcb_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-flags" title="nm_setting_dcb_get_app_fcoe_flags ()">nm_setting_dcb_get_app_fcoe_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-priority" title="nm_setting_dcb_get_app_fcoe_priority ()">nm_setting_dcb_get_app_fcoe_priority</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-mode" title="nm_setting_dcb_get_app_fcoe_mode ()">nm_setting_dcb_get_app_fcoe_mode</a> (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-flags" title="nm_setting_dcb_get_app_iscsi_flags ()">nm_setting_dcb_get_app_iscsi_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-priority" title="nm_setting_dcb_get_app_iscsi_priority ()">nm_setting_dcb_get_app_iscsi_priority</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fip-flags" title="nm_setting_dcb_get_app_fip_flags ()">nm_setting_dcb_get_app_fip_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fip-priority" title="nm_setting_dcb_get_app_fip_priority ()">nm_setting_dcb_get_app_fip_priority</a> (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control-flags" title="nm_setting_dcb_get_priority_flow_control_flags ()">nm_setting_dcb_get_priority_flow_control_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control" title="nm_setting_dcb_get_priority_flow_control ()">nm_setting_dcb_get_priority_flow_control</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-flow-control" title="nm_setting_dcb_set_priority_flow_control ()">nm_setting_dcb_set_priority_flow_control</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-group-flags" title="nm_setting_dcb_get_priority_group_flags ()">nm_setting_dcb_get_priority_group_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-group-id" title="nm_setting_dcb_get_priority_group_id ()">nm_setting_dcb_get_priority_group_id</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-group-id" title="nm_setting_dcb_set_priority_group_id ()">nm_setting_dcb_set_priority_group_id</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-group-bandwidth" title="nm_setting_dcb_get_priority_group_bandwidth ()">nm_setting_dcb_get_priority_group_bandwidth</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-group-bandwidth" title="nm_setting_dcb_set_priority_group_bandwidth ()">nm_setting_dcb_set_priority_group_bandwidth</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth_percent</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-bandwidth" title="nm_setting_dcb_get_priority_bandwidth ()">nm_setting_dcb_get_priority_bandwidth</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-bandwidth" title="nm_setting_dcb_set_priority_bandwidth ()">nm_setting_dcb_set_priority_bandwidth</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth_percent</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-strict-bandwidth" title="nm_setting_dcb_get_priority_strict_bandwidth ()">nm_setting_dcb_get_priority_strict_bandwidth</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-strict-bandwidth" title="nm_setting_dcb_set_priority_strict_bandwidth ()">nm_setting_dcb_set_priority_strict_bandwidth</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> strict</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-traffic-class" title="nm_setting_dcb_get_priority_traffic_class ()">nm_setting_dcb_get_priority_traffic_class</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-traffic-class" title="nm_setting_dcb_set_priority_traffic_class ()">nm_setting_dcb_set_priority_traffic_class</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> traffic_class</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingDcb.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingDcbError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingDcbFlags
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingDcb
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingDcb.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-flags" title='The "app-fcoe-flags" property'>app-fcoe-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-mode" title='The "app-fcoe-mode" property'>app-fcoe-mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-priority" title='The "app-fcoe-priority" property'>app-fcoe-priority</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fip-flags" title='The "app-fip-flags" property'>app-fip-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fip-priority" title='The "app-fip-priority" property'>app-fip-priority</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-iscsi-flags" title='The "app-iscsi-flags" property'>app-iscsi-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-iscsi-priority" title='The "app-iscsi-priority" property'>app-iscsi-priority</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-bandwidth" title='The "priority-bandwidth" property'>priority-bandwidth</a>" <span class="type">GArray_guint_</span>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-flow-control" title='The "priority-flow-control" property'>priority-flow-control</a>" <span class="type">GArray_guint_</span>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags" title='The "priority-flow-control-flags" property'>priority-flow-control-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-bandwidth" title='The "priority-group-bandwidth" property'>priority-group-bandwidth</a>" <span class="type">GArray_guint_</span>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'>priority-group-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-id" title='The "priority-group-id" property'>priority-group-id</a>" <span class="type">GArray_guint_</span>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-strict-bandwidth" title='The "priority-strict-bandwidth" property'>priority-strict-bandwidth</a>" <span class="type">GArray_guint_</span>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-traffic-class" title='The "priority-traffic-class" property'>priority-traffic-class</a>" <span class="type">GArray_guint_</span>* : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingDcb.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+for enabling and using Data Center Bridging (DCB) on Ethernet networks.
+DCB is a set of protocols (including 802.1Qbb, 802.1Qaz, 802.1Qau, and
+802.1AB) to eliminate packet loss in Ethernet networks and support the use
+of storage technologies like Fibre Channel over Ethernet (FCoE) and iSCSI.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingDcb.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-SETTING-NAME:CAPS"></a><h3>NM_SETTING_DCB_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_SETTING_NAME "dcb"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcbError-enum"></a><h3>enum NMSettingDcbError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_DCB_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_DCB_ERROR_MISSING_PROPERTY /*&lt; nick=MissingProperty &gt;*/
+} NMSettingDcbError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-SETTING-DCB-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DCB_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-DCB-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DCB_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-DCB-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DCB_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-ERROR:CAPS"></a><h3>NM_SETTING_DCB_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_ERROR nm_setting_dcb_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-error-quark"></a><h3>nm_setting_dcb_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_dcb_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcbFlags-enum"></a><h3>enum NMSettingDcbFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_DCB_FLAG_NONE = 0x00000000,
+ NM_SETTING_DCB_FLAG_ENABLE = 0x00000001,
+ NM_SETTING_DCB_FLAG_ADVERTISE = 0x00000002,
+ NM_SETTING_DCB_FLAG_WILLING = 0x00000004
+} NMSettingDcbFlags;
+</pre>
+<p>
+DCB feature flags.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-SETTING-DCB-FLAG-NONE:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DCB_FLAG_NONE</code></span></p></td>
+<td>no flag
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-DCB-FLAG-ENABLE:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></span></p></td>
+<td>the feature is enabled
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-DCB-FLAG-ADVERTISE:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DCB_FLAG_ADVERTISE</code></span></p></td>
+<td>the feature is advertised
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-DCB-FLAG-WILLING:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DCB_FLAG_WILLING</code></span></p></td>
+<td>the feature is willing to change based on
+peer configuration advertisements
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS"></a><h3>NM_SETTING_DCB_FCOE_MODE_FABRIC</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_FCOE_MODE_FABRIC "fabric"
+</pre>
+<p>
+Indicates that the FCoE controller should use "fabric" mode (default)
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS"></a><h3>NM_SETTING_DCB_FCOE_MODE_VN2VN</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_FCOE_MODE_VN2VN "vn2vn"
+</pre>
+<p>
+Indicates that the FCoE controller should use "VN2VN" mode.
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS"></a><h3>NM_SETTING_DCB_APP_FCOE_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_APP_FCOE_FLAGS "app-fcoe-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS"></a><h3>NM_SETTING_DCB_APP_FCOE_PRIORITY</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_APP_FCOE_PRIORITY "app-fcoe-priority"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-APP-FCOE-MODE:CAPS"></a><h3>NM_SETTING_DCB_APP_FCOE_MODE</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_APP_FCOE_MODE "app-fcoe-mode"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS"></a><h3>NM_SETTING_DCB_APP_ISCSI_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_APP_ISCSI_FLAGS "app-iscsi-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS"></a><h3>NM_SETTING_DCB_APP_ISCSI_PRIORITY</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_APP_ISCSI_PRIORITY "app-iscsi-priority"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-APP-FIP-FLAGS:CAPS"></a><h3>NM_SETTING_DCB_APP_FIP_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_APP_FIP_FLAGS "app-fip-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS"></a><h3>NM_SETTING_DCB_APP_FIP_PRIORITY</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_APP_FIP_PRIORITY "app-fip-priority"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS "priority-flow-control-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_FLOW_CONTROL</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_FLOW_CONTROL "priority-flow-control"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_GROUP_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_GROUP_FLAGS "priority-group-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_GROUP_ID</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_GROUP_ID "priority-group-id"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH "priority-group-bandwidth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_BANDWIDTH</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_BANDWIDTH "priority-bandwidth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH "priority-strict-bandwidth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS"></a><h3>NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS</h3>
+<pre class="programlisting">#define NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS "priority-traffic-class"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb-struct"></a><h3>NMSettingDcb</h3>
+<pre class="programlisting">typedef struct _NMSettingDcb NMSettingDcb;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcbClass"></a><h3>NMSettingDcbClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingDcbClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-new"></a><h3>nm_setting_dcb_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_dcb_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-app-fcoe-flags"></a><h3>nm_setting_dcb_get_app_fcoe_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> nm_setting_dcb_get_app_fcoe_flags (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-flags" title='The "app-fcoe-flags" property'><span class="type">"app-fcoe-flags"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-app-fcoe-priority"></a><h3>nm_setting_dcb_get_app_fcoe_priority ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> nm_setting_dcb_get_app_fcoe_priority
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-priority" title='The "app-fcoe-priority" property'><span class="type">"app-fcoe-priority"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-app-fcoe-mode"></a><h3>nm_setting_dcb_get_app_fcoe_mode ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_dcb_get_app_fcoe_mode (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-mode" title='The "app-fcoe-mode" property'><span class="type">"app-fcoe-mode"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-app-iscsi-flags"></a><h3>nm_setting_dcb_get_app_iscsi_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> nm_setting_dcb_get_app_iscsi_flags (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-iscsi-flags" title='The "app-iscsi-flags" property'><span class="type">"app-iscsi-flags"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-app-iscsi-priority"></a><h3>nm_setting_dcb_get_app_iscsi_priority ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> nm_setting_dcb_get_app_iscsi_priority
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-iscsi-priority" title='The "app-iscsi-priority" property'><span class="type">"app-iscsi-priority"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-app-fip-flags"></a><h3>nm_setting_dcb_get_app_fip_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> nm_setting_dcb_get_app_fip_flags (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fip-flags" title='The "app-fip-flags" property'><span class="type">"app-fip-flags"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-app-fip-priority"></a><h3>nm_setting_dcb_get_app_fip_priority ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> nm_setting_dcb_get_app_fip_priority (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fip-priority" title='The "app-fip-priority" property'><span class="type">"app-fip-priority"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-flow-control-flags"></a><h3>nm_setting_dcb_get_priority_flow_control_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> nm_setting_dcb_get_priority_flow_control_flags
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags" title='The "priority-flow-control-flags" property'><span class="type">"priority-flow-control-flags"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-flow-control"></a><h3>nm_setting_dcb_get_priority_flow_control ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_dcb_get_priority_flow_control
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to retrieve flow control for</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if flow control is enabled for the given <em class="parameter"><code>user_priority</code></em>,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not enabled</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-set-priority-flow-control"></a><h3>nm_setting_dcb_set_priority_flow_control ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_dcb_set_priority_flow_control
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+These values are only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-flow-control" title='The "priority-flow-control" property'><span class="type">"priority-flow-control"</span></a> includes
+the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to set flow control for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable flow control for this priority, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to disable it</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-group-flags"></a><h3>nm_setting_dcb_get_priority_group_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="returnvalue">NMSettingDcbFlags</span></a> nm_setting_dcb_get_priority_group_flags
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-group-id"></a><h3>nm_setting_dcb_get_priority_group_id ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_setting_dcb_get_priority_group_id
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to retrieve the group ID for</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the group number <em class="parameter"><code>user_priority</code></em> is assigned to. These values are
+only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes the
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-set-priority-group-id"></a><h3>nm_setting_dcb_set_priority_group_id ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_dcb_set_priority_group_id
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>);</pre>
+<p>
+These values are only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes
+the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to set flow control for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>group_id</code></em> :</span></p></td>
+<td>the group (0 - 7) to assign <em class="parameter"><code>user_priority</code></em> to, or 15 for the
+unrestricted group.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-group-bandwidth"></a><h3>nm_setting_dcb_get_priority_group_bandwidth ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_setting_dcb_get_priority_group_bandwidth
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>group_id</code></em> :</span></p></td>
+<td>the priority group (0 - 7) to retrieve the bandwidth percentage for</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the bandwidth percentage assigned to <em class="parameter"><code>group_id</code></em>. These values are
+only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes the
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-set-priority-group-bandwidth"></a><h3>nm_setting_dcb_set_priority_group_bandwidth ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_dcb_set_priority_group_bandwidth
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth_percent</code></em>);</pre>
+<p>
+These values are only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes
+the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>group_id</code></em> :</span></p></td>
+<td>the priority group (0 - 7) to set the bandwidth percentage for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bandwidth_percent</code></em> :</span></p></td>
+<td>the bandwidth percentage (0 - 100) to assign to <em class="parameter"><code>group_id</code></em> to</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-bandwidth"></a><h3>nm_setting_dcb_get_priority_bandwidth ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_setting_dcb_get_priority_bandwidth
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to retrieve the group bandwidth percentage for</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the allowed bandwidth percentage of <em class="parameter"><code>user_priority</code></em> in its priority group.
+These values are only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes the
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-set-priority-bandwidth"></a><h3>nm_setting_dcb_set_priority_bandwidth ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_dcb_set_priority_bandwidth
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth_percent</code></em>);</pre>
+<p>
+These values are only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes
+the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to set the bandwidth percentage for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bandwidth_percent</code></em> :</span></p></td>
+<td>the bandwidth percentage (0 - 100) that <em class="parameter"><code>user_priority</code></em> is
+allowed to use within its priority group</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-strict-bandwidth"></a><h3>nm_setting_dcb_get_priority_strict_bandwidth ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_dcb_get_priority_strict_bandwidth
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to retrieve strict bandwidth for</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>user_priority</code></em> may use all of the bandwidth allocated to its
+assigned group, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not. These values are only valid when
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-set-priority-strict-bandwidth"></a><h3>nm_setting_dcb_set_priority_strict_bandwidth ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_dcb_set_priority_strict_bandwidth
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> strict</code></em>);</pre>
+<p>
+These values are only valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes
+the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to set strict bandwidth for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strict</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to allow <em class="parameter"><code>user_priority</code></em> to use all the bandwidth allocated to
+its priority group, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-get-priority-traffic-class"></a><h3>nm_setting_dcb_get_priority_traffic_class ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_setting_dcb_get_priority_traffic_class
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_priority</code></em> :</span></p></td>
+<td>the User Priority (0 - 7) to retrieve the traffic class for</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the traffic class assigned to <em class="parameter"><code>user_priority</code></em>. These values are only
+valid when <a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'><span class="type">"priority-group-flags"</span></a> includes the
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-dcb-set-priority-traffic-class"></a><h3>nm_setting_dcb_set_priority_traffic_class ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_dcb_set_priority_traffic_class
+ (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> traffic_class</code></em>);</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMSettingDcb.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMSettingDcb--app-fcoe-flags"></a><h3>The <code class="literal">"app-fcoe-flags"</code> property</h3>
+<pre class="programlisting"> "app-fcoe-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Specifies the <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</span></a> for the DCB FCoE application. Flags may
+be any combination of <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a>,
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ADVERTISE</code></a>, and <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_WILLING</code></a>.
+</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--app-fcoe-mode"></a><h3>The <code class="literal">"app-fcoe-mode"</code> property</h3>
+<pre class="programlisting"> "app-fcoe-mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
+<p>
+The FCoE controller mode; either <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS" title="NM_SETTING_DCB_FCOE_MODE_FABRIC"><code class="literal">NM_SETTING_DCB_FCOE_MODE_FABRIC</code></a>
+(default) or <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS" title="NM_SETTING_DCB_FCOE_MODE_VN2VN"><code class="literal">NM_SETTING_DCB_FCOE_MODE_VN2VN</code></a>.
+</p>
+<p>Default value: "fabric"</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--app-fcoe-priority"></a><h3>The <code class="literal">"app-fcoe-priority"</code> property</h3>
+<pre class="programlisting"> "app-fcoe-priority" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct</pre>
+<p>
+The highest User Priority (0 - 7) which FCoE frames should use, or -1 for
+default priority. Only used when the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-flags" title='The "app-fcoe-flags" property'><span class="type">"app-fcoe-flags"</span></a>
+property includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<p>Allowed values: [-1,7]</p>
+<p>Default value: -1</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--app-fip-flags"></a><h3>The <code class="literal">"app-fip-flags"</code> property</h3>
+<pre class="programlisting"> "app-fip-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Specifies the <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</span></a> for the DCB FIP application. Flags may
+be any combination of <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a>,
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ADVERTISE</code></a>, and <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_WILLING</code></a>.
+</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--app-fip-priority"></a><h3>The <code class="literal">"app-fip-priority"</code> property</h3>
+<pre class="programlisting"> "app-fip-priority" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct</pre>
+<p>
+The highest User Priority (0 - 7) which FIP frames should use, or -1 for
+default priority. Only used when the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fip-flags" title='The "app-fip-flags" property'><span class="type">"app-fip-flags"</span></a>
+property includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<p>Allowed values: [-1,7]</p>
+<p>Default value: -1</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--app-iscsi-flags"></a><h3>The <code class="literal">"app-iscsi-flags"</code> property</h3>
+<pre class="programlisting"> "app-iscsi-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Specifies the <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</span></a> for the DCB iSCSI application. Flags
+may be any combination of <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a>,
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ADVERTISE</code></a>, and <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_WILLING</code></a>.
+</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--app-iscsi-priority"></a><h3>The <code class="literal">"app-iscsi-priority"</code> property</h3>
+<pre class="programlisting"> "app-iscsi-priority" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct</pre>
+<p>
+The highest User Priority (0 - 7) which iSCSI frames should use, or -1
+for default priority. Only used when the <a class="link" href="NMSettingDcb.html#NMSettingDcb--app-iscsi-flags" title='The "app-iscsi-flags" property'><span class="type">"app-iscsi-flags"</span></a>
+property includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.
+</p>
+<p>Allowed values: [-1,7]</p>
+<p>Default value: -1</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-bandwidth"></a><h3>The <code class="literal">"priority-bandwidth"</code> property</h3>
+<pre class="programlisting"> "priority-bandwidth" <span class="type">GArray_guint_</span>* : Read / Write</pre>
+<p>
+An array of 8 uint values, where the array index corresponds to the User
+Priority (0 - 7) and the value indicates the percentage of bandwidth of
+the priority's assigned group that the priority may use. The sum of all
+percentages for priorities which belong to the same group must total 100
+percent.
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-flow-control"></a><h3>The <code class="literal">"priority-flow-control"</code> property</h3>
+<pre class="programlisting"> "priority-flow-control" <span class="type">GArray_guint_</span>* : Read / Write</pre>
+<p>
+An array of 8 uint values, where the array index corresponds to the User
+Priority (0 - 7) and the value indicates whether or not the corresponding
+priority should transmit priority pause. Allowed values are 0 (do not
+transmit pause) and 1 (transmit pause).
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-flow-control-flags"></a><h3>The <code class="literal">"priority-flow-control-flags"</code> property</h3>
+<pre class="programlisting"> "priority-flow-control-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Specifies the <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</span></a> for DCB Priority Flow Control (PFC).
+Flags may be any combination of <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a>,
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ADVERTISE</code></a>, and <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_WILLING</code></a>.
+</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-group-bandwidth"></a><h3>The <code class="literal">"priority-group-bandwidth"</code> property</h3>
+<pre class="programlisting"> "priority-group-bandwidth" <span class="type">GArray_guint_</span>* : Read / Write</pre>
+<p>
+An array of 8 uint values, where the array index corresponds to the
+Priority Group ID (0 - 7) and the value indicates the percentage of link
+bandwidth allocated to that group. Allowed values are 0 - 100, and the
+sum of all values must total 100 percent.
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-group-flags"></a><h3>The <code class="literal">"priority-group-flags"</code> property</h3>
+<pre class="programlisting"> "priority-group-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Specifies the <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</span></a> for DCB Priority Groups. Flags may be
+any combination of <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a>,
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ADVERTISE</code></a>, and <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_WILLING</code></a>.
+</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-group-id"></a><h3>The <code class="literal">"priority-group-id"</code> property</h3>
+<pre class="programlisting"> "priority-group-id" <span class="type">GArray_guint_</span>* : Read / Write</pre>
+<p>
+An array of 8 uint values, where the array index corresponds to the User
+Priority (0 - 7) and the value indicates the Priority Group ID. Allowed
+Priority Group ID values are 0 - 7 or 15 for the unrestricted group.
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-strict-bandwidth"></a><h3>The <code class="literal">"priority-strict-bandwidth"</code> property</h3>
+<pre class="programlisting"> "priority-strict-bandwidth" <span class="type">GArray_guint_</span>* : Read / Write</pre>
+<p>
+An array of 8 uint values, where the array index corresponds to the User
+Priority (0 - 7) and the value indicates whether or not the priority may
+use all of the bandwidth allocated to its assigned group. Allowed values
+are 0 (the priority may not utilize all bandwidth) or 1 (the priority may
+utilize all bandwidth).
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcb--priority-traffic-class"></a><h3>The <code class="literal">"priority-traffic-class"</code> property</h3>
+<pre class="programlisting"> "priority-traffic-class" <span class="type">GArray_guint_</span>* : Read / Write</pre>
+<p>
+An array of 8 uint values, where the array index corresponds to the User
+Priority (0 - 7) and the value indicates the traffic class (0 - 7) to
+which the priority is mapped.
+</p>
+<p class="since">Since 0.9.10</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingGeneric.html b/docs/libnm-util/html/NMSettingGeneric.html
new file mode 100644
index 000000000..9a758659d
--- /dev/null
+++ b/docs/libnm-util/html/NMSettingGeneric.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingGeneric</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm-util Reference Manual">
+<link rel="up" href="ch01.html" title="libnm-util API Reference">
+<link rel="prev" href="NMSettingTeamPort.html" title="NMSettingTeamPort">
+<link rel="next" href="NMSettingInfiniband.html" title="NMSettingInfiniband">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingTeamPort.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingInfiniband.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingGeneric.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingGeneric.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingGeneric.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMSettingGeneric"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingGeneric.top_of_page"></a>NMSettingGeneric</span></h2>
+<p>NMSettingGeneric — Describes connection properties for generic devices</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingGeneric.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingGenericError"></a><pre class="synopsis">
+#include &lt;nm-setting-generic.h&gt;
+
+#define <a class="link" href="NMSettingGeneric.html#NM-SETTING-GENERIC-SETTING-NAME:CAPS" title="NM_SETTING_GENERIC_SETTING_NAME">NM_SETTING_GENERIC_SETTING_NAME</a>
+enum <a class="link" href="NMSettingGeneric.html#NMSettingGenericError-enum" title="enum NMSettingGenericError">NMSettingGenericError</a>;
+#define <a class="link" href="NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR:CAPS" title="NM_SETTING_GENERIC_ERROR">NM_SETTING_GENERIC_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingGeneric.html#nm-setting-generic-error-quark" title="nm_setting_generic_error_quark ()">nm_setting_generic_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+ <a class="link" href="NMSettingGeneric.html#NMSettingGeneric-struct" title="NMSettingGeneric">NMSettingGeneric</a>;
+ <a class="link" href="NMSettingGeneric.html#NMSettingGenericClass" title="NMSettingGenericClass">NMSettingGenericClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingGeneric.html#nm-setting-generic-new" title="nm_setting_generic_new ()">nm_setting_generic_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingGeneric.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingGenericError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingGeneric
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingGeneric.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+optional properties that apply to "generic" devices (ie, devices that
+NetworkManager does not specifically recognize).
+</p>
+<p>
+There are currently no properties on this object; it exists only to be
+the "connection type" setting on <a href="NMConnection.html"><span class="type">NMConnections</span></a> for generic devices.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingGeneric.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-GENERIC-SETTING-NAME:CAPS"></a><h3>NM_SETTING_GENERIC_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_GENERIC_SETTING_NAME "generic"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGenericError-enum"></a><h3>enum NMSettingGenericError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_GENERIC_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+} NMSettingGenericError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-SETTING-GENERIC-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GENERIC_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GENERIC-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GENERIC-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and
+is required
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-GENERIC-ERROR:CAPS"></a><h3>NM_SETTING_GENERIC_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_GENERIC_ERROR nm_setting_generic_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-generic-error-quark"></a><h3>nm_setting_generic_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_generic_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGeneric-struct"></a><h3>NMSettingGeneric</h3>
+<pre class="programlisting">typedef struct _NMSettingGeneric NMSettingGeneric;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGenericClass"></a><h3>NMSettingGenericClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingGenericClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-generic-new"></a><h3>nm_setting_generic_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_generic_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingGsm.html b/docs/libnm-util/html/NMSettingGsm.html
index 6501d29a8..a6b8ede72 100644
--- a/docs/libnm-util/html/NMSettingGsm.html
+++ b/docs/libnm-util/html/NMSettingGsm.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingGsm</title>
+<title>NMSettingGsm</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingCdma.html" title="NMSettingCdma">
<link rel="next" href="NMSettingWimax.html" title="NMSettingWimax">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingGsm.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingGsm.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingGsm.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingCdma.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingWimax.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingCdma.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingWimax.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingGsm.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingGsm.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingGsm.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingGsm.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingGsm"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,601 +37,93 @@
<h2><span class="refentrytitle"><a name="NMSettingGsm.top_of_page"></a>NMSettingGsm</span></h2>
<p>NMSettingGsm — Describes GSM/3GPP-based mobile broadband properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingGsm.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-error-quark" title="nm_setting_gsm_error_quark ()">nm_setting_gsm_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-new" title="nm_setting_gsm_new ()">nm_setting_gsm_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-number" title="nm_setting_gsm_get_number ()">nm_setting_gsm_get_number</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-username" title="nm_setting_gsm_get_username ()">nm_setting_gsm_get_username</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password" title="nm_setting_gsm_get_password ()">nm_setting_gsm_get_password</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-apn" title="nm_setting_gsm_get_apn ()">nm_setting_gsm_get_apn</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-id" title="nm_setting_gsm_get_network_id ()">nm_setting_gsm_get_network_id</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-type" title="nm_setting_gsm_get_network_type ()">nm_setting_gsm_get_network_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-allowed-bands" title="nm_setting_gsm_get_allowed_bands ()">nm_setting_gsm_get_allowed_bands</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin" title="nm_setting_gsm_get_pin ()">nm_setting_gsm_get_pin</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-home-only" title="nm_setting_gsm_get_home_only ()">nm_setting_gsm_get_home_only</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin-flags" title="nm_setting_gsm_get_pin_flags ()">nm_setting_gsm_get_pin_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password-flags" title="nm_setting_gsm_get_password_flags ()">nm_setting_gsm_get_password_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingGsm.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--allowed-bands" title="The “allowed-bands†property">allowed-bands</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--apn" title="The “apn†property">apn</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--home-only" title="The “home-only†property">home-only</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--network-id" title="The “network-id†property">network-id</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--network-type" title="The “network-type†property">network-type</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--number" title="The “number†property">number</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title="The “password†property">password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--password-flags" title="The “password-flags†property">password-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title="The “pin†property">pin</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--pin-flags" title="The “pin-flags†property">pin-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingGsm.html#NMSettingGsm--username" title="The “username†property">username</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingGsm.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-SETTING-NAME:CAPS" title="NM_SETTING_GSM_SETTING_NAME">NM_SETTING_GSM_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NMSettingGsmError" title="enum NMSettingGsmError">NMSettingGsmError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-ERROR:CAPS" title="NM_SETTING_GSM_ERROR">NM_SETTING_GSM_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NUMBER:CAPS" title="NM_SETTING_GSM_NUMBER">NM_SETTING_GSM_NUMBER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-USERNAME:CAPS" title="NM_SETTING_GSM_USERNAME">NM_SETTING_GSM_USERNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PASSWORD:CAPS" title="NM_SETTING_GSM_PASSWORD">NM_SETTING_GSM_PASSWORD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PASSWORD-FLAGS:CAPS" title="NM_SETTING_GSM_PASSWORD_FLAGS">NM_SETTING_GSM_PASSWORD_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-APN:CAPS" title="NM_SETTING_GSM_APN">NM_SETTING_GSM_APN</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-ID:CAPS" title="NM_SETTING_GSM_NETWORK_ID">NM_SETTING_GSM_NETWORK_ID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE:CAPS" title="NM_SETTING_GSM_NETWORK_TYPE">NM_SETTING_GSM_NETWORK_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-ALLOWED-BANDS:CAPS" title="NM_SETTING_GSM_ALLOWED_BANDS">NM_SETTING_GSM_ALLOWED_BANDS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PIN:CAPS" title="NM_SETTING_GSM_PIN">NM_SETTING_GSM_PIN</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PIN-FLAGS:CAPS" title="NM_SETTING_GSM_PIN_FLAGS">NM_SETTING_GSM_PIN_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-HOME-ONLY:CAPS" title="NM_SETTING_GSM_HOME_ONLY">NM_SETTING_GSM_HOME_ONLY</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType" title="enum NMSettingGsmNetworkType">NMSettingGsmNetworkType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand" title="enum NMSettingGsmNetworkBand">NMSettingGsmNetworkBand</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingGsm.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingGsmError"></a><a name="NMSettingGsmNetworkType"></a><a name="NMSettingGsmNetworkBand"></a><pre class="synopsis">
+#include &lt;nm-setting-gsm.h&gt;
+
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-SETTING-NAME:CAPS" title="NM_SETTING_GSM_SETTING_NAME">NM_SETTING_GSM_SETTING_NAME</a>
+enum <a class="link" href="NMSettingGsm.html#NMSettingGsmError-enum" title="enum NMSettingGsmError">NMSettingGsmError</a>;
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-ERROR:CAPS" title="NM_SETTING_GSM_ERROR">NM_SETTING_GSM_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingGsm.html#nm-setting-gsm-error-quark" title="nm_setting_gsm_error_quark ()">nm_setting_gsm_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NUMBER:CAPS" title="NM_SETTING_GSM_NUMBER">NM_SETTING_GSM_NUMBER</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-USERNAME:CAPS" title="NM_SETTING_GSM_USERNAME">NM_SETTING_GSM_USERNAME</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PASSWORD:CAPS" title="NM_SETTING_GSM_PASSWORD">NM_SETTING_GSM_PASSWORD</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PASSWORD-FLAGS:CAPS" title="NM_SETTING_GSM_PASSWORD_FLAGS">NM_SETTING_GSM_PASSWORD_FLAGS</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-APN:CAPS" title="NM_SETTING_GSM_APN">NM_SETTING_GSM_APN</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-ID:CAPS" title="NM_SETTING_GSM_NETWORK_ID">NM_SETTING_GSM_NETWORK_ID</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PIN:CAPS" title="NM_SETTING_GSM_PIN">NM_SETTING_GSM_PIN</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-PIN-FLAGS:CAPS" title="NM_SETTING_GSM_PIN_FLAGS">NM_SETTING_GSM_PIN_FLAGS</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-HOME-ONLY:CAPS" title="NM_SETTING_GSM_HOME_ONLY">NM_SETTING_GSM_HOME_ONLY</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-ALLOWED-BANDS:CAPS" title="NM_SETTING_GSM_ALLOWED_BANDS">NM_SETTING_GSM_ALLOWED_BANDS</a>
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE:CAPS" title="NM_SETTING_GSM_NETWORK_TYPE">NM_SETTING_GSM_NETWORK_TYPE</a>
+enum <a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType-enum" title="enum NMSettingGsmNetworkType">NMSettingGsmNetworkType</a>;
+enum <a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand-enum" title="enum NMSettingGsmNetworkBand">NMSettingGsmNetworkBand</a>;
+#define <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-BANDS-MAX:CAPS" title="NM_SETTING_GSM_BANDS_MAX">NM_SETTING_GSM_BANDS_MAX</a>
+ <a class="link" href="NMSettingGsm.html#NMSettingGsm-struct" title="NMSettingGsm">NMSettingGsm</a>;
+ <a class="link" href="NMSettingGsm.html#NMSettingGsmClass" title="NMSettingGsmClass">NMSettingGsmClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingGsm.html#nm-setting-gsm-new" title="nm_setting_gsm_new ()">nm_setting_gsm_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-number" title="nm_setting_gsm_get_number ()">nm_setting_gsm_get_number</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-username" title="nm_setting_gsm_get_username ()">nm_setting_gsm_get_username</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password" title="nm_setting_gsm_get_password ()">nm_setting_gsm_get_password</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-apn" title="nm_setting_gsm_get_apn ()">nm_setting_gsm_get_apn</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-id" title="nm_setting_gsm_get_network_id ()">nm_setting_gsm_get_network_id</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin" title="nm_setting_gsm_get_pin ()">nm_setting_gsm_get_pin</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-home-only" title="nm_setting_gsm_get_home_only ()">nm_setting_gsm_get_home_only</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin-flags" title="nm_setting_gsm_get_pin_flags ()">nm_setting_gsm_get_pin_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password-flags" title="nm_setting_gsm_get_password_flags ()">nm_setting_gsm_get_password_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-type" title="nm_setting_gsm_get_network_type ()">nm_setting_gsm_get_network_type</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-allowed-bands" title="nm_setting_gsm_get_allowed_bands ()">nm_setting_gsm_get_allowed_bands</a> (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingGsm.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">├──</span> NMSettingGsmError
- <span class="lineart">├──</span> NMSettingGsmNetworkBand
- <span class="lineart">╰──</span> NMSettingGsmNetworkType
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingGsm
+<pre class="synopsis">
+ GEnum
+ +----NMSettingGsmError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingGsmNetworkType
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingGsmNetworkBand
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingGsm
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingGsm.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-gsm.h&gt;
+<a name="NMSettingGsm.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--allowed-bands" title='The "allowed-bands" property'>allowed-bands</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--apn" title='The "apn" property'>apn</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--home-only" title='The "home-only" property'>home-only</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--network-id" title='The "network-id" property'>network-id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--network-type" title='The "network-type" property'>network-type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--number" title='The "number" property'>number</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title='The "password" property'>password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--password-flags" title='The "password-flags" property'>password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title='The "pin" property'>pin</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--pin-flags" title='The "pin-flags" property'>pin-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingGsm.html#NMSettingGsm--username" title='The "username" property'>username</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
</pre>
</div>
<div class="refsect1">
<a name="NMSettingGsm.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+<p>
+The <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
properties that allow connections to 3GPP-based mobile broadband
-networks, including those using GPRS/EDGE and UMTS/HSPA technology.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingGsm.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-gsm-error-quark"></a><h3>nm_setting_gsm_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_gsm_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.11.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-new"></a><h3>nm_setting_gsm_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_gsm_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.11.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> object</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-number"></a><h3>nm_setting_gsm_get_number ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_gsm_get_number (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--number" title="The “number†property"><span class="type">“numberâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-username"></a><h3>nm_setting_gsm_get_username ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_gsm_get_username (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--username" title="The “username†property"><span class="type">“usernameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-password"></a><h3>nm_setting_gsm_get_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_gsm_get_password (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title="The “password†property"><span class="type">“passwordâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-apn"></a><h3>nm_setting_gsm_get_apn ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_gsm_get_apn (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--apn" title="The “apn†property"><span class="type">“apnâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-network-id"></a><h3>nm_setting_gsm_get_network_id ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_gsm_get_network_id (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.8.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--network-id" title="The “network-id†property"><span class="type">“network-idâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-network-type"></a><h3>nm_setting_gsm_get_network_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">int</span>
-nm_setting_gsm_get_network_type (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.9.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--network-type" title="The “network-type†property"><span class="type">“network-typeâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-allowed-bands"></a><h3>nm_setting_gsm_get_allowed_bands ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_gsm_get_allowed_bands (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.10.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--allowed-bands" title="The “allowed-bands†property"><span class="type">“allowed-bandsâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-pin"></a><h3>nm_setting_gsm_get_pin ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_gsm_get_pin (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.11.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.11.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title="The “pin†property"><span class="type">“pinâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-home-only"></a><h3>nm_setting_gsm_get_home_only ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_gsm_get_home_only (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.12.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.12.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingGsm.html#NMSettingGsm--home-only" title="The “home-only†property"><span class="type">“home-onlyâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-pin-flags"></a><h3>nm_setting_gsm_get_pin_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_gsm_get_pin_flags (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.13.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.13.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title="The “pin†property"><span class="type">“pinâ€</span></a></p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-gsm-get-password-flags"></a><h3>nm_setting_gsm_get_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_gsm_get_password_flags (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.11.9.14.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.9.14.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title="The “password†property"><span class="type">“passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
+networks, including those using GPRS/EDGE and UMTS/HSPA technology.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingGsm.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingGsm.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-GSM-SETTING-NAME:CAPS"></a><h3>NM_SETTING_GSM_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_GSM_SETTING_NAME "gsm"
@@ -635,50 +133,45 @@ nm_setting_gsm_get_password_flags (<em class="parameter"><code><a class="link" h
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsmError"></a><h3>enum NMSettingGsmError</h3>
-<div class="refsect3">
-<a name="id-1.2.11.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingGsmError-enum"></a><h3>enum NMSettingGsmError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_GSM_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_GSM_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_GSM_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING /*&lt; nick=MissingSerialSetting &gt;*/
+} NMSettingGsmError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_GSM_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-GSM-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_GSM_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-GSM-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_GSM_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-GSM-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-ERROR-MISSING-SERIAL-SETTING:CAPS"></a>NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING</p></td>
-<td class="enum_member_description">
-<p>the required <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
-is missing in the connection</p>
+<td><p><a name="NM-SETTING-GSM-ERROR-MISSING-SERIAL-SETTING:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING</code></span></p></td>
+<td>the required <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
+is missing in the connection
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-GSM-ERROR:CAPS"></a><h3>NM_SETTING_GSM_ERROR</h3>
@@ -689,6 +182,24 @@ is missing in the connection</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-gsm-error-quark"></a><h3>nm_setting_gsm_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_gsm_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-GSM-NUMBER:CAPS"></a><h3>NM_SETTING_GSM_NUMBER</h3>
<pre class="programlisting">#define NM_SETTING_GSM_NUMBER "number"
</pre>
@@ -737,338 +248,683 @@ is missing in the connection</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-GSM-NETWORK-TYPE:CAPS"></a><h3>NM_SETTING_GSM_NETWORK_TYPE</h3>
-<pre class="programlisting">#define NM_SETTING_GSM_NETWORK_TYPE "network-type"
+<a name="NM-SETTING-GSM-PIN:CAPS"></a><h3>NM_SETTING_GSM_PIN</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_PIN "pin"
</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-GSM-ALLOWED-BANDS:CAPS"></a><h3>NM_SETTING_GSM_ALLOWED_BANDS</h3>
-<pre class="programlisting">#define NM_SETTING_GSM_ALLOWED_BANDS "allowed-bands"
+<a name="NM-SETTING-GSM-PIN-FLAGS:CAPS"></a><h3>NM_SETTING_GSM_PIN_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_PIN_FLAGS "pin-flags"
</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-GSM-PIN:CAPS"></a><h3>NM_SETTING_GSM_PIN</h3>
-<pre class="programlisting">#define NM_SETTING_GSM_PIN "pin"
+<a name="NM-SETTING-GSM-HOME-ONLY:CAPS"></a><h3>NM_SETTING_GSM_HOME_ONLY</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_HOME_ONLY "home-only"
</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-GSM-PIN-FLAGS:CAPS"></a><h3>NM_SETTING_GSM_PIN_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_GSM_PIN_FLAGS "pin-flags"
+<a name="NM-SETTING-GSM-ALLOWED-BANDS:CAPS"></a><h3>NM_SETTING_GSM_ALLOWED_BANDS</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_ALLOWED_BANDS "allowed-bands"
</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-GSM-HOME-ONLY:CAPS"></a><h3>NM_SETTING_GSM_HOME_ONLY</h3>
-<pre class="programlisting">#define NM_SETTING_GSM_HOME_ONLY "home-only"
+<a name="NM-SETTING-GSM-NETWORK-TYPE:CAPS"></a><h3>NM_SETTING_GSM_NETWORK_TYPE</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_NETWORK_TYPE "network-type"
</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsmNetworkType"></a><h3>enum NMSettingGsmNetworkType</h3>
-<p><a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType" title="enum NMSettingGsmNetworkType"><span class="type">NMSettingGsmNetworkType</span></a> values indicate the allowed access technologies
-the device may use when connecting to this network.</p>
-<div class="refsect3">
-<a name="id-1.2.11.10.16.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingGsmNetworkType-enum"></a><h3>enum NMSettingGsmNetworkType</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_GSM_NETWORK_TYPE_ANY = -1,
+ NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA = 0,
+ NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE = 1,
+ NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA = 2,
+ NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE = 3,
+ NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G = 4,
+ NM_SETTING_GSM_NETWORK_TYPE_4G = 5
+} NMSettingGsmNetworkType;
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">NMSettingGsmNetworkType</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used.</p>
+</div>
+<p>
+<a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType"><span class="type">NMSettingGsmNetworkType</span></a> values indicate the allowed access technologies
+the device may use when connecting to this network.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-NETWORK-TYPE-ANY:CAPS"></a>NM_SETTING_GSM_NETWORK_TYPE_ANY</p></td>
-<td class="enum_member_description">
-<p>any access technology may be used</p>
+<td><p><a name="NM-SETTING-GSM-NETWORK-TYPE-ANY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_ANY</code></span></p></td>
+<td>any access technology may be used
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-NETWORK-TYPE-UMTS-HSPA:CAPS"></a>NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA</p></td>
-<td class="enum_member_description">
-<p>only 3G-type (UMTS and HSPA)
-technologies may be used</p>
+<td><p><a name="NM-SETTING-GSM-NETWORK-TYPE-UMTS-HSPA:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA</code></span></p></td>
+<td>only 3G-type (UMTS and HSPA)
+technologies may be used
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-NETWORK-TYPE-GPRS-EDGE:CAPS"></a>NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE</p></td>
-<td class="enum_member_description">
-<p>only 2G-type (GPRS and EDGE)
-technologies may be used</p>
+<td><p><a name="NM-SETTING-GSM-NETWORK-TYPE-GPRS-EDGE:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE</code></span></p></td>
+<td>only 2G-type (GPRS and EDGE)
+technologies may be used
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-NETWORK-TYPE-PREFER-UMTS-HSPA:CAPS"></a>NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA</p></td>
-<td class="enum_member_description">
-<p>3G-type technologies are
-preferred but 2G-type technologies may be used as a fallback</p>
+<td><p><a name="NM-SETTING-GSM-NETWORK-TYPE-PREFER-UMTS-HSPA:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA</code></span></p></td>
+<td>3G-type technologies are
+preferred but 2G-type technologies may be used as a fallback
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-NETWORK-TYPE-PREFER-GPRS-EDGE:CAPS"></a>NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE</p></td>
-<td class="enum_member_description">
-<p>2G-type technologies are
-preferred but 3G-type technologies may be used as a fallback</p>
+<td><p><a name="NM-SETTING-GSM-NETWORK-TYPE-PREFER-GPRS-EDGE:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE</code></span></p></td>
+<td>2G-type technologies are
+preferred but 3G-type technologies may be used as a fallback
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-NETWORK-TYPE-PREFER-4G:CAPS"></a>NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G</p></td>
-<td class="enum_member_description">
-<p>4G/LTE-type technologies are
-preferred but 3G/2/-type technologies may be used as a fallback</p>
+<td><p><a name="NM-SETTING-GSM-NETWORK-TYPE-PREFER-4G:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G</code></span></p></td>
+<td>4G/LTE-type technologies are
+preferred but 3G/2/-type technologies may be used as a fallback
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-NETWORK-TYPE-4G:CAPS"></a>NM_SETTING_GSM_NETWORK_TYPE_4G</p></td>
-<td class="enum_member_description">
-<p>only 4G/LTE type
-technologies may be used</p>
+<td><p><a name="NM-SETTING-GSM-NETWORK-TYPE-4G:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_4G</code></span></p></td>
+<td>only 4G/LTE type
+technologies may be used
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsmNetworkBand"></a><h3>enum NMSettingGsmNetworkBand</h3>
-<p><a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand" title="enum NMSettingGsmNetworkBand"><span class="type">NMSettingGsmNetworkBand</span></a> values indicate the allowed frequency bands
-the device may use when connecting to this network.</p>
-<div class="refsect3">
-<a name="id-1.2.11.10.17.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingGsmNetworkBand-enum"></a><h3>enum NMSettingGsmNetworkBand</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_GSM_BAND_UNKNOWN = 0x00000000,
+ NM_SETTING_GSM_BAND_ANY = 0x00000001,
+ NM_SETTING_GSM_BAND_EGSM = 0x00000002, /* 900 MHz */
+ NM_SETTING_GSM_BAND_DCS = 0x00000004, /* 1800 MHz */
+ NM_SETTING_GSM_BAND_PCS = 0x00000008, /* 1900 MHz */
+ NM_SETTING_GSM_BAND_G850 = 0x00000010, /* 850 MHz */
+ NM_SETTING_GSM_BAND_U2100 = 0x00000020, /* WCDMA 3GPP UMTS 2100 MHz (Class I) */
+ NM_SETTING_GSM_BAND_U1800 = 0x00000040, /* WCDMA 3GPP UMTS 1800 MHz (Class III) */
+ NM_SETTING_GSM_BAND_U17IV = 0x00000080, /* WCDMA 3GPP AWS 1700/2100 MHz (Class IV) */
+ NM_SETTING_GSM_BAND_U800 = 0x00000100, /* WCDMA 3GPP UMTS 800 MHz (Class VI) */
+ NM_SETTING_GSM_BAND_U850 = 0x00000200, /* WCDMA 3GPP UMTS 850 MHz (Class V) */
+ NM_SETTING_GSM_BAND_U900 = 0x00000400, /* WCDMA 3GPP UMTS 900 MHz (Class VIII) */
+ NM_SETTING_GSM_BAND_U17IX = 0x00000800, /* WCDMA 3GPP UMTS 1700 MHz (Class IX) */
+ NM_SETTING_GSM_BAND_U1900 = 0x00001000, /* WCDMA 3GPP UMTS 1900 MHz (Class II) */
+ NM_SETTING_GSM_BAND_U2600 = 0x00002000, /* WCDMA 3GPP UMTS 2600 MHz (Class VII, internal) */
+} NMSettingGsmNetworkBand;
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">NMSettingGsmNetworkBand</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used.</p>
+</div>
+<p>
+<a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand"><span class="type">NMSettingGsmNetworkBand</span></a> values indicate the allowed frequency bands
+the device may use when connecting to this network.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-UNKNOWN:CAPS"></a>NM_SETTING_GSM_BAND_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or no band specified</p>
+<td><p><a name="NM-SETTING-GSM-BAND-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_UNKNOWN</code></span></p></td>
+<td>unknown or no band specified
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-ANY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_ANY</code></span></p></td>
+<td>any band is allowed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-EGSM:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_EGSM</code></span></p></td>
+<td>900 MHz original GSM band
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-ANY:CAPS"></a>NM_SETTING_GSM_BAND_ANY</p></td>
-<td class="enum_member_description">
-<p>any band is allowed</p>
+<td><p><a name="NM-SETTING-GSM-BAND-DCS:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_DCS</code></span></p></td>
+<td>1800 MHz DCS band
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-EGSM:CAPS"></a>NM_SETTING_GSM_BAND_EGSM</p></td>
-<td class="enum_member_description">
-<p>900 MHz original GSM band</p>
+<td><p><a name="NM-SETTING-GSM-BAND-PCS:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_PCS</code></span></p></td>
+<td>US 1900 MHz PCS band
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-DCS:CAPS"></a>NM_SETTING_GSM_BAND_DCS</p></td>
-<td class="enum_member_description">
-<p>1800 MHz DCS band</p>
+<td><p><a name="NM-SETTING-GSM-BAND-G850:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_G850</code></span></p></td>
+<td>US 850 MHz Cellular band
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-PCS:CAPS"></a>NM_SETTING_GSM_BAND_PCS</p></td>
-<td class="enum_member_description">
-<p>US 1900 MHz PCS band</p>
+<td><p><a name="NM-SETTING-GSM-BAND-U2100:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U2100</code></span></p></td>
+<td>WCDMA 3GPP UMTS 2100 MHz (Class I)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U1800:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U1800</code></span></p></td>
+<td>WCDMA 3GPP UMTS 1800 MHz (Class III)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U17IV:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U17IV</code></span></p></td>
+<td>WCDMA 3GPP AWS 1700/2100 MHz (Class IV)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U800:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U800</code></span></p></td>
+<td>WCDMA 3GPP UMTS 800 MHz (Class VI)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U850:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U850</code></span></p></td>
+<td>WCDMA 3GPP UMTS 850 MHz (Class V)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U900:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U900</code></span></p></td>
+<td>WCDMA 3GPP UMTS 900 MHz (Class VIII)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U17IX:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U17IX</code></span></p></td>
+<td>WCDMA 3GPP UMTS 1700 MHz (Class IX)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U1900:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U1900</code></span></p></td>
+<td>WCDMA 3GPP UMTS 1900 MHz (Class II)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-GSM-BAND-U2600:CAPS"></a><span class="term"><code class="literal">NM_SETTING_GSM_BAND_U2600</code></span></p></td>
+<td>WCDMA 3GPP UMTS 2600 MHz (Class VII, internal)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-GSM-BANDS-MAX:CAPS"></a><h3>NM_SETTING_GSM_BANDS_MAX</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_BANDS_MAX</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">NM_SETTING_GSM_BANDS_MAX</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used.</p>
+</div>
+<p>
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-BANDS-MAX:CAPS" title="NM_SETTING_GSM_BANDS_MAX"><span class="type">NM_SETTING_GSM_BANDS_MAX</span></a> macro indicate the maximal value that can be used
+as the allowed frequency bands (<a class="link" href="NMSettingGsm.html#NMSettingGsm--allowed-bands" title='The "allowed-bands" property'><span class="type">"allowed-bands"</span></a> property).
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGsm-struct"></a><h3>NMSettingGsm</h3>
+<pre class="programlisting">typedef struct _NMSettingGsm NMSettingGsm;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGsmClass"></a><h3>NMSettingGsmClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingGsmClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-new"></a><h3>nm_setting_gsm_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_gsm_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> object</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-number"></a><h3>nm_setting_gsm_get_number ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_gsm_get_number (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--number" title='The "number" property'><span class="type">"number"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-username"></a><h3>nm_setting_gsm_get_username ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_gsm_get_username (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-G850:CAPS"></a>NM_SETTING_GSM_BAND_G850</p></td>
-<td class="enum_member_description">
-<p>US 850 MHz Cellular band</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--username" title='The "username" property'><span class="type">"username"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-password"></a><h3>nm_setting_gsm_get_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_gsm_get_password (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U2100:CAPS"></a>NM_SETTING_GSM_BAND_U2100</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 2100 MHz (Class I)</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title='The "password" property'><span class="type">"password"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-apn"></a><h3>nm_setting_gsm_get_apn ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_gsm_get_apn (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U1800:CAPS"></a>NM_SETTING_GSM_BAND_U1800</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 1800 MHz (Class III)</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--apn" title='The "apn" property'><span class="type">"apn"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-network-id"></a><h3>nm_setting_gsm_get_network_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_gsm_get_network_id (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U17IV:CAPS"></a>NM_SETTING_GSM_BAND_U17IV</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP AWS 1700/2100 MHz (Class IV)</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--network-id" title='The "network-id" property'><span class="type">"network-id"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-pin"></a><h3>nm_setting_gsm_get_pin ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_gsm_get_pin (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U800:CAPS"></a>NM_SETTING_GSM_BAND_U800</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 800 MHz (Class VI)</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title='The "pin" property'><span class="type">"pin"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-home-only"></a><h3>nm_setting_gsm_get_home_only ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_gsm_get_home_only (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U850:CAPS"></a>NM_SETTING_GSM_BAND_U850</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 850 MHz (Class V)</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--home-only" title='The "home-only" property'><span class="type">"home-only"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-pin-flags"></a><h3>nm_setting_gsm_get_pin_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_gsm_get_pin_flags (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U900:CAPS"></a>NM_SETTING_GSM_BAND_U900</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 900 MHz (Class VIII)</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title='The "pin" property'><span class="type">"pin"</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-password-flags"></a><h3>nm_setting_gsm_get_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_gsm_get_password_flags (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U17IX:CAPS"></a>NM_SETTING_GSM_BAND_U17IX</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 1700 MHz (Class IX)</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U1900:CAPS"></a>NM_SETTING_GSM_BAND_U1900</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 1900 MHz (Class II)</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title='The "password" property'><span class="type">"password"</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-network-type"></a><h3>nm_setting_gsm_get_network_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_setting_gsm_get_network_type (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">nm_setting_gsm_get_network_type</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used. Network type setting should be done talking to ModemManager directly.</p>
+</div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-GSM-BAND-U2600:CAPS"></a>NM_SETTING_GSM_BAND_U2600</p></td>
-<td class="enum_member_description">
-<p>WCDMA 3GPP UMTS 2600 MHz (Class VII, internal)</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
</td>
-<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--network-type" title='The "network-type" property'><span class="type">"network-type"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-gsm-get-allowed-bands"></a><h3>nm_setting_gsm_get_allowed_bands ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_gsm_get_allowed_bands (<em class="parameter"><code><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> *setting</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">nm_setting_gsm_get_allowed_bands</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used. Bands setting should be done talking to ModemManager directly.</p>
+</div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingGsm.html#NMSettingGsm--allowed-bands" title='The "allowed-bands" property'><span class="type">"allowed-bands"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
<div class="refsect1">
<a name="NMSettingGsm.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingGsm--allowed-bands"></a><h3>The <code class="literal">“allowed-bandsâ€</code> property</h3>
-<pre class="programlisting"> “allowed-bands†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Bitfield of allowed frequency bands. Note that not all devices allow frequency band control.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingGsm--allowed-bands"></a><h3>The <code class="literal">"allowed-bands"</code> property</h3>
+<pre class="programlisting"> "allowed-bands" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">NMSettingGsm:allowed-bands</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used. Band setting should be done by
+talking to ModemManager directly.</p>
+</div>
+<p>
+Bitfield of allowed frequency bands. Note that not all devices allow
+frequency band control. Permitted values are those specified by
+<a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand"><span class="type">NMSettingGsmNetworkBand</span></a>.
+</p>
<p>Allowed values: &lt;= 16383</p>
<p>Default value: 1</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--apn"></a><h3>The <code class="literal">“apnâ€</code> property</h3>
-<pre class="programlisting"> “apn†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--apn"></a><h3>The <code class="literal">"apn"</code> property</h3>
+<pre class="programlisting"> "apn" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The GPRS Access Point Name specifying the APN used when establishing a
+data session with the GSM-based network. The APN often determines how
+the user will be billed for their network usage and whether the user has
+access to the Internet or just a provider-specific walled-garden, so it
+is important to use the correct APN for the user's mobile broadband plan.
+The APN may only be composed of the characters a-z, 0-9, ., and - per GSM
+03.60 Section 14.9.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--home-only"></a><h3>The <code class="literal">“home-onlyâ€</code> property</h3>
-<pre class="programlisting"> “home-only†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--home-only"></a><h3>The <code class="literal">"home-only"</code> property</h3>
+<pre class="programlisting"> "home-only" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
+<p>
+When <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, only connections to the home network will be allowed.
+Connections to roaming networks will not be made.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--network-id"></a><h3>The <code class="literal">“network-idâ€</code> property</h3>
-<pre class="programlisting"> “network-id†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The Network ID (GSM LAI format, ie MCC-MNC) to force specific network registration. If the Network ID is specified, NetworkManager will attempt to force the device to register only on the specified network. This can be used to ensure that the device does not roam when direct roaming control of the device is not otherwise possible.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--network-id"></a><h3>The <code class="literal">"network-id"</code> property</h3>
+<pre class="programlisting"> "network-id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The Network ID (GSM LAI format, ie MCC-MNC) to force specific network
+registration. If the Network ID is specified, NetworkManager will
+attempt to force the device to register only on the specified network.
+This can be used to ensure that the device does not roam when direct
+roaming control of the device is not otherwise possible.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--network-type"></a><h3>The <code class="literal">“network-typeâ€</code> property</h3>
-<pre class="programlisting"> “network-type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>Network preference to force the device to only use specific network technologies. The permitted values are: -1: any, 0: 3G only, 1: GPRS/EDGE only, 2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only. Note that not all devices allow network preference control.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingGsm--network-type"></a><h3>The <code class="literal">"network-type"</code> property</h3>
+<pre class="programlisting"> "network-type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">NMSettingGsm:network-type</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used. Network type setting should be done
+by talking to ModemManager directly.</p>
+</div>
+<p>
+Network preference to force the device to only use specific network
+technologies. The permitted values are <a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-ANY:CAPS"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_ANY</code></a>,
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-UMTS-HSPA:CAPS"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA</code></a>,
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-GPRS-EDGE:CAPS"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE</code></a>,
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-UMTS-HSPA:CAPS"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA</code></a>,
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-GPRS-EDGE:CAPS"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE</code></a>,
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-4G:CAPS"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G</code></a>, and
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-4G:CAPS"><code class="literal">NM_SETTING_GSM_NETWORK_TYPE_4G</code></a>. Note that not all devices allow network
+preference control.
+</p>
<p>Allowed values: [-1,5]</p>
<p>Default value: -1</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--number"></a><h3>The <code class="literal">“numberâ€</code> property</h3>
-<pre class="programlisting"> “number†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Number to dial when establishing a PPP data session with the GSM-based mobile broadband network. Many modems do not require PPP for connections to the mobile network and thus this property should be left blank, which allows NetworkManager to select the appropriate settings automatically.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--number"></a><h3>The <code class="literal">"number"</code> property</h3>
+<pre class="programlisting"> "number" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Number to dial when establishing a PPP data session with the GSM-based
+mobile broadband network. Many modems do not require PPP for connections
+to the mobile network and thus this property should be left blank, which
+allows NetworkManager to select the appropriate settings automatically.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--password"></a><h3>The <code class="literal">“passwordâ€</code> property</h3>
-<pre class="programlisting"> “password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Password used to authenticate with the network, if required. Note that many providers do not require a password or accept any password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--password"></a><h3>The <code class="literal">"password"</code> property</h3>
+<pre class="programlisting"> "password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The password used to authenticate with the network, if required. Many
+providers do not require a password, or accept any password. But if a
+password is required, it is specified here.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--password-flags"></a><h3>The <code class="literal">“password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the GSM password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--password-flags"></a><h3>The <code class="literal">"password-flags"</code> property</h3>
+<pre class="programlisting"> "password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the <a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title='The "password" property'><span class="type">"password"</span></a> property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--pin"></a><h3>The <code class="literal">“pinâ€</code> property</h3>
-<pre class="programlisting"> “pin†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If the SIM is locked with a PIN it must be unlocked before any other operations are requested. Specify the PIN here to allow operation of the device.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--pin"></a><h3>The <code class="literal">"pin"</code> property</h3>
+<pre class="programlisting"> "pin" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+If the SIM is locked with a PIN it must be unlocked before any other
+operations are requested. Specify the PIN here to allow operation of the
+device.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--pin-flags"></a><h3>The <code class="literal">“pin-flagsâ€</code> property</h3>
-<pre class="programlisting"> “pin-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the GSM SIM PIN.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--pin-flags"></a><h3>The <code class="literal">"pin-flags"</code> property</h3>
+<pre class="programlisting"> "pin-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the <a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title='The "pin" property'><span class="type">"pin"</span></a> property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingGsm--username"></a><h3>The <code class="literal">“usernameâ€</code> property</h3>
-<pre class="programlisting"> “username†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Username used to authenticate with the network, if required. Note that many providers do not require a username or accept any username.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingGsm--username"></a><h3>The <code class="literal">"username"</code> property</h3>
+<pre class="programlisting"> "username" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The username used to authenticate with the network, if required. Many
+providers do not require a username, or accept any username. But if a
+username is required, it is specified here.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingIP4Config.html b/docs/libnm-util/html/NMSettingIP4Config.html
index d177f3d52..e44b6d491 100644
--- a/docs/libnm-util/html/NMSettingIP4Config.html
+++ b/docs/libnm-util/html/NMSettingIP4Config.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingIP4Config</title>
+<title>NMSettingIP4Config</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSetting8021x.html" title="NMSetting8021x">
<link rel="next" href="NMSettingIP6Config.html" title="NMSettingIP6Config">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingIP4Config.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingIP4Config.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingIP4Config.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSetting8021x.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingIP6Config.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSetting8021x.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingIP6Config.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingIP4Config.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingIP4Config.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingIP4Config.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingIP4Config.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingIP4Config"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,2449 +37,2102 @@
<h2><span class="refentrytitle"><a name="NMSettingIP4Config.top_of_page"></a>NMSettingIP4Config</span></h2>
<p>NMSettingIP4Config — Describes IPv4 addressing, routing, and name service properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingIP4Config.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingIP4ConfigError"></a><a name="NMIP4Address"></a><a name="NMIP4Route"></a><pre class="synopsis">
+#include &lt;nm-setting-ip4-config.h&gt;
+
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS" title="NM_SETTING_IP4_CONFIG_SETTING_NAME">NM_SETTING_IP4_CONFIG_SETTING_NAME</a>
+enum <a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigError-enum" title="enum NMSettingIP4ConfigError">NMSettingIP4ConfigError</a>;
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR:CAPS" title="NM_SETTING_IP4_CONFIG_ERROR">NM_SETTING_IP4_CONFIG_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-error-quark" title="nm_setting_ip4_config_error_quark ()">nm_setting_ip4_config_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD">NM_SETTING_IP4_CONFIG_METHOD</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS:CAPS" title="NM_SETTING_IP4_CONFIG_DNS">NM_SETTING_IP4_CONFIG_DNS</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS" title="NM_SETTING_IP4_CONFIG_DNS_SEARCH">NM_SETTING_IP4_CONFIG_DNS_SEARCH</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS" title="NM_SETTING_IP4_CONFIG_ADDRESSES">NM_SETTING_IP4_CONFIG_ADDRESSES</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTES:CAPS" title="NM_SETTING_IP4_CONFIG_ROUTES">NM_SETTING_IP4_CONFIG_ROUTES</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS" title="NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES">NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS" title="NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID">NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS" title="NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME">NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS" title="NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME">NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS" title="NM_SETTING_IP4_CONFIG_NEVER_DEFAULT">NM_SETTING_IP4_CONFIG_NEVER_DEFAULT</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS" title="NM_SETTING_IP4_CONFIG_MAY_FAIL">NM_SETTING_IP4_CONFIG_MAY_FAIL</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_AUTO">NM_SETTING_IP4_CONFIG_METHOD_AUTO</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL">NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_MANUAL">NM_SETTING_IP4_CONFIG_METHOD_MANUAL</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_SHARED">NM_SETTING_IP4_CONFIG_METHOD_SHARED</a>
+#define <a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_DISABLED">NM_SETTING_IP4_CONFIG_METHOD_DISABLED</a>
+typedef <a class="link" href="NMSettingIP4Config.html#NMIP4Address">NMIP4Address</a>;
+<a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> * <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-new" title="nm_ip4_address_new ()">nm_ip4_address_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> * <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-dup" title="nm_ip4_address_dup ()">nm_ip4_address_dup</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *source</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-ref" title="nm_ip4_address_ref ()">nm_ip4_address_ref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-unref" title="nm_ip4_address_unref ()">nm_ip4_address_unref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-compare" title="nm_ip4_address_compare ()">nm_ip4_address_compare</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *other</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-address" title="nm_ip4_address_get_address ()">nm_ip4_address_get_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-address" title="nm_ip4_address_set_address ()">nm_ip4_address_set_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> addr</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-prefix" title="nm_ip4_address_get_prefix ()">nm_ip4_address_get_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-prefix" title="nm_ip4_address_set_prefix ()">nm_ip4_address_set_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-gateway" title="nm_ip4_address_get_gateway ()">nm_ip4_address_get_gateway</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-gateway" title="nm_ip4_address_set_gateway ()">nm_ip4_address_set_gateway</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> gateway</code></em>);
+typedef <a class="link" href="NMSettingIP4Config.html#NMIP4Route">NMIP4Route</a>;
+<a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> * <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-new" title="nm_ip4_route_new ()">nm_ip4_route_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> * <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-dup" title="nm_ip4_route_dup ()">nm_ip4_route_dup</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *source</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-ref" title="nm_ip4_route_ref ()">nm_ip4_route_ref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-unref" title="nm_ip4_route_unref ()">nm_ip4_route_unref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-compare" title="nm_ip4_route_compare ()">nm_ip4_route_compare</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *other</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-dest" title="nm_ip4_route_get_dest ()">nm_ip4_route_get_dest</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-dest" title="nm_ip4_route_set_dest ()">nm_ip4_route_set_dest</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dest</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-prefix" title="nm_ip4_route_get_prefix ()">nm_ip4_route_get_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-prefix" title="nm_ip4_route_set_prefix ()">nm_ip4_route_set_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-next-hop" title="nm_ip4_route_get_next_hop ()">nm_ip4_route_get_next_hop</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-next-hop" title="nm_ip4_route_set_next_hop ()">nm_ip4_route_set_next_hop</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> next_hop</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-metric" title="nm_ip4_route_get_metric ()">nm_ip4_route_get_metric</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-metric" title="nm_ip4_route_set_metric ()">nm_ip4_route_set_metric</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> metric</code></em>);
+ <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config-struct" title="NMSettingIP4Config">NMSettingIP4Config</a>;
+ <a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigClass" title="NMSettingIP4ConfigClass">NMSettingIP4ConfigClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-new" title="nm_setting_ip4_config_new ()">nm_setting_ip4_config_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-method" title="nm_setting_ip4_config_get_method ()">nm_setting_ip4_config_get_method</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns" title="nm_setting_ip4_config_get_num_dns ()">nm_setting_ip4_config_get_num_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns" title="nm_setting_ip4_config_get_dns ()">nm_setting_ip4_config_get_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns" title="nm_setting_ip4_config_add_dns ()">nm_setting_ip4_config_add_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dns</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns" title="nm_setting_ip4_config_remove_dns ()">nm_setting_ip4_config_remove_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-by-value" title="nm_setting_ip4_config_remove_dns_by_value ()">nm_setting_ip4_config_remove_dns_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dns</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns" title="nm_setting_ip4_config_clear_dns ()">nm_setting_ip4_config_clear_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns-searches" title="nm_setting_ip4_config_get_num_dns_searches ()">nm_setting_ip4_config_get_num_dns_searches</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns-search" title="nm_setting_ip4_config_get_dns_search ()">nm_setting_ip4_config_get_dns_search</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns-search" title="nm_setting_ip4_config_add_dns_search ()">nm_setting_ip4_config_add_dns_search</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search" title="nm_setting_ip4_config_remove_dns_search ()">nm_setting_ip4_config_remove_dns_search</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search-by-value" title="nm_setting_ip4_config_remove_dns_search_by_value ()">nm_setting_ip4_config_remove_dns_search_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns-searches" title="nm_setting_ip4_config_clear_dns_searches ()">nm_setting_ip4_config_clear_dns_searches</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-addresses" title="nm_setting_ip4_config_get_num_addresses ()">nm_setting_ip4_config_get_num_addresses</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> * <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-address" title="nm_setting_ip4_config_get_address ()">nm_setting_ip4_config_get_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-address" title="nm_setting_ip4_config_add_address ()">nm_setting_ip4_config_add_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address" title="nm_setting_ip4_config_remove_address ()">nm_setting_ip4_config_remove_address</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address-by-value" title="nm_setting_ip4_config_remove_address_by_value ()">nm_setting_ip4_config_remove_address_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-addresses" title="nm_setting_ip4_config_clear_addresses ()">nm_setting_ip4_config_clear_addresses</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-routes" title="nm_setting_ip4_config_get_num_routes ()">nm_setting_ip4_config_get_num_routes</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> * <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-route" title="nm_setting_ip4_config_get_route ()">nm_setting_ip4_config_get_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-route" title="nm_setting_ip4_config_add_route ()">nm_setting_ip4_config_add_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route" title="nm_setting_ip4_config_remove_route ()">nm_setting_ip4_config_remove_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route-by-value" title="nm_setting_ip4_config_remove_route_by_value ()">nm_setting_ip4_config_remove_route_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-routes" title="nm_setting_ip4_config_clear_routes ()">nm_setting_ip4_config_clear_routes</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-routes" title="nm_setting_ip4_config_get_ignore_auto_routes ()">nm_setting_ip4_config_get_ignore_auto_routes</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-dns" title="nm_setting_ip4_config_get_ignore_auto_dns ()">nm_setting_ip4_config_get_ignore_auto_dns</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id" title="nm_setting_ip4_config_get_dhcp_client_id ()">nm_setting_ip4_config_get_dhcp_client_id</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-send-hostname" title="nm_setting_ip4_config_get_dhcp_send_hostname ()">nm_setting_ip4_config_get_dhcp_send_hostname</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-hostname" title="nm_setting_ip4_config_get_dhcp_hostname ()">nm_setting_ip4_config_get_dhcp_hostname</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-never-default" title="nm_setting_ip4_config_get_never_default ()">nm_setting_ip4_config_get_never_default</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-may-fail" title="nm_setting_ip4_config_get_may_fail ()">nm_setting_ip4_config_get_may_fail</a> (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP4Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingIP4ConfigError
+</pre>
+<pre class="synopsis">
+ GBoxed
+ +----NMIP4Address
+</pre>
+<pre class="synopsis">
+ GBoxed
+ +----NMIP4Route
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingIP4Config
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP4Config.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--address-labels" title='The "address-labels" property'>address-labels</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--addresses" title='The "addresses" property'>addresses</a>" <span class="type">GPtrArray_GArray_guint__</span>* : Read / Write
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id" title='The "dhcp-client-id" property'>dhcp-client-id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname" title='The "dhcp-hostname" property'>dhcp-hostname</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname" title='The "dhcp-send-hostname" property'>dhcp-send-hostname</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns" title='The "dns" property'>dns</a>" <span class="type">GArray_guint_</span>* : Read / Write
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns-search" title='The "dns-search" property'>dns-search</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns" title='The "ignore-auto-dns" property'>ignore-auto-dns</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes" title='The "ignore-auto-routes" property'>ignore-auto-routes</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--may-fail" title='The "may-fail" property'>may-fail</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--method" title='The "method" property'>method</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--never-default" title='The "never-default" property'>never-default</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--routes" title='The "routes" property'>routes</a>" <span class="type">GPtrArray_GArray_guint__</span>* : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP4Config.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+properties related to IPv4 addressing, routing, and Domain Name Service
+</p>
+</div>
<div class="refsect1">
-<a name="NMSettingIP4Config.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingIP4Config.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_SETTING_NAME "ipv4"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIP4ConfigError-enum"></a><h3>enum NMSettingIP4ConfigError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD /*&lt; nick=NotAllowedForMethod &gt;*/
+} NMSettingIP4ConfigError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-error-quark" title="nm_setting_ip4_config_error_quark ()">nm_setting_ip4_config_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-new" title="nm_ip4_address_new ()">nm_ip4_address_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-dup" title="nm_ip4_address_dup ()">nm_ip4_address_dup</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-ref" title="nm_ip4_address_ref ()">nm_ip4_address_ref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-unref" title="nm_ip4_address_unref ()">nm_ip4_address_unref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-compare" title="nm_ip4_address_compare ()">nm_ip4_address_compare</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-address" title="nm_ip4_address_get_address ()">nm_ip4_address_get_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-address" title="nm_ip4_address_set_address ()">nm_ip4_address_set_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-prefix" title="nm_ip4_address_get_prefix ()">nm_ip4_address_get_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-prefix" title="nm_ip4_address_set_prefix ()">nm_ip4_address_set_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-gateway" title="nm_ip4_address_get_gateway ()">nm_ip4_address_get_gateway</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-gateway" title="nm_ip4_address_set_gateway ()">nm_ip4_address_set_gateway</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-new" title="nm_ip4_route_new ()">nm_ip4_route_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-dup" title="nm_ip4_route_dup ()">nm_ip4_route_dup</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-ref" title="nm_ip4_route_ref ()">nm_ip4_route_ref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-unref" title="nm_ip4_route_unref ()">nm_ip4_route_unref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-compare" title="nm_ip4_route_compare ()">nm_ip4_route_compare</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-dest" title="nm_ip4_route_get_dest ()">nm_ip4_route_get_dest</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-dest" title="nm_ip4_route_set_dest ()">nm_ip4_route_set_dest</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-prefix" title="nm_ip4_route_get_prefix ()">nm_ip4_route_get_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-prefix" title="nm_ip4_route_set_prefix ()">nm_ip4_route_set_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-next-hop" title="nm_ip4_route_get_next_hop ()">nm_ip4_route_get_next_hop</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-next-hop" title="nm_ip4_route_set_next_hop ()">nm_ip4_route_set_next_hop</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-metric" title="nm_ip4_route_get_metric ()">nm_ip4_route_get_metric</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-metric" title="nm_ip4_route_set_metric ()">nm_ip4_route_set_metric</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-new" title="nm_setting_ip4_config_new ()">nm_setting_ip4_config_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-method" title="nm_setting_ip4_config_get_method ()">nm_setting_ip4_config_get_method</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns" title="nm_setting_ip4_config_get_num_dns ()">nm_setting_ip4_config_get_num_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns" title="nm_setting_ip4_config_get_dns ()">nm_setting_ip4_config_get_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns" title="nm_setting_ip4_config_add_dns ()">nm_setting_ip4_config_add_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns" title="nm_setting_ip4_config_remove_dns ()">nm_setting_ip4_config_remove_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns" title="nm_setting_ip4_config_clear_dns ()">nm_setting_ip4_config_clear_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns-searches" title="nm_setting_ip4_config_get_num_dns_searches ()">nm_setting_ip4_config_get_num_dns_searches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns-search" title="nm_setting_ip4_config_get_dns_search ()">nm_setting_ip4_config_get_dns_search</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns-search" title="nm_setting_ip4_config_add_dns_search ()">nm_setting_ip4_config_add_dns_search</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search" title="nm_setting_ip4_config_remove_dns_search ()">nm_setting_ip4_config_remove_dns_search</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns-searches" title="nm_setting_ip4_config_clear_dns_searches ()">nm_setting_ip4_config_clear_dns_searches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-addresses" title="nm_setting_ip4_config_get_num_addresses ()">nm_setting_ip4_config_get_num_addresses</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-address" title="nm_setting_ip4_config_get_address ()">nm_setting_ip4_config_get_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-address" title="nm_setting_ip4_config_add_address ()">nm_setting_ip4_config_add_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address" title="nm_setting_ip4_config_remove_address ()">nm_setting_ip4_config_remove_address</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP4-CONFIG-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-addresses" title="nm_setting_ip4_config_clear_addresses ()">nm_setting_ip4_config_clear_addresses</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP4-CONFIG-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-routes" title="nm_setting_ip4_config_get_num_routes ()">nm_setting_ip4_config_get_num_routes</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP4-CONFIG-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-route" title="nm_setting_ip4_config_get_route ()">nm_setting_ip4_config_get_route</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-route" title="nm_setting_ip4_config_add_route ()">nm_setting_ip4_config_add_route</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route" title="nm_setting_ip4_config_remove_route ()">nm_setting_ip4_config_remove_route</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-routes" title="nm_setting_ip4_config_clear_routes ()">nm_setting_ip4_config_clear_routes</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-routes" title="nm_setting_ip4_config_get_ignore_auto_routes ()">nm_setting_ip4_config_get_ignore_auto_routes</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-dns" title="nm_setting_ip4_config_get_ignore_auto_dns ()">nm_setting_ip4_config_get_ignore_auto_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id" title="nm_setting_ip4_config_get_dhcp_client_id ()">nm_setting_ip4_config_get_dhcp_client_id</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-send-hostname" title="nm_setting_ip4_config_get_dhcp_send_hostname ()">nm_setting_ip4_config_get_dhcp_send_hostname</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-hostname" title="nm_setting_ip4_config_get_dhcp_hostname ()">nm_setting_ip4_config_get_dhcp_hostname</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-never-default" title="nm_setting_ip4_config_get_never_default ()">nm_setting_ip4_config_get_never_default</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-may-fail" title="nm_setting_ip4_config_get_may_fail ()">nm_setting_ip4_config_get_may_fail</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP4-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD</code></span></p></td>
+<td>the property's value is
+not valid with the given IP4 method
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingIP4Config.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<span class="type">GPtrArray_GArray_guint__</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--addresses" title="The “addresses†property">addresses</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id" title="The “dhcp-client-id†property">dhcp-client-id</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname" title="The “dhcp-hostname†property">dhcp-hostname</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname" title="The “dhcp-send-hostname†property">dhcp-send-hostname</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guint_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns" title="The “dns†property">dns</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns-search" title="The “dns-search†property">dns-search</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns" title="The “ignore-auto-dns†property">ignore-auto-dns</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes" title="The “ignore-auto-routes†property">ignore-auto-routes</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--may-fail" title="The “may-fail†property">may-fail</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--method" title="The “method†property">method</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--never-default" title="The “never-default†property">never-default</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GPtrArray_GArray_guint__</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--routes" title="The “routes†property">routes</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-ERROR:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_ERROR nm_setting_ip4_config_error_quark ()
+</pre>
+<p>
+</p>
</div>
-<a name="NMIP4Address"></a><a name="NMIP4Route"></a><div class="refsect1">
-<a name="NMSettingIP4Config.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip4-config-error-quark"></a><h3>nm_setting_ip4_config_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_ip4_config_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS" title="NM_SETTING_IP4_CONFIG_SETTING_NAME">NM_SETTING_IP4_CONFIG_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigError" title="enum NMSettingIP4ConfigError">NMSettingIP4ConfigError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR:CAPS" title="NM_SETTING_IP4_CONFIG_ERROR">NM_SETTING_IP4_CONFIG_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD">NM_SETTING_IP4_CONFIG_METHOD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS:CAPS" title="NM_SETTING_IP4_CONFIG_DNS">NM_SETTING_IP4_CONFIG_DNS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS" title="NM_SETTING_IP4_CONFIG_DNS_SEARCH">NM_SETTING_IP4_CONFIG_DNS_SEARCH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS" title="NM_SETTING_IP4_CONFIG_ADDRESSES">NM_SETTING_IP4_CONFIG_ADDRESSES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTES:CAPS" title="NM_SETTING_IP4_CONFIG_ROUTES">NM_SETTING_IP4_CONFIG_ROUTES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS" title="NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES">NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS" title="NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID">NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS" title="NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME">NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS" title="NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME">NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS" title="NM_SETTING_IP4_CONFIG_NEVER_DEFAULT">NM_SETTING_IP4_CONFIG_NEVER_DEFAULT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS" title="NM_SETTING_IP4_CONFIG_MAY_FAIL">NM_SETTING_IP4_CONFIG_MAY_FAIL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_AUTO">NM_SETTING_IP4_CONFIG_METHOD_AUTO</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL">NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_MANUAL">NM_SETTING_IP4_CONFIG_METHOD_MANUAL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_SHARED">NM_SETTING_IP4_CONFIG_METHOD_SHARED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_DISABLED">NM_SETTING_IP4_CONFIG_METHOD_DISABLED</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingIP4Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GBoxed
- <span class="lineart">├──</span> NMIP4Address
- <span class="lineart">╰──</span> NMIP4Route
- GEnum
- <span class="lineart">╰──</span> NMSettingIP4ConfigError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingIP4Config
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-METHOD:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD "method"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingIP4Config.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-ip4-config.h&gt;
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-DNS:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DNS</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DNS "dns"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingIP4Config.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-properties related to IPv4 addressing, routing, and Domain Name Service</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DNS_SEARCH</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DNS_SEARCH "dns-search"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingIP4Config.functions_details"></a><h2>Functions</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_ADDRESSES</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_ADDRESSES "addresses"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-ROUTES:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID "dhcp-client-id"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME "dhcp-send-hostname"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME "dhcp-hostname"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_NEVER_DEFAULT</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_NEVER_DEFAULT "never-default"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_MAY_FAIL</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_MAY_FAIL "may-fail"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_AUTO</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_AUTO "auto"
+</pre>
+<p>
+IPv4 configuration should be automatically determined via a method appropriate
+for the hardware interface, ie DHCP or PPP or some other device-specific
+manner.
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-error-quark"></a><h3>nm_setting_ip4_config_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_ip4_config_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> errors.</p>
-<p></p>
+<a name="NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL "link-local"
+</pre>
+<p>
+IPv4 configuration should be automatically configured for link-local-only
+operation.
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_MANUAL</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual"
+</pre>
+<p>
+All necessary IPv4 configuration (addresses, prefix, DNS, etc) is specified
+in the setting's properties.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_SHARED</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_SHARED "shared"
+</pre>
+<p>
+This connection specifies configuration that allows other computers to
+connect through it to the default network (usually the Internet). The
+connection's interface will be assigned a private address, and a DHCP server,
+caching DNS server, and Network Address Translation (NAT) functionality will
+be started on this connection's interface to allow other devices to connect
+through that interface to the default network.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-new"></a><h3>nm_ip4_address_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> *
-nm_ip4_address_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates and returns a new <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<a name="NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_DISABLED</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_DISABLED "disabled"
+</pre>
+<p>
+This connection does not use or require IPv4 address and it should be disabled.
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMIP4Address"></a><h3>NMIP4Address</h3>
+<pre class="programlisting">typedef struct NMIP4Address NMIP4Address;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-dup"></a><h3>nm_ip4_address_dup ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> *
-nm_ip4_address_dup (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *source</code></em>);</pre>
-<p>Copies a given <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object and returns the copy.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-new"></a><h3>nm_ip4_address_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> * nm_ip4_address_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates and returns a new <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>source</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object to copy</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.4.6"></a><h4>Returns</h4>
-<p> the copy of the given <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> copy. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip4-address-dup"></a><h3>nm_ip4_address_dup ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> * nm_ip4_address_dup (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *source</code></em>);</pre>
+<p>
+Copies a given <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object and returns the copy.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>source</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> object to copy</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the copy of the given <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> copy. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-ref"></a><h3>nm_ip4_address_ref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_address_ref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
-<p>Increases the reference count of the object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-ref"></a><h3>nm_ip4_address_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_address_ref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
+<p>
+Increases the reference count of the object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-unref"></a><h3>nm_ip4_address_unref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_address_unref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
-<p>Decreases the reference count of the object. If the reference count
-reaches zero, the object will be destroyed.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-unref"></a><h3>nm_ip4_address_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_address_unref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
+<p>
+Decreases the reference count of the object. If the reference count
+reaches zero, the object will be destroyed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-compare"></a><h3>nm_ip4_address_compare ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_ip4_address_compare (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *other</code></em>);</pre>
-<p>Determines if two <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects contain the same values.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-compare"></a><h3>nm_ip4_address_compare ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_ip4_address_compare (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *other</code></em>);</pre>
+<p>
+Determines if two <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects contain the same values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>other</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> to compare <em class="parameter"><code>address</code></em> to.</td>
</tr>
<tr>
-<td class="parameter_name"><p>other</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> to compare <em class="parameter"><code>address</code></em>
-to.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.7.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-get-address"></a><h3>nm_ip4_address_get_address ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip4_address_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
-<p>Gets the IPv4 address property of this address object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-get-address"></a><h3>nm_ip4_address_get_address ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip4_address_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
+<p>
+Gets the IPv4 address property of this address object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv4 address in network byte order</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.8.6"></a><h4>Returns</h4>
-<p> the IPv4 address in network byte order</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-set-address"></a><h3>nm_ip4_address_set_address ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_address_set_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> addr</code></em>);</pre>
-<p>Sets the IPv4 address property of this object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-set-address"></a><h3>nm_ip4_address_set_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_address_set_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> addr</code></em>);</pre>
+<p>
+Sets the IPv4 address property of this object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>addr</p></td>
-<td class="parameter_description"><p>the IPv4 address in network byte order</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>the IPv4 address in network byte order</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-get-prefix"></a><h3>nm_ip4_address_get_prefix ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip4_address_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
-<p>Gets the IPv4 address prefix (ie "24" or "30" etc) property of this address
-object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-get-prefix"></a><h3>nm_ip4_address_get_prefix ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip4_address_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
+<p>
+Gets the IPv4 address prefix (ie "24" or "30" etc) property of this address
+object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv4 address prefix</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.10.6"></a><h4>Returns</h4>
-<p> the IPv4 address prefix</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-set-prefix"></a><h3>nm_ip4_address_set_prefix ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_address_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
-<p>Sets the IPv4 address prefix.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-set-prefix"></a><h3>nm_ip4_address_set_prefix ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_address_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
+<p>
+Sets the IPv4 address prefix.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>prefix</p></td>
-<td class="parameter_description"><p>the address prefix, a number between 1 and 32 inclusive</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the address prefix, a number between 1 and 32 inclusive</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-get-gateway"></a><h3>nm_ip4_address_get_gateway ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip4_address_get_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
-<p>Gets the IPv4 default gateway property of this address object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-get-gateway"></a><h3>nm_ip4_address_get_gateway ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip4_address_get_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
+<p>
+Gets the IPv4 default gateway property of this address object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv4 gateway address in network byte order</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.12.6"></a><h4>Returns</h4>
-<p> the IPv4 gateway address in network byte order</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-address-set-gateway"></a><h3>nm_ip4_address_set_gateway ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_address_set_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> gateway</code></em>);</pre>
-<p>Sets the IPv4 default gateway property of this address object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-address-set-gateway"></a><h3>nm_ip4_address_set_gateway ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_address_set_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> gateway</code></em>);</pre>
+<p>
+Sets the IPv4 default gateway property of this address object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>gateway</p></td>
-<td class="parameter_description"><p>the IPv4 default gateway in network byte order</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>gateway</code></em> :</span></p></td>
+<td>the IPv4 default gateway in network byte order</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-new"></a><h3>nm_ip4_route_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> *
-nm_ip4_route_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates and returns a new <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.14.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NMIP4Route"></a><h3>NMIP4Route</h3>
+<pre class="programlisting">typedef struct NMIP4Route NMIP4Route;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-dup"></a><h3>nm_ip4_route_dup ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> *
-nm_ip4_route_dup (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *source</code></em>);</pre>
-<p>Copies a given <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object and returns the copy.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-new"></a><h3>nm_ip4_route_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> * nm_ip4_route_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates and returns a new <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>source</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object to copy</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.15.6"></a><h4>Returns</h4>
-<p> the copy of the given <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> copy. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip4-route-dup"></a><h3>nm_ip4_route_dup ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> * nm_ip4_route_dup (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *source</code></em>);</pre>
+<p>
+Copies a given <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object and returns the copy.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>source</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> object to copy</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the copy of the given <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> copy. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-ref"></a><h3>nm_ip4_route_ref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_route_ref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
-<p>Increases the reference count of the object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-ref"></a><h3>nm_ip4_route_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_route_ref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Increases the reference count of the object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-unref"></a><h3>nm_ip4_route_unref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_route_unref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
-<p>Decreases the reference count of the object. If the reference count
-reaches zero, the object will be destroyed.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-unref"></a><h3>nm_ip4_route_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_route_unref (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Decreases the reference count of the object. If the reference count
+reaches zero, the object will be destroyed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-compare"></a><h3>nm_ip4_route_compare ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_ip4_route_compare (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *other</code></em>);</pre>
-<p>Determines if two <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects contain the same values.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-compare"></a><h3>nm_ip4_route_compare ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_ip4_route_compare (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *other</code></em>);</pre>
+<p>
+Determines if two <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects contain the same values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>other</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> to compare <em class="parameter"><code>route</code></em>
-to.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>other</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> to compare <em class="parameter"><code>route</code></em> to.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.18.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-get-dest"></a><h3>nm_ip4_route_get_dest ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip4_route_get_dest (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
-<p>Gets the IPv4 destination address property of this route object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-get-dest"></a><h3>nm_ip4_route_get_dest ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip4_route_get_dest (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the IPv4 destination address property of this route object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv4 address in network byte order</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.19.6"></a><h4>Returns</h4>
-<p> the IPv4 address in network byte order</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-set-dest"></a><h3>nm_ip4_route_set_dest ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_route_set_dest (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dest</code></em>);</pre>
-<p>Sets the IPv4 destination address property of this route object.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-set-dest"></a><h3>nm_ip4_route_set_dest ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_route_set_dest (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dest</code></em>);</pre>
+<p>
+Sets the IPv4 destination address property of this route object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>dest</p></td>
-<td class="parameter_description"><p>the destination address in network byte order</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>the destination address in network byte order</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-get-prefix"></a><h3>nm_ip4_route_get_prefix ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip4_route_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
-<p>Gets the IPv4 prefix (ie "24" or "30" etc) of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-get-prefix"></a><h3>nm_ip4_route_get_prefix ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip4_route_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the IPv4 prefix (ie "24" or "30" etc) of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv4 prefix</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.21.6"></a><h4>Returns</h4>
-<p> the IPv4 prefix</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-set-prefix"></a><h3>nm_ip4_route_set_prefix ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_route_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
-<p>Sets the IPv4 prefix of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-set-prefix"></a><h3>nm_ip4_route_set_prefix ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_route_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
+<p>
+Sets the IPv4 prefix of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>prefix</p></td>
-<td class="parameter_description"><p>the prefix, a number between 1 and 32 inclusive</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the prefix, a number between 1 and 32 inclusive</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-get-next-hop"></a><h3>nm_ip4_route_get_next_hop ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip4_route_get_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
-<p>Gets the IPv4 address of the next hop of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-get-next-hop"></a><h3>nm_ip4_route_get_next_hop ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip4_route_get_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the IPv4 address of the next hop of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv4 address in network byte order</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.23.6"></a><h4>Returns</h4>
-<p> the IPv4 address in network byte order</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-set-next-hop"></a><h3>nm_ip4_route_set_next_hop ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_route_set_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> next_hop</code></em>);</pre>
-<p>Sets the IPv4 address of the next hop of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-set-next-hop"></a><h3>nm_ip4_route_set_next_hop ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_route_set_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> next_hop</code></em>);</pre>
+<p>
+Sets the IPv4 address of the next hop of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>next_hop</p></td>
-<td class="parameter_description"><p>the IPv4 address of the next hop in network byte order</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>next_hop</code></em> :</span></p></td>
+<td>the IPv4 address of the next hop in network byte order</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-get-metric"></a><h3>nm_ip4_route_get_metric ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip4_route_get_metric (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
-<p>Gets the route metric property of this route object; lower values indicate
-"better" or more preferred routes.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-get-metric"></a><h3>nm_ip4_route_get_metric ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip4_route_get_metric (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the route metric property of this route object; lower values indicate
+"better" or more preferred routes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the route metric</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.25.6"></a><h4>Returns</h4>
-<p> the route metric</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip4-route-set-metric"></a><h3>nm_ip4_route_set_metric ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip4_route_set_metric (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> metric</code></em>);</pre>
-<p>Sets the route metric property of this route object; lower values indicate
-"better" or more preferred routes.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip4-route-set-metric"></a><h3>nm_ip4_route_set_metric ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip4_route_set_metric (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> metric</code></em>);</pre>
+<p>
+Sets the route metric property of this route object; lower values indicate
+"better" or more preferred routes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>metric</p></td>
-<td class="parameter_description"><p>the route metric</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>metric</code></em> :</span></p></td>
+<td>the route metric</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-new"></a><h3>nm_setting_ip4_config_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_ip4_config_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.27.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NMSettingIP4Config-struct"></a><h3>NMSettingIP4Config</h3>
+<pre class="programlisting">typedef struct _NMSettingIP4Config NMSettingIP4Config;</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-method"></a><h3>nm_setting_ip4_config_get_method ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_ip4_config_get_method (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.28.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.28.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--method" title="The “method†property"><span class="type">“methodâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<a name="NMSettingIP4ConfigClass"></a><h3>NMSettingIP4ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingIP4ConfigClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-num-dns"></a><h3>nm_setting_ip4_config_get_num_dns ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip4_config_get_num_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.29.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-new"></a><h3>nm_setting_ip4_config_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_ip4_config_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.29.5"></a><h4>Returns</h4>
-<p> the number of configured DNS servers</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-dns"></a><h3>nm_setting_ip4_config_get_dns ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip4_config_get_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.30.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-method"></a><h3>nm_setting_ip4_config_get_method ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip4_config_get_method (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS server to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--method" title='The "method" property'><span class="type">"method"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.30.5"></a><h4>Returns</h4>
-<p> the IPv4 address (network byte order) of the DNS server at index
-<em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-add-dns"></a><h3>nm_setting_ip4_config_add_dns ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_add_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dns</code></em>);</pre>
-<p>Adds a new DNS server to the setting.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.31.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-num-dns"></a><h3>nm_setting_ip4_config_get_num_dns ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip4_config_get_num_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>dns</p></td>
-<td class="parameter_description"><p>the IPv4 address (network byte order) of the DNS server to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured DNS servers</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.31.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS server was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the server was already
-known</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-remove-dns"></a><h3>nm_setting_ip4_config_remove_dns ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_remove_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the DNS server at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.32.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-dns"></a><h3>nm_setting_ip4_config_get_dns ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip4_config_get_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS server to return</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS server to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv4 address (network byte order) of the DNS server at index
+<em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ip4-config-clear-dns"></a><h3>nm_setting_ip4_config_clear_dns ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_clear_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured DNS servers.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.33.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ip4-config-get-num-dns-searches"></a><h3>nm_setting_ip4_config_get_num_dns_searches ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip4_config_get_num_dns_searches
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.34.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.34.5"></a><h4>Returns</h4>
-<p> the number of configured DNS search domains</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-dns-search"></a><h3>nm_setting_ip4_config_get_dns_search ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_ip4_config_get_dns_search (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.35.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-add-dns"></a><h3>nm_setting_ip4_config_add_dns ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_add_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dns</code></em>);</pre>
+<p>
+Adds a new DNS server to the setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns</code></em> :</span></p></td>
+<td>the IPv4 address (network byte order) of the DNS server to add</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS search domain to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS server was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the server was already
+known</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.35.5"></a><h4>Returns</h4>
-<p> the DNS search domain at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-add-dns-search"></a><h3>nm_setting_ip4_config_add_dns_search ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_add_dns_search (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);</pre>
-<p>Adds a new DNS search domain to the setting.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.36.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-dns"></a><h3>nm_setting_ip4_config_remove_dns ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_remove_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the DNS server at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>dns_search</p></td>
-<td class="parameter_description"><p>the search domain to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS server to remove</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.36.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS search domain was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the search
-domain was already known</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-remove-dns-search"></a><h3>nm_setting_ip4_config_remove_dns_search ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_remove_dns_search
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the DNS search domain at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.37.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-dns-by-value"></a><h3>nm_setting_ip4_config_remove_dns_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_remove_dns_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dns</code></em>);</pre>
+<p>
+Removes the DNS server <em class="parameter"><code>dns</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns</code></em> :</span></p></td>
+<td>the DNS server to remove</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS search domain</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS server was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.
+domain was already known</td>
</tr>
</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-clear-dns-searches"></a><h3>nm_setting_ip4_config_clear_dns_searches ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_clear_dns_searches
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured DNS search domains.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.38.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-clear-dns"></a><h3>nm_setting_ip4_config_clear_dns ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_clear_dns (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured DNS servers.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-num-addresses"></a><h3>nm_setting_ip4_config_get_num_addresses ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip4_config_get_num_addresses
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.39.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-num-dns-searches"></a><h3>nm_setting_ip4_config_get_num_dns_searches ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip4_config_get_num_dns_searches
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured DNS search domains</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.39.5"></a><h4>Returns</h4>
-<p> the number of configured addresses</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-address"></a><h3>nm_setting_ip4_config_get_address ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> *
-nm_setting_ip4_config_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.40.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-dns-search"></a><h3>nm_setting_ip4_config_get_dns_search ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip4_config_get_dns_search
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the address to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS search domain to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the DNS search domain at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.40.5"></a><h4>Returns</h4>
-<p> the address at index <em class="parameter"><code>i</code></em>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip4-config-add-dns-search"></a><h3>nm_setting_ip4_config_add_dns_search ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_add_dns_search
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);</pre>
+<p>
+Adds a new DNS search domain to the setting.
</p>
-<p></p>
-</div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns_search</code></em> :</span></p></td>
+<td>the search domain to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS search domain was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the search
+domain was already known</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-add-address"></a><h3>nm_setting_ip4_config_add_address ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_add_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
-<p>Adds a new IPv4 address and associated information to the setting. The
-given address is duplicated internally and is not changed by this function.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.41.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-dns-search"></a><h3>nm_setting_ip4_config_remove_dns_search ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_remove_dns_search
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the DNS search domain at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the new address to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS search domain</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.41.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the address was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the address was already
-known.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-remove-address"></a><h3>nm_setting_ip4_config_remove_address ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_remove_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the address at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.42.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-dns-search-by-value"></a><h3>nm_setting_ip4_config_remove_dns_search_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_remove_dns_search_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);</pre>
+<p>
+Removes the DNS search domain <em class="parameter"><code>dns_search</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns_search</code></em> :</span></p></td>
+<td>the search domain to remove</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the address to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS search domain was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.
+Since 0.9.10</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-clear-addresses"></a><h3>nm_setting_ip4_config_clear_addresses ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_clear_addresses (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured addresses.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.43.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-clear-dns-searches"></a><h3>nm_setting_ip4_config_clear_dns_searches ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_clear_dns_searches
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured DNS search domains.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-num-routes"></a><h3>nm_setting_ip4_config_get_num_routes ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip4_config_get_num_routes (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.44.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-num-addresses"></a><h3>nm_setting_ip4_config_get_num_addresses ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip4_config_get_num_addresses
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured addresses</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.44.5"></a><h4>Returns</h4>
-<p> the number of configured routes</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-route"></a><h3>nm_setting_ip4_config_get_route ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> *
-nm_setting_ip4_config_get_route (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.21.11.45.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-address"></a><h3>nm_setting_ip4_config_get_address ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="returnvalue">NMIP4Address</span></a> * nm_setting_ip4_config_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the route to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the address to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the address at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.45.5"></a><h4>Returns</h4>
-<p> the route at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-add-route"></a><h3>nm_setting_ip4_config_add_route ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_add_route (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
-<p>Adds a new IPv4 route and associated information to the setting. The
-given route is duplicated internally and is not changed by this function.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.46.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-add-address"></a><h3>nm_setting_ip4_config_add_address ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_add_address (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
+<p>
+Adds a new IPv4 address and associated information to the setting. The
+given address is duplicated internally and is not changed by this function.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the new address to add</td>
</tr>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the route to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the address was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the address was already
+known.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.46.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the route was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the route was already known.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-remove-route"></a><h3>nm_setting_ip4_config_remove_route ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_remove_route (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the route at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.47.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-address"></a><h3>nm_setting_ip4_config_remove_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_remove_address
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the address at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the route</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the address to remove</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-clear-routes"></a><h3>nm_setting_ip4_config_clear_routes ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip4_config_clear_routes (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured routes.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.48.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-address-by-value"></a><h3>nm_setting_ip4_config_remove_address_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_remove_address_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> *address</code></em>);</pre>
+<p>
+Removes the address <em class="parameter"><code>address</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the IP address to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the address was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-ignore-auto-routes"></a><h3>nm_setting_ip4_config_get_ignore_auto_routes ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_get_ignore_auto_routes
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes" title="The “ignore-auto-routes†property"><span class="type">“ignore-auto-routesâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.49.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-clear-addresses"></a><h3>nm_setting_ip4_config_clear_addresses ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_clear_addresses
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured addresses.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.49.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP) routes should be
-ignored.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-ignore-auto-dns"></a><h3>nm_setting_ip4_config_get_ignore_auto_dns ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_get_ignore_auto_dns
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns" title="The “ignore-auto-dns†property"><span class="type">“ignore-auto-dnsâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.50.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-num-routes"></a><h3>nm_setting_ip4_config_get_num_routes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip4_config_get_num_routes
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured routes</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.50.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP) DNS information
-should be ignored.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-dhcp-client-id"></a><h3>nm_setting_ip4_config_get_dhcp_client_id ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_ip4_config_get_dhcp_client_id
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id" title="The “dhcp-client-id†property"><span class="type">“dhcp-client-idâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.51.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-get-route"></a><h3>nm_setting_ip4_config_get_route ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="returnvalue">NMIP4Route</span></a> * nm_setting_ip4_config_get_route (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the route to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the route at index <em class="parameter"><code>i</code></em>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.51.6"></a><h4>Returns</h4>
-<p> the configured Client ID to send to the DHCP server when requesting
-addresses via DHCP.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-dhcp-send-hostname"></a><h3>nm_setting_ip4_config_get_dhcp_send_hostname ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_get_dhcp_send_hostname
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname" title="The “dhcp-send-hostname†property"><span class="type">“dhcp-send-hostnameâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.52.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-add-route"></a><h3>nm_setting_ip4_config_add_route ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_add_route (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Adds a new IPv4 route and associated information to the setting. The
+given route is duplicated internally and is not changed by this function.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the route to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the route was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the route was already known.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.52.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if NetworkManager should send the machine hostname to the
-DHCP server when requesting addresses to allow the server to automatically
-update DNS information for this machine.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-dhcp-hostname"></a><h3>nm_setting_ip4_config_get_dhcp_hostname ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_ip4_config_get_dhcp_hostname
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname" title="The “dhcp-hostname†property"><span class="type">“dhcp-hostnameâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.53.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-route"></a><h3>nm_setting_ip4_config_remove_route ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_remove_route (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the route at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the route</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.53.6"></a><h4>Returns</h4>
-<p> the configured hostname to send to the DHCP server</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-never-default"></a><h3>nm_setting_ip4_config_get_never_default ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_get_never_default
- (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--never-default" title="The “never-default†property"><span class="type">“never-defaultâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.54.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-remove-route-by-value"></a><h3>nm_setting_ip4_config_remove_route_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_remove_route_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> *route</code></em>);</pre>
+<p>
+Removes the route <em class="parameter"><code>route</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the route to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the route was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.54.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection should never be the default connection
-for IPv4 addressing</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip4-config-get-may-fail"></a><h3>nm_setting_ip4_config_get_may_fail ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip4_config_get_may_fail (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--may-fail" title="The “may-fail†property"><span class="type">“may-failâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.21.11.55.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip4-config-clear-routes"></a><h3>nm_setting_ip4_config_clear_routes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip4_config_clear_routes (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured routes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.21.11.55.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection doesn't require IPv4 addressing to complete
-for the connection to succeed.</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingIP4Config.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_SETTING_NAME "ipv4"
-</pre>
+<a name="nm-setting-ip4-config-get-ignore-auto-routes"></a><h3>nm_setting_ip4_config_get_ignore_auto_routes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_get_ignore_auto_routes
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes" title='The "ignore-auto-routes" property'><span class="type">"ignore-auto-routes"</span></a>
+property.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP4ConfigError"></a><h3>enum NMSettingIP4ConfigError</h3>
-<div class="refsect3">
-<a name="id-1.2.21.12.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP4-CONFIG-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP4-CONFIG-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP) routes should be
+ignored.</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip4-config-get-ignore-auto-dns"></a><h3>nm_setting_ip4_config_get_ignore_auto_dns ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_get_ignore_auto_dns
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns" title='The "ignore-auto-dns" property'><span class="type">"ignore-auto-dns"</span></a>
+property.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP4-CONFIG-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP4-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS"></a>NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD</p></td>
-<td class="enum_member_description">
-<p>the property's value is
-not valid with the given IP4 method</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP) DNS information
+should be ignored.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-ERROR:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_ERROR nm_setting_ip4_config_error_quark ()
-</pre>
+<a name="nm-setting-ip4-config-get-dhcp-client-id"></a><h3>nm_setting_ip4_config_get_dhcp_client_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip4_config_get_dhcp_client_id
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id" title='The "dhcp-client-id" property'><span class="type">"dhcp-client-id"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the configured Client ID to send to the DHCP server when requesting
+addresses via DHCP.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-METHOD:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD "method"
-</pre>
+<a name="nm-setting-ip4-config-get-dhcp-send-hostname"></a><h3>nm_setting_ip4_config_get_dhcp_send_hostname ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_get_dhcp_send_hostname
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname" title='The "dhcp-send-hostname" property'><span class="type">"dhcp-send-hostname"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if NetworkManager should send the machine hostname to the
+DHCP server when requesting addresses to allow the server to automatically
+update DNS information for this machine.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-DNS:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DNS</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DNS "dns"
-</pre>
+<a name="nm-setting-ip4-config-get-dhcp-hostname"></a><h3>nm_setting_ip4_config_get_dhcp_hostname ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip4_config_get_dhcp_hostname
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname" title='The "dhcp-hostname" property'><span class="type">"dhcp-hostname"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the configured hostname to send to the DHCP server</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DNS_SEARCH</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DNS_SEARCH "dns-search"
-</pre>
+<a name="nm-setting-ip4-config-get-never-default"></a><h3>nm_setting_ip4_config_get_never_default ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_get_never_default
+ (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--never-default" title='The "never-default" property'><span class="type">"never-default"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection should never be the default connection
+for IPv4 addressing</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_ADDRESSES</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_ADDRESSES "addresses"
-</pre>
+<a name="nm-setting-ip4-config-get-may-fail"></a><h3>nm_setting_ip4_config_get_may_fail ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip4_config_get_may_fail (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--may-fail" title='The "may-fail" property'><span class="type">"may-fail"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection doesn't require IPv4 addressing to complete
+for the connection to succeed.</td>
+</tr>
+</tbody>
+</table></div>
</div>
-<hr>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP4Config.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-ROUTES:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_ROUTES</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_ROUTES "routes"
-</pre>
+<a name="NMSettingIP4Config--address-labels"></a><h3>The <code class="literal">"address-labels"</code> property</h3>
+<pre class="programlisting"> "address-labels" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+Internal use only.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
-</pre>
+<a name="NMSettingIP4Config--addresses"></a><h3>The <code class="literal">"addresses"</code> property</h3>
+<pre class="programlisting"> "addresses" <span class="type">GPtrArray_GArray_guint__</span>* : Read / Write</pre>
<p>
+Array of IPv4 address structures. Each IPv4 address structure is
+composed of 3 32-bit values; the first being the IPv4 address (network
+byte order), the second the prefix (1 - 32), and last the IPv4 gateway
+(network byte order). The gateway may be left as 0 if no gateway exists
+for that subnet. For the "auto" method, given IP addresses are appended
+to those returned by automatic configuration. Addresses cannot be used
+with the "shared", "link-local", or "disabled" methods as addressing is
+either automatic or disabled with these methods.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
-</pre>
+<a name="NMSettingIP4Config--dhcp-client-id"></a><h3>The <code class="literal">"dhcp-client-id"</code> property</h3>
+<pre class="programlisting"> "dhcp-client-id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+A string sent to the DHCP server to identify the local machine which the
+DHCP server may use to customize the DHCP lease and options.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID "dhcp-client-id"
-</pre>
+<a name="NMSettingIP4Config--dhcp-hostname"></a><h3>The <code class="literal">"dhcp-hostname"</code> property</h3>
+<pre class="programlisting"> "dhcp-hostname" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+If the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname" title='The "dhcp-send-hostname" property'><span class="type">"dhcp-send-hostname"</span></a> property is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, then the
+specified name will be sent to the DHCP server when acquiring a lease.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME "dhcp-send-hostname"
-</pre>
+<a name="NMSettingIP4Config--dhcp-send-hostname"></a><h3>The <code class="literal">"dhcp-send-hostname"</code> property</h3>
+<pre class="programlisting"> "dhcp-send-hostname" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, a hostname is sent to the DHCP server when acquiring a lease.
+Some DHCP servers use this hostname to update DNS databases, essentially
+providing a static hostname for the computer. If the
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname" title='The "dhcp-hostname" property'><span class="type">"dhcp-hostname"</span></a> property is empty and this property is
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the current persistent hostname of the computer is sent.
</p>
+<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME "dhcp-hostname"
-</pre>
+<a name="NMSettingIP4Config--dns"></a><h3>The <code class="literal">"dns"</code> property</h3>
+<pre class="programlisting"> "dns" <span class="type">GArray_guint_</span>* : Read / Write</pre>
<p>
+List of DNS servers (network byte order). For the "auto" method, these
+DNS servers are appended to those (if any) returned by automatic
+configuration. DNS servers cannot be used with the "shared",
+"link-local", or "disabled" methods as there is no upstream network. In
+all other methods, these DNS servers are used as the only DNS servers for
+this connection.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_NEVER_DEFAULT</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_NEVER_DEFAULT "never-default"
-</pre>
+<a name="NMSettingIP4Config--dns-search"></a><h3>The <code class="literal">"dns-search"</code> property</h3>
+<pre class="programlisting"> "dns-search" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+List of DNS search domains. For the "auto" method, these search domains
+are appended to those returned by automatic configuration. Search domains
+cannot be used with the "shared", "link-local", or "disabled" methods as
+there is no upstream network. In all other methods, these search domains
+are used as the only search domains for this connection.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_MAY_FAIL</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_MAY_FAIL "may-fail"
-</pre>
+<a name="NMSettingIP4Config--ignore-auto-dns"></a><h3>The <code class="literal">"ignore-auto-dns"</code> property</h3>
+<pre class="programlisting"> "ignore-auto-dns" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
<p>
+When the method is set to "auto" and this property to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>,
+automatically configured nameservers and search domains are ignored and
+only nameservers and search domains specified in the
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns" title='The "dns" property'><span class="type">"dns"</span></a> and <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns-search" title='The "dns-search" property'><span class="type">"dns-search"</span></a> properties, if
+any, are used.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_AUTO</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_AUTO "auto"
-</pre>
-<p>IPv4 configuration should be automatically determined via a method appropriate
-for the hardware interface, ie DHCP or PPP or some other device-specific
-manner.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL "link-local"
-</pre>
-<p>IPv4 configuration should be automatically configured for link-local-only
-operation.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_MANUAL</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual"
-</pre>
-<p>All necessary IPv4 configuration (addresses, prefix, DNS, etc) is specified
-in the setting's properties.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_SHARED</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_SHARED "shared"
-</pre>
-<p>This connection specifies configuration that allows other computers to
-connect through it to the default network (usually the Internet). The
-connection's interface will be assigned a private address, and a DHCP server,
-caching DNS server, and Network Address Translation (NAT) functionality will
-be started on this connection's interface to allow other devices to connect
-through that interface to the default network.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_METHOD_DISABLED</h3>
-<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_METHOD_DISABLED "disabled"
-</pre>
-<p>This connection does not use or require IPv4 address and it should be disabled.</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingIP4Config.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingIP4Config--addresses"></a><h3>The <code class="literal">“addressesâ€</code> property</h3>
-<pre class="programlisting"> “addresses†<span class="type">GPtrArray_GArray_guint__</span> *</pre>
-<p>Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet. For the 'auto' method, given IP addresses are appended to those returned by automatic configuration. Addresses cannot be used with the 'shared', 'link-local', or 'disabled' methods as addressing is either automatic or disabled with these methods.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP4Config--dhcp-client-id"></a><h3>The <code class="literal">“dhcp-client-idâ€</code> property</h3>
-<pre class="programlisting"> “dhcp-client-id†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP4Config--dhcp-hostname"></a><h3>The <code class="literal">“dhcp-hostnameâ€</code> property</h3>
-<pre class="programlisting"> “dhcp-hostname†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If the 'dhcp-send-hostname' property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP4Config--dhcp-send-hostname"></a><h3>The <code class="literal">“dhcp-send-hostnameâ€</code> property</h3>
-<pre class="programlisting"> “dhcp-send-hostname†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the 'dhcp-hostname' property is empty and this property is TRUE, the current persistent hostname of the computer is sent.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP4Config--dns"></a><h3>The <code class="literal">“dnsâ€</code> property</h3>
-<pre class="programlisting"> “dns†<span class="type">GArray_guint_</span> *</pre>
-<p>List of DNS servers (network byte order). For the 'auto' method, these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared', 'link-local', or 'disabled' methods as there is no upstream network. In all other methods, these DNS servers are used as the only DNS servers for this connection.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP4Config--dns-search"></a><h3>The <code class="literal">“dns-searchâ€</code> property</h3>
-<pre class="programlisting"> “dns-search†<span class="type">GSList_gchararray_</span> *</pre>
-<p>List of DNS search domains. For the 'auto' method, these search domains are appended to those returned by automatic configuration. Search domains cannot be used with the 'shared', 'link-local', or 'disabled' methods as there is no upstream network. In all other methods, these search domains are used as the only search domains for this connection.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP4Config--ignore-auto-dns"></a><h3>The <code class="literal">“ignore-auto-dnsâ€</code> property</h3>
-<pre class="programlisting"> “ignore-auto-dns†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>When the method is set to 'auto' and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the 'dns' and 'dns-search' properties, if any, are used.</p>
-<p>Flags: Read / Write / Construct</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP4Config--ignore-auto-routes"></a><h3>The <code class="literal">“ignore-auto-routesâ€</code> property</h3>
-<pre class="programlisting"> “ignore-auto-routes†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>When the method is set to 'auto' and this property to TRUE, automatically configured routes are ignored and only routes specified in the 'routes' property, if any, are used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP4Config--ignore-auto-routes"></a><h3>The <code class="literal">"ignore-auto-routes"</code> property</h3>
+<pre class="programlisting"> "ignore-auto-routes" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+When the method is set to "auto" and this property to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>,
+automatically configured routes are ignored and only routes specified in
+the <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--routes" title='The "routes" property'><span class="type">"routes"</span></a> property, if any, are used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP4Config--may-fail"></a><h3>The <code class="literal">“may-failâ€</code> property</h3>
-<pre class="programlisting"> “may-fail†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, allow overall network configuration to proceed even if IPv4 configuration times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP4Config--may-fail"></a><h3>The <code class="literal">"may-fail"</code> property</h3>
+<pre class="programlisting"> "may-fail" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, allow overall network configuration to proceed even if IPv4
+configuration times out. Note that at least one IP configuration must
+succeed or overall network configuration will still fail. For example,
+in IPv6-only networks, setting this property to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> allows the overall
+network configuration to succeed if IPv4 configuration fails but IPv6
+configuration completes successfully.
+</p>
<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP4Config--method"></a><h3>The <code class="literal">“methodâ€</code> property</h3>
-<pre class="programlisting"> “method†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>IPv4 configuration method. If 'auto' is specified then the appropriate automatic method (DHCP, PPP, etc) is used for the interface and most other properties can be left unset. If 'link-local' is specified, then a link-local address in the 169.254/16 range will be assigned to the interface. If 'manual' is specified, static IP addressing is used and at least one IP address must be given in the 'addresses' property. If 'shared' is specified (indicating that this connection will provide network access to other computers) then the interface is assigned an address in the 10.42.x.1/24 range and a DHCP and forwarding DNS server are started, and the interface is NAT-ed to the current default network connection. 'disabled' means IPv4 will not be used on this connection. This property must be set.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP4Config--method"></a><h3>The <code class="literal">"method"</code> property</h3>
+<pre class="programlisting"> "method" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+IPv4 configuration method. If "auto" is specified then the appropriate
+automatic method (DHCP, PPP, etc) is used for the interface and most
+other properties can be left unset. If "link-local" is specified, then a
+link-local address in the 169.254/16 range will be assigned to the
+interface. If "manual" is specified, static IP addressing is used and at
+least one IP address must be given in the "addresses" property. If
+"shared" is specified (indicating that this connection will provide
+network access to other computers) then the interface is assigned an
+address in the 10.42.x.1/24 range and a DHCP and forwarding DNS server
+are started, and the interface is NAT-ed to the current default network
+connection. "disabled" means IPv4 will not be used on this connection.
+This property must be set.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP4Config--never-default"></a><h3>The <code class="literal">“never-defaultâ€</code> property</h3>
-<pre class="programlisting"> “never-default†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, this connection will never be the default IPv4 connection, meaning it will never be assigned the default route by NetworkManager.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP4Config--never-default"></a><h3>The <code class="literal">"never-default"</code> property</h3>
+<pre class="programlisting"> "never-default" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, this connection will never be the default IPv4 connection,
+meaning it will never be assigned the default route by NetworkManager.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP4Config--routes"></a><h3>The <code class="literal">“routesâ€</code> property</h3>
-<pre class="programlisting"> “routes†<span class="type">GPtrArray_GArray_guint__</span> *</pre>
-<p>Array of IPv4 route structures. Each IPv4 route structure is composed of 4 32-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 - 32), the third being the next-hop (network byte order) if any, and the fourth being the route metric. For the 'auto' method, given IP routes are appended to those returned by automatic configuration. Routes cannot be used with the 'shared', 'link-local', or 'disabled', methods as there is no upstream network.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP4Config--routes"></a><h3>The <code class="literal">"routes"</code> property</h3>
+<pre class="programlisting"> "routes" <span class="type">GPtrArray_GArray_guint__</span>* : Read / Write</pre>
+<p>
+Array of IPv4 route structures. Each IPv4 route structure is composed of
+4 32-bit values; the first being the destination IPv4 network or address
+(network byte order), the second the destination network or address
+prefix (1 - 32), the third being the next-hop (network byte order) if
+any, and the fourth being the route metric. For the "auto" method, given
+IP routes are appended to those returned by automatic configuration.
+Routes cannot be used with the "shared", "link-local", or "disabled"
+methods because there is no upstream network.
+</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingIP6Config.html b/docs/libnm-util/html/NMSettingIP6Config.html
index a3d62b10a..71ac6e055 100644
--- a/docs/libnm-util/html/NMSettingIP6Config.html
+++ b/docs/libnm-util/html/NMSettingIP6Config.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingIP6Config</title>
+<title>NMSettingIP6Config</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingIP4Config.html" title="NMSettingIP4Config">
<link rel="next" href="NMSettingPPP.html" title="NMSettingPPP">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingIP6Config.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingIP6Config.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingIP6Config.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingIP4Config.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingPPP.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingIP4Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingPPP.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingIP6Config.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingIP6Config.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingIP6Config.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingIP6Config.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingIP6Config"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,2444 +37,2111 @@
<h2><span class="refentrytitle"><a name="NMSettingIP6Config.top_of_page"></a>NMSettingIP6Config</span></h2>
<p>NMSettingIP6Config — Describes IPv6 addressing, routing, and name service properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingIP6Config.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingIP6ConfigError"></a><a name="NMSettingIP6ConfigPrivacy"></a><a name="NMIP6Address"></a><a name="NMIP6Route"></a><pre class="synopsis">
+#include &lt;nm-setting-ip6-config.h&gt;
+
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS" title="NM_SETTING_IP6_CONFIG_SETTING_NAME">NM_SETTING_IP6_CONFIG_SETTING_NAME</a>
+enum <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigError-enum" title="enum NMSettingIP6ConfigError">NMSettingIP6ConfigError</a>;
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR:CAPS" title="NM_SETTING_IP6_CONFIG_ERROR">NM_SETTING_IP6_CONFIG_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-error-quark" title="nm_setting_ip6_config_error_quark ()">nm_setting_ip6_config_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD">NM_SETTING_IP6_CONFIG_METHOD</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS:CAPS" title="NM_SETTING_IP6_CONFIG_DNS">NM_SETTING_IP6_CONFIG_DNS</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS" title="NM_SETTING_IP6_CONFIG_DNS_SEARCH">NM_SETTING_IP6_CONFIG_DNS_SEARCH</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS" title="NM_SETTING_IP6_CONFIG_ADDRESSES">NM_SETTING_IP6_CONFIG_ADDRESSES</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTES:CAPS" title="NM_SETTING_IP6_CONFIG_ROUTES">NM_SETTING_IP6_CONFIG_ROUTES</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS" title="NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES">NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS" title="NM_SETTING_IP6_CONFIG_NEVER_DEFAULT">NM_SETTING_IP6_CONFIG_NEVER_DEFAULT</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS" title="NM_SETTING_IP6_CONFIG_MAY_FAIL">NM_SETTING_IP6_CONFIG_MAY_FAIL</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS" title="NM_SETTING_IP6_CONFIG_IP6_PRIVACY">NM_SETTING_IP6_CONFIG_IP6_PRIVACY</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS" title="NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME">NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_IGNORE">NM_SETTING_IP6_CONFIG_METHOD_IGNORE</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_AUTO">NM_SETTING_IP6_CONFIG_METHOD_AUTO</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_DHCP">NM_SETTING_IP6_CONFIG_METHOD_DHCP</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL">NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_MANUAL">NM_SETTING_IP6_CONFIG_METHOD_MANUAL</a>
+#define <a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_SHARED">NM_SETTING_IP6_CONFIG_METHOD_SHARED</a>
+enum <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy-enum" title="enum NMSettingIP6ConfigPrivacy">NMSettingIP6ConfigPrivacy</a>;
+typedef <a class="link" href="NMSettingIP6Config.html#NMIP6Address">NMIP6Address</a>;
+<a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-new" title="nm_ip6_address_new ()">nm_ip6_address_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-dup" title="nm_ip6_address_dup ()">nm_ip6_address_dup</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *source</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-ref" title="nm_ip6_address_ref ()">nm_ip6_address_ref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-unref" title="nm_ip6_address_unref ()">nm_ip6_address_unref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-compare" title="nm_ip6_address_compare ()">nm_ip6_address_compare</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *other</code></em>);
+const struct <span class="returnvalue">in6_addr</span> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-address" title="nm_ip6_address_get_address ()">nm_ip6_address_get_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-address" title="nm_ip6_address_set_address ()">nm_ip6_address_set_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *addr</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-prefix" title="nm_ip6_address_get_prefix ()">nm_ip6_address_get_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-prefix" title="nm_ip6_address_set_prefix ()">nm_ip6_address_set_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);
+const struct <span class="returnvalue">in6_addr</span> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-gateway" title="nm_ip6_address_get_gateway ()">nm_ip6_address_get_gateway</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-gateway" title="nm_ip6_address_set_gateway ()">nm_ip6_address_set_gateway</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *gateway</code></em>);
+typedef <a class="link" href="NMSettingIP6Config.html#NMIP6Route">NMIP6Route</a>;
+<a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-new" title="nm_ip6_route_new ()">nm_ip6_route_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-dup" title="nm_ip6_route_dup ()">nm_ip6_route_dup</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *source</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-ref" title="nm_ip6_route_ref ()">nm_ip6_route_ref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-unref" title="nm_ip6_route_unref ()">nm_ip6_route_unref</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-compare" title="nm_ip6_route_compare ()">nm_ip6_route_compare</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *other</code></em>);
+const struct <span class="returnvalue">in6_addr</span> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-dest" title="nm_ip6_route_get_dest ()">nm_ip6_route_get_dest</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-dest" title="nm_ip6_route_set_dest ()">nm_ip6_route_set_dest</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dest</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-prefix" title="nm_ip6_route_get_prefix ()">nm_ip6_route_get_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-prefix" title="nm_ip6_route_set_prefix ()">nm_ip6_route_set_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);
+const struct <span class="returnvalue">in6_addr</span> * <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-next-hop" title="nm_ip6_route_get_next_hop ()">nm_ip6_route_get_next_hop</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-next-hop" title="nm_ip6_route_set_next_hop ()">nm_ip6_route_set_next_hop</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *next_hop</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-metric" title="nm_ip6_route_get_metric ()">nm_ip6_route_get_metric</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-metric" title="nm_ip6_route_set_metric ()">nm_ip6_route_set_metric</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> metric</code></em>);
+ <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config-struct" title="NMSettingIP6Config">NMSettingIP6Config</a>;
+ <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigClass" title="NMSettingIP6ConfigClass">NMSettingIP6ConfigClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-new" title="nm_setting_ip6_config_new ()">nm_setting_ip6_config_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-method" title="nm_setting_ip6_config_get_method ()">nm_setting_ip6_config_get_method</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns" title="nm_setting_ip6_config_get_num_dns ()">nm_setting_ip6_config_get_num_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+const struct <span class="returnvalue">in6_addr</span> * <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns" title="nm_setting_ip6_config_get_dns ()">nm_setting_ip6_config_get_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns" title="nm_setting_ip6_config_add_dns ()">nm_setting_ip6_config_add_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dns</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns" title="nm_setting_ip6_config_remove_dns ()">nm_setting_ip6_config_remove_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-by-value" title="nm_setting_ip6_config_remove_dns_by_value ()">nm_setting_ip6_config_remove_dns_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dns</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns" title="nm_setting_ip6_config_clear_dns ()">nm_setting_ip6_config_clear_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns-searches" title="nm_setting_ip6_config_get_num_dns_searches ()">nm_setting_ip6_config_get_num_dns_searches</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns-search" title="nm_setting_ip6_config_get_dns_search ()">nm_setting_ip6_config_get_dns_search</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns-search" title="nm_setting_ip6_config_add_dns_search ()">nm_setting_ip6_config_add_dns_search</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search" title="nm_setting_ip6_config_remove_dns_search ()">nm_setting_ip6_config_remove_dns_search</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search-by-value" title="nm_setting_ip6_config_remove_dns_search_by_value ()">nm_setting_ip6_config_remove_dns_search_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns-searches" title="nm_setting_ip6_config_clear_dns_searches ()">nm_setting_ip6_config_clear_dns_searches</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-addresses" title="nm_setting_ip6_config_get_num_addresses ()">nm_setting_ip6_config_get_num_addresses</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> * <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-address" title="nm_setting_ip6_config_get_address ()">nm_setting_ip6_config_get_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-address" title="nm_setting_ip6_config_add_address ()">nm_setting_ip6_config_add_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address" title="nm_setting_ip6_config_remove_address ()">nm_setting_ip6_config_remove_address</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address-by-value" title="nm_setting_ip6_config_remove_address_by_value ()">nm_setting_ip6_config_remove_address_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-addresses" title="nm_setting_ip6_config_clear_addresses ()">nm_setting_ip6_config_clear_addresses</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-routes" title="nm_setting_ip6_config_get_num_routes ()">nm_setting_ip6_config_get_num_routes</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> * <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-route" title="nm_setting_ip6_config_get_route ()">nm_setting_ip6_config_get_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-route" title="nm_setting_ip6_config_add_route ()">nm_setting_ip6_config_add_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route" title="nm_setting_ip6_config_remove_route ()">nm_setting_ip6_config_remove_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route-by-value" title="nm_setting_ip6_config_remove_route_by_value ()">nm_setting_ip6_config_remove_route_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-routes" title="nm_setting_ip6_config_clear_routes ()">nm_setting_ip6_config_clear_routes</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-routes" title="nm_setting_ip6_config_get_ignore_auto_routes ()">nm_setting_ip6_config_get_ignore_auto_routes</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns" title="nm_setting_ip6_config_get_ignore_auto_dns ()">nm_setting_ip6_config_get_ignore_auto_dns</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dhcp-hostname" title="nm_setting_ip6_config_get_dhcp_hostname ()">nm_setting_ip6_config_get_dhcp_hostname</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default" title="nm_setting_ip6_config_get_never_default ()">nm_setting_ip6_config_get_never_default</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-may-fail" title="nm_setting_ip6_config_get_may_fail ()">nm_setting_ip6_config_get_may_fail</a> (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy"><span class="returnvalue">NMSettingIP6ConfigPrivacy</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy" title="nm_setting_ip6_config_get_ip6_privacy ()">nm_setting_ip6_config_get_ip6_privacy</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingIP6ConfigError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingIP6ConfigPrivacy
+</pre>
+<pre class="synopsis">
+ GBoxed
+ +----NMIP6Address
+</pre>
+<pre class="synopsis">
+ GBoxed
+ +----NMIP6Route
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingIP6Config
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP6Config.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--addresses" title='The "addresses" property'>addresses</a>" <span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar___*</span> : Read / Write
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname" title='The "dhcp-hostname" property'>dhcp-hostname</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns" title='The "dns" property'>dns</a>" <span class="type">GPtrArray_GArray_guchar__</span>* : Read / Write
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns-search" title='The "dns-search" property'>dns-search</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns" title='The "ignore-auto-dns" property'>ignore-auto-dns</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes" title='The "ignore-auto-routes" property'>ignore-auto-routes</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy" title='The "ip6-privacy" property'>ip6-privacy</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--may-fail" title='The "may-fail" property'>may-fail</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--method" title='The "method" property'>method</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--never-default" title='The "never-default" property'>never-default</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--routes" title='The "routes" property'>routes</a>" <span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar_+guint__*</span> : Read / Write
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSettingIP6Config.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingIP6Config.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+properties related to IPv6 addressing, routing, and Domain Name Service
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP6Config.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_SETTING_NAME "ipv6"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIP6ConfigError-enum"></a><h3>enum NMSettingIP6ConfigError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD /*&lt; nick=NotAllowedForMethod &gt;*/
+} NMSettingIP6ConfigError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-error-quark" title="nm_setting_ip6_config_error_quark ()">nm_setting_ip6_config_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-new" title="nm_ip6_address_new ()">nm_ip6_address_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-dup" title="nm_ip6_address_dup ()">nm_ip6_address_dup</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-ref" title="nm_ip6_address_ref ()">nm_ip6_address_ref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-unref" title="nm_ip6_address_unref ()">nm_ip6_address_unref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-compare" title="nm_ip6_address_compare ()">nm_ip6_address_compare</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const struct <span class="returnvalue">in6_addr</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-address" title="nm_ip6_address_get_address ()">nm_ip6_address_get_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-address" title="nm_ip6_address_set_address ()">nm_ip6_address_set_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-prefix" title="nm_ip6_address_get_prefix ()">nm_ip6_address_get_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-prefix" title="nm_ip6_address_set_prefix ()">nm_ip6_address_set_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const struct <span class="returnvalue">in6_addr</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-gateway" title="nm_ip6_address_get_gateway ()">nm_ip6_address_get_gateway</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-gateway" title="nm_ip6_address_set_gateway ()">nm_ip6_address_set_gateway</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-new" title="nm_ip6_route_new ()">nm_ip6_route_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-dup" title="nm_ip6_route_dup ()">nm_ip6_route_dup</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-ref" title="nm_ip6_route_ref ()">nm_ip6_route_ref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-unref" title="nm_ip6_route_unref ()">nm_ip6_route_unref</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-compare" title="nm_ip6_route_compare ()">nm_ip6_route_compare</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const struct <span class="returnvalue">in6_addr</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-dest" title="nm_ip6_route_get_dest ()">nm_ip6_route_get_dest</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-dest" title="nm_ip6_route_set_dest ()">nm_ip6_route_set_dest</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-prefix" title="nm_ip6_route_get_prefix ()">nm_ip6_route_get_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-prefix" title="nm_ip6_route_set_prefix ()">nm_ip6_route_set_prefix</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const struct <span class="returnvalue">in6_addr</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-next-hop" title="nm_ip6_route_get_next_hop ()">nm_ip6_route_get_next_hop</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-next-hop" title="nm_ip6_route_set_next_hop ()">nm_ip6_route_set_next_hop</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-metric" title="nm_ip6_route_get_metric ()">nm_ip6_route_get_metric</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-metric" title="nm_ip6_route_set_metric ()">nm_ip6_route_set_metric</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-new" title="nm_setting_ip6_config_new ()">nm_setting_ip6_config_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-method" title="nm_setting_ip6_config_get_method ()">nm_setting_ip6_config_get_method</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns" title="nm_setting_ip6_config_get_num_dns ()">nm_setting_ip6_config_get_num_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const struct <span class="returnvalue">in6_addr</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns" title="nm_setting_ip6_config_get_dns ()">nm_setting_ip6_config_get_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns" title="nm_setting_ip6_config_add_dns ()">nm_setting_ip6_config_add_dns</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP6-CONFIG-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns" title="nm_setting_ip6_config_remove_dns ()">nm_setting_ip6_config_remove_dns</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP6-CONFIG-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns" title="nm_setting_ip6_config_clear_dns ()">nm_setting_ip6_config_clear_dns</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP6-CONFIG-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns-searches" title="nm_setting_ip6_config_get_num_dns_searches ()">nm_setting_ip6_config_get_num_dns_searches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns-search" title="nm_setting_ip6_config_get_dns_search ()">nm_setting_ip6_config_get_dns_search</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns-search" title="nm_setting_ip6_config_add_dns_search ()">nm_setting_ip6_config_add_dns_search</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search" title="nm_setting_ip6_config_remove_dns_search ()">nm_setting_ip6_config_remove_dns_search</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns-searches" title="nm_setting_ip6_config_clear_dns_searches ()">nm_setting_ip6_config_clear_dns_searches</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-addresses" title="nm_setting_ip6_config_get_num_addresses ()">nm_setting_ip6_config_get_num_addresses</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-address" title="nm_setting_ip6_config_get_address ()">nm_setting_ip6_config_get_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-address" title="nm_setting_ip6_config_add_address ()">nm_setting_ip6_config_add_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address" title="nm_setting_ip6_config_remove_address ()">nm_setting_ip6_config_remove_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-addresses" title="nm_setting_ip6_config_clear_addresses ()">nm_setting_ip6_config_clear_addresses</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-routes" title="nm_setting_ip6_config_get_num_routes ()">nm_setting_ip6_config_get_num_routes</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-route" title="nm_setting_ip6_config_get_route ()">nm_setting_ip6_config_get_route</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-route" title="nm_setting_ip6_config_add_route ()">nm_setting_ip6_config_add_route</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route" title="nm_setting_ip6_config_remove_route ()">nm_setting_ip6_config_remove_route</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-routes" title="nm_setting_ip6_config_clear_routes ()">nm_setting_ip6_config_clear_routes</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-routes" title="nm_setting_ip6_config_get_ignore_auto_routes ()">nm_setting_ip6_config_get_ignore_auto_routes</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns" title="nm_setting_ip6_config_get_ignore_auto_dns ()">nm_setting_ip6_config_get_ignore_auto_dns</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dhcp-hostname" title="nm_setting_ip6_config_get_dhcp_hostname ()">nm_setting_ip6_config_get_dhcp_hostname</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default" title="nm_setting_ip6_config_get_never_default ()">nm_setting_ip6_config_get_never_default</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-may-fail" title="nm_setting_ip6_config_get_may_fail ()">nm_setting_ip6_config_get_may_fail</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy"><span class="returnvalue">NMSettingIP6ConfigPrivacy</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy" title="nm_setting_ip6_config_get_ip6_privacy ()">nm_setting_ip6_config_get_ip6_privacy</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-IP6-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD</code></span></p></td>
+<td>the property's value is
+not valid with the given IPv6 method
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingIP6Config.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-ERROR:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_ERROR nm_setting_ip6_config_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip6-config-error-quark"></a><h3>nm_setting_ip6_config_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_ip6_config_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar___*</span></td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--addresses" title="The “addresses†property">addresses</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname" title="The “dhcp-hostname†property">dhcp-hostname</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GPtrArray_GArray_guchar__</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns" title="The “dns†property">dns</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns-search" title="The “dns-search†property">dns-search</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns" title="The “ignore-auto-dns†property">ignore-auto-dns</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes" title="The “ignore-auto-routes†property">ignore-auto-routes</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy" title="The “ip6-privacy†property">ip6-privacy</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--may-fail" title="The “may-fail†property">may-fail</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--method" title="The “method†property">method</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--never-default" title="The “never-default†property">never-default</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar_+guint__*</span></td>
-<td class="property_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--routes" title="The “routes†property">routes</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<a name="NMIP6Address"></a><a name="NMIP6Route"></a><div class="refsect1">
-<a name="NMSettingIP6Config.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-METHOD:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD "method"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-DNS:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_DNS</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_DNS "dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_DNS_SEARCH</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_DNS_SEARCH "dns-search"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_ADDRESSES</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_ADDRESSES "addresses"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-ROUTES:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_NEVER_DEFAULT</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_NEVER_DEFAULT "never-default"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_MAY_FAIL</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_MAY_FAIL "may-fail"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_IP6_PRIVACY</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_IP6_PRIVACY "ip6-privacy"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME "dhcp-hostname"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_IGNORE</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_IGNORE "ignore"
+</pre>
+<p>
+IPv6 is not required or is handled by some other mechanism, and NetworkManager
+should not configure IPv6 for this connection.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_AUTO</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_AUTO "auto"
+</pre>
+<p>
+IPv6 configuration should be automatically determined via a method appropriate
+for the hardware interface, ie router advertisements, DHCP, or PPP or some
+other device-specific manner.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_DHCP</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_DHCP "dhcp"
+</pre>
+<p>
+IPv6 configuration should be automatically determined via DHCPv6 only and
+router advertisements should be ignored.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL "link-local"
+</pre>
+<p>
+IPv6 configuration should be automatically configured for link-local-only
+operation.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_MANUAL</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_MANUAL "manual"
+</pre>
+<p>
+All necessary IPv6 configuration (addresses, prefix, DNS, etc) is specified
+in the setting's properties.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_SHARED</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_SHARED "shared"
+</pre>
+<p>
+This connection specifies configuration that allows other computers to
+connect through it to the default network (usually the Internet). The
+connection's interface will be assigned a private address, and router
+advertisements, a caching DNS server, and Network Address Translation (NAT)
+functionality will be started on this connection's interface to allow other
+devices to connect through that interface to the default network. (not yet
+supported for IPv6)
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIP6ConfigPrivacy-enum"></a><h3>enum NMSettingIP6ConfigPrivacy</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN = -1,
+ NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED = 0,
+ NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR = 1,
+ NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR = 2
+} NMSettingIP6ConfigPrivacy;
+</pre>
+<p>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy"><span class="type">NMSettingIP6ConfigPrivacy</span></a> values indicate if and how IPv6 Privacy
+Extensions are used (RFC4941).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS" title="NM_SETTING_IP6_CONFIG_SETTING_NAME">NM_SETTING_IP6_CONFIG_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigError" title="enum NMSettingIP6ConfigError">NMSettingIP6ConfigError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR:CAPS" title="NM_SETTING_IP6_CONFIG_ERROR">NM_SETTING_IP6_CONFIG_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD">NM_SETTING_IP6_CONFIG_METHOD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS:CAPS" title="NM_SETTING_IP6_CONFIG_DNS">NM_SETTING_IP6_CONFIG_DNS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS" title="NM_SETTING_IP6_CONFIG_DNS_SEARCH">NM_SETTING_IP6_CONFIG_DNS_SEARCH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS" title="NM_SETTING_IP6_CONFIG_ADDRESSES">NM_SETTING_IP6_CONFIG_ADDRESSES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTES:CAPS" title="NM_SETTING_IP6_CONFIG_ROUTES">NM_SETTING_IP6_CONFIG_ROUTES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS" title="NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES">NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS" title="NM_SETTING_IP6_CONFIG_NEVER_DEFAULT">NM_SETTING_IP6_CONFIG_NEVER_DEFAULT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS" title="NM_SETTING_IP6_CONFIG_MAY_FAIL">NM_SETTING_IP6_CONFIG_MAY_FAIL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS" title="NM_SETTING_IP6_CONFIG_IP6_PRIVACY">NM_SETTING_IP6_CONFIG_IP6_PRIVACY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS" title="NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME">NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_IGNORE">NM_SETTING_IP6_CONFIG_METHOD_IGNORE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_AUTO">NM_SETTING_IP6_CONFIG_METHOD_AUTO</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_DHCP">NM_SETTING_IP6_CONFIG_METHOD_DHCP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL">NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL</a></td>
+<td><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN</code></span></p></td>
+<td>unknown or no value specified
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_MANUAL">NM_SETTING_IP6_CONFIG_METHOD_MANUAL</a></td>
+<td><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-DISABLED:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED</code></span></p></td>
+<td>IPv6 Privacy Extensions are disabled
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_SHARED">NM_SETTING_IP6_CONFIG_METHOD_SHARED</a></td>
+<td><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-PUBLIC-ADDR:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR</code></span></p></td>
+<td>IPv6 Privacy Extensions
+are enabled, but public addresses are preferred over temporary addresses
+</td>
</tr>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy">NMSettingIP6ConfigPrivacy</a></td>
+<td><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-TEMP-ADDR:CAPS"></a><span class="term"><code class="literal">NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR</code></span></p></td>
+<td>IPv6 Privacy Extensions
+are enabled and temporary addresses are preferred over public addresses
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingIP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GBoxed
- <span class="lineart">├──</span> NMIP6Address
- <span class="lineart">╰──</span> NMIP6Route
- GEnum
- <span class="lineart">├──</span> NMSettingIP6ConfigError
- <span class="lineart">╰──</span> NMSettingIP6ConfigPrivacy
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingIP6Config
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingIP6Config.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-ip6-config.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingIP6Config.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-properties related to IPv6 addressing, routing, and Domain Name Service</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingIP6Config.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-ip6-config-error-quark"></a><h3>nm_setting_ip6_config_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_ip6_config_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> errors.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-new"></a><h3>nm_ip6_address_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> *
-nm_ip6_address_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates and returns a new <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NMIP6Address"></a><h3>NMIP6Address</h3>
+<pre class="programlisting">typedef struct NMIP6Address NMIP6Address;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-dup"></a><h3>nm_ip6_address_dup ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> *
-nm_ip6_address_dup (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *source</code></em>);</pre>
-<p>Copies a given <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object and returns the copy.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-new"></a><h3>nm_ip6_address_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> * nm_ip6_address_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates and returns a new <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>source</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object to copy</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.4.6"></a><h4>Returns</h4>
-<p> the copy of the given <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> copy. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip6-address-dup"></a><h3>nm_ip6_address_dup ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> * nm_ip6_address_dup (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *source</code></em>);</pre>
+<p>
+Copies a given <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object and returns the copy.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>source</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> object to copy</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the copy of the given <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> copy. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-ref"></a><h3>nm_ip6_address_ref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_address_ref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
-<p>Increases the reference count of the object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-ref"></a><h3>nm_ip6_address_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_address_ref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
+<p>
+Increases the reference count of the object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-unref"></a><h3>nm_ip6_address_unref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_address_unref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
-<p>Decreases the reference count of the object. If the reference count
-reaches zero, the object will be destroyed.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-unref"></a><h3>nm_ip6_address_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_address_unref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
+<p>
+Decreases the reference count of the object. If the reference count
+reaches zero, the object will be destroyed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-compare"></a><h3>nm_ip6_address_compare ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_ip6_address_compare (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *other</code></em>);</pre>
-<p>Determines if two <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects contain the same values.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-compare"></a><h3>nm_ip6_address_compare ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_ip6_address_compare (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *other</code></em>);</pre>
+<p>
+Determines if two <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects contain the same values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>other</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> to compare <em class="parameter"><code>address</code></em>
-to.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>other</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> to compare <em class="parameter"><code>address</code></em> to.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.7.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-get-address"></a><h3>nm_ip6_address_get_address ()</h3>
-<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> *
-nm_ip6_address_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
-<p>Gets the IPv6 address property of this address object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-get-address"></a><h3>nm_ip6_address_get_address ()</h3>
+<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> * nm_ip6_address_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
+<p>
+Gets the IPv6 address property of this address object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 address. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.8.6"></a><h4>Returns</h4>
-<p> the IPv6 address. </p>
-<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-set-address"></a><h3>nm_ip6_address_set_address ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_address_set_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
- <em class="parameter"><code>const <span class="type">struct in6_addr</span> *addr</code></em>);</pre>
-<p>Sets the IPv6 address property of this object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-set-address"></a><h3>nm_ip6_address_set_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_address_set_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *addr</code></em>);</pre>
+<p>
+Sets the IPv6 address property of this object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>addr</p></td>
-<td class="parameter_description"><p>the IPv6 address</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>the IPv6 address</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-get-prefix"></a><h3>nm_ip6_address_get_prefix ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip6_address_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
-<p>Gets the IPv6 address prefix property of this address object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-get-prefix"></a><h3>nm_ip6_address_get_prefix ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip6_address_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
+<p>
+Gets the IPv6 address prefix property of this address object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 address prefix</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.10.6"></a><h4>Returns</h4>
-<p> the IPv6 address prefix</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-set-prefix"></a><h3>nm_ip6_address_set_prefix ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_address_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
-<p>Sets the IPv6 address prefix.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-set-prefix"></a><h3>nm_ip6_address_set_prefix ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_address_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
+<p>
+Sets the IPv6 address prefix.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>prefix</p></td>
-<td class="parameter_description"><p>the address prefix, a number between 0 and 128 inclusive</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the address prefix, a number between 0 and 128 inclusive</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-get-gateway"></a><h3>nm_ip6_address_get_gateway ()</h3>
-<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> *
-nm_ip6_address_get_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
-<p>Gets the IPv6 default gateway property of this address object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-get-gateway"></a><h3>nm_ip6_address_get_gateway ()</h3>
+<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> * nm_ip6_address_get_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
+<p>
+Gets the IPv6 default gateway property of this address object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 gateway address. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.12.6"></a><h4>Returns</h4>
-<p> the IPv6 gateway address. </p>
-<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-address-set-gateway"></a><h3>nm_ip6_address_set_gateway ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_address_set_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
- <em class="parameter"><code>const <span class="type">struct in6_addr</span> *gateway</code></em>);</pre>
-<p>Sets the IPv6 default gateway property of this address object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-address-set-gateway"></a><h3>nm_ip6_address_set_gateway ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_address_set_gateway (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *gateway</code></em>);</pre>
+<p>
+Sets the IPv6 default gateway property of this address object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>gateway</p></td>
-<td class="parameter_description"><p>the IPv6 default gateway</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>gateway</code></em> :</span></p></td>
+<td>the IPv6 default gateway</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-new"></a><h3>nm_ip6_route_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> *
-nm_ip6_route_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates and returns a new <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.14.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NMIP6Route"></a><h3>NMIP6Route</h3>
+<pre class="programlisting">typedef struct NMIP6Route NMIP6Route;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-dup"></a><h3>nm_ip6_route_dup ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> *
-nm_ip6_route_dup (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *source</code></em>);</pre>
-<p>Copies a given <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object and returns the copy.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-new"></a><h3>nm_ip6_route_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> * nm_ip6_route_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates and returns a new <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>source</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object to copy</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.15.6"></a><h4>Returns</h4>
-<p> the copy of the given <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> copy. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip6-route-dup"></a><h3>nm_ip6_route_dup ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> * nm_ip6_route_dup (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *source</code></em>);</pre>
+<p>
+Copies a given <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object and returns the copy.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>source</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> object to copy</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the copy of the given <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> copy. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-ref"></a><h3>nm_ip6_route_ref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_route_ref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
-<p>Increases the reference count of the object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-ref"></a><h3>nm_ip6_route_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_route_ref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
+<p>
+Increases the reference count of the object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-unref"></a><h3>nm_ip6_route_unref ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_route_unref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
-<p>Decreases the reference count of the object. If the reference count
-reaches zero, the object will be destroyed.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-unref"></a><h3>nm_ip6_route_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_route_unref (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
+<p>
+Decreases the reference count of the object. If the reference count
+reaches zero, the object will be destroyed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-compare"></a><h3>nm_ip6_route_compare ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_ip6_route_compare (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *other</code></em>);</pre>
-<p>Determines if two <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects contain the same values.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-compare"></a><h3>nm_ip6_route_compare ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_ip6_route_compare (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *other</code></em>);</pre>
+<p>
+Determines if two <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects contain the same values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>other</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> to compare <em class="parameter"><code>route</code></em>
-to.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>other</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> to compare <em class="parameter"><code>route</code></em> to.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.18.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the objects contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do not.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-get-dest"></a><h3>nm_ip6_route_get_dest ()</h3>
-<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> *
-nm_ip6_route_get_dest (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
-<p>Gets the IPv6 destination address property of this route object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-get-dest"></a><h3>nm_ip6_route_get_dest ()</h3>
+<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> * nm_ip6_route_get_dest (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the IPv6 destination address property of this route object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 address of destination. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.19.6"></a><h4>Returns</h4>
-<p> the IPv6 address of destination. </p>
-<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-set-dest"></a><h3>nm_ip6_route_set_dest ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_route_set_dest (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
- <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dest</code></em>);</pre>
-<p>Sets the IPv6 destination address property of this route object.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-set-dest"></a><h3>nm_ip6_route_set_dest ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_route_set_dest (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dest</code></em>);</pre>
+<p>
+Sets the IPv6 destination address property of this route object.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>dest</p></td>
-<td class="parameter_description"><p>the destination address</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>the destination address</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-get-prefix"></a><h3>nm_ip6_route_get_prefix ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip6_route_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
-<p>Gets the IPv6 prefix (ie "32" or "64" etc) of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-get-prefix"></a><h3>nm_ip6_route_get_prefix ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip6_route_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the IPv6 prefix (ie "32" or "64" etc) of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 prefix</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.21.6"></a><h4>Returns</h4>
-<p> the IPv6 prefix</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-set-prefix"></a><h3>nm_ip6_route_set_prefix ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_route_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
-<p>Sets the IPv6 prefix of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-set-prefix"></a><h3>nm_ip6_route_set_prefix ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_route_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
+<p>
+Sets the IPv6 prefix of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>prefix</p></td>
-<td class="parameter_description"><p>the prefix, a number between 1 and 128 inclusive</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the prefix, a number between 1 and 128 inclusive</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-get-next-hop"></a><h3>nm_ip6_route_get_next_hop ()</h3>
-<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> *
-nm_ip6_route_get_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
-<p>Gets the IPv6 address of the next hop of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-get-next-hop"></a><h3>nm_ip6_route_get_next_hop ()</h3>
+<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> * nm_ip6_route_get_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the IPv6 address of the next hop of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 address of next hop. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.23.6"></a><h4>Returns</h4>
-<p> the IPv6 address of next hop. </p>
-<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=16][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-set-next-hop"></a><h3>nm_ip6_route_set_next_hop ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_route_set_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
- <em class="parameter"><code>const <span class="type">struct in6_addr</span> *next_hop</code></em>);</pre>
-<p>Sets the IPv6 address of the next hop of this route.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-set-next-hop"></a><h3>nm_ip6_route_set_next_hop ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_route_set_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *next_hop</code></em>);</pre>
+<p>
+Sets the IPv6 address of the next hop of this route.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>next_hop</p></td>
-<td class="parameter_description"><p>the IPv6 address of the next hop</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>next_hop</code></em> :</span></p></td>
+<td>the IPv6 address of the next hop</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-get-metric"></a><h3>nm_ip6_route_get_metric ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_ip6_route_get_metric (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
-<p>Gets the route metric property of this route object; lower values indicate
-"better" or more preferred routes.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-get-metric"></a><h3>nm_ip6_route_get_metric ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_ip6_route_get_metric (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
+<p>
+Gets the route metric property of this route object; lower values indicate
+"better" or more preferred routes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the route metric</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.25.6"></a><h4>Returns</h4>
-<p> the route metric</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-ip6-route-set-metric"></a><h3>nm_ip6_route_set_metric ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_ip6_route_set_metric (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> metric</code></em>);</pre>
-<p>Sets the route metric property of this route object; lower values indicate
-"better" or more preferred routes.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-ip6-route-set-metric"></a><h3>nm_ip6_route_set_metric ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip6_route_set_metric (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> metric</code></em>);</pre>
+<p>
+Sets the route metric property of this route object; lower values indicate
+"better" or more preferred routes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>metric</p></td>
-<td class="parameter_description"><p>the route metric</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>metric</code></em> :</span></p></td>
+<td>the route metric</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-new"></a><h3>nm_setting_ip6_config_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_ip6_config_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.27.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NMSettingIP6Config-struct"></a><h3>NMSettingIP6Config</h3>
+<pre class="programlisting">typedef struct _NMSettingIP6Config NMSettingIP6Config;</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-method"></a><h3>nm_setting_ip6_config_get_method ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_ip6_config_get_method (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.28.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.28.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--method" title="The “method†property"><span class="type">“methodâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<a name="NMSettingIP6ConfigClass"></a><h3>NMSettingIP6ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingIP6ConfigClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-num-dns"></a><h3>nm_setting_ip6_config_get_num_dns ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip6_config_get_num_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.29.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-new"></a><h3>nm_setting_ip6_config_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_ip6_config_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.29.5"></a><h4>Returns</h4>
-<p> the number of configured DNS servers</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-dns"></a><h3>nm_setting_ip6_config_get_dns ()</h3>
-<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> *
-nm_setting_ip6_config_get_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.30.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-method"></a><h3>nm_setting_ip6_config_get_method ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip6_config_get_method (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS server to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--method" title='The "method" property'><span class="type">"method"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.30.5"></a><h4>Returns</h4>
-<p> the IPv6 address of the DNS server at index <em class="parameter"><code>i</code></em>
-. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-add-dns"></a><h3>nm_setting_ip6_config_add_dns ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_add_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dns</code></em>);</pre>
-<p>Adds a new DNS server to the setting.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.31.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-num-dns"></a><h3>nm_setting_ip6_config_get_num_dns ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip6_config_get_num_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>dns</p></td>
-<td class="parameter_description"><p>the IPv6 address of the DNS server to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured DNS servers</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.31.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS server was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the server was already
-known</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-remove-dns"></a><h3>nm_setting_ip6_config_remove_dns ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_remove_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the DNS server at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.32.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-dns"></a><h3>nm_setting_ip6_config_get_dns ()</h3>
+<pre class="programlisting">const struct <span class="returnvalue">in6_addr</span> * nm_setting_ip6_config_get_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS server to return</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS server to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPv6 address of the DNS server at index <em class="parameter"><code>i</code></em>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-clear-dns"></a><h3>nm_setting_ip6_config_clear_dns ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_clear_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured DNS servers.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.33.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ip6-config-get-num-dns-searches"></a><h3>nm_setting_ip6_config_get_num_dns_searches ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip6_config_get_num_dns_searches
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.34.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.34.5"></a><h4>Returns</h4>
-<p> the number of configured DNS search domains</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ip6-config-get-dns-search"></a><h3>nm_setting_ip6_config_get_dns_search ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_ip6_config_get_dns_search (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.35.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-add-dns"></a><h3>nm_setting_ip6_config_add_dns ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_add_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dns</code></em>);</pre>
+<p>
+Adds a new DNS server to the setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns</code></em> :</span></p></td>
+<td>the IPv6 address of the DNS server to add</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS search domain to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS server was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the server was already
+known</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.35.5"></a><h4>Returns</h4>
-<p> the DNS search domain at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-add-dns-search"></a><h3>nm_setting_ip6_config_add_dns_search ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_add_dns_search (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);</pre>
-<p>Adds a new DNS search domain to the setting.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.36.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-remove-dns"></a><h3>nm_setting_ip6_config_remove_dns ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_remove_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the DNS server at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>dns_search</p></td>
-<td class="parameter_description"><p>the search domain to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS server to remove</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.36.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS search domain was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the search
-domain was already known</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-remove-dns-search"></a><h3>nm_setting_ip6_config_remove_dns_search ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_remove_dns_search
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the DNS search domain at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.37.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-remove-dns-by-value"></a><h3>nm_setting_ip6_config_remove_dns_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_remove_dns_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">struct in6_addr</span> *dns</code></em>);</pre>
+<p>
+Removes the DNS server at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns</code></em> :</span></p></td>
+<td>the IPv6 address of the DNS server to remove</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the DNS search domain</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS server was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
</tr>
</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-clear-dns-searches"></a><h3>nm_setting_ip6_config_clear_dns_searches ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_clear_dns_searches
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured DNS search domains.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.38.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-clear-dns"></a><h3>nm_setting_ip6_config_clear_dns ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_clear_dns (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured DNS servers.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-num-addresses"></a><h3>nm_setting_ip6_config_get_num_addresses ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip6_config_get_num_addresses
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.39.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-num-dns-searches"></a><h3>nm_setting_ip6_config_get_num_dns_searches ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip6_config_get_num_dns_searches
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured DNS search domains</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.39.5"></a><h4>Returns</h4>
-<p> the number of configured addresses</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-address"></a><h3>nm_setting_ip6_config_get_address ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> *
-nm_setting_ip6_config_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.40.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-dns-search"></a><h3>nm_setting_ip6_config_get_dns_search ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip6_config_get_dns_search
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS search domain to return</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the address to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the DNS search domain at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.40.5"></a><h4>Returns</h4>
-<p> the address at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-add-address"></a><h3>nm_setting_ip6_config_add_address ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_add_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
-<p>Adds a new IPv6 address and associated information to the setting. The
-given address is duplicated internally and is not changed by this function.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.41.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-add-dns-search"></a><h3>nm_setting_ip6_config_add_dns_search ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_add_dns_search
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);</pre>
+<p>
+Adds a new DNS search domain to the setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>address</p></td>
-<td class="parameter_description"><p>the new address to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>dns_search</code></em> :</span></p></td>
+<td>the search domain to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS search domain was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the search
+domain was already known</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.41.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the address was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the address was already
-known.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-remove-address"></a><h3>nm_setting_ip6_config_remove_address ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_remove_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the address at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.42.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-remove-dns-search"></a><h3>nm_setting_ip6_config_remove_dns_search ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_remove_dns_search
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the DNS search domain at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the address to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the DNS search domain</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-clear-addresses"></a><h3>nm_setting_ip6_config_clear_addresses ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_clear_addresses (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured addresses.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.43.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-remove-dns-search-by-value"></a><h3>nm_setting_ip6_config_remove_dns_search_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_remove_dns_search_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns_search</code></em>);</pre>
+<p>
+Removes the DNS search domain <em class="parameter"><code>dns_search</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns_search</code></em> :</span></p></td>
+<td>the search domain to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the DNS search domain was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.
+Since 0.9.10</td>
+</tr>
+</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-num-routes"></a><h3>nm_setting_ip6_config_get_num_routes ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ip6_config_get_num_routes (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.44.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-clear-dns-searches"></a><h3>nm_setting_ip6_config_clear_dns_searches ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_clear_dns_searches
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured DNS search domains.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.44.5"></a><h4>Returns</h4>
-<p> the number of configured routes</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-route"></a><h3>nm_setting_ip6_config_get_route ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> *
-nm_setting_ip6_config_get_route (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.22.11.45.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-num-addresses"></a><h3>nm_setting_ip6_config_get_num_addresses ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip6_config_get_num_addresses
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the route to return</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured addresses</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.45.5"></a><h4>Returns</h4>
-<p> the route at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-add-route"></a><h3>nm_setting_ip6_config_add_route ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_add_route (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
-<p>Adds a new IPv6 route and associated information to the setting. The
-given route is duplicated internally and is not changed by this function.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.46.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-address"></a><h3>nm_setting_ip6_config_get_address ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="returnvalue">NMIP6Address</span></a> * nm_setting_ip6_config_get_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>route</p></td>
-<td class="parameter_description"><p>the route to add</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the address to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the address at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.46.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the route was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the route was already known.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-remove-route"></a><h3>nm_setting_ip6_config_remove_route ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_remove_route (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes the route at index <em class="parameter"><code>i</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.47.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-add-address"></a><h3>nm_setting_ip6_config_add_address ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_add_address (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
+<p>
+Adds a new IPv6 address and associated information to the setting. The
+given address is duplicated internally and is not changed by this function.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the new address to add</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index number of the route</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the address was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the address was already
+known.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-clear-routes"></a><h3>nm_setting_ip6_config_clear_routes ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_ip6_config_clear_routes (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Removes all configured routes.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.48.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-remove-address"></a><h3>nm_setting_ip6_config_remove_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_remove_address
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the address at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the address to remove</td>
+</tr>
+</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-ignore-auto-routes"></a><h3>nm_setting_ip6_config_get_ignore_auto_routes ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_get_ignore_auto_routes
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes" title="The “ignore-auto-routes†property"><span class="type">“ignore-auto-routesâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.49.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-remove-address-by-value"></a><h3>nm_setting_ip6_config_remove_address_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_remove_address_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> *address</code></em>);</pre>
+<p>
+Removes the address <em class="parameter"><code>address</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the address to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the address was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.49.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP) routes should be
-ignored.</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-ignore-auto-dns"></a><h3>nm_setting_ip6_config_get_ignore_auto_dns ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_get_ignore_auto_dns
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns" title="The “ignore-auto-dns†property"><span class="type">“ignore-auto-dnsâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.50.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-clear-addresses"></a><h3>nm_setting_ip6_config_clear_addresses ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_clear_addresses
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured addresses.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.50.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP or router
-advertisements) DNS information should be ignored.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-dhcp-hostname"></a><h3>nm_setting_ip6_config_get_dhcp_hostname ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_ip6_config_get_dhcp_hostname
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname" title="The “dhcp-hostname†property"><span class="type">“dhcp-hostnameâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.51.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-num-routes"></a><h3>nm_setting_ip6_config_get_num_routes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ip6_config_get_num_routes
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of configured routes</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.51.6"></a><h4>Returns</h4>
-<p> the configured hostname to send to the DHCP server</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-never-default"></a><h3>nm_setting_ip6_config_get_never_default ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_get_never_default
- (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--never-default" title="The “never-default†property"><span class="type">“never-defaultâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.52.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-get-route"></a><h3>nm_setting_ip6_config_get_route ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="returnvalue">NMIP6Route</span></a> * nm_setting_ip6_config_get_route (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the route to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the route at index <em class="parameter"><code>i</code></em>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.52.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection should never be the default connection
-for IPv6 addressing</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-may-fail"></a><h3>nm_setting_ip6_config_get_may_fail ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ip6_config_get_may_fail (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--may-fail" title="The “may-fail†property"><span class="type">“may-failâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.53.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-add-route"></a><h3>nm_setting_ip6_config_add_route ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_add_route (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
+<p>
+Adds a new IPv6 route and associated information to the setting. The
+given route is duplicated internally and is not changed by this function.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the route to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the route was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the route was already known.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.53.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection doesn't require IPv6 addressing to complete
-for the connection to succeed.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-ip6-config-get-ip6-privacy"></a><h3>nm_setting_ip6_config_get_ip6_privacy ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy"><span class="returnvalue">NMSettingIP6ConfigPrivacy</span></a>
-nm_setting_ip6_config_get_ip6_privacy (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
-<p>Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy" title="The “ip6-privacy†property"><span class="type">“ip6-privacyâ€</span></a>
-property.</p>
-<div class="refsect3">
-<a name="id-1.2.22.11.54.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-ip6-config-remove-route"></a><h3>nm_setting_ip6_config_remove_route ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_remove_route (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes the route at index <em class="parameter"><code>i</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index number of the route</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.22.11.54.6"></a><h4>Returns</h4>
-<p> IPv6 Privacy Extensions configuration value (<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy"><span class="type">NMSettingIP6ConfigPrivacy</span></a>).</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingIP6Config.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_SETTING_NAME "ipv6"
-</pre>
+<a name="nm-setting-ip6-config-remove-route-by-value"></a><h3>nm_setting_ip6_config_remove_route_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_remove_route_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> *route</code></em>);</pre>
<p>
+Removes the route <em class="parameter"><code>route</code></em>.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP6ConfigError"></a><h3>enum NMSettingIP6ConfigError</h3>
-<div class="refsect3">
-<a name="id-1.2.22.12.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the route to remove</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS"></a>NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD</p></td>
-<td class="enum_member_description">
-<p>the property's value is
-not valid with the given IPv6 method</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the route was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
</tr>
</tbody>
</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-ERROR:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_ERROR nm_setting_ip6_config_error_quark ()
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-METHOD:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD "method"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-DNS:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_DNS</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_DNS "dns"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_DNS_SEARCH</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_DNS_SEARCH "dns-search"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_ADDRESSES</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_ADDRESSES "addresses"
-</pre>
-<p>
-</p>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-ROUTES:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_ROUTES</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_ROUTES "routes"
-</pre>
+<a name="nm-setting-ip6-config-clear-routes"></a><h3>nm_setting_ip6_config_clear_routes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip6_config_clear_routes (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
<p>
+Removes all configured routes.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr></tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
-</pre>
-<p>
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
-</pre>
+<a name="nm-setting-ip6-config-get-ignore-auto-routes"></a><h3>nm_setting_ip6_config_get_ignore_auto_routes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_get_ignore_auto_routes
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes" title='The "ignore-auto-routes" property'><span class="type">"ignore-auto-routes"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP) routes should be
+ignored.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_NEVER_DEFAULT</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_NEVER_DEFAULT "never-default"
-</pre>
+<a name="nm-setting-ip6-config-get-ignore-auto-dns"></a><h3>nm_setting_ip6_config_get_ignore_auto_dns ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_get_ignore_auto_dns
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns" title='The "ignore-auto-dns" property'><span class="type">"ignore-auto-dns"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if automatically configured (ie via DHCP or router
+advertisements) DNS information should be ignored.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_MAY_FAIL</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_MAY_FAIL "may-fail"
-</pre>
+<a name="nm-setting-ip6-config-get-dhcp-hostname"></a><h3>nm_setting_ip6_config_get_dhcp_hostname ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip6_config_get_dhcp_hostname
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname" title='The "dhcp-hostname" property'><span class="type">"dhcp-hostname"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the configured hostname to send to the DHCP server</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_IP6_PRIVACY</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_IP6_PRIVACY "ip6-privacy"
-</pre>
+<a name="nm-setting-ip6-config-get-never-default"></a><h3>nm_setting_ip6_config_get_never_default ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_get_never_default
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--never-default" title='The "never-default" property'><span class="type">"never-default"</span></a>
+property.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection should never be the default connection
+for IPv6 addressing</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME "dhcp-hostname"
-</pre>
+<a name="nm-setting-ip6-config-get-may-fail"></a><h3>nm_setting_ip6_config_get_may_fail ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ip6_config_get_may_fail (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
<p>
+Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--may-fail" title='The "may-fail" property'><span class="type">"may-fail"</span></a>
+property.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_IGNORE</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_IGNORE "ignore"
-</pre>
-<p>IPv6 is not required or is handled by some other mechanism, and NetworkManager
-should not configure IPv6 for this connection.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_AUTO</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_AUTO "auto"
-</pre>
-<p>IPv6 configuration should be automatically determined via a method appropriate
-for the hardware interface, ie router advertisements, DHCP, or PPP or some
-other device-specific manner.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_DHCP</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_DHCP "dhcp"
-</pre>
-<p>IPv6 configuration should be automatically determined via DHCPv6 only and
-router advertisements should be ignored.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL "link-local"
-</pre>
-<p>IPv6 configuration should be automatically configured for link-local-only
-operation.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_MANUAL</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_MANUAL "manual"
-</pre>
-<p>All necessary IPv6 configuration (addresses, prefix, DNS, etc) is specified
-in the setting's properties.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_METHOD_SHARED</h3>
-<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_METHOD_SHARED "shared"
-</pre>
-<p>This connection specifies configuration that allows other computers to
-connect through it to the default network (usually the Internet). The
-connection's interface will be assigned a private address, and router
-advertisements, a caching DNS server, and Network Address Translation (NAT)
-functionality will be started on this connection's interface to allow other
-devices to connect through that interface to the default network. (not yet
-supported for IPv6)</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingIP6ConfigPrivacy"></a><h3>enum NMSettingIP6ConfigPrivacy</h3>
-<p><a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy"><span class="type">NMSettingIP6ConfigPrivacy</span></a> values indicate if and how IPv6 Privacy
-Extensions are used (RFC4941).</p>
-<div class="refsect3">
-<a name="id-1.2.22.12.22.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-UNKNOWN:CAPS"></a>NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or no value specified</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-DISABLED:CAPS"></a>NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED</p></td>
-<td class="enum_member_description">
-<p>IPv6 Privacy Extensions are disabled</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this connection doesn't require IPv6 addressing to complete
+for the connection to succeed.</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip6-config-get-ip6-privacy"></a><h3>nm_setting_ip6_config_get_ip6_privacy ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy"><span class="returnvalue">NMSettingIP6ConfigPrivacy</span></a> nm_setting_ip6_config_get_ip6_privacy
+ (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy" title='The "ip6-privacy" property'><span class="type">"ip6-privacy"</span></a>
+property.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-PUBLIC-ADDR:CAPS"></a>NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR</p></td>
-<td class="enum_member_description">
-<p>IPv6 Privacy Extensions
-are enabled, but public addresses are preferred over temporary addresses</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-TEMP-ADDR:CAPS"></a>NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR</p></td>
-<td class="enum_member_description">
-<p>IPv6 Privacy Extensions
-are enabled and temporary addresses are preferred over public addresses</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>IPv6 Privacy Extensions configuration value (<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy"><span class="type">NMSettingIP6ConfigPrivacy</span></a>).</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-</div>
<div class="refsect1">
<a name="NMSettingIP6Config.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingIP6Config--addresses"></a><h3>The <code class="literal">“addressesâ€</code> property</h3>
-<pre class="programlisting"> “addresses†<span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar___*</span></pre>
-<p>Array of IPv6 address structures. Each IPv6 address structure is composed of 3 members, the first being a byte array containing the IPv6 address (network byte order), the second a 32-bit integer containing the IPv6 address prefix, and the third a byte array containing the IPv6 address (network byte order) of the gateway associated with this address, if any. If no gateway is given, the third element should be given as all zeros. For the 'auto' method, given IP addresses are appended to those returned by automatic configuration. Addresses cannot be used with the 'shared' or 'link-local' methods as the interface is automatically assigned an address with these methods.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP6Config--addresses"></a><h3>The <code class="literal">"addresses"</code> property</h3>
+<pre class="programlisting"> "addresses" <span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar___*</span> : Read / Write</pre>
+<p>
+Array of IPv6 address structures. Each IPv6 address structure is
+composed of 3 members, the first being a byte array containing the IPv6
+address (network byte order), the second a 32-bit integer containing the
+IPv6 address prefix, and the third a byte array containing the IPv6
+address (network byte order) of the gateway associated with this address,
+if any. If no gateway is given, the third element should be given as all
+zeros. For the "auto" method, given IP addresses are appended to those
+returned by automatic configuration. Addresses cannot be used with the
+"shared" or "link-local" methods as the interface is automatically
+assigned an address with these methods.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--dhcp-hostname"></a><h3>The <code class="literal">“dhcp-hostnameâ€</code> property</h3>
-<pre class="programlisting"> “dhcp-hostname†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The specified name will be sent to the DHCP server when acquiring a lease.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP6Config--dhcp-hostname"></a><h3>The <code class="literal">"dhcp-hostname"</code> property</h3>
+<pre class="programlisting"> "dhcp-hostname" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The specified name will be sent to the DHCP server when acquiring a
+lease.
+</p>
<p>Default value: NULL</p>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--dns"></a><h3>The <code class="literal">“dnsâ€</code> property</h3>
-<pre class="programlisting"> “dns†<span class="type">GPtrArray_GArray_guchar__</span> *</pre>
-<p>Array of DNS servers, where each member of the array is a byte array containing the IPv6 address of the DNS server (in network byte order). For the 'auto' method, these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared' or 'link-local' methods as there is no usptream network. In all other methods, these DNS servers are used as the only DNS servers for this connection.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP6Config--dns"></a><h3>The <code class="literal">"dns"</code> property</h3>
+<pre class="programlisting"> "dns" <span class="type">GPtrArray_GArray_guchar__</span>* : Read / Write</pre>
+<p>
+Array of DNS servers, where each member of the array is a byte array
+containing the IPv6 address of the DNS server (in network byte order).
+For the "auto" method, these DNS servers are appended to those (if any)
+returned by automatic configuration. DNS servers cannot be used with the
+"shared" or "link-local" methods as there is no usptream network. In all
+other methods, these DNS servers are used as the only DNS servers for
+this connection.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--dns-search"></a><h3>The <code class="literal">“dns-searchâ€</code> property</h3>
-<pre class="programlisting"> “dns-search†<span class="type">GSList_gchararray_</span> *</pre>
-<p>List of DNS search domains. For the 'auto' method, these search domains are appended to those returned by automatic configuration. Search domains cannot be used with the 'shared' or 'link-local' methods as there is no upstream network. In all other methods, these search domains are used as the only search domains for this connection.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP6Config--dns-search"></a><h3>The <code class="literal">"dns-search"</code> property</h3>
+<pre class="programlisting"> "dns-search" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
+<p>
+List of DNS search domains. For the "auto" method, these search domains
+are appended to those returned by automatic configuration. Search domains
+cannot be used with the "shared" or "link-local" methods as there is no
+upstream network. In all other methods, these search domains are used as
+the only search domains for this connection.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--ignore-auto-dns"></a><h3>The <code class="literal">“ignore-auto-dnsâ€</code> property</h3>
-<pre class="programlisting"> “ignore-auto-dns†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>When the method is set to 'auto' or 'dhcp' and this property is set to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the 'dns' and 'dns-search' properties, if any, are used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP6Config--ignore-auto-dns"></a><h3>The <code class="literal">"ignore-auto-dns"</code> property</h3>
+<pre class="programlisting"> "ignore-auto-dns" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+When the method is set to "auto" or "dhcp" and this property is set to
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, automatically configured nameservers and search domains are
+ignored and only nameservers and search domains specified in the
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns" title='The "dns" property'><span class="type">"dns"</span></a> and <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns-search" title='The "dns-search" property'><span class="type">"dns-search"</span></a> properties, if
+any, are used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--ignore-auto-routes"></a><h3>The <code class="literal">“ignore-auto-routesâ€</code> property</h3>
-<pre class="programlisting"> “ignore-auto-routes†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>When the method is set to 'auto' or 'dhcp' and this property is set to TRUE, automatically configured routes are ignored and only routes specified in the 'routes' property, if any, are used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP6Config--ignore-auto-routes"></a><h3>The <code class="literal">"ignore-auto-routes"</code> property</h3>
+<pre class="programlisting"> "ignore-auto-routes" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+When the method is set to "auto" or "dhcp" and this property is set to
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, automatically configured routes are ignored and only routes
+specified in the <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--routes" title='The "routes" property'><span class="type">"routes"</span></a> property, if any, are used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--ip6-privacy"></a><h3>The <code class="literal">“ip6-privacyâ€</code> property</h3>
-<pre class="programlisting"> “ip6-privacy†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses).</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP6Config--ip6-privacy"></a><h3>The <code class="literal">"ip6-privacy"</code> property</h3>
+<pre class="programlisting"> "ip6-privacy" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct</pre>
+<p>
+Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If
+enabled, it makes the kernel generate a temporary IPv6 address in
+addition to the public one generated from MAC address via modified
+EUI-64. This enhances privacy, but could cause problems in some
+applications, on the other hand. The permitted values are: 0: disabled,
+1: enabled (prefer public address), 2: enabled (prefer temporary
+addresses).
+</p>
<p>Allowed values: [-1,2]</p>
<p>Default value: -1</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--may-fail"></a><h3>The <code class="literal">“may-failâ€</code> property</h3>
-<pre class="programlisting"> “may-fail†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, allow overall network configuration to proceed even if IPv6 configuration times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv4-only networks, setting this property to TRUE allows the overall network configuration to succeed if IPv6 configuration fails but IPv4 configuration completes successfully.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP6Config--may-fail"></a><h3>The <code class="literal">"may-fail"</code> property</h3>
+<pre class="programlisting"> "may-fail" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, allow overall network configuration to proceed even if IPv6
+configuration times out. Note that at least one IP configuration must
+succeed or overall network configuration will still fail. For example,
+in IPv4-only networks, setting this property to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> allows the overall
+network configuration to succeed if IPv6 configuration fails but IPv4
+configuration completes successfully.
+</p>
<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--method"></a><h3>The <code class="literal">“methodâ€</code> property</h3>
-<pre class="programlisting"> “method†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>IPv6 configuration method. If 'auto' is specified then the appropriate automatic method (PPP, router advertisement, etc) is used for the device and most other properties can be left unset. To force the use of DHCP only, specify 'dhcp'; this method is only valid for ethernet-based hardware. If 'link-local' is specified, then an IPv6 link-local address will be assigned to the interface. If 'manual' is specified, static IP addressing is used and at least one IP address must be given in the 'addresses' property. If 'ignore' is specified, IPv6 configuration is not done. This property must be set. NOTE: the 'shared' methodis not yet supported.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP6Config--method"></a><h3>The <code class="literal">"method"</code> property</h3>
+<pre class="programlisting"> "method" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+IPv6 configuration method. If "auto" is specified then the appropriate
+automatic method (PPP, router advertisement, etc) is used for the device
+and most other properties can be left unset. To force the use of DHCP
+only, specify "dhcp"; this method is only valid for Ethernet- based
+hardware. If "link-local" is specified, then an IPv6 link-local address
+will be assigned to the interface. If "manual" is specified, static IP
+addressing is used and at least one IP address must be given in the
+"addresses" property. If "ignore" is specified, IPv6 configuration is
+not done. This property must be set. Note: the "shared" method is not
+yet supported.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--never-default"></a><h3>The <code class="literal">“never-defaultâ€</code> property</h3>
-<pre class="programlisting"> “never-default†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, this connection will never be the default IPv6 connection, meaning it will never be assigned the default IPv6 route by NetworkManager.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingIP6Config--never-default"></a><h3>The <code class="literal">"never-default"</code> property</h3>
+<pre class="programlisting"> "never-default" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, this connection will never be the default IPv6 connection,
+meaning it will never be assigned the default IPv6 route by
+NetworkManager.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingIP6Config--routes"></a><h3>The <code class="literal">“routesâ€</code> property</h3>
-<pre class="programlisting"> “routes†<span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar_+guint__*</span></pre>
-<p>Array of IPv6 route structures. Each IPv6 route structure is composed of 4 members; the first being the destination IPv6 network or address (network byte order) as a byte array, the second the destination network or address IPv6 prefix, the third being the next-hop IPv6 address (network byte order) if any, and the fourth being the route metric. For the 'auto' method, given IP routes are appended to those returned by automatic configuration. Routes cannot be used with the 'shared' or 'link-local' methods because there is no upstream network.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingIP6Config--routes"></a><h3>The <code class="literal">"routes"</code> property</h3>
+<pre class="programlisting"> "routes" <span class="type">GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar_+guint__*</span> : Read / Write</pre>
+<p>
+Array of IPv6 route structures. Each IPv6 route structure is composed of
+4 members; the first being the destination IPv6 network or address
+(network byte order) as a byte array, the second the destination network
+or address IPv6 prefix, the third being the next-hop IPv6 address
+(network byte order) if any, and the fourth being the route metric. For
+the "auto" method, given IP routes are appended to those returned by
+automatic configuration. Routes cannot be used with the "shared" or
+"link-local" methods because there is no upstream network.
+</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingInfiniband.html b/docs/libnm-util/html/NMSettingInfiniband.html
index aa2612f82..dc3eb3507 100644
--- a/docs/libnm-util/html/NMSettingInfiniband.html
+++ b/docs/libnm-util/html/NMSettingInfiniband.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingInfiniband</title>
+<title>NMSettingInfiniband</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
-<link rel="prev" href="NMSettingBridgePort.html" title="NMSettingBridgePort">
+<link rel="prev" href="NMSettingGeneric.html" title="NMSettingGeneric">
<link rel="next" href="NMSettingVlan.html" title="NMSettingVlan">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingInfiniband.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingInfiniband.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingInfiniband.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingBridgePort.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingVlan.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingGeneric.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingVlan.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingInfiniband.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingInfiniband.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingInfiniband.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingInfiniband.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingInfiniband"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,355 +37,399 @@
<h2><span class="refentrytitle"><a name="NMSettingInfiniband.top_of_page"></a>NMSettingInfiniband</span></h2>
<p>NMSettingInfiniband — Describes connection properties for IP-over-InfiniBand networks</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingInfiniband.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingInfinibandError"></a><pre class="synopsis">
+#include &lt;nm-setting-infiniband.h&gt;
+
+#define <a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-SETTING-NAME:CAPS" title="NM_SETTING_INFINIBAND_SETTING_NAME">NM_SETTING_INFINIBAND_SETTING_NAME</a>
+enum <a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandError-enum" title="enum NMSettingInfinibandError">NMSettingInfinibandError</a>;
+#define <a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR:CAPS" title="NM_SETTING_INFINIBAND_ERROR">NM_SETTING_INFINIBAND_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-error-quark" title="nm_setting_infiniband_error_quark ()">nm_setting_infiniband_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS" title="NM_SETTING_INFINIBAND_MAC_ADDRESS">NM_SETTING_INFINIBAND_MAC_ADDRESS</a>
+#define <a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MTU:CAPS" title="NM_SETTING_INFINIBAND_MTU">NM_SETTING_INFINIBAND_MTU</a>
+#define <a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS" title="NM_SETTING_INFINIBAND_TRANSPORT_MODE">NM_SETTING_INFINIBAND_TRANSPORT_MODE</a>
+#define <a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-P-KEY:CAPS" title="NM_SETTING_INFINIBAND_P_KEY">NM_SETTING_INFINIBAND_P_KEY</a>
+#define <a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-PARENT:CAPS" title="NM_SETTING_INFINIBAND_PARENT">NM_SETTING_INFINIBAND_PARENT</a>
+ <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband-struct" title="NMSettingInfiniband">NMSettingInfiniband</a>;
+ <a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandClass" title="NMSettingInfinibandClass">NMSettingInfinibandClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-new" title="nm_setting_infiniband_new ()">nm_setting_infiniband_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address" title="nm_setting_infiniband_get_mac_address ()">nm_setting_infiniband_get_mac_address</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mtu" title="nm_setting_infiniband_get_mtu ()">nm_setting_infiniband_get_mtu</a> (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode" title="nm_setting_infiniband_get_transport_mode ()">nm_setting_infiniband_get_transport_mode</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-p-key" title="nm_setting_infiniband_get_p_key ()">nm_setting_infiniband_get_p_key</a> (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-parent" title="nm_setting_infiniband_get_parent ()">nm_setting_infiniband_get_parent</a> (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingInfiniband.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingInfinibandError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingInfiniband
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingInfiniband.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mac-address" title='The "mac-address" property'>mac-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mtu" title='The "mtu" property'>mtu</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--p-key" title='The "p-key" property'>p-key</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--parent" title='The "parent" property'>parent</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+ "<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--transport-mode" title='The "transport-mode" property'>transport-mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSettingInfiniband.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingInfiniband.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for connection to IP-over-InfiniBand networks.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingInfiniband.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-INFINIBAND-SETTING-NAME:CAPS"></a><h3>NM_SETTING_INFINIBAND_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_INFINIBAND_SETTING_NAME "infiniband"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingInfinibandError-enum"></a><h3>enum NMSettingInfinibandError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_INFINIBAND_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_INFINIBAND_ERROR_MISSING_PROPERTY /*&lt; nick=MissingProperty &gt;*/
+} NMSettingInfinibandError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-error-quark" title="nm_setting_infiniband_error_quark ()">nm_setting_infiniband_error_quark</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-INFINIBAND-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_INFINIBAND_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-new" title="nm_setting_infiniband_new ()">nm_setting_infiniband_new</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-INFINIBAND-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address" title="nm_setting_infiniband_get_mac_address ()">nm_setting_infiniband_get_mac_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mtu" title="nm_setting_infiniband_get_mtu ()">nm_setting_infiniband_get_mtu</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode" title="nm_setting_infiniband_get_transport_mode ()">nm_setting_infiniband_get_transport_mode</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-INFINIBAND-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_INFINIBAND_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mac-address" title="The “mac-address†property">mac-address</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mtu" title="The “mtu†property">mtu</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--transport-mode" title="The “transport-mode†property">transport-mode</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
-</table></div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-INFINIBAND-ERROR:CAPS"></a><h3>NM_SETTING_INFINIBAND_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_INFINIBAND_ERROR nm_setting_infiniband_error_quark ()
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-infiniband-error-quark"></a><h3>nm_setting_infiniband_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_infiniband_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-SETTING-NAME:CAPS" title="NM_SETTING_INFINIBAND_SETTING_NAME">NM_SETTING_INFINIBAND_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandError" title="enum NMSettingInfinibandError">NMSettingInfinibandError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR:CAPS" title="NM_SETTING_INFINIBAND_ERROR">NM_SETTING_INFINIBAND_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS" title="NM_SETTING_INFINIBAND_MAC_ADDRESS">NM_SETTING_INFINIBAND_MAC_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MTU:CAPS" title="NM_SETTING_INFINIBAND_MTU">NM_SETTING_INFINIBAND_MTU</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS" title="NM_SETTING_INFINIBAND_TRANSPORT_MODE">NM_SETTING_INFINIBAND_TRANSPORT_MODE</a></td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingInfinibandError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingInfiniband
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_INFINIBAND_MAC_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_INFINIBAND_MAC_ADDRESS "mac-address"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-infiniband.h&gt;
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-INFINIBAND-MTU:CAPS"></a><h3>NM_SETTING_INFINIBAND_MTU</h3>
+<pre class="programlisting">#define NM_SETTING_INFINIBAND_MTU "mtu"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
-necessary for connection to IP-over-InfiniBand networks.</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS"></a><h3>NM_SETTING_INFINIBAND_TRANSPORT_MODE</h3>
+<pre class="programlisting">#define NM_SETTING_INFINIBAND_TRANSPORT_MODE "transport-mode"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="nm-setting-infiniband-error-quark"></a><h3>nm_setting_infiniband_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_infiniband_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.16.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> errors.</p>
-<p></p>
+<a name="NM-SETTING-INFINIBAND-P-KEY:CAPS"></a><h3>NM_SETTING_INFINIBAND_P_KEY</h3>
+<pre class="programlisting">#define NM_SETTING_INFINIBAND_P_KEY "p-key"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-INFINIBAND-PARENT:CAPS"></a><h3>NM_SETTING_INFINIBAND_PARENT</h3>
+<pre class="programlisting">#define NM_SETTING_INFINIBAND_PARENT "parent"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-infiniband-new"></a><h3>nm_setting_infiniband_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_infiniband_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.16.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<a name="NMSettingInfiniband-struct"></a><h3>NMSettingInfiniband</h3>
+<pre class="programlisting">typedef struct _NMSettingInfiniband NMSettingInfiniband;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingInfinibandClass"></a><h3>NMSettingInfinibandClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingInfinibandClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-infiniband-get-mac-address"></a><h3>nm_setting_infiniband_get_mac_address ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_infiniband_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.16.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-infiniband-new"></a><h3>nm_setting_infiniband_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_infiniband_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.16.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mac-address" title="The “mac-address†property"><span class="type">“mac-addressâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-infiniband-get-mtu"></a><h3>nm_setting_infiniband_get_mtu ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_infiniband_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.16.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-infiniband-get-mac-address"></a><h3>nm_setting_infiniband_get_mac_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_infiniband_get_mac_address
+ (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.16.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mtu" title="The “mtu†property"><span class="type">“mtuâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-infiniband-get-transport-mode"></a><h3>nm_setting_infiniband_get_transport_mode ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_infiniband_get_transport_mode
- (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
-<p>Returns the transport mode for this device. Either 'datagram' or
-'connected'.</p>
-<div class="refsect3">
-<a name="id-1.2.16.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-infiniband-get-mtu"></a><h3>nm_setting_infiniband_get_mtu ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_infiniband_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mtu" title='The "mtu" property'><span class="type">"mtu"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.16.9.6.6"></a><h4>Returns</h4>
-<p> the IPoIB transport mode</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SETTING-INFINIBAND-SETTING-NAME:CAPS"></a><h3>NM_SETTING_INFINIBAND_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_INFINIBAND_SETTING_NAME "infiniband"
-</pre>
+<a name="nm-setting-infiniband-get-transport-mode"></a><h3>nm_setting_infiniband_get_transport_mode ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_infiniband_get_transport_mode
+ (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
<p>
+Returns the transport mode for this device. Either 'datagram' or
+'connected'.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPoIB transport mode</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingInfinibandError"></a><h3>enum NMSettingInfinibandError</h3>
-<div class="refsect3">
-<a name="id-1.2.16.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-infiniband-get-p-key"></a><h3>nm_setting_infiniband_get_p_key ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_setting_infiniband_get_p_key (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
+<p>
+Returns the P_Key to use for this device. A value of -1 means to
+use the default P_Key (aka "the P_Key at index 0"). Otherwise it is
+a 16-bit unsigned integer.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-INFINIBAND-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_INFINIBAND_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-INFINIBAND-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IPoIB P_Key</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-infiniband-get-parent"></a><h3>nm_setting_infiniband_get_parent ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_infiniband_get_parent (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre>
+<p>
+Returns the parent interface name for this device, if set.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-INFINIBAND-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_INFINIBAND_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a>
</td>
-<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the parent interface name</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMSettingInfiniband.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-INFINIBAND-ERROR:CAPS"></a><h3>NM_SETTING_INFINIBAND_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_INFINIBAND_ERROR nm_setting_infiniband_error_quark ()
-</pre>
+<a name="NMSettingInfiniband--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+If specified, this connection will only apply to the IPoIB device whose
+permanent MAC address matches. This property does not change the MAC
+address of the device (i.e. MAC spoofing).
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_INFINIBAND_MAC_ADDRESS</h3>
-<pre class="programlisting">#define NM_SETTING_INFINIBAND_MAC_ADDRESS "mac-address"
-</pre>
+<a name="NMSettingInfiniband--mtu"></a><h3>The <code class="literal">"mtu"</code> property</h3>
+<pre class="programlisting"> "mtu" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+If non-zero, only transmit packets of the specified size or smaller,
+breaking larger packets up into multiple frames.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-INFINIBAND-MTU:CAPS"></a><h3>NM_SETTING_INFINIBAND_MTU</h3>
-<pre class="programlisting">#define NM_SETTING_INFINIBAND_MTU "mtu"
-</pre>
+<a name="NMSettingInfiniband--p-key"></a><h3>The <code class="literal">"p-key"</code> property</h3>
+<pre class="programlisting"> "p-key" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write / Construct</pre>
<p>
+The InfiniBand P_Key to use for this device. A value of -1 means to use
+the default P_Key (aka "the P_Key at index 0"). Otherwise it is a 16-bit
+unsigned integer, whose high bit is set if it is a "full membership"
+P_Key.
</p>
+<p>Allowed values: [-1,65535]</p>
+<p>Default value: -1</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS"></a><h3>NM_SETTING_INFINIBAND_TRANSPORT_MODE</h3>
-<pre class="programlisting">#define NM_SETTING_INFINIBAND_TRANSPORT_MODE "transport-mode"
-</pre>
+<a name="NMSettingInfiniband--parent"></a><h3>The <code class="literal">"parent"</code> property</h3>
+<pre class="programlisting"> "parent" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
<p>
+The interface name of the parent device of this device. Normally <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>,
+but if the <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--p-key" title='The "p-key" property'><span class="type">"p_key"</span></a> property is set, then you must
+specify the base device by setting either this property or
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a>.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingInfiniband.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingInfiniband--mac-address"></a><h3>The <code class="literal">“mac-addressâ€</code> property</h3>
-<pre class="programlisting"> “mac-address†<span class="type">GArray_guchar_</span> *</pre>
-<p>If specified, this connection will only apply to the IPoIB device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingInfiniband--mtu"></a><h3>The <code class="literal">“mtuâ€</code> property</h3>
-<pre class="programlisting"> “mtu†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: 0</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingInfiniband--transport-mode"></a><h3>The <code class="literal">“transport-modeâ€</code> property</h3>
-<pre class="programlisting"> “transport-mode†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The IPoIB transport mode. Either 'datagram' or 'connected'.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingInfiniband--transport-mode"></a><h3>The <code class="literal">"transport-mode"</code> property</h3>
+<pre class="programlisting"> "transport-mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
+<p>
+The IP-over-InfiniBand transport mode. Either "datagram" or
+"connected".
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingOlpcMesh.html b/docs/libnm-util/html/NMSettingOlpcMesh.html
index 59c0ad6fa..468bcf908 100644
--- a/docs/libnm-util/html/NMSettingOlpcMesh.html
+++ b/docs/libnm-util/html/NMSettingOlpcMesh.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingOlpcMesh</title>
+<title>NMSettingOlpcMesh</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingVlan.html" title="NMSettingVlan">
<link rel="next" href="NMSettingAdsl.html" title="NMSettingAdsl">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingOlpcMesh.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingOlpcMesh.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingOlpcMesh.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingVlan.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingAdsl.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingVlan.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingAdsl.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingOlpcMesh.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingOlpcMesh.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingOlpcMesh.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingOlpcMesh.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingOlpcMesh"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,274 +37,193 @@
<h2><span class="refentrytitle"><a name="NMSettingOlpcMesh.top_of_page"></a>NMSettingOlpcMesh</span></h2>
<p>NMSettingOlpcMesh</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingOlpcMesh.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingOlpcMeshError"></a><pre class="synopsis">#define <a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS" title="NM_SETTING_OLPC_MESH_SETTING_NAME">NM_SETTING_OLPC_MESH_SETTING_NAME</a>
+enum <a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshError-enum" title="enum NMSettingOlpcMeshError">NMSettingOlpcMeshError</a>;
+#define <a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR:CAPS" title="NM_SETTING_OLPC_MESH_ERROR">NM_SETTING_OLPC_MESH_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark" title="nm_setting_olpc_mesh_error_quark ()">nm_setting_olpc_mesh_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SSID:CAPS" title="NM_SETTING_OLPC_MESH_SSID">NM_SETTING_OLPC_MESH_SSID</a>
+#define <a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-CHANNEL:CAPS" title="NM_SETTING_OLPC_MESH_CHANNEL">NM_SETTING_OLPC_MESH_CHANNEL</a>
+#define <a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS" title="NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS">NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS</a>
+ <a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh-struct" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>;
+ <a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshClass" title="NMSettingOlpcMeshClass">NMSettingOlpcMeshClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new" title="nm_setting_olpc_mesh_new ()">nm_setting_olpc_mesh_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid" title="nm_setting_olpc_mesh_get_ssid ()">nm_setting_olpc_mesh_get_ssid</a> (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel" title="nm_setting_olpc_mesh_get_channel ()">nm_setting_olpc_mesh_get_channel</a> (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address" title="nm_setting_olpc_mesh_get_dhcp_anycast_address ()">nm_setting_olpc_mesh_get_dhcp_anycast_address</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSettingOlpcMesh.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark" title="nm_setting_olpc_mesh_error_quark ()">nm_setting_olpc_mesh_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new" title="nm_setting_olpc_mesh_new ()">nm_setting_olpc_mesh_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid" title="nm_setting_olpc_mesh_get_ssid ()">nm_setting_olpc_mesh_get_ssid</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel" title="nm_setting_olpc_mesh_get_channel ()">nm_setting_olpc_mesh_get_channel</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address" title="nm_setting_olpc_mesh_get_dhcp_anycast_address ()">nm_setting_olpc_mesh_get_dhcp_anycast_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMSettingOlpcMesh.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingOlpcMeshError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingOlpcMesh
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingOlpcMesh.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel" title="The “channel†property">channel</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address" title="The “dhcp-anycast-address†property">dhcp-anycast-address</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid" title="The “ssid†property">ssid</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel" title='The "channel" property'>channel</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address" title='The "dhcp-anycast-address" property'>dhcp-anycast-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid" title='The "ssid" property'>ssid</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+</pre>
</div>
<div class="refsect1">
-<a name="NMSettingOlpcMesh.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingOlpcMesh.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingOlpcMesh.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS"></a><h3>NM_SETTING_OLPC_MESH_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_OLPC_MESH_SETTING_NAME "802-11-olpc-mesh"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingOlpcMeshError-enum"></a><h3>enum NMSettingOlpcMeshError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_OLPC_MESH_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_OLPC_MESH_ERROR_MISSING_PROPERTY /*&lt; nick=MissingProperty &gt;*/
+} NMSettingOlpcMeshError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS" title="NM_SETTING_OLPC_MESH_SETTING_NAME">NM_SETTING_OLPC_MESH_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshError" title="enum NMSettingOlpcMeshError">NMSettingOlpcMeshError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR:CAPS" title="NM_SETTING_OLPC_MESH_ERROR">NM_SETTING_OLPC_MESH_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SSID:CAPS" title="NM_SETTING_OLPC_MESH_SSID">NM_SETTING_OLPC_MESH_SSID</a></td>
+<td><p><a name="NM-SETTING-OLPC-MESH-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_OLPC_MESH_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-CHANNEL:CAPS" title="NM_SETTING_OLPC_MESH_CHANNEL">NM_SETTING_OLPC_MESH_CHANNEL</a></td>
+<td><p><a name="NM-SETTING-OLPC-MESH-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS" title="NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS">NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS</a></td>
+<td><p><a name="NM-SETTING-OLPC-MESH-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_OLPC_MESH_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingOlpcMesh.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingOlpcMeshError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingOlpcMesh
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-OLPC-MESH-ERROR:CAPS"></a><h3>NM_SETTING_OLPC_MESH_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_OLPC_MESH_ERROR nm_setting_olpc_mesh_error_quark ()
</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingOlpcMesh.description"></a><h2>Description</h2>
<p>
</p>
</div>
-<div class="refsect1">
-<a name="NMSettingOlpcMesh.functions_details"></a><h2>Functions</h2>
+<hr>
<div class="refsect2">
-<a name="nm-setting-olpc-mesh-error-quark"></a><h3>nm_setting_olpc_mesh_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_olpc_mesh_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<a name="nm-setting-olpc-mesh-error-quark"></a><h3>nm_setting_olpc_mesh_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_olpc_mesh_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.2.18.8.2.5"></a><h4>Returns</h4>
-<p></p>
-</div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-olpc-mesh-new"></a><h3>nm_setting_olpc_mesh_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_olpc_mesh_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.18.8.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> object</p>
-<p></p>
-</div>
+<a name="NM-SETTING-OLPC-MESH-SSID:CAPS"></a><h3>NM_SETTING_OLPC_MESH_SSID</h3>
+<pre class="programlisting">#define NM_SETTING_OLPC_MESH_SSID "ssid"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-olpc-mesh-get-ssid"></a><h3>nm_setting_olpc_mesh_get_ssid ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_olpc_mesh_get_ssid (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);</pre>
+<a name="NM-SETTING-OLPC-MESH-CHANNEL:CAPS"></a><h3>NM_SETTING_OLPC_MESH_CHANNEL</h3>
+<pre class="programlisting">#define NM_SETTING_OLPC_MESH_CHANNEL "channel"
+</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.2.18.8.4.5"></a><h4>Returns</h4>
-<p></p>
-</div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-olpc-mesh-get-channel"></a><h3>nm_setting_olpc_mesh_get_channel ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_olpc_mesh_get_channel (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);</pre>
+<a name="NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS"></a><h3>NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS "dhcp-anycast-address"
+</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.2.18.8.5.5"></a><h4>Returns</h4>
-<p></p>
-</div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-olpc-mesh-get-dhcp-anycast-address"></a><h3>nm_setting_olpc_mesh_get_dhcp_anycast_address ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_olpc_mesh_get_dhcp_anycast_address
- (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);</pre>
+<a name="NMSettingOlpcMesh-struct"></a><h3>NMSettingOlpcMesh</h3>
+<pre class="programlisting">typedef struct _NMSettingOlpcMesh NMSettingOlpcMesh;</pre>
<p>
</p>
-<div class="refsect3">
-<a name="id-1.2.18.8.6.5"></a><h4>Returns</h4>
-<p></p>
-</div>
</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingOlpcMesh.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS"></a><h3>NM_SETTING_OLPC_MESH_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_OLPC_MESH_SETTING_NAME "802-11-olpc-mesh"
+<a name="NMSettingOlpcMeshClass"></a><h3>NMSettingOlpcMeshClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingOlpcMeshClass;
</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingOlpcMeshError"></a><h3>enum NMSettingOlpcMeshError</h3>
-<div class="refsect3">
-<a name="id-1.2.18.9.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-olpc-mesh-new"></a><h3>nm_setting_olpc_mesh_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_olpc_mesh_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-OLPC-MESH-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_OLPC_MESH_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-OLPC-MESH-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-OLPC-MESH-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_OLPC_MESH_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> object</td>
+</tr></tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-OLPC-MESH-ERROR:CAPS"></a><h3>NM_SETTING_OLPC_MESH_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_OLPC_MESH_ERROR nm_setting_olpc_mesh_error_quark ()
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-OLPC-MESH-SSID:CAPS"></a><h3>NM_SETTING_OLPC_MESH_SSID</h3>
-<pre class="programlisting">#define NM_SETTING_OLPC_MESH_SSID "ssid"
-</pre>
+<a name="nm-setting-olpc-mesh-get-ssid"></a><h3>nm_setting_olpc_mesh_get_ssid ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_olpc_mesh_get_ssid (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-OLPC-MESH-CHANNEL:CAPS"></a><h3>NM_SETTING_OLPC_MESH_CHANNEL</h3>
-<pre class="programlisting">#define NM_SETTING_OLPC_MESH_CHANNEL "channel"
-</pre>
+<a name="nm-setting-olpc-mesh-get-channel"></a><h3>nm_setting_olpc_mesh_get_channel ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_olpc_mesh_get_channel (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);</pre>
<p>
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS"></a><h3>NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS</h3>
-<pre class="programlisting">#define NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS "dhcp-anycast-address"
-</pre>
+<a name="nm-setting-olpc-mesh-get-dhcp-anycast-address"></a><h3>nm_setting_olpc_mesh_get_dhcp_anycast_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_olpc_mesh_get_dhcp_anycast_address
+ (<em class="parameter"><code><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> *setting</code></em>);</pre>
<p>
</p>
</div>
@@ -306,30 +231,35 @@ required</p>
<div class="refsect1">
<a name="NMSettingOlpcMesh.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingOlpcMesh--channel"></a><h3>The <code class="literal">“channelâ€</code> property</h3>
-<pre class="programlisting"> “channel†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Channel on which the mesh network to join is located.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingOlpcMesh--channel"></a><h3>The <code class="literal">"channel"</code> property</h3>
+<pre class="programlisting"> "channel" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+Channel on which the mesh network to join is located.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingOlpcMesh--dhcp-anycast-address"></a><h3>The <code class="literal">“dhcp-anycast-addressâ€</code> property</h3>
-<pre class="programlisting"> “dhcp-anycast-address†<span class="type">GArray_guchar_</span> *</pre>
-<p>Anycast DHCP MAC address used when requesting an IP address via DHCP. The specific anycast address used determines which DHCP server class answers the the request.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingOlpcMesh--dhcp-anycast-address"></a><h3>The <code class="literal">"dhcp-anycast-address"</code> property</h3>
+<pre class="programlisting"> "dhcp-anycast-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
+<p>
+Anycast DHCP MAC address used when requesting an IP address via DHCP.
+The specific anycast address used determines which DHCP server class
+answers the request.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingOlpcMesh--ssid"></a><h3>The <code class="literal">“ssidâ€</code> property</h3>
-<pre class="programlisting"> “ssid†<span class="type">GArray_guchar_</span> *</pre>
-<p>SSID of the mesh network to join.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingOlpcMesh--ssid"></a><h3>The <code class="literal">"ssid"</code> property</h3>
+<pre class="programlisting"> "ssid" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
+<p>
+SSID of the mesh network to join.
+</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingPPP.html b/docs/libnm-util/html/NMSettingPPP.html
index f064b8ed4..10d400d82 100644
--- a/docs/libnm-util/html/NMSettingPPP.html
+++ b/docs/libnm-util/html/NMSettingPPP.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingPPP</title>
+<title>NMSettingPPP</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingIP6Config.html" title="NMSettingIP6Config">
<link rel="next" href="NMSettingPPPOE.html" title="NMSettingPPPOE">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingPPP.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingPPP.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingPPP.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingIP6Config.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingPPPOE.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingIP6Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingPPPOE.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingPPP.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingPPP.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingPPP.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingPPP.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingPPP"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,892 +38,104 @@
<p>NMSettingPPP — Describes connection properties for devices/networks
that require PPP to deliver IP capability</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingPPP.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-error-quark" title="nm_setting_ppp_error_quark ()">nm_setting_ppp_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-new" title="nm_setting_ppp_new ()">nm_setting_ppp_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-noauth" title="nm_setting_ppp_get_noauth ()">nm_setting_ppp_get_noauth</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-eap" title="nm_setting_ppp_get_refuse_eap ()">nm_setting_ppp_get_refuse_eap</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-pap" title="nm_setting_ppp_get_refuse_pap ()">nm_setting_ppp_get_refuse_pap</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-chap" title="nm_setting_ppp_get_refuse_chap ()">nm_setting_ppp_get_refuse_chap</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap" title="nm_setting_ppp_get_refuse_mschap ()">nm_setting_ppp_get_refuse_mschap</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2" title="nm_setting_ppp_get_refuse_mschapv2 ()">nm_setting_ppp_get_refuse_mschapv2</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp" title="nm_setting_ppp_get_nobsdcomp ()">nm_setting_ppp_get_nobsdcomp</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nodeflate" title="nm_setting_ppp_get_nodeflate ()">nm_setting_ppp_get_nodeflate</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp" title="nm_setting_ppp_get_no_vj_comp ()">nm_setting_ppp_get_no_vj_comp</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe" title="nm_setting_ppp_get_require_mppe ()">nm_setting_ppp_get_require_mppe</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128" title="nm_setting_ppp_get_require_mppe_128 ()">nm_setting_ppp_get_require_mppe_128</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful" title="nm_setting_ppp_get_mppe_stateful ()">nm_setting_ppp_get_mppe_stateful</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-crtscts" title="nm_setting_ppp_get_crtscts ()">nm_setting_ppp_get_crtscts</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-baud" title="nm_setting_ppp_get_baud ()">nm_setting_ppp_get_baud</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mru" title="nm_setting_ppp_get_mru ()">nm_setting_ppp_get_mru</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mtu" title="nm_setting_ppp_get_mtu ()">nm_setting_ppp_get_mtu</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure" title="nm_setting_ppp_get_lcp_echo_failure ()">nm_setting_ppp_get_lcp_echo_failure</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval" title="nm_setting_ppp_get_lcp_echo_interval ()">nm_setting_ppp_get_lcp_echo_interval</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingPPP.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--baud" title="The “baud†property">baud</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--crtscts" title="The “crtscts†property">crtscts</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure" title="The “lcp-echo-failure†property">lcp-echo-failure</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval" title="The “lcp-echo-interval†property">lcp-echo-interval</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--mppe-stateful" title="The “mppe-stateful†property">mppe-stateful</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--mru" title="The “mru†property">mru</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--mtu" title="The “mtu†property">mtu</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--no-vj-comp" title="The “no-vj-comp†property">no-vj-comp</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--noauth" title="The “noauth†property">noauth</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--nobsdcomp" title="The “nobsdcomp†property">nobsdcomp</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--nodeflate" title="The “nodeflate†property">nodeflate</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-chap" title="The “refuse-chap†property">refuse-chap</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-eap" title="The “refuse-eap†property">refuse-eap</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschap" title="The “refuse-mschap†property">refuse-mschap</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2" title="The “refuse-mschapv2†property">refuse-mschapv2</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-pap" title="The “refuse-pap†property">refuse-pap</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe" title="The “require-mppe†property">require-mppe</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe-128" title="The “require-mppe-128†property">require-mppe-128</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingPPP.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-SETTING-NAME:CAPS" title="NM_SETTING_PPP_SETTING_NAME">NM_SETTING_PPP_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NMSettingPPPError" title="enum NMSettingPPPError">NMSettingPPPError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-ERROR:CAPS" title="NM_SETTING_PPP_ERROR">NM_SETTING_PPP_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NOAUTH:CAPS" title="NM_SETTING_PPP_NOAUTH">NM_SETTING_PPP_NOAUTH</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-EAP:CAPS" title="NM_SETTING_PPP_REFUSE_EAP">NM_SETTING_PPP_REFUSE_EAP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-PAP:CAPS" title="NM_SETTING_PPP_REFUSE_PAP">NM_SETTING_PPP_REFUSE_PAP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-CHAP:CAPS" title="NM_SETTING_PPP_REFUSE_CHAP">NM_SETTING_PPP_REFUSE_CHAP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-MSCHAP:CAPS" title="NM_SETTING_PPP_REFUSE_MSCHAP">NM_SETTING_PPP_REFUSE_MSCHAP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-MSCHAPV2:CAPS" title="NM_SETTING_PPP_REFUSE_MSCHAPV2">NM_SETTING_PPP_REFUSE_MSCHAPV2</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NOBSDCOMP:CAPS" title="NM_SETTING_PPP_NOBSDCOMP">NM_SETTING_PPP_NOBSDCOMP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NODEFLATE:CAPS" title="NM_SETTING_PPP_NODEFLATE">NM_SETTING_PPP_NODEFLATE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NO-VJ-COMP:CAPS" title="NM_SETTING_PPP_NO_VJ_COMP">NM_SETTING_PPP_NO_VJ_COMP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REQUIRE-MPPE:CAPS" title="NM_SETTING_PPP_REQUIRE_MPPE">NM_SETTING_PPP_REQUIRE_MPPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REQUIRE-MPPE-128:CAPS" title="NM_SETTING_PPP_REQUIRE_MPPE_128">NM_SETTING_PPP_REQUIRE_MPPE_128</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-MPPE-STATEFUL:CAPS" title="NM_SETTING_PPP_MPPE_STATEFUL">NM_SETTING_PPP_MPPE_STATEFUL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-CRTSCTS:CAPS" title="NM_SETTING_PPP_CRTSCTS">NM_SETTING_PPP_CRTSCTS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-BAUD:CAPS" title="NM_SETTING_PPP_BAUD">NM_SETTING_PPP_BAUD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-MRU:CAPS" title="NM_SETTING_PPP_MRU">NM_SETTING_PPP_MRU</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-MTU:CAPS" title="NM_SETTING_PPP_MTU">NM_SETTING_PPP_MTU</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS" title="NM_SETTING_PPP_LCP_ECHO_FAILURE">NM_SETTING_PPP_LCP_ECHO_FAILURE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS" title="NM_SETTING_PPP_LCP_ECHO_INTERVAL">NM_SETTING_PPP_LCP_ECHO_INTERVAL</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingPPP.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingPPPError"></a><pre class="synopsis">
+#include &lt;nm-setting-ppp.h&gt;
+
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-SETTING-NAME:CAPS" title="NM_SETTING_PPP_SETTING_NAME">NM_SETTING_PPP_SETTING_NAME</a>
+enum <a class="link" href="NMSettingPPP.html#NMSettingPPPError-enum" title="enum NMSettingPPPError">NMSettingPPPError</a>;
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-ERROR:CAPS" title="NM_SETTING_PPP_ERROR">NM_SETTING_PPP_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-error-quark" title="nm_setting_ppp_error_quark ()">nm_setting_ppp_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NOAUTH:CAPS" title="NM_SETTING_PPP_NOAUTH">NM_SETTING_PPP_NOAUTH</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-EAP:CAPS" title="NM_SETTING_PPP_REFUSE_EAP">NM_SETTING_PPP_REFUSE_EAP</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-PAP:CAPS" title="NM_SETTING_PPP_REFUSE_PAP">NM_SETTING_PPP_REFUSE_PAP</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-CHAP:CAPS" title="NM_SETTING_PPP_REFUSE_CHAP">NM_SETTING_PPP_REFUSE_CHAP</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-MSCHAP:CAPS" title="NM_SETTING_PPP_REFUSE_MSCHAP">NM_SETTING_PPP_REFUSE_MSCHAP</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-MSCHAPV2:CAPS" title="NM_SETTING_PPP_REFUSE_MSCHAPV2">NM_SETTING_PPP_REFUSE_MSCHAPV2</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NOBSDCOMP:CAPS" title="NM_SETTING_PPP_NOBSDCOMP">NM_SETTING_PPP_NOBSDCOMP</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NODEFLATE:CAPS" title="NM_SETTING_PPP_NODEFLATE">NM_SETTING_PPP_NODEFLATE</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-NO-VJ-COMP:CAPS" title="NM_SETTING_PPP_NO_VJ_COMP">NM_SETTING_PPP_NO_VJ_COMP</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REQUIRE-MPPE:CAPS" title="NM_SETTING_PPP_REQUIRE_MPPE">NM_SETTING_PPP_REQUIRE_MPPE</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-REQUIRE-MPPE-128:CAPS" title="NM_SETTING_PPP_REQUIRE_MPPE_128">NM_SETTING_PPP_REQUIRE_MPPE_128</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-MPPE-STATEFUL:CAPS" title="NM_SETTING_PPP_MPPE_STATEFUL">NM_SETTING_PPP_MPPE_STATEFUL</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-CRTSCTS:CAPS" title="NM_SETTING_PPP_CRTSCTS">NM_SETTING_PPP_CRTSCTS</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-BAUD:CAPS" title="NM_SETTING_PPP_BAUD">NM_SETTING_PPP_BAUD</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-MRU:CAPS" title="NM_SETTING_PPP_MRU">NM_SETTING_PPP_MRU</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-MTU:CAPS" title="NM_SETTING_PPP_MTU">NM_SETTING_PPP_MTU</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS" title="NM_SETTING_PPP_LCP_ECHO_FAILURE">NM_SETTING_PPP_LCP_ECHO_FAILURE</a>
+#define <a class="link" href="NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS" title="NM_SETTING_PPP_LCP_ECHO_INTERVAL">NM_SETTING_PPP_LCP_ECHO_INTERVAL</a>
+ <a class="link" href="NMSettingPPP.html#NMSettingPPP-struct" title="NMSettingPPP">NMSettingPPP</a>;
+ <a class="link" href="NMSettingPPP.html#NMSettingPPPClass" title="NMSettingPPPClass">NMSettingPPPClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingPPP.html#nm-setting-ppp-new" title="nm_setting_ppp_new ()">nm_setting_ppp_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-noauth" title="nm_setting_ppp_get_noauth ()">nm_setting_ppp_get_noauth</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-eap" title="nm_setting_ppp_get_refuse_eap ()">nm_setting_ppp_get_refuse_eap</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-pap" title="nm_setting_ppp_get_refuse_pap ()">nm_setting_ppp_get_refuse_pap</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-chap" title="nm_setting_ppp_get_refuse_chap ()">nm_setting_ppp_get_refuse_chap</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap" title="nm_setting_ppp_get_refuse_mschap ()">nm_setting_ppp_get_refuse_mschap</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2" title="nm_setting_ppp_get_refuse_mschapv2 ()">nm_setting_ppp_get_refuse_mschapv2</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp" title="nm_setting_ppp_get_nobsdcomp ()">nm_setting_ppp_get_nobsdcomp</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nodeflate" title="nm_setting_ppp_get_nodeflate ()">nm_setting_ppp_get_nodeflate</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp" title="nm_setting_ppp_get_no_vj_comp ()">nm_setting_ppp_get_no_vj_comp</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe" title="nm_setting_ppp_get_require_mppe ()">nm_setting_ppp_get_require_mppe</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128" title="nm_setting_ppp_get_require_mppe_128 ()">nm_setting_ppp_get_require_mppe_128</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful" title="nm_setting_ppp_get_mppe_stateful ()">nm_setting_ppp_get_mppe_stateful</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-crtscts" title="nm_setting_ppp_get_crtscts ()">nm_setting_ppp_get_crtscts</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-baud" title="nm_setting_ppp_get_baud ()">nm_setting_ppp_get_baud</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mru" title="nm_setting_ppp_get_mru ()">nm_setting_ppp_get_mru</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mtu" title="nm_setting_ppp_get_mtu ()">nm_setting_ppp_get_mtu</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure" title="nm_setting_ppp_get_lcp_echo_failure ()">nm_setting_ppp_get_lcp_echo_failure</a> (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval" title="nm_setting_ppp_get_lcp_echo_interval ()">nm_setting_ppp_get_lcp_echo_interval</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingPPP.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingPPPError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingPPP
+<pre class="synopsis">
+ GEnum
+ +----NMSettingPPPError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingPPP
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingPPP.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-ppp.h&gt;
+<a name="NMSettingPPP.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--baud" title='The "baud" property'>baud</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--crtscts" title='The "crtscts" property'>crtscts</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure" title='The "lcp-echo-failure" property'>lcp-echo-failure</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval" title='The "lcp-echo-interval" property'>lcp-echo-interval</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--mppe-stateful" title='The "mppe-stateful" property'>mppe-stateful</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--mru" title='The "mru" property'>mru</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--mtu" title='The "mtu" property'>mtu</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--no-vj-comp" title='The "no-vj-comp" property'>no-vj-comp</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--noauth" title='The "noauth" property'>noauth</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--nobsdcomp" title='The "nobsdcomp" property'>nobsdcomp</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--nodeflate" title='The "nodeflate" property'>nodeflate</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-chap" title='The "refuse-chap" property'>refuse-chap</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-eap" title='The "refuse-eap" property'>refuse-eap</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschap" title='The "refuse-mschap" property'>refuse-mschap</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2" title='The "refuse-mschapv2" property'>refuse-mschapv2</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-pap" title='The "refuse-pap" property'>refuse-pap</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe" title='The "require-mppe" property'>require-mppe</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe-128" title='The "require-mppe-128" property'>require-mppe-128</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
</pre>
</div>
<div class="refsect1">
<a name="NMSettingPPP.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+<p>
+The <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
necessary for connection to networks that require PPP transport, like PPPoE
-cable and DSL modems and some mobile broadband devices.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingPPP.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-ppp-error-quark"></a><h3>nm_setting_ppp_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_ppp_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.23.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-new"></a><h3>nm_setting_ppp_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_ppp_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.23.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-noauth"></a><h3>nm_setting_ppp_get_noauth ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_noauth (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--noauth" title="The “noauth†property"><span class="type">“noauthâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-refuse-eap"></a><h3>nm_setting_ppp_get_refuse_eap ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_refuse_eap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-eap" title="The “refuse-eap†property"><span class="type">“refuse-eapâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-refuse-pap"></a><h3>nm_setting_ppp_get_refuse_pap ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_refuse_pap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-pap" title="The “refuse-pap†property"><span class="type">“refuse-papâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-refuse-chap"></a><h3>nm_setting_ppp_get_refuse_chap ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_refuse_chap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-chap" title="The “refuse-chap†property"><span class="type">“refuse-chapâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-refuse-mschap"></a><h3>nm_setting_ppp_get_refuse_mschap ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_refuse_mschap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.8.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschap" title="The “refuse-mschap†property"><span class="type">“refuse-mschapâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-refuse-mschapv2"></a><h3>nm_setting_ppp_get_refuse_mschapv2 ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_refuse_mschapv2 (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.9.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2" title="The “refuse-mschapv2†property"><span class="type">“refuse-mschapv2â€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-nobsdcomp"></a><h3>nm_setting_ppp_get_nobsdcomp ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_nobsdcomp (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.10.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--nobsdcomp" title="The “nobsdcomp†property"><span class="type">“nobsdcompâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-nodeflate"></a><h3>nm_setting_ppp_get_nodeflate ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_nodeflate (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.11.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.11.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--nodeflate" title="The “nodeflate†property"><span class="type">“nodeflateâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-no-vj-comp"></a><h3>nm_setting_ppp_get_no_vj_comp ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_no_vj_comp (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.12.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.12.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--no-vj-comp" title="The “no-vj-comp†property"><span class="type">“no-vj-compâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-require-mppe"></a><h3>nm_setting_ppp_get_require_mppe ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_require_mppe (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.13.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.13.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe" title="The “require-mppe†property"><span class="type">“require-mppeâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-require-mppe-128"></a><h3>nm_setting_ppp_get_require_mppe_128 ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_require_mppe_128 (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.14.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.14.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe-128" title="The “require-mppe-128†property"><span class="type">“require-mppe-128â€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-mppe-stateful"></a><h3>nm_setting_ppp_get_mppe_stateful ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_mppe_stateful (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.15.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.15.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--mppe-stateful" title="The “mppe-stateful†property"><span class="type">“mppe-statefulâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-crtscts"></a><h3>nm_setting_ppp_get_crtscts ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_ppp_get_crtscts (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.16.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.16.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--crtscts" title="The “crtscts†property"><span class="type">“crtsctsâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-baud"></a><h3>nm_setting_ppp_get_baud ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ppp_get_baud (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.17.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.17.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--baud" title="The “baud†property"><span class="type">“baudâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-mru"></a><h3>nm_setting_ppp_get_mru ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ppp_get_mru (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.18.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.18.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--mru" title="The “mru†property"><span class="type">“mruâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-mtu"></a><h3>nm_setting_ppp_get_mtu ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ppp_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.19.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.19.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--mtu" title="The “mtu†property"><span class="type">“mtuâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-lcp-echo-failure"></a><h3>nm_setting_ppp_get_lcp_echo_failure ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ppp_get_lcp_echo_failure (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.20.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.20.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure" title="The “lcp-echo-failure†property"><span class="type">“lcp-echo-failureâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-ppp-get-lcp-echo-interval"></a><h3>nm_setting_ppp_get_lcp_echo_interval ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_ppp_get_lcp_echo_interval (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.23.9.21.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.23.9.21.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval" title="The “lcp-echo-interval†property"><span class="type">“lcp-echo-intervalâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
+cable and DSL modems and some mobile broadband devices.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingPPP.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingPPP.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-PPP-SETTING-NAME:CAPS"></a><h3>NM_SETTING_PPP_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_PPP_SETTING_NAME "ppp"
@@ -927,50 +145,45 @@ nm_setting_ppp_get_lcp_echo_interval (<em class="parameter"><code><a class="link
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPPError"></a><h3>enum NMSettingPPPError</h3>
-<div class="refsect3">
-<a name="id-1.2.23.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingPPPError-enum"></a><h3>enum NMSettingPPPError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_PPP_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_PPP_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_PPP_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED /*&lt; nick=RequireMPPENotAllowed &gt;*/
+} NMSettingPPPError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPP-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_PPP_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-PPP-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPP_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPP-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_PPP_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-PPP-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPP_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPP-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_PPP_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-PPP-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPP_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPP-ERROR-REQUIRE-MPPE-NOT-ALLOWED:CAPS"></a>NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED</p></td>
-<td class="enum_member_description">
-<p>requiring MPPE is not compatible
-with other setting configuration parameters</p>
+<td><p><a name="NM-SETTING-PPP-ERROR-REQUIRE-MPPE-NOT-ALLOWED:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED</code></span></p></td>
+<td>requiring MPPE is not compatible
+with other setting configuration parameters
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-PPP-ERROR:CAPS"></a><h3>NM_SETTING_PPP_ERROR</h3>
@@ -981,6 +194,24 @@ with other setting configuration parameters</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-ppp-error-quark"></a><h3>nm_setting_ppp_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_ppp_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-PPP-NOAUTH:CAPS"></a><h3>NM_SETTING_PPP_NOAUTH</h3>
<pre class="programlisting">#define NM_SETTING_PPP_NOAUTH "noauth"
</pre>
@@ -1123,157 +354,635 @@ with other setting configuration parameters</p>
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPPP-struct"></a><h3>NMSettingPPP</h3>
+<pre class="programlisting">typedef struct _NMSettingPPP NMSettingPPP;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPPPClass"></a><h3>NMSettingPPPClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingPPPClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-new"></a><h3>nm_setting_ppp_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_ppp_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-noauth"></a><h3>nm_setting_ppp_get_noauth ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_noauth (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--noauth" title='The "noauth" property'><span class="type">"noauth"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-refuse-eap"></a><h3>nm_setting_ppp_get_refuse_eap ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_refuse_eap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-eap" title='The "refuse-eap" property'><span class="type">"refuse-eap"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-refuse-pap"></a><h3>nm_setting_ppp_get_refuse_pap ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_refuse_pap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-pap" title='The "refuse-pap" property'><span class="type">"refuse-pap"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-refuse-chap"></a><h3>nm_setting_ppp_get_refuse_chap ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_refuse_chap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-chap" title='The "refuse-chap" property'><span class="type">"refuse-chap"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-refuse-mschap"></a><h3>nm_setting_ppp_get_refuse_mschap ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_refuse_mschap (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschap" title='The "refuse-mschap" property'><span class="type">"refuse-mschap"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-refuse-mschapv2"></a><h3>nm_setting_ppp_get_refuse_mschapv2 ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_refuse_mschapv2 (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2" title='The "refuse-mschapv2" property'><span class="type">"refuse-mschapv2"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-nobsdcomp"></a><h3>nm_setting_ppp_get_nobsdcomp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_nobsdcomp (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--nobsdcomp" title='The "nobsdcomp" property'><span class="type">"nobsdcomp"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-nodeflate"></a><h3>nm_setting_ppp_get_nodeflate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_nodeflate (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--nodeflate" title='The "nodeflate" property'><span class="type">"nodeflate"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-no-vj-comp"></a><h3>nm_setting_ppp_get_no_vj_comp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_no_vj_comp (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--no-vj-comp" title='The "no-vj-comp" property'><span class="type">"no-vj-comp"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-require-mppe"></a><h3>nm_setting_ppp_get_require_mppe ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_require_mppe (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe" title='The "require-mppe" property'><span class="type">"require-mppe"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-require-mppe-128"></a><h3>nm_setting_ppp_get_require_mppe_128 ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_require_mppe_128 (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe-128" title='The "require-mppe-128" property'><span class="type">"require-mppe-128"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-mppe-stateful"></a><h3>nm_setting_ppp_get_mppe_stateful ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_mppe_stateful (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--mppe-stateful" title='The "mppe-stateful" property'><span class="type">"mppe-stateful"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-crtscts"></a><h3>nm_setting_ppp_get_crtscts ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_ppp_get_crtscts (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--crtscts" title='The "crtscts" property'><span class="type">"crtscts"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-baud"></a><h3>nm_setting_ppp_get_baud ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ppp_get_baud (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--baud" title='The "baud" property'><span class="type">"baud"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-mru"></a><h3>nm_setting_ppp_get_mru ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ppp_get_mru (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--mru" title='The "mru" property'><span class="type">"mru"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-mtu"></a><h3>nm_setting_ppp_get_mtu ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ppp_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--mtu" title='The "mtu" property'><span class="type">"mtu"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-lcp-echo-failure"></a><h3>nm_setting_ppp_get_lcp_echo_failure ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ppp_get_lcp_echo_failure (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure" title='The "lcp-echo-failure" property'><span class="type">"lcp-echo-failure"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ppp-get-lcp-echo-interval"></a><h3>nm_setting_ppp_get_lcp_echo_interval ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_ppp_get_lcp_echo_interval
+ (<em class="parameter"><code><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval" title='The "lcp-echo-interval" property'><span class="type">"lcp-echo-interval"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<div class="refsect1">
<a name="NMSettingPPP.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingPPP--baud"></a><h3>The <code class="literal">“baudâ€</code> property</h3>
-<pre class="programlisting"> “baud†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, instruct pppd to set the serial port to the specified baudrate. This value should normally be left as 0 to automatically choose the speed.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--baud"></a><h3>The <code class="literal">"baud"</code> property</h3>
+<pre class="programlisting"> "baud" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+If non-zero, instruct pppd to set the serial port to the specified
+baudrate. This value should normally be left as 0 to automatically
+choose the speed.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--crtscts"></a><h3>The <code class="literal">“crtsctsâ€</code> property</h3>
-<pre class="programlisting"> “crtscts†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, specify that pppd should set the serial port to use hardware flow control with RTS and CTS signals. This value should normally be set to FALSE.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--crtscts"></a><h3>The <code class="literal">"crtscts"</code> property</h3>
+<pre class="programlisting"> "crtscts" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, specify that pppd should set the serial port to use hardware
+flow control with RTS and CTS signals. This value should normally be set
+to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--lcp-echo-failure"></a><h3>The <code class="literal">“lcp-echo-failureâ€</code> property</h3>
-<pre class="programlisting"> “lcp-echo-failure†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, instruct pppd to presume the connection to the peer has failed if the specified number of LCP echo-requests go unanswered by the peer. The 'lcp-echo-interval' property must also be set to a non-zero value if this property is used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--lcp-echo-failure"></a><h3>The <code class="literal">"lcp-echo-failure"</code> property</h3>
+<pre class="programlisting"> "lcp-echo-failure" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+If non-zero, instruct pppd to presume the connection to the peer has
+failed if the specified number of LCP echo-requests go unanswered by the
+peer. The "lcp-echo-interval" property must also be set to a non-zero
+value if this property is used.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--lcp-echo-interval"></a><h3>The <code class="literal">“lcp-echo-intervalâ€</code> property</h3>
-<pre class="programlisting"> “lcp-echo-interval†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, instruct pppd to send an LCP echo-request frame to the peer every n seconds (where n is the specified value). Note that some PPP peers will respond to echo requests and some will not, and it is not possible to autodetect this.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--lcp-echo-interval"></a><h3>The <code class="literal">"lcp-echo-interval"</code> property</h3>
+<pre class="programlisting"> "lcp-echo-interval" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+If non-zero, instruct pppd to send an LCP echo-request frame to the peer
+every n seconds (where n is the specified value). Note that some PPP
+peers will respond to echo requests and some will not, and it is not
+possible to autodetect this.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--mppe-stateful"></a><h3>The <code class="literal">“mppe-statefulâ€</code> property</h3>
-<pre class="programlisting"> “mppe-stateful†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--mppe-stateful"></a><h3>The <code class="literal">"mppe-stateful"</code> property</h3>
+<pre class="programlisting"> "mppe-stateful" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, stateful MPPE is used. See pppd documentation for more
+information on stateful MPPE.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--mru"></a><h3>The <code class="literal">“mruâ€</code> property</h3>
-<pre class="programlisting"> “mru†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, instruct pppd to request that the peer send packets no larger than the specified size. If non-zero, the MRU should be between 128 and 16384.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--mru"></a><h3>The <code class="literal">"mru"</code> property</h3>
+<pre class="programlisting"> "mru" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+If non-zero, instruct pppd to request that the peer send packets no
+larger than the specified size. If non-zero, the MRU should be between
+128 and 16384.
+</p>
<p>Allowed values: &lt;= 16384</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--mtu"></a><h3>The <code class="literal">“mtuâ€</code> property</h3>
-<pre class="programlisting"> “mtu†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, instruct pppd to send packets no larger than the specified size.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--mtu"></a><h3>The <code class="literal">"mtu"</code> property</h3>
+<pre class="programlisting"> "mtu" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+If non-zero, instruct pppd to send packets no larger than the specified
+size.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--no-vj-comp"></a><h3>The <code class="literal">“no-vj-compâ€</code> property</h3>
-<pre class="programlisting"> “no-vj-comp†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, Van Jacobsen TCP header compression will not be requested.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--no-vj-comp"></a><h3>The <code class="literal">"no-vj-comp"</code> property</h3>
+<pre class="programlisting"> "no-vj-comp" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, Van Jacobsen TCP header compression will not be requested.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--noauth"></a><h3>The <code class="literal">“noauthâ€</code> property</h3>
-<pre class="programlisting"> “noauth†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, do not require the other side (usually the PPP server) to authenticate itself to the client. If FALSE, require authentication from the remote side. In almost all cases, this should be TRUE.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--noauth"></a><h3>The <code class="literal">"noauth"</code> property</h3>
+<pre class="programlisting"> "noauth" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, do not require the other side (usually the PPP server) to
+authenticate itself to the client. If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, require authentication
+from the remote side. In almost all cases, this should be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.
+</p>
<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--nobsdcomp"></a><h3>The <code class="literal">“nobsdcompâ€</code> property</h3>
-<pre class="programlisting"> “nobsdcomp†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, BSD compression will not be requested.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--nobsdcomp"></a><h3>The <code class="literal">"nobsdcomp"</code> property</h3>
+<pre class="programlisting"> "nobsdcomp" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, BSD compression will not be requested.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--nodeflate"></a><h3>The <code class="literal">“nodeflateâ€</code> property</h3>
-<pre class="programlisting"> “nodeflate†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, 'deflate' compression will not be requested.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--nodeflate"></a><h3>The <code class="literal">"nodeflate"</code> property</h3>
+<pre class="programlisting"> "nodeflate" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, "deflate" compression will not be requested.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--refuse-chap"></a><h3>The <code class="literal">“refuse-chapâ€</code> property</h3>
-<pre class="programlisting"> “refuse-chap†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, the CHAP authentication method will not be used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--refuse-chap"></a><h3>The <code class="literal">"refuse-chap"</code> property</h3>
+<pre class="programlisting"> "refuse-chap" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the CHAP authentication method will not be used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--refuse-eap"></a><h3>The <code class="literal">“refuse-eapâ€</code> property</h3>
-<pre class="programlisting"> “refuse-eap†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, the EAP authentication method will not be used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--refuse-eap"></a><h3>The <code class="literal">"refuse-eap"</code> property</h3>
+<pre class="programlisting"> "refuse-eap" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the EAP authentication method will not be used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--refuse-mschap"></a><h3>The <code class="literal">“refuse-mschapâ€</code> property</h3>
-<pre class="programlisting"> “refuse-mschap†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, the MSCHAP authentication method will not be used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--refuse-mschap"></a><h3>The <code class="literal">"refuse-mschap"</code> property</h3>
+<pre class="programlisting"> "refuse-mschap" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the MSCHAP authentication method will not be used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--refuse-mschapv2"></a><h3>The <code class="literal">“refuse-mschapv2â€</code> property</h3>
-<pre class="programlisting"> “refuse-mschapv2†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, the MSCHAPv2 authentication method will not be used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--refuse-mschapv2"></a><h3>The <code class="literal">"refuse-mschapv2"</code> property</h3>
+<pre class="programlisting"> "refuse-mschapv2" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the MSCHAPv2 authentication method will not be used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--refuse-pap"></a><h3>The <code class="literal">“refuse-papâ€</code> property</h3>
-<pre class="programlisting"> “refuse-pap†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, the PAP authentication method will not be used.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--refuse-pap"></a><h3>The <code class="literal">"refuse-pap"</code> property</h3>
+<pre class="programlisting"> "refuse-pap" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the PAP authentication method will not be used.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--require-mppe"></a><h3>The <code class="literal">“require-mppeâ€</code> property</h3>
-<pre class="programlisting"> “require-mppe†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, MPPE (Microsoft Point-to-Point Encrpytion) will be required for the PPP session. If either 64-bit or 128-bit MPPE is not available the session will fail. Note that MPPE is not used on mobile broadband connections.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--require-mppe"></a><h3>The <code class="literal">"require-mppe"</code> property</h3>
+<pre class="programlisting"> "require-mppe" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, MPPE (Microsoft Point-to-Point Encrpytion) will be required for
+the PPP session. If either 64-bit or 128-bit MPPE is not available the
+session will fail. Note that MPPE is not used on mobile broadband
+connections.
+</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPP--require-mppe-128"></a><h3>The <code class="literal">“require-mppe-128â€</code> property</h3>
-<pre class="programlisting"> “require-mppe-128†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encrpytion) will be required for the PPP session, and the 'require-mppe' property must also be set to TRUE. If 128-bit MPPE is not available the session will fail.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingPPP--require-mppe-128"></a><h3>The <code class="literal">"require-mppe-128"</code> property</h3>
+<pre class="programlisting"> "require-mppe-128" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, 128-bit MPPE (Microsoft Point-to-Point Encrpytion) will be
+required for the PPP session, and the "require-mppe" property must also
+be set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>. If 128-bit MPPE is not available the session will fail.
+</p>
<p>Default value: FALSE</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingPPPOE.html b/docs/libnm-util/html/NMSettingPPPOE.html
index 426fe9c5e..0bfb23726 100644
--- a/docs/libnm-util/html/NMSettingPPPOE.html
+++ b/docs/libnm-util/html/NMSettingPPPOE.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingPPPOE</title>
+<title>NMSettingPPPOE</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingPPP.html" title="NMSettingPPP">
<link rel="next" href="NMSettingVPN.html" title="NMSettingVPN">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingPPPOE.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingPPPOE.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingPPPOE.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingPPP.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingVPN.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingPPP.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingVPN.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingPPPOE.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingPPPOE.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingPPPOE.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingPPPOE.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingPPPOE"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,290 +37,62 @@
<h2><span class="refentrytitle"><a name="NMSettingPPPOE.top_of_page"></a>NMSettingPPPOE</span></h2>
<p>NMSettingPPPOE — Describes PPPoE connection properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingPPPOE.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-error-quark" title="nm_setting_pppoe_error_quark ()">nm_setting_pppoe_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-new" title="nm_setting_pppoe_new ()">nm_setting_pppoe_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-service" title="nm_setting_pppoe_get_service ()">nm_setting_pppoe_get_service</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-username" title="nm_setting_pppoe_get_username ()">nm_setting_pppoe_get_username</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password" title="nm_setting_pppoe_get_password ()">nm_setting_pppoe_get_password</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags" title="nm_setting_pppoe_get_password_flags ()">nm_setting_pppoe_get_password_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingPPPOE.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title="The “password†property">password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password-flags" title="The “password-flags†property">password-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--service" title="The “service†property">service</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--username" title="The “username†property">username</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingPPPOE.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-SETTING-NAME:CAPS" title="NM_SETTING_PPPOE_SETTING_NAME">NM_SETTING_PPPOE_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEError" title="enum NMSettingPPPOEError">NMSettingPPPOEError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR:CAPS" title="NM_SETTING_PPPOE_ERROR">NM_SETTING_PPPOE_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-SERVICE:CAPS" title="NM_SETTING_PPPOE_SERVICE">NM_SETTING_PPPOE_SERVICE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-USERNAME:CAPS" title="NM_SETTING_PPPOE_USERNAME">NM_SETTING_PPPOE_USERNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD:CAPS" title="NM_SETTING_PPPOE_PASSWORD">NM_SETTING_PPPOE_PASSWORD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS" title="NM_SETTING_PPPOE_PASSWORD_FLAGS">NM_SETTING_PPPOE_PASSWORD_FLAGS</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingPPPOE.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingPPPOEError"></a><pre class="synopsis">
+#include &lt;nm-setting-pppoe.h&gt;
+
+#define <a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-SETTING-NAME:CAPS" title="NM_SETTING_PPPOE_SETTING_NAME">NM_SETTING_PPPOE_SETTING_NAME</a>
+enum <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEError-enum" title="enum NMSettingPPPOEError">NMSettingPPPOEError</a>;
+#define <a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR:CAPS" title="NM_SETTING_PPPOE_ERROR">NM_SETTING_PPPOE_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-error-quark" title="nm_setting_pppoe_error_quark ()">nm_setting_pppoe_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-SERVICE:CAPS" title="NM_SETTING_PPPOE_SERVICE">NM_SETTING_PPPOE_SERVICE</a>
+#define <a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-USERNAME:CAPS" title="NM_SETTING_PPPOE_USERNAME">NM_SETTING_PPPOE_USERNAME</a>
+#define <a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD:CAPS" title="NM_SETTING_PPPOE_PASSWORD">NM_SETTING_PPPOE_PASSWORD</a>
+#define <a class="link" href="NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS" title="NM_SETTING_PPPOE_PASSWORD_FLAGS">NM_SETTING_PPPOE_PASSWORD_FLAGS</a>
+ <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE-struct" title="NMSettingPPPOE">NMSettingPPPOE</a>;
+ <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEClass" title="NMSettingPPPOEClass">NMSettingPPPOEClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-new" title="nm_setting_pppoe_new ()">nm_setting_pppoe_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-service" title="nm_setting_pppoe_get_service ()">nm_setting_pppoe_get_service</a> (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-username" title="nm_setting_pppoe_get_username ()">nm_setting_pppoe_get_username</a> (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password" title="nm_setting_pppoe_get_password ()">nm_setting_pppoe_get_password</a> (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags" title="nm_setting_pppoe_get_password_flags ()">nm_setting_pppoe_get_password_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingPPPOE.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingPPPOEError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingPPPOE
+<pre class="synopsis">
+ GEnum
+ +----NMSettingPPPOEError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingPPPOE
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingPPPOE.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-pppoe.h&gt;
+<a name="NMSettingPPPOE.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title='The "password" property'>password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password-flags" title='The "password-flags" property'>password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--service" title='The "service" property'>service</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--username" title='The "username" property'>username</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
</pre>
</div>
<div class="refsect1">
<a name="NMSettingPPPOE.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+<p>
+The <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
properties necessary for connection to networks that require PPPoE connections
-to provide IP transport, for example cable or DSL modems.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingPPPOE.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-pppoe-error-quark"></a><h3>nm_setting_pppoe_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_pppoe_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.24.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-pppoe-new"></a><h3>nm_setting_pppoe_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_pppoe_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.24.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-pppoe-get-service"></a><h3>nm_setting_pppoe_get_service ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_pppoe_get_service (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.24.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.24.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--service" title="The “service†property"><span class="type">“serviceâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-pppoe-get-username"></a><h3>nm_setting_pppoe_get_username ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_pppoe_get_username (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.24.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.24.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--username" title="The “username†property"><span class="type">“usernameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-pppoe-get-password"></a><h3>nm_setting_pppoe_get_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_pppoe_get_password (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.24.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.24.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title="The “password†property"><span class="type">“passwordâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-pppoe-get-password-flags"></a><h3>nm_setting_pppoe_get_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_pppoe_get_password_flags (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.24.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.24.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title="The “password†property"><span class="type">“passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
+to provide IP transport, for example cable or DSL modems.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingPPPOE.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingPPPOE.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-PPPOE-SETTING-NAME:CAPS"></a><h3>NM_SETTING_PPPOE_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_PPPOE_SETTING_NAME "pppoe"
@@ -324,50 +102,45 @@ nm_setting_pppoe_get_password_flags (<em class="parameter"><code><a class="link"
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPPOEError"></a><h3>enum NMSettingPPPOEError</h3>
-<div class="refsect3">
-<a name="id-1.2.24.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingPPPOEError-enum"></a><h3>enum NMSettingPPPOEError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_PPPOE_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING /*&lt; nick=MissingPPPSetting &gt;*/
+} NMSettingPPPOEError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPPOE-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_PPPOE_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-PPPOE-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPPOE_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPPOE-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-PPPOE-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPPOE-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-PPPOE-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-PPPOE-ERROR-MISSING-PPP-SETTING:CAPS"></a>NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING</p></td>
-<td class="enum_member_description">
-<p>the connection
-did not contain a required PPP setting for PPP related options</p>
+<td><p><a name="NM-SETTING-PPPOE-ERROR-MISSING-PPP-SETTING:CAPS"></a><span class="term"><code class="literal">NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING</code></span></p></td>
+<td>the connection
+did not contain a required PPP setting for PPP related options
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-PPPOE-ERROR:CAPS"></a><h3>NM_SETTING_PPPOE_ERROR</h3>
@@ -378,6 +151,24 @@ did not contain a required PPP setting for PPP related options</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-pppoe-error-quark"></a><h3>nm_setting_pppoe_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_pppoe_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-PPPOE-SERVICE:CAPS"></a><h3>NM_SETTING_PPPOE_SERVICE</h3>
<pre class="programlisting">#define NM_SETTING_PPPOE_SERVICE "service"
</pre>
@@ -408,45 +199,184 @@ did not contain a required PPP setting for PPP related options</p>
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPPPOE-struct"></a><h3>NMSettingPPPOE</h3>
+<pre class="programlisting">typedef struct _NMSettingPPPOE NMSettingPPPOE;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPPPOEClass"></a><h3>NMSettingPPPOEClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingPPPOEClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-pppoe-new"></a><h3>nm_setting_pppoe_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_pppoe_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-pppoe-get-service"></a><h3>nm_setting_pppoe_get_service ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_pppoe_get_service (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--service" title='The "service" property'><span class="type">"service"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-pppoe-get-username"></a><h3>nm_setting_pppoe_get_username ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_pppoe_get_username (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--username" title='The "username" property'><span class="type">"username"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-pppoe-get-password"></a><h3>nm_setting_pppoe_get_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_pppoe_get_password (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title='The "password" property'><span class="type">"password"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-pppoe-get-password-flags"></a><h3>nm_setting_pppoe_get_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_pppoe_get_password_flags
+ (<em class="parameter"><code><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title='The "password" property'><span class="type">"password"</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<div class="refsect1">
<a name="NMSettingPPPOE.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingPPPOE--password"></a><h3>The <code class="literal">“passwordâ€</code> property</h3>
-<pre class="programlisting"> “password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Password used to authenticate with the PPPoE service.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingPPPOE--password"></a><h3>The <code class="literal">"password"</code> property</h3>
+<pre class="programlisting"> "password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Password used to authenticate with the PPPoE service.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPPOE--password-flags"></a><h3>The <code class="literal">“password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the PPPoE password.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingPPPOE--password-flags"></a><h3>The <code class="literal">"password-flags"</code> property</h3>
+<pre class="programlisting"> "password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
+<p>
+Flags indicating how to handle the <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title='The "password" property'><span class="type">"password"</span></a> property.
+</p>
<p>Allowed values: &lt;= 7</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPPOE--service"></a><h3>The <code class="literal">“serviceâ€</code> property</h3>
-<pre class="programlisting"> “service†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified serivce. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingPPPOE--service"></a><h3>The <code class="literal">"service"</code> property</h3>
+<pre class="programlisting"> "service" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+If specified, instruct PPPoE to only initiate sessions with access
+concentrators that provide the specified service. For most providers,
+this should be left blank. It is only required if there are multiple
+access concentrators or a specific service is known to be required.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingPPPOE--username"></a><h3>The <code class="literal">“usernameâ€</code> property</h3>
-<pre class="programlisting"> “username†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Username used to authenticate with the PPPoE service.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingPPPOE--username"></a><h3>The <code class="literal">"username"</code> property</h3>
+<pre class="programlisting"> "username" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Username used to authenticate with the PPPoE service.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingSerial.html b/docs/libnm-util/html/NMSettingSerial.html
index 8f1072692..ee5886feb 100644
--- a/docs/libnm-util/html/NMSettingSerial.html
+++ b/docs/libnm-util/html/NMSettingSerial.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingSerial</title>
+<title>NMSettingSerial</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingBluetooth.html" title="NMSettingBluetooth">
<link rel="next" href="NMSettingCdma.html" title="NMSettingCdma">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingSerial.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingSerial.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingSerial.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingBluetooth.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingCdma.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingBluetooth.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingCdma.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingSerial.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingSerial.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingSerial.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingSerial.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingSerial"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -32,333 +38,64 @@
<p>NMSettingSerial — Describes connection properties for devices that use
serial communications</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingSerial.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-error-quark" title="nm_setting_serial_error_quark ()">nm_setting_serial_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-new" title="nm_setting_serial_new ()">nm_setting_serial_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-baud" title="nm_setting_serial_get_baud ()">nm_setting_serial_get_baud</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-bits" title="nm_setting_serial_get_bits ()">nm_setting_serial_get_bits</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">char</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-parity" title="nm_setting_serial_get_parity ()">nm_setting_serial_get_parity</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-stopbits" title="nm_setting_serial_get_stopbits ()">nm_setting_serial_get_stopbits</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-send-delay" title="nm_setting_serial_get_send_delay ()">nm_setting_serial_get_send_delay</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingSerial.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingSerial.html#NMSettingSerial--baud" title="The “baud†property">baud</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingSerial.html#NMSettingSerial--bits" title="The “bits†property">bits</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingSerial.html#NMSettingSerial--parity" title="The “parity†property">parity</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingSerial.html#NMSettingSerial--send-delay" title="The “send-delay†property">send-delay</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingSerial.html#NMSettingSerial--stopbits" title="The “stopbits†property">stopbits</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingSerial.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-SETTING-NAME:CAPS" title="NM_SETTING_SERIAL_SETTING_NAME">NM_SETTING_SERIAL_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NMSettingSerialError" title="enum NMSettingSerialError">NMSettingSerialError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-ERROR:CAPS" title="NM_SETTING_SERIAL_ERROR">NM_SETTING_SERIAL_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-BAUD:CAPS" title="NM_SETTING_SERIAL_BAUD">NM_SETTING_SERIAL_BAUD</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-BITS:CAPS" title="NM_SETTING_SERIAL_BITS">NM_SETTING_SERIAL_BITS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-PARITY:CAPS" title="NM_SETTING_SERIAL_PARITY">NM_SETTING_SERIAL_PARITY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-STOPBITS:CAPS" title="NM_SETTING_SERIAL_STOPBITS">NM_SETTING_SERIAL_STOPBITS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-SEND-DELAY:CAPS" title="NM_SETTING_SERIAL_SEND_DELAY">NM_SETTING_SERIAL_SEND_DELAY</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingSerial.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingSerialError"></a><pre class="synopsis">
+#include &lt;nm-setting-serial.h&gt;
+
+#define <a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-SETTING-NAME:CAPS" title="NM_SETTING_SERIAL_SETTING_NAME">NM_SETTING_SERIAL_SETTING_NAME</a>
+enum <a class="link" href="NMSettingSerial.html#NMSettingSerialError-enum" title="enum NMSettingSerialError">NMSettingSerialError</a>;
+#define <a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-ERROR:CAPS" title="NM_SETTING_SERIAL_ERROR">NM_SETTING_SERIAL_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingSerial.html#nm-setting-serial-error-quark" title="nm_setting_serial_error_quark ()">nm_setting_serial_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-BAUD:CAPS" title="NM_SETTING_SERIAL_BAUD">NM_SETTING_SERIAL_BAUD</a>
+#define <a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-BITS:CAPS" title="NM_SETTING_SERIAL_BITS">NM_SETTING_SERIAL_BITS</a>
+#define <a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-PARITY:CAPS" title="NM_SETTING_SERIAL_PARITY">NM_SETTING_SERIAL_PARITY</a>
+#define <a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-STOPBITS:CAPS" title="NM_SETTING_SERIAL_STOPBITS">NM_SETTING_SERIAL_STOPBITS</a>
+#define <a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-SEND-DELAY:CAPS" title="NM_SETTING_SERIAL_SEND_DELAY">NM_SETTING_SERIAL_SEND_DELAY</a>
+ <a class="link" href="NMSettingSerial.html#NMSettingSerial-struct" title="NMSettingSerial">NMSettingSerial</a>;
+ <a class="link" href="NMSettingSerial.html#NMSettingSerialClass" title="NMSettingSerialClass">NMSettingSerialClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingSerial.html#nm-setting-serial-new" title="nm_setting_serial_new ()">nm_setting_serial_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingSerial.html#nm-setting-serial-get-baud" title="nm_setting_serial_get_baud ()">nm_setting_serial_get_baud</a> (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingSerial.html#nm-setting-serial-get-bits" title="nm_setting_serial_get_bits ()">nm_setting_serial_get_bits</a> (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);
+<span class="returnvalue">char</span> <a class="link" href="NMSettingSerial.html#nm-setting-serial-get-parity" title="nm_setting_serial_get_parity ()">nm_setting_serial_get_parity</a> (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingSerial.html#nm-setting-serial-get-stopbits" title="nm_setting_serial_get_stopbits ()">nm_setting_serial_get_stopbits</a> (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a> <a class="link" href="NMSettingSerial.html#nm-setting-serial-get-send-delay" title="nm_setting_serial_get_send_delay ()">nm_setting_serial_get_send_delay</a> (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingSerial.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingSerialError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingSerial
+<pre class="synopsis">
+ GEnum
+ +----NMSettingSerialError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingSerial
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingSerial.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-serial.h&gt;
+<a name="NMSettingSerial.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingSerial.html#NMSettingSerial--baud" title='The "baud" property'>baud</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingSerial.html#NMSettingSerial--bits" title='The "bits" property'>bits</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingSerial.html#NMSettingSerial--parity" title='The "parity" property'>parity</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingSerial.html#NMSettingSerial--send-delay" title='The "send-delay" property'>send-delay</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingSerial.html#NMSettingSerial--stopbits" title='The "stopbits" property'>stopbits</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
</pre>
</div>
<div class="refsect1">
<a name="NMSettingSerial.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+<p>
+The <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
properties necessary for connections that may use serial communications,
-such as mobile broadband or analog telephone connections.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingSerial.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-serial-error-quark"></a><h3>nm_setting_serial_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_serial_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.9.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-serial-new"></a><h3>nm_setting_serial_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_serial_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.9.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-serial-get-baud"></a><h3>nm_setting_serial_get_baud ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-nm_setting_serial_get_baud (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingSerial.html#NMSettingSerial--baud" title="The “baud†property"><span class="type">“baudâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-serial-get-bits"></a><h3>nm_setting_serial_get_bits ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-nm_setting_serial_get_bits (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingSerial.html#NMSettingSerial--bits" title="The “bits†property"><span class="type">“bitsâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-serial-get-parity"></a><h3>nm_setting_serial_get_parity ()</h3>
-<pre class="programlisting"><span class="returnvalue">char</span>
-nm_setting_serial_get_parity (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingSerial.html#NMSettingSerial--parity" title="The “parity†property"><span class="type">“parityâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-serial-get-stopbits"></a><h3>nm_setting_serial_get_stopbits ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-nm_setting_serial_get_stopbits (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingSerial.html#NMSettingSerial--stopbits" title="The “stopbits†property"><span class="type">“stopbitsâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-serial-get-send-delay"></a><h3>nm_setting_serial_get_send_delay ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
-nm_setting_serial_get_send_delay (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.9.8.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingSerial.html#NMSettingSerial--send-delay" title="The “send-delay†property"><span class="type">“send-delayâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
+such as mobile broadband or analog telephone connections.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingSerial.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingSerial.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-SERIAL-SETTING-NAME:CAPS"></a><h3>NM_SETTING_SERIAL_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_SERIAL_SETTING_NAME "serial"
@@ -368,50 +105,45 @@ nm_setting_serial_get_send_delay (<em class="parameter"><code><a class="link" hr
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingSerialError"></a><h3>enum NMSettingSerialError</h3>
-<div class="refsect3">
-<a name="id-1.2.9.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingSerialError-enum"></a><h3>enum NMSettingSerialError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_SERIAL_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING /*&lt; nick=MissingPPPSetting &gt;*/
+} NMSettingSerialError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SERIAL-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_SERIAL_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-SERIAL-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SERIAL_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SERIAL-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-SERIAL-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SERIAL-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-SERIAL-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-SERIAL-ERROR-MISSING-PPP-SETTING:CAPS"></a>NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING</p></td>
-<td class="enum_member_description">
-<p>one of the properties of the
-setting requires the connection to contain an <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> setting</p>
+<td><p><a name="NM-SETTING-SERIAL-ERROR-MISSING-PPP-SETTING:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING</code></span></p></td>
+<td>one of the properties of the
+setting requires the connection to contain an <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> setting
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-SERIAL-ERROR:CAPS"></a><h3>NM_SETTING_SERIAL_ERROR</h3>
@@ -422,6 +154,24 @@ setting requires the connection to contain an <a class="link" href="NMSettingPPP
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-serial-error-quark"></a><h3>nm_setting_serial_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_serial_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-SERIAL-BAUD:CAPS"></a><h3>NM_SETTING_SERIAL_BAUD</h3>
<pre class="programlisting">#define NM_SETTING_SERIAL_BAUD "baud"
</pre>
@@ -460,48 +210,209 @@ setting requires the connection to contain an <a class="link" href="NMSettingPPP
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingSerial-struct"></a><h3>NMSettingSerial</h3>
+<pre class="programlisting">typedef struct _NMSettingSerial NMSettingSerial;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingSerialClass"></a><h3>NMSettingSerialClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingSerialClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-serial-new"></a><h3>nm_setting_serial_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_serial_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-serial-get-baud"></a><h3>nm_setting_serial_get_baud ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_setting_serial_get_baud (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html#NMSettingSerial--baud" title='The "baud" property'><span class="type">"baud"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-serial-get-bits"></a><h3>nm_setting_serial_get_bits ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_setting_serial_get_bits (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html#NMSettingSerial--bits" title='The "bits" property'><span class="type">"bits"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-serial-get-parity"></a><h3>nm_setting_serial_get_parity ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> nm_setting_serial_get_parity (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html#NMSettingSerial--parity" title='The "parity" property'><span class="type">"parity"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-serial-get-stopbits"></a><h3>nm_setting_serial_get_stopbits ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> nm_setting_serial_get_stopbits (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html#NMSettingSerial--stopbits" title='The "stopbits" property'><span class="type">"stopbits"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-serial-get-send-delay"></a><h3>nm_setting_serial_get_send_delay ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a> nm_setting_serial_get_send_delay (<em class="parameter"><code><a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingSerial.html#NMSettingSerial--send-delay" title='The "send-delay" property'><span class="type">"send-delay"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<div class="refsect1">
<a name="NMSettingSerial.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingSerial--baud"></a><h3>The <code class="literal">“baudâ€</code> property</h3>
-<pre class="programlisting"> “baud†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingSerial--baud"></a><h3>The <code class="literal">"baud"</code> property</h3>
+<pre class="programlisting"> "baud" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+Speed to use for communication over the serial port. Note that this
+value usually has no effect for mobile broadband modems as they generally
+ignore speed settings and use the highest available speed.
+</p>
<p>Default value: 57600</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingSerial--bits"></a><h3>The <code class="literal">“bitsâ€</code> property</h3>
-<pre class="programlisting"> “bits†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Byte-width of the serial communication. The 8 in '8n1' for example.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingSerial--bits"></a><h3>The <code class="literal">"bits"</code> property</h3>
+<pre class="programlisting"> "bits" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+Byte-width of the serial communication. The 8 in "8n1" for example.
+</p>
<p>Allowed values: [5,8]</p>
<p>Default value: 8</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingSerial--parity"></a><h3>The <code class="literal">“parityâ€</code> property</h3>
-<pre class="programlisting"> “parity†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a></pre>
-<p>Parity setting of the serial port. Either 'E' for even parity, 'o' for odd parity, or 'n' for no parity.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingSerial--parity"></a><h3>The <code class="literal">"parity"</code> property</h3>
+<pre class="programlisting"> "parity" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> : Read / Write / Construct</pre>
+<p>
+Parity setting of the serial port. Either 'E' for even parity, 'o' for
+odd parity, or 'n' for no parity.
+</p>
<p>Allowed values: [69,111]</p>
<p>Default value: 110</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingSerial--send-delay"></a><h3>The <code class="literal">“send-delayâ€</code> property</h3>
-<pre class="programlisting"> “send-delay†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
-<p>Time to delay between each byte sent to the modem, in microseconds.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingSerial--send-delay"></a><h3>The <code class="literal">"send-delay"</code> property</h3>
+<pre class="programlisting"> "send-delay" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> : Read / Write / Construct</pre>
+<p>
+Time to delay between each byte sent to the modem, in microseconds.
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingSerial--stopbits"></a><h3>The <code class="literal">“stopbitsâ€</code> property</h3>
-<pre class="programlisting"> “stopbits†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in '8n1' for example.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingSerial--stopbits"></a><h3>The <code class="literal">"stopbits"</code> property</h3>
+<pre class="programlisting"> "stopbits" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+Number of stop bits for communication on the serial port. Either 1 or 2.
+The 1 in "8n1" for example.
+</p>
<p>Allowed values: [1,2]</p>
<p>Default value: 1</p>
</div>
@@ -509,6 +420,6 @@ setting requires the connection to contain an <a class="link" href="NMSettingPPP
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingTeam.html b/docs/libnm-util/html/NMSettingTeam.html
new file mode 100644
index 000000000..024575eba
--- /dev/null
+++ b/docs/libnm-util/html/NMSettingTeam.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingTeam</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm-util Reference Manual">
+<link rel="up" href="ch01.html" title="libnm-util API Reference">
+<link rel="prev" href="NMSettingBridgePort.html" title="NMSettingBridgePort">
+<link rel="next" href="NMSettingTeamPort.html" title="NMSettingTeamPort">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingBridgePort.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingTeamPort.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingTeam.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingTeam.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingTeam.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingTeam.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMSettingTeam"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingTeam.top_of_page"></a>NMSettingTeam</span></h2>
+<p>NMSettingTeam — Describes connection properties for teams</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingTeam.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingTeamError"></a><pre class="synopsis">
+#include &lt;nm-setting-team.h&gt;
+
+#define <a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-SETTING-NAME:CAPS" title="NM_SETTING_TEAM_SETTING_NAME">NM_SETTING_TEAM_SETTING_NAME</a>
+enum <a class="link" href="NMSettingTeam.html#NMSettingTeamError-enum" title="enum NMSettingTeamError">NMSettingTeamError</a>;
+#define <a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-ERROR:CAPS" title="NM_SETTING_TEAM_ERROR">NM_SETTING_TEAM_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingTeam.html#nm-setting-team-error-quark" title="nm_setting_team_error_quark ()">nm_setting_team_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-INTERFACE-NAME:CAPS" title="NM_SETTING_TEAM_INTERFACE_NAME">NM_SETTING_TEAM_INTERFACE_NAME</a>
+#define <a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-CONFIG:CAPS" title="NM_SETTING_TEAM_CONFIG">NM_SETTING_TEAM_CONFIG</a>
+ <a class="link" href="NMSettingTeam.html#NMSettingTeam-struct" title="NMSettingTeam">NMSettingTeam</a>;
+ <a class="link" href="NMSettingTeam.html#NMSettingTeamClass" title="NMSettingTeamClass">NMSettingTeamClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingTeam.html#nm-setting-team-new" title="nm_setting_team_new ()">nm_setting_team_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingTeam.html#nm-setting-team-get-interface-name" title="nm_setting_team_get_interface_name ()">nm_setting_team_get_interface_name</a> (<em class="parameter"><code><a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingTeam.html#nm-setting-team-get-config" title="nm_setting_team_get_config ()">nm_setting_team_get_config</a> (<em class="parameter"><code><a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeam.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingTeamError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingTeam
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeam.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingTeam.html#NMSettingTeam--config" title='The "config" property'>config</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingTeam.html#NMSettingTeam--interface-name" title='The "interface-name" property'>interface-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeam.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for team connections.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeam.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-TEAM-SETTING-NAME:CAPS"></a><h3>NM_SETTING_TEAM_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_TEAM_SETTING_NAME "team"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeamError-enum"></a><h3>enum NMSettingTeamError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_TEAM_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_TEAM_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_TEAM_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+} NMSettingTeamError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-SETTING-TEAM-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_TEAM_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-TEAM-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_TEAM_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-TEAM-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_TEAM_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-TEAM-ERROR:CAPS"></a><h3>NM_SETTING_TEAM_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_TEAM_ERROR nm_setting_team_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-team-error-quark"></a><h3>nm_setting_team_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_team_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-TEAM-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_TEAM_INTERFACE_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_TEAM_INTERFACE_NAME "interface-name"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-TEAM-CONFIG:CAPS"></a><h3>NM_SETTING_TEAM_CONFIG</h3>
+<pre class="programlisting">#define NM_SETTING_TEAM_CONFIG "config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeam-struct"></a><h3>NMSettingTeam</h3>
+<pre class="programlisting">typedef struct _NMSettingTeam NMSettingTeam;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeamClass"></a><h3>NMSettingTeamClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingTeamClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-team-new"></a><h3>nm_setting_team_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_team_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-team-get-interface-name"></a><h3>nm_setting_team_get_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_team_get_interface_name (<em class="parameter"><code><a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingTeam.html#NMSettingTeam--interface-name" title='The "interface-name" property'><span class="type">"interface-name"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-team-get-config"></a><h3>nm_setting_team_get_config ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_team_get_config (<em class="parameter"><code><a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingTeam.html#NMSettingTeam--config" title='The "config" property'><span class="type">"config"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeam.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMSettingTeam--config"></a><h3>The <code class="literal">"config"</code> property</h3>
+<pre class="programlisting"> "config" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The JSON configuration for the team network interface. The property
+should contain raw JSON configuration data suitable for teamd, because
+the value is passed directly to teamd. If not specified, the default
+configuration is used. See man teamd.conf for the format details.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeam--interface-name"></a><h3>The <code class="literal">"interface-name"</code> property</h3>
+<pre class="programlisting"> "interface-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The name of the virtual in-kernel team network interface
+</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingTeamPort.html b/docs/libnm-util/html/NMSettingTeamPort.html
new file mode 100644
index 000000000..e91aa68b6
--- /dev/null
+++ b/docs/libnm-util/html/NMSettingTeamPort.html
@@ -0,0 +1,247 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingTeamPort</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm-util Reference Manual">
+<link rel="up" href="ch01.html" title="libnm-util API Reference">
+<link rel="prev" href="NMSettingTeam.html" title="NMSettingTeam">
+<link rel="next" href="NMSettingGeneric.html" title="NMSettingGeneric">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingTeam.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingGeneric.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingTeamPort.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingTeamPort.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingTeamPort.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingTeamPort.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMSettingTeamPort"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingTeamPort.top_of_page"></a>NMSettingTeamPort</span></h2>
+<p>NMSettingTeamPort — Describes connection properties for team ports</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingTeamPort.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingTeamPortError"></a><pre class="synopsis">
+#include &lt;nm-setting-team-port.h&gt;
+
+#define <a class="link" href="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS" title="NM_SETTING_TEAM_PORT_SETTING_NAME">NM_SETTING_TEAM_PORT_SETTING_NAME</a>
+enum <a class="link" href="NMSettingTeamPort.html#NMSettingTeamPortError-enum" title="enum NMSettingTeamPortError">NMSettingTeamPortError</a>;
+#define <a class="link" href="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR:CAPS" title="NM_SETTING_TEAM_PORT_ERROR">NM_SETTING_TEAM_PORT_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingTeamPort.html#nm-setting-team-port-error-quark" title="nm_setting_team_port_error_quark ()">nm_setting_team_port_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-CONFIG:CAPS" title="NM_SETTING_TEAM_PORT_CONFIG">NM_SETTING_TEAM_PORT_CONFIG</a>
+ <a class="link" href="NMSettingTeamPort.html#NMSettingTeamPort-struct" title="NMSettingTeamPort">NMSettingTeamPort</a>;
+ <a class="link" href="NMSettingTeamPort.html#NMSettingTeamPortClass" title="NMSettingTeamPortClass">NMSettingTeamPortClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingTeamPort.html#nm-setting-team-port-new" title="nm_setting_team_port_new ()">nm_setting_team_port_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingTeamPort.html#nm-setting-team-port-get-config" title="nm_setting_team_port_get_config ()">nm_setting_team_port_get_config</a> (<em class="parameter"><code><a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeamPort.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingTeamPortError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingTeamPort
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeamPort.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingTeamPort.html#NMSettingTeamPort--config" title='The "config" property'>config</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeamPort.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+optional properties that apply to team ports.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeamPort.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS"></a><h3>NM_SETTING_TEAM_PORT_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_TEAM_PORT_SETTING_NAME "team-port"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeamPortError-enum"></a><h3>enum NMSettingTeamPortError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_TEAM_PORT_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+} NMSettingTeamPortError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-SETTING-TEAM-PORT-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_TEAM_PORT_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-TEAM-PORT-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-TEAM-PORT-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and
+is required
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-TEAM-PORT-ERROR:CAPS"></a><h3>NM_SETTING_TEAM_PORT_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_TEAM_PORT_ERROR nm_setting_team_port_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-team-port-error-quark"></a><h3>nm_setting_team_port_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_team_port_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-TEAM-PORT-CONFIG:CAPS"></a><h3>NM_SETTING_TEAM_PORT_CONFIG</h3>
+<pre class="programlisting">#define NM_SETTING_TEAM_PORT_CONFIG "config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeamPort-struct"></a><h3>NMSettingTeamPort</h3>
+<pre class="programlisting">typedef struct _NMSettingTeamPort NMSettingTeamPort;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeamPortClass"></a><h3>NMSettingTeamPortClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingTeamPortClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-team-port-new"></a><h3>nm_setting_team_port_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_team_port_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-team-port-get-config"></a><h3>nm_setting_team_port_get_config ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_team_port_get_config (<em class="parameter"><code><a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingTeamPort.html#NMSettingTeamPort--config" title='The "config" property'><span class="type">"config"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMSettingTeamPort.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMSettingTeamPort--config"></a><h3>The <code class="literal">"config"</code> property</h3>
+<pre class="programlisting"> "config" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+The JSON configuration for the team port. The property should contain raw
+JSON configuration data suitable for teamd, because the value is passed
+directly to teamd. If not specified, the default configuration is
+used. See man teamd.conf for the format details.
+</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingVPN.html b/docs/libnm-util/html/NMSettingVPN.html
index 570391788..646871a07 100644
--- a/docs/libnm-util/html/NMSettingVPN.html
+++ b/docs/libnm-util/html/NMSettingVPN.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingVPN</title>
+<title>NMSettingVPN</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingPPPOE.html" title="NMSettingPPPOE">
<link rel="next" href="libnm-util-nm-utils.html" title="nm-utils">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingVPN.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingVPN.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingVPN.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingPPPOE.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="libnm-util-nm-utils.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingPPPOE.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="libnm-util-nm-utils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingVPN.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingVPN.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingVPN.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingVPN.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingVPN"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,822 +37,672 @@
<h2><span class="refentrytitle"><a name="NMSettingVPN.top_of_page"></a>NMSettingVPN</span></h2>
<p>NMSettingVPN — Describes connection properties for Virtual Private Networks</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingVPN.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-error-quark" title="nm_setting_vpn_error_quark ()">nm_setting_vpn_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()">*NMVPNIterFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-new" title="nm_setting_vpn_new ()">nm_setting_vpn_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-service-type" title="nm_setting_vpn_get_service_type ()">nm_setting_vpn_get_service_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-user-name" title="nm_setting_vpn_get_user_name ()">nm_setting_vpn_get_user_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-data-items" title="nm_setting_vpn_get_num_data_items ()">nm_setting_vpn_get_num_data_items</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()">nm_setting_vpn_add_data_item</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-data-item" title="nm_setting_vpn_get_data_item ()">nm_setting_vpn_get_data_item</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-data-item" title="nm_setting_vpn_remove_data_item ()">nm_setting_vpn_remove_data_item</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-data-item" title="nm_setting_vpn_foreach_data_item ()">nm_setting_vpn_foreach_data_item</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-secrets" title="nm_setting_vpn_get_num_secrets ()">nm_setting_vpn_get_num_secrets</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()">nm_setting_vpn_add_secret</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-secret" title="nm_setting_vpn_get_secret ()">nm_setting_vpn_get_secret</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-secret" title="nm_setting_vpn_remove_secret ()">nm_setting_vpn_remove_secret</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-secret" title="nm_setting_vpn_foreach_secret ()">nm_setting_vpn_foreach_secret</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingVPN.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><span class="type">GHashTable_gchararray+gchararray_*</span></td>
-<td class="property_name"><a class="link" href="NMSettingVPN.html#NMSettingVPN--data" title="The “data†property">data</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GHashTable_gchararray+gchararray_*</span></td>
-<td class="property_name"><a class="link" href="NMSettingVPN.html#NMSettingVPN--secrets" title="The “secrets†property">secrets</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingVPN.html#NMSettingVPN--service-type" title="The “service-type†property">service-type</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingVPN.html#NMSettingVPN--user-name" title="The “user-name†property">user-name</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingVPN.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-SETTING-NAME:CAPS" title="NM_SETTING_VPN_SETTING_NAME">NM_SETTING_VPN_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingVPN.html#NMSettingVpnError" title="enum NMSettingVpnError">NMSettingVpnError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-ERROR:CAPS" title="NM_SETTING_VPN_ERROR">NM_SETTING_VPN_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-SERVICE-TYPE:CAPS" title="NM_SETTING_VPN_SERVICE_TYPE">NM_SETTING_VPN_SERVICE_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-USER-NAME:CAPS" title="NM_SETTING_VPN_USER_NAME">NM_SETTING_VPN_USER_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-DATA:CAPS" title="NM_SETTING_VPN_DATA">NM_SETTING_VPN_DATA</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-SECRETS:CAPS" title="NM_SETTING_VPN_SECRETS">NM_SETTING_VPN_SECRETS</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingVPN.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingVpnError"></a><pre class="synopsis">
+#include &lt;nm-setting-vpn.h&gt;
+
+#define <a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-SETTING-NAME:CAPS" title="NM_SETTING_VPN_SETTING_NAME">NM_SETTING_VPN_SETTING_NAME</a>
+enum <a class="link" href="NMSettingVPN.html#NMSettingVpnError-enum" title="enum NMSettingVpnError">NMSettingVpnError</a>;
+#define <a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-ERROR:CAPS" title="NM_SETTING_VPN_ERROR">NM_SETTING_VPN_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-error-quark" title="nm_setting_vpn_error_quark ()">nm_setting_vpn_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-SERVICE-TYPE:CAPS" title="NM_SETTING_VPN_SERVICE_TYPE">NM_SETTING_VPN_SERVICE_TYPE</a>
+#define <a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-USER-NAME:CAPS" title="NM_SETTING_VPN_USER_NAME">NM_SETTING_VPN_USER_NAME</a>
+#define <a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-DATA:CAPS" title="NM_SETTING_VPN_DATA">NM_SETTING_VPN_DATA</a>
+#define <a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-SECRETS:CAPS" title="NM_SETTING_VPN_SECRETS">NM_SETTING_VPN_SECRETS</a>
+ <a class="link" href="NMSettingVPN.html#NMSettingVPN-struct" title="NMSettingVPN">NMSettingVPN</a>;
+ <a class="link" href="NMSettingVPN.html#NMSettingVPNClass" title="NMSettingVPNClass">NMSettingVPNClass</a>;
+<span class="returnvalue">void</span> (<a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()">*NMVPNIterFunc</a>) (<em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingVPN.html#nm-setting-vpn-new" title="nm_setting_vpn_new ()">nm_setting_vpn_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-service-type" title="nm_setting_vpn_get_service_type ()">nm_setting_vpn_get_service_type</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-user-name" title="nm_setting_vpn_get_user_name ()">nm_setting_vpn_get_user_name</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-data-items" title="nm_setting_vpn_get_num_data_items ()">nm_setting_vpn_get_num_data_items</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()">nm_setting_vpn_add_data_item</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *item</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-data-item" title="nm_setting_vpn_get_data_item ()">nm_setting_vpn_get_data_item</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-data-item" title="nm_setting_vpn_remove_data_item ()">nm_setting_vpn_remove_data_item</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-data-item" title="nm_setting_vpn_foreach_data_item ()">nm_setting_vpn_foreach_data_item</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-secrets" title="nm_setting_vpn_get_num_secrets ()">nm_setting_vpn_get_num_secrets</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()">nm_setting_vpn_add_secret</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-secret" title="nm_setting_vpn_get_secret ()">nm_setting_vpn_get_secret</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-secret" title="nm_setting_vpn_remove_secret ()">nm_setting_vpn_remove_secret</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-secret" title="nm_setting_vpn_foreach_secret ()">nm_setting_vpn_foreach_secret</a> (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingVPN.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingVpnError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingVPN
+<pre class="synopsis">
+ GEnum
+ +----NMSettingVpnError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingVPN
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingVPN.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-vpn.h&gt;
+<a name="NMSettingVPN.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingVPN.html#NMSettingVPN--data" title='The "data" property'>data</a>" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write
+ "<a class="link" href="NMSettingVPN.html#NMSettingVPN--secrets" title='The "secrets" property'>secrets</a>" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write
+ "<a class="link" href="NMSettingVPN.html#NMSettingVPN--service-type" title='The "service-type" property'>service-type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingVPN.html#NMSettingVPN--user-name" title='The "user-name" property'>user-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
</pre>
</div>
<div class="refsect1">
<a name="NMSettingVPN.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+<p>
+The <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
necessary for connection to Virtual Private Networks. NetworkManager uses
a plugin architecture to allow easier use of new VPN types, and this
setting abstracts the configuration for those plugins. Since the configuration
options are only known to the VPN plugins themselves, the VPN configuration
options are stored as key/value pairs of strings rather than GObject
-properties.</p>
+properties.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingVPN.functions_details"></a><h2>Functions</h2>
+<a name="NMSettingVPN.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="nm-setting-vpn-error-quark"></a><h3>nm_setting_vpn_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_vpn_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> errors.</p>
-<p></p>
-</div>
+<a name="NM-SETTING-VPN-SETTING-NAME:CAPS"></a><h3>NM_SETTING_VPN_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_SETTING_NAME "vpn"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMVPNIterFunc"></a><h3>NMVPNIterFunc ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*NMVPNIterFunc<span class="c_punctuation">)</span> (<em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.25.9.3.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingVpnError-enum"></a><h3>enum NMSettingVpnError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_VPN_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_VPN_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_VPN_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+} NMSettingVpnError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the name of the data or secret item</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-VPN-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_VPN_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>the value of the data or secret item</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-VPN-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_VPN_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>User data passed to <a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-data-item" title="nm_setting_vpn_foreach_data_item ()"><code class="function">nm_setting_vpn_foreach_data_item()</code></a> or
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-secret" title="nm_setting_vpn_foreach_secret ()"><code class="function">nm_setting_vpn_foreach_secret()</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-SETTING-VPN-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_VPN_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-new"></a><h3>nm_setting_vpn_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_vpn_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.4.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NM-SETTING-VPN-ERROR:CAPS"></a><h3>NM_SETTING_VPN_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_ERROR nm_setting_vpn_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-get-service-type"></a><h3>nm_setting_vpn_get_service_type ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_vpn_get_service_type (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
-<p>Returns the service name of the VPN, which identifies the specific VPN
-plugin that should be used to connect to this VPN.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-error-quark"></a><h3>nm_setting_vpn_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_vpn_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.25.9.5.6"></a><h4>Returns</h4>
-<p> the VPN plugin's service name</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-VPN-SERVICE-TYPE:CAPS"></a><h3>NM_SETTING_VPN_SERVICE_TYPE</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_SERVICE_TYPE "service-type"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-VPN-USER-NAME:CAPS"></a><h3>NM_SETTING_VPN_USER_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_USER_NAME "user-name"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-VPN-DATA:CAPS"></a><h3>NM_SETTING_VPN_DATA</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_DATA "data"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-VPN-SECRETS:CAPS"></a><h3>NM_SETTING_VPN_SECRETS</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_SECRETS "secrets"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVPN-struct"></a><h3>NMSettingVPN</h3>
+<pre class="programlisting">typedef struct _NMSettingVPN NMSettingVPN;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVPNClass"></a><h3>NMSettingVPNClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingVPNClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-get-user-name"></a><h3>nm_setting_vpn_get_user_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_vpn_get_user_name (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.25.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMVPNIterFunc"></a><h3>NMVPNIterFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMVPNIterFunc) (<em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the name of the data or secret item</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the value of the data or secret item</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>User data passed to <a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-data-item" title="nm_setting_vpn_foreach_data_item ()"><code class="function">nm_setting_vpn_foreach_data_item()</code></a> or
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-secret" title="nm_setting_vpn_foreach_secret ()"><code class="function">nm_setting_vpn_foreach_secret()</code></a>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.25.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingVPN.html#NMSettingVPN--user-name" title="The “user-name†property"><span class="type">“user-nameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-get-num-data-items"></a><h3>nm_setting_vpn_get_num_data_items ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_vpn_get_num_data_items (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
-<p>Gets number of key/value pairs of VPN configuration data.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-new"></a><h3>nm_setting_vpn_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_vpn_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.25.9.7.6"></a><h4>Returns</h4>
-<p> the number of VPN plugin specific configuration data items</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-add-data-item"></a><h3>nm_setting_vpn_add_data_item ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vpn_add_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *item</code></em>);</pre>
-<p>Establishes a relationship between <em class="parameter"><code>key</code></em>
- and <em class="parameter"><code>item</code></em>
- internally in the
-setting which may be retrieved later. Should not be used to store passwords
-or other secrets, which is what <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()"><code class="function">nm_setting_vpn_add_secret()</code></a> is for.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-get-service-type"></a><h3>nm_setting_vpn_get_service_type ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_vpn_get_service_type (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
+<p>
+Returns the service name of the VPN, which identifies the specific VPN
+plugin that should be used to connect to this VPN.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>a name that uniquely identifies the given value <em class="parameter"><code>item</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>item</p></td>
-<td class="parameter_description"><p>the value to be referenced by <em class="parameter"><code>key</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the VPN plugin's service name</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-get-data-item"></a><h3>nm_setting_vpn_get_data_item ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_vpn_get_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
-<p>Retrieves the data item of a key/value relationship previously established
-by <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()"><code class="function">nm_setting_vpn_add_data_item()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-get-user-name"></a><h3>nm_setting_vpn_get_user_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_vpn_get_user_name (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the name of the data item to retrieve</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html#NMSettingVPN--user-name" title='The "user-name" property'><span class="type">"user-name"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.25.9.9.6"></a><h4>Returns</h4>
-<p> the data item, if any</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-remove-data-item"></a><h3>nm_setting_vpn_remove_data_item ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vpn_remove_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
-<p>Deletes a key/value relationship previously established by
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()"><code class="function">nm_setting_vpn_add_data_item()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-get-num-data-items"></a><h3>nm_setting_vpn_get_num_data_items ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_vpn_get_num_data_items (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
+<p>
+Gets number of key/value pairs of VPN configuration data.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the name of the data item to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of VPN plugin specific configuration data items</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-foreach-data-item"></a><h3>nm_setting_vpn_foreach_data_item ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vpn_foreach_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Iterates all data items stored in this setting. It is safe to add, remove,
-and modify data items inside <em class="parameter"><code>func</code></em>
-, though any additions or removals made
-during iteration will not be part of the iteration.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-add-data-item"></a><h3>nm_setting_vpn_add_data_item ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_vpn_add_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *item</code></em>);</pre>
+<p>
+Establishes a relationship between <em class="parameter"><code>key</code></em> and <em class="parameter"><code>item</code></em> internally in the
+setting which may be retrieved later. Should not be used to store passwords
+or other secrets, which is what <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()"><code class="function">nm_setting_vpn_add_secret()</code></a> is for.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> an user provided function. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>a name that uniquely identifies the given value <em class="parameter"><code>item</code></em>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>data to be passed to <em class="parameter"><code>func</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>item</code></em> :</span></p></td>
+<td>the value to be referenced by <em class="parameter"><code>key</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-get-num-secrets"></a><h3>nm_setting_vpn_get_num_secrets ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_vpn_get_num_secrets (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
-<p>Gets number of VPN plugin specific secrets in the setting.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-get-data-item"></a><h3>nm_setting_vpn_get_data_item ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_vpn_get_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+<p>
+Retrieves the data item of a key/value relationship previously established
+by <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()"><code class="function">nm_setting_vpn_add_data_item()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the name of the data item to retrieve</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the data item, if any</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.25.9.12.6"></a><h4>Returns</h4>
-<p> the number of VPN plugin specific secrets</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-add-secret"></a><h3>nm_setting_vpn_add_secret ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vpn_add_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>);</pre>
-<p>Establishes a relationship between <em class="parameter"><code>key</code></em>
- and <em class="parameter"><code>secret</code></em>
- internally in the
-setting which may be retrieved later.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-remove-data-item"></a><h3>nm_setting_vpn_remove_data_item ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_vpn_remove_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+<p>
+Deletes a key/value relationship previously established by
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()"><code class="function">nm_setting_vpn_add_data_item()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>a name that uniquely identifies the given secret <em class="parameter"><code>secret</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the name of the data item to remove</td>
</tr>
<tr>
-<td class="parameter_name"><p>secret</p></td>
-<td class="parameter_description"><p>the secret to be referenced by <em class="parameter"><code>key</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the data item was found and removed from the internal list,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-get-secret"></a><h3>nm_setting_vpn_get_secret ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_vpn_get_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
-<p>Retrieves the secret of a key/value relationship previously established
-by <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()"><code class="function">nm_setting_vpn_add_secret()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-foreach-data-item"></a><h3>nm_setting_vpn_foreach_data_item ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_vpn_foreach_data_item (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Iterates all data items stored in this setting. It is safe to add, remove,
+and modify data items inside <em class="parameter"><code>func</code></em>, though any additions or removals made
+during iteration will not be part of the iteration.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the name of the secret to retrieve</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>an user provided function. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>data to be passed to <em class="parameter"><code>func</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.25.9.14.6"></a><h4>Returns</h4>
-<p> the secret, if any</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-remove-secret"></a><h3>nm_setting_vpn_remove_secret ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vpn_remove_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
-<p>Deletes a key/value relationship previously established by
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()"><code class="function">nm_setting_vpn_add_secret()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-get-num-secrets"></a><h3>nm_setting_vpn_get_num_secrets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_vpn_get_num_secrets (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>);</pre>
+<p>
+Gets number of VPN plugin specific secrets in the setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the name of the secret to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of VPN plugin specific secrets</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vpn-foreach-secret"></a><h3>nm_setting_vpn_foreach_secret ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vpn_foreach_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Iterates all secrets stored in this setting. It is safe to add, remove,
-and modify secrets inside <em class="parameter"><code>func</code></em>
-, though any additions or removals made during
-iteration will not be part of the iteration.</p>
-<div class="refsect3">
-<a name="id-1.2.25.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vpn-add-secret"></a><h3>nm_setting_vpn_add_secret ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_vpn_add_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>);</pre>
+<p>
+Establishes a relationship between <em class="parameter"><code>key</code></em> and <em class="parameter"><code>secret</code></em> internally in the
+setting which may be retrieved later.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> an user provided function. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>a name that uniquely identifies the given secret <em class="parameter"><code>secret</code></em>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>data to be passed to <em class="parameter"><code>func</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>secret</code></em> :</span></p></td>
+<td>the secret to be referenced by <em class="parameter"><code>key</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingVPN.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SETTING-VPN-SETTING-NAME:CAPS"></a><h3>NM_SETTING_VPN_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_VPN_SETTING_NAME "vpn"
-</pre>
+<a name="nm-setting-vpn-get-secret"></a><h3>nm_setting_vpn_get_secret ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_vpn_get_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
<p>
+Retrieves the secret of a key/value relationship previously established
+by <a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()"><code class="function">nm_setting_vpn_add_secret()</code></a>.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingVpnError"></a><h3>enum NMSettingVpnError</h3>
-<div class="refsect3">
-<a name="id-1.2.25.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-VPN-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_VPN_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-VPN-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_VPN_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the name of the secret to retrieve</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-VPN-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_VPN_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the secret, if any</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VPN-ERROR:CAPS"></a><h3>NM_SETTING_VPN_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_VPN_ERROR nm_setting_vpn_error_quark ()
-</pre>
+<a name="nm-setting-vpn-remove-secret"></a><h3>nm_setting_vpn_remove_secret ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_vpn_remove_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
<p>
+Deletes a key/value relationship previously established by
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()"><code class="function">nm_setting_vpn_add_secret()</code></a>.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the name of the secret to remove</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secret was found and removed from the internal list,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VPN-SERVICE-TYPE:CAPS"></a><h3>NM_SETTING_VPN_SERVICE_TYPE</h3>
-<pre class="programlisting">#define NM_SETTING_VPN_SERVICE_TYPE "service-type"
-</pre>
+<a name="nm-setting-vpn-foreach-secret"></a><h3>nm_setting_vpn_foreach_secret ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_vpn_foreach_secret (<em class="parameter"><code><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
+Iterates all secrets stored in this setting. It is safe to add, remove,
+and modify secrets inside <em class="parameter"><code>func</code></em>, though any additions or removals made during
+iteration will not be part of the iteration.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>an user provided function. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>data to be passed to <em class="parameter"><code>func</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
</div>
-<hr>
+</div>
+<div class="refsect1">
+<a name="NMSettingVPN.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-VPN-USER-NAME:CAPS"></a><h3>NM_SETTING_VPN_USER_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_VPN_USER_NAME "user-name"
-</pre>
+<a name="NMSettingVPN--data"></a><h3>The <code class="literal">"data"</code> property</h3>
+<pre class="programlisting"> "data" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write</pre>
<p>
+Dictionary of key/value pairs of VPN plugin specific data. Both keys and
+values must be strings.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VPN-DATA:CAPS"></a><h3>NM_SETTING_VPN_DATA</h3>
-<pre class="programlisting">#define NM_SETTING_VPN_DATA "data"
-</pre>
+<a name="NMSettingVPN--secrets"></a><h3>The <code class="literal">"secrets"</code> property</h3>
+<pre class="programlisting"> "secrets" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write</pre>
<p>
+Dictionary of key/value pairs of VPN plugin specific secrets like
+passwords or private keys. Both keys and values must be strings.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VPN-SECRETS:CAPS"></a><h3>NM_SETTING_VPN_SECRETS</h3>
-<pre class="programlisting">#define NM_SETTING_VPN_SECRETS "secrets"
-</pre>
+<a name="NMSettingVPN--service-type"></a><h3>The <code class="literal">"service-type"</code> property</h3>
+<pre class="programlisting"> "service-type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+D-Bus service name of the VPN plugin that this setting uses to connect to
+its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc
+plugin.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingVPN.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingVPN--data"></a><h3>The <code class="literal">“dataâ€</code> property</h3>
-<pre class="programlisting"> “data†<span class="type">GHashTable_gchararray+gchararray_*</span></pre>
-<p>Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingVPN--secrets"></a><h3>The <code class="literal">“secretsâ€</code> property</h3>
-<pre class="programlisting"> “secrets†<span class="type">GHashTable_gchararray+gchararray_*</span></pre>
-<p>Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingVPN--service-type"></a><h3>The <code class="literal">“service-typeâ€</code> property</h3>
-<pre class="programlisting"> “service-type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>D-Bus service name of the VPN plugin that this setting uses to connect to its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc plugin.</p>
-<p>Flags: Read / Write</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingVPN--user-name"></a><h3>The <code class="literal">“user-nameâ€</code> property</h3>
-<pre class="programlisting"> “user-name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingVPN--user-name"></a><h3>The <code class="literal">"user-name"</code> property</h3>
+<pre class="programlisting"> "user-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+If the VPN connection requires a user name for authentication, that name
+should be provided here. If the connection is available to more than one
+user, and the VPN requires each user to supply a different name, then
+leave this property empty. If this property is empty, NetworkManager
+will automatically supply the username of the user which requested the
+VPN connection.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingVlan.html b/docs/libnm-util/html/NMSettingVlan.html
index 3a0237137..161ee17af 100644
--- a/docs/libnm-util/html/NMSettingVlan.html
+++ b/docs/libnm-util/html/NMSettingVlan.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingVlan</title>
+<title>NMSettingVlan</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingInfiniband.html" title="NMSettingInfiniband">
<link rel="next" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingVlan.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingVlan.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingVlan.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingInfiniband.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingOlpcMesh.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingInfiniband.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingOlpcMesh.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingVlan.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingVlan.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingVlan.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingVlan.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingVlan"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,873 +37,822 @@
<h2><span class="refentrytitle"><a name="NMSettingVlan.top_of_page"></a>NMSettingVlan</span></h2>
<p>NMSettingVlan — Describes connection properties for VLAN interfaces</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingVlan.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingVlanError"></a><a name="NMVlanPriorityMap"></a><a name="NMVlanFlags"></a><pre class="synopsis">
+#include &lt;nm-setting-vlan.h&gt;
+
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-SETTING-NAME:CAPS" title="NM_SETTING_VLAN_SETTING_NAME">NM_SETTING_VLAN_SETTING_NAME</a>
+enum <a class="link" href="NMSettingVlan.html#NMSettingVlanError-enum" title="enum NMSettingVlanError">NMSettingVlanError</a>;
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-ERROR:CAPS" title="NM_SETTING_VLAN_ERROR">NM_SETTING_VLAN_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-error-quark" title="nm_setting_vlan_error_quark ()">nm_setting_vlan_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-INTERFACE-NAME:CAPS" title="NM_SETTING_VLAN_INTERFACE_NAME">NM_SETTING_VLAN_INTERFACE_NAME</a>
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-PARENT:CAPS" title="NM_SETTING_VLAN_PARENT">NM_SETTING_VLAN_PARENT</a>
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-ID:CAPS" title="NM_SETTING_VLAN_ID">NM_SETTING_VLAN_ID</a>
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-FLAGS:CAPS" title="NM_SETTING_VLAN_FLAGS">NM_SETTING_VLAN_FLAGS</a>
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS" title="NM_SETTING_VLAN_INGRESS_PRIORITY_MAP">NM_SETTING_VLAN_INGRESS_PRIORITY_MAP</a>
+#define <a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS" title="NM_SETTING_VLAN_EGRESS_PRIORITY_MAP">NM_SETTING_VLAN_EGRESS_PRIORITY_MAP</a>
+ <a class="link" href="NMSettingVlan.html#NMSettingVlan-struct" title="NMSettingVlan">NMSettingVlan</a>;
+ <a class="link" href="NMSettingVlan.html#NMSettingVlanClass" title="NMSettingVlanClass">NMSettingVlanClass</a>;
+enum <a class="link" href="NMSettingVlan.html#NMVlanPriorityMap-enum" title="enum NMVlanPriorityMap">NMVlanPriorityMap</a>;
+enum <a class="link" href="NMSettingVlan.html#NMVlanFlags-enum" title="enum NMVlanFlags">NMVlanFlags</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingVlan.html#nm-setting-vlan-new" title="nm_setting_vlan_new ()">nm_setting_vlan_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-interface-name" title="nm_setting_vlan_get_interface_name ()">nm_setting_vlan_get_interface_name</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-parent" title="nm_setting_vlan_get_parent ()">nm_setting_vlan_get_parent</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-id" title="nm_setting_vlan_get_id ()">nm_setting_vlan_get_id</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-flags" title="nm_setting_vlan_get_flags ()">nm_setting_vlan_get_flags</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="returnvalue">gint32</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-num-priorities" title="nm_setting_vlan_get_num_priorities ()">nm_setting_vlan_get_num_priorities</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-priority" title="nm_setting_vlan_get_priority ()">nm_setting_vlan_get_priority</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_from</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_to</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority" title="nm_setting_vlan_add_priority ()">nm_setting_vlan_add_priority</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> from</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> to</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority" title="nm_setting_vlan_remove_priority ()">nm_setting_vlan_remove_priority</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority-by-value" title="nm_setting_vlan_remove_priority_by_value ()">nm_setting_vlan_remove_priority_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> from</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> to</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority-str-by-value" title="nm_setting_vlan_remove_priority_str_by_value ()">nm_setting_vlan_remove_priority_str_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *str</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-clear-priorities" title="nm_setting_vlan_clear_priorities ()">nm_setting_vlan_clear_priorities</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority-str" title="nm_setting_vlan_add_priority_str ()">nm_setting_vlan_add_priority_str</a> (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *str</code></em>);
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSettingVlan.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-error-quark" title="nm_setting_vlan_error_quark ()">nm_setting_vlan_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-new" title="nm_setting_vlan_new ()">nm_setting_vlan_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-interface-name" title="nm_setting_vlan_get_interface_name ()">nm_setting_vlan_get_interface_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-parent" title="nm_setting_vlan_get_parent ()">nm_setting_vlan_get_parent</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-id" title="nm_setting_vlan_get_id ()">nm_setting_vlan_get_id</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-flags" title="nm_setting_vlan_get_flags ()">nm_setting_vlan_get_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="returnvalue">gint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-num-priorities" title="nm_setting_vlan_get_num_priorities ()">nm_setting_vlan_get_num_priorities</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-priority" title="nm_setting_vlan_get_priority ()">nm_setting_vlan_get_priority</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority" title="nm_setting_vlan_add_priority ()">nm_setting_vlan_add_priority</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority" title="nm_setting_vlan_remove_priority ()">nm_setting_vlan_remove_priority</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-clear-priorities" title="nm_setting_vlan_clear_priorities ()">nm_setting_vlan_clear_priorities</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority-str" title="nm_setting_vlan_add_priority_str ()">nm_setting_vlan_add_priority_str</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
+<a name="NMSettingVlan.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingVlanError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingVlan
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMVlanPriorityMap
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMVlanFlags
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingVlan.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property">egress-priority-map</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingVlan.html#NMSettingVlan--flags" title="The “flags†property">flags</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingVlan.html#NMSettingVlan--id" title="The “id†property">id</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property">ingress-priority-map</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingVlan.html#NMSettingVlan--interface-name" title="The “interface-name†property">interface-name</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingVlan.html#NMSettingVlan--parent" title="The “parent†property">parent</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
-</table></div>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'>egress-priority-map</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--flags" title='The "flags" property'>flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--id" title='The "id" property'>id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'>ingress-priority-map</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--interface-name" title='The "interface-name" property'>interface-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--parent" title='The "parent" property'>parent</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingVlan.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for connection to VLAN interfaces.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingVlan.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingVlan.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-VLAN-SETTING-NAME:CAPS"></a><h3>NM_SETTING_VLAN_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_SETTING_NAME "vlan"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVlanError-enum"></a><h3>enum NMSettingVlanError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_VLAN_ERROR_UNKNOWN = 0, /*&lt; nick=Unknown &gt;*/
+ NM_SETTING_VLAN_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_VLAN_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_VLAN_ERROR_INVALID_PARENT /*&lt; nick=InvalidParent &gt;*/
+} NMSettingVlanError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-SETTING-NAME:CAPS" title="NM_SETTING_VLAN_SETTING_NAME">NM_SETTING_VLAN_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NMSettingVlanError" title="enum NMSettingVlanError">NMSettingVlanError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-ERROR:CAPS" title="NM_SETTING_VLAN_ERROR">NM_SETTING_VLAN_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-INTERFACE-NAME:CAPS" title="NM_SETTING_VLAN_INTERFACE_NAME">NM_SETTING_VLAN_INTERFACE_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-PARENT:CAPS" title="NM_SETTING_VLAN_PARENT">NM_SETTING_VLAN_PARENT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-ID:CAPS" title="NM_SETTING_VLAN_ID">NM_SETTING_VLAN_ID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-FLAGS:CAPS" title="NM_SETTING_VLAN_FLAGS">NM_SETTING_VLAN_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS" title="NM_SETTING_VLAN_INGRESS_PRIORITY_MAP">NM_SETTING_VLAN_INGRESS_PRIORITY_MAP</a></td>
+<td><p><a name="NM-SETTING-VLAN-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_VLAN_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS" title="NM_SETTING_VLAN_EGRESS_PRIORITY_MAP">NM_SETTING_VLAN_EGRESS_PRIORITY_MAP</a></td>
+<td><p><a name="NM-SETTING-VLAN-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_VLAN_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
+</td>
</tr>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap">NMVlanPriorityMap</a></td>
+<td><p><a name="NM-SETTING-VLAN-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_VLAN_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+ required
+</td>
</tr>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingVlan.html#NMVlanFlags" title="enum NMVlanFlags">NMVlanFlags</a></td>
+<td><p><a name="NM-SETTING-VLAN-ERROR-INVALID-PARENT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_VLAN_ERROR_INVALID_PARENT</code></span></p></td>
+<td>the VLAN parent was specified
+ inconsistently
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingVlan.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">├──</span> NMSettingVlanError
- <span class="lineart">├──</span> NMVlanFlags
- <span class="lineart">╰──</span> NMVlanPriorityMap
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingVlan
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingVlan.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-vlan.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingVlan.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
-necessary for connection to VLAN interfaces.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingVlan.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-vlan-error-quark"></a><h3>nm_setting_vlan_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_vlan_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> errors.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-new"></a><h3>nm_setting_vlan_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_vlan_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<a name="NM-SETTING-VLAN-ERROR:CAPS"></a><h3>NM_SETTING_VLAN_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_ERROR nm_setting_vlan_error_quark ()
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-get-interface-name"></a><h3>nm_setting_vlan_get_interface_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_vlan_get_interface_name (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.17.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vlan-error-quark"></a><h3>nm_setting_vlan_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_vlan_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> errors.</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingVlan.html#NMSettingVlan--interface-name" title="The “interface-name†property"><span class="type">“interface_nameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-get-parent"></a><h3>nm_setting_vlan_get_parent ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_vlan_get_parent (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.17.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingVlan.html#NMSettingVlan--parent" title="The “parent†property"><span class="type">“parentâ€</span></a> property of the setting</p>
-<p></p>
+<a name="NM-SETTING-VLAN-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_VLAN_INTERFACE_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_INTERFACE_NAME "interface-name"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-VLAN-PARENT:CAPS"></a><h3>NM_SETTING_VLAN_PARENT</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_PARENT "parent"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-get-id"></a><h3>nm_setting_vlan_get_id ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_vlan_get_id (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.17.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-SETTING-VLAN-ID:CAPS"></a><h3>NM_SETTING_VLAN_ID</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_ID "id"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingVlan.html#NMSettingVlan--id" title="The “id†property"><span class="type">“idâ€</span></a> property of the setting</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-VLAN-FLAGS:CAPS"></a><h3>NM_SETTING_VLAN_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_FLAGS "flags"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS"></a><h3>NM_SETTING_VLAN_INGRESS_PRIORITY_MAP</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_INGRESS_PRIORITY_MAP "ingress-priority-map"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-get-flags"></a><h3>nm_setting_vlan_get_flags ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_vlan_get_flags (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.17.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS"></a><h3>NM_SETTING_VLAN_EGRESS_PRIORITY_MAP</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_EGRESS_PRIORITY_MAP "egress-priority-map"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingVlan.html#NMSettingVlan--flags" title="The “flags†property"><span class="type">“flagsâ€</span></a> property of the setting</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVlan-struct"></a><h3>NMSettingVlan</h3>
+<pre class="programlisting">typedef struct _NMSettingVlan NMSettingVlan;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVlanClass"></a><h3>NMSettingVlanClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingVlanClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-get-num-priorities"></a><h3>nm_setting_vlan_get_num_priorities ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="returnvalue">gint32</span></a>
-nm_setting_vlan_get_num_priorities (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);</pre>
-<p>Returns the number of entires in the
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property"><span class="type">“ingress_priority_mapâ€</span></a> or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property"><span class="type">“egress_priority_mapâ€</span></a>
-properties of this setting.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMVlanPriorityMap-enum"></a><h3>enum NMVlanPriorityMap</h3>
+<pre class="programlisting">typedef enum {
+ NM_VLAN_INGRESS_MAP,
+ NM_VLAN_EGRESS_MAP
+} NMVlanPriorityMap;
+</pre>
+<p>
+A selector for traffic priority maps; these map Linux SKB priorities
+to 802.1p priorities used in VLANs.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-VLAN-INGRESS-MAP:CAPS"></a><span class="term"><code class="literal">NM_VLAN_INGRESS_MAP</code></span></p></td>
+<td>map for incoming data
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>map</p></td>
-<td class="parameter_description"><p>the type of priority map</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-VLAN-EGRESS-MAP:CAPS"></a><span class="term"><code class="literal">NM_VLAN_EGRESS_MAP</code></span></p></td>
+<td>map for outgoing data
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.8.6"></a><h4>Returns</h4>
-<p> return the number of ingress/egress priority entries, -1 if error</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-get-priority"></a><h3>nm_setting_vlan_get_priority ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_vlan_get_priority (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_from</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_to</code></em>);</pre>
-<p>Retrieve one of the entries of the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property"><span class="type">“ingress_priority_mapâ€</span></a>
-or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property"><span class="type">“egress_priority_mapâ€</span></a> properties of this setting.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMVlanFlags-enum"></a><h3>enum NMVlanFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_VLAN_FLAG_REORDER_HEADERS = 0x1,
+ NM_VLAN_FLAG_GVRP = 0x2,
+ NM_VLAN_FLAG_LOOSE_BINDING = 0x4,
+
+ /* NOTE: if adding flags update nm-setting-vlan.c::verify() */
+} NMVlanFlags;
+</pre>
+<p>
+<a class="link" href="NMSettingVlan.html#NMVlanFlags"><span class="type">NMVlanFlags</span></a> values control the behavior of the VLAN interface.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>map</p></td>
-<td class="parameter_description"><p>the type of priority map</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>the zero-based index of the ingress/egress priority map entry</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><a name="NM-VLAN-FLAG-REORDER-HEADERS:CAPS"></a><span class="term"><code class="literal">NM_VLAN_FLAG_REORDER_HEADERS</code></span></p></td>
+<td>indicates that this interface should reorder
+ outgoing packet headers to look more like a non-VLAN Ethernet interface
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_from</p></td>
-<td class="parameter_description"><p> on return the value of the priority map's 'from' item. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+<td><p><a name="NM-VLAN-FLAG-GVRP:CAPS"></a><span class="term"><code class="literal">NM_VLAN_FLAG_GVRP</code></span></p></td>
+<td>indicates that this interface should use GVRP to register
+ itself with it's switch
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_to</p></td>
-<td class="parameter_description"><p> on return the value of priority map's 'to' item. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+<td><p><a name="NM-VLAN-FLAG-LOOSE-BINDING:CAPS"></a><span class="term"><code class="literal">NM_VLAN_FLAG_LOOSE_BINDING</code></span></p></td>
+<td>indicates that this interface's operating
+ state is tied to the underlying network interface but other details
+ (like routing) are not.
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.9.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a priority map was returned, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if error</p>
-<p></p>
-</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-vlan-new"></a><h3>nm_setting_vlan_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_vlan_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr></tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-add-priority"></a><h3>nm_setting_vlan_add_priority ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_vlan_add_priority (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> from</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> to</code></em>);</pre>
-<p>Adds a priority mapping to the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property"><span class="type">“ingress_priority_mapâ€</span></a> or
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property"><span class="type">“egress_priority_mapâ€</span></a> properties of the setting. If <em class="parameter"><code>from</code></em>
- is
-already in the given priority map, this function will overwrite the
-existing entry with the new <em class="parameter"><code>to</code></em>
-.</p>
-<p>If <em class="parameter"><code>map</code></em>
- is <a class="link" href="NMSettingVlan.html#NM-VLAN-INGRESS-MAP:CAPS"><span class="type">NM_VLAN_INGRESS_MAP</span></a> then <em class="parameter"><code>from</code></em>
- is the incoming 802.1q VLAN
-Priority Code Point (PCP) value, and <em class="parameter"><code>to</code></em>
- is the Linux SKB priority value.</p>
-<p>If <em class="parameter"><code>map</code></em>
- is <a class="link" href="NMSettingVlan.html#NM-VLAN-EGRESS-MAP:CAPS"><span class="type">NM_VLAN_EGRESS_MAP</span></a> then <em class="parameter"><code>from</code></em>
- is the Linux SKB priority value and
-<em class="parameter"><code>to</code></em>
- is the outgoing 802.1q VLAN Priority Code Point (PCP) value.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.10.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vlan-get-interface-name"></a><h3>nm_setting_vlan_get_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_vlan_get_interface_name (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>map</p></td>
-<td class="parameter_description"><p>the type of priority map</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html#NMSettingVlan--interface-name" title='The "interface-name" property'><span class="type">"interface_name"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-vlan-get-parent"></a><h3>nm_setting_vlan_get_parent ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_vlan_get_parent (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="parameter_name"><p>from</p></td>
-<td class="parameter_description"><p>the priority to map to <em class="parameter"><code>to</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>to</p></td>
-<td class="parameter_description"><p>the priority to map <em class="parameter"><code>from</code></em>
-to</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html#NMSettingVlan--parent" title='The "parent" property'><span class="type">"parent"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.10.8"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the new priority mapping was successfully added to the
-list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if error</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-remove-priority"></a><h3>nm_setting_vlan_remove_priority ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vlan_remove_priority (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
-<p>Removes the priority map at index <em class="parameter"><code>idx</code></em>
- from the
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property"><span class="type">“ingress_priority_mapâ€</span></a> or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property"><span class="type">“egress_priority_mapâ€</span></a>
-properties.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vlan-get-id"></a><h3>nm_setting_vlan_get_id ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_vlan_get_id (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>map</p></td>
-<td class="parameter_description"><p>the type of priority map</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>the zero-based index of the priority map to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html#NMSettingVlan--id" title='The "id" property'><span class="type">"id"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-clear-priorities"></a><h3>nm_setting_vlan_clear_priorities ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_vlan_clear_priorities (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);</pre>
-<p>Clear all the entires from <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property"><span class="type">“ingress_priority_mapâ€</span></a> or
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property"><span class="type">“egress_priority_mapâ€</span></a> properties.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vlan-get-flags"></a><h3>nm_setting_vlan_get_flags ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_vlan_get_flags (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>map</p></td>
-<td class="parameter_description"><p>the type of priority map</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html#NMSettingVlan--flags" title='The "flags" property'><span class="type">"flags"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-vlan-add-priority-str"></a><h3>nm_setting_vlan_add_priority_str ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_vlan_add_priority_str (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre>
-<p>Adds a priority map entry into either the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property"><span class="type">“ingress_priority_mapâ€</span></a>
-or the <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property"><span class="type">“egress_priority_mapâ€</span></a> properties. The priority map maps
-the Linux SKB priorities to 802.1p priorities.</p>
-<div class="refsect3">
-<a name="id-1.2.17.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vlan-get-num-priorities"></a><h3>nm_setting_vlan_get_num_priorities ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="returnvalue">gint32</span></a> nm_setting_vlan_get_num_priorities (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);</pre>
+<p>
+Returns the number of entires in the
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a> or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a>
+properties of this setting.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>map</p></td>
-<td class="parameter_description"><p>the type of priority map</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
</tr>
<tr>
-<td class="parameter_name"><p>str</p></td>
-<td class="parameter_description"><p>the string which contains a priority map, like "3:7"</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>return the number of ingress/egress priority entries, -1 if error</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.17.9.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the entry was successfully added to the list, or it
-overwrote the old value, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if error</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingVlan.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NM-SETTING-VLAN-SETTING-NAME:CAPS"></a><h3>NM_SETTING_VLAN_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_SETTING_NAME "vlan"
-</pre>
+<a name="nm-setting-vlan-get-priority"></a><h3>nm_setting_vlan_get_priority ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_vlan_get_priority (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_from</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_to</code></em>);</pre>
<p>
+Retrieve one of the entries of the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a>
+or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a> properties of this setting.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingVlanError"></a><h3>enum NMSettingVlanError</h3>
-<div class="refsect3">
-<a name="id-1.2.17.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-VLAN-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_VLAN_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-VLAN-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_VLAN_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-VLAN-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_VLAN_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
- required</p>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zero-based index of the ingress/egress priority map entry</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_from</code></em> :</span></p></td>
+<td>on return the value of the priority map's 'from' item. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-VLAN-ERROR-INVALID-PARENT:CAPS"></a>NM_SETTING_VLAN_ERROR_INVALID_PARENT</p></td>
-<td class="enum_member_description">
-<p>the VLAN parent was specified
- inconsistently</p>
+<td><p><span class="term"><em class="parameter"><code>out_to</code></em> :</span></p></td>
+<td>on return the value of priority map's 'to' item. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
</td>
-<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a priority map was returned, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if error</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VLAN-ERROR:CAPS"></a><h3>NM_SETTING_VLAN_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_ERROR nm_setting_vlan_error_quark ()
-</pre>
+<a name="nm-setting-vlan-add-priority"></a><h3>nm_setting_vlan_add_priority ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_vlan_add_priority (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> from</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> to</code></em>);</pre>
<p>
+Adds a priority mapping to the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a> or
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a> properties of the setting. If <em class="parameter"><code>from</code></em> is
+already in the given priority map, this function will overwrite the
+existing entry with the new <em class="parameter"><code>to</code></em>.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-VLAN-INTERFACE-NAME:CAPS"></a><h3>NM_SETTING_VLAN_INTERFACE_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_INTERFACE_NAME "interface-name"
-</pre>
<p>
+If <em class="parameter"><code>map</code></em> is <a class="link" href="NMSettingVlan.html#NM-VLAN-INGRESS-MAP:CAPS"><span class="type">NM_VLAN_INGRESS_MAP</span></a> then <em class="parameter"><code>from</code></em> is the incoming 802.1q VLAN
+Priority Code Point (PCP) value, and <em class="parameter"><code>to</code></em> is the Linux SKB priority value.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-VLAN-PARENT:CAPS"></a><h3>NM_SETTING_VLAN_PARENT</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_PARENT "parent"
-</pre>
<p>
+If <em class="parameter"><code>map</code></em> is <a class="link" href="NMSettingVlan.html#NM-VLAN-EGRESS-MAP:CAPS"><span class="type">NM_VLAN_EGRESS_MAP</span></a> then <em class="parameter"><code>from</code></em> is the Linux SKB priority value and
+<em class="parameter"><code>to</code></em> is the outgoing 802.1q VLAN Priority Code Point (PCP) value.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>from</code></em> :</span></p></td>
+<td>the priority to map to <em class="parameter"><code>to</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>to</code></em> :</span></p></td>
+<td>the priority to map <em class="parameter"><code>from</code></em> to</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the new priority mapping was successfully added to the
+list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if error</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VLAN-ID:CAPS"></a><h3>NM_SETTING_VLAN_ID</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_ID "id"
-</pre>
+<a name="nm-setting-vlan-remove-priority"></a><h3>nm_setting_vlan_remove_priority ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_vlan_remove_priority (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
<p>
+Removes the priority map at index <em class="parameter"><code>idx</code></em> from the
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a> or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a>
+properties.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zero-based index of the priority map to remove</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VLAN-FLAGS:CAPS"></a><h3>NM_SETTING_VLAN_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_FLAGS "flags"
-</pre>
+<a name="nm-setting-vlan-remove-priority-by-value"></a><h3>nm_setting_vlan_remove_priority_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_vlan_remove_priority_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> from</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> to</code></em>);</pre>
<p>
+Removes the priority map <em class="parameter"><code>form</code></em>:<em class="parameter"><code>to</code></em> from the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a>
+or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a> (according to <em class="parameter"><code>map</code></em> argument)
+properties.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>from</code></em> :</span></p></td>
+<td>the priority to map to <em class="parameter"><code>to</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>to</code></em> :</span></p></td>
+<td>the priority to map <em class="parameter"><code>from</code></em> to</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the priority mapping was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS"></a><h3>NM_SETTING_VLAN_INGRESS_PRIORITY_MAP</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_INGRESS_PRIORITY_MAP "ingress-priority-map"
-</pre>
+<a name="nm-setting-vlan-remove-priority-str-by-value"></a><h3>nm_setting_vlan_remove_priority_str_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_vlan_remove_priority_str_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre>
<p>
+Removes the priority map <em class="parameter"><code>str</code></em> from the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a>
+or <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a> (according to <em class="parameter"><code>map</code></em> argument)
+properties.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>the string which contains a priority map, like "3:7"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the priority mapping was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS"></a><h3>NM_SETTING_VLAN_EGRESS_PRIORITY_MAP</h3>
-<pre class="programlisting">#define NM_SETTING_VLAN_EGRESS_PRIORITY_MAP "egress-priority-map"
-</pre>
+<a name="nm-setting-vlan-clear-priorities"></a><h3>nm_setting_vlan_clear_priorities ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_vlan_clear_priorities (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);</pre>
<p>
+Clear all the entires from <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a> or
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a> properties.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMVlanPriorityMap"></a><h3>enum NMVlanPriorityMap</h3>
-<p>A selector for traffic priority maps; these map Linux SKB priorities
-to 802.1p priorities used in VLANs.</p>
-<div class="refsect3">
-<a name="id-1.2.17.10.11.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-VLAN-INGRESS-MAP:CAPS"></a>NM_VLAN_INGRESS_MAP</p></td>
-<td class="enum_member_description">
-<p>map for incoming data</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-VLAN-EGRESS-MAP:CAPS"></a>NM_VLAN_EGRESS_MAP</p></td>
-<td class="enum_member_description">
-<p>map for outgoing data</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NMVlanFlags"></a><h3>enum NMVlanFlags</h3>
-<p><a class="link" href="NMSettingVlan.html#NMVlanFlags" title="enum NMVlanFlags"><span class="type">NMVlanFlags</span></a> values control the behavior of the VLAN interface.</p>
-<div class="refsect3">
-<a name="id-1.2.17.10.12.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-vlan-add-priority-str"></a><h3>nm_setting_vlan_add_priority_str ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_vlan_add_priority_str (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre>
+<p>
+Adds a priority map entry into either the <a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'><span class="type">"ingress_priority_map"</span></a>
+or the <a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'><span class="type">"egress_priority_map"</span></a> properties. The priority map maps
+the Linux SKB priorities to 802.1p priorities.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-VLAN-FLAG-REORDER-HEADERS:CAPS"></a>NM_VLAN_FLAG_REORDER_HEADERS</p></td>
-<td class="enum_member_description">
-<p>indicates that this interface should reorder
- outgoing packet headers to look more like a non-VLAN ethernet interface</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-VLAN-FLAG-GVRP:CAPS"></a>NM_VLAN_FLAG_GVRP</p></td>
-<td class="enum_member_description">
-<p>indicates that this interface should use GVRP to register
- itself with it's switch</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td>the type of priority map</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-VLAN-FLAG-LOOSE-BINDING:CAPS"></a>NM_VLAN_FLAG_LOOSE_BINDING</p></td>
-<td class="enum_member_description">
-<p>indicates that this interface's operating
- state is tied to the underlying network interface but other details
- (like routing) are not.</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>the string which contains a priority map, like "3:7"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the entry was successfully added to the list, or it
+overwrote the old value, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if error</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-</div>
<div class="refsect1">
<a name="NMSettingVlan.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingVlan--egress-priority-map"></a><h3>The <code class="literal">“egress-priority-mapâ€</code> property</h3>
-<pre class="programlisting"> “egress-priority-map†<span class="type">GSList_gchararray_</span> *</pre>
-<p>For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format 'from:to' where both 'from' and 'to' are unsigned integers, ie '7:3'.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingVlan--egress-priority-map"></a><h3>The <code class="literal">"egress-priority-map"</code> property</h3>
+<pre class="programlisting"> "egress-priority-map" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
+<p>
+For outgoing packets, a list of mappings from Linux SKB priorities to
+802.1p priorities. The mapping is given in the format "from:to" where
+both "from" and "to" are unsigned integers, ie "7:3".
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingVlan--flags"></a><h3>The <code class="literal">“flagsâ€</code> property</h3>
-<pre class="programlisting"> “flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>One or more flags which control the behavior and features of the VLAN interface. Flags include reordering of output packet headers (0x01), use of the GVRP protocol (0x02), and loose binding of the interface to its master device's operating state (0x04).</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingVlan--flags"></a><h3>The <code class="literal">"flags"</code> property</h3>
+<pre class="programlisting"> "flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+One or more flags which control the behavior and features of the VLAN
+interface. Flags include <a class="link" href="NMSettingVlan.html#NM-VLAN-FLAG-REORDER-HEADERS:CAPS"><code class="literal">NM_VLAN_FLAG_REORDER_HEADERS</code></a> (reordering of
+output packet headers), <a class="link" href="NMSettingVlan.html#NM-VLAN-FLAG-GVRP:CAPS"><code class="literal">NM_VLAN_FLAG_GVRP</code></a> (use of the GVRP protocol),
+and <a class="link" href="NMSettingVlan.html#NM-VLAN-FLAG-LOOSE-BINDING:CAPS"><code class="literal">NM_VLAN_FLAG_LOOSE_BINDING</code></a> (loose binding of the interface to its
+master device's operating state).
+</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingVlan--id"></a><h3>The <code class="literal">“idâ€</code> property</h3>
-<pre class="programlisting"> “id†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>The VLAN indentifier the interface created by this connection should be assigned.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingVlan--id"></a><h3>The <code class="literal">"id"</code> property</h3>
+<pre class="programlisting"> "id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+The VLAN identifier that the interface created by this connection should
+be assigned.
+</p>
<p>Allowed values: &lt;= 4095</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingVlan--ingress-priority-map"></a><h3>The <code class="literal">“ingress-priority-mapâ€</code> property</h3>
-<pre class="programlisting"> “ingress-priority-map†<span class="type">GSList_gchararray_</span> *</pre>
-<p>For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format 'from:to' where both 'from' and 'to' are unsigned integers, ie '7:3'.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingVlan--ingress-priority-map"></a><h3>The <code class="literal">"ingress-priority-map"</code> property</h3>
+<pre class="programlisting"> "ingress-priority-map" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
+<p>
+For incoming packets, a list of mappings from 802.1p priorities to Linux
+SKB priorities. The mapping is given in the format "from:to" where both
+"from" and "to" are unsigned integers, ie "7:3".
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingVlan--interface-name"></a><h3>The <code class="literal">“interface-nameâ€</code> property</h3>
-<pre class="programlisting"> “interface-name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If given, specifies the kernel name of the VLAN interface. If not given, a default name will be constructed from the interface described by the parent interface and the 'id' property, ex 'eth2.1'. The parent interface may be given by the 'parent' property or by a hardware address property, eg the 'wired' settings' 'mac-address' property.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingVlan--interface-name"></a><h3>The <code class="literal">"interface-name"</code> property</h3>
+<pre class="programlisting"> "interface-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
+<p>
+If given, specifies the kernel name of the VLAN interface. If not given,
+a default name will be constructed from the interface described by the
+parent interface and the <a class="link" href="NMSettingVlan.html#NMSettingVlan--id" title='The "id" property'><span class="type">"id"</span></a> property, eg "eth2.1". The
+parent interface may be given by the <a class="link" href="NMSettingVlan.html#NMSettingVlan--parent" title='The "parent" property'><span class="type">"parent"</span></a> property or by
+the <a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property of an <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> setting.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingVlan--parent"></a><h3>The <code class="literal">“parentâ€</code> property</h3>
-<pre class="programlisting"> “parent†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain a hardware address in a hardware-specific setting, like the 'wired' settings' 'mac-address' property.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingVlan--parent"></a><h3>The <code class="literal">"parent"</code> property</h3>
+<pre class="programlisting"> "parent" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
+<p>
+If given, specifies the parent interface name or parent connection UUID
+from which this VLAN interface should be created. If this property is
+not specified, the connection must contain an <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> setting
+with a <a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingWimax.html b/docs/libnm-util/html/NMSettingWimax.html
index 89053dcaa..ce31e8ec3 100644
--- a/docs/libnm-util/html/NMSettingWimax.html
+++ b/docs/libnm-util/html/NMSettingWimax.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingWimax</title>
+<title>NMSettingWimax</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingGsm.html" title="NMSettingGsm">
<link rel="next" href="NMSettingBond.html" title="NMSettingBond">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingWimax.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingWimax.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingWimax.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingGsm.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingBond.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingGsm.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingBond.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingWimax.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingWimax.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingWimax.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingWimax.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingWimax"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,207 +37,54 @@
<h2><span class="refentrytitle"><a name="NMSettingWimax.top_of_page"></a>NMSettingWimax</span></h2>
<p>NMSettingWimax — Describes 802.16e Mobile WiMAX connection properties</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
-<a name="NMSettingWimax.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-error-quark" title="nm_setting_wimax_error_quark ()">nm_setting_wimax_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-new" title="nm_setting_wimax_new ()">nm_setting_wimax_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-network-name" title="nm_setting_wimax_get_network_name ()">nm_setting_wimax_get_network_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-mac-address" title="nm_setting_wimax_get_mac_address ()">nm_setting_wimax_get_mac_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWimax.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWimax.html#NMSettingWimax--mac-address" title="The “mac-address†property">mac-address</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWimax.html#NMSettingWimax--network-name" title="The “network-name†property">network-name</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWimax.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-SETTING-NAME:CAPS" title="NM_SETTING_WIMAX_SETTING_NAME">NM_SETTING_WIMAX_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingWimax.html#NMSettingWimaxError" title="enum NMSettingWimaxError">NMSettingWimaxError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-ERROR:CAPS" title="NM_SETTING_WIMAX_ERROR">NM_SETTING_WIMAX_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-NETWORK-NAME:CAPS" title="NM_SETTING_WIMAX_NETWORK_NAME">NM_SETTING_WIMAX_NETWORK_NAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-MAC-ADDRESS:CAPS" title="NM_SETTING_WIMAX_MAC_ADDRESS">NM_SETTING_WIMAX_MAC_ADDRESS</a></td>
-</tr>
-</tbody>
-</table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWimax.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingWimaxError"></a><pre class="synopsis">
+#include &lt;nm-setting-wimax.h&gt;
+
+#define <a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-SETTING-NAME:CAPS" title="NM_SETTING_WIMAX_SETTING_NAME">NM_SETTING_WIMAX_SETTING_NAME</a>
+enum <a class="link" href="NMSettingWimax.html#NMSettingWimaxError-enum" title="enum NMSettingWimaxError">NMSettingWimaxError</a>;
+#define <a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-ERROR:CAPS" title="NM_SETTING_WIMAX_ERROR">NM_SETTING_WIMAX_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingWimax.html#nm-setting-wimax-error-quark" title="nm_setting_wimax_error_quark ()">nm_setting_wimax_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-NETWORK-NAME:CAPS" title="NM_SETTING_WIMAX_NETWORK_NAME">NM_SETTING_WIMAX_NETWORK_NAME</a>
+#define <a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-MAC-ADDRESS:CAPS" title="NM_SETTING_WIMAX_MAC_ADDRESS">NM_SETTING_WIMAX_MAC_ADDRESS</a>
+ <a class="link" href="NMSettingWimax.html#NMSettingWimax-struct" title="NMSettingWimax">NMSettingWimax</a>;
+ <a class="link" href="NMSettingWimax.html#NMSettingWimaxClass" title="NMSettingWimaxClass">NMSettingWimaxClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingWimax.html#nm-setting-wimax-new" title="nm_setting_wimax_new ()">nm_setting_wimax_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-network-name" title="nm_setting_wimax_get_network_name ()">nm_setting_wimax_get_network_name</a> (<em class="parameter"><code><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-mac-address" title="nm_setting_wimax_get_mac_address ()">nm_setting_wimax_get_mac_address</a> (<em class="parameter"><code><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> *setting</code></em>);
+</pre>
</div>
<div class="refsect1">
<a name="NMSettingWimax.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingWimaxError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingWimax
+<pre class="synopsis">
+ GEnum
+ +----NMSettingWimaxError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingWimax
</pre>
</div>
<div class="refsect1">
-<a name="NMSettingWimax.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-wimax.h&gt;
+<a name="NMSettingWimax.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingWimax.html#NMSettingWimax--mac-address" title='The "mac-address" property'>mac-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingWimax.html#NMSettingWimax--network-name" title='The "network-name" property'>network-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
</pre>
</div>
<div class="refsect1">
<a name="NMSettingWimax.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
-necessary for connection to 802.16e Mobile WiMAX networks.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingWimax.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-wimax-error-quark"></a><h3>nm_setting_wimax_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_wimax_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.12.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wimax-new"></a><h3>nm_setting_wimax_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_wimax_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.12.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> object</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wimax-get-network-name"></a><h3>nm_setting_wimax_get_network_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wimax_get_network_name (<em class="parameter"><code><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> *setting</code></em>);</pre>
-<p>Returns the WiMAX NSP name (ex "Sprint" or "CLEAR") which identifies the
-specific WiMAX network this setting describes a connection to.</p>
-<div class="refsect3">
-<a name="id-1.2.12.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.12.9.4.6"></a><h4>Returns</h4>
-<p> the WiMAX NSP name</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wimax-get-mac-address"></a><h3>nm_setting_wimax_get_mac_address ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_wimax_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> *setting</code></em>);</pre>
-<p>Returns the MAC address of a WiMAX device which this connection is locked
-to.</p>
-<div class="refsect3">
-<a name="id-1.2.12.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.12.9.5.6"></a><h4>Returns</h4>
-<p> the MAC address</p>
-<p></p>
-</div>
-</div>
+<p>
+The <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for connection to 802.16e Mobile WiMAX networks.
+</p>
</div>
<div class="refsect1">
-<a name="NMSettingWimax.other_details"></a><h2>Types and Values</h2>
+<a name="NMSettingWimax.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="NM-SETTING-WIMAX-SETTING-NAME:CAPS"></a><h3>NM_SETTING_WIMAX_SETTING_NAME</h3>
<pre class="programlisting">#define NM_SETTING_WIMAX_SETTING_NAME "wimax"
@@ -241,42 +94,38 @@ to.</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingWimaxError"></a><h3>enum NMSettingWimaxError</h3>
-<div class="refsect3">
-<a name="id-1.2.12.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingWimaxError-enum"></a><h3>enum NMSettingWimaxError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_WIMAX_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY /*&lt; nick=MissingProperty &gt;*/
+} NMSettingWimaxError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIMAX-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_WIMAX_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><a name="NM-SETTING-WIMAX-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIMAX_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIMAX-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
+<td><p><a name="NM-SETTING-WIMAX-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIMAX-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
+<td><p><a name="NM-SETTING-WIMAX-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
<a name="NM-SETTING-WIMAX-ERROR:CAPS"></a><h3>NM_SETTING_WIMAX_ERROR</h3>
@@ -287,6 +136,24 @@ required</p>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-wimax-error-quark"></a><h3>nm_setting_wimax_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_wimax_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-SETTING-WIMAX-NETWORK-NAME:CAPS"></a><h3>NM_SETTING_WIMAX_NETWORK_NAME</h3>
<pre class="programlisting">#define NM_SETTING_WIMAX_NETWORK_NAME "network-name"
</pre>
@@ -301,27 +168,119 @@ required</p>
<p>
</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWimax-struct"></a><h3>NMSettingWimax</h3>
+<pre class="programlisting">typedef struct _NMSettingWimax NMSettingWimax;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWimaxClass"></a><h3>NMSettingWimaxClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} NMSettingWimaxClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wimax-new"></a><h3>nm_setting_wimax_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_wimax_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> object</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wimax-get-network-name"></a><h3>nm_setting_wimax_get_network_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wimax_get_network_name (<em class="parameter"><code><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> *setting</code></em>);</pre>
+<p>
+Returns the WiMAX NSP name (ex "Sprint" or "CLEAR") which identifies the
+specific WiMAX network this setting describes a connection to.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the WiMAX NSP name</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wimax-get-mac-address"></a><h3>nm_setting_wimax_get_mac_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_wimax_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> *setting</code></em>);</pre>
+<p>
+Returns the MAC address of a WiMAX device which this connection is locked
+to.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the MAC address</td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<div class="refsect1">
<a name="NMSettingWimax.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NMSettingWimax--mac-address"></a><h3>The <code class="literal">“mac-addressâ€</code> property</h3>
-<pre class="programlisting"> “mac-address†<span class="type">GArray_guchar_</span> *</pre>
-<p>If specified, this connection will only apply to the WiMAX device whose MAC address matches. This property does not change the MAC address of the device (known as MAC spoofing).</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingWimax--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
+<p>
+If specified, this connection will only apply to the WiMAX device whose
+MAC address matches. This property does not change the MAC address of the
+device (known as MAC spoofing).
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingWimax--network-name"></a><h3>The <code class="literal">“network-nameâ€</code> property</h3>
-<pre class="programlisting"> “network-name†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Network Service Provider (NSP) name of the WiMAX network this connection should use.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingWimax--network-name"></a><h3>The <code class="literal">"network-name"</code> property</h3>
+<pre class="programlisting"> "network-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Network Service Provider (NSP) name of the WiMAX network this connection
+should use.
+</p>
<p>Default value: NULL</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingWired.html b/docs/libnm-util/html/NMSettingWired.html
index 123af42f4..cff6f5b58 100644
--- a/docs/libnm-util/html/NMSettingWired.html
+++ b/docs/libnm-util/html/NMSettingWired.html
@@ -2,28 +2,34 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingWired</title>
+<title>NMSettingWired</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingConnection.html" title="NMSettingConnection">
<link rel="next" href="NMSettingWireless.html" title="NMSettingWireless">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingWired.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingWired.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingWired.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingConnection.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingWireless.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingWireless.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingWired.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingWired.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingWired.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingWired.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingWired"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -31,985 +37,1059 @@
<h2><span class="refentrytitle"><a name="NMSettingWired.top_of_page"></a>NMSettingWired</span></h2>
<p>NMSettingWired — Describes connection properties for Ethernet-based networks</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWired.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingWiredError"></a><pre class="synopsis">
+#include &lt;nm-setting-wired.h&gt;
+
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS" title="NM_SETTING_WIRED_SETTING_NAME">NM_SETTING_WIRED_SETTING_NAME</a>
+enum <a class="link" href="NMSettingWired.html#NMSettingWiredError-enum" title="enum NMSettingWiredError">NMSettingWiredError</a>;
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-ERROR:CAPS" title="NM_SETTING_WIRED_ERROR">NM_SETTING_WIRED_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-error-quark" title="nm_setting_wired_error_quark ()">nm_setting_wired_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-PORT:CAPS" title="NM_SETTING_WIRED_PORT">NM_SETTING_WIRED_PORT</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SPEED:CAPS" title="NM_SETTING_WIRED_SPEED">NM_SETTING_WIRED_SPEED</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-DUPLEX:CAPS" title="NM_SETTING_WIRED_DUPLEX">NM_SETTING_WIRED_DUPLEX</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS" title="NM_SETTING_WIRED_AUTO_NEGOTIATE">NM_SETTING_WIRED_AUTO_NEGOTIATE</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRED_MAC_ADDRESS">NM_SETTING_WIRED_MAC_ADDRESS</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRED_CLONED_MAC_ADDRESS">NM_SETTING_WIRED_CLONED_MAC_ADDRESS</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS" title="NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST">NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MTU:CAPS" title="NM_SETTING_WIRED_MTU">NM_SETTING_WIRED_MTU</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS" title="NM_SETTING_WIRED_S390_SUBCHANNELS">NM_SETTING_WIRED_S390_SUBCHANNELS</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-NETTYPE:CAPS" title="NM_SETTING_WIRED_S390_NETTYPE">NM_SETTING_WIRED_S390_NETTYPE</a>
+#define <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-OPTIONS:CAPS" title="NM_SETTING_WIRED_S390_OPTIONS">NM_SETTING_WIRED_S390_OPTIONS</a>
+ <a class="link" href="NMSettingWired.html#NMSettingWired-struct" title="NMSettingWired">NMSettingWired</a>;
+ <a class="link" href="NMSettingWired.html#NMSettingWiredClass" title="NMSettingWiredClass">NMSettingWiredClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingWired.html#nm-setting-wired-new" title="nm_setting_wired_new ()">nm_setting_wired_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-port" title="nm_setting_wired_get_port ()">nm_setting_wired_get_port</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-get-speed" title="nm_setting_wired_get_speed ()">nm_setting_wired_get_speed</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-duplex" title="nm_setting_wired_get_duplex ()">nm_setting_wired_get_duplex</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-get-auto-negotiate" title="nm_setting_wired_get_auto_negotiate ()">nm_setting_wired_get_auto_negotiate</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address" title="nm_setting_wired_get_mac_address ()">nm_setting_wired_get_mac_address</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-cloned-mac-address" title="nm_setting_wired_get_cloned_mac_address ()">nm_setting_wired_get_cloned_mac_address</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist" title="nm_setting_wired_get_mac_address_blacklist ()">nm_setting_wired_get_mac_address_blacklist</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-mac-blacklist-items" title="nm_setting_wired_get_num_mac_blacklist_items ()">nm_setting_wired_get_num_mac_blacklist_items</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-blacklist-item" title="nm_setting_wired_get_mac_blacklist_item ()">nm_setting_wired_get_mac_blacklist_item</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-add-mac-blacklist-item" title="nm_setting_wired_add_mac_blacklist_item ()">nm_setting_wired_add_mac_blacklist_item</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item" title="nm_setting_wired_remove_mac_blacklist_item ()">nm_setting_wired_remove_mac_blacklist_item</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item-by-value" title="nm_setting_wired_remove_mac_blacklist_item_by_value ()">nm_setting_wired_remove_mac_blacklist_item_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWired.html#nm-setting-wired-clear-mac-blacklist-items" title="nm_setting_wired_clear_mac_blacklist_items ()">nm_setting_wired_clear_mac_blacklist_items</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-get-mtu" title="nm_setting_wired_get_mtu ()">nm_setting_wired_get_mtu</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-subchannels" title="nm_setting_wired_get_s390_subchannels ()">nm_setting_wired_get_s390_subchannels</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-nettype" title="nm_setting_wired_get_s390_nettype ()">nm_setting_wired_get_s390_nettype</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-s390-options" title="nm_setting_wired_get_num_s390_options ()">nm_setting_wired_get_num_s390_options</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option" title="nm_setting_wired_get_s390_option ()">nm_setting_wired_get_s390_option</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_value</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option-by-key" title="nm_setting_wired_get_s390_option_by_key ()">nm_setting_wired_get_s390_option_by_key</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-add-s390-option" title="nm_setting_wired_add_s390_option ()">nm_setting_wired_add_s390_option</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWired.html#nm-setting-wired-remove-s390-option" title="nm_setting_wired_remove_s390_option ()">nm_setting_wired_remove_s390_option</a> (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+const <span class="returnvalue">char</span> ** <a class="link" href="NMSettingWired.html#nm-setting-wired-get-valid-s390-options" title="nm_setting_wired_get_valid_s390_options ()">nm_setting_wired_get_valid_s390_options</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWired.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingWiredError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingWired
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWired.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--auto-negotiate" title='The "auto-negotiate" property'>auto-negotiate</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--cloned-mac-address" title='The "cloned-mac-address" property'>cloned-mac-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--duplex" title='The "duplex" property'>duplex</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title='The "mac-address" property'>mac-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--mac-address-blacklist" title='The "mac-address-blacklist" property'>mac-address-blacklist</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--mtu" title='The "mtu" property'>mtu</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--port" title='The "port" property'>port</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--s390-nettype" title='The "s390-nettype" property'>s390-nettype</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--s390-options" title='The "s390-options" property'>s390-options</a>" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--s390-subchannels" title='The "s390-subchannels" property'>s390-subchannels</a>" <span class="type">GPtrArray_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--speed" title='The "speed" property'>speed</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+</pre>
+</div>
<div class="refsect1">
-<a name="NMSettingWired.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingWired.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for connection to Ethernet networks.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingWired.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-SETTING-NAME:CAPS"></a><h3>NM_SETTING_WIRED_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_SETTING_NAME "802-3-ethernet"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWiredError-enum"></a><h3>enum NMSettingWiredError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_WIRED_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_WIRED_ERROR_MISSING_PROPERTY /*&lt; nick=MissingProperty &gt;*/
+} NMSettingWiredError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-error-quark" title="nm_setting_wired_error_quark ()">nm_setting_wired_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-new" title="nm_setting_wired_new ()">nm_setting_wired_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-port" title="nm_setting_wired_get_port ()">nm_setting_wired_get_port</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-speed" title="nm_setting_wired_get_speed ()">nm_setting_wired_get_speed</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-duplex" title="nm_setting_wired_get_duplex ()">nm_setting_wired_get_duplex</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-auto-negotiate" title="nm_setting_wired_get_auto_negotiate ()">nm_setting_wired_get_auto_negotiate</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRED-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRED_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address" title="nm_setting_wired_get_mac_address ()">nm_setting_wired_get_mac_address</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRED-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRED_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-cloned-mac-address" title="nm_setting_wired_get_cloned_mac_address ()">nm_setting_wired_get_cloned_mac_address</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRED-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRED_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist" title="nm_setting_wired_get_mac_address_blacklist ()">nm_setting_wired_get_mac_address_blacklist</a> <span class="c_punctuation">()</span>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-ERROR:CAPS"></a><h3>NM_SETTING_WIRED_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_ERROR nm_setting_wired_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-error-quark"></a><h3>nm_setting_wired_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_wired_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-PORT:CAPS"></a><h3>NM_SETTING_WIRED_PORT</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_PORT "port"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-SPEED:CAPS"></a><h3>NM_SETTING_WIRED_SPEED</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_SPEED "speed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-DUPLEX:CAPS"></a><h3>NM_SETTING_WIRED_DUPLEX</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_DUPLEX "duplex"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS"></a><h3>NM_SETTING_WIRED_AUTO_NEGOTIATE</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_AUTO_NEGOTIATE "auto-negotiate"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRED_MAC_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_MAC_ADDRESS "mac-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRED_CLONED_MAC_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_CLONED_MAC_ADDRESS "cloned-mac-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS"></a><h3>NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-MTU:CAPS"></a><h3>NM_SETTING_WIRED_MTU</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_MTU "mtu"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS"></a><h3>NM_SETTING_WIRED_S390_SUBCHANNELS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_S390_SUBCHANNELS "s390-subchannels"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-S390-NETTYPE:CAPS"></a><h3>NM_SETTING_WIRED_S390_NETTYPE</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_S390_NETTYPE "s390-nettype"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRED-S390-OPTIONS:CAPS"></a><h3>NM_SETTING_WIRED_S390_OPTIONS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRED_S390_OPTIONS "s390-options"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWired-struct"></a><h3>NMSettingWired</h3>
+<pre class="programlisting">typedef struct _NMSettingWired NMSettingWired;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWiredClass"></a><h3>NMSettingWiredClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingWiredClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-new"></a><h3>nm_setting_wired_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_wired_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-</tr>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-get-port"></a><h3>nm_setting_wired_get_port ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wired_get_port (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mtu" title="nm_setting_wired_get_mtu ()">nm_setting_wired_get_mtu</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-subchannels" title="nm_setting_wired_get_s390_subchannels ()">nm_setting_wired_get_s390_subchannels</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--port" title='The "port" property'><span class="type">"port"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-get-speed"></a><h3>nm_setting_wired_get_speed ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wired_get_speed (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-nettype" title="nm_setting_wired_get_s390_nettype ()">nm_setting_wired_get_s390_nettype</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-s390-options" title="nm_setting_wired_get_num_s390_options ()">nm_setting_wired_get_num_s390_options</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--speed" title='The "speed" property'><span class="type">"speed"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-get-duplex"></a><h3>nm_setting_wired_get_duplex ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wired_get_duplex (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option" title="nm_setting_wired_get_s390_option ()">nm_setting_wired_get_s390_option</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option-by-key" title="nm_setting_wired_get_s390_option_by_key ()">nm_setting_wired_get_s390_option_by_key</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--duplex" title='The "duplex" property'><span class="type">"duplex"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-get-auto-negotiate"></a><h3>nm_setting_wired_get_auto_negotiate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wired_get_auto_negotiate (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-add-s390-option" title="nm_setting_wired_add_s390_option ()">nm_setting_wired_add_s390_option</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWired.html#nm-setting-wired-remove-s390-option" title="nm_setting_wired_remove_s390_option ()">nm_setting_wired_remove_s390_option</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--auto-negotiate" title='The "auto-negotiate" property'><span class="type">"auto-negotiate"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWired.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-get-mac-address"></a><h3>nm_setting_wired_get_mac_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_wired_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--auto-negotiate" title="The “auto-negotiate†property">auto-negotiate</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--cloned-mac-address" title="The “cloned-mac-address†property">cloned-mac-address</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--duplex" title="The “duplex†property">duplex</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title="The “mac-address†property">mac-address</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--mac-address-blacklist" title="The “mac-address-blacklist†property">mac-address-blacklist</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--mtu" title="The “mtu†property">mtu</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--port" title="The “port†property">port</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--s390-nettype" title="The “s390-nettype†property">s390-nettype</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GHashTable_gchararray+gchararray_*</span></td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--s390-options" title="The “s390-options†property">s390-options</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GPtrArray_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--s390-subchannels" title="The “s390-subchannels†property">s390-subchannels</a></td>
-<td class="property_flags">Read / Write</td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWired.html#NMSettingWired--speed" title="The “speed†property">speed</a></td>
-<td class="property_flags">Read / Write / Construct</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWired.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wired-get-cloned-mac-address"></a><h3>nm_setting_wired_get_cloned_mac_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_wired_get_cloned_mac_address
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS" title="NM_SETTING_WIRED_SETTING_NAME">NM_SETTING_WIRED_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NMSettingWiredError" title="enum NMSettingWiredError">NMSettingWiredError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-ERROR:CAPS" title="NM_SETTING_WIRED_ERROR">NM_SETTING_WIRED_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-PORT:CAPS" title="NM_SETTING_WIRED_PORT">NM_SETTING_WIRED_PORT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SPEED:CAPS" title="NM_SETTING_WIRED_SPEED">NM_SETTING_WIRED_SPEED</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-DUPLEX:CAPS" title="NM_SETTING_WIRED_DUPLEX">NM_SETTING_WIRED_DUPLEX</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS" title="NM_SETTING_WIRED_AUTO_NEGOTIATE">NM_SETTING_WIRED_AUTO_NEGOTIATE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRED_MAC_ADDRESS">NM_SETTING_WIRED_MAC_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRED_CLONED_MAC_ADDRESS">NM_SETTING_WIRED_CLONED_MAC_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS" title="NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST">NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MTU:CAPS" title="NM_SETTING_WIRED_MTU">NM_SETTING_WIRED_MTU</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS" title="NM_SETTING_WIRED_S390_SUBCHANNELS">NM_SETTING_WIRED_S390_SUBCHANNELS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-NETTYPE:CAPS" title="NM_SETTING_WIRED_S390_NETTYPE">NM_SETTING_WIRED_S390_NETTYPE</a></td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-OPTIONS:CAPS" title="NM_SETTING_WIRED_S390_OPTIONS">NM_SETTING_WIRED_S390_OPTIONS</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--cloned-mac-address" title='The "cloned-mac-address" property'><span class="type">"cloned-mac-address"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWired.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingWiredError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingWired
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingWired.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-wired.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingWired.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
-necessary for connection to Ethernet networks.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingWired.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-wired-error-quark"></a><h3>nm_setting_wired_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_wired_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> errors.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-new"></a><h3>nm_setting_wired_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_wired_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wired-get-port"></a><h3>nm_setting_wired_get_port ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wired_get_port (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-get-mac-address-blacklist"></a><h3>nm_setting_wired_get_mac_address_blacklist ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_setting_wired_get_mac_address_blacklist
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--mac-address-blacklist" title='The "mac-address-blacklist" property'><span class="type">"mac-address-blacklist"</span></a>
+property of the setting. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GLib.ByteArray]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--port" title="The “port†property"><span class="type">“portâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-speed"></a><h3>nm_setting_wired_get_speed ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wired_get_speed (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-get-num-mac-blacklist-items"></a><h3>nm_setting_wired_get_num_mac_blacklist_items ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wired_get_num_mac_blacklist_items
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of blacklisted MAC addresses</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--speed" title="The “speed†property"><span class="type">“speedâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-duplex"></a><h3>nm_setting_wired_get_duplex ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wired_get_duplex (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-get-mac-blacklist-item"></a><h3>nm_setting_wired_get_mac_blacklist_item ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wired_get_mac_blacklist_item
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zero-based index of the MAC address entry</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the blacklisted MAC address string (hex-digits-and-colons notation)
+at index <em class="parameter"><code>idx</code></em>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--duplex" title="The “duplex†property"><span class="type">“duplexâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-auto-negotiate"></a><h3>nm_setting_wired_get_auto_negotiate ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wired_get_auto_negotiate (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-add-mac-blacklist-item"></a><h3>nm_setting_wired_add_mac_blacklist_item ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wired_add_mac_blacklist_item
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);</pre>
+<p>
+Adds a new MAC address to the <a class="link" href="NMSettingWired.html#NMSettingWired--mac-address-blacklist" title='The "mac-address-blacklist" property'><span class="type">"mac-address-blacklist"</span></a> property.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mac</code></em> :</span></p></td>
+<td>the MAC address string (hex-digits-and-colons notation) to blacklist</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the MAC address was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the MAC address
+is invalid or was already present</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--auto-negotiate" title="The “auto-negotiate†property"><span class="type">“auto-negotiateâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-mac-address"></a><h3>nm_setting_wired_get_mac_address ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_wired_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-remove-mac-blacklist-item"></a><h3>nm_setting_wired_remove_mac_blacklist_item ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wired_remove_mac_blacklist_item
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<p>
+Removes the MAC address at index <em class="parameter"><code>idx</code></em> from the blacklist.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>index number of the MAC address</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.8.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title="The “mac-address†property"><span class="type">“mac-addressâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-cloned-mac-address"></a><h3>nm_setting_wired_get_cloned_mac_address ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_wired_get_cloned_mac_address
- (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-remove-mac-blacklist-item-by-value"></a><h3>nm_setting_wired_remove_mac_blacklist_item_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wired_remove_mac_blacklist_item_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);</pre>
+<p>
+Removes the MAC address <em class="parameter"><code>mac</code></em> from the blacklist.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mac</code></em> :</span></p></td>
+<td>the MAC address string (hex-digits-and-colons notation) to remove from
+the blacklist</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the MAC address was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.9.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--cloned-mac-address" title="The “cloned-mac-address†property"><span class="type">“cloned-mac-addressâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-mac-address-blacklist"></a><h3>nm_setting_wired_get_mac_address_blacklist ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_setting_wired_get_mac_address_blacklist
- (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-clear-mac-blacklist-items"></a><h3>nm_setting_wired_clear_mac_blacklist_items ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wired_clear_mac_blacklist_items
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<p>
+Removes all blacklisted MAC addresses.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
</tr></tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.10.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--mac-address-blacklist" title="The “mac-address-blacklist†property"><span class="type">“mac-address-blacklistâ€</span></a>
-property of the setting. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GLib.ByteArray]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-mtu"></a><h3>nm_setting_wired_get_mtu ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wired_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.5.9.11.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-get-mtu"></a><h3>nm_setting_wired_get_mtu ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wired_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html#NMSettingWired--mtu" title='The "mtu" property'><span class="type">"mtu"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.11.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWired.html#NMSettingWired--mtu" title="The “mtu†property"><span class="type">“mtuâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-s390-subchannels"></a><h3>nm_setting_wired_get_s390_subchannels ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-nm_setting_wired_get_s390_subchannels (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<p>Return the list of s390 subchannels that identify the device that this
+<a name="nm-setting-wired-get-s390-subchannels"></a><h3>nm_setting_wired_get_s390_subchannels ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> * nm_setting_wired_get_s390_subchannels
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<p>
+Return the list of s390 subchannels that identify the device that this
connection is applicable to. The connection should only be used in
-conjunction with that device.</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+conjunction with that device.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of strings, each specifying one
+subchannel the s390 device uses to communicate to the host. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.12.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of strings, each specifying one
-subchannel the s390 device uses to communicate to the host. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-s390-nettype"></a><h3>nm_setting_wired_get_s390_nettype ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wired_get_s390_nettype (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<p>Returns the s390 device type this connection should apply to. Will be one
-of 'qeth', 'lcs', or 'ctc'.</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-get-s390-nettype"></a><h3>nm_setting_wired_get_s390_nettype ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wired_get_s390_nettype (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<p>
+Returns the s390 device type this connection should apply to. Will be one
+of 'qeth', 'lcs', or 'ctc'.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the s390 device type</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.13.6"></a><h4>Returns</h4>
-<p> the s390 device type</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-num-s390-options"></a><h3>nm_setting_wired_get_num_s390_options ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wired_get_num_s390_options (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
-<p>Returns the number of s390-specific options that should be set for this
+<a name="nm-setting-wired-get-num-s390-options"></a><h3>nm_setting_wired_get_num_s390_options ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wired_get_num_s390_options
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
+<p>
+Returns the number of s390-specific options that should be set for this
device when it is activated. This can be used to retrieve each s390
-option individually using <a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option" title="nm_setting_wired_get_s390_option ()"><code class="function">nm_setting_wired_get_s390_option()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+option individually using <a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option" title="nm_setting_wired_get_s390_option ()"><code class="function">nm_setting_wired_get_s390_option()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of s390-specific device options</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.14.6"></a><h4>Returns</h4>
-<p> the number of s390-specific device options</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-s390-option"></a><h3>nm_setting_wired_get_s390_option ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wired_get_s390_option (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **out_key</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> **out_value</code></em>);</pre>
-<p>Given an index, return the value of the s390 option at that index. indexes
+<a name="nm-setting-wired-get-s390-option"></a><h3>nm_setting_wired_get_s390_option ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wired_get_s390_option (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_value</code></em>);</pre>
+<p>
+Given an index, return the value of the s390 option at that index. indexes
are *not* guaranteed to be static across modifications to options done by
-<a class="link" href="NMSettingWired.html#nm-setting-wired-add-s390-option" title="nm_setting_wired_add_s390_option ()"><code class="function">nm_setting_wired_add_s390_option()</code></a> and <a class="link" href="NMSettingWired.html#nm-setting-wired-remove-s390-option" title="nm_setting_wired_remove_s390_option ()"><code class="function">nm_setting_wired_remove_s390_option()</code></a>,
+<a class="link" href="NMSettingWired.html#nm-setting-wired-add-s390-option" title="nm_setting_wired_add_s390_option ()"><code class="function">nm_setting_wired_add_s390_option()</code></a> and <a class="link" href="NMSettingWired.html#nm-setting-wired-remove-s390-option" title="nm_setting_wired_remove_s390_option ()"><code class="function">nm_setting_wired_remove_s390_option()</code></a>,
and should not be used to refer to options except for short periods of time
-such as during option iteration.</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+such as during option iteration.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>index of the desired option, from 0 to
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-s390-options" title="nm_setting_wired_get_num_s390_options ()"><code class="function">nm_setting_wired_get_num_s390_options()</code></a> - 1</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>index of the desired option, from 0 to
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-s390-options" title="nm_setting_wired_get_num_s390_options ()"><code class="function">nm_setting_wired_get_num_s390_options()</code></a> - 1</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_key</p></td>
-<td class="parameter_description"><p> on return, the key name of the s390 specific option; this
-value is owned by the setting and should not be modified. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>out_key</code></em> :</span></p></td>
+<td>on return, the key name of the s390 specific option; this
+value is owned by the setting and should not be modified. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>out_value</p></td>
-<td class="parameter_description"><p> on return, the value of the key of the s390 specific
-option; this value is owned by the setting and should not be modified. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>out_value</code></em> :</span></p></td>
+<td>on return, the value of the key of the s390 specific
+option; this value is owned by the setting and should not be modified. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success if the index was valid and an option was found,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the index was invalid (ie, greater than the number of options
+currently held by the setting)</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.15.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success if the index was valid and an option was found,
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the index was invalid (ie, greater than the number of options
-currently held by the setting)</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-get-s390-option-by-key"></a><h3>nm_setting_wired_get_s390_option_by_key ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wired_get_s390_option_by_key
- (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
-<p>Returns the value associated with the s390-specific option specified by
-<em class="parameter"><code>key</code></em>
-, if it exists.</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wired-get-s390-option-by-key"></a><h3>nm_setting_wired_get_s390_option_by_key ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wired_get_s390_option_by_key
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+<p>
+Returns the value associated with the s390-specific option specified by
+<em class="parameter"><code>key</code></em>, if it exists.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the key for which to retrieve the value</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the key for which to retrieve the value</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the key/value pair was never added to the
+setting; the value is owned by the setting and must not be modified</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.5.9.16.6"></a><h4>Returns</h4>
-<p> the value, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the key/value pair was never added to the
-setting; the value is owned by the setting and must not be modified</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-add-s390-option"></a><h3>nm_setting_wired_add_s390_option ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wired_add_s390_option (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *item</code></em>);</pre>
+<a name="nm-setting-wired-add-s390-option"></a><h3>nm_setting_wired_add_s390_option ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wired_add_s390_option (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);</pre>
<p>
+Add an option to the table. The option is compared to an internal list
+of allowed options. Key names may contain only alphanumeric characters
+(ie [a-zA-Z0-9]). Adding a new key replaces any existing key/value pair that
+may already exist.
</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.17.5"></a><h4>Returns</h4>
-<p></p>
-</div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>key name for the option</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>value for the option</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the option was valid and was added to the internal option
+list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wired-remove-s390-option"></a><h3>nm_setting_wired_remove_s390_option ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wired_remove_s390_option (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.5.9.18.5"></a><h4>Returns</h4>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWired.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-SETTING-WIRED-SETTING-NAME:CAPS"></a><h3>NM_SETTING_WIRED_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_SETTING_NAME "802-3-ethernet"
-</pre>
+<a name="nm-setting-wired-remove-s390-option"></a><h3>nm_setting_wired_remove_s390_option ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wired_remove_s390_option (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
<p>
+Remove the s390-specific option referenced by <em class="parameter"><code>key</code></em> from the internal option
+list.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWiredError"></a><h3>enum NMSettingWiredError</h3>
-<div class="refsect3">
-<a name="id-1.2.5.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRED-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_WIRED_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRED-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_WIRED_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>key name for the option to remove</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRED-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_WIRED_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the option was found and removed from the internal option
+list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-ERROR:CAPS"></a><h3>NM_SETTING_WIRED_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_ERROR nm_setting_wired_error_quark ()
-</pre>
+<a name="nm-setting-wired-get-valid-s390-options"></a><h3>nm_setting_wired_get_valid_s390_options ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> ** nm_setting_wired_get_valid_s390_options
+ (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
<p>
+Returns a list of valid s390 options.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of strings of valid s390 options. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
</div>
-<hr>
+</div>
+<div class="refsect1">
+<a name="NMSettingWired.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-PORT:CAPS"></a><h3>NM_SETTING_WIRED_PORT</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_PORT "port"
-</pre>
+<a name="NMSettingWired--auto-negotiate"></a><h3>The <code class="literal">"auto-negotiate"</code> property</h3>
+<pre class="programlisting"> "auto-negotiate" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre>
<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, allow auto-negotiation of port speed and duplex mode. If
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, do not allow auto-negotiation, in which case the "speed" and
+"duplex" properties should be set.
</p>
+<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-SPEED:CAPS"></a><h3>NM_SETTING_WIRED_SPEED</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_SPEED "speed"
-</pre>
+<a name="NMSettingWired--cloned-mac-address"></a><h3>The <code class="literal">"cloned-mac-address"</code> property</h3>
+<pre class="programlisting"> "cloned-mac-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+If specified, request that the device use this MAC address instead of its
+permanent MAC address. This is known as MAC cloning or spoofing.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-DUPLEX:CAPS"></a><h3>NM_SETTING_WIRED_DUPLEX</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_DUPLEX "duplex"
-</pre>
+<a name="NMSettingWired--duplex"></a><h3>The <code class="literal">"duplex"</code> property</h3>
+<pre class="programlisting"> "duplex" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+If specified, request that the device only use the specified duplex mode.
+Either "half" or "full".
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS"></a><h3>NM_SETTING_WIRED_AUTO_NEGOTIATE</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_AUTO_NEGOTIATE "auto-negotiate"
-</pre>
+<a name="NMSettingWired--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+If specified, this connection will only apply to the Ethernet device
+whose permanent MAC address matches. This property does not change the
+MAC address of the device (i.e. MAC spoofing).
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRED_MAC_ADDRESS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_MAC_ADDRESS "mac-address"
-</pre>
+<a name="NMSettingWired--mac-address-blacklist"></a><h3>The <code class="literal">"mac-address-blacklist"</code> property</h3>
+<pre class="programlisting"> "mac-address-blacklist" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+If specified, this connection will never apply to the Ethernet device
+whose permanent MAC address matches an address in the list. Each MAC
+address is in the standard hex-digits-and-colons notation
+(00:11:22:33:44:55).
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRED_CLONED_MAC_ADDRESS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_CLONED_MAC_ADDRESS "cloned-mac-address"
-</pre>
+<a name="NMSettingWired--mtu"></a><h3>The <code class="literal">"mtu"</code> property</h3>
+<pre class="programlisting"> "mtu" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+If non-zero, only transmit packets of the specified size or smaller,
+breaking larger packets up into multiple Ethernet frames.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS"></a><h3>NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
-</pre>
+<a name="NMSettingWired--port"></a><h3>The <code class="literal">"port"</code> property</h3>
+<pre class="programlisting"> "port" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Specific port type to use if multiple the device supports multiple
+attachment methods. One of "tp" (Twisted Pair), "aui" (Attachment Unit
+Interface), "bnc" (Thin Ethernet) or "mii" (Media Independent Interface.
+If the device supports only one port type, this setting is ignored.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-MTU:CAPS"></a><h3>NM_SETTING_WIRED_MTU</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_MTU "mtu"
-</pre>
+<a name="NMSettingWired--s390-nettype"></a><h3>The <code class="literal">"s390-nettype"</code> property</h3>
+<pre class="programlisting"> "s390-nettype" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+s390 network device type; one of "qeth", "lcs", or "ctc", representing
+the different types of virtual network devices available on s390 systems.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS"></a><h3>NM_SETTING_WIRED_S390_SUBCHANNELS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_S390_SUBCHANNELS "s390-subchannels"
-</pre>
+<a name="NMSettingWired--s390-options"></a><h3>The <code class="literal">"s390-options"</code> property</h3>
+<pre class="programlisting"> "s390-options" <span class="type">GHashTable_gchararray+gchararray_*</span> : Read / Write</pre>
<p>
+Dictionary of key/value pairs of s390-specific device options. Both keys
+and values must be strings. Allowed keys include "portno", "layer2",
+"portname", "protocol", among others. Key names must contain only
+alphanumeric characters (ie, [a-zA-Z0-9]).
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-S390-NETTYPE:CAPS"></a><h3>NM_SETTING_WIRED_S390_NETTYPE</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_S390_NETTYPE "s390-nettype"
-</pre>
+<a name="NMSettingWired--s390-subchannels"></a><h3>The <code class="literal">"s390-subchannels"</code> property</h3>
+<pre class="programlisting"> "s390-subchannels" <span class="type">GPtrArray_gchararray_</span>* : Read / Write</pre>
<p>
+Identifies specific subchannels that this network device uses for
+communication with z/VM or s390 host. Like the
+<a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property for non-z/VM devices, this property
+can be used to ensure this connection only applies to the network device
+that uses these subchannels. The list should contain exactly 3 strings,
+and each string may only be composed of hexadecimal characters and the
+period (.) character.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRED-S390-OPTIONS:CAPS"></a><h3>NM_SETTING_WIRED_S390_OPTIONS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRED_S390_OPTIONS "s390-options"
-</pre>
+<a name="NMSettingWired--speed"></a><h3>The <code class="literal">"speed"</code> property</h3>
+<pre class="programlisting"> "speed" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+If non-zero, request that the device use only the specified speed. In
+Mbit/s, ie 100 == 100Mbit/s.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWired.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingWired--auto-negotiate"></a><h3>The <code class="literal">“auto-negotiateâ€</code> property</h3>
-<pre class="programlisting"> “auto-negotiate†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, allow auto-negotiation of port speed and duplex mode. If FALSE, do not allow auto-negotiation,in which case the 'speed' and 'duplex' properties should be set.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--cloned-mac-address"></a><h3>The <code class="literal">“cloned-mac-addressâ€</code> property</h3>
-<pre class="programlisting"> “cloned-mac-address†<span class="type">GArray_guchar_</span> *</pre>
-<p>If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--duplex"></a><h3>The <code class="literal">“duplexâ€</code> property</h3>
-<pre class="programlisting"> “duplex†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If specified, request that the device only use the specified duplex mode. Either 'half' or 'full'.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--mac-address"></a><h3>The <code class="literal">“mac-addressâ€</code> property</h3>
-<pre class="programlisting"> “mac-address†<span class="type">GArray_guchar_</span> *</pre>
-<p>If specified, this connection will only apply to the ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--mac-address-blacklist"></a><h3>The <code class="literal">“mac-address-blacklistâ€</code> property</h3>
-<pre class="programlisting"> “mac-address-blacklist†<span class="type">GSList_gchararray_</span> *</pre>
-<p>If specified, this connection will never apply to the ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--mtu"></a><h3>The <code class="literal">“mtuâ€</code> property</h3>
-<pre class="programlisting"> “mtu†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--port"></a><h3>The <code class="literal">“portâ€</code> property</h3>
-<pre class="programlisting"> “port†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Specific port type to use if multiple the device supports multiple attachment methods. One of 'tp' (Twisted Pair), 'aui' (Attachment Unit Interface), 'bnc' (Thin Ethernet) or 'mii' (Media Independent Interface. If the device supports only one port type, this setting is ignored.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--s390-nettype"></a><h3>The <code class="literal">“s390-nettypeâ€</code> property</h3>
-<pre class="programlisting"> “s390-nettype†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>s390 network device type; one of 'qeth', 'lcs', or 'ctc', representing the different types of virtual network devices available on s390 systems.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--s390-options"></a><h3>The <code class="literal">“s390-optionsâ€</code> property</h3>
-<pre class="programlisting"> “s390-options†<span class="type">GHashTable_gchararray+gchararray_*</span></pre>
-<p>Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include 'portno', 'layer2', 'portname', 'protocol', among others.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--s390-subchannels"></a><h3>The <code class="literal">“s390-subchannelsâ€</code> property</h3>
-<pre class="programlisting"> “s390-subchannels†<span class="type">GPtrArray_gchararray_</span> *</pre>
-<p>Identifies specific subchannels that this network device uses for communcation with z/VM or s390 host. Like the 'mac-address' property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWired--speed"></a><h3>The <code class="literal">“speedâ€</code> property</h3>
-<pre class="programlisting"> “speed†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s.</p>
-<p>Flags: Read / Write / Construct</p>
<p>Default value: 0</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingWireless.html b/docs/libnm-util/html/NMSettingWireless.html
index 7987e145d..803beb00f 100644
--- a/docs/libnm-util/html/NMSettingWireless.html
+++ b/docs/libnm-util/html/NMSettingWireless.html
@@ -2,1247 +2,1203 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingWireless</title>
+<title>NMSettingWireless</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingWired.html" title="NMSettingWired">
<link rel="next" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingWireless.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingWireless.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingWireless.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingWired.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingWirelessSecurity.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingWired.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingWirelessSecurity.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingWireless.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingWireless.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingWireless.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingWireless.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingWireless"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="NMSettingWireless.top_of_page"></a>NMSettingWireless</span></h2>
-<p>NMSettingWireless — Describes connection properties for 802.11 WiFi networks</p>
+<p>NMSettingWireless — Describes connection properties for 802.11 Wi-Fi networks</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWireless.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingWirelessError"></a><pre class="synopsis">
+#include &lt;nm-setting-wireless.h&gt;
+
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SETTING_NAME">NM_SETTING_WIRELESS_SETTING_NAME</a>
+enum <a class="link" href="NMSettingWireless.html#NMSettingWirelessError-enum" title="enum NMSettingWirelessError">NMSettingWirelessError</a>;
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR:CAPS" title="NM_SETTING_WIRELESS_ERROR">NM_SETTING_WIRELESS_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-error-quark" title="nm_setting_wireless_error_quark ()">nm_setting_wireless_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SSID:CAPS" title="NM_SETTING_WIRELESS_SSID">NM_SETTING_WIRELESS_SSID</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE:CAPS" title="NM_SETTING_WIRELESS_MODE">NM_SETTING_WIRELESS_MODE</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-BAND:CAPS" title="NM_SETTING_WIRELESS_BAND">NM_SETTING_WIRELESS_BAND</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-CHANNEL:CAPS" title="NM_SETTING_WIRELESS_CHANNEL">NM_SETTING_WIRELESS_CHANNEL</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-BSSID:CAPS" title="NM_SETTING_WIRELESS_BSSID">NM_SETTING_WIRELESS_BSSID</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-RATE:CAPS" title="NM_SETTING_WIRELESS_RATE">NM_SETTING_WIRELESS_RATE</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-TX-POWER:CAPS" title="NM_SETTING_WIRELESS_TX_POWER">NM_SETTING_WIRELESS_TX_POWER</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRELESS_MAC_ADDRESS">NM_SETTING_WIRELESS_MAC_ADDRESS</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS">NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS" title="NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST">NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MTU:CAPS" title="NM_SETTING_WIRELESS_MTU">NM_SETTING_WIRELESS_MTU</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS" title="NM_SETTING_WIRELESS_SEEN_BSSIDS">NM_SETTING_WIRELESS_SEEN_BSSIDS</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-HIDDEN:CAPS" title="NM_SETTING_WIRELESS_HIDDEN">NM_SETTING_WIRELESS_HIDDEN</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SEC:CAPS" title="NM_SETTING_WIRELESS_SEC">NM_SETTING_WIRELESS_SEC</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-ADHOC:CAPS" title="NM_SETTING_WIRELESS_MODE_ADHOC">NM_SETTING_WIRELESS_MODE_ADHOC</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-AP:CAPS" title="NM_SETTING_WIRELESS_MODE_AP">NM_SETTING_WIRELESS_MODE_AP</a>
+#define <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-INFRA:CAPS" title="NM_SETTING_WIRELESS_MODE_INFRA">NM_SETTING_WIRELESS_MODE_INFRA</a>
+ <a class="link" href="NMSettingWireless.html#NMSettingWireless-struct" title="NMSettingWireless">NMSettingWireless</a>;
+ <a class="link" href="NMSettingWireless.html#NMSettingWirelessClass" title="NMSettingWirelessClass">NMSettingWirelessClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-new" title="nm_setting_wireless_new ()">nm_setting_wireless_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-ssid" title="nm_setting_wireless_get_ssid ()">nm_setting_wireless_get_ssid</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mode" title="nm_setting_wireless_get_mode ()">nm_setting_wireless_get_mode</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-band" title="nm_setting_wireless_get_band ()">nm_setting_wireless_get_band</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-channel" title="nm_setting_wireless_get_channel ()">nm_setting_wireless_get_channel</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-bssid" title="nm_setting_wireless_get_bssid ()">nm_setting_wireless_get_bssid</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-rate" title="nm_setting_wireless_get_rate ()">nm_setting_wireless_get_rate</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-tx-power" title="nm_setting_wireless_get_tx_power ()">nm_setting_wireless_get_tx_power</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address" title="nm_setting_wireless_get_mac_address ()">nm_setting_wireless_get_mac_address</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address" title="nm_setting_wireless_get_cloned_mac_address ()">nm_setting_wireless_get_cloned_mac_address</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist" title="nm_setting_wireless_get_mac_address_blacklist ()">nm_setting_wireless_get_mac_address_blacklist</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-num-mac-blacklist-items" title="nm_setting_wireless_get_num_mac_blacklist_items ()">nm_setting_wireless_get_num_mac_blacklist_items</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-blacklist-item" title="nm_setting_wireless_get_mac_blacklist_item ()">nm_setting_wireless_get_mac_blacklist_item</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-add-mac-blacklist-item" title="nm_setting_wireless_add_mac_blacklist_item ()">nm_setting_wireless_add_mac_blacklist_item</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item" title="nm_setting_wireless_remove_mac_blacklist_item ()">nm_setting_wireless_remove_mac_blacklist_item</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item-by-value" title="nm_setting_wireless_remove_mac_blacklist_item_by_value ()">nm_setting_wireless_remove_mac_blacklist_item_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-clear-mac-blacklist-items" title="nm_setting_wireless_clear_mac_blacklist_items ()">nm_setting_wireless_clear_mac_blacklist_items</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mtu" title="nm_setting_wireless_get_mtu ()">nm_setting_wireless_get_mtu</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-hidden" title="nm_setting_wireless_get_hidden ()">nm_setting_wireless_get_hidden</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-add-seen-bssid" title="nm_setting_wireless_add_seen_bssid ()">nm_setting_wireless_add_seen_bssid</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *bssid</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids" title="nm_setting_wireless_get_num_seen_bssids ()">nm_setting_wireless_get_num_seen_bssids</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-seen-bssid" title="nm_setting_wireless_get_seen_bssid ()">nm_setting_wireless_get_seen_bssid</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWireless.html#nm-setting-wireless-ap-security-compatible" title="nm_setting_wireless_ap_security_compatible ()">nm_setting_wireless_ap_security_compatible</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *s_wireless</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *s_wireless_sec</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApFlags</span> ap_flags</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_wpa</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_rsn</code></em>,
+ <em class="parameter"><code><span class="type">NM80211Mode</span> ap_mode</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-security" title="nm_setting_wireless_get_security ()">nm_setting_wireless_get_security</a> (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWireless.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingWirelessError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingWireless
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWireless.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title='The "band" property'>band</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--bssid" title='The "bssid" property'>bssid</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--channel" title='The "channel" property'>channel</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--cloned-mac-address" title='The "cloned-mac-address" property'>cloned-mac-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--hidden" title='The "hidden" property'>hidden</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address" title='The "mac-address" property'>mac-address</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist" title='The "mac-address-blacklist" property'>mac-address-blacklist</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--mode" title='The "mode" property'>mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--mtu" title='The "mtu" property'>mtu</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--rate" title='The "rate" property'>rate</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--security" title='The "security" property'>security</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--seen-bssids" title='The "seen-bssids" property'>seen-bssids</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--ssid" title='The "ssid" property'>ssid</a>" <span class="type">GArray_guchar_</span>* : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--tx-power" title='The "tx-power" property'>tx-power</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWireless.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
+necessary for connection to 802.11 Wi-Fi networks.
+</p>
+</div>
<div class="refsect1">
-<a name="NMSettingWireless.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingWireless.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SETTING-NAME:CAPS"></a><h3>NM_SETTING_WIRELESS_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SETTING_NAME "802-11-wireless"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessError-enum"></a><h3>enum NMSettingWirelessError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_WIRELESS_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING, /*&lt; nick=MissingSecuritySetting &gt;*/
+ NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND /*&lt; nick=ChannelRequiresBand &gt;*/
+} NMSettingWirelessError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-error-quark" title="nm_setting_wireless_error_quark ()">nm_setting_wireless_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-new" title="nm_setting_wireless_new ()">nm_setting_wireless_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-ssid" title="nm_setting_wireless_get_ssid ()">nm_setting_wireless_get_ssid</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mode" title="nm_setting_wireless_get_mode ()">nm_setting_wireless_get_mode</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-band" title="nm_setting_wireless_get_band ()">nm_setting_wireless_get_band</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was missing and is
+required
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-channel" title="nm_setting_wireless_get_channel ()">nm_setting_wireless_get_channel</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-ERROR-MISSING-SECURITY-SETTING:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING</code></span></p></td>
+<td>property values require
+the presence of an <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object in the connection
</td>
</tr>
<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-bssid" title="nm_setting_wireless_get_bssid ()">nm_setting_wireless_get_bssid</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-rate" title="nm_setting_wireless_get_rate ()">nm_setting_wireless_get_rate</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-ERROR-CHANNEL-REQUIRES-BAND:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND</code></span></p></td>
+<td>the property channel was
+set to a value that requires the <a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title='The "band" property'><span class="type">"band"</span></a> property to be set
</td>
</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-tx-power" title="nm_setting_wireless_get_tx_power ()">nm_setting_wireless_get_tx_power</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address" title="nm_setting_wireless_get_mac_address ()">nm_setting_wireless_get_mac_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address" title="nm_setting_wireless_get_cloned_mac_address ()">nm_setting_wireless_get_cloned_mac_address</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist" title="nm_setting_wireless_get_mac_address_blacklist ()">nm_setting_wireless_get_mac_address_blacklist</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mtu" title="nm_setting_wireless_get_mtu ()">nm_setting_wireless_get_mtu</a> <span class="c_punctuation">()</span>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-ERROR:CAPS"></a><h3>NM_SETTING_WIRELESS_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_ERROR nm_setting_wireless_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-error-quark"></a><h3>nm_setting_wireless_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_wireless_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SSID:CAPS"></a><h3>NM_SETTING_WIRELESS_SSID</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SSID "ssid"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-MODE:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE "mode"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-BAND:CAPS"></a><h3>NM_SETTING_WIRELESS_BAND</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_BAND "band"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-CHANNEL:CAPS"></a><h3>NM_SETTING_WIRELESS_CHANNEL</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_CHANNEL "channel"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-BSSID:CAPS"></a><h3>NM_SETTING_WIRELESS_BSSID</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_BSSID "bssid"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-RATE:CAPS"></a><h3>NM_SETTING_WIRELESS_RATE</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_RATE "rate"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-TX-POWER:CAPS"></a><h3>NM_SETTING_WIRELESS_TX_POWER</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_TX_POWER "tx-power"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRELESS_MAC_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_MAC_ADDRESS "mac-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS "cloned-mac-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS"></a><h3>NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-MTU:CAPS"></a><h3>NM_SETTING_WIRELESS_MTU</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_MTU "mtu"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS"></a><h3>NM_SETTING_WIRELESS_SEEN_BSSIDS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SEEN_BSSIDS "seen-bssids"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-HIDDEN:CAPS"></a><h3>NM_SETTING_WIRELESS_HIDDEN</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_HIDDEN "hidden"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SEC:CAPS"></a><h3>NM_SETTING_WIRELESS_SEC</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SEC "security"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-MODE-ADHOC:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE_ADHOC</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE_ADHOC "adhoc"
+</pre>
+<p>
+Indicates Ad-Hoc mode where no access point is expected to be present.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-MODE-AP:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE_AP</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE_AP "ap"
+</pre>
+<p>
+Indicates AP/master mode where the wireless device is started as an access
+point/hotspot.
+</p>
+<p class="since">Since 0.9.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-MODE-INFRA:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE_INFRA</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE_INFRA "infrastructure"
+</pre>
+<p>
+Indicates infrastructure mode where an access point is expected to be present
+for this connection.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWireless-struct"></a><h3>NMSettingWireless</h3>
+<pre class="programlisting">typedef struct _NMSettingWireless NMSettingWireless;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessClass"></a><h3>NMSettingWirelessClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingWirelessClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-new"></a><h3>nm_setting_wireless_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_wireless_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
-</tr>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-get-ssid"></a><h3>nm_setting_wireless_get_ssid ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_wireless_get_ssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-security" title="nm_setting_wireless_get_security ()">nm_setting_wireless_get_security</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-hidden" title="nm_setting_wireless_get_hidden ()">nm_setting_wireless_get_hidden</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--ssid" title='The "ssid" property'><span class="type">"ssid"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-get-mode"></a><h3>nm_setting_wireless_get_mode ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_get_mode (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-add-seen-bssid" title="nm_setting_wireless_add_seen_bssid ()">nm_setting_wireless_add_seen_bssid</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids" title="nm_setting_wireless_get_num_seen_bssids ()">nm_setting_wireless_get_num_seen_bssids</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--mode" title='The "mode" property'><span class="type">"mode"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-get-band"></a><h3>nm_setting_wireless_get_band ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_get_band (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-seen-bssid" title="nm_setting_wireless_get_seen_bssid ()">nm_setting_wireless_get_seen_bssid</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-ap-security-compatible" title="nm_setting_wireless_ap_security_compatible ()">nm_setting_wireless_ap_security_compatible</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title='The "band" property'><span class="type">"band"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWireless.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-get-channel"></a><h3>nm_setting_wireless_get_channel ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_get_channel (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title="The “band†property">band</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--bssid" title="The “bssid†property">bssid</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--channel" title="The “channel†property">channel</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--cloned-mac-address" title="The “cloned-mac-address†property">cloned-mac-address</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--hidden" title="The “hidden†property">hidden</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address" title="The “mac-address†property">mac-address</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist" title="The “mac-address-blacklist†property">mac-address-blacklist</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--mode" title="The “mode†property">mode</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--mtu" title="The “mtu†property">mtu</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--rate" title="The “rate†property">rate</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--security" title="The “security†property">security</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--seen-bssids" title="The “seen-bssids†property">seen-bssids</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GArray_guchar_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--ssid" title="The “ssid†property">ssid</a></td>
-<td class="property_flags">Read / Write</td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
</tr>
<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWireless.html#NMSettingWireless--tx-power" title="The “tx-power†property">tx-power</a></td>
-<td class="property_flags">Read / Write / Construct</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--channel" title='The "channel" property'><span class="type">"channel"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWireless.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-get-bssid"></a><h3>nm_setting_wireless_get_bssid ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_wireless_get_bssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SETTING_NAME">NM_SETTING_WIRELESS_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NMSettingWirelessError" title="enum NMSettingWirelessError">NMSettingWirelessError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR:CAPS" title="NM_SETTING_WIRELESS_ERROR">NM_SETTING_WIRELESS_ERROR</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SSID:CAPS" title="NM_SETTING_WIRELESS_SSID">NM_SETTING_WIRELESS_SSID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE:CAPS" title="NM_SETTING_WIRELESS_MODE">NM_SETTING_WIRELESS_MODE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-BAND:CAPS" title="NM_SETTING_WIRELESS_BAND">NM_SETTING_WIRELESS_BAND</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-CHANNEL:CAPS" title="NM_SETTING_WIRELESS_CHANNEL">NM_SETTING_WIRELESS_CHANNEL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-BSSID:CAPS" title="NM_SETTING_WIRELESS_BSSID">NM_SETTING_WIRELESS_BSSID</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-RATE:CAPS" title="NM_SETTING_WIRELESS_RATE">NM_SETTING_WIRELESS_RATE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-TX-POWER:CAPS" title="NM_SETTING_WIRELESS_TX_POWER">NM_SETTING_WIRELESS_TX_POWER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRELESS_MAC_ADDRESS">NM_SETTING_WIRELESS_MAC_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS">NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS" title="NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST">NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MTU:CAPS" title="NM_SETTING_WIRELESS_MTU">NM_SETTING_WIRELESS_MTU</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS" title="NM_SETTING_WIRELESS_SEEN_BSSIDS">NM_SETTING_WIRELESS_SEEN_BSSIDS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SEC:CAPS" title="NM_SETTING_WIRELESS_SEC">NM_SETTING_WIRELESS_SEC</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-HIDDEN:CAPS" title="NM_SETTING_WIRELESS_HIDDEN">NM_SETTING_WIRELESS_HIDDEN</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-ADHOC:CAPS" title="NM_SETTING_WIRELESS_MODE_ADHOC">NM_SETTING_WIRELESS_MODE_ADHOC</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-AP:CAPS" title="NM_SETTING_WIRELESS_MODE_AP">NM_SETTING_WIRELESS_MODE_AP</a></td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-INFRA:CAPS" title="NM_SETTING_WIRELESS_MODE_INFRA">NM_SETTING_WIRELESS_MODE_INFRA</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--bssid" title='The "bssid" property'><span class="type">"bssid"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWireless.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMSettingWirelessError
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingWireless
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingWireless.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-wireless.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="NMSettingWireless.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes properties
-necessary for connection to 802.11 WiFi networks.</p>
-</div>
-<div class="refsect1">
-<a name="NMSettingWireless.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-setting-wireless-error-quark"></a><h3>nm_setting_wireless_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_wireless_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.6.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> errors.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wireless-new"></a><h3>nm_setting_wireless_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_wireless_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.6.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-ssid"></a><h3>nm_setting_wireless_get_ssid ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_wireless_get_ssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-rate"></a><h3>nm_setting_wireless_get_rate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_get_rate (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--rate" title='The "rate" property'><span class="type">"rate"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--ssid" title="The “ssid†property"><span class="type">“ssidâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-mode"></a><h3>nm_setting_wireless_get_mode ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_get_mode (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-tx-power"></a><h3>nm_setting_wireless_get_tx_power ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_get_tx_power (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--tx-power" title='The "tx-power" property'><span class="type">"tx-power"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.5.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--mode" title="The “mode†property"><span class="type">“modeâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-band"></a><h3>nm_setting_wireless_get_band ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_get_band (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-mac-address"></a><h3>nm_setting_wireless_get_mac_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_wireless_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.6.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title="The “band†property"><span class="type">“bandâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-channel"></a><h3>nm_setting_wireless_get_channel ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_get_channel (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-cloned-mac-address"></a><h3>nm_setting_wireless_get_cloned_mac_address ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_setting_wireless_get_cloned_mac_address
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--cloned-mac-address" title='The "cloned-mac-address" property'><span class="type">"cloned-mac-address"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.7.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--channel" title="The “channel†property"><span class="type">“channelâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-bssid"></a><h3>nm_setting_wireless_get_bssid ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_wireless_get_bssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-mac-address-blacklist"></a><h3>nm_setting_wireless_get_mac_address_blacklist ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_setting_wireless_get_mac_address_blacklist
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist" title='The "mac-address-blacklist" property'><span class="type">"mac-address-blacklist"</span></a> property of the setting. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GLib.ByteArray]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.8.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--bssid" title="The “bssid†property"><span class="type">“bssidâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-rate"></a><h3>nm_setting_wireless_get_rate ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_get_rate (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-num-mac-blacklist-items"></a><h3>nm_setting_wireless_get_num_mac_blacklist_items ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_get_num_mac_blacklist_items
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of blacklisted MAC addresses</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.9.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--rate" title="The “rate†property"><span class="type">“rateâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-tx-power"></a><h3>nm_setting_wireless_get_tx_power ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_get_tx_power (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-mac-blacklist-item"></a><h3>nm_setting_wireless_get_mac_blacklist_item ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_get_mac_blacklist_item
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zero-based index of the MAC address entry</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the blacklisted MAC address string (hex-digits-and-colons notation)
+at index <em class="parameter"><code>idx</code></em>
+</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.10.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--tx-power" title="The “tx-power†property"><span class="type">“tx-powerâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-mac-address"></a><h3>nm_setting_wireless_get_mac_address ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_wireless_get_mac_address (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.11.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-add-mac-blacklist-item"></a><h3>nm_setting_wireless_add_mac_blacklist_item ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_add_mac_blacklist_item
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);</pre>
+<p>
+Adds a new MAC address to the <a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist" title='The "mac-address-blacklist" property'><span class="type">"mac-address-blacklist"</span></a> property.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mac</code></em> :</span></p></td>
+<td>the MAC address string (hex-digits-and-colons notation) to blacklist</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the MAC address was added; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the MAC address
+is invalid or was already present</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.11.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address" title="The “mac-address†property"><span class="type">“mac-addressâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-cloned-mac-address"></a><h3>nm_setting_wireless_get_cloned_mac_address ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_setting_wireless_get_cloned_mac_address
- (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.12.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-remove-mac-blacklist-item"></a><h3>nm_setting_wireless_remove_mac_blacklist_item ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_remove_mac_blacklist_item
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<p>
+Removes the MAC address at index <em class="parameter"><code>idx</code></em> from the blacklist.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>index number of the MAC address</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.12.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--cloned-mac-address" title="The “cloned-mac-address†property"><span class="type">“cloned-mac-addressâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-mac-address-blacklist"></a><h3>nm_setting_wireless_get_mac_address_blacklist ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_setting_wireless_get_mac_address_blacklist
- (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.13.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-remove-mac-blacklist-item-by-value"></a><h3>nm_setting_wireless_remove_mac_blacklist_item_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_remove_mac_blacklist_item_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);</pre>
+<p>
+Removes the MAC address <em class="parameter"><code>mac</code></em> from the blacklist.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mac</code></em> :</span></p></td>
+<td>the MAC address string (hex-digits-and-colons notation) to remove from
+the blacklist</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the MAC address was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.13.5"></a><h4>Returns</h4>
-<p> the
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist" title="The “mac-address-blacklist†property"><span class="type">“mac-address-blacklistâ€</span></a> property of the setting. </p>
-<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GLib.ByteArray]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-mtu"></a><h3>nm_setting_wireless_get_mtu ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.14.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-clear-mac-blacklist-items"></a><h3>nm_setting_wireless_clear_mac_blacklist_items ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_clear_mac_blacklist_items
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<p>
+Removes all blacklisted MAC addresses.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
</tr></tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.14.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--mtu" title="The “mtu†property"><span class="type">“mtuâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-security"></a><h3>nm_setting_wireless_get_security ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_get_security (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.15.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-mtu"></a><h3>nm_setting_wireless_get_mtu ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_get_mtu (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--mtu" title='The "mtu" property'><span class="type">"mtu"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.15.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--security" title="The “security†property"><span class="type">“securityâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-hidden"></a><h3>nm_setting_wireless_get_hidden ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wireless_get_hidden (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.16.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-hidden"></a><h3>nm_setting_wireless_get_hidden ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_get_hidden (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--hidden" title='The "hidden" property'><span class="type">"hidden"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.16.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWireless.html#NMSettingWireless--hidden" title="The “hidden†property"><span class="type">“hiddenâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-add-seen-bssid"></a><h3>nm_setting_wireless_add_seen_bssid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wireless_add_seen_bssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *bssid</code></em>);</pre>
-<p>Adds a new Wi-Fi AP's BSSID to the previously seen BSSID list of the setting.
+<a name="nm-setting-wireless-add-seen-bssid"></a><h3>nm_setting_wireless_add_seen_bssid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_add_seen_bssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *bssid</code></em>);</pre>
+<p>
+Adds a new Wi-Fi AP's BSSID to the previously seen BSSID list of the setting.
NetworkManager now tracks previously seen BSSIDs internally so this function
no longer has much use. Actually, changes you make using this function will
-not be preserved.</p>
-<div class="refsect3">
-<a name="id-1.2.6.9.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+not be preserved.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bssid</code></em> :</span></p></td>
+<td>the new BSSID to add to the list</td>
</tr>
<tr>
-<td class="parameter_name"><p>bssid</p></td>
-<td class="parameter_description"><p>the new BSSID to add to the list</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>bssid</code></em> was already known, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.17.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>bssid</code></em>
-was already known, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-num-seen-bssids"></a><h3>nm_setting_wireless_get_num_seen_bssids ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_get_num_seen_bssids
- (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.18.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-num-seen-bssids"></a><h3>nm_setting_wireless_get_num_seen_bssids ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_get_num_seen_bssids
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of BSSIDs in the previously seen BSSID list</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.18.5"></a><h4>Returns</h4>
-<p> the number of BSSIDs in the previously seen BSSID list</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-get-seen-bssid"></a><h3>nm_setting_wireless_get_seen_bssid ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_get_seen_bssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.6.9.19.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-seen-bssid"></a><h3>nm_setting_wireless_get_seen_bssid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_get_seen_bssid (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index of a BSSID in the previously seen BSSID list</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index of a BSSID in the previously seen BSSID list</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the BSSID at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.19.5"></a><h4>Returns</h4>
-<p> the BSSID at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-ap-security-compatible"></a><h3>nm_setting_wireless_ap_security_compatible ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wireless_ap_security_compatible
- (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *s_wireless</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *s_wireless_sec</code></em>,
- <em class="parameter"><code><span class="type">NM80211ApFlags</span> ap_flags</code></em>,
- <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_wpa</code></em>,
- <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_rsn</code></em>,
- <em class="parameter"><code><span class="type">NM80211Mode</span> ap_mode</code></em>);</pre>
-<p>Given a <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> and an optional <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>,
+<a name="nm-setting-wireless-ap-security-compatible"></a><h3>nm_setting_wireless_ap_security_compatible ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_ap_security_compatible
+ (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *s_wireless</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *s_wireless_sec</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApFlags</span> ap_flags</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_wpa</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_rsn</code></em>,
+ <em class="parameter"><code><span class="type">NM80211Mode</span> ap_mode</code></em>);</pre>
+<p>
+Given a <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> and an optional <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>,
determine if the configuration given by the settings is compatible with
the security of an access point using that access point's capability flags
and mode. Useful for clients that wish to filter a set of connections
against a set of access points and determine which connections are
-compatible with which access points.</p>
-<div class="refsect3">
-<a name="id-1.2.6.9.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+compatible with which access points.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>s_wireless</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>s_wireless</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>s_wireless_sec</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>s_wireless_sec</p></td>
-<td class="parameter_description"><p>a <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>ap_flags</code></em> :</span></p></td>
+<td>the <code class="literal">NM80211ApFlags</code> of the given access point</td>
</tr>
<tr>
-<td class="parameter_name"><p>ap_flags</p></td>
-<td class="parameter_description"><p>the <code class="literal">NM80211ApFlags</code> of the given access point</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>ap_wpa</code></em> :</span></p></td>
+<td>the <code class="literal">NM80211ApSecurityFlags</code> of the given access point's WPA
+capabilities</td>
</tr>
<tr>
-<td class="parameter_name"><p>ap_wpa</p></td>
-<td class="parameter_description"><p>the <code class="literal">NM80211ApSecurityFlags</code> of the given access point's WPA
-capabilities</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>ap_rsn</code></em> :</span></p></td>
+<td>the <code class="literal">NM80211ApSecurityFlags</code> of the given access point's WPA2/RSN
+capabilities</td>
</tr>
<tr>
-<td class="parameter_name"><p>ap_rsn</p></td>
-<td class="parameter_description"><p>the <code class="literal">NM80211ApSecurityFlags</code> of the given access point's WPA2/RSN
-capabilities</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>ap_mode</code></em> :</span></p></td>
+<td>the 802.11 mode of the AP, either Ad-Hoc or Infrastructure</td>
</tr>
<tr>
-<td class="parameter_name"><p>ap_mode</p></td>
-<td class="parameter_description"><p>the 802.11 mode of the AP, either Ad-Hoc or Infrastructure</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the given settings are compatible with the access point's
+security flags and mode, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.6.9.20.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the given settings are compatible with the access point's
-security flags and mode, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not.</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWireless.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SETTING-NAME:CAPS"></a><h3>NM_SETTING_WIRELESS_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SETTING_NAME "802-11-wireless"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingWirelessError"></a><h3>enum NMSettingWirelessError</h3>
-<div class="refsect3">
-<a name="id-1.2.6.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-get-security"></a><h3>nm_setting_wireless_get_security ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_get_security (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">nm_setting_wireless_get_security</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used. Security rescrictions are recognized by
+the presence of NM_SETTING_WIRELESS_SECURITY_SETTING_NAME in the connection.</p>
+</div>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_WIRELESS_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was missing and is
-required</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-ERROR-MISSING-SECURITY-SETTING:CAPS"></a>NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING</p></td>
-<td class="enum_member_description">
-<p>property values require
-the presence of an <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object in the connection</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-ERROR-CHANNEL-REQUIRES-BAND:CAPS"></a>NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND</p></td>
-<td class="enum_member_description">
-<p>the property channel was
-set to a value that requires the <a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title="The “band†property"><span class="type">“bandâ€</span></a> property to be set</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWireless.html#NMSettingWireless--security" title='The "security" property'><span class="type">"security"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMSettingWireless.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-ERROR:CAPS"></a><h3>NM_SETTING_WIRELESS_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_ERROR nm_setting_wireless_error_quark ()
-</pre>
+<a name="NMSettingWireless--band"></a><h3>The <code class="literal">"band"</code> property</h3>
+<pre class="programlisting"> "band" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+802.11 frequency band of the network. One of "a" for 5GHz 802.11a or
+"bg" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network
+to the specific band, i.e. if "a" is specified, the device will not
+associate with the same network in the 2.4GHz band even if the network's
+settings are compatible. This setting depends on specific driver
+capability and may not work with all drivers.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SSID:CAPS"></a><h3>NM_SETTING_WIRELESS_SSID</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SSID "ssid"
-</pre>
+<a name="NMSettingWireless--bssid"></a><h3>The <code class="literal">"bssid"</code> property</h3>
+<pre class="programlisting"> "bssid" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+If specified, directs the device to only associate with the given access
+point. This capability is highly driver dependent and not supported by
+all devices. Note: this property does not control the BSSID used when
+creating an Ad-Hoc network and is unlikely to in the future.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-MODE:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE "mode"
-</pre>
+<a name="NMSettingWireless--channel"></a><h3>The <code class="literal">"channel"</code> property</h3>
+<pre class="programlisting"> "channel" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+Wireless channel to use for the Wi-Fi connection. The device will only
+join (or create for Ad-Hoc networks) a Wi-Fi network on the specified
+channel. Because channel numbers overlap between bands, this property
+also requires the "band" property to be set.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-BAND:CAPS"></a><h3>NM_SETTING_WIRELESS_BAND</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_BAND "band"
-</pre>
+<a name="NMSettingWireless--cloned-mac-address"></a><h3>The <code class="literal">"cloned-mac-address"</code> property</h3>
+<pre class="programlisting"> "cloned-mac-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+If specified, request that the Wi-Fi device use this MAC address instead
+of its permanent MAC address. This is known as MAC cloning or spoofing.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-CHANNEL:CAPS"></a><h3>NM_SETTING_WIRELESS_CHANNEL</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_CHANNEL "channel"
-</pre>
+<a name="NMSettingWireless--hidden"></a><h3>The <code class="literal">"hidden"</code> property</h3>
+<pre class="programlisting"> "hidden" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write</pre>
<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, indicates this network is a non-broadcasting network that hides
+its SSID. In this case various workarounds may take place, such as
+probe-scanning the SSID for more reliable network discovery. However,
+these workarounds expose inherent insecurities with hidden SSID networks,
+and thus hidden SSID networks should be used with caution.
</p>
+<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-BSSID:CAPS"></a><h3>NM_SETTING_WIRELESS_BSSID</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_BSSID "bssid"
-</pre>
+<a name="NMSettingWireless--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+If specified, this connection will only apply to the Wi-Fi device whose
+permanent MAC address matches. This property does not change the MAC
+address of the device (i.e. MAC spoofing).
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-RATE:CAPS"></a><h3>NM_SETTING_WIRELESS_RATE</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_RATE "rate"
-</pre>
+<a name="NMSettingWireless--mac-address-blacklist"></a><h3>The <code class="literal">"mac-address-blacklist"</code> property</h3>
+<pre class="programlisting"> "mac-address-blacklist" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+A list of permanent MAC addresses of Wi-Fi devices to which this
+connection should never apply. Each MAC address should be given in the
+standard hex-digits-and-colons notation (eg "00:11:22:33:44:55").
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-TX-POWER:CAPS"></a><h3>NM_SETTING_WIRELESS_TX_POWER</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_TX_POWER "tx-power"
-</pre>
+<a name="NMSettingWireless--mode"></a><h3>The <code class="literal">"mode"</code> property</h3>
+<pre class="programlisting"> "mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Wi-Fi network mode; one of "infrastructure", "adhoc" or "ap". If blank,
+infrastructure is assumed.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRELESS_MAC_ADDRESS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_MAC_ADDRESS "mac-address"
-</pre>
+<a name="NMSettingWireless--mtu"></a><h3>The <code class="literal">"mtu"</code> property</h3>
+<pre class="programlisting"> "mtu" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+If non-zero, only transmit packets of the specified size or smaller,
+breaking larger packets up into multiple Ethernet frames.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS "cloned-mac-address"
-</pre>
+<a name="NMSettingWireless--rate"></a><h3>The <code class="literal">"rate"</code> property</h3>
+<pre class="programlisting"> "rate" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+If non-zero, directs the device to only use the specified bitrate for
+communication with the access point. Units are in Kb/s, ie 5500 = 5.5
+Mbit/s. This property is highly driver dependent and not all devices
+support setting a static bitrate.
</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS"></a><h3>NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
-</pre>
-<p>
-</p>
+<a name="NMSettingWireless--security"></a><h3>The <code class="literal">"security"</code> property</h3>
+<pre class="programlisting"> "security" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">NMSettingWireless:security</code> has been deprecated since version 0.9.10 and should not be used in newly-written code. No longer used. Security restrictions are recognized
+by the presence of a <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> setting in the
+connection.</p>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-MTU:CAPS"></a><h3>NM_SETTING_WIRELESS_MTU</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_MTU "mtu"
-</pre>
<p>
+If the wireless connection has any security restrictions, like 802.1x,
+WEP, or WPA, set this property to
+<a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SECURITY_SETTING_NAME"><code class="literal">NM_SETTING_WIRELESS_SECURITY_SETTING_NAME</code></a> and ensure the connection
+contains a valid <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> setting.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS"></a><h3>NM_SETTING_WIRELESS_SEEN_BSSIDS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SEEN_BSSIDS "seen-bssids"
-</pre>
+<a name="NMSettingWireless--seen-bssids"></a><h3>The <code class="literal">"seen-bssids"</code> property</h3>
+<pre class="programlisting"> "seen-bssids" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+A list of BSSIDs (each BSSID formatted as a MAC address like
+"00:11:22:33:44:55") that have been detected as part of the Wi-Fi
+network. NetworkManager internally tracks previously seen BSSIDs. The
+property is only meant for reading and reflects the BSSID list of
+NetworkManager. The changes you make to this property will not be
+preserved.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SEC:CAPS"></a><h3>NM_SETTING_WIRELESS_SEC</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SEC "security"
-</pre>
+<a name="NMSettingWireless--ssid"></a><h3>The <code class="literal">"ssid"</code> property</h3>
+<pre class="programlisting"> "ssid" <span class="type">GArray_guchar_</span>* : Read / Write</pre>
<p>
+SSID of the Wi-Fi network. Must be specified.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-HIDDEN:CAPS"></a><h3>NM_SETTING_WIRELESS_HIDDEN</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_HIDDEN "hidden"
-</pre>
+<a name="NMSettingWireless--tx-power"></a><h3>The <code class="literal">"tx-power"</code> property</h3>
+<pre class="programlisting"> "tx-power" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+If non-zero, directs the device to use the specified transmit power.
+Units are dBm. This property is highly driver dependent and not all
+devices support setting a static transmit power.
</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-MODE-ADHOC:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE_ADHOC</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE_ADHOC "adhoc"
-</pre>
-<p>Indicates Ad-Hoc mode where no access point is expected to be present.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-MODE-AP:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE_AP</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE_AP "ap"
-</pre>
-<p>Indicates AP/master mode where the wireless device is started as an access
-point/hotspot.</p>
-<p class="since">Since 0.9.8</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-MODE-INFRA:CAPS"></a><h3>NM_SETTING_WIRELESS_MODE_INFRA</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_MODE_INFRA "infrastructure"
-</pre>
-<p>Indicates infrastructure mode where an access point is expected to be present
-for this connection.</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWireless.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingWireless--band"></a><h3>The <code class="literal">“bandâ€</code> property</h3>
-<pre class="programlisting"> “band†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>802.11 frequency band of the network. One of 'a' for 5GHz 802.11a or 'bg' for 2.4GHz 802.11. This will lock associations to the WiFi network to the specific band, i.e. if 'a' is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--bssid"></a><h3>The <code class="literal">“bssidâ€</code> property</h3>
-<pre class="programlisting"> “bssid†<span class="type">GArray_guchar_</span> *</pre>
-<p>If specified, directs the device to only associate with the given access point. This capability is highly driver dependent and not supported by all devices. Note: this property does not control the BSSID used when creating an Ad-Hoc network and is unlikely to in the future.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--channel"></a><h3>The <code class="literal">“channelâ€</code> property</h3>
-<pre class="programlisting"> “channel†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Wireless channel to use for the WiFi connection. The device will only join (or create for Ad-Hoc networks) a WiFi network on the specified channel. Because channel numbers overlap between bands, this property also requires the 'band' property to be set.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--cloned-mac-address"></a><h3>The <code class="literal">“cloned-mac-addressâ€</code> property</h3>
-<pre class="programlisting"> “cloned-mac-address†<span class="type">GArray_guchar_</span> *</pre>
-<p>If specified, request that the WiFi device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--hidden"></a><h3>The <code class="literal">“hiddenâ€</code> property</h3>
-<pre class="programlisting"> “hidden†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>If TRUE, indicates this network is a non-broadcasting network that hides its SSID. In this case various workarounds may take place, such as probe-scanning the SSID for more reliable network discovery. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--mac-address"></a><h3>The <code class="literal">“mac-addressâ€</code> property</h3>
-<pre class="programlisting"> “mac-address†<span class="type">GArray_guchar_</span> *</pre>
-<p>If specified, this connection will only apply to the WiFi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--mac-address-blacklist"></a><h3>The <code class="literal">“mac-address-blacklistâ€</code> property</h3>
-<pre class="programlisting"> “mac-address-blacklist†<span class="type">GSList_gchararray_</span> *</pre>
-<p>A list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg '00:11:22:33:44:55').</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--mode"></a><h3>The <code class="literal">“modeâ€</code> property</h3>
-<pre class="programlisting"> “mode†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>WiFi network mode; one of 'infrastructure', 'adhoc' or 'ap'. If blank, infrastructure is assumed.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--mtu"></a><h3>The <code class="literal">“mtuâ€</code> property</h3>
-<pre class="programlisting"> “mtu†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--rate"></a><h3>The <code class="literal">“rateâ€</code> property</h3>
-<pre class="programlisting"> “rate†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, directs the device to only use the specified bitrate for communication with the access point. Units are in Kb/s, ie 5500 = 5.5 Mbit/s. This property is highly driver dependent and not all devices support setting a static bitrate.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--security"></a><h3>The <code class="literal">“securityâ€</code> property</h3>
-<pre class="programlisting"> “security†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>If the wireless connection has any security restrictions, like 802.1x, WEP, or WPA, set this property to '802-11-wireless-security' and ensure the connection contains a valid 802-11-wireless-security setting.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--seen-bssids"></a><h3>The <code class="literal">“seen-bssidsâ€</code> property</h3>
-<pre class="programlisting"> “seen-bssids†<span class="type">GSList_gchararray_</span> *</pre>
-<p>A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55') that have been detected as part of the WiFI network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BBSID list of NetworkManager. The changes you make to this property will not be preserved.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--ssid"></a><h3>The <code class="literal">“ssidâ€</code> property</h3>
-<pre class="programlisting"> “ssid†<span class="type">GArray_guchar_</span> *</pre>
-<p>SSID of the WiFi network. Must be specified.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWireless--tx-power"></a><h3>The <code class="literal">“tx-powerâ€</code> property</h3>
-<pre class="programlisting"> “tx-power†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>If non-zero, directs the device to use the specified transmit power. Units are dBm. This property is highly driver dependent and not all devices support setting a static transmit power.</p>
-<p>Flags: Read / Write / Construct</p>
<p>Default value: 0</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSettingWirelessSecurity.html b/docs/libnm-util/html/NMSettingWirelessSecurity.html
index b7deca456..36b122621 100644
--- a/docs/libnm-util/html/NMSettingWirelessSecurity.html
+++ b/docs/libnm-util/html/NMSettingWirelessSecurity.html
@@ -2,1783 +2,1559 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: NMSettingWirelessSecurity</title>
+<title>NMSettingWirelessSecurity</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingWireless.html" title="NMSettingWireless">
<link rel="next" href="NMSettingBluetooth.html" title="NMSettingBluetooth">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#NMSettingWirelessSecurity.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#NMSettingWirelessSecurity.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> 
- <a href="#NMSettingWirelessSecurity.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingWireless.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMSettingBluetooth.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingWireless.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSettingBluetooth.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMSettingWirelessSecurity.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingWirelessSecurity.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingWirelessSecurity.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingWirelessSecurity.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="NMSettingWirelessSecurity"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="NMSettingWirelessSecurity.top_of_page"></a>NMSettingWirelessSecurity</span></h2>
-<p>NMSettingWirelessSecurity — Describes connection properties for WiFi networks that
+<p>NMSettingWirelessSecurity — Describes connection properties for Wi-Fi networks that
use WEP, LEAP, WPA or WPA2/RSN security</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWirelessSecurity.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingWirelessSecurityError"></a><a name="NMWepKeyType"></a><pre class="synopsis">
+#include &lt;nm-setting-wireless-security.h&gt;
+
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SECURITY_SETTING_NAME">NM_SETTING_WIRELESS_SECURITY_SETTING_NAME</a>
+enum <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError-enum" title="enum NMSettingWirelessSecurityError">NMSettingWirelessSecurityError</a>;
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS" title="NM_SETTING_WIRELESS_SECURITY_ERROR">NM_SETTING_WIRELESS_SECURITY_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-error-quark" title="nm_setting_wireless_security_error_quark ()">nm_setting_wireless_security_error_quark</a>
+ (<em class="parameter"><code><span class="type">void</span></code></em>);
+enum <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType-enum" title="enum NMWepKeyType">NMWepKeyType</a>;
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS" title="NM_SETTING_WIRELESS_SECURITY_KEY_MGMT">NM_SETTING_WIRELESS_SECURITY_KEY_MGMT</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX">NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS" title="NM_SETTING_WIRELESS_SECURITY_AUTH_ALG">NM_SETTING_WIRELESS_SECURITY_AUTH_ALG</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PROTO">NM_SETTING_WIRELESS_SECURITY_PROTO</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PAIRWISE">NM_SETTING_WIRELESS_SECURITY_PAIRWISE</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS" title="NM_SETTING_WIRELESS_SECURITY_GROUP">NM_SETTING_WIRELESS_SECURITY_GROUP</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME">NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY0">NM_SETTING_WIRELESS_SECURITY_WEP_KEY0</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY1">NM_SETTING_WIRELESS_SECURITY_WEP_KEY1</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY2">NM_SETTING_WIRELESS_SECURITY_WEP_KEY2</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY3">NM_SETTING_WIRELESS_SECURITY_WEP_KEY3</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS">NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE">NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PSK">NM_SETTING_WIRELESS_SECURITY_PSK</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS">NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD">NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD</a>
+#define <a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS">NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS</a>
+ <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity-struct" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>;
+ <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityClass" title="NMSettingWirelessSecurityClass">NMSettingWirelessSecurityClass</a>;
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-new" title="nm_setting_wireless_security_new ()">nm_setting_wireless_security_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt" title="nm_setting_wireless_security_get_key_mgmt ()">nm_setting_wireless_security_get_key_mgmt</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos" title="nm_setting_wireless_security_get_num_protos ()">nm_setting_wireless_security_get_num_protos</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto" title="nm_setting_wireless_security_get_proto ()">nm_setting_wireless_security_get_proto</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto" title="nm_setting_wireless_security_add_proto ()">nm_setting_wireless_security_add_proto</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *proto</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto" title="nm_setting_wireless_security_remove_proto ()">nm_setting_wireless_security_remove_proto</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto-by-value" title="nm_setting_wireless_security_remove_proto_by_value ()">nm_setting_wireless_security_remove_proto_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *proto</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos" title="nm_setting_wireless_security_clear_protos ()">nm_setting_wireless_security_clear_protos</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise" title="nm_setting_wireless_security_get_num_pairwise ()">nm_setting_wireless_security_get_num_pairwise</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise" title="nm_setting_wireless_security_get_pairwise ()">nm_setting_wireless_security_get_pairwise</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise" title="nm_setting_wireless_security_add_pairwise ()">nm_setting_wireless_security_add_pairwise</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pairwise</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise" title="nm_setting_wireless_security_remove_pairwise ()">nm_setting_wireless_security_remove_pairwise</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise-by-value" title="nm_setting_wireless_security_remove_pairwise_by_value ()">nm_setting_wireless_security_remove_pairwise_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pairwise</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise" title="nm_setting_wireless_security_clear_pairwise ()">nm_setting_wireless_security_clear_pairwise</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups" title="nm_setting_wireless_security_get_num_groups ()">nm_setting_wireless_security_get_num_groups</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group" title="nm_setting_wireless_security_get_group ()">nm_setting_wireless_security_get_group</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group" title="nm_setting_wireless_security_add_group ()">nm_setting_wireless_security_add_group</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *group</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group" title="nm_setting_wireless_security_remove_group ()">nm_setting_wireless_security_remove_group</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group-by-value" title="nm_setting_wireless_security_remove_group_by_value ()">nm_setting_wireless_security_remove_group_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *group</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups" title="nm_setting_wireless_security_clear_groups ()">nm_setting_wireless_security_clear_groups</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk" title="nm_setting_wireless_security_get_psk ()">nm_setting_wireless_security_get_psk</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags" title="nm_setting_wireless_security_get_psk_flags ()">nm_setting_wireless_security_get_psk_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-username" title="nm_setting_wireless_security_get_leap_username ()">nm_setting_wireless_security_get_leap_username</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password" title="nm_setting_wireless_security_get_leap_password ()">nm_setting_wireless_security_get_leap_password</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password-flags" title="nm_setting_wireless_security_get_leap_password_flags ()">nm_setting_wireless_security_get_leap_password_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key" title="nm_setting_wireless_security_get_wep_key ()">nm_setting_wireless_security_get_wep_key</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-set-wep-key" title="nm_setting_wireless_security_set_wep_key ()">nm_setting_wireless_security_set_wep_key</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-tx-keyidx" title="nm_setting_wireless_security_get_wep_tx_keyidx ()">nm_setting_wireless_security_get_wep_tx_keyidx</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg" title="nm_setting_wireless_security_get_auth_alg ()">nm_setting_wireless_security_get_auth_alg</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+<a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags" title="nm_setting_wireless_security_get_wep_key_flags ()">nm_setting_wireless_security_get_wep_key_flags</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+<a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="returnvalue">NMWepKeyType</span></a> <a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type" title="nm_setting_wireless_security_get_wep_key_type ()">nm_setting_wireless_security_get_wep_key_type</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWirelessSecurity.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingWirelessSecurityError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMWepKeyType
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingWirelessSecurity
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWirelessSecurity.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg" title='The "auth-alg" property'>auth-alg</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group" title='The "group" property'>group</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt" title='The "key-mgmt" property'>key-mgmt</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title='The "leap-password" property'>leap-password</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags" title='The "leap-password-flags" property'>leap-password-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username" title='The "leap-username" property'>leap-username</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise" title='The "pairwise" property'>pairwise</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto" title='The "proto" property'>proto</a>" <span class="type">GSList_gchararray_</span>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title='The "psk" property'>psk</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags" title='The "psk-flags" property'>psk-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags" title='The "wep-key-flags" property'>wep-key-flags</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title='The "wep-key-type" property'>wep-key-type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0" title='The "wep-key0" property'>wep-key0</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1" title='The "wep-key1" property'>wep-key1</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2" title='The "wep-key2" property'>wep-key2</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3" title='The "wep-key3" property'>wep-key3</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx" title='The "wep-tx-keyidx" property'>wep-tx-keyidx</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWirelessSecurity.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
+properties necessary for connection to encrypted Wi-Fi networks.
+</p>
+<p>
+It's a good idea to read up on wpa_supplicant configuration before using this
+setting extensively, since most of the options here correspond closely with
+the relevant wpa_supplicant configuration options. To get a better overview
+of how Wi-Fi security works, you may want to get copies of the following books.
+</p>
+<p>
+ 802.11 Wireless Networks: The Definitive Guide, Second Edition
+ Author: Matthew Gast
+ ISBN: 978-0596100520
+</p>
+<p>
+ Cisco Wireless LAN Security
+ Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky
+ ISBN: 978-1587051548
+</p>
+</div>
<div class="refsect1">
-<a name="NMSettingWirelessSecurity.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="NMSettingWirelessSecurity.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_SETTING_NAME</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "802-11-wireless-security"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessSecurityError-enum"></a><h3>enum NMSettingWirelessSecurityError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_WIRELESS_SECURITY_ERROR_UNKNOWN = 0, /*&lt; nick=UnknownError &gt;*/
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+ NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING, /*&lt; nick=Missing8021xSetting &gt;*/
+ NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X, /*&lt; nick=LEAPRequires8021x &gt;*/
+ NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME, /*&lt; nick=LEAPRequiresUsername &gt;*/
+ NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP /*&lt; nick=SharedKeyRequiresWEP &gt;*/
+} NMSettingWirelessSecurityError;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-error-quark" title="nm_setting_wireless_security_error_quark ()">nm_setting_wireless_security_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-new" title="nm_setting_wireless_security_new ()">nm_setting_wireless_security_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt" title="nm_setting_wireless_security_get_key_mgmt ()">nm_setting_wireless_security_get_key_mgmt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos" title="nm_setting_wireless_security_get_num_protos ()">nm_setting_wireless_security_get_num_protos</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto" title="nm_setting_wireless_security_get_proto ()">nm_setting_wireless_security_get_proto</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto" title="nm_setting_wireless_security_add_proto ()">nm_setting_wireless_security_add_proto</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto" title="nm_setting_wireless_security_remove_proto ()">nm_setting_wireless_security_remove_proto</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos" title="nm_setting_wireless_security_clear_protos ()">nm_setting_wireless_security_clear_protos</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise" title="nm_setting_wireless_security_get_num_pairwise ()">nm_setting_wireless_security_get_num_pairwise</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise" title="nm_setting_wireless_security_get_pairwise ()">nm_setting_wireless_security_get_pairwise</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise" title="nm_setting_wireless_security_add_pairwise ()">nm_setting_wireless_security_add_pairwise</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise" title="nm_setting_wireless_security_remove_pairwise ()">nm_setting_wireless_security_remove_pairwise</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise" title="nm_setting_wireless_security_clear_pairwise ()">nm_setting_wireless_security_clear_pairwise</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups" title="nm_setting_wireless_security_get_num_groups ()">nm_setting_wireless_security_get_num_groups</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group" title="nm_setting_wireless_security_get_group ()">nm_setting_wireless_security_get_group</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group" title="nm_setting_wireless_security_add_group ()">nm_setting_wireless_security_add_group</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group" title="nm_setting_wireless_security_remove_group ()">nm_setting_wireless_security_remove_group</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups" title="nm_setting_wireless_security_clear_groups ()">nm_setting_wireless_security_clear_groups</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk" title="nm_setting_wireless_security_get_psk ()">nm_setting_wireless_security_get_psk</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags" title="nm_setting_wireless_security_get_psk_flags ()">nm_setting_wireless_security_get_psk_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-username" title="nm_setting_wireless_security_get_leap_username ()">nm_setting_wireless_security_get_leap_username</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_SECURITY_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password" title="nm_setting_wireless_security_get_leap_password ()">nm_setting_wireless_security_get_leap_password</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the property was invalid
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password-flags" title="nm_setting_wireless_security_get_leap_password_flags ()">nm_setting_wireless_security_get_leap_password_flags</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the property was
+missing and is required
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key" title="nm_setting_wireless_security_get_wep_key ()">nm_setting_wireless_security_get_wep_key</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-set-wep-key" title="nm_setting_wireless_security_set_wep_key ()">nm_setting_wireless_security_set_wep_key</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-tx-keyidx" title="nm_setting_wireless_security_get_wep_tx_keyidx ()">nm_setting_wireless_security_get_wep_tx_keyidx</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-802-1X-SETTING:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING</code></span></p></td>
+<td>a property contained
+a value that requires the connection to contain a <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> setting
</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg" title="nm_setting_wireless_security_get_auth_alg ()">nm_setting_wireless_security_get_auth_alg</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-802-1X:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X</code></span></p></td>
+<td>LEAP authentication
+was specified but key management was not set to "8021x"
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags" title="nm_setting_wireless_security_get_wep_key_flags ()">nm_setting_wireless_security_get_wep_key_flags</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-USERNAME:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME</code></span></p></td>
+<td>LEAP authentication
+was specified but no LEAP username was given
</td>
</tr>
<tr>
-<td class="function_type">
-<a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType"><span class="returnvalue">NMWepKeyType</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type" title="nm_setting_wireless_security_get_wep_key_type ()">nm_setting_wireless_security_get_wep_key_type</a> <span class="c_punctuation">()</span>
+<td><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-SHARED-KEY-REQUIRES-WEP:CAPS"></a><span class="term"><code class="literal">NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP</code></span></p></td>
+<td>Shared Key
+authentication was specified but the setting did not specify WEP as the
+encryption protocol
</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_ERROR</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_ERROR nm_setting_wireless_security_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-security-error-quark"></a><h3>nm_setting_wireless_security_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_setting_wireless_security_error_quark
+ (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg" title="The “auth-alg†property">auth-alg</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group" title="The “group†property">group</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt" title="The “key-mgmt†property">key-mgmt</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title="The “leap-password†property">leap-password</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags" title="The “leap-password-flags†property">leap-password-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username" title="The “leap-username†property">leap-username</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise" title="The “pairwise†property">pairwise</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<span class="type">GSList_gchararray_</span> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto" title="The “proto†property">proto</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title="The “psk†property">psk</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags" title="The “psk-flags†property">psk-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags" title="The “wep-key-flags†property">wep-key-flags</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title="The “wep-key-type†property">wep-key-type</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0" title="The “wep-key0†property">wep-key0</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1" title="The “wep-key1†property">wep-key1</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2" title="The “wep-key2†property">wep-key2</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3" title="The “wep-key3†property">wep-key3</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx" title="The “wep-tx-keyidx†property">wep-tx-keyidx</a></td>
-<td class="property_flags">Read / Write / Construct</td>
-</tr>
-</tbody>
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> errors.</td>
+</tr></tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="NMWepKeyType-enum"></a><h3>enum NMWepKeyType</h3>
+<pre class="programlisting">typedef enum {
+ NM_WEP_KEY_TYPE_UNKNOWN = 0,
+ NM_WEP_KEY_TYPE_KEY = 1, /* Hex or ASCII */
+ NM_WEP_KEY_TYPE_PASSPHRASE = 2, /* 104/128-bit Passphrase */
+
+ NM_WEP_KEY_TYPE_LAST = NM_WEP_KEY_TYPE_PASSPHRASE
+} NMWepKeyType;
+</pre>
+<p>
+The <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="type">NMWepKeyType</span></a> values specify how any WEP keys present in the setting
+are intepreted. There are no standards governing how to hash the various WEP
+key/passphrase formats into the actual WEP key. Unfortunately some WEP keys
+can be interpreted in multiple ways, requring the setting to specify how to
+interpret the any WEP keys. For example, the key "732f2d712e4a394a375d366931"
+is both a valid Hexadecimal WEP key and a WEP passphrase. Further, many
+ASCII keys are also valid WEP passphrases, but since passphrases and ASCII
+keys are hashed differently to determine the actual WEP key the type must be
+specified.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SECURITY_SETTING_NAME">NM_SETTING_WIRELESS_SECURITY_SETTING_NAME</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError" title="enum NMSettingWirelessSecurityError">NMSettingWirelessSecurityError</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS" title="NM_SETTING_WIRELESS_SECURITY_ERROR">NM_SETTING_WIRELESS_SECURITY_ERROR</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType">NMWepKeyType</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS" title="NM_SETTING_WIRELESS_SECURITY_KEY_MGMT">NM_SETTING_WIRELESS_SECURITY_KEY_MGMT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX">NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS" title="NM_SETTING_WIRELESS_SECURITY_AUTH_ALG">NM_SETTING_WIRELESS_SECURITY_AUTH_ALG</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PROTO">NM_SETTING_WIRELESS_SECURITY_PROTO</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PAIRWISE">NM_SETTING_WIRELESS_SECURITY_PAIRWISE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS" title="NM_SETTING_WIRELESS_SECURITY_GROUP">NM_SETTING_WIRELESS_SECURITY_GROUP</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME">NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY0">NM_SETTING_WIRELESS_SECURITY_WEP_KEY0</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY1">NM_SETTING_WIRELESS_SECURITY_WEP_KEY1</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY2">NM_SETTING_WIRELESS_SECURITY_WEP_KEY2</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY3">NM_SETTING_WIRELESS_SECURITY_WEP_KEY3</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS">NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE">NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PSK">NM_SETTING_WIRELESS_SECURITY_PSK</a></td>
+<td><p><a name="NM-WEP-KEY-TYPE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_WEP_KEY_TYPE_UNKNOWN</code></span></p></td>
+<td>unknown WEP key type
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS">NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS</a></td>
+<td><p><a name="NM-WEP-KEY-TYPE-KEY:CAPS"></a><span class="term"><code class="literal">NM_WEP_KEY_TYPE_KEY</code></span></p></td>
+<td>indicates a hexadecimal or ASCII formatted WEP key.
+Hex keys are either 10 or 26 hexadecimal characters (ie "5f782f2f5f" or
+"732f2d712e4a394a375d366931"), while ASCII keys are either 5 or 13 ASCII
+characters (ie "abcde" or "blahblah99$*1").
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD">NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD</a></td>
+<td><p><a name="NM-WEP-KEY-TYPE-PASSPHRASE:CAPS"></a><span class="term"><code class="literal">NM_WEP_KEY_TYPE_PASSPHRASE</code></span></p></td>
+<td>indicates a WEP passphrase (ex "I bought a duck
+on my way back from the market 235Q&amp;^%^*%") instead of a hexadecimal or ASCII
+key. Passphrases are between 8 and 64 characters inclusive and are hashed
+the actual WEP key using the MD5 hash algorithm.
+</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS">NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS</a></td>
+<td><p><a name="NM-WEP-KEY-TYPE-LAST:CAPS"></a><span class="term"><code class="literal">NM_WEP_KEY_TYPE_LAST</code></span></p></td>
+<td>placeholder value for bounds-checking
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">├──</span> NMSettingWirelessSecurityError
- <span class="lineart">╰──</span> NMWepKeyType
- <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">╰──</span> NMSettingWirelessSecurity
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_KEY_MGMT</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_KEY_MGMT "key-mgmt"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-setting-wireless-security.h&gt;
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX "wep-tx-keyidx"
</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.description"></a><h2>Description</h2>
-<p>The <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-properties necessary for connection to encrypted WiFi networks.</p>
-<p>It's a good idea to read up on wpa_supplicant configuration before using this
-setting extensively, since most of the options here correspond closely with
-the relevant wpa_supplicant configuration options. To get a better overview
-of how WiFi security works, you may want to get copies of the following books.</p>
-<p> 802.11 Wireless Networks: The Definitive Guide, Second Edition
- Author: Matthew Gast
- ISBN: 978-0596100520</p>
-<p> Cisco Wireless LAN Security
- Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky
- ISBN: 978-1587051548</p>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_AUTH_ALG</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_AUTH_ALG "auth-alg"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.functions_details"></a><h2>Functions</h2>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PROTO</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PROTO "proto"
+</pre>
+<p>
+</p>
+</div>
+<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-error-quark"></a><h3>nm_setting_wireless_security_error_quark ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-nm_setting_wireless_security_error_quark
- (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Registers an error quark for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if necessary.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.2.5"></a><h4>Returns</h4>
-<p> the error quark used for <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> errors.</p>
-<p></p>
+<a name="NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PAIRWISE</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PAIRWISE "pairwise"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_GROUP</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_GROUP "group"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-new"></a><h3>nm_setting_wireless_security_new ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> *
-nm_setting_wireless_security_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Creates a new <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object with default values.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.3.5"></a><h4>Returns</h4>
-<p> the new empty <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<a name="NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME "leap-username"
+</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY0</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY0 "wep-key0"
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-key-mgmt"></a><h3>nm_setting_wireless_security_get_key_mgmt ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_key_mgmt
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
+<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY1</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY1 "wep-key1"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY2</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY2 "wep-key2"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY3</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY3 "wep-key3"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS "wep-key-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE "wep-key-type"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-PSK:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PSK</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PSK "psk"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS "psk-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD "leap-password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS "leap-password-flags"
+</pre>
+<p>
+</p>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.4.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt" title="The “key-mgmt†property"><span class="type">“key-mgmtâ€</span></a> property of the setting</p>
-<p></p>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessSecurity-struct"></a><h3>NMSettingWirelessSecurity</h3>
+<pre class="programlisting">typedef struct _NMSettingWirelessSecurity NMSettingWirelessSecurity;</pre>
+<p>
+</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessSecurityClass"></a><h3>NMSettingWirelessSecurityClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingWirelessSecurityClass;
+</pre>
+<p>
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-num-protos"></a><h3>nm_setting_wireless_security_get_num_protos ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_security_get_num_protos
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-new"></a><h3>nm_setting_wireless_security_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_setting_wireless_security_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object with default values.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.5.5"></a><h4>Returns</h4>
-<p> the number of security protocols this connection allows when
-connecting to secure WiFi networks</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-proto"></a><h3>nm_setting_wireless_security_get_proto ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_proto
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-key-mgmt"></a><h3>nm_setting_wireless_security_get_key_mgmt ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_key_mgmt
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>an index into the protocol list</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt" title='The "key-mgmt" property'><span class="type">"key-mgmt"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.6.5"></a><h4>Returns</h4>
-<p> the protocol at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-add-proto"></a><h3>nm_setting_wireless_security_add_proto ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wireless_security_add_proto
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *proto</code></em>);</pre>
-<p>Adds a WiFi security protocol (one of "wpa" or "rsn") to the allowed list;
-only protocols in this list will be used when finding and connecting to
-the WiFi network specified by this connection. For example, if the
-protocol list contains only "wpa" but the access point for the SSID specified
-by this connection only supports WPA2/RSN, the connection cannot be used
-with the access point.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-num-protos"></a><h3>nm_setting_wireless_security_get_num_protos ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_security_get_num_protos
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>proto</p></td>
-<td class="parameter_description"><p>the protocol to add, one of "wpa" or "rsn"</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of security protocols this connection allows when
+connecting to secure Wi-Fi networks</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.7.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the protocol was new and and was added to the allowed
-protocol list, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was already in the list</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-remove-proto"></a><h3>nm_setting_wireless_security_remove_proto ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_wireless_security_remove_proto
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes a protocol from the allowed protocol list.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-proto"></a><h3>nm_setting_wireless_security_get_proto ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_proto
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>an index into the protocol list</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index of the protocol to remove</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the protocol at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wireless-security-clear-protos"></a><h3>nm_setting_wireless_security_clear_protos ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_wireless_security_clear_protos
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<p>Removes all protocols from the allowed list. If there are no protocols
-specified then all protocols are allowed.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wireless-security-get-num-pairwise"></a><h3>nm_setting_wireless_security_get_num_pairwise ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_security_get_num_pairwise
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.10.5"></a><h4>Returns</h4>
-<p> the number of pairwise encryption algorithms in the allowed list</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-pairwise"></a><h3>nm_setting_wireless_security_get_pairwise ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_pairwise
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Returns the allowed pairwise encryption algorithm from allowed algorithm
-list.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-add-proto"></a><h3>nm_setting_wireless_security_add_proto ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_security_add_proto
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *proto</code></em>);</pre>
+<p>
+Adds a Wi-Fi security protocol (one of "wpa" or "rsn") to the allowed list;
+only protocols in this list will be used when finding and connecting to
+the Wi-Fi network specified by this connection. For example, if the
+protocol list contains only "wpa" but the access point for the SSID specified
+by this connection only supports WPA2/RSN, the connection cannot be used
+with the access point.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>proto</code></em> :</span></p></td>
+<td>the protocol to add, one of "wpa" or "rsn"</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index of an item in the allowed pairwise encryption algorithm list</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the protocol was new and and was added to the allowed
+protocol list, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was already in the list</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.11.6"></a><h4>Returns</h4>
-<p> the pairwise encryption algorithm at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-add-pairwise"></a><h3>nm_setting_wireless_security_add_pairwise ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wireless_security_add_pairwise
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *pairwise</code></em>);</pre>
-<p>Adds an encryption algorithm to the list of allowed pairwise encryption
-algorithms. If the list is not empty, then only access points that support
-one or more of the encryption algorithms in the list will be considered
-compatible with this connection.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-remove-proto"></a><h3>nm_setting_wireless_security_remove_proto ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_security_remove_proto
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes a protocol from the allowed protocol list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>pairwise</p></td>
-<td class="parameter_description"><p>the encryption algorithm to add, one of "wep40", "wep104",
-"tkip", or "ccmp"</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index of the protocol to remove</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.12.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the algorithm was added to the list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was
-already in the list</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-remove-pairwise"></a><h3>nm_setting_wireless_security_remove_pairwise ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_wireless_security_remove_pairwise
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes an encryption algorithm from the allowed pairwise encryption
-algorithm list.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-remove-proto-by-value"></a><h3>nm_setting_wireless_security_remove_proto_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_security_remove_proto_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *proto</code></em>);</pre>
+<p>
+Removes a protocol from the allowed protocol list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the index of an item in the allowed pairwise encryption algorithm list</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>proto</code></em> :</span></p></td>
+<td>the protocol to remove, one of "wpa" or "rsn"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the protocol was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> it it was not.</td>
</tr>
</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-clear-pairwise"></a><h3>nm_setting_wireless_security_clear_pairwise ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_wireless_security_clear_pairwise
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<p>Removes all algorithms from the allowed list. If there are no algorithms
-specified then all pairwise encryption algorithms are allowed.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-clear-protos"></a><h3>nm_setting_wireless_security_clear_protos ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_security_clear_protos
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<p>
+Removes all protocols from the allowed list. If there are no protocols
+specified then all protocols are allowed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-num-groups"></a><h3>nm_setting_wireless_security_get_num_groups ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_security_get_num_groups
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.15.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-num-pairwise"></a><h3>nm_setting_wireless_security_get_num_pairwise ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_security_get_num_pairwise
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of pairwise encryption algorithms in the allowed list</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.15.5"></a><h4>Returns</h4>
-<p> the number of groupwise encryption algorithms in the allowed list</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-group"></a><h3>nm_setting_wireless_security_get_group ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_group
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Returns the allowed groupwise encryption algorithm from allowed algorithm
-list.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-pairwise"></a><h3>nm_setting_wireless_security_get_pairwise ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_pairwise
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Returns the allowed pairwise encryption algorithm from allowed algorithm
+list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index of an item in the allowed pairwise encryption algorithm list</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>index of an item in the allowed groupwise encryption algorithm list</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the pairwise encryption algorithm at index <em class="parameter"><code>i</code></em>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.16.6"></a><h4>Returns</h4>
-<p> the groupwise encryption algorithm at index <em class="parameter"><code>i</code></em>
-</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-add-group"></a><h3>nm_setting_wireless_security_add_group ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_setting_wireless_security_add_group
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *group</code></em>);</pre>
-<p>Adds an encryption algorithm to the list of allowed groupwise encryption
+<a name="nm-setting-wireless-security-add-pairwise"></a><h3>nm_setting_wireless_security_add_pairwise ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_security_add_pairwise
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pairwise</code></em>);</pre>
+<p>
+Adds an encryption algorithm to the list of allowed pairwise encryption
algorithms. If the list is not empty, then only access points that support
one or more of the encryption algorithms in the list will be considered
-compatible with this connection.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+compatible with this connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pairwise</code></em> :</span></p></td>
+<td>the encryption algorithm to add, one of "tkip" or "ccmp"</td>
</tr>
<tr>
-<td class="parameter_name"><p>group</p></td>
-<td class="parameter_description"><p>the encryption algorithm to add, one of "wep40", "wep104",
-"tkip", or "ccmp"</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the algorithm was added to the list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was
+already in the list</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.17.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the algorithm was added to the list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was
-already in the list</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-remove-group"></a><h3>nm_setting_wireless_security_remove_group ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_wireless_security_remove_group
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
-<p>Removes an encryption algorithm from the allowed groupwise encryption
-algorithm list.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-remove-pairwise"></a><h3>nm_setting_wireless_security_remove_pairwise ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_security_remove_pairwise
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes an encryption algorithm from the allowed pairwise encryption
+algorithm list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>i</p></td>
-<td class="parameter_description"><p>the index of an item in the allowed groupwise encryption algorithm list</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the index of an item in the allowed pairwise encryption algorithm list</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-clear-groups"></a><h3>nm_setting_wireless_security_clear_groups ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_wireless_security_clear_groups
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<p>Removes all algorithms from the allowed list. If there are no algorithms
-specified then all groupwise encryption algorithms are allowed.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-setting-wireless-security-get-psk"></a><h3>nm_setting_wireless_security_get_psk ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_psk (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.20.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-remove-pairwise-by-value"></a><h3>nm_setting_wireless_security_remove_pairwise_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_security_remove_pairwise_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *pairwise</code></em>);</pre>
+<p>
+Removes an encryption algorithm from the allowed pairwise encryption
+algorithm list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pairwise</code></em> :</span></p></td>
+<td>the encryption algorithm to remove, one of "tkip" or "ccmp"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the encryption algorith was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> it it was not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.20.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title="The “psk†property"><span class="type">“pskâ€</span></a> property of the setting</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-psk-flags"></a><h3>nm_setting_wireless_security_get_psk_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_wireless_security_get_psk_flags
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.21.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-clear-pairwise"></a><h3>nm_setting_wireless_security_clear_pairwise ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_security_clear_pairwise
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<p>
+Removes all algorithms from the allowed list. If there are no algorithms
+specified then all pairwise encryption algorithms are allowed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.21.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title="The “psk†property"><span class="type">“pskâ€</span></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-leap-username"></a><h3>nm_setting_wireless_security_get_leap_username ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_leap_username
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.22.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-num-groups"></a><h3>nm_setting_wireless_security_get_num_groups ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_security_get_num_groups
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of groupwise encryption algorithms in the allowed list</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.22.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username" title="The “leap-username†property"><span class="type">“leap-usernameâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-leap-password"></a><h3>nm_setting_wireless_security_get_leap_password ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_leap_password
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.23.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-group"></a><h3>nm_setting_wireless_security_get_group ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_group
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Returns the allowed groupwise encryption algorithm from allowed algorithm
+list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>index of an item in the allowed groupwise encryption algorithm list</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the groupwise encryption algorithm at index <em class="parameter"><code>i</code></em>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.23.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title="The “leap-password†property"><span class="type">“leap-passwordâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-leap-password-flags"></a><h3>nm_setting_wireless_security_get_leap_password_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_wireless_security_get_leap_password_flags
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.24.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-add-group"></a><h3>nm_setting_wireless_security_add_group ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_security_add_group
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *group</code></em>);</pre>
+<p>
+Adds an encryption algorithm to the list of allowed groupwise encryption
+algorithms. If the list is not empty, then only access points that support
+one or more of the encryption algorithms in the list will be considered
+compatible with this connection.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>group</code></em> :</span></p></td>
+<td>the encryption algorithm to add, one of "wep40", "wep104",
+"tkip", or "ccmp"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the algorithm was added to the list, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it was
+already in the list</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.24.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title="The “leap-password†property"><span class="type">“leap-passwordâ€</span></a></p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-wep-key"></a><h3>nm_setting_wireless_security_get_wep_key ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_wep_key
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.25.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-remove-group"></a><h3>nm_setting_wireless_security_remove_group ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_security_remove_group
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> i</code></em>);</pre>
+<p>
+Removes an encryption algorithm from the allowed groupwise encryption
+algorithm list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>the WEP key index (0..3 inclusive)</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td>the index of an item in the allowed groupwise encryption algorithm list</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.25.5"></a><h4>Returns</h4>
-<p> the WEP key at the given index</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-set-wep-key"></a><h3>nm_setting_wireless_security_set_wep_key ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_setting_wireless_security_set_wep_key
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
-<p>Sets a WEP key in the given index.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-remove-group-by-value"></a><h3>nm_setting_wireless_security_remove_group_by_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_wireless_security_remove_group_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *group</code></em>);</pre>
+<p>
+Removes an encryption algorithm from the allowed groupwise encryption
+algorithm list.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>the index of the key (0..3 inclusive)</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>group</code></em> :</span></p></td>
+<td>the encryption algorithm to remove, one of "wep40", "wep104",
+"tkip", or "ccmp"</td>
</tr>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the WEP key as a string, in either hexadecimal, ASCII, or passphrase
-form as determiend by the value of the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title="The “wep-key-type†property"><span class="type">“wep-key-typeâ€</span></a>
-property.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the algorithm was found and removed; <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> it it was not.</td>
</tr>
</tbody>
</table></div>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-wep-tx-keyidx"></a><h3>nm_setting_wireless_security_get_wep_tx_keyidx ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_setting_wireless_security_get_wep_tx_keyidx
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.27.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-clear-groups"></a><h3>nm_setting_wireless_security_clear_groups ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_security_clear_groups
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<p>
+Removes all algorithms from the allowed list. If there are no algorithms
+specified then all groupwise encryption algorithms are allowed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.27.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx" title="The “wep-tx-keyidx†property"><span class="type">“wep-tx-keyidxâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-auth-alg"></a><h3>nm_setting_wireless_security_get_auth_alg ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_setting_wireless_security_get_auth_alg
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.28.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-psk"></a><h3>nm_setting_wireless_security_get_psk ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_psk
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title='The "psk" property'><span class="type">"psk"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.28.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg" title="The “auth-alg†property"><span class="type">“auth-algâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-wep-key-flags"></a><h3>nm_setting_wireless_security_get_wep_key_flags ()</h3>
-<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a>
-nm_setting_wireless_security_get_wep_key_flags
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.29.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-psk-flags"></a><h3>nm_setting_wireless_security_get_psk_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_wireless_security_get_psk_flags
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title='The "psk" property'><span class="type">"psk"</span></a>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.29.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the all WEP keys</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-setting-wireless-security-get-wep-key-type"></a><h3>nm_setting_wireless_security_get_wep_key_type ()</h3>
-<pre class="programlisting"><a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType"><span class="returnvalue">NMWepKeyType</span></a>
-nm_setting_wireless_security_get_wep_key_type
- (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.7.9.30.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-leap-username"></a><h3>nm_setting_wireless_security_get_leap_username ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_leap_username
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>setting</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username" title='The "leap-username" property'><span class="type">"leap-username"</span></a> property of the setting</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.9.30.5"></a><h4>Returns</h4>
-<p> the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title="The “wep-key-type†property"><span class="type">“wep-key-typeâ€</span></a> property of the setting</p>
-<p></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_SETTING_NAME</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "802-11-wireless-security"
-</pre>
-<p>
-</p>
-</div>
<hr>
<div class="refsect2">
-<a name="NMSettingWirelessSecurityError"></a><h3>enum NMSettingWirelessSecurityError</h3>
-<div class="refsect3">
-<a name="id-1.2.7.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-leap-password"></a><h3>nm_setting_wireless_security_get_leap_password ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_leap_password
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-UNKNOWN:CAPS"></a>NM_SETTING_WIRELESS_SECURITY_ERROR_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown or unclassified error</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-INVALID-PROPERTY:CAPS"></a>NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was invalid</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title='The "leap-password" property'><span class="type">"leap-password"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-security-get-leap-password-flags"></a><h3>nm_setting_wireless_security_get_leap_password_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_wireless_security_get_leap_password_flags
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-PROPERTY:CAPS"></a>NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY</p></td>
-<td class="enum_member_description">
-<p>the property was
-missing and is required</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-802-1X-SETTING:CAPS"></a>NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING</p></td>
-<td class="enum_member_description">
-<p>a property contained
-a value that requires the connection to contain a <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> setting</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title='The "leap-password" property'><span class="type">"leap-password"</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-security-get-wep-key"></a><h3>nm_setting_wireless_security_get_wep_key ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_wep_key
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-802-1X:CAPS"></a>NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X</p></td>
-<td class="enum_member_description">
-<p>LEAP authentication
-was specified but key management was not set to "8021x"</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-USERNAME:CAPS"></a>NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME</p></td>
-<td class="enum_member_description">
-<p>LEAP authentication
-was specified but no LEAP username was given</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the WEP key index (0..3 inclusive)</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-SETTING-WIRELESS-SECURITY-ERROR-SHARED-KEY-REQUIRES-WEP:CAPS"></a>NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP</p></td>
-<td class="enum_member_description">
-<p>Shared Key
-authentication was specified but the setting did not specify WEP as the
-encryption protocol</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the WEP key at the given index</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_ERROR</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_ERROR nm_setting_wireless_security_error_quark ()
-</pre>
+<a name="nm-setting-wireless-security-set-wep-key"></a><h3>nm_setting_wireless_security_set_wep_key ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_wireless_security_set_wep_key
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
<p>
+Sets a WEP key in the given index.
</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the index of the key (0..3 inclusive)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the WEP key as a string, in either hexadecimal, ASCII, or passphrase
+form as determiend by the value of the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title='The "wep-key-type" property'><span class="type">"wep-key-type"</span></a>
+property.</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NMWepKeyType"></a><h3>enum NMWepKeyType</h3>
-<p>The <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType"><span class="type">NMWepKeyType</span></a> values specify how any WEP keys present in the setting
-are intepreted. There are no standards governing how to hash the various WEP
-key/passphrase formats into the actual WEP key. Unfortunately some WEP keys
-can be interpreted in multiple ways, requring the setting to specify how to
-interpret the any WEP keys. For example, the key "732f2d712e4a394a375d366931"
-is both a valid Hexadecimal WEP key and a WEP passphrase. Further, many
-ASCII keys are also valid WEP passphrases, but since passphrases and ASCII
-keys are hashed differently to determine the actual WEP key the type must be
-specified.</p>
-<div class="refsect3">
-<a name="id-1.2.7.10.5.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-setting-wireless-security-get-wep-tx-keyidx"></a><h3>nm_setting_wireless_security_get_wep_tx_keyidx ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_wireless_security_get_wep_tx_keyidx
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-WEP-KEY-TYPE-UNKNOWN:CAPS"></a>NM_WEP_KEY_TYPE_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown WEP key type</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-WEP-KEY-TYPE-KEY:CAPS"></a>NM_WEP_KEY_TYPE_KEY</p></td>
-<td class="enum_member_description">
-<p>indicates a hexadecimal or ASCII formatted WEP key.
-Hex keys are either 10 or 26 hexadecimal characters (ie "5f782f2f5f" or
-"732f2d712e4a394a375d366931"), while ASCII keys are either 5 or 13 ASCII
-characters (ie "abcde" or "blahblah99$*1").</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx" title='The "wep-tx-keyidx" property'><span class="type">"wep-tx-keyidx"</span></a> property of the setting</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-wireless-security-get-auth-alg"></a><h3>nm_setting_wireless_security_get_auth_alg ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_wireless_security_get_auth_alg
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NM-WEP-KEY-TYPE-PASSPHRASE:CAPS"></a>NM_WEP_KEY_TYPE_PASSPHRASE</p></td>
-<td class="enum_member_description">
-<p>indicates a WEP passphrase (ex "I bought a duck
-on my way back from the market 235Q&amp;^%^*%") instead of a hexadecimal or ASCII
-key. Passphrases are between 8 and 64 characters inclusive and are hashed
-the actual WEP key using the MD5 hash algorithm.</p>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NM-WEP-KEY-TYPE-LAST:CAPS"></a>NM_WEP_KEY_TYPE_LAST</p></td>
-<td class="enum_member_description">
-<p>placeholder value for bounds-checking</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg" title='The "auth-alg" property'><span class="type">"auth-alg"</span></a> property of the setting</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_KEY_MGMT</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_KEY_MGMT "key-mgmt"
-</pre>
-<p>
-</p>
+<a name="nm-setting-wireless-security-get-wep-key-flags"></a><h3>nm_setting_wireless_security_get_wep_key_flags ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="returnvalue">NMSettingSecretFlags</span></a> nm_setting_wireless_security_get_wep_key_flags
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the all WEP keys</td>
+</tr>
+</tbody>
+</table></div>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX "wep-tx-keyidx"
-</pre>
-<p>
-</p>
+<a name="nm-setting-wireless-security-get-wep-key-type"></a><h3>nm_setting_wireless_security_get_wep_key_type ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="returnvalue">NMWepKeyType</span></a> nm_setting_wireless_security_get_wep_key_type
+ (<em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> *setting</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title='The "wep-key-type" property'><span class="type">"wep-key-type"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
</div>
-<hr>
-<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_AUTH_ALG</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_AUTH_ALG "auth-alg"
-</pre>
-<p>
-</p>
</div>
-<hr>
+<div class="refsect1">
+<a name="NMSettingWirelessSecurity.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PROTO</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PROTO "proto"
-</pre>
+<a name="NMSettingWirelessSecurity--auth-alg"></a><h3>The <code class="literal">"auth-alg"</code> property</h3>
+<pre class="programlisting"> "auth-alg" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+When WEP is used (ie, key-mgmt = "none" or "ieee8021x") indicate the
+802.11 authentication algorithm required by the AP here. One of "open"
+for Open System, "shared" for Shared Key, or "leap" for Cisco LEAP. When
+using Cisco LEAP (ie, key-mgmt = "ieee8021x" and auth-alg = "leap") the
+"leap-username" and "leap-password" properties must be specified.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PAIRWISE</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PAIRWISE "pairwise"
-</pre>
+<a name="NMSettingWirelessSecurity--group"></a><h3>The <code class="literal">"group"</code> property</h3>
+<pre class="programlisting"> "group" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+A list of group/broadcast encryption algorithms which prevents
+connections to Wi-Fi networks that do not utilize one of the algorithms
+in the list. For maximum compatibility leave this property empty. Each
+list element may be one of "wep40", "wep104", "tkip", or "ccmp".
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_GROUP</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_GROUP "group"
-</pre>
+<a name="NMSettingWirelessSecurity--key-mgmt"></a><h3>The <code class="literal">"key-mgmt"</code> property</h3>
+<pre class="programlisting"> "key-mgmt" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Key management used for the connection. One of "none" (WEP), "ieee8021x"
+(Dynamic WEP), "wpa-none" (Ad-Hoc WPA-PSK), "wpa-psk" (infrastructure
+WPA-PSK), or "wpa-eap" (WPA-Enterprise). This property must be set for
+any Wi-Fi connection that uses security.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME "leap-username"
-</pre>
+<a name="NMSettingWirelessSecurity--leap-password"></a><h3>The <code class="literal">"leap-password"</code> property</h3>
+<pre class="programlisting"> "leap-password" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+The login password for legacy LEAP connections (ie, key-mgmt =
+"ieee8021x" and auth-alg = "leap").
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY0</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY0 "wep-key0"
-</pre>
+<a name="NMSettingWirelessSecurity--leap-password-flags"></a><h3>The <code class="literal">"leap-password-flags"</code> property</h3>
+<pre class="programlisting"> "leap-password-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
<p>
+Flags indicating how to handle the
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title='The "leap-password" property'><span class="type">"leap-password"</span></a> property.
</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY1</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY1 "wep-key1"
-</pre>
+<a name="NMSettingWirelessSecurity--leap-username"></a><h3>The <code class="literal">"leap-username"</code> property</h3>
+<pre class="programlisting"> "leap-username" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+The login username for legacy LEAP connections (ie, key-mgmt =
+"ieee8021x" and auth-alg = "leap").
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY2</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY2 "wep-key2"
-</pre>
+<a name="NMSettingWirelessSecurity--pairwise"></a><h3>The <code class="literal">"pairwise"</code> property</h3>
+<pre class="programlisting"> "pairwise" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+A list of pairwise encryption algorithms which prevents connections to
+Wi-Fi networks that do not utilize one of the algorithms in the list.
+For maximum compatibility leave this property empty. Each list element
+may be one of "tkip" or "ccmp".
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY3</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY3 "wep-key3"
-</pre>
+<a name="NMSettingWirelessSecurity--proto"></a><h3>The <code class="literal">"proto"</code> property</h3>
+<pre class="programlisting"> "proto" <span class="type">GSList_gchararray_</span>* : Read / Write</pre>
<p>
+List of strings specifying the allowed WPA protocol versions to use.
+Each element may be one "wpa" (allow WPA) or "rsn" (allow WPA2/RSN). If
+not specified, both WPA and RSN connections are allowed.
</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS "wep-key-flags"
-</pre>
+<a name="NMSettingWirelessSecurity--psk"></a><h3>The <code class="literal">"psk"</code> property</h3>
+<pre class="programlisting"> "psk" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Pre-Shared-Key for WPA networks. If the key is 64-characters long, it
+must contain only hexadecimal characters and is interpreted as a
+hexadecimal WPA key. Otherwise, the key must be between 8 and 63 ASCII
+characters (as specified in the 802.11i standard) and is interpreted as a
+WPA passphrase, and is hashed to derive the actual WPA-PSK used when
+connecting to the Wi-Fi network.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE "wep-key-type"
-</pre>
+<a name="NMSettingWirelessSecurity--psk-flags"></a><h3>The <code class="literal">"psk-flags"</code> property</h3>
+<pre class="programlisting"> "psk-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
<p>
+Flags indicating how to handle the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title='The "psk" property'><span class="type">"psk"</span></a>
+property.
</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-PSK:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PSK</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PSK "psk"
-</pre>
+<a name="NMSettingWirelessSecurity--wep-key-flags"></a><h3>The <code class="literal">"wep-key-flags"</code> property</h3>
+<pre class="programlisting"> "wep-key-flags" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre>
<p>
+Flags indicating how to handle the <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0" title='The "wep-key0" property'><span class="type">"wep-key0"</span></a>,
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1" title='The "wep-key1" property'><span class="type">"wep-key1"</span></a>, <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2" title='The "wep-key2" property'><span class="type">"wep-key2"</span></a>,
+and <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3" title='The "wep-key3" property'><span class="type">"wep-key3"</span></a> properties.
</p>
+<p>Allowed values: &lt;= 7</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS "psk-flags"
-</pre>
+<a name="NMSettingWirelessSecurity--wep-key-type"></a><h3>The <code class="literal">"wep-key-type"</code> property</h3>
+<pre class="programlisting"> "wep-key-type" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
<p>
+Controls the interpretation of WEP keys. Allowed values are
+<a class="link" href="NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-KEY:CAPS"><code class="literal">NM_WEP_KEY_TYPE_KEY</code></a>, in which case the key is either a 10- or
+26-character hexadecimal string, or a 5- or 13-character ASCII password;
+or <a class="link" href="NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-PASSPHRASE:CAPS"><code class="literal">NM_WEP_KEY_TYPE_PASSPHRASE</code></a>, in which case the passphrase is provided
+as a string and will be hashed using the de-facto MD5 method to derive
+the actual WEP key.
</p>
+<p>Allowed values: &lt;= 2</p>
+<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD "leap-password"
-</pre>
+<a name="NMSettingWirelessSecurity--wep-key0"></a><h3>The <code class="literal">"wep-key0"</code> property</h3>
+<pre class="programlisting"> "wep-key0" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Index 0 WEP key. This is the WEP key used in most networks. See the
+"wep-key-type" property for a description of how this key is interpreted.
</p>
+<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS</h3>
-<pre class="programlisting">#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS "leap-password-flags"
-</pre>
+<a name="NMSettingWirelessSecurity--wep-key1"></a><h3>The <code class="literal">"wep-key1"</code> property</h3>
+<pre class="programlisting"> "wep-key1" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
<p>
+Index 1 WEP key. This WEP index is not used by most networks. See the
+"wep-key-type" property for a description of how this key is interpreted.
</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="NMSettingWirelessSecurity.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--auth-alg"></a><h3>The <code class="literal">“auth-algâ€</code> property</h3>
-<pre class="programlisting"> “auth-alg†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>When WEP is used (ie, key-mgmt = 'none' or 'ieee8021x') indicate the 802.11 authentication algorithm required by the AP here. One of 'open' for Open System, 'shared' for Shared Key, or 'leap' for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap') the 'leap-username' and 'leap-password' properties must be specified.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--group"></a><h3>The <code class="literal">“groupâ€</code> property</h3>
-<pre class="programlisting"> “group†<span class="type">GSList_gchararray_</span> *</pre>
-<p>A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'wep40', 'wep104', 'tkip', or 'ccmp'.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--key-mgmt"></a><h3>The <code class="literal">“key-mgmtâ€</code> property</h3>
-<pre class="programlisting"> “key-mgmt†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Key management used for the connection. One of 'none' (WEP), 'ieee8021x' (Dynamic WEP), 'wpa-none' (WPA-PSK Ad-Hoc), 'wpa-psk' (infrastructure WPA-PSK), or 'wpa-eap' (WPA-Enterprise). This property must be set for any WiFi connection that uses security.</p>
-<p>Flags: Read / Write</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingWirelessSecurity--leap-password"></a><h3>The <code class="literal">“leap-passwordâ€</code> property</h3>
-<pre class="programlisting"> “leap-password†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The login password for legacy LEAP connections (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--leap-password-flags"></a><h3>The <code class="literal">“leap-password-flagsâ€</code> property</h3>
-<pre class="programlisting"> “leap-password-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the LEAP password.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: &lt;= 7</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--leap-username"></a><h3>The <code class="literal">“leap-usernameâ€</code> property</h3>
-<pre class="programlisting"> “leap-username†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>The login username for legacy LEAP connections (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--pairwise"></a><h3>The <code class="literal">“pairwiseâ€</code> property</h3>
-<pre class="programlisting"> “pairwise†<span class="type">GSList_gchararray_</span> *</pre>
-<p>A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of 'wep40', 'wep104', 'tkip' or 'ccmp'.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--proto"></a><h3>The <code class="literal">“protoâ€</code> property</h3>
-<pre class="programlisting"> “proto†<span class="type">GSList_gchararray_</span> *</pre>
-<p>List of strings specifying the allowed WPA protocol versions to use. Each element may be one 'wpa' (allow WPA) or 'rsn' (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed.</p>
-<p>Flags: Read / Write</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--psk"></a><h3>The <code class="literal">“pskâ€</code> property</h3>
-<pre class="programlisting"> “psk†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Pre-Shared-Key for WPA networks. If the key is 64-characters long, it must contain only hexadecimal characters and is interpreted as a hexadecimal WPA key. Otherwise, the key must be between 8 and 63 ASCII characters (as specified in the 802.11i standard) and is interpreted as a WPA passphrase, and is hashed to derive the actual WPA-PSK used when connecting to the WiFi network.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--psk-flags"></a><h3>The <code class="literal">“psk-flagsâ€</code> property</h3>
-<pre class="programlisting"> “psk-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the WPA PSK key.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: &lt;= 7</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--wep-key-flags"></a><h3>The <code class="literal">“wep-key-flagsâ€</code> property</h3>
-<pre class="programlisting"> “wep-key-flags†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Flags indicating how to handle the WEP keys.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: &lt;= 7</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--wep-key-type"></a><h3>The <code class="literal">“wep-key-typeâ€</code> property</h3>
-<pre class="programlisting"> “wep-key-type†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Controls the interpretation of WEP keys. Allowed values are 1 (interpret WEP keys as hexadecimal or ASCII keys) or 2 (interpret WEP keys as WEP Passphrases). If set to 1 and the keys are hexadecimal, they must be either 10 or 26 characters in length. If set to 1 and the keys are ASCII keys, they must be either 5 or 13 characters in length. If set to 2, the passphrase is hashed using the de-facto MD5 method to derive the actual WEP key.</p>
-<p>Flags: Read / Write / Construct</p>
-<p>Allowed values: &lt;= 2</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--wep-key0"></a><h3>The <code class="literal">“wep-key0â€</code> property</h3>
-<pre class="programlisting"> “wep-key0†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Index 0 WEP key. This is the WEP key used in most networks. See the 'wep-key-type' property for a description of how this key is interpreted.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--wep-key1"></a><h3>The <code class="literal">“wep-key1â€</code> property</h3>
-<pre class="programlisting"> “wep-key1†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Index 1 WEP key. This WEP index is not used by most networks. See the 'wep-key-type' property for a description of how this key is interpreted.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NMSettingWirelessSecurity--wep-key2"></a><h3>The <code class="literal">“wep-key2â€</code> property</h3>
-<pre class="programlisting"> “wep-key2†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Index 2 WEP key. This WEP index is not used by most networks. See the 'wep-key-type' property for a description of how this key is interpreted.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingWirelessSecurity--wep-key2"></a><h3>The <code class="literal">"wep-key2"</code> property</h3>
+<pre class="programlisting"> "wep-key2" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Index 2 WEP key. This WEP index is not used by most networks. See the
+"wep-key-type" property for a description of how this key is interpreted.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingWirelessSecurity--wep-key3"></a><h3>The <code class="literal">“wep-key3â€</code> property</h3>
-<pre class="programlisting"> “wep-key3†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Index 3 WEP key. This WEP index is not used by most networks. See the 'wep-key-type' property for a description of how this key is interpreted.</p>
-<p>Flags: Read / Write</p>
+<a name="NMSettingWirelessSecurity--wep-key3"></a><h3>The <code class="literal">"wep-key3"</code> property</h3>
+<pre class="programlisting"> "wep-key3" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre>
+<p>
+Index 3 WEP key. This WEP index is not used by most networks. See the
+"wep-key-type" property for a description of how this key is interpreted.
+</p>
<p>Default value: NULL</p>
</div>
<hr>
<div class="refsect2">
-<a name="NMSettingWirelessSecurity--wep-tx-keyidx"></a><h3>The <code class="literal">“wep-tx-keyidxâ€</code> property</h3>
-<pre class="programlisting"> “wep-tx-keyidx†<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>When static WEP is used (ie, key-mgmt = 'none') and a non-default WEP key index is used by the AP, put that WEP key index here. Valid values are 0 (default key) through 3. Note that some consumer access points (like the Linksys WRT54G) number the keys 1 - 4.</p>
-<p>Flags: Read / Write / Construct</p>
+<a name="NMSettingWirelessSecurity--wep-tx-keyidx"></a><h3>The <code class="literal">"wep-tx-keyidx"</code> property</h3>
+<pre class="programlisting"> "wep-tx-keyidx" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct</pre>
+<p>
+When static WEP is used (ie, key-mgmt = "none") and a non-default WEP key
+index is used by the AP, put that WEP key index here. Valid values are 0
+(default key) through 3. Note that some consumer access points (like the
+Linksys WRT54G) number the keys 1 - 4.
+</p>
<p>Allowed values: &lt;= 3</p>
<p>Default value: 0</p>
</div>
@@ -1786,6 +1562,6 @@ the actual WEP key using the MD5 hash algorithm.</p>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/annotation-glossary.html b/docs/libnm-util/html/annotation-glossary.html
index f121b07ab..3fd307235 100644
--- a/docs/libnm-util/html/annotation-glossary.html
+++ b/docs/libnm-util/html/annotation-glossary.html
@@ -2,32 +2,37 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: Annotation Glossary</title>
+<title>Annotation Glossary</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="index.html" title="libnm-util Reference Manual">
<link rel="prev" href="api-index-full.html" title="API Index">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"><span id="nav_glossary"><a class="shortcut" href="#glsA">A</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsE">E</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsI">I</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsO">O</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsS">S</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#glsT">T</a></span></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td> </td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#glsA">A</a>
+  | 
+ <a class="shortcut" href="#glsE">E</a>
+  | 
+ <a class="shortcut" href="#glsI">I</a>
+  | 
+ <a class="shortcut" href="#glsO">O</a>
+  | 
+ <a class="shortcut" href="#glsS">S</a>
+  | 
+ <a class="shortcut" href="#glsT">T</a>
+</td></tr>
+</table>
<div class="glossary">
<div class="titlepage"><div><div><h1 class="title">
<a name="annotation-glossary"></a>Annotation Glossary</h1></div></div></div>
@@ -58,6 +63,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/api-index-full.html b/docs/libnm-util/html/api-index-full.html
index 6eaf3b9d9..87f9e3026 100644
--- a/docs/libnm-util/html/api-index-full.html
+++ b/docs/libnm-util/html/api-index-full.html
@@ -2,33 +2,38 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: API Index</title>
+<title>API Index</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="index.html" title="libnm-util Reference Manual">
<link rel="prev" href="object-tree.html" title="Object Hierarchy">
<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxC">C</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxI">I</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxS">S</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxU">U</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxV">V</a>
-  <span class="dim">|</span> 
- <a class="shortcut" href="#idxW">W</a></span></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="object-tree.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="object-tree.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#idxC">C</a>
+  | 
+ <a class="shortcut" href="#idxI">I</a>
+  | 
+ <a class="shortcut" href="#idxS">S</a>
+  | 
+ <a class="shortcut" href="#idxU">U</a>
+  | 
+ <a class="shortcut" href="#idxV">V</a>
+  | 
+ <a class="shortcut" href="#idxW">W</a>
+</td></tr>
+</table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
<a name="api-index-full"></a>API Index</h1></div></div></div>
@@ -38,51 +43,63 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#NMConnection-secrets-cleared" title="The “secrets-cleared†signal">NMConnection::secrets-cleared</a>, object signal in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NMConnection-changed" title='The "changed" signal'>NMConnection::changed</a>, object signal in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#NMConnection-secrets-updated" title="The “secrets-updated†signal">NMConnection::secrets-updated</a>, object signal in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NMConnection-secrets-cleared" title='The "secrets-cleared" signal'>NMConnection::secrets-cleared</a>, object signal in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#NMConnection--path" title="The “path†property">NMConnection:path</a>, object property in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NMConnection-secrets-updated" title='The "secrets-updated" signal'>NMConnection::secrets-updated</a>, object signal in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#NMConnectionError" title="enum NMConnectionError">NMConnectionError</a>, enum in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NMConnection--path" title='The "path" property'>NMConnection:path</a>, object property in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NMConnectionClass" title="NMConnectionClass">NMConnectionClass</a>, struct in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NMConnectionError-enum" title="enum NMConnectionError">NMConnectionError</a>, enum in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()">nm_connection_clear_secrets_with_flags</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NM-CONNECTION-CHANGED:CAPS" title="NM_CONNECTION_CHANGED">NM_CONNECTION_CHANGED</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-create-setting" title="nm_connection_create_setting ()">nm_connection_create_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()">nm_connection_clear_secrets_with_flags</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-duplicate" title="nm_connection_duplicate ()">nm_connection_duplicate</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-create-setting" title="nm_connection_create_setting ()">nm_connection_create_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-duplicate" title="nm_connection_duplicate ()">nm_connection_duplicate</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
@@ -90,147 +107,171 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-error-quark" title="nm_connection_error_quark ()">nm_connection_error_quark</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-error-quark" title="nm_connection_error_quark ()">nm_connection_error_quark</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-for-each-setting-value" title="nm_connection_for_each_setting_value ()">nm_connection_for_each_setting_value</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-get-connection-type" title="nm_connection_get_connection_type ()">nm_connection_get_connection_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-for-each-setting-value" title="nm_connection_for_each_setting_value ()">nm_connection_for_each_setting_value</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-802-1x" title="nm_connection_get_setting_802_1x ()">nm_connection_get_setting_802_1x</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-adsl" title="nm_connection_get_setting_adsl ()">nm_connection_get_setting_adsl</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-bluetooth" title="nm_connection_get_setting_bluetooth ()">nm_connection_get_setting_bluetooth</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-802-1x" title="nm_connection_get_setting_802_1x ()">nm_connection_get_setting_802_1x</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-bond" title="nm_connection_get_setting_bond ()">nm_connection_get_setting_bond</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-adsl" title="nm_connection_get_setting_adsl ()">nm_connection_get_setting_adsl</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-bridge" title="nm_connection_get_setting_bridge ()">nm_connection_get_setting_bridge</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bluetooth" title="nm_connection_get_setting_bluetooth ()">nm_connection_get_setting_bluetooth</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-bridge-port" title="nm_connection_get_setting_bridge_port ()">nm_connection_get_setting_bridge_port</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bond" title="nm_connection_get_setting_bond ()">nm_connection_get_setting_bond</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()">nm_connection_get_setting_by_name</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bridge" title="nm_connection_get_setting_bridge ()">nm_connection_get_setting_bridge</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-cdma" title="nm_connection_get_setting_cdma ()">nm_connection_get_setting_cdma</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-bridge-port" title="nm_connection_get_setting_bridge_port ()">nm_connection_get_setting_bridge_port</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-connection" title="nm_connection_get_setting_connection ()">nm_connection_get_setting_connection</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()">nm_connection_get_setting_by_name</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-dcb" title="nm_connection_get_setting_dcb ()">nm_connection_get_setting_dcb</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-cdma" title="nm_connection_get_setting_cdma ()">nm_connection_get_setting_cdma</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-generic" title="nm_connection_get_setting_generic ()">nm_connection_get_setting_generic</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-connection" title="nm_connection_get_setting_connection ()">nm_connection_get_setting_connection</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-gsm" title="nm_connection_get_setting_gsm ()">nm_connection_get_setting_gsm</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-gsm" title="nm_connection_get_setting_gsm ()">nm_connection_get_setting_gsm</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-infiniband" title="nm_connection_get_setting_infiniband ()">nm_connection_get_setting_infiniband</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-infiniband" title="nm_connection_get_setting_infiniband ()">nm_connection_get_setting_infiniband</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-ip4-config" title="nm_connection_get_setting_ip4_config ()">nm_connection_get_setting_ip4_config</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-ip4-config" title="nm_connection_get_setting_ip4_config ()">nm_connection_get_setting_ip4_config</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-ip6-config" title="nm_connection_get_setting_ip6_config ()">nm_connection_get_setting_ip6_config</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-ip6-config" title="nm_connection_get_setting_ip6_config ()">nm_connection_get_setting_ip6_config</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-olpc-mesh" title="nm_connection_get_setting_olpc_mesh ()">nm_connection_get_setting_olpc_mesh</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-olpc-mesh" title="nm_connection_get_setting_olpc_mesh ()">nm_connection_get_setting_olpc_mesh</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-ppp" title="nm_connection_get_setting_ppp ()">nm_connection_get_setting_ppp</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-ppp" title="nm_connection_get_setting_ppp ()">nm_connection_get_setting_ppp</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-pppoe" title="nm_connection_get_setting_pppoe ()">nm_connection_get_setting_pppoe</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-pppoe" title="nm_connection_get_setting_pppoe ()">nm_connection_get_setting_pppoe</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-serial" title="nm_connection_get_setting_serial ()">nm_connection_get_setting_serial</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-serial" title="nm_connection_get_setting_serial ()">nm_connection_get_setting_serial</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-team" title="nm_connection_get_setting_team ()">nm_connection_get_setting_team</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-vlan" title="nm_connection_get_setting_vlan ()">nm_connection_get_setting_vlan</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-team-port" title="nm_connection_get_setting_team_port ()">nm_connection_get_setting_team_port</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-vpn" title="nm_connection_get_setting_vpn ()">nm_connection_get_setting_vpn</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-vlan" title="nm_connection_get_setting_vlan ()">nm_connection_get_setting_vlan</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wimax" title="nm_connection_get_setting_wimax ()">nm_connection_get_setting_wimax</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-vpn" title="nm_connection_get_setting_vpn ()">nm_connection_get_setting_vpn</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wired" title="nm_connection_get_setting_wired ()">nm_connection_get_setting_wired</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wimax" title="nm_connection_get_setting_wimax ()">nm_connection_get_setting_wimax</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless" title="nm_connection_get_setting_wireless ()">nm_connection_get_setting_wireless</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wired" title="nm_connection_get_setting_wired ()">nm_connection_get_setting_wired</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless-security" title="nm_connection_get_setting_wireless_security ()">nm_connection_get_setting_wireless_security</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless" title="nm_connection_get_setting_wireless ()">nm_connection_get_setting_wireless</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless-security" title="nm_connection_get_setting_wireless_security ()">nm_connection_get_setting_wireless_security</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-get-virtual-iface-name" title="nm_connection_get_virtual_iface_name ()">nm_connection_get_virtual_iface_name</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-virtual-device-description" title="nm_connection_get_virtual_device_description ()">nm_connection_get_virtual_device_description</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type" title="nm_connection_lookup_setting_type ()">nm_connection_lookup_setting_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-get-virtual-iface-name" title="nm_connection_get_virtual_iface_name ()">nm_connection_get_virtual_iface_name</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type-by-quark" title="nm_connection_lookup_setting_type_by_quark ()">nm_connection_lookup_setting_type_by_quark</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type" title="nm_connection_lookup_setting_type ()">nm_connection_lookup_setting_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-new" title="nm_connection_new ()">nm_connection_new</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type-by-quark" title="nm_connection_lookup_setting_type_by_quark ()">nm_connection_lookup_setting_type_by_quark</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-new-from-hash" title="nm_connection_new_from_hash ()">nm_connection_new_from_hash</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-new" title="nm_connection_new ()">nm_connection_new</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-new-from-hash" title="nm_connection_new_from_hash ()">nm_connection_new_from_hash</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
@@ -238,220 +279,248 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-replace-settings-from-connection" title="nm_connection_replace_settings_from_connection ()">nm_connection_replace_settings_from_connection</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()">nm_connection_to_hash</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS" title="NM_CONNECTION_SECRETS_CLEARED">NM_CONNECTION_SECRETS_CLEARED</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS" title="NM_CONNECTION_SECRETS_UPDATED">NM_CONNECTION_SECRETS_UPDATED</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()">nm_connection_to_hash</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<a name="idxI"></a><h3 class="title">I</h3>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-compare" title="nm_ip4_address_compare ()">nm_ip4_address_compare</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#NMIP4Address">NMIP4Address</a>, typedef in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP4Config.html#NMIP4Route">NMIP4Route</a>, typedef in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-compare" title="nm_ip4_address_compare ()">nm_ip4_address_compare</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-dup" title="nm_ip4_address_dup ()">nm_ip4_address_dup</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-dup" title="nm_ip4_address_dup ()">nm_ip4_address_dup</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-address" title="nm_ip4_address_get_address ()">nm_ip4_address_get_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-address" title="nm_ip4_address_get_address ()">nm_ip4_address_get_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-gateway" title="nm_ip4_address_get_gateway ()">nm_ip4_address_get_gateway</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-gateway" title="nm_ip4_address_get_gateway ()">nm_ip4_address_get_gateway</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-prefix" title="nm_ip4_address_get_prefix ()">nm_ip4_address_get_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-get-prefix" title="nm_ip4_address_get_prefix ()">nm_ip4_address_get_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-new" title="nm_ip4_address_new ()">nm_ip4_address_new</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-new" title="nm_ip4_address_new ()">nm_ip4_address_new</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-ref" title="nm_ip4_address_ref ()">nm_ip4_address_ref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-ref" title="nm_ip4_address_ref ()">nm_ip4_address_ref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-address" title="nm_ip4_address_set_address ()">nm_ip4_address_set_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-address" title="nm_ip4_address_set_address ()">nm_ip4_address_set_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-gateway" title="nm_ip4_address_set_gateway ()">nm_ip4_address_set_gateway</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-gateway" title="nm_ip4_address_set_gateway ()">nm_ip4_address_set_gateway</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-prefix" title="nm_ip4_address_set_prefix ()">nm_ip4_address_set_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-set-prefix" title="nm_ip4_address_set_prefix ()">nm_ip4_address_set_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-unref" title="nm_ip4_address_unref ()">nm_ip4_address_unref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-address-unref" title="nm_ip4_address_unref ()">nm_ip4_address_unref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-compare" title="nm_ip4_route_compare ()">nm_ip4_route_compare</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-compare" title="nm_ip4_route_compare ()">nm_ip4_route_compare</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-dup" title="nm_ip4_route_dup ()">nm_ip4_route_dup</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-dup" title="nm_ip4_route_dup ()">nm_ip4_route_dup</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-dest" title="nm_ip4_route_get_dest ()">nm_ip4_route_get_dest</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-dest" title="nm_ip4_route_get_dest ()">nm_ip4_route_get_dest</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-metric" title="nm_ip4_route_get_metric ()">nm_ip4_route_get_metric</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-metric" title="nm_ip4_route_get_metric ()">nm_ip4_route_get_metric</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-next-hop" title="nm_ip4_route_get_next_hop ()">nm_ip4_route_get_next_hop</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-next-hop" title="nm_ip4_route_get_next_hop ()">nm_ip4_route_get_next_hop</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-prefix" title="nm_ip4_route_get_prefix ()">nm_ip4_route_get_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-get-prefix" title="nm_ip4_route_get_prefix ()">nm_ip4_route_get_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-new" title="nm_ip4_route_new ()">nm_ip4_route_new</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-new" title="nm_ip4_route_new ()">nm_ip4_route_new</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-ref" title="nm_ip4_route_ref ()">nm_ip4_route_ref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-ref" title="nm_ip4_route_ref ()">nm_ip4_route_ref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-dest" title="nm_ip4_route_set_dest ()">nm_ip4_route_set_dest</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-dest" title="nm_ip4_route_set_dest ()">nm_ip4_route_set_dest</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-metric" title="nm_ip4_route_set_metric ()">nm_ip4_route_set_metric</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-metric" title="nm_ip4_route_set_metric ()">nm_ip4_route_set_metric</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-next-hop" title="nm_ip4_route_set_next_hop ()">nm_ip4_route_set_next_hop</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-next-hop" title="nm_ip4_route_set_next_hop ()">nm_ip4_route_set_next_hop</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-prefix" title="nm_ip4_route_set_prefix ()">nm_ip4_route_set_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-set-prefix" title="nm_ip4_route_set_prefix ()">nm_ip4_route_set_prefix</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-unref" title="nm_ip4_route_unref ()">nm_ip4_route_unref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-ip4-route-unref" title="nm_ip4_route_unref ()">nm_ip4_route_unref</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-compare" title="nm_ip6_address_compare ()">nm_ip6_address_compare</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMIP6Address">NMIP6Address</a>, typedef in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-dup" title="nm_ip6_address_dup ()">nm_ip6_address_dup</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMIP6Route">NMIP6Route</a>, typedef in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-address" title="nm_ip6_address_get_address ()">nm_ip6_address_get_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-compare" title="nm_ip6_address_compare ()">nm_ip6_address_compare</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-gateway" title="nm_ip6_address_get_gateway ()">nm_ip6_address_get_gateway</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-dup" title="nm_ip6_address_dup ()">nm_ip6_address_dup</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-prefix" title="nm_ip6_address_get_prefix ()">nm_ip6_address_get_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-address" title="nm_ip6_address_get_address ()">nm_ip6_address_get_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-new" title="nm_ip6_address_new ()">nm_ip6_address_new</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-gateway" title="nm_ip6_address_get_gateway ()">nm_ip6_address_get_gateway</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-ref" title="nm_ip6_address_ref ()">nm_ip6_address_ref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-get-prefix" title="nm_ip6_address_get_prefix ()">nm_ip6_address_get_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-address" title="nm_ip6_address_set_address ()">nm_ip6_address_set_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-new" title="nm_ip6_address_new ()">nm_ip6_address_new</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-gateway" title="nm_ip6_address_set_gateway ()">nm_ip6_address_set_gateway</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-ref" title="nm_ip6_address_ref ()">nm_ip6_address_ref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-prefix" title="nm_ip6_address_set_prefix ()">nm_ip6_address_set_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-address" title="nm_ip6_address_set_address ()">nm_ip6_address_set_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-unref" title="nm_ip6_address_unref ()">nm_ip6_address_unref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-gateway" title="nm_ip6_address_set_gateway ()">nm_ip6_address_set_gateway</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-compare" title="nm_ip6_route_compare ()">nm_ip6_route_compare</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-set-prefix" title="nm_ip6_address_set_prefix ()">nm_ip6_address_set_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-dup" title="nm_ip6_route_dup ()">nm_ip6_route_dup</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-address-unref" title="nm_ip6_address_unref ()">nm_ip6_address_unref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-dest" title="nm_ip6_route_get_dest ()">nm_ip6_route_get_dest</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-compare" title="nm_ip6_route_compare ()">nm_ip6_route_compare</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-metric" title="nm_ip6_route_get_metric ()">nm_ip6_route_get_metric</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-dup" title="nm_ip6_route_dup ()">nm_ip6_route_dup</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-next-hop" title="nm_ip6_route_get_next_hop ()">nm_ip6_route_get_next_hop</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-dest" title="nm_ip6_route_get_dest ()">nm_ip6_route_get_dest</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-prefix" title="nm_ip6_route_get_prefix ()">nm_ip6_route_get_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-metric" title="nm_ip6_route_get_metric ()">nm_ip6_route_get_metric</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-new" title="nm_ip6_route_new ()">nm_ip6_route_new</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-next-hop" title="nm_ip6_route_get_next_hop ()">nm_ip6_route_get_next_hop</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-ref" title="nm_ip6_route_ref ()">nm_ip6_route_ref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-get-prefix" title="nm_ip6_route_get_prefix ()">nm_ip6_route_get_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-dest" title="nm_ip6_route_set_dest ()">nm_ip6_route_set_dest</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-new" title="nm_ip6_route_new ()">nm_ip6_route_new</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-metric" title="nm_ip6_route_set_metric ()">nm_ip6_route_set_metric</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-ref" title="nm_ip6_route_ref ()">nm_ip6_route_ref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-next-hop" title="nm_ip6_route_set_next_hop ()">nm_ip6_route_set_next_hop</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-dest" title="nm_ip6_route_set_dest ()">nm_ip6_route_set_dest</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-prefix" title="nm_ip6_route_set_prefix ()">nm_ip6_route_set_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-metric" title="nm_ip6_route_set_metric ()">nm_ip6_route_set_metric</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-unref" title="nm_ip6_route_unref ()">nm_ip6_route_unref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-next-hop" title="nm_ip6_route_set_next_hop ()">nm_ip6_route_set_next_hop</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-set-prefix" title="nm_ip6_route_set_prefix ()">nm_ip6_route_set_prefix</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP6Config.html#nm-ip6-route-unref" title="nm_ip6_route_unref ()">nm_ip6_route_unref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<a name="idxS"></a><h3 class="title">S</h3>
@@ -460,279 +529,343 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--altsubject-matches" title="The “altsubject-matches†property">NMSetting8021x:altsubject-matches</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x-struct" title="NMSetting8021x">NMSetting8021x</a>, struct in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--altsubject-matches" title='The "altsubject-matches" property'>NMSetting8021x:altsubject-matches</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--anonymous-identity" title='The "anonymous-identity" property'>NMSetting8021x:anonymous-identity</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title='The "ca-cert" property'>NMSetting8021x:ca-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-path" title='The "ca-path" property'>NMSetting8021x:ca-path</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--client-cert" title='The "client-cert" property'>NMSetting8021x:client-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'>NMSetting8021x:eap</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--identity" title='The "identity" property'>NMSetting8021x:identity</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--pac-file" title='The "pac-file" property'>NMSetting8021x:pac-file</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title='The "password" property'>NMSetting8021x:password</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-flags" title='The "password-flags" property'>NMSetting8021x:password-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'>NMSetting8021x:password-raw</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw-flags" title='The "password-raw-flags" property'>NMSetting8021x:password-raw-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning" title='The "phase1-fast-provisioning" property'>NMSetting8021x:phase1-fast-provisioning</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--anonymous-identity" title="The “anonymous-identity†property">NMSetting8021x:anonymous-identity</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel" title='The "phase1-peaplabel" property'>NMSetting8021x:phase1-peaplabel</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-cert" title="The “ca-cert†property">NMSetting8021x:ca-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peapver" title='The "phase1-peapver" property'>NMSetting8021x:phase1-peapver</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--ca-path" title="The “ca-path†property">NMSetting8021x:ca-path</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches" title='The "phase2-altsubject-matches" property'>NMSetting8021x:phase2-altsubject-matches</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--client-cert" title="The “client-cert†property">NMSetting8021x:client-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title='The "phase2-auth" property'>NMSetting8021x:phase2-auth</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title="The “eap†property">NMSetting8021x:eap</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title='The "phase2-autheap" property'>NMSetting8021x:phase2-autheap</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--identity" title="The “identity†property">NMSetting8021x:identity</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title='The "phase2-ca-cert" property'>NMSetting8021x:phase2-ca-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--pac-file" title="The “pac-file†property">NMSetting8021x:pac-file</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-path" title='The "phase2-ca-path" property'>NMSetting8021x:phase2-ca-path</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--password" title="The “password†property">NMSetting8021x:password</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-client-cert" title='The "phase2-client-cert" property'>NMSetting8021x:phase2-client-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-flags" title="The “password-flags†property">NMSetting8021x:password-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title='The "phase2-private-key" property'>NMSetting8021x:phase2-private-key</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title="The “password-raw†property">NMSetting8021x:password-raw</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title='The "phase2-private-key-password" property'>NMSetting8021x:phase2-private-key-password</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw-flags" title="The “password-raw-flags†property">NMSetting8021x:password-raw-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags" title='The "phase2-private-key-password-flags" property'>NMSetting8021x:phase2-private-key-password-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning" title="The “phase1-fast-provisioning†property">NMSetting8021x:phase1-fast-provisioning</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-subject-match" title='The "phase2-subject-match" property'>NMSetting8021x:phase2-subject-match</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel" title="The “phase1-peaplabel†property">NMSetting8021x:phase1-peaplabel</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title='The "pin" property'>NMSetting8021x:pin</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase1-peapver" title="The “phase1-peapver†property">NMSetting8021x:phase1-peapver</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin-flags" title='The "pin-flags" property'>NMSetting8021x:pin-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches" title="The “phase2-altsubject-matches†property">NMSetting8021x:phase2-altsubject-matches</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title='The "private-key" property'>NMSetting8021x:private-key</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title="The “phase2-auth†property">NMSetting8021x:phase2-auth</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title='The "private-key-password" property'>NMSetting8021x:private-key-password</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title="The “phase2-autheap†property">NMSetting8021x:phase2-autheap</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password-flags" title='The "private-key-password-flags" property'>NMSetting8021x:private-key-password-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert" title="The “phase2-ca-cert†property">NMSetting8021x:phase2-ca-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--subject-match" title='The "subject-match" property'>NMSetting8021x:subject-match</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-ca-path" title="The “phase2-ca-path†property">NMSetting8021x:phase2-ca-path</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title='The "system-ca-certs" property'>NMSetting8021x:system-ca-certs</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-client-cert" title="The “phase2-client-cert†property">NMSetting8021x:phase2-client-cert</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat-enum" title="enum NMSetting8021xCKFormat">NMSetting8021xCKFormat</a>, enum in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title="The “phase2-private-key†property">NMSetting8021x:phase2-private-key</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme-enum" title="enum NMSetting8021xCKScheme">NMSetting8021xCKScheme</a>, enum in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password" title="The “phase2-private-key-password†property">NMSetting8021x:phase2-private-key-password</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021xClass" title="NMSetting8021xClass">NMSetting8021xClass</a>, struct in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags" title="The “phase2-private-key-password-flags†property">NMSetting8021x:phase2-private-key-password-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#NMSetting8021xError-enum" title="enum NMSetting8021xError">NMSetting8021xError</a>, enum in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-subject-match" title="The “phase2-subject-match†property">NMSetting8021x:phase2-subject-match</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting.html#NMSetting--name" title='The "name" property'>NMSetting:name</a>, object property in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin" title="The “pin†property">NMSetting8021x:pin</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl-struct" title="NMSettingAdsl">NMSettingAdsl</a>, struct in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--pin-flags" title="The “pin-flags†property">NMSetting8021x:pin-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--encapsulation" title='The "encapsulation" property'>NMSettingAdsl:encapsulation</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title="The “private-key†property">NMSetting8021x:private-key</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title='The "password" property'>NMSettingAdsl:password</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password" title="The “private-key-password†property">NMSetting8021x:private-key-password</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password-flags" title='The "password-flags" property'>NMSettingAdsl:password-flags</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key-password-flags" title="The “private-key-password-flags†property">NMSetting8021x:private-key-password-flags</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--protocol" title='The "protocol" property'>NMSettingAdsl:protocol</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--subject-match" title="The “subject-match†property">NMSetting8021x:subject-match</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--username" title='The "username" property'>NMSettingAdsl:username</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021x--system-ca-certs" title="The “system-ca-certs†property">NMSetting8021x:system-ca-certs</a>, object property in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vci" title='The "vci" property'>NMSettingAdsl:vci</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat">NMSetting8021xCKFormat</a>, enum in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vpi" title='The "vpi" property'>NMSettingAdsl:vpi</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme">NMSetting8021xCKScheme</a>, enum in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdslClass" title="NMSettingAdslClass">NMSettingAdslClass</a>, struct in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#NMSetting8021xError" title="enum NMSetting8021xError">NMSetting8021xError</a>, enum in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingAdsl.html#NMSettingAdslError-enum" title="enum NMSettingAdslError">NMSettingAdslError</a>, enum in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSetting--name" title="The “name†property">NMSetting:name</a>, object property in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth-struct" title="NMSettingBluetooth">NMSettingBluetooth</a>, struct in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--encapsulation" title="The “encapsulation†property">NMSettingAdsl:encapsulation</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--bdaddr" title='The "bdaddr" property'>NMSettingBluetooth:bdaddr</a>, object property in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password" title="The “password†property">NMSettingAdsl:password</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--type" title='The "type" property'>NMSettingBluetooth:type</a>, object property in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--password-flags" title="The “password-flags†property">NMSettingAdsl:password-flags</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothClass" title="NMSettingBluetoothClass">NMSettingBluetoothClass</a>, struct in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--protocol" title="The “protocol†property">NMSettingAdsl:protocol</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothError-enum" title="enum NMSettingBluetoothError">NMSettingBluetoothError</a>, enum in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--username" title="The “username†property">NMSettingAdsl:username</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBond.html#NMSettingBond-struct" title="NMSettingBond">NMSettingBond</a>, struct in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vci" title="The “vci†property">NMSettingAdsl:vci</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBond.html#NMSettingBond--interface-name" title='The "interface-name" property'>NMSettingBond:interface-name</a>, object property in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdsl--vpi" title="The “vpi†property">NMSettingAdsl:vpi</a>, object property in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBond.html#NMSettingBond--options" title='The "options" property'>NMSettingBond:options</a>, object property in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#NMSettingAdslError" title="enum NMSettingAdslError">NMSettingAdslError</a>, enum in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingBond.html#NMSettingBondClass" title="NMSettingBondClass">NMSettingBondClass</a>, struct in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--bdaddr" title="The “bdaddr†property">NMSettingBluetooth:bdaddr</a>, object property in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+<a class="link" href="NMSettingBond.html#NMSettingBondError-enum" title="enum NMSettingBondError">NMSettingBondError</a>, enum in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--type" title="The “type†property">NMSettingBluetooth:type</a>, object property in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge-struct" title="NMSettingBridge">NMSettingBridge</a>, struct in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothError" title="enum NMSettingBluetoothError">NMSettingBluetoothError</a>, enum in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--ageing-time" title='The "ageing-time" property'>NMSettingBridge:ageing-time</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#NMSettingBond--interface-name" title="The “interface-name†property">NMSettingBond:interface-name</a>, object property in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--forward-delay" title='The "forward-delay" property'>NMSettingBridge:forward-delay</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#NMSettingBond--options" title="The “options†property">NMSettingBond:options</a>, object property in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--hello-time" title='The "hello-time" property'>NMSettingBridge:hello-time</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#NMSettingBondError" title="enum NMSettingBondError">NMSettingBondError</a>, enum in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--interface-name" title='The "interface-name" property'>NMSettingBridge:interface-name</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridge--ageing-time" title="The “ageing-time†property">NMSettingBridge:ageing-time</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--mac-address" title='The "mac-address" property'>NMSettingBridge:mac-address</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridge--forward-delay" title="The “forward-delay†property">NMSettingBridge:forward-delay</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--max-age" title='The "max-age" property'>NMSettingBridge:max-age</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridge--hello-time" title="The “hello-time†property">NMSettingBridge:hello-time</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--priority" title='The "priority" property'>NMSettingBridge:priority</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridge--interface-name" title="The “interface-name†property">NMSettingBridge:interface-name</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridge--stp" title='The "stp" property'>NMSettingBridge:stp</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridge--max-age" title="The “max-age†property">NMSettingBridge:max-age</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridgeClass" title="NMSettingBridgeClass">NMSettingBridgeClass</a>, struct in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridge--priority" title="The “priority†property">NMSettingBridge:priority</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#NMSettingBridgeError-enum" title="enum NMSettingBridgeError">NMSettingBridgeError</a>, enum in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridge--stp" title="The “stp†property">NMSettingBridge:stp</a>, object property in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort-struct" title="NMSettingBridgePort">NMSettingBridgePort</a>, struct in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#NMSettingBridgeError" title="enum NMSettingBridgeError">NMSettingBridgeError</a>, enum in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode" title='The "hairpin-mode" property'>NMSettingBridgePort:hairpin-mode</a>, object property in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode" title="The “hairpin-mode†property">NMSettingBridgePort:hairpin-mode</a>, object property in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--path-cost" title='The "path-cost" property'>NMSettingBridgePort:path-cost</a>, object property in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--path-cost" title="The “path-cost†property">NMSettingBridgePort:path-cost</a>, object property in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--priority" title='The "priority" property'>NMSettingBridgePort:priority</a>, object property in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort--priority" title="The “priority†property">NMSettingBridgePort:priority</a>, object property in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortClass" title="NMSettingBridgePortClass">NMSettingBridgePortClass</a>, struct in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortError" title="enum NMSettingBridgePortError">NMSettingBridgePortError</a>, enum in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortError-enum" title="enum NMSettingBridgePortError">NMSettingBridgePortError</a>, enum in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#NMSettingCdma--number" title="The “number†property">NMSettingCdma:number</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#NMSettingCdma-struct" title="NMSettingCdma">NMSettingCdma</a>, struct in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title="The “password†property">NMSettingCdma:password</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#NMSettingCdma--number" title='The "number" property'>NMSettingCdma:number</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#NMSettingCdma--password-flags" title="The “password-flags†property">NMSettingCdma:password-flags</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#NMSettingCdma--password" title='The "password" property'>NMSettingCdma:password</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#NMSettingCdma--username" title="The “username†property">NMSettingCdma:username</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#NMSettingCdma--password-flags" title='The "password-flags" property'>NMSettingCdma:password-flags</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#NMSettingCdmaError" title="enum NMSettingCdmaError">NMSettingCdmaError</a>, enum in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#NMSettingCdma--username" title='The "username" property'>NMSettingCdma:username</a>, object property in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()">NMSettingClearSecretsWithFlagsFn</a>, user_function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingCdma.html#NMSettingCdmaClass" title="NMSettingCdmaClass">NMSettingCdmaClass</a>, struct in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags">NMSettingCompareFlags</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingCdma.html#NMSettingCdmaError-enum" title="enum NMSettingCdmaError">NMSettingCdmaError</a>, enum in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NMSettingClass" title="NMSettingClass">NMSettingClass</a>, struct in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()">NMSettingClearSecretsWithFlagsFn</a>, user_function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NMSettingCompareFlags-enum" title="enum NMSettingCompareFlags">NMSettingCompareFlags</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
@@ -740,635 +873,895 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--autoconnect" title="The “autoconnect†property">NMSettingConnection:autoconnect</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--autoconnect" title='The "autoconnect" property'>NMSettingConnection:autoconnect</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout" title='The "gateway-ping-timeout" property'>NMSettingConnection:gateway-ping-timeout</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title='The "id" property'>NMSettingConnection:id</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--interface-name" title='The "interface-name" property'>NMSettingConnection:interface-name</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--master" title='The "master" property'>NMSettingConnection:master</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title='The "permissions" property'>NMSettingConnection:permissions</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--read-only" title='The "read-only" property'>NMSettingConnection:read-only</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--secondaries" title='The "secondaries" property'>NMSettingConnection:secondaries</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--slave-type" title='The "slave-type" property'>NMSettingConnection:slave-type</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--timestamp" title='The "timestamp" property'>NMSettingConnection:timestamp</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'>NMSettingConnection:type</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--uuid" title='The "uuid" property'>NMSettingConnection:uuid</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--zone" title='The "zone" property'>NMSettingConnection:zone</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnectionClass" title="NMSettingConnectionClass">NMSettingConnectionClass</a>, struct in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnectionError-enum" title="enum NMSettingConnectionError">NMSettingConnectionError</a>, enum in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb-struct" title="NMSettingDcb">NMSettingDcb</a>, struct in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-flags" title='The "app-fcoe-flags" property'>NMSettingDcb:app-fcoe-flags</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-mode" title='The "app-fcoe-mode" property'>NMSettingDcb:app-fcoe-mode</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fcoe-priority" title='The "app-fcoe-priority" property'>NMSettingDcb:app-fcoe-priority</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fip-flags" title='The "app-fip-flags" property'>NMSettingDcb:app-fip-flags</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-fip-priority" title='The "app-fip-priority" property'>NMSettingDcb:app-fip-priority</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-iscsi-flags" title='The "app-iscsi-flags" property'>NMSettingDcb:app-iscsi-flags</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--app-iscsi-priority" title='The "app-iscsi-priority" property'>NMSettingDcb:app-iscsi-priority</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-bandwidth" title='The "priority-bandwidth" property'>NMSettingDcb:priority-bandwidth</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-flow-control" title='The "priority-flow-control" property'>NMSettingDcb:priority-flow-control</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags" title='The "priority-flow-control-flags" property'>NMSettingDcb:priority-flow-control-flags</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-bandwidth" title='The "priority-group-bandwidth" property'>NMSettingDcb:priority-group-bandwidth</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'>NMSettingDcb:priority-group-flags</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-id" title='The "priority-group-id" property'>NMSettingDcb:priority-group-id</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-strict-bandwidth" title='The "priority-strict-bandwidth" property'>NMSettingDcb:priority-strict-bandwidth</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-traffic-class" title='The "priority-traffic-class" property'>NMSettingDcb:priority-traffic-class</a>, object property in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcbClass" title="NMSettingDcbClass">NMSettingDcbClass</a>, struct in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcbError-enum" title="enum NMSettingDcbError">NMSettingDcbError</a>, enum in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NMSettingDcbFlags-enum" title="enum NMSettingDcbFlags">NMSettingDcbFlags</a>, enum in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NMSettingDiffResult-enum" title="enum NMSettingDiffResult">NMSettingDiffResult</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NMSettingError-enum" title="enum NMSettingError">NMSettingError</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGeneric.html#NMSettingGeneric-struct" title="NMSettingGeneric">NMSettingGeneric</a>, struct in <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGeneric.html#NMSettingGenericClass" title="NMSettingGenericClass">NMSettingGenericClass</a>, struct in <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGeneric.html#NMSettingGenericError-enum" title="enum NMSettingGenericError">NMSettingGenericError</a>, enum in <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm-struct" title="NMSettingGsm">NMSettingGsm</a>, struct in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--allowed-bands" title='The "allowed-bands" property'>NMSettingGsm:allowed-bands</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--apn" title='The "apn" property'>NMSettingGsm:apn</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--home-only" title='The "home-only" property'>NMSettingGsm:home-only</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--network-id" title='The "network-id" property'>NMSettingGsm:network-id</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--network-type" title='The "network-type" property'>NMSettingGsm:network-type</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--number" title='The "number" property'>NMSettingGsm:number</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title='The "password" property'>NMSettingGsm:password</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--password-flags" title='The "password-flags" property'>NMSettingGsm:password-flags</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title='The "pin" property'>NMSettingGsm:pin</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--pin-flags" title='The "pin-flags" property'>NMSettingGsm:pin-flags</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsm--username" title='The "username" property'>NMSettingGsm:username</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NMSettingGsmClass" title="NMSettingGsmClass">NMSettingGsmClass</a>, struct in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title="The “id†property">NMSettingConnection:id</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingGsm.html#NMSettingGsmError-enum" title="enum NMSettingGsmError">NMSettingGsmError</a>, enum in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--master" title="The “master†property">NMSettingConnection:master</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand-enum" title="enum NMSettingGsmNetworkBand">NMSettingGsmNetworkBand</a>, enum in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--permissions" title="The “permissions†property">NMSettingConnection:permissions</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType-enum" title="enum NMSettingGsmNetworkType">NMSettingGsmNetworkType</a>, enum in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--read-only" title="The “read-only†property">NMSettingConnection:read-only</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSetting.html#NMSettingHashFlags-enum" title="enum NMSettingHashFlags">NMSettingHashFlags</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--secondaries" title="The “secondaries†property">NMSettingConnection:secondaries</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband-struct" title="NMSettingInfiniband">NMSettingInfiniband</a>, struct in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--slave-type" title="The “slave-type†property">NMSettingConnection:slave-type</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mac-address" title='The "mac-address" property'>NMSettingInfiniband:mac-address</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--timestamp" title="The “timestamp†property">NMSettingConnection:timestamp</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mtu" title='The "mtu" property'>NMSettingInfiniband:mtu</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title="The “type†property">NMSettingConnection:type</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--p-key" title='The "p-key" property'>NMSettingInfiniband:p-key</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--uuid" title="The “uuid†property">NMSettingConnection:uuid</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--parent" title='The "parent" property'>NMSettingInfiniband:parent</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnection--zone" title="The “zone†property">NMSettingConnection:zone</a>, object property in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--transport-mode" title='The "transport-mode" property'>NMSettingInfiniband:transport-mode</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#NMSettingConnectionError" title="enum NMSettingConnectionError">NMSettingConnectionError</a>, enum in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandClass" title="NMSettingInfinibandClass">NMSettingInfinibandClass</a>, struct in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult">NMSettingDiffResult</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandError-enum" title="enum NMSettingInfinibandError">NMSettingInfinibandError</a>, enum in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSettingError" title="enum NMSettingError">NMSettingError</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config-struct" title="NMSettingIP4Config">NMSettingIP4Config</a>, struct in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--allowed-bands" title="The “allowed-bands†property">NMSettingGsm:allowed-bands</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--address-labels" title='The "address-labels" property'>NMSettingIP4Config:address-labels</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--apn" title="The “apn†property">NMSettingGsm:apn</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--addresses" title='The "addresses" property'>NMSettingIP4Config:addresses</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--home-only" title="The “home-only†property">NMSettingGsm:home-only</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id" title='The "dhcp-client-id" property'>NMSettingIP4Config:dhcp-client-id</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--network-id" title="The “network-id†property">NMSettingGsm:network-id</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname" title='The "dhcp-hostname" property'>NMSettingIP4Config:dhcp-hostname</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--network-type" title="The “network-type†property">NMSettingGsm:network-type</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname" title='The "dhcp-send-hostname" property'>NMSettingIP4Config:dhcp-send-hostname</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--number" title="The “number†property">NMSettingGsm:number</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns" title='The "dns" property'>NMSettingIP4Config:dns</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--password" title="The “password†property">NMSettingGsm:password</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns-search" title='The "dns-search" property'>NMSettingIP4Config:dns-search</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--password-flags" title="The “password-flags†property">NMSettingGsm:password-flags</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns" title='The "ignore-auto-dns" property'>NMSettingIP4Config:ignore-auto-dns</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--pin" title="The “pin†property">NMSettingGsm:pin</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes" title='The "ignore-auto-routes" property'>NMSettingIP4Config:ignore-auto-routes</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--pin-flags" title="The “pin-flags†property">NMSettingGsm:pin-flags</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--may-fail" title='The "may-fail" property'>NMSettingIP4Config:may-fail</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsm--username" title="The “username†property">NMSettingGsm:username</a>, object property in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--method" title='The "method" property'>NMSettingIP4Config:method</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsmError" title="enum NMSettingGsmError">NMSettingGsmError</a>, enum in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--never-default" title='The "never-default" property'>NMSettingIP4Config:never-default</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand" title="enum NMSettingGsmNetworkBand">NMSettingGsmNetworkBand</a>, enum in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--routes" title='The "routes" property'>NMSettingIP4Config:routes</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType" title="enum NMSettingGsmNetworkType">NMSettingGsmNetworkType</a>, enum in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigClass" title="NMSettingIP4ConfigClass">NMSettingIP4ConfigClass</a>, struct in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSettingHashFlags" title="enum NMSettingHashFlags">NMSettingHashFlags</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigError-enum" title="enum NMSettingIP4ConfigError">NMSettingIP4ConfigError</a>, enum in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mac-address" title="The “mac-address†property">NMSettingInfiniband:mac-address</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config-struct" title="NMSettingIP6Config">NMSettingIP6Config</a>, struct in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--mtu" title="The “mtu†property">NMSettingInfiniband:mtu</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--addresses" title='The "addresses" property'>NMSettingIP6Config:addresses</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--transport-mode" title="The “transport-mode†property">NMSettingInfiniband:transport-mode</a>, object property in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname" title='The "dhcp-hostname" property'>NMSettingIP6Config:dhcp-hostname</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandError" title="enum NMSettingInfinibandError">NMSettingInfinibandError</a>, enum in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns" title='The "dns" property'>NMSettingIP6Config:dns</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--addresses" title="The “addresses†property">NMSettingIP4Config:addresses</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns-search" title='The "dns-search" property'>NMSettingIP6Config:dns-search</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id" title="The “dhcp-client-id†property">NMSettingIP4Config:dhcp-client-id</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns" title='The "ignore-auto-dns" property'>NMSettingIP6Config:ignore-auto-dns</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname" title="The “dhcp-hostname†property">NMSettingIP4Config:dhcp-hostname</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes" title='The "ignore-auto-routes" property'>NMSettingIP6Config:ignore-auto-routes</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname" title="The “dhcp-send-hostname†property">NMSettingIP4Config:dhcp-send-hostname</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy" title='The "ip6-privacy" property'>NMSettingIP6Config:ip6-privacy</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns" title="The “dns†property">NMSettingIP4Config:dns</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--may-fail" title='The "may-fail" property'>NMSettingIP6Config:may-fail</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--dns-search" title="The “dns-search†property">NMSettingIP4Config:dns-search</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--method" title='The "method" property'>NMSettingIP6Config:method</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns" title="The “ignore-auto-dns†property">NMSettingIP4Config:ignore-auto-dns</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--never-default" title='The "never-default" property'>NMSettingIP6Config:never-default</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes" title="The “ignore-auto-routes†property">NMSettingIP4Config:ignore-auto-routes</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--routes" title='The "routes" property'>NMSettingIP6Config:routes</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--may-fail" title="The “may-fail†property">NMSettingIP4Config:may-fail</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigClass" title="NMSettingIP6ConfigClass">NMSettingIP6ConfigClass</a>, struct in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--method" title="The “method†property">NMSettingIP4Config:method</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigError-enum" title="enum NMSettingIP6ConfigError">NMSettingIP6ConfigError</a>, enum in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--never-default" title="The “never-default†property">NMSettingIP4Config:never-default</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy-enum" title="enum NMSettingIP6ConfigPrivacy">NMSettingIP6ConfigPrivacy</a>, enum in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--routes" title="The “routes†property">NMSettingIP4Config:routes</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh-struct" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>, struct in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigError" title="enum NMSettingIP4ConfigError">NMSettingIP4ConfigError</a>, enum in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel" title='The "channel" property'>NMSettingOlpcMesh:channel</a>, object property in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--addresses" title="The “addresses†property">NMSettingIP6Config:addresses</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address" title='The "dhcp-anycast-address" property'>NMSettingOlpcMesh:dhcp-anycast-address</a>, object property in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname" title="The “dhcp-hostname†property">NMSettingIP6Config:dhcp-hostname</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid" title='The "ssid" property'>NMSettingOlpcMesh:ssid</a>, object property in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns" title="The “dns†property">NMSettingIP6Config:dns</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshClass" title="NMSettingOlpcMeshClass">NMSettingOlpcMeshClass</a>, struct in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--dns-search" title="The “dns-search†property">NMSettingIP6Config:dns-search</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshError-enum" title="enum NMSettingOlpcMeshError">NMSettingOlpcMeshError</a>, enum in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns" title="The “ignore-auto-dns†property">NMSettingIP6Config:ignore-auto-dns</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP-struct" title="NMSettingPPP">NMSettingPPP</a>, struct in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes" title="The “ignore-auto-routes†property">NMSettingIP6Config:ignore-auto-routes</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--baud" title='The "baud" property'>NMSettingPPP:baud</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy" title="The “ip6-privacy†property">NMSettingIP6Config:ip6-privacy</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--crtscts" title='The "crtscts" property'>NMSettingPPP:crtscts</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--may-fail" title="The “may-fail†property">NMSettingIP6Config:may-fail</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure" title='The "lcp-echo-failure" property'>NMSettingPPP:lcp-echo-failure</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--method" title="The “method†property">NMSettingIP6Config:method</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval" title='The "lcp-echo-interval" property'>NMSettingPPP:lcp-echo-interval</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--never-default" title="The “never-default†property">NMSettingIP6Config:never-default</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--mppe-stateful" title='The "mppe-stateful" property'>NMSettingPPP:mppe-stateful</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--routes" title="The “routes†property">NMSettingIP6Config:routes</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--mru" title='The "mru" property'>NMSettingPPP:mru</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigError" title="enum NMSettingIP6ConfigError">NMSettingIP6ConfigError</a>, enum in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--mtu" title='The "mtu" property'>NMSettingPPP:mtu</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy">NMSettingIP6ConfigPrivacy</a>, enum in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--no-vj-comp" title='The "no-vj-comp" property'>NMSettingPPP:no-vj-comp</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel" title="The “channel†property">NMSettingOlpcMesh:channel</a>, object property in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--noauth" title='The "noauth" property'>NMSettingPPP:noauth</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address" title="The “dhcp-anycast-address†property">NMSettingOlpcMesh:dhcp-anycast-address</a>, object property in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--nobsdcomp" title='The "nobsdcomp" property'>NMSettingPPP:nobsdcomp</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid" title="The “ssid†property">NMSettingOlpcMesh:ssid</a>, object property in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--nodeflate" title='The "nodeflate" property'>NMSettingPPP:nodeflate</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshError" title="enum NMSettingOlpcMeshError">NMSettingOlpcMeshError</a>, enum in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-chap" title='The "refuse-chap" property'>NMSettingPPP:refuse-chap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--baud" title="The “baud†property">NMSettingPPP:baud</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-eap" title='The "refuse-eap" property'>NMSettingPPP:refuse-eap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--crtscts" title="The “crtscts†property">NMSettingPPP:crtscts</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschap" title='The "refuse-mschap" property'>NMSettingPPP:refuse-mschap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure" title="The “lcp-echo-failure†property">NMSettingPPP:lcp-echo-failure</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2" title='The "refuse-mschapv2" property'>NMSettingPPP:refuse-mschapv2</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval" title="The “lcp-echo-interval†property">NMSettingPPP:lcp-echo-interval</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-pap" title='The "refuse-pap" property'>NMSettingPPP:refuse-pap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--mppe-stateful" title="The “mppe-stateful†property">NMSettingPPP:mppe-stateful</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe" title='The "require-mppe" property'>NMSettingPPP:require-mppe</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--mru" title="The “mru†property">NMSettingPPP:mru</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe-128" title='The "require-mppe-128" property'>NMSettingPPP:require-mppe-128</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--mtu" title="The “mtu†property">NMSettingPPP:mtu</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPPClass" title="NMSettingPPPClass">NMSettingPPPClass</a>, struct in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--no-vj-comp" title="The “no-vj-comp†property">NMSettingPPP:no-vj-comp</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#NMSettingPPPError-enum" title="enum NMSettingPPPError">NMSettingPPPError</a>, enum in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--noauth" title="The “noauth†property">NMSettingPPP:noauth</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE-struct" title="NMSettingPPPOE">NMSettingPPPOE</a>, struct in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--nobsdcomp" title="The “nobsdcomp†property">NMSettingPPP:nobsdcomp</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title='The "password" property'>NMSettingPPPOE:password</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--nodeflate" title="The “nodeflate†property">NMSettingPPP:nodeflate</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password-flags" title='The "password-flags" property'>NMSettingPPPOE:password-flags</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-chap" title="The “refuse-chap†property">NMSettingPPP:refuse-chap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--service" title='The "service" property'>NMSettingPPPOE:service</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-eap" title="The “refuse-eap†property">NMSettingPPP:refuse-eap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--username" title='The "username" property'>NMSettingPPPOE:username</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschap" title="The “refuse-mschap†property">NMSettingPPP:refuse-mschap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEClass" title="NMSettingPPPOEClass">NMSettingPPPOEClass</a>, struct in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2" title="The “refuse-mschapv2†property">NMSettingPPP:refuse-mschapv2</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEError-enum" title="enum NMSettingPPPOEError">NMSettingPPPOEError</a>, enum in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--refuse-pap" title="The “refuse-pap†property">NMSettingPPP:refuse-pap</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSetting.html#NMSettingSecretFlags-enum" title="enum NMSettingSecretFlags">NMSettingSecretFlags</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe" title="The “require-mppe†property">NMSettingPPP:require-mppe</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerial-struct" title="NMSettingSerial">NMSettingSerial</a>, struct in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPP--require-mppe-128" title="The “require-mppe-128†property">NMSettingPPP:require-mppe-128</a>, object property in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerial--baud" title='The "baud" property'>NMSettingSerial:baud</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#NMSettingPPPError" title="enum NMSettingPPPError">NMSettingPPPError</a>, enum in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerial--bits" title='The "bits" property'>NMSettingSerial:bits</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password" title="The “password†property">NMSettingPPPOE:password</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerial--parity" title='The "parity" property'>NMSettingSerial:parity</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--password-flags" title="The “password-flags†property">NMSettingPPPOE:password-flags</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerial--send-delay" title='The "send-delay" property'>NMSettingSerial:send-delay</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--service" title="The “service†property">NMSettingPPPOE:service</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerial--stopbits" title='The "stopbits" property'>NMSettingSerial:stopbits</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOE--username" title="The “username†property">NMSettingPPPOE:username</a>, object property in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerialClass" title="NMSettingSerialClass">NMSettingSerialClass</a>, struct in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEError" title="enum NMSettingPPPOEError">NMSettingPPPOEError</a>, enum in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingSerial.html#NMSettingSerialError-enum" title="enum NMSettingSerialError">NMSettingSerialError</a>, enum in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags">NMSettingSecretFlags</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingTeam.html#NMSettingTeam-struct" title="NMSettingTeam">NMSettingTeam</a>, struct in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#NMSettingSerial--baud" title="The “baud†property">NMSettingSerial:baud</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingTeam.html#NMSettingTeam--config" title='The "config" property'>NMSettingTeam:config</a>, object property in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#NMSettingSerial--bits" title="The “bits†property">NMSettingSerial:bits</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingTeam.html#NMSettingTeam--interface-name" title='The "interface-name" property'>NMSettingTeam:interface-name</a>, object property in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#NMSettingSerial--parity" title="The “parity†property">NMSettingSerial:parity</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingTeam.html#NMSettingTeamClass" title="NMSettingTeamClass">NMSettingTeamClass</a>, struct in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#NMSettingSerial--send-delay" title="The “send-delay†property">NMSettingSerial:send-delay</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingTeam.html#NMSettingTeamError-enum" title="enum NMSettingTeamError">NMSettingTeamError</a>, enum in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#NMSettingSerial--stopbits" title="The “stopbits†property">NMSettingSerial:stopbits</a>, object property in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingTeamPort.html#NMSettingTeamPort-struct" title="NMSettingTeamPort">NMSettingTeamPort</a>, struct in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#NMSettingSerialError" title="enum NMSettingSerialError">NMSettingSerialError</a>, enum in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingTeamPort.html#NMSettingTeamPort--config" title='The "config" property'>NMSettingTeamPort:config</a>, object property in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()">NMSettingValueIterFn</a>, user_function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingTeamPort.html#NMSettingTeamPortClass" title="NMSettingTeamPortClass">NMSettingTeamPortClass</a>, struct in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title="The “egress-priority-map†property">NMSettingVlan:egress-priority-map</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingTeamPort.html#NMSettingTeamPortError-enum" title="enum NMSettingTeamPortError">NMSettingTeamPortError</a>, enum in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--flags" title="The “flags†property">NMSettingVlan:flags</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()">NMSettingValueIterFn</a>, user_function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--id" title="The “id†property">NMSettingVlan:id</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlan-struct" title="NMSettingVlan">NMSettingVlan</a>, struct in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title="The “ingress-priority-map†property">NMSettingVlan:ingress-priority-map</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'>NMSettingVlan:egress-priority-map</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--interface-name" title="The “interface-name†property">NMSettingVlan:interface-name</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--flags" title='The "flags" property'>NMSettingVlan:flags</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMSettingVlan--parent" title="The “parent†property">NMSettingVlan:parent</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--id" title='The "id" property'>NMSettingVlan:id</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMSettingVlanError" title="enum NMSettingVlanError">NMSettingVlanError</a>, enum in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--ingress-priority-map" title='The "ingress-priority-map" property'>NMSettingVlan:ingress-priority-map</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#NMSettingVPN--data" title="The “data†property">NMSettingVPN:data</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--interface-name" title='The "interface-name" property'>NMSettingVlan:interface-name</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#NMSettingVPN--secrets" title="The “secrets†property">NMSettingVPN:secrets</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlan--parent" title='The "parent" property'>NMSettingVlan:parent</a>, object property in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#NMSettingVPN--service-type" title="The “service-type†property">NMSettingVPN:service-type</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlanClass" title="NMSettingVlanClass">NMSettingVlanClass</a>, struct in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#NMSettingVPN--user-name" title="The “user-name†property">NMSettingVPN:user-name</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVlan.html#NMSettingVlanError-enum" title="enum NMSettingVlanError">NMSettingVlanError</a>, enum in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#NMSettingVpnError" title="enum NMSettingVpnError">NMSettingVpnError</a>, enum in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#NMSettingVPN-struct" title="NMSettingVPN">NMSettingVPN</a>, struct in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWimax.html#NMSettingWimax--mac-address" title="The “mac-address†property">NMSettingWimax:mac-address</a>, object property in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+<a class="link" href="NMSettingVPN.html#NMSettingVPN--data" title='The "data" property'>NMSettingVPN:data</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWimax.html#NMSettingWimax--network-name" title="The “network-name†property">NMSettingWimax:network-name</a>, object property in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+<a class="link" href="NMSettingVPN.html#NMSettingVPN--secrets" title='The "secrets" property'>NMSettingVPN:secrets</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWimax.html#NMSettingWimaxError" title="enum NMSettingWimaxError">NMSettingWimaxError</a>, enum in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+<a class="link" href="NMSettingVPN.html#NMSettingVPN--service-type" title='The "service-type" property'>NMSettingVPN:service-type</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--auto-negotiate" title="The “auto-negotiate†property">NMSettingWired:auto-negotiate</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingVPN.html#NMSettingVPN--user-name" title='The "user-name" property'>NMSettingVPN:user-name</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--cloned-mac-address" title="The “cloned-mac-address†property">NMSettingWired:cloned-mac-address</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingVPN.html#NMSettingVPNClass" title="NMSettingVPNClass">NMSettingVPNClass</a>, struct in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--duplex" title="The “duplex†property">NMSettingWired:duplex</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingVPN.html#NMSettingVpnError-enum" title="enum NMSettingVpnError">NMSettingVpnError</a>, enum in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title="The “mac-address†property">NMSettingWired:mac-address</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWimax.html#NMSettingWimax-struct" title="NMSettingWimax">NMSettingWimax</a>, struct in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--mac-address-blacklist" title="The “mac-address-blacklist†property">NMSettingWired:mac-address-blacklist</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWimax.html#NMSettingWimax--mac-address" title='The "mac-address" property'>NMSettingWimax:mac-address</a>, object property in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--mtu" title="The “mtu†property">NMSettingWired:mtu</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWimax.html#NMSettingWimax--network-name" title='The "network-name" property'>NMSettingWimax:network-name</a>, object property in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--port" title="The “port†property">NMSettingWired:port</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWimax.html#NMSettingWimaxClass" title="NMSettingWimaxClass">NMSettingWimaxClass</a>, struct in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--s390-nettype" title="The “s390-nettype†property">NMSettingWired:s390-nettype</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWimax.html#NMSettingWimaxError-enum" title="enum NMSettingWimaxError">NMSettingWimaxError</a>, enum in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--s390-options" title="The “s390-options†property">NMSettingWired:s390-options</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired-struct" title="NMSettingWired">NMSettingWired</a>, struct in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--s390-subchannels" title="The “s390-subchannels†property">NMSettingWired:s390-subchannels</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--auto-negotiate" title='The "auto-negotiate" property'>NMSettingWired:auto-negotiate</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWired--speed" title="The “speed†property">NMSettingWired:speed</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--cloned-mac-address" title='The "cloned-mac-address" property'>NMSettingWired:cloned-mac-address</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#NMSettingWiredError" title="enum NMSettingWiredError">NMSettingWiredError</a>, enum in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--duplex" title='The "duplex" property'>NMSettingWired:duplex</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title="The “band†property">NMSettingWireless:band</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--mac-address" title='The "mac-address" property'>NMSettingWired:mac-address</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--bssid" title="The “bssid†property">NMSettingWireless:bssid</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--mac-address-blacklist" title='The "mac-address-blacklist" property'>NMSettingWired:mac-address-blacklist</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--channel" title="The “channel†property">NMSettingWireless:channel</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--mtu" title='The "mtu" property'>NMSettingWired:mtu</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--cloned-mac-address" title="The “cloned-mac-address†property">NMSettingWireless:cloned-mac-address</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--port" title='The "port" property'>NMSettingWired:port</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--hidden" title="The “hidden†property">NMSettingWireless:hidden</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--s390-nettype" title='The "s390-nettype" property'>NMSettingWired:s390-nettype</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address" title="The “mac-address†property">NMSettingWireless:mac-address</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--s390-options" title='The "s390-options" property'>NMSettingWired:s390-options</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist" title="The “mac-address-blacklist†property">NMSettingWireless:mac-address-blacklist</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--s390-subchannels" title='The "s390-subchannels" property'>NMSettingWired:s390-subchannels</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--mode" title="The “mode†property">NMSettingWireless:mode</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWired--speed" title='The "speed" property'>NMSettingWired:speed</a>, object property in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--mtu" title="The “mtu†property">NMSettingWireless:mtu</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWiredClass" title="NMSettingWiredClass">NMSettingWiredClass</a>, struct in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--rate" title="The “rate†property">NMSettingWireless:rate</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWired.html#NMSettingWiredError-enum" title="enum NMSettingWiredError">NMSettingWiredError</a>, enum in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--security" title="The “security†property">NMSettingWireless:security</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless-struct" title="NMSettingWireless">NMSettingWireless</a>, struct in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--seen-bssids" title="The “seen-bssids†property">NMSettingWireless:seen-bssids</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--band" title='The "band" property'>NMSettingWireless:band</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--ssid" title="The “ssid†property">NMSettingWireless:ssid</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--bssid" title='The "bssid" property'>NMSettingWireless:bssid</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWireless--tx-power" title="The “tx-power†property">NMSettingWireless:tx-power</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--channel" title='The "channel" property'>NMSettingWireless:channel</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#NMSettingWirelessError" title="enum NMSettingWirelessError">NMSettingWirelessError</a>, enum in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--cloned-mac-address" title='The "cloned-mac-address" property'>NMSettingWireless:cloned-mac-address</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg" title="The “auth-alg†property">NMSettingWirelessSecurity:auth-alg</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--hidden" title='The "hidden" property'>NMSettingWireless:hidden</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group" title="The “group†property">NMSettingWirelessSecurity:group</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address" title='The "mac-address" property'>NMSettingWireless:mac-address</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt" title="The “key-mgmt†property">NMSettingWirelessSecurity:key-mgmt</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist" title='The "mac-address-blacklist" property'>NMSettingWireless:mac-address-blacklist</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title="The “leap-password†property">NMSettingWirelessSecurity:leap-password</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--mode" title='The "mode" property'>NMSettingWireless:mode</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags" title="The “leap-password-flags†property">NMSettingWirelessSecurity:leap-password-flags</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--mtu" title='The "mtu" property'>NMSettingWireless:mtu</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username" title="The “leap-username†property">NMSettingWirelessSecurity:leap-username</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--rate" title='The "rate" property'>NMSettingWireless:rate</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise" title="The “pairwise†property">NMSettingWirelessSecurity:pairwise</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--security" title='The "security" property'>NMSettingWireless:security</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto" title="The “proto†property">NMSettingWirelessSecurity:proto</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--seen-bssids" title='The "seen-bssids" property'>NMSettingWireless:seen-bssids</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title="The “psk†property">NMSettingWirelessSecurity:psk</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--ssid" title='The "ssid" property'>NMSettingWireless:ssid</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags" title="The “psk-flags†property">NMSettingWirelessSecurity:psk-flags</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWireless--tx-power" title='The "tx-power" property'>NMSettingWireless:tx-power</a>, object property in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags" title="The “wep-key-flags†property">NMSettingWirelessSecurity:wep-key-flags</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWirelessClass" title="NMSettingWirelessClass">NMSettingWirelessClass</a>, struct in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title="The “wep-key-type†property">NMSettingWirelessSecurity:wep-key-type</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWireless.html#NMSettingWirelessError-enum" title="enum NMSettingWirelessError">NMSettingWirelessError</a>, enum in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0" title="The “wep-key0†property">NMSettingWirelessSecurity:wep-key0</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity-struct" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>, struct in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1" title="The “wep-key1†property">NMSettingWirelessSecurity:wep-key1</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg" title='The "auth-alg" property'>NMSettingWirelessSecurity:auth-alg</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2" title="The “wep-key2†property">NMSettingWirelessSecurity:wep-key2</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group" title='The "group" property'>NMSettingWirelessSecurity:group</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3" title="The “wep-key3†property">NMSettingWirelessSecurity:wep-key3</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt" title='The "key-mgmt" property'>NMSettingWirelessSecurity:key-mgmt</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx" title="The “wep-tx-keyidx†property">NMSettingWirelessSecurity:wep-tx-keyidx</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password" title='The "leap-password" property'>NMSettingWirelessSecurity:leap-password</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError" title="enum NMSettingWirelessSecurityError">NMSettingWirelessSecurityError</a>, enum in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags" title='The "leap-password-flags" property'>NMSettingWirelessSecurity:leap-password-flags</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match" title="nm_setting_802_1x_add_altsubject_match ()">nm_setting_802_1x_add_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username" title='The "leap-username" property'>NMSettingWirelessSecurity:leap-username</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-eap-method" title="nm_setting_802_1x_add_eap_method ()">nm_setting_802_1x_add_eap_method</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise" title='The "pairwise" property'>NMSettingWirelessSecurity:pairwise</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match" title="nm_setting_802_1x_add_phase2_altsubject_match ()">nm_setting_802_1x_add_phase2_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto" title='The "proto" property'>NMSettingWirelessSecurity:proto</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title='The "psk" property'>NMSettingWirelessSecurity:psk</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags" title='The "psk-flags" property'>NMSettingWirelessSecurity:psk-flags</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags" title='The "wep-key-flags" property'>NMSettingWirelessSecurity:wep-key-flags</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type" title='The "wep-key-type" property'>NMSettingWirelessSecurity:wep-key-type</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0" title='The "wep-key0" property'>NMSettingWirelessSecurity:wep-key0</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1" title='The "wep-key1" property'>NMSettingWirelessSecurity:wep-key1</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2" title='The "wep-key2" property'>NMSettingWirelessSecurity:wep-key2</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3" title='The "wep-key3" property'>NMSettingWirelessSecurity:wep-key3</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx" title='The "wep-tx-keyidx" property'>NMSettingWirelessSecurity:wep-tx-keyidx</a>, object property in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityClass" title="NMSettingWirelessSecurityClass">NMSettingWirelessSecurityClass</a>, struct in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError-enum" title="enum NMSettingWirelessSecurityError">NMSettingWirelessSecurityError</a>, enum in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match" title="nm_setting_802_1x_add_altsubject_match ()">nm_setting_802_1x_add_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-eap-method" title="nm_setting_802_1x_add_eap_method ()">nm_setting_802_1x_add_eap_method</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match" title="nm_setting_802_1x_add_phase2_altsubject_match ()">nm_setting_802_1x_add_phase2_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
@@ -1388,15 +1781,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches" title="nm_setting_802_1x_clear_altsubject_matches ()">nm_setting_802_1x_clear_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches" title="nm_setting_802_1x_clear_altsubject_matches ()">nm_setting_802_1x_clear_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods" title="nm_setting_802_1x_clear_eap_methods ()">nm_setting_802_1x_clear_eap_methods</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods" title="nm_setting_802_1x_clear_eap_methods ()">nm_setting_802_1x_clear_eap_methods</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches" title="nm_setting_802_1x_clear_phase2_altsubject_matches ()">nm_setting_802_1x_clear_phase2_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches" title="nm_setting_802_1x_clear_phase2_altsubject_matches ()">nm_setting_802_1x_clear_phase2_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
@@ -1412,203 +1805,203 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-error-quark" title="nm_setting_802_1x_error_quark ()">nm_setting_802_1x_error_quark</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-error-quark" title="nm_setting_802_1x_error_quark ()">nm_setting_802_1x_error_quark</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match" title="nm_setting_802_1x_get_altsubject_match ()">nm_setting_802_1x_get_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match" title="nm_setting_802_1x_get_altsubject_match ()">nm_setting_802_1x_get_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity" title="nm_setting_802_1x_get_anonymous_identity ()">nm_setting_802_1x_get_anonymous_identity</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity" title="nm_setting_802_1x_get_anonymous_identity ()">nm_setting_802_1x_get_anonymous_identity</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()">nm_setting_802_1x_get_ca_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob" title="nm_setting_802_1x_get_ca_cert_blob ()">nm_setting_802_1x_get_ca_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()">nm_setting_802_1x_get_ca_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()">nm_setting_802_1x_get_ca_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-scheme" title="nm_setting_802_1x_get_ca_cert_scheme ()">nm_setting_802_1x_get_ca_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-scheme" title="nm_setting_802_1x_get_ca_cert_scheme ()">nm_setting_802_1x_get_ca_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-path" title="nm_setting_802_1x_get_ca_path ()">nm_setting_802_1x_get_ca_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-path" title="nm_setting_802_1x_get_ca_path ()">nm_setting_802_1x_get_ca_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()">nm_setting_802_1x_get_client_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob" title="nm_setting_802_1x_get_client_cert_blob ()">nm_setting_802_1x_get_client_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()">nm_setting_802_1x_get_client_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()">nm_setting_802_1x_get_client_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme" title="nm_setting_802_1x_get_client_cert_scheme ()">nm_setting_802_1x_get_client_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme" title="nm_setting_802_1x_get_client_cert_scheme ()">nm_setting_802_1x_get_client_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-eap-method" title="nm_setting_802_1x_get_eap_method ()">nm_setting_802_1x_get_eap_method</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-eap-method" title="nm_setting_802_1x_get_eap_method ()">nm_setting_802_1x_get_eap_method</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-identity" title="nm_setting_802_1x_get_identity ()">nm_setting_802_1x_get_identity</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-identity" title="nm_setting_802_1x_get_identity ()">nm_setting_802_1x_get_identity</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-altsubject-matches" title="nm_setting_802_1x_get_num_altsubject_matches ()">nm_setting_802_1x_get_num_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-altsubject-matches" title="nm_setting_802_1x_get_num_altsubject_matches ()">nm_setting_802_1x_get_num_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods" title="nm_setting_802_1x_get_num_eap_methods ()">nm_setting_802_1x_get_num_eap_methods</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods" title="nm_setting_802_1x_get_num_eap_methods ()">nm_setting_802_1x_get_num_eap_methods</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-phase2-altsubject-matches" title="nm_setting_802_1x_get_num_phase2_altsubject_matches ()">nm_setting_802_1x_get_num_phase2_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-num-phase2-altsubject-matches" title="nm_setting_802_1x_get_num_phase2_altsubject_matches ()">nm_setting_802_1x_get_num_phase2_altsubject_matches</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pac-file" title="nm_setting_802_1x_get_pac_file ()">nm_setting_802_1x_get_pac_file</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pac-file" title="nm_setting_802_1x_get_pac_file ()">nm_setting_802_1x_get_pac_file</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password" title="nm_setting_802_1x_get_password ()">nm_setting_802_1x_get_password</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password" title="nm_setting_802_1x_get_password ()">nm_setting_802_1x_get_password</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-flags" title="nm_setting_802_1x_get_password_flags ()">nm_setting_802_1x_get_password_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-flags" title="nm_setting_802_1x_get_password_flags ()">nm_setting_802_1x_get_password_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw" title="nm_setting_802_1x_get_password_raw ()">nm_setting_802_1x_get_password_raw</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw" title="nm_setting_802_1x_get_password_raw ()">nm_setting_802_1x_get_password_raw</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw-flags" title="nm_setting_802_1x_get_password_raw_flags ()">nm_setting_802_1x_get_password_raw_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-password-raw-flags" title="nm_setting_802_1x_get_password_raw_flags ()">nm_setting_802_1x_get_password_raw_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-fast-provisioning" title="nm_setting_802_1x_get_phase1_fast_provisioning ()">nm_setting_802_1x_get_phase1_fast_provisioning</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-fast-provisioning" title="nm_setting_802_1x_get_phase1_fast_provisioning ()">nm_setting_802_1x_get_phase1_fast_provisioning</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peaplabel" title="nm_setting_802_1x_get_phase1_peaplabel ()">nm_setting_802_1x_get_phase1_peaplabel</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peaplabel" title="nm_setting_802_1x_get_phase1_peaplabel ()">nm_setting_802_1x_get_phase1_peaplabel</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peapver" title="nm_setting_802_1x_get_phase1_peapver ()">nm_setting_802_1x_get_phase1_peapver</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peapver" title="nm_setting_802_1x_get_phase1_peapver ()">nm_setting_802_1x_get_phase1_peapver</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match" title="nm_setting_802_1x_get_phase2_altsubject_match ()">nm_setting_802_1x_get_phase2_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match" title="nm_setting_802_1x_get_phase2_altsubject_match ()">nm_setting_802_1x_get_phase2_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-auth" title="nm_setting_802_1x_get_phase2_auth ()">nm_setting_802_1x_get_phase2_auth</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-auth" title="nm_setting_802_1x_get_phase2_auth ()">nm_setting_802_1x_get_phase2_auth</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-autheap" title="nm_setting_802_1x_get_phase2_autheap ()">nm_setting_802_1x_get_phase2_autheap</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-autheap" title="nm_setting_802_1x_get_phase2_autheap ()">nm_setting_802_1x_get_phase2_autheap</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-blob" title="nm_setting_802_1x_get_phase2_ca_cert_blob ()">nm_setting_802_1x_get_phase2_ca_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-blob" title="nm_setting_802_1x_get_phase2_ca_cert_blob ()">nm_setting_802_1x_get_phase2_ca_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-path" title="nm_setting_802_1x_get_phase2_ca_cert_path ()">nm_setting_802_1x_get_phase2_ca_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-path" title="nm_setting_802_1x_get_phase2_ca_cert_path ()">nm_setting_802_1x_get_phase2_ca_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-scheme" title="nm_setting_802_1x_get_phase2_ca_cert_scheme ()">nm_setting_802_1x_get_phase2_ca_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-scheme" title="nm_setting_802_1x_get_phase2_ca_cert_scheme ()">nm_setting_802_1x_get_phase2_ca_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-path" title="nm_setting_802_1x_get_phase2_ca_path ()">nm_setting_802_1x_get_phase2_ca_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-path" title="nm_setting_802_1x_get_phase2_ca_path ()">nm_setting_802_1x_get_phase2_ca_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob" title="nm_setting_802_1x_get_phase2_client_cert_blob ()">nm_setting_802_1x_get_phase2_client_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob" title="nm_setting_802_1x_get_phase2_client_cert_blob ()">nm_setting_802_1x_get_phase2_client_cert_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-path" title="nm_setting_802_1x_get_phase2_client_cert_path ()">nm_setting_802_1x_get_phase2_client_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-path" title="nm_setting_802_1x_get_phase2_client_cert_path ()">nm_setting_802_1x_get_phase2_client_cert_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme" title="nm_setting_802_1x_get_phase2_client_cert_scheme ()">nm_setting_802_1x_get_phase2_client_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme" title="nm_setting_802_1x_get_phase2_client_cert_scheme ()">nm_setting_802_1x_get_phase2_client_cert_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-blob" title="nm_setting_802_1x_get_phase2_private_key_blob ()">nm_setting_802_1x_get_phase2_private_key_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-blob" title="nm_setting_802_1x_get_phase2_private_key_blob ()">nm_setting_802_1x_get_phase2_private_key_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format" title="nm_setting_802_1x_get_phase2_private_key_format ()">nm_setting_802_1x_get_phase2_private_key_format</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format" title="nm_setting_802_1x_get_phase2_private_key_format ()">nm_setting_802_1x_get_phase2_private_key_format</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password" title="nm_setting_802_1x_get_phase2_private_key_password ()">nm_setting_802_1x_get_phase2_private_key_password</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password" title="nm_setting_802_1x_get_phase2_private_key_password ()">nm_setting_802_1x_get_phase2_private_key_password</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password-flags" title="nm_setting_802_1x_get_phase2_private_key_password_flags ()">nm_setting_802_1x_get_phase2_private_key_password_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password-flags" title="nm_setting_802_1x_get_phase2_private_key_password_flags ()">nm_setting_802_1x_get_phase2_private_key_password_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-path" title="nm_setting_802_1x_get_phase2_private_key_path ()">nm_setting_802_1x_get_phase2_private_key_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-path" title="nm_setting_802_1x_get_phase2_private_key_path ()">nm_setting_802_1x_get_phase2_private_key_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-scheme" title="nm_setting_802_1x_get_phase2_private_key_scheme ()">nm_setting_802_1x_get_phase2_private_key_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-scheme" title="nm_setting_802_1x_get_phase2_private_key_scheme ()">nm_setting_802_1x_get_phase2_private_key_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-subject-match" title="nm_setting_802_1x_get_phase2_subject_match ()">nm_setting_802_1x_get_phase2_subject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-phase2-subject-match" title="nm_setting_802_1x_get_phase2_subject_match ()">nm_setting_802_1x_get_phase2_subject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin" title="nm_setting_802_1x_get_pin ()">nm_setting_802_1x_get_pin</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin" title="nm_setting_802_1x_get_pin ()">nm_setting_802_1x_get_pin</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin-flags" title="nm_setting_802_1x_get_pin_flags ()">nm_setting_802_1x_get_pin_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-pin-flags" title="nm_setting_802_1x_get_pin_flags ()">nm_setting_802_1x_get_pin_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-blob" title="nm_setting_802_1x_get_private_key_blob ()">nm_setting_802_1x_get_private_key_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-blob" title="nm_setting_802_1x_get_private_key_blob ()">nm_setting_802_1x_get_private_key_blob</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-format" title="nm_setting_802_1x_get_private_key_format ()">nm_setting_802_1x_get_private_key_format</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-format" title="nm_setting_802_1x_get_private_key_format ()">nm_setting_802_1x_get_private_key_format</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password" title="nm_setting_802_1x_get_private_key_password ()">nm_setting_802_1x_get_private_key_password</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password" title="nm_setting_802_1x_get_private_key_password ()">nm_setting_802_1x_get_private_key_password</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password-flags" title="nm_setting_802_1x_get_private_key_password_flags ()">nm_setting_802_1x_get_private_key_password_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password-flags" title="nm_setting_802_1x_get_private_key_password_flags ()">nm_setting_802_1x_get_private_key_password_flags</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-path" title="nm_setting_802_1x_get_private_key_path ()">nm_setting_802_1x_get_private_key_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-path" title="nm_setting_802_1x_get_private_key_path ()">nm_setting_802_1x_get_private_key_path</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-scheme" title="nm_setting_802_1x_get_private_key_scheme ()">nm_setting_802_1x_get_private_key_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-scheme" title="nm_setting_802_1x_get_private_key_scheme ()">nm_setting_802_1x_get_private_key_scheme</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-subject-match" title="nm_setting_802_1x_get_subject_match ()">nm_setting_802_1x_get_subject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-subject-match" title="nm_setting_802_1x_get_subject_match ()">nm_setting_802_1x_get_subject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-system-ca-certs" title="nm_setting_802_1x_get_system_ca_certs ()">nm_setting_802_1x_get_system_ca_certs</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-system-ca-certs" title="nm_setting_802_1x_get_system_ca_certs ()">nm_setting_802_1x_get_system_ca_certs</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
@@ -1616,7 +2009,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-new" title="nm_setting_802_1x_new ()">nm_setting_802_1x_new</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-new" title="nm_setting_802_1x_new ()">nm_setting_802_1x_new</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
@@ -1712,15 +2105,27 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match" title="nm_setting_802_1x_remove_altsubject_match ()">nm_setting_802_1x_remove_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match" title="nm_setting_802_1x_remove_altsubject_match ()">nm_setting_802_1x_remove_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method" title="nm_setting_802_1x_remove_eap_method ()">nm_setting_802_1x_remove_eap_method</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match-by-value" title="nm_setting_802_1x_remove_altsubject_match_by_value ()">nm_setting_802_1x_remove_altsubject_match_by_value</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match" title="nm_setting_802_1x_remove_phase2_altsubject_match ()">nm_setting_802_1x_remove_phase2_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method" title="nm_setting_802_1x_remove_eap_method ()">nm_setting_802_1x_remove_eap_method</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method-by-value" title="nm_setting_802_1x_remove_eap_method_by_value ()">nm_setting_802_1x_remove_eap_method_by_value</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match" title="nm_setting_802_1x_remove_phase2_altsubject_match ()">nm_setting_802_1x_remove_phase2_altsubject_match</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match-by-value" title="nm_setting_802_1x_remove_phase2_altsubject_match_by_value ()">nm_setting_802_1x_remove_phase2_altsubject_match_by_value</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
@@ -1728,27 +2133,27 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert" title="nm_setting_802_1x_set_ca_cert ()">nm_setting_802_1x_set_ca_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert" title="nm_setting_802_1x_set_ca_cert ()">nm_setting_802_1x_set_ca_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-client-cert" title="nm_setting_802_1x_set_client_cert ()">nm_setting_802_1x_set_client_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-client-cert" title="nm_setting_802_1x_set_client_cert ()">nm_setting_802_1x_set_client_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert" title="nm_setting_802_1x_set_phase2_ca_cert ()">nm_setting_802_1x_set_phase2_ca_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert" title="nm_setting_802_1x_set_phase2_ca_cert ()">nm_setting_802_1x_set_phase2_ca_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert" title="nm_setting_802_1x_set_phase2_client_cert ()">nm_setting_802_1x_set_phase2_client_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert" title="nm_setting_802_1x_set_phase2_client_cert ()">nm_setting_802_1x_set_phase2_client_cert</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()">nm_setting_802_1x_set_phase2_private_key</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()">nm_setting_802_1x_set_phase2_private_key</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()">nm_setting_802_1x_set_private_key</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+<a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()">nm_setting_802_1x_set_private_key</a>, function in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
</dt>
<dd></dd>
<dt>
@@ -1776,39 +2181,39 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-error-quark" title="nm_setting_adsl_error_quark ()">nm_setting_adsl_error_quark</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-error-quark" title="nm_setting_adsl_error_quark ()">nm_setting_adsl_error_quark</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-encapsulation" title="nm_setting_adsl_get_encapsulation ()">nm_setting_adsl_get_encapsulation</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-encapsulation" title="nm_setting_adsl_get_encapsulation ()">nm_setting_adsl_get_encapsulation</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password" title="nm_setting_adsl_get_password ()">nm_setting_adsl_get_password</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password" title="nm_setting_adsl_get_password ()">nm_setting_adsl_get_password</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password-flags" title="nm_setting_adsl_get_password_flags ()">nm_setting_adsl_get_password_flags</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-password-flags" title="nm_setting_adsl_get_password_flags ()">nm_setting_adsl_get_password_flags</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-protocol" title="nm_setting_adsl_get_protocol ()">nm_setting_adsl_get_protocol</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-protocol" title="nm_setting_adsl_get_protocol ()">nm_setting_adsl_get_protocol</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-username" title="nm_setting_adsl_get_username ()">nm_setting_adsl_get_username</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-username" title="nm_setting_adsl_get_username ()">nm_setting_adsl_get_username</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vci" title="nm_setting_adsl_get_vci ()">nm_setting_adsl_get_vci</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vci" title="nm_setting_adsl_get_vci ()">nm_setting_adsl_get_vci</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vpi" title="nm_setting_adsl_get_vpi ()">nm_setting_adsl_get_vpi</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-get-vpi" title="nm_setting_adsl_get_vpi ()">nm_setting_adsl_get_vpi</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-new" title="nm_setting_adsl_new ()">nm_setting_adsl_new</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+<a class="link" href="NMSettingAdsl.html#nm-setting-adsl-new" title="nm_setting_adsl_new ()">nm_setting_adsl_new</a>, function in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
</dt>
<dd></dd>
<dt>
@@ -1860,19 +2265,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-error-quark" title="nm_setting_bluetooth_error_quark ()">nm_setting_bluetooth_error_quark</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-error-quark" title="nm_setting_bluetooth_error_quark ()">nm_setting_bluetooth_error_quark</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr" title="nm_setting_bluetooth_get_bdaddr ()">nm_setting_bluetooth_get_bdaddr</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr" title="nm_setting_bluetooth_get_bdaddr ()">nm_setting_bluetooth_get_bdaddr</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type" title="nm_setting_bluetooth_get_connection_type ()">nm_setting_bluetooth_get_connection_type</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type" title="nm_setting_bluetooth_get_connection_type ()">nm_setting_bluetooth_get_connection_type</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-new" title="nm_setting_bluetooth_new ()">nm_setting_bluetooth_new</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+<a class="link" href="NMSettingBluetooth.html#nm-setting-bluetooth-new" title="nm_setting_bluetooth_new ()">nm_setting_bluetooth_new</a>, function in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
</dt>
<dd></dd>
<dt>
@@ -1892,7 +2297,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-add-option" title="nm_setting_bond_add_option ()">nm_setting_bond_add_option</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-add-option" title="nm_setting_bond_add_option ()">nm_setting_bond_add_option</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
@@ -1900,31 +2305,31 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-error-quark" title="nm_setting_bond_error_quark ()">nm_setting_bond_error_quark</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-error-quark" title="nm_setting_bond_error_quark ()">nm_setting_bond_error_quark</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-interface-name" title="nm_setting_bond_get_interface_name ()">nm_setting_bond_get_interface_name</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-get-interface-name" title="nm_setting_bond_get_interface_name ()">nm_setting_bond_get_interface_name</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-num-options" title="nm_setting_bond_get_num_options ()">nm_setting_bond_get_num_options</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-get-num-options" title="nm_setting_bond_get_num_options ()">nm_setting_bond_get_num_options</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option" title="nm_setting_bond_get_option ()">nm_setting_bond_get_option</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option" title="nm_setting_bond_get_option ()">nm_setting_bond_get_option</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-by-name" title="nm_setting_bond_get_option_by_name ()">nm_setting_bond_get_option_by_name</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-by-name" title="nm_setting_bond_get_option_by_name ()">nm_setting_bond_get_option_by_name</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-default" title="nm_setting_bond_get_option_default ()">nm_setting_bond_get_option_default</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-get-option-default" title="nm_setting_bond_get_option_default ()">nm_setting_bond_get_option_default</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-get-valid-options" title="nm_setting_bond_get_valid_options ()">nm_setting_bond_get_valid_options</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-get-valid-options" title="nm_setting_bond_get_valid_options ()">nm_setting_bond_get_valid_options</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
@@ -1932,7 +2337,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-new" title="nm_setting_bond_new ()">nm_setting_bond_new</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-new" title="nm_setting_bond_new ()">nm_setting_bond_new</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
@@ -1940,6 +2345,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-AD-SELECT:CAPS" title="NM_SETTING_BOND_OPTION_AD_SELECT">NM_SETTING_BOND_OPTION_AD_SELECT</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS" title="NM_SETTING_BOND_OPTION_ARP_INTERVAL">NM_SETTING_BOND_OPTION_ARP_INTERVAL</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
@@ -1948,10 +2357,18 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS" title="NM_SETTING_BOND_OPTION_ARP_VALIDATE">NM_SETTING_BOND_OPTION_ARP_VALIDATE</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS" title="NM_SETTING_BOND_OPTION_DOWNDELAY">NM_SETTING_BOND_OPTION_DOWNDELAY</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS" title="NM_SETTING_BOND_OPTION_FAIL_OVER_MAC">NM_SETTING_BOND_OPTION_FAIL_OVER_MAC</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-MIIMON:CAPS" title="NM_SETTING_BOND_OPTION_MIIMON">NM_SETTING_BOND_OPTION_MIIMON</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
@@ -1960,11 +2377,31 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY:CAPS" title="NM_SETTING_BOND_OPTION_PRIMARY">NM_SETTING_BOND_OPTION_PRIMARY</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS" title="NM_SETTING_BOND_OPTION_PRIMARY_RESELECT">NM_SETTING_BOND_OPTION_PRIMARY_RESELECT</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS" title="NM_SETTING_BOND_OPTION_RESEND_IGMP">NM_SETTING_BOND_OPTION_RESEND_IGMP</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-UPDELAY:CAPS" title="NM_SETTING_BOND_OPTION_UPDELAY">NM_SETTING_BOND_OPTION_UPDELAY</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBond.html#nm-setting-bond-remove-option" title="nm_setting_bond_remove_option ()">nm_setting_bond_remove_option</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS" title="NM_SETTING_BOND_OPTION_USE_CARRIER">NM_SETTING_BOND_OPTION_USE_CARRIER</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS" title="NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY">NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY</a>, macro in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-remove-option" title="nm_setting_bond_remove_option ()">nm_setting_bond_remove_option</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
</dt>
<dd></dd>
<dt>
@@ -1972,6 +2409,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingBond.html#nm-setting-bond-validate-option" title="nm_setting_bond_validate_option ()">nm_setting_bond_validate_option</a>, function in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-AGEING-TIME:CAPS" title="NM_SETTING_BRIDGE_AGEING_TIME">NM_SETTING_BRIDGE_AGEING_TIME</a>, macro in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
@@ -1980,7 +2421,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-error-quark" title="nm_setting_bridge_error_quark ()">nm_setting_bridge_error_quark</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-error-quark" title="nm_setting_bridge_error_quark ()">nm_setting_bridge_error_quark</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
@@ -1988,31 +2429,35 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-ageing-time" title="nm_setting_bridge_get_ageing_time ()">nm_setting_bridge_get_ageing_time</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-ageing-time" title="nm_setting_bridge_get_ageing_time ()">nm_setting_bridge_get_ageing_time</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-forward-delay" title="nm_setting_bridge_get_forward_delay ()">nm_setting_bridge_get_forward_delay</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-forward-delay" title="nm_setting_bridge_get_forward_delay ()">nm_setting_bridge_get_forward_delay</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-hello-time" title="nm_setting_bridge_get_hello_time ()">nm_setting_bridge_get_hello_time</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-hello-time" title="nm_setting_bridge_get_hello_time ()">nm_setting_bridge_get_hello_time</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-interface-name" title="nm_setting_bridge_get_interface_name ()">nm_setting_bridge_get_interface_name</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-interface-name" title="nm_setting_bridge_get_interface_name ()">nm_setting_bridge_get_interface_name</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-max-age" title="nm_setting_bridge_get_max_age ()">nm_setting_bridge_get_max_age</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-mac-address" title="nm_setting_bridge_get_mac_address ()">nm_setting_bridge_get_mac_address</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-priority" title="nm_setting_bridge_get_priority ()">nm_setting_bridge_get_priority</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-max-age" title="nm_setting_bridge_get_max_age ()">nm_setting_bridge_get_max_age</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-stp" title="nm_setting_bridge_get_stp ()">nm_setting_bridge_get_stp</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-priority" title="nm_setting_bridge_get_priority ()">nm_setting_bridge_get_priority</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-get-stp" title="nm_setting_bridge_get_stp ()">nm_setting_bridge_get_stp</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
@@ -2024,11 +2469,15 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS" title="NM_SETTING_BRIDGE_MAC_ADDRESS">NM_SETTING_BRIDGE_MAC_ADDRESS</a>, macro in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-MAX-AGE:CAPS" title="NM_SETTING_BRIDGE_MAX_AGE">NM_SETTING_BRIDGE_MAX_AGE</a>, macro in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridge.html#nm-setting-bridge-new" title="nm_setting_bridge_new ()">nm_setting_bridge_new</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+<a class="link" href="NMSettingBridge.html#nm-setting-bridge-new" title="nm_setting_bridge_new ()">nm_setting_bridge_new</a>, function in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
</dt>
<dd></dd>
<dt>
@@ -2036,19 +2485,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-error-quark" title="nm_setting_bridge_port_error_quark ()">nm_setting_bridge_port_error_quark</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-error-quark" title="nm_setting_bridge_port_error_quark ()">nm_setting_bridge_port_error_quark</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode" title="nm_setting_bridge_port_get_hairpin_mode ()">nm_setting_bridge_port_get_hairpin_mode</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode" title="nm_setting_bridge_port_get_hairpin_mode ()">nm_setting_bridge_port_get_hairpin_mode</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost" title="nm_setting_bridge_port_get_path_cost ()">nm_setting_bridge_port_get_path_cost</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost" title="nm_setting_bridge_port_get_path_cost ()">nm_setting_bridge_port_get_path_cost</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-priority" title="nm_setting_bridge_port_get_priority ()">nm_setting_bridge_port_get_priority</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-get-priority" title="nm_setting_bridge_port_get_priority ()">nm_setting_bridge_port_get_priority</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
@@ -2056,7 +2505,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-new" title="nm_setting_bridge_port_new ()">nm_setting_bridge_port_new</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+<a class="link" href="NMSettingBridgePort.html#nm-setting-bridge-port-new" title="nm_setting_bridge_port_new ()">nm_setting_bridge_port_new</a>, function in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
</dt>
<dd></dd>
<dt>
@@ -2088,27 +2537,27 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-error-quark" title="nm_setting_cdma_error_quark ()">nm_setting_cdma_error_quark</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#nm-setting-cdma-error-quark" title="nm_setting_cdma_error_quark ()">nm_setting_cdma_error_quark</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-number" title="nm_setting_cdma_get_number ()">nm_setting_cdma_get_number</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-number" title="nm_setting_cdma_get_number ()">nm_setting_cdma_get_number</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password" title="nm_setting_cdma_get_password ()">nm_setting_cdma_get_password</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password" title="nm_setting_cdma_get_password ()">nm_setting_cdma_get_password</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password-flags" title="nm_setting_cdma_get_password_flags ()">nm_setting_cdma_get_password_flags</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-password-flags" title="nm_setting_cdma_get_password_flags ()">nm_setting_cdma_get_password_flags</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-username" title="nm_setting_cdma_get_username ()">nm_setting_cdma_get_username</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#nm-setting-cdma-get-username" title="nm_setting_cdma_get_username ()">nm_setting_cdma_get_username</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingCdma.html#nm-setting-cdma-new" title="nm_setting_cdma_new ()">nm_setting_cdma_new</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+<a class="link" href="NMSettingCdma.html#nm-setting-cdma-new" title="nm_setting_cdma_new ()">nm_setting_cdma_new</a>, function in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
</dt>
<dd></dd>
<dt>
@@ -2132,23 +2581,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-clear-secrets" title="nm_setting_clear_secrets ()">nm_setting_clear_secrets</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSetting.html#nm-setting-clear-secrets" title="nm_setting_clear_secrets ()">nm_setting_clear_secrets</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-clear-secrets-with-flags" title="nm_setting_clear_secrets_with_flags ()">nm_setting_clear_secrets_with_flags</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSetting.html#nm-setting-clear-secrets-with-flags" title="nm_setting_clear_secrets_with_flags ()">nm_setting_clear_secrets_with_flags</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()">nm_setting_compare</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()">nm_setting_compare</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-add-permission" title="nm_setting_connection_add_permission ()">nm_setting_connection_add_permission</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-add-permission" title="nm_setting_connection_add_permission ()">nm_setting_connection_add_permission</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-add-secondary" title="nm_setting_connection_add_secondary ()">nm_setting_connection_add_secondary</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-add-secondary" title="nm_setting_connection_add_secondary ()">nm_setting_connection_add_secondary</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
@@ -2160,59 +2609,71 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-error-quark" title="nm_setting_connection_error_quark ()">nm_setting_connection_error_quark</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-error-quark" title="nm_setting_connection_error_quark ()">nm_setting_connection_error_quark</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS" title="NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT">NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT</a>, macro in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-autoconnect" title="nm_setting_connection_get_autoconnect ()">nm_setting_connection_get_autoconnect</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-autoconnect" title="nm_setting_connection_get_autoconnect ()">nm_setting_connection_get_autoconnect</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-connection-type" title="nm_setting_connection_get_connection_type ()">nm_setting_connection_get_connection_type</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-connection-type" title="nm_setting_connection_get_connection_type ()">nm_setting_connection_get_connection_type</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-id" title="nm_setting_connection_get_id ()">nm_setting_connection_get_id</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-gateway-ping-timeout" title="nm_setting_connection_get_gateway_ping_timeout ()">nm_setting_connection_get_gateway_ping_timeout</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-master" title="nm_setting_connection_get_master ()">nm_setting_connection_get_master</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-id" title="nm_setting_connection_get_id ()">nm_setting_connection_get_id</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-permissions" title="nm_setting_connection_get_num_permissions ()">nm_setting_connection_get_num_permissions</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-interface-name" title="nm_setting_connection_get_interface_name ()">nm_setting_connection_get_interface_name</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-secondaries" title="nm_setting_connection_get_num_secondaries ()">nm_setting_connection_get_num_secondaries</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-master" title="nm_setting_connection_get_master ()">nm_setting_connection_get_master</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-permission" title="nm_setting_connection_get_permission ()">nm_setting_connection_get_permission</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-permissions" title="nm_setting_connection_get_num_permissions ()">nm_setting_connection_get_num_permissions</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-read-only" title="nm_setting_connection_get_read_only ()">nm_setting_connection_get_read_only</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-num-secondaries" title="nm_setting_connection_get_num_secondaries ()">nm_setting_connection_get_num_secondaries</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-secondary" title="nm_setting_connection_get_secondary ()">nm_setting_connection_get_secondary</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-permission" title="nm_setting_connection_get_permission ()">nm_setting_connection_get_permission</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-slave-type" title="nm_setting_connection_get_slave_type ()">nm_setting_connection_get_slave_type</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-read-only" title="nm_setting_connection_get_read_only ()">nm_setting_connection_get_read_only</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-timestamp" title="nm_setting_connection_get_timestamp ()">nm_setting_connection_get_timestamp</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-secondary" title="nm_setting_connection_get_secondary ()">nm_setting_connection_get_secondary</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-uuid" title="nm_setting_connection_get_uuid ()">nm_setting_connection_get_uuid</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-slave-type" title="nm_setting_connection_get_slave_type ()">nm_setting_connection_get_slave_type</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-zone" title="nm_setting_connection_get_zone ()">nm_setting_connection_get_zone</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-timestamp" title="nm_setting_connection_get_timestamp ()">nm_setting_connection_get_timestamp</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-uuid" title="nm_setting_connection_get_uuid ()">nm_setting_connection_get_uuid</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-zone" title="nm_setting_connection_get_zone ()">nm_setting_connection_get_zone</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
@@ -2220,7 +2681,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-is-slave-type" title="nm_setting_connection_is_slave_type ()">nm_setting_connection_is_slave_type</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS" title="NM_SETTING_CONNECTION_INTERFACE_NAME">NM_SETTING_CONNECTION_INTERFACE_NAME</a>, macro in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-is-slave-type" title="nm_setting_connection_is_slave_type ()">nm_setting_connection_is_slave_type</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
@@ -2228,7 +2693,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-new" title="nm_setting_connection_new ()">nm_setting_connection_new</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-new" title="nm_setting_connection_new ()">nm_setting_connection_new</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
@@ -2236,7 +2701,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-permissions-user-allowed" title="nm_setting_connection_permissions_user_allowed ()">nm_setting_connection_permissions_user_allowed</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-permissions-user-allowed" title="nm_setting_connection_permissions_user_allowed ()">nm_setting_connection_permissions_user_allowed</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
@@ -2244,11 +2709,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-permission" title="nm_setting_connection_remove_permission ()">nm_setting_connection_remove_permission</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-permission" title="nm_setting_connection_remove_permission ()">nm_setting_connection_remove_permission</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-permission-by-value" title="nm_setting_connection_remove_permission_by_value ()">nm_setting_connection_remove_permission_by_value</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-secondary" title="nm_setting_connection_remove_secondary ()">nm_setting_connection_remove_secondary</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-secondary" title="nm_setting_connection_remove_secondary ()">nm_setting_connection_remove_secondary</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-remove-secondary-by-value" title="nm_setting_connection_remove_secondary_by_value ()">nm_setting_connection_remove_secondary_by_value</a>, function in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
</dt>
<dd></dd>
<dt>
@@ -2280,15 +2753,183 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()">nm_setting_diff</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS" title="NM_SETTING_DCB_APP_FCOE_FLAGS">NM_SETTING_DCB_APP_FCOE_FLAGS</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-MODE:CAPS" title="NM_SETTING_DCB_APP_FCOE_MODE">NM_SETTING_DCB_APP_FCOE_MODE</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS" title="NM_SETTING_DCB_APP_FCOE_PRIORITY">NM_SETTING_DCB_APP_FCOE_PRIORITY</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-FLAGS:CAPS" title="NM_SETTING_DCB_APP_FIP_FLAGS">NM_SETTING_DCB_APP_FIP_FLAGS</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS" title="NM_SETTING_DCB_APP_FIP_PRIORITY">NM_SETTING_DCB_APP_FIP_PRIORITY</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS" title="NM_SETTING_DCB_APP_ISCSI_FLAGS">NM_SETTING_DCB_APP_ISCSI_FLAGS</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS" title="NM_SETTING_DCB_APP_ISCSI_PRIORITY">NM_SETTING_DCB_APP_ISCSI_PRIORITY</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-ERROR:CAPS" title="NM_SETTING_DCB_ERROR">NM_SETTING_DCB_ERROR</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-error-quark" title="nm_setting_dcb_error_quark ()">nm_setting_dcb_error_quark</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS" title="NM_SETTING_DCB_FCOE_MODE_FABRIC">NM_SETTING_DCB_FCOE_MODE_FABRIC</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS" title="NM_SETTING_DCB_FCOE_MODE_VN2VN">NM_SETTING_DCB_FCOE_MODE_VN2VN</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-flags" title="nm_setting_dcb_get_app_fcoe_flags ()">nm_setting_dcb_get_app_fcoe_flags</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-mode" title="nm_setting_dcb_get_app_fcoe_mode ()">nm_setting_dcb_get_app_fcoe_mode</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-priority" title="nm_setting_dcb_get_app_fcoe_priority ()">nm_setting_dcb_get_app_fcoe_priority</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fip-flags" title="nm_setting_dcb_get_app_fip_flags ()">nm_setting_dcb_get_app_fip_flags</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-fip-priority" title="nm_setting_dcb_get_app_fip_priority ()">nm_setting_dcb_get_app_fip_priority</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-flags" title="nm_setting_dcb_get_app_iscsi_flags ()">nm_setting_dcb_get_app_iscsi_flags</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-priority" title="nm_setting_dcb_get_app_iscsi_priority ()">nm_setting_dcb_get_app_iscsi_priority</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-bandwidth" title="nm_setting_dcb_get_priority_bandwidth ()">nm_setting_dcb_get_priority_bandwidth</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control" title="nm_setting_dcb_get_priority_flow_control ()">nm_setting_dcb_get_priority_flow_control</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control-flags" title="nm_setting_dcb_get_priority_flow_control_flags ()">nm_setting_dcb_get_priority_flow_control_flags</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-group-bandwidth" title="nm_setting_dcb_get_priority_group_bandwidth ()">nm_setting_dcb_get_priority_group_bandwidth</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-group-flags" title="nm_setting_dcb_get_priority_group_flags ()">nm_setting_dcb_get_priority_group_flags</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-group-id" title="nm_setting_dcb_get_priority_group_id ()">nm_setting_dcb_get_priority_group_id</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-strict-bandwidth" title="nm_setting_dcb_get_priority_strict_bandwidth ()">nm_setting_dcb_get_priority_strict_bandwidth</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-get-priority-traffic-class" title="nm_setting_dcb_get_priority_traffic_class ()">nm_setting_dcb_get_priority_traffic_class</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-new" title="nm_setting_dcb_new ()">nm_setting_dcb_new</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS" title="NM_SETTING_DCB_PRIORITY_BANDWIDTH">NM_SETTING_DCB_PRIORITY_BANDWIDTH</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS" title="NM_SETTING_DCB_PRIORITY_FLOW_CONTROL">NM_SETTING_DCB_PRIORITY_FLOW_CONTROL</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS" title="NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS">NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS" title="NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH">NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS" title="NM_SETTING_DCB_PRIORITY_GROUP_FLAGS">NM_SETTING_DCB_PRIORITY_GROUP_FLAGS</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS" title="NM_SETTING_DCB_PRIORITY_GROUP_ID">NM_SETTING_DCB_PRIORITY_GROUP_ID</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-duplicate" title="nm_setting_duplicate ()">nm_setting_duplicate</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS" title="NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH">NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()">nm_setting_enumerate_values</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS" title="NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS">NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-SETTING-NAME:CAPS" title="NM_SETTING_DCB_SETTING_NAME">NM_SETTING_DCB_SETTING_NAME</a>, macro in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-bandwidth" title="nm_setting_dcb_set_priority_bandwidth ()">nm_setting_dcb_set_priority_bandwidth</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-flow-control" title="nm_setting_dcb_set_priority_flow_control ()">nm_setting_dcb_set_priority_flow_control</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-group-bandwidth" title="nm_setting_dcb_set_priority_group_bandwidth ()">nm_setting_dcb_set_priority_group_bandwidth</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-group-id" title="nm_setting_dcb_set_priority_group_id ()">nm_setting_dcb_set_priority_group_id</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-strict-bandwidth" title="nm_setting_dcb_set_priority_strict_bandwidth ()">nm_setting_dcb_set_priority_strict_bandwidth</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingDcb.html#nm-setting-dcb-set-priority-traffic-class" title="nm_setting_dcb_set_priority_traffic_class ()">nm_setting_dcb_set_priority_traffic_class</a>, function in <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()">nm_setting_diff</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-duplicate" title="nm_setting_duplicate ()">nm_setting_duplicate</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-enumerate-values" title="nm_setting_enumerate_values ()">nm_setting_enumerate_values</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
@@ -2296,19 +2937,35 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-error-quark" title="nm_setting_error_quark ()">nm_setting_error_quark</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSetting.html#nm-setting-error-quark" title="nm_setting_error_quark ()">nm_setting_error_quark</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-get-name" title="nm_setting_get_name ()">nm_setting_get_name</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR:CAPS" title="NM_SETTING_GENERIC_ERROR">NM_SETTING_GENERIC_ERROR</a>, macro in <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-get-secret-flags" title="nm_setting_get_secret_flags ()">nm_setting_get_secret_flags</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingGeneric.html#nm-setting-generic-error-quark" title="nm_setting_generic_error_quark ()">nm_setting_generic_error_quark</a>, function in <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-get-virtual-iface-name" title="nm_setting_get_virtual_iface_name ()">nm_setting_get_virtual_iface_name</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingGeneric.html#nm-setting-generic-new" title="nm_setting_generic_new ()">nm_setting_generic_new</a>, function in <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGeneric.html#NM-SETTING-GENERIC-SETTING-NAME:CAPS" title="NM_SETTING_GENERIC_SETTING_NAME">NM_SETTING_GENERIC_SETTING_NAME</a>, macro in <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-get-name" title="nm_setting_get_name ()">nm_setting_get_name</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-get-secret-flags" title="nm_setting_get_secret_flags ()">nm_setting_get_secret_flags</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-get-virtual-iface-name" title="nm_setting_get_virtual_iface_name ()">nm_setting_get_virtual_iface_name</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
@@ -2320,55 +2977,59 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-BANDS-MAX:CAPS" title="NM_SETTING_GSM_BANDS_MAX">NM_SETTING_GSM_BANDS_MAX</a>, macro in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-ERROR:CAPS" title="NM_SETTING_GSM_ERROR">NM_SETTING_GSM_ERROR</a>, macro in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-error-quark" title="nm_setting_gsm_error_quark ()">nm_setting_gsm_error_quark</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-error-quark" title="nm_setting_gsm_error_quark ()">nm_setting_gsm_error_quark</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-allowed-bands" title="nm_setting_gsm_get_allowed_bands ()">nm_setting_gsm_get_allowed_bands</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-allowed-bands" title="nm_setting_gsm_get_allowed_bands ()">nm_setting_gsm_get_allowed_bands</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-apn" title="nm_setting_gsm_get_apn ()">nm_setting_gsm_get_apn</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-apn" title="nm_setting_gsm_get_apn ()">nm_setting_gsm_get_apn</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-home-only" title="nm_setting_gsm_get_home_only ()">nm_setting_gsm_get_home_only</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-home-only" title="nm_setting_gsm_get_home_only ()">nm_setting_gsm_get_home_only</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-id" title="nm_setting_gsm_get_network_id ()">nm_setting_gsm_get_network_id</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-id" title="nm_setting_gsm_get_network_id ()">nm_setting_gsm_get_network_id</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-type" title="nm_setting_gsm_get_network_type ()">nm_setting_gsm_get_network_type</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-network-type" title="nm_setting_gsm_get_network_type ()">nm_setting_gsm_get_network_type</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-number" title="nm_setting_gsm_get_number ()">nm_setting_gsm_get_number</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-number" title="nm_setting_gsm_get_number ()">nm_setting_gsm_get_number</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password" title="nm_setting_gsm_get_password ()">nm_setting_gsm_get_password</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password" title="nm_setting_gsm_get_password ()">nm_setting_gsm_get_password</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password-flags" title="nm_setting_gsm_get_password_flags ()">nm_setting_gsm_get_password_flags</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-password-flags" title="nm_setting_gsm_get_password_flags ()">nm_setting_gsm_get_password_flags</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin" title="nm_setting_gsm_get_pin ()">nm_setting_gsm_get_pin</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin" title="nm_setting_gsm_get_pin ()">nm_setting_gsm_get_pin</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin-flags" title="nm_setting_gsm_get_pin_flags ()">nm_setting_gsm_get_pin_flags</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-pin-flags" title="nm_setting_gsm_get_pin_flags ()">nm_setting_gsm_get_pin_flags</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-username" title="nm_setting_gsm_get_username ()">nm_setting_gsm_get_username</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-get-username" title="nm_setting_gsm_get_username ()">nm_setting_gsm_get_username</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
@@ -2384,7 +3045,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingGsm.html#nm-setting-gsm-new" title="nm_setting_gsm_new ()">nm_setting_gsm_new</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+<a class="link" href="NMSettingGsm.html#nm-setting-gsm-new" title="nm_setting_gsm_new ()">nm_setting_gsm_new</a>, function in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
</dt>
<dd></dd>
<dt>
@@ -2420,19 +3081,27 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-error-quark" title="nm_setting_infiniband_error_quark ()">nm_setting_infiniband_error_quark</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-error-quark" title="nm_setting_infiniband_error_quark ()">nm_setting_infiniband_error_quark</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address" title="nm_setting_infiniband_get_mac_address ()">nm_setting_infiniband_get_mac_address</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mtu" title="nm_setting_infiniband_get_mtu ()">nm_setting_infiniband_get_mtu</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address" title="nm_setting_infiniband_get_mac_address ()">nm_setting_infiniband_get_mac_address</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-parent" title="nm_setting_infiniband_get_parent ()">nm_setting_infiniband_get_parent</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-mtu" title="nm_setting_infiniband_get_mtu ()">nm_setting_infiniband_get_mtu</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-p-key" title="nm_setting_infiniband_get_p_key ()">nm_setting_infiniband_get_p_key</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode" title="nm_setting_infiniband_get_transport_mode ()">nm_setting_infiniband_get_transport_mode</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode" title="nm_setting_infiniband_get_transport_mode ()">nm_setting_infiniband_get_transport_mode</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
@@ -2444,7 +3113,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-new" title="nm_setting_infiniband_new ()">nm_setting_infiniband_new</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-new" title="nm_setting_infiniband_new ()">nm_setting_infiniband_new</a>, function in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-PARENT:CAPS" title="NM_SETTING_INFINIBAND_PARENT">NM_SETTING_INFINIBAND_PARENT</a>, macro in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-P-KEY:CAPS" title="NM_SETTING_INFINIBAND_P_KEY">NM_SETTING_INFINIBAND_P_KEY</a>, macro in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
</dt>
<dd></dd>
<dt>
@@ -2460,35 +3137,35 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-address" title="nm_setting_ip4_config_add_address ()">nm_setting_ip4_config_add_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-address" title="nm_setting_ip4_config_add_address ()">nm_setting_ip4_config_add_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns" title="nm_setting_ip4_config_add_dns ()">nm_setting_ip4_config_add_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns" title="nm_setting_ip4_config_add_dns ()">nm_setting_ip4_config_add_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns-search" title="nm_setting_ip4_config_add_dns_search ()">nm_setting_ip4_config_add_dns_search</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns-search" title="nm_setting_ip4_config_add_dns_search ()">nm_setting_ip4_config_add_dns_search</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-route" title="nm_setting_ip4_config_add_route ()">nm_setting_ip4_config_add_route</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-add-route" title="nm_setting_ip4_config_add_route ()">nm_setting_ip4_config_add_route</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-addresses" title="nm_setting_ip4_config_clear_addresses ()">nm_setting_ip4_config_clear_addresses</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-addresses" title="nm_setting_ip4_config_clear_addresses ()">nm_setting_ip4_config_clear_addresses</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns" title="nm_setting_ip4_config_clear_dns ()">nm_setting_ip4_config_clear_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns" title="nm_setting_ip4_config_clear_dns ()">nm_setting_ip4_config_clear_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns-searches" title="nm_setting_ip4_config_clear_dns_searches ()">nm_setting_ip4_config_clear_dns_searches</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns-searches" title="nm_setting_ip4_config_clear_dns_searches ()">nm_setting_ip4_config_clear_dns_searches</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-routes" title="nm_setting_ip4_config_clear_routes ()">nm_setting_ip4_config_clear_routes</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-clear-routes" title="nm_setting_ip4_config_clear_routes ()">nm_setting_ip4_config_clear_routes</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
@@ -2516,71 +3193,71 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-error-quark" title="nm_setting_ip4_config_error_quark ()">nm_setting_ip4_config_error_quark</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-error-quark" title="nm_setting_ip4_config_error_quark ()">nm_setting_ip4_config_error_quark</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-address" title="nm_setting_ip4_config_get_address ()">nm_setting_ip4_config_get_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-address" title="nm_setting_ip4_config_get_address ()">nm_setting_ip4_config_get_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id" title="nm_setting_ip4_config_get_dhcp_client_id ()">nm_setting_ip4_config_get_dhcp_client_id</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id" title="nm_setting_ip4_config_get_dhcp_client_id ()">nm_setting_ip4_config_get_dhcp_client_id</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-hostname" title="nm_setting_ip4_config_get_dhcp_hostname ()">nm_setting_ip4_config_get_dhcp_hostname</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-hostname" title="nm_setting_ip4_config_get_dhcp_hostname ()">nm_setting_ip4_config_get_dhcp_hostname</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-send-hostname" title="nm_setting_ip4_config_get_dhcp_send_hostname ()">nm_setting_ip4_config_get_dhcp_send_hostname</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-send-hostname" title="nm_setting_ip4_config_get_dhcp_send_hostname ()">nm_setting_ip4_config_get_dhcp_send_hostname</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns" title="nm_setting_ip4_config_get_dns ()">nm_setting_ip4_config_get_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns" title="nm_setting_ip4_config_get_dns ()">nm_setting_ip4_config_get_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns-search" title="nm_setting_ip4_config_get_dns_search ()">nm_setting_ip4_config_get_dns_search</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns-search" title="nm_setting_ip4_config_get_dns_search ()">nm_setting_ip4_config_get_dns_search</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-dns" title="nm_setting_ip4_config_get_ignore_auto_dns ()">nm_setting_ip4_config_get_ignore_auto_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-dns" title="nm_setting_ip4_config_get_ignore_auto_dns ()">nm_setting_ip4_config_get_ignore_auto_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-routes" title="nm_setting_ip4_config_get_ignore_auto_routes ()">nm_setting_ip4_config_get_ignore_auto_routes</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-routes" title="nm_setting_ip4_config_get_ignore_auto_routes ()">nm_setting_ip4_config_get_ignore_auto_routes</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-may-fail" title="nm_setting_ip4_config_get_may_fail ()">nm_setting_ip4_config_get_may_fail</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-may-fail" title="nm_setting_ip4_config_get_may_fail ()">nm_setting_ip4_config_get_may_fail</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-method" title="nm_setting_ip4_config_get_method ()">nm_setting_ip4_config_get_method</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-method" title="nm_setting_ip4_config_get_method ()">nm_setting_ip4_config_get_method</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-never-default" title="nm_setting_ip4_config_get_never_default ()">nm_setting_ip4_config_get_never_default</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-never-default" title="nm_setting_ip4_config_get_never_default ()">nm_setting_ip4_config_get_never_default</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-addresses" title="nm_setting_ip4_config_get_num_addresses ()">nm_setting_ip4_config_get_num_addresses</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-addresses" title="nm_setting_ip4_config_get_num_addresses ()">nm_setting_ip4_config_get_num_addresses</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns" title="nm_setting_ip4_config_get_num_dns ()">nm_setting_ip4_config_get_num_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns" title="nm_setting_ip4_config_get_num_dns ()">nm_setting_ip4_config_get_num_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns-searches" title="nm_setting_ip4_config_get_num_dns_searches ()">nm_setting_ip4_config_get_num_dns_searches</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns-searches" title="nm_setting_ip4_config_get_num_dns_searches ()">nm_setting_ip4_config_get_num_dns_searches</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-routes" title="nm_setting_ip4_config_get_num_routes ()">nm_setting_ip4_config_get_num_routes</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-routes" title="nm_setting_ip4_config_get_num_routes ()">nm_setting_ip4_config_get_num_routes</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-route" title="nm_setting_ip4_config_get_route ()">nm_setting_ip4_config_get_route</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-route" title="nm_setting_ip4_config_get_route ()">nm_setting_ip4_config_get_route</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
@@ -2624,23 +3301,39 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-new" title="nm_setting_ip4_config_new ()">nm_setting_ip4_config_new</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-new" title="nm_setting_ip4_config_new ()">nm_setting_ip4_config_new</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address" title="nm_setting_ip4_config_remove_address ()">nm_setting_ip4_config_remove_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address" title="nm_setting_ip4_config_remove_address ()">nm_setting_ip4_config_remove_address</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns" title="nm_setting_ip4_config_remove_dns ()">nm_setting_ip4_config_remove_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address-by-value" title="nm_setting_ip4_config_remove_address_by_value ()">nm_setting_ip4_config_remove_address_by_value</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search" title="nm_setting_ip4_config_remove_dns_search ()">nm_setting_ip4_config_remove_dns_search</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns" title="nm_setting_ip4_config_remove_dns ()">nm_setting_ip4_config_remove_dns</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route" title="nm_setting_ip4_config_remove_route ()">nm_setting_ip4_config_remove_route</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-by-value" title="nm_setting_ip4_config_remove_dns_by_value ()">nm_setting_ip4_config_remove_dns_by_value</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search" title="nm_setting_ip4_config_remove_dns_search ()">nm_setting_ip4_config_remove_dns_search</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search-by-value" title="nm_setting_ip4_config_remove_dns_search_by_value ()">nm_setting_ip4_config_remove_dns_search_by_value</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route" title="nm_setting_ip4_config_remove_route ()">nm_setting_ip4_config_remove_route</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route-by-value" title="nm_setting_ip4_config_remove_route_by_value ()">nm_setting_ip4_config_remove_route_by_value</a>, function in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
<dt>
@@ -2656,35 +3349,35 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-address" title="nm_setting_ip6_config_add_address ()">nm_setting_ip6_config_add_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-address" title="nm_setting_ip6_config_add_address ()">nm_setting_ip6_config_add_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns" title="nm_setting_ip6_config_add_dns ()">nm_setting_ip6_config_add_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns" title="nm_setting_ip6_config_add_dns ()">nm_setting_ip6_config_add_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns-search" title="nm_setting_ip6_config_add_dns_search ()">nm_setting_ip6_config_add_dns_search</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns-search" title="nm_setting_ip6_config_add_dns_search ()">nm_setting_ip6_config_add_dns_search</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-route" title="nm_setting_ip6_config_add_route ()">nm_setting_ip6_config_add_route</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-add-route" title="nm_setting_ip6_config_add_route ()">nm_setting_ip6_config_add_route</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-addresses" title="nm_setting_ip6_config_clear_addresses ()">nm_setting_ip6_config_clear_addresses</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-addresses" title="nm_setting_ip6_config_clear_addresses ()">nm_setting_ip6_config_clear_addresses</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns" title="nm_setting_ip6_config_clear_dns ()">nm_setting_ip6_config_clear_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns" title="nm_setting_ip6_config_clear_dns ()">nm_setting_ip6_config_clear_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns-searches" title="nm_setting_ip6_config_clear_dns_searches ()">nm_setting_ip6_config_clear_dns_searches</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns-searches" title="nm_setting_ip6_config_clear_dns_searches ()">nm_setting_ip6_config_clear_dns_searches</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-routes" title="nm_setting_ip6_config_clear_routes ()">nm_setting_ip6_config_clear_routes</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-clear-routes" title="nm_setting_ip6_config_clear_routes ()">nm_setting_ip6_config_clear_routes</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
@@ -2704,67 +3397,67 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-error-quark" title="nm_setting_ip6_config_error_quark ()">nm_setting_ip6_config_error_quark</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-error-quark" title="nm_setting_ip6_config_error_quark ()">nm_setting_ip6_config_error_quark</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-address" title="nm_setting_ip6_config_get_address ()">nm_setting_ip6_config_get_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-address" title="nm_setting_ip6_config_get_address ()">nm_setting_ip6_config_get_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dhcp-hostname" title="nm_setting_ip6_config_get_dhcp_hostname ()">nm_setting_ip6_config_get_dhcp_hostname</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dhcp-hostname" title="nm_setting_ip6_config_get_dhcp_hostname ()">nm_setting_ip6_config_get_dhcp_hostname</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns" title="nm_setting_ip6_config_get_dns ()">nm_setting_ip6_config_get_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns" title="nm_setting_ip6_config_get_dns ()">nm_setting_ip6_config_get_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns-search" title="nm_setting_ip6_config_get_dns_search ()">nm_setting_ip6_config_get_dns_search</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns-search" title="nm_setting_ip6_config_get_dns_search ()">nm_setting_ip6_config_get_dns_search</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns" title="nm_setting_ip6_config_get_ignore_auto_dns ()">nm_setting_ip6_config_get_ignore_auto_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns" title="nm_setting_ip6_config_get_ignore_auto_dns ()">nm_setting_ip6_config_get_ignore_auto_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-routes" title="nm_setting_ip6_config_get_ignore_auto_routes ()">nm_setting_ip6_config_get_ignore_auto_routes</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-routes" title="nm_setting_ip6_config_get_ignore_auto_routes ()">nm_setting_ip6_config_get_ignore_auto_routes</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy" title="nm_setting_ip6_config_get_ip6_privacy ()">nm_setting_ip6_config_get_ip6_privacy</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy" title="nm_setting_ip6_config_get_ip6_privacy ()">nm_setting_ip6_config_get_ip6_privacy</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-may-fail" title="nm_setting_ip6_config_get_may_fail ()">nm_setting_ip6_config_get_may_fail</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-may-fail" title="nm_setting_ip6_config_get_may_fail ()">nm_setting_ip6_config_get_may_fail</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-method" title="nm_setting_ip6_config_get_method ()">nm_setting_ip6_config_get_method</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-method" title="nm_setting_ip6_config_get_method ()">nm_setting_ip6_config_get_method</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default" title="nm_setting_ip6_config_get_never_default ()">nm_setting_ip6_config_get_never_default</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default" title="nm_setting_ip6_config_get_never_default ()">nm_setting_ip6_config_get_never_default</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-addresses" title="nm_setting_ip6_config_get_num_addresses ()">nm_setting_ip6_config_get_num_addresses</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-addresses" title="nm_setting_ip6_config_get_num_addresses ()">nm_setting_ip6_config_get_num_addresses</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns" title="nm_setting_ip6_config_get_num_dns ()">nm_setting_ip6_config_get_num_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns" title="nm_setting_ip6_config_get_num_dns ()">nm_setting_ip6_config_get_num_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns-searches" title="nm_setting_ip6_config_get_num_dns_searches ()">nm_setting_ip6_config_get_num_dns_searches</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns-searches" title="nm_setting_ip6_config_get_num_dns_searches ()">nm_setting_ip6_config_get_num_dns_searches</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-routes" title="nm_setting_ip6_config_get_num_routes ()">nm_setting_ip6_config_get_num_routes</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-routes" title="nm_setting_ip6_config_get_num_routes ()">nm_setting_ip6_config_get_num_routes</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-route" title="nm_setting_ip6_config_get_route ()">nm_setting_ip6_config_get_route</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-route" title="nm_setting_ip6_config_get_route ()">nm_setting_ip6_config_get_route</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
@@ -2816,23 +3509,39 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-new" title="nm_setting_ip6_config_new ()">nm_setting_ip6_config_new</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-new" title="nm_setting_ip6_config_new ()">nm_setting_ip6_config_new</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address" title="nm_setting_ip6_config_remove_address ()">nm_setting_ip6_config_remove_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address" title="nm_setting_ip6_config_remove_address ()">nm_setting_ip6_config_remove_address</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address-by-value" title="nm_setting_ip6_config_remove_address_by_value ()">nm_setting_ip6_config_remove_address_by_value</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns" title="nm_setting_ip6_config_remove_dns ()">nm_setting_ip6_config_remove_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns" title="nm_setting_ip6_config_remove_dns ()">nm_setting_ip6_config_remove_dns</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search" title="nm_setting_ip6_config_remove_dns_search ()">nm_setting_ip6_config_remove_dns_search</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-by-value" title="nm_setting_ip6_config_remove_dns_by_value ()">nm_setting_ip6_config_remove_dns_by_value</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route" title="nm_setting_ip6_config_remove_route ()">nm_setting_ip6_config_remove_route</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search" title="nm_setting_ip6_config_remove_dns_search ()">nm_setting_ip6_config_remove_dns_search</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search-by-value" title="nm_setting_ip6_config_remove_dns_search_by_value ()">nm_setting_ip6_config_remove_dns_search_by_value</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route" title="nm_setting_ip6_config_remove_route ()">nm_setting_ip6_config_remove_route</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route-by-value" title="nm_setting_ip6_config_remove_route_by_value ()">nm_setting_ip6_config_remove_route_by_value</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
<dt>
@@ -2848,11 +3557,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-need-secrets" title="nm_setting_need_secrets ()">nm_setting_need_secrets</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSetting.html#nm-setting-need-secrets" title="nm_setting_need_secrets ()">nm_setting_need_secrets</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-new-from-hash" title="nm_setting_new_from_hash ()">nm_setting_new_from_hash</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSetting.html#nm-setting-new-from-hash" title="nm_setting_new_from_hash ()">nm_setting_new_from_hash</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
</dt>
<dd></dd>
<dt>
@@ -2868,23 +3577,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark" title="nm_setting_olpc_mesh_error_quark ()">nm_setting_olpc_mesh_error_quark</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark" title="nm_setting_olpc_mesh_error_quark ()">nm_setting_olpc_mesh_error_quark</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel" title="nm_setting_olpc_mesh_get_channel ()">nm_setting_olpc_mesh_get_channel</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel" title="nm_setting_olpc_mesh_get_channel ()">nm_setting_olpc_mesh_get_channel</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address" title="nm_setting_olpc_mesh_get_dhcp_anycast_address ()">nm_setting_olpc_mesh_get_dhcp_anycast_address</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address" title="nm_setting_olpc_mesh_get_dhcp_anycast_address ()">nm_setting_olpc_mesh_get_dhcp_anycast_address</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid" title="nm_setting_olpc_mesh_get_ssid ()">nm_setting_olpc_mesh_get_ssid</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid" title="nm_setting_olpc_mesh_get_ssid ()">nm_setting_olpc_mesh_get_ssid</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new" title="nm_setting_olpc_mesh_new ()">nm_setting_olpc_mesh_new</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+<a class="link" href="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new" title="nm_setting_olpc_mesh_new ()">nm_setting_olpc_mesh_new</a>, function in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
</dt>
<dd></dd>
<dt>
@@ -2916,27 +3625,27 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-error-quark" title="nm_setting_pppoe_error_quark ()">nm_setting_pppoe_error_quark</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-error-quark" title="nm_setting_pppoe_error_quark ()">nm_setting_pppoe_error_quark</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password" title="nm_setting_pppoe_get_password ()">nm_setting_pppoe_get_password</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password" title="nm_setting_pppoe_get_password ()">nm_setting_pppoe_get_password</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags" title="nm_setting_pppoe_get_password_flags ()">nm_setting_pppoe_get_password_flags</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags" title="nm_setting_pppoe_get_password_flags ()">nm_setting_pppoe_get_password_flags</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-service" title="nm_setting_pppoe_get_service ()">nm_setting_pppoe_get_service</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-service" title="nm_setting_pppoe_get_service ()">nm_setting_pppoe_get_service</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-username" title="nm_setting_pppoe_get_username ()">nm_setting_pppoe_get_username</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-get-username" title="nm_setting_pppoe_get_username ()">nm_setting_pppoe_get_username</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-new" title="nm_setting_pppoe_new ()">nm_setting_pppoe_new</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+<a class="link" href="NMSettingPPPOE.html#nm-setting-pppoe-new" title="nm_setting_pppoe_new ()">nm_setting_pppoe_new</a>, function in <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
</dt>
<dd></dd>
<dt>
@@ -2972,79 +3681,79 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-error-quark" title="nm_setting_ppp_error_quark ()">nm_setting_ppp_error_quark</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-error-quark" title="nm_setting_ppp_error_quark ()">nm_setting_ppp_error_quark</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-baud" title="nm_setting_ppp_get_baud ()">nm_setting_ppp_get_baud</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-baud" title="nm_setting_ppp_get_baud ()">nm_setting_ppp_get_baud</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-crtscts" title="nm_setting_ppp_get_crtscts ()">nm_setting_ppp_get_crtscts</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-crtscts" title="nm_setting_ppp_get_crtscts ()">nm_setting_ppp_get_crtscts</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure" title="nm_setting_ppp_get_lcp_echo_failure ()">nm_setting_ppp_get_lcp_echo_failure</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure" title="nm_setting_ppp_get_lcp_echo_failure ()">nm_setting_ppp_get_lcp_echo_failure</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval" title="nm_setting_ppp_get_lcp_echo_interval ()">nm_setting_ppp_get_lcp_echo_interval</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval" title="nm_setting_ppp_get_lcp_echo_interval ()">nm_setting_ppp_get_lcp_echo_interval</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful" title="nm_setting_ppp_get_mppe_stateful ()">nm_setting_ppp_get_mppe_stateful</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful" title="nm_setting_ppp_get_mppe_stateful ()">nm_setting_ppp_get_mppe_stateful</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mru" title="nm_setting_ppp_get_mru ()">nm_setting_ppp_get_mru</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mru" title="nm_setting_ppp_get_mru ()">nm_setting_ppp_get_mru</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mtu" title="nm_setting_ppp_get_mtu ()">nm_setting_ppp_get_mtu</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-mtu" title="nm_setting_ppp_get_mtu ()">nm_setting_ppp_get_mtu</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-noauth" title="nm_setting_ppp_get_noauth ()">nm_setting_ppp_get_noauth</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-noauth" title="nm_setting_ppp_get_noauth ()">nm_setting_ppp_get_noauth</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp" title="nm_setting_ppp_get_nobsdcomp ()">nm_setting_ppp_get_nobsdcomp</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp" title="nm_setting_ppp_get_nobsdcomp ()">nm_setting_ppp_get_nobsdcomp</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nodeflate" title="nm_setting_ppp_get_nodeflate ()">nm_setting_ppp_get_nodeflate</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-nodeflate" title="nm_setting_ppp_get_nodeflate ()">nm_setting_ppp_get_nodeflate</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp" title="nm_setting_ppp_get_no_vj_comp ()">nm_setting_ppp_get_no_vj_comp</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp" title="nm_setting_ppp_get_no_vj_comp ()">nm_setting_ppp_get_no_vj_comp</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-chap" title="nm_setting_ppp_get_refuse_chap ()">nm_setting_ppp_get_refuse_chap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-chap" title="nm_setting_ppp_get_refuse_chap ()">nm_setting_ppp_get_refuse_chap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-eap" title="nm_setting_ppp_get_refuse_eap ()">nm_setting_ppp_get_refuse_eap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-eap" title="nm_setting_ppp_get_refuse_eap ()">nm_setting_ppp_get_refuse_eap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap" title="nm_setting_ppp_get_refuse_mschap ()">nm_setting_ppp_get_refuse_mschap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap" title="nm_setting_ppp_get_refuse_mschap ()">nm_setting_ppp_get_refuse_mschap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2" title="nm_setting_ppp_get_refuse_mschapv2 ()">nm_setting_ppp_get_refuse_mschapv2</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2" title="nm_setting_ppp_get_refuse_mschapv2 ()">nm_setting_ppp_get_refuse_mschapv2</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-pap" title="nm_setting_ppp_get_refuse_pap ()">nm_setting_ppp_get_refuse_pap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-refuse-pap" title="nm_setting_ppp_get_refuse_pap ()">nm_setting_ppp_get_refuse_pap</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe" title="nm_setting_ppp_get_require_mppe ()">nm_setting_ppp_get_require_mppe</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe" title="nm_setting_ppp_get_require_mppe ()">nm_setting_ppp_get_require_mppe</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128" title="nm_setting_ppp_get_require_mppe_128 ()">nm_setting_ppp_get_require_mppe_128</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128" title="nm_setting_ppp_get_require_mppe_128 ()">nm_setting_ppp_get_require_mppe_128</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
@@ -3068,7 +3777,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingPPP.html#nm-setting-ppp-new" title="nm_setting_ppp_new ()">nm_setting_ppp_new</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+<a class="link" href="NMSettingPPP.html#nm-setting-ppp-new" title="nm_setting_ppp_new ()">nm_setting_ppp_new</a>, function in <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
</dt>
<dd></dd>
<dt>
@@ -3120,14 +3829,6 @@
</dt>
<dd></dd>
<dt>
-NM_SETTING_REGISTER_TYPE, macro in nm-setting-private
-</dt>
-<dd></dd>
-<dt>
-NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-BAUD:CAPS" title="NM_SETTING_SERIAL_BAUD">NM_SETTING_SERIAL_BAUD</a>, macro in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
@@ -3140,31 +3841,31 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-error-quark" title="nm_setting_serial_error_quark ()">nm_setting_serial_error_quark</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingSerial.html#nm-setting-serial-error-quark" title="nm_setting_serial_error_quark ()">nm_setting_serial_error_quark</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-baud" title="nm_setting_serial_get_baud ()">nm_setting_serial_get_baud</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-baud" title="nm_setting_serial_get_baud ()">nm_setting_serial_get_baud</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-bits" title="nm_setting_serial_get_bits ()">nm_setting_serial_get_bits</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-bits" title="nm_setting_serial_get_bits ()">nm_setting_serial_get_bits</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-parity" title="nm_setting_serial_get_parity ()">nm_setting_serial_get_parity</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-parity" title="nm_setting_serial_get_parity ()">nm_setting_serial_get_parity</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-send-delay" title="nm_setting_serial_get_send_delay ()">nm_setting_serial_get_send_delay</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-send-delay" title="nm_setting_serial_get_send_delay ()">nm_setting_serial_get_send_delay</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-stopbits" title="nm_setting_serial_get_stopbits ()">nm_setting_serial_get_stopbits</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingSerial.html#nm-setting-serial-get-stopbits" title="nm_setting_serial_get_stopbits ()">nm_setting_serial_get_stopbits</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingSerial.html#nm-setting-serial-new" title="nm_setting_serial_new ()">nm_setting_serial_new</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+<a class="link" href="NMSettingSerial.html#nm-setting-serial-new" title="nm_setting_serial_new ()">nm_setting_serial_new</a>, function in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
</dt>
<dd></dd>
<dt>
@@ -3184,35 +3885,91 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-set-secret-flags" title="nm_setting_set_secret_flags ()">nm_setting_set_secret_flags</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSetting.html#nm-setting-set-secret-flags" title="nm_setting_set_secret_flags ()">nm_setting_set_secret_flags</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-CONFIG:CAPS" title="NM_SETTING_TEAM_CONFIG">NM_SETTING_TEAM_CONFIG</a>, macro in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-ERROR:CAPS" title="NM_SETTING_TEAM_ERROR">NM_SETTING_TEAM_ERROR</a>, macro in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-to-hash" title="nm_setting_to_hash ()">nm_setting_to_hash</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingTeam.html#nm-setting-team-error-quark" title="nm_setting_team_error_quark ()">nm_setting_team_error_quark</a>, function in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-to-string" title="nm_setting_to_string ()">nm_setting_to_string</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingTeam.html#nm-setting-team-get-config" title="nm_setting_team_get_config ()">nm_setting_team_get_config</a>, function in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-update-secrets" title="nm_setting_update_secrets ()">nm_setting_update_secrets</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingTeam.html#nm-setting-team-get-interface-name" title="nm_setting_team_get_interface_name ()">nm_setting_team_get_interface_name</a>, function in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSetting.html#nm-setting-verify" title="nm_setting_verify ()">nm_setting_verify</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+<a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-INTERFACE-NAME:CAPS" title="NM_SETTING_TEAM_INTERFACE_NAME">NM_SETTING_TEAM_INTERFACE_NAME</a>, macro in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority" title="nm_setting_vlan_add_priority ()">nm_setting_vlan_add_priority</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingTeam.html#nm-setting-team-new" title="nm_setting_team_new ()">nm_setting_team_new</a>, function in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority-str" title="nm_setting_vlan_add_priority_str ()">nm_setting_vlan_add_priority_str</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-CONFIG:CAPS" title="NM_SETTING_TEAM_PORT_CONFIG">NM_SETTING_TEAM_PORT_CONFIG</a>, macro in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-clear-priorities" title="nm_setting_vlan_clear_priorities ()">nm_setting_vlan_clear_priorities</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR:CAPS" title="NM_SETTING_TEAM_PORT_ERROR">NM_SETTING_TEAM_PORT_ERROR</a>, macro in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeamPort.html#nm-setting-team-port-error-quark" title="nm_setting_team_port_error_quark ()">nm_setting_team_port_error_quark</a>, function in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeamPort.html#nm-setting-team-port-get-config" title="nm_setting_team_port_get_config ()">nm_setting_team_port_get_config</a>, function in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeamPort.html#nm-setting-team-port-new" title="nm_setting_team_port_new ()">nm_setting_team_port_new</a>, function in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS" title="NM_SETTING_TEAM_PORT_SETTING_NAME">NM_SETTING_TEAM_PORT_SETTING_NAME</a>, macro in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-SETTING-NAME:CAPS" title="NM_SETTING_TEAM_SETTING_NAME">NM_SETTING_TEAM_SETTING_NAME</a>, macro in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-to-hash" title="nm_setting_to_hash ()">nm_setting_to_hash</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-to-string" title="nm_setting_to_string ()">nm_setting_to_string</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-update-secrets" title="nm_setting_update_secrets ()">nm_setting_update_secrets</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-verify" title="nm_setting_verify ()">nm_setting_verify</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority" title="nm_setting_vlan_add_priority ()">nm_setting_vlan_add_priority</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-add-priority-str" title="nm_setting_vlan_add_priority_str ()">nm_setting_vlan_add_priority_str</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-clear-priorities" title="nm_setting_vlan_clear_priorities ()">nm_setting_vlan_clear_priorities</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
@@ -3224,7 +3981,7 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-error-quark" title="nm_setting_vlan_error_quark ()">nm_setting_vlan_error_quark</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-error-quark" title="nm_setting_vlan_error_quark ()">nm_setting_vlan_error_quark</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
@@ -3232,27 +3989,27 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-flags" title="nm_setting_vlan_get_flags ()">nm_setting_vlan_get_flags</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-flags" title="nm_setting_vlan_get_flags ()">nm_setting_vlan_get_flags</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-id" title="nm_setting_vlan_get_id ()">nm_setting_vlan_get_id</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-id" title="nm_setting_vlan_get_id ()">nm_setting_vlan_get_id</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-interface-name" title="nm_setting_vlan_get_interface_name ()">nm_setting_vlan_get_interface_name</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-interface-name" title="nm_setting_vlan_get_interface_name ()">nm_setting_vlan_get_interface_name</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-num-priorities" title="nm_setting_vlan_get_num_priorities ()">nm_setting_vlan_get_num_priorities</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-num-priorities" title="nm_setting_vlan_get_num_priorities ()">nm_setting_vlan_get_num_priorities</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-parent" title="nm_setting_vlan_get_parent ()">nm_setting_vlan_get_parent</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-parent" title="nm_setting_vlan_get_parent ()">nm_setting_vlan_get_parent</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-priority" title="nm_setting_vlan_get_priority ()">nm_setting_vlan_get_priority</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-get-priority" title="nm_setting_vlan_get_priority ()">nm_setting_vlan_get_priority</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
@@ -3268,7 +4025,7 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-new" title="nm_setting_vlan_new ()">nm_setting_vlan_new</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-new" title="nm_setting_vlan_new ()">nm_setting_vlan_new</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
@@ -3276,7 +4033,15 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority" title="nm_setting_vlan_remove_priority ()">nm_setting_vlan_remove_priority</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority" title="nm_setting_vlan_remove_priority ()">nm_setting_vlan_remove_priority</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority-by-value" title="nm_setting_vlan_remove_priority_by_value ()">nm_setting_vlan_remove_priority_by_value</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#nm-setting-vlan-remove-priority-str-by-value" title="nm_setting_vlan_remove_priority_str_by_value ()">nm_setting_vlan_remove_priority_str_by_value</a>, function in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
@@ -3284,11 +4049,11 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()">nm_setting_vpn_add_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-data-item" title="nm_setting_vpn_add_data_item ()">nm_setting_vpn_add_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()">nm_setting_vpn_add_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-add-secret" title="nm_setting_vpn_add_secret ()">nm_setting_vpn_add_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
@@ -3300,51 +4065,51 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-error-quark" title="nm_setting_vpn_error_quark ()">nm_setting_vpn_error_quark</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-error-quark" title="nm_setting_vpn_error_quark ()">nm_setting_vpn_error_quark</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-data-item" title="nm_setting_vpn_foreach_data_item ()">nm_setting_vpn_foreach_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-data-item" title="nm_setting_vpn_foreach_data_item ()">nm_setting_vpn_foreach_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-secret" title="nm_setting_vpn_foreach_secret ()">nm_setting_vpn_foreach_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-foreach-secret" title="nm_setting_vpn_foreach_secret ()">nm_setting_vpn_foreach_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-data-item" title="nm_setting_vpn_get_data_item ()">nm_setting_vpn_get_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-data-item" title="nm_setting_vpn_get_data_item ()">nm_setting_vpn_get_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-data-items" title="nm_setting_vpn_get_num_data_items ()">nm_setting_vpn_get_num_data_items</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-data-items" title="nm_setting_vpn_get_num_data_items ()">nm_setting_vpn_get_num_data_items</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-secrets" title="nm_setting_vpn_get_num_secrets ()">nm_setting_vpn_get_num_secrets</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-num-secrets" title="nm_setting_vpn_get_num_secrets ()">nm_setting_vpn_get_num_secrets</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-secret" title="nm_setting_vpn_get_secret ()">nm_setting_vpn_get_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-secret" title="nm_setting_vpn_get_secret ()">nm_setting_vpn_get_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-service-type" title="nm_setting_vpn_get_service_type ()">nm_setting_vpn_get_service_type</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-service-type" title="nm_setting_vpn_get_service_type ()">nm_setting_vpn_get_service_type</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-user-name" title="nm_setting_vpn_get_user_name ()">nm_setting_vpn_get_user_name</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-user-name" title="nm_setting_vpn_get_user_name ()">nm_setting_vpn_get_user_name</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-new" title="nm_setting_vpn_new ()">nm_setting_vpn_new</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-new" title="nm_setting_vpn_new ()">nm_setting_vpn_new</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-data-item" title="nm_setting_vpn_remove_data_item ()">nm_setting_vpn_remove_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-data-item" title="nm_setting_vpn_remove_data_item ()">nm_setting_vpn_remove_data_item</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-secret" title="nm_setting_vpn_remove_secret ()">nm_setting_vpn_remove_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-remove-secret" title="nm_setting_vpn_remove_secret ()">nm_setting_vpn_remove_secret</a>, function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<dt>
@@ -3368,15 +4133,15 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-error-quark" title="nm_setting_wimax_error_quark ()">nm_setting_wimax_error_quark</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+<a class="link" href="NMSettingWimax.html#nm-setting-wimax-error-quark" title="nm_setting_wimax_error_quark ()">nm_setting_wimax_error_quark</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-mac-address" title="nm_setting_wimax_get_mac_address ()">nm_setting_wimax_get_mac_address</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+<a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-mac-address" title="nm_setting_wimax_get_mac_address ()">nm_setting_wimax_get_mac_address</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-network-name" title="nm_setting_wimax_get_network_name ()">nm_setting_wimax_get_network_name</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+<a class="link" href="NMSettingWimax.html#nm-setting-wimax-get-network-name" title="nm_setting_wimax_get_network_name ()">nm_setting_wimax_get_network_name</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
@@ -3388,7 +4153,7 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWimax.html#nm-setting-wimax-new" title="nm_setting_wimax_new ()">nm_setting_wimax_new</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+<a class="link" href="NMSettingWimax.html#nm-setting-wimax-new" title="nm_setting_wimax_new ()">nm_setting_wimax_new</a>, function in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
</dt>
<dd></dd>
<dt>
@@ -3396,7 +4161,11 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-add-s390-option" title="nm_setting_wired_add_s390_option ()">nm_setting_wired_add_s390_option</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-add-mac-blacklist-item" title="nm_setting_wired_add_mac_blacklist_item ()">nm_setting_wired_add_mac_blacklist_item</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-add-s390-option" title="nm_setting_wired_add_s390_option ()">nm_setting_wired_add_s390_option</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
@@ -3404,6 +4173,10 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-clear-mac-blacklist-items" title="nm_setting_wired_clear_mac_blacklist_items ()">nm_setting_wired_clear_mac_blacklist_items</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRED_CLONED_MAC_ADDRESS">NM_SETTING_WIRED_CLONED_MAC_ADDRESS</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
@@ -3416,59 +4189,71 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-error-quark" title="nm_setting_wired_error_quark ()">nm_setting_wired_error_quark</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-error-quark" title="nm_setting_wired_error_quark ()">nm_setting_wired_error_quark</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-auto-negotiate" title="nm_setting_wired_get_auto_negotiate ()">nm_setting_wired_get_auto_negotiate</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-auto-negotiate" title="nm_setting_wired_get_auto_negotiate ()">nm_setting_wired_get_auto_negotiate</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-cloned-mac-address" title="nm_setting_wired_get_cloned_mac_address ()">nm_setting_wired_get_cloned_mac_address</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-cloned-mac-address" title="nm_setting_wired_get_cloned_mac_address ()">nm_setting_wired_get_cloned_mac_address</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-duplex" title="nm_setting_wired_get_duplex ()">nm_setting_wired_get_duplex</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-duplex" title="nm_setting_wired_get_duplex ()">nm_setting_wired_get_duplex</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address" title="nm_setting_wired_get_mac_address ()">nm_setting_wired_get_mac_address</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address" title="nm_setting_wired_get_mac_address ()">nm_setting_wired_get_mac_address</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist" title="nm_setting_wired_get_mac_address_blacklist ()">nm_setting_wired_get_mac_address_blacklist</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist" title="nm_setting_wired_get_mac_address_blacklist ()">nm_setting_wired_get_mac_address_blacklist</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mtu" title="nm_setting_wired_get_mtu ()">nm_setting_wired_get_mtu</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mac-blacklist-item" title="nm_setting_wired_get_mac_blacklist_item ()">nm_setting_wired_get_mac_blacklist_item</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-s390-options" title="nm_setting_wired_get_num_s390_options ()">nm_setting_wired_get_num_s390_options</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-mtu" title="nm_setting_wired_get_mtu ()">nm_setting_wired_get_mtu</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-port" title="nm_setting_wired_get_port ()">nm_setting_wired_get_port</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-mac-blacklist-items" title="nm_setting_wired_get_num_mac_blacklist_items ()">nm_setting_wired_get_num_mac_blacklist_items</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-nettype" title="nm_setting_wired_get_s390_nettype ()">nm_setting_wired_get_s390_nettype</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-num-s390-options" title="nm_setting_wired_get_num_s390_options ()">nm_setting_wired_get_num_s390_options</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option" title="nm_setting_wired_get_s390_option ()">nm_setting_wired_get_s390_option</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-port" title="nm_setting_wired_get_port ()">nm_setting_wired_get_port</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option-by-key" title="nm_setting_wired_get_s390_option_by_key ()">nm_setting_wired_get_s390_option_by_key</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-nettype" title="nm_setting_wired_get_s390_nettype ()">nm_setting_wired_get_s390_nettype</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-subchannels" title="nm_setting_wired_get_s390_subchannels ()">nm_setting_wired_get_s390_subchannels</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option" title="nm_setting_wired_get_s390_option ()">nm_setting_wired_get_s390_option</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-get-speed" title="nm_setting_wired_get_speed ()">nm_setting_wired_get_speed</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-option-by-key" title="nm_setting_wired_get_s390_option_by_key ()">nm_setting_wired_get_s390_option_by_key</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-s390-subchannels" title="nm_setting_wired_get_s390_subchannels ()">nm_setting_wired_get_s390_subchannels</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-speed" title="nm_setting_wired_get_speed ()">nm_setting_wired_get_speed</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-get-valid-s390-options" title="nm_setting_wired_get_valid_s390_options ()">nm_setting_wired_get_valid_s390_options</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
@@ -3484,7 +4269,7 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-new" title="nm_setting_wired_new ()">nm_setting_wired_new</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-new" title="nm_setting_wired_new ()">nm_setting_wired_new</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
@@ -3492,7 +4277,15 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWired.html#nm-setting-wired-remove-s390-option" title="nm_setting_wired_remove_s390_option ()">nm_setting_wired_remove_s390_option</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item" title="nm_setting_wired_remove_mac_blacklist_item ()">nm_setting_wired_remove_mac_blacklist_item</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item-by-value" title="nm_setting_wired_remove_mac_blacklist_item_by_value ()">nm_setting_wired_remove_mac_blacklist_item_by_value</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#nm-setting-wired-remove-s390-option" title="nm_setting_wired_remove_s390_option ()">nm_setting_wired_remove_s390_option</a>, function in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
</dt>
<dd></dd>
<dt>
@@ -3516,11 +4309,15 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-add-seen-bssid" title="nm_setting_wireless_add_seen_bssid ()">nm_setting_wireless_add_seen_bssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-add-mac-blacklist-item" title="nm_setting_wireless_add_mac_blacklist_item ()">nm_setting_wireless_add_mac_blacklist_item</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-ap-security-compatible" title="nm_setting_wireless_ap_security_compatible ()">nm_setting_wireless_ap_security_compatible</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-add-seen-bssid" title="nm_setting_wireless_add_seen_bssid ()">nm_setting_wireless_add_seen_bssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-ap-security-compatible" title="nm_setting_wireless_ap_security_compatible ()">nm_setting_wireless_ap_security_compatible</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
@@ -3536,6 +4333,10 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-clear-mac-blacklist-items" title="nm_setting_wireless_clear_mac_blacklist_items ()">nm_setting_wireless_clear_mac_blacklist_items</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS">NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
@@ -3544,67 +4345,75 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-error-quark" title="nm_setting_wireless_error_quark ()">nm_setting_wireless_error_quark</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-error-quark" title="nm_setting_wireless_error_quark ()">nm_setting_wireless_error_quark</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-band" title="nm_setting_wireless_get_band ()">nm_setting_wireless_get_band</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-band" title="nm_setting_wireless_get_band ()">nm_setting_wireless_get_band</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-bssid" title="nm_setting_wireless_get_bssid ()">nm_setting_wireless_get_bssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-bssid" title="nm_setting_wireless_get_bssid ()">nm_setting_wireless_get_bssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-channel" title="nm_setting_wireless_get_channel ()">nm_setting_wireless_get_channel</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-channel" title="nm_setting_wireless_get_channel ()">nm_setting_wireless_get_channel</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address" title="nm_setting_wireless_get_cloned_mac_address ()">nm_setting_wireless_get_cloned_mac_address</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address" title="nm_setting_wireless_get_cloned_mac_address ()">nm_setting_wireless_get_cloned_mac_address</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-hidden" title="nm_setting_wireless_get_hidden ()">nm_setting_wireless_get_hidden</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-hidden" title="nm_setting_wireless_get_hidden ()">nm_setting_wireless_get_hidden</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address" title="nm_setting_wireless_get_mac_address ()">nm_setting_wireless_get_mac_address</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address" title="nm_setting_wireless_get_mac_address ()">nm_setting_wireless_get_mac_address</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist" title="nm_setting_wireless_get_mac_address_blacklist ()">nm_setting_wireless_get_mac_address_blacklist</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist" title="nm_setting_wireless_get_mac_address_blacklist ()">nm_setting_wireless_get_mac_address_blacklist</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mac-blacklist-item" title="nm_setting_wireless_get_mac_blacklist_item ()">nm_setting_wireless_get_mac_blacklist_item</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mode" title="nm_setting_wireless_get_mode ()">nm_setting_wireless_get_mode</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mode" title="nm_setting_wireless_get_mode ()">nm_setting_wireless_get_mode</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mtu" title="nm_setting_wireless_get_mtu ()">nm_setting_wireless_get_mtu</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-mtu" title="nm_setting_wireless_get_mtu ()">nm_setting_wireless_get_mtu</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids" title="nm_setting_wireless_get_num_seen_bssids ()">nm_setting_wireless_get_num_seen_bssids</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-num-mac-blacklist-items" title="nm_setting_wireless_get_num_mac_blacklist_items ()">nm_setting_wireless_get_num_mac_blacklist_items</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-rate" title="nm_setting_wireless_get_rate ()">nm_setting_wireless_get_rate</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids" title="nm_setting_wireless_get_num_seen_bssids ()">nm_setting_wireless_get_num_seen_bssids</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-security" title="nm_setting_wireless_get_security ()">nm_setting_wireless_get_security</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-rate" title="nm_setting_wireless_get_rate ()">nm_setting_wireless_get_rate</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-seen-bssid" title="nm_setting_wireless_get_seen_bssid ()">nm_setting_wireless_get_seen_bssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-security" title="nm_setting_wireless_get_security ()">nm_setting_wireless_get_security</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-ssid" title="nm_setting_wireless_get_ssid ()">nm_setting_wireless_get_ssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-seen-bssid" title="nm_setting_wireless_get_seen_bssid ()">nm_setting_wireless_get_seen_bssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-tx-power" title="nm_setting_wireless_get_tx_power ()">nm_setting_wireless_get_tx_power</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-ssid" title="nm_setting_wireless_get_ssid ()">nm_setting_wireless_get_ssid</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-get-tx-power" title="nm_setting_wireless_get_tx_power ()">nm_setting_wireless_get_tx_power</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
@@ -3640,7 +4449,7 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWireless.html#nm-setting-wireless-new" title="nm_setting_wireless_new ()">nm_setting_wireless_new</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-new" title="nm_setting_wireless_new ()">nm_setting_wireless_new</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
@@ -3648,19 +4457,27 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item" title="nm_setting_wireless_remove_mac_blacklist_item ()">nm_setting_wireless_remove_mac_blacklist_item</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item-by-value" title="nm_setting_wireless_remove_mac_blacklist_item_by_value ()">nm_setting_wireless_remove_mac_blacklist_item_by_value</a>, function in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SEC:CAPS" title="NM_SETTING_WIRELESS_SEC">NM_SETTING_WIRELESS_SEC</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group" title="nm_setting_wireless_security_add_group ()">nm_setting_wireless_security_add_group</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group" title="nm_setting_wireless_security_add_group ()">nm_setting_wireless_security_add_group</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise" title="nm_setting_wireless_security_add_pairwise ()">nm_setting_wireless_security_add_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise" title="nm_setting_wireless_security_add_pairwise ()">nm_setting_wireless_security_add_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto" title="nm_setting_wireless_security_add_proto ()">nm_setting_wireless_security_add_proto</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto" title="nm_setting_wireless_security_add_proto ()">nm_setting_wireless_security_add_proto</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
@@ -3668,15 +4485,15 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups" title="nm_setting_wireless_security_clear_groups ()">nm_setting_wireless_security_clear_groups</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups" title="nm_setting_wireless_security_clear_groups ()">nm_setting_wireless_security_clear_groups</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise" title="nm_setting_wireless_security_clear_pairwise ()">nm_setting_wireless_security_clear_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise" title="nm_setting_wireless_security_clear_pairwise ()">nm_setting_wireless_security_clear_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos" title="nm_setting_wireless_security_clear_protos ()">nm_setting_wireless_security_clear_protos</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos" title="nm_setting_wireless_security_clear_protos ()">nm_setting_wireless_security_clear_protos</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
@@ -3684,75 +4501,75 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-error-quark" title="nm_setting_wireless_security_error_quark ()">nm_setting_wireless_security_error_quark</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-error-quark" title="nm_setting_wireless_security_error_quark ()">nm_setting_wireless_security_error_quark</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg" title="nm_setting_wireless_security_get_auth_alg ()">nm_setting_wireless_security_get_auth_alg</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg" title="nm_setting_wireless_security_get_auth_alg ()">nm_setting_wireless_security_get_auth_alg</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group" title="nm_setting_wireless_security_get_group ()">nm_setting_wireless_security_get_group</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group" title="nm_setting_wireless_security_get_group ()">nm_setting_wireless_security_get_group</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt" title="nm_setting_wireless_security_get_key_mgmt ()">nm_setting_wireless_security_get_key_mgmt</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt" title="nm_setting_wireless_security_get_key_mgmt ()">nm_setting_wireless_security_get_key_mgmt</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password" title="nm_setting_wireless_security_get_leap_password ()">nm_setting_wireless_security_get_leap_password</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password" title="nm_setting_wireless_security_get_leap_password ()">nm_setting_wireless_security_get_leap_password</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password-flags" title="nm_setting_wireless_security_get_leap_password_flags ()">nm_setting_wireless_security_get_leap_password_flags</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password-flags" title="nm_setting_wireless_security_get_leap_password_flags ()">nm_setting_wireless_security_get_leap_password_flags</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-username" title="nm_setting_wireless_security_get_leap_username ()">nm_setting_wireless_security_get_leap_username</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-username" title="nm_setting_wireless_security_get_leap_username ()">nm_setting_wireless_security_get_leap_username</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups" title="nm_setting_wireless_security_get_num_groups ()">nm_setting_wireless_security_get_num_groups</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups" title="nm_setting_wireless_security_get_num_groups ()">nm_setting_wireless_security_get_num_groups</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise" title="nm_setting_wireless_security_get_num_pairwise ()">nm_setting_wireless_security_get_num_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise" title="nm_setting_wireless_security_get_num_pairwise ()">nm_setting_wireless_security_get_num_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos" title="nm_setting_wireless_security_get_num_protos ()">nm_setting_wireless_security_get_num_protos</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos" title="nm_setting_wireless_security_get_num_protos ()">nm_setting_wireless_security_get_num_protos</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise" title="nm_setting_wireless_security_get_pairwise ()">nm_setting_wireless_security_get_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise" title="nm_setting_wireless_security_get_pairwise ()">nm_setting_wireless_security_get_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto" title="nm_setting_wireless_security_get_proto ()">nm_setting_wireless_security_get_proto</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto" title="nm_setting_wireless_security_get_proto ()">nm_setting_wireless_security_get_proto</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk" title="nm_setting_wireless_security_get_psk ()">nm_setting_wireless_security_get_psk</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk" title="nm_setting_wireless_security_get_psk ()">nm_setting_wireless_security_get_psk</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags" title="nm_setting_wireless_security_get_psk_flags ()">nm_setting_wireless_security_get_psk_flags</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags" title="nm_setting_wireless_security_get_psk_flags ()">nm_setting_wireless_security_get_psk_flags</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key" title="nm_setting_wireless_security_get_wep_key ()">nm_setting_wireless_security_get_wep_key</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key" title="nm_setting_wireless_security_get_wep_key ()">nm_setting_wireless_security_get_wep_key</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags" title="nm_setting_wireless_security_get_wep_key_flags ()">nm_setting_wireless_security_get_wep_key_flags</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags" title="nm_setting_wireless_security_get_wep_key_flags ()">nm_setting_wireless_security_get_wep_key_flags</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type" title="nm_setting_wireless_security_get_wep_key_type ()">nm_setting_wireless_security_get_wep_key_type</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type" title="nm_setting_wireless_security_get_wep_key_type ()">nm_setting_wireless_security_get_wep_key_type</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-tx-keyidx" title="nm_setting_wireless_security_get_wep_tx_keyidx ()">nm_setting_wireless_security_get_wep_tx_keyidx</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-tx-keyidx" title="nm_setting_wireless_security_get_wep_tx_keyidx ()">nm_setting_wireless_security_get_wep_tx_keyidx</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
@@ -3776,7 +4593,7 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-new" title="nm_setting_wireless_security_new ()">nm_setting_wireless_security_new</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-new" title="nm_setting_wireless_security_new ()">nm_setting_wireless_security_new</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
@@ -3796,15 +4613,27 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group" title="nm_setting_wireless_security_remove_group ()">nm_setting_wireless_security_remove_group</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group" title="nm_setting_wireless_security_remove_group ()">nm_setting_wireless_security_remove_group</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group-by-value" title="nm_setting_wireless_security_remove_group_by_value ()">nm_setting_wireless_security_remove_group_by_value</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise" title="nm_setting_wireless_security_remove_pairwise ()">nm_setting_wireless_security_remove_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise" title="nm_setting_wireless_security_remove_pairwise ()">nm_setting_wireless_security_remove_pairwise</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise-by-value" title="nm_setting_wireless_security_remove_pairwise_by_value ()">nm_setting_wireless_security_remove_pairwise_by_value</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto" title="nm_setting_wireless_security_remove_proto ()">nm_setting_wireless_security_remove_proto</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto" title="nm_setting_wireless_security_remove_proto ()">nm_setting_wireless_security_remove_proto</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto-by-value" title="nm_setting_wireless_security_remove_proto_by_value ()">nm_setting_wireless_security_remove_proto_by_value</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
@@ -3812,7 +4641,7 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-set-wep-key" title="nm_setting_wireless_security_set_wep_key ()">nm_setting_wireless_security_set_wep_key</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#nm-setting-wireless-security-set-wep-key" title="nm_setting_wireless_security_set_wep_key ()">nm_setting_wireless_security_set_wep_key</a>, function in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
<dt>
@@ -3861,39 +4690,59 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
<dd></dd>
<a name="idxU"></a><h3 class="title">U</h3>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType" title="enum NMUtilsSecurityType">NMUtilsSecurityType</a>, enum in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType-enum" title="enum NMUtilsSecurityType">NMUtilsSecurityType</a>, enum in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" title="nm_utils_ap_mode_security_valid ()">nm_utils_ap_mode_security_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" title="nm_utils_ap_mode_security_valid ()">nm_utils_ap_mode_security_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-bin2hexstr" title="nm_utils_bin2hexstr ()">nm_utils_bin2hexstr</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-deinit" title="nm_utils_deinit ()">nm_utils_deinit</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-check-virtual-device-compatibility" title="nm_utils_check_virtual_device_compatibility ()">nm_utils_check_virtual_device_compatibility</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-escape-ssid" title="nm_utils_escape_ssid ()">nm_utils_escape_ssid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-deinit" title="nm_utils_deinit ()">nm_utils_deinit</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-escape-ssid" title="nm_utils_escape_ssid ()">nm_utils_escape_ssid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-gvalue-hash-dup" title="nm_utils_gvalue_hash_dup ()">nm_utils_gvalue_hash_dup</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba" title="nm_utils_hwaddr_atoba ()">nm_utils_hwaddr_atoba</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-gvalue-hash-dup" title="nm_utils_gvalue_hash_dup ()">nm_utils_gvalue_hash_dup</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()">nm_utils_hwaddr_aton</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hex2byte" title="nm_utils_hex2byte ()">nm_utils_hex2byte</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()">nm_utils_hwaddr_len</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hexstr2bin" title="nm_utils_hexstr2bin ()">nm_utils_hexstr2bin</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba" title="nm_utils_hwaddr_atoba ()">nm_utils_hwaddr_atoba</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()">nm_utils_hwaddr_aton</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton-len" title="nm_utils_hwaddr_aton_len ()">nm_utils_hwaddr_aton_len</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()">nm_utils_hwaddr_len</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
@@ -3901,154 +4750,178 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa" title="nm_utils_hwaddr_ntoa ()">nm_utils_hwaddr_ntoa</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa" title="nm_utils_hwaddr_ntoa ()">nm_utils_hwaddr_ntoa</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa-len" title="nm_utils_hwaddr_ntoa_len ()">nm_utils_hwaddr_ntoa_len</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-type" title="nm_utils_hwaddr_type ()">nm_utils_hwaddr_type</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-valid" title="nm_utils_hwaddr_valid ()">nm_utils_hwaddr_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-iface-valid-name" title="nm_utils_iface_valid_name ()">nm_utils_iface_valid_name</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-inet4-ntop" title="nm_utils_inet4_ntop ()">nm_utils_inet4_ntop</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()">nm_utils_inet6_ntop</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-type" title="nm_utils_hwaddr_type ()">nm_utils_hwaddr_type</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS" title="NM_UTILS_INET_ADDRSTRLEN">NM_UTILS_INET_ADDRSTRLEN</a>, macro in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-iface-valid-name" title="nm_utils_iface_valid_name ()">nm_utils_iface_valid_name</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()">nm_utils_init</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()">nm_utils_init</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-from-gvalue" title="nm_utils_ip4_addresses_from_gvalue ()">nm_utils_ip4_addresses_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-from-gvalue" title="nm_utils_ip4_addresses_from_gvalue ()">nm_utils_ip4_addresses_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-to-gvalue" title="nm_utils_ip4_addresses_to_gvalue ()">nm_utils_ip4_addresses_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-to-gvalue" title="nm_utils_ip4_addresses_to_gvalue ()">nm_utils_ip4_addresses_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-get-default-prefix" title="nm_utils_ip4_get_default_prefix ()">nm_utils_ip4_get_default_prefix</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-get-default-prefix" title="nm_utils_ip4_get_default_prefix ()">nm_utils_ip4_get_default_prefix</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-netmask-to-prefix" title="nm_utils_ip4_netmask_to_prefix ()">nm_utils_ip4_netmask_to_prefix</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-netmask-to-prefix" title="nm_utils_ip4_netmask_to_prefix ()">nm_utils_ip4_netmask_to_prefix</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-prefix-to-netmask" title="nm_utils_ip4_prefix_to_netmask ()">nm_utils_ip4_prefix_to_netmask</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-prefix-to-netmask" title="nm_utils_ip4_prefix_to_netmask ()">nm_utils_ip4_prefix_to_netmask</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-from-gvalue" title="nm_utils_ip4_routes_from_gvalue ()">nm_utils_ip4_routes_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-from-gvalue" title="nm_utils_ip4_routes_from_gvalue ()">nm_utils_ip4_routes_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-to-gvalue" title="nm_utils_ip4_routes_to_gvalue ()">nm_utils_ip4_routes_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-to-gvalue" title="nm_utils_ip4_routes_to_gvalue ()">nm_utils_ip4_routes_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-from-gvalue" title="nm_utils_ip6_addresses_from_gvalue ()">nm_utils_ip6_addresses_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-from-gvalue" title="nm_utils_ip6_addresses_from_gvalue ()">nm_utils_ip6_addresses_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-to-gvalue" title="nm_utils_ip6_addresses_to_gvalue ()">nm_utils_ip6_addresses_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-to-gvalue" title="nm_utils_ip6_addresses_to_gvalue ()">nm_utils_ip6_addresses_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-from-gvalue" title="nm_utils_ip6_dns_from_gvalue ()">nm_utils_ip6_dns_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-from-gvalue" title="nm_utils_ip6_dns_from_gvalue ()">nm_utils_ip6_dns_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-to-gvalue" title="nm_utils_ip6_dns_to_gvalue ()">nm_utils_ip6_dns_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-to-gvalue" title="nm_utils_ip6_dns_to_gvalue ()">nm_utils_ip6_dns_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-from-gvalue" title="nm_utils_ip6_routes_from_gvalue ()">nm_utils_ip6_routes_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-from-gvalue" title="nm_utils_ip6_routes_from_gvalue ()">nm_utils_ip6_routes_from_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-to-gvalue" title="nm_utils_ip6_routes_to_gvalue ()">nm_utils_ip6_routes_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-to-gvalue" title="nm_utils_ip6_routes_to_gvalue ()">nm_utils_ip6_routes_to_gvalue</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-is-empty-ssid" title="nm_utils_is_empty_ssid ()">nm_utils_is_empty_ssid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-is-empty-ssid" title="nm_utils_is_empty_ssid ()">nm_utils_is_empty_ssid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-is-uuid" title="nm_utils_is_uuid ()">nm_utils_is_uuid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-is-uuid" title="nm_utils_is_uuid ()">nm_utils_is_uuid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt" title="nm_utils_rsa_key_encrypt ()">nm_utils_rsa_key_encrypt</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt" title="nm_utils_rsa_key_encrypt ()">nm_utils_rsa_key_encrypt</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt-aes" title="nm_utils_rsa_key_encrypt_aes ()">nm_utils_rsa_key_encrypt_aes</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-same-ssid" title="nm_utils_same_ssid ()">nm_utils_same_ssid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-same-ssid" title="nm_utils_same_ssid ()">nm_utils_same_ssid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-security-valid" title="nm_utils_security_valid ()">nm_utils_security_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-security-valid" title="nm_utils_security_valid ()">nm_utils_security_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-slist-free" title="nm_utils_slist_free ()">nm_utils_slist_free</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-slist-free" title="nm_utils_slist_free ()">nm_utils_slist_free</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ssid-to-utf8" title="nm_utils_ssid_to_utf8 ()">nm_utils_ssid_to_utf8</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-ssid-to-utf8" title="nm_utils_ssid_to_utf8 ()">nm_utils_ssid_to_utf8</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()">nm_utils_uuid_generate</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()">nm_utils_uuid_generate</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string" title="nm_utils_uuid_generate_from_string ()">nm_utils_uuid_generate_from_string</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string" title="nm_utils_uuid_generate_from_string ()">nm_utils_uuid_generate_from_string</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wep-key-valid" title="nm_utils_wep_key_valid ()">nm_utils_wep_key_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-wep-key-valid" title="nm_utils_wep_key_valid ()">nm_utils_wep_key_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq" title="nm_utils_wifi_channel_to_freq ()">nm_utils_wifi_channel_to_freq</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq" title="nm_utils_wifi_channel_to_freq ()">nm_utils_wifi_channel_to_freq</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel" title="nm_utils_wifi_find_next_channel ()">nm_utils_wifi_find_next_channel</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel" title="nm_utils_wifi_find_next_channel ()">nm_utils_wifi_find_next_channel</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-freq-to-channel" title="nm_utils_wifi_freq_to_channel ()">nm_utils_wifi_freq_to_channel</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-freq-to-channel" title="nm_utils_wifi_freq_to_channel ()">nm_utils_wifi_freq_to_channel</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid" title="nm_utils_wifi_is_channel_valid ()">nm_utils_wifi_is_channel_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid" title="nm_utils_wifi_is_channel_valid ()">nm_utils_wifi_is_channel_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wpa-psk-valid" title="nm_utils_wpa_psk_valid ()">nm_utils_wpa_psk_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-wpa-psk-valid" title="nm_utils_wpa_psk_valid ()">nm_utils_wpa_psk_valid</a>, function in <a class="link" href="libnm-util-nm-utils.html" title="nm-utils">nm-utils</a>
</dt>
<dd></dd>
<a name="idxV"></a><h3 class="title">V</h3>
<dt>
-<a class="link" href="NMSettingVlan.html#NMVlanFlags" title="enum NMVlanFlags">NMVlanFlags</a>, enum in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#NMVlanFlags-enum" title="enum NMVlanFlags">NMVlanFlags</a>, enum in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap">NMVlanPriorityMap</a>, enum in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+<a class="link" href="NMSettingVlan.html#NMVlanPriorityMap-enum" title="enum NMVlanPriorityMap">NMVlanPriorityMap</a>, enum in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()">NMVPNIterFunc</a>, user_function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+<a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()">NMVPNIterFunc</a>, user_function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
</dt>
<dd></dd>
<a name="idxW"></a><h3 class="title">W</h3>
<dt>
-<a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType">NMWepKeyType</a>, enum in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+<a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType-enum" title="enum NMWepKeyType">NMWepKeyType</a>, enum in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
</dt>
<dd></dd>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/ch01.html b/docs/libnm-util/html/ch01.html
index 6b733efee..88a43401e 100644
--- a/docs/libnm-util/html/ch01.html
+++ b/docs/libnm-util/html/ch01.html
@@ -2,22 +2,22 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: libnm-util API Reference</title>
+<title>libnm-util API Reference</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="index.html" title="libnm-util Reference Manual">
<link rel="prev" href="index.html" title="libnm-util Reference Manual">
<link rel="next" href="NMConnection.html" title="NMConnection">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="NMConnection.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
@@ -36,10 +36,10 @@
<span class="refentrytitle"><a href="NMSettingWired.html">NMSettingWired</a></span><span class="refpurpose"> — Describes connection properties for Ethernet-based networks</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="NMSettingWireless.html">NMSettingWireless</a></span><span class="refpurpose"> — Describes connection properties for 802.11 WiFi networks</span>
+<span class="refentrytitle"><a href="NMSettingWireless.html">NMSettingWireless</a></span><span class="refpurpose"> — Describes connection properties for 802.11 Wi-Fi networks</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="NMSettingWirelessSecurity.html">NMSettingWirelessSecurity</a></span><span class="refpurpose"> — Describes connection properties for WiFi networks that
+<span class="refentrytitle"><a href="NMSettingWirelessSecurity.html">NMSettingWirelessSecurity</a></span><span class="refpurpose"> — Describes connection properties for Wi-Fi networks that
use WEP, LEAP, WPA or WPA2/RSN security</span>
</dt>
<dt>
@@ -68,6 +68,15 @@ serial communications</span>
<span class="refentrytitle"><a href="NMSettingBridgePort.html">NMSettingBridgePort</a></span><span class="refpurpose"> — Describes connection properties for bridge ports</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="NMSettingTeam.html">NMSettingTeam</a></span><span class="refpurpose"> — Describes connection properties for teams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingTeamPort.html">NMSettingTeamPort</a></span><span class="refpurpose"> — Describes connection properties for team ports</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingGeneric.html">NMSettingGeneric</a></span><span class="refpurpose"> — Describes connection properties for generic devices</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMSettingInfiniband.html">NMSettingInfiniband</a></span><span class="refpurpose"> — Describes connection properties for IP-over-InfiniBand networks</span>
</dt>
<dt>
@@ -80,6 +89,9 @@ serial communications</span>
<span class="refentrytitle"><a href="NMSettingAdsl.html">NMSettingAdsl</a></span><span class="refpurpose"> — Describes ADSL-based properties</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="NMSettingDcb.html">NMSettingDcb</a></span><span class="refpurpose"> — Connection properties for Data Center Bridging</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMSetting8021x.html">NMSetting8021x</a></span><span class="refpurpose"> — Describes 802.1x-authenticated connection properties</span>
</dt>
<dt>
@@ -105,6 +117,6 @@ that require PPP to deliver IP capability</span>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/home.png b/docs/libnm-util/html/home.png
index 9346b336a..17003611d 100644
--- a/docs/libnm-util/html/home.png
+++ b/docs/libnm-util/html/home.png
Binary files differ
diff --git a/docs/libnm-util/html/index.html b/docs/libnm-util/html/index.html
index 8eecb7c80..aa9390e13 100644
--- a/docs/libnm-util/html/index.html
+++ b/docs/libnm-util/html/index.html
@@ -2,11 +2,11 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: libnm-util Reference Manual</title>
+<title>libnm-util Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="next" href="ch01.html" title="libnm-util API Reference">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm-util Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for libnm-util 0.9.8.10
+ for libnm-util 0.9.10.0
The latest version of this documentation can be found on-line at
<a class="ulink" href="https://developer.gnome.org/libnm-util/0.9/" target="_top">https://developer.gnome.org/libnm-util/0.9/</a>.
@@ -62,10 +62,10 @@
<span class="refentrytitle"><a href="NMSettingWired.html">NMSettingWired</a></span><span class="refpurpose"> — Describes connection properties for Ethernet-based networks</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="NMSettingWireless.html">NMSettingWireless</a></span><span class="refpurpose"> — Describes connection properties for 802.11 WiFi networks</span>
+<span class="refentrytitle"><a href="NMSettingWireless.html">NMSettingWireless</a></span><span class="refpurpose"> — Describes connection properties for 802.11 Wi-Fi networks</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="NMSettingWirelessSecurity.html">NMSettingWirelessSecurity</a></span><span class="refpurpose"> — Describes connection properties for WiFi networks that
+<span class="refentrytitle"><a href="NMSettingWirelessSecurity.html">NMSettingWirelessSecurity</a></span><span class="refpurpose"> — Describes connection properties for Wi-Fi networks that
use WEP, LEAP, WPA or WPA2/RSN security</span>
</dt>
<dt>
@@ -94,6 +94,15 @@ serial communications</span>
<span class="refentrytitle"><a href="NMSettingBridgePort.html">NMSettingBridgePort</a></span><span class="refpurpose"> — Describes connection properties for bridge ports</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="NMSettingTeam.html">NMSettingTeam</a></span><span class="refpurpose"> — Describes connection properties for teams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingTeamPort.html">NMSettingTeamPort</a></span><span class="refpurpose"> — Describes connection properties for team ports</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingGeneric.html">NMSettingGeneric</a></span><span class="refpurpose"> — Describes connection properties for generic devices</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMSettingInfiniband.html">NMSettingInfiniband</a></span><span class="refpurpose"> — Describes connection properties for IP-over-InfiniBand networks</span>
</dt>
<dt>
@@ -106,6 +115,9 @@ serial communications</span>
<span class="refentrytitle"><a href="NMSettingAdsl.html">NMSettingAdsl</a></span><span class="refpurpose"> — Describes ADSL-based properties</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="NMSettingDcb.html">NMSettingDcb</a></span><span class="refpurpose"> — Connection properties for Data Center Bridging</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMSetting8021x.html">NMSetting8021x</a></span><span class="refpurpose"> — Describes 802.1x-authenticated connection properties</span>
</dt>
<dt>
@@ -135,6 +147,6 @@ that require PPP to deliver IP capability</span>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/index.sgml b/docs/libnm-util/html/index.sgml
index 9fbc3d5cb..ad7d61c93 100644
--- a/docs/libnm-util/html/index.sgml
+++ b/docs/libnm-util/html/index.sgml
@@ -1,14 +1,25 @@
<ONLINE href="https://developer.gnome.org/libnm-util/0.9/">
<ANCHOR id="NMConnection" href="libnm-util/NMConnection.html">
-<ANCHOR id="NMConnection.functions" href="libnm-util/NMConnection.html#NMConnection.functions">
+<ANCHOR id="NMConnection.synopsis" href="libnm-util/NMConnection.html#NMConnection.synopsis">
+<ANCHOR id="NMConnectionError" href="libnm-util/NMConnection.html#NMConnectionError">
+<ANCHOR id="NMConnection.object-hierarchy" href="libnm-util/NMConnection.html#NMConnection.object-hierarchy">
<ANCHOR id="NMConnection.properties" href="libnm-util/NMConnection.html#NMConnection.properties">
<ANCHOR id="NMConnection.signals" href="libnm-util/NMConnection.html#NMConnection.signals">
-<ANCHOR id="NMConnection.other" href="libnm-util/NMConnection.html#NMConnection.other">
-<ANCHOR id="NMConnection.object-hierarchy" href="libnm-util/NMConnection.html#NMConnection.object-hierarchy">
-<ANCHOR id="NMConnection.includes" href="libnm-util/NMConnection.html#NMConnection.includes">
<ANCHOR id="NMConnection.description" href="libnm-util/NMConnection.html#NMConnection.description">
-<ANCHOR id="NMConnection.functions_details" href="libnm-util/NMConnection.html#NMConnection.functions_details">
+<ANCHOR id="NMConnection.details" href="libnm-util/NMConnection.html#NMConnection.details">
+<ANCHOR id="NM-CONNECTION-SECRETS-UPDATED:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS">
+<ANCHOR id="NM-CONNECTION-SECRETS-CLEARED:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS">
+<ANCHOR id="NM-CONNECTION-CHANGED:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-CHANGED:CAPS">
+<ANCHOR id="NM-CONNECTION-PATH:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-PATH:CAPS">
+<ANCHOR id="NMConnectionError-enum" href="libnm-util/NMConnection.html#NMConnectionError-enum">
+<ANCHOR id="NM-CONNECTION-ERROR-UNKNOWN:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR:CAPS">
<ANCHOR id="nm-connection-error-quark" href="libnm-util/NMConnection.html#nm-connection-error-quark">
+<ANCHOR id="NMConnection-struct" href="libnm-util/NMConnection.html#NMConnection-struct">
+<ANCHOR id="NMConnectionClass" href="libnm-util/NMConnection.html#NMConnectionClass">
<ANCHOR id="nm-connection-new" href="libnm-util/NMConnection.html#nm-connection-new">
<ANCHOR id="nm-connection-new-from-hash" href="libnm-util/NMConnection.html#nm-connection-new-from-hash">
<ANCHOR id="nm-connection-duplicate" href="libnm-util/NMConnection.html#nm-connection-duplicate">
@@ -18,6 +29,7 @@
<ANCHOR id="nm-connection-get-setting" href="libnm-util/NMConnection.html#nm-connection-get-setting">
<ANCHOR id="nm-connection-get-setting-by-name" href="libnm-util/NMConnection.html#nm-connection-get-setting-by-name">
<ANCHOR id="nm-connection-replace-settings" href="libnm-util/NMConnection.html#nm-connection-replace-settings">
+<ANCHOR id="nm-connection-replace-settings-from-connection" href="libnm-util/NMConnection.html#nm-connection-replace-settings-from-connection">
<ANCHOR id="nm-connection-compare" href="libnm-util/NMConnection.html#nm-connection-compare">
<ANCHOR id="nm-connection-diff" href="libnm-util/NMConnection.html#nm-connection-diff">
<ANCHOR id="nm-connection-verify" href="libnm-util/NMConnection.html#nm-connection-verify">
@@ -36,13 +48,19 @@
<ANCHOR id="nm-connection-lookup-setting-type-by-quark" href="libnm-util/NMConnection.html#nm-connection-lookup-setting-type-by-quark">
<ANCHOR id="nm-connection-get-uuid" href="libnm-util/NMConnection.html#nm-connection-get-uuid">
<ANCHOR id="nm-connection-get-id" href="libnm-util/NMConnection.html#nm-connection-get-id">
+<ANCHOR id="nm-connection-get-connection-type" href="libnm-util/NMConnection.html#nm-connection-get-connection-type">
+<ANCHOR id="nm-connection-get-virtual-device-description" href="libnm-util/NMConnection.html#nm-connection-get-virtual-device-description">
<ANCHOR id="nm-connection-get-setting-802-1x" href="libnm-util/NMConnection.html#nm-connection-get-setting-802-1x">
<ANCHOR id="nm-connection-get-setting-bluetooth" href="libnm-util/NMConnection.html#nm-connection-get-setting-bluetooth">
<ANCHOR id="nm-connection-get-setting-bond" href="libnm-util/NMConnection.html#nm-connection-get-setting-bond">
+<ANCHOR id="nm-connection-get-setting-team" href="libnm-util/NMConnection.html#nm-connection-get-setting-team">
+<ANCHOR id="nm-connection-get-setting-team-port" href="libnm-util/NMConnection.html#nm-connection-get-setting-team-port">
<ANCHOR id="nm-connection-get-setting-bridge" href="libnm-util/NMConnection.html#nm-connection-get-setting-bridge">
<ANCHOR id="nm-connection-get-setting-bridge-port" href="libnm-util/NMConnection.html#nm-connection-get-setting-bridge-port">
<ANCHOR id="nm-connection-get-setting-cdma" href="libnm-util/NMConnection.html#nm-connection-get-setting-cdma">
<ANCHOR id="nm-connection-get-setting-connection" href="libnm-util/NMConnection.html#nm-connection-get-setting-connection">
+<ANCHOR id="nm-connection-get-setting-dcb" href="libnm-util/NMConnection.html#nm-connection-get-setting-dcb">
+<ANCHOR id="nm-connection-get-setting-generic" href="libnm-util/NMConnection.html#nm-connection-get-setting-generic">
<ANCHOR id="nm-connection-get-setting-gsm" href="libnm-util/NMConnection.html#nm-connection-get-setting-gsm">
<ANCHOR id="nm-connection-get-setting-infiniband" href="libnm-util/NMConnection.html#nm-connection-get-setting-infiniband">
<ANCHOR id="nm-connection-get-setting-ip4-config" href="libnm-util/NMConnection.html#nm-connection-get-setting-ip4-config">
@@ -58,37 +76,65 @@
<ANCHOR id="nm-connection-get-setting-wireless" href="libnm-util/NMConnection.html#nm-connection-get-setting-wireless">
<ANCHOR id="nm-connection-get-setting-wireless-security" href="libnm-util/NMConnection.html#nm-connection-get-setting-wireless-security">
<ANCHOR id="nm-connection-get-setting-vlan" href="libnm-util/NMConnection.html#nm-connection-get-setting-vlan">
-<ANCHOR id="NMConnection.other_details" href="libnm-util/NMConnection.html#NMConnection.other_details">
-<ANCHOR id="NMConnectionError" href="libnm-util/NMConnection.html#NMConnectionError">
-<ANCHOR id="NM-CONNECTION-ERROR:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR:CAPS">
-<ANCHOR id="NM-CONNECTION-PATH:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-PATH:CAPS">
-<ANCHOR id="NMConnection-struct" href="libnm-util/NMConnection.html#NMConnection-struct">
<ANCHOR id="NMConnection.property-details" href="libnm-util/NMConnection.html#NMConnection.property-details">
<ANCHOR id="NMConnection--path" href="libnm-util/NMConnection.html#NMConnection--path">
<ANCHOR id="NMConnection.signal-details" href="libnm-util/NMConnection.html#NMConnection.signal-details">
+<ANCHOR id="NMConnection-changed" href="libnm-util/NMConnection.html#NMConnection-changed">
<ANCHOR id="NMConnection-secrets-cleared" href="libnm-util/NMConnection.html#NMConnection-secrets-cleared">
<ANCHOR id="NMConnection-secrets-updated" href="libnm-util/NMConnection.html#NMConnection-secrets-updated">
<ANCHOR id="NMSetting" href="libnm-util/NMSetting.html">
-<ANCHOR id="NMSetting.functions" href="libnm-util/NMSetting.html#NMSetting.functions">
-<ANCHOR id="NMSetting.properties" href="libnm-util/NMSetting.html#NMSetting.properties">
-<ANCHOR id="NMSetting.other" href="libnm-util/NMSetting.html#NMSetting.other">
+<ANCHOR id="NMSetting.synopsis" href="libnm-util/NMSetting.html#NMSetting.synopsis">
+<ANCHOR id="NMSettingError" href="libnm-util/NMSetting.html#NMSettingError">
+<ANCHOR id="NMSettingSecretFlags" href="libnm-util/NMSetting.html#NMSettingSecretFlags">
+<ANCHOR id="NMSettingCompareFlags" href="libnm-util/NMSetting.html#NMSettingCompareFlags">
+<ANCHOR id="NMSettingHashFlags" href="libnm-util/NMSetting.html#NMSettingHashFlags">
+<ANCHOR id="NMSettingDiffResult" href="libnm-util/NMSetting.html#NMSettingDiffResult">
<ANCHOR id="NMSetting.object-hierarchy" href="libnm-util/NMSetting.html#NMSetting.object-hierarchy">
-<ANCHOR id="NMSetting.includes" href="libnm-util/NMSetting.html#NMSetting.includes">
+<ANCHOR id="NMSetting.properties" href="libnm-util/NMSetting.html#NMSetting.properties">
<ANCHOR id="NMSetting.description" href="libnm-util/NMSetting.html#NMSetting.description">
-<ANCHOR id="NMSetting.functions_details" href="libnm-util/NMSetting.html#NMSetting.functions_details">
+<ANCHOR id="NMSetting.details" href="libnm-util/NMSetting.html#NMSetting.details">
+<ANCHOR id="NMSettingError-enum" href="libnm-util/NMSetting.html#NMSettingError-enum">
+<ANCHOR id="NM-SETTING-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-ERROR-PROPERTY-NOT-FOUND:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-ERROR-PROPERTY-NOT-FOUND:CAPS">
+<ANCHOR id="NM-SETTING-ERROR-PROPERTY-NOT-SECRET:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-ERROR-PROPERTY-NOT-SECRET:CAPS">
+<ANCHOR id="NM-SETTING-ERROR-PROPERTY-TYPE-MISMATCH:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-ERROR-PROPERTY-TYPE-MISMATCH:CAPS">
+<ANCHOR id="NM-SETTING-ERROR:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-ERROR:CAPS">
<ANCHOR id="nm-setting-error-quark" href="libnm-util/NMSetting.html#nm-setting-error-quark">
<ANCHOR id="NM-SETTING-PARAM-SERIALIZE:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-PARAM-SERIALIZE:CAPS">
<ANCHOR id="NM-SETTING-PARAM-REQUIRED:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-PARAM-REQUIRED:CAPS">
<ANCHOR id="NM-SETTING-PARAM-SECRET:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS">
<ANCHOR id="NM-SETTING-PARAM-FUZZY-IGNORE:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-PARAM-FUZZY-IGNORE:CAPS">
+<ANCHOR id="NM-SETTING-NAME:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingSecretFlags-enum" href="libnm-util/NMSetting.html#NMSettingSecretFlags-enum">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-NONE:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-SECRET-FLAG-NONE:CAPS">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-NOT-SAVED:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-SECRET-FLAG-NOT-SAVED:CAPS">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-NOT-REQUIRED:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-SECRET-FLAG-NOT-REQUIRED:CAPS">
+<ANCHOR id="NMSettingCompareFlags-enum" href="libnm-util/NMSetting.html#NMSettingCompareFlags-enum">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-EXACT:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-FUZZY:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-FUZZY:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-ID:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-ID:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-SECRETS:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-SECRETS:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS">
+<ANCHOR id="NMSetting-struct" href="libnm-util/NMSetting.html#NMSetting-struct">
<ANCHOR id="NMSettingClearSecretsWithFlagsFn" href="libnm-util/NMSetting.html#NMSettingClearSecretsWithFlagsFn">
+<ANCHOR id="NMSettingClass" href="libnm-util/NMSetting.html#NMSettingClass">
<ANCHOR id="NMSettingValueIterFn" href="libnm-util/NMSetting.html#NMSettingValueIterFn">
+<ANCHOR id="NMSettingHashFlags-enum" href="libnm-util/NMSetting.html#NMSettingHashFlags-enum">
+<ANCHOR id="NM-SETTING-HASH-FLAG-ALL:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS">
+<ANCHOR id="NM-SETTING-HASH-FLAG-NO-SECRETS:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-HASH-FLAG-NO-SECRETS:CAPS">
+<ANCHOR id="NM-SETTING-HASH-FLAG-ONLY-SECRETS:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-HASH-FLAG-ONLY-SECRETS:CAPS">
<ANCHOR id="nm-setting-to-hash" href="libnm-util/NMSetting.html#nm-setting-to-hash">
<ANCHOR id="nm-setting-new-from-hash" href="libnm-util/NMSetting.html#nm-setting-new-from-hash">
<ANCHOR id="nm-setting-duplicate" href="libnm-util/NMSetting.html#nm-setting-duplicate">
<ANCHOR id="nm-setting-get-name" href="libnm-util/NMSetting.html#nm-setting-get-name">
<ANCHOR id="nm-setting-verify" href="libnm-util/NMSetting.html#nm-setting-verify">
<ANCHOR id="nm-setting-compare" href="libnm-util/NMSetting.html#nm-setting-compare">
+<ANCHOR id="NMSettingDiffResult-enum" href="libnm-util/NMSetting.html#NMSettingDiffResult-enum">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-UNKNOWN:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-DIFF-RESULT-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-IN-A:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-A:CAPS">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-IN-B:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-B:CAPS">
<ANCHOR id="nm-setting-diff" href="libnm-util/NMSetting.html#nm-setting-diff">
<ANCHOR id="nm-setting-enumerate-values" href="libnm-util/NMSetting.html#nm-setting-enumerate-values">
<ANCHOR id="nm-setting-to-string" href="libnm-util/NMSetting.html#nm-setting-to-string">
@@ -99,29 +145,43 @@
<ANCHOR id="nm-setting-get-secret-flags" href="libnm-util/NMSetting.html#nm-setting-get-secret-flags">
<ANCHOR id="nm-setting-set-secret-flags" href="libnm-util/NMSetting.html#nm-setting-set-secret-flags">
<ANCHOR id="nm-setting-get-virtual-iface-name" href="libnm-util/NMSetting.html#nm-setting-get-virtual-iface-name">
-<ANCHOR id="NMSetting.other_details" href="libnm-util/NMSetting.html#NMSetting.other_details">
-<ANCHOR id="NMSettingError" href="libnm-util/NMSetting.html#NMSettingError">
-<ANCHOR id="NM-SETTING-ERROR:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-NAME:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingSecretFlags" href="libnm-util/NMSetting.html#NMSettingSecretFlags">
-<ANCHOR id="NMSettingCompareFlags" href="libnm-util/NMSetting.html#NMSettingCompareFlags">
-<ANCHOR id="NMSetting-struct" href="libnm-util/NMSetting.html#NMSetting-struct">
-<ANCHOR id="NMSettingHashFlags" href="libnm-util/NMSetting.html#NMSettingHashFlags">
-<ANCHOR id="NMSettingDiffResult" href="libnm-util/NMSetting.html#NMSettingDiffResult">
<ANCHOR id="NMSetting.property-details" href="libnm-util/NMSetting.html#NMSetting.property-details">
<ANCHOR id="NMSetting--name" href="libnm-util/NMSetting.html#NMSetting--name">
<ANCHOR id="NMSettingConnection" href="libnm-util/NMSettingConnection.html">
-<ANCHOR id="NMSettingConnection.functions" href="libnm-util/NMSettingConnection.html#NMSettingConnection.functions">
-<ANCHOR id="NMSettingConnection.properties" href="libnm-util/NMSettingConnection.html#NMSettingConnection.properties">
-<ANCHOR id="NMSettingConnection.other" href="libnm-util/NMSettingConnection.html#NMSettingConnection.other">
+<ANCHOR id="NMSettingConnection.synopsis" href="libnm-util/NMSettingConnection.html#NMSettingConnection.synopsis">
+<ANCHOR id="NMSettingConnectionError" href="libnm-util/NMSettingConnection.html#NMSettingConnectionError">
<ANCHOR id="NMSettingConnection.object-hierarchy" href="libnm-util/NMSettingConnection.html#NMSettingConnection.object-hierarchy">
-<ANCHOR id="NMSettingConnection.includes" href="libnm-util/NMSettingConnection.html#NMSettingConnection.includes">
+<ANCHOR id="NMSettingConnection.properties" href="libnm-util/NMSettingConnection.html#NMSettingConnection.properties">
<ANCHOR id="NMSettingConnection.description" href="libnm-util/NMSettingConnection.html#NMSettingConnection.description">
-<ANCHOR id="NMSettingConnection.functions_details" href="libnm-util/NMSettingConnection.html#NMSettingConnection.functions_details">
+<ANCHOR id="NMSettingConnection.details" href="libnm-util/NMSettingConnection.html#NMSettingConnection.details">
+<ANCHOR id="NM-SETTING-CONNECTION-SETTING-NAME:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingConnectionError-enum" href="libnm-util/NMSettingConnection.html#NMSettingConnectionError-enum">
+<ANCHOR id="NM-SETTING-CONNECTION-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ERROR-TYPE-SETTING-NOT-FOUND:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-TYPE-SETTING-NOT-FOUND:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ERROR-IP-CONFIG-NOT-ALLOWED:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-IP-CONFIG-NOT-ALLOWED:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ERROR:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR:CAPS">
<ANCHOR id="nm-setting-connection-error-quark" href="libnm-util/NMSettingConnection.html#nm-setting-connection-error-quark">
+<ANCHOR id="NM-SETTING-CONNECTION-ID:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-UUID:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-UUID:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-TYPE:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-AUTOCONNECT:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-TIMESTAMP:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-TIMESTAMP:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-READ-ONLY:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-READ-ONLY:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-PERMISSIONS:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-PERMISSIONS:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ZONE:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ZONE:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-MASTER:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-MASTER:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-SECONDARIES:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-SECONDARIES:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS">
+<ANCHOR id="NMSettingConnection-struct" href="libnm-util/NMSettingConnection.html#NMSettingConnection-struct">
+<ANCHOR id="NMSettingConnectionClass" href="libnm-util/NMSettingConnection.html#NMSettingConnectionClass">
<ANCHOR id="nm-setting-connection-new" href="libnm-util/NMSettingConnection.html#nm-setting-connection-new">
<ANCHOR id="nm-setting-connection-get-id" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-id">
<ANCHOR id="nm-setting-connection-get-uuid" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-uuid">
+<ANCHOR id="nm-setting-connection-get-interface-name" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-interface-name">
<ANCHOR id="nm-setting-connection-get-connection-type" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-connection-type">
<ANCHOR id="nm-setting-connection-get-autoconnect" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-autoconnect">
<ANCHOR id="nm-setting-connection-get-timestamp" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-timestamp">
@@ -132,6 +192,7 @@
<ANCHOR id="nm-setting-connection-permissions-user-allowed" href="libnm-util/NMSettingConnection.html#nm-setting-connection-permissions-user-allowed">
<ANCHOR id="nm-setting-connection-add-permission" href="libnm-util/NMSettingConnection.html#nm-setting-connection-add-permission">
<ANCHOR id="nm-setting-connection-remove-permission" href="libnm-util/NMSettingConnection.html#nm-setting-connection-remove-permission">
+<ANCHOR id="nm-setting-connection-remove-permission-by-value" href="libnm-util/NMSettingConnection.html#nm-setting-connection-remove-permission-by-value">
<ANCHOR id="nm-setting-connection-get-master" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-master">
<ANCHOR id="nm-setting-connection-is-slave-type" href="libnm-util/NMSettingConnection.html#nm-setting-connection-is-slave-type">
<ANCHOR id="nm-setting-connection-get-slave-type" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-slave-type">
@@ -139,25 +200,13 @@
<ANCHOR id="nm-setting-connection-get-secondary" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-secondary">
<ANCHOR id="nm-setting-connection-add-secondary" href="libnm-util/NMSettingConnection.html#nm-setting-connection-add-secondary">
<ANCHOR id="nm-setting-connection-remove-secondary" href="libnm-util/NMSettingConnection.html#nm-setting-connection-remove-secondary">
-<ANCHOR id="NMSettingConnection.other_details" href="libnm-util/NMSettingConnection.html#NMSettingConnection.other_details">
-<ANCHOR id="NM-SETTING-CONNECTION-SETTING-NAME:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingConnectionError" href="libnm-util/NMSettingConnection.html#NMSettingConnectionError">
-<ANCHOR id="NM-SETTING-CONNECTION-ERROR:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-ID:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-UUID:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-UUID:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-TYPE:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-TYPE:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-AUTOCONNECT:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-TIMESTAMP:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-TIMESTAMP:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-READ-ONLY:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-READ-ONLY:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-PERMISSIONS:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-PERMISSIONS:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-ZONE:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-ZONE:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-MASTER:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-MASTER:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS">
-<ANCHOR id="NM-SETTING-CONNECTION-SECONDARIES:CAPS" href="libnm-util/NMSettingConnection.html#NM-SETTING-CONNECTION-SECONDARIES:CAPS">
-<ANCHOR id="NMSettingConnection-struct" href="libnm-util/NMSettingConnection.html#NMSettingConnection-struct">
+<ANCHOR id="nm-setting-connection-remove-secondary-by-value" href="libnm-util/NMSettingConnection.html#nm-setting-connection-remove-secondary-by-value">
+<ANCHOR id="nm-setting-connection-get-gateway-ping-timeout" href="libnm-util/NMSettingConnection.html#nm-setting-connection-get-gateway-ping-timeout">
<ANCHOR id="NMSettingConnection.property-details" href="libnm-util/NMSettingConnection.html#NMSettingConnection.property-details">
<ANCHOR id="NMSettingConnection--autoconnect" href="libnm-util/NMSettingConnection.html#NMSettingConnection--autoconnect">
+<ANCHOR id="NMSettingConnection--gateway-ping-timeout" href="libnm-util/NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout">
<ANCHOR id="NMSettingConnection--id" href="libnm-util/NMSettingConnection.html#NMSettingConnection--id">
+<ANCHOR id="NMSettingConnection--interface-name" href="libnm-util/NMSettingConnection.html#NMSettingConnection--interface-name">
<ANCHOR id="NMSettingConnection--master" href="libnm-util/NMSettingConnection.html#NMSettingConnection--master">
<ANCHOR id="NMSettingConnection--permissions" href="libnm-util/NMSettingConnection.html#NMSettingConnection--permissions">
<ANCHOR id="NMSettingConnection--read-only" href="libnm-util/NMSettingConnection.html#NMSettingConnection--read-only">
@@ -168,14 +217,32 @@
<ANCHOR id="NMSettingConnection--uuid" href="libnm-util/NMSettingConnection.html#NMSettingConnection--uuid">
<ANCHOR id="NMSettingConnection--zone" href="libnm-util/NMSettingConnection.html#NMSettingConnection--zone">
<ANCHOR id="NMSettingWired" href="libnm-util/NMSettingWired.html">
-<ANCHOR id="NMSettingWired.functions" href="libnm-util/NMSettingWired.html#NMSettingWired.functions">
-<ANCHOR id="NMSettingWired.properties" href="libnm-util/NMSettingWired.html#NMSettingWired.properties">
-<ANCHOR id="NMSettingWired.other" href="libnm-util/NMSettingWired.html#NMSettingWired.other">
+<ANCHOR id="NMSettingWired.synopsis" href="libnm-util/NMSettingWired.html#NMSettingWired.synopsis">
+<ANCHOR id="NMSettingWiredError" href="libnm-util/NMSettingWired.html#NMSettingWiredError">
<ANCHOR id="NMSettingWired.object-hierarchy" href="libnm-util/NMSettingWired.html#NMSettingWired.object-hierarchy">
-<ANCHOR id="NMSettingWired.includes" href="libnm-util/NMSettingWired.html#NMSettingWired.includes">
+<ANCHOR id="NMSettingWired.properties" href="libnm-util/NMSettingWired.html#NMSettingWired.properties">
<ANCHOR id="NMSettingWired.description" href="libnm-util/NMSettingWired.html#NMSettingWired.description">
-<ANCHOR id="NMSettingWired.functions_details" href="libnm-util/NMSettingWired.html#NMSettingWired.functions_details">
+<ANCHOR id="NMSettingWired.details" href="libnm-util/NMSettingWired.html#NMSettingWired.details">
+<ANCHOR id="NM-SETTING-WIRED-SETTING-NAME:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingWiredError-enum" href="libnm-util/NMSettingWired.html#NMSettingWiredError-enum">
+<ANCHOR id="NM-SETTING-WIRED-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-ERROR:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-ERROR:CAPS">
<ANCHOR id="nm-setting-wired-error-quark" href="libnm-util/NMSettingWired.html#nm-setting-wired-error-quark">
+<ANCHOR id="NM-SETTING-WIRED-PORT:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-PORT:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-SPEED:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-SPEED:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-DUPLEX:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-DUPLEX:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-MAC-ADDRESS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-MTU:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-MTU:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-S390-NETTYPE:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-S390-NETTYPE:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-S390-OPTIONS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-S390-OPTIONS:CAPS">
+<ANCHOR id="NMSettingWired-struct" href="libnm-util/NMSettingWired.html#NMSettingWired-struct">
+<ANCHOR id="NMSettingWiredClass" href="libnm-util/NMSettingWired.html#NMSettingWiredClass">
<ANCHOR id="nm-setting-wired-new" href="libnm-util/NMSettingWired.html#nm-setting-wired-new">
<ANCHOR id="nm-setting-wired-get-port" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-port">
<ANCHOR id="nm-setting-wired-get-speed" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-speed">
@@ -184,6 +251,12 @@
<ANCHOR id="nm-setting-wired-get-mac-address" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-mac-address">
<ANCHOR id="nm-setting-wired-get-cloned-mac-address" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-cloned-mac-address">
<ANCHOR id="nm-setting-wired-get-mac-address-blacklist" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist">
+<ANCHOR id="nm-setting-wired-get-num-mac-blacklist-items" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-num-mac-blacklist-items">
+<ANCHOR id="nm-setting-wired-get-mac-blacklist-item" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-mac-blacklist-item">
+<ANCHOR id="nm-setting-wired-add-mac-blacklist-item" href="libnm-util/NMSettingWired.html#nm-setting-wired-add-mac-blacklist-item">
+<ANCHOR id="nm-setting-wired-remove-mac-blacklist-item" href="libnm-util/NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item">
+<ANCHOR id="nm-setting-wired-remove-mac-blacklist-item-by-value" href="libnm-util/NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item-by-value">
+<ANCHOR id="nm-setting-wired-clear-mac-blacklist-items" href="libnm-util/NMSettingWired.html#nm-setting-wired-clear-mac-blacklist-items">
<ANCHOR id="nm-setting-wired-get-mtu" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-mtu">
<ANCHOR id="nm-setting-wired-get-s390-subchannels" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-s390-subchannels">
<ANCHOR id="nm-setting-wired-get-s390-nettype" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-s390-nettype">
@@ -192,21 +265,7 @@
<ANCHOR id="nm-setting-wired-get-s390-option-by-key" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-s390-option-by-key">
<ANCHOR id="nm-setting-wired-add-s390-option" href="libnm-util/NMSettingWired.html#nm-setting-wired-add-s390-option">
<ANCHOR id="nm-setting-wired-remove-s390-option" href="libnm-util/NMSettingWired.html#nm-setting-wired-remove-s390-option">
-<ANCHOR id="NMSettingWired.other_details" href="libnm-util/NMSettingWired.html#NMSettingWired.other_details">
-<ANCHOR id="NM-SETTING-WIRED-SETTING-NAME:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingWiredError" href="libnm-util/NMSettingWired.html#NMSettingWiredError">
-<ANCHOR id="NM-SETTING-WIRED-ERROR:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-PORT:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-PORT:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-SPEED:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-SPEED:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-DUPLEX:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-DUPLEX:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-MAC-ADDRESS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-MTU:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-MTU:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-S390-NETTYPE:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-S390-NETTYPE:CAPS">
-<ANCHOR id="NM-SETTING-WIRED-S390-OPTIONS:CAPS" href="libnm-util/NMSettingWired.html#NM-SETTING-WIRED-S390-OPTIONS:CAPS">
+<ANCHOR id="nm-setting-wired-get-valid-s390-options" href="libnm-util/NMSettingWired.html#nm-setting-wired-get-valid-s390-options">
<ANCHOR id="NMSettingWired.property-details" href="libnm-util/NMSettingWired.html#NMSettingWired.property-details">
<ANCHOR id="NMSettingWired--auto-negotiate" href="libnm-util/NMSettingWired.html#NMSettingWired--auto-negotiate">
<ANCHOR id="NMSettingWired--cloned-mac-address" href="libnm-util/NMSettingWired.html#NMSettingWired--cloned-mac-address">
@@ -220,36 +279,21 @@
<ANCHOR id="NMSettingWired--s390-subchannels" href="libnm-util/NMSettingWired.html#NMSettingWired--s390-subchannels">
<ANCHOR id="NMSettingWired--speed" href="libnm-util/NMSettingWired.html#NMSettingWired--speed">
<ANCHOR id="NMSettingWireless" href="libnm-util/NMSettingWireless.html">
-<ANCHOR id="NMSettingWireless.functions" href="libnm-util/NMSettingWireless.html#NMSettingWireless.functions">
-<ANCHOR id="NMSettingWireless.properties" href="libnm-util/NMSettingWireless.html#NMSettingWireless.properties">
-<ANCHOR id="NMSettingWireless.other" href="libnm-util/NMSettingWireless.html#NMSettingWireless.other">
+<ANCHOR id="NMSettingWireless.synopsis" href="libnm-util/NMSettingWireless.html#NMSettingWireless.synopsis">
+<ANCHOR id="NMSettingWirelessError" href="libnm-util/NMSettingWireless.html#NMSettingWirelessError">
<ANCHOR id="NMSettingWireless.object-hierarchy" href="libnm-util/NMSettingWireless.html#NMSettingWireless.object-hierarchy">
-<ANCHOR id="NMSettingWireless.includes" href="libnm-util/NMSettingWireless.html#NMSettingWireless.includes">
+<ANCHOR id="NMSettingWireless.properties" href="libnm-util/NMSettingWireless.html#NMSettingWireless.properties">
<ANCHOR id="NMSettingWireless.description" href="libnm-util/NMSettingWireless.html#NMSettingWireless.description">
-<ANCHOR id="NMSettingWireless.functions_details" href="libnm-util/NMSettingWireless.html#NMSettingWireless.functions_details">
-<ANCHOR id="nm-setting-wireless-error-quark" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-error-quark">
-<ANCHOR id="nm-setting-wireless-new" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-new">
-<ANCHOR id="nm-setting-wireless-get-ssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-ssid">
-<ANCHOR id="nm-setting-wireless-get-mode" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mode">
-<ANCHOR id="nm-setting-wireless-get-band" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-band">
-<ANCHOR id="nm-setting-wireless-get-channel" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-channel">
-<ANCHOR id="nm-setting-wireless-get-bssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-bssid">
-<ANCHOR id="nm-setting-wireless-get-rate" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-rate">
-<ANCHOR id="nm-setting-wireless-get-tx-power" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-tx-power">
-<ANCHOR id="nm-setting-wireless-get-mac-address" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mac-address">
-<ANCHOR id="nm-setting-wireless-get-cloned-mac-address" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address">
-<ANCHOR id="nm-setting-wireless-get-mac-address-blacklist" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist">
-<ANCHOR id="nm-setting-wireless-get-mtu" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mtu">
-<ANCHOR id="nm-setting-wireless-get-security" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-security">
-<ANCHOR id="nm-setting-wireless-get-hidden" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-hidden">
-<ANCHOR id="nm-setting-wireless-add-seen-bssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-add-seen-bssid">
-<ANCHOR id="nm-setting-wireless-get-num-seen-bssids" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids">
-<ANCHOR id="nm-setting-wireless-get-seen-bssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-seen-bssid">
-<ANCHOR id="nm-setting-wireless-ap-security-compatible" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-ap-security-compatible">
-<ANCHOR id="NMSettingWireless.other_details" href="libnm-util/NMSettingWireless.html#NMSettingWireless.other_details">
+<ANCHOR id="NMSettingWireless.details" href="libnm-util/NMSettingWireless.html#NMSettingWireless.details">
<ANCHOR id="NM-SETTING-WIRELESS-SETTING-NAME:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingWirelessError" href="libnm-util/NMSettingWireless.html#NMSettingWirelessError">
+<ANCHOR id="NMSettingWirelessError-enum" href="libnm-util/NMSettingWireless.html#NMSettingWirelessError-enum">
+<ANCHOR id="NM-SETTING-WIRELESS-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-ERROR-MISSING-SECURITY-SETTING:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-MISSING-SECURITY-SETTING:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-ERROR-CHANNEL-REQUIRES-BAND:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-CHANNEL-REQUIRES-BAND:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-ERROR:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR:CAPS">
+<ANCHOR id="nm-setting-wireless-error-quark" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-error-quark">
<ANCHOR id="NM-SETTING-WIRELESS-SSID:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-SSID:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-MODE:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-BAND:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-BAND:CAPS">
@@ -262,11 +306,37 @@
<ANCHOR id="NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-MTU:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-MTU:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SEC:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-SEC:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-HIDDEN:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-HIDDEN:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SEC:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-SEC:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-MODE-ADHOC:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-ADHOC:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-MODE-AP:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-AP:CAPS">
<ANCHOR id="NM-SETTING-WIRELESS-MODE-INFRA:CAPS" href="libnm-util/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-INFRA:CAPS">
+<ANCHOR id="NMSettingWireless-struct" href="libnm-util/NMSettingWireless.html#NMSettingWireless-struct">
+<ANCHOR id="NMSettingWirelessClass" href="libnm-util/NMSettingWireless.html#NMSettingWirelessClass">
+<ANCHOR id="nm-setting-wireless-new" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-new">
+<ANCHOR id="nm-setting-wireless-get-ssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-ssid">
+<ANCHOR id="nm-setting-wireless-get-mode" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mode">
+<ANCHOR id="nm-setting-wireless-get-band" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-band">
+<ANCHOR id="nm-setting-wireless-get-channel" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-channel">
+<ANCHOR id="nm-setting-wireless-get-bssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-bssid">
+<ANCHOR id="nm-setting-wireless-get-rate" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-rate">
+<ANCHOR id="nm-setting-wireless-get-tx-power" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-tx-power">
+<ANCHOR id="nm-setting-wireless-get-mac-address" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mac-address">
+<ANCHOR id="nm-setting-wireless-get-cloned-mac-address" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address">
+<ANCHOR id="nm-setting-wireless-get-mac-address-blacklist" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist">
+<ANCHOR id="nm-setting-wireless-get-num-mac-blacklist-items" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-num-mac-blacklist-items">
+<ANCHOR id="nm-setting-wireless-get-mac-blacklist-item" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mac-blacklist-item">
+<ANCHOR id="nm-setting-wireless-add-mac-blacklist-item" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-add-mac-blacklist-item">
+<ANCHOR id="nm-setting-wireless-remove-mac-blacklist-item" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item">
+<ANCHOR id="nm-setting-wireless-remove-mac-blacklist-item-by-value" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item-by-value">
+<ANCHOR id="nm-setting-wireless-clear-mac-blacklist-items" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-clear-mac-blacklist-items">
+<ANCHOR id="nm-setting-wireless-get-mtu" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-mtu">
+<ANCHOR id="nm-setting-wireless-get-hidden" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-hidden">
+<ANCHOR id="nm-setting-wireless-add-seen-bssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-add-seen-bssid">
+<ANCHOR id="nm-setting-wireless-get-num-seen-bssids" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids">
+<ANCHOR id="nm-setting-wireless-get-seen-bssid" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-seen-bssid">
+<ANCHOR id="nm-setting-wireless-ap-security-compatible" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-ap-security-compatible">
+<ANCHOR id="nm-setting-wireless-get-security" href="libnm-util/NMSettingWireless.html#nm-setting-wireless-get-security">
<ANCHOR id="NMSettingWireless.property-details" href="libnm-util/NMSettingWireless.html#NMSettingWireless.property-details">
<ANCHOR id="NMSettingWireless--band" href="libnm-util/NMSettingWireless.html#NMSettingWireless--band">
<ANCHOR id="NMSettingWireless--bssid" href="libnm-util/NMSettingWireless.html#NMSettingWireless--bssid">
@@ -283,30 +353,67 @@
<ANCHOR id="NMSettingWireless--ssid" href="libnm-util/NMSettingWireless.html#NMSettingWireless--ssid">
<ANCHOR id="NMSettingWireless--tx-power" href="libnm-util/NMSettingWireless.html#NMSettingWireless--tx-power">
<ANCHOR id="NMSettingWirelessSecurity" href="libnm-util/NMSettingWirelessSecurity.html">
-<ANCHOR id="NMSettingWirelessSecurity.functions" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.functions">
-<ANCHOR id="NMSettingWirelessSecurity.properties" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.properties">
-<ANCHOR id="NMSettingWirelessSecurity.other" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.other">
+<ANCHOR id="NMSettingWirelessSecurity.synopsis" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.synopsis">
+<ANCHOR id="NMSettingWirelessSecurityError" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError">
+<ANCHOR id="NMWepKeyType" href="libnm-util/NMSettingWirelessSecurity.html#NMWepKeyType">
<ANCHOR id="NMSettingWirelessSecurity.object-hierarchy" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.object-hierarchy">
-<ANCHOR id="NMSettingWirelessSecurity.includes" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.includes">
+<ANCHOR id="NMSettingWirelessSecurity.properties" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.properties">
<ANCHOR id="NMSettingWirelessSecurity.description" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.description">
-<ANCHOR id="NMSettingWirelessSecurity.functions_details" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.functions_details">
+<ANCHOR id="NMSettingWirelessSecurity.details" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.details">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingWirelessSecurityError-enum" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError-enum">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-802-1X-SETTING:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-802-1X-SETTING:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-802-1X:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-802-1X:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-USERNAME:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-USERNAME:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR-SHARED-KEY-REQUIRES-WEP:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-SHARED-KEY-REQUIRES-WEP:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS">
<ANCHOR id="nm-setting-wireless-security-error-quark" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-error-quark">
+<ANCHOR id="NMWepKeyType-enum" href="libnm-util/NMSettingWirelessSecurity.html#NMWepKeyType-enum">
+<ANCHOR id="NM-WEP-KEY-TYPE-UNKNOWN:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-UNKNOWN:CAPS">
+<ANCHOR id="NM-WEP-KEY-TYPE-KEY:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-KEY:CAPS">
+<ANCHOR id="NM-WEP-KEY-TYPE-PASSPHRASE:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-PASSPHRASE:CAPS">
+<ANCHOR id="NM-WEP-KEY-TYPE-LAST:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-LAST:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PSK:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NMSettingWirelessSecurity-struct" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity-struct">
+<ANCHOR id="NMSettingWirelessSecurityClass" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurityClass">
<ANCHOR id="nm-setting-wireless-security-new" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-new">
<ANCHOR id="nm-setting-wireless-security-get-key-mgmt" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt">
<ANCHOR id="nm-setting-wireless-security-get-num-protos" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos">
<ANCHOR id="nm-setting-wireless-security-get-proto" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto">
<ANCHOR id="nm-setting-wireless-security-add-proto" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto">
<ANCHOR id="nm-setting-wireless-security-remove-proto" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto">
+<ANCHOR id="nm-setting-wireless-security-remove-proto-by-value" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto-by-value">
<ANCHOR id="nm-setting-wireless-security-clear-protos" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos">
<ANCHOR id="nm-setting-wireless-security-get-num-pairwise" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise">
<ANCHOR id="nm-setting-wireless-security-get-pairwise" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise">
<ANCHOR id="nm-setting-wireless-security-add-pairwise" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise">
<ANCHOR id="nm-setting-wireless-security-remove-pairwise" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise">
+<ANCHOR id="nm-setting-wireless-security-remove-pairwise-by-value" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise-by-value">
<ANCHOR id="nm-setting-wireless-security-clear-pairwise" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise">
<ANCHOR id="nm-setting-wireless-security-get-num-groups" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups">
<ANCHOR id="nm-setting-wireless-security-get-group" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group">
<ANCHOR id="nm-setting-wireless-security-add-group" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group">
<ANCHOR id="nm-setting-wireless-security-remove-group" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group">
+<ANCHOR id="nm-setting-wireless-security-remove-group-by-value" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group-by-value">
<ANCHOR id="nm-setting-wireless-security-clear-groups" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups">
<ANCHOR id="nm-setting-wireless-security-get-psk" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk">
<ANCHOR id="nm-setting-wireless-security-get-psk-flags" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags">
@@ -319,28 +426,6 @@
<ANCHOR id="nm-setting-wireless-security-get-auth-alg" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg">
<ANCHOR id="nm-setting-wireless-security-get-wep-key-flags" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags">
<ANCHOR id="nm-setting-wireless-security-get-wep-key-type" href="libnm-util/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type">
-<ANCHOR id="NMSettingWirelessSecurity.other_details" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.other_details">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingWirelessSecurityError" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS">
-<ANCHOR id="NMWepKeyType" href="libnm-util/NMSettingWirelessSecurity.html#NMWepKeyType">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PSK:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS">
-<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS">
<ANCHOR id="NMSettingWirelessSecurity.property-details" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.property-details">
<ANCHOR id="NMSettingWirelessSecurity--auth-alg" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg">
<ANCHOR id="NMSettingWirelessSecurity--group" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group">
@@ -360,52 +445,60 @@
<ANCHOR id="NMSettingWirelessSecurity--wep-key3" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3">
<ANCHOR id="NMSettingWirelessSecurity--wep-tx-keyidx" href="libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx">
<ANCHOR id="NMSettingBluetooth" href="libnm-util/NMSettingBluetooth.html">
-<ANCHOR id="NMSettingBluetooth.functions" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.functions">
-<ANCHOR id="NMSettingBluetooth.properties" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.properties">
-<ANCHOR id="NMSettingBluetooth.other" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.other">
+<ANCHOR id="NMSettingBluetooth.synopsis" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.synopsis">
+<ANCHOR id="NMSettingBluetoothError" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetoothError">
<ANCHOR id="NMSettingBluetooth.object-hierarchy" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.object-hierarchy">
-<ANCHOR id="NMSettingBluetooth.includes" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.includes">
+<ANCHOR id="NMSettingBluetooth.properties" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.properties">
<ANCHOR id="NMSettingBluetooth.description" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.description">
-<ANCHOR id="NMSettingBluetooth.functions_details" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.functions_details">
-<ANCHOR id="nm-setting-bluetooth-error-quark" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-error-quark">
-<ANCHOR id="nm-setting-bluetooth-new" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-new">
-<ANCHOR id="nm-setting-bluetooth-get-bdaddr" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr">
-<ANCHOR id="nm-setting-bluetooth-get-connection-type" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type">
-<ANCHOR id="NMSettingBluetooth.other_details" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.other_details">
+<ANCHOR id="NMSettingBluetooth.details" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.details">
<ANCHOR id="NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingBluetoothError" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetoothError">
+<ANCHOR id="NMSettingBluetoothError-enum" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetoothError-enum">
+<ANCHOR id="NM-SETTING-BLUETOOTH-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-BLUETOOTH-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-BLUETOOTH-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-BLUETOOTH-ERROR-TYPE-SETTING-NOT-FOUND:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-TYPE-SETTING-NOT-FOUND:CAPS">
<ANCHOR id="NM-SETTING-BLUETOOTH-ERROR:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR:CAPS">
+<ANCHOR id="nm-setting-bluetooth-error-quark" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-error-quark">
<ANCHOR id="NM-SETTING-BLUETOOTH-BDADDR:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-BDADDR:CAPS">
<ANCHOR id="NM-SETTING-BLUETOOTH-TYPE:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE:CAPS">
<ANCHOR id="NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS">
<ANCHOR id="NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS" href="libnm-util/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS">
+<ANCHOR id="NMSettingBluetooth-struct" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth-struct">
+<ANCHOR id="NMSettingBluetoothClass" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetoothClass">
+<ANCHOR id="nm-setting-bluetooth-new" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-new">
+<ANCHOR id="nm-setting-bluetooth-get-bdaddr" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr">
+<ANCHOR id="nm-setting-bluetooth-get-connection-type" href="libnm-util/NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type">
<ANCHOR id="NMSettingBluetooth.property-details" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth.property-details">
<ANCHOR id="NMSettingBluetooth--bdaddr" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth--bdaddr">
<ANCHOR id="NMSettingBluetooth--type" href="libnm-util/NMSettingBluetooth.html#NMSettingBluetooth--type">
<ANCHOR id="NMSettingSerial" href="libnm-util/NMSettingSerial.html">
-<ANCHOR id="NMSettingSerial.functions" href="libnm-util/NMSettingSerial.html#NMSettingSerial.functions">
-<ANCHOR id="NMSettingSerial.properties" href="libnm-util/NMSettingSerial.html#NMSettingSerial.properties">
-<ANCHOR id="NMSettingSerial.other" href="libnm-util/NMSettingSerial.html#NMSettingSerial.other">
+<ANCHOR id="NMSettingSerial.synopsis" href="libnm-util/NMSettingSerial.html#NMSettingSerial.synopsis">
+<ANCHOR id="NMSettingSerialError" href="libnm-util/NMSettingSerial.html#NMSettingSerialError">
<ANCHOR id="NMSettingSerial.object-hierarchy" href="libnm-util/NMSettingSerial.html#NMSettingSerial.object-hierarchy">
-<ANCHOR id="NMSettingSerial.includes" href="libnm-util/NMSettingSerial.html#NMSettingSerial.includes">
+<ANCHOR id="NMSettingSerial.properties" href="libnm-util/NMSettingSerial.html#NMSettingSerial.properties">
<ANCHOR id="NMSettingSerial.description" href="libnm-util/NMSettingSerial.html#NMSettingSerial.description">
-<ANCHOR id="NMSettingSerial.functions_details" href="libnm-util/NMSettingSerial.html#NMSettingSerial.functions_details">
-<ANCHOR id="nm-setting-serial-error-quark" href="libnm-util/NMSettingSerial.html#nm-setting-serial-error-quark">
-<ANCHOR id="nm-setting-serial-new" href="libnm-util/NMSettingSerial.html#nm-setting-serial-new">
-<ANCHOR id="nm-setting-serial-get-baud" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-baud">
-<ANCHOR id="nm-setting-serial-get-bits" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-bits">
-<ANCHOR id="nm-setting-serial-get-parity" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-parity">
-<ANCHOR id="nm-setting-serial-get-stopbits" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-stopbits">
-<ANCHOR id="nm-setting-serial-get-send-delay" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-send-delay">
-<ANCHOR id="NMSettingSerial.other_details" href="libnm-util/NMSettingSerial.html#NMSettingSerial.other_details">
+<ANCHOR id="NMSettingSerial.details" href="libnm-util/NMSettingSerial.html#NMSettingSerial.details">
<ANCHOR id="NM-SETTING-SERIAL-SETTING-NAME:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingSerialError" href="libnm-util/NMSettingSerial.html#NMSettingSerialError">
+<ANCHOR id="NMSettingSerialError-enum" href="libnm-util/NMSettingSerial.html#NMSettingSerialError-enum">
+<ANCHOR id="NM-SETTING-SERIAL-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-ERROR-MISSING-PPP-SETTING:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-MISSING-PPP-SETTING:CAPS">
<ANCHOR id="NM-SETTING-SERIAL-ERROR:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-ERROR:CAPS">
+<ANCHOR id="nm-setting-serial-error-quark" href="libnm-util/NMSettingSerial.html#nm-setting-serial-error-quark">
<ANCHOR id="NM-SETTING-SERIAL-BAUD:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-BAUD:CAPS">
<ANCHOR id="NM-SETTING-SERIAL-BITS:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-BITS:CAPS">
<ANCHOR id="NM-SETTING-SERIAL-PARITY:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-PARITY:CAPS">
<ANCHOR id="NM-SETTING-SERIAL-STOPBITS:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-STOPBITS:CAPS">
<ANCHOR id="NM-SETTING-SERIAL-SEND-DELAY:CAPS" href="libnm-util/NMSettingSerial.html#NM-SETTING-SERIAL-SEND-DELAY:CAPS">
+<ANCHOR id="NMSettingSerial-struct" href="libnm-util/NMSettingSerial.html#NMSettingSerial-struct">
+<ANCHOR id="NMSettingSerialClass" href="libnm-util/NMSettingSerial.html#NMSettingSerialClass">
+<ANCHOR id="nm-setting-serial-new" href="libnm-util/NMSettingSerial.html#nm-setting-serial-new">
+<ANCHOR id="nm-setting-serial-get-baud" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-baud">
+<ANCHOR id="nm-setting-serial-get-bits" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-bits">
+<ANCHOR id="nm-setting-serial-get-parity" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-parity">
+<ANCHOR id="nm-setting-serial-get-stopbits" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-stopbits">
+<ANCHOR id="nm-setting-serial-get-send-delay" href="libnm-util/NMSettingSerial.html#nm-setting-serial-get-send-delay">
<ANCHOR id="NMSettingSerial.property-details" href="libnm-util/NMSettingSerial.html#NMSettingSerial.property-details">
<ANCHOR id="NMSettingSerial--baud" href="libnm-util/NMSettingSerial.html#NMSettingSerial--baud">
<ANCHOR id="NMSettingSerial--bits" href="libnm-util/NMSettingSerial.html#NMSettingSerial--bits">
@@ -413,70 +506,103 @@
<ANCHOR id="NMSettingSerial--send-delay" href="libnm-util/NMSettingSerial.html#NMSettingSerial--send-delay">
<ANCHOR id="NMSettingSerial--stopbits" href="libnm-util/NMSettingSerial.html#NMSettingSerial--stopbits">
<ANCHOR id="NMSettingCdma" href="libnm-util/NMSettingCdma.html">
-<ANCHOR id="NMSettingCdma.functions" href="libnm-util/NMSettingCdma.html#NMSettingCdma.functions">
-<ANCHOR id="NMSettingCdma.properties" href="libnm-util/NMSettingCdma.html#NMSettingCdma.properties">
-<ANCHOR id="NMSettingCdma.other" href="libnm-util/NMSettingCdma.html#NMSettingCdma.other">
+<ANCHOR id="NMSettingCdma.synopsis" href="libnm-util/NMSettingCdma.html#NMSettingCdma.synopsis">
+<ANCHOR id="NMSettingCdmaError" href="libnm-util/NMSettingCdma.html#NMSettingCdmaError">
<ANCHOR id="NMSettingCdma.object-hierarchy" href="libnm-util/NMSettingCdma.html#NMSettingCdma.object-hierarchy">
-<ANCHOR id="NMSettingCdma.includes" href="libnm-util/NMSettingCdma.html#NMSettingCdma.includes">
+<ANCHOR id="NMSettingCdma.properties" href="libnm-util/NMSettingCdma.html#NMSettingCdma.properties">
<ANCHOR id="NMSettingCdma.description" href="libnm-util/NMSettingCdma.html#NMSettingCdma.description">
-<ANCHOR id="NMSettingCdma.functions_details" href="libnm-util/NMSettingCdma.html#NMSettingCdma.functions_details">
-<ANCHOR id="nm-setting-cdma-error-quark" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-error-quark">
-<ANCHOR id="nm-setting-cdma-new" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-new">
-<ANCHOR id="nm-setting-cdma-get-number" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-number">
-<ANCHOR id="nm-setting-cdma-get-username" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-username">
-<ANCHOR id="nm-setting-cdma-get-password" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-password">
-<ANCHOR id="nm-setting-cdma-get-password-flags" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-password-flags">
-<ANCHOR id="NMSettingCdma.other_details" href="libnm-util/NMSettingCdma.html#NMSettingCdma.other_details">
+<ANCHOR id="NMSettingCdma.details" href="libnm-util/NMSettingCdma.html#NMSettingCdma.details">
<ANCHOR id="NM-SETTING-CDMA-SETTING-NAME:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingCdmaError" href="libnm-util/NMSettingCdma.html#NMSettingCdmaError">
+<ANCHOR id="NMSettingCdmaError-enum" href="libnm-util/NMSettingCdma.html#NMSettingCdmaError-enum">
+<ANCHOR id="NM-SETTING-CDMA-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-CDMA-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-CDMA-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-CDMA-ERROR-MISSING-SERIAL-SETTING:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-ERROR-MISSING-SERIAL-SETTING:CAPS">
<ANCHOR id="NM-SETTING-CDMA-ERROR:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-ERROR:CAPS">
+<ANCHOR id="nm-setting-cdma-error-quark" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-error-quark">
<ANCHOR id="NM-SETTING-CDMA-NUMBER:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-NUMBER:CAPS">
<ANCHOR id="NM-SETTING-CDMA-USERNAME:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-USERNAME:CAPS">
<ANCHOR id="NM-SETTING-CDMA-PASSWORD:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD:CAPS">
<ANCHOR id="NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NMSettingCdma-struct" href="libnm-util/NMSettingCdma.html#NMSettingCdma-struct">
+<ANCHOR id="NMSettingCdmaClass" href="libnm-util/NMSettingCdma.html#NMSettingCdmaClass">
+<ANCHOR id="nm-setting-cdma-new" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-new">
+<ANCHOR id="nm-setting-cdma-get-number" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-number">
+<ANCHOR id="nm-setting-cdma-get-username" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-username">
+<ANCHOR id="nm-setting-cdma-get-password" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-password">
+<ANCHOR id="nm-setting-cdma-get-password-flags" href="libnm-util/NMSettingCdma.html#nm-setting-cdma-get-password-flags">
<ANCHOR id="NMSettingCdma.property-details" href="libnm-util/NMSettingCdma.html#NMSettingCdma.property-details">
<ANCHOR id="NMSettingCdma--number" href="libnm-util/NMSettingCdma.html#NMSettingCdma--number">
<ANCHOR id="NMSettingCdma--password" href="libnm-util/NMSettingCdma.html#NMSettingCdma--password">
<ANCHOR id="NMSettingCdma--password-flags" href="libnm-util/NMSettingCdma.html#NMSettingCdma--password-flags">
<ANCHOR id="NMSettingCdma--username" href="libnm-util/NMSettingCdma.html#NMSettingCdma--username">
<ANCHOR id="NMSettingGsm" href="libnm-util/NMSettingGsm.html">
-<ANCHOR id="NMSettingGsm.functions" href="libnm-util/NMSettingGsm.html#NMSettingGsm.functions">
-<ANCHOR id="NMSettingGsm.properties" href="libnm-util/NMSettingGsm.html#NMSettingGsm.properties">
-<ANCHOR id="NMSettingGsm.other" href="libnm-util/NMSettingGsm.html#NMSettingGsm.other">
+<ANCHOR id="NMSettingGsm.synopsis" href="libnm-util/NMSettingGsm.html#NMSettingGsm.synopsis">
+<ANCHOR id="NMSettingGsmError" href="libnm-util/NMSettingGsm.html#NMSettingGsmError">
+<ANCHOR id="NMSettingGsmNetworkType" href="libnm-util/NMSettingGsm.html#NMSettingGsmNetworkType">
+<ANCHOR id="NMSettingGsmNetworkBand" href="libnm-util/NMSettingGsm.html#NMSettingGsmNetworkBand">
<ANCHOR id="NMSettingGsm.object-hierarchy" href="libnm-util/NMSettingGsm.html#NMSettingGsm.object-hierarchy">
-<ANCHOR id="NMSettingGsm.includes" href="libnm-util/NMSettingGsm.html#NMSettingGsm.includes">
+<ANCHOR id="NMSettingGsm.properties" href="libnm-util/NMSettingGsm.html#NMSettingGsm.properties">
<ANCHOR id="NMSettingGsm.description" href="libnm-util/NMSettingGsm.html#NMSettingGsm.description">
-<ANCHOR id="NMSettingGsm.functions_details" href="libnm-util/NMSettingGsm.html#NMSettingGsm.functions_details">
-<ANCHOR id="nm-setting-gsm-error-quark" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-error-quark">
-<ANCHOR id="nm-setting-gsm-new" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-new">
-<ANCHOR id="nm-setting-gsm-get-number" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-number">
-<ANCHOR id="nm-setting-gsm-get-username" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-username">
-<ANCHOR id="nm-setting-gsm-get-password" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-password">
-<ANCHOR id="nm-setting-gsm-get-apn" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-apn">
-<ANCHOR id="nm-setting-gsm-get-network-id" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-network-id">
-<ANCHOR id="nm-setting-gsm-get-network-type" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-network-type">
-<ANCHOR id="nm-setting-gsm-get-allowed-bands" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-allowed-bands">
-<ANCHOR id="nm-setting-gsm-get-pin" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-pin">
-<ANCHOR id="nm-setting-gsm-get-home-only" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-home-only">
-<ANCHOR id="nm-setting-gsm-get-pin-flags" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-pin-flags">
-<ANCHOR id="nm-setting-gsm-get-password-flags" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-password-flags">
-<ANCHOR id="NMSettingGsm.other_details" href="libnm-util/NMSettingGsm.html#NMSettingGsm.other_details">
+<ANCHOR id="NMSettingGsm.details" href="libnm-util/NMSettingGsm.html#NMSettingGsm.details">
<ANCHOR id="NM-SETTING-GSM-SETTING-NAME:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingGsmError" href="libnm-util/NMSettingGsm.html#NMSettingGsmError">
+<ANCHOR id="NMSettingGsmError-enum" href="libnm-util/NMSettingGsm.html#NMSettingGsmError-enum">
+<ANCHOR id="NM-SETTING-GSM-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-GSM-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-GSM-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-GSM-ERROR-MISSING-SERIAL-SETTING:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-ERROR-MISSING-SERIAL-SETTING:CAPS">
<ANCHOR id="NM-SETTING-GSM-ERROR:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-ERROR:CAPS">
+<ANCHOR id="nm-setting-gsm-error-quark" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-error-quark">
<ANCHOR id="NM-SETTING-GSM-NUMBER:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NUMBER:CAPS">
<ANCHOR id="NM-SETTING-GSM-USERNAME:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-USERNAME:CAPS">
<ANCHOR id="NM-SETTING-GSM-PASSWORD:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-PASSWORD:CAPS">
<ANCHOR id="NM-SETTING-GSM-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-PASSWORD-FLAGS:CAPS">
<ANCHOR id="NM-SETTING-GSM-APN:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-APN:CAPS">
<ANCHOR id="NM-SETTING-GSM-NETWORK-ID:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-ID:CAPS">
-<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE:CAPS">
-<ANCHOR id="NM-SETTING-GSM-ALLOWED-BANDS:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-ALLOWED-BANDS:CAPS">
<ANCHOR id="NM-SETTING-GSM-PIN:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-PIN:CAPS">
<ANCHOR id="NM-SETTING-GSM-PIN-FLAGS:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-PIN-FLAGS:CAPS">
<ANCHOR id="NM-SETTING-GSM-HOME-ONLY:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-HOME-ONLY:CAPS">
-<ANCHOR id="NMSettingGsmNetworkType" href="libnm-util/NMSettingGsm.html#NMSettingGsmNetworkType">
-<ANCHOR id="NMSettingGsmNetworkBand" href="libnm-util/NMSettingGsm.html#NMSettingGsmNetworkBand">
+<ANCHOR id="NM-SETTING-GSM-ALLOWED-BANDS:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-ALLOWED-BANDS:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE:CAPS">
+<ANCHOR id="NMSettingGsmNetworkType-enum" href="libnm-util/NMSettingGsm.html#NMSettingGsmNetworkType-enum">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE-ANY:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-ANY:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE-UMTS-HSPA:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-UMTS-HSPA:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE-GPRS-EDGE:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-GPRS-EDGE:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE-PREFER-UMTS-HSPA:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-UMTS-HSPA:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE-PREFER-GPRS-EDGE:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-GPRS-EDGE:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE-PREFER-4G:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-4G:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-TYPE-4G:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-4G:CAPS">
+<ANCHOR id="NMSettingGsmNetworkBand-enum" href="libnm-util/NMSettingGsm.html#NMSettingGsmNetworkBand-enum">
+<ANCHOR id="NM-SETTING-GSM-BAND-UNKNOWN:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-ANY:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-ANY:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-EGSM:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-EGSM:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-DCS:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-DCS:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-PCS:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-PCS:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-G850:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-G850:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U2100:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U2100:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U1800:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U1800:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U17IV:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U17IV:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U800:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U800:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U850:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U850:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U900:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U900:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U17IX:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U17IX:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U1900:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U1900:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BAND-U2600:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BAND-U2600:CAPS">
+<ANCHOR id="NM-SETTING-GSM-BANDS-MAX:CAPS" href="libnm-util/NMSettingGsm.html#NM-SETTING-GSM-BANDS-MAX:CAPS">
+<ANCHOR id="NMSettingGsm-struct" href="libnm-util/NMSettingGsm.html#NMSettingGsm-struct">
+<ANCHOR id="NMSettingGsmClass" href="libnm-util/NMSettingGsm.html#NMSettingGsmClass">
+<ANCHOR id="nm-setting-gsm-new" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-new">
+<ANCHOR id="nm-setting-gsm-get-number" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-number">
+<ANCHOR id="nm-setting-gsm-get-username" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-username">
+<ANCHOR id="nm-setting-gsm-get-password" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-password">
+<ANCHOR id="nm-setting-gsm-get-apn" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-apn">
+<ANCHOR id="nm-setting-gsm-get-network-id" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-network-id">
+<ANCHOR id="nm-setting-gsm-get-pin" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-pin">
+<ANCHOR id="nm-setting-gsm-get-home-only" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-home-only">
+<ANCHOR id="nm-setting-gsm-get-pin-flags" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-pin-flags">
+<ANCHOR id="nm-setting-gsm-get-password-flags" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-password-flags">
+<ANCHOR id="nm-setting-gsm-get-network-type" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-network-type">
+<ANCHOR id="nm-setting-gsm-get-allowed-bands" href="libnm-util/NMSettingGsm.html#nm-setting-gsm-get-allowed-bands">
<ANCHOR id="NMSettingGsm.property-details" href="libnm-util/NMSettingGsm.html#NMSettingGsm.property-details">
<ANCHOR id="NMSettingGsm--allowed-bands" href="libnm-util/NMSettingGsm.html#NMSettingGsm--allowed-bands">
<ANCHOR id="NMSettingGsm--apn" href="libnm-util/NMSettingGsm.html#NMSettingGsm--apn">
@@ -490,48 +616,45 @@
<ANCHOR id="NMSettingGsm--pin-flags" href="libnm-util/NMSettingGsm.html#NMSettingGsm--pin-flags">
<ANCHOR id="NMSettingGsm--username" href="libnm-util/NMSettingGsm.html#NMSettingGsm--username">
<ANCHOR id="NMSettingWimax" href="libnm-util/NMSettingWimax.html">
-<ANCHOR id="NMSettingWimax.functions" href="libnm-util/NMSettingWimax.html#NMSettingWimax.functions">
-<ANCHOR id="NMSettingWimax.properties" href="libnm-util/NMSettingWimax.html#NMSettingWimax.properties">
-<ANCHOR id="NMSettingWimax.other" href="libnm-util/NMSettingWimax.html#NMSettingWimax.other">
+<ANCHOR id="NMSettingWimax.synopsis" href="libnm-util/NMSettingWimax.html#NMSettingWimax.synopsis">
+<ANCHOR id="NMSettingWimaxError" href="libnm-util/NMSettingWimax.html#NMSettingWimaxError">
<ANCHOR id="NMSettingWimax.object-hierarchy" href="libnm-util/NMSettingWimax.html#NMSettingWimax.object-hierarchy">
-<ANCHOR id="NMSettingWimax.includes" href="libnm-util/NMSettingWimax.html#NMSettingWimax.includes">
+<ANCHOR id="NMSettingWimax.properties" href="libnm-util/NMSettingWimax.html#NMSettingWimax.properties">
<ANCHOR id="NMSettingWimax.description" href="libnm-util/NMSettingWimax.html#NMSettingWimax.description">
-<ANCHOR id="NMSettingWimax.functions_details" href="libnm-util/NMSettingWimax.html#NMSettingWimax.functions_details">
-<ANCHOR id="nm-setting-wimax-error-quark" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-error-quark">
-<ANCHOR id="nm-setting-wimax-new" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-new">
-<ANCHOR id="nm-setting-wimax-get-network-name" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-get-network-name">
-<ANCHOR id="nm-setting-wimax-get-mac-address" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-get-mac-address">
-<ANCHOR id="NMSettingWimax.other_details" href="libnm-util/NMSettingWimax.html#NMSettingWimax.other_details">
+<ANCHOR id="NMSettingWimax.details" href="libnm-util/NMSettingWimax.html#NMSettingWimax.details">
<ANCHOR id="NM-SETTING-WIMAX-SETTING-NAME:CAPS" href="libnm-util/NMSettingWimax.html#NM-SETTING-WIMAX-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingWimaxError" href="libnm-util/NMSettingWimax.html#NMSettingWimaxError">
+<ANCHOR id="NMSettingWimaxError-enum" href="libnm-util/NMSettingWimax.html#NMSettingWimaxError-enum">
+<ANCHOR id="NM-SETTING-WIMAX-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingWimax.html#NM-SETTING-WIMAX-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-WIMAX-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingWimax.html#NM-SETTING-WIMAX-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-WIMAX-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingWimax.html#NM-SETTING-WIMAX-ERROR-MISSING-PROPERTY:CAPS">
<ANCHOR id="NM-SETTING-WIMAX-ERROR:CAPS" href="libnm-util/NMSettingWimax.html#NM-SETTING-WIMAX-ERROR:CAPS">
+<ANCHOR id="nm-setting-wimax-error-quark" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-error-quark">
<ANCHOR id="NM-SETTING-WIMAX-NETWORK-NAME:CAPS" href="libnm-util/NMSettingWimax.html#NM-SETTING-WIMAX-NETWORK-NAME:CAPS">
<ANCHOR id="NM-SETTING-WIMAX-MAC-ADDRESS:CAPS" href="libnm-util/NMSettingWimax.html#NM-SETTING-WIMAX-MAC-ADDRESS:CAPS">
+<ANCHOR id="NMSettingWimax-struct" href="libnm-util/NMSettingWimax.html#NMSettingWimax-struct">
+<ANCHOR id="NMSettingWimaxClass" href="libnm-util/NMSettingWimax.html#NMSettingWimaxClass">
+<ANCHOR id="nm-setting-wimax-new" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-new">
+<ANCHOR id="nm-setting-wimax-get-network-name" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-get-network-name">
+<ANCHOR id="nm-setting-wimax-get-mac-address" href="libnm-util/NMSettingWimax.html#nm-setting-wimax-get-mac-address">
<ANCHOR id="NMSettingWimax.property-details" href="libnm-util/NMSettingWimax.html#NMSettingWimax.property-details">
<ANCHOR id="NMSettingWimax--mac-address" href="libnm-util/NMSettingWimax.html#NMSettingWimax--mac-address">
<ANCHOR id="NMSettingWimax--network-name" href="libnm-util/NMSettingWimax.html#NMSettingWimax--network-name">
<ANCHOR id="NMSettingBond" href="libnm-util/NMSettingBond.html">
-<ANCHOR id="NMSettingBond.functions" href="libnm-util/NMSettingBond.html#NMSettingBond.functions">
-<ANCHOR id="NMSettingBond.properties" href="libnm-util/NMSettingBond.html#NMSettingBond.properties">
-<ANCHOR id="NMSettingBond.other" href="libnm-util/NMSettingBond.html#NMSettingBond.other">
+<ANCHOR id="NMSettingBond.synopsis" href="libnm-util/NMSettingBond.html#NMSettingBond.synopsis">
+<ANCHOR id="NMSettingBondError" href="libnm-util/NMSettingBond.html#NMSettingBondError">
<ANCHOR id="NMSettingBond.object-hierarchy" href="libnm-util/NMSettingBond.html#NMSettingBond.object-hierarchy">
-<ANCHOR id="NMSettingBond.includes" href="libnm-util/NMSettingBond.html#NMSettingBond.includes">
+<ANCHOR id="NMSettingBond.properties" href="libnm-util/NMSettingBond.html#NMSettingBond.properties">
<ANCHOR id="NMSettingBond.description" href="libnm-util/NMSettingBond.html#NMSettingBond.description">
-<ANCHOR id="NMSettingBond.functions_details" href="libnm-util/NMSettingBond.html#NMSettingBond.functions_details">
-<ANCHOR id="nm-setting-bond-error-quark" href="libnm-util/NMSettingBond.html#nm-setting-bond-error-quark">
-<ANCHOR id="nm-setting-bond-new" href="libnm-util/NMSettingBond.html#nm-setting-bond-new">
-<ANCHOR id="nm-setting-bond-get-interface-name" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-interface-name">
-<ANCHOR id="nm-setting-bond-get-num-options" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-num-options">
-<ANCHOR id="nm-setting-bond-get-option" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-option">
-<ANCHOR id="nm-setting-bond-get-option-by-name" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-option-by-name">
-<ANCHOR id="nm-setting-bond-add-option" href="libnm-util/NMSettingBond.html#nm-setting-bond-add-option">
-<ANCHOR id="nm-setting-bond-remove-option" href="libnm-util/NMSettingBond.html#nm-setting-bond-remove-option">
-<ANCHOR id="nm-setting-bond-get-valid-options" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-valid-options">
-<ANCHOR id="nm-setting-bond-get-option-default" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-option-default">
-<ANCHOR id="NMSettingBond.other_details" href="libnm-util/NMSettingBond.html#NMSettingBond.other_details">
+<ANCHOR id="NMSettingBond.details" href="libnm-util/NMSettingBond.html#NMSettingBond.details">
<ANCHOR id="NM-SETTING-BOND-SETTING-NAME:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingBondError" href="libnm-util/NMSettingBond.html#NMSettingBondError">
+<ANCHOR id="NMSettingBondError-enum" href="libnm-util/NMSettingBond.html#NMSettingBondError-enum">
+<ANCHOR id="NM-SETTING-BOND-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-BOND-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-ERROR-INVALID-OPTION:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-ERROR-INVALID-OPTION:CAPS">
+<ANCHOR id="NM-SETTING-BOND-ERROR-MISSING-OPTION:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-ERROR-MISSING-OPTION:CAPS">
<ANCHOR id="NM-SETTING-BOND-ERROR:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-ERROR:CAPS">
+<ANCHOR id="nm-setting-bond-error-quark" href="libnm-util/NMSettingBond.html#nm-setting-bond-error-quark">
<ANCHOR id="NM-SETTING-BOND-INTERFACE-NAME:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-INTERFACE-NAME:CAPS">
<ANCHOR id="NM-SETTING-BOND-OPTIONS:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTIONS:CAPS">
<ANCHOR id="NM-SETTING-BOND-OPTION-MODE:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-MODE:CAPS">
@@ -540,102 +663,224 @@
<ANCHOR id="NM-SETTING-BOND-OPTION-UPDELAY:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-UPDELAY:CAPS">
<ANCHOR id="NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS">
<ANCHOR id="NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-PRIMARY:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-AD-SELECT:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-AD-SELECT:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS">
+<ANCHOR id="NMSettingBond-struct" href="libnm-util/NMSettingBond.html#NMSettingBond-struct">
+<ANCHOR id="NMSettingBondClass" href="libnm-util/NMSettingBond.html#NMSettingBondClass">
+<ANCHOR id="nm-setting-bond-new" href="libnm-util/NMSettingBond.html#nm-setting-bond-new">
+<ANCHOR id="nm-setting-bond-get-interface-name" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-interface-name">
+<ANCHOR id="nm-setting-bond-get-num-options" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-num-options">
+<ANCHOR id="nm-setting-bond-get-option" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-option">
+<ANCHOR id="nm-setting-bond-get-option-by-name" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-option-by-name">
+<ANCHOR id="nm-setting-bond-add-option" href="libnm-util/NMSettingBond.html#nm-setting-bond-add-option">
+<ANCHOR id="nm-setting-bond-remove-option" href="libnm-util/NMSettingBond.html#nm-setting-bond-remove-option">
+<ANCHOR id="nm-setting-bond-validate-option" href="libnm-util/NMSettingBond.html#nm-setting-bond-validate-option">
+<ANCHOR id="nm-setting-bond-get-valid-options" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-valid-options">
+<ANCHOR id="nm-setting-bond-get-option-default" href="libnm-util/NMSettingBond.html#nm-setting-bond-get-option-default">
<ANCHOR id="NMSettingBond.property-details" href="libnm-util/NMSettingBond.html#NMSettingBond.property-details">
<ANCHOR id="NMSettingBond--interface-name" href="libnm-util/NMSettingBond.html#NMSettingBond--interface-name">
<ANCHOR id="NMSettingBond--options" href="libnm-util/NMSettingBond.html#NMSettingBond--options">
<ANCHOR id="NMSettingBridge" href="libnm-util/NMSettingBridge.html">
-<ANCHOR id="NMSettingBridge.functions" href="libnm-util/NMSettingBridge.html#NMSettingBridge.functions">
-<ANCHOR id="NMSettingBridge.properties" href="libnm-util/NMSettingBridge.html#NMSettingBridge.properties">
-<ANCHOR id="NMSettingBridge.other" href="libnm-util/NMSettingBridge.html#NMSettingBridge.other">
+<ANCHOR id="NMSettingBridge.synopsis" href="libnm-util/NMSettingBridge.html#NMSettingBridge.synopsis">
+<ANCHOR id="NMSettingBridgeError" href="libnm-util/NMSettingBridge.html#NMSettingBridgeError">
<ANCHOR id="NMSettingBridge.object-hierarchy" href="libnm-util/NMSettingBridge.html#NMSettingBridge.object-hierarchy">
-<ANCHOR id="NMSettingBridge.includes" href="libnm-util/NMSettingBridge.html#NMSettingBridge.includes">
+<ANCHOR id="NMSettingBridge.properties" href="libnm-util/NMSettingBridge.html#NMSettingBridge.properties">
<ANCHOR id="NMSettingBridge.description" href="libnm-util/NMSettingBridge.html#NMSettingBridge.description">
-<ANCHOR id="NMSettingBridge.functions_details" href="libnm-util/NMSettingBridge.html#NMSettingBridge.functions_details">
-<ANCHOR id="nm-setting-bridge-error-quark" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-error-quark">
-<ANCHOR id="nm-setting-bridge-new" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-new">
-<ANCHOR id="nm-setting-bridge-get-interface-name" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-interface-name">
-<ANCHOR id="nm-setting-bridge-get-stp" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-stp">
-<ANCHOR id="nm-setting-bridge-get-priority" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-priority">
-<ANCHOR id="nm-setting-bridge-get-forward-delay" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-forward-delay">
-<ANCHOR id="nm-setting-bridge-get-hello-time" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-hello-time">
-<ANCHOR id="nm-setting-bridge-get-max-age" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-max-age">
-<ANCHOR id="nm-setting-bridge-get-ageing-time" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-ageing-time">
-<ANCHOR id="NMSettingBridge.other_details" href="libnm-util/NMSettingBridge.html#NMSettingBridge.other_details">
+<ANCHOR id="NMSettingBridge.details" href="libnm-util/NMSettingBridge.html#NMSettingBridge.details">
<ANCHOR id="NM-SETTING-BRIDGE-SETTING-NAME:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingBridgeError" href="libnm-util/NMSettingBridge.html#NMSettingBridgeError">
+<ANCHOR id="NMSettingBridgeError-enum" href="libnm-util/NMSettingBridge.html#NMSettingBridgeError-enum">
+<ANCHOR id="NM-SETTING-BRIDGE-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR-MISSING-PROPERTY:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-ERROR:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR:CAPS">
+<ANCHOR id="nm-setting-bridge-error-quark" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-error-quark">
<ANCHOR id="NM-SETTING-BRIDGE-INTERFACE-NAME:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-INTERFACE-NAME:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-STP:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-STP:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-PRIORITY:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-PRIORITY:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-HELLO-TIME:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-HELLO-TIME:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-MAX-AGE:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-MAX-AGE:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-AGEING-TIME:CAPS" href="libnm-util/NMSettingBridge.html#NM-SETTING-BRIDGE-AGEING-TIME:CAPS">
+<ANCHOR id="NMSettingBridge-struct" href="libnm-util/NMSettingBridge.html#NMSettingBridge-struct">
+<ANCHOR id="NMSettingBridgeClass" href="libnm-util/NMSettingBridge.html#NMSettingBridgeClass">
+<ANCHOR id="nm-setting-bridge-new" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-new">
+<ANCHOR id="nm-setting-bridge-get-interface-name" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-interface-name">
+<ANCHOR id="nm-setting-bridge-get-mac-address" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-mac-address">
+<ANCHOR id="nm-setting-bridge-get-stp" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-stp">
+<ANCHOR id="nm-setting-bridge-get-priority" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-priority">
+<ANCHOR id="nm-setting-bridge-get-forward-delay" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-forward-delay">
+<ANCHOR id="nm-setting-bridge-get-hello-time" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-hello-time">
+<ANCHOR id="nm-setting-bridge-get-max-age" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-max-age">
+<ANCHOR id="nm-setting-bridge-get-ageing-time" href="libnm-util/NMSettingBridge.html#nm-setting-bridge-get-ageing-time">
<ANCHOR id="NMSettingBridge.property-details" href="libnm-util/NMSettingBridge.html#NMSettingBridge.property-details">
<ANCHOR id="NMSettingBridge--ageing-time" href="libnm-util/NMSettingBridge.html#NMSettingBridge--ageing-time">
<ANCHOR id="NMSettingBridge--forward-delay" href="libnm-util/NMSettingBridge.html#NMSettingBridge--forward-delay">
<ANCHOR id="NMSettingBridge--hello-time" href="libnm-util/NMSettingBridge.html#NMSettingBridge--hello-time">
<ANCHOR id="NMSettingBridge--interface-name" href="libnm-util/NMSettingBridge.html#NMSettingBridge--interface-name">
+<ANCHOR id="NMSettingBridge--mac-address" href="libnm-util/NMSettingBridge.html#NMSettingBridge--mac-address">
<ANCHOR id="NMSettingBridge--max-age" href="libnm-util/NMSettingBridge.html#NMSettingBridge--max-age">
<ANCHOR id="NMSettingBridge--priority" href="libnm-util/NMSettingBridge.html#NMSettingBridge--priority">
<ANCHOR id="NMSettingBridge--stp" href="libnm-util/NMSettingBridge.html#NMSettingBridge--stp">
<ANCHOR id="NMSettingBridgePort" href="libnm-util/NMSettingBridgePort.html">
-<ANCHOR id="NMSettingBridgePort.functions" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.functions">
-<ANCHOR id="NMSettingBridgePort.properties" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.properties">
-<ANCHOR id="NMSettingBridgePort.other" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.other">
+<ANCHOR id="NMSettingBridgePort.synopsis" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.synopsis">
+<ANCHOR id="NMSettingBridgePortError" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePortError">
<ANCHOR id="NMSettingBridgePort.object-hierarchy" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.object-hierarchy">
-<ANCHOR id="NMSettingBridgePort.includes" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.includes">
+<ANCHOR id="NMSettingBridgePort.properties" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.properties">
<ANCHOR id="NMSettingBridgePort.description" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.description">
-<ANCHOR id="NMSettingBridgePort.functions_details" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.functions_details">
-<ANCHOR id="nm-setting-bridge-port-error-quark" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-error-quark">
-<ANCHOR id="nm-setting-bridge-port-new" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-new">
-<ANCHOR id="nm-setting-bridge-port-get-priority" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-get-priority">
-<ANCHOR id="nm-setting-bridge-port-get-path-cost" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost">
-<ANCHOR id="nm-setting-bridge-port-get-hairpin-mode" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode">
-<ANCHOR id="NMSettingBridgePort.other_details" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.other_details">
+<ANCHOR id="NMSettingBridgePort.details" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.details">
<ANCHOR id="NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingBridgePortError" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePortError">
+<ANCHOR id="NMSettingBridgePortError-enum" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePortError-enum">
+<ANCHOR id="NM-SETTING-BRIDGE-PORT-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-PORT-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-PORT-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR-MISSING-PROPERTY:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-PORT-ERROR:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR:CAPS">
+<ANCHOR id="nm-setting-bridge-port-error-quark" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-error-quark">
<ANCHOR id="NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS">
<ANCHOR id="NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS" href="libnm-util/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS">
+<ANCHOR id="NMSettingBridgePort-struct" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort-struct">
+<ANCHOR id="NMSettingBridgePortClass" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePortClass">
+<ANCHOR id="nm-setting-bridge-port-new" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-new">
+<ANCHOR id="nm-setting-bridge-port-get-priority" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-get-priority">
+<ANCHOR id="nm-setting-bridge-port-get-path-cost" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost">
+<ANCHOR id="nm-setting-bridge-port-get-hairpin-mode" href="libnm-util/NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode">
<ANCHOR id="NMSettingBridgePort.property-details" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort.property-details">
<ANCHOR id="NMSettingBridgePort--hairpin-mode" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode">
<ANCHOR id="NMSettingBridgePort--path-cost" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--path-cost">
<ANCHOR id="NMSettingBridgePort--priority" href="libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--priority">
+<ANCHOR id="NMSettingTeam" href="libnm-util/NMSettingTeam.html">
+<ANCHOR id="NMSettingTeam.synopsis" href="libnm-util/NMSettingTeam.html#NMSettingTeam.synopsis">
+<ANCHOR id="NMSettingTeamError" href="libnm-util/NMSettingTeam.html#NMSettingTeamError">
+<ANCHOR id="NMSettingTeam.object-hierarchy" href="libnm-util/NMSettingTeam.html#NMSettingTeam.object-hierarchy">
+<ANCHOR id="NMSettingTeam.properties" href="libnm-util/NMSettingTeam.html#NMSettingTeam.properties">
+<ANCHOR id="NMSettingTeam.description" href="libnm-util/NMSettingTeam.html#NMSettingTeam.description">
+<ANCHOR id="NMSettingTeam.details" href="libnm-util/NMSettingTeam.html#NMSettingTeam.details">
+<ANCHOR id="NM-SETTING-TEAM-SETTING-NAME:CAPS" href="libnm-util/NMSettingTeam.html#NM-SETTING-TEAM-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingTeamError-enum" href="libnm-util/NMSettingTeam.html#NMSettingTeamError-enum">
+<ANCHOR id="NM-SETTING-TEAM-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingTeam.html#NM-SETTING-TEAM-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingTeam.html#NM-SETTING-TEAM-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingTeam.html#NM-SETTING-TEAM-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-ERROR:CAPS" href="libnm-util/NMSettingTeam.html#NM-SETTING-TEAM-ERROR:CAPS">
+<ANCHOR id="nm-setting-team-error-quark" href="libnm-util/NMSettingTeam.html#nm-setting-team-error-quark">
+<ANCHOR id="NM-SETTING-TEAM-INTERFACE-NAME:CAPS" href="libnm-util/NMSettingTeam.html#NM-SETTING-TEAM-INTERFACE-NAME:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-CONFIG:CAPS" href="libnm-util/NMSettingTeam.html#NM-SETTING-TEAM-CONFIG:CAPS">
+<ANCHOR id="NMSettingTeam-struct" href="libnm-util/NMSettingTeam.html#NMSettingTeam-struct">
+<ANCHOR id="NMSettingTeamClass" href="libnm-util/NMSettingTeam.html#NMSettingTeamClass">
+<ANCHOR id="nm-setting-team-new" href="libnm-util/NMSettingTeam.html#nm-setting-team-new">
+<ANCHOR id="nm-setting-team-get-interface-name" href="libnm-util/NMSettingTeam.html#nm-setting-team-get-interface-name">
+<ANCHOR id="nm-setting-team-get-config" href="libnm-util/NMSettingTeam.html#nm-setting-team-get-config">
+<ANCHOR id="NMSettingTeam.property-details" href="libnm-util/NMSettingTeam.html#NMSettingTeam.property-details">
+<ANCHOR id="NMSettingTeam--config" href="libnm-util/NMSettingTeam.html#NMSettingTeam--config">
+<ANCHOR id="NMSettingTeam--interface-name" href="libnm-util/NMSettingTeam.html#NMSettingTeam--interface-name">
+<ANCHOR id="NMSettingTeamPort" href="libnm-util/NMSettingTeamPort.html">
+<ANCHOR id="NMSettingTeamPort.synopsis" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort.synopsis">
+<ANCHOR id="NMSettingTeamPortError" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPortError">
+<ANCHOR id="NMSettingTeamPort.object-hierarchy" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort.object-hierarchy">
+<ANCHOR id="NMSettingTeamPort.properties" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort.properties">
+<ANCHOR id="NMSettingTeamPort.description" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort.description">
+<ANCHOR id="NMSettingTeamPort.details" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort.details">
+<ANCHOR id="NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS" href="libnm-util/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingTeamPortError-enum" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPortError-enum">
+<ANCHOR id="NM-SETTING-TEAM-PORT-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-PORT-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-PORT-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-PORT-ERROR:CAPS" href="libnm-util/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR:CAPS">
+<ANCHOR id="nm-setting-team-port-error-quark" href="libnm-util/NMSettingTeamPort.html#nm-setting-team-port-error-quark">
+<ANCHOR id="NM-SETTING-TEAM-PORT-CONFIG:CAPS" href="libnm-util/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-CONFIG:CAPS">
+<ANCHOR id="NMSettingTeamPort-struct" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort-struct">
+<ANCHOR id="NMSettingTeamPortClass" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPortClass">
+<ANCHOR id="nm-setting-team-port-new" href="libnm-util/NMSettingTeamPort.html#nm-setting-team-port-new">
+<ANCHOR id="nm-setting-team-port-get-config" href="libnm-util/NMSettingTeamPort.html#nm-setting-team-port-get-config">
+<ANCHOR id="NMSettingTeamPort.property-details" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort.property-details">
+<ANCHOR id="NMSettingTeamPort--config" href="libnm-util/NMSettingTeamPort.html#NMSettingTeamPort--config">
+<ANCHOR id="NMSettingGeneric" href="libnm-util/NMSettingGeneric.html">
+<ANCHOR id="NMSettingGeneric.synopsis" href="libnm-util/NMSettingGeneric.html#NMSettingGeneric.synopsis">
+<ANCHOR id="NMSettingGenericError" href="libnm-util/NMSettingGeneric.html#NMSettingGenericError">
+<ANCHOR id="NMSettingGeneric.object-hierarchy" href="libnm-util/NMSettingGeneric.html#NMSettingGeneric.object-hierarchy">
+<ANCHOR id="NMSettingGeneric.description" href="libnm-util/NMSettingGeneric.html#NMSettingGeneric.description">
+<ANCHOR id="NMSettingGeneric.details" href="libnm-util/NMSettingGeneric.html#NMSettingGeneric.details">
+<ANCHOR id="NM-SETTING-GENERIC-SETTING-NAME:CAPS" href="libnm-util/NMSettingGeneric.html#NM-SETTING-GENERIC-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingGenericError-enum" href="libnm-util/NMSettingGeneric.html#NMSettingGenericError-enum">
+<ANCHOR id="NM-SETTING-GENERIC-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-GENERIC-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-GENERIC-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-GENERIC-ERROR:CAPS" href="libnm-util/NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR:CAPS">
+<ANCHOR id="nm-setting-generic-error-quark" href="libnm-util/NMSettingGeneric.html#nm-setting-generic-error-quark">
+<ANCHOR id="NMSettingGeneric-struct" href="libnm-util/NMSettingGeneric.html#NMSettingGeneric-struct">
+<ANCHOR id="NMSettingGenericClass" href="libnm-util/NMSettingGeneric.html#NMSettingGenericClass">
+<ANCHOR id="nm-setting-generic-new" href="libnm-util/NMSettingGeneric.html#nm-setting-generic-new">
<ANCHOR id="NMSettingInfiniband" href="libnm-util/NMSettingInfiniband.html">
-<ANCHOR id="NMSettingInfiniband.functions" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.functions">
-<ANCHOR id="NMSettingInfiniband.properties" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.properties">
-<ANCHOR id="NMSettingInfiniband.other" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.other">
+<ANCHOR id="NMSettingInfiniband.synopsis" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.synopsis">
+<ANCHOR id="NMSettingInfinibandError" href="libnm-util/NMSettingInfiniband.html#NMSettingInfinibandError">
<ANCHOR id="NMSettingInfiniband.object-hierarchy" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.object-hierarchy">
-<ANCHOR id="NMSettingInfiniband.includes" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.includes">
+<ANCHOR id="NMSettingInfiniband.properties" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.properties">
<ANCHOR id="NMSettingInfiniband.description" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.description">
-<ANCHOR id="NMSettingInfiniband.functions_details" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.functions_details">
-<ANCHOR id="nm-setting-infiniband-error-quark" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-error-quark">
-<ANCHOR id="nm-setting-infiniband-new" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-new">
-<ANCHOR id="nm-setting-infiniband-get-mac-address" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address">
-<ANCHOR id="nm-setting-infiniband-get-mtu" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-mtu">
-<ANCHOR id="nm-setting-infiniband-get-transport-mode" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode">
-<ANCHOR id="NMSettingInfiniband.other_details" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.other_details">
+<ANCHOR id="NMSettingInfiniband.details" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.details">
<ANCHOR id="NM-SETTING-INFINIBAND-SETTING-NAME:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingInfinibandError" href="libnm-util/NMSettingInfiniband.html#NMSettingInfinibandError">
+<ANCHOR id="NMSettingInfinibandError-enum" href="libnm-util/NMSettingInfiniband.html#NMSettingInfinibandError-enum">
+<ANCHOR id="NM-SETTING-INFINIBAND-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR-MISSING-PROPERTY:CAPS">
<ANCHOR id="NM-SETTING-INFINIBAND-ERROR:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR:CAPS">
+<ANCHOR id="nm-setting-infiniband-error-quark" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-error-quark">
<ANCHOR id="NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS">
<ANCHOR id="NM-SETTING-INFINIBAND-MTU:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MTU:CAPS">
<ANCHOR id="NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-P-KEY:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-P-KEY:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-PARENT:CAPS" href="libnm-util/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-PARENT:CAPS">
+<ANCHOR id="NMSettingInfiniband-struct" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband-struct">
+<ANCHOR id="NMSettingInfinibandClass" href="libnm-util/NMSettingInfiniband.html#NMSettingInfinibandClass">
+<ANCHOR id="nm-setting-infiniband-new" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-new">
+<ANCHOR id="nm-setting-infiniband-get-mac-address" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address">
+<ANCHOR id="nm-setting-infiniband-get-mtu" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-mtu">
+<ANCHOR id="nm-setting-infiniband-get-transport-mode" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode">
+<ANCHOR id="nm-setting-infiniband-get-p-key" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-p-key">
+<ANCHOR id="nm-setting-infiniband-get-parent" href="libnm-util/NMSettingInfiniband.html#nm-setting-infiniband-get-parent">
<ANCHOR id="NMSettingInfiniband.property-details" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband.property-details">
<ANCHOR id="NMSettingInfiniband--mac-address" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--mac-address">
<ANCHOR id="NMSettingInfiniband--mtu" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--mtu">
+<ANCHOR id="NMSettingInfiniband--p-key" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--p-key">
+<ANCHOR id="NMSettingInfiniband--parent" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--parent">
<ANCHOR id="NMSettingInfiniband--transport-mode" href="libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--transport-mode">
<ANCHOR id="NMSettingVlan" href="libnm-util/NMSettingVlan.html">
-<ANCHOR id="NMSettingVlan.functions" href="libnm-util/NMSettingVlan.html#NMSettingVlan.functions">
-<ANCHOR id="NMSettingVlan.properties" href="libnm-util/NMSettingVlan.html#NMSettingVlan.properties">
-<ANCHOR id="NMSettingVlan.other" href="libnm-util/NMSettingVlan.html#NMSettingVlan.other">
+<ANCHOR id="NMSettingVlan.synopsis" href="libnm-util/NMSettingVlan.html#NMSettingVlan.synopsis">
+<ANCHOR id="NMSettingVlanError" href="libnm-util/NMSettingVlan.html#NMSettingVlanError">
+<ANCHOR id="NMVlanPriorityMap" href="libnm-util/NMSettingVlan.html#NMVlanPriorityMap">
+<ANCHOR id="NMVlanFlags" href="libnm-util/NMSettingVlan.html#NMVlanFlags">
<ANCHOR id="NMSettingVlan.object-hierarchy" href="libnm-util/NMSettingVlan.html#NMSettingVlan.object-hierarchy">
-<ANCHOR id="NMSettingVlan.includes" href="libnm-util/NMSettingVlan.html#NMSettingVlan.includes">
+<ANCHOR id="NMSettingVlan.properties" href="libnm-util/NMSettingVlan.html#NMSettingVlan.properties">
<ANCHOR id="NMSettingVlan.description" href="libnm-util/NMSettingVlan.html#NMSettingVlan.description">
-<ANCHOR id="NMSettingVlan.functions_details" href="libnm-util/NMSettingVlan.html#NMSettingVlan.functions_details">
+<ANCHOR id="NMSettingVlan.details" href="libnm-util/NMSettingVlan.html#NMSettingVlan.details">
+<ANCHOR id="NM-SETTING-VLAN-SETTING-NAME:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingVlanError-enum" href="libnm-util/NMSettingVlan.html#NMSettingVlanError-enum">
+<ANCHOR id="NM-SETTING-VLAN-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-ERROR-INVALID-PARENT:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ERROR-INVALID-PARENT:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-ERROR:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ERROR:CAPS">
<ANCHOR id="nm-setting-vlan-error-quark" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-error-quark">
+<ANCHOR id="NM-SETTING-VLAN-INTERFACE-NAME:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-INTERFACE-NAME:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-PARENT:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-PARENT:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-ID:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ID:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-FLAGS:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS">
+<ANCHOR id="NMSettingVlan-struct" href="libnm-util/NMSettingVlan.html#NMSettingVlan-struct">
+<ANCHOR id="NMSettingVlanClass" href="libnm-util/NMSettingVlan.html#NMSettingVlanClass">
+<ANCHOR id="NMVlanPriorityMap-enum" href="libnm-util/NMSettingVlan.html#NMVlanPriorityMap-enum">
+<ANCHOR id="NM-VLAN-INGRESS-MAP:CAPS" href="libnm-util/NMSettingVlan.html#NM-VLAN-INGRESS-MAP:CAPS">
+<ANCHOR id="NM-VLAN-EGRESS-MAP:CAPS" href="libnm-util/NMSettingVlan.html#NM-VLAN-EGRESS-MAP:CAPS">
+<ANCHOR id="NMVlanFlags-enum" href="libnm-util/NMSettingVlan.html#NMVlanFlags-enum">
+<ANCHOR id="NM-VLAN-FLAG-REORDER-HEADERS:CAPS" href="libnm-util/NMSettingVlan.html#NM-VLAN-FLAG-REORDER-HEADERS:CAPS">
+<ANCHOR id="NM-VLAN-FLAG-GVRP:CAPS" href="libnm-util/NMSettingVlan.html#NM-VLAN-FLAG-GVRP:CAPS">
+<ANCHOR id="NM-VLAN-FLAG-LOOSE-BINDING:CAPS" href="libnm-util/NMSettingVlan.html#NM-VLAN-FLAG-LOOSE-BINDING:CAPS">
<ANCHOR id="nm-setting-vlan-new" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-new">
<ANCHOR id="nm-setting-vlan-get-interface-name" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-get-interface-name">
<ANCHOR id="nm-setting-vlan-get-parent" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-get-parent">
@@ -645,20 +890,10 @@
<ANCHOR id="nm-setting-vlan-get-priority" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-get-priority">
<ANCHOR id="nm-setting-vlan-add-priority" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-add-priority">
<ANCHOR id="nm-setting-vlan-remove-priority" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-remove-priority">
+<ANCHOR id="nm-setting-vlan-remove-priority-by-value" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-remove-priority-by-value">
+<ANCHOR id="nm-setting-vlan-remove-priority-str-by-value" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-remove-priority-str-by-value">
<ANCHOR id="nm-setting-vlan-clear-priorities" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-clear-priorities">
<ANCHOR id="nm-setting-vlan-add-priority-str" href="libnm-util/NMSettingVlan.html#nm-setting-vlan-add-priority-str">
-<ANCHOR id="NMSettingVlan.other_details" href="libnm-util/NMSettingVlan.html#NMSettingVlan.other_details">
-<ANCHOR id="NM-SETTING-VLAN-SETTING-NAME:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingVlanError" href="libnm-util/NMSettingVlan.html#NMSettingVlanError">
-<ANCHOR id="NM-SETTING-VLAN-ERROR:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-VLAN-INTERFACE-NAME:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-INTERFACE-NAME:CAPS">
-<ANCHOR id="NM-SETTING-VLAN-PARENT:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-PARENT:CAPS">
-<ANCHOR id="NM-SETTING-VLAN-ID:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-ID:CAPS">
-<ANCHOR id="NM-SETTING-VLAN-FLAGS:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS">
-<ANCHOR id="NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS" href="libnm-util/NMSettingVlan.html#NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS">
-<ANCHOR id="NMVlanPriorityMap" href="libnm-util/NMSettingVlan.html#NMVlanPriorityMap">
-<ANCHOR id="NMVlanFlags" href="libnm-util/NMSettingVlan.html#NMVlanFlags">
<ANCHOR id="NMSettingVlan.property-details" href="libnm-util/NMSettingVlan.html#NMSettingVlan.property-details">
<ANCHOR id="NMSettingVlan--egress-priority-map" href="libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map">
<ANCHOR id="NMSettingVlan--flags" href="libnm-util/NMSettingVlan.html#NMSettingVlan--flags">
@@ -667,49 +902,46 @@
<ANCHOR id="NMSettingVlan--interface-name" href="libnm-util/NMSettingVlan.html#NMSettingVlan--interface-name">
<ANCHOR id="NMSettingVlan--parent" href="libnm-util/NMSettingVlan.html#NMSettingVlan--parent">
<ANCHOR id="NMSettingOlpcMesh" href="libnm-util/NMSettingOlpcMesh.html">
-<ANCHOR id="NMSettingOlpcMesh.functions" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.functions">
-<ANCHOR id="NMSettingOlpcMesh.properties" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.properties">
-<ANCHOR id="NMSettingOlpcMesh.other" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.other">
+<ANCHOR id="NMSettingOlpcMesh.synopsis" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.synopsis">
+<ANCHOR id="NMSettingOlpcMeshError" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMeshError">
<ANCHOR id="NMSettingOlpcMesh.object-hierarchy" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.object-hierarchy">
+<ANCHOR id="NMSettingOlpcMesh.properties" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.properties">
<ANCHOR id="NMSettingOlpcMesh.description" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.description">
-<ANCHOR id="NMSettingOlpcMesh.functions_details" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.functions_details">
-<ANCHOR id="nm-setting-olpc-mesh-error-quark" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark">
-<ANCHOR id="nm-setting-olpc-mesh-new" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new">
-<ANCHOR id="nm-setting-olpc-mesh-get-ssid" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid">
-<ANCHOR id="nm-setting-olpc-mesh-get-channel" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel">
-<ANCHOR id="nm-setting-olpc-mesh-get-dhcp-anycast-address" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address">
-<ANCHOR id="NMSettingOlpcMesh.other_details" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.other_details">
+<ANCHOR id="NMSettingOlpcMesh.details" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.details">
<ANCHOR id="NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingOlpcMeshError" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMeshError">
+<ANCHOR id="NMSettingOlpcMeshError-enum" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMeshError-enum">
+<ANCHOR id="NM-SETTING-OLPC-MESH-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-OLPC-MESH-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-OLPC-MESH-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR-MISSING-PROPERTY:CAPS">
<ANCHOR id="NM-SETTING-OLPC-MESH-ERROR:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR:CAPS">
+<ANCHOR id="nm-setting-olpc-mesh-error-quark" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark">
<ANCHOR id="NM-SETTING-OLPC-MESH-SSID:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SSID:CAPS">
<ANCHOR id="NM-SETTING-OLPC-MESH-CHANNEL:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-CHANNEL:CAPS">
<ANCHOR id="NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS" href="libnm-util/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS">
+<ANCHOR id="NMSettingOlpcMesh-struct" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh-struct">
+<ANCHOR id="NMSettingOlpcMeshClass" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMeshClass">
+<ANCHOR id="nm-setting-olpc-mesh-new" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new">
+<ANCHOR id="nm-setting-olpc-mesh-get-ssid" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid">
+<ANCHOR id="nm-setting-olpc-mesh-get-channel" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel">
+<ANCHOR id="nm-setting-olpc-mesh-get-dhcp-anycast-address" href="libnm-util/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address">
<ANCHOR id="NMSettingOlpcMesh.property-details" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh.property-details">
<ANCHOR id="NMSettingOlpcMesh--channel" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel">
<ANCHOR id="NMSettingOlpcMesh--dhcp-anycast-address" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address">
<ANCHOR id="NMSettingOlpcMesh--ssid" href="libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid">
<ANCHOR id="NMSettingAdsl" href="libnm-util/NMSettingAdsl.html">
-<ANCHOR id="NMSettingAdsl.functions" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.functions">
-<ANCHOR id="NMSettingAdsl.properties" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.properties">
-<ANCHOR id="NMSettingAdsl.other" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.other">
+<ANCHOR id="NMSettingAdsl.synopsis" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.synopsis">
+<ANCHOR id="NMSettingAdslError" href="libnm-util/NMSettingAdsl.html#NMSettingAdslError">
<ANCHOR id="NMSettingAdsl.object-hierarchy" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.object-hierarchy">
-<ANCHOR id="NMSettingAdsl.includes" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.includes">
+<ANCHOR id="NMSettingAdsl.properties" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.properties">
<ANCHOR id="NMSettingAdsl.description" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.description">
-<ANCHOR id="NMSettingAdsl.functions_details" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.functions_details">
-<ANCHOR id="nm-setting-adsl-error-quark" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-error-quark">
-<ANCHOR id="nm-setting-adsl-new" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-new">
-<ANCHOR id="nm-setting-adsl-get-username" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-username">
-<ANCHOR id="nm-setting-adsl-get-password" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-password">
-<ANCHOR id="nm-setting-adsl-get-protocol" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-protocol">
-<ANCHOR id="nm-setting-adsl-get-encapsulation" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-encapsulation">
-<ANCHOR id="nm-setting-adsl-get-vpi" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-vpi">
-<ANCHOR id="nm-setting-adsl-get-vci" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-vci">
-<ANCHOR id="nm-setting-adsl-get-password-flags" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-password-flags">
-<ANCHOR id="NMSettingAdsl.other_details" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.other_details">
+<ANCHOR id="NMSettingAdsl.details" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.details">
<ANCHOR id="NM-SETTING-ADSL-SETTING-NAME:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingAdslError" href="libnm-util/NMSettingAdsl.html#NMSettingAdslError">
+<ANCHOR id="NMSettingAdslError-enum" href="libnm-util/NMSettingAdsl.html#NMSettingAdslError-enum">
+<ANCHOR id="NM-SETTING-ADSL-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-ERROR-MISSING-PROPERTY:CAPS">
<ANCHOR id="NM-SETTING-ADSL-ERROR:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-ERROR:CAPS">
+<ANCHOR id="nm-setting-adsl-error-quark" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-error-quark">
<ANCHOR id="NM-SETTING-ADSL-USERNAME:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-USERNAME:CAPS">
<ANCHOR id="NM-SETTING-ADSL-PASSWORD:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD:CAPS">
<ANCHOR id="NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS">
@@ -722,6 +954,16 @@
<ANCHOR id="NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS">
<ANCHOR id="NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS">
<ANCHOR id="NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS" href="libnm-util/NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS">
+<ANCHOR id="NMSettingAdsl-struct" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl-struct">
+<ANCHOR id="NMSettingAdslClass" href="libnm-util/NMSettingAdsl.html#NMSettingAdslClass">
+<ANCHOR id="nm-setting-adsl-new" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-new">
+<ANCHOR id="nm-setting-adsl-get-username" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-username">
+<ANCHOR id="nm-setting-adsl-get-password" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-password">
+<ANCHOR id="nm-setting-adsl-get-protocol" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-protocol">
+<ANCHOR id="nm-setting-adsl-get-encapsulation" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-encapsulation">
+<ANCHOR id="nm-setting-adsl-get-vpi" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-vpi">
+<ANCHOR id="nm-setting-adsl-get-vci" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-vci">
+<ANCHOR id="nm-setting-adsl-get-password-flags" href="libnm-util/NMSettingAdsl.html#nm-setting-adsl-get-password-flags">
<ANCHOR id="NMSettingAdsl.property-details" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl.property-details">
<ANCHOR id="NMSettingAdsl--encapsulation" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl--encapsulation">
<ANCHOR id="NMSettingAdsl--password" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl--password">
@@ -730,20 +972,148 @@
<ANCHOR id="NMSettingAdsl--username" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl--username">
<ANCHOR id="NMSettingAdsl--vci" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl--vci">
<ANCHOR id="NMSettingAdsl--vpi" href="libnm-util/NMSettingAdsl.html#NMSettingAdsl--vpi">
+<ANCHOR id="NMSettingDcb" href="libnm-util/NMSettingDcb.html">
+<ANCHOR id="NMSettingDcb.synopsis" href="libnm-util/NMSettingDcb.html#NMSettingDcb.synopsis">
+<ANCHOR id="NMSettingDcbError" href="libnm-util/NMSettingDcb.html#NMSettingDcbError">
+<ANCHOR id="NMSettingDcbFlags" href="libnm-util/NMSettingDcb.html#NMSettingDcbFlags">
+<ANCHOR id="NMSettingDcb.object-hierarchy" href="libnm-util/NMSettingDcb.html#NMSettingDcb.object-hierarchy">
+<ANCHOR id="NMSettingDcb.properties" href="libnm-util/NMSettingDcb.html#NMSettingDcb.properties">
+<ANCHOR id="NMSettingDcb.description" href="libnm-util/NMSettingDcb.html#NMSettingDcb.description">
+<ANCHOR id="NMSettingDcb.details" href="libnm-util/NMSettingDcb.html#NMSettingDcb.details">
+<ANCHOR id="NM-SETTING-DCB-SETTING-NAME:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingDcbError-enum" href="libnm-util/NMSettingDcb.html#NMSettingDcbError-enum">
+<ANCHOR id="NM-SETTING-DCB-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-DCB-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-ERROR:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-ERROR:CAPS">
+<ANCHOR id="nm-setting-dcb-error-quark" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-error-quark">
+<ANCHOR id="NMSettingDcbFlags-enum" href="libnm-util/NMSettingDcb.html#NMSettingDcbFlags-enum">
+<ANCHOR id="NM-SETTING-DCB-FLAG-NONE:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-FLAG-NONE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FLAG-ENABLE:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FLAG-ADVERTISE:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FLAG-WILLING:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FCOE-MODE:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-MODE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FIP-FLAGS:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS" href="libnm-util/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS">
+<ANCHOR id="NMSettingDcb-struct" href="libnm-util/NMSettingDcb.html#NMSettingDcb-struct">
+<ANCHOR id="NMSettingDcbClass" href="libnm-util/NMSettingDcb.html#NMSettingDcbClass">
+<ANCHOR id="nm-setting-dcb-new" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-new">
+<ANCHOR id="nm-setting-dcb-get-app-fcoe-flags" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-flags">
+<ANCHOR id="nm-setting-dcb-get-app-fcoe-priority" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-priority">
+<ANCHOR id="nm-setting-dcb-get-app-fcoe-mode" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-mode">
+<ANCHOR id="nm-setting-dcb-get-app-iscsi-flags" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-flags">
+<ANCHOR id="nm-setting-dcb-get-app-iscsi-priority" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-priority">
+<ANCHOR id="nm-setting-dcb-get-app-fip-flags" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-app-fip-flags">
+<ANCHOR id="nm-setting-dcb-get-app-fip-priority" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-app-fip-priority">
+<ANCHOR id="nm-setting-dcb-get-priority-flow-control-flags" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control-flags">
+<ANCHOR id="nm-setting-dcb-get-priority-flow-control" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control">
+<ANCHOR id="nm-setting-dcb-set-priority-flow-control" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-set-priority-flow-control">
+<ANCHOR id="nm-setting-dcb-get-priority-group-flags" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-group-flags">
+<ANCHOR id="nm-setting-dcb-get-priority-group-id" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-group-id">
+<ANCHOR id="nm-setting-dcb-set-priority-group-id" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-set-priority-group-id">
+<ANCHOR id="nm-setting-dcb-get-priority-group-bandwidth" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-group-bandwidth">
+<ANCHOR id="nm-setting-dcb-set-priority-group-bandwidth" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-set-priority-group-bandwidth">
+<ANCHOR id="nm-setting-dcb-get-priority-bandwidth" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-bandwidth">
+<ANCHOR id="nm-setting-dcb-set-priority-bandwidth" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-set-priority-bandwidth">
+<ANCHOR id="nm-setting-dcb-get-priority-strict-bandwidth" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-strict-bandwidth">
+<ANCHOR id="nm-setting-dcb-set-priority-strict-bandwidth" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-set-priority-strict-bandwidth">
+<ANCHOR id="nm-setting-dcb-get-priority-traffic-class" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-get-priority-traffic-class">
+<ANCHOR id="nm-setting-dcb-set-priority-traffic-class" href="libnm-util/NMSettingDcb.html#nm-setting-dcb-set-priority-traffic-class">
+<ANCHOR id="NMSettingDcb.property-details" href="libnm-util/NMSettingDcb.html#NMSettingDcb.property-details">
+<ANCHOR id="NMSettingDcb--app-fcoe-flags" href="libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-flags">
+<ANCHOR id="NMSettingDcb--app-fcoe-mode" href="libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-mode">
+<ANCHOR id="NMSettingDcb--app-fcoe-priority" href="libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-priority">
+<ANCHOR id="NMSettingDcb--app-fip-flags" href="libnm-util/NMSettingDcb.html#NMSettingDcb--app-fip-flags">
+<ANCHOR id="NMSettingDcb--app-fip-priority" href="libnm-util/NMSettingDcb.html#NMSettingDcb--app-fip-priority">
+<ANCHOR id="NMSettingDcb--app-iscsi-flags" href="libnm-util/NMSettingDcb.html#NMSettingDcb--app-iscsi-flags">
+<ANCHOR id="NMSettingDcb--app-iscsi-priority" href="libnm-util/NMSettingDcb.html#NMSettingDcb--app-iscsi-priority">
+<ANCHOR id="NMSettingDcb--priority-bandwidth" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-bandwidth">
+<ANCHOR id="NMSettingDcb--priority-flow-control" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-flow-control">
+<ANCHOR id="NMSettingDcb--priority-flow-control-flags" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags">
+<ANCHOR id="NMSettingDcb--priority-group-bandwidth" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-bandwidth">
+<ANCHOR id="NMSettingDcb--priority-group-flags" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags">
+<ANCHOR id="NMSettingDcb--priority-group-id" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-id">
+<ANCHOR id="NMSettingDcb--priority-strict-bandwidth" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-strict-bandwidth">
+<ANCHOR id="NMSettingDcb--priority-traffic-class" href="libnm-util/NMSettingDcb.html#NMSettingDcb--priority-traffic-class">
<ANCHOR id="NMSetting8021x" href="libnm-util/NMSetting8021x.html">
-<ANCHOR id="NMSetting8021x.functions" href="libnm-util/NMSetting8021x.html#NMSetting8021x.functions">
-<ANCHOR id="NMSetting8021x.properties" href="libnm-util/NMSetting8021x.html#NMSetting8021x.properties">
-<ANCHOR id="NMSetting8021x.other" href="libnm-util/NMSetting8021x.html#NMSetting8021x.other">
+<ANCHOR id="NMSetting8021x.synopsis" href="libnm-util/NMSetting8021x.html#NMSetting8021x.synopsis">
+<ANCHOR id="NMSetting8021xCKFormat" href="libnm-util/NMSetting8021x.html#NMSetting8021xCKFormat">
+<ANCHOR id="NMSetting8021xCKScheme" href="libnm-util/NMSetting8021x.html#NMSetting8021xCKScheme">
+<ANCHOR id="NMSetting8021xError" href="libnm-util/NMSetting8021x.html#NMSetting8021xError">
<ANCHOR id="NMSetting8021x.object-hierarchy" href="libnm-util/NMSetting8021x.html#NMSetting8021x.object-hierarchy">
-<ANCHOR id="NMSetting8021x.includes" href="libnm-util/NMSetting8021x.html#NMSetting8021x.includes">
+<ANCHOR id="NMSetting8021x.properties" href="libnm-util/NMSetting8021x.html#NMSetting8021x.properties">
<ANCHOR id="NMSetting8021x.description" href="libnm-util/NMSetting8021x.html#NMSetting8021x.description">
-<ANCHOR id="NMSetting8021x.functions_details" href="libnm-util/NMSetting8021x.html#NMSetting8021x.functions_details">
+<ANCHOR id="NMSetting8021x.details" href="libnm-util/NMSetting8021x.html#NMSetting8021x.details">
+<ANCHOR id="NMSetting8021xCKFormat-enum" href="libnm-util/NMSetting8021x.html#NMSetting8021xCKFormat-enum">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-UNKNOWN:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-X509:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-X509:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-RAW-KEY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-RAW-KEY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-PKCS12:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-PKCS12:CAPS">
+<ANCHOR id="NMSetting8021xCKScheme-enum" href="libnm-util/NMSetting8021x.html#NMSetting8021xCKScheme-enum">
+<ANCHOR id="NM-SETTING-802-1X-CK-SCHEME-UNKNOWN:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-SETTING-NAME:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-SETTING-NAME:CAPS">
+<ANCHOR id="NMSetting8021xError-enum" href="libnm-util/NMSetting8021x.html#NMSetting8021xError-enum">
+<ANCHOR id="NM-SETTING-802-1X-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-ERROR:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ERROR:CAPS">
<ANCHOR id="nm-setting-802-1x-error-quark" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-error-quark">
+<ANCHOR id="NM-SETTING-802-1X-EAP:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-EAP:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-IDENTITY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-IDENTITY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PAC-FILE:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PAC-FILE:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CA-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CA-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CA-PATH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CA-PATH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-SUBJECT-MATCH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-SUBJECT-MATCH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CLIENT-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CLIENT-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-AUTH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD-RAW:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PIN:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PIN:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PIN-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PIN-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS">
+<ANCHOR id="NMSetting8021x-struct" href="libnm-util/NMSetting8021x.html#NMSetting8021x-struct">
+<ANCHOR id="NMSetting8021xClass" href="libnm-util/NMSetting8021x.html#NMSetting8021xClass">
<ANCHOR id="nm-setting-802-1x-new" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-new">
<ANCHOR id="nm-setting-802-1x-get-num-eap-methods" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods">
<ANCHOR id="nm-setting-802-1x-get-eap-method" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-eap-method">
<ANCHOR id="nm-setting-802-1x-add-eap-method" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-add-eap-method">
<ANCHOR id="nm-setting-802-1x-remove-eap-method" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-remove-eap-method">
+<ANCHOR id="nm-setting-802-1x-remove-eap-method-by-value" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-remove-eap-method-by-value">
<ANCHOR id="nm-setting-802-1x-clear-eap-methods" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods">
<ANCHOR id="nm-setting-802-1x-get-identity" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-identity">
<ANCHOR id="nm-setting-802-1x-get-anonymous-identity" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity">
@@ -760,6 +1130,7 @@
<ANCHOR id="nm-setting-802-1x-get-altsubject-match" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match">
<ANCHOR id="nm-setting-802-1x-add-altsubject-match" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match">
<ANCHOR id="nm-setting-802-1x-remove-altsubject-match" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-remove-altsubject-match-by-value" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match-by-value">
<ANCHOR id="nm-setting-802-1x-clear-altsubject-matches" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches">
<ANCHOR id="nm-setting-802-1x-get-client-cert-scheme" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme">
<ANCHOR id="nm-setting-802-1x-get-client-cert-blob" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob">
@@ -779,6 +1150,7 @@
<ANCHOR id="nm-setting-802-1x-get-phase2-altsubject-match" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match">
<ANCHOR id="nm-setting-802-1x-add-phase2-altsubject-match" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match">
<ANCHOR id="nm-setting-802-1x-remove-phase2-altsubject-match" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-remove-phase2-altsubject-match-by-value" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match-by-value">
<ANCHOR id="nm-setting-802-1x-clear-phase2-altsubject-matches" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches">
<ANCHOR id="nm-setting-802-1x-get-phase2-client-cert-scheme" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme">
<ANCHOR id="nm-setting-802-1x-get-phase2-client-cert-blob" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob">
@@ -804,44 +1176,6 @@
<ANCHOR id="nm-setting-802-1x-get-phase2-private-key-password" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password">
<ANCHOR id="nm-setting-802-1x-get-phase2-private-key-password-flags" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password-flags">
<ANCHOR id="nm-setting-802-1x-get-phase2-private-key-format" href="libnm-util/NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format">
-<ANCHOR id="NMSetting8021x.other_details" href="libnm-util/NMSetting8021x.html#NMSetting8021x.other_details">
-<ANCHOR id="NMSetting8021xCKFormat" href="libnm-util/NMSetting8021x.html#NMSetting8021xCKFormat">
-<ANCHOR id="NMSetting8021xCKScheme" href="libnm-util/NMSetting8021x.html#NMSetting8021xCKScheme">
-<ANCHOR id="NM-SETTING-802-1X-SETTING-NAME:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-SETTING-NAME:CAPS">
-<ANCHOR id="NMSetting8021xError" href="libnm-util/NMSetting8021x.html#NMSetting8021xError">
-<ANCHOR id="NM-SETTING-802-1X-ERROR:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-EAP:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-EAP:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-IDENTITY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-IDENTITY:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PAC-FILE:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PAC-FILE:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-CA-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CA-CERT:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-CA-PATH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CA-PATH:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-SUBJECT-MATCH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-SUBJECT-MATCH:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-CLIENT-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-CLIENT-CERT:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-AUTH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTH:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PASSWORD:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PASSWORD-RAW:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PIN:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PIN:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-PIN-FLAGS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-PIN-FLAGS:CAPS">
-<ANCHOR id="NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS" href="libnm-util/NMSetting8021x.html#NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS">
<ANCHOR id="NMSetting8021x.property-details" href="libnm-util/NMSetting8021x.html#NMSetting8021x.property-details">
<ANCHOR id="NMSetting8021x--altsubject-matches" href="libnm-util/NMSetting8021x.html#NMSetting8021x--altsubject-matches">
<ANCHOR id="NMSetting8021x--anonymous-identity" href="libnm-util/NMSetting8021x.html#NMSetting8021x--anonymous-identity">
@@ -876,16 +1210,40 @@
<ANCHOR id="NMSetting8021x--subject-match" href="libnm-util/NMSetting8021x.html#NMSetting8021x--subject-match">
<ANCHOR id="NMSetting8021x--system-ca-certs" href="libnm-util/NMSetting8021x.html#NMSetting8021x--system-ca-certs">
<ANCHOR id="NMSettingIP4Config" href="libnm-util/NMSettingIP4Config.html">
-<ANCHOR id="NMSettingIP4Config.functions" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.functions">
-<ANCHOR id="NMSettingIP4Config.properties" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.properties">
+<ANCHOR id="NMSettingIP4Config.synopsis" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.synopsis">
+<ANCHOR id="NMSettingIP4ConfigError" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4ConfigError">
<ANCHOR id="NMIP4Address" href="libnm-util/NMSettingIP4Config.html#NMIP4Address">
<ANCHOR id="NMIP4Route" href="libnm-util/NMSettingIP4Config.html#NMIP4Route">
-<ANCHOR id="NMSettingIP4Config.other" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.other">
<ANCHOR id="NMSettingIP4Config.object-hierarchy" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.object-hierarchy">
-<ANCHOR id="NMSettingIP4Config.includes" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.includes">
+<ANCHOR id="NMSettingIP4Config.properties" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.properties">
<ANCHOR id="NMSettingIP4Config.description" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.description">
-<ANCHOR id="NMSettingIP4Config.functions_details" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.functions_details">
+<ANCHOR id="NMSettingIP4Config.details" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.details">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingIP4ConfigError-enum" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4ConfigError-enum">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-ERROR:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR:CAPS">
<ANCHOR id="nm-setting-ip4-config-error-quark" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-error-quark">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-DNS:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-ROUTES:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS">
+<ANCHOR id="NMIP4Address" href="libnm-util/NMSettingIP4Config.html#NMIP4Address">
<ANCHOR id="nm-ip4-address-new" href="libnm-util/NMSettingIP4Config.html#nm-ip4-address-new">
<ANCHOR id="nm-ip4-address-dup" href="libnm-util/NMSettingIP4Config.html#nm-ip4-address-dup">
<ANCHOR id="nm-ip4-address-ref" href="libnm-util/NMSettingIP4Config.html#nm-ip4-address-ref">
@@ -897,6 +1255,7 @@
<ANCHOR id="nm-ip4-address-set-prefix" href="libnm-util/NMSettingIP4Config.html#nm-ip4-address-set-prefix">
<ANCHOR id="nm-ip4-address-get-gateway" href="libnm-util/NMSettingIP4Config.html#nm-ip4-address-get-gateway">
<ANCHOR id="nm-ip4-address-set-gateway" href="libnm-util/NMSettingIP4Config.html#nm-ip4-address-set-gateway">
+<ANCHOR id="NMIP4Route" href="libnm-util/NMSettingIP4Config.html#NMIP4Route">
<ANCHOR id="nm-ip4-route-new" href="libnm-util/NMSettingIP4Config.html#nm-ip4-route-new">
<ANCHOR id="nm-ip4-route-dup" href="libnm-util/NMSettingIP4Config.html#nm-ip4-route-dup">
<ANCHOR id="nm-ip4-route-ref" href="libnm-util/NMSettingIP4Config.html#nm-ip4-route-ref">
@@ -910,27 +1269,33 @@
<ANCHOR id="nm-ip4-route-set-next-hop" href="libnm-util/NMSettingIP4Config.html#nm-ip4-route-set-next-hop">
<ANCHOR id="nm-ip4-route-get-metric" href="libnm-util/NMSettingIP4Config.html#nm-ip4-route-get-metric">
<ANCHOR id="nm-ip4-route-set-metric" href="libnm-util/NMSettingIP4Config.html#nm-ip4-route-set-metric">
+<ANCHOR id="NMSettingIP4Config-struct" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config-struct">
+<ANCHOR id="NMSettingIP4ConfigClass" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4ConfigClass">
<ANCHOR id="nm-setting-ip4-config-new" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-new">
<ANCHOR id="nm-setting-ip4-config-get-method" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-method">
<ANCHOR id="nm-setting-ip4-config-get-num-dns" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns">
<ANCHOR id="nm-setting-ip4-config-get-dns" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-dns">
<ANCHOR id="nm-setting-ip4-config-add-dns" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-add-dns">
<ANCHOR id="nm-setting-ip4-config-remove-dns" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns">
+<ANCHOR id="nm-setting-ip4-config-remove-dns-by-value" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-by-value">
<ANCHOR id="nm-setting-ip4-config-clear-dns" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns">
<ANCHOR id="nm-setting-ip4-config-get-num-dns-searches" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns-searches">
<ANCHOR id="nm-setting-ip4-config-get-dns-search" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-dns-search">
<ANCHOR id="nm-setting-ip4-config-add-dns-search" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-add-dns-search">
<ANCHOR id="nm-setting-ip4-config-remove-dns-search" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search">
+<ANCHOR id="nm-setting-ip4-config-remove-dns-search-by-value" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search-by-value">
<ANCHOR id="nm-setting-ip4-config-clear-dns-searches" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns-searches">
<ANCHOR id="nm-setting-ip4-config-get-num-addresses" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-num-addresses">
<ANCHOR id="nm-setting-ip4-config-get-address" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-address">
<ANCHOR id="nm-setting-ip4-config-add-address" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-add-address">
<ANCHOR id="nm-setting-ip4-config-remove-address" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-address">
+<ANCHOR id="nm-setting-ip4-config-remove-address-by-value" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-address-by-value">
<ANCHOR id="nm-setting-ip4-config-clear-addresses" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-clear-addresses">
<ANCHOR id="nm-setting-ip4-config-get-num-routes" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-num-routes">
<ANCHOR id="nm-setting-ip4-config-get-route" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-route">
<ANCHOR id="nm-setting-ip4-config-add-route" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-add-route">
<ANCHOR id="nm-setting-ip4-config-remove-route" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-route">
+<ANCHOR id="nm-setting-ip4-config-remove-route-by-value" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-remove-route-by-value">
<ANCHOR id="nm-setting-ip4-config-clear-routes" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-clear-routes">
<ANCHOR id="nm-setting-ip4-config-get-ignore-auto-routes" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-routes">
<ANCHOR id="nm-setting-ip4-config-get-ignore-auto-dns" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-dns">
@@ -939,28 +1304,8 @@
<ANCHOR id="nm-setting-ip4-config-get-dhcp-hostname" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-hostname">
<ANCHOR id="nm-setting-ip4-config-get-never-default" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-never-default">
<ANCHOR id="nm-setting-ip4-config-get-may-fail" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-may-fail">
-<ANCHOR id="NMSettingIP4Config.other_details" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.other_details">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingIP4ConfigError" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4ConfigError">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-ERROR:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-DNS:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-ROUTES:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTES:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-SEND-HOSTNAME:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-HOSTNAME:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-NEVER-DEFAULT:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-MAY-FAIL:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS">
-<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS">
<ANCHOR id="NMSettingIP4Config.property-details" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config.property-details">
+<ANCHOR id="NMSettingIP4Config--address-labels" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--address-labels">
<ANCHOR id="NMSettingIP4Config--addresses" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--addresses">
<ANCHOR id="NMSettingIP4Config--dhcp-client-id" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id">
<ANCHOR id="NMSettingIP4Config--dhcp-hostname" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname">
@@ -974,16 +1319,46 @@
<ANCHOR id="NMSettingIP4Config--never-default" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--never-default">
<ANCHOR id="NMSettingIP4Config--routes" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--routes">
<ANCHOR id="NMSettingIP6Config" href="libnm-util/NMSettingIP6Config.html">
-<ANCHOR id="NMSettingIP6Config.functions" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.functions">
-<ANCHOR id="NMSettingIP6Config.properties" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.properties">
+<ANCHOR id="NMSettingIP6Config.synopsis" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.synopsis">
+<ANCHOR id="NMSettingIP6ConfigError" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6ConfigError">
+<ANCHOR id="NMSettingIP6ConfigPrivacy" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy">
<ANCHOR id="NMIP6Address" href="libnm-util/NMSettingIP6Config.html#NMIP6Address">
<ANCHOR id="NMIP6Route" href="libnm-util/NMSettingIP6Config.html#NMIP6Route">
-<ANCHOR id="NMSettingIP6Config.other" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.other">
<ANCHOR id="NMSettingIP6Config.object-hierarchy" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.object-hierarchy">
-<ANCHOR id="NMSettingIP6Config.includes" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.includes">
+<ANCHOR id="NMSettingIP6Config.properties" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.properties">
<ANCHOR id="NMSettingIP6Config.description" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.description">
-<ANCHOR id="NMSettingIP6Config.functions_details" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.functions_details">
+<ANCHOR id="NMSettingIP6Config.details" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.details">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingIP6ConfigError-enum" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6ConfigError-enum">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-ERROR:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR:CAPS">
<ANCHOR id="nm-setting-ip6-config-error-quark" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-error-quark">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-DNS:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-ROUTES:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS">
+<ANCHOR id="NMSettingIP6ConfigPrivacy-enum" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy-enum">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-UNKNOWN:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-DISABLED:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-DISABLED:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-PUBLIC-ADDR:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-PUBLIC-ADDR:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-TEMP-ADDR:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-TEMP-ADDR:CAPS">
+<ANCHOR id="NMIP6Address" href="libnm-util/NMSettingIP6Config.html#NMIP6Address">
<ANCHOR id="nm-ip6-address-new" href="libnm-util/NMSettingIP6Config.html#nm-ip6-address-new">
<ANCHOR id="nm-ip6-address-dup" href="libnm-util/NMSettingIP6Config.html#nm-ip6-address-dup">
<ANCHOR id="nm-ip6-address-ref" href="libnm-util/NMSettingIP6Config.html#nm-ip6-address-ref">
@@ -995,6 +1370,7 @@
<ANCHOR id="nm-ip6-address-set-prefix" href="libnm-util/NMSettingIP6Config.html#nm-ip6-address-set-prefix">
<ANCHOR id="nm-ip6-address-get-gateway" href="libnm-util/NMSettingIP6Config.html#nm-ip6-address-get-gateway">
<ANCHOR id="nm-ip6-address-set-gateway" href="libnm-util/NMSettingIP6Config.html#nm-ip6-address-set-gateway">
+<ANCHOR id="NMIP6Route" href="libnm-util/NMSettingIP6Config.html#NMIP6Route">
<ANCHOR id="nm-ip6-route-new" href="libnm-util/NMSettingIP6Config.html#nm-ip6-route-new">
<ANCHOR id="nm-ip6-route-dup" href="libnm-util/NMSettingIP6Config.html#nm-ip6-route-dup">
<ANCHOR id="nm-ip6-route-ref" href="libnm-util/NMSettingIP6Config.html#nm-ip6-route-ref">
@@ -1008,27 +1384,33 @@
<ANCHOR id="nm-ip6-route-set-next-hop" href="libnm-util/NMSettingIP6Config.html#nm-ip6-route-set-next-hop">
<ANCHOR id="nm-ip6-route-get-metric" href="libnm-util/NMSettingIP6Config.html#nm-ip6-route-get-metric">
<ANCHOR id="nm-ip6-route-set-metric" href="libnm-util/NMSettingIP6Config.html#nm-ip6-route-set-metric">
+<ANCHOR id="NMSettingIP6Config-struct" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config-struct">
+<ANCHOR id="NMSettingIP6ConfigClass" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6ConfigClass">
<ANCHOR id="nm-setting-ip6-config-new" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-new">
<ANCHOR id="nm-setting-ip6-config-get-method" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-method">
<ANCHOR id="nm-setting-ip6-config-get-num-dns" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns">
<ANCHOR id="nm-setting-ip6-config-get-dns" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-dns">
<ANCHOR id="nm-setting-ip6-config-add-dns" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-add-dns">
<ANCHOR id="nm-setting-ip6-config-remove-dns" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns">
+<ANCHOR id="nm-setting-ip6-config-remove-dns-by-value" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-by-value">
<ANCHOR id="nm-setting-ip6-config-clear-dns" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns">
<ANCHOR id="nm-setting-ip6-config-get-num-dns-searches" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns-searches">
<ANCHOR id="nm-setting-ip6-config-get-dns-search" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-dns-search">
<ANCHOR id="nm-setting-ip6-config-add-dns-search" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-add-dns-search">
<ANCHOR id="nm-setting-ip6-config-remove-dns-search" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search">
+<ANCHOR id="nm-setting-ip6-config-remove-dns-search-by-value" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search-by-value">
<ANCHOR id="nm-setting-ip6-config-clear-dns-searches" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns-searches">
<ANCHOR id="nm-setting-ip6-config-get-num-addresses" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-num-addresses">
<ANCHOR id="nm-setting-ip6-config-get-address" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-address">
<ANCHOR id="nm-setting-ip6-config-add-address" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-add-address">
<ANCHOR id="nm-setting-ip6-config-remove-address" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-address">
+<ANCHOR id="nm-setting-ip6-config-remove-address-by-value" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-address-by-value">
<ANCHOR id="nm-setting-ip6-config-clear-addresses" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-clear-addresses">
<ANCHOR id="nm-setting-ip6-config-get-num-routes" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-num-routes">
<ANCHOR id="nm-setting-ip6-config-get-route" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-route">
<ANCHOR id="nm-setting-ip6-config-add-route" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-add-route">
<ANCHOR id="nm-setting-ip6-config-remove-route" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-route">
+<ANCHOR id="nm-setting-ip6-config-remove-route-by-value" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-remove-route-by-value">
<ANCHOR id="nm-setting-ip6-config-clear-routes" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-clear-routes">
<ANCHOR id="nm-setting-ip6-config-get-ignore-auto-routes" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-routes">
<ANCHOR id="nm-setting-ip6-config-get-ignore-auto-dns" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns">
@@ -1036,28 +1418,6 @@
<ANCHOR id="nm-setting-ip6-config-get-never-default" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default">
<ANCHOR id="nm-setting-ip6-config-get-may-fail" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-may-fail">
<ANCHOR id="nm-setting-ip6-config-get-ip6-privacy" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy">
-<ANCHOR id="NMSettingIP6Config.other_details" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.other_details">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingIP6ConfigError" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6ConfigError">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-ERROR:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-DNS:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-ROUTES:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTES:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-MAY-FAIL:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DHCP-HOSTNAME:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS">
-<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS">
-<ANCHOR id="NMSettingIP6ConfigPrivacy" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy">
<ANCHOR id="NMSettingIP6Config.property-details" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.property-details">
<ANCHOR id="NMSettingIP6Config--addresses" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--addresses">
<ANCHOR id="NMSettingIP6Config--dhcp-hostname" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname">
@@ -1071,37 +1431,20 @@
<ANCHOR id="NMSettingIP6Config--never-default" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--never-default">
<ANCHOR id="NMSettingIP6Config--routes" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--routes">
<ANCHOR id="NMSettingPPP" href="libnm-util/NMSettingPPP.html">
-<ANCHOR id="NMSettingPPP.functions" href="libnm-util/NMSettingPPP.html#NMSettingPPP.functions">
-<ANCHOR id="NMSettingPPP.properties" href="libnm-util/NMSettingPPP.html#NMSettingPPP.properties">
-<ANCHOR id="NMSettingPPP.other" href="libnm-util/NMSettingPPP.html#NMSettingPPP.other">
+<ANCHOR id="NMSettingPPP.synopsis" href="libnm-util/NMSettingPPP.html#NMSettingPPP.synopsis">
+<ANCHOR id="NMSettingPPPError" href="libnm-util/NMSettingPPP.html#NMSettingPPPError">
<ANCHOR id="NMSettingPPP.object-hierarchy" href="libnm-util/NMSettingPPP.html#NMSettingPPP.object-hierarchy">
-<ANCHOR id="NMSettingPPP.includes" href="libnm-util/NMSettingPPP.html#NMSettingPPP.includes">
+<ANCHOR id="NMSettingPPP.properties" href="libnm-util/NMSettingPPP.html#NMSettingPPP.properties">
<ANCHOR id="NMSettingPPP.description" href="libnm-util/NMSettingPPP.html#NMSettingPPP.description">
-<ANCHOR id="NMSettingPPP.functions_details" href="libnm-util/NMSettingPPP.html#NMSettingPPP.functions_details">
-<ANCHOR id="nm-setting-ppp-error-quark" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-error-quark">
-<ANCHOR id="nm-setting-ppp-new" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-new">
-<ANCHOR id="nm-setting-ppp-get-noauth" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-noauth">
-<ANCHOR id="nm-setting-ppp-get-refuse-eap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-eap">
-<ANCHOR id="nm-setting-ppp-get-refuse-pap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-pap">
-<ANCHOR id="nm-setting-ppp-get-refuse-chap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-chap">
-<ANCHOR id="nm-setting-ppp-get-refuse-mschap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap">
-<ANCHOR id="nm-setting-ppp-get-refuse-mschapv2" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2">
-<ANCHOR id="nm-setting-ppp-get-nobsdcomp" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp">
-<ANCHOR id="nm-setting-ppp-get-nodeflate" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-nodeflate">
-<ANCHOR id="nm-setting-ppp-get-no-vj-comp" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp">
-<ANCHOR id="nm-setting-ppp-get-require-mppe" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-require-mppe">
-<ANCHOR id="nm-setting-ppp-get-require-mppe-128" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128">
-<ANCHOR id="nm-setting-ppp-get-mppe-stateful" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful">
-<ANCHOR id="nm-setting-ppp-get-crtscts" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-crtscts">
-<ANCHOR id="nm-setting-ppp-get-baud" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-baud">
-<ANCHOR id="nm-setting-ppp-get-mru" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-mru">
-<ANCHOR id="nm-setting-ppp-get-mtu" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-mtu">
-<ANCHOR id="nm-setting-ppp-get-lcp-echo-failure" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure">
-<ANCHOR id="nm-setting-ppp-get-lcp-echo-interval" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval">
-<ANCHOR id="NMSettingPPP.other_details" href="libnm-util/NMSettingPPP.html#NMSettingPPP.other_details">
+<ANCHOR id="NMSettingPPP.details" href="libnm-util/NMSettingPPP.html#NMSettingPPP.details">
<ANCHOR id="NM-SETTING-PPP-SETTING-NAME:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingPPPError" href="libnm-util/NMSettingPPP.html#NMSettingPPPError">
+<ANCHOR id="NMSettingPPPError-enum" href="libnm-util/NMSettingPPP.html#NMSettingPPPError-enum">
+<ANCHOR id="NM-SETTING-PPP-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-PPP-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-PPP-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-PPP-ERROR-REQUIRE-MPPE-NOT-ALLOWED:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-ERROR-REQUIRE-MPPE-NOT-ALLOWED:CAPS">
<ANCHOR id="NM-SETTING-PPP-ERROR:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-ERROR:CAPS">
+<ANCHOR id="nm-setting-ppp-error-quark" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-error-quark">
<ANCHOR id="NM-SETTING-PPP-NOAUTH:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-NOAUTH:CAPS">
<ANCHOR id="NM-SETTING-PPP-REFUSE-EAP:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-REFUSE-EAP:CAPS">
<ANCHOR id="NM-SETTING-PPP-REFUSE-PAP:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-REFUSE-PAP:CAPS">
@@ -1120,6 +1463,27 @@
<ANCHOR id="NM-SETTING-PPP-MTU:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-MTU:CAPS">
<ANCHOR id="NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS">
<ANCHOR id="NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS" href="libnm-util/NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS">
+<ANCHOR id="NMSettingPPP-struct" href="libnm-util/NMSettingPPP.html#NMSettingPPP-struct">
+<ANCHOR id="NMSettingPPPClass" href="libnm-util/NMSettingPPP.html#NMSettingPPPClass">
+<ANCHOR id="nm-setting-ppp-new" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-new">
+<ANCHOR id="nm-setting-ppp-get-noauth" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-noauth">
+<ANCHOR id="nm-setting-ppp-get-refuse-eap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-eap">
+<ANCHOR id="nm-setting-ppp-get-refuse-pap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-pap">
+<ANCHOR id="nm-setting-ppp-get-refuse-chap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-chap">
+<ANCHOR id="nm-setting-ppp-get-refuse-mschap" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap">
+<ANCHOR id="nm-setting-ppp-get-refuse-mschapv2" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2">
+<ANCHOR id="nm-setting-ppp-get-nobsdcomp" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp">
+<ANCHOR id="nm-setting-ppp-get-nodeflate" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-nodeflate">
+<ANCHOR id="nm-setting-ppp-get-no-vj-comp" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp">
+<ANCHOR id="nm-setting-ppp-get-require-mppe" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-require-mppe">
+<ANCHOR id="nm-setting-ppp-get-require-mppe-128" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128">
+<ANCHOR id="nm-setting-ppp-get-mppe-stateful" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful">
+<ANCHOR id="nm-setting-ppp-get-crtscts" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-crtscts">
+<ANCHOR id="nm-setting-ppp-get-baud" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-baud">
+<ANCHOR id="nm-setting-ppp-get-mru" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-mru">
+<ANCHOR id="nm-setting-ppp-get-mtu" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-mtu">
+<ANCHOR id="nm-setting-ppp-get-lcp-echo-failure" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure">
+<ANCHOR id="nm-setting-ppp-get-lcp-echo-interval" href="libnm-util/NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval">
<ANCHOR id="NMSettingPPP.property-details" href="libnm-util/NMSettingPPP.html#NMSettingPPP.property-details">
<ANCHOR id="NMSettingPPP--baud" href="libnm-util/NMSettingPPP.html#NMSettingPPP--baud">
<ANCHOR id="NMSettingPPP--crtscts" href="libnm-util/NMSettingPPP.html#NMSettingPPP--crtscts">
@@ -1140,41 +1504,56 @@
<ANCHOR id="NMSettingPPP--require-mppe" href="libnm-util/NMSettingPPP.html#NMSettingPPP--require-mppe">
<ANCHOR id="NMSettingPPP--require-mppe-128" href="libnm-util/NMSettingPPP.html#NMSettingPPP--require-mppe-128">
<ANCHOR id="NMSettingPPPOE" href="libnm-util/NMSettingPPPOE.html">
-<ANCHOR id="NMSettingPPPOE.functions" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.functions">
-<ANCHOR id="NMSettingPPPOE.properties" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.properties">
-<ANCHOR id="NMSettingPPPOE.other" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.other">
+<ANCHOR id="NMSettingPPPOE.synopsis" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.synopsis">
+<ANCHOR id="NMSettingPPPOEError" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOEError">
<ANCHOR id="NMSettingPPPOE.object-hierarchy" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.object-hierarchy">
-<ANCHOR id="NMSettingPPPOE.includes" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.includes">
+<ANCHOR id="NMSettingPPPOE.properties" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.properties">
<ANCHOR id="NMSettingPPPOE.description" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.description">
-<ANCHOR id="NMSettingPPPOE.functions_details" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.functions_details">
-<ANCHOR id="nm-setting-pppoe-error-quark" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-error-quark">
-<ANCHOR id="nm-setting-pppoe-new" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-new">
-<ANCHOR id="nm-setting-pppoe-get-service" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-service">
-<ANCHOR id="nm-setting-pppoe-get-username" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-username">
-<ANCHOR id="nm-setting-pppoe-get-password" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-password">
-<ANCHOR id="nm-setting-pppoe-get-password-flags" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags">
-<ANCHOR id="NMSettingPPPOE.other_details" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.other_details">
+<ANCHOR id="NMSettingPPPOE.details" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.details">
<ANCHOR id="NM-SETTING-PPPOE-SETTING-NAME:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingPPPOEError" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOEError">
+<ANCHOR id="NMSettingPPPOEError-enum" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOEError-enum">
+<ANCHOR id="NM-SETTING-PPPOE-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-PPPOE-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-PPPOE-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-PPPOE-ERROR-MISSING-PPP-SETTING:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-MISSING-PPP-SETTING:CAPS">
<ANCHOR id="NM-SETTING-PPPOE-ERROR:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR:CAPS">
+<ANCHOR id="nm-setting-pppoe-error-quark" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-error-quark">
<ANCHOR id="NM-SETTING-PPPOE-SERVICE:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-SERVICE:CAPS">
<ANCHOR id="NM-SETTING-PPPOE-USERNAME:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-USERNAME:CAPS">
<ANCHOR id="NM-SETTING-PPPOE-PASSWORD:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD:CAPS">
<ANCHOR id="NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS" href="libnm-util/NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NMSettingPPPOE-struct" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE-struct">
+<ANCHOR id="NMSettingPPPOEClass" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOEClass">
+<ANCHOR id="nm-setting-pppoe-new" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-new">
+<ANCHOR id="nm-setting-pppoe-get-service" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-service">
+<ANCHOR id="nm-setting-pppoe-get-username" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-username">
+<ANCHOR id="nm-setting-pppoe-get-password" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-password">
+<ANCHOR id="nm-setting-pppoe-get-password-flags" href="libnm-util/NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags">
<ANCHOR id="NMSettingPPPOE.property-details" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE.property-details">
<ANCHOR id="NMSettingPPPOE--password" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE--password">
<ANCHOR id="NMSettingPPPOE--password-flags" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE--password-flags">
<ANCHOR id="NMSettingPPPOE--service" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE--service">
<ANCHOR id="NMSettingPPPOE--username" href="libnm-util/NMSettingPPPOE.html#NMSettingPPPOE--username">
<ANCHOR id="NMSettingVPN" href="libnm-util/NMSettingVPN.html">
-<ANCHOR id="NMSettingVPN.functions" href="libnm-util/NMSettingVPN.html#NMSettingVPN.functions">
-<ANCHOR id="NMSettingVPN.properties" href="libnm-util/NMSettingVPN.html#NMSettingVPN.properties">
-<ANCHOR id="NMSettingVPN.other" href="libnm-util/NMSettingVPN.html#NMSettingVPN.other">
+<ANCHOR id="NMSettingVPN.synopsis" href="libnm-util/NMSettingVPN.html#NMSettingVPN.synopsis">
+<ANCHOR id="NMSettingVpnError" href="libnm-util/NMSettingVPN.html#NMSettingVpnError">
<ANCHOR id="NMSettingVPN.object-hierarchy" href="libnm-util/NMSettingVPN.html#NMSettingVPN.object-hierarchy">
-<ANCHOR id="NMSettingVPN.includes" href="libnm-util/NMSettingVPN.html#NMSettingVPN.includes">
+<ANCHOR id="NMSettingVPN.properties" href="libnm-util/NMSettingVPN.html#NMSettingVPN.properties">
<ANCHOR id="NMSettingVPN.description" href="libnm-util/NMSettingVPN.html#NMSettingVPN.description">
-<ANCHOR id="NMSettingVPN.functions_details" href="libnm-util/NMSettingVPN.html#NMSettingVPN.functions_details">
+<ANCHOR id="NMSettingVPN.details" href="libnm-util/NMSettingVPN.html#NMSettingVPN.details">
+<ANCHOR id="NM-SETTING-VPN-SETTING-NAME:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingVpnError-enum" href="libnm-util/NMSettingVPN.html#NMSettingVpnError-enum">
+<ANCHOR id="NM-SETTING-VPN-ERROR-UNKNOWN:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-VPN-ERROR-INVALID-PROPERTY:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-VPN-ERROR-MISSING-PROPERTY:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-SETTING-VPN-ERROR:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-ERROR:CAPS">
<ANCHOR id="nm-setting-vpn-error-quark" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-error-quark">
+<ANCHOR id="NM-SETTING-VPN-SERVICE-TYPE:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-SERVICE-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-VPN-USER-NAME:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-USER-NAME:CAPS">
+<ANCHOR id="NM-SETTING-VPN-DATA:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-DATA:CAPS">
+<ANCHOR id="NM-SETTING-VPN-SECRETS:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-SECRETS:CAPS">
+<ANCHOR id="NMSettingVPN-struct" href="libnm-util/NMSettingVPN.html#NMSettingVPN-struct">
+<ANCHOR id="NMSettingVPNClass" href="libnm-util/NMSettingVPN.html#NMSettingVPNClass">
<ANCHOR id="NMVPNIterFunc" href="libnm-util/NMSettingVPN.html#NMVPNIterFunc">
<ANCHOR id="nm-setting-vpn-new" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-new">
<ANCHOR id="nm-setting-vpn-get-service-type" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-get-service-type">
@@ -1189,26 +1568,17 @@
<ANCHOR id="nm-setting-vpn-get-secret" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-get-secret">
<ANCHOR id="nm-setting-vpn-remove-secret" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-remove-secret">
<ANCHOR id="nm-setting-vpn-foreach-secret" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-foreach-secret">
-<ANCHOR id="NMSettingVPN.other_details" href="libnm-util/NMSettingVPN.html#NMSettingVPN.other_details">
-<ANCHOR id="NM-SETTING-VPN-SETTING-NAME:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-SETTING-NAME:CAPS">
-<ANCHOR id="NMSettingVpnError" href="libnm-util/NMSettingVPN.html#NMSettingVpnError">
-<ANCHOR id="NM-SETTING-VPN-ERROR:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-ERROR:CAPS">
-<ANCHOR id="NM-SETTING-VPN-SERVICE-TYPE:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-SERVICE-TYPE:CAPS">
-<ANCHOR id="NM-SETTING-VPN-USER-NAME:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-USER-NAME:CAPS">
-<ANCHOR id="NM-SETTING-VPN-DATA:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-DATA:CAPS">
-<ANCHOR id="NM-SETTING-VPN-SECRETS:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-SECRETS:CAPS">
<ANCHOR id="NMSettingVPN.property-details" href="libnm-util/NMSettingVPN.html#NMSettingVPN.property-details">
<ANCHOR id="NMSettingVPN--data" href="libnm-util/NMSettingVPN.html#NMSettingVPN--data">
<ANCHOR id="NMSettingVPN--secrets" href="libnm-util/NMSettingVPN.html#NMSettingVPN--secrets">
<ANCHOR id="NMSettingVPN--service-type" href="libnm-util/NMSettingVPN.html#NMSettingVPN--service-type">
<ANCHOR id="NMSettingVPN--user-name" href="libnm-util/NMSettingVPN.html#NMSettingVPN--user-name">
<ANCHOR id="libnm-util-nm-utils" href="libnm-util/libnm-util-nm-utils.html">
-<ANCHOR id="libnm-util-nm-utils.functions" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.functions">
-<ANCHOR id="libnm-util-nm-utils.other" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.other">
+<ANCHOR id="libnm-util-nm-utils.synopsis" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.synopsis">
+<ANCHOR id="NMUtilsSecurityType" href="libnm-util/libnm-util-nm-utils.html#NMUtilsSecurityType">
<ANCHOR id="libnm-util-nm-utils.object-hierarchy" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.object-hierarchy">
-<ANCHOR id="libnm-util-nm-utils.includes" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.includes">
<ANCHOR id="libnm-util-nm-utils.description" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.description">
-<ANCHOR id="libnm-util-nm-utils.functions_details" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.functions_details">
+<ANCHOR id="libnm-util-nm-utils.details" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.details">
<ANCHOR id="nm-utils-init" href="libnm-util/libnm-util-nm-utils.html#nm-utils-init">
<ANCHOR id="nm-utils-deinit" href="libnm-util/libnm-util-nm-utils.html#nm-utils-deinit">
<ANCHOR id="nm-utils-is-empty-ssid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-is-empty-ssid">
@@ -1217,6 +1587,16 @@
<ANCHOR id="nm-utils-ssid-to-utf8" href="libnm-util/libnm-util-nm-utils.html#nm-utils-ssid-to-utf8">
<ANCHOR id="nm-utils-gvalue-hash-dup" href="libnm-util/libnm-util-nm-utils.html#nm-utils-gvalue-hash-dup">
<ANCHOR id="nm-utils-slist-free" href="libnm-util/libnm-util-nm-utils.html#nm-utils-slist-free">
+<ANCHOR id="NMUtilsSecurityType-enum" href="libnm-util/libnm-util-nm-utils.html#NMUtilsSecurityType-enum">
+<ANCHOR id="NMU-SEC-INVALID:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-INVALID:CAPS">
+<ANCHOR id="NMU-SEC-NONE:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-NONE:CAPS">
+<ANCHOR id="NMU-SEC-STATIC-WEP:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS">
+<ANCHOR id="NMU-SEC-LEAP:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-LEAP:CAPS">
+<ANCHOR id="NMU-SEC-DYNAMIC-WEP:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-DYNAMIC-WEP:CAPS">
+<ANCHOR id="NMU-SEC-WPA-PSK:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-WPA-PSK:CAPS">
+<ANCHOR id="NMU-SEC-WPA-ENTERPRISE:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-WPA-ENTERPRISE:CAPS">
+<ANCHOR id="NMU-SEC-WPA2-PSK:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-WPA2-PSK:CAPS">
+<ANCHOR id="NMU-SEC-WPA2-ENTERPRISE:CAPS" href="libnm-util/libnm-util-nm-utils.html#NMU-SEC-WPA2-ENTERPRISE:CAPS">
<ANCHOR id="nm-utils-security-valid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-security-valid">
<ANCHOR id="nm-utils-ap-mode-security-valid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid">
<ANCHOR id="nm-utils-wep-key-valid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-wep-key-valid">
@@ -1237,21 +1617,30 @@
<ANCHOR id="nm-utils-uuid-generate" href="libnm-util/libnm-util-nm-utils.html#nm-utils-uuid-generate">
<ANCHOR id="nm-utils-uuid-generate-from-string" href="libnm-util/libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string">
<ANCHOR id="nm-utils-rsa-key-encrypt" href="libnm-util/libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt">
+<ANCHOR id="nm-utils-rsa-key-encrypt-aes" href="libnm-util/libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt-aes">
<ANCHOR id="nm-utils-file-is-pkcs12" href="libnm-util/libnm-util-nm-utils.html#nm-utils-file-is-pkcs12">
<ANCHOR id="nm-utils-wifi-freq-to-channel" href="libnm-util/libnm-util-nm-utils.html#nm-utils-wifi-freq-to-channel">
<ANCHOR id="nm-utils-wifi-channel-to-freq" href="libnm-util/libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq">
<ANCHOR id="nm-utils-wifi-find-next-channel" href="libnm-util/libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel">
<ANCHOR id="nm-utils-wifi-is-channel-valid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid">
+<ANCHOR id="NM-UTILS-HWADDR-LEN-MAX:CAPS" href="libnm-util/libnm-util-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS">
<ANCHOR id="nm-utils-hwaddr-len" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-len">
<ANCHOR id="nm-utils-hwaddr-type" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-type">
<ANCHOR id="nm-utils-hwaddr-ntoa" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa">
<ANCHOR id="nm-utils-hwaddr-atoba" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-atoba">
<ANCHOR id="nm-utils-hwaddr-aton" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-aton">
+<ANCHOR id="nm-utils-hwaddr-ntoa-len" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa-len">
+<ANCHOR id="nm-utils-hwaddr-aton-len" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-aton-len">
+<ANCHOR id="nm-utils-hwaddr-valid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hwaddr-valid">
+<ANCHOR id="nm-utils-bin2hexstr" href="libnm-util/libnm-util-nm-utils.html#nm-utils-bin2hexstr">
+<ANCHOR id="nm-utils-hex2byte" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hex2byte">
+<ANCHOR id="nm-utils-hexstr2bin" href="libnm-util/libnm-util-nm-utils.html#nm-utils-hexstr2bin">
<ANCHOR id="nm-utils-iface-valid-name" href="libnm-util/libnm-util-nm-utils.html#nm-utils-iface-valid-name">
<ANCHOR id="nm-utils-is-uuid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-is-uuid">
-<ANCHOR id="libnm-util-nm-utils.other_details" href="libnm-util/libnm-util-nm-utils.html#libnm-util-nm-utils.other_details">
-<ANCHOR id="NMUtilsSecurityType" href="libnm-util/libnm-util-nm-utils.html#NMUtilsSecurityType">
-<ANCHOR id="NM-UTILS-HWADDR-LEN-MAX:CAPS" href="libnm-util/libnm-util-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS">
+<ANCHOR id="NM-UTILS-INET-ADDRSTRLEN:CAPS" href="libnm-util/libnm-util-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS">
+<ANCHOR id="nm-utils-inet4-ntop" href="libnm-util/libnm-util-nm-utils.html#nm-utils-inet4-ntop">
+<ANCHOR id="nm-utils-inet6-ntop" href="libnm-util/libnm-util-nm-utils.html#nm-utils-inet6-ntop">
+<ANCHOR id="nm-utils-check-virtual-device-compatibility" href="libnm-util/libnm-util-nm-utils.html#nm-utils-check-virtual-device-compatibility">
<ANCHOR id="annotation-glossterm-allow-none" href="libnm-util/annotation-glossary.html#annotation-glossterm-allow-none">
<ANCHOR id="annotation-glossterm-array" href="libnm-util/annotation-glossary.html#annotation-glossterm-array">
<ANCHOR id="annotation-glossterm-element-type" href="libnm-util/annotation-glossary.html#annotation-glossterm-element-type">
diff --git a/docs/libnm-util/html/left-insensitive.png b/docs/libnm-util/html/left-insensitive.png
deleted file mode 100644
index 3269393a7..000000000
--- a/docs/libnm-util/html/left-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/libnm-util/html/left.png b/docs/libnm-util/html/left.png
index 2abde032b..2d05b3d5b 100644
--- a/docs/libnm-util/html/left.png
+++ b/docs/libnm-util/html/left.png
Binary files differ
diff --git a/docs/libnm-util/html/libnm-util-nm-utils.html b/docs/libnm-util/html/libnm-util-nm-utils.html
index 22e4362b5..91e5b8f96 100644
--- a/docs/libnm-util/html/libnm-util-nm-utils.html
+++ b/docs/libnm-util/html/libnm-util-nm-utils.html
@@ -2,27 +2,32 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: nm-utils</title>
+<title>nm-utils</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
<link rel="prev" href="NMSettingVPN.html" title="NMSettingVPN">
<link rel="next" href="object-tree.html" title="Object Hierarchy">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
- <a href="#libnm-util-nm-utils.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
- <a href="#libnm-util-nm-utils.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="NMSettingVPN.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="object-tree.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="NMSettingVPN.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="object-tree.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libnm-util-nm-utils.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-util-nm-utils.description" class="shortcut">Description</a>
+  | 
+ <a href="#libnm-util-nm-utils.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
<div class="refentry">
<a name="libnm-util-nm-utils"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
@@ -30,1845 +35,1845 @@
<h2><span class="refentrytitle"><a name="libnm-util-nm-utils.top_of_page"></a>nm-utils</span></h2>
<p>nm-utils — Utility functions</p>
</td>
-<td class="gallery_image" valign="top" align="right"></td>
+<td valign="top" align="right"></td>
</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-util-nm-utils.synopsis"></a><h2>Synopsis</h2>
+<a name="NMUtilsSecurityType"></a><pre class="synopsis">
+#include &lt;nm-utils.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()">nm_utils_init</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-deinit" title="nm_utils_deinit ()">nm_utils_deinit</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-is-empty-ssid" title="nm_utils_is_empty_ssid ()">nm_utils_is_empty_ssid</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid</code></em>,
+ <em class="parameter"><code><span class="type">int</span> len</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-escape-ssid" title="nm_utils_escape_ssid ()">nm_utils_escape_ssid</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-same-ssid" title="nm_utils_same_ssid ()">nm_utils_same_ssid</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid1</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid2</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> ignore_trailing_null</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-ssid-to-utf8" title="nm_utils_ssid_to_utf8 ()">nm_utils_ssid_to_utf8</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-gvalue-hash-dup" title="nm_utils_gvalue_hash_dup ()">nm_utils_gvalue_hash_dup</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-slist-free" title="nm_utils_slist_free ()">nm_utils_slist_free</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> elem_destroy_fn</code></em>);
+enum <a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType-enum" title="enum NMUtilsSecurityType">NMUtilsSecurityType</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-security-valid" title="nm_utils_security_valid ()">nm_utils_security_valid</a> (<em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><span class="type">NMDeviceWifiCapabilities</span> wifi_caps</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> have_ap</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> adhoc</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApFlags</span> ap_flags</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_wpa</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_rsn</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" title="nm_utils_ap_mode_security_valid ()">nm_utils_ap_mode_security_valid</a> (<em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><span class="type">NMDeviceWifiCapabilities</span> wifi_caps</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-wep-key-valid" title="nm_utils_wep_key_valid ()">nm_utils_wep_key_valid</a> (<em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="type">NMWepKeyType</span></a> wep_type</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-wpa-psk-valid" title="nm_utils_wpa_psk_valid ()">nm_utils_wpa_psk_valid</a> (<em class="parameter"><code>const <span class="type">char</span> *psk</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-from-gvalue" title="nm_utils_ip4_addresses_from_gvalue ()">nm_utils_ip4_addresses_from_gvalue</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-to-gvalue" title="nm_utils_ip4_addresses_to_gvalue ()">nm_utils_ip4_addresses_to_gvalue</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-from-gvalue" title="nm_utils_ip4_routes_from_gvalue ()">nm_utils_ip4_routes_from_gvalue</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-to-gvalue" title="nm_utils_ip4_routes_to_gvalue ()">nm_utils_ip4_routes_to_gvalue</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-netmask-to-prefix" title="nm_utils_ip4_netmask_to_prefix ()">nm_utils_ip4_netmask_to_prefix</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> netmask</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-prefix-to-netmask" title="nm_utils_ip4_prefix_to_netmask ()">nm_utils_ip4_prefix_to_netmask</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-get-default-prefix" title="nm_utils_ip4_get_default_prefix ()">nm_utils_ip4_get_default_prefix</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ip</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-from-gvalue" title="nm_utils_ip6_addresses_from_gvalue ()">nm_utils_ip6_addresses_from_gvalue</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-to-gvalue" title="nm_utils_ip6_addresses_to_gvalue ()">nm_utils_ip6_addresses_to_gvalue</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-from-gvalue" title="nm_utils_ip6_routes_from_gvalue ()">nm_utils_ip6_routes_from_gvalue</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-to-gvalue" title="nm_utils_ip6_routes_to_gvalue ()">nm_utils_ip6_routes_to_gvalue</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-from-gvalue" title="nm_utils_ip6_dns_from_gvalue ()">nm_utils_ip6_dns_from_gvalue</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-to-gvalue" title="nm_utils_ip6_dns_to_gvalue ()">nm_utils_ip6_dns_to_gvalue</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()">nm_utils_uuid_generate</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string" title="nm_utils_uuid_generate_from_string ()">nm_utils_uuid_generate_from_string</a> (<em class="parameter"><code>const <span class="type">char</span> *s</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt" title="nm_utils_rsa_key_encrypt ()">nm_utils_rsa_key_encrypt</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *data</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *in_password</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_password</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt-aes" title="nm_utils_rsa_key_encrypt_aes ()">nm_utils_rsa_key_encrypt_aes</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *data</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *in_password</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_password</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a> (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-freq-to-channel" title="nm_utils_wifi_freq_to_channel ()">nm_utils_wifi_freq_to_channel</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> freq</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq" title="nm_utils_wifi_channel_to_freq ()">nm_utils_wifi_channel_to_freq</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *band</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel" title="nm_utils_wifi_find_next_channel ()">nm_utils_wifi_find_next_channel</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
+ <em class="parameter"><code><span class="type">int</span> direction</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *band</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid" title="nm_utils_wifi_is_channel_valid ()">nm_utils_wifi_is_channel_valid</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *band</code></em>);
+#define <a class="link" href="libnm-util-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS" title="NM_UTILS_HWADDR_LEN_MAX">NM_UTILS_HWADDR_LEN_MAX</a>
+<span class="returnvalue">int</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()">nm_utils_hwaddr_len</a> (<em class="parameter"><code><span class="type">int</span> type</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-type" title="nm_utils_hwaddr_type ()">nm_utils_hwaddr_type</a> (<em class="parameter"><code><span class="type">int</span> len</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa" title="nm_utils_hwaddr_ntoa ()">nm_utils_hwaddr_ntoa</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> addr</code></em>,
+ <em class="parameter"><code><span class="type">int</span> type</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba" title="nm_utils_hwaddr_atoba ()">nm_utils_hwaddr_atoba</a> (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
+ <em class="parameter"><code><span class="type">int</span> type</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()">nm_utils_hwaddr_aton</a> (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
+ <em class="parameter"><code><span class="type">int</span> type</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> buffer</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa-len" title="nm_utils_hwaddr_ntoa_len ()">nm_utils_hwaddr_ntoa_len</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> addr</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> length</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton-len" title="nm_utils_hwaddr_aton_len ()">nm_utils_hwaddr_aton_len</a> (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> buffer</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> length</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-valid" title="nm_utils_hwaddr_valid ()">nm_utils_hwaddr_valid</a> (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-bin2hexstr" title="nm_utils_bin2hexstr ()">nm_utils_bin2hexstr</a> (<em class="parameter"><code>const <span class="type">char</span> *bytes</code></em>,
+ <em class="parameter"><code><span class="type">int</span> len</code></em>,
+ <em class="parameter"><code><span class="type">int</span> final_len</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libnm-util-nm-utils.html#nm-utils-hex2byte" title="nm_utils_hex2byte ()">nm_utils_hex2byte</a> (<em class="parameter"><code>const <span class="type">char</span> *hex</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-hexstr2bin" title="nm_utils_hexstr2bin ()">nm_utils_hexstr2bin</a> (<em class="parameter"><code>const <span class="type">char</span> *hex</code></em>,
+ <em class="parameter"><code><span class="type">size_t</span> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-iface-valid-name" title="nm_utils_iface_valid_name ()">nm_utils_iface_valid_name</a> (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-is-uuid" title="nm_utils_is_uuid ()">nm_utils_is_uuid</a> (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>);
+#define <a class="link" href="libnm-util-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS" title="NM_UTILS_INET_ADDRSTRLEN">NM_UTILS_INET_ADDRSTRLEN</a>
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet4-ntop" title="nm_utils_inet4_ntop ()">nm_utils_inet4_ntop</a> (<em class="parameter"><code><span class="type">in_addr_t</span> inaddr</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *dst</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()">nm_utils_inet6_ntop</a> (<em class="parameter"><code>const <span class="type">struct in6_addr</span> *in6addr</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *dst</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-util-nm-utils.html#nm-utils-check-virtual-device-compatibility" title="nm_utils_check_virtual_device_compatibility ()">nm_utils_check_virtual_device_compatibility</a>
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> virtual_type</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> other_type</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-util-nm-utils.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMUtilsSecurityType
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-util-nm-utils.description"></a><h2>Description</h2>
+<p>
+A collection of utility functions for working SSIDs, IP addresses, Wi-Fi
+access points and devices, among other things.
+</p>
+</div>
<div class="refsect1">
-<a name="libnm-util-nm-utils.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="libnm-util-nm-utils.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="nm-utils-init"></a><h3>nm_utils_init ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_init (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Initializes libnm-util; should be called when starting and program that
+uses libnm-util. Sets up an <code class="function">atexit()</code> handler to ensure de-initialization
+is performed, but calling <a class="link" href="libnm-util-nm-utils.html#nm-utils-deinit" title="nm_utils_deinit ()"><code class="function">nm_utils_deinit()</code></a> to explicitly deinitialize
+libnm-util can also be done. This function can be called more than once.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()">nm_utils_init</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-deinit" title="nm_utils_deinit ()">nm_utils_deinit</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the initialization was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure.</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-deinit"></a><h3>nm_utils_deinit ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_utils_deinit (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Frees all resources used internally by libnm-util. This function is called
+from an <code class="function">atexit()</code> handler, set up by <a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()"><code class="function">nm_utils_init()</code></a>, but is safe to be called
+more than once. Subsequent calls have no effect until <a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()"><code class="function">nm_utils_init()</code></a> is
+called again.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-is-empty-ssid"></a><h3>nm_utils_is_empty_ssid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_is_empty_ssid (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid</code></em>,
+ <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<p>
+Different manufacturers use different mechanisms for not broadcasting the
+AP's SSID. This function attempts to detect blank/empty SSIDs using a
+number of known SSID-cloaking methods.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-is-empty-ssid" title="nm_utils_is_empty_ssid ()">nm_utils_is_empty_ssid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ssid</code></em> :</span></p></td>
+<td>pointer to a buffer containing the SSID data</td>
</tr>
<tr>
-<td class="function_type">const <span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-escape-ssid" title="nm_utils_escape_ssid ()">nm_utils_escape_ssid</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>length of the SSID data in <em class="parameter"><code>ssid</code></em>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-same-ssid" title="nm_utils_same_ssid ()">nm_utils_same_ssid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the SSID is "empty", <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-escape-ssid"></a><h3>nm_utils_escape_ssid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_utils_escape_ssid (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> len</code></em>);</pre>
+<p>
+This function does a quick printable character conversion of the SSID, simply
+replacing embedded NULLs and non-printable characters with the hexadecimal
+representation of that character. Intended for debugging only, should not
+be used for display of SSIDs.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ssid-to-utf8" title="nm_utils_ssid_to_utf8 ()">nm_utils_ssid_to_utf8</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ssid</code></em> :</span></p></td>
+<td>pointer to a buffer containing the SSID data</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-gvalue-hash-dup" title="nm_utils_gvalue_hash_dup ()">nm_utils_gvalue_hash_dup</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>length of the SSID data in <em class="parameter"><code>ssid</code></em>
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-slist-free" title="nm_utils_slist_free ()">nm_utils_slist_free</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>pointer to the escaped SSID, which uses an internal static buffer
+and will be overwritten by subsequent calls to this function</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-same-ssid"></a><h3>nm_utils_same_ssid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_same_ssid (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid1</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid2</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> ignore_trailing_null</code></em>);</pre>
+<p>
+Earlier versions of the Linux kernel added a NULL byte to the end of the
+SSID to enable easy printing of the SSID on the console or in a terminal,
+but this behavior was problematic (SSIDs are simply byte arrays, not strings)
+and thus was changed. This function compensates for that behavior at the
+cost of some compatibility with odd SSIDs that may legitimately have trailing
+NULLs, even though that is functionally pointless.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-security-valid" title="nm_utils_security_valid ()">nm_utils_security_valid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ssid1</code></em> :</span></p></td>
+<td>first SSID data to compare</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" title="nm_utils_ap_mode_security_valid ()">nm_utils_ap_mode_security_valid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ssid2</code></em> :</span></p></td>
+<td>second SSID data to compare</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wep-key-valid" title="nm_utils_wep_key_valid ()">nm_utils_wep_key_valid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ignore_trailing_null</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to ignore one trailing NULL byte</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wpa-psk-valid" title="nm_utils_wpa_psk_valid ()">nm_utils_wpa_psk_valid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the SSIDs are the same, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ssid-to-utf8"></a><h3>nm_utils_ssid_to_utf8 ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_ssid_to_utf8 (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid</code></em>);</pre>
+<p>
+Wi-Fi SSIDs are byte arrays, they are _not_ strings. Thus, an SSID may
+contain embedded NULLs and other unprintable characters. Often it is
+useful to print the SSID out for debugging purposes, but that should be the
+_only_ use of this function. Do not use this function for any persistent
+storage of the SSID, since the printable SSID returned from this function
+cannot be converted back into the real SSID of the access point.
+</p>
+<p>
+This function does almost everything humanly possible to convert the input
+into a printable UTF-8 string, using roughly the following procedure:
+</p>
+<p>
+1) if the input data is already UTF-8 safe, no conversion is performed
+2) attempts to get the current system language from the LANG environment
+ variable, and depending on the language, uses a table of alternative
+ encodings to try. For example, if LANG=hu_HU, the table may first try
+ the ISO-8859-2 encoding, and if that fails, try the Windows-1250 encoding.
+ If all fallback encodings fail, replaces non-UTF-8 characters with '?'.
+3) If the system language was unable to be determined, falls back to the
+ ISO-8859-1 encoding, then to the Windows-1251 encoding.
+4) If step 3 fails, replaces non-UTF-8 characters with '?'.
+</p>
+<p>
+Again, this function should be used for debugging and display purposes
+_only_.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-from-gvalue" title="nm_utils_ip4_addresses_from_gvalue ()">nm_utils_ip4_addresses_from_gvalue</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ssid</code></em> :</span></p></td>
+<td>a byte array containing the SSID data</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-addresses-to-gvalue" title="nm_utils_ip4_addresses_to_gvalue ()">nm_utils_ip4_addresses_to_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an allocated string containing a UTF-8
+representation of the SSID, which must be freed by the caller using <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>.
+Returns <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on errors. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-gvalue-hash-dup"></a><h3>nm_utils_gvalue_hash_dup ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * nm_utils_gvalue_hash_dup (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>);</pre>
+<p>
+Utility function to duplicate a hash table of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValues</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-from-gvalue" title="nm_utils_ip4_routes_from_gvalue ()">nm_utils_ip4_routes_from_gvalue</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>hash</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping string:GValue</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-routes-to-gvalue" title="nm_utils_ip4_routes_to_gvalue ()">nm_utils_ip4_routes_to_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated duplicated <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>, caller must free the
+returned hash with <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-unref"><code class="function">g_hash_table_unref()</code></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-destroy"><code class="function">g_hash_table_destroy()</code></a>. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-slist-free"></a><h3>nm_utils_slist_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_utils_slist_free (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> elem_destroy_fn</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">nm_utils_slist_free</code> is deprecated and should not be used in newly-written code. use <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free-full"><code class="function">g_slist_free_full()</code></a>.</p>
+</div>
+<p>
+Utility function to free a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-netmask-to-prefix" title="nm_utils_ip4_netmask_to_prefix ()">nm_utils_ip4_netmask_to_prefix</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-prefix-to-netmask" title="nm_utils_ip4_prefix_to_netmask ()">nm_utils_ip4_prefix_to_netmask</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>elem_destroy_fn</code></em> :</span></p></td>
+<td>user function called for each element in <em class="parameter"><code>list</code></em>
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMUtilsSecurityType-enum"></a><h3>enum NMUtilsSecurityType</h3>
+<pre class="programlisting">typedef enum {
+ NMU_SEC_INVALID = 0,
+ NMU_SEC_NONE,
+ NMU_SEC_STATIC_WEP,
+ NMU_SEC_LEAP,
+ NMU_SEC_DYNAMIC_WEP,
+ NMU_SEC_WPA_PSK,
+ NMU_SEC_WPA_ENTERPRISE,
+ NMU_SEC_WPA2_PSK,
+ NMU_SEC_WPA2_ENTERPRISE
+} NMUtilsSecurityType;
+</pre>
+<p>
+Describes generic security mechanisms that 802.11 access points may offer.
+Used with <a class="link" href="libnm-util-nm-utils.html#nm-utils-security-valid" title="nm_utils_security_valid ()"><code class="function">nm_utils_security_valid()</code></a> for checking whether a given access
+point is compatible with a network device.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip4-get-default-prefix" title="nm_utils_ip4_get_default_prefix ()">nm_utils_ip4_get_default_prefix</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-INVALID:CAPS"></a><span class="term"><code class="literal">NMU_SEC_INVALID</code></span></p></td>
+<td>unknown or invalid security, placeholder and not used
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-from-gvalue" title="nm_utils_ip6_addresses_from_gvalue ()">nm_utils_ip6_addresses_from_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-NONE:CAPS"></a><span class="term"><code class="literal">NMU_SEC_NONE</code></span></p></td>
+<td>unencrypted and open
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-addresses-to-gvalue" title="nm_utils_ip6_addresses_to_gvalue ()">nm_utils_ip6_addresses_to_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-STATIC-WEP:CAPS"></a><span class="term"><code class="literal">NMU_SEC_STATIC_WEP</code></span></p></td>
+<td>static WEP keys are used for encryption
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-from-gvalue" title="nm_utils_ip6_routes_from_gvalue ()">nm_utils_ip6_routes_from_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-LEAP:CAPS"></a><span class="term"><code class="literal">NMU_SEC_LEAP</code></span></p></td>
+<td>Cisco LEAP is used for authentication and for generating the
+dynamic WEP keys automatically
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-routes-to-gvalue" title="nm_utils_ip6_routes_to_gvalue ()">nm_utils_ip6_routes_to_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-DYNAMIC-WEP:CAPS"></a><span class="term"><code class="literal">NMU_SEC_DYNAMIC_WEP</code></span></p></td>
+<td>standard 802.1x is used for authentication and
+generating the dynamic WEP keys automatically
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-from-gvalue" title="nm_utils_ip6_dns_from_gvalue ()">nm_utils_ip6_dns_from_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-WPA-PSK:CAPS"></a><span class="term"><code class="literal">NMU_SEC_WPA_PSK</code></span></p></td>
+<td>WPA1 is used with Pre-Shared Keys (PSK)
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-ip6-dns-to-gvalue" title="nm_utils_ip6_dns_to_gvalue ()">nm_utils_ip6_dns_to_gvalue</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-WPA-ENTERPRISE:CAPS"></a><span class="term"><code class="literal">NMU_SEC_WPA_ENTERPRISE</code></span></p></td>
+<td>WPA1 is used with 802.1x authentication
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()">nm_utils_uuid_generate</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-WPA2-PSK:CAPS"></a><span class="term"><code class="literal">NMU_SEC_WPA2_PSK</code></span></p></td>
+<td>WPA2/RSN is used with Pre-Shared Keys (PSK)
</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string" title="nm_utils_uuid_generate_from_string ()">nm_utils_uuid_generate_from_string</a> <span class="c_punctuation">()</span>
+<td><p><a name="NMU-SEC-WPA2-ENTERPRISE:CAPS"></a><span class="term"><code class="literal">NMU_SEC_WPA2_ENTERPRISE</code></span></p></td>
+<td>WPA2 is used with 802.1x authentication
</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-security-valid"></a><h3>nm_utils_security_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_security_valid (<em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><span class="type">NMDeviceWifiCapabilities</span> wifi_caps</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> have_ap</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> adhoc</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApFlags</span> ap_flags</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_wpa</code></em>,
+ <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_rsn</code></em>);</pre>
+<p>
+Given a set of device capabilities, and a desired security type to check
+against, determines whether the combination of device, desired security
+type, and AP capabilities intersect.
+</p>
+<p>
+NOTE: this function cannot handle checking security for AP/Hotspot mode;
+use <a class="link" href="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" title="nm_utils_ap_mode_security_valid ()"><code class="function">nm_utils_ap_mode_security_valid()</code></a> instead.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt" title="nm_utils_rsa_key_encrypt ()">nm_utils_rsa_key_encrypt</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the security type to check AP flags and device capabilties against,
+e.g. <a class="link" href="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><span class="type">NMU_SEC_STATIC_WEP</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>wifi_caps</code></em> :</span></p></td>
+<td>bitfield of the capabilities of the specific Wi-Fi device, e.g.
+<span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</span>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-freq-to-channel" title="nm_utils_wifi_freq_to_channel ()">nm_utils_wifi_freq_to_channel</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>have_ap</code></em> :</span></p></td>
+<td>whether the <em class="parameter"><code>ap_flags</code></em>, <em class="parameter"><code>ap_wpa</code></em>, and <em class="parameter"><code>ap_rsn</code></em> arguments are valid</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq" title="nm_utils_wifi_channel_to_freq ()">nm_utils_wifi_channel_to_freq</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>adhoc</code></em> :</span></p></td>
+<td>whether the capabilities being tested are from an Ad-Hoc AP (IBSS)</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel" title="nm_utils_wifi_find_next_channel ()">nm_utils_wifi_find_next_channel</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>ap_flags</code></em> :</span></p></td>
+<td>bitfield of AP capabilities, e.g. <span class="type">NM_802_11_AP_FLAGS_PRIVACY</span>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid" title="nm_utils_wifi_is_channel_valid ()">nm_utils_wifi_is_channel_valid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ap_wpa</code></em> :</span></p></td>
+<td>bitfield of AP capabilties derived from the AP's WPA beacon,
+e.g. (<span class="type">NM_802_11_AP_SEC_PAIR_TKIP</span> | <span class="type">NM_802_11_AP_SEC_KEY_MGMT_PSK</span>)</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()">nm_utils_hwaddr_len</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><em class="parameter"><code>ap_rsn</code></em> :</span></p></td>
+<td>bitfield of AP capabilties derived from the AP's RSN/WPA2 beacon,
+e.g. (<span class="type">NM_802_11_AP_SEC_PAIR_CCMP</span> | <span class="type">NM_802_11_AP_SEC_PAIR_TKIP</span>)</td>
</tr>
<tr>
-<td class="function_type">
-<span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-type" title="nm_utils_hwaddr_type ()">nm_utils_hwaddr_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">char</span> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa" title="nm_utils_hwaddr_ntoa ()">nm_utils_hwaddr_ntoa</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba" title="nm_utils_hwaddr_atoba ()">nm_utils_hwaddr_atoba</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device capabilities and AP capabilties intersect and are
+compatible with the desired <em class="parameter"><code>type</code></em>, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not</td>
</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ap-mode-security-valid"></a><h3>nm_utils_ap_mode_security_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_ap_mode_security_valid (<em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><span class="type">NMDeviceWifiCapabilities</span> wifi_caps</code></em>);</pre>
+<p>
+Given a set of device capabilities, and a desired security type to check
+against, determines whether the combination of device capabilities and
+desired security type are valid for AP/Hotspot connections.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()">nm_utils_hwaddr_aton</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the security type to check device capabilties against,
+e.g. <a class="link" href="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><span class="type">NMU_SEC_STATIC_WEP</span></a>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-iface-valid-name" title="nm_utils_iface_valid_name ()">nm_utils_iface_valid_name</a> <span class="c_punctuation">()</span>
+<td><p><span class="term"><em class="parameter"><code>wifi_caps</code></em> :</span></p></td>
+<td>bitfield of the capabilities of the specific Wi-Fi device, e.g.
+<span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</span>
</td>
</tr>
<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-is-uuid" title="nm_utils_is_uuid ()">nm_utils_is_uuid</a> <span class="c_punctuation">()</span>
-</td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device capabilities are compatible with the desired
+<em class="parameter"><code>type</code></em>, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not.</td>
</tr>
</tbody>
</table></div>
+<p class="since">Since 0.9.8</p>
</div>
-<div class="refsect1">
-<a name="libnm-util-nm-utils.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<hr>
+<div class="refsect2">
+<a name="nm-utils-wep-key-valid"></a><h3>nm_utils_wep_key_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_wep_key_valid (<em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="type">NMWepKeyType</span></a> wep_type</code></em>);</pre>
+<p>
+Checks if <em class="parameter"><code>key</code></em> is a valid WEP key
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="name">
-<col class="description">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType" title="enum NMUtilsSecurityType">NMUtilsSecurityType</a></td>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>a string that might be a WEP key</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wep_type</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="type">NMWepKeyType</span></a> type of the WEP key</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libnm-util-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS" title="NM_UTILS_HWADDR_LEN_MAX">NM_UTILS_HWADDR_LEN_MAX</a></td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>key</code></em> is a WEP key, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect1">
-<a name="libnm-util-nm-utils.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> GEnum
- <span class="lineart">╰──</span> NMUtilsSecurityType
-</pre>
-</div>
-<div class="refsect1">
-<a name="libnm-util-nm-utils.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;nm-utils.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="libnm-util-nm-utils.description"></a><h2>Description</h2>
-<p>A collection of utility functions for working SSIDs, IP addresses, WiFi
-access points and devices, among other things.</p>
-</div>
-<div class="refsect1">
-<a name="libnm-util-nm-utils.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="nm-utils-init"></a><h3>nm_utils_init ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_init (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Initializes libnm-util; should be called when starting and program that
-uses libnm-util. Sets up an <code class="function">atexit()</code> handler to ensure de-initialization
-is performed, but calling <a class="link" href="libnm-util-nm-utils.html#nm-utils-deinit" title="nm_utils_deinit ()"><code class="function">nm_utils_deinit()</code></a> to explicitly deinitialize
-libnm-util can also be done. This function can be called more than once.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.2.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the initialization was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-utils-deinit"></a><h3>nm_utils_deinit ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_utils_deinit (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Frees all resources used internally by libnm-util. This function is called
-from an <code class="function">atexit()</code> handler, set up by <a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()"><code class="function">nm_utils_init()</code></a>, but is safe to be called
-more than once. Subsequent calls have no effect until <a class="link" href="libnm-util-nm-utils.html#nm-utils-init" title="nm_utils_init ()"><code class="function">nm_utils_init()</code></a> is
-called again.</p>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-is-empty-ssid"></a><h3>nm_utils_is_empty_ssid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_is_empty_ssid (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid</code></em>,
- <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
-<p>Different manufacturers use different mechanisms for not broadcasting the
-AP's SSID. This function attempts to detect blank/empty SSIDs using a
-number of known SSID-cloaking methods.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-wpa-psk-valid"></a><h3>nm_utils_wpa_psk_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_wpa_psk_valid (<em class="parameter"><code>const <span class="type">char</span> *psk</code></em>);</pre>
+<p>
+Checks if <em class="parameter"><code>psk</code></em> is a valid WPA PSK
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>ssid</p></td>
-<td class="parameter_description"><p>pointer to a buffer containing the SSID data</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>psk</code></em> :</span></p></td>
+<td>a string that might be a WPA PSK</td>
</tr>
<tr>
-<td class="parameter_name"><p>len</p></td>
-<td class="parameter_description"><p>length of the SSID data in <em class="parameter"><code>ssid</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>psk</code></em> is a WPA PSK, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.4.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the SSID is "empty", <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-escape-ssid"></a><h3>nm_utils_escape_ssid ()</h3>
-<pre class="programlisting">const <span class="returnvalue">char</span> *
-nm_utils_escape_ssid (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> len</code></em>);</pre>
-<p>This function does a quick printable character conversion of the SSID, simply
-replacing embedded NULLs and non-printable characters with the hexadecimal
-representation of that character. Intended for debugging only, should not
-be used for display of SSIDs.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip4-addresses-from-gvalue"></a><h3>nm_utils_ip4_addresses_from_gvalue ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_utils_ip4_addresses_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArrays</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a> representing
+a list of NetworkManager IPv4 addresses (which is a tuple of address, gateway,
+and prefix) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects. The specific format of
+this serialization is not guaranteed to be stable and the <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> may be
+extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>ssid</p></td>
-<td class="parameter_description"><p>pointer to a buffer containing the SSID data</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArrays</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>len</p></td>
-<td class="parameter_description"><p>length of the SSID data in <em class="parameter"><code>ssid</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Address]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.5.6"></a><h4>Returns</h4>
-<p> pointer to the escaped SSID, which uses an internal static buffer
-and will be overwritten by subsequent calls to this function</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-same-ssid"></a><h3>nm_utils_same_ssid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_same_ssid (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid1</code></em>,
- <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid2</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> ignore_trailing_null</code></em>);</pre>
-<p>Earlier versions of the Linux kernel added a NULL byte to the end of the
-SSID to enable easy printing of the SSID on the console or in a terminal,
-but this behavior was problematic (SSIDs are simply byte arrays, not strings)
-and thus was changed. This function compensates for that behavior at the
-cost of some compatibility with odd SSIDs that may legitimately have trailing
-NULLs, even though that is functionally pointless.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip4-addresses-to-gvalue"></a><h3>nm_utils_ip4_addresses_to_gvalue ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_utils_ip4_addresses_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects into a
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArrays</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a> representing a list of NetworkManager IPv4
+addresses (which is a tuple of address, gateway, and prefix). The specific
+format of this serialization is not guaranteed to be stable and may be
+extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>ssid1</p></td>
-<td class="parameter_description"><p>first SSID data to compare</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>ssid2</p></td>
-<td class="parameter_description"><p>second SSID data to compare</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP4Address]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>ignore_trailing_null</p></td>
-<td class="parameter_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to ignore one trailing NULL byte</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted addresses,
+which should be unset by the caller (when no longer needed) with
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.6.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the SSIDs are the same, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ssid-to-utf8"></a><h3>nm_utils_ssid_to_utf8 ()</h3>
-<pre class="programlisting"><span class="returnvalue">char</span> *
-nm_utils_ssid_to_utf8 (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *ssid</code></em>);</pre>
-<p>WiFi SSIDs are byte arrays, they are _not_ strings. Thus, an SSID may
-contain embedded NULLs and other unprintable characters. Often it is
-useful to print the SSID out for debugging purposes, but that should be the
-_only_ use of this function. Do not use this function for any persistent
-storage of the SSID, since the printable SSID returned from this function
-cannot be converted back into the real SSID of the access point.</p>
-<p>This function does almost everything humanly possible to convert the input
-into a printable UTF-8 string, using roughly the following procedure:</p>
-<p>1) if the input data is already UTF-8 safe, no conversion is performed
-2) attempts to get the current system language from the LANG environment
- variable, and depending on the language, uses a table of alternative
- encodings to try. For example, if LANG=hu_HU, the table may first try
- the ISO-8859-2 encoding, and if that fails, try the Windows-1250 encoding.
- If all fallback encodings fail, replaces non-UTF-8 characters with '?'.
-3) If the system language was unable to be determined, falls back to the
- ISO-8859-1 encoding, then to the Windows-1251 encoding.
-4) If step 3 fails, replaces non-UTF-8 characters with '?'.</p>
-<p>Again, this function should be used for debugging and display purposes
-_only_.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.7.8"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip4-routes-from-gvalue"></a><h3>nm_utils_ip4_routes_from_gvalue ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_utils_ip4_routes_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArrays</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a> representing
+a list of NetworkManager IPv4 routes (which is a tuple of route, next hop,
+prefix, and metric) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects. The specific
+format of this serialization is not guaranteed to be stable and may be
+extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ssid</p></td>
-<td class="parameter_description"><p>a byte array containing the SSID data</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArrays</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Route]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.7.9"></a><h4>Returns</h4>
-<p> an allocated string containing a UTF-8
-representation of the SSID, which must be freed by the caller using <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>.
-Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on errors. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-gvalue-hash-dup"></a><h3>nm_utils_gvalue_hash_dup ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
-nm_utils_gvalue_hash_dup (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>);</pre>
-<p>Utility function to duplicate a hash table of GValues.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip4-routes-to-gvalue"></a><h3>nm_utils_ip4_routes_to_gvalue ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_utils_ip4_routes_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects into a
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArrays</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32s</span></a> representing a list of NetworkManager IPv4
+routes (which is a tuple of route, next hop, prefix, and metric). The
+specific format of this serialization is not guaranteed to be stable and may
+be extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>hash</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping string:GValue</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP4Route]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted routes,
+which should be unset by the caller (when no longer needed) with
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.8.6"></a><h4>Returns</h4>
-<p> a newly allocated duplicated <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>, caller must free the
-returned hash with <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-unref"><code class="function">g_hash_table_unref()</code></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-destroy"><code class="function">g_hash_table_destroy()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-slist-free"></a><h3>nm_utils_slist_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_utils_slist_free (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> elem_destroy_fn</code></em>);</pre>
-<p>Utility function to free a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip4-netmask-to-prefix"></a><h3>nm_utils_ip4_netmask_to_prefix ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_utils_ip4_netmask_to_prefix (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> netmask</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>list</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>netmask</code></em> :</span></p></td>
+<td>an IPv4 netmask in network byte order</td>
</tr>
<tr>
-<td class="parameter_name"><p>elem_destroy_fn</p></td>
-<td class="parameter_description"><p>user function called for each element in <em class="parameter"><code>list</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the CIDR prefix represented by the netmask</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-security-valid"></a><h3>nm_utils_security_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_security_valid (<em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType" title="enum NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
- <em class="parameter"><code><span class="type">NMDeviceWifiCapabilities</span> wifi_caps</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> have_ap</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> adhoc</code></em>,
- <em class="parameter"><code><span class="type">NM80211ApFlags</span> ap_flags</code></em>,
- <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_wpa</code></em>,
- <em class="parameter"><code><span class="type">NM80211ApSecurityFlags</span> ap_rsn</code></em>);</pre>
-<p>Given a set of device capabilities, and a desired security type to check
-against, determines whether the combination of device, desired security
-type, and AP capabilities intersect.</p>
-<p>NOTE: this function cannot handle checking security for AP/Hotspot mode;
-use <a class="link" href="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" title="nm_utils_ap_mode_security_valid ()"><code class="function">nm_utils_ap_mode_security_valid()</code></a> instead.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.10.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip4-prefix-to-netmask"></a><h3>nm_utils_ip4_prefix_to_netmask ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_utils_ip4_prefix_to_netmask (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>the security type to check AP flags and device capabilties against,
-e.g. <a class="link" href="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><span class="type">NMU_SEC_STATIC_WEP</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>a CIDR prefix</td>
</tr>
<tr>
-<td class="parameter_name"><p>wifi_caps</p></td>
-<td class="parameter_description"><p>bitfield of the capabilities of the specific WiFi device, e.g.
-<span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</span></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>have_ap</p></td>
-<td class="parameter_description"><p>whether the <em class="parameter"><code>ap_flags</code></em>
-, <em class="parameter"><code>ap_wpa</code></em>
-, and <em class="parameter"><code>ap_rsn</code></em>
-arguments are valid</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>adhoc</p></td>
-<td class="parameter_description"><p>whether the capabilities being tested are from an Ad-Hoc AP (IBSS)</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>ap_flags</p></td>
-<td class="parameter_description"><p>bitfield of AP capabilities, e.g. <span class="type">NM_802_11_AP_FLAGS_PRIVACY</span></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>ap_wpa</p></td>
-<td class="parameter_description"><p>bitfield of AP capabilties derived from the AP's WPA beacon,
-e.g. (<span class="type">NM_802_11_AP_SEC_PAIR_TKIP</span> | <span class="type">NM_802_11_AP_SEC_KEY_MGMT_PSK</span>)</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>ap_rsn</p></td>
-<td class="parameter_description"><p>bitfield of AP capabilties derived from the AP's RSN/WPA2 beacon,
-e.g. (<span class="type">NM_802_11_AP_SEC_PAIR_CCMP</span> | <span class="type">NM_802_11_AP_SEC_PAIR_TKIP</span>)</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the netmask represented by the prefix, in network byte order</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.10.7"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device capabilities and AP capabilties intersect and are
-compatible with the desired <em class="parameter"><code>type</code></em>
-, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ap-mode-security-valid"></a><h3>nm_utils_ap_mode_security_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_ap_mode_security_valid (<em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType" title="enum NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
- <em class="parameter"><code><span class="type">NMDeviceWifiCapabilities</span> wifi_caps</code></em>);</pre>
-<p>Given a set of device capabilities, and a desired security type to check
-against, determines whether the combination of device capabilities and
-desired security type are valid for AP/Hotspot connections.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip4-get-default-prefix"></a><h3>nm_utils_ip4_get_default_prefix ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_utils_ip4_get_default_prefix (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ip</code></em>);</pre>
+<p>
+When the Internet was originally set up, various ranges of IP addresses were
+segmented into three network classes: A, B, and C. This function will return
+a prefix that is associated with the IP address specified defining where it
+falls in the predefined classes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>the security type to check device capabilties against,
-e.g. <a class="link" href="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><span class="type">NMU_SEC_STATIC_WEP</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>ip</code></em> :</span></p></td>
+<td>an IPv4 address (in network byte order)</td>
</tr>
<tr>
-<td class="parameter_name"><p>wifi_caps</p></td>
-<td class="parameter_description"><p>bitfield of the capabilities of the specific WiFi device, e.g.
-<span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</span></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the default class prefix for the given IP</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.11.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device capabilities are compatible with the desired
-<em class="parameter"><code>type</code></em>
-, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are not.</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-wep-key-valid"></a><h3>nm_utils_wep_key_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_wep_key_valid (<em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
- <em class="parameter"><code><a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType"><span class="type">NMWepKeyType</span></a> wep_type</code></em>);</pre>
-<p>Checks if <em class="parameter"><code>key</code></em>
- is a valid WEP key</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip6-addresses-from-gvalue"></a><h3>nm_utils_ip6_addresses_from_gvalue ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_utils_ip6_addresses_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArrays</span></a> of (<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of guchars) and <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>
+representing a list of NetworkManager IPv6 addresses (which is a tuple of address,
+prefix, and gateway), into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects. The specific format of
+this serialization is not guaranteed to be stable and the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> may be
+extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>a string that might be a WEP key</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>gvalue containing a GPtrArray of GValueArrays of (GArray of guchars) and <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>wep_type</p></td>
-<td class="parameter_description"><p>the <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType"><span class="type">NMWepKeyType</span></a> type of the WEP key</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Address]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.12.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>key</code></em>
-is a WEP key, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-wpa-psk-valid"></a><h3>nm_utils_wpa_psk_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_wpa_psk_valid (<em class="parameter"><code>const <span class="type">char</span> *psk</code></em>);</pre>
-<p>Checks if <em class="parameter"><code>psk</code></em>
- is a valid WPA PSK</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip6-addresses-to-gvalue"></a><h3>nm_utils_ip6_addresses_to_gvalue ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_utils_ip6_addresses_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects into a
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArrays</span></a> representing a list of NetworkManager IPv6 addresses
+(which is a tuple of address, prefix, and gateway). The specific format of
+this serialization is not guaranteed to be stable and may be extended in the
+future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>psk</p></td>
-<td class="parameter_description"><p>a string that might be a WPA PSK</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP6Address]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted addresses,
+which should be unset by the caller (when no longer needed) with
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>psk</code></em>
-is a WPA PSK, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
-<p class="since">Since 0.9.8</p>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip4-addresses-from-gvalue"></a><h3>nm_utils_ip4_addresses_from_gvalue ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_utils_ip4_addresses_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArrays</span></a> of guint32s representing
-a list of NetworkManager IPv4 addresses (which is a tuple of address, gateway,
-and prefix) into a GSList of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects. The specific format of
-this serialization is not guaranteed to be stable and the <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> may be
-extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip6-routes-from-gvalue"></a><h3>nm_utils_ip6_routes_from_gvalue ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_utils_ip6_routes_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArrays</span></a> of (<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchars</span></a>), <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>,
+(<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchars</span></a>), and <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> representing a list of NetworkManager IPv6
+routes (which is a tuple of destination, prefix, next hop, and metric)
+into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects. The specific format of this serialization
+is not guaranteed to be stable and may be extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>gvalue containing a GPtrArray of GArrays of guint32s</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArrays</span></a> of (<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchars</span></a>), <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>,
+(<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchars</span></a>), and <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Route]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.14.6"></a><h4>Returns</h4>
-<p> a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Address]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip4-addresses-to-gvalue"></a><h3>nm_utils_ip4_addresses_to_gvalue ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_utils_ip4_addresses_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects into a
-GPtrArray of GArrays of guint32s representing a list of NetworkManager IPv4
-addresses (which is a tuple of address, gateway, and prefix). The specific
-format of this serialization is not guaranteed to be stable and may be
-extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip6-routes-to-gvalue"></a><h3>nm_utils_ip6_routes_to_gvalue ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_utils_ip6_routes_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArrays</span></a> of (<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchars</span></a>), <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>, (<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchars</span></a>), and <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>
+representing a list of NetworkManager IPv6 routes (which is a tuple of destination,
+prefix, next hop, and metric). The specific format of this serialization is not
+guaranteed to be stable and may be extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>list</p></td>
-<td class="parameter_description"><p> a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP4Address]</span></td>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP6Route]</span>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted addresses,
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted routes,
which should be unset by the caller (when no longer needed) with
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip4-routes-from-gvalue"></a><h3>nm_utils_ip4_routes_from_gvalue ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_utils_ip4_routes_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a GPtrArray of GArrays of guint32s representing
-a list of NetworkManager IPv4 routes (which is a tuple of route, next hop,
-prefix, and metric) into a GSList of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects. The specific
-format of this serialization is not guaranteed to be stable and may be
-extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip6-dns-from-gvalue"></a><h3>nm_utils_ip6_dns_from_gvalue ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * nm_utils_ip6_dns_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Converts a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of IP6 DNS, represented as
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArrays</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <code class="literal"><span class="type">struct in6_addr</span></code>s.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>gvalue containing a GPtrArray of GArrays of guint32s</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of IP6 addresses.</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.16.6"></a><h4>Returns</h4>
-<p> a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP4Route]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip4-routes-to-gvalue"></a><h3>nm_utils_ip4_routes_to_gvalue ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_utils_ip4_routes_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects into a
-GPtrArray of GArrays of guint32s representing a list of NetworkManager IPv4
-routes (which is a tuple of route, next hop, prefix, and metric). The
-specific format of this serialization is not guaranteed to be stable and may
-be extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-ip6-dns-to-gvalue"></a><h3>nm_utils_ip6_dns_to_gvalue ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_utils_ip6_dns_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <code class="literal"><span class="type">struct
+in6_addr</span></code> structs into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArrays</span></a>
+representing each server's IPv6 addresses in network byte order.
+The specific format of this serialization is not guaranteed to be
+stable and may be extended in the future.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>list</p></td>
-<td class="parameter_description"><p> a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP4Route]</span></td>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted routes,
-which should be unset by the caller (when no longer needed) with
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted DNS server
+addresses, which should be unset by the caller (when no longer needed) with
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip4-netmask-to-prefix"></a><h3>nm_utils_ip4_netmask_to_prefix ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_utils_ip4_netmask_to_prefix (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> netmask</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.26.8.18.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-uuid-generate"></a><h3>nm_utils_uuid_generate ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_uuid_generate (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody><tr>
-<td class="parameter_name"><p>netmask</p></td>
-<td class="parameter_description"><p>an IPv4 netmask in network byte order</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated UUID suitable for use as the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+object's <a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title='The "id" property'><span class="type">"id"</span></a>: property. Should be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>
+</td>
</tr></tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.18.5"></a><h4>Returns</h4>
-<p> the CIDR prefix represented by the netmask</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip4-prefix-to-netmask"></a><h3>nm_utils_ip4_prefix_to_netmask ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_utils_ip4_prefix_to_netmask (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> prefix</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.26.8.19.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-uuid-generate-from-string"></a><h3>nm_utils_uuid_generate_from_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_uuid_generate_from_string (<em class="parameter"><code>const <span class="type">char</span> *s</code></em>);</pre>
+<p>
+For a given <em class="parameter"><code>s</code></em>, this function will always return the same UUID.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>prefix</p></td>
-<td class="parameter_description"><p>a CIDR prefix</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>s</code></em> :</span></p></td>
+<td>a string to use as the seed for the UUID</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated UUID suitable for use as the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
+object's <a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title='The "id" property'><span class="type">"id"</span></a>: property</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.19.5"></a><h4>Returns</h4>
-<p> the netmask represented by the prefix, in network byte order</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip4-get-default-prefix"></a><h3>nm_utils_ip4_get_default_prefix ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_utils_ip4_get_default_prefix (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ip</code></em>);</pre>
-<p>When the Internet was originally set up, various ranges of IP addresses were
-segmented into three network classes: A, B, and C. This function will return
-a prefix that is associated with the IP address specified defining where it
-falls in the predefined classes.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-rsa-key-encrypt"></a><h3>nm_utils_rsa_key_encrypt ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_utils_rsa_key_encrypt (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *data</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *in_password</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_password</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Encrypts the given RSA private key data with the given password (or generates
+a password if no password was given) and converts the data to PEM format
+suitable for writing to a file. It uses Triple DES cipher for the encryption.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>ip</p></td>
-<td class="parameter_description"><p>an IPv4 address (in network byte order)</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>RSA private key data to be encrypted</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>in_password</code></em> :</span></p></td>
+<td>existing password to use, if any. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_password</code></em> :</span></p></td>
+<td>if <em class="parameter"><code>in_password</code></em> was <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, a random password will be generated
+and returned in this argument. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>detailed error information on return, if an error occurred</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>on success, PEM-formatted data suitable for writing to a PEM-formatted
+certificate/private key file. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.20.6"></a><h4>Returns</h4>
-<p> the default class prefix for the given IP</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip6-addresses-from-gvalue"></a><h3>nm_utils_ip6_addresses_from_gvalue ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_utils_ip6_addresses_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArrays</span></a> of (<a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of guchars) and guint32
-representing a list of NetworkManager IPv6 addresses (which is a tuple of address,
-prefix, and gateway), into a GSList of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects. The specific format of
-this serialization is not guaranteed to be stable and the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> may be
-extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-rsa-key-encrypt-aes"></a><h3>nm_utils_rsa_key_encrypt_aes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_utils_rsa_key_encrypt_aes (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *data</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *in_password</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_password</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Encrypts the given RSA private key data with the given password (or generates
+a password if no password was given) and converts the data to PEM format
+suitable for writing to a file. It uses AES cipher for the encryption.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>gvalue containing a GPtrArray of GValueArrays of (GArray of guchars) and guint32</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>RSA private key data to be encrypted</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>in_password</code></em> :</span></p></td>
+<td>existing password to use, if any. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_password</code></em> :</span></p></td>
+<td>if <em class="parameter"><code>in_password</code></em> was <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, a random password will be generated
+and returned in this argument. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>detailed error information on return, if an error occurred</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>on success, PEM-formatted data suitable for writing to a PEM-formatted
+certificate/private key file. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.21.6"></a><h4>Returns</h4>
-<p> a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Address]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip6-addresses-to-gvalue"></a><h3>nm_utils_ip6_addresses_to_gvalue ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_utils_ip6_addresses_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects into a
-GPtrArray of GValueArrays representing a list of NetworkManager IPv6 addresses
-(which is a tuple of address, prefix, and gateway). The specific format of
-this serialization is not guaranteed to be stable and may be extended in the
-future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-file-is-pkcs12"></a><h3>nm_utils_file_is_pkcs12 ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_file_is_pkcs12 (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);</pre>
+<p>
+Utility function to find out if the <em class="parameter"><code>filename</code></em> is in PKCS<span class="type">12</span> format.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>list</p></td>
-<td class="parameter_description"><p> a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP6Address]</span></td>
+<td><p><span class="term"><em class="parameter"><code>filename</code></em> :</span></p></td>
+<td>name of the file to test</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted addresses,
-which should be unset by the caller (when no longer needed) with
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is PKCS<span class="type">12</span>, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip6-routes-from-gvalue"></a><h3>nm_utils_ip6_routes_from_gvalue ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_utils_ip6_routes_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function GPtrArray of GValueArrays of (GArray or guchars), guint32,
-(GArray of guchars), and guint32 representing a list of NetworkManager IPv6
-routes (which is a tuple of destination, prefix, next hop, and metric)
-into a GSList of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects. The specific format of this serialization
-is not guaranteed to be stable and may be extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-wifi-freq-to-channel"></a><h3>nm_utils_wifi_freq_to_channel ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_utils_wifi_freq_to_channel (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> freq</code></em>);</pre>
+<p>
+Utility function to translate a Wi-Fi frequency to its corresponding channel.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>gvalue containing a GPtrArray of GValueArrays of (GArray or guchars), guint32,
-(GArray of guchars), and guint32</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freq</code></em> :</span></p></td>
+<td>frequency</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the channel represented by the frequency or 0</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.23.6"></a><h4>Returns</h4>
-<p> a newly allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.IP6Route]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip6-routes-to-gvalue"></a><h3>nm_utils_ip6_routes_to_gvalue ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_utils_ip6_routes_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects into a GPtrArray of
-GValueArrays of (GArray or guchars), guint32, (GArray of guchars), and guint32
-representing a list of NetworkManager IPv6 routes (which is a tuple of destination,
-prefix, next hop, and metric). The specific format of this serialization is not
-guaranteed to be stable and may be extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-wifi-channel-to-freq"></a><h3>nm_utils_wifi_channel_to_freq ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_utils_wifi_channel_to_freq (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *band</code></em>);</pre>
+<p>
+Utility function to translate a Wi-Fi channel to its corresponding frequency.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>list</p></td>
-<td class="parameter_description"><p> a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP6Route]</span></td>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>channel</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted routes,
-which should be unset by the caller (when no longer needed) with
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>band</code></em> :</span></p></td>
+<td>frequency band for wireless ("a" or "bg")</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the frequency represented by the channel of the band,
+or -1 when the freq is invalid, or 0 when the band
+is invalid</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip6-dns-from-gvalue"></a><h3>nm_utils_ip6_dns_from_gvalue ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-nm_utils_ip6_dns_from_gvalue (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Converts a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of IP6 DNS, represented as
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>s into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of <span class="type">in6_addr</span>s.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-wifi-find-next-channel"></a><h3>nm_utils_wifi_find_next_channel ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_utils_wifi_find_next_channel (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
+ <em class="parameter"><code><span class="type">int</span> direction</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *band</code></em>);</pre>
+<p>
+Utility function to find out next/previous Wi-Fi channel for a channel.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>current channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>direction</code></em> :</span></p></td>
+<td>whether going downward (0 or less) or upward (1 or more)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>band</code></em> :</span></p></td>
+<td>frequency band for wireless ("a" or "bg")</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the next channel in the specified direction or 0</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.25.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of IP6 addresses.</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-ip6-dns-to-gvalue"></a><h3>nm_utils_ip6_dns_to_gvalue ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-nm_utils_ip6_dns_to_gvalue (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *list</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
-<p>Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of 'struct in6_addr' structs into a
-GPtrArray of GByteArrays representing each server's IPv6 addresses in
-network byte order. The specific format of this serialization is not
-guaranteed to be stable and may be extended in the future.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-wifi-is-channel-valid"></a><h3>nm_utils_wifi_is_channel_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_wifi_is_channel_valid (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *band</code></em>);</pre>
+<p>
+Utility function to verify Wi-Fi channel validity.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>list</p></td>
-<td class="parameter_description"><p>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>channel</td>
</tr>
<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>a pointer to a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> into which to place the converted DNS server
-addresses, which should be unset by the caller (when no longer needed) with
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset"><code class="function">g_value_unset()</code></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>band</code></em> :</span></p></td>
+<td>frequency band for wireless ("a" or "bg")</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+</td>
</tr>
</tbody>
</table></div>
</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-uuid-generate"></a><h3>nm_utils_uuid_generate ()</h3>
-<pre class="programlisting"><span class="returnvalue">char</span> *
-nm_utils_uuid_generate (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.26.8.27.4"></a><h4>Returns</h4>
-<p> a newly allocated UUID suitable for use as the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
-object's <a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title="The “id†property"><span class="type">“idâ€</span></a>: property. Should be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a></p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="nm-utils-uuid-generate-from-string"></a><h3>nm_utils_uuid_generate_from_string ()</h3>
-<pre class="programlisting"><span class="returnvalue">char</span> *
-nm_utils_uuid_generate_from_string (<em class="parameter"><code>const <span class="type">char</span> *s</code></em>);</pre>
-<p>For a given <em class="parameter"><code>s</code></em>
-, this function will always return the same UUID.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.28.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>s</p></td>
-<td class="parameter_description"><p>a string to use as the seed for the UUID</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.28.6"></a><h4>Returns</h4>
-<p> a newly allocated UUID suitable for use as the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>
-object's <a class="link" href="NMSettingConnection.html#NMSettingConnection--id" title="The “id†property"><span class="type">“idâ€</span></a>: property</p>
-<p></p>
-</div>
+<a name="NM-UTILS-HWADDR-LEN-MAX:CAPS"></a><h3>NM_UTILS_HWADDR_LEN_MAX</h3>
+<pre class="programlisting">#define NM_UTILS_HWADDR_LEN_MAX 20 /* INFINIBAND_ALEN */
+</pre>
+<p>
+The maximum length of a hardware address of a type known by
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()"><code class="function">nm_utils_hwaddr_len()</code></a> or <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()"><code class="function">nm_utils_hwaddr_aton()</code></a>. This can be used
+as the size of the buffer passed to <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()"><code class="function">nm_utils_hwaddr_aton()</code></a>.
+</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-rsa-key-encrypt"></a><h3>nm_utils_rsa_key_encrypt ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_utils_rsa_key_encrypt (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a> *data</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *in_password</code></em>,
- <em class="parameter"><code><span class="type">char</span> **out_password</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-<p>Encrypts the given RSA private key data with the given password (or generates
-a password if no password was given) and converts the data to PEM format
-suitable for writing to a file.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.29.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-len"></a><h3>nm_utils_hwaddr_len ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_utils_hwaddr_len (<em class="parameter"><code><span class="type">int</span> type</code></em>);</pre>
+<p>
+Returns the length in octets of a hardware address of type <em class="parameter"><code>type</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>RSA private key data to be encrypted</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>in_password</p></td>
-<td class="parameter_description"><p> existing password to use, if any. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>out_password</p></td>
-<td class="parameter_description"><p> if <em class="parameter"><code>in_password</code></em>
-was <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, a random password will be generated
-and returned in this argument. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>error</p></td>
-<td class="parameter_description"><p>detailed error information on return, if an error occurred</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the positive length, or -1 if the type is unknown/unsupported.</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.29.6"></a><h4>Returns</h4>
-<p> on success, PEM-formatted data suitable for writing to a PEM-formatted
-certificate/private key file. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-file-is-pkcs12"></a><h3>nm_utils_file_is_pkcs12 ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_file_is_pkcs12 (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);</pre>
-<p>Utility function to find out if the <em class="parameter"><code>filename</code></em>
- is in PKCS<span class="type">12</span> format.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.30.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-type"></a><h3>nm_utils_hwaddr_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_utils_hwaddr_type (<em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">nm_utils_hwaddr_type</code> is deprecated and should not be used in newly-written code. This could not be extended to cover other types, since
+there is not a one-to-one mapping between types and lengths. This
+was mostly only used to get a type to pass to
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa" title="nm_utils_hwaddr_ntoa ()"><code class="function">nm_utils_hwaddr_ntoa()</code></a> or <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()"><code class="function">nm_utils_hwaddr_aton()</code></a> when you only had
+a length; but you can just use <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa-len" title="nm_utils_hwaddr_ntoa_len ()"><code class="function">nm_utils_hwaddr_ntoa_len()</code></a> or
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton-len" title="nm_utils_hwaddr_aton_len ()"><code class="function">nm_utils_hwaddr_aton_len()</code></a> now instead.</p>
+</div>
+<p>
+Returns the type (either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>) of
+the raw address given its length.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>filename</p></td>
-<td class="parameter_description"><p>name of the file to test</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of hardware address in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the type, either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>.
+If the length is unexpected, return -1 (unsupported type/length).</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.30.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is PKCS<span class="type">12</span>, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-wifi-freq-to-channel"></a><h3>nm_utils_wifi_freq_to_channel ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_utils_wifi_freq_to_channel (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> freq</code></em>);</pre>
-<p>Utility function to translate a WiFi frequency to its corresponding channel.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.31.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-ntoa"></a><h3>nm_utils_hwaddr_ntoa ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_hwaddr_ntoa (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> addr</code></em>,
+ <em class="parameter"><code><span class="type">int</span> type</code></em>);</pre>
+<p>
+Converts <em class="parameter"><code>addr</code></em> to textual form.
+</p>
+<p>
+See also <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa-len" title="nm_utils_hwaddr_ntoa_len ()"><code class="function">nm_utils_hwaddr_ntoa_len()</code></a>, which takes a length instead of
+a type.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>freq</p></td>
-<td class="parameter_description"><p>frequency</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>a binary hardware address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the textual form of <em class="parameter"><code>addr</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.31.6"></a><h4>Returns</h4>
-<p> the channel represented by the frequency or 0</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-wifi-channel-to-freq"></a><h3>nm_utils_wifi_channel_to_freq ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_utils_wifi_channel_to_freq (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *band</code></em>);</pre>
-<p>Utility function to translate a WiFi channel to its corresponding frequency.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.32.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-atoba"></a><h3>nm_utils_hwaddr_atoba ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * nm_utils_hwaddr_atoba (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
+ <em class="parameter"><code><span class="type">int</span> type</code></em>);</pre>
+<p>
+Parses <em class="parameter"><code>asc</code></em> and converts it to binary form in a <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>. See
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()"><code class="function">nm_utils_hwaddr_aton()</code></a> if you don't want a <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>channel</p></td>
-<td class="parameter_description"><p>channel</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>asc</code></em> :</span></p></td>
+<td>the ASCII representation of a hardware address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>
+</td>
</tr>
<tr>
-<td class="parameter_name"><p>band</p></td>
-<td class="parameter_description"><p>frequency band for wireless ("a" or "bg")</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>asc</code></em> couldn't
+be parsed. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.32.6"></a><h4>Returns</h4>
-<p> the frequency represented by the channel of the band,
-or -1 when the freq is invalid, or 0 when the band
-is invalid</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-wifi-find-next-channel"></a><h3>nm_utils_wifi_find_next_channel ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
-nm_utils_wifi_find_next_channel (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
- <em class="parameter"><code><span class="type">int</span> direction</code></em>,
- <em class="parameter"><code><span class="type">char</span> *band</code></em>);</pre>
-<p>Utility function to find out next/previous WiFi channel for a channel.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.33.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-aton"></a><h3>nm_utils_hwaddr_aton ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> * nm_utils_hwaddr_aton (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
+ <em class="parameter"><code><span class="type">int</span> type</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> buffer</code></em>);</pre>
+<p>
+Parses <em class="parameter"><code>asc</code></em> and converts it to binary form in <em class="parameter"><code>buffer</code></em>. See
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba" title="nm_utils_hwaddr_atoba ()"><code class="function">nm_utils_hwaddr_atoba()</code></a> if you'd rather have the result in a
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>.
+</p>
+<p>
+See also <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton-len" title="nm_utils_hwaddr_aton_len ()"><code class="function">nm_utils_hwaddr_aton_len()</code></a>, which takes an output length
+instead of a type.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>channel</p></td>
-<td class="parameter_description"><p>current channel</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>asc</code></em> :</span></p></td>
+<td>the ASCII representation of a hardware address</td>
</tr>
<tr>
-<td class="parameter_name"><p>direction</p></td>
-<td class="parameter_description"><p>whether going downward (0 or less) or upward (1 or more)</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>buffer to store the result into</td>
</tr>
<tr>
-<td class="parameter_name"><p>band</p></td>
-<td class="parameter_description"><p>frequency band for wireless ("a" or "bg")</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<em class="parameter"><code>buffer</code></em>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>asc</code></em> couldn't be parsed</td>
</tr>
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.33.6"></a><h4>Returns</h4>
-<p> the next channel in the specified direction or 0</p>
-<p></p>
-</div>
-</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-wifi-is-channel-valid"></a><h3>nm_utils_wifi_is_channel_valid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_wifi_is_channel_valid (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> channel</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *band</code></em>);</pre>
-<p>Utility function to verify WiFi channel validity.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.34.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-ntoa-len"></a><h3>nm_utils_hwaddr_ntoa_len ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_hwaddr_ntoa_len (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> addr</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> length</code></em>);</pre>
+<p>
+Converts <em class="parameter"><code>addr</code></em> to textual form.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>channel</p></td>
-<td class="parameter_description"><p>channel</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>a binary hardware address</td>
</tr>
<tr>
-<td class="parameter_name"><p>band</p></td>
-<td class="parameter_description"><p>frequency band for wireless ("a" or "bg")</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>the length of <em class="parameter"><code>addr</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the textual form of <em class="parameter"><code>addr</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.34.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-hwaddr-len"></a><h3>nm_utils_hwaddr_len ()</h3>
-<pre class="programlisting"><span class="returnvalue">int</span>
-nm_utils_hwaddr_len (<em class="parameter"><code><span class="type">int</span> type</code></em>);</pre>
-<p>Returns the length in octets of a hardware address of type <em class="parameter"><code>type</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.35.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-aton-len"></a><h3>nm_utils_hwaddr_aton_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> * nm_utils_hwaddr_aton_len (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> buffer</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> length</code></em>);</pre>
+<p>
+Parses <em class="parameter"><code>asc</code></em> and converts it to binary form in <em class="parameter"><code>buffer</code></em>.
+Bytes in <em class="parameter"><code>asc</code></em> can be sepatared by colons (:), or hyphens (-), but not mixed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>asc</code></em> :</span></p></td>
+<td>the ASCII representation of a hardware address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>buffer to store the result into</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>the expected length in bytes of the result and
+the size of the buffer in bytes.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<em class="parameter"><code>buffer</code></em>, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>asc</code></em> couldn't be parsed
+or would be shorter or longer than <em class="parameter"><code>length</code></em>.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.35.6"></a><h4>Returns</h4>
-<p> the length</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-hwaddr-type"></a><h3>nm_utils_hwaddr_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">int</span>
-nm_utils_hwaddr_type (<em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
-<p>Returns the type (either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>) of the raw
-address given its length.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.36.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hwaddr-valid"></a><h3>nm_utils_hwaddr_valid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_hwaddr_valid (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>);</pre>
+<p>
+Parses <em class="parameter"><code>asc</code></em> to see if it is a valid hardware address of some type.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>len</p></td>
-<td class="parameter_description"><p>the length of hardware address in bytes</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>asc</code></em> :</span></p></td>
+<td>the ASCII representation of a hardware address</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>asc</code></em> appears to be a valid hardware address
+of some type, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.36.6"></a><h4>Returns</h4>
-<p> the type, either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>, or -1 if
-the address length was not recognized</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-hwaddr-ntoa"></a><h3>nm_utils_hwaddr_ntoa ()</h3>
-<pre class="programlisting"><span class="returnvalue">char</span> *
-nm_utils_hwaddr_ntoa (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> addr</code></em>,
- <em class="parameter"><code><span class="type">int</span> type</code></em>);</pre>
-<p>Converts <em class="parameter"><code>addr</code></em>
- to textual form.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.37.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-bin2hexstr"></a><h3>nm_utils_bin2hexstr ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_bin2hexstr (<em class="parameter"><code>const <span class="type">char</span> *bytes</code></em>,
+ <em class="parameter"><code><span class="type">int</span> len</code></em>,
+ <em class="parameter"><code><span class="type">int</span> final_len</code></em>);</pre>
+<p>
+Converts a byte-array <em class="parameter"><code>bytes</code></em> into a hexadecimal string.
+If <em class="parameter"><code>final_len</code></em> is greater than -1, the returned string is terminated at
+that index (returned_string[final_len] == '\0'),
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>addr</p></td>
-<td class="parameter_description"><p>a binary hardware address</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>bytes</code></em> :</span></p></td>
+<td>an array of bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of the <em class="parameter"><code>bytes</code></em> array</td>
</tr>
<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>final_len</code></em> :</span></p></td>
+<td>an index where to cut off the returned string, or -1</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the textual form of <em class="parameter"><code>bytes</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.37.6"></a><h4>Returns</h4>
-<p> the textual form of <em class="parameter"><code>addr</code></em>
-. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-hwaddr-atoba"></a><h3>nm_utils_hwaddr_atoba ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> *
-nm_utils_hwaddr_atoba (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
- <em class="parameter"><code><span class="type">int</span> type</code></em>);</pre>
-<p>Parses <em class="parameter"><code>asc</code></em>
- and converts it to binary form in a <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>. See
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()"><code class="function">nm_utils_hwaddr_aton()</code></a> if you don't want a <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.38.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hex2byte"></a><h3>nm_utils_hex2byte ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_utils_hex2byte (<em class="parameter"><code>const <span class="type">char</span> *hex</code></em>);</pre>
+<p>
+Converts a hex string (2 characters) into its byte representation.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>asc</p></td>
-<td class="parameter_description"><p>the ASCII representation of a hardware address</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>hex</code></em> :</span></p></td>
+<td>a string representing a hex byte</td>
</tr>
<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a byte, or -1 if <em class="parameter"><code>hex</code></em> doesn't represent a hex byte</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.38.6"></a><h4>Returns</h4>
-<p> a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>asc</code></em>
-couldn't
-be parsed. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-hwaddr-aton"></a><h3>nm_utils_hwaddr_aton ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *
-nm_utils_hwaddr_aton (<em class="parameter"><code>const <span class="type">char</span> *asc</code></em>,
- <em class="parameter"><code><span class="type">int</span> type</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> buffer</code></em>);</pre>
-<p>Parses <em class="parameter"><code>asc</code></em>
- and converts it to binary form in <em class="parameter"><code>buffer</code></em>
-. See
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba" title="nm_utils_hwaddr_atoba ()"><code class="function">nm_utils_hwaddr_atoba()</code></a> if you'd rather have the result in a
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.39.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-hexstr2bin"></a><h3>nm_utils_hexstr2bin ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_hexstr2bin (<em class="parameter"><code>const <span class="type">char</span> *hex</code></em>,
+ <em class="parameter"><code><span class="type">size_t</span> len</code></em>);</pre>
+<p>
+Converts a hexadecimal string <em class="parameter"><code>hex</code></em> into a byte-array. The returned array
+length is <em class="parameter"><code>len</code></em>/2.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>asc</p></td>
-<td class="parameter_description"><p>the ASCII representation of a hardware address</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>hex</code></em> :</span></p></td>
+<td>an hex string</td>
</tr>
<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>the type of address; either <code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code></p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of the <em class="parameter"><code>hex</code></em> string (it has to be even)</td>
</tr>
<tr>
-<td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>buffer to store the result into</p></td>
-<td class="parameter_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a array of bytes, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
</tr>
</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.39.6"></a><h4>Returns</h4>
-<p> <em class="parameter"><code>buffer</code></em>
-, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>asc</code></em>
-couldn't be parsed</p>
-<p></p>
-</div>
+<p class="since">Since 0.9.10</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-iface-valid-name"></a><h3>nm_utils_iface_valid_name ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_iface_valid_name (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
-<p>This function is a 1:1 copy of the kernel's interface validation
-function in net/core/dev.c.</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.40.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-iface-valid-name"></a><h3>nm_utils_iface_valid_name ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_iface_valid_name (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+This function is a 1:1 copy of the kernel's interface validation
+function in net/core/dev.c.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>Name of interface</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>Name of interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if interface name is valid, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned.</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.40.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if interface name is valid, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned.</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
<hr>
<div class="refsect2">
-<a name="nm-utils-is-uuid"></a><h3>nm_utils_is_uuid ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-nm_utils_is_uuid (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre>
-<p>Checks if <em class="parameter"><code>str</code></em>
- is a UUID</p>
-<div class="refsect3">
-<a name="id-1.2.26.8.41.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-is-uuid"></a><h3>nm_utils_is_uuid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_is_uuid (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre>
+<p>
+Checks if <em class="parameter"><code>str</code></em> is a UUID
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>str</p></td>
-<td class="parameter_description"><p>a string that might be a UUID</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>a string that might be a UUID</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>str</code></em> is a UUID, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
+</tr>
+</tbody>
</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.26.8.41.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>str</code></em>
-is a UUID, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
-</div>
<p class="since">Since 0.9.8</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="NM-UTILS-INET-ADDRSTRLEN:CAPS"></a><h3>NM_UTILS_INET_ADDRSTRLEN</h3>
+<pre class="programlisting">#define NM_UTILS_INET_ADDRSTRLEN INET6_ADDRSTRLEN
+</pre>
+<p>
+Defines the minimal length for a char buffer that is suitable as <em class="parameter"><code>dst</code></em> argument
+for both <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet4-ntop" title="nm_utils_inet4_ntop ()"><code class="function">nm_utils_inet4_ntop()</code></a> and <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()"><code class="function">nm_utils_inet6_ntop()</code></a>.
+</p>
</div>
-<div class="refsect1">
-<a name="libnm-util-nm-utils.other_details"></a><h2>Types and Values</h2>
+<hr>
<div class="refsect2">
-<a name="NMUtilsSecurityType"></a><h3>enum NMUtilsSecurityType</h3>
-<p>Describes generic security mechanisms that 802.11 access points may offer.
-Used with <a class="link" href="libnm-util-nm-utils.html#nm-utils-security-valid" title="nm_utils_security_valid ()"><code class="function">nm_utils_security_valid()</code></a> for checking whether a given access
-point is compatible with a network device.</p>
-<div class="refsect3">
-<a name="id-1.2.26.9.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="nm-utils-inet4-ntop"></a><h3>nm_utils_inet4_ntop ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_utils_inet4_ntop (<em class="parameter"><code><span class="type">in_addr_t</span> inaddr</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *dst</code></em>);</pre>
+<p>
+Wrapper for inet_ntop.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col align="left" valign="top">
+<col>
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-INVALID:CAPS"></a>NMU_SEC_INVALID</p></td>
-<td class="enum_member_description">
-<p>unknown or invalid security, placeholder and not used</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>inaddr</code></em> :</span></p></td>
+<td>the address that should be converted to string.</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-NONE:CAPS"></a>NMU_SEC_NONE</p></td>
-<td class="enum_member_description">
-<p>unencrypted and open</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>dst</code></em> :</span></p></td>
+<td>the destination buffer, it must contain at least <code class="literal">INET_ADDRSTRLEN</code>
+or <a class="link" href="libnm-util-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS" title="NM_UTILS_INET_ADDRSTRLEN"><code class="literal">NM_UTILS_INET_ADDRSTRLEN</code></a> characters. If set to <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, it will return
+a pointer to an internal, static buffer (shared with <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()"><code class="function">nm_utils_inet6_ntop()</code></a>).
+Beware, that the internal buffer will be overwritten with ever new call
+of <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet4-ntop" title="nm_utils_inet4_ntop ()"><code class="function">nm_utils_inet4_ntop()</code></a> or <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()"><code class="function">nm_utils_inet6_ntop()</code></a> that does not provied it's
+own <em class="parameter"><code>dst</code></em> buffer. Also, using the internal buffer is not thread safe. When
+in doubt, pass your own <em class="parameter"><code>dst</code></em> buffer to avoid these issues.</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-STATIC-WEP:CAPS"></a>NMU_SEC_STATIC_WEP</p></td>
-<td class="enum_member_description">
-<p>static WEP keys are used for encryption</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the input buffer <em class="parameter"><code>dst</code></em>, or a pointer to an
+internal, static buffer. This function cannot fail.</td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-inet6-ntop"></a><h3>nm_utils_inet6_ntop ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_utils_inet6_ntop (<em class="parameter"><code>const <span class="type">struct in6_addr</span> *in6addr</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *dst</code></em>);</pre>
+<p>
+Wrapper for inet_ntop.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-LEAP:CAPS"></a>NMU_SEC_LEAP</p></td>
-<td class="enum_member_description">
-<p>Cisco LEAP is used for authentication and for generating the
-dynamic WEP keys automatically</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>in6addr</code></em> :</span></p></td>
+<td>the address that should be converted to string.</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-DYNAMIC-WEP:CAPS"></a>NMU_SEC_DYNAMIC_WEP</p></td>
-<td class="enum_member_description">
-<p>standard 802.1x is used for authentication and
-generating the dynamic WEP keys automatically</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>dst</code></em> :</span></p></td>
+<td>the destination buffer, it must contain at least <code class="literal">INET6_ADDRSTRLEN</code>
+or <a class="link" href="libnm-util-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS" title="NM_UTILS_INET_ADDRSTRLEN"><code class="literal">NM_UTILS_INET_ADDRSTRLEN</code></a> characters. If set to <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, it will return
+a pointer to an internal, static buffer (shared with <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet4-ntop" title="nm_utils_inet4_ntop ()"><code class="function">nm_utils_inet4_ntop()</code></a>).
+Beware, that the internal buffer will be overwritten with ever new call
+of <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet4-ntop" title="nm_utils_inet4_ntop ()"><code class="function">nm_utils_inet4_ntop()</code></a> or <a class="link" href="libnm-util-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()"><code class="function">nm_utils_inet6_ntop()</code></a> that does not provied it's
+own <em class="parameter"><code>dst</code></em> buffer. Also, using the internal buffer is not thread safe. When
+in doubt, pass your own <em class="parameter"><code>dst</code></em> buffer to avoid these issues.</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-WPA-PSK:CAPS"></a>NMU_SEC_WPA_PSK</p></td>
-<td class="enum_member_description">
-<p>WPA1 is used with Pre-Shared Keys (PSK)</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the input buffer <em class="parameter"><code>dst</code></em>, or a pointer to an
+internal, static buffer. <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> is not allowed as <em class="parameter"><code>in6addr</code></em>,
+otherwise, this function cannot fail.</td>
</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-check-virtual-device-compatibility"></a><h3>nm_utils_check_virtual_device_compatibility ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_utils_check_virtual_device_compatibility
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> virtual_type</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> other_type</code></em>);</pre>
+<p>
+Determines if a connection of type <em class="parameter"><code>virtual_type</code></em> can (in the
+general case) work with connections of type <em class="parameter"><code>other_type</code></em>.
+</p>
+<p>
+If <em class="parameter"><code>virtual_type</code></em> is <code class="literal">NM_TYPE_SETTING_VLAN</code>, then this checks if
+<em class="parameter"><code>other_type</code></em> is a valid type for the parent of a VLAN.
+</p>
+<p>
+If <em class="parameter"><code>virtual_type</code></em> is a "master" type (eg, <code class="literal">NM_TYPE_SETTING_BRIDGE</code>),
+then this checks if <em class="parameter"><code>other_type</code></em> is a valid type for a slave of that
+master.
+</p>
+<p>
+Note that even if this returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> it is not guaranteed that
+<span class="emphasis"><em>every</em></span> connection of type <em class="parameter"><code>other_type</code></em> is
+compatible with <em class="parameter"><code>virtual_type</code></em>; it may depend on the exact
+configuration of the two connections, or on the capabilities of an
+underlying device driver.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-WPA-ENTERPRISE:CAPS"></a>NMU_SEC_WPA_ENTERPRISE</p></td>
-<td class="enum_member_description">
-<p>WPA1 is used with 802.1x authentication</p>
-</td>
-<td class="enum_member_annotations"> </td>
+<td><p><span class="term"><em class="parameter"><code>virtual_type</code></em> :</span></p></td>
+<td>a virtual connection type</td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-WPA2-PSK:CAPS"></a>NMU_SEC_WPA2_PSK</p></td>
-<td class="enum_member_description">
-<p>WPA2/RSN is used with Pre-Shared Keys (PSK)</p>
+<td><p><span class="term"><em class="parameter"><code>other_type</code></em> :</span></p></td>
+<td>a connection type to test against <em class="parameter"><code>virtual_type</code></em>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="NMU-SEC-WPA2-ENTERPRISE:CAPS"></a>NMU_SEC_WPA2_ENTERPRISE</p></td>
-<td class="enum_member_description">
-<p>WPA2 is used with 802.1x authentication</p>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
</td>
-<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="NM-UTILS-HWADDR-LEN-MAX:CAPS"></a><h3>NM_UTILS_HWADDR_LEN_MAX</h3>
-<pre class="programlisting">#define NM_UTILS_HWADDR_LEN_MAX 20 /* INFINIBAND_ALEN */
-</pre>
-<p>The maximum length of a hardware address of a type known by
-<a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()"><code class="function">nm_utils_hwaddr_len()</code></a> or <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()"><code class="function">nm_utils_hwaddr_aton()</code></a>. This can be used
-as the size of the buffer passed to <a class="link" href="libnm-util-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()"><code class="function">nm_utils_hwaddr_aton()</code></a>.</p>
+<p class="since">Since 0.9.10</p>
</div>
</div>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/libnm-util.devhelp2 b/docs/libnm-util/html/libnm-util.devhelp2
index a5489de5e..571aa04f6 100644
--- a/docs/libnm-util/html/libnm-util.devhelp2
+++ b/docs/libnm-util/html/libnm-util.devhelp2
@@ -17,10 +17,14 @@
<sub name="NMSettingBond" link="NMSettingBond.html"/>
<sub name="NMSettingBridge" link="NMSettingBridge.html"/>
<sub name="NMSettingBridgePort" link="NMSettingBridgePort.html"/>
+ <sub name="NMSettingTeam" link="NMSettingTeam.html"/>
+ <sub name="NMSettingTeamPort" link="NMSettingTeamPort.html"/>
+ <sub name="NMSettingGeneric" link="NMSettingGeneric.html"/>
<sub name="NMSettingInfiniband" link="NMSettingInfiniband.html"/>
<sub name="NMSettingVlan" link="NMSettingVlan.html"/>
<sub name="NMSettingOlpcMesh" link="NMSettingOlpcMesh.html"/>
<sub name="NMSettingAdsl" link="NMSettingAdsl.html"/>
+ <sub name="NMSettingDcb" link="NMSettingDcb.html"/>
<sub name="NMSetting8021x" link="NMSetting8021x.html"/>
<sub name="NMSettingIP4Config" link="NMSettingIP4Config.html"/>
<sub name="NMSettingIP6Config" link="NMSettingIP6Config.html"/>
@@ -34,121 +38,115 @@
<sub name="Annotation Glossary" link="annotation-glossary.html"/>
</chapters>
<functions>
- <keyword type="function" name="nm_connection_error_quark ()" link="NMConnection.html#nm-connection-error-quark"/>
- <keyword type="function" name="nm_connection_new ()" link="NMConnection.html#nm-connection-new"/>
- <keyword type="function" name="nm_connection_new_from_hash ()" link="NMConnection.html#nm-connection-new-from-hash"/>
- <keyword type="function" name="nm_connection_duplicate ()" link="NMConnection.html#nm-connection-duplicate"/>
- <keyword type="function" name="nm_connection_create_setting ()" link="NMConnection.html#nm-connection-create-setting"/>
- <keyword type="function" name="nm_connection_add_setting ()" link="NMConnection.html#nm-connection-add-setting"/>
- <keyword type="function" name="nm_connection_remove_setting ()" link="NMConnection.html#nm-connection-remove-setting"/>
- <keyword type="function" name="nm_connection_get_setting ()" link="NMConnection.html#nm-connection-get-setting"/>
- <keyword type="function" name="nm_connection_get_setting_by_name ()" link="NMConnection.html#nm-connection-get-setting-by-name"/>
- <keyword type="function" name="nm_connection_replace_settings ()" link="NMConnection.html#nm-connection-replace-settings"/>
- <keyword type="function" name="nm_connection_compare ()" link="NMConnection.html#nm-connection-compare"/>
- <keyword type="function" name="nm_connection_diff ()" link="NMConnection.html#nm-connection-diff"/>
- <keyword type="function" name="nm_connection_verify ()" link="NMConnection.html#nm-connection-verify"/>
- <keyword type="function" name="nm_connection_need_secrets ()" link="NMConnection.html#nm-connection-need-secrets"/>
- <keyword type="function" name="nm_connection_clear_secrets ()" link="NMConnection.html#nm-connection-clear-secrets"/>
- <keyword type="function" name="nm_connection_clear_secrets_with_flags ()" link="NMConnection.html#nm-connection-clear-secrets-with-flags"/>
- <keyword type="function" name="nm_connection_update_secrets ()" link="NMConnection.html#nm-connection-update-secrets"/>
- <keyword type="function" name="nm_connection_set_path ()" link="NMConnection.html#nm-connection-set-path"/>
- <keyword type="function" name="nm_connection_get_path ()" link="NMConnection.html#nm-connection-get-path"/>
- <keyword type="function" name="nm_connection_get_virtual_iface_name ()" link="NMConnection.html#nm-connection-get-virtual-iface-name"/>
- <keyword type="function" name="nm_connection_is_type ()" link="NMConnection.html#nm-connection-is-type"/>
- <keyword type="function" name="nm_connection_for_each_setting_value ()" link="NMConnection.html#nm-connection-for-each-setting-value"/>
- <keyword type="function" name="nm_connection_to_hash ()" link="NMConnection.html#nm-connection-to-hash"/>
- <keyword type="function" name="nm_connection_dump ()" link="NMConnection.html#nm-connection-dump"/>
- <keyword type="function" name="nm_connection_lookup_setting_type ()" link="NMConnection.html#nm-connection-lookup-setting-type"/>
- <keyword type="function" name="nm_connection_lookup_setting_type_by_quark ()" link="NMConnection.html#nm-connection-lookup-setting-type-by-quark"/>
- <keyword type="function" name="nm_connection_get_uuid ()" link="NMConnection.html#nm-connection-get-uuid"/>
- <keyword type="function" name="nm_connection_get_id ()" link="NMConnection.html#nm-connection-get-id"/>
- <keyword type="function" name="nm_connection_get_setting_802_1x ()" link="NMConnection.html#nm-connection-get-setting-802-1x"/>
- <keyword type="function" name="nm_connection_get_setting_bluetooth ()" link="NMConnection.html#nm-connection-get-setting-bluetooth"/>
- <keyword type="function" name="nm_connection_get_setting_bond ()" link="NMConnection.html#nm-connection-get-setting-bond"/>
- <keyword type="function" name="nm_connection_get_setting_bridge ()" link="NMConnection.html#nm-connection-get-setting-bridge"/>
- <keyword type="function" name="nm_connection_get_setting_bridge_port ()" link="NMConnection.html#nm-connection-get-setting-bridge-port"/>
- <keyword type="function" name="nm_connection_get_setting_cdma ()" link="NMConnection.html#nm-connection-get-setting-cdma"/>
- <keyword type="function" name="nm_connection_get_setting_connection ()" link="NMConnection.html#nm-connection-get-setting-connection"/>
- <keyword type="function" name="nm_connection_get_setting_gsm ()" link="NMConnection.html#nm-connection-get-setting-gsm"/>
- <keyword type="function" name="nm_connection_get_setting_infiniband ()" link="NMConnection.html#nm-connection-get-setting-infiniband"/>
- <keyword type="function" name="nm_connection_get_setting_ip4_config ()" link="NMConnection.html#nm-connection-get-setting-ip4-config"/>
- <keyword type="function" name="nm_connection_get_setting_ip6_config ()" link="NMConnection.html#nm-connection-get-setting-ip6-config"/>
- <keyword type="function" name="nm_connection_get_setting_olpc_mesh ()" link="NMConnection.html#nm-connection-get-setting-olpc-mesh"/>
- <keyword type="function" name="nm_connection_get_setting_ppp ()" link="NMConnection.html#nm-connection-get-setting-ppp"/>
- <keyword type="function" name="nm_connection_get_setting_pppoe ()" link="NMConnection.html#nm-connection-get-setting-pppoe"/>
- <keyword type="function" name="nm_connection_get_setting_serial ()" link="NMConnection.html#nm-connection-get-setting-serial"/>
- <keyword type="function" name="nm_connection_get_setting_vpn ()" link="NMConnection.html#nm-connection-get-setting-vpn"/>
- <keyword type="function" name="nm_connection_get_setting_wimax ()" link="NMConnection.html#nm-connection-get-setting-wimax"/>
- <keyword type="function" name="nm_connection_get_setting_adsl ()" link="NMConnection.html#nm-connection-get-setting-adsl"/>
- <keyword type="function" name="nm_connection_get_setting_wired ()" link="NMConnection.html#nm-connection-get-setting-wired"/>
- <keyword type="function" name="nm_connection_get_setting_wireless ()" link="NMConnection.html#nm-connection-get-setting-wireless"/>
- <keyword type="function" name="nm_connection_get_setting_wireless_security ()" link="NMConnection.html#nm-connection-get-setting-wireless-security"/>
- <keyword type="function" name="nm_connection_get_setting_vlan ()" link="NMConnection.html#nm-connection-get-setting-vlan"/>
- <keyword type="enum" name="enum NMConnectionError" link="NMConnection.html#NMConnectionError"/>
- <keyword type="macro" name="NM_CONNECTION_ERROR" link="NMConnection.html#NM-CONNECTION-ERROR:CAPS"/>
+ <keyword type="macro" name="NM_CONNECTION_SECRETS_UPDATED" link="NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS"/>
+ <keyword type="macro" name="NM_CONNECTION_SECRETS_CLEARED" link="NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS"/>
+ <keyword type="macro" name="NM_CONNECTION_CHANGED" link="NMConnection.html#NM-CONNECTION-CHANGED:CAPS"/>
<keyword type="macro" name="NM_CONNECTION_PATH" link="NMConnection.html#NM-CONNECTION-PATH:CAPS"/>
+ <keyword type="enum" name="enum NMConnectionError" link="NMConnection.html#NMConnectionError-enum"/>
+ <keyword type="macro" name="NM_CONNECTION_ERROR" link="NMConnection.html#NM-CONNECTION-ERROR:CAPS"/>
+ <keyword type="function" name="nm_connection_error_quark ()" link="NMConnection.html#nm-connection-error-quark"/>
<keyword type="struct" name="NMConnection" link="NMConnection.html#NMConnection-struct"/>
- <keyword type="property" name="The “path†property" link="NMConnection.html#NMConnection--path"/>
- <keyword type="signal" name="The “secrets-cleared†signal" link="NMConnection.html#NMConnection-secrets-cleared"/>
- <keyword type="signal" name="The “secrets-updated†signal" link="NMConnection.html#NMConnection-secrets-updated"/>
- <keyword type="function" name="nm_setting_error_quark ()" link="NMSetting.html#nm-setting-error-quark"/>
+ <keyword type="struct" name="NMConnectionClass" link="NMConnection.html#NMConnectionClass"/>
+ <keyword type="function" name="nm_connection_new ()" link="NMConnection.html#nm-connection-new"/>
+ <keyword type="function" name="nm_connection_new_from_hash ()" link="NMConnection.html#nm-connection-new-from-hash"/>
+ <keyword type="function" name="nm_connection_duplicate ()" link="NMConnection.html#nm-connection-duplicate"/>
+ <keyword type="function" name="nm_connection_create_setting ()" link="NMConnection.html#nm-connection-create-setting"/>
+ <keyword type="function" name="nm_connection_add_setting ()" link="NMConnection.html#nm-connection-add-setting"/>
+ <keyword type="function" name="nm_connection_remove_setting ()" link="NMConnection.html#nm-connection-remove-setting"/>
+ <keyword type="function" name="nm_connection_get_setting ()" link="NMConnection.html#nm-connection-get-setting"/>
+ <keyword type="function" name="nm_connection_get_setting_by_name ()" link="NMConnection.html#nm-connection-get-setting-by-name"/>
+ <keyword type="function" name="nm_connection_replace_settings ()" link="NMConnection.html#nm-connection-replace-settings"/>
+ <keyword type="function" name="nm_connection_replace_settings_from_connection ()" link="NMConnection.html#nm-connection-replace-settings-from-connection" since="0.9.10"/>
+ <keyword type="function" name="nm_connection_compare ()" link="NMConnection.html#nm-connection-compare"/>
+ <keyword type="function" name="nm_connection_diff ()" link="NMConnection.html#nm-connection-diff"/>
+ <keyword type="function" name="nm_connection_verify ()" link="NMConnection.html#nm-connection-verify"/>
+ <keyword type="function" name="nm_connection_need_secrets ()" link="NMConnection.html#nm-connection-need-secrets"/>
+ <keyword type="function" name="nm_connection_clear_secrets ()" link="NMConnection.html#nm-connection-clear-secrets"/>
+ <keyword type="function" name="nm_connection_clear_secrets_with_flags ()" link="NMConnection.html#nm-connection-clear-secrets-with-flags"/>
+ <keyword type="function" name="nm_connection_update_secrets ()" link="NMConnection.html#nm-connection-update-secrets"/>
+ <keyword type="function" name="nm_connection_set_path ()" link="NMConnection.html#nm-connection-set-path"/>
+ <keyword type="function" name="nm_connection_get_path ()" link="NMConnection.html#nm-connection-get-path"/>
+ <keyword type="function" name="nm_connection_get_virtual_iface_name ()" link="NMConnection.html#nm-connection-get-virtual-iface-name"/>
+ <keyword type="function" name="nm_connection_is_type ()" link="NMConnection.html#nm-connection-is-type"/>
+ <keyword type="function" name="nm_connection_for_each_setting_value ()" link="NMConnection.html#nm-connection-for-each-setting-value"/>
+ <keyword type="function" name="nm_connection_to_hash ()" link="NMConnection.html#nm-connection-to-hash"/>
+ <keyword type="function" name="nm_connection_dump ()" link="NMConnection.html#nm-connection-dump"/>
+ <keyword type="function" name="nm_connection_lookup_setting_type ()" link="NMConnection.html#nm-connection-lookup-setting-type"/>
+ <keyword type="function" name="nm_connection_lookup_setting_type_by_quark ()" link="NMConnection.html#nm-connection-lookup-setting-type-by-quark"/>
+ <keyword type="function" name="nm_connection_get_uuid ()" link="NMConnection.html#nm-connection-get-uuid"/>
+ <keyword type="function" name="nm_connection_get_id ()" link="NMConnection.html#nm-connection-get-id"/>
+ <keyword type="function" name="nm_connection_get_connection_type ()" link="NMConnection.html#nm-connection-get-connection-type" since="0.9.10"/>
+ <keyword type="function" name="nm_connection_get_virtual_device_description ()" link="NMConnection.html#nm-connection-get-virtual-device-description" since="0.9.10"/>
+ <keyword type="function" name="nm_connection_get_setting_802_1x ()" link="NMConnection.html#nm-connection-get-setting-802-1x"/>
+ <keyword type="function" name="nm_connection_get_setting_bluetooth ()" link="NMConnection.html#nm-connection-get-setting-bluetooth"/>
+ <keyword type="function" name="nm_connection_get_setting_bond ()" link="NMConnection.html#nm-connection-get-setting-bond"/>
+ <keyword type="function" name="nm_connection_get_setting_team ()" link="NMConnection.html#nm-connection-get-setting-team" since="0.9.10"/>
+ <keyword type="function" name="nm_connection_get_setting_team_port ()" link="NMConnection.html#nm-connection-get-setting-team-port" since="0.9.10"/>
+ <keyword type="function" name="nm_connection_get_setting_bridge ()" link="NMConnection.html#nm-connection-get-setting-bridge"/>
+ <keyword type="function" name="nm_connection_get_setting_bridge_port ()" link="NMConnection.html#nm-connection-get-setting-bridge-port"/>
+ <keyword type="function" name="nm_connection_get_setting_cdma ()" link="NMConnection.html#nm-connection-get-setting-cdma"/>
+ <keyword type="function" name="nm_connection_get_setting_connection ()" link="NMConnection.html#nm-connection-get-setting-connection"/>
+ <keyword type="function" name="nm_connection_get_setting_dcb ()" link="NMConnection.html#nm-connection-get-setting-dcb" since="0.9.10"/>
+ <keyword type="function" name="nm_connection_get_setting_generic ()" link="NMConnection.html#nm-connection-get-setting-generic" since="0.9.10"/>
+ <keyword type="function" name="nm_connection_get_setting_gsm ()" link="NMConnection.html#nm-connection-get-setting-gsm"/>
+ <keyword type="function" name="nm_connection_get_setting_infiniband ()" link="NMConnection.html#nm-connection-get-setting-infiniband"/>
+ <keyword type="function" name="nm_connection_get_setting_ip4_config ()" link="NMConnection.html#nm-connection-get-setting-ip4-config"/>
+ <keyword type="function" name="nm_connection_get_setting_ip6_config ()" link="NMConnection.html#nm-connection-get-setting-ip6-config"/>
+ <keyword type="function" name="nm_connection_get_setting_olpc_mesh ()" link="NMConnection.html#nm-connection-get-setting-olpc-mesh"/>
+ <keyword type="function" name="nm_connection_get_setting_ppp ()" link="NMConnection.html#nm-connection-get-setting-ppp"/>
+ <keyword type="function" name="nm_connection_get_setting_pppoe ()" link="NMConnection.html#nm-connection-get-setting-pppoe"/>
+ <keyword type="function" name="nm_connection_get_setting_serial ()" link="NMConnection.html#nm-connection-get-setting-serial"/>
+ <keyword type="function" name="nm_connection_get_setting_vpn ()" link="NMConnection.html#nm-connection-get-setting-vpn"/>
+ <keyword type="function" name="nm_connection_get_setting_wimax ()" link="NMConnection.html#nm-connection-get-setting-wimax"/>
+ <keyword type="function" name="nm_connection_get_setting_adsl ()" link="NMConnection.html#nm-connection-get-setting-adsl"/>
+ <keyword type="function" name="nm_connection_get_setting_wired ()" link="NMConnection.html#nm-connection-get-setting-wired"/>
+ <keyword type="function" name="nm_connection_get_setting_wireless ()" link="NMConnection.html#nm-connection-get-setting-wireless"/>
+ <keyword type="function" name="nm_connection_get_setting_wireless_security ()" link="NMConnection.html#nm-connection-get-setting-wireless-security"/>
+ <keyword type="function" name="nm_connection_get_setting_vlan ()" link="NMConnection.html#nm-connection-get-setting-vlan"/>
+ <keyword type="property" name="The &quot;path&quot; property" link="NMConnection.html#NMConnection--path"/>
+ <keyword type="signal" name="The &quot;changed&quot; signal" link="NMConnection.html#NMConnection-changed"/>
+ <keyword type="signal" name="The &quot;secrets-cleared&quot; signal" link="NMConnection.html#NMConnection-secrets-cleared"/>
+ <keyword type="signal" name="The &quot;secrets-updated&quot; signal" link="NMConnection.html#NMConnection-secrets-updated"/>
+ <keyword type="enum" name="enum NMSettingError" link="NMSetting.html#NMSettingError-enum"/>
+ <keyword type="macro" name="NM_SETTING_ERROR" link="NMSetting.html#NM-SETTING-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_error_quark ()" link="NMSetting.html#nm-setting-error-quark"/>
<keyword type="macro" name="NM_SETTING_PARAM_SERIALIZE" link="NMSetting.html#NM-SETTING-PARAM-SERIALIZE:CAPS"/>
<keyword type="macro" name="NM_SETTING_PARAM_REQUIRED" link="NMSetting.html#NM-SETTING-PARAM-REQUIRED:CAPS"/>
<keyword type="macro" name="NM_SETTING_PARAM_SECRET" link="NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS"/>
<keyword type="macro" name="NM_SETTING_PARAM_FUZZY_IGNORE" link="NMSetting.html#NM-SETTING-PARAM-FUZZY-IGNORE:CAPS"/>
- <keyword type="function" name="NMSettingClearSecretsWithFlagsFn ()" link="NMSetting.html#NMSettingClearSecretsWithFlagsFn"/>
- <keyword type="function" name="NMSettingValueIterFn ()" link="NMSetting.html#NMSettingValueIterFn"/>
- <keyword type="function" name="nm_setting_to_hash ()" link="NMSetting.html#nm-setting-to-hash"/>
- <keyword type="function" name="nm_setting_new_from_hash ()" link="NMSetting.html#nm-setting-new-from-hash"/>
- <keyword type="function" name="nm_setting_duplicate ()" link="NMSetting.html#nm-setting-duplicate"/>
- <keyword type="function" name="nm_setting_get_name ()" link="NMSetting.html#nm-setting-get-name"/>
- <keyword type="function" name="nm_setting_verify ()" link="NMSetting.html#nm-setting-verify"/>
- <keyword type="function" name="nm_setting_compare ()" link="NMSetting.html#nm-setting-compare"/>
- <keyword type="function" name="nm_setting_diff ()" link="NMSetting.html#nm-setting-diff"/>
- <keyword type="function" name="nm_setting_enumerate_values ()" link="NMSetting.html#nm-setting-enumerate-values"/>
- <keyword type="function" name="nm_setting_to_string ()" link="NMSetting.html#nm-setting-to-string"/>
- <keyword type="function" name="nm_setting_clear_secrets ()" link="NMSetting.html#nm-setting-clear-secrets"/>
- <keyword type="function" name="nm_setting_clear_secrets_with_flags ()" link="NMSetting.html#nm-setting-clear-secrets-with-flags"/>
- <keyword type="function" name="nm_setting_need_secrets ()" link="NMSetting.html#nm-setting-need-secrets"/>
- <keyword type="function" name="nm_setting_update_secrets ()" link="NMSetting.html#nm-setting-update-secrets"/>
- <keyword type="function" name="nm_setting_get_secret_flags ()" link="NMSetting.html#nm-setting-get-secret-flags"/>
- <keyword type="function" name="nm_setting_set_secret_flags ()" link="NMSetting.html#nm-setting-set-secret-flags"/>
- <keyword type="function" name="nm_setting_get_virtual_iface_name ()" link="NMSetting.html#nm-setting-get-virtual-iface-name"/>
- <keyword type="enum" name="enum NMSettingError" link="NMSetting.html#NMSettingError"/>
- <keyword type="macro" name="NM_SETTING_ERROR" link="NMSetting.html#NM-SETTING-ERROR:CAPS"/>
<keyword type="macro" name="NM_SETTING_NAME" link="NMSetting.html#NM-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingSecretFlags" link="NMSetting.html#NMSettingSecretFlags"/>
- <keyword type="enum" name="enum NMSettingCompareFlags" link="NMSetting.html#NMSettingCompareFlags"/>
+ <keyword type="enum" name="enum NMSettingSecretFlags" link="NMSetting.html#NMSettingSecretFlags-enum"/>
+ <keyword type="enum" name="enum NMSettingCompareFlags" link="NMSetting.html#NMSettingCompareFlags-enum"/>
<keyword type="struct" name="NMSetting" link="NMSetting.html#NMSetting-struct"/>
- <keyword type="enum" name="enum NMSettingHashFlags" link="NMSetting.html#NMSettingHashFlags"/>
- <keyword type="enum" name="enum NMSettingDiffResult" link="NMSetting.html#NMSettingDiffResult"/>
- <keyword type="property" name="The “name†property" link="NMSetting.html#NMSetting--name"/>
- <keyword type="function" name="nm_setting_connection_error_quark ()" link="NMSettingConnection.html#nm-setting-connection-error-quark"/>
- <keyword type="function" name="nm_setting_connection_new ()" link="NMSettingConnection.html#nm-setting-connection-new"/>
- <keyword type="function" name="nm_setting_connection_get_id ()" link="NMSettingConnection.html#nm-setting-connection-get-id"/>
- <keyword type="function" name="nm_setting_connection_get_uuid ()" link="NMSettingConnection.html#nm-setting-connection-get-uuid"/>
- <keyword type="function" name="nm_setting_connection_get_connection_type ()" link="NMSettingConnection.html#nm-setting-connection-get-connection-type"/>
- <keyword type="function" name="nm_setting_connection_get_autoconnect ()" link="NMSettingConnection.html#nm-setting-connection-get-autoconnect"/>
- <keyword type="function" name="nm_setting_connection_get_timestamp ()" link="NMSettingConnection.html#nm-setting-connection-get-timestamp"/>
- <keyword type="function" name="nm_setting_connection_get_read_only ()" link="NMSettingConnection.html#nm-setting-connection-get-read-only"/>
- <keyword type="function" name="nm_setting_connection_get_num_permissions ()" link="NMSettingConnection.html#nm-setting-connection-get-num-permissions"/>
- <keyword type="function" name="nm_setting_connection_get_permission ()" link="NMSettingConnection.html#nm-setting-connection-get-permission"/>
- <keyword type="function" name="nm_setting_connection_get_zone ()" link="NMSettingConnection.html#nm-setting-connection-get-zone"/>
- <keyword type="function" name="nm_setting_connection_permissions_user_allowed ()" link="NMSettingConnection.html#nm-setting-connection-permissions-user-allowed"/>
- <keyword type="function" name="nm_setting_connection_add_permission ()" link="NMSettingConnection.html#nm-setting-connection-add-permission"/>
- <keyword type="function" name="nm_setting_connection_remove_permission ()" link="NMSettingConnection.html#nm-setting-connection-remove-permission"/>
- <keyword type="function" name="nm_setting_connection_get_master ()" link="NMSettingConnection.html#nm-setting-connection-get-master"/>
- <keyword type="function" name="nm_setting_connection_is_slave_type ()" link="NMSettingConnection.html#nm-setting-connection-is-slave-type"/>
- <keyword type="function" name="nm_setting_connection_get_slave_type ()" link="NMSettingConnection.html#nm-setting-connection-get-slave-type"/>
- <keyword type="function" name="nm_setting_connection_get_num_secondaries ()" link="NMSettingConnection.html#nm-setting-connection-get-num-secondaries" since="0.9.8"/>
- <keyword type="function" name="nm_setting_connection_get_secondary ()" link="NMSettingConnection.html#nm-setting-connection-get-secondary" since="0.9.8"/>
- <keyword type="function" name="nm_setting_connection_add_secondary ()" link="NMSettingConnection.html#nm-setting-connection-add-secondary" since="0.9.8"/>
- <keyword type="function" name="nm_setting_connection_remove_secondary ()" link="NMSettingConnection.html#nm-setting-connection-remove-secondary" since="0.9.8"/>
+ <keyword type="function" name="NMSettingClearSecretsWithFlagsFn ()" link="NMSetting.html#NMSettingClearSecretsWithFlagsFn"/>
+ <keyword type="struct" name="NMSettingClass" link="NMSetting.html#NMSettingClass"/>
+ <keyword type="function" name="NMSettingValueIterFn ()" link="NMSetting.html#NMSettingValueIterFn"/>
+ <keyword type="enum" name="enum NMSettingHashFlags" link="NMSetting.html#NMSettingHashFlags-enum"/>
+ <keyword type="function" name="nm_setting_to_hash ()" link="NMSetting.html#nm-setting-to-hash"/>
+ <keyword type="function" name="nm_setting_new_from_hash ()" link="NMSetting.html#nm-setting-new-from-hash"/>
+ <keyword type="function" name="nm_setting_duplicate ()" link="NMSetting.html#nm-setting-duplicate"/>
+ <keyword type="function" name="nm_setting_get_name ()" link="NMSetting.html#nm-setting-get-name"/>
+ <keyword type="function" name="nm_setting_verify ()" link="NMSetting.html#nm-setting-verify"/>
+ <keyword type="function" name="nm_setting_compare ()" link="NMSetting.html#nm-setting-compare"/>
+ <keyword type="enum" name="enum NMSettingDiffResult" link="NMSetting.html#NMSettingDiffResult-enum"/>
+ <keyword type="function" name="nm_setting_diff ()" link="NMSetting.html#nm-setting-diff"/>
+ <keyword type="function" name="nm_setting_enumerate_values ()" link="NMSetting.html#nm-setting-enumerate-values"/>
+ <keyword type="function" name="nm_setting_to_string ()" link="NMSetting.html#nm-setting-to-string"/>
+ <keyword type="function" name="nm_setting_clear_secrets ()" link="NMSetting.html#nm-setting-clear-secrets"/>
+ <keyword type="function" name="nm_setting_clear_secrets_with_flags ()" link="NMSetting.html#nm-setting-clear-secrets-with-flags"/>
+ <keyword type="function" name="nm_setting_need_secrets ()" link="NMSetting.html#nm-setting-need-secrets"/>
+ <keyword type="function" name="nm_setting_update_secrets ()" link="NMSetting.html#nm-setting-update-secrets"/>
+ <keyword type="function" name="nm_setting_get_secret_flags ()" link="NMSetting.html#nm-setting-get-secret-flags"/>
+ <keyword type="function" name="nm_setting_set_secret_flags ()" link="NMSetting.html#nm-setting-set-secret-flags"/>
+ <keyword type="function" name="nm_setting_get_virtual_iface_name ()" link="NMSetting.html#nm-setting-get-virtual-iface-name"/>
+ <keyword type="property" name="The &quot;name&quot; property" link="NMSetting.html#NMSetting--name"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_SETTING_NAME" link="NMSettingConnection.html#NM-SETTING-CONNECTION-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingConnectionError" link="NMSettingConnection.html#NMSettingConnectionError"/>
+ <keyword type="enum" name="enum NMSettingConnectionError" link="NMSettingConnection.html#NMSettingConnectionError-enum"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_ERROR" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_connection_error_quark ()" link="NMSettingConnection.html#nm-setting-connection-error-quark"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_ID" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_UUID" link="NMSettingConnection.html#NM-SETTING-CONNECTION-UUID:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_INTERFACE_NAME" link="NMSettingConnection.html#NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_TYPE" link="NMSettingConnection.html#NM-SETTING-CONNECTION-TYPE:CAPS"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_AUTOCONNECT" link="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT:CAPS"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_TIMESTAMP" link="NMSettingConnection.html#NM-SETTING-CONNECTION-TIMESTAMP:CAPS"/>
@@ -158,38 +156,50 @@
<keyword type="macro" name="NM_SETTING_CONNECTION_MASTER" link="NMSettingConnection.html#NM-SETTING-CONNECTION-MASTER:CAPS"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_SLAVE_TYPE" link="NMSettingConnection.html#NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS"/>
<keyword type="macro" name="NM_SETTING_CONNECTION_SECONDARIES" link="NMSettingConnection.html#NM-SETTING-CONNECTION-SECONDARIES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT" link="NMSettingConnection.html#NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS"/>
<keyword type="struct" name="NMSettingConnection" link="NMSettingConnection.html#NMSettingConnection-struct"/>
- <keyword type="property" name="The “autoconnect†property" link="NMSettingConnection.html#NMSettingConnection--autoconnect"/>
- <keyword type="property" name="The “id†property" link="NMSettingConnection.html#NMSettingConnection--id"/>
- <keyword type="property" name="The “master†property" link="NMSettingConnection.html#NMSettingConnection--master"/>
- <keyword type="property" name="The “permissions†property" link="NMSettingConnection.html#NMSettingConnection--permissions"/>
- <keyword type="property" name="The “read-only†property" link="NMSettingConnection.html#NMSettingConnection--read-only"/>
- <keyword type="property" name="The “secondaries†property" link="NMSettingConnection.html#NMSettingConnection--secondaries"/>
- <keyword type="property" name="The “slave-type†property" link="NMSettingConnection.html#NMSettingConnection--slave-type"/>
- <keyword type="property" name="The “timestamp†property" link="NMSettingConnection.html#NMSettingConnection--timestamp"/>
- <keyword type="property" name="The “type†property" link="NMSettingConnection.html#NMSettingConnection--type"/>
- <keyword type="property" name="The “uuid†property" link="NMSettingConnection.html#NMSettingConnection--uuid"/>
- <keyword type="property" name="The “zone†property" link="NMSettingConnection.html#NMSettingConnection--zone"/>
- <keyword type="function" name="nm_setting_wired_error_quark ()" link="NMSettingWired.html#nm-setting-wired-error-quark"/>
- <keyword type="function" name="nm_setting_wired_new ()" link="NMSettingWired.html#nm-setting-wired-new"/>
- <keyword type="function" name="nm_setting_wired_get_port ()" link="NMSettingWired.html#nm-setting-wired-get-port"/>
- <keyword type="function" name="nm_setting_wired_get_speed ()" link="NMSettingWired.html#nm-setting-wired-get-speed"/>
- <keyword type="function" name="nm_setting_wired_get_duplex ()" link="NMSettingWired.html#nm-setting-wired-get-duplex"/>
- <keyword type="function" name="nm_setting_wired_get_auto_negotiate ()" link="NMSettingWired.html#nm-setting-wired-get-auto-negotiate"/>
- <keyword type="function" name="nm_setting_wired_get_mac_address ()" link="NMSettingWired.html#nm-setting-wired-get-mac-address"/>
- <keyword type="function" name="nm_setting_wired_get_cloned_mac_address ()" link="NMSettingWired.html#nm-setting-wired-get-cloned-mac-address"/>
- <keyword type="function" name="nm_setting_wired_get_mac_address_blacklist ()" link="NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist"/>
- <keyword type="function" name="nm_setting_wired_get_mtu ()" link="NMSettingWired.html#nm-setting-wired-get-mtu"/>
- <keyword type="function" name="nm_setting_wired_get_s390_subchannels ()" link="NMSettingWired.html#nm-setting-wired-get-s390-subchannels"/>
- <keyword type="function" name="nm_setting_wired_get_s390_nettype ()" link="NMSettingWired.html#nm-setting-wired-get-s390-nettype"/>
- <keyword type="function" name="nm_setting_wired_get_num_s390_options ()" link="NMSettingWired.html#nm-setting-wired-get-num-s390-options"/>
- <keyword type="function" name="nm_setting_wired_get_s390_option ()" link="NMSettingWired.html#nm-setting-wired-get-s390-option"/>
- <keyword type="function" name="nm_setting_wired_get_s390_option_by_key ()" link="NMSettingWired.html#nm-setting-wired-get-s390-option-by-key"/>
- <keyword type="function" name="nm_setting_wired_add_s390_option ()" link="NMSettingWired.html#nm-setting-wired-add-s390-option"/>
- <keyword type="function" name="nm_setting_wired_remove_s390_option ()" link="NMSettingWired.html#nm-setting-wired-remove-s390-option"/>
+ <keyword type="struct" name="NMSettingConnectionClass" link="NMSettingConnection.html#NMSettingConnectionClass"/>
+ <keyword type="function" name="nm_setting_connection_new ()" link="NMSettingConnection.html#nm-setting-connection-new"/>
+ <keyword type="function" name="nm_setting_connection_get_id ()" link="NMSettingConnection.html#nm-setting-connection-get-id"/>
+ <keyword type="function" name="nm_setting_connection_get_uuid ()" link="NMSettingConnection.html#nm-setting-connection-get-uuid"/>
+ <keyword type="function" name="nm_setting_connection_get_interface_name ()" link="NMSettingConnection.html#nm-setting-connection-get-interface-name" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_connection_get_connection_type ()" link="NMSettingConnection.html#nm-setting-connection-get-connection-type"/>
+ <keyword type="function" name="nm_setting_connection_get_autoconnect ()" link="NMSettingConnection.html#nm-setting-connection-get-autoconnect"/>
+ <keyword type="function" name="nm_setting_connection_get_timestamp ()" link="NMSettingConnection.html#nm-setting-connection-get-timestamp"/>
+ <keyword type="function" name="nm_setting_connection_get_read_only ()" link="NMSettingConnection.html#nm-setting-connection-get-read-only"/>
+ <keyword type="function" name="nm_setting_connection_get_num_permissions ()" link="NMSettingConnection.html#nm-setting-connection-get-num-permissions"/>
+ <keyword type="function" name="nm_setting_connection_get_permission ()" link="NMSettingConnection.html#nm-setting-connection-get-permission"/>
+ <keyword type="function" name="nm_setting_connection_get_zone ()" link="NMSettingConnection.html#nm-setting-connection-get-zone"/>
+ <keyword type="function" name="nm_setting_connection_permissions_user_allowed ()" link="NMSettingConnection.html#nm-setting-connection-permissions-user-allowed"/>
+ <keyword type="function" name="nm_setting_connection_add_permission ()" link="NMSettingConnection.html#nm-setting-connection-add-permission"/>
+ <keyword type="function" name="nm_setting_connection_remove_permission ()" link="NMSettingConnection.html#nm-setting-connection-remove-permission"/>
+ <keyword type="function" name="nm_setting_connection_remove_permission_by_value ()" link="NMSettingConnection.html#nm-setting-connection-remove-permission-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_connection_get_master ()" link="NMSettingConnection.html#nm-setting-connection-get-master"/>
+ <keyword type="function" name="nm_setting_connection_is_slave_type ()" link="NMSettingConnection.html#nm-setting-connection-is-slave-type"/>
+ <keyword type="function" name="nm_setting_connection_get_slave_type ()" link="NMSettingConnection.html#nm-setting-connection-get-slave-type"/>
+ <keyword type="function" name="nm_setting_connection_get_num_secondaries ()" link="NMSettingConnection.html#nm-setting-connection-get-num-secondaries" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_connection_get_secondary ()" link="NMSettingConnection.html#nm-setting-connection-get-secondary" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_connection_add_secondary ()" link="NMSettingConnection.html#nm-setting-connection-add-secondary" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_connection_remove_secondary ()" link="NMSettingConnection.html#nm-setting-connection-remove-secondary" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_connection_remove_secondary_by_value ()" link="NMSettingConnection.html#nm-setting-connection-remove-secondary-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_connection_get_gateway_ping_timeout ()" link="NMSettingConnection.html#nm-setting-connection-get-gateway-ping-timeout" since="0.9.10"/>
+ <keyword type="property" name="The &quot;autoconnect&quot; property" link="NMSettingConnection.html#NMSettingConnection--autoconnect"/>
+ <keyword type="property" name="The &quot;gateway-ping-timeout&quot; property" link="NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout"/>
+ <keyword type="property" name="The &quot;id&quot; property" link="NMSettingConnection.html#NMSettingConnection--id"/>
+ <keyword type="property" name="The &quot;interface-name&quot; property" link="NMSettingConnection.html#NMSettingConnection--interface-name"/>
+ <keyword type="property" name="The &quot;master&quot; property" link="NMSettingConnection.html#NMSettingConnection--master"/>
+ <keyword type="property" name="The &quot;permissions&quot; property" link="NMSettingConnection.html#NMSettingConnection--permissions"/>
+ <keyword type="property" name="The &quot;read-only&quot; property" link="NMSettingConnection.html#NMSettingConnection--read-only"/>
+ <keyword type="property" name="The &quot;secondaries&quot; property" link="NMSettingConnection.html#NMSettingConnection--secondaries"/>
+ <keyword type="property" name="The &quot;slave-type&quot; property" link="NMSettingConnection.html#NMSettingConnection--slave-type"/>
+ <keyword type="property" name="The &quot;timestamp&quot; property" link="NMSettingConnection.html#NMSettingConnection--timestamp"/>
+ <keyword type="property" name="The &quot;type&quot; property" link="NMSettingConnection.html#NMSettingConnection--type"/>
+ <keyword type="property" name="The &quot;uuid&quot; property" link="NMSettingConnection.html#NMSettingConnection--uuid"/>
+ <keyword type="property" name="The &quot;zone&quot; property" link="NMSettingConnection.html#NMSettingConnection--zone"/>
<keyword type="macro" name="NM_SETTING_WIRED_SETTING_NAME" link="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingWiredError" link="NMSettingWired.html#NMSettingWiredError"/>
+ <keyword type="enum" name="enum NMSettingWiredError" link="NMSettingWired.html#NMSettingWiredError-enum"/>
<keyword type="macro" name="NM_SETTING_WIRED_ERROR" link="NMSettingWired.html#NM-SETTING-WIRED-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_wired_error_quark ()" link="NMSettingWired.html#nm-setting-wired-error-quark"/>
<keyword type="macro" name="NM_SETTING_WIRED_PORT" link="NMSettingWired.html#NM-SETTING-WIRED-PORT:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRED_SPEED" link="NMSettingWired.html#NM-SETTING-WIRED-SPEED:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRED_DUPLEX" link="NMSettingWired.html#NM-SETTING-WIRED-DUPLEX:CAPS"/>
@@ -201,39 +211,46 @@
<keyword type="macro" name="NM_SETTING_WIRED_S390_SUBCHANNELS" link="NMSettingWired.html#NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRED_S390_NETTYPE" link="NMSettingWired.html#NM-SETTING-WIRED-S390-NETTYPE:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRED_S390_OPTIONS" link="NMSettingWired.html#NM-SETTING-WIRED-S390-OPTIONS:CAPS"/>
- <keyword type="property" name="The “auto-negotiate†property" link="NMSettingWired.html#NMSettingWired--auto-negotiate"/>
- <keyword type="property" name="The “cloned-mac-address†property" link="NMSettingWired.html#NMSettingWired--cloned-mac-address"/>
- <keyword type="property" name="The “duplex†property" link="NMSettingWired.html#NMSettingWired--duplex"/>
- <keyword type="property" name="The “mac-address†property" link="NMSettingWired.html#NMSettingWired--mac-address"/>
- <keyword type="property" name="The “mac-address-blacklist†property" link="NMSettingWired.html#NMSettingWired--mac-address-blacklist"/>
- <keyword type="property" name="The “mtu†property" link="NMSettingWired.html#NMSettingWired--mtu"/>
- <keyword type="property" name="The “port†property" link="NMSettingWired.html#NMSettingWired--port"/>
- <keyword type="property" name="The “s390-nettype†property" link="NMSettingWired.html#NMSettingWired--s390-nettype"/>
- <keyword type="property" name="The “s390-options†property" link="NMSettingWired.html#NMSettingWired--s390-options"/>
- <keyword type="property" name="The “s390-subchannels†property" link="NMSettingWired.html#NMSettingWired--s390-subchannels"/>
- <keyword type="property" name="The “speed†property" link="NMSettingWired.html#NMSettingWired--speed"/>
- <keyword type="function" name="nm_setting_wireless_error_quark ()" link="NMSettingWireless.html#nm-setting-wireless-error-quark"/>
- <keyword type="function" name="nm_setting_wireless_new ()" link="NMSettingWireless.html#nm-setting-wireless-new"/>
- <keyword type="function" name="nm_setting_wireless_get_ssid ()" link="NMSettingWireless.html#nm-setting-wireless-get-ssid"/>
- <keyword type="function" name="nm_setting_wireless_get_mode ()" link="NMSettingWireless.html#nm-setting-wireless-get-mode"/>
- <keyword type="function" name="nm_setting_wireless_get_band ()" link="NMSettingWireless.html#nm-setting-wireless-get-band"/>
- <keyword type="function" name="nm_setting_wireless_get_channel ()" link="NMSettingWireless.html#nm-setting-wireless-get-channel"/>
- <keyword type="function" name="nm_setting_wireless_get_bssid ()" link="NMSettingWireless.html#nm-setting-wireless-get-bssid"/>
- <keyword type="function" name="nm_setting_wireless_get_rate ()" link="NMSettingWireless.html#nm-setting-wireless-get-rate"/>
- <keyword type="function" name="nm_setting_wireless_get_tx_power ()" link="NMSettingWireless.html#nm-setting-wireless-get-tx-power"/>
- <keyword type="function" name="nm_setting_wireless_get_mac_address ()" link="NMSettingWireless.html#nm-setting-wireless-get-mac-address"/>
- <keyword type="function" name="nm_setting_wireless_get_cloned_mac_address ()" link="NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address"/>
- <keyword type="function" name="nm_setting_wireless_get_mac_address_blacklist ()" link="NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist"/>
- <keyword type="function" name="nm_setting_wireless_get_mtu ()" link="NMSettingWireless.html#nm-setting-wireless-get-mtu"/>
- <keyword type="function" name="nm_setting_wireless_get_security ()" link="NMSettingWireless.html#nm-setting-wireless-get-security"/>
- <keyword type="function" name="nm_setting_wireless_get_hidden ()" link="NMSettingWireless.html#nm-setting-wireless-get-hidden"/>
- <keyword type="function" name="nm_setting_wireless_add_seen_bssid ()" link="NMSettingWireless.html#nm-setting-wireless-add-seen-bssid"/>
- <keyword type="function" name="nm_setting_wireless_get_num_seen_bssids ()" link="NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids"/>
- <keyword type="function" name="nm_setting_wireless_get_seen_bssid ()" link="NMSettingWireless.html#nm-setting-wireless-get-seen-bssid"/>
- <keyword type="function" name="nm_setting_wireless_ap_security_compatible ()" link="NMSettingWireless.html#nm-setting-wireless-ap-security-compatible"/>
+ <keyword type="struct" name="NMSettingWired" link="NMSettingWired.html#NMSettingWired-struct"/>
+ <keyword type="struct" name="NMSettingWiredClass" link="NMSettingWired.html#NMSettingWiredClass"/>
+ <keyword type="function" name="nm_setting_wired_new ()" link="NMSettingWired.html#nm-setting-wired-new"/>
+ <keyword type="function" name="nm_setting_wired_get_port ()" link="NMSettingWired.html#nm-setting-wired-get-port"/>
+ <keyword type="function" name="nm_setting_wired_get_speed ()" link="NMSettingWired.html#nm-setting-wired-get-speed"/>
+ <keyword type="function" name="nm_setting_wired_get_duplex ()" link="NMSettingWired.html#nm-setting-wired-get-duplex"/>
+ <keyword type="function" name="nm_setting_wired_get_auto_negotiate ()" link="NMSettingWired.html#nm-setting-wired-get-auto-negotiate"/>
+ <keyword type="function" name="nm_setting_wired_get_mac_address ()" link="NMSettingWired.html#nm-setting-wired-get-mac-address"/>
+ <keyword type="function" name="nm_setting_wired_get_cloned_mac_address ()" link="NMSettingWired.html#nm-setting-wired-get-cloned-mac-address"/>
+ <keyword type="function" name="nm_setting_wired_get_mac_address_blacklist ()" link="NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist"/>
+ <keyword type="function" name="nm_setting_wired_get_num_mac_blacklist_items ()" link="NMSettingWired.html#nm-setting-wired-get-num-mac-blacklist-items" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wired_get_mac_blacklist_item ()" link="NMSettingWired.html#nm-setting-wired-get-mac-blacklist-item" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wired_add_mac_blacklist_item ()" link="NMSettingWired.html#nm-setting-wired-add-mac-blacklist-item" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wired_remove_mac_blacklist_item ()" link="NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wired_remove_mac_blacklist_item_by_value ()" link="NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wired_clear_mac_blacklist_items ()" link="NMSettingWired.html#nm-setting-wired-clear-mac-blacklist-items" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wired_get_mtu ()" link="NMSettingWired.html#nm-setting-wired-get-mtu"/>
+ <keyword type="function" name="nm_setting_wired_get_s390_subchannels ()" link="NMSettingWired.html#nm-setting-wired-get-s390-subchannels"/>
+ <keyword type="function" name="nm_setting_wired_get_s390_nettype ()" link="NMSettingWired.html#nm-setting-wired-get-s390-nettype"/>
+ <keyword type="function" name="nm_setting_wired_get_num_s390_options ()" link="NMSettingWired.html#nm-setting-wired-get-num-s390-options"/>
+ <keyword type="function" name="nm_setting_wired_get_s390_option ()" link="NMSettingWired.html#nm-setting-wired-get-s390-option"/>
+ <keyword type="function" name="nm_setting_wired_get_s390_option_by_key ()" link="NMSettingWired.html#nm-setting-wired-get-s390-option-by-key"/>
+ <keyword type="function" name="nm_setting_wired_add_s390_option ()" link="NMSettingWired.html#nm-setting-wired-add-s390-option"/>
+ <keyword type="function" name="nm_setting_wired_remove_s390_option ()" link="NMSettingWired.html#nm-setting-wired-remove-s390-option"/>
+ <keyword type="function" name="nm_setting_wired_get_valid_s390_options ()" link="NMSettingWired.html#nm-setting-wired-get-valid-s390-options" since="0.9.10"/>
+ <keyword type="property" name="The &quot;auto-negotiate&quot; property" link="NMSettingWired.html#NMSettingWired--auto-negotiate"/>
+ <keyword type="property" name="The &quot;cloned-mac-address&quot; property" link="NMSettingWired.html#NMSettingWired--cloned-mac-address"/>
+ <keyword type="property" name="The &quot;duplex&quot; property" link="NMSettingWired.html#NMSettingWired--duplex"/>
+ <keyword type="property" name="The &quot;mac-address&quot; property" link="NMSettingWired.html#NMSettingWired--mac-address"/>
+ <keyword type="property" name="The &quot;mac-address-blacklist&quot; property" link="NMSettingWired.html#NMSettingWired--mac-address-blacklist"/>
+ <keyword type="property" name="The &quot;mtu&quot; property" link="NMSettingWired.html#NMSettingWired--mtu"/>
+ <keyword type="property" name="The &quot;port&quot; property" link="NMSettingWired.html#NMSettingWired--port"/>
+ <keyword type="property" name="The &quot;s390-nettype&quot; property" link="NMSettingWired.html#NMSettingWired--s390-nettype"/>
+ <keyword type="property" name="The &quot;s390-options&quot; property" link="NMSettingWired.html#NMSettingWired--s390-options"/>
+ <keyword type="property" name="The &quot;s390-subchannels&quot; property" link="NMSettingWired.html#NMSettingWired--s390-subchannels"/>
+ <keyword type="property" name="The &quot;speed&quot; property" link="NMSettingWired.html#NMSettingWired--speed"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SETTING_NAME" link="NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingWirelessError" link="NMSettingWireless.html#NMSettingWirelessError"/>
+ <keyword type="enum" name="enum NMSettingWirelessError" link="NMSettingWireless.html#NMSettingWirelessError-enum"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_ERROR" link="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_wireless_error_quark ()" link="NMSettingWireless.html#nm-setting-wireless-error-quark"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SSID" link="NMSettingWireless.html#NM-SETTING-WIRELESS-SSID:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_MODE" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_BAND" link="NMSettingWireless.html#NM-SETTING-WIRELESS-BAND:CAPS"/>
@@ -246,58 +263,56 @@
<keyword type="macro" name="NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_MTU" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MTU:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SEEN_BSSIDS" link="NMSettingWireless.html#NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS"/>
- <keyword type="macro" name="NM_SETTING_WIRELESS_SEC" link="NMSettingWireless.html#NM-SETTING-WIRELESS-SEC:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_HIDDEN" link="NMSettingWireless.html#NM-SETTING-WIRELESS-HIDDEN:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SEC" link="NMSettingWireless.html#NM-SETTING-WIRELESS-SEC:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_MODE_ADHOC" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-ADHOC:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_MODE_AP" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-AP:CAPS" since="0.9.8"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_MODE_INFRA" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-INFRA:CAPS"/>
- <keyword type="property" name="The “band†property" link="NMSettingWireless.html#NMSettingWireless--band"/>
- <keyword type="property" name="The “bssid†property" link="NMSettingWireless.html#NMSettingWireless--bssid"/>
- <keyword type="property" name="The “channel†property" link="NMSettingWireless.html#NMSettingWireless--channel"/>
- <keyword type="property" name="The “cloned-mac-address†property" link="NMSettingWireless.html#NMSettingWireless--cloned-mac-address"/>
- <keyword type="property" name="The “hidden†property" link="NMSettingWireless.html#NMSettingWireless--hidden"/>
- <keyword type="property" name="The “mac-address†property" link="NMSettingWireless.html#NMSettingWireless--mac-address"/>
- <keyword type="property" name="The “mac-address-blacklist†property" link="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist"/>
- <keyword type="property" name="The “mode†property" link="NMSettingWireless.html#NMSettingWireless--mode"/>
- <keyword type="property" name="The “mtu†property" link="NMSettingWireless.html#NMSettingWireless--mtu"/>
- <keyword type="property" name="The “rate†property" link="NMSettingWireless.html#NMSettingWireless--rate"/>
- <keyword type="property" name="The “security†property" link="NMSettingWireless.html#NMSettingWireless--security"/>
- <keyword type="property" name="The “seen-bssids†property" link="NMSettingWireless.html#NMSettingWireless--seen-bssids"/>
- <keyword type="property" name="The “ssid†property" link="NMSettingWireless.html#NMSettingWireless--ssid"/>
- <keyword type="property" name="The “tx-power†property" link="NMSettingWireless.html#NMSettingWireless--tx-power"/>
- <keyword type="function" name="nm_setting_wireless_security_error_quark ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-error-quark"/>
- <keyword type="function" name="nm_setting_wireless_security_new ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-new"/>
- <keyword type="function" name="nm_setting_wireless_security_get_key_mgmt ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt"/>
- <keyword type="function" name="nm_setting_wireless_security_get_num_protos ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos"/>
- <keyword type="function" name="nm_setting_wireless_security_get_proto ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto"/>
- <keyword type="function" name="nm_setting_wireless_security_add_proto ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto"/>
- <keyword type="function" name="nm_setting_wireless_security_remove_proto ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto"/>
- <keyword type="function" name="nm_setting_wireless_security_clear_protos ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos"/>
- <keyword type="function" name="nm_setting_wireless_security_get_num_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise"/>
- <keyword type="function" name="nm_setting_wireless_security_get_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise"/>
- <keyword type="function" name="nm_setting_wireless_security_add_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise"/>
- <keyword type="function" name="nm_setting_wireless_security_remove_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise"/>
- <keyword type="function" name="nm_setting_wireless_security_clear_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise"/>
- <keyword type="function" name="nm_setting_wireless_security_get_num_groups ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups"/>
- <keyword type="function" name="nm_setting_wireless_security_get_group ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group"/>
- <keyword type="function" name="nm_setting_wireless_security_add_group ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group"/>
- <keyword type="function" name="nm_setting_wireless_security_remove_group ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group"/>
- <keyword type="function" name="nm_setting_wireless_security_clear_groups ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups"/>
- <keyword type="function" name="nm_setting_wireless_security_get_psk ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk"/>
- <keyword type="function" name="nm_setting_wireless_security_get_psk_flags ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags"/>
- <keyword type="function" name="nm_setting_wireless_security_get_leap_username ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-username"/>
- <keyword type="function" name="nm_setting_wireless_security_get_leap_password ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password"/>
- <keyword type="function" name="nm_setting_wireless_security_get_leap_password_flags ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password-flags"/>
- <keyword type="function" name="nm_setting_wireless_security_get_wep_key ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key"/>
- <keyword type="function" name="nm_setting_wireless_security_set_wep_key ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-set-wep-key"/>
- <keyword type="function" name="nm_setting_wireless_security_get_wep_tx_keyidx ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-tx-keyidx"/>
- <keyword type="function" name="nm_setting_wireless_security_get_auth_alg ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg"/>
- <keyword type="function" name="nm_setting_wireless_security_get_wep_key_flags ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags"/>
- <keyword type="function" name="nm_setting_wireless_security_get_wep_key_type ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type"/>
+ <keyword type="struct" name="NMSettingWireless" link="NMSettingWireless.html#NMSettingWireless-struct"/>
+ <keyword type="struct" name="NMSettingWirelessClass" link="NMSettingWireless.html#NMSettingWirelessClass"/>
+ <keyword type="function" name="nm_setting_wireless_new ()" link="NMSettingWireless.html#nm-setting-wireless-new"/>
+ <keyword type="function" name="nm_setting_wireless_get_ssid ()" link="NMSettingWireless.html#nm-setting-wireless-get-ssid"/>
+ <keyword type="function" name="nm_setting_wireless_get_mode ()" link="NMSettingWireless.html#nm-setting-wireless-get-mode"/>
+ <keyword type="function" name="nm_setting_wireless_get_band ()" link="NMSettingWireless.html#nm-setting-wireless-get-band"/>
+ <keyword type="function" name="nm_setting_wireless_get_channel ()" link="NMSettingWireless.html#nm-setting-wireless-get-channel"/>
+ <keyword type="function" name="nm_setting_wireless_get_bssid ()" link="NMSettingWireless.html#nm-setting-wireless-get-bssid"/>
+ <keyword type="function" name="nm_setting_wireless_get_rate ()" link="NMSettingWireless.html#nm-setting-wireless-get-rate"/>
+ <keyword type="function" name="nm_setting_wireless_get_tx_power ()" link="NMSettingWireless.html#nm-setting-wireless-get-tx-power"/>
+ <keyword type="function" name="nm_setting_wireless_get_mac_address ()" link="NMSettingWireless.html#nm-setting-wireless-get-mac-address"/>
+ <keyword type="function" name="nm_setting_wireless_get_cloned_mac_address ()" link="NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address"/>
+ <keyword type="function" name="nm_setting_wireless_get_mac_address_blacklist ()" link="NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist"/>
+ <keyword type="function" name="nm_setting_wireless_get_num_mac_blacklist_items ()" link="NMSettingWireless.html#nm-setting-wireless-get-num-mac-blacklist-items" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_get_mac_blacklist_item ()" link="NMSettingWireless.html#nm-setting-wireless-get-mac-blacklist-item" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_add_mac_blacklist_item ()" link="NMSettingWireless.html#nm-setting-wireless-add-mac-blacklist-item" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_remove_mac_blacklist_item ()" link="NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_remove_mac_blacklist_item_by_value ()" link="NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_clear_mac_blacklist_items ()" link="NMSettingWireless.html#nm-setting-wireless-clear-mac-blacklist-items" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_get_mtu ()" link="NMSettingWireless.html#nm-setting-wireless-get-mtu"/>
+ <keyword type="function" name="nm_setting_wireless_get_hidden ()" link="NMSettingWireless.html#nm-setting-wireless-get-hidden"/>
+ <keyword type="function" name="nm_setting_wireless_add_seen_bssid ()" link="NMSettingWireless.html#nm-setting-wireless-add-seen-bssid"/>
+ <keyword type="function" name="nm_setting_wireless_get_num_seen_bssids ()" link="NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids"/>
+ <keyword type="function" name="nm_setting_wireless_get_seen_bssid ()" link="NMSettingWireless.html#nm-setting-wireless-get-seen-bssid"/>
+ <keyword type="function" name="nm_setting_wireless_ap_security_compatible ()" link="NMSettingWireless.html#nm-setting-wireless-ap-security-compatible"/>
+ <keyword type="function" name="nm_setting_wireless_get_security ()" link="NMSettingWireless.html#nm-setting-wireless-get-security" deprecated=""/>
+ <keyword type="property" name="The &quot;band&quot; property" link="NMSettingWireless.html#NMSettingWireless--band"/>
+ <keyword type="property" name="The &quot;bssid&quot; property" link="NMSettingWireless.html#NMSettingWireless--bssid"/>
+ <keyword type="property" name="The &quot;channel&quot; property" link="NMSettingWireless.html#NMSettingWireless--channel"/>
+ <keyword type="property" name="The &quot;cloned-mac-address&quot; property" link="NMSettingWireless.html#NMSettingWireless--cloned-mac-address"/>
+ <keyword type="property" name="The &quot;hidden&quot; property" link="NMSettingWireless.html#NMSettingWireless--hidden"/>
+ <keyword type="property" name="The &quot;mac-address&quot; property" link="NMSettingWireless.html#NMSettingWireless--mac-address"/>
+ <keyword type="property" name="The &quot;mac-address-blacklist&quot; property" link="NMSettingWireless.html#NMSettingWireless--mac-address-blacklist"/>
+ <keyword type="property" name="The &quot;mode&quot; property" link="NMSettingWireless.html#NMSettingWireless--mode"/>
+ <keyword type="property" name="The &quot;mtu&quot; property" link="NMSettingWireless.html#NMSettingWireless--mtu"/>
+ <keyword type="property" name="The &quot;rate&quot; property" link="NMSettingWireless.html#NMSettingWireless--rate"/>
+ <keyword type="property" name="The &quot;security&quot; property" link="NMSettingWireless.html#NMSettingWireless--security"/>
+ <keyword type="property" name="The &quot;seen-bssids&quot; property" link="NMSettingWireless.html#NMSettingWireless--seen-bssids"/>
+ <keyword type="property" name="The &quot;ssid&quot; property" link="NMSettingWireless.html#NMSettingWireless--ssid"/>
+ <keyword type="property" name="The &quot;tx-power&quot; property" link="NMSettingWireless.html#NMSettingWireless--tx-power"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_SETTING_NAME" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingWirelessSecurityError" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError"/>
+ <keyword type="enum" name="enum NMSettingWirelessSecurityError" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError-enum"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_ERROR" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR:CAPS"/>
- <keyword type="enum" name="enum NMWepKeyType" link="NMSettingWirelessSecurity.html#NMWepKeyType"/>
+ <keyword type="function" name="nm_setting_wireless_security_error_quark ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-error-quark"/>
+ <keyword type="enum" name="enum NMWepKeyType" link="NMSettingWirelessSecurity.html#NMWepKeyType-enum"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_KEY_MGMT" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_AUTH_ALG" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS"/>
@@ -315,137 +330,172 @@
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS"/>
- <keyword type="property" name="The “auth-alg†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg"/>
- <keyword type="property" name="The “group†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group"/>
- <keyword type="property" name="The “key-mgmt†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt"/>
- <keyword type="property" name="The “leap-password†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password"/>
- <keyword type="property" name="The “leap-password-flags†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags"/>
- <keyword type="property" name="The “leap-username†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username"/>
- <keyword type="property" name="The “pairwise†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise"/>
- <keyword type="property" name="The “proto†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto"/>
- <keyword type="property" name="The “psk†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk"/>
- <keyword type="property" name="The “psk-flags†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags"/>
- <keyword type="property" name="The “wep-key-flags†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags"/>
- <keyword type="property" name="The “wep-key-type†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type"/>
- <keyword type="property" name="The “wep-key0†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0"/>
- <keyword type="property" name="The “wep-key1†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1"/>
- <keyword type="property" name="The “wep-key2†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2"/>
- <keyword type="property" name="The “wep-key3†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3"/>
- <keyword type="property" name="The “wep-tx-keyidx†property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx"/>
- <keyword type="function" name="nm_setting_bluetooth_error_quark ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-error-quark"/>
- <keyword type="function" name="nm_setting_bluetooth_new ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-new"/>
- <keyword type="function" name="nm_setting_bluetooth_get_bdaddr ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr"/>
- <keyword type="function" name="nm_setting_bluetooth_get_connection_type ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type"/>
+ <keyword type="struct" name="NMSettingWirelessSecurity" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity-struct"/>
+ <keyword type="struct" name="NMSettingWirelessSecurityClass" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityClass"/>
+ <keyword type="function" name="nm_setting_wireless_security_new ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-new"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_key_mgmt ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_num_protos ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_proto ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto"/>
+ <keyword type="function" name="nm_setting_wireless_security_add_proto ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto"/>
+ <keyword type="function" name="nm_setting_wireless_security_remove_proto ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto"/>
+ <keyword type="function" name="nm_setting_wireless_security_remove_proto_by_value ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_security_clear_protos ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_num_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise"/>
+ <keyword type="function" name="nm_setting_wireless_security_add_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise"/>
+ <keyword type="function" name="nm_setting_wireless_security_remove_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise"/>
+ <keyword type="function" name="nm_setting_wireless_security_remove_pairwise_by_value ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_security_clear_pairwise ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_num_groups ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_group ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group"/>
+ <keyword type="function" name="nm_setting_wireless_security_add_group ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group"/>
+ <keyword type="function" name="nm_setting_wireless_security_remove_group ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group"/>
+ <keyword type="function" name="nm_setting_wireless_security_remove_group_by_value ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_wireless_security_clear_groups ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_psk ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_psk_flags ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_leap_username ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-username"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_leap_password ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_leap_password_flags ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password-flags"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_wep_key ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key"/>
+ <keyword type="function" name="nm_setting_wireless_security_set_wep_key ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-set-wep-key"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_wep_tx_keyidx ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-tx-keyidx"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_auth_alg ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_wep_key_flags ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags"/>
+ <keyword type="function" name="nm_setting_wireless_security_get_wep_key_type ()" link="NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type"/>
+ <keyword type="property" name="The &quot;auth-alg&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg"/>
+ <keyword type="property" name="The &quot;group&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group"/>
+ <keyword type="property" name="The &quot;key-mgmt&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt"/>
+ <keyword type="property" name="The &quot;leap-password&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password"/>
+ <keyword type="property" name="The &quot;leap-password-flags&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags"/>
+ <keyword type="property" name="The &quot;leap-username&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username"/>
+ <keyword type="property" name="The &quot;pairwise&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise"/>
+ <keyword type="property" name="The &quot;proto&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto"/>
+ <keyword type="property" name="The &quot;psk&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk"/>
+ <keyword type="property" name="The &quot;psk-flags&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags"/>
+ <keyword type="property" name="The &quot;wep-key-flags&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags"/>
+ <keyword type="property" name="The &quot;wep-key-type&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type"/>
+ <keyword type="property" name="The &quot;wep-key0&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0"/>
+ <keyword type="property" name="The &quot;wep-key1&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1"/>
+ <keyword type="property" name="The &quot;wep-key2&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2"/>
+ <keyword type="property" name="The &quot;wep-key3&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3"/>
+ <keyword type="property" name="The &quot;wep-tx-keyidx&quot; property" link="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx"/>
<keyword type="macro" name="NM_SETTING_BLUETOOTH_SETTING_NAME" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingBluetoothError" link="NMSettingBluetooth.html#NMSettingBluetoothError"/>
+ <keyword type="enum" name="enum NMSettingBluetoothError" link="NMSettingBluetooth.html#NMSettingBluetoothError-enum"/>
<keyword type="macro" name="NM_SETTING_BLUETOOTH_ERROR" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_bluetooth_error_quark ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-error-quark"/>
<keyword type="macro" name="NM_SETTING_BLUETOOTH_BDADDR" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-BDADDR:CAPS"/>
<keyword type="macro" name="NM_SETTING_BLUETOOTH_TYPE" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE:CAPS"/>
<keyword type="macro" name="NM_SETTING_BLUETOOTH_TYPE_DUN" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS"/>
<keyword type="macro" name="NM_SETTING_BLUETOOTH_TYPE_PANU" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS"/>
- <keyword type="property" name="The “bdaddr†property" link="NMSettingBluetooth.html#NMSettingBluetooth--bdaddr"/>
- <keyword type="property" name="The “type†property" link="NMSettingBluetooth.html#NMSettingBluetooth--type"/>
- <keyword type="function" name="nm_setting_serial_error_quark ()" link="NMSettingSerial.html#nm-setting-serial-error-quark"/>
- <keyword type="function" name="nm_setting_serial_new ()" link="NMSettingSerial.html#nm-setting-serial-new"/>
- <keyword type="function" name="nm_setting_serial_get_baud ()" link="NMSettingSerial.html#nm-setting-serial-get-baud"/>
- <keyword type="function" name="nm_setting_serial_get_bits ()" link="NMSettingSerial.html#nm-setting-serial-get-bits"/>
- <keyword type="function" name="nm_setting_serial_get_parity ()" link="NMSettingSerial.html#nm-setting-serial-get-parity"/>
- <keyword type="function" name="nm_setting_serial_get_stopbits ()" link="NMSettingSerial.html#nm-setting-serial-get-stopbits"/>
- <keyword type="function" name="nm_setting_serial_get_send_delay ()" link="NMSettingSerial.html#nm-setting-serial-get-send-delay"/>
+ <keyword type="struct" name="NMSettingBluetooth" link="NMSettingBluetooth.html#NMSettingBluetooth-struct"/>
+ <keyword type="struct" name="NMSettingBluetoothClass" link="NMSettingBluetooth.html#NMSettingBluetoothClass"/>
+ <keyword type="function" name="nm_setting_bluetooth_new ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-new"/>
+ <keyword type="function" name="nm_setting_bluetooth_get_bdaddr ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr"/>
+ <keyword type="function" name="nm_setting_bluetooth_get_connection_type ()" link="NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type"/>
+ <keyword type="property" name="The &quot;bdaddr&quot; property" link="NMSettingBluetooth.html#NMSettingBluetooth--bdaddr"/>
+ <keyword type="property" name="The &quot;type&quot; property" link="NMSettingBluetooth.html#NMSettingBluetooth--type"/>
<keyword type="macro" name="NM_SETTING_SERIAL_SETTING_NAME" link="NMSettingSerial.html#NM-SETTING-SERIAL-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingSerialError" link="NMSettingSerial.html#NMSettingSerialError"/>
+ <keyword type="enum" name="enum NMSettingSerialError" link="NMSettingSerial.html#NMSettingSerialError-enum"/>
<keyword type="macro" name="NM_SETTING_SERIAL_ERROR" link="NMSettingSerial.html#NM-SETTING-SERIAL-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_serial_error_quark ()" link="NMSettingSerial.html#nm-setting-serial-error-quark"/>
<keyword type="macro" name="NM_SETTING_SERIAL_BAUD" link="NMSettingSerial.html#NM-SETTING-SERIAL-BAUD:CAPS"/>
<keyword type="macro" name="NM_SETTING_SERIAL_BITS" link="NMSettingSerial.html#NM-SETTING-SERIAL-BITS:CAPS"/>
<keyword type="macro" name="NM_SETTING_SERIAL_PARITY" link="NMSettingSerial.html#NM-SETTING-SERIAL-PARITY:CAPS"/>
<keyword type="macro" name="NM_SETTING_SERIAL_STOPBITS" link="NMSettingSerial.html#NM-SETTING-SERIAL-STOPBITS:CAPS"/>
<keyword type="macro" name="NM_SETTING_SERIAL_SEND_DELAY" link="NMSettingSerial.html#NM-SETTING-SERIAL-SEND-DELAY:CAPS"/>
- <keyword type="property" name="The “baud†property" link="NMSettingSerial.html#NMSettingSerial--baud"/>
- <keyword type="property" name="The “bits†property" link="NMSettingSerial.html#NMSettingSerial--bits"/>
- <keyword type="property" name="The “parity†property" link="NMSettingSerial.html#NMSettingSerial--parity"/>
- <keyword type="property" name="The “send-delay†property" link="NMSettingSerial.html#NMSettingSerial--send-delay"/>
- <keyword type="property" name="The “stopbits†property" link="NMSettingSerial.html#NMSettingSerial--stopbits"/>
- <keyword type="function" name="nm_setting_cdma_error_quark ()" link="NMSettingCdma.html#nm-setting-cdma-error-quark"/>
- <keyword type="function" name="nm_setting_cdma_new ()" link="NMSettingCdma.html#nm-setting-cdma-new"/>
- <keyword type="function" name="nm_setting_cdma_get_number ()" link="NMSettingCdma.html#nm-setting-cdma-get-number"/>
- <keyword type="function" name="nm_setting_cdma_get_username ()" link="NMSettingCdma.html#nm-setting-cdma-get-username"/>
- <keyword type="function" name="nm_setting_cdma_get_password ()" link="NMSettingCdma.html#nm-setting-cdma-get-password"/>
- <keyword type="function" name="nm_setting_cdma_get_password_flags ()" link="NMSettingCdma.html#nm-setting-cdma-get-password-flags"/>
+ <keyword type="struct" name="NMSettingSerial" link="NMSettingSerial.html#NMSettingSerial-struct"/>
+ <keyword type="struct" name="NMSettingSerialClass" link="NMSettingSerial.html#NMSettingSerialClass"/>
+ <keyword type="function" name="nm_setting_serial_new ()" link="NMSettingSerial.html#nm-setting-serial-new"/>
+ <keyword type="function" name="nm_setting_serial_get_baud ()" link="NMSettingSerial.html#nm-setting-serial-get-baud"/>
+ <keyword type="function" name="nm_setting_serial_get_bits ()" link="NMSettingSerial.html#nm-setting-serial-get-bits"/>
+ <keyword type="function" name="nm_setting_serial_get_parity ()" link="NMSettingSerial.html#nm-setting-serial-get-parity"/>
+ <keyword type="function" name="nm_setting_serial_get_stopbits ()" link="NMSettingSerial.html#nm-setting-serial-get-stopbits"/>
+ <keyword type="function" name="nm_setting_serial_get_send_delay ()" link="NMSettingSerial.html#nm-setting-serial-get-send-delay"/>
+ <keyword type="property" name="The &quot;baud&quot; property" link="NMSettingSerial.html#NMSettingSerial--baud"/>
+ <keyword type="property" name="The &quot;bits&quot; property" link="NMSettingSerial.html#NMSettingSerial--bits"/>
+ <keyword type="property" name="The &quot;parity&quot; property" link="NMSettingSerial.html#NMSettingSerial--parity"/>
+ <keyword type="property" name="The &quot;send-delay&quot; property" link="NMSettingSerial.html#NMSettingSerial--send-delay"/>
+ <keyword type="property" name="The &quot;stopbits&quot; property" link="NMSettingSerial.html#NMSettingSerial--stopbits"/>
<keyword type="macro" name="NM_SETTING_CDMA_SETTING_NAME" link="NMSettingCdma.html#NM-SETTING-CDMA-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingCdmaError" link="NMSettingCdma.html#NMSettingCdmaError"/>
+ <keyword type="enum" name="enum NMSettingCdmaError" link="NMSettingCdma.html#NMSettingCdmaError-enum"/>
<keyword type="macro" name="NM_SETTING_CDMA_ERROR" link="NMSettingCdma.html#NM-SETTING-CDMA-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_cdma_error_quark ()" link="NMSettingCdma.html#nm-setting-cdma-error-quark"/>
<keyword type="macro" name="NM_SETTING_CDMA_NUMBER" link="NMSettingCdma.html#NM-SETTING-CDMA-NUMBER:CAPS"/>
<keyword type="macro" name="NM_SETTING_CDMA_USERNAME" link="NMSettingCdma.html#NM-SETTING-CDMA-USERNAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_CDMA_PASSWORD" link="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD:CAPS"/>
<keyword type="macro" name="NM_SETTING_CDMA_PASSWORD_FLAGS" link="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS"/>
- <keyword type="property" name="The “number†property" link="NMSettingCdma.html#NMSettingCdma--number"/>
- <keyword type="property" name="The “password†property" link="NMSettingCdma.html#NMSettingCdma--password"/>
- <keyword type="property" name="The “password-flags†property" link="NMSettingCdma.html#NMSettingCdma--password-flags"/>
- <keyword type="property" name="The “username†property" link="NMSettingCdma.html#NMSettingCdma--username"/>
- <keyword type="function" name="nm_setting_gsm_error_quark ()" link="NMSettingGsm.html#nm-setting-gsm-error-quark"/>
- <keyword type="function" name="nm_setting_gsm_new ()" link="NMSettingGsm.html#nm-setting-gsm-new"/>
- <keyword type="function" name="nm_setting_gsm_get_number ()" link="NMSettingGsm.html#nm-setting-gsm-get-number"/>
- <keyword type="function" name="nm_setting_gsm_get_username ()" link="NMSettingGsm.html#nm-setting-gsm-get-username"/>
- <keyword type="function" name="nm_setting_gsm_get_password ()" link="NMSettingGsm.html#nm-setting-gsm-get-password"/>
- <keyword type="function" name="nm_setting_gsm_get_apn ()" link="NMSettingGsm.html#nm-setting-gsm-get-apn"/>
- <keyword type="function" name="nm_setting_gsm_get_network_id ()" link="NMSettingGsm.html#nm-setting-gsm-get-network-id"/>
- <keyword type="function" name="nm_setting_gsm_get_network_type ()" link="NMSettingGsm.html#nm-setting-gsm-get-network-type"/>
- <keyword type="function" name="nm_setting_gsm_get_allowed_bands ()" link="NMSettingGsm.html#nm-setting-gsm-get-allowed-bands"/>
- <keyword type="function" name="nm_setting_gsm_get_pin ()" link="NMSettingGsm.html#nm-setting-gsm-get-pin"/>
- <keyword type="function" name="nm_setting_gsm_get_home_only ()" link="NMSettingGsm.html#nm-setting-gsm-get-home-only"/>
- <keyword type="function" name="nm_setting_gsm_get_pin_flags ()" link="NMSettingGsm.html#nm-setting-gsm-get-pin-flags"/>
- <keyword type="function" name="nm_setting_gsm_get_password_flags ()" link="NMSettingGsm.html#nm-setting-gsm-get-password-flags"/>
+ <keyword type="struct" name="NMSettingCdma" link="NMSettingCdma.html#NMSettingCdma-struct"/>
+ <keyword type="struct" name="NMSettingCdmaClass" link="NMSettingCdma.html#NMSettingCdmaClass"/>
+ <keyword type="function" name="nm_setting_cdma_new ()" link="NMSettingCdma.html#nm-setting-cdma-new"/>
+ <keyword type="function" name="nm_setting_cdma_get_number ()" link="NMSettingCdma.html#nm-setting-cdma-get-number"/>
+ <keyword type="function" name="nm_setting_cdma_get_username ()" link="NMSettingCdma.html#nm-setting-cdma-get-username"/>
+ <keyword type="function" name="nm_setting_cdma_get_password ()" link="NMSettingCdma.html#nm-setting-cdma-get-password"/>
+ <keyword type="function" name="nm_setting_cdma_get_password_flags ()" link="NMSettingCdma.html#nm-setting-cdma-get-password-flags"/>
+ <keyword type="property" name="The &quot;number&quot; property" link="NMSettingCdma.html#NMSettingCdma--number"/>
+ <keyword type="property" name="The &quot;password&quot; property" link="NMSettingCdma.html#NMSettingCdma--password"/>
+ <keyword type="property" name="The &quot;password-flags&quot; property" link="NMSettingCdma.html#NMSettingCdma--password-flags"/>
+ <keyword type="property" name="The &quot;username&quot; property" link="NMSettingCdma.html#NMSettingCdma--username"/>
<keyword type="macro" name="NM_SETTING_GSM_SETTING_NAME" link="NMSettingGsm.html#NM-SETTING-GSM-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingGsmError" link="NMSettingGsm.html#NMSettingGsmError"/>
+ <keyword type="enum" name="enum NMSettingGsmError" link="NMSettingGsm.html#NMSettingGsmError-enum"/>
<keyword type="macro" name="NM_SETTING_GSM_ERROR" link="NMSettingGsm.html#NM-SETTING-GSM-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_gsm_error_quark ()" link="NMSettingGsm.html#nm-setting-gsm-error-quark"/>
<keyword type="macro" name="NM_SETTING_GSM_NUMBER" link="NMSettingGsm.html#NM-SETTING-GSM-NUMBER:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_USERNAME" link="NMSettingGsm.html#NM-SETTING-GSM-USERNAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_PASSWORD" link="NMSettingGsm.html#NM-SETTING-GSM-PASSWORD:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_PASSWORD_FLAGS" link="NMSettingGsm.html#NM-SETTING-GSM-PASSWORD-FLAGS:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_APN" link="NMSettingGsm.html#NM-SETTING-GSM-APN:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_NETWORK_ID" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-ID:CAPS"/>
- <keyword type="macro" name="NM_SETTING_GSM_NETWORK_TYPE" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE:CAPS"/>
- <keyword type="macro" name="NM_SETTING_GSM_ALLOWED_BANDS" link="NMSettingGsm.html#NM-SETTING-GSM-ALLOWED-BANDS:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_PIN" link="NMSettingGsm.html#NM-SETTING-GSM-PIN:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_PIN_FLAGS" link="NMSettingGsm.html#NM-SETTING-GSM-PIN-FLAGS:CAPS"/>
<keyword type="macro" name="NM_SETTING_GSM_HOME_ONLY" link="NMSettingGsm.html#NM-SETTING-GSM-HOME-ONLY:CAPS"/>
- <keyword type="enum" name="enum NMSettingGsmNetworkType" link="NMSettingGsm.html#NMSettingGsmNetworkType"/>
- <keyword type="enum" name="enum NMSettingGsmNetworkBand" link="NMSettingGsm.html#NMSettingGsmNetworkBand"/>
- <keyword type="property" name="The “allowed-bands†property" link="NMSettingGsm.html#NMSettingGsm--allowed-bands"/>
- <keyword type="property" name="The “apn†property" link="NMSettingGsm.html#NMSettingGsm--apn"/>
- <keyword type="property" name="The “home-only†property" link="NMSettingGsm.html#NMSettingGsm--home-only"/>
- <keyword type="property" name="The “network-id†property" link="NMSettingGsm.html#NMSettingGsm--network-id"/>
- <keyword type="property" name="The “network-type†property" link="NMSettingGsm.html#NMSettingGsm--network-type"/>
- <keyword type="property" name="The “number†property" link="NMSettingGsm.html#NMSettingGsm--number"/>
- <keyword type="property" name="The “password†property" link="NMSettingGsm.html#NMSettingGsm--password"/>
- <keyword type="property" name="The “password-flags†property" link="NMSettingGsm.html#NMSettingGsm--password-flags"/>
- <keyword type="property" name="The “pin†property" link="NMSettingGsm.html#NMSettingGsm--pin"/>
- <keyword type="property" name="The “pin-flags†property" link="NMSettingGsm.html#NMSettingGsm--pin-flags"/>
- <keyword type="property" name="The “username†property" link="NMSettingGsm.html#NMSettingGsm--username"/>
- <keyword type="function" name="nm_setting_wimax_error_quark ()" link="NMSettingWimax.html#nm-setting-wimax-error-quark"/>
- <keyword type="function" name="nm_setting_wimax_new ()" link="NMSettingWimax.html#nm-setting-wimax-new"/>
- <keyword type="function" name="nm_setting_wimax_get_network_name ()" link="NMSettingWimax.html#nm-setting-wimax-get-network-name"/>
- <keyword type="function" name="nm_setting_wimax_get_mac_address ()" link="NMSettingWimax.html#nm-setting-wimax-get-mac-address"/>
+ <keyword type="macro" name="NM_SETTING_GSM_ALLOWED_BANDS" link="NMSettingGsm.html#NM-SETTING-GSM-ALLOWED-BANDS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_GSM_NETWORK_TYPE" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE:CAPS"/>
+ <keyword type="enum" name="enum NMSettingGsmNetworkType" link="NMSettingGsm.html#NMSettingGsmNetworkType-enum"/>
+ <keyword type="enum" name="enum NMSettingGsmNetworkBand" link="NMSettingGsm.html#NMSettingGsmNetworkBand-enum"/>
+ <keyword type="macro" name="NM_SETTING_GSM_BANDS_MAX" link="NMSettingGsm.html#NM-SETTING-GSM-BANDS-MAX:CAPS" deprecated="0.9.10: No longer used."/>
+ <keyword type="struct" name="NMSettingGsm" link="NMSettingGsm.html#NMSettingGsm-struct"/>
+ <keyword type="struct" name="NMSettingGsmClass" link="NMSettingGsm.html#NMSettingGsmClass"/>
+ <keyword type="function" name="nm_setting_gsm_new ()" link="NMSettingGsm.html#nm-setting-gsm-new"/>
+ <keyword type="function" name="nm_setting_gsm_get_number ()" link="NMSettingGsm.html#nm-setting-gsm-get-number"/>
+ <keyword type="function" name="nm_setting_gsm_get_username ()" link="NMSettingGsm.html#nm-setting-gsm-get-username"/>
+ <keyword type="function" name="nm_setting_gsm_get_password ()" link="NMSettingGsm.html#nm-setting-gsm-get-password"/>
+ <keyword type="function" name="nm_setting_gsm_get_apn ()" link="NMSettingGsm.html#nm-setting-gsm-get-apn"/>
+ <keyword type="function" name="nm_setting_gsm_get_network_id ()" link="NMSettingGsm.html#nm-setting-gsm-get-network-id"/>
+ <keyword type="function" name="nm_setting_gsm_get_pin ()" link="NMSettingGsm.html#nm-setting-gsm-get-pin"/>
+ <keyword type="function" name="nm_setting_gsm_get_home_only ()" link="NMSettingGsm.html#nm-setting-gsm-get-home-only"/>
+ <keyword type="function" name="nm_setting_gsm_get_pin_flags ()" link="NMSettingGsm.html#nm-setting-gsm-get-pin-flags"/>
+ <keyword type="function" name="nm_setting_gsm_get_password_flags ()" link="NMSettingGsm.html#nm-setting-gsm-get-password-flags"/>
+ <keyword type="function" name="nm_setting_gsm_get_network_type ()" link="NMSettingGsm.html#nm-setting-gsm-get-network-type" deprecated="0.9.10: No longer used. Network type setting should be done talking to ModemManager directly."/>
+ <keyword type="function" name="nm_setting_gsm_get_allowed_bands ()" link="NMSettingGsm.html#nm-setting-gsm-get-allowed-bands" deprecated="0.9.10: No longer used. Bands setting should be done talking to ModemManager directly."/>
+ <keyword type="property" name="The &quot;allowed-bands&quot; property" link="NMSettingGsm.html#NMSettingGsm--allowed-bands"/>
+ <keyword type="property" name="The &quot;apn&quot; property" link="NMSettingGsm.html#NMSettingGsm--apn"/>
+ <keyword type="property" name="The &quot;home-only&quot; property" link="NMSettingGsm.html#NMSettingGsm--home-only"/>
+ <keyword type="property" name="The &quot;network-id&quot; property" link="NMSettingGsm.html#NMSettingGsm--network-id"/>
+ <keyword type="property" name="The &quot;network-type&quot; property" link="NMSettingGsm.html#NMSettingGsm--network-type"/>
+ <keyword type="property" name="The &quot;number&quot; property" link="NMSettingGsm.html#NMSettingGsm--number"/>
+ <keyword type="property" name="The &quot;password&quot; property" link="NMSettingGsm.html#NMSettingGsm--password"/>
+ <keyword type="property" name="The &quot;password-flags&quot; property" link="NMSettingGsm.html#NMSettingGsm--password-flags"/>
+ <keyword type="property" name="The &quot;pin&quot; property" link="NMSettingGsm.html#NMSettingGsm--pin"/>
+ <keyword type="property" name="The &quot;pin-flags&quot; property" link="NMSettingGsm.html#NMSettingGsm--pin-flags"/>
+ <keyword type="property" name="The &quot;username&quot; property" link="NMSettingGsm.html#NMSettingGsm--username"/>
<keyword type="macro" name="NM_SETTING_WIMAX_SETTING_NAME" link="NMSettingWimax.html#NM-SETTING-WIMAX-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingWimaxError" link="NMSettingWimax.html#NMSettingWimaxError"/>
+ <keyword type="enum" name="enum NMSettingWimaxError" link="NMSettingWimax.html#NMSettingWimaxError-enum"/>
<keyword type="macro" name="NM_SETTING_WIMAX_ERROR" link="NMSettingWimax.html#NM-SETTING-WIMAX-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_wimax_error_quark ()" link="NMSettingWimax.html#nm-setting-wimax-error-quark"/>
<keyword type="macro" name="NM_SETTING_WIMAX_NETWORK_NAME" link="NMSettingWimax.html#NM-SETTING-WIMAX-NETWORK-NAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_WIMAX_MAC_ADDRESS" link="NMSettingWimax.html#NM-SETTING-WIMAX-MAC-ADDRESS:CAPS"/>
- <keyword type="property" name="The “mac-address†property" link="NMSettingWimax.html#NMSettingWimax--mac-address"/>
- <keyword type="property" name="The “network-name†property" link="NMSettingWimax.html#NMSettingWimax--network-name"/>
- <keyword type="function" name="nm_setting_bond_error_quark ()" link="NMSettingBond.html#nm-setting-bond-error-quark"/>
- <keyword type="function" name="nm_setting_bond_new ()" link="NMSettingBond.html#nm-setting-bond-new"/>
- <keyword type="function" name="nm_setting_bond_get_interface_name ()" link="NMSettingBond.html#nm-setting-bond-get-interface-name"/>
- <keyword type="function" name="nm_setting_bond_get_num_options ()" link="NMSettingBond.html#nm-setting-bond-get-num-options"/>
- <keyword type="function" name="nm_setting_bond_get_option ()" link="NMSettingBond.html#nm-setting-bond-get-option"/>
- <keyword type="function" name="nm_setting_bond_get_option_by_name ()" link="NMSettingBond.html#nm-setting-bond-get-option-by-name"/>
- <keyword type="function" name="nm_setting_bond_add_option ()" link="NMSettingBond.html#nm-setting-bond-add-option"/>
- <keyword type="function" name="nm_setting_bond_remove_option ()" link="NMSettingBond.html#nm-setting-bond-remove-option"/>
- <keyword type="function" name="nm_setting_bond_get_valid_options ()" link="NMSettingBond.html#nm-setting-bond-get-valid-options"/>
- <keyword type="function" name="nm_setting_bond_get_option_default ()" link="NMSettingBond.html#nm-setting-bond-get-option-default"/>
+ <keyword type="struct" name="NMSettingWimax" link="NMSettingWimax.html#NMSettingWimax-struct"/>
+ <keyword type="struct" name="NMSettingWimaxClass" link="NMSettingWimax.html#NMSettingWimaxClass"/>
+ <keyword type="function" name="nm_setting_wimax_new ()" link="NMSettingWimax.html#nm-setting-wimax-new"/>
+ <keyword type="function" name="nm_setting_wimax_get_network_name ()" link="NMSettingWimax.html#nm-setting-wimax-get-network-name"/>
+ <keyword type="function" name="nm_setting_wimax_get_mac_address ()" link="NMSettingWimax.html#nm-setting-wimax-get-mac-address"/>
+ <keyword type="property" name="The &quot;mac-address&quot; property" link="NMSettingWimax.html#NMSettingWimax--mac-address"/>
+ <keyword type="property" name="The &quot;network-name&quot; property" link="NMSettingWimax.html#NMSettingWimax--network-name"/>
<keyword type="macro" name="NM_SETTING_BOND_SETTING_NAME" link="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingBondError" link="NMSettingBond.html#NMSettingBondError"/>
+ <keyword type="enum" name="enum NMSettingBondError" link="NMSettingBond.html#NMSettingBondError-enum"/>
<keyword type="macro" name="NM_SETTING_BOND_ERROR" link="NMSettingBond.html#NM-SETTING-BOND-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_bond_error_quark ()" link="NMSettingBond.html#nm-setting-bond-error-quark"/>
<keyword type="macro" name="NM_SETTING_BOND_INTERFACE_NAME" link="NMSettingBond.html#NM-SETTING-BOND-INTERFACE-NAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_BOND_OPTIONS" link="NMSettingBond.html#NM-SETTING-BOND-OPTIONS:CAPS"/>
<keyword type="macro" name="NM_SETTING_BOND_OPTION_MODE" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-MODE:CAPS"/>
@@ -454,117 +504,180 @@
<keyword type="macro" name="NM_SETTING_BOND_OPTION_UPDELAY" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-UPDELAY:CAPS"/>
<keyword type="macro" name="NM_SETTING_BOND_OPTION_ARP_INTERVAL" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS"/>
<keyword type="macro" name="NM_SETTING_BOND_OPTION_ARP_IP_TARGET" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS"/>
- <keyword type="property" name="The “interface-name†property" link="NMSettingBond.html#NMSettingBond--interface-name"/>
- <keyword type="property" name="The “options†property" link="NMSettingBond.html#NMSettingBond--options"/>
- <keyword type="function" name="nm_setting_bridge_error_quark ()" link="NMSettingBridge.html#nm-setting-bridge-error-quark" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_new ()" link="NMSettingBridge.html#nm-setting-bridge-new" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_get_interface_name ()" link="NMSettingBridge.html#nm-setting-bridge-get-interface-name" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_get_stp ()" link="NMSettingBridge.html#nm-setting-bridge-get-stp" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_get_priority ()" link="NMSettingBridge.html#nm-setting-bridge-get-priority" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_get_forward_delay ()" link="NMSettingBridge.html#nm-setting-bridge-get-forward-delay" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_get_hello_time ()" link="NMSettingBridge.html#nm-setting-bridge-get-hello-time" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_get_max_age ()" link="NMSettingBridge.html#nm-setting-bridge-get-max-age" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_get_ageing_time ()" link="NMSettingBridge.html#nm-setting-bridge-get-ageing-time" since="0.9.8"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_ARP_VALIDATE" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_PRIMARY" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_PRIMARY_RESELECT" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_FAIL_OVER_MAC" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_USE_CARRIER" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_AD_SELECT" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-AD-SELECT:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_RESEND_IGMP" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS"/>
+ <keyword type="struct" name="NMSettingBond" link="NMSettingBond.html#NMSettingBond-struct"/>
+ <keyword type="struct" name="NMSettingBondClass" link="NMSettingBond.html#NMSettingBondClass"/>
+ <keyword type="function" name="nm_setting_bond_new ()" link="NMSettingBond.html#nm-setting-bond-new"/>
+ <keyword type="function" name="nm_setting_bond_get_interface_name ()" link="NMSettingBond.html#nm-setting-bond-get-interface-name"/>
+ <keyword type="function" name="nm_setting_bond_get_num_options ()" link="NMSettingBond.html#nm-setting-bond-get-num-options"/>
+ <keyword type="function" name="nm_setting_bond_get_option ()" link="NMSettingBond.html#nm-setting-bond-get-option"/>
+ <keyword type="function" name="nm_setting_bond_get_option_by_name ()" link="NMSettingBond.html#nm-setting-bond-get-option-by-name"/>
+ <keyword type="function" name="nm_setting_bond_add_option ()" link="NMSettingBond.html#nm-setting-bond-add-option"/>
+ <keyword type="function" name="nm_setting_bond_remove_option ()" link="NMSettingBond.html#nm-setting-bond-remove-option"/>
+ <keyword type="function" name="nm_setting_bond_validate_option ()" link="NMSettingBond.html#nm-setting-bond-validate-option" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_bond_get_valid_options ()" link="NMSettingBond.html#nm-setting-bond-get-valid-options"/>
+ <keyword type="function" name="nm_setting_bond_get_option_default ()" link="NMSettingBond.html#nm-setting-bond-get-option-default"/>
+ <keyword type="property" name="The &quot;interface-name&quot; property" link="NMSettingBond.html#NMSettingBond--interface-name"/>
+ <keyword type="property" name="The &quot;options&quot; property" link="NMSettingBond.html#NMSettingBond--options"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_SETTING_NAME" link="NMSettingBridge.html#NM-SETTING-BRIDGE-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingBridgeError" link="NMSettingBridge.html#NMSettingBridgeError" since="0.9.8"/>
+ <keyword type="enum" name="enum NMSettingBridgeError" link="NMSettingBridge.html#NMSettingBridgeError-enum"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_ERROR" link="NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_bridge_error_quark ()" link="NMSettingBridge.html#nm-setting-bridge-error-quark" since="0.9.8"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_INTERFACE_NAME" link="NMSettingBridge.html#NM-SETTING-BRIDGE-INTERFACE-NAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BRIDGE_MAC_ADDRESS" link="NMSettingBridge.html#NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_STP" link="NMSettingBridge.html#NM-SETTING-BRIDGE-STP:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_PRIORITY" link="NMSettingBridge.html#NM-SETTING-BRIDGE-PRIORITY:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_FORWARD_DELAY" link="NMSettingBridge.html#NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_HELLO_TIME" link="NMSettingBridge.html#NM-SETTING-BRIDGE-HELLO-TIME:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_MAX_AGE" link="NMSettingBridge.html#NM-SETTING-BRIDGE-MAX-AGE:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_AGEING_TIME" link="NMSettingBridge.html#NM-SETTING-BRIDGE-AGEING-TIME:CAPS"/>
- <keyword type="property" name="The “ageing-time†property" link="NMSettingBridge.html#NMSettingBridge--ageing-time"/>
- <keyword type="property" name="The “forward-delay†property" link="NMSettingBridge.html#NMSettingBridge--forward-delay"/>
- <keyword type="property" name="The “hello-time†property" link="NMSettingBridge.html#NMSettingBridge--hello-time"/>
- <keyword type="property" name="The “interface-name†property" link="NMSettingBridge.html#NMSettingBridge--interface-name"/>
- <keyword type="property" name="The “max-age†property" link="NMSettingBridge.html#NMSettingBridge--max-age"/>
- <keyword type="property" name="The “priority†property" link="NMSettingBridge.html#NMSettingBridge--priority"/>
- <keyword type="property" name="The “stp†property" link="NMSettingBridge.html#NMSettingBridge--stp"/>
- <keyword type="function" name="nm_setting_bridge_port_error_quark ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-error-quark" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_port_new ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-new" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_port_get_priority ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-priority" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_port_get_path_cost ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost" since="0.9.8"/>
- <keyword type="function" name="nm_setting_bridge_port_get_hairpin_mode ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode" since="0.9.8"/>
+ <keyword type="struct" name="NMSettingBridge" link="NMSettingBridge.html#NMSettingBridge-struct"/>
+ <keyword type="struct" name="NMSettingBridgeClass" link="NMSettingBridge.html#NMSettingBridgeClass"/>
+ <keyword type="function" name="nm_setting_bridge_new ()" link="NMSettingBridge.html#nm-setting-bridge-new" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_get_interface_name ()" link="NMSettingBridge.html#nm-setting-bridge-get-interface-name" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_get_mac_address ()" link="NMSettingBridge.html#nm-setting-bridge-get-mac-address" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_bridge_get_stp ()" link="NMSettingBridge.html#nm-setting-bridge-get-stp" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_get_priority ()" link="NMSettingBridge.html#nm-setting-bridge-get-priority" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_get_forward_delay ()" link="NMSettingBridge.html#nm-setting-bridge-get-forward-delay" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_get_hello_time ()" link="NMSettingBridge.html#nm-setting-bridge-get-hello-time" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_get_max_age ()" link="NMSettingBridge.html#nm-setting-bridge-get-max-age" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_get_ageing_time ()" link="NMSettingBridge.html#nm-setting-bridge-get-ageing-time" since="0.9.8"/>
+ <keyword type="property" name="The &quot;ageing-time&quot; property" link="NMSettingBridge.html#NMSettingBridge--ageing-time"/>
+ <keyword type="property" name="The &quot;forward-delay&quot; property" link="NMSettingBridge.html#NMSettingBridge--forward-delay"/>
+ <keyword type="property" name="The &quot;hello-time&quot; property" link="NMSettingBridge.html#NMSettingBridge--hello-time"/>
+ <keyword type="property" name="The &quot;interface-name&quot; property" link="NMSettingBridge.html#NMSettingBridge--interface-name"/>
+ <keyword type="property" name="The &quot;mac-address&quot; property" link="NMSettingBridge.html#NMSettingBridge--mac-address"/>
+ <keyword type="property" name="The &quot;max-age&quot; property" link="NMSettingBridge.html#NMSettingBridge--max-age"/>
+ <keyword type="property" name="The &quot;priority&quot; property" link="NMSettingBridge.html#NMSettingBridge--priority"/>
+ <keyword type="property" name="The &quot;stp&quot; property" link="NMSettingBridge.html#NMSettingBridge--stp"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_PORT_SETTING_NAME" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingBridgePortError" link="NMSettingBridgePort.html#NMSettingBridgePortError" since="0.9.8"/>
+ <keyword type="enum" name="enum NMSettingBridgePortError" link="NMSettingBridgePort.html#NMSettingBridgePortError-enum"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_PORT_ERROR" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_bridge_port_error_quark ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-error-quark" since="0.9.8"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_PORT_PRIORITY" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_PORT_PATH_COST" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS"/>
<keyword type="macro" name="NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS"/>
- <keyword type="property" name="The “hairpin-mode†property" link="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode"/>
- <keyword type="property" name="The “path-cost†property" link="NMSettingBridgePort.html#NMSettingBridgePort--path-cost"/>
- <keyword type="property" name="The “priority†property" link="NMSettingBridgePort.html#NMSettingBridgePort--priority"/>
- <keyword type="function" name="nm_setting_infiniband_error_quark ()" link="NMSettingInfiniband.html#nm-setting-infiniband-error-quark"/>
- <keyword type="function" name="nm_setting_infiniband_new ()" link="NMSettingInfiniband.html#nm-setting-infiniband-new"/>
- <keyword type="function" name="nm_setting_infiniband_get_mac_address ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address"/>
- <keyword type="function" name="nm_setting_infiniband_get_mtu ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-mtu"/>
- <keyword type="function" name="nm_setting_infiniband_get_transport_mode ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode"/>
+ <keyword type="struct" name="NMSettingBridgePort" link="NMSettingBridgePort.html#NMSettingBridgePort-struct"/>
+ <keyword type="struct" name="NMSettingBridgePortClass" link="NMSettingBridgePort.html#NMSettingBridgePortClass"/>
+ <keyword type="function" name="nm_setting_bridge_port_new ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-new" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_port_get_priority ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-priority" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_port_get_path_cost ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_bridge_port_get_hairpin_mode ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode" since="0.9.8"/>
+ <keyword type="property" name="The &quot;hairpin-mode&quot; property" link="NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode"/>
+ <keyword type="property" name="The &quot;path-cost&quot; property" link="NMSettingBridgePort.html#NMSettingBridgePort--path-cost"/>
+ <keyword type="property" name="The &quot;priority&quot; property" link="NMSettingBridgePort.html#NMSettingBridgePort--priority"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_SETTING_NAME" link="NMSettingTeam.html#NM-SETTING-TEAM-SETTING-NAME:CAPS"/>
+ <keyword type="enum" name="enum NMSettingTeamError" link="NMSettingTeam.html#NMSettingTeamError-enum"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_ERROR" link="NMSettingTeam.html#NM-SETTING-TEAM-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_team_error_quark ()" link="NMSettingTeam.html#nm-setting-team-error-quark" since="0.9.10"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_INTERFACE_NAME" link="NMSettingTeam.html#NM-SETTING-TEAM-INTERFACE-NAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_CONFIG" link="NMSettingTeam.html#NM-SETTING-TEAM-CONFIG:CAPS"/>
+ <keyword type="struct" name="NMSettingTeam" link="NMSettingTeam.html#NMSettingTeam-struct"/>
+ <keyword type="struct" name="NMSettingTeamClass" link="NMSettingTeam.html#NMSettingTeamClass"/>
+ <keyword type="function" name="nm_setting_team_new ()" link="NMSettingTeam.html#nm-setting-team-new" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_team_get_interface_name ()" link="NMSettingTeam.html#nm-setting-team-get-interface-name" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_team_get_config ()" link="NMSettingTeam.html#nm-setting-team-get-config" since="0.9.10"/>
+ <keyword type="property" name="The &quot;config&quot; property" link="NMSettingTeam.html#NMSettingTeam--config"/>
+ <keyword type="property" name="The &quot;interface-name&quot; property" link="NMSettingTeam.html#NMSettingTeam--interface-name"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_PORT_SETTING_NAME" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS"/>
+ <keyword type="enum" name="enum NMSettingTeamPortError" link="NMSettingTeamPort.html#NMSettingTeamPortError-enum"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_PORT_ERROR" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_team_port_error_quark ()" link="NMSettingTeamPort.html#nm-setting-team-port-error-quark" since="0.9.10"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_PORT_CONFIG" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-CONFIG:CAPS"/>
+ <keyword type="struct" name="NMSettingTeamPort" link="NMSettingTeamPort.html#NMSettingTeamPort-struct"/>
+ <keyword type="struct" name="NMSettingTeamPortClass" link="NMSettingTeamPort.html#NMSettingTeamPortClass"/>
+ <keyword type="function" name="nm_setting_team_port_new ()" link="NMSettingTeamPort.html#nm-setting-team-port-new" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_team_port_get_config ()" link="NMSettingTeamPort.html#nm-setting-team-port-get-config" since="0.9.10"/>
+ <keyword type="property" name="The &quot;config&quot; property" link="NMSettingTeamPort.html#NMSettingTeamPort--config"/>
+ <keyword type="macro" name="NM_SETTING_GENERIC_SETTING_NAME" link="NMSettingGeneric.html#NM-SETTING-GENERIC-SETTING-NAME:CAPS"/>
+ <keyword type="enum" name="enum NMSettingGenericError" link="NMSettingGeneric.html#NMSettingGenericError-enum"/>
+ <keyword type="macro" name="NM_SETTING_GENERIC_ERROR" link="NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_generic_error_quark ()" link="NMSettingGeneric.html#nm-setting-generic-error-quark" since="0.9.10"/>
+ <keyword type="struct" name="NMSettingGeneric" link="NMSettingGeneric.html#NMSettingGeneric-struct"/>
+ <keyword type="struct" name="NMSettingGenericClass" link="NMSettingGeneric.html#NMSettingGenericClass"/>
+ <keyword type="function" name="nm_setting_generic_new ()" link="NMSettingGeneric.html#nm-setting-generic-new" since="0.9.10"/>
<keyword type="macro" name="NM_SETTING_INFINIBAND_SETTING_NAME" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingInfinibandError" link="NMSettingInfiniband.html#NMSettingInfinibandError"/>
+ <keyword type="enum" name="enum NMSettingInfinibandError" link="NMSettingInfiniband.html#NMSettingInfinibandError-enum"/>
<keyword type="macro" name="NM_SETTING_INFINIBAND_ERROR" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_infiniband_error_quark ()" link="NMSettingInfiniband.html#nm-setting-infiniband-error-quark"/>
<keyword type="macro" name="NM_SETTING_INFINIBAND_MAC_ADDRESS" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS"/>
<keyword type="macro" name="NM_SETTING_INFINIBAND_MTU" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MTU:CAPS"/>
<keyword type="macro" name="NM_SETTING_INFINIBAND_TRANSPORT_MODE" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS"/>
- <keyword type="property" name="The “mac-address†property" link="NMSettingInfiniband.html#NMSettingInfiniband--mac-address"/>
- <keyword type="property" name="The “mtu†property" link="NMSettingInfiniband.html#NMSettingInfiniband--mtu"/>
- <keyword type="property" name="The “transport-mode†property" link="NMSettingInfiniband.html#NMSettingInfiniband--transport-mode"/>
- <keyword type="function" name="nm_setting_vlan_error_quark ()" link="NMSettingVlan.html#nm-setting-vlan-error-quark"/>
- <keyword type="function" name="nm_setting_vlan_new ()" link="NMSettingVlan.html#nm-setting-vlan-new"/>
- <keyword type="function" name="nm_setting_vlan_get_interface_name ()" link="NMSettingVlan.html#nm-setting-vlan-get-interface-name"/>
- <keyword type="function" name="nm_setting_vlan_get_parent ()" link="NMSettingVlan.html#nm-setting-vlan-get-parent"/>
- <keyword type="function" name="nm_setting_vlan_get_id ()" link="NMSettingVlan.html#nm-setting-vlan-get-id"/>
- <keyword type="function" name="nm_setting_vlan_get_flags ()" link="NMSettingVlan.html#nm-setting-vlan-get-flags"/>
- <keyword type="function" name="nm_setting_vlan_get_num_priorities ()" link="NMSettingVlan.html#nm-setting-vlan-get-num-priorities"/>
- <keyword type="function" name="nm_setting_vlan_get_priority ()" link="NMSettingVlan.html#nm-setting-vlan-get-priority"/>
- <keyword type="function" name="nm_setting_vlan_add_priority ()" link="NMSettingVlan.html#nm-setting-vlan-add-priority"/>
- <keyword type="function" name="nm_setting_vlan_remove_priority ()" link="NMSettingVlan.html#nm-setting-vlan-remove-priority"/>
- <keyword type="function" name="nm_setting_vlan_clear_priorities ()" link="NMSettingVlan.html#nm-setting-vlan-clear-priorities"/>
- <keyword type="function" name="nm_setting_vlan_add_priority_str ()" link="NMSettingVlan.html#nm-setting-vlan-add-priority-str"/>
+ <keyword type="macro" name="NM_SETTING_INFINIBAND_P_KEY" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-P-KEY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_INFINIBAND_PARENT" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-PARENT:CAPS"/>
+ <keyword type="struct" name="NMSettingInfiniband" link="NMSettingInfiniband.html#NMSettingInfiniband-struct"/>
+ <keyword type="struct" name="NMSettingInfinibandClass" link="NMSettingInfiniband.html#NMSettingInfinibandClass"/>
+ <keyword type="function" name="nm_setting_infiniband_new ()" link="NMSettingInfiniband.html#nm-setting-infiniband-new"/>
+ <keyword type="function" name="nm_setting_infiniband_get_mac_address ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address"/>
+ <keyword type="function" name="nm_setting_infiniband_get_mtu ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-mtu"/>
+ <keyword type="function" name="nm_setting_infiniband_get_transport_mode ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode"/>
+ <keyword type="function" name="nm_setting_infiniband_get_p_key ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-p-key"/>
+ <keyword type="function" name="nm_setting_infiniband_get_parent ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-parent"/>
+ <keyword type="property" name="The &quot;mac-address&quot; property" link="NMSettingInfiniband.html#NMSettingInfiniband--mac-address"/>
+ <keyword type="property" name="The &quot;mtu&quot; property" link="NMSettingInfiniband.html#NMSettingInfiniband--mtu"/>
+ <keyword type="property" name="The &quot;p-key&quot; property" link="NMSettingInfiniband.html#NMSettingInfiniband--p-key"/>
+ <keyword type="property" name="The &quot;parent&quot; property" link="NMSettingInfiniband.html#NMSettingInfiniband--parent"/>
+ <keyword type="property" name="The &quot;transport-mode&quot; property" link="NMSettingInfiniband.html#NMSettingInfiniband--transport-mode"/>
<keyword type="macro" name="NM_SETTING_VLAN_SETTING_NAME" link="NMSettingVlan.html#NM-SETTING-VLAN-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingVlanError" link="NMSettingVlan.html#NMSettingVlanError"/>
+ <keyword type="enum" name="enum NMSettingVlanError" link="NMSettingVlan.html#NMSettingVlanError-enum"/>
<keyword type="macro" name="NM_SETTING_VLAN_ERROR" link="NMSettingVlan.html#NM-SETTING-VLAN-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_vlan_error_quark ()" link="NMSettingVlan.html#nm-setting-vlan-error-quark"/>
<keyword type="macro" name="NM_SETTING_VLAN_INTERFACE_NAME" link="NMSettingVlan.html#NM-SETTING-VLAN-INTERFACE-NAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_VLAN_PARENT" link="NMSettingVlan.html#NM-SETTING-VLAN-PARENT:CAPS"/>
<keyword type="macro" name="NM_SETTING_VLAN_ID" link="NMSettingVlan.html#NM-SETTING-VLAN-ID:CAPS"/>
<keyword type="macro" name="NM_SETTING_VLAN_FLAGS" link="NMSettingVlan.html#NM-SETTING-VLAN-FLAGS:CAPS"/>
<keyword type="macro" name="NM_SETTING_VLAN_INGRESS_PRIORITY_MAP" link="NMSettingVlan.html#NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS"/>
<keyword type="macro" name="NM_SETTING_VLAN_EGRESS_PRIORITY_MAP" link="NMSettingVlan.html#NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS"/>
- <keyword type="enum" name="enum NMVlanPriorityMap" link="NMSettingVlan.html#NMVlanPriorityMap"/>
- <keyword type="enum" name="enum NMVlanFlags" link="NMSettingVlan.html#NMVlanFlags"/>
- <keyword type="property" name="The “egress-priority-map†property" link="NMSettingVlan.html#NMSettingVlan--egress-priority-map"/>
- <keyword type="property" name="The “flags†property" link="NMSettingVlan.html#NMSettingVlan--flags"/>
- <keyword type="property" name="The “id†property" link="NMSettingVlan.html#NMSettingVlan--id"/>
- <keyword type="property" name="The “ingress-priority-map†property" link="NMSettingVlan.html#NMSettingVlan--ingress-priority-map"/>
- <keyword type="property" name="The “interface-name†property" link="NMSettingVlan.html#NMSettingVlan--interface-name"/>
- <keyword type="property" name="The “parent†property" link="NMSettingVlan.html#NMSettingVlan--parent"/>
- <keyword type="function" name="nm_setting_olpc_mesh_error_quark ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark"/>
- <keyword type="function" name="nm_setting_olpc_mesh_new ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new"/>
- <keyword type="function" name="nm_setting_olpc_mesh_get_ssid ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid"/>
- <keyword type="function" name="nm_setting_olpc_mesh_get_channel ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel"/>
- <keyword type="function" name="nm_setting_olpc_mesh_get_dhcp_anycast_address ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address"/>
+ <keyword type="struct" name="NMSettingVlan" link="NMSettingVlan.html#NMSettingVlan-struct"/>
+ <keyword type="struct" name="NMSettingVlanClass" link="NMSettingVlan.html#NMSettingVlanClass"/>
+ <keyword type="enum" name="enum NMVlanPriorityMap" link="NMSettingVlan.html#NMVlanPriorityMap-enum"/>
+ <keyword type="enum" name="enum NMVlanFlags" link="NMSettingVlan.html#NMVlanFlags-enum"/>
+ <keyword type="function" name="nm_setting_vlan_new ()" link="NMSettingVlan.html#nm-setting-vlan-new"/>
+ <keyword type="function" name="nm_setting_vlan_get_interface_name ()" link="NMSettingVlan.html#nm-setting-vlan-get-interface-name"/>
+ <keyword type="function" name="nm_setting_vlan_get_parent ()" link="NMSettingVlan.html#nm-setting-vlan-get-parent"/>
+ <keyword type="function" name="nm_setting_vlan_get_id ()" link="NMSettingVlan.html#nm-setting-vlan-get-id"/>
+ <keyword type="function" name="nm_setting_vlan_get_flags ()" link="NMSettingVlan.html#nm-setting-vlan-get-flags"/>
+ <keyword type="function" name="nm_setting_vlan_get_num_priorities ()" link="NMSettingVlan.html#nm-setting-vlan-get-num-priorities"/>
+ <keyword type="function" name="nm_setting_vlan_get_priority ()" link="NMSettingVlan.html#nm-setting-vlan-get-priority"/>
+ <keyword type="function" name="nm_setting_vlan_add_priority ()" link="NMSettingVlan.html#nm-setting-vlan-add-priority"/>
+ <keyword type="function" name="nm_setting_vlan_remove_priority ()" link="NMSettingVlan.html#nm-setting-vlan-remove-priority"/>
+ <keyword type="function" name="nm_setting_vlan_remove_priority_by_value ()" link="NMSettingVlan.html#nm-setting-vlan-remove-priority-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_vlan_remove_priority_str_by_value ()" link="NMSettingVlan.html#nm-setting-vlan-remove-priority-str-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_vlan_clear_priorities ()" link="NMSettingVlan.html#nm-setting-vlan-clear-priorities"/>
+ <keyword type="function" name="nm_setting_vlan_add_priority_str ()" link="NMSettingVlan.html#nm-setting-vlan-add-priority-str"/>
+ <keyword type="property" name="The &quot;egress-priority-map&quot; property" link="NMSettingVlan.html#NMSettingVlan--egress-priority-map"/>
+ <keyword type="property" name="The &quot;flags&quot; property" link="NMSettingVlan.html#NMSettingVlan--flags"/>
+ <keyword type="property" name="The &quot;id&quot; property" link="NMSettingVlan.html#NMSettingVlan--id"/>
+ <keyword type="property" name="The &quot;ingress-priority-map&quot; property" link="NMSettingVlan.html#NMSettingVlan--ingress-priority-map"/>
+ <keyword type="property" name="The &quot;interface-name&quot; property" link="NMSettingVlan.html#NMSettingVlan--interface-name"/>
+ <keyword type="property" name="The &quot;parent&quot; property" link="NMSettingVlan.html#NMSettingVlan--parent"/>
<keyword type="macro" name="NM_SETTING_OLPC_MESH_SETTING_NAME" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingOlpcMeshError" link="NMSettingOlpcMesh.html#NMSettingOlpcMeshError"/>
+ <keyword type="enum" name="enum NMSettingOlpcMeshError" link="NMSettingOlpcMesh.html#NMSettingOlpcMeshError-enum"/>
<keyword type="macro" name="NM_SETTING_OLPC_MESH_ERROR" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_olpc_mesh_error_quark ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-error-quark"/>
<keyword type="macro" name="NM_SETTING_OLPC_MESH_SSID" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SSID:CAPS"/>
<keyword type="macro" name="NM_SETTING_OLPC_MESH_CHANNEL" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-CHANNEL:CAPS"/>
<keyword type="macro" name="NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS"/>
- <keyword type="property" name="The “channel†property" link="NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel"/>
- <keyword type="property" name="The “dhcp-anycast-address†property" link="NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address"/>
- <keyword type="property" name="The “ssid†property" link="NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid"/>
- <keyword type="function" name="nm_setting_adsl_error_quark ()" link="NMSettingAdsl.html#nm-setting-adsl-error-quark"/>
- <keyword type="function" name="nm_setting_adsl_new ()" link="NMSettingAdsl.html#nm-setting-adsl-new"/>
- <keyword type="function" name="nm_setting_adsl_get_username ()" link="NMSettingAdsl.html#nm-setting-adsl-get-username"/>
- <keyword type="function" name="nm_setting_adsl_get_password ()" link="NMSettingAdsl.html#nm-setting-adsl-get-password"/>
- <keyword type="function" name="nm_setting_adsl_get_protocol ()" link="NMSettingAdsl.html#nm-setting-adsl-get-protocol"/>
- <keyword type="function" name="nm_setting_adsl_get_encapsulation ()" link="NMSettingAdsl.html#nm-setting-adsl-get-encapsulation"/>
- <keyword type="function" name="nm_setting_adsl_get_vpi ()" link="NMSettingAdsl.html#nm-setting-adsl-get-vpi"/>
- <keyword type="function" name="nm_setting_adsl_get_vci ()" link="NMSettingAdsl.html#nm-setting-adsl-get-vci"/>
- <keyword type="function" name="nm_setting_adsl_get_password_flags ()" link="NMSettingAdsl.html#nm-setting-adsl-get-password-flags"/>
+ <keyword type="struct" name="NMSettingOlpcMesh" link="NMSettingOlpcMesh.html#NMSettingOlpcMesh-struct"/>
+ <keyword type="struct" name="NMSettingOlpcMeshClass" link="NMSettingOlpcMesh.html#NMSettingOlpcMeshClass"/>
+ <keyword type="function" name="nm_setting_olpc_mesh_new ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new"/>
+ <keyword type="function" name="nm_setting_olpc_mesh_get_ssid ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid"/>
+ <keyword type="function" name="nm_setting_olpc_mesh_get_channel ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel"/>
+ <keyword type="function" name="nm_setting_olpc_mesh_get_dhcp_anycast_address ()" link="NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address"/>
+ <keyword type="property" name="The &quot;channel&quot; property" link="NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel"/>
+ <keyword type="property" name="The &quot;dhcp-anycast-address&quot; property" link="NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address"/>
+ <keyword type="property" name="The &quot;ssid&quot; property" link="NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid"/>
<keyword type="macro" name="NM_SETTING_ADSL_SETTING_NAME" link="NMSettingAdsl.html#NM-SETTING-ADSL-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingAdslError" link="NMSettingAdsl.html#NMSettingAdslError"/>
+ <keyword type="enum" name="enum NMSettingAdslError" link="NMSettingAdsl.html#NMSettingAdslError-enum"/>
<keyword type="macro" name="NM_SETTING_ADSL_ERROR" link="NMSettingAdsl.html#NM-SETTING-ADSL-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_adsl_error_quark ()" link="NMSettingAdsl.html#nm-setting-adsl-error-quark"/>
<keyword type="macro" name="NM_SETTING_ADSL_USERNAME" link="NMSettingAdsl.html#NM-SETTING-ADSL-USERNAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_ADSL_PASSWORD" link="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD:CAPS"/>
<keyword type="macro" name="NM_SETTING_ADSL_PASSWORD_FLAGS" link="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS"/>
@@ -577,84 +690,90 @@
<keyword type="macro" name="NM_SETTING_ADSL_PROTOCOL_IPOATM" link="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS"/>
<keyword type="macro" name="NM_SETTING_ADSL_ENCAPSULATION_VCMUX" link="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS"/>
<keyword type="macro" name="NM_SETTING_ADSL_ENCAPSULATION_LLC" link="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS"/>
- <keyword type="property" name="The “encapsulation†property" link="NMSettingAdsl.html#NMSettingAdsl--encapsulation"/>
- <keyword type="property" name="The “password†property" link="NMSettingAdsl.html#NMSettingAdsl--password"/>
- <keyword type="property" name="The “password-flags†property" link="NMSettingAdsl.html#NMSettingAdsl--password-flags"/>
- <keyword type="property" name="The “protocol†property" link="NMSettingAdsl.html#NMSettingAdsl--protocol"/>
- <keyword type="property" name="The “username†property" link="NMSettingAdsl.html#NMSettingAdsl--username"/>
- <keyword type="property" name="The “vci†property" link="NMSettingAdsl.html#NMSettingAdsl--vci"/>
- <keyword type="property" name="The “vpi†property" link="NMSettingAdsl.html#NMSettingAdsl--vpi"/>
- <keyword type="function" name="nm_setting_802_1x_error_quark ()" link="NMSetting8021x.html#nm-setting-802-1x-error-quark"/>
- <keyword type="function" name="nm_setting_802_1x_new ()" link="NMSetting8021x.html#nm-setting-802-1x-new"/>
- <keyword type="function" name="nm_setting_802_1x_get_num_eap_methods ()" link="NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods"/>
- <keyword type="function" name="nm_setting_802_1x_get_eap_method ()" link="NMSetting8021x.html#nm-setting-802-1x-get-eap-method"/>
- <keyword type="function" name="nm_setting_802_1x_add_eap_method ()" link="NMSetting8021x.html#nm-setting-802-1x-add-eap-method"/>
- <keyword type="function" name="nm_setting_802_1x_remove_eap_method ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method"/>
- <keyword type="function" name="nm_setting_802_1x_clear_eap_methods ()" link="NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods"/>
- <keyword type="function" name="nm_setting_802_1x_get_identity ()" link="NMSetting8021x.html#nm-setting-802-1x-get-identity"/>
- <keyword type="function" name="nm_setting_802_1x_get_anonymous_identity ()" link="NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity"/>
- <keyword type="function" name="nm_setting_802_1x_get_pac_file ()" link="NMSetting8021x.html#nm-setting-802-1x-get-pac-file"/>
- <keyword type="function" name="nm_setting_802_1x_get_system_ca_certs ()" link="NMSetting8021x.html#nm-setting-802-1x-get-system-ca-certs"/>
- <keyword type="function" name="nm_setting_802_1x_get_ca_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-path"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-path"/>
- <keyword type="function" name="nm_setting_802_1x_get_ca_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-scheme"/>
- <keyword type="function" name="nm_setting_802_1x_get_ca_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob"/>
- <keyword type="function" name="nm_setting_802_1x_get_ca_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path"/>
- <keyword type="function" name="nm_setting_802_1x_set_ca_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert"/>
- <keyword type="function" name="nm_setting_802_1x_get_subject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-subject-match"/>
- <keyword type="function" name="nm_setting_802_1x_get_num_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-get-num-altsubject-matches"/>
- <keyword type="function" name="nm_setting_802_1x_get_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match"/>
- <keyword type="function" name="nm_setting_802_1x_add_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match"/>
- <keyword type="function" name="nm_setting_802_1x_remove_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match"/>
- <keyword type="function" name="nm_setting_802_1x_clear_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches"/>
- <keyword type="function" name="nm_setting_802_1x_get_client_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme"/>
- <keyword type="function" name="nm_setting_802_1x_get_client_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob"/>
- <keyword type="function" name="nm_setting_802_1x_get_client_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path"/>
- <keyword type="function" name="nm_setting_802_1x_set_client_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-client-cert"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase1_peapver ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peapver"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase1_peaplabel ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peaplabel"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase1_fast_provisioning ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase1-fast-provisioning"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_auth ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-auth"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_autheap ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-autheap"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-scheme"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-blob"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-path"/>
- <keyword type="function" name="nm_setting_802_1x_set_phase2_ca_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_subject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-subject-match"/>
- <keyword type="function" name="nm_setting_802_1x_get_num_phase2_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-get-num-phase2-altsubject-matches"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match"/>
- <keyword type="function" name="nm_setting_802_1x_add_phase2_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match"/>
- <keyword type="function" name="nm_setting_802_1x_remove_phase2_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match"/>
- <keyword type="function" name="nm_setting_802_1x_clear_phase2_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_client_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_client_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_client_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-path"/>
- <keyword type="function" name="nm_setting_802_1x_set_phase2_client_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert"/>
- <keyword type="function" name="nm_setting_802_1x_get_password ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password"/>
- <keyword type="function" name="nm_setting_802_1x_get_password_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password-flags"/>
- <keyword type="function" name="nm_setting_802_1x_get_password_raw ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password-raw"/>
- <keyword type="function" name="nm_setting_802_1x_get_password_raw_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password-raw-flags"/>
- <keyword type="function" name="nm_setting_802_1x_get_pin ()" link="NMSetting8021x.html#nm-setting-802-1x-get-pin"/>
- <keyword type="function" name="nm_setting_802_1x_get_pin_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-pin-flags"/>
- <keyword type="function" name="nm_setting_802_1x_get_private_key_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-scheme"/>
- <keyword type="function" name="nm_setting_802_1x_get_private_key_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-blob"/>
- <keyword type="function" name="nm_setting_802_1x_get_private_key_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-path"/>
- <keyword type="function" name="nm_setting_802_1x_set_private_key ()" link="NMSetting8021x.html#nm-setting-802-1x-set-private-key"/>
- <keyword type="function" name="nm_setting_802_1x_get_private_key_password ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password"/>
- <keyword type="function" name="nm_setting_802_1x_get_private_key_password_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password-flags"/>
- <keyword type="function" name="nm_setting_802_1x_get_private_key_format ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-format"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-scheme"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-blob"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-path"/>
- <keyword type="function" name="nm_setting_802_1x_set_phase2_private_key ()" link="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_password ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_password_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password-flags"/>
- <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_format ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format"/>
- <keyword type="enum" name="enum NMSetting8021xCKFormat" link="NMSetting8021x.html#NMSetting8021xCKFormat"/>
- <keyword type="enum" name="enum NMSetting8021xCKScheme" link="NMSetting8021x.html#NMSetting8021xCKScheme"/>
+ <keyword type="struct" name="NMSettingAdsl" link="NMSettingAdsl.html#NMSettingAdsl-struct"/>
+ <keyword type="struct" name="NMSettingAdslClass" link="NMSettingAdsl.html#NMSettingAdslClass"/>
+ <keyword type="function" name="nm_setting_adsl_new ()" link="NMSettingAdsl.html#nm-setting-adsl-new"/>
+ <keyword type="function" name="nm_setting_adsl_get_username ()" link="NMSettingAdsl.html#nm-setting-adsl-get-username"/>
+ <keyword type="function" name="nm_setting_adsl_get_password ()" link="NMSettingAdsl.html#nm-setting-adsl-get-password"/>
+ <keyword type="function" name="nm_setting_adsl_get_protocol ()" link="NMSettingAdsl.html#nm-setting-adsl-get-protocol"/>
+ <keyword type="function" name="nm_setting_adsl_get_encapsulation ()" link="NMSettingAdsl.html#nm-setting-adsl-get-encapsulation"/>
+ <keyword type="function" name="nm_setting_adsl_get_vpi ()" link="NMSettingAdsl.html#nm-setting-adsl-get-vpi"/>
+ <keyword type="function" name="nm_setting_adsl_get_vci ()" link="NMSettingAdsl.html#nm-setting-adsl-get-vci"/>
+ <keyword type="function" name="nm_setting_adsl_get_password_flags ()" link="NMSettingAdsl.html#nm-setting-adsl-get-password-flags"/>
+ <keyword type="property" name="The &quot;encapsulation&quot; property" link="NMSettingAdsl.html#NMSettingAdsl--encapsulation"/>
+ <keyword type="property" name="The &quot;password&quot; property" link="NMSettingAdsl.html#NMSettingAdsl--password"/>
+ <keyword type="property" name="The &quot;password-flags&quot; property" link="NMSettingAdsl.html#NMSettingAdsl--password-flags"/>
+ <keyword type="property" name="The &quot;protocol&quot; property" link="NMSettingAdsl.html#NMSettingAdsl--protocol"/>
+ <keyword type="property" name="The &quot;username&quot; property" link="NMSettingAdsl.html#NMSettingAdsl--username"/>
+ <keyword type="property" name="The &quot;vci&quot; property" link="NMSettingAdsl.html#NMSettingAdsl--vci"/>
+ <keyword type="property" name="The &quot;vpi&quot; property" link="NMSettingAdsl.html#NMSettingAdsl--vpi"/>
+ <keyword type="macro" name="NM_SETTING_DCB_SETTING_NAME" link="NMSettingDcb.html#NM-SETTING-DCB-SETTING-NAME:CAPS"/>
+ <keyword type="enum" name="enum NMSettingDcbError" link="NMSettingDcb.html#NMSettingDcbError-enum"/>
+ <keyword type="macro" name="NM_SETTING_DCB_ERROR" link="NMSettingDcb.html#NM-SETTING-DCB-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_dcb_error_quark ()" link="NMSettingDcb.html#nm-setting-dcb-error-quark" since="0.9.10"/>
+ <keyword type="enum" name="enum NMSettingDcbFlags" link="NMSettingDcb.html#NMSettingDcbFlags-enum"/>
+ <keyword type="macro" name="NM_SETTING_DCB_FCOE_MODE_FABRIC" link="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS" since="0.9.10"/>
+ <keyword type="macro" name="NM_SETTING_DCB_FCOE_MODE_VN2VN" link="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS" since="0.9.10"/>
+ <keyword type="macro" name="NM_SETTING_DCB_APP_FCOE_FLAGS" link="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_APP_FCOE_PRIORITY" link="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_APP_FCOE_MODE" link="NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-MODE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_APP_ISCSI_FLAGS" link="NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_APP_ISCSI_PRIORITY" link="NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_APP_FIP_FLAGS" link="NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_APP_FIP_PRIORITY" link="NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_FLOW_CONTROL" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_GROUP_FLAGS" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_GROUP_ID" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_BANDWIDTH" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS" link="NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS"/>
+ <keyword type="struct" name="NMSettingDcb" link="NMSettingDcb.html#NMSettingDcb-struct"/>
+ <keyword type="struct" name="NMSettingDcbClass" link="NMSettingDcb.html#NMSettingDcbClass"/>
+ <keyword type="function" name="nm_setting_dcb_new ()" link="NMSettingDcb.html#nm-setting-dcb-new" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fcoe_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-flags" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fcoe_priority ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-priority" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fcoe_mode ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-mode" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_iscsi_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-flags" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_iscsi_priority ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-priority" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fip_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fip-flags" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fip_priority ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fip-priority" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_flow_control_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control-flags" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_flow_control ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_flow_control ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-flow-control" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_group_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-group-flags" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_group_id ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-group-id" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_group_id ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-group-id" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_group_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-group-bandwidth" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_group_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-group-bandwidth" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-bandwidth" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-bandwidth" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_strict_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-strict-bandwidth" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_strict_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-strict-bandwidth" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_traffic_class ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-traffic-class" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_traffic_class ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-traffic-class"/>
+ <keyword type="property" name="The &quot;app-fcoe-flags&quot; property" link="NMSettingDcb.html#NMSettingDcb--app-fcoe-flags"/>
+ <keyword type="property" name="The &quot;app-fcoe-mode&quot; property" link="NMSettingDcb.html#NMSettingDcb--app-fcoe-mode"/>
+ <keyword type="property" name="The &quot;app-fcoe-priority&quot; property" link="NMSettingDcb.html#NMSettingDcb--app-fcoe-priority"/>
+ <keyword type="property" name="The &quot;app-fip-flags&quot; property" link="NMSettingDcb.html#NMSettingDcb--app-fip-flags"/>
+ <keyword type="property" name="The &quot;app-fip-priority&quot; property" link="NMSettingDcb.html#NMSettingDcb--app-fip-priority"/>
+ <keyword type="property" name="The &quot;app-iscsi-flags&quot; property" link="NMSettingDcb.html#NMSettingDcb--app-iscsi-flags"/>
+ <keyword type="property" name="The &quot;app-iscsi-priority&quot; property" link="NMSettingDcb.html#NMSettingDcb--app-iscsi-priority"/>
+ <keyword type="property" name="The &quot;priority-bandwidth&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-bandwidth"/>
+ <keyword type="property" name="The &quot;priority-flow-control&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-flow-control"/>
+ <keyword type="property" name="The &quot;priority-flow-control-flags&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags"/>
+ <keyword type="property" name="The &quot;priority-group-bandwidth&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-group-bandwidth"/>
+ <keyword type="property" name="The &quot;priority-group-flags&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-group-flags"/>
+ <keyword type="property" name="The &quot;priority-group-id&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-group-id"/>
+ <keyword type="property" name="The &quot;priority-strict-bandwidth&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-strict-bandwidth"/>
+ <keyword type="property" name="The &quot;priority-traffic-class&quot; property" link="NMSettingDcb.html#NMSettingDcb--priority-traffic-class"/>
+ <keyword type="enum" name="enum NMSetting8021xCKFormat" link="NMSetting8021x.html#NMSetting8021xCKFormat-enum"/>
+ <keyword type="enum" name="enum NMSetting8021xCKScheme" link="NMSetting8021x.html#NMSetting8021xCKScheme-enum"/>
<keyword type="macro" name="NM_SETTING_802_1X_SETTING_NAME" link="NMSetting8021x.html#NM-SETTING-802-1X-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSetting8021xError" link="NMSetting8021x.html#NMSetting8021xError"/>
+ <keyword type="enum" name="enum NMSetting8021xError" link="NMSetting8021x.html#NMSetting8021xError-enum"/>
<keyword type="macro" name="NM_SETTING_802_1X_ERROR" link="NMSetting8021x.html#NM-SETTING-802-1X-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_802_1x_error_quark ()" link="NMSetting8021x.html#nm-setting-802-1x-error-quark"/>
<keyword type="macro" name="NM_SETTING_802_1X_EAP" link="NMSetting8021x.html#NM-SETTING-802-1X-EAP:CAPS"/>
<keyword type="macro" name="NM_SETTING_802_1X_IDENTITY" link="NMSetting8021x.html#NM-SETTING-802-1X-IDENTITY:CAPS"/>
<keyword type="macro" name="NM_SETTING_802_1X_ANONYMOUS_IDENTITY" link="NMSetting8021x.html#NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS"/>
@@ -687,95 +806,112 @@
<keyword type="macro" name="NM_SETTING_802_1X_PIN" link="NMSetting8021x.html#NM-SETTING-802-1X-PIN:CAPS"/>
<keyword type="macro" name="NM_SETTING_802_1X_PIN_FLAGS" link="NMSetting8021x.html#NM-SETTING-802-1X-PIN-FLAGS:CAPS"/>
<keyword type="macro" name="NM_SETTING_802_1X_SYSTEM_CA_CERTS" link="NMSetting8021x.html#NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS"/>
- <keyword type="property" name="The “altsubject-matches†property" link="NMSetting8021x.html#NMSetting8021x--altsubject-matches"/>
- <keyword type="property" name="The “anonymous-identity†property" link="NMSetting8021x.html#NMSetting8021x--anonymous-identity"/>
- <keyword type="property" name="The “ca-cert†property" link="NMSetting8021x.html#NMSetting8021x--ca-cert"/>
- <keyword type="property" name="The “ca-path†property" link="NMSetting8021x.html#NMSetting8021x--ca-path"/>
- <keyword type="property" name="The “client-cert†property" link="NMSetting8021x.html#NMSetting8021x--client-cert"/>
- <keyword type="property" name="The “eap†property" link="NMSetting8021x.html#NMSetting8021x--eap"/>
- <keyword type="property" name="The “identity†property" link="NMSetting8021x.html#NMSetting8021x--identity"/>
- <keyword type="property" name="The “pac-file†property" link="NMSetting8021x.html#NMSetting8021x--pac-file"/>
- <keyword type="property" name="The “password†property" link="NMSetting8021x.html#NMSetting8021x--password"/>
- <keyword type="property" name="The “password-flags†property" link="NMSetting8021x.html#NMSetting8021x--password-flags"/>
- <keyword type="property" name="The “password-raw†property" link="NMSetting8021x.html#NMSetting8021x--password-raw"/>
- <keyword type="property" name="The “password-raw-flags†property" link="NMSetting8021x.html#NMSetting8021x--password-raw-flags"/>
- <keyword type="property" name="The “phase1-fast-provisioning†property" link="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning"/>
- <keyword type="property" name="The “phase1-peaplabel†property" link="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel"/>
- <keyword type="property" name="The “phase1-peapver†property" link="NMSetting8021x.html#NMSetting8021x--phase1-peapver"/>
- <keyword type="property" name="The “phase2-altsubject-matches†property" link="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches"/>
- <keyword type="property" name="The “phase2-auth†property" link="NMSetting8021x.html#NMSetting8021x--phase2-auth"/>
- <keyword type="property" name="The “phase2-autheap†property" link="NMSetting8021x.html#NMSetting8021x--phase2-autheap"/>
- <keyword type="property" name="The “phase2-ca-cert†property" link="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert"/>
- <keyword type="property" name="The “phase2-ca-path†property" link="NMSetting8021x.html#NMSetting8021x--phase2-ca-path"/>
- <keyword type="property" name="The “phase2-client-cert†property" link="NMSetting8021x.html#NMSetting8021x--phase2-client-cert"/>
- <keyword type="property" name="The “phase2-private-key†property" link="NMSetting8021x.html#NMSetting8021x--phase2-private-key"/>
- <keyword type="property" name="The “phase2-private-key-password†property" link="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password"/>
- <keyword type="property" name="The “phase2-private-key-password-flags†property" link="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags"/>
- <keyword type="property" name="The “phase2-subject-match†property" link="NMSetting8021x.html#NMSetting8021x--phase2-subject-match"/>
- <keyword type="property" name="The “pin†property" link="NMSetting8021x.html#NMSetting8021x--pin"/>
- <keyword type="property" name="The “pin-flags†property" link="NMSetting8021x.html#NMSetting8021x--pin-flags"/>
- <keyword type="property" name="The “private-key†property" link="NMSetting8021x.html#NMSetting8021x--private-key"/>
- <keyword type="property" name="The “private-key-password†property" link="NMSetting8021x.html#NMSetting8021x--private-key-password"/>
- <keyword type="property" name="The “private-key-password-flags†property" link="NMSetting8021x.html#NMSetting8021x--private-key-password-flags"/>
- <keyword type="property" name="The “subject-match†property" link="NMSetting8021x.html#NMSetting8021x--subject-match"/>
- <keyword type="property" name="The “system-ca-certs†property" link="NMSetting8021x.html#NMSetting8021x--system-ca-certs"/>
- <keyword type="function" name="nm_setting_ip4_config_error_quark ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-error-quark"/>
- <keyword type="function" name="nm_ip4_address_new ()" link="NMSettingIP4Config.html#nm-ip4-address-new"/>
- <keyword type="function" name="nm_ip4_address_dup ()" link="NMSettingIP4Config.html#nm-ip4-address-dup"/>
- <keyword type="function" name="nm_ip4_address_ref ()" link="NMSettingIP4Config.html#nm-ip4-address-ref"/>
- <keyword type="function" name="nm_ip4_address_unref ()" link="NMSettingIP4Config.html#nm-ip4-address-unref"/>
- <keyword type="function" name="nm_ip4_address_compare ()" link="NMSettingIP4Config.html#nm-ip4-address-compare"/>
- <keyword type="function" name="nm_ip4_address_get_address ()" link="NMSettingIP4Config.html#nm-ip4-address-get-address"/>
- <keyword type="function" name="nm_ip4_address_set_address ()" link="NMSettingIP4Config.html#nm-ip4-address-set-address"/>
- <keyword type="function" name="nm_ip4_address_get_prefix ()" link="NMSettingIP4Config.html#nm-ip4-address-get-prefix"/>
- <keyword type="function" name="nm_ip4_address_set_prefix ()" link="NMSettingIP4Config.html#nm-ip4-address-set-prefix"/>
- <keyword type="function" name="nm_ip4_address_get_gateway ()" link="NMSettingIP4Config.html#nm-ip4-address-get-gateway"/>
- <keyword type="function" name="nm_ip4_address_set_gateway ()" link="NMSettingIP4Config.html#nm-ip4-address-set-gateway"/>
- <keyword type="function" name="nm_ip4_route_new ()" link="NMSettingIP4Config.html#nm-ip4-route-new"/>
- <keyword type="function" name="nm_ip4_route_dup ()" link="NMSettingIP4Config.html#nm-ip4-route-dup"/>
- <keyword type="function" name="nm_ip4_route_ref ()" link="NMSettingIP4Config.html#nm-ip4-route-ref"/>
- <keyword type="function" name="nm_ip4_route_unref ()" link="NMSettingIP4Config.html#nm-ip4-route-unref"/>
- <keyword type="function" name="nm_ip4_route_compare ()" link="NMSettingIP4Config.html#nm-ip4-route-compare"/>
- <keyword type="function" name="nm_ip4_route_get_dest ()" link="NMSettingIP4Config.html#nm-ip4-route-get-dest"/>
- <keyword type="function" name="nm_ip4_route_set_dest ()" link="NMSettingIP4Config.html#nm-ip4-route-set-dest"/>
- <keyword type="function" name="nm_ip4_route_get_prefix ()" link="NMSettingIP4Config.html#nm-ip4-route-get-prefix"/>
- <keyword type="function" name="nm_ip4_route_set_prefix ()" link="NMSettingIP4Config.html#nm-ip4-route-set-prefix"/>
- <keyword type="function" name="nm_ip4_route_get_next_hop ()" link="NMSettingIP4Config.html#nm-ip4-route-get-next-hop"/>
- <keyword type="function" name="nm_ip4_route_set_next_hop ()" link="NMSettingIP4Config.html#nm-ip4-route-set-next-hop"/>
- <keyword type="function" name="nm_ip4_route_get_metric ()" link="NMSettingIP4Config.html#nm-ip4-route-get-metric"/>
- <keyword type="function" name="nm_ip4_route_set_metric ()" link="NMSettingIP4Config.html#nm-ip4-route-set-metric"/>
- <keyword type="function" name="nm_setting_ip4_config_new ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-new"/>
- <keyword type="function" name="nm_setting_ip4_config_get_method ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-method"/>
- <keyword type="function" name="nm_setting_ip4_config_get_num_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns"/>
- <keyword type="function" name="nm_setting_ip4_config_get_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns"/>
- <keyword type="function" name="nm_setting_ip4_config_add_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns"/>
- <keyword type="function" name="nm_setting_ip4_config_remove_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns"/>
- <keyword type="function" name="nm_setting_ip4_config_clear_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns"/>
- <keyword type="function" name="nm_setting_ip4_config_get_num_dns_searches ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns-searches"/>
- <keyword type="function" name="nm_setting_ip4_config_get_dns_search ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns-search"/>
- <keyword type="function" name="nm_setting_ip4_config_add_dns_search ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns-search"/>
- <keyword type="function" name="nm_setting_ip4_config_remove_dns_search ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search"/>
- <keyword type="function" name="nm_setting_ip4_config_clear_dns_searches ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns-searches"/>
- <keyword type="function" name="nm_setting_ip4_config_get_num_addresses ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-addresses"/>
- <keyword type="function" name="nm_setting_ip4_config_get_address ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-address"/>
- <keyword type="function" name="nm_setting_ip4_config_add_address ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-address"/>
- <keyword type="function" name="nm_setting_ip4_config_remove_address ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address"/>
- <keyword type="function" name="nm_setting_ip4_config_clear_addresses ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-addresses"/>
- <keyword type="function" name="nm_setting_ip4_config_get_num_routes ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-routes"/>
- <keyword type="function" name="nm_setting_ip4_config_get_route ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-route"/>
- <keyword type="function" name="nm_setting_ip4_config_add_route ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-route"/>
- <keyword type="function" name="nm_setting_ip4_config_remove_route ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route"/>
- <keyword type="function" name="nm_setting_ip4_config_clear_routes ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-routes"/>
- <keyword type="function" name="nm_setting_ip4_config_get_ignore_auto_routes ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-routes"/>
- <keyword type="function" name="nm_setting_ip4_config_get_ignore_auto_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-dns"/>
- <keyword type="function" name="nm_setting_ip4_config_get_dhcp_client_id ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id"/>
- <keyword type="function" name="nm_setting_ip4_config_get_dhcp_send_hostname ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-send-hostname"/>
- <keyword type="function" name="nm_setting_ip4_config_get_dhcp_hostname ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-hostname"/>
- <keyword type="function" name="nm_setting_ip4_config_get_never_default ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-never-default"/>
- <keyword type="function" name="nm_setting_ip4_config_get_may_fail ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-may-fail"/>
+ <keyword type="struct" name="NMSetting8021x" link="NMSetting8021x.html#NMSetting8021x-struct"/>
+ <keyword type="struct" name="NMSetting8021xClass" link="NMSetting8021x.html#NMSetting8021xClass"/>
+ <keyword type="function" name="nm_setting_802_1x_new ()" link="NMSetting8021x.html#nm-setting-802-1x-new"/>
+ <keyword type="function" name="nm_setting_802_1x_get_num_eap_methods ()" link="NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods"/>
+ <keyword type="function" name="nm_setting_802_1x_get_eap_method ()" link="NMSetting8021x.html#nm-setting-802-1x-get-eap-method"/>
+ <keyword type="function" name="nm_setting_802_1x_add_eap_method ()" link="NMSetting8021x.html#nm-setting-802-1x-add-eap-method"/>
+ <keyword type="function" name="nm_setting_802_1x_remove_eap_method ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method"/>
+ <keyword type="function" name="nm_setting_802_1x_remove_eap_method_by_value ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-eap-method-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_802_1x_clear_eap_methods ()" link="NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods"/>
+ <keyword type="function" name="nm_setting_802_1x_get_identity ()" link="NMSetting8021x.html#nm-setting-802-1x-get-identity"/>
+ <keyword type="function" name="nm_setting_802_1x_get_anonymous_identity ()" link="NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity"/>
+ <keyword type="function" name="nm_setting_802_1x_get_pac_file ()" link="NMSetting8021x.html#nm-setting-802-1x-get-pac-file"/>
+ <keyword type="function" name="nm_setting_802_1x_get_system_ca_certs ()" link="NMSetting8021x.html#nm-setting-802-1x-get-system-ca-certs"/>
+ <keyword type="function" name="nm_setting_802_1x_get_ca_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-path"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-path"/>
+ <keyword type="function" name="nm_setting_802_1x_get_ca_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-scheme"/>
+ <keyword type="function" name="nm_setting_802_1x_get_ca_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob"/>
+ <keyword type="function" name="nm_setting_802_1x_get_ca_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path"/>
+ <keyword type="function" name="nm_setting_802_1x_set_ca_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert"/>
+ <keyword type="function" name="nm_setting_802_1x_get_subject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-subject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_get_num_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-get-num-altsubject-matches"/>
+ <keyword type="function" name="nm_setting_802_1x_get_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_add_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_remove_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_remove_altsubject_match_by_value ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_802_1x_clear_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches"/>
+ <keyword type="function" name="nm_setting_802_1x_get_client_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme"/>
+ <keyword type="function" name="nm_setting_802_1x_get_client_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob"/>
+ <keyword type="function" name="nm_setting_802_1x_get_client_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path"/>
+ <keyword type="function" name="nm_setting_802_1x_set_client_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-client-cert"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase1_peapver ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peapver"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase1_peaplabel ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase1-peaplabel"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase1_fast_provisioning ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase1-fast-provisioning"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_auth ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-auth"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_autheap ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-autheap"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-scheme"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-blob"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_ca_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-path"/>
+ <keyword type="function" name="nm_setting_802_1x_set_phase2_ca_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_subject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-subject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_get_num_phase2_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-get-num-phase2-altsubject-matches"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_add_phase2_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_remove_phase2_altsubject_match ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match"/>
+ <keyword type="function" name="nm_setting_802_1x_remove_phase2_altsubject_match_by_value ()" link="NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_802_1x_clear_phase2_altsubject_matches ()" link="NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_client_cert_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_client_cert_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_client_cert_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-path"/>
+ <keyword type="function" name="nm_setting_802_1x_set_phase2_client_cert ()" link="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert"/>
+ <keyword type="function" name="nm_setting_802_1x_get_password ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password"/>
+ <keyword type="function" name="nm_setting_802_1x_get_password_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password-flags"/>
+ <keyword type="function" name="nm_setting_802_1x_get_password_raw ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password-raw"/>
+ <keyword type="function" name="nm_setting_802_1x_get_password_raw_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-password-raw-flags"/>
+ <keyword type="function" name="nm_setting_802_1x_get_pin ()" link="NMSetting8021x.html#nm-setting-802-1x-get-pin"/>
+ <keyword type="function" name="nm_setting_802_1x_get_pin_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-pin-flags"/>
+ <keyword type="function" name="nm_setting_802_1x_get_private_key_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-scheme"/>
+ <keyword type="function" name="nm_setting_802_1x_get_private_key_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-blob"/>
+ <keyword type="function" name="nm_setting_802_1x_get_private_key_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-path"/>
+ <keyword type="function" name="nm_setting_802_1x_set_private_key ()" link="NMSetting8021x.html#nm-setting-802-1x-set-private-key"/>
+ <keyword type="function" name="nm_setting_802_1x_get_private_key_password ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password"/>
+ <keyword type="function" name="nm_setting_802_1x_get_private_key_password_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-password-flags"/>
+ <keyword type="function" name="nm_setting_802_1x_get_private_key_format ()" link="NMSetting8021x.html#nm-setting-802-1x-get-private-key-format"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_scheme ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-scheme"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_blob ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-blob"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_path ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-path"/>
+ <keyword type="function" name="nm_setting_802_1x_set_phase2_private_key ()" link="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_password ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_password_flags ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-password-flags"/>
+ <keyword type="function" name="nm_setting_802_1x_get_phase2_private_key_format ()" link="NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format"/>
+ <keyword type="property" name="The &quot;altsubject-matches&quot; property" link="NMSetting8021x.html#NMSetting8021x--altsubject-matches"/>
+ <keyword type="property" name="The &quot;anonymous-identity&quot; property" link="NMSetting8021x.html#NMSetting8021x--anonymous-identity"/>
+ <keyword type="property" name="The &quot;ca-cert&quot; property" link="NMSetting8021x.html#NMSetting8021x--ca-cert"/>
+ <keyword type="property" name="The &quot;ca-path&quot; property" link="NMSetting8021x.html#NMSetting8021x--ca-path"/>
+ <keyword type="property" name="The &quot;client-cert&quot; property" link="NMSetting8021x.html#NMSetting8021x--client-cert"/>
+ <keyword type="property" name="The &quot;eap&quot; property" link="NMSetting8021x.html#NMSetting8021x--eap"/>
+ <keyword type="property" name="The &quot;identity&quot; property" link="NMSetting8021x.html#NMSetting8021x--identity"/>
+ <keyword type="property" name="The &quot;pac-file&quot; property" link="NMSetting8021x.html#NMSetting8021x--pac-file"/>
+ <keyword type="property" name="The &quot;password&quot; property" link="NMSetting8021x.html#NMSetting8021x--password"/>
+ <keyword type="property" name="The &quot;password-flags&quot; property" link="NMSetting8021x.html#NMSetting8021x--password-flags"/>
+ <keyword type="property" name="The &quot;password-raw&quot; property" link="NMSetting8021x.html#NMSetting8021x--password-raw"/>
+ <keyword type="property" name="The &quot;password-raw-flags&quot; property" link="NMSetting8021x.html#NMSetting8021x--password-raw-flags"/>
+ <keyword type="property" name="The &quot;phase1-fast-provisioning&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning"/>
+ <keyword type="property" name="The &quot;phase1-peaplabel&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase1-peaplabel"/>
+ <keyword type="property" name="The &quot;phase1-peapver&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase1-peapver"/>
+ <keyword type="property" name="The &quot;phase2-altsubject-matches&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches"/>
+ <keyword type="property" name="The &quot;phase2-auth&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-auth"/>
+ <keyword type="property" name="The &quot;phase2-autheap&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-autheap"/>
+ <keyword type="property" name="The &quot;phase2-ca-cert&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-ca-cert"/>
+ <keyword type="property" name="The &quot;phase2-ca-path&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-ca-path"/>
+ <keyword type="property" name="The &quot;phase2-client-cert&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-client-cert"/>
+ <keyword type="property" name="The &quot;phase2-private-key&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-private-key"/>
+ <keyword type="property" name="The &quot;phase2-private-key-password&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password"/>
+ <keyword type="property" name="The &quot;phase2-private-key-password-flags&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags"/>
+ <keyword type="property" name="The &quot;phase2-subject-match&quot; property" link="NMSetting8021x.html#NMSetting8021x--phase2-subject-match"/>
+ <keyword type="property" name="The &quot;pin&quot; property" link="NMSetting8021x.html#NMSetting8021x--pin"/>
+ <keyword type="property" name="The &quot;pin-flags&quot; property" link="NMSetting8021x.html#NMSetting8021x--pin-flags"/>
+ <keyword type="property" name="The &quot;private-key&quot; property" link="NMSetting8021x.html#NMSetting8021x--private-key"/>
+ <keyword type="property" name="The &quot;private-key-password&quot; property" link="NMSetting8021x.html#NMSetting8021x--private-key-password"/>
+ <keyword type="property" name="The &quot;private-key-password-flags&quot; property" link="NMSetting8021x.html#NMSetting8021x--private-key-password-flags"/>
+ <keyword type="property" name="The &quot;subject-match&quot; property" link="NMSetting8021x.html#NMSetting8021x--subject-match"/>
+ <keyword type="property" name="The &quot;system-ca-certs&quot; property" link="NMSetting8021x.html#NMSetting8021x--system-ca-certs"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_SETTING_NAME" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingIP4ConfigError" link="NMSettingIP4Config.html#NMSettingIP4ConfigError"/>
+ <keyword type="enum" name="enum NMSettingIP4ConfigError" link="NMSettingIP4Config.html#NMSettingIP4ConfigError-enum"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_ERROR" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_ip4_config_error_quark ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-error-quark"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_METHOD" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_DNS" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_DNS_SEARCH" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS"/>
@@ -793,74 +929,84 @@
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_METHOD_MANUAL" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_METHOD_SHARED" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_METHOD_DISABLED" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS"/>
- <keyword type="property" name="The “addresses†property" link="NMSettingIP4Config.html#NMSettingIP4Config--addresses"/>
- <keyword type="property" name="The “dhcp-client-id†property" link="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id"/>
- <keyword type="property" name="The “dhcp-hostname†property" link="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname"/>
- <keyword type="property" name="The “dhcp-send-hostname†property" link="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname"/>
- <keyword type="property" name="The “dns†property" link="NMSettingIP4Config.html#NMSettingIP4Config--dns"/>
- <keyword type="property" name="The “dns-search†property" link="NMSettingIP4Config.html#NMSettingIP4Config--dns-search"/>
- <keyword type="property" name="The “ignore-auto-dns†property" link="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns"/>
- <keyword type="property" name="The “ignore-auto-routes†property" link="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes"/>
- <keyword type="property" name="The “may-fail†property" link="NMSettingIP4Config.html#NMSettingIP4Config--may-fail"/>
- <keyword type="property" name="The “method†property" link="NMSettingIP4Config.html#NMSettingIP4Config--method"/>
- <keyword type="property" name="The “never-default†property" link="NMSettingIP4Config.html#NMSettingIP4Config--never-default"/>
- <keyword type="property" name="The “routes†property" link="NMSettingIP4Config.html#NMSettingIP4Config--routes"/>
- <keyword type="function" name="nm_setting_ip6_config_error_quark ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-error-quark"/>
- <keyword type="function" name="nm_ip6_address_new ()" link="NMSettingIP6Config.html#nm-ip6-address-new"/>
- <keyword type="function" name="nm_ip6_address_dup ()" link="NMSettingIP6Config.html#nm-ip6-address-dup"/>
- <keyword type="function" name="nm_ip6_address_ref ()" link="NMSettingIP6Config.html#nm-ip6-address-ref"/>
- <keyword type="function" name="nm_ip6_address_unref ()" link="NMSettingIP6Config.html#nm-ip6-address-unref"/>
- <keyword type="function" name="nm_ip6_address_compare ()" link="NMSettingIP6Config.html#nm-ip6-address-compare"/>
- <keyword type="function" name="nm_ip6_address_get_address ()" link="NMSettingIP6Config.html#nm-ip6-address-get-address"/>
- <keyword type="function" name="nm_ip6_address_set_address ()" link="NMSettingIP6Config.html#nm-ip6-address-set-address"/>
- <keyword type="function" name="nm_ip6_address_get_prefix ()" link="NMSettingIP6Config.html#nm-ip6-address-get-prefix"/>
- <keyword type="function" name="nm_ip6_address_set_prefix ()" link="NMSettingIP6Config.html#nm-ip6-address-set-prefix"/>
- <keyword type="function" name="nm_ip6_address_get_gateway ()" link="NMSettingIP6Config.html#nm-ip6-address-get-gateway"/>
- <keyword type="function" name="nm_ip6_address_set_gateway ()" link="NMSettingIP6Config.html#nm-ip6-address-set-gateway"/>
- <keyword type="function" name="nm_ip6_route_new ()" link="NMSettingIP6Config.html#nm-ip6-route-new"/>
- <keyword type="function" name="nm_ip6_route_dup ()" link="NMSettingIP6Config.html#nm-ip6-route-dup"/>
- <keyword type="function" name="nm_ip6_route_ref ()" link="NMSettingIP6Config.html#nm-ip6-route-ref"/>
- <keyword type="function" name="nm_ip6_route_unref ()" link="NMSettingIP6Config.html#nm-ip6-route-unref"/>
- <keyword type="function" name="nm_ip6_route_compare ()" link="NMSettingIP6Config.html#nm-ip6-route-compare"/>
- <keyword type="function" name="nm_ip6_route_get_dest ()" link="NMSettingIP6Config.html#nm-ip6-route-get-dest"/>
- <keyword type="function" name="nm_ip6_route_set_dest ()" link="NMSettingIP6Config.html#nm-ip6-route-set-dest"/>
- <keyword type="function" name="nm_ip6_route_get_prefix ()" link="NMSettingIP6Config.html#nm-ip6-route-get-prefix"/>
- <keyword type="function" name="nm_ip6_route_set_prefix ()" link="NMSettingIP6Config.html#nm-ip6-route-set-prefix"/>
- <keyword type="function" name="nm_ip6_route_get_next_hop ()" link="NMSettingIP6Config.html#nm-ip6-route-get-next-hop"/>
- <keyword type="function" name="nm_ip6_route_set_next_hop ()" link="NMSettingIP6Config.html#nm-ip6-route-set-next-hop"/>
- <keyword type="function" name="nm_ip6_route_get_metric ()" link="NMSettingIP6Config.html#nm-ip6-route-get-metric"/>
- <keyword type="function" name="nm_ip6_route_set_metric ()" link="NMSettingIP6Config.html#nm-ip6-route-set-metric"/>
- <keyword type="function" name="nm_setting_ip6_config_new ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-new"/>
- <keyword type="function" name="nm_setting_ip6_config_get_method ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-method"/>
- <keyword type="function" name="nm_setting_ip6_config_get_num_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns"/>
- <keyword type="function" name="nm_setting_ip6_config_get_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns"/>
- <keyword type="function" name="nm_setting_ip6_config_add_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns"/>
- <keyword type="function" name="nm_setting_ip6_config_remove_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns"/>
- <keyword type="function" name="nm_setting_ip6_config_clear_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns"/>
- <keyword type="function" name="nm_setting_ip6_config_get_num_dns_searches ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns-searches"/>
- <keyword type="function" name="nm_setting_ip6_config_get_dns_search ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns-search"/>
- <keyword type="function" name="nm_setting_ip6_config_add_dns_search ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns-search"/>
- <keyword type="function" name="nm_setting_ip6_config_remove_dns_search ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search"/>
- <keyword type="function" name="nm_setting_ip6_config_clear_dns_searches ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns-searches"/>
- <keyword type="function" name="nm_setting_ip6_config_get_num_addresses ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-addresses"/>
- <keyword type="function" name="nm_setting_ip6_config_get_address ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-address"/>
- <keyword type="function" name="nm_setting_ip6_config_add_address ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-address"/>
- <keyword type="function" name="nm_setting_ip6_config_remove_address ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address"/>
- <keyword type="function" name="nm_setting_ip6_config_clear_addresses ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-addresses"/>
- <keyword type="function" name="nm_setting_ip6_config_get_num_routes ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-routes"/>
- <keyword type="function" name="nm_setting_ip6_config_get_route ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-route"/>
- <keyword type="function" name="nm_setting_ip6_config_add_route ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-route"/>
- <keyword type="function" name="nm_setting_ip6_config_remove_route ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route"/>
- <keyword type="function" name="nm_setting_ip6_config_clear_routes ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-routes"/>
- <keyword type="function" name="nm_setting_ip6_config_get_ignore_auto_routes ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-routes"/>
- <keyword type="function" name="nm_setting_ip6_config_get_ignore_auto_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns"/>
- <keyword type="function" name="nm_setting_ip6_config_get_dhcp_hostname ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-dhcp-hostname" since="0.9.8"/>
- <keyword type="function" name="nm_setting_ip6_config_get_never_default ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default"/>
- <keyword type="function" name="nm_setting_ip6_config_get_may_fail ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-may-fail"/>
- <keyword type="function" name="nm_setting_ip6_config_get_ip6_privacy ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy"/>
+ <keyword type="typedef" name="NMIP4Address" link="NMSettingIP4Config.html#NMIP4Address"/>
+ <keyword type="function" name="nm_ip4_address_new ()" link="NMSettingIP4Config.html#nm-ip4-address-new"/>
+ <keyword type="function" name="nm_ip4_address_dup ()" link="NMSettingIP4Config.html#nm-ip4-address-dup"/>
+ <keyword type="function" name="nm_ip4_address_ref ()" link="NMSettingIP4Config.html#nm-ip4-address-ref"/>
+ <keyword type="function" name="nm_ip4_address_unref ()" link="NMSettingIP4Config.html#nm-ip4-address-unref"/>
+ <keyword type="function" name="nm_ip4_address_compare ()" link="NMSettingIP4Config.html#nm-ip4-address-compare"/>
+ <keyword type="function" name="nm_ip4_address_get_address ()" link="NMSettingIP4Config.html#nm-ip4-address-get-address"/>
+ <keyword type="function" name="nm_ip4_address_set_address ()" link="NMSettingIP4Config.html#nm-ip4-address-set-address"/>
+ <keyword type="function" name="nm_ip4_address_get_prefix ()" link="NMSettingIP4Config.html#nm-ip4-address-get-prefix"/>
+ <keyword type="function" name="nm_ip4_address_set_prefix ()" link="NMSettingIP4Config.html#nm-ip4-address-set-prefix"/>
+ <keyword type="function" name="nm_ip4_address_get_gateway ()" link="NMSettingIP4Config.html#nm-ip4-address-get-gateway"/>
+ <keyword type="function" name="nm_ip4_address_set_gateway ()" link="NMSettingIP4Config.html#nm-ip4-address-set-gateway"/>
+ <keyword type="typedef" name="NMIP4Route" link="NMSettingIP4Config.html#NMIP4Route"/>
+ <keyword type="function" name="nm_ip4_route_new ()" link="NMSettingIP4Config.html#nm-ip4-route-new"/>
+ <keyword type="function" name="nm_ip4_route_dup ()" link="NMSettingIP4Config.html#nm-ip4-route-dup"/>
+ <keyword type="function" name="nm_ip4_route_ref ()" link="NMSettingIP4Config.html#nm-ip4-route-ref"/>
+ <keyword type="function" name="nm_ip4_route_unref ()" link="NMSettingIP4Config.html#nm-ip4-route-unref"/>
+ <keyword type="function" name="nm_ip4_route_compare ()" link="NMSettingIP4Config.html#nm-ip4-route-compare"/>
+ <keyword type="function" name="nm_ip4_route_get_dest ()" link="NMSettingIP4Config.html#nm-ip4-route-get-dest"/>
+ <keyword type="function" name="nm_ip4_route_set_dest ()" link="NMSettingIP4Config.html#nm-ip4-route-set-dest"/>
+ <keyword type="function" name="nm_ip4_route_get_prefix ()" link="NMSettingIP4Config.html#nm-ip4-route-get-prefix"/>
+ <keyword type="function" name="nm_ip4_route_set_prefix ()" link="NMSettingIP4Config.html#nm-ip4-route-set-prefix"/>
+ <keyword type="function" name="nm_ip4_route_get_next_hop ()" link="NMSettingIP4Config.html#nm-ip4-route-get-next-hop"/>
+ <keyword type="function" name="nm_ip4_route_set_next_hop ()" link="NMSettingIP4Config.html#nm-ip4-route-set-next-hop"/>
+ <keyword type="function" name="nm_ip4_route_get_metric ()" link="NMSettingIP4Config.html#nm-ip4-route-get-metric"/>
+ <keyword type="function" name="nm_ip4_route_set_metric ()" link="NMSettingIP4Config.html#nm-ip4-route-set-metric"/>
+ <keyword type="struct" name="NMSettingIP4Config" link="NMSettingIP4Config.html#NMSettingIP4Config-struct"/>
+ <keyword type="struct" name="NMSettingIP4ConfigClass" link="NMSettingIP4Config.html#NMSettingIP4ConfigClass"/>
+ <keyword type="function" name="nm_setting_ip4_config_new ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-new"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_method ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-method"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_num_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns"/>
+ <keyword type="function" name="nm_setting_ip4_config_add_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_dns_by_value ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_ip4_config_clear_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_num_dns_searches ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-dns-searches"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_dns_search ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dns-search"/>
+ <keyword type="function" name="nm_setting_ip4_config_add_dns_search ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-dns-search"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_dns_search ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_dns_search_by_value ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-dns-search-by-value"/>
+ <keyword type="function" name="nm_setting_ip4_config_clear_dns_searches ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-dns-searches"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_num_addresses ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-addresses"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_address ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-address"/>
+ <keyword type="function" name="nm_setting_ip4_config_add_address ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-address"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_address ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_address_by_value ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-address-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_ip4_config_clear_addresses ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-addresses"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_num_routes ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-num-routes"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_route ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-route"/>
+ <keyword type="function" name="nm_setting_ip4_config_add_route ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-add-route"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_route ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route"/>
+ <keyword type="function" name="nm_setting_ip4_config_remove_route_by_value ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-remove-route-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_ip4_config_clear_routes ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-clear-routes"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_ignore_auto_routes ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-routes"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_ignore_auto_dns ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-ignore-auto-dns"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_dhcp_client_id ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_dhcp_send_hostname ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-send-hostname"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_dhcp_hostname ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-hostname"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_never_default ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-never-default"/>
+ <keyword type="function" name="nm_setting_ip4_config_get_may_fail ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-may-fail"/>
+ <keyword type="property" name="The &quot;address-labels&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--address-labels"/>
+ <keyword type="property" name="The &quot;addresses&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--addresses"/>
+ <keyword type="property" name="The &quot;dhcp-client-id&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id"/>
+ <keyword type="property" name="The &quot;dhcp-hostname&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-hostname"/>
+ <keyword type="property" name="The &quot;dhcp-send-hostname&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-send-hostname"/>
+ <keyword type="property" name="The &quot;dns&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--dns"/>
+ <keyword type="property" name="The &quot;dns-search&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--dns-search"/>
+ <keyword type="property" name="The &quot;ignore-auto-dns&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-dns"/>
+ <keyword type="property" name="The &quot;ignore-auto-routes&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--ignore-auto-routes"/>
+ <keyword type="property" name="The &quot;may-fail&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--may-fail"/>
+ <keyword type="property" name="The &quot;method&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--method"/>
+ <keyword type="property" name="The &quot;never-default&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--never-default"/>
+ <keyword type="property" name="The &quot;routes&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--routes"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_SETTING_NAME" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingIP6ConfigError" link="NMSettingIP6Config.html#NMSettingIP6ConfigError"/>
+ <keyword type="enum" name="enum NMSettingIP6ConfigError" link="NMSettingIP6Config.html#NMSettingIP6ConfigError-enum"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_ERROR" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_ip6_config_error_quark ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-error-quark"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_METHOD" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_DNS" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_DNS_SEARCH" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS"/>
@@ -878,41 +1024,82 @@
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_METHOD_MANUAL" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_METHOD_SHARED" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS"/>
- <keyword type="enum" name="enum NMSettingIP6ConfigPrivacy" link="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy"/>
- <keyword type="property" name="The “addresses†property" link="NMSettingIP6Config.html#NMSettingIP6Config--addresses"/>
- <keyword type="property" name="The “dhcp-hostname†property" link="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname"/>
- <keyword type="property" name="The “dns†property" link="NMSettingIP6Config.html#NMSettingIP6Config--dns"/>
- <keyword type="property" name="The “dns-search†property" link="NMSettingIP6Config.html#NMSettingIP6Config--dns-search"/>
- <keyword type="property" name="The “ignore-auto-dns†property" link="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns"/>
- <keyword type="property" name="The “ignore-auto-routes†property" link="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes"/>
- <keyword type="property" name="The “ip6-privacy†property" link="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy"/>
- <keyword type="property" name="The “may-fail†property" link="NMSettingIP6Config.html#NMSettingIP6Config--may-fail"/>
- <keyword type="property" name="The “method†property" link="NMSettingIP6Config.html#NMSettingIP6Config--method"/>
- <keyword type="property" name="The “never-default†property" link="NMSettingIP6Config.html#NMSettingIP6Config--never-default"/>
- <keyword type="property" name="The “routes†property" link="NMSettingIP6Config.html#NMSettingIP6Config--routes"/>
- <keyword type="function" name="nm_setting_ppp_error_quark ()" link="NMSettingPPP.html#nm-setting-ppp-error-quark"/>
- <keyword type="function" name="nm_setting_ppp_new ()" link="NMSettingPPP.html#nm-setting-ppp-new"/>
- <keyword type="function" name="nm_setting_ppp_get_noauth ()" link="NMSettingPPP.html#nm-setting-ppp-get-noauth"/>
- <keyword type="function" name="nm_setting_ppp_get_refuse_eap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-eap"/>
- <keyword type="function" name="nm_setting_ppp_get_refuse_pap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-pap"/>
- <keyword type="function" name="nm_setting_ppp_get_refuse_chap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-chap"/>
- <keyword type="function" name="nm_setting_ppp_get_refuse_mschap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap"/>
- <keyword type="function" name="nm_setting_ppp_get_refuse_mschapv2 ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2"/>
- <keyword type="function" name="nm_setting_ppp_get_nobsdcomp ()" link="NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp"/>
- <keyword type="function" name="nm_setting_ppp_get_nodeflate ()" link="NMSettingPPP.html#nm-setting-ppp-get-nodeflate"/>
- <keyword type="function" name="nm_setting_ppp_get_no_vj_comp ()" link="NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp"/>
- <keyword type="function" name="nm_setting_ppp_get_require_mppe ()" link="NMSettingPPP.html#nm-setting-ppp-get-require-mppe"/>
- <keyword type="function" name="nm_setting_ppp_get_require_mppe_128 ()" link="NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128"/>
- <keyword type="function" name="nm_setting_ppp_get_mppe_stateful ()" link="NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful"/>
- <keyword type="function" name="nm_setting_ppp_get_crtscts ()" link="NMSettingPPP.html#nm-setting-ppp-get-crtscts"/>
- <keyword type="function" name="nm_setting_ppp_get_baud ()" link="NMSettingPPP.html#nm-setting-ppp-get-baud"/>
- <keyword type="function" name="nm_setting_ppp_get_mru ()" link="NMSettingPPP.html#nm-setting-ppp-get-mru"/>
- <keyword type="function" name="nm_setting_ppp_get_mtu ()" link="NMSettingPPP.html#nm-setting-ppp-get-mtu"/>
- <keyword type="function" name="nm_setting_ppp_get_lcp_echo_failure ()" link="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure"/>
- <keyword type="function" name="nm_setting_ppp_get_lcp_echo_interval ()" link="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval"/>
+ <keyword type="enum" name="enum NMSettingIP6ConfigPrivacy" link="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy-enum"/>
+ <keyword type="typedef" name="NMIP6Address" link="NMSettingIP6Config.html#NMIP6Address"/>
+ <keyword type="function" name="nm_ip6_address_new ()" link="NMSettingIP6Config.html#nm-ip6-address-new"/>
+ <keyword type="function" name="nm_ip6_address_dup ()" link="NMSettingIP6Config.html#nm-ip6-address-dup"/>
+ <keyword type="function" name="nm_ip6_address_ref ()" link="NMSettingIP6Config.html#nm-ip6-address-ref"/>
+ <keyword type="function" name="nm_ip6_address_unref ()" link="NMSettingIP6Config.html#nm-ip6-address-unref"/>
+ <keyword type="function" name="nm_ip6_address_compare ()" link="NMSettingIP6Config.html#nm-ip6-address-compare"/>
+ <keyword type="function" name="nm_ip6_address_get_address ()" link="NMSettingIP6Config.html#nm-ip6-address-get-address"/>
+ <keyword type="function" name="nm_ip6_address_set_address ()" link="NMSettingIP6Config.html#nm-ip6-address-set-address"/>
+ <keyword type="function" name="nm_ip6_address_get_prefix ()" link="NMSettingIP6Config.html#nm-ip6-address-get-prefix"/>
+ <keyword type="function" name="nm_ip6_address_set_prefix ()" link="NMSettingIP6Config.html#nm-ip6-address-set-prefix"/>
+ <keyword type="function" name="nm_ip6_address_get_gateway ()" link="NMSettingIP6Config.html#nm-ip6-address-get-gateway"/>
+ <keyword type="function" name="nm_ip6_address_set_gateway ()" link="NMSettingIP6Config.html#nm-ip6-address-set-gateway"/>
+ <keyword type="typedef" name="NMIP6Route" link="NMSettingIP6Config.html#NMIP6Route"/>
+ <keyword type="function" name="nm_ip6_route_new ()" link="NMSettingIP6Config.html#nm-ip6-route-new"/>
+ <keyword type="function" name="nm_ip6_route_dup ()" link="NMSettingIP6Config.html#nm-ip6-route-dup"/>
+ <keyword type="function" name="nm_ip6_route_ref ()" link="NMSettingIP6Config.html#nm-ip6-route-ref"/>
+ <keyword type="function" name="nm_ip6_route_unref ()" link="NMSettingIP6Config.html#nm-ip6-route-unref"/>
+ <keyword type="function" name="nm_ip6_route_compare ()" link="NMSettingIP6Config.html#nm-ip6-route-compare"/>
+ <keyword type="function" name="nm_ip6_route_get_dest ()" link="NMSettingIP6Config.html#nm-ip6-route-get-dest"/>
+ <keyword type="function" name="nm_ip6_route_set_dest ()" link="NMSettingIP6Config.html#nm-ip6-route-set-dest"/>
+ <keyword type="function" name="nm_ip6_route_get_prefix ()" link="NMSettingIP6Config.html#nm-ip6-route-get-prefix"/>
+ <keyword type="function" name="nm_ip6_route_set_prefix ()" link="NMSettingIP6Config.html#nm-ip6-route-set-prefix"/>
+ <keyword type="function" name="nm_ip6_route_get_next_hop ()" link="NMSettingIP6Config.html#nm-ip6-route-get-next-hop"/>
+ <keyword type="function" name="nm_ip6_route_set_next_hop ()" link="NMSettingIP6Config.html#nm-ip6-route-set-next-hop"/>
+ <keyword type="function" name="nm_ip6_route_get_metric ()" link="NMSettingIP6Config.html#nm-ip6-route-get-metric"/>
+ <keyword type="function" name="nm_ip6_route_set_metric ()" link="NMSettingIP6Config.html#nm-ip6-route-set-metric"/>
+ <keyword type="struct" name="NMSettingIP6Config" link="NMSettingIP6Config.html#NMSettingIP6Config-struct"/>
+ <keyword type="struct" name="NMSettingIP6ConfigClass" link="NMSettingIP6Config.html#NMSettingIP6ConfigClass"/>
+ <keyword type="function" name="nm_setting_ip6_config_new ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-new"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_method ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-method"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_num_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns"/>
+ <keyword type="function" name="nm_setting_ip6_config_add_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_dns_by_value ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_ip6_config_clear_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_num_dns_searches ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-dns-searches"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_dns_search ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-dns-search"/>
+ <keyword type="function" name="nm_setting_ip6_config_add_dns_search ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-dns-search"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_dns_search ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_dns_search_by_value ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-dns-search-by-value"/>
+ <keyword type="function" name="nm_setting_ip6_config_clear_dns_searches ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-dns-searches"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_num_addresses ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-addresses"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_address ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-address"/>
+ <keyword type="function" name="nm_setting_ip6_config_add_address ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-address"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_address ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_address_by_value ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-address-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_ip6_config_clear_addresses ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-addresses"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_num_routes ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-num-routes"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_route ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-route"/>
+ <keyword type="function" name="nm_setting_ip6_config_add_route ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-add-route"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_route ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route"/>
+ <keyword type="function" name="nm_setting_ip6_config_remove_route_by_value ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-remove-route-by-value" since="0.9.10"/>
+ <keyword type="function" name="nm_setting_ip6_config_clear_routes ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-clear-routes"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_ignore_auto_routes ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-routes"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_ignore_auto_dns ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_dhcp_hostname ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-dhcp-hostname" since="0.9.8"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_never_default ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_may_fail ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-may-fail"/>
+ <keyword type="function" name="nm_setting_ip6_config_get_ip6_privacy ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy"/>
+ <keyword type="property" name="The &quot;addresses&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--addresses"/>
+ <keyword type="property" name="The &quot;dhcp-hostname&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--dhcp-hostname"/>
+ <keyword type="property" name="The &quot;dns&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--dns"/>
+ <keyword type="property" name="The &quot;dns-search&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--dns-search"/>
+ <keyword type="property" name="The &quot;ignore-auto-dns&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-dns"/>
+ <keyword type="property" name="The &quot;ignore-auto-routes&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--ignore-auto-routes"/>
+ <keyword type="property" name="The &quot;ip6-privacy&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy"/>
+ <keyword type="property" name="The &quot;may-fail&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--may-fail"/>
+ <keyword type="property" name="The &quot;method&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--method"/>
+ <keyword type="property" name="The &quot;never-default&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--never-default"/>
+ <keyword type="property" name="The &quot;routes&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--routes"/>
<keyword type="macro" name="NM_SETTING_PPP_SETTING_NAME" link="NMSettingPPP.html#NM-SETTING-PPP-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingPPPError" link="NMSettingPPP.html#NMSettingPPPError"/>
+ <keyword type="enum" name="enum NMSettingPPPError" link="NMSettingPPP.html#NMSettingPPPError-enum"/>
<keyword type="macro" name="NM_SETTING_PPP_ERROR" link="NMSettingPPP.html#NM-SETTING-PPP-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_ppp_error_quark ()" link="NMSettingPPP.html#nm-setting-ppp-error-quark"/>
<keyword type="macro" name="NM_SETTING_PPP_NOAUTH" link="NMSettingPPP.html#NM-SETTING-PPP-NOAUTH:CAPS"/>
<keyword type="macro" name="NM_SETTING_PPP_REFUSE_EAP" link="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-EAP:CAPS"/>
<keyword type="macro" name="NM_SETTING_PPP_REFUSE_PAP" link="NMSettingPPP.html#NM-SETTING-PPP-REFUSE-PAP:CAPS"/>
@@ -931,108 +1118,320 @@
<keyword type="macro" name="NM_SETTING_PPP_MTU" link="NMSettingPPP.html#NM-SETTING-PPP-MTU:CAPS"/>
<keyword type="macro" name="NM_SETTING_PPP_LCP_ECHO_FAILURE" link="NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS"/>
<keyword type="macro" name="NM_SETTING_PPP_LCP_ECHO_INTERVAL" link="NMSettingPPP.html#NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS"/>
- <keyword type="property" name="The “baud†property" link="NMSettingPPP.html#NMSettingPPP--baud"/>
- <keyword type="property" name="The “crtscts†property" link="NMSettingPPP.html#NMSettingPPP--crtscts"/>
- <keyword type="property" name="The “lcp-echo-failure†property" link="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure"/>
- <keyword type="property" name="The “lcp-echo-interval†property" link="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval"/>
- <keyword type="property" name="The “mppe-stateful†property" link="NMSettingPPP.html#NMSettingPPP--mppe-stateful"/>
- <keyword type="property" name="The “mru†property" link="NMSettingPPP.html#NMSettingPPP--mru"/>
- <keyword type="property" name="The “mtu†property" link="NMSettingPPP.html#NMSettingPPP--mtu"/>
- <keyword type="property" name="The “no-vj-comp†property" link="NMSettingPPP.html#NMSettingPPP--no-vj-comp"/>
- <keyword type="property" name="The “noauth†property" link="NMSettingPPP.html#NMSettingPPP--noauth"/>
- <keyword type="property" name="The “nobsdcomp†property" link="NMSettingPPP.html#NMSettingPPP--nobsdcomp"/>
- <keyword type="property" name="The “nodeflate†property" link="NMSettingPPP.html#NMSettingPPP--nodeflate"/>
- <keyword type="property" name="The “refuse-chap†property" link="NMSettingPPP.html#NMSettingPPP--refuse-chap"/>
- <keyword type="property" name="The “refuse-eap†property" link="NMSettingPPP.html#NMSettingPPP--refuse-eap"/>
- <keyword type="property" name="The “refuse-mschap†property" link="NMSettingPPP.html#NMSettingPPP--refuse-mschap"/>
- <keyword type="property" name="The “refuse-mschapv2†property" link="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2"/>
- <keyword type="property" name="The “refuse-pap†property" link="NMSettingPPP.html#NMSettingPPP--refuse-pap"/>
- <keyword type="property" name="The “require-mppe†property" link="NMSettingPPP.html#NMSettingPPP--require-mppe"/>
- <keyword type="property" name="The “require-mppe-128†property" link="NMSettingPPP.html#NMSettingPPP--require-mppe-128"/>
- <keyword type="function" name="nm_setting_pppoe_error_quark ()" link="NMSettingPPPOE.html#nm-setting-pppoe-error-quark"/>
- <keyword type="function" name="nm_setting_pppoe_new ()" link="NMSettingPPPOE.html#nm-setting-pppoe-new"/>
- <keyword type="function" name="nm_setting_pppoe_get_service ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-service"/>
- <keyword type="function" name="nm_setting_pppoe_get_username ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-username"/>
- <keyword type="function" name="nm_setting_pppoe_get_password ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-password"/>
- <keyword type="function" name="nm_setting_pppoe_get_password_flags ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags"/>
+ <keyword type="struct" name="NMSettingPPP" link="NMSettingPPP.html#NMSettingPPP-struct"/>
+ <keyword type="struct" name="NMSettingPPPClass" link="NMSettingPPP.html#NMSettingPPPClass"/>
+ <keyword type="function" name="nm_setting_ppp_new ()" link="NMSettingPPP.html#nm-setting-ppp-new"/>
+ <keyword type="function" name="nm_setting_ppp_get_noauth ()" link="NMSettingPPP.html#nm-setting-ppp-get-noauth"/>
+ <keyword type="function" name="nm_setting_ppp_get_refuse_eap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-eap"/>
+ <keyword type="function" name="nm_setting_ppp_get_refuse_pap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-pap"/>
+ <keyword type="function" name="nm_setting_ppp_get_refuse_chap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-chap"/>
+ <keyword type="function" name="nm_setting_ppp_get_refuse_mschap ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschap"/>
+ <keyword type="function" name="nm_setting_ppp_get_refuse_mschapv2 ()" link="NMSettingPPP.html#nm-setting-ppp-get-refuse-mschapv2"/>
+ <keyword type="function" name="nm_setting_ppp_get_nobsdcomp ()" link="NMSettingPPP.html#nm-setting-ppp-get-nobsdcomp"/>
+ <keyword type="function" name="nm_setting_ppp_get_nodeflate ()" link="NMSettingPPP.html#nm-setting-ppp-get-nodeflate"/>
+ <keyword type="function" name="nm_setting_ppp_get_no_vj_comp ()" link="NMSettingPPP.html#nm-setting-ppp-get-no-vj-comp"/>
+ <keyword type="function" name="nm_setting_ppp_get_require_mppe ()" link="NMSettingPPP.html#nm-setting-ppp-get-require-mppe"/>
+ <keyword type="function" name="nm_setting_ppp_get_require_mppe_128 ()" link="NMSettingPPP.html#nm-setting-ppp-get-require-mppe-128"/>
+ <keyword type="function" name="nm_setting_ppp_get_mppe_stateful ()" link="NMSettingPPP.html#nm-setting-ppp-get-mppe-stateful"/>
+ <keyword type="function" name="nm_setting_ppp_get_crtscts ()" link="NMSettingPPP.html#nm-setting-ppp-get-crtscts"/>
+ <keyword type="function" name="nm_setting_ppp_get_baud ()" link="NMSettingPPP.html#nm-setting-ppp-get-baud"/>
+ <keyword type="function" name="nm_setting_ppp_get_mru ()" link="NMSettingPPP.html#nm-setting-ppp-get-mru"/>
+ <keyword type="function" name="nm_setting_ppp_get_mtu ()" link="NMSettingPPP.html#nm-setting-ppp-get-mtu"/>
+ <keyword type="function" name="nm_setting_ppp_get_lcp_echo_failure ()" link="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-failure"/>
+ <keyword type="function" name="nm_setting_ppp_get_lcp_echo_interval ()" link="NMSettingPPP.html#nm-setting-ppp-get-lcp-echo-interval"/>
+ <keyword type="property" name="The &quot;baud&quot; property" link="NMSettingPPP.html#NMSettingPPP--baud"/>
+ <keyword type="property" name="The &quot;crtscts&quot; property" link="NMSettingPPP.html#NMSettingPPP--crtscts"/>
+ <keyword type="property" name="The &quot;lcp-echo-failure&quot; property" link="NMSettingPPP.html#NMSettingPPP--lcp-echo-failure"/>
+ <keyword type="property" name="The &quot;lcp-echo-interval&quot; property" link="NMSettingPPP.html#NMSettingPPP--lcp-echo-interval"/>
+ <keyword type="property" name="The &quot;mppe-stateful&quot; property" link="NMSettingPPP.html#NMSettingPPP--mppe-stateful"/>
+ <keyword type="property" name="The &quot;mru&quot; property" link="NMSettingPPP.html#NMSettingPPP--mru"/>
+ <keyword type="property" name="The &quot;mtu&quot; property" link="NMSettingPPP.html#NMSettingPPP--mtu"/>
+ <keyword type="property" name="The &quot;no-vj-comp&quot; property" link="NMSettingPPP.html#NMSettingPPP--no-vj-comp"/>
+ <keyword type="property" name="The &quot;noauth&quot; property" link="NMSettingPPP.html#NMSettingPPP--noauth"/>
+ <keyword type="property" name="The &quot;nobsdcomp&quot; property" link="NMSettingPPP.html#NMSettingPPP--nobsdcomp"/>
+ <keyword type="property" name="The &quot;nodeflate&quot; property" link="NMSettingPPP.html#NMSettingPPP--nodeflate"/>
+ <keyword type="property" name="The &quot;refuse-chap&quot; property" link="NMSettingPPP.html#NMSettingPPP--refuse-chap"/>
+ <keyword type="property" name="The &quot;refuse-eap&quot; property" link="NMSettingPPP.html#NMSettingPPP--refuse-eap"/>
+ <keyword type="property" name="The &quot;refuse-mschap&quot; property" link="NMSettingPPP.html#NMSettingPPP--refuse-mschap"/>
+ <keyword type="property" name="The &quot;refuse-mschapv2&quot; property" link="NMSettingPPP.html#NMSettingPPP--refuse-mschapv2"/>
+ <keyword type="property" name="The &quot;refuse-pap&quot; property" link="NMSettingPPP.html#NMSettingPPP--refuse-pap"/>
+ <keyword type="property" name="The &quot;require-mppe&quot; property" link="NMSettingPPP.html#NMSettingPPP--require-mppe"/>
+ <keyword type="property" name="The &quot;require-mppe-128&quot; property" link="NMSettingPPP.html#NMSettingPPP--require-mppe-128"/>
<keyword type="macro" name="NM_SETTING_PPPOE_SETTING_NAME" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingPPPOEError" link="NMSettingPPPOE.html#NMSettingPPPOEError"/>
+ <keyword type="enum" name="enum NMSettingPPPOEError" link="NMSettingPPPOE.html#NMSettingPPPOEError-enum"/>
<keyword type="macro" name="NM_SETTING_PPPOE_ERROR" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_pppoe_error_quark ()" link="NMSettingPPPOE.html#nm-setting-pppoe-error-quark"/>
<keyword type="macro" name="NM_SETTING_PPPOE_SERVICE" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-SERVICE:CAPS"/>
<keyword type="macro" name="NM_SETTING_PPPOE_USERNAME" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-USERNAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_PPPOE_PASSWORD" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD:CAPS"/>
<keyword type="macro" name="NM_SETTING_PPPOE_PASSWORD_FLAGS" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS"/>
- <keyword type="property" name="The “password†property" link="NMSettingPPPOE.html#NMSettingPPPOE--password"/>
- <keyword type="property" name="The “password-flags†property" link="NMSettingPPPOE.html#NMSettingPPPOE--password-flags"/>
- <keyword type="property" name="The “service†property" link="NMSettingPPPOE.html#NMSettingPPPOE--service"/>
- <keyword type="property" name="The “username†property" link="NMSettingPPPOE.html#NMSettingPPPOE--username"/>
- <keyword type="function" name="nm_setting_vpn_error_quark ()" link="NMSettingVPN.html#nm-setting-vpn-error-quark"/>
- <keyword type="function" name="NMVPNIterFunc ()" link="NMSettingVPN.html#NMVPNIterFunc"/>
- <keyword type="function" name="nm_setting_vpn_new ()" link="NMSettingVPN.html#nm-setting-vpn-new"/>
- <keyword type="function" name="nm_setting_vpn_get_service_type ()" link="NMSettingVPN.html#nm-setting-vpn-get-service-type"/>
- <keyword type="function" name="nm_setting_vpn_get_user_name ()" link="NMSettingVPN.html#nm-setting-vpn-get-user-name"/>
- <keyword type="function" name="nm_setting_vpn_get_num_data_items ()" link="NMSettingVPN.html#nm-setting-vpn-get-num-data-items"/>
- <keyword type="function" name="nm_setting_vpn_add_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-add-data-item"/>
- <keyword type="function" name="nm_setting_vpn_get_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-get-data-item"/>
- <keyword type="function" name="nm_setting_vpn_remove_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-remove-data-item"/>
- <keyword type="function" name="nm_setting_vpn_foreach_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-foreach-data-item"/>
- <keyword type="function" name="nm_setting_vpn_get_num_secrets ()" link="NMSettingVPN.html#nm-setting-vpn-get-num-secrets"/>
- <keyword type="function" name="nm_setting_vpn_add_secret ()" link="NMSettingVPN.html#nm-setting-vpn-add-secret"/>
- <keyword type="function" name="nm_setting_vpn_get_secret ()" link="NMSettingVPN.html#nm-setting-vpn-get-secret"/>
- <keyword type="function" name="nm_setting_vpn_remove_secret ()" link="NMSettingVPN.html#nm-setting-vpn-remove-secret"/>
- <keyword type="function" name="nm_setting_vpn_foreach_secret ()" link="NMSettingVPN.html#nm-setting-vpn-foreach-secret"/>
+ <keyword type="struct" name="NMSettingPPPOE" link="NMSettingPPPOE.html#NMSettingPPPOE-struct"/>
+ <keyword type="struct" name="NMSettingPPPOEClass" link="NMSettingPPPOE.html#NMSettingPPPOEClass"/>
+ <keyword type="function" name="nm_setting_pppoe_new ()" link="NMSettingPPPOE.html#nm-setting-pppoe-new"/>
+ <keyword type="function" name="nm_setting_pppoe_get_service ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-service"/>
+ <keyword type="function" name="nm_setting_pppoe_get_username ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-username"/>
+ <keyword type="function" name="nm_setting_pppoe_get_password ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-password"/>
+ <keyword type="function" name="nm_setting_pppoe_get_password_flags ()" link="NMSettingPPPOE.html#nm-setting-pppoe-get-password-flags"/>
+ <keyword type="property" name="The &quot;password&quot; property" link="NMSettingPPPOE.html#NMSettingPPPOE--password"/>
+ <keyword type="property" name="The &quot;password-flags&quot; property" link="NMSettingPPPOE.html#NMSettingPPPOE--password-flags"/>
+ <keyword type="property" name="The &quot;service&quot; property" link="NMSettingPPPOE.html#NMSettingPPPOE--service"/>
+ <keyword type="property" name="The &quot;username&quot; property" link="NMSettingPPPOE.html#NMSettingPPPOE--username"/>
<keyword type="macro" name="NM_SETTING_VPN_SETTING_NAME" link="NMSettingVPN.html#NM-SETTING-VPN-SETTING-NAME:CAPS"/>
- <keyword type="enum" name="enum NMSettingVpnError" link="NMSettingVPN.html#NMSettingVpnError"/>
+ <keyword type="enum" name="enum NMSettingVpnError" link="NMSettingVPN.html#NMSettingVpnError-enum"/>
<keyword type="macro" name="NM_SETTING_VPN_ERROR" link="NMSettingVPN.html#NM-SETTING-VPN-ERROR:CAPS"/>
+ <keyword type="function" name="nm_setting_vpn_error_quark ()" link="NMSettingVPN.html#nm-setting-vpn-error-quark"/>
<keyword type="macro" name="NM_SETTING_VPN_SERVICE_TYPE" link="NMSettingVPN.html#NM-SETTING-VPN-SERVICE-TYPE:CAPS"/>
<keyword type="macro" name="NM_SETTING_VPN_USER_NAME" link="NMSettingVPN.html#NM-SETTING-VPN-USER-NAME:CAPS"/>
<keyword type="macro" name="NM_SETTING_VPN_DATA" link="NMSettingVPN.html#NM-SETTING-VPN-DATA:CAPS"/>
<keyword type="macro" name="NM_SETTING_VPN_SECRETS" link="NMSettingVPN.html#NM-SETTING-VPN-SECRETS:CAPS"/>
- <keyword type="property" name="The “data†property" link="NMSettingVPN.html#NMSettingVPN--data"/>
- <keyword type="property" name="The “secrets†property" link="NMSettingVPN.html#NMSettingVPN--secrets"/>
- <keyword type="property" name="The “service-type†property" link="NMSettingVPN.html#NMSettingVPN--service-type"/>
- <keyword type="property" name="The “user-name†property" link="NMSettingVPN.html#NMSettingVPN--user-name"/>
- <keyword type="function" name="nm_utils_init ()" link="libnm-util-nm-utils.html#nm-utils-init"/>
- <keyword type="function" name="nm_utils_deinit ()" link="libnm-util-nm-utils.html#nm-utils-deinit"/>
- <keyword type="function" name="nm_utils_is_empty_ssid ()" link="libnm-util-nm-utils.html#nm-utils-is-empty-ssid"/>
- <keyword type="function" name="nm_utils_escape_ssid ()" link="libnm-util-nm-utils.html#nm-utils-escape-ssid"/>
- <keyword type="function" name="nm_utils_same_ssid ()" link="libnm-util-nm-utils.html#nm-utils-same-ssid"/>
- <keyword type="function" name="nm_utils_ssid_to_utf8 ()" link="libnm-util-nm-utils.html#nm-utils-ssid-to-utf8"/>
- <keyword type="function" name="nm_utils_gvalue_hash_dup ()" link="libnm-util-nm-utils.html#nm-utils-gvalue-hash-dup"/>
- <keyword type="function" name="nm_utils_slist_free ()" link="libnm-util-nm-utils.html#nm-utils-slist-free"/>
- <keyword type="function" name="nm_utils_security_valid ()" link="libnm-util-nm-utils.html#nm-utils-security-valid"/>
- <keyword type="function" name="nm_utils_ap_mode_security_valid ()" link="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" since="0.9.8"/>
- <keyword type="function" name="nm_utils_wep_key_valid ()" link="libnm-util-nm-utils.html#nm-utils-wep-key-valid" since="0.9.8"/>
- <keyword type="function" name="nm_utils_wpa_psk_valid ()" link="libnm-util-nm-utils.html#nm-utils-wpa-psk-valid" since="0.9.8"/>
- <keyword type="function" name="nm_utils_ip4_addresses_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-addresses-from-gvalue"/>
- <keyword type="function" name="nm_utils_ip4_addresses_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-addresses-to-gvalue"/>
- <keyword type="function" name="nm_utils_ip4_routes_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-routes-from-gvalue"/>
- <keyword type="function" name="nm_utils_ip4_routes_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-routes-to-gvalue"/>
- <keyword type="function" name="nm_utils_ip4_netmask_to_prefix ()" link="libnm-util-nm-utils.html#nm-utils-ip4-netmask-to-prefix"/>
- <keyword type="function" name="nm_utils_ip4_prefix_to_netmask ()" link="libnm-util-nm-utils.html#nm-utils-ip4-prefix-to-netmask"/>
- <keyword type="function" name="nm_utils_ip4_get_default_prefix ()" link="libnm-util-nm-utils.html#nm-utils-ip4-get-default-prefix"/>
- <keyword type="function" name="nm_utils_ip6_addresses_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-addresses-from-gvalue"/>
- <keyword type="function" name="nm_utils_ip6_addresses_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-addresses-to-gvalue"/>
- <keyword type="function" name="nm_utils_ip6_routes_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-routes-from-gvalue"/>
- <keyword type="function" name="nm_utils_ip6_routes_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-routes-to-gvalue"/>
- <keyword type="function" name="nm_utils_ip6_dns_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-dns-from-gvalue"/>
- <keyword type="function" name="nm_utils_ip6_dns_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-dns-to-gvalue"/>
- <keyword type="function" name="nm_utils_uuid_generate ()" link="libnm-util-nm-utils.html#nm-utils-uuid-generate"/>
- <keyword type="function" name="nm_utils_uuid_generate_from_string ()" link="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string"/>
- <keyword type="function" name="nm_utils_rsa_key_encrypt ()" link="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt"/>
- <keyword type="function" name="nm_utils_file_is_pkcs12 ()" link="libnm-util-nm-utils.html#nm-utils-file-is-pkcs12"/>
- <keyword type="function" name="nm_utils_wifi_freq_to_channel ()" link="libnm-util-nm-utils.html#nm-utils-wifi-freq-to-channel"/>
- <keyword type="function" name="nm_utils_wifi_channel_to_freq ()" link="libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq"/>
- <keyword type="function" name="nm_utils_wifi_find_next_channel ()" link="libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel"/>
- <keyword type="function" name="nm_utils_wifi_is_channel_valid ()" link="libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid"/>
- <keyword type="function" name="nm_utils_hwaddr_len ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-len"/>
- <keyword type="function" name="nm_utils_hwaddr_type ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-type"/>
- <keyword type="function" name="nm_utils_hwaddr_ntoa ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa"/>
- <keyword type="function" name="nm_utils_hwaddr_atoba ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba"/>
- <keyword type="function" name="nm_utils_hwaddr_aton ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-aton"/>
- <keyword type="function" name="nm_utils_iface_valid_name ()" link="libnm-util-nm-utils.html#nm-utils-iface-valid-name" since="0.9.8"/>
- <keyword type="function" name="nm_utils_is_uuid ()" link="libnm-util-nm-utils.html#nm-utils-is-uuid" since="0.9.8"/>
- <keyword type="enum" name="enum NMUtilsSecurityType" link="libnm-util-nm-utils.html#NMUtilsSecurityType"/>
+ <keyword type="struct" name="NMSettingVPN" link="NMSettingVPN.html#NMSettingVPN-struct"/>
+ <keyword type="struct" name="NMSettingVPNClass" link="NMSettingVPN.html#NMSettingVPNClass"/>
+ <keyword type="function" name="NMVPNIterFunc ()" link="NMSettingVPN.html#NMVPNIterFunc"/>
+ <keyword type="function" name="nm_setting_vpn_new ()" link="NMSettingVPN.html#nm-setting-vpn-new"/>
+ <keyword type="function" name="nm_setting_vpn_get_service_type ()" link="NMSettingVPN.html#nm-setting-vpn-get-service-type"/>
+ <keyword type="function" name="nm_setting_vpn_get_user_name ()" link="NMSettingVPN.html#nm-setting-vpn-get-user-name"/>
+ <keyword type="function" name="nm_setting_vpn_get_num_data_items ()" link="NMSettingVPN.html#nm-setting-vpn-get-num-data-items"/>
+ <keyword type="function" name="nm_setting_vpn_add_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-add-data-item"/>
+ <keyword type="function" name="nm_setting_vpn_get_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-get-data-item"/>
+ <keyword type="function" name="nm_setting_vpn_remove_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-remove-data-item"/>
+ <keyword type="function" name="nm_setting_vpn_foreach_data_item ()" link="NMSettingVPN.html#nm-setting-vpn-foreach-data-item"/>
+ <keyword type="function" name="nm_setting_vpn_get_num_secrets ()" link="NMSettingVPN.html#nm-setting-vpn-get-num-secrets"/>
+ <keyword type="function" name="nm_setting_vpn_add_secret ()" link="NMSettingVPN.html#nm-setting-vpn-add-secret"/>
+ <keyword type="function" name="nm_setting_vpn_get_secret ()" link="NMSettingVPN.html#nm-setting-vpn-get-secret"/>
+ <keyword type="function" name="nm_setting_vpn_remove_secret ()" link="NMSettingVPN.html#nm-setting-vpn-remove-secret"/>
+ <keyword type="function" name="nm_setting_vpn_foreach_secret ()" link="NMSettingVPN.html#nm-setting-vpn-foreach-secret"/>
+ <keyword type="property" name="The &quot;data&quot; property" link="NMSettingVPN.html#NMSettingVPN--data"/>
+ <keyword type="property" name="The &quot;secrets&quot; property" link="NMSettingVPN.html#NMSettingVPN--secrets"/>
+ <keyword type="property" name="The &quot;service-type&quot; property" link="NMSettingVPN.html#NMSettingVPN--service-type"/>
+ <keyword type="property" name="The &quot;user-name&quot; property" link="NMSettingVPN.html#NMSettingVPN--user-name"/>
+ <keyword type="function" name="nm_utils_init ()" link="libnm-util-nm-utils.html#nm-utils-init"/>
+ <keyword type="function" name="nm_utils_deinit ()" link="libnm-util-nm-utils.html#nm-utils-deinit"/>
+ <keyword type="function" name="nm_utils_is_empty_ssid ()" link="libnm-util-nm-utils.html#nm-utils-is-empty-ssid"/>
+ <keyword type="function" name="nm_utils_escape_ssid ()" link="libnm-util-nm-utils.html#nm-utils-escape-ssid"/>
+ <keyword type="function" name="nm_utils_same_ssid ()" link="libnm-util-nm-utils.html#nm-utils-same-ssid"/>
+ <keyword type="function" name="nm_utils_ssid_to_utf8 ()" link="libnm-util-nm-utils.html#nm-utils-ssid-to-utf8"/>
+ <keyword type="function" name="nm_utils_gvalue_hash_dup ()" link="libnm-util-nm-utils.html#nm-utils-gvalue-hash-dup"/>
+ <keyword type="function" name="nm_utils_slist_free ()" link="libnm-util-nm-utils.html#nm-utils-slist-free" deprecated="use g_slist_free_full()."/>
+ <keyword type="enum" name="enum NMUtilsSecurityType" link="libnm-util-nm-utils.html#NMUtilsSecurityType-enum"/>
+ <keyword type="function" name="nm_utils_security_valid ()" link="libnm-util-nm-utils.html#nm-utils-security-valid"/>
+ <keyword type="function" name="nm_utils_ap_mode_security_valid ()" link="libnm-util-nm-utils.html#nm-utils-ap-mode-security-valid" since="0.9.8"/>
+ <keyword type="function" name="nm_utils_wep_key_valid ()" link="libnm-util-nm-utils.html#nm-utils-wep-key-valid" since="0.9.8"/>
+ <keyword type="function" name="nm_utils_wpa_psk_valid ()" link="libnm-util-nm-utils.html#nm-utils-wpa-psk-valid" since="0.9.8"/>
+ <keyword type="function" name="nm_utils_ip4_addresses_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-addresses-from-gvalue"/>
+ <keyword type="function" name="nm_utils_ip4_addresses_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-addresses-to-gvalue"/>
+ <keyword type="function" name="nm_utils_ip4_routes_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-routes-from-gvalue"/>
+ <keyword type="function" name="nm_utils_ip4_routes_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip4-routes-to-gvalue"/>
+ <keyword type="function" name="nm_utils_ip4_netmask_to_prefix ()" link="libnm-util-nm-utils.html#nm-utils-ip4-netmask-to-prefix"/>
+ <keyword type="function" name="nm_utils_ip4_prefix_to_netmask ()" link="libnm-util-nm-utils.html#nm-utils-ip4-prefix-to-netmask"/>
+ <keyword type="function" name="nm_utils_ip4_get_default_prefix ()" link="libnm-util-nm-utils.html#nm-utils-ip4-get-default-prefix"/>
+ <keyword type="function" name="nm_utils_ip6_addresses_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-addresses-from-gvalue"/>
+ <keyword type="function" name="nm_utils_ip6_addresses_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-addresses-to-gvalue"/>
+ <keyword type="function" name="nm_utils_ip6_routes_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-routes-from-gvalue"/>
+ <keyword type="function" name="nm_utils_ip6_routes_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-routes-to-gvalue"/>
+ <keyword type="function" name="nm_utils_ip6_dns_from_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-dns-from-gvalue"/>
+ <keyword type="function" name="nm_utils_ip6_dns_to_gvalue ()" link="libnm-util-nm-utils.html#nm-utils-ip6-dns-to-gvalue"/>
+ <keyword type="function" name="nm_utils_uuid_generate ()" link="libnm-util-nm-utils.html#nm-utils-uuid-generate"/>
+ <keyword type="function" name="nm_utils_uuid_generate_from_string ()" link="libnm-util-nm-utils.html#nm-utils-uuid-generate-from-string"/>
+ <keyword type="function" name="nm_utils_rsa_key_encrypt ()" link="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt"/>
+ <keyword type="function" name="nm_utils_rsa_key_encrypt_aes ()" link="libnm-util-nm-utils.html#nm-utils-rsa-key-encrypt-aes"/>
+ <keyword type="function" name="nm_utils_file_is_pkcs12 ()" link="libnm-util-nm-utils.html#nm-utils-file-is-pkcs12"/>
+ <keyword type="function" name="nm_utils_wifi_freq_to_channel ()" link="libnm-util-nm-utils.html#nm-utils-wifi-freq-to-channel"/>
+ <keyword type="function" name="nm_utils_wifi_channel_to_freq ()" link="libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq"/>
+ <keyword type="function" name="nm_utils_wifi_find_next_channel ()" link="libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel"/>
+ <keyword type="function" name="nm_utils_wifi_is_channel_valid ()" link="libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid"/>
<keyword type="macro" name="NM_UTILS_HWADDR_LEN_MAX" link="libnm-util-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS"/>
+ <keyword type="function" name="nm_utils_hwaddr_len ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-len"/>
+ <keyword type="function" name="nm_utils_hwaddr_type ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-type" deprecated=""/>
+ <keyword type="function" name="nm_utils_hwaddr_ntoa ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa"/>
+ <keyword type="function" name="nm_utils_hwaddr_atoba ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-atoba"/>
+ <keyword type="function" name="nm_utils_hwaddr_aton ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-aton"/>
+ <keyword type="function" name="nm_utils_hwaddr_ntoa_len ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-ntoa-len" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_hwaddr_aton_len ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-aton-len" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_hwaddr_valid ()" link="libnm-util-nm-utils.html#nm-utils-hwaddr-valid" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_bin2hexstr ()" link="libnm-util-nm-utils.html#nm-utils-bin2hexstr" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_hex2byte ()" link="libnm-util-nm-utils.html#nm-utils-hex2byte" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_hexstr2bin ()" link="libnm-util-nm-utils.html#nm-utils-hexstr2bin" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_iface_valid_name ()" link="libnm-util-nm-utils.html#nm-utils-iface-valid-name" since="0.9.8"/>
+ <keyword type="function" name="nm_utils_is_uuid ()" link="libnm-util-nm-utils.html#nm-utils-is-uuid" since="0.9.8"/>
+ <keyword type="macro" name="NM_UTILS_INET_ADDRSTRLEN" link="libnm-util-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS"/>
+ <keyword type="function" name="nm_utils_inet4_ntop ()" link="libnm-util-nm-utils.html#nm-utils-inet4-ntop" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_inet6_ntop ()" link="libnm-util-nm-utils.html#nm-utils-inet6-ntop" since="0.9.10"/>
+ <keyword type="function" name="nm_utils_check_virtual_device_compatibility ()" link="libnm-util-nm-utils.html#nm-utils-check-virtual-device-compatibility" since="0.9.10"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_UNKNOWN" link="NMConnection.html#NM-CONNECTION-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND" link="NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID" link="NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_SETTING_NOT_FOUND" link="NMConnection.html#NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_ERROR_UNKNOWN" link="NMSetting.html#NM-SETTING-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_ERROR_PROPERTY_NOT_FOUND" link="NMSetting.html#NM-SETTING-ERROR-PROPERTY-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_ERROR_PROPERTY_NOT_SECRET" link="NMSetting.html#NM-SETTING-ERROR-PROPERTY-NOT-SECRET:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH" link="NMSetting.html#NM-SETTING-ERROR-PROPERTY-TYPE-MISMATCH:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SECRET_FLAG_NONE" link="NMSetting.html#NM-SETTING-SECRET-FLAG-NONE:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SECRET_FLAG_AGENT_OWNED" link="NMSetting.html#NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SECRET_FLAG_NOT_SAVED" link="NMSetting.html#NM-SETTING-SECRET-FLAG-NOT-SAVED:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SECRET_FLAG_NOT_REQUIRED" link="NMSetting.html#NM-SETTING-SECRET-FLAG-NOT-REQUIRED:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_EXACT" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_FUZZY" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-FUZZY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_IGNORE_ID" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-ID:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_HASH_FLAG_ALL" link="NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_HASH_FLAG_NO_SECRETS" link="NMSetting.html#NM-SETTING-HASH-FLAG-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_HASH_FLAG_ONLY_SECRETS" link="NMSetting.html#NM-SETTING-HASH-FLAG-ONLY-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DIFF_RESULT_UNKNOWN" link="NMSetting.html#NM-SETTING-DIFF-RESULT-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DIFF_RESULT_IN_A" link="NMSetting.html#NM-SETTING-DIFF-RESULT-IN-A:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DIFF_RESULT_IN_B" link="NMSetting.html#NM-SETTING-DIFF-RESULT-IN-B:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CONNECTION_ERROR_UNKNOWN" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-TYPE-SETTING-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ERROR-IP-CONFIG-NOT-ALLOWED:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRED_ERROR_UNKNOWN" link="NMSettingWired.html#NM-SETTING-WIRED-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRED_ERROR_INVALID_PROPERTY" link="NMSettingWired.html#NM-SETTING-WIRED-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRED_ERROR_MISSING_PROPERTY" link="NMSettingWired.html#NM-SETTING-WIRED-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_ERROR_UNKNOWN" link="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY" link="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY" link="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING" link="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-MISSING-SECURITY-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND" link="NMSettingWireless.html#NM-SETTING-WIRELESS-ERROR-CHANNEL-REQUIRES-BAND:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_SECURITY_ERROR_UNKNOWN" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-MISSING-802-1X-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-802-1X:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-LEAP-REQUIRES-USERNAME:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-ERROR-SHARED-KEY-REQUIRES-WEP:CAPS"/>
+ <keyword type="constant" name="NM_WEP_KEY_TYPE_UNKNOWN" link="NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_WEP_KEY_TYPE_KEY" link="NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-KEY:CAPS"/>
+ <keyword type="constant" name="NM_WEP_KEY_TYPE_PASSPHRASE" link="NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-PASSPHRASE:CAPS"/>
+ <keyword type="constant" name="NM_WEP_KEY_TYPE_LAST" link="NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-LAST:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BLUETOOTH_ERROR_UNKNOWN" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-ERROR-TYPE-SETTING-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SERIAL_ERROR_UNKNOWN" link="NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY" link="NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY" link="NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING" link="NMSettingSerial.html#NM-SETTING-SERIAL-ERROR-MISSING-PPP-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CDMA_ERROR_UNKNOWN" link="NMSettingCdma.html#NM-SETTING-CDMA-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CDMA_ERROR_INVALID_PROPERTY" link="NMSettingCdma.html#NM-SETTING-CDMA-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CDMA_ERROR_MISSING_PROPERTY" link="NMSettingCdma.html#NM-SETTING-CDMA-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING" link="NMSettingCdma.html#NM-SETTING-CDMA-ERROR-MISSING-SERIAL-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_ERROR_UNKNOWN" link="NMSettingGsm.html#NM-SETTING-GSM-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_ERROR_INVALID_PROPERTY" link="NMSettingGsm.html#NM-SETTING-GSM-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_ERROR_MISSING_PROPERTY" link="NMSettingGsm.html#NM-SETTING-GSM-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING" link="NMSettingGsm.html#NM-SETTING-GSM-ERROR-MISSING-SERIAL-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_NETWORK_TYPE_ANY" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-ANY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-UMTS-HSPA:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-GPRS-EDGE:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-UMTS-HSPA:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-GPRS-EDGE:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-PREFER-4G:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_NETWORK_TYPE_4G" link="NMSettingGsm.html#NM-SETTING-GSM-NETWORK-TYPE-4G:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_UNKNOWN" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_ANY" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-ANY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_EGSM" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-EGSM:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_DCS" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-DCS:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_PCS" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-PCS:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_G850" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-G850:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U2100" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U2100:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U1800" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U1800:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U17IV" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U17IV:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U800" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U800:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U850" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U850:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U900" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U900:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U17IX" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U17IX:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U1900" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U1900:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GSM_BAND_U2600" link="NMSettingGsm.html#NM-SETTING-GSM-BAND-U2600:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIMAX_ERROR_UNKNOWN" link="NMSettingWimax.html#NM-SETTING-WIMAX-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY" link="NMSettingWimax.html#NM-SETTING-WIMAX-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY" link="NMSettingWimax.html#NM-SETTING-WIMAX-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BOND_ERROR_UNKNOWN" link="NMSettingBond.html#NM-SETTING-BOND-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BOND_ERROR_INVALID_PROPERTY" link="NMSettingBond.html#NM-SETTING-BOND-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BOND_ERROR_MISSING_PROPERTY" link="NMSettingBond.html#NM-SETTING-BOND-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BOND_ERROR_INVALID_OPTION" link="NMSettingBond.html#NM-SETTING-BOND-ERROR-INVALID-OPTION:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BOND_ERROR_MISSING_OPTION" link="NMSettingBond.html#NM-SETTING-BOND-ERROR-MISSING-OPTION:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BRIDGE_ERROR_UNKNOWN" link="NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY" link="NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BRIDGE_ERROR_MISSING_PROPERTY" link="NMSettingBridge.html#NM-SETTING-BRIDGE-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BRIDGE_PORT_ERROR_UNKNOWN" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BRIDGE_PORT_ERROR_INVALID_PROPERTY" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_BRIDGE_PORT_ERROR_MISSING_PROPERTY" link="NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_TEAM_ERROR_UNKNOWN" link="NMSettingTeam.html#NM-SETTING-TEAM-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_TEAM_ERROR_INVALID_PROPERTY" link="NMSettingTeam.html#NM-SETTING-TEAM-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_TEAM_ERROR_MISSING_PROPERTY" link="NMSettingTeam.html#NM-SETTING-TEAM-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_TEAM_PORT_ERROR_UNKNOWN" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GENERIC_ERROR_UNKNOWN" link="NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY" link="NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY" link="NMSettingGeneric.html#NM-SETTING-GENERIC-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_INFINIBAND_ERROR_UNKNOWN" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_INFINIBAND_ERROR_MISSING_PROPERTY" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_VLAN_ERROR_UNKNOWN" link="NMSettingVlan.html#NM-SETTING-VLAN-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_VLAN_ERROR_INVALID_PROPERTY" link="NMSettingVlan.html#NM-SETTING-VLAN-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_VLAN_ERROR_MISSING_PROPERTY" link="NMSettingVlan.html#NM-SETTING-VLAN-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_VLAN_ERROR_INVALID_PARENT" link="NMSettingVlan.html#NM-SETTING-VLAN-ERROR-INVALID-PARENT:CAPS"/>
+ <keyword type="constant" name="NM_VLAN_INGRESS_MAP" link="NMSettingVlan.html#NM-VLAN-INGRESS-MAP:CAPS"/>
+ <keyword type="constant" name="NM_VLAN_EGRESS_MAP" link="NMSettingVlan.html#NM-VLAN-EGRESS-MAP:CAPS"/>
+ <keyword type="constant" name="NM_VLAN_FLAG_REORDER_HEADERS" link="NMSettingVlan.html#NM-VLAN-FLAG-REORDER-HEADERS:CAPS"/>
+ <keyword type="constant" name="NM_VLAN_FLAG_GVRP" link="NMSettingVlan.html#NM-VLAN-FLAG-GVRP:CAPS"/>
+ <keyword type="constant" name="NM_VLAN_FLAG_LOOSE_BINDING" link="NMSettingVlan.html#NM-VLAN-FLAG-LOOSE-BINDING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_OLPC_MESH_ERROR_UNKNOWN" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_OLPC_MESH_ERROR_MISSING_PROPERTY" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_ADSL_ERROR_UNKNOWN" link="NMSettingAdsl.html#NM-SETTING-ADSL-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_ADSL_ERROR_INVALID_PROPERTY" link="NMSettingAdsl.html#NM-SETTING-ADSL-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_ADSL_ERROR_MISSING_PROPERTY" link="NMSettingAdsl.html#NM-SETTING-ADSL-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DCB_ERROR_UNKNOWN" link="NMSettingDcb.html#NM-SETTING-DCB-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DCB_ERROR_INVALID_PROPERTY" link="NMSettingDcb.html#NM-SETTING-DCB-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DCB_ERROR_MISSING_PROPERTY" link="NMSettingDcb.html#NM-SETTING-DCB-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DCB_FLAG_NONE" link="NMSettingDcb.html#NM-SETTING-DCB-FLAG-NONE:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DCB_FLAG_ENABLE" link="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DCB_FLAG_ADVERTISE" link="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DCB_FLAG_WILLING" link="NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_CK_FORMAT_UNKNOWN" link="NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_CK_FORMAT_X509" link="NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-X509:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_CK_FORMAT_RAW_KEY" link="NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-RAW-KEY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_CK_FORMAT_PKCS12" link="NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-PKCS12:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_CK_SCHEME_UNKNOWN" link="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_CK_SCHEME_BLOB" link="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_CK_SCHEME_PATH" link="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_ERROR_UNKNOWN" link="NMSetting8021x.html#NM-SETTING-802-1X-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_ERROR_INVALID_PROPERTY" link="NMSetting8021x.html#NM-SETTING-802-1X-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_802_1X_ERROR_MISSING_PROPERTY" link="NMSetting8021x.html#NM-SETTING-802-1X-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ERROR-NOT-ALLOWED-FOR-METHOD:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-DISABLED:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-PUBLIC-ADDR:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-TEMP-ADDR:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPP_ERROR_UNKNOWN" link="NMSettingPPP.html#NM-SETTING-PPP-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPP_ERROR_INVALID_PROPERTY" link="NMSettingPPP.html#NM-SETTING-PPP-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPP_ERROR_MISSING_PROPERTY" link="NMSettingPPP.html#NM-SETTING-PPP-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED" link="NMSettingPPP.html#NM-SETTING-PPP-ERROR-REQUIRE-MPPE-NOT-ALLOWED:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPPOE_ERROR_UNKNOWN" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING" link="NMSettingPPPOE.html#NM-SETTING-PPPOE-ERROR-MISSING-PPP-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_VPN_ERROR_UNKNOWN" link="NMSettingVPN.html#NM-SETTING-VPN-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_VPN_ERROR_INVALID_PROPERTY" link="NMSettingVPN.html#NM-SETTING-VPN-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_VPN_ERROR_MISSING_PROPERTY" link="NMSettingVPN.html#NM-SETTING-VPN-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_INVALID" link="libnm-util-nm-utils.html#NMU-SEC-INVALID:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_NONE" link="libnm-util-nm-utils.html#NMU-SEC-NONE:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_STATIC_WEP" link="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_LEAP" link="libnm-util-nm-utils.html#NMU-SEC-LEAP:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_DYNAMIC_WEP" link="libnm-util-nm-utils.html#NMU-SEC-DYNAMIC-WEP:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA_PSK" link="libnm-util-nm-utils.html#NMU-SEC-WPA-PSK:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA_ENTERPRISE" link="libnm-util-nm-utils.html#NMU-SEC-WPA-ENTERPRISE:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA2_PSK" link="libnm-util-nm-utils.html#NMU-SEC-WPA2-PSK:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA2_ENTERPRISE" link="libnm-util-nm-utils.html#NMU-SEC-WPA2-ENTERPRISE:CAPS"/>
</functions>
</book>
diff --git a/docs/libnm-util/html/object-tree.html b/docs/libnm-util/html/object-tree.html
index 404390f12..6cd0dcde9 100644
--- a/docs/libnm-util/html/object-tree.html
+++ b/docs/libnm-util/html/object-tree.html
@@ -2,99 +2,108 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>libnm-util Reference Manual: Object Hierarchy</title>
+<title>Object Hierarchy</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="index.html" title="libnm-util Reference Manual">
<link rel="prev" href="libnm-util-nm-utils.html" title="nm-utils">
<link rel="next" href="api-index-full.html" title="API Index">
-<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="libnm-util-nm-utils.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="libnm-util-nm-utils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
<a name="object-tree"></a>Object Hierarchy</h1></div></div></div>
<pre class="screen">
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
- <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
- <span class="lineart">╰──</span> <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+ <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+ <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+ <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+ <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+ <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</a>
+ <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
+ <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+ <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+ <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+ <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+ <a class="link" href="NMSettingDcb.html" title="NMSettingDcb">NMSettingDcb</a>
+ <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+ <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+ <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+ <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+ <a class="link" href="NMSettingPPP.html" title="NMSettingPPP">NMSettingPPP</a>
+ <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE">NMSettingPPPOE</a>
+ <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+ <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+ <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+ <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+ <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+ <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+ <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+ <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+ <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+ <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
+ <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
GEnum
- <span class="lineart">├──</span> <a class="link" href="NMConnection.html#NMConnectionError" title="enum NMConnectionError">NMConnectionError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat">NMSetting8021xCKFormat</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme">NMSetting8021xCKScheme</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html#NMSetting8021xError" title="enum NMSetting8021xError">NMSetting8021xError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingAdsl.html#NMSettingAdslError" title="enum NMSettingAdslError">NMSettingAdslError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothError" title="enum NMSettingBluetoothError">NMSettingBluetoothError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBond.html#NMSettingBondError" title="enum NMSettingBondError">NMSettingBondError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBridge.html#NMSettingBridgeError" title="enum NMSettingBridgeError">NMSettingBridgeError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortError" title="enum NMSettingBridgePortError">NMSettingBridgePortError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingCdma.html#NMSettingCdmaError" title="enum NMSettingCdmaError">NMSettingCdmaError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags">NMSettingCompareFlags</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingConnection.html#NMSettingConnectionError" title="enum NMSettingConnectionError">NMSettingConnectionError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult">NMSettingDiffResult</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting.html#NMSettingError" title="enum NMSettingError">NMSettingError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingGsm.html#NMSettingGsmError" title="enum NMSettingGsmError">NMSettingGsmError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand" title="enum NMSettingGsmNetworkBand">NMSettingGsmNetworkBand</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType" title="enum NMSettingGsmNetworkType">NMSettingGsmNetworkType</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting.html#NMSettingHashFlags" title="enum NMSettingHashFlags">NMSettingHashFlags</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandError" title="enum NMSettingInfinibandError">NMSettingInfinibandError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigError" title="enum NMSettingIP4ConfigError">NMSettingIP4ConfigError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigError" title="enum NMSettingIP6ConfigError">NMSettingIP6ConfigError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy">NMSettingIP6ConfigPrivacy</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshError" title="enum NMSettingOlpcMeshError">NMSettingOlpcMeshError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingPPP.html#NMSettingPPPError" title="enum NMSettingPPPError">NMSettingPPPError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEError" title="enum NMSettingPPPOEError">NMSettingPPPOEError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags">NMSettingSecretFlags</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingSerial.html#NMSettingSerialError" title="enum NMSettingSerialError">NMSettingSerialError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html#NMSettingVlanError" title="enum NMSettingVlanError">NMSettingVlanError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingVPN.html#NMSettingVpnError" title="enum NMSettingVpnError">NMSettingVpnError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWimax.html#NMSettingWimaxError" title="enum NMSettingWimaxError">NMSettingWimaxError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWired.html#NMSettingWiredError" title="enum NMSettingWiredError">NMSettingWiredError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWireless.html#NMSettingWirelessError" title="enum NMSettingWirelessError">NMSettingWirelessError</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError" title="enum NMSettingWirelessSecurityError">NMSettingWirelessSecurityError</a>
- <span class="lineart">├──</span> <a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType" title="enum NMUtilsSecurityType">NMUtilsSecurityType</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html#NMVlanFlags" title="enum NMVlanFlags">NMVlanFlags</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap">NMVlanPriorityMap</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType">NMWepKeyType</a>
+ <a class="link" href="NMConnection.html#NMConnectionError">NMConnectionError</a>
+ <a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat">NMSetting8021xCKFormat</a>
+ <a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme">NMSetting8021xCKScheme</a>
+ <a class="link" href="NMSetting8021x.html#NMSetting8021xError">NMSetting8021xError</a>
+ <a class="link" href="NMSettingAdsl.html#NMSettingAdslError">NMSettingAdslError</a>
+ <a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothError">NMSettingBluetoothError</a>
+ <a class="link" href="NMSettingBond.html#NMSettingBondError">NMSettingBondError</a>
+ <a class="link" href="NMSettingBridge.html#NMSettingBridgeError">NMSettingBridgeError</a>
+ <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePortError">NMSettingBridgePortError</a>
+ <a class="link" href="NMSettingCdma.html#NMSettingCdmaError">NMSettingCdmaError</a>
+ <a class="link" href="NMSetting.html#NMSettingCompareFlags">NMSettingCompareFlags</a>
+ <a class="link" href="NMSettingConnection.html#NMSettingConnectionError">NMSettingConnectionError</a>
+ <a class="link" href="NMSettingDcb.html#NMSettingDcbError">NMSettingDcbError</a>
+ <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags">NMSettingDcbFlags</a>
+ <a class="link" href="NMSetting.html#NMSettingDiffResult">NMSettingDiffResult</a>
+ <a class="link" href="NMSetting.html#NMSettingError">NMSettingError</a>
+ <a class="link" href="NMSettingGeneric.html#NMSettingGenericError">NMSettingGenericError</a>
+ <a class="link" href="NMSettingGsm.html#NMSettingGsmError">NMSettingGsmError</a>
+ <a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkBand">NMSettingGsmNetworkBand</a>
+ <a class="link" href="NMSettingGsm.html#NMSettingGsmNetworkType">NMSettingGsmNetworkType</a>
+ <a class="link" href="NMSetting.html#NMSettingHashFlags">NMSettingHashFlags</a>
+ <a class="link" href="NMSettingInfiniband.html#NMSettingInfinibandError">NMSettingInfinibandError</a>
+ <a class="link" href="NMSettingIP4Config.html#NMSettingIP4ConfigError">NMSettingIP4ConfigError</a>
+ <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigError">NMSettingIP6ConfigError</a>
+ <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy">NMSettingIP6ConfigPrivacy</a>
+ <a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMeshError">NMSettingOlpcMeshError</a>
+ <a class="link" href="NMSettingPPP.html#NMSettingPPPError">NMSettingPPPError</a>
+ <a class="link" href="NMSettingPPPOE.html#NMSettingPPPOEError">NMSettingPPPOEError</a>
+ <a class="link" href="NMSetting.html#NMSettingSecretFlags">NMSettingSecretFlags</a>
+ <a class="link" href="NMSettingSerial.html#NMSettingSerialError">NMSettingSerialError</a>
+ <a class="link" href="NMSettingTeam.html#NMSettingTeamError">NMSettingTeamError</a>
+ <a class="link" href="NMSettingTeamPort.html#NMSettingTeamPortError">NMSettingTeamPortError</a>
+ <a class="link" href="NMSettingVlan.html#NMSettingVlanError">NMSettingVlanError</a>
+ <a class="link" href="NMSettingVPN.html#NMSettingVpnError">NMSettingVpnError</a>
+ <a class="link" href="NMSettingWimax.html#NMSettingWimaxError">NMSettingWimaxError</a>
+ <a class="link" href="NMSettingWired.html#NMSettingWiredError">NMSettingWiredError</a>
+ <a class="link" href="NMSettingWireless.html#NMSettingWirelessError">NMSettingWirelessError</a>
+ <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurityError">NMSettingWirelessSecurityError</a>
+ <a class="link" href="libnm-util-nm-utils.html#NMUtilsSecurityType">NMUtilsSecurityType</a>
+ <a class="link" href="NMSettingVlan.html#NMVlanFlags">NMVlanFlags</a>
+ <a class="link" href="NMSettingVlan.html#NMVlanPriorityMap">NMVlanPriorityMap</a>
+ <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType">NMWepKeyType</a>
GBoxed
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP4Config.html#NMIP4Address">NMIP4Address</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP4Config.html#NMIP4Route">NMIP4Route</a>
- <span class="lineart">├──</span> <a class="link" href="NMSettingIP6Config.html#NMIP6Address">NMIP6Address</a>
- <span class="lineart">╰──</span> <a class="link" href="NMSettingIP6Config.html#NMIP6Route">NMIP6Route</a>
+ <a class="link" href="NMSettingIP4Config.html#NMIP4Address">NMIP4Address</a>
+ <a class="link" href="NMSettingIP4Config.html#NMIP4Route">NMIP4Route</a>
+ <a class="link" href="NMSettingIP6Config.html#NMIP6Address">NMIP6Address</a>
+ <a class="link" href="NMSettingIP6Config.html#NMIP6Route">NMIP6Route</a>
</pre>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.20</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/right-insensitive.png b/docs/libnm-util/html/right-insensitive.png
deleted file mode 100644
index 4c95785b9..000000000
--- a/docs/libnm-util/html/right-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/libnm-util/html/right.png b/docs/libnm-util/html/right.png
index 76260ec88..92832e3a4 100644
--- a/docs/libnm-util/html/right.png
+++ b/docs/libnm-util/html/right.png
Binary files differ
diff --git a/docs/libnm-util/html/style.css b/docs/libnm-util/html/style.css
index 705a5c9ad..d6f6c26ec 100644
--- a/docs/libnm-util/html/style.css
+++ b/docs/libnm-util/html/style.css
@@ -1,23 +1,15 @@
-body
-{
- font-family: cantarell, sans-serif;
-}
.synopsis, .classsynopsis
{
/* tango:aluminium 1/2 */
background: #eeeeec;
- background: rgba(238, 238, 236, 0.5);
- border: solid 1px rgb(238, 238, 236);
+ border: solid 1px #d3d7cf;
padding: 0.5em;
}
.programlisting
{
/* tango:sky blue 0/1 */
- /* fallback for no rgba support */
background: #e6f3ff;
border: solid 1px #729fcf;
- background: rgba(114, 159, 207, 0.1);
- border: solid 1px rgba(114, 159, 207, 0.2);
padding: 0.5em;
}
.variablelist
@@ -35,6 +27,7 @@ body
{
position: relative;
top: 0em ! important;
+
}
/* this is needed so that the local anchors are displayed below the naviagtion */
div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
@@ -53,20 +46,16 @@ body
*/
body
{
- padding-top: 5em;
- padding-bottom: 500px;
- max-width: 60em;
- }
- p
- {
- max-width: 60em;
+ padding-top: 3.2em;
+ padding-bottom: 20em;
}
/* style and size the navigation bar */
table.navigation#top
{
position: fixed;
- background: #e2e2e2;
- border-bottom: solid 1px #babdb6;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
margin-top: 0;
margin-bottom: 0;
top: 0;
@@ -76,57 +65,21 @@ body
}
.navigation a, .navigation a:visited
{
- /* tango:sky blue 3 */
- color: #204a87;
+ /* tango:scarlet red 3 */
+ color: #a40000;
}
.navigation a:hover
{
- /* tango:sky blue 2 */
- color: #3465a4;
+ /* tango:scarlet red 1 */
+ color: #ef2929;
}
td.shortcuts
{
- /* tango:sky blue 2 */
- color: #3465a4;
+ /* tango:scarlet red 1 */
+ color: #ef2929;
font-size: 80%;
white-space: nowrap;
}
- td.shortcuts .dim
- {
- color: #babdb6;
- }
-}
-@media screen and (min-width: 60em) {
- /* screen larger than 60em */
- body { margin: auto; }
-}
-@media screen and (max-width: 60em) {
- /* screen less than 60em */
- #nav_hierarchy { display: none; }
- #nav_interfaces { display: none; }
- #nav_prerequisites { display: none; }
- #nav_derived_interfaces { display: none; }
- #nav_implementations { display: none; }
- #nav_child_properties { display: none; }
- #nav_style_properties { display: none; }
- #nav_index { display: none; }
- #nav_glossary { display: none; }
- .gallery_image { display: none; }
- .property_flags { display: none; }
- .signal_flags { display: none; }
- .parameter_annotations { display: none; }
- .enum_member_annotations { display: none; }
- .struct_member_annotations { display: none; }
- .union_member_annotations { display: none; }
- /* now that a column is hidden, optimize space */
- col.parameters_name { width: auto; }
- col.parameters_description { width: auto; }
- col.struct_members_name { width: auto; }
- col.struct_members_description { width: auto; }
- col.enum_members_name { width: auto; }
- col.enum_members_description { width: auto; }
- col.union_members_name { width: auto; }
- col.union_members_description { width: auto; }
}
@media print {
table.navigation {
@@ -136,8 +89,9 @@ body
div.titlepage table.navigation {
visibility: visible;
display: table;
- background: #e2e2e2;
- border: solid 1px #babdb6;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
margin-top: 0;
margin-bottom: 0;
top: 0;
@@ -148,7 +102,7 @@ body
.navigation .title
{
- font-size: 120%;
+ font-size: 200%;
}
div.gallery-float
@@ -178,67 +132,6 @@ a:hover
color: #729fcf;
}
-div.informaltable table
-{
- border-collapse: separate;
- border-spacing: 20px 3px;
- border: none;
-}
-
-div.informaltable table td, div.informaltable table th
-{
- vertical-align: top;
-}
-
-.function_type,
-.variable_type,
-.property_type,
-.signal_type,
-.parameter_name,
-.struct_member_name,
-.union_member_name,
-.define_keyword,
-.datatype_keyword,
-.typedef_keyword
-{
- text-align: right;
-}
-
-/* dim non-primary columns */
-.c_punctuation,
-.function_type,
-.variable_type,
-.property_type,
-.signal_type,
-.define_keyword,
-.datatype_keyword,
-.typedef_keyword,
-.property_flags,
-.signal_flags,
-.parameter_annotations,
-.enum_member_annotations,
-.struct_member_annotations,
-.union_member_annotations
-{
- color: #888a85;
-}
-
-.function_type a,
-.function_type a:visited,
-.function_type a:hover,
-.property_type a,
-.property_type a:visited,
-.property_type a:hover,
-.signal_type a,
-.signal_type a:visited,
-.signal_type a:hover,
-.signal_flags a,
-.signal_flags a:visited,
-.signal_flags a:hover
-{
- color: #729fcf;
-}
-
div.table table
{
border-collapse: collapse;
@@ -261,43 +154,14 @@ div.table table th
background-color: #d3d7cf;
}
-h4
-{
- color: #555753;
-}
-
hr
{
- /* tango:aluminium 1 */
- color: #d3d7cf;
- background: #d3d7cf;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
border: none 0px;
height: 1px;
clear: both;
- margin: 2.0em 0em 2.0em 0em;
-}
-
-dl.toc dt
-{
- padding-bottom: 0.25em;
-}
-
-dl.toc > dd > dl > dt
-{
- padding-top: 0.25em;
- padding-bottom: 0.25em;
-}
-
-dl.toc > dt
-{
- padding-top: 1em;
- padding-bottom: 0.5em;
- font-weight: bold;
-}
-
-.parameter
-{
- font-style: normal;
}
.footer
@@ -309,70 +173,31 @@ dl.toc > dt
font-size: 80%;
}
-.informalfigure,
-.figure
-{
- margin: 1em;
-}
-
-.informalexample,
-.example
-{
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
.warning
{
/* tango:orange 0/1 */
background: #ffeed9;
- background: rgba(252, 175, 62, 0.1);
border-color: #ffb04f;
- border-color: rgba(252, 175, 62, 0.2);
}
.note
{
/* tango:chameleon 0/0.5 */
background: #d8ffb2;
- background: rgba(138, 226, 52, 0.1);
border-color: #abf562;
- border-color: rgba(138, 226, 52, 0.2);
}
-div.blockquote
-{
- border-color: #eeeeec;
-}
-.note, .warning, div.blockquote
+.note, .warning
{
padding: 0.5em;
border-width: 1px;
border-style: solid;
- margin: 2em;
}
-.note p, .warning p
+.note h3, .warning h3
{
- margin: 0;
+ margin-top: 0.0em
}
-
-div.warning h3.title,
-div.note h3.title
-{
- display: none;
-}
-
-p + div.section
-{
- margin-top: 1em;
-}
-
-div.refnamediv,
-div.refsynopsisdiv,
-div.refsect1,
-div.refsect2,
-div.toc,
-div.section
+.note p, .warning p
{
- margin-bottom: 1em;
+ margin-bottom: 0.0em
}
/* blob links */
@@ -385,22 +210,11 @@ h2 .extralinks, h3 .extralinks
font-weight: normal;
}
-.lineart
-{
- color: #d3d7cf;
- font-weight: normal;
-}
-
.annotation
{
/* tango:aluminium 5 */
color: #555753;
- font-weight: normal;
-}
-
-.structfield
-{
- font-style: normal;
+ font-size: 80%;
font-weight: normal;
}
@@ -423,7 +237,6 @@ h2 .extralinks, h3 .extralinks
.listing_frame {
/* tango:sky blue 1 */
border: solid 1px #729fcf;
- border: solid 1px rgba(114, 159, 207, 0.2);
padding: 0px;
}
@@ -433,27 +246,19 @@ h2 .extralinks, h3 .extralinks
padding: 0.5em;
}
.listing_lines {
- /* this just adds visual clutter and
- takes precious room from small screens */
- display: none;
-}
-.listing_lines {
/* tango:sky blue 0.5 */
background: #a6c5e3;
- background: rgba(114, 159, 207, 0.2);
/* tango:aluminium 6 */
color: #2e3436;
}
.listing_code {
/* tango:sky blue 0 */
background: #e6f3ff;
- background: rgba(114, 159, 207, 0.1);
}
.listing_code .programlisting {
/* override from previous */
border: none 0px;
padding: 0px;
- background: none;
}
.listing_lines pre, .listing_code pre {
margin: 0px;
diff --git a/docs/libnm-util/html/up-insensitive.png b/docs/libnm-util/html/up-insensitive.png
deleted file mode 100644
index f40498606..000000000
--- a/docs/libnm-util/html/up-insensitive.png
+++ /dev/null
Binary files differ
diff --git a/docs/libnm-util/html/up.png b/docs/libnm-util/html/up.png
index 80b4b37e9..85b3e2a27 100644
--- a/docs/libnm-util/html/up.png
+++ b/docs/libnm-util/html/up.png
Binary files differ
diff --git a/docs/libnm-util/libnm-util-docs.sgml b/docs/libnm-util/libnm-util-docs.sgml
index b2b34c36e..2a23a1736 100644
--- a/docs/libnm-util/libnm-util-docs.sgml
+++ b/docs/libnm-util/libnm-util-docs.sgml
@@ -58,10 +58,14 @@
<xi:include href="xml/nm-setting-bond.xml"/>
<xi:include href="xml/nm-setting-bridge.xml"/>
<xi:include href="xml/nm-setting-bridge-port.xml"/>
+ <xi:include href="xml/nm-setting-team.xml"/>
+ <xi:include href="xml/nm-setting-team-port.xml"/>
+ <xi:include href="xml/nm-setting-generic.xml"/>
<xi:include href="xml/nm-setting-infiniband.xml"/>
<xi:include href="xml/nm-setting-vlan.xml"/>
<xi:include href="xml/nm-setting-olpc-mesh.xml"/>
<xi:include href="xml/nm-setting-adsl.xml"/>
+ <xi:include href="xml/nm-setting-dcb.xml"/>
<xi:include href="xml/nm-setting-8021x.xml"/>
<xi:include href="xml/nm-setting-ip4-config.xml"/>
<xi:include href="xml/nm-setting-ip6-config.xml"/>
diff --git a/docs/libnm-util/libnm-util-sections.txt b/docs/libnm-util/libnm-util-sections.txt
index 49ebc6223..69bb1dfa1 100644
--- a/docs/libnm-util/libnm-util-sections.txt
+++ b/docs/libnm-util/libnm-util-sections.txt
@@ -1,11 +1,15 @@
<SECTION>
<FILE>nm-connection</FILE>
<TITLE>NMConnection</TITLE>
+NM_CONNECTION_SECRETS_UPDATED
+NM_CONNECTION_SECRETS_CLEARED
+NM_CONNECTION_CHANGED
+NM_CONNECTION_PATH
NMConnectionError
NM_CONNECTION_ERROR
nm_connection_error_quark
-NM_CONNECTION_PATH
NMConnection
+NMConnectionClass
nm_connection_new
nm_connection_new_from_hash
nm_connection_duplicate
@@ -15,6 +19,7 @@ nm_connection_remove_setting
nm_connection_get_setting
nm_connection_get_setting_by_name
nm_connection_replace_settings
+nm_connection_replace_settings_from_connection
nm_connection_compare
nm_connection_diff
nm_connection_verify
@@ -33,13 +38,19 @@ nm_connection_lookup_setting_type
nm_connection_lookup_setting_type_by_quark
nm_connection_get_uuid
nm_connection_get_id
+nm_connection_get_connection_type
+nm_connection_get_virtual_device_description
nm_connection_get_setting_802_1x
nm_connection_get_setting_bluetooth
nm_connection_get_setting_bond
+nm_connection_get_setting_team
+nm_connection_get_setting_team_port
nm_connection_get_setting_bridge
nm_connection_get_setting_bridge_port
nm_connection_get_setting_cdma
nm_connection_get_setting_connection
+nm_connection_get_setting_dcb
+nm_connection_get_setting_generic
nm_connection_get_setting_gsm
nm_connection_get_setting_infiniband
nm_connection_get_setting_ip4_config
@@ -56,7 +67,6 @@ nm_connection_get_setting_wireless
nm_connection_get_setting_wireless_security
nm_connection_get_setting_vlan
<SUBSECTION Standard>
-NMConnectionClass
NM_CONNECTION
NM_CONNECTION_CLASS
NM_CONNECTION_GET_CLASS
@@ -81,6 +91,7 @@ NMSettingSecretFlags
NMSettingCompareFlags
NMSetting
NMSettingClearSecretsWithFlagsFn
+NMSettingClass
NMSettingValueIterFn
NMSettingHashFlags
nm_setting_to_hash
@@ -101,7 +112,6 @@ nm_setting_get_secret_flags
nm_setting_set_secret_flags
nm_setting_get_virtual_iface_name
<SUBSECTION Standard>
-NMSettingClass
NM_IS_SETTING
NM_IS_SETTING_CLASS
NM_SETTING
@@ -152,11 +162,14 @@ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS
NM_SETTING_802_1X_PIN
NM_SETTING_802_1X_PIN_FLAGS
NM_SETTING_802_1X_SYSTEM_CA_CERTS
+NMSetting8021x
+NMSetting8021xClass
nm_setting_802_1x_new
nm_setting_802_1x_get_num_eap_methods
nm_setting_802_1x_get_eap_method
nm_setting_802_1x_add_eap_method
nm_setting_802_1x_remove_eap_method
+nm_setting_802_1x_remove_eap_method_by_value
nm_setting_802_1x_clear_eap_methods
nm_setting_802_1x_get_identity
nm_setting_802_1x_get_anonymous_identity
@@ -173,6 +186,7 @@ nm_setting_802_1x_get_num_altsubject_matches
nm_setting_802_1x_get_altsubject_match
nm_setting_802_1x_add_altsubject_match
nm_setting_802_1x_remove_altsubject_match
+nm_setting_802_1x_remove_altsubject_match_by_value
nm_setting_802_1x_clear_altsubject_matches
nm_setting_802_1x_get_client_cert_scheme
nm_setting_802_1x_get_client_cert_blob
@@ -192,6 +206,7 @@ nm_setting_802_1x_get_num_phase2_altsubject_matches
nm_setting_802_1x_get_phase2_altsubject_match
nm_setting_802_1x_add_phase2_altsubject_match
nm_setting_802_1x_remove_phase2_altsubject_match
+nm_setting_802_1x_remove_phase2_altsubject_match_by_value
nm_setting_802_1x_clear_phase2_altsubject_matches
nm_setting_802_1x_get_phase2_client_cert_scheme
nm_setting_802_1x_get_phase2_client_cert_blob
@@ -218,8 +233,6 @@ nm_setting_802_1x_get_phase2_private_key_password
nm_setting_802_1x_get_phase2_private_key_password_flags
nm_setting_802_1x_get_phase2_private_key_format
<SUBSECTION Standard>
-NMSetting8021x
-NMSetting8021xClass
NM_IS_SETTING_802_1X
NM_IS_SETTING_802_1X_CLASS
NM_SETTING_802_1X
@@ -248,6 +261,8 @@ NM_SETTING_ADSL_PROTOCOL_PPPOE
NM_SETTING_ADSL_PROTOCOL_IPOATM
NM_SETTING_ADSL_ENCAPSULATION_VCMUX
NM_SETTING_ADSL_ENCAPSULATION_LLC
+NMSettingAdsl
+NMSettingAdslClass
nm_setting_adsl_new
nm_setting_adsl_get_username
nm_setting_adsl_get_password
@@ -257,8 +272,6 @@ nm_setting_adsl_get_vpi
nm_setting_adsl_get_vci
nm_setting_adsl_get_password_flags
<SUBSECTION Standard>
-NMSettingAdsl
-NMSettingAdslClass
NM_IS_SETTING_ADSL
NM_IS_SETTING_ADSL_CLASS
NM_SETTING_ADSL
@@ -279,12 +292,12 @@ NM_SETTING_BLUETOOTH_BDADDR
NM_SETTING_BLUETOOTH_TYPE
NM_SETTING_BLUETOOTH_TYPE_DUN
NM_SETTING_BLUETOOTH_TYPE_PANU
+NMSettingBluetooth
+NMSettingBluetoothClass
nm_setting_bluetooth_new
nm_setting_bluetooth_get_bdaddr
nm_setting_bluetooth_get_connection_type
<SUBSECTION Standard>
-NMSettingBluetooth
-NMSettingBluetoothClass
NM_IS_SETTING_BLUETOOTH
NM_IS_SETTING_BLUETOOTH_CLASS
NM_SETTING_BLUETOOTH
@@ -309,6 +322,16 @@ NM_SETTING_BOND_OPTION_DOWNDELAY
NM_SETTING_BOND_OPTION_UPDELAY
NM_SETTING_BOND_OPTION_ARP_INTERVAL
NM_SETTING_BOND_OPTION_ARP_IP_TARGET
+NM_SETTING_BOND_OPTION_ARP_VALIDATE
+NM_SETTING_BOND_OPTION_PRIMARY
+NM_SETTING_BOND_OPTION_PRIMARY_RESELECT
+NM_SETTING_BOND_OPTION_FAIL_OVER_MAC
+NM_SETTING_BOND_OPTION_USE_CARRIER
+NM_SETTING_BOND_OPTION_AD_SELECT
+NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY
+NM_SETTING_BOND_OPTION_RESEND_IGMP
+NMSettingBond
+NMSettingBondClass
nm_setting_bond_new
nm_setting_bond_get_interface_name
nm_setting_bond_get_num_options
@@ -316,11 +339,10 @@ nm_setting_bond_get_option
nm_setting_bond_get_option_by_name
nm_setting_bond_add_option
nm_setting_bond_remove_option
+nm_setting_bond_validate_option
nm_setting_bond_get_valid_options
nm_setting_bond_get_option_default
<SUBSECTION Standard>
-NMSettingBond
-NMSettingBondClass
NM_IS_SETTING_BOND
NM_IS_SETTING_BOND_CLASS
NM_SETTING_BOND
@@ -338,14 +360,18 @@ NMSettingBridgeError
NM_SETTING_BRIDGE_ERROR
nm_setting_bridge_error_quark
NM_SETTING_BRIDGE_INTERFACE_NAME
+NM_SETTING_BRIDGE_MAC_ADDRESS
NM_SETTING_BRIDGE_STP
NM_SETTING_BRIDGE_PRIORITY
NM_SETTING_BRIDGE_FORWARD_DELAY
NM_SETTING_BRIDGE_HELLO_TIME
NM_SETTING_BRIDGE_MAX_AGE
NM_SETTING_BRIDGE_AGEING_TIME
+NMSettingBridge
+NMSettingBridgeClass
nm_setting_bridge_new
nm_setting_bridge_get_interface_name
+nm_setting_bridge_get_mac_address
nm_setting_bridge_get_stp
nm_setting_bridge_get_priority
nm_setting_bridge_get_forward_delay
@@ -353,8 +379,6 @@ nm_setting_bridge_get_hello_time
nm_setting_bridge_get_max_age
nm_setting_bridge_get_ageing_time
<SUBSECTION Standard>
-NMSettingBridge
-NMSettingBridgeClass
NM_IS_SETTING_BRIDGE
NM_IS_SETTING_BRIDGE_CLASS
NM_SETTING_BRIDGE
@@ -374,13 +398,13 @@ nm_setting_bridge_port_error_quark
NM_SETTING_BRIDGE_PORT_PRIORITY
NM_SETTING_BRIDGE_PORT_PATH_COST
NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE
+NMSettingBridgePort
+NMSettingBridgePortClass
nm_setting_bridge_port_new
nm_setting_bridge_port_get_priority
nm_setting_bridge_port_get_path_cost
nm_setting_bridge_port_get_hairpin_mode
<SUBSECTION Standard>
-NMSettingBridgePort
-NMSettingBridgePortClass
NM_IS_SETTING_BRIDGE_PORT
NM_IS_SETTING_BRIDGE_PORT_CLASS
NM_SETTING_BRIDGE_PORT
@@ -401,14 +425,14 @@ NM_SETTING_CDMA_NUMBER
NM_SETTING_CDMA_USERNAME
NM_SETTING_CDMA_PASSWORD
NM_SETTING_CDMA_PASSWORD_FLAGS
+NMSettingCdma
+NMSettingCdmaClass
nm_setting_cdma_new
nm_setting_cdma_get_number
nm_setting_cdma_get_username
nm_setting_cdma_get_password
nm_setting_cdma_get_password_flags
<SUBSECTION Standard>
-NMSettingCdma
-NMSettingCdmaClass
NM_IS_SETTING_CDMA
NM_IS_SETTING_CDMA_CLASS
NM_SETTING_CDMA
@@ -427,6 +451,7 @@ NM_SETTING_CONNECTION_ERROR
nm_setting_connection_error_quark
NM_SETTING_CONNECTION_ID
NM_SETTING_CONNECTION_UUID
+NM_SETTING_CONNECTION_INTERFACE_NAME
NM_SETTING_CONNECTION_TYPE
NM_SETTING_CONNECTION_AUTOCONNECT
NM_SETTING_CONNECTION_TIMESTAMP
@@ -436,10 +461,13 @@ NM_SETTING_CONNECTION_ZONE
NM_SETTING_CONNECTION_MASTER
NM_SETTING_CONNECTION_SLAVE_TYPE
NM_SETTING_CONNECTION_SECONDARIES
+NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT
NMSettingConnection
+NMSettingConnectionClass
nm_setting_connection_new
nm_setting_connection_get_id
nm_setting_connection_get_uuid
+nm_setting_connection_get_interface_name
nm_setting_connection_get_connection_type
nm_setting_connection_get_autoconnect
nm_setting_connection_get_timestamp
@@ -450,6 +478,7 @@ nm_setting_connection_get_zone
nm_setting_connection_permissions_user_allowed
nm_setting_connection_add_permission
nm_setting_connection_remove_permission
+nm_setting_connection_remove_permission_by_value
nm_setting_connection_get_master
nm_setting_connection_is_slave_type
nm_setting_connection_get_slave_type
@@ -457,8 +486,9 @@ nm_setting_connection_get_num_secondaries
nm_setting_connection_get_secondary
nm_setting_connection_add_secondary
nm_setting_connection_remove_secondary
+nm_setting_connection_remove_secondary_by_value
+nm_setting_connection_get_gateway_ping_timeout
<SUBSECTION Standard>
-NMSettingConnectionClass
NM_IS_SETTING_CONNECTION
NM_IS_SETTING_CONNECTION_CLASS
NM_SETTING_CONNECTION
@@ -469,6 +499,85 @@ nm_setting_connection_get_type
</SECTION>
<SECTION>
+<FILE>nm-setting-dcb</FILE>
+<TITLE>NMSettingDcb</TITLE>
+NM_SETTING_DCB_SETTING_NAME
+NMSettingDcbError
+NM_SETTING_DCB_ERROR
+nm_setting_dcb_error_quark
+NMSettingDcbFlags
+NM_SETTING_DCB_FCOE_MODE_FABRIC
+NM_SETTING_DCB_FCOE_MODE_VN2VN
+NM_SETTING_DCB_APP_FCOE_FLAGS
+NM_SETTING_DCB_APP_FCOE_PRIORITY
+NM_SETTING_DCB_APP_FCOE_MODE
+NM_SETTING_DCB_APP_ISCSI_FLAGS
+NM_SETTING_DCB_APP_ISCSI_PRIORITY
+NM_SETTING_DCB_APP_FIP_FLAGS
+NM_SETTING_DCB_APP_FIP_PRIORITY
+NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS
+NM_SETTING_DCB_PRIORITY_FLOW_CONTROL
+NM_SETTING_DCB_PRIORITY_GROUP_FLAGS
+NM_SETTING_DCB_PRIORITY_GROUP_ID
+NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH
+NM_SETTING_DCB_PRIORITY_BANDWIDTH
+NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH
+NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS
+NMSettingDcb
+NMSettingDcbClass
+nm_setting_dcb_new
+nm_setting_dcb_get_app_fcoe_flags
+nm_setting_dcb_get_app_fcoe_priority
+nm_setting_dcb_get_app_fcoe_mode
+nm_setting_dcb_get_app_iscsi_flags
+nm_setting_dcb_get_app_iscsi_priority
+nm_setting_dcb_get_app_fip_flags
+nm_setting_dcb_get_app_fip_priority
+nm_setting_dcb_get_priority_flow_control_flags
+nm_setting_dcb_get_priority_flow_control
+nm_setting_dcb_set_priority_flow_control
+nm_setting_dcb_get_priority_group_flags
+nm_setting_dcb_get_priority_group_id
+nm_setting_dcb_set_priority_group_id
+nm_setting_dcb_get_priority_group_bandwidth
+nm_setting_dcb_set_priority_group_bandwidth
+nm_setting_dcb_get_priority_bandwidth
+nm_setting_dcb_set_priority_bandwidth
+nm_setting_dcb_get_priority_strict_bandwidth
+nm_setting_dcb_set_priority_strict_bandwidth
+nm_setting_dcb_get_priority_traffic_class
+nm_setting_dcb_set_priority_traffic_class
+<SUBSECTION Standard>
+NM_IS_SETTING_DCB
+NM_IS_SETTING_DCB_CLASS
+NM_SETTING_DCB
+NM_SETTING_DCB_CLASS
+NM_SETTING_DCB_GET_CLASS
+NM_TYPE_SETTING_DCB
+nm_setting_dcb_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-generic</FILE>
+<TITLE>NMSettingGeneric</TITLE>
+NM_SETTING_GENERIC_SETTING_NAME
+NMSettingGenericError
+NM_SETTING_GENERIC_ERROR
+nm_setting_generic_error_quark
+NMSettingGeneric
+NMSettingGenericClass
+nm_setting_generic_new
+<SUBSECTION Standard>
+NM_IS_SETTING_GENERIC
+NM_IS_SETTING_GENERIC_CLASS
+NM_SETTING_GENERIC
+NM_SETTING_GENERIC_CLASS
+NM_SETTING_GENERIC_GET_CLASS
+NM_TYPE_SETTING_GENERIC
+nm_setting_generic_get_type
+</SECTION>
+
+<SECTION>
<FILE>nm-setting-gsm</FILE>
<TITLE>NMSettingGsm</TITLE>
NM_SETTING_GSM_SETTING_NAME
@@ -481,28 +590,29 @@ NM_SETTING_GSM_PASSWORD
NM_SETTING_GSM_PASSWORD_FLAGS
NM_SETTING_GSM_APN
NM_SETTING_GSM_NETWORK_ID
-NM_SETTING_GSM_NETWORK_TYPE
-NM_SETTING_GSM_ALLOWED_BANDS
NM_SETTING_GSM_PIN
NM_SETTING_GSM_PIN_FLAGS
NM_SETTING_GSM_HOME_ONLY
+NM_SETTING_GSM_ALLOWED_BANDS
+NM_SETTING_GSM_NETWORK_TYPE
NMSettingGsmNetworkType
NMSettingGsmNetworkBand
+NM_SETTING_GSM_BANDS_MAX
+NMSettingGsm
+NMSettingGsmClass
nm_setting_gsm_new
nm_setting_gsm_get_number
nm_setting_gsm_get_username
nm_setting_gsm_get_password
nm_setting_gsm_get_apn
nm_setting_gsm_get_network_id
-nm_setting_gsm_get_network_type
-nm_setting_gsm_get_allowed_bands
nm_setting_gsm_get_pin
nm_setting_gsm_get_home_only
nm_setting_gsm_get_pin_flags
nm_setting_gsm_get_password_flags
+nm_setting_gsm_get_network_type
+nm_setting_gsm_get_allowed_bands
<SUBSECTION Standard>
-NMSettingGsm
-NMSettingGsmClass
NM_IS_SETTING_GSM
NM_IS_SETTING_GSM_CLASS
NM_SETTING_GSM
@@ -522,13 +632,17 @@ nm_setting_infiniband_error_quark
NM_SETTING_INFINIBAND_MAC_ADDRESS
NM_SETTING_INFINIBAND_MTU
NM_SETTING_INFINIBAND_TRANSPORT_MODE
+NM_SETTING_INFINIBAND_P_KEY
+NM_SETTING_INFINIBAND_PARENT
+NMSettingInfiniband
+NMSettingInfinibandClass
nm_setting_infiniband_new
nm_setting_infiniband_get_mac_address
nm_setting_infiniband_get_mtu
nm_setting_infiniband_get_transport_mode
+nm_setting_infiniband_get_p_key
+nm_setting_infiniband_get_parent
<SUBSECTION Standard>
-NMSettingInfiniband
-NMSettingInfinibandClass
NM_IS_SETTING_INFINIBAND
NM_IS_SETTING_INFINIBAND_CLASS
NM_SETTING_INFINIBAND
@@ -562,6 +676,7 @@ NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL
NM_SETTING_IP4_CONFIG_METHOD_MANUAL
NM_SETTING_IP4_CONFIG_METHOD_SHARED
NM_SETTING_IP4_CONFIG_METHOD_DISABLED
+NMIP4Address
nm_ip4_address_new
nm_ip4_address_dup
nm_ip4_address_ref
@@ -573,6 +688,7 @@ nm_ip4_address_get_prefix
nm_ip4_address_set_prefix
nm_ip4_address_get_gateway
nm_ip4_address_set_gateway
+NMIP4Route
nm_ip4_route_new
nm_ip4_route_dup
nm_ip4_route_ref
@@ -586,27 +702,33 @@ nm_ip4_route_get_next_hop
nm_ip4_route_set_next_hop
nm_ip4_route_get_metric
nm_ip4_route_set_metric
+NMSettingIP4Config
+NMSettingIP4ConfigClass
nm_setting_ip4_config_new
nm_setting_ip4_config_get_method
nm_setting_ip4_config_get_num_dns
nm_setting_ip4_config_get_dns
nm_setting_ip4_config_add_dns
nm_setting_ip4_config_remove_dns
+nm_setting_ip4_config_remove_dns_by_value
nm_setting_ip4_config_clear_dns
nm_setting_ip4_config_get_num_dns_searches
nm_setting_ip4_config_get_dns_search
nm_setting_ip4_config_add_dns_search
nm_setting_ip4_config_remove_dns_search
+nm_setting_ip4_config_remove_dns_search_by_value
nm_setting_ip4_config_clear_dns_searches
nm_setting_ip4_config_get_num_addresses
nm_setting_ip4_config_get_address
nm_setting_ip4_config_add_address
nm_setting_ip4_config_remove_address
+nm_setting_ip4_config_remove_address_by_value
nm_setting_ip4_config_clear_addresses
nm_setting_ip4_config_get_num_routes
nm_setting_ip4_config_get_route
nm_setting_ip4_config_add_route
nm_setting_ip4_config_remove_route
+nm_setting_ip4_config_remove_route_by_value
nm_setting_ip4_config_clear_routes
nm_setting_ip4_config_get_ignore_auto_routes
nm_setting_ip4_config_get_ignore_auto_dns
@@ -616,10 +738,6 @@ nm_setting_ip4_config_get_dhcp_hostname
nm_setting_ip4_config_get_never_default
nm_setting_ip4_config_get_may_fail
<SUBSECTION Standard>
-NMIP4Address
-NMIP4Route
-NMSettingIP4Config
-NMSettingIP4ConfigClass
NM_IS_SETTING_IP4_CONFIG
NM_IS_SETTING_IP4_CONFIG_CLASS
NM_SETTING_IP4_CONFIG
@@ -656,6 +774,7 @@ NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL
NM_SETTING_IP6_CONFIG_METHOD_MANUAL
NM_SETTING_IP6_CONFIG_METHOD_SHARED
NMSettingIP6ConfigPrivacy
+NMIP6Address
nm_ip6_address_new
nm_ip6_address_dup
nm_ip6_address_ref
@@ -667,6 +786,7 @@ nm_ip6_address_get_prefix
nm_ip6_address_set_prefix
nm_ip6_address_get_gateway
nm_ip6_address_set_gateway
+NMIP6Route
nm_ip6_route_new
nm_ip6_route_dup
nm_ip6_route_ref
@@ -680,27 +800,33 @@ nm_ip6_route_get_next_hop
nm_ip6_route_set_next_hop
nm_ip6_route_get_metric
nm_ip6_route_set_metric
+NMSettingIP6Config
+NMSettingIP6ConfigClass
nm_setting_ip6_config_new
nm_setting_ip6_config_get_method
nm_setting_ip6_config_get_num_dns
nm_setting_ip6_config_get_dns
nm_setting_ip6_config_add_dns
nm_setting_ip6_config_remove_dns
+nm_setting_ip6_config_remove_dns_by_value
nm_setting_ip6_config_clear_dns
nm_setting_ip6_config_get_num_dns_searches
nm_setting_ip6_config_get_dns_search
nm_setting_ip6_config_add_dns_search
nm_setting_ip6_config_remove_dns_search
+nm_setting_ip6_config_remove_dns_search_by_value
nm_setting_ip6_config_clear_dns_searches
nm_setting_ip6_config_get_num_addresses
nm_setting_ip6_config_get_address
nm_setting_ip6_config_add_address
nm_setting_ip6_config_remove_address
+nm_setting_ip6_config_remove_address_by_value
nm_setting_ip6_config_clear_addresses
nm_setting_ip6_config_get_num_routes
nm_setting_ip6_config_get_route
nm_setting_ip6_config_add_route
nm_setting_ip6_config_remove_route
+nm_setting_ip6_config_remove_route_by_value
nm_setting_ip6_config_clear_routes
nm_setting_ip6_config_get_ignore_auto_routes
nm_setting_ip6_config_get_ignore_auto_dns
@@ -709,10 +835,6 @@ nm_setting_ip6_config_get_never_default
nm_setting_ip6_config_get_may_fail
nm_setting_ip6_config_get_ip6_privacy
<SUBSECTION Standard>
-NMIP6Address
-NMIP6Route
-NMSettingIP6Config
-NMSettingIP6ConfigClass
NM_IS_SETTING_IP6_CONFIG
NM_IS_SETTING_IP6_CONFIG_CLASS
NM_SETTING_IP6_CONFIG
@@ -734,13 +856,13 @@ nm_setting_olpc_mesh_error_quark
NM_SETTING_OLPC_MESH_SSID
NM_SETTING_OLPC_MESH_CHANNEL
NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS
+NMSettingOlpcMesh
+NMSettingOlpcMeshClass
nm_setting_olpc_mesh_new
nm_setting_olpc_mesh_get_ssid
nm_setting_olpc_mesh_get_channel
nm_setting_olpc_mesh_get_dhcp_anycast_address
<SUBSECTION Standard>
-NMSettingOlpcMesh
-NMSettingOlpcMeshClass
NM_IS_SETTING_OLPC_MESH
NM_IS_SETTING_OLPC_MESH_CLASS
NM_SETTING_OLPC_MESH
@@ -775,6 +897,8 @@ NM_SETTING_PPP_MRU
NM_SETTING_PPP_MTU
NM_SETTING_PPP_LCP_ECHO_FAILURE
NM_SETTING_PPP_LCP_ECHO_INTERVAL
+NMSettingPPP
+NMSettingPPPClass
nm_setting_ppp_new
nm_setting_ppp_get_noauth
nm_setting_ppp_get_refuse_eap
@@ -795,8 +919,6 @@ nm_setting_ppp_get_mtu
nm_setting_ppp_get_lcp_echo_failure
nm_setting_ppp_get_lcp_echo_interval
<SUBSECTION Standard>
-NMSettingPPP
-NMSettingPPPClass
NM_IS_SETTING_PPP
NM_IS_SETTING_PPP_CLASS
NM_SETTING_PPP
@@ -817,14 +939,14 @@ NM_SETTING_PPPOE_SERVICE
NM_SETTING_PPPOE_USERNAME
NM_SETTING_PPPOE_PASSWORD
NM_SETTING_PPPOE_PASSWORD_FLAGS
+NMSettingPPPOE
+NMSettingPPPOEClass
nm_setting_pppoe_new
nm_setting_pppoe_get_service
nm_setting_pppoe_get_username
nm_setting_pppoe_get_password
nm_setting_pppoe_get_password_flags
<SUBSECTION Standard>
-NMSettingPPPOE
-NMSettingPPPOEClass
NM_IS_SETTING_PPPOE
NM_IS_SETTING_PPPOE_CLASS
NM_SETTING_PPPOE
@@ -835,12 +957,6 @@ nm_setting_pppoe_get_type
</SECTION>
<SECTION>
-<FILE>nm-setting-private</FILE>
-NM_SETTING_SECRET_FLAGS_ALL
-NM_SETTING_REGISTER_TYPE
-</SECTION>
-
-<SECTION>
<FILE>nm-setting-serial</FILE>
<TITLE>NMSettingSerial</TITLE>
NM_SETTING_SERIAL_SETTING_NAME
@@ -852,6 +968,8 @@ NM_SETTING_SERIAL_BITS
NM_SETTING_SERIAL_PARITY
NM_SETTING_SERIAL_STOPBITS
NM_SETTING_SERIAL_SEND_DELAY
+NMSettingSerial
+NMSettingSerialClass
nm_setting_serial_new
nm_setting_serial_get_baud
nm_setting_serial_get_bits
@@ -859,8 +977,6 @@ nm_setting_serial_get_parity
nm_setting_serial_get_stopbits
nm_setting_serial_get_send_delay
<SUBSECTION Standard>
-NMSettingSerial
-NMSettingSerialClass
NM_IS_SETTING_SERIAL
NM_IS_SETTING_SERIAL_CLASS
NM_SETTING_SERIAL
@@ -871,6 +987,52 @@ nm_setting_serial_get_type
</SECTION>
<SECTION>
+<FILE>nm-setting-team</FILE>
+<TITLE>NMSettingTeam</TITLE>
+NM_SETTING_TEAM_SETTING_NAME
+NMSettingTeamError
+NM_SETTING_TEAM_ERROR
+nm_setting_team_error_quark
+NM_SETTING_TEAM_INTERFACE_NAME
+NM_SETTING_TEAM_CONFIG
+NMSettingTeam
+NMSettingTeamClass
+nm_setting_team_new
+nm_setting_team_get_interface_name
+nm_setting_team_get_config
+<SUBSECTION Standard>
+NM_IS_SETTING_TEAM
+NM_IS_SETTING_TEAM_CLASS
+NM_SETTING_TEAM
+NM_SETTING_TEAM_CLASS
+NM_SETTING_TEAM_GET_CLASS
+NM_TYPE_SETTING_TEAM
+nm_setting_team_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-team-port</FILE>
+<TITLE>NMSettingTeamPort</TITLE>
+NM_SETTING_TEAM_PORT_SETTING_NAME
+NMSettingTeamPortError
+NM_SETTING_TEAM_PORT_ERROR
+nm_setting_team_port_error_quark
+NM_SETTING_TEAM_PORT_CONFIG
+NMSettingTeamPort
+NMSettingTeamPortClass
+nm_setting_team_port_new
+nm_setting_team_port_get_config
+<SUBSECTION Standard>
+NM_IS_SETTING_TEAM_PORT
+NM_IS_SETTING_TEAM_PORT_CLASS
+NM_SETTING_TEAM_PORT
+NM_SETTING_TEAM_PORT_CLASS
+NM_SETTING_TEAM_PORT_GET_CLASS
+NM_TYPE_SETTING_TEAM_PORT
+nm_setting_team_port_get_type
+</SECTION>
+
+<SECTION>
<FILE>nm-setting-vlan</FILE>
<TITLE>NMSettingVlan</TITLE>
NM_SETTING_VLAN_SETTING_NAME
@@ -883,6 +1045,8 @@ NM_SETTING_VLAN_ID
NM_SETTING_VLAN_FLAGS
NM_SETTING_VLAN_INGRESS_PRIORITY_MAP
NM_SETTING_VLAN_EGRESS_PRIORITY_MAP
+NMSettingVlan
+NMSettingVlanClass
NMVlanPriorityMap
NMVlanFlags
nm_setting_vlan_new
@@ -894,11 +1058,11 @@ nm_setting_vlan_get_num_priorities
nm_setting_vlan_get_priority
nm_setting_vlan_add_priority
nm_setting_vlan_remove_priority
+nm_setting_vlan_remove_priority_by_value
+nm_setting_vlan_remove_priority_str_by_value
nm_setting_vlan_clear_priorities
nm_setting_vlan_add_priority_str
<SUBSECTION Standard>
-NMSettingVlan
-NMSettingVlanClass
NM_IS_SETTING_VLAN
NM_IS_SETTING_VLAN_CLASS
NM_SETTING_VLAN
@@ -919,6 +1083,8 @@ NM_SETTING_VPN_SERVICE_TYPE
NM_SETTING_VPN_USER_NAME
NM_SETTING_VPN_DATA
NM_SETTING_VPN_SECRETS
+NMSettingVPN
+NMSettingVPNClass
NMVPNIterFunc
nm_setting_vpn_new
nm_setting_vpn_get_service_type
@@ -934,8 +1100,6 @@ nm_setting_vpn_get_secret
nm_setting_vpn_remove_secret
nm_setting_vpn_foreach_secret
<SUBSECTION Standard>
-NMSettingVPN
-NMSettingVPNClass
NM_IS_SETTING_VPN
NM_IS_SETTING_VPN_CLASS
NM_SETTING_VPN
@@ -954,12 +1118,12 @@ NM_SETTING_WIMAX_ERROR
nm_setting_wimax_error_quark
NM_SETTING_WIMAX_NETWORK_NAME
NM_SETTING_WIMAX_MAC_ADDRESS
+NMSettingWimax
+NMSettingWimaxClass
nm_setting_wimax_new
nm_setting_wimax_get_network_name
nm_setting_wimax_get_mac_address
<SUBSECTION Standard>
-NMSettingWimax
-NMSettingWimaxClass
NM_IS_SETTING_WIMAX
NM_IS_SETTING_WIMAX_CLASS
NM_SETTING_WIMAX
@@ -987,6 +1151,8 @@ NM_SETTING_WIRED_MTU
NM_SETTING_WIRED_S390_SUBCHANNELS
NM_SETTING_WIRED_S390_NETTYPE
NM_SETTING_WIRED_S390_OPTIONS
+NMSettingWired
+NMSettingWiredClass
nm_setting_wired_new
nm_setting_wired_get_port
nm_setting_wired_get_speed
@@ -995,6 +1161,12 @@ nm_setting_wired_get_auto_negotiate
nm_setting_wired_get_mac_address
nm_setting_wired_get_cloned_mac_address
nm_setting_wired_get_mac_address_blacklist
+nm_setting_wired_get_num_mac_blacklist_items
+nm_setting_wired_get_mac_blacklist_item
+nm_setting_wired_add_mac_blacklist_item
+nm_setting_wired_remove_mac_blacklist_item
+nm_setting_wired_remove_mac_blacklist_item_by_value
+nm_setting_wired_clear_mac_blacklist_items
nm_setting_wired_get_mtu
nm_setting_wired_get_s390_subchannels
nm_setting_wired_get_s390_nettype
@@ -1003,9 +1175,8 @@ nm_setting_wired_get_s390_option
nm_setting_wired_get_s390_option_by_key
nm_setting_wired_add_s390_option
nm_setting_wired_remove_s390_option
+nm_setting_wired_get_valid_s390_options
<SUBSECTION Standard>
-NMSettingWired
-NMSettingWiredClass
NM_IS_SETTING_WIRED
NM_IS_SETTING_WIRED_CLASS
NM_SETTING_WIRED
@@ -1034,11 +1205,13 @@ NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS
NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST
NM_SETTING_WIRELESS_MTU
NM_SETTING_WIRELESS_SEEN_BSSIDS
-NM_SETTING_WIRELESS_SEC
NM_SETTING_WIRELESS_HIDDEN
+NM_SETTING_WIRELESS_SEC
NM_SETTING_WIRELESS_MODE_ADHOC
NM_SETTING_WIRELESS_MODE_AP
NM_SETTING_WIRELESS_MODE_INFRA
+NMSettingWireless
+NMSettingWirelessClass
nm_setting_wireless_new
nm_setting_wireless_get_ssid
nm_setting_wireless_get_mode
@@ -1050,16 +1223,20 @@ nm_setting_wireless_get_tx_power
nm_setting_wireless_get_mac_address
nm_setting_wireless_get_cloned_mac_address
nm_setting_wireless_get_mac_address_blacklist
+nm_setting_wireless_get_num_mac_blacklist_items
+nm_setting_wireless_get_mac_blacklist_item
+nm_setting_wireless_add_mac_blacklist_item
+nm_setting_wireless_remove_mac_blacklist_item
+nm_setting_wireless_remove_mac_blacklist_item_by_value
+nm_setting_wireless_clear_mac_blacklist_items
nm_setting_wireless_get_mtu
-nm_setting_wireless_get_security
nm_setting_wireless_get_hidden
nm_setting_wireless_add_seen_bssid
nm_setting_wireless_get_num_seen_bssids
nm_setting_wireless_get_seen_bssid
nm_setting_wireless_ap_security_compatible
+nm_setting_wireless_get_security
<SUBSECTION Standard>
-NMSettingWireless
-NMSettingWirelessClass
NM_IS_SETTING_WIRELESS
NM_IS_SETTING_WIRELESS_CLASS
NM_SETTING_WIRELESS
@@ -1094,22 +1271,27 @@ NM_SETTING_WIRELESS_SECURITY_PSK
NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS
NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD
NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS
+NMSettingWirelessSecurity
+NMSettingWirelessSecurityClass
nm_setting_wireless_security_new
nm_setting_wireless_security_get_key_mgmt
nm_setting_wireless_security_get_num_protos
nm_setting_wireless_security_get_proto
nm_setting_wireless_security_add_proto
nm_setting_wireless_security_remove_proto
+nm_setting_wireless_security_remove_proto_by_value
nm_setting_wireless_security_clear_protos
nm_setting_wireless_security_get_num_pairwise
nm_setting_wireless_security_get_pairwise
nm_setting_wireless_security_add_pairwise
nm_setting_wireless_security_remove_pairwise
+nm_setting_wireless_security_remove_pairwise_by_value
nm_setting_wireless_security_clear_pairwise
nm_setting_wireless_security_get_num_groups
nm_setting_wireless_security_get_group
nm_setting_wireless_security_add_group
nm_setting_wireless_security_remove_group
+nm_setting_wireless_security_remove_group_by_value
nm_setting_wireless_security_clear_groups
nm_setting_wireless_security_get_psk
nm_setting_wireless_security_get_psk_flags
@@ -1123,8 +1305,6 @@ nm_setting_wireless_security_get_auth_alg
nm_setting_wireless_security_get_wep_key_flags
nm_setting_wireless_security_get_wep_key_type
<SUBSECTION Standard>
-NMSettingWirelessSecurity
-NMSettingWirelessSecurityClass
NM_IS_SETTING_WIRELESS_SECURITY
NM_IS_SETTING_WIRELESS_SECURITY_CLASS
NM_SETTING_WIRELESS_SECURITY
@@ -1165,6 +1345,7 @@ nm_utils_ip6_dns_to_gvalue
nm_utils_uuid_generate
nm_utils_uuid_generate_from_string
nm_utils_rsa_key_encrypt
+nm_utils_rsa_key_encrypt_aes
nm_utils_file_is_pkcs12
nm_utils_wifi_freq_to_channel
nm_utils_wifi_channel_to_freq
@@ -1176,8 +1357,18 @@ nm_utils_hwaddr_type
nm_utils_hwaddr_ntoa
nm_utils_hwaddr_atoba
nm_utils_hwaddr_aton
+nm_utils_hwaddr_ntoa_len
+nm_utils_hwaddr_aton_len
+nm_utils_hwaddr_valid
+nm_utils_bin2hexstr
+nm_utils_hex2byte
+nm_utils_hexstr2bin
nm_utils_iface_valid_name
nm_utils_is_uuid
+NM_UTILS_INET_ADDRSTRLEN
+nm_utils_inet4_ntop
+nm_utils_inet6_ntop
+nm_utils_check_virtual_device_compatibility
</SECTION>
<SECTION>
@@ -1195,8 +1386,11 @@ NM_TYPE_SETTING_BRIDGE_PORT_ERROR
NM_TYPE_SETTING_CDMA_ERROR
NM_TYPE_SETTING_COMPARE_FLAGS
NM_TYPE_SETTING_CONNECTION_ERROR
+NM_TYPE_SETTING_DCB_ERROR
+NM_TYPE_SETTING_DCB_FLAGS
NM_TYPE_SETTING_DIFF_RESULT
NM_TYPE_SETTING_ERROR
+NM_TYPE_SETTING_GENERIC_ERROR
NM_TYPE_SETTING_GSM_ERROR
NM_TYPE_SETTING_GSM_NETWORK_BAND
NM_TYPE_SETTING_GSM_NETWORK_TYPE
@@ -1210,6 +1404,8 @@ NM_TYPE_SETTING_PPPOE_ERROR
NM_TYPE_SETTING_PPP_ERROR
NM_TYPE_SETTING_SECRET_FLAGS
NM_TYPE_SETTING_SERIAL_ERROR
+NM_TYPE_SETTING_TEAM_ERROR
+NM_TYPE_SETTING_TEAM_PORT_ERROR
NM_TYPE_SETTING_VLAN_ERROR
NM_TYPE_SETTING_VPN_ERROR
NM_TYPE_SETTING_WIMAX_ERROR
@@ -1232,8 +1428,11 @@ nm_setting_bridge_port_error_get_type
nm_setting_cdma_error_get_type
nm_setting_compare_flags_get_type
nm_setting_connection_error_get_type
+nm_setting_dcb_error_get_type
+nm_setting_dcb_flags_get_type
nm_setting_diff_result_get_type
nm_setting_error_get_type
+nm_setting_generic_error_get_type
nm_setting_gsm_error_get_type
nm_setting_gsm_network_band_get_type
nm_setting_gsm_network_type_get_type
@@ -1247,6 +1446,8 @@ nm_setting_ppp_error_get_type
nm_setting_pppoe_error_get_type
nm_setting_secret_flags_get_type
nm_setting_serial_error_get_type
+nm_setting_team_error_get_type
+nm_setting_team_port_error_get_type
nm_setting_vlan_error_get_type
nm_setting_vpn_error_get_type
nm_setting_wimax_error_get_type
diff --git a/docs/libnm-util/libnm-util.types b/docs/libnm-util/libnm-util.types
index ae007747d..3fe1632fc 100644
--- a/docs/libnm-util/libnm-util.types
+++ b/docs/libnm-util/libnm-util.types
@@ -23,8 +23,13 @@ nm_setting_cdma_get_type
nm_setting_compare_flags_get_type
nm_setting_connection_error_get_type
nm_setting_connection_get_type
+nm_setting_dcb_error_get_type
+nm_setting_dcb_flags_get_type
+nm_setting_dcb_get_type
nm_setting_diff_result_get_type
nm_setting_error_get_type
+nm_setting_generic_error_get_type
+nm_setting_generic_get_type
nm_setting_get_type
nm_setting_gsm_error_get_type
nm_setting_gsm_get_type
@@ -47,6 +52,10 @@ nm_setting_pppoe_get_type
nm_setting_secret_flags_get_type
nm_setting_serial_error_get_type
nm_setting_serial_get_type
+nm_setting_team_error_get_type
+nm_setting_team_get_type
+nm_setting_team_port_error_get_type
+nm_setting_team_port_get_type
nm_setting_vlan_error_get_type
nm_setting_vlan_get_type
nm_setting_vpn_error_get_type
diff --git a/docs/libnm-util/tmpl/nm-connection.sgml b/docs/libnm-util/tmpl/nm-connection.sgml
index 7a40b5e06..8054b92c7 100644
--- a/docs/libnm-util/tmpl/nm-connection.sgml
+++ b/docs/libnm-util/tmpl/nm-connection.sgml
@@ -22,6 +22,34 @@ NMConnection
<!-- ##### SECTION Image ##### -->
+<!-- ##### MACRO NM_CONNECTION_SECRETS_UPDATED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CONNECTION_SECRETS_CLEARED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CONNECTION_CHANGED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CONNECTION_PATH ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### ENUM NMConnectionError ##### -->
<para>
@@ -48,18 +76,18 @@ NMConnection
@Returns:
-<!-- ##### MACRO NM_CONNECTION_PATH ##### -->
+<!-- ##### STRUCT NMConnection ##### -->
<para>
</para>
-
-<!-- ##### STRUCT NMConnection ##### -->
+<!-- ##### SIGNAL NMConnection::changed ##### -->
<para>
</para>
+@nmconnection: the object which received the signal.
<!-- ##### SIGNAL NMConnection::secrets-cleared ##### -->
<para>
@@ -81,6 +109,14 @@ NMConnection
</para>
+<!-- ##### STRUCT NMConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@secrets_updated:
+
<!-- ##### FUNCTION nm_connection_new ##### -->
<para>
@@ -167,6 +203,17 @@ NMConnection
@Returns:
+<!-- ##### FUNCTION nm_connection_replace_settings_from_connection ##### -->
+<para>
+
+</para>
+
+@connection:
+@new_connection:
+@error:
+@Returns:
+
+
<!-- ##### FUNCTION nm_connection_compare ##### -->
<para>
@@ -341,6 +388,24 @@ NMConnection
@Returns:
+<!-- ##### FUNCTION nm_connection_get_connection_type ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_virtual_device_description ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_connection_get_setting_802_1x ##### -->
<para>
@@ -368,6 +433,24 @@ NMConnection
@Returns:
+<!-- ##### FUNCTION nm_connection_get_setting_team ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_team_port ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_connection_get_setting_bridge ##### -->
<para>
@@ -404,6 +487,24 @@ NMConnection
@Returns:
+<!-- ##### FUNCTION nm_connection_get_setting_dcb ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_generic ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_connection_get_setting_gsm ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-8021x.sgml b/docs/libnm-util/tmpl/nm-setting-8021x.sgml
index 580a508ff..9b331510e 100644
--- a/docs/libnm-util/tmpl/nm-setting-8021x.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-8021x.sgml
@@ -297,6 +297,183 @@ NMSetting8021x
+<!-- ##### STRUCT NMSetting8021x ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSetting8021x:altsubject-matches ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:anonymous-identity ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:ca-cert ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:ca-path ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:client-cert ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:eap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:identity ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:pac-file ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:password-raw ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:password-raw-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase1-fast-provisioning ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase1-peaplabel ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase1-peapver ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-altsubject-matches ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-auth ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-autheap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-ca-cert ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-ca-path ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-client-cert ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-private-key ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-private-key-password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-private-key-password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:phase2-subject-match ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:pin ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:pin-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:private-key ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:private-key-password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:private-key-password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:subject-match ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSetting8021x:system-ca-certs ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSetting8021xClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_802_1x_new ##### -->
<para>
@@ -344,6 +521,16 @@ NMSetting8021x
@i:
+<!-- ##### FUNCTION nm_setting_802_1x_remove_eap_method_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@eap:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_802_1x_clear_eap_methods ##### -->
<para>
@@ -493,6 +680,16 @@ NMSetting8021x
@i:
+<!-- ##### FUNCTION nm_setting_802_1x_remove_altsubject_match_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@altsubject_match:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_802_1x_clear_altsubject_matches ##### -->
<para>
@@ -673,6 +870,16 @@ NMSetting8021x
@i:
+<!-- ##### FUNCTION nm_setting_802_1x_remove_phase2_altsubject_match_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@phase2_altsubject_match:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_802_1x_clear_phase2_altsubject_matches ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-adsl.sgml b/docs/libnm-util/tmpl/nm-setting-adsl.sgml
index aa9a16619..4b3716ef7 100644
--- a/docs/libnm-util/tmpl/nm-setting-adsl.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-adsl.sgml
@@ -138,6 +138,58 @@ NMSettingAdsl
+<!-- ##### STRUCT NMSettingAdsl ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingAdsl:encapsulation ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingAdsl:password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingAdsl:password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingAdsl:protocol ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingAdsl:username ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingAdsl:vci ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingAdsl:vpi ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingAdslClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_adsl_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-bluetooth.sgml b/docs/libnm-util/tmpl/nm-setting-bluetooth.sgml
index 058e98fce..3a9c97731 100644
--- a/docs/libnm-util/tmpl/nm-setting-bluetooth.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-bluetooth.sgml
@@ -83,6 +83,33 @@ NMSettingBluetooth
+<!-- ##### STRUCT NMSettingBluetooth ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingBluetooth:bdaddr ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBluetooth:type ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingBluetoothClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_bluetooth_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-bond.sgml b/docs/libnm-util/tmpl/nm-setting-bond.sgml
index bc2f76276..fa5b03351 100644
--- a/docs/libnm-util/tmpl/nm-setting-bond.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-bond.sgml
@@ -112,6 +112,89 @@ NMSettingBond
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_ARP_VALIDATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_PRIMARY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_PRIMARY_RESELECT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_FAIL_OVER_MAC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_USE_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_AD_SELECT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_RESEND_IGMP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingBond ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingBond:interface-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBond:options ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingBondClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_bond_new ##### -->
<para>
@@ -182,6 +265,16 @@ NMSettingBond
@Returns:
+<!-- ##### FUNCTION nm_setting_bond_validate_option ##### -->
+<para>
+
+</para>
+
+@name:
+@value:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_bond_get_valid_options ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-bridge-port.sgml b/docs/libnm-util/tmpl/nm-setting-bridge-port.sgml
index ebbed6dbe..692cb73d6 100644
--- a/docs/libnm-util/tmpl/nm-setting-bridge-port.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-bridge-port.sgml
@@ -75,6 +75,38 @@ NMSettingBridgePort
+<!-- ##### STRUCT NMSettingBridgePort ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingBridgePort:hairpin-mode ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridgePort:path-cost ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridgePort:priority ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingBridgePortClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_bridge_port_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-bridge.sgml b/docs/libnm-util/tmpl/nm-setting-bridge.sgml
index 328eb7552..8a1d6e868 100644
--- a/docs/libnm-util/tmpl/nm-setting-bridge.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-bridge.sgml
@@ -61,6 +61,13 @@ NMSettingBridge
+<!-- ##### MACRO NM_SETTING_BRIDGE_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_SETTING_BRIDGE_STP ##### -->
<para>
@@ -103,6 +110,63 @@ NMSettingBridge
+<!-- ##### STRUCT NMSettingBridge ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingBridge:ageing-time ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:forward-delay ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:hello-time ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:interface-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:mac-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:max-age ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:priority ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:stp ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingBridgeClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_bridge_new ##### -->
<para>
@@ -121,6 +185,15 @@ NMSettingBridge
@Returns:
+<!-- ##### FUNCTION nm_setting_bridge_get_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_bridge_get_stp ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-cdma.sgml b/docs/libnm-util/tmpl/nm-setting-cdma.sgml
index fdcad0de2..4c90acb1c 100644
--- a/docs/libnm-util/tmpl/nm-setting-cdma.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-cdma.sgml
@@ -83,6 +83,43 @@ NMSettingCdma
+<!-- ##### STRUCT NMSettingCdma ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingCdma:number ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingCdma:password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingCdma:password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingCdma:username ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingCdmaClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_cdma_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-connection.sgml b/docs/libnm-util/tmpl/nm-setting-connection.sgml
index e92e758a6..83399625a 100644
--- a/docs/libnm-util/tmpl/nm-setting-connection.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-connection.sgml
@@ -70,6 +70,13 @@ NMSettingConnection
+<!-- ##### MACRO NM_SETTING_CONNECTION_INTERFACE_NAME ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_SETTING_CONNECTION_TYPE ##### -->
<para>
@@ -133,6 +140,13 @@ NMSettingConnection
+<!-- ##### MACRO NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### STRUCT NMSettingConnection ##### -->
<para>
@@ -144,11 +158,21 @@ NMSettingConnection
</para>
+<!-- ##### ARG NMSettingConnection:gateway-ping-timeout ##### -->
+<para>
+
+</para>
+
<!-- ##### ARG NMSettingConnection:id ##### -->
<para>
</para>
+<!-- ##### ARG NMSettingConnection:interface-name ##### -->
+<para>
+
+</para>
+
<!-- ##### ARG NMSettingConnection:master ##### -->
<para>
@@ -194,6 +218,17 @@ NMSettingConnection
</para>
+<!-- ##### STRUCT NMSettingConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_connection_new ##### -->
<para>
@@ -221,6 +256,15 @@ NMSettingConnection
@Returns:
+<!-- ##### FUNCTION nm_setting_connection_get_interface_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_connection_get_connection_type ##### -->
<para>
@@ -319,6 +363,18 @@ NMSettingConnection
@idx:
+<!-- ##### FUNCTION nm_setting_connection_remove_permission_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@ptype:
+@pitem:
+@detail:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_connection_get_master ##### -->
<para>
@@ -385,3 +441,22 @@ NMSettingConnection
@idx:
+<!-- ##### FUNCTION nm_setting_connection_remove_secondary_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@sec_uuid:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_gateway_ping_timeout ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting-dcb.sgml b/docs/libnm-util/tmpl/nm-setting-dcb.sgml
new file mode 100644
index 000000000..8de442f46
--- /dev/null
+++ b/docs/libnm-util/tmpl/nm-setting-dcb.sgml
@@ -0,0 +1,487 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingDcb
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_DCB_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingDcbError ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_DCB_ERROR_UNKNOWN:
+@NM_SETTING_DCB_ERROR_INVALID_PROPERTY:
+@NM_SETTING_DCB_ERROR_MISSING_PROPERTY:
+
+<!-- ##### MACRO NM_SETTING_DCB_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_setting_dcb_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### ENUM NMSettingDcbFlags ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_DCB_FLAG_NONE:
+@NM_SETTING_DCB_FLAG_ENABLE:
+@NM_SETTING_DCB_FLAG_ADVERTISE:
+@NM_SETTING_DCB_FLAG_WILLING:
+
+<!-- ##### MACRO NM_SETTING_DCB_FCOE_MODE_FABRIC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_FCOE_MODE_VN2VN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_APP_FCOE_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_APP_FCOE_PRIORITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_APP_FCOE_MODE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_APP_ISCSI_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_APP_ISCSI_PRIORITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_APP_FIP_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_APP_FIP_PRIORITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_FLOW_CONTROL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_GROUP_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_GROUP_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_BANDWIDTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingDcb ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingDcb:app-fcoe-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:app-fcoe-mode ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:app-fcoe-priority ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:app-fip-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:app-fip-priority ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:app-iscsi-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:app-iscsi-priority ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-bandwidth ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-flow-control ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-flow-control-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-group-bandwidth ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-group-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-group-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-strict-bandwidth ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingDcb:priority-traffic-class ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingDcbClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
+<!-- ##### FUNCTION nm_setting_dcb_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_app_fcoe_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_app_fcoe_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_app_fcoe_mode ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_app_iscsi_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_app_iscsi_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_app_fip_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_app_fip_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_flow_control_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_flow_control ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_set_priority_flow_control ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@enabled:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_group_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_group_id ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_set_priority_group_id ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@group_id:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_group_bandwidth ##### -->
+<para>
+
+</para>
+
+@setting:
+@group_id:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_set_priority_group_bandwidth ##### -->
+<para>
+
+</para>
+
+@setting:
+@group_id:
+@bandwidth_percent:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_bandwidth ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_set_priority_bandwidth ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@bandwidth_percent:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_strict_bandwidth ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_set_priority_strict_bandwidth ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@strict:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_get_priority_traffic_class ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_dcb_set_priority_traffic_class ##### -->
+<para>
+
+</para>
+
+@setting:
+@user_priority:
+@traffic_class:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting-generic.sgml b/docs/libnm-util/tmpl/nm-setting-generic.sgml
new file mode 100644
index 000000000..54eb106e1
--- /dev/null
+++ b/docs/libnm-util/tmpl/nm-setting-generic.sgml
@@ -0,0 +1,82 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingGeneric
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_GENERIC_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingGenericError ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_GENERIC_ERROR_UNKNOWN:
+@NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY:
+@NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY:
+
+<!-- ##### MACRO NM_SETTING_GENERIC_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_setting_generic_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### STRUCT NMSettingGeneric ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT NMSettingGenericClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
+<!-- ##### FUNCTION nm_setting_generic_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting-gsm.sgml b/docs/libnm-util/tmpl/nm-setting-gsm.sgml
index ec7f841e1..e37ed4108 100644
--- a/docs/libnm-util/tmpl/nm-setting-gsm.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-gsm.sgml
@@ -97,35 +97,35 @@ NMSettingGsm
-<!-- ##### MACRO NM_SETTING_GSM_NETWORK_TYPE ##### -->
+<!-- ##### MACRO NM_SETTING_GSM_PIN ##### -->
<para>
</para>
-<!-- ##### MACRO NM_SETTING_GSM_ALLOWED_BANDS ##### -->
+<!-- ##### MACRO NM_SETTING_GSM_PIN_FLAGS ##### -->
<para>
</para>
-<!-- ##### MACRO NM_SETTING_GSM_PIN ##### -->
+<!-- ##### MACRO NM_SETTING_GSM_HOME_ONLY ##### -->
<para>
</para>
-<!-- ##### MACRO NM_SETTING_GSM_PIN_FLAGS ##### -->
+<!-- ##### MACRO NM_SETTING_GSM_ALLOWED_BANDS ##### -->
<para>
</para>
-<!-- ##### MACRO NM_SETTING_GSM_HOME_ONLY ##### -->
+<!-- ##### MACRO NM_SETTING_GSM_NETWORK_TYPE ##### -->
<para>
</para>
@@ -166,6 +166,85 @@ NMSettingGsm
@NM_SETTING_GSM_BAND_U1900:
@NM_SETTING_GSM_BAND_U2600:
+<!-- ##### MACRO NM_SETTING_GSM_BANDS_MAX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingGsm ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingGsm:allowed-bands ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:apn ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:home-only ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:network-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:network-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:number ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:pin ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:pin-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:username ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingGsmClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_gsm_new ##### -->
<para>
@@ -220,7 +299,7 @@ NMSettingGsm
@Returns:
-<!-- ##### FUNCTION nm_setting_gsm_get_network_type ##### -->
+<!-- ##### FUNCTION nm_setting_gsm_get_pin ##### -->
<para>
</para>
@@ -229,7 +308,7 @@ NMSettingGsm
@Returns:
-<!-- ##### FUNCTION nm_setting_gsm_get_allowed_bands ##### -->
+<!-- ##### FUNCTION nm_setting_gsm_get_home_only ##### -->
<para>
</para>
@@ -238,7 +317,7 @@ NMSettingGsm
@Returns:
-<!-- ##### FUNCTION nm_setting_gsm_get_pin ##### -->
+<!-- ##### FUNCTION nm_setting_gsm_get_pin_flags ##### -->
<para>
</para>
@@ -247,7 +326,7 @@ NMSettingGsm
@Returns:
-<!-- ##### FUNCTION nm_setting_gsm_get_home_only ##### -->
+<!-- ##### FUNCTION nm_setting_gsm_get_password_flags ##### -->
<para>
</para>
@@ -256,7 +335,7 @@ NMSettingGsm
@Returns:
-<!-- ##### FUNCTION nm_setting_gsm_get_pin_flags ##### -->
+<!-- ##### FUNCTION nm_setting_gsm_get_network_type ##### -->
<para>
</para>
@@ -265,7 +344,7 @@ NMSettingGsm
@Returns:
-<!-- ##### FUNCTION nm_setting_gsm_get_password_flags ##### -->
+<!-- ##### FUNCTION nm_setting_gsm_get_allowed_bands ##### -->
<para>
</para>
diff --git a/docs/libnm-util/tmpl/nm-setting-infiniband.sgml b/docs/libnm-util/tmpl/nm-setting-infiniband.sgml
index 9331ee3ed..550fc453f 100644
--- a/docs/libnm-util/tmpl/nm-setting-infiniband.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-infiniband.sgml
@@ -75,6 +75,62 @@ NMSettingInfiniband
+<!-- ##### MACRO NM_SETTING_INFINIBAND_P_KEY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_INFINIBAND_PARENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingInfiniband ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingInfiniband:mac-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingInfiniband:mtu ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingInfiniband:p-key ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingInfiniband:parent ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingInfiniband:transport-mode ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingInfinibandClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_infiniband_new ##### -->
<para>
@@ -111,3 +167,21 @@ NMSettingInfiniband
@Returns:
+<!-- ##### FUNCTION nm_setting_infiniband_get_p_key ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_infiniband_get_parent ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml b/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml
index c01e5a968..106ed1d84 100644
--- a/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml
@@ -174,6 +174,12 @@ NMSettingIP4Config
+<!-- ##### TYPEDEF NMIP4Address ##### -->
+<para>
+
+</para>
+
+
<!-- ##### FUNCTION nm_ip4_address_new ##### -->
<para>
@@ -272,6 +278,12 @@ NMSettingIP4Config
@gateway:
+<!-- ##### TYPEDEF NMIP4Route ##### -->
+<para>
+
+</para>
+
+
<!-- ##### FUNCTION nm_ip4_route_new ##### -->
<para>
@@ -388,6 +400,88 @@ NMSettingIP4Config
@metric:
+<!-- ##### STRUCT NMSettingIP4Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingIP4Config:address-labels ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:addresses ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:dhcp-client-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:dhcp-hostname ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:dhcp-send-hostname ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:dns ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:dns-search ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:ignore-auto-dns ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:ignore-auto-routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:may-fail ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:method ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:never-default ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP4Config:routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingIP4ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_ip4_config_new ##### -->
<para>
@@ -444,6 +538,16 @@ NMSettingIP4Config
@i:
+<!-- ##### FUNCTION nm_setting_ip4_config_remove_dns_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip4_config_clear_dns ##### -->
<para>
@@ -490,6 +594,16 @@ NMSettingIP4Config
@i:
+<!-- ##### FUNCTION nm_setting_ip4_config_remove_dns_search_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns_search:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip4_config_clear_dns_searches ##### -->
<para>
@@ -536,6 +650,16 @@ NMSettingIP4Config
@i:
+<!-- ##### FUNCTION nm_setting_ip4_config_remove_address_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@address:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip4_config_clear_addresses ##### -->
<para>
@@ -582,6 +706,16 @@ NMSettingIP4Config
@i:
+<!-- ##### FUNCTION nm_setting_ip4_config_remove_route_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@route:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip4_config_clear_routes ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-ip6-config.sgml b/docs/libnm-util/tmpl/nm-setting-ip6-config.sgml
index dc99e3e17..6a746b5e1 100644
--- a/docs/libnm-util/tmpl/nm-setting-ip6-config.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-ip6-config.sgml
@@ -184,6 +184,12 @@ NMSettingIP6Config
@NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR:
@NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR:
+<!-- ##### TYPEDEF NMIP6Address ##### -->
+<para>
+
+</para>
+
+
<!-- ##### FUNCTION nm_ip6_address_new ##### -->
<para>
@@ -282,6 +288,12 @@ NMSettingIP6Config
@gateway:
+<!-- ##### TYPEDEF NMIP6Route ##### -->
+<para>
+
+</para>
+
+
<!-- ##### FUNCTION nm_ip6_route_new ##### -->
<para>
@@ -398,6 +410,78 @@ NMSettingIP6Config
@metric:
+<!-- ##### STRUCT NMSettingIP6Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingIP6Config:addresses ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:dhcp-hostname ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:dns ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:dns-search ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:ignore-auto-dns ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:ignore-auto-routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:ip6-privacy ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:may-fail ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:method ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:never-default ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIP6Config:routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingIP6ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_ip6_config_new ##### -->
<para>
@@ -454,6 +538,16 @@ NMSettingIP6Config
@i:
+<!-- ##### FUNCTION nm_setting_ip6_config_remove_dns_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip6_config_clear_dns ##### -->
<para>
@@ -500,6 +594,16 @@ NMSettingIP6Config
@i:
+<!-- ##### FUNCTION nm_setting_ip6_config_remove_dns_search_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns_search:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip6_config_clear_dns_searches ##### -->
<para>
@@ -546,6 +650,16 @@ NMSettingIP6Config
@i:
+<!-- ##### FUNCTION nm_setting_ip6_config_remove_address_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@address:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip6_config_clear_addresses ##### -->
<para>
@@ -592,6 +706,16 @@ NMSettingIP6Config
@i:
+<!-- ##### FUNCTION nm_setting_ip6_config_remove_route_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@route:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip6_config_clear_routes ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-olpc-mesh.sgml b/docs/libnm-util/tmpl/nm-setting-olpc-mesh.sgml
index c3971303b..6d5253797 100644
--- a/docs/libnm-util/tmpl/nm-setting-olpc-mesh.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-olpc-mesh.sgml
@@ -75,6 +75,38 @@ NMSettingOlpcMesh
+<!-- ##### STRUCT NMSettingOlpcMesh ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingOlpcMesh:channel ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingOlpcMesh:dhcp-anycast-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingOlpcMesh:ssid ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingOlpcMeshClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_olpc_mesh_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-ppp.sgml b/docs/libnm-util/tmpl/nm-setting-ppp.sgml
index ccf4f0d97..69cf509cd 100644
--- a/docs/libnm-util/tmpl/nm-setting-ppp.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-ppp.sgml
@@ -181,6 +181,113 @@ NMSettingPPP
+<!-- ##### STRUCT NMSettingPPP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingPPP:baud ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:crtscts ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:lcp-echo-failure ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:lcp-echo-interval ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:mppe-stateful ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:mru ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:mtu ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:no-vj-comp ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:noauth ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:nobsdcomp ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:nodeflate ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:refuse-chap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:refuse-eap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:refuse-mschap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:refuse-mschapv2 ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:refuse-pap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:require-mppe ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPP:require-mppe-128 ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingPPPClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_ppp_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-pppoe.sgml b/docs/libnm-util/tmpl/nm-setting-pppoe.sgml
index f34ba1d27..1ab1ae554 100644
--- a/docs/libnm-util/tmpl/nm-setting-pppoe.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-pppoe.sgml
@@ -83,6 +83,43 @@ NMSettingPPPOE
+<!-- ##### STRUCT NMSettingPPPOE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingPPPOE:password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPPOE:password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPPOE:service ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingPPPOE:username ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingPPPOEClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_pppoe_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-private.sgml b/docs/libnm-util/tmpl/nm-setting-private.sgml
deleted file mode 100644
index 75ebe7a9a..000000000
--- a/docs/libnm-util/tmpl/nm-setting-private.sgml
+++ /dev/null
@@ -1,39 +0,0 @@
-<!-- ##### SECTION Title ##### -->
-nm-setting-private
-
-<!-- ##### SECTION Short_Description ##### -->
-
-
-<!-- ##### SECTION Long_Description ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION See_Also ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION Stability_Level ##### -->
-
-
-<!-- ##### SECTION Image ##### -->
-
-
-<!-- ##### MACRO NM_SETTING_SECRET_FLAGS_ALL ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### MACRO NM_SETTING_REGISTER_TYPE ##### -->
-<para>
-
-</para>
-
-@x:
-
-
diff --git a/docs/libnm-util/tmpl/nm-setting-serial.sgml b/docs/libnm-util/tmpl/nm-setting-serial.sgml
index fcd7e170b..b79ec0a90 100644
--- a/docs/libnm-util/tmpl/nm-setting-serial.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-serial.sgml
@@ -90,6 +90,48 @@ NMSettingSerial
+<!-- ##### STRUCT NMSettingSerial ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingSerial:baud ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingSerial:bits ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingSerial:parity ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingSerial:send-delay ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingSerial:stopbits ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingSerialClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_serial_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-team-port.sgml b/docs/libnm-util/tmpl/nm-setting-team-port.sgml
new file mode 100644
index 000000000..3fe5f784a
--- /dev/null
+++ b/docs/libnm-util/tmpl/nm-setting-team-port.sgml
@@ -0,0 +1,103 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingTeamPort
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_TEAM_PORT_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingTeamPortError ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_TEAM_PORT_ERROR_UNKNOWN:
+@NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY:
+@NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY:
+
+<!-- ##### MACRO NM_SETTING_TEAM_PORT_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_setting_team_port_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_SETTING_TEAM_PORT_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingTeamPort ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingTeamPort:config ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingTeamPortClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
+<!-- ##### FUNCTION nm_setting_team_port_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_team_port_get_config ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting-team.sgml b/docs/libnm-util/tmpl/nm-setting-team.sgml
new file mode 100644
index 000000000..bc7a35721
--- /dev/null
+++ b/docs/libnm-util/tmpl/nm-setting-team.sgml
@@ -0,0 +1,124 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingTeam
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_TEAM_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingTeamError ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_TEAM_ERROR_UNKNOWN:
+@NM_SETTING_TEAM_ERROR_INVALID_PROPERTY:
+@NM_SETTING_TEAM_ERROR_MISSING_PROPERTY:
+
+<!-- ##### MACRO NM_SETTING_TEAM_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_setting_team_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_SETTING_TEAM_INTERFACE_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_TEAM_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingTeam ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingTeam:config ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingTeam:interface-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingTeamClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
+<!-- ##### FUNCTION nm_setting_team_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_team_get_interface_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_team_get_config ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting-vlan.sgml b/docs/libnm-util/tmpl/nm-setting-vlan.sgml
index 4443c2a0b..9ae77248e 100644
--- a/docs/libnm-util/tmpl/nm-setting-vlan.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-vlan.sgml
@@ -97,6 +97,53 @@ NMSettingVlan
+<!-- ##### STRUCT NMSettingVlan ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingVlan:egress-priority-map ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVlan:flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVlan:id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVlan:ingress-priority-map ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVlan:interface-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVlan:parent ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingVlanClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### ENUM NMVlanPriorityMap ##### -->
<para>
@@ -204,6 +251,29 @@ NMSettingVlan
@idx:
+<!-- ##### FUNCTION nm_setting_vlan_remove_priority_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@map:
+@from:
+@to:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_remove_priority_str_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@map:
+@str:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_vlan_clear_priorities ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-vpn.sgml b/docs/libnm-util/tmpl/nm-setting-vpn.sgml
index a3f8b7fbf..f6386c185 100644
--- a/docs/libnm-util/tmpl/nm-setting-vpn.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-vpn.sgml
@@ -82,6 +82,43 @@ NMSettingVPN
+<!-- ##### STRUCT NMSettingVPN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingVPN:data ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVPN:secrets ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVPN:service-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVPN:user-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingVPNClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### USER_FUNCTION NMVPNIterFunc ##### -->
<para>
@@ -155,6 +192,7 @@ NMSettingVPN
@setting:
@key:
+@Returns:
<!-- ##### FUNCTION nm_setting_vpn_foreach_data_item ##### -->
@@ -203,6 +241,7 @@ NMSettingVPN
@setting:
@key:
+@Returns:
<!-- ##### FUNCTION nm_setting_vpn_foreach_secret ##### -->
diff --git a/docs/libnm-util/tmpl/nm-setting-wimax.sgml b/docs/libnm-util/tmpl/nm-setting-wimax.sgml
index ebfbd61a2..151e723e4 100644
--- a/docs/libnm-util/tmpl/nm-setting-wimax.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-wimax.sgml
@@ -68,6 +68,29 @@ NMSettingWimax
+<!-- ##### STRUCT NMSettingWimax ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingWimax:mac-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWimax:network-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingWimaxClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
<!-- ##### FUNCTION nm_setting_wimax_new ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-wired.sgml b/docs/libnm-util/tmpl/nm-setting-wired.sgml
index d2e80029b..7d169ea48 100644
--- a/docs/libnm-util/tmpl/nm-setting-wired.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-wired.sgml
@@ -131,6 +131,78 @@ NMSettingWired
+<!-- ##### STRUCT NMSettingWired ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingWired:auto-negotiate ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:cloned-mac-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:duplex ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:mac-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:mac-address-blacklist ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:mtu ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:port ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:s390-nettype ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:s390-options ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:s390-subchannels ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWired:speed ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingWiredClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_wired_new ##### -->
<para>
@@ -203,6 +275,62 @@ NMSettingWired
@Returns:
+<!-- ##### FUNCTION nm_setting_wired_get_num_mac_blacklist_items ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_mac_blacklist_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_add_mac_blacklist_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@mac:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_remove_mac_blacklist_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+
+
+<!-- ##### FUNCTION nm_setting_wired_remove_mac_blacklist_item_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@mac:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_clear_mac_blacklist_items ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
<!-- ##### FUNCTION nm_setting_wired_get_mtu ##### -->
<para>
@@ -268,7 +396,7 @@ NMSettingWired
@setting:
@key:
-@item:
+@value:
@Returns:
@@ -282,3 +410,12 @@ NMSettingWired
@Returns:
+<!-- ##### FUNCTION nm_setting_wired_get_valid_s390_options ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting-wireless-security.sgml b/docs/libnm-util/tmpl/nm-setting-wireless-security.sgml
index cb67e6e2d..bcb0b7029 100644
--- a/docs/libnm-util/tmpl/nm-setting-wireless-security.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-wireless-security.sgml
@@ -187,6 +187,108 @@ NMSettingWirelessSecurity
+<!-- ##### STRUCT NMSettingWirelessSecurity ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingWirelessSecurity:auth-alg ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:group ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:key-mgmt ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:leap-password ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:leap-password-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:leap-username ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:pairwise ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:proto ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:psk ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:psk-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:wep-key-flags ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:wep-key-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:wep-key0 ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:wep-key1 ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:wep-key2 ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:wep-key3 ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWirelessSecurity:wep-tx-keyidx ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingWirelessSecurityClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_wireless_security_new ##### -->
<para>
@@ -243,6 +345,16 @@ NMSettingWirelessSecurity
@i:
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_proto_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@proto:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_wireless_security_clear_protos ##### -->
<para>
@@ -289,6 +401,16 @@ NMSettingWirelessSecurity
@i:
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_pairwise_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@pairwise:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_wireless_security_clear_pairwise ##### -->
<para>
@@ -335,6 +457,16 @@ NMSettingWirelessSecurity
@i:
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_group_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@group:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_wireless_security_clear_groups ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-wireless.sgml b/docs/libnm-util/tmpl/nm-setting-wireless.sgml
index af9da818c..9e071371e 100644
--- a/docs/libnm-util/tmpl/nm-setting-wireless.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-wireless.sgml
@@ -140,14 +140,14 @@ NMSettingWireless
-<!-- ##### MACRO NM_SETTING_WIRELESS_SEC ##### -->
+<!-- ##### MACRO NM_SETTING_WIRELESS_HIDDEN ##### -->
<para>
</para>
-<!-- ##### MACRO NM_SETTING_WIRELESS_HIDDEN ##### -->
+<!-- ##### MACRO NM_SETTING_WIRELESS_SEC ##### -->
<para>
</para>
@@ -175,6 +175,93 @@ NMSettingWireless
+<!-- ##### STRUCT NMSettingWireless ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingWireless:band ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:bssid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:channel ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:cloned-mac-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:hidden ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:mac-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:mac-address-blacklist ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:mode ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:mtu ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:rate ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:security ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:seen-bssids ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:ssid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:tx-power ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingWirelessClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@_reserved1:
+@_reserved2:
+@_reserved3:
+@_reserved4:
+
<!-- ##### FUNCTION nm_setting_wireless_new ##### -->
<para>
@@ -274,7 +361,7 @@ NMSettingWireless
@Returns:
-<!-- ##### FUNCTION nm_setting_wireless_get_mtu ##### -->
+<!-- ##### FUNCTION nm_setting_wireless_get_num_mac_blacklist_items ##### -->
<para>
</para>
@@ -283,7 +370,54 @@ NMSettingWireless
@Returns:
-<!-- ##### FUNCTION nm_setting_wireless_get_security ##### -->
+<!-- ##### FUNCTION nm_setting_wireless_get_mac_blacklist_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_add_mac_blacklist_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@mac:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_remove_mac_blacklist_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_remove_mac_blacklist_item_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@mac:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_clear_mac_blacklist_items ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_mtu ##### -->
<para>
</para>
@@ -344,3 +478,12 @@ NMSettingWireless
@Returns:
+<!-- ##### FUNCTION nm_setting_wireless_get_security ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm-util/tmpl/nm-setting.sgml b/docs/libnm-util/tmpl/nm-setting.sgml
index beb8c66b1..d5df34e5e 100644
--- a/docs/libnm-util/tmpl/nm-setting.sgml
+++ b/docs/libnm-util/tmpl/nm-setting.sgml
@@ -128,6 +128,22 @@ NMSetting
@Returns:
+<!-- ##### STRUCT NMSettingClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@verify:
+@need_secrets:
+@update_one_secret:
+@get_secret_flags:
+@set_secret_flags:
+@compare_property:
+@clear_secrets_with_flags:
+@get_virtual_iface_name:
+@_reserved1:
+
<!-- ##### USER_FUNCTION NMSettingValueIterFn ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-utils.sgml b/docs/libnm-util/tmpl/nm-utils.sgml
index f4ae27dda..99a0f447c 100644
--- a/docs/libnm-util/tmpl/nm-utils.sgml
+++ b/docs/libnm-util/tmpl/nm-utils.sgml
@@ -303,6 +303,18 @@ nm-utils
@Returns:
+<!-- ##### FUNCTION nm_utils_rsa_key_encrypt_aes ##### -->
+<para>
+
+</para>
+
+@data:
+@in_password:
+@out_password:
+@error:
+@Returns:
+
+
<!-- ##### FUNCTION nm_utils_file_is_pkcs12 ##### -->
<para>
@@ -408,6 +420,66 @@ nm-utils
@Returns:
+<!-- ##### FUNCTION nm_utils_hwaddr_ntoa_len ##### -->
+<para>
+
+</para>
+
+@addr:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_aton_len ##### -->
+<para>
+
+</para>
+
+@asc:
+@buffer:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_valid ##### -->
+<para>
+
+</para>
+
+@asc:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_bin2hexstr ##### -->
+<para>
+
+</para>
+
+@bytes:
+@len:
+@final_len:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hex2byte ##### -->
+<para>
+
+</para>
+
+@hex:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hexstr2bin ##### -->
+<para>
+
+</para>
+
+@hex:
+@len:
+@Returns:
+
+
<!-- ##### FUNCTION nm_utils_iface_valid_name ##### -->
<para>
@@ -426,3 +498,40 @@ nm-utils
@Returns:
+<!-- ##### MACRO NM_UTILS_INET_ADDRSTRLEN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_utils_inet4_ntop ##### -->
+<para>
+
+</para>
+
+@inaddr:
+@dst:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_inet6_ntop ##### -->
+<para>
+
+</para>
+
+@in6addr:
+@dst:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_check_virtual_device_compatibility ##### -->
+<para>
+
+</para>
+
+@virtual_type:
+@other_type:
+@Returns:
+
+
diff --git a/docs/libnm-util/version.xml b/docs/libnm-util/version.xml
index dd62f24f0..82e28fcb1 100644
--- a/docs/libnm-util/version.xml
+++ b/docs/libnm-util/version.xml
@@ -1 +1 @@
-0.9.8.10
+0.9.10.0
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index 724e1e098..95754494d 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -81,7 +81,8 @@ host_triplet = @host@
subdir = examples/C
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -205,12 +206,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -235,7 +239,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -280,12 +283,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -302,6 +309,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -329,11 +338,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -348,6 +362,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -410,6 +425,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -420,6 +436,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = glib $(am__append_1)
all: all-recursive
diff --git a/examples/C/glib/Makefile.in b/examples/C/glib/Makefile.in
index ff7d65a41..e58e66d01 100644
--- a/examples/C/glib/Makefile.in
+++ b/examples/C/glib/Makefile.in
@@ -91,7 +91,8 @@ subdir = examples/C/glib
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -274,12 +275,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -304,7 +308,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -349,12 +352,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -371,6 +378,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -398,11 +407,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -417,6 +431,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -479,6 +494,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -489,6 +505,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
AM_CPPFLAGS = \
-I${top_srcdir}/libnm-util \
-I${top_builddir}/libnm-util \
diff --git a/examples/C/glib/add-connection-dbus-glib.c b/examples/C/glib/add-connection-dbus-glib.c
index c7c1a3f11..354dcb75a 100644
--- a/examples/C/glib/add-connection-dbus-glib.c
+++ b/examples/C/glib/add-connection-dbus-glib.c
@@ -102,8 +102,10 @@ int main (int argc, char *argv[])
DBusGConnection *bus;
DBusGProxy *proxy;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
/* Get system bus */
bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
diff --git a/examples/C/glib/add-connection-libnm-glib.c b/examples/C/glib/add-connection-libnm-glib.c
index 510e06ee7..28eadf8d3 100644
--- a/examples/C/glib/add-connection-libnm-glib.c
+++ b/examples/C/glib/add-connection-libnm-glib.c
@@ -110,8 +110,10 @@ int main (int argc, char *argv[])
NMRemoteSettings *settings;
GMainLoop *loop;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
loop = g_main_loop_new (NULL, FALSE);
diff --git a/examples/C/glib/get-active-connections-dbus-glib.c b/examples/C/glib/get-active-connections-dbus-glib.c
index f27c44fba..186feae26 100644
--- a/examples/C/glib/get-active-connections-dbus-glib.c
+++ b/examples/C/glib/get-active-connections-dbus-glib.c
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 Red Hat, Inc.
+ * (C) Copyright 2010 -2014 Red Hat, Inc.
*/
/*
@@ -26,6 +26,7 @@
* gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util` get-active-connections-dbus-glib.c -o get-active-connections-dbus-glib
*/
+#include <stdio.h>
#include <glib.h>
#include <dbus/dbus-glib.h>
@@ -41,22 +42,18 @@
#define DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH))
static void
-print_connection (DBusGConnection *bus, const char *service, const char *path)
+print_connection (DBusGConnection *bus, const char *path)
{
DBusGProxy *proxy;
GError *error = NULL;
GHashTable *hash = NULL;
NMConnection *connection = NULL;
- /* This function asks the Settings Service that provides this network
- * configuration for the details of that configuration.
- */
+ /* This function asks NetworkManager for the details of the connection */
- /* Create the D-Bus proxy for the Settings Service so we can ask it for the
- * connection configuration details.
- */
+ /* Create the D-Bus proxy so we can ask it for the connection configuration details. */
proxy = dbus_g_proxy_new_for_name (bus,
- service,
+ NM_DBUS_SERVICE,
path,
NM_DBUS_IFACE_SETTINGS_CONNECTION);
g_assert (proxy);
@@ -72,9 +69,8 @@ print_connection (DBusGConnection *bus, const char *service, const char *path)
goto out;
}
- /* Using the raw configuration, create an NMConnection object for it. This
- * step also verifies that the data we got from the settings service is
- * valid. */
+ /* Using the raw configuration, create an NMConnection object for it. This
+ * step also verifies that the data we got from NetworkManager are valid. */
connection = nm_connection_new_from_hash (hash, &error);
if (!connection) {
g_warning ("Received invalid connection data: %s", error->message);
@@ -83,7 +79,7 @@ print_connection (DBusGConnection *bus, const char *service, const char *path)
}
/* And finally dump all the configuration to stdout */
- g_message ("%s => %s", service, path);
+ printf ("%s <=> %s\n", nm_connection_get_id (connection), path);
nm_connection_dump (connection);
out:
@@ -98,10 +94,9 @@ static void
get_active_connection_details (DBusGConnection *bus, const char *obj_path)
{
DBusGProxy *props_proxy;
- GValue path_value = { 0 };
- GValue serv_value = { 0 };
+ GValue path_value = G_VALUE_INIT;
GError *error = NULL;
- const char *path = NULL, *service = NULL;
+ const char *path = NULL;
/* This function gets the backing Connection object that describes the
* network configuration that the ActiveConnection object is actually using.
@@ -141,37 +136,11 @@ get_active_connection_details (DBusGConnection *bus, const char *obj_path)
goto out;
}
- /* Get the service name of the D-Bus service that provides the Connection */
- if (!dbus_g_proxy_call (props_proxy, "Get", &error,
- G_TYPE_STRING, NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
- G_TYPE_STRING, "ServiceName",
- G_TYPE_INVALID,
- G_TYPE_VALUE, &serv_value,
- G_TYPE_INVALID)) {
- g_warning ("Failed to get active connection ServiceName property: %s",
- error->message);
- g_error_free (error);
- goto out;
- }
-
- if (!G_VALUE_HOLDS (&serv_value, G_TYPE_STRING)) {
- g_warning ("Unexpected type returned getting Connection property: %s",
- G_VALUE_TYPE_NAME (&serv_value));
- goto out;
- }
-
- service = g_value_get_string (&serv_value);
- if (!service) {
- g_warning ("Missing connection service name!");
- goto out;
- }
-
/* Print out the actual connection details */
- print_connection (bus, service, path);
+ print_connection (bus, path);
out:
g_value_unset (&path_value);
- g_value_unset (&serv_value);
g_object_unref (props_proxy);
}
@@ -179,8 +148,9 @@ static void
get_active_connections (DBusGConnection *bus, DBusGProxy *proxy)
{
GError *error = NULL;
- GValue value = { 0 };
+ GValue value = G_VALUE_INIT;
GPtrArray *paths = NULL;
+ const char *a_path;
int i;
/* Get the ActiveConnections property from the NM Manager object */
@@ -209,9 +179,12 @@ get_active_connections (DBusGConnection *bus, DBusGProxy *proxy)
goto out;
}
- /* And print out the details of each active connection */
- for (i = 0; i < paths->len; i++)
- get_active_connection_details (bus, g_ptr_array_index (paths, i));
+ /* And print out the details for each active connection */
+ for (i = 0; i < paths->len; i++) {
+ a_path = g_ptr_array_index (paths, i);
+ printf ("Active connection path: %s\n", a_path);
+ get_active_connection_details (bus, a_path);
+ }
out:
g_value_unset (&value);
@@ -223,8 +196,10 @@ int main (int argc, char *argv[])
DBusGConnection *bus;
DBusGProxy *props_proxy;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
/* Get system bus */
bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
diff --git a/examples/C/glib/get-ap-info-libnm-glib.c b/examples/C/glib/get-ap-info-libnm-glib.c
index e72ce54fa..1ad58124b 100644
--- a/examples/C/glib/get-ap-info-libnm-glib.c
+++ b/examples/C/glib/get-ap-info-libnm-glib.c
@@ -96,7 +96,7 @@ show_access_point_info (NMAccessPoint *ap)
wpa_flags = nm_access_point_get_wpa_flags (ap);
rsn_flags = nm_access_point_get_rsn_flags (ap);
ssid = nm_access_point_get_ssid (ap);
- hwaddr = nm_access_point_get_hw_address (ap);
+ hwaddr = nm_access_point_get_bssid (ap);
freq = nm_access_point_get_frequency (ap);
mode = nm_access_point_get_mode (ap);
bitrate = nm_access_point_get_max_bitrate (ap);
@@ -105,7 +105,7 @@ show_access_point_info (NMAccessPoint *ap)
/* Convert to strings */
ssid_str = nm_utils_ssid_to_utf8 (ssid);
freq_str = g_strdup_printf ("%u MHz", freq);
- bitrate_str = g_strdup_printf ("%u MB/s", bitrate/1000);
+ bitrate_str = g_strdup_printf ("%u Mbit/s", bitrate/1000);
strength_str = g_strdup_printf ("%u", strength);
wpa_flags_str = ap_wpa_rsn_flags_to_string (wpa_flags);
rsn_flags_str = ap_wpa_rsn_flags_to_string (rsn_flags);
@@ -178,7 +178,7 @@ show_wifi_device_info (NMDevice *device)
speed = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device));
speed /= 1000;
- printf ("Device: %s ---- Driver: %s ---- Speed: %d MB/s ---- Active AP: %s\n",
+ printf ("Device: %s ---- Driver: %s ---- Speed: %d Mbit/s ---- Active AP: %s\n",
iface, driver, speed, active_ssid_str ? active_ssid_str : "none");
printf ("=================================================================================\n");
g_free (active_ssid_str);
@@ -200,8 +200,10 @@ int main (int argc, char *argv[])
const GPtrArray *devices;
int i;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
/* Get system bus */
bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
diff --git a/examples/C/glib/list-connections-dbus-glib.c b/examples/C/glib/list-connections-dbus-glib.c
index 2cb584b59..e17b8dc7d 100644
--- a/examples/C/glib/list-connections-dbus-glib.c
+++ b/examples/C/glib/list-connections-dbus-glib.c
@@ -40,13 +40,19 @@ list_connections (DBusGProxy *proxy)
int i;
GError *error = NULL;
GPtrArray *con_array;
+ gboolean success;
/* Call ListConnections D-Bus method */
- dbus_g_proxy_call (proxy, "ListConnections", &error,
- /* No input arguments */
- G_TYPE_INVALID,
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &con_array, /* Return values */
- G_TYPE_INVALID);
+ success = dbus_g_proxy_call (proxy, "ListConnections", &error,
+ /* No input arguments */
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &con_array, /* Return values */
+ G_TYPE_INVALID);
+ if (!success) {
+ printf ("ListConnections failed: %s", error->message);
+ g_error_free (error);
+ return;
+ }
for (i = 0; con_array && i < con_array->len; i++) {
char *connection_path = g_ptr_array_index (con_array, i);
@@ -61,8 +67,10 @@ int main (int argc, char *argv[])
DBusGConnection *bus;
DBusGProxy *proxy;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
/* Get system bus */
bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
diff --git a/examples/C/glib/list-connections-libnm-glib.c b/examples/C/glib/list-connections-libnm-glib.c
index 01a9f254e..29f105c60 100644
--- a/examples/C/glib/list-connections-libnm-glib.c
+++ b/examples/C/glib/list-connections-libnm-glib.c
@@ -67,7 +67,7 @@ setup_signals (void)
/* Print details of connection */
static void
-show_connection (NMConnection *data, gpointer user_data)
+show_connection (gpointer data, gpointer user_data)
{
NMConnection *connection = (NMConnection *) data;
NMSettingConnection *s_con;
@@ -107,7 +107,7 @@ get_connections_cb (NMRemoteSettings *settings, gpointer user_data)
printf ("Connections:\n===================\n");
- g_slist_foreach (connections, (GFunc) show_connection, NULL);
+ g_slist_foreach (connections, show_connection, NULL);
g_slist_free (connections);
g_object_unref (settings);
@@ -153,8 +153,10 @@ int main (int argc, char *argv[])
{
DBusGConnection *bus;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
/* Get system bus */
bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
diff --git a/examples/C/glib/monitor-nm-running-GDBus.c b/examples/C/glib/monitor-nm-running-GDBus.c
index 42f9b7582..9e38d4c70 100644
--- a/examples/C/glib/monitor-nm-running-GDBus.c
+++ b/examples/C/glib/monitor-nm-running-GDBus.c
@@ -31,7 +31,6 @@
#include <gio/gio.h>
-#if GLIB_CHECK_VERSION(2,26,0)
static void
on_name_appeared (GDBusConnection *connection,
const gchar *name,
@@ -49,19 +48,19 @@ on_name_vanished (GDBusConnection *connection,
{
g_print ("Name '%s' does not exist on the system bus => NM is not running\n", name);
}
-#endif
int
main (int argc, char *argv[])
{
-#if GLIB_CHECK_VERSION(2,26,0)
guint watcher_id;
GMainLoop *loop;
GBusNameWatcherFlags flags;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
g_print ("Monitor 'org.freedesktop.NetworkManager' D-Bus name\n");
g_print ("===================================================\n");
@@ -83,9 +82,6 @@ main (int argc, char *argv[])
/* Stop watching the name */
g_bus_unwatch_name (watcher_id);
-#else
- g_print ("Sorry, you need at least GLib 2.26 for GDBus.\n");
-#endif
return 0;
}
diff --git a/examples/C/glib/monitor-nm-running-dbus-glib.c b/examples/C/glib/monitor-nm-running-dbus-glib.c
index 3290fb1ac..0b01a57f0 100644
--- a/examples/C/glib/monitor-nm-running-dbus-glib.c
+++ b/examples/C/glib/monitor-nm-running-dbus-glib.c
@@ -71,8 +71,10 @@ main (int argc, char *argv[])
GError *err = NULL;
gboolean nm_running;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
g_print ("Monitor 'org.freedesktop.NetworkManager' D-Bus name\n");
g_print ("===================================================\n");
diff --git a/examples/C/glib/monitor-nm-state-GDBus.c b/examples/C/glib/monitor-nm-state-GDBus.c
index 22ff65b77..f40197253 100644
--- a/examples/C/glib/monitor-nm-state-GDBus.c
+++ b/examples/C/glib/monitor-nm-state-GDBus.c
@@ -34,7 +34,6 @@
#include <string.h>
#include <NetworkManager.h>
-#if GLIB_CHECK_VERSION(2,26,0)
static const char *
nm_state_to_string (NMState state)
{
@@ -82,20 +81,20 @@ on_signal (GDBusProxy *proxy,
g_print ("NetworkManager state is: (%d) %s\n", new_state, nm_state_to_string ((NMState) new_state));
}
}
-#endif
int
main (int argc, char *argv[])
{
-#if GLIB_CHECK_VERSION(2,26,0)
GMainLoop *loop;
GError *error = NULL;
GDBusProxyFlags flags;
GDBusProxy *proxy;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
g_type_init ();
+#endif
/* Monitor 'StateChanged' signal on 'org.freedesktop.NetworkManager' interface */
g_print ("Monitor NetworkManager's state\n");
@@ -129,9 +128,6 @@ main (int argc, char *argv[])
g_main_loop_run (loop);
g_object_unref (proxy);
-#else
- g_print ("Sorry, you need at least GLib 2.26 for GDBus.\n");
-#endif
return 0;
}
diff --git a/examples/C/qt/Makefile.in b/examples/C/qt/Makefile.in
index 9ef5fea6f..6cce98839 100644
--- a/examples/C/qt/Makefile.in
+++ b/examples/C/qt/Makefile.in
@@ -85,7 +85,8 @@ subdir = examples/C/qt
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -215,12 +216,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -245,7 +249,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -290,12 +293,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -312,6 +319,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -339,11 +348,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -358,6 +372,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -420,6 +435,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -430,6 +446,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
AM_CPPFLAGS = \
-I${top_srcdir}/include \
-I${top_builddir}/include \
diff --git a/examples/C/qt/monitor-nm-running.cpp b/examples/C/qt/monitor-nm-running.cpp
index 861f251e0..cf597b541 100644
--- a/examples/C/qt/monitor-nm-running.cpp
+++ b/examples/C/qt/monitor-nm-running.cpp
@@ -51,13 +51,13 @@ class NMWatcher: public QObject {
void NMWatcher::serviceRegistered(const QString& name)
{
- std::cout << "Name '" << name.toStdString() << "' registered"
+ std::cout << "Name '" << name.toUtf8().constData() << "' registered"
<< " => NM is running" << std::endl;
}
void NMWatcher::serviceUnregistered(const QString& name)
{
- std::cout << "Name '" << name.toStdString() << "' unregistered"
+ std::cout << "Name '" << name.toUtf8().constData() << "' unregistered"
<< " => NM is not running" << std::endl;
}
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 22bf9efb4..8a27af4f3 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = examples
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -204,12 +205,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -234,7 +238,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -279,12 +282,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -301,6 +308,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -328,11 +337,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -347,6 +361,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -409,6 +424,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -419,6 +435,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = \
shell \
python \
diff --git a/examples/dispatcher/70-wifi-wired-exclusive.sh b/examples/dispatcher/70-wifi-wired-exclusive.sh
index 501f159ef..676695f44 100755
--- a/examples/dispatcher/70-wifi-wired-exclusive.sh
+++ b/examples/dispatcher/70-wifi-wired-exclusive.sh
@@ -1,26 +1,17 @@
#!/bin/bash
-export LC_ALL=C
-
# This dispatcher script makes WiFi mutually exclusive with
# wired networking. When a wired interface is connected,
# WiFi will be set to airplane mode (rfkilled). When the wired
# interface is disconnected, WiFi will be turned back on.
+#
+# Copyright 2012 Johannes Buchner <buchner.johannes@gmx.at>
+# Copyright 2012 - 2014 Red Hat, Inc.
+#
-enable_disable_wifi ()
-{
- result=$(nmcli dev | grep "802-3-ethernet" | grep -w "connected")
- if [ -n "$result" ]; then
- nmcli nm wifi off
- else
- nmcli nm wifi on
- fi
-}
-
-if [ "$2" = "up" ]; then
- enable_disable_wifi
-fi
-
-if [ "$2" = "down" ]; then
- enable_disable_wifi
+export LC_ALL=C
+if nmcli -t --fields type,state dev | grep -E "ethernet:connected" -q; then
+ nmcli radio wifi off
+else
+ nmcli radio wifi on
fi
diff --git a/examples/dispatcher/Makefile.in b/examples/dispatcher/Makefile.in
index 7325da6b8..d577fde10 100644
--- a/examples/dispatcher/Makefile.in
+++ b/examples/dispatcher/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = examples/dispatcher
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -144,12 +145,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -174,7 +178,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -219,12 +222,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -241,6 +248,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -268,11 +277,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -287,6 +301,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -349,6 +364,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -359,6 +375,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
70-wifi-wired-exclusive.sh
diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am
index 4c0f9c745..3b6a41f49 100644
--- a/examples/python/Makefile.am
+++ b/examples/python/Makefile.am
@@ -1,13 +1,2 @@
-EXTRA_DIST = \
- nm-state.py \
- add-connection.py \
- add-system-wifi-connection.py
- vpn.py \
- update-secrets.py \
- list-connections.py \
- show-bssids.py \
- disconnect-device.py \
- get-active-connection-uuids.py \
- list-devices.py \
- goi-list-connections.py \
- goi-device-state-ip4config.py
+SUBDIRS= dbus gi
+
diff --git a/examples/python/Makefile.in b/examples/python/Makefile.in
index e2dea30af..338935955 100644
--- a/examples/python/Makefile.in
+++ b/examples/python/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = examples/python
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -112,13 +113,73 @@ am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
@@ -144,12 +205,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -174,7 +238,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -219,12 +282,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -241,6 +308,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -268,11 +337,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -287,6 +361,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -349,6 +424,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -359,12 +435,9 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-EXTRA_DIST = \
- nm-state.py \
- add-connection.py \
- add-system-wifi-connection.py
-
-all: all-am
+with_valgrind = @with_valgrind@
+SUBDIRS = dbus gi
+all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@@ -403,12 +476,105 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
-tags TAGS:
-
-ctags CTAGS:
-cscope cscopelist:
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -440,19 +606,45 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
check-am: all-am
-check: check-am
+check: check-recursive
all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -474,95 +666,87 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-generic distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
install-data-am:
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am:
-.MAKE: install-am install-strip
+.MAKE: $(am__recursive_targets) install-am install-strip
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- cscopelist-am ctags-am distclean distclean-generic \
- distclean-libtool distdir dvi dvi-am html html-am info info-am \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags-am uninstall uninstall-am
-
- vpn.py \
- update-secrets.py \
- list-connections.py \
- show-bssids.py \
- disconnect-device.py \
- get-active-connection-uuids.py \
- list-devices.py \
- goi-list-connections.py \
- goi-device-state-ip4config.py
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/examples/python/dbus/Makefile.am b/examples/python/dbus/Makefile.am
new file mode 100644
index 000000000..0e8848849
--- /dev/null
+++ b/examples/python/dbus/Makefile.am
@@ -0,0 +1,13 @@
+EXTRA_DIST = \
+ nm-state.py \
+ add-connection.py \
+ add-system-wifi-connection.py \
+ vpn.py \
+ update-secrets.py \
+ list-connections.py \
+ show-bssids.py \
+ disconnect-device.py \
+ get-active-connection-uuids.py \
+ list-devices.py \
+ update-ip4-method.py \
+ is-wwan-default.py
diff --git a/examples/python/dbus/Makefile.in b/examples/python/dbus/Makefile.in
new file mode 100644
index 000000000..7b543fa73
--- /dev/null
+++ b/examples/python/dbus/Makefile.in
@@ -0,0 +1,586 @@
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples/python/dbus
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
+ $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/gnome-code-coverage.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CKDB_PATH = @CKDB_PATH@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
+DBUS_LIBS = @DBUS_LIBS@
+DBUS_SYS_DIR = @DBUS_SYS_DIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DHCLIENT_PATH = @DHCLIENT_PATH@
+DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
+DLLTOOL = @DLLTOOL@
+DNSMASQ_PATH = @DNSMASQ_PATH@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GENHTML = @GENHTML@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MAKEFILE = @GLIB_MAKEFILE@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
+GNUTLS_LIBS = @GNUTLS_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUDEV_CFLAGS = @GUDEV_CFLAGS@
+GUDEV_LIBS = @GUDEV_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IPTABLES_PATH = @IPTABLES_PATH@
+IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
+IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
+KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDL = @LIBDL@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
+LIBNL_CFLAGS = @LIBNL_CFLAGS@
+LIBNL_LIBS = @LIBNL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@
+MM_GLIB_LIBS = @MM_GLIB_LIBS@
+MOC = @MOC@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
+NM_MICRO_VERSION = @NM_MICRO_VERSION@
+NM_MINOR_VERSION = @NM_MINOR_VERSION@
+NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@
+NM_VERSION = @NM_VERSION@
+NSS_CFLAGS = @NSS_CFLAGS@
+NSS_LIBS = @NSS_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POLKIT_CFLAGS = @POLKIT_CFLAGS@
+POLKIT_LIBS = @POLKIT_LIBS@
+POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
+PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSTEMD_200_CFLAGS = @SYSTEMD_200_CFLAGS@
+SYSTEMD_200_LIBS = @SYSTEMD_200_LIBS@
+SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@
+SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@
+SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@
+SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@
+SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
+UDEV_BASE_DIR = @UDEV_BASE_DIR@
+USE_NLS = @USE_NLS@
+UUID_CFLAGS = @UUID_CFLAGS@
+UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
+VAPIGEN = @VAPIGEN@
+VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
+VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+nmbinary = @nmbinary@
+nmconfdir = @nmconfdir@
+nmdatadir = @nmdatadir@
+nmrundir = @nmrundir@
+nmstatedir = @nmstatedir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+systemdsystemunitdir = @systemdsystemunitdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+with_dhclient = @with_dhclient@
+with_dhcpcd = @with_dhcpcd@
+with_netconfig = @with_netconfig@
+with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
+EXTRA_DIST = \
+ nm-state.py \
+ add-connection.py \
+ add-system-wifi-connection.py \
+ vpn.py \
+ update-secrets.py \
+ list-connections.py \
+ show-bssids.py \
+ disconnect-device.py \
+ get-active-connection-uuids.py \
+ list-devices.py \
+ update-ip4-method.py \
+ is-wwan-default.py
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/python/dbus/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/python/dbus/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/python/add-connection.py b/examples/python/dbus/add-connection.py
index 6df14c103..6df14c103 100755
--- a/examples/python/add-connection.py
+++ b/examples/python/dbus/add-connection.py
diff --git a/examples/python/add-system-wifi-connection.py b/examples/python/dbus/add-system-wifi-connection.py
index ff3908217..ff3908217 100755
--- a/examples/python/add-system-wifi-connection.py
+++ b/examples/python/dbus/add-system-wifi-connection.py
diff --git a/examples/python/dbus/disconnect-device.py b/examples/python/dbus/disconnect-device.py
new file mode 100755
index 000000000..85afa97ba
--- /dev/null
+++ b/examples/python/dbus/disconnect-device.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2010 Red Hat, Inc.
+#
+
+import dbus, sys
+
+# This example takes a device interface name as a parameter and tells
+# NetworkManager to disconnect that device, closing down any network
+# connection it may have
+
+if len(sys.argv) != 2:
+ raise Exception("Usage: %s <interface>" % sys.argv[0])
+
+bus = dbus.SystemBus()
+
+# Get a proxy for the base NetworkManager object
+proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
+manager = dbus.Interface(proxy, "org.freedesktop.NetworkManager")
+
+dpath = None
+
+# Find the device the user wants to disconnect
+devices = manager.GetDevices()
+for d in devices:
+ dev_proxy = bus.get_object("org.freedesktop.NetworkManager", d)
+ prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
+ iface = prop_iface.Get("org.freedesktop.NetworkManager.Device", "Interface")
+ if iface == sys.argv[1]:
+ dpath = d
+ break
+
+if not dpath or not len(dpath):
+ raise Exception("NetworkManager knows nothing about %s" % sys.argv[1])
+
+dev_proxy = bus.get_object("org.freedesktop.NetworkManager", dpath)
+dev_iface = dbus.Interface(dev_proxy, "org.freedesktop.NetworkManager.Device")
+prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
+
+# Make sure the device is connected before we try to disconnect it
+state = prop_iface.Get("org.freedesktop.NetworkManager.Device", "State")
+if state <= 3:
+ raise Exception("Device %s isn't connected" % sys.argv[1])
+
+# Tell NM to disconnect it
+dev_iface.Disconnect()
+
diff --git a/examples/python/dbus/get-active-connection-uuids.py b/examples/python/dbus/get-active-connection-uuids.py
new file mode 100755
index 000000000..6fe93d05d
--- /dev/null
+++ b/examples/python/dbus/get-active-connection-uuids.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2010 Red Hat, Inc.
+#
+
+import dbus, sys
+
+# This example takes a device interface name as a parameter and tells
+# NetworkManager to disconnect that device, closing down any network
+# connection it may have
+
+bus = dbus.SystemBus()
+
+# Get a proxy for the base NetworkManager object
+m_proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
+manager = dbus.Interface(m_proxy, "org.freedesktop.NetworkManager")
+mgr_props = dbus.Interface(m_proxy, "org.freedesktop.DBus.Properties")
+
+s_proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings")
+settings = dbus.Interface(s_proxy, "org.freedesktop.NetworkManager.Settings")
+
+# Find the device the user wants to disconnect
+active = mgr_props.Get("org.freedesktop.NetworkManager", "ActiveConnections")
+for a in active:
+ a_proxy = bus.get_object("org.freedesktop.NetworkManager", a)
+
+ # Get the UUID directly; apps could use this to perform certain operations
+ # based on which network you're connected too
+ a_props = dbus.Interface(a_proxy, "org.freedesktop.DBus.Properties")
+ uuid = a_props.Get("org.freedesktop.NetworkManager.Connection.Active", "Uuid")
+
+ # Grab the connection object path so we can get all the connection's settings
+ connection_path = a_props.Get("org.freedesktop.NetworkManager.Connection.Active", "Connection")
+ c_proxy = bus.get_object("org.freedesktop.NetworkManager", connection_path)
+ connection = dbus.Interface(c_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
+ settings = connection.GetSettings()
+ print "%s (%s) - %s" % (settings['connection']['id'], uuid, settings['connection']['type'])
+
+if len(active) == 0:
+ print "No active connections"
+
diff --git a/examples/python/dbus/is-wwan-default.py b/examples/python/dbus/is-wwan-default.py
new file mode 100755
index 000000000..6131cda16
--- /dev/null
+++ b/examples/python/dbus/is-wwan-default.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2011 - 2012 Red Hat, Inc.
+#
+
+import dbus, sys
+
+# This example indicates whether the default network connection is known to be WWAN
+
+NM_DEVICE_TYPE_MODEM = 8
+NM_DEVICE_TYPE_BLUETOOTH = 5
+NM_SERVICE_NAME = "org.freedesktop.NetworkManager"
+NM_MANAGER_IFACE = "org.freedesktop.NetworkManager"
+DBUS_PROPS_IFACE = "org.freedesktop.DBus.Properties"
+
+bus = dbus.SystemBus()
+
+# Exit early if NetworkManager is not running
+proxy = bus.get_object("org.freedesktop.DBus", "/org/freedesktop/DBus")
+busdaemon = dbus.Interface(proxy, "org.freedesktop.DBus")
+if not busdaemon.NameHasOwner(NM_SERVICE_NAME):
+ print "NetworkManager not running"
+ sys.exit(1)
+
+# Get a proxy for the NetworkManager object
+proxy = bus.get_object(NM_SERVICE_NAME, "/org/freedesktop/NetworkManager")
+manager = dbus.Interface(proxy, NM_MANAGER_IFACE)
+props = dbus.Interface(proxy, DBUS_PROPS_IFACE)
+
+default_is_wwan = False
+
+# Look through all active network connections for the default one
+active = props.Get(NM_MANAGER_IFACE, "ActiveConnections")
+for a in active:
+ a_proxy = bus.get_object(NM_SERVICE_NAME, a)
+ a_props = dbus.Interface(a_proxy, DBUS_PROPS_IFACE)
+ all_props = a_props.GetAll("org.freedesktop.NetworkManager.Connection.Active")
+
+ # Ignore this network connection if it's not default for IPv4 or IPv6
+ if all_props["Default"] == False and all_props["Default6"] == False:
+ continue
+
+ # Shortcut: check for Type property (only present in NM 0.9.9+)
+ try:
+ ctype = all_props["Type"]
+ if ctype in ["gsm", "cdma", "bluetooth"]:
+ default_is_wwan = True
+ break
+ except KeyError:
+ # Fall back to checking the type of the network connection's device
+ dev_path = all_props["Devices"][0]
+ dev_proxy = bus.get_object(NM_SERVICE_NAME, dev_path)
+ dev_props = dbus.Interface(dev_proxy, DBUS_PROPS_IFACE)
+ devtype = dev_props.Get("org.freedesktop.NetworkManager.Device", "DeviceType")
+ if devtype == NM_DEVICE_TYPE_MODEM or devtype == NM_DEVICE_TYPE_BLUETOOTH:
+ default_is_wwan = True
+ break
+
+if default_is_wwan:
+ print "WWAN is default"
+else:
+ print "WWAN is not default"
+
diff --git a/examples/python/dbus/list-connections.py b/examples/python/dbus/list-connections.py
new file mode 100755
index 000000000..120b744ac
--- /dev/null
+++ b/examples/python/dbus/list-connections.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2010 - 2011 Red Hat, Inc.
+#
+
+import dbus
+
+# This example asks settings service for all configured connections.
+# It also asks for secrets, demonstrating the mechanism the secrets can
+# be handled with.
+
+bus = dbus.SystemBus()
+
+def merge_secrets(proxy, config, setting_name):
+ try:
+ # returns a dict of dicts mapping name::setting, where setting is a dict
+ # mapping key::value. Each member of the 'setting' dict is a secret
+ secrets = proxy.GetSecrets(setting_name)
+
+ # Copy the secrets into our connection config
+ for setting in secrets:
+ for key in secrets[setting]:
+ config[setting_name][key] = secrets[setting][key]
+ except Exception, e:
+ pass
+
+def dict_to_string(d, indent):
+ # Try to trivially translate a dictionary's elements into nice string
+ # formatting.
+ dstr = ""
+ for key in d:
+ val = d[key]
+ str_val = ""
+ add_string = True
+ if type(val) == type(dbus.Array([])):
+ for elt in val:
+ if type(elt) == type(dbus.Byte(1)):
+ str_val += "%s " % int(elt)
+ elif type(elt) == type(dbus.String("")):
+ str_val += "%s" % elt
+ elif type(val) == type(dbus.Dictionary({})):
+ dstr += dict_to_string(val, indent + " ")
+ add_string = False
+ else:
+ str_val = val
+ if add_string:
+ dstr += "%s%s: %s\n" % (indent, key, str_val)
+ return dstr
+
+def connection_to_string(config):
+ # dump a connection configuration to a the console
+ for setting_name in config:
+ print " Setting: %s" % setting_name
+ print dict_to_string(config[setting_name], " ")
+ print ""
+
+
+def print_connections():
+ # Ask the settings service for the list of connections it provides
+ service_name = "org.freedesktop.NetworkManager"
+ proxy = bus.get_object(service_name, "/org/freedesktop/NetworkManager/Settings")
+ settings = dbus.Interface(proxy, "org.freedesktop.NetworkManager.Settings")
+ connection_paths = settings.ListConnections()
+
+ # List each connection's name, UUID, and type
+ for path in connection_paths:
+ con_proxy = bus.get_object(service_name, path)
+ settings_connection = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
+ config = settings_connection.GetSettings()
+
+ # Now get secrets too; we grab the secrets for each type of connection
+ # (since there isn't a "get all secrets" call because most of the time
+ # you only need 'wifi' secrets or '802.1x' secrets, not everything) and
+ # merge that into the configuration data
+ merge_secrets(settings_connection, config, '802-11-wireless')
+ merge_secrets(settings_connection, config, '802-11-wireless-security')
+ merge_secrets(settings_connection, config, '802-1x')
+ merge_secrets(settings_connection, config, 'gsm')
+ merge_secrets(settings_connection, config, 'cdma')
+ merge_secrets(settings_connection, config, 'ppp')
+
+ # Get the details of the 'connection' setting
+ s_con = config['connection']
+ print " name: %s" % s_con['id']
+ print " uuid: %s" % s_con['uuid']
+ print " type: %s" % s_con['type']
+ print " ------------------------------------------"
+ connection_to_string(config)
+
+ print ""
+
+print_connections()
+
diff --git a/examples/python/dbus/list-devices.py b/examples/python/dbus/list-devices.py
new file mode 100755
index 000000000..b8e0058be
--- /dev/null
+++ b/examples/python/dbus/list-devices.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2011 - 2012 Red Hat, Inc.
+#
+
+import dbus, sys
+
+# This example lists basic information about network interfaces known to NM
+
+# For the types see include/NetworkManager.h
+devtypes = { 1: "Ethernet",
+ 2: "Wi-Fi",
+ 5: "Bluetooth",
+ 6: "OLPC",
+ 7: "WiMAX",
+ 8: "Modem",
+ 9: "InfiniBand",
+ 10: "Bond",
+ 11: "VLAN",
+ 12: "ADSL",
+ 13: "Bridge",
+ 14: "Generic",
+ 15: "Team"
+ }
+
+states = { 0: "Unknown",
+ 10: "Unmanaged",
+ 20: "Unavailable",
+ 30: "Disconnected",
+ 40: "Prepare",
+ 50: "Config",
+ 60: "Need Auth",
+ 70: "IP Config",
+ 80: "IP Check",
+ 90: "Secondaries",
+ 100: "Activated",
+ 110: "Deactivating",
+ 120: "Failed" }
+
+bus = dbus.SystemBus()
+
+# Get a proxy for the base NetworkManager object
+proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
+manager = dbus.Interface(proxy, "org.freedesktop.NetworkManager")
+
+# Get all devices known to NM and print their properties
+devices = manager.GetDevices()
+for d in devices:
+ dev_proxy = bus.get_object("org.freedesktop.NetworkManager", d)
+ prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
+ props = prop_iface.GetAll("org.freedesktop.NetworkManager.Device")
+ print "============================"
+
+ print "Interface: %s" % props['Interface']
+ try:
+ devtype = devtypes[props['DeviceType']]
+ except KeyError:
+ devtype = "Unknown"
+ print "Type: %s" % devtype
+
+ print "Driver: %s" % props['Driver']
+
+ try:
+ state = states[props['State']]
+ except KeyError:
+ state = "Unknown"
+ print "State: %s" % state
+
diff --git a/examples/python/nm-state.py b/examples/python/dbus/nm-state.py
index 94fa63099..94fa63099 100644..100755
--- a/examples/python/nm-state.py
+++ b/examples/python/dbus/nm-state.py
diff --git a/examples/python/dbus/show-bssids.py b/examples/python/dbus/show-bssids.py
new file mode 100755
index 000000000..505e3d35c
--- /dev/null
+++ b/examples/python/dbus/show-bssids.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2010 Red Hat, Inc.
+#
+
+
+# This example prints out all the AP BSSIDs that all WiFi devices on the
+# machine can see. Useful for location-based services like Skyhook that
+# can geolocate you based on the APs you can see.
+
+import dbus
+
+bus = dbus.SystemBus()
+
+# Get a proxy for the base NetworkManager object
+proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
+manager = dbus.Interface(proxy, "org.freedesktop.NetworkManager")
+
+all_aps = []
+
+print "Associated APs:"
+
+# Get all network devices
+devices = manager.GetDevices()
+for d in devices:
+ dev_proxy = bus.get_object("org.freedesktop.NetworkManager", d)
+ prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
+
+ # Make sure the device is enabled before we try to use it
+ state = prop_iface.Get("org.freedesktop.NetworkManager.Device", "State")
+ if state <= 2:
+ continue
+
+ # Get device's type; we only want wifi devices
+ iface = prop_iface.Get("org.freedesktop.NetworkManager.Device", "Interface")
+ dtype = prop_iface.Get("org.freedesktop.NetworkManager.Device", "DeviceType")
+ if dtype == 2: # WiFi
+ # Get a proxy for the wifi interface
+ wifi_iface = dbus.Interface(dev_proxy, "org.freedesktop.NetworkManager.Device.Wireless")
+ wifi_prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
+
+ # Get the associated AP's object path
+ connected_path = wifi_prop_iface.Get("org.freedesktop.NetworkManager.Device.Wireless", "ActiveAccessPoint")
+
+ # Get all APs the card can see
+ aps = wifi_iface.GetAccessPoints()
+ for path in aps:
+ ap_proxy = bus.get_object("org.freedesktop.NetworkManager", path)
+ ap_prop_iface = dbus.Interface(ap_proxy, "org.freedesktop.DBus.Properties")
+ bssid = ap_prop_iface.Get("org.freedesktop.NetworkManager.AccessPoint", "HwAddress")
+
+ # Cache the BSSID
+ if not bssid in all_aps:
+ all_aps.append(bssid)
+
+ # Print the current AP's BSSID
+ if path == connected_path:
+ print "%s (%s)" % (bssid, iface)
+
+# and print out all APs the wifi devices can see
+print"\nFound APs:"
+for bssid in all_aps:
+ print bssid
+
diff --git a/examples/python/dbus/update-ip4-method.py b/examples/python/dbus/update-ip4-method.py
new file mode 100755
index 000000000..243738c5c
--- /dev/null
+++ b/examples/python/dbus/update-ip4-method.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+
+#
+# This example updates a connection's IPv4 method with the Update() method.
+#
+# Configuration settings are described at
+# https://developer.gnome.org/NetworkManager/0.9/ref-settings.html
+#
+
+import socket, struct, dbus, sys
+
+def ip_to_int(ip_string):
+ return struct.unpack("=I", socket.inet_aton(ip_string))[0]
+
+
+if len(sys.argv) < 3:
+ print "Usage: %s <uuid> <auto|static> [address prefix gateway]" % sys.argv[0]
+ sys.exit(1)
+
+method = sys.argv[2]
+if method == "static" and len(sys.argv) < 5:
+ print "Usage: %s %s static address prefix [gateway]" % (sys.argv[0], sys.argv[1])
+ sys.exit(1)
+
+# Convert method to NM method
+if method == "static":
+ method = "manual"
+
+bus = dbus.SystemBus()
+proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings")
+settings = dbus.Interface(proxy, "org.freedesktop.NetworkManager.Settings")
+
+for c_path in settings.ListConnections():
+ c_proxy = bus.get_object("org.freedesktop.NetworkManager", c_path)
+ c_obj = dbus.Interface(c_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
+ c_settings = c_obj.GetSettings()
+
+ # Look for the requested connection UUID
+ if c_settings['connection']['uuid'] != sys.argv[1]:
+ continue
+
+ # add IPv4 setting if it doesn't yet exist
+ if not c_settings.has_key('ipv4'):
+ c_settings['ipv4'] = {}
+
+ # set the method and change properties
+ c_settings['ipv4']['method'] = method
+ if method == "auto":
+ # remove addresses
+ c_settings['ipv4']['addresses'] = dbus.Array([], signature=dbus.Signature('au'))
+ elif method == "manual":
+ # Add the static IP address, prefix, and (optional) gateway
+ gw = 0
+ if len(sys.argv) == 6:
+ gw = ip_to_int(sys.argv[5])
+ addr = dbus.Array([ip_to_int(sys.argv[3]), dbus.UInt32(int(sys.argv[4])), gw], signature=dbus.Signature('u'))
+ c_settings['ipv4']['addresses'] = dbus.Array([addr], signature=dbus.Signature('au'))
+
+ # Save all the updated settings back to NetworkManager
+ c_obj.Update(c_settings)
+ break
+
+sys.exit(0)
+
diff --git a/examples/python/dbus/update-secrets.py b/examples/python/dbus/update-secrets.py
new file mode 100755
index 000000000..13cac1b08
--- /dev/null
+++ b/examples/python/dbus/update-secrets.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2011 - 2012 Red Hat, Inc.
+#
+
+#
+# The example shows how to update secrets in a connection by means of D-Bus
+# Update() method. The method replaces all previous settings with new ones
+# including possible secrets.
+# So, we get all settings using GetSettings() and then find out what secrets
+# are associated with the connection using GetSecrets(), ask for new secret
+# values, and add them to the settings that we pass to Update().
+#
+
+import dbus
+import sys
+
+bus = dbus.SystemBus()
+
+def change_secrets_in_one_setting(proxy, config, setting_name):
+ # Add new secret values to the connection config
+ try:
+ # returns a dict of dicts mapping name::setting, where setting is a dict
+ # mapping key::value. Each member of the 'setting' dict is a secret
+ secrets = proxy.GetSecrets(setting_name)
+ print "Current secrets:", secrets
+
+ # Ask user for new secrets and put them into our connection config
+ for setting in secrets:
+ for key in secrets[setting]:
+ new_secret = raw_input ("Enter new secret for '%s' in '%s': " % (key, setting))
+ config[setting_name][key] = new_secret
+ except Exception, e:
+ #code = str(e).split(':')[0]
+ #print "Exception:", str(e)
+ pass
+
+def change_secrets(con_path, config):
+ # Get existing secrets; we grab the secrets for each type of connection
+ # (since there isn't a "get all secrets" call because most of the time
+ # you only need 'wifi' secrets or '802.1x' secrets, not everything) and
+ # set new values into the connection settings (config)
+ con_proxy = bus.get_object("org.freedesktop.NetworkManager", con_path)
+ connection_secrets = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
+ change_secrets_in_one_setting(connection_secrets, config, '802-11-wireless')
+ change_secrets_in_one_setting(connection_secrets, config, '802-11-wireless-security')
+ change_secrets_in_one_setting(connection_secrets, config, '802-1x')
+ change_secrets_in_one_setting(connection_secrets, config, 'gsm')
+ change_secrets_in_one_setting(connection_secrets, config, 'cdma')
+ change_secrets_in_one_setting(connection_secrets, config, 'ppp')
+
+def find_connection(name):
+ # Ask the settings service for the list of connections it provides
+ global con_path
+ proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings")
+ settings = dbus.Interface(proxy, "org.freedesktop.NetworkManager.Settings")
+ connection_paths = settings.ListConnections()
+
+ # Get the settings and look for connection's name
+ for path in connection_paths:
+ con_proxy = bus.get_object("org.freedesktop.NetworkManager", path)
+ connection = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
+ try:
+ config = connection.GetSettings()
+ except Exception, e:
+ pass
+
+ # Find connection by the id
+ s_con = config['connection']
+ if name == s_con['id']:
+ con_path = path
+ return config
+ # Find connection by the uuid
+ if name == s_con['uuid']:
+ con_path = path
+ return config
+
+ return None
+
+
+# Main part
+con_path = None
+
+if len(sys.argv) != 2:
+ sys.exit("Usage: %s <connection name/uuid>" % sys.argv[0])
+
+# Find the connection
+con = find_connection(sys.argv[1])
+
+print "Connection found: ", con_path
+
+if con:
+ # Obtain new secrets and put then into connection dict
+ change_secrets(con_path, con)
+
+ # Change the connection with Update()
+ proxy = bus.get_object("org.freedesktop.NetworkManager", con_path)
+ settings = dbus.Interface(proxy, "org.freedesktop.NetworkManager.Settings.Connection")
+ settings.Update(con)
+else:
+ sys.exit("No connection '%s' found" % sys.argv[1])
+
diff --git a/examples/python/dbus/vpn.py b/examples/python/dbus/vpn.py
new file mode 100755
index 000000000..59773a61f
--- /dev/null
+++ b/examples/python/dbus/vpn.py
@@ -0,0 +1,152 @@
+#!/usr/bin/env python
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2009 Novell, Inc.
+# Copyright (C) 2009 Red Hat, Inc.
+#
+
+# Run this script without any arguments to list the available connection uuids.
+
+# The uuid of the connection to activate
+CONNECTION_UUID="ac6dc9b2-85ef-4311-83d8-add5d7db3f59"
+
+# UID to use. Note that NM only allows the owner of the connection to activate it.
+#UID=1000
+UID=0
+
+import sys
+import os
+import dbus
+from dbus.mainloop.glib import DBusGMainLoop
+import gobject
+
+DBusGMainLoop(set_as_default=True)
+
+def get_connections():
+ bus = dbus.SystemBus()
+ proxy = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager/Settings')
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager.Settings')
+ return iface.ListConnections()
+
+
+def get_connection_by_uuid(uuid):
+ bus = dbus.SystemBus()
+ for c in get_connections():
+ proxy = bus.get_object('org.freedesktop.NetworkManager', c)
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager.Settings.Connection')
+ settings = iface.GetSettings()
+ if settings['connection']['uuid'] == uuid:
+ return c
+
+ return None
+
+
+def list_uuids():
+ bus = dbus.SystemBus()
+ for c in get_connections():
+ proxy = bus.get_object('org.freedesktop.NetworkManager', c)
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager.Settings.Connection')
+ settings = iface.GetSettings()
+ conn = settings['connection']
+ print "%s - %s (%s)" % (conn['uuid'], conn['id'], conn['type'])
+
+
+def get_active_connection_path(uuid):
+ bus = dbus.SystemBus()
+ proxy = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
+ active_connections = iface.Get('org.freedesktop.NetworkManager', 'ActiveConnections')
+ all_connections = get_connections()
+
+ for a in active_connections:
+ proxy = bus.get_object('org.freedesktop.NetworkManager', a)
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
+ path = iface.Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
+
+ proxy = bus.get_object('org.freedesktop.NetworkManager', path)
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager.Settings.Connection')
+ settings = iface.GetSettings()
+
+ if settings['connection']['uuid'] == uuid:
+ return a
+
+ return None
+
+
+def get_wifi_device_path():
+ bus = dbus.SystemBus()
+ proxy = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager')
+ devices = iface.GetDevices()
+ for d in devices:
+ proxy = bus.get_object('org.freedesktop.NetworkManager', d)
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
+ devtype = iface.Get('org.freedesktop.NetworkManager.Device', 'DeviceType')
+ if devtype == 2:
+ return d
+ return None
+
+def activate_connection(connection_path, device_path):
+
+ def reply_handler(opath):
+ print "Success: device activating"
+ sys.exit(0)
+
+ def error_handler(*args):
+ print "Error activating device: %s" % args
+ sys.exit(1)
+
+ bus = dbus.SystemBus()
+ proxy = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
+ iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager')
+ iface.ActivateConnection('org.freedesktop.NetworkManager',
+ connection_path,
+ device_path,
+ "/",
+ reply_handler=reply_handler,
+ error_handler=error_handler)
+
+
+# Change the UID first if required
+if UID != 0:
+ os.setuid(UID)
+
+# Are we configured?
+if not len(CONNECTION_UUID):
+ print "missing connection UUID"
+ sys.exit(0)
+
+connection_path = get_connection_by_uuid(CONNECTION_UUID)
+if not connection_path:
+ # Configured VPN connection is not known to NM, check CONNECTION_UUID.
+ print "couldn't find the connection"
+ sys.exit(1)
+
+device_path = get_wifi_device_path()
+if not device_path:
+ print "no wifi device found"
+ sys.exit(1)
+
+# Is it already activated?
+if get_active_connection_path(CONNECTION_UUID):
+ print "already connected"
+ sys.exit(0)
+
+print "Activating connection..."
+activate_connection(connection_path, device_path)
+loop = gobject.MainLoop()
+loop.run()
+
diff --git a/examples/python/gi/Makefile.am b/examples/python/gi/Makefile.am
new file mode 100644
index 000000000..dcf2dff09
--- /dev/null
+++ b/examples/python/gi/Makefile.am
@@ -0,0 +1,9 @@
+EXTRA_DIST = \
+ list-connections.py \
+ device-state-ip4config.py \
+ firewall-zone.py \
+ show-wifi-networks.py \
+ get_ips.py \
+ add_connection.py \
+ get-active-connections.py \
+ update-ip4-method.py
diff --git a/examples/python/gi/Makefile.in b/examples/python/gi/Makefile.in
new file mode 100644
index 000000000..8ea13b18d
--- /dev/null
+++ b/examples/python/gi/Makefile.in
@@ -0,0 +1,582 @@
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples/python/gi
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
+ $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/gnome-code-coverage.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CKDB_PATH = @CKDB_PATH@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
+DBUS_LIBS = @DBUS_LIBS@
+DBUS_SYS_DIR = @DBUS_SYS_DIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DHCLIENT_PATH = @DHCLIENT_PATH@
+DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
+DLLTOOL = @DLLTOOL@
+DNSMASQ_PATH = @DNSMASQ_PATH@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GENHTML = @GENHTML@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MAKEFILE = @GLIB_MAKEFILE@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
+GNUTLS_LIBS = @GNUTLS_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUDEV_CFLAGS = @GUDEV_CFLAGS@
+GUDEV_LIBS = @GUDEV_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IPTABLES_PATH = @IPTABLES_PATH@
+IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
+IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
+KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDL = @LIBDL@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
+LIBNL_CFLAGS = @LIBNL_CFLAGS@
+LIBNL_LIBS = @LIBNL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@
+MM_GLIB_LIBS = @MM_GLIB_LIBS@
+MOC = @MOC@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
+NM_MICRO_VERSION = @NM_MICRO_VERSION@
+NM_MINOR_VERSION = @NM_MINOR_VERSION@
+NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@
+NM_VERSION = @NM_VERSION@
+NSS_CFLAGS = @NSS_CFLAGS@
+NSS_LIBS = @NSS_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POLKIT_CFLAGS = @POLKIT_CFLAGS@
+POLKIT_LIBS = @POLKIT_LIBS@
+POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
+PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSTEMD_200_CFLAGS = @SYSTEMD_200_CFLAGS@
+SYSTEMD_200_LIBS = @SYSTEMD_200_LIBS@
+SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@
+SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@
+SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@
+SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@
+SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
+UDEV_BASE_DIR = @UDEV_BASE_DIR@
+USE_NLS = @USE_NLS@
+UUID_CFLAGS = @UUID_CFLAGS@
+UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
+VAPIGEN = @VAPIGEN@
+VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
+VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+nmbinary = @nmbinary@
+nmconfdir = @nmconfdir@
+nmdatadir = @nmdatadir@
+nmrundir = @nmrundir@
+nmstatedir = @nmstatedir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+systemdsystemunitdir = @systemdsystemunitdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+with_dhclient = @with_dhclient@
+with_dhcpcd = @with_dhcpcd@
+with_netconfig = @with_netconfig@
+with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
+EXTRA_DIST = \
+ list-connections.py \
+ device-state-ip4config.py \
+ firewall-zone.py \
+ show-wifi-networks.py \
+ get_ips.py \
+ add_connection.py \
+ get-active-connections.py \
+ update-ip4-method.py
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/python/gi/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/python/gi/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/python/gi/add_connection.py b/examples/python/gi/add_connection.py
new file mode 100755
index 000000000..76c2e94e6
--- /dev/null
+++ b/examples/python/gi/add_connection.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+
+#
+# This example shows how to add a new NM connection profile.
+# The code uses libnm-util (NetworkManager) and libnm-glib (NMClient)
+# via GObject Introspection.
+#
+# Documentation links:
+# https://developer.gnome.org/libnm-glib/0.9/
+# https://developer.gnome.org/libnm-util/0.9/
+# https://developer.gnome.org/NetworkManager/0.9/ref-settings.html
+#
+
+from gi.repository import GLib, NetworkManager, NMClient
+import sys, uuid
+
+main_loop = None
+
+def print_values(setting, key, value, flags, data):
+ print " %s.%s: %s" % (setting.get_name(), key, value)
+
+# create an Ethernet connection and return it
+def create_profile(name):
+ profile = NetworkManager.Connection.new()
+ s_con = NetworkManager.SettingConnection.new()
+ s_con.set_property(NetworkManager.SETTING_CONNECTION_ID, name)
+ s_con.set_property(NetworkManager.SETTING_CONNECTION_UUID, str(uuid.uuid4()))
+ s_con.set_property(NetworkManager.SETTING_CONNECTION_TYPE, "802-3-ethernet")
+
+ s_wired = NetworkManager.SettingWired.new()
+
+ s_ip4 = NetworkManager.SettingIP4Config.new()
+ s_ip4.set_property(NetworkManager.SETTING_IP4_CONFIG_METHOD, "auto")
+
+ s_ip6 = NetworkManager.SettingIP6Config.new()
+ s_ip6.set_property(NetworkManager.SETTING_IP6_CONFIG_METHOD, "auto")
+
+ profile.add_setting(s_con)
+ profile.add_setting(s_ip4)
+ profile.add_setting(s_ip6)
+ profile.add_setting(s_wired)
+
+ print("Created connection profile:")
+ profile.for_each_setting_value(print_values, None)
+
+ return profile
+
+# callback function
+def added_cb(settings, con, error, data):
+ if error is (None):
+ print("The connection profile has been succesfully added to NetworkManager.")
+ else:
+ print(error)
+ main_loop.quit()
+
+if __name__ == "__main__":
+ # parse arguments
+ persistent = False
+ if len(sys.argv) != 2 and len(sys.argv) != 3:
+ sys.exit('Usage: %s <connection name> [persistent]' % sys.argv[0])
+ if len(sys.argv) == 3:
+ if sys.argv[2] in "persistent" and sys.argv[2][:1] == "p":
+ persistent = True
+ else:
+ sys.exit('Usage: %s <connection name> [persistent]' % sys.argv[0])
+ profile_name = sys.argv[1]
+
+ main_loop = GLib.MainLoop()
+
+ # create RemoteSettings object
+ settings = NMClient.RemoteSettings.new(None);
+
+ # create a connection profile for NM
+ con = create_profile(profile_name)
+
+ # send the connection to NM
+ if persistent:
+ settings.add_connection(con, added_cb, None)
+ else:
+ settings.add_connection_unsaved(con, added_cb, None)
+
+ main_loop.run()
+
diff --git a/examples/python/gi/device-state-ip4config.py b/examples/python/gi/device-state-ip4config.py
new file mode 100755
index 000000000..be19b9966
--- /dev/null
+++ b/examples/python/gi/device-state-ip4config.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# vim: ft=python ts=4 sts=4 sw=4 et ai
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2012 Red Hat, Inc.
+#
+
+import sys
+from gi.repository import GLib, NetworkManager, NMClient
+
+#
+# This example shows how to get NMIP4Config from NMDevice after it is activated.
+#
+# We listen to notify::ip4-config glib signal. This signal is trigered by D-Bus
+# PropertiesChanged for IP4Config that comes after StateChanged for NMDevice.
+#
+
+main_loop = None
+
+def do_notify(self, property):
+ print "notify: %s" % property
+ ip4cfg = self.get_ip4_config()
+ if ip4cfg is not None:
+ print "ip4-config: %s" % ip4cfg.get_path()
+ main_loop.quit()
+
+def state_changed(obj, arg1, arg2, arg3):
+ print "State changed: New: %d, Old: %d, Reason: %d" % (arg1, arg2, arg3)
+ # Device is connected
+ if arg1 == 100:
+ obj.connect('notify::ip4-config', do_notify)
+
+
+if __name__ == "__main__":
+ if len(sys.argv) != 2:
+ sys.exit('Usage: %s <interface>' % sys.argv[0])
+ dev_iface = sys.argv[1]
+
+ c = NMClient.Client.new()
+ dev = c.get_device_by_iface(dev_iface)
+ if dev is None:
+ sys.exit('Device \'%s\' not found' % dev_iface)
+ print "Device: %s - %s" % (dev_iface, dev.get_device_type().value_name)
+ print "---------------------------------------"
+
+ dev.connect('state-changed', state_changed)
+ main_loop = GLib.MainLoop()
+ main_loop.run()
+
diff --git a/examples/python/gi/firewall-zone.py b/examples/python/gi/firewall-zone.py
new file mode 100755
index 000000000..5e5eea919
--- /dev/null
+++ b/examples/python/gi/firewall-zone.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+# vim: ft=python ts=4 sts=4 sw=4 et ai
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2013 Red Hat, Inc.
+#
+
+import sys
+from gi.repository import GLib, NetworkManager, NMClient
+
+#
+# This example demonstrates how to get and change firewall zone in a
+# connection. It uses GObject Introspection instead of direct D-Bus calls.
+# 'zone' is a property of 'connection' setting in a connection. You can't
+# get/set individual properties directly. Rather you ask for the whole
+# connection, change a property and update the connection back into
+# NetworkManager.
+# If you used D-Bus calls, you would call GetSettings() and then Update().
+#
+# Links:
+# https://developer.gnome.org/libnm-glib/0.9/
+# https://wiki.gnome.org/GObjectIntrospection
+# https://wiki.gnome.org/PyGObject
+#
+
+main_loop = None
+
+def connection_saved(connection, error, data):
+ print ("Connection '%s' saved.") % (connection.get_id())
+ main_loop.quit()
+
+def connections_read(settings, data):
+ con_name = sys.argv[1]
+ if len(sys.argv) == 3:
+ new_zone = sys.argv[2]
+ else:
+ new_zone = None
+
+ found = False
+ connections = settings.list_connections()
+ for c in connections:
+ if c.get_id() == con_name or c.get_uuid() == con_name:
+ found = True
+ s_con = c.get_setting_connection()
+ if new_zone is None:
+ zone = s_con.get_zone()
+ if zone is not None:
+ print("'%s' zone is '%s'") % (c.get_id(), zone)
+ else:
+ print("'%s' zone is empty") % (c.get_id())
+ main_loop.quit()
+ else:
+ s_con.set_property("zone", new_zone)
+ c.commit_changes(connection_saved, None)
+ print("'%s' zone set to '%s'") % (c.get_id(), new_zone)
+ break
+ if not found:
+ print ("Error: connection '%s' not found.") % (con_name)
+ main_loop.quit()
+
+
+if __name__ == "__main__":
+ if len(sys.argv) != 2 and len(sys.argv) != 3:
+ sys.exit('Usage: %s <connection name or UUID> [new zone]' % sys.argv[0])
+
+ main_loop = GLib.MainLoop()
+ settings = NMClient.RemoteSettings.new(None);
+
+ # Connections are read asynchronously, so we have to wait for the
+ # 'settings' object to tell us that all connections have been read.
+ settings.connect("connections-read", connections_read, None)
+ main_loop.run()
+
diff --git a/examples/python/gi/get-active-connections.py b/examples/python/gi/get-active-connections.py
new file mode 100755
index 000000000..13f0b0310
--- /dev/null
+++ b/examples/python/gi/get-active-connections.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+# vim: ft=python ts=4 sts=4 sw=4 et ai
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+
+# This example lists currently active connections
+
+from gi.repository import GLib, NMClient
+
+if __name__ == "__main__":
+ client = NMClient.Client.new()
+ acons = client.get_active_connections()
+ for ac in acons:
+ print "%s (%s) - %s" % (ac.get_id(), ac.get_uuid(), ac.get_connection_type())
+ if len(acons) == 0:
+ print "No active connections"
+
+
diff --git a/examples/python/gi/get_ips.py b/examples/python/gi/get_ips.py
new file mode 100755
index 000000000..6903b6de2
--- /dev/null
+++ b/examples/python/gi/get_ips.py
@@ -0,0 +1,163 @@
+#!/usr/bin/env python
+#
+# vim: ft=python ts=4 sts=4 sw=4 et ai
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+
+import sys, socket, struct
+from gi.repository import GLib, NetworkManager, NMClient
+
+#
+# This example shows how to get addresses, routes and DNS information
+# from NMIP4Config and NMIP6Config (got out of NMDevice)
+#
+
+def show_addresses(self, family):
+ if (family == socket.AF_INET):
+ ip_cfg = self.get_ip4_config()
+ else:
+ ip_cfg = self.get_ip6_config()
+
+ if ip_cfg is None:
+ print("None")
+ return
+
+ nm_addresses = ip_cfg.get_addresses()
+ if len(nm_addresses) == 0:
+ print("None")
+ return
+
+ for nm_address in nm_addresses:
+ addr = nm_address.get_address()
+ prefix = nm_address.get_prefix()
+ gateway = nm_address.get_gateway()
+
+ if (family == socket.AF_INET):
+ addr_struct = struct.pack("=I", addr)
+ gateway_struct = struct.pack("=I", gateway)
+ else:
+ addr_struct = addr
+ gateway_struct = gateway
+ print("%s/%d %s") % (socket.inet_ntop(family, addr_struct),
+ prefix,
+ socket.inet_ntop(family, gateway_struct))
+
+
+def show_routes(self, family):
+ if (family == socket.AF_INET):
+ ip_cfg = self.get_ip4_config()
+ else:
+ ip_cfg = self.get_ip6_config()
+
+ if ip_cfg is None:
+ print("None")
+ return
+
+ nm_routes = ip_cfg.get_routes()
+ if len(nm_routes) == 0:
+ print("None")
+ return
+
+ for nm_route in nm_routes:
+ dest = nm_route.get_dest()
+ prefix = nm_route.get_prefix()
+ next_hop = nm_route.get_next_hop()
+ metric = nm_route.get_metric()
+
+ if (family == socket.AF_INET):
+ dest_struct = struct.pack("=I", dest)
+ next_hop_struct = struct.pack("=I", next_hop)
+ else:
+ dest_struct = dest
+ next_hop_struct = next_hop
+ print("%s/%d %s %d") % (socket.inet_ntop(family, dest_struct),
+ prefix,
+ socket.inet_ntop(family, next_hop_struct),
+ metric)
+
+
+def show_dns(self, family):
+ if (family == socket.AF_INET):
+ ip_cfg = self.get_ip4_config()
+ else:
+ ip_cfg = self.get_ip6_config()
+
+ if ip_cfg is None:
+ print("None")
+ return
+
+ if (family == socket.AF_INET):
+ print ("Domains: %s") % (ip_cfg.get_domains())
+ print ("Searches: %s") % (ip_cfg.get_searches())
+ print("Nameservers:")
+ nameservers = ip_cfg.get_nameservers()
+ for dns in nameservers:
+ print socket.inet_ntop(family, struct.pack("=I", dns))
+ else:
+ print ("Domains: %s") % (ip_cfg.get_domains())
+ print ("Searches: %s") % (ip_cfg.get_searches())
+ print("Nameservers:")
+ num = ip_cfg.get_num_nameservers()
+ for i in range(0,num):
+ dns = ip_cfg.get_nameserver(i)
+ print socket.inet_ntop(family, dns)
+
+
+if __name__ == "__main__":
+ if len(sys.argv) != 2:
+ sys.exit('Usage: %s <interface>' % sys.argv[0])
+ dev_iface = sys.argv[1]
+
+ c = NMClient.Client.new()
+ dev = c.get_device_by_iface(dev_iface)
+ if dev is None:
+ sys.exit('Device \'%s\' not found' % dev_iface)
+ print "Device: %s - %s" % (dev_iface, dev.get_device_type().value_name)
+ print "---------------------------------------"
+
+ print("IPv4 addresses:")
+ print("---------------")
+ show_addresses(dev, socket.AF_INET)
+ print
+
+ print("IPv4 routes:")
+ print("------------")
+ show_routes(dev, socket.AF_INET)
+ print
+
+ print "IPv6 addresses:"
+ print("---------------")
+ show_addresses(dev, socket.AF_INET6)
+ print
+
+ print "IPv6 routes:"
+ print("------------")
+ show_routes(dev, socket.AF_INET6)
+ print
+
+ print "IPv4 DNS:"
+ print("------------")
+ show_dns(dev, socket.AF_INET)
+ print
+
+ print "IPv6 DNS:"
+ print("------------")
+ show_dns(dev, socket.AF_INET6)
+ print
+
diff --git a/examples/python/gi/list-connections.py b/examples/python/gi/list-connections.py
new file mode 100755
index 000000000..b6452d35a
--- /dev/null
+++ b/examples/python/gi/list-connections.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2012 Red Hat, Inc.
+#
+
+from gi.repository import GLib, NetworkManager, NMClient
+
+# This example asks settings service for all configured connections.
+# Unfortunately, at this time since libnm-glib still makes heavy use of
+# GValue and GHashTable (rather than GVariant), libnm-glib isn't fully
+# usable from GObject Introspection-ready languages. Most functions will
+# work fine, but e. g. nm_connection_to_hash() causes assertion failures.
+
+main_loop = None
+
+def print_values(setting, key, value, flags, data):
+ print " %s.%s: %s" % (setting.get_name(), key, value)
+
+def connections_read(settings):
+ connections = settings.list_connections()
+ for c in connections:
+ print "--- %s : %s" % (c.get_id(), c.get_path())
+ c.for_each_setting_value(print_values, None)
+ print "\n"
+ main_loop.quit()
+
+if __name__ == "__main__":
+ main_loop = GLib.MainLoop()
+ settings = NMClient.RemoteSettings.new(None);
+
+ # connections are read asynchronously, so we need to wait for the
+ # settings object to tell us that it's read all connections
+ settings.connect("connections-read", connections_read)
+ main_loop.run()
+
diff --git a/examples/python/gi/show-wifi-networks.py b/examples/python/gi/show-wifi-networks.py
new file mode 100755
index 000000000..9d9e34718
--- /dev/null
+++ b/examples/python/gi/show-wifi-networks.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+# coding=utf-8
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+# vim: ft=python ts=4 sts=4 sw=4 et ai
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2013 Red Hat, Inc.
+#
+
+from gi.repository import NetworkManager, NMClient
+
+#
+# This example lists Wi-Fi access points NetworkManager scanned on Wi-Fi devices.
+# It calls libnm-glib functions using GObject introspection.
+#
+# Note the second line of the file: coding=utf-8
+# It is necessary because we use unicode characters and python would produce
+# an error without it: http://www.python.org/dev/peps/pep-0263/
+#
+
+signal_bars = {
+ 0 : "____",
+ 1 : "â–‚___",
+ 2 : "â–‚â–„__",
+ 3 : "â–‚â–„â–†_",
+ 4 : "▂▄▆█"
+}
+
+def clamp(value, minvalue, maxvalue):
+ return max(minvalue, min(value, maxvalue))
+
+def print_device_info(device):
+ active_ap = dev.get_active_access_point()
+ ssid = None
+ if active_ap is not None:
+ ssid = active_ap.get_ssid()
+ info = "Device: %s | Driver: %s | Active AP: %s" % (dev.get_iface(), dev.get_driver(), ssid)
+ print info
+ print '=' * len(info)
+
+def print_ap_info(ap):
+ strength = ap.get_strength()
+ frequency = ap.get_frequency()
+ print "SSID: %s" % (ap.get_ssid())
+ print "BSSID: %s" % (ap.get_bssid())
+ print "Frequency: %s" % (frequency)
+ print "Channel: %s" % (NetworkManager.utils_wifi_freq_to_channel(frequency))
+ print "Strength: %s %s%%" % (signal_bars[(clamp(strength-5, 0, 99)+24)/25], strength)
+ print
+
+if __name__ == "__main__":
+ nmc = NMClient.Client.new()
+ devs = nmc.get_devices()
+
+ for dev in devs:
+ if dev.get_device_type() == NetworkManager.DeviceType.WIFI:
+ print_device_info(dev)
+ for ap in dev.get_access_points():
+ print_ap_info(ap)
+
diff --git a/examples/python/gi/update-ip4-method.py b/examples/python/gi/update-ip4-method.py
new file mode 100755
index 000000000..2fe12693b
--- /dev/null
+++ b/examples/python/gi/update-ip4-method.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+
+#
+# This example updates a connection's IPv4 method with the Update() method
+# using the libnm-glib GObject-based convenience APIs.
+#
+# Configuration settings are described at
+# https://developer.gnome.org/NetworkManager/0.9/ref-settings.html
+#
+
+from gi.repository import GLib, NetworkManager, NMClient
+import sys, struct, socket
+
+def ip_to_int(ip_string):
+ return struct.unpack("=I", socket.inet_aton(ip_string))[0]
+
+# callback function
+def commit_cb(connection, error, data):
+ if error is (None):
+ print("The connection profile has been updated.")
+ else:
+ print(error)
+ main_loop.quit()
+
+def connections_read_cb(settings, data):
+ uuid, method, args = data
+
+ all_connections = settings.list_connections()
+ for c in all_connections:
+ if c.get_uuid() != uuid:
+ continue
+
+ # add IPv4 setting if it doesn't yet exist
+ s_ip4 = c.get_setting_ip4_config()
+ if not s_ip4:
+ s_ip4 = NetworkManager.SettingIP4Config.new()
+ c.add_setting(s_ip4)
+
+ # set the method and change properties
+ s_ip4.set_property(NetworkManager.SETTING_IP4_CONFIG_METHOD, method)
+ if method == "auto":
+ # remove addresses
+ s_ip4.clear_addresses()
+ elif method == "manual":
+ # Add the static IP address, prefix, and (optional) gateway
+ addr = NetworkManager.IP4Address.new()
+ addr.set_address(ip_to_int(sys.argv[3]))
+ addr.set_prefix(int(sys.argv[4]))
+ if len(sys.argv) == 6:
+ addr.set_gateway(ip_to_int(sys.argv[5]))
+ s_ip4.add_address(addr)
+
+ c.commit_changes(commit_cb, None)
+
+if __name__ == "__main__":
+ # parse and validate arguments
+ if len(sys.argv) < 3:
+ print "Usage: %s <uuid> <auto|static> [address prefix gateway]" % sys.argv[0]
+ sys.exit(1)
+
+ method = sys.argv[2]
+ if method == "static" and len(sys.argv) < 5:
+ print "Usage: %s %s static address prefix [gateway]" % (sys.argv[0], sys.argv[1])
+ sys.exit(1)
+
+ # Convert method to NM method
+ if method == "static":
+ method = "manual"
+
+ main_loop = GLib.MainLoop()
+
+ # create RemoteSettings object and attach to the "connections-read" signal
+ # to wait for connections to be loaded asynchronously
+ settings = NMClient.RemoteSettings.new(None)
+ settings.connect('connections-read', connections_read_cb, (sys.argv[1], method, sys.argv))
+
+ main_loop.run()
+
diff --git a/examples/ruby/Makefile.in b/examples/ruby/Makefile.in
index 5213269d1..e9bff7858 100644
--- a/examples/ruby/Makefile.in
+++ b/examples/ruby/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = examples/ruby
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -144,12 +145,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -174,7 +178,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -219,12 +222,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -241,6 +248,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -268,11 +277,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -287,6 +301,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -349,6 +364,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -359,6 +375,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
add-connection.rb \
get-basic-nm-info.rb \
diff --git a/examples/ruby/list-devices.rb b/examples/ruby/list-devices.rb
index a3bf90f5c..710ccedc0 100755
--- a/examples/ruby/list-devices.rb
+++ b/examples/ruby/list-devices.rb
@@ -25,6 +25,7 @@ require 'dbus'
# This example lists basic information about network interfaces known to NM
#
+# For the types see include/NetworkManager.h
devtypes = { 1 => "Ethernet",
2 => "Wi-Fi",
5 => "Bluetooth",
@@ -34,7 +35,11 @@ devtypes = { 1 => "Ethernet",
9 => "InfiniBand",
10 => "Bond",
11 => "VLAN",
- 12 => "ADSL" }
+ 12 => "ADSL",
+ 13 => "Bridge",
+ 14 => "Generic",
+ 15 => "Team"
+ }
states = { 0 => "Unknown",
10 => "Unmanaged",
diff --git a/examples/shell/Makefile.in b/examples/shell/Makefile.in
index 55f4fb21c..d3a6bdfae 100644
--- a/examples/shell/Makefile.in
+++ b/examples/shell/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = examples/shell
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -144,12 +145,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -174,7 +178,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -219,12 +222,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -241,6 +248,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -268,11 +277,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -287,6 +301,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -349,6 +364,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -359,6 +375,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
nm-logging.sh \
get-hostname.sh \
diff --git a/examples/shell/list-devices.sh b/examples/shell/list-devices.sh
index 4cf9c5991..dba82261c 100755
--- a/examples/shell/list-devices.sh
+++ b/examples/shell/list-devices.sh
@@ -31,6 +31,7 @@ DEVICE_IFACE="org.freedesktop.NetworkManager.Device"
NM_GET_DEVICES="org.freedesktop.NetworkManager.GetDevices"
DBUS_PROPERTIES_GET="org.freedesktop.DBus.Properties.Get"
+# For the types see include/NetworkManager.h
devtype_to_name()
{
case $1 in
@@ -44,6 +45,9 @@ devtype_to_name()
10) echo "Bond" ;;
11) echo "VLAN" ;;
12) echo "ADSL" ;;
+ 13) echo "Bridge" ;;
+ 14) echo "Generic" ;;
+ 15) echo "Team" ;;
*) echo "Unknown" ;;
esac
}
diff --git a/gtk-doc.make b/gtk-doc.make
index dd319930f..3b5bed0e0 100644
--- a/gtk-doc.make
+++ b/gtk-doc.make
@@ -49,13 +49,9 @@ REPORT_FILES = \
$(DOC_MODULE)-undeclared.txt \
$(DOC_MODULE)-unused.txt
-gtkdoc-check.test: Makefile
- $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
- echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
- chmod +x $@
-
-CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+if ENABLE_GTK_DOC
if GTK_DOC_BUILD_HTML
HTML_BUILD_STAMP=html-build.stamp
else
@@ -67,11 +63,9 @@ else
PDF_BUILD_STAMP=
endif
-all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
-.PHONY: all-gtk-doc
-
-if ENABLE_GTK_DOC
-all-local: all-gtk-doc
+all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+else
+all-local:
endif
docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
@@ -89,14 +83,12 @@ setup-build.stamp:
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
- destdir=`dirname $(abs_builddir)/$$file` ;\
- test -d "$$destdir" || mkdir -p "$$destdir"; \
test -f $(abs_srcdir)/$$file && \
- cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
test -d $(abs_srcdir)/tmpl && \
- { cp -pR $(abs_srcdir)/tmpl $(abs_builddir)/; \
+ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \
chmod -R u+w $(abs_builddir)/tmpl; } \
fi
$(AM_V_at)touch setup-build.stamp
@@ -111,7 +103,7 @@ GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_$(V))
GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects";
-scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
$(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
@@ -147,7 +139,7 @@ tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DO
$(GTK_DOC_V_TMPL)gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
$(AM_V_at)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
if test -w $(abs_srcdir) ; then \
- cp -pR $(abs_builddir)/tmpl $(abs_srcdir)/; \
+ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \
fi \
fi
$(AM_V_at)touch tmpl-build.stamp
@@ -165,7 +157,7 @@ GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
GTK_DOC_V_XML_0=@echo " DOC Building XML";
sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
- -$(GTK_DOC_V_XML)chmod -R u+w $(srcdir) && _source_dir='' ; \
+ $(GTK_DOC_V_XML)-chmod -R u+w $(srcdir) && _source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
@@ -243,9 +235,6 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
clean-local:
@rm -f *~ *.bak
@rm -rf .libs
- @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
- rm -f $(DOC_MODULE).types; \
- fi
distclean-local:
@rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
@@ -291,17 +280,15 @@ uninstall-local:
#
# Require gtk-doc when making dist
#
-if HAVE_GTK_DOC
+if ENABLE_GTK_DOC
dist-check-gtkdoc: docs
else
dist-check-gtkdoc:
- @echo "*** gtk-doc is needed to run 'make dist'. ***"
- @echo "*** gtk-doc was not found when 'configure' ran. ***"
- @echo "*** please install gtk-doc and rerun 'configure'. ***"
+ @echo "*** gtk-doc must be installed and enabled in order to make dist"
@false
endif
-dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+dist-hook: dist-check-gtkdoc dist-hook-local
@mkdir $(distdir)/tmpl
@mkdir $(distdir)/html
@-cp ./tmpl/*.sgml $(distdir)/tmpl
diff --git a/include/Makefile.am b/include/Makefile.am
index a058bff34..087afe48f 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -3,7 +3,8 @@ EXTRA_DIST = \
NetworkManagerVPN.h \
nm-dbus-glib-types.h \
nm-glib-compat.h \
- nm-test-helpers.h \
+ nm-gvaluearray-compat.h \
+ nm-test-utils.h \
nm-version.h.in \
nm-settings-flags.h
diff --git a/include/Makefile.in b/include/Makefile.in
index f49078412..4ec32b8bc 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -82,7 +82,8 @@ subdir = include
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(srcdir)/nm-version.h.in $(NetworkManagerinclude_HEADERS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -193,12 +194,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -223,7 +227,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -268,12 +271,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -290,6 +297,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -317,11 +326,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -336,6 +350,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -398,6 +413,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -408,12 +424,14 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
NetworkManager.h \
NetworkManagerVPN.h \
nm-dbus-glib-types.h \
nm-glib-compat.h \
- nm-test-helpers.h \
+ nm-gvaluearray-compat.h \
+ nm-test-utils.h \
nm-version.h.in \
nm-settings-flags.h
diff --git a/include/NetworkManager.h b/include/NetworkManager.h
index ebdb329e3..3fee1af00 100644
--- a/include/NetworkManager.h
+++ b/include/NetworkManager.h
@@ -51,8 +51,15 @@
#define NM_DBUS_INTERFACE_DHCP6_CONFIG NM_DBUS_INTERFACE ".DHCP6Config"
#define NM_DBUS_INTERFACE_DEVICE_INFINIBAND NM_DBUS_INTERFACE_DEVICE ".Infiniband"
#define NM_DBUS_INTERFACE_DEVICE_BOND NM_DBUS_INTERFACE_DEVICE ".Bond"
+#define NM_DBUS_INTERFACE_DEVICE_TEAM NM_DBUS_INTERFACE_DEVICE ".Team"
#define NM_DBUS_INTERFACE_DEVICE_VLAN NM_DBUS_INTERFACE_DEVICE ".Vlan"
#define NM_DBUS_INTERFACE_DEVICE_BRIDGE NM_DBUS_INTERFACE_DEVICE ".Bridge"
+#define NM_DBUS_INTERFACE_DEVICE_GENERIC NM_DBUS_INTERFACE_DEVICE ".Generic"
+#define NM_DBUS_INTERFACE_DEVICE_VETH NM_DBUS_INTERFACE_DEVICE ".Veth"
+#define NM_DBUS_INTERFACE_DEVICE_TUN NM_DBUS_INTERFACE_DEVICE ".Tun"
+#define NM_DBUS_INTERFACE_DEVICE_MACVLAN NM_DBUS_INTERFACE_DEVICE ".Macvlan"
+#define NM_DBUS_INTERFACE_DEVICE_VXLAN NM_DBUS_INTERFACE_DEVICE ".Vxlan"
+#define NM_DBUS_INTERFACE_DEVICE_GRE NM_DBUS_INTERFACE_DEVICE ".Gre"
#define NM_DBUS_IFACE_SETTINGS "org.freedesktop.NetworkManager.Settings"
@@ -106,7 +113,7 @@ typedef enum {
* @NM_CONNECTIVITY_FULL: The host is connected to a network, and
* appears to be able to reach the full Internet.
*
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
typedef enum {
NM_CONNECTIVITY_UNKNOWN,
@@ -119,6 +126,7 @@ typedef enum {
/**
* NMDeviceType:
* @NM_DEVICE_TYPE_UNKNOWN: unknown device
+ * @NM_DEVICE_TYPE_GENERIC: generic support for unrecognized device types
* @NM_DEVICE_TYPE_ETHERNET: a wired ethernet device
* @NM_DEVICE_TYPE_WIFI: an 802.11 WiFi device
* @NM_DEVICE_TYPE_UNUSED1: not used
@@ -133,6 +141,7 @@ typedef enum {
* @NM_DEVICE_TYPE_VLAN: an 802.1Q VLAN interface
* @NM_DEVICE_TYPE_ADSL: ADSL modem
* @NM_DEVICE_TYPE_BRIDGE: a bridge master interface
+ * @NM_DEVICE_TYPE_TEAM: a team master interface
*
* #NMDeviceType values indicate the type of hardware represented by
* an #NMDevice.
@@ -152,6 +161,8 @@ typedef enum {
NM_DEVICE_TYPE_VLAN = 11,
NM_DEVICE_TYPE_ADSL = 12,
NM_DEVICE_TYPE_BRIDGE = 13,
+ NM_DEVICE_TYPE_GENERIC = 14,
+ NM_DEVICE_TYPE_TEAM = 15,
} NMDeviceType;
/**
@@ -535,6 +546,21 @@ typedef enum {
/* A secondary connection of the base connection failed */
NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
+ /* DCB or FCoE setup failed */
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
+
+ /* teamd control failed */
+ NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
+
+ /* Modem failed or no longer available */
+ NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
+
+ /* Modem now ready and available */
+ NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
+
+ /* SIM PIN was incorrect */
+ NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
+
/* Unused */
NM_DEVICE_STATE_REASON_LAST = 0xFFFF
} NMDeviceStateReason;
diff --git a/include/NetworkManagerVPN.h b/include/NetworkManagerVPN.h
index 6e654b3a7..5997c99f9 100644
--- a/include/NetworkManagerVPN.h
+++ b/include/NetworkManagerVPN.h
@@ -41,12 +41,14 @@
#define NM_DBUS_NO_VPN_CONNECTIONS "org.freedesktop.NetworkManager.VPNConnections.NoVPNConnections"
#define NM_DBUS_INVALID_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.InvalidVPNConnection"
+#define NM_DBUS_VPN_ERROR_PREFIX "org.freedesktop.NetworkManager.VPN.Error"
#define NM_DBUS_VPN_STARTING_IN_PROGRESS "StartingInProgress"
#define NM_DBUS_VPN_ALREADY_STARTED "AlreadyStarted"
#define NM_DBUS_VPN_STOPPING_IN_PROGRESS "StoppingInProgress"
#define NM_DBUS_VPN_ALREADY_STOPPED "AlreadyStopped"
#define NM_DBUS_VPN_WRONG_STATE "WrongState"
#define NM_DBUS_VPN_BAD_ARGUMENTS "BadArguments"
+#define NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED "InteractiveNotSupported"
/*
diff --git a/include/nm-glib-compat.h b/include/nm-glib-compat.h
index 63d9598df..cfaddb7d3 100644
--- a/include/nm-glib-compat.h
+++ b/include/nm-glib-compat.h
@@ -27,60 +27,87 @@
#include <glib.h>
#include <glib-object.h>
-#if !GLIB_CHECK_VERSION(2,31,0)
-#define g_value_set_schar g_value_set_char
-#define g_value_get_schar g_value_get_char
-#endif
+#include "nm-gvaluearray-compat.h"
-#if !GLIB_CHECK_VERSION(2,30,0)
-#define G_VALUE_INIT { 0, { { 0 } } }
-#endif
+#if !GLIB_CHECK_VERSION(2,34,0)
+static inline void
+g_type_ensure (GType type)
+{
+ if (G_UNLIKELY (type == (GType)-1))
+ g_error ("can't happen");
+}
+
+#define g_clear_pointer(pp, destroy) \
+ G_STMT_START { \
+ G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
+ /* Only one access, please */ \
+ gpointer *_pp = (gpointer *) (pp); \
+ gpointer _p; \
+ /* This assignment is needed to avoid a gcc warning */ \
+ GDestroyNotify _destroy = (GDestroyNotify) (destroy); \
+ \
+ (void) (0 ? (gpointer) *(pp) : 0); \
+ do \
+ _p = g_atomic_pointer_get (_pp); \
+ while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_pp, _p, NULL)); \
+ \
+ if (_p) \
+ _destroy (_p); \
+ } G_STMT_END
+
+/* These are used to clean up the output of test programs; we can just let
+ * them no-op in older glib.
+ */
+#define g_test_expect_message(log_domain, log_level, pattern)
+#define g_test_assert_expected_messages()
-#if !GLIB_CHECK_VERSION(2,28,0)
-#define g_simple_async_result_take_error(result, error) \
+#else
+
+/* We build with -DGLIB_MAX_ALLOWED_VERSION set to 2.32 to make sure we don't
+ * accidentally use new API that we shouldn't. But we don't want warnings for
+ * the APIs that we emulate above.
+ */
+
+#define g_type_ensure(t) \
G_STMT_START { \
- GError *__error = error; \
- g_simple_async_result_set_from_error (result, __error); \
- g_error_free (__error); \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_type_ensure (t); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
} G_STMT_END
-#define g_clear_object(object_ptr) \
+#define g_test_expect_message(domain, level, format...) \
G_STMT_START { \
- GObject **__obj_p = (gpointer) (object_ptr); \
- if (*__obj_p) { \
- g_object_unref (*__obj_p); \
- *__obj_p = NULL; \
- } \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_test_expect_message (domain, level, format); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ } G_STMT_END
+
+#define g_test_assert_expected_messages_internal(domain, file, line, func) \
+ G_STMT_START { \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_test_assert_expected_messages_internal (domain, file, line, func); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
} G_STMT_END
#endif
-#ifndef G_DEFINE_BOXED_TYPE
-#define G_DEFINE_BOXED_TYPE(t,p,d,f) \
-GType \
-p##_get_type (void) \
-{ \
- static volatile gsize g_define_type_id__volatile = 0; \
- \
- if (g_once_init_enter (&g_define_type_id__volatile)) { \
- GType g_define_type_id = \
- g_boxed_type_register_static( \
- g_intern_static_string(#t), \
- (GBoxedCopyFunc) d, \
- (GBoxedFreeFunc) f); \
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
- } \
- return g_define_type_id__volatile; \
-}
+/* g_test_initialized() is only available since glib 2.36. */
+#if !GLIB_CHECK_VERSION (2, 36, 0)
+#define g_test_initialized() (g_test_config_vars->test_initialized)
#endif
-#if !GLIB_CHECK_VERSION(2,34,0)
-static inline void
-g_type_ensure (GType type)
+/* g_test_skip() is only available since glib 2.38. Add a compatibility wrapper. */
+inline static void
+__nmtst_g_test_skip (const gchar *msg)
{
- if (G_UNLIKELY (type == (GType)-1))
- g_error ("can't happen");
-}
+#if GLIB_CHECK_VERSION (2, 38, 0)
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ g_test_skip (msg);
+ G_GNUC_END_IGNORE_DEPRECATIONS
+#else
+ g_debug ("%s", msg);
#endif
+}
+#define g_test_skip __nmtst_g_test_skip
#endif /* NM_GLIB_COMPAT_H */
diff --git a/include/nm-gvaluearray-compat.h b/include/nm-gvaluearray-compat.h
new file mode 100644
index 000000000..e26ce3717
--- /dev/null
+++ b/include/nm-gvaluearray-compat.h
@@ -0,0 +1,107 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_GVALUEARRAY_COMPAT_H
+#define NM_GVALUEARRAY_COMPAT_H
+
+#include <glib.h>
+
+#define g_value_array_get_type() \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_get_type (); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_get_nth(value_array, index_) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_get_nth (value_array, index_); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_new(n_prealloced) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_new (n_prealloced); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+static inline void
+__g_value_array_free (GValueArray *value_array)
+{
+ G_GNUC_EXTENSION ({
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ g_value_array_free (value_array);
+ G_GNUC_END_IGNORE_DEPRECATIONS
+ });
+}
+#define g_value_array_free __g_value_array_free
+
+#define g_value_array_copy(value_array) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_copy (value_array); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_prepend(value_array, value) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_prepend (value_array, value); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_append(value_array, value) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_append (value_array, value); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_insert(value_array, index_, value) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_insert (value_array, index_, value); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_remove(value_array, index_) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_remove (value_array, index_); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_sort(value_array, compare_func) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_sort (value_array, compare_func); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#define g_value_array_sort_with_data(value_array, compare_func, user_data) \
+ G_GNUC_EXTENSION ({ \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_value_array_sort_with_data (value_array, compare_func, user_data); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ })
+
+#endif /* NM_GVALUEARRAY_COMPAT_H */
diff --git a/include/nm-test-utils.h b/include/nm-test-utils.h
new file mode 100644
index 000000000..83c4080fe
--- /dev/null
+++ b/include/nm-test-utils.h
@@ -0,0 +1,680 @@
+/* -*- 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.
+ *
+ * (C) Copyright 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_TEST_UTILS_H__
+#define __NM_TEST_UTILS_H__
+
+
+#include <arpa/inet.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <glib-object.h>
+#include <string.h>
+#include <errno.h>
+
+#include "nm-utils.h"
+#include "nm-glib-compat.h"
+
+
+struct __nmtst_internal
+{
+ GRand *rand0;
+ guint32 rand_seed;
+ GRand *rand;
+ gboolean is_debug;
+ gboolean assert_logging;
+ gboolean no_expect_message;
+ char *sudo_cmd;
+ char **orig_argv;
+};
+
+extern struct __nmtst_internal __nmtst_internal;
+
+#define NMTST_DEFINE() \
+ struct __nmtst_internal __nmtst_internal = { 0 };
+
+
+inline static gboolean
+nmtst_initialized (void)
+{
+ return !!__nmtst_internal.rand0;
+}
+
+#define __NMTST_LOG(cmd, fmt, ...) \
+ G_STMT_START { \
+ g_assert (nmtst_initialized ()); \
+ if (!__nmtst_internal.assert_logging || __nmtst_internal.no_expect_message) { \
+ cmd (fmt, __VA_ARGS__); \
+ } else { \
+ printf (fmt "\n", __VA_ARGS__); \
+ } \
+ } G_STMT_END
+
+/* split the string inplace at specific delimiters, allowing escaping with '\\'.
+ * Returns a zero terminated array of pointers into @str.
+ *
+ * The caller must g_free() the returned argv array.
+ **/
+inline static char **
+nmtst_str_split (char *str, const char *delimiters)
+{
+ const char *d;
+ GArray *result = g_array_sized_new (TRUE, FALSE, sizeof (char *), 3);
+
+ g_assert (str);
+ g_assert (delimiters && !strchr (delimiters, '\\'));
+
+ while (*str) {
+ gsize i = 0, j = 0;
+
+ while (TRUE) {
+ char c = str[i];
+
+ if (c == '\0') {
+ str[j++] = 0;
+ break;
+ } else if (c == '\\') {
+ str[j++] = str[++i];
+ if (!str[i])
+ break;
+ } else {
+ for (d = delimiters; *d; d++) {
+ if (c == *d) {
+ str[j++] = 0;
+ i++;
+ goto BREAK_INNER_LOOPS;
+ }
+ }
+ str[j++] = c;
+ }
+ i++;
+ }
+
+BREAK_INNER_LOOPS:
+ g_array_append_val (result, str);
+ str = &str[i];
+ }
+
+ return (char **) g_array_free (result, FALSE);
+}
+
+
+/* free instances allocated by nmtst (especially nmtst_init()) on shutdown
+ * to release memory. After nmtst_free(), the test is uninitialized again. */
+inline static void
+nmtst_free (void)
+{
+ if (!nmtst_initialized ())
+ return;
+
+ g_rand_free (__nmtst_internal.rand0);
+ if (__nmtst_internal.rand)
+ g_rand_free (__nmtst_internal.rand);
+ g_free (__nmtst_internal.sudo_cmd);
+ g_strfreev (__nmtst_internal.orig_argv);
+
+ memset (&__nmtst_internal, 0, sizeof (__nmtst_internal));
+}
+
+inline static void
+__nmtst_init (int *argc, char ***argv, gboolean assert_logging, const char *log_level, const char *log_domains)
+{
+ static gsize atexit_registered = 0;
+ GError *error = NULL;
+ const char *nmtst_debug;
+ gboolean is_debug = FALSE;
+ char *c_log_level = NULL, *c_log_domains = NULL;
+ char *sudo_cmd = NULL;
+ GArray *debug_messages = g_array_new (TRUE, FALSE, sizeof (char *));
+ int i;
+ gboolean no_expect_message = FALSE;
+
+ g_assert (!nmtst_initialized ());
+
+ g_assert (!((!!argc) ^ (!!argv)));
+ g_assert (!argc || (g_strv_length (*argv) == *argc));
+ g_assert (!assert_logging || (!log_level && !log_domains));
+
+ if (argc)
+ __nmtst_internal.orig_argv = g_strdupv (*argv);
+
+ if (argc && !g_test_initialized ()) {
+ /* g_test_init() is a variadic function, so we cannot pass it
+ * (variadic) arguments. If you need to pass additional parameters,
+ * call nmtst_init() with argc==NULL and call g_test_init() yourself. */
+
+ /* g_test_init() sets g_log_set_always_fatal() for G_LOG_LEVEL_WARNING
+ * and G_LOG_LEVEL_CRITICAL. So, beware that the test will fail if you
+ * have any WARN or ERR log messages -- unless you g_test_expect_message(). */
+ g_test_init (argc, argv, NULL);
+ }
+
+ __nmtst_internal.assert_logging = !!assert_logging;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ is_debug = g_test_verbose ();
+
+ nmtst_debug = g_getenv ("NMTST_DEBUG");
+ if (nmtst_debug) {
+ char **d_argv, **i_argv, *nmtst_debug_copy;
+
+ /* By setting then NMTST_DEBUG variable, @is_debug is set automatically.
+ * This can be reverted with no-debug (on command line or environment variable). */
+ is_debug = TRUE;
+
+ nmtst_debug_copy = g_strdup (nmtst_debug);
+ d_argv = nmtst_str_split (nmtst_debug_copy, ",; \t\r\n");
+
+ for (i_argv = d_argv; *i_argv; i_argv++) {
+ const char *debug = *i_argv;
+
+ if (!g_ascii_strcasecmp (debug, "debug"))
+ is_debug = TRUE;
+ else if (!g_ascii_strcasecmp (debug, "no-debug")) {
+ /* when specifying the NMTST_DEBUG variable, we set is_debug to true. Use this flag to disable this
+ * (e.g. for only setting the log-level, but not is_debug). */
+ is_debug = FALSE;
+ } else if (!g_ascii_strncasecmp (debug, "log-level=", strlen ("log-level="))) {
+ g_free (c_log_level);
+ log_level = c_log_level = g_strdup (&debug[strlen ("log-level=")]);
+ } else if (!g_ascii_strncasecmp (debug, "log-domains=", strlen ("log-domains="))) {
+ g_free (c_log_domains);
+ log_domains = c_log_domains = g_strdup (&debug[strlen ("log-domains=")]);
+ } else if (!g_ascii_strncasecmp (debug, "sudo-cmd=", strlen ("sudo-cmd="))) {
+ g_free (sudo_cmd);
+ sudo_cmd = g_strdup (&debug[strlen ("sudo-cmd=")]);
+ } else if (!g_ascii_strcasecmp (debug, "no-expect-message")) {
+ no_expect_message = TRUE;
+ } else {
+ char *msg = g_strdup_printf (">>> nmtst: ignore unrecognized NMTST_DEBUG option \"%s\"", debug);
+
+ g_array_append_val (debug_messages, msg);
+ }
+ }
+
+ g_free (d_argv);
+ g_free (nmtst_debug_copy);
+ }
+
+ if (argv && *argv) {
+ char **a = *argv;
+
+ for (; *a; a++) {
+ if (!g_ascii_strcasecmp (*a, "--debug"))
+ is_debug = TRUE;
+ else if (!g_ascii_strcasecmp (*a, "--no-debug"))
+ is_debug = FALSE;
+ }
+ }
+
+ __nmtst_internal.is_debug = is_debug;
+ __nmtst_internal.rand0 = g_rand_new_with_seed (0);
+ __nmtst_internal.sudo_cmd = sudo_cmd;
+ __nmtst_internal.no_expect_message = no_expect_message;
+
+ if (!log_level && log_domains) {
+ /* if the log level is not specified (but the domain is), we assume
+ * the caller wants to set it depending on is_debug */
+ log_level = is_debug ? "DEBUG" : "WARN";
+ }
+
+ if (!__nmtst_internal.assert_logging) {
+ gboolean success = TRUE;
+#ifdef NM_LOGGING_H
+ success = nm_logging_setup (log_level, log_domains, NULL, NULL);
+#endif
+ g_assert (success);
+ } else if (__nmtst_internal.no_expect_message) {
+ /* We have a test that would be assert_logging, but the user specified no_expect_message.
+ * This transforms g_test_expect_message() into a NOP, but we also have to relax
+ * g_log_set_always_fatal(), which was set by g_test_init(). */
+ g_log_set_always_fatal (G_LOG_FATAL_MASK);
+ } else {
+#if GLIB_CHECK_VERSION(2,34,0)
+ /* We were called not to set logging levels. This means, that the user
+ * expects to assert against (all) messages. Any uncought message is fatal. */
+ g_log_set_always_fatal (G_LOG_LEVEL_MASK);
+#else
+ /* g_test_expect_message() is a NOP, so allow any messages */
+ g_log_set_always_fatal (G_LOG_FATAL_MASK);
+#endif
+ }
+
+ if ((!__nmtst_internal.assert_logging || (__nmtst_internal.assert_logging && __nmtst_internal.no_expect_message)) &&
+ (is_debug || (log_level && !g_ascii_strcasecmp (log_level, "DEBUG"))) &&
+ !g_getenv ("G_MESSAGES_DEBUG"))
+ {
+ /* if we are @is_debug or @log_level=="DEBUG" and
+ * G_MESSAGES_DEBUG is unset, we set G_MESSAGES_DEBUG=all.
+ * To disable this default behaviour, set G_MESSAGES_DEBUG='' */
+
+ /* Note that g_setenv is not thread safe, but you should anyway call
+ * nmtst_init() at the very start. */
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+ }
+
+ if (!nm_utils_init (&error))
+ g_error ("failed to initialize libnm-util: %s", error->message);
+ g_assert (!error);
+
+ /* Delay messages until we setup logging. */
+ for (i = 0; i < debug_messages->len; i++)
+ __NMTST_LOG (g_message, "%s", g_array_index (debug_messages, const char *, i));
+
+ g_strfreev ((char **) g_array_free (debug_messages, FALSE));
+ g_free (c_log_level);
+ g_free (c_log_domains);
+
+ if (g_once_init_enter (&atexit_registered)) {
+ atexit (nmtst_free);
+ g_once_init_leave (&atexit_registered, 1);
+ }
+}
+
+#ifdef NM_LOGGING_H
+inline static void
+nmtst_init_with_logging (int *argc, char ***argv, const char *log_level, const char *log_domains)
+{
+ __nmtst_init (argc, argv, FALSE, log_level, log_domains);
+}
+inline static void
+nmtst_init_assert_logging (int *argc, char ***argv)
+{
+ __nmtst_init (argc, argv, TRUE, NULL, NULL);
+}
+#else
+inline static void
+nmtst_init (int *argc, char ***argv, gboolean assert_logging)
+{
+ __nmtst_init (argc, argv, assert_logging, NULL, NULL);
+}
+#endif
+
+inline static gboolean
+nmtst_is_debug (void)
+{
+ g_assert (nmtst_initialized ());
+ return __nmtst_internal.is_debug;
+}
+
+#if GLIB_CHECK_VERSION(2,34,0)
+#undef g_test_expect_message
+#define g_test_expect_message(...) \
+ G_STMT_START { \
+ g_assert (nmtst_initialized ()); \
+ if (__nmtst_internal.assert_logging && __nmtst_internal.no_expect_message) { \
+ g_debug ("nmtst: swallow g_test_expect_message %s", G_STRINGIFY ((__VA_ARGS__))); \
+ } else { \
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ g_test_expect_message (__VA_ARGS__); \
+ G_GNUC_END_IGNORE_DEPRECATIONS \
+ } \
+ } G_STMT_END
+#endif
+
+inline static GRand *
+nmtst_get_rand0 ()
+{
+ g_assert (nmtst_initialized ());
+ return __nmtst_internal.rand0;
+}
+
+inline static GRand *
+nmtst_get_rand ()
+{
+ g_assert (nmtst_initialized ());
+
+ if (G_UNLIKELY (!__nmtst_internal.rand)) {
+ guint32 seed;
+ const char *str;
+
+ if ((str = g_getenv ("NMTST_SEED_RAND"))) {
+ gchar *s;
+ gint64 i;
+
+ i = g_ascii_strtoll (str, &s, 0);
+ g_assert (s[0] == '\0' && i >= 0 && i < G_MAXINT32);
+
+ seed = i;
+ __nmtst_internal.rand = g_rand_new_with_seed (seed);
+ } else {
+ __nmtst_internal.rand = g_rand_new ();
+
+ seed = g_rand_int (__nmtst_internal.rand);
+ g_rand_set_seed (__nmtst_internal.rand, seed);
+ }
+ __nmtst_internal.rand_seed = seed;
+
+ __NMTST_LOG (g_message, ">> initialize nmtst_get_rand() with seed=%u", seed);
+ }
+ return __nmtst_internal.rand;
+}
+
+inline static const char *
+nmtst_get_sudo_cmd (void)
+{
+ g_assert (nmtst_initialized ());
+ return __nmtst_internal.sudo_cmd;
+}
+
+inline static void
+nmtst_reexec_sudo (void)
+{
+ char *str;
+ char **argv;
+ int i;
+ int errsv;
+
+ g_assert (nmtst_initialized ());
+ g_assert (__nmtst_internal.orig_argv);
+
+ if (!__nmtst_internal.sudo_cmd)
+ return;
+
+ str = g_strjoinv (" ", __nmtst_internal.orig_argv);
+ __NMTST_LOG (g_message, ">> exec %s %s", __nmtst_internal.sudo_cmd, str);
+
+ argv = g_new0 (char *, 1 + g_strv_length (__nmtst_internal.orig_argv) + 1);
+ argv[0] = __nmtst_internal.sudo_cmd;
+ for (i = 0; __nmtst_internal.orig_argv[i]; i++)
+ argv[i+1] = __nmtst_internal.orig_argv[i];
+
+ execvp (__nmtst_internal.sudo_cmd, argv);
+
+ errsv = errno;
+ g_error (">> exec %s failed: %d - %s", __nmtst_internal.sudo_cmd, errsv, strerror (errsv));
+}
+
+#define __define_nmtst_static(NUM,SIZE) \
+inline static const char * \
+nmtst_static_##SIZE##_##NUM (const char *str) \
+{ \
+ gsize l; \
+ static char buf[SIZE]; \
+\
+ if (!str) \
+ return NULL; \
+ l = g_strlcpy (buf, str, sizeof (buf)); \
+ g_assert (l < sizeof (buf)); \
+ return buf; \
+}
+__define_nmtst_static(01, 1024)
+__define_nmtst_static(02, 1024)
+__define_nmtst_static(03, 1024)
+#undef __define_nmtst_static
+
+
+#define NMTST_SWAP(x,y) \
+ G_STMT_START { \
+ char __nmtst_swap_temp[sizeof(x) == sizeof(y) ? (signed) sizeof(x) : -1]; \
+ memcpy(__nmtst_swap_temp, &y, sizeof(x)); \
+ memcpy(&y, &x, sizeof(x)); \
+ memcpy(&x, __nmtst_swap_temp, sizeof(x)); \
+ } G_STMT_END
+
+inline static guint32
+nmtst_inet4_from_string (const char *str)
+{
+ guint32 addr;
+ int success;
+
+ if (!str)
+ return 0;
+
+ success = inet_pton (AF_INET, str, &addr);
+
+ g_assert (success == 1);
+
+ return addr;
+}
+
+inline static const struct in6_addr *
+nmtst_inet6_from_string (const char *str)
+{
+ static struct in6_addr addr;
+ int success;
+
+ if (!str)
+ addr = in6addr_any;
+ else {
+ success = inet_pton (AF_INET6, str, &addr);
+ g_assert (success == 1);
+ }
+
+ return &addr;
+}
+
+inline static void
+FAIL(const char *test_name, const char *fmt, ...)
+{
+ va_list args;
+ char buf[500];
+
+ g_snprintf (buf, 500, "FAIL: (%s) %s\n", test_name, fmt);
+
+ va_start (args, fmt);
+ vfprintf (stderr, buf, args);
+ va_end (args);
+ _exit (1);
+}
+
+#define ASSERT(x, test_name, fmt, ...) \
+ if (!(x)) { \
+ FAIL (test_name, fmt, ## __VA_ARGS__); \
+ }
+
+
+#define nmtst_spawn_sync(working_directory, standard_out, standard_err, assert_exit_status, ...) \
+ __nmtst_spawn_sync (working_directory, standard_out, standard_err, assert_exit_status, ##__VA_ARGS__, NULL)
+inline static gint
+__nmtst_spawn_sync (const char *working_directory, char **standard_out, char **standard_err, int assert_exit_status, ...) G_GNUC_NULL_TERMINATED;
+inline static gint
+__nmtst_spawn_sync (const char *working_directory, char **standard_out, char **standard_err, int assert_exit_status, ...)
+{
+ gint exit_status = 0;
+ GError *error = NULL;
+ char *arg;
+ va_list va_args;
+ GPtrArray *argv = g_ptr_array_new ();
+ gboolean success;
+
+ va_start (va_args, assert_exit_status);
+ while ((arg = va_arg (va_args, char *)))
+ g_ptr_array_add (argv, arg);
+ va_end (va_args);
+
+ g_assert (argv->len >= 1);
+ g_ptr_array_add (argv, NULL);
+
+ success = g_spawn_sync (working_directory,
+ (char**) argv->pdata,
+ NULL,
+ 0 /*G_SPAWN_DEFAULT*/,
+ NULL,
+ NULL,
+ standard_out,
+ standard_err,
+ &exit_status,
+ &error);
+ if (!success)
+ g_error ("nmtst_spawn_sync(%s): %s", ((char **) argv->pdata)[0], error->message);
+ g_assert (!error);
+
+ g_assert (!standard_out || *standard_out);
+ g_assert (!standard_err || *standard_err);
+
+ if (assert_exit_status != -1) {
+ /* exit status is a guint8 on success. Set @assert_exit_status to -1
+ * not to check for the exit status. */
+ g_assert (WIFEXITED (exit_status));
+ g_assert_cmpint (WEXITSTATUS (exit_status), ==, assert_exit_status);
+ }
+
+ g_ptr_array_free (argv, TRUE);
+ return exit_status;
+}
+
+/*******************************************************************************/
+
+#ifdef NM_PLATFORM_H
+
+inline static NMPlatformIP6Address *
+nmtst_platform_ip6_address (const char *address, const char *peer_address, guint plen)
+{
+ static NMPlatformIP6Address addr;
+
+ memset (&addr, 0, sizeof (addr));
+ addr.address = *nmtst_inet6_from_string (address);
+ addr.peer_address = *nmtst_inet6_from_string (peer_address);
+ addr.plen = plen;
+
+ return &addr;
+}
+
+inline static NMPlatformIP6Address *
+nmtst_platform_ip6_address_full (const char *address, const char *peer_address, guint plen,
+ int ifindex, NMPlatformSource source, guint32 timestamp,
+ guint32 lifetime, guint32 preferred, guint flags)
+{
+ NMPlatformIP6Address *addr = nmtst_platform_ip6_address (address, peer_address, plen);
+
+ addr->ifindex = ifindex;
+ addr->source = source;
+ addr->timestamp = timestamp;
+ addr->lifetime = lifetime;
+ addr->preferred = preferred;
+ addr->flags = flags;
+
+ return addr;
+}
+
+inline static NMPlatformIP6Route *
+nmtst_platform_ip6_route (const char *network, guint plen, const char *gateway)
+{
+ static NMPlatformIP6Route route;
+
+ memset (&route, 0, sizeof (route));
+ route.network = *nmtst_inet6_from_string (network);
+ route.plen = plen;
+ route.gateway = *nmtst_inet6_from_string (gateway);
+
+ return &route;
+}
+
+inline static NMPlatformIP6Route *
+nmtst_platform_ip6_route_full (const char *network, guint plen, const char *gateway,
+ int ifindex, NMPlatformSource source,
+ guint metric, guint mss)
+{
+ NMPlatformIP6Route *route = nmtst_platform_ip6_route (network, plen, gateway);
+
+ route->ifindex = ifindex;
+ route->source = source;
+ route->metric = metric;
+ route->mss = mss;
+
+ return route;
+}
+
+inline static void
+nmtst_platform_ip4_routes_equal (const NMPlatformIP4Route *a, const NMPlatformIP4Route *b, gsize len)
+{
+ gsize i;
+
+ g_assert (a);
+ g_assert (b);
+
+ for (i = 0; i < len; i++) {
+ if (nm_platform_ip4_route_cmp (&a[i], &b[i]) != 0) {
+ g_error ("Error comparing IPv4 route[%lu]: %s vs %s", (long unsigned) i,
+ nmtst_static_1024_01 (nm_platform_ip4_route_to_string (&a[i])),
+ nmtst_static_1024_02 (nm_platform_ip4_route_to_string (&b[i])));
+ g_assert_not_reached ();
+ }
+
+ /* also check with memcmp, though this might fail for valid programs (due to field alignment) */
+ g_assert_cmpint (memcmp (&a[i], &b[i], sizeof (a[i])), ==, 0);
+ }
+}
+
+inline static void
+nmtst_platform_ip6_routes_equal (const NMPlatformIP6Route *a, const NMPlatformIP6Route *b, gsize len)
+{
+ gsize i;
+
+ g_assert (a);
+ g_assert (b);
+
+ for (i = 0; i < len; i++) {
+ if (nm_platform_ip6_route_cmp (&a[i], &b[i]) != 0) {
+ g_error ("Error comparing IPv6 route[%lu]: %s vs %s", (long unsigned) i,
+ nmtst_static_1024_01 (nm_platform_ip6_route_to_string (&a[i])),
+ nmtst_static_1024_02 (nm_platform_ip6_route_to_string (&b[i])));
+ g_assert_not_reached ();
+ }
+
+ /* also check with memcmp, though this might fail for valid programs (due to field alignment) */
+ g_assert_cmpint (memcmp (&a[i], &b[i], sizeof (a[i])), ==, 0);
+ }
+}
+
+#endif
+
+
+#ifdef NM_IP4_CONFIG_H
+
+inline static NMIP4Config *
+nmtst_ip4_config_clone (NMIP4Config *config)
+{
+ NMIP4Config *copy = nm_ip4_config_new ();
+
+ g_assert (copy);
+ g_assert (config);
+ nm_ip4_config_replace (copy, config, NULL);
+ return copy;
+}
+
+#endif
+
+
+#ifdef NM_IP6_CONFIG_H
+
+inline static NMIP6Config *
+nmtst_ip6_config_clone (NMIP6Config *config)
+{
+ NMIP6Config *copy = nm_ip6_config_new ();
+
+ g_assert (copy);
+ g_assert (config);
+ nm_ip6_config_replace (copy, config, NULL);
+ return copy;
+}
+
+#endif
+
+
+#endif /* __NM_TEST_UTILS_H__ */
+
diff --git a/include/nm-version.h b/include/nm-version.h
index d03b02993..5769156ce 100644
--- a/include/nm-version.h
+++ b/include/nm-version.h
@@ -43,7 +43,7 @@
* Evaluates to the micro version number of NetworkManager which this source
* compiled against.
*/
-#define NM_MICRO_VERSION (8)
+#define NM_MICRO_VERSION (10)
/**
* NM_CHECK_VERSION:
@@ -59,5 +59,60 @@
(NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION > (minor)) || \
(NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION == (minor) && NM_MICRO_VERSION >= (micro)))
+
+/* Deprecation / Availability macros */
+
+#define NM_ENCODE_VERSION(major,minor,micro) ((major) << 16 | (minor) << 8 | (micro))
+
+#define NM_VERSION_0_9_8 (NM_ENCODE_VERSION (0, 9, 8))
+#define NM_VERSION_0_9_10 (NM_ENCODE_VERSION (0, 9, 10))
+
+#if (NM_MICRO_VERSION % 2)
+#define NM_VERSION_CUR_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION - 1))
+#else
+#define NM_VERSION_CUR_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION))
+#endif
+
+#if (NM_MICRO_VERSION % 2)
+#define NM_VERSION_NEXT_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION +1))
+#else
+#define NM_VERSION_NEXT_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION + 2))
+#endif
+
+#if !defined (NM_VERSION_MIN_REQUIRED) || (NM_VERSION_MIN_REQUIRED == 0)
+# undef NM_VERSION_MIN_REQUIRED
+# define NM_VERSION_MIN_REQUIRED (NM_VERSION_CUR_STABLE)
+#endif
+
+#if !defined (NM_VERSION_MAX_ALLOWED) || (NM_VERSION_MAX_ALLOWED == 0)
+# undef NM_VERSION_MAX_ALLOWED
+# define NM_VERSION_MAX_ALLOWED (NM_VERSION_CUR_STABLE)
+#endif
+
+/* sanity checks */
+#if NM_VERSION_MIN_REQUIRED > NM_VERSION_NEXT_STABLE
+#error "NM_VERSION_MIN_REQUIRED must be <= NM_VERSION_NEXT_STABLE"
+#endif
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_MIN_REQUIRED
+#error "NM_VERSION_MAX_ALLOWED must be >= NM_VERSION_MIN_REQUIRED"
+#endif
+#if NM_VERSION_MIN_REQUIRED < NM_VERSION_0_9_8
+#error "NM_VERSION_MIN_REQUIRED must be >= NM_VERSION_0_9_8"
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_0_9_10
+# define NM_DEPRECATED_IN_0_9_10 G_DEPRECATED
+# define NM_DEPRECATED_IN_0_9_10_FOR(f) G_DEPRECATED_FOR(f)
+#else
+# define NM_DEPRECATED_IN_0_9_10
+# define NM_DEPRECATED_IN_0_9_10_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_0_9_10
+# define NM_AVAILABLE_IN_0_9_10 G_UNAVAILABLE(0.9,10)
+#else
+# define NM_AVAILABLE_IN_0_9_10
+#endif
+
#endif /* NM_VERSION_H */
diff --git a/include/nm-version.h.in b/include/nm-version.h.in
index ee2e1080e..711bfa9f0 100644
--- a/include/nm-version.h.in
+++ b/include/nm-version.h.in
@@ -59,5 +59,60 @@
(NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION > (minor)) || \
(NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION == (minor) && NM_MICRO_VERSION >= (micro)))
+
+/* Deprecation / Availability macros */
+
+#define NM_ENCODE_VERSION(major,minor,micro) ((major) << 16 | (minor) << 8 | (micro))
+
+#define NM_VERSION_0_9_8 (NM_ENCODE_VERSION (0, 9, 8))
+#define NM_VERSION_0_9_10 (NM_ENCODE_VERSION (0, 9, 10))
+
+#if (NM_MICRO_VERSION % 2)
+#define NM_VERSION_CUR_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION - 1))
+#else
+#define NM_VERSION_CUR_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION))
+#endif
+
+#if (NM_MICRO_VERSION % 2)
+#define NM_VERSION_NEXT_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION +1))
+#else
+#define NM_VERSION_NEXT_STABLE (NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION + 2))
+#endif
+
+#if !defined (NM_VERSION_MIN_REQUIRED) || (NM_VERSION_MIN_REQUIRED == 0)
+# undef NM_VERSION_MIN_REQUIRED
+# define NM_VERSION_MIN_REQUIRED (NM_VERSION_CUR_STABLE)
+#endif
+
+#if !defined (NM_VERSION_MAX_ALLOWED) || (NM_VERSION_MAX_ALLOWED == 0)
+# undef NM_VERSION_MAX_ALLOWED
+# define NM_VERSION_MAX_ALLOWED (NM_VERSION_CUR_STABLE)
+#endif
+
+/* sanity checks */
+#if NM_VERSION_MIN_REQUIRED > NM_VERSION_NEXT_STABLE
+#error "NM_VERSION_MIN_REQUIRED must be <= NM_VERSION_NEXT_STABLE"
+#endif
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_MIN_REQUIRED
+#error "NM_VERSION_MAX_ALLOWED must be >= NM_VERSION_MIN_REQUIRED"
+#endif
+#if NM_VERSION_MIN_REQUIRED < NM_VERSION_0_9_8
+#error "NM_VERSION_MIN_REQUIRED must be >= NM_VERSION_0_9_8"
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_0_9_10
+# define NM_DEPRECATED_IN_0_9_10 G_DEPRECATED
+# define NM_DEPRECATED_IN_0_9_10_FOR(f) G_DEPRECATED_FOR(f)
+#else
+# define NM_DEPRECATED_IN_0_9_10
+# define NM_DEPRECATED_IN_0_9_10_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_0_9_10
+# define NM_AVAILABLE_IN_0_9_10 G_UNAVAILABLE(0.9,10)
+#else
+# define NM_AVAILABLE_IN_0_9_10
+#endif
+
#endif /* NM_VERSION_H */
diff --git a/initscript/paldo/NetworkManager.in b/initscript/paldo/NetworkManager.in
deleted file mode 100644
index 144b237a8..000000000
--- a/initscript/paldo/NetworkManager.in
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-### BEGIN INIT INFO
-# Provides: NetworkManager
-# Required-Start: $network dbus
-# Required-Stop: $network dbus
-# Default-Start: 3 4 5
-# Default-Stop: 0 1 2 6
-### END INIT INFO
-. /lib/lsb/init-functions
-
-[ -e /etc/default/NetworkManager ] && source /etc/default/NetworkManager
-[ $(/usr/bin/tty -s; echo $?) -gt 0 -o "$(/usr/bin/tty)" == "/dev/console" ] && [ "$START_NETWORK_MANAGER" != "TRUE" ] && exit 0
-
-prefix=@prefix@
-exec_prefix=@prefix@
-sbindir=@sbindir@
-
-case "$1" in
- start)
- echo -n "Starting NetworkManager..."
- if start_daemon $sbindir/NetworkManager
- then
- log_success_msg
- else
- log_failure_msg
- fi
- ;;
- stop)
- echo -n "Stopping NetworkManager..."
- if killproc $sbindir/NetworkManager
- then
- log_success_msg "."
- else
- log_failure_msg
- fi
- ;;
- restart|force-reload)
- $0 stop
- sleep 1
- $0 start
- ;;
- try-restart)
- if pidofproc $sbindir/NetworkManager
- then
- $0 restart
- fi
- ;;
- status)
- pidofproc $sbindir/NetworkManager
- exit $?
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
- exit 1
- ;;
-esac
diff --git a/introspection/Makefile.am b/introspection/Makefile.am
index 3850a2346..030155791 100644
--- a/introspection/Makefile.am
+++ b/introspection/Makefile.am
@@ -13,8 +13,15 @@ EXTRA_DIST = \
nm-device-wimax.xml \
nm-device-infiniband.xml \
nm-device-bond.xml \
+ nm-device-team.xml \
nm-device-bridge.xml \
nm-device-vlan.xml \
+ nm-device-generic.xml \
+ nm-device-veth.xml \
+ nm-device-tun.xml \
+ nm-device-macvlan.xml \
+ nm-device-vxlan.xml \
+ nm-device-gre.xml \
nm-device.xml \
nm-ip4-config.xml \
nm-ip6-config.xml \
diff --git a/introspection/Makefile.in b/introspection/Makefile.in
index f5c1f23ab..9e6cc901b 100644
--- a/introspection/Makefile.in
+++ b/introspection/Makefile.in
@@ -81,7 +81,8 @@ subdir = introspection
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(srcdir)/all.xml.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -145,12 +146,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -175,7 +179,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -220,12 +223,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -242,6 +249,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -269,11 +278,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -288,6 +302,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -350,6 +365,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -360,6 +376,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
all.xml.in \
generic-types.xml \
@@ -375,8 +392,15 @@ EXTRA_DIST = \
nm-device-wimax.xml \
nm-device-infiniband.xml \
nm-device-bond.xml \
+ nm-device-team.xml \
nm-device-bridge.xml \
nm-device-vlan.xml \
+ nm-device-generic.xml \
+ nm-device-veth.xml \
+ nm-device-tun.xml \
+ nm-device-macvlan.xml \
+ nm-device-vxlan.xml \
+ nm-device-gre.xml \
nm-device.xml \
nm-ip4-config.xml \
nm-ip6-config.xml \
diff --git a/introspection/all.xml.in b/introspection/all.xml.in
index a8cea6134..29cccdb52 100644
--- a/introspection/all.xml.in
+++ b/introspection/all.xml.in
@@ -37,6 +37,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<xi:include href="nm-device-infiniband.xml"/>
<xi:include href="nm-device-bond.xml"/>
<xi:include href="nm-device-bridge.xml"/>
+<xi:include href="nm-device-team.xml"/>
+<xi:include href="nm-device-generic.xml"/>
<xi:include href="nm-device-vlan.xml"/>
<xi:include href="nm-device-adsl.xml"/>
<xi:include href="nm-wimax-nsp.xml"/>
diff --git a/introspection/nm-active-connection.xml b/introspection/nm-active-connection.xml
index b6a3c48d1..cbecdfcef 100644
--- a/introspection/nm-active-connection.xml
+++ b/introspection/nm-active-connection.xml
@@ -11,7 +11,9 @@
</tp:docstring>
<property name="Connection" type="o" access="read">
- <tp:docstring>The path of the connection.</tp:docstring>
+ <tp:docstring>
+ The path of the connection.
+ </tp:docstring>
</property>
<property name="SpecificObject" type="o" access="read">
<tp:docstring>
@@ -20,29 +22,86 @@
not change over the lifetime of the ActiveConnection once set.
</tp:docstring>
</property>
+ <property name="Id" type="s" access="read">
+ <tp:docstring>
+ The ID of the connection, provided as a convenience so that clients
+ do not have to retrieve all connection details.
+ </tp:docstring>
+ </property>
<property name="Uuid" type="s" access="read">
<tp:docstring>
The UUID of the connection, provided as a convenience so that clients
do not have to retrieve all connection details.
</tp:docstring>
</property>
+ <property name="Type" type="s" access="read">
+ <tp:docstring>
+ The type of the connection, provided as a convenience so that clients
+ do not have to retrieve all connection details.
+ </tp:docstring>
+ </property>
<property name="Devices" type="ao" access="read">
- <tp:docstring>Array of object paths representing devices which are part of this active connection.</tp:docstring>
+ <tp:docstring>
+ Array of object paths representing devices which are part of this active
+ connection.
+ </tp:docstring>
</property>
<property name="State" type="u" access="read" tp:type="NM_ACTIVE_CONNECTION_STATE">
- <tp:docstring>The state of this active connection.</tp:docstring>
+ <tp:docstring>
+ The state of this active connection.
+ </tp:docstring>
</property>
<property name="Default" type="b" access="read">
- <tp:docstring>Whether this active connection is the default IPv4 connection, i.e. whether it currently owns the default IPv4 route.</tp:docstring>
+ <tp:docstring>
+ Whether this active connection is the default IPv4 connection, i.e.
+ whether it currently owns the default IPv4 route.
+ </tp:docstring>
+ </property>
+ <property name="Ip4Config" type="o" access="read">
+ <tp:docstring>
+ Object path of the Ip4Config object describing the configuration of the
+ connection. Only valid when the connection is in the
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ </tp:docstring>
+ </property>
+ <property name="Dhcp4Config" type="o" access="read">
+ <tp:docstring>
+ Object path of the Dhcp4Config object describing the DHCP options
+ returned by the DHCP server (assuming the connection used DHCP). Only
+ valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ state.
+ </tp:docstring>
</property>
<property name="Default6" type="b" access="read">
- <tp:docstring>Whether this active connection is the default IPv6 connection, i.e. whether it currently owns the default IPv6 route.</tp:docstring>
+ <tp:docstring>
+ Whether this active connection is the default IPv6 connection, i.e.
+ whether it currently owns the default IPv6 route.
+ </tp:docstring>
+ </property>
+ <property name="Ip6Config" type="o" access="read">
+ <tp:docstring>
+ Object path of the Ip6Config object describing the configuration of the
+ connection. Only valid when the connection is in the
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ </tp:docstring>
+ </property>
+ <property name="Dhcp6Config" type="o" access="read">
+ <tp:docstring>
+ Object path of the Dhcp6Config object describing the DHCP options
+ returned by the DHCP server (assuming the connection used DHCP). Only
+ valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ state.
+ </tp:docstring>
</property>
<property name="Vpn" type="b" access="read">
- <tp:docstring>Whether this active connection is also a VPN connection.</tp:docstring>
+ <tp:docstring>
+ Whether this active connection is also a VPN connection.
+ </tp:docstring>
</property>
<property name="Master" type="o" access="read">
- <tp:docstring>The path to the master device if the connection is a slave.</tp:docstring>
+ <tp:docstring>
+ The path to the master device if the connection is a slave.
+ </tp:docstring>
</property>
<signal name="PropertiesChanged">
diff --git a/introspection/nm-agent-manager.xml b/introspection/nm-agent-manager.xml
index e26caacf4..d10744286 100644
--- a/introspection/nm-agent-manager.xml
+++ b/introspection/nm-agent-manager.xml
@@ -23,6 +23,24 @@
</arg>
</method>
+ <method name="RegisterWithCapabilities">
+ <tp:docstring>
+ Like Register() but indicates agent capabilities to NetworkManager.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_agent_manager_register_with_capabilities"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="identifier" type="s" direction="in">
+ <tp:docstring>
+ See the Register() method's identifier argument.
+ </tp:docstring>
+ </arg>
+ <arg name="capabilities" type="u" direction="in" tp:type="NM_SECRET_AGENT_CAPABILITIES">
+ <tp:docstring>
+ Indicates various agent capabilities to NetworkManager.
+ </tp:docstring>
+ </arg>
+ </method>
+
<method name="Unregister">
<tp:docstring>
Called by secret Agents to notify NetworkManager that they will no
diff --git a/introspection/nm-device-generic.xml b/introspection/nm-device-generic.xml
new file mode 100644
index 000000000..79d198996
--- /dev/null
+++ b/introspection/nm-device-generic.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.NetworkManager.Device.Generic">
+
+ <property name="HwAddress" type="s" access="read">
+ <tp:docstring>
+ Hardware address of the device.
+ </tp:docstring>
+ </property>
+
+ <property name="TypeDescription" type="s" access="read">
+ <tp:docstring>
+ A (non-localized) description of the interface type, if known.
+ </tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ </interface>
+</node>
diff --git a/introspection/nm-device-gre.xml b/introspection/nm-device-gre.xml
new file mode 100644
index 000000000..ae418aab5
--- /dev/null
+++ b/introspection/nm-device-gre.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.NetworkManager.Device.Gre">
+
+ <property name="Parent" type="o" access="read">
+ <tp:docstring>
+ The object path of the parent device.
+ </tp:docstring>
+ </property>
+
+ <property name="InputFlags" type="q" access="read">
+ <tp:docstring>
+ The expected set of GRE flags for incoming packets. (The
+ values are specified by the GRE specification. On Linux, they
+ are defined in &lt;linux/if_tunnel.h&gt;. Eg, GRE_KEY for the
+ 'Key Present' bit.)
+ </tp:docstring>
+ </property>
+
+ <property name="OutputFlags" type="q" access="read">
+ <tp:docstring>
+ The set of GRE flags to use for outgoing packets. (The
+ values are specified by the GRE specification. On Linux, they
+ are defined in &lt;linux/if_tunnel.h&gt;. Eg, GRE_KEY for the
+ 'Key Present' bit.)
+ </tp:docstring>
+ </property>
+
+ <property name="InputKey" type="u" access="read">
+ <tp:docstring>
+ Expected input key (if the "Key Present" bit is set in the input flags).
+ </tp:docstring>
+ </property>
+
+ <property name="OutputKey" type="u" access="read">
+ <tp:docstring>
+ Output key (if the "Key Present" bit is set in the output flags).
+ </tp:docstring>
+ </property>
+
+ <property name="Local" type="s" access="read">
+ <tp:docstring>
+ The local end of the tunnel.
+ </tp:docstring>
+ </property>
+
+ <property name="Remote" type="s" access="read">
+ <tp:docstring>
+ The remote end of the tunnel.
+ </tp:docstring>
+ </property>
+
+ <property name="Ttl" type="y" access="read">
+ <tp:docstring>
+ The value to use in the IP TTL field for tunnel packets.
+ </tp:docstring>
+ </property>
+
+ <property name="Tos" type="y" access="read">
+ <tp:docstring>
+ The value to use in the IP ToS field for tunnel packets.
+ </tp:docstring>
+ </property>
+
+ <property name="PathMtuDiscovery" type="b" access="read">
+ <tp:docstring>
+ Whether path MTU discovery is performed.
+ </tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ </interface>
+</node>
diff --git a/introspection/nm-device-macvlan.xml b/introspection/nm-device-macvlan.xml
new file mode 100644
index 000000000..a387bf564
--- /dev/null
+++ b/introspection/nm-device-macvlan.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.NetworkManager.Device.Macvlan">
+
+ <property name="Parent" type="o" access="read">
+ <tp:docstring>
+ The object path of the parent device.
+ </tp:docstring>
+ </property>
+
+ <property name="Mode" type="s" access="read">
+ <tp:docstring>
+ The macvlan mode, one of "private", "vepa", "bridge", or "passthru".
+ </tp:docstring>
+ </property>
+
+ <property name="NoPromisc" type="b" access="read">
+ <tp:docstring>
+ Whether the device is blocked from going into promiscuous mode.
+ </tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ </interface>
+</node>
diff --git a/introspection/nm-device-team.xml b/introspection/nm-device-team.xml
new file mode 100644
index 000000000..baf39fa86
--- /dev/null
+++ b/introspection/nm-device-team.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.NetworkManager.Device.Team">
+
+ <property name="HwAddress" type="s" access="read">
+ <tp:docstring>
+ Hardware address of the device.
+ </tp:docstring>
+ </property>
+
+ <property name="Carrier" type="b" access="read">
+ <tp:docstring>
+ Indicates whether the physical carrier is found (e.g. whether a cable is plugged in or not).
+ </tp:docstring>
+ </property>
+
+ <property name="Slaves" type="ao" access="read">
+ <tp:docstring>
+ Array of object paths representing devices which are currently
+ slaved to this device.
+ </tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ </interface>
+</node>
diff --git a/introspection/nm-device-tun.xml b/introspection/nm-device-tun.xml
new file mode 100644
index 000000000..8b0f81fbc
--- /dev/null
+++ b/introspection/nm-device-tun.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.NetworkManager.Device.Tun">
+
+ <property name="Owner" type="x" access="read">
+ <tp:docstring>
+ The uid of the tunnel owner, or -1 if it has no owner.
+ </tp:docstring>
+ </property>
+
+ <property name="Group" type="x" access="read">
+ <tp:docstring>
+ The gid of the tunnel group, or -1 if it has no owner.
+ </tp:docstring>
+ </property>
+
+ <property name="Mode" type="s" access="read">
+ <tp:docstring>
+ The tunnel mode, either "tun" or "tap".
+ </tp:docstring>
+ </property>
+
+ <property name="NoPi" type="b" access="read">
+ <tp:docstring>
+ The tunnel's "TUN_NO_PI" flag; true if no protocol info is
+ prepended to the tunnel packets.
+ </tp:docstring>
+ </property>
+
+ <property name="VnetHdr" type="b" access="read">
+ <tp:docstring>
+ The tunnel's "TUN_VNET_HDR" flag; true if the tunnel packets
+ include a virtio network header.
+ </tp:docstring>
+ </property>
+
+ <property name="MultiQueue" type="b" access="read">
+ <tp:docstring>
+ The tunnel's "TUN_TAP_MQ" flag; true if callers can connect to
+ the tap device multiple times, for multiple send/receive
+ queues.
+ </tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ </interface>
+</node>
diff --git a/introspection/nm-device-veth.xml b/introspection/nm-device-veth.xml
new file mode 100644
index 000000000..e06d0ceb7
--- /dev/null
+++ b/introspection/nm-device-veth.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.NetworkManager.Device.Veth">
+
+ <property name="Peer" type="o" access="read">
+ <tp:docstring>
+ The object path of the device's peer.
+ </tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ </interface>
+</node>
diff --git a/introspection/nm-device-vxlan.xml b/introspection/nm-device-vxlan.xml
new file mode 100644
index 000000000..053eea4d2
--- /dev/null
+++ b/introspection/nm-device-vxlan.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.NetworkManager.Device.Vxlan">
+
+ <property name="Parent" type="o" access="read">
+ <tp:docstring>
+ The object path of the parent device (if the VXLAN is not
+ purely internal to this host).
+ </tp:docstring>
+ </property>
+
+ <property name="Id" type="u" access="read">
+ <tp:docstring>
+ The VXLAN Network Identifier (VNI).
+ </tp:docstring>
+ </property>
+
+ <property name="Group" type="s" access="read">
+ <tp:docstring>
+ The IP (v4 or v6) multicast group used to communicate with other physical
+ hosts on this VXLAN.
+ </tp:docstring>
+ </property>
+
+ <property name="Local" type="s" access="read">
+ <tp:docstring>
+ The local IPv4 or IPv6 address to use when sending VXLAN packets to other
+ physical hosts.
+ </tp:docstring>
+ </property>
+
+ <property name="Tos" type="y" access="read">
+ <tp:docstring>
+ The value to use in the IP ToS field for VXLAN packets sent to
+ other physical hosts.
+ </tp:docstring>
+ </property>
+
+ <property name="Ttl" type="y" access="read">
+ <tp:docstring>
+ The value to use in the IP TTL field for VXLAN packets sent to
+ other physical hosts.
+ </tp:docstring>
+ </property>
+
+ <property name="Learning" type="b" access="read">
+ <tp:docstring>
+ True if the VXLAN dynamically learns remote IP addresses.
+ </tp:docstring>
+ </property>
+
+ <property name="Ageing" type="u" access="read">
+ <tp:docstring>
+ The interval at which the kernel purges stale cached addresses
+ (in kernel jiffies, ie, centiseconds).
+ </tp:docstring>
+ </property>
+
+ <property name="Limit" type="u" access="read">
+ <tp:docstring>
+ The maximum number of entries that can be added to the VXLAN's
+ forwarding table.
+ </tp:docstring>
+ </property>
+
+ <property name="DstPort" type="q" access="read">
+ <tp:docstring>
+ Destination port for outgoing VXLAN packets.
+ </tp:docstring>
+ </property>
+
+ <property name="SrcPortMin" type="q" access="read">
+ <tp:docstring>
+ The lowest source port number to use for outgoing VXLAN packets.
+ </tp:docstring>
+ </property>
+
+ <property name="SrcPortMax" type="q" access="read">
+ <tp:docstring>
+ The highest source port number to use for outgoing VXLAN packets.
+ </tp:docstring>
+ </property>
+
+ <property name="Proxy" type="b" access="read">
+ <tp:docstring>
+ True if the VXLAN is implementing DOVE ARP proxying for remote
+ clients.
+ </tp:docstring>
+ </property>
+
+ <property name="Rsc" type="b" access="read">
+ <tp:docstring>
+ True if the VXLAN is implementing DOVE route short-circuiting
+ of known remote IP addresses.
+ </tp:docstring>
+ </property>
+
+ <property name="L2miss" type="b" access="read">
+ <tp:docstring>
+ True if the VXLAN will emit netlink notifications of L2 switch
+ misses.
+ </tp:docstring>
+ </property>
+
+ <property name="L3miss" type="b" access="read">
+ <tp:docstring>
+ True if the VXLAN will emit netlink notifications of L3 switch
+ misses.
+ </tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ </interface>
+</node>
diff --git a/introspection/nm-device-wifi.xml b/introspection/nm-device-wifi.xml
index dcfa20ccb..65c7b71dc 100644
--- a/introspection/nm-device-wifi.xml
+++ b/introspection/nm-device-wifi.xml
@@ -6,11 +6,27 @@
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_get_access_points"/>
<arg name="access_points" type="ao" direction="out">
<tp:docstring>
- List of access point object paths
+ List of access point object paths.
</tp:docstring>
</arg>
<tp:docstring>
- Get the list of access points visible to this device.
+ DEPRECATED. Get the list of access points visible to this device. Note
+ that this list does not include access points which hide their SSID. To
+ retrieve a list of all access points (including hidden ones) use the
+ GetAllAccessPoints() method.
+ </tp:docstring>
+ </method>
+
+ <method name="GetAllAccessPoints">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_get_all_access_points"/>
+ <arg name="access_points" type="ao" direction="out">
+ <tp:docstring>
+ List of access point object paths.
+ </tp:docstring>
+ </arg>
+ <tp:docstring>
+ Get the list of all access points visible to this device, including
+ hidden ones for which the SSID is not yet known.
</tp:docstring>
</method>
@@ -50,11 +66,19 @@
The bit rate currently used by the wireless device, in kilobits/second (Kb/s).
</tp:docstring>
</property>
+
+ <property name="AccessPoints" type="ao" access="read">
+ <tp:docstring>
+ List of object paths of access point visible to this wireless device.
+ </tp:docstring>
+ </property>
+
<property name="ActiveAccessPoint" type="o" access="read">
<tp:docstring>
Object path of the access point currently used by the wireless device.
</tp:docstring>
</property>
+
<property name="WirelessCapabilities" type="u" access="read" tp:type="NM_802_11_DEVICE_CAP">
<tp:docstring>
The capabilities of the wireless device.
diff --git a/introspection/nm-device-wimax.xml b/introspection/nm-device-wimax.xml
index 6e414087f..b48ffe94e 100644
--- a/introspection/nm-device-wimax.xml
+++ b/introspection/nm-device-wimax.xml
@@ -14,6 +14,13 @@
</tp:docstring>
</method>
+ <property name="Nsps" type="ao" access="read">
+ <tp:docstring>
+ List of object paths of Network Service Providers (NSPs) visible to this
+ WiMAX device.
+ </tp:docstring>
+ </property>
+
<property name="HwAddress" type="s" access="read">
<tp:docstring>
Hardware address of the device.
diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml
index b03b1b846..f459bce4f 100644
--- a/introspection/nm-device.xml
+++ b/introspection/nm-device.xml
@@ -51,9 +51,9 @@
Flags describing the capabilities of the device.
</tp:docstring>
</property>
- <property name="Ip4Address" type="i" access="read">
+ <property name="Ip4Address" type="u" access="read">
<tp:docstring>
- The IPv4 address bound to the device. FIXME: what about devices with >1 IP address?
+ DEPRECATED; use the 'Addresses' property of the 'Ip4Config' object instead.
</tp:docstring>
</property>
<property name="State" type="u" access="read" tp:type="NM_DEVICE_STATE">
@@ -125,6 +125,19 @@
An array of object paths of every configured connection that is currently 'available' through this device.
</tp:docstring>
</property>
+ <property name="PhysicalPortId" type="s" access="read">
+ <tp:docstring>
+ If non-empty, an (opaque) indicator of the physical network
+ port associated with the device. This can be used to recognize
+ when two seemingly-separate hardware devices are actually just
+ different virtual interfaces to the same physical port.
+ </tp:docstring>
+ </property>
+ <property name="Mtu" type="u" access="read">
+ <tp:docstring>
+ The device MTU (maximum transmission unit).
+ </tp:docstring>
+ </property>
<method name="Disconnect">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_disconnect"/>
@@ -289,6 +302,16 @@
The device is a bridge interface.
</tp:docstring>
</tp:enumvalue>
+ <tp:enumvalue suffix="GENERIC" value="14">
+ <tp:docstring>
+ The device is a generic interface type unrecognized by NetworkManager.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="TEAM" value="15">
+ <tp:docstring>
+ The device is a team master interface.
+ </tp:docstring>
+ </tp:enumvalue>
</tp:enum>
<tp:flags name="NM_DEVICE_CAP" value-prefix="NM_DEVICE_CAP" type="u">
@@ -579,6 +602,31 @@
A secondary connection of the base connection failed.
</tp:docstring>
</tp:enumvalue>
+ <tp:enumvalue suffix="DCB_FCOE_FAILED" value="55">
+ <tp:docstring>
+ DCB or FCoE setup failed.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="TEAMD_CONTROL_FAILED" value="56">
+ <tp:docstring>
+ teamd control failed.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="MODEM_FAILED" value="57">
+ <tp:docstring>
+ Modem failed or no longer available.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="MODEM_AVAILABLE" value="58">
+ <tp:docstring>
+ Modem now ready and available.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="SIM_PIN_INCORRECT" value="59">
+ <tp:docstring>
+ The SIM PIN was incorrect.
+ </tp:docstring>
+ </tp:enumvalue>
</tp:enum>
<tp:struct name="NM_DEVICE_STATE_REASON_STRUCT">
diff --git a/introspection/nm-ip4-config.xml b/introspection/nm-ip4-config.xml
index 70d3e1ce4..6a8750b7f 100644
--- a/introspection/nm-ip4-config.xml
+++ b/introspection/nm-ip4-config.xml
@@ -2,21 +2,15 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.IP4Config">
+ <property name="Gateway" type="s" access="read">
+ <tp:docstring>The gateway in use.</tp:docstring>
+ </property>
<property name="Addresses" type="aau" access="read">
<tp:docstring>Array of tuples of IPv4 address/prefix/gateway. All 3
elements of each tuple are in network byte order. Essentially:
[(addr, prefix, gateway), (addr, prefix, gateway), ...]
</tp:docstring>
</property>
- <property name="Nameservers" type="au" access="read">
- <tp:docstring>The nameservers in use.</tp:docstring>
- </property>
- <property name="WinsServers" type="au" access="read">
- <tp:docstring>The Windows Internet Name Service servers associated with the connection. Each address is in network byte order.</tp:docstring>
- </property>
- <property name="Domains" type="as" access="read">
- <tp:docstring>A list of domains this address belongs to.</tp:docstring>
- </property>
<property name="Routes" type="aau" access="read">
<tp:docstring>Tuples of IPv4 route/prefix/next-hop/metric. All 4 elements
of each tuple are in network byte order. 'route' and 'next hop' are IPv4
@@ -24,6 +18,26 @@
[(route, prefix, next-hop, metric), (route, prefix, next-hop, metric), ...]
</tp:docstring>
</property>
+ <property name="Nameservers" type="au" access="read">
+ <tp:docstring>The nameservers in use.</tp:docstring>
+ </property>
+ <property name="Domains" type="as" access="read">
+ <tp:docstring>A list of domains this address belongs to.</tp:docstring>
+ </property>
+ <property name="Searches" type="as" access="read">
+ <tp:docstring>A list of dns searches.</tp:docstring>
+ </property>
+ <property name="WinsServers" type="au" access="read">
+ <tp:docstring>The Windows Internet Name Service servers associated with the connection. Each address is in network byte order.</tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
</interface>
</node>
diff --git a/introspection/nm-ip6-config.xml b/introspection/nm-ip6-config.xml
index 604781857..55c519e70 100644
--- a/introspection/nm-ip6-config.xml
+++ b/introspection/nm-ip6-config.xml
@@ -2,18 +2,32 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.IP6Config">
+ <property name="Gateway" type="s" access="read">
+ <tp:docstring>The gateway in use.</tp:docstring>
+ </property>
<property name="Addresses" type="a(ayuay)" access="read">
<tp:docstring>Tuples of IPv6 address/prefix/gateway.</tp:docstring>
</property>
+ <property name="Routes" type="a(ayuayu)" access="read">
+ <tp:docstring>Tuples of IPv6 route/prefix/next-hop/metric.</tp:docstring>
+ </property>
<property name="Nameservers" type="aay" access="read">
<tp:docstring>The nameservers in use.</tp:docstring>
</property>
<property name="Domains" type="as" access="read">
<tp:docstring>A list of domains this address belongs to.</tp:docstring>
</property>
- <property name="Routes" type="a(ayuayu)" access="read">
- <tp:docstring>Tuples of IPv6 route/prefix/next-hop/metric.</tp:docstring>
+ <property name="Searches" type="as" access="read">
+ <tp:docstring>A list of dns searches.</tp:docstring>
</property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values
+ </tp:docstring>
+ </arg>
+ </signal>
</interface>
</node>
diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml
index a0e277328..6af2be303 100644
--- a/introspection/nm-manager.xml
+++ b/introspection/nm-manager.xml
@@ -41,12 +41,17 @@
</tp:docstring>
<arg name="connection" type="o" direction="in">
<tp:docstring>
- The connection to activate the devices with.
+ The connection to activate. If "/" is given, a valid device path must
+ be given, and NetworkManager picks the best connection to activate for
+ the given device. VPN connections must always pass a valid connection
+ path.
</tp:docstring>
</arg>
<arg name="device" type="o" direction="in">
<tp:docstring>
- The object path of device to be activated for physical connections. This parameter is ignored for VPN connections, because the specific_object (if provided) specifies the device to use.
+ The object path of device to be activated for physical connections.
+ This parameter is ignored for VPN connections, because the
+ specific_object (if provided) specifies the device to use.
</tp:docstring>
</arg>
<arg name="specific_object" type="o" direction="in">
@@ -55,7 +60,7 @@
This parameter is currently ignored for wired and mobile broadband connections,
and the value of "/" should be used (ie, no specific object). For WiFi
connections, pass the object path of a specific AP from the card's scan
- list, or "/" to pick and AP automatically. For VPN connections, pass
+ list, or "/" to pick an AP automatically. For VPN connections, pass
the object path of an ActiveConnection object that should serve as the
"base" connection (to which the VPN connections lifetime will be tied),
or pass "/" and NM will automatically use the current default device.
@@ -204,6 +209,7 @@
<method name="SetLogging">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_set_logging"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<tp:docstring>
Set logging verbosity and which operations are logged.
</tp:docstring>
@@ -216,13 +222,17 @@
<tp:docstring>
A combination of logging domains separated by commas (','), or "NONE"
to disable logging. Each domain enables logging for operations
- related to that domain. Available domains are: [HW, RFKILL, ETHER,
+ related to that domain. Available domains are: [PLATFORM, RFKILL, ETHER,
WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS,
VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE,
- OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN]. In addition to
- these domains, the following special domains can be used: [NONE, ALL,
- DEFAULT, DHCP, IP]. If an empty string is given, the log level is
- changed but the current set of log domains remains unchanged.
+ OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN, BRIDGE, DBUS_PROPS,
+ TEAM, CONCHECK, DCB, DISPATCH].
+ In addition to these domains, the following special domains can be used:
+ [NONE, ALL, DEFAULT, DHCP, IP]. You can also specify that some domains
+ should log at a different level from the default by appending a colon (':')
+ and a log level (eg, 'WIFI:DEBUG'). If an empty string is given, the
+ log level is changed but the current set of log domains remains
+ unchanged.
</tp:docstring>
</arg>
</method>
@@ -266,6 +276,12 @@
<arg name="state" type="u" direction="out" tp:type="NM_STATE"/>
</method>
+ <property name="Devices" type="ao" access="read">
+ <tp:docstring>
+ The list of network devices/interfaces NetworkManager knows about.
+ </tp:docstring>
+ </property>
+
<property name="NetworkingEnabled" type="b" access="read">
<tp:docstring>
Indicates if overall networking is currently enabled or not. See the
@@ -334,6 +350,14 @@
</tp:docstring>
</property>
+ <property name="Startup" type="b" access="read">
+ <tp:docstring>
+ Indicates whether NM is still starting up; this becomes FALSE
+ when NM has finished attempting to activate every connection
+ that it might be able to activate at startup.
+ </tp:docstring>
+ </property>
+
<property name="Version" type="s" access="read">
<tp:docstring>
NetworkManager version.
diff --git a/introspection/nm-secret-agent.xml b/introspection/nm-secret-agent.xml
index 48dde703c..337d0a7fa 100644
--- a/introspection/nm-secret-agent.xml
+++ b/introspection/nm-secret-agent.xml
@@ -11,7 +11,8 @@
itself and should not expect its SaveSecrets() method to be called.
SaveSecrets() will be called eg if some program other than the
agent itself (like a connection editor) changes the secrets out of
- band.
+ band. The agent should implement this D-Bus interface on an object
+ with the path /org/freedesktop/NetworkManager/SecretAgent.
</tp:docstring>
<method name="GetSecrets">
@@ -21,7 +22,9 @@
and the user enters new secrets, the agent is expected to save
the new secrets to persistent storage (if the secret's flags
include AGENT_OWNED) as NetworkManager will not send these
- secrets back to the same agent via a SaveSecrets() call.
+ secrets back to the same agent via a SaveSecrets() call. If
+ the user canceled any interaction, the agent should return the
+ UserCanceled error (see below).
</tp:docstring>
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_secret_agent_get_secrets"/>
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
@@ -55,7 +58,10 @@
required, so in some cases no hints may be given. The Agent
should return any secrets it has, or that it thinks are
required, regardless of what hints NetworkManager sends
- in this request.
+ in this request. Some hints have special prefixes that
+ provide information to the agent; for example, VPN requests
+ may send server-specific messages prefixed with
+ "x-vpn-message:".
</tp:docstring>
</arg>
<arg name="flags" type="u" direction="in" tp:type="NM_SECRET_AGENT_GET_SECRETS_FLAGS">
@@ -75,6 +81,45 @@
the setting, and one or more secrets.
</tp:docstring>
</arg>
+
+ <tp:possible-errors>
+ <tp:error name="org.freedesktop.NetworkManager.SecretAgent.NotAuthorized">
+ <tp:docstring>
+ Should be returned when the process requesting secrets is
+ not authorized to do so (like if the caller is not root
+ or not NetworkManager).
+ </tp:docstring>
+ </tp:error>
+ <tp:error name="org.freedesktop.NetworkManager.SecretAgent.InvalidConnection">
+ <tp:docstring>
+ Should be returned if the 'connection' argument is invalid.
+ </tp:docstring>
+ </tp:error>
+ <tp:error name="org.freedesktop.NetworkManager.SecretAgent.UserCanceled">
+ <tp:docstring>
+ Should be returned when the user has canceled the request.
+ </tp:docstring>
+ </tp:error>
+ <tp:error name="org.freedesktop.NetworkManager.SecretAgent.AgentCanceled">
+ <tp:docstring>
+ Should be returned when NetworkManager has requested that
+ the agent cancel the request.
+ </tp:docstring>
+ </tp:error>
+ <tp:error name="org.freedesktop.NetworkManager.SecretAgent.InternalError">
+ <tp:docstring>
+ Should be returned if the agent has encountered some internal
+ error processing the request.
+ </tp:docstring>
+ </tp:error>
+ <tp:error name="org.freedesktop.NetworkManager.SecretAgent.NoSecrets">
+ <tp:docstring>
+ Should be returned if there are no available secrets, for
+ example if user interaction is not allowed and there are
+ no secrets stored by the agent for this connection.
+ </tp:docstring>
+ </tp:error>
+ </tp:possible-errors>
</method>
<tp:flags name="NM_SECRET_AGENT_GET_SECRETS_FLAGS" value-prefix="NM_SECRET_AGENT_GET_SECRETS_FLAG" type="u">
@@ -181,6 +226,18 @@
</arg>
</method>
+ <tp:flags name="NM_SECRET_AGENT_CAPABILITIES" value-prefix="NM_SECRET_AGENT_CAPABILITY" type="u">
+ <tp:flag suffix="NONE" value="0x0">
+ <tp:docstring>No special capabilities.</tp:docstring>
+ </tp:flag>
+ <tp:flag suffix="VPN_HINTS" value="0x1">
+ <tp:docstring>
+ The agent supports passing hints to VPN plugin authentication
+ dialogs.
+ </tp:docstring>
+ </tp:flag>
+ </tp:flags>
+
</interface>
</node>
diff --git a/introspection/nm-settings-connection.xml b/introspection/nm-settings-connection.xml
index 9089b009a..b5bd2cd0e 100644
--- a/introspection/nm-settings-connection.xml
+++ b/introspection/nm-settings-connection.xml
@@ -9,10 +9,11 @@
<method name="Update">
<tp:docstring>
- Update the connection with new settings and properties, replacing
- all previous settings and properties. Secrets may be part of the
- update request, and will be either stored in persistent storage or
- given to a Secret Agent for storage, depending on the request.
+ Update the connection with new settings and properties (replacing
+ all previous settings and properties) and save the connection to
+ disk. Secrets may be part of the update request, and will be either
+ stored in persistent storage or sent to a Secret Agent for storage,
+ depending on the flags associated with each secret.
</tp:docstring>
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_connection_update"/>
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
@@ -23,6 +24,28 @@
</arg>
</method>
+ <method name="UpdateUnsaved">
+ <tp:docstring>
+ Update the connection with new settings and properties (replacing
+ all previous settings and properties) but do not immediately save
+ the connection to disk. Secrets may be part of the update request
+ and may sent to a Secret Agent for storage, depending on the
+ flags associated with each secret.
+
+ Use the 'Save' method to save these changes to disk. Note
+ that unsaved changes will be lost if the connection is
+ reloaded from disk (either automatically on file change or
+ due to an explicit ReloadConnections call).
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_connection_update_unsaved"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="properties" type="a{sa{sv}}" direction="in">
+ <tp:docstring>
+ New connection settings, properties, and (optionally) secrets.
+ </tp:docstring>
+ </arg>
+ </method>
+
<method name="Delete">
<tp:docstring>
Delete the connection.
@@ -70,6 +93,15 @@
</arg>
</method>
+ <method name="Save">
+ <tp:docstring>
+ Saves a "dirty" connection (that had previously been
+ updated with UpdateUnsaved) to persistent storage.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_connection_save"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ </method>
+
<signal name="Updated">
<tp:docstring>
Emitted when any settings or permissions change. When handling
@@ -83,9 +115,28 @@
<tp:docstring>
Emitted when this connection is no longer available. This
happens when the connection is deleted or if it is no longer
- accessable by any of the system's logged-in users. After
- receipt of this signal, the object no longer exists.
+ accessible by any of the system's logged-in users. After
+ receipt of this signal, the object no longer exists. Also
+ see the Settings.ConnectionRemoved signal.
+ </tp:docstring>
+ </signal>
+
+ <property name="Unsaved" type="b" access="read">
+ <tp:docstring>
+ If set, indicates that the in-memory state of the
+ connection does not match the on-disk state. This flag
+ will be set when UpdateUnsaved() is called or when any
+ connection details change, and cleared when the connection
+ is saved to disk via Save() or from internal operations.
</tp:docstring>
+ </property>
+
+ <signal name="PropertiesChanged">
+ <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
+ <tp:docstring>
+ A dictionary mapping property names to variant boxed values.
+ </tp:docstring>
+ </arg>
</signal>
</interface>
diff --git a/introspection/nm-settings.xml b/introspection/nm-settings.xml
index c79146684..3a71959cb 100644
--- a/introspection/nm-settings.xml
+++ b/introspection/nm-settings.xml
@@ -23,6 +23,7 @@
Retrieve the object path of a connection, given that connection's UUID.
</tp:docstring>
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_get_connection_by_uuid"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg name="uuid" type="s" direction="in">
<tp:docstring>
The UUID to find the connection object path for.
@@ -56,6 +57,83 @@
</arg>
</method>
+ <method name="AddConnectionUnsaved">
+ <tp:docstring>
+ Add new connection but do not save it to disk immediately. This
+ operation does not start the network connection unless (1) device is
+ idle and able to connect to the network described by the new connection,
+ and (2) the connection is allowed to be started automatically.
+
+ Use the 'Save' method on the connection to save these changes
+ to disk. Note that unsaved changes will be lost if the
+ connection is reloaded from disk (either automatically on file
+ change or due to an explicit ReloadConnections call).
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_add_connection_unsaved"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="connection" type="a{sa{sv}}" direction="in">
+ <tp:docstring>
+ Connection settings and properties.
+ </tp:docstring>
+ </arg>
+ <arg name="path" type="o" direction="out">
+ <tp:docstring>
+ Object path of the new connection that was just added.
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <method name="LoadConnections">
+ <tp:docstring>
+ Loads or reloads the indicated connections from disk. You
+ should call this after making changes directly to an on-disk
+ connection file to make sure that NetworkManager sees the
+ changes. (If "monitor-connection-files" in NetworkManager.conf
+ is "true", then this will have no real effect, but is
+ harmless.) As with AddConnection(), this operation does not
+ necessarily start the network connection.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_load_connections"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="filenames" type="as" direction="in">
+ <tp:docstring>
+ Array of paths to on-disk connection profiles in directories
+ monitored by NetworkManager.
+ </tp:docstring>
+ </arg>
+ <arg name="status" type="b" direction="out">
+ <tp:docstring>
+ Success or failure of the operation as a whole. True if
+ NetworkManager at least tried to load the indicated
+ connections, even if it did not succeed. False if an error
+ occurred before trying to load the connections (eg,
+ permission denied).
+ </tp:docstring>
+ </arg>
+ <arg name="failures" type="as" direction="out">
+ <tp:docstring>
+ Paths of connection files that could not be loaded.
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <method name="ReloadConnections">
+ <tp:docstring>
+ Tells NetworkManager to reload all connection files from disk,
+ including noticing any added or deleted connection files. By
+ default, connections are re-read automatically any time they
+ change, so you only need to use this command if you have set
+ "monitor-connection-files=false" in NetworkManager.conf.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_reload_connections"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="status" type="b" direction="out">
+ <tp:docstring>
+ Success or failure.
+ </tp:docstring>
+ </arg>
+ </method>
+
<method name="SaveHostname">
<tp:docstring>
Save the hostname to persistent configuration.
@@ -69,6 +147,12 @@
</arg>
</method>
+ <property name="Connections" type="ao" access="read">
+ <tp:docstring>
+ List of object paths of available network connection profiles.
+ </tp:docstring>
+ </property>
+
<property name="Hostname" type="s" access="read">
<tp:docstring>
The machine hostname stored in persistent configuration.
@@ -107,6 +191,21 @@
</arg>
</signal>
+ <signal name="ConnectionRemoved">
+ <tp:docstring>
+ Emitted when a connection is no longer available. This happens when
+ the connection is deleted or if it is no longer accessible by any of
+ the system's logged-in users. After receipt of this signal, the
+ connection no longer exists and cannot be used. Also see the
+ Settings.Connection.Removed signal.
+ </tp:docstring>
+ <arg name="connection" type="o">
+ <tp:docstring>
+ Object path of the removed connection.
+ </tp:docstring>
+ </arg>
+ </signal>
+
</interface>
</node>
diff --git a/introspection/nm-vpn-plugin.xml b/introspection/nm-vpn-plugin.xml
index 5fb11622a..07397c2b9 100644
--- a/introspection/nm-vpn-plugin.xml
+++ b/introspection/nm-vpn-plugin.xml
@@ -5,9 +5,11 @@
<tp:docstring>
This interface is provided by plugins providing VPN services to the NetworkManager daemon.
</tp:docstring>
+
<method name="Connect">
<tp:docstring>
- Tells the plugin to connect.
+ Tells the plugin to connect. Interactive secrets requests (eg, emitting
+ the SecretsRequired signal) are not allowed.
</tp:docstring>
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_connect"/>
<arg name="connection" type="a{sa{sv}}" direction="in" tp:type="String_String_Variant_Map_Map">
@@ -21,6 +23,36 @@
<tp:error name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"/>
<tp:error name="org.freedesktop.NetworkManager.VPN.Error.BadArguments"/>
<tp:error name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.WrongState"/>
+ </tp:possible-errors>
+ </method>
+
+ <method name="ConnectInteractive">
+ <tp:docstring>
+ Tells the plugin to connect, allowing interactive secrets requests (eg
+ the plugin is allowed to emit the SecretsRequired signal if the VPN
+ service indicates that it needs additional secrets during the connect
+ process).
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_connect_interactive"/>
+ <arg name="connection" type="a{sa{sv}}" direction="in" tp:type="String_String_Variant_Map_Map">
+ <tp:docstring>
+ Describes the connection to be established.
+ </tp:docstring>
+ </arg>
+ <arg name="details" type="a{sv}" direction="in" tp:type="String_Variant_Map">
+ <tp:docstring>
+ Additional details about the Connect process.
+ </tp:docstring>
+ </arg>
+ <tp:possible-errors>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.BadArguments"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.WrongState"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported"/>
</tp:possible-errors>
</method>
@@ -122,6 +154,48 @@
</arg>
</signal>
+ <signal name="SecretsRequired">
+ <tp:docstring>
+ Emitted during an ongoing ConnectInteractive() request when the plugin
+ has determined that new secrets are required. NetworkManager will then
+ call the NewSecrets() method with a connection hash including the new
+ secrets.
+ </tp:docstring>
+ <arg name="message" type="s" direction="out">
+ <tp:docstring>
+ Informational message, if any, about the request. For example, if
+ a second PIN is required, could indicate to the user to wait for
+ the token code to change until entering the next PIN.
+ </tp:docstring>
+ </arg>
+ <arg name="secrets" type="as" direction="out">
+ <tp:docstring>
+ Array of strings of VPN secret names which the plugin thinks
+ secrets may be required for, or other VPN-specific data to be
+ processed by the VPN's front-end.
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ <method name="NewSecrets">
+ <tp:docstring>
+ Called in response to a SecretsRequired signal to deliver updated secrets
+ or other information to the plugin.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_new_secrets"/>
+ <arg name="connection" type="a{sa{sv}}" direction="in" tp:type="String_String_Variant_Map_Map">
+ <tp:docstring>
+ Describes the connection including the new secrets.
+ </tp:docstring>
+ </arg>
+ <tp:possible-errors>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.WrongState"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.BadArguments"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"/>
+ <tp:error name="org.freedesktop.NetworkManager.VPN.Error.InteractiveNotSupported"/>
+ </tp:possible-errors>
+ </method>
+
<signal name="Config">
<tp:docstring>
The plugin obtained generic configuration information.
diff --git a/introspection/vpn-errors.xml b/introspection/vpn-errors.xml
index 0dba7e6fb..7b92d0736 100644
--- a/introspection/vpn-errors.xml
+++ b/introspection/vpn-errors.xml
@@ -2,31 +2,59 @@
<tp:errors xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
namespace="org.freedesktop.NetworkManager.VPN.Error">
<tp:error name="General">
- <tp:docstring>This is a drab, nondescript error.</tp:docstring>
+ <tp:docstring>General failure without further details.</tp:docstring>
</tp:error>
<tp:error name="StartingInProgress">
- <tp:docstring>The request could not be processed because the VPN connection is already being started.</tp:docstring>
+ <tp:docstring>
+ The plugin is already starting, and another connect request was received.
+ </tp:docstring>
</tp:error>
<tp:error name="AlreadyStarted">
- <tp:docstring>The request could not be processed because a VPN connection was already active.</tp:docstring>
+ <tp:docstring>
+ The plugin is already connected, and another connect request was received.
+ </tp:docstring>
</tp:error>
<tp:error name="StoppingInProgress">
- <tp:docstring>The request could not be processed because the VPN connection is already being stopped.</tp:docstring>
+ <tp:docstring>
+ The plugin is already stopping, and another stop request was received.
+ </tp:docstring>
</tp:error>
<tp:error name="AlreadyStopped">
- <tp:docstring>The request could not be processed because the VPN connection was already stopped.</tp:docstring>
+ <tp:docstring>
+ The plugin is already stopped, and another disconnect request was received.
+ </tp:docstring>
</tp:error>
<tp:error name="WrongState">
- <tp:docstring>The request could not be processed because the VPN connection is in the wrong state for this type of request. FIXME: too general?</tp:docstring>
+ <tp:docstring>
+ The request could not be processed because the VPN plugin is in the wrong
+ state for this type of request.
+ </tp:docstring>
</tp:error>
<tp:error name="BadArguments">
- <tp:docstring>Invalid arguments were passed with the request. FIXME: too general.</tp:docstring>
+ <tp:docstring>
+ The request could not be processed because it contained malformed
+ arguments, or arguments of unexpected type. It usually means that one of
+ the VPN setting data items or secrets was not of the expected type (i.e.
+ int, string, bool, etc).
+ </tp:docstring>
</tp:error>
<tp:error name="LaunchFailed">
- <tp:docstring>A binary providing the service failed to launch.</tp:docstring>
+ <tp:docstring>
+ A binary providing the service failed to launch.
+ </tp:docstring>
</tp:error>
<tp:error name="ConnectionInvalid">
- <tp:docstring>The request could not be processed because the VPN connection settings were invalid.</tp:docstring>
+ <tp:docstring>
+ The request could not be processed because the connection was invalid. It
+ usually means that the connection's VPN setting was missing some required
+ data item or secret.
+ </tp:docstring>
+ </tp:error>
+ <tp:error name="InteractiveNotSupported">
+ <tp:docstring>
+ The request could not be processed because the plugin does not support
+ interactive operations, such as ConnectInteractive() or NewSecrets().
+ </tp:docstring>
</tp:error>
</tp:errors>
diff --git a/libgsystem/COPYING b/libgsystem/COPYING
new file mode 100644
index 000000000..5bc8fb2c8
--- /dev/null
+++ b/libgsystem/COPYING
@@ -0,0 +1,481 @@
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/libgsystem/Makefile-libgsystem.am b/libgsystem/Makefile-libgsystem.am
new file mode 100644
index 000000000..092522c73
--- /dev/null
+++ b/libgsystem/Makefile-libgsystem.am
@@ -0,0 +1,42 @@
+# Copyright (C) 2012 Colin Walters <walters@verbum.org>
+#
+# 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., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+EXTRA_DIST += $(libgsystem_srcpath)/README $(libgsystem_srcpath)/COPYING
+
+libgsystem_la_SOURCES = \
+ $(libgsystem_srcpath)/gsystem-local-alloc.h \
+ $(libgsystem_srcpath)/gsystem-local-alloc.c \
+ $(libgsystem_srcpath)/gsystem-console.h \
+ $(libgsystem_srcpath)/gsystem-console.c \
+ $(libgsystem_srcpath)/gsystem-file-utils.h \
+ $(libgsystem_srcpath)/gsystem-file-utils.c \
+ $(libgsystem_srcpath)/gsystem-glib-compat.h \
+ $(libgsystem_srcpath)/gsystem-shutil.h \
+ $(libgsystem_srcpath)/gsystem-shutil.c \
+ $(libgsystem_srcpath)/gsystem-log.h \
+ $(libgsystem_srcpath)/gsystem-log.c \
+ $(libgsystem_srcpath)/gsystem-subprocess-context.h \
+ $(libgsystem_srcpath)/gsystem-subprocess-context-private.h \
+ $(libgsystem_srcpath)/gsystem-subprocess-context.c \
+ $(libgsystem_srcpath)/gsystem-subprocess.h \
+ $(libgsystem_srcpath)/gsystem-subprocess.c \
+ $(libgsystem_srcpath)/libgsystem.h \
+ $(NULL)
+
+libgsystem_la_CFLAGS = $(AM_CFLAGS) $(libgsystem_cflags)
+libgsystem_la_LDFLAGS = -avoid-version -Bsymbolic-functions -export-symbols-regex "^gs_" -no-undefined -export-dynamic
+libgsystem_la_LIBADD = $(libgsystem_libs)
diff --git a/libgsystem/README b/libgsystem/README
new file mode 100644
index 000000000..13fa05f29
--- /dev/null
+++ b/libgsystem/README
@@ -0,0 +1,10 @@
+libgsystem is intended to be used as a git external for components
+that depend on GLib, but accept a hard dependency on things which are
+difficult to do in GLib itself. For example, the local-alloc API
+depends on GCC/clang.
+
+It will also be a useful place to evolve new APIs (e.g. logging)
+before their eventual inclusion in GLib (if ever).
+
+There's no bugzilla component currently, please mail
+patches to: walters@verbum.org
diff --git a/libgsystem/gsystem-console.c b/libgsystem/gsystem-console.c
new file mode 100644
index 000000000..35477ebaf
--- /dev/null
+++ b/libgsystem/gsystem-console.c
@@ -0,0 +1,443 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2013 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#define _GSYSTEM_NO_LOCAL_ALLOC
+#include "libgsystem.h"
+
+/**
+ * SECTION:gsconsole
+ * @title: GSConsole
+ * @short_description: Interact with standard input/output as well as terminal
+ *
+ * First, this class offers API to access the standard input and
+ * output/error, streams as #GInputStream and #GOutputStream
+ * respectively.
+ *
+ * In the case where the process is connected to a controlling
+ * terminal, the gs_console_get() API is available, which exposes a
+ * number of additional features such as no-echo password reading.
+ *
+ * Since: 2.36
+ */
+
+#include "config.h"
+
+#include "gsystem-console.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#include <gio/gunixoutputstream.h>
+#include <gio/gfiledescriptorbased.h>
+#include <gio/gunixinputstream.h>
+#include <glib-unix.h>
+#include <unistd.h>
+#include <termios.h>
+#endif
+#include <fcntl.h>
+
+typedef GObjectClass GSConsoleClass;
+
+struct _GSConsole
+{
+ GObject parent;
+
+ gboolean in_status_line;
+ gssize last_line_written;
+};
+
+G_DEFINE_TYPE (GSConsole, gs_console, G_TYPE_OBJECT);
+
+static void
+gs_console_init (GSConsole *self)
+{
+ self->last_line_written = -1;
+}
+
+static void
+gs_console_class_init (GSConsoleClass *class)
+{
+}
+
+/**
+ * gs_console_get:
+ *
+ * If the current process has an interactive console, return the
+ * singleton #GSConsole instance. On Unix, this is equivalent to
+ * isatty(). For all other cases, such as pipes, sockets, /dev/null,
+ * this function will return %NULL.
+ *
+ * Returns: (transfer none): The console instance, or %NULL if not interactive
+ *
+ * Since: 2.36
+ */
+GSConsole *
+gs_console_get (void)
+{
+ static gsize checked = 0;
+ static GSConsole *instance = NULL;
+
+ if (g_once_init_enter (&checked))
+ {
+#ifdef G_OS_UNIX
+ if (isatty (0) && isatty (1))
+ instance = g_object_new (GS_TYPE_CONSOLE, NULL);
+#endif
+ g_once_init_leave (&checked, 1);
+ }
+
+ return (GSConsole*) instance;
+}
+
+/**
+ * gs_console_get_stdin:
+ *
+ * Returns: (transfer none): The singleton stream connected to standard input
+ */
+GInputStream *
+gs_console_get_stdin (void)
+{
+#ifdef G_OS_UNIX
+ static gsize instance = 0;
+
+ if (g_once_init_enter (&instance))
+ g_once_init_leave (&instance, (gsize) g_unix_input_stream_new (0, FALSE));
+
+ return (GInputStream*) instance;
+#else
+ g_error ("not implemented");
+#endif
+}
+
+/**
+ * gs_console_get_stdout:
+ *
+ * Returns: (transfer none): The singleton stream connected to standard output
+ */
+GOutputStream *
+gs_console_get_stdout (void)
+{
+#ifdef G_OS_UNIX
+ static gsize instance = 0;
+
+ if (g_once_init_enter (&instance))
+ g_once_init_leave (&instance, (gsize) g_unix_output_stream_new (1, FALSE));
+
+ return (GOutputStream*) instance;
+#else
+ g_error ("not implemented");
+#endif
+}
+
+/**
+ * gs_console_get_stderr:
+ *
+ * Returns: (transfer none): The singleton stream connected to standard error
+ */
+GOutputStream *
+gs_console_get_stderr (void)
+{
+#ifdef G_OS_UNIX
+ static gsize instance = 0;
+
+ if (g_once_init_enter (&instance))
+ g_once_init_leave (&instance, (gsize) g_unix_output_stream_new (2, FALSE));
+
+ return (GOutputStream*) instance;
+#else
+ g_error ("not implemented");
+#endif
+}
+
+#ifdef G_OS_UNIX
+static inline void
+_set_error_from_errno (GError **error)
+{
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+}
+#endif
+
+/**
+ * gs_console_read_password:
+ * @console: the #GSConsole
+ * @prompt: A string to output before reading the password
+ * @error: a #GError
+ *
+ * Write @prompt to standard output, then switch output echo off, read
+ * a result string, then switch output echo back on.
+ *
+ * Returns: A string, or %NULL on error
+ */
+char *
+gs_console_read_password (GSConsole *console,
+ const char *prompt,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef G_OS_UNIX
+ gboolean ret = FALSE;
+ /* This code is modified from that found in
+ * polkit/src/polkittextagentlistener.c, reused under the LGPL v2.1
+ */
+ int res;
+ struct termios ts, ots;
+ GInputStream *in;
+ GOutputStream *out;
+ GString *str = NULL;
+ gsize bytes_written;
+ gboolean reset_terminal = FALSE;
+
+ in = gs_console_get_stdin ();
+ out = gs_console_get_stdout ();
+
+ if (!g_output_stream_write_all (out, prompt, strlen (prompt), &bytes_written,
+ cancellable, error))
+ goto out;
+ if (!g_output_stream_flush (out, cancellable, error))
+ goto out;
+
+ /* TODO: We really ought to block SIGINT and STGSTP (and probably
+ * other signals too) so we can restore the terminal (since we
+ * turn off echoing). See e.g. Advanced Programming in the
+ * UNIX Environment 2nd edition (Steves and Rago) section
+ * 18.10, pg 660 where this is suggested. See also various
+ * getpass(3) implementations
+ *
+ * However, since we are a library routine the user could have
+ * multiple threads - in fact, typical usage of
+ * PolkitAgentTextListener is to run it in a thread. And
+ * unfortunately threads and POSIX signals is a royal PITA.
+ *
+ * Maybe we could fork(2) and ask for the password in the
+ * child and send it back to the parent over a pipe? (we are
+ * guaranteed that there is only one thread in the child
+ * process).
+ *
+ * (Side benefit of doing this in a child process is that we
+ * could avoid blocking the thread where the
+ * PolkitAgentTextListener object is being serviced from. But
+ * since this class is normally used in a dedicated thread
+ * it doesn't really matter *anyway*.)
+ *
+ * Anyway, On modern Linux not doing this doesn't seem to be a
+ * problem - looks like modern shells restore echoing anyway
+ * on the first input. So maybe it's not even worth solving
+ * the problem.
+ */
+
+ do
+ res = tcgetattr (1, &ts);
+ while (G_UNLIKELY (res == -1 && errno == EINTR));
+ if (res == -1)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+ ots = ts;
+ ts.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
+ do
+ res = tcsetattr (1, TCSAFLUSH, &ts);
+ while (G_UNLIKELY (res == -1 && errno == EINTR));
+ if (res == -1)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ /* After this point, we'll need to clean up the terminal in case of
+ * error.
+ */
+ reset_terminal = TRUE;
+
+ str = g_string_new (NULL);
+ while (TRUE)
+ {
+ gssize bytes_read;
+ guint8 buf[1];
+
+ /* FIXME - we should probably be converting from the system
+ * codeset, in case it's not UTF-8.
+ */
+ bytes_read = g_input_stream_read (in, buf, sizeof (buf),
+ cancellable, error);
+ if (bytes_read < 0)
+ goto out;
+ else if (bytes_read == 0)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+ "End of stream while reading password");
+ goto out;
+ }
+ else if (buf[0] == '\n')
+ {
+ break;
+ }
+ else
+ {
+ g_string_append_c (str, buf[0]);
+ }
+ }
+
+ ret = TRUE;
+ out:
+ if (reset_terminal)
+ {
+ do
+ res = tcsetattr (1, TCSAFLUSH, &ots);
+ while (G_UNLIKELY (res == -1 && errno == EINTR));
+ if (res == -1)
+ {
+ _set_error_from_errno (error);
+ g_string_free (str, TRUE);
+ return NULL;
+ }
+ }
+
+ if (!ret)
+ {
+ g_string_free (str, TRUE);
+ return NULL;
+ }
+ else
+ {
+ return g_string_free (str, FALSE);
+ }
+#else
+ g_error ("not implemented");
+#endif
+}
+
+/**
+ * gs_console_begin_status_line:
+ * @console: the #GSConsole
+ * @line: String to output
+ *
+ * The primary use case for this function is to output periodic
+ * "status" or "progress" information. The first time this function
+ * is called, @line will be output normally. Subsequent invocations
+ * will overwrite the previous.
+ *
+ * You must invoke gs_console_end_status_line() to return the console
+ * to normal mode. In particular, concurrent use of this function and
+ * the stream returned by gs_console_get_stdout() results in undefined
+ * behavior.
+ */
+gboolean
+gs_console_begin_status_line (GSConsole *console,
+ const char *line,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef G_OS_UNIX
+ gboolean ret = FALSE;
+ gsize linelen;
+ GOutputStream *out;
+ gsize bytes_written;
+
+ out = gs_console_get_stdout ();
+
+ if (!console->in_status_line)
+ {
+ guint8 buf[3] = { (guint8)'\n', 0x1B, 0x37 };
+ if (!g_output_stream_write_all (out, buf, sizeof (buf), &bytes_written,
+ cancellable, error))
+ goto out;
+ console->in_status_line = TRUE;
+ console->last_line_written = -1;
+ }
+
+ {
+ guint8 buf[2] = { 0x1B, 0x38 };
+ if (!g_output_stream_write_all (out, buf, sizeof (buf), &bytes_written,
+ cancellable, error))
+ goto out;
+ }
+
+ linelen = strlen (line);
+ if (!g_output_stream_write_all (out, line, linelen, &bytes_written,
+ cancellable, error))
+ goto out;
+
+ /* Now we need to pad with spaces enough to overwrite our last line
+ */
+ if (console->last_line_written >= 0
+ && linelen < (gsize) console->last_line_written)
+ {
+ gsize towrite = console->last_line_written - linelen;
+ const char c = ' ';
+ while (towrite > 0)
+ {
+ if (!g_output_stream_write_all (out, &c, 1, &bytes_written,
+ cancellable, error))
+ goto out;
+ towrite--;
+ }
+ }
+
+ console->last_line_written = linelen;
+
+ ret = TRUE;
+ out:
+ return ret;
+#else
+ g_error ("not implemented");
+#endif
+}
+
+/**
+ * gs_console_end_status_line:
+ * @console: the #GSConsole
+ *
+ * Complete a series of invocations of gs_console_begin_status_line(),
+ * returning the stream to normal mode. The last printed status line
+ * remains on the console; if this is not desired, print an empty
+ * string to clear it before invoking this function.
+ */
+gboolean
+gs_console_end_status_line (GSConsole *console,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef G_OS_UNIX
+ gboolean ret = FALSE;
+ GOutputStream *out;
+ gsize bytes_written;
+ char c = '\n';
+
+ g_return_val_if_fail (console->in_status_line, FALSE);
+
+ out = gs_console_get_stdout ();
+
+ if (!g_output_stream_write_all (out, &c, 1, &bytes_written,
+ cancellable, error))
+ goto out;
+
+ console->in_status_line = FALSE;
+
+ ret = TRUE;
+ out:
+ return ret;
+#else
+ g_error ("not implemented");
+#endif
+}
diff --git a/libgsystem/gsystem-console.h b/libgsystem/gsystem-console.h
new file mode 100644
index 000000000..a22b2d45a
--- /dev/null
+++ b/libgsystem/gsystem-console.h
@@ -0,0 +1,59 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2013 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GSYSTEM_CONSOLE_H__
+#define __GSYSTEM_CONSOLE_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_CONSOLE (gs_console_get_type ())
+#define GS_CONSOLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_CONSOLE, GSConsole))
+#define GS_IS_CONSOLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_CONSOLE))
+
+typedef struct _GSConsole GSConsole;
+
+GType gs_console_get_type (void) G_GNUC_CONST;
+
+GInputStream * gs_console_get_stdin (void);
+GOutputStream * gs_console_get_stdout (void);
+GOutputStream * gs_console_get_stderr (void);
+
+GSConsole * gs_console_get (void);
+
+char * gs_console_read_password (GSConsole *console,
+ const char *prompt,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_console_begin_status_line (GSConsole *console,
+ const char *line,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_console_end_status_line (GSConsole *console,
+ GCancellable *cancellable,
+ GError **error);
+
+
+G_END_DECLS
+
+#endif
diff --git a/libgsystem/gsystem-file-utils.c b/libgsystem/gsystem-file-utils.c
new file mode 100644
index 000000000..026060353
--- /dev/null
+++ b/libgsystem/gsystem-file-utils.c
@@ -0,0 +1,1644 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 William Jon McCann <mccann@redhat.com>
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <string.h>
+
+#define _GSYSTEM_NO_LOCAL_ALLOC
+#include "libgsystem.h"
+#include "gsystem-glib-compat.h"
+#include <glib/gstdio.h>
+#include <gio/gunixinputstream.h>
+#include <gio/gfiledescriptorbased.h>
+#include <gio/gunixoutputstream.h>
+#include <glib-unix.h>
+#include <limits.h>
+#include <dirent.h>
+#ifdef GSYSTEM_CONFIG_XATTRS
+#include <attr/xattr.h>
+#endif
+
+static int
+close_nointr (int fd)
+{
+ int res;
+ /* Note this is NOT actually a retry loop.
+ * See: https://bugzilla.gnome.org/show_bug.cgi?id=682819
+ */
+ res = close (fd);
+ /* Just ignore EINTR...on Linux, retrying is wrong. */
+ if (res == EINTR)
+ res = 0;
+ return res;
+}
+
+static void
+close_nointr_noerror (int fd)
+{
+ (void) close_nointr (fd);
+}
+
+static int
+open_nointr (const char *path, int flags, mode_t mode)
+{
+ int res;
+ do
+ res = open (path, flags, mode);
+ while (G_UNLIKELY (res == -1 && errno == EINTR));
+ return res;
+}
+
+static inline void
+_set_error_from_errno (GError **error)
+{
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+}
+
+/**
+ * gs_file_openat_noatime:
+ * @dfd: File descriptor for directory
+ * @name: Pathname, relative to @dfd
+ * @ret_fd: (out): Returned file descriptor
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * Wrapper for openat() using %O_RDONLY with %O_NOATIME if available.
+ */
+gboolean
+gs_file_openat_noatime (int dfd,
+ const char *name,
+ int *ret_fd,
+ GCancellable *cancellable,
+ GError **error)
+{
+ int fd;
+
+#ifdef O_NOATIME
+ do
+ fd = openat (dfd, name, O_RDONLY | O_NOATIME, 0);
+ while (G_UNLIKELY (fd == -1 && errno == EINTR));
+ /* Only the owner or superuser may use O_NOATIME; so we may get
+ * EPERM. EINVAL may happen if the kernel is really old...
+ */
+ if (fd == -1 && (errno == EPERM || errno == EINVAL))
+#endif
+ do
+ fd = openat (dfd, name, O_RDONLY, 0);
+ while (G_UNLIKELY (fd == -1 && errno == EINTR));
+
+ if (fd == -1)
+ {
+ _set_error_from_errno (error);
+ return FALSE;
+ }
+ else
+ {
+ *ret_fd = fd;
+ return TRUE;
+ }
+}
+
+/**
+ * gs_file_read_noatime:
+ * @file: a #GFile
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Like g_file_read(), but try to avoid updating the file's
+ * access time. This should be used by background scanning
+ * components such as search indexers, antivirus programs, etc.
+ *
+ * Returns: (transfer full): A new input stream, or %NULL on error
+ */
+GInputStream *
+gs_file_read_noatime (GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const char *path = NULL;
+ int fd;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return NULL;
+
+ path = gs_file_get_path_cached (file);
+ if (path == NULL)
+ {
+ char *uri;
+ uri = g_file_get_uri (file);
+ g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT,
+ "%s has no associated path", uri);
+ g_free (uri);
+ return NULL;
+ }
+
+ if (!gs_file_openat_noatime (AT_FDCWD, path, &fd, cancellable, error))
+ return NULL;
+
+ return g_unix_input_stream_new (fd, TRUE);
+}
+
+/**
+ * gs_stream_fstat:
+ * @stream: A stream containing a Unix file descriptor
+ * @stbuf: Memory location to write stat buffer
+ * @cancellable:
+ * @error:
+ *
+ * Some streams created via libgsystem are #GUnixInputStream; these do
+ * not support e.g. g_file_input_stream_query_info(). This function
+ * allows dropping to the raw unix fstat() call for these types of
+ * streams, while still conveniently wrapped with the normal GLib
+ * handling of @cancellable and @error.
+ */
+gboolean
+gs_stream_fstat (GFileDescriptorBased *stream,
+ struct stat *stbuf,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int fd;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ goto out;
+
+ fd = g_file_descriptor_based_get_fd (stream);
+
+ if (fstat (fd, stbuf) == -1)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
+/**
+ * gs_file_map_noatime: (skip)
+ * @file: a #GFile
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Like g_mapped_file_new(), but try to avoid updating the file's
+ * access time. This should be used by background scanning
+ * components such as search indexers, antivirus programs, etc.
+ *
+ * Returns: (transfer full): A new mapped file, or %NULL on error
+ */
+GMappedFile *
+gs_file_map_noatime (GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const char *path;
+ int fd;
+ GMappedFile *ret;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return NULL;
+
+ path = gs_file_get_path_cached (file);
+ if (path == NULL)
+ return NULL;
+
+ if (!gs_file_openat_noatime (AT_FDCWD, path, &fd, cancellable, error))
+ return NULL;
+
+ ret = g_mapped_file_new_from_fd (fd, FALSE, error);
+ close_nointr_noerror (fd); /* Ignore errors - we always want to close */
+
+ return ret;
+}
+
+#if GLIB_CHECK_VERSION(2,34,0)
+/**
+ * gs_file_map_readonly:
+ * @file: a #GFile
+ * @cancellable:
+ * @error:
+ *
+ * Return a #GBytes which references a readonly view of the contents of
+ * @file. This function uses #GMappedFile internally.
+ *
+ * Returns: (transfer full): a newly referenced #GBytes
+ */
+GBytes *
+gs_file_map_readonly (GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GMappedFile *mfile;
+ GBytes *ret;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return NULL;
+
+ mfile = g_mapped_file_new (gs_file_get_path_cached (file), FALSE, error);
+ if (!mfile)
+ return NULL;
+
+ ret = g_mapped_file_get_bytes (mfile);
+ g_mapped_file_unref (mfile);
+ return ret;
+}
+#endif
+
+/**
+ * gs_file_sync_data:
+ * @file: a #GFile
+ * @cancellable:
+ * @error:
+ *
+ * Wraps the UNIX fsync() function (or fdatasync(), if available), which
+ * ensures that the data in @file is on non-volatile storage.
+ */
+gboolean
+gs_file_sync_data (GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int res;
+ int fd = -1;
+
+ if (!gs_file_openat_noatime (AT_FDCWD, gs_file_get_path_cached (file), &fd,
+ cancellable, error))
+ goto out;
+
+ do
+ {
+#ifdef __linux
+ res = fdatasync (fd);
+#else
+ res = fsync (fd);
+#endif
+ }
+ while (G_UNLIKELY (res != 0 && errno == EINTR));
+ if (res != 0)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ res = close_nointr (fd);
+ if (res != 0)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+ fd = -1;
+
+ ret = TRUE;
+ out:
+ if (fd != -1)
+ close_nointr_noerror (fd);
+ return ret;
+}
+
+/**
+ * gs_file_create:
+ * @file: Path to non-existent file
+ * @mode: Unix access permissions
+ * @out_stream: (out) (transfer full) (allow-none): Newly created output, or %NULL
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Like g_file_create(), except this function allows specifying the
+ * access mode. This allows atomically creating private files.
+ */
+gboolean
+gs_file_create (GFile *file,
+ int mode,
+ GOutputStream **out_stream,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int fd;
+ GOutputStream *ret_stream = NULL;
+
+ fd = open_nointr (gs_file_get_path_cached (file), O_WRONLY | O_CREAT | O_EXCL, mode);
+ if (fd < 0)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ if (fchmod (fd, mode) < 0)
+ {
+ close (fd);
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ ret_stream = g_unix_output_stream_new (fd, TRUE);
+
+ ret = TRUE;
+ gs_transfer_out_value (out_stream, &ret_stream);
+ out:
+ g_clear_object (&ret_stream);
+ return ret;
+}
+
+static const char *
+get_default_tmp_prefix (void)
+{
+ static char *tmpprefix = NULL;
+
+ if (g_once_init_enter (&tmpprefix))
+ {
+ const char *prgname = g_get_prgname ();
+ const char *p;
+ char *prefix;
+ char *iter;
+
+ if (prgname)
+ {
+ p = strrchr (prgname, '/');
+ if (p)
+ prgname = p + 1;
+ }
+ else
+ prgname = "";
+
+ prefix = g_strdup_printf ("tmp-%s%u-", prgname, getuid ());
+ for (iter = prefix; *iter; iter++)
+ {
+ char c = *iter;
+ if (c == ' ')
+ *iter = '_';
+ }
+
+ g_once_init_leave (&tmpprefix, prefix);
+ }
+
+ return tmpprefix;
+}
+
+/**
+ * gs_fileutil_gen_tmp_name:
+ * @prefix: (allow-none): String prepended to the result
+ * @suffix: (allow-none): String suffixed to the result
+ *
+ * Generate a name suitable for use as a temporary file. This
+ * function does no I/O; it is not guaranteed that a file with that
+ * name does not exist.
+ */
+char *
+gs_fileutil_gen_tmp_name (const char *prefix,
+ const char *suffix)
+{
+ static const char table[] = "ABCEDEFGHIJKLMNOPQRSTUVWXYZabcedefghijklmnopqrstuvwxyz0123456789";
+ GString *str = g_string_new ("");
+ guint i;
+
+ if (!prefix)
+ prefix = get_default_tmp_prefix ();
+ if (!suffix)
+ suffix = "tmp";
+
+ g_string_append (str, prefix);
+ for (i = 0; i < 8; i++)
+ {
+ int offset = g_random_int_range (0, sizeof (table) - 1);
+ g_string_append_c (str, (guint8)table[offset]);
+ }
+ g_string_append_c (str, '.');
+ g_string_append (str, suffix);
+
+ return g_string_free (str, FALSE);
+}
+
+/**
+ * gs_file_open_dir_fd:
+ * @path: Directory name
+ * @out_fd: (out): File descriptor for directory
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * On success, sets @out_fd to a file descriptor for the directory
+ * that can be used with UNIX functions such as openat().
+ */
+gboolean
+gs_file_open_dir_fd (GFile *path,
+ int *out_fd,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* Linux specific probably */
+ *out_fd = open (gs_file_get_path_cached (path), O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC);
+ if (*out_fd == -1)
+ {
+ _set_error_from_errno (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * gs_file_open_in_tmpdir_at:
+ * @tmpdir_fd: Directory to place temporary file
+ * @mode: Default mode (will be affected by umask)
+ * @out_name: (out) (transfer full): Newly created file name
+ * @out_stream: (out) (transfer full) (allow-none): Newly created output stream
+ * @cancellable:
+ * @error:
+ *
+ * Like g_file_open_tmp(), except the file will be created in the
+ * provided @tmpdir, and allows specification of the Unix @mode, which
+ * means private files may be created. Return values will be stored
+ * in @out_name, and optionally @out_stream.
+ */
+gboolean
+gs_file_open_in_tmpdir_at (int tmpdir_fd,
+ int mode,
+ char **out_name,
+ GOutputStream **out_stream,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ const int max_attempts = 128;
+ int i;
+ char *tmp_name = NULL;
+ int fd;
+
+ /* 128 attempts seems reasonable... */
+ for (i = 0; i < max_attempts; i++)
+ {
+ g_free (tmp_name);
+ tmp_name = gs_fileutil_gen_tmp_name (NULL, NULL);
+
+ do
+ fd = openat (tmpdir_fd, tmp_name, O_WRONLY | O_CREAT | O_EXCL, mode);
+ while (fd == -1 && errno == EINTR);
+ if (fd < 0 && errno != EEXIST)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+ else if (fd != -1)
+ break;
+ }
+ if (i == max_attempts)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Exhausted attempts to open temporary file");
+ goto out;
+ }
+
+ ret = TRUE;
+ gs_transfer_out_value (out_name, &tmp_name);
+ if (out_stream)
+ *out_stream = g_unix_output_stream_new (fd, TRUE);
+ else
+ (void) close (fd);
+ out:
+ g_free (tmp_name);
+ return ret;
+}
+
+/**
+ * gs_file_open_in_tmpdir:
+ * @tmpdir: Directory to place temporary file
+ * @mode: Default mode (will be affected by umask)
+ * @out_file: (out) (transfer full): Newly created file path
+ * @out_stream: (out) (transfer full) (allow-none): Newly created output stream
+ * @cancellable:
+ * @error:
+ *
+ * Like g_file_open_tmp(), except the file will be created in the
+ * provided @tmpdir, and allows specification of the Unix @mode, which
+ * means private files may be created. Return values will be stored
+ * in @out_file, and optionally @out_stream.
+ */
+gboolean
+gs_file_open_in_tmpdir (GFile *tmpdir,
+ int mode,
+ GFile **out_file,
+ GOutputStream **out_stream,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ DIR *d = NULL;
+ int dfd = -1;
+ char *tmp_name = NULL;
+ GOutputStream *ret_stream = NULL;
+
+ d = opendir (gs_file_get_path_cached (tmpdir));
+ if (!d)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+ dfd = dirfd (d);
+
+ if (!gs_file_open_in_tmpdir_at (dfd, mode, &tmp_name,
+ out_stream ? &ret_stream : NULL,
+ cancellable, error))
+ goto out;
+
+ ret = TRUE;
+ *out_file = g_file_get_child (tmpdir, tmp_name);
+ gs_transfer_out_value (out_stream, &ret_stream);
+ out:
+ if (d) (void) closedir (d);
+ g_clear_object (&ret_stream);
+ g_free (tmp_name);
+ return ret;
+}
+
+static gboolean
+linkcopy_internal_attempt (GFile *src,
+ GFile *dest,
+ GFile *dest_parent,
+ GFileCopyFlags flags,
+ gboolean sync_data,
+ gboolean enable_guestfs_fuse_workaround,
+ gboolean *out_try_again,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int res;
+ char *tmp_name = NULL;
+ GFile *tmp_dest = NULL;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ goto out;
+
+ tmp_name = gs_fileutil_gen_tmp_name (NULL, NULL);
+ tmp_dest = g_file_get_child (dest_parent, tmp_name);
+
+ res = link (gs_file_get_path_cached (src), gs_file_get_path_cached (tmp_dest));
+ if (res == -1)
+ {
+ if (errno == EEXIST)
+ {
+ /* Nothing, fall through */
+ *out_try_again = TRUE;
+ ret = TRUE;
+ goto out;
+ }
+ else if (errno == EXDEV || errno == EMLINK || errno == EPERM
+ || (enable_guestfs_fuse_workaround && errno == ENOENT))
+ {
+ if (!g_file_copy (src, tmp_dest, flags,
+ cancellable, NULL, NULL, error))
+ goto out;
+ }
+ else
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+ }
+
+ if (sync_data)
+ {
+ /* Now, we need to fsync */
+ if (!gs_file_sync_data (tmp_dest, cancellable, error))
+ goto out;
+ }
+
+ if (!gs_file_rename (tmp_dest, dest, cancellable, error))
+ goto out;
+
+ ret = TRUE;
+ *out_try_again = FALSE;
+ out:
+ g_clear_pointer (&tmp_name, g_free);
+ g_clear_object (&tmp_dest);
+ return ret;
+}
+
+static gboolean
+linkcopy_internal (GFile *src,
+ GFile *dest,
+ GFileCopyFlags flags,
+ gboolean sync_data,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ gboolean dest_exists;
+ int i;
+ gboolean enable_guestfs_fuse_workaround;
+ struct stat src_stat;
+ struct stat dest_stat;
+ GFile *dest_parent = NULL;
+
+ flags |= G_FILE_COPY_NOFOLLOW_SYMLINKS;
+
+ g_return_val_if_fail ((flags & (G_FILE_COPY_BACKUP | G_FILE_COPY_TARGET_DEFAULT_PERMS)) == 0, FALSE);
+
+ dest_parent = g_file_get_parent (dest);
+
+ if (lstat (gs_file_get_path_cached (src), &src_stat) == -1)
+ {
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errno),
+ g_strerror (errsv));
+ goto out;
+ }
+
+ if (lstat (gs_file_get_path_cached (dest), &dest_stat) == -1)
+ dest_exists = FALSE;
+ else
+ dest_exists = TRUE;
+
+ if (((flags & G_FILE_COPY_OVERWRITE) == 0) && dest_exists)
+ {
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_EXISTS,
+ "File exists");
+ goto out;
+ }
+
+ /* Work around the behavior of link() where it's a no-op if src and
+ * dest are the same.
+ */
+ if (dest_exists &&
+ src_stat.st_dev == dest_stat.st_dev &&
+ src_stat.st_ino == dest_stat.st_ino)
+ {
+ ret = TRUE;
+ goto out;
+ }
+
+ enable_guestfs_fuse_workaround = getenv ("LIBGSYSTEM_ENABLE_GUESTFS_FUSE_WORKAROUND") != NULL;
+
+ /* 128 attempts seems reasonable... */
+ for (i = 0; i < 128; i++)
+ {
+ gboolean tryagain = FALSE;
+
+ if (!linkcopy_internal_attempt (src, dest, dest_parent,
+ flags, sync_data,
+ enable_guestfs_fuse_workaround,
+ &tryagain,
+ cancellable, error))
+ goto out;
+
+ if (!tryagain)
+ break;
+ }
+
+ ret = TRUE;
+ out:
+ g_clear_object (&dest_parent);
+ return ret;
+
+}
+
+/**
+ * gs_file_linkcopy:
+ * @src: Source file
+ * @dest: Destination file
+ * @flags: flags
+ * @cancellable:
+ * @error:
+ *
+ * First tries to use the UNIX link() call, but if the files are on
+ * separate devices, fall back to copying via g_file_copy().
+ *
+ * The given @flags have different semantics than those documented
+ * when hardlinking is used. Specifically, both
+ * #G_FILE_COPY_TARGET_DEFAULT_PERMS and #G_FILE_COPY_BACKUP are not
+ * supported. #G_FILE_COPY_NOFOLLOW_SYMLINKS treated as if it was
+ * always given - if you want to follow symbolic links, you will need
+ * to resolve them manually.
+ *
+ * Beware - do not use this function if @src may be modified, and it's
+ * undesirable for the changes to also be reflected in @dest. The
+ * best use of this function is in the case where @src and @dest are
+ * read-only, or where @src is a temporary file, and you want to put
+ * it in the final place.
+ */
+gboolean
+gs_file_linkcopy (GFile *src,
+ GFile *dest,
+ GFileCopyFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return linkcopy_internal (src, dest, flags, FALSE, cancellable, error);
+}
+
+/**
+ * gs_file_linkcopy_sync_data:
+ * @src: Source file
+ * @dest: Destination file
+ * @flags: flags
+ * @cancellable:
+ * @error:
+ *
+ * This function is similar to gs_file_linkcopy(), except it also uses
+ * gs_file_sync_data() to ensure that @dest is in stable storage
+ * before it is moved into place.
+ */
+gboolean
+gs_file_linkcopy_sync_data (GFile *src,
+ GFile *dest,
+ GFileCopyFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return linkcopy_internal (src, dest, flags, TRUE, cancellable, error);
+}
+
+static char *
+gs_file_get_target_path (GFile *file)
+{
+ GFileInfo *info;
+ const char *target;
+ char *path;
+
+ info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NONE, NULL, NULL);
+ if (info == NULL)
+ return NULL;
+ target = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
+ path = g_filename_from_uri (target, NULL, NULL);
+ g_object_unref (info);
+
+ return path;
+}
+
+G_LOCK_DEFINE_STATIC (pathname_cache);
+
+/**
+ * gs_file_get_path_cached:
+ *
+ * Like g_file_get_path(), but returns a constant copy so callers
+ * don't need to free the result.
+ */
+const char *
+gs_file_get_path_cached (GFile *file)
+{
+ const char *path;
+ static GQuark _file_path_quark = 0;
+
+ if (G_UNLIKELY (_file_path_quark) == 0)
+ _file_path_quark = g_quark_from_static_string ("gsystem-file-path");
+
+ G_LOCK (pathname_cache);
+
+ path = g_object_get_qdata ((GObject*)file, _file_path_quark);
+ if (!path)
+ {
+ if (g_file_has_uri_scheme (file, "trash") ||
+ g_file_has_uri_scheme (file, "recent"))
+ path = gs_file_get_target_path (file);
+ else
+ path = g_file_get_path (file);
+ if (path == NULL)
+ {
+ G_UNLOCK (pathname_cache);
+ return NULL;
+ }
+ g_object_set_qdata_full ((GObject*)file, _file_path_quark, (char*)path, (GDestroyNotify)g_free);
+ }
+
+ G_UNLOCK (pathname_cache);
+
+ return path;
+}
+
+/**
+ * gs_file_get_basename_cached:
+ *
+ * Like g_file_get_basename(), but returns a constant copy so callers
+ * don't need to free the result.
+ */
+const char *
+gs_file_get_basename_cached (GFile *file)
+{
+ const char *name;
+ static GQuark _file_name_quark = 0;
+
+ if (G_UNLIKELY (_file_name_quark) == 0)
+ _file_name_quark = g_quark_from_static_string ("gsystem-file-name");
+
+ G_LOCK (pathname_cache);
+
+ name = g_object_get_qdata ((GObject*)file, _file_name_quark);
+ if (!name)
+ {
+ name = g_file_get_basename (file);
+ g_object_set_qdata_full ((GObject*)file, _file_name_quark, (char*)name, (GDestroyNotify)g_free);
+ }
+
+ G_UNLOCK (pathname_cache);
+
+ return name;
+}
+
+/**
+ * gs_file_enumerator_iterate:
+ * @direnum: an open #GFileEnumerator
+ * @out_info: (out) (transfer none) (allow-none): Output location for the next #GFileInfo
+ * @out_child: (out) (transfer none) (allow-none): Output location for the next #GFile, or %NULL
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * This is a version of g_file_enumerator_next_file() that's easier to
+ * use correctly from C programs. With g_file_enumerator_next_file(),
+ * the gboolean return value signifies "end of iteration or error", which
+ * requires allocation of a temporary #GError.
+ *
+ * In contrast, with this function, a %FALSE return from
+ * gs_file_enumerator_iterate() <emphasis>always</emphasis> means
+ * "error". End of iteration is signaled by @out_info being %NULL.
+ *
+ * Another crucial difference is that the references for @out_info and
+ * @out_child are owned by @direnum (they are cached as hidden
+ * properties). You must not unref them in your own code. This makes
+ * memory management significantly easier for C code in combination
+ * with loops.
+ *
+ * Finally, this function optionally allows retrieving a #GFile as
+ * well.
+ *
+ * The code pattern for correctly using gs_file_enumerator_iterate() from C
+ * is:
+ *
+ * |[
+ * direnum = g_file_enumerate_children (file, ...);
+ * while (TRUE)
+ * {
+ * GFileInfo *info;
+ * if (!gs_file_enumerator_iterate (direnum, &info, NULL, cancellable, error))
+ * goto out;
+ * if (!info)
+ * break;
+ * ... do stuff with "info"; do not unref it! ...
+ * }
+ *
+ * out:
+ * g_object_unref (direnum); // Note: frees the last @info
+ * ]|
+ */
+gboolean
+gs_file_enumerator_iterate (GFileEnumerator *direnum,
+ GFileInfo **out_info,
+ GFile **out_child,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GError *temp_error = NULL;
+
+ static GQuark cached_info_quark;
+ static GQuark cached_child_quark;
+ static gsize quarks_initialized;
+
+ g_return_val_if_fail (direnum != NULL, FALSE);
+ g_return_val_if_fail (out_info != NULL, FALSE);
+
+ if (g_once_init_enter (&quarks_initialized))
+ {
+ cached_info_quark = g_quark_from_static_string ("gsystem-cached-info");
+ cached_child_quark = g_quark_from_static_string ("gsystem-cached-child");
+ g_once_init_leave (&quarks_initialized, 1);
+ }
+
+
+ *out_info = g_file_enumerator_next_file (direnum, cancellable, &temp_error);
+ if (out_child)
+ *out_child = NULL;
+ if (temp_error != NULL)
+ {
+ g_propagate_error (error, temp_error);
+ goto out;
+ }
+ else if (*out_info != NULL)
+ {
+ g_object_set_qdata_full ((GObject*)direnum, cached_info_quark, *out_info, (GDestroyNotify)g_object_unref);
+ if (out_child != NULL)
+ {
+ const char *name = g_file_info_get_name (*out_info);
+ *out_child = g_file_get_child (g_file_enumerator_get_container (direnum), name);
+ g_object_set_qdata_full ((GObject*)direnum, cached_child_quark, *out_child, (GDestroyNotify)g_object_unref);
+ }
+ }
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
+/**
+ * gs_file_rename:
+ * @from: Current path
+ * @to: New path
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * This function wraps the raw Unix function rename().
+ *
+ * Returns: %TRUE on success, %FALSE on error
+ */
+gboolean
+gs_file_rename (GFile *from,
+ GFile *to,
+ GCancellable *cancellable,
+ GError **error)
+{
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ if (rename (gs_file_get_path_cached (from),
+ gs_file_get_path_cached (to)) < 0)
+ {
+ _set_error_from_errno (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * gs_file_unlink:
+ * @path: Path to file
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Like g_file_delete(), except this function does not follow Unix
+ * symbolic links, and will delete a symbolic link even if it's
+ * pointing to a nonexistent file. In other words, this function
+ * merely wraps the raw Unix function unlink().
+ *
+ * Returns: %TRUE on success, %FALSE on error
+ */
+gboolean
+gs_file_unlink (GFile *path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ if (unlink (gs_file_get_path_cached (path)) < 0)
+ {
+ _set_error_from_errno (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+chown_internal (GFile *path,
+ gboolean dereference_links,
+ guint32 owner,
+ guint32 group,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int res;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ do
+ if (dereference_links)
+ res = chown (gs_file_get_path_cached (path), owner, group);
+ else
+ res = lchown (gs_file_get_path_cached (path), owner, group);
+ while (G_UNLIKELY (res != 0 && errno == EINTR));
+
+ if (res < 0)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
+/**
+ * gs_file_chown:
+ * @path: Path to file
+ * @owner: UNIX owner
+ * @group: UNIX group
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Merely wraps UNIX chown().
+ *
+ * Returns: %TRUE on success, %FALSE on error
+ */
+gboolean
+gs_file_chown (GFile *path,
+ guint32 owner,
+ guint32 group,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return chown_internal (path, TRUE, owner, group, cancellable, error);
+}
+
+/**
+ * gs_file_lchown:
+ * @path: Path to file
+ * @owner: UNIX owner
+ * @group: UNIX group
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Merely wraps UNIX lchown().
+ *
+ * Returns: %TRUE on success, %FALSE on error
+ */
+gboolean
+gs_file_lchown (GFile *path,
+ guint32 owner,
+ guint32 group,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return chown_internal (path, FALSE, owner, group, cancellable, error);
+}
+
+/**
+ * gs_file_chmod:
+ * @path: Path to file
+ * @mode: UNIX mode
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Merely wraps UNIX chmod().
+ *
+ * Returns: %TRUE on success, %FALSE on error
+ */
+gboolean
+gs_file_chmod (GFile *path,
+ guint mode,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int res;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ do
+ res = chmod (gs_file_get_path_cached (path), mode);
+ while (G_UNLIKELY (res != 0 && errno == EINTR));
+
+ if (res < 0)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
+/**
+ * gs_file_ensure_directory:
+ * @dir: Path to create as directory
+ * @with_parents: Also create parent directories
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Like g_file_make_directory(), except does not throw an error if the
+ * directory already exists.
+ */
+gboolean
+gs_file_ensure_directory (GFile *dir,
+ gboolean with_parents,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GError *temp_error = NULL;
+ GFile *parent = NULL;
+
+ if (!g_file_make_directory (dir, cancellable, &temp_error))
+ {
+ if (with_parents &&
+ g_error_matches (temp_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ {
+ g_clear_error (&temp_error);
+
+ parent = g_file_get_parent (dir);
+ if (parent)
+ {
+ if (!gs_file_ensure_directory (parent, TRUE, cancellable, error))
+ goto out;
+ }
+ if (!gs_file_ensure_directory (dir, FALSE, cancellable, error))
+ goto out;
+ }
+ else if (!g_error_matches (temp_error, G_IO_ERROR, G_IO_ERROR_EXISTS))
+ {
+ g_propagate_error (error, temp_error);
+ goto out;
+ }
+ else
+ g_clear_error (&temp_error);
+ }
+
+ ret = TRUE;
+ out:
+ g_clear_object (&parent);
+ return ret;
+}
+
+/**
+ * gs_file_ensure_directory_mode:
+ * @dir: Path to create as directory
+ * @mode: Create directory with these permissions
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Wraps UNIX mkdir() function with support for @cancellable, and
+ * uses @error instead of errno.
+ */
+gboolean
+gs_file_ensure_directory_mode (GFile *dir,
+ guint mode,
+ GCancellable *cancellable,
+ GError **error)
+{
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ if (mkdir (gs_file_get_path_cached (dir), mode) == -1 && errno != EEXIST)
+ {
+ _set_error_from_errno (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * gs_file_load_contents_utf8:
+ * @file: Path to file whose contents must be UTF-8
+ * @cancellable:
+ * @error:
+ *
+ * Like g_file_load_contents(), except validates the contents are
+ * UTF-8.
+ */
+gchar *
+gs_file_load_contents_utf8 (GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ gsize len;
+ char *ret_contents = NULL;
+
+ if (!g_file_load_contents (file, cancellable, &ret_contents, &len,
+ NULL, error))
+ goto out;
+ if (!g_utf8_validate (ret_contents, len, NULL))
+ {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "Invalid UTF-8");
+ goto out;
+ }
+
+ ret = TRUE;
+ out:
+ if (!ret)
+ {
+ g_free (ret_contents);
+ return NULL;
+ }
+ return ret_contents;
+}
+
+static int
+path_common_directory (char *one,
+ char *two)
+{
+ int dir_index = 0;
+ int i = 0;
+
+ while (*one && *two)
+ {
+ if (*one != *two)
+ break;
+ if (*one == '/')
+ dir_index = i + 1;
+
+ one++;
+ two++;
+ i++;
+ }
+
+ return dir_index;
+}
+
+/**
+ * gs_file_get_relpath:
+ * @one: The first #GFile
+ * @two: The second #GFile
+ *
+ * Like gs_file_get_relative_path(), but does not mandate that
+ * the two files have any parent in common. This function will
+ * instead insert "../" where appropriate.
+ *
+ * Returns: (transfer full): The relative path between the two.
+ */
+gchar *
+gs_file_get_relpath (GFile *one,
+ GFile *two)
+{
+ gchar *simple_path;
+ gchar *one_path, *one_suffix;
+ gchar *two_path, *two_suffix;
+ GString *path;
+ int i;
+
+ simple_path = g_file_get_relative_path (one, two);
+ if (simple_path)
+ return simple_path;
+
+ one_path = g_file_get_path (one);
+ two_path = g_file_get_path (two);
+
+ i = path_common_directory (one_path, two_path);
+ one_suffix = one_path + i;
+ two_suffix = two_path + i;
+
+ path = g_string_new ("");
+
+ /* For every leftover path segment one has, append "../" so
+ * that we reach the same directory. */
+ while (*one_suffix)
+ {
+ g_string_append (path, "../");
+ one_suffix = strchr (one_suffix, '/');
+ if (one_suffix == NULL)
+ break;
+ one_suffix++;
+ }
+
+ /* And now append the leftover stuff on two's side. */
+ g_string_append (path, two_suffix);
+
+ g_free (one_path);
+ g_free (two_path);
+
+ return g_string_free (path, FALSE);
+}
+
+/**
+ * gs_file_realpath:
+ * @file: A #GFile
+ *
+ * Return a #GFile that contains the same path with symlinks
+ * followed. That is, it's a #GFile whose path is the result
+ * of calling realpath() on @file.
+ *
+ * Returns: (allow-none) (transfer full): A new #GFile or %NULL if @file is invalid
+ */
+GFile *
+gs_file_realpath (GFile *file)
+{
+ gchar *path;
+ gchar path_real[PATH_MAX];
+
+ path = g_file_get_path (file);
+
+ if (realpath ((const char *) path, path_real) == NULL)
+ {
+ g_free (path);
+ return NULL;
+ }
+
+ g_free (path);
+ return g_file_new_for_path (path_real);
+}
+
+#ifdef GSYSTEM_CONFIG_XATTRS
+static char *
+canonicalize_xattrs (char *xattr_string,
+ size_t len)
+{
+ char *p;
+ GSList *xattrs = NULL;
+ GSList *iter;
+ GString *result;
+
+ result = g_string_new (0);
+
+ p = xattr_string;
+ while (p < xattr_string+len)
+ {
+ xattrs = g_slist_prepend (xattrs, p);
+ p += strlen (p) + 1;
+ }
+
+ xattrs = g_slist_sort (xattrs, (GCompareFunc) strcmp);
+ for (iter = xattrs; iter; iter = iter->next) {
+ g_string_append (result, iter->data);
+ g_string_append_c (result, '\0');
+ }
+
+ g_slist_free (xattrs);
+ return g_string_free (result, FALSE);
+}
+
+static GVariant *
+variant_new_ay_bytes (GBytes *bytes)
+{
+ gsize size;
+ gconstpointer data;
+ data = g_bytes_get_data (bytes, &size);
+ g_bytes_ref (bytes);
+ return g_variant_new_from_data (G_VARIANT_TYPE ("ay"), data, size,
+ TRUE, (GDestroyNotify)g_bytes_unref, bytes);
+}
+
+static gboolean
+read_xattr_name_array (const char *path,
+ const char *xattrs,
+ size_t len,
+ GVariantBuilder *builder,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ const char *p;
+
+ p = xattrs;
+ while (p < xattrs+len)
+ {
+ ssize_t bytes_read;
+ char *buf;
+ GBytes *bytes = NULL;
+
+ bytes_read = lgetxattr (path, p, NULL, 0);
+ if (bytes_read < 0)
+ {
+ _set_error_from_errno (error);
+ g_prefix_error (error, "lgetxattr (%s, %s) failed: ", path, p);
+ goto out;
+ }
+ if (bytes_read == 0)
+ continue;
+
+ buf = g_malloc (bytes_read);
+ bytes = g_bytes_new_take (buf, bytes_read);
+ if (lgetxattr (path, p, buf, bytes_read) < 0)
+ {
+ g_bytes_unref (bytes);
+ _set_error_from_errno (error);
+ g_prefix_error (error, "lgetxattr (%s, %s) failed: ", path, p);
+ goto out;
+ }
+
+ g_variant_builder_add (builder, "(@ay@ay)",
+ g_variant_new_bytestring (p),
+ variant_new_ay_bytes (bytes));
+
+ p = p + strlen (p) + 1;
+ g_bytes_unref (bytes);
+ }
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+#endif
+
+static gboolean
+get_xattrs_impl (GFile *f,
+ GVariantBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef GSYSTEM_CONFIG_XATTRS
+ gboolean ret = FALSE;
+ const char *path;
+ ssize_t bytes_read;
+ char *xattr_names = NULL;
+ char *xattr_names_canonical = NULL;
+
+ path = gs_file_get_path_cached (f);
+
+ bytes_read = llistxattr (path, NULL, 0);
+
+ if (bytes_read < 0)
+ {
+ if (errno != ENOTSUP)
+ {
+ _set_error_from_errno (error);
+ g_prefix_error (error, "llistxattr (%s) failed: ", path);
+ goto out;
+ }
+ }
+ else if (bytes_read > 0)
+ {
+ xattr_names = g_malloc (bytes_read);
+ if (llistxattr (path, xattr_names, bytes_read) < 0)
+ {
+ _set_error_from_errno (error);
+ g_prefix_error (error, "llistxattr (%s) failed: ", path);
+ goto out;
+ }
+ xattr_names_canonical = canonicalize_xattrs (xattr_names, bytes_read);
+
+ if (!read_xattr_name_array (path, xattr_names_canonical, bytes_read, builder, error))
+ goto out;
+ }
+
+ ret = TRUE;
+ out:
+ g_clear_pointer (&xattr_names, g_free);
+ g_clear_pointer (&xattr_names_canonical, g_free);
+ return ret;
+#else
+ return TRUE;
+#endif
+}
+
+/**
+ * gs_file_get_all_xattrs:
+ * @f: a #GFile
+ * @out_xattrs: (out): A new #GVariant containing the extended attributes
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * Read all extended attributes of @f in a canonical sorted order, and
+ * set @out_xattrs with the result.
+ *
+ * If the filesystem does not support extended attributes, @out_xattrs
+ * will have 0 elements, and this function will return successfully.
+ */
+gboolean
+gs_file_get_all_xattrs (GFile *f,
+ GVariant **out_xattrs,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GVariantBuilder builder;
+ gboolean builder_initialized = FALSE;
+ GVariant *ret_xattrs = NULL;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ayay)"));
+ builder_initialized = TRUE;
+
+ if (!get_xattrs_impl (f, &builder,
+ cancellable, error))
+ goto out;
+
+ ret_xattrs = g_variant_builder_end (&builder);
+ builder_initialized = FALSE;
+ g_variant_ref_sink (ret_xattrs);
+
+ ret = TRUE;
+ gs_transfer_out_value (out_xattrs, &ret_xattrs);
+ out:
+ g_clear_pointer (&ret_xattrs, g_variant_unref);
+ if (!builder_initialized)
+ g_variant_builder_clear (&builder);
+ return ret;
+}
+
+/**
+ * gs_fd_set_all_xattrs:
+ * @fd: File descriptor
+ * @xattrs: Extended attributes
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * For each attribute in @xattrs, set its value on the file or
+ * directory referred to by @fd. This function does not remove any
+ * attributes not in @xattrs.
+ */
+gboolean
+gs_fd_set_all_xattrs (int fd,
+ GVariant *xattrs,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef GSYSTEM_CONFIG_XATTRS
+ gboolean ret = FALSE;
+ int i, n;
+
+ n = g_variant_n_children (xattrs);
+ for (i = 0; i < n; i++)
+ {
+ const guint8* name;
+ const guint8* value_data;
+ GVariant *value = NULL;
+ gsize value_len;
+ int res;
+
+ g_variant_get_child (xattrs, i, "(^&ay@ay)",
+ &name, &value);
+ value_data = g_variant_get_fixed_array (value, &value_len, 1);
+
+ do
+ res = fsetxattr (fd, (char*)name, (char*)value_data, value_len, 0);
+ while (G_UNLIKELY (res == -1 && errno == EINTR));
+ g_variant_unref (value);
+ if (G_UNLIKELY (res == -1))
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+ }
+
+ ret = TRUE;
+ out:
+ return ret;
+#else
+ return TRUE;
+#endif
+}
+
+/**
+ * gs_file_set_all_xattrs:
+ * @file: File descriptor
+ * @xattrs: Extended attributes
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * For each attribute in @xattrs, set its value on the file or
+ * directory referred to by @file. This function does not remove any
+ * attributes not in @xattrs.
+ */
+gboolean
+gs_file_set_all_xattrs (GFile *file,
+ GVariant *xattrs,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef GSYSTEM_CONFIG_XATTRS
+ gboolean ret = FALSE;
+ const char *path;
+ int i, n;
+
+ path = gs_file_get_path_cached (file);
+
+ n = g_variant_n_children (xattrs);
+ for (i = 0; i < n; i++)
+ {
+ const guint8* name;
+ GVariant *value;
+ const guint8* value_data;
+ gsize value_len;
+ gboolean loop_err;
+
+ g_variant_get_child (xattrs, i, "(^&ay@ay)",
+ &name, &value);
+ value_data = g_variant_get_fixed_array (value, &value_len, 1);
+
+ loop_err = lsetxattr (path, (char*)name, (char*)value_data, value_len, 0) < 0;
+ g_clear_pointer (&value, (GDestroyNotify) g_variant_unref);
+ if (loop_err)
+ {
+ _set_error_from_errno (error);
+ g_prefix_error (error, "lsetxattr (%s, %s) failed: ", path, name);
+ goto out;
+ }
+ }
+
+ ret = TRUE;
+ out:
+ return ret;
+#else
+ return TRUE;
+#endif
+}
diff --git a/libgsystem/gsystem-file-utils.h b/libgsystem/gsystem-file-utils.h
new file mode 100644
index 000000000..021aebb73
--- /dev/null
+++ b/libgsystem/gsystem-file-utils.h
@@ -0,0 +1,172 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GSYSTEM_FILE_UTILS_H__
+#define __GSYSTEM_FILE_UTILS_H__
+
+#include <gio/gio.h>
+#include <sys/stat.h>
+
+G_BEGIN_DECLS
+
+const char *gs_file_get_path_cached (GFile *file);
+
+const char *gs_file_get_basename_cached (GFile *file);
+
+gboolean gs_file_enumerator_iterate (GFileEnumerator *direnum,
+ GFileInfo **out_info,
+ GFile **out_child,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_openat_noatime (int dfd,
+ const char *name,
+ int *ret_fd,
+ GCancellable *cancellable,
+ GError **error);
+
+GInputStream *gs_file_read_noatime (GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+GMappedFile *gs_file_map_noatime (GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+
+#ifndef __GI_SCANNER__
+gboolean gs_stream_fstat (GFileDescriptorBased *stream,
+ struct stat *out_stbuf,
+ GCancellable *cancellable,
+ GError **error);
+
+#endif
+
+#if GLIB_CHECK_VERSION(2,34,0)
+GBytes *gs_file_map_readonly (GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+#endif
+
+gboolean gs_file_sync_data (GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+
+char * gs_fileutil_gen_tmp_name (const char *prefix,
+ const char *suffix);
+
+gboolean gs_file_open_dir_fd (GFile *path,
+ int *out_fd,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_open_in_tmpdir_at (int tmpdir_fd,
+ int mode,
+ char **out_name,
+ GOutputStream **out_stream,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_open_in_tmpdir (GFile *tmpdir,
+ int mode,
+ GFile **out_file,
+ GOutputStream **out_stream,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_create (GFile *file,
+ int mode,
+ GOutputStream **out_stream,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_linkcopy (GFile *src,
+ GFile *dest,
+ GFileCopyFlags flags,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_linkcopy_sync_data (GFile *src,
+ GFile *dest,
+ GFileCopyFlags flags,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_rename (GFile *from,
+ GFile *to,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_unlink (GFile *path,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_chown (GFile *path,
+ guint32 owner,
+ guint32 group,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_lchown (GFile *path,
+ guint32 owner,
+ guint32 group,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_chmod (GFile *path,
+ guint mode,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_ensure_directory (GFile *dir,
+ gboolean with_parents,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_ensure_directory_mode (GFile *dir,
+ guint mode,
+ GCancellable *cancellable,
+ GError **error);
+
+gchar *gs_file_load_contents_utf8 (GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+
+gchar *gs_file_get_relpath (GFile *one,
+ GFile *two);
+
+GFile * gs_file_realpath (GFile *file);
+
+gboolean gs_file_get_all_xattrs (GFile *f,
+ GVariant **out_xattrs,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_fd_set_all_xattrs (int fd,
+ GVariant *xattrs,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_file_set_all_xattrs (GFile *file,
+ GVariant *xattrs,
+ GCancellable *cancellable,
+ GError **error);
+
+G_END_DECLS
+
+#endif
diff --git a/libgsystem/gsystem-glib-compat.h b/libgsystem/gsystem-glib-compat.h
new file mode 100644
index 000000000..6fd59c655
--- /dev/null
+++ b/libgsystem/gsystem-glib-compat.h
@@ -0,0 +1,54 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012,2013 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __LIBGSYSTEM_GLIB_COMPAT__
+#define __LIBGSYSTEM_GLIB_COMPAT__
+
+#include <gio/gio.h>
+
+#if !GLIB_CHECK_VERSION(2,34,0)
+static inline void
+g_type_ensure (GType type)
+{
+ if (G_UNLIKELY (type == (GType)-1))
+ g_error ("can't happen");
+}
+
+#define g_clear_pointer(pp, destroy) \
+ G_STMT_START { \
+ G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
+ /* Only one access, please */ \
+ gpointer *_pp = (gpointer *) (pp); \
+ gpointer _p; \
+ /* This assignment is needed to avoid a gcc warning */ \
+ GDestroyNotify _destroy = (GDestroyNotify) (destroy); \
+ \
+ (void) (0 ? (gpointer) *(pp) : 0); \
+ do \
+ _p = g_atomic_pointer_get (_pp); \
+ while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_pp, _p, NULL)); \
+ \
+ if (_p) \
+ _destroy (_p); \
+ } G_STMT_END
+
+#endif
+
+#endif
diff --git a/libgsystem/gsystem-local-alloc.c b/libgsystem/gsystem-local-alloc.c
new file mode 100644
index 000000000..add3fcb37
--- /dev/null
+++ b/libgsystem/gsystem-local-alloc.c
@@ -0,0 +1,72 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "gsystem-local-alloc.h"
+
+/**
+ * SECTION:gslocalalloc
+ * @title: GSystem local allocation
+ * @short_description: Release local variables automatically when they go out of scope
+ *
+ * These macros leverage the GCC extension __attribute__ ((cleanup))
+ * to allow calling a cleanup function such as g_free() when a
+ * variable goes out of scope. See <ulink
+ * url="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html">
+ * for more information on the attribute.
+ *
+ * The provided macros make it easy to use the cleanup attribute for
+ * types that come with GLib. The primary two are #gs_free and
+ * #gs_unref_object, which correspond to g_free() and
+ * g_object_unref(), respectively.
+ *
+ * The rationale behind this is that particularly when handling error
+ * paths, it can be very tricky to ensure the right variables are
+ * freed. With this, one simply applies gs_lobj to a
+ * locally-allocated #GFile for example, and it will be automatically
+ * unreferenced when it goes out of scope.
+ *
+ * Note - you should only use these macros for <emphasis>stack
+ * allocated</emphasis> variables. They don't provide garbage
+ * collection or let you avoid freeing things. They're simply a
+ * compiler assisted deterministic mechanism for calling a cleanup
+ * function when a stack frame ends.
+ *
+ * <example id="gs-lfree"><title>Calling g_free automatically</title>
+ * <programlisting>
+ *
+ * GFile *
+ * create_file (GError **error)
+ * {
+ * gs_free char *random_id = NULL;
+ *
+ * if (!prepare_file (error))
+ * return NULL;
+ *
+ * random_id = alloc_random_id ();
+ *
+ * return create_file_real (error);
+ * // Note that random_id is freed here automatically
+ * }
+ * </programlisting>
+ * </example>
+ *
+ */
diff --git a/libgsystem/gsystem-local-alloc.h b/libgsystem/gsystem-local-alloc.h
new file mode 100644
index 000000000..34db2979a
--- /dev/null
+++ b/libgsystem/gsystem-local-alloc.h
@@ -0,0 +1,164 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GSYSTEM_LOCAL_ALLOC_H__
+#define __GSYSTEM_LOCAL_ALLOC_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define GS_DEFINE_CLEANUP_FUNCTION(Type, name, func) \
+ static inline void name (void *v) \
+ { \
+ func (*(Type*)v); \
+ }
+
+#define GS_DEFINE_CLEANUP_FUNCTION0(Type, name, func) \
+ static inline void name (void *v) \
+ { \
+ if (*(Type*)v) \
+ func (*(Type*)v); \
+ }
+
+/* These functions shouldn't be invoked directly;
+ * they are stubs that:
+ * 1) Take a pointer to the location (typically itself a pointer).
+ * 2) Provide %NULL-safety where it doesn't exist already (e.g. g_object_unref)
+ */
+GS_DEFINE_CLEANUP_FUNCTION0(GArray*, gs_local_array_unref, g_array_unref)
+GS_DEFINE_CLEANUP_FUNCTION0(GBytes*, gs_local_bytes_unref, g_bytes_unref)
+GS_DEFINE_CLEANUP_FUNCTION0(GChecksum*, gs_local_checksum_free, g_checksum_free)
+GS_DEFINE_CLEANUP_FUNCTION0(GError*, gs_local_free_error, g_error_free)
+GS_DEFINE_CLEANUP_FUNCTION0(GHashTable*, gs_local_hashtable_unref, g_hash_table_unref)
+GS_DEFINE_CLEANUP_FUNCTION0(GObject*, gs_local_obj_unref, g_object_unref)
+GS_DEFINE_CLEANUP_FUNCTION0(GPtrArray*, gs_local_ptrarray_unref, g_ptr_array_unref)
+GS_DEFINE_CLEANUP_FUNCTION0(GVariant*, gs_local_variant_unref, g_variant_unref)
+GS_DEFINE_CLEANUP_FUNCTION0(GVariantBuilder*, gs_local_variant_builder_unref, g_variant_builder_unref)
+GS_DEFINE_CLEANUP_FUNCTION0(GVariantIter*, gs_local_variant_iter_free, g_variant_iter_free)
+
+GS_DEFINE_CLEANUP_FUNCTION(char**, gs_local_strfreev, g_strfreev)
+GS_DEFINE_CLEANUP_FUNCTION(void*, gs_local_free, g_free)
+
+/**
+ * gs_free:
+ *
+ * Call g_free() on a variable location when it goes out of scope.
+ */
+#define gs_free __attribute__ ((cleanup(gs_local_free)))
+
+/**
+ * gs_unref_object:
+ *
+ * Call g_object_unref() on a variable location when it goes out of
+ * scope. Note that unlike g_object_unref(), the variable may be
+ * %NULL.
+ */
+#define gs_unref_object __attribute__ ((cleanup(gs_local_obj_unref)))
+
+/**
+ * gs_unref_variant:
+ *
+ * Call g_variant_unref() on a variable location when it goes out of
+ * scope. Note that unlike g_variant_unref(), the variable may be
+ * %NULL.
+ */
+#define gs_unref_variant __attribute__ ((cleanup(gs_local_variant_unref)))
+
+/**
+ * gs_free_variant_iter:
+ *
+ * Call g_variant_iter_free() on a variable location when it goes out of
+ * scope.
+ */
+#define gs_free_variant_iter __attribute__ ((cleanup(gs_local_variant_iter_free)))
+
+/**
+ * gs_free_variant_builder:
+ *
+ * Call g_variant_builder_unref() on a variable location when it goes out of
+ * scope.
+ */
+#define gs_unref_variant_builder __attribute__ ((cleanup(gs_local_variant_builder_unref)))
+
+/**
+ * gs_unref_array:
+ *
+ * Call g_array_unref() on a variable location when it goes out of
+ * scope. Note that unlike g_array_unref(), the variable may be
+ * %NULL.
+
+ */
+#define gs_unref_array __attribute__ ((cleanup(gs_local_array_unref)))
+
+/**
+ * gs_unref_ptrarray:
+ *
+ * Call g_ptr_array_unref() on a variable location when it goes out of
+ * scope. Note that unlike g_ptr_array_unref(), the variable may be
+ * %NULL.
+
+ */
+#define gs_unref_ptrarray __attribute__ ((cleanup(gs_local_ptrarray_unref)))
+
+/**
+ * gs_unref_hashtable:
+ *
+ * Call g_hash_table_unref() on a variable location when it goes out
+ * of scope. Note that unlike g_hash_table_unref(), the variable may
+ * be %NULL.
+ */
+#define gs_unref_hashtable __attribute__ ((cleanup(gs_local_hashtable_unref)))
+
+/**
+ * gs_free_checksum:
+ *
+ * Call g_checksum_free() on a variable location when it goes out
+ * of scope. Note that unlike g_checksum_free(), the variable may
+ * be %NULL.
+ */
+#define gs_free_checksum __attribute__ ((cleanup(gs_local_checksum_free)))
+
+/**
+ * gs_unref_bytes:
+ *
+ * Call g_bytes_unref() on a variable location when it goes out
+ * of scope. Note that unlike g_bytes_unref(), the variable may
+ * be %NULL.
+ */
+#define gs_unref_bytes __attribute__ ((cleanup(gs_local_bytes_unref)))
+
+/**
+ * gs_strfreev:
+ *
+ * Call g_strfreev() on a variable location when it goes out of scope.
+ */
+#define gs_strfreev __attribute__ ((cleanup(gs_local_strfreev)))
+
+/**
+ * gs_free_error:
+ *
+ * Call g_error_free() on a variable location when it goes out of scope.
+ */
+#define gs_free_error __attribute__ ((cleanup(gs_local_free_error)))
+
+G_END_DECLS
+
+#endif
diff --git a/libgsystem/gsystem-log.c b/libgsystem/gsystem-log.c
new file mode 100644
index 000000000..7b0314539
--- /dev/null
+++ b/libgsystem/gsystem-log.c
@@ -0,0 +1,167 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 William Jon McCann <mccann@redhat.com>
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#ifdef ENABLE_SYSTEMD_JOURNAL
+#define SD_JOURNAL_SUPPRESS_LOCATION
+#include <systemd/sd-journal.h>
+#endif
+#include <glib-unix.h>
+
+#define _GSYSTEM_NO_LOCAL_ALLOC
+#include "libgsystem.h"
+
+/**
+ * gs_log_structured:
+ * @message: Text message to send
+ * @keys: (allow-none) (array zero-terminated=1) (element-type utf8): Optional structured data
+ *
+ * Log structured data in an operating-system specific fashion. The
+ * parameter @opts should be an array of UTF-8 KEY=VALUE strings.
+ * This function does not support binary data. See
+ * http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html
+ * for more information about fields that can be used on a systemd
+ * system.
+ */
+void
+gs_log_structured (const char *message,
+ const char *const *keys)
+{
+#ifdef ENABLE_SYSTEMD_JOURNAL
+ const char *const*iter;
+ char *msgkey;
+ guint i, n_opts;
+ struct iovec *iovs;
+
+ for (n_opts = 0, iter = keys; *iter; iter++, n_opts++)
+ ;
+
+ n_opts++; /* Add one for MESSAGE= */
+ iovs = g_alloca (sizeof (struct iovec) * n_opts);
+
+ for (i = 0, iter = keys; *iter; iter++, i++) {
+ iovs[i].iov_base = (char*)keys[i];
+ iovs[i].iov_len = strlen (keys[i]);
+ }
+ g_assert(i == n_opts-1);
+ msgkey = g_strconcat ("MESSAGE=", message, NULL);
+ iovs[i].iov_base = msgkey;
+ iovs[i].iov_len = strlen (msgkey);
+
+ // The code location isn't useful since we're wrapping
+ sd_journal_sendv (iovs, n_opts);
+
+ g_free (msgkey);
+#else
+ g_print ("%s\n", message);
+#endif
+}
+
+/**
+ * gs_stdout_is_journal:
+ *
+ * Use this function when you want your code to behave differently
+ * depeneding on whether your program was started as a systemd unit,
+ * or e.g. interactively at a terminal.
+ *
+ * Returns: %TRUE if stdout is (probably) connnected to the systemd journal
+ */
+gboolean
+gs_stdout_is_journal (void)
+{
+ static gsize initialized;
+ static gboolean stdout_is_socket;
+
+ if (g_once_init_enter (&initialized))
+ {
+ guint64 pid = (guint64) getpid ();
+ char *fdpath = g_strdup_printf ("/proc/%" G_GUINT64_FORMAT "/fd/1", pid);
+ char buf[1024];
+ ssize_t bytes_read;
+
+ if ((bytes_read = readlink (fdpath, buf, sizeof(buf) - 1)) != -1)
+ {
+ buf[bytes_read] = '\0';
+ stdout_is_socket = g_str_has_prefix (buf, "socket:");
+ }
+ else
+ stdout_is_socket = FALSE;
+
+ g_free (fdpath);
+ g_once_init_leave (&initialized, TRUE);
+ }
+
+ return stdout_is_socket;
+}
+
+/**
+ * gs_log_structured_print:
+ * @message: A message to log
+ * @keys: (allow-none) (array zero-terminated=1) (element-type utf8): Optional structured data
+ *
+ * Like gs_log_structured(), but also print to standard output (if it
+ * is not already connected to the system log).
+ */
+void
+gs_log_structured_print (const char *message,
+ const char *const *keys)
+{
+ gs_log_structured (message, keys);
+
+#ifdef ENABLE_SYSTEMD_JOURNAL
+ if (!gs_stdout_is_journal ())
+ g_print ("%s\n", message);
+#endif
+}
+
+/**
+ * gs_log_structured_print_id_v:
+ * @message_id: A unique MESSAGE_ID
+ * @format: A format string
+ *
+ * The provided @message_id is a unique MESSAGE_ID (see <ulink url="http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html"> for more information).
+ *
+ * This function otherwise acts as gs_log_structured_print(), taking
+ * @format as a format string.
+ */
+void
+gs_log_structured_print_id_v (const char *message_id,
+ const char *format,
+ ...)
+{
+ char *keys[] = { NULL, NULL };
+ char *msg;
+ va_list args;
+
+ va_start (args, format);
+ msg = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ keys[0] = g_strconcat ("MESSAGE_ID=", message_id, NULL);
+ gs_log_structured_print (msg, (const char *const *)keys);
+ g_free (keys[0]);
+ g_free (msg);
+}
diff --git a/libgsystem/gsystem-log.h b/libgsystem/gsystem-log.h
new file mode 100644
index 000000000..80cfc3414
--- /dev/null
+++ b/libgsystem/gsystem-log.h
@@ -0,0 +1,42 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2013 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GSYSTEM_LOG_H__
+#define __GSYSTEM_LOG_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+gboolean gs_stdout_is_journal (void);
+
+void gs_log_structured (const char *message,
+ const char *const *keys);
+
+void gs_log_structured_print (const char *message,
+ const char *const *keys);
+
+void gs_log_structured_print_id_v (const char *message_id,
+ const char *format,
+ ...) G_GNUC_PRINTF (2, 3);
+
+G_END_DECLS
+
+#endif
diff --git a/libgsystem/gsystem-shutil.c b/libgsystem/gsystem-shutil.c
new file mode 100644
index 000000000..8029dd9cd
--- /dev/null
+++ b/libgsystem/gsystem-shutil.c
@@ -0,0 +1,460 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 William Jon McCann <mccann@redhat.com>
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#define _GSYSTEM_NO_LOCAL_ALLOC
+#include "libgsystem.h"
+#include "gsystem-glib-compat.h"
+#include <glib-unix.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <fcntl.h>
+
+/* Taken from systemd/src/shared/util.h */
+union dirent_storage {
+ struct dirent dent;
+ guint8 storage[offsetof(struct dirent, d_name) +
+ ((NAME_MAX + 1 + sizeof(long)) & ~(sizeof(long) - 1))];
+};
+
+static inline void
+_set_error_from_errno (GError **error)
+{
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+}
+
+static gboolean
+copy_xattrs_from_file_to_fd (GFile *src,
+ int dest_fd,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GVariant *src_xattrs = NULL;
+
+ if (!gs_file_get_all_xattrs (src, &src_xattrs, cancellable, error))
+ goto out;
+
+ if (src_xattrs)
+ {
+ if (!gs_fd_set_all_xattrs (dest_fd, src_xattrs, cancellable, error))
+ goto out;
+ }
+
+ ret = TRUE;
+ out:
+ g_clear_pointer (&src_xattrs, g_variant_unref);
+ return ret;
+}
+
+typedef enum {
+ GS_CP_MODE_NONE,
+ GS_CP_MODE_HARDLINK,
+ GS_CP_MODE_COPY_ALL
+} GsCpMode;
+
+static gboolean
+cp_internal (GFile *src,
+ GFile *dest,
+ GsCpMode mode,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GFileEnumerator *enumerator = NULL;
+ GFileInfo *src_info = NULL;
+ GFile *dest_child = NULL;
+ int dest_dfd = -1;
+ int r;
+
+ enumerator = g_file_enumerate_children (src, "standard::type,standard::name,unix::uid,unix::gid,unix::mode",
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ cancellable, error);
+ if (!enumerator)
+ goto out;
+
+ src_info = g_file_query_info (src, "standard::name,unix::mode,unix::uid,unix::gid," \
+ "time::modified,time::modified-usec,time::access,time::access-usec",
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ cancellable, error);
+ if (!src_info)
+ goto out;
+
+ do
+ r = mkdir (gs_file_get_path_cached (dest), 0755);
+ while (G_UNLIKELY (r == -1 && errno == EINTR));
+ if (r == -1)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ if (mode != GS_CP_MODE_NONE)
+ {
+ if (!gs_file_open_dir_fd (dest, &dest_dfd,
+ cancellable, error))
+ goto out;
+
+ do
+ r = fchown (dest_dfd,
+ g_file_info_get_attribute_uint32 (src_info, "unix::uid"),
+ g_file_info_get_attribute_uint32 (src_info, "unix::gid"));
+ while (G_UNLIKELY (r == -1 && errno == EINTR));
+ if (r == -1)
+ {
+ _set_error_from_errno (error);
+ goto out;
+ }
+
+ do
+ r = fchmod (dest_dfd, g_file_info_get_attribute_uint32 (src_info, "unix::mode"));
+ while (G_UNLIKELY (r == -1 && errno == EINTR));
+
+ if (!copy_xattrs_from_file_to_fd (src, dest_dfd, cancellable, error))
+ goto out;
+
+ if (dest_dfd != -1)
+ {
+ (void) close (dest_dfd);
+ dest_dfd = -1;
+ }
+ }
+
+ while (TRUE)
+ {
+ GFileInfo *file_info = NULL;
+ GFile *src_child = NULL;
+
+ if (!gs_file_enumerator_iterate (enumerator, &file_info, &src_child,
+ cancellable, error))
+ goto out;
+ if (!file_info)
+ break;
+
+ if (dest_child) g_object_unref (dest_child);
+ dest_child = g_file_get_child (dest, g_file_info_get_name (file_info));
+
+ if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY)
+ {
+ if (!cp_internal (src_child, dest_child, mode,
+ cancellable, error))
+ goto out;
+ }
+ else
+ {
+ gboolean did_link = FALSE;
+ (void) unlink (gs_file_get_path_cached (dest_child));
+ if (mode == GS_CP_MODE_HARDLINK)
+ {
+ if (link (gs_file_get_path_cached (src_child), gs_file_get_path_cached (dest_child)) == -1)
+ {
+ if (!(errno == EMLINK || errno == EXDEV))
+ {
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+ /* We failed to hardlink; fall back to copying all; this will
+ * affect subsequent directory copies too.
+ */
+ mode = GS_CP_MODE_COPY_ALL;
+ }
+ else
+ did_link = TRUE;
+ }
+ if (!did_link)
+ {
+ GFileCopyFlags copyflags = G_FILE_COPY_OVERWRITE | G_FILE_COPY_NOFOLLOW_SYMLINKS;
+ if (mode == GS_CP_MODE_COPY_ALL)
+ copyflags |= G_FILE_COPY_ALL_METADATA;
+ if (!g_file_copy (src_child, dest_child, copyflags,
+ cancellable, NULL, NULL, error))
+ goto out;
+ }
+ }
+ }
+
+ ret = TRUE;
+ out:
+ if (dest_dfd != -1)
+ (void) close (dest_dfd);
+ g_clear_object (&src_info);
+ g_clear_object (&enumerator);
+ g_clear_object (&dest_child);
+ return ret;
+}
+
+/**
+ * gs_shutil_cp_al_or_fallback:
+ * @src: Source path
+ * @dest: Destination path
+ * @cancellable:
+ * @error:
+ *
+ * Recursively copy path @src (which must be a directory) to the
+ * target @dest. If possible, hardlinks are used; if a hardlink is
+ * not possible, a regular copy is created. Any existing files are
+ * overwritten.
+ *
+ * Returns: %TRUE on success
+ */
+gboolean
+gs_shutil_cp_al_or_fallback (GFile *src,
+ GFile *dest,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return cp_internal (src, dest, GS_CP_MODE_HARDLINK,
+ cancellable, error);
+}
+
+/**
+ * gs_shutil_cp_a:
+ * @src: Source path
+ * @dest: Destination path
+ * @cancellable:
+ * @error:
+ *
+ * Recursively copy path @src (which must be a directory) to the
+ * target @dest. Any existing files are overwritten.
+ *
+ * Returns: %TRUE on success
+ */
+gboolean
+gs_shutil_cp_a (GFile *src,
+ GFile *dest,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return cp_internal (src, dest, GS_CP_MODE_COPY_ALL,
+ cancellable, error);
+}
+
+static unsigned char
+struct_stat_to_dt (struct stat *stbuf)
+{
+ if (S_ISDIR (stbuf->st_mode))
+ return DT_DIR;
+ if (S_ISREG (stbuf->st_mode))
+ return DT_REG;
+ if (S_ISCHR (stbuf->st_mode))
+ return DT_CHR;
+ if (S_ISBLK (stbuf->st_mode))
+ return DT_BLK;
+ if (S_ISFIFO (stbuf->st_mode))
+ return DT_FIFO;
+ if (S_ISLNK (stbuf->st_mode))
+ return DT_LNK;
+ if (S_ISSOCK (stbuf->st_mode))
+ return DT_SOCK;
+ return DT_UNKNOWN;
+}
+
+static gboolean
+gs_shutil_rm_rf_children (DIR *dir,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int dfd;
+ DIR *child_dir = NULL;
+ struct dirent *dent;
+ union dirent_storage buf;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ goto out;
+
+ dfd = dirfd (dir);
+
+ while (readdir_r (dir, &buf.dent, &dent) == 0)
+ {
+ if (dent == NULL)
+ break;
+ if (dent->d_type == DT_UNKNOWN)
+ {
+ struct stat stbuf;
+ if (fstatat (dfd, dent->d_name, &stbuf, AT_SYMLINK_NOFOLLOW) == -1)
+ {
+ int errsv = errno;
+ if (errsv == ENOENT)
+ continue;
+ else
+ {
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+ }
+ dent->d_type = struct_stat_to_dt (&stbuf);
+ /* Assume unknown types are just treated like regular files */
+ if (dent->d_type == DT_UNKNOWN)
+ dent->d_type = DT_REG;
+ }
+
+ if (strcmp (dent->d_name, ".") == 0 || strcmp (dent->d_name, "..") == 0)
+ continue;
+
+ if (dent->d_type == DT_DIR)
+ {
+ int child_dfd = openat (dfd, dent->d_name, O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC | O_NOFOLLOW);
+
+ if (child_dfd == -1)
+ {
+ if (errno == ENOENT)
+ continue;
+ else
+ {
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+ }
+
+ child_dir = fdopendir (child_dfd);
+ if (!child_dir)
+ {
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+
+ if (!gs_shutil_rm_rf_children (child_dir, cancellable, error))
+ goto out;
+
+ if (unlinkat (dfd, dent->d_name, AT_REMOVEDIR) == -1)
+ {
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+
+ (void) closedir (child_dir);
+ child_dir = NULL;
+ }
+ else
+ {
+ if (unlinkat (dfd, dent->d_name, 0) == -1)
+ {
+ int errsv = errno;
+ if (errno != ENOENT)
+ {
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+ }
+ }
+ }
+ /* Ignore error result from readdir_r, that's what others
+ * seem to do =(
+ */
+
+ ret = TRUE;
+ out:
+ if (child_dir) (void) closedir (child_dir);
+ return ret;
+}
+
+/**
+ * gs_shutil_rm_rf:
+ * @path: A file or directory
+ * @cancellable:
+ * @error:
+ *
+ * Recursively delete the filename referenced by @path; it may be a
+ * file or directory. No error is thrown if @path does not exist.
+ */
+gboolean
+gs_shutil_rm_rf (GFile *path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int dfd = -1;
+ DIR *d = NULL;
+
+ /* With O_NOFOLLOW first */
+ dfd = openat (AT_FDCWD, gs_file_get_path_cached (path),
+ O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC | O_NOFOLLOW);
+
+ if (dfd == -1)
+ {
+ int errsv = errno;
+ if (errsv == ENOENT)
+ {
+ ;
+ }
+ else if (errsv == ENOTDIR || errsv == ELOOP)
+ {
+ if (!gs_file_unlink (path, cancellable, error))
+ goto out;
+ }
+ else
+ {
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+ }
+ else
+ {
+ d = fdopendir (dfd);
+ if (!d)
+ {
+ int errsv = errno;
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+
+ if (!gs_shutil_rm_rf_children (d, cancellable, error))
+ goto out;
+
+ if (rmdir (gs_file_get_path_cached (path)) == -1)
+ {
+ int errsv = errno;
+ if (errsv != ENOENT)
+ {
+ g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ g_strerror (errsv));
+ goto out;
+ }
+ }
+ }
+
+ ret = TRUE;
+ out:
+ if (d) (void) closedir (d);
+ return ret;
+}
+
diff --git a/libgsystem/gsystem-shutil.h b/libgsystem/gsystem-shutil.h
new file mode 100644
index 000000000..3cdea778d
--- /dev/null
+++ b/libgsystem/gsystem-shutil.h
@@ -0,0 +1,47 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GSYSTEM_SHUTIL_H__
+#define __GSYSTEM_SHUTIL_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+gboolean
+gs_shutil_cp_al_or_fallback (GFile *src,
+ GFile *dest,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean
+gs_shutil_cp_a (GFile *src,
+ GFile *dest,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean
+gs_shutil_rm_rf (GFile *path,
+ GCancellable *cancellable,
+ GError **error);
+
+G_END_DECLS
+
+#endif
diff --git a/libgsystem/gsystem-subprocess-context-private.h b/libgsystem/gsystem-subprocess-context-private.h
new file mode 100644
index 000000000..719df4516
--- /dev/null
+++ b/libgsystem/gsystem-subprocess-context-private.h
@@ -0,0 +1,65 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GS_SUBPROCESS_CONTEXT_PRIVATE_H__
+#define __GS_SUBPROCESS_CONTEXT_PRIVATE_H__
+
+#include "gsystem-subprocess-context.h"
+
+G_BEGIN_DECLS
+
+struct _GSSubprocessContext
+{
+ GObject parent;
+
+ GSpawnFlags flags;
+ gchar **argv;
+ gboolean has_argv0;
+ char **envp;
+ char *cwd;
+
+ GSSubprocessStreamDisposition stdin_disposition;
+ GSSubprocessStreamDisposition stdout_disposition;
+ GSSubprocessStreamDisposition stderr_disposition;
+
+ guint keep_descriptors : 1;
+ guint search_path : 1;
+ guint search_path_from_envp : 1;
+ guint unused_flags : 29;
+
+ gint stdin_fd;
+ gchar *stdin_path;
+
+ gint stdout_fd;
+ gchar *stdout_path;
+
+ gint stderr_fd;
+ gchar *stderr_path;
+
+ GArray *postfork_close_fds;
+ GArray *inherit_fds;
+
+ GSpawnChildSetupFunc child_setup_func;
+ gpointer child_setup_data;
+};
+
+G_END_DECLS
+
+#endif
diff --git a/libgsystem/gsystem-subprocess-context.c b/libgsystem/gsystem-subprocess-context.c
new file mode 100644
index 000000000..90ca7167a
--- /dev/null
+++ b/libgsystem/gsystem-subprocess-context.c
@@ -0,0 +1,501 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "libgsystem.h"
+
+#if GLIB_CHECK_VERSION(2,34,0)
+
+#ifdef G_OS_UNIX
+#include <gio/gunixoutputstream.h>
+#include <gio/gfiledescriptorbased.h>
+#include <gio/gunixinputstream.h>
+#include <glib-unix.h>
+#endif
+
+/**
+ * SECTION:gssubprocesscontext
+ * @title: GSSubprocess Context
+ * @short_description: Environment options for launching a child process
+ *
+ * This class contains a set of options for launching child processes,
+ * such as where its standard input and output will be directed, the
+ * argument list, the environment, and more.
+ *
+ * While the #GSSubprocess class has high level functions covering
+ * popular cases, use of this class allows access to more advanced
+ * options. It can also be used to launch multiple subprocesses with
+ * a similar configuration.
+ *
+ * Since: 2.36
+ */
+
+#include "config.h"
+
+#include "gsystem-subprocess-context-private.h"
+#include "gsystem-subprocess.h"
+
+#include <string.h>
+
+typedef GObjectClass GSSubprocessContextClass;
+
+G_DEFINE_TYPE (GSSubprocessContext, gs_subprocess_context, G_TYPE_OBJECT);
+
+enum
+{
+ PROP_0,
+ PROP_ARGV,
+ N_PROPS
+};
+
+static GParamSpec *gs_subprocess_context_pspecs[N_PROPS];
+
+/**
+ * gs_subprocess_context_new:
+ * @argv: Argument list
+ *
+ * Returns: (transfer full): A new instance of a #GSSubprocessContext.
+ */
+GSSubprocessContext *
+gs_subprocess_context_new (gchar **argv)
+{
+ g_return_val_if_fail (argv != NULL && argv[0] != NULL, NULL);
+
+ return g_object_new (GS_TYPE_SUBPROCESS_CONTEXT,
+ "argv", argv,
+ NULL);
+}
+
+GSSubprocessContext *
+gs_subprocess_context_newv (const gchar *first_arg,
+ ...)
+{
+ GSSubprocessContext *result;
+ va_list args;
+
+ g_return_val_if_fail (first_arg != NULL, NULL);
+
+ va_start (args, first_arg);
+ result = gs_subprocess_context_newa (first_arg, args);
+ va_end (args);
+
+ return result;
+}
+
+/**
+ * gs_subprocess_context_newa:
+ * @first_arg: First argument
+ * @args: a va_list
+ *
+ * Returns: (transfer full): A new instance of a #GSSubprocessContext.
+ */
+GSSubprocessContext *
+gs_subprocess_context_newa (const gchar *first_arg,
+ va_list args)
+{
+ GSSubprocessContext *result;
+ GPtrArray *argv;
+
+ g_return_val_if_fail (first_arg != NULL, NULL);
+
+ argv = g_ptr_array_new ();
+ do
+ g_ptr_array_add (argv, (gchar*)first_arg);
+ while ((first_arg = va_arg (args, const gchar *)) != NULL);
+ g_ptr_array_add (argv, NULL);
+
+ result = gs_subprocess_context_new ((gchar**)argv->pdata);
+
+ return result;
+}
+
+#ifdef G_OS_UNIX
+GSSubprocessContext *
+gs_subprocess_context_new_argv0 (const gchar *argv0,
+ gchar **argv)
+{
+ GSSubprocessContext *result;
+ GPtrArray *real_argv;
+ gchar **iter;
+
+ g_return_val_if_fail (argv0 != NULL, NULL);
+ g_return_val_if_fail (argv != NULL && argv[0] != NULL, NULL);
+
+ real_argv = g_ptr_array_new ();
+ g_ptr_array_add (real_argv, (gchar*)argv0);
+ for (iter = argv; *iter; iter++)
+ g_ptr_array_add (real_argv, (gchar*) *iter);
+ g_ptr_array_add (real_argv, NULL);
+
+ result = g_object_new (GS_TYPE_SUBPROCESS_CONTEXT,
+ "argv", real_argv->pdata,
+ NULL);
+ result->has_argv0 = TRUE;
+
+ return result;
+}
+#endif
+
+static void
+gs_subprocess_context_init (GSSubprocessContext *self)
+{
+ self->stdin_fd = -1;
+ self->stdout_fd = -1;
+ self->stderr_fd = -1;
+ self->stdout_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT;
+ self->stderr_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT;
+ self->postfork_close_fds = g_array_new (FALSE, FALSE, sizeof (int));
+ self->inherit_fds = g_array_new (FALSE, FALSE, sizeof (int));
+}
+
+static void
+gs_subprocess_context_finalize (GObject *object)
+{
+ GSSubprocessContext *self = GS_SUBPROCESS_CONTEXT (object);
+
+ g_strfreev (self->argv);
+ g_strfreev (self->envp);
+ g_free (self->cwd);
+
+ g_free (self->stdin_path);
+ g_free (self->stdout_path);
+ g_free (self->stderr_path);
+
+ g_array_unref (self->postfork_close_fds);
+ g_array_unref (self->inherit_fds);
+
+ if (G_OBJECT_CLASS (gs_subprocess_context_parent_class)->finalize != NULL)
+ G_OBJECT_CLASS (gs_subprocess_context_parent_class)->finalize (object);
+}
+
+static void
+gs_subprocess_context_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GSSubprocessContext *self = GS_SUBPROCESS_CONTEXT (object);
+
+ switch (prop_id)
+ {
+ case PROP_ARGV:
+ self->argv = (gchar**) g_value_dup_boxed (value);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gs_subprocess_context_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GSSubprocessContext *self = GS_SUBPROCESS_CONTEXT (object);
+
+ switch (prop_id)
+ {
+ case PROP_ARGV:
+ g_value_set_boxed (value, self->argv);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gs_subprocess_context_class_init (GSSubprocessContextClass *class)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+ gobject_class->finalize = gs_subprocess_context_finalize;
+ gobject_class->get_property = gs_subprocess_context_get_property;
+ gobject_class->set_property = gs_subprocess_context_set_property;
+
+ /**
+ * GSSubprocessContext:argv:
+ *
+ * Array of arguments passed to child process; must have at least
+ * one element. The first element has special handling - if it is
+ * an not absolute path ( as determined by g_path_is_absolute() ),
+ * then the system search path will be used. See
+ * %G_SPAWN_SEARCH_PATH.
+ *
+ * Note that in order to use the Unix-specific argv0 functionality,
+ * you must use the setter function
+ * gs_subprocess_context_set_args_and_argv0(). For more information
+ * about this, see %G_SPAWN_FILE_AND_ARGV_ZERO.
+ *
+ * Since: 2.36
+ */
+ gs_subprocess_context_pspecs[PROP_ARGV] = g_param_spec_boxed ("argv", "Arguments", "Arguments for child process", G_TYPE_STRV,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (gobject_class, N_PROPS, gs_subprocess_context_pspecs);
+}
+
+/**
+ * gs_subprocess_context_argv_append:
+ * @self:
+ * @arg: An argument
+ *
+ * Append an argument to the child's argument vector.
+ */
+void
+gs_subprocess_context_argv_append (GSSubprocessContext *self,
+ const gchar *arg)
+{
+ GPtrArray *new_argv = g_ptr_array_new ();
+ gchar **iter;
+
+ for (iter = self->argv; *iter; iter++)
+ g_ptr_array_add (new_argv, *iter);
+ g_ptr_array_add (new_argv, g_strdup (arg));
+ g_ptr_array_add (new_argv, NULL);
+
+ /* Don't free elements */
+ g_free (self->argv);
+ self->argv = (char**)g_ptr_array_free (new_argv, FALSE);
+}
+
+/* Environment */
+
+/**
+ * gs_subprocess_context_set_environment:
+ * @self:
+ * @environ: (array zero-terminated=1) (element-type utf8): Environment KEY=VALUE pairs
+ *
+ * Replace the environment that will be used for the child process.
+ * The default is to inherit the current process.
+ */
+void
+gs_subprocess_context_set_environment (GSSubprocessContext *self,
+ gchar **env)
+{
+ g_strfreev (self->envp);
+ self->envp = g_strdupv (env);
+}
+
+void
+gs_subprocess_context_set_cwd (GSSubprocessContext *self,
+ const gchar *cwd)
+{
+ g_free (self->cwd);
+ self->cwd = g_strdup (cwd);
+}
+
+void
+gs_subprocess_context_set_keep_descriptors (GSSubprocessContext *self,
+ gboolean keep_descriptors)
+
+{
+ self->keep_descriptors = keep_descriptors ? 1 : 0;
+}
+
+void
+gs_subprocess_context_set_search_path (GSSubprocessContext *self,
+ gboolean search_path,
+ gboolean search_path_from_envp)
+{
+ self->search_path = search_path ? 1 : 0;
+ self->search_path_from_envp = search_path_from_envp ? 1 : 0;
+}
+
+void
+gs_subprocess_context_set_stdin_disposition (GSSubprocessContext *self,
+ GSSubprocessStreamDisposition disposition)
+{
+ g_return_if_fail (disposition != GS_SUBPROCESS_STREAM_DISPOSITION_STDERR_MERGE);
+ self->stdin_disposition = disposition;
+}
+
+void
+gs_subprocess_context_set_stdout_disposition (GSSubprocessContext *self,
+ GSSubprocessStreamDisposition disposition)
+{
+ g_return_if_fail (disposition != GS_SUBPROCESS_STREAM_DISPOSITION_STDERR_MERGE);
+ self->stdout_disposition = disposition;
+}
+
+void
+gs_subprocess_context_set_stderr_disposition (GSSubprocessContext *self,
+ GSSubprocessStreamDisposition disposition)
+{
+ self->stderr_disposition = disposition;
+}
+
+#ifdef G_OS_UNIX
+void
+gs_subprocess_context_set_stdin_file_path (GSSubprocessContext *self,
+ const gchar *path)
+{
+ self->stdin_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_NULL;
+ g_free (self->stdin_path);
+ self->stdin_path = g_strdup (path);
+}
+
+void
+gs_subprocess_context_set_stdin_fd (GSSubprocessContext *self,
+ gint fd)
+{
+ self->stdin_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_NULL;
+ self->stdin_fd = fd;
+}
+
+void
+gs_subprocess_context_set_stdout_file_path (GSSubprocessContext *self,
+ const gchar *path)
+{
+ self->stdout_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_NULL;
+ g_free (self->stdout_path);
+ self->stdout_path = g_strdup (path);
+}
+
+void
+gs_subprocess_context_set_stdout_fd (GSSubprocessContext *self,
+ gint fd)
+{
+ self->stdout_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_NULL;
+ self->stdout_fd = fd;
+}
+
+void
+gs_subprocess_context_set_stderr_file_path (GSSubprocessContext *self,
+ const gchar *path)
+{
+ self->stderr_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_NULL;
+ g_free (self->stderr_path);
+ self->stderr_path = g_strdup (path);
+}
+
+void
+gs_subprocess_context_set_stderr_fd (GSSubprocessContext *self,
+ gint fd)
+{
+ self->stderr_disposition = GS_SUBPROCESS_STREAM_DISPOSITION_NULL;
+ self->stderr_fd = fd;
+}
+#endif
+
+#ifdef G_OS_UNIX
+/**
+ * gs_subprocess_context_set_child_setup: (skip)
+ * @self:
+ * @child_setup: Function to call in the newly forked child, before execve()
+ * @user_data: Data passed to child
+ *
+ * FIXME - note extensive restricitons on GSpawnChildSetupFunc here
+ */
+void
+gs_subprocess_context_set_child_setup (GSSubprocessContext *self,
+ GSpawnChildSetupFunc child_setup,
+ gpointer user_data)
+{
+ self->child_setup_func = child_setup;
+ self->child_setup_data = user_data;
+}
+
+static gboolean
+open_pipe_internal (GSSubprocessContext *self,
+ gboolean for_read,
+ void **out_stream,
+ gint *out_fdno,
+ GError **error)
+{
+ int pipefds[2];
+
+ g_return_val_if_fail (out_stream != NULL, FALSE);
+ g_return_val_if_fail (out_fdno != NULL, FALSE);
+
+ if (!g_unix_open_pipe (pipefds, FD_CLOEXEC, error))
+ return FALSE;
+
+ if (for_read)
+ {
+ *out_stream = g_unix_input_stream_new (pipefds[0], TRUE);
+ *out_fdno = pipefds[1];
+ }
+ else
+ {
+ *out_stream = g_unix_output_stream_new (pipefds[1], TRUE);
+ *out_fdno = pipefds[0];
+ }
+ g_array_append_val (self->inherit_fds, *out_fdno);
+ g_array_append_val (self->postfork_close_fds, *out_fdno);
+
+ return TRUE;
+}
+
+/**
+ * gs_subprocess_context_open_pipe_read:
+ * @self:
+ * @out_stream: (out) (transfer full): A newly referenced output stream
+ * @out_fdno: (out): File descriptor number for the subprocess side of the pipe
+ *
+ * This allows you to open a pipe between the parent and child
+ * processes, independent of the standard streams. For this function,
+ * the pipe is set up so that the parent can read, and the child can
+ * write. For the opposite version, see
+ * gs_subprocess_context_open_pipe_write().
+ *
+ * The returned @out_fdno is the file descriptor number that the child
+ * will see; you need to communicate this number via a separate
+ * channel, such as the argument list. For example, if you're using
+ * this pipe to send a password, provide
+ * <literal>--password-fd=&lt;fdno string&gt;</literal>.
+ *
+ * Returns: %TRUE on success, %FALSE on error (and @error will be set)
+ */
+gboolean
+gs_subprocess_context_open_pipe_read (GSSubprocessContext *self,
+ GInputStream **out_stream,
+ gint *out_fdno,
+ GError **error)
+{
+ return open_pipe_internal (self, TRUE, (void**)out_stream, out_fdno, error);
+}
+
+/**
+ * gs_subprocess_context_open_pipe_write:
+ * @self:
+ * @out_stream: (out) (transfer full): A newly referenced stream
+ * @out_fdno: (out): File descriptor number for the subprocess side of the pipe
+ *
+ * Like gs_subprocess_context_open_pipe_read(), but returns a writable
+ * channel from which the child process can read.
+ *
+ * Returns: %TRUE on success, %FALSE on error (and @error will be set)
+ */
+gboolean
+gs_subprocess_context_open_pipe_write (GSSubprocessContext *self,
+ GOutputStream **out_stream,
+ gint *out_fdno,
+ GError **error)
+{
+ return open_pipe_internal (self, FALSE, (void**)out_stream, out_fdno, error);
+}
+
+#endif
+
+#endif
diff --git a/libgsystem/gsystem-subprocess-context.h b/libgsystem/gsystem-subprocess-context.h
new file mode 100644
index 000000000..b8a24012a
--- /dev/null
+++ b/libgsystem/gsystem-subprocess-context.h
@@ -0,0 +1,128 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GSYSTEM_SUBPROCESS_CONTEXT_H__
+#define __GSYSTEM_SUBPROCESS_CONTEXT_H__
+
+#include <gio/gio.h>
+
+#if GLIB_CHECK_VERSION(2,34,0)
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_SUBPROCESS_CONTEXT (gs_subprocess_context_get_type ())
+#define GS_SUBPROCESS_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_SUBPROCESS_CONTEXT, GSSubprocessContext))
+#define GS_IS_SUBPROCESS_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_SUBPROCESS_CONTEXT))
+
+typedef struct _GSSubprocessContext GSSubprocessContext;
+
+/**
+ * GSSubprocessStreamDisposition:
+ * @GS_SUBPROCESS_STREAM_DISPOSITION_NULL: Redirect to operating system's null output stream
+ * @GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT: Keep the stream from the parent process
+ * @GS_SUBPROCESS_STREAM_DISPOSITION_PIPE: Open a private unidirectional channel between the processes
+ * @GS_SUBPROCESS_STREAM_DISPOSITION_STDERR_MERGE: Only applicable to standard error; causes it to be merged with standard output
+ *
+ * Flags to define the behaviour of the standard input/output/error of
+ * a #GSSubprocess.
+ *
+ * Since: 2.36
+ **/
+typedef enum {
+ GS_SUBPROCESS_STREAM_DISPOSITION_NULL,
+ GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT,
+ GS_SUBPROCESS_STREAM_DISPOSITION_PIPE,
+ GS_SUBPROCESS_STREAM_DISPOSITION_STDERR_MERGE
+} GSSubprocessStreamDisposition;
+
+GType gs_subprocess_context_get_type (void) G_GNUC_CONST;
+
+GSSubprocessContext * gs_subprocess_context_new (gchar **argv);
+GSSubprocessContext * gs_subprocess_context_newv (const gchar *first_arg,
+ ...);
+GSSubprocessContext * gs_subprocess_context_newa (const gchar *first_arg,
+ va_list args);
+
+#ifdef G_OS_UNIX
+GSSubprocessContext * gs_subprocess_context_new_argv0 (const gchar *argv0,
+ gchar **argv);
+#endif
+
+void gs_subprocess_context_argv_append (GSSubprocessContext *self,
+ const gchar *arg);
+
+/* Environment */
+
+void gs_subprocess_context_set_environment (GSSubprocessContext *self,
+ gchar **environ);
+void gs_subprocess_context_set_cwd (GSSubprocessContext *self,
+ const gchar *cwd);
+void gs_subprocess_context_set_keep_descriptors (GSSubprocessContext *self,
+ gboolean keep_descriptors);
+void gs_subprocess_context_set_search_path (GSSubprocessContext *self,
+ gboolean search_path,
+ gboolean search_path_from_envp);
+
+/* Basic I/O control */
+
+void gs_subprocess_context_set_stdin_disposition (GSSubprocessContext *self,
+ GSSubprocessStreamDisposition disposition);
+void gs_subprocess_context_set_stdout_disposition (GSSubprocessContext *self,
+ GSSubprocessStreamDisposition disposition);
+void gs_subprocess_context_set_stderr_disposition (GSSubprocessContext *self,
+ GSSubprocessStreamDisposition disposition);
+
+/* Extended I/O control, only available on UNIX */
+
+#ifdef G_OS_UNIX
+void gs_subprocess_context_set_stdin_file_path (GSSubprocessContext *self,
+ const gchar *path);
+void gs_subprocess_context_set_stdin_fd (GSSubprocessContext *self,
+ gint fd);
+void gs_subprocess_context_set_stdout_file_path (GSSubprocessContext *self,
+ const gchar *path);
+void gs_subprocess_context_set_stdout_fd (GSSubprocessContext *self,
+ gint fd);
+void gs_subprocess_context_set_stderr_file_path (GSSubprocessContext *self,
+ const gchar *path);
+void gs_subprocess_context_set_stderr_fd (GSSubprocessContext *self,
+ gint fd);
+
+gboolean gs_subprocess_context_open_pipe_read (GSSubprocessContext *self,
+ GInputStream **out_stream,
+ gint *out_fdno,
+ GError **error);
+gboolean gs_subprocess_context_open_pipe_write (GSSubprocessContext *self,
+ GOutputStream **out_stream,
+ gint *out_fdno,
+ GError **error);
+#endif
+
+/* Child setup, only available on UNIX */
+#ifdef G_OS_UNIX
+void gs_subprocess_context_set_child_setup (GSSubprocessContext *self,
+ GSpawnChildSetupFunc child_setup,
+ gpointer user_data);
+#endif
+
+G_END_DECLS
+
+#endif
+#endif
diff --git a/libgsystem/gsystem-subprocess.c b/libgsystem/gsystem-subprocess.c
new file mode 100644
index 000000000..4ec680f80
--- /dev/null
+++ b/libgsystem/gsystem-subprocess.c
@@ -0,0 +1,966 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright © 2012 Red Hat, Inc.
+ * Copyright © 2012 Canonical Limited
+ *
+ * This program 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 licence or (at
+ * your option) any later version.
+ *
+ * See the included COPYING file for more information.
+ *
+ * Authors: Colin Walters <walters@verbum.org>
+ * Ryan Lortie <desrt@desrt.ca>
+ */
+
+#include "config.h"
+
+#define _GSYSTEM_NO_LOCAL_ALLOC
+#include "libgsystem.h"
+
+#if GLIB_CHECK_VERSION(2,34,0)
+
+/**
+ * SECTION:gssubprocess
+ * @title: GSSubprocess
+ * @short_description: Create child processes and monitor their status
+ *
+ * This class wraps the lower-level g_spawn_async_with_pipes() API,
+ * providing a more modern GIO-style API, such as returning
+ * #GInputStream objects for child output pipes.
+ *
+ * One major advantage that GIO brings over the core GLib library is
+ * comprehensive API for asynchronous I/O, such
+ * g_output_stream_splice_async(). This makes GSubprocess
+ * significantly more powerful and flexible than equivalent APIs in
+ * some other languages such as the <literal>subprocess.py</literal>
+ * included with Python. For example, using #GSubprocess one could
+ * create two child processes, reading standard output from the first,
+ * processing it, and writing to the input stream of the second, all
+ * without blocking the main loop.
+ *
+ * Since: 2.36
+ */
+
+#include "config.h"
+
+#include "gsystem-subprocess.h"
+#include "gsystem-subprocess-context-private.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#include <gio/gunixoutputstream.h>
+#include <gio/gfiledescriptorbased.h>
+#include <gio/gunixinputstream.h>
+#include <glib-unix.h>
+#endif
+#include <fcntl.h>
+#ifdef G_OS_WIN32
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+#include "giowin32-priv.h"
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+static void initable_iface_init (GInitableIface *initable_iface);
+
+typedef GObjectClass GSSubprocessClass;
+
+#ifdef G_OS_UNIX
+static void
+gs_subprocess_unix_queue_waitpid (GSSubprocess *self);
+#endif
+
+struct _GSSubprocess
+{
+ GObject parent;
+
+ GSSubprocessContext *context;
+ GPid pid;
+
+ guint pid_valid : 1;
+ guint reaped_child : 1;
+ guint unused : 30;
+
+ /* These are the streams created if a pipe is requested via flags. */
+ GOutputStream *stdin_pipe;
+ GInputStream *stdout_pipe;
+ GInputStream *stderr_pipe;
+};
+
+G_DEFINE_TYPE_WITH_CODE (GSSubprocess, gs_subprocess, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init));
+
+enum
+{
+ PROP_0,
+ PROP_CONTEXT,
+ N_PROPS
+};
+
+static GParamSpec *gs_subprocess_pspecs[N_PROPS];
+
+static void
+gs_subprocess_init (GSSubprocess *self)
+{
+}
+
+static void
+gs_subprocess_finalize (GObject *object)
+{
+ GSSubprocess *self = GS_SUBPROCESS (object);
+
+ if (self->pid_valid)
+ {
+#ifdef G_OS_UNIX
+ /* Here we need to actually call waitpid() to clean up the
+ * zombie. In case the child hasn't actually exited, defer this
+ * cleanup to the worker thread.
+ */
+ if (!self->reaped_child)
+ gs_subprocess_unix_queue_waitpid (self);
+#endif
+ g_spawn_close_pid (self->pid);
+ }
+
+ g_clear_object (&self->stdin_pipe);
+ g_clear_object (&self->stdout_pipe);
+ g_clear_object (&self->stderr_pipe);
+
+ if (G_OBJECT_CLASS (gs_subprocess_parent_class)->finalize != NULL)
+ G_OBJECT_CLASS (gs_subprocess_parent_class)->finalize (object);
+}
+
+static void
+gs_subprocess_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GSSubprocess *self = GS_SUBPROCESS (object);
+
+ switch (prop_id)
+ {
+ case PROP_CONTEXT:
+ self->context = g_value_dup_object (value);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gs_subprocess_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GSSubprocess *self = GS_SUBPROCESS (object);
+
+ switch (prop_id)
+ {
+ case PROP_CONTEXT:
+ g_value_set_object (value, self->context);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gs_subprocess_class_init (GSSubprocessClass *class)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+ gobject_class->finalize = gs_subprocess_finalize;
+ gobject_class->get_property = gs_subprocess_get_property;
+ gobject_class->set_property = gs_subprocess_set_property;
+
+ /**
+ * GSSubprocess:context:
+ *
+ *
+ * Since: 2.36
+ */
+ gs_subprocess_pspecs[PROP_CONTEXT] = g_param_spec_object ("context", "Context", "Subprocess options", GS_TYPE_SUBPROCESS_CONTEXT,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (gobject_class, N_PROPS, gs_subprocess_pspecs);
+}
+
+#ifdef G_OS_UNIX
+
+static gboolean
+gs_subprocess_unix_waitpid_dummy (gpointer data)
+{
+ return FALSE;
+}
+
+static void
+gs_subprocess_unix_queue_waitpid (GSSubprocess *self)
+{
+ GMainContext *worker_context;
+ GSource *waitpid_source;
+
+#ifdef GLIB_COMPILATION
+ worker_context = GLIB_PRIVATE_CALL (g_get_worker_context) ();
+#else
+ worker_context = g_main_context_get_thread_default ();
+#endif
+ waitpid_source = g_child_watch_source_new (self->pid);
+ g_source_set_callback (waitpid_source, gs_subprocess_unix_waitpid_dummy, NULL, NULL);
+ g_source_attach (waitpid_source, worker_context);
+ g_source_unref (waitpid_source);
+}
+
+#endif
+
+static GInputStream *
+platform_input_stream_from_spawn_fd (gint fd)
+{
+ if (fd < 0)
+ return NULL;
+
+#ifdef G_OS_UNIX
+ return g_unix_input_stream_new (fd, TRUE);
+#else
+ return g_win32_input_stream_new_from_fd (fd, TRUE);
+#endif
+}
+
+static GOutputStream *
+platform_output_stream_from_spawn_fd (gint fd)
+{
+ if (fd < 0)
+ return NULL;
+
+#ifdef G_OS_UNIX
+ return g_unix_output_stream_new (fd, TRUE);
+#else
+ return g_win32_output_stream_new_from_fd (fd, TRUE);
+#endif
+}
+
+#ifdef G_OS_UNIX
+static gint
+unix_open_file (const char *filename,
+ gint mode,
+ GError **error)
+{
+ gint my_fd;
+
+ do
+ my_fd = open (filename, mode | O_BINARY | O_CLOEXEC, 0666);
+ while (my_fd == -1 && errno == EINTR);
+
+ /* If we return -1 we should also set the error */
+ if (my_fd < 0)
+ {
+ gint saved_errno = errno;
+ char *display_name;
+
+ display_name = g_filename_display_name (filename);
+ g_set_error (error, G_IO_ERROR, g_io_error_from_errno (saved_errno),
+ "Error opening file '%s': %s", display_name,
+ g_strerror (saved_errno));
+ g_free (display_name);
+ /* fall through... */
+ }
+
+ return my_fd;
+}
+#endif
+
+typedef struct
+{
+ gint fds[3];
+ GArray *inherit_fds;
+ GSpawnChildSetupFunc child_setup_func;
+ gpointer child_setup_data;
+} ChildData;
+
+static void
+child_setup (gpointer user_data)
+{
+ ChildData *child_data = user_data;
+ guint i;
+ gint result;
+
+ /* We're on the child side now. "Rename" the file descriptors in
+ * child_data.fds[] to stdin/stdout/stderr.
+ *
+ * We don't close the originals. It's possible that the originals
+ * should not be closed and if they should be closed then they should
+ * have been created O_CLOEXEC.
+ */
+ for (i = 0; i < 3; i++)
+ {
+ if (child_data->fds[i] != -1 && child_data->fds[i] != (int) i)
+ {
+ do
+ result = dup2 (child_data->fds[i], i);
+ while (G_UNLIKELY (result == -1 && errno == EINTR));
+ }
+ }
+
+ /* Unset the CLOEXEC flag for the child *should* inherit */
+ for (i = 0; i < child_data->inherit_fds->len; i++)
+ {
+ int fd = g_array_index (child_data->inherit_fds, int, i);
+ int flags;
+
+ do
+ flags = fcntl (fd, F_GETFL);
+ while (G_UNLIKELY (flags == -1 && errno == EINTR));
+
+ flags &= ~FD_CLOEXEC;
+
+ do
+ result = fcntl (fd, F_SETFD, flags);
+ while (G_UNLIKELY (result == -1 && errno == EINTR));
+ }
+
+ if (child_data->child_setup_func)
+ child_data->child_setup_func (child_data->child_setup_data);
+}
+
+static gboolean
+initable_init (GInitable *initable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GSSubprocess *self = GS_SUBPROCESS (initable);
+ ChildData child_data = { { -1, -1, -1 } };
+ gint *pipe_ptrs[3] = { NULL, NULL, NULL };
+ gint pipe_fds[3] = { -1, -1, -1 };
+ gint close_fds[3] = { -1, -1, -1 };
+ GSpawnFlags spawn_flags = 0;
+ gboolean success = FALSE;
+ guint i;
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ /* We must setup the three fds that will end up in the child as stdin,
+ * stdout and stderr.
+ *
+ * First, stdin.
+ */
+#ifdef G_OS_UNIX
+ if (self->context->stdin_fd != -1)
+ child_data.fds[0] = self->context->stdin_fd;
+ else if (self->context->stdin_path != NULL)
+ {
+ child_data.fds[0] = close_fds[0] = unix_open_file (self->context->stdin_path,
+ O_RDONLY, error);
+ if (child_data.fds[0] == -1)
+ goto out;
+ }
+ else
+#endif
+ if (self->context->stdin_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_NULL)
+ ; /* nothing */
+ else if (self->context->stdin_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT)
+ spawn_flags |= G_SPAWN_CHILD_INHERITS_STDIN;
+ else if (self->context->stdin_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_PIPE)
+ pipe_ptrs[0] = &pipe_fds[0];
+ else
+ g_assert_not_reached ();
+
+ /* Next, stdout. */
+#ifdef G_OS_UNIX
+ if (self->context->stdout_fd != -1)
+ child_data.fds[1] = self->context->stdout_fd;
+ else if (self->context->stdout_path != NULL)
+ {
+ child_data.fds[1] = close_fds[1] = unix_open_file (self->context->stdout_path,
+ O_CREAT | O_WRONLY, error);
+ if (child_data.fds[1] == -1)
+ goto out;
+ }
+ else
+#endif
+ if (self->context->stdout_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_NULL)
+ spawn_flags |= G_SPAWN_STDOUT_TO_DEV_NULL;
+ else if (self->context->stdout_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT)
+ ; /* Nothing */
+ else if (self->context->stdout_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_PIPE)
+ pipe_ptrs[1] = &pipe_fds[1];
+ else
+ g_assert_not_reached ();
+
+ /* Finally, stderr. */
+#ifdef G_OS_UNIX
+ if (self->context->stderr_fd != -1)
+ child_data.fds[2] = self->context->stderr_fd;
+ else if (self->context->stderr_path != NULL)
+ {
+ child_data.fds[2] = close_fds[2] = unix_open_file (self->context->stderr_path,
+ O_CREAT | O_WRONLY, error);
+ if (child_data.fds[2] == -1)
+ goto out;
+ }
+ else
+#endif
+ if (self->context->stderr_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_NULL)
+ spawn_flags |= G_SPAWN_STDERR_TO_DEV_NULL;
+ else if (self->context->stderr_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT)
+ ; /* Nothing */
+ else if (self->context->stderr_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_PIPE)
+ pipe_ptrs[2] = &pipe_fds[2];
+ else if (self->context->stderr_disposition == GS_SUBPROCESS_STREAM_DISPOSITION_STDERR_MERGE)
+ /* This will work because stderr gets setup after stdout. */
+ child_data.fds[2] = 1;
+ else
+ g_assert_not_reached ();
+
+ child_data.inherit_fds = self->context->inherit_fds;
+
+ if (self->context->keep_descriptors)
+ spawn_flags |= G_SPAWN_LEAVE_DESCRIPTORS_OPEN;
+
+ if (self->context->search_path)
+ spawn_flags |= G_SPAWN_SEARCH_PATH;
+ else if (self->context->search_path_from_envp)
+ spawn_flags |= G_SPAWN_SEARCH_PATH_FROM_ENVP;
+ else if (!g_path_is_absolute (((gchar**)self->context->argv)[0]))
+ spawn_flags |= G_SPAWN_SEARCH_PATH;
+
+ if (self->context->has_argv0)
+ spawn_flags |= G_SPAWN_FILE_AND_ARGV_ZERO;
+
+ spawn_flags |= G_SPAWN_DO_NOT_REAP_CHILD;
+#ifdef GLIB_COMPILATION
+ spawn_flags |= G_SPAWN_CLOEXEC_PIPES;
+#endif
+
+ child_data.child_setup_func = self->context->child_setup_func;
+ child_data.child_setup_data = self->context->child_setup_data;
+ success = g_spawn_async_with_pipes (self->context->cwd,
+ (char**)self->context->argv,
+ self->context->envp,
+ spawn_flags,
+ child_setup, &child_data,
+ &self->pid,
+ pipe_ptrs[0], pipe_ptrs[1], pipe_ptrs[2],
+ error);
+ if (success)
+ self->pid_valid = TRUE;
+
+out:
+ for (i = 0; i < 3; i++)
+ if (close_fds[i] != -1)
+ close (close_fds[i]);
+
+ for (i = 0; i < self->context->postfork_close_fds->len; i++)
+ (void) close (g_array_index (self->context->postfork_close_fds, int, i));
+
+ self->stdin_pipe = platform_output_stream_from_spawn_fd (pipe_fds[0]);
+ self->stdout_pipe = platform_input_stream_from_spawn_fd (pipe_fds[1]);
+ self->stderr_pipe = platform_input_stream_from_spawn_fd (pipe_fds[2]);
+
+ return success;
+}
+
+static void
+initable_iface_init (GInitableIface *initable_iface)
+{
+ initable_iface->init = initable_init;
+}
+
+/**
+ * gs_subprocess_new:
+ *
+ * Create a new process, using the parameters specified by
+ * GSSubprocessContext.
+ *
+ * Returns: (transfer full): A newly created %GSSubprocess, or %NULL on error (and @error will be set)
+ *
+ * Since: 2.36
+ */
+GSSubprocess *
+gs_subprocess_new (GSSubprocessContext *context,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return g_initable_new (GS_TYPE_SUBPROCESS,
+ cancellable, error,
+ "context", context,
+ NULL);
+}
+
+/**
+ * gs_subprocess_get_pid:
+ * @self: a #GSSubprocess
+ *
+ * The identifier for this child process; it is valid as long as the
+ * process @self is referenced. In particular, do
+ * <emphasis>not</emphasis> call g_spawn_close_pid() on this value;
+ * that is handled internally.
+ *
+ * On some Unix versions, it is possible for there to be a race
+ * condition where waitpid() may have been called to collect the child
+ * before any watches (such as that installed by
+ * gs_subprocess_add_watch()) have fired. If you are planning to use
+ * native functions such as kill() on the pid, your program should
+ * gracefully handle an %ESRCH result to mitigate this.
+ *
+ * If you want to request process termination, using the high level
+ * gs_subprocess_request_exit() and gs_subprocess_force_exit() API is
+ * recommended.
+ *
+ * Returns: Operating-system specific identifier for child process
+ *
+ * Since: 2.36
+ */
+GPid
+gs_subprocess_get_pid (GSSubprocess *self)
+{
+ g_return_val_if_fail (GS_IS_SUBPROCESS (self), 0);
+
+ return self->pid;
+}
+
+/**
+ * gs_subprocess_get_stdin_pipe:
+ *
+ * Returns: (transfer none): Pipe
+ */
+GOutputStream *
+gs_subprocess_get_stdin_pipe (GSSubprocess *self)
+{
+ g_return_val_if_fail (GS_IS_SUBPROCESS (self), NULL);
+ g_return_val_if_fail (self->stdin_pipe, NULL);
+
+ return self->stdin_pipe;
+}
+
+/**
+ * gs_subprocess_get_stdout_pipe:
+ *
+ * Returns: (transfer none): Pipe
+ */
+GInputStream *
+gs_subprocess_get_stdout_pipe (GSSubprocess *self)
+{
+ g_return_val_if_fail (GS_IS_SUBPROCESS (self), NULL);
+ g_return_val_if_fail (self->stdout_pipe, NULL);
+
+ return self->stdout_pipe;
+}
+
+/**
+ * gs_subprocess_get_stderr_pipe:
+ *
+ * Returns: (transfer none): Pipe
+ */
+GInputStream *
+gs_subprocess_get_stderr_pipe (GSSubprocess *self)
+{
+ g_return_val_if_fail (GS_IS_SUBPROCESS (self), NULL);
+ g_return_val_if_fail (self->stderr_pipe, NULL);
+
+ return self->stderr_pipe;
+}
+
+typedef struct {
+ GSSubprocess *self;
+ GCancellable *cancellable;
+ GSimpleAsyncResult *result;
+} GSSubprocessWatchData;
+
+static gboolean
+gs_subprocess_on_child_exited (GPid pid,
+ gint status_code,
+ gpointer user_data)
+{
+ GSSubprocessWatchData *data = user_data;
+ GError *error = NULL;
+
+ if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
+ {
+ g_simple_async_result_take_error (data->result, error);
+ }
+ else
+ {
+ data->self->reaped_child = TRUE;
+
+ g_simple_async_result_set_op_res_gssize (data->result, status_code);
+ }
+
+ g_simple_async_result_complete (data->result);
+
+ g_object_unref (data->result);
+ g_object_unref (data->self);
+ g_free (data);
+
+ return FALSE;
+}
+
+/**
+ * gs_subprocess_wait:
+ * @self: a #GSSubprocess
+ * @cancellable: a #GCancellable
+ * @callback: Invoked when process exits, or @cancellable is cancelled
+ * @user_data: Data for @callback
+ *
+ * Start an asynchronous wait for the subprocess @self to exit.
+ *
+ * Since: 2.36
+ */
+void
+gs_subprocess_wait (GSSubprocess *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSource *source;
+ GSSubprocessWatchData *data;
+
+ data = g_new0 (GSSubprocessWatchData, 1);
+
+ data->self = g_object_ref (self);
+ data->result = g_simple_async_result_new ((GObject*)self, callback, user_data,
+ gs_subprocess_wait);
+
+ source = g_child_watch_source_new (self->pid);
+
+ g_source_set_callback (source, (GSourceFunc)gs_subprocess_on_child_exited,
+ data, NULL);
+ if (cancellable)
+ {
+ GSource *cancellable_source;
+
+ data->cancellable = g_object_ref (cancellable);
+
+ cancellable_source = g_cancellable_source_new (cancellable);
+ g_source_add_child_source (source, cancellable_source);
+ g_source_unref (cancellable_source);
+ }
+
+ g_source_attach (source, g_main_context_get_thread_default ());
+ g_source_unref (source);
+}
+
+/**
+ * gs_subprocess_wait_finish:
+ * @self: a #GSSubprocess
+ * @result: a #GAsyncResult
+ * @out_exit_status: (out): Exit status of the process encoded in platform-specific way
+ * @error: a #GError
+ *
+ * The exit status of the process will be stored in @out_exit_status.
+ * See the documentation of g_spawn_check_exit_status() for more
+ * details.
+ *
+ * Note that @error is not set if the process exits abnormally; you
+ * must use g_spawn_check_exit_status() for that.
+ *
+ * Since: 2.36
+ */
+gboolean
+gs_subprocess_wait_finish (GSSubprocess *self,
+ GAsyncResult *result,
+ int *out_exit_status,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+
+ *out_exit_status = g_simple_async_result_get_op_res_gssize (simple);
+
+ return TRUE;
+}
+
+typedef struct {
+ GMainLoop *loop;
+ gint *exit_status_ptr;
+ gboolean caught_error;
+ GError **error;
+} GSSubprocessSyncWaitData;
+
+static void
+gs_subprocess_on_sync_wait_complete (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSSubprocessSyncWaitData *data = user_data;
+
+ if (!gs_subprocess_wait_finish ((GSSubprocess*)object, result,
+ data->exit_status_ptr, data->error))
+ data->caught_error = TRUE;
+
+ g_main_loop_quit (data->loop);
+}
+
+/**
+ * gs_subprocess_wait_sync:
+ * @self: a #GSSubprocess
+ * @out_exit_status: (out): Platform-specific exit code
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Synchronously wait for the subprocess to terminate, returning the
+ * status code in @out_exit_status. See the documentation of
+ * g_spawn_check_exit_status() for how to interpret it. Note that if
+ * @error is set, then @out_exit_status will be left uninitialized.
+ *
+ * Returns: %TRUE on success, %FALSE if @cancellable was cancelled
+ *
+ * Since: 2.36
+ */
+gboolean
+gs_subprocess_wait_sync (GSSubprocess *self,
+ int *out_exit_status,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ gboolean pushed_thread_default = FALSE;
+ GMainContext *context = NULL;
+ GSSubprocessSyncWaitData data;
+
+ memset (&data, 0, sizeof (data));
+
+ g_return_val_if_fail (GS_IS_SUBPROCESS (self), FALSE);
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ context = g_main_context_new ();
+ g_main_context_push_thread_default (context);
+ pushed_thread_default = TRUE;
+
+ data.exit_status_ptr = out_exit_status;
+ data.loop = g_main_loop_new (context, TRUE);
+ data.error = error;
+
+ gs_subprocess_wait (self, cancellable,
+ gs_subprocess_on_sync_wait_complete, &data);
+
+ g_main_loop_run (data.loop);
+
+ if (data.caught_error)
+ goto out;
+
+ ret = TRUE;
+ out:
+ if (pushed_thread_default)
+ g_main_context_pop_thread_default (context);
+ if (context)
+ g_main_context_unref (context);
+ if (data.loop)
+ g_main_loop_unref (data.loop);
+
+ return ret;
+}
+
+/**
+ * gs_subprocess_wait_sync_check:
+ * @self: a #GSSubprocess
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Combines gs_subprocess_wait_sync() with g_spawn_check_exit_status().
+ *
+ * Returns: %TRUE on success, %FALSE if process exited abnormally, or @cancellable was cancelled
+ *
+ * Since: 2.36
+ */
+gboolean
+gs_subprocess_wait_sync_check (GSSubprocess *self,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ int exit_status;
+
+ if (!gs_subprocess_wait_sync (self, &exit_status, cancellable, error))
+ goto out;
+
+ if (!g_spawn_check_exit_status (exit_status, error))
+ goto out;
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
+/**
+ * gs_subprocess_request_exit:
+ * @self: a #GSSubprocess
+ *
+ * This API uses an operating-system specific mechanism to request
+ * that the subprocess gracefully exit. This API is not available on
+ * all operating systems; for those not supported, it will do nothing
+ * and return %FALSE. Portable code should handle this situation
+ * gracefully. For example, if you are communicating via input or
+ * output pipe with the child, many programs will automatically exit
+ * when one of their standard input or output are closed.
+ *
+ * On Unix, this API sends %SIGTERM.
+ *
+ * A %TRUE return value does <emphasis>not</emphasis> mean the
+ * subprocess has exited, merely that an exit request was initiated.
+ * You can use gs_subprocess_add_watch() to monitor the status of the
+ * process after calling this function.
+ *
+ * This function returns %TRUE if the process has already exited.
+ *
+ * Returns: %TRUE if the operation is supported, %FALSE otherwise.
+ *
+ * Since: 2.36
+ */
+gboolean
+gs_subprocess_request_exit (GSSubprocess *self)
+{
+ g_return_val_if_fail (GS_IS_SUBPROCESS (self), FALSE);
+
+#ifdef G_OS_UNIX
+ (void) kill (self->pid, SIGTERM);
+ return TRUE;
+#else
+ return FALSE;
+#endif
+}
+
+/**
+ * gs_subprocess_force_exit:
+ * @self: a #GSSubprocess
+ *
+ * Use an operating-system specific method to attempt an immediate,
+ * forceful termination of the process. There is no mechanism to
+ * determine whether or not the request itself was successful;
+ * however, you can use gs_subprocess_wait() to monitor the status of
+ * the process after calling this function.
+ *
+ * On Unix, this function sends %SIGKILL.
+ */
+void
+gs_subprocess_force_exit (GSSubprocess *self)
+{
+ g_return_if_fail (GS_IS_SUBPROCESS (self));
+
+#if !defined(GLIB_COMPIATION)
+ {
+ int ret;
+ do
+ ret = kill (self->pid, SIGKILL);
+ while (ret == -1 && errno == EINTR);
+ }
+#elif defined(G_OS_UNIX)
+ GLIB_PRIVATE_CALL (g_main_send_signal) (self->pid, SIGKILL);
+#else
+ TerminateProcess (self->pid, 1);
+#endif
+}
+
+GSSubprocess *
+gs_subprocess_new_simple_argl (GSSubprocessStreamDisposition stdout_disposition,
+ GSSubprocessStreamDisposition stderr_disposition,
+ GCancellable *cancellable,
+ GError **error,
+ const gchar *first_arg,
+ ...)
+{
+ va_list args;
+ GSSubprocess *result;
+ GSSubprocessContext *context;
+
+ va_start (args, first_arg);
+ context = gs_subprocess_context_newa (first_arg, args);
+ va_end (args);
+ result = gs_subprocess_new (context, cancellable, error);
+ g_object_unref (context);
+
+ return result;
+}
+
+/**
+ * gs_subprocess_new_simple_argv:
+ * @argv: (array zero-terminated=1) (element-type utf8): Argument array
+ * @stdout_disposition: Where to redirect stdout
+ * @stderr_disposition: Where to redirect stdout
+ * @error: a #GError
+ *
+ * Create a new subprocess using the provided argument array and
+ * stream dispositions.
+ */
+GSSubprocess *
+gs_subprocess_new_simple_argv (gchar **argv,
+ GSSubprocessStreamDisposition stdout_disposition,
+ GSSubprocessStreamDisposition stderr_disposition,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GSSubprocessContext *context;
+ GSSubprocess *result;
+
+ context = gs_subprocess_context_new (argv);
+ gs_subprocess_context_set_stdout_disposition (context, stdout_disposition);
+ gs_subprocess_context_set_stderr_disposition (context, stderr_disposition);
+
+ result = gs_subprocess_new (context, cancellable, error);
+ g_object_unref (context);
+
+ return result;
+}
+
+/**
+ * gs_subprocess_simple_run_sync:
+ * @cwd: Current working directory
+ * @stdin_disposition: What to do with standard input
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ * @first_arg: First argument
+ * @...: Remaining arguments, %NULL terminated
+ *
+ * Run a process synchronously, throw an error if it fails.
+ */
+gboolean
+gs_subprocess_simple_run_sync (const char *cwd,
+ GSSubprocessStreamDisposition stdin_disposition,
+ GCancellable *cancellable,
+ GError **error,
+ const char *first_arg,
+ ...)
+{
+ gboolean ret = FALSE;
+ va_list args;
+ GSSubprocess *proc = NULL;
+ GSSubprocessContext *context = NULL;
+
+ va_start (args, first_arg);
+ context = gs_subprocess_context_newa (first_arg, args);
+ va_end (args);
+ gs_subprocess_context_set_stdin_disposition (context, stdin_disposition);
+ gs_subprocess_context_set_cwd (context, cwd);
+ proc = gs_subprocess_new (context, cancellable, error);
+ if (!proc)
+ goto out;
+
+ if (!gs_subprocess_wait_sync_check (proc, cancellable, error))
+ goto out;
+
+ ret = TRUE;
+ out:
+ g_object_unref (context);
+ if (proc)
+ g_object_unref (proc);
+ return ret;
+}
+
+#endif
diff --git a/libgsystem/gsystem-subprocess.h b/libgsystem/gsystem-subprocess.h
new file mode 100644
index 000000000..f248f7ba4
--- /dev/null
+++ b/libgsystem/gsystem-subprocess.h
@@ -0,0 +1,101 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GSYSTEM_SUBPROCESS_H__
+#define __GSYSTEM_SUBPROCESS_H__
+
+#include <gio/gio.h>
+
+#if GLIB_CHECK_VERSION(2,34,0)
+
+#include "gsystem-subprocess-context.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_SUBPROCESS (gs_subprocess_get_type ())
+#define GS_SUBPROCESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_SUBPROCESS, GSSubprocess))
+#define GS_IS_SUBPROCESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_SUBPROCESS))
+
+typedef struct _GSSubprocess GSSubprocess;
+
+GType gs_subprocess_get_type (void) G_GNUC_CONST;
+
+/**** Core API ****/
+
+GSSubprocess * gs_subprocess_new (GSSubprocessContext *context,
+ GCancellable *cancellable,
+ GError **error);
+
+GOutputStream * gs_subprocess_get_stdin_pipe (GSSubprocess *self);
+
+GInputStream * gs_subprocess_get_stdout_pipe (GSSubprocess *self);
+
+GInputStream * gs_subprocess_get_stderr_pipe (GSSubprocess *self);
+
+void gs_subprocess_wait (GSSubprocess *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean gs_subprocess_wait_finish (GSSubprocess *self,
+ GAsyncResult *result,
+ int *out_exit_status,
+ GError **error);
+
+gboolean gs_subprocess_wait_sync (GSSubprocess *self,
+ int *out_exit_status,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_subprocess_wait_sync_check (GSSubprocess *self,
+ GCancellable *cancellable,
+ GError **error);
+
+GPid gs_subprocess_get_pid (GSSubprocess *self);
+
+gboolean gs_subprocess_request_exit (GSSubprocess *self);
+
+void gs_subprocess_force_exit (GSSubprocess *self);
+
+/**** High level helpers ****/
+
+GSSubprocess * gs_subprocess_new_simple_argl (GSSubprocessStreamDisposition stdout_disposition,
+ GSSubprocessStreamDisposition stderr_disposition,
+ GCancellable *cancellable,
+ GError **error,
+ const char *first_arg,
+ ...) G_GNUC_NULL_TERMINATED;
+GSSubprocess * gs_subprocess_new_simple_argv (char **argv,
+ GSSubprocessStreamDisposition stdout_disposition,
+ GSSubprocessStreamDisposition stderr_disposition,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_subprocess_simple_run_sync (const char *cwd,
+ GSSubprocessStreamDisposition stdin_disposition,
+ GCancellable *cancellable,
+ GError **error,
+ const char *first_arg,
+ ...) G_GNUC_NULL_TERMINATED;
+
+G_END_DECLS
+
+#endif
+#endif
diff --git a/libgsystem/libgsystem.h b/libgsystem/libgsystem.h
new file mode 100644
index 000000000..60884b652
--- /dev/null
+++ b/libgsystem/libgsystem.h
@@ -0,0 +1,49 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012,2013 Colin Walters <walters@verbum.org>.
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __LIBGSYSTEM__
+#define __LIBGSYSTEM__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define gs_transfer_out_value(outp, srcp) G_STMT_START { \
+ if (outp) \
+ { \
+ *(outp) = *(srcp); \
+ *(srcp) = NULL; \
+ } \
+ } G_STMT_END;
+
+#include <gsystem-console.h>
+#include <gsystem-file-utils.h>
+#include <gsystem-shutil.h>
+#if GLIB_CHECK_VERSION(2,34,0)
+#include <gsystem-subprocess.h>
+#endif
+#include <gsystem-log.h>
+#ifndef _GSYSTEM_NO_LOCAL_ALLOC
+#include <gsystem-local-alloc.h>
+#endif
+
+G_END_DECLS
+
+#endif
diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am
index 410848afd..623bf45d1 100644
--- a/libnm-glib/Makefile.am
+++ b/libnm-glib/Makefile.am
@@ -6,7 +6,11 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
- -I$(top_builddir)/libnm-util
+ -I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""libnm-glib"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(GLIB_CFLAGS)
BUILT_SOURCES = \
nm-vpn-plugin-glue.h \
@@ -26,8 +30,6 @@ libdeprecated_nm_glib_la_SOURCES = \
libnm_glib.c
libdeprecated_nm_glib_la_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
$(AM_CPPFLAGS) \
-Wno-deprecated-declarations \
-Wno-deprecated
@@ -48,7 +50,8 @@ lib_LTLIBRARIES = libnm-glib.la libnm-glib-vpn.la
libnm_glib_la_CFLAGS = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(GUDEV_CFLAGS)
+ $(GUDEV_CFLAGS) \
+ -DNMRUNDIR=\"$(nmrundir)\"
libnmincludedir = $(includedir)/libnm-glib
libnmvpndir = $(includedir)/libnm-glib
@@ -64,8 +67,10 @@ libnminclude_HEADERS = \
nm-device-bt.h \
nm-device-olpc-mesh.h \
nm-device-bond.h \
+ nm-device-team.h \
nm-device-bridge.h \
nm-device-vlan.h \
+ nm-device-generic.h \
nm-access-point.h \
nm-ip4-config.h \
nm-device-modem.h \
@@ -90,6 +95,7 @@ libnmvpn_HEADERS = \
libnm_glib_la_csources = \
nm-object.c \
+ nm-dbus-helpers.c \
nm-client.c \
nm-device.c \
nm-device-ethernet.c \
@@ -99,8 +105,10 @@ libnm_glib_la_csources = \
nm-device-bt.c \
nm-device-olpc-mesh.c \
nm-device-bond.c \
+ nm-device-team.c \
nm-device-bridge.c \
nm-device-vlan.c \
+ nm-device-generic.c \
nm-access-point.c \
nm-ip4-config.c \
nm-device-modem.c \
@@ -116,8 +124,7 @@ libnm_glib_la_csources = \
nm-secret-agent.c \
nm-device-wimax.c \
nm-wimax-nsp.c \
- nm-glib-enum-types.c \
- nm-glib-marshal.c
+ nm-glib-enum-types.c
libnm_glib_la_private_headers = \
nm-object-private.h \
@@ -125,7 +132,7 @@ libnm_glib_la_private_headers = \
nm-types-private.h \
nm-object-cache.h \
nm-remote-connection-private.h \
- nm-glib-marshal.h
+ nm-dbus-helpers-private.h
libnm_glib_la_SOURCES = \
$(libnm_glib_la_csources) \
@@ -136,9 +143,6 @@ nm_glib_enum_types_sources = $(libnminclude_HEADERS)
GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
-GLIB_GENERATED += nm-glib-marshal.h nm-glib-marshal.c
-nm_glib_marshal_sources = $(libnm_glib_la_SOURCES)
-
libnm_glib_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(builddir)/libdeprecated-nm-glib.la \
@@ -149,7 +153,7 @@ libnm_glib_la_LIBADD = \
SYMBOL_VIS_FILE=$(srcdir)/libnm-glib.ver
libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
- -version-info "10:0:6"
+ -version-info "12:0:8"
noinst_PROGRAMS = libnm-glib-test
@@ -168,7 +172,7 @@ nm_vpn_enum_types_sources = $(libnmvpn_HEADERS)
libnm_glib_vpn_la_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
libnm_glib_vpn_la_LIBADD = $(top_builddir)/libnm-util/libnm-util.la $(GLIB_LIBS) $(DBUS_LIBS)
libnm_glib_vpn_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib-vpn.ver \
- -version-info "2:0:1"
+ -version-info "3:0:2"
BUILT_SOURCES += $(GLIB_GENERATED)
@@ -180,10 +184,11 @@ libnm_glib_test_la_CFLAGS = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
$(GUDEV_CFLAGS) \
- -DLIBNM_GLIB_TEST
+ -DLIBNM_GLIB_TEST \
+ -DNMRUNDIR=\"$(nmrundir)\"
libnm_glib_test_la_SOURCES = \
- $(li0bnminclude_HEADERS) \
+ $(libnminclude_HEADERS) \
$(libnm_glib_la_SOURCES)
libnm_glib_test_la_LIBADD = \
diff --git a/libnm-glib/Makefile.in b/libnm-glib/Makefile.in
index e726df56a..4b169f40c 100644
--- a/libnm-glib/Makefile.in
+++ b/libnm-glib/Makefile.in
@@ -90,7 +90,8 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp $(libdeprecated_HEADERS) \
$(libnminclude_HEADERS) $(libnmvpn_HEADERS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -154,7 +155,9 @@ am__v_lt_1 =
libnm_glib_test_la_DEPENDENCIES = \
$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__objects_1 = libnm_glib_test_la-nm-object.lo \
+am__objects_1 =
+am__objects_2 = libnm_glib_test_la-nm-object.lo \
+ libnm_glib_test_la-nm-dbus-helpers.lo \
libnm_glib_test_la-nm-client.lo \
libnm_glib_test_la-nm-device.lo \
libnm_glib_test_la-nm-device-ethernet.lo \
@@ -164,8 +167,10 @@ am__objects_1 = libnm_glib_test_la-nm-object.lo \
libnm_glib_test_la-nm-device-bt.lo \
libnm_glib_test_la-nm-device-olpc-mesh.lo \
libnm_glib_test_la-nm-device-bond.lo \
+ libnm_glib_test_la-nm-device-team.lo \
libnm_glib_test_la-nm-device-bridge.lo \
libnm_glib_test_la-nm-device-vlan.lo \
+ libnm_glib_test_la-nm-device-generic.lo \
libnm_glib_test_la-nm-access-point.lo \
libnm_glib_test_la-nm-ip4-config.lo \
libnm_glib_test_la-nm-device-modem.lo \
@@ -181,11 +186,9 @@ am__objects_1 = libnm_glib_test_la-nm-object.lo \
libnm_glib_test_la-nm-secret-agent.lo \
libnm_glib_test_la-nm-device-wimax.lo \
libnm_glib_test_la-nm-wimax-nsp.lo \
- libnm_glib_test_la-nm-glib-enum-types.lo \
- libnm_glib_test_la-nm-glib-marshal.lo
-am__objects_2 =
-am__objects_3 = $(am__objects_1) $(am__objects_2)
-am_libnm_glib_test_la_OBJECTS = $(am__objects_3)
+ libnm_glib_test_la-nm-glib-enum-types.lo
+am__objects_3 = $(am__objects_2) $(am__objects_1)
+am_libnm_glib_test_la_OBJECTS = $(am__objects_1) $(am__objects_3)
libnm_glib_test_la_OBJECTS = $(am_libnm_glib_test_la_OBJECTS)
libnm_glib_test_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -206,15 +209,18 @@ libnm_glib_vpn_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
libnm_glib_la_DEPENDENCIES = $(top_builddir)/libnm-util/libnm-util.la \
$(builddir)/libdeprecated-nm-glib.la $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__objects_4 = libnm_glib_la-nm-object.lo libnm_glib_la-nm-client.lo \
+am__objects_4 = libnm_glib_la-nm-object.lo \
+ libnm_glib_la-nm-dbus-helpers.lo libnm_glib_la-nm-client.lo \
libnm_glib_la-nm-device.lo libnm_glib_la-nm-device-ethernet.lo \
libnm_glib_la-nm-device-infiniband.lo \
libnm_glib_la-nm-device-adsl.lo \
libnm_glib_la-nm-device-wifi.lo libnm_glib_la-nm-device-bt.lo \
libnm_glib_la-nm-device-olpc-mesh.lo \
libnm_glib_la-nm-device-bond.lo \
+ libnm_glib_la-nm-device-team.lo \
libnm_glib_la-nm-device-bridge.lo \
libnm_glib_la-nm-device-vlan.lo \
+ libnm_glib_la-nm-device-generic.lo \
libnm_glib_la-nm-access-point.lo \
libnm_glib_la-nm-ip4-config.lo \
libnm_glib_la-nm-device-modem.lo \
@@ -228,9 +234,8 @@ am__objects_4 = libnm_glib_la-nm-object.lo libnm_glib_la-nm-client.lo \
libnm_glib_la-nm-remote-settings.lo \
libnm_glib_la-nm-secret-agent.lo \
libnm_glib_la-nm-device-wimax.lo libnm_glib_la-nm-wimax-nsp.lo \
- libnm_glib_la-nm-glib-enum-types.lo \
- libnm_glib_la-nm-glib-marshal.lo
-am_libnm_glib_la_OBJECTS = $(am__objects_4) $(am__objects_2)
+ libnm_glib_la-nm-glib-enum-types.lo
+am_libnm_glib_la_OBJECTS = $(am__objects_4) $(am__objects_1)
libnm_glib_la_OBJECTS = $(am_libnm_glib_la_OBJECTS)
libnm_glib_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnm_glib_la_CFLAGS) \
@@ -381,12 +386,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -411,7 +419,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -456,12 +463,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -478,6 +489,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -505,11 +518,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -524,6 +542,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -586,6 +605,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -596,12 +616,17 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
- -I$(top_builddir)/libnm-util
+ -I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""libnm-glib"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(GLIB_CFLAGS)
BUILT_SOURCES = nm-vpn-plugin-glue.h nm-secret-agent-glue.h \
$(GLIB_GENERATED)
@@ -618,8 +643,6 @@ libdeprecated_nm_glib_la_SOURCES = \
libnm_glib.c
libdeprecated_nm_glib_la_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
$(AM_CPPFLAGS) \
-Wno-deprecated-declarations \
-Wno-deprecated
@@ -638,7 +661,8 @@ lib_LTLIBRARIES = libnm-glib.la libnm-glib-vpn.la
libnm_glib_la_CFLAGS = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(GUDEV_CFLAGS)
+ $(GUDEV_CFLAGS) \
+ -DNMRUNDIR=\"$(nmrundir)\"
libnmincludedir = $(includedir)/libnm-glib
libnmvpndir = $(includedir)/libnm-glib
@@ -653,8 +677,10 @@ libnminclude_HEADERS = \
nm-device-bt.h \
nm-device-olpc-mesh.h \
nm-device-bond.h \
+ nm-device-team.h \
nm-device-bridge.h \
nm-device-vlan.h \
+ nm-device-generic.h \
nm-access-point.h \
nm-ip4-config.h \
nm-device-modem.h \
@@ -679,6 +705,7 @@ libnmvpn_HEADERS = \
libnm_glib_la_csources = \
nm-object.c \
+ nm-dbus-helpers.c \
nm-client.c \
nm-device.c \
nm-device-ethernet.c \
@@ -688,8 +715,10 @@ libnm_glib_la_csources = \
nm-device-bt.c \
nm-device-olpc-mesh.c \
nm-device-bond.c \
+ nm-device-team.c \
nm-device-bridge.c \
nm-device-vlan.c \
+ nm-device-generic.c \
nm-access-point.c \
nm-ip4-config.c \
nm-device-modem.c \
@@ -705,8 +734,7 @@ libnm_glib_la_csources = \
nm-secret-agent.c \
nm-device-wimax.c \
nm-wimax-nsp.c \
- nm-glib-enum-types.c \
- nm-glib-marshal.c
+ nm-glib-enum-types.c
libnm_glib_la_private_headers = \
nm-object-private.h \
@@ -714,19 +742,17 @@ libnm_glib_la_private_headers = \
nm-types-private.h \
nm-object-cache.h \
nm-remote-connection-private.h \
- nm-glib-marshal.h
+ nm-dbus-helpers-private.h
libnm_glib_la_SOURCES = \
$(libnm_glib_la_csources) \
$(libnm_glib_la_private_headers)
GLIB_GENERATED = nm-glib-enum-types.h nm-glib-enum-types.c \
- nm-glib-marshal.h nm-glib-marshal.c nm-vpn-enum-types.h \
- nm-vpn-enum-types.c
+ nm-vpn-enum-types.h nm-vpn-enum-types.c
nm_glib_enum_types_sources = $(libnminclude_HEADERS)
GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
-nm_glib_marshal_sources = $(libnm_glib_la_SOURCES)
libnm_glib_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(builddir)/libdeprecated-nm-glib.la \
@@ -736,7 +762,7 @@ libnm_glib_la_LIBADD = \
SYMBOL_VIS_FILE = $(srcdir)/libnm-glib.ver
libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
- -version-info "10:0:6"
+ -version-info "12:0:8"
libnm_glib_test_SOURCES = libnm-glib-test.c
libnm_glib_test_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
@@ -751,7 +777,7 @@ nm_vpn_enum_types_sources = $(libnmvpn_HEADERS)
libnm_glib_vpn_la_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
libnm_glib_vpn_la_LIBADD = $(top_builddir)/libnm-util/libnm-util.la $(GLIB_LIBS) $(DBUS_LIBS)
libnm_glib_vpn_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib-vpn.ver \
- -version-info "2:0:1"
+ -version-info "3:0:2"
#####################################################
@@ -761,10 +787,11 @@ libnm_glib_test_la_CFLAGS = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
$(GUDEV_CFLAGS) \
- -DLIBNM_GLIB_TEST
+ -DLIBNM_GLIB_TEST \
+ -DNMRUNDIR=\"$(nmrundir)\"
libnm_glib_test_la_SOURCES = \
- $(li0bnminclude_HEADERS) \
+ $(libnminclude_HEADERS) \
$(libnm_glib_la_SOURCES)
libnm_glib_test_la_LIBADD = \
@@ -913,14 +940,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-access-point.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-active-connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-dbus-helpers.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-adsl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-bond.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-bridge.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-bt.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-ethernet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-generic.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-infiniband.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-modem.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-olpc-mesh.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-team.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-vlan.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-wifi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-wimax.Plo@am__quote@
@@ -928,7 +958,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-dhcp4-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-dhcp6-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-glib-enum-types.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-glib-marshal.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-ip4-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-ip6-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-object-cache.Plo@am__quote@
@@ -943,14 +972,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-access-point.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-active-connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-dbus-helpers.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-adsl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-bond.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-bridge.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-bt.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-generic.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-infiniband.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-modem.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-olpc-mesh.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-team.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-vlan.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-wimax.Plo@am__quote@
@@ -958,7 +990,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-glib-enum-types.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-glib-marshal.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-ip4-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-ip6-config.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-object-cache.Plo@am__quote@
@@ -1009,6 +1040,13 @@ libnm_glib_test_la-nm-object.lo: nm-object.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-object.lo `test -f 'nm-object.c' || echo '$(srcdir)/'`nm-object.c
+libnm_glib_test_la-nm-dbus-helpers.lo: nm-dbus-helpers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-dbus-helpers.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-dbus-helpers.Tpo -c -o libnm_glib_test_la-nm-dbus-helpers.lo `test -f 'nm-dbus-helpers.c' || echo '$(srcdir)/'`nm-dbus-helpers.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-dbus-helpers.Tpo $(DEPDIR)/libnm_glib_test_la-nm-dbus-helpers.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dbus-helpers.c' object='libnm_glib_test_la-nm-dbus-helpers.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-dbus-helpers.lo `test -f 'nm-dbus-helpers.c' || echo '$(srcdir)/'`nm-dbus-helpers.c
+
libnm_glib_test_la-nm-client.lo: nm-client.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-client.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-client.Tpo -c -o libnm_glib_test_la-nm-client.lo `test -f 'nm-client.c' || echo '$(srcdir)/'`nm-client.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-client.Tpo $(DEPDIR)/libnm_glib_test_la-nm-client.Plo
@@ -1072,6 +1110,13 @@ libnm_glib_test_la-nm-device-bond.lo: nm-device-bond.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-bond.lo `test -f 'nm-device-bond.c' || echo '$(srcdir)/'`nm-device-bond.c
+libnm_glib_test_la-nm-device-team.lo: nm-device-team.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-team.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-team.Tpo -c -o libnm_glib_test_la-nm-device-team.lo `test -f 'nm-device-team.c' || echo '$(srcdir)/'`nm-device-team.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-team.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-team.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-team.c' object='libnm_glib_test_la-nm-device-team.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-team.lo `test -f 'nm-device-team.c' || echo '$(srcdir)/'`nm-device-team.c
+
libnm_glib_test_la-nm-device-bridge.lo: nm-device-bridge.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-bridge.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-bridge.Tpo -c -o libnm_glib_test_la-nm-device-bridge.lo `test -f 'nm-device-bridge.c' || echo '$(srcdir)/'`nm-device-bridge.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-bridge.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-bridge.Plo
@@ -1086,6 +1131,13 @@ libnm_glib_test_la-nm-device-vlan.lo: nm-device-vlan.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-vlan.lo `test -f 'nm-device-vlan.c' || echo '$(srcdir)/'`nm-device-vlan.c
+libnm_glib_test_la-nm-device-generic.lo: nm-device-generic.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-generic.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-generic.Tpo -c -o libnm_glib_test_la-nm-device-generic.lo `test -f 'nm-device-generic.c' || echo '$(srcdir)/'`nm-device-generic.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-generic.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-generic.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-generic.c' object='libnm_glib_test_la-nm-device-generic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-generic.lo `test -f 'nm-device-generic.c' || echo '$(srcdir)/'`nm-device-generic.c
+
libnm_glib_test_la-nm-access-point.lo: nm-access-point.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-access-point.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-access-point.Tpo -c -o libnm_glib_test_la-nm-access-point.lo `test -f 'nm-access-point.c' || echo '$(srcdir)/'`nm-access-point.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-access-point.Tpo $(DEPDIR)/libnm_glib_test_la-nm-access-point.Plo
@@ -1198,13 +1250,6 @@ libnm_glib_test_la-nm-glib-enum-types.lo: nm-glib-enum-types.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-glib-enum-types.lo `test -f 'nm-glib-enum-types.c' || echo '$(srcdir)/'`nm-glib-enum-types.c
-libnm_glib_test_la-nm-glib-marshal.lo: nm-glib-marshal.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-glib-marshal.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-glib-marshal.Tpo -c -o libnm_glib_test_la-nm-glib-marshal.lo `test -f 'nm-glib-marshal.c' || echo '$(srcdir)/'`nm-glib-marshal.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-glib-marshal.Tpo $(DEPDIR)/libnm_glib_test_la-nm-glib-marshal.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-glib-marshal.c' object='libnm_glib_test_la-nm-glib-marshal.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-glib-marshal.lo `test -f 'nm-glib-marshal.c' || echo '$(srcdir)/'`nm-glib-marshal.c
-
libnm_glib_vpn_la-nm-vpn-plugin.lo: nm-vpn-plugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_vpn_la_CFLAGS) $(CFLAGS) -MT libnm_glib_vpn_la-nm-vpn-plugin.lo -MD -MP -MF $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin.Tpo -c -o libnm_glib_vpn_la-nm-vpn-plugin.lo `test -f 'nm-vpn-plugin.c' || echo '$(srcdir)/'`nm-vpn-plugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin.Tpo $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin.Plo
@@ -1240,6 +1285,13 @@ libnm_glib_la-nm-object.lo: nm-object.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-object.lo `test -f 'nm-object.c' || echo '$(srcdir)/'`nm-object.c
+libnm_glib_la-nm-dbus-helpers.lo: nm-dbus-helpers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-dbus-helpers.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-dbus-helpers.Tpo -c -o libnm_glib_la-nm-dbus-helpers.lo `test -f 'nm-dbus-helpers.c' || echo '$(srcdir)/'`nm-dbus-helpers.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-dbus-helpers.Tpo $(DEPDIR)/libnm_glib_la-nm-dbus-helpers.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dbus-helpers.c' object='libnm_glib_la-nm-dbus-helpers.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-dbus-helpers.lo `test -f 'nm-dbus-helpers.c' || echo '$(srcdir)/'`nm-dbus-helpers.c
+
libnm_glib_la-nm-client.lo: nm-client.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-client.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-client.Tpo -c -o libnm_glib_la-nm-client.lo `test -f 'nm-client.c' || echo '$(srcdir)/'`nm-client.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-client.Tpo $(DEPDIR)/libnm_glib_la-nm-client.Plo
@@ -1303,6 +1355,13 @@ libnm_glib_la-nm-device-bond.lo: nm-device-bond.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-device-bond.lo `test -f 'nm-device-bond.c' || echo '$(srcdir)/'`nm-device-bond.c
+libnm_glib_la-nm-device-team.lo: nm-device-team.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-device-team.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-device-team.Tpo -c -o libnm_glib_la-nm-device-team.lo `test -f 'nm-device-team.c' || echo '$(srcdir)/'`nm-device-team.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-device-team.Tpo $(DEPDIR)/libnm_glib_la-nm-device-team.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-team.c' object='libnm_glib_la-nm-device-team.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-device-team.lo `test -f 'nm-device-team.c' || echo '$(srcdir)/'`nm-device-team.c
+
libnm_glib_la-nm-device-bridge.lo: nm-device-bridge.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-device-bridge.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-device-bridge.Tpo -c -o libnm_glib_la-nm-device-bridge.lo `test -f 'nm-device-bridge.c' || echo '$(srcdir)/'`nm-device-bridge.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-device-bridge.Tpo $(DEPDIR)/libnm_glib_la-nm-device-bridge.Plo
@@ -1317,6 +1376,13 @@ libnm_glib_la-nm-device-vlan.lo: nm-device-vlan.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-device-vlan.lo `test -f 'nm-device-vlan.c' || echo '$(srcdir)/'`nm-device-vlan.c
+libnm_glib_la-nm-device-generic.lo: nm-device-generic.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-device-generic.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-device-generic.Tpo -c -o libnm_glib_la-nm-device-generic.lo `test -f 'nm-device-generic.c' || echo '$(srcdir)/'`nm-device-generic.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-device-generic.Tpo $(DEPDIR)/libnm_glib_la-nm-device-generic.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-generic.c' object='libnm_glib_la-nm-device-generic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-device-generic.lo `test -f 'nm-device-generic.c' || echo '$(srcdir)/'`nm-device-generic.c
+
libnm_glib_la-nm-access-point.lo: nm-access-point.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-access-point.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-access-point.Tpo -c -o libnm_glib_la-nm-access-point.lo `test -f 'nm-access-point.c' || echo '$(srcdir)/'`nm-access-point.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-access-point.Tpo $(DEPDIR)/libnm_glib_la-nm-access-point.Plo
@@ -1429,13 +1495,6 @@ libnm_glib_la-nm-glib-enum-types.lo: nm-glib-enum-types.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-glib-enum-types.lo `test -f 'nm-glib-enum-types.c' || echo '$(srcdir)/'`nm-glib-enum-types.c
-libnm_glib_la-nm-glib-marshal.lo: nm-glib-marshal.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-glib-marshal.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-glib-marshal.Tpo -c -o libnm_glib_la-nm-glib-marshal.lo `test -f 'nm-glib-marshal.c' || echo '$(srcdir)/'`nm-glib-marshal.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-glib-marshal.Tpo $(DEPDIR)/libnm_glib_la-nm-glib-marshal.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-glib-marshal.c' object='libnm_glib_la-nm-glib-marshal.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-glib-marshal.lo `test -f 'nm-glib-marshal.c' || echo '$(srcdir)/'`nm-glib-marshal.c
-
libnm_glib_test-libnm-glib-test.o: libnm-glib-test.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_CFLAGS) $(CFLAGS) -MT libnm_glib_test-libnm-glib-test.o -MD -MP -MF $(DEPDIR)/libnm_glib_test-libnm-glib-test.Tpo -c -o libnm_glib_test-libnm-glib-test.o `test -f 'libnm-glib-test.c' || echo '$(srcdir)/'`libnm-glib-test.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test-libnm-glib-test.Tpo $(DEPDIR)/libnm_glib_test-libnm-glib-test.Po
diff --git a/libnm-glib/libnm-glib-test.c b/libnm-glib/libnm-glib-test.c
index 4e80806fb..e38457f06 100644
--- a/libnm-glib/libnm-glib-test.c
+++ b/libnm-glib/libnm-glib-test.c
@@ -70,16 +70,16 @@ static gchar *
ip4_address_as_string (guint32 ip)
{
char buf[INET_ADDRSTRLEN+1];
- struct in_addr tmp_addr;
+ guint32 tmp_addr;
memset (&buf, '\0', sizeof (buf));
- tmp_addr.s_addr = ip;
+ tmp_addr = ip;
if (inet_ntop (AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN)) {
return g_strdup (buf);
} else {
g_warning ("%s: error converting IP4 address 0x%X",
- __func__, ntohl (tmp_addr.s_addr));
+ __func__, ntohl (tmp_addr));
return NULL;
}
}
@@ -173,7 +173,7 @@ dump_access_point (NMAccessPoint *ap)
g_print ("\tSsid: %s\n",
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)");
- str = nm_access_point_get_hw_address (ap);
+ str = nm_access_point_get_bssid (ap);
g_print ("\tMAC Address: %s\n", str);
g_print ("\tFlags: 0x%X\n", nm_access_point_get_flags (ap));
@@ -390,7 +390,9 @@ main (int argc, char *argv[])
{
NMClient *client;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
client = nm_client_new ();
if (!client) {
diff --git a/libnm-glib/libnm-glib-vpn.ver b/libnm-glib/libnm-glib-vpn.ver
index 9d2bad5e2..b2e763b2a 100644
--- a/libnm-glib/libnm-glib-vpn.ver
+++ b/libnm-glib/libnm-glib-vpn.ver
@@ -7,6 +7,7 @@ global:
nm_vpn_plugin_get_connection;
nm_vpn_plugin_get_state;
nm_vpn_plugin_get_type;
+ nm_vpn_plugin_secrets_required;
nm_vpn_plugin_set_ip4_config;
nm_vpn_plugin_set_login_banner;
nm_vpn_plugin_set_state;
diff --git a/libnm-glib/libnm-glib.pc.in b/libnm-glib/libnm-glib.pc.in
index 754c43daa..2b4e69967 100644
--- a/libnm-glib/libnm-glib.pc.in
+++ b/libnm-glib/libnm-glib.pc.in
@@ -6,7 +6,7 @@ includedir=@includedir@
Name: libnm-glib
Description: Convenience library for clients of NetworkManager
Version: @VERSION@
-Requires: NetworkManager >= @VERSION@ gobject-2.0 dbus-glib-1
+Requires: libnm-util >= @VERSION@ NetworkManager >= @VERSION@ gobject-2.0 dbus-glib-1
Cflags: -I${includedir}/libnm-glib
Libs: -L${libdir} -lnm-glib
diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver
index b7d33211e..982288e50 100644
--- a/libnm-glib/libnm-glib.ver
+++ b/libnm-glib/libnm-glib.ver
@@ -20,14 +20,21 @@ global:
nm_access_point_get_wpa_flags;
nm_access_point_new;
nm_active_connection_get_connection;
+ nm_active_connection_get_connection_type;
nm_active_connection_get_default6;
nm_active_connection_get_default;
nm_active_connection_get_devices;
+ nm_active_connection_get_dhcp4_config;
+ nm_active_connection_get_dhcp6_config;
+ nm_active_connection_get_id;
+ nm_active_connection_get_ip4_config;
+ nm_active_connection_get_ip6_config;
nm_active_connection_get_master;
nm_active_connection_get_specific_object;
nm_active_connection_get_state;
nm_active_connection_get_type;
nm_active_connection_get_uuid;
+ nm_active_connection_get_vpn;
nm_active_connection_new;
nm_client_activate_connection;
nm_client_add_and_activate_connection;
@@ -35,6 +42,8 @@ global:
nm_client_check_connectivity_async;
nm_client_check_connectivity_finish;
nm_client_deactivate_connection;
+ nm_client_error_get_type;
+ nm_client_error_quark;
nm_client_get_activating_connection;
nm_client_get_active_connections;
nm_client_get_connectivity;
@@ -45,6 +54,7 @@ global:
nm_client_get_manager_running;
nm_client_get_permission_result;
nm_client_get_primary_connection;
+ nm_client_get_startup;
nm_client_get_state;
nm_client_get_type;
nm_client_get_version;
@@ -94,7 +104,10 @@ global:
nm_device_bt_new;
nm_device_connection_compatible;
nm_device_connection_valid;
+ nm_device_disambiguate_names;
nm_device_disconnect;
+ nm_device_error_get_type;
+ nm_device_error_quark;
nm_device_ethernet_error_get_type;
nm_device_ethernet_error_quark;
nm_device_ethernet_get_carrier;
@@ -104,10 +117,16 @@ global:
nm_device_ethernet_get_type;
nm_device_ethernet_new;
nm_device_filter_connections;
+ nm_device_generic_error_get_type;
+ nm_device_generic_error_quark;
+ nm_device_generic_get_hw_address;
+ nm_device_generic_get_type;
+ nm_device_generic_new;
nm_device_get_active_connection;
nm_device_get_autoconnect;
nm_device_get_available_connections;
nm_device_get_capabilities;
+ nm_device_get_description;
nm_device_get_device_type;
nm_device_get_dhcp4_config;
nm_device_get_dhcp6_config;
@@ -115,15 +134,20 @@ global:
nm_device_get_driver_version;
nm_device_get_firmware_missing;
nm_device_get_firmware_version;
+ nm_device_get_hw_address;
nm_device_get_iface;
nm_device_get_ip4_config;
nm_device_get_ip6_config;
nm_device_get_ip_iface;
nm_device_get_managed;
+ nm_device_get_mtu;
+ nm_device_get_physical_port_id;
nm_device_get_product;
+ nm_device_get_setting_type;
nm_device_get_state;
nm_device_get_state_reason;
nm_device_get_type;
+ nm_device_get_type_description;
nm_device_get_udi;
nm_device_get_vendor;
nm_device_infiniband_error_get_type;
@@ -146,6 +170,13 @@ global:
nm_device_olpc_mesh_get_type;
nm_device_olpc_mesh_new;
nm_device_set_autoconnect;
+ nm_device_team_error_get_type;
+ nm_device_team_error_quark;
+ nm_device_team_get_carrier;
+ nm_device_team_get_hw_address;
+ nm_device_team_get_slaves;
+ nm_device_team_get_type;
+ nm_device_team_new;
nm_device_vlan_error_get_type;
nm_device_vlan_error_quark;
nm_device_vlan_get_carrier;
@@ -189,8 +220,10 @@ global:
nm_dhcp6_config_new;
nm_ip4_config_get_addresses;
nm_ip4_config_get_domains;
+ nm_ip4_config_get_gateway;
nm_ip4_config_get_nameservers;
nm_ip4_config_get_routes;
+ nm_ip4_config_get_searches;
nm_ip4_config_get_type;
nm_ip4_config_get_wins_servers;
nm_ip4_config_new;
@@ -198,8 +231,12 @@ global:
nm_ip6_address_object_array_get_type;
nm_ip6_config_get_addresses;
nm_ip6_config_get_domains;
+ nm_ip6_config_get_gateway;
+ nm_ip6_config_get_nameserver;
nm_ip6_config_get_nameservers;
+ nm_ip6_config_get_num_nameservers;
nm_ip6_config_get_routes;
+ nm_ip6_config_get_searches;
nm_ip6_config_get_type;
nm_ip6_config_new;
nm_ip6_route_object_array_get_type;
@@ -210,21 +247,31 @@ global:
nm_object_get_path;
nm_object_get_type;
nm_remote_connection_commit_changes;
+ nm_remote_connection_commit_changes_unsaved;
nm_remote_connection_delete;
+ nm_remote_connection_error_get_type;
+ nm_remote_connection_error_quark;
nm_remote_connection_get_secrets;
nm_remote_connection_get_type;
+ nm_remote_connection_get_unsaved;
nm_remote_connection_new;
+ nm_remote_connection_save;
nm_remote_settings_add_connection;
+ nm_remote_settings_add_connection_unsaved;
nm_remote_settings_error_get_type;
nm_remote_settings_error_quark;
+ nm_remote_settings_get_connection_by_id;
nm_remote_settings_get_connection_by_path;
nm_remote_settings_get_connection_by_uuid;
nm_remote_settings_get_type;
nm_remote_settings_list_connections;
+ nm_remote_settings_load_connections;
nm_remote_settings_new;
nm_remote_settings_new_async;
nm_remote_settings_new_finish;
+ nm_remote_settings_reload_connections;
nm_remote_settings_save_hostname;
+ nm_secret_agent_capabilities_get_type;
nm_secret_agent_delete_secrets;
nm_secret_agent_error_get_type;
nm_secret_agent_error_quark;
diff --git a/libnm-glib/libnm_glib.c b/libnm-glib/libnm_glib.c
index 1d7557861..a2a6d26ed 100644
--- a/libnm-glib/libnm_glib.c
+++ b/libnm-glib/libnm_glib.c
@@ -456,8 +456,7 @@ _libnm_glib_ctx_free (libnm_glib_ctx *ctx)
if (ctx->callbacks_lock)
g_mutex_free (ctx->callbacks_lock);
- g_slist_foreach (ctx->callbacks, (GFunc)g_free, NULL);
- g_slist_free (ctx->callbacks);
+ g_slist_free_full (ctx->callbacks, g_free);
if (ctx->thread)
g_thread_join (ctx->thread);
@@ -494,7 +493,10 @@ libnm_glib_init (void)
{
libnm_glib_ctx *ctx = NULL;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
+
if (!g_thread_supported ())
g_thread_init (NULL);
dbus_g_thread_init ();
diff --git a/libnm-glib/nm-access-point.c b/libnm-glib/nm-access-point.c
index d13a7d3c4..ca3f1bf2d 100644
--- a/libnm-glib/nm-access-point.c
+++ b/libnm-glib/nm-access-point.c
@@ -72,16 +72,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_FLAGS "Flags"
-#define DBUS_PROP_WPA_FLAGS "WpaFlags"
-#define DBUS_PROP_RSN_FLAGS "RsnFlags"
-#define DBUS_PROP_SSID "Ssid"
-#define DBUS_PROP_FREQUENCY "Frequency"
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_MODE "Mode"
-#define DBUS_PROP_MAX_BITRATE "MaxBitrate"
-#define DBUS_PROP_STRENGTH "Strength"
-
/**
* nm_access_point_new:
* @connection: the #DBusGConnection
@@ -194,7 +184,7 @@ nm_access_point_get_frequency (NMAccessPoint *ap)
* nm_access_point_get_bssid:
* @ap: a #NMAccessPoint
*
- * Gets the Basic Service Set ID (BSSID) of the WiFi access point.
+ * Gets the Basic Service Set ID (BSSID) of the Wi-Fi access point.
*
* Returns: the BSSID of the access point. This is an internal string and must
* not be modified or freed.
@@ -246,9 +236,9 @@ nm_access_point_get_mode (NMAccessPoint *ap)
* nm_access_point_get_max_bitrate:
* @ap: a #NMAccessPoint
*
- * Gets the maximum bit rate of the access point.
+ * Gets the maximum bit rate of the access point in kbit/s.
*
- * Returns: the maximum bit rate
+ * Returns: the maximum bit rate (kbit/s)
**/
guint32
nm_access_point_get_max_bitrate (NMAccessPoint *ap)
@@ -281,12 +271,12 @@ nm_access_point_get_strength (NMAccessPoint *ap)
* @ap: an #NMAccessPoint to validate @connection against
* @connection: an #NMConnection to validate against @ap
*
- * Validates a given connection against a given WiFi access point to ensure that
+ * Validates a given connection against a given Wi-Fi access point to ensure that
* the connection may be activated with that AP. The connection must match the
* @ap's SSID, (if given) BSSID, and other attributes like security settings,
* channel, band, etc.
*
- * Returns: %TRUE if the connection may be activated with this WiFi AP,
+ * Returns: %TRUE if the connection may be activated with this Wi-Fi AP,
* %FALSE if it cannot be.
**/
gboolean
@@ -539,12 +529,7 @@ constructed (GObject *object)
G_OBJECT_CLASS (nm_access_point_parent_class)->constructed (object);
priv = NM_ACCESS_POINT_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_ACCESS_POINT);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_ACCESS_POINT);
register_properties (NM_ACCESS_POINT (object));
}
@@ -675,7 +660,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
/**
* NMAccessPoint:max-bitrate:
*
- * The maximum bit rate of the access point.
+ * The maximum bit rate of the access point in kbit/s.
**/
g_object_class_install_property
(object_class, PROP_MAX_BITRATE,
diff --git a/libnm-glib/nm-access-point.h b/libnm-glib/nm-access-point.h
index 76275f004..4862e6b70 100644
--- a/libnm-glib/nm-access-point.h
+++ b/libnm-glib/nm-access-point.h
@@ -90,6 +90,7 @@ gboolean nm_access_point_connection_valid (NMAccessPoint *ap,
NMConnection *connection);
/* DEPRECATED */
+NM_DEPRECATED_IN_0_9_10
const char * nm_access_point_get_hw_address (NMAccessPoint *ap);
G_END_DECLS
diff --git a/libnm-glib/nm-active-connection.c b/libnm-glib/nm-active-connection.c
index f170121b5..bca21b4d6 100644
--- a/libnm-glib/nm-active-connection.c
+++ b/libnm-glib/nm-active-connection.c
@@ -17,7 +17,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
@@ -32,6 +32,7 @@
#include "nm-connection.h"
#include "nm-vpn-connection.h"
#include "nm-glib-compat.h"
+#include "nm-dbus-helpers-private.h"
static GType _nm_active_connection_type_for_path (DBusGConnection *connection,
const char *path);
@@ -52,38 +53,43 @@ typedef struct {
DBusGProxy *proxy;
char *connection;
+ char *id;
char *uuid;
+ char *type;
char *specific_object;
GPtrArray *devices;
NMActiveConnectionState state;
gboolean is_default;
+ NMIP4Config *ip4_config;
+ NMDHCP4Config *dhcp4_config;
gboolean is_default6;
+ NMIP6Config *ip6_config;
+ NMDHCP6Config *dhcp6_config;
+ gboolean is_vpn;
char *master;
} NMActiveConnectionPrivate;
enum {
PROP_0,
PROP_CONNECTION,
+ PROP_ID,
PROP_UUID,
+ PROP_TYPE,
PROP_SPECIFIC_OBJECT,
PROP_DEVICES,
PROP_STATE,
PROP_DEFAULT,
+ PROP_IP4_CONFIG,
+ PROP_DHCP4_CONFIG,
PROP_DEFAULT6,
+ PROP_IP6_CONFIG,
+ PROP_DHCP6_CONFIG,
+ PROP_VPN,
PROP_MASTER,
LAST_PROP
};
-#define DBUS_PROP_CONNECTION "Connection"
-#define DBUS_PROP_UUID "Uuid"
-#define DBUS_PROP_SPECIFIC_OBJECT "SpecificObject"
-#define DBUS_PROP_DEVICES "Devices"
-#define DBUS_PROP_STATE "State"
-#define DBUS_PROP_DEFAULT "Default"
-#define DBUS_PROP_DEFAULT6 "Default6"
-#define DBUS_PROP_MASTER "Master"
-
/**
* nm_active_connection_new:
* @connection: the #DBusGConnection
@@ -111,13 +117,10 @@ _nm_active_connection_type_for_path (DBusGConnection *connection,
{
DBusGProxy *proxy;
GError *error = NULL;
- GValue value = {0,};
+ GValue value = G_VALUE_INIT;
GType type;
- proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- path,
- "org.freedesktop.DBus.Properties");
+ proxy = _nm_dbus_new_proxy_for_connection (connection, path, "org.freedesktop.DBus.Properties");
if (!proxy) {
g_warning ("%s: couldn't create D-Bus object proxy.", __func__);
return G_TYPE_INVALID;
@@ -194,8 +197,7 @@ _nm_active_connection_type_for_path_async (DBusGConnection *connection,
async_data->callback = callback;
async_data->user_data = user_data;
- proxy = dbus_g_proxy_new_for_name (connection, NM_DBUS_SERVICE, path,
- "org.freedesktop.DBus.Properties");
+ proxy = _nm_dbus_new_proxy_for_connection (connection, path, "org.freedesktop.DBus.Properties");
dbus_g_proxy_begin_call (proxy, "Get",
async_got_type, async_data, NULL,
G_TYPE_STRING, NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
@@ -207,10 +209,13 @@ _nm_active_connection_type_for_path_async (DBusGConnection *connection,
* nm_active_connection_get_connection:
* @connection: a #NMActiveConnection
*
- * Gets the #NMConnection<!-- -->'s DBus object path.
+ * Gets the #NMConnection's DBus object path. This is often used with
+ * nm_remote_settings_get_connection_by_path() to retrieve the
+ * #NMRemoteConnection object that describes the connection.
*
- * Returns: the object path of the #NMConnection inside of #NMActiveConnection.
- * This is the internal string used by the connection, and must not be modified.
+ * Returns: the object path of the #NMConnection which this #NMActiveConnection
+ * is an active instance of. This is the internal string used by the
+ * connection, and must not be modified.
**/
const char *
nm_active_connection_get_connection (NMActiveConnection *connection)
@@ -222,10 +227,30 @@ nm_active_connection_get_connection (NMActiveConnection *connection)
}
/**
+ * nm_active_connection_get_id:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the #NMConnection's ID.
+ *
+ * Returns: the ID of the #NMConnection that backs the #NMActiveConnection.
+ * This is the internal string used by the connection, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_active_connection_get_id (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (connection));
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->id;
+}
+
+/**
* nm_active_connection_get_uuid:
* @connection: a #NMActiveConnection
*
- * Gets the #NMConnection<!-- -->'s UUID.
+ * Gets the #NMConnection's UUID.
*
* Returns: the UUID of the #NMConnection that backs the #NMActiveConnection.
* This is the internal string used by the connection, and must not be modified.
@@ -240,6 +265,26 @@ nm_active_connection_get_uuid (NMActiveConnection *connection)
}
/**
+ * nm_active_connection_get_connection_type:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the #NMConnection's type.
+ *
+ * Returns: the type of the #NMConnection that backs the #NMActiveConnection.
+ * This is the internal string used by the connection, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_active_connection_get_connection_type (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (connection));
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->type;
+}
+
+/**
* nm_active_connection_get_specific_object:
* @connection: a #NMActiveConnection
*
@@ -261,9 +306,9 @@ nm_active_connection_get_specific_object (NMActiveConnection *connection)
* nm_active_connection_get_devices:
* @connection: a #NMActiveConnection
*
- * Gets the #NMDevice<!-- -->s used for the active connections.
+ * Gets the #NMDevices used for the active connections.
*
- * Returns: (element-type NMClient.Device): the #GPtrArray containing #NMDevice<!-- -->s.
+ * Returns: (element-type NMClient.Device): the #GPtrArray containing #NMDevices.
* This is the internal copy used by the connection, and must not be modified.
**/
const GPtrArray *
@@ -311,6 +356,49 @@ nm_active_connection_get_default (NMActiveConnection *connection)
}
/**
+ * nm_active_connection_get_ip4_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current #NMIP4Config associated with the #NMActiveConnection.
+ *
+ * Returns: (transfer none): the #NMIP4Config, or %NULL if the
+ * connection is not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ * state.
+ *
+ * Since: 0.9.10
+ **/
+NMIP4Config *
+nm_active_connection_get_ip4_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (connection));
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->ip4_config;
+}
+
+/**
+ * nm_active_connection_get_dhcp4_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current #NMDHCP4Config (if any) associated with the
+ * #NMActiveConnection.
+ *
+ * Returns: (transfer none): the #NMDHCP4Config, or %NULL if the
+ * connection does not use DHCP, or is not in the
+ * %NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ *
+ * Since: 0.9.10
+ **/
+NMDHCP4Config *
+nm_active_connection_get_dhcp4_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (connection));
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->dhcp4_config;
+}
+
+/**
* nm_active_connection_get_default6:
* @connection: a #NMActiveConnection
*
@@ -329,6 +417,68 @@ nm_active_connection_get_default6 (NMActiveConnection *connection)
}
/**
+ * nm_active_connection_get_ip6_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current #NMIP6Config associated with the #NMActiveConnection.
+ *
+ * Returns: (transfer none): the #NMIP6Config, or %NULL if the
+ * connection is not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ * state.
+ *
+ * Since: 0.9.10
+ **/
+NMIP6Config *
+nm_active_connection_get_ip6_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (connection));
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->ip6_config;
+}
+
+/**
+ * nm_active_connection_get_dhcp6_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current #NMDHCP6Config (if any) associated with the
+ * #NMActiveConnection.
+ *
+ * Returns: (transfer none): the #NMDHCP6Config, or %NULL if the
+ * connection does not use DHCPv6, or is not in the
+ * %NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ *
+ * Since: 0.9.10
+ **/
+NMDHCP6Config *
+nm_active_connection_get_dhcp6_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (connection));
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->dhcp6_config;
+}
+
+/**
+ * nm_active_connection_get_vpn:
+ * @connection: a #NMActiveConnection
+ *
+ * Whether the active connection is a VPN connection.
+ *
+ * Returns: %TRUE if the active connection is a VPN connection
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_active_connection_get_vpn (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), FALSE);
+
+ _nm_object_ensure_inited (NM_OBJECT (connection));
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->is_vpn;
+}
+
+/**
* nm_active_connection_get_master:
* @connection: a #NMActiveConnection
*
@@ -357,11 +507,16 @@ dispose (GObject *object)
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
if (priv->devices) {
- g_ptr_array_foreach (priv->devices, (GFunc) g_object_unref, NULL);
+ g_ptr_array_set_free_func (priv->devices, g_object_unref);
g_ptr_array_free (priv->devices, TRUE);
priv->devices = NULL;
}
+ g_clear_object (&priv->ip4_config);
+ g_clear_object (&priv->dhcp4_config);
+ g_clear_object (&priv->ip6_config);
+ g_clear_object (&priv->dhcp6_config);
+
g_clear_object (&priv->proxy);
G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object);
@@ -373,7 +528,9 @@ finalize (GObject *object)
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
g_free (priv->connection);
+ g_free (priv->id);
g_free (priv->uuid);
+ g_free (priv->type);
g_free (priv->specific_object);
g_free (priv->master);
@@ -394,9 +551,15 @@ get_property (GObject *object,
case PROP_CONNECTION:
g_value_set_string (value, nm_active_connection_get_connection (self));
break;
+ case PROP_ID:
+ g_value_set_string (value, nm_active_connection_get_id (self));
+ break;
case PROP_UUID:
g_value_set_string (value, nm_active_connection_get_uuid (self));
break;
+ case PROP_TYPE:
+ g_value_set_string (value, nm_active_connection_get_connection_type (self));
+ break;
case PROP_SPECIFIC_OBJECT:
g_value_set_boxed (value, nm_active_connection_get_specific_object (self));
break;
@@ -409,9 +572,24 @@ get_property (GObject *object,
case PROP_DEFAULT:
g_value_set_boolean (value, nm_active_connection_get_default (self));
break;
+ case PROP_IP4_CONFIG:
+ g_value_set_object (value, nm_active_connection_get_ip4_config (self));
+ break;
+ case PROP_DHCP4_CONFIG:
+ g_value_set_object (value, nm_active_connection_get_dhcp4_config (self));
+ break;
case PROP_DEFAULT6:
g_value_set_boolean (value, nm_active_connection_get_default6 (self));
break;
+ case PROP_IP6_CONFIG:
+ g_value_set_object (value, nm_active_connection_get_ip6_config (self));
+ break;
+ case PROP_DHCP6_CONFIG:
+ g_value_set_object (value, nm_active_connection_get_dhcp6_config (self));
+ break;
+ case PROP_VPN:
+ g_value_set_boolean (value, nm_active_connection_get_vpn (self));
+ break;
case PROP_MASTER:
g_value_set_string (value, nm_active_connection_get_master (self));
break;
@@ -427,17 +605,21 @@ register_properties (NMActiveConnection *connection)
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (connection);
const NMPropertiesInfo property_info[] = {
{ NM_ACTIVE_CONNECTION_CONNECTION, &priv->connection },
+ { NM_ACTIVE_CONNECTION_ID, &priv->id },
{ NM_ACTIVE_CONNECTION_UUID, &priv->uuid },
+ { NM_ACTIVE_CONNECTION_TYPE, &priv->type },
{ NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, &priv->specific_object },
{ NM_ACTIVE_CONNECTION_DEVICES, &priv->devices, NULL, NM_TYPE_DEVICE },
{ NM_ACTIVE_CONNECTION_STATE, &priv->state },
{ NM_ACTIVE_CONNECTION_DEFAULT, &priv->is_default },
+ { NM_ACTIVE_CONNECTION_IP4_CONFIG, &priv->ip4_config, NULL, NM_TYPE_IP4_CONFIG },
+ { NM_ACTIVE_CONNECTION_DHCP4_CONFIG, &priv->dhcp4_config, NULL, NM_TYPE_DHCP4_CONFIG },
{ NM_ACTIVE_CONNECTION_DEFAULT6, &priv->is_default6 },
+ { NM_ACTIVE_CONNECTION_IP6_CONFIG, &priv->ip6_config, NULL, NM_TYPE_IP6_CONFIG },
+ { NM_ACTIVE_CONNECTION_DHCP6_CONFIG, &priv->dhcp6_config, NULL, NM_TYPE_DHCP6_CONFIG },
+ { NM_ACTIVE_CONNECTION_VPN, &priv->is_vpn },
{ NM_ACTIVE_CONNECTION_MASTER, &priv->master },
- /* not tracked after construction time */
- { "vpn", NULL },
-
{ NULL },
};
@@ -449,17 +631,11 @@ register_properties (NMActiveConnection *connection)
static void
constructed (GObject *object)
{
- NMActiveConnectionPrivate *priv;
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_active_connection_parent_class)->constructed (object);
- priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_ACTIVE_CONNECTION);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_ACTIVE_CONNECTION);
register_properties (NM_ACTIVE_CONNECTION (object));
}
@@ -493,6 +669,21 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
G_PARAM_READABLE));
/**
+ * NMActiveConnection:id:
+ *
+ * The active connection's ID
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ID,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_ID,
+ "ID",
+ "ID",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
* NMActiveConnection:uuid:
*
* The active connection's UUID
@@ -506,6 +697,21 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
G_PARAM_READABLE));
/**
+ * NMActiveConnection:type:
+ *
+ * The active connection's type
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_TYPE,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE,
+ "Type",
+ "Type",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
* NMActiveConnection:specific-object:
*
* The specific object's path of the active connection.
@@ -560,6 +766,36 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
G_PARAM_READABLE));
/**
+ * NMActiveConnection:ip4-config:
+ *
+ * The #NMIP4Config of the connection.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP4_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_IP4_CONFIG,
+ "IP4 Config",
+ "IP4 Config",
+ NM_TYPE_IP4_CONFIG,
+ G_PARAM_READABLE));
+
+ /**
+ * NMActiveConnection:dhcp4-config:
+ *
+ * The #NMDHCP4Config of the connection.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DHCP4_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP4_CONFIG,
+ "DHCP4 Config",
+ "DHCP4 Config",
+ NM_TYPE_DHCP4_CONFIG,
+ G_PARAM_READABLE));
+
+ /**
* NMActiveConnection:default6:
*
* Whether the active connection is the default IPv6 one.
@@ -573,6 +809,51 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
G_PARAM_READABLE));
/**
+ * NMActiveConnection:ip6-config:
+ *
+ * The #NMIP6Config of the connection.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP6_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_IP6_CONFIG,
+ "IP6 Config",
+ "IP6 Config",
+ NM_TYPE_IP6_CONFIG,
+ G_PARAM_READABLE));
+
+ /**
+ * NMActiveConnection:dhcp6-config:
+ *
+ * The #NMDHCP6Config of the connection.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DHCP6_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP6_CONFIG,
+ "DHCP6 Config",
+ "DHCP6 Config",
+ NM_TYPE_DHCP6_CONFIG,
+ G_PARAM_READABLE));
+
+ /**
+ * NMActiveConnection:vpn:
+ *
+ * Whether the active connection is a VPN connection.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VPN,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN,
+ "VPN",
+ "Is a VPN connection",
+ FALSE,
+ G_PARAM_READABLE));
+
+ /**
* NMActiveConnection:master:
*
* The path of the master device if one exists.
diff --git a/libnm-glib/nm-active-connection.h b/libnm-glib/nm-active-connection.h
index c6777f80e..b15e8340c 100644
--- a/libnm-glib/nm-active-connection.h
+++ b/libnm-glib/nm-active-connection.h
@@ -17,7 +17,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
@@ -29,6 +29,10 @@
#include "nm-object.h"
#include <nm-connection.h>
#include <NetworkManager.h>
+#include "nm-ip4-config.h"
+#include "nm-dhcp4-config.h"
+#include "nm-ip6-config.h"
+#include "nm-dhcp6-config.h"
G_BEGIN_DECLS
@@ -40,12 +44,19 @@ G_BEGIN_DECLS
#define NM_ACTIVE_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionClass))
#define NM_ACTIVE_CONNECTION_CONNECTION "connection"
+#define NM_ACTIVE_CONNECTION_ID "id"
#define NM_ACTIVE_CONNECTION_UUID "uuid"
+#define NM_ACTIVE_CONNECTION_TYPE "type"
#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT "specific-object"
#define NM_ACTIVE_CONNECTION_DEVICES "devices"
#define NM_ACTIVE_CONNECTION_STATE "state"
#define NM_ACTIVE_CONNECTION_DEFAULT "default"
+#define NM_ACTIVE_CONNECTION_IP4_CONFIG "ip4-config"
+#define NM_ACTIVE_CONNECTION_DHCP4_CONFIG "dhcp4-config"
#define NM_ACTIVE_CONNECTION_DEFAULT6 "default6"
+#define NM_ACTIVE_CONNECTION_IP6_CONFIG "ip6-config"
+#define NM_ACTIVE_CONNECTION_DHCP6_CONFIG "dhcp6-config"
+#define NM_ACTIVE_CONNECTION_VPN "vpn"
#define NM_ACTIVE_CONNECTION_MASTER "master"
typedef struct {
@@ -69,13 +80,27 @@ GType nm_active_connection_get_type (void);
GObject *nm_active_connection_new (DBusGConnection *connection, const char *path);
const char * nm_active_connection_get_connection (NMActiveConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_active_connection_get_id (NMActiveConnection *connection);
const char * nm_active_connection_get_uuid (NMActiveConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_active_connection_get_connection_type (NMActiveConnection *connection);
const char * nm_active_connection_get_specific_object (NMActiveConnection *connection);
const GPtrArray *nm_active_connection_get_devices (NMActiveConnection *connection);
NMActiveConnectionState nm_active_connection_get_state (NMActiveConnection *connection);
-gboolean nm_active_connection_get_default (NMActiveConnection *connection);
-gboolean nm_active_connection_get_default6 (NMActiveConnection *connection);
const char * nm_active_connection_get_master (NMActiveConnection *connection);
+gboolean nm_active_connection_get_default (NMActiveConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMIP4Config * nm_active_connection_get_ip4_config (NMActiveConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMDHCP4Config *nm_active_connection_get_dhcp4_config (NMActiveConnection *connection);
+gboolean nm_active_connection_get_default6 (NMActiveConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMIP6Config * nm_active_connection_get_ip6_config (NMActiveConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMDHCP6Config *nm_active_connection_get_dhcp6_config (NMActiveConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_active_connection_get_vpn (NMActiveConnection *connection);
G_END_DECLS
diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c
index 658a39950..379c78790 100644
--- a/libnm-glib/nm-client.c
+++ b/libnm-glib/nm-client.c
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
#include <dbus/dbus-glib.h>
@@ -29,7 +29,6 @@
#include "nm-device-ethernet.h"
#include "nm-device-wifi.h"
#include "nm-device-private.h"
-#include "nm-glib-marshal.h"
#include "nm-types-private.h"
#include "nm-object-private.h"
#include "nm-active-connection.h"
@@ -58,6 +57,7 @@ typedef struct {
gboolean manager_running;
char *version;
NMState state;
+ gboolean startup;
GPtrArray *devices;
GPtrArray *active_connections;
NMConnectivityState connectivity;
@@ -87,6 +87,7 @@ enum {
PROP_0,
PROP_VERSION,
PROP_STATE,
+ PROP_STARTUP,
PROP_MANAGER_RUNNING,
PROP_NETWORKING_ENABLED,
PROP_WIRELESS_ENABLED,
@@ -99,6 +100,7 @@ enum {
PROP_CONNECTIVITY,
PROP_PRIMARY_CONNECTION,
PROP_ACTIVATING_CONNECTION,
+ PROP_DEVICES,
LAST_PROP
};
@@ -119,8 +121,28 @@ static void proxy_name_owner_changed (DBusGProxy *proxy,
const char *new_owner,
gpointer user_data);
-static void client_device_added (NMObject *client, NMObject *device);
-static void client_device_removed (NMObject *client, NMObject *device);
+/**********************************************************************/
+
+/**
+ * nm_client_error_quark:
+ *
+ * Registers an error quark for #NMClient if necessary.
+ *
+ * Returns: the error quark used for #NMClient errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_client_error_quark (void)
+{
+ static GQuark quark;
+
+ if (G_UNLIKELY (!quark))
+ quark = g_quark_from_static_string ("nm-client-error-quark");
+ return quark;
+}
+
+/**********************************************************************/
static void
nm_client_init (NMClient *client)
@@ -159,6 +181,7 @@ register_properties (NMClient *client)
const NMPropertiesInfo property_info[] = {
{ NM_CLIENT_VERSION, &priv->version },
{ NM_CLIENT_STATE, &priv->state },
+ { NM_CLIENT_STARTUP, &priv->startup },
{ NM_CLIENT_NETWORKING_ENABLED, &priv->networking_enabled },
{ NM_CLIENT_WIRELESS_ENABLED, &priv->wireless_enabled },
{ NM_CLIENT_WIRELESS_HARDWARE_ENABLED, &priv->wireless_hw_enabled },
@@ -170,20 +193,13 @@ register_properties (NMClient *client)
{ NM_CLIENT_CONNECTIVITY, &priv->connectivity },
{ NM_CLIENT_PRIMARY_CONNECTION, &priv->primary_connection, NULL, NM_TYPE_ACTIVE_CONNECTION },
{ NM_CLIENT_ACTIVATING_CONNECTION, &priv->activating_connection, NULL, NM_TYPE_ACTIVE_CONNECTION },
+ { NM_CLIENT_DEVICES, &priv->devices, NULL, NM_TYPE_DEVICE, "device" },
{ NULL },
};
_nm_object_register_properties (NM_OBJECT (client),
priv->client_proxy,
property_info);
-
- _nm_object_register_pseudo_property (NM_OBJECT (client),
- priv->client_proxy,
- "Devices",
- &priv->devices,
- NM_TYPE_DEVICE,
- client_device_added,
- client_device_removed);
}
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
@@ -349,7 +365,7 @@ client_recheck_permissions (DBusGProxy *proxy, gpointer user_data)
* nm_device_ethernet_get_hw_address().
*
* Returns: (transfer none) (element-type NMClient.Device): a #GPtrArray
- * containing all the #NMDevice<!-- -->s. The returned array is owned by the
+ * containing all the #NMDevices. The returned array is owned by the
* #NMClient object and should not be modified.
**/
const GPtrArray *
@@ -436,12 +452,15 @@ typedef struct {
NMClientAddActivateFn add_act_fn;
char *active_path;
char *new_connection_path;
+ guint idle_id;
gpointer user_data;
} ActivateInfo;
static void
activate_info_free (ActivateInfo *info)
{
+ if (info->idle_id)
+ g_source_remove (info->idle_id);
g_free (info->active_path);
g_free (info->new_connection_path);
memset (info, 0, sizeof (*info));
@@ -546,15 +565,32 @@ activate_cb (DBusGProxy *proxy,
}
}
+static gboolean
+activate_nm_not_running (gpointer user_data)
+{
+ ActivateInfo *info = user_data;
+ GError *error;
+
+ info->idle_id = 0;
+
+ error = g_error_new_literal (NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING,
+ "NetworkManager is not running");
+ activate_info_complete (info, NULL, error);
+ activate_info_free (info);
+ g_clear_error (&error);
+ return FALSE;
+}
+
/**
* nm_client_activate_connection:
* @client: a #NMClient
- * @connection: an #NMConnection
+ * @connection: (allow-none): an #NMConnection
* @device: (allow-none): the #NMDevice
* @specific_object: (allow-none): the object path of a connection-type-specific
* object this activation should use. This parameter is currently ignored for
* wired and mobile broadband connections, and the value of %NULL should be used
- * (ie, no specific object). For WiFi or WiMAX connections, pass the object
+ * (ie, no specific object). For Wi-Fi or WiMAX connections, pass the object
* path of a #NMAccessPoint or #NMWimaxNsp owned by @device, which you can
* get using nm_object_get_path(), and which will be used to complete the
* details of the newly added connection.
@@ -564,10 +600,13 @@ activate_cb (DBusGProxy *proxy,
* Starts a connection to a particular network using the configuration settings
* from @connection and the network device @device. Certain connection types
* also take a "specific object" which is the object path of a connection-
- * specific object, like an #NMAccessPoint for WiFi connections, or an
+ * specific object, like an #NMAccessPoint for Wi-Fi connections, or an
* #NMWimaxNsp for WiMAX connections, to which you wish to connect. If the
* specific object is not given, NetworkManager can, in some cases, automatically
* determine which network to connect to given the settings in @connection.
+ *
+ * If @connection is not given for a device-based activation, NetworkManager
+ * picks the best available connection for the device and activates it.
**/
void
nm_client_activate_connection (NMClient *client,
@@ -583,7 +622,8 @@ nm_client_activate_connection (NMClient *client,
g_return_if_fail (NM_IS_CLIENT (client));
if (device)
g_return_if_fail (NM_IS_DEVICE (device));
- g_return_if_fail (NM_IS_CONNECTION (connection));
+ if (connection)
+ g_return_if_fail (NM_IS_CONNECTION (connection));
info = g_slice_new0 (ActivateInfo);
info->act_fn = callback;
@@ -593,9 +633,14 @@ nm_client_activate_connection (NMClient *client,
priv = NM_CLIENT_GET_PRIVATE (client);
priv->pending_activations = g_slist_prepend (priv->pending_activations, info);
+ if (priv->manager_running == FALSE) {
+ info->idle_id = g_idle_add (activate_nm_not_running, info);
+ return;
+ }
+
dbus_g_proxy_begin_call (priv->client_proxy, "ActivateConnection",
activate_cb, info, NULL,
- DBUS_TYPE_G_OBJECT_PATH, nm_connection_get_path (connection),
+ DBUS_TYPE_G_OBJECT_PATH, connection ? nm_connection_get_path (connection) : "/",
DBUS_TYPE_G_OBJECT_PATH, device ? nm_object_get_path (NM_OBJECT (device)) : "/",
DBUS_TYPE_G_OBJECT_PATH, specific_object ? specific_object : "/",
G_TYPE_INVALID);
@@ -635,7 +680,7 @@ add_activate_cb (DBusGProxy *proxy,
* @specific_object: (allow-none): the object path of a connection-type-specific
* object this activation should use. This parameter is currently ignored for
* wired and mobile broadband connections, and the value of %NULL should be used
- * (ie, no specific object). For WiFi or WiMAX connections, pass the object
+ * (ie, no specific object). For Wi-Fi or WiMAX connections, pass the object
* path of a #NMAccessPoint or #NMWimaxNsp owned by @device, which you can
* get using nm_object_get_path(), and which will be used to complete the
* details of the newly added connection.
@@ -675,12 +720,16 @@ nm_client_add_and_activate_connection (NMClient *client,
priv = NM_CLIENT_GET_PRIVATE (client);
priv->pending_activations = g_slist_prepend (priv->pending_activations, info);
- dbus_g_proxy_begin_call (priv->client_proxy, "AddAndActivateConnection",
- add_activate_cb, info, NULL,
- DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, hash,
- DBUS_TYPE_G_OBJECT_PATH, nm_object_get_path (NM_OBJECT (device)),
- DBUS_TYPE_G_OBJECT_PATH, specific_object ? specific_object : "/",
- G_TYPE_INVALID);
+ if (priv->manager_running) {
+ dbus_g_proxy_begin_call (priv->client_proxy, "AddAndActivateConnection",
+ add_activate_cb, info, NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, hash,
+ DBUS_TYPE_G_OBJECT_PATH, nm_object_get_path (NM_OBJECT (device)),
+ DBUS_TYPE_G_OBJECT_PATH, specific_object ? specific_object : "/",
+ G_TYPE_INVALID);
+ } else
+ info->idle_id = g_idle_add (activate_nm_not_running, info);
+
g_hash_table_unref (hash);
}
@@ -714,8 +763,10 @@ nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active)
g_return_if_fail (NM_IS_CLIENT (client));
g_return_if_fail (NM_IS_ACTIVE_CONNECTION (active));
- // FIXME: return errors
priv = NM_CLIENT_GET_PRIVATE (client);
+ if (!priv->manager_running)
+ return;
+
path = nm_object_get_path (NM_OBJECT (active));
if (!dbus_g_proxy_call (priv->client_proxy, "DeactivateConnection", &error,
DBUS_TYPE_G_OBJECT_PATH, path,
@@ -733,7 +784,7 @@ nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active)
* Gets the active connections.
*
* Returns: (transfer none) (element-type NMClient.ActiveConnection): a #GPtrArray
- * containing all the active #NMActiveConnection<!-- -->s.
+ * containing all the active #NMActiveConnections.
* The returned array is owned by the client and should not be modified.
**/
const GPtrArray *
@@ -779,17 +830,20 @@ nm_client_wireless_get_enabled (NMClient *client)
void
nm_client_wireless_set_enabled (NMClient *client, gboolean enabled)
{
- GValue value = {0,};
+ GValue value = G_VALUE_INIT;
g_return_if_fail (NM_IS_CLIENT (client));
+ if (!NM_CLIENT_GET_PRIVATE (client)->manager_running)
+ return;
+
g_value_init (&value, G_TYPE_BOOLEAN);
g_value_set_boolean (&value, enabled);
_nm_object_set_property (NM_OBJECT (client),
- NM_DBUS_INTERFACE,
- "WirelessEnabled",
- &value);
+ NM_DBUS_INTERFACE,
+ "WirelessEnabled",
+ &value);
}
/**
@@ -836,10 +890,13 @@ nm_client_wwan_get_enabled (NMClient *client)
void
nm_client_wwan_set_enabled (NMClient *client, gboolean enabled)
{
- GValue value = {0,};
+ GValue value = G_VALUE_INIT;
g_return_if_fail (NM_IS_CLIENT (client));
+ if (!NM_CLIENT_GET_PRIVATE (client)->manager_running)
+ return;
+
g_value_init (&value, G_TYPE_BOOLEAN);
g_value_set_boolean (&value, enabled);
@@ -893,10 +950,13 @@ nm_client_wimax_get_enabled (NMClient *client)
void
nm_client_wimax_set_enabled (NMClient *client, gboolean enabled)
{
- GValue value = {0,};
+ GValue value = G_VALUE_INIT;
g_return_if_fail (NM_IS_CLIENT (client));
+ if (!NM_CLIENT_GET_PRIVATE (client)->manager_running)
+ return;
+
g_value_init (&value, G_TYPE_BOOLEAN);
g_value_set_boolean (&value, enabled);
@@ -964,6 +1024,27 @@ nm_client_get_state (NMClient *client)
}
/**
+ * nm_client_get_startup:
+ * @client: a #NMClient
+ *
+ * Tests whether the daemon is still in the process of activating
+ * connections at startup.
+ *
+ * Returns: whether the daemon is still starting up
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_client_get_startup (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_STATE_UNKNOWN);
+
+ _nm_object_ensure_inited (NM_OBJECT (client));
+
+ return NM_CLIENT_GET_PRIVATE (client)->startup;
+}
+
+/**
* nm_client_networking_get_enabled:
* @client: a #NMClient
*
@@ -996,6 +1077,9 @@ nm_client_networking_set_enabled (NMClient *client, gboolean enable)
g_return_if_fail (NM_IS_CLIENT (client));
+ if (!NM_CLIENT_GET_PRIVATE (client)->manager_running)
+ return;
+
if (!dbus_g_proxy_call (NM_CLIENT_GET_PRIVATE (client)->client_proxy, "Enable", &err,
G_TYPE_BOOLEAN, enable,
G_TYPE_INVALID,
@@ -1073,28 +1157,30 @@ nm_client_get_permission_result (NMClient *client, NMClientPermission permission
gboolean
nm_client_get_logging (NMClient *client, char **level, char **domains, GError **error)
{
- GError *err = NULL;
+ NMClientPrivate *priv;
g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
g_return_val_if_fail (level == NULL || *level == NULL, FALSE);
g_return_val_if_fail (domains == NULL || *domains == NULL, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- if (!level && !domains)
- return TRUE;
-
- if (!dbus_g_proxy_call (NM_CLIENT_GET_PRIVATE (client)->client_proxy, "GetLogging", &err,
- G_TYPE_INVALID,
- G_TYPE_STRING, level,
- G_TYPE_STRING, domains,
- G_TYPE_INVALID)) {
- if (error)
- *error = g_error_copy (err);
- g_error_free (err);
+ priv = NM_CLIENT_GET_PRIVATE (client);
+ if (!priv->manager_running) {
+ g_set_error_literal (error,
+ NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING,
+ "NetworkManager is not running");
return FALSE;
}
- return TRUE;
+ if (!level && !domains)
+ return TRUE;
+
+ return dbus_g_proxy_call (priv->client_proxy, "GetLogging", error,
+ G_TYPE_INVALID,
+ G_TYPE_STRING, level,
+ G_TYPE_STRING, domains,
+ G_TYPE_INVALID);
}
/**
@@ -1114,26 +1200,28 @@ nm_client_get_logging (NMClient *client, char **level, char **domains, GError **
gboolean
nm_client_set_logging (NMClient *client, const char *level, const char *domains, GError **error)
{
- GError *err = NULL;
+ NMClientPrivate *priv;
g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- if (!level && !domains)
- return TRUE;
-
- if (!dbus_g_proxy_call (NM_CLIENT_GET_PRIVATE (client)->client_proxy, "SetLogging", &err,
- G_TYPE_STRING, level ? level : "",
- G_TYPE_STRING, domains ? domains : "",
- G_TYPE_INVALID,
- G_TYPE_INVALID)) {
- if (error)
- *error = g_error_copy (err);
- g_error_free (err);
+ priv = NM_CLIENT_GET_PRIVATE (client);
+ if (!priv->manager_running) {
+ g_set_error_literal (error,
+ NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING,
+ "NetworkManager is not running");
return FALSE;
}
- return TRUE;
+ if (!level && !domains)
+ return TRUE;
+
+ return dbus_g_proxy_call (priv->client_proxy, "SetLogging", error,
+ G_TYPE_STRING, level ? level : "",
+ G_TYPE_STRING, domains ? domains : "",
+ G_TYPE_INVALID,
+ G_TYPE_INVALID);
}
/**
@@ -1155,7 +1243,7 @@ nm_client_set_logging (NMClient *client, const char *level, const char *domains,
* Returns: (transfer none): the appropriate #NMActiveConnection, if
* any
*
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
NMActiveConnection *
nm_client_get_primary_connection (NMClient *client)
@@ -1177,7 +1265,7 @@ nm_client_get_primary_connection (NMClient *client)
* Returns: (transfer none): the appropriate #NMActiveConnection, if
* any.
*
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
NMActiveConnection *
nm_client_get_activating_connection (NMClient *client)
@@ -1278,11 +1366,13 @@ proxy_name_owner_changed (DBusGProxy *proxy,
priv->manager_running = new_running;
if (!priv->manager_running) {
priv->state = NM_STATE_UNKNOWN;
+ priv->startup = FALSE;
_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_MANAGER_RUNNING);
_nm_object_suppress_property_updates (NM_OBJECT (client), TRUE);
poke_wireless_devices_with_rf_status (client);
free_devices (client, TRUE);
free_active_connections (client, TRUE);
+ update_permissions (client, NULL);
priv->wireless_enabled = FALSE;
priv->wireless_hw_enabled = FALSE;
priv->wwan_enabled = FALSE;
@@ -1299,21 +1389,10 @@ proxy_name_owner_changed (DBusGProxy *proxy,
} else {
_nm_object_suppress_property_updates (NM_OBJECT (client), FALSE);
_nm_object_reload_properties_async (NM_OBJECT (client), updated_properties, client);
+ client_recheck_permissions (priv->client_proxy, client);
}
}
-static void
-client_device_added (NMObject *client, NMObject *device)
-{
- g_signal_emit (client, signals[DEVICE_ADDED], 0, device);
-}
-
-static void
-client_device_removed (NMObject *client, NMObject *device)
-{
- g_signal_emit (client, signals[DEVICE_REMOVED], 0, device);
-}
-
/**
* nm_client_get_connectivity:
* @client: an #NMClient
@@ -1324,7 +1403,7 @@ client_device_removed (NMObject *client, NMObject *device)
* connectivity state first before returning any information.
*
* Returns: the current connectivity state
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
NMConnectivityState
nm_client_get_connectivity (NMClient *client)
@@ -1353,7 +1432,7 @@ nm_client_get_connectivity (NMClient *client)
* if you do not want to block.
*
* Returns: the (new) current connectivity state
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
NMConnectivityState
nm_client_check_connectivity (NMClient *client,
@@ -1404,11 +1483,9 @@ check_connectivity_cb (DBusGProxy *proxy,
CheckConnectivityData *ccd = g_simple_async_result_get_op_res_gpointer (simple);
GError *error = NULL;
- if (g_cancellable_set_error_if_cancelled (ccd->cancellable, &error))
- g_simple_async_result_take_error (simple, error);
- else if (!dbus_g_proxy_end_call (proxy, call, &error,
- G_TYPE_UINT, &ccd->connectivity,
- G_TYPE_INVALID))
+ if (!dbus_g_proxy_end_call (proxy, call, &error,
+ G_TYPE_UINT, &ccd->connectivity,
+ G_TYPE_INVALID))
g_simple_async_result_take_error (simple, error);
g_simple_async_result_complete (simple);
@@ -1441,7 +1518,7 @@ check_connectivity_cancelled_cb (GCancellable *cancellable,
* which (immediately) returns the most recent known state without
* re-checking, and nm_client_check_connectivity(), which blocks.
*
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
void
nm_client_check_connectivity_async (NMClient *client,
@@ -1468,6 +1545,7 @@ nm_client_check_connectivity_async (NMClient *client,
ccd->cancelled_id = g_signal_connect (cancellable, "cancelled",
G_CALLBACK (check_connectivity_cancelled_cb),
simple);
+ g_simple_async_result_set_check_cancellable (simple, cancellable);
}
ccd->call = dbus_g_proxy_begin_call (priv->client_proxy, "CheckConnectivity",
@@ -1485,7 +1563,7 @@ nm_client_check_connectivity_async (NMClient *client,
* call.
*
* Returns: the (new) current connectivity state
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
NMConnectivityState
nm_client_check_connectivity_finish (NMClient *client,
@@ -1521,31 +1599,21 @@ nm_client_check_connectivity_finish (NMClient *client,
* control them. To access and modify network configuration data, use the
* #NMRemoteSettings object.
*
- * Returns: a new #NMClient
+ * Returns: a new #NMClient or NULL on an error
**/
NMClient *
nm_client_new (void)
{
- DBusGConnection *connection;
- GError *err = NULL;
NMClient *client;
-#ifdef LIBNM_GLIB_TEST
- connection = dbus_g_bus_get (DBUS_BUS_SESSION, &err);
-#else
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
-#endif
- if (!connection) {
- g_warning ("Couldn't connect to system bus: %s", err->message);
- g_error_free (err);
- return NULL;
- }
+ client = g_object_new (NM_TYPE_CLIENT, NM_OBJECT_DBUS_PATH, NM_DBUS_PATH, NULL);
+
+ /* NMObject's constructor() can fail on a D-Bus connection error. So we can
+ * get NULL here instead of a valid NMClient object.
+ */
+ if (client)
+ _nm_object_ensure_inited (NM_OBJECT (client));
- client = g_object_new (NM_TYPE_CLIENT,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, NM_DBUS_PATH,
- NULL);
- _nm_object_ensure_inited (NM_OBJECT (client));
return client;
}
@@ -1571,39 +1639,31 @@ client_inited (GObject *source, GAsyncResult *result, gpointer user_data)
*
* Creates a new #NMClient and begins asynchronously initializing it.
* @callback will be called when it is done; use
- * nm_client_new_finish() to get the result.
+ * nm_client_new_finish() to get the result. Note that on an error,
+ * the callback can be invoked with two first parameters as NULL.
*
* NOTE: #NMClient provides information about devices and a mechanism to
* control them. To access and modify network configuration data, use the
* #NMRemoteSettings object.
**/
void
-nm_client_new_async (GCancellable *cancellable, GAsyncReadyCallback callback,
+nm_client_new_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
gpointer user_data)
{
- DBusGConnection *connection;
- GError *err = NULL;
NMClient *client;
GSimpleAsyncResult *simple;
- simple = g_simple_async_result_new (NULL, callback, user_data, nm_client_new_async);
-
-#ifdef LIBNM_GLIB_TEST
- connection = dbus_g_bus_get (DBUS_BUS_SESSION, &err);
-#else
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
-#endif
- if (!connection) {
- g_simple_async_result_take_error (simple, err);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
+ client = g_object_new (NM_TYPE_CLIENT, NM_OBJECT_DBUS_PATH, NM_DBUS_PATH, NULL);
+ /* When client is NULL, do no continue with initialization and run callback
+ * directly with result == NULL indicating NMClient creation failure.
+ */
+ if (!client) {
+ callback (NULL, NULL, user_data);
return;
}
- client = g_object_new (NM_TYPE_CLIENT,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, NM_DBUS_PATH,
- NULL);
+ simple = g_simple_async_result_new (NULL, callback, user_data, nm_client_new_async);
g_async_initable_init_async (G_ASYNC_INITABLE (client), G_PRIORITY_DEFAULT,
cancellable, client_inited, simple);
}
@@ -1622,6 +1682,16 @@ nm_client_new_finish (GAsyncResult *result, GError **error)
{
GSimpleAsyncResult *simple;
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!result) {
+ g_set_error_literal (error,
+ NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_UNKNOWN,
+ "NMClient initialization failed (or you passed NULL 'result' by mistake)");
+ return NULL;
+ }
+
g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, nm_client_new_async), NULL);
simple = G_SIMPLE_ASYNC_RESULT (result);
@@ -1732,20 +1802,18 @@ constructor (GType type,
static void
constructed (GObject *object)
{
- DBusGConnection *connection;
- NMClientPrivate *priv;
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
+ GError *error = NULL;
- nm_utils_init (NULL);
+ if (!nm_utils_init (&error)) {
+ g_warning ("Couldn't initilize nm-utils/crypto system: %d %s",
+ error->code, error->message);
+ g_clear_error (&error);
+ }
G_OBJECT_CLASS (nm_client_parent_class)->constructed (object);
- priv = NM_CLIENT_GET_PRIVATE (object);
- connection = nm_object_get_connection (NM_OBJECT (object));
-
- priv->client_proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE);
+ priv->client_proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE);
register_properties (NM_CLIENT (object));
@@ -1757,18 +1825,23 @@ constructed (GObject *object)
object,
NULL);
- priv->bus_proxy = dbus_g_proxy_new_for_name (connection,
- DBUS_SERVICE_DBUS,
- DBUS_PATH_DBUS,
- DBUS_INTERFACE_DBUS);
-
- dbus_g_proxy_add_signal (priv->bus_proxy, "NameOwnerChanged",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->bus_proxy,
- "NameOwnerChanged",
- G_CALLBACK (proxy_name_owner_changed),
- object, NULL);
+ if (_nm_object_is_connection_private (NM_OBJECT (object)))
+ priv->manager_running = TRUE;
+ else {
+ priv->bus_proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+ g_assert (priv->bus_proxy);
+
+ dbus_g_proxy_add_signal (priv->bus_proxy, "NameOwnerChanged",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->bus_proxy,
+ "NameOwnerChanged",
+ G_CALLBACK (proxy_name_owner_changed),
+ object, NULL);
+ }
g_signal_connect (object, "notify::" NM_CLIENT_WIRELESS_ENABLED,
G_CALLBACK (wireless_enabled_cb), NULL);
@@ -1789,13 +1862,15 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
if (!nm_client_parent_initable_iface->init (initable, cancellable, error))
return FALSE;
- if (!dbus_g_proxy_call (priv->bus_proxy,
- "NameHasOwner", error,
- G_TYPE_STRING, NM_DBUS_SERVICE,
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN, &priv->manager_running,
- G_TYPE_INVALID))
- return FALSE;
+ if (!_nm_object_is_connection_private (NM_OBJECT (client))) {
+ if (!dbus_g_proxy_call (priv->bus_proxy,
+ "NameHasOwner", error,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &priv->manager_running,
+ G_TYPE_INVALID))
+ return FALSE;
+ }
if (priv->manager_running && !get_permissions_sync (client, error))
return FALSE;
@@ -1852,6 +1927,22 @@ init_async_got_properties (GObject *source, GAsyncResult *result, gpointer user_
}
static void
+finish_init (NMClientInitData *init_data)
+{
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (init_data->client);
+
+ nm_client_parent_async_initable_iface->init_async (G_ASYNC_INITABLE (init_data->client),
+ G_PRIORITY_DEFAULT, NULL, /* FIXME cancellable */
+ init_async_got_properties, init_data);
+ init_data->properties_pending = TRUE;
+
+ dbus_g_proxy_begin_call (priv->client_proxy, "GetPermissions",
+ init_async_got_permissions, init_data, NULL,
+ G_TYPE_INVALID);
+ init_data->permissions_pending = TRUE;
+}
+
+static void
init_async_got_manager_running (DBusGProxy *proxy, DBusGProxyCall *call,
gpointer user_data)
{
@@ -1872,15 +1963,7 @@ init_async_got_manager_running (DBusGProxy *proxy, DBusGProxyCall *call,
return;
}
- nm_client_parent_async_initable_iface->init_async (G_ASYNC_INITABLE (init_data->client),
- G_PRIORITY_DEFAULT, NULL, /* FIXME cancellable */
- init_async_got_properties, init_data);
- init_data->properties_pending = TRUE;
-
- dbus_g_proxy_begin_call (priv->client_proxy, "GetPermissions",
- init_async_got_permissions, init_data, NULL,
- G_TYPE_INVALID);
- init_data->permissions_pending = TRUE;
+ finish_init (init_data);
}
static void
@@ -1897,12 +1980,16 @@ init_async (GAsyncInitable *initable, int io_priority,
user_data, init_async);
g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE);
- /* Check if NM is running */
- dbus_g_proxy_begin_call (priv->bus_proxy, "NameHasOwner",
- init_async_got_manager_running,
- init_data, NULL,
- G_TYPE_STRING, NM_DBUS_SERVICE,
- G_TYPE_INVALID);
+ if (_nm_object_is_connection_private (NM_OBJECT (init_data->client)))
+ finish_init (init_data);
+ else {
+ /* Check if NM is running */
+ dbus_g_proxy_begin_call (priv->bus_proxy, "NameHasOwner",
+ init_async_got_manager_running,
+ init_data, NULL,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID);
+ }
}
static gboolean
@@ -1935,8 +2022,7 @@ dispose (GObject *object)
g_clear_object (&priv->primary_connection);
g_clear_object (&priv->activating_connection);
- g_slist_foreach (priv->pending_activations, (GFunc) activate_info_free, NULL);
- g_slist_free (priv->pending_activations);
+ g_slist_free_full (priv->pending_activations, (GDestroyNotify) activate_info_free);
priv->pending_activations = NULL;
g_hash_table_destroy (priv->permissions);
@@ -2015,6 +2101,9 @@ get_property (GObject *object,
case PROP_STATE:
g_value_set_uint (value, nm_client_get_state (self));
break;
+ case PROP_STARTUP:
+ g_value_set_boolean (value, nm_client_get_startup (self));
+ break;
case PROP_MANAGER_RUNNING:
g_value_set_boolean (value, priv->manager_running);
break;
@@ -2051,6 +2140,9 @@ get_property (GObject *object,
case PROP_ACTIVATING_CONNECTION:
g_value_set_object (value, priv->activating_connection);
break;
+ case PROP_DEVICES:
+ g_value_set_boxed (value, nm_client_get_devices (self));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -2100,6 +2192,21 @@ nm_client_class_init (NMClientClass *client_class)
G_PARAM_READABLE));
/**
+ * NMClient:startup:
+ *
+ * Whether the daemon is still starting up.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STARTUP,
+ g_param_spec_boolean (NM_CLIENT_STARTUP,
+ "Startup",
+ "Whether the daemon is still starting up",
+ FALSE,
+ G_PARAM_READABLE));
+
+ /**
* NMClient::manager-running:
*
* Whether the daemon is running.
@@ -2222,7 +2329,7 @@ nm_client_class_init (NMClientClass *client_class)
*
* The network connectivity state.
*
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
*/
g_object_class_install_property
(object_class, PROP_CONNECTIVITY,
@@ -2238,7 +2345,7 @@ nm_client_class_init (NMClientClass *client_class)
* The #NMActiveConnection of the device with the default route;
* see nm_client_get_primary_connection() for more details.
*
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
**/
g_object_class_install_property
(object_class, PROP_PRIMARY_CONNECTION,
@@ -2254,7 +2361,7 @@ nm_client_class_init (NMClientClass *client_class)
* The #NMActiveConnection of the activating connection that is
* likely to become the new #NMClient:primary-connection.
*
- * Since: 0.9.8.4
+ * Since: 0.9.8.6
**/
g_object_class_install_property
(object_class, PROP_ACTIVATING_CONNECTION,
@@ -2264,6 +2371,21 @@ nm_client_class_init (NMClientClass *client_class)
NM_TYPE_ACTIVE_CONNECTION,
G_PARAM_READABLE));
+ /**
+ * NMClient:devices:
+ *
+ * List of known network devices.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DEVICES,
+ g_param_spec_boxed (NM_CLIENT_DEVICES,
+ "Devices",
+ "Devices",
+ NM_TYPE_OBJECT_ARRAY,
+ G_PARAM_READABLE));
+
/* signals */
/**
@@ -2278,8 +2400,7 @@ nm_client_class_init (NMClientClass *client_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMClientClass, device_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1,
G_TYPE_OBJECT);
@@ -2295,8 +2416,7 @@ nm_client_class_init (NMClientClass *client_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMClientClass, device_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1,
G_TYPE_OBJECT);
@@ -2312,8 +2432,7 @@ nm_client_class_init (NMClientClass *client_class)
g_signal_new ("permission-changed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- _nm_glib_marshal_VOID__UINT_UINT,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
}
diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h
index b4da609ff..1baabecce 100644
--- a/libnm-glib/nm-client.h
+++ b/libnm-glib/nm-client.h
@@ -45,6 +45,7 @@ G_BEGIN_DECLS
#define NM_CLIENT_VERSION "version"
#define NM_CLIENT_STATE "state"
+#define NM_CLIENT_STARTUP "startup"
#define NM_CLIENT_MANAGER_RUNNING "manager-running"
#define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
#define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled"
@@ -57,13 +58,14 @@ G_BEGIN_DECLS
#define NM_CLIENT_CONNECTIVITY "connectivity"
#define NM_CLIENT_PRIMARY_CONNECTION "primary-connection"
#define NM_CLIENT_ACTIVATING_CONNECTION "activating-connection"
+#define NM_CLIENT_DEVICES "devices"
/**
* NMClientPermission:
* @NM_CLIENT_PERMISSION_NONE: unknown or no permission
* @NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK: controls whether networking
* can be globally enabled or disabled
- * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI: controls whether WiFi can be
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI: controls whether Wi-Fi can be
* globally enabled or disabled
* @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN: controls whether WWAN (3G) can be
* globally enabled or disabled
@@ -74,8 +76,8 @@ G_BEGIN_DECLS
* @NM_CLIENT_PERMISSION_NETWORK_CONTROL: controls whether networking connections
* can be started, stopped, and changed
* @NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED: controls whether a password
- * protected WiFi hotspot can be created
- * @NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN: controls whether an open WiFi hotspot
+ * protected Wi-Fi hotspot can be created
+ * @NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN: controls whether an open Wi-Fi hotspot
* can be created
* @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM: controls whether connections
* that are available to all users can be modified
@@ -124,6 +126,22 @@ typedef enum {
NM_CLIENT_PERMISSION_RESULT_NO
} NMClientPermissionResult;
+/**
+ * NMClientError:
+ * @NM_CLIENT_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_CLIENT_ERROR_MANAGER_NOT_RUNNING: an operation that requires NetworkManager
+ * failed because NetworkManager is not running
+ *
+ * Describes errors that may result from operations involving a #NMClient.
+ **/
+typedef enum {
+ NM_CLIENT_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING, /*< nick=ManagerNotRunning >*/
+} NMClientError;
+
+#define NM_CLIENT_ERROR nm_client_error_quark ()
+NM_AVAILABLE_IN_0_9_10
+GQuark nm_client_error_quark (void);
typedef struct {
NMObject parent;
@@ -206,6 +224,8 @@ gboolean nm_client_wimax_hardware_get_enabled (NMClient *client);
const char *nm_client_get_version (NMClient *client);
NMState nm_client_get_state (NMClient *client);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_client_get_startup (NMClient *client);
gboolean nm_client_get_manager_running (NMClient *client);
const GPtrArray *nm_client_get_active_connections (NMClient *client);
void nm_client_sleep (NMClient *client, gboolean sleep_);
diff --git a/libnm-glib/nm-dbus-helpers-private.h b/libnm-glib/nm-dbus-helpers-private.h
new file mode 100644
index 000000000..81c772033
--- /dev/null
+++ b/libnm-glib/nm-dbus-helpers-private.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * 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 (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DBUS_HELPERS_PRIVATE_H
+#define NM_DBUS_HELPERS_PRIVATE_H
+
+#include <gio/gio.h>
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+DBusGConnection *_nm_dbus_new_connection (GError **error);
+
+gboolean _nm_dbus_is_connection_private (DBusGConnection *connection);
+
+DBusGProxy * _nm_dbus_new_proxy_for_connection (DBusGConnection *connection,
+ const char *path,
+ const char *interface);
+
+#endif /* NM_DBUS_HELPERS_PRIVATE_H */
diff --git a/libnm-glib/nm-dbus-helpers.c b/libnm-glib/nm-dbus-helpers.c
new file mode 100644
index 000000000..731ad0c8f
--- /dev/null
+++ b/libnm-glib/nm-dbus-helpers.c
@@ -0,0 +1,107 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * 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 (C) 2013 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <config.h>
+#include <gio/gio.h>
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include "nm-dbus-helpers-private.h"
+#include "NetworkManager.h"
+
+static dbus_int32_t priv_slot = -1;
+
+static gboolean
+_ensure_dbus_data_slot (void)
+{
+ static gsize init_value = 0;
+ gboolean success = TRUE;
+
+ if (g_once_init_enter (&init_value)) {
+ success = dbus_connection_allocate_data_slot (&priv_slot);
+ g_once_init_leave (&init_value, 1);
+ }
+ return success;
+}
+
+DBusGConnection *
+_nm_dbus_new_connection (GError **error)
+{
+ DBusGConnection *connection = NULL;
+
+ if (!_ensure_dbus_data_slot ()) {
+ g_set_error (error, DBUS_GERROR, DBUS_GERROR_FAILED, "failed to allocated data slot");
+ return NULL;
+ }
+
+#if HAVE_DBUS_GLIB_100
+ /* If running as root try the private bus first */
+ if (0 == geteuid ()) {
+ connection = dbus_g_connection_open ("unix:path=" NMRUNDIR "/private", error);
+ if (connection) {
+ DBusConnection *dbus_connection = dbus_g_connection_get_connection (connection);
+
+ /* Mark this connection as private */
+ dbus_connection_set_data (dbus_connection, priv_slot, GUINT_TO_POINTER (TRUE), NULL);
+ dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
+ return connection;
+ }
+ /* Fall back to a bus if for some reason private socket isn't available */
+ g_clear_error (error);
+ }
+#endif
+
+ if (connection == NULL) {
+#ifdef LIBNM_GLIB_TEST
+ connection = dbus_g_bus_get (DBUS_BUS_SESSION, error);
+#else
+ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, error);
+#endif
+ }
+
+ return connection;
+}
+
+gboolean
+_nm_dbus_is_connection_private (DBusGConnection *connection)
+{
+ if (!_ensure_dbus_data_slot ())
+ return FALSE;
+ return !!dbus_connection_get_data (dbus_g_connection_get_connection (connection), priv_slot);
+}
+
+DBusGProxy *
+_nm_dbus_new_proxy_for_connection (DBusGConnection *connection,
+ const char *path,
+ const char *interface)
+{
+ /* Private connections can't use dbus_g_proxy_new_for_name() or
+ * dbus_g_proxy_new_for_name_owner() because peer-to-peer connections don't
+ * have either a bus daemon or name owners, both of which those functions
+ * require.
+ */
+ if (_nm_dbus_is_connection_private (connection))
+ return dbus_g_proxy_new_for_peer (connection, path, interface);
+
+ return dbus_g_proxy_new_for_name (connection, NM_DBUS_SERVICE, path, interface);
+}
+
diff --git a/libnm-glib/nm-device-adsl.c b/libnm-glib/nm-device-adsl.c
index bef3ceae4..b3f9691ee 100644
--- a/libnm-glib/nm-device-adsl.c
+++ b/libnm-glib/nm-device-adsl.c
@@ -46,7 +46,6 @@ enum {
PROP_CARRIER,
LAST_PROP
};
-#define DBUS_PROP_CARRIER "Carrier"
/**
* nm_device_adsl_error_quark:
@@ -131,7 +130,13 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
return FALSE;
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_adsl_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_ADSL;
}
/******************************************************************/
@@ -159,17 +164,11 @@ register_properties (NMDeviceAdsl *device)
static void
constructed (GObject *object)
{
- NMDeviceAdslPrivate *priv;
+ NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_adsl_parent_class)->constructed (object);
- priv = NM_DEVICE_ADSL_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_ADSL);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_ADSL);
register_properties (NM_DEVICE_ADSL (object));
}
@@ -228,6 +227,7 @@ nm_device_adsl_class_init (NMDeviceAdslClass *adsl_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
/* properties */
/**
diff --git a/libnm-glib/nm-device-bond.c b/libnm-glib/nm-device-bond.c
index 6261db912..b2af2ec34 100644
--- a/libnm-glib/nm-device-bond.c
+++ b/libnm-glib/nm-device-bond.c
@@ -56,10 +56,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_CARRIER "Carrier"
-#define DBUS_PROP_SLAVES "Slaves"
-
/**
* nm_device_bond_error_quark:
*
@@ -144,7 +140,7 @@ nm_device_bond_get_carrier (NMDeviceBond *device)
* Gets the devices currently slaved to @device.
*
* Returns: (element-type NMClient.Device): the #GPtrArray containing
- * #NMDevice<!-- -->s that are slaves of @device. This is the internal
+ * #NMDevices that are slaves of @device. This is the internal
* copy used by the device, and must not be modified.
*
* Since: 0.9.6.4
@@ -165,8 +161,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
NMSettingBond *s_bond;
const char *ctype, *dev_iface_name, *bond_iface_name;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -194,7 +188,19 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
/* FIXME: check slaves? */
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_bond_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_BOND;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_bond_get_hw_address (NM_DEVICE_BOND (device));
}
/***********************************************************/
@@ -224,17 +230,11 @@ register_properties (NMDeviceBond *device)
static void
constructed (GObject *object)
{
- NMDeviceBondPrivate *priv;
+ NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_bond_parent_class)->constructed (object);
- priv = NM_DEVICE_BOND_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_BOND);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_BOND);
register_properties (NM_DEVICE_BOND (object));
}
@@ -246,7 +246,7 @@ dispose (GObject *object)
g_clear_object (&priv->proxy);
if (priv->slaves) {
- g_ptr_array_foreach (priv->slaves, (GFunc) g_object_unref, NULL);
+ g_ptr_array_set_free_func (priv->slaves, g_object_unref);
g_ptr_array_free (priv->slaves, TRUE);
priv->slaves = NULL;
}
@@ -304,6 +304,8 @@ nm_device_bond_class_init (NMDeviceBondClass *eth_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
/* properties */
diff --git a/libnm-glib/nm-device-bridge.c b/libnm-glib/nm-device-bridge.c
index 9327a9319..c8967e203 100644
--- a/libnm-glib/nm-device-bridge.c
+++ b/libnm-glib/nm-device-bridge.c
@@ -56,10 +56,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_CARRIER "Carrier"
-#define DBUS_PROP_SLAVES "Slaves"
-
/**
* nm_device_bridge_error_quark:
*
@@ -152,7 +148,7 @@ nm_device_bridge_get_carrier (NMDeviceBridge *device)
* Gets the devices currently slaved to @device.
*
* Returns: (element-type NMClient.Device): the #GPtrArray containing
- * #NMDevice<!-- -->s that are slaves of @device. This is the internal
+ * #NMDevices that are slaves of @device. This is the internal
* copy used by the device, and must not be modified.
*
* Since: 0.9.8
@@ -173,8 +169,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
NMSettingBridge *s_bridge;
const char *ctype, *dev_iface_name, *bridge_iface_name;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -202,7 +196,19 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
/* FIXME: check ports? */
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_bridge_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_BRIDGE;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_bridge_get_hw_address (NM_DEVICE_BRIDGE (device));
}
/***********************************************************/
@@ -232,17 +238,11 @@ register_properties (NMDeviceBridge *device)
static void
constructed (GObject *object)
{
- NMDeviceBridgePrivate *priv;
+ NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_bridge_parent_class)->constructed (object);
- priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_BRIDGE);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_BRIDGE);
register_properties (NM_DEVICE_BRIDGE (object));
}
@@ -254,7 +254,7 @@ dispose (GObject *object)
g_clear_object (&priv->proxy);
if (priv->slaves) {
- g_ptr_array_foreach (priv->slaves, (GFunc) g_object_unref, NULL);
+ g_ptr_array_set_free_func (priv->slaves, g_object_unref);
g_ptr_array_free (priv->slaves, TRUE);
priv->slaves = NULL;
}
@@ -312,6 +312,8 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
/* properties */
diff --git a/libnm-glib/nm-device-bt.c b/libnm-glib/nm-device-bt.c
index ccfa83ca7..4c39ad049 100644
--- a/libnm-glib/nm-device-bt.c
+++ b/libnm-glib/nm-device-bt.c
@@ -55,10 +55,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_NAME "Name"
-#define DBUS_PROP_BT_CAPABILITIES "BtCapabilities"
-
/**
* nm_device_bt_error_quark:
*
@@ -182,8 +178,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
NMBluetoothCapabilities dev_caps;
NMBluetoothCapabilities bt_type;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -226,7 +220,19 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
return FALSE;
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_bt_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_BLUETOOTH;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_bt_get_hw_address (NM_DEVICE_BT (device));
}
/************************************************************/
@@ -260,11 +266,7 @@ constructed (GObject *object)
G_OBJECT_CLASS (nm_device_bt_parent_class)->constructed (object);
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_BLUETOOTH);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_BLUETOOTH);
register_properties (NM_DEVICE_BT (object));
}
@@ -329,6 +331,8 @@ nm_device_bt_class_init (NMDeviceBtClass *bt_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
/* properties */
diff --git a/libnm-glib/nm-device-ethernet.c b/libnm-glib/nm-device-ethernet.c
index e9d1b4ad0..8f3171154 100644
--- a/libnm-glib/nm-device-ethernet.c
+++ b/libnm-glib/nm-device-ethernet.c
@@ -58,11 +58,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_PERM_HW_ADDRESS "PermHwAddress"
-#define DBUS_PROP_SPEED "Speed"
-#define DBUS_PROP_CARRIER "Carrier"
-
/**
* nm_device_ethernet_error_quark:
*
@@ -183,8 +178,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
const char *ctype;
gboolean is_pppoe = FALSE;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -201,7 +194,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
/* Wired setting optional for PPPoE */
if (!is_pppoe && !s_wired) {
g_set_error (error, NM_DEVICE_ETHERNET_ERROR, NM_DEVICE_ETHERNET_ERROR_INVALID_ETHERNET_CONNECTION,
- "The connection was not a valid ethernet connection.");
+ "The connection was not a valid Ethernet connection.");
return FALSE;
}
@@ -230,7 +223,19 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
}
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_WIRED;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device));
}
/***********************************************************/
@@ -261,17 +266,11 @@ register_properties (NMDeviceEthernet *device)
static void
constructed (GObject *object)
{
- NMDeviceEthernetPrivate *priv;
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_ethernet_parent_class)->constructed (object);
- priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_WIRED);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_WIRED);
register_properties (NM_DEVICE_ETHERNET (object));
}
@@ -339,6 +338,8 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
/* properties */
diff --git a/libnm-glib/nm-device-ethernet.h b/libnm-glib/nm-device-ethernet.h
index 4028d62ca..a68a97ecc 100644
--- a/libnm-glib/nm-device-ethernet.h
+++ b/libnm-glib/nm-device-ethernet.h
@@ -38,8 +38,8 @@ G_BEGIN_DECLS
/**
* NMDeviceEthernetError:
* @NM_DEVICE_ETHERNET_ERROR_UNKNOWN: unknown or unclassified error
- * @NM_DEVICE_ETHERNET_ERROR_NOT_ETHERNET_CONNECTION: the connection was not of ethernet or PPPoE type
- * @NM_DEVICE_ETHERNET_ERROR_INVALID_ETHERNET_CONNECTION: the ethernet connection was invalid
+ * @NM_DEVICE_ETHERNET_ERROR_NOT_ETHERNET_CONNECTION: the connection was not of Ethernet or PPPoE type
+ * @NM_DEVICE_ETHERNET_ERROR_INVALID_ETHERNET_CONNECTION: the Ethernet connection was invalid
* @NM_DEVICE_ETHERNET_ERROR_INVALID_DEVICE_MAC: the device's MAC was invalid
* @NM_DEVICE_ETHERNET_ERROR_MAC_MISMATCH: the MACs of the connection and the device mismatched
*/
diff --git a/libnm-glib/nm-device-generic.c b/libnm-glib/nm-device-generic.c
new file mode 100644
index 000000000..2a45294f3
--- /dev/null
+++ b/libnm-glib/nm-device-generic.c
@@ -0,0 +1,289 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * 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 2013 Red Hat, Inc.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include "nm-device-generic.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-setting-generic.h"
+
+G_DEFINE_TYPE (NMDeviceGeneric, nm_device_generic, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericPrivate))
+
+typedef struct {
+ DBusGProxy *proxy;
+
+ char *hw_address;
+ char *type_description;
+} NMDeviceGenericPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_TYPE_DESCRIPTION,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_generic_error_quark:
+ *
+ * Registers an error quark for #NMDeviceGeneric if necessary.
+ *
+ * Returns: the error quark used for #NMDeviceGeneric errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_device_generic_error_quark (void)
+{
+ static GQuark quark = 0;
+
+ if (G_UNLIKELY (quark == 0))
+ quark = g_quark_from_static_string ("nm-device-generic-error-quark");
+ return quark;
+}
+
+/**
+ * nm_device_generic_new:
+ * @connection: the #DBusGConnection
+ * @path: the DBus object path of the device
+ *
+ * Creates a new #NMDeviceGeneric.
+ *
+ * Returns: (transfer full): a new device
+ *
+ * Since: 0.9.10
+ **/
+GObject *
+nm_device_generic_new (DBusGConnection *connection, const char *path)
+{
+ GObject *device;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+ g_return_val_if_fail (path != NULL, NULL);
+
+ device = g_object_new (NM_TYPE_DEVICE_GENERIC,
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return device;
+}
+
+/**
+ * nm_device_generic_get_hw_address:
+ * @device: a #NMDeviceGeneric
+ *
+ * Gets the hardware address of the #NMDeviceGeneric
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_device_generic_get_hw_address (NMDeviceGeneric *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_GENERIC (device), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return NM_DEVICE_GENERIC_GET_PRIVATE (device)->hw_address;
+}
+
+/***********************************************************/
+
+static const char *
+get_type_description (NMDevice *device)
+{
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (device);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return priv->type_description;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_generic_get_hw_address (NM_DEVICE_GENERIC (device));
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingConnection *s_con;
+ const char *ctype, *iface_name;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ ctype = nm_setting_connection_get_connection_type (s_con);
+ if (strcmp (ctype, NM_SETTING_GENERIC_SETTING_NAME) != 0) {
+ g_set_error (error, NM_DEVICE_GENERIC_ERROR, NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION,
+ "The connection was not a generic connection.");
+ return FALSE;
+ }
+
+ iface_name = nm_setting_connection_get_interface_name (s_con);
+ if (!iface_name) {
+ g_set_error (error, NM_DEVICE_GENERIC_ERROR, NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME,
+ "The connection did not specify an interface name.");
+ return FALSE;
+ }
+
+ return NM_DEVICE_CLASS (nm_device_generic_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_GENERIC;
+}
+
+/***********************************************************/
+
+static void
+nm_device_generic_init (NMDeviceGeneric *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_GENERIC);
+}
+
+static void
+register_properties (NMDeviceGeneric *device)
+{
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (device);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_GENERIC_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_GENERIC_TYPE_DESCRIPTION, &priv->type_description },
+ { NULL },
+ };
+
+ _nm_object_register_properties (NM_OBJECT (device),
+ priv->proxy,
+ property_info);
+}
+
+static void
+constructed (GObject *object)
+{
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
+
+ G_OBJECT_CLASS (nm_device_generic_parent_class)->constructed (object);
+
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_GENERIC);
+ register_properties (NM_DEVICE_GENERIC (object));
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
+
+ g_clear_object (&priv->proxy);
+
+ G_OBJECT_CLASS (nm_device_generic_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+ g_free (priv->type_description);
+
+ G_OBJECT_CLASS (nm_device_generic_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
+
+ _nm_object_ensure_inited (NM_OBJECT (object));
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, priv->hw_address);
+ break;
+ case PROP_TYPE_DESCRIPTION:
+ g_value_set_string (value, priv->type_description);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_generic_class_init (NMDeviceGenericClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceGenericPrivate));
+
+ object_class->constructed = constructed;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ device_class->get_type_description = get_type_description;
+ device_class->get_hw_address = get_hw_address;
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+
+ /**
+ * NMDeviceGeneric:hw-address:
+ *
+ * The hardware address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_GENERIC_HW_ADDRESS,
+ "Hardware Address",
+ "Hardware address",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
+ * NMDeviceGeneric:type-description:
+ *
+ * A description of the specific type of device this is, or %NULL
+ * if not known.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_TYPE_DESCRIPTION,
+ g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION,
+ "Type Description",
+ "Type description",
+ NULL,
+ G_PARAM_READABLE));
+}
+
diff --git a/libnm-glib/nm-device-generic.h b/libnm-glib/nm-device-generic.h
new file mode 100644
index 000000000..a343d988d
--- /dev/null
+++ b/libnm-glib/nm-device-generic.h
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * 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 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_GENERIC_H
+#define NM_DEVICE_GENERIC_H
+
+#include "nm-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_GENERIC (nm_device_generic_get_type ())
+#define NM_DEVICE_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_GENERIC, NMDeviceGeneric))
+#define NM_DEVICE_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericClass))
+#define NM_IS_DEVICE_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_GENERIC))
+#define NM_IS_DEVICE_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_GENERIC))
+#define NM_DEVICE_GENERIC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericClass))
+
+/**
+ * NMDeviceGenericError:
+ * @NM_DEVICE_GENERIC_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION: the connection was not of generic type
+ * @NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME: the connection did not specify the interface name
+ */
+typedef enum {
+ NM_DEVICE_GENERIC_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION, /*< nick=NotGenericConnection >*/
+ NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME, /*< nick=MissingInterfaceName >*/
+} NMDeviceGenericError;
+
+#define NM_DEVICE_GENERIC_ERROR nm_device_generic_error_quark ()
+GQuark nm_device_generic_error_quark (void);
+
+#define NM_DEVICE_GENERIC_HW_ADDRESS "hw-address"
+#define NM_DEVICE_GENERIC_TYPE_DESCRIPTION "type-description"
+
+typedef struct {
+ NMDevice parent;
+} NMDeviceGeneric;
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceGenericClass;
+
+NM_AVAILABLE_IN_0_9_10
+GType nm_device_generic_get_type (void);
+
+NM_AVAILABLE_IN_0_9_10
+GObject *nm_device_generic_new (DBusGConnection *connection, const char *path);
+
+const char *nm_device_generic_get_hw_address (NMDeviceGeneric *device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_GENERIC_H */
diff --git a/libnm-glib/nm-device-infiniband.c b/libnm-glib/nm-device-infiniband.c
index d611993be..b60b2d821 100644
--- a/libnm-glib/nm-device-infiniband.c
+++ b/libnm-glib/nm-device-infiniband.c
@@ -54,9 +54,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_CARRIER "Carrier"
-
/**
* nm_device_infiniband_error_quark:
*
@@ -143,8 +140,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
const GByteArray *mac;
guint8 *hwaddr, hwaddr_buf[INFINIBAND_ALEN];
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -171,14 +166,28 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
return FALSE;
}
mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- if (mac && hwaddr && memcmp (mac->data, hwaddr, INFINIBAND_ALEN)) {
+
+ /* We only match against the last 8 bytes */
+ if (mac && hwaddr && memcmp (mac->data + INFINIBAND_ALEN - 8, hwaddr + INFINIBAND_ALEN - 8, 8)) {
g_set_error (error, NM_DEVICE_INFINIBAND_ERROR, NM_DEVICE_INFINIBAND_ERROR_MAC_MISMATCH,
"The MACs of the device and the connection didn't match.");
return FALSE;
}
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_INFINIBAND;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_infiniband_get_hw_address (NM_DEVICE_INFINIBAND (device));
}
/***********************************************************/
@@ -207,17 +216,11 @@ register_properties (NMDeviceInfiniband *device)
static void
constructed (GObject *object)
{
- NMDeviceInfinibandPrivate *priv;
+ NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_infiniband_parent_class)->constructed (object);
- priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_INFINIBAND);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_INFINIBAND);
register_properties (NM_DEVICE_INFINIBAND (object));
}
@@ -278,6 +281,8 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *eth_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
/* properties */
diff --git a/libnm-glib/nm-device-modem.c b/libnm-glib/nm-device-modem.c
index f7a9230e0..b3b357cff 100644
--- a/libnm-glib/nm-device-modem.c
+++ b/libnm-glib/nm-device-modem.c
@@ -33,7 +33,6 @@
#include "nm-device-modem.h"
#include "nm-device-private.h"
#include "nm-object-private.h"
-#include "nm-glib-marshal.h"
G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
@@ -55,9 +54,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_MODEM_CAPS "ModemCapabilities"
-#define DBUS_PROP_CURRENT_CAPS "CurrentCapabilities"
-
/**
* nm_device_modem_error_quark:
*
@@ -88,7 +84,6 @@ nm_device_modem_error_quark (void)
NMDeviceModemCapabilities
nm_device_modem_get_modem_capabilities (NMDeviceModem *self)
{
- g_return_val_if_fail (self != NULL, NM_DEVICE_MODEM_CAPABILITY_NONE);
g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
_nm_object_ensure_inited (NM_OBJECT (self));
@@ -109,13 +104,31 @@ nm_device_modem_get_modem_capabilities (NMDeviceModem *self)
NMDeviceModemCapabilities
nm_device_modem_get_current_capabilities (NMDeviceModem *self)
{
- g_return_val_if_fail (self != NULL, NM_DEVICE_MODEM_CAPABILITY_NONE);
g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
_nm_object_ensure_inited (NM_OBJECT (self));
return NM_DEVICE_MODEM_GET_PRIVATE (self)->current_caps;
}
+static const char *
+get_type_description (NMDevice *device)
+{
+ NMDeviceModemCapabilities caps;
+
+ caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
+ if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
+ return "gsm";
+ else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
+ return "cdma";
+ else
+ return NULL;
+}
+
+#define MODEM_CAPS_3GPP(caps) (caps & (NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS | \
+ NM_DEVICE_MODEM_CAPABILITY_LTE))
+
+#define MODEM_CAPS_3GPP2(caps) (caps & (NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO))
+
static gboolean
connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
{
@@ -125,8 +138,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
const char *ctype;
NMDeviceModemCapabilities current_caps;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -147,14 +158,27 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
}
current_caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
- if ( !(s_gsm && (current_caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS))
- && !(s_cdma && (current_caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO))) {
+ if (!(s_gsm && MODEM_CAPS_3GPP (current_caps)) && !(s_cdma && MODEM_CAPS_3GPP2 (current_caps))) {
g_set_error (error, NM_DEVICE_MODEM_ERROR, NM_DEVICE_MODEM_ERROR_MISSING_DEVICE_CAPS,
"The device missed capabilities required by the GSM/CDMA connection.");
return FALSE;
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_modem_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ NMDeviceModemCapabilities caps;
+
+ caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
+ if (caps & (NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS | NM_DEVICE_MODEM_CAPABILITY_LTE))
+ return NM_TYPE_SETTING_GSM;
+ else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
+ return NM_TYPE_SETTING_CDMA;
+ else
+ return G_TYPE_INVALID;
}
/*******************************************************************/
@@ -183,17 +207,11 @@ register_properties (NMDeviceModem *device)
static void
constructed (GObject *object)
{
- NMDeviceModemPrivate *priv;
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_modem_parent_class)->constructed (object);
- priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_MODEM);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_MODEM);
register_properties (NM_DEVICE_MODEM (object));
}
@@ -242,7 +260,10 @@ nm_device_modem_class_init (NMDeviceModemClass *modem_class)
object_class->constructed = constructed;
object_class->get_property = get_property;
object_class->dispose = dispose;
+
+ device_class->get_type_description = get_type_description;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
/**
* NMDeviceModem:modem-capabilities:
diff --git a/libnm-glib/nm-device-olpc-mesh.c b/libnm-glib/nm-device-olpc-mesh.c
index 7ca36890f..d1789eb94 100644
--- a/libnm-glib/nm-device-olpc-mesh.c
+++ b/libnm-glib/nm-device-olpc-mesh.c
@@ -55,10 +55,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_COMPANION "Companion"
-#define DBUS_PROP_ACTIVE_CHANNEL "ActiveChannel"
-
/**
* nm_device_olpc_mesh_error_quark:
*
@@ -154,6 +150,12 @@ nm_device_olpc_mesh_get_active_channel (NMDeviceOlpcMesh *device)
return NM_DEVICE_OLPC_MESH_GET_PRIVATE (device)->active_channel;
}
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_olpc_mesh_get_hw_address (NM_DEVICE_OLPC_MESH (device));
+}
+
static gboolean
connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
{
@@ -161,8 +163,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
NMSettingOlpcMesh *s_olpc_mesh;
const char *ctype;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -180,7 +180,13 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
return FALSE;
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_olpc_mesh_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_OLPC_MESH;
}
/**************************************************************/
@@ -210,17 +216,11 @@ register_properties (NMDeviceOlpcMesh *device)
static void
constructed (GObject *object)
{
- NMDeviceOlpcMeshPrivate *priv;
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->constructed (object);
- priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_OLPC_MESH);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_OLPC_MESH);
register_properties (NM_DEVICE_OLPC_MESH (object));
}
@@ -285,6 +285,8 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *olpc_mesh_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
/* properties */
diff --git a/libnm-glib/nm-device-team.c b/libnm-glib/nm-device-team.c
new file mode 100644
index 000000000..f739e1d84
--- /dev/null
+++ b/libnm-glib/nm-device-team.c
@@ -0,0 +1,356 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * 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.
+ */
+
+#include <config.h>
+#include <string.h>
+#include <netinet/ether.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-team.h>
+#include <nm-utils.h>
+
+#include "nm-device-team.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-types.h"
+
+G_DEFINE_TYPE (NMDeviceTeam, nm_device_team, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_TEAM, NMDeviceTeamPrivate))
+
+typedef struct {
+ DBusGProxy *proxy;
+
+ char *hw_address;
+ gboolean carrier;
+ GPtrArray *slaves;
+} NMDeviceTeamPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_CARRIER,
+ PROP_SLAVES,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_team_error_quark:
+ *
+ * Registers an error quark for #NMDeviceTeam if necessary.
+ *
+ * Returns: the error quark used for #NMDeviceTeam errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_device_team_error_quark (void)
+{
+ static GQuark quark = 0;
+
+ if (G_UNLIKELY (quark == 0))
+ quark = g_quark_from_static_string ("nm-device-team-error-quark");
+ return quark;
+}
+
+/**
+ * nm_device_team_new:
+ * @connection: the #DBusGConnection
+ * @path: the DBus object path of the device
+ *
+ * Creates a new #NMDeviceTeam.
+ *
+ * Returns: (transfer full): a new device
+ *
+ * Since: 0.9.10
+ **/
+GObject *
+nm_device_team_new (DBusGConnection *connection, const char *path)
+{
+ GObject *device;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+ g_return_val_if_fail (path != NULL, NULL);
+
+ device = g_object_new (NM_TYPE_DEVICE_TEAM,
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return device;
+}
+
+/**
+ * nm_device_team_get_hw_address:
+ * @device: a #NMDeviceTeam
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceTeam
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_device_team_get_hw_address (NMDeviceTeam *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return NM_DEVICE_TEAM_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_team_get_carrier:
+ * @device: a #NMDeviceTeam
+ *
+ * Whether the device has carrier.
+ *
+ * Returns: %TRUE if the device has carrier
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_device_team_get_carrier (NMDeviceTeam *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), FALSE);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return NM_DEVICE_TEAM_GET_PRIVATE (device)->carrier;
+}
+
+/**
+ * nm_device_team_get_slaves:
+ * @device: a #NMDeviceTeam
+ *
+ * Gets the devices currently enslaved to @device.
+ *
+ * Returns: (element-type NMClient.Device): the #GPtrArray containing
+ * #NMDevices that are slaves of @device. This is the internal
+ * copy used by the device, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const GPtrArray *
+nm_device_team_get_slaves (NMDeviceTeam *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), FALSE);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return handle_ptr_array_return (NM_DEVICE_TEAM_GET_PRIVATE (device)->slaves);
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_team_get_hw_address (NM_DEVICE_TEAM (device));
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingConnection *s_con;
+ NMSettingTeam *s_team;
+ const char *ctype, *dev_iface_name, *team_iface_name;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ ctype = nm_setting_connection_get_connection_type (s_con);
+ if (strcmp (ctype, NM_SETTING_TEAM_SETTING_NAME) != 0) {
+ g_set_error (error, NM_DEVICE_TEAM_ERROR, NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION,
+ "The connection was not a team connection.");
+ return FALSE;
+ }
+
+ s_team = nm_connection_get_setting_team (connection);
+ if (!s_team) {
+ g_set_error (error, NM_DEVICE_TEAM_ERROR, NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION,
+ "The connection was not a valid team connection.");
+ return FALSE;
+ }
+
+ dev_iface_name = nm_device_get_iface (device);
+ team_iface_name = nm_setting_team_get_interface_name (s_team);
+ if (g_strcmp0 (dev_iface_name, team_iface_name) != 0) {
+ g_set_error (error, NM_DEVICE_TEAM_ERROR, NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH,
+ "The interfaces of the device and the connection didn't match.");
+ return FALSE;
+ }
+
+ /* FIXME: check slaves? */
+
+ return NM_DEVICE_CLASS (nm_device_team_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_TEAM;
+}
+
+/***********************************************************/
+
+static void
+nm_device_team_init (NMDeviceTeam *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_TEAM);
+}
+
+static void
+register_properties (NMDeviceTeam *device)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_TEAM_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_TEAM_CARRIER, &priv->carrier },
+ { NM_DEVICE_TEAM_SLAVES, &priv->slaves, NULL, NM_TYPE_DEVICE },
+ { NULL },
+ };
+
+ _nm_object_register_properties (NM_OBJECT (device),
+ priv->proxy,
+ property_info);
+}
+
+static void
+constructed (GObject *object)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
+
+ G_OBJECT_CLASS (nm_device_team_parent_class)->constructed (object);
+
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_TEAM);
+ register_properties (NM_DEVICE_TEAM (object));
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
+
+ g_clear_object (&priv->proxy);
+
+ if (priv->slaves) {
+ g_ptr_array_set_free_func (priv->slaves, g_object_unref);
+ g_ptr_array_free (priv->slaves, TRUE);
+ priv->slaves = NULL;
+ }
+
+ G_OBJECT_CLASS (nm_device_team_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+
+ G_OBJECT_CLASS (nm_device_team_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceTeam *device = NM_DEVICE_TEAM (object);
+
+ _nm_object_ensure_inited (NM_OBJECT (object));
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_team_get_hw_address (device));
+ break;
+ case PROP_CARRIER:
+ g_value_set_boolean (value, nm_device_team_get_carrier (device));
+ break;
+ case PROP_SLAVES:
+ g_value_set_boxed (value, nm_device_team_get_slaves (device));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_team_class_init (NMDeviceTeamClass *eth_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (eth_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (eth_class);
+
+ g_type_class_add_private (eth_class, sizeof (NMDeviceTeamPrivate));
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceTeam:hw-address:
+ *
+ * The hardware (MAC) address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_TEAM_HW_ADDRESS,
+ "Active MAC Address",
+ "Currently set hardware MAC address",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
+ * NMDeviceTeam:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_TEAM_CARRIER,
+ "Carrier",
+ "Carrier",
+ FALSE,
+ G_PARAM_READABLE));
+
+ /**
+ * NMDeviceTeam:slaves:
+ *
+ * The devices (#NMDevice) enslaved to the team device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SLAVES,
+ g_param_spec_boxed (NM_DEVICE_TEAM_SLAVES,
+ "Slaves",
+ "Slaves",
+ NM_TYPE_OBJECT_ARRAY,
+ G_PARAM_READABLE));
+}
diff --git a/libnm-glib/nm-device-team.h b/libnm-glib/nm-device-team.h
new file mode 100644
index 000000000..054f9ae2b
--- /dev/null
+++ b/libnm-glib/nm-device-team.h
@@ -0,0 +1,85 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * 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.
+ */
+
+#ifndef NM_DEVICE_TEAM_H
+#define NM_DEVICE_TEAM_H
+
+#include "nm-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_TEAM (nm_device_team_get_type ())
+#define NM_DEVICE_TEAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_TEAM, NMDeviceTeam))
+#define NM_DEVICE_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_TEAM, NMDeviceTeamClass))
+#define NM_IS_DEVICE_TEAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_TEAM))
+#define NM_IS_DEVICE_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_TEAM))
+#define NM_DEVICE_TEAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_TEAM, NMDeviceTeamClass))
+
+/**
+ * NMDeviceTeamError:
+ * @NM_DEVICE_TEAM_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION: the connection was not of team type
+ * @NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION: the team connection was invalid
+ * @NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH: the interfaces of the connection and the device mismatched
+ */
+typedef enum {
+ NM_DEVICE_TEAM_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION, /*< nick=NotTeamConnection >*/
+ NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION, /*< nick=InvalidTeamConnection >*/
+ NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH, /*< nick=InterfaceMismatch >*/
+} NMDeviceTeamError;
+
+#define NM_DEVICE_TEAM_ERROR nm_device_team_error_quark ()
+NM_AVAILABLE_IN_0_9_10
+GQuark nm_device_team_error_quark (void);
+
+#define NM_DEVICE_TEAM_HW_ADDRESS "hw-address"
+#define NM_DEVICE_TEAM_CARRIER "carrier"
+#define NM_DEVICE_TEAM_SLAVES "slaves"
+
+typedef struct {
+ NMDevice parent;
+} NMDeviceTeam;
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+ void (*_reserved5) (void);
+ void (*_reserved6) (void);
+} NMDeviceTeamClass;
+
+NM_AVAILABLE_IN_0_9_10
+GType nm_device_team_get_type (void);
+
+NM_AVAILABLE_IN_0_9_10
+GObject *nm_device_team_new (DBusGConnection *connection, const char *path);
+
+const char *nm_device_team_get_hw_address (NMDeviceTeam *device);
+gboolean nm_device_team_get_carrier (NMDeviceTeam *device);
+const GPtrArray *nm_device_team_get_slaves (NMDeviceTeam *device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_TEAM_H */
diff --git a/libnm-glib/nm-device-vlan.c b/libnm-glib/nm-device-vlan.c
index 13ca3ac33..2a84b9465 100644
--- a/libnm-glib/nm-device-vlan.c
+++ b/libnm-glib/nm-device-vlan.c
@@ -55,10 +55,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_CARRIER "Carrier"
-#define DBUS_PROP_VLAN_ID "VlanId"
-
/**
* nm_device_vlan_error_quark:
*
@@ -156,9 +152,10 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
{
NMSettingConnection *s_con;
NMSettingVlan *s_vlan;
+ NMSettingWired *s_wired;
const char *ctype, *dev_iface_name, *vlan_iface_name;
-
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+ const GByteArray *mac_address;
+ char *mac_address_str;
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -191,7 +188,33 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
return FALSE;
}
- return TRUE;
+ s_wired = nm_connection_get_setting_wired (connection);
+ if (s_wired)
+ mac_address = nm_setting_wired_get_mac_address (s_wired);
+ else
+ mac_address = NULL;
+ if (mac_address) {
+ mac_address_str = nm_utils_hwaddr_ntoa_len (mac_address->data, mac_address->len);
+ if (!g_strcmp0 (mac_address_str, NM_DEVICE_VLAN_GET_PRIVATE (device)->hw_address)) {
+ g_set_error (error, NM_DEVICE_VLAN_ERROR, NM_DEVICE_VLAN_ERROR_MAC_MISMATCH,
+ "The hardware address of the device and the connection didn't match.");
+ }
+ g_free (mac_address_str);
+ }
+
+ return NM_DEVICE_CLASS (nm_device_vlan_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_VLAN;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_vlan_get_hw_address (NM_DEVICE_VLAN (device));
}
/***********************************************************/
@@ -221,17 +244,11 @@ register_properties (NMDeviceVlan *device)
static void
constructed (GObject *object)
{
- NMDeviceVlanPrivate *priv;
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_vlan_parent_class)->constructed (object);
- priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_VLAN);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_VLAN);
register_properties (NM_DEVICE_VLAN (object));
}
@@ -295,6 +312,8 @@ nm_device_vlan_class_init (NMDeviceVlanClass *eth_class)
object_class->finalize = finalize;
object_class->get_property = get_property;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
/* properties */
diff --git a/libnm-glib/nm-device-vlan.h b/libnm-glib/nm-device-vlan.h
index 6ccbb028e..960871093 100644
--- a/libnm-glib/nm-device-vlan.h
+++ b/libnm-glib/nm-device-vlan.h
@@ -41,6 +41,7 @@ G_BEGIN_DECLS
* @NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION: the VLAN connection was invalid
* @NM_DEVICE_VLAN_ERROR_ID_MISMATCH: the VLAN identifiers of the connection and the device mismatched
* @NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH: the interfaces of the connection and the device mismatched
+ * @NM_DEVICE_VLAN_ERROR_MAC_MISMATCH: the MACs of the connection and the device mismatched
*/
typedef enum {
NM_DEVICE_VLAN_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
@@ -48,6 +49,7 @@ typedef enum {
NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION, /*< nick=InvalidVlanConnection >*/
NM_DEVICE_VLAN_ERROR_ID_MISMATCH, /*< nick=IdMismatch >*/
NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH, /*< nick=InterfaceMismatch >*/
+ NM_DEVICE_VLAN_ERROR_MAC_MISMATCH, /*< nick=MacMismatch >*/
} NMDeviceVlanError;
#define NM_DEVICE_VLAN_ERROR nm_device_vlan_error_quark ()
diff --git a/libnm-glib/nm-device-wifi.c b/libnm-glib/nm-device-wifi.c
index 47594a50d..b9cc31d8f 100644
--- a/libnm-glib/nm-device-wifi.c
+++ b/libnm-glib/nm-device-wifi.c
@@ -73,24 +73,17 @@ enum {
PROP_BITRATE,
PROP_ACTIVE_ACCESS_POINT,
PROP_WIRELESS_CAPABILITIES,
+ PROP_ACCESS_POINTS,
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_PERM_HW_ADDRESS "PermHwAddress"
-#define DBUS_PROP_MODE "Mode"
-#define DBUS_PROP_BITRATE "Bitrate"
-#define DBUS_PROP_ACTIVE_ACCESS_POINT "ActiveAccessPoint"
-#define DBUS_PROP_WIRELESS_CAPABILITIES "WirelessCapabilities"
-
enum {
ACCESS_POINT_ADDED,
ACCESS_POINT_REMOVED,
LAST_SIGNAL
};
-
static guint signals[LAST_SIGNAL] = { 0 };
/**
@@ -117,7 +110,7 @@ nm_device_wifi_error_quark (void)
*
* Creates a new #NMDeviceWifi.
*
- * Returns: (transfer full): a new WiFi device
+ * Returns: (transfer full): a new Wi-Fi device
**/
GObject *
nm_device_wifi_new (DBusGConnection *connection, const char *path)
@@ -192,9 +185,9 @@ nm_device_wifi_get_mode (NMDeviceWifi *device)
* nm_device_wifi_get_bitrate:
* @device: a #NMDeviceWifi
*
- * Gets the bit rate of the #NMDeviceWifi.
+ * Gets the bit rate of the #NMDeviceWifi in kbit/s.
*
- * Returns: the bit rate
+ * Returns: the bit rate (kbit/s)
**/
guint32
nm_device_wifi_get_bitrate (NMDeviceWifi *device)
@@ -223,7 +216,7 @@ nm_device_wifi_get_bitrate (NMDeviceWifi *device)
* nm_device_wifi_get_capabilities:
* @device: a #NMDeviceWifi
*
- * Gets the WIFI capabilities of the #NMDeviceWifi.
+ * Gets the Wi-Fi capabilities of the #NMDeviceWifi.
*
* Returns: the capabilities
**/
@@ -278,7 +271,7 @@ nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
* Gets all the scanned access points of the #NMDeviceWifi.
*
* Returns: (element-type NMClient.AccessPoint): a #GPtrArray containing all the
- * scanned #NMAccessPoint<!-- -->s.
+ * scanned #NMAccessPoints.
* The returned array is owned by the client and should not be modified.
**/
const GPtrArray *
@@ -390,31 +383,6 @@ nm_device_wifi_request_scan_simple (NMDeviceWifi *device,
}
static void
-access_point_added (NMObject *self, NMObject *ap)
-{
- g_signal_emit (self, signals[ACCESS_POINT_ADDED], 0, ap);
-}
-
-static void
-access_point_removed (NMObject *self_obj, NMObject *ap_obj)
-{
- NMDeviceWifi *self = NM_DEVICE_WIFI (self_obj);
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- NMAccessPoint *ap = NM_ACCESS_POINT (ap_obj);
-
- if (ap == priv->active_ap) {
- g_object_unref (priv->active_ap);
- priv->active_ap = NULL;
- _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT);
-
- priv->rate = 0;
- _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIFI_BITRATE);
- }
-
- g_signal_emit (self, signals[ACCESS_POINT_REMOVED], 0, ap);
-}
-
-static void
clean_up_aps (NMDeviceWifi *self, gboolean notify)
{
NMDeviceWifiPrivate *priv;
@@ -491,8 +459,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
NMDeviceWifiCapabilities wifi_caps;
const char *key_mgmt;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -554,7 +520,19 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
}
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_WIRELESS;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device));
}
/**************************************************************/
@@ -594,6 +572,9 @@ get_property (GObject *object,
case PROP_WIRELESS_CAPABILITIES:
g_value_set_uint (value, nm_device_wifi_get_capabilities (self));
break;
+ case PROP_ACCESS_POINTS:
+ g_value_set_boxed (value, nm_device_wifi_get_access_points (self));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -637,36 +618,38 @@ register_properties (NMDeviceWifi *device)
{ NM_DEVICE_WIFI_BITRATE, &priv->rate },
{ NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, &priv->active_ap, NULL, NM_TYPE_ACCESS_POINT },
{ NM_DEVICE_WIFI_CAPABILITIES, &priv->wireless_caps },
+ { NM_DEVICE_WIFI_ACCESS_POINTS, &priv->aps, NULL, NM_TYPE_ACCESS_POINT, "access-point" },
{ NULL },
};
_nm_object_register_properties (NM_OBJECT (device),
priv->proxy,
property_info);
+}
+
+static void
+access_point_removed (NMDeviceWifi *self, NMAccessPoint *ap)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+
+ if (ap == priv->active_ap) {
+ g_object_unref (priv->active_ap);
+ priv->active_ap = NULL;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT);
- _nm_object_register_pseudo_property (NM_OBJECT (device),
- priv->proxy,
- "AccessPoints",
- &priv->aps,
- NM_TYPE_ACCESS_POINT,
- access_point_added,
- access_point_removed);
+ priv->rate = 0;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIFI_BITRATE);
+ }
}
static void
constructed (GObject *object)
{
- NMDeviceWifiPrivate *priv;
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_wifi_parent_class)->constructed (object);
- priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_WIRELESS);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_WIRELESS);
register_properties (NM_DEVICE_WIFI (object));
g_signal_connect (NM_DEVICE (object),
@@ -727,6 +710,9 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
object_class->dispose = dispose;
object_class->finalize = finalize;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+ wifi_class->access_point_removed = access_point_removed;
/* properties */
@@ -772,7 +758,7 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
/**
* NMDeviceWifi:bitrate:
*
- * The bit rate of the device.
+ * The bit rate of the device in kbit/s.
**/
g_object_class_install_property
(object_class, PROP_BITRATE,
@@ -808,14 +794,29 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
0, G_MAXUINT32, 0,
G_PARAM_READABLE));
+ /**
+ * NMDeviceWifi:access-points:
+ *
+ * List of all Wi-Fi access points the device can see.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACCESS_POINTS,
+ g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS,
+ "AccessPoints",
+ "Access Points",
+ NM_TYPE_OBJECT_ARRAY,
+ G_PARAM_READABLE));
+
/* signals */
/**
* NMDeviceWifi::access-point-added:
- * @device: the wifi device that received the signal
+ * @device: the Wi-Fi device that received the signal
* @ap: the new access point
*
- * Notifies that a #NMAccessPoint is added to the wifi device.
+ * Notifies that a #NMAccessPoint is added to the Wi-Fi device.
**/
signals[ACCESS_POINT_ADDED] =
g_signal_new ("access-point-added",
@@ -829,10 +830,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
/**
* NMDeviceWifi::access-point-removed:
- * @device: the wifi device that received the signal
+ * @device: the Wi-Fi device that received the signal
* @ap: the removed access point
*
- * Notifies that a #NMAccessPoint is removed from the wifi device.
+ * Notifies that a #NMAccessPoint is removed from the Wi-Fi device.
**/
signals[ACCESS_POINT_REMOVED] =
g_signal_new ("access-point-removed",
diff --git a/libnm-glib/nm-device-wifi.h b/libnm-glib/nm-device-wifi.h
index 76d76b4df..f9b30d92b 100644
--- a/libnm-glib/nm-device-wifi.h
+++ b/libnm-glib/nm-device-wifi.h
@@ -67,6 +67,7 @@ GQuark nm_device_wifi_error_quark (void);
#define NM_DEVICE_WIFI_BITRATE "bitrate"
#define NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT "active-access-point"
#define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities"
+#define NM_DEVICE_WIFI_ACCESS_POINTS "access-points"
typedef struct {
NMDevice parent;
diff --git a/libnm-glib/nm-device-wimax.c b/libnm-glib/nm-device-wimax.c
index 881fce5fe..0b0528044 100644
--- a/libnm-glib/nm-device-wimax.c
+++ b/libnm-glib/nm-device-wimax.c
@@ -66,25 +66,17 @@ enum {
PROP_CINR,
PROP_TX_POWER,
PROP_BSID,
+ PROP_NSPS,
LAST_PROP
};
-#define DBUS_PROP_HW_ADDRESS "HwAddress"
-#define DBUS_PROP_ACTIVE_NSP "ActiveNsp"
-#define DBUS_PROP_CENTER_FREQUENCY "CenterFrequency"
-#define DBUS_PROP_RSSI "Rssi"
-#define DBUS_PROP_CINR "Cinr"
-#define DBUS_PROP_TX_POWER "TxPower"
-#define DBUS_PROP_BSID "Bsid"
-
enum {
NSP_ADDED,
NSP_REMOVED,
LAST_SIGNAL
};
-
static guint signals[LAST_SIGNAL] = { 0 };
/**
@@ -189,7 +181,7 @@ nm_device_wimax_get_active_nsp (NMDeviceWimax *wimax)
* Gets all the scanned NSPs of the #NMDeviceWimax.
*
* Returns: (element-type NMClient.WimaxNsp): a #GPtrArray containing
- * all the scanned #NMWimaxNsp<!-- -->s.
+ * all the scanned #NMWimaxNsps.
* The returned array is owned by the client and should not be modified.
**/
const GPtrArray *
@@ -237,28 +229,6 @@ nm_device_wimax_get_nsp_by_path (NMDeviceWimax *wimax,
}
static void
-nsp_added (NMObject *self, NMObject *nsp)
-{
- g_signal_emit (self, signals[NSP_ADDED], 0, nsp);
-}
-
-static void
-nsp_removed (NMObject *self_obj, NMObject *nsp_obj)
-{
- NMDeviceWimax *self = NM_DEVICE_WIMAX (self_obj);
- NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
- NMWimaxNsp *nsp = NM_WIMAX_NSP (nsp_obj);
-
- if (nsp == priv->active_nsp) {
- g_object_unref (priv->active_nsp);
- priv->active_nsp = NULL;
- _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_ACTIVE_NSP);
- }
-
- g_signal_emit (self, signals[NSP_REMOVED], 0, nsp);
-}
-
-static void
clean_up_nsps (NMDeviceWimax *self, gboolean notify)
{
NMDeviceWimaxPrivate *priv;
@@ -390,8 +360,6 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
const char *hw_str;
struct ether_addr *hw_mac;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -426,7 +394,19 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
}
}
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_wimax_parent_class)->connection_compatible (device, connection, error);
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_WIMAX;
+}
+
+static const char *
+get_hw_address (NMDevice *device)
+{
+ return nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device));
}
/**************************************************************/
@@ -469,6 +449,9 @@ get_property (GObject *object,
case PROP_BSID:
g_value_set_string (value, nm_device_wimax_get_bsid (self));
break;
+ case PROP_NSPS:
+ g_value_set_boxed (value, nm_device_wimax_get_nsps (self));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -544,43 +527,42 @@ register_properties (NMDeviceWimax *wimax)
{
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (wimax);
const NMPropertiesInfo property_info[] = {
- { NM_DEVICE_WIMAX_HW_ADDRESS, &priv->hw_address },
- { NM_DEVICE_WIMAX_ACTIVE_NSP, &priv->active_nsp, NULL, NM_TYPE_WIMAX_NSP },
+ { NM_DEVICE_WIMAX_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_WIMAX_ACTIVE_NSP, &priv->active_nsp, NULL, NM_TYPE_WIMAX_NSP },
{ NM_DEVICE_WIMAX_CENTER_FREQUENCY, &priv->center_freq },
- { NM_DEVICE_WIMAX_RSSI, &priv->rssi },
- { NM_DEVICE_WIMAX_CINR, &priv->cinr },
- { NM_DEVICE_WIMAX_TX_POWER, &priv->tx_power },
- { NM_DEVICE_WIMAX_BSID, &priv->bsid },
+ { NM_DEVICE_WIMAX_RSSI, &priv->rssi },
+ { NM_DEVICE_WIMAX_CINR, &priv->cinr },
+ { NM_DEVICE_WIMAX_TX_POWER, &priv->tx_power },
+ { NM_DEVICE_WIMAX_BSID, &priv->bsid },
+ { NM_DEVICE_WIMAX_NSPS, &priv->nsps, NULL, NM_TYPE_WIMAX_NSP, "nsp" },
{ NULL },
};
_nm_object_register_properties (NM_OBJECT (wimax),
priv->proxy,
property_info);
+}
+
+static void
+nsp_removed (NMDeviceWimax *self, NMWimaxNsp *nsp)
+{
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
- _nm_object_register_pseudo_property (NM_OBJECT (wimax),
- priv->proxy,
- "NspList",
- &priv->nsps,
- NM_TYPE_WIMAX_NSP,
- nsp_added,
- nsp_removed);
+ if (nsp == priv->active_nsp) {
+ g_object_unref (priv->active_nsp);
+ priv->active_nsp = NULL;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_ACTIVE_NSP);
+ }
}
static void
constructed (GObject *object)
{
- NMDeviceWimaxPrivate *priv;
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_device_wimax_parent_class)->constructed (object);
- priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE_WIMAX);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_WIMAX);
register_properties (NM_DEVICE_WIMAX (object));
g_signal_connect (object,
@@ -623,6 +605,9 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
object_class->get_property = get_property;
object_class->dispose = dispose;
device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+ wimax_class->nsp_removed = nsp_removed;
/* properties */
@@ -727,6 +712,21 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
NULL,
G_PARAM_READABLE));
+ /**
+ * NMDeviceWimax:nsps:
+ *
+ * List of all WiMAX Network Service Providers the device can see.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NSPS,
+ g_param_spec_boxed (NM_DEVICE_WIMAX_NSPS,
+ "NSPs",
+ "Network Service Providers",
+ NM_TYPE_OBJECT_ARRAY,
+ G_PARAM_READABLE));
+
/* signals */
/**
diff --git a/libnm-glib/nm-device-wimax.h b/libnm-glib/nm-device-wimax.h
index c0550d194..b2282d4f1 100644
--- a/libnm-glib/nm-device-wimax.h
+++ b/libnm-glib/nm-device-wimax.h
@@ -62,6 +62,7 @@ GQuark nm_device_wimax_error_quark (void);
#define NM_DEVICE_WIMAX_CINR "cinr"
#define NM_DEVICE_WIMAX_TX_POWER "tx-power"
#define NM_DEVICE_WIMAX_BSID "bsid"
+#define NM_DEVICE_WIMAX_NSPS "nsps"
typedef struct {
NMDevice parent;
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index 1c4fd7367..b328ba3bb 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -23,6 +23,7 @@
#include <string.h>
+#include <glib/gi18n.h>
#include <gudev/gudev.h>
#include "NetworkManager.h"
@@ -35,17 +36,20 @@
#include "nm-device-wimax.h"
#include "nm-device-infiniband.h"
#include "nm-device-bond.h"
+#include "nm-device-team.h"
#include "nm-device-bridge.h"
#include "nm-device-vlan.h"
+#include "nm-device-generic.h"
#include "nm-device.h"
#include "nm-device-private.h"
#include "nm-object-private.h"
#include "nm-object-cache.h"
#include "nm-remote-connection.h"
#include "nm-types.h"
-#include "nm-glib-marshal.h"
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
+#include "nm-utils.h"
+#include "nm-dbus-helpers-private.h"
static GType _nm_device_type_for_path (DBusGConnection *connection,
const char *path);
@@ -53,6 +57,7 @@ static void _nm_device_type_for_path_async (DBusGConnection *connection,
const char *path,
NMObjectTypeCallbackFunc callback,
gpointer user_data);
+gboolean connection_compatible (NMDevice *device, NMConnection *connection, GError **error);
G_DEFINE_TYPE_WITH_CODE (NMDevice, nm_device, NM_TYPE_OBJECT,
_nm_object_register_type_func (g_define_type_id, _nm_device_type_for_path,
@@ -73,6 +78,7 @@ typedef struct {
char *driver;
char *driver_version;
char *firmware_version;
+ char *type_description;
NMDeviceCapabilities capabilities;
gboolean managed;
gboolean firmware_missing;
@@ -89,8 +95,12 @@ typedef struct {
GPtrArray *available_connections;
GUdevClient *client;
- char *product;
- char *vendor;
+ char *product, *short_product;
+ char *vendor, *short_vendor;
+ char *description, *bus_name;
+
+ char *physical_port_id;
+ guint32 mtu;
} NMDevicePrivate;
enum {
@@ -116,6 +126,8 @@ enum {
PROP_DEVICE_TYPE,
PROP_ACTIVE_CONNECTION,
PROP_AVAILABLE_CONNECTIONS,
+ PROP_PHYSICAL_PORT_ID,
+ PROP_MTU,
LAST_PROP
};
@@ -128,6 +140,24 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
+/**
+ * nm_device_error_quark:
+ *
+ * Registers an error quark for #NMDevice if necessary.
+ *
+ * Returns: the error quark used for #NMDevice errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_device_error_quark (void)
+{
+ static GQuark quark = 0;
+
+ if (G_UNLIKELY (quark == 0))
+ quark = g_quark_from_static_string ("nm-device-error-quark");
+ return quark;
+}
static void
nm_device_init (NMDevice *device)
@@ -178,6 +208,8 @@ register_properties (NMDevice *device)
{ NM_DEVICE_STATE_REASON, &priv->state, demarshal_state_reason },
{ NM_DEVICE_ACTIVE_CONNECTION, &priv->active_connection, NULL, NM_TYPE_ACTIVE_CONNECTION },
{ NM_DEVICE_AVAILABLE_CONNECTIONS, &priv->available_connections, NULL, NM_TYPE_REMOTE_CONNECTION },
+ { NM_DEVICE_PHYSICAL_PORT_ID, &priv->physical_port_id },
+ { NM_DEVICE_MTU, &priv->mtu },
/* Properties that exist in D-Bus but that we don't track */
{ "ip4-address", NULL },
@@ -282,10 +314,14 @@ _nm_device_gtype_from_dtype (NMDeviceType dtype)
return NM_TYPE_DEVICE_INFINIBAND;
case NM_DEVICE_TYPE_BOND:
return NM_TYPE_DEVICE_BOND;
+ case NM_DEVICE_TYPE_TEAM:
+ return NM_TYPE_DEVICE_TEAM;
case NM_DEVICE_TYPE_BRIDGE:
return NM_TYPE_DEVICE_BRIDGE;
case NM_DEVICE_TYPE_VLAN:
return NM_TYPE_DEVICE_VLAN;
+ case NM_DEVICE_TYPE_GENERIC:
+ return NM_TYPE_DEVICE_GENERIC;
default:
g_warning ("Unknown device type %d", dtype);
return G_TYPE_INVALID;
@@ -305,14 +341,11 @@ constructed (GObject *object)
/* Catch a subclass setting the wrong type */
g_warn_if_fail (G_OBJECT_TYPE (object) == _nm_device_gtype_from_dtype (priv->device_type));
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DEVICE);
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE);
register_properties (NM_DEVICE (object));
- dbus_g_object_register_marshaller (_nm_glib_marshal_VOID__UINT_UINT_UINT,
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
G_TYPE_INVALID);
@@ -365,7 +398,13 @@ finalize (GObject *object)
g_free (priv->driver_version);
g_free (priv->firmware_version);
g_free (priv->product);
+ g_free (priv->short_product);
g_free (priv->vendor);
+ g_free (priv->short_vendor);
+ g_free (priv->description);
+ g_free (priv->bus_name);
+ g_free (priv->type_description);
+ g_free (priv->physical_port_id);
G_OBJECT_CLASS (nm_device_parent_class)->finalize (object);
}
@@ -450,6 +489,12 @@ get_property (GObject *object,
case PROP_VENDOR:
g_value_set_string (value, nm_device_get_vendor (device));
break;
+ case PROP_PHYSICAL_PORT_ID:
+ g_value_set_string (value, nm_device_get_physical_port_id (device));
+ break;
+ case PROP_MTU:
+ g_value_set_uint (value, nm_device_get_mtu (device));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -496,6 +541,8 @@ nm_device_class_init (NMDeviceClass *device_class)
object_class->dispose = dispose;
object_class->finalize = finalize;
+ device_class->connection_compatible = connection_compatible;
+
/* properties */
/**
@@ -534,7 +581,7 @@ nm_device_class_init (NMDeviceClass *device_class)
(object_class, PROP_DEVICE_TYPE,
g_param_spec_uint (NM_DEVICE_DEVICE_TYPE,
"Device Type",
- "Numeric device type (ie ethernet, wifi, etc)",
+ "Numeric device type (ie Ethernet, Wi-Fi, etc)",
NM_DEVICE_TYPE_UNKNOWN, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN,
G_PARAM_READABLE));
/**
@@ -779,6 +826,37 @@ nm_device_class_init (NMDeviceClass *device_class)
NULL,
G_PARAM_READABLE));
+ /**
+ * NMDevice:physical-port-id:
+ *
+ * The physical port ID of the device. (See
+ * nm_device_get_physical_port_id().)
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PHYSICAL_PORT_ID,
+ g_param_spec_string (NM_DEVICE_PHYSICAL_PORT_ID,
+ "Physical Port ID",
+ "Physical port ID",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
+ * NMDevice:mtu:
+ *
+ * The MTU of the device.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MTU,
+ g_param_spec_uint (NM_DEVICE_MTU,
+ "MTU",
+ "MTU",
+ 0, G_MAXUINT32, 1500,
+ G_PARAM_READABLE));
+
/* signals */
/**
@@ -795,8 +873,7 @@ nm_device_class_init (NMDeviceClass *device_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceClass, state_changed),
- NULL, NULL,
- _nm_glib_marshal_VOID__UINT_UINT_UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 3,
G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
}
@@ -830,27 +907,25 @@ _nm_device_type_for_path (DBusGConnection *connection,
{
DBusGProxy *proxy;
GError *err = NULL;
- GValue value = {0,};
+ GValue value = G_VALUE_INIT;
NMDeviceType nm_dtype;
- proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- path,
- "org.freedesktop.DBus.Properties");
+ proxy = _nm_dbus_new_proxy_for_connection (connection, path, "org.freedesktop.DBus.Properties");
if (!proxy) {
g_warning ("%s: couldn't create D-Bus object proxy.", __func__);
return G_TYPE_INVALID;
}
if (!dbus_g_proxy_call (proxy,
- "Get", &err,
- G_TYPE_STRING, NM_DBUS_INTERFACE_DEVICE,
- G_TYPE_STRING, "DeviceType",
- G_TYPE_INVALID,
- G_TYPE_VALUE, &value, G_TYPE_INVALID)) {
- g_object_unref (proxy);
+ "Get", &err,
+ G_TYPE_STRING, NM_DBUS_INTERFACE_DEVICE,
+ G_TYPE_STRING, "DeviceType",
+ G_TYPE_INVALID,
+ G_TYPE_VALUE, &value, G_TYPE_INVALID)) {
g_warning ("Error in get_property: %s\n", err->message);
g_error_free (err);
+ g_object_unref (proxy);
+ return G_TYPE_INVALID;
}
g_object_unref (proxy);
@@ -935,8 +1010,7 @@ _nm_device_type_for_path_async (DBusGConnection *connection,
async_data->callback = callback;
async_data->user_data = user_data;
- proxy = dbus_g_proxy_new_for_name (connection, NM_DBUS_SERVICE, path,
- "org.freedesktop.DBus.Properties");
+ proxy = _nm_dbus_new_proxy_for_connection (connection, path, "org.freedesktop.DBus.Properties");
dbus_g_proxy_begin_call (proxy, "Get",
async_got_type, async_data, NULL,
G_TYPE_STRING, NM_DBUS_INTERFACE_DEVICE,
@@ -985,7 +1059,7 @@ nm_device_get_ip_iface (NMDevice *device)
* nm_device_get_device_type:
* @device: a #NMDevice
*
- * Returns the numeric type of the #NMDevice, ie ethernet, wifi, etc.
+ * Returns the numeric type of the #NMDevice, ie Ethernet, Wi-Fi, etc.
*
* Returns: the device type
**/
@@ -1071,6 +1145,65 @@ nm_device_get_firmware_version (NMDevice *device)
}
/**
+ * nm_device_get_type_description:
+ * @device: a #NMDevice
+ *
+ * Gets a (non-localized) description of the type of device that
+ * @device is.
+ *
+ * Returns: the type description of the device. This is the internal
+ * string used by the device, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_device_get_type_description (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ const char *desc, *typename;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ if (priv->type_description)
+ return priv->type_description;
+
+ if (NM_DEVICE_GET_CLASS (device)->get_type_description) {
+ desc = NM_DEVICE_GET_CLASS (device)->get_type_description (device);
+ if (desc)
+ return desc;
+ }
+
+ typename = G_OBJECT_TYPE_NAME (device);
+ if (g_str_has_prefix (typename, "NMDevice"))
+ typename += 8;
+ priv->type_description = g_ascii_strdown (typename, -1);
+
+ return priv->type_description;
+}
+
+/**
+ * nm_device_get_hw_address:
+ * @device: a #NMDevice
+ *
+ * Gets the current a hardware address (MAC) for the @device.
+ *
+ * Returns: the current MAC of the device, or %NULL.
+ * This is the internal string used by the device, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_device_get_hw_address (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ if (NM_DEVICE_GET_CLASS (device)->get_hw_address)
+ return NM_DEVICE_GET_CLASS (device)->get_hw_address (device);
+
+ return NULL;
+}
+
+/**
* nm_device_get_capabilities:
* @device: a #NMDevice
*
@@ -1131,7 +1264,7 @@ nm_device_get_autoconnect (NMDevice *device)
void
nm_device_set_autoconnect (NMDevice *device, gboolean autoconnect)
{
- GValue value = {0,};
+ GValue value = G_VALUE_INIT;
g_return_if_fail (NM_IS_DEVICE (device));
@@ -1172,6 +1305,10 @@ nm_device_get_firmware_missing (NMDevice *device)
*
* Gets the current #NMIP4Config associated with the #NMDevice.
*
+ * Note that as of NetworkManager 0.9.10, you can alternatively use
+ * nm_active_connection_get_ip4_config(), which also works with VPN
+ * connections.
+ *
* Returns: (transfer none): the #NMIP4Config or %NULL if the device is not activated.
**/
NMIP4Config *
@@ -1189,6 +1326,10 @@ nm_device_get_ip4_config (NMDevice *device)
*
* Gets the current #NMDHCP4Config associated with the #NMDevice.
*
+ * Note that as of NetworkManager 0.9.10, you can alternatively use
+ * nm_active_connection_get_dhcp4_config(), which also works with VPN
+ * connections.
+ *
* Returns: (transfer none): the #NMDHCP4Config or %NULL if the device is not activated or not
* using DHCP.
**/
@@ -1207,6 +1348,10 @@ nm_device_get_dhcp4_config (NMDevice *device)
*
* Gets the current #NMIP6Config associated with the #NMDevice.
*
+ * Note that as of NetworkManager 0.9.10, you can alternatively use
+ * nm_active_connection_get_ip6_config(), which also works with VPN
+ * connections.
+ *
* Returns: (transfer none): the #NMIP6Config or %NULL if the device is not activated.
**/
NMIP6Config *
@@ -1224,6 +1369,10 @@ nm_device_get_ip6_config (NMDevice *device)
*
* Gets the current #NMDHCP6Config associated with the #NMDevice.
*
+ * Note that as of NetworkManager 0.9.10, you can alternatively use
+ * nm_active_connection_get_dhcp6_config(), which also works with VPN
+ * connections.
+ *
* Returns: (transfer none): the #NMDHCP6Config or %NULL if the device is not activated or not
* using DHCP.
**/
@@ -1314,33 +1463,6 @@ nm_device_get_available_connections (NMDevice *device)
return handle_ptr_array_return (NM_DEVICE_GET_PRIVATE (device)->available_connections);
}
-/* From hostap, Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi> */
-
-static int hex2num (char c)
-{
- if (c >= '0' && c <= '9')
- return c - '0';
- if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- return -1;
-}
-
-static int hex2byte (const char *hex)
-{
- int a, b;
- a = hex2num(*hex++);
- if (a < 0)
- return -1;
- b = hex2num(*hex++);
- if (b < 0)
- return -1;
- return (a << 4) | b;
-}
-
-/* End from hostap */
-
static char *
get_decoded_property (GUdevDevice *device, const char *property)
{
@@ -1356,7 +1478,7 @@ get_decoded_property (GUdevDevice *device, const char *property)
n = unescaped = g_malloc0 (len + 1);
while (*p) {
if ((len >= 4) && (*p == '\\') && (*(p+1) == 'x')) {
- *n++ = (char) hex2byte (p + 2);
+ *n++ = (char) nm_utils_hex2byte (p + 2);
p += 4;
len -= 4;
} else {
@@ -1368,23 +1490,31 @@ get_decoded_property (GUdevDevice *device, const char *property)
return unescaped;
}
+static gboolean
+ensure_udev_client (NMDevice *device)
+{
+ static const char *const subsys[3] = { "net", "tty", NULL };
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (!priv->client)
+ priv->client = g_udev_client_new (subsys);
+
+ return priv->client != NULL;
+}
+
static char *
_get_udev_property (NMDevice *device,
const char *enc_prop, /* ID_XXX_ENC */
const char *db_prop) /* ID_XXX_FROM_DATABASE */
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- const char *subsys[3] = { "net", "tty", NULL };
GUdevDevice *udev_device = NULL, *tmpdev, *olddev;
const char *ifname;
guint32 count = 0;
char *enc_value = NULL, *db_value = NULL;
- if (!priv->client) {
- priv->client = g_udev_client_new (subsys);
- if (!priv->client)
- return NULL;
- }
+ if (!ensure_udev_client (device))
+ return NULL;
ifname = nm_device_get_iface (device);
if (!ifname)
@@ -1424,7 +1554,7 @@ _get_udev_property (NMDevice *device,
/* Balance the initial g_udev_client_query_by_subsystem_and_name() */
g_object_unref (udev_device);
- /* Prefer the the encoded value which comes directly from the device
+ /* Prefer the encoded value which comes directly from the device
* over the hwdata database value.
*/
if (enc_value) {
@@ -1487,6 +1617,479 @@ nm_device_get_vendor (NMDevice *device)
return priv->vendor;
}
+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",
+ NULL
+};
+
+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)",
+ NULL
+};
+
+static char *
+fixup_desc_string (const char *desc)
+{
+ char *p, *temp;
+ char **words, **item;
+ GString *str;
+ int i;
+
+ if (!desc)
+ return NULL;
+
+ p = temp = g_strdup (desc);
+ while (*p) {
+ if (*p == '_' || *p == ',')
+ *p = ' ';
+ p++;
+ }
+
+ /* Attempt to shorten ID by ignoring certain phrases */
+ for (i = 0; ignored_phrases[i]; i++) {
+ p = strstr (temp, ignored_phrases[i]);
+ if (p) {
+ guint32 ignored_len = strlen (ignored_phrases[i]);
+
+ memmove (p, p + ignored_len, strlen (p + ignored_len) + 1); /* +1 for the \0 */
+ }
+ }
+
+ /* Attempt to shorten ID by ignoring certain individual words */
+ words = g_strsplit (temp, " ", 0);
+ str = g_string_new_len (NULL, strlen (temp));
+ g_free (temp);
+
+ for (item = words; *item; item++) {
+ gboolean ignore = FALSE;
+
+ if (**item == '\0')
+ continue;
+
+ for (i = 0; ignored_words[i]; i++) {
+ if (!strcmp (*item, ignored_words[i])) {
+ ignore = TRUE;
+ break;
+ }
+ }
+
+ if (!ignore) {
+ if (str->len)
+ g_string_append_c (str, ' ');
+ g_string_append (str, *item);
+ }
+ }
+ g_strfreev (words);
+
+ temp = str->str;
+ g_string_free (str, FALSE);
+
+ return temp;
+}
+
+static void
+get_description (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ const char *dev_product;
+ const char *dev_vendor;
+ char *pdown;
+ char *vdown;
+ GString *str;
+
+ dev_product = nm_device_get_product (device);
+ priv->short_product = fixup_desc_string (dev_product);
+
+ dev_vendor = nm_device_get_vendor (device);
+ priv->short_vendor = fixup_desc_string (dev_vendor);
+
+ if (!dev_product || !dev_vendor) {
+ priv->description = g_strdup (nm_device_get_iface (device));
+ return;
+ }
+
+ str = g_string_new_len (NULL, strlen (priv->short_vendor) + strlen (priv->short_product) + 1);
+
+ /* Another quick hack; if all of the fixed up vendor string
+ * is found in product, ignore the vendor.
+ */
+ pdown = g_ascii_strdown (priv->short_product, -1);
+ vdown = g_ascii_strdown (priv->short_vendor, -1);
+ if (!strstr (pdown, vdown)) {
+ g_string_append (str, priv->short_vendor);
+ g_string_append_c (str, ' ');
+ }
+ g_free (pdown);
+ g_free (vdown);
+
+ g_string_append (str, priv->short_product);
+
+ priv->description = g_string_free (str, FALSE);
+}
+
+static const char *
+get_short_vendor (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (!priv->description)
+ get_description (device);
+
+ return priv->short_vendor;
+}
+
+/**
+ * nm_device_get_description:
+ * @device: an #NMDevice
+ *
+ * Gets a description of @device, incorporating the results of
+ * nm_device_get_short_vendor() and nm_device_get_short_product().
+ *
+ * Returns: a description of @device. If either the vendor or the
+ * product name is unknown, this returns the interface name.
+ *
+ * Since: 0.9.10
+ */
+const char *
+nm_device_get_description (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (!priv->description)
+ get_description (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_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");
+ default:
+ 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);
+ GUdevDevice *udevice;
+ const char *ifname, *bus;
+
+ if (priv->bus_name)
+ goto out;
+
+ if (!ensure_udev_client (device))
+ return NULL;
+
+ ifname = nm_device_get_iface (device);
+ if (!ifname)
+ return NULL;
+
+ udevice = g_udev_client_query_by_subsystem_and_name (priv->client, "net", ifname);
+ if (!udevice)
+ udevice = g_udev_client_query_by_subsystem_and_name (priv->client, "tty", ifname);
+ if (!udevice)
+ return NULL;
+
+ bus = g_udev_device_get_property (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 ("");
+ }
+
+out:
+ if (*priv->bus_name)
+ return priv->bus_name;
+ else
+ return NULL;
+}
+
+static gboolean
+find_duplicates (char **names,
+ gboolean *duplicates,
+ int num_devices)
+{
+ int i, j;
+ gboolean found_any = FALSE;
+
+ memset (duplicates, 0, num_devices * sizeof (gboolean));
+ for (i = 0; i < num_devices; i++) {
+ if (duplicates[i])
+ continue;
+ for (j = i + 1; j < num_devices; j++) {
+ if (duplicates[j])
+ continue;
+ if (!strcmp (names[i], names[j]))
+ duplicates[i] = duplicates[j] = found_any = TRUE;
+ }
+ }
+
+ return found_any;
+}
+
+/**
+ * nm_device_disambiguate_names:
+ * @devices: (array length=num_devices): an array of #NMDevice
+ * @num_devices: length of @devices
+ *
+ * Generates a list of short-ish unique presentation names for the
+ * devices in @devices.
+ *
+ * Returns: (transfer full) (array zero-terminated=1): the device names
+ *
+ * Since: 0.9.10
+ */
+char **
+nm_device_disambiguate_names (NMDevice **devices,
+ int num_devices)
+{
+ char **names;
+ gboolean *duplicates;
+ int i;
+
+ names = g_new (char *, num_devices + 1);
+ duplicates = g_new (gboolean, num_devices);
+
+ /* Generic device name */
+ for (i = 0; i < num_devices; i++)
+ names[i] = get_device_generic_type_name_with_iface (devices[i]);
+ if (!find_duplicates (names, duplicates, num_devices))
+ goto done;
+
+ /* Try specific names (eg, "Ethernet" and "InfiniBand" rather
+ * than "Wired")
+ */
+ for (i = 0; i < num_devices; i++) {
+ if (duplicates[i]) {
+ g_free (names[i]);
+ names[i] = get_device_type_name_with_iface (devices[i]);
+ }
+ }
+ if (!find_duplicates (names, duplicates, num_devices))
+ goto done;
+
+ /* Try prefixing bus name (eg, "PCI Ethernet" vs "USB Ethernet") */
+ for (i = 0; i < num_devices; i++) {
+ if (duplicates[i]) {
+ const char *bus = get_bus_name (devices[i]);
+ char *name;
+
+ if (!bus)
+ continue;
+
+ g_free (names[i]);
+ name = get_device_type_name_with_iface (devices[i]);
+ /* 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
+ * the strings otherwise.
+ */
+ names[i] = g_strdup_printf (C_("long device name", "%s %s"),
+ bus, name);
+ g_free (name);
+ }
+ }
+ if (!find_duplicates (names, duplicates, num_devices))
+ goto done;
+
+ /* Try prefixing vendor name */
+ for (i = 0; i < num_devices; i++) {
+ if (duplicates[i]) {
+ const char *vendor = get_short_vendor (devices[i]);
+ char *name;
+
+ if (!vendor)
+ continue;
+
+ g_free (names[i]);
+ name = get_device_type_name_with_iface (devices[i]);
+ names[i] = g_strdup_printf (C_("long device name", "%s %s"),
+ vendor,
+ get_type_name (devices[i]));
+ g_free (name);
+ }
+ }
+ if (!find_duplicates (names, duplicates, num_devices))
+ goto done;
+
+ /* We have multiple identical network cards, so we have to differentiate
+ * them by interface name.
+ */
+ for (i = 0; i < num_devices; i++) {
+ if (duplicates[i]) {
+ const char *interface = nm_device_get_iface (devices[i]);
+
+ if (!interface)
+ continue;
+
+ g_free (names[i]);
+ names[i] = g_strdup_printf ("%s (%s)",
+ get_type_name (devices[i]),
+ interface);
+ }
+ }
+
+done:
+ g_free (duplicates);
+ names[num_devices] = NULL;
+ return names;
+}
+
+/**
+ * nm_device_get_physical_port_id:
+ * @device: a #NMDevice
+ *
+ * Gets the physical port ID of the #NMDevice. If non-%NULL, this is
+ * an opaque string that can be used to recognize when
+ * seemingly-unrelated #NMDevices are actually just different virtual
+ * ports on a single physical port. (Eg, NPAR / SR-IOV.)
+ *
+ * Returns: the physical port ID of the device, or %NULL if the port
+ * ID is unknown. This is the internal string used by the device and
+ * must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_device_get_physical_port_id (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ if (priv->physical_port_id && *priv->physical_port_id)
+ return priv->physical_port_id;
+ else
+ return NULL;
+}
+
+/**
+ * nm_device_get_mtu:
+ * @device: a #NMDevice
+ *
+ * Gets the MTU of the #NMDevice.
+ *
+ * Returns: the MTU of the device.
+ *
+ * Since: 0.9.10
+ **/
+guint32
+nm_device_get_mtu (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return NM_DEVICE_GET_PRIVATE (device)->mtu;
+}
+
typedef struct {
NMDevice *device;
NMDeviceDeactivateFn fn;
@@ -1555,8 +2158,8 @@ nm_device_disconnect (NMDevice *device,
*
* Validates a given connection for a given #NMDevice object and returns
* whether the connection may be activated with the device. For example if
- * @device is a WiFi device that supports only WEP encryption, the connection
- * will only be valid if it is a WiFi connection which describes a WEP or open
+ * @device is a Wi-Fi device that supports only WEP encryption, the connection
+ * will only be valid if it is a Wi-Fi connection which describes a WEP or open
* network, and will not be valid if it describes a WPA network, or if it is
* an Ethernet, Bluetooth, WWAN, etc connection that is incompatible with the
* device.
@@ -1570,6 +2173,26 @@ nm_device_connection_valid (NMDevice *device, NMConnection *connection)
return nm_device_connection_compatible (device, connection, NULL);
}
+gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingConnection *s_con;
+ const char *config_iface, *device_iface;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ config_iface = nm_setting_connection_get_interface_name (s_con);
+ device_iface = nm_device_get_iface (device);
+ if (config_iface && g_strcmp0 (config_iface, device_iface) != 0) {
+ g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INTERFACE_MISMATCH,
+ "The interface names of the device and the connection didn't match.");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
/**
* nm_device_connection_compatible:
* @device: an #NMDevice to validate @connection against
@@ -1578,8 +2201,8 @@ nm_device_connection_valid (NMDevice *device, NMConnection *connection)
*
* Validates a given connection for a given #NMDevice object and returns
* whether the connection may be activated with the device. For example if
- * @device is a WiFi device that supports only WEP encryption, the connection
- * will only be valid if it is a WiFi connection which describes a WEP or open
+ * @device is a Wi-Fi device that supports only WEP encryption, the connection
+ * will only be valid if it is a Wi-Fi connection which describes a WEP or open
* network, and will not be valid if it describes a WPA network, or if it is
* an Ethernet, Bluetooth, WWAN, etc connection that is incompatible with the
* device.
@@ -1594,9 +2217,11 @@ nm_device_connection_valid (NMDevice *device, NMConnection *connection)
gboolean
nm_device_connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
{
- if (NM_DEVICE_GET_CLASS (device)->connection_compatible)
- return NM_DEVICE_GET_CLASS (device)->connection_compatible (device, connection, error);
- return FALSE;
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ return NM_DEVICE_GET_CLASS (device)->connection_compatible (device, connection, error);
}
/**
@@ -1606,10 +2231,10 @@ nm_device_connection_compatible (NMDevice *device, NMConnection *connection, GEr
*
* Filters a given list of connections for a given #NMDevice object and return
* connections which may be activated with the device. For example if @device
- * is a WiFi device that supports only WEP encryption, the returned list will
- * contain any WiFi connections in @connections that allow connection to
+ * is a Wi-Fi device that supports only WEP encryption, the returned list will
+ * contain any Wi-Fi connections in @connections that allow connection to
* unencrypted or WEP-enabled SSIDs. The returned list will not contain
- * Ethernet, Bluetooth, WiFi WPA connections, or any other connection that is
+ * Ethernet, Bluetooth, Wi-Fi WPA connections, or any other connection that is
* incompatible with the device. To get the full list of connections see
* nm_remote_settings_list_connections().
*
@@ -1636,3 +2261,22 @@ nm_device_filter_connections (NMDevice *device, const GSList *connections)
return g_slist_reverse (filtered);
}
+/**
+ * nm_device_get_setting_type:
+ * @device: an #NMDevice
+ *
+ * Gets the (primary) #NMSetting subtype associated with connections
+ * that can be used on @device.
+ *
+ * Returns: @device's associated #NMSetting type
+ *
+ * Since: 0.9.10
+ */
+GType
+nm_device_get_setting_type (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), G_TYPE_INVALID);
+ g_return_val_if_fail (NM_DEVICE_GET_CLASS (device)->get_setting_type != NULL, G_TYPE_INVALID);
+
+ return NM_DEVICE_GET_CLASS (device)->get_setting_type (device);
+}
diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h
index c49675bcc..ed0f68767 100644
--- a/libnm-glib/nm-device.h
+++ b/libnm-glib/nm-device.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
#ifndef NM_DEVICE_H
@@ -45,6 +45,21 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE))
#define NM_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE, NMDeviceClass))
+/**
+ * NMDeviceError:
+ * @NM_DEVICE_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_DEVICE_ERROR_INTERFACE_MISMATCH: the interface names of the connection and the
+ * device mismatched
+ */
+typedef enum {
+ NM_DEVICE_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_DEVICE_ERROR_INTERFACE_MISMATCH, /*< nick=InterfaceMismatch >*/
+} NMDeviceError;
+
+#define NM_DEVICE_ERROR nm_device_error_quark ()
+NM_AVAILABLE_IN_0_9_10
+GQuark nm_device_error_quark (void);
+
#define NM_DEVICE_DEVICE_TYPE "device-type"
#define NM_DEVICE_UDI "udi"
#define NM_DEVICE_INTERFACE "interface"
@@ -66,6 +81,8 @@ G_BEGIN_DECLS
#define NM_DEVICE_AVAILABLE_CONNECTIONS "available-connections"
#define NM_DEVICE_VENDOR "vendor"
#define NM_DEVICE_PRODUCT "product"
+#define NM_DEVICE_PHYSICAL_PORT_ID "physical-port-id"
+#define NM_DEVICE_MTU "mtu"
typedef struct {
NMObject parent;
@@ -84,13 +101,15 @@ typedef struct {
NMConnection *connection,
GError **error);
+ const char * (*get_type_description) (NMDevice *device);
+ const char * (*get_hw_address) (NMDevice *device);
+
+ GType (*get_setting_type) (NMDevice *device);
+
/* Padding for future expansion */
void (*_reserved1) (void);
void (*_reserved2) (void);
void (*_reserved3) (void);
- void (*_reserved4) (void);
- void (*_reserved5) (void);
- void (*_reserved6) (void);
} NMDeviceClass;
GType nm_device_get_type (void);
@@ -104,6 +123,10 @@ const char * nm_device_get_udi (NMDevice *device);
const char * nm_device_get_driver (NMDevice *device);
const char * nm_device_get_driver_version (NMDevice *device);
const char * nm_device_get_firmware_version (NMDevice *device);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_device_get_type_description (NMDevice *device);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_device_get_hw_address (NMDevice *device);
NMDeviceCapabilities nm_device_get_capabilities (NMDevice *device);
gboolean nm_device_get_managed (NMDevice *device);
gboolean nm_device_get_autoconnect (NMDevice *device);
@@ -117,8 +140,18 @@ NMDeviceState nm_device_get_state (NMDevice *device);
NMDeviceState nm_device_get_state_reason (NMDevice *device, NMDeviceStateReason *reason);
NMActiveConnection * nm_device_get_active_connection(NMDevice *device);
const GPtrArray * nm_device_get_available_connections(NMDevice *device);
-const char * nm_device_get_product (NMDevice *device);
-const char * nm_device_get_vendor (NMDevice *device);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_device_get_physical_port_id (NMDevice *device);
+NM_AVAILABLE_IN_0_9_10
+guint32 nm_device_get_mtu (NMDevice *device);
+
+const char * nm_device_get_product (NMDevice *device);
+const char * nm_device_get_vendor (NMDevice *device);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_device_get_description (NMDevice *device);
+NM_AVAILABLE_IN_0_9_10
+char ** nm_device_disambiguate_names (NMDevice **devices,
+ int num_devices);
typedef void (*NMDeviceDeactivateFn) (NMDevice *device, GError *error, gpointer user_data);
@@ -136,6 +169,9 @@ gboolean nm_device_connection_compatible (NMDevice *device,
NMConnection *connection,
GError **error);
+NM_AVAILABLE_IN_0_9_10
+GType nm_device_get_setting_type (NMDevice *device);
+
G_END_DECLS
#endif /* NM_DEVICE_H */
diff --git a/libnm-glib/nm-dhcp4-config.c b/libnm-glib/nm-dhcp4-config.c
index b8d7dcddd..a861d9820 100644
--- a/libnm-glib/nm-dhcp4-config.c
+++ b/libnm-glib/nm-dhcp4-config.c
@@ -51,26 +51,23 @@ nm_dhcp4_config_init (NMDHCP4Config *config)
{
}
-static void
-copy_options (gpointer key, gpointer data, gpointer user_data)
-{
- GHashTable *options = (GHashTable *) user_data;
- GValue *value = (GValue *) data;
-
- g_hash_table_insert (options, g_strdup (key), g_value_dup_string (value));
-}
-
static gboolean
demarshal_dhcp4_options (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
{
NMDHCP4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
GHashTable *new_options;
+ GHashTableIter iter;
+ const char *key;
+ GValue *opt;
g_hash_table_remove_all (priv->options);
new_options = g_value_get_boxed (value);
- if (new_options)
- g_hash_table_foreach (new_options, copy_options, priv->options);
+ if (new_options) {
+ g_hash_table_iter_init (&iter, new_options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &opt))
+ g_hash_table_insert (priv->options, g_strdup (key), g_value_dup_string (opt));
+ }
_nm_object_queue_notify (object, NM_DHCP4_CONFIG_OPTIONS);
return TRUE;
@@ -93,21 +90,13 @@ register_properties (NMDHCP4Config *config)
static void
constructed (GObject *object)
{
- DBusGConnection *connection;
- NMDHCP4ConfigPrivate *priv;
+ NMDHCP4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_dhcp4_config_parent_class)->constructed (object);
- priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- connection = nm_object_get_connection (NM_OBJECT (object));
-
- priv->proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DHCP4_CONFIG);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DHCP4_CONFIG);
register_properties (NM_DHCP4_CONFIG (object));
}
diff --git a/libnm-glib/nm-dhcp6-config.c b/libnm-glib/nm-dhcp6-config.c
index fd1e6526c..ef6006b05 100644
--- a/libnm-glib/nm-dhcp6-config.c
+++ b/libnm-glib/nm-dhcp6-config.c
@@ -51,26 +51,23 @@ nm_dhcp6_config_init (NMDHCP6Config *config)
{
}
-static void
-copy_options (gpointer key, gpointer data, gpointer user_data)
-{
- GHashTable *options = (GHashTable *) user_data;
- GValue *value = (GValue *) data;
-
- g_hash_table_insert (options, g_strdup (key), g_value_dup_string (value));
-}
-
static gboolean
demarshal_dhcp6_options (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
{
NMDHCP6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
GHashTable *new_options;
+ GHashTableIter iter;
+ const char *key;
+ GValue *opt;
g_hash_table_remove_all (priv->options);
new_options = g_value_get_boxed (value);
- if (new_options)
- g_hash_table_foreach (new_options, copy_options, priv->options);
+ if (new_options) {
+ g_hash_table_iter_init (&iter, new_options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &opt))
+ g_hash_table_insert (priv->options, g_strdup (key), g_value_dup_string (opt));
+ }
_nm_object_queue_notify (object, NM_DHCP6_CONFIG_OPTIONS);
return TRUE;
@@ -93,21 +90,13 @@ register_properties (NMDHCP6Config *config)
static void
constructed (GObject *object)
{
- DBusGConnection *connection;
- NMDHCP6ConfigPrivate *priv;
+ NMDHCP6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_dhcp6_config_parent_class)->constructed (object);
- priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- connection = nm_object_get_connection (NM_OBJECT (object));
-
- priv->proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_DHCP6_CONFIG);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DHCP6_CONFIG);
register_properties (NM_DHCP6_CONFIG (object));
}
diff --git a/libnm-glib/nm-glib-enum-types.c b/libnm-glib/nm-glib-enum-types.c
index c2e92beee..8e8b0ff92 100644
--- a/libnm-glib/nm-glib-enum-types.c
+++ b/libnm-glib/nm-glib-enum-types.c
@@ -15,8 +15,10 @@
#include "nm-device-bt.h"
#include "nm-device-olpc-mesh.h"
#include "nm-device-bond.h"
+#include "nm-device-team.h"
#include "nm-device-bridge.h"
#include "nm-device-vlan.h"
+#include "nm-device-generic.h"
#include "nm-access-point.h"
#include "nm-ip4-config.h"
#include "nm-device-modem.h"
@@ -103,6 +105,44 @@ nm_client_permission_result_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_client_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_CLIENT_ERROR_UNKNOWN, "NM_CLIENT_ERROR_UNKNOWN", "UnknownError" },
+ { NM_CLIENT_ERROR_MANAGER_NOT_RUNNING, "NM_CLIENT_ERROR_MANAGER_NOT_RUNNING", "ManagerNotRunning" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMClientError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_device_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_DEVICE_ERROR_UNKNOWN, "NM_DEVICE_ERROR_UNKNOWN", "UnknownError" },
+ { NM_DEVICE_ERROR_INTERFACE_MISMATCH, "NM_DEVICE_ERROR_INTERFACE_MISMATCH", "InterfaceMismatch" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMDeviceError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_device_ethernet_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -255,6 +295,27 @@ nm_device_bond_error_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_device_team_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_DEVICE_TEAM_ERROR_UNKNOWN, "NM_DEVICE_TEAM_ERROR_UNKNOWN", "UnknownError" },
+ { NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION, "NM_DEVICE_TEAM_ERROR_NOT_TEAM_CONNECTION", "NotTeamConnection" },
+ { NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION, "NM_DEVICE_TEAM_ERROR_INVALID_TEAM_CONNECTION", "InvalidTeamConnection" },
+ { NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH, "NM_DEVICE_TEAM_ERROR_INTERFACE_MISMATCH", "InterfaceMismatch" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMDeviceTeamError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_device_bridge_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -288,6 +349,7 @@ nm_device_vlan_error_get_type (void)
{ NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION, "NM_DEVICE_VLAN_ERROR_INVALID_VLAN_CONNECTION", "InvalidVlanConnection" },
{ NM_DEVICE_VLAN_ERROR_ID_MISMATCH, "NM_DEVICE_VLAN_ERROR_ID_MISMATCH", "IdMismatch" },
{ NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH, "NM_DEVICE_VLAN_ERROR_INTERFACE_MISMATCH", "InterfaceMismatch" },
+ { NM_DEVICE_VLAN_ERROR_MAC_MISMATCH, "NM_DEVICE_VLAN_ERROR_MAC_MISMATCH", "MacMismatch" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
@@ -298,6 +360,26 @@ nm_device_vlan_error_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_device_generic_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_DEVICE_GENERIC_ERROR_UNKNOWN, "NM_DEVICE_GENERIC_ERROR_UNKNOWN", "UnknownError" },
+ { NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION, "NM_DEVICE_GENERIC_ERROR_NOT_GENERIC_CONNECTION", "NotGenericConnection" },
+ { NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME, "NM_DEVICE_GENERIC_ERROR_MISSING_INTERFACE_NAME", "MissingInterfaceName" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMDeviceGenericError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_device_modem_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -319,6 +401,25 @@ nm_device_modem_error_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_remote_connection_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_REMOTE_CONNECTION_ERROR_UNKNOWN, "NM_REMOTE_CONNECTION_ERROR_UNKNOWN", "UnknownError" },
+ { NM_REMOTE_CONNECTION_ERROR_DISCONNECTED, "NM_REMOTE_CONNECTION_ERROR_DISCONNECTED", "Disconnected" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMRemoteConnectionError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_remote_settings_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -329,6 +430,7 @@ nm_remote_settings_error_get_type (void)
{ NM_REMOTE_SETTINGS_ERROR_UNKNOWN, "NM_REMOTE_SETTINGS_ERROR_UNKNOWN", "UnknownError" },
{ NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED, "NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED", "ConnectionRemoved" },
{ NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE, "NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE", "ConnectionUnavailable" },
+ { NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE, "NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE", "ServiceUnavailable" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
@@ -362,6 +464,26 @@ nm_secret_agent_error_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_secret_agent_capabilities_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GFlagsValue values[] = {
+ { NM_SECRET_AGENT_CAPABILITY_NONE, "NM_SECRET_AGENT_CAPABILITY_NONE", "none" },
+ { NM_SECRET_AGENT_CAPABILITY_VPN_HINTS, "NM_SECRET_AGENT_CAPABILITY_VPN_HINTS", "vpn-hints" },
+ { NM_SECRET_AGENT_CAPABILITY_LAST, "NM_SECRET_AGENT_CAPABILITY_LAST", "last" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMSecretAgentCapabilities"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_secret_agent_get_secrets_flags_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
diff --git a/libnm-glib/nm-glib-enum-types.h b/libnm-glib/nm-glib-enum-types.h
index f33db0023..9353d3810 100644
--- a/libnm-glib/nm-glib-enum-types.h
+++ b/libnm-glib/nm-glib-enum-types.h
@@ -15,6 +15,10 @@ GType nm_client_permission_get_type (void) G_GNUC_CONST;
#define NM_TYPE_CLIENT_PERMISSION (nm_client_permission_get_type ())
GType nm_client_permission_result_get_type (void) G_GNUC_CONST;
#define NM_TYPE_CLIENT_PERMISSION_RESULT (nm_client_permission_result_get_type ())
+GType nm_client_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_CLIENT_ERROR (nm_client_error_get_type ())
+GType nm_device_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_ERROR (nm_device_error_get_type ())
GType nm_device_ethernet_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DEVICE_ETHERNET_ERROR (nm_device_ethernet_error_get_type ())
GType nm_device_infiniband_error_get_type (void) G_GNUC_CONST;
@@ -29,16 +33,24 @@ GType nm_device_olpc_mesh_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DEVICE_OLPC_MESH_ERROR (nm_device_olpc_mesh_error_get_type ())
GType nm_device_bond_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DEVICE_BOND_ERROR (nm_device_bond_error_get_type ())
+GType nm_device_team_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_TEAM_ERROR (nm_device_team_error_get_type ())
GType nm_device_bridge_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DEVICE_BRIDGE_ERROR (nm_device_bridge_error_get_type ())
GType nm_device_vlan_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DEVICE_VLAN_ERROR (nm_device_vlan_error_get_type ())
+GType nm_device_generic_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_GENERIC_ERROR (nm_device_generic_error_get_type ())
GType nm_device_modem_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DEVICE_MODEM_ERROR (nm_device_modem_error_get_type ())
+GType nm_remote_connection_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_REMOTE_CONNECTION_ERROR (nm_remote_connection_error_get_type ())
GType nm_remote_settings_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_REMOTE_SETTINGS_ERROR (nm_remote_settings_error_get_type ())
GType nm_secret_agent_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SECRET_AGENT_ERROR (nm_secret_agent_error_get_type ())
+GType nm_secret_agent_capabilities_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SECRET_AGENT_CAPABILITIES (nm_secret_agent_capabilities_get_type ())
GType nm_secret_agent_get_secrets_flags_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SECRET_AGENT_GET_SECRETS_FLAGS (nm_secret_agent_get_secrets_flags_get_type ())
GType nm_device_wimax_error_get_type (void) G_GNUC_CONST;
diff --git a/libnm-glib/nm-glib-marshal.c b/libnm-glib/nm-glib-marshal.c
deleted file mode 100644
index 4f4e4c867..000000000
--- a/libnm-glib/nm-glib-marshal.c
+++ /dev/null
@@ -1,204 +0,0 @@
-#include "nm-glib-marshal.h"
-
-#include <glib-object.h>
-
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_schar (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* VOID:POINTER,POINTER (nm-glib-marshal.list:1) */
-void
-_nm_glib_marshal_VOID__POINTER_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__POINTER_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__POINTER_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_pointer (param_values + 1),
- g_marshal_value_peek_pointer (param_values + 2),
- data2);
-}
-
-/* VOID:STRING,STRING,STRING (nm-glib-marshal.list:2) */
-void
-_nm_glib_marshal_VOID__STRING_STRING_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_STRING_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- data2);
-}
-
-/* VOID:UINT,UINT (nm-glib-marshal.list:3) */
-void
-_nm_glib_marshal_VOID__UINT_UINT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
- guint arg_1,
- guint arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__UINT_UINT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_uint (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- data2);
-}
-
-/* VOID:UINT,UINT,UINT (nm-glib-marshal.list:4) */
-void
-_nm_glib_marshal_VOID__UINT_UINT_UINT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__UINT_UINT_UINT) (gpointer data1,
- guint arg_1,
- guint arg_2,
- guint arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__UINT_UINT_UINT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__UINT_UINT_UINT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_uint (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- g_marshal_value_peek_uint (param_values + 3),
- data2);
-}
-
diff --git a/libnm-glib/nm-glib-marshal.h b/libnm-glib/nm-glib-marshal.h
deleted file mode 100644
index 01a96a871..000000000
--- a/libnm-glib/nm-glib-marshal.h
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef ___nm_glib_marshal_MARSHAL_H__
-#define ___nm_glib_marshal_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/* VOID:POINTER,POINTER (nm-glib-marshal.list:1) */
-extern void _nm_glib_marshal_VOID__POINTER_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,STRING,STRING (nm-glib-marshal.list:2) */
-extern void _nm_glib_marshal_VOID__STRING_STRING_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:UINT,UINT (nm-glib-marshal.list:3) */
-extern void _nm_glib_marshal_VOID__UINT_UINT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:UINT,UINT,UINT (nm-glib-marshal.list:4) */
-extern void _nm_glib_marshal_VOID__UINT_UINT_UINT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-G_END_DECLS
-
-#endif /* ___nm_glib_marshal_MARSHAL_H__ */
-
diff --git a/libnm-glib/nm-ip4-config.c b/libnm-glib/nm-ip4-config.c
index 80751c311..ec523a033 100644
--- a/libnm-glib/nm-ip4-config.c
+++ b/libnm-glib/nm-ip4-config.c
@@ -37,19 +37,23 @@ G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_OBJECT)
typedef struct {
DBusGProxy *proxy;
+ char *gateway;
GSList *addresses;
+ GSList *routes;
GArray *nameservers;
GPtrArray *domains;
- GSList *routes;
+ GPtrArray *searches;
GArray *wins;
} NMIP4ConfigPrivate;
enum {
PROP_0,
+ PROP_GATEWAY,
PROP_ADDRESSES,
+ PROP_ROUTES,
PROP_NAMESERVERS,
PROP_DOMAINS,
- PROP_ROUTES,
+ PROP_SEARCHES,
PROP_WINS_SERVERS,
LAST_PROP
@@ -65,8 +69,7 @@ demarshal_ip4_address_array (NMObject *object, GParamSpec *pspec, GValue *value,
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (object);
- g_slist_foreach (priv->addresses, (GFunc) nm_ip4_address_unref, NULL);
- g_slist_free (priv->addresses);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
priv->addresses = NULL;
priv->addresses = nm_utils_ip4_addresses_from_gvalue (value);
@@ -90,12 +93,12 @@ demarshal_ip4_array (NMObject *object, GParamSpec *pspec, GValue *value, gpointe
}
static gboolean
-demarshal_domains (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
+demarshal_string_array (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
{
if (!_nm_string_array_demarshal (value, (GPtrArray **) field))
return FALSE;
- _nm_object_queue_notify (object, NM_IP4_CONFIG_DOMAINS);
+ _nm_object_queue_notify (object, pspec->name);
return TRUE;
}
@@ -104,8 +107,7 @@ demarshal_ip4_routes_array (NMObject *object, GParamSpec *pspec, GValue *value,
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (object);
- g_slist_foreach (priv->routes, (GFunc) nm_ip4_route_unref, NULL);
- g_slist_free (priv->routes);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
priv->routes = NULL;
priv->routes = nm_utils_ip4_routes_from_gvalue (value);
@@ -119,10 +121,12 @@ register_properties (NMIP4Config *config)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
const NMPropertiesInfo property_info[] = {
+ { NM_IP4_CONFIG_GATEWAY, &priv->gateway, },
{ NM_IP4_CONFIG_ADDRESSES, &priv->addresses, demarshal_ip4_address_array },
- { NM_IP4_CONFIG_NAMESERVERS, &priv->nameservers, demarshal_ip4_array },
- { NM_IP4_CONFIG_DOMAINS, &priv->domains, demarshal_domains },
{ NM_IP4_CONFIG_ROUTES, &priv->routes, demarshal_ip4_routes_array },
+ { NM_IP4_CONFIG_NAMESERVERS, &priv->nameservers, demarshal_ip4_array },
+ { NM_IP4_CONFIG_DOMAINS, &priv->domains, demarshal_string_array },
+ { NM_IP4_CONFIG_SEARCHES, &priv->searches, demarshal_string_array },
{ NM_IP4_CONFIG_WINS_SERVERS, &priv->wins, demarshal_ip4_array },
{ NULL },
};
@@ -135,19 +139,11 @@ register_properties (NMIP4Config *config)
static void
constructed (GObject *object)
{
- DBusGConnection *connection;
- NMIP4ConfigPrivate *priv;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_ip4_config_parent_class)->constructed (object);
- priv = NM_IP4_CONFIG_GET_PRIVATE (object);
- connection = nm_object_get_connection (NM_OBJECT (object));
-
- priv->proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_IP4_CONFIG);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_IP4_CONFIG);
register_properties (NM_IP4_CONFIG (object));
}
@@ -156,11 +152,10 @@ finalize (GObject *object)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (object);
- g_slist_foreach (priv->addresses, (GFunc) nm_ip4_address_unref, NULL);
- g_slist_free (priv->addresses);
+ g_free (priv->gateway);
- g_slist_foreach (priv->routes, (GFunc) nm_ip4_route_unref, NULL);
- g_slist_free (priv->routes);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
if (priv->nameservers)
g_array_free (priv->nameservers, TRUE);
@@ -169,10 +164,15 @@ finalize (GObject *object)
g_array_free (priv->wins, TRUE);
if (priv->domains) {
- g_ptr_array_foreach (priv->domains, (GFunc) g_free, NULL);
+ g_ptr_array_set_free_func (priv->domains, g_free);
g_ptr_array_free (priv->domains, TRUE);
}
+ if (priv->searches) {
+ g_ptr_array_set_free_func (priv->searches, g_free);
+ g_ptr_array_free (priv->searches, TRUE);
+ }
+
g_object_unref (priv->proxy);
G_OBJECT_CLASS (nm_ip4_config_parent_class)->finalize (object);
@@ -190,17 +190,23 @@ get_property (GObject *object,
_nm_object_ensure_inited (NM_OBJECT (object));
switch (prop_id) {
+ case PROP_GATEWAY:
+ g_value_set_string (value, nm_ip4_config_get_gateway (self));
+ break;
case PROP_ADDRESSES:
nm_utils_ip4_addresses_to_gvalue (priv->addresses, value);
break;
+ case PROP_ROUTES:
+ nm_utils_ip4_routes_to_gvalue (priv->routes, value);
+ break;
case PROP_NAMESERVERS:
g_value_set_boxed (value, nm_ip4_config_get_nameservers (self));
break;
case PROP_DOMAINS:
g_value_set_boxed (value, nm_ip4_config_get_domains (self));
break;
- case PROP_ROUTES:
- nm_utils_ip4_routes_to_gvalue (priv->routes, value);
+ case PROP_SEARCHES:
+ g_value_set_boxed (value, nm_ip4_config_get_searches (self));
break;
case PROP_WINS_SERVERS:
g_value_set_boxed (value, nm_ip4_config_get_wins_servers (self));
@@ -226,29 +232,56 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
/* properties */
/**
+ * NMIP4Config:gateway:
+ *
+ * The IP4 gateway address of the configuration as string.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_GATEWAY,
+ g_param_spec_string (NM_IP4_CONFIG_GATEWAY,
+ "Gateway",
+ "Gateway",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
* NMIP4Config:addresses:
*
- * The #GPtrArray containing #NMSettingIP4Address<!-- -->es of the configuration.
+ * The #GPtrArray containing #NMIP4Address<!-- -->es of the configuration.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ADDRESSES,
+ g_param_spec_pointer (NM_IP4_CONFIG_ADDRESSES,
+ "Addresses",
+ "Addresses",
+ G_PARAM_READABLE));
+
+ /**
+ * NMIP4Config:routes:
+ *
+ * The #GPtrArray containing #NMSettingIP4Routes of the configuration.
**/
g_object_class_install_property
- (object_class, PROP_ADDRESSES,
- g_param_spec_pointer (NM_IP4_CONFIG_ADDRESSES,
- "Addresses",
- "Addresses",
- G_PARAM_READABLE));
+ (object_class, PROP_ROUTES,
+ g_param_spec_pointer (NM_IP4_CONFIG_ROUTES,
+ "Routes",
+ "Routes",
+ G_PARAM_READABLE));
/**
* NMIP4Config:nameservers:
*
- * The #GArray containing name servers (%guint32<!-- -->es) of the configuration.
+ * The #GArray containing name servers (#guint32s) of the configuration.
**/
g_object_class_install_property
- (object_class, PROP_NAMESERVERS,
- g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS,
- "Nameservers",
- "Nameservers",
- NM_TYPE_UINT_ARRAY,
- G_PARAM_READABLE));
+ (object_class, PROP_NAMESERVERS,
+ g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS,
+ "Nameservers",
+ "Nameservers",
+ NM_TYPE_UINT_ARRAY,
+ G_PARAM_READABLE));
/**
* NMIP4Config:domains:
@@ -256,37 +289,40 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
* The #GPtrArray containing domain strings of the configuration.
**/
g_object_class_install_property
- (object_class, PROP_DOMAINS,
- g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS,
- "Domains",
- "Domains",
- NM_TYPE_STRING_ARRAY,
- G_PARAM_READABLE));
+ (object_class, PROP_DOMAINS,
+ g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS,
+ "Domains",
+ "Domains",
+ NM_TYPE_STRING_ARRAY,
+ G_PARAM_READABLE));
/**
- * NMIP4Config:routes:
+ * NMIP4Config:searches:
+ *
+ * The #GPtrArray containing dns search strings of the configuration.
*
- * The #GPtrArray containing #NMSettingIP4Route<!-- -->s of the configuration.
+ * Since: 0.9.10
**/
g_object_class_install_property
- (object_class, PROP_ROUTES,
- g_param_spec_pointer (NM_IP4_CONFIG_ROUTES,
- "Routes",
- "Routes",
- G_PARAM_READABLE));
+ (object_class, PROP_SEARCHES,
+ g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES,
+ "Searches",
+ "DNS searches",
+ NM_TYPE_STRING_ARRAY,
+ G_PARAM_READABLE));
/**
* NMIP4Config:wins-servers:
*
- * The #GArray containing WINS servers (%guint32<!-- -->es) of the configuration.
+ * The #GArray containing WINS servers (#guint32s) of the configuration.
**/
g_object_class_install_property
- (object_class, PROP_WINS_SERVERS,
- g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS,
- "WINS Servers",
- "WINS Servers",
- NM_TYPE_UINT_ARRAY,
- G_PARAM_READABLE));
+ (object_class, PROP_WINS_SERVERS,
+ g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS,
+ "WINS Servers",
+ "WINS Servers",
+ NM_TYPE_UINT_ARRAY,
+ G_PARAM_READABLE));
}
/**
@@ -302,9 +338,28 @@ GObject *
nm_ip4_config_new (DBusGConnection *connection, const char *object_path)
{
return (GObject *) g_object_new (NM_TYPE_IP4_CONFIG,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, object_path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, object_path,
+ NULL);
+}
+
+/**
+ * nm_ip4_config_get_gateway:
+ * @config: a #NMIP4Config
+ *
+ * Gets the IP4 gateway address.
+ *
+ * Returns: the IP4 address of the gateway.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_ip4_config_get_gateway (NMIP4Config *config)
+{
+ g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (config));
+ return NM_IP4_CONFIG_GET_PRIVATE (config)->gateway;
}
/**
@@ -331,8 +386,9 @@ nm_ip4_config_get_addresses (NMIP4Config *config)
*
* Gets the domain name servers (DNS).
*
- * Returns: (element-type guint32): the #GArray containing %guint32<!-- -->s. This is the internal copy used by the
- * configuration and must not be modified.
+ * Returns: (element-type guint32): the #GArray containing #guint32s.
+ * This is the internal copy used by the configuration and must not be
+ * modified.
**/
const GArray *
nm_ip4_config_get_nameservers (NMIP4Config *config)
@@ -362,13 +418,34 @@ nm_ip4_config_get_domains (NMIP4Config *config)
}
/**
+ * nm_ip4_config_get_searches:
+ * @config: a #NMIP4Config
+ *
+ * Gets the dns searches.
+ *
+ * Returns: (element-type utf8): the #GPtrArray containing dns searches as strings. This is the
+ * internal copy used by the configuration, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const GPtrArray *
+nm_ip4_config_get_searches (NMIP4Config *config)
+{
+ g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (config));
+ return handle_ptr_array_return (NM_IP4_CONFIG_GET_PRIVATE (config)->searches);
+}
+
+/**
* nm_ip4_config_get_wins_servers:
* @config: a #NMIP4Config
*
* Gets the Windows Internet Name Service servers (WINS).
*
- * Returns: (element-type guint32): the #GArray containing %guint32<!-- -->s.
- * This is the internal copy used by the configuration and must not be modified.
+ * Returns: (element-type guint32): the #GArray containing #guint32s.
+ * This is the internal copy used by the configuration and must not be
+ * modified.
**/
const GArray *
nm_ip4_config_get_wins_servers (NMIP4Config *config)
@@ -386,7 +463,7 @@ nm_ip4_config_get_wins_servers (NMIP4Config *config)
* Gets the routes.
*
* Returns: (element-type NetworkManager.IP4Route): the #GSList containing
- * #NMIP4Route<!-- -->s. This is the internal copy used by the configuration,
+ * #NMIP4Routes. This is the internal copy used by the configuration,
* and must not be modified.
**/
const GSList *
diff --git a/libnm-glib/nm-ip4-config.h b/libnm-glib/nm-ip4-config.h
index b76fdf8b3..aa2e66eb8 100644
--- a/libnm-glib/nm-ip4-config.h
+++ b/libnm-glib/nm-ip4-config.h
@@ -54,20 +54,26 @@ typedef struct {
void (*_reserved6) (void);
} NMIP4ConfigClass;
+#define NM_IP4_CONFIG_GATEWAY "gateway"
#define NM_IP4_CONFIG_ADDRESSES "addresses"
+#define NM_IP4_CONFIG_ROUTES "routes"
#define NM_IP4_CONFIG_NAMESERVERS "nameservers"
#define NM_IP4_CONFIG_DOMAINS "domains"
-#define NM_IP4_CONFIG_ROUTES "routes"
+#define NM_IP4_CONFIG_SEARCHES "searches"
#define NM_IP4_CONFIG_WINS_SERVERS "wins-servers"
GType nm_ip4_config_get_type (void);
GObject *nm_ip4_config_new (DBusGConnection *connection, const char *object_path);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_ip4_config_get_gateway (NMIP4Config *config);
const GSList * nm_ip4_config_get_addresses (NMIP4Config *config);
+const GSList * nm_ip4_config_get_routes (NMIP4Config *config);
const GArray * nm_ip4_config_get_nameservers (NMIP4Config *config);
const GPtrArray *nm_ip4_config_get_domains (NMIP4Config *config);
-const GSList * nm_ip4_config_get_routes (NMIP4Config *config);
+NM_AVAILABLE_IN_0_9_10
+const GPtrArray *nm_ip4_config_get_searches (NMIP4Config *config);
const GArray * nm_ip4_config_get_wins_servers (NMIP4Config *config);
G_END_DECLS
diff --git a/libnm-glib/nm-ip6-config.c b/libnm-glib/nm-ip6-config.c
index 9efc32ee7..7c9cfca74 100644
--- a/libnm-glib/nm-ip6-config.c
+++ b/libnm-glib/nm-ip6-config.c
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright (C) 2008 - 2014 Red Hat, Inc.
*/
#include <string.h>
@@ -37,18 +37,22 @@ G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_OBJECT)
typedef struct {
DBusGProxy *proxy;
+ char *gateway;
GSList *addresses;
+ GSList *routes;
GSList *nameservers;
GPtrArray *domains;
- GSList *routes;
+ GPtrArray *searches;
} NMIP6ConfigPrivate;
enum {
PROP_0,
+ PROP_GATEWAY,
PROP_ADDRESSES,
+ PROP_ROUTES,
PROP_NAMESERVERS,
PROP_DOMAINS,
- PROP_ROUTES,
+ PROP_SEARCHES,
LAST_PROP
};
@@ -76,8 +80,7 @@ demarshal_ip6_address_array (NMObject *object, GParamSpec *pspec, GValue *value,
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (object);
- g_slist_foreach (priv->addresses, (GFunc) nm_ip6_address_unref, NULL);
- g_slist_free (priv->addresses);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip6_address_unref);
priv->addresses = NULL;
priv->addresses = nm_utils_ip6_addresses_from_gvalue (value);
@@ -109,12 +112,21 @@ demarshal_domains (NMObject *object, GParamSpec *pspec, GValue *value, gpointer
}
static gboolean
+demarshal_searches (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
+{
+ if (!_nm_string_array_demarshal (value, (GPtrArray **) field))
+ return FALSE;
+
+ _nm_object_queue_notify (object, NM_IP6_CONFIG_SEARCHES);
+ return TRUE;
+}
+
+static gboolean
demarshal_ip6_routes_array (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (object);
- g_slist_foreach (priv->routes, (GFunc) nm_ip6_route_unref, NULL);
- g_slist_free (priv->routes);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
priv->routes = NULL;
priv->routes = nm_utils_ip6_routes_from_gvalue (value);
@@ -128,10 +140,12 @@ register_properties (NMIP6Config *config)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
const NMPropertiesInfo property_info[] = {
+ { NM_IP6_CONFIG_GATEWAY, &priv->gateway, },
{ NM_IP6_CONFIG_ADDRESSES, &priv->addresses, demarshal_ip6_address_array },
+ { NM_IP6_CONFIG_ROUTES, &priv->routes, demarshal_ip6_routes_array },
{ NM_IP6_CONFIG_NAMESERVERS, &priv->nameservers, demarshal_ip6_nameserver_array },
{ NM_IP6_CONFIG_DOMAINS, &priv->domains, demarshal_domains },
- { NM_IP6_CONFIG_ROUTES, &priv->routes, demarshal_ip6_routes_array },
+ { NM_IP6_CONFIG_SEARCHES, &priv->searches, demarshal_searches },
{ NULL },
};
@@ -141,6 +155,25 @@ register_properties (NMIP6Config *config)
}
/**
+ * nm_ip6_config_get_gateway:
+ * @config: a #NMIP6Config
+ *
+ * Gets the IP6 gateway.
+ *
+ * Returns: the IPv6 gateway of the configuration.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_ip6_config_get_gateway (NMIP6Config *config)
+{
+ g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (config));
+ return NM_IP6_CONFIG_GET_PRIVATE (config)->gateway;
+}
+
+/**
* nm_ip6_config_get_addresses:
* @config: a #NMIP6Config
*
@@ -159,6 +192,56 @@ nm_ip6_config_get_addresses (NMIP6Config *config)
return NM_IP6_CONFIG_GET_PRIVATE (config)->addresses;
}
+/**
+ * nm_ip6_config_get_num_nameservers:
+ * @config: a #NMIP6Config
+ *
+ * Gets the number of the domain name servers in the configuration.
+ *
+ * Returns: the number of domain name servers
+ *
+ * Since: 0.9.10
+ **/
+guint32
+nm_ip6_config_get_num_nameservers (NMIP6Config *config)
+{
+ g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+
+ _nm_object_ensure_inited (NM_OBJECT (config));
+ return g_slist_length (NM_IP6_CONFIG_GET_PRIVATE (config)->nameservers);
+}
+
+/**
+ * nm_ip6_config_get_nameserver:
+ * @config: a #NMIP6Config
+ * @idx: index of the nameserver to return
+ *
+ * Gets the domain name server at index @idx in the configuration.
+ *
+ * Returns: (array fixed-size=16) (element-type guint8) (transfer none):
+ * the IPv6 address of domain name server at index @iidx
+ *
+ * Since: 0.9.10
+ **/
+const struct in6_addr *
+nm_ip6_config_get_nameserver (NMIP6Config *config, guint32 idx)
+{
+ NMIP6ConfigPrivate *priv;
+ GSList *item;
+ guint32 i = 0;
+
+ g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (config));
+ priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+
+ for (item = priv->nameservers; item && i < idx; i++)
+ item = item->next;
+
+ g_return_val_if_fail (item, NULL);
+ return item ? (const struct in6_addr *) item->data : NULL;
+}
+
/* FIXME: like in libnm_util, in6_addr is not introspectable, so skipping here */
/**
* nm_ip6_config_get_nameservers: (skip)
@@ -198,13 +281,33 @@ nm_ip6_config_get_domains (NMIP6Config *config)
}
/**
+ * nm_ip6_config_get_searches:
+ * @config: a #NMIP6Config
+ *
+ * Gets the dns searches.
+ *
+ * Returns: (element-type utf8): the #GPtrArray containing dns searches as strings.
+ * This is the internal copy used by the configuration, and must not be modified.
+ *
+ * Since: 0.9.10
+ **/
+const GPtrArray *
+nm_ip6_config_get_searches (NMIP6Config *config)
+{
+ g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+
+ _nm_object_ensure_inited (NM_OBJECT (config));
+ return handle_ptr_array_return (NM_IP6_CONFIG_GET_PRIVATE (config)->searches);
+}
+
+/**
* nm_ip6_config_get_routes:
* @config: a #NMIP6Config
*
* Gets the routes.
*
* Returns: (element-type NetworkManager.IP6Route): the #GSList containing
- * #NMIP6Route<!-- -->s. This is the internal copy used by the configuration,
+ * #NMIP6Routes. This is the internal copy used by the configuration,
* and must not be modified.
**/
const GSList *
@@ -219,19 +322,11 @@ nm_ip6_config_get_routes (NMIP6Config *config)
static void
constructed (GObject *object)
{
- DBusGConnection *connection;
- NMIP6ConfigPrivate *priv;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_ip6_config_parent_class)->constructed (object);
- priv = NM_IP6_CONFIG_GET_PRIVATE (object);
- connection = nm_object_get_connection (NM_OBJECT (object));
-
- priv->proxy = dbus_g_proxy_new_for_name (connection,
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_IP6_CONFIG);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_IP6_CONFIG);
register_properties (NM_IP6_CONFIG (object));
}
@@ -240,20 +335,22 @@ finalize (GObject *object)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (object);
- g_slist_foreach (priv->addresses, (GFunc) nm_ip6_address_unref, NULL);
- g_slist_free (priv->addresses);
-
- g_slist_foreach (priv->routes, (GFunc) nm_ip6_route_unref, NULL);
- g_slist_free (priv->routes);
+ g_free (priv->gateway);
- g_slist_foreach (priv->nameservers, (GFunc) g_free, NULL);
- g_slist_free (priv->nameservers);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip6_address_unref);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
+ g_slist_free_full (priv->nameservers, g_free);
if (priv->domains) {
- g_ptr_array_foreach (priv->domains, (GFunc) g_free, NULL);
+ g_ptr_array_set_free_func (priv->domains, g_free);
g_ptr_array_free (priv->domains, TRUE);
}
+ if (priv->searches) {
+ g_ptr_array_set_free_func (priv->searches, g_free);
+ g_ptr_array_free (priv->searches, TRUE);
+ }
+
g_object_unref (priv->proxy);
G_OBJECT_CLASS (nm_ip6_config_parent_class)->finalize (object);
@@ -271,17 +368,23 @@ get_property (GObject *object,
_nm_object_ensure_inited (NM_OBJECT (object));
switch (prop_id) {
+ case PROP_GATEWAY:
+ g_value_set_string (value, nm_ip6_config_get_gateway (self));
+ break;
case PROP_ADDRESSES:
nm_utils_ip6_addresses_to_gvalue (priv->addresses, value);
break;
+ case PROP_ROUTES:
+ nm_utils_ip6_routes_to_gvalue (priv->routes, value);
+ break;
case PROP_NAMESERVERS:
g_value_set_boxed (value, nm_ip6_config_get_nameservers (self));
break;
case PROP_DOMAINS:
g_value_set_boxed (value, nm_ip6_config_get_domains (self));
break;
- case PROP_ROUTES:
- nm_utils_ip6_routes_to_gvalue (priv->routes, value);
+ case PROP_SEARCHES:
+ g_value_set_boxed (value, nm_ip6_config_get_searches (self));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -309,6 +412,21 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
/* properties */
/**
+ * NMIP6Config:gateway:
+ *
+ * The IPv6 gateway as string
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_GATEWAY,
+ g_param_spec_string (NM_IP6_CONFIG_GATEWAY,
+ "Gateway",
+ "Gateway",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
* NMIP6Config:addresses:
*
* The #GPtrArray containing the IPv6 addresses; use
@@ -316,12 +434,27 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
* #NMSettingIP6Address objects that is more usable than the raw data.
**/
g_object_class_install_property
- (object_class, PROP_ADDRESSES,
- g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES,
- "Addresses",
- "Addresses",
- NM_TYPE_IP6_ADDRESS_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ (object_class, PROP_ADDRESSES,
+ g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES,
+ "Addresses",
+ "Addresses",
+ NM_TYPE_IP6_ADDRESS_OBJECT_ARRAY,
+ G_PARAM_READABLE));
+
+ /**
+ * NMIP6Config:routes:
+ *
+ * The #GPtrArray containing the IPv6 routes; use
+ * nm_utils_ip6_routes_from_gvalue() to return a #GSList of
+ * #NMSettingIP6Address objects that is more usable than the raw data.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ROUTES,
+ g_param_spec_boxed (NM_IP6_CONFIG_ROUTES,
+ "Routes",
+ "Routes",
+ NM_TYPE_IP6_ROUTE_OBJECT_ARRAY,
+ G_PARAM_READABLE));
/**
* NMIP6Config:nameservers:
@@ -330,12 +463,12 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
* contain the addresses of nameservers of the configuration.
**/
g_object_class_install_property
- (object_class, PROP_NAMESERVERS,
- g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS,
- "Nameservers",
- "Nameservers",
- NM_TYPE_IP6_ADDRESS_ARRAY,
- G_PARAM_READABLE));
+ (object_class, PROP_NAMESERVERS,
+ g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS,
+ "Nameservers",
+ "Nameservers",
+ NM_TYPE_IP6_ADDRESS_ARRAY,
+ G_PARAM_READABLE));
/**
* NMIP6Config:domains:
@@ -343,26 +476,27 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
* The #GPtrArray containing domain strings of the configuration.
**/
g_object_class_install_property
- (object_class, PROP_DOMAINS,
- g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS,
- "Domains",
- "Domains",
- NM_TYPE_STRING_ARRAY,
- G_PARAM_READABLE));
+ (object_class, PROP_DOMAINS,
+ g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS,
+ "Domains",
+ "Domains",
+ NM_TYPE_STRING_ARRAY,
+ G_PARAM_READABLE));
/**
- * NMIP6Config:routes:
+ * NMIP6Config:searches:
*
- * The #GPtrArray containing the IPv6 routes; use
- * nm_utils_ip6_routes_from_gvalue() to return a #GSList of
- * #NMSettingIP6Address objects that is more usable than the raw data.
+ * The #GPtrArray containing dns search strings of the configuration.
+ *
+ * Since: 0.9.10
**/
g_object_class_install_property
- (object_class, PROP_ROUTES,
- g_param_spec_boxed (NM_IP6_CONFIG_ROUTES,
- "Routes",
- "Routes",
- NM_TYPE_IP6_ROUTE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ (object_class, PROP_SEARCHES,
+ g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES,
+ "Searches",
+ "DNS Searches",
+ NM_TYPE_STRING_ARRAY,
+ G_PARAM_READABLE));
+
}
diff --git a/libnm-glib/nm-ip6-config.h b/libnm-glib/nm-ip6-config.h
index 9692c6558..feef69f19 100644
--- a/libnm-glib/nm-ip6-config.h
+++ b/libnm-glib/nm-ip6-config.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 - 2014 Red Hat, Inc.
*/
#ifndef NM_IP6_CONFIG_H
@@ -54,19 +54,29 @@ typedef struct {
void (*_reserved6) (void);
} NMIP6ConfigClass;
+#define NM_IP6_CONFIG_GATEWAY "gateway"
#define NM_IP6_CONFIG_ADDRESSES "addresses"
+#define NM_IP6_CONFIG_ROUTES "routes"
#define NM_IP6_CONFIG_NAMESERVERS "nameservers"
#define NM_IP6_CONFIG_DOMAINS "domains"
-#define NM_IP6_CONFIG_ROUTES "routes"
+#define NM_IP6_CONFIG_SEARCHES "searches"
GType nm_ip6_config_get_type (void);
GObject *nm_ip6_config_new (DBusGConnection *connection, const char *object_path);
-const GSList * nm_ip6_config_get_addresses (NMIP6Config *config);
-const GSList * nm_ip6_config_get_nameservers (NMIP6Config *config);
-const GPtrArray *nm_ip6_config_get_domains (NMIP6Config *config);
-const GSList * nm_ip6_config_get_routes (NMIP6Config *config);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_ip6_config_get_gateway (NMIP6Config *config);
+const GSList * nm_ip6_config_get_addresses (NMIP6Config *config);
+const GSList * nm_ip6_config_get_routes (NMIP6Config *config);
+NM_AVAILABLE_IN_0_9_10
+guint32 nm_ip6_config_get_num_nameservers (NMIP6Config *config);
+NM_AVAILABLE_IN_0_9_10
+const struct in6_addr *nm_ip6_config_get_nameserver (NMIP6Config *config, guint32 idx);
+const GSList * nm_ip6_config_get_nameservers (NMIP6Config *config);
+const GPtrArray * nm_ip6_config_get_domains (NMIP6Config *config);
+NM_AVAILABLE_IN_0_9_10
+const GPtrArray * nm_ip6_config_get_searches (NMIP6Config *config);
G_END_DECLS
diff --git a/libnm-glib/nm-object-private.h b/libnm-glib/nm-object-private.h
index 7ec2162fb..3253c2ec2 100644
--- a/libnm-glib/nm-object-private.h
+++ b/libnm-glib/nm-object-private.h
@@ -37,8 +37,14 @@ typedef struct {
gpointer field;
PropertyMarshalFunc func;
GType object_type;
+ const char *signal_prefix;
} NMPropertiesInfo;
+DBusGProxy *_nm_object_new_proxy (NMObject *self,
+ const char *path,
+ const char *interface);
+
+gboolean _nm_object_is_connection_private (NMObject *self);
void _nm_object_register_properties (NMObject *object,
DBusGProxy *proxy,
@@ -53,17 +59,6 @@ gboolean _nm_object_reload_properties_finish (NMObject *object,
GAsyncResult *result,
GError **error);
-typedef void (*NMPseudoPropertyChangedFunc) (NMObject *self, NMObject *changed);
-void _nm_object_register_pseudo_property (NMObject *object,
- DBusGProxy *proxy,
- const char *name,
- gpointer field,
- GType object_type,
- NMPseudoPropertyChangedFunc added_func,
- NMPseudoPropertyChangedFunc removed_func);
-void _nm_object_reload_pseudo_property (NMObject *object,
- const char *name);
-
void _nm_object_queue_notify (NMObject *object, const char *property);
void _nm_object_suppress_property_updates (NMObject *object, gboolean suppress);
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c
index 93919d614..61282cfbe 100644
--- a/libnm-glib/nm-object.c
+++ b/libnm-glib/nm-object.c
@@ -24,6 +24,7 @@
#include <string.h>
#include <gio/gio.h>
#include <stdlib.h>
+#include <stdio.h>
#include <nm-utils.h>
#include "NetworkManager.h"
#include "nm-object.h"
@@ -32,7 +33,7 @@
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
#include "nm-types.h"
-#include "nm-glib-marshal.h"
+#include "nm-dbus-helpers-private.h"
static gboolean debug = FALSE;
#define dbgmsg(f,...) if (G_UNLIKELY (debug)) { g_message (f, ## __VA_ARGS__ ); }
@@ -52,30 +53,21 @@ static GHashTable *type_funcs, *type_async_funcs;
typedef struct {
PropertyMarshalFunc func;
GType object_type;
-
gpointer field;
+ const char *signal_prefix;
} PropertyInfo;
static void reload_complete (NMObject *object);
typedef struct {
- PropertyInfo pi;
-
- NMObject *self;
- DBusGProxy *proxy;
-
- char *get_method;
- NMPseudoPropertyChangedFunc added_func;
- NMPseudoPropertyChangedFunc removed_func;
-} PseudoPropertyInfo;
-
-typedef struct {
DBusGConnection *connection;
+ DBusGProxy *bus_proxy;
+ gboolean nm_running;
+
char *path;
DBusGProxy *properties_proxy;
GSList *property_interfaces;
GSList *property_tables;
- GHashTable *pseudo_properties;
NMObject *parent;
gboolean suppress_property_updates;
@@ -122,21 +114,42 @@ nm_object_error_quark (void)
}
static void
+proxy_name_owner_changed (DBusGProxy *proxy,
+ const char *name,
+ const char *old_owner,
+ const char *new_owner,
+ gpointer user_data)
+{
+ NMObject *self = NM_OBJECT (user_data);
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+
+ if (g_strcmp0 (name, NM_DBUS_SERVICE) == 0) {
+ gboolean old_good = (old_owner && old_owner[0]);
+ gboolean new_good = (new_owner && new_owner[0]);
+
+ if (!old_good && new_good)
+ priv->nm_running = TRUE;
+ else if (old_good && !new_good)
+ priv->nm_running = FALSE;
+ }
+}
+
+static void
nm_object_init (NMObject *object)
{
}
static GObject*
constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
{
GObject *object;
NMObjectPrivate *priv;
object = G_OBJECT_CLASS (nm_object_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
+ n_construct_params,
+ construct_params);
priv = NM_OBJECT_GET_PRIVATE (object);
@@ -154,15 +167,31 @@ constructor (GType type,
static void
constructed (GObject *object)
{
+ NMObject *self = NM_OBJECT (object);
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
if (G_OBJECT_CLASS (nm_object_parent_class)->constructed)
G_OBJECT_CLASS (nm_object_parent_class)->constructed (object);
- priv->properties_proxy = dbus_g_proxy_new_for_name (priv->connection,
- NM_DBUS_SERVICE,
- priv->path,
- "org.freedesktop.DBus.Properties");
+ priv->properties_proxy = _nm_object_new_proxy (self, NULL, "org.freedesktop.DBus.Properties");
+
+ if (_nm_object_is_connection_private (self))
+ priv->nm_running = TRUE;
+ else {
+ priv->bus_proxy = dbus_g_proxy_new_for_name (priv->connection,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+ g_assert (priv->bus_proxy);
+
+ dbus_g_proxy_add_signal (priv->bus_proxy, "NameOwnerChanged",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->bus_proxy,
+ "NameOwnerChanged",
+ G_CALLBACK (proxy_name_owner_changed),
+ object, NULL);
+ }
}
static gboolean
@@ -170,25 +199,68 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (initable);
+ if (priv->bus_proxy) {
+ if (!dbus_g_proxy_call (priv->bus_proxy,
+ "NameHasOwner", error,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &priv->nm_running,
+ G_TYPE_INVALID))
+ return FALSE;
+ }
+
priv->inited = TRUE;
return _nm_object_reload_properties (NM_OBJECT (initable), error);
}
+/* Takes ownership of @error */
+static void
+init_async_complete (GSimpleAsyncResult *simple, GError *error)
+{
+ if (error)
+ g_simple_async_result_take_error (simple, error);
+ else
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
static void
init_async_got_properties (GObject *object, GAsyncResult *result, gpointer user_data)
{
- NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
GSimpleAsyncResult *simple = user_data;
GError *error = NULL;
- priv->inited = TRUE;
- if (_nm_object_reload_properties_finish (NM_OBJECT (object), result, &error))
- g_simple_async_result_set_op_res_gboolean (simple, TRUE);
- else
- g_simple_async_result_take_error (simple, error);
+ NM_OBJECT_GET_PRIVATE (object)->inited = TRUE;
+ if (!_nm_object_reload_properties_finish (NM_OBJECT (object), result, &error))
+ g_assert (error);
+ init_async_complete (simple, error);
+}
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+static void
+init_async_got_manager_running (DBusGProxy *proxy, DBusGProxyCall *call,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMObject *self;
+ NMObjectPrivate *priv;
+ GError *error = NULL;
+
+ self = NM_OBJECT (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
+ priv = NM_OBJECT_GET_PRIVATE (self);
+
+ if (!dbus_g_proxy_end_call (proxy, call, &error,
+ G_TYPE_BOOLEAN, &priv->nm_running,
+ G_TYPE_INVALID)) {
+ init_async_complete (simple, error);
+ } else if (!priv->nm_running) {
+ priv->inited = TRUE;
+ init_async_complete (simple, NULL);
+ } else
+ _nm_object_reload_properties_async (self, init_async_got_properties, simple);
+
+ /* g_async_result_get_source_object() adds a ref */
+ g_object_unref (self);
}
static void
@@ -196,10 +268,21 @@ init_async (GAsyncInitable *initable, int io_priority,
GCancellable *cancellable, GAsyncReadyCallback callback,
gpointer user_data)
{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (initable);
GSimpleAsyncResult *simple;
simple = g_simple_async_result_new (G_OBJECT (initable), callback, user_data, init_async);
- _nm_object_reload_properties_async (NM_OBJECT (initable), init_async_got_properties, simple);
+
+ if (_nm_object_is_connection_private (NM_OBJECT (initable)))
+ _nm_object_reload_properties_async (NM_OBJECT (initable), init_async_got_properties, simple);
+ else {
+ /* Check if NM is running */
+ dbus_g_proxy_begin_call (priv->bus_proxy, "NameHasOwner",
+ init_async_got_manager_running,
+ simple, NULL,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID);
+ }
}
static gboolean
@@ -223,15 +306,14 @@ dispose (GObject *object)
priv->notify_id = 0;
}
- g_slist_foreach (priv->notify_props, (GFunc) g_free, NULL);
- g_slist_free (priv->notify_props);
+ g_slist_free_full (priv->notify_props, g_free);
priv->notify_props = NULL;
- g_slist_foreach (priv->property_interfaces, (GFunc) g_free, NULL);
- g_slist_free (priv->property_interfaces);
+ g_slist_free_full (priv->property_interfaces, g_free);
priv->property_interfaces = NULL;
g_clear_object (&priv->properties_proxy);
+ g_clear_object (&priv->bus_proxy);
if (priv->connection) {
dbus_g_connection_unref (priv->connection);
@@ -246,13 +328,9 @@ finalize (GObject *object)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
- g_slist_foreach (priv->property_tables, (GFunc) g_hash_table_destroy, NULL);
- g_slist_free (priv->property_tables);
+ g_slist_free_full (priv->property_tables, (GDestroyNotify) g_hash_table_destroy);
g_free (priv->path);
- if (priv->pseudo_properties)
- g_hash_table_destroy (priv->pseudo_properties);
-
G_OBJECT_CLASS (nm_object_parent_class)->finalize (object);
}
@@ -261,15 +339,13 @@ set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
- DBusGConnection *connection;
switch (prop_id) {
case PROP_CONNECTION:
/* Construct only */
- connection = (DBusGConnection *) g_value_get_boxed (value);
- if (!connection)
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
- priv->connection = dbus_g_connection_ref (connection);
+ priv->connection = g_value_dup_boxed (value);
+ if (!priv->connection)
+ priv->connection = _nm_dbus_new_connection (NULL);
break;
case PROP_PATH:
/* Construct only */
@@ -367,8 +443,7 @@ nm_object_class_init (NMObjectClass *nm_object_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMObjectClass, object_creation_failed),
- NULL, NULL,
- _nm_glib_marshal_VOID__POINTER_POINTER,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
}
@@ -669,31 +744,120 @@ typedef struct {
const char *property_name;
} ObjectCreatedData;
+/* Places items from 'needles' that are not in 'haystack' into 'diff' */
+static void
+array_diff (GPtrArray *needles, GPtrArray *haystack, GPtrArray *diff)
+{
+ guint i, j;
+ GObject *obj;
+
+ g_assert (needles);
+ g_assert (haystack);
+ g_assert (diff);
+
+ for (i = 0; i < needles->len; i++) {
+ obj = g_ptr_array_index (needles, i);
+
+ for (j = 0; j < haystack->len; j++) {
+ if (g_ptr_array_index (haystack, j) == obj)
+ break;
+ }
+
+ if (j == haystack->len)
+ g_ptr_array_add (diff, obj);
+ }
+}
+
+static void
+emit_added_removed_signal (NMObject *self,
+ const char *signal_prefix,
+ NMObject *changed,
+ gboolean added)
+{
+ char buf[50];
+ int ret;
+
+ ret = g_snprintf (buf, sizeof (buf), "%s-%s", signal_prefix, added ? "added" : "removed");
+ g_assert (ret < sizeof (buf));
+ g_signal_emit_by_name (self, buf, changed);
+}
+
static void
object_property_complete (ObjectCreatedData *odata)
{
NMObject *self = odata->self;
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
PropertyInfo *pi = odata->pi;
+ gboolean different = TRUE;
if (odata->array) {
- GPtrArray **array = pi->field;
+ GPtrArray *old = *((GPtrArray **) pi->field);
+ GPtrArray *new;
int i;
- if (*array)
- g_boxed_free (NM_TYPE_OBJECT_ARRAY, *array);
- *array = g_ptr_array_sized_new (odata->length);
+ /* Build up new array */
+ new = g_ptr_array_sized_new (odata->length);
for (i = 0; i < odata->length; i++)
- add_to_object_array_unique (*array, odata->objects[i]);
+ add_to_object_array_unique (new, odata->objects[i]);
+
+ if (pi->signal_prefix) {
+ GPtrArray *added = g_ptr_array_sized_new (3);
+ GPtrArray *removed = g_ptr_array_sized_new (3);
+
+ if (old) {
+ /* Find objects in 'old' that do not exist in 'new' */
+ array_diff (old, new, removed);
+
+ /* Find objects in 'new' that do not exist in old */
+ array_diff (new, old, added);
+ } else {
+ for (i = 0; i < new->len; i++)
+ g_ptr_array_add (added, g_ptr_array_index (new, i));
+ }
+
+ *((GPtrArray **) pi->field) = new;
+
+ /* Emit added & removed */
+ for (i = 0; i < removed->len; i++) {
+ emit_added_removed_signal (self,
+ pi->signal_prefix,
+ g_ptr_array_index (removed, i),
+ FALSE);
+ }
+
+ for (i = 0; i < added->len; i++) {
+ emit_added_removed_signal (self,
+ pi->signal_prefix,
+ g_ptr_array_index (added, i),
+ TRUE);
+ }
+
+ different = removed->len || added->len;
+ g_ptr_array_free (added, TRUE);
+ g_ptr_array_free (removed, TRUE);
+ } else {
+ /* No added/removed signals to send, just replace the property with
+ * the new values.
+ */
+ *((GPtrArray **) pi->field) = new;
+ different = TRUE;
+ }
+
+ /* Free old array last since it will release references, thus freeing
+ * any objects in the 'removed' array.
+ */
+ if (old)
+ g_boxed_free (NM_TYPE_OBJECT_ARRAY, old);
} else {
GObject **obj_p = pi->field;
+ different = (*obj_p != odata->objects[0]);
if (*obj_p)
g_object_unref (*obj_p);
*obj_p = odata->objects[0];
}
- if (odata->property_name)
+ if (different && odata->property_name)
_nm_object_queue_notify (self, odata->property_name);
if (priv->reload_results && --priv->reload_remaining == 0)
@@ -1045,6 +1209,7 @@ _nm_object_register_properties (NMObject *object,
pi->func = tmp->func ? tmp->func : demarshal_generic;
pi->object_type = tmp->object_type;
pi->field = tmp->field;
+ pi->signal_prefix = tmp->signal_prefix;
g_hash_table_insert (instance, g_strdup (tmp->name), pi);
}
}
@@ -1055,10 +1220,8 @@ _nm_object_reload_properties (NMObject *object, GError **error)
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
GHashTable *props = NULL;
GSList *p;
- GHashTableIter pp;
- gpointer name, info;
- if (!priv->property_interfaces)
+ if (!priv->property_interfaces || !priv->nm_running)
return TRUE;
for (p = priv->property_interfaces; p; p = p->next) {
@@ -1073,12 +1236,6 @@ _nm_object_reload_properties (NMObject *object, GError **error)
g_hash_table_destroy (props);
}
- if (priv->pseudo_properties) {
- g_hash_table_iter_init (&pp, priv->pseudo_properties);
- while (g_hash_table_iter_next (&pp, &name, &info))
- _nm_object_reload_pseudo_property (object, name);
- }
-
return TRUE;
}
@@ -1116,20 +1273,23 @@ _nm_object_reload_property (NMObject *object,
const char *interface,
const char *prop_name)
{
- GValue value = { 0, };
+ GValue value = G_VALUE_INIT;
GError *err = NULL;
g_return_if_fail (NM_IS_OBJECT (object));
g_return_if_fail (interface != NULL);
g_return_if_fail (prop_name != NULL);
+ if (!NM_OBJECT_GET_PRIVATE (object)->nm_running)
+ return;
+
if (!dbus_g_proxy_call_with_timeout (NM_OBJECT_GET_PRIVATE (object)->properties_proxy,
- "Get", 15000, &err,
- G_TYPE_STRING, interface,
- G_TYPE_STRING, prop_name,
- G_TYPE_INVALID,
- G_TYPE_VALUE, &value,
- G_TYPE_INVALID)) {
+ "Get", 15000, &err,
+ G_TYPE_STRING, interface,
+ G_TYPE_STRING, prop_name,
+ G_TYPE_INVALID,
+ G_TYPE_VALUE, &value,
+ G_TYPE_INVALID)) {
dbgmsg ("%s: Error getting '%s' for %s: (%d) %s\n",
__func__,
prop_name,
@@ -1146,15 +1306,18 @@ _nm_object_reload_property (NMObject *object,
void
_nm_object_set_property (NMObject *object,
- const char *interface,
- const char *prop_name,
- GValue *value)
+ const char *interface,
+ const char *prop_name,
+ GValue *value)
{
g_return_if_fail (NM_IS_OBJECT (object));
g_return_if_fail (interface != NULL);
g_return_if_fail (prop_name != NULL);
g_return_if_fail (G_IS_VALUE (value));
+ if (!NM_OBJECT_GET_PRIVATE (object)->nm_running)
+ return;
+
if (!dbus_g_proxy_call_with_timeout (NM_OBJECT_GET_PRIVATE (object)->properties_proxy,
"Set", 2000, NULL,
G_TYPE_STRING, interface,
@@ -1169,163 +1332,6 @@ _nm_object_set_property (NMObject *object,
}
static void
-pseudo_property_object_created (GObject *obj, const char *path, gpointer user_data)
-{
- PseudoPropertyInfo *ppi = user_data;
-
- if (obj) {
- GPtrArray **list_p = (GPtrArray **)ppi->pi.field;
-
- if (!*list_p)
- *list_p = g_ptr_array_new ();
- add_to_object_array_unique (*list_p, obj);
- ppi->added_func (ppi->self, NM_OBJECT (obj));
- }
-}
-
-static void
-pseudo_property_added (DBusGProxy *proxy, const char *path, gpointer user_data)
-{
- PseudoPropertyInfo *ppi = user_data;
- NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (ppi->self);
- NMObject *obj;
-
- if (priv->suppress_property_updates)
- return;
-
- obj = _nm_object_cache_get (path);
- if (obj)
- pseudo_property_object_created (G_OBJECT (obj), path, ppi);
- else {
- _nm_object_create_async (ppi->pi.object_type, priv->connection, path,
- pseudo_property_object_created, ppi);
- }
-}
-
-static void
-pseudo_property_removed (DBusGProxy *proxy, const char *path, gpointer user_data)
-{
- PseudoPropertyInfo *ppi = user_data;
- NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (ppi->self);
- GPtrArray *list = *(GPtrArray **)ppi->pi.field;
- NMObject *obj = NULL;
- int i;
-
- if (!list || priv->suppress_property_updates)
- return;
-
- for (i = 0; i < list->len; i++) {
- obj = list->pdata[i];
- if (!strcmp (path, nm_object_get_path (obj))) {
- g_ptr_array_remove_index (list, i);
- ppi->removed_func (ppi->self, obj);
- g_object_unref (obj);
- return;
- }
- }
-}
-
-static void
-free_pseudo_property (PseudoPropertyInfo *ppi)
-{
- g_object_unref (ppi->proxy);
- g_free (ppi->get_method);
- g_slice_free (PseudoPropertyInfo, ppi);
-}
-
-void
-_nm_object_register_pseudo_property (NMObject *object,
- DBusGProxy *proxy,
- const char *name,
- gpointer field,
- GType object_type,
- NMPseudoPropertyChangedFunc added_func,
- NMPseudoPropertyChangedFunc removed_func)
-{
- NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
- PseudoPropertyInfo *ppi;
- int basename_len;
- char *added_signal, *removed_signal;
-
- g_return_if_fail (NM_IS_OBJECT (object));
- g_return_if_fail (proxy != NULL);
-
- ppi = g_slice_new0 (PseudoPropertyInfo);
- ppi->pi.field = field;
- ppi->pi.object_type = object_type;
- ppi->self = object;
- ppi->proxy = g_object_ref (proxy);
- ppi->added_func = added_func;
- ppi->removed_func = removed_func;
-
- basename_len = strlen (name);
- if (basename_len > 4 && !strcmp (name + basename_len - 4, "List"))
- basename_len -= 4;
- else if (basename_len > 1 && name[basename_len - 1] == 's')
- basename_len--;
- else
- g_assert_not_reached ();
-
- ppi->get_method = g_strdup_printf ("Get%s", name);
- added_signal = g_strdup_printf ("%.*sAdded", basename_len, name);
- removed_signal = g_strdup_printf ("%.*sRemoved", basename_len, name);
-
- if (!priv->pseudo_properties) {
- priv->pseudo_properties = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, (GDestroyNotify) free_pseudo_property);
- }
- g_hash_table_insert (priv->pseudo_properties, g_strdup (name), ppi);
-
- dbus_g_proxy_add_signal (proxy, added_signal,
- DBUS_TYPE_G_OBJECT_PATH,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (proxy, added_signal,
- G_CALLBACK (pseudo_property_added),
- ppi, NULL);
-
- dbus_g_proxy_add_signal (proxy, removed_signal,
- DBUS_TYPE_G_OBJECT_PATH,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (proxy, removed_signal,
- G_CALLBACK (pseudo_property_removed),
- ppi, NULL);
-
- g_free (added_signal);
- g_free (removed_signal);
-}
-
-void
-_nm_object_reload_pseudo_property (NMObject *object,
- const char *name)
-{
- NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
- PseudoPropertyInfo *ppi;
- GPtrArray *temp;
- GError *error = NULL;
- GValue value = { 0, };
-
- g_return_if_fail (NM_IS_OBJECT (object));
- g_return_if_fail (name != NULL);
-
- ppi = g_hash_table_lookup (priv->pseudo_properties, name);
- g_return_if_fail (ppi != NULL);
-
- if (!dbus_g_proxy_call (ppi->proxy, ppi->get_method, &error,
- G_TYPE_INVALID,
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &temp,
- G_TYPE_INVALID)) {
- g_warning ("%s: error calling %s: %s", __func__, ppi->get_method, error->message);
- g_error_free (error);
- return;
- }
-
- g_value_init (&value, DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH);
- g_value_take_boxed (&value, temp);
- handle_object_array_property (object, NULL, &value, &ppi->pi, TRUE);
- g_value_unset (&value);
-}
-
-static void
reload_complete (NMObject *object)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
@@ -1378,36 +1384,6 @@ reload_got_properties (DBusGProxy *proxy, DBusGProxyCall *call,
reload_complete (object);
}
-static void
-reload_got_pseudo_property (DBusGProxy *proxy, DBusGProxyCall *call,
- gpointer user_data)
-{
- PseudoPropertyInfo *ppi = user_data;
- NMObject *object = ppi->self;
- NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
- GPtrArray *temp;
- GValue value = { 0, };
- GError *error = NULL;
-
- if (dbus_g_proxy_end_call (proxy, call, &error,
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &temp,
- G_TYPE_INVALID)) {
- g_value_init (&value, DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH);
- g_value_take_boxed (&value, temp);
- if (!priv->suppress_property_updates)
- handle_object_array_property (object, NULL, &value, &ppi->pi, FALSE);
- g_value_unset (&value);
- } else {
- if (priv->reload_error)
- g_error_free (error);
- else
- priv->reload_error = error;
- }
-
- if (--priv->reload_remaining == 0)
- reload_complete (object);
-}
-
void
_nm_object_reload_properties_async (NMObject *object, GAsyncReadyCallback callback, gpointer user_data)
{
@@ -1418,7 +1394,7 @@ _nm_object_reload_properties_async (NMObject *object, GAsyncReadyCallback callba
simple = g_simple_async_result_new (G_OBJECT (object), callback,
user_data, _nm_object_reload_properties_async);
- if (!priv->property_interfaces && !priv->pseudo_properties) {
+ if (!priv->property_interfaces) {
g_simple_async_result_complete_in_idle (simple);
g_object_unref (simple);
return;
@@ -1440,21 +1416,6 @@ _nm_object_reload_properties_async (NMObject *object, GAsyncReadyCallback callba
G_TYPE_STRING, p->data,
G_TYPE_INVALID);
}
-
- if (priv->pseudo_properties) {
- GHashTableIter iter;
- gpointer key, value;
- PseudoPropertyInfo *ppi;
-
- g_hash_table_iter_init (&iter, priv->pseudo_properties);
- while (g_hash_table_iter_next (&iter, &key, &value)) {
- ppi = value;
- priv->reload_remaining++;
- dbus_g_proxy_begin_call (ppi->proxy, ppi->get_method,
- reload_got_pseudo_property, ppi, NULL,
- G_TYPE_INVALID);
- }
- }
}
gboolean
@@ -1471,3 +1432,18 @@ _nm_object_reload_properties_finish (NMObject *object, GAsyncResult *result, GEr
return g_simple_async_result_get_op_res_gboolean (simple);
}
+
+DBusGProxy *
+_nm_object_new_proxy (NMObject *self, const char *path, const char *interface)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+
+ return _nm_dbus_new_proxy_for_connection (priv->connection, path ? path : priv->path, interface);
+}
+
+gboolean
+_nm_object_is_connection_private (NMObject *self)
+{
+ return _nm_dbus_is_connection_private (NM_OBJECT_GET_PRIVATE (self)->connection);
+}
+
diff --git a/libnm-glib/nm-object.h b/libnm-glib/nm-object.h
index eac713c60..ae97184f3 100644
--- a/libnm-glib/nm-object.h
+++ b/libnm-glib/nm-object.h
@@ -28,6 +28,8 @@
#include <glib-object.h>
#include <dbus/dbus-glib.h>
+#include <nm-version.h>
+
G_BEGIN_DECLS
#define NM_TYPE_OBJECT (nm_object_get_type ())
diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c
index 9cadf2f79..38911a43b 100644
--- a/libnm-glib/nm-remote-connection.c
+++ b/libnm-glib/nm-remote-connection.c
@@ -23,14 +23,17 @@
#include <string.h>
#include <gio/gio.h>
+#include <glib/gi18n.h>
#include <NetworkManager.h>
#include <nm-utils.h>
#include <nm-setting-connection.h>
#include "nm-remote-connection.h"
#include "nm-remote-connection-private.h"
+#include "nm-object-private.h"
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
+#include "nm-dbus-helpers-private.h"
#define NM_REMOTE_CONNECTION_BUS "bus"
#define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection"
@@ -49,6 +52,7 @@ enum {
PROP_BUS,
PROP_DBUS_CONNECTION,
PROP_DBUS_PATH,
+ PROP_UNSAVED,
LAST_PROP
};
@@ -62,10 +66,14 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
+typedef struct RemoteCall RemoteCall;
+typedef void (*RemoteCallFetchResultCb) (RemoteCall *call, DBusGProxyCall *proxy_call, GError *error);
-typedef struct {
+
+typedef struct RemoteCall {
NMRemoteConnection *self;
DBusGProxyCall *call;
+ RemoteCallFetchResultCb fetch_result_cb;
GFunc callback;
gpointer user_data;
} RemoteCall;
@@ -73,44 +81,156 @@ typedef struct {
typedef struct {
DBusGConnection *bus;
DBusGProxy *proxy;
+ DBusGProxy *props_proxy;
+ gboolean proxy_is_destroyed;
GSList *calls;
+ gboolean inited;
+ gboolean unsaved;
+
gboolean visible;
} NMRemoteConnectionPrivate;
#define NM_REMOTE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnectionPrivate))
+/**
+ * nm_remote_connection_error_quark:
+ *
+ * Registers an error quark for #NMRemoteConnection if necessary.
+ *
+ * Returns: the error quark used for #NMRemoteConnection errors.
+ **/
+GQuark
+nm_remote_connection_error_quark (void)
+{
+ static GQuark quark = 0;
+
+ if (G_UNLIKELY (quark == 0))
+ quark = g_quark_from_static_string ("nm-remote-connection-error-quark");
+ return quark;
+}
+
/****************************************************************/
static void
-remote_call_complete (NMRemoteConnection *self, RemoteCall *call)
+_nm_remote_connection_ensure_inited (NMRemoteConnection *self)
{
NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
+ GError *error = NULL;
- priv->calls = g_slist_remove (priv->calls, call);
- /* Don't need to cancel it since this function should only be called from
- * the dispose handler (where the proxy will be destroyed immediately after)
- * or from the call's completion callback.
- */
- memset (call, 0, sizeof (RemoteCall));
- g_free (call);
+ if (!priv->inited) {
+ if (!g_initable_init (G_INITABLE (self), NULL, &error)) {
+ /* Don't warn when the call times out because the settings service can't
+ * be activated or whatever.
+ */
+ if (!g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NO_REPLY)) {
+ g_warning ("%s: (NMRemoteConnection) error initializing: %s\n",
+ __func__, error->message);
+ }
+ g_error_free (error);
+ }
+ priv->inited = TRUE;
+ }
}
+/****************************************************************/
+
static void
-update_cb (DBusGProxy *proxy, DBusGProxyCall *proxy_call, gpointer user_data)
+remote_call_dbus_cb (DBusGProxy *proxy, DBusGProxyCall *proxy_call, gpointer user_data)
{
RemoteCall *call = user_data;
- NMRemoteConnectionCommitFunc func = (NMRemoteConnectionCommitFunc) call->callback;
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (call->self);
GError *error = NULL;
- NMRemoteConnection *self = g_object_ref (call->self);
- dbus_g_proxy_end_call (proxy, proxy_call, &error,
- G_TYPE_INVALID);
- if (func != NULL)
- (*func)(call->self, error, call->user_data);
+ g_assert ( (!proxy && !proxy_call && priv->proxy_is_destroyed) ||
+ ( proxy && proxy_call && !priv->proxy_is_destroyed && proxy == priv->proxy) );
+
+ if (priv->proxy_is_destroyed) {
+ error = g_error_new_literal (NM_REMOTE_CONNECTION_ERROR,
+ NM_REMOTE_CONNECTION_ERROR_DISCONNECTED,
+ _("Disconnected by D-Bus"));
+ }
+ call->fetch_result_cb (call, proxy_call, error);
g_clear_error (&error);
- remote_call_complete (call->self, call);
- g_object_unref (self);
+
+ priv->calls = g_slist_remove (priv->calls, call);
+ g_object_unref (call->self);
+ g_free (call);
+}
+
+static gboolean
+remote_call_cleanup_cb (void *user_data)
+{
+ remote_call_dbus_cb (NULL, NULL, user_data);
+ return G_SOURCE_REMOVE;
+}
+
+static RemoteCall *
+remote_call_new (NMRemoteConnection *self,
+ RemoteCallFetchResultCb fetch_result_cb,
+ GFunc callback,
+ gpointer user_data)
+{
+ RemoteCall *call;
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
+
+ g_assert (fetch_result_cb);
+
+ if (priv->proxy_is_destroyed && !callback)
+ return NULL;
+
+ call = g_malloc0 (sizeof (RemoteCall));
+ call->self = g_object_ref (self);
+ call->fetch_result_cb = fetch_result_cb;
+ call->user_data = user_data;
+ call->callback = callback;
+
+ if (priv->proxy_is_destroyed) {
+ g_idle_add (remote_call_cleanup_cb, call);
+ return NULL;
+ }
+ priv->calls = g_slist_prepend (priv->calls, call);
+ return call;
+}
+
+static void
+proxy_set_destroyed (NMRemoteConnection *self)
+{
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
+
+ if (priv->proxy_is_destroyed) {
+ g_assert (!priv->calls);
+ return;
+ }
+
+ priv->proxy_is_destroyed = TRUE;
+
+ priv->calls = g_slist_reverse (priv->calls);
+ while (priv->calls)
+ remote_call_dbus_cb (NULL, NULL, priv->calls->data);
+}
+
+static void
+proxy_destroy_cb (DBusGProxy* proxy, gpointer user_data) {
+ proxy_set_destroyed (user_data);
+}
+
+/****************************************************************/
+
+static void
+result_cb (RemoteCall *call, DBusGProxyCall *proxy_call, GError *error)
+{
+ NMRemoteConnectionResultFunc func = (NMRemoteConnectionResultFunc) call->callback;
+ GError *local_error = NULL;
+
+ if (!error) {
+ dbus_g_proxy_end_call (NM_REMOTE_CONNECTION_GET_PRIVATE (call->self)->proxy,
+ proxy_call, &local_error, G_TYPE_INVALID);
+ error = local_error;
+ }
+ if (func)
+ (*func) (call->self, error, call->user_data);
+ g_clear_error (&local_error);
}
/**
@@ -120,54 +240,105 @@ update_cb (DBusGProxy *proxy, DBusGProxyCall *proxy_call, gpointer user_data)
* commit completes
* @user_data: (closure): caller-specific data to be passed to @callback
*
- * Save any local changes to the settings and properties of this connection and
- * save them in the settings service.
+ * Send any local changes to the settings and properties of this connection to
+ * NetworkManager, which will immediately save them to disk.
**/
void
nm_remote_connection_commit_changes (NMRemoteConnection *self,
- NMRemoteConnectionCommitFunc callback,
+ NMRemoteConnectionResultFunc callback,
gpointer user_data)
{
NMRemoteConnectionPrivate *priv;
- GHashTable *settings = NULL;
RemoteCall *call;
+ GHashTable *settings;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_REMOTE_CONNECTION (self));
- g_return_if_fail (callback != NULL);
priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
- call = g_malloc0 (sizeof (RemoteCall));
- call->self = self;
- call->callback = (GFunc) callback;
- call->user_data = user_data;
+ call = remote_call_new (self, result_cb, (GFunc) callback, user_data);
+ if (!call)
+ return;
settings = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ALL);
-
call->call = dbus_g_proxy_begin_call (priv->proxy, "Update",
- update_cb, call, NULL,
+ remote_call_dbus_cb, call, NULL,
DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, settings,
G_TYPE_INVALID);
g_assert (call->call);
- priv->calls = g_slist_append (priv->calls, call);
+ g_hash_table_destroy (settings);
+}
+/**
+ * nm_remote_connection_commit_changes_unsaved:
+ * @connection: the #NMRemoteConnection
+ * @callback: (scope async) (allow-none): a function to be called when the
+ * commit completes
+ * @user_data: (closure): caller-specific data to be passed to @callback
+ *
+ * Send any local changes to the settings and properties of this connection to
+ * NetworkManager. The changes are not saved to disk until either
+ * nm_remote_connection_save() or nm_remote_connection_commit_changes() is
+ * called.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_remote_connection_commit_changes_unsaved (NMRemoteConnection *connection,
+ NMRemoteConnectionResultFunc callback,
+ gpointer user_data)
+{
+ NMRemoteConnectionPrivate *priv;
+ GHashTable *settings = NULL;
+ RemoteCall *call;
+
+ g_return_if_fail (NM_IS_REMOTE_CONNECTION (connection));
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ call = remote_call_new (connection, result_cb, (GFunc) callback, user_data);
+ if (!call)
+ return;
+
+ settings = nm_connection_to_hash (NM_CONNECTION (connection), NM_SETTING_HASH_FLAG_ALL);
+ call->call = dbus_g_proxy_begin_call (priv->proxy, "UpdateUnsaved",
+ remote_call_dbus_cb, call, NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, settings,
+ G_TYPE_INVALID);
+ g_assert (call->call);
g_hash_table_destroy (settings);
}
-static void
-delete_cb (DBusGProxy *proxy, DBusGProxyCall *proxy_call, gpointer user_data)
+/**
+ * nm_remote_connection_save:
+ * @connection: the #NMRemoteConnection
+ * @callback: (scope async) (allow-none): a function to be called when the
+ * save completes
+ * @user_data: (closure): caller-specific data to be passed to @callback
+ *
+ * Saves the connection to disk if the connection has changes that have not yet
+ * been written to disk, or if the connection has never been saved.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_remote_connection_save (NMRemoteConnection *connection,
+ NMRemoteConnectionResultFunc callback,
+ gpointer user_data)
{
- RemoteCall *call = user_data;
- NMRemoteConnectionDeleteFunc func = (NMRemoteConnectionDeleteFunc) call->callback;
- GError *error = NULL;
+ NMRemoteConnectionPrivate *priv;
+ RemoteCall *call;
- dbus_g_proxy_end_call (proxy, proxy_call, &error,
- G_TYPE_INVALID);
- if (func != NULL)
- (*func)(call->self, error, call->user_data);
- g_clear_error (&error);
- remote_call_complete (call->self, call);
+ g_return_if_fail (NM_IS_REMOTE_CONNECTION (connection));
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ call = remote_call_new (connection, result_cb, (GFunc) callback, user_data);
+ if (!call)
+ return;
+
+ call->call = dbus_g_proxy_begin_call (priv->proxy, "Save", remote_call_dbus_cb, call, NULL, G_TYPE_INVALID);
+ g_assert (call->call);
}
/**
@@ -180,47 +351,48 @@ delete_cb (DBusGProxy *proxy, DBusGProxyCall *proxy_call, gpointer user_data)
**/
void
nm_remote_connection_delete (NMRemoteConnection *self,
- NMRemoteConnectionDeleteFunc callback,
+ NMRemoteConnectionResultFunc callback,
gpointer user_data)
{
NMRemoteConnectionPrivate *priv;
RemoteCall *call;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_REMOTE_CONNECTION (self));
priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
- call = g_malloc0 (sizeof (RemoteCall));
- call->self = self;
- call->callback = (GFunc) callback;
- call->user_data = user_data;
+ call = remote_call_new (self, result_cb, (GFunc) callback, user_data);
+ if (!call)
+ return;
call->call = dbus_g_proxy_begin_call (priv->proxy, "Delete",
- delete_cb, call, NULL,
+ remote_call_dbus_cb, call, NULL,
G_TYPE_INVALID);
g_assert (call->call);
- priv->calls = g_slist_append (priv->calls, call);
}
static void
-get_secrets_cb (DBusGProxy *proxy, DBusGProxyCall *proxy_call, gpointer user_data)
+get_secrets_cb (RemoteCall *call, DBusGProxyCall *proxy_call, GError *error)
{
- RemoteCall *call = user_data;
NMRemoteConnectionGetSecretsFunc func = (NMRemoteConnectionGetSecretsFunc) call->callback;
GHashTable *secrets = NULL;
- GError *error = NULL;
-
- dbus_g_proxy_end_call (proxy, proxy_call, &error,
- DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &secrets,
- G_TYPE_INVALID);
- (*func)(call->self, error ? NULL : secrets, error, call->user_data);
+ GError *local_error = NULL;
+
+ if (!error) {
+ dbus_g_proxy_end_call (NM_REMOTE_CONNECTION_GET_PRIVATE (call->self)->proxy,
+ proxy_call, &local_error,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &secrets,
+ G_TYPE_INVALID);
+ error = local_error;
+ }
+ if (func)
+ (*func) (call->self, error ? NULL : secrets, error, call->user_data);
+ g_clear_error (&local_error);
if (secrets)
g_hash_table_destroy (secrets);
- g_clear_error (&error);
- remote_call_complete (call->self, call);
}
+
/**
* nm_remote_connection_get_secrets:
* @connection: the #NMRemoteConnection
@@ -240,23 +412,39 @@ nm_remote_connection_get_secrets (NMRemoteConnection *self,
NMRemoteConnectionPrivate *priv;
RemoteCall *call;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_REMOTE_CONNECTION (self));
g_return_if_fail (callback != NULL);
priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
- call = g_malloc0 (sizeof (RemoteCall));
- call->self = self;
- call->callback = (GFunc) callback;
- call->user_data = user_data;
+ call = remote_call_new (self, get_secrets_cb, (GFunc) callback, user_data);
+ if (!call)
+ return;
call->call = dbus_g_proxy_begin_call (priv->proxy, "GetSecrets",
- get_secrets_cb, call, NULL,
+ remote_call_dbus_cb, call, NULL,
G_TYPE_STRING, setting_name,
G_TYPE_INVALID);
g_assert (call->call);
- priv->calls = g_slist_append (priv->calls, call);
+}
+
+/**
+ * nm_remote_connection_get_unsaved:
+ * @connection: the #NMRemoteConnection
+ *
+ * Returns: %TRUE if the remote connection contains changes that have not
+ * been saved to disk, %FALSE if the connection is the same as its on-disk
+ * representation.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_remote_connection_get_unsaved (NMRemoteConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE);
+
+ _nm_remote_connection_ensure_inited (connection);
+ return NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->unsaved;
}
/****************************************************************/
@@ -328,9 +516,11 @@ updated_cb (DBusGProxy *proxy, gpointer user_data)
NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
/* The connection got updated; request the replacement settings */
- dbus_g_proxy_begin_call (priv->proxy, "GetSettings",
- updated_get_settings_cb, self, NULL,
- G_TYPE_INVALID);
+ if (!priv->proxy_is_destroyed) {
+ dbus_g_proxy_begin_call (priv->proxy, "GetSettings",
+ updated_get_settings_cb, self, NULL,
+ G_TYPE_INVALID);
+ }
}
static void
@@ -339,6 +529,25 @@ removed_cb (DBusGProxy *proxy, gpointer user_data)
g_signal_emit (G_OBJECT (user_data), signals[REMOVED], 0);
}
+static void
+properties_changed_cb (DBusGProxy *proxy,
+ GHashTable *properties,
+ gpointer user_data)
+{
+ NMRemoteConnection *self = NM_REMOTE_CONNECTION (user_data);
+ GHashTableIter iter;
+ const char *key;
+ GValue *value;
+
+ g_hash_table_iter_init (&iter, properties);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) {
+ if (!strcmp (key, "Unsaved")) {
+ NM_REMOTE_CONNECTION_GET_PRIVATE (self)->unsaved = g_value_get_boolean (value);
+ g_object_notify (G_OBJECT (self), NM_REMOTE_CONNECTION_UNSAVED);
+ }
+ }
+}
+
/****************************************************************/
/**
@@ -366,16 +575,16 @@ nm_remote_connection_new (DBusGConnection *bus,
static void
constructed (GObject *object)
{
- NMRemoteConnectionPrivate *priv;
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object);
+
+ G_OBJECT_CLASS (nm_remote_connection_parent_class)->constructed (object);
- priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object);
g_assert (priv->bus);
g_assert (nm_connection_get_path (NM_CONNECTION (object)));
- priv->proxy = dbus_g_proxy_new_for_name (priv->bus,
- NM_DBUS_SERVICE,
- nm_connection_get_path (NM_CONNECTION (object)),
- NM_DBUS_IFACE_SETTINGS_CONNECTION);
+ priv->proxy = _nm_dbus_new_proxy_for_connection (priv->bus,
+ nm_connection_get_path (NM_CONNECTION (object)),
+ NM_DBUS_IFACE_SETTINGS_CONNECTION);
g_assert (priv->proxy);
dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT);
@@ -384,23 +593,54 @@ constructed (GObject *object)
dbus_g_proxy_add_signal (priv->proxy, "Removed", G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "Removed", G_CALLBACK (removed_cb), object, NULL);
+
+ g_signal_connect (priv->proxy, "destroy", G_CALLBACK (proxy_destroy_cb), object);
+
+ /* Monitor properties */
+ dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE,
+ DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->proxy, "PropertiesChanged",
+ DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->proxy, "PropertiesChanged",
+ G_CALLBACK (properties_changed_cb),
+ object,
+ NULL);
+
+ priv->props_proxy = _nm_dbus_new_proxy_for_connection (priv->bus,
+ nm_connection_get_path (NM_CONNECTION (object)),
+ DBUS_INTERFACE_PROPERTIES);
+ g_assert (priv->props_proxy);
}
static gboolean
init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
{
NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (initable);
- GHashTable *settings;
+ GHashTable *hash;
if (!dbus_g_proxy_call (priv->proxy, "GetSettings", error,
G_TYPE_INVALID,
- DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &settings,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &hash,
G_TYPE_INVALID))
return FALSE;
-
priv->visible = TRUE;
- replace_settings (NM_REMOTE_CONNECTION (initable), settings);
- g_hash_table_destroy (settings);
+ replace_settings (NM_REMOTE_CONNECTION (initable), hash);
+ g_hash_table_destroy (hash);
+
+ /* Get properties */
+ hash = NULL;
+ if (!dbus_g_proxy_call (priv->props_proxy, "GetAll", error,
+ G_TYPE_STRING, NM_DBUS_IFACE_SETTINGS_CONNECTION,
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_MAP_OF_VARIANT, &hash,
+ G_TYPE_INVALID))
+ return FALSE;
+ properties_changed_cb (priv->props_proxy, hash, NM_REMOTE_CONNECTION (initable));
+ g_hash_table_destroy (hash);
+
return TRUE;
}
@@ -410,6 +650,38 @@ typedef struct {
} NMRemoteConnectionInitData;
static void
+init_async_complete (NMRemoteConnectionInitData *init_data, GError *error)
+{
+ if (error)
+ g_simple_async_result_take_error (init_data->result, error);
+ else {
+ g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE);
+ NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection)->inited = TRUE;
+ }
+
+ g_simple_async_result_complete (init_data->result);
+ g_object_unref (init_data->result);
+ g_slice_free (NMRemoteConnectionInitData, init_data);
+}
+
+static void
+init_async_got_properties (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
+{
+ NMRemoteConnectionInitData *init_data = user_data;
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection);
+ GHashTable *props;
+ GError *error = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call, &error,
+ DBUS_TYPE_G_MAP_OF_VARIANT, &props,
+ G_TYPE_INVALID)) {
+ properties_changed_cb (priv->props_proxy, props, init_data->connection);
+ g_hash_table_destroy (props);
+ }
+ init_async_complete (init_data, error);
+}
+
+static void
init_get_settings_cb (DBusGProxy *proxy,
DBusGProxyCall *call,
gpointer user_data)
@@ -423,17 +695,19 @@ init_get_settings_cb (DBusGProxy *proxy,
DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &settings,
G_TYPE_INVALID);
if (error) {
- g_simple_async_result_take_error (init_data->result, error);
- } else {
- priv->visible = TRUE;
- replace_settings (init_data->connection, settings);
- g_hash_table_destroy (settings);
- g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE);
+ init_async_complete (init_data, error);
+ return;
}
- g_simple_async_result_complete (init_data->result);
- g_object_unref (init_data->result);
- g_slice_free (NMRemoteConnectionInitData, init_data);
+ priv->visible = TRUE;
+ replace_settings (init_data->connection, settings);
+ g_hash_table_destroy (settings);
+
+ /* Grab properties */
+ dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
+ init_async_got_properties, init_data, NULL,
+ G_TYPE_STRING, NM_DBUS_IFACE_SETTINGS_CONNECTION,
+ G_TYPE_INVALID);
}
static void
@@ -453,7 +727,6 @@ init_async (GAsyncInitable *initable, int io_priority,
dbus_g_proxy_begin_call (priv->proxy, "GetSettings",
init_get_settings_cb, init_data, NULL,
G_TYPE_INVALID);
-
}
static gboolean
@@ -510,6 +783,22 @@ constructor (GType type, guint n_construct_properties,
}
static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ _nm_remote_connection_ensure_inited (NM_REMOTE_CONNECTION (object));
+
+ switch (prop_id) {
+ case PROP_UNSAVED:
+ g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->unsaved);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
@@ -519,8 +808,15 @@ set_property (GObject *object, guint prop_id,
case PROP_BUS:
case PROP_DBUS_CONNECTION:
/* Construct only */
- if (g_value_get_boxed (value))
- priv->bus = dbus_g_connection_ref ((DBusGConnection *) g_value_get_boxed (value));
+ /* priv->bus is set from either of two properties so that it (a) remains
+ * backwards compatible with the previous "bus" property, and that (b)
+ * it can be created just like an NMObject using the "dbus-connection",
+ * even though it's not a subclass of NMObject. So don't overwrite the
+ * a valid value that the other property set with NULL, if one of the
+ * properties isn't specified at construction time.
+ */
+ if (!priv->bus)
+ priv->bus = g_value_dup_boxed (value);
break;
case PROP_DBUS_PATH:
/* Don't need to do anything; see constructor(). */
@@ -535,12 +831,15 @@ static void
dispose (GObject *object)
{
NMRemoteConnection *self = NM_REMOTE_CONNECTION (object);
- NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object);
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
- while (g_slist_length (priv->calls))
- remote_call_complete (self, priv->calls->data);
+ proxy_set_destroyed (self);
- g_clear_object (&priv->proxy);
+ if (priv->proxy) {
+ g_signal_handlers_disconnect_by_func (priv->proxy, proxy_destroy_cb, object);
+ g_clear_object (&priv->proxy);
+ }
+ g_clear_object (&priv->props_proxy);
if (priv->bus) {
dbus_g_connection_unref (priv->bus);
@@ -559,6 +858,7 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
/* virtual methods */
object_class->constructor = constructor;
+ object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
object_class->constructed = constructed;
@@ -588,6 +888,21 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
NULL,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NMRemoteConnection:unsaved:
+ *
+ * %TRUE if the remote connection contains changes that have not been saved
+ * to disk, %FALSE if the connection is the same as its on-disk representation.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property (object_class, PROP_UNSAVED,
+ g_param_spec_boolean (NM_REMOTE_CONNECTION_UNSAVED,
+ "Unsaved",
+ "Unsaved",
+ FALSE,
+ G_PARAM_READABLE));
+
/* Signals */
/**
* NMRemoteConnection::updated:
diff --git a/libnm-glib/nm-remote-connection.h b/libnm-glib/nm-remote-connection.h
index eebf91605..911885c47 100644
--- a/libnm-glib/nm-remote-connection.h
+++ b/libnm-glib/nm-remote-connection.h
@@ -38,6 +38,24 @@ G_BEGIN_DECLS
#define NM_IS_REMOTE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_REMOTE_CONNECTION))
#define NM_REMOTE_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnectionClass))
+
+/**
+ * NMRemoteConnectionError:
+ * @NM_REMOTE_CONNECTION_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_REMOTE_CONNECTION_ERROR_DISCONNECTED: dbus disconnected
+ */
+typedef enum {
+ NM_REMOTE_CONNECTION_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_REMOTE_CONNECTION_ERROR_DISCONNECTED, /*< nick=Disconnected >*/
+} NMRemoteConnectionError;
+
+#define NM_REMOTE_CONNECTION_ERROR (nm_remote_connection_error_quark ())
+GQuark nm_remote_connection_error_quark (void);
+
+/* Properties */
+#define NM_REMOTE_CONNECTION_UNSAVED "unsaved"
+
+/* Signals */
#define NM_REMOTE_CONNECTION_UPDATED "updated"
#define NM_REMOTE_CONNECTION_REMOVED "removed"
@@ -64,30 +82,21 @@ typedef struct {
} NMRemoteConnectionClass;
/**
- * NMRemoteConnectionCommitFunc:
- * @connection: the connection for which updates are to be committed
+ * NMRemoteConnectionResultFunc:
+ * @connection: the connection for which an operation was performed
* @error: on failure, a descriptive error
- * @user_data: user data passed to nm_remote_connection_commit_changes()
+ * @user_data: user data passed to function which began the operation
*
- * Called when NetworkManager has committed outstanding changes to a connection
- * to backing storage as a result of nm_remote_connection_commit_changes().
+ * Called when NetworkManager has finished an asynchronous operation on a
+ * connection, like commit changes, deleting, saving, etc.
*/
-typedef void (*NMRemoteConnectionCommitFunc) (NMRemoteConnection *connection,
+typedef void (*NMRemoteConnectionResultFunc) (NMRemoteConnection *connection,
GError *error,
gpointer user_data);
-/**
- * NMRemoteConnectionDeleteFunc:
- * @connection: the connection to be deleted
- * @error: on failure, a descriptive error
- * @user_data: user data passed to nm_remote_connection_delete()
- *
- * Called when NetworkManager has deleted a connection as a result of
- * nm_remote_connection_delete().
- */
-typedef void (*NMRemoteConnectionDeleteFunc) (NMRemoteConnection *connection,
- GError *error,
- gpointer user_data);
+/* Backwards compatibility */
+typedef NMRemoteConnectionResultFunc NMRemoteConnectionCommitFunc;
+typedef NMRemoteConnectionResultFunc NMRemoteConnectionDeleteFunc;
/**
* NMRemoteConnectionGetSecretsFunc:
@@ -112,17 +121,31 @@ NMRemoteConnection *nm_remote_connection_new (DBusGConnection *bus,
const char *path);
void nm_remote_connection_commit_changes (NMRemoteConnection *connection,
- NMRemoteConnectionCommitFunc callback,
+ NMRemoteConnectionResultFunc callback,
gpointer user_data);
+NM_AVAILABLE_IN_0_9_10
+void nm_remote_connection_commit_changes_unsaved (NMRemoteConnection *connection,
+ NMRemoteConnectionResultFunc callback,
+ gpointer user_data);
+
+NM_AVAILABLE_IN_0_9_10
+void nm_remote_connection_save (NMRemoteConnection *connection,
+ NMRemoteConnectionResultFunc callback,
+ gpointer user_data);
+
void nm_remote_connection_delete (NMRemoteConnection *connection,
- NMRemoteConnectionDeleteFunc callback,
+ NMRemoteConnectionResultFunc callback,
gpointer user_data);
void nm_remote_connection_get_secrets (NMRemoteConnection *connection,
const char *setting_name,
NMRemoteConnectionGetSecretsFunc callback,
gpointer user_data);
+
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_remote_connection_get_unsaved (NMRemoteConnection *connection);
+
G_END_DECLS
#endif /* __NM_REMOTE_CONNECTION__ */
diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c
index 34817e2c1..3a2a3e688 100644
--- a/libnm-glib/nm-remote-settings.c
+++ b/libnm-glib/nm-remote-settings.c
@@ -25,11 +25,100 @@
#include <NetworkManager.h>
#include <nm-connection.h>
-#include "nm-glib-marshal.h"
#include "nm-dbus-glib-types.h"
#include "nm-remote-settings.h"
#include "nm-remote-connection-private.h"
+#include "nm-object-private.h"
+#include "nm-dbus-helpers-private.h"
#include "nm-glib-compat.h"
+#include "nm-object-private.h"
+
+/**
+ * SECTION:nm-remote-settings
+ * @Short_description: A helper for NetworkManager's settings API
+ * @Title: NMRemoteSettings
+ * @See_also:#NMRemoteConnection, #NMClient
+ *
+ * The #NMRemoteSettings object represents NetworkManager's "settings" service,
+ * which stores network configuration and allows authenticated clients to
+ * add, delete, and modify that configuration. The data required to connect
+ * to a specific network is called a "connection" and encapsulated by the
+ * #NMConnection object. Once a connection is known to NetworkManager, having
+ * either been added by a user or read from on-disk storage, the
+ * #NMRemoteSettings object creates a #NMRemoteConnection object which
+ * represents this stored connection. Use the #NMRemoteConnection object to
+ * perform any operations like modification or deletion.
+ *
+ * To add a new network connection to the NetworkManager settings service, first
+ * build up a template #NMConnection object. Since this connection is not yet
+ * added to NetworkManager, it is known only to your program and is not yet
+ * an #NMRemoteConnection. Then ask #NMRemoteSettings to add your connection.
+ * When the connection is added successfully, the supplied callback is called
+ * and returns to your program the new #NMRemoteConnection which represents
+ * the stored object known to NetworkManager.
+ *
+ * |[<!-- language="C" -->
+ * static void
+ * added_cb (NMRemoteSettings *settings,
+ * NMRemoteConnection *remote,
+ * GError *error,
+ * gpointer user_data)
+ * {
+ * if (error)
+ * g_print ("Error adding connection: %s", error->message);
+ * else {
+ * g_print ("Added: %s\n", nm_connection_get_path (NM_CONNECTION (remote)));
+ * /&ast; Use 'remote' with nm_remote_connection_commit_changes() to save
+ * * changes and nm_remote_connection_delete() to delete the connection &ast;/
+ * }
+ * }
+ *
+ * static gboolean
+ * add_wired_connection (const char *human_name)
+ * {
+ * NMConnection *connection;
+ * NMSettingConnection *s_con;
+ * NMSettingWired *s_wired;
+ * char *uuid;
+ * gboolean success;
+ *
+ * connection = nm_connection_new ();
+ *
+ * /&ast; Build up the 'connection' setting &ast;/
+ * s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ * uuid = nm_utils_uuid_generate ();
+ * g_object_set (G_OBJECT (s_con),
+ * NM_SETTING_CONNECTION_UUID, uuid,
+ * NM_SETTING_CONNECTION_ID, human_name,
+ * NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ * NULL);
+ * g_free (uuid);
+ * nm_connection_add_setting (connection, NM_SETTING (s_con));
+ *
+ * /&ast; Add the required 'wired' setting as this is a wired connection &ast;/
+ * nm_connection_add_setting (connection, nm_setting_wired_new ());
+ *
+ * /&ast; Add an 'ipv4' setting using AUTO configuration (eg DHCP) &ast;/
+ * s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ * g_object_set (G_OBJECT (s_ip4),
+ * NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ * NULL);
+ * nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+ *
+ * /&ast; Ask NetworkManager to store the connection &ast;/
+ * success = nm_remote_settings_add_connection (settings, connection, added_cb, loop);
+ *
+ * /&ast; Release the template connection; the actual stored connection will
+ * * be returned in added_cb() &ast;/
+ * g_object_unref (connection);
+ *
+ * /&ast; Let glib event loop run and added_cb() will be called when NetworkManager
+ * * is done adding the new connection. &ast;/
+ *
+ * return success;
+ * }
+ * ]|
+ */
static void nm_remote_settings_initable_iface_init (GInitableIface *iface);
static void nm_remote_settings_async_initable_iface_init (GAsyncInitableIface *iface);
@@ -43,6 +132,7 @@ G_DEFINE_TYPE_WITH_CODE (NMRemoteSettings, nm_remote_settings, G_TYPE_OBJECT,
typedef struct {
DBusGConnection *bus;
+ gboolean private_bus;
gboolean inited;
DBusGProxy *proxy;
@@ -60,8 +150,7 @@ typedef struct {
DBusGProxy *dbus_proxy;
- guint fetch_id;
- gboolean fetching;
+ DBusGProxyCall *listcon_call;
} NMRemoteSettingsPrivate;
enum {
@@ -172,6 +261,45 @@ add_connection_info_complete (NMRemoteSettings *self,
}
/**
+ * nm_remote_settings_get_connection_by_id:
+ * @settings: the %NMRemoteSettings
+ * @id: the id of the remote connection
+ *
+ * Returns the first matching %NMRemoteConnection matching a given @id.
+ *
+ * Returns: (transfer none): the remote connection object on success, or %NULL if no
+ * matching object was found.
+ *
+ * Since: 0.9.10
+ **/
+NMRemoteConnection *
+nm_remote_settings_get_connection_by_id (NMRemoteSettings *settings, const char *id)
+{
+ NMRemoteSettingsPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
+ g_return_val_if_fail (id != NULL, NULL);
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ _nm_remote_settings_ensure_inited (settings);
+
+ if (priv->service_running) {
+ GHashTableIter iter;
+ NMConnection *candidate;
+
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &candidate)) {
+
+ if (!strcmp (id, nm_connection_get_id (candidate)))
+ return NM_REMOTE_CONNECTION (candidate);
+ }
+ }
+
+ return NULL;
+}
+
+/**
* nm_remote_settings_get_connection_by_path:
* @settings: the %NMRemoteSettings
* @path: the D-Bus object path of the remote connection
@@ -186,7 +314,6 @@ nm_remote_settings_get_connection_by_path (NMRemoteSettings *settings, const cha
{
NMRemoteSettingsPrivate *priv;
- g_return_val_if_fail (settings != NULL, NULL);
g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
g_return_val_if_fail (path != NULL, NULL);
@@ -214,7 +341,6 @@ nm_remote_settings_get_connection_by_uuid (NMRemoteSettings *settings, const cha
GHashTableIter iter;
NMRemoteConnection *candidate;
- g_return_val_if_fail (settings != NULL, NULL);
g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
g_return_val_if_fail (uuid != NULL, NULL);
@@ -363,9 +489,10 @@ connection_inited (GObject *source, GAsyncResult *result, gpointer user_data)
g_signal_emit (self, signals[NEW_CONNECTION], 0, remote);
} else {
if (addinfo) {
- local = g_error_new_literal (NM_REMOTE_SETTINGS_ERROR,
- NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE,
- "Connection not visible or not available");
+ local = g_error_new (NM_REMOTE_SETTINGS_ERROR,
+ NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE,
+ "Connection not visible or not available: %s",
+ error ? error->message : "(unknown)");
add_connection_info_complete (self, addinfo, local);
g_error_free (local);
}
@@ -382,10 +509,8 @@ connection_inited (GObject *source, GAsyncResult *result, gpointer user_data)
/* Let listeners know that all connections have been found */
priv->init_left--;
- if (priv->init_left == 0) {
- priv->fetching = FALSE;
+ if (priv->init_left == 0)
g_signal_emit (self, signals[CONNECTIONS_READ], 0);
- }
}
static NMRemoteConnection *
@@ -431,12 +556,15 @@ fetch_connections_done (DBusGProxy *proxy,
GError *error = NULL;
int i;
+ g_warn_if_fail (priv->listcon_call == call);
+ priv->listcon_call = NULL;
+
if (!dbus_g_proxy_end_call (proxy, call, &error,
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &connections,
G_TYPE_INVALID)) {
- /* Ignore settings service spawn errors */
if ( !g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN)
- && !g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NAME_HAS_NO_OWNER)) {
+ && !g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NAME_HAS_NO_OWNER)
+ && priv->service_running) {
g_warning ("%s: error fetching connections: (%d) %s.",
__func__,
error->code,
@@ -445,16 +573,14 @@ fetch_connections_done (DBusGProxy *proxy,
g_clear_error (&error);
/* We tried to read connections and failed */
- priv->fetching = FALSE;
g_signal_emit (self, signals[CONNECTIONS_READ], 0);
return;
}
/* Let listeners know we are done getting connections */
- if (connections->len == 0) {
- priv->fetching = FALSE;
+ if (connections->len == 0)
g_signal_emit (self, signals[CONNECTIONS_READ], 0);
- } else {
+ else {
priv->init_left = connections->len;
for (i = 0; i < connections->len; i++) {
char *path = g_ptr_array_index (connections, i);
@@ -467,20 +593,6 @@ fetch_connections_done (DBusGProxy *proxy,
g_ptr_array_free (connections, TRUE);
}
-static gboolean
-fetch_connections (gpointer user_data)
-{
- NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
- NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-
- priv->fetch_id = 0;
-
- dbus_g_proxy_begin_call (priv->proxy, "ListConnections",
- fetch_connections_done, self, NULL,
- G_TYPE_INVALID);
- return FALSE;
-}
-
/**
* nm_remote_settings_list_connections:
* @settings: the %NMRemoteSettings
@@ -500,7 +612,6 @@ nm_remote_settings_list_connections (NMRemoteSettings *settings)
GHashTableIter iter;
gpointer value;
- g_return_val_if_fail (settings != NULL, NULL);
g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
@@ -543,7 +654,14 @@ add_connection_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data
* @user_data: (closure): caller-specific data passed to @callback
*
* Requests that the remote settings service add the given settings to a new
- * connection.
+ * connection. The connection is immediately written to disk. @connection is
+ * untouched by this function and only serves as a template of the settings to
+ * add. The #NMRemoteConnection object that represents what NetworkManager
+ * actually added is returned to @callback when the addition operation is complete.
+ *
+ * Note that the #NMRemoteConnection returned in @callback may not contain
+ * identical settings to @connection as NetworkManager may perform automatic
+ * completion and/or normalization of connection properties.
*
* Returns: %TRUE if the request was successful, %FALSE if it failed
**/
@@ -557,9 +675,7 @@ nm_remote_settings_add_connection (NMRemoteSettings *settings,
AddConnectionInfo *info;
GHashTable *new_settings;
- g_return_val_if_fail (settings != NULL, FALSE);
g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
- g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
g_return_val_if_fail (callback != NULL, FALSE);
@@ -567,6 +683,9 @@ nm_remote_settings_add_connection (NMRemoteSettings *settings,
_nm_remote_settings_ensure_inited (settings);
+ if (!priv->service_running)
+ return FALSE;
+
info = g_malloc0 (sizeof (AddConnectionInfo));
info->self = settings;
info->callback = callback;
@@ -586,6 +705,171 @@ nm_remote_settings_add_connection (NMRemoteSettings *settings,
return TRUE;
}
+/**
+ * nm_remote_settings_add_connection_unsaved:
+ * @settings: the %NMRemoteSettings
+ * @connection: the connection to add. Note that this object's settings will be
+ * added, not the object itself
+ * @callback: (scope async): callback to be called when the add operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the remote settings service add the given settings to a new
+ * connection. The connection is not written to disk, which may be done at
+ * a later time by calling the connection's nm_remote_connection_commit_changes()
+ * method.
+ *
+ * Returns: %TRUE if the request was successful, %FALSE if it failed
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_remote_settings_add_connection_unsaved (NMRemoteSettings *settings,
+ NMConnection *connection,
+ NMRemoteSettingsAddConnectionFunc callback,
+ gpointer user_data)
+{
+ NMRemoteSettingsPrivate *priv;
+ AddConnectionInfo *info;
+ GHashTable *new_settings;
+
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (callback != NULL, FALSE);
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ _nm_remote_settings_ensure_inited (settings);
+
+ if (!priv->service_running)
+ return FALSE;
+
+ info = g_malloc0 (sizeof (AddConnectionInfo));
+ info->self = settings;
+ info->callback = callback;
+ info->callback_data = user_data;
+
+ new_settings = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
+ dbus_g_proxy_begin_call (priv->proxy, "AddConnectionUnsaved",
+ add_connection_done,
+ info,
+ NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, new_settings,
+ G_TYPE_INVALID);
+ g_hash_table_destroy (new_settings);
+
+ priv->add_list = g_slist_append (priv->add_list, info);
+
+ return TRUE;
+}
+
+/**
+ * nm_remote_settings_load_connections:
+ * @settings: the %NMRemoteSettings
+ * @filenames: %NULL-terminated array of filenames to load
+ * @failures: (out) (transfer full): on return, a %NULL-terminated array of
+ * filenames that failed to load
+ * @error: return location for #GError
+ *
+ * Requests that the remote settings service load or reload the given files,
+ * adding or updating the connections described within.
+ *
+ * The changes to the indicated files will not yet be reflected in
+ * @settings's connections array when the function returns.
+ *
+ * If all of the indicated files were successfully loaded, the
+ * function will return %TRUE, and @failures will be set to %NULL. If
+ * NetworkManager tried to load the files, but some (or all) failed,
+ * then @failures will be set to a %NULL-terminated array of the
+ * filenames that failed to load.
+
+ * Returns: %TRUE if NetworkManager at least tried to load @filenames,
+ * %FALSE if an error occurred (eg, permission denied).
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_remote_settings_load_connections (NMRemoteSettings *settings,
+ char **filenames,
+ char ***failures,
+ GError **error)
+{
+ NMRemoteSettingsPrivate *priv;
+ char **my_failures = NULL;
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
+ g_return_val_if_fail (filenames != NULL, FALSE);
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ _nm_remote_settings_ensure_inited (settings);
+
+ if (!priv->service_running) {
+ g_set_error_literal (error, NM_REMOTE_SETTINGS_ERROR,
+ NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE,
+ "NetworkManager is not running.");
+ return FALSE;
+ }
+
+ if (!dbus_g_proxy_call (priv->proxy, "LoadConnections", error,
+ G_TYPE_STRV, filenames,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &ret,
+ G_TYPE_STRV, &my_failures,
+ G_TYPE_INVALID))
+ ret = FALSE;
+
+ if (failures) {
+ if (my_failures && !*my_failures)
+ g_clear_pointer (&my_failures, g_free);
+ *failures = my_failures;
+ } else
+ g_strfreev (my_failures);
+
+ return ret;
+}
+
+/**
+ * nm_remote_settings_reload_connections:
+ * @settings: the #NMRemoteSettings
+ * @error: return location for #GError
+ *
+ * Requests that the remote settings service reload all connection
+ * files from disk, adding, updating, and removing connections until
+ * the in-memory state matches the on-disk state.
+ *
+ * Return value: %TRUE on success, %FALSE on failure
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_remote_settings_reload_connections (NMRemoteSettings *settings,
+ GError **error)
+{
+ NMRemoteSettingsPrivate *priv;
+ gboolean success;
+
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ _nm_remote_settings_ensure_inited (settings);
+
+ if (!priv->service_running) {
+ g_set_error_literal (error, NM_REMOTE_SETTINGS_ERROR,
+ NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE,
+ "NetworkManager is not running.");
+ return FALSE;
+ }
+
+ if (!dbus_g_proxy_call (priv->proxy, "ReloadConnections", error,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &success,
+ G_TYPE_INVALID))
+ return FALSE;
+ return success;
+}
+
static void
clear_one_hash (GHashTable *table)
{
@@ -595,7 +879,7 @@ clear_one_hash (GHashTable *table)
/* Build up the list of connections; we can't emit "removed" during hash
* table iteration because emission of the "removed" signal may trigger code
- * that explicitly removes the the connection from the hash table somewhere
+ * that explicitly removes the connection from the hash table somewhere
* else.
*/
g_hash_table_iter_init (&iter, table);
@@ -609,17 +893,6 @@ clear_one_hash (GHashTable *table)
g_hash_table_remove_all (table);
}
-static gboolean
-remove_connections (gpointer user_data)
-{
- NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
- NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-
- clear_one_hash (priv->pending);
- clear_one_hash (priv->connections);
- return FALSE;
-}
-
typedef struct {
NMRemoteSettings *settings;
NMRemoteSettingsSaveHostnameFunc callback;
@@ -663,7 +936,6 @@ nm_remote_settings_save_hostname (NMRemoteSettings *settings,
NMRemoteSettingsPrivate *priv;
SaveHostnameInfo *info;
- g_return_val_if_fail (settings != NULL, FALSE);
g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
g_return_val_if_fail (hostname != NULL, FALSE);
g_return_val_if_fail (callback != NULL, FALSE);
@@ -672,6 +944,9 @@ nm_remote_settings_save_hostname (NMRemoteSettings *settings,
_nm_remote_settings_ensure_inited (settings);
+ if (!priv->service_running)
+ return FALSE;
+
info = g_malloc0 (sizeof (SaveHostnameInfo));
info->settings = settings;
info->callback = callback;
@@ -740,21 +1015,23 @@ name_owner_changed (DBusGProxy *proxy,
const char *sname = NM_DBUS_SERVICE;
if (!strcmp (name, sname)) {
- if (priv->fetch_id)
- g_source_remove (priv->fetch_id);
-
if (new_owner && strlen (new_owner) > 0) {
- priv->fetch_id = g_idle_add (fetch_connections, self);
priv->service_running = TRUE;
+ priv->listcon_call = dbus_g_proxy_begin_call (priv->proxy, "ListConnections",
+ fetch_connections_done, self, NULL,
+ G_TYPE_INVALID);
+
dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
nm_appeared_got_properties, self, NULL,
G_TYPE_STRING, NM_DBUS_IFACE_SETTINGS,
G_TYPE_INVALID);
} else {
- priv->fetch_id = g_idle_add (remove_connections, self);
priv->service_running = FALSE;
+ clear_one_hash (priv->pending);
+ clear_one_hash (priv->connections);
+
/* Clear properties */
g_free (priv->hostname);
priv->hostname = NULL;
@@ -762,6 +1039,11 @@ name_owner_changed (DBusGProxy *proxy,
priv->can_modify = FALSE;
g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_CAN_MODIFY);
+
+ if (priv->listcon_call) {
+ dbus_g_proxy_cancel_call (priv->proxy, priv->listcon_call);
+ priv->listcon_call = NULL;
+ }
}
g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_SERVICE_RUNNING);
}
@@ -784,7 +1066,11 @@ name_owner_changed (DBusGProxy *proxy,
NMRemoteSettings *
nm_remote_settings_new (DBusGConnection *bus)
{
- return g_object_new (NM_TYPE_REMOTE_SETTINGS, NM_REMOTE_SETTINGS_BUS, bus, NULL);
+ NMRemoteSettings *self;
+
+ self = g_object_new (NM_TYPE_REMOTE_SETTINGS, NM_REMOTE_SETTINGS_BUS, bus, NULL);
+ _nm_remote_settings_ensure_inited (self);
+ return self;
}
static void
@@ -880,29 +1166,30 @@ constructed (GObject *object)
priv = NM_REMOTE_SETTINGS_GET_PRIVATE (object);
- /* D-Bus proxy for clearing connections on NameOwnerChanged */
- priv->dbus_proxy = dbus_g_proxy_new_for_name (priv->bus,
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus",
- "org.freedesktop.DBus");
- g_assert (priv->dbus_proxy);
+ if (priv->private_bus == FALSE) {
+ /* D-Bus proxy for clearing connections on NameOwnerChanged */
+ priv->dbus_proxy = dbus_g_proxy_new_for_name (priv->bus,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+ g_assert (priv->dbus_proxy);
+
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->dbus_proxy, "NameOwnerChanged",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->dbus_proxy,
+ "NameOwnerChanged",
+ G_CALLBACK (name_owner_changed),
+ object, NULL);
+ }
- dbus_g_object_register_marshaller (_nm_glib_marshal_VOID__STRING_STRING_STRING,
- G_TYPE_NONE,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_add_signal (priv->dbus_proxy, "NameOwnerChanged",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->dbus_proxy,
- "NameOwnerChanged",
- G_CALLBACK (name_owner_changed),
- object, NULL);
-
- priv->proxy = dbus_g_proxy_new_for_name (priv->bus,
- NM_DBUS_SERVICE,
- NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS);
+ priv->proxy = _nm_dbus_new_proxy_for_connection (priv->bus,
+ NM_DBUS_PATH_SETTINGS,
+ NM_DBUS_IFACE_SETTINGS);
g_assert (priv->proxy);
dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT);
@@ -914,19 +1201,14 @@ constructed (GObject *object)
object,
NULL);
- priv->fetching = TRUE;
- priv->fetch_id = g_idle_add (fetch_connections, object);
-
-
/* D-Bus properties proxy */
- priv->props_proxy = dbus_g_proxy_new_for_name (priv->bus,
- NM_DBUS_SERVICE,
- NM_DBUS_PATH_SETTINGS,
- "org.freedesktop.DBus.Properties");
+ priv->props_proxy = _nm_dbus_new_proxy_for_connection (priv->bus,
+ NM_DBUS_PATH_SETTINGS,
+ "org.freedesktop.DBus.Properties");
g_assert (priv->props_proxy);
/* Monitor properties */
- dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
DBUS_TYPE_G_MAP_OF_VARIANT,
G_TYPE_INVALID);
@@ -946,20 +1228,27 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
GHashTable *props;
- if (!dbus_g_proxy_call (priv->dbus_proxy, "NameHasOwner", error,
- G_TYPE_STRING, NM_DBUS_SERVICE,
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN, &priv->service_running,
- G_TYPE_INVALID)) {
- priv->service_running = FALSE;
- return FALSE;
- }
+ if (priv->private_bus == FALSE) {
+ if (!dbus_g_proxy_call (priv->dbus_proxy, "NameHasOwner", error,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &priv->service_running,
+ G_TYPE_INVALID)) {
+ priv->service_running = FALSE;
+ return FALSE;
+ }
- /* If NM isn't running we'll grab properties from name_owner_changed()
- * when it starts.
- */
- if (!priv->service_running)
- return TRUE;
+ /* If NM isn't running we'll grab properties from name_owner_changed()
+ * when it starts.
+ */
+ if (!priv->service_running)
+ return TRUE;
+ } else
+ priv->service_running = TRUE;
+
+ priv->listcon_call = dbus_g_proxy_begin_call (priv->proxy, "ListConnections",
+ fetch_connections_done, NM_REMOTE_SETTINGS (initable), NULL,
+ G_TYPE_INVALID);
/* Get properties */
if (!dbus_g_proxy_call (priv->props_proxy, "GetAll", error,
@@ -1019,14 +1308,23 @@ init_async_got_properties (DBusGProxy *proxy, DBusGProxyCall *call,
} else
g_simple_async_result_take_error (init_data->result, error);
- if (priv->fetching) {
- /* Still creating initial connections; wait for that to complete */
- g_signal_connect (init_data->settings, "connections-read",
- G_CALLBACK (init_read_connections), init_data);
- return;
- }
+ /* Read connections and wait for the result */
+ priv->listcon_call = dbus_g_proxy_begin_call (priv->proxy, "ListConnections",
+ fetch_connections_done, init_data->settings, NULL,
+ G_TYPE_INVALID);
+ g_signal_connect (init_data->settings, "connections-read",
+ G_CALLBACK (init_read_connections), init_data);
+}
- init_async_complete (init_data);
+static void
+init_get_properties (NMRemoteSettingsInitData *init_data)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (init_data->settings);
+
+ dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
+ init_async_got_properties, init_data, NULL,
+ G_TYPE_STRING, NM_DBUS_IFACE_SETTINGS,
+ G_TYPE_INVALID);
}
static void
@@ -1051,10 +1349,7 @@ init_async_got_manager_running (DBusGProxy *proxy, DBusGProxyCall *call,
return;
}
- dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
- init_async_got_properties, init_data, NULL,
- G_TYPE_STRING, NM_DBUS_IFACE_SETTINGS,
- G_TYPE_INVALID);
+ init_get_properties (init_data);
}
static void
@@ -1070,12 +1365,16 @@ init_async (GAsyncInitable *initable, int io_priority,
init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
user_data, init_async);
- /* Check if NM is running */
- dbus_g_proxy_begin_call (priv->dbus_proxy, "NameHasOwner",
- init_async_got_manager_running,
- init_data, NULL,
- G_TYPE_STRING, NM_DBUS_SERVICE,
- G_TYPE_INVALID);
+ if (priv->private_bus)
+ init_get_properties (init_data);
+ else {
+ /* Check if NM is running */
+ dbus_g_proxy_begin_call (priv->dbus_proxy, "NameHasOwner",
+ init_async_got_manager_running,
+ init_data, NULL,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID);
+ }
}
static gboolean
@@ -1095,11 +1394,6 @@ dispose (GObject *object)
NMRemoteSettings *self = NM_REMOTE_SETTINGS (object);
NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
- if (priv->fetch_id) {
- g_source_remove (priv->fetch_id);
- priv->fetch_id = 0;
- }
-
while (g_slist_length (priv->add_list))
add_connection_info_dispose (self, (AddConnectionInfo *) priv->add_list->data);
@@ -1133,15 +1427,15 @@ set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (object);
- DBusGConnection *connection;
switch (prop_id) {
case PROP_BUS:
/* Construct only */
- connection = (DBusGConnection *) g_value_get_boxed (value);
- if (!connection)
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
- priv->bus = dbus_g_connection_ref (connection);
+ priv->bus = g_value_dup_boxed (value);
+ if (!priv->bus) {
+ priv->bus = _nm_dbus_new_connection (NULL);
+ priv->private_bus = _nm_dbus_is_connection_private (priv->bus);
+ }
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1228,8 +1522,7 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMRemoteSettingsClass, new_connection),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
signals[CONNECTIONS_READ] =
@@ -1237,8 +1530,7 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMRemoteSettingsClass, connections_read),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ NULL, NULL, NULL,
G_TYPE_NONE, 0);
}
diff --git a/libnm-glib/nm-remote-settings.h b/libnm-glib/nm-remote-settings.h
index 20235c0d1..5ca646e66 100644
--- a/libnm-glib/nm-remote-settings.h
+++ b/libnm-glib/nm-remote-settings.h
@@ -45,6 +45,8 @@ G_BEGIN_DECLS
* was removed before it was completely initialized
* @NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE: the #NMRemoteConnection object
* is not visible or otherwise unreadable
+ * @NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE: NetworkManager is not running.
+ * (Since 0.9.10)
*
* Describes errors that may result from operations involving a #NMRemoteSettings.
*
@@ -53,6 +55,7 @@ typedef enum {
NM_REMOTE_SETTINGS_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED, /*< nick=ConnectionRemoved >*/
NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE, /*< nick=ConnectionUnavailable >*/
+ NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE, /*< nick=ServiceUnavailable >*/
} NMRemoteSettingsError;
#define NM_REMOTE_SETTINGS_ERROR nm_remote_settings_error_quark ()
@@ -76,6 +79,11 @@ typedef void (*NMRemoteSettingsAddConnectionFunc) (NMRemoteSettings *settings,
GError *error,
gpointer user_data);
+typedef void (*NMRemoteSettingsLoadConnectionsFunc) (NMRemoteSettings *settings,
+ char **failures,
+ GError *error,
+ gpointer user_data);
+
typedef void (*NMRemoteSettingsSaveHostnameFunc) (NMRemoteSettings *settings,
GError *error,
gpointer user_data);
@@ -116,6 +124,9 @@ NMRemoteSettings *nm_remote_settings_new_finish (GAsyncResult *result,
GSList *nm_remote_settings_list_connections (NMRemoteSettings *settings);
+NMRemoteConnection *nm_remote_settings_get_connection_by_id (NMRemoteSettings *settings,
+ const char *id);
+
NMRemoteConnection * nm_remote_settings_get_connection_by_path (NMRemoteSettings *settings,
const char *path);
@@ -127,6 +138,22 @@ gboolean nm_remote_settings_add_connection (NMRemoteSettings *settings,
NMRemoteSettingsAddConnectionFunc callback,
gpointer user_data);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_remote_settings_add_connection_unsaved (NMRemoteSettings *settings,
+ NMConnection *connection,
+ NMRemoteSettingsAddConnectionFunc callback,
+ gpointer user_data);
+
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_remote_settings_load_connections (NMRemoteSettings *settings,
+ char **filenames,
+ char ***failures,
+ GError **error);
+
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_remote_settings_reload_connections (NMRemoteSettings *settings,
+ GError **error);
+
gboolean nm_remote_settings_save_hostname (NMRemoteSettings *settings,
const char *hostname,
NMRemoteSettingsSaveHostnameFunc callback,
diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c
index e7dcbbb53..f58f95fe0 100644
--- a/libnm-glib/nm-secret-agent.c
+++ b/libnm-glib/nm-secret-agent.c
@@ -23,13 +23,10 @@
#include <dbus/dbus-glib-lowlevel.h>
#include "nm-glib-compat.h"
-
-#include <NetworkManager.h>
-
+#include "NetworkManager.h"
#include "nm-secret-agent.h"
#include "nm-glib-enum-types.h"
-#include "nm-glib-marshal.h"
-#include "NetworkManager.h"
+#include "nm-dbus-helpers-private.h"
static void impl_secret_agent_get_secrets (NMSecretAgent *self,
GHashTable *connection_hash,
@@ -66,8 +63,10 @@ static gboolean auto_register_cb (gpointer user_data);
typedef struct {
gboolean registered;
+ NMSecretAgentCapabilities capabilities;
DBusGConnection *bus;
+ gboolean private_bus;
DBusGProxy *dbus_proxy;
DBusGProxy *manager_proxy;
DBusGProxyCall *reg_call;
@@ -88,6 +87,7 @@ enum {
PROP_IDENTIFIER,
PROP_AUTO_REGISTER,
PROP_REGISTERED,
+ PROP_CAPABILITIES,
LAST_PROP
};
@@ -228,6 +228,12 @@ verify_sender (NMSecretAgent *self,
g_return_val_if_fail (context != NULL, FALSE);
+ /* Private bus connection is always to NetworkManager, which is always
+ * UID 0.
+ */
+ if (priv->private_bus)
+ return TRUE;
+
/* Verify the sender's UID is 0, and that the sender is the same as
* NetworkManager's bus name owner.
*/
@@ -527,6 +533,22 @@ impl_secret_agent_delete_secrets (NMSecretAgent *self,
/**************************************************************/
static void
+reg_result (NMSecretAgent *self, GError *error)
+{
+ NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+
+ if (error) {
+ /* If registration failed we shouldn't expose ourselves on the bus */
+ _internal_unregister (self);
+ } else {
+ priv->registered = TRUE;
+ g_object_notify (G_OBJECT (self), NM_SECRET_AGENT_REGISTERED);
+ }
+
+ g_signal_emit (self, signals[REGISTRATION_RESULT], 0, error);
+}
+
+static void
reg_request_cb (DBusGProxy *proxy,
DBusGProxyCall *call,
gpointer user_data)
@@ -537,16 +559,37 @@ reg_request_cb (DBusGProxy *proxy,
priv->reg_call = NULL;
- if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) {
- priv->registered = TRUE;
- g_object_notify (G_OBJECT (self), NM_SECRET_AGENT_REGISTERED);
- } else {
- /* If registration failed we shouldn't expose ourselves on the bus */
- _internal_unregister (self);
+ dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
+ reg_result (self, error);
+ g_clear_error (&error);
+}
+
+static void
+reg_with_caps_cb (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ gpointer user_data)
+{
+ NMSecretAgent *self = NM_SECRET_AGENT (user_data);
+ NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+
+ priv->reg_call = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call, NULL, G_TYPE_INVALID)) {
+ reg_result (self, NULL);
+ return;
}
- g_signal_emit (self, signals[REGISTRATION_RESULT], 0, error);
- g_clear_error (&error);
+ /* Might be an old NetworkManager that doesn't support capabilities;
+ * fall back to old Register() method instead.
+ */
+ priv->reg_call = dbus_g_proxy_begin_call_with_timeout (priv->manager_proxy,
+ "Register",
+ reg_request_cb,
+ self,
+ NULL,
+ 5000,
+ G_TYPE_STRING, priv->identifier,
+ G_TYPE_INVALID);
}
/**
@@ -569,7 +612,6 @@ nm_secret_agent_register (NMSecretAgent *self)
NMSecretAgentPrivate *priv;
NMSecretAgentClass *class;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SECRET_AGENT (self), FALSE);
priv = NM_SECRET_AGENT_GET_PRIVATE (self);
@@ -585,6 +627,9 @@ nm_secret_agent_register (NMSecretAgent *self)
g_return_val_if_fail (class->save_secrets != NULL, FALSE);
g_return_val_if_fail (class->delete_secrets != NULL, FALSE);
+ if (!priv->nm_owner && !priv->private_bus)
+ return FALSE;
+
priv->suppress_auto = FALSE;
/* Export our secret agent interface before registering with the manager */
@@ -593,14 +638,14 @@ nm_secret_agent_register (NMSecretAgent *self)
G_OBJECT (self));
priv->reg_call = dbus_g_proxy_begin_call_with_timeout (priv->manager_proxy,
- "Register",
- reg_request_cb,
+ "RegisterWithCapabilities",
+ reg_with_caps_cb,
self,
NULL,
5000,
G_TYPE_STRING, priv->identifier,
+ G_TYPE_UINT, priv->capabilities,
G_TYPE_INVALID);
-
return TRUE;
}
@@ -619,7 +664,6 @@ nm_secret_agent_unregister (NMSecretAgent *self)
{
NMSecretAgentPrivate *priv;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SECRET_AGENT (self), FALSE);
priv = NM_SECRET_AGENT_GET_PRIVATE (self);
@@ -628,6 +672,9 @@ nm_secret_agent_unregister (NMSecretAgent *self)
g_return_val_if_fail (priv->bus != NULL, FALSE);
g_return_val_if_fail (priv->manager_proxy != NULL, FALSE);
+ if (!priv->nm_owner && !priv->private_bus)
+ return FALSE;
+
dbus_g_proxy_call_no_reply (priv->manager_proxy, "Unregister", G_TYPE_INVALID);
_internal_unregister (self);
@@ -645,7 +692,6 @@ nm_secret_agent_unregister (NMSecretAgent *self)
gboolean
nm_secret_agent_get_registered (NMSecretAgent *self)
{
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SECRET_AGENT (self), FALSE);
return NM_SECRET_AGENT_GET_PRIVATE (self)->registered;
@@ -692,9 +738,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
NMSecretAgentGetSecretsFunc callback,
gpointer user_data)
{
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_SECRET_AGENT (self));
- g_return_if_fail (connection != NULL);
g_return_if_fail (NM_IS_CONNECTION (connection));
g_return_if_fail (nm_connection_get_path (connection));
g_return_if_fail (setting_name != NULL);
@@ -729,9 +773,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self,
NMSecretAgentSaveSecretsFunc callback,
gpointer user_data)
{
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_SECRET_AGENT (self));
- g_return_if_fail (connection != NULL);
g_return_if_fail (NM_IS_CONNECTION (connection));
g_return_if_fail (nm_connection_get_path (connection));
@@ -760,9 +802,7 @@ nm_secret_agent_delete_secrets (NMSecretAgent *self,
NMSecretAgentDeleteSecretsFunc callback,
gpointer user_data)
{
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_SECRET_AGENT (self));
- g_return_if_fail (connection != NULL);
g_return_if_fail (NM_IS_CONNECTION (connection));
g_return_if_fail (nm_connection_get_path (connection));
@@ -807,44 +847,46 @@ nm_secret_agent_init (NMSecretAgent *self)
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
GError *error = NULL;
- priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ priv->bus = _nm_dbus_new_connection (&error);
if (!priv->bus) {
g_warning ("Couldn't connect to system bus: %s", error->message);
g_error_free (error);
return;
}
-
- priv->dbus_proxy = dbus_g_proxy_new_for_name (priv->bus,
- DBUS_SERVICE_DBUS,
- DBUS_PATH_DBUS,
- DBUS_INTERFACE_DBUS);
- if (!priv->dbus_proxy) {
- g_warning ("Couldn't create messagebus proxy.");
- return;
+ priv->private_bus = _nm_dbus_is_connection_private (priv->bus);
+
+ if (priv->private_bus == FALSE) {
+ priv->dbus_proxy = dbus_g_proxy_new_for_name (priv->bus,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+ g_assert (priv->dbus_proxy);
+
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->dbus_proxy, "NameOwnerChanged",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->dbus_proxy,
+ "NameOwnerChanged",
+ G_CALLBACK (name_owner_changed),
+ self, NULL);
+
+ get_nm_owner (self);
}
- dbus_g_object_register_marshaller (_nm_glib_marshal_VOID__STRING_STRING_STRING,
- G_TYPE_NONE,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_add_signal (priv->dbus_proxy, "NameOwnerChanged",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->dbus_proxy,
- "NameOwnerChanged",
- G_CALLBACK (name_owner_changed),
- self, NULL);
-
- priv->manager_proxy = dbus_g_proxy_new_for_name (priv->bus,
- NM_DBUS_SERVICE,
- NM_DBUS_PATH_AGENT_MANAGER,
- NM_DBUS_INTERFACE_AGENT_MANAGER);
+ priv->manager_proxy = _nm_dbus_new_proxy_for_connection (priv->bus,
+ NM_DBUS_PATH_AGENT_MANAGER,
+ NM_DBUS_INTERFACE_AGENT_MANAGER);
if (!priv->manager_proxy) {
g_warning ("Couldn't create NM agent manager proxy.");
return;
}
- priv->auto_register_id = g_idle_add (auto_register_cb, self);
+ if (priv->nm_owner || priv->private_bus)
+ priv->auto_register_id = g_idle_add (auto_register_cb, self);
}
static void
@@ -865,6 +907,9 @@ get_property (GObject *object,
case PROP_REGISTERED:
g_value_set_boolean (value, priv->registered);
break;
+ case PROP_CAPABILITIES:
+ g_value_set_flags (value, priv->capabilities);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -892,6 +937,9 @@ set_property (GObject *object,
case PROP_AUTO_REGISTER:
priv->auto_register = g_value_get_boolean (value);
break;
+ case PROP_CAPABILITIES:
+ priv->capabilities = g_value_get_flags (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -995,6 +1043,20 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
G_PARAM_READABLE));
/**
+ * NMSecretAgent:capabilities:
+ *
+ * A bitfield of %NMSecretAgentCapabilities.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CAPABILITIES,
+ g_param_spec_flags (NM_SECRET_AGENT_CAPABILITIES,
+ "Capabilities",
+ "Capabilities",
+ NM_TYPE_SECRET_AGENT_CAPABILITIES,
+ NM_SECRET_AGENT_CAPABILITY_NONE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ /**
* NMSecretAgent::registration-result:
* @agent: the agent that received the signal
* @error: the error, if any, that occured while registering
@@ -1006,8 +1068,7 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
g_signal_new (NM_SECRET_AGENT_REGISTRATION_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
diff --git a/libnm-glib/nm-secret-agent.h b/libnm-glib/nm-secret-agent.h
index eabe98669..c70f8d076 100644
--- a/libnm-glib/nm-secret-agent.h
+++ b/libnm-glib/nm-secret-agent.h
@@ -56,6 +56,26 @@ typedef enum {
} NMSecretAgentError;
/**
+ * NMSecretAgentCapabilities:
+ * @NM_SECRET_AGENT_CAPABILITY_NONE: the agent supports no special capabilities
+ * @NM_SECRET_AGENT_CAPABILITY_VPN_HINTS: the agent supports sending hints given
+ * by the NMSecretAgentClass::get_secrets() class method to VPN plugin
+ * authentication dialogs.
+ * @NM_SECRET_AGENT_CAPABILITY_LAST: bounds checking value; should not be used.
+ *
+ * #NMSecretAgentCapabilities indicate various capabilities of the agent.
+ *
+ * Since: 0.9.10
+ */
+typedef enum /*< flags >*/ {
+ NM_SECRET_AGENT_CAPABILITY_NONE = 0x0,
+ NM_SECRET_AGENT_CAPABILITY_VPN_HINTS = 0x1,
+
+ /* boundary value */
+ NM_SECRET_AGENT_CAPABILITY_LAST = NM_SECRET_AGENT_CAPABILITY_VPN_HINTS
+} NMSecretAgentCapabilities;
+
+/**
* NMSecretAgentGetSecretsFlags:
* @NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE: no special behavior; by default no
* user interaction is allowed and requests for secrets are fulfilled from
@@ -91,6 +111,7 @@ typedef enum /*< flags >*/ {
#define NM_SECRET_AGENT_IDENTIFIER "identifier"
#define NM_SECRET_AGENT_AUTO_REGISTER "auto-register"
#define NM_SECRET_AGENT_REGISTERED "registered"
+#define NM_SECRET_AGENT_CAPABILITIES "capabilities"
#define NM_SECRET_AGENT_REGISTRATION_RESULT "registration-result"
@@ -120,7 +141,7 @@ typedef struct {
* return them, or to return an error, this function should be called with
* those secrets or the error.
*
- * To easily create the hash table to return the WiFi PSK, you could do
+ * To easily create the hash table to return the Wi-Fi PSK, you could do
* something like this:
* <example>
* <title>Creating a secrets hash</title>
diff --git a/libnm-glib/nm-types.c b/libnm-glib/nm-types.c
index 098af8d8e..f9ba6d240 100644
--- a/libnm-glib/nm-types.c
+++ b/libnm-glib/nm-types.c
@@ -363,8 +363,7 @@ _nm_ip6_address_array_demarshal (GValue *value, GSList **dest)
return FALSE;
if (*dest) {
- g_slist_foreach (*dest, (GFunc) g_free, NULL);
- g_slist_free (*dest);
+ g_slist_free_full (*dest, g_free);
*dest = NULL;
}
diff --git a/libnm-glib/nm-vpn-connection.c b/libnm-glib/nm-vpn-connection.c
index 1fe59e5ee..12814cf25 100644
--- a/libnm-glib/nm-vpn-connection.c
+++ b/libnm-glib/nm-vpn-connection.c
@@ -25,7 +25,6 @@
#include "nm-vpn-connection.h"
#include "NetworkManager.h"
#include "nm-utils.h"
-#include "nm-glib-marshal.h"
#include "nm-object-private.h"
#include "nm-active-connection.h"
@@ -47,9 +46,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_VPN_STATE "VpnState"
-#define DBUS_PROP_BANNER "Banner"
-
enum {
VPN_STATE_CHANGED,
@@ -136,6 +132,7 @@ vpn_state_changed_proxy (DBusGProxy *proxy,
if (priv->vpn_state != vpn_state) {
priv->vpn_state = vpn_state;
g_signal_emit (connection, signals[VPN_STATE_CHANGED], 0, vpn_state, reason);
+ g_object_notify (G_OBJECT (connection), NM_VPN_CONNECTION_VPN_STATE);
}
}
@@ -167,18 +164,13 @@ register_properties (NMVPNConnection *connection)
static void
constructed (GObject *object)
{
- NMVPNConnectionPrivate *priv;
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->constructed (object);
- priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_VPN_CONNECTION);
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_VPN_CONNECTION);
- dbus_g_object_register_marshaller (_nm_glib_marshal_VOID__UINT_UINT,
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
G_TYPE_UINT, G_TYPE_UINT,
G_TYPE_INVALID);
@@ -272,8 +264,7 @@ nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMVPNConnectionClass, vpn_state_changed),
- NULL, NULL,
- _nm_glib_marshal_VOID__UINT_UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
}
diff --git a/libnm-glib/nm-vpn-enum-types.c b/libnm-glib/nm-vpn-enum-types.c
index 0dc5ed23f..45418518f 100644
--- a/libnm-glib/nm-vpn-enum-types.c
+++ b/libnm-glib/nm-vpn-enum-types.c
@@ -26,6 +26,7 @@ nm_vpn_plugin_error_get_type (void)
{ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, "NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS", "BadArguments" },
{ NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED, "NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED", "LaunchFailed" },
{ NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID, "NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED, "NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED", "InteractiveNotSupported" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
diff --git a/libnm-glib/nm-vpn-plugin-ui-interface.h b/libnm-glib/nm-vpn-plugin-ui-interface.h
index 068d8f89f..2753de446 100644
--- a/libnm-glib/nm-vpn-plugin-ui-interface.h
+++ b/libnm-glib/nm-vpn-plugin-ui-interface.h
@@ -68,7 +68,7 @@ typedef enum /*< flags >*/ {
/* Short display name of the VPN plugin */
#define NM_VPN_PLUGIN_UI_INTERFACE_NAME "name"
-/* Longer description of the the VPN plugin */
+/* Longer description of the VPN plugin */
#define NM_VPN_PLUGIN_UI_INTERFACE_DESC "desc"
/* D-Bus service name of the plugin's VPN service */
@@ -86,10 +86,10 @@ typedef enum /*< flags >*/ {
* information to UI programs.
**/
typedef enum {
- /*< private >*/
+ /* private */
NM_VPN_PLUGIN_UI_INTERFACE_PROP_FIRST = 0x1000,
- /*< public >*/
+ /* public */
NM_VPN_PLUGIN_UI_INTERFACE_PROP_NAME = NM_VPN_PLUGIN_UI_INTERFACE_PROP_FIRST,
NM_VPN_PLUGIN_UI_INTERFACE_PROP_DESC,
NM_VPN_PLUGIN_UI_INTERFACE_PROP_SERVICE
@@ -170,6 +170,7 @@ char *nm_vpn_plugin_ui_interface_get_suggested_name (NMVpnPluginUiInterface *ifa
NMConnection *connection);
/* Deprecated and no longer used */
+NM_DEPRECATED_IN_0_9_10
gboolean nm_vpn_plugin_ui_interface_delete_connection (NMVpnPluginUiInterface *iface,
NMConnection *connection,
GError **error);
@@ -220,6 +221,7 @@ gboolean nm_vpn_plugin_ui_widget_interface_update_connection (NMVpnPluginUiWidge
GError **error);
/* Deprecated and no longer used */
+NM_DEPRECATED_IN_0_9_10
gboolean nm_vpn_plugin_ui_widget_interface_save_secrets (NMVpnPluginUiWidgetInterface *iface,
NMConnection *connection,
GError **error);
diff --git a/libnm-glib/nm-vpn-plugin.c b/libnm-glib/nm-vpn-plugin.c
index dd4d7b3a6..d52416969 100644
--- a/libnm-glib/nm-vpn-plugin.c
+++ b/libnm-glib/nm-vpn-plugin.c
@@ -31,13 +31,22 @@
static gboolean impl_vpn_plugin_connect (NMVPNPlugin *plugin,
GHashTable *connection,
- GError **err);
+ GError **error);
+
+static gboolean impl_vpn_plugin_connect_interactive (NMVPNPlugin *plugin,
+ GHashTable *connection,
+ GHashTable *details,
+ GError **error);
static gboolean impl_vpn_plugin_need_secrets (NMVPNPlugin *plugin,
GHashTable *connection,
char **service_name,
GError **err);
+static gboolean impl_vpn_plugin_new_secrets (NMVPNPlugin *plugin,
+ GHashTable *connection,
+ GError **err);
+
static gboolean impl_vpn_plugin_disconnect (NMVPNPlugin *plugin,
GError **err);
@@ -59,7 +68,6 @@ static gboolean impl_vpn_plugin_set_failure (NMVPNPlugin *plugin,
#include "nm-vpn-plugin-glue.h"
-#define NM_VPN_PLUGIN_CONNECT_TIMER 60
#define NM_VPN_PLUGIN_QUIT_TIMER 20
G_DEFINE_ABSTRACT_TYPE (NMVPNPlugin, nm_vpn_plugin, G_TYPE_OBJECT)
@@ -75,6 +83,7 @@ typedef struct {
guint connect_timer;
guint quit_timer;
guint fail_stop_id;
+ gboolean interactive;
gboolean got_config;
gboolean has_ip4, got_ip4;
@@ -94,6 +103,7 @@ enum {
LOGIN_BANNER,
FAILURE,
QUIT,
+ SECRETS_REQUIRED,
LAST_SIGNAL
};
@@ -276,60 +286,28 @@ fail_stop (gpointer data)
return FALSE;
}
-static gboolean
-nm_vpn_plugin_connect (NMVPNPlugin *plugin,
- NMConnection *connection,
- GError **err)
+static void
+schedule_fail_stop (NMVPNPlugin *plugin)
{
NMVPNPluginPrivate *priv = NM_VPN_PLUGIN_GET_PRIVATE (plugin);
- gboolean ret = FALSE;
- NMVPNServiceState state;
-
- g_return_val_if_fail (NM_IS_VPN_PLUGIN (plugin), FALSE);
-
- state = nm_vpn_plugin_get_state (plugin);
- switch (state) {
- case NM_VPN_SERVICE_STATE_STARTING:
- g_set_error (err,
- NM_VPN_PLUGIN_ERROR,
- NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS,
- "%s",
- "Could not process the request because the VPN connection is already being started.");
- break;
- case NM_VPN_SERVICE_STATE_STARTED:
- g_set_error (err,
- NM_VPN_PLUGIN_ERROR,
- NM_VPN_PLUGIN_ERROR_ALREADY_STARTED,
- "%s",
- "Could not process the request because a VPN connection was already active.");
- break;
- case NM_VPN_SERVICE_STATE_STOPPING:
- g_set_error (err,
- NM_VPN_PLUGIN_ERROR,
- NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS,
- "%s",
- "Could not process the request because the VPN connection is being stopped.");
- break;
- case NM_VPN_SERVICE_STATE_STOPPED:
- case NM_VPN_SERVICE_STATE_INIT:
- nm_vpn_plugin_set_state (plugin, NM_VPN_SERVICE_STATE_STARTING);
- ret = NM_VPN_PLUGIN_GET_CLASS (plugin)->connect (plugin, connection, err);
- if (!ret) {
- /* Stop the plugin from and idle handler so that the Connect
- * method return gets sent before the STOP StateChanged signal.
- */
- if (priv->fail_stop_id)
- g_source_remove (priv->fail_stop_id);
- priv->fail_stop_id = g_idle_add (fail_stop, plugin);
- }
- break;
- default:
- g_assert_not_reached ();
- break;
- }
+ if (priv->fail_stop_id)
+ g_source_remove (priv->fail_stop_id);
+ priv->fail_stop_id = g_idle_add (fail_stop, plugin);
+}
- return ret;
+static void
+_g_value_set (GValue *dst, GValue *src)
+{
+ if (src) {
+ GType type = G_VALUE_TYPE (src);
+
+ if (G_IS_VALUE (dst))
+ g_value_unset (dst);
+ g_value_init (dst, type);
+ g_value_copy (src, dst);
+ } else if (G_IS_VALUE (dst))
+ g_value_unset (dst);
}
void
@@ -356,26 +334,10 @@ nm_vpn_plugin_set_config (NMVPNPlugin *plugin,
/* Record the items that need to also be inserted into the
* ip4config, for compatibility with older daemons.
*/
- val = g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_BANNER);
- if (val) {
- g_value_init (&priv->banner, G_VALUE_TYPE (val));
- g_value_copy (val, &priv->banner);
- }
- val = g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_TUNDEV);
- if (val) {
- g_value_init (&priv->tundev, G_VALUE_TYPE (val));
- g_value_copy (val, &priv->tundev);
- }
- val = g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY);
- if (val) {
- g_value_init (&priv->gateway, G_VALUE_TYPE (val));
- g_value_copy (val, &priv->gateway);
- }
- val = g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_MTU);
- if (val) {
- g_value_init (&priv->mtu, G_VALUE_TYPE (val));
- g_value_copy (val, &priv->mtu);
- }
+ _g_value_set (&priv->banner, g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_BANNER));
+ _g_value_set (&priv->tundev, g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_TUNDEV));
+ _g_value_set (&priv->gateway, g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY));
+ _g_value_set (&priv->mtu, g_hash_table_lookup (config, NM_VPN_PLUGIN_CONFIG_MTU));
g_signal_emit (plugin, signals[CONFIG], 0, config);
}
@@ -446,31 +408,103 @@ nm_vpn_plugin_set_ip6_config (NMVPNPlugin *plugin,
nm_vpn_plugin_set_state (plugin, NM_VPN_SERVICE_STATE_STARTED);
}
+static void
+connect_timer_removed (gpointer data)
+{
+ NM_VPN_PLUGIN_GET_PRIVATE (data)->connect_timer = 0;
+}
+
+static void
+connect_timer_start (NMVPNPlugin *plugin)
+{
+ NMVPNPluginPrivate *priv = NM_VPN_PLUGIN_GET_PRIVATE (plugin);
+
+ priv->connect_timer = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
+ 60,
+ connect_timer_expired,
+ plugin,
+ connect_timer_removed);
+}
static gboolean
-impl_vpn_plugin_connect (NMVPNPlugin *plugin,
- GHashTable *properties,
- GError **error)
+_connect_generic (NMVPNPlugin *plugin,
+ GHashTable *properties,
+ GHashTable *details,
+ GError **error)
{
+ NMVPNPluginPrivate *priv = NM_VPN_PLUGIN_GET_PRIVATE (plugin);
+ NMVPNPluginClass *vpn_class = NM_VPN_PLUGIN_GET_CLASS (plugin);
NMConnection *connection;
gboolean success = FALSE;
+ GError *local = NULL;
+
+ if (priv->state != NM_VPN_SERVICE_STATE_STOPPED &&
+ priv->state != NM_VPN_SERVICE_STATE_INIT) {
+ g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_WRONG_STATE,
+ "Could not start connection: wrong plugin state %d",
+ priv->state);
+ return FALSE;
+ }
- connection = nm_connection_new_from_hash (properties, error);
+ connection = nm_connection_new_from_hash (properties, &local);
if (!connection) {
- g_warning ("%s: Invalid connection: '%s' / '%s' invalid: %d",
- __func__,
- g_type_name (nm_connection_lookup_setting_type_by_quark ((*error)->domain)),
- (*error)->message,
- (*error)->code);
+ g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "Invalid connection: (%d) %s",
+ local->code, local->message);
+ g_clear_error (&local);
+ return FALSE;
+ }
+
+
+ priv->interactive = FALSE;
+ if (details && !vpn_class->connect_interactive) {
+ g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED,
+ "Plugin does not implement ConnectInteractive()");
+ return FALSE;
+ }
+
+ nm_vpn_plugin_set_state (plugin, NM_VPN_SERVICE_STATE_STARTING);
+
+ if (details) {
+ priv->interactive = TRUE;
+ success = vpn_class->connect_interactive (plugin, connection, details, error);
+ } else
+ success = vpn_class->connect (plugin, connection, error);
+
+ if (success) {
+ /* Add a timer to make sure we do not wait indefinitely for the successful connect. */
+ connect_timer_start (plugin);
} else {
- success = nm_vpn_plugin_connect (plugin, connection, error);
- g_object_unref (connection);
+ /* Stop the plugin from an idle handler so that the Connect
+ * method return gets sent before the STOP StateChanged signal.
+ */
+ schedule_fail_stop (plugin);
}
+ g_object_unref (connection);
return success;
}
static gboolean
+impl_vpn_plugin_connect (NMVPNPlugin *plugin,
+ GHashTable *connection,
+ GError **error)
+{
+ return _connect_generic (plugin, connection, NULL, error);
+}
+
+static gboolean
+impl_vpn_plugin_connect_interactive (NMVPNPlugin *plugin,
+ GHashTable *connection,
+ GHashTable *details,
+ GError **error)
+{
+ return _connect_generic (plugin, connection, details, error);
+}
+
+/***************************************************************/
+
+static gboolean
impl_vpn_plugin_need_secrets (NMVPNPlugin *plugin,
GHashTable *properties,
char **setting_name,
@@ -525,6 +559,94 @@ out:
}
static gboolean
+impl_vpn_plugin_new_secrets (NMVPNPlugin *plugin,
+ GHashTable *properties,
+ GError **error)
+{
+ NMVPNPluginPrivate *priv = NM_VPN_PLUGIN_GET_PRIVATE (plugin);
+ NMConnection *connection;
+ GError *local = NULL;
+ gboolean success;
+
+ if (priv->state != NM_VPN_SERVICE_STATE_STARTING) {
+ g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_WRONG_STATE,
+ "Could not accept new secrets: wrong plugin state %d",
+ priv->state);
+ return FALSE;
+ }
+
+ connection = nm_connection_new_from_hash (properties, &local);
+ if (!connection) {
+ g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "Invalid connection: (%d) %s",
+ local->code, local->message);
+ g_clear_error (&local);
+ return FALSE;
+ }
+
+ if (!NM_VPN_PLUGIN_GET_CLASS (plugin)->new_secrets) {
+ g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED,
+ "Could not accept new secrets: plugin cannot process interactive secrets");
+ g_object_unref (connection);
+ return FALSE;
+ }
+
+ success = NM_VPN_PLUGIN_GET_CLASS (plugin)->new_secrets (plugin, connection, error);
+ if (success) {
+ /* Add a timer to make sure we do not wait indefinitely for the successful connect. */
+ connect_timer_start (plugin);
+ } else {
+ /* Stop the plugin from and idle handler so that the NewSecrets
+ * method return gets sent before the STOP StateChanged signal.
+ */
+ schedule_fail_stop (plugin);
+ }
+
+ g_object_unref (connection);
+ return success;
+}
+
+/**
+ * nm_vpn_plugin_secrets_required:
+ * @plugin: the #NMVPNPlugin
+ * @message: an information message about why secrets are required, if any
+ * @hints: VPN specific secret names for required new secrets
+ *
+ * Called by VPN plugin implementations to signal to NetworkManager that secrets
+ * are required during the connection process. This signal may be used to
+ * request new secrets when the secrets originally provided by NetworkManager
+ * are insufficient, or the VPN process indicates that it needs additional
+ * information to complete the request.
+ *
+ * Since: 0.9.10
+ */
+void
+nm_vpn_plugin_secrets_required (NMVPNPlugin *plugin,
+ const char *message,
+ const char **hints)
+{
+ NMVPNPluginPrivate *priv = NM_VPN_PLUGIN_GET_PRIVATE (plugin);
+
+ /* Plugin must be able to accept the new secrets if it calls this method */
+ g_return_if_fail (NM_VPN_PLUGIN_GET_CLASS (plugin)->new_secrets);
+
+ /* Plugin cannot call this method if NetworkManager didn't originally call
+ * ConnectInteractive().
+ */
+ g_return_if_fail (priv->interactive == TRUE);
+
+ /* Cancel the connect timer since secrets might take a while. It'll
+ * get restarted when the secrets come back via NewSecrets().
+ */
+ if (priv->connect_timer)
+ g_source_remove (priv->connect_timer);
+
+ g_signal_emit (plugin, signals[SECRETS_REQUIRED], 0, message, hints);
+}
+
+/***************************************************************/
+
+static gboolean
impl_vpn_plugin_disconnect (NMVPNPlugin *plugin,
GError **err)
{
@@ -767,12 +889,6 @@ finalize (GObject *object)
}
static void
-connect_timer_removed (gpointer data)
-{
- NM_VPN_PLUGIN_GET_PRIVATE (data)->connect_timer = 0;
-}
-
-static void
quit_timer_removed (gpointer data)
{
NM_VPN_PLUGIN_GET_PRIVATE (data)->quit_timer = 0;
@@ -793,13 +909,6 @@ state_changed (NMVPNPlugin *plugin, NMVPNServiceState state)
g_source_remove (priv->fail_stop_id);
priv->fail_stop_id = 0;
}
-
- /* Add a timer to make sure we do not wait indefinitely for the successful connect. */
- priv->connect_timer = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
- NM_VPN_PLUGIN_CONNECT_TIMER,
- connect_timer_expired,
- plugin,
- connect_timer_removed);
break;
case NM_VPN_SERVICE_STATE_STOPPED:
priv->quit_timer = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
@@ -873,6 +982,14 @@ nm_vpn_plugin_class_init (NMVPNPluginClass *plugin_class)
G_TYPE_NONE, 1,
G_TYPE_UINT);
+ signals[SECRETS_REQUIRED] =
+ g_signal_new ("secrets-required",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRV);
+
signals[CONFIG] =
g_signal_new ("config",
G_OBJECT_CLASS_TYPE (object_class),
@@ -934,7 +1051,7 @@ nm_vpn_plugin_class_init (NMVPNPluginClass *plugin_class)
G_TYPE_NONE);
dbus_g_error_domain_register (NM_VPN_PLUGIN_ERROR,
- NULL,
+ NM_DBUS_VPN_ERROR_PREFIX,
NM_TYPE_VPN_PLUGIN_ERROR);
setup_unix_signal_handler ();
diff --git a/libnm-glib/nm-vpn-plugin.h b/libnm-glib/nm-vpn-plugin.h
index dee726f7a..4f020f31f 100644
--- a/libnm-glib/nm-vpn-plugin.h
+++ b/libnm-glib/nm-vpn-plugin.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
#ifndef NM_VPN_PLUGIN_H
@@ -63,19 +63,23 @@ G_BEGIN_DECLS
* @NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID: the operation could not be performed
* because the connection was invalid. Usually means that the connection's
* VPN setting was missing some required data item or secret.
+ * @NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED: the operation could not be
+ * performed as the plugin does not support interactive operations, such as
+ * ConnectInteractive() or NewSecrets()
*
* Returned by the VPN service plugin to indicate errors.
**/
typedef enum {
- NM_VPN_PLUGIN_ERROR_GENERAL, /*< nick=General >*/
- NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS, /*< nick=StartingInProgress >*/
- NM_VPN_PLUGIN_ERROR_ALREADY_STARTED, /*< nick=AlreadyStarted >*/
- NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS, /*< nick=StoppingInProgress >*/
- NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED, /*< nick=AlreadyStopped >*/
- NM_VPN_PLUGIN_ERROR_WRONG_STATE, /*< nick=WrongState >*/
- NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, /*< nick=BadArguments >*/
- NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED, /*< nick=LaunchFailed >*/
- NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
+ NM_VPN_PLUGIN_ERROR_GENERAL, /*< nick=General >*/
+ NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS, /*< nick=StartingInProgress >*/
+ NM_VPN_PLUGIN_ERROR_ALREADY_STARTED, /*< nick=AlreadyStarted >*/
+ NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS, /*< nick=StoppingInProgress >*/
+ NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED, /*< nick=AlreadyStopped >*/
+ NM_VPN_PLUGIN_ERROR_WRONG_STATE, /*< nick=WrongState >*/
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, /*< nick=BadArguments >*/
+ NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED, /*< nick=LaunchFailed >*/
+ NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
+ NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED /*< nick=InteractiveNotSupported >*/
} NMVPNPluginError;
#define NM_VPN_PLUGIN_ERROR (nm_vpn_plugin_error_quark ())
@@ -121,11 +125,19 @@ typedef struct {
void (*ip6_config) (NMVPNPlugin *plugin,
GHashTable *config);
+ /* more methods */
+ gboolean (*new_secrets) (NMVPNPlugin *plugin,
+ NMConnection *connection,
+ GError **error);
+
+ gboolean (*connect_interactive) (NMVPNPlugin *plugin,
+ NMConnection *connection,
+ GHashTable *details,
+ GError **error);
+
/* Padding for future expansion */
void (*_reserved1) (void);
void (*_reserved2) (void);
- void (*_reserved3) (void);
- void (*_reserved4) (void);
} NMVPNPluginClass;
GType nm_vpn_plugin_get_type (void);
@@ -137,6 +149,11 @@ NMVPNServiceState nm_vpn_plugin_get_state (NMVPNPlugin *plugin);
void nm_vpn_plugin_set_state (NMVPNPlugin *plugin,
NMVPNServiceState state);
+NM_AVAILABLE_IN_0_9_10
+void nm_vpn_plugin_secrets_required (NMVPNPlugin *plugin,
+ const char *message,
+ const char **hints);
+
void nm_vpn_plugin_set_login_banner (NMVPNPlugin *plugin,
const char *banner);
diff --git a/libnm-glib/nm-wimax-nsp.c b/libnm-glib/nm-wimax-nsp.c
index baa4b3e16..f747aff3e 100644
--- a/libnm-glib/nm-wimax-nsp.c
+++ b/libnm-glib/nm-wimax-nsp.c
@@ -55,10 +55,6 @@ enum {
LAST_PROP
};
-#define DBUS_PROP_NAME "Name"
-#define DBUS_PROP_SIGNAL_QUALITY "SignalQuality"
-#define DBUS_PROP_NETWORK_TYPE "NetworkType"
-
/**
* nm_wimax_nsp_new:
* @connection: the #DBusGConnection
@@ -278,17 +274,11 @@ register_properties (NMWimaxNsp *nsp)
static void
constructed (GObject *object)
{
- NMWimaxNspPrivate *priv;
+ NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->constructed (object);
- priv = NM_WIMAX_NSP_GET_PRIVATE (object);
-
- priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
- NM_DBUS_SERVICE,
- nm_object_get_path (NM_OBJECT (object)),
- NM_DBUS_INTERFACE_WIMAX_NSP);
-
+ priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_WIMAX_NSP);
register_properties (NM_WIMAX_NSP (object));
}
diff --git a/libnm-glib/tests/Makefile.am b/libnm-glib/tests/Makefile.am
index 079944813..38f449ac1 100644
--- a/libnm-glib/tests/Makefile.am
+++ b/libnm-glib/tests/Makefile.am
@@ -5,20 +5,29 @@ AM_CPPFLAGS = \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
- -I$(top_srcdir)/libnm-glib
+ -I$(top_srcdir)/libnm-glib \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+noinst_PROGRAMS = test-nm-client test-remote-settings-client
+
+####### NMClient and non-settings tests #######
-noinst_PROGRAMS = test-remote-settings-client
+test_nm_client_SOURCES = \
+ test-nm-client.c
+
+test_nm_client_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/libnm-glib/libnm-glib-test.la \
+ $(GLIB_LIBS) \
+ $(DBUS_LIBS)
####### remote settings client test #######
test_remote_settings_client_SOURCES = \
test-remote-settings-client.c
-test_remote_settings_client_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(AM_CPPFLAGS)
-
test_remote_settings_client_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib-test.la \
@@ -27,11 +36,18 @@ test_remote_settings_client_LDADD = \
###########################################
+TEST_NM_BIN = test-fake-nm.py
TEST_RSS_BIN = test-remote-settings-service.py
-EXTRA_DIST = $(TEST_RSS_BIN)
+EXTRA_DIST = $(TEST_RSS_BIN) $(TEST_NM_BIN)
-check-local: test-remote-settings-client
- $(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN)
+check-local: test-nm-client test-remote-settings-client
+ if test -z "$$DBUS_SESSION_BUS_ADDRESS" ; then \
+ dbus-launch --exit-with-session $(abs_builddir)/test-nm-client $(abs_srcdir) $(TEST_NM_BIN); \
+ dbus-launch --exit-with-session $(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN); \
+ else \
+ $(abs_builddir)/test-nm-client $(abs_srcdir) $(TEST_NM_BIN); \
+ $(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN); \
+ fi;
endif
diff --git a/libnm-glib/tests/Makefile.in b/libnm-glib/tests/Makefile.in
index e9ea17b10..28acdea03 100644
--- a/libnm-glib/tests/Makefile.in
+++ b/libnm-glib/tests/Makefile.in
@@ -78,13 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = \
+@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-nm-client$(EXEEXT) \
@ENABLE_TESTS_TRUE@ test-remote-settings-client$(EXEEXT)
subdir = libnm-glib/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -103,13 +104,12 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_remote_settings_client_SOURCES_DIST = \
- test-remote-settings-client.c
-@ENABLE_TESTS_TRUE@am_test_remote_settings_client_OBJECTS = test_remote_settings_client-test-remote-settings-client.$(OBJEXT)
-test_remote_settings_client_OBJECTS = \
- $(am_test_remote_settings_client_OBJECTS)
+am__test_nm_client_SOURCES_DIST = test-nm-client.c
+@ENABLE_TESTS_TRUE@am_test_nm_client_OBJECTS = \
+@ENABLE_TESTS_TRUE@ test-nm-client.$(OBJEXT)
+test_nm_client_OBJECTS = $(am_test_nm_client_OBJECTS)
am__DEPENDENCIES_1 =
-@ENABLE_TESTS_TRUE@test_remote_settings_client_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@test_nm_client_DEPENDENCIES = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib-test.la \
@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -117,6 +117,16 @@ AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+am__test_remote_settings_client_SOURCES_DIST = \
+ test-remote-settings-client.c
+@ENABLE_TESTS_TRUE@am_test_remote_settings_client_OBJECTS = \
+@ENABLE_TESTS_TRUE@ test-remote-settings-client.$(OBJEXT)
+test_remote_settings_client_OBJECTS = \
+ $(am_test_remote_settings_client_OBJECTS)
+@ENABLE_TESTS_TRUE@test_remote_settings_client_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib-test.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -151,8 +161,10 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(test_remote_settings_client_SOURCES)
-DIST_SOURCES = $(am__test_remote_settings_client_SOURCES_DIST)
+SOURCES = $(test_nm_client_SOURCES) \
+ $(test_remote_settings_client_SOURCES)
+DIST_SOURCES = $(am__test_nm_client_SOURCES_DIST) \
+ $(am__test_remote_settings_client_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -203,12 +215,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -233,7 +248,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -278,12 +292,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -300,6 +318,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -327,11 +347,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -346,6 +371,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -408,6 +434,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -418,23 +445,33 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-glib
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-glib \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS)
+
+
+####### NMClient and non-settings tests #######
+@ENABLE_TESTS_TRUE@test_nm_client_SOURCES = \
+@ENABLE_TESTS_TRUE@ test-nm-client.c
+
+@ENABLE_TESTS_TRUE@test_nm_client_LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib-test.la \
+@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
+@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
####### remote settings client test #######
@ENABLE_TESTS_TRUE@test_remote_settings_client_SOURCES = \
@ENABLE_TESTS_TRUE@ test-remote-settings-client.c
-@ENABLE_TESTS_TRUE@test_remote_settings_client_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(AM_CPPFLAGS)
-
@ENABLE_TESTS_TRUE@test_remote_settings_client_LDADD = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib-test.la \
@@ -443,8 +480,9 @@ with_resolvconf = @with_resolvconf@
###########################################
+@ENABLE_TESTS_TRUE@TEST_NM_BIN = test-fake-nm.py
@ENABLE_TESTS_TRUE@TEST_RSS_BIN = test-remote-settings-service.py
-@ENABLE_TESTS_TRUE@EXTRA_DIST = $(TEST_RSS_BIN)
+@ENABLE_TESTS_TRUE@EXTRA_DIST = $(TEST_RSS_BIN) $(TEST_NM_BIN)
all: all-am
.SUFFIXES:
@@ -489,6 +527,10 @@ clean-noinstPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
+test-nm-client$(EXEEXT): $(test_nm_client_OBJECTS) $(test_nm_client_DEPENDENCIES) $(EXTRA_test_nm_client_DEPENDENCIES)
+ @rm -f test-nm-client$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_nm_client_OBJECTS) $(test_nm_client_LDADD) $(LIBS)
+
test-remote-settings-client$(EXEEXT): $(test_remote_settings_client_OBJECTS) $(test_remote_settings_client_DEPENDENCIES) $(EXTRA_test_remote_settings_client_DEPENDENCIES)
@rm -f test-remote-settings-client$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_remote_settings_client_OBJECTS) $(test_remote_settings_client_LDADD) $(LIBS)
@@ -499,7 +541,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nm-client.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-remote-settings-client.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -522,20 +565,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-test_remote_settings_client-test-remote-settings-client.o: test-remote-settings-client.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_remote_settings_client-test-remote-settings-client.o -MD -MP -MF $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo -c -o test_remote_settings_client-test-remote-settings-client.o `test -f 'test-remote-settings-client.c' || echo '$(srcdir)/'`test-remote-settings-client.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-remote-settings-client.c' object='test_remote_settings_client-test-remote-settings-client.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_remote_settings_client-test-remote-settings-client.o `test -f 'test-remote-settings-client.c' || echo '$(srcdir)/'`test-remote-settings-client.c
-
-test_remote_settings_client-test-remote-settings-client.obj: test-remote-settings-client.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_remote_settings_client-test-remote-settings-client.obj -MD -MP -MF $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo -c -o test_remote_settings_client-test-remote-settings-client.obj `if test -f 'test-remote-settings-client.c'; then $(CYGPATH_W) 'test-remote-settings-client.c'; else $(CYGPATH_W) '$(srcdir)/test-remote-settings-client.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-remote-settings-client.c' object='test_remote_settings_client-test-remote-settings-client.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_remote_settings_client-test-remote-settings-client.obj `if test -f 'test-remote-settings-client.c'; then $(CYGPATH_W) 'test-remote-settings-client.c'; else $(CYGPATH_W) '$(srcdir)/test-remote-settings-client.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
@@ -748,8 +777,14 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-@ENABLE_TESTS_TRUE@check-local: test-remote-settings-client
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN)
+@ENABLE_TESTS_TRUE@check-local: test-nm-client test-remote-settings-client
+@ENABLE_TESTS_TRUE@ if test -z "$$DBUS_SESSION_BUS_ADDRESS" ; then \
+@ENABLE_TESTS_TRUE@ dbus-launch --exit-with-session $(abs_builddir)/test-nm-client $(abs_srcdir) $(TEST_NM_BIN); \
+@ENABLE_TESTS_TRUE@ dbus-launch --exit-with-session $(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN); \
+@ENABLE_TESTS_TRUE@ else \
+@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-nm-client $(abs_srcdir) $(TEST_NM_BIN); \
+@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN); \
+@ENABLE_TESTS_TRUE@ fi;
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libnm-glib/tests/test-fake-nm.py b/libnm-glib/tests/test-fake-nm.py
new file mode 100755
index 000000000..46ca3ff0e
--- /dev/null
+++ b/libnm-glib/tests/test-fake-nm.py
@@ -0,0 +1,776 @@
+#!/usr/bin/env python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+from __future__ import print_function
+
+from gi.repository import GLib, GObject
+import sys
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+import random
+
+mainloop = GObject.MainLoop()
+quit_id = 0
+
+# NM State
+NM_STATE_UNKNOWN = 0
+NM_STATE_ASLEEP = 10
+NM_STATE_DISCONNECTED = 20
+NM_STATE_DISCONNECTING = 30
+NM_STATE_CONNECTING = 40
+NM_STATE_CONNECTED_LOCAL = 50
+NM_STATE_CONNECTED_SITE = 60
+NM_STATE_CONNECTED_GLOBAL = 70
+
+# Device state
+NM_DEVICE_STATE_UNKNOWN = 0
+NM_DEVICE_STATE_UNMANAGED = 10
+NM_DEVICE_STATE_UNAVAILABLE = 20
+NM_DEVICE_STATE_DISCONNECTED = 30
+NM_DEVICE_STATE_PREPARE = 40
+NM_DEVICE_STATE_CONFIG = 50
+NM_DEVICE_STATE_NEED_AUTH = 60
+NM_DEVICE_STATE_IP_CONFIG = 70
+NM_DEVICE_STATE_IP_CHECK = 80
+NM_DEVICE_STATE_SECONDARIES = 90
+NM_DEVICE_STATE_ACTIVATED = 100
+NM_DEVICE_STATE_DEACTIVATING = 110
+NM_DEVICE_STATE_FAILED = 120
+
+NM_DEVICE_TYPE_UNKNOWN = 0
+NM_DEVICE_TYPE_ETHERNET = 1
+NM_DEVICE_TYPE_WIFI = 2
+NM_DEVICE_TYPE_UNUSED1 = 3
+NM_DEVICE_TYPE_UNUSED2 = 4
+NM_DEVICE_TYPE_BT = 5
+NM_DEVICE_TYPE_OLPC_MESH = 6
+NM_DEVICE_TYPE_WIMAX = 7
+NM_DEVICE_TYPE_MODEM = 8
+NM_DEVICE_TYPE_INFINIBAND = 9
+NM_DEVICE_TYPE_BOND = 10
+NM_DEVICE_TYPE_VLAN = 11
+NM_DEVICE_TYPE_ADSL = 12
+NM_DEVICE_TYPE_BRIDGE = 13
+NM_DEVICE_TYPE_GENERIC = 14
+NM_DEVICE_TYPE_TEAM = 15
+
+#########################################################
+IFACE_DBUS = 'org.freedesktop.DBus'
+
+class UnknownInterfaceException(dbus.DBusException):
+ _dbus_error_name = IFACE_DBUS + '.UnknownInterface'
+
+class UnknownPropertyException(dbus.DBusException):
+ _dbus_error_name = IFACE_DBUS + '.UnknownProperty'
+
+def to_path_array(src):
+ array = dbus.Array([], signature=dbus.Signature('o'))
+ for o in src:
+ array.append(o.path)
+ return array
+
+def to_path(src):
+ if src:
+ return dbus.ObjectPath(src.path)
+ return dbus.ObjectPath("/")
+
+class ExportedObj(dbus.service.Object):
+ def __init__(self, bus, object_path):
+ dbus.service.Object.__init__(self, bus, object_path)
+ self._bus = bus
+ self.path = object_path
+ self.__dbus_ifaces = {}
+
+ def add_dbus_interface(self, dbus_iface, get_props_func):
+ self.__dbus_ifaces[dbus_iface] = get_props_func
+
+ def _get_dbus_properties(self, iface):
+ return self.__dbus_ifaces[iface]()
+
+ @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}')
+ def GetAll(self, iface):
+ if iface not in self.__dbus_ifaces.keys():
+ raise UnknownInterfaceException()
+ return self._get_dbus_properties(iface)
+
+ @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v')
+ def Get(self, iface, name):
+ if iface not in self.__dbus_ifaces.keys():
+ raise UnknownInterfaceException()
+ props = self._get_dbus_properties(iface)
+ if not name in props.keys():
+ raise UnknownPropertyException()
+ return props[name]
+
+###################################################################
+IFACE_DEVICE = 'org.freedesktop.NetworkManager.Device'
+
+PD_UDI = "Udi"
+PD_IFACE = "Interface"
+PD_DRIVER = "Driver"
+PD_STATE = "State"
+PD_ACTIVE_CONNECTION = "ActiveConnection"
+PD_IP4_CONFIG = "Ip4Config"
+PD_IP6_CONFIG = "Ip6Config"
+PD_DHCP4_CONFIG = "Dhcp4Config"
+PD_DHCP6_CONFIG = "Dhcp6Config"
+PD_MANAGED = "Managed"
+PD_AUTOCONNECT = "Autoconnect"
+PD_DEVICE_TYPE = "DeviceType"
+PD_AVAILABLE_CONNECTIONS = "AvailableConnections"
+
+class Device(ExportedObj):
+ counter = 1
+
+ def __init__(self, bus, iface, devtype):
+ object_path = "/org/freedesktop/NetworkManager/Devices/%d" % Device.counter
+ Device.counter = Device.counter + 1
+ ExportedObj.__init__(self, bus, object_path)
+ self.add_dbus_interface(IFACE_DEVICE, self.__get_props)
+
+ self.iface = iface
+ self.udi = "/sys/devices/virtual/%s" % iface
+ self.devtype = devtype
+ self.active_connection = None
+ self.state = NM_DEVICE_STATE_UNAVAILABLE
+ self.ip4_config = None
+ self.ip6_config = None
+ self.dhcp4_config = None
+ self.dhcp6_config = None
+ self.available_connections = []
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PD_UDI] = self.udi
+ props[PD_IFACE] = self.iface
+ props[PD_DRIVER] = "virtual"
+ props[PD_STATE] = dbus.UInt32(self.state)
+ props[PD_ACTIVE_CONNECTION] = to_path(self.active_connection)
+ props[PD_IP4_CONFIG] = to_path(self.ip4_config)
+ props[PD_IP6_CONFIG] = to_path(self.ip6_config)
+ props[PD_DHCP4_CONFIG] = to_path(self.dhcp4_config)
+ props[PD_DHCP6_CONFIG] = to_path(self.dhcp6_config)
+ props[PD_MANAGED] = True
+ props[PD_AUTOCONNECT] = True
+ props[PD_DEVICE_TYPE] = dbus.UInt32(self.devtype)
+ props[PD_AVAILABLE_CONNECTIONS] = to_path_array(self.available_connections)
+ return props
+
+ # methods
+ @dbus.service.method(dbus_interface=IFACE_DEVICE, in_signature='', out_signature='')
+ def Disconnect(self):
+ pass
+
+ def __notify(self, propname):
+ props = self._get_dbus_properties(IFACE_DEVICE)
+ changed = { propname: props[propname] }
+ Device.PropertiesChanged(self, changed)
+
+ @dbus.service.signal(IFACE_DEVICE, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+
+###################################################################
+
+def random_mac():
+ return '%02X:%02X:%02X:%02X:%02X:%02X' % (
+ random.randint(0, 255), random.randint(0, 255), random.randint(0, 255),
+ random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
+ )
+
+###################################################################
+IFACE_WIRED = 'org.freedesktop.NetworkManager.Device.Wired'
+
+PE_HW_ADDRESS = "HwAddress"
+PE_PERM_HW_ADDRESS = "PermHwAddress"
+PE_SPEED = "Speed"
+PE_CARRIER = "Carrier"
+
+class WiredDevice(Device):
+ def __init__(self, bus, iface):
+ Device.__init__(self, bus, iface, NM_DEVICE_TYPE_ETHERNET)
+ self.add_dbus_interface(IFACE_WIRED, self.__get_props)
+
+ self.mac = random_mac()
+ self.carrier = False
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PE_HW_ADDRESS] = self.mac
+ props[PE_PERM_HW_ADDRESS] = self.mac
+ props[PE_SPEED] = dbus.UInt32(100)
+ props[PE_CARRIER] = self.carrier
+ return props
+
+ def __notify(self, propname):
+ props = self._get_dbus_properties(IFACE_WIRED)
+ changed = { propname: props[propname] }
+ WiredDevice.PropertiesChanged(self, changed)
+
+ @dbus.service.signal(IFACE_WIRED, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+###################################################################
+IFACE_WIFI_AP = 'org.freedesktop.NetworkManager.AccessPoint'
+
+PP_FLAGS = "Flags"
+PP_WPA_FLAGS = "WpaFlags"
+PP_RSN_FLAGS = "RsnFlags"
+PP_SSID = "Ssid"
+PP_FREQUENCY = "Frequency"
+PP_HW_ADDRESS = "HwAddress"
+PP_MODE = "Mode"
+PP_MAX_BITRATE = "MaxBitrate"
+PP_STRENGTH = "Strength"
+
+class WifiAp(ExportedObj):
+ counter = 0
+
+ def __init__(self, bus, ssid, mac, flags, wpaf, rsnf, freq):
+ path = "/org/freedesktop/NetworkManager/AccessPoint/%d" % WifiAp.counter
+ WifiAp.counter = WifiAp.counter + 1
+ ExportedObj.__init__(self, bus, path)
+ self.add_dbus_interface(IFACE_WIFI_AP, self.__get_props)
+
+ self.ssid = ssid
+ if mac:
+ self.bssid = mac
+ else:
+ self.bssid = random_mac()
+ self.flags = flags
+ self.wpaf = wpaf
+ self.rsnf = rsnf
+ self.freq = freq
+ self.strength = random.randint(0, 100)
+ self.strength_id = GLib.timeout_add_seconds(10, self.strength_cb, None)
+
+ def __del__(self):
+ if self.strength_id > 0:
+ GLib.source_remove(self.strength_id)
+ self.strength_id = 0
+
+ def strength_cb(self, ignored):
+ self.strength = random.randint(0, 100)
+ self.__notify(PP_STRENGTH)
+ return True
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PP_FLAGS] = dbus.UInt32(self.flags)
+ props[PP_WPA_FLAGS] = dbus.UInt32(self.wpaf)
+ props[PP_RSN_FLAGS] = dbus.UInt32(self.rsnf)
+ props[PP_SSID] = dbus.ByteArray(self.ssid)
+ props[PP_FREQUENCY] = dbus.UInt32(self.freq)
+ props[PP_HW_ADDRESS] = self.bssid
+ props[PP_MODE] = dbus.UInt32(2) # NM_802_11_MODE_INFRA
+ props[PP_MAX_BITRATE] = dbus.UInt32(54000)
+ props[PP_STRENGTH] = dbus.Byte(self.strength)
+ return props
+
+ def __notify(self, propname):
+ props = self._get_dbus_properties(IFACE_WIFI_AP)
+ changed = { propname: props[propname] }
+ WifiAp.PropertiesChanged(self, changed)
+
+ @dbus.service.signal(IFACE_WIFI_AP, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+###################################################################
+IFACE_WIFI = 'org.freedesktop.NetworkManager.Device.Wireless'
+
+class ApNotFoundException(dbus.DBusException):
+ _dbus_error_name = IFACE_WIFI + '.AccessPointNotFound'
+
+PW_HW_ADDRESS = "HwAddress"
+PW_PERM_HW_ADDRESS = "PermHwAddress"
+PW_MODE = "Mode"
+PW_BITRATE = "Bitrate"
+PW_ACCESS_POINTS = "AccessPoints"
+PW_ACTIVE_ACCESS_POINT = "ActiveAccessPoint"
+PW_WIRELESS_CAPABILITIES = "WirelessCapabilities"
+
+class WifiDevice(Device):
+ def __init__(self, bus, iface):
+ Device.__init__(self, bus, iface, NM_DEVICE_TYPE_WIFI)
+ self.add_dbus_interface(IFACE_WIFI, self.__get_props)
+
+ self.mac = random_mac()
+ self.aps = []
+ self.active_ap = None
+
+ # methods
+ @dbus.service.method(dbus_interface=IFACE_WIFI, in_signature='', out_signature='ao')
+ def GetAccessPoints(self):
+ # only include non-hidden APs
+ array = []
+ for a in self.aps:
+ if a.ssid():
+ array.append(a)
+ return to_path_array(array)
+
+ @dbus.service.method(dbus_interface=IFACE_WIFI, in_signature='', out_signature='ao')
+ def GetAllAccessPoints(self):
+ # include all APs including hidden ones
+ return to_path_array(self.aps)
+
+ @dbus.service.method(dbus_interface=IFACE_WIFI, in_signature='a{sv}', out_signature='')
+ def RequestScan(self, props):
+ pass
+
+ @dbus.service.signal(IFACE_WIFI, signature='o')
+ def AccessPointAdded(self, ap_path):
+ pass
+
+ def add_ap(self, ap):
+ self.aps.append(ap)
+ self.__notify(PW_ACCESS_POINTS)
+ self.AccessPointAdded(to_path(ap))
+
+ @dbus.service.signal(IFACE_WIFI, signature='o')
+ def AccessPointRemoved(self, ap_path):
+ pass
+
+ def remove_ap(self, ap):
+ self.aps.remove(ap)
+ self.__notify(PW_ACCESS_POINTS)
+ self.AccessPointRemoved(to_path(ap))
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PW_HW_ADDRESS] = self.mac
+ props[PW_PERM_HW_ADDRESS] = self.mac
+ props[PW_MODE] = dbus.UInt32(3) # NM_802_11_MODE_INFRA
+ props[PW_BITRATE] = dbus.UInt32(21000)
+ props[PW_WIRELESS_CAPABILITIES] = dbus.UInt32(0xFF)
+ props[PW_ACCESS_POINTS] = to_path_array(self.aps)
+ props[PW_ACTIVE_ACCESS_POINT] = to_path(self.active_ap)
+ return props
+
+ def __notify(self, propname):
+ props = self._get_dbus_properties(IFACE_WIFI)
+ changed = { propname: props[propname] }
+ WifiDevice.PropertiesChanged(self, changed)
+
+ @dbus.service.signal(IFACE_WIFI, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+ # test functions
+ def add_test_ap(self, ssid, mac):
+ ap = WifiAp(self._bus, ssid, mac, 0x1, 0x1cc, 0x1cc, 2412)
+ self.add_ap(ap)
+ return ap.path
+
+ def remove_ap_by_path(self, path):
+ for ap in self.aps:
+ if ap.path == path:
+ self.remove_ap(ap)
+ return
+ raise ApNotFoundException("AP %s not found" % path)
+
+
+###################################################################
+IFACE_WIMAX_NSP = 'org.freedesktop.NetworkManager.WiMax.Nsp'
+
+PN_NAME = "Name"
+PN_SIGNAL_QUALITY = "SignalQuality"
+PN_NETWORK_TYPE = "NetworkType"
+
+class WimaxNsp(ExportedObj):
+ counter = 0
+
+ def __init__(self, bus, name):
+ path = "/org/freedesktop/NetworkManager/Nsp/%d" % WimaxNsp.counter
+ WimaxNsp.counter = WimaxNsp.counter + 1
+ ExportedObj.__init__(self, bus, path)
+ self.add_dbus_interface(IFACE_WIMAX_NSP, self.__get_props)
+
+ self.name = name
+ self.strength = random.randint(0, 100)
+ self.strength_id = GLib.timeout_add_seconds(10, self.strength_cb, None)
+
+ def __del__(self):
+ if self.strength_id > 0:
+ GLib.source_remove(self.strength_id)
+ self.strength_id = 0
+
+ def strength_cb(self, ignored):
+ self.strength = random.randint(0, 100)
+ self.__notify(PN_SIGNAL_QUALITY)
+ return True
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PN_NAME] = self.name
+ props[PN_SIGNAL_QUALITY] = dbus.UInt32(self.strength)
+ props[PN_NETWORK_TYPE] = dbus.UInt32(0x1) # NM_WIMAX_NSP_NETWORK_TYPE_HOME
+ return props
+
+ def __notify(self, propname):
+ props = self._get_dbus_properties(IFACE_WIMAX_NSP)
+ changed = { propname: props[propname] }
+ WimaxNsp.PropertiesChanged(self, changed)
+
+ @dbus.service.signal(IFACE_WIMAX_NSP, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+###################################################################
+IFACE_WIMAX = 'org.freedesktop.NetworkManager.Device.WiMax'
+
+class NspNotFoundException(dbus.DBusException):
+ _dbus_error_name = IFACE_WIMAX + '.NspNotFound'
+
+PX_NSPS = "Nsps"
+PX_HW_ADDRESS = "HwAddress"
+PX_CENTER_FREQUENCY = "CenterFrequency"
+PX_RSSI = "Rssi"
+PX_CINR = "Cinr"
+PX_TX_POWER = "TxPower"
+PX_BSID = "Bsid"
+PX_ACTIVE_NSP = "ActiveNsp"
+
+class WimaxDevice(Device):
+ def __init__(self, bus, iface):
+ Device.__init__(self, bus, iface, NM_DEVICE_TYPE_WIMAX)
+ self.add_dbus_interface(IFACE_WIMAX, self.__get_props)
+
+ self.mac = random_mac()
+ self.bsid = random_mac()
+ self.nsps = []
+ self.active_nsp = None
+
+ # methods
+ @dbus.service.method(dbus_interface=IFACE_WIMAX, in_signature='', out_signature='ao')
+ def GetNspList(self):
+ # include all APs including hidden ones
+ return to_path_array(self.nsps)
+
+ @dbus.service.signal(IFACE_WIMAX, signature='o')
+ def NspAdded(self, nsp_path):
+ pass
+
+ def add_nsp(self, nsp):
+ self.nsps.append(nsp)
+ self.__notify(PX_NSPS)
+ self.NspAdded(to_path(nsp))
+
+ @dbus.service.signal(IFACE_WIMAX, signature='o')
+ def NspRemoved(self, nsp_path):
+ pass
+
+ def remove_nsp(self, nsp):
+ self.nsps.remove(nsp)
+ self.__notify(PX_NSPS)
+ self.NspRemoved(to_path(nsp))
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PX_HW_ADDRESS] = self.mac
+ props[PX_CENTER_FREQUENCY] = dbus.UInt32(2525)
+ props[PX_RSSI] = dbus.Int32(-48)
+ props[PX_CINR] = dbus.Int32(24)
+ props[PX_TX_POWER] = dbus.Int32(9)
+ props[PX_BSID] = self.bsid
+ props[PX_NSPS] = to_path_array(self.nsps)
+ props[PX_ACTIVE_NSP] = to_path(self.active_nsp)
+ return props
+
+ def __notify(self, propname):
+ props = self._get_dbus_properties(IFACE_WIMAX)
+ changed = { propname: props[propname] }
+ WimaxDevice.PropertiesChanged(self, changed)
+
+ @dbus.service.signal(IFACE_WIMAX, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+ # test functions
+ def add_test_nsp(self, name):
+ nsp = WimaxNsp(self._bus, name)
+ self.add_nsp(nsp)
+ return nsp.path
+
+ def remove_nsp_by_path(self, path):
+ for nsp in self.nsps:
+ if nsp.path == path:
+ self.remove_nsp(nsp)
+ return
+ raise NspNotFoundException("NSP %s not found" % path)
+
+###################################################################
+IFACE_TEST = 'org.freedesktop.NetworkManager.LibnmGlibTest'
+IFACE_NM = 'org.freedesktop.NetworkManager'
+
+class PermissionDeniedException(dbus.DBusException):
+ _dbus_error_name = IFACE_NM + '.PermissionDenied'
+
+class UnknownDeviceException(dbus.DBusException):
+ _dbus_error_name = IFACE_NM + '.UnknownDevice'
+
+PM_DEVICES = 'Devices'
+PM_NETWORKING_ENABLED = 'NetworkingEnabled'
+PM_WWAN_ENABLED = 'WwanEnabled'
+PM_WWAN_HARDWARE_ENABLED = 'WwanHardwareEnabled'
+PM_WIRELESS_ENABLED = 'WirelessEnabled'
+PM_WIRELESS_HARDWARE_ENABLED = 'WirelessHardwareEnabled'
+PM_WIMAX_ENABLED = 'WimaxEnabled'
+PM_WIMAX_HARDWARE_ENABLED = 'WimaxHardwareEnabled'
+PM_ACTIVE_CONNECTIONS = 'ActiveConnections'
+PM_PRIMARY_CONNECTION = 'PrimaryConnection'
+PM_ACTIVATING_CONNECTION = 'ActivatingConnection'
+PM_STARTUP = 'Startup'
+PM_STATE = 'State'
+PM_VERSION = 'Version'
+PM_CONNECTIVITY = 'Connectivity'
+
+class NetworkManager(ExportedObj):
+ def __init__(self, bus, object_path):
+ ExportedObj.__init__(self, bus, object_path)
+ self.add_dbus_interface(IFACE_NM, self.__get_props)
+
+ self.devices = []
+ self.active_connections = []
+ self.primary_connection = None
+ self.activating_connection = None
+ self.state = NM_STATE_DISCONNECTED
+ self.connectivity = 1
+
+ @dbus.service.signal(IFACE_NM, signature='u')
+ def StateChanged(self, new_state):
+ pass
+
+ def set_state(self, new_state):
+ self.state = new_state
+ self.__notify(PM_STATE)
+ self.StateChanged(dbus.UInt32(self.state))
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='', out_signature='ao')
+ def GetDevices(self):
+ return self._get_dbus_properties(IFACE_NM)[PM_DEVICES]
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='s', out_signature='o')
+ def GetDeviceByIpIface(self, ip_iface):
+ for d in self.devices:
+ # ignore iface/ip_iface distinction for now
+ if d.iface == ip_iface:
+ return d.path
+ raise UnknownDeviceException("No device found for the requested iface.")
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='ooo', out_signature='o')
+ def ActivateConnection(self, conpath, devpath, specific_object):
+ device = None
+ for d in self.devices:
+ if d.path == devpath:
+ device = d
+ break
+ if not device:
+ raise UnknownDeviceException("No device found for the requested iface.")
+ raise PermissionDeniedException("Not yet implemented")
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='a{sa{sv}}oo', out_signature='oo')
+ def AddAndActivateConnection(self, connection, devpath, specific_object):
+ device = None
+ for d in self.devices:
+ if d.path == devpath:
+ device = d
+ break
+ if not device:
+ raise UnknownDeviceException("No device found for the requested iface.")
+ raise PermissionDeniedException("Not yet implemented")
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='o', out_signature='')
+ def DeactivateConnection(self, active_connection):
+ pass
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='b', out_signature='')
+ def Sleep(self, do_sleep):
+ if do_sleep:
+ self.state = NM_STATE_ASLEEP
+ else:
+ self.state = NM_STATE_DISCONNECTED
+ self.__notify(PM_STATE)
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='b', out_signature='')
+ def Enable(self, do_enable):
+ pass
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='', out_signature='a{ss}')
+ def GetPermissions(self):
+ return { "org.freedesktop.NetworkManager.enable-disable-network": "yes",
+ "org.freedesktop.NetworkManager.sleep-wake": "no",
+ "org.freedesktop.NetworkManager.enable-disable-wifi": "yes",
+ "org.freedesktop.NetworkManager.enable-disable-wwan": "yes",
+ "org.freedesktop.NetworkManager.enable-disable-wimax": "yes",
+ "org.freedesktop.NetworkManager.network-control": "yes",
+ "org.freedesktop.NetworkManager.wifi.share.protected": "yes",
+ "org.freedesktop.NetworkManager.wifi.share.open": "yes",
+ "org.freedesktop.NetworkManager.settings.modify.own": "yes",
+ "org.freedesktop.NetworkManager.settings.modify.system": "yes",
+ "org.freedesktop.NetworkManager.settings.modify.hostname": "yes" }
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='ss', out_signature='')
+ def SetLogging(self, level, domains):
+ pass
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='', out_signature='ss')
+ def GetLogging(self):
+ return ("info", "HW,RFKILL,CORE,DEVICE,WIFI,ETHER")
+
+ @dbus.service.method(dbus_interface=IFACE_NM, in_signature='', out_signature='u')
+ def CheckConnectivity(self):
+ raise PermissionDeniedException("You fail")
+
+ @dbus.service.signal(IFACE_NM, signature='o')
+ def DeviceAdded(self, devpath):
+ pass
+
+ def add_device(self, device):
+ self.devices.append(device)
+ self.__notify(PM_DEVICES)
+ self.DeviceAdded(to_path(device))
+
+ @dbus.service.signal(IFACE_NM, signature='o')
+ def DeviceRemoved(self, devpath):
+ pass
+
+ def remove_device(self, device):
+ self.devices.remove(device)
+ self.__notify(PM_DEVICES)
+ self.DeviceRemoved(to_path(device))
+
+ ################# D-Bus Properties interface
+ def __get_props(self):
+ props = {}
+ props[PM_DEVICES] = to_path_array(self.devices)
+ props[PM_NETWORKING_ENABLED] = True
+ props[PM_WWAN_ENABLED] = True
+ props[PM_WWAN_HARDWARE_ENABLED] = True
+ props[PM_WIRELESS_ENABLED] = True
+ props[PM_WIRELESS_HARDWARE_ENABLED] = True
+ props[PM_WIMAX_ENABLED] = True
+ props[PM_WIMAX_HARDWARE_ENABLED] = True
+ props[PM_ACTIVE_CONNECTIONS] = to_path_array(self.active_connections)
+ props[PM_PRIMARY_CONNECTION] = to_path(self.primary_connection)
+ props[PM_ACTIVATING_CONNECTION] = to_path(self.activating_connection)
+ props[PM_STARTUP] = False
+ props[PM_STATE] = dbus.UInt32(self.state)
+ props[PM_VERSION] = "0.9.9.0"
+ props[PM_CONNECTIVITY] = dbus.UInt32(self.connectivity)
+ return props
+
+ def __notify(self, propname):
+ props = self._get_dbus_properties(IFACE_NM)
+ changed = { propname: props[propname] }
+ NetworkManager.PropertiesChanged(self, changed)
+
+ @dbus.service.signal(IFACE_NM, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+ ################# Testing methods
+ @dbus.service.method(IFACE_TEST, in_signature='', out_signature='')
+ def Quit(self):
+ mainloop.quit()
+
+ @dbus.service.method(IFACE_TEST, in_signature='s', out_signature='o')
+ def AddWiredDevice(self, ifname):
+ for d in self.devices:
+ if d.iface == ifname:
+ raise PermissionDeniedError("Device already added")
+ dev = WiredDevice(self._bus, ifname)
+ self.add_device(dev)
+ return dbus.ObjectPath(dev.path)
+
+ @dbus.service.method(IFACE_TEST, in_signature='s', out_signature='o')
+ def AddWifiDevice(self, ifname):
+ for d in self.devices:
+ if d.iface == ifname:
+ raise PermissionDeniedError("Device already added")
+ dev = WifiDevice(self._bus, ifname)
+ self.add_device(dev)
+ return dbus.ObjectPath(dev.path)
+
+ @dbus.service.method(IFACE_TEST, in_signature='s', out_signature='o')
+ def AddWimaxDevice(self, ifname):
+ for d in self.devices:
+ if d.iface == ifname:
+ raise PermissionDeniedError("Device already added")
+ dev = WimaxDevice(self._bus, ifname)
+ self.add_device(dev)
+ return dbus.ObjectPath(dev.path)
+
+ @dbus.service.method(IFACE_TEST, in_signature='o', out_signature='')
+ def RemoveDevice(self, path):
+ for d in self.devices:
+ if d.path == path:
+ self.remove_device(d)
+ return
+ raise UnknownDeviceException("Device not found")
+
+ @dbus.service.method(IFACE_TEST, in_signature='sss', out_signature='o')
+ def AddWifiAp(self, ifname, ssid, mac):
+ for d in self.devices:
+ if d.iface == ifname:
+ return dbus.ObjectPath(d.add_test_ap(ssid, mac))
+ raise UnknownDeviceException("Device not found")
+
+ @dbus.service.method(IFACE_TEST, in_signature='so', out_signature='')
+ def RemoveWifiAp(self, ifname, ap_path):
+ for d in self.devices:
+ if d.iface == ifname:
+ d.remove_ap_by_path(ap_path)
+ return
+ raise UnknownDeviceException("Device not found")
+
+ @dbus.service.method(IFACE_TEST, in_signature='ss', out_signature='o')
+ def AddWimaxNsp(self, ifname, name):
+ for d in self.devices:
+ if d.iface == ifname:
+ return dbus.ObjectPath(d.add_test_nsp(name))
+ raise UnknownDeviceException("Device not found")
+
+ @dbus.service.method(IFACE_TEST, in_signature='so', out_signature='')
+ def RemoveWimaxNsp(self, ifname, nsp_path):
+ for d in self.devices:
+ if d.iface == ifname:
+ d.remove_nsp_by_path(nsp_path)
+ return
+ raise UnknownDeviceException("Device not found")
+
+def quit_cb(user_data):
+ mainloop.quit()
+
+def main():
+ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+ random.seed()
+
+ bus = dbus.SessionBus()
+ nm = NetworkManager(bus, "/org/freedesktop/NetworkManager")
+ if not bus.request_name("org.freedesktop.NetworkManager"):
+ sys.exit(1)
+
+ # quit after inactivity to ensure we don't stick around if tests fail
+ quit_id = GLib.timeout_add_seconds(20, quit_cb, None)
+
+ try:
+ mainloop.run()
+ except Exception as e:
+ pass
+
+ sys.exit(0)
+
+if __name__ == '__main__':
+ main()
+
diff --git a/libnm-glib/tests/test-nm-client.c b/libnm-glib/tests/test-nm-client.c
new file mode 100644
index 000000000..b181c8fa3
--- /dev/null
+++ b/libnm-glib/tests/test-nm-client.c
@@ -0,0 +1,953 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2010 - 2014 Red Hat, Inc.
+ *
+ */
+
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <glib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include <NetworkManager.h>
+#include "nm-client.h"
+#include "nm-device-wifi.h"
+#include "nm-device-ethernet.h"
+#include "nm-device-wimax.h"
+#include "nm-glib-compat.h"
+
+static const char *fake_path;
+static const char *fake_bin;
+static const char *fake_exec;
+static GMainLoop *loop = NULL;
+
+/*******************************************************************/
+
+typedef struct {
+ GDBusConnection *bus;
+ GDBusProxy *proxy;
+ GPid pid;
+ NMClient *client;
+} ServiceInfo;
+
+#define test_assert(condition) \
+do { \
+ if (!G_LIKELY (condition)) \
+ service_cleanup (); \
+ g_assert (condition); \
+} while (0)
+
+#define test_assert_cmpint(a, b, c) \
+do { \
+ if (!G_LIKELY (a b c)) \
+ service_cleanup (); \
+ g_assert_cmpint (a, b, c); \
+} while (0)
+
+#define test_assert_cmpstr(a, b, c) \
+do { \
+ if (!G_LIKELY (g_str_hash (a) b g_str_hash (c))) \
+ service_cleanup (); \
+ g_assert_cmpstr (a, b, c); \
+} while (0)
+
+#define test_assert_no_error(e) \
+do { \
+ if (G_UNLIKELY (e)) \
+ service_cleanup (); \
+ g_assert_no_error (e); \
+} while (0)
+
+static ServiceInfo * sinfo_static = NULL;
+
+static void
+service_cleanup (void)
+{
+ ServiceInfo *info = sinfo_static;
+
+ sinfo_static = NULL;
+
+ if (info) {
+ if (info->proxy)
+ g_object_unref (info->proxy);
+ if (info->bus)
+ g_object_unref (info->bus);
+ if (info->client)
+ g_object_unref (info->client);
+ if (info->pid)
+ kill (info->pid, SIGTERM);
+ memset (info, 0, sizeof (*info));
+ g_free (info);
+ } else
+ g_assert_not_reached ();
+}
+
+static gboolean
+name_exists (GDBusConnection *c, const char *name)
+{
+ GVariant *reply;
+ gboolean exists = FALSE;
+
+ reply = g_dbus_connection_call_sync (c,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS,
+ "GetNameOwner",
+ g_variant_new ("(s)", name),
+ NULL,
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL,
+ NULL);
+ if (reply != NULL) {
+ exists = TRUE;
+ g_variant_unref (reply);
+ }
+
+ return exists;
+}
+
+static ServiceInfo *
+service_init (void)
+{
+ ServiceInfo *sinfo;
+ const char *args[2] = { fake_exec, NULL };
+ GError *error = NULL;
+ int i = 100;
+
+ g_assert (!sinfo_static);
+
+ sinfo = g_malloc0 (sizeof (*sinfo));
+
+ sinfo_static = sinfo;
+
+ sinfo->bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+ test_assert (sinfo->bus);
+
+ if (!g_spawn_async (fake_path, (char **) args, NULL, 0, NULL, NULL, &sinfo->pid, &error))
+ test_assert_no_error (error);
+
+ /* Wait until the service is registered on the bus */
+ while (i > 0) {
+ g_usleep (G_USEC_PER_SEC / 50);
+ if (name_exists (sinfo->bus, "org.freedesktop.NetworkManager"))
+ break;
+ i--;
+ }
+ test_assert (i > 0);
+
+ /* Grab a proxy to our fake NM service to trigger tests */
+ sinfo->proxy = g_dbus_proxy_new_sync (sinfo->bus,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
+ G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS |
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
+ NULL,
+ NM_DBUS_SERVICE,
+ NM_DBUS_PATH,
+ "org.freedesktop.NetworkManager.LibnmGlibTest",
+ NULL, NULL);
+ test_assert (sinfo->proxy);
+
+ sinfo->client = nm_client_new ();
+ test_assert (sinfo->client != NULL);
+
+ return sinfo;
+}
+
+static ServiceInfo *
+service_get (void)
+{
+ g_assert (sinfo_static);
+ return sinfo_static;
+}
+
+#define _sinfo (service_get ())
+
+/*******************************************************************/
+
+static gboolean
+loop_quit (gpointer user_data)
+{
+ g_main_loop_quit ((GMainLoop *) user_data);
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
+add_device (const char *method, const char *ifname, char **out_path)
+{
+ GError *error = NULL;
+ GVariant *ret;
+
+ ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ method,
+ g_variant_new ("(s)", ifname),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ test_assert_no_error (error);
+ test_assert (ret);
+ test_assert_cmpstr (g_variant_get_type_string (ret), ==, "(o)");
+ if (out_path)
+ g_variant_get (ret, "(o)", out_path);
+ g_variant_unref (ret);
+ return TRUE;
+}
+
+/*******************************************************************/
+
+typedef struct {
+ GMainLoop *loop;
+ gboolean signaled;
+ gboolean notified;
+ guint quit_count;
+ guint quit_id;
+} DeviceAddedInfo;
+
+static void
+device_add_check_quit (DeviceAddedInfo *info)
+{
+ info->quit_count--;
+ if (info->quit_count == 0) {
+ g_source_remove (info->quit_id);
+ info->quit_id = 0;
+ g_main_loop_quit (info->loop);
+ }
+}
+
+static void
+device_added_cb (NMClient *c,
+ NMDevice *device,
+ DeviceAddedInfo *info)
+{
+ test_assert (device);
+ test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+ info->signaled = TRUE;
+ device_add_check_quit (info);
+}
+
+static void
+devices_notify_cb (NMClient *c,
+ GParamSpec *pspec,
+ DeviceAddedInfo *info)
+{
+ const GPtrArray *devices;
+ NMDevice *device;
+
+ devices = nm_client_get_devices (c);
+ test_assert (devices);
+ test_assert_cmpint (devices->len, ==, 1);
+
+ device = g_ptr_array_index (devices, 0);
+ test_assert (device);
+ test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+
+ info->notified = TRUE;
+
+ device_add_check_quit (info);
+}
+
+static void
+test_device_added (void)
+{
+ const GPtrArray *devices;
+ NMDevice *device;
+ DeviceAddedInfo info = { loop, FALSE, FALSE, 0, 0 };
+
+ service_init ();
+
+ /* Give NMClient a chance to initialize */
+ g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ devices = nm_client_get_devices (_sinfo->client);
+ test_assert (devices == NULL);
+
+ /* Tell the test service to add a new device */
+ add_device ("AddWiredDevice", "eth0", NULL);
+
+ g_signal_connect (_sinfo->client,
+ "device-added",
+ (GCallback) device_added_cb,
+ &info);
+ info.quit_count++;
+
+ g_signal_connect (_sinfo->client,
+ "notify::devices",
+ (GCallback) devices_notify_cb,
+ &info);
+ info.quit_count++;
+
+ /* Wait for libnm-glib to find the device */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert (info.signaled);
+ test_assert (info.notified);
+
+ g_signal_handlers_disconnect_by_func (_sinfo->client, device_added_cb, &info);
+ g_signal_handlers_disconnect_by_func (_sinfo->client, devices_notify_cb, &info);
+
+ devices = nm_client_get_devices (_sinfo->client);
+ test_assert (devices);
+ test_assert_cmpint (devices->len, ==, 1);
+
+ device = g_ptr_array_index (devices, 0);
+ test_assert (device);
+ test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+
+ service_cleanup ();
+}
+
+/*******************************************************************/
+
+static const char *expected_bssid = "66:55:44:33:22:11";
+
+typedef struct {
+ GMainLoop *loop;
+ gboolean found;
+ char *ap_path;
+ gboolean signaled;
+ gboolean notified;
+ guint quit_id;
+ guint quit_count;
+} WifiApInfo;
+
+static void
+wifi_check_quit (WifiApInfo *info)
+{
+ info->quit_count--;
+ if (info->quit_count == 0) {
+ g_source_remove (info->quit_id);
+ info->quit_id = 0;
+ g_main_loop_quit (info->loop);
+ }
+}
+
+static void
+wifi_device_added_cb (NMClient *c,
+ NMDevice *device,
+ WifiApInfo *info)
+{
+ test_assert_cmpstr (nm_device_get_iface (device), ==, "wlan0");
+ info->found = TRUE;
+ wifi_check_quit (info);
+}
+
+static void
+got_ap_path (WifiApInfo *info, const char *path)
+{
+ if (info->ap_path)
+ test_assert_cmpstr (info->ap_path, ==, path);
+ else
+ info->ap_path = g_strdup (path);
+}
+
+static void
+wifi_ap_added_cb (NMDeviceWifi *w,
+ NMAccessPoint *ap,
+ WifiApInfo *info)
+{
+ test_assert (ap);
+ test_assert_cmpstr (nm_access_point_get_bssid (ap), ==, expected_bssid);
+ got_ap_path (info, nm_object_get_path (NM_OBJECT (ap)));
+
+ info->signaled = TRUE;
+ wifi_check_quit (info);
+}
+
+static void
+wifi_ap_add_notify_cb (NMDeviceWifi *w,
+ GParamSpec *pspec,
+ WifiApInfo *info)
+{
+ const GPtrArray *aps;
+ NMAccessPoint *ap;
+
+ aps = nm_device_wifi_get_access_points (w);
+ test_assert (aps);
+ test_assert_cmpint (aps->len, ==, 1);
+
+ ap = g_ptr_array_index (aps, 0);
+ test_assert (ap);
+ test_assert_cmpstr (nm_access_point_get_bssid (ap), ==, "66:55:44:33:22:11");
+ got_ap_path (info, nm_object_get_path (NM_OBJECT (ap)));
+
+ info->notified = TRUE;
+ wifi_check_quit (info);
+}
+
+static void
+wifi_ap_removed_cb (NMDeviceWifi *w,
+ NMAccessPoint *ap,
+ WifiApInfo *info)
+{
+ test_assert (ap);
+ test_assert_cmpstr (info->ap_path, ==, nm_object_get_path (NM_OBJECT (ap)));
+
+ info->signaled = TRUE;
+ wifi_check_quit (info);
+}
+
+static void
+wifi_ap_remove_notify_cb (NMDeviceWifi *w,
+ GParamSpec *pspec,
+ WifiApInfo *info)
+{
+ const GPtrArray *aps;
+
+ aps = nm_device_wifi_get_access_points (w);
+ test_assert (aps == NULL);
+
+ info->notified = TRUE;
+ wifi_check_quit (info);
+}
+
+static void
+test_wifi_ap_added_removed (void)
+{
+ NMDeviceWifi *wifi;
+ WifiApInfo info = { loop, FALSE, FALSE, 0, 0 };
+ GVariant *ret;
+ GError *error = NULL;
+ char *expected_path = NULL;
+
+ service_init ();
+
+ /* Give NMClient a chance to initialize */
+ g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ /*************************************/
+ /* Add the wifi device */
+ add_device ("AddWifiDevice", "wlan0", NULL);
+
+ g_signal_connect (_sinfo->client,
+ "device-added",
+ (GCallback) wifi_device_added_cb,
+ &info);
+ info.quit_count = 1;
+
+ /* Wait for libnm-glib to find the device */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert (info.found);
+ g_signal_handlers_disconnect_by_func (_sinfo->client, wifi_device_added_cb, &info);
+
+ wifi = (NMDeviceWifi *) nm_client_get_device_by_iface (_sinfo->client, "wlan0");
+ test_assert (NM_IS_DEVICE_WIFI (wifi));
+
+ /*************************************/
+ /* Add the wifi device */
+ info.signaled = FALSE;
+ info.notified = FALSE;
+ info.quit_id = 0;
+
+ ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ "AddWifiAp",
+ g_variant_new ("(sss)", "wlan0", "test-ap", expected_bssid),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ test_assert_no_error (error);
+ test_assert (ret);
+ test_assert_cmpstr (g_variant_get_type_string (ret), ==, "(o)");
+ g_variant_get (ret, "(o)", &expected_path);
+ g_variant_unref (ret);
+
+ g_signal_connect (wifi,
+ "access-point-added",
+ (GCallback) wifi_ap_added_cb,
+ &info);
+ info.quit_count = 1;
+
+ g_signal_connect (wifi,
+ "notify::access-points",
+ (GCallback) wifi_ap_add_notify_cb,
+ &info);
+ info.quit_count++;
+
+ /* Wait for libnm-glib to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert (info.signaled);
+ test_assert (info.notified);
+ test_assert (info.ap_path);
+ test_assert_cmpstr (info.ap_path, ==, expected_path);
+ g_signal_handlers_disconnect_by_func (wifi, wifi_ap_added_cb, &info);
+ g_signal_handlers_disconnect_by_func (wifi, wifi_ap_add_notify_cb, &info);
+
+ /*************************************/
+ /* Remove the wifi device */
+ info.signaled = FALSE;
+ info.notified = FALSE;
+ info.quit_id = 0;
+
+ ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ "RemoveWifiAp",
+ g_variant_new ("(so)", "wlan0", expected_path),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ test_assert_no_error (error);
+ g_clear_pointer (&ret, g_variant_unref);
+
+ g_signal_connect (wifi,
+ "access-point-removed",
+ (GCallback) wifi_ap_removed_cb,
+ &info);
+ info.quit_count = 1;
+
+ g_signal_connect (wifi,
+ "notify::access-points",
+ (GCallback) wifi_ap_remove_notify_cb,
+ &info);
+ info.quit_count++;
+
+ /* Wait for libnm-glib to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert (info.signaled);
+ test_assert (info.notified);
+ g_signal_handlers_disconnect_by_func (wifi, wifi_ap_removed_cb, &info);
+ g_signal_handlers_disconnect_by_func (wifi, wifi_ap_remove_notify_cb, &info);
+
+ g_free (info.ap_path);
+ g_free (expected_path);
+ service_cleanup ();
+}
+
+/*******************************************************************/
+
+static const char *expected_nsp_name = "Clear";
+
+typedef struct {
+ GMainLoop *loop;
+ gboolean found;
+ char *nsp_path;
+ gboolean signaled;
+ gboolean notified;
+ guint quit_id;
+ guint quit_count;
+} WimaxNspInfo;
+
+static void
+wimax_check_quit (WimaxNspInfo *info)
+{
+ info->quit_count--;
+ if (info->quit_count == 0) {
+ g_source_remove (info->quit_id);
+ info->quit_id = 0;
+ g_main_loop_quit (info->loop);
+ }
+}
+
+static void
+wimax_device_added_cb (NMClient *c,
+ NMDevice *device,
+ WimaxNspInfo *info)
+{
+ test_assert_cmpstr (nm_device_get_iface (device), ==, "wmx0");
+ info->found = TRUE;
+ wimax_check_quit (info);
+}
+
+static void
+got_nsp_path (WimaxNspInfo *info, const char *path)
+{
+ if (info->nsp_path)
+ test_assert_cmpstr (info->nsp_path, ==, path);
+ else
+ info->nsp_path = g_strdup (path);
+}
+
+static void
+wimax_nsp_added_cb (NMDeviceWimax *w,
+ NMWimaxNsp *nsp,
+ WimaxNspInfo *info)
+{
+ test_assert (nsp);
+ test_assert_cmpstr (nm_wimax_nsp_get_name (nsp), ==, expected_nsp_name);
+ got_nsp_path (info, nm_object_get_path (NM_OBJECT (nsp)));
+
+ info->signaled = TRUE;
+ wimax_check_quit (info);
+}
+
+static void
+wimax_nsp_add_notify_cb (NMDeviceWimax *w,
+ GParamSpec *pspec,
+ WimaxNspInfo *info)
+{
+ const GPtrArray *nsps;
+ NMWimaxNsp *nsp;
+
+ nsps = nm_device_wimax_get_nsps (w);
+ test_assert (nsps);
+ test_assert_cmpint (nsps->len, ==, 1);
+
+ nsp = g_ptr_array_index (nsps, 0);
+ test_assert (nsp);
+ test_assert_cmpstr (nm_wimax_nsp_get_name (nsp), ==, expected_nsp_name);
+ got_nsp_path (info, nm_object_get_path (NM_OBJECT (nsp)));
+
+ info->notified = TRUE;
+ wimax_check_quit (info);
+}
+
+static void
+wimax_nsp_removed_cb (NMDeviceWimax *w,
+ NMWimaxNsp *nsp,
+ WimaxNspInfo *info)
+{
+ test_assert (nsp);
+ test_assert_cmpstr (info->nsp_path, ==, nm_object_get_path (NM_OBJECT (nsp)));
+
+ info->signaled = TRUE;
+ wimax_check_quit (info);
+}
+
+static void
+wimax_nsp_remove_notify_cb (NMDeviceWimax *w,
+ GParamSpec *pspec,
+ WimaxNspInfo *info)
+{
+ const GPtrArray *nsps;
+
+ nsps = nm_device_wimax_get_nsps (w);
+ test_assert (nsps == NULL);
+
+ info->notified = TRUE;
+ wimax_check_quit (info);
+}
+
+static void
+test_wimax_nsp_added_removed (void)
+{
+ NMDeviceWimax *wimax;
+ WimaxNspInfo info = { loop, FALSE, FALSE, 0, 0 };
+ GVariant *ret;
+ GError *error = NULL;
+ char *expected_path = NULL;
+
+ service_init ();
+
+ /* Give NMClient a chance to initialize */
+ g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ /*************************************/
+ /* Add the wimax device */
+ add_device ("AddWimaxDevice", "wmx0", NULL);
+
+ g_signal_connect (_sinfo->client,
+ "device-added",
+ (GCallback) wimax_device_added_cb,
+ &info);
+ info.quit_count = 1;
+
+ /* Wait for libnm-glib to find the device */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert (info.found);
+ g_signal_handlers_disconnect_by_func (_sinfo->client, wimax_device_added_cb, &info);
+
+ wimax = (NMDeviceWimax *) nm_client_get_device_by_iface (_sinfo->client, "wmx0");
+ test_assert (NM_IS_DEVICE_WIMAX (wimax));
+
+ /*************************************/
+ /* Add the wimax NSP */
+ info.signaled = FALSE;
+ info.notified = FALSE;
+ info.quit_id = 0;
+
+ ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ "AddWimaxNsp",
+ g_variant_new ("(ss)", "wmx0", expected_nsp_name),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ test_assert_no_error (error);
+ test_assert (ret);
+ test_assert_cmpstr (g_variant_get_type_string (ret), ==, "(o)");
+ g_variant_get (ret, "(o)", &expected_path);
+ g_variant_unref (ret);
+
+ g_signal_connect (wimax,
+ "nsp-added",
+ (GCallback) wimax_nsp_added_cb,
+ &info);
+ info.quit_count = 1;
+
+ g_signal_connect (wimax,
+ "notify::nsps",
+ (GCallback) wimax_nsp_add_notify_cb,
+ &info);
+ info.quit_count++;
+
+ /* Wait for libnm-glib to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert (info.signaled);
+ test_assert (info.notified);
+ test_assert (info.nsp_path);
+ test_assert_cmpstr (info.nsp_path, ==, expected_path);
+ g_signal_handlers_disconnect_by_func (wimax, wimax_nsp_added_cb, &info);
+ g_signal_handlers_disconnect_by_func (wimax, wimax_nsp_add_notify_cb, &info);
+
+ /*************************************/
+ /* Remove the wimax NSP */
+ info.signaled = FALSE;
+ info.notified = FALSE;
+ info.quit_id = 0;
+
+ ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ "RemoveWimaxNsp",
+ g_variant_new ("(so)", "wmx0", expected_path),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ test_assert_no_error (error);
+ g_clear_pointer (&ret, g_variant_unref);
+
+ g_signal_connect (wimax,
+ "nsp-removed",
+ (GCallback) wimax_nsp_removed_cb,
+ &info);
+ info.quit_count = 1;
+
+ g_signal_connect (wimax,
+ "notify::nsps",
+ (GCallback) wimax_nsp_remove_notify_cb,
+ &info);
+ info.quit_count++;
+
+ /* Wait for libnm-glib to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert (info.signaled);
+ test_assert (info.notified);
+ g_signal_handlers_disconnect_by_func (wimax, wimax_nsp_removed_cb, &info);
+ g_signal_handlers_disconnect_by_func (wimax, wimax_nsp_remove_notify_cb, &info);
+
+ g_free (info.nsp_path);
+ g_free (expected_path);
+ service_cleanup ();
+}
+
+/*******************************************************************/
+
+typedef struct {
+ GMainLoop *loop;
+ gboolean signaled;
+ gboolean notified;
+ guint quit_count;
+ guint quit_id;
+} DaInfo;
+
+static void
+da_check_quit (DaInfo *info)
+{
+ info->quit_count--;
+ if (info->quit_count == 0) {
+ g_source_remove (info->quit_id);
+ info->quit_id = 0;
+ g_main_loop_quit (info->loop);
+ }
+}
+
+static void
+da_device_added_cb (NMClient *c,
+ NMDevice *device,
+ DaInfo *info)
+{
+ da_check_quit (info);
+}
+
+static void
+da_device_removed_cb (NMClient *c,
+ NMDevice *device,
+ DaInfo *info)
+{
+ test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+ info->signaled = TRUE;
+ da_check_quit (info);
+}
+
+static void
+da_devices_notify_cb (NMClient *c,
+ GParamSpec *pspec,
+ DaInfo *info)
+{
+ const GPtrArray *devices;
+ NMDevice *device;
+ guint i;
+ const char *iface;
+
+ devices = nm_client_get_devices (c);
+ test_assert (devices);
+ test_assert_cmpint (devices->len, ==, 2);
+
+ for (i = 0; i < devices->len; i++) {
+ device = g_ptr_array_index (devices, i);
+ iface = nm_device_get_iface (device);
+
+ test_assert (!strcmp (iface, "wlan0") || !strcmp (iface, "eth1"));
+ }
+
+ info->notified = TRUE;
+ da_check_quit (info);
+}
+
+static void
+test_devices_array (void)
+{
+ DaInfo info = { loop };
+ char *paths[3] = { NULL, NULL, NULL };
+ NMDevice *device;
+ const GPtrArray *devices;
+ GError *error = NULL;
+ GVariant *ret;
+
+ service_init ();
+
+ /* Give NMClient a chance to initialize */
+ g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ /*************************************/
+ /* Add some devices */
+ add_device ("AddWifiDevice", "wlan0", &paths[0]);
+ add_device ("AddWiredDevice", "eth0", &paths[1]);
+ add_device ("AddWiredDevice", "eth1", &paths[2]);
+ info.quit_count = 3;
+
+ g_signal_connect (_sinfo->client,
+ "device-added",
+ (GCallback) da_device_added_cb,
+ &info);
+
+ /* Wait for libnm-glib to find the device */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert_cmpint (info.quit_count, ==, 0);
+ g_signal_handlers_disconnect_by_func (_sinfo->client, da_device_added_cb, &info);
+
+ /* Ensure the devices now exist */
+ devices = nm_client_get_devices (_sinfo->client);
+ test_assert (devices);
+ test_assert_cmpint (devices->len, ==, 3);
+
+ device = nm_client_get_device_by_iface (_sinfo->client, "wlan0");
+ test_assert (NM_IS_DEVICE_WIFI (device));
+
+ device = nm_client_get_device_by_iface (_sinfo->client, "eth0");
+ test_assert (NM_IS_DEVICE_ETHERNET (device));
+
+ device = nm_client_get_device_by_iface (_sinfo->client, "eth1");
+ test_assert (NM_IS_DEVICE_ETHERNET (device));
+
+ /********************************/
+ /* Now remove the device in the middle */
+ ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ "RemoveDevice",
+ g_variant_new ("(o)", paths[1]),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ test_assert_no_error (error);
+ test_assert (ret);
+ g_variant_unref (ret);
+
+ g_signal_connect (_sinfo->client,
+ "device-removed",
+ (GCallback) da_device_removed_cb,
+ &info);
+
+ g_signal_connect (_sinfo->client,
+ "notify::devices",
+ (GCallback) da_devices_notify_cb,
+ &info);
+ info.quit_count = 2;
+
+ /* Wait for libnm-glib to find the device */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ test_assert_cmpint (info.quit_count, ==, 0);
+ g_signal_handlers_disconnect_by_func (_sinfo->client, da_device_removed_cb, &info);
+ g_signal_handlers_disconnect_by_func (_sinfo->client, da_devices_notify_cb, &info);
+
+ /* Ensure only two are left */
+ devices = nm_client_get_devices (_sinfo->client);
+ test_assert (devices);
+ test_assert_cmpint (devices->len, ==, 2);
+
+ device = nm_client_get_device_by_iface (_sinfo->client, "wlan0");
+ test_assert (NM_IS_DEVICE_WIFI (device));
+
+ device = nm_client_get_device_by_iface (_sinfo->client, "eth1");
+ test_assert (NM_IS_DEVICE_ETHERNET (device));
+
+ g_free (paths[0]);
+ g_free (paths[1]);
+ g_free (paths[2]);
+ service_cleanup ();
+}
+
+/*******************************************************************/
+
+int
+main (int argc, char **argv)
+{
+ g_assert (argc == 3);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_init (&argc, &argv, NULL);
+
+ fake_path = argv[1];
+ fake_bin = argv[2];
+ fake_exec = g_strdup_printf ("%s/%s", argv[1], argv[2]);
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ g_test_add_func ("/libnm-glib/device-added", test_device_added);
+ g_test_add_func ("/libnm-glib/wifi-ap-added-removed", test_wifi_ap_added_removed);
+ g_test_add_func ("/libnm-glib/wimax-nsp-added-removed", test_wimax_nsp_added_removed);
+ g_test_add_func ("/libnm-glib/devices-array", test_devices_array);
+
+ return g_test_run ();
+}
+
diff --git a/libnm-glib/tests/test-remote-settings-client.c b/libnm-glib/tests/test-remote-settings-client.c
index ad62075d4..e3ef7f22e 100644
--- a/libnm-glib/tests/test-remote-settings-client.c
+++ b/libnm-glib/tests/test-remote-settings-client.c
@@ -342,17 +342,9 @@ test_remove_connection (void)
/*******************************************************************/
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
-
-#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
-
-int main (int argc, char **argv)
+int
+main (int argc, char **argv)
{
- GTestSuite *suite;
char *service_argv[3] = { NULL, NULL, NULL };
int ret;
GError *error = NULL;
@@ -360,7 +352,9 @@ int main (int argc, char **argv)
g_assert (argc == 3);
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
g_test_init (&argc, &argv, NULL);
@@ -390,12 +384,10 @@ int main (int argc, char **argv)
settings = nm_remote_settings_new (bus);
test_assert (settings != NULL);
- suite = g_test_get_root ();
-
- g_test_suite_add (suite, TESTCASE (test_add_connection, NULL));
- g_test_suite_add (suite, TESTCASE (test_make_invisible, NULL));
- g_test_suite_add (suite, TESTCASE (test_make_visible, NULL));
- g_test_suite_add (suite, TESTCASE (test_remove_connection, NULL));
+ g_test_add_func ("/remote_settings/add_connection", test_add_connection);
+ g_test_add_func ("/remote_settings/make_invisible", test_make_invisible);
+ g_test_add_func ("/remote_settings/make_visible", test_make_visible);
+ g_test_add_func ("/remote_settings/remove_connection", test_remove_connection);
ret = g_test_run ();
diff --git a/libnm-glib/tests/test-remote-settings-service.py b/libnm-glib/tests/test-remote-settings-service.py
index 865420055..439073ad2 100755
--- a/libnm-glib/tests/test-remote-settings-service.py
+++ b/libnm-glib/tests/test-remote-settings-service.py
@@ -1,8 +1,9 @@
#!/usr/bin/env python
# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-import glib
-import gobject
+from __future__ import print_function
+
+from gi.repository import GLib, GObject
import sys
import dbus
import dbus.service
@@ -21,7 +22,7 @@ class UnknownPropertyException(dbus.DBusException):
class PermissionDeniedException(dbus.DBusException):
_dbus_error_name = IFACE_SETTINGS + '.PermissionDenied'
-mainloop = gobject.MainLoop()
+mainloop = GObject.MainLoop()
class Connection(dbus.service.Object):
def __init__(self, bus, object_path, settings, remove_func):
@@ -30,7 +31,25 @@ class Connection(dbus.service.Object):
self.settings = settings
self.remove_func = remove_func
self.visible = True
+ self.props = {}
+ self.props['Unsaved'] = False
+
+ # Properties interface
+ @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}')
+ def GetAll(self, iface):
+ if iface != IFACE_CONNECTION:
+ raise UnknownInterfaceException()
+ return self.props
+
+ @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v')
+ def Get(self, iface, name):
+ if iface != IFACE_CONNECTION:
+ raise UnknownInterfaceException()
+ if not name in self.props.keys():
+ raise UnknownPropertyException()
+ return self.props[name]
+ # Connection methods
@dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='a{sa{sv}}')
def GetSettings(self):
if not self.visible:
@@ -72,10 +91,10 @@ class Settings(dbus.service.Object):
@dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='a{sa{sv}}', out_signature='o')
def AddConnection(self, settings):
- path = "/org/freedesktop/NetworkManager/Settings/Connection/%d" % self.counter
+ path = "/org/freedesktop/NetworkManager/Settings/Connection/{0}".format(self.counter)
self.counter = self.counter + 1
self.connections[path] = Connection(self.bus, path, settings, self.delete_connection)
- print "Added connection %s" % path
+ print("Added connection {0}".format(path))
return path
def delete_connection(self, connection):
@@ -114,16 +133,16 @@ def main():
if not bus.request_name("org.freedesktop.NetworkManager"):
sys.exit(1)
- print "Service started"
+ print("Service started")
- gobject.timeout_add_seconds(20, quit_cb, None)
+ GLib.timeout_add_seconds(20, quit_cb, None)
try:
mainloop.run()
- except Exception, e:
+ except Exception as e:
pass
- print "Service stopped"
+ print("Service stopped")
sys.exit(0)
if __name__ == '__main__':
diff --git a/libnm-util/Makefile.am b/libnm-util/Makefile.am
index 2d41164b0..01b2026ab 100644
--- a/libnm-util/Makefile.am
+++ b/libnm-util/Makefile.am
@@ -5,15 +5,22 @@ SUBDIRS = . tests
AM_CPPFLAGS = \
-I${top_srcdir} \
-I${top_srcdir}/include \
- -I${top_builddir}/include
-
-lib_LTLIBRARIES=libnm-util.la
-
-libnm_util_la_CPPFLAGS = \
+ -I${top_builddir}/include \
+ -DG_LOG_DOMAIN=\""libnm-util"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(UUID_CFLAGS) \
- $(AM_CPPFLAGS)
+ $(UUID_CFLAGS)
+
+if WITH_GNUTLS
+AM_CPPFLAGS += $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
+endif
+
+if WITH_NSS
+AM_CPPFLAGS += $(NSS_CFLAGS)
+endif
+
+lib_LTLIBRARIES=libnm-util.la
libnm_util_include_HEADERS = \
nm-connection.h \
@@ -22,9 +29,12 @@ libnm_util_include_HEADERS = \
nm-setting-adsl.h \
nm-setting-bluetooth.h \
nm-setting-bond.h \
+ nm-setting-team.h \
+ nm-setting-team-port.h \
nm-setting-bridge.h \
nm-setting-bridge-port.h \
nm-setting-connection.h \
+ nm-setting-dcb.h \
nm-setting-infiniband.h \
nm-setting-ip4-config.h \
nm-setting-vlan.h \
@@ -32,6 +42,7 @@ libnm_util_include_HEADERS = \
nm-setting-ppp.h \
nm-setting-pppoe.h \
nm-setting-serial.h \
+ nm-setting-generic.h \
nm-setting-gsm.h \
nm-setting-cdma.h \
nm-setting-olpc-mesh.h \
@@ -46,7 +57,7 @@ libnm_util_include_HEADERS = \
libnm_util_la_private_headers = \
crypto.h \
nm-param-spec-specialized.h \
- nm-utils-private.h \
+ nm-utils-private.h \
nm-setting-private.h
libnm_util_la_csources = \
@@ -58,9 +69,12 @@ libnm_util_la_csources = \
nm-setting-adsl.c \
nm-setting-bluetooth.c \
nm-setting-bond.c \
+ nm-setting-team.c \
+ nm-setting-team-port.c \
nm-setting-bridge.c \
nm-setting-bridge-port.c \
nm-setting-connection.c \
+ nm-setting-dcb.c \
nm-setting-infiniband.c \
nm-setting-ip4-config.c \
nm-setting-vlan.c \
@@ -68,6 +82,7 @@ libnm_util_la_csources = \
nm-setting-ppp.c \
nm-setting-pppoe.c \
nm-setting-serial.c \
+ nm-setting-generic.c \
nm-setting-gsm.c \
nm-setting-cdma.c \
nm-setting-olpc-mesh.c \
@@ -77,7 +92,8 @@ libnm_util_la_csources = \
nm-setting-wireless-security.c \
nm-setting-vpn.c \
nm-utils-enum-types.c \
- nm-utils.c
+ nm-utils.c \
+ nm-value-transforms.c
libnm_util_la_SOURCES = \
$(libnm_util_la_csources) \
@@ -94,17 +110,15 @@ libnm_util_la_LIBADD = $(GLIB_LIBS) $(DBUS_LIBS) $(UUID_LIBS)
SYMBOL_VIS_FILE=$(srcdir)/libnm-util.ver
libnm_util_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
- -version-info "6:0:4"
+ -version-info "8:0:6"
if WITH_GNUTLS
libnm_util_la_SOURCES += crypto_gnutls.c
-libnm_util_la_CPPFLAGS += $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
libnm_util_la_LIBADD += $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
endif
if WITH_NSS
libnm_util_la_SOURCES += crypto_nss.c
-libnm_util_la_CPPFLAGS += $(NSS_CFLAGS)
libnm_util_la_LIBADD += $(NSS_LIBS)
endif
@@ -119,22 +133,16 @@ noinst_LTLIBRARIES = libtest-crypto.la
libtest_crypto_la_SOURCES = crypto.c
-libtest_crypto_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS)
-
libtest_crypto_la_LIBADD = \
$(GLIB_LIBS)
if WITH_GNUTLS
libtest_crypto_la_SOURCES += crypto_gnutls.c
-libtest_crypto_la_CPPFLAGS += $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
libtest_crypto_la_LIBADD += $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
endif
if WITH_NSS
libtest_crypto_la_SOURCES += crypto_nss.c
-libtest_crypto_la_CPPFLAGS += $(NSS_CFLAGS)
libtest_crypto_la_LIBADD += $(NSS_LIBS)
endif
diff --git a/libnm-util/Makefile.in b/libnm-util/Makefile.in
index bde924034..fa461f1ff 100644
--- a/libnm-util/Makefile.in
+++ b/libnm-util/Makefile.in
@@ -80,26 +80,25 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@WITH_GNUTLS_TRUE@am__append_1 = crypto_gnutls.c
-@WITH_GNUTLS_TRUE@am__append_2 = $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
-@WITH_GNUTLS_TRUE@am__append_3 = $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
-@WITH_NSS_TRUE@am__append_4 = crypto_nss.c
-@WITH_NSS_TRUE@am__append_5 = $(NSS_CFLAGS)
+@WITH_GNUTLS_TRUE@am__append_1 = $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
+@WITH_NSS_TRUE@am__append_2 = $(NSS_CFLAGS)
+@WITH_GNUTLS_TRUE@am__append_3 = crypto_gnutls.c
+@WITH_GNUTLS_TRUE@am__append_4 = $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
+@WITH_NSS_TRUE@am__append_5 = crypto_nss.c
@WITH_NSS_TRUE@am__append_6 = $(NSS_LIBS)
@WITH_GNUTLS_TRUE@am__append_7 = crypto_gnutls.c
-@WITH_GNUTLS_TRUE@am__append_8 = $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
-@WITH_GNUTLS_TRUE@am__append_9 = $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
-@WITH_NSS_TRUE@am__append_10 = crypto_nss.c
-@WITH_NSS_TRUE@am__append_11 = $(NSS_CFLAGS)
-@WITH_NSS_TRUE@am__append_12 = $(NSS_LIBS)
-@HAVE_INTROSPECTION_TRUE@am__append_13 = NetworkManager-1.0.gir
-@HAVE_INTROSPECTION_TRUE@am__append_14 = $(gir_DATA) $(typelib_DATA)
+@WITH_GNUTLS_TRUE@am__append_8 = $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
+@WITH_NSS_TRUE@am__append_9 = crypto_nss.c
+@WITH_NSS_TRUE@am__append_10 = $(NSS_LIBS)
+@HAVE_INTROSPECTION_TRUE@am__append_11 = NetworkManager-1.0.gir
+@HAVE_INTROSPECTION_TRUE@am__append_12 = $(gir_DATA) $(typelib_DATA)
subdir = libnm-util
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(srcdir)/libnm-util.pc.in $(top_srcdir)/build-aux/depcomp \
$(libnm_util_include_HEADERS) COPYING
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -158,44 +157,34 @@ libnm_util_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
am__libnm_util_la_SOURCES_DIST = crypto.c nm-connection.c \
nm-param-spec-specialized.c nm-setting.c nm-setting-8021x.c \
nm-setting-adsl.c nm-setting-bluetooth.c nm-setting-bond.c \
- nm-setting-bridge.c nm-setting-bridge-port.c \
- nm-setting-connection.c nm-setting-infiniband.c \
+ nm-setting-team.c nm-setting-team-port.c nm-setting-bridge.c \
+ nm-setting-bridge-port.c nm-setting-connection.c \
+ nm-setting-dcb.c nm-setting-infiniband.c \
nm-setting-ip4-config.c nm-setting-vlan.c \
nm-setting-ip6-config.c nm-setting-ppp.c nm-setting-pppoe.c \
- nm-setting-serial.c nm-setting-gsm.c nm-setting-cdma.c \
- nm-setting-olpc-mesh.c nm-setting-wimax.c nm-setting-wired.c \
- nm-setting-wireless.c nm-setting-wireless-security.c \
- nm-setting-vpn.c nm-utils-enum-types.c nm-utils.c crypto.h \
- nm-param-spec-specialized.h nm-utils-private.h \
+ nm-setting-serial.c nm-setting-generic.c nm-setting-gsm.c \
+ nm-setting-cdma.c nm-setting-olpc-mesh.c nm-setting-wimax.c \
+ nm-setting-wired.c nm-setting-wireless.c \
+ nm-setting-wireless-security.c nm-setting-vpn.c \
+ nm-utils-enum-types.c nm-utils.c nm-value-transforms.c \
+ crypto.h nm-param-spec-specialized.h nm-utils-private.h \
nm-setting-private.h crypto_gnutls.c crypto_nss.c
-am__objects_1 = libnm_util_la-crypto.lo libnm_util_la-nm-connection.lo \
- libnm_util_la-nm-param-spec-specialized.lo \
- libnm_util_la-nm-setting.lo libnm_util_la-nm-setting-8021x.lo \
- libnm_util_la-nm-setting-adsl.lo \
- libnm_util_la-nm-setting-bluetooth.lo \
- libnm_util_la-nm-setting-bond.lo \
- libnm_util_la-nm-setting-bridge.lo \
- libnm_util_la-nm-setting-bridge-port.lo \
- libnm_util_la-nm-setting-connection.lo \
- libnm_util_la-nm-setting-infiniband.lo \
- libnm_util_la-nm-setting-ip4-config.lo \
- libnm_util_la-nm-setting-vlan.lo \
- libnm_util_la-nm-setting-ip6-config.lo \
- libnm_util_la-nm-setting-ppp.lo \
- libnm_util_la-nm-setting-pppoe.lo \
- libnm_util_la-nm-setting-serial.lo \
- libnm_util_la-nm-setting-gsm.lo \
- libnm_util_la-nm-setting-cdma.lo \
- libnm_util_la-nm-setting-olpc-mesh.lo \
- libnm_util_la-nm-setting-wimax.lo \
- libnm_util_la-nm-setting-wired.lo \
- libnm_util_la-nm-setting-wireless.lo \
- libnm_util_la-nm-setting-wireless-security.lo \
- libnm_util_la-nm-setting-vpn.lo \
- libnm_util_la-nm-utils-enum-types.lo libnm_util_la-nm-utils.lo
+am__objects_1 = crypto.lo nm-connection.lo \
+ nm-param-spec-specialized.lo nm-setting.lo nm-setting-8021x.lo \
+ nm-setting-adsl.lo nm-setting-bluetooth.lo nm-setting-bond.lo \
+ nm-setting-team.lo nm-setting-team-port.lo \
+ nm-setting-bridge.lo nm-setting-bridge-port.lo \
+ nm-setting-connection.lo nm-setting-dcb.lo \
+ nm-setting-infiniband.lo nm-setting-ip4-config.lo \
+ nm-setting-vlan.lo nm-setting-ip6-config.lo nm-setting-ppp.lo \
+ nm-setting-pppoe.lo nm-setting-serial.lo nm-setting-generic.lo \
+ nm-setting-gsm.lo nm-setting-cdma.lo nm-setting-olpc-mesh.lo \
+ nm-setting-wimax.lo nm-setting-wired.lo nm-setting-wireless.lo \
+ nm-setting-wireless-security.lo nm-setting-vpn.lo \
+ nm-utils-enum-types.lo nm-utils.lo nm-value-transforms.lo
am__objects_2 =
-@WITH_GNUTLS_TRUE@am__objects_3 = libnm_util_la-crypto_gnutls.lo
-@WITH_NSS_TRUE@am__objects_4 = libnm_util_la-crypto_nss.lo
+@WITH_GNUTLS_TRUE@am__objects_3 = crypto_gnutls.lo
+@WITH_NSS_TRUE@am__objects_4 = crypto_nss.lo
am_libnm_util_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
$(am__objects_3) $(am__objects_4)
libnm_util_la_OBJECTS = $(am_libnm_util_la_OBJECTS)
@@ -210,10 +199,8 @@ libtest_crypto_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
am__libtest_crypto_la_SOURCES_DIST = crypto.c crypto_gnutls.c \
crypto_nss.c
-@WITH_GNUTLS_TRUE@am__objects_5 = libtest_crypto_la-crypto_gnutls.lo
-@WITH_NSS_TRUE@am__objects_6 = libtest_crypto_la-crypto_nss.lo
-am_libtest_crypto_la_OBJECTS = libtest_crypto_la-crypto.lo \
- $(am__objects_5) $(am__objects_6)
+am_libtest_crypto_la_OBJECTS = crypto.lo $(am__objects_3) \
+ $(am__objects_4)
libtest_crypto_la_OBJECTS = $(am_libtest_crypto_la_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -346,12 +333,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -376,7 +366,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -421,12 +410,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -443,6 +436,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -470,11 +465,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -489,6 +489,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -551,6 +552,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -561,15 +563,13 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_srcdir}/include \
- -I${top_builddir}/include
-
+AM_CPPFLAGS = -I${top_srcdir} -I${top_srcdir}/include \
+ -I${top_builddir}/include -DG_LOG_DOMAIN=\""libnm-util"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) $(UUID_CFLAGS) $(am__append_1) $(am__append_2)
lib_LTLIBRARIES = libnm-util.la
-libnm_util_la_CPPFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS) $(UUID_CFLAGS) \
- $(AM_CPPFLAGS) $(am__append_2) $(am__append_5)
libnm_util_include_HEADERS = \
nm-connection.h \
nm-setting.h \
@@ -577,9 +577,12 @@ libnm_util_include_HEADERS = \
nm-setting-adsl.h \
nm-setting-bluetooth.h \
nm-setting-bond.h \
+ nm-setting-team.h \
+ nm-setting-team-port.h \
nm-setting-bridge.h \
nm-setting-bridge-port.h \
nm-setting-connection.h \
+ nm-setting-dcb.h \
nm-setting-infiniband.h \
nm-setting-ip4-config.h \
nm-setting-vlan.h \
@@ -587,6 +590,7 @@ libnm_util_include_HEADERS = \
nm-setting-ppp.h \
nm-setting-pppoe.h \
nm-setting-serial.h \
+ nm-setting-generic.h \
nm-setting-gsm.h \
nm-setting-cdma.h \
nm-setting-olpc-mesh.h \
@@ -601,7 +605,7 @@ libnm_util_include_HEADERS = \
libnm_util_la_private_headers = \
crypto.h \
nm-param-spec-specialized.h \
- nm-utils-private.h \
+ nm-utils-private.h \
nm-setting-private.h
libnm_util_la_csources = \
@@ -613,9 +617,12 @@ libnm_util_la_csources = \
nm-setting-adsl.c \
nm-setting-bluetooth.c \
nm-setting-bond.c \
+ nm-setting-team.c \
+ nm-setting-team-port.c \
nm-setting-bridge.c \
nm-setting-bridge-port.c \
nm-setting-connection.c \
+ nm-setting-dcb.c \
nm-setting-infiniband.c \
nm-setting-ip4-config.c \
nm-setting-vlan.c \
@@ -623,6 +630,7 @@ libnm_util_la_csources = \
nm-setting-ppp.c \
nm-setting-pppoe.c \
nm-setting-serial.c \
+ nm-setting-generic.c \
nm-setting-gsm.c \
nm-setting-cdma.c \
nm-setting-olpc-mesh.c \
@@ -632,21 +640,22 @@ libnm_util_la_csources = \
nm-setting-wireless-security.c \
nm-setting-vpn.c \
nm-utils-enum-types.c \
- nm-utils.c
+ nm-utils.c \
+ nm-value-transforms.c
libnm_util_la_SOURCES = $(libnm_util_la_csources) \
- $(libnm_util_la_private_headers) $(am__append_1) \
- $(am__append_4)
+ $(libnm_util_la_private_headers) $(am__append_3) \
+ $(am__append_5)
GLIB_GENERATED = nm-utils-enum-types.h nm-utils-enum-types.c
BUILT_SOURCES = $(GLIB_GENERATED)
nm_utils_enum_types_sources = $(libnm_util_include_HEADERS)
GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
libnm_util_la_LIBADD = $(GLIB_LIBS) $(DBUS_LIBS) $(UUID_LIBS) \
- $(am__append_3) $(am__append_6)
+ $(am__append_4) $(am__append_6)
SYMBOL_VIS_FILE = $(srcdir)/libnm-util.ver
libnm_util_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
- -version-info "6:0:4"
+ -version-info "8:0:6"
libnm_util_includedir = $(includedir)/NetworkManager
@@ -654,17 +663,15 @@ libnm_util_includedir = $(includedir)/NetworkManager
# Crypto test library
###########################################
noinst_LTLIBRARIES = libtest-crypto.la
-libtest_crypto_la_SOURCES = crypto.c $(am__append_7) $(am__append_10)
-libtest_crypto_la_CPPFLAGS = $(GLIB_CFLAGS) $(AM_CPPFLAGS) \
- $(am__append_8) $(am__append_11)
-libtest_crypto_la_LIBADD = $(GLIB_LIBS) $(am__append_9) \
- $(am__append_12)
+libtest_crypto_la_SOURCES = crypto.c $(am__append_7) $(am__append_9)
+libtest_crypto_la_LIBADD = $(GLIB_LIBS) $(am__append_8) \
+ $(am__append_10)
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libnm-util.pc
DISTCLEANFILES = libnm-util.pc
-CLEANFILES = $(am__append_14)
+CLEANFILES = $(am__append_12)
EXTRA_DIST = libnm-util.pc.in libnm-util.ver
-INTROSPECTION_GIRS = $(am__append_13)
+INTROSPECTION_GIRS = $(am__append_11)
INTROSPECTION_SCANNER_ARGS = --add-include-path=$(srcdir)
INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
@HAVE_INTROSPECTION_TRUE@introspection_sources = $(libnm_util_include_HEADERS) $(libnm_util_la_csources) $(top_srcdir)/include/NetworkManager.h $(top_srcdir)/include/NetworkManagerVPN.h
@@ -775,39 +782,41 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-crypto.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-crypto_gnutls.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-crypto_nss.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-param-spec-specialized.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-8021x.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-adsl.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-bluetooth.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-bond.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-bridge-port.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-bridge.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-cdma.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-gsm.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-infiniband.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-ip4-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-ip6-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-olpc-mesh.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-ppp.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-pppoe.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-serial.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-vlan.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-vpn.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-wimax.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-wired.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-wireless-security.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting-wireless.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-setting.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-utils-enum-types.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_util_la-nm-utils.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_crypto_la-crypto.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_crypto_la-crypto_gnutls.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_crypto_la-crypto_nss.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto_gnutls.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto_nss.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-param-spec-specialized.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-8021x.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-adsl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-bluetooth.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-bond.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-bridge-port.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-bridge.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-cdma.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-dcb.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-generic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-gsm.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-infiniband.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-ip4-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-ip6-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-olpc-mesh.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-ppp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-pppoe.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-serial.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-team-port.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-team.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-vlan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-vpn.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-wimax.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-wired.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-wireless-security.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting-wireless.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-setting.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-utils-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-value-transforms.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -830,237 +839,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_util_la-crypto.lo: crypto.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-crypto.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-crypto.Tpo -c -o libnm_util_la-crypto.lo `test -f 'crypto.c' || echo '$(srcdir)/'`crypto.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-crypto.Tpo $(DEPDIR)/libnm_util_la-crypto.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto.c' object='libnm_util_la-crypto.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-crypto.lo `test -f 'crypto.c' || echo '$(srcdir)/'`crypto.c
-
-libnm_util_la-nm-connection.lo: nm-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-connection.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-connection.Tpo -c -o libnm_util_la-nm-connection.lo `test -f 'nm-connection.c' || echo '$(srcdir)/'`nm-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-connection.Tpo $(DEPDIR)/libnm_util_la-nm-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-connection.c' object='libnm_util_la-nm-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-connection.lo `test -f 'nm-connection.c' || echo '$(srcdir)/'`nm-connection.c
-
-libnm_util_la-nm-param-spec-specialized.lo: nm-param-spec-specialized.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-param-spec-specialized.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-param-spec-specialized.Tpo -c -o libnm_util_la-nm-param-spec-specialized.lo `test -f 'nm-param-spec-specialized.c' || echo '$(srcdir)/'`nm-param-spec-specialized.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-param-spec-specialized.Tpo $(DEPDIR)/libnm_util_la-nm-param-spec-specialized.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-param-spec-specialized.c' object='libnm_util_la-nm-param-spec-specialized.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-param-spec-specialized.lo `test -f 'nm-param-spec-specialized.c' || echo '$(srcdir)/'`nm-param-spec-specialized.c
-
-libnm_util_la-nm-setting.lo: nm-setting.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting.Tpo -c -o libnm_util_la-nm-setting.lo `test -f 'nm-setting.c' || echo '$(srcdir)/'`nm-setting.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting.Tpo $(DEPDIR)/libnm_util_la-nm-setting.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting.c' object='libnm_util_la-nm-setting.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting.lo `test -f 'nm-setting.c' || echo '$(srcdir)/'`nm-setting.c
-
-libnm_util_la-nm-setting-8021x.lo: nm-setting-8021x.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-8021x.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-8021x.Tpo -c -o libnm_util_la-nm-setting-8021x.lo `test -f 'nm-setting-8021x.c' || echo '$(srcdir)/'`nm-setting-8021x.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-8021x.Tpo $(DEPDIR)/libnm_util_la-nm-setting-8021x.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-8021x.c' object='libnm_util_la-nm-setting-8021x.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-8021x.lo `test -f 'nm-setting-8021x.c' || echo '$(srcdir)/'`nm-setting-8021x.c
-
-libnm_util_la-nm-setting-adsl.lo: nm-setting-adsl.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-adsl.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-adsl.Tpo -c -o libnm_util_la-nm-setting-adsl.lo `test -f 'nm-setting-adsl.c' || echo '$(srcdir)/'`nm-setting-adsl.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-adsl.Tpo $(DEPDIR)/libnm_util_la-nm-setting-adsl.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-adsl.c' object='libnm_util_la-nm-setting-adsl.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-adsl.lo `test -f 'nm-setting-adsl.c' || echo '$(srcdir)/'`nm-setting-adsl.c
-
-libnm_util_la-nm-setting-bluetooth.lo: nm-setting-bluetooth.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-bluetooth.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-bluetooth.Tpo -c -o libnm_util_la-nm-setting-bluetooth.lo `test -f 'nm-setting-bluetooth.c' || echo '$(srcdir)/'`nm-setting-bluetooth.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-bluetooth.Tpo $(DEPDIR)/libnm_util_la-nm-setting-bluetooth.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-bluetooth.c' object='libnm_util_la-nm-setting-bluetooth.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-bluetooth.lo `test -f 'nm-setting-bluetooth.c' || echo '$(srcdir)/'`nm-setting-bluetooth.c
-
-libnm_util_la-nm-setting-bond.lo: nm-setting-bond.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-bond.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-bond.Tpo -c -o libnm_util_la-nm-setting-bond.lo `test -f 'nm-setting-bond.c' || echo '$(srcdir)/'`nm-setting-bond.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-bond.Tpo $(DEPDIR)/libnm_util_la-nm-setting-bond.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-bond.c' object='libnm_util_la-nm-setting-bond.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-bond.lo `test -f 'nm-setting-bond.c' || echo '$(srcdir)/'`nm-setting-bond.c
-
-libnm_util_la-nm-setting-bridge.lo: nm-setting-bridge.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-bridge.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-bridge.Tpo -c -o libnm_util_la-nm-setting-bridge.lo `test -f 'nm-setting-bridge.c' || echo '$(srcdir)/'`nm-setting-bridge.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-bridge.Tpo $(DEPDIR)/libnm_util_la-nm-setting-bridge.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-bridge.c' object='libnm_util_la-nm-setting-bridge.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-bridge.lo `test -f 'nm-setting-bridge.c' || echo '$(srcdir)/'`nm-setting-bridge.c
-
-libnm_util_la-nm-setting-bridge-port.lo: nm-setting-bridge-port.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-bridge-port.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-bridge-port.Tpo -c -o libnm_util_la-nm-setting-bridge-port.lo `test -f 'nm-setting-bridge-port.c' || echo '$(srcdir)/'`nm-setting-bridge-port.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-bridge-port.Tpo $(DEPDIR)/libnm_util_la-nm-setting-bridge-port.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-bridge-port.c' object='libnm_util_la-nm-setting-bridge-port.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-bridge-port.lo `test -f 'nm-setting-bridge-port.c' || echo '$(srcdir)/'`nm-setting-bridge-port.c
-
-libnm_util_la-nm-setting-connection.lo: nm-setting-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-connection.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-connection.Tpo -c -o libnm_util_la-nm-setting-connection.lo `test -f 'nm-setting-connection.c' || echo '$(srcdir)/'`nm-setting-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-connection.Tpo $(DEPDIR)/libnm_util_la-nm-setting-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-connection.c' object='libnm_util_la-nm-setting-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-connection.lo `test -f 'nm-setting-connection.c' || echo '$(srcdir)/'`nm-setting-connection.c
-
-libnm_util_la-nm-setting-infiniband.lo: nm-setting-infiniband.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-infiniband.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-infiniband.Tpo -c -o libnm_util_la-nm-setting-infiniband.lo `test -f 'nm-setting-infiniband.c' || echo '$(srcdir)/'`nm-setting-infiniband.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-infiniband.Tpo $(DEPDIR)/libnm_util_la-nm-setting-infiniband.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-infiniband.c' object='libnm_util_la-nm-setting-infiniband.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-infiniband.lo `test -f 'nm-setting-infiniband.c' || echo '$(srcdir)/'`nm-setting-infiniband.c
-
-libnm_util_la-nm-setting-ip4-config.lo: nm-setting-ip4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-ip4-config.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-ip4-config.Tpo -c -o libnm_util_la-nm-setting-ip4-config.lo `test -f 'nm-setting-ip4-config.c' || echo '$(srcdir)/'`nm-setting-ip4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-ip4-config.Tpo $(DEPDIR)/libnm_util_la-nm-setting-ip4-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-ip4-config.c' object='libnm_util_la-nm-setting-ip4-config.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-ip4-config.lo `test -f 'nm-setting-ip4-config.c' || echo '$(srcdir)/'`nm-setting-ip4-config.c
-
-libnm_util_la-nm-setting-vlan.lo: nm-setting-vlan.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-vlan.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-vlan.Tpo -c -o libnm_util_la-nm-setting-vlan.lo `test -f 'nm-setting-vlan.c' || echo '$(srcdir)/'`nm-setting-vlan.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-vlan.Tpo $(DEPDIR)/libnm_util_la-nm-setting-vlan.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-vlan.c' object='libnm_util_la-nm-setting-vlan.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-vlan.lo `test -f 'nm-setting-vlan.c' || echo '$(srcdir)/'`nm-setting-vlan.c
-
-libnm_util_la-nm-setting-ip6-config.lo: nm-setting-ip6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-ip6-config.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-ip6-config.Tpo -c -o libnm_util_la-nm-setting-ip6-config.lo `test -f 'nm-setting-ip6-config.c' || echo '$(srcdir)/'`nm-setting-ip6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-ip6-config.Tpo $(DEPDIR)/libnm_util_la-nm-setting-ip6-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-ip6-config.c' object='libnm_util_la-nm-setting-ip6-config.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-ip6-config.lo `test -f 'nm-setting-ip6-config.c' || echo '$(srcdir)/'`nm-setting-ip6-config.c
-
-libnm_util_la-nm-setting-ppp.lo: nm-setting-ppp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-ppp.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-ppp.Tpo -c -o libnm_util_la-nm-setting-ppp.lo `test -f 'nm-setting-ppp.c' || echo '$(srcdir)/'`nm-setting-ppp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-ppp.Tpo $(DEPDIR)/libnm_util_la-nm-setting-ppp.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-ppp.c' object='libnm_util_la-nm-setting-ppp.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-ppp.lo `test -f 'nm-setting-ppp.c' || echo '$(srcdir)/'`nm-setting-ppp.c
-
-libnm_util_la-nm-setting-pppoe.lo: nm-setting-pppoe.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-pppoe.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-pppoe.Tpo -c -o libnm_util_la-nm-setting-pppoe.lo `test -f 'nm-setting-pppoe.c' || echo '$(srcdir)/'`nm-setting-pppoe.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-pppoe.Tpo $(DEPDIR)/libnm_util_la-nm-setting-pppoe.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-pppoe.c' object='libnm_util_la-nm-setting-pppoe.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-pppoe.lo `test -f 'nm-setting-pppoe.c' || echo '$(srcdir)/'`nm-setting-pppoe.c
-
-libnm_util_la-nm-setting-serial.lo: nm-setting-serial.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-serial.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-serial.Tpo -c -o libnm_util_la-nm-setting-serial.lo `test -f 'nm-setting-serial.c' || echo '$(srcdir)/'`nm-setting-serial.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-serial.Tpo $(DEPDIR)/libnm_util_la-nm-setting-serial.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-serial.c' object='libnm_util_la-nm-setting-serial.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-serial.lo `test -f 'nm-setting-serial.c' || echo '$(srcdir)/'`nm-setting-serial.c
-
-libnm_util_la-nm-setting-gsm.lo: nm-setting-gsm.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-gsm.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-gsm.Tpo -c -o libnm_util_la-nm-setting-gsm.lo `test -f 'nm-setting-gsm.c' || echo '$(srcdir)/'`nm-setting-gsm.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-gsm.Tpo $(DEPDIR)/libnm_util_la-nm-setting-gsm.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-gsm.c' object='libnm_util_la-nm-setting-gsm.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-gsm.lo `test -f 'nm-setting-gsm.c' || echo '$(srcdir)/'`nm-setting-gsm.c
-
-libnm_util_la-nm-setting-cdma.lo: nm-setting-cdma.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-cdma.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-cdma.Tpo -c -o libnm_util_la-nm-setting-cdma.lo `test -f 'nm-setting-cdma.c' || echo '$(srcdir)/'`nm-setting-cdma.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-cdma.Tpo $(DEPDIR)/libnm_util_la-nm-setting-cdma.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-cdma.c' object='libnm_util_la-nm-setting-cdma.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-cdma.lo `test -f 'nm-setting-cdma.c' || echo '$(srcdir)/'`nm-setting-cdma.c
-
-libnm_util_la-nm-setting-olpc-mesh.lo: nm-setting-olpc-mesh.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-olpc-mesh.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-olpc-mesh.Tpo -c -o libnm_util_la-nm-setting-olpc-mesh.lo `test -f 'nm-setting-olpc-mesh.c' || echo '$(srcdir)/'`nm-setting-olpc-mesh.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-olpc-mesh.Tpo $(DEPDIR)/libnm_util_la-nm-setting-olpc-mesh.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-olpc-mesh.c' object='libnm_util_la-nm-setting-olpc-mesh.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-olpc-mesh.lo `test -f 'nm-setting-olpc-mesh.c' || echo '$(srcdir)/'`nm-setting-olpc-mesh.c
-
-libnm_util_la-nm-setting-wimax.lo: nm-setting-wimax.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-wimax.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-wimax.Tpo -c -o libnm_util_la-nm-setting-wimax.lo `test -f 'nm-setting-wimax.c' || echo '$(srcdir)/'`nm-setting-wimax.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-wimax.Tpo $(DEPDIR)/libnm_util_la-nm-setting-wimax.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-wimax.c' object='libnm_util_la-nm-setting-wimax.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-wimax.lo `test -f 'nm-setting-wimax.c' || echo '$(srcdir)/'`nm-setting-wimax.c
-
-libnm_util_la-nm-setting-wired.lo: nm-setting-wired.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-wired.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-wired.Tpo -c -o libnm_util_la-nm-setting-wired.lo `test -f 'nm-setting-wired.c' || echo '$(srcdir)/'`nm-setting-wired.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-wired.Tpo $(DEPDIR)/libnm_util_la-nm-setting-wired.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-wired.c' object='libnm_util_la-nm-setting-wired.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-wired.lo `test -f 'nm-setting-wired.c' || echo '$(srcdir)/'`nm-setting-wired.c
-
-libnm_util_la-nm-setting-wireless.lo: nm-setting-wireless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-wireless.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-wireless.Tpo -c -o libnm_util_la-nm-setting-wireless.lo `test -f 'nm-setting-wireless.c' || echo '$(srcdir)/'`nm-setting-wireless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-wireless.Tpo $(DEPDIR)/libnm_util_la-nm-setting-wireless.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-wireless.c' object='libnm_util_la-nm-setting-wireless.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-wireless.lo `test -f 'nm-setting-wireless.c' || echo '$(srcdir)/'`nm-setting-wireless.c
-
-libnm_util_la-nm-setting-wireless-security.lo: nm-setting-wireless-security.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-wireless-security.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-wireless-security.Tpo -c -o libnm_util_la-nm-setting-wireless-security.lo `test -f 'nm-setting-wireless-security.c' || echo '$(srcdir)/'`nm-setting-wireless-security.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-wireless-security.Tpo $(DEPDIR)/libnm_util_la-nm-setting-wireless-security.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-wireless-security.c' object='libnm_util_la-nm-setting-wireless-security.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-wireless-security.lo `test -f 'nm-setting-wireless-security.c' || echo '$(srcdir)/'`nm-setting-wireless-security.c
-
-libnm_util_la-nm-setting-vpn.lo: nm-setting-vpn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-setting-vpn.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-setting-vpn.Tpo -c -o libnm_util_la-nm-setting-vpn.lo `test -f 'nm-setting-vpn.c' || echo '$(srcdir)/'`nm-setting-vpn.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-setting-vpn.Tpo $(DEPDIR)/libnm_util_la-nm-setting-vpn.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-setting-vpn.c' object='libnm_util_la-nm-setting-vpn.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-setting-vpn.lo `test -f 'nm-setting-vpn.c' || echo '$(srcdir)/'`nm-setting-vpn.c
-
-libnm_util_la-nm-utils-enum-types.lo: nm-utils-enum-types.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-utils-enum-types.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-utils-enum-types.Tpo -c -o libnm_util_la-nm-utils-enum-types.lo `test -f 'nm-utils-enum-types.c' || echo '$(srcdir)/'`nm-utils-enum-types.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-utils-enum-types.Tpo $(DEPDIR)/libnm_util_la-nm-utils-enum-types.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-utils-enum-types.c' object='libnm_util_la-nm-utils-enum-types.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-utils-enum-types.lo `test -f 'nm-utils-enum-types.c' || echo '$(srcdir)/'`nm-utils-enum-types.c
-
-libnm_util_la-nm-utils.lo: nm-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-nm-utils.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-nm-utils.Tpo -c -o libnm_util_la-nm-utils.lo `test -f 'nm-utils.c' || echo '$(srcdir)/'`nm-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-nm-utils.Tpo $(DEPDIR)/libnm_util_la-nm-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-utils.c' object='libnm_util_la-nm-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-nm-utils.lo `test -f 'nm-utils.c' || echo '$(srcdir)/'`nm-utils.c
-
-libnm_util_la-crypto_gnutls.lo: crypto_gnutls.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-crypto_gnutls.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-crypto_gnutls.Tpo -c -o libnm_util_la-crypto_gnutls.lo `test -f 'crypto_gnutls.c' || echo '$(srcdir)/'`crypto_gnutls.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-crypto_gnutls.Tpo $(DEPDIR)/libnm_util_la-crypto_gnutls.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_gnutls.c' object='libnm_util_la-crypto_gnutls.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-crypto_gnutls.lo `test -f 'crypto_gnutls.c' || echo '$(srcdir)/'`crypto_gnutls.c
-
-libnm_util_la-crypto_nss.lo: crypto_nss.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_util_la-crypto_nss.lo -MD -MP -MF $(DEPDIR)/libnm_util_la-crypto_nss.Tpo -c -o libnm_util_la-crypto_nss.lo `test -f 'crypto_nss.c' || echo '$(srcdir)/'`crypto_nss.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_util_la-crypto_nss.Tpo $(DEPDIR)/libnm_util_la-crypto_nss.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_nss.c' object='libnm_util_la-crypto_nss.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_util_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_util_la-crypto_nss.lo `test -f 'crypto_nss.c' || echo '$(srcdir)/'`crypto_nss.c
-
-libtest_crypto_la-crypto.lo: crypto.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_crypto_la-crypto.lo -MD -MP -MF $(DEPDIR)/libtest_crypto_la-crypto.Tpo -c -o libtest_crypto_la-crypto.lo `test -f 'crypto.c' || echo '$(srcdir)/'`crypto.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_crypto_la-crypto.Tpo $(DEPDIR)/libtest_crypto_la-crypto.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto.c' object='libtest_crypto_la-crypto.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_crypto_la-crypto.lo `test -f 'crypto.c' || echo '$(srcdir)/'`crypto.c
-
-libtest_crypto_la-crypto_gnutls.lo: crypto_gnutls.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_crypto_la-crypto_gnutls.lo -MD -MP -MF $(DEPDIR)/libtest_crypto_la-crypto_gnutls.Tpo -c -o libtest_crypto_la-crypto_gnutls.lo `test -f 'crypto_gnutls.c' || echo '$(srcdir)/'`crypto_gnutls.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_crypto_la-crypto_gnutls.Tpo $(DEPDIR)/libtest_crypto_la-crypto_gnutls.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_gnutls.c' object='libtest_crypto_la-crypto_gnutls.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_crypto_la-crypto_gnutls.lo `test -f 'crypto_gnutls.c' || echo '$(srcdir)/'`crypto_gnutls.c
-
-libtest_crypto_la-crypto_nss.lo: crypto_nss.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_crypto_la-crypto_nss.lo -MD -MP -MF $(DEPDIR)/libtest_crypto_la-crypto_nss.Tpo -c -o libtest_crypto_la-crypto_nss.lo `test -f 'crypto_nss.c' || echo '$(srcdir)/'`crypto_nss.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_crypto_la-crypto_nss.Tpo $(DEPDIR)/libtest_crypto_la-crypto_nss.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_nss.c' object='libtest_crypto_la-crypto_nss.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_crypto_la-crypto_nss.lo `test -f 'crypto_nss.c' || echo '$(srcdir)/'`crypto_nss.c
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/libnm-util/crypto.c b/libnm-util/crypto.c
index 0cad7f60e..0ac4fbacd 100644
--- a/libnm-util/crypto.c
+++ b/libnm-util/crypto.c
@@ -148,13 +148,6 @@ parse_old_openssl_key_file (const GByteArray *contents,
}
str = g_string_new_len (NULL, end - start);
- if (!str) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to store PEM file data."));
- goto parse_error;
- }
-
for (ln = lines; *ln; ln++) {
char *p = *ln;
@@ -213,6 +206,8 @@ parse_old_openssl_key_file (const GByteArray *contents,
cipher = g_strdup (p);
} else if (!strcasecmp (p, "DES-CBC")) {
cipher = g_strdup (p);
+ } else if (!strcasecmp (p, "AES-128-CBC")) {
+ cipher = g_strdup (p);
} else {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_UNKNOWN_KEY_TYPE,
@@ -308,15 +303,9 @@ parse_pkcs8_key_file (const GByteArray *contents,
if (der && length) {
key = g_byte_array_sized_new (length);
- if (key) {
- g_byte_array_append (key, der, length);
- g_assert (key->len == length);
- *out_encrypted = encrypted;
- } else {
- g_set_error_literal (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to store private key data."));
- }
+ g_byte_array_append (key, der, length);
+ g_assert (key->len == length);
+ *out_encrypted = encrypted;
} else {
g_set_error_literal (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_DECODE_FAILED,
@@ -336,14 +325,8 @@ file_to_g_byte_array (const char *filename, GError **error)
if (g_file_get_contents (filename, &contents, &length, error)) {
array = g_byte_array_sized_new (length);
- if (array) {
- g_byte_array_append (array, (guint8 *) contents, length);
- g_assert (array->len == length);
- } else {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to store certificate data."));
- }
+ g_byte_array_append (array, (guint8 *) contents, length);
+ g_assert (array->len == length);
g_free (contents);
}
return array;
@@ -374,12 +357,6 @@ convert_iv (const char *src,
num /= 2;
c = g_malloc0 (num + 1);
- if (c == NULL) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to store the IV."));
- return NULL;
- }
conv[2] = '\0';
for (i = 0; i < num; i++) {
@@ -403,12 +380,12 @@ error:
}
static char *
-make_des_key (const char *cipher,
- const char *salt,
- const gsize salt_len,
- const char *password,
- gsize *out_len,
- GError **error)
+make_des_aes_key (const char *cipher,
+ const char *salt,
+ const gsize salt_len,
+ const char *password,
+ gsize *out_len,
+ GError **error)
{
char *key;
guint32 digest_len;
@@ -423,6 +400,8 @@ make_des_key (const char *cipher,
digest_len = 24;
else if (!strcmp (cipher, "DES-CBC"))
digest_len = 8;
+ else if (!strcmp (cipher, "AES-128-CBC"))
+ digest_len = 16;
else {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_UNKNOWN_CIPHER,
@@ -431,13 +410,10 @@ make_des_key (const char *cipher,
return NULL;
}
- key = g_malloc0 (digest_len + 1);
- if (!key) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to decrypt private key."));
+ if (password[0] == '\0')
return NULL;
- }
+
+ key = g_malloc0 (digest_len + 1);
if (!crypto_md5_hash (salt,
salt_len,
@@ -482,8 +458,8 @@ decrypt_key (const char *cipher,
if (!bin_iv)
return NULL;
- /* Convert the PIN and IV into a DES key */
- key = make_des_key (cipher, bin_iv, bin_iv_len, password, &key_len, error);
+ /* Convert the password and IV into a DES or AES key */
+ key = make_des_aes_key (cipher, bin_iv, bin_iv_len, password, &key_len, error);
if (!key || !key_len)
goto out;
@@ -495,13 +471,7 @@ decrypt_key (const char *cipher,
error);
if (output && decrypted_len) {
decrypted = g_byte_array_sized_new (decrypted_len);
- if (decrypted)
- g_byte_array_append (decrypted, (guint8 *) output, decrypted_len);
- else {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to store decrypted private key."));
- }
+ g_byte_array_append (decrypted, (guint8 *) output, decrypted_len);
}
out:
@@ -622,14 +592,8 @@ extract_pem_cert_data (GByteArray *contents, GError **error)
if (der && length) {
cert = g_byte_array_sized_new (length);
- if (cert) {
- g_byte_array_append (cert, der, length);
- g_assert (cert->len == length);
- } else {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to store certificate data."));
- }
+ g_byte_array_append (cert, der, length);
+ g_assert (cert->len == length);
} else {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_DECODE_FAILED,
diff --git a/libnm-util/crypto.h b/libnm-util/crypto.h
index 482ed0876..1cbf61c12 100644
--- a/libnm-util/crypto.h
+++ b/libnm-util/crypto.h
@@ -18,7 +18,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
*/
#ifndef __CRYPTO_H__
@@ -29,6 +29,7 @@
#define MD5_HASH_LEN 20
#define CIPHER_DES_EDE3_CBC "DES-EDE3-CBC"
#define CIPHER_DES_CBC "DES-CBC"
+#define CIPHER_AES_CBC "AES-128-CBC"
enum {
NM_CRYPTO_ERR_NONE = 0,
diff --git a/libnm-util/crypto_gnutls.c b/libnm-util/crypto_gnutls.c
index d82230b08..e829c23c1 100644
--- a/libnm-util/crypto_gnutls.c
+++ b/libnm-util/crypto_gnutls.c
@@ -141,6 +141,9 @@ crypto_decrypt (const char *cipher,
} else if (!strcmp (cipher, CIPHER_DES_CBC)) {
cipher_mech = GCRY_CIPHER_DES;
real_iv_len = SALT_LEN;
+ } else if (!strcmp (cipher, CIPHER_AES_CBC)) {
+ cipher_mech = GCRY_CIPHER_AES;
+ real_iv_len = 16;
} else {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_UNKNOWN_CIPHER,
@@ -158,12 +161,6 @@ crypto_decrypt (const char *cipher,
}
output = g_malloc0 (data->len);
- if (!output) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory for decrypted key buffer."));
- return NULL;
- }
err = gcry_cipher_open (&ctx, cipher_mech, GCRY_CIPHER_MODE_CBC, 0);
if (err) {
@@ -256,10 +253,15 @@ crypto_encrypt (const char *cipher,
gsize padded_buf_len, pad_len, output_len;
char *padded_buf = NULL;
guint32 i;
+ gsize salt_len;
- if (!strcmp (cipher, CIPHER_DES_EDE3_CBC))
+ if (!strcmp (cipher, CIPHER_DES_EDE3_CBC)) {
cipher_mech = GCRY_CIPHER_3DES;
- else {
+ salt_len = SALT_LEN;
+ } else if (!strcmp (cipher, CIPHER_AES_CBC)) {
+ cipher_mech = GCRY_CIPHER_AES;
+ salt_len = iv_len;
+ } else {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_UNKNOWN_CIPHER,
_("Private key cipher '%s' was unknown."),
@@ -279,12 +281,6 @@ crypto_encrypt (const char *cipher,
padded_buf[data->len + i] = (guint8) (pad_len & 0xFF);
output = g_malloc0 (output_len);
- if (!output) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Could not allocate memory for encrypting."));
- return NULL;
- }
err = gcry_cipher_open (&ctx, cipher_mech, GCRY_CIPHER_MODE_CBC, 0);
if (err) {
@@ -305,7 +301,7 @@ crypto_encrypt (const char *cipher,
}
/* gcrypt only wants 8 bytes of the IV (same as the DES block length) */
- err = gcry_cipher_setiv (ctx, iv, SALT_LEN);
+ err = gcry_cipher_setiv (ctx, iv, salt_len);
if (err) {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_CIPHER_SET_IV_FAILED,
diff --git a/libnm-util/crypto_nss.c b/libnm-util/crypto_nss.c
index 5a7aa30ba..af3de6664 100644
--- a/libnm-util/crypto_nss.c
+++ b/libnm-util/crypto_nss.c
@@ -161,6 +161,9 @@ crypto_decrypt (const char *cipher,
} else if (!strcmp (cipher, CIPHER_DES_CBC)) {
cipher_mech = CKM_DES_CBC_PAD;
real_iv_len = 8;
+ } else if (!strcmp (cipher, CIPHER_AES_CBC)) {
+ cipher_mech = CKM_AES_CBC_PAD;
+ real_iv_len = 16;
} else {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_UNKNOWN_CIPHER,
@@ -178,12 +181,6 @@ crypto_decrypt (const char *cipher,
}
output = g_malloc0 (data->len);
- if (!output) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory for decrypted key buffer."));
- return NULL;
- }
slot = PK11_GetBestSlot (cipher_mech, NULL);
if (!slot) {
@@ -326,6 +323,8 @@ crypto_encrypt (const char *cipher,
if (!strcmp (cipher, CIPHER_DES_EDE3_CBC))
cipher_mech = CKM_DES3_CBC_PAD;
+ else if (!strcmp (cipher, CIPHER_AES_CBC))
+ cipher_mech = CKM_AES_CBC_PAD;
else {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_UNKNOWN_CIPHER,
@@ -346,12 +345,6 @@ crypto_encrypt (const char *cipher,
padded_buf[data->len + i] = (guint8) (pad_len & 0xFF);
output = g_malloc0 (output_len);
- if (!output) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Could not allocate memory for encrypting."));
- return NULL;
- }
slot = PK11_GetBestSlot (cipher_mech, NULL);
if (!slot) {
@@ -414,11 +407,8 @@ out:
if (slot)
PK11_FreeSlot (slot);
- if (padded_buf) {
- memset (padded_buf, 0, padded_buf_len);
- g_free (padded_buf);
- padded_buf = NULL;
- }
+ memset (padded_buf, 0, padded_buf_len);
+ g_free (padded_buf);
if (!success) {
memset (output, 0, output_len);
diff --git a/libnm-util/libnm-util.pc.in b/libnm-util/libnm-util.pc.in
index a6e8ee595..4f1ff3ef0 100644
--- a/libnm-util/libnm-util.pc.in
+++ b/libnm-util/libnm-util.pc.in
@@ -6,7 +6,7 @@ includedir=@includedir@
Name: libnm-util
Description: Convenience library for clients of NetworkManager
Version: @VERSION@
-Requires: glib-2.0 dbus-glib-1
+Requires: NetworkManager >= @VERSION@ glib-2.0 dbus-glib-1
Cflags: -I${includedir}/NetworkManager
Libs: -L${libdir} -lnm-util
diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver
index 04f2a9119..e14f08d90 100644
--- a/libnm-util/libnm-util.ver
+++ b/libnm-util/libnm-util.ver
@@ -11,6 +11,7 @@ global:
nm_connection_error_get_type;
nm_connection_error_quark;
nm_connection_for_each_setting_value;
+ nm_connection_get_connection_type;
nm_connection_get_id;
nm_connection_get_path;
nm_connection_get_setting;
@@ -23,6 +24,8 @@ global:
nm_connection_get_setting_by_name;
nm_connection_get_setting_cdma;
nm_connection_get_setting_connection;
+ nm_connection_get_setting_dcb;
+ nm_connection_get_setting_generic;
nm_connection_get_setting_gsm;
nm_connection_get_setting_infiniband;
nm_connection_get_setting_ip4_config;
@@ -31,6 +34,8 @@ global:
nm_connection_get_setting_ppp;
nm_connection_get_setting_pppoe;
nm_connection_get_setting_serial;
+ nm_connection_get_setting_team;
+ nm_connection_get_setting_team_port;
nm_connection_get_setting_vlan;
nm_connection_get_setting_vpn;
nm_connection_get_setting_wimax;
@@ -39,6 +44,7 @@ global:
nm_connection_get_setting_wireless_security;
nm_connection_get_type;
nm_connection_get_uuid;
+ nm_connection_get_virtual_device_description;
nm_connection_get_virtual_iface_name;
nm_connection_is_type;
nm_connection_lookup_setting_type;
@@ -48,6 +54,7 @@ global:
nm_connection_new_from_hash;
nm_connection_remove_setting;
nm_connection_replace_settings;
+ nm_connection_replace_settings_from_connection;
nm_connection_set_path;
nm_connection_to_hash;
nm_connection_update_secrets;
@@ -166,8 +173,11 @@ global:
nm_setting_802_1x_get_type;
nm_setting_802_1x_new;
nm_setting_802_1x_remove_altsubject_match;
+ nm_setting_802_1x_remove_altsubject_match_by_value;
nm_setting_802_1x_remove_eap_method;
+ nm_setting_802_1x_remove_eap_method_by_value;
nm_setting_802_1x_remove_phase2_altsubject_match;
+ nm_setting_802_1x_remove_phase2_altsubject_match_by_value;
nm_setting_802_1x_set_ca_cert;
nm_setting_802_1x_set_client_cert;
nm_setting_802_1x_set_phase2_ca_cert;
@@ -203,12 +213,14 @@ global:
nm_setting_bond_get_valid_options;
nm_setting_bond_new;
nm_setting_bond_remove_option;
+ nm_setting_bond_validate_option;
nm_setting_bridge_error_get_type;
nm_setting_bridge_error_quark;
nm_setting_bridge_get_ageing_time;
nm_setting_bridge_get_forward_delay;
nm_setting_bridge_get_hello_time;
nm_setting_bridge_get_interface_name;
+ nm_setting_bridge_get_mac_address;
nm_setting_bridge_get_max_age;
nm_setting_bridge_get_priority;
nm_setting_bridge_get_stp;
@@ -239,7 +251,9 @@ global:
nm_setting_connection_error_quark;
nm_setting_connection_get_autoconnect;
nm_setting_connection_get_connection_type;
+ nm_setting_connection_get_gateway_ping_timeout;
nm_setting_connection_get_id;
+ nm_setting_connection_get_interface_name;
nm_setting_connection_get_master;
nm_setting_connection_get_num_permissions;
nm_setting_connection_get_num_secondaries;
@@ -255,13 +269,45 @@ global:
nm_setting_connection_new;
nm_setting_connection_permissions_user_allowed;
nm_setting_connection_remove_permission;
+ nm_setting_connection_remove_permission_by_value;
nm_setting_connection_remove_secondary;
+ nm_setting_connection_remove_secondary_by_value;
+ nm_setting_dcb_error_get_type;
+ nm_setting_dcb_error_quark;
+ nm_setting_dcb_flags_get_type;
+ nm_setting_dcb_get_app_fcoe_flags;
+ nm_setting_dcb_get_app_fcoe_mode;
+ nm_setting_dcb_get_app_fcoe_priority;
+ nm_setting_dcb_get_app_fip_flags;
+ nm_setting_dcb_get_app_fip_priority;
+ nm_setting_dcb_get_app_iscsi_flags;
+ nm_setting_dcb_get_app_iscsi_priority;
+ nm_setting_dcb_get_priority_bandwidth;
+ nm_setting_dcb_get_priority_flow_control;
+ nm_setting_dcb_get_priority_flow_control_flags;
+ nm_setting_dcb_get_priority_group_bandwidth;
+ nm_setting_dcb_get_priority_group_flags;
+ nm_setting_dcb_get_priority_group_id;
+ nm_setting_dcb_get_priority_strict_bandwidth;
+ nm_setting_dcb_get_priority_traffic_class;
+ nm_setting_dcb_get_type;
+ nm_setting_dcb_new;
+ nm_setting_dcb_set_priority_bandwidth;
+ nm_setting_dcb_set_priority_flow_control;
+ nm_setting_dcb_set_priority_group_bandwidth;
+ nm_setting_dcb_set_priority_group_id;
+ nm_setting_dcb_set_priority_strict_bandwidth;
+ nm_setting_dcb_set_priority_traffic_class;
nm_setting_diff;
nm_setting_diff_result_get_type;
nm_setting_duplicate;
nm_setting_enumerate_values;
nm_setting_error_get_type;
nm_setting_error_quark;
+ nm_setting_generic_error_get_type;
+ nm_setting_generic_error_quark;
+ nm_setting_generic_get_type;
+ nm_setting_generic_new;
nm_setting_get_name;
nm_setting_get_secret_flags;
nm_setting_get_type;
@@ -288,6 +334,8 @@ global:
nm_setting_infiniband_error_quark;
nm_setting_infiniband_get_mac_address;
nm_setting_infiniband_get_mtu;
+ nm_setting_infiniband_get_p_key;
+ nm_setting_infiniband_get_parent;
nm_setting_infiniband_get_transport_mode;
nm_setting_infiniband_get_type;
nm_setting_infiniband_new;
@@ -320,9 +368,13 @@ global:
nm_setting_ip4_config_get_type;
nm_setting_ip4_config_new;
nm_setting_ip4_config_remove_address;
+ nm_setting_ip4_config_remove_address_by_value;
nm_setting_ip4_config_remove_dns;
+ nm_setting_ip4_config_remove_dns_by_value;
nm_setting_ip4_config_remove_dns_search;
+ nm_setting_ip4_config_remove_dns_search_by_value;
nm_setting_ip4_config_remove_route;
+ nm_setting_ip4_config_remove_route_by_value;
nm_setting_ip6_config_add_address;
nm_setting_ip6_config_add_dns;
nm_setting_ip6_config_add_dns_search;
@@ -352,9 +404,13 @@ global:
nm_setting_ip6_config_new;
nm_setting_ip6_config_privacy_get_type;
nm_setting_ip6_config_remove_address;
+ nm_setting_ip6_config_remove_address_by_value;
nm_setting_ip6_config_remove_dns;
+ nm_setting_ip6_config_remove_dns_by_value;
nm_setting_ip6_config_remove_dns_search;
+ nm_setting_ip6_config_remove_dns_search_by_value;
nm_setting_ip6_config_remove_route;
+ nm_setting_ip6_config_remove_route_by_value;
nm_setting_need_secrets;
nm_setting_new_from_hash;
nm_setting_olpc_mesh_error_get_type;
@@ -405,6 +461,17 @@ global:
nm_setting_serial_get_type;
nm_setting_serial_new;
nm_setting_set_secret_flags;
+ nm_setting_team_error_get_type;
+ nm_setting_team_error_quark;
+ nm_setting_team_get_config;
+ nm_setting_team_get_interface_name;
+ nm_setting_team_get_type;
+ nm_setting_team_new;
+ nm_setting_team_port_error_get_type;
+ nm_setting_team_port_error_quark;
+ nm_setting_team_port_get_config;
+ nm_setting_team_port_get_type;
+ nm_setting_team_port_new;
nm_setting_to_hash;
nm_setting_to_string;
nm_setting_update_secrets;
@@ -423,6 +490,8 @@ global:
nm_setting_vlan_get_type;
nm_setting_vlan_new;
nm_setting_vlan_remove_priority;
+ nm_setting_vlan_remove_priority_by_value;
+ nm_setting_vlan_remove_priority_str_by_value;
nm_setting_vpn_add_data_item;
nm_setting_vpn_add_secret;
nm_setting_vpn_error_get_type;
@@ -445,7 +514,9 @@ global:
nm_setting_wimax_get_network_name;
nm_setting_wimax_get_type;
nm_setting_wimax_new;
+ nm_setting_wired_add_mac_blacklist_item;
nm_setting_wired_add_s390_option;
+ nm_setting_wired_clear_mac_blacklist_items;
nm_setting_wired_error_get_type;
nm_setting_wired_error_quark;
nm_setting_wired_get_auto_negotiate;
@@ -453,7 +524,9 @@ global:
nm_setting_wired_get_duplex;
nm_setting_wired_get_mac_address;
nm_setting_wired_get_mac_address_blacklist;
+ nm_setting_wired_get_mac_blacklist_item;
nm_setting_wired_get_mtu;
+ nm_setting_wired_get_num_mac_blacklist_items;
nm_setting_wired_get_num_s390_options;
nm_setting_wired_get_port;
nm_setting_wired_get_s390_nettype;
@@ -462,10 +535,15 @@ global:
nm_setting_wired_get_s390_subchannels;
nm_setting_wired_get_speed;
nm_setting_wired_get_type;
+ nm_setting_wired_get_valid_s390_options;
nm_setting_wired_new;
+ nm_setting_wired_remove_mac_blacklist_item;
+ nm_setting_wired_remove_mac_blacklist_item_by_value;
nm_setting_wired_remove_s390_option;
+ nm_setting_wireless_add_mac_blacklist_item;
nm_setting_wireless_add_seen_bssid;
nm_setting_wireless_ap_security_compatible;
+ nm_setting_wireless_clear_mac_blacklist_items;
nm_setting_wireless_error_get_type;
nm_setting_wireless_error_quark;
nm_setting_wireless_get_band;
@@ -475,8 +553,10 @@ global:
nm_setting_wireless_get_hidden;
nm_setting_wireless_get_mac_address;
nm_setting_wireless_get_mac_address_blacklist;
+ nm_setting_wireless_get_mac_blacklist_item;
nm_setting_wireless_get_mode;
nm_setting_wireless_get_mtu;
+ nm_setting_wireless_get_num_mac_blacklist_items;
nm_setting_wireless_get_num_seen_bssids;
nm_setting_wireless_get_rate;
nm_setting_wireless_get_security;
@@ -485,6 +565,8 @@ global:
nm_setting_wireless_get_tx_power;
nm_setting_wireless_get_type;
nm_setting_wireless_new;
+ nm_setting_wireless_remove_mac_blacklist_item;
+ nm_setting_wireless_remove_mac_blacklist_item_by_value;
nm_setting_wireless_security_add_group;
nm_setting_wireless_security_add_pairwise;
nm_setting_wireless_security_add_proto;
@@ -513,20 +595,34 @@ global:
nm_setting_wireless_security_get_wep_tx_keyidx;
nm_setting_wireless_security_new;
nm_setting_wireless_security_remove_group;
+ nm_setting_wireless_security_remove_group_by_value;
nm_setting_wireless_security_remove_pairwise;
+ nm_setting_wireless_security_remove_pairwise_by_value;
nm_setting_wireless_security_remove_proto;
+ nm_setting_wireless_security_remove_proto_by_value;
nm_setting_wireless_security_set_wep_key;
+ nm_util_get_private;
nm_utils_ap_mode_security_valid;
+ nm_utils_bin2hexstr;
+ nm_utils_check_virtual_device_compatibility;
nm_utils_deinit;
nm_utils_escape_ssid;
nm_utils_file_is_pkcs12;
+ nm_utils_get_private;
nm_utils_gvalue_hash_dup;
+ nm_utils_hex2byte;
+ nm_utils_hexstr2bin;
nm_utils_hwaddr_atoba;
nm_utils_hwaddr_aton;
+ nm_utils_hwaddr_aton_len;
nm_utils_hwaddr_len;
nm_utils_hwaddr_ntoa;
+ nm_utils_hwaddr_ntoa_len;
nm_utils_hwaddr_type;
+ nm_utils_hwaddr_valid;
nm_utils_iface_valid_name;
+ nm_utils_inet4_ntop;
+ nm_utils_inet6_ntop;
nm_utils_init;
nm_utils_ip4_addresses_from_gvalue;
nm_utils_ip4_addresses_to_gvalue;
@@ -544,6 +640,7 @@ global:
nm_utils_is_empty_ssid;
nm_utils_is_uuid;
nm_utils_rsa_key_encrypt;
+ nm_utils_rsa_key_encrypt_aes;
nm_utils_same_ssid;
nm_utils_security_type_get_type;
nm_utils_security_valid;
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c
index 390b2a3b4..b0b683bd5 100644
--- a/libnm-util/nm-connection.c
+++ b/libnm-util/nm-connection.c
@@ -19,16 +19,16 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <glib-object.h>
+#include <glib/gi18n.h>
#include <dbus/dbus-glib.h>
#include <string.h>
#include "nm-connection.h"
#include "nm-utils.h"
-#include "nm-utils-private.h"
#include "nm-dbus-glib-types.h"
#include "nm-setting-private.h"
@@ -49,6 +49,8 @@
#include "nm-setting-vpn.h"
#include "nm-setting-olpc-mesh.h"
#include "nm-setting-bond.h"
+#include "nm-setting-team.h"
+#include "nm-setting-team-port.h"
#include "nm-setting-bridge.h"
#include "nm-setting-bridge-port.h"
#include "nm-setting-vlan.h"
@@ -114,6 +116,7 @@ enum {
enum {
SECRETS_UPDATED,
SECRETS_CLEARED,
+ CHANGED,
LAST_SIGNAL
};
@@ -121,114 +124,6 @@ static guint signals[LAST_SIGNAL] = { 0 };
/*************************************************************/
-static GHashTable *registered_settings = NULL;
-
-static void __attribute__((constructor))
-_ensure_registered (void)
-{
- g_type_init ();
- _nm_utils_register_value_transformations ();
- if (G_UNLIKELY (registered_settings == NULL))
- registered_settings = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-typedef struct {
- GType type;
- guint32 priority;
- GQuark error_quark;
-} SettingInfo;
-
-/*
- * _nm_register_setting:
- * @name: the name of the #NMSetting object to register
- * @type: the #GType of the #NMSetting
- * @priority: the sort priority of the setting, see below
- * @error_quark: the setting's error quark
- *
- * INTERNAL ONLY: registers a setting's internal properties, like its priority
- * and its error quark type, with libnm-util.
- *
- * A setting's priority should roughly follow the OSI layer model, but it also
- * controls which settings get asked for secrets first. Thus settings which
- * relate to things that must be working first, like hardware, should get a
- * higher priority than things which layer on top of the hardware. For example,
- * the GSM/CDMA settings should provide secrets before the PPP setting does,
- * because a PIN is required to unlock the device before PPP can even start.
- * Even settings without secrets should be assigned the right priority.
- *
- * 0: reserved for the Connection setting
- *
- * 1: hardware-related settings like Ethernet, WiFi, Infiniband, Bridge, etc.
- * These priority 1 settings are also "base types", which means that at least
- * one of them is required for the connection to be valid, and their name is
- * valid in the 'type' property of the Connection setting.
- *
- * 2: hardware-related auxiliary settings that require a base setting to be
- * successful first, like WiFi security, 802.1x, etc.
- *
- * 3: hardware-independent settings that are required before IP connectivity
- * can be established, like PPP, PPPoE, etc.
- *
- * 4: IP-level stuff
- */
-void
-_nm_register_setting (const char *name,
- const GType type,
- const guint32 priority,
- const GQuark error_quark)
-{
- SettingInfo *info;
-
- g_return_if_fail (name != NULL);
- g_return_if_fail (type != G_TYPE_INVALID);
- g_return_if_fail (type != G_TYPE_NONE);
- g_return_if_fail (error_quark != 0);
- g_return_if_fail (priority <= 4);
-
- _ensure_registered ();
-
- if (G_LIKELY (g_hash_table_lookup (registered_settings, name)))
- return;
-
- if (priority == 0)
- g_assert_cmpstr (name, ==, NM_SETTING_CONNECTION_SETTING_NAME);
-
- info = g_slice_new0 (SettingInfo);
- info->type = type;
- info->priority = priority;
- info->error_quark = error_quark;
- g_hash_table_insert (registered_settings, (gpointer) name, info);
-}
-
-static guint32
-_get_setting_priority (NMSetting *setting)
-{
- GHashTableIter iter;
- SettingInfo *info;
-
- _ensure_registered ();
-
- g_hash_table_iter_init (&iter, registered_settings);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &info)) {
- if (G_OBJECT_TYPE (setting) == info->type)
- return info->priority;
- }
- return G_MAXUINT32;
-}
-
-static gboolean
-_is_setting_base_type (NMSetting *setting)
-{
- /* Historical oddity: PPPoE is a base-type even though it's not
- * priority 1. It needs to be sorted *after* lower-level stuff like
- * WiFi security or 802.1x for secrets, but it's still allowed as a
- * base type.
- */
- return _get_setting_priority (setting) == 1 || NM_IS_SETTING_PPPOE (setting);
-}
-
-/*************************************************************/
-
/**
* nm_connection_lookup_setting_type:
* @name: a setting name
@@ -240,18 +135,7 @@ _is_setting_base_type (NMSetting *setting)
GType
nm_connection_lookup_setting_type (const char *name)
{
- SettingInfo *info;
-
- g_return_val_if_fail (name != NULL, G_TYPE_NONE);
-
- _ensure_registered ();
-
- info = g_hash_table_lookup (registered_settings, name);
- if (info)
- return info->type;
-
- g_warning ("Unknown setting '%s'", name);
- return G_TYPE_INVALID;
+ return _nm_setting_lookup_setting_type (name);
}
/**
@@ -266,17 +150,7 @@ nm_connection_lookup_setting_type (const char *name)
GType
nm_connection_lookup_setting_type_by_quark (GQuark error_quark)
{
- SettingInfo *info;
- GHashTableIter iter;
-
- _ensure_registered ();
-
- g_hash_table_iter_init (&iter, registered_settings);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &info)) {
- if (info->error_quark == error_quark)
- return info->type;
- }
- return G_TYPE_INVALID;
+ return _nm_setting_lookup_setting_type_by_quark (error_quark);
}
/**
@@ -303,17 +177,21 @@ nm_connection_create_setting (const char *name)
}
static void
-parse_one_setting (gpointer key, gpointer value, gpointer user_data)
+setting_changed_cb (NMSetting *setting,
+ GParamSpec *pspec,
+ NMConnection *self)
{
- NMConnection *connection = (NMConnection *) user_data;
- GType type;
- NMSetting *setting = NULL;
+ g_signal_emit (self, signals[CHANGED], 0);
+}
- type = nm_connection_lookup_setting_type ((char *) key);
- if (type)
- setting = nm_setting_new_from_hash (type, (GHashTable *) value);
- if (setting)
- nm_connection_add_setting (connection, setting);
+static void
+_nm_connection_add_setting (NMConnection *connection, NMSetting *setting)
+{
+ g_hash_table_insert (NM_CONNECTION_GET_PRIVATE (connection)->settings,
+ (gpointer) G_OBJECT_TYPE_NAME (setting),
+ setting);
+ /* Listen for property changes so we can emit the 'changed' signal */
+ g_signal_connect (setting, "notify", (GCallback) setting_changed_cb, connection);
}
/**
@@ -332,8 +210,8 @@ nm_connection_add_setting (NMConnection *connection, NMSetting *setting)
g_return_if_fail (NM_IS_CONNECTION (connection));
g_return_if_fail (NM_IS_SETTING (setting));
- g_hash_table_insert (NM_CONNECTION_GET_PRIVATE (connection)->settings,
- g_strdup (G_OBJECT_TYPE_NAME (setting)), setting);
+ _nm_connection_add_setting (connection, setting);
+ g_signal_emit (connection, signals[CHANGED], 0);
}
/**
@@ -347,10 +225,21 @@ nm_connection_add_setting (NMConnection *connection, NMSetting *setting)
void
nm_connection_remove_setting (NMConnection *connection, GType setting_type)
{
+ NMConnectionPrivate *priv;
+ NMSetting *setting;
+ const char *setting_name;
+
g_return_if_fail (NM_IS_CONNECTION (connection));
g_return_if_fail (g_type_is_a (setting_type, NM_TYPE_SETTING));
- g_hash_table_remove (NM_CONNECTION_GET_PRIVATE (connection)->settings, g_type_name (setting_type));
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+ setting_name = g_type_name (setting_type);
+ setting = g_hash_table_lookup (priv->settings, setting_name);
+ if (setting) {
+ g_signal_handlers_disconnect_by_func (setting, setting_changed_cb, connection);
+ g_hash_table_remove (priv->settings, setting_name);
+ g_signal_emit (connection, signals[CHANGED], 0);
+ }
}
/**
@@ -371,7 +260,7 @@ nm_connection_get_setting (NMConnection *connection, GType setting_type)
g_return_val_if_fail (g_type_is_a (setting_type, NM_TYPE_SETTING), NULL);
return (NMSetting *) g_hash_table_lookup (NM_CONNECTION_GET_PRIVATE (connection)->settings,
- g_type_name (setting_type));
+ g_type_name (setting_type));
}
/**
@@ -380,7 +269,7 @@ nm_connection_get_setting (NMConnection *connection, GType setting_type)
* @name: a setting name
*
* Gets the #NMSetting with the given name, if one has been previously added
- * the the #NMConnection.
+ * the #NMConnection.
*
* Returns: (transfer none): the #NMSetting, or %NULL if no setting with that name was previously
* added to the #NMConnection
@@ -447,6 +336,38 @@ validate_permissions_type (GHashTable *hash, GError **error)
return TRUE;
}
+static gboolean
+hash_to_connection (NMConnection *connection, GHashTable *new, GError **error)
+{
+ GHashTableIter iter;
+ const char *setting_name;
+ GHashTable *setting_hash;
+ gboolean changed, valid;
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
+
+ if ((changed = g_hash_table_size (priv->settings) > 0))
+ g_hash_table_remove_all (priv->settings);
+
+ g_hash_table_iter_init (&iter, new);
+ while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
+ GType type = nm_connection_lookup_setting_type (setting_name);
+
+ if (type) {
+ NMSetting *setting = nm_setting_new_from_hash (type, setting_hash);
+
+ if (setting) {
+ _nm_connection_add_setting (connection, setting);
+ changed = TRUE;
+ }
+ }
+ }
+
+ valid = nm_connection_verify (connection, error);
+ if (changed)
+ g_signal_emit (connection, signals[CHANGED], 0);
+ return valid;
+}
+
/**
* nm_connection_replace_settings:
* @connection: a #NMConnection
@@ -461,42 +382,71 @@ nm_connection_replace_settings (NMConnection *connection,
GHashTable *new_settings,
GError **error)
{
- g_return_val_if_fail (connection != NULL, FALSE);
+ gboolean valid = FALSE;
+
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
g_return_val_if_fail (new_settings != NULL, FALSE);
if (error)
g_return_val_if_fail (*error == NULL, FALSE);
- if (!validate_permissions_type (new_settings, error))
- return FALSE;
+ if (validate_permissions_type (new_settings, error))
+ valid = hash_to_connection (connection, new_settings, error);
+ return valid;
+}
- g_hash_table_remove_all (NM_CONNECTION_GET_PRIVATE (connection)->settings);
- g_hash_table_foreach (new_settings, parse_one_setting, connection);
+/**
+ * nm_connection_replace_settings_from_connection:
+ * @connection: a #NMConnection
+ * @new_connection: a #NMConnection to replace the settings of @connection with
+ * @error: location to store error, or %NULL
+ *
+ * Deep-copies the settings of @new_conenction and replaces the settings of @connection
+ * with the copied settings.
+ *
+ * Returns: %TRUE if the settings were valid and added to the connection, %FALSE
+ * if they were not
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_connection_replace_settings_from_connection (NMConnection *connection,
+ NMConnection *new_connection,
+ GError **error)
+{
+ NMConnectionPrivate *priv;
+ GHashTableIter iter;
+ NMSetting *setting;
+ gboolean changed, valid;
- return nm_connection_verify (connection, error);
-}
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (new_connection), FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
-typedef struct {
- NMConnection *other;
- gboolean failed;
- NMSettingCompareFlags flags;
-} CompareConnectionInfo;
+ /* When 'connection' and 'new_connection' are the same object simply return
+ * in order not to destroy 'connection' */
+ if (connection == new_connection)
+ return TRUE;
-static void
-compare_one_setting (gpointer key, gpointer value, gpointer user_data)
-{
- NMSetting *setting = (NMSetting *) value;
- CompareConnectionInfo *info = (CompareConnectionInfo *) user_data;
- NMSetting *other_setting;
+ /* No need to validate permissions like nm_connection_replace_settings()
+ * since we're dealing with an NMConnection which has already done that.
+ */
- if (info->failed)
- return;
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+ if ((changed = g_hash_table_size (priv->settings) > 0))
+ g_hash_table_remove_all (priv->settings);
+
+ if (g_hash_table_size (NM_CONNECTION_GET_PRIVATE (new_connection)->settings)) {
+ g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (new_connection)->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting))
+ _nm_connection_add_setting (connection, nm_setting_duplicate (setting));
+ changed = TRUE;
+ }
- other_setting = nm_connection_get_setting (info->other, G_OBJECT_TYPE (setting));
- if (other_setting)
- info->failed = nm_setting_compare (setting, other_setting, info->flags) ? FALSE : TRUE;
- else
- info->failed = TRUE;
+ valid = nm_connection_verify (connection, error);
+ if (changed)
+ g_signal_emit (connection, signals[CHANGED], 0);
+ return valid;
}
/**
@@ -516,28 +466,29 @@ nm_connection_compare (NMConnection *a,
NMConnection *b,
NMSettingCompareFlags flags)
{
- NMConnectionPrivate *priv;
- CompareConnectionInfo info = { b, FALSE, flags };
+ GHashTableIter iter;
+ NMSetting *src;
- if (!a && !b)
+ if (a == b)
return TRUE;
-
if (!a || !b)
return FALSE;
- priv = NM_CONNECTION_GET_PRIVATE (a);
- g_hash_table_foreach (priv->settings, compare_one_setting, &info);
- if (info.failed == FALSE) {
- /* compare A to B, then if that is the same compare B to A to ensure
- * that keys that are in B but not A will make the comparison fail.
- */
- info.failed = FALSE;
- info.other = a;
- priv = NM_CONNECTION_GET_PRIVATE (b);
- g_hash_table_foreach (priv->settings, compare_one_setting, &info);
+ /* B / A: ensure settings in B that are not in A make the comparison fail */
+ if (g_hash_table_size (NM_CONNECTION_GET_PRIVATE (a)->settings) !=
+ g_hash_table_size (NM_CONNECTION_GET_PRIVATE (b)->settings))
+ return FALSE;
+
+ /* A / B: ensure all settings in A match corresponding ones in B */
+ g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (a)->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &src)) {
+ NMSetting *cmp = nm_connection_get_setting (b, G_OBJECT_TYPE (src));
+
+ if (!cmp || !nm_setting_compare (src, cmp, flags))
+ return FALSE;
}
- return info.failed ? FALSE : TRUE;
+ return TRUE;
}
@@ -600,7 +551,6 @@ nm_connection_diff (NMConnection *a,
{
GHashTable *diffs;
- g_return_val_if_fail (a != NULL, FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (a), FALSE);
g_return_val_if_fail (out_settings != NULL, FALSE);
g_return_val_if_fail (*out_settings == NULL, FALSE);
@@ -632,7 +582,7 @@ nm_connection_diff (NMConnection *a,
*
* Validates the connection and all its settings. Each setting's properties
* have allowed values, and some values are dependent on other values. For
- * example, if a WiFi connection is security enabled, the #NMSettingWireless
+ * example, if a Wi-Fi connection is security enabled, the #NMSettingWireless
* setting object's 'security' property must contain the setting name of the
* #NMSettingWirelessSecurity object, which must also be present in the
* connection for the connection to be valid. As another example, the
@@ -712,7 +662,7 @@ nm_connection_verify (NMConnection *connection, GError **error)
return FALSE;
}
- if (!_is_setting_base_type (base)) {
+ if (!_nm_setting_is_base_type (base)) {
g_set_error (error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
@@ -749,73 +699,113 @@ nm_connection_update_secrets (NMConnection *connection,
GError **error)
{
NMSetting *setting;
- gboolean success;
- GHashTable *tmp;
+ gboolean success = TRUE, updated = FALSE;
+ GHashTable *setting_hash = NULL;
+ GHashTableIter iter;
+ const char *key;
+ gboolean hashed_connection = FALSE;
+ int success_detail;
- g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
g_return_val_if_fail (secrets != NULL, FALSE);
if (error)
g_return_val_if_fail (*error == NULL, FALSE);
+ /* Empty @secrets means success */
+ if (g_hash_table_size (secrets) == 0)
+ return TRUE;
+
+ /* For backwards compatibility, this function accepts either a hashed
+ * connection (GHashTable of GHashTables of GValues) or a single hashed
+ * setting (GHashTable of GValues).
+ */
+ g_hash_table_iter_init (&iter, secrets);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, NULL)) {
+ if (_nm_setting_lookup_setting_type (key) != G_TYPE_INVALID) {
+ /* @secrets looks like a hashed connection */
+ hashed_connection = TRUE;
+ break;
+ }
+ }
+
if (setting_name) {
- /* Update just one setting */
+ /* Update just one setting's secrets */
setting = nm_connection_get_setting_by_name (connection, setting_name);
if (!setting) {
g_set_error_literal (error,
- NM_CONNECTION_ERROR,
- NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
- setting_name);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
+ setting_name);
return FALSE;
}
- /* Check if this is a hash of hashes, ie a full deserialized connection,
- * not just a single hashed setting.
- */
- tmp = g_hash_table_lookup (secrets, setting_name);
- success = nm_setting_update_secrets (setting, tmp ? tmp : secrets, error);
- } else {
- GHashTableIter iter;
- const char *name;
+ if (hashed_connection) {
+ setting_hash = g_hash_table_lookup (secrets, setting_name);
+ if (!setting_hash) {
+ /* The hashed connection that didn't contain any secrets for
+ * @setting_name; just return success.
+ */
+ return TRUE;
+ }
+ }
- success = TRUE; /* Just in case 'secrets' has no elements */
+ g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection);
+ success_detail = _nm_setting_update_secrets (setting,
+ setting_hash ? setting_hash : secrets,
+ error);
+ g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection);
+
+ if (success_detail == NM_SETTING_UPDATE_SECRET_ERROR)
+ return FALSE;
+ if (success_detail == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ updated = TRUE;
+ } else {
+ if (!hashed_connection) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
+ key);
+ return FALSE;
+ }
- /* Try as a serialized connection (GHashTable of GHashTables) */
+ /* check first, whether all the settings exist... */
g_hash_table_iter_init (&iter, secrets);
- while (g_hash_table_iter_next (&iter, (gpointer) &name, (gpointer) &tmp)) {
- setting = nm_connection_get_setting_by_name (connection, name);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, NULL)) {
+ setting = nm_connection_get_setting_by_name (connection, key);
if (!setting) {
g_set_error_literal (error,
- NM_CONNECTION_ERROR,
- NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
- name);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
+ key);
return FALSE;
}
+ }
+ /* Update each setting with any secrets from the hashed connection */
+ g_hash_table_iter_init (&iter, secrets);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &setting_hash)) {
/* Update the secrets for this setting */
- success = nm_setting_update_secrets (setting, tmp, error);
- if (success == FALSE)
+ setting = nm_connection_get_setting_by_name (connection, key);
+
+ g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection);
+ success_detail = _nm_setting_update_secrets (setting, setting_hash, error);
+ g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection);
+
+ if (success_detail == NM_SETTING_UPDATE_SECRET_ERROR) {
+ success = FALSE;
break;
+ }
+ if (success_detail == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ updated = TRUE;
}
}
- if (success)
- g_signal_emit (connection, signals[SECRETS_UPDATED], 0, setting_name);
- return success;
-}
-static gint
-setting_priority_compare (gconstpointer a, gconstpointer b)
-{
- guint32 prio_a, prio_b;
-
- prio_a = _get_setting_priority (NM_SETTING (a));
- prio_b = _get_setting_priority (NM_SETTING (b));
+ if (updated) {
+ g_signal_emit (connection, signals[SECRETS_UPDATED], 0, setting_name);
+ g_signal_emit (connection, signals[CHANGED], 0);
+ }
- if (prio_a < prio_b)
- return -1;
- else if (prio_a == prio_b)
- return 0;
- return 1;
+ return success;
}
/**
@@ -848,7 +838,6 @@ nm_connection_need_secrets (NMConnection *connection,
const char *name = NULL;
NMSetting *setting;
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
if (hints)
g_return_val_if_fail (*hints == NULL, NULL);
@@ -858,7 +847,7 @@ nm_connection_need_secrets (NMConnection *connection,
/* Get list of settings in priority order */
g_hash_table_iter_init (&hiter, priv->settings);
while (g_hash_table_iter_next (&hiter, NULL, (gpointer) &setting))
- settings = g_slist_insert_sorted (settings, setting, setting_priority_compare);
+ settings = g_slist_insert_sorted (settings, setting, _nm_setting_compare_priority);
for (iter = settings; iter; iter = g_slist_next (iter)) {
GPtrArray *secrets;
@@ -892,14 +881,20 @@ nm_connection_clear_secrets (NMConnection *connection)
{
GHashTableIter iter;
NMSetting *setting;
+ gboolean changed = FALSE;
g_return_if_fail (NM_IS_CONNECTION (connection));
g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting))
- nm_setting_clear_secrets (setting);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) {
+ g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection);
+ changed |= _nm_setting_clear_secrets (setting);
+ g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection);
+ }
g_signal_emit (connection, signals[SECRETS_CLEARED], 0);
+ if (changed)
+ g_signal_emit (connection, signals[CHANGED], 0);
}
/**
@@ -918,14 +913,20 @@ nm_connection_clear_secrets_with_flags (NMConnection *connection,
{
GHashTableIter iter;
NMSetting *setting;
+ gboolean changed = FALSE;
g_return_if_fail (NM_IS_CONNECTION (connection));
g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting))
- nm_setting_clear_secrets_with_flags (setting, func, user_data);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) {
+ g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection);
+ changed |= _nm_setting_clear_secrets_with_flags (setting, func, user_data);
+ g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection);
+ }
g_signal_emit (connection, signals[SECRETS_CLEARED], 0);
+ if (changed)
+ g_signal_emit (connection, signals[CHANGED], 0);
}
/**
@@ -953,7 +954,6 @@ nm_connection_to_hash (NMConnection *connection, NMSettingHashFlags flags)
gpointer key, data;
GHashTable *ret, *setting_hash;
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
ret = g_hash_table_new_full (g_str_hash, g_str_equal,
@@ -987,7 +987,7 @@ nm_connection_to_hash (NMConnection *connection, NMSettingHashFlags flags)
* %NM_SETTING_WIRELESS_SETTING_NAME or %NM_SETTING_WIRED_SETTING_NAME)
*
* A convenience function to check if the given @connection is a particular
- * type (ie wired, wifi, ppp, etc). Checks the #NMSettingConnection:type
+ * type (ie wired, Wi-Fi, ppp, etc). Checks the #NMSettingConnection:type
* property of the connection and matches that against @type.
*
* Returns: %TRUE if the connection is of the given @type, %FALSE if not
@@ -998,12 +998,12 @@ nm_connection_is_type (NMConnection *connection, const char *type)
NMSettingConnection *s_con;
const char *type2;
- g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
g_return_val_if_fail (type != NULL, FALSE);
s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
+ if (!s_con)
+ return FALSE;
type2 = nm_setting_connection_get_connection_type (s_con);
@@ -1035,16 +1035,6 @@ nm_connection_for_each_setting_value (NMConnection *connection,
nm_setting_enumerate_values (NM_SETTING (value), func, user_data);
}
-static void
-dump_setting (gpointer key, gpointer value, gpointer user_data)
-{
- char *str;
-
- str = nm_setting_to_string (NM_SETTING (value));
- g_print ("%s\n", str);
- g_free (str);
-}
-
/**
* nm_connection_dump:
* @connection: the #NMConnection
@@ -1056,9 +1046,20 @@ dump_setting (gpointer key, gpointer value, gpointer user_data)
void
nm_connection_dump (NMConnection *connection)
{
- g_return_if_fail (NM_IS_CONNECTION (connection));
+ GHashTableIter iter;
+ NMSetting *setting;
+ const char *setting_name;
+ char *str;
+
+ if (!connection)
+ return;
- g_hash_table_foreach (NM_CONNECTION_GET_PRIVATE (connection)->settings, dump_setting, NULL);
+ g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings);
+ while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting)) {
+ str = nm_setting_to_string (setting);
+ g_print ("%s\n", str);
+ g_free (str);
+ }
}
/**
@@ -1165,22 +1166,13 @@ nm_connection_new_from_hash (GHashTable *hash, GError **error)
return NULL;
connection = nm_connection_new ();
- g_hash_table_foreach (hash, parse_one_setting, connection);
-
- if (!nm_connection_verify (connection, error)) {
+ if (!hash_to_connection (connection, hash, error)) {
g_object_unref (connection);
return NULL;
}
-
return connection;
}
-static void
-duplicate_cb (gpointer key, gpointer value, gpointer user_data)
-{
- nm_connection_add_setting (NM_CONNECTION (user_data), nm_setting_duplicate (NM_SETTING (value)));
-}
-
/**
* nm_connection_duplicate:
* @connection: the #NMConnection to duplicate
@@ -1194,12 +1186,17 @@ NMConnection *
nm_connection_duplicate (NMConnection *connection)
{
NMConnection *dup;
+ GHashTableIter iter;
+ NMSetting *setting;
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
dup = nm_connection_new ();
nm_connection_set_path (dup, nm_connection_get_path (connection));
- g_hash_table_foreach (NM_CONNECTION_GET_PRIVATE (connection)->settings, duplicate_cb, dup);
+
+ g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting))
+ nm_connection_add_setting (dup, nm_setting_duplicate (setting));
return dup;
}
@@ -1217,7 +1214,6 @@ nm_connection_get_uuid (NMConnection *connection)
{
NMSettingConnection *s_con;
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
s_con = nm_connection_get_setting_connection (connection);
@@ -1239,7 +1235,6 @@ nm_connection_get_id (NMConnection *connection)
{
NMSettingConnection *s_con;
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
s_con = nm_connection_get_setting_connection (connection);
@@ -1248,6 +1243,72 @@ nm_connection_get_id (NMConnection *connection)
return nm_setting_connection_get_id (s_con);
}
+/**
+ * nm_connection_get_connection_type:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return the type from the connection's #NMSettingConnection.
+ *
+ * Returns: the type from the connection's 'connection' setting
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_connection_get_connection_type (NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_return_val_if_fail (s_con != NULL, NULL);
+
+ return nm_setting_connection_get_connection_type (s_con);
+}
+
+/**
+ * nm_connection_get_virtual_device_description:
+ * @connection: an #NMConnection for a virtual device type
+ *
+ * Returns the name that nm_device_disambiguate_names() would
+ * return for the virtual device that would be created for @connection.
+ * Eg, "VLAN (eth1.1)".
+ *
+ * Returns: (transfer full): the name of @connection's device,
+ * or %NULL if @connection is not a virtual connection type
+ *
+ * Since: 0.9.10
+ */
+char *
+nm_connection_get_virtual_device_description (NMConnection *connection)
+{
+ const char *iface, *type, *display_type;
+ NMSettingConnection *s_con;
+
+ iface = nm_connection_get_virtual_iface_name (connection);
+ if (!iface)
+ return NULL;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_return_val_if_fail (s_con != NULL, NULL);
+ type = nm_setting_connection_get_connection_type (s_con);
+
+ if (!strcmp (type, NM_SETTING_BOND_SETTING_NAME))
+ display_type = _("Bond");
+ else if (!strcmp (type, NM_SETTING_TEAM_SETTING_NAME))
+ display_type = _("Team");
+ else if (!strcmp (type, NM_SETTING_BRIDGE_SETTING_NAME))
+ display_type = _("Bridge");
+ else if (!strcmp (type, NM_SETTING_VLAN_SETTING_NAME))
+ display_type = _("VLAN");
+ else {
+ g_warning ("Unrecognized virtual device type '%s'", type);
+ display_type = type;
+ }
+
+ return g_strdup_printf ("%s (%s)", display_type, iface);
+}
+
/*************************************************************/
/**
@@ -1261,7 +1322,6 @@ nm_connection_get_id (NMConnection *connection)
NMSetting8021x *
nm_connection_get_setting_802_1x (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
@@ -1278,7 +1338,6 @@ nm_connection_get_setting_802_1x (NMConnection *connection)
NMSettingBluetooth *
nm_connection_get_setting_bluetooth (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingBluetooth *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
@@ -1295,13 +1354,48 @@ nm_connection_get_setting_bluetooth (NMConnection *connection)
NMSettingBond *
nm_connection_get_setting_bond (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingBond *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BOND);
}
/**
+ * nm_connection_get_setting_team:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingTeam the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingTeam if the connection contains one, otherwise %NULL
+ *
+ * Since: 0.9.10
+ **/
+NMSettingTeam *
+nm_connection_get_setting_team (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingTeam *) nm_connection_get_setting (connection, NM_TYPE_SETTING_TEAM);
+}
+
+/**
+ * nm_connection_get_setting_team_port:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingTeamPort the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingTeamPort if the connection contains one, otherwise %NULL
+ *
+ * Since: 0.9.10
+ **/
+NMSettingTeamPort *
+nm_connection_get_setting_team_port (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingTeamPort *) nm_connection_get_setting (connection, NM_TYPE_SETTING_TEAM_PORT);
+}
+
+/**
* nm_connection_get_setting_bridge:
* @connection: the #NMConnection
*
@@ -1312,7 +1406,6 @@ nm_connection_get_setting_bond (NMConnection *connection)
NMSettingBridge *
nm_connection_get_setting_bridge (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingBridge *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BRIDGE);
@@ -1329,7 +1422,6 @@ nm_connection_get_setting_bridge (NMConnection *connection)
NMSettingCdma *
nm_connection_get_setting_cdma (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingCdma *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA);
@@ -1346,13 +1438,48 @@ nm_connection_get_setting_cdma (NMConnection *connection)
NMSettingConnection *
nm_connection_get_setting_connection (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
}
/**
+ * nm_connection_get_setting_dcb:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingDcb the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingDcb if the connection contains one, otherwise NULL
+ *
+ * Since: 0.9.10
+ **/
+NMSettingDcb *
+nm_connection_get_setting_dcb (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingDcb *) nm_connection_get_setting (connection, NM_TYPE_SETTING_DCB);
+}
+
+/**
+ * nm_connection_get_setting_generic:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingGeneric the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingGeneric if the connection contains one, otherwise NULL
+ *
+ * Since: 0.9.10
+ **/
+NMSettingGeneric *
+nm_connection_get_setting_generic (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingGeneric *) nm_connection_get_setting (connection, NM_TYPE_SETTING_GENERIC);
+}
+
+/**
* nm_connection_get_setting_gsm:
* @connection: the #NMConnection
*
@@ -1363,7 +1490,6 @@ nm_connection_get_setting_connection (NMConnection *connection)
NMSettingGsm *
nm_connection_get_setting_gsm (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingGsm *) nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM);
@@ -1380,7 +1506,6 @@ nm_connection_get_setting_gsm (NMConnection *connection)
NMSettingInfiniband *
nm_connection_get_setting_infiniband (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingInfiniband *) nm_connection_get_setting (connection, NM_TYPE_SETTING_INFINIBAND);
@@ -1397,7 +1522,6 @@ nm_connection_get_setting_infiniband (NMConnection *connection)
NMSettingIP4Config *
nm_connection_get_setting_ip4_config (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
@@ -1414,7 +1538,6 @@ nm_connection_get_setting_ip4_config (NMConnection *connection)
NMSettingIP6Config *
nm_connection_get_setting_ip6_config (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
@@ -1431,7 +1554,6 @@ nm_connection_get_setting_ip6_config (NMConnection *connection)
NMSettingOlpcMesh *
nm_connection_get_setting_olpc_mesh (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingOlpcMesh *) nm_connection_get_setting (connection, NM_TYPE_SETTING_OLPC_MESH);
@@ -1448,7 +1570,6 @@ nm_connection_get_setting_olpc_mesh (NMConnection *connection)
NMSettingPPP *
nm_connection_get_setting_ppp (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingPPP *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP);
@@ -1465,7 +1586,6 @@ nm_connection_get_setting_ppp (NMConnection *connection)
NMSettingPPPOE *
nm_connection_get_setting_pppoe (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingPPPOE *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE);
@@ -1482,7 +1602,6 @@ nm_connection_get_setting_pppoe (NMConnection *connection)
NMSettingSerial *
nm_connection_get_setting_serial (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingSerial *) nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL);
@@ -1499,7 +1618,6 @@ nm_connection_get_setting_serial (NMConnection *connection)
NMSettingVPN *
nm_connection_get_setting_vpn (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
@@ -1516,7 +1634,6 @@ nm_connection_get_setting_vpn (NMConnection *connection)
NMSettingWimax *
nm_connection_get_setting_wimax (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingWimax *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIMAX);
@@ -1533,7 +1650,6 @@ nm_connection_get_setting_wimax (NMConnection *connection)
NMSettingWired *
nm_connection_get_setting_wired (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
@@ -1550,7 +1666,6 @@ nm_connection_get_setting_wired (NMConnection *connection)
NMSettingAdsl *
nm_connection_get_setting_adsl (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingAdsl *) nm_connection_get_setting (connection, NM_TYPE_SETTING_ADSL);
@@ -1567,7 +1682,6 @@ nm_connection_get_setting_adsl (NMConnection *connection)
NMSettingWireless *
nm_connection_get_setting_wireless (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
@@ -1584,7 +1698,6 @@ nm_connection_get_setting_wireless (NMConnection *connection)
NMSettingWirelessSecurity *
nm_connection_get_setting_wireless_security (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
@@ -1601,7 +1714,6 @@ nm_connection_get_setting_wireless_security (NMConnection *connection)
NMSettingBridgePort *
nm_connection_get_setting_bridge_port (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingBridgePort *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BRIDGE_PORT);
@@ -1618,7 +1730,6 @@ nm_connection_get_setting_bridge_port (NMConnection *connection)
NMSettingVlan *
nm_connection_get_setting_vlan (NMConnection *connection)
{
- g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
return (NMSettingVlan *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VLAN);
@@ -1631,7 +1742,24 @@ nm_connection_init (NMConnection *connection)
{
NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
- priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+ priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMConnection *self = NM_CONNECTION (object);
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (self);
+ GHashTableIter iter;
+ NMSetting *setting;
+
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) {
+ g_signal_handlers_disconnect_by_func (setting, setting_changed_cb, self);
+ g_hash_table_iter_remove (&iter);
+ }
+
+ G_OBJECT_CLASS (nm_connection_parent_class)->dispose (object);
}
static void
@@ -1641,10 +1769,7 @@ finalize (GObject *object)
NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
g_hash_table_destroy (priv->settings);
- priv->settings = NULL;
-
g_free (priv->path);
- priv->path = NULL;
G_OBJECT_CLASS (nm_connection_parent_class)->finalize (object);
}
@@ -1691,6 +1816,7 @@ nm_connection_class_init (NMConnectionClass *klass)
/* virtual methods */
object_class->set_property = set_property;
object_class->get_property = get_property;
+ object_class->dispose = dispose;
object_class->finalize = finalize;
/* Properties */
@@ -1721,7 +1847,7 @@ nm_connection_class_init (NMConnectionClass *klass)
* have been changed.
*/
signals[SECRETS_UPDATED] =
- g_signal_new ("secrets-updated",
+ g_signal_new (NM_CONNECTION_SECRETS_UPDATED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMConnectionClass, secrets_updated),
@@ -1738,7 +1864,25 @@ nm_connection_class_init (NMConnectionClass *klass)
* are cleared.
*/
signals[SECRETS_CLEARED] =
- g_signal_new ("secrets-cleared",
+ g_signal_new (NM_CONNECTION_SECRETS_CLEARED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ /**
+ * NMConnection::changed:
+ * @connection: the object on which the signal is emitted
+ *
+ * The ::changed signal is emitted when any property of any property
+ * (including secrets) of any setting of the connection is modified,
+ * or when settings are added or removed.
+ *
+ * Since: 0.9.10
+ */
+ signals[CHANGED] =
+ g_signal_new (NM_CONNECTION_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL,
diff --git a/libnm-util/nm-connection.h b/libnm-util/nm-connection.h
index 4d060cc98..4524c8f62 100644
--- a/libnm-util/nm-connection.h
+++ b/libnm-util/nm-connection.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -33,10 +33,14 @@
#include <nm-setting-8021x.h>
#include <nm-setting-bluetooth.h>
#include <nm-setting-bond.h>
+#include <nm-setting-team.h>
+#include <nm-setting-team-port.h>
#include <nm-setting-bridge.h>
#include <nm-setting-bridge-port.h>
#include <nm-setting-cdma.h>
#include <nm-setting-connection.h>
+#include <nm-setting-dcb.h>
+#include <nm-setting-generic.h>
#include <nm-setting-gsm.h>
#include <nm-setting-infiniband.h>
#include <nm-setting-ip4-config.h>
@@ -62,6 +66,13 @@ G_BEGIN_DECLS
#define NM_IS_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CONNECTION))
#define NM_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CONNECTION, NMConnectionClass))
+/* Signals */
+#define NM_CONNECTION_SECRETS_UPDATED "secrets-updated"
+#define NM_CONNECTION_SECRETS_CLEARED "secrets-cleared"
+#define NM_CONNECTION_CHANGED "changed"
+
+/* Properties */
+#define NM_CONNECTION_PATH "path"
/**
* NMConnectionError:
@@ -90,8 +101,6 @@ typedef enum
#define NM_CONNECTION_ERROR nm_connection_error_quark ()
GQuark nm_connection_error_quark (void);
-#define NM_CONNECTION_PATH "path"
-
/**
* NMConnection:
*
@@ -135,6 +144,11 @@ gboolean nm_connection_replace_settings (NMConnection *connection,
GHashTable *new_settings,
GError **error);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_connection_replace_settings_from_connection (NMConnection *connection,
+ NMConnection *new_connection,
+ GError **error);
+
gboolean nm_connection_compare (NMConnection *a,
NMConnection *b,
NMSettingCompareFlags flags);
@@ -183,17 +197,29 @@ GType nm_connection_lookup_setting_type (const char *name);
GType nm_connection_lookup_setting_type_by_quark (GQuark error_quark);
/* Helpers */
-const char * nm_connection_get_uuid (NMConnection *connection);
+const char * nm_connection_get_uuid (NMConnection *connection);
+const char * nm_connection_get_id (NMConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_connection_get_connection_type (NMConnection *connection);
-const char * nm_connection_get_id (NMConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+char * nm_connection_get_virtual_device_description (NMConnection *connection);
NMSetting8021x * nm_connection_get_setting_802_1x (NMConnection *connection);
NMSettingBluetooth * nm_connection_get_setting_bluetooth (NMConnection *connection);
NMSettingBond * nm_connection_get_setting_bond (NMConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMSettingTeam * nm_connection_get_setting_team (NMConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMSettingTeamPort * nm_connection_get_setting_team_port (NMConnection *connection);
NMSettingBridge * nm_connection_get_setting_bridge (NMConnection *connection);
NMSettingBridgePort * nm_connection_get_setting_bridge_port (NMConnection *connection);
NMSettingCdma * nm_connection_get_setting_cdma (NMConnection *connection);
NMSettingConnection * nm_connection_get_setting_connection (NMConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMSettingDcb * nm_connection_get_setting_dcb (NMConnection *connection);
+NM_AVAILABLE_IN_0_9_10
+NMSettingGeneric * nm_connection_get_setting_generic (NMConnection *connection);
NMSettingGsm * nm_connection_get_setting_gsm (NMConnection *connection);
NMSettingInfiniband * nm_connection_get_setting_infiniband (NMConnection *connection);
NMSettingIP4Config * nm_connection_get_setting_ip4_config (NMConnection *connection);
diff --git a/libnm-util/nm-param-spec-specialized.c b/libnm-util/nm-param-spec-specialized.c
index 06d56f04e..27e498b5b 100644
--- a/libnm-util/nm-param-spec-specialized.c
+++ b/libnm-util/nm-param-spec-specialized.c
@@ -291,10 +291,8 @@ _gvalues_compare_collection (const GValue *value1, const GValue *value2)
ret = _gvalues_compare ((GValue *) iter1->data, (GValue *) iter2->data);
}
- g_slist_foreach (list1, (GFunc) _gvalue_destroy, NULL);
- g_slist_free (list1);
- g_slist_foreach (list2, (GFunc) _gvalue_destroy, NULL);
- g_slist_free (list2);
+ g_slist_free_full (list1, _gvalue_destroy);
+ g_slist_free_full (list2, _gvalue_destroy);
}
return ret;
@@ -347,7 +345,7 @@ _gvalues_compare_map (const GValue *value1, const GValue *value2)
}
hash1 = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, _gvalue_destroy);
- dbus_g_type_map_value_iterate (value1, iterate_map, &hash1);
+ dbus_g_type_map_value_iterate (value1, iterate_map, &hash1);
len1 = g_hash_table_size (hash1);
hash2 = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, _gvalue_destroy);
@@ -649,8 +647,8 @@ _nm_param_spec_specialized (const char *name,
static void
compare_ints (void)
{
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
g_value_init (&value1, G_TYPE_INT);
g_value_init (&value2, G_TYPE_INT);
@@ -669,8 +667,8 @@ compare_ints (void)
static void
compare_strings (void)
{
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
const char *str1 = "hello";
const char *str2 = "world";
@@ -688,8 +686,8 @@ compare_strings (void)
static void
compare_strv (void)
{
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
char *strv1[] = { "foo", "bar", "baz", NULL };
char *strv2[] = { "foo", "bar", "bar", NULL };
char *strv3[] = { "foo", "bar", NULL };
@@ -717,8 +715,8 @@ compare_garrays (void)
{
GArray *array1;
GArray *array2;
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
int i;
g_value_init (&value1, DBUS_TYPE_G_UINT_ARRAY);
@@ -752,8 +750,8 @@ compare_ptrarrays (void)
{
GPtrArray *array1;
GPtrArray *array2;
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
g_value_init (&value1, dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRING));
array1 = g_ptr_array_new ();
@@ -785,8 +783,8 @@ compare_str_hash (void)
{
GHashTable *hash1;
GHashTable *hash2;
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
g_value_init (&value1, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING));
g_value_init (&value2, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING));
@@ -842,8 +840,8 @@ compare_gvalue_hash (void)
{
GHashTable *hash1;
GHashTable *hash2;
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
g_value_init (&value1, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE));
g_value_init (&value2, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE));
@@ -879,9 +877,9 @@ compare_ip6_addresses (void)
GByteArray *ba1;
GByteArray *ba2;
GByteArray *ba3;
- GValue element = { 0 };
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue element = G_VALUE_INIT;
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
struct in6_addr addr1;
struct in6_addr addr2;
struct in6_addr addr3;
@@ -956,7 +954,10 @@ main (int argc, char *argv[])
{
DBusGConnection *bus;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
+
bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
compare_ints ();
diff --git a/libnm-util/nm-setting-8021x.c b/libnm-util/nm-setting-8021x.c
index 914c7ea3f..d85b87b89 100644
--- a/libnm-util/nm-setting-8021x.c
+++ b/libnm-util/nm-setting-8021x.c
@@ -19,12 +19,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-8021x.h"
#include "nm-param-spec-specialized.h"
#include "nm-utils.h"
@@ -40,7 +42,7 @@
*
* The #NMSetting8021x object is a #NMSetting subclass that describes
* properties necessary for connection to 802.1x-authenticated networks, such as
- * WPA and WPA2 Enterprise WiFi networks and wired 802.1x networks. 802.1x
+ * WPA and WPA2 Enterprise Wi-Fi networks and wired 802.1x networks. 802.1x
* connections typically use certificates and/or EAP authentication methods to
* securely verify, identify, and authenticate the client to the network itself,
* instead of simply relying on a widely shared static key.
@@ -50,7 +52,7 @@
* the relevant wpa_supplicant configuration options.
*
* Furthermore, to get a good idea of 802.1x, EAP, TLS, TTLS, etc and their
- * applications to WiFi and wired networks, you'll want to get copies of the
+ * applications to Wi-Fi and wired networks, you'll want to get copies of the
* following books.
*
* 802.11 Wireless Networks: The Definitive Guide, Second Edition
@@ -246,6 +248,7 @@ nm_setting_802_1x_add_eap_method (NMSetting8021x *setting, const char *eap)
}
priv->eap = g_slist_append (priv->eap, g_ascii_strdown (eap, -1));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_EAP);
return TRUE;
}
@@ -270,6 +273,39 @@ nm_setting_802_1x_remove_eap_method (NMSetting8021x *setting, guint32 i)
g_free (elt->data);
priv->eap = g_slist_delete_link (priv->eap, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_EAP);
+}
+
+/**
+ * nm_setting_802_1x_remove_eap_method_by_value:
+ * @setting: the #NMSetting8021x
+ * @eap: the name of the EAP method to remove
+ *
+ * Removes the allowed EAP method @method.
+ *
+ * Returns: %TRUE if the EAP method was founs and removed, %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_802_1x_remove_eap_method_by_value (NMSetting8021x *setting,
+ const char *eap)
+{
+ NMSetting8021xPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
+ g_return_val_if_fail (eap != NULL, FALSE);
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ for (iter = priv->eap; iter; iter = g_slist_next (iter)) {
+ if (!strcmp (eap, (char *) iter->data)) {
+ priv->eap = g_slist_delete_link (priv->eap, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_EAP);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -286,8 +322,9 @@ nm_setting_802_1x_clear_eap_methods (NMSetting8021x *setting)
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
- nm_utils_slist_free (priv->eap, g_free);
+ g_slist_free_full (priv->eap, g_free);
priv->eap = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_EAP);
}
/**
@@ -502,7 +539,7 @@ path_to_scheme_value (const char *path)
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
**/
gboolean
-nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
+nm_setting_802_1x_set_ca_cert (NMSetting8021x *setting,
const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
@@ -512,7 +549,7 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
GByteArray *data;
- g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
if (cert_path) {
g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
@@ -524,7 +561,7 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
if (out_format)
g_return_val_if_fail (*out_format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN, FALSE);
- priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
/* Clear out any previous ca_cert blob */
if (priv->ca_cert) {
@@ -532,8 +569,10 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
priv->ca_cert = NULL;
}
- if (!cert_path)
+ if (!cert_path) {
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_CA_CERT);
return TRUE;
+ }
data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
@@ -549,14 +588,16 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
else
g_assert_not_reached ();
} else {
- g_set_error (error,
+ g_set_error_literal (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_CA_CERT);
+ _("CA certificate must be in X.509 format"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CA_CERT);
}
g_byte_array_unref (data);
}
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_CA_CERT);
return priv->ca_cert != NULL;
}
@@ -646,6 +687,7 @@ nm_setting_802_1x_add_altsubject_match (NMSetting8021x *setting,
priv->altsubject_matches = g_slist_append (priv->altsubject_matches,
g_strdup (altsubject_match));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_ALTSUBJECT_MATCHES);
return TRUE;
}
@@ -670,6 +712,40 @@ nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting, guint32 i)
g_free (elt->data);
priv->altsubject_matches = g_slist_delete_link (priv->altsubject_matches, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_ALTSUBJECT_MATCHES);
+}
+
+/**
+ * nm_setting_802_1x_remove_altsubject_match_by_value:
+ * @setting: the #NMSetting8021x
+ * @altsubject_match: the altSubjectName to remove
+ *
+ * Removes the allowed altSubjectName @altsubject_match.
+ *
+ * Returns: %TRUE if the alternative subject name match was found and removed,
+ * %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_802_1x_remove_altsubject_match_by_value (NMSetting8021x *setting,
+ const char *altsubject_match)
+{
+ NMSetting8021xPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
+ g_return_val_if_fail (altsubject_match != NULL, FALSE);
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ for (iter = priv->altsubject_matches; iter; iter = g_slist_next (iter)) {
+ if (!strcmp (altsubject_match, (char *) iter->data)) {
+ priv->altsubject_matches = g_slist_delete_link (priv->altsubject_matches, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_ALTSUBJECT_MATCHES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -686,8 +762,9 @@ nm_setting_802_1x_clear_altsubject_matches (NMSetting8021x *setting)
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
- nm_utils_slist_free (priv->altsubject_matches, g_free);
+ g_slist_free_full (priv->altsubject_matches, g_free);
priv->altsubject_matches = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_ALTSUBJECT_MATCHES);
}
/**
@@ -778,7 +855,7 @@ nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting)
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
**/
gboolean
-nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
+nm_setting_802_1x_set_client_cert (NMSetting8021x *setting,
const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
@@ -788,7 +865,7 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
GByteArray *data;
- g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
if (cert_path) {
g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
@@ -800,7 +877,7 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
if (out_format)
g_return_val_if_fail (*out_format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN, FALSE);
- priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
/* Clear out any previous ca_cert blob */
if (priv->client_cert) {
@@ -808,8 +885,10 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
priv->client_cert = NULL;
}
- if (!cert_path)
+ if (!cert_path) {
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_CLIENT_CERT);
return TRUE;
+ }
data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
@@ -827,10 +906,11 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
valid = TRUE;
break;
default:
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_CLIENT_CERT);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("invalid certificate format"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
break;
}
@@ -845,6 +925,7 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
g_byte_array_unref (data);
}
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_CLIENT_CERT);
return priv->client_cert != NULL;
}
@@ -1039,7 +1120,7 @@ nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting)
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
**/
gboolean
-nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
+nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *setting,
const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
@@ -1049,7 +1130,7 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
GByteArray *data;
- g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
if (cert_path) {
g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
@@ -1061,7 +1142,7 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
if (out_format)
g_return_val_if_fail (*out_format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN, FALSE);
- priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
/* Clear out any previous ca_cert blob */
if (priv->phase2_ca_cert) {
@@ -1069,8 +1150,10 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
priv->phase2_ca_cert = NULL;
}
- if (!cert_path)
+ if (!cert_path) {
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_CA_CERT);
return TRUE;
+ }
data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
@@ -1086,14 +1169,16 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
else
g_assert_not_reached ();
} else {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_CA_CERT);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("invalid certificate format"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CA_CERT);
}
g_byte_array_unref (data);
}
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_CA_CERT);
return priv->phase2_ca_cert != NULL;
}
@@ -1184,6 +1269,7 @@ nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting,
priv->phase2_altsubject_matches = g_slist_append (priv->phase2_altsubject_matches,
g_strdup (phase2_altsubject_match));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES);
return TRUE;
}
@@ -1208,6 +1294,41 @@ nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, guint
g_free (elt->data);
priv->phase2_altsubject_matches = g_slist_delete_link (priv->phase2_altsubject_matches, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES);
+}
+
+
+/**
+ * nm_setting_802_1x_remove_phase2_altsubject_match_by_value:
+ * @setting: the #NMSetting8021x
+ * @phase2_altsubject_match: the "phase 2" altSubjectName to remove
+ *
+ * Removes the allowed "phase 2" altSubjectName @phase2_altsubject_match.
+ *
+ * Returns: %TRUE if the alternative subject name match for "phase 2" was found and removed,
+ * %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_802_1x_remove_phase2_altsubject_match_by_value (NMSetting8021x *setting,
+ const char *phase2_altsubject_match)
+{
+ NMSetting8021xPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
+ g_return_val_if_fail (phase2_altsubject_match != NULL, FALSE);
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ for (iter = priv->phase2_altsubject_matches; iter; iter = g_slist_next (iter)) {
+ if (!strcmp (phase2_altsubject_match, (char *) iter->data)) {
+ priv->phase2_altsubject_matches = g_slist_delete_link (priv->phase2_altsubject_matches, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -1224,8 +1345,9 @@ nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting)
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
- nm_utils_slist_free (priv->phase2_altsubject_matches, g_free);
+ g_slist_free_full (priv->phase2_altsubject_matches, g_free);
priv->phase2_altsubject_matches = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES);
}
/**
@@ -1318,7 +1440,7 @@ nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting)
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
**/
gboolean
-nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
+nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *setting,
const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
@@ -1328,7 +1450,7 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
GByteArray *data;
- g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
if (cert_path) {
g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
@@ -1340,7 +1462,7 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
if (out_format)
g_return_val_if_fail (*out_format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN, FALSE);
- priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
/* Clear out any previous ca_cert blob */
if (priv->phase2_client_cert) {
@@ -1348,8 +1470,10 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
priv->phase2_client_cert = NULL;
}
- if (!cert_path)
+ if (!cert_path) {
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
return TRUE;
+ }
data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
@@ -1368,10 +1492,11 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
valid = TRUE;
break;
default:
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("invalid certificate format"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
break;
}
@@ -1386,6 +1511,7 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
g_byte_array_unref (data);
}
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
return priv->phase2_client_cert != NULL;
}
@@ -1558,10 +1684,8 @@ file_to_byte_array (const char *filename)
if (g_file_get_contents (filename, &contents, &length, NULL)) {
array = g_byte_array_sized_new (length);
- if (array) {
- g_byte_array_append (array, (guint8 *) contents, length);
- g_assert (array->len == length);
- }
+ g_byte_array_append (array, (guint8 *) contents, length);
+ g_assert (array->len == length);
g_free (contents);
}
return array;
@@ -1607,7 +1731,7 @@ file_to_byte_array (const char *filename)
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
**/
gboolean
-nm_setting_802_1x_set_private_key (NMSetting8021x *self,
+nm_setting_802_1x_set_private_key (NMSetting8021x *setting,
const char *key_path,
const char *password,
NMSetting8021xCKScheme scheme,
@@ -1616,8 +1740,10 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self,
{
NMSetting8021xPrivate *priv;
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ gboolean key_cleared = FALSE, password_cleared = FALSE;
+ GError *local_err = NULL;
- g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
if (key_path) {
g_return_val_if_fail (g_utf8_validate (key_path, -1, NULL), FALSE);
@@ -1633,17 +1759,19 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self,
* given, that it decrypts the private key.
*/
if (key_path) {
- format = crypto_verify_private_key (key_path, password, NULL);
+ format = crypto_verify_private_key (key_path, password, &local_err);
if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PRIVATE_KEY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ local_err ? local_err->message : _("invalid private key"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PRIVATE_KEY);
+ g_clear_error (&local_err);
return FALSE;
}
}
- priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
/* Clear out any previous private key data */
if (priv->private_key) {
@@ -1651,13 +1779,22 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self,
memset (priv->private_key->data, 0, priv->private_key->len);
g_byte_array_free (priv->private_key, TRUE);
priv->private_key = NULL;
+ key_cleared = TRUE;
}
- g_free (priv->private_key_password);
- priv->private_key_password = NULL;
+ if (priv->private_key_password) {
+ g_free (priv->private_key_password);
+ priv->private_key_password = NULL;
+ password_cleared = TRUE;
+ }
- if (key_path == NULL)
+ if (key_path == NULL) {
+ if (key_cleared)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PRIVATE_KEY);
+ if (password_cleared)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
return TRUE;
+ }
priv->private_key_password = g_strdup (password);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
@@ -1679,8 +1816,13 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self,
priv->client_cert = g_byte_array_sized_new (priv->private_key->len);
g_byte_array_append (priv->client_cert, priv->private_key->data, priv->private_key->len);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_CLIENT_CERT);
}
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PRIVATE_KEY);
+ if (password_cleared || password)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
+
if (out_format)
*out_format = format;
return priv->private_key != NULL;
@@ -1900,7 +2042,7 @@ nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting)
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
**/
gboolean
-nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
+nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *setting,
const char *key_path,
const char *password,
NMSetting8021xCKScheme scheme,
@@ -1909,8 +2051,10 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
{
NMSetting8021xPrivate *priv;
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ gboolean key_cleared = FALSE, password_cleared = FALSE;
+ GError *local_err = NULL;
- g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
if (key_path) {
g_return_val_if_fail (g_utf8_validate (key_path, -1, NULL), FALSE);
@@ -1926,17 +2070,19 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
* given, that it decrypts the private key.
*/
if (key_path) {
- format = crypto_verify_private_key (key_path, password, NULL);
+ format = crypto_verify_private_key (key_path, password, &local_err);
if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ local_err ? local_err->message : _("invalid phase2 private key"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ g_clear_error (&local_err);
return FALSE;
}
}
- priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
/* Clear out any previous private key data */
if (priv->phase2_private_key) {
@@ -1944,13 +2090,22 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
memset (priv->phase2_private_key->data, 0, priv->phase2_private_key->len);
g_byte_array_free (priv->phase2_private_key, TRUE);
priv->phase2_private_key = NULL;
+ key_cleared = TRUE;
}
- g_free (priv->phase2_private_key_password);
- priv->phase2_private_key_password = NULL;
+ if (priv->phase2_private_key_password) {
+ g_free (priv->phase2_private_key_password);
+ priv->phase2_private_key_password = NULL;
+ password_cleared = TRUE;
+ }
- if (key_path == NULL)
+ if (key_path == NULL) {
+ if (key_cleared)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ if (password_cleared)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
return TRUE;
+ }
priv->phase2_private_key_password = g_strdup (password);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
@@ -1972,8 +2127,13 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
priv->phase2_client_cert = g_byte_array_sized_new (priv->phase2_private_key->len);
g_byte_array_append (priv->phase2_client_cert, priv->phase2_private_key->data, priv->phase2_private_key->len);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
}
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ if (password_cleared || password)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
+
if (out_format)
*out_format = format;
return priv->phase2_private_key != NULL;
@@ -2114,31 +2274,35 @@ verify_tls (NMSetting8021x *self, gboolean phase2, GError **error)
if (phase2) {
if (!priv->phase2_client_cert) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
return FALSE;
} else if (!priv->phase2_client_cert->len) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
return FALSE;
}
/* Private key is required for TLS */
if (!priv->phase2_private_key) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
return FALSE;
} else if (!priv->phase2_private_key->len) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
return FALSE;
}
@@ -2148,7 +2312,9 @@ verify_tls (NMSetting8021x *self, gboolean phase2, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
+ _("has to match '%s' property for PKCS#12"),
+ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
return FALSE;
}
@@ -2158,37 +2324,43 @@ verify_tls (NMSetting8021x *self, gboolean phase2, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
+ _("has to match '%s' property for PKCS#12"),
+ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
return FALSE;
}
}
} else {
if (!priv->client_cert) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_CLIENT_CERT);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
return FALSE;
} else if (!priv->client_cert->len) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_CLIENT_CERT);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
return FALSE;
}
/* Private key is required for TLS */
if (!priv->private_key) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_PRIVATE_KEY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PRIVATE_KEY);
return FALSE;
} else if (!priv->private_key->len) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PRIVATE_KEY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PRIVATE_KEY);
return FALSE;
}
@@ -2198,7 +2370,9 @@ verify_tls (NMSetting8021x *self, gboolean phase2, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_CLIENT_CERT);
+ _("has to match '%s' property for PKCS#12"),
+ NM_SETTING_802_1X_PRIVATE_KEY);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
return FALSE;
}
@@ -2208,7 +2382,9 @@ verify_tls (NMSetting8021x *self, gboolean phase2, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_CLIENT_CERT);
+ _("has to match '%s' property for PKCS#12"),
+ NM_SETTING_802_1X_PRIVATE_KEY);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
return FALSE;
}
}
@@ -2225,25 +2401,29 @@ verify_ttls (NMSetting8021x *self, gboolean phase2, GError **error)
if ( (!priv->identity || !strlen (priv->identity))
&& (!priv->anonymous_identity || !strlen (priv->anonymous_identity))) {
if (!priv->identity) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_IDENTITY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
} else if (!strlen (priv->identity)) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_IDENTITY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
} else if (!priv->anonymous_identity) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
} else {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
}
return FALSE;
}
@@ -2251,25 +2431,29 @@ verify_ttls (NMSetting8021x *self, gboolean phase2, GError **error)
if ( (!priv->phase2_auth || !strlen (priv->phase2_auth))
&& (!priv->phase2_autheap || !strlen (priv->phase2_autheap))) {
if (!priv->phase2_auth) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_PHASE2_AUTH);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTH);
} else if (!strlen (priv->phase2_auth)) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_AUTH);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTH);
} else if (!priv->phase2_autheap) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_PHASE2_AUTHEAP);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTHEAP);
} else {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_AUTHEAP);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTHEAP);
}
return FALSE;
}
@@ -2283,16 +2467,18 @@ verify_identity (NMSetting8021x *self, gboolean phase2, GError **error)
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
if (!priv->identity) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_IDENTITY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
return FALSE;
} else if (!strlen (priv->identity)) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_IDENTITY);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
return FALSE;
}
@@ -2321,6 +2507,7 @@ typedef struct {
static EAPMethodsTable eap_methods_table[] = {
{ "leap", need_secrets_password, verify_identity },
+ { "pwd", need_secrets_password, verify_identity },
{ "md5", need_secrets_password, verify_identity },
{ "pap", need_secrets_password, verify_identity },
{ "chap", need_secrets_password, verify_identity },
@@ -2433,10 +2620,11 @@ verify_cert (GByteArray *array, const char *prop_name, GError **error)
break;
}
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- "%s", prop_name);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_name);
return FALSE;
}
@@ -2445,7 +2633,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
{
NMSetting8021x *self = NM_SETTING_802_1X (setting);
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
- const char *valid_eap[] = { "leap", "md5", "tls", "peap", "ttls", "sim", "fast", NULL };
+ const char *valid_eap[] = { "leap", "md5", "tls", "peap", "ttls", "sim", "fast", "pwd", NULL };
const char *valid_phase1_peapver[] = { "0", "1", NULL };
const char *valid_phase1_peaplabel[] = { "0", "1", NULL };
const char *valid_phase1_fast_pac[] = { "0", "1", "2", "3", NULL };
@@ -2457,18 +2645,20 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_return_val_if_fail (*error == NULL, FALSE);
if (!priv->eap) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
- NM_SETTING_802_1X_EAP);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_EAP);
return FALSE;
}
if (!_nm_utils_string_slist_validate (priv->eap, valid_eap)) {
- g_set_error (error,
- NM_SETTING_802_1X_ERROR,
- NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_EAP);
+ g_set_error_literal (error,
+ NM_SETTING_802_1X_ERROR,
+ NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_EAP);
return FALSE;
}
@@ -2492,7 +2682,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE1_PEAPVER);
+ _("'%s' is not a valid value for the property"),
+ priv->phase1_peapver);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE1_PEAPVER);
return FALSE;
}
@@ -2500,7 +2692,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE1_PEAPLABEL);
+ _("'%s' is not a valid value for the property"),
+ priv->phase1_peaplabel);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE1_PEAPLABEL);
return FALSE;
}
@@ -2508,7 +2702,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING);
+ _("'%s' is not a valid value for the property"),
+ priv->phase1_fast_provisioning);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING);
return FALSE;
}
@@ -2516,7 +2712,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_AUTH);
+ _("'%s' is not a valid value for the property"),
+ priv->phase2_auth);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTH);
return FALSE;
}
@@ -2524,7 +2722,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_802_1X_ERROR,
NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
- NM_SETTING_802_1X_PHASE2_AUTHEAP);
+ _("'%s' is not a valid value for the property"),
+ priv->phase2_autheap);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTHEAP);
return FALSE;
}
@@ -2551,7 +2751,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
static void
nm_setting_802_1x_init (NMSetting8021x *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_802_1X_SETTING_NAME, NULL);
}
static void
@@ -2578,9 +2777,9 @@ finalize (GObject *object)
g_byte_array_free (priv->password_raw, TRUE);
g_free (priv->pin);
- nm_utils_slist_free (priv->eap, g_free);
- nm_utils_slist_free (priv->altsubject_matches, g_free);
- nm_utils_slist_free (priv->phase2_altsubject_matches, g_free);
+ g_slist_free_full (priv->eap, g_free);
+ g_slist_free_full (priv->altsubject_matches, g_free);
+ g_slist_free_full (priv->phase2_altsubject_matches, g_free);
if (priv->ca_cert)
g_byte_array_free (priv->ca_cert, TRUE);
@@ -2628,7 +2827,7 @@ set_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_EAP:
- nm_utils_slist_free (priv->eap, g_free);
+ g_slist_free_full (priv->eap, g_free);
priv->eap = g_value_dup_boxed (value);
break;
case PROP_IDENTITY:
@@ -2664,7 +2863,7 @@ set_property (GObject *object, guint prop_id,
priv->subject_match = g_value_dup_string (value);
break;
case PROP_ALTSUBJECT_MATCHES:
- nm_utils_slist_free (priv->altsubject_matches, g_free);
+ g_slist_free_full (priv->altsubject_matches, g_free);
priv->altsubject_matches = g_value_dup_boxed (value);
break;
case PROP_CLIENT_CERT:
@@ -2720,7 +2919,7 @@ set_property (GObject *object, guint prop_id,
priv->phase2_subject_match = g_value_dup_string (value);
break;
case PROP_PHASE2_ALTSUBJECT_MATCHES:
- nm_utils_slist_free (priv->phase2_altsubject_matches, g_free);
+ g_slist_free_full (priv->phase2_altsubject_matches, g_free);
priv->phase2_altsubject_matches = g_value_dup_boxed (value);
break;
case PROP_PHASE2_CLIENT_CERT:
@@ -2937,9 +3136,9 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
* NMSetting8021x:eap:
*
* The allowed EAP method to be used when authenticating to the network with
- * 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", and
- * "fast". Each method requires different configuration using the
- * properties of this object; refer to wpa_supplicant documentation for the
+ * 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd",
+ * and "fast". Each method requires different configuration using the
+ * properties of this setting; refer to wpa_supplicant documentation for the
* allowed combinations.
**/
g_object_class_install_property
@@ -2949,18 +3148,18 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"The allowed EAP method to be used when "
"authenticating to the network with 802.1x. "
"Valid methods are: 'leap', 'md5', 'tls', 'peap', "
- "'ttls', and 'fast'. Each method requires "
+ "'ttls', 'pwd', and 'fast'. Each method requires "
"different configuration using the properties of "
"this setting; refer to wpa_supplicant "
"documentation for the allowed combinations.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:identity:
*
- * Identity string for EAP authentication methods. Often the user's
- * user or login name.
+ * Identity string for EAP authentication methods. Often the user's user or
+ * login name.
**/
g_object_class_install_property
(object_class, PROP_IDENTITY,
@@ -2969,7 +3168,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"Identity string for EAP authentication methods. "
"Often the user's user or login name.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:anonymous-identity:
@@ -2987,7 +3186,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"types that support different tunneled identity like "
"EAP-TTLS.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:pac-file:
@@ -3000,14 +3199,25 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"PAC file",
"UTF-8 encoded file path containing PAC for EAP-FAST.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:ca-cert:
*
* Contains the CA certificate if used by the EAP method specified in the
- * #NMSetting8021x:eap property. Setting this property directly is
- * discouraged; use the nm_setting_802_1x_set_ca_cert() function instead.
+ * #NMSetting8021x:eap property.
+ *
+ * Certificate data is specified using a "scheme"; two are currently
+ * supported: blob and path. When using the blob scheme (which is backwards
+ * compatible with NM 0.7.x) this property should be set to the
+ * certificate's DER encoded data. When using the path scheme, this property
+ * should be set to the full UTF-8 encoded path of the certificate, prefixed
+ * with the string "file://" and ending with a terminating NUL byte. This
+ * property can be unset even if the EAP method supports CA certificates,
+ * but this allows man-in-the-middle attacks and is NOT recommended.
+ *
+ * Setting this property directly is discouraged; use the
+ * nm_setting_802_1x_set_ca_cert() function instead.
**/
g_object_class_install_property
(object_class, PROP_CA_CERT,
@@ -3028,7 +3238,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"supports CA certificates, but this allows "
"man-in-the-middle attacks and is NOT recommended.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:ca-path:
@@ -3046,15 +3256,14 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"verification chain in addition to the certificate "
"specified in the 'ca-cert' property.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:subject-match:
*
- * Substring to be matched against the subject of the certificate
- * presented by the authentication server. When unset, no
- * verification of the authentication server certificate's subject
- * is performed.
+ * Substring to be matched against the subject of the certificate presented
+ * by the authentication server. When unset, no verification of the
+ * authentication server certificate's subject is performed.
**/
g_object_class_install_property
(object_class, PROP_SUBJECT_MATCH,
@@ -3066,15 +3275,14 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"authentication server certificate's subject is "
"performed.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:altsubject-matches:
*
* List of strings to be matched against the altSubjectName of the
- * certificate presented by the authentication server. If the list
- * is empty, no verification of the server certificate's
- * altSubjectName is performed.
+ * certificate presented by the authentication server. If the list is empty,
+ * no verification of the server certificate's altSubjectName is performed.
**/
g_object_class_install_property
(object_class, PROP_ALTSUBJECT_MATCHES,
@@ -3087,14 +3295,23 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"of the server certificate's "
"altSubjectName is performed.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:client-cert:
*
* Contains the client certificate if used by the EAP method specified in
- * the #NMSetting8021x:eap property. Setting this property directly is
- * discouraged; use the nm_setting_802_1x_set_client_cert() function instead.
+ * the #NMSetting8021x:eap property.
+ *
+ * Certificate data is specified using a "scheme"; two are currently
+ * supported: blob and path. When using the blob scheme (which is backwards
+ * compatible with NM 0.7.x) this property should be set to the
+ * certificate's DER encoded data. When using the path scheme, this property
+ * should be set to the full UTF-8 encoded path of the certificate, prefixed
+ * with the string "file://" and ending with a terminating NUL byte.
+ *
+ * Setting this property directly is discouraged; use the
+ * nm_setting_802_1x_set_client_cert() function instead.
**/
g_object_class_install_property
(object_class, PROP_CLIENT_CERT,
@@ -3112,7 +3329,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"certificate, prefixed with the string 'file://' "
"and ending with a terminating NULL byte.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase1-peapver:
@@ -3136,7 +3353,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"PEAP version. To do so, this property may be set to "
"'0' or '1' to force that specific PEAP version.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase1-peaplabel:
@@ -3156,7 +3373,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"Set to '1' to force use of the new PEAP label. See "
"the wpa_supplicant documentation for more details.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase1-fast-provisioning:
@@ -3181,16 +3398,16 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"provisioning). See the wpa_supplicant documentation "
"for more details.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-auth:
*
* Specifies the allowed "phase 2" inner non-EAP authentication methods when
* an EAP method that uses an inner TLS tunnel is specified in the
- * #NMSetting8021x:eap property. Recognized non-EAP phase2 methods are
+ * #NMSetting8021x:eap property. Recognized non-EAP "phase 2" methods are
* "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls".
- * Each 'phase 2' inner method requires specific parameters for successful
+ * Each "phase 2" inner method requires specific parameters for successful
* authentication; see the wpa_supplicant documentation for more details.
**/
g_object_class_install_property
@@ -3206,15 +3423,15 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"specific parameters for successful authentication; "
"see the wpa_supplicant documentation for more details.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-autheap:
*
* Specifies the allowed "phase 2" inner EAP-based authentication methods
* when an EAP method that uses an inner TLS tunnel is specified in the
- * #NMSetting8021x:eap property. Recognized EAP-based phase2 methods are
- * "md5", "mschapv2", "otp", "gtc", and "tls". Each 'phase 2' inner method
+ * #NMSetting8021x:eap property. Recognized EAP-based "phase 2" methods are
+ * "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method
* requires specific parameters for successful authentication; see the
* wpa_supplicant documentation for more details.
**/
@@ -3231,13 +3448,24 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"for successful authentication; see the wpa_supplicant "
"documentation for more details.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-ca-cert:
*
- * Contains the CA certificate if used by the EAP method specified in the
- * #NMSetting8021x:phase2-auth or #NMSetting8021x:phase2-autheap properties.
+ * Contains the "phase 2" CA certificate if used by the EAP method specified
+ * in the #NMSetting8021x:phase2-auth or #NMSetting8021x:phase2-autheap
+ * properties.
+ *
+ * Certificate data is specified using a "scheme"; two are currently
+ * supported: blob and path. When using the blob scheme (which is backwards
+ * compatible with NM 0.7.x) this property should be set to the
+ * certificate's DER encoded data. When using the path scheme, this property
+ * should be set to the full UTF-8 encoded path of the certificate, prefixed
+ * with the string "file://" and ending with a terminating NUL byte. This
+ * property can be unset even if the EAP method supports CA certificates,
+ * but this allows man-in-the-middle attacks and is NOT recommended.
+ *
* Setting this property directly is discouraged; use the
* nm_setting_802_1x_set_phase2_ca_cert() function instead.
**/
@@ -3261,7 +3489,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"certificates, but this allows man-in-the-middle "
"attacks and is NOT recommended.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-ca-path:
@@ -3279,15 +3507,15 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"verification chain in addition to the certificate "
"specified in the 'phase2-ca-cert' property.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-subject-match:
*
- * Substring to be matched against the subject of the certificate
- * presented by the authentication server during the inner "phase
- * 2" authentication. When unset, no verification of the
- * authentication server certificate's subject is performed.
+ * Substring to be matched against the subject of the certificate presented
+ * by the authentication server during the inner "phase 2"
+ * authentication. When unset, no verification of the authentication server
+ * certificate's subject is performed.
**/
g_object_class_install_property
(object_class, PROP_PHASE2_SUBJECT_MATCH,
@@ -3300,16 +3528,15 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"the authentication server certificate's subject "
"is performed.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-altsubject-matches:
*
* List of strings to be matched against the altSubjectName of the
- * certificate presented by the authentication server during the
- * inner "phase 2" authentication. If the list is empty, no
- * verification of the server certificate's altSubjectName is
- * performed.
+ * certificate presented by the authentication server during the inner
+ * "phase 2" authentication. If the list is empty, no verification of the
+ * server certificate's altSubjectName is performed.
**/
g_object_class_install_property
(object_class, PROP_PHASE2_ALTSUBJECT_MATCHES,
@@ -3324,14 +3551,25 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"verification of the server certificate's "
"altSubjectName is performed.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-client-cert:
*
- * Contains the client certificate if used by the EAP method specified in
- * the #NMSetting8021x:phase2-auth or #NMSetting8021x:phase2-autheap
- * properties. Setting this property directly is discouraged; use the
+ * Contains the "phase 2" client certificate if used by the EAP method
+ * specified in the #NMSetting8021x:phase2-auth or
+ * #NMSetting8021x:phase2-autheap properties.
+ *
+ * Certificate data is specified using a "scheme"; two are currently
+ * supported: blob and path. When using the blob scheme (which is backwards
+ * compatible with NM 0.7.x) this property should be set to the
+ * certificate's DER encoded data. When using the path scheme, this property
+ * should be set to the full UTF-8 encoded path of the certificate, prefixed
+ * with the string "file://" and ending with a terminating NUL byte. This
+ * property can be unset even if the EAP method supports CA certificates,
+ * but this allows man-in-the-middle attacks and is NOT recommended.
+ *
+ * Setting this property directly is discouraged; use the
* nm_setting_802_1x_set_phase2_client_cert() function instead.
**/
g_object_class_install_property
@@ -3351,14 +3589,14 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"certificate, prefixed with the string 'file://' "
"and ending with a terminating NULL byte.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:password:
*
- * Password used for EAP authentication methods. If both
- * #NMSetting8021x:password and #NMSetting8021x:password-raw are
- * specified, #NMSetting8021x:password is preferred.
+ * UTF-8 encoded password used for EAP authentication methods. If both the
+ * #NMSetting8021x:password property and the #NMSetting8021x:password-raw
+ * property are specified, #NMSetting8021x:password is preferred.
**/
g_object_class_install_property
(object_class, PROP_PASSWORD,
@@ -3366,12 +3604,12 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"Password",
"UTF-8 encoded password used for EAP authentication methods.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSetting8021x:password-flags:
*
- * Flags indicating how to handle #NMSetting8021x:password:.
+ * Flags indicating how to handle the #NMSetting8021x:password property.
**/
g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_802_1X_PASSWORD_FLAGS,
@@ -3380,15 +3618,15 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:password-raw:
*
- * Password used for EAP authentication methods delivered as a
- * UTF-8-encoded array of bytes. If both #NMSetting8021x:password
- * and #NMSetting8021x:password-raw are specified,
- * #NMSetting8021x:password is preferred.
+ * Password used for EAP authentication methods, given as a byte array to
+ * allow passwords in other encodings than UTF-8 to be used. If both the
+ * #NMSetting8021x:password property and the #NMSetting8021x:password-raw
+ * property are specified, #NMSetting8021x:password is preferred.
**/
g_object_class_install_property
(object_class, PROP_PASSWORD_RAW,
@@ -3401,12 +3639,12 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"'password-raw' are given, 'password' is "
"preferred.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSetting8021x:password-raw-flags:
*
- * Flags indicating how to handle #NMSetting8021x:password-raw:.
+ * Flags indicating how to handle the #NMSetting8021x:password-raw property.
**/
g_object_class_install_property (object_class, PROP_PASSWORD_RAW_FLAGS,
g_param_spec_uint (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS,
@@ -3415,13 +3653,30 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:private-key:
*
- * Contains the private key if the #NMSetting8021x:eap property is set to
- * 'tls'. Setting this property directly is discouraged; use the
+ * Contains the private key when the #NMSetting8021x:eap property is set to
+ * "tls".
+ *
+ * Key data is specified using a "scheme"; two are currently supported: blob
+ * and path. When using the blob scheme and private keys, this property
+ * should be set to the key's encrypted PEM encoded data. When using private
+ * keys with the path scheme, this property should be set to the full UTF-8
+ * encoded path of the key, prefixed with the string "file://" and ending
+ * with a terminating NUL byte. When using PKCS#12 format private keys and
+ * the blob scheme, this property should be set to the PKCS#12 data and the
+ * #NMSetting8021x:private-key-password property must be set to password
+ * used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files
+ * and the path scheme, this property should be set to the full UTF-8
+ * encoded path of the key, prefixed with the string "file://" and and
+ * ending with a terminating NUL byte, and as with the blob scheme the
+ * "private-key-password" property must be set to the password used to
+ * decode the PKCS#12 private key and certificate.
+ *
+ * Setting this property directly is discouraged; use the
* nm_setting_802_1x_set_private_key() function instead.
*
* WARNING: #NMSetting8021x:private-key is not a "secret" property, and thus
@@ -3458,14 +3713,14 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"the password used to decode the PKCS#12 private "
"key and certificate.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:private-key-password:
*
- * The password used to decrypt the private key specified in
- * #NMSetting8021x:private-key when the private key either uses the path
- * scheme, or if the private key is a PKCS#12 format key. Setting this
+ * The password used to decrypt the private key specified in the
+ * #NMSetting8021x:private-key property when the private key either uses the
+ * path scheme, or if the private key is a PKCS#12 format key. Setting this
* property directly is not generally necessary except when returning
* secrets to NetworkManager; it is generally set automatically when setting
* the private key by the nm_setting_802_1x_set_private_key() function.
@@ -3479,12 +3734,13 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"private key either uses the path scheme, or if the "
"private key is a PKCS#12 format key.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSetting8021x:private-key-password-flags:
*
- * Flags indicating how to handle #NMSetting8021x:private-key-password:.
+ * Flags indicating how to handle the #NMSetting8021x:private-key-password
+ * property.
**/
g_object_class_install_property (object_class, PROP_PRIVATE_KEY_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS,
@@ -3494,16 +3750,31 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-private-key:
*
- * Private key data used by "phase 2" inner authentication methods.
+ * Contains the "phase 2" inner private key when the
+ * #NMSetting8021x:phase2-auth or #NMSetting8021x:phase2-autheap property is
+ * set to "tls".
+ *
+ * Key data is specified using a "scheme"; two are currently supported: blob
+ * and path. When using the blob scheme and private keys, this property
+ * should be set to the key's encrypted PEM encoded data. When using private
+ * keys with the path scheme, this property should be set to the full UTF-8
+ * encoded path of the key, prefixed with the string "file://" and ending
+ * with a terminating NUL byte. When using PKCS#12 format private keys and
+ * the blob scheme, this property should be set to the PKCS#12 data and the
+ * #NMSetting8021x:phase2-private-key-password property must be set to
+ * password used to decrypt the PKCS#12 certificate and key. When using
+ * PKCS#12 files and the path scheme, this property should be set to the
+ * full UTF-8 encoded path of the key, prefixed with the string "file://"
+ * and and ending with a terminating NUL byte, and as with the blob scheme
+ * the #NMSetting8021x:phase2-private-key-password property must be set to
+ * the password used to decode the PKCS#12 private key and certificate.
*
- * Contains the "phase 2" inner private key if the #NMSetting8021x:phase2-auth
- * or #NMSetting8021x:phase2-autheap property is set to 'tls'. Setting this
- * property directly is discouraged; use the
+ * Setting this property directly is discouraged; use the
* nm_setting_802_1x_set_phase2_private_key() function instead.
**/
g_object_class_install_property
@@ -3535,17 +3806,17 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"set to the password used to decode the PKCS#12 "
"private key and certificate.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:phase2-private-key-password:
*
- * The password used to decrypt the private key specified in
- * #NMSetting8021x:phase2-private-key when the private key either uses the
- * path scheme, or if the private key is a PKCS#12 format key. Setting this
- * property directly is not generally necessary except when returning
- * secrets to NetworkManager; it is generally set automatically when setting
- * the private key by the nm_setting_802_1x_set_phase2_private_key() function.
+ * The password used to decrypt the "phase 2" private key specified in the
+ * #NMSetting8021x:phase2-private-key property when the private key either
+ * uses the path scheme, or is a PKCS#12 format key. Setting this property
+ * directly is not generally necessary except when returning secrets to
+ * NetworkManager; it is generally set automatically when setting the
+ * private key by the nm_setting_802_1x_set_phase2_private_key() function.
**/
g_object_class_install_property
(object_class, PROP_PHASE2_PRIVATE_KEY_PASSWORD,
@@ -3556,12 +3827,13 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"phase2 private key either uses the path scheme, or "
"if the phase2 private key is a PKCS#12 format key.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSetting8021x:phase2-private-key-password-flags:
*
- * Flags indicating how to handle #NMSetting8021x:phase2-private-key-password:.
+ * Flags indicating how to handle the
+ * #NMSetting8021x:phase2-private-key-password property.
**/
g_object_class_install_property (object_class, PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS,
@@ -3571,7 +3843,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:pin:
@@ -3584,12 +3856,12 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"PIN",
"PIN used for EAP authentication methods.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSetting8021x:pin-flags:
*
- * Flags indicating how to handle #NMSetting8021x:pin:.
+ * Flags indicating how to handle the #NMSetting8021x:pin property.
**/
g_object_class_install_property (object_class, PROP_PIN_FLAGS,
g_param_spec_uint (NM_SETTING_802_1X_PIN_FLAGS,
@@ -3598,17 +3870,17 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSetting8021x:system-ca-certs:
*
- * When TRUE, overrides #NMSetting8021x:ca-path and
+ * When %TRUE, overrides the #NMSetting8021x:ca-path and
* #NMSetting8021x:phase2-ca-path properties using the system CA directory
* specified at configure time with the --system-ca-path switch. The
* certificates in this directory are added to the verification chain in
- * addition to any certificates specified by the #NMSetting8021x:ca-cert
- * and #NMSetting8021x:phase2-ca-cert properties.
+ * addition to any certificates specified by the #NMSetting8021x:ca-cert and
+ * #NMSetting8021x:phase2-ca-cert properties.
**/
g_object_class_install_property
(object_class, PROP_SYSTEM_CA_CERTS,
@@ -3622,7 +3894,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
"chain in addition to any certificates specified "
"by the 'ca-cert' and 'phase2-ca-cert' properties.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/* Initialize crypto lbrary. */
if (!nm_utils_init (&error)) {
diff --git a/libnm-util/nm-setting-8021x.h b/libnm-util/nm-setting-8021x.h
index 8381fed7c..263630ec0 100644
--- a/libnm-util/nm-setting-8021x.h
+++ b/libnm-util/nm-setting-8021x.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -170,6 +170,8 @@ guint32 nm_setting_802_1x_get_num_eap_methods (NMSetting8
const char * nm_setting_802_1x_get_eap_method (NMSetting8021x *setting, guint32 i);
gboolean nm_setting_802_1x_add_eap_method (NMSetting8021x *setting, const char *eap);
void nm_setting_802_1x_remove_eap_method (NMSetting8021x *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_802_1x_remove_eap_method_by_value (NMSetting8021x *setting, const char *eap);
void nm_setting_802_1x_clear_eap_methods (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_identity (NMSetting8021x *setting);
@@ -195,11 +197,14 @@ const char * nm_setting_802_1x_get_subject_match (NMSetting8
guint32 nm_setting_802_1x_get_num_altsubject_matches (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_altsubject_match (NMSetting8021x *setting,
- guint32 i);
+ guint32 i);
gboolean nm_setting_802_1x_add_altsubject_match (NMSetting8021x *setting,
- const char *altsubject_match);
+ const char *altsubject_match);
void nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting,
- guint32 i);
+ guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_802_1x_remove_altsubject_match_by_value (NMSetting8021x *setting,
+ const char *altsubject_match);
void nm_setting_802_1x_clear_altsubject_matches (NMSetting8021x *setting);
NMSetting8021xCKScheme nm_setting_802_1x_get_client_cert_scheme (NMSetting8021x *setting);
@@ -232,14 +237,17 @@ gboolean nm_setting_802_1x_set_phase2_ca_cert (NMSetting8
const char * nm_setting_802_1x_get_phase2_subject_match (NMSetting8021x *setting);
-guint32 nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting);
-const char * nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting,
- guint32 i);
-gboolean nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting,
- const char *phase2_altsubject_match);
-void nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting,
- guint32 i);
-void nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting);
+guint32 nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting,
+ guint32 i);
+gboolean nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting,
+ const char *phase2_altsubject_match);
+void nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting,
+ guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_802_1x_remove_phase2_altsubject_match_by_value (NMSetting8021x *setting,
+ const char *phase2_altsubject_match);
+void nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting);
NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_client_cert_scheme (NMSetting8021x *setting);
const GByteArray * nm_setting_802_1x_get_phase2_client_cert_blob (NMSetting8021x *setting);
diff --git a/libnm-util/nm-setting-adsl.c b/libnm-util/nm-setting-adsl.c
index de0850e6d..00cbb4aff 100644
--- a/libnm-util/nm-setting-adsl.c
+++ b/libnm-util/nm-setting-adsl.c
@@ -20,14 +20,16 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2011 - 2013 Red Hat, Inc.
*/
+#include <string.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-adsl.h"
#include "nm-setting-ppp.h"
#include "nm-setting-private.h"
#include "nm-utils.h"
-#include <string.h>
/**
* SECTION:nm-setting-adsl
@@ -204,34 +206,39 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingAdslPrivate *priv = NM_SETTING_ADSL_GET_PRIVATE (setting);
if (!priv->username) {
- g_set_error (error,
- NM_SETTING_ADSL_ERROR,
- NM_SETTING_ADSL_ERROR_MISSING_PROPERTY,
- NM_SETTING_ADSL_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_ADSL_ERROR,
+ NM_SETTING_ADSL_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_USERNAME);
return FALSE;
} else if (!strlen (priv->username)) {
- g_set_error (error,
- NM_SETTING_ADSL_ERROR,
- NM_SETTING_ADSL_ERROR_INVALID_PROPERTY,
- NM_SETTING_ADSL_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_ADSL_ERROR,
+ NM_SETTING_ADSL_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_USERNAME);
return FALSE;
}
if (priv->password && !strlen (priv->password)) {
- g_set_error (error,
- NM_SETTING_ADSL_ERROR,
- NM_SETTING_ADSL_ERROR_INVALID_PROPERTY,
- NM_SETTING_ADSL_PASSWORD);
+ g_set_error_literal (error,
+ NM_SETTING_ADSL_ERROR,
+ NM_SETTING_ADSL_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_PASSWORD);
return FALSE;
}
if (strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_PPPOA) &&
- strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_PPPOE) &&
- strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_IPOATM)) {
+ strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_PPPOE) &&
+ strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_IPOATM)) {
g_set_error (error,
NM_SETTING_ADSL_ERROR,
NM_SETTING_ADSL_ERROR_INVALID_PROPERTY,
- NM_SETTING_ADSL_PROTOCOL);
+ _("'%s' is not a valid value for the property"),
+ priv->protocol);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_PROTOCOL);
return FALSE;
}
@@ -240,7 +247,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_ADSL_ERROR,
NM_SETTING_ADSL_ERROR_INVALID_PROPERTY,
- NM_SETTING_ADSL_ENCAPSULATION);
+ _("'%s' is not a valid value for the property"),
+ priv->encapsulation);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_ENCAPSULATION);
return FALSE;
}
@@ -267,7 +276,6 @@ need_secrets (NMSetting *setting)
static void
nm_setting_adsl_init (NMSettingAdsl *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_ADSL_SETTING_NAME, NULL);
}
static void
@@ -383,7 +391,7 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
"Username",
"Username used to authenticate with the pppoa service.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingAdsl:password:
@@ -396,12 +404,12 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
"Password",
"Password used to authenticate with the pppoa service.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingAdsl:password-flags:
*
- * Flags indicating how to handle #NMSettingAdsl:password:.
+ * Flags indicating how to handle the #NMSettingAdsl:password property.
**/
g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_ADSL_PASSWORD_FLAGS,
@@ -410,12 +418,12 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingAdsl:protocol:
*
- * ADSL connection protocol, can be pppoa, pppoe or ipoatm.
+ * ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".
**/
g_object_class_install_property
(object_class, PROP_PROTOCOL,
@@ -423,12 +431,12 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
"Protocol",
"ADSL connection protocol.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingAdsl:encapsulation:
*
- * ADSL connection encapsulation, can be vcmux or llc.
+ * Encapsulation of ADSL connection. Can be "vcmux" or "llc".
**/
g_object_class_install_property
(object_class, PROP_ENCAPSULATION,
@@ -436,12 +444,12 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
"Encapsulation",
"Encapsulation of ADSL connection",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingAdsl:vpi:
*
- * ADSL connection vpi.
+ * VPI of ADSL connection
**/
g_object_class_install_property
(object_class, PROP_VPI,
@@ -449,12 +457,12 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
"VPI",
"VPI of ADSL connection",
0, 65536, 0,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingAdsl:vci:
*
- * ADSL connection vci.
+ * VCI of ADSL connection
**/
g_object_class_install_property
(object_class, PROP_VCI,
@@ -462,5 +470,5 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
"VCI",
"VCI of ADSL connection",
0, 65536, 0,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
}
diff --git a/libnm-util/nm-setting-bluetooth.c b/libnm-util/nm-setting-bluetooth.c
index e81e53336..5c13257c4 100644
--- a/libnm-util/nm-setting-bluetooth.c
+++ b/libnm-util/nm-setting-bluetooth.c
@@ -20,12 +20,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
#include <net/ethernet.h>
+#include <glib/gi18n.h>
#include "nm-param-spec-specialized.h"
#include "nm-dbus-glib-types.h"
@@ -131,48 +132,44 @@ nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting)
return NM_SETTING_BLUETOOTH_GET_PRIVATE (setting)->bdaddr;
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
-{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
-
- return strcmp (nm_setting_get_name (setting), str);
-}
-
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (setting);
if (!priv->bdaddr) {
- g_set_error (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY,
- NM_SETTING_BLUETOOTH_BDADDR);
+ g_set_error_literal (error,
+ NM_SETTING_BLUETOOTH_ERROR,
+ NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_BDADDR);
return FALSE;
}
if (priv->bdaddr && priv->bdaddr->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- NM_SETTING_BLUETOOTH_BDADDR);
+ g_set_error_literal (error,
+ NM_SETTING_BLUETOOTH_ERROR,
+ NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_BDADDR);
return FALSE;
}
if (!priv->type) {
- g_set_error (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY,
- NM_SETTING_BLUETOOTH_TYPE);
+ g_set_error_literal (error,
+ NM_SETTING_BLUETOOTH_ERROR,
+ NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_TYPE);
return FALSE;
} else if (!g_str_equal (priv->type, NM_SETTING_BLUETOOTH_TYPE_DUN) &&
!g_str_equal (priv->type, NM_SETTING_BLUETOOTH_TYPE_PANU)) {
g_set_error (error,
NM_SETTING_BLUETOOTH_ERROR,
NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- NM_SETTING_BLUETOOTH_TYPE);
+ _("'%s' is not a valid value for the property"),
+ priv->type);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_TYPE);
return FALSE;
}
@@ -181,18 +178,16 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
&& !strcmp (priv->type, NM_SETTING_BLUETOOTH_TYPE_DUN)) {
gboolean gsm = FALSE, cdma = FALSE;
- gsm = !!g_slist_find_custom (all_settings,
- (gpointer) NM_SETTING_GSM_SETTING_NAME,
- find_setting_by_name);
- cdma = !!g_slist_find_custom (all_settings,
- (gpointer) NM_SETTING_CDMA_SETTING_NAME,
- find_setting_by_name);
+ gsm = !!nm_setting_find_in_list (all_settings, NM_SETTING_GSM_SETTING_NAME);
+ cdma = !!nm_setting_find_in_list (all_settings, NM_SETTING_CDMA_SETTING_NAME);
if (!gsm && !cdma) {
g_set_error (error,
NM_SETTING_BLUETOOTH_ERROR,
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND,
- NM_SETTING_BLUETOOTH_TYPE);
+ _("requires '%s' or '%s' setting"),
+ NM_SETTING_GSM_SETTING_NAME, NM_SETTING_CDMA_SETTING_NAME);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_TYPE);
return FALSE;
}
}
@@ -206,7 +201,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
static void
nm_setting_bluetooth_init (NMSettingBluetooth *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_BLUETOOTH_SETTING_NAME, NULL);
}
static void
@@ -289,12 +283,12 @@ nm_setting_bluetooth_class_init (NMSettingBluetoothClass *setting_class)
"Bluetooth address",
"The Bluetooth address of the device",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBluetooth:type:
*
- * Either 'dun' for Dial-Up Networking connections or 'panu' for Personal
+ * Either "dun" for Dial-Up Networking connections or "panu" for Personal
* Area Networking connections to devices supporting the NAP profile.
**/
g_object_class_install_property
@@ -306,5 +300,5 @@ nm_setting_bluetooth_class_init (NMSettingBluetoothClass *setting_class)
"'" NM_SETTING_BLUETOOTH_TYPE_PANU "' for "
"Personal Area Networking connections.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
}
diff --git a/libnm-util/nm-setting-bond.c b/libnm-util/nm-setting-bond.c
index e8e7b639e..5f919027d 100644
--- a/libnm-util/nm-setting-bond.c
+++ b/libnm-util/nm-setting-bond.c
@@ -18,12 +18,16 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2012 Red Hat, Inc.
+ * (C) Copyright 2011 - 2013 Red Hat, Inc.
*/
#include <string.h>
#include <stdlib.h>
+#include <errno.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include "nm-setting-bond.h"
#include "nm-param-spec-specialized.h"
@@ -80,18 +84,44 @@ enum {
LAST_PROP
};
+enum {
+ TYPE_INT,
+ TYPE_STR,
+ TYPE_BOTH,
+ TYPE_IP,
+ TYPE_IFNAME,
+};
+
typedef struct {
const char *opt;
const char *val;
+ guint opt_type;
+ guint min;
+ guint max;
+ char *list[10];
} BondDefault;
static const BondDefault defaults[] = {
- { NM_SETTING_BOND_OPTION_MODE, "balance-rr" },
- { NM_SETTING_BOND_OPTION_MIIMON, "100" },
- { NM_SETTING_BOND_OPTION_DOWNDELAY, "0" },
- { NM_SETTING_BOND_OPTION_UPDELAY, "0" },
- { NM_SETTING_BOND_OPTION_ARP_INTERVAL, "0" },
- { NM_SETTING_BOND_OPTION_ARP_IP_TARGET, "" },
+ { NM_SETTING_BOND_OPTION_MODE, "balance-rr", TYPE_BOTH, 0, 6,
+ { "balance-rr", "active-backup", "balance-xor", "broadcast", "802.3ad", "balance-tlb", "balance-alb", NULL } },
+ { NM_SETTING_BOND_OPTION_MIIMON, "100", TYPE_INT, 0, G_MAXINT },
+ { NM_SETTING_BOND_OPTION_DOWNDELAY, "0", TYPE_INT, 0, G_MAXINT },
+ { NM_SETTING_BOND_OPTION_UPDELAY, "0", TYPE_INT, 0, G_MAXINT },
+ { NM_SETTING_BOND_OPTION_ARP_INTERVAL, "0", TYPE_INT, 0, G_MAXINT },
+ { NM_SETTING_BOND_OPTION_ARP_IP_TARGET, "", TYPE_IP },
+ { NM_SETTING_BOND_OPTION_ARP_VALIDATE, "0", TYPE_BOTH, 0, 3,
+ { "none", "active", "backup", "all", NULL } },
+ { NM_SETTING_BOND_OPTION_PRIMARY, "", TYPE_IFNAME },
+ { NM_SETTING_BOND_OPTION_PRIMARY_RESELECT, "0", TYPE_BOTH, 0, 2,
+ { "always", "better", "failure", NULL } },
+ { NM_SETTING_BOND_OPTION_FAIL_OVER_MAC, "0", TYPE_BOTH, 0, 2,
+ { "none", "active", "follow", NULL } },
+ { NM_SETTING_BOND_OPTION_USE_CARRIER, "1", TYPE_INT, 0, 1 },
+ { NM_SETTING_BOND_OPTION_AD_SELECT, "0", TYPE_BOTH, 0, 2,
+ { "stable", "bandwidth", "count", NULL } },
+ { NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY, "0", TYPE_BOTH, 0, 2,
+ { "layer2", "layer3+4", "layer2+3", NULL } },
+ { NM_SETTING_BOND_OPTION_RESEND_IGMP, "1", TYPE_INT, 0, 255 },
};
/**
@@ -190,17 +220,109 @@ nm_setting_bond_get_option (NMSettingBond *setting,
}
static gboolean
-validate_option (const char *name)
+validate_int (const char *name, const char *value, const BondDefault *def)
{
+ glong num;
guint i;
- g_return_val_if_fail (name != NULL, FALSE);
- g_return_val_if_fail (name[0] != '\0', FALSE);
+ for (i = 0; i < strlen (value); i++) {
+ if (!g_ascii_isdigit (value[i]) && value[i] != '-')
+ return FALSE;
+ }
- for (i = 0; i < G_N_ELEMENTS (defaults); i++) {
- if (g_strcmp0 (defaults[i].opt, name) == 0)
+ errno = 0;
+ num = strtol (value, NULL, 10);
+ if (errno)
+ return FALSE;
+ if (num < def->min || num > def->max)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
+validate_list (const char *name, const char *value, const BondDefault *def)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (def->list) && def->list[i]; i++) {
+ if (g_strcmp0 (def->list[i], value) == 0)
return TRUE;
}
+
+ /* empty validation list means all values pass */
+ return def->list[0] == NULL ? TRUE : FALSE;
+}
+
+static gboolean
+validate_ip (const char *name, const char *value)
+{
+ char **ips, **iter;
+ gboolean success = TRUE;
+ struct in_addr addr;
+
+ if (!value || !value[0])
+ return FALSE;
+
+ ips = g_strsplit_set (value, ",", 0);
+ for (iter = ips; iter && *iter && success; iter++)
+ success = !!inet_aton (*iter, &addr);
+ g_strfreev (ips);
+
+ return success;
+}
+
+static gboolean
+validate_ifname (const char *name, const char *value)
+{
+ if (!value || !value[0])
+ return FALSE;
+
+ return nm_utils_iface_valid_name (value);
+}
+
+/**
+ * nm_setting_bond_validate_option:
+ * @name: the name of the option to validate
+ * @value: the value of the option to validate
+ *
+ * Checks whether @name is a valid bond option and @value is a valid value for
+ * the @name. If @value is %NULL, the function only validates the option name.
+ *
+ * Returns: %TRUE, if the @value is valid for the given name.
+ * If the @name is not a valid option, %FALSE will be returned.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_bond_validate_option (const char *name,
+ const char *value)
+{
+ guint i;
+
+ if (!name || !name[0])
+ return FALSE;
+
+ for (i = 0; i < G_N_ELEMENTS (defaults); i++) {
+ if (g_strcmp0 (defaults[i].opt, name) == 0) {
+ if (value == NULL)
+ return TRUE;
+ switch (defaults[i].opt_type) {
+ case TYPE_INT:
+ return validate_int (name, value, &defaults[i]);
+ case TYPE_STR:
+ return validate_list (name, value, &defaults[i]);
+ case TYPE_BOTH:
+ return validate_int (name, value, &defaults[i])
+ || validate_list (name, value, &defaults[i]);
+ case TYPE_IP:
+ return validate_ip (name, value);
+ case TYPE_IFNAME:
+ return validate_ifname (name, value);
+ }
+ return FALSE;
+ }
+ }
return FALSE;
}
@@ -220,7 +342,9 @@ nm_setting_bond_get_option_by_name (NMSettingBond *setting,
const char *name)
{
g_return_val_if_fail (NM_IS_SETTING_BOND (setting), NULL);
- g_return_val_if_fail (validate_option (name), NULL);
+
+ if (!nm_setting_bond_validate_option (name, NULL))
+ return NULL;
return g_hash_table_lookup (NM_SETTING_BOND_GET_PRIVATE (setting)->options, name);
}
@@ -236,24 +360,25 @@ nm_setting_bond_get_option_by_name (NMSettingBond *setting,
* (ie [a-zA-Z0-9]). Adding a new name replaces any existing name/value pair
* that may already exist.
*
+ * The order of how to set several options is relevant because there are options
+ * that conflict with each other.
+ *
* Returns: %TRUE if the option was valid and was added to the internal option
* list, %FALSE if it was not.
**/
-gboolean nm_setting_bond_add_option (NMSettingBond *setting,
- const char *name,
- const char *value)
+gboolean
+nm_setting_bond_add_option (NMSettingBond *setting,
+ const char *name,
+ const char *value)
{
NMSettingBondPrivate *priv;
- size_t value_len;
g_return_val_if_fail (NM_IS_SETTING_BOND (setting), FALSE);
- g_return_val_if_fail (validate_option (name), FALSE);
- g_return_val_if_fail (value != NULL, FALSE);
- priv = NM_SETTING_BOND_GET_PRIVATE (setting);
+ if (!value || !nm_setting_bond_validate_option (name, value))
+ return FALSE;
- value_len = strlen (value);
- g_return_val_if_fail (value_len > 0 && value_len < 200, FALSE);
+ priv = NM_SETTING_BOND_GET_PRIVATE (setting);
g_hash_table_insert (priv->options, g_strdup (name), g_strdup (value));
@@ -268,6 +393,8 @@ gboolean nm_setting_bond_add_option (NMSettingBond *setting,
g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_UPDELAY);
}
+ g_object_notify (G_OBJECT (setting), NM_SETTING_BOND_OPTIONS);
+
return TRUE;
}
@@ -286,10 +413,17 @@ gboolean
nm_setting_bond_remove_option (NMSettingBond *setting,
const char *name)
{
+ gboolean found;
+
g_return_val_if_fail (NM_IS_SETTING_BOND (setting), FALSE);
- g_return_val_if_fail (validate_option (name), FALSE);
- return g_hash_table_remove (NM_SETTING_BOND_GET_PRIVATE (setting)->options, name);
+ if (!nm_setting_bond_validate_option (name, NULL))
+ return FALSE;
+
+ found = g_hash_table_remove (NM_SETTING_BOND_GET_PRIVATE (setting)->options, name);
+ if (found)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_BOND_OPTIONS);
+ return found;
}
/**
@@ -329,25 +463,16 @@ nm_setting_bond_get_option_default (NMSettingBond *setting, const char *name)
guint i;
g_return_val_if_fail (NM_IS_SETTING_BOND (setting), NULL);
- g_return_val_if_fail (validate_option (name), NULL);
+ g_return_val_if_fail (nm_setting_bond_validate_option (name, NULL), NULL);
for (i = 0; i < G_N_ELEMENTS (defaults); i++) {
if (g_strcmp0 (defaults[i].opt, name) == 0)
return defaults[i].val;
}
- /* Any option that passes validate_option() should also be found in defaults */
+ /* Any option that passes nm_setting_bond_validate_option() should also be found in defaults */
g_assert_not_reached ();
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
-{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
-
- return strcmp (nm_setting_get_name (setting), str);
-}
-
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
@@ -364,33 +489,35 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NULL };
int miimon = 0, arp_interval = 0;
const char *arp_ip_target = NULL;
+ const char *primary;
if (!priv->interface_name || !strlen(priv->interface_name)) {
- g_set_error (error,
- NM_SETTING_BOND_ERROR,
- NM_SETTING_BOND_ERROR_MISSING_PROPERTY,
- NM_SETTING_BOND_INTERFACE_NAME);
+ g_set_error_literal (error,
+ NM_SETTING_BOND_ERROR,
+ NM_SETTING_BOND_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_INTERFACE_NAME);
return FALSE;
}
if (!nm_utils_iface_valid_name (priv->interface_name)) {
- g_set_error (error,
- NM_SETTING_BOND_ERROR,
- NM_SETTING_BOND_ERROR_INVALID_PROPERTY,
- NM_SETTING_BOND_INTERFACE_NAME);
+ g_set_error_literal (error,
+ NM_SETTING_BOND_ERROR,
+ NM_SETTING_BOND_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_INTERFACE_NAME);
return FALSE;
}
g_hash_table_iter_init (&iter, priv->options);
while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) {
- if ( !validate_option (key)
- || !value[0]
- || (strlen (value) > 200)
- || strchr (value, ' ')) {
- g_set_error_literal (error,
- NM_SETTING_BOND_ERROR,
- NM_SETTING_BOND_ERROR_INVALID_OPTION,
- key);
+ if (!value[0] || !nm_setting_bond_validate_option (key, value)) {
+ g_set_error (error,
+ NM_SETTING_BOND_ERROR,
+ NM_SETTING_BOND_ERROR_INVALID_OPTION,
+ _("invalid option '%s' or its value '%s'"),
+ key, value);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
}
@@ -407,7 +534,10 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
+ _("only one of '%s' and '%s' can be set"),
+ NM_SETTING_BOND_OPTION_MIIMON,
NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
}
value = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_MODE);
@@ -415,14 +545,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_MISSING_OPTION,
+ _("mandatory option '%s' is missing"),
NM_SETTING_BOND_OPTION_MODE);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
if (!_nm_utils_string_in_list (value, valid_modes)) {
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
- NM_SETTING_BOND_OPTION_MODE);
+ _("'%s' is not a valid value for '%s'"),
+ value, NM_SETTING_BOND_OPTION_MODE);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
@@ -433,15 +567,45 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
- NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ _("'%s=%s' is incompatible with '%s > 0'"),
+ NM_SETTING_BOND_OPTION_MODE, value, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ return FALSE;
}
}
- if (g_slist_find_custom (all_settings, NM_SETTING_INFINIBAND_SETTING_NAME, find_setting_by_name)) {
+
+ primary = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_PRIMARY);
+ if (strcmp (value, "active-backup") == 0) {
+ if (primary && !nm_utils_iface_valid_name (primary)) {
+ g_set_error (error,
+ NM_SETTING_BOND_ERROR,
+ NM_SETTING_BOND_ERROR_INVALID_OPTION,
+ _("'%s' is not a valid interface name for '%s' option"),
+ primary, NM_SETTING_BOND_OPTION_PRIMARY);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ return FALSE;
+ }
+ } else {
+ if (primary) {
+ g_set_error (error,
+ NM_SETTING_BOND_ERROR,
+ NM_SETTING_BOND_ERROR_INVALID_OPTION,
+ _("'%s' option is only valid for '%s=%s'"),
+ NM_SETTING_BOND_OPTION_PRIMARY,
+ NM_SETTING_BOND_OPTION_MODE, "active-backup");
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ return FALSE;
+ }
+ }
+
+ if (nm_setting_find_in_list (all_settings, NM_SETTING_INFINIBAND_SETTING_NAME)) {
if (strcmp (value, "active-backup") != 0) {
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
- NM_SETTING_BOND_OPTION_MODE);
+ _("'%s=%s' is not a valid configuration for '%s'"),
+ NM_SETTING_BOND_OPTION_MODE, value, NM_SETTING_INFINIBAND_SETTING_NAME);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
}
@@ -452,14 +616,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
- NM_SETTING_BOND_OPTION_UPDELAY);
+ _("'%s' option requires '%s' option to be set"),
+ NM_SETTING_BOND_OPTION_UPDELAY, NM_SETTING_BOND_OPTION_MIIMON);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
if (g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_DOWNDELAY)) {
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
- NM_SETTING_BOND_OPTION_DOWNDELAY);
+ _("'%s' option requires '%s' option to be set"),
+ NM_SETTING_BOND_OPTION_DOWNDELAY, NM_SETTING_BOND_OPTION_MIIMON);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
}
@@ -477,27 +645,33 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_MISSING_OPTION,
- NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ _("'%s' option requires '%s' option to be set"),
+ NM_SETTING_BOND_OPTION_ARP_INTERVAL, NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
addrs = g_strsplit (arp_ip_target, ",", -1);
if (!addrs[0]) {
- g_strfreev (addrs);
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
+ _("'%s' option is empty"),
NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ g_strfreev (addrs);
return FALSE;
}
for (i = 0; addrs[i]; i++) {
if (!inet_pton (AF_INET, addrs[i], &addr)) {
- g_strfreev (addrs);
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
- NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ _("'%s' is not a valid IPv4 address for '%s' option"),
+ NM_SETTING_BOND_OPTION_ARP_IP_TARGET, addrs[i]);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ g_strfreev (addrs);
return FALSE;
}
}
@@ -507,7 +681,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BOND_ERROR,
NM_SETTING_BOND_ERROR_INVALID_OPTION,
- NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ _("'%s' option requires '%s' option to be set"),
+ NM_SETTING_BOND_OPTION_ARP_IP_TARGET, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
return FALSE;
}
}
@@ -528,14 +704,10 @@ nm_setting_bond_init (NMSettingBond *setting)
{
NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (setting);
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_BOND_SETTING_NAME,
- NULL);
-
priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
/* Default values: */
nm_setting_bond_add_option (setting, NM_SETTING_BOND_OPTION_MODE, "balance-rr");
- nm_setting_bond_add_option (setting, NM_SETTING_BOND_OPTION_MIIMON, "100");
}
static void
@@ -564,6 +736,7 @@ set_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_INTERFACE_NAME:
+ g_free (priv->interface_name);
priv->interface_name = g_value_dup_string (value);
break;
case PROP_OPTIONS:
@@ -626,14 +799,14 @@ nm_setting_bond_class_init (NMSettingBondClass *setting_class)
"InterfaceName",
"The name of the virtual in-kernel bonding network interface",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBond:options:
*
- * Dictionary of key/value pairs of bonding options. Both keys
- * and values must be strings. Option names must contain only
- * alphanumeric characters (ie, [a-zA-Z0-9]).
+ * Dictionary of key/value pairs of bonding options. Both keys and values
+ * must be strings. Option names must contain only alphanumeric characters
+ * (ie, [a-zA-Z0-9]).
**/
g_object_class_install_property
(object_class, PROP_OPTIONS,
@@ -644,5 +817,5 @@ nm_setting_bond_class_init (NMSettingBondClass *setting_class)
"strings. Option names must contain only "
"alphanumeric characters (ie, [a-zA-Z0-9]).",
DBUS_TYPE_G_MAP_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
}
diff --git a/libnm-util/nm-setting-bond.h b/libnm-util/nm-setting-bond.h
index f326a95b2..f3358c7f8 100644
--- a/libnm-util/nm-setting-bond.h
+++ b/libnm-util/nm-setting-bond.h
@@ -18,7 +18,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2012 Red Hat, Inc.
+ * (C) Copyright 2011 - 2013 Red Hat, Inc.
*/
#ifndef NM_SETTING_BOND_H
@@ -59,12 +59,20 @@ GQuark nm_setting_bond_error_quark (void);
#define NM_SETTING_BOND_OPTIONS "options"
/* Valid options for the 'options' property */
-#define NM_SETTING_BOND_OPTION_MODE "mode"
-#define NM_SETTING_BOND_OPTION_MIIMON "miimon"
-#define NM_SETTING_BOND_OPTION_DOWNDELAY "downdelay"
-#define NM_SETTING_BOND_OPTION_UPDELAY "updelay"
-#define NM_SETTING_BOND_OPTION_ARP_INTERVAL "arp_interval"
-#define NM_SETTING_BOND_OPTION_ARP_IP_TARGET "arp_ip_target"
+#define NM_SETTING_BOND_OPTION_MODE "mode"
+#define NM_SETTING_BOND_OPTION_MIIMON "miimon"
+#define NM_SETTING_BOND_OPTION_DOWNDELAY "downdelay"
+#define NM_SETTING_BOND_OPTION_UPDELAY "updelay"
+#define NM_SETTING_BOND_OPTION_ARP_INTERVAL "arp_interval"
+#define NM_SETTING_BOND_OPTION_ARP_IP_TARGET "arp_ip_target"
+#define NM_SETTING_BOND_OPTION_ARP_VALIDATE "arp_validate"
+#define NM_SETTING_BOND_OPTION_PRIMARY "primary"
+#define NM_SETTING_BOND_OPTION_PRIMARY_RESELECT "primary_reselect"
+#define NM_SETTING_BOND_OPTION_FAIL_OVER_MAC "fail_over_mac"
+#define NM_SETTING_BOND_OPTION_USE_CARRIER "use_carrier"
+#define NM_SETTING_BOND_OPTION_AD_SELECT "ad_select"
+#define NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY "xmit_hash_policy"
+#define NM_SETTING_BOND_OPTION_RESEND_IGMP "resend_igmp"
typedef struct {
NMSetting parent;
@@ -97,6 +105,10 @@ gboolean nm_setting_bond_add_option (NMSettingBond *setting,
gboolean nm_setting_bond_remove_option (NMSettingBond *setting,
const char *name);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_bond_validate_option (const char *name,
+ const char *value);
+
const char **nm_setting_bond_get_valid_options (NMSettingBond *setting);
const char * nm_setting_bond_get_option_default (NMSettingBond *setting,
diff --git a/libnm-util/nm-setting-bridge-port.c b/libnm-util/nm-setting-bridge-port.c
index c1abf9c80..64be56627 100644
--- a/libnm-util/nm-setting-bridge-port.c
+++ b/libnm-util/nm-setting-bridge-port.c
@@ -18,13 +18,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2012 Red Hat, Inc.
+ * (C) Copyright 2012 - 2013 Red Hat, Inc.
*/
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include "nm-setting-bridge-port.h"
#include "nm-utils.h"
@@ -151,7 +152,11 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BRIDGE_PORT_ERROR,
NM_SETTING_BRIDGE_PORT_ERROR_INVALID_PROPERTY,
- NM_SETTING_BRIDGE_PORT_PRIORITY);
+ _("'%d' is not a valid value for the property (should be <= %d)"),
+ priv->priority, BR_MAX_PORT_PRIORITY);
+ g_prefix_error (error, "%s.%s: ",
+ NM_SETTING_BRIDGE_PORT_SETTING_NAME,
+ NM_SETTING_BRIDGE_PORT_PRIORITY);
return FALSE;
}
@@ -159,7 +164,11 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BRIDGE_PORT_ERROR,
NM_SETTING_BRIDGE_PORT_ERROR_INVALID_PROPERTY,
- NM_SETTING_BRIDGE_PORT_PATH_COST);
+ _("'%d' is not a valid value for the property (should be <= %d)"),
+ priv->path_cost, BR_MAX_PATH_COST);
+ g_prefix_error (error, "%s.%s: ",
+ NM_SETTING_BRIDGE_PORT_SETTING_NAME,
+ NM_SETTING_BRIDGE_PORT_PATH_COST);
return FALSE;
}
@@ -186,7 +195,6 @@ nm_setting_bridge_port_new (void)
static void
nm_setting_bridge_port_init (NMSettingBridgePort *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_BRIDGE_PORT_SETTING_NAME, NULL);
}
static void
@@ -260,12 +268,13 @@ nm_setting_bridge_port_class_init (NMSettingBridgePortClass *setting_class)
"Priority",
"The Spanning Tree Protocol (STP) priority of this bridge port",
0, BR_MAX_PORT_PRIORITY, BR_DEF_PRIORITY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridgePort:path-cost:
*
- * The Spanning Tree Protocol (STP) port cost for destinations via this port.
+ * The Spanning Tree Protocol (STP) port cost for destinations via this
+ * port.
*
* Since: 0.9.8
**/
@@ -276,12 +285,12 @@ nm_setting_bridge_port_class_init (NMSettingBridgePortClass *setting_class)
"The Spanning Tree Protocol (STP) port cost for "
"destinations via this port.",
0, BR_MAX_PATH_COST, 100,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridgePort:hairpin-mode:
*
- * Enables or disabled 'hairpin mode' for the port, which allows frames to
+ * Enables or disabled "hairpin mode" for the port, which allows frames to
* be sent back out through the port the frame was received on.
*
* Since: 0.9.8
@@ -294,6 +303,5 @@ nm_setting_bridge_port_class_init (NMSettingBridgePortClass *setting_class)
"port, which allows frames to be sent back out "
"through the port the frame was received on.",
FALSE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
-
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
}
diff --git a/libnm-util/nm-setting-bridge.c b/libnm-util/nm-setting-bridge.c
index a763206b2..0908573d2 100644
--- a/libnm-util/nm-setting-bridge.c
+++ b/libnm-util/nm-setting-bridge.c
@@ -18,13 +18,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2012 Red Hat, Inc.
+ * (C) Copyright 2011 - 2013 Red Hat, Inc.
*/
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+#include <linux/if_ether.h>
#include "nm-setting-bridge.h"
#include "nm-param-spec-specialized.h"
@@ -75,6 +77,7 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BRIDGE)
typedef struct {
char * interface_name;
+ GByteArray *mac_address;
gboolean stp;
guint16 priority;
guint16 forward_delay;
@@ -86,6 +89,7 @@ typedef struct {
enum {
PROP_0,
PROP_INTERFACE_NAME,
+ PROP_MAC_ADDRESS,
PROP_STP,
PROP_PRIORITY,
PROP_FORWARD_DELAY,
@@ -127,6 +131,22 @@ nm_setting_bridge_get_interface_name (NMSettingBridge *setting)
}
/**
+ * nm_setting_bridge_get_mac_address:
+ * @setting: the #NMSettingBridge
+ *
+ * Returns: the #NMSettingBridge:mac-address property of the setting
+ *
+ * Since: 0.9.10
+ **/
+const GByteArray *
+nm_setting_bridge_get_mac_address (NMSettingBridge *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), NULL);
+
+ return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->mac_address;
+}
+
+/**
* nm_setting_bridge_get_stp:
* @setting: the #NMSettingBridge
*
@@ -244,10 +264,12 @@ check_range (guint32 val,
GError **error)
{
if ((val != 0) && (val < min || val > max)) {
- g_set_error_literal (error,
- NM_SETTING_BRIDGE_ERROR,
- NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY,
- prop);
+ g_set_error (error,
+ NM_SETTING_BRIDGE_ERROR,
+ NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY,
+ _("value '%d' is out of range <%d-%d>"),
+ val, min, max);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BRIDGE_SETTING_NAME, prop);
return FALSE;
}
return TRUE;
@@ -259,10 +281,11 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (setting);
if (!priv->interface_name || !strlen(priv->interface_name)) {
- g_set_error (error,
- NM_SETTING_BRIDGE_ERROR,
- NM_SETTING_BRIDGE_ERROR_MISSING_PROPERTY,
- NM_SETTING_BRIDGE_INTERFACE_NAME);
+ g_set_error_literal (error,
+ NM_SETTING_BRIDGE_ERROR,
+ NM_SETTING_BRIDGE_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_BRIDGE_INTERFACE_NAME);
return FALSE;
}
@@ -270,7 +293,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_BRIDGE_ERROR,
NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY,
- NM_SETTING_BRIDGE_INTERFACE_NAME);
+ _("'%s' is not a valid interface name"),
+ priv->interface_name);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_BRIDGE_INTERFACE_NAME);
+ return FALSE;
+ }
+
+ if (priv->mac_address && priv->mac_address->len != ETH_ALEN) {
+ g_set_error_literal (error,
+ NM_SETTING_BRIDGE_ERROR,
+ NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY,
+ _("is not a valid MAC address"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_BRIDGE_MAC_ADDRESS);
return FALSE;
}
@@ -316,7 +350,6 @@ get_virtual_iface_name (NMSetting *setting)
static void
nm_setting_bridge_init (NMSettingBridge *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_BRIDGE_SETTING_NAME, NULL);
}
static void
@@ -326,6 +359,9 @@ finalize (GObject *object)
g_free (priv->interface_name);
+ if (priv->mac_address)
+ g_byte_array_free (priv->mac_address, TRUE);
+
G_OBJECT_CLASS (nm_setting_bridge_parent_class)->finalize (object);
}
@@ -340,6 +376,11 @@ set_property (GObject *object, guint prop_id,
g_free (priv->interface_name);
priv->interface_name = g_value_dup_string (value);
break;
+ case PROP_MAC_ADDRESS:
+ if (priv->mac_address)
+ g_byte_array_free (priv->mac_address, TRUE);
+ priv->mac_address = g_value_dup_boxed (value);
+ break;
case PROP_STP:
priv->stp = g_value_get_boolean (value);
break;
@@ -375,6 +416,9 @@ get_property (GObject *object, guint prop_id,
case PROP_INTERFACE_NAME:
g_value_set_string (value, nm_setting_bridge_get_interface_name (setting));
break;
+ case PROP_MAC_ADDRESS:
+ g_value_set_boxed (value, nm_setting_bridge_get_mac_address (setting));
+ break;
case PROP_STP:
g_value_set_boolean (value, priv->stp);
break;
@@ -418,7 +462,7 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
/**
* NMSettingBridge:interface-name:
*
- * The name of the virtual in-kernel briding network interface
+ * The name of the virtual in-kernel bridging network interface
*
* Since: 0.9.8
**/
@@ -428,7 +472,24 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
"InterfaceName",
"The name of the virtual in-kernel bridging network interface",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+
+ /**
+ * NMSettingBridge:mac-address:
+ *
+ * If specified, the MAC address of bridge. When creating a new bridge, this
+ * MAC address will be set. When matching an existing (outside
+ * NetworkManager created) bridge, this MAC address must match.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ _nm_param_spec_specialized (NM_SETTING_BRIDGE_MAC_ADDRESS,
+ "MAC Address",
+ "The MAC address of the bridge",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridge:stp:
@@ -444,7 +505,7 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
"Controls whether Spanning Tree Protocol (STP) "
"is enabled for this bridge.",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridge:priority:
@@ -464,7 +525,7 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
"lowest priority bridge will be elected the root "
"bridge.",
0, G_MAXUINT16, 0x8000,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridge:forward-delay:
@@ -480,7 +541,7 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
"The Spanning Tree Protocol (STP) forwarding "
"delay, in seconds.",
0, BR_MAX_FORWARD_DELAY, 15,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridge:hello-time:
@@ -496,7 +557,7 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
"The Spanning Tree Protocol (STP) hello time, in "
"seconds.",
0, BR_MAX_HELLO_TIME, 2,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridge:max-age:
@@ -512,12 +573,12 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
"The Spanning Tree Protocol (STP) maximum message "
"age, in seconds.",
0, BR_MAX_MAX_AGE, 20,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingBridge:ageing-time:
*
- * The ethernet MAC address aging time, in seconds.
+ * The Ethernet MAC address aging time, in seconds.
*
* Since: 0.9.8
**/
@@ -525,8 +586,8 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
(object_class, PROP_AGEING_TIME,
g_param_spec_uint (NM_SETTING_BRIDGE_AGEING_TIME,
"AgeingTime",
- "The ethernet MAC address aging time, in seconds.",
+ "The Ethernet MAC address aging time, in seconds.",
0, BR_MAX_AGEING_TIME, 300,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
}
diff --git a/libnm-util/nm-setting-bridge.h b/libnm-util/nm-setting-bridge.h
index b0b53fd5f..1e8957045 100644
--- a/libnm-util/nm-setting-bridge.h
+++ b/libnm-util/nm-setting-bridge.h
@@ -56,6 +56,7 @@ typedef enum {
GQuark nm_setting_bridge_error_quark (void);
#define NM_SETTING_BRIDGE_INTERFACE_NAME "interface-name"
+#define NM_SETTING_BRIDGE_MAC_ADDRESS "mac-address"
#define NM_SETTING_BRIDGE_STP "stp"
#define NM_SETTING_BRIDGE_PRIORITY "priority"
#define NM_SETTING_BRIDGE_FORWARD_DELAY "forward-delay"
@@ -83,6 +84,9 @@ NMSetting * nm_setting_bridge_new (void);
const char * nm_setting_bridge_get_interface_name (NMSettingBridge *setting);
+NM_AVAILABLE_IN_0_9_10
+const GByteArray *nm_setting_bridge_get_mac_address (NMSettingBridge *setting);
+
gboolean nm_setting_bridge_get_stp (NMSettingBridge *setting);
guint16 nm_setting_bridge_get_priority (NMSettingBridge *setting);
diff --git a/libnm-util/nm-setting-cdma.c b/libnm-util/nm-setting-cdma.c
index d68531a6e..7acfe8520 100644
--- a/libnm-util/nm-setting-cdma.c
+++ b/libnm-util/nm-setting-cdma.c
@@ -18,10 +18,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
*/
#include <string.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-cdma.h"
#include "nm-utils.h"
#include "nm-setting-private.h"
@@ -155,32 +157,36 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (setting);
if (!priv->number) {
- g_set_error (error,
- NM_SETTING_CDMA_ERROR,
- NM_SETTING_CDMA_ERROR_MISSING_PROPERTY,
- NM_SETTING_CDMA_NUMBER);
+ g_set_error_literal (error,
+ NM_SETTING_CDMA_ERROR,
+ NM_SETTING_CDMA_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CDMA_SETTING_NAME, NM_SETTING_CDMA_NUMBER);
return FALSE;
} else if (!strlen (priv->number)) {
- g_set_error (error,
- NM_SETTING_CDMA_ERROR,
- NM_SETTING_CDMA_ERROR_INVALID_PROPERTY,
- NM_SETTING_CDMA_NUMBER);
+ g_set_error_literal (error,
+ NM_SETTING_CDMA_ERROR,
+ NM_SETTING_CDMA_ERROR_INVALID_PROPERTY,
+ _("property is empty'"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CDMA_SETTING_NAME, NM_SETTING_CDMA_NUMBER);
return FALSE;
}
if (priv->username && !strlen (priv->username)) {
- g_set_error (error,
- NM_SETTING_CDMA_ERROR,
- NM_SETTING_CDMA_ERROR_INVALID_PROPERTY,
- NM_SETTING_CDMA_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_CDMA_ERROR,
+ NM_SETTING_CDMA_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CDMA_SETTING_NAME, NM_SETTING_CDMA_USERNAME);
return FALSE;
}
if (priv->password && !strlen (priv->password)) {
- g_set_error (error,
- NM_SETTING_CDMA_ERROR,
- NM_SETTING_CDMA_ERROR_INVALID_PROPERTY,
- NM_SETTING_CDMA_PASSWORD);
+ g_set_error_literal (error,
+ NM_SETTING_CDMA_ERROR,
+ NM_SETTING_CDMA_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CDMA_SETTING_NAME, NM_SETTING_CDMA_PASSWORD);
return FALSE;
}
@@ -209,7 +215,6 @@ need_secrets (NMSetting *setting)
static void
nm_setting_cdma_init (NMSettingCdma *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_CDMA_SETTING_NAME, NULL);
}
static void
@@ -310,7 +315,7 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class)
"specified, the default number (#777) is used when "
"required.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingCdma:username:
@@ -327,7 +332,7 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class)
"required. Note that many providers do not require "
"a username or accept any username.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingCdma:password:
@@ -344,12 +349,12 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class)
"required. Note that many providers do not require "
"a password or accept any password.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingCdma:password-flags:
*
- * Flags indicating how to handle #NMSettingCdma:password:.
+ * Flags indicating how to handle the #NMSettingCdma:password property.
**/
g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_CDMA_PASSWORD_FLAGS,
@@ -358,5 +363,5 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
}
diff --git a/libnm-util/nm-setting-connection.c b/libnm-util/nm-setting-connection.c
index 9c3f2ce28..56e87a4df 100644
--- a/libnm-util/nm-setting-connection.c
+++ b/libnm-util/nm-setting-connection.c
@@ -19,11 +19,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
+#include <glib/gi18n.h>
+
#include "nm-utils.h"
#include "nm-dbus-glib-types.h"
#include "nm-param-spec-specialized.h"
@@ -80,6 +82,7 @@ typedef struct {
typedef struct {
char *id;
char *uuid;
+ char *interface_name;
char *type;
char *master;
char *slave_type;
@@ -89,12 +92,14 @@ typedef struct {
gboolean read_only;
char *zone;
GSList *secondaries; /* secondary connections to activate with the base connection */
+ guint gateway_ping_timeout;
} NMSettingConnectionPrivate;
enum {
PROP_0,
PROP_ID,
PROP_UUID,
+ PROP_INTERFACE_NAME,
PROP_TYPE,
PROP_PERMISSIONS,
PROP_AUTOCONNECT,
@@ -104,6 +109,7 @@ enum {
PROP_MASTER,
PROP_SLAVE_TYPE,
PROP_SECONDARIES,
+ PROP_GATEWAY_PING_TIMEOUT,
LAST_PROP
};
@@ -236,6 +242,24 @@ nm_setting_connection_get_uuid (NMSettingConnection *setting)
}
/**
+ * nm_setting_connection_get_interface_name:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:interface-name property of the connection.
+ *
+ * Returns: the connection's interface name
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_setting_connection_get_interface_name (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->interface_name;
+}
+
+/**
* nm_setting_connection_get_connection_type:
* @setting: the #NMSettingConnection
*
@@ -393,6 +417,7 @@ nm_setting_connection_add_permission (NMSettingConnection *setting,
p = permission_new (pitem);
g_return_val_if_fail (p != NULL, FALSE);
priv->permissions = g_slist_append (priv->permissions, p);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_PERMISSIONS);
return TRUE;
}
@@ -419,8 +444,54 @@ nm_setting_connection_remove_permission (NMSettingConnection *setting,
permission_free ((Permission *) iter->data);
priv->permissions = g_slist_delete_link (priv->permissions, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_PERMISSIONS);
}
+/**
+ * nm_setting_connection_remove_permission_by_value:
+ * @setting: the #NMSettingConnection
+ * @ptype: the permission type; at this time only "user" is supported
+ * @pitem: the permission item formatted as required for @ptype
+ * @detail: (allow-none): unused at this time; must be %NULL
+ *
+ * Removes the permission from the connection.
+ * At this time, only the "user" permission type is supported, and @pitem must
+ * be a username. See #NMSettingConnection:permissions: for more details.
+ *
+ * Returns: %TRUE if the permission was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ */
+gboolean
+nm_setting_connection_remove_permission_by_value (NMSettingConnection *setting,
+ const char *ptype,
+ const char *pitem,
+ const char *detail)
+{
+ NMSettingConnectionPrivate *priv;
+ Permission *p;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), FALSE);
+ g_return_val_if_fail (ptype, FALSE);
+ g_return_val_if_fail (strlen (ptype) > 0, FALSE);
+ g_return_val_if_fail (detail == NULL, FALSE);
+
+ /* Only "user" for now... */
+ g_return_val_if_fail (strcmp (ptype, "user") == 0, FALSE);
+
+ priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+ for (iter = priv->permissions; iter; iter = g_slist_next (iter)) {
+ p = iter->data;
+ if (strcmp (pitem, p->item) == 0) {
+ permission_free ((Permission *) iter->data);
+ priv->permissions = g_slist_delete_link (priv->permissions, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_PERMISSIONS);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
/**
* nm_setting_connection_get_autoconnect:
@@ -604,6 +675,7 @@ nm_setting_connection_add_secondary (NMSettingConnection *setting,
}
priv->secondaries = g_slist_append (priv->secondaries, g_strdup (sec_uuid));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_SECONDARIES);
return TRUE;
}
@@ -630,108 +702,196 @@ nm_setting_connection_remove_secondary (NMSettingConnection *setting, guint32 id
g_free (elt->data);
priv->secondaries = g_slist_delete_link (priv->secondaries, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_SECONDARIES);
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
+/**
+ * nm_setting_connection_remove_secondary_by_value:
+ * @setting: the #NMSettingConnection
+ * @sec_uuid: the secondary connection UUID to remove
+ *
+ * Removes the secondary coonnection UUID @sec_uuid.
+ *
+ * Returns: %TRUE if the secondary connection UUID was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_connection_remove_secondary_by_value (NMSettingConnection *setting,
+ const char *sec_uuid)
{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
+ NMSettingConnectionPrivate *priv;
+ GSList *iter;
- return strcmp (nm_setting_get_name (setting), str);
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), FALSE);
+ g_return_val_if_fail (sec_uuid != NULL, FALSE);
+ g_return_val_if_fail (sec_uuid[0] != '\0', FALSE);
+
+ priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+ for (iter = priv->secondaries; iter; iter = g_slist_next (iter)) {
+ if (!strcmp (sec_uuid, (char *) iter->data)) {
+ priv->secondaries = g_slist_delete_link (priv->secondaries, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_SECONDARIES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
+/**
+ * nm_setting_connection_get_gateway_ping_timeout:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns: the value contained in the #NMSettingConnection:gateway-ping-timeout
+ * property.
+ *
+ * Since: 0.9.10
+ **/
+guint32
+nm_setting_connection_get_gateway_ping_timeout (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), 0);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->gateway_ping_timeout;
+}
+
+
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+ gboolean is_slave;
+ GSList *iter;
if (!priv->id) {
- g_set_error (error,
- NM_SETTING_CONNECTION_ERROR,
- NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
- NM_SETTING_CONNECTION_ID);
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_ID);
return FALSE;
} else if (!strlen (priv->id)) {
- g_set_error (error,
- NM_SETTING_CONNECTION_ERROR,
- NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
- NM_SETTING_CONNECTION_ID);
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_ID);
return FALSE;
}
if (!priv->uuid) {
- g_set_error (error,
- NM_SETTING_CONNECTION_ERROR,
- NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
- NM_SETTING_CONNECTION_UUID);
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_UUID);
return FALSE;
} else if (!nm_utils_is_uuid (priv->uuid)) {
g_set_error (error,
NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
- NM_SETTING_CONNECTION_UUID);
+ _("'%s' is not a valid UUID"),
+ priv->uuid);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_UUID);
return FALSE;
}
+ /* If the connection has a virtual interface name, it must match
+ * the connection setting's interface name.
+ */
+ for (iter = all_settings; iter; iter = iter->next) {
+ const char *virtual_iface;
+
+ virtual_iface = nm_setting_get_virtual_iface_name (iter->data);
+ if (virtual_iface) {
+ if (priv->interface_name) {
+ if (strcmp (priv->interface_name, virtual_iface) != 0) {
+ g_set_error (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' doesn't match the virtual interface name '%s'"),
+ priv->interface_name, virtual_iface);
+ g_prefix_error (error, "%s.%s: ",
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return FALSE;
+ }
+ } else
+ priv->interface_name = g_strdup (virtual_iface);
+ break;
+ }
+ }
+
+ if (priv->interface_name) {
+ if (!nm_utils_iface_valid_name (priv->interface_name)) {
+ g_set_error (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' is not a valid interface name"),
+ priv->interface_name);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return FALSE;
+ }
+ }
+
if (!priv->type) {
- g_set_error (error,
- NM_SETTING_CONNECTION_ERROR,
- NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
- NM_SETTING_CONNECTION_TYPE);
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE;
} else if (!strlen (priv->type)) {
- g_set_error (error,
- NM_SETTING_CONNECTION_ERROR,
- NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
- NM_SETTING_CONNECTION_TYPE);
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE;
}
/* Make sure the corresponding 'type' item is present */
- if (all_settings && !g_slist_find_custom (all_settings, priv->type, find_setting_by_name)) {
+ if (all_settings && !nm_setting_find_in_list (all_settings, priv->type)) {
g_set_error (error,
NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND,
- NM_SETTING_CONNECTION_TYPE);
+ _("requires presence of '%s' setting in the connection"),
+ priv->type);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE;
}
- /*
- * Bonding: Slaves are not allowed to have any IP configuration.
- */
- if (priv->slave_type && all_settings &&
- !strcmp(priv->slave_type, NM_SETTING_BOND_SETTING_NAME)) {
- GSList *list;
+ is_slave = ( !g_strcmp0 (priv->slave_type, NM_SETTING_BOND_SETTING_NAME)
+ || !g_strcmp0 (priv->slave_type, NM_SETTING_BRIDGE_SETTING_NAME)
+ || !g_strcmp0 (priv->slave_type, NM_SETTING_TEAM_SETTING_NAME));
- list = g_slist_find_custom (all_settings, NM_SETTING_IP4_CONFIG_SETTING_NAME,
- find_setting_by_name);
- if (list) {
- NMSettingIP4Config *s_ip4 = g_slist_nth_data (list, 0);
- g_assert (s_ip4);
+ /* Bond/bridge/team slaves are not allowed to have any IP configuration. */
+ if (is_slave) {
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_find_in_list (all_settings, NM_SETTING_IP4_CONFIG_SETTING_NAME));
+ if (s_ip4) {
if (strcmp (nm_setting_ip4_config_get_method (s_ip4),
NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
- g_set_error (error,
- NM_SETTING_CONNECTION_ERROR,
- NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED,
- "No IP configuration allowed for bonding slave");
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED,
+ _("IPv4 configuration is not allowed for slave"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
return FALSE;
}
}
- list = g_slist_find_custom (all_settings, NM_SETTING_IP6_CONFIG_SETTING_NAME,
- find_setting_by_name);
- if (list) {
- NMSettingIP6Config *s_ip6 = g_slist_nth_data (list, 0);
- g_assert (s_ip6);
-
+ s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_find_in_list (all_settings, NM_SETTING_IP6_CONFIG_SETTING_NAME));
+ if (s_ip6) {
if (strcmp (nm_setting_ip6_config_get_method (s_ip6),
NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
- g_set_error (error,
- NM_SETTING_CONNECTION_ERROR,
- NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED,
- "No IPv6 configuration allowed for bonding slave");
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED,
+ _("IPv6 configuration is not allowed for slave"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
return FALSE;
}
}
@@ -758,7 +918,6 @@ compare_property (NMSetting *setting,
static void
nm_setting_connection_init (NMSettingConnection *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_CONNECTION_SETTING_NAME, NULL);
}
static void
@@ -768,12 +927,13 @@ finalize (GObject *object)
g_free (priv->id);
g_free (priv->uuid);
+ g_free (priv->interface_name);
g_free (priv->type);
g_free (priv->zone);
g_free (priv->master);
g_free (priv->slave_type);
- nm_utils_slist_free (priv->permissions, (GDestroyNotify) permission_free);
- nm_utils_slist_free (priv->secondaries, g_free);
+ g_slist_free_full (priv->permissions, (GDestroyNotify) permission_free);
+ g_slist_free_full (priv->secondaries, g_free);
G_OBJECT_CLASS (nm_setting_connection_parent_class)->finalize (object);
}
@@ -809,12 +969,16 @@ set_property (GObject *object, guint prop_id,
g_free (priv->uuid);
priv->uuid = g_value_dup_string (value);
break;
+ case PROP_INTERFACE_NAME:
+ g_free (priv->interface_name);
+ priv->interface_name = g_value_dup_string (value);
+ break;
case PROP_TYPE:
g_free (priv->type);
priv->type = g_value_dup_string (value);
break;
case PROP_PERMISSIONS:
- nm_utils_slist_free (priv->permissions, (GDestroyNotify) permission_free);
+ g_slist_free_full (priv->permissions, (GDestroyNotify) permission_free);
priv->permissions = perm_stringlist_to_permlist (g_value_get_boxed (value));
break;
case PROP_AUTOCONNECT:
@@ -839,9 +1003,12 @@ set_property (GObject *object, guint prop_id,
priv->slave_type = g_value_dup_string (value);
break;
case PROP_SECONDARIES:
- nm_utils_slist_free (priv->secondaries, g_free);
+ g_slist_free_full (priv->secondaries, g_free);
priv->secondaries = g_value_dup_boxed (value);
break;
+ case PROP_GATEWAY_PING_TIMEOUT:
+ priv->gateway_ping_timeout = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -872,6 +1039,9 @@ get_property (GObject *object, guint prop_id,
case PROP_UUID:
g_value_set_string (value, nm_setting_connection_get_uuid (setting));
break;
+ case PROP_INTERFACE_NAME:
+ g_value_set_string (value, nm_setting_connection_get_interface_name (setting));
+ break;
case PROP_TYPE:
g_value_set_string (value, nm_setting_connection_get_connection_type (setting));
break;
@@ -899,6 +1069,9 @@ get_property (GObject *object, guint prop_id,
case PROP_SECONDARIES:
g_value_set_boxed (value, priv->secondaries);
break;
+ case PROP_GATEWAY_PING_TIMEOUT:
+ g_value_set_uint (value, priv->gateway_ping_timeout);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -925,8 +1098,8 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
/**
* NMSettingConnection:id:
*
- * A human readable unique idenfier for the connection, like "Work WiFi" or
- * "T-Mobile 3G".
+ * A human readable unique identifier for the connection, like "Work Wi-Fi"
+ * or "T-Mobile 3G".
**/
g_object_class_install_property
(object_class, PROP_ID,
@@ -936,21 +1109,21 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"one or more characters and may change over the lifetime "
"of the connection if the user decides to rename it.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingConnection:uuid:
*
- * A universally unique idenfier for the connection, for example generated
- * with libuuid. Should be assigned when the connection is created, and
+ * A universally unique identifier for the connection, for example generated
+ * with libuuid. It should be assigned when the connection is created, and
* never changed as long as the connection still applies to the same
- * network. For example, should not be changed when the
- * #NMSettingConnection:id or #NMSettingIP4Config changes, but might need
- * to be re-created when the WiFi SSID, mobile broadband network provider,
- * or #NMSettingConnection:type changes.
+ * network. For example, it should not be changed when the
+ * #NMSettingConnection:id property or #NMSettingIP4Config changes, but
+ * might need to be re-created when the Wi-Fi SSID, mobile broadband network
+ * provider, or #NMSettingConnection:type property changes.
*
- * The UUID must be in the format '2815492f-7e56-435e-b2e9-246bd7cdc664'
- * (ie, contains only hexadecimal characters and '-'). A suitable UUID may
+ * The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664"
+ * (ie, contains only hexadecimal characters and "-"). A suitable UUID may
* be generated by nm_utils_uuid_generate() or
* nm_utils_uuid_generate_from_string().
**/
@@ -966,18 +1139,52 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"still applies to the same network. For example, "
"it should not be changed when the user changes the "
"connection's 'id', but should be recreated when the "
- "WiFi SSID, mobile broadband network provider, or the "
+ "Wi-Fi SSID, mobile broadband network provider, or the "
"connection type changes.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+
+ /**
+ * NMSettingConnection:interface-name:
+ *
+ * The name of the network interface this connection is bound to. If not
+ * set, then the connection can be attached to any interface of the
+ * appropriate type (subject to restrictions imposed by other settings).
+ *
+ * For connection types where interface names cannot easily be made
+ * persistent (e.g. mobile broadband or USB Ethernet), this property should
+ * not be used. Setting this property restricts the interfaces a connection
+ * can be used with, and if interface names change or are reordered the
+ * connection may be applied to the wrong interface.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_INTERFACE_NAME,
+ g_param_spec_string (NM_SETTING_CONNECTION_INTERFACE_NAME,
+ "Interface name",
+ "Interface name this connection is bound to. "
+ "If not set, then the connection can be attached "
+ "to any interface of the appropriate type (subject "
+ "to restrictions imposed by other settings). For "
+ "connection types where interface names cannot easily "
+ "be made persistent (e.g. mobile broadband or USB "
+ "Ethernet), this property should not be used. Setting "
+ "this property restricts the interfaces a connection can "
+ "be used with, and if interface names change or are "
+ "reordered the connection may be applied to the wrong "
+ "interface.",
+ NULL,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingConnection:type:
*
- * The general hardware type of the device used for the network connection,
- * contains the name of the #NMSetting object that describes that hardware
- * type's parameters. For example, for WiFi devices, the name of the
- * #NMSettingWireless setting.
+ * Base type of the connection. For hardware-dependent connections, should
+ * contain the setting name of the hardware-type specific setting (ie,
+ * "802-3-ethernet" or "802-11-wireless" or "bluetooth", etc), and for
+ * non-hardware dependent connections like VPN or otherwise, should contain
+ * the setting name of that setting type (ie, "vpn" or "bridge", etc).
**/
g_object_class_install_property
(object_class, PROP_TYPE,
@@ -991,24 +1198,22 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"otherwise, should contain the setting name of that "
"setting type (ie, 'vpn' or 'bridge', etc).",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingConnection:permissions:
*
* An array of strings defining what access a given user has to this
- * connection. If this is NULL or empty, all users are allowed to access
+ * connection. If this is %NULL or empty, all users are allowed to access
* this connection. Otherwise a user is allowed to access this connection
* if and only if they are in this list. Each entry is of the form
- * "[type]:[id]:[reserved]", for example:
- *
- * user:dcbw:blah
+ * "[type]:[id]:[reserved]"; for example, "user:dcbw:blah".
*
- * At this time only the 'user' [type] is allowed. Any other values are
+ * At this time only the "user" [type] is allowed. Any other values are
* ignored and reserved for future use. [id] is the username that this
- * permission refers to, which may not contain the ':' character. Any
- * [reserved] information present must be ignored and is reserved for
- * future use. All of [type], [id], and [reserved] must be valid UTF-8.
+ * permission refers to, which may not contain the ":" character. Any
+ * [reserved] information present must be ignored and is reserved for future
+ * use. All of [type], [id], and [reserved] must be valid UTF-8.
*/
g_object_class_install_property
(object_class, PROP_PERMISSIONS,
@@ -1030,7 +1235,7 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"use. All of [type], [id], and [reserved] must be "
"valid UTF-8.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingConnection:autoconnect:
@@ -1038,7 +1243,7 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
* Whether or not the connection should be automatically connected by
* NetworkManager when the resources for the connection are available.
* %TRUE to automatically activate the connection, %FALSE to require manual
- * intervention to activate the connection. Defaults to %TRUE.
+ * intervention to activate the connection.
**/
g_object_class_install_property
(object_class, PROP_AUTOCONNECT,
@@ -1049,32 +1254,38 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"the connection must be manually activated by the user "
"or some other mechanism.",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingConnection:timestamp:
*
* The time, in seconds since the Unix Epoch, that the connection was last
* _successfully_ fully activated.
+ *
+ * NetworkManager updates the connection timestamp periodically when the
+ * connection is active to ensure that an active connection has the latest
+ * timestamp. The property is only meant for reading (changes to this
+ * property will not be preserved).
**/
g_object_class_install_property
(object_class, PROP_TIMESTAMP,
g_param_spec_uint64 (NM_SETTING_CONNECTION_TIMESTAMP,
- "Timestamp",
- "Timestamp (in seconds since the Unix Epoch) that the "
- "connection was last successfully activated. Settings "
- "services should update the connection timestamp "
- "periodically when the connection is active to ensure "
- "that an active connection has the latest timestamp.",
- 0, G_MAXUINT64, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ "Timestamp",
+ "Timestamp (in seconds since the Unix Epoch) that the "
+ "connection was last successfully activated. NetworkManager "
+ "updates the connection timestamp periodically when the "
+ "connection is active to ensure that an active connection "
+ "has the latest timestamp. The property is only meant for "
+ "reading (changes to this property will not be preserved).",
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingConnection:read-only:
*
- * %TRUE if the connection can be modified using the providing settings
- * service's D-Bus interface with the right privileges, or %FALSE
- * if the connection is read-only and cannot be modified.
+ * %FALSE if the connection can be modified using the provided settings
+ * service's D-Bus interface with the right privileges, or %TRUE if the
+ * connection is read-only and cannot be modified.
**/
g_object_class_install_property
(object_class, PROP_READ_ONLY,
@@ -1085,15 +1296,15 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"normally set for system connections whose plugin "
"cannot yet write updated connections back out.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingConnection:zone:
*
- * The trust level of a the connection.
- * Free form case-insensitive string (for example "Home", "Work", "Public").
- * NULL or unspecified zone means the connection will be placed in the
- * default zone as defined by the firewall.
+ * The trust level of a the connection. Free form case-insensitive string
+ * (for example "Home", "Work", "Public"). %NULL or unspecified zone means
+ * the connection will be placed in the default zone as defined by the
+ * firewall.
**/
g_object_class_install_property
(object_class, PROP_ZONE,
@@ -1106,7 +1317,7 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"placed in the default zone as defined by the "
"firewall.",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingConnection:master:
@@ -1120,13 +1331,14 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"Interface name of the master device or UUID of "
"the master connection",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingConnection:slave-type:
*
- * Setting name describing the type of slave device (ie
- * #NM_SETTING_BOND_SETTING_NAME) or NULL if this connection is not a slave.
+ * Setting name of the device type of this slave's master connection (eg,
+ * %NM_SETTING_BOND_SETTING_NAME), or %NULL if this connection is not a
+ * slave.
**/
g_object_class_install_property
(object_class, PROP_SLAVE_TYPE,
@@ -1136,13 +1348,14 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
"this connection is (ie, 'bond') or NULL if this "
"connection is not a slave.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingConnection:secondaries:
*
- * List of connection UUIDs that should be activated when the base connection
- * itself is activated.
+ * List of connection UUIDs that should be activated when the base
+ * connection itself is activated. Currently only VPN connections are
+ * supported.
*
* Since: 0.9.8
**/
@@ -1151,7 +1364,26 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
_nm_param_spec_specialized (NM_SETTING_CONNECTION_SECONDARIES,
"Secondaries",
"List of connection UUIDs that should be activated "
- "when the base connection itself is activated.",
+ "when the base connection itself is activated. "
+ "Currently only VPN connections are supported.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+
+ /**
+ * NMSettingConnection:gateway-ping-timeout:
+ *
+ * If greater than zero, delay success of IP addressing until either the
+ * timeout is reached, or an IP gateway replies to a ping.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_GATEWAY_PING_TIMEOUT,
+ g_param_spec_uint (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT,
+ "Gateway Ping Timeout",
+ "If greater than zero, delay success of IP "
+ "addressing until either the timeout is reached, or "
+ "an IP gateway replies to a ping.",
+ 0, 30, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
}
diff --git a/libnm-util/nm-setting-connection.h b/libnm-util/nm-setting-connection.h
index 73c598cb9..ff2af7a2c 100644
--- a/libnm-util/nm-setting-connection.h
+++ b/libnm-util/nm-setting-connection.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -68,17 +68,19 @@ typedef enum
#define NM_SETTING_CONNECTION_ERROR nm_setting_connection_error_quark ()
GQuark nm_setting_connection_error_quark (void);
-#define NM_SETTING_CONNECTION_ID "id"
-#define NM_SETTING_CONNECTION_UUID "uuid"
-#define NM_SETTING_CONNECTION_TYPE "type"
-#define NM_SETTING_CONNECTION_AUTOCONNECT "autoconnect"
-#define NM_SETTING_CONNECTION_TIMESTAMP "timestamp"
-#define NM_SETTING_CONNECTION_READ_ONLY "read-only"
-#define NM_SETTING_CONNECTION_PERMISSIONS "permissions"
-#define NM_SETTING_CONNECTION_ZONE "zone"
-#define NM_SETTING_CONNECTION_MASTER "master"
-#define NM_SETTING_CONNECTION_SLAVE_TYPE "slave-type"
-#define NM_SETTING_CONNECTION_SECONDARIES "secondaries"
+#define NM_SETTING_CONNECTION_ID "id"
+#define NM_SETTING_CONNECTION_UUID "uuid"
+#define NM_SETTING_CONNECTION_INTERFACE_NAME "interface-name"
+#define NM_SETTING_CONNECTION_TYPE "type"
+#define NM_SETTING_CONNECTION_AUTOCONNECT "autoconnect"
+#define NM_SETTING_CONNECTION_TIMESTAMP "timestamp"
+#define NM_SETTING_CONNECTION_READ_ONLY "read-only"
+#define NM_SETTING_CONNECTION_PERMISSIONS "permissions"
+#define NM_SETTING_CONNECTION_ZONE "zone"
+#define NM_SETTING_CONNECTION_MASTER "master"
+#define NM_SETTING_CONNECTION_SLAVE_TYPE "slave-type"
+#define NM_SETTING_CONNECTION_SECONDARIES "secondaries"
+#define NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT "gateway-ping-timeout"
/**
* NMSettingConnection:
@@ -105,6 +107,8 @@ GType nm_setting_connection_get_type (void);
NMSetting * nm_setting_connection_new (void);
const char *nm_setting_connection_get_id (NMSettingConnection *setting);
const char *nm_setting_connection_get_uuid (NMSettingConnection *setting);
+NM_AVAILABLE_IN_0_9_10
+const char *nm_setting_connection_get_interface_name (NMSettingConnection *setting);
const char *nm_setting_connection_get_connection_type (NMSettingConnection *setting);
gboolean nm_setting_connection_get_autoconnect (NMSettingConnection *setting);
guint64 nm_setting_connection_get_timestamp (NMSettingConnection *setting);
@@ -124,14 +128,26 @@ gboolean nm_setting_connection_add_permission (NMSettingConnection *set
const char *detail);
void nm_setting_connection_remove_permission (NMSettingConnection *setting,
guint32 idx);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_connection_remove_permission_by_value (NMSettingConnection *setting,
+ const char *ptype,
+ const char *pitem,
+ const char *detail);
+
const char *nm_setting_connection_get_master (NMSettingConnection *setting);
gboolean nm_setting_connection_is_slave_type (NMSettingConnection *setting,
const char *type);
const char *nm_setting_connection_get_slave_type (NMSettingConnection *setting);
+
guint32 nm_setting_connection_get_num_secondaries (NMSettingConnection *setting);
const char *nm_setting_connection_get_secondary (NMSettingConnection *setting, guint32 idx);
gboolean nm_setting_connection_add_secondary (NMSettingConnection *setting, const char *sec_uuid);
void nm_setting_connection_remove_secondary (NMSettingConnection *setting, guint32 idx);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_connection_remove_secondary_by_value (NMSettingConnection *setting, const char *sec_uuid);
+
+NM_AVAILABLE_IN_0_9_10
+guint32 nm_setting_connection_get_gateway_ping_timeout (NMSettingConnection *setting);
G_END_DECLS
diff --git a/libnm-util/nm-setting-dcb.c b/libnm-util/nm-setting-dcb.c
new file mode 100644
index 000000000..54b115dd4
--- /dev/null
+++ b/libnm-util/nm-setting-dcb.c
@@ -0,0 +1,1268 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+
+/*
+ * Dan Williams <dcbw@redhat.com>
+ *
+ * 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.
+ *
+ * (C) Copyright 2013 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
+#include "nm-setting-dcb.h"
+#include "nm-param-spec-specialized.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-dcb
+ * @short_description: Connection properties for Data Center Bridging
+ * @include: nm-setting-dcb.h
+ *
+ * The #NMSettingDcb object is a #NMSetting subclass that describes properties
+ * for enabling and using Data Center Bridging (DCB) on Ethernet networks.
+ * DCB is a set of protocols (including 802.1Qbb, 802.1Qaz, 802.1Qau, and
+ * 802.1AB) to eliminate packet loss in Ethernet networks and support the use
+ * of storage technologies like Fibre Channel over Ethernet (FCoE) and iSCSI.
+ *
+ * Since: 0.9.10
+ **/
+
+/**
+ * nm_setting_dcb_error_quark:
+ *
+ * Registers an error quark for #NMSettingDcb if necessary.
+ *
+ * Returns: the error quark used for #NMSettingDcb errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_setting_dcb_error_quark (void)
+{
+ static GQuark quark;
+
+ if (G_UNLIKELY (!quark))
+ quark = g_quark_from_static_string ("nm-setting-dcb-error-quark");
+ return quark;
+}
+
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingDcb, nm_setting_dcb, NM_TYPE_SETTING,
+ _nm_register_setting (NM_SETTING_DCB_SETTING_NAME,
+ g_define_type_id,
+ 2,
+ NM_SETTING_DCB_ERROR))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_DCB)
+
+#define NM_SETTING_DCB_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_DCB, NMSettingDcbPrivate))
+
+typedef struct {
+ NMSettingDcbFlags app_fcoe_flags;
+ gint app_fcoe_priority;
+ const char * app_fcoe_mode;
+
+ NMSettingDcbFlags app_iscsi_flags;
+ gint app_iscsi_priority;
+
+ NMSettingDcbFlags app_fip_flags;
+ gint app_fip_priority;
+
+ /* Priority Flow Control */
+ NMSettingDcbFlags pfc_flags;
+ guint pfc[8];
+
+ /* Priority Groups */
+ NMSettingDcbFlags priority_group_flags;
+ guint priority_group_id[8];
+ guint priority_group_bandwidth[8];
+ guint priority_bandwidth[8];
+ guint priority_strict[8];
+ guint priority_traffic_class[8];
+} NMSettingDcbPrivate;
+
+enum {
+ PROP_0,
+ PROP_APP_FCOE_FLAGS,
+ PROP_APP_FCOE_PRIORITY,
+ PROP_APP_FCOE_MODE,
+
+ PROP_APP_ISCSI_FLAGS,
+ PROP_APP_ISCSI_PRIORITY,
+
+ PROP_APP_FIP_FLAGS,
+ PROP_APP_FIP_PRIORITY,
+
+ PROP_PFC_FLAGS,
+ PROP_PFC,
+
+ PROP_PRIORITY_GROUP_FLAGS,
+ PROP_PRIORITY_GROUP_ID,
+ PROP_PRIORITY_GROUP_BANDWIDTH,
+ PROP_PRIORITY_BANDWIDTH,
+ PROP_PRIORITY_STRICT,
+ PROP_PRIORITY_TRAFFIC_CLASS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_dcb_new:
+ *
+ * Creates a new #NMSettingDcb object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingDcb object
+ *
+ * Since: 0.9.10
+ **/
+NMSetting *
+nm_setting_dcb_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_DCB, NULL);
+}
+
+/**
+ * nm_setting_dcb_get_app_fcoe_flags:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:app-fcoe-flags property of the setting
+ *
+ * Since: 0.9.10
+ **/
+NMSettingDcbFlags
+nm_setting_dcb_get_app_fcoe_flags (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->app_fcoe_flags;
+}
+
+/**
+ * nm_setting_dcb_get_app_fcoe_priority:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:app-fcoe-priority property of the setting
+ *
+ * Since: 0.9.10
+ **/
+gint
+nm_setting_dcb_get_app_fcoe_priority (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->app_fcoe_priority;
+}
+
+/**
+ * nm_setting_dcb_get_app_fcoe_mode:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:app-fcoe-mode property of the setting
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_setting_dcb_get_app_fcoe_mode (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), NULL);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->app_fcoe_mode;
+}
+
+/**
+ * nm_setting_dcb_get_app_iscsi_flags:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:app-iscsi-flags property of the setting
+ *
+ * Since: 0.9.10
+ **/
+NMSettingDcbFlags
+nm_setting_dcb_get_app_iscsi_flags (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->app_iscsi_flags;
+}
+
+/**
+ * nm_setting_dcb_get_app_iscsi_priority:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:app-iscsi-priority property of the setting
+ *
+ * Since: 0.9.10
+ **/
+gint
+nm_setting_dcb_get_app_iscsi_priority (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->app_iscsi_priority;
+}
+
+/**
+ * nm_setting_dcb_get_app_fip_flags:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:app-fip-flags property of the setting
+ *
+ * Since: 0.9.10
+ **/
+NMSettingDcbFlags
+nm_setting_dcb_get_app_fip_flags (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->app_fip_flags;
+}
+
+/**
+ * nm_setting_dcb_get_app_fip_priority:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:app-fip-priority property of the setting
+ *
+ * Since: 0.9.10
+ **/
+gint
+nm_setting_dcb_get_app_fip_priority (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->app_fip_priority;
+}
+
+/**
+ * nm_setting_dcb_get_priority_flow_control_flags:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:priority-flow-control-flags property of the setting
+ *
+ * Since: 0.9.10
+ **/
+NMSettingDcbFlags
+nm_setting_dcb_get_priority_flow_control_flags (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->pfc_flags;
+}
+
+/**
+ * nm_setting_dcb_get_priority_flow_control:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to retrieve flow control for
+ *
+ * Returns: %TRUE if flow control is enabled for the given @user_priority,
+ * %FALSE if not enabled
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_dcb_get_priority_flow_control (NMSettingDcb *setting, guint user_priority)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), FALSE);
+ g_return_val_if_fail (user_priority <= 7, FALSE);
+
+ return !!NM_SETTING_DCB_GET_PRIVATE (setting)->pfc[user_priority];
+}
+
+/**
+ * nm_setting_dcb_set_priority_flow_control:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to set flow control for
+ * @enabled: %TRUE to enable flow control for this priority, %FALSE to disable it
+ *
+ * These values are only valid when #NMSettingDcb:priority-flow-control includes
+ * the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_dcb_set_priority_flow_control (NMSettingDcb *setting,
+ guint user_priority,
+ gboolean enabled)
+{
+ NMSettingDcbPrivate *priv;
+ guint uint_enabled = enabled ? 1 : 0;
+
+ g_return_if_fail (NM_IS_SETTING_DCB (setting));
+ g_return_if_fail (user_priority <= 7);
+
+ priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+ if (priv->pfc[user_priority] != uint_enabled) {
+ priv->pfc[user_priority] = uint_enabled;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_DCB_PRIORITY_FLOW_CONTROL);
+ }
+}
+
+/**
+ * nm_setting_dcb_get_priority_group_flags:
+ * @setting: the #NMSettingDcb
+ *
+ * Returns: the #NMSettingDcb:priority-group-flags property of the setting
+ *
+ * Since: 0.9.10
+ **/
+NMSettingDcbFlags
+nm_setting_dcb_get_priority_group_flags (NMSettingDcb *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->priority_group_flags;
+}
+
+/**
+ * nm_setting_dcb_get_priority_group_id:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to retrieve the group ID for
+ *
+ * Returns: the group number @user_priority is assigned to. These values are
+ * only valid when #NMSettingDcb:priority-group-flags includes the
+ * %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+guint
+nm_setting_dcb_get_priority_group_id (NMSettingDcb *setting, guint user_priority)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+ g_return_val_if_fail (user_priority <= 7, 0);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->priority_group_id[user_priority];
+}
+
+/**
+ * nm_setting_dcb_set_priority_group_id:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to set flow control for
+ * @group_id: the group (0 - 7) to assign @user_priority to, or 15 for the
+ * unrestricted group.
+ *
+ * These values are only valid when #NMSettingDcb:priority-group-flags includes
+ * the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_dcb_set_priority_group_id (NMSettingDcb *setting,
+ guint user_priority,
+ guint group_id)
+{
+ NMSettingDcbPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_DCB (setting));
+ g_return_if_fail (user_priority <= 7);
+ g_return_if_fail (group_id <= 7 || group_id == 15);
+
+ priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+ if (priv->priority_group_id[user_priority] != group_id) {
+ priv->priority_group_id[user_priority] = group_id;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_DCB_PRIORITY_GROUP_ID);
+ }
+}
+
+/**
+ * nm_setting_dcb_get_priority_group_bandwidth:
+ * @setting: the #NMSettingDcb
+ * @group_id: the priority group (0 - 7) to retrieve the bandwidth percentage for
+ *
+ * Returns: the bandwidth percentage assigned to @group_id. These values are
+ * only valid when #NMSettingDcb:priority-group-flags includes the
+ * %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+guint
+nm_setting_dcb_get_priority_group_bandwidth (NMSettingDcb *setting, guint group_id)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+ g_return_val_if_fail (group_id <= 7, FALSE);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->priority_group_bandwidth[group_id];
+}
+
+/**
+ * nm_setting_dcb_set_priority_group_bandwidth:
+ * @setting: the #NMSettingDcb
+ * @group_id: the priority group (0 - 7) to set the bandwidth percentage for
+ * @bandwidth_percent: the bandwidth percentage (0 - 100) to assign to @group_id to
+ *
+ * These values are only valid when #NMSettingDcb:priority-group-flags includes
+ * the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_dcb_set_priority_group_bandwidth (NMSettingDcb *setting,
+ guint group_id,
+ guint bandwidth_percent)
+{
+ NMSettingDcbPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_DCB (setting));
+ g_return_if_fail (group_id <= 7);
+ g_return_if_fail (bandwidth_percent <= 100);
+
+ priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+ if (priv->priority_group_bandwidth[group_id] != bandwidth_percent) {
+ priv->priority_group_bandwidth[group_id] = bandwidth_percent;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH);
+ }
+}
+
+/**
+ * nm_setting_dcb_get_priority_bandwidth:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to retrieve the group bandwidth percentage for
+ *
+ * Returns: the allowed bandwidth percentage of @user_priority in its priority group.
+ * These values are only valid when #NMSettingDcb:priority-group-flags includes the
+ * %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+guint
+nm_setting_dcb_get_priority_bandwidth (NMSettingDcb *setting, guint user_priority)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+ g_return_val_if_fail (user_priority <= 7, FALSE);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->priority_bandwidth[user_priority];
+}
+
+/**
+ * nm_setting_dcb_set_priority_bandwidth:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to set the bandwidth percentage for
+ * @bandwidth_percent: the bandwidth percentage (0 - 100) that @user_priority is
+ * allowed to use within its priority group
+ *
+ * These values are only valid when #NMSettingDcb:priority-group-flags includes
+ * the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_dcb_set_priority_bandwidth (NMSettingDcb *setting,
+ guint user_priority,
+ guint bandwidth_percent)
+{
+ NMSettingDcbPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_DCB (setting));
+ g_return_if_fail (user_priority <= 7);
+ g_return_if_fail (bandwidth_percent <= 100);
+
+ priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+ if (priv->priority_bandwidth[user_priority] != bandwidth_percent) {
+ priv->priority_bandwidth[user_priority] = bandwidth_percent;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_DCB_PRIORITY_BANDWIDTH);
+ }
+}
+
+/**
+ * nm_setting_dcb_get_priority_strict_bandwidth:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to retrieve strict bandwidth for
+ *
+ * Returns: %TRUE if @user_priority may use all of the bandwidth allocated to its
+ * assigned group, or %FALSE if not. These values are only valid when
+ * #NMSettingDcb:priority-group-flags includes the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_dcb_get_priority_strict_bandwidth (NMSettingDcb *setting, guint user_priority)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+ g_return_val_if_fail (user_priority <= 7, FALSE);
+
+ return !!NM_SETTING_DCB_GET_PRIVATE (setting)->priority_strict[user_priority];
+}
+
+/**
+ * nm_setting_dcb_set_priority_strict_bandwidth:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to set strict bandwidth for
+ * @strict: %TRUE to allow @user_priority to use all the bandwidth allocated to
+ * its priority group, or %FALSE if not
+ *
+ * These values are only valid when #NMSettingDcb:priority-group-flags includes
+ * the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_dcb_set_priority_strict_bandwidth (NMSettingDcb *setting,
+ guint user_priority,
+ gboolean strict)
+{
+ NMSettingDcbPrivate *priv;
+ guint uint_strict = strict ? 1 : 0;
+
+ g_return_if_fail (NM_IS_SETTING_DCB (setting));
+ g_return_if_fail (user_priority <= 7);
+
+ priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+ if (priv->priority_strict[user_priority] != uint_strict) {
+ priv->priority_strict[user_priority] = uint_strict;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH);
+ }
+}
+
+/**
+ * nm_setting_dcb_get_priority_traffic_class:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to retrieve the traffic class for
+ *
+ * Returns: the traffic class assigned to @user_priority. These values are only
+ * valid when #NMSettingDcb:priority-group-flags includes the
+ * %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+guint
+nm_setting_dcb_get_priority_traffic_class (NMSettingDcb *setting, guint user_priority)
+{
+ g_return_val_if_fail (NM_IS_SETTING_DCB (setting), 0);
+ g_return_val_if_fail (user_priority <= 7, FALSE);
+
+ return NM_SETTING_DCB_GET_PRIVATE (setting)->priority_traffic_class[user_priority];
+}
+
+/**
+ * nm_setting_dcb_set_priority_traffic_clas:
+ * @setting: the #NMSettingDcb
+ * @user_priority: the User Priority (0 - 7) to set the bandwidth percentage for
+ * @traffic_class: the traffic_class (0 - 7) that @user_priority should map to
+ *
+ * These values are only valid when #NMSettingDcb:priority-group-flags includes
+ * the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_dcb_set_priority_traffic_class (NMSettingDcb *setting,
+ guint user_priority,
+ guint traffic_class)
+{
+ NMSettingDcbPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_DCB (setting));
+ g_return_if_fail (user_priority <= 7);
+ g_return_if_fail (traffic_class <= 7);
+
+ priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+ if (priv->priority_traffic_class[user_priority] != traffic_class) {
+ priv->priority_traffic_class[user_priority] = traffic_class;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS);
+ }
+}
+
+/******************************************************************/
+
+#define DCB_FLAGS_ALL (NM_SETTING_DCB_FLAG_ENABLE | \
+ NM_SETTING_DCB_FLAG_ADVERTISE | \
+ NM_SETTING_DCB_FLAG_WILLING)
+
+static gboolean
+check_dcb_flags (NMSettingDcbFlags flags, const char *prop_name, GError **error)
+{
+ if (flags & ~DCB_FLAGS_ALL) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("flags invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, prop_name);
+ return FALSE;
+ }
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE) && (flags & ~NM_SETTING_DCB_FLAG_ENABLE)) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("flags invalid - disabled"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, prop_name);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+check_uint_array (const guint *array,
+ guint len,
+ NMSettingDcbFlags flags,
+ guint max,
+ guint extra,
+ gboolean sum_pct,
+ const char *prop_name,
+ GError **error)
+{
+ guint i, sum = 0;
+
+ /* Ensure each element is <= to max or equals extra */
+ for (i = 0; i < len; i++) {
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE) && array[i]) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("property invalid (not enabled)"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, prop_name);
+ return FALSE;
+ }
+
+ if ((array[i] > max) && (array[i] != extra)) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("element invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, prop_name);
+ return FALSE;
+ }
+ sum += array[i];
+ }
+
+ /* Verify sum of percentages */
+ if (sum_pct) {
+ if (flags & NM_SETTING_DCB_FLAG_ENABLE) {
+ /* If the feature is enabled, sum must equal 100% */
+ if (sum != 100) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("sum not 100%"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, prop_name);
+ return FALSE;
+ }
+ } else {
+ /* If the feature is disabled, sum must equal 0%, which was checked
+ * by the for() loop above.
+ */
+ g_assert_cmpint (sum, ==, 0);
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+check_priority (gint val,
+ NMSettingDcbFlags flags,
+ const char *prop_name,
+ GError **error)
+{
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE) && (val >= 0)) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("property invalid (not enabled)"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, prop_name);
+ return FALSE;
+ }
+
+ if (val < -1 || val > 7) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("property invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, prop_name);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+verify (NMSetting *setting, GSList *all_settings, GError **error)
+{
+ NMSettingDcbPrivate *priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+
+ if (!check_dcb_flags (priv->app_fcoe_flags, NM_SETTING_DCB_APP_FCOE_FLAGS, error))
+ return FALSE;
+
+ if (!check_priority (priv->app_fcoe_priority, priv->app_fcoe_flags, NM_SETTING_DCB_APP_FCOE_PRIORITY, error))
+ return FALSE;
+
+ if (!priv->app_fcoe_mode) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_MISSING_PROPERTY,
+ _("property missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, NM_SETTING_DCB_APP_FCOE_MODE);
+ return FALSE;
+ }
+
+ if (strcmp (priv->app_fcoe_mode, NM_SETTING_DCB_FCOE_MODE_FABRIC) &&
+ strcmp (priv->app_fcoe_mode, NM_SETTING_DCB_FCOE_MODE_VN2VN)) {
+ g_set_error_literal (error,
+ NM_SETTING_DCB_ERROR,
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY,
+ _("property invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_DCB_SETTING_NAME, NM_SETTING_DCB_APP_FCOE_MODE);
+ return FALSE;
+ }
+
+ if (!check_dcb_flags (priv->app_iscsi_flags, NM_SETTING_DCB_APP_ISCSI_FLAGS, error))
+ return FALSE;
+
+ if (!check_priority (priv->app_iscsi_priority, priv->app_iscsi_flags, NM_SETTING_DCB_APP_ISCSI_PRIORITY, error))
+ return FALSE;
+
+ if (!check_dcb_flags (priv->app_fip_flags, NM_SETTING_DCB_APP_FIP_FLAGS, error))
+ return FALSE;
+
+ if (!check_priority (priv->app_fip_priority, priv->app_fip_flags, NM_SETTING_DCB_APP_FIP_PRIORITY, error))
+ return FALSE;
+
+ if (!check_dcb_flags (priv->pfc_flags, NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, error))
+ return FALSE;
+
+ if (!check_uint_array (priv->pfc, G_N_ELEMENTS (priv->pfc), priv->pfc_flags, 1, 0, FALSE, NM_SETTING_DCB_PRIORITY_FLOW_CONTROL, error))
+ return FALSE;
+
+ if (!check_dcb_flags (priv->priority_group_flags, NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, error))
+ return FALSE;
+
+ if (!check_uint_array (priv->priority_group_id,
+ G_N_ELEMENTS (priv->priority_group_id),
+ priv->priority_group_flags,
+ 7,
+ 15,
+ FALSE,
+ NM_SETTING_DCB_PRIORITY_GROUP_ID,
+ error))
+ return FALSE;
+
+ if (!check_uint_array (priv->priority_group_bandwidth,
+ G_N_ELEMENTS (priv->priority_group_bandwidth),
+ priv->priority_group_flags,
+ 100,
+ 0,
+ TRUE,
+ NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH,
+ error))
+ return FALSE;
+
+ /* FIXME: sum bandwidths in each group */
+ if (!check_uint_array (priv->priority_bandwidth,
+ G_N_ELEMENTS (priv->priority_bandwidth),
+ priv->priority_group_flags,
+ 100,
+ 0,
+ FALSE,
+ NM_SETTING_DCB_PRIORITY_BANDWIDTH,
+ error))
+ return FALSE;
+
+ if (!check_uint_array (priv->priority_strict,
+ G_N_ELEMENTS (priv->priority_strict),
+ priv->priority_group_flags,
+ 1,
+ 0,
+ FALSE,
+ NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH,
+ error))
+ return FALSE;
+
+ if (!check_uint_array (priv->priority_traffic_class,
+ G_N_ELEMENTS (priv->priority_traffic_class),
+ priv->priority_group_flags,
+ 7,
+ 0,
+ FALSE,
+ NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS,
+ error))
+ return FALSE;
+
+ return TRUE;
+}
+
+/******************************************************************/
+
+static void
+nm_setting_dcb_init (NMSettingDcb *setting)
+{
+}
+
+static inline void
+set_uint_array (const GValue *v, uint *a, size_t len)
+{
+ GArray *src = g_value_get_boxed (v);
+ const guint total_len = len * sizeof (a[0]);
+
+ memset (a, 0, total_len);
+ if (src) {
+ g_return_if_fail (g_array_get_element_size (src) == sizeof (a[0]));
+ g_return_if_fail (src->len == len);
+ memcpy (a, src->data, total_len);
+ }
+}
+#define SET_UINT_ARRAY(v, a) set_uint_array (v, a, G_N_ELEMENTS (a))
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingDcbPrivate *priv = NM_SETTING_DCB_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_APP_FCOE_FLAGS:
+ priv->app_fcoe_flags = g_value_get_uint (value);
+ break;
+ case PROP_APP_FCOE_PRIORITY:
+ priv->app_fcoe_priority = g_value_get_int (value);
+ break;
+ case PROP_APP_FCOE_MODE:
+ priv->app_fcoe_mode = g_value_dup_string (value);
+ break;
+ case PROP_APP_ISCSI_FLAGS:
+ priv->app_iscsi_flags = g_value_get_uint (value);
+ break;
+ case PROP_APP_ISCSI_PRIORITY:
+ priv->app_iscsi_priority = g_value_get_int (value);
+ break;
+ case PROP_APP_FIP_FLAGS:
+ priv->app_fip_flags = g_value_get_uint (value);
+ break;
+ case PROP_APP_FIP_PRIORITY:
+ priv->app_fip_priority = g_value_get_int (value);
+ break;
+ case PROP_PFC_FLAGS:
+ priv->pfc_flags = g_value_get_uint (value);
+ break;
+ case PROP_PFC:
+ SET_UINT_ARRAY (value, priv->pfc);
+ break;
+ case PROP_PRIORITY_GROUP_FLAGS:
+ priv->priority_group_flags = g_value_get_uint (value);
+ break;
+ case PROP_PRIORITY_GROUP_ID:
+ SET_UINT_ARRAY (value, priv->priority_group_id);
+ break;
+ case PROP_PRIORITY_GROUP_BANDWIDTH:
+ SET_UINT_ARRAY (value, priv->priority_group_bandwidth);
+ break;
+ case PROP_PRIORITY_BANDWIDTH:
+ SET_UINT_ARRAY (value, priv->priority_bandwidth);
+ break;
+ case PROP_PRIORITY_STRICT:
+ SET_UINT_ARRAY (value, priv->priority_strict);
+ break;
+ case PROP_PRIORITY_TRAFFIC_CLASS:
+ SET_UINT_ARRAY (value, priv->priority_traffic_class);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+#define TAKE_UINT_ARRAY(v, a) \
+{ \
+ guint len = G_N_ELEMENTS (a); \
+ GArray *dst = g_array_sized_new (FALSE, TRUE, sizeof (guint), len); \
+ g_array_append_vals (dst, (a), len); \
+ g_value_take_boxed (v, dst); \
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMSettingDcb *setting = NM_SETTING_DCB (object);
+ NMSettingDcbPrivate *priv = NM_SETTING_DCB_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_APP_FCOE_FLAGS:
+ g_value_set_uint (value, priv->app_fcoe_flags);
+ break;
+ case PROP_APP_FCOE_PRIORITY:
+ g_value_set_int (value, priv->app_fcoe_priority);
+ break;
+ case PROP_APP_FCOE_MODE:
+ g_value_set_string (value, priv->app_fcoe_mode);
+ break;
+ case PROP_APP_ISCSI_FLAGS:
+ g_value_set_uint (value, priv->app_iscsi_flags);
+ break;
+ case PROP_APP_ISCSI_PRIORITY:
+ g_value_set_int (value, priv->app_iscsi_priority);
+ break;
+ case PROP_APP_FIP_FLAGS:
+ g_value_set_uint (value, priv->app_fip_flags);
+ break;
+ case PROP_APP_FIP_PRIORITY:
+ g_value_set_int (value, priv->app_fip_priority);
+ break;
+ case PROP_PFC_FLAGS:
+ g_value_set_uint (value, priv->pfc_flags);
+ break;
+ case PROP_PFC:
+ TAKE_UINT_ARRAY (value, priv->pfc);
+ break;
+ case PROP_PRIORITY_GROUP_FLAGS:
+ g_value_set_uint (value, priv->priority_group_flags);
+ break;
+ case PROP_PRIORITY_GROUP_ID:
+ TAKE_UINT_ARRAY (value, priv->priority_group_id);
+ break;
+ case PROP_PRIORITY_GROUP_BANDWIDTH:
+ TAKE_UINT_ARRAY (value, priv->priority_group_bandwidth);
+ break;
+ case PROP_PRIORITY_BANDWIDTH:
+ TAKE_UINT_ARRAY (value, priv->priority_bandwidth);
+ break;
+ case PROP_PRIORITY_STRICT:
+ TAKE_UINT_ARRAY (value, priv->priority_strict);
+ break;
+ case PROP_PRIORITY_TRAFFIC_CLASS:
+ TAKE_UINT_ARRAY (value, priv->priority_traffic_class);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (setting_class);
+ NMSettingClass *parent_class = NM_SETTING_CLASS (setting_class);
+
+ g_type_class_add_private (setting_class, sizeof (NMSettingDcbPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * NMSettingDcb:app-fcoe-flags:
+ *
+ * Specifies the #NMSettingDcbFlags for the DCB FCoE application. Flags may
+ * be any combination of %NM_SETTING_DCB_FLAG_ENABLE,
+ * %NM_SETTING_DCB_FLAG_ADVERTISE, and %NM_SETTING_DCB_FLAG_WILLING.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APP_FCOE_FLAGS,
+ g_param_spec_uint (NM_SETTING_DCB_APP_FCOE_FLAGS,
+ "App FCoE Flags",
+ "Specifies the flags for the DCB FCoE application. "
+ "Flags may be any combination of 0x1 (enable), 0x2 "
+ "(advertise), and 0x4 (willing).",
+ 0, DCB_FLAGS_ALL, 0,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:app-fcoe-priority:
+ *
+ * The highest User Priority (0 - 7) which FCoE frames should use, or -1 for
+ * default priority. Only used when the #NMSettingDcb:app-fcoe-flags
+ * property includes the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APP_FCOE_PRIORITY,
+ g_param_spec_int (NM_SETTING_DCB_APP_FCOE_PRIORITY,
+ "App FCoE Priority",
+ "The highest User Priority (0 - 7) which FCoE "
+ "frames should use, or -1 for default priority. Only "
+ "used when the 'app-fcoe-flags' property includes "
+ "the 'enabled' flag.",
+ -1, 7, -1,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ /**
+ * NMSettingDcb:app-fcoe-mode:
+ *
+ * The FCoE controller mode; either %NM_SETTING_DCB_FCOE_MODE_FABRIC
+ * (default) or %NM_SETTING_DCB_FCOE_MODE_VN2VN.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APP_FCOE_MODE,
+ g_param_spec_string (NM_SETTING_DCB_APP_FCOE_MODE,
+ "App FCoE Mode",
+ "The FCoe controller mode; either 'fabric' (default) "
+ "or 'vn2vn'.",
+ NM_SETTING_DCB_FCOE_MODE_FABRIC,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ /**
+ * NMSettingDcb:app-iscsi-flags:
+ *
+ * Specifies the #NMSettingDcbFlags for the DCB iSCSI application. Flags
+ * may be any combination of %NM_SETTING_DCB_FLAG_ENABLE,
+ * %NM_SETTING_DCB_FLAG_ADVERTISE, and %NM_SETTING_DCB_FLAG_WILLING.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APP_ISCSI_FLAGS,
+ g_param_spec_uint (NM_SETTING_DCB_APP_ISCSI_FLAGS,
+ "App iSCSI Flags",
+ "Specifies the flags for the DCB iSCSI application. "
+ "Flags may be any combination of 0x1 (enable), 0x2 "
+ "(advertise), and 0x4 (willing).",
+ 0, DCB_FLAGS_ALL, 0,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:app-iscsi-priority:
+ *
+ * The highest User Priority (0 - 7) which iSCSI frames should use, or -1
+ * for default priority. Only used when the #NMSettingDcb:app-iscsi-flags
+ * property includes the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APP_ISCSI_PRIORITY,
+ g_param_spec_int (NM_SETTING_DCB_APP_ISCSI_PRIORITY,
+ "App iSCSI Priority",
+ "The highest User Priority (0 - 7) which iSCSI "
+ "frames should use, or -1 for default priority. Only "
+ "used when the 'app-iscsi-flags' property includes "
+ "the 'enabled' flag.",
+ -1, 7, -1,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ /**
+ * NMSettingDcb:app-fip-flags:
+ *
+ * Specifies the #NMSettingDcbFlags for the DCB FIP application. Flags may
+ * be any combination of %NM_SETTING_DCB_FLAG_ENABLE,
+ * %NM_SETTING_DCB_FLAG_ADVERTISE, and %NM_SETTING_DCB_FLAG_WILLING.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APP_FIP_FLAGS,
+ g_param_spec_uint (NM_SETTING_DCB_APP_FIP_FLAGS,
+ "App FIP Flags",
+ "Specifies the flags for the DCB FIP application. "
+ "Flags may be any combination of 0x1 (enable), 0x2 "
+ "(advertise), and 0x4 (willing).",
+ 0, DCB_FLAGS_ALL, 0,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:app-fip-priority:
+ *
+ * The highest User Priority (0 - 7) which FIP frames should use, or -1 for
+ * default priority. Only used when the #NMSettingDcb:app-fip-flags
+ * property includes the %NM_SETTING_DCB_FLAG_ENABLE flag.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APP_FIP_PRIORITY,
+ g_param_spec_int (NM_SETTING_DCB_APP_FIP_PRIORITY,
+ "App FIP Priority",
+ "The highest User Priority (0 - 7) which FIP "
+ "frames should use, or -1 for default priority. Only "
+ "used when the 'app-fip-flags' property includes "
+ "the 'enabled' flag.",
+ -1, 7, -1,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ /**
+ * NMSettingDcb:priority-flow-control-flags:
+ *
+ * Specifies the #NMSettingDcbFlags for DCB Priority Flow Control (PFC).
+ * Flags may be any combination of %NM_SETTING_DCB_FLAG_ENABLE,
+ * %NM_SETTING_DCB_FLAG_ADVERTISE, and %NM_SETTING_DCB_FLAG_WILLING.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PFC_FLAGS,
+ g_param_spec_uint (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS,
+ "Priority Flow Control Flags",
+ "Specifies the flags for DCB Priority Flow Control. "
+ "Flags may be any combination of 0x1 (enable), 0x2 "
+ "(advertise), and 0x4 (willing).",
+ 0, DCB_FLAGS_ALL, 0,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:priority-flow-control:
+ *
+ * An array of 8 uint values, where the array index corresponds to the User
+ * Priority (0 - 7) and the value indicates whether or not the corresponding
+ * priority should transmit priority pause. Allowed values are 0 (do not
+ * transmit pause) and 1 (transmit pause).
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PFC,
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL,
+ "Priority Flow Control",
+ "An array of 8 uint values, where the array index "
+ "corresponds to the User Priority (0 - 7) and the "
+ "value indicates whether or not the corresponding "
+ "priority should transmit priority pause. Allowed "
+ "values are 0 (do not transmit pause) and 1 "
+ "(transmit pause).",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:priority-group-flags:
+ *
+ * Specifies the #NMSettingDcbFlags for DCB Priority Groups. Flags may be
+ * any combination of %NM_SETTING_DCB_FLAG_ENABLE,
+ * %NM_SETTING_DCB_FLAG_ADVERTISE, and %NM_SETTING_DCB_FLAG_WILLING.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_GROUP_FLAGS,
+ g_param_spec_uint (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS,
+ "Priority Group Flags",
+ "Specifies the flags for DCB Priority Groups. "
+ "Flags may be any combination of 0x1 (enable), 0x2 "
+ "(advertise), and 0x4 (willing).",
+ 0, DCB_FLAGS_ALL, 0,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:priority-group-id:
+ *
+ * An array of 8 uint values, where the array index corresponds to the User
+ * Priority (0 - 7) and the value indicates the Priority Group ID. Allowed
+ * Priority Group ID values are 0 - 7 or 15 for the unrestricted group.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_GROUP_ID,
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_GROUP_ID,
+ "Priority Group ID",
+ "An array of 8 uint values, where the array "
+ "index corresponds to the User Priority (0 - 7) "
+ "and the value indicates the Priority Group ID. "
+ "Allowed Priority Group ID values are 0 - 7 or "
+ "15 for the unrestricted group.",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:priority-group-bandwidth:
+ *
+ * An array of 8 uint values, where the array index corresponds to the
+ * Priority Group ID (0 - 7) and the value indicates the percentage of link
+ * bandwidth allocated to that group. Allowed values are 0 - 100, and the
+ * sum of all values must total 100 percent.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_GROUP_BANDWIDTH,
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH,
+ "Priority Group Bandwidth",
+ "An array of 8 uint values, where the array index "
+ "corresponds to the Priority Group ID (0 - 7) and "
+ "the value indicates the percentage of link bandwidth "
+ "allocated to that group. Allowed values are 0 - 100, "
+ "and the sum of all values must total 100 percent.",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:priority-bandwidth:
+ *
+ * An array of 8 uint values, where the array index corresponds to the User
+ * Priority (0 - 7) and the value indicates the percentage of bandwidth of
+ * the priority's assigned group that the priority may use. The sum of all
+ * percentages for priorities which belong to the same group must total 100
+ * percent.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_BANDWIDTH,
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_BANDWIDTH,
+ "Priority Bandwidth",
+ "An array of 8 uint values, where the array index "
+ "corresponds to the User Priority (0 - 7) and the "
+ "value indicates the percentage of bandwidth of "
+ "the priority's assigned group that the priority may "
+ "use. The sum of all percentages for priorities which "
+ "belong to the same group must total 100 percent.",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:priority-strict-bandwidth:
+ *
+ * An array of 8 uint values, where the array index corresponds to the User
+ * Priority (0 - 7) and the value indicates whether or not the priority may
+ * use all of the bandwidth allocated to its assigned group. Allowed values
+ * are 0 (the priority may not utilize all bandwidth) or 1 (the priority may
+ * utilize all bandwidth).
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_STRICT,
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH,
+ "Priority Strict Bandwidth",
+ "An array of 8 uint values, where the array index "
+ "corresponds to the User Priority (0 - 7) and the "
+ "value indicates whether or not the priority may "
+ "use all of the bandwidth allocated to its assigned "
+ "group. Allowed values are 0 (the priority may not "
+ "utilize all bandwidth) or 1 (the priority may "
+ "utilize all bandwidth).",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READWRITE));
+
+ /**
+ * NMSettingDcb:priority-traffic-class:
+ *
+ * An array of 8 uint values, where the array index corresponds to the User
+ * Priority (0 - 7) and the value indicates the traffic class (0 - 7) to
+ * which the priority is mapped.
+ *
+ * Since: 0.9.10
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_TRAFFIC_CLASS,
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS,
+ "Priority Traffic Class",
+ "An array of 8 uint values, where the array index "
+ "corresponds to the User Priority (0 - 7) and the "
+ "value indicates the traffic class (0 - 7) to which "
+ "the priority is mapped.",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READWRITE));
+}
+
diff --git a/libnm-util/nm-setting-dcb.h b/libnm-util/nm-setting-dcb.h
new file mode 100644
index 000000000..37dd36e7b
--- /dev/null
+++ b/libnm-util/nm-setting-dcb.h
@@ -0,0 +1,189 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+
+/*
+ * Dan Williams <dcbw@redhat.com>
+ *
+ * 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.
+ *
+ * (C) Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTING_DCB_H
+#define NM_SETTING_DCB_H
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_DCB (nm_setting_dcb_get_type ())
+#define NM_SETTING_DCB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_DCB, NMSettingDcb))
+#define NM_SETTING_DCB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_DCB, NMSettingDcbClass))
+#define NM_IS_SETTING_DCB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_DCB))
+#define NM_IS_SETTING_DCB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_DCB))
+#define NM_SETTING_DCB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_DCB, NMSettingDcbClass))
+
+#define NM_SETTING_DCB_SETTING_NAME "dcb"
+
+/**
+ * NMSettingDcbError:
+ * @NM_SETTING_DCB_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_SETTING_DCB_ERROR_INVALID_PROPERTY: the property was invalid
+ * @NM_SETTING_DCB_ERROR_MISSING_PROPERTY: the property was missing and is
+ * required
+ */
+typedef enum {
+ NM_SETTING_DCB_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_SETTING_DCB_ERROR_INVALID_PROPERTY, /*< nick=InvalidProperty >*/
+ NM_SETTING_DCB_ERROR_MISSING_PROPERTY /*< nick=MissingProperty >*/
+} NMSettingDcbError;
+
+#define NM_SETTING_DCB_ERROR nm_setting_dcb_error_quark ()
+GQuark nm_setting_dcb_error_quark (void);
+
+/**
+ * NMSettingDcbFlags:
+ * @NM_SETTING_DCB_FLAG_NONE: no flag
+ * @NM_SETTING_DCB_FLAG_ENABLE: the feature is enabled
+ * @NM_SETTING_DCB_FLAG_ADVERTISE: the feature is advertised
+ * @NM_SETTING_DCB_FLAG_WILLING: the feature is willing to change based on
+ * peer configuration advertisements
+ *
+ * DCB feature flags.
+ *
+ * Since: 0.9.10
+ **/
+typedef enum {
+ NM_SETTING_DCB_FLAG_NONE = 0x00000000,
+ NM_SETTING_DCB_FLAG_ENABLE = 0x00000001,
+ NM_SETTING_DCB_FLAG_ADVERTISE = 0x00000002,
+ NM_SETTING_DCB_FLAG_WILLING = 0x00000004
+} NMSettingDcbFlags;
+
+/**
+ * NM_SETTING_DCB_FCOE_MODE_FABRIC:
+ *
+ * Indicates that the FCoE controller should use "fabric" mode (default)
+ *
+ * Since: 0.9.10
+ */
+#define NM_SETTING_DCB_FCOE_MODE_FABRIC "fabric"
+
+/**
+ * NM_SETTING_DCB_FCOE_MODE_VN2VN:
+ *
+ * Indicates that the FCoE controller should use "VN2VN" mode.
+ *
+ * Since: 0.9.10
+ */
+#define NM_SETTING_DCB_FCOE_MODE_VN2VN "vn2vn"
+
+
+/* Properties */
+#define NM_SETTING_DCB_APP_FCOE_FLAGS "app-fcoe-flags"
+#define NM_SETTING_DCB_APP_FCOE_PRIORITY "app-fcoe-priority"
+#define NM_SETTING_DCB_APP_FCOE_MODE "app-fcoe-mode"
+
+#define NM_SETTING_DCB_APP_ISCSI_FLAGS "app-iscsi-flags"
+#define NM_SETTING_DCB_APP_ISCSI_PRIORITY "app-iscsi-priority"
+
+#define NM_SETTING_DCB_APP_FIP_FLAGS "app-fip-flags"
+#define NM_SETTING_DCB_APP_FIP_PRIORITY "app-fip-priority"
+
+#define NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS "priority-flow-control-flags"
+#define NM_SETTING_DCB_PRIORITY_FLOW_CONTROL "priority-flow-control"
+
+#define NM_SETTING_DCB_PRIORITY_GROUP_FLAGS "priority-group-flags"
+#define NM_SETTING_DCB_PRIORITY_GROUP_ID "priority-group-id"
+#define NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH "priority-group-bandwidth"
+#define NM_SETTING_DCB_PRIORITY_BANDWIDTH "priority-bandwidth"
+#define NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH "priority-strict-bandwidth"
+#define NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS "priority-traffic-class"
+
+
+typedef struct {
+ NMSetting parent;
+} NMSettingDcb;
+
+typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingDcbClass;
+
+NM_AVAILABLE_IN_0_9_10
+GType nm_setting_dcb_get_type (void);
+
+NM_AVAILABLE_IN_0_9_10
+NMSetting * nm_setting_dcb_new (void);
+
+NMSettingDcbFlags nm_setting_dcb_get_app_fcoe_flags (NMSettingDcb *setting);
+gint nm_setting_dcb_get_app_fcoe_priority (NMSettingDcb *setting);
+const char * nm_setting_dcb_get_app_fcoe_mode (NMSettingDcb *setting);
+
+NMSettingDcbFlags nm_setting_dcb_get_app_iscsi_flags (NMSettingDcb *setting);
+gint nm_setting_dcb_get_app_iscsi_priority (NMSettingDcb *setting);
+
+NMSettingDcbFlags nm_setting_dcb_get_app_fip_flags (NMSettingDcb *setting);
+gint nm_setting_dcb_get_app_fip_priority (NMSettingDcb *setting);
+
+/* Priority Flow Control */
+NMSettingDcbFlags nm_setting_dcb_get_priority_flow_control_flags (NMSettingDcb *setting);
+gboolean nm_setting_dcb_get_priority_flow_control (NMSettingDcb *setting,
+ guint user_priority);
+void nm_setting_dcb_set_priority_flow_control (NMSettingDcb *setting,
+ guint user_priority,
+ gboolean enabled);
+
+/* Priority Groups */
+NMSettingDcbFlags nm_setting_dcb_get_priority_group_flags (NMSettingDcb *setting);
+
+guint nm_setting_dcb_get_priority_group_id (NMSettingDcb *setting,
+ guint user_priority);
+void nm_setting_dcb_set_priority_group_id (NMSettingDcb *setting,
+ guint user_priority,
+ guint group_id);
+
+guint nm_setting_dcb_get_priority_group_bandwidth (NMSettingDcb *setting,
+ guint group_id);
+void nm_setting_dcb_set_priority_group_bandwidth (NMSettingDcb *setting,
+ guint group_id,
+ guint bandwidth_percent);
+
+guint nm_setting_dcb_get_priority_bandwidth (NMSettingDcb *setting,
+ guint user_priority);
+void nm_setting_dcb_set_priority_bandwidth (NMSettingDcb *setting,
+ guint user_priority,
+ guint bandwidth_percent);
+
+gboolean nm_setting_dcb_get_priority_strict_bandwidth (NMSettingDcb *setting,
+ guint user_priority);
+void nm_setting_dcb_set_priority_strict_bandwidth (NMSettingDcb *setting,
+ guint user_priority,
+ gboolean strict);
+
+guint nm_setting_dcb_get_priority_traffic_class (NMSettingDcb *setting,
+ guint user_priority);
+void nm_setting_dcb_set_priority_traffic_class (NMSettingDcb *setting,
+ guint user_priority,
+ guint traffic_class);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_DCB_H */
diff --git a/libnm-util/nm-setting-generic.c b/libnm-util/nm-setting-generic.c
new file mode 100644
index 000000000..e32ae4971
--- /dev/null
+++ b/libnm-util/nm-setting-generic.c
@@ -0,0 +1,100 @@
+/* -*- 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 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-setting-generic.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-generic
+ * @short_description: Describes connection properties for generic devices
+ * @include: nm-setting-generic.h
+ *
+ * The #NMSettingGeneric object is a #NMSetting subclass that describes
+ * optional properties that apply to "generic" devices (ie, devices that
+ * NetworkManager does not specifically recognize).
+ *
+ * There are currently no properties on this object; it exists only to be
+ * the "connection type" setting on #NMConnections for generic devices.
+ *
+ * Since: 0.9.10
+ **/
+
+/**
+ * nm_setting_generic_error_quark:
+ *
+ * Registers an error quark for #NMSettingGeneric if necessary.
+ *
+ * Returns: the error quark used for #NMSettingGeneric errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_setting_generic_error_quark (void)
+{
+ static GQuark quark;
+
+ if (G_UNLIKELY (!quark))
+ quark = g_quark_from_static_string ("nm-setting-generic-error-quark");
+ return quark;
+}
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingGeneric, nm_setting_generic, NM_TYPE_SETTING,
+ _nm_register_setting (NM_SETTING_GENERIC_SETTING_NAME,
+ g_define_type_id,
+ 1,
+ NM_SETTING_GENERIC_ERROR))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_GENERIC)
+
+#define NM_SETTING_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_GENERIC, NMSettingGenericPrivate))
+
+typedef struct {
+ int dummy;
+} NMSettingGenericPrivate;
+
+/**************************************************************************/
+
+/**
+ * nm_setting_generic_new:
+ *
+ * Creates a new #NMSettingGeneric object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingGeneric object
+ *
+ * Since: 0.9.10
+ **/
+NMSetting *
+nm_setting_generic_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_GENERIC, NULL);
+}
+
+static void
+nm_setting_generic_init (NMSettingGeneric *setting)
+{
+}
+
+static void
+nm_setting_generic_class_init (NMSettingGenericClass *setting_class)
+{
+ g_type_class_add_private (setting_class, sizeof (NMSettingGenericPrivate));
+}
diff --git a/libnm-util/nm-setting-generic.h b/libnm-util/nm-setting-generic.h
new file mode 100644
index 000000000..1cabae088
--- /dev/null
+++ b/libnm-util/nm-setting-generic.h
@@ -0,0 +1,78 @@
+/* -*- 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 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTING_GENERIC_H
+#define NM_SETTING_GENERIC_H
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_GENERIC (nm_setting_generic_get_type ())
+#define NM_SETTING_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_GENERIC, NMSettingGeneric))
+#define NM_SETTING_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_GENERIC, NMSettingGenericClass))
+#define NM_IS_SETTING_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_GENERIC))
+#define NM_IS_SETTING_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_GENERIC))
+#define NM_SETTING_GENERIC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_GENERIC, NMSettingGenericClass))
+
+#define NM_SETTING_GENERIC_SETTING_NAME "generic"
+
+/**
+ * NMSettingGenericError:
+ * @NM_SETTING_GENERIC_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY: the property was invalid
+ * @NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY: the property was missing and
+ * is required
+ *
+ * Since: 0.9.10
+ */
+typedef enum {
+ NM_SETTING_GENERIC_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY, /*< nick=InvalidProperty >*/
+ NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY, /*< nick=MissingProperty >*/
+} NMSettingGenericError;
+
+#define NM_SETTING_GENERIC_ERROR nm_setting_generic_error_quark ()
+GQuark nm_setting_generic_error_quark (void);
+
+typedef struct {
+ NMSetting parent;
+} NMSettingGeneric;
+
+typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingGenericClass;
+
+NM_AVAILABLE_IN_0_9_10
+GType nm_setting_generic_get_type (void);
+
+NM_AVAILABLE_IN_0_9_10
+NMSetting * nm_setting_generic_new (void);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_GENERIC_H */
diff --git a/libnm-util/nm-setting-gsm.c b/libnm-util/nm-setting-gsm.c
index 41e080ba2..f96a997b8 100644
--- a/libnm-util/nm-setting-gsm.c
+++ b/libnm-util/nm-setting-gsm.c
@@ -19,11 +19,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-gsm.h"
#include "nm-utils.h"
#include "nm-setting-private.h"
@@ -201,6 +203,8 @@ nm_setting_gsm_get_network_id (NMSettingGsm *setting)
* @setting: the #NMSettingGsm
*
* Returns: the #NMSettingGsm:network-type property of the setting
+ *
+ * Deprecated: 0.9.10: No longer used. Network type setting should be done talking to ModemManager directly.
**/
int
nm_setting_gsm_get_network_type (NMSettingGsm *setting)
@@ -215,6 +219,8 @@ nm_setting_gsm_get_network_type (NMSettingGsm *setting)
* @setting: the #NMSettingGsm
*
* Returns: the #NMSettingGsm:allowed-bands property of the setting
+ *
+ * Deprecated: 0.9.10: No longer used. Bands setting should be done talking to ModemManager directly.
**/
guint32
nm_setting_gsm_get_allowed_bands (NMSettingGsm *setting)
@@ -272,10 +278,11 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (setting);
if (priv->number && !priv->number[0]) {
- g_set_error (error,
- NM_SETTING_GSM_ERROR,
- NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_NUMBER);
+ g_set_error_literal (error,
+ NM_SETTING_GSM_ERROR,
+ NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_NUMBER);
return FALSE;
}
@@ -287,7 +294,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_GSM_ERROR,
NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_APN);
+ _("property value '%s' is empty or too long (>64)"),
+ priv->apn);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_APN);
return FALSE;
}
@@ -317,25 +326,29 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_GSM_ERROR,
NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_APN);
+ _("'%s' contains invalid char(s) (use [A-Za-z._-])"),
+ priv->apn);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_APN);
return FALSE;
}
}
}
if (priv->username && !strlen (priv->username)) {
- g_set_error (error,
- NM_SETTING_GSM_ERROR,
- NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_GSM_ERROR,
+ NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_USERNAME);
return FALSE;
}
if (priv->password && !strlen (priv->password)) {
- g_set_error (error,
- NM_SETTING_GSM_ERROR,
- NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_GSM_ERROR,
+ NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_USERNAME);
return FALSE;
}
@@ -348,7 +361,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_GSM_ERROR,
NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_NETWORK_ID);
+ _("'%s' length is invalid (should be 5 or 6 digits)"),
+ priv->network_id);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_NETWORK_ID);
return FALSE;
}
@@ -357,7 +372,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_GSM_ERROR,
NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_NETWORK_ID);
+ _("'%s' is not a number"),
+ priv->network_id);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_NETWORK_ID);
return FALSE;
}
}
@@ -388,7 +405,6 @@ need_secrets (NMSetting *setting)
static void
nm_setting_gsm_init (NMSettingGsm *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_GSM_SETTING_NAME, NULL);
}
static void
@@ -491,10 +507,10 @@ get_property (GObject *object, guint prop_id,
g_value_set_string (value, nm_setting_gsm_get_network_id (setting));
break;
case PROP_NETWORK_TYPE:
- g_value_set_int (value, nm_setting_gsm_get_network_type (setting));
+ g_value_set_int (value, NM_SETTING_GSM_GET_PRIVATE (setting)->network_type);
break;
case PROP_ALLOWED_BANDS:
- g_value_set_uint (value, nm_setting_gsm_get_allowed_bands (setting));
+ g_value_set_uint (value, NM_SETTING_GSM_GET_PRIVATE (setting)->allowed_bands);
break;
case PROP_PIN:
g_value_set_string (value, nm_setting_gsm_get_pin (setting));
@@ -547,7 +563,7 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"blank, which allows NetworkManager to select the "
"appropriate settings automatically.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingGsm:username:
@@ -564,7 +580,7 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"required. Note that many providers do not require "
"a username or accept any username.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingGsm:password:
@@ -581,12 +597,12 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"required. Note that many providers do not require "
"a password or accept any password.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingGsm:password-flags:
*
- * Flags indicating how to handle #NMSettingGsm:password:.
+ * Flags indicating how to handle the #NMSettingGsm:password property.
**/
g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_GSM_PASSWORD_FLAGS,
@@ -595,7 +611,7 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingGsm:apn:
@@ -605,8 +621,8 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
* the user will be billed for their network usage and whether the user has
* access to the Internet or just a provider-specific walled-garden, so it
* is important to use the correct APN for the user's mobile broadband plan.
- * The APN may only be composed of the characters a-z, 0-9, ., and - per
- * GSM 03.60 Section 14.9.
+ * The APN may only be composed of the characters a-z, 0-9, ., and - per GSM
+ * 03.60 Section 14.9.
**/
g_object_class_install_property
(object_class, PROP_APN,
@@ -622,7 +638,7 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"plan. The APN may only be composed of the characters "
"a-z, 0-9, ., and - per GSM 03.60 Section 14.9.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingGsm:network-id:
@@ -645,29 +661,39 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"roam when direct roaming control of the device is "
"not otherwise possible.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingGsm:network-type:
*
* Network preference to force the device to only use specific network
- * technologies. Permitted values are those specified by
- * #NMSettingGsmNetworkType. Note that not all devices allow network
+ * technologies. The permitted values are %NM_SETTING_GSM_NETWORK_TYPE_ANY,
+ * %NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA,
+ * %NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE,
+ * %NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA,
+ * %NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE,
+ * %NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G, and
+ * %NM_SETTING_GSM_NETWORK_TYPE_4G. Note that not all devices allow network
* preference control.
+ *
+ * Deprecated: 0.9.10: No longer used. Network type setting should be done
+ * by talking to ModemManager directly.
**/
g_object_class_install_property
(object_class, PROP_NETWORK_TYPE,
g_param_spec_int (NM_SETTING_GSM_NETWORK_TYPE,
- "Network type",
- "Network preference to force the device to only use "
- "specific network technologies. The permitted values "
- "are: -1: any, 0: 3G only, 1: GPRS/EDGE only, "
- "2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only. "
- "Note that not all devices allow network preference control.",
- NM_SETTING_GSM_NETWORK_TYPE_ANY,
- NM_SETTING_GSM_NETWORK_TYPE_4G,
- NM_SETTING_GSM_NETWORK_TYPE_ANY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ "Network type",
+ "Network preference to force the device to only use "
+ "specific network technologies. The permitted values "
+ "are: -1: any, 0: 3G only, 1: GPRS/EDGE only, "
+ "2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only. "
+ "Notes: This property is deprecated and NetworkManager from 0.9.10 "
+ "onwards doesn't use this property when talking to ModemManager."
+ "Also, not all devices allow network preference control.",
+ NM_SETTING_GSM_NETWORK_TYPE_ANY,
+ NM_SETTING_GSM_NETWORK_TYPE_4G,
+ NM_SETTING_GSM_NETWORK_TYPE_ANY,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingGsm:allowed-bands:
@@ -675,38 +701,29 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
* Bitfield of allowed frequency bands. Note that not all devices allow
* frequency band control. Permitted values are those specified by
* #NMSettingGsmNetworkBand.
+ *
+ * Deprecated: 0.9.10: No longer used. Band setting should be done by
+ * talking to ModemManager directly.
**/
g_object_class_install_property
(object_class, PROP_ALLOWED_BANDS,
g_param_spec_uint (NM_SETTING_GSM_ALLOWED_BANDS,
"Allowed Bands",
- "Bitfield of allowed frequency bands. Note that "
- "not all devices allow frequency band control.",
+ "Bitfield of allowed frequency bands."
+ "Notes: This property is deprecated and NetworkManager from 0.9.10 "
+ "onwards doesn't use this property when talking to ModemManager."
+ "Also, not all devices allow frequency band control.",
NM_SETTING_GSM_BAND_UNKNOWN,
- NM_SETTING_GSM_BAND_UNKNOWN
- | NM_SETTING_GSM_BAND_ANY
- | NM_SETTING_GSM_BAND_EGSM
- | NM_SETTING_GSM_BAND_DCS
- | NM_SETTING_GSM_BAND_PCS
- | NM_SETTING_GSM_BAND_G850
- | NM_SETTING_GSM_BAND_U2100
- | NM_SETTING_GSM_BAND_U1800
- | NM_SETTING_GSM_BAND_U17IV
- | NM_SETTING_GSM_BAND_U800
- | NM_SETTING_GSM_BAND_U850
- | NM_SETTING_GSM_BAND_U900
- | NM_SETTING_GSM_BAND_U17IX
- | NM_SETTING_GSM_BAND_U1900
- | NM_SETTING_GSM_BAND_U2600,
+ NM_SETTING_GSM_BANDS_MAX,
NM_SETTING_GSM_BAND_ANY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingGsm:pin:
*
* If the SIM is locked with a PIN it must be unlocked before any other
- * operations are requested. Specify the PIN here to allow operation of
- * the device.
+ * operations are requested. Specify the PIN here to allow operation of the
+ * device.
**/
g_object_class_install_property
(object_class, PROP_PIN,
@@ -716,12 +733,12 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"before any other operations are requested. Specify "
"the PIN here to allow operation of the device.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingGsm:pin-flags:
*
- * Flags indicating how to handle #NMSettingGsm:pin.
+ * Flags indicating how to handle the #NMSettingGsm:pin property.
**/
g_object_class_install_property (object_class, PROP_PIN_FLAGS,
g_param_spec_uint (NM_SETTING_GSM_PIN_FLAGS,
@@ -730,12 +747,12 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingGsm:home-only:
*
- * When TRUE, only connections to the home network will be allowed.
+ * When %TRUE, only connections to the home network will be allowed.
* Connections to roaming networks will not be made.
**/
g_object_class_install_property
@@ -746,5 +763,5 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"be allowed. Connections to roaming networks will "
"not be made.",
FALSE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
}
diff --git a/libnm-util/nm-setting-gsm.h b/libnm-util/nm-setting-gsm.h
index 2303f762b..6d8e46d0a 100644
--- a/libnm-util/nm-setting-gsm.h
+++ b/libnm-util/nm-setting-gsm.h
@@ -64,12 +64,14 @@ GQuark nm_setting_gsm_error_quark (void);
#define NM_SETTING_GSM_PASSWORD_FLAGS "password-flags"
#define NM_SETTING_GSM_APN "apn"
#define NM_SETTING_GSM_NETWORK_ID "network-id"
-#define NM_SETTING_GSM_NETWORK_TYPE "network-type"
-#define NM_SETTING_GSM_ALLOWED_BANDS "allowed-bands"
#define NM_SETTING_GSM_PIN "pin"
#define NM_SETTING_GSM_PIN_FLAGS "pin-flags"
#define NM_SETTING_GSM_HOME_ONLY "home-only"
+/* Deprecated */
+#define NM_SETTING_GSM_ALLOWED_BANDS "allowed-bands"
+#define NM_SETTING_GSM_NETWORK_TYPE "network-type"
+
/**
* NMSettingGsmNetworkType:
* @NM_SETTING_GSM_NETWORK_TYPE_ANY: any access technology may be used
@@ -88,6 +90,8 @@ GQuark nm_setting_gsm_error_quark (void);
*
* #NMSettingGsmNetworkType values indicate the allowed access technologies
* the device may use when connecting to this network.
+ *
+ * Deprecated: 0.9.10: No longer used.
*/
typedef enum {
NM_SETTING_GSM_NETWORK_TYPE_ANY = -1,
@@ -119,6 +123,8 @@ typedef enum {
*
* #NMSettingGsmNetworkBand values indicate the allowed frequency bands
* the device may use when connecting to this network.
+ *
+ * Deprecated: 0.9.10: No longer used.
*/
typedef enum {
NM_SETTING_GSM_BAND_UNKNOWN = 0x00000000,
@@ -138,6 +144,30 @@ typedef enum {
NM_SETTING_GSM_BAND_U2600 = 0x00002000, /* WCDMA 3GPP UMTS 2600 MHz (Class VII, internal) */
} NMSettingGsmNetworkBand;
+/**
+ * NM_SETTING_GSM_BANDS_MAX:
+ *
+ * #NM_SETTING_GSM_BANDS_MAX macro indicate the maximal value that can be used
+ * as the allowed frequency bands (#NMSettingGsm:allowed-bands property).
+ *
+ * Deprecated: 0.9.10: No longer used.
+ */
+#define NM_SETTING_GSM_BANDS_MAX ( NM_SETTING_GSM_BAND_UNKNOWN \
+ | NM_SETTING_GSM_BAND_ANY \
+ | NM_SETTING_GSM_BAND_EGSM \
+ | NM_SETTING_GSM_BAND_DCS \
+ | NM_SETTING_GSM_BAND_PCS \
+ | NM_SETTING_GSM_BAND_G850 \
+ | NM_SETTING_GSM_BAND_U2100 \
+ | NM_SETTING_GSM_BAND_U1800 \
+ | NM_SETTING_GSM_BAND_U17IV \
+ | NM_SETTING_GSM_BAND_U800 \
+ | NM_SETTING_GSM_BAND_U850 \
+ | NM_SETTING_GSM_BAND_U900 \
+ | NM_SETTING_GSM_BAND_U17IX \
+ | NM_SETTING_GSM_BAND_U1900 \
+ | NM_SETTING_GSM_BAND_U2600)
+
typedef struct {
NMSetting parent;
} NMSettingGsm;
@@ -160,14 +190,18 @@ const char *nm_setting_gsm_get_username (NMSettingGsm *setting);
const char *nm_setting_gsm_get_password (NMSettingGsm *setting);
const char *nm_setting_gsm_get_apn (NMSettingGsm *setting);
const char *nm_setting_gsm_get_network_id (NMSettingGsm *setting);
-int nm_setting_gsm_get_network_type (NMSettingGsm *setting);
-guint32 nm_setting_gsm_get_allowed_bands (NMSettingGsm *setting);
const char *nm_setting_gsm_get_pin (NMSettingGsm *setting);
gboolean nm_setting_gsm_get_home_only (NMSettingGsm *setting);
NMSettingSecretFlags nm_setting_gsm_get_pin_flags (NMSettingGsm *setting);
NMSettingSecretFlags nm_setting_gsm_get_password_flags (NMSettingGsm *setting);
+/* Deprecated */
+NM_DEPRECATED_IN_0_9_10
+int nm_setting_gsm_get_network_type (NMSettingGsm *setting);
+NM_DEPRECATED_IN_0_9_10
+guint32 nm_setting_gsm_get_allowed_bands (NMSettingGsm *setting);
+
G_END_DECLS
#endif /* NM_SETTING_GSM_H */
diff --git a/libnm-util/nm-setting-infiniband.c b/libnm-util/nm-setting-infiniband.c
index ee40aa0ec..5af504483 100644
--- a/libnm-util/nm-setting-infiniband.c
+++ b/libnm-util/nm-setting-infiniband.c
@@ -16,16 +16,20 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright 2011 Red Hat, Inc.
+ * Copyright 2011 - 2013 Red Hat, Inc.
*/
+#include <stdlib.h>
#include <dbus/dbus-glib.h>
#include <linux/if_infiniband.h>
+#include <glib/gi18n.h>
#include "nm-setting-infiniband.h"
#include "nm-param-spec-specialized.h"
+#include "nm-utils.h"
#include "nm-utils-private.h"
#include "nm-setting-private.h"
+#include "nm-setting-connection.h"
/**
* SECTION:nm-setting-infiniband
@@ -66,6 +70,8 @@ typedef struct {
GByteArray *mac_address;
char *transport_mode;
guint32 mtu;
+ int p_key;
+ char *parent, *virtual_iface_name;
} NMSettingInfinibandPrivate;
enum {
@@ -73,6 +79,8 @@ enum {
PROP_MAC_ADDRESS,
PROP_MTU,
PROP_TRANSPORT_MODE,
+ PROP_P_KEY,
+ PROP_PARENT,
LAST_PROP
};
@@ -135,6 +143,53 @@ nm_setting_infiniband_get_transport_mode (NMSettingInfiniband *setting)
return NM_SETTING_INFINIBAND_GET_PRIVATE (setting)->transport_mode;
}
+/**
+ * nm_setting_infiniband_get_p_key:
+ * @setting: the #NMSettingInfiniband
+ *
+ * Returns the P_Key to use for this device. A value of -1 means to
+ * use the default P_Key (aka "the P_Key at index 0"). Otherwise it is
+ * a 16-bit unsigned integer.
+ *
+ * Returns: the IPoIB P_Key
+ **/
+int
+nm_setting_infiniband_get_p_key (NMSettingInfiniband *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (setting), -1);
+
+ return NM_SETTING_INFINIBAND_GET_PRIVATE (setting)->p_key;
+}
+
+/**
+ * nm_setting_infiniband_get_parent:
+ * @setting: the #NMSettingInfiniband
+ *
+ * Returns the parent interface name for this device, if set.
+ *
+ * Returns: the parent interface name
+ **/
+const char *
+nm_setting_infiniband_get_parent (NMSettingInfiniband *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (setting), NULL);
+
+ return NM_SETTING_INFINIBAND_GET_PRIVATE (setting)->parent;
+}
+
+static const char *
+get_virtual_iface_name (NMSetting *setting)
+{
+ NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (setting);
+
+ if (priv->p_key == -1 || !priv->parent)
+ return NULL;
+
+ if (!priv->virtual_iface_name)
+ priv->virtual_iface_name = g_strdup_printf ("%s.%04x", priv->parent, priv->p_key);
+
+ return NM_SETTING_INFINIBAND_GET_PRIVATE (setting)->virtual_iface_name;
+}
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
@@ -142,10 +197,11 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (setting);
if (priv->mac_address && priv->mac_address->len != INFINIBAND_ALEN) {
- g_set_error (error,
- NM_SETTING_INFINIBAND_ERROR,
- NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
- NM_SETTING_INFINIBAND_MAC_ADDRESS);
+ g_set_error_literal (error,
+ NM_SETTING_INFINIBAND_ERROR,
+ NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_INFINIBAND_SETTING_NAME, NM_SETTING_INFINIBAND_MAC_ADDRESS);
return FALSE;
}
@@ -156,20 +212,49 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
if (priv->mtu > 65520)
priv->mtu = 65520;
} else {
- g_set_error (error,
- NM_SETTING_INFINIBAND_ERROR,
- NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
- NM_SETTING_INFINIBAND_TRANSPORT_MODE);
+ g_set_error_literal (error,
+ NM_SETTING_INFINIBAND_ERROR,
+ NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_INFINIBAND_SETTING_NAME, NM_SETTING_INFINIBAND_TRANSPORT_MODE);
return FALSE;
}
+ if (priv->parent) {
+ if (!nm_utils_iface_valid_name (priv->parent)) {
+ g_set_error_literal (error,
+ NM_SETTING_INFINIBAND_ERROR,
+ NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
+ _("not a valid interface name"));
+ g_prefix_error (error, "%s: ", NM_SETTING_INFINIBAND_PARENT);
+ return FALSE;
+ }
+ if (priv->p_key == -1) {
+ g_set_error_literal (error,
+ NM_SETTING_INFINIBAND_ERROR,
+ NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
+ _("Must specify a P_Key if specifying parent"));
+ g_prefix_error (error, "%s: ", NM_SETTING_INFINIBAND_PARENT);
+ }
+ }
+
+ if (priv->p_key != -1) {
+ if (!priv->mac_address && !priv->parent) {
+ g_set_error_literal (error,
+ NM_SETTING_INFINIBAND_ERROR,
+ NM_SETTING_INFINIBAND_ERROR_MISSING_PROPERTY,
+ _("InfiniBand P_Key connection did not specify parent interface name"));
+ g_prefix_error (error, "%s: ", NM_SETTING_INFINIBAND_PARENT);
+ return FALSE;
+ }
+ }
+
return TRUE;
}
static void
nm_setting_infiniband_init (NMSettingInfiniband *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_INFINIBAND_SETTING_NAME, NULL);
}
static void
@@ -180,6 +265,8 @@ finalize (GObject *object)
g_free (priv->transport_mode);
if (priv->mac_address)
g_byte_array_free (priv->mac_address, TRUE);
+ g_free (priv->parent);
+ g_free (priv->virtual_iface_name);
G_OBJECT_CLASS (nm_setting_infiniband_parent_class)->finalize (object);
}
@@ -203,6 +290,15 @@ set_property (GObject *object, guint prop_id,
g_free (priv->transport_mode);
priv->transport_mode = g_value_dup_string (value);
break;
+ case PROP_P_KEY:
+ priv->p_key = g_value_get_int (value);
+ g_clear_pointer (&priv->virtual_iface_name, g_free);
+ break;
+ case PROP_PARENT:
+ g_free (priv->parent);
+ priv->parent = g_value_dup_string (value);
+ g_clear_pointer (&priv->virtual_iface_name, g_free);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -225,6 +321,12 @@ get_property (GObject *object, guint prop_id,
case PROP_TRANSPORT_MODE:
g_value_set_string (value, nm_setting_infiniband_get_transport_mode (setting));
break;
+ case PROP_P_KEY:
+ g_value_set_int (value, nm_setting_infiniband_get_p_key (setting));
+ break;
+ case PROP_PARENT:
+ g_value_set_string (value, nm_setting_infiniband_get_parent (setting));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -243,15 +345,17 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
object_class->set_property = set_property;
object_class->get_property = get_property;
object_class->finalize = finalize;
- parent_class->verify = verify;
+
+ parent_class->verify = verify;
+ parent_class->get_virtual_iface_name = get_virtual_iface_name;
/* Properties */
/**
* NMSettingInfiniband:mac-address:
*
- * If specified, this connection will only apply to the IPoIB
- * device whose permanent MAC address matches. This property does
- * not change the MAC address of the device (i.e. MAC spoofing).
+ * If specified, this connection will only apply to the IPoIB device whose
+ * permanent MAC address matches. This property does not change the MAC
+ * address of the device (i.e. MAC spoofing).
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
@@ -262,7 +366,7 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
"This property does not change the MAC address "
"of the device (i.e. MAC spoofing).",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingInfiniband:mtu:
@@ -278,20 +382,53 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
"size or smaller, breaking larger packets up into "
"multiple frames.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingInfiniband:transport-mode:
*
- * The IP-over-InfiniBand transport mode. Either 'datagram' or
- * 'connected'.
+ * The IP-over-InfiniBand transport mode. Either "datagram" or
+ * "connected".
**/
g_object_class_install_property
(object_class, PROP_TRANSPORT_MODE,
g_param_spec_string (NM_SETTING_INFINIBAND_TRANSPORT_MODE,
- "Transport Mode",
- "The IPoIB transport mode. Either 'datagram' or 'connected'.",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
-}
+ "Transport Mode",
+ "The IPoIB transport mode. Either 'datagram' or 'connected'.",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ /**
+ * NMSettingInfiniband:p-key:
+ *
+ * The InfiniBand P_Key to use for this device. A value of -1 means to use
+ * the default P_Key (aka "the P_Key at index 0"). Otherwise it is a 16-bit
+ * unsigned integer, whose high bit is set if it is a "full membership"
+ * P_Key.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_P_KEY,
+ g_param_spec_int (NM_SETTING_INFINIBAND_P_KEY,
+ "P_Key",
+ "The InfiniBand P_Key. Either -1 for the "
+ "default, or a 16-bit unsigned integer.",
+ -1, 0xFFFF, -1,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+
+ /**
+ * NMSettingInfiniband:parent:
+ *
+ * The interface name of the parent device of this device. Normally %NULL,
+ * but if the #NMSettingInfiniband:p_key property is set, then you must
+ * specify the base device by setting either this property or
+ * #NMSettingInfiniband:mac-address.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_string (NM_SETTING_INFINIBAND_PARENT,
+ "Parent",
+ "The interface name of the parent device, or NULL",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+
+}
diff --git a/libnm-util/nm-setting-infiniband.h b/libnm-util/nm-setting-infiniband.h
index 98a3dd5e9..dff384503 100644
--- a/libnm-util/nm-setting-infiniband.h
+++ b/libnm-util/nm-setting-infiniband.h
@@ -54,6 +54,8 @@ GQuark nm_setting_infiniband_error_quark (void);
#define NM_SETTING_INFINIBAND_MAC_ADDRESS "mac-address"
#define NM_SETTING_INFINIBAND_MTU "mtu"
#define NM_SETTING_INFINIBAND_TRANSPORT_MODE "transport-mode"
+#define NM_SETTING_INFINIBAND_P_KEY "p-key"
+#define NM_SETTING_INFINIBAND_PARENT "parent"
typedef struct {
NMSetting parent;
@@ -75,6 +77,8 @@ NMSetting * nm_setting_infiniband_new (void);
const GByteArray *nm_setting_infiniband_get_mac_address (NMSettingInfiniband *setting);
guint32 nm_setting_infiniband_get_mtu (NMSettingInfiniband *setting);
const char * nm_setting_infiniband_get_transport_mode (NMSettingInfiniband *setting);
+int nm_setting_infiniband_get_p_key (NMSettingInfiniband *setting);
+const char * nm_setting_infiniband_get_parent (NMSettingInfiniband *setting);
G_END_DECLS
diff --git a/libnm-util/nm-setting-ip4-config.c b/libnm-util/nm-setting-ip4-config.c
index 34f5c8fbd..a2c104d53 100644
--- a/libnm-util/nm-setting-ip4-config.c
+++ b/libnm-util/nm-setting-ip4-config.c
@@ -19,13 +19,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2010 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
-
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-ip4-config.h"
#include "nm-param-spec-specialized.h"
#include "nm-utils.h"
@@ -77,6 +78,7 @@ typedef struct {
GArray *dns; /* array of guint32; elements in network byte order */
GSList *dns_search; /* list of strings */
GSList *addresses; /* array of NMIP4Address */
+ GSList *address_labels; /* list of strings */
GSList *routes; /* array of NMIP4Route */
gboolean ignore_auto_routes;
gboolean ignore_auto_dns;
@@ -93,6 +95,7 @@ enum {
PROP_DNS,
PROP_DNS_SEARCH,
PROP_ADDRESSES,
+ PROP_ADDRESS_LABELS,
PROP_ROUTES,
PROP_IGNORE_AUTO_ROUTES,
PROP_IGNORE_AUTO_DNS,
@@ -192,6 +195,7 @@ nm_setting_ip4_config_add_dns (NMSettingIP4Config *setting, guint32 dns)
}
g_array_append_val (priv->dns, dns);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS);
return TRUE;
}
@@ -213,6 +217,38 @@ nm_setting_ip4_config_remove_dns (NMSettingIP4Config *setting, guint32 i)
g_return_if_fail (i <= priv->dns->len);
g_array_remove_index (priv->dns, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS);
+}
+
+/**
+ * nm_setting_ip4_config_remove_dns_by_value:
+ * @setting: the #NMSettingIP4Config
+ * @dns: the DNS server to remove
+ *
+ * Removes the DNS server @dns.
+ *
+ * Returns: %TRUE if the DNS server was found and removed; %FALSE if it was not.
+ * domain was already known
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_ip4_config_remove_dns_by_value (NMSettingIP4Config *setting, guint32 dns)
+{
+ NMSettingIP4ConfigPrivate *priv;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE);
+
+ priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
+ for (i = 0; i < priv->dns->len; i++) {
+ if (dns == g_array_index (priv->dns, guint32, i)) {
+ g_array_remove_index (priv->dns, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -230,6 +266,7 @@ nm_setting_ip4_config_clear_dns (NMSettingIP4Config *setting)
priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
g_array_remove_range (priv->dns, 0, priv->dns->len);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS);
}
/**
@@ -294,6 +331,7 @@ nm_setting_ip4_config_add_dns_search (NMSettingIP4Config *setting,
}
priv->dns_search = g_slist_append (priv->dns_search, g_strdup (dns_search));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS_SEARCH);
return TRUE;
}
@@ -318,6 +356,40 @@ nm_setting_ip4_config_remove_dns_search (NMSettingIP4Config *setting, guint32 i)
g_free (elt->data);
priv->dns_search = g_slist_delete_link (priv->dns_search, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+}
+
+/**
+ * nm_setting_ip4_config_remove_dns_search_by_value:
+ * @setting: the #NMSettingIP4Config
+ * @dns_search: the search domain to remove
+ *
+ * Removes the DNS search domain @dns_search.
+ *
+ * Returns: %TRUE if the DNS search domain was found and removed; %FALSE if it was not.
+ *
+ * Since 0.9.10
+ **/
+gboolean
+nm_setting_ip4_config_remove_dns_search_by_value (NMSettingIP4Config *setting,
+ const char *dns_search)
+{
+ NMSettingIP4ConfigPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE);
+ g_return_val_if_fail (dns_search != NULL, FALSE);
+ g_return_val_if_fail (dns_search[0] != '\0', FALSE);
+
+ priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
+ for (iter = priv->dns_search; iter; iter = g_slist_next (iter)) {
+ if (!strcmp (dns_search, (char *) iter->data)) {
+ priv->dns_search = g_slist_delete_link (priv->dns_search, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -331,8 +403,9 @@ nm_setting_ip4_config_clear_dns_searches (NMSettingIP4Config *setting)
{
g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
- nm_utils_slist_free (NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns_search, g_free);
+ g_slist_free_full (NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns_search, g_free);
NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns_search = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_DNS_SEARCH);
}
/**
@@ -369,6 +442,19 @@ nm_setting_ip4_config_get_address (NMSettingIP4Config *setting, guint32 i)
return (NMIP4Address *) g_slist_nth_data (priv->addresses, i);
}
+const char *
+nm_setting_ip4_config_get_address_label (NMSettingIP4Config *setting, guint32 i)
+{
+ NMSettingIP4ConfigPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL);
+
+ priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
+ g_return_val_if_fail (i <= g_slist_length (priv->address_labels), NULL);
+
+ return (const char *) g_slist_nth_data (priv->address_labels, i);
+}
+
/**
* nm_setting_ip4_config_add_address:
* @setting: the #NMSettingIP4Config
@@ -384,6 +470,14 @@ gboolean
nm_setting_ip4_config_add_address (NMSettingIP4Config *setting,
NMIP4Address *address)
{
+ return nm_setting_ip4_config_add_address_with_label (setting, address, NULL);
+}
+
+gboolean
+nm_setting_ip4_config_add_address_with_label (NMSettingIP4Config *setting,
+ NMIP4Address *address,
+ const char *label)
+{
NMSettingIP4ConfigPrivate *priv;
NMIP4Address *copy;
GSList *iter;
@@ -398,9 +492,10 @@ nm_setting_ip4_config_add_address (NMSettingIP4Config *setting,
}
copy = nm_ip4_address_dup (address);
- g_return_val_if_fail (copy != NULL, FALSE);
-
priv->addresses = g_slist_append (priv->addresses, copy);
+ priv->address_labels = g_slist_append (priv->address_labels, g_strdup (label));
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ADDRESSES);
return TRUE;
}
@@ -415,16 +510,55 @@ void
nm_setting_ip4_config_remove_address (NMSettingIP4Config *setting, guint32 i)
{
NMSettingIP4ConfigPrivate *priv;
- GSList *elt;
+ GSList *addr, *label;
g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
- elt = g_slist_nth (priv->addresses, i);
- g_return_if_fail (elt != NULL);
+ addr = g_slist_nth (priv->addresses, i);
+ label = g_slist_nth (priv->address_labels, i);
+ g_return_if_fail (addr != NULL && label != NULL);
+
+ nm_ip4_address_unref ((NMIP4Address *) addr->data);
+ priv->addresses = g_slist_delete_link (priv->addresses, addr);
+ if (label->data)
+ g_free (label->data);
+ priv->address_labels = g_slist_delete_link (priv->address_labels, label);
- nm_ip4_address_unref ((NMIP4Address *) elt->data);
- priv->addresses = g_slist_delete_link (priv->addresses, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ADDRESSES);
+}
+
+/**
+ * nm_setting_ip4_config_remove_address_by_value:
+ * @setting: the #NMSettingIP4Config
+ * @address: the IP address to remove
+ *
+ * Removes the address @address.
+ *
+ * Returns: %TRUE if the address was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_ip4_config_remove_address_by_value (NMSettingIP4Config *setting,
+ NMIP4Address *address)
+{
+ NMSettingIP4ConfigPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE);
+ g_return_val_if_fail (address != NULL, FALSE);
+
+ priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
+ for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
+ if (nm_ip4_address_compare ((NMIP4Address *) iter->data, address)) {
+ nm_ip4_address_unref ((NMIP4Address *) iter->data);
+ priv->addresses = g_slist_delete_link (priv->addresses, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ADDRESSES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -440,8 +574,11 @@ nm_setting_ip4_config_clear_addresses (NMSettingIP4Config *setting)
g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
- nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
priv->addresses = NULL;
+ g_slist_free_full (priv->address_labels, g_free);
+ priv->address_labels = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ADDRESSES);
}
/**
@@ -506,9 +643,8 @@ nm_setting_ip4_config_add_route (NMSettingIP4Config *setting,
}
copy = nm_ip4_route_dup (route);
- g_return_val_if_fail (copy != NULL, FALSE);
-
priv->routes = g_slist_append (priv->routes, copy);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ROUTES);
return TRUE;
}
@@ -533,6 +669,40 @@ nm_setting_ip4_config_remove_route (NMSettingIP4Config *setting, guint32 i)
nm_ip4_route_unref ((NMIP4Route *) elt->data);
priv->routes = g_slist_delete_link (priv->routes, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ROUTES);
+}
+
+/**
+ * nm_setting_ip4_config_remove_route_by_value:
+ * @setting: the #NMSettingIP4Config
+ * @route: the route to remove
+ *
+ * Removes the route @route.
+ *
+ * Returns: %TRUE if the route was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_ip4_config_remove_route_by_value (NMSettingIP4Config *setting,
+ NMIP4Route *route)
+{
+ NMSettingIP4ConfigPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE);
+ g_return_val_if_fail (route != NULL, FALSE);
+
+ priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
+ for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
+ if (nm_ip4_route_compare ((NMIP4Route *) iter->data, route)) {
+ nm_ip4_route_unref ((NMIP4Route *) iter->data);
+ priv->routes = g_slist_delete_link (priv->routes, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ROUTES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -548,8 +718,9 @@ nm_setting_ip4_config_clear_routes (NMSettingIP4Config *setting)
g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
- nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
priv->routes = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ROUTES);
}
/**
@@ -678,27 +849,43 @@ nm_setting_ip4_config_get_may_fail (NMSettingIP4Config *setting)
return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->may_fail;
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
+static gboolean
+verify_label (const char *label)
{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
+ const char *p;
+ char *iface;
+
+ p = strchr (label, ':');
+ if (!p)
+ return FALSE;
+ iface = g_strndup (label, p - label);
+ if (!nm_utils_iface_valid_name (iface)) {
+ g_free (iface);
+ return FALSE;
+ }
+ g_free (iface);
- return strcmp (nm_setting_get_name (setting), str);
+ for (p++; *p; p++) {
+ if (!g_ascii_isalnum (*p) && *p != '_')
+ return FALSE;
+ }
+
+ return TRUE;
}
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
- GSList *iter;
+ GSList *iter, *l_iter;
int i;
if (!priv->method) {
- g_set_error (error,
- NM_SETTING_IP4_CONFIG_ERROR,
- NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY,
- NM_SETTING_IP4_CONFIG_METHOD);
+ g_set_error_literal (error,
+ NM_SETTING_IP4_CONFIG_ERROR,
+ NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_METHOD);
return FALSE;
}
@@ -707,7 +894,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ _("this property cannot be empty for '%s=%s'"),
+ NM_SETTING_IP4_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_ADDRESSES);
return FALSE;
}
} else if ( !strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL)
@@ -717,7 +906,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- NM_SETTING_IP4_CONFIG_DNS);
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP4_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DNS);
return FALSE;
}
@@ -725,69 +916,68 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP4_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DNS_SEARCH);
return FALSE;
}
- if (g_slist_length (priv->addresses)) {
- g_set_error (error,
- NM_SETTING_IP4_CONFIG_ERROR,
- NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
- return FALSE;
- }
- } else if (!strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
- /* nothing to do */
- } else {
- g_set_error (error,
- NM_SETTING_IP4_CONFIG_ERROR,
- NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_METHOD);
- return FALSE;
- }
-
- /* Disabled method is not allowed when IPv6 is set to 'ignore' */
- if (!strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
- GSList *list = g_slist_find_custom (all_settings, NM_SETTING_IP6_CONFIG_SETTING_NAME, find_setting_by_name);
- if (list) {
- NMSettingIP6Config *s_ip6 = g_slist_nth_data (list, 0);
- if ( s_ip6
- && !g_strcmp0 (nm_setting_ip6_config_get_method (s_ip6), NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
+ /* Shared allows IP addresses; link-local and disabled do not */
+ if (strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) != 0) {
+ if (g_slist_length (priv->addresses)) {
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
- NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP4_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_ADDRESSES);
return FALSE;
}
}
+ } else if (!strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
+ /* nothing to do */
+ } else {
+ g_set_error_literal (error,
+ NM_SETTING_IP4_CONFIG_ERROR,
+ NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_METHOD);
+ return FALSE;
}
if (priv->dhcp_client_id && !strlen (priv->dhcp_client_id)) {
- g_set_error (error,
- NM_SETTING_IP4_CONFIG_ERROR,
- NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID);
+ g_set_error_literal (error,
+ NM_SETTING_IP4_CONFIG_ERROR,
+ NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID);
return FALSE;
}
if (priv->dhcp_hostname && !strlen (priv->dhcp_hostname)) {
- g_set_error (error,
- NM_SETTING_IP4_CONFIG_ERROR,
- NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
+ g_set_error_literal (error,
+ NM_SETTING_IP4_CONFIG_ERROR,
+ NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
return FALSE;
}
/* Validate addresses */
- for (iter = priv->addresses, i = 0; iter; iter = g_slist_next (iter), i++) {
+ for (iter = priv->addresses, l_iter = priv->address_labels, i = 0;
+ iter && l_iter;
+ iter = g_slist_next (iter), l_iter = g_slist_next (l_iter), i++) {
NMIP4Address *addr = (NMIP4Address *) iter->data;
+ const char *label = (const char *) l_iter->data;
guint32 prefix = nm_ip4_address_get_prefix (addr);
if (!nm_ip4_address_get_address (addr)) {
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ _("%d. IPv4 address is invalid"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_ADDRESSES);
return FALSE;
}
@@ -795,11 +985,34 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ _("%d. IPv4 address has invalid prefix"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+
+ if (label && !verify_label (label)) {
+ g_set_error (error,
+ NM_SETTING_IP4_CONFIG_ERROR,
+ NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+ _("%d. IPv4 address has invalid label '%s'"),
+ i+1, label);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, "address-labels");
return FALSE;
}
}
+ if (iter || l_iter) {
+ g_set_error (error,
+ NM_SETTING_IP4_CONFIG_ERROR,
+ NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+ _("IPv4 address / label count mismatch (%d vs %d)"),
+ g_slist_length (priv->addresses),
+ g_slist_length (priv->address_labels));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, "address-labels");
+ return FALSE;
+ }
+
/* Validate routes */
for (iter = priv->routes, i = 0; iter; iter = g_slist_next (iter), i++) {
NMIP4Route *route = (NMIP4Route *) iter->data;
@@ -809,7 +1022,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_ROUTES);
+ _("%d. route is invalid"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_ROUTES);
return FALSE;
}
@@ -817,7 +1032,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP4_CONFIG_ROUTES);
+ _("%d. route has invalid prefix"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_ROUTES);
return FALSE;
}
}
@@ -831,7 +1048,6 @@ nm_setting_ip4_config_init (NMSettingIP4Config *setting)
{
NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL);
priv->dns = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3);
}
@@ -848,9 +1064,10 @@ finalize (GObject *object)
g_array_free (priv->dns, TRUE);
- nm_utils_slist_free (priv->dns_search, g_free);
- nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
- nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
+ g_slist_free_full (priv->dns_search, g_free);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
+ g_slist_free_full (priv->address_labels, g_free);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
G_OBJECT_CLASS (nm_setting_ip4_config_parent_class)->finalize (object);
}
@@ -861,6 +1078,7 @@ set_property (GObject *object, guint prop_id,
{
NMSettingIP4Config *setting = NM_SETTING_IP4_CONFIG (object);
NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
+ GSList *iter;
switch (prop_id) {
case PROP_METHOD:
@@ -871,18 +1089,36 @@ set_property (GObject *object, guint prop_id,
g_array_free (priv->dns, TRUE);
priv->dns = g_value_dup_boxed (value);
if (!priv->dns)
- priv->dns = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3);
+ priv->dns = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3);
break;
case PROP_DNS_SEARCH:
- nm_utils_slist_free (priv->dns_search, g_free);
+ g_slist_free_full (priv->dns_search, g_free);
priv->dns_search = g_value_dup_boxed (value);
break;
case PROP_ADDRESSES:
- nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
priv->addresses = nm_utils_ip4_addresses_from_gvalue (value);
+
+ if (g_slist_length (priv->addresses) != g_slist_length (priv->address_labels)) {
+ g_slist_free_full (priv->address_labels, g_free);
+ priv->address_labels = NULL;
+ for (iter = priv->addresses; iter; iter = iter->next)
+ priv->address_labels = g_slist_prepend (priv->address_labels, NULL);
+ }
+ break;
+ case PROP_ADDRESS_LABELS:
+ g_slist_free_full (priv->address_labels, g_free);
+ priv->address_labels = g_value_dup_boxed (value);
+ /* NULLs get converted to "" when this is sent over D-Bus. */
+ for (iter = priv->address_labels; iter; iter = iter->next) {
+ if (!g_strcmp0 (iter->data, "")) {
+ g_free (iter->data);
+ iter->data = NULL;
+ }
+ }
break;
case PROP_ROUTES:
- nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
priv->routes = nm_utils_ip4_routes_from_gvalue (value);
break;
case PROP_IGNORE_AUTO_ROUTES:
@@ -934,6 +1170,9 @@ get_property (GObject *object, guint prop_id,
case PROP_ADDRESSES:
nm_utils_ip4_addresses_to_gvalue (priv->addresses, value);
break;
+ case PROP_ADDRESS_LABELS:
+ g_value_set_boxed (value, priv->address_labels);
+ break;
case PROP_ROUTES:
nm_utils_ip4_routes_to_gvalue (priv->routes, value);
break;
@@ -982,17 +1221,17 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
/**
* NMSettingIP4Config:method:
*
- * IPv4 configuration method. If 'auto' is specified then the appropriate
+ * IPv4 configuration method. If "auto" is specified then the appropriate
* automatic method (DHCP, PPP, etc) is used for the interface and most
- * other properties can be left unset. If 'link-local' is specified, then a
+ * other properties can be left unset. If "link-local" is specified, then a
* link-local address in the 169.254/16 range will be assigned to the
- * interface. If 'manual' is specified, static IP addressing is used and at
- * least one IP address must be given in the 'addresses' property. If
- * 'shared' is specified (indicating that this connection will provide
+ * interface. If "manual" is specified, static IP addressing is used and at
+ * least one IP address must be given in the "addresses" property. If
+ * "shared" is specified (indicating that this connection will provide
* network access to other computers) then the interface is assigned an
* address in the 10.42.x.1/24 range and a DHCP and forwarding DNS server
* are started, and the interface is NAT-ed to the current default network
- * connection. 'disabled' means IPv4 will not be used on this connection.
+ * connection. "disabled" means IPv4 will not be used on this connection.
* This property must be set.
**/
g_object_class_install_property
@@ -1017,17 +1256,17 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"connection. 'disabled' means IPv4 will not be "
"used on this connection. This property must be set.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingIP4Config:dns:
*
- * List of DNS servers (network byte order). For the 'auto' method, these
+ * List of DNS servers (network byte order). For the "auto" method, these
* DNS servers are appended to those (if any) returned by automatic
- * configuration. DNS servers cannot be used with the 'shared', 'link-local',
- * or 'disabled' methods as there is no upstream network. In all other
- * methods, these DNS servers are used as the only DNS servers for this
- * connection.
+ * configuration. DNS servers cannot be used with the "shared",
+ * "link-local", or "disabled" methods as there is no upstream network. In
+ * all other methods, these DNS servers are used as the only DNS servers for
+ * this connection.
**/
g_object_class_install_property
(object_class, PROP_DNS,
@@ -1042,14 +1281,14 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"other methods, these DNS servers are used as the "
"only DNS servers for this connection.",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingIP4Config:dns-search:
*
- * List of DNS search domains. For the 'auto' method, these search domains
+ * List of DNS search domains. For the "auto" method, these search domains
* are appended to those returned by automatic configuration. Search domains
- * cannot be used with the 'shared', 'link-local', or 'disabled' methods as
+ * cannot be used with the "shared", "link-local", or "disabled" methods as
* there is no upstream network. In all other methods, these search domains
* are used as the only search domains for this connection.
**/
@@ -1066,7 +1305,7 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"search domains are used as the only search domains "
"for this connection.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingIP4Config:addresses:
@@ -1075,9 +1314,9 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
* composed of 3 32-bit values; the first being the IPv4 address (network
* byte order), the second the prefix (1 - 32), and last the IPv4 gateway
* (network byte order). The gateway may be left as 0 if no gateway exists
- * for that subnet. For the 'auto' method, given IP addresses are appended
+ * for that subnet. For the "auto" method, given IP addresses are appended
* to those returned by automatic configuration. Addresses cannot be used
- * with the 'shared', 'link-local', or 'disabled' methods as addressing is
+ * with the "shared", "link-local", or "disabled" methods as addressing is
* either automatic or disabled with these methods.
**/
g_object_class_install_property
@@ -1097,19 +1336,32 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"'disabled' methods as addressing is either "
"automatic or disabled with these methods.",
DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+
+ /**
+ * NMSettingIP4Config:address-labels:
+ *
+ * Internal use only.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ADDRESS_LABELS,
+ _nm_param_spec_specialized ("address-labels",
+ "Address labels",
+ "Internal use only",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingIP4Config:routes:
*
- * Array of IPv4 route structures. Each IPv4 route structure is composed
- * of 4 32-bit values; the first being the destination IPv4 network or
- * address (network byte order), the second the destination network or
- * address prefix (1 - 32), the third being the next-hop (network byte
- * order) if any, and the fourth being the route metric. For the 'auto'
- * method, given IP routes are appended to those returned by automatic
- * configuration. Routes cannot be used with the 'shared', 'link-local',
- * or 'disabled' methods because there is no upstream network.
+ * Array of IPv4 route structures. Each IPv4 route structure is composed of
+ * 4 32-bit values; the first being the destination IPv4 network or address
+ * (network byte order), the second the destination network or address
+ * prefix (1 - 32), the third being the next-hop (network byte order) if
+ * any, and the fourth being the route metric. For the "auto" method, given
+ * IP routes are appended to those returned by automatic configuration.
+ * Routes cannot be used with the "shared", "link-local", or "disabled"
+ * methods because there is no upstream network.
**/
g_object_class_install_property
(object_class, PROP_ROUTES,
@@ -1128,14 +1380,14 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"'shared', 'link-local', or 'disabled', methods "
"as there is no upstream network.",
DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingIP4Config:ignore-auto-routes:
*
- * When the method is set to 'auto' and this property to TRUE, automatically
- * configured routes are ignored and only routes specified in
- * #NMSettingIP4Config:routes, if any, are used.
+ * When the method is set to "auto" and this property to %TRUE,
+ * automatically configured routes are ignored and only routes specified in
+ * the #NMSettingIP4Config:routes property, if any, are used.
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_ROUTES,
@@ -1146,15 +1398,16 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"ignored and only routes specified in the 'routes' "
"property, if any, are used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP4Config:ignore-auto-dns:
*
- * When the method is set to 'auto' and this property to TRUE, automatically
- * configured nameservers and search domains are ignored and only nameservers
- * and search domains specified in #NMSettingIP4Config:dns and
- * #NMSettingIP4Config:dns-search, if any, are used.
+ * When the method is set to "auto" and this property to %TRUE,
+ * automatically configured nameservers and search domains are ignored and
+ * only nameservers and search domains specified in the
+ * #NMSettingIP4Config:dns and #NMSettingIP4Config:dns-search properties, if
+ * any, are used.
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_DNS,
@@ -1166,7 +1419,7 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"search domains specified in the 'dns' and 'dns-search' "
"properties, if any, are used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP4Config:dhcp-client-id:
@@ -1182,16 +1435,16 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"local machine which the DHCP server may use to "
"customize the DHCP lease and options.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingIP4Config:dhcp-send-hostname:
*
- * If TRUE, a hostname is sent to the DHCP server when acquiring a lease.
+ * If %TRUE, a hostname is sent to the DHCP server when acquiring a lease.
* Some DHCP servers use this hostname to update DNS databases, essentially
- * providing a static hostname for the computer. If
- * #NMSettingIP4Config:dhcp-hostname is empty and this property is TRUE,
- * the current persistent hostname of the computer is sent.
+ * providing a static hostname for the computer. If the
+ * #NMSettingIP4Config:dhcp-hostname property is empty and this property is
+ * %TRUE, the current persistent hostname of the computer is sent.
**/
g_object_class_install_property
(object_class, PROP_DHCP_SEND_HOSTNAME,
@@ -1205,12 +1458,12 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"property is TRUE, the current persistent hostname "
"of the computer is sent.",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP4Config:dhcp-hostname:
*
- * If the #NMSettingIP4Config:dhcp-send-hostname property is TRUE, then the
+ * If the #NMSettingIP4Config:dhcp-send-hostname property is %TRUE, then the
* specified name will be sent to the DHCP server when acquiring a lease.
**/
g_object_class_install_property
@@ -1221,12 +1474,12 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"the specified name will be sent to the DHCP server "
"when acquiring a lease.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingIP4Config:never-default:
*
- * If TRUE, this connection will never be the default IPv4 connection,
+ * If %TRUE, this connection will never be the default IPv4 connection,
* meaning it will never be assigned the default route by NetworkManager.
**/
g_object_class_install_property
@@ -1237,17 +1490,17 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"IPv4 connection, meaning it will never be assigned "
"the default route by NetworkManager.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP4Config:may-fail:
*
- * If TRUE, allow overall network configuration to proceed even if IPv4
- * configuration times out. Note that at least one IP configuration
- * must succeed or overall network configuration will still fail. For
- * example, in IPv6-only networks, setting this property to TRUE allows
- * the overall network configuration to succeed if IPv4 configuration fails
- * but IPv6 configuration completes successfully.
+ * If %TRUE, allow overall network configuration to proceed even if IPv4
+ * configuration times out. Note that at least one IP configuration must
+ * succeed or overall network configuration will still fail. For example,
+ * in IPv6-only networks, setting this property to %TRUE allows the overall
+ * network configuration to succeed if IPv4 configuration fails but IPv6
+ * configuration completes successfully.
**/
g_object_class_install_property
(object_class, PROP_MAY_FAIL,
@@ -1262,7 +1515,7 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
"configuration to succeed if IPv4 configuration "
"fails but IPv6 configuration completes successfully.",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
}
diff --git a/libnm-util/nm-setting-ip4-config.h b/libnm-util/nm-setting-ip4-config.h
index 5f7f3d001..3f0d006bf 100644
--- a/libnm-util/nm-setting-ip4-config.h
+++ b/libnm-util/nm-setting-ip4-config.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2010 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -189,24 +189,32 @@ guint32 nm_setting_ip4_config_get_num_dns (NMSettingIP4Config *
guint32 nm_setting_ip4_config_get_dns (NMSettingIP4Config *setting, guint32 i);
gboolean nm_setting_ip4_config_add_dns (NMSettingIP4Config *setting, guint32 dns);
void nm_setting_ip4_config_remove_dns (NMSettingIP4Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip4_config_remove_dns_by_value (NMSettingIP4Config *setting, guint32 dns);
void nm_setting_ip4_config_clear_dns (NMSettingIP4Config *setting);
-guint32 nm_setting_ip4_config_get_num_dns_searches (NMSettingIP4Config *setting);
-const char * nm_setting_ip4_config_get_dns_search (NMSettingIP4Config *setting, guint32 i);
-gboolean nm_setting_ip4_config_add_dns_search (NMSettingIP4Config *setting, const char *dns_search);
-void nm_setting_ip4_config_remove_dns_search (NMSettingIP4Config *setting, guint32 i);
-void nm_setting_ip4_config_clear_dns_searches (NMSettingIP4Config *setting);
-
-guint32 nm_setting_ip4_config_get_num_addresses (NMSettingIP4Config *setting);
-NMIP4Address *nm_setting_ip4_config_get_address (NMSettingIP4Config *setting, guint32 i);
-gboolean nm_setting_ip4_config_add_address (NMSettingIP4Config *setting, NMIP4Address *address);
-void nm_setting_ip4_config_remove_address (NMSettingIP4Config *setting, guint32 i);
-void nm_setting_ip4_config_clear_addresses (NMSettingIP4Config *setting);
+guint32 nm_setting_ip4_config_get_num_dns_searches (NMSettingIP4Config *setting);
+const char * nm_setting_ip4_config_get_dns_search (NMSettingIP4Config *setting, guint32 i);
+gboolean nm_setting_ip4_config_add_dns_search (NMSettingIP4Config *setting, const char *dns_search);
+void nm_setting_ip4_config_remove_dns_search (NMSettingIP4Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip4_config_remove_dns_search_by_value (NMSettingIP4Config *setting, const char *dns_search);
+void nm_setting_ip4_config_clear_dns_searches (NMSettingIP4Config *setting);
+
+guint32 nm_setting_ip4_config_get_num_addresses (NMSettingIP4Config *setting);
+NMIP4Address *nm_setting_ip4_config_get_address (NMSettingIP4Config *setting, guint32 i);
+gboolean nm_setting_ip4_config_add_address (NMSettingIP4Config *setting, NMIP4Address *address);
+void nm_setting_ip4_config_remove_address (NMSettingIP4Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip4_config_remove_address_by_value (NMSettingIP4Config *setting, NMIP4Address *address);
+void nm_setting_ip4_config_clear_addresses (NMSettingIP4Config *setting);
guint32 nm_setting_ip4_config_get_num_routes (NMSettingIP4Config *setting);
NMIP4Route * nm_setting_ip4_config_get_route (NMSettingIP4Config *setting, guint32 i);
gboolean nm_setting_ip4_config_add_route (NMSettingIP4Config *setting, NMIP4Route *route);
void nm_setting_ip4_config_remove_route (NMSettingIP4Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip4_config_remove_route_by_value (NMSettingIP4Config *setting, NMIP4Route *route);
void nm_setting_ip4_config_clear_routes (NMSettingIP4Config *setting);
gboolean nm_setting_ip4_config_get_ignore_auto_routes (NMSettingIP4Config *setting);
diff --git a/libnm-util/nm-setting-ip6-config.c b/libnm-util/nm-setting-ip6-config.c
index b9a0ea305..b027ee96a 100644
--- a/libnm-util/nm-setting-ip6-config.c
+++ b/libnm-util/nm-setting-ip6-config.c
@@ -19,12 +19,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
*/
#include <string.h>
-
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-ip6-config.h"
#include "nm-param-spec-specialized.h"
#include "nm-utils.h"
@@ -211,6 +212,7 @@ nm_setting_ip6_config_add_dns (NMSettingIP6Config *setting, const struct in6_add
copy = g_malloc0 (sizeof (struct in6_addr));
memcpy (copy, addr, sizeof (struct in6_addr));
priv->dns = g_slist_append (priv->dns, copy);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
return TRUE;
}
@@ -236,6 +238,38 @@ nm_setting_ip6_config_remove_dns (NMSettingIP6Config *setting, guint32 i)
g_free (elt->data);
priv->dns = g_slist_delete_link (priv->dns, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
+}
+
+/**
+ * nm_setting_ip6_config_remove_dns_by_value:
+ * @setting: the #NMSettingIP6Config
+ * @dns: the IPv6 address of the DNS server to remove
+ *
+ * Removes the DNS server at index @i.
+ *
+ * Returns: %TRUE if the DNS server was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_ip6_config_remove_dns_by_value (NMSettingIP6Config *setting,
+ const struct in6_addr *addr)
+{
+ NMSettingIP6ConfigPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
+
+ priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
+ for (iter = priv->dns; iter; iter = g_slist_next (iter)) {
+ if (!memcmp (addr, (struct in6_addr *) iter->data, sizeof (struct in6_addr))) {
+ priv->dns = g_slist_delete_link (priv->dns, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -249,8 +283,9 @@ nm_setting_ip6_config_clear_dns (NMSettingIP6Config *setting)
{
g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
- nm_utils_slist_free (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns, g_free);
+ g_slist_free_full (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns, g_free);
NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
}
/**
@@ -315,6 +350,7 @@ nm_setting_ip6_config_add_dns_search (NMSettingIP6Config *setting,
}
priv->dns_search = g_slist_append (priv->dns_search, g_strdup (dns_search));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
return TRUE;
}
@@ -339,6 +375,40 @@ nm_setting_ip6_config_remove_dns_search (NMSettingIP6Config *setting, guint32 i)
g_free (elt->data);
priv->dns_search = g_slist_delete_link (priv->dns_search, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+}
+
+/**
+ * nm_setting_ip6_config_remove_dns_search_by_value:
+ * @setting: the #NMSettingIP6Config
+ * @dns_search: the search domain to remove
+ *
+ * Removes the DNS search domain @dns_search.
+ *
+ * Returns: %TRUE if the DNS search domain was found and removed; %FALSE if it was not.
+ *
+ * Since 0.9.10
+ **/
+gboolean
+nm_setting_ip6_config_remove_dns_search_by_value (NMSettingIP6Config *setting,
+ const char *dns_search)
+{
+ NMSettingIP6ConfigPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
+ g_return_val_if_fail (dns_search != NULL, FALSE);
+ g_return_val_if_fail (dns_search[0] != '\0', FALSE);
+
+ priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
+ for (iter = priv->dns_search; iter; iter = g_slist_next (iter)) {
+ if (!strcmp (dns_search, (char *) iter->data)) {
+ priv->dns_search = g_slist_delete_link (priv->dns_search, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -352,8 +422,9 @@ nm_setting_ip6_config_clear_dns_searches (NMSettingIP6Config *setting)
{
g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
- nm_utils_slist_free (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search, g_free);
+ g_slist_free_full (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search, g_free);
NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
}
/**
@@ -419,9 +490,8 @@ nm_setting_ip6_config_add_address (NMSettingIP6Config *setting,
}
copy = nm_ip6_address_dup (address);
- g_return_val_if_fail (copy != NULL, FALSE);
-
priv->addresses = g_slist_append (priv->addresses, copy);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
return TRUE;
}
@@ -446,6 +516,39 @@ nm_setting_ip6_config_remove_address (NMSettingIP6Config *setting, guint32 i)
nm_ip6_address_unref ((NMIP6Address *) elt->data);
priv->addresses = g_slist_delete_link (priv->addresses, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
+}
+
+/**
+ * nm_setting_ip6_config_remove_address_by_value:
+ * @setting: the #NMSettingIP6Config
+ * @address: the address to remove
+ *
+ * Removes the address @address.
+ *
+ * Returns: %TRUE if the address was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_ip6_config_remove_address_by_value (NMSettingIP6Config *setting,
+ NMIP6Address *address)
+{
+ NMSettingIP6ConfigPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
+ g_return_val_if_fail (address != NULL, FALSE);
+
+ priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
+ for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
+ if (nm_ip6_address_compare ((NMIP6Address *) iter->data, address)) {
+ priv->addresses = g_slist_delete_link (priv->addresses, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -461,8 +564,9 @@ nm_setting_ip6_config_clear_addresses (NMSettingIP6Config *setting)
g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
- nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip6_address_unref);
+ g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip6_address_unref);
priv->addresses = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
}
/**
@@ -527,9 +631,8 @@ nm_setting_ip6_config_add_route (NMSettingIP6Config *setting,
}
copy = nm_ip6_route_dup (route);
- g_return_val_if_fail (copy != NULL, FALSE);
-
priv->routes = g_slist_append (priv->routes, copy);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
return TRUE;
}
@@ -554,6 +657,40 @@ nm_setting_ip6_config_remove_route (NMSettingIP6Config *setting, guint32 i)
nm_ip6_route_unref ((NMIP6Route *) elt->data);
priv->routes = g_slist_delete_link (priv->routes, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
+}
+
+/**
+ * nm_setting_ip6_config_remove_route_by_value:
+ * @setting: the #NMSettingIP6Config
+ * @route: the route to remove
+ *
+ * Removes the route @route.
+ *
+ * Returns: %TRUE if the route was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_ip6_config_remove_route_by_value (NMSettingIP6Config *setting,
+ NMIP6Route *route)
+{
+ NMSettingIP6ConfigPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
+ g_return_val_if_fail (route != NULL, FALSE);
+
+ priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
+ for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
+ if (nm_ip6_route_compare ((NMIP6Route *) iter->data, route)) {
+ nm_ip6_route_unref ((NMIP6Route *) iter->data);
+ priv->routes = g_slist_delete_link (priv->routes, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -569,8 +706,9 @@ nm_setting_ip6_config_clear_routes (NMSettingIP6Config *setting)
g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
- nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
priv->routes = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
}
/**
@@ -662,25 +800,17 @@ nm_setting_ip6_config_get_ip6_privacy (NMSettingIP6Config *setting)
return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ip6_privacy;
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
-{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
-
- return strcmp (nm_setting_get_name (setting), str);
-}
-
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
if (!priv->method) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY,
- NM_SETTING_IP6_CONFIG_METHOD);
+ g_set_error_literal (error,
+ NM_SETTING_IP6_CONFIG_ERROR,
+ NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_METHOD);
return FALSE;
}
@@ -689,7 +819,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP6_CONFIG_ERROR,
NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY,
- NM_SETTING_IP6_CONFIG_ADDRESSES);
+ _("this property cannot be empty for '%s=%s'"),
+ NM_SETTING_IP6_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_ADDRESSES);
return FALSE;
}
} else if ( !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
@@ -699,7 +831,10 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP6_CONFIG_ERROR,
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- NM_SETTING_IP6_CONFIG_DNS);
+ _("'%s' not allowed for %s=%s"),
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP6_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_DNS);
return FALSE;
}
@@ -707,7 +842,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP6_CONFIG_ERROR,
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP6_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_DNS_SEARCH);
return FALSE;
}
@@ -715,41 +852,29 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_IP6_CONFIG_ERROR,
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- NM_SETTING_IP6_CONFIG_ADDRESSES);
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP6_CONFIG_METHOD, priv->method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_ADDRESSES);
return FALSE;
}
} else if ( !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
|| !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
/* nothing to do */
} else {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP6_CONFIG_METHOD);
+ g_set_error_literal (error,
+ NM_SETTING_IP6_CONFIG_ERROR,
+ NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_METHOD);
return FALSE;
}
- /* Method 'ignore' is not allowed when IPv4 is set to 'disabled' */
- if (!strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
- GSList *list = g_slist_find_custom (all_settings, NM_SETTING_IP4_CONFIG_SETTING_NAME, find_setting_by_name);
- if (list) {
- NMSettingIP4Config *s_ip4 = g_slist_nth_data (list, 0);
- if ( s_ip4
- && !g_strcmp0 (nm_setting_ip4_config_get_method (s_ip4), NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP6_CONFIG_METHOD);
- return FALSE;
- }
- }
- }
-
if (priv->dhcp_hostname && !strlen (priv->dhcp_hostname)) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME);
+ g_set_error_literal (error,
+ NM_SETTING_IP6_CONFIG_ERROR,
+ NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME);
return FALSE;
}
@@ -760,7 +885,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
static void
nm_setting_ip6_config_init (NMSettingIP6Config *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL);
}
static void
@@ -771,11 +895,10 @@ finalize (GObject *object)
g_free (priv->method);
g_free (priv->dhcp_hostname);
- g_slist_free (priv->dns);
-
- nm_utils_slist_free (priv->dns_search, g_free);
- nm_utils_slist_free (priv->addresses, g_free);
- nm_utils_slist_free (priv->routes, g_free);
+ g_slist_free_full (priv->dns, g_free);
+ g_slist_free_full (priv->dns_search, g_free);
+ g_slist_free_full (priv->addresses, g_free);
+ g_slist_free_full (priv->routes, g_free);
G_OBJECT_CLASS (nm_setting_ip6_config_parent_class)->finalize (object);
}
@@ -789,25 +912,22 @@ set_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_METHOD:
g_free (priv->method);
- if (g_strcmp0 (g_value_get_string (value), "disabled") == 0)
- priv->method = g_strdup (NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
- else
- priv->method = g_value_dup_string (value);
+ priv->method = g_value_dup_string (value);
break;
case PROP_DNS:
- nm_utils_slist_free (priv->dns, g_free);
+ g_slist_free_full (priv->dns, g_free);
priv->dns = nm_utils_ip6_dns_from_gvalue (value);
break;
case PROP_DNS_SEARCH:
- nm_utils_slist_free (priv->dns_search, g_free);
+ g_slist_free_full (priv->dns_search, g_free);
priv->dns_search = g_value_dup_boxed (value);
break;
case PROP_ADDRESSES:
- nm_utils_slist_free (priv->addresses, g_free);
+ g_slist_free_full (priv->addresses, g_free);
priv->addresses = nm_utils_ip6_addresses_from_gvalue (value);
break;
case PROP_ROUTES:
- nm_utils_slist_free (priv->routes, g_free);
+ g_slist_free_full (priv->routes, g_free);
priv->routes = nm_utils_ip6_routes_from_gvalue (value);
break;
case PROP_IGNORE_AUTO_ROUTES:
@@ -899,16 +1019,16 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
/**
* NMSettingIP6Config:method:
*
- * IPv6 configuration method. If 'auto' is specified then the appropriate
- * automatic method (DHCP, PPP, advertisement, etc) is used for the
- * interface and most other properties can be left unset. To force the use
- * of DHCP only, specify 'dhcp'; this method is only valid for ethernet-
- * based hardware. If 'link-local' is specified, then an IPv6 link-local
- * address will be assigned to the interface. If 'manual' is specified,
- * static IP addressing is used and at least one IP address must be given
- * in the 'addresses' property. If 'ignore' is specified, IPv6
- * configuration is not done. This property must be set. NOTE: the 'shared'
- * method are not yet supported.
+ * IPv6 configuration method. If "auto" is specified then the appropriate
+ * automatic method (PPP, router advertisement, etc) is used for the device
+ * and most other properties can be left unset. To force the use of DHCP
+ * only, specify "dhcp"; this method is only valid for Ethernet- based
+ * hardware. If "link-local" is specified, then an IPv6 link-local address
+ * will be assigned to the interface. If "manual" is specified, static IP
+ * addressing is used and at least one IP address must be given in the
+ * "addresses" property. If "ignore" is specified, IPv6 configuration is
+ * not done. This property must be set. Note: the "shared" method is not
+ * yet supported.
**/
g_object_class_install_property
(object_class, PROP_METHOD,
@@ -919,22 +1039,23 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"advertisement, etc) is used for the device and "
"most other properties can be left unset. To force "
"the use of DHCP only, specify 'dhcp'; this method "
- "is only valid for ethernet-based hardware. If "
+ "is only valid for Ethernet-based hardware. If "
"'link-local' is specified, then an IPv6 link-local "
"address will be assigned to the interface. If "
"'manual' is specified, static IP addressing is "
"used and at least one IP address must be given in "
" the 'addresses' property. If 'ignore' is "
"specified, IPv6 configuration is not done. This "
- "property must be set. NOTE: the 'shared' method"
+ "property must be set. Note: the 'shared' method "
"is not yet supported.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingIP6Config:dhcp-hostname:
*
- * The specified name will be sent to the DHCP server when acquiring a lease.
+ * The specified name will be sent to the DHCP server when acquiring a
+ * lease.
*
* Since: 0.9.8
**/
@@ -945,17 +1066,17 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"The specified name will be sent to the DHCP server "
"when acquiring a lease.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingIP6Config:dns:
*
* Array of DNS servers, where each member of the array is a byte array
* containing the IPv6 address of the DNS server (in network byte order).
- * For the 'auto' method, these DNS servers are appended to those (if any)
- * returned by automatic configuration. DNS servers cannot be used with
- * the 'shared' or 'link-local' methods as there is no usptream network. In
- * all other methods, these DNS servers are used as the only DNS servers for
+ * For the "auto" method, these DNS servers are appended to those (if any)
+ * returned by automatic configuration. DNS servers cannot be used with the
+ * "shared" or "link-local" methods as there is no usptream network. In all
+ * other methods, these DNS servers are used as the only DNS servers for
* this connection.
**/
g_object_class_install_property
@@ -973,16 +1094,16 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"these DNS servers are used as the only DNS "
"servers for this connection.",
DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingIP6Config:dns-search:
*
- * List of DNS search domains. For the 'auto' method, these search domains
+ * List of DNS search domains. For the "auto" method, these search domains
* are appended to those returned by automatic configuration. Search domains
- * cannot be used with the 'shared' or 'link-local' methods as there is no
- * upstream network. In all other methods, these search domains are used
- * as the only search domains for this connection.
+ * cannot be used with the "shared" or "link-local" methods as there is no
+ * upstream network. In all other methods, these search domains are used as
+ * the only search domains for this connection.
**/
g_object_class_install_property
(object_class, PROP_DNS_SEARCH,
@@ -997,7 +1118,7 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"domains are used as the only search domains for "
"this connection.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingIP6Config:addresses:
@@ -1007,10 +1128,10 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
* address (network byte order), the second a 32-bit integer containing the
* IPv6 address prefix, and the third a byte array containing the IPv6
* address (network byte order) of the gateway associated with this address,
- * if any. If no gateway is given, the third element should be given as
- * all zeros. For the 'auto' method, given IP addresses are appended to
- * those returned by automatic configuration. Addresses cannot be used with
- * the 'shared' or 'link-local' methods as the interface is automatically
+ * if any. If no gateway is given, the third element should be given as all
+ * zeros. For the "auto" method, given IP addresses are appended to those
+ * returned by automatic configuration. Addresses cannot be used with the
+ * "shared" or "link-local" methods as the interface is automatically
* assigned an address with these methods.
**/
g_object_class_install_property
@@ -1033,19 +1154,19 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"as the interface is automatically assigned an "
"address with these methods.",
DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingIP6Config:routes:
*
- * Array of IPv6 route structures. Each IPv6 route structure is composed
- * of 4 members; the first being the destination IPv6 network or
- * address (network byte order) as a byte array, the second the destination
- * network or address IPv6 prefix, the third being the next-hop IPv6 address
+ * Array of IPv6 route structures. Each IPv6 route structure is composed of
+ * 4 members; the first being the destination IPv6 network or address
+ * (network byte order) as a byte array, the second the destination network
+ * or address IPv6 prefix, the third being the next-hop IPv6 address
* (network byte order) if any, and the fourth being the route metric. For
- * the 'auto' method, given IP routes are appended to those returned by
- * automatic configuration. Routes cannot be used with the 'shared' or
- * 'link-local' methods because there is no upstream network.
+ * the "auto" method, given IP routes are appended to those returned by
+ * automatic configuration. Routes cannot be used with the "shared" or
+ * "link-local" methods because there is no upstream network.
**/
g_object_class_install_property
(object_class, PROP_ROUTES,
@@ -1064,14 +1185,14 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"used with the 'shared' or 'link-local' methods "
"because there is no upstream network.",
DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingIP6Config:ignore-auto-routes:
*
- * When the method is set to 'auto' or 'dhcp' and this property is set to
- * TRUE, automatically configured routes are ignored and only routes
- * specified in #NMSettingIP6Config:routes, if any, are used.
+ * When the method is set to "auto" or "dhcp" and this property is set to
+ * %TRUE, automatically configured routes are ignored and only routes
+ * specified in the #NMSettingIP6Config:routes property, if any, are used.
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_ROUTES,
@@ -1082,16 +1203,16 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"routes are ignored and only routes specified in the "
"'routes' property, if any, are used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP6Config:ignore-auto-dns:
*
- * When the method is set to 'auto' or 'dhcp' and this property is set to
- * TRUE, automatically configured nameservers and search domains are ignored
- * and only nameservers and search domains specified in
- * #NMSettingIP6Config:dns and #NMSettingIP6Config:dns-search, if any, are
- * used.
+ * When the method is set to "auto" or "dhcp" and this property is set to
+ * %TRUE, automatically configured nameservers and search domains are
+ * ignored and only nameservers and search domains specified in the
+ * #NMSettingIP6Config:dns and #NMSettingIP6Config:dns-search properties, if
+ * any, are used.
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_DNS,
@@ -1103,13 +1224,14 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"nameservers and search domains specified in the 'dns' "
"and 'dns-search' properties, if any, are used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP6Config:never-default:
*
- * If TRUE, this connection will never be the default IPv6 connection,
- * meaning it will never be assigned the default IPv6 route by NetworkManager.
+ * If %TRUE, this connection will never be the default IPv6 connection,
+ * meaning it will never be assigned the default IPv6 route by
+ * NetworkManager.
**/
g_object_class_install_property
(object_class, PROP_NEVER_DEFAULT,
@@ -1119,17 +1241,17 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"IPv6 connection, meaning it will never be assigned "
"the default IPv6 route by NetworkManager.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP6Config:may-fail:
*
- * If TRUE, allow overall network configuration to proceed even if IPv6
- * configuration times out. Note that at least one IP configuration
- * must succeed or overall network configuration will still fail. For
- * example, in IPv4-only networks, setting this property to TRUE allows
- * the overall network configuration to succeed if IPv6 configuration fails
- * but IPv4 configuration completes successfully.
+ * If %TRUE, allow overall network configuration to proceed even if IPv6
+ * configuration times out. Note that at least one IP configuration must
+ * succeed or overall network configuration will still fail. For example,
+ * in IPv4-only networks, setting this property to %TRUE allows the overall
+ * network configuration to succeed if IPv6 configuration fails but IPv4
+ * configuration completes successfully.
**/
g_object_class_install_property
(object_class, PROP_MAY_FAIL,
@@ -1144,18 +1266,18 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
"configuration to succeed if IPv6 configuration "
"fails but IPv4 configuration completes successfully.",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingIP6Config:ip6-privacy:
*
- * Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941.
- * If enabled, it makes the kernel generate a temporary IPv6 address
- * in addition to the public one generated from MAC address via
- * modified EUI-64. This enhances privacy, but could cause problems
- * in some applications, on the other hand. The permitted values
- * are: 0: disabled, 1: enabled (prefer public address),
- * 2: enabled (prefer temporary addresses).
+ * Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If
+ * enabled, it makes the kernel generate a temporary IPv6 address in
+ * addition to the public one generated from MAC address via modified
+ * EUI-64. This enhances privacy, but could cause problems in some
+ * applications, on the other hand. The permitted values are: 0: disabled,
+ * 1: enabled (prefer public address), 2: enabled (prefer temporary
+ * addresses).
**/
g_object_class_install_property
(object_class, PROP_IP6_PRIVACY,
@@ -1172,8 +1294,7 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR,
NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
-
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
}
/********************************************************************/
diff --git a/libnm-util/nm-setting-ip6-config.h b/libnm-util/nm-setting-ip6-config.h
index 29650486c..d1f4ca842 100644
--- a/libnm-util/nm-setting-ip6-config.h
+++ b/libnm-util/nm-setting-ip6-config.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
*/
#ifndef NM_SETTING_IP6_CONFIG_H
@@ -219,24 +219,32 @@ guint32 nm_setting_ip6_config_get_num_dns (NMSettingIP
const struct in6_addr *nm_setting_ip6_config_get_dns (NMSettingIP6Config *setting, guint32 i);
gboolean nm_setting_ip6_config_add_dns (NMSettingIP6Config *setting, const struct in6_addr *dns);
void nm_setting_ip6_config_remove_dns (NMSettingIP6Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip6_config_remove_dns_by_value (NMSettingIP6Config *setting, const struct in6_addr *dns);
void nm_setting_ip6_config_clear_dns (NMSettingIP6Config *setting);
-guint32 nm_setting_ip6_config_get_num_dns_searches (NMSettingIP6Config *setting);
-const char * nm_setting_ip6_config_get_dns_search (NMSettingIP6Config *setting, guint32 i);
-gboolean nm_setting_ip6_config_add_dns_search (NMSettingIP6Config *setting, const char *dns_search);
-void nm_setting_ip6_config_remove_dns_search (NMSettingIP6Config *setting, guint32 i);
-void nm_setting_ip6_config_clear_dns_searches (NMSettingIP6Config *setting);
-
-guint32 nm_setting_ip6_config_get_num_addresses (NMSettingIP6Config *setting);
-NMIP6Address * nm_setting_ip6_config_get_address (NMSettingIP6Config *setting, guint32 i);
-gboolean nm_setting_ip6_config_add_address (NMSettingIP6Config *setting, NMIP6Address *address);
-void nm_setting_ip6_config_remove_address (NMSettingIP6Config *setting, guint32 i);
-void nm_setting_ip6_config_clear_addresses (NMSettingIP6Config *setting);
+guint32 nm_setting_ip6_config_get_num_dns_searches (NMSettingIP6Config *setting);
+const char * nm_setting_ip6_config_get_dns_search (NMSettingIP6Config *setting, guint32 i);
+gboolean nm_setting_ip6_config_add_dns_search (NMSettingIP6Config *setting, const char *dns_search);
+void nm_setting_ip6_config_remove_dns_search (NMSettingIP6Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip6_config_remove_dns_search_by_value (NMSettingIP6Config *setting, const char *dns_search);
+void nm_setting_ip6_config_clear_dns_searches (NMSettingIP6Config *setting);
+
+guint32 nm_setting_ip6_config_get_num_addresses (NMSettingIP6Config *setting);
+NMIP6Address * nm_setting_ip6_config_get_address (NMSettingIP6Config *setting, guint32 i);
+gboolean nm_setting_ip6_config_add_address (NMSettingIP6Config *setting, NMIP6Address *address);
+void nm_setting_ip6_config_remove_address (NMSettingIP6Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip6_config_remove_address_by_value (NMSettingIP6Config *setting, NMIP6Address *address);
+void nm_setting_ip6_config_clear_addresses (NMSettingIP6Config *setting);
guint32 nm_setting_ip6_config_get_num_routes (NMSettingIP6Config *setting);
NMIP6Route * nm_setting_ip6_config_get_route (NMSettingIP6Config *setting, guint32 i);
gboolean nm_setting_ip6_config_add_route (NMSettingIP6Config *setting, NMIP6Route *route);
void nm_setting_ip6_config_remove_route (NMSettingIP6Config *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_ip6_config_remove_route_by_value (NMSettingIP6Config *setting, NMIP6Route *route);
void nm_setting_ip6_config_clear_routes (NMSettingIP6Config *setting);
gboolean nm_setting_ip6_config_get_ignore_auto_routes (NMSettingIP6Config *setting);
diff --git a/libnm-util/nm-setting-olpc-mesh.c b/libnm-util/nm-setting-olpc-mesh.c
index bf87aa578..d344fa043 100644
--- a/libnm-util/nm-setting-olpc-mesh.c
+++ b/libnm-util/nm-setting-olpc-mesh.c
@@ -20,7 +20,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
* (C) Copyright 2009 One Laptop per Child
*/
@@ -28,6 +28,7 @@
#include <string.h>
#include <netinet/ether.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include "NetworkManager.h"
#include "nm-setting-olpc-mesh.h"
@@ -88,7 +89,6 @@ NMSetting *nm_setting_olpc_mesh_new (void)
static void
nm_setting_olpc_mesh_init (NMSettingOlpcMesh *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_OLPC_MESH_SETTING_NAME, NULL);
}
const GByteArray *
@@ -121,18 +121,20 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingOlpcMeshPrivate *priv = NM_SETTING_OLPC_MESH_GET_PRIVATE (setting);
if (!priv->ssid) {
- g_set_error (error,
- NM_SETTING_OLPC_MESH_ERROR,
- NM_SETTING_OLPC_MESH_ERROR_MISSING_PROPERTY,
- NM_SETTING_OLPC_MESH_SSID);
+ g_set_error_literal (error,
+ NM_SETTING_OLPC_MESH_ERROR,
+ NM_SETTING_OLPC_MESH_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_OLPC_MESH_SETTING_NAME, NM_SETTING_OLPC_MESH_SSID);
return FALSE;
}
if (!priv->ssid->len || priv->ssid->len > 32) {
- g_set_error (error,
- NM_SETTING_OLPC_MESH_ERROR,
- NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY,
- NM_SETTING_OLPC_MESH_SSID);
+ g_set_error_literal (error,
+ NM_SETTING_OLPC_MESH_ERROR,
+ NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY,
+ _("SSID length is out of range <1-32> bytes"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_OLPC_MESH_SETTING_NAME, NM_SETTING_OLPC_MESH_SSID);
return FALSE;
}
@@ -140,15 +142,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_OLPC_MESH_ERROR,
NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY,
- NM_SETTING_OLPC_MESH_CHANNEL);
+ _("'%d' is not a valid channel"),
+ priv->channel);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_OLPC_MESH_SETTING_NAME, NM_SETTING_OLPC_MESH_CHANNEL);
return FALSE;
}
if (priv->dhcp_anycast_addr && priv->dhcp_anycast_addr->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_OLPC_MESH_ERROR,
- NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY,
- NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS);
+ g_set_error_literal (error,
+ NM_SETTING_OLPC_MESH_ERROR,
+ NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_OLPC_MESH_SETTING_NAME, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS);
return FALSE;
}
@@ -242,7 +247,7 @@ nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *setting_class)
"SSID",
"SSID of the mesh network to join.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingOlpcMesh:channel:
@@ -255,14 +260,14 @@ nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *setting_class)
"Channel",
"Channel on which the mesh network to join is located.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingOlpcMesh:dhcp-anycast-address:
*
- * Anycast DHCP address used when requesting an IP address via DHCP. The
- * specific anycast address used determines which DHCP server class answers
- * the request.
+ * Anycast DHCP MAC address used when requesting an IP address via DHCP.
+ * The specific anycast address used determines which DHCP server class
+ * answers the request.
**/
g_object_class_install_property
(object_class, PROP_DHCP_ANYCAST_ADDRESS,
@@ -274,6 +279,5 @@ nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *setting_class)
"which DHCP server class answers the "
"the request.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
-
+ G_PARAM_READWRITE));
}
diff --git a/libnm-util/nm-setting-ppp.c b/libnm-util/nm-setting-ppp.c
index 09cf3de64..237af9c89 100644
--- a/libnm-util/nm-setting-ppp.c
+++ b/libnm-util/nm-setting-ppp.c
@@ -19,10 +19,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
+#include <glib/gi18n.h>
+
#include "nm-setting-ppp.h"
#include "nm-setting-private.h"
@@ -385,7 +387,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_PPP_ERROR,
NM_SETTING_PPP_ERROR_INVALID_PROPERTY,
- NM_SETTING_PPP_MRU);
+ _("'%d' is out of valid range <128-16384>"),
+ priv->mru);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_PPP_SETTING_NAME, NM_SETTING_PPP_MRU);
return FALSE;
}
}
@@ -396,7 +400,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_PPP_ERROR,
NM_SETTING_PPP_ERROR_INVALID_PROPERTY,
- NM_SETTING_PPP_LCP_ECHO_FAILURE);
+ _("setting this property requires non-zero '%s' property"),
+ NM_SETTING_PPP_LCP_ECHO_INTERVAL);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_PPP_SETTING_NAME, NM_SETTING_PPP_LCP_ECHO_FAILURE);
return FALSE;
}
}
@@ -407,7 +413,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
static void
nm_setting_ppp_init (NMSettingPPP *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_PPP_SETTING_NAME, NULL);
}
static void
@@ -561,9 +566,9 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
/**
* NMSettingPPP:noauth:
*
- * If TRUE, do not require the other side (usually the PPP server) to
- * authenticate itself to the client. If FALSE, require authentication from
- * the remote side. In almost all cases, this should be TRUE.
+ * If %TRUE, do not require the other side (usually the PPP server) to
+ * authenticate itself to the client. If %FALSE, require authentication
+ * from the remote side. In almost all cases, this should be %TRUE.
**/
g_object_class_install_property
(object_class, PROP_NOAUTH,
@@ -574,12 +579,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"If FALSE, require authentication from the remote "
"side. In almost all cases, this should be TRUE.",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:refuse-eap:
*
- * If TRUE, the EAP authentication method will not be used.
+ * If %TRUE, the EAP authentication method will not be used.
**/
g_object_class_install_property
(object_class, PROP_REFUSE_EAP,
@@ -587,12 +592,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"Refuse EAP",
"If TRUE, the EAP authentication method will not be used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:refuse-pap:
*
- * If TRUE, the PAP authentication method will not be used.
+ * If %TRUE, the PAP authentication method will not be used.
**/
g_object_class_install_property
(object_class, PROP_REFUSE_PAP,
@@ -600,12 +605,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"Refuse PAP",
"If TRUE, the PAP authentication method will not be used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:refuse-chap:
*
- * If TRUE, the CHAP authentication method will not be used.
+ * If %TRUE, the CHAP authentication method will not be used.
**/
g_object_class_install_property
(object_class, PROP_REFUSE_CHAP,
@@ -613,12 +618,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"Refuse CHAP",
"If TRUE, the CHAP authentication method will not be used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:refuse-mschap:
*
- * If TRUE, the MSCHAP authentication method will not be used.
+ * If %TRUE, the MSCHAP authentication method will not be used.
**/
g_object_class_install_property
(object_class, PROP_REFUSE_MSCHAP,
@@ -626,12 +631,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"Refuse MSCHAP",
"If TRUE, the MSCHAP authentication method will not be used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:refuse-mschapv2:
*
- * If TRUE, the MSCHAPv2 authentication method will not be used.
+ * If %TRUE, the MSCHAPv2 authentication method will not be used.
**/
g_object_class_install_property
(object_class, PROP_REFUSE_MSCHAPV2,
@@ -639,12 +644,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"Refuse MSCHAPv2",
"If TRUE, the MSCHAPv2 authentication method will not be used.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:nobsdcomp:
*
- * If TRUE, BSD compression will not be requested.
+ * If %TRUE, BSD compression will not be requested.
**/
g_object_class_install_property
(object_class, PROP_NOBSDCOMP,
@@ -652,12 +657,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"No BSD compression",
"If TRUE, BSD compression will not be requested.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingPPP:nodeflate:
*
- * If TRUE, 'deflate' compression will not be requested.
+ * If %TRUE, "deflate" compression will not be requested.
**/
g_object_class_install_property
(object_class, PROP_NODEFLATE,
@@ -665,12 +670,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"No deflate",
"If TRUE, 'deflate' compression will not be requested.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingPPP:no-vj-comp:
*
- * If TRUE, Van Jacobsen TCP header compression will not be requested.
+ * If %TRUE, Van Jacobsen TCP header compression will not be requested.
**/
g_object_class_install_property
(object_class, PROP_NO_VJ_COMP,
@@ -678,12 +683,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"No VJ compression",
"If TRUE, Van Jacobsen TCP header compression will not be requested.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingPPP:require-mppe:
*
- * If TRUE, MPPE (Microsoft Point-to-Point Encrpytion) will be required for
+ * If %TRUE, MPPE (Microsoft Point-to-Point Encrpytion) will be required for
* the PPP session. If either 64-bit or 128-bit MPPE is not available the
* session will fail. Note that MPPE is not used on mobile broadband
* connections.
@@ -698,14 +703,14 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"will fail. Note that MPPE is not used on mobile "
"broadband connections.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:require-mppe-128:
*
- * If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encrpytion) will be
- * required for the PPP session, and the 'require-mppe' property must also
- * be set to TRUE. If 128-bit MPPE is not available the session will fail.
+ * If %TRUE, 128-bit MPPE (Microsoft Point-to-Point Encrpytion) will be
+ * required for the PPP session, and the "require-mppe" property must also
+ * be set to %TRUE. If 128-bit MPPE is not available the session will fail.
**/
g_object_class_install_property
(object_class, PROP_REQUIRE_MPPE_128,
@@ -717,13 +722,13 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"must also be set to TRUE. If 128-bit MPPE is not "
"available the session will fail.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT| NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:mppe-stateful:
*
- * If TRUE, stateful MPPE is used. See pppd documentation for more
- * information on stateful MPPE.",
+ * If %TRUE, stateful MPPE is used. See pppd documentation for more
+ * information on stateful MPPE.
**/
g_object_class_install_property
(object_class, PROP_MPPE_STATEFUL,
@@ -732,14 +737,14 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"If TRUE, stateful MPPE is used. See pppd documentation "
"for more information on stateful MPPE.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:crtscts:
*
- * If TRUE, specify that pppd should set the serial port to use hardware
- * flow control with RTS and CTS signals. This value should normally be
- * set to FALSE.
+ * If %TRUE, specify that pppd should set the serial port to use hardware
+ * flow control with RTS and CTS signals. This value should normally be set
+ * to %FALSE.
**/
g_object_class_install_property
(object_class, PROP_CRTSCTS,
@@ -750,7 +755,7 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"signals. This value should normally be set to "
"FALSE.",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:baud:
@@ -767,7 +772,7 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"the specified baudrate. This value should normally be "
"left as 0 to automatically choose the speed.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingPPP:mru:
@@ -784,7 +789,7 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"send packets no larger than the specified size. If "
"non-zero, the MRU should be between 128 and 16384.",
0, 16384, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingPPP:mtu:
@@ -799,14 +804,14 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"If non-zero, instruct pppd to send packets no larger "
"than the specified size.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingPPP:lcp-echo-failure:
*
* If non-zero, instruct pppd to presume the connection to the peer has
* failed if the specified number of LCP echo-requests go unanswered by the
- * peer. The 'lcp-echo-interval' property must also be set to a non-zero
+ * peer. The "lcp-echo-interval" property must also be set to a non-zero
* value if this property is used.
**/
g_object_class_install_property
@@ -820,7 +825,7 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"also be set to a non-zero value if this property is "
"used.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingPPP:lcp-echo-interval:
@@ -840,5 +845,5 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
"to echo requests and some will not, and it is not "
"possible to autodetect this.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
}
diff --git a/libnm-util/nm-setting-pppoe.c b/libnm-util/nm-setting-pppoe.c
index f37ec000f..fdae691b2 100644
--- a/libnm-util/nm-setting-pppoe.c
+++ b/libnm-util/nm-setting-pppoe.c
@@ -19,11 +19,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-pppoe.h"
#include "nm-setting-ppp.h"
#include "nm-setting-private.h"
@@ -157,24 +159,27 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingPPPOEPrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (setting);
if (!priv->username) {
- g_set_error (error,
- NM_SETTING_PPPOE_ERROR,
- NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY,
- NM_SETTING_PPPOE_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_PPPOE_ERROR,
+ NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_PPPOE_SETTING_NAME, NM_SETTING_PPPOE_USERNAME);
return FALSE;
} else if (!strlen (priv->username)) {
- g_set_error (error,
- NM_SETTING_PPPOE_ERROR,
- NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY,
- NM_SETTING_PPPOE_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_PPPOE_ERROR,
+ NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_PPPOE_SETTING_NAME, NM_SETTING_PPPOE_USERNAME);
return FALSE;
}
if (priv->service && !strlen (priv->service)) {
- g_set_error (error,
- NM_SETTING_PPPOE_ERROR,
- NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY,
- NM_SETTING_PPPOE_SERVICE);
+ g_set_error_literal (error,
+ NM_SETTING_PPPOE_ERROR,
+ NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_PPPOE_SETTING_NAME, NM_SETTING_PPPOE_SERVICE);
return FALSE;
}
@@ -201,7 +206,6 @@ need_secrets (NMSetting *setting)
static void
nm_setting_pppoe_init (NMSettingPPPOE *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_PPPOE_SETTING_NAME, NULL);
}
static void
@@ -289,7 +293,7 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
* NMSettingPPPOE:service:
*
* If specified, instruct PPPoE to only initiate sessions with access
- * concentrators that provide the specified serivce. For most providers,
+ * concentrators that provide the specified service. For most providers,
* this should be left blank. It is only required if there are multiple
* access concentrators or a specific service is known to be required.
**/
@@ -299,12 +303,12 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
"Service",
"If specified, instruct PPPoE to only initiate sessions "
"with access concentrators that provide the specified "
- "serivce. For most providers, this should be left "
+ "service. For most providers, this should be left "
"blank. It is only required if there are multiple "
"access concentrators or a specific service is known "
"to be required.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingPPPOE:username:
@@ -317,7 +321,7 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
"Username",
"Username used to authenticate with the PPPoE service.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingPPPOE:password:
@@ -330,12 +334,12 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
"Password",
"Password used to authenticate with the PPPoE service.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingPPPOE:password-flags:
*
- * Flags indicating how to handle #NMSettingPPPOE:password:.
+ * Flags indicating how to handle the #NMSettingPPPOE:password property.
**/
g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_PPPOE_PASSWORD_FLAGS,
@@ -344,5 +348,5 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
}
diff --git a/libnm-util/nm-setting-private.h b/libnm-util/nm-setting-private.h
index 1460841c9..c3ec9d199 100644
--- a/libnm-util/nm-setting-private.h
+++ b/libnm-util/nm-setting-private.h
@@ -21,6 +21,7 @@
#ifndef NM_SETTING_PRIVATE_H
#define NM_SETTING_PRIVATE_H
+#include "nm-setting.h"
#include "nm-glib-compat.h"
#define NM_SETTING_SECRET_FLAGS_ALL \
@@ -34,10 +35,62 @@ void _nm_register_setting (const char *name,
const guint32 priority,
const GQuark error_quark);
+/* Ensure, that name is a compile time constant string. Put the function name in parenthesis to suppress expansion. */
+#define _nm_register_setting(name, type, priority, error_quark) _nm_register_setting ((name ""), type, priority, error_quark)
+
+gboolean _nm_setting_is_base_type (NMSetting *setting);
+gboolean _nm_setting_type_is_base_type (GType type);
+GType _nm_setting_lookup_setting_type (const char *name);
+GType _nm_setting_lookup_setting_type_by_quark (GQuark error_quark);
+gint _nm_setting_compare_priority (gconstpointer a, gconstpointer b);
+
+typedef enum NMSettingUpdateSecretResult {
+ NM_SETTING_UPDATE_SECRET_ERROR = FALSE,
+ NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED = TRUE,
+ NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED = 2,
+} NMSettingUpdateSecretResult;
+
+NMSettingUpdateSecretResult _nm_setting_update_secrets (NMSetting *setting,
+ GHashTable *secrets,
+ GError **error);
+gboolean _nm_setting_clear_secrets (NMSetting *setting);
+gboolean _nm_setting_clear_secrets_with_flags (NMSetting *setting,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data);
+
+
+/* NM_SETTING_COMPARE_FLAG_INFERRABLE: check whether a device-generated
+ * connection can be replaced by a already-defined connection. This flag only
+ * takes into account properties marked with the %NM_SETTING_PARAM_INFERRABLE
+ * flag.
+ */
+#define NM_SETTING_COMPARE_FLAG_INFERRABLE 0x80000000
+
+/* The property of the #NMSetting should be considered during comparisons that
+ * use the %NM_SETTING_COMPARE_FLAG_INFERRABLE flag. Properties that don't have
+ * this flag, are ignored when doing an infrerrable comparison. This flag should
+ * be set on all properties that are read from the kernel or the system when a
+ * connection is generated. eg, IP addresses/routes can be read from the
+ * kernel, but the 'autoconnect' property cannot, so
+ * %NM_SETTING_IP4_CONFIG_ADDRESSES gets the INFERRABLE flag, but
+ * %NM_SETTING_CONNECTION_AUTOCONNECT would not.
+ *
+ * This flag should not be used with properties where the default cannot be
+ * read separately from the current value, like MTU or wired duplex mode.
+ */
+#define NM_SETTING_PARAM_INFERRABLE (1 << (4 + G_PARAM_USER_SHIFT))
+
/* Ensure the setting's GType is registered at library load time */
#define NM_SETTING_REGISTER_TYPE(x) \
static void __attribute__((constructor)) register_setting (void) \
{ g_type_init (); g_type_ensure (x); }
+NMSetting *nm_setting_find_in_list (GSList *settings_list, const char *setting_name);
+
+/* Private NMSettingIP4Config methods */
+#include "nm-setting-ip4-config.h"
+const char *nm_setting_ip4_config_get_address_label (NMSettingIP4Config *setting, guint32 i);
+gboolean nm_setting_ip4_config_add_address_with_label (NMSettingIP4Config *setting, NMIP4Address *address, const char *label);
+
#endif /* NM_SETTING_PRIVATE_H */
diff --git a/libnm-util/nm-setting-serial.c b/libnm-util/nm-setting-serial.c
index 203f57480..70152bb3c 100644
--- a/libnm-util/nm-setting-serial.c
+++ b/libnm-util/nm-setting-serial.c
@@ -179,7 +179,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
static void
nm_setting_serial_init (NMSettingSerial *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_SERIAL_SETTING_NAME, NULL);
}
static void
@@ -256,8 +255,8 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
/**
* NMSettingSerial:baud:
*
- * Speed to use for communication over the serial port. Note that this value
- * usually has no effect for mobile broadband modems as they generally
+ * Speed to use for communication over the serial port. Note that this
+ * value usually has no effect for mobile broadband modems as they generally
* ignore speed settings and use the highest available speed.
**/
g_object_class_install_property
@@ -269,12 +268,12 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
"broadband modems as they generally ignore speed "
"settings and use the highest available speed.",
0, G_MAXUINT, 57600,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingSerial:bits:
*
- * Byte-width of the serial communication.
+ * Byte-width of the serial communication. The 8 in "8n1" for example.
**/
g_object_class_install_property
(object_class, PROP_BITS,
@@ -283,7 +282,7 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
"Byte-width of the serial communication. The 8 in "
"'8n1' for example.",
5, 8, 8,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingSerial:parity:
@@ -298,13 +297,13 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
"Parity setting of the serial port. Either 'E' for even "
"parity, 'o' for odd parity, or 'n' for no parity.",
'E', 'o', 'n',
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingSerial:stopbits:
*
* Number of stop bits for communication on the serial port. Either 1 or 2.
- * The 1 in '8n1' for example.
+ * The 1 in "8n1" for example.
**/
g_object_class_install_property
(object_class, PROP_STOPBITS,
@@ -313,7 +312,7 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
"Number of stop bits for communication on the serial "
"port. Either 1 or 2. The 1 in '8n1' for example.",
1, 2, 1,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingSerial:send-delay:
@@ -327,5 +326,5 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
"Time to delay between each byte sent to the modem, "
"in microseconds.",
0, G_MAXUINT64, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
}
diff --git a/libnm-util/nm-setting-team-port.c b/libnm-util/nm-setting-team-port.c
new file mode 100644
index 000000000..c0b7748bd
--- /dev/null
+++ b/libnm-util/nm-setting-team-port.c
@@ -0,0 +1,188 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * 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.
+ */
+
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
+#include "nm-setting-team-port.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-team-port
+ * @short_description: Describes connection properties for team ports
+ * @include: nm-setting-team-port.h
+ *
+ * The #NMSettingTeamPort object is a #NMSetting subclass that describes
+ * optional properties that apply to team ports.
+ *
+ * Since: 0.9.10
+ **/
+
+/**
+ * nm_setting_team_port_error_quark:
+ *
+ * Registers an error quark for #NMSettingTeamPort if necessary.
+ *
+ * Returns: the error quark used for #NMSettingTeamPort errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_setting_team_port_error_quark (void)
+{
+ static GQuark quark;
+
+ if (G_UNLIKELY (!quark))
+ quark = g_quark_from_static_string ("nm-setting-team-port-error-quark");
+ return quark;
+}
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingTeamPort, nm_setting_team_port, NM_TYPE_SETTING,
+ _nm_register_setting (NM_SETTING_TEAM_PORT_SETTING_NAME,
+ g_define_type_id,
+ 3,
+ NM_SETTING_TEAM_PORT_ERROR))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_TEAM_PORT)
+
+#define NM_SETTING_TEAM_PORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortPrivate))
+
+typedef struct {
+ char *config;
+} NMSettingTeamPortPrivate;
+
+enum {
+ PROP_0,
+ PROP_CONFIG,
+ LAST_PROP
+};
+
+/**
+ * nm_setting_team_port_new:
+ *
+ * Creates a new #NMSettingTeamPort object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingTeamPort object
+ *
+ * Since: 0.9.10
+ **/
+NMSetting *
+nm_setting_team_port_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_TEAM_PORT, NULL);
+}
+
+/**
+ * nm_setting_team_port_get_config:
+ * @setting: the #NMSettingTeamPort
+ *
+ * Returns: the #NMSettingTeamPort:config property of the setting
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_setting_team_port_get_config (NMSettingTeamPort *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), NULL);
+
+ return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->config;
+}
+
+static gboolean
+verify (NMSetting *setting, GSList *all_settings, GError **error)
+{
+ return TRUE;
+}
+
+static void
+nm_setting_team_port_init (NMSettingTeamPort *setting)
+{
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CONFIG:
+ priv->config = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMSettingTeamPort *setting = NM_SETTING_TEAM_PORT (object);
+
+ switch (prop_id) {
+ case PROP_CONFIG:
+ g_value_set_string (value, nm_setting_team_port_get_config (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_team_port_class_init (NMSettingTeamPortClass *setting_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (setting_class);
+ NMSettingClass *parent_class = NM_SETTING_CLASS (setting_class);
+
+ g_type_class_add_private (setting_class, sizeof (NMSettingTeamPortPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * NMSettingTeamPort:config:
+ *
+ * The JSON configuration for the team port. The property should contain raw
+ * JSON configuration data suitable for teamd, because the value is passed
+ * directly to teamd. If not specified, the default configuration is
+ * used. See man teamd.conf for the format details.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CONFIG,
+ g_param_spec_string (NM_SETTING_TEAM_PORT_CONFIG,
+ "Config",
+ "JSON configuration for the team port. "
+ "The property should contain raw JSON configuration data "
+ "suitable for teamd, because the value is passed directly to "
+ "teamd. If not specified, the dafault configuration is used. "
+ "See man teamd.conf for the format details.",
+ NULL,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+}
diff --git a/libnm-util/nm-setting-team-port.h b/libnm-util/nm-setting-team-port.h
new file mode 100644
index 000000000..50b9f7e36
--- /dev/null
+++ b/libnm-util/nm-setting-team-port.h
@@ -0,0 +1,79 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * 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.
+ */
+
+#ifndef NM_SETTING_TEAM_PORT_H
+#define NM_SETTING_TEAM_PORT_H
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_TEAM_PORT (nm_setting_team_port_get_type ())
+#define NM_SETTING_TEAM_PORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPort))
+#define NM_SETTING_TEAM_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortClass))
+#define NM_IS_SETTING_TEAM_PORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_TEAM_PORT))
+#define NM_IS_SETTING_TEAM_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_TEAM_PORT))
+#define NM_SETTING_TEAM_PORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortClass))
+
+#define NM_SETTING_TEAM_PORT_SETTING_NAME "team-port"
+
+/**
+ * NMSettingTeamPortError:
+ * @NM_SETTING_TEAM_PORT_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY: the property was invalid
+ * @NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY: the property was missing and
+ * is required
+ */
+typedef enum {
+ NM_SETTING_TEAM_PORT_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY, /*< nick=InvalidProperty >*/
+ NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY, /*< nick=MissingProperty >*/
+} NMSettingTeamPortError;
+
+#define NM_SETTING_TEAM_PORT_ERROR nm_setting_team_port_error_quark ()
+GQuark nm_setting_team_port_error_quark (void);
+
+#define NM_SETTING_TEAM_PORT_CONFIG "config"
+
+typedef struct {
+ NMSetting parent;
+} NMSettingTeamPort;
+
+typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingTeamPortClass;
+
+NM_AVAILABLE_IN_0_9_10
+GType nm_setting_team_port_get_type (void);
+
+NM_AVAILABLE_IN_0_9_10
+NMSetting * nm_setting_team_port_new (void);
+
+const char * nm_setting_team_port_get_config (NMSettingTeamPort *setting);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_TEAM_PORT_H */
diff --git a/libnm-util/nm-setting-team.c b/libnm-util/nm-setting-team.c
new file mode 100644
index 000000000..af9da62c0
--- /dev/null
+++ b/libnm-util/nm-setting-team.c
@@ -0,0 +1,270 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * 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.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
+#include "nm-setting-team.h"
+#include "nm-param-spec-specialized.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-team
+ * @short_description: Describes connection properties for teams
+ * @include: nm-setting-team.h
+ *
+ * The #NMSettingTeam object is a #NMSetting subclass that describes properties
+ * necessary for team connections.
+ *
+ * Since: 0.9.10
+ **/
+
+/**
+ * nm_setting_team_error_quark:
+ *
+ * Registers an error quark for #NMSettingTeam if necessary.
+ *
+ * Returns: the error quark used for #NMSettingTeam errors.
+ *
+ * Since: 0.9.10
+ **/
+GQuark
+nm_setting_team_error_quark (void)
+{
+ static GQuark quark;
+
+ if (G_UNLIKELY (!quark))
+ quark = g_quark_from_static_string ("nm-setting-team-error-quark");
+ return quark;
+}
+
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingTeam, nm_setting_team, NM_TYPE_SETTING,
+ _nm_register_setting (NM_SETTING_TEAM_SETTING_NAME,
+ g_define_type_id,
+ 1,
+ NM_SETTING_TEAM_ERROR))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_TEAM)
+
+#define NM_SETTING_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_TEAM, NMSettingTeamPrivate))
+
+typedef struct {
+ char *interface_name;
+ char *config;
+} NMSettingTeamPrivate;
+
+enum {
+ PROP_0,
+ PROP_INTERFACE_NAME,
+ PROP_CONFIG,
+ LAST_PROP
+};
+
+/**
+ * nm_setting_team_new:
+ *
+ * Creates a new #NMSettingTeam object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingTeam object
+ *
+ * Since: 0.9.10
+ **/
+NMSetting *
+nm_setting_team_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_TEAM, NULL);
+}
+
+/**
+ * nm_setting_team_get_interface_name:
+ * @setting: the #NMSettingTeam
+ *
+ * Returns: the #NMSettingTeam:interface-name property of the setting
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_setting_team_get_interface_name (NMSettingTeam *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL);
+
+ return NM_SETTING_TEAM_GET_PRIVATE (setting)->interface_name;
+}
+
+/**
+ * nm_setting_team_get_config:
+ * @setting: the #NMSettingTeam
+ *
+ * Returns: the #NMSettingTeam:config property of the setting
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_setting_team_get_config (NMSettingTeam *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL);
+
+ return NM_SETTING_TEAM_GET_PRIVATE (setting)->config;
+}
+
+static gboolean
+verify (NMSetting *setting, GSList *all_settings, GError **error)
+{
+ NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting);
+
+ if (!priv->interface_name || !strlen(priv->interface_name)) {
+ g_set_error_literal (error,
+ NM_SETTING_TEAM_ERROR,
+ NM_SETTING_TEAM_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_TEAM_SETTING_NAME, NM_SETTING_TEAM_INTERFACE_NAME);
+ return FALSE;
+ }
+
+ if (!nm_utils_iface_valid_name (priv->interface_name)) {
+ g_set_error_literal (error,
+ NM_SETTING_TEAM_ERROR,
+ NM_SETTING_TEAM_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_TEAM_SETTING_NAME, NM_SETTING_TEAM_INTERFACE_NAME);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static const char *
+get_virtual_iface_name (NMSetting *setting)
+{
+ NMSettingTeam *self = NM_SETTING_TEAM (setting);
+
+ return nm_setting_team_get_interface_name (self);
+}
+
+static void
+nm_setting_team_init (NMSettingTeam *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (object);
+
+ g_free (priv->interface_name);
+ g_free (priv->config);
+
+ G_OBJECT_CLASS (nm_setting_team_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_INTERFACE_NAME:
+ g_free (priv->interface_name);
+ priv->interface_name = g_value_dup_string (value);
+ break;
+ case PROP_CONFIG:
+ g_free (priv->config);
+ priv->config = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMSettingTeam *setting = NM_SETTING_TEAM (object);
+
+ switch (prop_id) {
+ case PROP_INTERFACE_NAME:
+ g_value_set_string (value, nm_setting_team_get_interface_name (setting));
+ break;
+ case PROP_CONFIG:
+ g_value_set_string (value, nm_setting_team_get_config (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_team_class_init (NMSettingTeamClass *setting_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (setting_class);
+ NMSettingClass *parent_class = NM_SETTING_CLASS (setting_class);
+
+ g_type_class_add_private (setting_class, sizeof (NMSettingTeamPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+ parent_class->get_virtual_iface_name = get_virtual_iface_name;
+
+ /* Properties */
+ /**
+ * NMSettingTeam:interface-name:
+ *
+ * The name of the virtual in-kernel team network interface
+ **/
+ g_object_class_install_property
+ (object_class, PROP_INTERFACE_NAME,
+ g_param_spec_string (NM_SETTING_TEAM_INTERFACE_NAME,
+ "InterfaceName",
+ "The name of the virtual in-kernel team network interface",
+ NULL,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+
+ /**
+ * NMSettingTeam:config:
+ *
+ * The JSON configuration for the team network interface. The property
+ * should contain raw JSON configuration data suitable for teamd, because
+ * the value is passed directly to teamd. If not specified, the default
+ * configuration is used. See man teamd.conf for the format details.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CONFIG,
+ g_param_spec_string (NM_SETTING_TEAM_CONFIG,
+ "Config",
+ "JSON configuration for the team network interface. "
+ "The property should contain raw JSON configuration data "
+ "suitable for teamd, because the value is passed directly to "
+ "teamd. If not specified, the default configuration is used. "
+ "See man teamd.conf for the format details.",
+ NULL,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+}
diff --git a/libnm-util/nm-setting-team.h b/libnm-util/nm-setting-team.h
new file mode 100644
index 000000000..978eed07b
--- /dev/null
+++ b/libnm-util/nm-setting-team.h
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * 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.
+ */
+
+#ifndef NM_SETTING_TEAM_H
+#define NM_SETTING_TEAM_H
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_TEAM (nm_setting_team_get_type ())
+#define NM_SETTING_TEAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_TEAM, NMSettingTeam))
+#define NM_SETTING_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_TEAM, NMSettingTeamClass))
+#define NM_IS_SETTING_TEAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_TEAM))
+#define NM_IS_SETTING_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_TEAM))
+#define NM_SETTING_TEAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_TEAM, NMSettingTeamClass))
+
+#define NM_SETTING_TEAM_SETTING_NAME "team"
+
+/**
+ * NMSettingTeamError:
+ * @NM_SETTING_TEAM_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_SETTING_TEAM_ERROR_INVALID_PROPERTY: the property was invalid
+ * @NM_SETTING_TEAM_ERROR_MISSING_PROPERTY: the property was missing and is
+ * required
+ */
+typedef enum {
+ NM_SETTING_TEAM_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
+ NM_SETTING_TEAM_ERROR_INVALID_PROPERTY, /*< nick=InvalidProperty >*/
+ NM_SETTING_TEAM_ERROR_MISSING_PROPERTY, /*< nick=MissingProperty >*/
+} NMSettingTeamError;
+
+#define NM_SETTING_TEAM_ERROR nm_setting_team_error_quark ()
+GQuark nm_setting_team_error_quark (void);
+
+#define NM_SETTING_TEAM_INTERFACE_NAME "interface-name"
+#define NM_SETTING_TEAM_CONFIG "config"
+
+typedef struct {
+ NMSetting parent;
+} NMSettingTeam;
+
+typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ void (*_reserved1) (void);
+ void (*_reserved2) (void);
+ void (*_reserved3) (void);
+ void (*_reserved4) (void);
+} NMSettingTeamClass;
+
+NM_AVAILABLE_IN_0_9_10
+GType nm_setting_team_get_type (void);
+
+NM_AVAILABLE_IN_0_9_10
+NMSetting * nm_setting_team_new (void);
+
+const char * nm_setting_team_get_interface_name (NMSettingTeam *setting);
+const char * nm_setting_team_get_config (NMSettingTeam *setting);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_TEAM_H */
diff --git a/libnm-util/nm-setting-vlan.c b/libnm-util/nm-setting-vlan.c
index da6dd6281..ef91b5f12 100644
--- a/libnm-util/nm-setting-vlan.c
+++ b/libnm-util/nm-setting-vlan.c
@@ -18,12 +18,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2012 Red Hat, Inc.
+ * (C) Copyright 2011 - 2014 Red Hat, Inc.
*/
#include <stdlib.h>
#include <string.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include "nm-setting-vlan.h"
#include "nm-param-spec-specialized.h"
@@ -68,7 +69,7 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_VLAN)
#define NM_SETTING_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_VLAN, NMSettingVlanPrivate))
typedef struct {
- char *iface_name;
+ char *interface_name;
char *parent;
guint32 id;
guint32 flags;
@@ -78,7 +79,7 @@ typedef struct {
enum {
PROP_0,
- PROP_IFACE_NAME,
+ PROP_INTERFACE_NAME,
PROP_PARENT,
PROP_ID,
PROP_FLAGS,
@@ -118,7 +119,7 @@ const char *
nm_setting_vlan_get_interface_name (NMSettingVlan *setting)
{
g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), NULL);
- return NM_SETTING_VLAN_GET_PRIVATE (setting)->iface_name;
+ return NM_SETTING_VLAN_GET_PRIVATE (setting)->interface_name;
}
/**
@@ -221,11 +222,13 @@ get_map (NMSettingVlan *self, NMVlanPriorityMap map)
static void
set_map (NMSettingVlan *self, NMVlanPriorityMap map, GSList *list)
{
- if (map == NM_VLAN_INGRESS_MAP)
+ if (map == NM_VLAN_INGRESS_MAP) {
NM_SETTING_VLAN_GET_PRIVATE (self)->ingress_priority_map = list;
- else if (map == NM_VLAN_EGRESS_MAP)
+ g_object_notify (G_OBJECT (self), NM_SETTING_VLAN_INGRESS_PRIORITY_MAP);
+ } else if (map == NM_VLAN_EGRESS_MAP) {
NM_SETTING_VLAN_GET_PRIVATE (self)->egress_priority_map = list;
- else
+ g_object_notify (G_OBJECT (self), NM_SETTING_VLAN_EGRESS_PRIORITY_MAP);
+ } else
g_assert_not_reached ();
}
@@ -247,7 +250,6 @@ nm_setting_vlan_add_priority_str (NMSettingVlan *setting,
NMVlanPriorityMap map,
const char *str)
{
- NMSettingVlanPrivate *priv = NULL;
GSList *list = NULL, *iter = NULL;
PriorityMap *item = NULL;
@@ -255,7 +257,6 @@ nm_setting_vlan_add_priority_str (NMSettingVlan *setting,
g_return_val_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP, FALSE);
g_return_val_if_fail (str && str[0], FALSE);
- priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
list = get_map (setting, map);
item = priority_map_new_from_str (map, str);
@@ -268,6 +269,10 @@ nm_setting_vlan_add_priority_str (NMSettingVlan *setting,
if (p->from == item->from) {
p->to = item->to;
g_free (item);
+ if (map == NM_VLAN_INGRESS_MAP)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VLAN_INGRESS_PRIORITY_MAP);
+ else
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VLAN_EGRESS_PRIORITY_MAP);
return TRUE;
}
}
@@ -372,6 +377,10 @@ nm_setting_vlan_add_priority (NMSettingVlan *setting,
item = iter->data;
if (item->from == from) {
item->to = to;
+ if (map == NM_VLAN_INGRESS_MAP)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VLAN_INGRESS_PRIORITY_MAP);
+ else
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VLAN_EGRESS_PRIORITY_MAP);
return TRUE;
}
}
@@ -413,6 +422,79 @@ nm_setting_vlan_remove_priority (NMSettingVlan *setting,
}
/**
+ * nm_setting_vlan_remove_priority_by_value:
+ * @setting: the #NMSettingVlan
+ * @map: the type of priority map
+ * @from: the priority to map to @to
+ * @to: the priority to map @from to
+ *
+ * Removes the priority map @form:@to from the #NMSettingVlan:ingress_priority_map
+ * or #NMSettingVlan:egress_priority_map (according to @map argument)
+ * properties.
+ *
+ * Returns: %TRUE if the priority mapping was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ */
+gboolean
+nm_setting_vlan_remove_priority_by_value (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 from,
+ guint32 to)
+{
+ GSList *list = NULL, *iter = NULL;
+ PriorityMap *item;
+
+ g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), FALSE);
+ g_return_val_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP, FALSE);
+
+ list = get_map (setting, map);
+ for (iter = list; iter; iter = g_slist_next (iter)) {
+ item = iter->data;
+ if (item->from == from && item->to == to) {
+ priority_map_free ((PriorityMap *) (iter->data));
+ set_map (setting, map, g_slist_delete_link (list, iter));
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * nm_setting_vlan_remove_priority_str_by_value:
+ * @setting: the #NMSettingVlan
+ * @map: the type of priority map
+ * @str: the string which contains a priority map, like "3:7"
+ *
+ * Removes the priority map @str from the #NMSettingVlan:ingress_priority_map
+ * or #NMSettingVlan:egress_priority_map (according to @map argument)
+ * properties.
+ *
+ * Returns: %TRUE if the priority mapping was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ */
+gboolean
+nm_setting_vlan_remove_priority_str_by_value (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ const char *str)
+{
+ PriorityMap *item;
+ gboolean found;
+
+ g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), FALSE);
+ g_return_val_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP, FALSE);
+
+ item = priority_map_new_from_str (map, str);
+ if (!item)
+ return FALSE;
+
+ found = nm_setting_vlan_remove_priority_by_value (setting, map, item->from, item->to);
+ g_free (item);
+ return found;
+}
+
+/**
* nm_setting_vlan_clear_priorities:
* @setting: the #NMSettingVlan
* @map: the type of priority map
@@ -429,7 +511,7 @@ nm_setting_vlan_clear_priorities (NMSettingVlan *setting, NMVlanPriorityMap map)
g_return_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP);
list = get_map (setting, map);
- nm_utils_slist_free (list, g_free);
+ g_slist_free_full (list, g_free);
set_map (setting, map, NULL);
}
@@ -438,7 +520,6 @@ nm_setting_vlan_clear_priorities (NMSettingVlan *setting, NMVlanPriorityMap map)
static void
nm_setting_vlan_init (NMSettingVlan *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_VLAN_SETTING_NAME, NULL);
}
static gboolean
@@ -456,15 +537,17 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
s_wired = iter->data;
}
- /* If iface_name is specified, it must be a valid interface name. We
+ /* If interface_name is specified, it must be a valid interface name. We
* don't check that it matches parent and/or id, because we allowing
* renaming vlans to arbitrary names.
*/
- if (priv->iface_name && !nm_utils_iface_valid_name (priv->iface_name)) {
+ if (priv->interface_name && !nm_utils_iface_valid_name (priv->interface_name)) {
g_set_error (error,
NM_SETTING_VLAN_ERROR,
NM_SETTING_VLAN_ERROR_INVALID_PROPERTY,
- NM_SETTING_VLAN_INTERFACE_NAME);
+ _("'%s' is not a valid interface name"),
+ priv->interface_name);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_INTERFACE_NAME);
return FALSE;
}
@@ -484,7 +567,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_VLAN_ERROR,
NM_SETTING_VLAN_ERROR_INVALID_PARENT,
- NM_SETTING_CONNECTION_MASTER);
+ _("'%s' value doesn't match '%s=%s'"),
+ priv->parent, NM_SETTING_CONNECTION_MASTER, master);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_PARENT);
return FALSE;
}
}
@@ -493,7 +578,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_VLAN_ERROR,
NM_SETTING_VLAN_ERROR_INVALID_PROPERTY,
- NM_SETTING_VLAN_PARENT);
+ _("'%s' is neither an UUID nor an interface name"),
+ priv->parent);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_PARENT);
return FALSE;
}
} else {
@@ -504,7 +591,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_VLAN_ERROR,
NM_SETTING_VLAN_ERROR_MISSING_PROPERTY,
- NM_SETTING_VLAN_PARENT);
+ _("property is not specified and neither is '%s:%s'"),
+ NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_PARENT);
return FALSE;
}
}
@@ -512,10 +601,11 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
if (priv->flags & ~(NM_VLAN_FLAG_REORDER_HEADERS |
NM_VLAN_FLAG_GVRP |
NM_VLAN_FLAG_LOOSE_BINDING)) {
- g_set_error (error,
- NM_SETTING_VLAN_ERROR,
- NM_SETTING_VLAN_ERROR_INVALID_PROPERTY,
- NM_SETTING_VLAN_FLAGS);
+ g_set_error_literal (error,
+ NM_SETTING_VLAN_ERROR,
+ NM_SETTING_VLAN_ERROR_INVALID_PROPERTY,
+ _("flags are invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_FLAGS);
return FALSE;
}
@@ -551,9 +641,9 @@ set_property (GObject *object, guint prop_id,
NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
switch (prop_id) {
- case PROP_IFACE_NAME:
- g_free (priv->iface_name);
- priv->iface_name = g_value_dup_string (value);
+ case PROP_INTERFACE_NAME:
+ g_free (priv->interface_name);
+ priv->interface_name = g_value_dup_string (value);
break;
case PROP_PARENT:
g_free (priv->parent);
@@ -566,12 +656,12 @@ set_property (GObject *object, guint prop_id,
priv->flags = g_value_get_uint (value);
break;
case PROP_INGRESS_PRIORITY_MAP:
- nm_utils_slist_free (priv->ingress_priority_map, g_free);
+ g_slist_free_full (priv->ingress_priority_map, g_free);
priv->ingress_priority_map =
priority_stringlist_to_maplist (NM_VLAN_INGRESS_MAP, g_value_get_boxed (value));
break;
case PROP_EGRESS_PRIORITY_MAP:
- nm_utils_slist_free (priv->egress_priority_map, g_free);
+ g_slist_free_full (priv->egress_priority_map, g_free);
priv->egress_priority_map =
priority_stringlist_to_maplist (NM_VLAN_EGRESS_MAP, g_value_get_boxed (value));
break;
@@ -602,8 +692,8 @@ get_property (GObject *object, guint prop_id,
NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
switch (prop_id) {
- case PROP_IFACE_NAME:
- g_value_set_string (value, priv->iface_name);
+ case PROP_INTERFACE_NAME:
+ g_value_set_string (value, priv->interface_name);
break;
case PROP_PARENT:
g_value_set_string (value, priv->parent);
@@ -632,10 +722,10 @@ finalize (GObject *object)
NMSettingVlan *setting = NM_SETTING_VLAN (object);
NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
- g_free (priv->iface_name);
+ g_free (priv->interface_name);
g_free (priv->parent);
- nm_utils_slist_free (priv->ingress_priority_map, g_free);
- nm_utils_slist_free (priv->egress_priority_map, g_free);
+ g_slist_free_full (priv->ingress_priority_map, g_free);
+ g_slist_free_full (priv->egress_priority_map, g_free);
G_OBJECT_CLASS (nm_setting_vlan_parent_class)->finalize (object);
}
@@ -662,12 +752,12 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
*
* If given, specifies the kernel name of the VLAN interface. If not given,
* a default name will be constructed from the interface described by the
- * parent interface and the #NMSettingVlan:id , ex 'eth2.1'. The parent
- * interface may be given by the #NMSettingVlan:parent property or by a
- * hardware address property, eg #NMSettingWired:mac-address.
+ * parent interface and the #NMSettingVlan:id property, eg "eth2.1". The
+ * parent interface may be given by the #NMSettingVlan:parent property or by
+ * the #NMSettingWired:mac-address property of an #NMSettingWired setting.
**/
g_object_class_install_property
- (object_class, PROP_IFACE_NAME,
+ (object_class, PROP_INTERFACE_NAME,
g_param_spec_string (NM_SETTING_VLAN_INTERFACE_NAME,
"InterfaceName",
"If given, specifies the kernel name of the VLAN "
@@ -675,19 +765,18 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
"constructed from the interface described by the "
"parent interface and the 'id' property, ex "
"'eth2.1'. The parent interface may be given by "
- "the 'parent' property or by a hardware address "
- "property, eg the 'wired' settings' 'mac-address' "
- "property.",
+ "the 'parent' property or by the 'mac-address' "
+ "property of a 'wired' setting.",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingVlan:parent:
*
* If given, specifies the parent interface name or parent connection UUID
* from which this VLAN interface should be created. If this property is
- * not specified, the connection must contain a hardware address in a
- * hardware-specific setting, like #NMSettingWired:mac-address.
+ * not specified, the connection must contain an #NMSettingWired setting
+ * with a #NMSettingWired:mac-address property.
**/
g_object_class_install_property
(object_class, PROP_PARENT,
@@ -697,16 +786,15 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
"parent connection UUID from which this VLAN "
"interface should be created. If this property is "
"not specified, the connection must contain a "
- "hardware address in a hardware-specific setting, "
- "like the 'wired' settings' 'mac-address' property.",
+ "'wired' setting with a 'mac-address' property.",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingVlan:id:
*
- * The VLAN identifier the interface created by this connection should be
- * assigned.
+ * The VLAN identifier that the interface created by this connection should
+ * be assigned.
**/
g_object_class_install_property
(object_class, PROP_ID,
@@ -715,13 +803,16 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
"The VLAN indentifier the interface created by "
"this connection should be assigned.",
0, 4095, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingVlan:flags:
*
- * One or more of %NMVlanFlags which control the behavior and features of
- * the VLAN interface.
+ * One or more flags which control the behavior and features of the VLAN
+ * interface. Flags include %NM_VLAN_FLAG_REORDER_HEADERS (reordering of
+ * output packet headers), %NM_VLAN_FLAG_GVRP (use of the GVRP protocol),
+ * and %NM_VLAN_FLAG_LOOSE_BINDING (loose binding of the interface to its
+ * master device's operating state).
**/
g_object_class_install_property
(object_class, PROP_FLAGS,
@@ -734,14 +825,14 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
"of the interface to its master device's operating "
"state (0x04).",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingVlan:ingress-priority-map:
*
* For incoming packets, a list of mappings from 802.1p priorities to Linux
- * SKB priorities. The mapping is given in the format 'from:to' where both
- * 'from' and 'to' are unsigned integers, ie '7:3'.
+ * SKB priorities. The mapping is given in the format "from:to" where both
+ * "from" and "to" are unsigned integers, ie "7:3".
**/
g_object_class_install_property
(object_class, PROP_INGRESS_PRIORITY_MAP,
@@ -753,14 +844,14 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
"format 'from:to' where both 'from' and "
"'to' are unsigned integers, ie '7:3'.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingVlan:egress-priority-map:
*
* For outgoing packets, a list of mappings from Linux SKB priorities to
- * 802.1p priorities. The mapping is given in the format 'from:to'
- * where both 'from' and 'to' are unsigned integers, ie '7:3'.
+ * 802.1p priorities. The mapping is given in the format "from:to" where
+ * both "from" and "to" are unsigned integers, ie "7:3".
**/
g_object_class_install_property
(object_class, PROP_EGRESS_PRIORITY_MAP,
@@ -772,5 +863,5 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
"format 'from:to' where both 'from' and "
"'to' are unsigned integers, ie '7:3'.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
}
diff --git a/libnm-util/nm-setting-vlan.h b/libnm-util/nm-setting-vlan.h
index 019c6da07..ca77f6fed 100644
--- a/libnm-util/nm-setting-vlan.h
+++ b/libnm-util/nm-setting-vlan.h
@@ -18,7 +18,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 Red Hat, Inc.
+ * (C) Copyright 2011 - 2014 Red Hat, Inc.
*/
#ifndef NM_SETTING_VLAN_H
@@ -94,7 +94,7 @@ typedef enum {
/**
* NMVlanFlags:
* @NM_VLAN_FLAG_REORDER_HEADERS: indicates that this interface should reorder
- * outgoing packet headers to look more like a non-VLAN ethernet interface
+ * outgoing packet headers to look more like a non-VLAN Ethernet interface
* @NM_VLAN_FLAG_GVRP: indicates that this interface should use GVRP to register
* itself with it's switch
* @NM_VLAN_FLAG_LOOSE_BINDING: indicates that this interface's operating
@@ -136,6 +136,17 @@ void nm_setting_vlan_remove_priority (NMSettingVlan *setting,
NMVlanPriorityMap map,
guint32 idx);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_vlan_remove_priority_by_value (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 from,
+ guint32 to);
+
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_vlan_remove_priority_str_by_value (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ const char *str);
+
void nm_setting_vlan_clear_priorities (NMSettingVlan *setting, NMVlanPriorityMap map);
gboolean nm_setting_vlan_add_priority_str (NMSettingVlan *setting,
diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c
index 0acd9a52d..4b479b8f3 100644
--- a/libnm-util/nm-setting-vpn.c
+++ b/libnm-util/nm-setting-vpn.c
@@ -18,7 +18,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -26,6 +26,8 @@
#include <errno.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-vpn.h"
#include "nm-param-spec-specialized.h"
#include "nm-utils.h"
@@ -194,6 +196,7 @@ nm_setting_vpn_add_data_item (NMSettingVPN *setting,
g_hash_table_insert (NM_SETTING_VPN_GET_PRIVATE (setting)->data,
g_strdup (key), g_strdup (item));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_DATA);
}
/**
@@ -221,13 +224,21 @@ nm_setting_vpn_get_data_item (NMSettingVPN *setting, const char *key)
*
* Deletes a key/value relationship previously established by
* nm_setting_vpn_add_data_item().
+ *
+ * Returns: %TRUE if the data item was found and removed from the internal list,
+ * %FALSE if it was not.
**/
-void
+gboolean
nm_setting_vpn_remove_data_item (NMSettingVPN *setting, const char *key)
{
- g_return_if_fail (NM_IS_SETTING_VPN (setting));
+ gboolean found;
- g_hash_table_remove (NM_SETTING_VPN_GET_PRIVATE (setting)->data, key);
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), FALSE);
+
+ found = g_hash_table_remove (NM_SETTING_VPN_GET_PRIVATE (setting)->data, key);
+ if (found)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_DATA);
+ return found;
}
static void
@@ -256,8 +267,7 @@ foreach_item_helper (GHashTable *hash,
func (siter->data, value, user_data);
}
- g_slist_foreach (copied, (GFunc) g_free, NULL);
- g_slist_free (copied);
+ g_slist_free_full (copied, g_free);
}
/**
@@ -275,7 +285,6 @@ nm_setting_vpn_foreach_data_item (NMSettingVPN *setting,
NMVPNIterFunc func,
gpointer user_data)
{
- g_return_if_fail (setting != NULL);
g_return_if_fail (NM_IS_SETTING_VPN (setting));
foreach_item_helper (NM_SETTING_VPN_GET_PRIVATE (setting)->data, func, user_data);
@@ -319,6 +328,7 @@ nm_setting_vpn_add_secret (NMSettingVPN *setting,
g_hash_table_insert (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets,
g_strdup (key), g_strdup (secret));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
}
/**
@@ -346,13 +356,21 @@ nm_setting_vpn_get_secret (NMSettingVPN *setting, const char *key)
*
* Deletes a key/value relationship previously established by
* nm_setting_vpn_add_secret().
+ *
+ * Returns: %TRUE if the secret was found and removed from the internal list,
+ * %FALSE if it was not.
**/
-void
+gboolean
nm_setting_vpn_remove_secret (NMSettingVPN *setting, const char *key)
{
- g_return_if_fail (NM_IS_SETTING_VPN (setting));
+ gboolean found;
- g_hash_table_remove (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, key);
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), FALSE);
+
+ found = g_hash_table_remove (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, key);
+ if (found)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
+ return found;
}
/**
@@ -370,7 +388,6 @@ nm_setting_vpn_foreach_secret (NMSettingVPN *setting,
NMVPNIterFunc func,
gpointer user_data)
{
- g_return_if_fail (setting != NULL);
g_return_if_fail (NM_IS_SETTING_VPN (setting));
foreach_item_helper (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, func, user_data);
@@ -382,34 +399,37 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
if (!priv->service_type) {
- g_set_error (error,
- NM_SETTING_VPN_ERROR,
- NM_SETTING_VPN_ERROR_MISSING_PROPERTY,
- NM_SETTING_VPN_SERVICE_TYPE);
+ g_set_error_literal (error,
+ NM_SETTING_VPN_ERROR,
+ NM_SETTING_VPN_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, NM_SETTING_VPN_SERVICE_TYPE);
return FALSE;
}
if (!strlen (priv->service_type)) {
- g_set_error (error,
- NM_SETTING_VPN_ERROR,
- NM_SETTING_VPN_ERROR_INVALID_PROPERTY,
- NM_SETTING_VPN_SERVICE_TYPE);
+ g_set_error_literal (error,
+ NM_SETTING_VPN_ERROR,
+ NM_SETTING_VPN_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, NM_SETTING_VPN_SERVICE_TYPE);
return FALSE;
}
/* default username can be NULL, but can't be zero-length */
if (priv->user_name && !strlen (priv->user_name)) {
- g_set_error (error,
- NM_SETTING_VPN_ERROR,
- NM_SETTING_VPN_ERROR_INVALID_PROPERTY,
- NM_SETTING_VPN_USER_NAME);
+ g_set_error_literal (error,
+ NM_SETTING_VPN_ERROR,
+ NM_SETTING_VPN_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, NM_SETTING_VPN_USER_NAME);
return FALSE;
}
return TRUE;
}
-static gboolean
+static NMSettingUpdateSecretResult
update_secret_string (NMSetting *setting,
const char *key,
const char *value,
@@ -417,21 +437,24 @@ update_secret_string (NMSetting *setting,
{
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
- g_return_val_if_fail (key != NULL, FALSE);
- g_return_val_if_fail (value != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
+ g_return_val_if_fail (value != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
if (!value || !strlen (value)) {
g_set_error (error, NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
"Secret %s was empty", key);
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
+ if (g_strcmp0 (g_hash_table_lookup (priv->secrets, key), value) == 0)
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
+
g_hash_table_insert (priv->secrets, g_strdup (key), g_strdup (value));
- return TRUE;
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
}
-static gboolean
+static NMSettingUpdateSecretResult
update_secret_hash (NMSetting *setting,
GHashTable *secrets,
GError **error)
@@ -439,8 +462,9 @@ update_secret_hash (NMSetting *setting,
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
GHashTableIter iter;
const char *name, *value;
+ NMSettingUpdateSecretResult result = NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
- g_return_val_if_fail (secrets != NULL, FALSE);
+ g_return_val_if_fail (secrets != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
/* Make sure the items are valid */
g_hash_table_iter_init (&iter, secrets);
@@ -449,14 +473,14 @@ update_secret_hash (NMSetting *setting,
g_set_error_literal (error, NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
"Secret name was empty");
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
if (!value || !strlen (value)) {
g_set_error (error, NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
"Secret %s value was empty", name);
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
}
@@ -472,19 +496,23 @@ update_secret_hash (NMSetting *setting,
continue;
}
+ if (g_strcmp0 (g_hash_table_lookup (priv->secrets, name), value) == 0)
+ continue;
+
g_hash_table_insert (priv->secrets, g_strdup (name), g_strdup (value));
+ result = NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
}
- return TRUE;
+ return result;
}
-static gboolean
+static int
update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **error)
{
- gboolean success = FALSE;
+ NMSettingUpdateSecretResult success = NM_SETTING_UPDATE_SECRET_ERROR;
- g_return_val_if_fail (key != NULL, FALSE);
- g_return_val_if_fail (value != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
+ g_return_val_if_fail (value != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
if (G_VALUE_HOLDS_STRING (value)) {
/* Passing the string properties individually isn't correct, and won't
@@ -502,6 +530,9 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
} else
g_set_error_literal (error, NM_SETTING_ERROR, NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH, key);
+ if (success == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
+
return success;
}
@@ -553,6 +584,7 @@ set_secret_flags (NMSetting *setting,
g_hash_table_insert (NM_SETTING_VPN_GET_PRIVATE (setting)->data,
g_strdup_printf ("%s-flags", secret_name),
g_strdup_printf ("%u", flags));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
return TRUE;
}
@@ -625,7 +657,7 @@ compare_property (NMSetting *setting,
return same;
}
-static void
+static gboolean
clear_secrets_with_flags (NMSetting *setting,
GParamSpec *pspec,
NMSettingClearSecretsWithFlagsFn func,
@@ -634,9 +666,10 @@ clear_secrets_with_flags (NMSetting *setting,
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
GHashTableIter iter;
const char *secret;
+ gboolean changed = TRUE;
if (priv->secrets == NULL)
- return;
+ return FALSE;
/* Iterate through secrets hash and check each entry */
g_hash_table_iter_init (&iter, priv->secrets);
@@ -644,9 +677,16 @@ clear_secrets_with_flags (NMSetting *setting,
NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
nm_setting_get_secret_flags (setting, secret, &flags, NULL);
- if (func (setting, pspec->name, flags, user_data) == TRUE)
+ if (func (setting, pspec->name, flags, user_data) == TRUE) {
g_hash_table_iter_remove (&iter);
+ changed = TRUE;
+ }
}
+
+ if (changed)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
+
+ return changed;
}
static void
@@ -664,7 +704,6 @@ nm_setting_vpn_init (NMSettingVPN *setting)
{
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_VPN_SETTING_NAME, NULL);
priv->data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
priv->secrets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_one_secret);
}
@@ -777,8 +816,8 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
/**
* NMSettingVPN:service-type:
*
- * D-Bus service name of the VPN plugin that this setting uses to connect
- * to its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc
+ * D-Bus service name of the VPN plugin that this setting uses to connect to
+ * its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc
* plugin.
**/
g_object_class_install_property
@@ -790,14 +829,14 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
"org.freedesktop.NetworkManager.vpnc for the vpnc "
"plugin.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingVPN:user-name:
*
* If the VPN connection requires a user name for authentication, that name
- * should be provided here. If the connection is available to more than
- * one user, and the VPN requires each user to supply a different name, then
+ * should be provided here. If the connection is available to more than one
+ * user, and the VPN requires each user to supply a different name, then
* leave this property empty. If this property is empty, NetworkManager
* will automatically supply the username of the user which requested the
* VPN connection.
@@ -815,13 +854,13 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
"automatically supply the username of the user which "
"requested the VPN connection.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingVPN:data:
*
- * Dictionary of key/value pairs of VPN plugin specific data. Both keys
- * and values must be strings.
+ * Dictionary of key/value pairs of VPN plugin specific data. Both keys and
+ * values must be strings.
**/
g_object_class_install_property
(object_class, PROP_DATA,
@@ -831,7 +870,7 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
"specific data. Both keys and values must be "
"strings.",
DBUS_TYPE_G_MAP_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingVPN:secrets:
@@ -847,6 +886,6 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
"specific secrets like passwords or private keys."
" Both keys and values must be strings.",
DBUS_TYPE_G_MAP_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
}
diff --git a/libnm-util/nm-setting-vpn.h b/libnm-util/nm-setting-vpn.h
index dfd98105f..259384bfd 100644
--- a/libnm-util/nm-setting-vpn.h
+++ b/libnm-util/nm-setting-vpn.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2013 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -95,7 +95,7 @@ void nm_setting_vpn_add_data_item (NMSettingVPN *setting,
const char *item);
const char * nm_setting_vpn_get_data_item (NMSettingVPN *setting,
const char *key);
-void nm_setting_vpn_remove_data_item (NMSettingVPN *setting,
+gboolean nm_setting_vpn_remove_data_item (NMSettingVPN *setting,
const char *key);
void nm_setting_vpn_foreach_data_item (NMSettingVPN *setting,
NMVPNIterFunc func,
@@ -107,7 +107,7 @@ void nm_setting_vpn_add_secret (NMSettingVPN *setting,
const char *secret);
const char * nm_setting_vpn_get_secret (NMSettingVPN *setting,
const char *key);
-void nm_setting_vpn_remove_secret (NMSettingVPN *setting,
+gboolean nm_setting_vpn_remove_secret (NMSettingVPN *setting,
const char *key);
void nm_setting_vpn_foreach_secret (NMSettingVPN *setting,
NMVPNIterFunc func,
diff --git a/libnm-util/nm-setting-wimax.c b/libnm-util/nm-setting-wimax.c
index b4a0d418f..8bf16b3de 100644
--- a/libnm-util/nm-setting-wimax.c
+++ b/libnm-util/nm-setting-wimax.c
@@ -16,13 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 Red Hat, Inc.
+ * (C) Copyright 2011 - 2013 Red Hat, Inc.
* (C) Copyright 2009 Novell, Inc.
*/
#include <string.h>
#include <net/ethernet.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include "nm-setting-wimax.h"
#include "nm-param-spec-specialized.h"
@@ -130,28 +131,29 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (setting);
if (!priv->network_name) {
- g_set_error (error,
- NM_SETTING_WIMAX_ERROR,
- NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY,
- NM_SETTING_WIMAX_NETWORK_NAME);
-
+ g_set_error_literal (error,
+ NM_SETTING_WIMAX_ERROR,
+ NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIMAX_SETTING_NAME, NM_SETTING_WIMAX_NETWORK_NAME);
return FALSE;
}
if (!strlen (priv->network_name)) {
- g_set_error (error,
- NM_SETTING_WIMAX_ERROR,
- NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIMAX_NETWORK_NAME);
-
+ g_set_error_literal (error,
+ NM_SETTING_WIMAX_ERROR,
+ NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIMAX_SETTING_NAME, NM_SETTING_WIMAX_NETWORK_NAME);
return FALSE;
}
if (priv->mac_address && priv->mac_address->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_WIMAX_ERROR,
- NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIMAX_MAC_ADDRESS);
+ g_set_error_literal (error,
+ NM_SETTING_WIMAX_ERROR,
+ NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIMAX_SETTING_NAME, NM_SETTING_WIMAX_MAC_ADDRESS);
return FALSE;
}
@@ -161,7 +163,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
static void
nm_setting_wimax_init (NMSettingWimax *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_WIMAX_SETTING_NAME, NULL);
}
static void
@@ -245,14 +246,14 @@ nm_setting_wimax_class_init (NMSettingWimaxClass *setting_class)
"Network Service Provider (NSP) name of the WiMAX "
"network this connection should use.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWimax:mac-address:
*
- * If specified, this connection will only apply to the WiMAX device
- * whose MAC address matches. This property does not change the MAC address
- * of the device (known as MAC spoofing).
+ * If specified, this connection will only apply to the WiMAX device whose
+ * MAC address matches. This property does not change the MAC address of the
+ * device (known as MAC spoofing).
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
@@ -263,5 +264,5 @@ nm_setting_wimax_class_init (NMSettingWimaxClass *setting_class)
"This property does not change the MAC address "
"of the device (known as MAC spoofing).",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
}
diff --git a/libnm-util/nm-setting-wired.c b/libnm-util/nm-setting-wired.c
index 6d1afc672..a956a52f0 100644
--- a/libnm-util/nm-setting-wired.c
+++ b/libnm-util/nm-setting-wired.c
@@ -19,14 +19,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
#include <net/ethernet.h>
-#include <dbus/dbus-glib.h>
#include <netinet/ether.h>
+#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include "nm-setting-wired.h"
#include "nm-param-spec-specialized.h"
@@ -225,6 +226,162 @@ nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting)
}
/**
+ * nm_setting_wired_get_num_mac_blacklist_items:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the number of blacklisted MAC addresses
+ *
+ * Since: 0.9.10
+ **/
+guint32
+nm_setting_wired_get_num_mac_blacklist_items (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0);
+
+ return g_slist_length (NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist);
+}
+
+/**
+ * nm_setting_wired_get_mac_blacklist_item:
+ * @setting: the #NMSettingWired
+ * @idx: the zero-based index of the MAC address entry
+ *
+ * Returns: the blacklisted MAC address string (hex-digits-and-colons notation)
+ * at index @idx
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_setting_wired_get_mac_blacklist_item (NMSettingWired *setting, guint32 idx)
+{
+ NMSettingWiredPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ g_return_val_if_fail (idx <= g_slist_length (priv->mac_address_blacklist), NULL);
+
+ return (const char *) g_slist_nth_data (priv->mac_address_blacklist, idx);
+}
+
+/**
+ * nm_setting_wired_add_mac_blacklist_item:
+ * @setting: the #NMSettingWired
+ * @mac: the MAC address string (hex-digits-and-colons notation) to blacklist
+ *
+ * Adds a new MAC address to the #NMSettingWired:mac-address-blacklist property.
+ *
+ * Returns: %TRUE if the MAC address was added; %FALSE if the MAC address
+ * is invalid or was already present
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_wired_add_mac_blacklist_item (NMSettingWired *setting, const char *mac)
+{
+ NMSettingWiredPrivate *priv;
+ GSList *iter;
+ guint8 buf[32];
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf))
+ return FALSE;
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ for (iter = priv->mac_address_blacklist; iter; iter = g_slist_next (iter)) {
+ if (!strcasecmp (mac, (char *) iter->data))
+ return FALSE;
+ }
+
+ priv->mac_address_blacklist = g_slist_append (priv->mac_address_blacklist,
+ g_ascii_strup (mac, -1));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+ return TRUE;
+}
+
+/**
+ * nm_setting_wired_remove_mac_blacklist_item:
+ * @setting: the #NMSettingWired
+ * @idx: index number of the MAC address
+ *
+ * Removes the MAC address at index @idx from the blacklist.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_wired_remove_mac_blacklist_item (NMSettingWired *setting, guint32 idx)
+{
+ NMSettingWiredPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_WIRED (setting));
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->mac_address_blacklist, idx);
+ g_return_if_fail (elt != NULL);
+
+ g_free (elt->data);
+ priv->mac_address_blacklist = g_slist_delete_link (priv->mac_address_blacklist, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+}
+
+/**
+ * nm_setting_wired_remove_mac_blacklist_item_by_value:
+ * @setting: the #NMSettingWired
+ * @mac: the MAC address string (hex-digits-and-colons notation) to remove from
+ * the blacklist
+ *
+ * Removes the MAC address @mac from the blacklist.
+ *
+ * Returns: %TRUE if the MAC address was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_wired_remove_mac_blacklist_item_by_value (NMSettingWired *setting, const char *mac)
+{
+ NMSettingWiredPrivate *priv;
+ GSList *iter;
+ guint8 buf[32];
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf))
+ return FALSE;
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ for (iter = priv->mac_address_blacklist; iter; iter = g_slist_next (iter)) {
+ if (!strcasecmp (mac, (char *) iter->data)) {
+ priv->mac_address_blacklist = g_slist_delete_link (priv->mac_address_blacklist, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * nm_setting_wired_clear_mac_blacklist_items:
+ * @setting: the #NMSettingWired
+ *
+ * Removes all blacklisted MAC addresses.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_wired_clear_mac_blacklist_items (NMSettingWired *setting)
+{
+ g_return_if_fail (NM_IS_SETTING_WIRED (setting));
+
+ g_slist_free_full (NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist, g_free);
+ NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+}
+
+/**
* nm_setting_wired_get_mtu:
* @setting: the #NMSettingWired
*
@@ -364,7 +521,7 @@ nm_setting_wired_get_s390_option_by_key (NMSettingWired *setting,
}
/**
- * nm_setting_wired_add_s390_options:
+ * nm_setting_wired_add_s390_option:
* @setting: the #NMSettingWired
* @key: key name for the option
* @value: value for the option
@@ -377,9 +534,10 @@ nm_setting_wired_get_s390_option_by_key (NMSettingWired *setting,
* Returns: %TRUE if the option was valid and was added to the internal option
* list, %FALSE if it was not.
**/
-gboolean nm_setting_wired_add_s390_option (NMSettingWired *setting,
- const char *key,
- const char *value)
+gboolean
+nm_setting_wired_add_s390_option (NMSettingWired *setting,
+ const char *key,
+ const char *value)
{
size_t value_len;
@@ -395,11 +553,12 @@ gboolean nm_setting_wired_add_s390_option (NMSettingWired *setting,
g_hash_table_insert (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options,
g_strdup (key),
g_strdup (value));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_S390_OPTIONS);
return TRUE;
}
/**
- * nm_setting_wired_remove_s390_options:
+ * nm_setting_wired_remove_s390_option:
* @setting: the #NMSettingWired
* @key: key name for the option to remove
*
@@ -413,11 +572,32 @@ gboolean
nm_setting_wired_remove_s390_option (NMSettingWired *setting,
const char *key)
{
+ gboolean found;
+
g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
g_return_val_if_fail (key != NULL, FALSE);
g_return_val_if_fail (strlen (key), FALSE);
- return g_hash_table_remove (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, key);
+ found = g_hash_table_remove (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, key);
+ if (found)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_S390_OPTIONS);
+ return found;
+}
+
+/**
+ * nm_setting_wired_get_valid_s390_options:
+ * @setting: the #NMSettingWired
+ *
+ * Returns a list of valid s390 options.
+ *
+ * Returns: (transfer none): a %NULL-terminated array of strings of valid s390 options.
+ *
+ * Since: 0.9.10
+ **/
+const char **
+nm_setting_wired_get_valid_s390_options (NMSettingWired *setting)
+{
+ return valid_s390_opts;
}
static gboolean
@@ -435,7 +615,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRED_ERROR,
NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_PORT);
+ _("'%s' is not a valid Ethernet port value"),
+ priv->port);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_PORT);
return FALSE;
}
@@ -443,15 +625,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRED_ERROR,
NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_DUPLEX);
+ _("'%s' is not a valid duplex value"),
+ priv->duplex);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_DUPLEX);
return FALSE;
}
if (priv->device_mac_address && priv->device_mac_address->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_WIRED_ERROR,
- NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_MAC_ADDRESS);
+ g_set_error_literal (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ _("is not a valid MAC address"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS);
return FALSE;
}
@@ -463,25 +648,29 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRED_ERROR,
NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+ _("'%s' is not a valid MAC address"),
+ (const char *) mac_blacklist_iter->data);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
return FALSE;
}
}
if ( priv->s390_subchannels
&& !(priv->s390_subchannels->len == 3 || priv->s390_subchannels->len == 2)) {
- g_set_error (error,
- NM_SETTING_WIRED_ERROR,
- NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_S390_SUBCHANNELS);
+ g_set_error_literal (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_SUBCHANNELS);
return FALSE;
}
if (priv->s390_nettype && !_nm_utils_string_in_list (priv->s390_nettype, valid_nettype)) {
- g_set_error (error,
- NM_SETTING_WIRED_ERROR,
- NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_S390_NETTYPE);
+ g_set_error_literal (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_NETTYPE);
return FALSE;
}
@@ -491,18 +680,21 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|| !strlen (value)
|| (strlen (value) > 200)) {
g_set_error (error,
- NM_SETTING_WIRED_ERROR,
- NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_S390_OPTIONS);
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ _("invalid '%s' or its value '%s'"),
+ key, value);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_OPTIONS);
return FALSE;
}
}
if (priv->cloned_mac_address && priv->cloned_mac_address->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_WIRED_ERROR,
- NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_CLONED_MAC_ADDRESS);
+ g_set_error_literal (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ _("is not a valid MAC address"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_CLONED_MAC_ADDRESS);
return FALSE;
}
@@ -514,7 +706,6 @@ nm_setting_wired_init (NMSettingWired *setting)
{
NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_WIRED_SETTING_NAME, NULL);
priv->s390_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
}
@@ -535,10 +726,10 @@ finalize (GObject *object)
if (priv->cloned_mac_address)
g_byte_array_free (priv->cloned_mac_address, TRUE);
- nm_utils_slist_free (priv->mac_address_blacklist, g_free);
+ g_slist_free_full (priv->mac_address_blacklist, g_free);
if (priv->s390_subchannels) {
- g_ptr_array_foreach (priv->s390_subchannels, (GFunc) g_free, NULL);
+ g_ptr_array_set_free_func (priv->s390_subchannels, g_free);
g_ptr_array_free (priv->s390_subchannels, TRUE);
}
@@ -584,7 +775,7 @@ set_property (GObject *object, guint prop_id,
priv->cloned_mac_address = g_value_dup_boxed (value);
break;
case PROP_MAC_ADDRESS_BLACKLIST:
- nm_utils_slist_free (priv->mac_address_blacklist, g_free);
+ g_slist_free_full (priv->mac_address_blacklist, g_free);
priv->mac_address_blacklist = g_value_dup_boxed (value);
break;
case PROP_MTU:
@@ -592,7 +783,7 @@ set_property (GObject *object, guint prop_id,
break;
case PROP_S390_SUBCHANNELS:
if (priv->s390_subchannels) {
- g_ptr_array_foreach (priv->s390_subchannels, (GFunc) g_free, NULL);
+ g_ptr_array_set_free_func (priv->s390_subchannels, g_free);
g_ptr_array_free (priv->s390_subchannels, TRUE);
}
priv->s390_subchannels = g_value_dup_boxed (value);
@@ -680,8 +871,8 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
* NMSettingWired:port:
*
* Specific port type to use if multiple the device supports multiple
- * attachment methods. One of 'tp' (Twisted Pair), 'aui' (Attachment Unit
- * Interface), 'bnc' (Thin Ethernet) or 'mii' (Media Independent Interface.
+ * attachment methods. One of "tp" (Twisted Pair), "aui" (Attachment Unit
+ * Interface), "bnc" (Thin Ethernet) or "mii" (Media Independent Interface.
* If the device supports only one port type, this setting is ignored.
**/
g_object_class_install_property
@@ -695,13 +886,13 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"Interface. If the device supports only one port "
"type, this setting is ignored.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWired:speed:
*
- * If non-zero, request that the device use only the specified speed.
- * In Mbit/s, ie 100 == 100Mbit/s.
+ * If non-zero, request that the device use only the specified speed. In
+ * Mbit/s, ie 100 == 100Mbit/s.
**/
g_object_class_install_property
(object_class, PROP_SPEED,
@@ -710,13 +901,13 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"If non-zero, request that the device use only the "
"specified speed. In Mbit/s, ie 100 == 100Mbit/s.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingWired:duplex:
*
* If specified, request that the device only use the specified duplex mode.
- * Either 'half' or 'full'.
+ * Either "half" or "full".
**/
g_object_class_install_property
(object_class, PROP_DUPLEX,
@@ -725,14 +916,14 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"If specified, request that the device only use the "
"specified duplex mode. Either 'half' or 'full'.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
- * NMSettingEthernet:auto-negotiate:
+ * NMSettingWired:auto-negotiate:
*
- * If TRUE, allow auto-negotiation of port speed and duplex mode. If FALSE,
- * do not allow auto-negotiation, in which case the 'speed' and 'duplex'
- * properties should be set.
+ * If %TRUE, allow auto-negotiation of port speed and duplex mode. If
+ * %FALSE, do not allow auto-negotiation, in which case the "speed" and
+ * "duplex" properties should be set.
**/
g_object_class_install_property
(object_class, PROP_AUTO_NEGOTIATE,
@@ -743,25 +934,25 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"in which case the 'speed' and 'duplex' properties "
"should be set.",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingWired:mac-address:
*
- * If specified, this connection will only apply to the ethernet device
- * whose permanent MAC address matches. This property does not change the MAC address
- * of the device (i.e. MAC spoofing).
+ * If specified, this connection will only apply to the Ethernet device
+ * whose permanent MAC address matches. This property does not change the
+ * MAC address of the device (i.e. MAC spoofing).
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
_nm_param_spec_specialized (NM_SETTING_WIRED_MAC_ADDRESS,
"Device MAC Address",
"If specified, this connection will only apply to "
- "the ethernet device whose permanent MAC address matches. "
+ "the Ethernet device whose permanent MAC address matches. "
"This property does not change the MAC address "
"of the device (i.e. MAC spoofing).",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingWired:cloned-mac-address:
@@ -777,14 +968,14 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"this MAC address instead of its permanent MAC address. "
"This is known as MAC cloning or spoofing.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingWired:mac-address-blacklist:
*
- * If specified, this connection will never apply to the ethernet device
- * whose permanent MAC address matches an address in the list. Each
- * MAC address is in the standard hex-digits-and-colons notation
+ * If specified, this connection will never apply to the Ethernet device
+ * whose permanent MAC address matches an address in the list. Each MAC
+ * address is in the standard hex-digits-and-colons notation
* (00:11:22:33:44:55).
**/
g_object_class_install_property
@@ -792,11 +983,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
_nm_param_spec_specialized (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST,
"MAC Address Blacklist",
"If specified, this connection will never apply to "
- "the ethernet device whose permanent MAC address matches "
+ "the Ethernet device whose permanent MAC address matches "
"an address in the list. Each MAC address is in the "
"standard hex-digits-and-colons notation (00:11:22:33:44:55).",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingWired:mtu:
@@ -812,17 +1003,18 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"size or smaller, breaking larger packets up into "
"multiple Ethernet frames.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingWired:s390-subchannels:
*
* Identifies specific subchannels that this network device uses for
- * communcation with z/VM or s390 host. Like #NMSettingWired:mac-address
- * for non-z/VM devices, this property can be used to ensure this connection
- * only applies to the network device that uses these subchannels. The
- * list should contain exactly 3 strings, and each string may only be
- * composed of hexadecimal characters and the period (.) character.
+ * communication with z/VM or s390 host. Like the
+ * #NMSettingWired:mac-address property for non-z/VM devices, this property
+ * can be used to ensure this connection only applies to the network device
+ * that uses these subchannels. The list should contain exactly 3 strings,
+ * and each string may only be composed of hexadecimal characters and the
+ * period (.) character.
**/
g_object_class_install_property
(object_class, PROP_S390_SUBCHANNELS,
@@ -838,12 +1030,12 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"string may only be composed of hexadecimal "
"characters and the period (.) character.",
DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingWired:s390-nettype:
*
- * s390 network device type; one of 'qeth', 'lcs', or 'ctc', representing
+ * s390 network device type; one of "qeth", "lcs", or "ctc", representing
* the different types of virtual network devices available on s390 systems.
**/
g_object_class_install_property
@@ -854,14 +1046,14 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"'ctc', representing the different types of virtual "
"network devices available on s390 systems.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
/**
* NMSettingWired:s390-options:
*
* Dictionary of key/value pairs of s390-specific device options. Both keys
- * and values must be strings. Allowed keys include 'portno', 'layer2',
- * 'portname', 'protocol', among others. Key names must contain only
+ * and values must be strings. Allowed keys include "portno", "layer2",
+ * "portname", "protocol", among others. Key names must contain only
* alphanumeric characters (ie, [a-zA-Z0-9]).
**/
g_object_class_install_property
@@ -873,6 +1065,6 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"strings. Allowed keys include 'portno', "
"'layer2', 'portname', 'protocol', among others.",
DBUS_TYPE_G_MAP_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
}
diff --git a/libnm-util/nm-setting-wired.h b/libnm-util/nm-setting-wired.h
index e235d23cc..9580b0a8b 100644
--- a/libnm-util/nm-setting-wired.h
+++ b/libnm-util/nm-setting-wired.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -90,7 +90,25 @@ const char * nm_setting_wired_get_duplex (NMSettingWired *setting
gboolean nm_setting_wired_get_auto_negotiate (NMSettingWired *setting);
const GByteArray *nm_setting_wired_get_mac_address (NMSettingWired *setting);
const GByteArray *nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting);
-const GSList *nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting);
+
+const GSList *nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting);
+NM_AVAILABLE_IN_0_9_10
+guint32 nm_setting_wired_get_num_mac_blacklist_items (NMSettingWired *setting);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_setting_wired_get_mac_blacklist_item (NMSettingWired *setting,
+ guint32 idx);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_wired_add_mac_blacklist_item (NMSettingWired *setting,
+ const char *mac);
+NM_AVAILABLE_IN_0_9_10
+void nm_setting_wired_remove_mac_blacklist_item (NMSettingWired *setting,
+ guint32 idx);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_wired_remove_mac_blacklist_item_by_value (NMSettingWired *setting,
+ const char *mac);
+NM_AVAILABLE_IN_0_9_10
+void nm_setting_wired_clear_mac_blacklist_items (NMSettingWired *setting);
+
guint32 nm_setting_wired_get_mtu (NMSettingWired *setting);
const GPtrArray * nm_setting_wired_get_s390_subchannels (NMSettingWired *setting);
@@ -105,9 +123,11 @@ const char * nm_setting_wired_get_s390_option_by_key (NMSettingWired *setti
const char *key);
gboolean nm_setting_wired_add_s390_option (NMSettingWired *setting,
const char *key,
- const char *item);
+ const char *value);
gboolean nm_setting_wired_remove_s390_option (NMSettingWired *setting,
const char *key);
+NM_AVAILABLE_IN_0_9_10
+const char ** nm_setting_wired_get_valid_s390_options (NMSettingWired *setting);
G_END_DECLS
diff --git a/libnm-util/nm-setting-wireless-security.c b/libnm-util/nm-setting-wireless-security.c
index 9e4beccab..40c561813 100644
--- a/libnm-util/nm-setting-wireless-security.c
+++ b/libnm-util/nm-setting-wireless-security.c
@@ -19,13 +19,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <config.h>
#include <string.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
+
#include "nm-setting-wireless-security.h"
#include "nm-setting-8021x.h"
#include "nm-param-spec-specialized.h"
@@ -36,17 +38,17 @@
/**
* SECTION:nm-setting-wireless-security
- * @short_description: Describes connection properties for WiFi networks that
+ * @short_description: Describes connection properties for Wi-Fi networks that
* use WEP, LEAP, WPA or WPA2/RSN security
* @include: nm-setting-wireless-security.h
*
* The #NMSettingWirelessSecurity object is a #NMSetting subclass that describes
- * properties necessary for connection to encrypted WiFi networks.
+ * properties necessary for connection to encrypted Wi-Fi networks.
*
* It's a good idea to read up on wpa_supplicant configuration before using this
* setting extensively, since most of the options here correspond closely with
* the relevant wpa_supplicant configuration options. To get a better overview
- * of how WiFi security works, you may want to get copies of the following books.
+ * of how Wi-Fi security works, you may want to get copies of the following books.
*
* 802.11 Wireless Networks: The Definitive Guide, Second Edition
* Author: Matthew Gast
@@ -165,7 +167,7 @@ nm_setting_wireless_security_get_key_mgmt (NMSettingWirelessSecurity *setting)
* @setting: the #NMSettingWirelessSecurity
*
* Returns: the number of security protocols this connection allows when
- * connecting to secure WiFi networks
+ * connecting to secure Wi-Fi networks
**/
guint32
nm_setting_wireless_security_get_num_protos (NMSettingWirelessSecurity *setting)
@@ -200,9 +202,9 @@ nm_setting_wireless_security_get_proto (NMSettingWirelessSecurity *setting, guin
* @setting: the #NMSettingWirelessSecurity
* @proto: the protocol to add, one of "wpa" or "rsn"
*
- * Adds a WiFi security protocol (one of "wpa" or "rsn") to the allowed list;
+ * Adds a Wi-Fi security protocol (one of "wpa" or "rsn") to the allowed list;
* only protocols in this list will be used when finding and connecting to
- * the WiFi network specified by this connection. For example, if the
+ * the Wi-Fi network specified by this connection. For example, if the
* protocol list contains only "wpa" but the access point for the SSID specified
* by this connection only supports WPA2/RSN, the connection cannot be used
* with the access point.
@@ -226,6 +228,7 @@ nm_setting_wireless_security_add_proto (NMSettingWirelessSecurity *setting, cons
}
priv->proto = g_slist_append (priv->proto, g_ascii_strdown (proto, -1));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PROTO);
return TRUE;
}
@@ -250,6 +253,39 @@ nm_setting_wireless_security_remove_proto (NMSettingWirelessSecurity *setting, g
g_free (elt->data);
priv->proto = g_slist_delete_link (priv->proto, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PROTO);
+}
+
+/**
+ * nm_setting_wireless_security_remove_proto_by_value:
+ * @setting: the #NMSettingWirelessSecurity
+ * @proto: the protocol to remove, one of "wpa" or "rsn"
+ *
+ * Removes a protocol from the allowed protocol list.
+ *
+ * Returns: %TRUE if the protocol was found and removed; %FALSE it it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_wireless_security_remove_proto_by_value (NMSettingWirelessSecurity *setting,
+ const char *proto)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), FALSE);
+ g_return_val_if_fail (proto != NULL, FALSE);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ for (iter = priv->proto; iter; iter = g_slist_next (iter)) {
+ if (strcasecmp (proto, (char *) iter->data) == 0) {
+ priv->proto = g_slist_delete_link (priv->proto, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PROTO);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -267,8 +303,9 @@ nm_setting_wireless_security_clear_protos (NMSettingWirelessSecurity *setting)
g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
- nm_utils_slist_free (priv->proto, g_free);
+ g_slist_free_full (priv->proto, g_free);
priv->proto = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PROTO);
}
/**
@@ -311,8 +348,7 @@ nm_setting_wireless_security_get_pairwise (NMSettingWirelessSecurity *setting, g
/**
* nm_setting_wireless_security_add_pairwise:
* @setting: the #NMSettingWirelessSecurity
- * @pairwise: the encryption algorithm to add, one of "wep40", "wep104",
- * "tkip", or "ccmp"
+ * @pairwise: the encryption algorithm to add, one of "tkip" or "ccmp"
*
* Adds an encryption algorithm to the list of allowed pairwise encryption
* algorithms. If the list is not empty, then only access points that support
@@ -338,6 +374,7 @@ nm_setting_wireless_security_add_pairwise (NMSettingWirelessSecurity *setting, c
}
priv->pairwise = g_slist_append (priv->pairwise, g_ascii_strdown (pairwise, -1));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
return TRUE;
}
@@ -363,6 +400,40 @@ nm_setting_wireless_security_remove_pairwise (NMSettingWirelessSecurity *setting
g_free (elt->data);
priv->pairwise = g_slist_delete_link (priv->pairwise, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
+}
+
+/**
+ * nm_setting_wireless_security_remove_pairwise_by_value:
+ * @setting: the #NMSettingWirelessSecurity
+ * @pairwise: the encryption algorithm to remove, one of "tkip" or "ccmp"
+ *
+ * Removes an encryption algorithm from the allowed pairwise encryption
+ * algorithm list.
+ *
+ * Returns: %TRUE if the encryption algorith was found and removed; %FALSE it it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_wireless_security_remove_pairwise_by_value (NMSettingWirelessSecurity *setting,
+ const char *pairwise)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), FALSE);
+ g_return_val_if_fail (pairwise != NULL, FALSE);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ for (iter = priv->pairwise; iter; iter = g_slist_next (iter)) {
+ if (strcasecmp (pairwise, (char *) iter->data) == 0) {
+ priv->pairwise = g_slist_delete_link (priv->pairwise, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -380,8 +451,9 @@ nm_setting_wireless_security_clear_pairwise (NMSettingWirelessSecurity *setting)
g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
- nm_utils_slist_free (priv->pairwise, g_free);
+ g_slist_free_full (priv->pairwise, g_free);
priv->pairwise = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
}
/**
@@ -451,6 +523,7 @@ nm_setting_wireless_security_add_group (NMSettingWirelessSecurity *setting, cons
}
priv->group = g_slist_append (priv->group, g_ascii_strdown (group, -1));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_GROUP);
return TRUE;
}
@@ -476,6 +549,41 @@ nm_setting_wireless_security_remove_group (NMSettingWirelessSecurity *setting, g
g_free (elt->data);
priv->group = g_slist_delete_link (priv->group, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_GROUP);
+}
+
+/**
+ * nm_setting_wireless_security_remove_group_by_value:
+ * @setting: the #NMSettingWirelessSecurity
+ * @group: the encryption algorithm to remove, one of "wep40", "wep104",
+ * "tkip", or "ccmp"
+ *
+ * Removes an encryption algorithm from the allowed groupwise encryption
+ * algorithm list.
+ *
+ * Returns: %TRUE if the algorithm was found and removed; %FALSE it it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_wireless_security_remove_group_by_value (NMSettingWirelessSecurity *setting,
+ const char *group)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), FALSE);
+ g_return_val_if_fail (group != NULL, FALSE);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ for (iter = priv->group; iter; iter = g_slist_next (iter)) {
+ if (strcasecmp (group, (char *) iter->data) == 0) {
+ priv->group = g_slist_delete_link (priv->group, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_GROUP);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/**
@@ -493,8 +601,9 @@ nm_setting_wireless_security_clear_groups (NMSettingWirelessSecurity *setting)
g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
- nm_utils_slist_free (priv->group, g_free);
+ g_slist_free_full (priv->group, g_free);
priv->group = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_GROUP);
}
/**
@@ -621,18 +730,22 @@ nm_setting_wireless_security_set_wep_key (NMSettingWirelessSecurity *setting, gu
case 0:
g_free (priv->wep_key0);
priv->wep_key0 = g_strdup (key);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
break;
case 1:
g_free (priv->wep_key1);
priv->wep_key1 = g_strdup (key);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
break;
case 2:
g_free (priv->wep_key2);
priv->wep_key2 = g_strdup (key);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
break;
case 3:
g_free (priv->wep_key3);
priv->wep_key3 = g_strdup (key);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
break;
default:
g_assert_not_reached ();
@@ -703,10 +816,6 @@ need_secrets (NMSetting *setting)
GPtrArray *secrets;
secrets = g_ptr_array_sized_new (4);
- if (!secrets) {
- g_warning ("Not enough memory to create required secrets array.");
- return NULL;
- }
g_assert (priv->key_mgmt);
@@ -767,15 +876,6 @@ no_secrets:
return NULL;
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
-{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
-
- return strcmp (nm_setting_get_name (setting), str);
-}
-
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
@@ -784,14 +884,15 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
const char *valid_key_mgmt[] = { "none", "ieee8021x", "wpa-none", "wpa-psk", "wpa-eap", NULL };
const char *valid_auth_algs[] = { "open", "shared", "leap", NULL };
const char *valid_protos[] = { "wpa", "rsn", NULL };
- const char *valid_pairwise[] = { "wep40", "wep104", "tkip", "ccmp", NULL };
+ const char *valid_pairwise[] = { "tkip", "ccmp", NULL };
const char *valid_groups[] = { "wep40", "wep104", "tkip", "ccmp", NULL };
if (!priv->key_mgmt) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
@@ -799,7 +900,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
+ _("'%s' is not a valid value for the property"),
+ priv->key_mgmt);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
@@ -809,42 +912,49 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X,
- NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
+ _("'%s' security requires '%s=%s'"),
+ "leap", NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x");
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
if (!priv->leap_username) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME,
- NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
return FALSE;
}
if (priv->leap_password && !strlen (priv->leap_password)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
return FALSE;
}
} else {
if ( (strcmp (priv->key_mgmt, "ieee8021x") == 0)
|| (strcmp (priv->key_mgmt, "wpa-eap") == 0)) {
/* Need an 802.1x setting too */
- if (!g_slist_find_custom (all_settings, NM_SETTING_802_1X_SETTING_NAME, find_setting_by_name)) {
+ if (!nm_setting_find_in_list (all_settings, NM_SETTING_802_1X_SETTING_NAME)) {
g_set_error (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING,
- NULL);
+ _("'%s' security requires '%s' setting presence"),
+ priv->key_mgmt, NM_SETTING_802_1X_SETTING_NAME);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
}
}
if (priv->leap_username && !strlen (priv->leap_username)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
return FALSE;
}
@@ -852,68 +962,78 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
+ _("'%d' value is out of range <0-3>"),
+ priv->wep_tx_keyidx);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
return FALSE;
}
if (priv->wep_key_type > NM_WEP_KEY_TYPE_LAST) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE);
return FALSE;
}
if (priv->wep_key0 && !nm_utils_wep_key_valid (priv->wep_key0, priv->wep_key_type)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
return FALSE;
}
if (priv->wep_key1 && !nm_utils_wep_key_valid (priv->wep_key1, priv->wep_key_type)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
return FALSE;
}
if (priv->wep_key2 && !nm_utils_wep_key_valid (priv->wep_key2, priv->wep_key_type)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
return FALSE;
}
if (priv->wep_key3 && !nm_utils_wep_key_valid (priv->wep_key3, priv->wep_key_type)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
return FALSE;
}
if (priv->auth_alg && !_nm_utils_string_in_list (priv->auth_alg, valid_auth_algs)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
if (priv->psk && !nm_utils_wpa_psk_valid (priv->psk)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_PSK);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_PSK);
return FALSE;
}
if (priv->proto && !_nm_utils_string_slist_validate (priv->proto, valid_protos)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_PROTO);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_PROTO);
return FALSE;
}
@@ -939,23 +1059,27 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
+ _("'%s' connections require '%s' in this property"),
+ NM_SETTING_WIRELESS_MODE_ADHOC, "none");
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
return FALSE;
}
} else if (!_nm_utils_string_slist_validate (priv->pairwise, valid_pairwise)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
return FALSE;
}
}
if (priv->group && !_nm_utils_string_slist_validate (priv->group, valid_groups)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SECURITY_GROUP);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_SECURITY_ERROR,
+ NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_GROUP);
return FALSE;
}
@@ -965,7 +1089,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP,
- NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
+ _("'%s' can only be used with '%s=%s' (WEP)"),
+ "shared", NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none");
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
}
@@ -1028,7 +1154,6 @@ set_secret_flags (NMSetting *setting,
static void
nm_setting_wireless_security_init (NMSettingWirelessSecurity *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NULL);
}
static void
@@ -1049,9 +1174,9 @@ finalize (GObject *object)
g_free (priv->psk);
g_free (priv->leap_password);
- nm_utils_slist_free (priv->proto, g_free);
- nm_utils_slist_free (priv->pairwise, g_free);
- nm_utils_slist_free (priv->group, g_free);
+ g_slist_free_full (priv->proto, g_free);
+ g_slist_free_full (priv->pairwise, g_free);
+ g_slist_free_full (priv->group, g_free);
G_OBJECT_CLASS (nm_setting_wireless_security_parent_class)->finalize (object);
}
@@ -1079,15 +1204,15 @@ set_property (GObject *object, guint prop_id,
priv->auth_alg = str ? g_ascii_strdown (str, -1) : NULL;
break;
case PROP_PROTO:
- nm_utils_slist_free (priv->proto, g_free);
+ g_slist_free_full (priv->proto, g_free);
priv->proto = g_value_dup_boxed (value);
break;
case PROP_PAIRWISE:
- nm_utils_slist_free (priv->pairwise, g_free);
+ g_slist_free_full (priv->pairwise, g_free);
priv->pairwise = g_value_dup_boxed (value);
break;
case PROP_GROUP:
- nm_utils_slist_free (priv->group, g_free);
+ g_slist_free_full (priv->group, g_free);
priv->group = g_value_dup_boxed (value);
break;
case PROP_LEAP_USERNAME:
@@ -1095,16 +1220,20 @@ set_property (GObject *object, guint prop_id,
priv->leap_username = g_value_dup_string (value);
break;
case PROP_WEP_KEY0:
- nm_setting_wireless_security_set_wep_key (setting, 0, g_value_get_string (value));
+ g_free (priv->wep_key0);
+ priv->wep_key0 = g_value_dup_string (value);
break;
case PROP_WEP_KEY1:
- nm_setting_wireless_security_set_wep_key (setting, 1, g_value_get_string (value));
+ g_free (priv->wep_key1);
+ priv->wep_key1 = g_value_dup_string (value);
break;
case PROP_WEP_KEY2:
- nm_setting_wireless_security_set_wep_key (setting, 2, g_value_get_string (value));
+ g_free (priv->wep_key2);
+ priv->wep_key2 = g_value_dup_string (value);
break;
case PROP_WEP_KEY3:
- nm_setting_wireless_security_set_wep_key (setting, 3, g_value_get_string (value));
+ g_free (priv->wep_key3);
+ priv->wep_key3 = g_value_dup_string (value);
break;
case PROP_WEP_KEY_FLAGS:
priv->wep_key_flags = g_value_get_uint (value);
@@ -1219,10 +1348,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
/**
* NMSettingWirelessSecurity:key-mgmt:
*
- * Key management used for the connection. One of 'none' (WEP), 'ieee8021x'
- * (Dynamic WEP), 'wpa-none' (Ad-Hoc WPA-PSK), 'wpa-psk' (infrastructure
- * WPA-PSK), or 'wpa-eap' (WPA-Enterprise). This property must be set for
- * any WiFi connection that uses security.
+ * Key management used for the connection. One of "none" (WEP), "ieee8021x"
+ * (Dynamic WEP), "wpa-none" (Ad-Hoc WPA-PSK), "wpa-psk" (infrastructure
+ * WPA-PSK), or "wpa-eap" (WPA-Enterprise). This property must be set for
+ * any Wi-Fi connection that uses security.
**/
g_object_class_install_property
(object_class, PROP_KEY_MGMT,
@@ -1232,14 +1361,14 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"'none' (WEP), 'ieee8021x' (Dynamic WEP), 'wpa-none' "
"(WPA-PSK Ad-Hoc), 'wpa-psk' (infrastructure WPA-PSK), "
"or 'wpa-eap' (WPA-Enterprise). This property must "
- "be set for any WiFi connection that uses security.",
+ "be set for any Wi-Fi connection that uses security.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_REQUIRED));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_REQUIRED));
/**
* NMSettingWirelessSecurity:wep-tx-keyidx:
*
- * When static WEP is used (ie, key-mgmt = 'none') and a non-default WEP key
+ * When static WEP is used (ie, key-mgmt = "none") and a non-default WEP key
* index is used by the AP, put that WEP key index here. Valid values are 0
* (default key) through 3. Note that some consumer access points (like the
* Linksys WRT54G) number the keys 1 - 4.
@@ -1254,16 +1383,16 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"through 3. Note that some consumer access points "
"(like the Linksys WRT54G) number the keys 1 - 4.",
0, 3, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingWirelessSecurity:auth-alg:
*
- * When WEP is used (ie, key-mgmt = 'none' or 'ieee8021x') indicate the
- * 802.11 authentication algorithm required by the AP here. One of 'open'
- * for Open System, 'shared' for Shared Key, or 'leap' for Cisco LEAP.
- * When using Cisco LEAP (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap')
- * the 'leap-username' and 'leap-password' properties must be specified.
+ * When WEP is used (ie, key-mgmt = "none" or "ieee8021x") indicate the
+ * 802.11 authentication algorithm required by the AP here. One of "open"
+ * for Open System, "shared" for Shared Key, or "leap" for Cisco LEAP. When
+ * using Cisco LEAP (ie, key-mgmt = "ieee8021x" and auth-alg = "leap") the
+ * "leap-username" and "leap-password" properties must be specified.
**/
g_object_class_install_property
(object_class, PROP_AUTH_ALG,
@@ -1277,13 +1406,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"'ieee8021x' and auth-alg = 'leap') the 'leap-username' "
"and 'leap-password' properties must be specified.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:proto:
*
* List of strings specifying the allowed WPA protocol versions to use.
- * Each element may be one 'wpa' (allow WPA) or 'rsn' (allow WPA2/RSN). If
+ * Each element may be one "wpa" (allow WPA) or "rsn" (allow WPA2/RSN). If
* not specified, both WPA and RSN connections are allowed.
**/
g_object_class_install_property
@@ -1296,15 +1425,15 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"WPA2/RSN). If not specified, both WPA and RSN "
"connections are allowed.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:pairwise:
*
* A list of pairwise encryption algorithms which prevents connections to
- * Wi-Fi networks that do not utilize one of the algorithms in the list. For
- * maximum compatibility leave this property empty. Each list element may
- * be one of 'wep40', 'wep104', 'tkip', or 'ccmp'.
+ * Wi-Fi networks that do not utilize one of the algorithms in the list.
+ * For maximum compatibility leave this property empty. Each list element
+ * may be one of "tkip" or "ccmp".
**/
g_object_class_install_property
(object_class, PROP_PAIRWISE,
@@ -1314,10 +1443,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"prevents connections to Wi-Fi networks that do "
"not utilize one of the algorithms in the list. "
"For maximum compatibility leave this property "
- "empty. Each list element may be one of 'wep40', "
- "'wep104', 'tkip' or 'ccmp'.",
+ "empty. Each list element may be one of 'tkip' "
+ "or 'ccmp'.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:group:
@@ -1325,7 +1454,7 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
* A list of group/broadcast encryption algorithms which prevents
* connections to Wi-Fi networks that do not utilize one of the algorithms
* in the list. For maximum compatibility leave this property empty. Each
- * list element may be one of 'wep40', 'wep104', 'tkip', or 'ccmp'.
+ * list element may be one of "wep40", "wep104", "tkip", or "ccmp".
**/
g_object_class_install_property
(object_class, PROP_GROUP,
@@ -1338,13 +1467,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"property empty. Each list element may be one "
" of 'wep40', 'wep104', 'tkip', or 'ccmp'.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:leap-username:
*
* The login username for legacy LEAP connections (ie, key-mgmt =
- * 'ieee8021x' and auth-alg = 'leap').
+ * "ieee8021x" and auth-alg = "leap").
**/
g_object_class_install_property
(object_class, PROP_LEAP_USERNAME,
@@ -1353,13 +1482,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"The login username for legacy LEAP connections "
"(ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:wep-key0:
*
* Index 0 WEP key. This is the WEP key used in most networks. See the
- * 'wep-key-type' property for a description of how this key is interpreted.
+ * "wep-key-type" property for a description of how this key is interpreted.
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY0,
@@ -1369,13 +1498,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"networks. See the 'wep-key-type' property for a "
"description of how this key is interpreted.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingWirelessSecurity:wep-key1:
*
* Index 1 WEP key. This WEP index is not used by most networks. See the
- * 'wep-key-type' property for a description of how this key is interpreted.
+ * "wep-key-type" property for a description of how this key is interpreted.
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY1,
@@ -1385,13 +1514,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"networks. See the 'wep-key-type' property for a "
"description of how this key is interpreted.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingWirelessSecurity:wep-key2:
*
* Index 2 WEP key. This WEP index is not used by most networks. See the
- * 'wep-key-type' property for a description of how this key is interpreted.
+ * "wep-key-type" property for a description of how this key is interpreted.
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY2,
@@ -1401,13 +1530,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"networks. See the 'wep-key-type' property for a "
"description of how this key is interpreted.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingWirelessSecurity:wep-key3:
*
* Index 3 WEP key. This WEP index is not used by most networks. See the
- * 'wep-key-type' property for a description of how this key is interpreted.
+ * "wep-key-type" property for a description of how this key is interpreted.
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY3,
@@ -1417,12 +1546,14 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"networks. See the 'wep-key-type' property for a "
"description of how this key is interpreted.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingWirelessSecurity:wep-key-flags:
*
- * Flags indicating how to handle #NMSettingWirelessSecurity WEP keys.
+ * Flags indicating how to handle the #NMSettingWirelessSecurity:wep-key0,
+ * #NMSettingWirelessSecurity:wep-key1, #NMSettingWirelessSecurity:wep-key2,
+ * and #NMSettingWirelessSecurity:wep-key3 properties.
**/
g_object_class_install_property (object_class, PROP_WEP_KEY_FLAGS,
g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
@@ -1431,7 +1562,7 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:psk:
@@ -1439,9 +1570,9 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
* Pre-Shared-Key for WPA networks. If the key is 64-characters long, it
* must contain only hexadecimal characters and is interpreted as a
* hexadecimal WPA key. Otherwise, the key must be between 8 and 63 ASCII
- * characters (as specified in the 802.11i standard) and is interpreted as
- * a WPA passphrase, and is hashed to derive the actual WPA-PSK used when
- * connecting to the WiFi network.
+ * characters (as specified in the 802.11i standard) and is interpreted as a
+ * WPA passphrase, and is hashed to derive the actual WPA-PSK used when
+ * connecting to the Wi-Fi network.
**/
g_object_class_install_property
(object_class, PROP_PSK,
@@ -1454,14 +1585,15 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"ASCII characters (as specified in the 802.11i standard) "
"and is interpreted as a WPA passphrase, and is hashed "
"to derive the actual WPA-PSK used when connecting to "
- "the WiFi network.",
+ "the Wi-Fi network.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingWirelessSecurity:psk-flags:
*
- * Flags indicating how to handle #NMSettingWirelessSecurity:psk
+ * Flags indicating how to handle the #NMSettingWirelessSecurity:psk
+ * property.
**/
g_object_class_install_property (object_class, PROP_PSK_FLAGS,
g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS,
@@ -1470,13 +1602,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:leap-password:
*
* The login password for legacy LEAP connections (ie, key-mgmt =
- * 'ieee8021x' and auth-alg = 'leap').
+ * "ieee8021x" and auth-alg = "leap").
**/
g_object_class_install_property
(object_class, PROP_LEAP_PASSWORD,
@@ -1485,12 +1617,13 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
"The login password for legacy LEAP connections "
"(ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
/**
* NMSettingWirelessSecurity:leap-password-flags:
*
- * Flags indicating how to handle #NMSettingWirelessSecurity:leap-password.
+ * Flags indicating how to handle the
+ * #NMSettingWirelessSecurity:leap-password property.
**/
g_object_class_install_property (object_class, PROP_LEAP_PASSWORD_FLAGS,
g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS,
@@ -1499,17 +1632,17 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWirelessSecurity:wep-key-type:
*
- * Controls the interpretation of WEP keys. Allowed values are those given
- * by %NMWepKeyType. If set to 1 and the keys are hexadecimal, they must be
- * either 10 or 26 characters in length. If set to 1 and the keys are
- * ASCII keys, they must be either 5 or 13 characters in length. If set to
- * 2, the passphrase is hashed using the de-facto MD5 method to derive the
- * actual WEP key.
+ * Controls the interpretation of WEP keys. Allowed values are
+ * %NM_WEP_KEY_TYPE_KEY, in which case the key is either a 10- or
+ * 26-character hexadecimal string, or a 5- or 13-character ASCII password;
+ * or %NM_WEP_KEY_TYPE_PASSPHRASE, in which case the passphrase is provided
+ * as a string and will be hashed using the de-facto MD5 method to derive
+ * the actual WEP key.
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY_TYPE,
@@ -1526,5 +1659,5 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
NM_WEP_KEY_TYPE_UNKNOWN,
NM_WEP_KEY_TYPE_LAST,
NM_WEP_KEY_TYPE_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
}
diff --git a/libnm-util/nm-setting-wireless-security.h b/libnm-util/nm-setting-wireless-security.h
index d9e972c04..df5d77aba 100644
--- a/libnm-util/nm-setting-wireless-security.h
+++ b/libnm-util/nm-setting-wireless-security.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -137,23 +137,29 @@ NMSetting * nm_setting_wireless_security_new (void);
const char *nm_setting_wireless_security_get_key_mgmt (NMSettingWirelessSecurity *setting);
-guint32 nm_setting_wireless_security_get_num_protos (NMSettingWirelessSecurity *setting);
-const char *nm_setting_wireless_security_get_proto (NMSettingWirelessSecurity *setting, guint32 i);
-gboolean nm_setting_wireless_security_add_proto (NMSettingWirelessSecurity *setting, const char *proto);
-void nm_setting_wireless_security_remove_proto (NMSettingWirelessSecurity *setting, guint32 i);
-void nm_setting_wireless_security_clear_protos (NMSettingWirelessSecurity *setting);
-
-guint32 nm_setting_wireless_security_get_num_pairwise (NMSettingWirelessSecurity *setting);
-const char *nm_setting_wireless_security_get_pairwise (NMSettingWirelessSecurity *setting, guint32 i);
-gboolean nm_setting_wireless_security_add_pairwise (NMSettingWirelessSecurity *setting, const char *pairwise);
-void nm_setting_wireless_security_remove_pairwise (NMSettingWirelessSecurity *setting, guint32 i);
-void nm_setting_wireless_security_clear_pairwise (NMSettingWirelessSecurity *setting);
-
-guint32 nm_setting_wireless_security_get_num_groups (NMSettingWirelessSecurity *setting);
-const char *nm_setting_wireless_security_get_group (NMSettingWirelessSecurity *setting, guint32 i);
-gboolean nm_setting_wireless_security_add_group (NMSettingWirelessSecurity *setting, const char *group);
-void nm_setting_wireless_security_remove_group (NMSettingWirelessSecurity *setting, guint32 i);
-void nm_setting_wireless_security_clear_groups (NMSettingWirelessSecurity *setting);
+guint32 nm_setting_wireless_security_get_num_protos (NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_proto (NMSettingWirelessSecurity *setting, guint32 i);
+gboolean nm_setting_wireless_security_add_proto (NMSettingWirelessSecurity *setting, const char *proto);
+void nm_setting_wireless_security_remove_proto (NMSettingWirelessSecurity *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_wireless_security_remove_proto_by_value (NMSettingWirelessSecurity *setting, const char *proto);
+void nm_setting_wireless_security_clear_protos (NMSettingWirelessSecurity *setting);
+
+guint32 nm_setting_wireless_security_get_num_pairwise (NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_pairwise (NMSettingWirelessSecurity *setting, guint32 i);
+gboolean nm_setting_wireless_security_add_pairwise (NMSettingWirelessSecurity *setting, const char *pairwise);
+void nm_setting_wireless_security_remove_pairwise (NMSettingWirelessSecurity *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_wireless_security_remove_pairwise_by_value (NMSettingWirelessSecurity *setting, const char *pairwise);
+void nm_setting_wireless_security_clear_pairwise (NMSettingWirelessSecurity *setting);
+
+guint32 nm_setting_wireless_security_get_num_groups (NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_group (NMSettingWirelessSecurity *setting, guint32 i);
+gboolean nm_setting_wireless_security_add_group (NMSettingWirelessSecurity *setting, const char *group);
+void nm_setting_wireless_security_remove_group (NMSettingWirelessSecurity *setting, guint32 i);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_wireless_security_remove_group_by_value (NMSettingWirelessSecurity *setting, const char *group);
+void nm_setting_wireless_security_clear_groups (NMSettingWirelessSecurity *setting);
const char *nm_setting_wireless_security_get_psk (NMSettingWirelessSecurity *setting);
NMSettingSecretFlags nm_setting_wireless_security_get_psk_flags (NMSettingWirelessSecurity *setting);
diff --git a/libnm-util/nm-setting-wireless.c b/libnm-util/nm-setting-wireless.c
index 1cd07c921..ca53d6f95 100644
--- a/libnm-util/nm-setting-wireless.c
+++ b/libnm-util/nm-setting-wireless.c
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -27,6 +27,7 @@
#include <net/ethernet.h>
#include <netinet/ether.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include "NetworkManager.h"
#include "nm-setting-wireless.h"
@@ -38,11 +39,11 @@
/**
* SECTION:nm-setting-wireless
- * @short_description: Describes connection properties for 802.11 WiFi networks
+ * @short_description: Describes connection properties for 802.11 Wi-Fi networks
* @include: nm-setting-wireless.h
*
* The #NMSettingWireless object is a #NMSetting subclass that describes properties
- * necessary for connection to 802.11 WiFi networks.
+ * necessary for connection to 802.11 Wi-Fi networks.
**/
/**
@@ -145,7 +146,7 @@ match_cipher (const char *cipher,
*
* Returns: %TRUE if the given settings are compatible with the access point's
* security flags and mode, %FALSE if they are not.
- */
+ */
gboolean
nm_setting_wireless_ap_security_compatible (NMSettingWireless *s_wireless,
NMSettingWirelessSecurity *s_wireless_sec,
@@ -154,16 +155,13 @@ nm_setting_wireless_ap_security_compatible (NMSettingWireless *s_wireless,
NM80211ApSecurityFlags ap_rsn,
NM80211Mode ap_mode)
{
- NMSettingWirelessPrivate *priv;
const char *key_mgmt = NULL, *cipher;
guint32 num, i;
gboolean found = FALSE;
g_return_val_if_fail (NM_IS_SETTING_WIRELESS (s_wireless), FALSE);
- priv = NM_SETTING_WIRELESS_GET_PRIVATE (s_wireless);
-
- if (!priv->security) {
+ if (!s_wireless_sec) {
if ( (ap_flags & NM_802_11_AP_FLAGS_PRIVACY)
|| (ap_wpa != NM_802_11_AP_SEC_NONE)
|| (ap_rsn != NM_802_11_AP_SEC_NONE))
@@ -171,13 +169,8 @@ nm_setting_wireless_ap_security_compatible (NMSettingWireless *s_wireless,
return TRUE;
}
- if (strcmp (priv->security, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) != 0)
- return FALSE;
-
- if (s_wireless_sec)
- key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
-
- if (s_wireless_sec == NULL || !key_mgmt)
+ key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
+ if (!key_mgmt)
return FALSE;
/* Static WEP */
@@ -469,6 +462,162 @@ nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting)
}
/**
+ * nm_setting_wireless_get_num_mac_blacklist_items:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the number of blacklisted MAC addresses
+ *
+ * Since: 0.9.10
+ **/
+guint32
+nm_setting_wireless_get_num_mac_blacklist_items (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+ return g_slist_length (NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address_blacklist);
+}
+
+/**
+ * nm_setting_wireless_get_mac_blacklist_item:
+ * @setting: the #NMSettingWireless
+ * @idx: the zero-based index of the MAC address entry
+ *
+ * Returns: the blacklisted MAC address string (hex-digits-and-colons notation)
+ * at index @idx
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_setting_wireless_get_mac_blacklist_item (NMSettingWireless *setting, guint32 idx)
+{
+ NMSettingWirelessPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ g_return_val_if_fail (idx <= g_slist_length (priv->mac_address_blacklist), NULL);
+
+ return (const char *) g_slist_nth_data (priv->mac_address_blacklist, idx);
+}
+
+/**
+ * nm_setting_wireless_add_mac_blacklist_item:
+ * @setting: the #NMSettingWireless
+ * @mac: the MAC address string (hex-digits-and-colons notation) to blacklist
+ *
+ * Adds a new MAC address to the #NMSettingWireless:mac-address-blacklist property.
+ *
+ * Returns: %TRUE if the MAC address was added; %FALSE if the MAC address
+ * is invalid or was already present
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_wireless_add_mac_blacklist_item (NMSettingWireless *setting, const char *mac)
+{
+ NMSettingWirelessPrivate *priv;
+ GSList *iter;
+ guint8 buf[32];
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf))
+ return FALSE;
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ for (iter = priv->mac_address_blacklist; iter; iter = g_slist_next (iter)) {
+ if (!strcasecmp (mac, (char *) iter->data))
+ return FALSE;
+ }
+
+ priv->mac_address_blacklist = g_slist_append (priv->mac_address_blacklist,
+ g_ascii_strup (mac, -1));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+ return TRUE;
+}
+
+/**
+ * nm_setting_wireless_remove_mac_blacklist_item:
+ * @setting: the #NMSettingWireless
+ * @idx: index number of the MAC address
+ *
+ * Removes the MAC address at index @idx from the blacklist.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_wireless_remove_mac_blacklist_item (NMSettingWireless *setting, guint32 idx)
+{
+ NMSettingWirelessPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS (setting));
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->mac_address_blacklist, idx);
+ g_return_if_fail (elt != NULL);
+
+ g_free (elt->data);
+ priv->mac_address_blacklist = g_slist_delete_link (priv->mac_address_blacklist, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+}
+
+/**
+ * nm_setting_wireless_remove_mac_blacklist_item_by_value:
+ * @setting: the #NMSettingWireless
+ * @mac: the MAC address string (hex-digits-and-colons notation) to remove from
+ * the blacklist
+ *
+ * Removes the MAC address @mac from the blacklist.
+ *
+ * Returns: %TRUE if the MAC address was found and removed; %FALSE if it was not.
+ *
+ * Since: 0.9.10
+ **/
+gboolean
+nm_setting_wireless_remove_mac_blacklist_item_by_value (NMSettingWireless *setting, const char *mac)
+{
+ NMSettingWirelessPrivate *priv;
+ GSList *iter;
+ guint8 buf[32];
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf))
+ return FALSE;
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ for (iter = priv->mac_address_blacklist; iter; iter = g_slist_next (iter)) {
+ if (!strcasecmp (mac, (char *) iter->data)) {
+ priv->mac_address_blacklist = g_slist_delete_link (priv->mac_address_blacklist, iter);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * nm_setting_wireless_clear_mac_blacklist_items:
+ * @setting: the #NMSettingWireless
+ *
+ * Removes all blacklisted MAC addresses.
+ *
+ * Since: 0.9.10
+ **/
+void
+nm_setting_wireless_clear_mac_blacklist_items (NMSettingWireless *setting)
+{
+ g_return_if_fail (NM_IS_SETTING_WIRELESS (setting));
+
+ g_slist_free_full (NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address_blacklist, g_free);
+ NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address_blacklist = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+}
+
+/**
* nm_setting_wireless_get_mtu:
* @setting: the #NMSettingWireless
*
@@ -487,6 +636,9 @@ nm_setting_wireless_get_mtu (NMSettingWireless *setting)
* @setting: the #NMSettingWireless
*
* Returns: the #NMSettingWireless:security property of the setting
+ *
+ * Deprecated: 0.9.10: No longer used. Security rescrictions are recognized by
+ * the presence of NM_SETTING_WIRELESS_SECURITY_SETTING_NAME in the connection.
**/
const char *
nm_setting_wireless_get_security (NMSettingWireless *setting)
@@ -547,9 +699,10 @@ nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting,
}
}
- if (!found)
+ if (!found) {
priv->seen_bssids = g_slist_prepend (priv->seen_bssids, lower_bssid);
- else
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SEEN_BSSIDS);
+ } else
g_free (lower_bssid);
return !found;
@@ -585,15 +738,6 @@ nm_setting_wireless_get_seen_bssid (NMSettingWireless *setting,
return (const char *) g_slist_nth_data (NM_SETTING_WIRELESS_GET_PRIVATE (setting)->seen_bssids, i);
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
-{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
-
- return strcmp (nm_setting_get_name (setting), str);
-}
-
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
@@ -603,18 +747,20 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
GSList *iter;
if (!priv->ssid) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY,
- NM_SETTING_WIRELESS_SSID);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_ERROR,
+ NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID);
return FALSE;
}
if (!priv->ssid->len || priv->ssid->len > 32) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SSID);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_ERROR,
+ NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
+ _("SSID length is out of range <1-32> bytes"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID);
return FALSE;
}
@@ -622,7 +768,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_ERROR,
NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_MODE);
+ _("'%s' is not a valid Wi-Fi mode"),
+ priv->mode);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MODE);
return FALSE;
}
@@ -630,7 +778,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_ERROR,
NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_BAND);
+ _("'%s' is not a valid band"),
+ priv->band);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_BAND);
return FALSE;
}
@@ -638,7 +788,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_ERROR,
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND,
+ _("requires setting '%s' property"),
NM_SETTING_WIRELESS_BAND);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_CHANNEL);
return FALSE;
}
@@ -647,32 +799,37 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_ERROR,
NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_CHANNEL);
+ _("'%d' is not a valid channel"),
+ priv->channel);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_CHANNEL);
return FALSE;
}
}
if (priv->bssid && priv->bssid->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_BSSID);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_ERROR,
+ NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_BSSID);
return FALSE;
}
if (priv->device_mac_address && priv->device_mac_address->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_MAC_ADDRESS);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_ERROR,
+ NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MAC_ADDRESS);
return FALSE;
}
if (priv->cloned_mac_address && priv->cloned_mac_address->len != ETH_ALEN) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS);
+ g_set_error_literal (error,
+ NM_SETTING_WIRELESS_ERROR,
+ NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS);
return FALSE;
}
@@ -683,7 +840,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_ERROR,
NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+ _("'%s' is not a valid MAC address"),
+ (const char *) iter->data);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
return FALSE;
}
}
@@ -695,27 +854,19 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error (error,
NM_SETTING_WIRELESS_ERROR,
NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_SEEN_BSSIDS);
+ _("'%s' is not a valid MAC address"),
+ (const char *) iter->data);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SEEN_BSSIDS);
return FALSE;
}
}
- if ( priv->security
- && !g_slist_find_custom (all_settings, priv->security, find_setting_by_name)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING,
- NULL);
- return FALSE;
- }
-
return TRUE;
}
static void
nm_setting_wireless_init (NMSettingWireless *setting)
{
- g_object_set (setting, NM_SETTING_NAME, NM_SETTING_WIRELESS_SETTING_NAME, NULL);
}
static void
@@ -735,8 +886,8 @@ finalize (GObject *object)
g_byte_array_free (priv->device_mac_address, TRUE);
if (priv->cloned_mac_address)
g_byte_array_free (priv->cloned_mac_address, TRUE);
- nm_utils_slist_free (priv->mac_address_blacklist, g_free);
- nm_utils_slist_free (priv->seen_bssids, g_free);
+ g_slist_free_full (priv->mac_address_blacklist, g_free);
+ g_slist_free_full (priv->seen_bssids, g_free);
G_OBJECT_CLASS (nm_setting_wireless_parent_class)->finalize (object);
}
@@ -786,14 +937,14 @@ set_property (GObject *object, guint prop_id,
priv->cloned_mac_address = g_value_dup_boxed (value);
break;
case PROP_MAC_ADDRESS_BLACKLIST:
- nm_utils_slist_free (priv->mac_address_blacklist, g_free);
+ g_slist_free_full (priv->mac_address_blacklist, g_free);
priv->mac_address_blacklist = g_value_dup_boxed (value);
break;
case PROP_MTU:
priv->mtu = g_value_get_uint (value);
break;
case PROP_SEEN_BSSIDS:
- nm_utils_slist_free (priv->seen_bssids, g_free);
+ g_slist_free_full (priv->seen_bssids, g_free);
priv->seen_bssids = g_value_dup_boxed (value);
break;
case PROP_SEC:
@@ -853,7 +1004,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_boxed (value, NM_SETTING_WIRELESS_GET_PRIVATE (setting)->seen_bssids);
break;
case PROP_SEC:
- g_value_set_string (value, nm_setting_wireless_get_security (setting));
+ g_value_set_string (value, NM_SETTING_WIRELESS_GET_PRIVATE (setting)->security);
break;
case PROP_HIDDEN:
g_value_set_boolean (value, nm_setting_wireless_get_hidden (setting));
@@ -882,37 +1033,37 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
/**
* NMSettingWireless:ssid:
*
- * SSID of the WiFi network.
+ * SSID of the Wi-Fi network. Must be specified.
**/
g_object_class_install_property
(object_class, PROP_SSID,
_nm_param_spec_specialized (NM_SETTING_WIRELESS_SSID,
"SSID",
- "SSID of the WiFi network. Must be specified.",
+ "SSID of the Wi-Fi network. Must be specified.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWireless:mode:
*
- * WiFi network mode; one of 'infrastructure', 'adhoc' or 'ap'. If blank,
+ * Wi-Fi network mode; one of "infrastructure", "adhoc" or "ap". If blank,
* infrastructure is assumed.
**/
g_object_class_install_property
(object_class, PROP_MODE,
g_param_spec_string (NM_SETTING_WIRELESS_MODE,
"Mode",
- "WiFi network mode; one of 'infrastructure', "
+ "Wi-Fi network mode; one of 'infrastructure', "
"'adhoc' or 'ap'. If blank, infrastructure is assumed.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWireless:band:
*
- * 802.11 frequency band of the network. One of 'a' for 5GHz 802.11a or
- * 'bg' for 2.4GHz 802.11. This will lock associations to the WiFi network
- * to the specific band, i.e. if 'a' is specified, the device will not
+ * 802.11 frequency band of the network. One of "a" for 5GHz 802.11a or
+ * "bg" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network
+ * to the specific band, i.e. if "a" is specified, the device will not
* associate with the same network in the 2.4GHz band even if the network's
* settings are compatible. This setting depends on specific driver
* capability and may not work with all drivers.
@@ -923,34 +1074,34 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"Band",
"802.11 frequency band of the network. One of 'a' "
"for 5GHz 802.11a or 'bg' for 2.4GHz 802.11. This "
- "will lock associations to the WiFi network to the "
+ "will lock associations to the Wi-Fi network to the "
"specific band, i.e. if 'a' is specified, the device "
"will not associate with the same network in the "
"2.4GHz band even if the network's settings are "
"compatible. This setting depends on specific driver "
"capability and may not work with all drivers.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWireless:channel:
*
- * Wireless channel to use for the WiFi connection. The device will only
- * join (or create for Ad-Hoc networks) a WiFi network on the specified
+ * Wireless channel to use for the Wi-Fi connection. The device will only
+ * join (or create for Ad-Hoc networks) a Wi-Fi network on the specified
* channel. Because channel numbers overlap between bands, this property
- * also requires the 'band' property to be set.
+ * also requires the "band" property to be set.
**/
g_object_class_install_property
(object_class, PROP_CHANNEL,
g_param_spec_uint (NM_SETTING_WIRELESS_CHANNEL,
"Channel",
- "Wireless channel to use for the WiFi connection. The "
+ "Wireless channel to use for the Wi-Fi connection. The "
"device will only join (or create for Ad-Hoc networks) "
- "a WiFi network on the specified channel. Because "
+ "a Wi-Fi network on the specified channel. Because "
"channel numbers overlap between bands, this property "
"also requires the 'band' property to be set.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* NMSettingWireless:bssid:
@@ -971,7 +1122,7 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"the BSSID used when creating an Ad-Hoc network "
"and is unlikely to in the future.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWireless:rate:
@@ -991,7 +1142,7 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"property is highly driver dependent and not all devices "
"support setting a static bitrate.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingWireless:tx-power:
@@ -1009,48 +1160,48 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"driver dependent and not all devices support setting a "
"static transmit power.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingWireless:mac-address:
*
- * If specified, this connection will only apply to the WiFi device
- * whose permanent MAC address matches. This property does not change the MAC address
- * of the device (i.e. MAC spoofing).
+ * If specified, this connection will only apply to the Wi-Fi device whose
+ * permanent MAC address matches. This property does not change the MAC
+ * address of the device (i.e. MAC spoofing).
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
_nm_param_spec_specialized (NM_SETTING_WIRELESS_MAC_ADDRESS,
"Device MAC Address",
"If specified, this connection will only apply to "
- "the WiFi device whose permanent MAC address matches. "
+ "the Wi-Fi device whose permanent MAC address matches. "
"This property does not change the MAC address "
"of the device (i.e. MAC spoofing).",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWireless:cloned-mac-address:
*
- * If specified, request that the Wifi device use this MAC address instead of its
- * permanent MAC address. This is known as MAC cloning or spoofing.
+ * If specified, request that the Wi-Fi device use this MAC address instead
+ * of its permanent MAC address. This is known as MAC cloning or spoofing.
**/
g_object_class_install_property
(object_class, PROP_CLONED_MAC_ADDRESS,
_nm_param_spec_specialized (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
"Spoof MAC Address",
- "If specified, request that the WiFi device use "
+ "If specified, request that the Wi-Fi device use "
"this MAC address instead of its permanent MAC address. "
"This is known as MAC cloning or spoofing.",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWireless:mac-address-blacklist:
*
* A list of permanent MAC addresses of Wi-Fi devices to which this
* connection should never apply. Each MAC address should be given in the
- * standard hex-digits-and-colons notation (eg '00:11:22:33:44:55').
+ * standard hex-digits-and-colons notation (eg "00:11:22:33:44:55").
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS_BLACKLIST,
@@ -1062,16 +1213,17 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"given in the standard hex-digits-and-colons "
"notation (eg '00:11:22:33:44:55').",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingWireless:seen-bssids:
*
* A list of BSSIDs (each BSSID formatted as a MAC address like
- * '00:11:22:33:44:55') that have been detected as part of the Wi-FI network.
- * NetworkManager internally tracks previously seen BSSIDs. The property is only
- * meant for reading and reflects the BBSID list of NetworkManager. The changes you
- * make to this property will not be preserved.
+ * "00:11:22:33:44:55") that have been detected as part of the Wi-Fi
+ * network. NetworkManager internally tracks previously seen BSSIDs. The
+ * property is only meant for reading and reflects the BSSID list of
+ * NetworkManager. The changes you make to this property will not be
+ * preserved.
**/
g_object_class_install_property
(object_class, PROP_SEEN_BSSIDS,
@@ -1079,14 +1231,14 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"Seen BSSIDS",
"A list of BSSIDs (each BSSID formatted as a MAC "
"address like 00:11:22:33:44:55') that have been "
- "detected as part of the WiFI network. "
+ "detected as part of the Wi-Fi network. "
"NetworkManager internally tracks previously seen "
"BSSIDs. The property is only meant for reading "
- "and reflects the BBSID list of NetworkManager. "
+ "and reflects the BSSID list of NetworkManager. "
"The changes you make to this property will not be "
"preserved.",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingWireless:mtu:
@@ -1102,14 +1254,19 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"size or smaller, breaking larger packets up into "
"multiple Ethernet frames.",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
/**
* NMSettingWireless:security:
*
* If the wireless connection has any security restrictions, like 802.1x,
- * WEP, or WPA, set this property to '802-11-wireless-security' and ensure
- * the connection contains a valid 802-11-wireless-security setting.
+ * WEP, or WPA, set this property to
+ * %NM_SETTING_WIRELESS_SECURITY_SETTING_NAME and ensure the connection
+ * contains a valid #NMSettingWirelessSecurity setting.
+ *
+ * Deprecated: 0.9.10: No longer used. Security restrictions are recognized
+ * by the presence of a #NMSettingWirelessSecurity setting in the
+ * connection.
**/
g_object_class_install_property
(object_class, PROP_SEC,
@@ -1121,14 +1278,14 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"and ensure the connection contains a valid "
NM_SETTING_WIRELESS_SECURITY_SETTING_NAME " setting.",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
/**
* NMSettingWireless:hidden:
*
- * If %TRUE, indicates this network is a non-broadcasting network that
- * hides its SSID. In this case various workarounds may take place, such
- * as probe-scanning the SSID for more reliable network discovery. However,
+ * If %TRUE, indicates this network is a non-broadcasting network that hides
+ * its SSID. In this case various workarounds may take place, such as
+ * probe-scanning the SSID for more reliable network discovery. However,
* these workarounds expose inherent insecurities with hidden SSID networks,
* and thus hidden SSID networks should be used with caution.
**/
@@ -1144,5 +1301,5 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
"insecurities with hidden SSID networks, and thus "
"hidden SSID networks should be used with caution.",
FALSE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+ G_PARAM_READWRITE));
}
diff --git a/libnm-util/nm-setting-wireless.h b/libnm-util/nm-setting-wireless.h
index e75bb1518..221a921a3 100644
--- a/libnm-util/nm-setting-wireless.h
+++ b/libnm-util/nm-setting-wireless.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2014 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -75,9 +75,11 @@ GQuark nm_setting_wireless_error_quark (void);
#define NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
#define NM_SETTING_WIRELESS_MTU "mtu"
#define NM_SETTING_WIRELESS_SEEN_BSSIDS "seen-bssids"
-#define NM_SETTING_WIRELESS_SEC "security"
#define NM_SETTING_WIRELESS_HIDDEN "hidden"
+/* Deprecated */
+#define NM_SETTING_WIRELESS_SEC "security"
+
/**
* NM_SETTING_WIRELESS_MODE_ADHOC:
*
@@ -130,9 +132,26 @@ guint32 nm_setting_wireless_get_rate (NMSettingWireless
guint32 nm_setting_wireless_get_tx_power (NMSettingWireless *setting);
const GByteArray *nm_setting_wireless_get_mac_address (NMSettingWireless *setting);
const GByteArray *nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting);
-const GSList *nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting);
+
+const GSList *nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting);
+NM_AVAILABLE_IN_0_9_10
+guint32 nm_setting_wireless_get_num_mac_blacklist_items (NMSettingWireless *setting);
+NM_AVAILABLE_IN_0_9_10
+const char * nm_setting_wireless_get_mac_blacklist_item (NMSettingWireless *setting,
+ guint32 idx);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_wireless_add_mac_blacklist_item (NMSettingWireless *setting,
+ const char *mac);
+NM_AVAILABLE_IN_0_9_10
+void nm_setting_wireless_remove_mac_blacklist_item (NMSettingWireless *setting,
+ guint32 idx);
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_setting_wireless_remove_mac_blacklist_item_by_value (NMSettingWireless *setting,
+ const char *mac);
+NM_AVAILABLE_IN_0_9_10
+void nm_setting_wireless_clear_mac_blacklist_items (NMSettingWireless *setting);
+
guint32 nm_setting_wireless_get_mtu (NMSettingWireless *setting);
-const char *nm_setting_wireless_get_security (NMSettingWireless *setting);
gboolean nm_setting_wireless_get_hidden (NMSettingWireless *setting);
gboolean nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting,
@@ -149,6 +168,10 @@ gboolean nm_setting_wireless_ap_security_compatible (NMSettingWireless
NM80211ApSecurityFlags ap_rsn,
NM80211Mode ap_mode);
+/* Deprecated */
+NM_DEPRECATED_IN_0_9_10
+const char *nm_setting_wireless_get_security (NMSettingWireless *setting);
+
G_END_DECLS
#endif /* NM_SETTING_WIRELESS_H */
diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c
index a3186284e..0e8a06c4d 100644
--- a/libnm-util/nm-setting.c
+++ b/libnm-util/nm-setting.c
@@ -29,6 +29,7 @@
#include "nm-setting-private.h"
#include "nm-setting-connection.h"
#include "nm-utils.h"
+#include "nm-utils-private.h"
/**
* SECTION:nm-setting
@@ -37,7 +38,7 @@
*
* Each #NMSetting contains properties that describe configuration that applies
* to a specific network layer (like IPv4 or IPv6 configuration) or device type
- * (like Ethernet, or WiFi). A collection of individual settings together
+ * (like Ethernet, or Wi-Fi). A collection of individual settings together
* make up an #NMConnection. Each property is strongly typed and usually has
* a number of allowed values. See each #NMSetting subclass for a description
* of properties and allowed values.
@@ -65,7 +66,14 @@ G_DEFINE_ABSTRACT_TYPE (NMSetting, nm_setting, G_TYPE_OBJECT)
#define NM_SETTING_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING, NMSettingPrivate))
typedef struct {
- char *name;
+ const char *name;
+ GType type;
+ guint32 priority;
+ GQuark error_quark;
+} SettingInfo;
+
+typedef struct {
+ const SettingInfo *info;
} NMSettingPrivate;
enum {
@@ -75,6 +83,197 @@ enum {
PROP_LAST
};
+/*************************************************************/
+
+static GHashTable *registered_settings = NULL;
+static GHashTable *registered_settings_by_type = NULL;
+
+static gboolean
+_nm_gtype_equal (gconstpointer v1, gconstpointer v2)
+{
+ return *((const GType *) v1) == *((const GType *) v2);
+}
+static guint
+_nm_gtype_hash (gconstpointer v)
+{
+ return *((const GType *) v);
+}
+
+static void __attribute__((constructor))
+_ensure_registered (void)
+{
+ if (G_UNLIKELY (registered_settings == NULL)) {
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+ _nm_value_transforms_register ();
+ registered_settings = g_hash_table_new (g_str_hash, g_str_equal);
+ registered_settings_by_type = g_hash_table_new (_nm_gtype_hash, _nm_gtype_equal);
+ }
+}
+
+#define _ensure_setting_info(self, priv) \
+ G_STMT_START { \
+ NMSettingPrivate *_priv_esi = (priv); \
+ if (G_UNLIKELY (!_priv_esi->info)) { \
+ _priv_esi->info = _nm_setting_lookup_setting_by_type (G_OBJECT_TYPE (self)); \
+ g_assert (_priv_esi->info); \
+ } \
+ } G_STMT_END
+
+/*************************************************************/
+
+/*
+ * _nm_register_setting:
+ * @name: the name of the #NMSetting object to register
+ * @type: the #GType of the #NMSetting
+ * @priority: the sort priority of the setting, see below
+ * @error_quark: the setting's error quark
+ *
+ * INTERNAL ONLY: registers a setting's internal properties, like its priority
+ * and its error quark type, with libnm-util.
+ *
+ * A setting's priority should roughly follow the OSI layer model, but it also
+ * controls which settings get asked for secrets first. Thus settings which
+ * relate to things that must be working first, like hardware, should get a
+ * higher priority than things which layer on top of the hardware. For example,
+ * the GSM/CDMA settings should provide secrets before the PPP setting does,
+ * because a PIN is required to unlock the device before PPP can even start.
+ * Even settings without secrets should be assigned the right priority.
+ *
+ * 0: reserved for the Connection setting
+ *
+ * 1: hardware-related settings like Ethernet, Wi-Fi, InfiniBand, Bridge, etc.
+ * These priority 1 settings are also "base types", which means that at least
+ * one of them is required for the connection to be valid, and their name is
+ * valid in the 'type' property of the Connection setting.
+ *
+ * 2: hardware-related auxiliary settings that require a base setting to be
+ * successful first, like Wi-Fi security, 802.1x, etc.
+ *
+ * 3: hardware-independent settings that are required before IP connectivity
+ * can be established, like PPP, PPPoE, etc.
+ *
+ * 4: IP-level stuff
+ */
+void
+(_nm_register_setting) (const char *name,
+ const GType type,
+ const guint32 priority,
+ const GQuark error_quark)
+{
+ SettingInfo *info;
+
+ g_return_if_fail (name != NULL && *name);
+ g_return_if_fail (type != G_TYPE_INVALID);
+ g_return_if_fail (type != G_TYPE_NONE);
+ g_return_if_fail (error_quark != 0);
+ g_return_if_fail (priority <= 4);
+
+ _ensure_registered ();
+
+ if (G_LIKELY ((info = g_hash_table_lookup (registered_settings, name)))) {
+ g_return_if_fail (info->type == type);
+ g_return_if_fail (info->error_quark == error_quark);
+ g_return_if_fail (info->priority == priority);
+ g_return_if_fail (g_strcmp0 (info->name, name) == 0);
+ return;
+ }
+ g_return_if_fail (g_hash_table_lookup (registered_settings_by_type, &type) == NULL);
+
+ if (priority == 0)
+ g_assert_cmpstr (name, ==, NM_SETTING_CONNECTION_SETTING_NAME);
+
+ info = g_slice_new0 (SettingInfo);
+ info->type = type;
+ info->priority = priority;
+ info->error_quark = error_quark;
+ info->name = name;
+ g_hash_table_insert (registered_settings, (void *) info->name, info);
+ g_hash_table_insert (registered_settings_by_type, &info->type, info);
+}
+
+static const SettingInfo *
+_nm_setting_lookup_setting_by_type (GType type)
+{
+ _ensure_registered ();
+ return g_hash_table_lookup (registered_settings_by_type, &type);
+}
+
+static guint32
+_get_setting_type_priority (GType type)
+{
+ const SettingInfo *info;
+
+ g_return_val_if_fail (g_type_is_a (type, NM_TYPE_SETTING), G_MAXUINT32);
+
+ info = _nm_setting_lookup_setting_by_type (type);
+ return info->priority;
+}
+
+gboolean
+_nm_setting_type_is_base_type (GType type)
+{
+ /* Historical oddity: PPPoE is a base-type even though it's not
+ * priority 1. It needs to be sorted *after* lower-level stuff like
+ * Wi-Fi security or 802.1x for secrets, but it's still allowed as a
+ * base type.
+ */
+ return _get_setting_type_priority (type) == 1 || (type == NM_TYPE_SETTING_PPPOE);
+}
+
+gboolean
+_nm_setting_is_base_type (NMSetting *setting)
+{
+ return _nm_setting_type_is_base_type (G_OBJECT_TYPE (setting));
+}
+
+GType
+_nm_setting_lookup_setting_type (const char *name)
+{
+ SettingInfo *info;
+
+ g_return_val_if_fail (name != NULL, G_TYPE_NONE);
+
+ _ensure_registered ();
+
+ info = g_hash_table_lookup (registered_settings, name);
+ return info ? info->type : G_TYPE_INVALID;
+}
+
+GType
+_nm_setting_lookup_setting_type_by_quark (GQuark error_quark)
+{
+ SettingInfo *info;
+ GHashTableIter iter;
+
+ _ensure_registered ();
+
+ g_hash_table_iter_init (&iter, registered_settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &info)) {
+ if (info->error_quark == error_quark)
+ return info->type;
+ }
+ return G_TYPE_INVALID;
+}
+
+gint
+_nm_setting_compare_priority (gconstpointer a, gconstpointer b)
+{
+ guint32 prio_a, prio_b;
+
+ prio_a = _get_setting_type_priority (G_OBJECT_TYPE (a));
+ prio_b = _get_setting_type_priority (G_OBJECT_TYPE (b));
+
+ if (prio_a < prio_b)
+ return -1;
+ else if (prio_a == prio_b)
+ return 0;
+ return 1;
+}
+
+/*************************************************************/
+
static void
destroy_gvalue (gpointer data)
{
@@ -104,7 +303,6 @@ nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
guint n_property_specs;
guint i;
- g_return_val_if_fail (setting != NULL, NULL);
g_return_val_if_fail (NM_IS_SETTING (setting), NULL);
property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs);
@@ -121,7 +319,8 @@ nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
GParamSpec *prop_spec = property_specs[i];
GValue *value;
- if (!(prop_spec->flags & NM_SETTING_PARAM_SERIALIZE))
+ /* 'name' doesn't get serialized */
+ if (strcmp (g_param_spec_get_name (prop_spec), NM_SETTING_NAME) == 0)
continue;
if ( (flags & NM_SETTING_HASH_FLAG_NO_SECRETS)
@@ -144,8 +343,8 @@ nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
}
g_free (property_specs);
- /* Don't return empty hashes */
- if (g_hash_table_size (hash) < 1) {
+ /* Don't return empty hashes, except for base types */
+ if (g_hash_table_size (hash) < 1 && !_nm_setting_is_base_type (setting)) {
g_hash_table_destroy (hash);
hash = NULL;
}
@@ -153,39 +352,6 @@ nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
return hash;
}
-typedef struct {
- GObjectClass *class;
- guint n_params;
- GParameter *params;
-} NMSettingFromHashInfo;
-
-static void
-one_property_cb (gpointer key, gpointer val, gpointer user_data)
-{
- const char *prop_name = (char *) key;
- GValue *src_value = (GValue *) val;
- NMSettingFromHashInfo *info = (NMSettingFromHashInfo *) user_data;
- GValue *dst_value = &info->params[info->n_params].value;
- GParamSpec *param_spec;
-
- param_spec = g_object_class_find_property (info->class, prop_name);
- if (!param_spec || !(param_spec->flags & NM_SETTING_PARAM_SERIALIZE)) {
- /* Oh, we're so nice and only warn, maybe it should be a fatal error? */
- g_warning ("Ignoring invalid property '%s'", prop_name);
- return;
- }
-
- g_value_init (dst_value, G_VALUE_TYPE (src_value));
- if (g_value_transform (src_value, dst_value)) {
- info->params[info->n_params].name = prop_name;
- info->n_params++;
- } else {
- g_warning ("Ignoring property '%s' with invalid type (%s)",
- prop_name, G_VALUE_TYPE_NAME (src_value));
- g_value_unset (dst_value);
- }
-}
-
/**
* nm_setting_new_from_hash:
* @setting_type: the #NMSetting type which the hash contains properties for
@@ -205,28 +371,53 @@ one_property_cb (gpointer key, gpointer val, gpointer user_data)
NMSetting *
nm_setting_new_from_hash (GType setting_type, GHashTable *hash)
{
+ GHashTableIter iter;
NMSetting *setting;
- NMSettingFromHashInfo info;
+ const char *prop_name;
+ GValue *src_value;
+ GObjectClass *class;
+ guint n_params = 0;
+ GParameter *params;
int i;
g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (setting_type), NULL);
g_return_val_if_fail (hash != NULL, NULL);
- info.class = g_type_class_ref (setting_type);
- info.n_params = 0;
- info.params = g_new0 (GParameter, g_hash_table_size (hash));
+ /* g_type_class_ref() ensures the setting class is created if it hasn't
+ * already been used.
+ */
+ class = g_type_class_ref (setting_type);
+ params = g_new0 (GParameter, g_hash_table_size (hash));
+
+ g_hash_table_iter_init (&iter, hash);
+ while (g_hash_table_iter_next (&iter, (gpointer) &prop_name, (gpointer) &src_value)) {
+ GValue *dst_value = &params[n_params].value;
+ GParamSpec *param_spec;
+
+ param_spec = g_object_class_find_property (class, prop_name);
+ if (!param_spec) {
+ /* Oh, we're so nice and only warn, maybe it should be a fatal error? */
+ g_warning ("Ignoring invalid property '%s'", prop_name);
+ continue;
+ }
- g_hash_table_foreach (hash, one_property_cb, &info);
+ g_value_init (dst_value, G_VALUE_TYPE (src_value));
+ if (g_value_transform (src_value, dst_value))
+ params[n_params++].name = prop_name;
+ else {
+ g_warning ("Ignoring property '%s' with invalid type (%s)",
+ prop_name, G_VALUE_TYPE_NAME (src_value));
+ g_value_unset (dst_value);
+ }
+ }
- setting = (NMSetting *) g_object_newv (setting_type, info.n_params, info.params);
+ setting = (NMSetting *) g_object_newv (setting_type, n_params, params);
- for (i = 0; i < info.n_params; i++) {
- GValue *v = &info.params[i].value;
- g_value_unset (v);
- }
+ for (i = 0; i < n_params; i++)
+ g_value_unset (&params[i].value);
- g_free (info.params);
- g_type_class_unref (info.class);
+ g_free (params);
+ g_type_class_unref (class);
return setting;
}
@@ -238,7 +429,7 @@ duplicate_setting (NMSetting *setting,
GParamFlags flags,
gpointer user_data)
{
- if (flags & G_PARAM_WRITABLE)
+ if ((flags & (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)) == G_PARAM_WRITABLE)
g_object_set_property (G_OBJECT (user_data), name, value);
}
@@ -267,6 +458,28 @@ nm_setting_duplicate (NMSetting *setting)
return NM_SETTING (dup);
}
+static gint
+find_setting_by_name (gconstpointer a, gconstpointer b)
+{
+ NMSetting *setting = NM_SETTING (a);
+ const char *str = (const char *) b;
+
+ return strcmp (nm_setting_get_name (setting), str);
+}
+
+NMSetting *
+nm_setting_find_in_list (GSList *settings_list,
+ const char *setting_name)
+{
+ GSList *found;
+
+ found = g_slist_find_custom (settings_list, setting_name, find_setting_by_name);
+ if (found)
+ return found->data;
+ else
+ return NULL;
+}
+
/**
* nm_setting_get_name:
* @setting: the #NMSetting
@@ -279,9 +492,12 @@ nm_setting_duplicate (NMSetting *setting)
const char *
nm_setting_get_name (NMSetting *setting)
{
- g_return_val_if_fail (NM_IS_SETTING (setting), NULL);
+ NMSettingPrivate *priv;
- return NM_SETTING_GET_PRIVATE (setting)->name;
+ g_return_val_if_fail (NM_IS_SETTING (setting), NULL);
+ priv = NM_SETTING_GET_PRIVATE (setting);
+ _ensure_setting_info (setting, priv);
+ return priv->info->name;
}
/**
@@ -302,8 +518,7 @@ gboolean
nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error)
{
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
- if (error)
- g_return_val_if_fail (*error == NULL, FALSE);
+ g_return_val_if_fail (!error || *error == NULL, FALSE);
if (NM_SETTING_GET_CLASS (setting)->verify)
return NM_SETTING_GET_CLASS (setting)->verify (setting, all_settings, error);
@@ -317,8 +532,8 @@ compare_property (NMSetting *setting,
const GParamSpec *prop_spec,
NMSettingCompareFlags flags)
{
- GValue value1 = { 0 };
- GValue value2 = { 0 };
+ GValue value1 = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
gboolean different;
/* Handle compare flags */
@@ -398,6 +613,9 @@ nm_setting_compare (NMSetting *a,
&& (prop_spec->flags & (NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_SECRET)))
continue;
+ if ((flags & NM_SETTING_COMPARE_FLAG_INFERRABLE) && !(prop_spec->flags & NM_SETTING_PARAM_INFERRABLE))
+ continue;
+
if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS)
&& (prop_spec->flags & NM_SETTING_PARAM_SECRET))
continue;
@@ -420,6 +638,9 @@ should_compare_prop (NMSetting *setting,
&& (prop_flags & (NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_SECRET)))
return FALSE;
+ if ((comp_flags & NM_SETTING_COMPARE_FLAG_INFERRABLE) && !(prop_flags & NM_SETTING_PARAM_INFERRABLE))
+ return FALSE;
+
if (prop_flags & NM_SETTING_PARAM_SECRET) {
NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
@@ -481,7 +702,6 @@ nm_setting_diff (NMSetting *a,
gboolean results_created = FALSE;
g_return_val_if_fail (results != NULL, FALSE);
- g_return_val_if_fail (a != NULL, FALSE);
g_return_val_if_fail (NM_IS_SETTING (a), FALSE);
if (b) {
g_return_val_if_fail (NM_IS_SETTING (b), FALSE);
@@ -512,7 +732,6 @@ nm_setting_diff (NMSetting *a,
for (i = 0; i < n_property_specs; i++) {
GParamSpec *prop_spec = property_specs[i];
- GValue a_value = { 0 }, b_value = { 0 };
NMSettingDiffResult r = NM_SETTING_DIFF_RESULT_UNKNOWN, tmp;
gboolean different = TRUE;
@@ -523,22 +742,22 @@ nm_setting_diff (NMSetting *a,
continue;
if (b) {
- g_value_init (&a_value, prop_spec->value_type);
- g_object_get_property (G_OBJECT (a), prop_spec->name, &a_value);
-
- g_value_init (&b_value, prop_spec->value_type);
- g_object_get_property (G_OBJECT (b), prop_spec->name, &b_value);
-
- different = !!g_param_values_cmp (prop_spec, &a_value, &b_value);
+ different = !NM_SETTING_GET_CLASS (a)->compare_property (a, b, prop_spec, flags);
if (different) {
- if (!g_param_value_defaults (prop_spec, &a_value))
+ GValue value = G_VALUE_INIT;
+
+ g_value_init (&value, prop_spec->value_type);
+ g_object_get_property (G_OBJECT (a), prop_spec->name, &value);
+ if (!g_param_value_defaults (prop_spec, &value))
r |= a_result;
- if (!g_param_value_defaults (prop_spec, &b_value))
+
+ g_value_reset (&value);
+ g_object_get_property (G_OBJECT (b), prop_spec->name, &value);
+ if (!g_param_value_defaults (prop_spec, &value))
r |= b_result;
- }
- g_value_unset (&a_value);
- g_value_unset (&b_value);
+ g_value_unset (&value);
+ }
} else
r = a_result; /* only in A */
@@ -582,7 +801,7 @@ nm_setting_enumerate_values (NMSetting *setting,
property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs);
for (i = 0; i < n_property_specs; i++) {
GParamSpec *prop_spec = property_specs[i];
- GValue value = { 0 };
+ GValue value = G_VALUE_INIT;
g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (prop_spec));
g_object_get_property (G_OBJECT (setting), prop_spec->name, &value);
@@ -604,46 +823,68 @@ nm_setting_enumerate_values (NMSetting *setting,
void
nm_setting_clear_secrets (NMSetting *setting)
{
+ _nm_setting_clear_secrets (setting);
+}
+
+gboolean
+_nm_setting_clear_secrets (NMSetting *setting)
+{
GParamSpec **property_specs;
guint n_property_specs;
guint i;
+ gboolean changed = FALSE;
- g_return_if_fail (NM_IS_SETTING (setting));
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs);
for (i = 0; i < n_property_specs; i++) {
GParamSpec *prop_spec = property_specs[i];
- GValue value = { 0 };
if (prop_spec->flags & NM_SETTING_PARAM_SECRET) {
+ GValue value = G_VALUE_INIT;
+
g_value_init (&value, prop_spec->value_type);
- g_param_value_set_default (prop_spec, &value);
- g_object_set_property (G_OBJECT (setting), prop_spec->name, &value);
+ g_object_get_property (G_OBJECT (setting), prop_spec->name, &value);
+ if (!g_param_value_defaults (prop_spec, &value)) {
+ g_param_value_set_default (prop_spec, &value);
+ g_object_set_property (G_OBJECT (setting), prop_spec->name, &value);
+ changed = TRUE;
+ }
g_value_unset (&value);
}
}
g_free (property_specs);
+
+ return changed;
}
-static void
+static gboolean
clear_secrets_with_flags (NMSetting *setting,
GParamSpec *pspec,
NMSettingClearSecretsWithFlagsFn func,
gpointer user_data)
{
- GValue value = { 0 };
NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+ gboolean changed = FALSE;
/* Clear the secret if the user function says to do so */
nm_setting_get_secret_flags (setting, pspec->name, &flags, NULL);
if (func (setting, pspec->name, flags, user_data) == TRUE) {
+ GValue value = G_VALUE_INIT;
+
g_value_init (&value, pspec->value_type);
- g_param_value_set_default (pspec, &value);
- g_object_set_property (G_OBJECT (setting), pspec->name, &value);
+ g_object_get_property (G_OBJECT (setting), pspec->name, &value);
+ if (!g_param_value_defaults (pspec, &value)) {
+ g_param_value_set_default (pspec, &value);
+ g_object_set_property (G_OBJECT (setting), pspec->name, &value);
+ changed = TRUE;
+ }
g_value_unset (&value);
}
+
+ return changed;
}
/**
@@ -660,25 +901,35 @@ nm_setting_clear_secrets_with_flags (NMSetting *setting,
NMSettingClearSecretsWithFlagsFn func,
gpointer user_data)
{
+ _nm_setting_clear_secrets_with_flags (setting, func, user_data);
+}
+
+gboolean
+_nm_setting_clear_secrets_with_flags (NMSetting *setting,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data)
+{
GParamSpec **property_specs;
guint n_property_specs;
guint i;
+ gboolean changed = FALSE;
- g_return_if_fail (setting);
- g_return_if_fail (NM_IS_SETTING (setting));
- g_return_if_fail (func != NULL);
+ g_return_val_if_fail (setting, FALSE);
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (func != NULL, FALSE);
property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs);
for (i = 0; i < n_property_specs; i++) {
if (property_specs[i]->flags & NM_SETTING_PARAM_SECRET) {
- NM_SETTING_GET_CLASS (setting)->clear_secrets_with_flags (setting,
- property_specs[i],
- func,
- user_data);
+ changed |= NM_SETTING_GET_CLASS (setting)->clear_secrets_with_flags (setting,
+ property_specs[i],
+ func,
+ user_data);
}
}
g_free (property_specs);
+ return changed;
}
/**
@@ -708,12 +959,11 @@ nm_setting_need_secrets (NMSetting *setting)
return secrets;
}
-static gboolean
+static int
update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **error)
{
GParamSpec *prop_spec;
- GValue transformed_value = { 0 };
- gboolean success = FALSE;
+ GValue transformed_value = G_VALUE_INIT;
prop_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), key);
if (!prop_spec) {
@@ -721,27 +971,40 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_NOT_FOUND,
"%s", key);
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
/* Silently ignore non-secrets */
if (!(prop_spec->flags & NM_SETTING_PARAM_SECRET))
- return TRUE;
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
if (g_value_type_compatible (G_VALUE_TYPE (value), G_PARAM_SPEC_VALUE_TYPE (prop_spec))) {
+ if (G_VALUE_HOLDS_STRING (value) && G_IS_PARAM_SPEC_STRING (prop_spec)) {
+ /* String is expected to be a common case. Handle it specially and check whether
+ * the value is already set. Otherwise, we just reset the property and
+ * assume the value got modified. */
+ char *v;
+
+ g_object_get (G_OBJECT (setting), prop_spec->name, &v, NULL);
+ if (g_strcmp0 (v, g_value_get_string (value)) == 0) {
+ g_free (v);
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
+ }
+ g_free (v);
+ }
g_object_set_property (G_OBJECT (setting), prop_spec->name, value);
- success = TRUE;
- } else if (g_value_transform (value, &transformed_value)) {
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
+ }
+ if (g_value_transform (value, &transformed_value)) {
g_object_set_property (G_OBJECT (setting), prop_spec->name, &transformed_value);
g_value_unset (&transformed_value);
- success = TRUE;
- } else {
- g_set_error (error,
- NM_SETTING_ERROR,
- NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
- "%s", key);
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
}
- return success;
+ g_set_error (error,
+ NM_SETTING_ERROR,
+ NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
+ "%s", key);
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
/**
@@ -760,29 +1023,41 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
gboolean
nm_setting_update_secrets (NMSetting *setting, GHashTable *secrets, GError **error)
{
+ return _nm_setting_update_secrets (setting, secrets, error) != NM_SETTING_UPDATE_SECRET_ERROR;
+}
+
+NMSettingUpdateSecretResult
+_nm_setting_update_secrets (NMSetting *setting, GHashTable *secrets, GError **error)
+{
GHashTableIter iter;
gpointer key, data;
GError *tmp_error = NULL;
+ NMSettingUpdateSecretResult result = NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
- g_return_val_if_fail (setting != NULL, FALSE);
- g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
- g_return_val_if_fail (secrets != NULL, FALSE);
+ g_return_val_if_fail (NM_IS_SETTING (setting), NM_SETTING_UPDATE_SECRET_ERROR);
+ g_return_val_if_fail (secrets != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
if (error)
- g_return_val_if_fail (*error == NULL, FALSE);
+ g_return_val_if_fail (*error == NULL, NM_SETTING_UPDATE_SECRET_ERROR);
g_hash_table_iter_init (&iter, secrets);
while (g_hash_table_iter_next (&iter, &key, &data)) {
+ int success;
const char *secret_key = (const char *) key;
GValue *secret_value = (GValue *) data;
- NM_SETTING_GET_CLASS (setting)->update_one_secret (setting, secret_key, secret_value, &tmp_error);
- if (tmp_error) {
+ success = NM_SETTING_GET_CLASS (setting)->update_one_secret (setting, secret_key, secret_value, &tmp_error);
+ g_assert (!((success == NM_SETTING_UPDATE_SECRET_ERROR) ^ (!!tmp_error)));
+
+ if (success == NM_SETTING_UPDATE_SECRET_ERROR) {
g_propagate_error (error, tmp_error);
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
+
+ if (success == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ result = NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
}
- return TRUE;
+ return result;
}
static gboolean
@@ -851,7 +1126,6 @@ nm_setting_get_secret_flags (NMSetting *setting,
NMSettingSecretFlags *out_flags,
GError **error)
{
- g_return_val_if_fail (setting != NULL, FALSE);
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
g_return_val_if_fail (secret_name != NULL, FALSE);
@@ -883,7 +1157,7 @@ set_secret_flags (NMSetting *setting,
* @flags: the #NMSettingSecretFlags for the secret
* @error: location to store error, or %NULL
*
- * For a given secret, retrieves the #NMSettingSecretFlags describing how to
+ * For a given secret, stores the #NMSettingSecretFlags describing how to
* handle that secret.
*
* Returns: %TRUE on success (if the given secret name was a valid property of
@@ -895,7 +1169,6 @@ nm_setting_set_secret_flags (NMSetting *setting,
NMSettingSecretFlags flags,
GError **error)
{
- g_return_val_if_fail (setting != NULL, FALSE);
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
g_return_val_if_fail (secret_name != NULL, FALSE);
g_return_val_if_fail (flags <= NM_SETTING_SECRET_FLAGS_ALL, FALSE);
@@ -934,11 +1207,13 @@ nm_setting_to_string (NMSetting *setting)
for (i = 0; i < n_property_specs; i++) {
GParamSpec *prop_spec = property_specs[i];
- GValue value = { 0 };
+ GValue value = G_VALUE_INIT;
char *value_str;
- gboolean is_serializable;
gboolean is_default;
+ if (strcmp (prop_spec->name, NM_SETTING_NAME) == 0)
+ continue;
+
g_value_init (&value, prop_spec->value_type);
g_object_get_property (G_OBJECT (setting), prop_spec->name, &value);
@@ -946,22 +1221,14 @@ nm_setting_to_string (NMSetting *setting)
g_string_append_printf (string, "\t%s : %s", prop_spec->name, value_str);
g_free (value_str);
- is_serializable = prop_spec->flags & NM_SETTING_PARAM_SERIALIZE;
is_default = g_param_value_defaults (prop_spec, &value);
-
g_value_unset (&value);
- if (is_serializable || is_default) {
- g_string_append (string, " (");
-
- if (is_serializable)
- g_string_append_c (string, 's');
- if (is_default)
- g_string_append_c (string, 'd');
-
- g_string_append_c (string, ')');
- }
-
+ g_string_append (string, " (");
+ g_string_append_c (string, 's');
+ if (is_default)
+ g_string_append_c (string, 'd');
+ g_string_append_c (string, ')');
g_string_append_c (string, '\n');
}
@@ -1001,48 +1268,34 @@ nm_setting_init (NMSetting *setting)
static GObject*
constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
{
GObject *object;
- NMSettingPrivate *priv;
object = G_OBJECT_CLASS (nm_setting_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
- if (!object)
- return NULL;
-
- priv = NM_SETTING_GET_PRIVATE (object);
- if (!priv->name) {
- g_warning ("Setting name is not set.");
- g_object_unref (object);
- object = NULL;
- }
+ n_construct_params,
+ construct_params);
+ _ensure_setting_info (object, NM_SETTING_GET_PRIVATE (object));
return object;
}
static void
-finalize (GObject *object)
-{
- NMSettingPrivate *priv = NM_SETTING_GET_PRIVATE (object);
-
- g_free (priv->name);
-
- G_OBJECT_CLASS (nm_setting_parent_class)->finalize (object);
-}
-
-static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingPrivate *priv = NM_SETTING_GET_PRIVATE (object);
switch (prop_id) {
case PROP_NAME:
- g_free (priv->name);
- priv->name = g_value_dup_string (value);
+ /* The setter for NAME is deprecated and should not be used anymore.
+ * Keep the setter for NAME to remain backward compatible.
+ * Only assert that the caller does not try to set the name to a different value
+ * then the registered name, which would be extra wrong.
+ **/
+ _ensure_setting_info (object, priv);
+ g_return_if_fail (!g_strcmp0 (priv->info->name, g_value_get_string (value)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1052,7 +1305,7 @@ set_property (GObject *object, guint prop_id,
static void
get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
NMSetting *setting = NM_SETTING (object);
@@ -1077,7 +1330,6 @@ nm_setting_class_init (NMSettingClass *setting_class)
object_class->constructor = constructor;
object_class->set_property = set_property;
object_class->get_property = get_property;
- object_class->finalize = finalize;
setting_class->update_one_secret = update_one_secret;
setting_class->get_secret_flags = get_secret_flags;
@@ -1092,7 +1344,7 @@ nm_setting_class_init (NMSettingClass *setting_class)
*
* The setting's name, which uniquely identifies the setting within the
* connection. Each setting type has a name unique to that type, for
- * example 'ppp' or 'wireless' or 'wired'.
+ * example "ppp" or "wireless" or "wired".
**/
g_object_class_install_property
(object_class, PROP_NAME,
diff --git a/libnm-util/nm-setting.h b/libnm-util/nm-setting.h
index b717b65ac..51e7de48a 100644
--- a/libnm-util/nm-setting.h
+++ b/libnm-util/nm-setting.h
@@ -29,6 +29,8 @@
#include <glib.h>
#include <glib-object.h>
+#include <nm-version.h>
+
G_BEGIN_DECLS
#define NM_TYPE_SETTING (nm_setting_get_type ())
@@ -64,7 +66,7 @@ typedef enum
GQuark nm_setting_error_quark (void);
-/* The property of the #NMSetting should be serialized */
+/* DEPRECATED AND UNUSED */
#define NM_SETTING_PARAM_SERIALIZE (1 << (0 + G_PARAM_USER_SHIFT))
/* The property of the #NMSetting is required for the setting to be valid */
@@ -78,6 +80,9 @@ GQuark nm_setting_error_quark (void);
*/
#define NM_SETTING_PARAM_FUZZY_IGNORE (1 << (3 + G_PARAM_USER_SHIFT))
+/* Note: all non-glib GParamFlags bits are reserved by NetworkManager */
+
+
#define NM_SETTING_NAME "name"
/**
@@ -134,6 +139,8 @@ typedef enum {
NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS = 0x00000004,
NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS = 0x00000008,
NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS = 0x00000010
+
+ /* 0x80000000 is used for a private flag */
} NMSettingCompareFlags;
@@ -172,7 +179,7 @@ typedef struct {
GPtrArray *(*need_secrets) (NMSetting *setting);
- gboolean (*update_one_secret) (NMSetting *setting,
+ int (*update_one_secret) (NMSetting *setting,
const char *key,
GValue *value,
GError **error);
@@ -195,7 +202,7 @@ typedef struct {
const GParamSpec *prop_spec,
NMSettingCompareFlags flags);
- void (*clear_secrets_with_flags) (NMSetting *setting,
+ gboolean (*clear_secrets_with_flags) (NMSetting *setting,
GParamSpec *pspec,
NMSettingClearSecretsWithFlagsFn func,
gpointer user_data);
diff --git a/libnm-util/nm-utils-enum-types.c b/libnm-util/nm-utils-enum-types.c
index 7df362beb..9b3eb4f4d 100644
--- a/libnm-util/nm-utils-enum-types.c
+++ b/libnm-util/nm-utils-enum-types.c
@@ -11,9 +11,12 @@
#include "nm-setting-adsl.h"
#include "nm-setting-bluetooth.h"
#include "nm-setting-bond.h"
+#include "nm-setting-team.h"
+#include "nm-setting-team-port.h"
#include "nm-setting-bridge.h"
#include "nm-setting-bridge-port.h"
#include "nm-setting-connection.h"
+#include "nm-setting-dcb.h"
#include "nm-setting-infiniband.h"
#include "nm-setting-ip4-config.h"
#include "nm-setting-vlan.h"
@@ -21,6 +24,7 @@
#include "nm-setting-ppp.h"
#include "nm-setting-pppoe.h"
#include "nm-setting-serial.h"
+#include "nm-setting-generic.h"
#include "nm-setting-gsm.h"
#include "nm-setting-cdma.h"
#include "nm-setting-olpc-mesh.h"
@@ -282,6 +286,46 @@ nm_setting_bond_error_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_setting_team_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_SETTING_TEAM_ERROR_UNKNOWN, "NM_SETTING_TEAM_ERROR_UNKNOWN", "UnknownError" },
+ { NM_SETTING_TEAM_ERROR_INVALID_PROPERTY, "NM_SETTING_TEAM_ERROR_INVALID_PROPERTY", "InvalidProperty" },
+ { NM_SETTING_TEAM_ERROR_MISSING_PROPERTY, "NM_SETTING_TEAM_ERROR_MISSING_PROPERTY", "MissingProperty" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingTeamError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_team_port_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_SETTING_TEAM_PORT_ERROR_UNKNOWN, "NM_SETTING_TEAM_PORT_ERROR_UNKNOWN", "UnknownError" },
+ { NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY, "NM_SETTING_TEAM_PORT_ERROR_INVALID_PROPERTY", "InvalidProperty" },
+ { NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY, "NM_SETTING_TEAM_PORT_ERROR_MISSING_PROPERTY", "MissingProperty" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingTeamPortError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_setting_bridge_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -344,6 +388,47 @@ nm_setting_connection_error_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_setting_dcb_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_SETTING_DCB_ERROR_UNKNOWN, "NM_SETTING_DCB_ERROR_UNKNOWN", "UnknownError" },
+ { NM_SETTING_DCB_ERROR_INVALID_PROPERTY, "NM_SETTING_DCB_ERROR_INVALID_PROPERTY", "InvalidProperty" },
+ { NM_SETTING_DCB_ERROR_MISSING_PROPERTY, "NM_SETTING_DCB_ERROR_MISSING_PROPERTY", "MissingProperty" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingDcbError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_dcb_flags_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_SETTING_DCB_FLAG_NONE, "NM_SETTING_DCB_FLAG_NONE", "none" },
+ { NM_SETTING_DCB_FLAG_ENABLE, "NM_SETTING_DCB_FLAG_ENABLE", "enable" },
+ { NM_SETTING_DCB_FLAG_ADVERTISE, "NM_SETTING_DCB_FLAG_ADVERTISE", "advertise" },
+ { NM_SETTING_DCB_FLAG_WILLING, "NM_SETTING_DCB_FLAG_WILLING", "willing" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingDcbFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_setting_infiniband_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -550,6 +635,26 @@ nm_setting_serial_error_get_type (void)
return g_define_type_id__volatile;
}
GType
+nm_setting_generic_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_SETTING_GENERIC_ERROR_UNKNOWN, "NM_SETTING_GENERIC_ERROR_UNKNOWN", "UnknownError" },
+ { NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY, "NM_SETTING_GENERIC_ERROR_INVALID_PROPERTY", "InvalidProperty" },
+ { NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY, "NM_SETTING_GENERIC_ERROR_MISSING_PROPERTY", "MissingProperty" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingGenericError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
nm_setting_gsm_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
diff --git a/libnm-util/nm-utils-enum-types.h b/libnm-util/nm-utils-enum-types.h
index 44737b928..9b14a5d3c 100644
--- a/libnm-util/nm-utils-enum-types.h
+++ b/libnm-util/nm-utils-enum-types.h
@@ -33,12 +33,20 @@ GType nm_setting_bluetooth_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_BLUETOOTH_ERROR (nm_setting_bluetooth_error_get_type ())
GType nm_setting_bond_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_BOND_ERROR (nm_setting_bond_error_get_type ())
+GType nm_setting_team_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_TEAM_ERROR (nm_setting_team_error_get_type ())
+GType nm_setting_team_port_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_TEAM_PORT_ERROR (nm_setting_team_port_error_get_type ())
GType nm_setting_bridge_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_BRIDGE_ERROR (nm_setting_bridge_error_get_type ())
GType nm_setting_bridge_port_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_BRIDGE_PORT_ERROR (nm_setting_bridge_port_error_get_type ())
GType nm_setting_connection_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_CONNECTION_ERROR (nm_setting_connection_error_get_type ())
+GType nm_setting_dcb_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_DCB_ERROR (nm_setting_dcb_error_get_type ())
+GType nm_setting_dcb_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_DCB_FLAGS (nm_setting_dcb_flags_get_type ())
GType nm_setting_infiniband_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_INFINIBAND_ERROR (nm_setting_infiniband_error_get_type ())
GType nm_setting_ip4_config_error_get_type (void) G_GNUC_CONST;
@@ -59,6 +67,8 @@ GType nm_setting_pppoe_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_PPPOE_ERROR (nm_setting_pppoe_error_get_type ())
GType nm_setting_serial_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_SERIAL_ERROR (nm_setting_serial_error_get_type ())
+GType nm_setting_generic_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_GENERIC_ERROR (nm_setting_generic_error_get_type ())
GType nm_setting_gsm_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SETTING_GSM_ERROR (nm_setting_gsm_error_get_type ())
GType nm_setting_gsm_network_type_get_type (void) G_GNUC_CONST;
diff --git a/libnm-util/nm-utils-private.h b/libnm-util/nm-utils-private.h
index fa1e3a016..9d73a939f 100644
--- a/libnm-util/nm-utils-private.h
+++ b/libnm-util/nm-utils-private.h
@@ -26,12 +26,45 @@
#ifndef __NM_UTILS_PRIVATE_H__
#define __NM_UTILS_PRIVATE_H__
+#include "nm-setting-private.h"
+
gboolean _nm_utils_string_in_list (const char *str,
const char **valid_strings);
gboolean _nm_utils_string_slist_validate (GSList *list,
const char **valid_values);
-void _nm_utils_register_value_transformations (void);
+gboolean _nm_utils_gvalue_array_validate (GValueArray *elements,
+ guint n_expected, ...);
+
+void _nm_value_transforms_register (void);
+
+/***********************************************************/
+
+typedef struct NMUtilsPrivateData {
+ const char * (*nm_setting_ip4_config_get_address_label) (NMSettingIP4Config *setting,
+ guint32 i);
+ gboolean (*nm_setting_ip4_config_add_address_with_label) (NMSettingIP4Config *setting,
+ NMIP4Address *address,
+ const char *label);
+} NMUtilsPrivateData;
+
+const NMUtilsPrivateData *nm_utils_get_private (void);
+
+/**
+ * NM_UTILS_PRIVATE_CALL:
+ * @call: a call to a private libnm-util function
+ *
+ * Used to call private libnm-util functions. Eg, if there was a
+ * private function called nm_foo_get_bar(), you could call it like:
+ *
+ * bar = NM_UTILS_PRIVATE_CALL (nm_foo_get_bar (foo, x, y, z));
+ *
+ * This macro only exists inside the NetworkManager source tree and
+ * is not part of the public API.
+ *
+ * Since: 0.9.10
+ */
+#define NM_UTILS_PRIVATE_CALL(call) (nm_utils_get_private ()->call)
#endif
diff --git a/libnm-util/nm-utils.c b/libnm-util/nm-utils.c
index ef5b9781b..0176d9c3c 100644
--- a/libnm-util/nm-utils.c
+++ b/libnm-util/nm-utils.c
@@ -21,30 +21,22 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2005 - 2012 Red Hat, Inc.
+ * (C) Copyright 2005 - 2013 Red Hat, Inc.
*/
#include "config.h"
+
#include <string.h>
-#include <stdio.h>
#include <stdlib.h>
-#include <errno.h>
-#include <arpa/inet.h>
#include <netinet/ether.h>
#include <linux/if_infiniband.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-#include <dbus/dbus-glib.h>
#include <uuid/uuid.h>
#include "nm-utils.h"
#include "nm-utils-private.h"
-#include "NetworkManager.h"
+#include "nm-glib-compat.h"
#include "nm-dbus-glib-types.h"
-#include "nm-setting-ip4-config.h"
-#include "nm-setting-ip6-config.h"
+#include "nm-setting-private.h"
#include "crypto.h"
/**
@@ -52,7 +44,7 @@
* @short_description: Utility functions
* @include: nm-utils.h
*
- * A collection of utility functions for working SSIDs, IP addresses, WiFi
+ * A collection of utility functions for working SSIDs, IP addresses, Wi-Fi
* access points and devices, among other things.
*/
@@ -239,7 +231,7 @@ nm_utils_init (GError **error)
if (!crypto_init (error))
return FALSE;
- _nm_utils_register_value_transformations ();
+ _nm_value_transforms_register ();
}
return TRUE;
}
@@ -267,7 +259,7 @@ nm_utils_deinit (void)
* nm_utils_ssid_to_utf8:
* @ssid: a byte array containing the SSID data
*
- * WiFi SSIDs are byte arrays, they are _not_ strings. Thus, an SSID may
+ * Wi-Fi SSIDs are byte arrays, they are _not_ strings. Thus, an SSID may
* contain embedded NULLs and other unprintable characters. Often it is
* useful to print the SSID out for debugging purposes, but that should be the
* _only_ use of this function. Do not use this function for any persistent
@@ -425,7 +417,7 @@ nm_utils_same_ssid (const GByteArray * ssid1,
if (ssid1 == ssid2)
return TRUE;
- if ((ssid1 && !ssid2) || (!ssid1 && ssid2))
+ if (!ssid1 || !ssid2)
return FALSE;
ssid1_len = ssid1->len;
@@ -470,7 +462,7 @@ value_dup (gpointer key, gpointer val, gpointer user_data)
* nm_utils_gvalue_hash_dup:
* @hash: a #GHashTable mapping string:GValue
*
- * Utility function to duplicate a hash table of GValues.
+ * Utility function to duplicate a hash table of #GValues.
*
* Returns: (transfer container) (element-type utf8 GObject.Value): a newly allocated duplicated #GHashTable, caller must free the
* returned hash with g_hash_table_unref() or g_hash_table_destroy()
@@ -497,17 +489,13 @@ nm_utils_gvalue_hash_dup (GHashTable *hash)
* @elem_destroy_fn: user function called for each element in @list
*
* Utility function to free a #GSList.
+ *
+ * Deprecated: use g_slist_free_full().
**/
void
nm_utils_slist_free (GSList *list, GDestroyNotify elem_destroy_fn)
{
- if (!list)
- return;
-
- if (elem_destroy_fn)
- g_slist_foreach (list, (GFunc) elem_destroy_fn, NULL);
-
- g_slist_free (list);
+ g_slist_free_full (list, elem_destroy_fn);
}
gboolean
@@ -535,624 +523,28 @@ _nm_utils_string_slist_validate (GSList *list, const char **valid_values)
return TRUE;
}
-static void
-_nm_utils_convert_op_to_string (const GValue *src_value, GValue *dest_value)
-{
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_OBJECT_PATH));
-
- g_value_set_string (dest_value, (const char *) g_value_get_boxed (src_value));
-}
-
-static void
-_nm_utils_convert_strv_to_slist (const GValue *src_value, GValue *dest_value)
-{
- char **str;
- GSList *list = NULL;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), G_TYPE_STRV));
-
- str = (char **) g_value_get_boxed (src_value);
-
- while (str && str[i])
- list = g_slist_prepend (list, g_strdup (str[i++]));
-
- g_value_take_boxed (dest_value, g_slist_reverse (list));
-}
-
-static void
-_nm_utils_convert_strv_to_ptrarray (const GValue *src_value, GValue *dest_value)
-{
- char **str;
- GPtrArray *array = NULL;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), G_TYPE_STRV));
-
- str = (char **) g_value_get_boxed (src_value);
-
- array = g_ptr_array_sized_new (3);
- while (str && str[i])
- g_ptr_array_add (array, g_strdup (str[i++]));
-
- g_value_take_boxed (dest_value, array);
-}
-
-static void
-_nm_utils_convert_strv_to_string (const GValue *src_value, GValue *dest_value)
-{
- GSList *strings;
- GString *printable;
- GSList *iter;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_LIST_OF_STRING));
-
- strings = (GSList *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- for (iter = strings; iter; iter = g_slist_next (iter)) {
- if (iter != strings)
- g_string_append (printable, ", '");
- else
- g_string_append_c (printable, '\'');
- g_string_append (printable, iter->data);
- g_string_append_c (printable, '\'');
- }
- g_string_append_c (printable, ']');
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-_string_array_to_string (const GPtrArray *strings, GValue *dest_value)
+gboolean
+_nm_utils_gvalue_array_validate (GValueArray *elements, guint n_expected, ...)
{
- GString *printable;
+ va_list args;
+ GValue *tmp;
int i;
+ gboolean valid = FALSE;
- printable = g_string_new ("[");
- for (i = 0; strings && i < strings->len; i++) {
- if (i > 0)
- g_string_append (printable, ", '");
- else
- g_string_append_c (printable, '\'');
- g_string_append (printable, g_ptr_array_index (strings, i));
- g_string_append_c (printable, '\'');
- }
- g_string_append_c (printable, ']');
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-_nm_utils_convert_string_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- const GPtrArray *strings;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_STRING));
-
- strings = (const GPtrArray *) g_value_get_boxed (src_value);
- _string_array_to_string (strings, dest_value);
-}
-
-static void
-_nm_utils_convert_op_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- const GPtrArray *strings;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH));
-
- strings = (const GPtrArray *) g_value_get_boxed (src_value);
- _string_array_to_string (strings, dest_value);
-}
-
-static void
-_nm_utils_convert_uint_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- GArray *array;
- GString *printable;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_UINT_ARRAY));
-
- array = (GArray *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- while (array && (i < array->len)) {
- char buf[INET_ADDRSTRLEN + 1];
- struct in_addr addr;
-
- if (i > 0)
- g_string_append (printable, ", ");
-
- memset (buf, 0, sizeof (buf));
- addr.s_addr = g_array_index (array, guint32, i++);
- if (!inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN))
- g_warning ("%s: error converting IP4 address 0x%X",
- __func__, ntohl (addr.s_addr));
- g_string_append_printf (printable, "%u (%s)", addr.s_addr, buf);
- }
- g_string_append_c (printable, ']');
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-_nm_utils_convert_ip4_addr_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- GPtrArray *ptr_array;
- GString *printable;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT));
-
- ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- while (ptr_array && (i < ptr_array->len)) {
- GArray *array;
- char buf[INET_ADDRSTRLEN + 1];
- struct in_addr addr;
- gboolean is_addr; /* array contains address x route */
-
- if (i > 0)
- g_string_append (printable, ", ");
-
- g_string_append (printable, "{ ");
- array = (GArray *) g_ptr_array_index (ptr_array, i++);
- if (array->len < 2) {
- g_string_append (printable, "invalid");
- continue;
- }
- is_addr = (array->len < 4);
-
- memset (buf, 0, sizeof (buf));
- addr.s_addr = g_array_index (array, guint32, 0);
- if (!inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN))
- g_warning ("%s: error converting IP4 address 0x%X",
- __func__, ntohl (addr.s_addr));
- if (is_addr)
- g_string_append_printf (printable, "ip = %s", buf);
- else
- g_string_append_printf (printable, "dst = %s", buf);
- g_string_append (printable, ", ");
-
- memset (buf, 0, sizeof (buf));
- g_string_append_printf (printable, "px = %u",
- g_array_index (array, guint32, 1));
-
- if (array->len > 2) {
- g_string_append (printable, ", ");
-
- memset (buf, 0, sizeof (buf));
- addr.s_addr = g_array_index (array, guint32, 2);
- if (!inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN))
- g_warning ("%s: error converting IP4 address 0x%X",
- __func__, ntohl (addr.s_addr));
- if (is_addr)
- g_string_append_printf (printable, "gw = %s", buf);
- else
- g_string_append_printf (printable, "nh = %s", buf);
- }
-
- if (array->len > 3) {
- g_string_append (printable, ", ");
-
- memset (buf, 0, sizeof (buf));
- g_string_append_printf (printable, "mt = %u",
- g_array_index (array, guint32, 3));
- }
-
- g_string_append (printable, " }");
- }
- g_string_append_c (printable, ']');
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-convert_one_gvalue_hash_entry (gpointer key, gpointer value, gpointer user_data)
-{
- GString *printable = (GString *) user_data;
- char *value_as_string;
-
- value_as_string = g_strdup_value_contents ((GValue *) value);
- g_string_append_printf (printable, " { '%s': %s },", (const char *) key, value_as_string);
- g_free (value_as_string);
-}
-
-static void
-_nm_utils_convert_gvalue_hash_to_string (const GValue *src_value, GValue *dest_value)
-{
- GHashTable *hash;
- GString *printable;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_MAP_OF_VARIANT));
-
- hash = (GHashTable *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- g_hash_table_foreach (hash, convert_one_gvalue_hash_entry, printable);
- g_string_append (printable, " ]");
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-convert_one_string_hash_entry (gpointer key, gpointer value, gpointer user_data)
-{
- GString *printable = (GString *) user_data;
-
- g_string_append_printf (printable, " { '%s': %s },", (const char *) key, (const char *) value);
-}
-
-static void
-_nm_utils_convert_string_hash_to_string (const GValue *src_value, GValue *dest_value)
-{
- GHashTable *hash;
- GString *printable;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_MAP_OF_STRING));
-
- hash = (GHashTable *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- if (hash)
- g_hash_table_foreach (hash, convert_one_string_hash_entry, printable);
- g_string_append (printable, " ]");
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-_nm_utils_convert_byte_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- GArray *array;
- GString *printable;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_UCHAR_ARRAY));
-
- array = (GArray *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- if (array) {
- while (i < MIN (array->len, 35)) {
- if (i > 0)
- g_string_append_c (printable, ' ');
- g_string_append_printf (printable, "0x%02X",
- g_array_index (array, unsigned char, i++));
- }
- if (i < array->len)
- g_string_append (printable, " ... ");
- }
- g_string_append_c (printable, ']');
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static gboolean
-_nm_utils_inet6_ntop (struct in6_addr *addr, char *buf)
-{
- if (!inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN)) {
- int i;
- GString *ip6_str = g_string_new (NULL);
- g_string_append_printf (ip6_str, "%02X", addr->s6_addr[0]);
- for (i = 1; i < 16; i++)
- g_string_append_printf (ip6_str, " %02X", addr->s6_addr[i]);
- g_warning ("%s: error converting IP6 address %s",
- __func__, ip6_str->str);
- g_string_free (ip6_str, TRUE);
+ if (n_expected != elements->n_values)
return FALSE;
- }
- return TRUE;
-}
-
-static void
-_nm_utils_convert_ip6_dns_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- GPtrArray *ptr_array;
- GString *printable;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR));
-
- ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- while (ptr_array && (i < ptr_array->len)) {
- GByteArray *bytearray;
- char buf[INET6_ADDRSTRLEN];
- struct in6_addr *addr;
-
- if (i > 0)
- g_string_append (printable, ", ");
-
- bytearray = (GByteArray *) g_ptr_array_index (ptr_array, i++);
- if (bytearray->len != 16) {
- g_string_append (printable, "invalid");
- continue;
- }
- addr = (struct in6_addr *) bytearray->data;
- memset (buf, 0, sizeof (buf));
- _nm_utils_inet6_ntop (addr, buf);
- g_string_append_printf (printable, "%s", buf);
- }
- g_string_append_c (printable, ']');
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-_nm_utils_convert_ip6_addr_struct_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- GPtrArray *ptr_array;
- GString *printable;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS));
-
- ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- while (ptr_array && (i < ptr_array->len)) {
- GValueArray *elements;
- GValue *tmp;
- GByteArray *ba_addr;
- char buf[INET6_ADDRSTRLEN];
- struct in6_addr *addr;
- guint32 prefix;
-
- if (i > 0)
- g_string_append (printable, ", ");
-
- g_string_append (printable, "{ ");
- elements = (GValueArray *) g_ptr_array_index (ptr_array, i++);
- if ( (elements->n_values != 3)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 0)) != DBUS_TYPE_G_UCHAR_ARRAY)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 1)) != G_TYPE_UINT)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 2)) != DBUS_TYPE_G_UCHAR_ARRAY)) {
- g_string_append (printable, "invalid }");
- continue;
- }
-
- /* IPv6 address */
- tmp = g_value_array_get_nth (elements, 0);
- ba_addr = g_value_get_boxed (tmp);
- if (ba_addr->len != 16) {
- g_string_append (printable, "invalid }");
- continue;
- }
- addr = (struct in6_addr *) ba_addr->data;
- memset (buf, 0, sizeof (buf));
- _nm_utils_inet6_ntop (addr, buf);
- g_string_append_printf (printable, "ip = %s", buf);
- g_string_append (printable, ", ");
-
- /* Prefix */
- tmp = g_value_array_get_nth (elements, 1);
- prefix = g_value_get_uint (tmp);
- if (prefix > 128) {
- g_string_append (printable, "invalid }");
- continue;
- }
- g_string_append_printf (printable, "px = %u", prefix);
- g_string_append (printable, ", ");
-
- /* IPv6 Gateway */
- tmp = g_value_array_get_nth (elements, 2);
- ba_addr = g_value_get_boxed (tmp);
- if (ba_addr->len != 16) {
- g_string_append (printable, "invalid }");
- continue;
- }
- addr = (struct in6_addr *) ba_addr->data;
- memset (buf, 0, sizeof (buf));
- _nm_utils_inet6_ntop (addr, buf);
- g_string_append_printf (printable, "gw = %s", buf);
- g_string_append (printable, " }");
- }
- g_string_append_c (printable, ']');
-
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-static void
-_nm_utils_convert_ip6_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
-{
- GPtrArray *ptr_array;
- GString *printable;
- guint i = 0;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE));
-
- ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
-
- printable = g_string_new ("[");
- while (ptr_array && (i < ptr_array->len)) {
- GValueArray *elements;
- GValue *tmp;
- GByteArray *ba_addr;
- char buf[INET6_ADDRSTRLEN];
- struct in6_addr *addr;
- guint32 prefix, metric;
-
- if (i > 0)
- g_string_append (printable, ", ");
-
- g_string_append (printable, "{ ");
- elements = (GValueArray *) g_ptr_array_index (ptr_array, i++);
- if ( (elements->n_values != 4)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 0)) != DBUS_TYPE_G_UCHAR_ARRAY)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 1)) != G_TYPE_UINT)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 2)) != DBUS_TYPE_G_UCHAR_ARRAY)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 3)) != G_TYPE_UINT)) {
- g_string_append (printable, "invalid");
- continue;
- }
-
- /* Destination address */
- tmp = g_value_array_get_nth (elements, 0);
- ba_addr = g_value_get_boxed (tmp);
- if (ba_addr->len != 16) {
- g_string_append (printable, "invalid");
- continue;
- }
- addr = (struct in6_addr *) ba_addr->data;
- memset (buf, 0, sizeof (buf));
- _nm_utils_inet6_ntop (addr, buf);
- g_string_append_printf (printable, "dst = %s", buf);
- g_string_append (printable, ", ");
-
- /* Prefix */
- tmp = g_value_array_get_nth (elements, 1);
- prefix = g_value_get_uint (tmp);
- if (prefix > 128) {
- g_string_append (printable, "invalid");
- continue;
- }
- g_string_append_printf (printable, "px = %u", prefix);
- g_string_append (printable, ", ");
-
- /* Next hop addresses */
- tmp = g_value_array_get_nth (elements, 2);
- ba_addr = g_value_get_boxed (tmp);
- if (ba_addr->len != 16) {
- g_string_append (printable, "invalid");
- continue;
- }
- addr = (struct in6_addr *) ba_addr->data;
- memset (buf, 0, sizeof (buf));
- _nm_utils_inet6_ntop (addr, buf);
- g_string_append_printf (printable, "nh = %s", buf);
- g_string_append (printable, ", ");
-
- /* Metric */
- tmp = g_value_array_get_nth (elements, 3);
- metric = g_value_get_uint (tmp);
- g_string_append_printf (printable, "mt = %u", metric);
-
- g_string_append (printable, " }");
- }
- g_string_append_c (printable, ']');
- g_value_take_string (dest_value, printable->str);
- g_string_free (printable, FALSE);
-}
-
-#define OLD_DBUS_TYPE_G_IP6_ADDRESS (dbus_g_type_get_struct ("GValueArray", DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, G_TYPE_INVALID))
-#define OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS (dbus_g_type_get_collection ("GPtrArray", OLD_DBUS_TYPE_G_IP6_ADDRESS))
-
-static void
-_nm_utils_convert_old_ip6_addr_array (const GValue *src_value, GValue *dst_value)
-{
- GPtrArray *src_outer_array;
- GPtrArray *dst_outer_array;
- guint i;
-
- g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS));
-
- src_outer_array = (GPtrArray *) g_value_get_boxed (src_value);
- dst_outer_array = g_ptr_array_new ();
-
- for (i = 0; src_outer_array && (i < src_outer_array->len); i++) {
- GValueArray *src_addr_array;
- GValueArray *dst_addr_array;
- GValue element = {0, };
- GValue *src_addr, *src_prefix;
- GByteArray *ba;
-
- src_addr_array = (GValueArray *) g_ptr_array_index (src_outer_array, i);
-
- if ( (src_addr_array->n_values != 2)
- || (G_VALUE_TYPE (g_value_array_get_nth (src_addr_array, 0)) != DBUS_TYPE_G_UCHAR_ARRAY)
- || (G_VALUE_TYPE (g_value_array_get_nth (src_addr_array, 1)) != G_TYPE_UINT)) {
- g_warning ("%s: invalid old IPv6 address type", __func__);
- return;
- }
-
- dst_addr_array = g_value_array_new (3);
-
- src_addr = g_value_array_get_nth (src_addr_array, 0);
- g_value_array_append (dst_addr_array, src_addr);
- src_prefix = g_value_array_get_nth (src_addr_array, 1);
- g_value_array_append (dst_addr_array, src_prefix);
-
- /* Blank Gateway */
- g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
- ba = g_byte_array_new ();
- g_byte_array_append (ba, (guint8 *) "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16);
- g_value_take_boxed (&element, ba);
- g_value_array_append (dst_addr_array, &element);
- g_value_unset (&element);
-
- g_ptr_array_add (dst_outer_array, dst_addr_array);
+ va_start (args, n_expected);
+ for (i = 0; i < n_expected; i++) {
+ tmp = g_value_array_get_nth (elements, i);
+ if (G_VALUE_TYPE (tmp) != va_arg (args, GType))
+ goto done;
}
+ valid = TRUE;
- g_value_take_boxed (dst_value, dst_outer_array);
-}
-
-void
-_nm_utils_register_value_transformations (void)
-{
- static gboolean registered = FALSE;
-
- if (G_UNLIKELY (!registered)) {
- g_value_register_transform_func (DBUS_TYPE_G_OBJECT_PATH,
- G_TYPE_STRING,
- _nm_utils_convert_op_to_string);
- g_value_register_transform_func (G_TYPE_STRV,
- DBUS_TYPE_G_LIST_OF_STRING,
- _nm_utils_convert_strv_to_slist);
- g_value_register_transform_func (G_TYPE_STRV,
- DBUS_TYPE_G_ARRAY_OF_STRING,
- _nm_utils_convert_strv_to_ptrarray);
- g_value_register_transform_func (DBUS_TYPE_G_LIST_OF_STRING,
- G_TYPE_STRING,
- _nm_utils_convert_strv_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_STRING,
- G_TYPE_STRING,
- _nm_utils_convert_string_array_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_TYPE_STRING,
- _nm_utils_convert_op_array_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_UINT_ARRAY,
- G_TYPE_STRING,
- _nm_utils_convert_uint_array_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_TYPE_STRING,
- _nm_utils_convert_ip4_addr_route_struct_array_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_STRING,
- _nm_utils_convert_gvalue_hash_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_MAP_OF_STRING,
- G_TYPE_STRING,
- _nm_utils_convert_string_hash_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_UCHAR_ARRAY,
- G_TYPE_STRING,
- _nm_utils_convert_byte_array_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
- G_TYPE_STRING,
- _nm_utils_convert_ip6_dns_array_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- G_TYPE_STRING,
- _nm_utils_convert_ip6_addr_struct_array_to_string);
- g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
- G_TYPE_STRING,
- _nm_utils_convert_ip6_route_struct_array_to_string);
- g_value_register_transform_func (OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- _nm_utils_convert_old_ip6_addr_array);
- registered = TRUE;
- }
+done:
+ va_end (args);
+ return valid;
}
static gboolean
@@ -1206,7 +598,7 @@ device_supports_ap_ciphers (guint32 dev_caps,
* nm_utils_ap_mode_security_valid:
* @type: the security type to check device capabilties against,
* e.g. #NMU_SEC_STATIC_WEP
- * @wifi_caps: bitfield of the capabilities of the specific WiFi device, e.g.
+ * @wifi_caps: bitfield of the capabilities of the specific Wi-Fi device, e.g.
* #NM_WIFI_DEVICE_CAP_CIPHER_WEP40
*
* Given a set of device capabilities, and a desired security type to check
@@ -1244,7 +636,7 @@ nm_utils_ap_mode_security_valid (NMUtilsSecurityType type,
* nm_utils_security_valid:
* @type: the security type to check AP flags and device capabilties against,
* e.g. #NMU_SEC_STATIC_WEP
- * @wifi_caps: bitfield of the capabilities of the specific WiFi device, e.g.
+ * @wifi_caps: bitfield of the capabilities of the specific Wi-Fi device, e.g.
* #NM_WIFI_DEVICE_CAP_CIPHER_WEP40
* @have_ap: whether the @ap_flags, @ap_wpa, and @ap_rsn arguments are valid
* @adhoc: whether the capabilities being tested are from an Ad-Hoc AP (IBSS)
@@ -1333,6 +725,7 @@ nm_utils_security_valid (NMUtilsSecurityType type,
/* Ad-Hoc WPA APs won't necessarily have the PSK flag set, and
* they don't have any pairwise ciphers. */
if (adhoc) {
+ /* coverity[dead_error_line] */
if ( (ap_wpa & NM_802_11_AP_SEC_GROUP_TKIP)
&& (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP))
return TRUE;
@@ -1361,6 +754,7 @@ nm_utils_security_valid (NMUtilsSecurityType type,
/* Ad-Hoc WPA APs won't necessarily have the PSK flag set, and
* they don't have any pairwise ciphers, nor any RSA flags yet. */
if (adhoc) {
+ /* coverity[dead_error_line] */
if (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP)
return TRUE;
if (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP)
@@ -1492,11 +886,11 @@ nm_utils_wpa_psk_valid (const char *psk)
/**
* nm_utils_ip4_addresses_from_gvalue:
- * @value: gvalue containing a GPtrArray of GArrays of guint32s
+ * @value: #GValue containing a #GPtrArray of #GArrays of #guint32s
*
- * Utility function to convert a #GPtrArray of #GArrays of guint32s representing
+ * Utility function to convert a #GPtrArray of #GArrays of #guint32s representing
* a list of NetworkManager IPv4 addresses (which is a tuple of address, gateway,
- * and prefix) into a GSList of #NMIP4Address objects. The specific format of
+ * and prefix) into a #GSList of #NMIP4Address objects. The specific format of
* this serialization is not guaranteed to be stable and the #GArray may be
* extended in the future.
*
@@ -1537,7 +931,7 @@ nm_utils_ip4_addresses_from_gvalue (const GValue *value)
* g_value_unset().
*
* Utility function to convert a #GSList of #NMIP4Address objects into a
- * GPtrArray of GArrays of guint32s representing a list of NetworkManager IPv4
+ * #GPtrArray of #GArrays of #guint32s representing a list of NetworkManager IPv4
* addresses (which is a tuple of address, gateway, and prefix). The specific
* format of this serialization is not guaranteed to be stable and may be
* extended in the future.
@@ -1574,11 +968,11 @@ nm_utils_ip4_addresses_to_gvalue (GSList *list, GValue *value)
/**
* nm_utils_ip4_routes_from_gvalue:
- * @value: gvalue containing a GPtrArray of GArrays of guint32s
+ * @value: #GValue containing a #GPtrArray of #GArrays of #guint32s
*
- * Utility function to convert a GPtrArray of GArrays of guint32s representing
+ * Utility function to convert a #GPtrArray of #GArrays of #guint32s representing
* a list of NetworkManager IPv4 routes (which is a tuple of route, next hop,
- * prefix, and metric) into a GSList of #NMIP4Route objects. The specific
+ * prefix, and metric) into a #GSList of #NMIP4Route objects. The specific
* format of this serialization is not guaranteed to be stable and may be
* extended in the future.
*
@@ -1600,7 +994,7 @@ nm_utils_ip4_routes_from_gvalue (const GValue *value)
g_warning ("Ignoring invalid IP4 route");
continue;
}
-
+
route = nm_ip4_route_new ();
nm_ip4_route_set_dest (route, g_array_index (array, guint32, 0));
nm_ip4_route_set_prefix (route, g_array_index (array, guint32, 1));
@@ -1620,7 +1014,7 @@ nm_utils_ip4_routes_from_gvalue (const GValue *value)
* g_value_unset().
*
* Utility function to convert a #GSList of #NMIP4Route objects into a
- * GPtrArray of GArrays of guint32s representing a list of NetworkManager IPv4
+ * #GPtrArray of #GArrays of #guint32s representing a list of NetworkManager IPv4
* routes (which is a tuple of route, next hop, prefix, and metric). The
* specific format of this serialization is not guaranteed to be stable and may
* be extended in the future.
@@ -1731,11 +1125,11 @@ nm_utils_ip4_get_default_prefix (guint32 ip)
/**
* nm_utils_ip6_addresses_from_gvalue:
- * @value: gvalue containing a GPtrArray of GValueArrays of (GArray of guchars) and guint32
+ * @value: gvalue containing a GPtrArray of GValueArrays of (GArray of guchars) and #guint32
*
- * Utility function to convert a #GPtrArray of #GValueArrays of (#GArray of guchars) and guint32
+ * Utility function to convert a #GPtrArray of #GValueArrays of (#GArray of guchars) and #guint32
* representing a list of NetworkManager IPv6 addresses (which is a tuple of address,
- * prefix, and gateway), into a GSList of #NMIP6Address objects. The specific format of
+ * prefix, and gateway), into a #GSList of #NMIP6Address objects. The specific format of
* this serialization is not guaranteed to be stable and the #GValueArray may be
* extended in the future.
*
@@ -1763,15 +1157,9 @@ nm_utils_ip6_addresses_from_gvalue (const GValue *value)
continue;
}
- if ( (G_VALUE_TYPE (g_value_array_get_nth (elements, 0)) != DBUS_TYPE_G_UCHAR_ARRAY)
- || (G_VALUE_TYPE (g_value_array_get_nth (elements, 1)) != G_TYPE_UINT)) {
- g_warning ("%s: ignoring invalid IP6 address structure", __func__);
- continue;
- }
-
- /* Check optional 3rd element (gateway) */
- if ( elements->n_values == 3
- && (G_VALUE_TYPE (g_value_array_get_nth (elements, 2)) != DBUS_TYPE_G_UCHAR_ARRAY)) {
+ /* Third element (gateway) is optional */
+ if ( !_nm_utils_gvalue_array_validate (elements, 2, DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT)
+ && !_nm_utils_gvalue_array_validate (elements, 3, DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, DBUS_TYPE_G_UCHAR_ARRAY)) {
g_warning ("%s: ignoring invalid IP6 address structure", __func__);
continue;
}
@@ -1822,7 +1210,7 @@ nm_utils_ip6_addresses_from_gvalue (const GValue *value)
* g_value_unset().
*
* Utility function to convert a #GSList of #NMIP6Address objects into a
- * GPtrArray of GValueArrays representing a list of NetworkManager IPv6 addresses
+ * #GPtrArray of #GValueArrays representing a list of NetworkManager IPv6 addresses
* (which is a tuple of address, prefix, and gateway). The specific format of
* this serialization is not guaranteed to be stable and may be extended in the
* future.
@@ -1838,7 +1226,7 @@ nm_utils_ip6_addresses_to_gvalue (GSList *list, GValue *value)
for (iter = list; iter; iter = iter->next) {
NMIP6Address *addr = (NMIP6Address *) iter->data;
GValueArray *array;
- GValue element = {0, };
+ GValue element = G_VALUE_INIT;
GByteArray *ba;
array = g_value_array_new (3);
@@ -1873,13 +1261,13 @@ nm_utils_ip6_addresses_to_gvalue (GSList *list, GValue *value)
/**
* nm_utils_ip6_routes_from_gvalue:
- * @value: gvalue containing a GPtrArray of GValueArrays of (GArray or guchars), guint32,
- * (GArray of guchars), and guint32
+ * @value: #GValue containing a #GPtrArray of #GValueArrays of (#GArray of #guchars), #guint32,
+ * (#GArray of #guchars), and #guint32
*
- * Utility function GPtrArray of GValueArrays of (GArray or guchars), guint32,
- * (GArray of guchars), and guint32 representing a list of NetworkManager IPv6
+ * Utility function #GPtrArray of #GValueArrays of (#GArray of #guchars), #guint32,
+ * (#GArray of #guchars), and #guint32 representing a list of NetworkManager IPv6
* routes (which is a tuple of destination, prefix, next hop, and metric)
- * into a GSList of #NMIP6Route objects. The specific format of this serialization
+ * into a #GSList of #NMIP6Route objects. The specific format of this serialization
* is not guaranteed to be stable and may be extended in the future.
*
* Returns: (transfer full) (element-type NetworkManager.IP6Route): a newly allocated #GSList of #NMIP6Route objects
@@ -1898,11 +1286,11 @@ nm_utils_ip6_routes_from_gvalue (const GValue *value)
guint prefix, metric;
NMIP6Route *route;
- if ( (route_values->n_values != 4)
- || (G_VALUE_TYPE (g_value_array_get_nth (route_values, 0)) != DBUS_TYPE_G_UCHAR_ARRAY)
- || (G_VALUE_TYPE (g_value_array_get_nth (route_values, 1)) != G_TYPE_UINT)
- || (G_VALUE_TYPE (g_value_array_get_nth (route_values, 2)) != DBUS_TYPE_G_UCHAR_ARRAY)
- || (G_VALUE_TYPE (g_value_array_get_nth (route_values, 3)) != G_TYPE_UINT)) {
+ if (!_nm_utils_gvalue_array_validate (route_values, 4,
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_UINT,
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_UINT)) {
g_warning ("Ignoring invalid IP6 route");
continue;
}
@@ -1943,8 +1331,8 @@ nm_utils_ip6_routes_from_gvalue (const GValue *value)
* which should be unset by the caller (when no longer needed) with
* g_value_unset().
*
- * Utility function to convert a #GSList of #NMIP6Route objects into a GPtrArray of
- * GValueArrays of (GArray or guchars), guint32, (GArray of guchars), and guint32
+ * Utility function to convert a #GSList of #NMIP6Route objects into a #GPtrArray of
+ * #GValueArrays of (#GArray of #guchars), #guint32, (#GArray of #guchars), and #guint32
* representing a list of NetworkManager IPv6 routes (which is a tuple of destination,
* prefix, next hop, and metric). The specific format of this serialization is not
* guaranteed to be stable and may be extended in the future.
@@ -1962,7 +1350,7 @@ nm_utils_ip6_routes_to_gvalue (GSList *list, GValue *value)
GValueArray *array;
const struct in6_addr *addr;
GByteArray *ba;
- GValue element = {0, };
+ GValue element = G_VALUE_INIT;
array = g_value_array_new (4);
@@ -2003,7 +1391,7 @@ nm_utils_ip6_routes_to_gvalue (GSList *list, GValue *value)
* @value: a #GValue
*
* Converts a #GValue containing a #GPtrArray of IP6 DNS, represented as
- * #GByteArray<!-- -->s into a #GSList of #in6_addr<!-- -->s.
+ * #GByteArrays into a #GSList of <literal><type>struct in6_addr</type></literal>s.
*
* Returns: a #GSList of IP6 addresses.
*/
@@ -2040,10 +1428,11 @@ nm_utils_ip6_dns_from_gvalue (const GValue *value)
* addresses, which should be unset by the caller (when no longer needed) with
* g_value_unset().
*
- * Utility function to convert a #GSList of 'struct in6_addr' structs into a
- * GPtrArray of GByteArrays representing each server's IPv6 addresses in
- * network byte order. The specific format of this serialization is not
- * guaranteed to be stable and may be extended in the future.
+ * Utility function to convert a #GSList of <literal><type>struct
+ * in6_addr</type></literal> structs into a #GPtrArray of #GByteArrays
+ * representing each server's IPv6 addresses in network byte order.
+ * The specific format of this serialization is not guaranteed to be
+ * stable and may be extended in the future.
*/
void
nm_utils_ip6_dns_to_gvalue (GSList *list, GValue *value)
@@ -2127,7 +1516,8 @@ out:
}
static char *
-make_key (const char *salt,
+make_key (const char *cipher,
+ const char *salt,
const gsize salt_len,
const char *password,
gsize *out_len,
@@ -2141,14 +1531,12 @@ make_key (const char *salt,
g_return_val_if_fail (password != NULL, NULL);
g_return_val_if_fail (out_len != NULL, NULL);
+ if (!strcmp (cipher, "DES-EDE3-CBC"))
+ digest_len = 24;
+ else if (!strcmp (cipher, "AES-128-CBC"))
+ digest_len = 16;
+
key = g_malloc0 (digest_len + 1);
- if (!key) {
- g_set_error (error,
- NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Not enough memory to make encryption key."));
- return NULL;
- }
if (!crypto_md5_hash (salt, salt_len, password, strlen (password), key, digest_len, error)) {
*out_len = 0;
@@ -2161,46 +1549,9 @@ make_key (const char *salt,
return key;
}
-/*
- * utils_bin2hexstr
- *
- * Convert a byte-array into a hexadecimal string.
- *
- * Code originally by Alex Larsson <alexl@redhat.com> and
- * copyright Red Hat, Inc. under terms of the LGPL.
- *
- */
-static char *
-utils_bin2hexstr (const char *bytes, int len, int final_len)
-{
- static char hex_digits[] = "0123456789abcdef";
- char *result;
- int i;
- gsize buflen = (len * 2) + 1;
-
- g_return_val_if_fail (bytes != NULL, NULL);
- g_return_val_if_fail (len > 0, NULL);
- g_return_val_if_fail (len < 4096, NULL); /* Arbitrary limit */
- if (final_len > -1)
- g_return_val_if_fail (final_len < buflen, NULL);
-
- result = g_malloc0 (buflen);
- for (i = 0; i < len; i++)
- {
- result[2*i] = hex_digits[(bytes[i] >> 4) & 0xf];
- result[2*i+1] = hex_digits[bytes[i] & 0xf];
- }
- /* Cut converted key off at the correct length for this cipher type */
- if (final_len > -1)
- result[final_len] = '\0';
- else
- result[buflen - 1] = '\0';
-
- return result;
-}
-
/**
- * nm_utils_rsa_key_encrypt:
+ * nm_utils_rsa_key_encrypt_helper:
+ * @cipher: cipher to use for encryption ("DES-EDE3-CBC" or "AES-128-CBC")
* @data: RSA private key data to be encrypted
* @in_password: (allow-none): existing password to use, if any
* @out_password: (out) (allow-none): if @in_password was %NULL, a random password will be generated
@@ -2214,13 +1565,15 @@ utils_bin2hexstr (const char *bytes, int len, int final_len)
* Returns: (transfer full): on success, PEM-formatted data suitable for writing to a PEM-formatted
* certificate/private key file.
**/
-GByteArray *
-nm_utils_rsa_key_encrypt (const GByteArray *data,
- const char *in_password,
- char **out_password,
- GError **error)
-{
- char salt[8];
+static GByteArray *
+nm_utils_rsa_key_encrypt_helper (const char *cipher,
+ const GByteArray *data,
+ const char *in_password,
+ char **out_password,
+ GError **error)
+{
+ char salt[16];
+ int salt_len;
char *key = NULL, *enc = NULL, *pw_buf[32];
gsize key_len = 0, enc_len = 0;
GString *pem = NULL;
@@ -2229,6 +1582,7 @@ nm_utils_rsa_key_encrypt (const GByteArray *data,
const char *p;
GByteArray *ret = NULL;
+ g_return_val_if_fail (!g_strcmp0 (cipher, CIPHER_DES_EDE3_CBC) || !g_strcmp0 (cipher, CIPHER_AES_CBC), NULL);
g_return_val_if_fail (data != NULL, NULL);
g_return_val_if_fail (data->len > 0, NULL);
if (out_password)
@@ -2238,52 +1592,36 @@ nm_utils_rsa_key_encrypt (const GByteArray *data,
if (!in_password) {
if (!crypto_randomize (pw_buf, sizeof (pw_buf), error))
return NULL;
- in_password = tmp_password = utils_bin2hexstr ((const char *) pw_buf, sizeof (pw_buf), -1);
+ in_password = tmp_password = nm_utils_bin2hexstr ((const char *) pw_buf, sizeof (pw_buf), -1);
}
- if (!crypto_randomize (salt, sizeof (salt), error))
+ if (g_strcmp0 (cipher, CIPHER_AES_CBC) == 0)
+ salt_len = 16;
+ else
+ salt_len = 8;
+
+ if (!crypto_randomize (salt, salt_len, error))
goto out;
- key = make_key (&salt[0], sizeof (salt), in_password, &key_len, error);
+ key = make_key (cipher, &salt[0], salt_len, in_password, &key_len, error);
if (!key)
goto out;
- enc = crypto_encrypt (CIPHER_DES_EDE3_CBC, data, salt, sizeof (salt), key, key_len, &enc_len, error);
+ enc = crypto_encrypt (cipher, data, salt, salt_len, key, key_len, &enc_len, error);
if (!enc)
goto out;
pem = g_string_sized_new (enc_len * 2 + 100);
- if (!pem) {
- g_set_error_literal (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Could not allocate memory for PEM file creation."));
- goto out;
- }
-
g_string_append (pem, "-----BEGIN RSA PRIVATE KEY-----\n");
g_string_append (pem, "Proc-Type: 4,ENCRYPTED\n");
/* Convert the salt to a hex string */
- tmp = utils_bin2hexstr ((const char *) salt, sizeof (salt), 16);
- if (!tmp) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Could not allocate memory for writing IV to PEM file."));
- goto out;
- }
-
- g_string_append_printf (pem, "DEK-Info: DES-EDE3-CBC,%s\n\n", tmp);
+ tmp = nm_utils_bin2hexstr ((const char *) salt, salt_len, salt_len * 2);
+ g_string_append_printf (pem, "DEK-Info: %s,%s\n\n", cipher, tmp);
g_free (tmp);
/* Convert the encrypted key to a base64 string */
p = tmp = g_base64_encode ((const guchar *) enc, enc_len);
- if (!tmp) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Could not allocate memory for writing encrypted key to PEM file."));
- goto out;
- }
-
left = strlen (tmp);
while (left > 0) {
g_string_append_len (pem, p, (left < 64) ? left : 64);
@@ -2296,12 +1634,6 @@ nm_utils_rsa_key_encrypt (const GByteArray *data,
g_string_append (pem, "-----END RSA PRIVATE KEY-----\n");
ret = g_byte_array_sized_new (pem->len);
- if (!ret) {
- g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_OUT_OF_MEMORY,
- _("Could not allocate memory for PEM file data."));
- goto out;
- }
g_byte_array_append (ret, (const unsigned char *) pem->str, pem->len);
if (tmp_password && out_password)
*out_password = g_strdup (tmp_password);
@@ -2327,6 +1659,65 @@ out:
}
/**
+ * nm_utils_rsa_key_encrypt:
+ * @data: RSA private key data to be encrypted
+ * @in_password: (allow-none): existing password to use, if any
+ * @out_password: (out) (allow-none): if @in_password was %NULL, a random password will be generated
+ * and returned in this argument
+ * @error: detailed error information on return, if an error occurred
+ *
+ * Encrypts the given RSA private key data with the given password (or generates
+ * a password if no password was given) and converts the data to PEM format
+ * suitable for writing to a file. It uses Triple DES cipher for the encryption.
+ *
+ * Returns: (transfer full): on success, PEM-formatted data suitable for writing to a PEM-formatted
+ * certificate/private key file.
+ **/
+GByteArray *
+nm_utils_rsa_key_encrypt (const GByteArray *data,
+ const char *in_password,
+ char **out_password,
+ GError **error)
+{
+
+
+ return nm_utils_rsa_key_encrypt_helper (CIPHER_DES_EDE3_CBC,
+ data,
+ in_password,
+ out_password,
+ error);
+}
+
+/**
+ * nm_utils_rsa_key_encrypt_aes:
+ * @data: RSA private key data to be encrypted
+ * @in_password: (allow-none): existing password to use, if any
+ * @out_password: (out) (allow-none): if @in_password was %NULL, a random password will be generated
+ * and returned in this argument
+ * @error: detailed error information on return, if an error occurred
+ *
+ * Encrypts the given RSA private key data with the given password (or generates
+ * a password if no password was given) and converts the data to PEM format
+ * suitable for writing to a file. It uses AES cipher for the encryption.
+ *
+ * Returns: (transfer full): on success, PEM-formatted data suitable for writing to a PEM-formatted
+ * certificate/private key file.
+ **/
+GByteArray *
+nm_utils_rsa_key_encrypt_aes (const GByteArray *data,
+ const char *in_password,
+ char **out_password,
+ GError **error)
+{
+
+ return nm_utils_rsa_key_encrypt_helper (CIPHER_AES_CBC,
+ data,
+ in_password,
+ out_password,
+ error);
+}
+
+/**
* nm_utils_file_is_pkcs12:
* @filename: name of the file to test
*
@@ -2419,7 +1810,7 @@ static struct cf_pair bg_table[] = {
* nm_utils_wifi_freq_to_channel:
* @freq: frequency
*
- * Utility function to translate a WiFi frequency to its corresponding channel.
+ * Utility function to translate a Wi-Fi frequency to its corresponding channel.
*
* Returns: the channel represented by the frequency or 0
**/
@@ -2446,7 +1837,7 @@ nm_utils_wifi_freq_to_channel (guint32 freq)
* @channel: channel
* @band: frequency band for wireless ("a" or "bg")
*
- * Utility function to translate a WiFi channel to its corresponding frequency.
+ * Utility function to translate a Wi-Fi channel to its corresponding frequency.
*
* Returns: the frequency represented by the channel of the band,
* or -1 when the freq is invalid, or 0 when the band
@@ -2476,7 +1867,7 @@ nm_utils_wifi_channel_to_freq (guint32 channel, const char *band)
* @direction: whether going downward (0 or less) or upward (1 or more)
* @band: frequency band for wireless ("a" or "bg")
*
- * Utility function to find out next/previous WiFi channel for a channel.
+ * Utility function to find out next/previous Wi-Fi channel for a channel.
*
* Returns: the next channel in the specified direction or 0
**/
@@ -2523,7 +1914,7 @@ nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band)
* @channel: channel
* @band: frequency band for wireless ("a" or "bg")
*
- * Utility function to verify WiFi channel validity.
+ * Utility function to verify Wi-Fi channel validity.
*
* Returns: %TRUE or %FALSE
**/
@@ -2555,7 +1946,7 @@ nm_utils_wifi_is_channel_valid (guint32 channel, const char *band)
*
* Returns the length in octets of a hardware address of type @type.
*
- * Return value: the length
+ * Return value: the positive length, or -1 if the type is unknown/unsupported.
*/
int
nm_utils_hwaddr_len (int type)
@@ -2565,18 +1956,25 @@ nm_utils_hwaddr_len (int type)
else if (type == ARPHRD_INFINIBAND)
return INFINIBAND_ALEN;
else
- g_return_val_if_reached (-1);
+ return -1;
}
/**
* nm_utils_hwaddr_type:
* @len: the length of hardware address in bytes
*
- * Returns the type (either %ARPHRD_ETHER or %ARPHRD_INFINIBAND) of the raw
- * address given its length.
+ * Returns the type (either %ARPHRD_ETHER or %ARPHRD_INFINIBAND) of
+ * the raw address given its length.
+ *
+ * Return value: the type, either %ARPHRD_ETHER or %ARPHRD_INFINIBAND.
+ * If the length is unexpected, return -1 (unsupported type/length).
*
- * Return value: the type, either %ARPHRD_ETHER or %ARPHRD_INFINIBAND, or -1 if
- * the address length was not recognized
+ * Deprecated: This could not be extended to cover other types, since
+ * there is not a one-to-one mapping between types and lengths. This
+ * was mostly only used to get a type to pass to
+ * nm_utils_hwaddr_ntoa() or nm_utils_hwaddr_aton() when you only had
+ * a length; but you can just use nm_utils_hwaddr_ntoa_len() or
+ * nm_utils_hwaddr_aton_len() now instead.
*/
int
nm_utils_hwaddr_type (int len)
@@ -2586,7 +1984,7 @@ nm_utils_hwaddr_type (int len)
else if (len == INFINIBAND_ALEN)
return ARPHRD_INFINIBAND;
else
- g_return_val_if_reached (-1);
+ return -1;
}
#define HEXVAL(c) ((c) <= '9' ? (c) - '0' : ((c) & 0x4F) - 'A' + 10)
@@ -2601,16 +1999,110 @@ nm_utils_hwaddr_type (int len)
* nm_utils_hwaddr_atoba() if you'd rather have the result in a
* #GByteArray.
*
+ * See also nm_utils_hwaddr_aton_len(), which takes an output length
+ * instead of a type.
+ *
* Return value: @buffer, or %NULL if @asc couldn't be parsed
*/
guint8 *
nm_utils_hwaddr_aton (const char *asc, int type, gpointer buffer)
{
+ int len = nm_utils_hwaddr_len (type);
+
+ if (len <= 0) {
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+ return nm_utils_hwaddr_aton_len (asc, buffer, len);
+}
+
+/**
+ * nm_utils_hwaddr_atoba:
+ * @asc: the ASCII representation of a hardware address
+ * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ *
+ * Parses @asc and converts it to binary form in a #GByteArray. See
+ * nm_utils_hwaddr_aton() if you don't want a #GByteArray.
+ *
+ * Return value: (transfer full): a new #GByteArray, or %NULL if @asc couldn't
+ * be parsed
+ */
+GByteArray *
+nm_utils_hwaddr_atoba (const char *asc, int type)
+{
+ GByteArray *ba;
+ int len = nm_utils_hwaddr_len (type);
+
+ if (len <= 0) {
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+
+ ba = g_byte_array_sized_new (len);
+ g_byte_array_set_size (ba, len);
+ if (!nm_utils_hwaddr_aton_len (asc, ba->data, len)) {
+ g_byte_array_unref (ba);
+ return NULL;
+ }
+
+ return ba;
+}
+
+/**
+ * nm_utils_hwaddr_ntoa:
+ * @addr: a binary hardware address
+ * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ *
+ * Converts @addr to textual form.
+ *
+ * See also nm_utils_hwaddr_ntoa_len(), which takes a length instead of
+ * a type.
+ *
+ * Return value: (transfer full): the textual form of @addr
+ */
+char *
+nm_utils_hwaddr_ntoa (gconstpointer addr, int type)
+{
+ int len = nm_utils_hwaddr_len (type);
+
+ if (len <= 0) {
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+
+ return nm_utils_hwaddr_ntoa_len (addr, len);
+}
+
+/**
+ * nm_utils_hwaddr_aton_len:
+ * @asc: the ASCII representation of a hardware address
+ * @buffer: buffer to store the result into
+ * @length: the expected length in bytes of the result and
+ * the size of the buffer in bytes.
+ *
+ * Parses @asc and converts it to binary form in @buffer.
+ * Bytes in @asc can be sepatared by colons (:), or hyphens (-), but not mixed.
+ *
+ * Return value: @buffer, or %NULL if @asc couldn't be parsed
+ * or would be shorter or longer than @length.
+ *
+ * Since: 0.9.10
+ */
+guint8 *
+nm_utils_hwaddr_aton_len (const char *asc, gpointer buffer, gsize length)
+{
const char *in = asc;
guint8 *out = (guint8 *)buffer;
- int left = nm_utils_hwaddr_len (type);
+ char delimiter = '\0';
- while (left && *in) {
+ if (!asc) {
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+ g_return_val_if_fail (buffer, NULL);
+ g_return_val_if_fail (length, NULL);
+
+ while (length && *in) {
guint8 d1 = in[0], d2 = in[1];
if (!g_ascii_isxdigit (d1))
@@ -2626,71 +2118,199 @@ nm_utils_hwaddr_aton (const char *asc, int type, gpointer buffer)
in += 1;
}
- left--;
+ length--;
if (*in) {
- if (*in != ':')
- return NULL;
+ if (delimiter == '\0') {
+ if (*in == ':' || *in == '-')
+ delimiter = *in;
+ else
+ return NULL;
+ } else {
+ if (*in != delimiter)
+ return NULL;
+ }
in++;
}
}
- if (left == 0 && !*in)
+ if (length == 0 && !*in)
return buffer;
else
return NULL;
}
/**
- * nm_utils_hwaddr_atoba:
- * @asc: the ASCII representation of a hardware address
- * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ * nm_utils_hwaddr_ntoa_len:
+ * @addr: a binary hardware address
+ * @length: the length of @addr
*
- * Parses @asc and converts it to binary form in a #GByteArray. See
- * nm_utils_hwaddr_aton() if you don't want a #GByteArray.
+ * Converts @addr to textual form.
*
- * Return value: (transfer full): a new #GByteArray, or %NULL if @asc couldn't
- * be parsed
+ * Return value: (transfer full): the textual form of @addr
+ *
+ * Since: 0.9.10
*/
-GByteArray *
-nm_utils_hwaddr_atoba (const char *asc, int type)
+char *
+nm_utils_hwaddr_ntoa_len (gconstpointer addr, gsize length)
{
- GByteArray *ba;
- int len = nm_utils_hwaddr_len (type);
+ const guint8 *in = addr;
+ char *out, *result;
+ const char *LOOKUP = "0123456789ABCDEF";
- ba = g_byte_array_sized_new (len);
- ba->len = len;
- if (!nm_utils_hwaddr_aton (asc, type, ba->data)) {
- g_byte_array_unref (ba);
- return NULL;
+ g_return_val_if_fail (addr != NULL, g_strdup (""));
+ g_return_val_if_fail (length != 0, g_strdup (""));
+
+ result = out = g_malloc (length * 3);
+ for (;;) {
+ guint8 v = *in++;
+
+ *out++ = LOOKUP[v >> 4];
+ *out++ = LOOKUP[v & 0x0F];
+ if (--length == 0) {
+ *out = 0;
+ return result;
+ }
+ *out++ = ':';
}
+}
- return ba;
+/**
+ * nm_utils_hwaddr_valid:
+ * @asc: the ASCII representation of a hardware address
+ *
+ * Parses @asc to see if it is a valid hardware address of some type.
+ *
+ * Return value: %TRUE if @asc appears to be a valid hardware address
+ * of some type, %FALSE if not.
+ *
+ * Since: 0.9.10
+ */
+gboolean
+nm_utils_hwaddr_valid (const char *asc)
+{
+ guint8 buf[NM_UTILS_HWADDR_LEN_MAX];
+ gsize in_len, out_len;
+
+ if (!asc || !*asc)
+ return FALSE;
+ in_len = strlen (asc);
+ if ((in_len + 1) % 3 != 0)
+ return FALSE;
+ out_len = (in_len + 1) / 3;
+ if (out_len > NM_UTILS_HWADDR_LEN_MAX)
+ return FALSE;
+ return nm_utils_hwaddr_aton_len (asc, buf, out_len) != NULL;
}
/**
- * nm_utils_hwaddr_ntoa:
- * @addr: a binary hardware address
- * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ * nm_utils_bin2hexstr:
+ * @bytes: an array of bytes
+ * @len: the length of the @bytes array
+ * @final_len: an index where to cut off the returned string, or -1
*
- * Converts @addr to textual form.
+ * Converts a byte-array @bytes into a hexadecimal string.
+ * If @final_len is greater than -1, the returned string is terminated at
+ * that index (returned_string[final_len] == '\0'),
*
- * Return value: (transfer full): the textual form of @addr
+ * Return value: (transfer full): the textual form of @bytes
+ *
+ * Since: 0.9.10
+ */
+/*
+ * Code originally by Alex Larsson <alexl@redhat.com> and
+ * copyright Red Hat, Inc. under terms of the LGPL.
*/
char *
-nm_utils_hwaddr_ntoa (gconstpointer addr, int type)
+nm_utils_bin2hexstr (const char *bytes, int len, int final_len)
{
- const guint8 *in = addr;
- GString *out = g_string_new (NULL);
- int left = nm_utils_hwaddr_len (type);
+ static char hex_digits[] = "0123456789abcdef";
+ char *result;
+ int i;
+ gsize buflen = (len * 2) + 1;
+
+ g_return_val_if_fail (bytes != NULL, NULL);
+ g_return_val_if_fail (len > 0, NULL);
+ g_return_val_if_fail (len < 4096, NULL); /* Arbitrary limit */
+ if (final_len > -1)
+ g_return_val_if_fail (final_len < buflen, NULL);
- while (left--) {
- if (out->len)
- g_string_append_c (out, ':');
- g_string_append_printf (out, "%02X", *in++);
+ result = g_malloc0 (buflen);
+ for (i = 0; i < len; i++)
+ {
+ result[2*i] = hex_digits[(bytes[i] >> 4) & 0xf];
+ result[2*i+1] = hex_digits[bytes[i] & 0xf];
}
+ /* Cut converted key off at the correct length for this cipher type */
+ if (final_len > -1)
+ result[final_len] = '\0';
+ else
+ result[buflen - 1] = '\0';
+
+ return result;
+}
+
+/* From hostap, Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi> */
+/**
+ * nm_utils_hex2byte:
+ * @hex: a string representing a hex byte
+ *
+ * Converts a hex string (2 characters) into its byte representation.
+ *
+ * Return value: a byte, or -1 if @hex doesn't represent a hex byte
+ *
+ * Since: 0.9.10
+ */
+int
+nm_utils_hex2byte (const char *hex)
+{
+ int a, b;
+ a = g_ascii_xdigit_value (*hex++);
+ if (a < 0)
+ return -1;
+ b = g_ascii_xdigit_value (*hex++);
+ if (b < 0)
+ return -1;
+ return (a << 4) | b;
+}
+
+/**
+ * nm_utils_hexstr2bin:
+ * @hex: an hex string
+ * @len: the length of the @hex string (it has to be even)
+ *
+ * Converts a hexadecimal string @hex into a byte-array. The returned array
+ * length is @len/2.
+ *
+ * Return value: (transfer full): a array of bytes, or %NULL on error
+ *
+ * Since: 0.9.10
+ */
+char *
+nm_utils_hexstr2bin (const char *hex, size_t len)
+{
+ size_t i;
+ int a;
+ const char * ipos = hex;
+ char * buf = NULL;
+ char * opos;
+
+ /* Length must be a multiple of 2 */
+ if ((len % 2) != 0)
+ return NULL;
- return g_string_free (out, FALSE);
+ opos = buf = g_malloc0 ((len / 2) + 1);
+ for (i = 0; i < len; i += 2) {
+ a = nm_utils_hex2byte (ipos);
+ if (a < 0) {
+ g_free (buf);
+ return NULL;
+ }
+ *opos++ = a;
+ ipos += 2;
+ }
+ return buf;
}
+/* End from hostap */
/**
* nm_utils_iface_valid_name:
@@ -2759,3 +2379,161 @@ nm_utils_is_uuid (const char *str)
return FALSE;
}
+
+static char _nm_utils_inet_ntop_buffer[NM_UTILS_INET_ADDRSTRLEN];
+
+/**
+ * nm_utils_inet4_ntop: (skip)
+ * @inaddr: the address that should be converted to string.
+ * @dst: the destination buffer, it must contain at least %INET_ADDRSTRLEN
+ * or %NM_UTILS_INET_ADDRSTRLEN characters. If set to %NULL, it will return
+ * a pointer to an internal, static buffer (shared with nm_utils_inet6_ntop()).
+ * Beware, that the internal buffer will be overwritten with ever new call
+ * of nm_utils_inet4_ntop() or nm_utils_inet6_ntop() that does not provied it's
+ * own @dst buffer. Also, using the internal buffer is not thread safe. When
+ * in doubt, pass your own @dst buffer to avoid these issues.
+ *
+ * Wrapper for inet_ntop.
+ *
+ * Returns: the input buffer @dst, or a pointer to an
+ * internal, static buffer. This function cannot fail.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_utils_inet4_ntop (in_addr_t inaddr, char *dst)
+{
+ return inet_ntop (AF_INET, &inaddr, dst ? dst : _nm_utils_inet_ntop_buffer,
+ INET_ADDRSTRLEN);
+}
+
+/**
+ * nm_utils_inet6_ntop: (skip)
+ * @in6addr: the address that should be converted to string.
+ * @dst: the destination buffer, it must contain at least %INET6_ADDRSTRLEN
+ * or %NM_UTILS_INET_ADDRSTRLEN characters. If set to %NULL, it will return
+ * a pointer to an internal, static buffer (shared with nm_utils_inet4_ntop()).
+ * Beware, that the internal buffer will be overwritten with ever new call
+ * of nm_utils_inet4_ntop() or nm_utils_inet6_ntop() that does not provied it's
+ * own @dst buffer. Also, using the internal buffer is not thread safe. When
+ * in doubt, pass your own @dst buffer to avoid these issues.
+ *
+ * Wrapper for inet_ntop.
+ *
+ * Returns: the input buffer @dst, or a pointer to an
+ * internal, static buffer. %NULL is not allowed as @in6addr,
+ * otherwise, this function cannot fail.
+ *
+ * Since: 0.9.10
+ **/
+const char *
+nm_utils_inet6_ntop (const struct in6_addr *in6addr, char *dst)
+{
+ g_return_val_if_fail (in6addr, NULL);
+ return inet_ntop (AF_INET6, in6addr, dst ? dst : _nm_utils_inet_ntop_buffer,
+ INET6_ADDRSTRLEN);
+}
+
+/**
+ * nm_utils_check_virtual_device_compatibility:
+ * @virtual_type: a virtual connection type
+ * @other_type: a connection type to test against @virtual_type
+ *
+ * Determines if a connection of type @virtual_type can (in the
+ * general case) work with connections of type @other_type.
+ *
+ * If @virtual_type is %NM_TYPE_SETTING_VLAN, then this checks if
+ * @other_type is a valid type for the parent of a VLAN.
+ *
+ * If @virtual_type is a "master" type (eg, %NM_TYPE_SETTING_BRIDGE),
+ * then this checks if @other_type is a valid type for a slave of that
+ * master.
+ *
+ * Note that even if this returns %TRUE it is not guaranteed that
+ * <emphasis>every</emphasis> connection of type @other_type is
+ * compatible with @virtual_type; it may depend on the exact
+ * configuration of the two connections, or on the capabilities of an
+ * underlying device driver.
+ *
+ * Returns: %TRUE or %FALSE
+ *
+ * Since: 0.9.10
+ */
+gboolean
+nm_utils_check_virtual_device_compatibility (GType virtual_type, GType other_type)
+{
+ g_return_val_if_fail (_nm_setting_type_is_base_type (virtual_type), FALSE);
+ g_return_val_if_fail (_nm_setting_type_is_base_type (other_type), FALSE);
+
+ if (virtual_type == NM_TYPE_SETTING_BOND) {
+ return ( other_type == NM_TYPE_SETTING_INFINIBAND
+ || other_type == NM_TYPE_SETTING_WIRED
+ || other_type == NM_TYPE_SETTING_BRIDGE
+ || other_type == NM_TYPE_SETTING_BOND
+ || other_type == NM_TYPE_SETTING_TEAM
+ || other_type == NM_TYPE_SETTING_VLAN);
+ } else if (virtual_type == NM_TYPE_SETTING_BRIDGE) {
+ return ( other_type == NM_TYPE_SETTING_WIRED
+ || other_type == NM_TYPE_SETTING_BOND
+ || other_type == NM_TYPE_SETTING_TEAM
+ || other_type == NM_TYPE_SETTING_VLAN);
+ } else if (virtual_type == NM_TYPE_SETTING_TEAM) {
+ return ( other_type == NM_TYPE_SETTING_WIRED
+ || other_type == NM_TYPE_SETTING_BRIDGE
+ || other_type == NM_TYPE_SETTING_BOND
+ || other_type == NM_TYPE_SETTING_TEAM
+ || other_type == NM_TYPE_SETTING_VLAN);
+ } else if (virtual_type == NM_TYPE_SETTING_VLAN) {
+ return ( other_type == NM_TYPE_SETTING_WIRED
+ || other_type == NM_TYPE_SETTING_WIRELESS
+ || other_type == NM_TYPE_SETTING_BRIDGE
+ || other_type == NM_TYPE_SETTING_BOND
+ || other_type == NM_TYPE_SETTING_TEAM
+ || other_type == NM_TYPE_SETTING_VLAN);
+ } else {
+ g_warn_if_reached ();
+ return FALSE;
+ }
+}
+
+/***********************************************************/
+
+/* Unused prototype to make the compiler happy */
+const NMUtilsPrivateData *nm_util_get_private (void);
+
+static const NMUtilsPrivateData data = {
+ .nm_setting_ip4_config_get_address_label = nm_setting_ip4_config_get_address_label,
+ .nm_setting_ip4_config_add_address_with_label = nm_setting_ip4_config_add_address_with_label,
+};
+
+/**
+ * nm_utils_get_private:
+ *
+ * Entry point for NetworkManager-internal API. You should not use this
+ * function for any reason.
+ *
+ * Returns: Who knows? It's a mystery.
+ *
+ * Since: 0.9.10
+ */
+const NMUtilsPrivateData *
+nm_utils_get_private (void)
+{
+ return &data;
+}
+
+/**
+ * nm_util_get_private:
+ *
+ * You should not use this function for any reason.
+ *
+ * Returns: Who knows? It's a mystery.
+ *
+ * Since: 0.9.10
+ */
+const NMUtilsPrivateData *
+nm_util_get_private (void)
+{
+ /* Compat function to preserve ABI */
+ return nm_utils_get_private ();
+}
diff --git a/libnm-util/nm-utils.h b/libnm-util/nm-utils.h
index 60010f459..bb8786a14 100644
--- a/libnm-util/nm-utils.h
+++ b/libnm-util/nm-utils.h
@@ -20,7 +20,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2005 - 2012 Red Hat, Inc.
+ * (C) Copyright 2005 - 2013 Red Hat, Inc.
*/
#ifndef NM_UTILS_H
@@ -47,6 +47,7 @@ char * nm_utils_ssid_to_utf8 (const GByteArray *ssid);
GHashTable *nm_utils_gvalue_hash_dup (GHashTable *hash);
+NM_DEPRECATED_IN_0_9_10
void nm_utils_slist_free (GSList *list, GDestroyNotify elem_destroy_fn);
/**
@@ -119,6 +120,10 @@ GByteArray *nm_utils_rsa_key_encrypt (const GByteArray *data,
const char *in_password,
char **out_password,
GError **error);
+GByteArray *nm_utils_rsa_key_encrypt_aes (const GByteArray *data,
+ const char *in_password,
+ char **out_password,
+ GError **error);
gboolean nm_utils_file_is_pkcs12 (const char *filename);
guint32 nm_utils_wifi_freq_to_channel (guint32 freq);
@@ -136,15 +141,46 @@ gboolean nm_utils_wifi_is_channel_valid (guint32 channel, const char *band);
#define NM_UTILS_HWADDR_LEN_MAX 20 /* INFINIBAND_ALEN */
int nm_utils_hwaddr_len (int type) G_GNUC_PURE;
+NM_DEPRECATED_IN_0_9_10
int nm_utils_hwaddr_type (int len) G_GNUC_PURE;
char *nm_utils_hwaddr_ntoa (gconstpointer addr, int type);
GByteArray *nm_utils_hwaddr_atoba (const char *asc, int type);
guint8 *nm_utils_hwaddr_aton (const char *asc, int type, gpointer buffer);
+NM_AVAILABLE_IN_0_9_10
+char *nm_utils_hwaddr_ntoa_len (gconstpointer addr, gsize length);
+NM_AVAILABLE_IN_0_9_10
+guint8 *nm_utils_hwaddr_aton_len (const char *asc, gpointer buffer, gsize length);
+
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_utils_hwaddr_valid (const char *asc);
+
+NM_AVAILABLE_IN_0_9_10
+char *nm_utils_bin2hexstr (const char *bytes, int len, int final_len);
+NM_AVAILABLE_IN_0_9_10
+int nm_utils_hex2byte (const char *hex);
+NM_AVAILABLE_IN_0_9_10
+char *nm_utils_hexstr2bin (const char *hex, size_t len);
+
gboolean nm_utils_iface_valid_name(const char *name);
gboolean nm_utils_is_uuid (const char *str);
+/**
+ * NM_UTILS_INET_ADDRSTRLEN:
+ *
+ * Defines the minimal length for a char buffer that is suitable as @dst argument
+ * for both nm_utils_inet4_ntop() and nm_utils_inet6_ntop().
+ **/
+#define NM_UTILS_INET_ADDRSTRLEN INET6_ADDRSTRLEN
+NM_AVAILABLE_IN_0_9_10
+const char *nm_utils_inet4_ntop (in_addr_t inaddr, char *dst);
+NM_AVAILABLE_IN_0_9_10
+const char *nm_utils_inet6_ntop (const struct in6_addr *in6addr, char *dst);
+
+NM_AVAILABLE_IN_0_9_10
+gboolean nm_utils_check_virtual_device_compatibility (GType virtual_type, GType other_type);
+
G_END_DECLS
#endif /* NM_UTILS_H */
diff --git a/libnm-util/nm-value-transforms.c b/libnm-util/nm-value-transforms.c
new file mode 100644
index 000000000..f92596dc6
--- /dev/null
+++ b/libnm-util/nm-value-transforms.c
@@ -0,0 +1,594 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+
+/* NetworkManager -- Network link manager
+ *
+ * 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 2005 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
+
+static void
+_nm_utils_convert_op_to_string (const GValue *src_value, GValue *dest_value)
+{
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_OBJECT_PATH));
+
+ g_value_set_string (dest_value, (const char *) g_value_get_boxed (src_value));
+}
+
+static void
+_nm_utils_convert_strv_to_slist (const GValue *src_value, GValue *dest_value)
+{
+ char **str;
+ GSList *list = NULL;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), G_TYPE_STRV));
+
+ str = (char **) g_value_get_boxed (src_value);
+
+ while (str && str[i])
+ list = g_slist_prepend (list, g_strdup (str[i++]));
+
+ g_value_take_boxed (dest_value, g_slist_reverse (list));
+}
+
+static void
+_nm_utils_convert_slist_to_strv (const GValue *src_value, GValue *dest_value)
+{
+ GSList *slist;
+ char **strv;
+ int len, i = 0;
+
+ slist = g_value_get_boxed (src_value);
+ len = g_slist_length (slist);
+
+ strv = g_new (char *, len + 1);
+ for (i = 0; slist; slist = slist->next, i++)
+ strv[i] = g_strdup (slist->data);
+ strv[i] = NULL;
+
+ g_value_take_boxed (dest_value, strv);
+}
+
+static void
+_nm_utils_convert_strv_to_ptrarray (const GValue *src_value, GValue *dest_value)
+{
+ char **str;
+ GPtrArray *array = NULL;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), G_TYPE_STRV));
+
+ str = (char **) g_value_get_boxed (src_value);
+
+ array = g_ptr_array_sized_new (3);
+ while (str && str[i])
+ g_ptr_array_add (array, g_strdup (str[i++]));
+
+ g_value_take_boxed (dest_value, array);
+}
+
+static void
+_nm_utils_convert_string_list_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GSList *strings;
+ GString *printable;
+ GSList *iter;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_LIST_OF_STRING));
+
+ strings = (GSList *) g_value_get_boxed (src_value);
+
+ printable = g_string_new (NULL);
+ for (iter = strings; iter; iter = iter->next) {
+ if (iter != strings)
+ g_string_append_c (printable, ',');
+ g_string_append (printable, iter->data ? iter->data : "(null)");
+ }
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+_string_array_to_string (const GPtrArray *strings, GValue *dest_value)
+{
+ GString *printable;
+ int i;
+
+ printable = g_string_new (NULL);
+ for (i = 0; strings && i < strings->len; i++) {
+ if (i > 0)
+ g_string_append_c (printable, ',');
+ g_string_append (printable, strings->pdata[i]);
+ }
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+_nm_utils_convert_string_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ const GPtrArray *strings;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_STRING));
+
+ strings = (const GPtrArray *) g_value_get_boxed (src_value);
+ _string_array_to_string (strings, dest_value);
+}
+
+static void
+_nm_utils_convert_op_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ const GPtrArray *strings;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH));
+
+ strings = (const GPtrArray *) g_value_get_boxed (src_value);
+ _string_array_to_string (strings, dest_value);
+}
+
+static void
+_nm_utils_convert_uint_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GArray *array;
+ GString *printable;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_UINT_ARRAY));
+
+ array = (GArray *) g_value_get_boxed (src_value);
+
+ printable = g_string_new (NULL);
+ while (array && (i < array->len)) {
+ guint32 addr;
+
+ if (i > 0)
+ g_string_append (printable, ", ");
+
+ addr = g_array_index (array, guint32, i++);
+ g_string_append (printable, nm_utils_inet4_ntop (addr, NULL));
+ }
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+_nm_utils_convert_ip4_addr_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GPtrArray *ptr_array;
+ GString *printable;
+ guint i = 0;
+ char buf[INET_ADDRSTRLEN];
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT));
+
+ ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
+
+ printable = g_string_new (NULL);
+ while (ptr_array && (i < ptr_array->len)) {
+ GArray *array;
+ gboolean is_addr; /* array contains address x route */
+
+ if (i > 0)
+ g_string_append (printable, "; ");
+
+ g_string_append (printable, "{ ");
+ array = (GArray *) g_ptr_array_index (ptr_array, i++);
+ if (array->len < 2) {
+ g_string_append (printable, "invalid");
+ continue;
+ }
+ is_addr = (array->len < 4);
+
+ nm_utils_inet4_ntop (g_array_index (array, guint32, 0), buf);
+ if (is_addr)
+ g_string_append_printf (printable, "ip = %s", buf);
+ else
+ g_string_append_printf (printable, "dst = %s", buf);
+
+ g_string_append_printf (printable, "/%u",
+ g_array_index (array, guint32, 1));
+
+ if (array->len > 2) {
+ nm_utils_inet4_ntop (g_array_index (array, guint32, 2), buf);
+ if (is_addr)
+ g_string_append_printf (printable, ", gw = %s", buf);
+ else
+ g_string_append_printf (printable, ", nh = %s", buf);
+ }
+
+ if (array->len > 3) {
+ g_string_append_printf (printable, ", mt = %u",
+ g_array_index (array, guint32, 3));
+ }
+
+ g_string_append (printable, " }");
+ }
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+convert_one_gvalue_hash_entry (gpointer key, gpointer value, gpointer user_data)
+{
+ GString *printable = (GString *) user_data;
+ char *value_as_string;
+
+ value_as_string = g_strdup_value_contents ((GValue *) value);
+ g_string_append_printf (printable, " { '%s': %s },", (const char *) key, value_as_string);
+ g_free (value_as_string);
+}
+
+static void
+_nm_utils_convert_gvalue_hash_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GHashTable *hash;
+ GString *printable;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_MAP_OF_VARIANT));
+
+ hash = (GHashTable *) g_value_get_boxed (src_value);
+
+ printable = g_string_new ("[");
+ g_hash_table_foreach (hash, convert_one_gvalue_hash_entry, printable);
+ g_string_append (printable, " ]");
+
+ g_value_take_string (dest_value, printable->str);
+ g_string_free (printable, FALSE);
+}
+
+static void
+convert_one_string_hash_entry (gpointer key, gpointer value, gpointer user_data)
+{
+ GString *printable = (GString *) user_data;
+
+ if (printable->len)
+ g_string_append_c (printable, ',');
+ g_string_append_printf (printable, "%s=%s", (const char *) key, (const char *) value);
+}
+
+static void
+_nm_utils_convert_string_hash_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GHashTable *hash;
+ GString *printable;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_MAP_OF_STRING));
+
+ hash = (GHashTable *) g_value_get_boxed (src_value);
+
+ printable = g_string_new (NULL);
+ if (hash)
+ g_hash_table_foreach (hash, convert_one_string_hash_entry, printable);
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+_nm_utils_convert_byte_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GArray *array;
+ GString *printable;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_UCHAR_ARRAY));
+
+ array = (GArray *) g_value_get_boxed (src_value);
+
+ printable = g_string_new ("[");
+ if (array) {
+ while (i < MIN (array->len, 35)) {
+ if (i > 0)
+ g_string_append_c (printable, ' ');
+ g_string_append_printf (printable, "0x%02X",
+ g_array_index (array, unsigned char, i++));
+ }
+ if (i < array->len)
+ g_string_append (printable, " ... ");
+ }
+ g_string_append_c (printable, ']');
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+_nm_utils_convert_ip6_dns_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GPtrArray *ptr_array;
+ GString *printable;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR));
+
+ ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
+
+ printable = g_string_new (NULL);
+ while (ptr_array && (i < ptr_array->len)) {
+ GByteArray *bytearray;
+ struct in6_addr *addr;
+
+ if (i > 0)
+ g_string_append (printable, ", ");
+
+ bytearray = (GByteArray *) g_ptr_array_index (ptr_array, i++);
+ if (bytearray->len != 16) {
+ g_string_append (printable, "invalid");
+ continue;
+ }
+ addr = (struct in6_addr *) bytearray->data;
+ g_string_append (printable, nm_utils_inet6_ntop (addr, NULL));
+ }
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+_nm_utils_convert_ip6_addr_struct_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GPtrArray *ptr_array;
+ GString *printable;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS));
+
+ ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
+
+ printable = g_string_new (NULL);
+ while (ptr_array && (i < ptr_array->len)) {
+ GValueArray *elements;
+ GValue *tmp;
+ GByteArray *ba_addr;
+ struct in6_addr *addr;
+ guint32 prefix;
+
+ if (i > 0)
+ g_string_append (printable, "; ");
+
+ g_string_append (printable, "{ ");
+ elements = (GValueArray *) g_ptr_array_index (ptr_array, i++);
+ if (!_nm_utils_gvalue_array_validate (elements, 3,
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_UINT,
+ DBUS_TYPE_G_UCHAR_ARRAY)) {
+ g_string_append (printable, "invalid }");
+ continue;
+ }
+
+ /* IPv6 address */
+ tmp = g_value_array_get_nth (elements, 0);
+ ba_addr = g_value_get_boxed (tmp);
+ if (ba_addr->len != 16) {
+ g_string_append (printable, "invalid }");
+ continue;
+ }
+ addr = (struct in6_addr *) ba_addr->data;
+ g_string_append_printf (printable, "ip = %s", nm_utils_inet6_ntop (addr, NULL));
+
+ /* Prefix */
+ tmp = g_value_array_get_nth (elements, 1);
+ prefix = g_value_get_uint (tmp);
+ if (prefix > 128) {
+ g_string_append (printable, "/invalid }");
+ continue;
+ }
+ g_string_append_printf (printable, "/%u", prefix);
+ g_string_append (printable, ", ");
+
+ /* IPv6 Gateway */
+ tmp = g_value_array_get_nth (elements, 2);
+ ba_addr = g_value_get_boxed (tmp);
+ if (ba_addr->len != 16) {
+ g_string_append (printable, "invalid }");
+ continue;
+ }
+ addr = (struct in6_addr *) ba_addr->data;
+ g_string_append_printf (printable, "gw = %s", nm_utils_inet6_ntop (addr, NULL));
+ g_string_append (printable, " }");
+ }
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+_nm_utils_convert_ip6_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GPtrArray *ptr_array;
+ GString *printable;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE));
+
+ ptr_array = (GPtrArray *) g_value_get_boxed (src_value);
+
+ printable = g_string_new (NULL);
+ while (ptr_array && (i < ptr_array->len)) {
+ GValueArray *elements;
+ GValue *tmp;
+ GByteArray *ba_addr;
+ struct in6_addr *addr;
+ guint32 prefix, metric;
+
+ if (i > 0)
+ g_string_append (printable, "; ");
+
+ g_string_append (printable, "{ ");
+ elements = (GValueArray *) g_ptr_array_index (ptr_array, i++);
+ if (!_nm_utils_gvalue_array_validate (elements, 4,
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_UINT,
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_UINT)) {
+ g_string_append (printable, "invalid");
+ continue;
+ }
+
+ /* Destination address */
+ tmp = g_value_array_get_nth (elements, 0);
+ ba_addr = g_value_get_boxed (tmp);
+ if (ba_addr->len != 16) {
+ g_string_append (printable, "invalid");
+ continue;
+ }
+ addr = (struct in6_addr *) ba_addr->data;
+ g_string_append_printf (printable, "dst = %s", nm_utils_inet6_ntop (addr, NULL));
+
+ /* Prefix */
+ tmp = g_value_array_get_nth (elements, 1);
+ prefix = g_value_get_uint (tmp);
+ if (prefix > 128) {
+ g_string_append (printable, "/invalid");
+ continue;
+ }
+ g_string_append_printf (printable, "/%u", prefix);
+ g_string_append (printable, ", ");
+
+ /* Next hop addresses */
+ tmp = g_value_array_get_nth (elements, 2);
+ ba_addr = g_value_get_boxed (tmp);
+ if (ba_addr->len != 16) {
+ g_string_append (printable, "invalid");
+ continue;
+ }
+ addr = (struct in6_addr *) ba_addr->data;
+ g_string_append_printf (printable, "nh = %s", nm_utils_inet6_ntop (addr, NULL));
+ g_string_append (printable, ", ");
+
+ /* Metric */
+ tmp = g_value_array_get_nth (elements, 3);
+ metric = g_value_get_uint (tmp);
+ g_string_append_printf (printable, "mt = %u", metric);
+
+ g_string_append (printable, " }");
+ }
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+#define OLD_DBUS_TYPE_G_IP6_ADDRESS (dbus_g_type_get_struct ("GValueArray", DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, G_TYPE_INVALID))
+#define OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS (dbus_g_type_get_collection ("GPtrArray", OLD_DBUS_TYPE_G_IP6_ADDRESS))
+
+static void
+_nm_utils_convert_old_ip6_addr_array (const GValue *src_value, GValue *dst_value)
+{
+ GPtrArray *src_outer_array;
+ GPtrArray *dst_outer_array;
+ guint i;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS));
+
+ src_outer_array = (GPtrArray *) g_value_get_boxed (src_value);
+ dst_outer_array = g_ptr_array_new ();
+
+ for (i = 0; src_outer_array && (i < src_outer_array->len); i++) {
+ GValueArray *src_addr_array;
+ GValueArray *dst_addr_array;
+ GValue element = G_VALUE_INIT;
+ GValue *src_addr, *src_prefix;
+ GByteArray *ba;
+
+ src_addr_array = (GValueArray *) g_ptr_array_index (src_outer_array, i);
+ if (!_nm_utils_gvalue_array_validate (src_addr_array, 2, DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT)) {
+ g_warning ("%s: invalid old IPv6 address type", __func__);
+ return;
+ }
+
+ dst_addr_array = g_value_array_new (3);
+
+ src_addr = g_value_array_get_nth (src_addr_array, 0);
+ g_value_array_append (dst_addr_array, src_addr);
+ src_prefix = g_value_array_get_nth (src_addr_array, 1);
+ g_value_array_append (dst_addr_array, src_prefix);
+
+ /* Blank Gateway */
+ g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
+ ba = g_byte_array_new ();
+ g_byte_array_append (ba, (guint8 *) "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16);
+ g_value_take_boxed (&element, ba);
+ g_value_array_append (dst_addr_array, &element);
+ g_value_unset (&element);
+
+ g_ptr_array_add (dst_outer_array, dst_addr_array);
+ }
+
+ g_value_take_boxed (dst_value, dst_outer_array);
+}
+
+void
+_nm_value_transforms_register (void)
+{
+ static gboolean registered = FALSE;
+
+ if (G_UNLIKELY (!registered)) {
+ g_value_register_transform_func (DBUS_TYPE_G_OBJECT_PATH,
+ G_TYPE_STRING,
+ _nm_utils_convert_op_to_string);
+ g_value_register_transform_func (G_TYPE_STRV,
+ DBUS_TYPE_G_LIST_OF_STRING,
+ _nm_utils_convert_strv_to_slist);
+ g_value_register_transform_func (DBUS_TYPE_G_LIST_OF_STRING,
+ G_TYPE_STRV,
+ _nm_utils_convert_slist_to_strv);
+ g_value_register_transform_func (G_TYPE_STRV,
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ _nm_utils_convert_strv_to_ptrarray);
+ g_value_register_transform_func (DBUS_TYPE_G_LIST_OF_STRING,
+ G_TYPE_STRING,
+ _nm_utils_convert_string_list_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_TYPE_STRING,
+ _nm_utils_convert_string_array_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_TYPE_STRING,
+ _nm_utils_convert_op_array_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_UINT_ARRAY,
+ G_TYPE_STRING,
+ _nm_utils_convert_uint_array_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_TYPE_STRING,
+ _nm_utils_convert_ip4_addr_route_struct_array_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_STRING,
+ _nm_utils_convert_gvalue_hash_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_MAP_OF_STRING,
+ G_TYPE_STRING,
+ _nm_utils_convert_string_hash_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_STRING,
+ _nm_utils_convert_byte_array_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
+ G_TYPE_STRING,
+ _nm_utils_convert_ip6_dns_array_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
+ G_TYPE_STRING,
+ _nm_utils_convert_ip6_addr_struct_array_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
+ G_TYPE_STRING,
+ _nm_utils_convert_ip6_route_struct_array_to_string);
+ g_value_register_transform_func (OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
+ DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
+ _nm_utils_convert_old_ip6_addr_array);
+ registered = TRUE;
+ }
+}
diff --git a/libnm-util/tests/Makefile.am b/libnm-util/tests/Makefile.am
index d49ef8c8a..6d3d225ef 100644
--- a/libnm-util/tests/Makefile.am
+++ b/libnm-util/tests/Makefile.am
@@ -7,15 +7,18 @@ AM_CPPFLAGS = \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS)
+ $(DBUS_CFLAGS) \
+ -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-util/tests/certs/\"
noinst_PROGRAMS = \
test-settings-defaults \
test-crypto \
test-secrets \
test-general \
- test-setting-8021x
+ test-setting-8021x \
+ test-setting-dcb
test_settings_defaults_SOURCES = \
test-settings-defaults.c
@@ -36,10 +39,6 @@ test_crypto_LDADD = \
test_secrets_SOURCES = \
test-secrets.c
-test_secrets_CPPFLAGS = \
- -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-util/tests/certs/\" \
- $(AM_CPPFLAGS)
-
test_secrets_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(GLIB_LIBS) \
@@ -61,11 +60,15 @@ test_setting_8021x_LDADD = \
$(GLIB_LIBS) \
$(DBUS_LIBS)
-check-local: test-settings-defaults test-crypto test-secrets
- $(abs_builddir)/test-settings-defaults
- $(abs_builddir)/test-secrets
- $(abs_builddir)/test-general
+test_setting_dcb_SOURCES = \
+ test-setting-dcb.c
+test_setting_dcb_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(GLIB_LIBS) \
+ $(DBUS_LIBS)
+
+check-local: test-crypto test-setting-8021x
# Private key and CA certificate in the same file (PEM)
$(abs_builddir)/test-setting-8021x $(srcdir)/certs/test_key_and_cert.pem "test"
@@ -122,4 +125,9 @@ check-local: test-settings-defaults test-crypto test-secrets
$(srcdir)/certs/pkcs8-enc-key.pem \
"1234567890"
+# Private key with AES cipher
+ $(abs_builddir)/test-crypto --key $(srcdir)/certs/test-aes-key.pem "test-aes-password"
+
+TESTS = test-settings-defaults test-secrets test-general test-setting-dcb
+
endif
diff --git a/libnm-util/tests/Makefile.in b/libnm-util/tests/Makefile.in
index 662c31611..de57f25a5 100644
--- a/libnm-util/tests/Makefile.in
+++ b/libnm-util/tests/Makefile.in
@@ -81,12 +81,17 @@ host_triplet = @host@
@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-settings-defaults$(EXEEXT) \
@ENABLE_TESTS_TRUE@ test-crypto$(EXEEXT) test-secrets$(EXEEXT) \
@ENABLE_TESTS_TRUE@ test-general$(EXEEXT) \
-@ENABLE_TESTS_TRUE@ test-setting-8021x$(EXEEXT)
+@ENABLE_TESTS_TRUE@ test-setting-8021x$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-setting-dcb$(EXEEXT)
+@ENABLE_TESTS_TRUE@TESTS = test-settings-defaults$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-secrets$(EXEEXT) test-general$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-setting-dcb$(EXEEXT)
subdir = libnm-util/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -123,8 +128,7 @@ test_general_OBJECTS = $(am_test_general_OBJECTS)
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__test_secrets_SOURCES_DIST = test-secrets.c
-@ENABLE_TESTS_TRUE@am_test_secrets_OBJECTS = \
-@ENABLE_TESTS_TRUE@ test_secrets-test-secrets.$(OBJEXT)
+@ENABLE_TESTS_TRUE@am_test_secrets_OBJECTS = test-secrets.$(OBJEXT)
test_secrets_OBJECTS = $(am_test_secrets_OBJECTS)
@ENABLE_TESTS_TRUE@test_secrets_DEPENDENCIES = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@@ -136,6 +140,13 @@ test_setting_8021x_OBJECTS = $(am_test_setting_8021x_OBJECTS)
@ENABLE_TESTS_TRUE@test_setting_8021x_DEPENDENCIES = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__test_setting_dcb_SOURCES_DIST = test-setting-dcb.c
+@ENABLE_TESTS_TRUE@am_test_setting_dcb_OBJECTS = \
+@ENABLE_TESTS_TRUE@ test-setting-dcb.$(OBJEXT)
+test_setting_dcb_OBJECTS = $(am_test_setting_dcb_OBJECTS)
+@ENABLE_TESTS_TRUE@test_setting_dcb_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__test_settings_defaults_SOURCES_DIST = test-settings-defaults.c
@ENABLE_TESTS_TRUE@am_test_settings_defaults_OBJECTS = \
@ENABLE_TESTS_TRUE@ test-settings-defaults.$(OBJEXT)
@@ -179,11 +190,12 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(test_crypto_SOURCES) $(test_general_SOURCES) \
$(test_secrets_SOURCES) $(test_setting_8021x_SOURCES) \
- $(test_settings_defaults_SOURCES)
+ $(test_setting_dcb_SOURCES) $(test_settings_defaults_SOURCES)
DIST_SOURCES = $(am__test_crypto_SOURCES_DIST) \
$(am__test_general_SOURCES_DIST) \
$(am__test_secrets_SOURCES_DIST) \
$(am__test_setting_8021x_SOURCES_DIST) \
+ $(am__test_setting_dcb_SOURCES_DIST) \
$(am__test_settings_defaults_SOURCES_DIST)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
@@ -225,6 +237,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DIST_SUBDIRS = certs
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
@@ -277,12 +311,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -307,7 +344,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -352,12 +388,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -374,6 +414,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -401,11 +443,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -420,6 +467,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -482,6 +530,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -492,14 +541,17 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@SUBDIRS = certs
@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS)
+@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
+@ENABLE_TESTS_TRUE@ -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-util/tests/certs/\"
@ENABLE_TESTS_TRUE@test_settings_defaults_SOURCES = \
@ENABLE_TESTS_TRUE@ test-settings-defaults.c
@@ -520,10 +572,6 @@ with_resolvconf = @with_resolvconf@
@ENABLE_TESTS_TRUE@test_secrets_SOURCES = \
@ENABLE_TESTS_TRUE@ test-secrets.c
-@ENABLE_TESTS_TRUE@test_secrets_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-util/tests/certs/\" \
-@ENABLE_TESTS_TRUE@ $(AM_CPPFLAGS)
-
@ENABLE_TESTS_TRUE@test_secrets_LDADD = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
@@ -545,6 +593,14 @@ with_resolvconf = @with_resolvconf@
@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+@ENABLE_TESTS_TRUE@test_setting_dcb_SOURCES = \
+@ENABLE_TESTS_TRUE@ test-setting-dcb.c
+
+@ENABLE_TESTS_TRUE@test_setting_dcb_LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
+@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+
all: all-recursive
.SUFFIXES:
@@ -605,6 +661,10 @@ test-setting-8021x$(EXEEXT): $(test_setting_8021x_OBJECTS) $(test_setting_8021x_
@rm -f test-setting-8021x$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_setting_8021x_OBJECTS) $(test_setting_8021x_LDADD) $(LIBS)
+test-setting-dcb$(EXEEXT): $(test_setting_dcb_OBJECTS) $(test_setting_dcb_DEPENDENCIES) $(EXTRA_test_setting_dcb_DEPENDENCIES)
+ @rm -f test-setting-dcb$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_setting_dcb_OBJECTS) $(test_setting_dcb_LDADD) $(LIBS)
+
test-settings-defaults$(EXEEXT): $(test_settings_defaults_OBJECTS) $(test_settings_defaults_DEPENDENCIES) $(EXTRA_test_settings_defaults_DEPENDENCIES)
@rm -f test-settings-defaults$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_settings_defaults_OBJECTS) $(test_settings_defaults_LDADD) $(LIBS)
@@ -617,9 +677,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-crypto.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-general.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-secrets.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setting-8021x.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setting-dcb.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-settings-defaults.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_secrets-test-secrets.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -642,20 +703,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-test_secrets-test-secrets.o: test-secrets.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_secrets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_secrets-test-secrets.o -MD -MP -MF $(DEPDIR)/test_secrets-test-secrets.Tpo -c -o test_secrets-test-secrets.o `test -f 'test-secrets.c' || echo '$(srcdir)/'`test-secrets.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_secrets-test-secrets.Tpo $(DEPDIR)/test_secrets-test-secrets.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-secrets.c' object='test_secrets-test-secrets.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_secrets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_secrets-test-secrets.o `test -f 'test-secrets.c' || echo '$(srcdir)/'`test-secrets.c
-
-test_secrets-test-secrets.obj: test-secrets.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_secrets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_secrets-test-secrets.obj -MD -MP -MF $(DEPDIR)/test_secrets-test-secrets.Tpo -c -o test_secrets-test-secrets.obj `if test -f 'test-secrets.c'; then $(CYGPATH_W) 'test-secrets.c'; else $(CYGPATH_W) '$(srcdir)/test-secrets.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_secrets-test-secrets.Tpo $(DEPDIR)/test_secrets-test-secrets.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-secrets.c' object='test_secrets-test-secrets.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_secrets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_secrets-test-secrets.obj `if test -f 'test-secrets.c'; then $(CYGPATH_W) 'test-secrets.c'; else $(CYGPATH_W) '$(srcdir)/test-secrets.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
@@ -761,6 +808,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -818,7 +958,7 @@ distdir: $(DISTFILES)
done
@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS check-local
check: check-recursive
all-am: Makefile $(PROGRAMS)
installdirs: installdirs-recursive
@@ -927,26 +1067,22 @@ uninstall-am:
.MAKE: $(am__recursive_targets) check-am install-am install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am check-local clean clean-generic clean-libtool \
- clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
- distclean-compile distclean-generic distclean-libtool \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- installdirs-am maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
- uninstall-am
-
-
-@ENABLE_TESTS_TRUE@check-local: test-settings-defaults test-crypto test-secrets
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-settings-defaults
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-secrets
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-general
-
+ check-TESTS check-am check-local clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
+ ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+
+@ENABLE_TESTS_TRUE@check-local: test-crypto test-setting-8021x
# Private key and CA certificate in the same file (PEM)
@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/test_key_and_cert.pem "test"
@@ -1003,6 +1139,9 @@ uninstall-am:
@ENABLE_TESTS_TRUE@ $(srcdir)/certs/pkcs8-enc-key.pem \
@ENABLE_TESTS_TRUE@ "1234567890"
+# Private key with AES cipher
+@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --key $(srcdir)/certs/test-aes-key.pem "test-aes-password"
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/libnm-util/tests/certs/Makefile.am b/libnm-util/tests/certs/Makefile.am
index e0f00a479..309925174 100644
--- a/libnm-util/tests/certs/Makefile.am
+++ b/libnm-util/tests/certs/Makefile.am
@@ -20,5 +20,6 @@ EXTRA_DIST = \
test-key-only-decrypted.der \
pkcs8-enc-key.pem \
pkcs8-noenc-key.pem \
- pkcs8-decrypted.der
+ pkcs8-decrypted.der \
+ test-aes-key.pem
diff --git a/libnm-util/tests/certs/Makefile.in b/libnm-util/tests/certs/Makefile.in
index e570aafd0..218cb48d2 100644
--- a/libnm-util/tests/certs/Makefile.in
+++ b/libnm-util/tests/certs/Makefile.in
@@ -89,7 +89,8 @@ host_triplet = @host@
subdir = libnm-util/tests/certs
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -153,12 +154,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -183,7 +187,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -228,12 +231,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -250,6 +257,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -277,11 +286,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -296,6 +310,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -358,6 +373,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -368,6 +384,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
test_ca_cert.pem \
test_ca_cert.der \
@@ -381,7 +398,8 @@ EXTRA_DIST = \
test-key-only-decrypted.der \
pkcs8-enc-key.pem \
pkcs8-noenc-key.pem \
- pkcs8-decrypted.der
+ pkcs8-decrypted.der \
+ test-aes-key.pem
all: all-am
diff --git a/libnm-util/tests/certs/test-aes-key.pem b/libnm-util/tests/certs/test-aes-key.pem
new file mode 100644
index 000000000..aab8f463c
--- /dev/null
+++ b/libnm-util/tests/certs/test-aes-key.pem
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-128-CBC,800391B7DD72364B4C2562E0B6AEA000
+
+E9dgNCIATOr4CN5c8o6B+8wdqq/I1BLmPmW2qT7YZepoF7E+RUb8ZLjo1VO2XsJw
+Ir4EzuH7837zBD9dP5CjlY8cWfR63gZpEWRY5Jub8kzvqiL4UZ0Qr8IHOZxAkKEz
+EL1Pn7e+tYt4kA372LPZHWO3vRCgmL1iSJj2/k3avPWAx7NUie4bzGI+00WNv699
+ClKzsJbWB1eiQvYgOr4aVV26oWfa896JkBoGhgZQ6ckqFpsdAos8m46iOSVZrwgq
+Y2/d1CvfQod+87c8LRatwAjf+d6YAJJaeMyxjCGuAY6/JyDsorUkM2OlvbTt6WOA
+gSPWO8I+Ov6THb4IuPhpIJ30Sl88tc6MlIByW49EWu2G1jPw3L8iqRzZ50Z85dyz
+N9yFP91wEwi5F0Zed4iEpg3NVfklEe/VYqCldc5f9fZ84G5V98ZlAdNSqwd/UNBU
+iPTflGqVpp1u+J2isOk+Agpj1MCxh2q0RNuvY9KHzOYBScirfbG4DKNbQgS/5Zw7
+3g9YL5Wbo7BczHLiXf/2adu6T8wI1LKRjkeLV9dK1Vw3ZaGy3mB9oFhCgjh9BNHw
+wC78CVcUErjtOXdQagiCQn5k5EGeAB97QFROoAFjAmGvq3xCi4EHd9Sk6fcMm7Oi
+1fuVR5EXUubF4Llq06lFzQp01s2F73noH49bs3qwdf0n8nrL2XhKB0XCOV/I3K5c
+Y3W+YSl361QGjZ/NUcFLIIy+Uro90MmUBNk6af+wGHRJeflpVnK0ATX1PtpNHziz
+jiMiIZicjgfVLxl1a5zTl6KUmGWKlZb533adQ0s6q9Qmi5Vk5L5W/GdMjcFtZbM6
+GU7EOkwihMLb3DVsNbm7vb8tUXqe/e5RmXtij8Yb+2a6/M9yaOHa0VjHzdiKHecr
+eEYaKQDj7NCWLslNnRRh9GmgXcu2pqBhqRM3HAt3cEaHKKWHTcoWcz11pFwMHNtn
+bU9GjGRVc3lCGhVNRiloO0zrKHmcBpDVLw2+ycXXpj/RaBW2fy0xRLKolyla+jEr
+zdLzVI61O50ZMycOtPmE7DVZpkokn32hGer1eCOFnsN1lywi4cWLvU0jbQC+CJyw
+T9vS8zB3WgOl8rC1AHsfQ4KYajlKleQm89deurQymnt/Qx49SiQA+TpwG9Xvx2TP
+3Vc1NwZfM9ZZ1+6xit/rTuS3LhnmhEnGnV5ZyvAdmkCcV2iHjOnLnQWWQn24MHU3
+8Y9D4AdpI5V7Igwr3vH2NZMiw1W2Yc5EJuPAT8nIs5sgOYhXB/QLPJvulvOQhuNC
+NPwJ6A505JrVNfHuEaoGUyA+mPeWuLwQo8y8cM6ZdFMG3RrwFNzuYTrc1Z/9GsmA
+C0UfHf5dL0r7oWZ1SbpSvsmHYqc8sIypq0ohuLEbpegS/hWP8b2/XDRTjfTiJOrM
+4LsUH9PMOJSxDlwS+7e3FdcGfgXfsMgB3aOjQvNpKEolOuv4A5LVFeMrrwtw4Xo1
+EuhstZwyarUTJenDUXzkakhA+8Yw/g2a7RsnANVTkeBuv2PbqFL4zdlsWvcpkz41
+ESxx1siSeU1E9beOII0zSi8vUD0IAevRHaWSlfU2po600IzX1FN97pa4DJV2ycgn
+-----END RSA PRIVATE KEY-----
diff --git a/libnm-util/tests/test-crypto.c b/libnm-util/tests/test-crypto.c
index 57e39fcaa..c11b6392f 100644
--- a/libnm-util/tests/test-crypto.c
+++ b/libnm-util/tests/test-crypto.c
@@ -28,10 +28,11 @@
#include <stdio.h>
#include <string.h>
-#include "nm-test-helpers.h"
#include "crypto.h"
#include "nm-utils.h"
+#include "nm-test-utils.h"
+
#if 0
static const char *pem_rsa_key_begin = "-----BEGIN RSA PRIVATE KEY-----";
static const char *pem_rsa_key_end = "-----END RSA PRIVATE KEY-----";
@@ -69,10 +70,6 @@ dump_key_to_pem (const char *key, gsize key_len, int key_type)
}
str = g_string_new (NULL);
- if (!str) {
- g_warning ("Couldn't allocate buffer to write out key.");
- goto out;
- }
g_string_append (str, start_tag);
g_string_append_c (str, '\n');
@@ -122,10 +119,8 @@ file_to_byte_array (const char *filename)
if (g_file_get_contents (filename, &contents, &length, NULL)) {
array = g_byte_array_sized_new (length);
- if (array) {
- g_byte_array_append (array, (guint8 *) contents, length);
- g_assert (array->len == length);
- }
+ g_byte_array_append (array, (guint8 *) contents, length);
+ g_assert (array->len == length);
g_free (contents);
}
return array;
@@ -261,6 +256,28 @@ test_load_pkcs8 (const char *path,
}
}
+static gboolean
+is_cipher_aes (const char *path)
+{
+ char *contents;
+ gsize length = 0;
+ const char *cipher;
+ gboolean is_aes = FALSE;
+
+ if (!g_file_get_contents (path, &contents, &length, NULL))
+ return FALSE;
+
+ cipher = strstr (contents, "DEK-Info: ");
+ if (cipher) {
+ cipher += strlen ("DEK-Info: ");
+ if (g_str_has_prefix (cipher, "AES-128-CBC"))
+ is_aes = TRUE;
+ }
+
+ g_free (contents);
+ return is_aes;
+}
+
static void
test_encrypt_private_key (const char *path,
const char *password,
@@ -280,7 +297,10 @@ test_encrypt_private_key (const char *path,
path, NM_CRYPTO_KEY_TYPE_RSA, key_type);
/* Now re-encrypt the private key */
- encrypted = nm_utils_rsa_key_encrypt (array, password, NULL, &error);
+ if (is_cipher_aes (path))
+ encrypted = nm_utils_rsa_key_encrypt_aes (array, password, NULL, &error);
+ else
+ encrypted = nm_utils_rsa_key_encrypt (array, password, NULL, &error);
ASSERT (encrypted != NULL, desc,
"couldn't re-encrypt private key file '%s': %d %s",
path, error->code, error->message);
diff --git a/libnm-util/tests/test-general.c b/libnm-util/tests/test-general.c
index 20a99472b..97625605c 100644
--- a/libnm-util/tests/test-general.c
+++ b/libnm-util/tests/test-general.c
@@ -25,9 +25,9 @@
#include <netinet/ether.h>
#include <linux/if_infiniband.h>
-#include "nm-test-helpers.h"
#include <nm-utils.h>
+#include "nm-setting-private.h"
#include "nm-setting-connection.h"
#include "nm-setting-vpn.h"
#include "nm-setting-gsm.h"
@@ -38,8 +38,14 @@
#include "nm-setting-ip4-config.h"
#include "nm-setting-pppoe.h"
#include "nm-setting-serial.h"
+#include "nm-setting-vlan.h"
+#include "nm-setting-bond.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
#include "nm-dbus-glib-types.h"
+#include "nm-test-utils.h"
+
static void
vpn_check_func (const char *key, const char *value, gpointer user_data)
{
@@ -116,22 +122,56 @@ test_setting_vpn_items (void)
nm_setting_vpn_remove_secret (s_vpn, "foobar4");
/* Try to add some blank values and make sure they are rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*key != NULL*");
nm_setting_vpn_add_data_item (s_vpn, NULL, NULL);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strlen (key) > 0*");
nm_setting_vpn_add_data_item (s_vpn, "", "");
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*item != NULL*");
nm_setting_vpn_add_data_item (s_vpn, "foobar1", NULL);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strlen (item) > 0*");
nm_setting_vpn_add_data_item (s_vpn, "foobar1", "");
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*key != NULL*");
nm_setting_vpn_add_data_item (s_vpn, NULL, "blahblah1");
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strlen (key) > 0*");
nm_setting_vpn_add_data_item (s_vpn, "", "blahblah1");
+ g_test_assert_expected_messages ();
nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_empty_func, "vpn-data-empty");
/* Try to add some blank secrets and make sure they are rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*key != NULL*");
nm_setting_vpn_add_secret (s_vpn, NULL, NULL);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strlen (key) > 0*");
nm_setting_vpn_add_secret (s_vpn, "", "");
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*secret != NULL*");
nm_setting_vpn_add_secret (s_vpn, "foobar1", NULL);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strlen (secret) > 0*");
nm_setting_vpn_add_secret (s_vpn, "foobar1", "");
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*key != NULL*");
nm_setting_vpn_add_secret (s_vpn, NULL, "blahblah1");
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strlen (key) > 0*");
nm_setting_vpn_add_secret (s_vpn, "", "blahblah1");
+ g_test_assert_expected_messages ();
nm_setting_vpn_foreach_secret (s_vpn, vpn_check_empty_func, "vpn-secrets-empty");
@@ -144,7 +184,7 @@ test_setting_vpn_update_secrets (void)
NMConnection *connection;
NMSettingVPN *s_vpn;
GHashTable *settings, *vpn, *secrets;
- GValue val = { 0 };
+ GValue val = G_VALUE_INIT;
gboolean success;
GError *error = NULL;
const char *tmp;
@@ -194,6 +234,7 @@ test_setting_vpn_update_secrets (void)
ASSERT (strcmp (tmp, val2) == 0,
"vpn-update-secrets", "unexpected key #2 value");
+ g_hash_table_destroy (settings);
g_object_unref (connection);
}
@@ -266,6 +307,156 @@ test_setting_vpn_modify_during_foreach (void)
g_object_unref (s_vpn);
}
+static void
+test_setting_ip4_config_labels (void)
+{
+ NMSettingIP4Config *s_ip4;
+ NMIP4Address *addr;
+ const char *label;
+ GPtrArray *addrs;
+ GSList *labels;
+ GError *error = NULL;
+
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NULL);
+
+ /* addr 1 */
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, 0x01010101);
+ nm_ip4_address_set_prefix (addr, 24);
+
+ nm_setting_ip4_config_add_address (s_ip4, addr);
+ nm_ip4_address_unref (addr);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_no_error (error);
+
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 0));
+ g_assert_cmpstr (label, ==, NULL);
+
+ /* addr 2 */
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, 0x02020202);
+ nm_ip4_address_set_prefix (addr, 24);
+
+ NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_add_address_with_label (s_ip4, addr, "eth0:1"));
+ nm_ip4_address_unref (addr);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_no_error (error);
+
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 1));
+ g_assert_cmpstr (label, ==, "eth0:1");
+
+ /* addr 3 */
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, 0x03030303);
+ nm_ip4_address_set_prefix (addr, 24);
+
+ NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_add_address_with_label (s_ip4, addr, NULL));
+ nm_ip4_address_unref (addr);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_no_error (error);
+
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 2));
+ g_assert_cmpstr (label, ==, NULL);
+
+ /* Remove addr 1 and re-verify remaining addresses */
+ nm_setting_ip4_config_remove_address (s_ip4, 0);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_no_error (error);
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+ g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x02020202);
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 0));
+ g_assert_cmpstr (label, ==, "eth0:1");
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, 1);
+ g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x03030303);
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 1));
+ g_assert_cmpstr (label, ==, NULL);
+
+
+ /* Test explicit property assignment */
+ g_object_get (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_ADDRESSES, &addrs,
+ "address-labels", &labels,
+ NULL);
+
+ nm_setting_ip4_config_clear_addresses (s_ip4);
+ g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 0);
+
+ /* Setting addrs but not labels will result in empty labels */
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_ADDRESSES, addrs,
+ NULL);
+ g_boxed_free (DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT, addrs);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 2);
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+ g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x02020202);
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 0));
+ g_assert_cmpstr (label, ==, NULL);
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, 1);
+ g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x03030303);
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 1));
+ g_assert_cmpstr (label, ==, NULL);
+
+ /* Setting labels now will leave addresses untouched */
+ g_object_set (G_OBJECT (s_ip4),
+ "address-labels", labels,
+ NULL);
+ g_boxed_free (DBUS_TYPE_G_LIST_OF_STRING, labels);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 2);
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+ g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x02020202);
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 0));
+ g_assert_cmpstr (label, ==, "eth0:1");
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, 1);
+ g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x03030303);
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 1));
+ g_assert_cmpstr (label, ==, NULL);
+
+ /* Setting labels to a value that's too short or too long will result in
+ * the setting not verifying.
+ */
+ labels = g_slist_append (NULL, "eth0:2");
+ g_object_set (G_OBJECT (s_ip4),
+ "address-labels", labels,
+ NULL);
+
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY);
+ g_assert (g_str_has_prefix (error->message, "ipv4.address-labels:"));
+ g_clear_error (&error);
+
+ labels = g_slist_append (labels, "eth0:3");
+ g_object_set (G_OBJECT (s_ip4),
+ "address-labels", labels,
+ NULL);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_no_error (error);
+
+ labels = g_slist_append (labels, "eth0:4");
+ g_object_set (G_OBJECT (s_ip4),
+ "address-labels", labels,
+ NULL);
+ nm_setting_verify (NM_SETTING (s_ip4), NULL, &error);
+ g_assert_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY);
+ g_assert (g_str_has_prefix (error->message, "ipv4.address-labels:"));
+ g_clear_error (&error);
+
+
+ g_object_unref (s_ip4);
+}
+
#define OLD_DBUS_TYPE_G_IP6_ADDRESS (dbus_g_type_get_struct ("GValueArray", DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, G_TYPE_INVALID))
#define OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS (dbus_g_type_get_collection ("GPtrArray", OLD_DBUS_TYPE_G_IP6_ADDRESS))
@@ -279,7 +470,7 @@ test_setting_ip6_config_old_address_array (void)
NMSettingIP6Config *s_ip6;
GPtrArray *addresses, *read_addresses;
GValueArray *array, *read_array;
- GValue element = {0, }, written_value = {0, }, read_value = {0, };
+ GValue element = G_VALUE_INIT, written_value = G_VALUE_INIT, read_value = G_VALUE_INIT;
GByteArray *ba;
const guint8 addr[16] = { 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11,
0x11, 0x22, 0x33, 0x44, 0x66, 0x77, 0x88, 0x99 };
@@ -462,6 +653,7 @@ test_setting_gsm_without_number (void)
g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "", NULL);
success = nm_setting_verify (NM_SETTING (s_gsm), NULL, &error);
g_assert_error (error, NM_SETTING_GSM_ERROR, NM_SETTING_GSM_ERROR_INVALID_PROPERTY);
+ g_error_free (error);
}
static NMSettingWirelessSecurity *
@@ -582,6 +774,262 @@ test_connection_to_hash_setting_name (void)
}
static void
+test_setting_new_from_hash (void)
+{
+ NMSettingWirelessSecurity *s_wsec;
+ GHashTable *hash;
+
+ s_wsec = make_test_wsec_setting ("setting-to-hash-all");
+ hash = nm_setting_to_hash (NM_SETTING (s_wsec), NM_SETTING_HASH_FLAG_ALL);
+ g_object_unref (s_wsec);
+
+ s_wsec = (NMSettingWirelessSecurity *) nm_setting_new_from_hash (NM_TYPE_SETTING_WIRELESS_SECURITY, hash);
+ g_hash_table_destroy (hash);
+
+ g_assert (s_wsec);
+ g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "wpa-psk");
+ g_assert_cmpstr (nm_setting_wireless_security_get_leap_username (s_wsec), ==, "foobarbaz");
+ g_assert_cmpstr (nm_setting_wireless_security_get_psk (s_wsec), ==, "random psk");
+ g_object_unref (s_wsec);
+}
+
+static NMConnection *
+new_test_connection (void)
+{
+ NMConnection *connection;
+ NMSetting *setting;
+ char *uuid;
+ guint64 timestamp = time (NULL);
+
+ connection = nm_connection_new ();
+
+ setting = nm_setting_connection_new ();
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (G_OBJECT (setting),
+ NM_SETTING_CONNECTION_ID, "foobar",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
+ NULL);
+ g_free (uuid);
+ nm_connection_add_setting (connection, setting);
+
+ setting = nm_setting_wired_new ();
+ g_object_set (G_OBJECT (setting),
+ NM_SETTING_WIRED_MTU, 1592,
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ setting = nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (setting),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, "eyeofthetiger",
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ return connection;
+}
+
+static GValue *
+string_to_gvalue (const char *str)
+{
+ GValue *val;
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, str);
+ return val;
+}
+
+static void
+destroy_gvalue (gpointer data)
+{
+ g_value_unset ((GValue *) data);
+ g_slice_free (GValue, data);
+}
+
+static GHashTable *
+new_connection_hash (char **out_uuid,
+ const char **out_expected_id,
+ const char **out_expected_ip6_method)
+{
+ GHashTable *hash;
+ GHashTable *setting;
+
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_hash_table_destroy);
+
+ *out_uuid = nm_utils_uuid_generate ();
+ *out_expected_id = "My happy connection";
+ *out_expected_ip6_method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL;
+
+ /* Connection setting */
+ setting = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_gvalue);
+ g_hash_table_insert (setting,
+ g_strdup (NM_SETTING_NAME),
+ string_to_gvalue (NM_SETTING_CONNECTION_SETTING_NAME));
+ g_hash_table_insert (setting,
+ g_strdup (NM_SETTING_CONNECTION_ID),
+ string_to_gvalue (*out_expected_id));
+ g_hash_table_insert (setting,
+ g_strdup (NM_SETTING_CONNECTION_UUID),
+ string_to_gvalue (*out_uuid));
+ g_hash_table_insert (setting,
+ g_strdup (NM_SETTING_CONNECTION_TYPE),
+ string_to_gvalue (NM_SETTING_WIRED_SETTING_NAME));
+ g_hash_table_insert (hash, g_strdup (NM_SETTING_CONNECTION_SETTING_NAME), setting);
+
+ /* Wired setting */
+ setting = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_gvalue);
+ g_hash_table_insert (hash, g_strdup (NM_SETTING_WIRED_SETTING_NAME), setting);
+
+ /* IP6 */
+ setting = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_gvalue);
+ g_hash_table_insert (setting,
+ g_strdup (NM_SETTING_IP6_CONFIG_METHOD),
+ string_to_gvalue (*out_expected_ip6_method));
+ g_hash_table_insert (hash, g_strdup (NM_SETTING_IP6_CONFIG_SETTING_NAME), setting);
+
+ return hash;
+}
+
+static void
+test_connection_replace_settings ()
+{
+ NMConnection *connection;
+ GHashTable *new_settings;
+ GError *error = NULL;
+ gboolean success;
+ NMSettingConnection *s_con;
+ NMSettingIP6Config *s_ip6;
+ char *uuid = NULL;
+ const char *expected_id = NULL, *expected_method = NULL;
+
+ connection = new_test_connection ();
+
+ new_settings = new_connection_hash (&uuid, &expected_id, &expected_method);
+ g_assert (new_settings);
+
+ /* Replace settings and test */
+ success = nm_connection_replace_settings (connection, new_settings, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid);
+
+ g_assert (nm_connection_get_setting_wired (connection));
+ g_assert (!nm_connection_get_setting_ip4_config (connection));
+
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, expected_method);
+
+ g_free (uuid);
+ g_hash_table_destroy (new_settings);
+ g_object_unref (connection);
+}
+
+static void
+test_connection_replace_settings_from_connection ()
+{
+ NMConnection *connection, *replacement;
+ GError *error = NULL;
+ gboolean success;
+ NMSettingConnection *s_con;
+ NMSetting *setting;
+ GByteArray *ssid;
+ char *uuid = NULL;
+ const char *expected_id = "Awesome connection";
+
+ connection = new_test_connection ();
+ g_assert (connection);
+
+ replacement = nm_connection_new ();
+ g_assert (replacement);
+
+ /* New connection setting */
+ setting = nm_setting_connection_new ();
+ g_assert (setting);
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (setting,
+ NM_SETTING_CONNECTION_ID, expected_id,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+ nm_connection_add_setting (replacement, setting);
+
+ /* New wifi setting */
+ setting = nm_setting_wireless_new ();
+ g_assert (setting);
+
+ ssid = g_byte_array_new ();
+ g_byte_array_append (ssid, (const guint8 *) "1234567", 7);
+ g_object_set (setting,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NM_SETTING_WIRELESS_MODE, "infrastructure",
+ NULL);
+ g_byte_array_free (ssid, TRUE);
+ nm_connection_add_setting (replacement, setting);
+
+ /* Replace settings and test */
+ success = nm_connection_replace_settings_from_connection (connection, replacement, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid);
+
+ g_assert (!nm_connection_get_setting_wired (connection));
+ g_assert (!nm_connection_get_setting_ip6_config (connection));
+ g_assert (nm_connection_get_setting_wireless (connection));
+
+ g_free (uuid);
+ g_object_unref (replacement);
+ g_object_unref (connection);
+}
+
+static void
+test_connection_new_from_hash ()
+{
+ NMConnection *connection;
+ GHashTable *new_settings;
+ GError *error = NULL;
+ NMSettingConnection *s_con;
+ NMSettingIP6Config *s_ip6;
+ char *uuid = NULL;
+ const char *expected_id = NULL, *expected_method = NULL;
+
+ new_settings = new_connection_hash (&uuid, &expected_id, &expected_method);
+ g_assert (new_settings);
+
+ /* Replace settings and test */
+ connection = nm_connection_new_from_hash (new_settings, &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid);
+
+ g_assert (nm_connection_get_setting_wired (connection));
+ g_assert (!nm_connection_get_setting_ip4_config (connection));
+
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, expected_method);
+
+ g_free (uuid);
+ g_hash_table_destroy (new_settings);
+ g_object_unref (connection);
+}
+
+static void
check_permission (NMSettingConnection *s_con,
guint32 idx,
const char *expected_uname,
@@ -618,37 +1066,55 @@ test_setting_connection_permissions_helpers (void)
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
/* Ensure a bad [type] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strcmp (ptype, \"user\") == 0*");
success = nm_setting_connection_add_permission (s_con, "foobar", "blah", NULL);
+ g_test_assert_expected_messages ();
ASSERT (success == FALSE,
"setting-connection-permissions-helpers", "unexpected success adding bad permission type #1");
/* Ensure a bad [type] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*ptype*");
success = nm_setting_connection_add_permission (s_con, NULL, "blah", NULL);
+ g_test_assert_expected_messages ();
ASSERT (success == FALSE,
"setting-connection-permissions-helpers", "unexpected success adding bad permission type #2");
/* Ensure a bad [item] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*uname*");
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*p != NULL*");
success = nm_setting_connection_add_permission (s_con, "user", NULL, NULL);
+ g_test_assert_expected_messages ();
ASSERT (success == FALSE,
"setting-connection-permissions-helpers", "unexpected success adding bad permission item #1");
/* Ensure a bad [item] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*uname[0] != '\\0'*");
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*p != NULL*");
success = nm_setting_connection_add_permission (s_con, "user", "", NULL);
+ g_test_assert_expected_messages ();
ASSERT (success == FALSE,
"setting-connection-permissions-helpers", "unexpected success adding bad permission item #2");
/* Ensure an [item] with ':' is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strchr (uname, ':')*");
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*p != NULL*");
success = nm_setting_connection_add_permission (s_con, "user", "ad:asdf", NULL);
+ g_test_assert_expected_messages ();
ASSERT (success == FALSE,
"setting-connection-permissions-helpers", "unexpected success adding bad permission item #3");
/* Ensure a non-UTF-8 [item] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*g_utf8_validate (uname, -1, NULL)*");
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*p != NULL*");
success = nm_setting_connection_add_permission (s_con, "user", buf, NULL);
+ g_test_assert_expected_messages ();
ASSERT (success == FALSE,
"setting-connection-permissions-helpers", "unexpected success adding bad permission item #4");
/* Ensure a non-NULL [detail] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*detail == NULL*");
success = nm_setting_connection_add_permission (s_con, "user", "dafasdf", "asdf");
+ g_test_assert_expected_messages ();
ASSERT (success == FALSE,
"setting-connection-permissions-helpers", "unexpected success adding bad detail");
@@ -670,6 +1136,7 @@ test_setting_connection_permissions_helpers (void)
"setting-connection-permissions-helpers", "unexpected failure getting number of permissions in list");
ASSERT (strcmp (list->data, expected_perm) == 0,
"setting-connection-permissions-helpers", "unexpected permission property data");
+ g_slist_free_full (list, g_free);
/* Now remove that permission and ensure we have 0 permissions */
nm_setting_connection_remove_permission (s_con, 0);
@@ -723,42 +1190,58 @@ test_setting_connection_permissions_property (void)
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
/* Ensure a bad [type] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strncmp (str, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0*");
add_permission_property (s_con, "foobar", "blah", -1, NULL);
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad permission type #1");
/* Ensure a bad [type] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*strncmp (str, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0*");
add_permission_property (s_con, NULL, "blah", -1, NULL);
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad permission type #2");
/* Ensure a bad [item] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*last_colon > str*");
add_permission_property (s_con, "user", NULL, -1, NULL);
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad permission item #1");
/* Ensure a bad [item] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*last_colon > str*");
add_permission_property (s_con, "user", "", -1, NULL);
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad permission item #2");
/* Ensure an [item] with ':' in the middle is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*str[i] != ':'*");
add_permission_property (s_con, "user", "ad:asdf", -1, NULL);
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad permission item #3");
/* Ensure an [item] with ':' at the end is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*str[i] != ':'*");
add_permission_property (s_con, "user", "adasdfaf:", -1, NULL);
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad permission item #4");
/* Ensure a non-UTF-8 [item] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*g_utf8_validate (str, -1, NULL)*");
add_permission_property (s_con, "user", buf, (int) sizeof (buf), NULL);
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad permission item #5");
/* Ensure a non-NULL [detail] is rejected */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*(last_colon + 1) == '\\0'*");
add_permission_property (s_con, "user", "dafasdf", -1, "asdf");
+ g_test_assert_expected_messages ();
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
"setting-connection-permissions-property", "unexpected success adding bad detail");
@@ -777,41 +1260,76 @@ test_setting_connection_permissions_property (void)
g_object_unref (s_con);
}
-static NMConnection *
-new_test_connection (void)
+static void
+test_connection_compare_same (void)
{
- NMConnection *connection;
- NMSetting *setting;
- char *uuid;
- guint64 timestamp = time (NULL);
+ NMConnection *a, *b;
- connection = nm_connection_new ();
+ a = new_test_connection ();
+ b = nm_connection_duplicate (a);
+ g_assert (nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+ g_object_unref (a);
+ g_object_unref (b);
+}
- setting = nm_setting_connection_new ();
- uuid = nm_utils_uuid_generate ();
- g_object_set (G_OBJECT (setting),
- NM_SETTING_CONNECTION_ID, "foobar",
- NM_SETTING_CONNECTION_UUID, uuid,
- NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
- NULL);
- g_free (uuid);
- nm_connection_add_setting (connection, setting);
+static void
+test_connection_compare_key_only_in_a (void)
+{
+ NMConnection *a, *b;
+ NMSettingConnection *s_con;
- setting = nm_setting_wired_new ();
- g_object_set (G_OBJECT (setting),
- NM_SETTING_WIRED_MTU, 1592,
- NULL);
- nm_connection_add_setting (connection, setting);
+ a = new_test_connection ();
+ b = nm_connection_duplicate (a);
+ s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION);
+ g_assert (s_con);
+ g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL);
- setting = nm_setting_ip4_config_new ();
- g_object_set (G_OBJECT (setting),
- NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, "eyeofthetiger",
- NULL);
- nm_connection_add_setting (connection, setting);
+ g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+ g_object_unref (a);
+ g_object_unref (b);
+}
- return connection;
+static void
+test_connection_compare_setting_only_in_a (void)
+{
+ NMConnection *a, *b;
+
+ a = new_test_connection ();
+ b = nm_connection_duplicate (a);
+ nm_connection_remove_setting (b, NM_TYPE_SETTING_IP4_CONFIG);
+ g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+ g_object_unref (a);
+ g_object_unref (b);
+}
+
+static void
+test_connection_compare_key_only_in_b (void)
+{
+ NMConnection *a, *b;
+ NMSettingConnection *s_con;
+
+ a = new_test_connection ();
+ b = nm_connection_duplicate (a);
+ s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION);
+ g_assert (s_con);
+ g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL);
+
+ g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+ g_object_unref (a);
+ g_object_unref (b);
+}
+
+static void
+test_connection_compare_setting_only_in_b (void)
+{
+ NMConnection *a, *b;
+
+ a = new_test_connection ();
+ b = nm_connection_duplicate (a);
+ nm_connection_remove_setting (a, NM_TYPE_SETTING_IP4_CONFIG);
+ g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+ g_object_unref (a);
+ g_object_unref (b);
}
typedef struct {
@@ -864,17 +1382,19 @@ test_connection_diff_a_only (void)
gboolean same;
const DiffSetting settings[] = {
{ NM_SETTING_CONNECTION_SETTING_NAME, {
- { NM_SETTING_CONNECTION_ID, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_UUID, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_TYPE, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_TIMESTAMP, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_AUTOCONNECT, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_READ_ONLY, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_PERMISSIONS, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_ZONE, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_MASTER, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_DIFF_RESULT_IN_A },
- { NM_SETTING_CONNECTION_SECONDARIES, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_ID, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_UUID, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_TYPE, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_TIMESTAMP, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_AUTOCONNECT, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_READ_ONLY, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_PERMISSIONS, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_ZONE, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_MASTER, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_SECONDARIES, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A },
{ NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }
} },
{ NM_SETTING_WIRED_SETTING_NAME, {
@@ -896,6 +1416,7 @@ test_connection_diff_a_only (void)
{ NM_SETTING_IP4_CONFIG_DNS, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP4_CONFIG_DNS_SEARCH, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP4_CONFIG_ADDRESSES, NM_SETTING_DIFF_RESULT_IN_A },
+ { "address-labels", NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP4_CONFIG_ROUTES, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, NM_SETTING_DIFF_RESULT_IN_A },
@@ -917,6 +1438,7 @@ test_connection_diff_a_only (void)
ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
+ g_hash_table_destroy (out_diffs);
g_object_unref (connection);
}
@@ -966,6 +1488,7 @@ test_connection_diff_different (void)
ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
+ g_hash_table_destroy (out_diffs);
g_object_unref (a);
g_object_unref (b);
}
@@ -1013,6 +1536,66 @@ test_connection_diff_no_secrets (void)
ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
+ g_hash_table_destroy (out_diffs);
+ g_object_unref (a);
+ g_object_unref (b);
+}
+
+static void
+test_connection_diff_inferrable (void)
+{
+ NMConnection *a, *b;
+ GHashTable *out_diffs = NULL;
+ gboolean same;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ char *uuid;
+ const DiffSetting settings[] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME, {
+ { NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A },
+ { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
+ } },
+ };
+
+ a = new_test_connection ();
+ b = nm_connection_duplicate (a);
+
+ /* Change the UUID, wired MTU, and set ignore-auto-dns */
+ s_con = nm_connection_get_setting_connection (a);
+ g_assert (s_con);
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_ID, "really neat connection",
+ NULL);
+ g_free (uuid);
+
+ s_wired = nm_connection_get_setting_wired (a);
+ g_assert (s_wired);
+ g_object_set (G_OBJECT (s_wired), NM_SETTING_WIRED_MTU, 300, NULL);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (a);
+ g_assert (s_ip4);
+ g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE, NULL);
+
+ /* Make sure the diff returns no results as secrets are ignored */
+ same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs);
+ g_assert (same == TRUE);
+ g_assert (out_diffs == NULL);
+
+ /* And change a INFERRABLE property to ensure that it shows up in the diff results */
+ g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, "usb0", NULL);
+
+ /* Make sure the diff returns no results as secrets are ignored */
+ same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs);
+ g_assert (same == FALSE);
+ g_assert (out_diffs != NULL);
+ g_assert (g_hash_table_size (out_diffs) > 0);
+
+ ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
+
+ g_hash_table_destroy (out_diffs);
g_object_unref (a);
g_object_unref (b);
}
@@ -1363,6 +1946,12 @@ test_hwaddr_aton_malformed (void)
}
static void
+test_connection_changed_cb (NMConnection *connection, gboolean *data)
+{
+ *data = TRUE;
+}
+
+static void
test_ip4_prefix_to_netmask (void)
{
int i;
@@ -1422,6 +2011,456 @@ test_ip4_netmask_to_prefix (void)
g_rand_free (rand);
}
+#define ASSERT_CHANGED(statement) \
+{ \
+ changed = FALSE; \
+ statement; \
+ g_assert (changed); \
+}
+
+#define ASSERT_UNCHANGED(statement) \
+{ \
+ changed = FALSE; \
+ statement; \
+ g_assert (!changed); \
+}
+
+static void
+test_connection_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+
+ connection = new_test_connection ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ /* Add new setting */
+ ASSERT_CHANGED (nm_connection_add_setting (connection, nm_setting_vlan_new ()));
+
+ /* Remove existing setting */
+ ASSERT_CHANGED (nm_connection_remove_setting (connection, NM_TYPE_SETTING_VLAN));
+
+ /* Remove non-existing setting */
+ ASSERT_UNCHANGED (nm_connection_remove_setting (connection, NM_TYPE_SETTING_VLAN));
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_connection_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingConnection *s_con;
+ char *uuid;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ ASSERT_CHANGED (g_object_set (s_con, NM_SETTING_CONNECTION_ID, "adfadfasdfaf", NULL));
+
+ ASSERT_CHANGED (nm_setting_connection_add_permission (s_con, "user", "billsmith", NULL));
+ ASSERT_CHANGED (nm_setting_connection_remove_permission (s_con, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*iter != NULL*");
+ ASSERT_UNCHANGED (nm_setting_connection_remove_permission (s_con, 1));
+ g_test_assert_expected_messages ();
+
+ uuid = nm_utils_uuid_generate ();
+ ASSERT_CHANGED (nm_setting_connection_add_secondary (s_con, uuid));
+ ASSERT_CHANGED (nm_setting_connection_remove_secondary (s_con, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_connection_remove_secondary (s_con, 1));
+ g_test_assert_expected_messages ();
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_bond_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingBond *s_bond;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_bond = (NMSettingBond *) nm_setting_bond_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_bond));
+
+ ASSERT_CHANGED (nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY, "10"));
+ ASSERT_CHANGED (nm_setting_bond_remove_option (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY));
+ ASSERT_UNCHANGED (nm_setting_bond_remove_option (s_bond, NM_SETTING_BOND_OPTION_UPDELAY));
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_ip4_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingIP4Config *s_ip4;
+ NMIP4Address *addr;
+ NMIP4Route *route;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ ASSERT_CHANGED (nm_setting_ip4_config_add_dns (s_ip4, 0x1122));
+ ASSERT_CHANGED (nm_setting_ip4_config_remove_dns (s_ip4, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*i <= priv->dns->len*");
+ ASSERT_UNCHANGED (nm_setting_ip4_config_remove_dns (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip4_config_add_dns (s_ip4, 0x3344);
+ ASSERT_CHANGED (nm_setting_ip4_config_clear_dns (s_ip4));
+
+ ASSERT_CHANGED (nm_setting_ip4_config_add_dns_search (s_ip4, "foobar.com"));
+ ASSERT_CHANGED (nm_setting_ip4_config_remove_dns_search (s_ip4, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_ip4_config_remove_dns_search (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ ASSERT_CHANGED (nm_setting_ip4_config_add_dns_search (s_ip4, "foobar.com"));
+ ASSERT_CHANGED (nm_setting_ip4_config_clear_dns_searches (s_ip4));
+
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, 0x2233);
+ nm_ip4_address_set_prefix (addr, 24);
+ ASSERT_CHANGED (nm_setting_ip4_config_add_address (s_ip4, addr));
+ ASSERT_CHANGED (nm_setting_ip4_config_remove_address (s_ip4, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*addr != NULL && label != NULL*");
+ ASSERT_UNCHANGED (nm_setting_ip4_config_remove_address (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip4_config_add_address (s_ip4, addr);
+ ASSERT_CHANGED (nm_setting_ip4_config_clear_addresses (s_ip4));
+
+ route = nm_ip4_route_new ();
+ nm_ip4_route_set_dest (route, 0x2233);
+ nm_ip4_route_set_prefix (route, 24);
+
+ ASSERT_CHANGED (nm_setting_ip4_config_add_route (s_ip4, route));
+ ASSERT_CHANGED (nm_setting_ip4_config_remove_route (s_ip4, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_ip4_config_remove_route (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip4_config_add_route (s_ip4, route);
+ ASSERT_CHANGED (nm_setting_ip4_config_clear_routes (s_ip4));
+
+ nm_ip4_address_unref (addr);
+ nm_ip4_route_unref (route);
+ g_object_unref (connection);
+}
+
+static void
+test_setting_ip6_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingIP6Config *s_ip6;
+ NMIP6Address *addr;
+ NMIP6Route *route;
+ const struct in6_addr t = { { { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 } } };
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ ASSERT_CHANGED (nm_setting_ip6_config_add_dns (s_ip6, &t));
+ ASSERT_CHANGED (nm_setting_ip6_config_remove_dns (s_ip6, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_ip6_config_remove_dns (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip6_config_add_dns (s_ip6, &t);
+ ASSERT_CHANGED (nm_setting_ip6_config_clear_dns (s_ip6));
+
+ ASSERT_CHANGED (nm_setting_ip6_config_add_dns_search (s_ip6, "foobar.com"));
+ ASSERT_CHANGED (nm_setting_ip6_config_remove_dns_search (s_ip6, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_ip6_config_remove_dns_search (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip6_config_add_dns_search (s_ip6, "foobar.com");
+ ASSERT_CHANGED (nm_setting_ip6_config_clear_dns_searches (s_ip6));
+
+ addr = nm_ip6_address_new ();
+ nm_ip6_address_set_address (addr, &t);
+ nm_ip6_address_set_prefix (addr, 64);
+
+ ASSERT_CHANGED (nm_setting_ip6_config_add_address (s_ip6, addr));
+ ASSERT_CHANGED (nm_setting_ip6_config_remove_address (s_ip6, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_ip6_config_remove_address (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip6_config_add_address (s_ip6, addr);
+ ASSERT_CHANGED (nm_setting_ip6_config_clear_addresses (s_ip6));
+
+ route = nm_ip6_route_new ();
+ nm_ip6_route_set_dest (route, &t);
+ nm_ip6_route_set_prefix (route, 128);
+
+ ASSERT_CHANGED (nm_setting_ip6_config_add_route (s_ip6, route));
+ ASSERT_CHANGED (nm_setting_ip6_config_remove_route (s_ip6, 0));
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_ip6_config_remove_route (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip6_config_add_route (s_ip6, route);
+ ASSERT_CHANGED (nm_setting_ip6_config_clear_routes (s_ip6));
+
+ nm_ip6_address_unref (addr);
+ nm_ip6_route_unref (route);
+ g_object_unref (connection);
+}
+
+static void
+test_setting_vlan_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingVlan *s_vlan;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_vlan = (NMSettingVlan *) nm_setting_vlan_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_vlan));
+
+ ASSERT_CHANGED (nm_setting_vlan_add_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1, 3));
+ ASSERT_CHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_INGRESS_MAP, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*idx < g_slist_length (list)*");
+ ASSERT_UNCHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1));
+ g_test_assert_expected_messages ();
+ ASSERT_CHANGED (nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_INGRESS_MAP, "1:3"));
+ ASSERT_CHANGED (nm_setting_vlan_clear_priorities (s_vlan, NM_VLAN_INGRESS_MAP));
+
+ ASSERT_CHANGED (nm_setting_vlan_add_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1, 3));
+ ASSERT_CHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_EGRESS_MAP, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*idx < g_slist_length (list)*");
+ ASSERT_UNCHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1));
+ g_test_assert_expected_messages ();
+ ASSERT_CHANGED (nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_EGRESS_MAP, "1:3"));
+ ASSERT_CHANGED (nm_setting_vlan_clear_priorities (s_vlan, NM_VLAN_EGRESS_MAP));
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_vpn_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingVPN *s_vpn;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_vpn));
+
+ ASSERT_CHANGED (nm_setting_vpn_add_data_item (s_vpn, "foobar", "baz"));
+ ASSERT_CHANGED (nm_setting_vpn_remove_data_item (s_vpn, "foobar"));
+ ASSERT_UNCHANGED (nm_setting_vpn_remove_data_item (s_vpn, "not added"));
+
+ ASSERT_CHANGED (nm_setting_vpn_add_secret (s_vpn, "foobar", "baz"));
+ ASSERT_CHANGED (nm_setting_vpn_remove_secret (s_vpn, "foobar"));
+ ASSERT_UNCHANGED (nm_setting_vpn_remove_secret (s_vpn, "not added"));
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_wired_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingWired *s_wired;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ ASSERT_CHANGED (nm_setting_wired_add_s390_option (s_wired, "portno", "1"));
+ ASSERT_CHANGED (nm_setting_wired_remove_s390_option (s_wired, "portno"));
+ ASSERT_UNCHANGED (nm_setting_wired_remove_s390_option (s_wired, "layer2"));
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_wireless_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingWireless *s_wifi;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+ ASSERT_CHANGED (nm_setting_wireless_add_seen_bssid (s_wifi, "00:11:22:33:44:55"));
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_wireless_security_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingWirelessSecurity *s_wsec;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+ /* Protos */
+ ASSERT_CHANGED (nm_setting_wireless_security_add_proto (s_wsec, "wpa"));
+ ASSERT_CHANGED (nm_setting_wireless_security_remove_proto (s_wsec, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_wireless_security_remove_proto (s_wsec, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_wireless_security_add_proto (s_wsec, "wep");
+ ASSERT_CHANGED (nm_setting_wireless_security_clear_protos (s_wsec));
+
+ /* Pairwise ciphers */
+ ASSERT_CHANGED (nm_setting_wireless_security_add_pairwise (s_wsec, "tkip"));
+ ASSERT_CHANGED (nm_setting_wireless_security_remove_pairwise (s_wsec, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_wireless_security_remove_pairwise (s_wsec, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
+ ASSERT_CHANGED (nm_setting_wireless_security_clear_pairwise (s_wsec));
+
+ /* Group ciphers */
+ ASSERT_CHANGED (nm_setting_wireless_security_add_group (s_wsec, "ccmp"));
+ ASSERT_CHANGED (nm_setting_wireless_security_remove_group (s_wsec, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_wireless_security_remove_group (s_wsec, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_wireless_security_add_group (s_wsec, "tkip");
+ ASSERT_CHANGED (nm_setting_wireless_security_clear_groups (s_wsec));
+
+ /* WEP key secret flags */
+ ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key0", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
+ ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key1", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
+ ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key2", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
+ ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key3", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
+
+ g_object_unref (connection);
+}
+
+static void
+test_setting_802_1x_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSetting8021x *s_8021x;
+
+ connection = nm_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_8021x));
+
+ /* EAP methods */
+ ASSERT_CHANGED (nm_setting_802_1x_add_eap_method (s_8021x, "tls"));
+ ASSERT_CHANGED (nm_setting_802_1x_remove_eap_method (s_8021x, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_802_1x_remove_eap_method (s_8021x, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
+ ASSERT_CHANGED (nm_setting_802_1x_clear_eap_methods (s_8021x));
+
+ /* alternate subject matches */
+ ASSERT_CHANGED (nm_setting_802_1x_add_altsubject_match (s_8021x, "EMAIL:server@example.com"));
+ ASSERT_CHANGED (nm_setting_802_1x_remove_altsubject_match (s_8021x, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_802_1x_remove_altsubject_match (s_8021x, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_802_1x_add_altsubject_match (s_8021x, "EMAIL:server@example.com");
+ ASSERT_CHANGED (nm_setting_802_1x_clear_altsubject_matches (s_8021x));
+
+ /* phase2 alternate subject matches */
+ ASSERT_CHANGED (nm_setting_802_1x_add_phase2_altsubject_match (s_8021x, "EMAIL:server@example.com"));
+ ASSERT_CHANGED (nm_setting_802_1x_remove_phase2_altsubject_match (s_8021x, 0));
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
+ ASSERT_UNCHANGED (nm_setting_802_1x_remove_phase2_altsubject_match (s_8021x, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_802_1x_add_phase2_altsubject_match (s_8021x, "EMAIL:server@example.com");
+ ASSERT_CHANGED (nm_setting_802_1x_clear_phase2_altsubject_matches (s_8021x));
+
+ g_object_unref (connection);
+}
+
static void
test_setting_old_uuid (void)
{
@@ -1445,20 +2484,19 @@ test_setting_old_uuid (void)
g_assert (success == TRUE);
}
+NMTST_DEFINE ();
+
int main (int argc, char **argv)
{
- GError *error = NULL;
char *base;
- g_type_init ();
-
- if (!nm_utils_init (&error))
- FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
+ nmtst_init (&argc, &argv, TRUE);
/* The tests */
test_setting_vpn_items ();
test_setting_vpn_update_secrets ();
test_setting_vpn_modify_during_foreach ();
+ test_setting_ip4_config_labels ();
test_setting_ip6_config_old_address_array ();
test_setting_gsm_apn_spaces ();
test_setting_gsm_apn_bad_chars ();
@@ -1479,12 +2517,25 @@ int main (int argc, char **argv)
test_setting_old_uuid ();
test_connection_to_hash_setting_name ();
+ test_setting_new_from_hash ();
+ test_connection_replace_settings ();
+ test_connection_replace_settings_from_connection ();
+ test_connection_new_from_hash ();
+
test_setting_connection_permissions_helpers ();
test_setting_connection_permissions_property ();
+
+ test_connection_compare_same ();
+ test_connection_compare_key_only_in_a ();
+ test_connection_compare_setting_only_in_a ();
+ test_connection_compare_key_only_in_b ();
+ test_connection_compare_setting_only_in_b ();
+
test_connection_diff_a_only ();
test_connection_diff_same ();
test_connection_diff_different ();
test_connection_diff_no_secrets ();
+ test_connection_diff_inferrable ();
test_connection_good_base_types ();
test_connection_bad_base_types ();
@@ -1495,6 +2546,18 @@ int main (int argc, char **argv)
test_ip4_prefix_to_netmask ();
test_ip4_netmask_to_prefix ();
+ test_connection_changed_signal ();
+ test_setting_connection_changed_signal ();
+ test_setting_bond_changed_signal ();
+ test_setting_ip4_changed_signal ();
+ test_setting_ip6_changed_signal ();
+ test_setting_vlan_changed_signal ();
+ test_setting_vpn_changed_signal ();
+ test_setting_wired_changed_signal ();
+ test_setting_wireless_changed_signal ();
+ test_setting_wireless_security_changed_signal ();
+ test_setting_802_1x_changed_signal ();
+
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
g_free (base);
diff --git a/libnm-util/tests/test-secrets.c b/libnm-util/tests/test-secrets.c
index 0e859abcc..73fc9224b 100644
--- a/libnm-util/tests/test-secrets.c
+++ b/libnm-util/tests/test-secrets.c
@@ -22,7 +22,6 @@
#include <glib.h>
#include <string.h>
-#include "nm-test-helpers.h"
#include <nm-utils.h>
#include "nm-setting-connection.h"
@@ -37,6 +36,7 @@
#include "nm-setting-pppoe.h"
#include "nm-setting-vpn.h"
+#include "nm-test-utils.h"
#define TEST_NEED_SECRETS_EAP_TLS_CA_CERT TEST_CERT_DIR "/test_ca_cert.pem"
#define TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT TEST_CERT_DIR "/test_key_and_cert.pem"
@@ -67,14 +67,9 @@ make_tls_connection (const char *detail, NMSetting8021xCKScheme scheme)
GError *error = NULL;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- detail, "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -88,16 +83,10 @@ make_tls_connection (const char *detail, NMSetting8021xCKScheme scheme)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* Wireless security setting */
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (s_8021x != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_802_1X_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_8021x));
g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
@@ -134,9 +123,6 @@ make_tls_connection (const char *detail, NMSetting8021xCKScheme scheme)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
@@ -247,14 +233,9 @@ make_tls_phase2_connection (const char *detail, NMSetting8021xCKScheme scheme)
GError *error = NULL;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- detail, "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -268,16 +249,10 @@ make_tls_phase2_connection (const char *detail, NMSetting8021xCKScheme scheme)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* Wireless security setting */
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (s_8021x != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_802_1X_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_8021x));
g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "blahblah", NULL);
@@ -316,9 +291,6 @@ make_tls_phase2_connection (const char *detail, NMSetting8021xCKScheme scheme)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
@@ -454,7 +426,6 @@ wifi_connection_new (void)
g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
@@ -512,6 +483,8 @@ test_update_secrets_wifi_single_setting (void)
const char *wepkey = "11111111111111111111111111";
const char *tmp;
+ /* Test update with a hashed setting of 802-11-wireless secrets */
+
connection = wifi_connection_new ();
/* Build up the secrets hash */
@@ -546,6 +519,10 @@ test_update_secrets_wifi_full_hash (void)
const char *wepkey = "11111111111111111111111111";
const char *tmp;
+ /* Test update with a hashed connection containing only 802-11-wireless
+ * setting and secrets.
+ */
+
connection = wifi_connection_new ();
/* Build up the secrets hash */
@@ -580,6 +557,10 @@ test_update_secrets_wifi_bad_setting_name (void)
gboolean success;
const char *wepkey = "11111111111111111111111111";
+ /* Test that passing an invalid setting name to
+ * nm_connection_update_secrets() fails with the correct error.
+ */
+
connection = wifi_connection_new ();
/* Build up the secrets hash */
@@ -607,6 +588,10 @@ test_update_secrets_whole_connection (void)
gboolean success;
const char *wepkey = "11111111111111111111111111";
+ /* Test calling nm_connection_update_secrets() with an entire hashed
+ * connection including non-secrets.
+ */
+
connection = wifi_connection_new ();
/* Build up the secrets hash */
@@ -634,6 +619,8 @@ test_update_secrets_whole_connection_empty_hash (void)
GError *error = NULL;
gboolean success;
+ /* Test that updating secrets with an empty hash returns success */
+
connection = wifi_connection_new ();
secrets = g_hash_table_new (g_str_hash, g_str_equal);
success = nm_connection_update_secrets (connection, NULL, secrets, &error);
@@ -651,6 +638,10 @@ test_update_secrets_whole_connection_bad_setting (void)
gboolean success;
const char *wepkey = "11111111111111111111111111";
+ /* Test that sending a hashed connection containing an invalid setting
+ * name fails with the right error.
+ */
+
connection = wifi_connection_new ();
/* Build up the secrets hash */
@@ -674,12 +665,67 @@ test_update_secrets_whole_connection_bad_setting (void)
g_object_unref (connection);
}
+static void
+test_update_secrets_whole_connection_empty_base_setting (void)
+{
+ NMConnection *connection;
+ GHashTable *secrets;
+ GError *error = NULL;
+ gboolean success;
+
+ /* Test that a hashed connection which does not have any hashed secrets
+ * for the requested setting returns success.
+ */
+
+ connection = wifi_connection_new ();
+ secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
+ g_assert_cmpint (g_hash_table_size (secrets), ==, 1);
+ g_assert (g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SETTING_NAME));
+
+ success = nm_connection_update_secrets (connection,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ secrets,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_hash_table_destroy (secrets);
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_null_setting_name_with_setting_hash (void)
+{
+ NMConnection *connection;
+ GHashTable *secrets;
+ GError *error = NULL;
+ gboolean success;
+ const char *wepkey = "11111111111111111111111111";
+
+ /* Ensure that a NULL setting name and only a hashed setting fails */
+
+ connection = wifi_connection_new ();
+
+ secrets = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, value_destroy);
+ g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey));
+ g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, uint_to_gvalue (NM_WEP_KEY_TYPE_KEY));
+
+ success = nm_connection_update_secrets (connection, NULL, secrets, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
+ g_assert (!success);
+
+ g_hash_table_destroy (secrets);
+ g_object_unref (connection);
+}
+
int main (int argc, char **argv)
{
GError *error = NULL;
char *base;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
if (!nm_utils_init (&error))
FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
@@ -697,6 +743,8 @@ int main (int argc, char **argv)
test_update_secrets_whole_connection ();
test_update_secrets_whole_connection_empty_hash ();
test_update_secrets_whole_connection_bad_setting ();
+ test_update_secrets_whole_connection_empty_base_setting ();
+ test_update_secrets_null_setting_name_with_setting_hash ();
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
diff --git a/libnm-util/tests/test-setting-8021x.c b/libnm-util/tests/test-setting-8021x.c
index bdfc8e036..62889c61f 100644
--- a/libnm-util/tests/test-setting-8021x.c
+++ b/libnm-util/tests/test-setting-8021x.c
@@ -22,12 +22,13 @@
#include <glib.h>
#include <string.h>
-#include "nm-test-helpers.h"
#include <nm-utils.h>
#include "nm-setting-connection.h"
#include "nm-setting-8021x.h"
+#include "nm-test-utils.h"
+
static void
compare_blob_data (const char *test,
const char *key_path,
@@ -411,7 +412,9 @@ int main (int argc, char **argv)
if (argc < 3)
FAIL ("init", "need at least two arguments: <path> <password>");
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
if (!nm_utils_init (&error))
FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
diff --git a/libnm-util/tests/test-setting-dcb.c b/libnm-util/tests/test-setting-dcb.c
new file mode 100644
index 000000000..de07f2c2a
--- /dev/null
+++ b/libnm-util/tests/test-setting-dcb.c
@@ -0,0 +1,328 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <nm-utils.h>
+#include <nm-glib-compat.h>
+#include "nm-setting-dcb.h"
+
+#define DCB_FLAGS_ALL (NM_SETTING_DCB_FLAG_ENABLE | \
+ NM_SETTING_DCB_FLAG_ADVERTISE | \
+ NM_SETTING_DCB_FLAG_WILLING)
+
+static void
+test_dcb_flags_valid (void)
+{
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+ guint i;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_assert (s_dcb);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, 0);
+ g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, 0);
+ g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, 0);
+ g_assert_cmpint (nm_setting_dcb_get_priority_flow_control_flags (s_dcb), ==, 0);
+ g_assert_cmpint (nm_setting_dcb_get_priority_group_flags (s_dcb), ==, 0);
+
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_FCOE_FLAGS, DCB_FLAGS_ALL,
+ NM_SETTING_DCB_APP_ISCSI_FLAGS, DCB_FLAGS_ALL,
+ NM_SETTING_DCB_APP_FIP_FLAGS, DCB_FLAGS_ALL,
+ NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, DCB_FLAGS_ALL,
+ NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, DCB_FLAGS_ALL,
+ NULL);
+ /* Priority Group Bandwidth must total 100% */
+ for (i = 0; i < 7; i++)
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, 12);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16);
+
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, DCB_FLAGS_ALL);
+ g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, DCB_FLAGS_ALL);
+ g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, DCB_FLAGS_ALL);
+ g_assert_cmpint (nm_setting_dcb_get_priority_flow_control_flags (s_dcb), ==, DCB_FLAGS_ALL);
+ g_assert_cmpint (nm_setting_dcb_get_priority_group_flags (s_dcb), ==, DCB_FLAGS_ALL);
+}
+
+#define TEST_FLAG(p, f, v) \
+{ \
+ /* GObject property min/max should ensure the property does not get set to \
+ * the invalid value, so we ensure the value we just tried to set is 0 and \
+ * that verify is successful since the property never got set. \
+ */ \
+ g_object_set (G_OBJECT (s_dcb), p, v, NULL); \
+ g_assert_cmpint (f (s_dcb), ==, 0); \
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
+ g_assert_no_error (error); \
+ g_assert (success); \
+}
+
+static void
+test_dcb_flags_invalid (void)
+{
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_assert (s_dcb);
+
+ g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+ TEST_FLAG (NM_SETTING_DCB_APP_FCOE_FLAGS, nm_setting_dcb_get_app_fcoe_flags, 0x332523);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+ TEST_FLAG (NM_SETTING_DCB_APP_ISCSI_FLAGS, nm_setting_dcb_get_app_iscsi_flags, 0xFF);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+ TEST_FLAG (NM_SETTING_DCB_APP_FIP_FLAGS, nm_setting_dcb_get_app_fip_flags, 0x1111);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+ TEST_FLAG (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, nm_setting_dcb_get_priority_flow_control_flags, G_MAXUINT32);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+ TEST_FLAG (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, nm_setting_dcb_get_priority_group_flags,
+ (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE | NM_SETTING_DCB_FLAG_WILLING) + 1);
+ g_test_assert_expected_messages ();
+}
+
+#define TEST_APP_PRIORITY(lcprop, ucprop, v) \
+{ \
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_FLAGS, NM_SETTING_DCB_FLAG_NONE, NULL); \
+ \
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, v, NULL); \
+ g_assert_cmpint (nm_setting_dcb_get_app_##lcprop##_priority (s_dcb), ==, v); \
+ \
+ /* Assert that the setting is invalid while the app is disabled unless v is default */ \
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
+ if (v >= 0) { \
+ g_assert_error (error, NM_SETTING_DCB_ERROR, NM_SETTING_DCB_ERROR_INVALID_PROPERTY); \
+ g_assert (success == FALSE); \
+ } else { \
+ g_assert_no_error (error); \
+ g_assert (success); \
+ } \
+ g_clear_error (&error); \
+ \
+ /* Set the enable flag and re-verify, this time it should be valid */ \
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL); \
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
+ g_assert_no_error (error); \
+ g_assert (success); \
+ \
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, 0, NULL); \
+}
+
+static void
+test_dcb_app_priorities (void)
+{
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_assert (s_dcb);
+
+ /* Defaults */
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_priority (s_dcb), ==, -1);
+ g_assert_cmpint (nm_setting_dcb_get_app_iscsi_priority (s_dcb), ==, -1);
+ g_assert_cmpint (nm_setting_dcb_get_app_fip_priority (s_dcb), ==, -1);
+
+ TEST_APP_PRIORITY (fcoe, FCOE, 6);
+ TEST_APP_PRIORITY (iscsi, ISCSI, 5);
+ TEST_APP_PRIORITY (fip, FIP, 4);
+
+ TEST_APP_PRIORITY (fcoe, FCOE, -1);
+ TEST_APP_PRIORITY (iscsi, ISCSI, -1);
+ TEST_APP_PRIORITY (fip, FIP, -1);
+}
+
+#define TEST_PRIORITY_VALID(fn, id, val, flagsprop, verify) \
+{ \
+ /* Assert that setting the value gets the same value back out */ \
+ nm_setting_dcb_set_priority_##fn (s_dcb, id, val); \
+ g_assert_cmpint (nm_setting_dcb_get_priority_##fn (s_dcb, id), ==, val); \
+ \
+ if (verify) { \
+ if (val != 0) { \
+ /* Assert that verify fails because the flags do not include 'enabled' \
+ * and a value has been set. \
+ */ \
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
+ g_assert_error (error, NM_SETTING_DCB_ERROR, NM_SETTING_DCB_ERROR_INVALID_PROPERTY); \
+ g_assert (success == FALSE); \
+ g_clear_error (&error); \
+ } \
+ \
+ /* Assert that adding the 'enabled' flag verifies the setting */ \
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL); \
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
+ g_assert_no_error (error); \
+ g_assert (success); \
+ } \
+ \
+ /* Reset everything */ \
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS, NM_SETTING_DCB_FLAG_NONE, NULL); \
+ nm_setting_dcb_set_priority_##fn (s_dcb, id, 0); \
+}
+
+/* If Priority Groups are enabled, PG bandwidth must equal 100% */
+#define SET_VALID_PRIORITY_GROUP_BANDWIDTH \
+{ \
+ guint x; \
+ for (x = 0; x < 7; x++) \
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, x, 12); \
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16); \
+}
+
+static void
+test_dcb_priorities_valid (void)
+{
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+ guint i;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_assert (s_dcb);
+
+ for (i = 0; i < 8; i++)
+ TEST_PRIORITY_VALID (flow_control, i, TRUE, FLOW_CONTROL, TRUE);
+
+ SET_VALID_PRIORITY_GROUP_BANDWIDTH
+ for (i = 0; i < 8; i++) {
+ TEST_PRIORITY_VALID (group_id, i, i, GROUP, TRUE);
+ TEST_PRIORITY_VALID (group_id, i, 7 - i, GROUP, TRUE);
+ }
+
+ /* Clear PG bandwidth from earlier tests */
+ for (i = 0; i < 8; i++)
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, 0);
+
+ /* Priority Group Bandwidth must add up to 100% if enabled, which requires
+ * some dancing for verifying individual values here.
+ */
+ for (i = 0; i < 8; i++) {
+ guint other = 7 - (i % 8);
+
+ /* Set another priority group to the remaining bandwidth */
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 100 - i);
+ TEST_PRIORITY_VALID (group_bandwidth, i, i, GROUP, TRUE);
+
+ /* Set another priority group to the remaining bandwidth */
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 100 - (7 - i));
+ TEST_PRIORITY_VALID (group_bandwidth, i, 7 - i, GROUP, TRUE);
+
+ /* Clear remaining bandwidth */
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 0);
+ }
+
+ SET_VALID_PRIORITY_GROUP_BANDWIDTH
+ for (i = 0; i < 8; i++) {
+ TEST_PRIORITY_VALID (bandwidth, i, i, GROUP, TRUE);
+ TEST_PRIORITY_VALID (bandwidth, i, 7 - i, GROUP, TRUE);
+ }
+
+ SET_VALID_PRIORITY_GROUP_BANDWIDTH
+ for (i = 0; i < 8; i++)
+ TEST_PRIORITY_VALID (strict_bandwidth, i, TRUE, GROUP, TRUE);
+
+ SET_VALID_PRIORITY_GROUP_BANDWIDTH
+ for (i = 0; i < 8; i++) {
+ TEST_PRIORITY_VALID (traffic_class, i, i, GROUP, TRUE);
+ TEST_PRIORITY_VALID (traffic_class, i, 7 - i, GROUP, TRUE);
+ }
+}
+
+static void
+test_dcb_bandwidth_sums (void)
+{
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_assert (s_dcb);
+
+ /* Assert that setting the value gets the same value back out */
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 0, 9);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 1, 10);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 2, 11);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 3, 12);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 4, 13);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 5, 14);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 6, 15);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16);
+
+ /* Assert verify success when sums total 100% */
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL);
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Assert verify fails when sums do not total 100% */
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 4, 20);
+ success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error);
+ g_assert_error (error, NM_SETTING_DCB_ERROR, NM_SETTING_DCB_ERROR_INVALID_PROPERTY);
+ g_assert (success == FALSE);
+ g_clear_error (&error);
+}
+
+#define TPATH "/libnm-util/settings/dcb/"
+
+int main (int argc, char **argv)
+{
+ GError *error = NULL;
+ gboolean success;
+
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ success = nm_utils_init (&error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+#if !GLIB_CHECK_VERSION(2,34,0)
+ g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL);
+#endif
+
+ g_test_add_func (TPATH "flags-valid", test_dcb_flags_valid);
+ g_test_add_func (TPATH "flags-invalid", test_dcb_flags_invalid);
+ g_test_add_func (TPATH "app-priorities", test_dcb_app_priorities);
+ g_test_add_func (TPATH "priorities", test_dcb_priorities_valid);
+ g_test_add_func (TPATH "bandwidth-sums", test_dcb_bandwidth_sums);
+
+ return g_test_run ();
+}
+
diff --git a/libnm-util/tests/test-settings-defaults.c b/libnm-util/tests/test-settings-defaults.c
index b77ddfef9..15412fed5 100644
--- a/libnm-util/tests/test-settings-defaults.c
+++ b/libnm-util/tests/test-settings-defaults.c
@@ -22,7 +22,6 @@
#include <glib.h>
#include <string.h>
-#include "nm-test-helpers.h"
#include <nm-utils.h>
#include "nm-setting-8021x.h"
@@ -39,6 +38,7 @@
#include "nm-setting-wireless.h"
#include "nm-setting-wireless-security.h"
+#include "nm-test-utils.h"
static void
test_defaults (GType type, const char *name)
@@ -57,8 +57,8 @@ test_defaults (GType type, const char *name)
for (i = 0; i < n_property_specs; i++) {
GParamSpec *prop_spec = property_specs[i];
- GValue value = { 0, };
- GValue defvalue = { 0, };
+ GValue value = G_VALUE_INIT;
+ GValue defvalue = G_VALUE_INIT;
char *actual, *expected;
gboolean ok = FALSE;
@@ -104,7 +104,9 @@ int main (int argc, char **argv)
GError *error = NULL;
char *base;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
if (!nm_utils_init (&error))
FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
diff --git a/m4/ax_lib_readline.m4 b/m4/ax_lib_readline.m4
new file mode 100644
index 000000000..72764fba5
--- /dev/null
+++ b/m4/ax_lib_readline.m4
@@ -0,0 +1,106 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_lib_readline.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_LIB_READLINE
+#
+# DESCRIPTION
+#
+# Searches for a readline compatible library. If found, defines
+# `HAVE_LIBREADLINE'. If the found library has the `add_history' function,
+# sets also `HAVE_READLINE_HISTORY'. Also checks for the locations of the
+# necessary include files and sets `HAVE_READLINE_H' or
+# `HAVE_READLINE_READLINE_H' and `HAVE_READLINE_HISTORY_H' or
+# 'HAVE_HISTORY_H' if the corresponding include files exists.
+#
+# The libraries that may be readline compatible are `libedit',
+# `libeditline' and `libreadline'. Sometimes we need to link a termcap
+# library for readline to work, this macro tests these cases too by trying
+# to link with `libtermcap', `libcurses' or `libncurses' before giving up.
+#
+# Here is an example of how to use the information provided by this macro
+# to perform the necessary includes or declarations in a C file:
+#
+# #ifdef HAVE_LIBREADLINE
+# # if defined(HAVE_READLINE_READLINE_H)
+# # include <readline/readline.h>
+# # elif defined(HAVE_READLINE_H)
+# # include <readline.h>
+# # else /* !defined(HAVE_READLINE_H) */
+# extern char *readline ();
+# # endif /* !defined(HAVE_READLINE_H) */
+# char *cmdline = NULL;
+# #else /* !defined(HAVE_READLINE_READLINE_H) */
+# /* no readline */
+# #endif /* HAVE_LIBREADLINE */
+#
+# #ifdef HAVE_READLINE_HISTORY
+# # if defined(HAVE_READLINE_HISTORY_H)
+# # include <readline/history.h>
+# # elif defined(HAVE_HISTORY_H)
+# # include <history.h>
+# # else /* !defined(HAVE_HISTORY_H) */
+# extern void add_history ();
+# extern int write_history ();
+# extern int read_history ();
+# # endif /* defined(HAVE_READLINE_HISTORY_H) */
+# /* no history */
+# #endif /* HAVE_READLINE_HISTORY */
+#
+# LICENSE
+#
+# Copyright (c) 2008 Ville Laurikari <vl@iki.fi>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 6
+
+AU_ALIAS([VL_LIB_READLINE], [AX_LIB_READLINE])
+AC_DEFUN([AX_LIB_READLINE], [
+ AC_CACHE_CHECK([for a readline compatible library],
+ ax_cv_lib_readline, [
+ ORIG_LIBS="$LIBS"
+ for readline_lib in readline edit editline; do
+ # prefer ncurses since we use it for nmtui too
+ for termcap_lib in "" ncurses termcap curses; do
+ if test -z "$termcap_lib"; then
+ TRY_LIB="-l$readline_lib"
+ else
+ TRY_LIB="-l$readline_lib -l$termcap_lib"
+ fi
+ LIBS="$ORIG_LIBS $TRY_LIB"
+ AC_TRY_LINK_FUNC(readline, ax_cv_lib_readline="$TRY_LIB")
+ if test -n "$ax_cv_lib_readline"; then
+ break
+ fi
+ done
+ if test -n "$ax_cv_lib_readline"; then
+ break
+ fi
+ done
+ LIBS="$ORIG_LIBS"
+ ])
+
+ if test -z "$ax_cv_lib_readline"; then
+ AC_MSG_ERROR([readline library with terminfo support is required (one of ncurses, curses, or termcap)])
+ fi
+
+ LIBS="$LIBS $ax_cv_lib_readline"
+ AC_CHECK_HEADERS(readline.h readline/readline.h)
+ AC_CACHE_CHECK([whether readline supports history],
+ ax_cv_lib_readline_history, [
+ ax_cv_lib_readline_history="no"
+ AC_TRY_LINK_FUNC(add_history, ax_cv_lib_readline_history="yes")
+ ])
+ if test "$ax_cv_lib_readline_history" != "yes"; then
+ AC_MSG_ERROR(readline history support is required)
+ fi
+ AC_CHECK_HEADERS(history.h readline/history.h)
+ READLINE_LIBS="$ax_cv_lib_readline"
+ AC_SUBST(READLINE_LIBS)
+])dnl
diff --git a/m4/compiler_warnings.m4 b/m4/compiler_warnings.m4
index 3037c584f..357ff0e7e 100644
--- a/m4/compiler_warnings.m4
+++ b/m4/compiler_warnings.m4
@@ -8,7 +8,7 @@ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
CFLAGS="-Wall -std=gnu89 $CFLAGS"
for option in -Wshadow -Wmissing-declarations -Wmissing-prototypes \
- -Wdeclaration-after-statement \
+ -Wdeclaration-after-statement -Wformat-security \
-Wfloat-equal -Wno-unused-parameter -Wno-sign-compare \
-fno-strict-aliasing -Wno-unused-but-set-variable \
-Wundef -Wimplicit-function-declaration \
diff --git a/m4/gnome-code-coverage.m4 b/m4/gnome-code-coverage.m4
index 618ccbece..62375e612 100644
--- a/m4/gnome-code-coverage.m4
+++ b/m4/gnome-code-coverage.m4
@@ -44,7 +44,7 @@ AC_DEFUN([GNOME_CODE_COVERAGE],[
])
# List of supported lcov versions.
- lcov_version_list="1.6 1.7 1.8 1.9"
+ lcov_version_list="1.6 1.7 1.8 1.9 1.10"
AC_CHECK_PROG([LCOV], [lcov], [lcov])
AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
@@ -120,7 +120,7 @@ code_coverage_quiet_0 = --quiet
# Use recursive makes in order to ignore errors during check
check-code-coverage:
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
-$(MAKE) $(AM_MAKEFLAGS) -k check
$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
else
@@ -129,7 +129,7 @@ endif
# Capture code coverage data
code-coverage-capture: code-coverage-capture-hook
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
$(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(PACKAGE_NAME)-$(PACKAGE_VERSION)" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_OPTIONS)
$(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)"
-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
@@ -142,11 +142,13 @@ endif
# Hook rule executed before code-coverage-capture, overridable by the user
code-coverage-capture-hook:
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
clean: code-coverage-clean
code-coverage-clean:
-$(LCOV) --directory $(top_builddir) -z
-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
-find . -name "*.gcda" -o -name "*.gcov" -delete
+endif
GITIGNOREFILES ?=
GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
diff --git a/m4/gtk-doc.m4 b/m4/gtk-doc.m4
index 36755432b..ac2eccb4a 100644
--- a/m4/gtk-doc.m4
+++ b/m4/gtk-doc.m4
@@ -1,6 +1,6 @@
dnl -*- mode: autoconf -*-
-# serial 2
+# serial 1
dnl Usage:
dnl GTK_DOC_CHECK([minimum-gtk-doc-version])
@@ -10,24 +10,8 @@ AC_DEFUN([GTK_DOC_CHECK],
AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
- ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"])
- AC_MSG_CHECKING([for gtk-doc])
- PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no])
- AC_MSG_RESULT($have_gtk_doc)
-
- if test "$have_gtk_doc" = "no"; then
- AC_MSG_WARN([
- You will not be able to create source packages with 'make dist'
- because $gtk_doc_requires is not found.])
- fi
-
dnl check for tools we added during development
- dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that
- dnl may not be writable by the user. Currently, automake requires that the
- dnl test name must end in '.test'.
- dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638
- AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test])
- AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check])
+ AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check])
AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true])
AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf])
@@ -44,21 +28,21 @@ AC_DEFUN([GTK_DOC_CHECK],
[use gtk-doc to build documentation [[default=no]]]),,
[enable_gtk_doc=no])
- AC_MSG_CHECKING([whether to build gtk-doc documentation])
- AC_MSG_RESULT($enable_gtk_doc)
-
- if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then
- AC_MSG_ERROR([
- You must have $gtk_doc_requires installed to build documentation for
- $PACKAGE_NAME. Please install gtk-doc or disable building the
- documentation by adding '--disable-gtk-doc' to '[$]0'.])
+ if test x$enable_gtk_doc = xyes; then
+ ifelse([$1],[],
+ [PKG_CHECK_EXISTS([gtk-doc],,
+ AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))],
+ [PKG_CHECK_EXISTS([gtk-doc >= $1],,
+ AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))])
+ dnl don't check for glib if we build glib
+ if test "x$PACKAGE_NAME" != "xglib"; then
+ dnl don't fail if someone does not have glib
+ PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:])
+ fi
fi
- dnl don't check for glib if we build glib
- if test "x$PACKAGE_NAME" != "xglib"; then
- dnl don't fail if someone does not have glib
- PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:])
- fi
+ AC_MSG_CHECKING([whether to build gtk-doc documentation])
+ AC_MSG_RESULT($enable_gtk_doc)
dnl enable/disable output formats
AC_ARG_ENABLE([gtk-doc-html],
@@ -79,7 +63,6 @@ AC_DEFUN([GTK_DOC_CHECK],
fi
AC_SUBST([AM_DEFAULT_VERBOSITY])
- AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes])
AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
diff --git a/man/Makefile.am b/man/Makefile.am
index 763d43016..64469685a 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -1,12 +1,27 @@
man_MANS =
CLEANFILES =
+EXTRA_DIST =
+
+XSLTPROC = xsltproc
+
+XSLTPROC_FLAGS = \
+ --xinclude \
+ --nonet \
+ --stringparam man.output.quietly 1 \
+ --stringparam funcsynopsis.style ansi \
+ --stringparam man.th.extra1.suppress 1 \
+ --stringparam man.authors.section.enabled 0 \
+ --stringparam man.copyright.section.enabled 0
+
+XSLTPROC_MAN_FLAGS = $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
if ENABLE_GTK_DOC
-XSLTPROC = xsltproc --xinclude --nonet
+%.8: %.xml
+ $(AM_V_GEN) xsltproc $(XSLTPROC_MAN_FLAGS) $<
-nm-settings.5: nm-settings.xml
- $(XSLTPROC) $(top_srcdir)/tools/manpages-docbook.xsl $(builddir)/nm-settings.xml
+%.5: %.xml
+ $(AM_V_GEN) xsltproc $(XSLTPROC_MAN_FLAGS) $<
nm-settings.xml: $(top_builddir)/tools/generate-settings-spec $(top_builddir)/libnm-util/libnm-util.la
rm -f $(builddir)/$@
@@ -14,21 +29,40 @@ nm-settings.xml: $(top_builddir)/tools/generate-settings-spec $(top_builddir)/li
endif
-CLEANFILES += nm-settings.5 nm-settings.xml
+configure_generated_man_pages = \
+ nmcli.1 \
+ nm-online.1 \
+ nm-system-settings.conf.5
-man_MANS += \
+docbook_generated_man_pages = \
NetworkManager.8 \
NetworkManager.conf.5 \
- nm-system-settings.conf.5 \
- nm-tool.1 \
- nm-online.1 \
- nmcli.1
+ nmcli-examples.5
+
+docbook_autogenerated_man_pages = \
+ nm-settings.5
+
+generated_man_pages = \
+ $(docbook_generated_man_pages) \
+ $(docbook_autogenerated_man_pages)
+
+EXTRA_DIST += \
+ $(docbook_generated_man_pages:.%=.xml) \
+ $(docbook_autogenerated_man_pages)
+
+CLEANFILES += \
+ nm-settings.xml
+
+man_MANS += $(configure_generated_man_pages)
if ENABLE_GTK_DOC
-man_MANS += nm-settings.5
+man_MANS += $(generated_man_pages)
+CLEANFILES += \
+ $(docbook_autogenerated_man_pages) \
+ $(docbook_generated_man_pages)
else
if INSTALL_PREGEN_MANPAGES
-man_MANS += nm-settings.5
+man_MANS += $(generated_man_pages)
endif
endif
diff --git a/man/Makefile.in b/man/Makefile.in
index d32adcf91..a48bf6806 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -77,16 +77,19 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_GTK_DOC_TRUE@am__append_1 = nm-settings.5
-@ENABLE_GTK_DOC_FALSE@@INSTALL_PREGEN_MANPAGES_TRUE@am__append_2 = nm-settings.5
+@ENABLE_GTK_DOC_TRUE@am__append_1 = $(generated_man_pages)
+@ENABLE_GTK_DOC_TRUE@am__append_2 = \
+@ENABLE_GTK_DOC_TRUE@ $(docbook_autogenerated_man_pages) \
+@ENABLE_GTK_DOC_TRUE@ $(docbook_generated_man_pages)
+
+@ENABLE_GTK_DOC_FALSE@@INSTALL_PREGEN_MANPAGES_TRUE@am__append_3 = $(generated_man_pages)
subdir = man
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(srcdir)/NetworkManager.8.in \
- $(srcdir)/NetworkManager.conf.5.in \
- $(srcdir)/nm-system-settings.conf.5.in $(srcdir)/nm-tool.1.in \
+ $(srcdir)/nm-system-settings.conf.5.in \
$(srcdir)/nm-online.1.in $(srcdir)/nmcli.1.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,8 +105,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = NetworkManager.8 NetworkManager.conf.5 \
- nm-system-settings.conf.5 nm-tool.1 nm-online.1 nmcli.1
+CONFIG_CLEAN_FILES = nm-system-settings.conf.5 nm-online.1 nmcli.1
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -185,12 +187,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -215,7 +220,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -260,12 +264,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -282,6 +290,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -309,11 +319,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -328,6 +343,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -390,6 +406,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -400,11 +417,40 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-man_MANS = NetworkManager.8 NetworkManager.conf.5 \
- nm-system-settings.conf.5 nm-tool.1 nm-online.1 nmcli.1 \
- $(am__append_1) $(am__append_2)
-CLEANFILES = nm-settings.5 nm-settings.xml
-@ENABLE_GTK_DOC_TRUE@XSLTPROC = xsltproc --xinclude --nonet
+with_valgrind = @with_valgrind@
+man_MANS = $(configure_generated_man_pages) $(am__append_1) \
+ $(am__append_3)
+CLEANFILES = nm-settings.xml $(am__append_2)
+EXTRA_DIST = $(docbook_generated_man_pages:.%=.xml) \
+ $(docbook_autogenerated_man_pages)
+XSLTPROC = xsltproc
+XSLTPROC_FLAGS = \
+ --xinclude \
+ --nonet \
+ --stringparam man.output.quietly 1 \
+ --stringparam funcsynopsis.style ansi \
+ --stringparam man.th.extra1.suppress 1 \
+ --stringparam man.authors.section.enabled 0 \
+ --stringparam man.copyright.section.enabled 0
+
+XSLTPROC_MAN_FLAGS = $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
+configure_generated_man_pages = \
+ nmcli.1 \
+ nm-online.1 \
+ nm-system-settings.conf.5
+
+docbook_generated_man_pages = \
+ NetworkManager.8 \
+ NetworkManager.conf.5 \
+ nmcli-examples.5
+
+docbook_autogenerated_man_pages = \
+ nm-settings.5
+
+generated_man_pages = \
+ $(docbook_generated_man_pages) \
+ $(docbook_autogenerated_man_pages)
+
all: all-am
.SUFFIXES:
@@ -438,14 +484,8 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-NetworkManager.8: $(top_builddir)/config.status $(srcdir)/NetworkManager.8.in
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-NetworkManager.conf.5: $(top_builddir)/config.status $(srcdir)/NetworkManager.conf.5.in
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
nm-system-settings.conf.5: $(top_builddir)/config.status $(srcdir)/nm-system-settings.conf.5.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-nm-tool.1: $(top_builddir)/config.status $(srcdir)/nm-tool.1.in
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
nm-online.1: $(top_builddir)/config.status $(srcdir)/nm-online.1.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
nmcli.1: $(top_builddir)/config.status $(srcdir)/nmcli.1.in
@@ -745,8 +785,11 @@ uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
uninstall-man8
-@ENABLE_GTK_DOC_TRUE@nm-settings.5: nm-settings.xml
-@ENABLE_GTK_DOC_TRUE@ $(XSLTPROC) $(top_srcdir)/tools/manpages-docbook.xsl $(builddir)/nm-settings.xml
+@ENABLE_GTK_DOC_TRUE@%.8: %.xml
+@ENABLE_GTK_DOC_TRUE@ $(AM_V_GEN) xsltproc $(XSLTPROC_MAN_FLAGS) $<
+
+@ENABLE_GTK_DOC_TRUE@%.5: %.xml
+@ENABLE_GTK_DOC_TRUE@ $(AM_V_GEN) xsltproc $(XSLTPROC_MAN_FLAGS) $<
@ENABLE_GTK_DOC_TRUE@nm-settings.xml: $(top_builddir)/tools/generate-settings-spec $(top_builddir)/libnm-util/libnm-util.la
@ENABLE_GTK_DOC_TRUE@ rm -f $(builddir)/$@
diff --git a/man/NetworkManager.8 b/man/NetworkManager.8
new file mode 100644
index 000000000..5022eadbd
--- /dev/null
+++ b/man/NetworkManager.8
@@ -0,0 +1,251 @@
+'\" t
+.\" Title: NetworkManager
+.\" Author:
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 07/03/2014
+.\" Manual: Network management daemons
+.\" Source: NetworkManager 0.9.10
+.\" Language: English
+.\"
+.TH "NETWORKMANAGER" "8" "" "NetworkManager 0\&.9\&.10" "Network management daemons"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+NetworkManager \- network management daemon
+.SH "SYNOPSIS"
+.HP \w'\fBNetworkManager\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBNetworkManager \fR\fB[OPTIONS...]\fR
+.SH "DESCRIPTION"
+.PP
+The NetworkManager daemon attempts to make networking configuration and operation as painless and automatic as possible by managing the primary network connection and other network interfaces, like Ethernet, WiFi, and Mobile Broadband devices\&. NetworkManager will connect any network device when a connection for that device becomes available, unless that behavior is disabled\&. Information about networking is exported via a D\-Bus interface to any interested application, providing a rich API with which to inspect and control network settings and operation\&.
+.SH "DISPATCHER SCRIPTS"
+.PP
+NetworkManager will execute scripts in the /etc/NetworkManager/dispatcher\&.d directory or subdirectories in alphabetical order in response to network events\&. Each script should be a regular executable file owned by root\&. Furthermore, it must not be writable by group or other, and not setuid\&.
+.PP
+Each script receives two arguments, the first being the interface name of the device an operation just happened on, and second the action\&.
+.PP
+The actions are:
+.PP
+\fIpre\-up\fR
+.RS 4
+The interface is connected to the network but is not yet fully activated\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-up\&.d directory, and NetworkManager will wait for script execution to complete before indicating to applications that the interface is fully activated\&.
+.RE
+.PP
+\fIup\fR
+.RS 4
+The interface has been activated\&.
+.RE
+.PP
+\fIpre\-down\fR
+.RS 4
+The interface will be deactivated but has not yet been disconnected from the network\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-down\&.d directory, and NetworkManager will wait for script execution to complete before disconnecting the interface from its network\&. Note that this event is not emitted for forced disconnections, like when carrier is lost or a wireless signal fades\&. It is only emitted when there is an opportunity to cleanly handle a network disconnection event\&.
+.RE
+.PP
+\fIdown\fR
+.RS 4
+The interface has been deactivated\&.
+.RE
+.PP
+\fIvpn\-pre\-up\fR
+.RS 4
+The VPN is connected to the network but is not yet fully activated\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-up\&.d directory, and NetworkManager will wait for script execution to complete before indicating to applications that the VPN is fully activated\&.
+.RE
+.PP
+\fIvpn\-up\fR
+.RS 4
+A VPN connection has been activated\&.
+.RE
+.PP
+\fIvpn\-pre\-down\fR
+.RS 4
+The VPN will be deactivated but has not yet been disconnected from the network\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-down\&.d directory, and NetworkManager will wait for script execution to complete before disconnecting the VPN from its network\&. Note that this event is not emitted for forced disconnections, like when the VPN terminates unexpectedly or general connectivity is lost\&. It is only emitted when there is an opportunity to cleanly handle a VPN disconnection event\&.
+.RE
+.PP
+\fIvpn\-down\fR
+.RS 4
+A VPN connection has been deactivated\&.
+.RE
+.PP
+\fIhostname\fR
+.RS 4
+The system hostname has been updated\&. Use gethostname(2) to retrieve it\&. The interface name (first argument) is empty and no environment variable is set for this action\&.
+.RE
+.PP
+\fIdhcp4\-change\fR
+.RS 4
+The DHCPv4 lease has changed (renewed, rebound, etc)\&.
+.RE
+.PP
+\fIdhcp6\-change\fR
+.RS 4
+The DHCPv6 lease has changed (renewed, rebound, etc)\&.
+.RE
+.PP
+The environment contains more information about the interface and the connection\&. The following variables are available for the use in the dispatcher scripts:
+.PP
+\fICONNECTION_UUID\fR
+.RS 4
+The UUID of the connection profile\&.
+.RE
+.PP
+\fICONNECTION_ID\fR
+.RS 4
+The name (ID) of the connection profile\&.
+.RE
+.PP
+\fIDEVICE_IFACE\fR
+.RS 4
+The interface name of the device\&.
+.RE
+.PP
+\fIDEVICE_IP_IFACE\fR
+.RS 4
+The IP interface name of the device\&.
+.RE
+.PP
+\fIIP4_ADDRESS_N\fR
+.RS 4
+The IPv4 address in the format "address/prefix gateway", where N is a number from 0 to (# IPv4 address \e\- 1)\&.
+.RE
+.PP
+\fIIP4_NUM_ADDRESSES\fR
+.RS 4
+The variable contains the number of IPv4 addresses the script may expect\&.
+.RE
+.PP
+\fIIP4_ROUTE_N\fR
+.RS 4
+The IPv4 route in the format "address/prefix next\-hop metric", where N is a number from 0 to (# IPv4 routes \e\- 1)\&.
+.RE
+.PP
+\fIIP4_NUM_ROUTES\fR
+.RS 4
+The variable contains the number of IPv4 routes the script may expect\&.
+.RE
+.PP
+\fIIP4_NAMESERVERS\fR
+.RS 4
+The variable contains a space\-separated list of the DNS servers\&.
+.RE
+.PP
+\fIIP4_DOMAINS\fR
+.RS 4
+The variable contains a space\-separated list of the search domains\&.
+.RE
+.PP
+\fIDHCP4_<dhcp\-option\-name>\fR
+.RS 4
+If the connection used DHCP for address configuration, the received DHCP configuration is passed in the environment using standard DHCP option names, prefixed with "DHCP4_", like "DHCP4_HOST_NAME=foobar"\&.
+.RE
+.PP
+\fIIP6_<name> and DHCP6_<name>\fR
+.RS 4
+The same variables as for IPv4 are available for IPv6, but the prefixes are IP6_ and DHCP6_ instead\&.
+.RE
+.PP
+In case of VPN, VPN_IP_IFACE is set, and IP4_*, IP6_* variables with VPN prefix are exported too, like VPN_IP4_ADDRESS_0, VPN_IP4_NUM_ADDRESSES\&.
+.PP
+Dispatcher scripts are run one at a time, but asynchronously from the main NetworkManager process, and will be killed if they run for too long\&. If your script might take arbitrarily long to complete, you should spawn a child process and have the parent return immediately\&. Also beware that once a script is queued, it will always be run, even if a later event renders it obsolete\&. (Eg, if an interface goes up, and then back down again quickly, it is possible that one or more "up" scripts will be run after the interface has gone down\&.)
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-\-version\fR | \fB\-V\fR
+.RS 4
+Print the NetworkManager software version and exit\&.
+.RE
+.PP
+\fB\-\-help\fR | \fB\-h\fR
+.RS 4
+Print NetworkManager\*(Aqs available options and exit\&.
+.RE
+.PP
+\fB\-\-no\-daemon\fR | \fB\-n\fR
+.RS 4
+Do not daemonize\&.
+.RE
+.PP
+\fB\-\-debug\fR | \fB\-d\fR
+.RS 4
+Do not daemonize, and direct log output to the controlling terminal in addition to syslog\&.
+.RE
+.PP
+\fB\-\-pid\-file\fR | \fB\-p\fR
+.RS 4
+Specify location of a PID file\&. The PID file is used for storing PID of the running proccess and prevents running multiple instances\&.
+.RE
+.PP
+\fB\-\-state\-file\fR
+.RS 4
+Specify file for storing state of the NetworkManager persistently\&. If not specified, the default value of /var/lib/NetworkManager/NetworkManager\&.state is used\&.
+.RE
+.PP
+\fB\-\-config\fR
+.RS 4
+Specify configuration file to set up various settings for NetworkManager\&. If not specified, the default value of /etc/NetworkManager/NetworkManager\&.conf is used with a fallback to the older \*(Aqnm\e\-system\e\-settings\&.conf\*(Aq if located in the same directory\&. See
+\fBNetworkManager.conf\fR(5)
+for more information on configuration file\&.
+.RE
+.PP
+\fB\-\-plugins\fR
+.RS 4
+List plugins used to manage system\-wide connection settings\&. This list has preference over plugins specified in the configuration file\&. Currently supported plugins are: keyfile,
+\fBifcfg\-rh\fR,
+\fBifcfg\-suse\fR,
+\fBifupdown\fR\&.
+.RE
+.PP
+\fB\-\-log\-level\fR
+.RS 4
+Sets how much information NetworkManager sends to the log destination (usually syslog\*(Aqs "daemon" facility)\&. By default, only informational, warning, and error messages are logged\&. See the section on
+logging
+in
+\fBNetworkManager.conf\fR(5)
+for more information\&.
+.RE
+.PP
+\fB\-\-log\-domains\fR
+.RS 4
+A comma\-separated list specifying which operations are logged to the log destination (usually syslog)\&. By default, most domains are logging\-enabled\&. See the section on
+logging
+in
+\fBNetworkManager.conf\fR(5)
+for more information\&.
+.RE
+.SH "DEBUGGING"
+.PP
+The following environment variables are supported to help debugging\&. When used in conjunction with the
+\fB\-\-no\-daemon\fR
+option (thus echoing PPP and DHCP helper output to stdout) these can quickly help pinpoint the source of connection issues\&. Also see the
+\fB\-\-log\-level\fR
+and
+\fB\-\-log\-domains\fR
+to enable debug logging inside NetworkManager itself\&.
+.PP
+\fBNM_PPP_DEBUG\fR: When set to anything, causes NetworkManager to turn on PPP debugging in pppd, which logs all PPP and PPTP frames and client/server exchanges\&.
+.SH "SEE ALSO"
+.PP
+\fBNetworkManager.conf\fR(5),
+\fBnmcli\fR(1),
+\fBnmcli-examples\fR(5),
+\fBnm-online\fR(1),
+\fBnm-settings\fR(5),
+\fBnm-applet\fR(1),
+\fBnm-connection-editor\fR(1)
diff --git a/man/NetworkManager.8.in b/man/NetworkManager.8.in
deleted file mode 100644
index d550079a9..000000000
--- a/man/NetworkManager.8.in
+++ /dev/null
@@ -1,157 +0,0 @@
-.\" NetworkManager(8) manual page
-.\"
-.\" Copyright (C) 2005 - 2013 Red Hat, Inc.
-.\" Copyright (C) 2005 - 2009 Novell, Inc.
-.\" Copyright (C) 2005 Robert Love
-.\"
-.TH NETWORKMANAGER "8" "17 January 2012"
-.SH NAME
-NetworkManager \- network management daemon
-.SH SYNOPSIS
-.B NetworkManager [\-\-version] | [\-\-help]
-.PP
-.B NetworkManager [\-\-no\-daemon] [\-\-pid\-file=<filename>] [\-\-state\-file=<filename>] [\-\-config=<filename>] [\-\-plugins=<plugin1>,plugin2>,...] [\-\-log\-level=<level>] [\-\-log\-domains=<domain1>,<domain2>,...] [\-\-connectivity\-uri=<uri>] [\-\-connectivity\-interval=<int>] [\-\-connectivity\-response=<resp>]
-.SH DESCRIPTION
-The \fINetworkManager\fP daemon attempts to make networking configuration and
-operation as painless and automatic as possible by managing the primary network
-connection and other network interfaces, like Ethernet, WiFi, and Mobile
-Broadband devices. NetworkManager will connect any network device when a
-connection for that device becomes available, unless that behavior is disabled.
-Information about networking is exported via a D-Bus interface to any interested
-application, providing a rich API with which to inspect and control network
-settings and operation.
-.P
-NetworkManager will execute scripts in the /etc/NetworkManager/dispatcher.d
-directory in alphabetical order in response to network events. Each script
-should be:
-.IP "(a)" 4
-a regular file
-.IP "(b)" 4
-owned by root
-.IP "(c)" 4
-not writable by group or other
-.IP "(d)" 4
-not set-uid
-.IP "(e)" 4
-and executable by the owner
-.PP
-Each script receives two arguments, the first being the interface name of the
-device just activated, and second an action.
-.PP
-Actions:
-.TP
-.I "up"
-The interface has been activated. The environment contains more information
-about the interface; CONNECTION_UUID contains the UUID of the connection. Other
-variables are IP4_ADDRESS_N where N is a number from 0 to (# IPv4 addresses \- 1),
-in the format "address/prefix gateway". IP4_NUM_ADDRESSES contains the number
-addresses the script may expect. IP4_NAMESERVERS contains a space-separated
-list of the DNS servers, and IP4_DOMAINS contains a space-separated list of the
-search domains. Routes use the format IP4_ROUTE_N where N is a number from 0
-to (# IPv4 routes \- 1), in the format "address/prefix next-hop metric", and
-IP4_NUM_ROUTES contains the number of routes to expect. If the connection used
-DHCP for address configuration, the received DHCP configuration is passed in the
-environment using standard DHCP option names, prefixed with "DHCP4_", like
-"DHCP4_HOST_NAME=foobar".
-.TP
-.I "down"
-The interface has been deactivated.
-.TP
-.I "vpn\-up"
-A VPN connection has been activated. The environment contains the connection
-UUID in the variable CONNECTION_UUID.
-.TP
-.I "vpn\-down"
-A VPN connection has been deactivated.
-.TP
-.I "hostname"
-The system hostname has been updated. Use gethostname(2) to retrieve it.
-.TP
-.I "dhcp4\-change"
-The DHCPv4 lease has changed (renewed, rebound, etc).
-.TP
-.I "dhcp6\-change"
-The DHCPv6 lease has changed (renewed, rebound, etc).
-.SH OPTIONS
-The following options are supported:
-.TP
-.I "\-\-version"
-Print the NetworkManager software version and exit.
-.TP
-.I "\-\-help"
-Print NetworkManager's available options and exit.
-.TP
-.I "\-\-no\-daemon"
-Do not daemonize. This is useful for debugging, and directs log output to the
-controlling terminal in addition to syslog.
-.TP
-.I "\-\-pid\-file=<filename>"
-Specify location of a PID file. The PID file is used for storing PID of the
-running proccess and prevents running multiple instances.
-.TP
-.I "\-\-state\-file=<filename>"
-Specify file for storing state of the NetworkManager persistently. If not specified,
-the default value of '<LOCALSTATEDIR>/lib/NetworkManager/NetworkManager.state' is
-used; where <LOCALSTATEDIR> is dependent on your distribution (usually it's /var).
-.TP
-.I "\-\-config=<filename>"
-Specify configuration file to set up various settings for NetworkManager. If not
-specified, the default value of '<SYSCONFDIR>/NetworkManager/NetworkManager.conf'
-is used with a fallback to the older 'nm\-system\-settings.conf' if located in
-the same directory; where <SYSCONFDIR> is dependent on your distribution (usually
-it's /etc). See \fBNetworkManager.conf\fP(5) for more information on configuration
-file.
-.TP
-.I "\-\-plugins=<plugin1>,<plugin2>, ...
-List plugins used to manage system-wide connection settings. This list has
-preference over plugins specified in the configuration file. Currently supported
-plugins are: keyfile, ifcfg\-rh, ifcfg\-suse, ifupdown.
-See \fBNetworkManager.conf\fP(5) for more information on the plugins.
-.TP
-.I "\-\-log\-level=<level>
-Sets how much information NetworkManager sends to the log destination (usually
-syslog's "daemon" facility). By default, only informational, warning, and error
-messages are logged. See \fBNetworkManager.conf\fP(5) for more information on
-log levels and domains.
-.TP
-.I "\-\-log\-domains=<domain1>,<domain2>, ...
-Sets which operations are logged to the log destination (usually syslog). By
-default, most domains are logging-enabled. See \fBNetworkManager.conf\fP(5) for
-more information on log levels and domains.
-.TP
-.I "\-\-connectivity\-uri=<uri>
-Sets the URI of a web page that will be used for connectivity checking. By
-default connectivity checking is disabled. See \fBNetworkManager.conf\fP(5)
-[connectivity] section for more information on connectivity checking feature.
-.TP
-.I "\-\-connectivity\-interval=<int>
-Sets the interval (in seconds) in which connection checks for the URI are done.
-0 means no checks. The default value is 300 seconds. See
-\fBNetworkManager.conf\fP(5) [connectivity] section for more information on
-connectivity checking feature.
-.TP
-.I "\-\-connectivity\-response=<resp>
-If set, it controls what body content NetworkManager checks for when requesting
-the URI for connectivity checking. If missing, defaults to "NetworkManager is online".
-See \fBNetworkManager.conf\fP(5) [connectivity] section for more information on
-connectivity checking feature.
-
-.SH DEBUGGING
-The following environment variables are supported to help debugging. When used
-in conjunction with the "\-\-no\-daemon" option (thus echoing PPP and DHCP helper
-output to stdout) these can quickly help pinpoint the source of connection
-issues. Also see the \-\-log\-level and \-\-log\-domains to enable debug logging inside
-NetworkManager itself.
-.TP
-.I "NM_PPP_DEBUG"
-When set to anything, causes NetworkManager to turn on PPP debugging in pppd,
-which logs all PPP and PPTP frames and client/server exchanges.
-.SH SEE ALSO
-.BR nm\-tool (1),
-.BR nm\-online (1),
-.BR nmcli (1),
-.BR NetworkManager.conf (5),
-.BR nm\-settings (5),
-.BR nm\-applet (1),
-.BR nm\-connection\-editor (1).
-
diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5
new file mode 100644
index 000000000..ef7641bc9
--- /dev/null
+++ b/man/NetworkManager.conf.5
@@ -0,0 +1,458 @@
+'\" t
+.\" Title: NetworkManager.conf
+.\" Author:
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 07/03/2014
+.\" Manual: Configuration
+.\" Source: NetworkManager 0.9.10
+.\" Language: English
+.\"
+.TH "NETWORKMANAGER\&.CON" "5" "" "NetworkManager 0\&.9\&.10" "Configuration"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+NetworkManager.conf \- NetworkManager configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/NetworkManager/NetworkManager\&.conf,
+/etc/NetworkManager/conf\&.d/\fIname\fR\&.conf
+.SH "DESCRIPTION"
+.PP
+This is a configuration file for NetworkManager\&. It is used to set up various aspects of NetworkManager\*(Aqs behavior\&. The location of the file may be changed through use of the
+\fB\-\-config\fR
+argument for NetworkManager\&.
+.PP
+If a default
+NetworkManager\&.conf
+is provided by your distribution\*(Aqs packages, you should not modify it, since your changes may get overwritten by package updates\&. Instead, you can add additional
+\&.conf
+files to the
+conf\&.d
+directory\&. These will be read in order, with later files overriding earlier ones\&.
+.SH "FILE FORMAT"
+.PP
+The configuration file format is so\-called key file (sort of ini\-style format)\&. It consists of sections (groups) of key\-value pairs\&. Lines beginning with a \*(Aq#\*(Aq and blank lines are considered comments\&. Sections are started by a header line containing the section enclosed in \*(Aq[\*(Aq and \*(Aq]\*(Aq, and ended implicitly by the start of the next section or the end of the file\&. Each key\-value pair must be contained in a section\&.
+.PP
+For keys that take a list of devices as their value, you can specify devices by their MAC addresses or interface names, or "*" to specify all devices\&.
+.PP
+Minimal system settings configuration file looks like this:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ [main]
+ plugins=keyfile
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+As an extension to the normal keyfile format, you can also append a value to a previously\-set list\-valued key by doing:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ plugins+=another\-plugin
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.SH "MAIN SECTION"
+.PP
+\fIplugins\fR
+.RS 4
+Lists system settings plugin names separated by \*(Aq,\*(Aq\&. These plugins are used to read and write system\-wide connections\&. When multiple plugins are specified, the connections are read from all listed plugins\&. When writing connections, the plugins will be asked to save the connection in the order listed here; if the first plugin cannot write out that connection type (or can\*(Aqt write out any connections) the next plugin is tried, etc\&. If none of the plugins can save the connection, an error is returned to the user\&.
+.sp
+If NetworkManager defines a distro\-specific network\-configuration plugin for your system, then that will normally be listed here\&. (See below for the available plugins\&.) Note that the
+keyfile
+plugin is always appended to the end of this list (if it doesn\*(Aqt already appear earlier in the list), so if there is no distro\-specific plugin for your system then you can leave this key unset and NetworkManager will default to using
+keyfile\&.
+.RE
+.PP
+\fImonitor\-connection\-files\fR
+.RS 4
+Whether the configured settings plugin(s) should set up file monitors and immediately pick up changes made to connection files while NetworkManager is running\&. This is disabled by default; NetworkManager will only read the connection files at startup, and when explicitly requested via the ReloadConnections D\-Bus call\&. If this key is set to \*(Aqtrue\*(Aq, then NetworkManager will reload connection files any time they changed\&.
+.RE
+.PP
+\fIdhcp\fR
+.RS 4
+This key sets up what DHCP client NetworkManager will use\&. Presently
+dhclient
+and
+dhcpcd
+are supported\&. The client configured here should be available on your system too\&. If this key is missing, available DHCP clients are looked for in this order: dhclient, dhcpcd\&.
+.RE
+.PP
+\fIno\-auto\-default\fR
+.RS 4
+Comma\-separated list of devices for which NetworkManager shouldn\*(Aqt create default wired connection (Auto eth0)\&. By default, NetworkManager creates a temporary wired connection for any Ethernet device that is managed and doesn\*(Aqt have a connection configured\&. List a device in this option to inhibit creating the default connection for the device\&. May have the special value
+*
+to apply to all devices\&.
+.sp
+When the default wired connection is deleted or saved to a new persistent connection by a plugin, the device is added to a list in the file
+/var/run/NetworkManager/no\-auto\-default\&.state
+to prevent creating the default connection for that device again\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ no\-auto\-default=00:22:68:5c:5d:c4,00:1e:65:ff:aa:ee
+ no\-auto\-default=eth0,eth1
+ no\-auto\-default=*
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fIignore\-carrier\fR
+.RS 4
+Comma\-separated list of devices for which NetworkManager will (partially) ignore the carrier state\&. Normally, for device types that support carrier\-detect, such as Ethernet and InfiniBand, NetworkManager will only allow a connection to be activated on the device if carrier is present (ie, a cable is plugged in), and it will deactivate the device if carrier drops for more than a few seconds\&.
+.sp
+Listing a device here will allow activating connections on that device even when it does not have carrier, provided that the connection uses only statically\-configured IP addresses\&. Additionally, it will allow any active connection (whether static or dynamic) to remain active on the device when carrier is lost\&.
+.sp
+May have the special value
+*
+to apply to all devices\&.
+.sp
+Note that the "carrier" property of NMDevices and device D\-Bus interfaces will still reflect the actual device state; it\*(Aqs just that NetworkManager will not make use of that information\&.
+.RE
+.PP
+\fIdns\fR
+.RS 4
+Set the DNS (resolv\&.conf) processing mode\&.
+.sp
+default: The default if the key is not specified\&. NetworkManager will update
+resolv\&.conf
+to reflect the nameservers provided by currently active connections\&.
+.sp
+dnsmasq: NetworkManager will run dnsmasq as a local caching nameserver, using a "split DNS" configuration if you are connected to a VPN, and then update
+resolv\&.conf
+to point to the local nameserver\&.
+.sp
+unbound: NetworkManager will talk to unbound and dnssec\-triggerd, providing a "split DNS" configuration with DNSSEC support\&. The /etc/resolv\&.conf will be managed by dnssec\-trigger daemon\&.
+.sp
+none: NetworkManager will not modify resolv\&.conf\&.
+.RE
+.PP
+\fIdebug\fR
+.RS 4
+Comma separated list of options to aid debugging\&. This value will be combined with the environment variable
+NM_DEBUG\&. Currently the following values are supported:
+.sp
+RLIMIT_CORE: set ulimit \-c unlimited to write out core dumps\&.
+.RE
+.SH "KEYFILE SECTION"
+.PP
+This section contains keyfile\-plugin\-specific options, and is normally only used when you are not using any other distro\-specific plugin\&.
+.PP
+.PP
+\fIhostname\fR
+.RS 4
+Set a persistent hostname\&.
+.RE
+.PP
+\fIunmanaged\-devices\fR
+.RS 4
+Set devices that should be ignored by NetworkManager when using the
+keyfile
+plugin\&. Devices are specified in the following format:
+.sp
+mac:<hwaddr>
+or
+interface\-name:<ifname>\&. Here
+hwaddr
+is the MAC address of the device to be ignored, in hex\-digits\-and\-colons notation\&.
+ifname
+is the interface name of the ignored device\&.
+.sp
+Multiple entries are separated with semicolons\&. No spaces are allowed in the value\&.
+.sp
+Example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+unmanaged\-devices=interface\-name:em4
+unmanaged\-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface\-name:eth2
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.SH "IFUPDOWN SECTION"
+.PP
+This section contains ifupdown\-specific options and thus only has effect when using the
+ifupdown
+plugin\&.
+.PP
+.PP
+\fImanaged\fR
+.RS 4
+If set to
+true, then interfaces listed in
+/etc/network/interfaces
+are managed by NetworkManager\&. If set to
+false, then any interface listed in
+/etc/network/interfaces
+will be ignored by NetworkManager\&. Remember that NetworkManager controls the default route, so because the interface is ignored, NetworkManager may assign the default route to some other interface\&.
+.sp
+The default value is
+false\&.
+.RE
+.SH "LOGGING SECTION"
+.PP
+This section controls NetworkManager\*(Aqs logging\&. Any settings here are overridden by the
+\fB\-\-log\-level\fR
+and
+\fB\-\-log\-domains\fR
+command\-line options\&.
+.PP
+.PP
+\fIlevel\fR
+.RS 4
+The default logging verbosity level\&. One of
+ERR,
+WARN,
+INFO,
+DEBUG\&. The ERR level logs only critical errors\&. WARN logs warnings that may reflect operation\&. INFO logs various informational messages that are useful for tracking state and operations\&. DEBUG enables verbose logging for debugging purposes\&. Subsequent levels also log all messages from earlier levels; thus setting the log level to INFO also logs error and warning messages\&.
+.RE
+.PP
+\fIdomains\fR
+.RS 4
+The following log domains are available: PLATFORM, RFKILL, ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN, BRIDGE, DBUS_PROPS, TEAM, CONCHECK, DCB, DISPATCH\&.
+.sp
+In addition, these special domains can be used: NONE, ALL, DEFAULT, DHCP, IP\&.
+.sp
+You can specify per\-domain log level overrides by adding a colon and a log level to any domain\&. E\&.g\&., "WIFI:DEBUG"\&.
+.RE
+.PP
+.RS 4
+.PP
+Domain descriptions:
+.RS 4
+PLATFORM : OS (platform) operations
+.RE
+.RS 4
+RFKILL : RFKill subsystem operations
+.RE
+.RS 4
+ETHER : Ethernet device operations
+.RE
+.RS 4
+WIFI : Wi\-Fi device operations
+.RE
+.RS 4
+BT : Bluetooth operations
+.RE
+.RS 4
+MB : Mobile broadband operations
+.RE
+.RS 4
+DHCP4 : DHCP for IPv4
+.RE
+.RS 4
+DHCP6 : DHCP for IPv6
+.RE
+.RS 4
+PPP : Point\-to\-point protocol operations
+.RE
+.RS 4
+WIFI_SCAN : Wi\-Fi scanning operations
+.RE
+.RS 4
+IP4 : IPv4\-related operations
+.RE
+.RS 4
+IP6 : IPv6\-related operations
+.RE
+.RS 4
+AUTOIP4 : AutoIP (avahi) operations
+.RE
+.RS 4
+DNS : Domain Name System related operations
+.RE
+.RS 4
+VPN : Virtual Private Network connections and operations
+.RE
+.RS 4
+SHARING : Connection sharing
+.RE
+.RS 4
+SUPPLICANT : WPA supplicant related operations
+.RE
+.RS 4
+AGENTS : Secret agents operations and communication
+.RE
+.RS 4
+SETTINGS : Settings/config service operations
+.RE
+.RS 4
+SUSPEND : Suspend/resume
+.RE
+.RS 4
+CORE : Core daemon and policy operations
+.RE
+.RS 4
+DEVICE : Activation and general interface operations
+.RE
+.RS 4
+OLPC : OLPC Mesh device operations
+.RE
+.RS 4
+WIMAX : WiMAX device operations
+.RE
+.RS 4
+INFINIBAND : InfiniBand device operations
+.RE
+.RS 4
+FIREWALL : FirewallD related operations
+.RE
+.RS 4
+ADSL : ADSL device operations
+.RE
+.RS 4
+BOND : Bonding operations
+.RE
+.RS 4
+VLAN : VLAN operations
+.RE
+.RS 4
+BRIDGE : Bridging operations
+.RE
+.RS 4
+DBUS_PROPS : D\-Bus property changes
+.RE
+.RS 4
+TEAM : Teaming operations
+.RE
+.RS 4
+CONCHECK : Connectivity check
+.RE
+.RS 4
+DCB : Data Center Bridging (DCB) operations
+.RE
+.RS 4
+DISPATCH : Dispatcher scripts
+.RE
+.RS 4
+
+.RE
+.RS 4
+NONE : when given by itself logging is disabled
+.RE
+.RS 4
+ALL : all log domains
+.RE
+.RS 4
+DEFAULT : default log domains
+.RE
+.RS 4
+DHCP : shortcut for "DHCP4,DHCP6"
+.RE
+.RS 4
+IP : shortcut for "IP4,IP6"
+.RE
+.RS 4
+
+.RE
+.RS 4
+HW : deprecated alias for "PLATFORM"
+.RE
+.RE
+.SH "CONNECTIVITY SECTION"
+.PP
+This section controls NetworkManager\*(Aqs optional connectivity checking functionality\&. This allows NetworkManager to detect whether or not the system can actually access the internet or whether it is behind a captive portal\&.
+.PP
+.PP
+\fIuri\fR
+.RS 4
+The URI of a web page to periodically request when connectivity is being checked\&. This page should return the header "X\-NetworkManager\-Status" with a value of "online"\&. Alternatively, it\*(Aqs body content should be set to "NetworkManager is online"\&. The body content check can be controlled by the
+response
+option\&. If this option is blank or missing, connectivity checking is disabled\&.
+.RE
+.PP
+\fIinterval\fR
+.RS 4
+Specified in seconds; controls how often connectivity is checked when a network connection exists\&. If set to 0 connectivity checking is disabled\&. If missing, the default is 300 seconds\&.
+.RE
+.PP
+\fIresponse\fR
+.RS 4
+If set controls what body content NetworkManager checks for when requesting the URI for connectivity checking\&. If missing, defaults to "NetworkManager is online"
+.RE
+.SH "PLUGINS"
+.PP
+\fIkeyfile\fR
+.RS 4
+The
+keyfile
+plugin is the generic plugin that supports all the connection types and capabilities that NetworkManager has\&. It writes files out in an \&.ini\-style format in /etc/NetworkManager/system\-connections\&.
+.sp
+The stored connection file may contain passwords and private keys, so it will be made readable only to root, and the plugin will ignore files that are readable or writeable by any user or group other than root\&.
+.sp
+This plugin is always active, and will automatically be used to store any connections that aren\*(Aqt supported by any other active plugin\&.
+.RE
+.PP
+\fIifcfg\-rh\fR
+.RS 4
+This plugin is used on the Fedora and Red Hat Enterprise Linux distributions to read and write configuration from the standard
+/etc/sysconfig/network\-scripts/ifcfg\-*
+files\&. It currently supports reading Ethernet, Wi\-Fi, InfiniBand, VLAN, Bond, Bridge, and Team connections\&.
+.RE
+.PP
+\fIifcfg\-suse\fR
+.RS 4
+This plugin is only provided for simple backward compatibility with SUSE and OpenSUSE configuration\&. Most setups should be using the
+keyfile
+plugin instead\&. The
+ifcfg\-suse
+plugin supports reading Ethernet and Wi\-Fi connections, but does not support saving any connection types\&.
+.RE
+.PP
+\fIifupdown\fR
+.RS 4
+This plugin is used on the Debian and Ubuntu distributions, and reads Ethernet and Wi\-Fi connections from
+/etc/network/interfaces\&.
+.sp
+This plugin is read\-only; any connections (of any type) added from within NetworkManager when you are using this plugin will be saved using the
+keyfile
+plugin instead\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBNetworkManager\fR(8),
+\fBnmcli\fR(1),
+\fBnmcli-examples\fR(5),
+\fBnm-online\fR(1),
+\fBnm-settings\fR(5),
+\fBnm-applet\fR(1),
+\fBnm-connection-editor\fR(1)
diff --git a/man/NetworkManager.conf.5.in b/man/NetworkManager.conf.5.in
deleted file mode 100644
index e595076a2..000000000
--- a/man/NetworkManager.conf.5.in
+++ /dev/null
@@ -1,266 +0,0 @@
-.\" NetworkManager.conf(5) manual page
-.\"
-.\" Copyright (C) 2010 - 2013 Red Hat, Inc.
-.\"
-.TH "NetworkManager.conf" "5" "17 January 2013" ""
-.SH NAME
-NetworkManager.conf \- NetworkManager configuration file
-.SH SYNOPSIS
-/etc/NetworkManager/NetworkManager.conf
-.br
-or
-.br
-\fI<SYSCONFDIR>\fP/NetworkManager/NetworkManager.conf
-.br
-where <SYSCONFDIR> depends on your distribution or build.
-.SH DESCRIPTION
-.P
-.I NetworkManager.conf
-is a configuration file for NetworkManager. It is used to set up various
-aspects of NetworkManager's behavior. The location of
-the file may be changed through use of the "\-\-config=" argument for
-\fBNetworkManager\fP (8).
-.SH "FILE FORMAT"
-.P
-The configuration file format is so-called key file (sort of ini-style format).
-It consists of sections (groups) of key-value pairs. Lines beginning with a '#' and blank
-lines are considered comments. Sections are started by a header line containing
-the section enclosed in '[' and ']', and ended implicitly by the start of
-the next section or the end of the file. Each key-value pair must be contained
-in a section.
-.br
-Minimal system settings configuration file looks like this:
-.P
-.nf
-[main]
-plugins=keyfile
-.fi
-.P
-Description of sections and available keys follows:
-.SS [main]
-This section is the only mandatory section of the configuration file.
-.TP
-.B plugins=\fIplugin1\fP,\fIplugin2\fP, ...
-List system settings plugin names separated by ','. These plugins are used to
-read/write system-wide connection. When more plugins are specified, the
-connections are read from all listed plugins. When writing connections, the
-plugins will be asked to save the connection in the order listed here. If the
-first plugin cannot write out that connection type, or can't write out any
-connections, the next plugin is tried. If none of the plugins can save the
-connection, the error is returned to the user.
-.P
-.RS
-.B "Available plugins:"
-.br
-.TP
-.I keyfile
-plugin is the generic plugin that supports all the connection types and
-capabilities that NetworkManager has. It writes files out in a .ini-style format in
-/etc/NetworkManager/system-connections. For security, it will ignore files
-that are readable or writeable by any user or group other than
-.I root
-since private keys and passphrases may be stored in plaintext inside the file.
-.TP
-.I ifcfg\-rh
-plugin is used on the Fedora and Red Hat Enterprise Linux distributions
-to read and write configuration from the standard /etc/sysconfig/network-scripts/ifcfg-* files.
-It currently supports reading wired, WiFi, and 802.1x connections, but does not yet support reading
-or writing mobile broadband, PPPoE, or VPN connections. To allow reading and writing of these
-add \fIkeyfile\fP plugin to your configuration as well.
-.TP
-.I ifupdown
-plugin is used on the Debian and Ubuntu distributions, and reads connections from
-/etc/network/interfaces. Since it cannot write connections out (that support isn't planned),
-it is usually paired with the \fIkeyfile\fP plugin to enable saving and editing of new connections.
-The \fIifupdown\fP plugin supports basic wired and WiFi connections, including WPA-PSK.
-.TP
-.I ifcfg\-suse
-plugin is only provided for simple backward compatibility with SUSE and OpenSUSE configuration.
-Most setups should be using the \fIkeyfile\fP plugin instead. The \fIifcfg\-suse\fP plugin supports
-reading wired and WiFi connections, but does not support saving any connection types.
-.RE
-.TP
-.B dhcp=\fIdhclient\fP | \fIdhcpcd\fP
-This key sets up what DHCP client NetworkManager will use. Presently
-\fIdhclient\fP and \fIdhcpcd\fP are supported. The client configured here should
-be available on your system too. If this key is missing, available DHCP clients
-are looked for in this order: dhclient, dhcpcd.
-.TP
-.B no-auto-default=\fI<hwaddr>\fP,\fI<hwaddr>\fP,... | \fI*\fP
-Set devices for which NetworkManager shouldn't create default wired connection
-(Auto eth0). NetworkManager creates a default wired connection for any wired
-device that is managed and doesn't have a connection configured. List a device
-in this option to inhibit creating the default connection for the device.
-.br
-When the default wired connection is deleted or saved to a new persistent connection
-by a plugin, the MAC address of the wired device is automatically added to this list
-to prevent creating the default connection for that device again.
-Devices are specified by their MAC addresses, in lowercase. Multiple
-entries are separated by commas. You can use the glob character \fI*\fP instead
-of listing addresses to specify all devices.
-.br
-Examples:
-.nf
-no-auto-default=00:22:68:5c:5d:c4,00:1e:65:ff:aa:ee
-no-auto-default=*
-.fi
-.TP
-.B dns=\fIplugin1\fP,\fIplugin2\fP, ...
-List DNS plugin names separated by ','. DNS plugins are used to provide local
-caching nameserver functionality (which speeds up DNS queries) and to push
-DNS data to applications that use it.
-.P
-.RS
-.B "Available plugins:"
-.br
-.TP
-.I dnsmasq
-this plugin uses dnsmasq to provide local caching nameserver functionality.
-.RE
-.SS [keyfile]
-This section contains keyfile-specific options and thus only has effect when using \fIkeyfile\fP plugin.
-.TP
-.B hostname=\fI<hostname>\fP
-Set a persistent hostname when using the \fIkeyfile\fP plugin.
-.TP
-.B unmanaged-devices=\fImac:<hwaddr>\fP;\fImac:<hwaddr>\fP;...
-Set devices that should be ignored by NetworkManager when using the \fIkeyfile\fP
-plugin. Devices are specified in the following format: "mac:<hwaddr>", where
-<hwaddr> is MAC address of the device to be ignored, in hex-digits-and-colons notation.
-Multiple entries are separated by a semicolon. No spaces are allowed in the value.
-.br
-Example:
-.nf
-unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4
-.fi
-.SS [ifupdown]
-This section contains ifupdown-specific options and thus only has effect when using \fIifupdown\fP plugin.
-.TP
-.B managed=\fIfalse\fP | \fItrue\fP
-Controls whether interfaces listed in the 'interfaces' file are managed by NetworkManager.
-If set to \fItrue\fP, then interfaces listed in /etc/network/interfaces are managed by NetworkManager.
-If set to \fIfalse\fP, then any interface listed in /etc/network/interfaces will be
-ignored by NetworkManager. Remember that NetworkManager controls the default route,
-so because the interface is ignored, NetworkManager may assign the default route to
-some other interface.
-When the option is missing, \fIfalse\fP value is taken as default.
-.SS [logging]
-This section controls NetworkManager's logging. Any settings here are
-overridden by the \-\-log\-level and \-\-log\-domains command-line options.
-.TP
-.B level=\fI<level>\fP
-One of [ERR, WARN, INFO, DEBUG]. The ERR level logs only critical errors. WARN
-logs warnings that may reflect operation. INFO logs various informational
-messages that are useful for tracking state and operations. DEBUG enables
-verbose logging for debugging purposes. Subsequent levels also log all messages
-from earlier levels; thus setting the log level to INFO also logs error and
-warning messages.
-.TP
-.B domains=\fI<domain1>,<domain2>, ...\fP
-The following log domains are available: [HW, RFKILL, ETHER, WIFI, BT, MB, DHCP4,
-DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS,
-SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND,
-VLAN, BRIDGE].
-.br
-In addition to them, these special domains can be used: [NONE, ALL, DEFAULT, DHCP, IP].
-.PP
-.RS
-NONE = when given by itself, logging is disabled
-.br
-ALL = all log domains will be switched on
-.br
-DEFAULT = default log domains
-.br
-DHCP = a shortcut for "DHCP4, DHCP6"
-.br
-IP = a shortcut for "IP4, IP6"
-.br
-.PP
-HW = Hardware related operations
-.br
-RFKILL = RFKill subsystem operations
-.br
-ETHER = Ethernet device operations
-.br
-WIFI = Wi-Fi device operations
-.br
-BT = Bluetooth
-.br
-MB = Mobile Broadband
-.br
-DHCP4 = DHCP for IPv4
-.br
-DHCP6 = DHCP for IPv6
-.br
-PPP = Point-to-point protocol operations
-.br
-WIFI_SCAN = Wi-Fi scanning operations
-.br
-IP4 = Domain for IPv4 logging
-.br
-IP6 = Domain for IPv6 logging
-.br
-AUTOIP4 = AutoIP (avahi) operations
-.br
-DNS = Domain Name System related operations
-.br
-VPN = Virtual Private Network connections and operaions
-.br
-SHARING = Connection sharing
-.br
-SUPPLICANT = WPA supplicant related operations
-.br
-AGENTS = Secret agents operations and communication
-.br
-SETTINGS = Settings/config service operations
-.br
-SUSPEND = Suspend/resume
-.br
-CORE = Core daemon operations
-.br
-DEVICE = Activation and general interface operations
-.br
-OLPC = OLPC Mesh device operations
-.br
-WIMAX = Wimax device operations
-.br
-INFINIBAND = InfiniBand device operations
-.br
-FIREWALL = FirewallD related operations
-.br
-ADSL = ADSL device operations
-.br
-BOND = Bonding device operations
-.br
-VLAN = VLAN device operations
-.br
-BRIDGE = Bridging device operations
-.br
-.SS [connectivity]
-This section controls NetworkManager's optional connectivity checking
-functionality. This allows NetworkManager to detect whether or not the system
-can actually access the internet or whether it is behind a captive portal.
-.TP
-.B uri=\fI<uri>\fP
-The URI of a web page to periodically request when connectivity is being checked.
-This page should return the header "X-NetworkManager-Status" with a value of
-"online". Alternatively, it's body content should be set to "NetworkManager
-is online". The body content check can be controlled by the \fIresponse\fP
-option. If this option is blank or missing, connectivity checking is disabled.
-.TP
-.B interval=\fI<seconds>\fP
-Controls how often connectivity is checked when a network connection exists. If
-set to 0 connectivity checking is disabled. If missing, the default is 300
-seconds.
-.TP
-.B response=\fI<response>\fP
-If set controls what body content NetworkManager checks for when requesting the
-URI for connectivity checking. If missing, defaults to "NetworkManager is online"
-.SH "SEE ALSO"
-.BR http://live.gnome.org/NetworkManager/SystemSettings
-.sp
-.BR NetworkManager (8),
-.BR nmcli (1),
-.BR nm\-tool (1),
-.BR nm\-online (1),
-.BR nm\-settings (5).
diff --git a/man/nm-online.1.in b/man/nm-online.1.in
index 3acb4de49..f56f5dafe 100644
--- a/man/nm-online.1.in
+++ b/man/nm-online.1.in
@@ -19,9 +19,9 @@
.\" with this manual; if not, write to the Free Software Foundation, Inc.,
.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
.\"
-.\" Copyright (C) 2010 Red Hat, Inc.
+.\" Copyright (C) 2010 - 2014 Red Hat, Inc.
.\"
-.TH NM-ONLINE "1" "11 July 2013"
+.TH NM-ONLINE "1" "25 March 2014"
.SH NAME
nm-online \- ask NetworkManager whether the network is connected
@@ -35,7 +35,12 @@ is a utility to find out whether we are online. It is done by asking
NetworkManager about its status. When run, \fInm\-online\fP waits until
NetworkManager reports an active connection, or specified timeout expires. On
exit, the returned status code should be checked (see the return codes bellow).
-
+.P
+By default NetworkManager waits for IPv4 dynamic addressing to complete but does
+not wait for the "auto" IPv6 dynamic addressing. To wait for IPv6 addressing to
+complete, either (1) change the network connection's IPv6 "may-fail" setting to "no",
+and/or (2) change the IPv6 addressing method to "manual" or "dhcp", to indicate that
+IPv6 connectivity is expected.
.SH OPTIONS
.TP
.B \-t, \-\-timeout <timeout_value>
@@ -47,6 +52,15 @@ Exit immediately if NetworkManager is not running or connecting.
.TP
.B \-q, \-\-quiet
Don't print anything.
+.TP
+.B \-s, \-\-wait-for-startup
+Wait for NetworkManager startup to complete, rather than waiting for
+network connectivity specifically. Startup is considered complete once
+NetworkManager has activated (or attempted to activate) every
+auto-activate connection which is available given the current network
+state. (This is generally only useful at boot time; after startup has
+completed, \fInm-online -s\fP will just return immediately, regardless
+of the current network state.)
.SH EXIT STATUS
@@ -58,6 +72,5 @@ Offline or not online within given timeout
Unspecified error
.SH SEE ALSO
-.BR nm\-tool (1),
.BR nmcli (1),
.BR NetworkManager(8).
diff --git a/man/nm-settings.5 b/man/nm-settings.5
new file mode 100644
index 000000000..6f6aaf8e1
--- /dev/null
+++ b/man/nm-settings.5
@@ -0,0 +1,3029 @@
+'\" t
+.\" Title: nm-settings
+.\" Author: [see the "AUTHOR" section]
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 03 July 2014
+.\" Manual: Configuration
+.\" Source: NetworkManager 0.9.10.0
+.\" Language: English
+.\"
+.TH "NM\-SETTINGS" "5" "" "NetworkManager 0\&.9\&.10\&.0" "Configuration"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nm-settings \- Description of settings and properties of NetworkManager connection profiles
+.SH "DESCRIPTION"
+.PP
+NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only\&. These connection profiles contain a network configuration\&. When NetworkManager activates a connection profile on a network device the configuration will be applied and an active network connection will be established\&. Users are free to create as many connection profiles as they see fit\&. Thus they are flexible in having various network configurations for different networking needs\&. The connection profiles are handled by NetworkManager via
+\fIsettings service\fR
+and are exported on D\-Bus (\fI/org/freedesktop/NetworkManager/Settings/<num>\fR
+objects)\&. The conceptual objects can be described as follows:
+.PP
+Connection (profile)
+.RS 4
+A specific, encapsulated, independent group of settings describing all the configuration required to connect to a specific network\&. It is referred to by a unique identifier called the UUID\&. A connection is tied to a one specific device type, but not necessarily a specific hardware device\&. It is composed of one or more
+\fISettings\fR
+objects\&.
+.RE
+.PP
+Setting
+.RS 4
+A group of related key/value pairs describing a specific piece of a
+\fIConnection (profile)\fR\&. Settings keys and allowed values are described in the tables below\&. Keys are also reffered to as properties\&. Developers can find the setting objects and their properties in the libnm\-util sources\&. Look for the
+\fBclass_init\fR
+functions near the bottom of each setting source file\&.
+.RE
+.PP
+The settings and properties shown in tables below list all available connection configuration options\&. However, note that not all settings are applicable to all connection types\&. NetworkManager provides a command\-line tool
+\fInmcli\fR
+that allows direct configuration of the settings and properties according to a connection profile type\&.
+\fInmcli\fR
+connection editor has also a built\-in
+\fIdescribe\fR
+command that can display description of particular settings and properties of this page\&.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&1.\ \&802-1x setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+802\-1x
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+eap
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+The allowed EAP method to be used when authenticating to the network with 802\&.1x\&. Valid methods are: \*(Aqleap\*(Aq, \*(Aqmd5\*(Aq, \*(Aqtls\*(Aq, \*(Aqpeap\*(Aq, \*(Aqttls\*(Aq, \*(Aqpwd\*(Aq, and \*(Aqfast\*(Aq\&. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations\&.
+T}
+T{
+identity
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Identity string for EAP authentication methods\&. Often the user\*(Aqs user or login name\&.
+T}
+T{
+anonymous\-identity
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Anonymous identity string for EAP authentication methods\&. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP\-TTLS\&.
+T}
+T{
+pac\-file
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+UTF\-8 encoded file path containing PAC for EAP\-FAST\&.
+T}
+T{
+ca\-cert
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Contains the CA certificate if used by the EAP method specified in the \*(Aqeap\*(Aq property\&. Certificate data is specified using a \*(Aqscheme\*(Aq; two are currently supported: blob and path\&. When using the blob scheme (which is backwards compatible with NM 0\&.7\&.x) this property should be set to the certificate\*(Aqs DER encoded data\&. When using the path scheme, this property should be set to the full UTF\-8 encoded path of the certificate, prefixed with the string \*(Aqfile://\*(Aq and ending with a terminating NULL byte\&. This property can be unset even if the EAP method supports CA certificates, but this allows man\-in\-the\-middle attacks and is NOT recommended\&.
+T}
+T{
+ca\-path
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+UTF\-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the \*(Aqca\-cert\*(Aq property\&.
+T}
+T{
+subject\-match
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Substring to be matched against the subject of the certificate presented by the authentication server\&. When unset, no verification of the authentication server certificate\*(Aqs subject is performed\&.
+T}
+T{
+altsubject\-matches
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+List of strings to be matched against the altSubjectName of the certificate presented by the authentication server\&. If the list is empty, no verification of the server certificate\*(Aqs altSubjectName is performed\&.
+T}
+T{
+client\-cert
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Contains the client certificate if used by the EAP method specified in the \*(Aqeap\*(Aq property\&. Certificate data is specified using a \*(Aqscheme\*(Aq; two are currently supported: blob and path\&. When using the blob scheme (which is backwards compatible with NM 0\&.7\&.x) this property should be set to the certificate\*(Aqs DER encoded data\&. When using the path scheme, this property should be set to the full UTF\-8 encoded path of the certificate, prefixed with the string \*(Aqfile://\*(Aq and ending with a terminating NULL byte\&.
+T}
+T{
+phase1\-peapver
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Forces which PEAP version is used when PEAP is set as the EAP method in \*(Aqeap\*(Aq property\&. When unset, the version reported by the server will be used\&. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version\&. To do so, this property may be set to \*(Aq0\*(Aq or \*(Aq1\*(Aq to force that specific PEAP version\&.
+T}
+T{
+phase1\-peaplabel
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Forces use of the new PEAP label during key derivation\&. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1\&. Set to \*(Aq1\*(Aq to force use of the new PEAP label\&. See the wpa_supplicant documentation for more details\&.
+T}
+T{
+phase1\-fast\-provisioning
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Enables or disables in\-line provisioning of EAP\-FAST credentials when FAST is specified as the EAP method in the #NMSetting8021x:eap property\&. Allowed values are \*(Aq0\*(Aq (disabled), \*(Aq1\*(Aq (allow unauthenticated provisioning), \*(Aq2\*(Aq (allow authenticated provisioning), and \*(Aq3\*(Aq (allow both authenticated and unauthenticated provisioning)\&. See the wpa_supplicant documentation for more details\&.
+T}
+T{
+phase2\-auth
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Specifies the allowed \*(Aqphase 2\*(Aq inner non\-EAP authentication methods when an EAP method that uses an inner TLS tunnel is specified in the \*(Aqeap\*(Aq property\&. Recognized non\-EAP phase2 methods are \*(Aqpap\*(Aq, \*(Aqchap\*(Aq, \*(Aqmschap\*(Aq, \*(Aqmschapv2\*(Aq, \*(Aqgtc\*(Aq, \*(Aqotp\*(Aq, \*(Aqmd5\*(Aq, and \*(Aqtls\*(Aq\&. Each \*(Aqphase 2\*(Aq inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&.
+T}
+T{
+phase2\-autheap
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Specifies the allowed \*(Aqphase 2\*(Aq inner EAP\-based authentication methods when an EAP method that uses an inner TLS tunnel is specified in the \*(Aqeap\*(Aq property\&. Recognized EAP\-based \*(Aqphase 2\*(Aq methods are \*(Aqmd5\*(Aq, \*(Aqmschapv2\*(Aq, \*(Aqotp\*(Aq, \*(Aqgtc\*(Aq, and \*(Aqtls\*(Aq\&. Each \*(Aqphase 2\*(Aq inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&.
+T}
+T{
+phase2\-ca\-cert
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Contains the \*(Aqphase 2\*(Aq CA certificate if used by the EAP method specified in the \*(Aqphase2\-auth\*(Aq or \*(Aqphase2\-autheap\*(Aq properties\&. Certificate data is specified using a \*(Aqscheme\*(Aq; two are currentlysupported: blob and path\&. When using the blob scheme (which is backwards compatible with NM 0\&.7\&.x) this property should be set to the certificate\*(Aqs DER encoded data\&. When using the path scheme, this property should be set to the full UTF\-8 encoded path of the certificate, prefixed with the string \*(Aqfile://\*(Aq and ending with a terminating NULL byte\&. This property can be unset even if the EAP method supports CA certificates, but this allows man\-in\-the\-middle attacks and is NOT recommended\&.
+T}
+T{
+phase2\-ca\-path
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+UTF\-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the \*(Aqphase2\-ca\-cert\*(Aq property\&.
+T}
+T{
+phase2\-subject\-match
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Substring to be matched against the subject of the certificate presented by the authentication server during the inner \*(Aqphase2\*(Aq authentication\&. When unset, no verification of the authentication server certificate\*(Aqs subject is performed\&.
+T}
+T{
+phase2\-altsubject\-matches
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+List of strings to be matched against List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner \*(Aqphase 2\*(Aq authentication\&. If the list is empty, no verification of the server certificate\*(Aqs altSubjectName is performed\&.
+T}
+T{
+phase2\-client\-cert
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Contains the \*(Aqphase 2\*(Aq client certificate if used by the EAP method specified in the \*(Aqphase2\-auth\*(Aq or \*(Aqphase2\-autheap\*(Aq properties\&. Certificate data is specified using a \*(Aqscheme\*(Aq; two are currently supported: blob and path\&. When using the blob scheme (which is backwards compatible with NM 0\&.7\&.x) this property should be set to the certificate\*(Aqs DER encoded data\&. When using the path scheme, this property should be set to the full UTF\-8 encoded path of the certificate, prefixed with the string \*(Aqfile://\*(Aq and ending with a terminating NULL byte\&.
+T}
+T{
+password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+UTF\-8 encoded password used for EAP authentication methods\&.
+T}
+T{
+password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the 802\&.1x password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+password\-raw
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Password used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF\-8 to be used\&. If both \*(Aqpassword\*(Aq and \*(Aqpassword\-raw\*(Aq are given, \*(Aqpassword\*(Aq is preferred\&.
+T}
+T{
+password\-raw\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the 802\&.1x password byte array\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+private\-key
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Contains the private key when the \*(Aqeap\*(Aq property is set to \*(Aqtls\*(Aq\&. Key data is specified using a \*(Aqscheme\*(Aq; two are currently supported: blob and path\&. When using the blob scheme and private keys, this property should be set to the key\*(Aqs encrypted PEM encoded data\&. When using private keys with the path scheme, this property should be set to the full UTF\-8 encoded path of the key, prefixed with the string \*(Aqfile://\*(Aq and ending with a terminating NULL byte\&. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the \*(Aqprivate\-key\-password\*(Aq property must be set to password used to decrypt the PKCS#12 certificate and key\&. When using PKCS#12 files and the path scheme, this property should be set to the full UTF\-8 encoded path of the key, prefixed with the string \*(Aqfile://\*(Aq and and ending with a terminating NULL byte, and as with the blob scheme the \*(Aqprivate\-key\-password\*(Aq property must be set to the password used to decode the PKCS#12 private key and certificate\&.
+T}
+T{
+private\-key\-password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The password used to decrypt the private key specified in the \*(Aqprivate\-key\*(Aq property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key\&.
+T}
+T{
+private\-key\-password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the 802\&.1x private key password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+phase2\-private\-key
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Contains the \*(Aqphase 2\*(Aq inner private key when the \*(Aqphase2\-auth\*(Aq or \*(Aqphase2\-autheap\*(Aq property is set to \*(Aqtls\*(Aq\&. Key data is specified using a \*(Aqscheme\*(Aq; two are currently supported: blob and path\&. When using the blob scheme and private keys, this property should be set to the key\*(Aqs encrypted PEM encoded data\&. When using private keys with the path scheme, this property should be set to the full UTF\-8 encoded path of the key, prefixed with the string \*(Aqfile://\*(Aq and ending with a terminating NULL byte\&. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the \*(Aqphase2\-private\-key\-password\*(Aq property must be set to password used to decrypt the PKCS#12 certificate and key\&. When using PKCS#12 files and the path scheme, this property should be set to the full UTF\-8 encoded path of the key, prefixed with the string \*(Aqfile://\*(Aq and and ending with a terminating NULL byte, and as with the blob scheme the \*(Aqphase2\-private\-key\-password\*(Aq property must be set to the password used to decode the PKCS#12 private key and certificate\&.
+T}
+T{
+phase2\-private\-key\-password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The password used to decrypt the \*(Aqphase 2\*(Aq private key specified in the \*(Aqprivate\-key\*(Aq property when the phase2 private key either uses the path scheme, or if the phase2 private key is a PKCS#12 format key\&.
+T}
+T{
+phase2\-private\-key\-password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the 802\&.1x phase2 private key password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+pin
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+PIN used for EAP authentication methods\&.
+T}
+T{
+pin\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the 802\&.1x PIN\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+system\-ca\-certs
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+When TRUE, overrides \*(Aqca\-path\*(Aq and \*(Aqphase2\-ca\-path\*(Aq properties using the system CA directory specified at configure time with the \-\-system\-ca\-path switch\&. The certificates in this directory are added to the verification chain in addition to any certificates specified by the \*(Aqca\-cert\*(Aq and \*(Aqphase2\-ca\-cert\*(Aq properties\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&2.\ \&adsl setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+adsl
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+username
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Username used to authenticate with the pppoa service\&.
+T}
+T{
+password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Password used to authenticate with the pppoa service\&.
+T}
+T{
+password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the ADSL password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+protocol
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+ADSL connection protocol\&.
+T}
+T{
+encapsulation
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Encapsulation of ADSL connection
+T}
+T{
+vpi
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+VPI of ADSL connection
+T}
+T{
+vci
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+VCI of ADSL connection
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&3.\ \&bluetooth setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+bluetooth
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+bdaddr
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+The Bluetooth address of the device
+T}
+T{
+type
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Either \*(Aqdun\*(Aq for Dial\-Up Networking connections or \*(Aqpanu\*(Aq for Personal Area Networking connections\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&4.\ \&bond setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+bond
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+interface\-name
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The name of the virtual in\-kernel bonding network interface
+T}
+T{
+options
+T}:T{
+dict of (string::string)
+T}:T{
+\ \&
+T}:T{
+Dictionary of key/value pairs of bonding options\&. Both keys and values must be strings\&. Option names must contain only alphanumeric characters (ie, [a\-zA\-Z0\-9])\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&5.\ \&bridge setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+bridge
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+interface\-name
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The name of the virtual in\-kernel bridging network interface
+T}
+T{
+mac\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+The MAC address of the bridge
+T}
+T{
+stp
+T}:T{
+boolean
+T}:T{
+TRUE
+T}:T{
+Controls whether Spanning Tree Protocol (STP) is enabled for this bridge\&.
+T}
+T{
+priority
+T}:T{
+uint32
+T}:T{
+32768
+T}:T{
+Sets the Spanning Tree Protocol (STP) priority for this bridge\&. Lower values are \*(Aqbetter\*(Aq; the lowest priority bridge will be elected the root bridge\&.
+T}
+T{
+forward\-delay
+T}:T{
+uint32
+T}:T{
+15
+T}:T{
+The Spanning Tree Protocol (STP) forwarding delay, in seconds\&.
+T}
+T{
+hello\-time
+T}:T{
+uint32
+T}:T{
+2
+T}:T{
+The Spanning Tree Protocol (STP) hello time, in seconds\&.
+T}
+T{
+max\-age
+T}:T{
+uint32
+T}:T{
+20
+T}:T{
+The Spanning Tree Protocol (STP) maximum message age, in seconds\&.
+T}
+T{
+ageing\-time
+T}:T{
+uint32
+T}:T{
+300
+T}:T{
+The Ethernet MAC address aging time, in seconds\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&6.\ \&bridge-port setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+bridge\-port
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+priority
+T}:T{
+uint32
+T}:T{
+32
+T}:T{
+The Spanning Tree Protocol (STP) priority of this bridge port
+T}
+T{
+path\-cost
+T}:T{
+uint32
+T}:T{
+100
+T}:T{
+The Spanning Tree Protocol (STP) port cost for destinations via this port\&.
+T}
+T{
+hairpin\-mode
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+Enables or disabled \*(Aqhairpin mode\*(Aq for the port, which allows frames to be sent back out through the port the frame was received on\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&7.\ \&cdma setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+cdma
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+number
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Number to dial when establishing a PPP data session with the CDMA\-based mobile broadband network\&. If not specified, the default number (#777) is used when required\&.
+T}
+T{
+username
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Username used to authenticate with the network, if required\&. Note that many providers do not require a username or accept any username\&.
+T}
+T{
+password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Password used to authenticate with the network, if required\&. Note that many providers do not require a password or accept any password\&.
+T}
+T{
+password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the CDMA password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&8.\ \&connection setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+connection
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+id
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+User\-readable connection identifier/name\&. Must be one or more characters and may change over the lifetime of the connection if the user decides to rename it\&.
+T}
+T{
+uuid
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Universally unique connection identifier\&. Must be in the format \*(Aq2815492f\-7e56\-435e\-b2e9\-246bd7cdc664\*(Aq (ie, contains only hexadecimal characters and \*(Aq\-\*(Aq)\&. The UUID should be assigned when the connection is created and never changed as long as the connection still applies to the same network\&. For example, it should not be changed when the user changes the connection\*(Aqs \*(Aqid\*(Aq, but should be recreated when the Wi\-Fi SSID, mobile broadband network provider, or the connection type changes\&.
+T}
+T{
+interface\-name
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Interface name this connection is bound to\&. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings)\&. For connection types where interface names cannot easily be made persistent (e\&.g\&. mobile broadband or USB Ethernet), this property should not be used\&. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface\&.
+T}
+T{
+type
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Base type of the connection\&. For hardware\-dependent connections, should contain the setting name of the hardware\-type specific setting (ie, \*(Aq802\-3\-ethernet\*(Aq or \*(Aq802\-11\-wireless\*(Aq or \*(Aqbluetooth\*(Aq, etc), and for non\-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, \*(Aqvpn\*(Aq or \*(Aqbridge\*(Aq, etc)\&.
+T}
+T{
+permissions
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+An array of strings defining what access a given user has to this connection\&. If this is NULL or empty, all users are allowed to access this connection\&. Otherwise a user is allowed to access this connection if and only if they are in this array\&. Each entry is of the form "[type]:[id]:[reserved]", for example: "user:dcbw:blah" At this time only the \*(Aquser\*(Aq [type] is allowed\&. Any other values are ignored and reserved for future use\&. [id] is the username that this permission refers to, which may not contain the \*(Aq:\*(Aq character\&. Any [reserved] information (if present) must be ignored and is reserved for future use\&. All of [type], [id], and [reserved] must be valid UTF\-8\&.
+T}
+T{
+autoconnect
+T}:T{
+boolean
+T}:T{
+TRUE
+T}:T{
+If TRUE, NetworkManager will activate this connection when its network resources are available\&. If FALSE, the connection must be manually activated by the user or some other mechanism\&.
+T}
+T{
+timestamp
+T}:T{
+uint64
+T}:T{
+0
+T}:T{
+Timestamp (in seconds since the Unix Epoch) that the connection was last successfully activated\&. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp\&. The property is only meant for reading (changes to this property will not be preserved)\&.
+T}
+T{
+read\-only
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, the connection is read\-only and cannot be changed by the user or any other mechanism\&. This is normally set for system connections whose plugin cannot yet write updated connections back out\&.
+T}
+T{
+zone
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The trust level of a the connection\&.Free form case\-insensitive string (for example "Home", "Work", "Public")\&. NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall\&.
+T}
+T{
+master
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Interface name of the master device or UUID of the master connection
+T}
+T{
+slave\-type
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Setting name describing the type of slave this connection is (ie, \*(Aqbond\*(Aq) or NULL if this connection is not a slave\&.
+T}
+T{
+secondaries
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+List of connection UUIDs that should be activated when the base connection itself is activated\&. Currently only VPN connections are supported\&.
+T}
+T{
+gateway\-ping\-timeout
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&9.\ \&dcb setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+dcb
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+app\-fcoe\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Specifies the flags for the DCB FCoE application\&. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing)\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+app\-fcoe\-priority
+T}:T{
+int32
+T}:T{
+\-1
+T}:T{
+The highest User Priority (0 \- 7) which FCoE frames should use, or \-1 for default priority\&. Only used when the \*(Aqapp\-fcoe\-flags\*(Aq property includes the \*(Aqenabled\*(Aq flag\&.
+T}
+T{
+app\-fcoe\-mode
+T}:T{
+string
+T}:T{
+"fabric"
+T}:T{
+The FCoe controller mode; either \*(Aqfabric\*(Aq (default) or \*(Aqvn2vn\*(Aq\&.
+T}
+T{
+app\-iscsi\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Specifies the flags for the DCB iSCSI application\&. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing)\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+app\-iscsi\-priority
+T}:T{
+int32
+T}:T{
+\-1
+T}:T{
+The highest User Priority (0 \- 7) which iSCSI frames should use, or \-1 for default priority\&. Only used when the \*(Aqapp\-iscsi\-flags\*(Aq property includes the \*(Aqenabled\*(Aq flag\&.
+T}
+T{
+app\-fip\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Specifies the flags for the DCB FIP application\&. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing)\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+app\-fip\-priority
+T}:T{
+int32
+T}:T{
+\-1
+T}:T{
+The highest User Priority (0 \- 7) which FIP frames should use, or \-1 for default priority\&. Only used when the \*(Aqapp\-fip\-flags\*(Aq property includes the \*(Aqenabled\*(Aq flag\&.
+T}
+T{
+priority\-flow\-control\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Specifies the flags for DCB Priority Flow Control\&. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing)\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+priority\-flow\-control
+T}:T{
+array of uint32
+T}:T{
+\ \&
+T}:T{
+An array of 8 uint values, where the array index corresponds to the User Priority (0 \- 7) and the value indicates whether or not the corresponding priority should transmit priority pause\&. Allowed values are 0 (do not transmit pause) and 1 (transmit pause)\&.
+T}
+T{
+priority\-group\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Specifies the flags for DCB Priority Groups\&. Flags may be any combination of 0x1 (enable), 0x2 (advertise), and 0x4 (willing)\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+priority\-group\-id
+T}:T{
+array of uint32
+T}:T{
+\ \&
+T}:T{
+An array of 8 uint values, where the array index corresponds to the User Priority (0 \- 7) and the value indicates the Priority Group ID\&. Allowed Priority Group ID values are 0 \- 7 or 15 for the unrestricted group\&.
+T}
+T{
+priority\-group\-bandwidth
+T}:T{
+array of uint32
+T}:T{
+\ \&
+T}:T{
+An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 \- 7) and the value indicates the percentage of link bandwidth allocated to that group\&. Allowed values are 0 \- 100, and the sum of all values must total 100 percent\&.
+T}
+T{
+priority\-bandwidth
+T}:T{
+array of uint32
+T}:T{
+\ \&
+T}:T{
+An array of 8 uint values, where the array index corresponds to the User Priority (0 \- 7) and the value indicates the percentage of bandwidth of the priority\*(Aqs assigned group that the priority may use\&. The sum of all percentages for priorities which belong to the same group must total 100 percent\&.
+T}
+T{
+priority\-strict\-bandwidth
+T}:T{
+array of uint32
+T}:T{
+\ \&
+T}:T{
+An array of 8 uint values, where the array index corresponds to the User Priority (0 \- 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group\&. Allowed values are 0 (the priority may not utilize all bandwidth) or 1 (the priority may utilize all bandwidth)\&.
+T}
+T{
+priority\-traffic\-class
+T}:T{
+array of uint32
+T}:T{
+\ \&
+T}:T{
+An array of 8 uint values, where the array index corresponds to the User Priority (0 \- 7) and the value indicates the traffic class (0 \- 7) to which the priority is mapped\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&10.\ \&gsm setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+gsm
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+number
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Number to dial when establishing a PPP data session with the GSM\-based mobile broadband network\&. Many modems do not require PPP for connections to the mobile network and thus this property should be left blank, which allows NetworkManager to select the appropriate settings automatically\&.
+T}
+T{
+username
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Username used to authenticate with the network, if required\&. Note that many providers do not require a username or accept any username\&.
+T}
+T{
+password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Password used to authenticate with the network, if required\&. Note that many providers do not require a password or accept any password\&.
+T}
+T{
+password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the GSM password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+apn
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM\-based network\&. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider\-specific walled\-garden, so it is important to use the correct APN for the user\*(Aqs mobile broadband plan\&. The APN may only be composed of the characters a\-z, 0\-9, \&., and \- per GSM 03\&.60 Section 14\&.9\&.
+T}
+T{
+network\-id
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The Network ID (GSM LAI format, ie MCC\-MNC) to force specific network registration\&. If the Network ID is specified, NetworkManager will attempt to force the device to register only on the specified network\&. This can be used to ensure that the device does not roam when direct roaming control of the device is not otherwise possible\&.
+T}
+T{
+network\-type
+T}:T{
+int32
+T}:T{
+\-1
+T}:T{
+Network preference to force the device to only use specific network technologies\&. The permitted values are: \-1: any, 0: 3G only, 1: GPRS/EDGE only, 2: prefer 3G, 3: prefer 2G, 4: prefer 4G/LTE, 5: 4G/LTE only\&. Notes: This property is deprecated and NetworkManager from 0\&.9\&.10 onwards doesn\*(Aqt use this property when talking to ModemManager\&.Also, not all devices allow network preference control\&.
+T}
+T{
+pin
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If the SIM is locked with a PIN it must be unlocked before any other operations are requested\&. Specify the PIN here to allow operation of the device\&.
+T}
+T{
+pin\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the GSM SIM PIN\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+allowed\-bands
+T}:T{
+uint32
+T}:T{
+1
+T}:T{
+Bitfield of allowed frequency bands\&.Notes: This property is deprecated and NetworkManager from 0\&.9\&.10 onwards doesn\*(Aqt use this property when talking to ModemManager\&.Also, not all devices allow frequency band control\&.
+T}
+T{
+home\-only
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+When TRUE, only connections to the home network will be allowed\&. Connections to roaming networks will not be made\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&11.\ \&infiniband setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+infiniband
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+mac\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+If specified, this connection will only apply to the IPoIB device whose permanent MAC address matches\&. This property does not change the MAC address of the device (i\&.e\&. MAC spoofing)\&.
+T}
+T{
+mtu
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames\&.
+T}
+T{
+transport\-mode
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The IPoIB transport mode\&. Either \*(Aqdatagram\*(Aq or \*(Aqconnected\*(Aq\&.
+T}
+T{
+p\-key
+T}:T{
+int32
+T}:T{
+\-1
+T}:T{
+The InfiniBand P_Key\&. Either \-1 for the default, or a 16\-bit unsigned integer\&.
+T}
+T{
+parent
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The interface name of the parent device, or NULL
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&12.\ \&ipv4 setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+ipv4
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+method
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+IPv4 configuration method\&. If \*(Aqauto\*(Aq is specified then the appropriate automatic method (DHCP, PPP, etc) is used for the interface and most other properties can be left unset\&. If \*(Aqlink\-local\*(Aq is specified, then a link\-local address in the 169\&.254/16 range will be assigned to the interface\&. If \*(Aqmanual\*(Aq is specified, static IP addressing is used and at least one IP address must be given in the \*(Aqaddresses\*(Aq property\&. If \*(Aqshared\*(Aq is specified (indicating that this connection will provide network access to other computers) then the interface is assigned an address in the 10\&.42\&.x\&.1/24 range and a DHCP and forwarding DNS server are started, and the interface is NAT\-ed to the current default network connection\&. \*(Aqdisabled\*(Aq means IPv4 will not be used on this connection\&. This property must be set\&.
+T}
+T{
+dns
+T}:T{
+array of uint32
+T}:T{
+\ \&
+T}:T{
+List of DNS servers (network byte order)\&. For the \*(Aqauto\*(Aq method, these DNS servers are appended to those (if any) returned by automatic configuration\&. DNS servers cannot be used with the \*(Aqshared\*(Aq, \*(Aqlink\-local\*(Aq, or \*(Aqdisabled\*(Aq methods as there is no upstream network\&. In all other methods, these DNS servers are used as the only DNS servers for this connection\&.
+T}
+T{
+dns\-search
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+List of DNS search domains\&. For the \*(Aqauto\*(Aq method, these search domains are appended to those returned by automatic configuration\&. Search domains cannot be used with the \*(Aqshared\*(Aq, \*(Aqlink\-local\*(Aq, or \*(Aqdisabled\*(Aq methods as there is no upstream network\&. In all other methods, these search domains are used as the only search domains for this connection\&.
+T}
+T{
+addresses
+T}:T{
+array of array of uint32
+T}:T{
+\ \&
+T}:T{
+Array of IPv4 address structures\&. Each IPv4 address structure is composed of 3 32\-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 \- 32), and last the IPv4 gateway (network byte order)\&. The gateway may be left as 0 if no gateway exists for that subnet\&. For the \*(Aqauto\*(Aq method, given IP addresses are appended to those returned by automatic configuration\&. Addresses cannot be used with the \*(Aqshared\*(Aq, \*(Aqlink\-local\*(Aq, or \*(Aqdisabled\*(Aq methods as addressing is either automatic or disabled with these methods\&.
+T}
+T{
+address\-labels
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+Internal use only
+T}
+T{
+routes
+T}:T{
+array of array of uint32
+T}:T{
+\ \&
+T}:T{
+Array of IPv4 route structures\&. Each IPv4 route structure is composed of 4 32\-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 \- 32), the third being the next\-hop (network byte order) if any, and the fourth being the route metric\&. For the \*(Aqauto\*(Aq method, given IP routes are appended to those returned by automatic configuration\&. Routes cannot be used with the \*(Aqshared\*(Aq, \*(Aqlink\-local\*(Aq, or \*(Aqdisabled\*(Aq, methods as there is no upstream network\&.
+T}
+T{
+ignore\-auto\-routes
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+When the method is set to \*(Aqauto\*(Aq and this property to TRUE, automatically configured routes are ignored and only routes specified in the \*(Aqroutes\*(Aq property, if any, are used\&.
+T}
+T{
+ignore\-auto\-dns
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+When the method is set to \*(Aqauto\*(Aq and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the \*(Aqdns\*(Aq and \*(Aqdns\-search\*(Aq properties, if any, are used\&.
+T}
+T{
+dhcp\-client\-id
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options\&.
+T}
+T{
+dhcp\-send\-hostname
+T}:T{
+boolean
+T}:T{
+TRUE
+T}:T{
+If TRUE, a hostname is sent to the DHCP server when acquiring a lease\&. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer\&. If the \*(Aqdhcp\-hostname\*(Aq property is empty and this property is TRUE, the current persistent hostname of the computer is sent\&.
+T}
+T{
+dhcp\-hostname
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If the \*(Aqdhcp\-send\-hostname\*(Aq property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease\&.
+T}
+T{
+never\-default
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, this connection will never be the default IPv4 connection, meaning it will never be assigned the default route by NetworkManager\&.
+T}
+T{
+may\-fail
+T}:T{
+boolean
+T}:T{
+TRUE
+T}:T{
+If TRUE, allow overall network configuration to proceed even if IPv4 configuration times out\&. Note that at least one IP configuration must succeed or overall network configuration will still fail\&. For example, in IPv6\-only networks, setting this property to TRUE allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&13.\ \&ipv6 setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+ipv6
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+method
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+IPv6 configuration method\&. If \*(Aqauto\*(Aq is specified then the appropriate automatic method (PPP, router advertisement, etc) is used for the device and most other properties can be left unset\&. To force the use of DHCP only, specify \*(Aqdhcp\*(Aq; this method is only valid for Ethernet\-based hardware\&. If \*(Aqlink\-local\*(Aq is specified, then an IPv6 link\-local address will be assigned to the interface\&. If \*(Aqmanual\*(Aq is specified, static IP addressing is used and at least one IP address must be given in the \*(Aqaddresses\*(Aq property\&. If \*(Aqignore\*(Aq is specified, IPv6 configuration is not done\&. This property must be set\&. Note: the \*(Aqshared\*(Aq method is not yet supported\&.
+T}
+T{
+dhcp\-hostname
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The specified name will be sent to the DHCP server when acquiring a lease\&.
+T}
+T{
+dns
+T}:T{
+array of byte array
+T}:T{
+\ \&
+T}:T{
+Array of DNS servers, where each member of the array is a byte array containing the IPv6 address of the DNS server (in network byte order)\&. For the \*(Aqauto\*(Aq method, these DNS servers are appended to those (if any) returned by automatic configuration\&. DNS servers cannot be used with the \*(Aqshared\*(Aq or \*(Aqlink\-local\*(Aq methods as there is no usptream network\&. In all other methods, these DNS servers are used as the only DNS servers for this connection\&.
+T}
+T{
+dns\-search
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+List of DNS search domains\&. For the \*(Aqauto\*(Aq method, these search domains are appended to those returned by automatic configuration\&. Search domains cannot be used with the \*(Aqshared\*(Aq or \*(Aqlink\-local\*(Aq methods as there is no upstream network\&. In all other methods, these search domains are used as the only search domains for this connection\&.
+T}
+T{
+addresses
+T}:T{
+array of (byte array, uint32, byte array)
+T}:T{
+\ \&
+T}:T{
+Array of IPv6 address structures\&. Each IPv6 address structure is composed of 3 members, the first being a byte array containing the IPv6 address (network byte order), the second a 32\-bit integer containing the IPv6 address prefix, and the third a byte array containing the IPv6 address (network byte order) of the gateway associated with this address, if any\&. If no gateway is given, the third element should be given as all zeros\&. For the \*(Aqauto\*(Aq method, given IP addresses are appended to those returned by automatic configuration\&. Addresses cannot be used with the \*(Aqshared\*(Aq or \*(Aqlink\-local\*(Aq methods as the interface is automatically assigned an address with these methods\&.
+T}
+T{
+routes
+T}:T{
+array of (byte array, uint32, byte array, uint32)
+T}:T{
+\ \&
+T}:T{
+Array of IPv6 route structures\&. Each IPv6 route structure is composed of 4 members; the first being the destination IPv6 network or address (network byte order) as a byte array, the second the destination network or address IPv6 prefix, the third being the next\-hop IPv6 address (network byte order) if any, and the fourth being the route metric\&. For the \*(Aqauto\*(Aq method, given IP routes are appended to those returned by automatic configuration\&. Routes cannot be used with the \*(Aqshared\*(Aq or \*(Aqlink\-local\*(Aq methods because there is no upstream network\&.
+T}
+T{
+ignore\-auto\-routes
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+When the method is set to \*(Aqauto\*(Aq or \*(Aqdhcp\*(Aq and this property is set to TRUE, automatically configured routes are ignored and only routes specified in the \*(Aqroutes\*(Aq property, if any, are used\&.
+T}
+T{
+ignore\-auto\-dns
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+When the method is set to \*(Aqauto\*(Aq or \*(Aqdhcp\*(Aq and this property is set to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the \*(Aqdns\*(Aq and \*(Aqdns\-search\*(Aq properties, if any, are used\&.
+T}
+T{
+never\-default
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, this connection will never be the default IPv6 connection, meaning it will never be assigned the default IPv6 route by NetworkManager\&.
+T}
+T{
+may\-fail
+T}:T{
+boolean
+T}:T{
+TRUE
+T}:T{
+If TRUE, allow overall network configuration to proceed even if IPv6 configuration times out\&. Note that at least one IP configuration must succeed or overall network configuration will still fail\&. For example, in IPv4\-only networks, setting this property to TRUE allows the overall network configuration to succeed if IPv6 configuration fails but IPv4 configuration completes successfully\&.
+T}
+T{
+ip6\-privacy
+T}:T{
+int32
+T}:T{
+\-1
+T}:T{
+Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941\&. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI\-64\&. This enhances privacy, but could cause problems in some applications, on the other hand\&. The permitted values are: 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses)\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&14.\ \&802-11-olpc-mesh setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+802\-11\-olpc\-mesh
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+ssid
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+SSID of the mesh network to join\&.
+T}
+T{
+channel
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Channel on which the mesh network to join is located\&.
+T}
+T{
+dhcp\-anycast\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+Anycast DHCP MAC address used when requesting an IP address via DHCP\&. The specific anycast address used determines which DHCP server class answers the the request\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&15.\ \&ppp setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+ppp
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+noauth
+T}:T{
+boolean
+T}:T{
+TRUE
+T}:T{
+If TRUE, do not require the other side (usually the PPP server) to authenticate itself to the client\&. If FALSE, require authentication from the remote side\&. In almost all cases, this should be TRUE\&.
+T}
+T{
+refuse\-eap
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, the EAP authentication method will not be used\&.
+T}
+T{
+refuse\-pap
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, the PAP authentication method will not be used\&.
+T}
+T{
+refuse\-chap
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, the CHAP authentication method will not be used\&.
+T}
+T{
+refuse\-mschap
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, the MSCHAP authentication method will not be used\&.
+T}
+T{
+refuse\-mschapv2
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, the MSCHAPv2 authentication method will not be used\&.
+T}
+T{
+nobsdcomp
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, BSD compression will not be requested\&.
+T}
+T{
+nodeflate
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, \*(Aqdeflate\*(Aq compression will not be requested\&.
+T}
+T{
+no\-vj\-comp
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, Van Jacobsen TCP header compression will not be requested\&.
+T}
+T{
+require\-mppe
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, MPPE (Microsoft Point\-to\-Point Encrpytion) will be required for the PPP session\&. If either 64\-bit or 128\-bit MPPE is not available the session will fail\&. Note that MPPE is not used on mobile broadband connections\&.
+T}
+T{
+require\-mppe\-128
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, 128\-bit MPPE (Microsoft Point\-to\-Point Encrpytion) will be required for the PPP session, and the \*(Aqrequire\-mppe\*(Aq property must also be set to TRUE\&. If 128\-bit MPPE is not available the session will fail\&.
+T}
+T{
+mppe\-stateful
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, stateful MPPE is used\&. See pppd documentation for more information on stateful MPPE\&.
+T}
+T{
+crtscts
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, specify that pppd should set the serial port to use hardware flow control with RTS and CTS signals\&. This value should normally be set to FALSE\&.
+T}
+T{
+baud
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, instruct pppd to set the serial port to the specified baudrate\&. This value should normally be left as 0 to automatically choose the speed\&.
+T}
+T{
+mru
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, instruct pppd to request that the peer send packets no larger than the specified size\&. If non\-zero, the MRU should be between 128 and 16384\&.
+T}
+T{
+mtu
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, instruct pppd to send packets no larger than the specified size\&.
+T}
+T{
+lcp\-echo\-failure
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, instruct pppd to presume the connection to the peer has failed if the specified number of LCP echo\-requests go unanswered by the peer\&. The \*(Aqlcp\-echo\-interval\*(Aq property must also be set to a non\-zero value if this property is used\&.
+T}
+T{
+lcp\-echo\-interval
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, instruct pppd to send an LCP echo\-request frame to the peer every n seconds (where n is the specified value)\&. Note that some PPP peers will respond to echo requests and some will not, and it is not possible to autodetect this\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&16.\ \&pppoe setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+pppoe
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+service
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service\&. For most providers, this should be left blank\&. It is only required if there are multiple access concentrators or a specific service is known to be required\&.
+T}
+T{
+username
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Username used to authenticate with the PPPoE service\&.
+T}
+T{
+password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Password used to authenticate with the PPPoE service\&.
+T}
+T{
+password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the PPPoE password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&17.\ \&serial setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+serial
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+baud
+T}:T{
+uint32
+T}:T{
+57600
+T}:T{
+Speed to use for communication over the serial port\&. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed\&.
+T}
+T{
+bits
+T}:T{
+uint32
+T}:T{
+8
+T}:T{
+Byte\-width of the serial communication\&. The 8 in \*(Aq8n1\*(Aq for example\&.
+T}
+T{
+parity
+T}:T{
+gchar
+T}:T{
+110
+T}:T{
+Parity setting of the serial port\&. Either \*(AqE\*(Aq for even parity, \*(Aqo\*(Aq for odd parity, or \*(Aqn\*(Aq for no parity\&.
+T}
+T{
+stopbits
+T}:T{
+uint32
+T}:T{
+1
+T}:T{
+Number of stop bits for communication on the serial port\&. Either 1 or 2\&. The 1 in \*(Aq8n1\*(Aq for example\&.
+T}
+T{
+send\-delay
+T}:T{
+uint64
+T}:T{
+0
+T}:T{
+Time to delay between each byte sent to the modem, in microseconds\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&18.\ \&team setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+team
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+interface\-name
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The name of the virtual in\-kernel team network interface
+T}
+T{
+config
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+JSON configuration for the team network interface\&. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd\&. If not specified, the default configuration is used\&. See man teamd\&.conf for the format details\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&19.\ \&team-port setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+team\-port
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+config
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+JSON configuration for the team port\&. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd\&. If not specified, the dafault configuration is used\&. See man teamd\&.conf for the format details\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&20.\ \&vlan setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+vlan
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+interface\-name
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If given, specifies the kernel name of the VLAN interface\&. If not given, a default name will be constructed from the interface described by the parent interface and the \*(Aqid\*(Aq property, ex \*(Aqeth2\&.1\*(Aq\&. The parent interface may be given by the \*(Aqparent\*(Aq property or by the \*(Aqmac\-address\*(Aq property of a \*(Aqwired\*(Aq setting\&.
+T}
+T{
+parent
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created\&. If this property is not specified, the connection must contain a \*(Aqwired\*(Aq setting with a \*(Aqmac\-address\*(Aq property\&.
+T}
+T{
+id
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+The VLAN indentifier the interface created by this connection should be assigned\&.
+T}
+T{
+flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+One or more flags which control the behavior and features of the VLAN interface\&. Flags include reordering of output packet headers (0x01), use of the GVRP protocol (0x02), and loose binding of the interface to its master device\*(Aqs operating state (0x04)\&.
+T}
+T{
+ingress\-priority\-map
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+For incoming packets, a list of mappings from 802\&.1p priorities to Linux SKB priorities\&. The mapping is given in the format \*(Aqfrom:to\*(Aq where both \*(Aqfrom\*(Aq and \*(Aqto\*(Aq are unsigned integers, ie \*(Aq7:3\*(Aq\&.
+T}
+T{
+egress\-priority\-map
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+For outgoing packets, a list of mappings from Linux SKB priorities to 802\&.1p priorities\&. The mapping is given in the format \*(Aqfrom:to\*(Aq where both \*(Aqfrom\*(Aq and \*(Aqto\*(Aq are unsigned integers, ie \*(Aq7:3\*(Aq\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&21.\ \&vpn setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+vpn
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+service\-type
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+D\-Bus service name of the VPN plugin that this setting uses to connect to its network\&. i\&.e\&. org\&.freedesktop\&.NetworkManager\&.vpnc for the vpnc plugin\&.
+T}
+T{
+user\-name
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If the VPN connection requires a user name for authentication, that name should be provided here\&. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty\&. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection\&.
+T}
+T{
+data
+T}:T{
+dict of (string::string)
+T}:T{
+\ \&
+T}:T{
+Dictionary of key/value pairs of VPN plugin specific data\&. Both keys and values must be strings\&.
+T}
+T{
+secrets
+T}:T{
+dict of (string::string)
+T}:T{
+\ \&
+T}:T{
+Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys\&. Both keys and values must be strings\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&22.\ \&wimax setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+wimax
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+network\-name
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Network Service Provider (NSP) name of the WiMAX network this connection should use\&.
+T}
+T{
+mac\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+If specified, this connection will only apply to the WiMAX device whose MAC address matches\&. This property does not change the MAC address of the device (known as MAC spoofing)\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&23.\ \&802-3-ethernet setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+802\-3\-ethernet
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+port
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Specific port type to use if multiple the device supports multiple attachment methods\&. One of \*(Aqtp\*(Aq (Twisted Pair), \*(Aqaui\*(Aq (Attachment Unit Interface), \*(Aqbnc\*(Aq (Thin Ethernet) or \*(Aqmii\*(Aq (Media Independent Interface\&. If the device supports only one port type, this setting is ignored\&.
+T}
+T{
+speed
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, request that the device use only the specified speed\&. In Mbit/s, ie 100 == 100Mbit/s\&.
+T}
+T{
+duplex
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If specified, request that the device only use the specified duplex mode\&. Either \*(Aqhalf\*(Aq or \*(Aqfull\*(Aq\&.
+T}
+T{
+auto\-negotiate
+T}:T{
+boolean
+T}:T{
+TRUE
+T}:T{
+If TRUE, allow auto\-negotiation of port speed and duplex mode\&. If FALSE, do not allow auto\-negotiation,in which case the \*(Aqspeed\*(Aq and \*(Aqduplex\*(Aq properties should be set\&.
+T}
+T{
+mac\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+If specified, this connection will only apply to the Ethernet device whose permanent MAC address matches\&. This property does not change the MAC address of the device (i\&.e\&. MAC spoofing)\&.
+T}
+T{
+cloned\-mac\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+If specified, request that the device use this MAC address instead of its permanent MAC address\&. This is known as MAC cloning or spoofing\&.
+T}
+T{
+mac\-address\-blacklist
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+If specified, this connection will never apply to the Ethernet device whose permanent MAC address matches an address in the list\&. Each MAC address is in the standard hex\-digits\-and\-colons notation (00:11:22:33:44:55)\&.
+T}
+T{
+mtu
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames\&.
+T}
+T{
+s390\-subchannels
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+Identifies specific subchannels that this network device uses for communcation with z/VM or s390 host\&. Like the \*(Aqmac\-address\*(Aq property for non\-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels\&. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (\&.) character\&.
+T}
+T{
+s390\-nettype
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+s390 network device type; one of \*(Aqqeth\*(Aq, \*(Aqlcs\*(Aq, or \*(Aqctc\*(Aq, representing the different types of virtual network devices available on s390 systems\&.
+T}
+T{
+s390\-options
+T}:T{
+dict of (string::string)
+T}:T{
+\ \&
+T}:T{
+Dictionary of key/value pairs of s390\-specific device options\&. Both keys and values must be strings\&. Allowed keys include \*(Aqportno\*(Aq, \*(Aqlayer2\*(Aq, \*(Aqportname\*(Aq, \*(Aqprotocol\*(Aq, among others\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&24.\ \&802-11-wireless setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+802\-11\-wireless
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+ssid
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+SSID of the Wi\-Fi network\&. Must be specified\&.
+T}
+T{
+mode
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Wi\-Fi network mode; one of \*(Aqinfrastructure\*(Aq, \*(Aqadhoc\*(Aq or \*(Aqap\*(Aq\&. If blank, infrastructure is assumed\&.
+T}
+T{
+band
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+802\&.11 frequency band of the network\&. One of \*(Aqa\*(Aq for 5GHz 802\&.11a or \*(Aqbg\*(Aq for 2\&.4GHz 802\&.11\&. This will lock associations to the Wi\-Fi network to the specific band, i\&.e\&. if \*(Aqa\*(Aq is specified, the device will not associate with the same network in the 2\&.4GHz band even if the network\*(Aqs settings are compatible\&. This setting depends on specific driver capability and may not work with all drivers\&.
+T}
+T{
+channel
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Wireless channel to use for the Wi\-Fi connection\&. The device will only join (or create for Ad\-Hoc networks) a Wi\-Fi network on the specified channel\&. Because channel numbers overlap between bands, this property also requires the \*(Aqband\*(Aq property to be set\&.
+T}
+T{
+bssid
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+If specified, directs the device to only associate with the given access point\&. This capability is highly driver dependent and not supported by all devices\&. Note: this property does not control the BSSID used when creating an Ad\-Hoc network and is unlikely to in the future\&.
+T}
+T{
+rate
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, directs the device to only use the specified bitrate for communication with the access point\&. Units are in Kb/s, ie 5500 = 5\&.5 Mbit/s\&. This property is highly driver dependent and not all devices support setting a static bitrate\&.
+T}
+T{
+tx\-power
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, directs the device to use the specified transmit power\&. Units are dBm\&. This property is highly driver dependent and not all devices support setting a static transmit power\&.
+T}
+T{
+mac\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+If specified, this connection will only apply to the Wi\-Fi device whose permanent MAC address matches\&. This property does not change the MAC address of the device (i\&.e\&. MAC spoofing)\&.
+T}
+T{
+cloned\-mac\-address
+T}:T{
+byte array
+T}:T{
+[]
+T}:T{
+If specified, request that the Wi\-Fi device use this MAC address instead of its permanent MAC address\&. This is known as MAC cloning or spoofing\&.
+T}
+T{
+mac\-address\-blacklist
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+A list of permanent MAC addresses of Wi\-Fi devices to which this connection should never apply\&. Each MAC address should be given in the standard hex\-digits\-and\-colons notation (eg \*(Aq00:11:22:33:44:55\*(Aq)\&.
+T}
+T{
+mtu
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+If non\-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames\&.
+T}
+T{
+seen\-bssids
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55\*(Aq) that have been detected as part of the Wi\-Fi network\&. NetworkManager internally tracks previously seen BSSIDs\&. The property is only meant for reading and reflects the BSSID list of NetworkManager\&. The changes you make to this property will not be preserved\&.
+T}
+T{
+security
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+If the wireless connection has any security restrictions, like 802\&.1x, WEP, or WPA, set this property to \*(Aq802\-11\-wireless\-security\*(Aq and ensure the connection contains a valid 802\-11\-wireless\-security setting\&.
+T}
+T{
+hidden
+T}:T{
+boolean
+T}:T{
+FALSE
+T}:T{
+If TRUE, indicates this network is a non\-broadcasting network that hides its SSID\&. In this case various workarounds may take place, such as probe\-scanning the SSID for more reliable network discovery\&. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&25.\ \&802-11-wireless-security setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Key Name
+T}:T{
+Value Type
+T}:T{
+Default Value
+T}:T{
+Value Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+name
+T}:T{
+string
+T}:T{
+802\-11\-wireless\-security
+T}:T{
+The setting\*(Aqs name; these names are defined by the specification and cannot be changed after the object has been created\&. Each setting class has a name, and all objects of that class share the same name\&.
+T}
+T{
+key\-mgmt
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Key management used for the connection\&. One of \*(Aqnone\*(Aq (WEP), \*(Aqieee8021x\*(Aq (Dynamic WEP), \*(Aqwpa\-none\*(Aq (WPA\-PSK Ad\-Hoc), \*(Aqwpa\-psk\*(Aq (infrastructure WPA\-PSK), or \*(Aqwpa\-eap\*(Aq (WPA\-Enterprise)\&. This property must be set for any Wi\-Fi connection that uses security\&.
+T}
+T{
+wep\-tx\-keyidx
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+When static WEP is used (ie, key\-mgmt = \*(Aqnone\*(Aq) and a non\-default WEP key index is used by the AP, put that WEP key index here\&. Valid values are 0 (default key) through 3\&. Note that some consumer access points (like the Linksys WRT54G) number the keys 1 \- 4\&.
+T}
+T{
+auth\-alg
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+When WEP is used (ie, key\-mgmt = \*(Aqnone\*(Aq or \*(Aqieee8021x\*(Aq) indicate the 802\&.11 authentication algorithm required by the AP here\&. One of \*(Aqopen\*(Aq for Open System, \*(Aqshared\*(Aq for Shared Key, or \*(Aqleap\*(Aq for Cisco LEAP\&. When using Cisco LEAP (ie, key\-mgmt = \*(Aqieee8021x\*(Aq and auth\-alg = \*(Aqleap\*(Aq) the \*(Aqleap\-username\*(Aq and \*(Aqleap\-password\*(Aq properties must be specified\&.
+T}
+T{
+proto
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+List of strings specifying the allowed WPA protocol versions to use\&. Each element may be one \*(Aqwpa\*(Aq (allow WPA) or \*(Aqrsn\*(Aq (allow WPA2/RSN)\&. If not specified, both WPA and RSN connections are allowed\&.
+T}
+T{
+pairwise
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+A list of pairwise encryption algorithms which prevents connections to Wi\-Fi networks that do not utilize one of the algorithms in the list\&. For maximum compatibility leave this property empty\&. Each list element may be one of \*(Aqtkip\*(Aq or \*(Aqccmp\*(Aq\&.
+T}
+T{
+group
+T}:T{
+array of string
+T}:T{
+\ \&
+T}:T{
+A list of group/broadcast encryption algorithms which prevents connections to Wi\-Fi networks that do not utilize one of the algorithms in the list\&. For maximum compatibility leave this property empty\&. Each list element may be one of \*(Aqwep40\*(Aq, \*(Aqwep104\*(Aq, \*(Aqtkip\*(Aq, or \*(Aqccmp\*(Aq\&.
+T}
+T{
+leap\-username
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The login username for legacy LEAP connections (ie, key\-mgmt = \*(Aqieee8021x\*(Aq and auth\-alg = \*(Aqleap\*(Aq)\&.
+T}
+T{
+wep\-key0
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Index 0 WEP key\&. This is the WEP key used in most networks\&. See the \*(Aqwep\-key\-type\*(Aq property for a description of how this key is interpreted\&.
+T}
+T{
+wep\-key1
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Index 1 WEP key\&. This WEP index is not used by most networks\&. See the \*(Aqwep\-key\-type\*(Aq property for a description of how this key is interpreted\&.
+T}
+T{
+wep\-key2
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Index 2 WEP key\&. This WEP index is not used by most networks\&. See the \*(Aqwep\-key\-type\*(Aq property for a description of how this key is interpreted\&.
+T}
+T{
+wep\-key3
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Index 3 WEP key\&. This WEP index is not used by most networks\&. See the \*(Aqwep\-key\-type\*(Aq property for a description of how this key is interpreted\&.
+T}
+T{
+wep\-key\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the WEP keys\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+wep\-key\-type
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Controls the interpretation of WEP keys\&. Allowed values are 1 (interpret WEP keys as hexadecimal or ASCII keys) or 2 (interpret WEP keys as WEP Passphrases)\&. If set to 1 and the keys are hexadecimal, they must be either 10 or 26 characters in length\&. If set to 1 and the keys are ASCII keys, they must be either 5 or 13 characters in length\&. If set to 2, the passphrase is hashed using the de\-facto MD5 method to derive the actual WEP key\&.
+T}
+T{
+psk
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+Pre\-Shared\-Key for WPA networks\&. If the key is 64\-characters long, it must contain only hexadecimal characters and is interpreted as a hexadecimal WPA key\&. Otherwise, the key must be between 8 and 63 ASCII characters (as specified in the 802\&.11i standard) and is interpreted as a WPA passphrase, and is hashed to derive the actual WPA\-PSK used when connecting to the Wi\-Fi network\&.
+T}
+T{
+psk\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the WPA PSK key\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+T{
+leap\-password
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The login password for legacy LEAP connections (ie, key\-mgmt = \*(Aqieee8021x\*(Aq and auth\-alg = \*(Aqleap\*(Aq)\&.
+T}
+T{
+leap\-password\-flags
+T}:T{
+uint32
+T}:T{
+0
+T}:T{
+Flags indicating how to handle the LEAP password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+T}
+.TE
+.sp 1
+.SS "Secret flag types:"
+.PP
+Each secret property in a setting has an associated
+\fIflags\fR
+property that describes how to handle that secret\&. The
+\fIflags\fR
+property is a bitfield that contains zero or more of the following values logically OR\-ed together\&.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+0x0 (none) \- the system is responsible for providing and storing this secret\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+0x1 (agent\-owned) \- a user\-session secret agent is responsible for providing and storing this secret; when it is required, agents will be asked to provide it\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+0x2 (not\-saved) \- this secret should not be saved but should be requested from the user each time it is required\&. This flag should be used for One\-Time\-Pad secrets, PIN codes from hardware tokens, or if the user simply does not want to save the secret\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+0x4 (not\-required) \- in some situations it cannot be automatically determined that a secret is required or not\&. This flag hints that the secret is not required and should not be requested from the user\&.
+.RE
+.SH "AUTHOR"
+.PP
+NetworkManager developers
+.SH "FILES"
+.PP
+/etc/NetworkManager/system\-connections
+.PP
+or distro plugin\-specific location
+.SH "SEE ALSO"
+.PP
+https://live\&.gnome\&.org/NetworkManagerConfiguration
+.PP
+NetworkManager(8), nmcli(1), nmcli\-examples(5), NetworkManager\&.conf(5)
diff --git a/man/nm-system-settings.conf.5.in b/man/nm-system-settings.conf.5.in
index e48d0c8e6..172db1125 100644
--- a/man/nm-system-settings.conf.5.in
+++ b/man/nm-system-settings.conf.5.in
@@ -22,5 +22,4 @@ file <SYSCONFDIR>\fP/NetworkManager/NetworkManager.conf\fP instead, falling back
to nm\-system\-settings.conf if NetworkManager.conf does not exist.
.SH "SEE ALSO"
.BR NetworkManager (8),
-.BR NetworkManager.conf (5),
-.BR nm\-tool (1).
+.BR NetworkManager.conf (5).
diff --git a/man/nm-tool.1.in b/man/nm-tool.1.in
deleted file mode 100644
index 0db23a20f..000000000
--- a/man/nm-tool.1.in
+++ /dev/null
@@ -1,19 +0,0 @@
-.\" nm-tool(1) manual page
-.\"
-.\" Copyright (C) 2005 - 2009 Red Hat, Inc.
-.\" Copyright (C) 2005 - 2009 Novell, Inc.
-.\" Copyright (C) 2005 Robert Love
-.\"
-.TH NM-TOOL "1"
-.SH NAME
-nm-tool \- utility to report NetworkManager state and devices
-.SH SYNOPSIS
-.B nm-tool
-.SH DESCRIPTION
-The \fInm-tool\fP utility provides information about NetworkManager, device,
-and wireless networks.
-.SH SEE ALSO
-.BR NetworkManager (8),
-.BR nm\-applet (1),
-.BR nm\-connection\-editor (1).
-
diff --git a/man/nmcli-examples.5 b/man/nmcli-examples.5
new file mode 100644
index 000000000..7145d682c
--- /dev/null
+++ b/man/nmcli-examples.5
@@ -0,0 +1,676 @@
+'\" t
+.\" Title: nmcli-examples
+.\" Author:
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 16 June 2014
+.\" Manual: Examples
+.\" Source: NetworkManager 0.9.10
+.\" Language: English
+.\"
+.TH "NMCLI\-EXAMPLES" "5" "" "NetworkManager 0\&.9\&.10" "Examples"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nmcli-examples \- usage examples of nmcli
+.SH "SYNOPSIS"
+.HP \w'\fBnmcli\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBnmcli \fR\fB[OPTIONS...]\fR
+.SH "DESCRIPTION"
+.PP
+\fInmcli\fR
+is a command\-line client for NetworkManager\&. It allows controlling NetworkManager and reporting its status\&. For more information please refer to
+\fBnmcli\fR(1)
+manual page\&.
+.PP
+The purpose of this manual page is to provide you with various examples and usage scenarios of
+\fInmcli\fR\&.
+.PP
+Note: this page has "work\-in\-progress" status\&.
+.SH "EXAMPLES"
+.PP
+\fBExample\ \&1.\ \&Listing available Wi-Fi APs\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli device wifi list
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+* SSID MODE CHAN RATE SIGNAL BARS SECURITY
+ netdatacomm_local Infra 6 54 Mbit/s 37 â–‚â–„__ WEP
+* F1 Infra 11 54 Mbit/s 98 ▂▄▆█ WPA1
+ LoremCorp Infra 1 54 Mbit/s 62 â–‚â–„â–†_ WPA2 802\&.1X
+ Internet Infra 6 54 Mbit/s 29 â–‚___ WPA1
+ HPB110a\&.F2672A Ad\-Hoc 6 54 Mbit/s 22 â–‚___ \-\-
+ Jozinet Infra 1 54 Mbit/s 19 â–‚___ WEP
+ VOIP Infra 1 54 Mbit/s 20 â–‚___ WEP
+ MARTINA Infra 4 54 Mbit/s 32 â–‚â–„__ WPA2
+ N24PU1 Infra 7 11 Mbit/s 22 â–‚___ \-\-
+ alfa Infra 1 54 Mbit/s 67 â–‚â–„â–†_ WPA2
+ bertnet Infra 5 54 Mbit/s 20 â–‚___ WPA1 WPA2
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This command shows how to list available Wi\-Fi networks (APs)\&. You can also use
+\fI\-\-fields\fR
+option for displaying different columns\&.
+\fBnmcli \-f all dev wifi list\fR
+will show all of them\&.
+.PP
+\fBExample\ \&2.\ \&Showing general information and properties for a Wi-Fi interface\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli \-p \-f general,wifi\-properties device show wlan0
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+===============================================================================
+ Device details (wlan0)
+===============================================================================
+GENERAL\&.DEVICE: wlan0
+GENERAL\&.TYPE: wifi
+GENERAL\&.VENDOR: Intel Corporation
+GENERAL\&.PRODUCT: PRO/Wireless 5100 AGN [Shiloh] Network Connection
+GENERAL\&.DRIVER: iwlwifi
+GENERAL\&.DRIVER\-VERSION: 3\&.8\&.13\-100\&.fc17\&.x86_64
+GENERAL\&.FIRMWARE\-VERSION: 8\&.83\&.5\&.1 build 33692
+GENERAL\&.HWADDR: 00:1E:65:37:A1:D3
+GENERAL\&.MTU: 1500
+GENERAL\&.STATE: 100 (connected)
+GENERAL\&.REASON: 0 (No reason given)
+GENERAL\&.UDI: /sys/devices/pci0000:00/0000:00:1c\&.1/0000:03:00\&.0/net/wlan0
+GENERAL\&.IP\-IFACE: wlan0
+GENERAL\&.NM\-MANAGED: yes
+GENERAL\&.AUTOCONNECT: yes
+GENERAL\&.FIRMWARE\-MISSING: no
+GENERAL\&.CONNECTION: My Alfa WiFi
+GENERAL\&.CON\-UUID: 85194f4c\-d496\-4eec\-bae0\-d880b4cbcf26
+GENERAL\&.CON\-PATH: /org/freedesktop/NetworkManager/ActiveConnection/10
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+WIFI\-PROPERTIES\&.WEP: yes
+WIFI\-PROPERTIES\&.WPA: yes
+WIFI\-PROPERTIES\&.WPA2: yes
+WIFI\-PROPERTIES\&.TKIP: yes
+WIFI\-PROPERTIES\&.CCMP: yes
+WIFI\-PROPERTIES\&.AP: no
+WIFI\-PROPERTIES\&.ADHOC: yes
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This command shows information about a Wi\-Fi device\&.
+.PP
+\fBExample\ \&3.\ \&Listing NetworkManager polkit permissions\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli general permissions
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+PERMISSION VALUE
+org\&.freedesktop\&.NetworkManager\&.enable\-disable\-network yes
+org\&.freedesktop\&.NetworkManager\&.enable\-disable\-wifi yes
+org\&.freedesktop\&.NetworkManager\&.enable\-disable\-wwan yes
+org\&.freedesktop\&.NetworkManager\&.enable\-disable\-wimax yes
+org\&.freedesktop\&.NetworkManager\&.sleep\-wake no
+org\&.freedesktop\&.NetworkManager\&.network\-control yes
+org\&.freedesktop\&.NetworkManager\&.wifi\&.share\&.protected yes
+org\&.freedesktop\&.NetworkManager\&.wifi\&.share\&.open yes
+org\&.freedesktop\&.NetworkManager\&.settings\&.modify\&.system yes
+org\&.freedesktop\&.NetworkManager\&.settings\&.modify\&.own yes
+org\&.freedesktop\&.NetworkManager\&.settings\&.modify\&.hostname auth
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This command shows configured polkit permissions for various NetworkManager operations\&. These permissions or actions (using polkit language) are configured by a system administrator and are not meant to be changed by users\&. The usual place for the polkit configuration is /usr/share/polkit\-1/actions/org\&.freedesktop\&.NetworkManager\&.policy\&.
+\fIpkaction\fR
+command can display description for polkit actions\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+ pkaction \-\-action\-id org\&.freedesktop\&.NetworkManager\&.network\-control \-\-verbose
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+More information about polkit can be found at http://www\&.freedesktop\&.org/wiki/Software/polkit\&.
+.PP
+\fBExample\ \&4.\ \&Listing NetworkManager log level and domains\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli general logging
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+LEVEL DOMAINS
+INFO PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,WIMAX,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,DBUS_PROPS,TEAM,CONCHECK,DCB,DISPATCH
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This command shows current NetworkManager logging status\&.
+.PP
+\fBExample\ \&5.\ \&Changing NetworkManager logging\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli g log level DEBUG domains CORE,ETHER,IP
+$ nmcli g log level INFO domains DEFAULT
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The first command makes NetworkManager log in DEBUG level, and only for CORE, ETHER and IP domains\&. The second command restores the default logging state\&. Please refer to the
+\fBNetworkManager.conf\fR(5)
+manual page for available logging levels and domains\&.
+.PP
+\fBExample\ \&6.\ \&Adding a bonding master and two slave connection profiles\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli con add type bond ifname mybond0 mode active\-backup
+$ nmcli con add type bond\-slave ifname eth1 master mybond0
+$ nmcli con add type bond\-slave ifname eth2 master mybond0
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This example demonstrates adding a bond master connection and two slaves\&. The first command adds a master bond connection, naming the bonding interface
+\fImybond0\fR
+and using
+\fIactive\-backup\fR
+mode\&. The next two commands add slaves connections, both enslaved to
+\fImybond0\fR\&. The first slave will be bound to
+\fIeth1\fR
+interface, the second to
+\fIeth2\fR\&.
+.PP
+\fBExample\ \&7.\ \&Adding a team master and two slave connection profiles\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli con add type team con\-name Team1 ifname Team1 config team1\-master\-json\&.conf
+$ nmcli con add type team\-slave con\-name Team1\-slave1 ifname em1 master Team1
+$ nmcli con add type team\-slave con\-name Team1\-slave2 ifname em2 master Team1
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This example demonstrates adding a team master connection profile and two slaves\&. It is very similar to the bonding example\&. The first command adds a master team profile, naming the team interface and the profile
+\fITeam1\fR\&. The team configuration for the master is read from
+\fIteam1\-master\-json\&.conf\fR
+file\&. Later, you can change the configuration with
+\fImodify\fR
+command (\fBnmcli con modify Team1 team\&.config team1\-master\-another\-json\&.conf\fR)\&. The last two commands add slaves profiles, both enslaved to
+\fITeam1\fR\&. The first slave will be bound to
+\fIem1\fR
+interface, the second to
+\fIem2\fR\&. The slaves don\*(Aqt specify
+\fIconfig\fR
+and thus
+\fIteamd\fR
+will use its default configuration\&. You will activate the whole setup by activating both slaves:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli con up Team1\-slave1
+$ nmcli con up Team1\-slave2
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+By default, the created profiles are marked for auto\-activation\&. But if another connection has been activated on the device, the new profile won\*(Aqt activate automatically and you need to activate it manually\&.
+.PP
+\fBExample\ \&8.\ \&Adding a bridge and two slave profiles\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB
+$ nmcli con add type bridge con\-name TowerBridge ifname TowerBridge
+$ nmcli con add type bridge\-slave con\-name br\-slave\-1 ifname ens3 master TowerBridge
+$ nmcli con add type bridge\-slave con\-name br\-slave\-2 ifname ens4 master TowerBridge
+$ nmcli con modify TowerBridge bridge\&.stp no
+ \fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This example demonstrates adding a bridge master connection and two slaves\&. The first command adds a master bridge connection, naming the bridge interface and the profile as
+\fITowerBridge\fR\&. The next two commands add slaves profiles, both will be enslaved to
+\fITowerBridge\fR\&. The first slave will be tied to
+\fIens3\fR
+interface, the second to
+\fIens4\fR\&. The last command will disable 802\&.1D STP for the TowerBridge profile\&.
+.PP
+\fBExample\ \&9.\ \&Adding an ethernet connection profile with manual IP configuration\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ \fB
+$ nmcli con add con\-name my\-con\-em1 ifname em1 type ethernet ip4 192\&.168\&.100\&.100/24 gw4 192\&.168\&.100\&.1 ip4 1\&.2\&.3\&.4 ip6 abbe::cafe
+$ nmcli con mod my\-con\-em1 ipv4\&.dns "8\&.8\&.8\&.8 8\&.8\&.4\&.4"
+$ nmcli con mod my\-con\-em1 ipv6\&.dns "2001:4860:4860::8888 2001:4860:4860::8844"
+$ nmcli \-p con show my\-con\-em1
+ \fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The first command adds an Ethernet connection profile named
+\fImy\-con\-em1\fR
+that is bound to interface name
+\fIem1\fR\&. The profile is configured with static IP addresses\&. Three addresses are added, two IPv4 addresses and one IPv6\&. The first IP 192\&.168\&.100\&.100 has a prefix of 24 (netmask equivalent of 255\&.255\&.255\&.0)\&. Gateway entry for the first IP address will become the default route if this profile is activated on em1 interface (and there is no connection with higher priority)\&. The second two addresses don\*(Aqt specify a prefix, so a default prefix will be used, i\&.e\&. 32 for IPv4 and 128 for IPv6\&. The second and third commands modify DNS parameters of the new connection profile\&. The last
+\fIcon show\fR
+command displays the profile so that all parameters can be reviewed\&.
+.PP
+\fBExample\ \&10.\ \&Escaping colon characters in tabular mode\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ \fB
+$ nmcli \-t \-f general \-e yes \-m tab dev show eth0
+ \fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+GENERAL:eth0:ethernet:Intel Corporation:82567LM Gigabit Network Connection:e1000e:2\&.1\&.4\-k:1\&.8\-3:00\e:22\e:68\e:15\e:29\e:21:1500:100 (connected):0 (No reason given):/sys/devices/pci0000\e:00/0000\e:00\e:19\&.0/net/eth0:eth0:yes:yes:no:ethernet\-13:89cbcbc6\-dc85\-456c\-9c8b\-bd828fee3917:/org/freedesktop/NetworkManager/ActiveConnection/9
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This example shows escaping colon characters in tabular mode\&. It may be useful for script processing, because \*(Aq:\*(Aq is used as a field separator\&.
+.PP
+\fBExample\ \&11.\ \&nmcli usage in a NetworkManager dispatcher script to make Ethernet and Wi-Fi mutually exclusive\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#!/bin/bash
+export LC_ALL=C
+
+enable_disable_wifi ()
+{
+ result=$(nmcli dev | grep "ethernet" | grep \-w "connected")
+ if [ \-n "$result" ]; then
+ nmcli radio wifi off
+ else
+ nmcli radio wifi on
+ fi
+}
+
+if [ "$2" = "up" ]; then
+ enable_disable_wifi
+fi
+
+if [ "$2" = "down" ]; then
+ enable_disable_wifi
+fi
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This dispatcher script makes Wi\-Fi mutually exclusive with wired networking\&. When a wired interface is connected, Wi\-Fi will be set to airplane mode (rfkilled)\&. When the wired interface is disconnected, Wi\-Fi will be turned back on\&. Name this script e\&.g\&. 70\-wifi\-wired\-exclusive\&.sh and put it into /etc/NetworkManager/dispatcher\&.d/ directory\&. See
+\fBNetworkManager\fR(8)
+manual page for more information about NetworkManager dispatcher scripts\&.
+.PP
+\fBExample sessions of interactive connection editor\fR
+.PP
+\fBExample\ \&12.\ \&Adding an ethernet connection profile in interactive editor (a)\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ \fB
+$ nmcli connection edit type ethernet
+ \fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+
+===| nmcli interactive connection editor |===
+
+Adding a new \*(Aq802\-3\-ethernet\*(Aq connection
+
+Type \*(Aqhelp\*(Aq or \*(Aq?\*(Aq for available commands\&.
+Type \*(Aqdescribe [<setting>\&.<prop>]\*(Aq for detailed property description\&.
+
+You may edit the following settings: connection, 802\-3\-ethernet (ethernet), 802\-1x, ipv4, ipv6, dcb
+nmcli> print
+===============================================================================
+ Connection details
+===============================================================================
+connection\&.id: ethernet\-4
+connection\&.uuid: de89cdeb\-a3e1\-4d53\-8fa0\-c22546c775f4
+connection\&.interface\-name: \-\-
+connection\&.type: 802\-3\-ethernet
+connection\&.autoconnect: yes
+connection\&.timestamp: 0
+connection\&.read\-only: no
+connection\&.permissions:
+connection\&.zone: \-\-
+connection\&.master: \-\-
+connection\&.slave\-type: \-\-
+connection\&.secondaries:
+connection\&.gateway\-ping\-timeout: 0
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+802\-3\-ethernet\&.port: \-\-
+802\-3\-ethernet\&.speed: 0
+802\-3\-ethernet\&.duplex: \-\-
+802\-3\-ethernet\&.auto\-negotiate: yes
+802\-3\-ethernet\&.mac\-address: \-\-
+802\-3\-ethernet\&.cloned\-mac\-address: \-\-
+802\-3\-ethernet\&.mac\-address\-blacklist:
+802\-3\-ethernet\&.mtu: auto
+802\-3\-ethernet\&.s390\-subchannels:
+802\-3\-ethernet\&.s390\-nettype: \-\-
+802\-3\-ethernet\&.s390\-options:
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+ipv4\&.method: auto
+ipv4\&.dns:
+ipv4\&.dns\-search:
+ipv4\&.addresses:
+ipv4\&.routes:
+ipv4\&.ignore\-auto\-routes: no
+ipv4\&.ignore\-auto\-dns: no
+ipv4\&.dhcp\-client\-id: \-\-
+ipv4\&.dhcp\-send\-hostname: yes
+ipv4\&.dhcp\-hostname: \-\-
+ipv4\&.never\-default: no
+ipv4\&.may\-fail: yes
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+ipv6\&.method: auto
+ipv6\&.dns:
+ipv6\&.dns\-search:
+ipv6\&.addresses:
+ipv6\&.routes:
+ipv6\&.ignore\-auto\-routes: no
+ipv6\&.ignore\-auto\-dns: no
+ipv6\&.never\-default: no
+ipv6\&.may\-fail: yes
+ipv6\&.ip6\-privacy: \-1 (unknown)
+ipv6\&.dhcp\-hostname: \-\-
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+nmcli> goto ethernet
+You may edit the following properties: port, speed, duplex, auto\-negotiate, mac\-address, cloned\-mac\-address, mac\-address\-blacklist, mtu, s390\-subchannels, s390\-nettype, s390\-options
+nmcli 802\-3\-ethernet> set mtu 1492
+nmcli 802\-3\-ethernet> b
+nmcli> goto ipv4\&.addresses
+nmcli ipv4\&.addresses> desc
+
+=== [addresses] ===
+[NM property description]
+Array of IPv4 address structures\&. Each IPv4 address structure is composed of 3 32\-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 \- 32), and last the IPv4 gateway (network byte order)\&. The gateway may be left as 0 if no gateway exists for that subnet\&. For the \*(Aqauto\*(Aq method, given IP addresses are appended to those returned by automatic configuration\&. Addresses cannot be used with the \*(Aqshared\*(Aq, \*(Aqlink\-local\*(Aq, or \*(Aqdisabled\*(Aq methods as addressing is either automatic or disabled with these methods\&.
+
+[nmcli specific description]
+Enter a list of IPv4 addresses formatted as:
+ ip[/prefix] [gateway], ip[/prefix] [gateway],\&.\&.\&.
+Missing prefix is regarded as prefix of 32\&.
+
+Example: 192\&.168\&.1\&.5/24 192\&.168\&.1\&.1, 10\&.0\&.0\&.11/24
+
+nmcli ipv4\&.addresses> set 192\&.168\&.1\&.100/24 192\&.168\&.1\&.1
+Do you also want to set \*(Aqipv4\&.method\*(Aq to \*(Aqmanual\*(Aq? [yes]: yes
+nmcli ipv4\&.addresses>
+nmcli ipv4\&.addresses> print
+addresses: { ip = 192\&.168\&.1\&.100/24, gw = 192\&.168\&.1\&.1 }
+nmcli ipv4\&.addresses> back
+nmcli ipv4> b
+nmcli> verify
+Verify connection: OK
+nmcli> print
+===============================================================================
+ Connection details
+===============================================================================
+connection\&.id: ethernet\-4
+connection\&.uuid: de89cdeb\-a3e1\-4d53\-8fa0\-c22546c775f4
+connection\&.interface\-name: \-\-
+connection\&.type: 802\-3\-ethernet
+connection\&.autoconnect: yes
+connection\&.timestamp: 0
+connection\&.read\-only: no
+connection\&.permissions:
+connection\&.zone: \-\-
+connection\&.master: \-\-
+connection\&.slave\-type: \-\-
+connection\&.secondaries:
+connection\&.gateway\-ping\-timeout: 0
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+802\-3\-ethernet\&.port: \-\-
+802\-3\-ethernet\&.speed: 0
+802\-3\-ethernet\&.duplex: \-\-
+802\-3\-ethernet\&.auto\-negotiate: yes
+802\-3\-ethernet\&.mac\-address: \-\-
+802\-3\-ethernet\&.cloned\-mac\-address: \-\-
+802\-3\-ethernet\&.mac\-address\-blacklist:
+802\-3\-ethernet\&.mtu: 1492
+802\-3\-ethernet\&.s390\-subchannels:
+802\-3\-ethernet\&.s390\-nettype: \-\-
+802\-3\-ethernet\&.s390\-options:
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+ipv4\&.method: manual
+ipv4\&.dns:
+ipv4\&.dns\-search:
+ipv4\&.addresses: { ip = 192\&.168\&.1\&.100/24, gw = 192\&.168\&.1\&.1 }
+ipv4\&.routes:
+ipv4\&.ignore\-auto\-routes: no
+ipv4\&.ignore\-auto\-dns: no
+ipv4\&.dhcp\-client\-id: \-\-
+ipv4\&.dhcp\-send\-hostname: yes
+ipv4\&.dhcp\-hostname: \-\-
+ipv4\&.never\-default: no
+ipv4\&.may\-fail: yes
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+ipv6\&.method: auto
+ipv6\&.dns:
+ipv6\&.dns\-search:
+ipv6\&.addresses:
+ipv6\&.routes:
+ipv6\&.ignore\-auto\-routes: no
+ipv6\&.ignore\-auto\-dns: no
+ipv6\&.never\-default: no
+ipv6\&.may\-fail: yes
+ipv6\&.ip6\-privacy: \-1 (unknown)
+ipv6\&.dhcp\-hostname: \-\-
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+nmcli> set ipv4\&.dns 8\&.8\&.8\&.8 8\&.8\&.4\&.4
+nmcli> print
+===============================================================================
+ Connection details
+===============================================================================
+connection\&.id: ethernet\-4
+connection\&.uuid: de89cdeb\-a3e1\-4d53\-8fa0\-c22546c775f4
+connection\&.interface\-name: \-\-
+connection\&.type: 802\-3\-ethernet
+connection\&.autoconnect: yes
+connection\&.timestamp: 0
+connection\&.read\-only: no
+connection\&.permissions:
+connection\&.zone: \-\-
+connection\&.master: \-\-
+connection\&.slave\-type: \-\-
+connection\&.secondaries:
+connection\&.gateway\-ping\-timeout: 0
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+802\-3\-ethernet\&.port: \-\-
+802\-3\-ethernet\&.speed: 0
+802\-3\-ethernet\&.duplex: \-\-
+802\-3\-ethernet\&.auto\-negotiate: yes
+802\-3\-ethernet\&.mac\-address: \-\-
+802\-3\-ethernet\&.cloned\-mac\-address: \-\-
+802\-3\-ethernet\&.mac\-address\-blacklist:
+802\-3\-ethernet\&.mtu: 1492
+802\-3\-ethernet\&.s390\-subchannels:
+802\-3\-ethernet\&.s390\-nettype: \-\-
+802\-3\-ethernet\&.s390\-options:
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+ipv4\&.method: manual
+ipv4\&.dns: 8\&.8\&.8\&.8, 8\&.8\&.4\&.4
+ipv4\&.dns\-search:
+ipv4\&.addresses: { ip = 192\&.168\&.1\&.100/24, gw = 192\&.168\&.1\&.1 }
+ipv4\&.routes:
+ipv4\&.ignore\-auto\-routes: no
+ipv4\&.ignore\-auto\-dns: no
+ipv4\&.dhcp\-client\-id: \-\-
+ipv4\&.dhcp\-send\-hostname: yes
+ipv4\&.dhcp\-hostname: \-\-
+ipv4\&.never\-default: no
+ipv4\&.may\-fail: yes
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+ipv6\&.method: auto
+ipv6\&.dns:
+ipv6\&.dns\-search:
+ipv6\&.addresses:
+ipv6\&.routes:
+ipv6\&.ignore\-auto\-routes: no
+ipv6\&.ignore\-auto\-dns: no
+ipv6\&.never\-default: no
+ipv6\&.may\-fail: yes
+ipv6\&.ip6\-privacy: \-1 (unknown)
+ipv6\&.dhcp\-hostname: \-\-
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+nmcli> verify
+Verify connection: OK
+nmcli> save
+Connection \*(Aqethernet\-4\*(Aq (de89cdeb\-a3e1\-4d53\-8fa0\-c22546c775f4) successfully saved\&.
+nmcli> quit
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Example session in the nmcli interactive connection editor\&. The scenario creates an Ethernet connection (configuration) with static addressing (IPs and DNS)\&.
+.SH "SEE ALSO"
+.PP
+\fBnmcli\fR(1),
+\fBNetworkManager\fR(8),
+\fBNetworkManager.conf\fR(5),
+\fBnm-settings\fR(5),
+\fBnm-online\fR(1),
+\fBnm-applet\fR(1),
+\fBnm-connection-editor\fR(1)
diff --git a/man/nmcli.1.in b/man/nmcli.1.in
index ee48aba6d..08f07b4ab 100644
--- a/man/nmcli.1.in
+++ b/man/nmcli.1.in
@@ -19,9 +19,9 @@
.\" with this manual; if not, write to the Free Software Foundation, Inc.,
.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
.\"
-.\" Copyright (C) 2010 - 2013 Red Hat, Inc.
+.\" Copyright (C) 2010 - 2014 Red Hat, Inc.
.\"
-.TH NMCLI "1" "17 January 2013"
+.TH NMCLI "1" "28 February 2014"
.SH NAME
nmcli \- command\(hyline tool for controlling NetworkManager
@@ -33,7 +33,8 @@ nmcli \- command\(hyline tool for controlling NetworkManager
.sp
.IR OBJECT " := { "
-.BR nm " | " con " | " dev " } "
+.BR general " | " networking " | " radio " | " connection " | " device
+.RI " }"
.sp
.IR OPTIONS " := { "
@@ -48,6 +49,12 @@ nmcli \- command\(hyline tool for controlling NetworkManager
.br
\fB\-e\fR[\fIscape\fR] yes | no
.br
+\fB\-n\fR[\fIocheck\fR]
+.br
+\fB\-a\fR[\fIsk\fR]
+.br
+\fB\-w\fR[\fIait\fR] <seconds>
+.br
\fB\-v\fR[\fIersion\fR]
.br
\fB\-h\fR[\fIelp\fR]
@@ -56,27 +63,23 @@ nmcli \- command\(hyline tool for controlling NetworkManager
.SH DESCRIPTION
.B nmcli
-is a command\(hyline tool for controlling NetworkManager and reporting on its status.
-It is not meant as a full replacement for \fInm\(hyapplet\fP or other similar clients
-but as a complementary utility to those programs.
-The main usage for \fInmcli\fP is on servers, headless machines or for power users
-who prefer the command line.
+is a command\(hyline tool for controlling NetworkManager and reporting network
+status. It can be utilized as a replacement for \fInm\(hyapplet\fP or other
+graphical clients. \fInmcli\fP is used to create, display, edit, delete, activate,
+and deactivate network connections, as well as control and display network device
+status.
.P
-Typical applications include:
-.IP \(em 4
-Initscripts: ifup/ifdown can utilize NetworkManager via \fInmcli\fP instead of
-having to manage connections itself and possibly interfere with NetworkManager.
+Typical uses include:
.IP \(em 4
-Servers, headless machines: No GUI is available; then \fInmcli\fP can be used
-to activate/deactivate connections. However, if a connection requires a secret
-in order to activate and if that secret is not stored at the system level,
-\fInmcli\fP will not be able to activate it; it is currently unable to supply
-the secrets to NetworkManager.
+Scripts: utilize NetworkManager via \fInmcli\fP instead of managing network
+connections manually. \fInmcli\fP supports a terse output format which is better
+suited for script processing. Note that NetworkManager can also execute scripts,
+called "dispatcher scripts", in response to network events. See
+\fBNetworkManager\fP for details about these dispatcher scripts.
.IP \(em 4
-User sessions: \fInmcli\fP can be used to activate/deactivate connections from
-the command line, but a client with a secret agent (like \fInm\(hyapplet\fP) is needed
-for supplying secrets not stored at the system level. Keyring dialogs and
-password prompts may appear if this happens.
+Servers, headless machines, and terminals: \fInmcli\fP can be used to control
+NetworkManager without a GUI, including creating, editing, starting and stopping
+network connections and viewing network status.
.SS \fIOPTIONS\fP
.TP
.B \-t, \-\-terse
@@ -91,11 +94,11 @@ for humans, i.e. values are aligned, headers are printed, etc.
Switch between \fItabular\fP and \fImultiline\fP output.
If omitted, default is \fItabular\fP for most commands. For the commands
producing more structured information, that cannot be displayed on a single
-line, default is \fImultiline\fP. Currenly, they are:
+line, default is \fImultiline\fP. Currently, they are:
.br
.nf
- 'nmcli con list id|uuid <name>'
- 'nmcli dev list'
+ 'nmcli connection show <ID>'
+ 'nmcli device show'
.fi
\fItabular\fP \(en Output is a table where each line describes a single entry.
Columns define particular properties of the entry.
@@ -120,6 +123,22 @@ Whether to escape ':' and '\\' characters in terse tabular mode. The escape
character is '\\'.
If omitted, default is \fIyes\fP.
.TP
+.B \-n, \-\-nocheck
+This option can be used to force \fInmcli\fP to skip checking \fInmcli\fP and
+\fINetworkManager\fP version compatibility. Use it with care, because using
+incompatible versions may produce incorrect results.
+.TP
+.B \-a, \-\-ask
+When using this option \fInmcli\fP will stop and ask for any missing required
+arguments, so do not use this option for non-interactive purposes like scripts.
+.TP
+.B \-w, \-\-wait <seconds>
+This option sets a timeout period for which \fInmcli\fP will wait for \fINetworkManager\fP
+to finsh operations. It is especially useful for commands that may take a longer time to
+complete, e.g. connection activation.
+Specifying a value of \fB0\fP instructs \fInmcli\fP not to wait but to exit immediately
+with a status of success. The default value depends on the executed command.
+.TP
.B \-v, \-\-version
Show \fInmcli\fP version.
.TP
@@ -127,261 +146,591 @@ Show \fInmcli\fP version.
Print help information.
.SS \fIOBJECT\fP
.TP
-.B nm
-NetworkManager
+.B general \- general \fINetworkManager\fP status and operations
.br
-Use this object to inquire and change state of NetworkManager.
+Use this object to show NetworkManager status and permissions. You can also get
+and change system hostname, as well as NetworkManager logging level and domains.
.TP
-.SS \fICOMMAND\fP := { status | permissions | enable | sleep | wifi | wwan | wimax }
+.SS \fICOMMAND\fP := { status | hostname | permissions | logging }
.sp
.RS
.TP
.B status
.br
-Show overall status of NetworkManager. This is the default action, when no
-command is provided to \fInm\fP object.
+Show overall status of NetworkManager. This is the default action, when no additional
+command is provided for \fIgeneral\fP object.
+.TP
+.B hostname [<hostname>]
.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
+Get and change system hostname. With no arguments, this prints currently configured hostname.
+When you pass a hostname, it will be handed over to NetworkManager to be set as a new system
+hostname.
+.br
+Note that the term \fBsystem\fP hostname may also be referred to as \fBpersistent\fP or
+\fBstatic\fP by other programs or tools. The hostname is stored in /etc/hostname
+file in most distributions. For example, systemd-hostnamed service uses the term
+\fBstatic\fP hostname and it only reads the /etc/hostname file when it starts.
.TP
.B permissions
.br
Show the permissions a caller has for various authenticated operations that
-NetworkManager provides, like enable/disable networking, changing Wi\(hyFi, WWAN,
-and WiMAX state, modifying connections, etc.
+NetworkManager provides, like enable and disable networking, changing Wi\(hyFi,
+WWAN, and WiMAX state, modifying connections, etc.
+.TP
+.B logging [level <log level>] [domains <log domains>]
.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager
-method: GetPermissions
-arguments: none
-.fi
+Get and change \fINetworkManager\fP logging level and domains. Without any argument
+current logging level and domains are shown. In order to change logging state, provide
+\fIlevel\fP and, or, \fIdomain\fP parameters. See \fBNetworkManager.conf\fP for available
+level and domain values.
+.RE
+
+.TP
+.B networking \- get or set general networking state of NetworkManager
+.br
+Use this object to show NetworkManager networking status, or to enable and disable
+networking. Disabling networking removes the configuration from all devices and
+changes them to the 'unmanaged' state.
+.TP
+.SS \fICOMMAND\fP := { [ on | off | connectivity ] }
+.sp
+.RS
.TP
-.B enable [true|false]
+.B [ on | off ]
.br
-Get networking\(hyenabled status or enable/disable networking by NetworkManager.
+Get networking\(hyenabled status or enable and disable networking by NetworkManager.
All interfaces managed by NetworkManager are deactivated when networking has
been disabled.
-.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager
-method: Enable
-arguments: TRUE or FALSE
-.fi
.TP
-.B sleep [true|false]
+.B connectivity [check]
.br
-Get sleep status or put to sleep/awake NetworkManager. All interfaces managed
-by NetworkManager are deactivated when it falls asleep. This command is not
-meant for user to enable/disable networking, use \fIenable\fP for that. D\(hyBus
-\fISleep\fP method is designed to put NetworkManager to sleep or awake for
-suspending/resuming the computer.
+Get network connectivity state.
+The optional \fIcheck\fP argument tells NetworkManager to re-check the connectivity,
+else the most recent known connectivity state is displayed without re-checking.
.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager
-method: Sleep
-arguments: TRUE or FALSE
-.fi
+Possible states are:
+.RS
+.PP
+.IP \fInone\fP 9
+\(en the host is not connected to any network
+.IP \fIportal\fP 9
+\(en the host is behind a captive portal and cannot reach the full Internet
+.IP \fIlimited\fP 9
+\(en the host is connected to a network, but it has no access to the Internet
+.IP \fIfull\fP 9
+\(en the host is connected to a network and has full access to the Internet
+.IP \fIunknown\fP 9
+\(en the connectivity status cannot be found out
+.RE
+.RE
+
.TP
-.B wifi [on|off]
+.B radio \- get or set radio switch states
.br
-Inquire or set status of Wi\(hyFi in NetworkManager. If no arguments are supplied,
-Wi\(hyFi status is printed; \fIon\fP enables Wi\(hyFi; \fIoff\fP disables Wi\(hyFi.
-.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
+Use this object to show radio switches status, or enable and disable
+the switches.
.TP
-.B wwan [on|off]
-.br
-Inquire or set status of WWAN in NetworkManager. If no arguments are supplied,
-WWAN status is printed; \fIon\fP enables WWAN; \fIoff\fP disables WWAN.
+.SS \fICOMMAND\fP := { all | wifi | wwan | wimax }
+.sp
+.RS
+.TP
+.B wifi [ on | off ]
.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
+Show or set status of Wi\(hyFi in NetworkManager. If no arguments are supplied,
+Wi\(hyFi status is printed; \fIon\fP enables Wi\(hyFi; \fIoff\fP disables Wi\(hyFi.
.TP
-.B wimax [on|off]
+.B wwan [ on | off ]
.br
-Inquire or set status of WiMAX in NetworkManager. If no arguments are supplied,
-WiMAX status is printed; \fIon\fP enables WiMAX; \fIoff\fP disables WiMAX.
+Show or set status of WWAN (mobile broadband) in NetworkManager. If no arguments
+are supplied, mobile broadband status is printed; \fIon\fP enables mobile broadband,
+\fIoff\fP disables it.
+.TP
+.B wimax [ on | off ]
.br
-Note: WiMAX support is a compile\(hytime decision, so it may be unavailable on some
+Show or set status of WiMAX in NetworkManager. If no arguments are supplied,
+WiMAX status is printed; \fIon\fP enables WiMAX; \fIoff\fP disables WiMAX. Note:
+WiMAX support is a compile\(hytime decision, so it may be unavailable on some
installations.
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
+.TP
+.B all [ on | off ]
+.br
+Show or set all previously mentioned radio switches at the same time.
.RE
.TP
-.B con
-Connections
-.br
-Get information about NetworkManager's connections.
+.B connection \- start, stop, and manage network connections
+.sp
+NetworkManager stores all network configuration as \fIconnections\fP, which are
+collections of data (Layer2 details, IP addressing, etc.) that describe
+how to create or connect to a network. A connection is \fIactive\fP when
+a device uses that connection's configuration to create or connect to a network.
+There may be multiple connections that apply to a device, but only one of them
+can be active on that device at any given time. The additional connections can
+be used to allow quick switching between different networks and configurations.
+.sp
+Consider a machine which is usually connected to a DHCP-enabled network, but
+sometimes connected to a testing network which uses static IP addressing. Instead
+of manually reconfiguring eth0 each time the network is changed, the settings can
+be saved as two connections which both apply to eth0, one for DHCP (called
+"default") and one with the static addressing details (called "testing"). When
+connected to the DHCP-enabled network the user would run "nmcli con up default"
+, and when connected to the static network the user would run "nmcli con up testing".
.TP
-.SS \fICOMMAND\fP := { list | status | up | down | delete }
+.SS \fICOMMAND\fP := { show | up | down | add | edit | modify | delete | reload | load }
.sp
.RS
.TP
-.B list [id <id> | uuid <id>]
-.br
-List configured connections. Without a parameter, all connections
-are listed. In order to get connection details, \fIid\fP with connection's
-name or \fIuuid\fP with connection's UUID shall be specified. When no command
-is given to the \fIcon\fP object, the default action is 'nmcli con list'.
+.B show [--active]
.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
+List in-memory and on-disk connection profiles, some of which may also be
+active if a device is using that connection profile. Without a parameter, all
+profiles are listed. When --active option is specified, only the active profiles
+are shown.
.TP
-.B status
+.B show [--active] [ id | uuid | path | apath ] <ID> ...
+.br
+Show details for specified connections. By default, both static configuration
+and active connection data are displayed. When --active option is specified,
+only the active profiles are taken into
+account.
+\fIid\fP, \fIuuid\fP, \fIpath\fP and \fIapath\fP keywords can be used if
+\fI<ID>\fP is ambiguous.
+.RS
+.PP
+Optional <ID>-specifying keywords are:
+.IP \fIid\fP 13
+\(en the <ID> denotes a connection name
+.IP \fIuuid\fP 13
+\(en the <ID> denotes a connection UUID
+.IP \fIpath\fP 13
+\(en the <ID> denotes a D-Bus static connection path
+in the format of /org/freedesktop/NetworkManager/Settings/<num> or just <num>
+.IP \fIapath\fP 13
+\(en the <ID> denotes a D-Bus active connection path
+in the format of /org/freedesktop/NetworkManager/ActiveConnection/<num> or just <num>
+.PP
+It is possible to filter the output using the global \fI--fields\fP option. Use the following
+values:
+.RE
+.RS
+.PP
+.IP \fIprofile\fP 13
+\(en only shows static profile configuration
+.IP \fIactive\fP 13
+\(en only shows active connection data (when the profile is active)
+.PP
+You can also specify particular fields. For static configuration, use setting and property names
+as described in \fInm-settings\fP(5) manual page. For active data use GENERAL, IP4, DHCP4, IP6,
+DHCP6, VPN.
+.PP
+When no command is given to the \fIconnection\fP object, the default action
+is 'nmcli connection show'.
+.RE
+.TP
+.B up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]
+.RE
+.RS
+.B up ifname <ifname> [ap <BSSID>] [nsp <name>]
+.RS
.br
-Print status of active connections.
+Activate a connection. The connection is identified by its name, UUID or D-Bus
+path. If <ID> is ambiguous, a keyword \fIid\fP, \fIuuid\fP or \fIpath\fP can be
+used. When requiring a particular device to activate the connection on, the
+\fIifname\fP option with interface name should be given. If the <ID> is not
+given an \fIifname\fP is required, and NetworkManager will activate the best
+available connection for the given \fIifname\fP. In case of a VPN connection,
+the \fIifname\fP option specifies the device of the base connection. The
+\fIap\fP option specify what particular AP should be used in case of a Wi\(hyFi
+connection.
.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
-.TP
-.B up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [\-\-nowait] [\-\-timeout <timeout>]
+If '--wait' option is not specified, the default timeout will be 90 seconds.
.br
-Activate a connection. The connection is identified by its name using \fIid\fP
-or UUID using \fIuuid\fP. When requiring a particular device to activate the
-connection on, the \fIiface\fP option with interface name should be given. In
-case of a VPN connection, the \fIiface\fP option specify the device of the base
-connection. The \fIap\fP option specify what particular AP should be used in case
-of a Wi\(hyFi connection.
+See \fBconnection show\fP above for the description of the <ID>-specifying keywords.
.RS
.PP
Available options are:
-.IP \fIiface\fP 13
+.IP \fIifname\fP 13
\(en interface that will be used for activation
.IP \fIap\fP 13
\(en BSSID of the AP which the command should connect to (for Wi\(hyFi connections)
.IP \fInsp\fP 13
\(en NSP (Network Service Provider) which the command should connect to (for WiMAX connections)
-.IP \fI\-\-nowait\fP 13
-\(en exit immediately without waiting for command completion
-.IP \fI\-\-timeout\fP 13
-\(en how long to wait for command completion (default is 90 s)
-.PP
-.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager
-method: ActivateConnection
-arguments: according to arguments
-.fi
.RE
-
+.RE
.TP
-.B down id <id> | uuid <id>
+.B down [ id | uuid | path | apath ] <ID>
.br
-Deactivate a connection.
-The connection is identified by its name using \fIid\fP
-or UUID using \fIuuid\fP.
+Deactivate a connection from a device without preventing the device from
+further auto-activation.
+.sp
+Be aware that this command deactivates the specified active connection. The device
+on which the connection was active, is still ready to connect and will perform
+auto-activation by looking for a suitable connection that has the 'autoconnect'
+flag set. This includes the just deactivated connection, so if the connection is set
+to auto-connect, it will be automatically started on the disconnected device again.
.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager
-method: DeactivateConnection
-arguments: according to arguments
-.fi
+In most cases you may want to use \fIdevice disconnect\fP command instead.
+.sp
+The connection is identified by its name, UUID or D-Bus path.
+If <ID> is ambiguous, a keyword \fIid\fP, \fIuuid\fP, \fIpath\fP or
+\fIapath\fP can be used.
+.br
+See \fBconnection show\fP above for the description of the <ID>-specifying keywords.
.TP
-.B delete id <id> | uuid <id>
+.B add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS
.br
-Delete a configured connection. The connection to delete is specified with
-\fIid\fP (connection name) or \fIuuid\fP (connection UUID).
+Add a connection for NetworkManager. Arguments differ according to connection types, see below.
+.RS
+.TP
+.B COMMON_OPTIONS:
+.IP "\fItype <type>\fP" 42
+\(en connection type; see below \fBTYPE_SPECIFIC_OPTIONS\fP for allowed values; (mandatory)
+.IP "\fIifname <ifname> | \(dq\&*\(dq\&\fP" 42
+\(en interface to bind the connection to. The connection will only be applicable to this
+interface name. A special value of "\fB*\fP" can be used for interface-independent connections.
+The \fIifname\fP argument is mandatory for all connection types except bond, team, bridge and vlan.
+Note: use quotes around \fB*\fP to suppress shell expansion.
+.IP "\fI[con-name <connection name>]\fP" 42
+\(en connection name (when not provided a default name is generated: <type>[-<ifname>][-<num>])
+.IP "\fI[autoconnect yes|no]\fP" 42
+\(en whether the connection profile can be automatically activated (default: yes)
+.IP "\fI[save yes|no]\fP" 42
+\(en whether the connection should be persistent, i.e. NetworkManager should store it on disk (default: yes)
+.RE
+.RS
+.TP
+.B TYPE_SPECIFIC_OPTIONS:
+.TP
+.B ethernet:
+.IP "\fI[mac <MAC address>]\fP" 42
+\(en MAC address of the device this connection is locked to
+.IP "\fI[cloned-mac <cloned MAC address>]\fP" 42
+\(en cloned MAC
+.IP "\fI[mtu <MTU>]\fP" 42
+\(en MTU
+.RE
+.RS
+.TP
+.B wifi:
+.IP "\fIssid <SSID>\fP" 42
+\(en SSID
+.IP "\fI[mac <MAC address>]\fP" 42
+\(en MAC address of the device this connection is locked to
+.IP "\fI[cloned-mac <cloned MAC address>]\fP" 42
+\(en cloned MAC
+.IP "\fI[mtu <MTU>]\fP" 42
+\(en MTU
+.RE
+.RS
+.TP
+.B wimax:
+.IP "\fI[mac <MAC address>]\fP" 42
+\(en MAC address of the device this connection is locked to
+.IP "\fI[nsp <NSP>]\fP" 42
+\(en Network Service Provider name
+.RE
+.RS
+.TP
+.B pppoe:
+.IP "\fIusername <PPPoE username>\fP" 42
+\(en PPPoE username
+.IP "\fI[password <PPPoE password>]\fP" 42
+\(en Password for the PPPoE username
+.IP "\fI[service <PPPoE service name>]\fP" 42
+\(en PPPoE service name (if required by concentrator)
+.IP "\fI[mtu <MTU>]\fP" 42
+\(en MTU
+.IP "\fI[mac <MAC address>]\fP" 42
+\(en MAC address of the device this connection is locked to
+.RE
+.RS
+.TP
+.B gsm:
+.IP "\fIapn <APN>\fP" 42
+\(en APN - GSM Access Point Name
+.IP "\fI[user <username>]\fP" 42
+\(en user name
+.IP "\fI[password <password>]\fP" 42
+\(en password
+.RE
+.RS
+.TP
+.B cdma:
+.IP "\fI[user <username>]\fP" 42
+\(en user name
+.IP "\fI[password <password>]\fP" 42
+\(en password
+.RE
+.RS
+.TP
+.B infiniband:
+.IP "\fI[mac <MAC address>]\fP" 42
+\(en MAC address of the device this connection is locked to (InfiniBand MAC is 20 bytes)
+.IP "\fI[mtu <MTU>]\fP" 42
+\(en MTU
+.IP "\fI[transport-mode datagram | connected]\fP" 42
+\(en InfiniBand transport mode
+.IP "\fI[parent <interface name>]\fP" 42
+\(en the interface name of the parent device (if any)
+.IP "\fI[p-key <IPoIB P_Key>]\fP" 42
+\(en the InfiniBand P_Key (16-bit unsigned integer)
+.RE
+.RS
+.TP
+.B bluetooth:
+.IP "\fI[addr <bluetooth address>]\fP" 42
+\(en Bluetooth device address (MAC)
+.IP "\fI[bt-type panu|dun-gsm|dun-cdma]\fP" 42
+\(en Bluetooth connection type
+.RE
+.RS
+.TP
+.B vlan:
+.IP "\fIdev <parent device (connection UUID, ifname, or MAC)>\fP" 42
+\(en parent device this VLAN is on
+.IP "\fIid <VLAN ID>\fP" 42
+\(en VLAN ID in range <0-4095>
+.IP "\fI[flags <VLAN flags>]\fP" 42
+\(en flags
+.IP "\fI[ingress <ingress priority mapping>]\fP" 42
+\(en VLAN ingress priority mapping
+.IP "\fI[egress <egress priority mapping>]\fP" 42
+\(en VLAN egress priority mapping
+.IP "\fI[mtu <MTU>]\fP" 42
+\(en MTU
+.RE
+.RS
+.TP
+.B bond:
+.IP "\fI[mode balance-rr (0) | active-backup (1) | balance-xor (2) | broadcast (3) |\fP"
+.IP "\fI 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\fP" 42
+\(en bonding mode (default: balance-rr)
+.IP "\fI[primary <ifname>]\fP" 42
+\(en primary interface name (for "active-backup" mode)
+.IP "\fI[miimon <num>]\fP" 42
+\(en miimon (default: 100)
+.IP "\fI[downdelay <num>]\fP" 42
+\(en downdelay (default: 0)
+.IP "\fI[updelay <num>]\fP" 42
+\(en updelay (default: 0)
+.IP "\fI[arp-interval <num>]\fP" 42
+\(en ARP interval (default: 0)
+.IP "\fI[arp-ip-target <num>]\fP" 42
+\(en ARP IP target
+.RE
+.RS
+.TP
+.B bond-slave:
+.IP "\fImaster <master (ifname, or connection UUID or name)>\fP" 42
+\(en master bond interface name, or connection UUID or ID of bond master connection profile.
+The value can be prefixed with \fBifname/\fP, \fBuuid/\fP or \fBid/\fP to disambiguate it.
+.RE
+.RS
+.TP
+.B team:
+.IP "\fI[config <file>|<raw JSON data>]\fP" 42
+\(en JSON configuration for team
+.RE
+.RS
+.TP
+.B team-slave:
+.IP "\fImaster <master (ifname, or connection UUID or name)>\fP" 42
+\(en master team interface name, or connection UUID or ID of team master connection profile.
+The value can be prefixed with \fBifname/\fP, \fBuuid/\fP or \fBid/\fP to disambiguate it.
+.IP "\fI[config <file>|<raw JSON data>]\fP" 42
+\(en JSON configuration for team
+.RE
+.RS
+.TP
+.B bridge:
+.IP "\fI[stp yes|no]\fP" 42
+\(en controls whether Spanning Tree Protocol (STP) is enabled for this bridge (default: yes)
+.IP "\fI[priority <num>]\fP" 42
+\(en sets STP priority (default: 128)
+.IP "\fI[forward-delay <2-30>]\fP" 42
+\(en STP forwarding delay, in seconds (default: 15)
+.IP "\fI[hello-time <1-10>]\fP" 42
+\(en STP hello time, in seconds (default: 2)
+.IP "\fI[max-age <6-42>]\fP" 42
+\(en STP maximum message age, in seconds (default: 20)
+.IP "\fI[ageing-time <0-1000000>]\fP" 42
+\(en the Ethernet MAC address aging time, in seconds (default: 300)
+.IP "\fI[mac <MAC address>]\fP" 42
+\(en MAC address of the bridge (note: this requires a recent kernel feature,
+originally introduced in 3.15 upstream kernel)
+.RE
+.RS
+.TP
+.B bridge-slave:
+.IP "\fImaster <master (ifname, or connection UUID or name)>\fP" 42
+\(en master bridge interface name, or connection UUID or ID of bridge master connection profile.
+The value can be prefixed with \fBifname/\fP, \fBuuid/\fP or \fBid/\fP to disambiguate it.
+.IP "\fI[priority <0-63>]\fP" 42
+\(en STP priority of this slave (default: 32)
+.IP "\fI[path-cost <1-65535>]\fP" 42
+\(en STP port cost for destinations via this slave (default: 100)
+.IP "\fI[hairpin yes|no]\fP" 42
+\(en 'hairpin mode' for the slave, which allows frames
+to be sent back out through the slave the frame was received on (default: yes)
+.RE
+.RS
+.TP
+.B vpn:
+.IP "\fIvpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|ssh|l2tp|iodine|...\fP" 42
+\(en VPN type
+.IP "\fI[user <username>]\fP" 42
+\(en VPN username
+.RE
+.RS
+.TP
+.B olpc-mesh:
+.IP "\fIssid <SSID>\fP" 42
+\(en SSID
+.IP "\fI[channel <1-13>]\fP" 42
+\(en channel to use for the network
+.IP "\fI[dhcp-anycast <MAC address>]\fP" 42
+\(en anycast DHCP MAC address used when requesting an IP address via DHCP
+.RE
+.RS
+.TP
+.B IP_OPTIONS:
+.IP "\fI[ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\fP" 42
+\(en IPv4 addresses
+.IP "\fI[ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\fP" 42
+\(en IPv6 addresses
+.RE
+.TP
+.B edit [id | uuid | path ] <ID> - edit an existing connection
+.RE
+.RS
+.B edit [type <new connection type>] [con-name <new connection name>] - add a new connection
+.RS
+Edit an existing connection or add a new one, using an interactive editor.
.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager.Settings.Connection
-method: Delete
-arguments: none
-.fi
+The existing connection is identified by its name, UUID or D-Bus path.
+If <ID> is ambiguous, a keyword \fIid\fP, \fIuuid\fP, or \fIpath\fP can be used.
+See \fBconnection show\fP above for the description of the <ID>-specifying keywords.
+Not providing an <ID> means that a new connection will be added.
+.sp
+The interactive editor will guide you through the connection editing and
+allow you to change connection parameters according to your needs by means of
+a simple menu-driven interface. The editor indicates what settings and
+properties can be modified and provides in-line help.
+.sp
+.PP
+Available options:
+.IP \fItype\fP 13
+\(en type of the new connection; valid types are the same as for \fIconnection add\fP command
+.IP \fIcon-name\fP 13
+\(en name for the new connection. It can be changed later in the editor.
+.RE
+.RS
+.sp
+See also \fInm-settings\fP(5) for all NetworkManager settings and property names, and their
+descriptions; and \fInmcli-examples\fP(5) for sample editor sessions.
+.RE
+.TP
+.B modify [--temporary] [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>
+.B [+|-]<setting>.<property> <value> ...
+.br
+Modify one or more properties in the connection profile.
+.br
+The connection is identified by its name, UUID or D-Bus path. If <ID> is
+ambiguous, a keyword \fIid\fP, \fIuuid\fP or \fIpath\fP can be used. See
+\fInm-settings\fP(5) for setting and property names, their descriptions and
+default values. This command supports abbreviations for \fIsetting name\fP and
+\fIproperty name\fP provided they are unique. Empty \fIvalue\fP ("") removes
+the property value (sets the property to the default value). The provided
+value overwrites the existing property value.
+.br
+If you want to append an item to the existing value, use \fI+\fP prefix for the
+property name. If you want to remove just one item from container-type
+property, use \fI-\fP prefix for the property name and specify a value or an
+zero-based index of the item to remove (or option name for properties with
+named options) as \fIvalue\fP. Of course, \fI+|-\fP only have a real effect for
+multi-value (container) properties like ipv4.dns, ipv4.addresses, bond.options,
+etc.
+.br
+The changes to the connection profile will be saved persistently by
+NetworkManager, unless \fI--temporary\fP option is provided, in which case the
+changes won't persist over NetworkManager restart.
+.TP
+.B delete [ id | uuid | path ] <ID> ...
+.br
+Delete a configured connection. The connection to be deleted is identified by
+its name, UUID or D-Bus path. If <ID> is ambiguous, a keyword \fIid\fP,
+\fIuuid\fP or \fIpath\fP can be used.
+.br
+See \fBconnection show\fP above for the description of the <ID>-specifying keywords.
+.TP
+.B reload
+.br
+Reload all connection files from disk. \fINetworkManager\fP does not monitor
+changes to connection files by default. So you need to use this command in order
+to tell \fINetworkManager\fP to re-read the connection profiles from disk when
+a change was made to them. However, the auto-loading feature can be enabled and
+then \fINetworkManager\fP will reload connection files any time they change
+(monitor-connection-files=true in \fINetworkManager.conf\fP(5)).
+.TP
+.B load <filename> [<filename>...]
+.br
+Load/reload one or more connection files from disk. Use this after manually
+editing a connection file to ensure that \fBNetworkManager\fP is aware
+of its latest state.
.RE
.TP
-.B dev
-Devices
+.B device - show and manage network interfaces
.br
-Get information about devices.
.TP
-.SS \fICOMMAND\fP := { status | list | disconnect | wifi }
+.SS \fICOMMAND\fP := { status | show | connect | disconnect | wifi | wimax }
.sp
.RS
.TP
.B status
.br
-Print status of devices. This is the default action, when no command
-is specified to \fIdev\fP object.
+Print status of devices.
.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
+This is the default action if no command is specified to \fIdevice\fP object.
.TP
-.B list [iface <iface>]
+.B show [<ifname>]
.br
-Get detailed information about devices. Without an argument, all devices are
-examined. To get information for a specific device, the \fIiface\fP argument
-with the interface name should be provided.
+Show detailed information about devices. Without an argument, all devices are
+examined. To get information for a specific device, the interface name has
+to be provided.
+.TP
+.B connect <ifname>
.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
+Connect the device. NetworkManager will try to find a suitable connection that
+will be activated. It will also consider connections that are not set to auto connect.
+.br
+If '--wait' option is not specified, the default timeout will be 90 seconds.
.TP
-.B disconnect iface <iface> [\-\-nowait] [\-\-timeout <timeout>]
+.B disconnect <ifname>
.br
Disconnect a device and prevent the device from automatically activating further
connections without user/manual intervention.
-.RS
-.PP
-Available options are:
-.IP \fI\-\-nowait\fP 13
-\(en exit immediately without waiting for command completion
-.IP \fI\-\-timeout\fP 13
-\(en how long to wait for command completion (default is 10 s)
-.PP
.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager.Device
-method: Disconnect
-arguments: none
-.fi
-.RE
+If '--wait' option is not specified, the default timeout will be 10 seconds.
.TP
-.B wifi [list [iface <iface>] [bssid <BSSID>]]
+.B wifi [list [ifname <ifname>] [bssid <BSSID>]]
.br
-List available Wi\(hyFi access points. The \fIiface\fP and \fIbssid\fP options
+List available Wi\(hyFi access points. The \fIifname\fP and \fIbssid\fP options
can be used to list APs for a particular interface or with a specific BSSID,
respectively.
-.br
-.nf
-\fBReference to D\(hyBus:\fP
-No simple reference.
-.fi
.TP
-.B wifi connect <(B)SSID> [password <password>] [wep\-key\-type key|phrase] [iface <iface>] [bssid <BSSID>] [name <name>] [\-\-private] [\-\-nowait] [\-\-timeout <timeout>]
+.B wifi connect <(B)SSID> [password <password>] [wep\-key\-type key|phrase] [ifname <ifname>] [bssid <BSSID>] [name <name>] [private yes|no]
.br
Connect to a Wi\(hyFi network specified by SSID or BSSID. The command creates a new
connection and then activates it on a device. This is a command\(hyline counterpart
of clicking an SSID in a GUI client. The command always creates a new connection
and thus it is mainly useful for connecting to new Wi\(hyFi networks. If a connection
-for the network already exists, it's better to connect through it using
-\fInmcli con up id <name>\fP. Note that only open, WEP and WPA\(hyPSK networks are
-supported at the moment. It is also supposed that IP configuration is obtained via
+for the network already exists, it is better to bring up (activate) the existing connection
+as follows: \fInmcli con up id <name>\fP. Note that only open, WEP and WPA\(hyPSK networks
+are supported at the moment. It is also supposed that IP configuration is obtained via
DHCP.
+.br
+If '--wait' option is not specified, the default timeout will be 90 seconds.
.RS
.PP
Available options are:
@@ -389,27 +738,29 @@ Available options are:
\(en password for secured networks (WEP or WPA)
.IP \fIwep\-key\-type\fP 13
\(en type of WEP secret, either \fIkey\fP for ASCII/HEX key or \fIphrase\fP for passphrase
-.IP \fIiface\fP 13
+.IP \fIifname\fP 13
\(en interface that will be used for activation
.IP \fIbssid\fP 13
\(en if specified, the created connection will be restricted just for the BSSID
.IP \fIname\fP 13
\(en if specified, the connection will use the name (else NM creates a name itself)
-.IP \fI\-\-private\fP 13
-\(en the connection will only be visible to the user who created it (else the connection is system\(hywide)
-.IP \fI\-\-nowait\fP 13
-\(en exit immediately without waiting for command completion
-.IP \fI\-\-timeout\fP 13
-\(en how long to wait for command completion (default is 90 s)
-.PP
-.br
-.nf
-\fBReference to D\(hyBus:\fP
-interface: org.freedesktop.NetworkManager
-method: AddAndActivateConnection
-arguments: according to arguments
-.fi
+.IP \fIprivate\fP 13
+\(en if set to \fByes\fP, the connection will only be visible to the user who created it.
+Otherwise the connection is system\(hywide, which is the default.
.RE
+.TP
+.B wifi rescan [[ifname] <ifname>]
+.br
+Request that \fINetworkManager\fP immediately re-scan for available access points.
+NetworkManager scans Wi\(hyFi networks periodically, but in some cases it can be
+useful to start scanning manually (e.g. after resuming the computer).
+This command does not show the APs, use 'nmcli device wifi list' for that.
+.TP
+.B wimax [list [ifname <ifname>] [nsp <name>]]
+.br
+List available WiMAX NSP. The \fIifname\fP and \fInsp\fP options
+can be used to list networks for a particular interface or with a specific
+NSP, respectively.
.SH ENVIRONMENT VARIABLES
\fInmcli\fP's behavior is affected by the following environment variables.
@@ -425,7 +776,7 @@ or null.
.RE
Internationalization notes:
.br
-Be aware that \fInmcli\fP is localized and that's why the output depends on
+Be aware that \fInmcli\fP is localized and that is why the output depends on
your environment. This is important to realize especially when you parse the
output.
.br
@@ -447,7 +798,7 @@ Unknown or unspecified error
.IP "2" 4
Invalid user input, wrong \fInmcli\fP invocation
.IP "3" 4
-Timeout expired (see commands with \fI\-\-timeout\fP option)
+Timeout expired (see \fI\-\-wait\fP option)
.IP "4" 4
Connection activation failed
.IP "5" 4
@@ -460,56 +811,79 @@ Connection deletion failed
NetworkManager is not running
.IP "9" 4
\fInmcli\fP and \fINetworkManager\fP versions mismatch
+.IP "10" 4
+Connection, device, or access point does not exist.
.SH EXAMPLES
-.IP "\fB\f(CWnmcli \-t \-f RUNNING nm\fP\fP"
+.PP
+This section presents various examples of nmcli usage. If you want even more,
+please refer to \fInmcli-examples\fP(5) manual page.
+.sp
+.IP "\fB\f(CWnmcli \-t \-f RUNNING general\fP\fP"
.IP
tells you whether NetworkManager is running or not.
-.IP "\fB\f(CWnmcli \-t \-f STATE nm\fP\fP"
+.IP "\fB\f(CWnmcli \-t \-f STATE general\fP\fP"
.IP
shows the overall status of NetworkManager.
-.IP "\fB\f(CWnmcli nm wifi off\fP\fP"
+.IP "\fB\f(CWnmcli radio wifi off\fP\fP"
.IP
switches Wi\(hyFi off.
-.IP "\fB\f(CWnmcli \-p con list\fP\fP"
+.IP "\fB\f(CWnmcli connection show\fP\fP"
.IP
lists all connections NetworkManager has.
-.IP "\fB\f(CWnmcli \-f name,autoconnect con list\fP\fP"
+.IP "\fB\f(CWnmcli \-p \-m multiline \-f all con show\fP\fP"
.IP
-lists all connections' names and their autoconnect settings.
+shows all configured connections in multi-line mode.
-.IP "\fB\f(CWnmcli con list id \(dq\&My wired connection\(dq\&\fP\fP"
+.IP "\fB\f(CWnmcli connection show --active\fP\fP"
.IP
-lists all details of the connection with "My wired connection" name.
+lists all currently active connections.
-.IP "\fB\f(CWnmcli \-p con up id \(dq\&My wired connection\(dq\& iface eth0\fP\fP"
+.IP "\fB\f(CWnmcli \-f name,autoconnect c s\fP\fP"
.IP
-activates the connection with name "My wired connection" on interface eth0.
+shows all connection profile names and their auto-connect property.
+
+.IP "\fB\f(CWnmcli \-p connection show \(dq\&My default em1\(dq\&\fP\fP"
+.IP
+shows details for "My default em1" connection profile.
+
+.IP "\fB\f(CWnmcli \-f active connection show \(dq\&My default em1\(dq\&\fP\fP"
+.IP
+shows details for "My default em1" active connection, like IP, DHCP
+information, etc.
+
+.IP "\fB\f(CWnmcli -f profile con s \(dq\&My wired connection\(dq\&\fP\fP"
+.IP
+shows static configuration details of the connection profile with "My wired connection" name.
+
+.IP "\fB\f(CWnmcli \-p con up \(dq\&My wired connection\(dq\& ifname eth0\fP\fP"
+.IP
+activates the connection profile with name "My wired connection" on interface eth0.
The \-p option makes nmcli show progress of the activation.
-.IP "\fB\f(CWnmcli con up uuid 6b028a27\-6dc9\-4411\-9886\-e9ad1dd43761 ap 00:3A:98:7C:42:D3\fP\fP"
+.IP "\fB\f(CWnmcli con up 6b028a27\-6dc9\-4411\-9886\-e9ad1dd43761 ap 00:3A:98:7C:42:D3\fP\fP"
.IP
connects the Wi\(hyFi connection with UUID 6b028a27\-6dc9\-4411\-9886\-e9ad1dd43761 to the AP
with BSSID 00:3A:98:7C:42:D3.
-.IP "\fB\f(CWnmcli dev status\fP\fP"
+.IP "\fB\f(CWnmcli device status\fP\fP"
.IP
shows the status for all devices.
-.IP "\fB\f(CWnmcli dev disconnect iface em2\fP\fP"
+.IP "\fB\f(CWnmcli dev disconnect em2\fP\fP"
.IP
disconnects a connection on interface em2 and marks the device as unavailable for
-auto\(hyconnecting. That's why no connection will automatically be activated on the
-device until the device's "autoconnect" is set to TRUE or user manually activates
+auto\(hyconnecting. As a result, no connection will automatically be activated on the
+device until the device's 'autoconnect' is set to TRUE or the user manually activates
a connection.
-.IP "\fB\f(CWnmcli \-f GENERAL,WIFI\-PROPERTIES dev list iface wlan0\fP\fP"
+.IP "\fB\f(CWnmcli \-f GENERAL,WIFI\-PROPERTIES dev show wlan0\fP\fP"
.IP
-lists details for wlan0 interface; only GENERAL and WIFI\-PROPERTIES sections will be shown.
+shows details for wlan0 interface; only GENERAL and WIFI\-PROPERTIES sections will be shown.
.IP "\fB\f(CWnmcli dev wifi\fP\fP"
.IP
@@ -518,18 +892,63 @@ lists available Wi\(hyFi access points known to NetworkManager.
.IP "\fB\f(CWnmcli dev wifi con \(dq\&Cafe Hotspot 1\(dq\& password caffeine name \(dq\&My cafe\(dq\&\fP\fP"
.IP
creates a new connection named "My cafe" and then connects it to "Cafe Hotspot 1" SSID
-using "caffeine" password. This is mainly useful when connecting to "Cafe Hotspot 1" for
+using password "caffeine". This is mainly useful when connecting to "Cafe Hotspot 1" for
the first time. Next time, it is better to use 'nmcli con up id "My cafe"' so that the
existing connection profile can be used and no additional is created.
+.IP "\fB\f(CWnmcli connection add type ethernet autoconnect no ifname eth0\fP\fP"
+.IP
+non-interactively adds an Ethernet connection tied to eth0 interface with automatic IP configuration (DHCP),
+and disables the connection's "autoconnect" flag.
+
+.IP "\fB\f(CWnmcli c a ifname Maxipes\(hyfik type vlan dev eth0 id 55\fP\fP"
+.IP
+non-interactively adds a VLAN connection with ID 55. The connection will use eth0 and the VLAN interface
+will be named Maxipes\(hyfik.
+
+.IP "\fB\f(CWnmcli connection edit ethernet\-em1\-2\fP\fP"
+.IP
+edits existing "ethernet\(hyem1\(hy2" connection in the interactive editor.
+
+.IP "\fB\f(CWnmcli connection edit type ethernet con-name \(dq\&yet another Ethernet connection\(dq\&\fP\fP"
+.IP
+adds a new Ethernet connection in the interactive editor.
+
+.IP "\fB\f(CWnmcli con mod ethernet\-2 connection.autoconnect no\fP\fP"
+.IP
+modifies 'autoconnect' property in the 'connection' setting of 'ethernet\(hy2' connection.
+
+.IP "\fB\f(CWnmcli con mod \(dq\&Home Wi\-Fi\(dq\& wifi.mtu 1350\fP\fP"
+.IP
+modifies 'mtu' property in the 'wifi' setting of 'Home Wi\(hyFi' connection.
+
+.IP "\fB\f(CWnmcli con mod em1-1 ipv4.method manual ipv4.addr \(dq\&192.168.1.23/24 192.168.1.1, 10.10.1.5/8, 10.0.0.11\(dq\&\fP\fP"
+.IP
+sets manual addressing and the addresses in em1-1 profile.
+
+.IP "\fB\f(CWnmcli con modify ABC +ipv4.dns 8.8.8.8\fP\fP"
+.IP
+appends a Google public DNS server to DNS servers in ABC profile.
+
+.IP "\fB\f(CWnmcli con modify ABC -ipv4.addresses \(dq\&192.168.100.25/24 192.168.1.1\(dq\&\fP\fP"
+.IP
+removes the specified IP address from (static) profile ABC.
+
+.SH NOTES
+\fInmcli\fP accepts abbreviations, as long as they are a unique prefix in the set
+of possible options. As new options get added, these abbreviations are not guaranteed
+to stay unique. For scripting and long term compatiblity it is therefore strongly
+advised to spell out the full option names.
+
.SH BUGS
There are probably some bugs. If you find a bug, please report it to
https://bugzilla.gnome.org/ \(em product \fINetworkManager\fP.
.SH SEE ALSO
-.BR nm\-tool (1),
+.BR nmcli\-examples (5),
.BR nm\-online (1),
.BR NetworkManager (8),
+.BR NetworkManager.conf (5),
.BR nm\-settings (5),
-.BR nm\applet (1),
+.BR nm\-applet (1),
.BR nm\-connection\-editor (1).
diff --git a/po/POTFILES.in b/po/POTFILES.in
index f8b4b0914..6368a9f59 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -8,32 +8,89 @@ cli/src/network-manager.c
cli/src/nmcli.c
cli/src/settings.c
cli/src/utils.c
+libnm-glib/nm-device.c
+libnm-glib/nm-remote-connection.c
libnm-util/crypto.c
libnm-util/crypto_gnutls.c
libnm-util/crypto_nss.c
+libnm-util/nm-connection.c
+libnm-util/nm-setting-8021x.c
+libnm-util/nm-setting-adsl.c
+libnm-util/nm-setting-bluetooth.c
+libnm-util/nm-setting-bond.c
+libnm-util/nm-setting-bridge-port.c
+libnm-util/nm-setting-bridge.c
+libnm-util/nm-setting-cdma.c
+libnm-util/nm-setting-connection.c
+libnm-util/nm-setting-dcb.c
+libnm-util/nm-setting-gsm.c
+libnm-util/nm-setting-infiniband.c
+libnm-util/nm-setting-ip4-config.c
+libnm-util/nm-setting-ip6-config.c
+libnm-util/nm-setting-olpc-mesh.c
+libnm-util/nm-setting-ppp.c
+libnm-util/nm-setting-pppoe.c
+libnm-util/nm-setting-team.c
+libnm-util/nm-setting-vlan.c
+libnm-util/nm-setting-vpn.c
+libnm-util/nm-setting-wimax.c
+libnm-util/nm-setting-wired.c
+libnm-util/nm-setting-wireless-security.c
+libnm-util/nm-setting-wireless.c
libnm-util/nm-utils.c
policy/org.freedesktop.NetworkManager.policy.in.in
src/main.c
-src/bluez-manager/nm-bluez-device.c
src/dhcp-manager/nm-dhcp-dhclient.c
src/dhcp-manager/nm-dhcp-dhclient-utils.c
src/dhcp-manager/nm-dhcp-manager.c
src/dns-manager/nm-dns-manager.c
src/logging/nm-logging.c
-src/modem-manager/nm-modem-cdma.c
-src/modem-manager/nm-modem-gsm.c
-src/modem-manager/nm-modem-broadband.c
-src/nm-device-bond.c
-src/nm-device-adsl.c
-src/nm-device-bridge.c
-src/nm-device-bt.c
-src/nm-device-ethernet.c
-src/nm-device-infiniband.c
-src/nm-device-olpc-mesh.c
-src/nm-device-vlan.c
+src/config/nm-config.c
+src/devices/adsl/nm-device-adsl.c
+src/devices/bluetooth/nm-bluez-device.c
+src/devices/bluetooth/nm-device-bt.c
+src/devices/nm-device-bond.c
+src/devices/nm-device-bridge.c
+src/devices/nm-device-ethernet.c
+src/devices/nm-device-infiniband.c
+src/devices/nm-device-team.c
+src/devices/nm-device-vlan.c
+src/devices/wifi/nm-device-olpc-mesh.c
+src/devices/wwan/nm-modem-broadband.c
+src/devices/wwan/nm-modem-old.c
src/nm-manager.c
-src/nm-netlink-monitor.c
+src/nm-sleep-monitor-systemd.c
src/settings/plugins/ifcfg-rh/reader.c
src/settings/nm-settings-utils.c
test/nm-online.c
+tui/newt/nmt-newt-utils.c
+tui/nm-editor-utils.c
+tui/nmt-connect-connection-list.c
+tui/nmt-device-entry.c
+tui/nmt-edit-connection-list.c
+tui/nmt-editor.c
+tui/nmt-mtu-entry.c
+tui/nmt-page-bond.c
+tui/nmt-page-bridge-port.c
+tui/nmt-page-bridge.c
+tui/nmt-page-ethernet.c
+tui/nmt-page-infiniband.c
+tui/nmt-page-ip4.c
+tui/nmt-page-ip6.c
+tui/nmt-page-main.c
+tui/nmt-page-team-port.c
+tui/nmt-page-team.c
+tui/nmt-page-vlan.c
+tui/nmt-page-wifi.c
+tui/nmt-password-dialog.c
+tui/nmt-password-fields.c
+tui/nmt-route-editor.c
+tui/nmt-route-table.c
+tui/nmt-secret-agent.c
+tui/nmt-slave-list.c
+tui/nmt-widget-list.c
+tui/nmtui-connect.c
+tui/nmtui-edit.c
+tui/nmtui-hostname.c
+tui/nmtui.c
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 94a9c8629..461200fad 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -4,3 +4,4 @@ policy/org.freedesktop.NetworkManager.policy.in
vpn-daemons/openvpn
vpn-daemons/pptp
vpn-daemons/vpnc
+tui/vpn-helpers.c
diff --git a/po/as.po b/po/as.po
index 66cf5842f..dac6acc53 100644
--- a/po/as.po
+++ b/po/as.po
@@ -1,350 +1,452 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Nilamdyuti Goswami <ngoswami@redhat.com>, 2012.
+# Nilamdyuti Goswami <ngoswami@redhat.com>, 2012, 2013.
+# ngoswami <ngoswami@redhat.com>, 2014. #zanata.
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-09-14 03:26+0000\n"
-"PO-Revision-Date: 2012-09-14 17:35+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-01-30 15:24+0000\n"
+"PO-Revision-Date: 2014-02-06 17:17+0630\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
-"Language-Team: as_IN <kde-i18n-doc@kde.org>\n"
-"Language: \n"
+"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
+"Language: as\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:179
+#: ../cli/src/connections.c:201
msgid "GROUP"
-msgstr "GROUP"
+msgstr "দল"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
-msgstr "ADDRESS"
+msgstr "ঠিকনা"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
-msgstr "ROUTE"
+msgstr "পথ"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
-msgstr "DOMAIN"
+msgstr "ডমেইন"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
-msgstr "OPTION"
+msgstr "বিকলà§à¦ª"
+
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "অবৈধ IPv4 ঠিকনা '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "অবৈধ উপসৰà§à¦— '%s'; <1-32> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "অবৈধ গেইটৱে '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "অবৈধ IPv6 ঠিকনা '%s'"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "অবৈধ উপসৰà§à¦— '%s'; <1-128> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "অবৈধ IPv4 পথ '%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "অবৈধ উপসৰà§à¦— '%s'; <0-32> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "অবৈধ পৰৱৰà§à¦¤à§€ হপ ঠিকনা '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "অবৈধ মেটà§à§°à¦¿à¦• '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "অবৈধ IPv6 পথ '%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "অবৈধ উপসৰà§à¦— '%s'; <0-128> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "অবà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "উপলবà§à¦§ নাই"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "সংযোগ কৰা হৈছে (পà§à§°à¦¸à§à¦¤à§à¦¤ হওক)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "সংযোগ কৰা (সংৰূপণ কৰা)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "সংযোগ কৰা (পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "সংযোগ কৰা (IP সংৰূপ পà§à§°à¦¾à¦ªà§à¦¤ কৰা)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "সংযোগ কৰা (IP সংযোগ নীৰিকà§à¦·à¦£ কৰা)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "সংযোগ কৰা (দà§à¦¬à¦¿à¦¤à§€à§Ÿ সংযোগসমূহ আৰমà§à¦­ কৰা)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "সংযà§à¦•à§à¦¤"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:633
+#: ../cli/src/common.c:639 ../cli/src/connections.c:528
msgid "deactivating"
msgstr "নিষà§à¦•à§à§°à¦¿à§Ÿ কৰা হৈছে"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "সংযোগ বà§à¦¯à§°à§à¦¥"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:636
-#: ../cli/src/connections.c:659 ../cli/src/connections.c:1351
-#: ../cli/src/devices.c:622 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:591
-#: ../cli/src/settings.c:619 ../cli/src/utils.c:531 ../src/main.c:462
-#: ../src/main.c:481
+#: ../cli/src/common.c:643 ../cli/src/connections.c:533
+#: ../cli/src/connections.c:556 ../cli/src/connections.c:1669
+#: ../cli/src/devices.c:829 ../cli/src/devices.c:2263
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1114 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "অজà§à¦žà¦¾à¦¤"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "কোনো কাৰণ দিয়া হোৱা নাই"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2467
+#, c-format
msgid "Unknown error"
msgstr "অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "ডিভাইচ à¦à¦¤à¦¿à§Ÿà¦¾ বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "ডিভাইচ à¦à¦¤à¦¿à§Ÿà¦¾ বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ নহয়"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "ডিভাইচক সংৰূপণৰ বাবে পà§à¦¿à¦¬ নোৱাৰি"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr "IP সংৰূপ সংৰকà§à¦·à¦£ কৰিব নোৱাৰি (কোনো ঠিকনা, সময়অনà§à¦¤, ইতà§à¦¯à¦¾à¦¦à§€ উপলবà§à¦§ নাই)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "IP সংৰূপ আৰৠবৈধ নহয়"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "গোপনসমূহৰ পà§à§°à§Ÿà§‹à¦œà¦¨ আছিল, কিনà§à¦¤à§ পà§à§°à¦¦à¦¾à¦¨ কৰা হোৱা নাছিল"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ সংৰূপ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ পà§à§°à¦®à¦¾à¦£à§€à¦¤ হবলে বহৠসময় ললে"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "PPP সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP সেৱা বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤ হল"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "অংশীদাৰী সংযোগ সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "অংশীদাৰী সংযোগ সেৱা বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "AutoIP সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP সেৱা তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP সেৱা বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "শাৰী বà§à¦¯à¦¸à§à¦¥"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "কোনো ডায়েল শবà§à¦¦ নাই"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "কোনো বাহক সà§à¦¥à¦¾à¦ªà¦¨ কৰিব পৰা নগল"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "ডায়লিং অনà§à§°à§‹à¦§à§° সময় অনà§à¦¤ হল"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "ডায়লিং চেষà§à¦Ÿà¦¾ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "মডেম আৰমà§à¦­à¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "ধাৰà§à¦¯à§à¦¯à¦¤ APN নিৰà§à¦¬à¦¾à¦šà¦¨ কৰিবলে বà§à¦¯à§°à§à¦¥"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "নেটৱাৰà§à¦•à¦¸à¦®à§‚হ সনà§à¦§à¦¾à¦¨ কৰা হোৱা নাই"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "নেটৱাৰà§à¦• ৰেজিষà§à¦Ÿà§à§°à§‡à¦·à¦£ নাকচ কৰা হৈছে"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "নেটৱাৰà§à¦• ৰেজিষà§à¦Ÿà§à§°à§‡à¦·à¦£à§° সময় অনà§à¦¤ হল"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "অনà§à§°à§‹à¦§ কৰা নেটৱাৰà§à¦•à§° সৈতে ৰেজিসà§à¦Ÿà¦¾à§° কৰিবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN নীৰিকà§à¦·à¦£ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "ডিভাইচৰ বাবে পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ ফাৰà§à¦®à§±à§‡à§° সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ হব পাৰে"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "ডিভাইচ আতৰোৱা হৈছিল"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
-msgstr "NetworkManager টোপনি গল"
+msgstr "NetworkManager নিদà§à§°à¦¾à¦¤ গল"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "ডিভাইচৰ সকà§à§°à¦¿à§Ÿ সংযোগ অদৃশà§à¦¯ হল"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "ডিভাইচ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ অথবা কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ দà§à¦¬à¦¾à§°à¦¾ বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হল"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "বাহক/সংযোগ পৰিৱৰà§à¦¤à¦¨ হল"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "ডিভাইচৰ সà§à¦¥à¦¾à§Ÿà§€ সংযোগ ধাৰণা কৰা হৈছিল"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "চাপà§à¦²à¦¿à¦•à§‡à¦¨à§à¦Ÿ à¦à¦¤à¦¿à§Ÿà¦¾ উপলবà§à¦§"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "মডেম পোৱা নগল"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "বà§à¦²à§à¦Ÿà§à¦¥ সংযোগ বà§à¦¯à§°à§à¦¥ হল অথবা সময়অনà§à¦¤ হল"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM মডেমৰ SIM কাৰà§à¦¡ সà§à¦®à§à§±à¦¾ হোৱা নাই"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM মডেমৰ SIM PIN ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM মডেমৰ SIM PUK ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM মডেমৰ SIM ভূল"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand ডিভাইচে সংযà§à¦•à§à¦¤ অৱসà§à¦¥à¦¾ সমৰà§à¦¥à¦¨ নকৰে"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "সংযোগৰ à¦à¦Ÿà¦¾ নিৰà§à¦­à§°à¦¤à¦¾ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL বà§à§°à¦¿à¦œà§°à§‡ RFC 2684 ইথাৰনেটৰ সৈতে à¦à¦Ÿà¦¾ সমসà§à¦¯à¦¾"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager উপলবà§à¦§ নাই"
-#: ../cli/src/common.c:558 ../cli/src/devices.c:274 ../cli/src/devices.c:290
-#: ../cli/src/devices.c:410 ../cli/src/devices.c:454
+#: ../cli/src/common.c:811
+msgid "The Wi-Fi network could not be found"
+msgstr "Wi-Fi নেটৱাৰà§à¦• পোৱা নগল"
+
+#: ../cli/src/common.c:814
+msgid "A secondary connection of the base connection failed"
+msgstr "ভিতà§à¦¤à¦¿ সংযোগৰ à¦à¦Ÿà¦¾ দà§à¦¬à¦¿à¦¤à§€à§Ÿ সংযোগ বà§à¦¯à§°à§à¦¥ হল"
+
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB অথবা FCoE সংসà§à¦¥à¦¾à¦ªà¦¨ বà§à¦¯à§°à§à¦¥ হল"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "teamd নিয়নà§à¦¤à§à§°à¦£ বà§à¦¯à§°à§à¦¥ হল"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:824 ../cli/src/devices.c:636
+#: ../libnm-glib/nm-device.c:1834
msgid "Unknown"
msgstr "অজà§à¦žà¦¾à¦¤"
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "অবৈধ পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ মেপ '%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ '%s' বৈধ নহয় (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ দল সংৰূপ অথবা ফাইল নাম নহয়।"
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "সংহতিৰ নাম?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§° নাম?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "সংযোগৰ ধৰণ সà§à¦®à§à§±à¦¾à¦“ক:"
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:105 ../cli/src/devices.c:129 ../cli/src/devices.c:139
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:163 ../cli/src/devices.c:177
-#: ../cli/src/devices.c:199
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:180
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
-msgstr "NAME"
+msgstr "নাম"
#. 0
#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
msgid "UUID"
msgstr "UUID"
@@ -352,1291 +454,3799 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:107 ../cli/src/devices.c:202
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:202
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
-msgstr "TYPE"
+msgstr "ধৰণ"
#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
-msgstr "TIMESTAMP"
+msgstr "টাইমসà§à¦Ÿà¦¾à¦®à§à¦ª"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
-msgstr "TIMESTAMP-REAL"
+msgstr "টাইমসà§à¦Ÿà¦¾à¦®à§à¦ª-পà§à§°à¦•à§ƒà¦¤"
#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:119
+#. 14
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
-msgstr "AUTOCONNECT"
+msgstr "সà§à¦¬à¦¸à¦‚যোগ"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
-msgstr "READONLY"
+msgstr "কেৱলপà§à¦¿à¦¬à¦ªà§°à¦¾"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:189 ../cli/src/devices.c:205
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:188
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#. 2
-#: ../cli/src/connections.c:131
-msgid "DEVICES"
-msgstr "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
+#: ../cli/src/devices.c:202
+msgid "ACTIVE"
+msgstr "সকà§à§°à¦¿à§Ÿ"
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:71 ../cli/src/devices.c:87
+#: ../cli/src/devices.c:184 ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "ডিভাইচ"
+
+#. 9
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:114 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:78 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:73 ../cli/src/devices.c:96
+#: ../cli/src/network-manager.c:39
msgid "STATE"
-msgstr "STATE"
+msgstr "অৱসà§à¦¥à¦¾"
+
+#. 10
+#: ../cli/src/connections.c:79
+msgid "ACTIVE-PATH"
+msgstr "ACTIVE-PATH"
+
+#. 2
+#: ../cli/src/connections.c:182
+msgid "DEVICES"
+msgstr "ডিভাইচসমূহ"
#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:184
msgid "DEFAULT"
-msgstr "DEFAULT"
+msgstr "অবিকলà§à¦ªà¦¿à¦¤"
#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:185
msgid "DEFAULT6"
msgstr "DEFAULT6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:186
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#. 4
+#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:342
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:138
+#. 5
+#. 18
+#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PATH"
#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:190
msgid "ZONE"
-msgstr "ZONE"
+msgstr "অঞà§à¦šà¦²"
#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:191
msgid "MASTER-PATH"
-msgstr "MASTER-PATH"
-
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "GENERAL"
-
-#. 0
-#: ../cli/src/connections.c:149
-msgid "IP"
-msgstr "IP"
+msgstr "মাসà§à¦Ÿà¦¾à§°-পথ"
#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:203
msgid "USERNAME"
-msgstr "USERNAME"
+msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦®"
#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:204
msgid "GATEWAY"
-msgstr "GATEWAY"
+msgstr "গেইটৱে"
#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:205
msgid "BANNER"
-msgstr "BANNER"
+msgstr "বেনাৰ"
#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:206
msgid "VPN-STATE"
msgstr "VPN-STATE"
#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:207
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "সাধাৰণ"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:261
#, c-format
msgid ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
-"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"Usage: nmcli connection { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
msgstr ""
-"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:249 ../cli/src/connections.c:609
+#: ../cli/src/connections.c:283
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'con list': %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"List in-memory and on-disk connection profiles, some of which may also be\n"
+"active if a device is using that connection profile. Without a parameter, "
+"all\n"
+"profiles are listed. When --active option is specified, only the active\n"
+"profiles are shown.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Show details for specified connections. By default, both static "
+"configuration\n"
+"and active connection data are displayed. It is possible to filter the "
+"output\n"
+"using global '--fields' option. Refer to the manual page for more "
+"information.\n"
+"When --active option is specified, only the active profiles are taken into\n"
+"account.\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"ইন-মেমৰি আৰৠঅন-ডিসà§à¦• সংযোগ আলেখà§à¦¯à¦¸à¦®à§‚হ তালিকাভà§à¦•à§à¦¤ কৰক, যাৰ কিছà§à¦®à¦¾à¦¨ সকà§à§°à¦¿à§Ÿ "
+"থাকিব "
+"পাৰে\n"
+"যদি à¦à¦Ÿà¦¾ ডিভাইচে সেই সংযোগ আলেখà§à¦¯ বà§à¦¯à§±à¦¹à¦¾à§° কৰি আছে। à¦à¦Ÿà¦¾ পà§à§°à¦¾à¦šà¦² নহোৱাকৈ, সকলো\n"
+"আলেখà§à¦¯ তালিকাভà§à¦•à§à¦¤ কৰা হয়। যেতিয়া --active বিকলà§à¦ª ধাৰà§à¦¯à§à¦¯ কৰা হয়, কেৱল "
+"সকà§à§°à¦¿à§Ÿ\n"
+"আলেখà§à¦¯à¦¸à¦®à§‚হ দেখà§à§±à¦¾ হয়।\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"ধাৰà§à¦¯à§à¦¯à¦¤ সংযোগসমূহৰ বাবে বিৱৰণ দেখà§à§±à¦¾à¦“ক। অবিকলà§à¦ªà¦¿à¦¤à§°à§‚পে, দà§à§Ÿà§‹ সà§à¦¥à¦¿à§° সংৰূপ\n"
+"আৰৠসকà§à§°à¦¿à§Ÿ সংযোগ তথà§à¦¯ দেখà§à§±à¦¾ হয়। গà§à¦²à¦¬à§‡à¦² '--fields' বিকলà§à¦ª বà§à¦¯à§±à¦¹à¦¾à§° কৰি আউটপà§à¦Ÿ\n"
+"ফিলà§à¦Ÿà¦¾à§° কৰিব পাৰি। অধিক তথà§à¦¯à§° বাবে হাতপà§à¦¥à¦¿ পৃষà§à¦ à¦¾ চাওক।\n"
+"যেতিয়া --active বিকলà§à¦ª ধাৰà§à¦¯à§à¦¯ কৰা হয়, কেৱল সকà§à§°à¦¿à§Ÿ আলেখà§à¦¯à¦¸à¦®à§‚হ\n"
+"বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয়।\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:305
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'con list': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
-
-#: ../cli/src/connections.c:259
-msgid "Connection details"
-msgstr "সংযোগৰ বিৱৰণসমূহ"
-
-#: ../cli/src/connections.c:484
-msgid "never"
-msgstr "কেতিয়াও নহয়"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"à¦à¦Ÿà¦¾ ডিভাইচত সংযোগ সকà§à§°à¦¿à§Ÿ কৰক। সকà§à§°à¦¿à§Ÿ কৰিব লগিয়া আলেখà§à¦¯ তাৰ নাম, UUID অথবা D-"
+"Bus\n"
+"পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"à¦à¦Ÿà¦¾ সংযোগৰ সৈতে à¦à¦Ÿà¦¾ ডিভাইচ সকà§à§°à¦¿à§Ÿ কৰক। সংযোগ আলেখà§à¦¯ সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡\n"
+"NetworkManager দà§à¦¬à¦¾à§°à¦¾ নিৰà§à¦¬à¦¾à¦šà¦¨ কৰা হয়।\n"
+"\n"
+"ifname - সংযোগ সকà§à§°à¦¿à§Ÿ কৰিব লগিয়া ডিভাইচ ধাৰà§à¦¯à§à¦¯ কৰে\n"
+"ap - AP সংযোগ কৰিবলে ধাৰà§à¦¯à§à¦¯ কৰে (কেৱল Wi-Fi ৰ বাবে বৈধ)\n"
+"nsp - সংযোগ কৰিবলে NSP ধাৰà§à¦¯à§à¦¯ কৰে (কেৱল WiMAX ৰ বাবে বৈধ)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:485 ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714 ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717 ../cli/src/devices.c:418
-#: ../cli/src/devices.c:471 ../cli/src/devices.c:587 ../cli/src/devices.c:588
-#: ../cli/src/devices.c:589 ../cli/src/devices.c:621 ../cli/src/devices.c:647
-#: ../cli/src/devices.c:648 ../cli/src/devices.c:649 ../cli/src/devices.c:650
-#: ../cli/src/devices.c:651 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:700 ../cli/src/settings.c:773
-#: ../cli/src/settings.c:893 ../cli/src/settings.c:1175
-#: ../cli/src/settings.c:1176 ../cli/src/settings.c:1178
-#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1181
-#: ../cli/src/settings.c:1312 ../cli/src/settings.c:1313
-#: ../cli/src/settings.c:1314 ../cli/src/settings.c:1315
-#: ../cli/src/settings.c:1392 ../cli/src/settings.c:1393
-#: ../cli/src/settings.c:1394 ../cli/src/settings.c:1395
-#: ../cli/src/settings.c:1396 ../cli/src/settings.c:1397
-#: ../cli/src/settings.c:1398 ../cli/src/settings.c:1399
-#: ../cli/src/settings.c:1400 ../cli/src/settings.c:1401
-#: ../cli/src/settings.c:1402 ../cli/src/settings.c:1403
-#: ../cli/src/settings.c:1404 ../cli/src/settings.c:1475
-msgid "yes"
-msgstr "হয়"
+#: ../cli/src/connections.c:326
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"à¦à¦Ÿà¦¾ সংযোগক à¦à¦Ÿà¦¾ ডিভাইচৰ পৰা নিষà§à¦•à§à§°à¦¿à§Ÿ কৰক (ডিভাইচক ততোধিক সà§à¦¬-সকà§à§°à¦¿à§Ÿà¦•à§°à¦£à§° পৰা\n"
+"পà§à§°à¦¤à¦¿à§°à§‹à¦§ নকৰি)। নিষà§à¦•à§à§°à¦¿à§Ÿ কৰিব লগিয়া আলেখà§à¦¯ তাৰ নাম, UUID\n"
+"অথবা D-Bus পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়।\n"
+"\n"
-#: ../cli/src/connections.c:485 ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714 ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717 ../cli/src/devices.c:418
-#: ../cli/src/devices.c:471 ../cli/src/devices.c:587 ../cli/src/devices.c:588
-#: ../cli/src/devices.c:589 ../cli/src/devices.c:621 ../cli/src/devices.c:647
-#: ../cli/src/devices.c:648 ../cli/src/devices.c:649 ../cli/src/devices.c:650
-#: ../cli/src/devices.c:651 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:700 ../cli/src/settings.c:702
-#: ../cli/src/settings.c:773 ../cli/src/settings.c:893
-#: ../cli/src/settings.c:1175 ../cli/src/settings.c:1176
-#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1180
-#: ../cli/src/settings.c:1181 ../cli/src/settings.c:1312
-#: ../cli/src/settings.c:1313 ../cli/src/settings.c:1314
-#: ../cli/src/settings.c:1315 ../cli/src/settings.c:1392
-#: ../cli/src/settings.c:1393 ../cli/src/settings.c:1394
-#: ../cli/src/settings.c:1395 ../cli/src/settings.c:1396
-#: ../cli/src/settings.c:1397 ../cli/src/settings.c:1398
-#: ../cli/src/settings.c:1399 ../cli/src/settings.c:1400
-#: ../cli/src/settings.c:1401 ../cli/src/settings.c:1402
-#: ../cli/src/settings.c:1403 ../cli/src/settings.c:1404
-#: ../cli/src/settings.c:1475
-msgid "no"
-msgstr "নহয়"
+#: ../cli/src/connections.c:339
+#, c-format
+#| msgid ""
+#| "Usage: nmcli connection add { ARGUMENTS | help }\n"
+#| "\n"
+#| "ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+#| "\n"
+#| " COMMON_OPTIONS:\n"
+#| " type <type>\n"
+#| " ifname <interface name> | \"*\"\n"
+#| " [con-name <connection name>]\n"
+#| " [autoconnect yes|no]\n"
+#| "\n"
+#| " TYPE_SPECIFIC_OPTIONS:\n"
+#| " ethernet: [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " wifi: ssid <SSID>\n"
+#| " [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " wimax: [mac <MAC address>]\n"
+#| " [nsp <NSP>]\n"
+#| "\n"
+#| " pppoe: username <PPPoE username>\n"
+#| " [password <PPPoE password>]\n"
+#| " [service <PPPoE service name>]\n"
+#| " [mtu <MTU>]\n"
+#| " [mac <MAC address>]\n"
+#| "\n"
+#| " gsm: apn <APN>\n"
+#| " [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " cdma: [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " infiniband: [mac <MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| " [transport-mode datagram | connected]\n"
+#| " [parent <ifname>]\n"
+#| " [p-key <IPoIB P_Key>]\n"
+#| "\n"
+#| " bluetooth: [addr <bluetooth address>]\n"
+#| " [bt-type panu|dun-gsm|dun-cdma]\n"
+#| "\n"
+#| " vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+#| " id <VLAN ID>\n"
+#| " [flags <VLAN flags>]\n"
+#| " [ingress <ingress priority mapping>]\n"
+#| " [egress <egress priority mapping>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " bond: [mode balance-rr (0) | active-backup (1) | balance-xor "
+#| "(2) | broadcast (3) |\n"
+#| " 802.3ad (4) | balance-tlb (5) | balance-alb "
+#| "(6)]\n"
+#| " [primary <ifname>]\n"
+#| " [miimon <num>]\n"
+#| " [downdelay <num>]\n"
+#| " [updelay <num>]\n"
+#| " [arp-interval <num>]\n"
+#| " [arp-ip-target <num>]\n"
+#| "\n"
+#| " bond-slave: master <master (ifname or connection UUID)>\n"
+#| "\n"
+#| " team: [config <file>|<raw JSON data>]\n"
+#| "\n"
+#| " team-slave: master <master (ifname or connection UUID)>\n"
+#| " [config <file>|<raw JSON data>]\n"
+#| "\n"
+#| " bridge: [stp yes|no]\n"
+#| " [priority <num>]\n"
+#| " [forward-delay <2-30>]\n"
+#| " [hello-time <1-10>]\n"
+#| " [max-age <6-40>]\n"
+#| " [ageing-time <0-1000000>]\n"
+#| "\n"
+#| " bridge-slave: master <master (ifname or connection UUID)>\n"
+#| " [priority <0-63>]\n"
+#| " [path-cost <1-65535>]\n"
+#| " [hairpin yes|no]\n"
+#| "\n"
+#| " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+#| " [user <username>]\n"
+#| "\n"
+#| " olpc-mesh: ssid <SSID>\n"
+#| " [channel <1-13>]\n"
+#| " [dhcp-anycast <MAC address>]\n"
+#| "\n"
+#| " IP_OPTIONS:\n"
+#| " [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+#| " [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+#| "\n"
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
-#: ../cli/src/connections.c:560
-msgid "Connection list"
-msgstr "সংযোগ তালিকা"
-
-#: ../cli/src/connections.c:573 ../cli/src/connections.c:1110
-#: ../cli/src/connections.c:1648 ../cli/src/connections.c:1663
-#: ../cli/src/connections.c:1672 ../cli/src/connections.c:1682
-#: ../cli/src/connections.c:1694 ../cli/src/connections.c:1802
-#: ../cli/src/connections.c:1904 ../cli/src/devices.c:1041
-#: ../cli/src/devices.c:1051 ../cli/src/devices.c:1169
-#: ../cli/src/devices.c:1177 ../cli/src/devices.c:1541
-#: ../cli/src/devices.c:1548 ../cli/src/devices.c:1562
-#: ../cli/src/devices.c:1569 ../cli/src/devices.c:1586
-#: ../cli/src/devices.c:1597 ../cli/src/devices.c:1818
-#: ../cli/src/devices.c:1825
+#: ../cli/src/connections.c:417
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "তà§à§°à§à¦Ÿà¦¿: %s তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"সংযোগ আলেখà§à¦¯à¦— à¦à¦Ÿà¦¾ বৈশিষà§à¦Ÿà§à¦¯ পৰিবৰà§à¦¤à¦¨ কৰক।\n"
+"আলেখà§à¦¯à¦• তাৰ নাম, UUID অথবা D-Bus পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়।\n"
+"\n"
-#: ../cli/src/connections.c:586
+#: ../cli/src/connections.c:429
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "তà§à§°à§à¦Ÿà¦¿: %s - à¦à¦¨à§‡ ধৰণৰ কোনো সংযোগ নাই।"
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"à¦à¦Ÿà¦¾ ভাৱবিনিময়ী সমà§à¦ªà¦¾à¦¦à¦•à¦¤ à¦à¦Ÿà¦¾ সà§à¦¥à¦¾à§Ÿà§€ সংযোগ আলেখà§à¦¯ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক।\n"
+"আলেখà§à¦¯à¦• তাৰ নাম, UUID অথবা D-Bus পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"à¦à¦Ÿà¦¾ ভাৱবিনিময়ী সমà§à¦ªà¦¾à¦¦à¦•à¦¤ à¦à¦Ÿà¦¾ নতà§à¦¨ সংযোগ আলেখà§à¦¯ যোগ কৰক।\n"
+"\n"
-#: ../cli/src/connections.c:592 ../cli/src/connections.c:1707
-#: ../cli/src/connections.c:1819 ../cli/src/connections.c:1911
-#: ../cli/src/devices.c:825 ../cli/src/devices.c:905 ../cli/src/devices.c:1065
-#: ../cli/src/devices.c:1183 ../cli/src/devices.c:1610
-#: ../cli/src/devices.c:1831
+#: ../cli/src/connections.c:445
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "অজà§à¦žà¦¾à¦¤ পà§à§°à¦¾à¦šà¦²: %s\n"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"à¦à¦Ÿà¦¾ সংযোগ আলেখà§à¦¯ মচি পেলাওক।\n"
+"আলেখà§à¦¯à¦• তাৰ নাম, UUID অথবা D-Bus পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়।\n"
+"\n"
-#: ../cli/src/connections.c:601
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো বৈধ পà§à§°à¦¾à¦šà¦² ধাৰà§à¦¯à§à¦¯ কৰা হোৱা নাই।"
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection reload { help }\n"
+"\n"
+"ডিসà§à¦•à§° পৰা সকলো সংযোগ ফাইল পà§à¦¨à§° লড কৰক\n"
+"\n"
-#: ../cli/src/connections.c:616 ../cli/src/connections.c:2004
-#: ../cli/src/devices.c:2039 ../cli/src/network-manager.c:596
+#: ../cli/src/connections.c:466
#, c-format
-msgid "Error: %s."
-msgstr "তà§à§°à§à¦Ÿà¦¿: %s।"
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"ডিসà§à¦•à§° পৰা à¦à¦Ÿà¦¾ অথবা অধিক সংযোগ ফাইল লড/পà§à¦¨à§° লড কৰক। ইয়াক à¦à¦Ÿà¦¾ সংযোগ ফাইলক\n"
+"হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡ সমà§à¦ªà¦¾à¦¦à¦¨ কৰাৰ পিছত বà§à¦¯à§±à¦¹à¦¾à§° কৰক, সà§à¦¨à¦¿à¦¶à§à¦šà¦¿à¦¤ কৰিবলে যে "
+"NetworkManager\n"
+"তাৰ শেহতীয়া অৱসà§à¦¥à¦¾à§° বিষয়ে জà§à¦žà¦¾à¦¤à¥¤\n"
+"\n"
-#: ../cli/src/connections.c:629
+#: ../cli/src/connections.c:524
msgid "activating"
msgstr "সকà§à§°à¦¿à§Ÿ কৰা হৈছে"
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:526
msgid "activated"
msgstr "সকà§à§°à¦¿à§Ÿ"
-#: ../cli/src/connections.c:645
+#: ../cli/src/connections.c:530
+msgid "deactivated"
+msgstr "নিষà§à¦•à§à§°à¦¿à§Ÿ"
+
+#: ../cli/src/connections.c:542
msgid "VPN connecting (prepare)"
msgstr "VPN সংযোগ কৰা হৈছে (পà§à§°à¦¸à§à¦¤à§à¦¤ হওক)"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:544
msgid "VPN connecting (need authentication)"
msgstr "VPN সংযোগ কৰা হৈছে (পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:546
msgid "VPN connecting"
msgstr "VPN সংযোগ কৰা হৈছে"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:548
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN সংযোগ কৰা (IP সংৰূপ পà§à§°à¦¾à¦ªà§à¦¤ কৰা)"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:550
msgid "VPN connected"
msgstr "VPN সংযà§à¦•à§à¦¤"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:552
msgid "VPN connection failed"
msgstr "VPN সংযোগ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:554
msgid "VPN disconnected"
msgstr "VPN বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
-#: ../cli/src/connections.c:710 ../cli/src/connections.c:720
-msgid "N/A"
-msgstr "অপà§à§°à¦¯à§‹à¦œà§à¦¯"
+#: ../cli/src/connections.c:637
+msgid "Connection profile details"
+msgstr "সংযোগ আলেখà§à¦¯à§° বিৱৰণ"
-#: ../cli/src/connections.c:914 ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:649 ../cli/src/connections.c:1046
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'con status': %s"
+msgid "Error: 'connection show': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'connection show': %s"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
-#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'con status': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
+#: ../cli/src/connections.c:843
+msgid "never"
+msgstr "কেতিয়াও নহয়"
-#: ../cli/src/connections.c:924
-msgid "Active connection details"
+#. "CAPABILITIES"
+#: ../cli/src/connections.c:844 ../cli/src/connections.c:845
+#: ../cli/src/connections.c:847 ../cli/src/connections.c:906
+#: ../cli/src/connections.c:907 ../cli/src/connections.c:909
+#: ../cli/src/connections.c:6377 ../cli/src/connections.c:6378
+#: ../cli/src/devices.c:606 ../cli/src/devices.c:656 ../cli/src/devices.c:798
+#: ../cli/src/devices.c:799 ../cli/src/devices.c:800 ../cli/src/devices.c:833
+#: ../cli/src/devices.c:862 ../cli/src/devices.c:863 ../cli/src/devices.c:864
+#: ../cli/src/devices.c:865 ../cli/src/devices.c:866 ../cli/src/devices.c:867
+#: ../cli/src/devices.c:868 ../cli/src/network-manager.c:442
+msgid "yes"
+msgstr "হয়"
+
+#: ../cli/src/connections.c:844 ../cli/src/connections.c:845
+#: ../cli/src/connections.c:847 ../cli/src/connections.c:906
+#: ../cli/src/connections.c:907 ../cli/src/connections.c:909
+#: ../cli/src/connections.c:6377 ../cli/src/connections.c:6378
+#: ../cli/src/devices.c:606 ../cli/src/devices.c:656 ../cli/src/devices.c:798
+#: ../cli/src/devices.c:799 ../cli/src/devices.c:800 ../cli/src/devices.c:833
+#: ../cli/src/devices.c:862 ../cli/src/devices.c:863 ../cli/src/devices.c:864
+#: ../cli/src/devices.c:865 ../cli/src/devices.c:866 ../cli/src/devices.c:867
+#: ../cli/src/devices.c:868 ../cli/src/network-manager.c:444
+msgid "no"
+msgstr "নহয়"
+
+#: ../cli/src/connections.c:902 ../cli/src/connections.c:912
+#: ../cli/src/devices.c:596
+msgid "N/A"
+msgstr "অপà§à§°à¦¯à§‹à¦œà§à¦¯"
+
+#: ../cli/src/connections.c:1034
+msgid "Activate connection details"
msgstr "সকà§à§°à¦¿à§Ÿ সংযোগৰ বিৱৰণ"
-#: ../cli/src/connections.c:1060 ../cli/src/connections.c:1722
-#: ../cli/src/connections.c:1834 ../cli/src/connections.c:1925
-#: ../cli/src/devices.c:852 ../cli/src/devices.c:914 ../cli/src/devices.c:1080
-#: ../cli/src/devices.c:1213 ../cli/src/devices.c:1632
-#: ../cli/src/devices.c:1860 ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1267
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "তà§à§°à§à¦Ÿà¦¿: NetworkManager চলি আছে নে নিৰà§à¦§à¦¾à§°à¦£ কৰিব নোৱাৰি: %s।"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "অবৈধ ফিলà§à¦¡ '%s'; অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফিলà§à¦¡à¦¸à¦®à§‚হ: %s আৰৠ%s, অথবা %s,%s"
-#: ../cli/src/connections.c:1064 ../cli/src/connections.c:1726
-#: ../cli/src/connections.c:1838 ../cli/src/connections.c:1929
-#: ../cli/src/devices.c:856 ../cli/src/devices.c:918 ../cli/src/devices.c:1084
-#: ../cli/src/devices.c:1217 ../cli/src/devices.c:1636
-#: ../cli/src/devices.c:1864 ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1282 ../cli/src/connections.c:1290
+#, c-format
+msgid "'%s' has to be alone'"
+msgstr "'%s' অকলে থাকিব লাগিব'"
+
+#: ../cli/src/connections.c:1321 ../cli/src/connections.c:2047
+#: ../cli/src/connections.c:2107 ../cli/src/connections.c:7877
+#: ../cli/src/connections.c:7993 ../cli/src/connections.c:8086
+#: ../cli/src/connections.c:8114 ../cli/src/devices.c:1199
+#: ../cli/src/devices.c:1247 ../cli/src/devices.c:1405
+#: ../cli/src/devices.c:1540 ../cli/src/devices.c:1677
+#: ../cli/src/devices.c:2121 ../cli/src/devices.c:2420
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "তà§à§°à§à¦Ÿà¦¿: NetworkManager চলি থকা নাই।"
-#: ../cli/src/connections.c:1096
-msgid "Active connections"
-msgstr "সকà§à§°à¦¿à§Ÿ সংযোগসমূহ"
+#. Add headers
+#: ../cli/src/connections.c:1351
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager সকà§à§°à¦¿à§Ÿ আলেখà§à¦¯à¦¸à¦®à§‚হ"
+
+#: ../cli/src/connections.c:1352
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager সংযোগ আলেখà§à¦¯à¦¸à¦®à§‚হ"
+
+#: ../cli/src/connections.c:1389 ../cli/src/connections.c:1992
+#: ../cli/src/connections.c:2008 ../cli/src/connections.c:2017
+#: ../cli/src/connections.c:2027 ../cli/src/connections.c:2124
+#: ../cli/src/connections.c:7848 ../cli/src/connections.c:8024
+#: ../cli/src/devices.c:1635 ../cli/src/devices.c:1643
+#: ../cli/src/devices.c:2034 ../cli/src/devices.c:2041
+#: ../cli/src/devices.c:2055 ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2079 ../cli/src/devices.c:2087
+#: ../cli/src/devices.c:2283 ../cli/src/devices.c:2379
+#: ../cli/src/devices.c:2386
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1440
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ সকà§à§°à¦¿à§Ÿ সংযোগ নহয়।"
+msgid "Error: %s - no such connection profile."
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s - à¦à¦‡ ধৰণৰ কোনো সংযোগ আলেখà§à¦¯ নাই।"
-#: ../cli/src/connections.c:1126
+#: ../cli/src/connections.c:1456 ../cli/src/connections.c:2060
+#: ../cli/src/connections.c:8092 ../cli/src/connections.c:8133
+#: ../cli/src/connections.c:8280 ../cli/src/devices.c:2262
+#: ../cli/src/devices.c:2636 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ পà§à§°à¦¾à¦šà¦²: %s"
+msgid "Error: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s।"
-#: ../cli/src/connections.c:1233
+#: ../cli/src/connections.c:1551
#, c-format
msgid "no active connection on device '%s'"
msgstr "ডিভাইচ '%s' ত কোনো সকà§à§°à¦¿à§Ÿ সংযোগ নাই"
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1559
msgid "no active connection or device"
msgstr "কোনো সকà§à§°à¦¿à§Ÿ সংযোগ অথবা ডিভাইচ নাই"
-#: ../cli/src/connections.c:1312
+#: ../cli/src/connections.c:1630
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "ডিভাইচ '%s' সংযোগ '%s' ৰ সৈতে সংগত নহয়"
-#: ../cli/src/connections.c:1315
+#: ../cli/src/connections.c:1633
#, c-format
msgid "no device found for connection '%s'"
msgstr "সংযোগ '%s' ৰ বাবে কোনো ডিভাইচ পোৱা নগল"
-#: ../cli/src/connections.c:1327
+#: ../cli/src/connections.c:1645
msgid "unknown reason"
msgstr "অজà§à¦žà¦¾à¦¤ কাৰণ"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1647 ../cli/src/network-manager.c:288
msgid "none"
msgstr "কোনো নহয়"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1649
msgid "the user was disconnected"
msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦œà¦¨à¦• বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হৈছিল"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1651
msgid "the base network connection was interrupted"
msgstr "ভিতà§à¦¤à¦¿ নেটৱাৰà§à¦• সংযোগ বাধাগà§à§°à¦¸à§à¦¥ হৈছিল"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1653
msgid "the VPN service stopped unexpectedly"
msgstr "VPN সেৱা অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤à¦­à¦¾à§±à§‡ বনà§à¦§ হল"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1655
msgid "the VPN service returned invalid configuration"
msgstr "VPN সেৱায় অবৈধ সংৰূপ ঘà§à§°à¦¾à¦‡ দিলে"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1657
msgid "the connection attempt timed out"
msgstr "সংযোগৰ চেষà§à¦Ÿà¦¾à§° সময় অনà§à¦¤ হল"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1659
msgid "the VPN service did not start in time"
msgstr "VPN সেৱা সময়ত আৰমà§à¦­ নহল"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1661
msgid "the VPN service failed to start"
msgstr "VPN সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1663
msgid "no valid VPN secrets"
msgstr "কোনো বৈধ VPN গোপন তথà§à¦¯ নাই"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1665
msgid "invalid VPN secrets"
msgstr "অবৈধ VPN গোপন তথà§à¦¯"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1667
msgid "the connection was removed"
msgstr "সংযোগ আতৰোৱা হৈছিল"
-#: ../cli/src/connections.c:1366 ../cli/src/connections.c:1571
+#: ../cli/src/connections.c:1684 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:6280
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "সংযোগ সফলভাৱে সকà§à§°à¦¿à§Ÿ কৰা হৈছিল (D-Bus সকà§à§°à¦¿à§Ÿ পথ: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1472
+#: ../cli/src/connections.c:1689
#, c-format
msgid "Error: Connection activation failed."
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল।"
-#: ../cli/src/connections.c:1396
+#: ../cli/src/connections.c:1714
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN সংযোগ সফলভাৱে সকà§à§°à¦¿à§Ÿ কৰা হল (D-Bus সকà§à§°à¦¿à§Ÿ পথ: %s)\n"
-#: ../cli/src/connections.c:1404
+#: ../cli/src/connections.c:1721
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: %s।"
-#: ../cli/src/connections.c:1501 ../cli/src/devices.c:974
+#: ../cli/src/connections.c:1739 ../cli/src/devices.c:1296
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "তà§à§°à§à¦Ÿà¦¿: সময়অনà§à¦¤ %d sec ৰ অৱসান ঘটিল"
-#: ../cli/src/connections.c:1562
+#: ../cli/src/connections.c:1804
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' ঠসকà§à§°à¦¿à§Ÿà¦•à§°à¦£à§° আগত সà§à¦²à§‡à¦‡à¦­à¦¸à¦®à§‚হৰ বাবে অপেকà§à¦·à¦¾ কৰি আছে।"
+
+#: ../cli/src/connections.c:1824
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: %s"
-#: ../cli/src/connections.c:1656 ../cli/src/connections.c:1810
-#: ../cli/src/connections.c:1938
+#: ../cli/src/connections.c:1929 ../cli/src/connections.c:2061
+msgid "unknown error"
+msgstr "অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿"
+
+#: ../cli/src/connections.c:1937
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংযোগ: %s।"
+msgid "unknown device '%s'."
+msgstr "অজà§à¦žà¦¾à¦¤ ডিভাইচ '%s'।"
+
+#: ../cli/src/connections.c:1942
+msgid "neither a valid connection nor device given"
+msgstr "à¦à¦Ÿà¦¾ বৈধ সংযোগ অথবা ডিভাইচ দিয়া হোৱা নাই"
-#: ../cli/src/connections.c:1702 ../cli/src/devices.c:1059
-#: ../cli/src/devices.c:1605
+#: ../cli/src/connections.c:1980 ../cli/src/connections.c:2092
+#: ../cli/src/connections.c:8000
+msgid "Connection (name, UUID, or path): "
+msgstr "সংযোগ (নাম, UUID, অথবা পথ):"
+
+#: ../cli/src/connections.c:2036 ../cli/src/devices.c:1173
+#: ../cli/src/devices.c:1649 ../cli/src/devices.c:2098
+#: ../cli/src/devices.c:2392
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "তà§à§°à§à¦Ÿà¦¿: সময়অনà§à¦¤ মান '%s' বৈধ নহয়।"
+msgid "Unknown parameter: %s\n"
+msgstr "অজà§à¦žà¦¾à¦¤ পà§à§°à¦¾à¦šà¦²: %s\n"
+
+#: ../cli/src/connections.c:2069
+msgid "preparing"
+msgstr "পà§à§°à¦¸à§à¦¤à§à¦¤ কৰা হৈছে"
-#: ../cli/src/connections.c:1715 ../cli/src/connections.c:1827
-#: ../cli/src/connections.c:1918
+#: ../cli/src/connections.c:2097 ../cli/src/connections.c:8005
+#: ../cli/src/connections.c:8120
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "তà§à§°à§à¦Ÿà¦¿: id অথবা uuid ধাৰà§à¦¯à§à¦¯ কৰিব লাগিব।"
+msgid "Error: No connection specified."
+msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো সংযোগ ধাৰà§à¦¯à§à¦¯ কৰা হোৱা নাই।"
-#: ../cli/src/connections.c:1747
+#: ../cli/src/connections.c:2134
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো উপযà§à¦•à§à¦¤ ডিভাইচ পোৱা নগল: %s।"
+msgid "Error: '%s' is not an active connection."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ সকà§à§°à¦¿à§Ÿ সংযোগ নহয়।"
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:2446 ../cli/src/utils.c:507
#, c-format
-msgid "Error: No suitable device found."
-msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো উপযà§à¦•à§à¦¤ ডিভাইচ পোৱা নগল।"
+msgid "'%s' not among [%s]"
+msgstr "'%s' [%s] ত অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নহয়"
-#: ../cli/src/connections.c:1863
+#: ../cli/src/connections.c:2528
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: সংযোগ সকà§à§°à¦¿à§Ÿ নহয়\n"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s': '%s' à¦à¦Ÿà¦¾ বৈধ %s MAC ঠিকনা নহয়।"
+
+#: ../cli/src/connections.c:2529 ../libnm-glib/nm-device.c:1822
+#: ../tui/nm-editor-utils.c:173
+msgid "InfiniBand"
+msgstr "InfiniBand"
-#: ../cli/src/connections.c:1877
+#: ../cli/src/connections.c:2529 ../libnm-glib/nm-device.c:1810
+#: ../tui/nm-editor-utils.c:156
+msgid "Ethernet"
+msgstr "ইথাৰনেট"
+
+#: ../cli/src/connections.c:2552
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ মচি পেলোৱা বà§à¦¯à§°à§à¦¥ হল: %s"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'mtu': '%s' à¦à¦Ÿà¦¾ বৈধ MTU।"
-#: ../cli/src/connections.c:1995
+#: ../cli/src/connections.c:2568
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'con' কমানà§à¦¡ '%s' বৈধ নহয়।"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'parent': '%s' à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়।"
-#: ../cli/src/connections.c:2063
+#: ../cli/src/connections.c:2589
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "তà§à§°à§à¦Ÿà¦¿: D-Bus লে সংযোগ কৰিব নোৱাৰি।"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'p-key': '%s' à¦à¦Ÿà¦¾ বৈধ InfiniBand P_KEY নহয়।"
-#: ../cli/src/connections.c:2071
+#: ../cli/src/connections.c:2605
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "তà§à§°à§à¦Ÿà¦¿: চিসà§à¦Ÿà§‡à¦® সংহতিসমূহ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব নোৱাৰি।"
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"তà§à§°à§à¦Ÿà¦¿: 'mode': '%s' à¦à¦Ÿà¦¾ বৈধ InfiniBand পৰিবহন অৱসà§à¦¥à¦¾ [datagram, connected] "
+"নহয়।"
-#: ../cli/src/connections.c:2081
+#: ../cli/src/connections.c:2621
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব নোৱাৰি: সংহতিসমূহ সেৱা চলি থকা নাই।"
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'flags': '%s' বৈধ নহয়; <0-7> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:106 ../cli/src/devices.c:187
-#: ../cli/src/devices.c:203
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2643
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s': '%s' বৈধ নহয়; %s "
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2750
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s': '%s' বৈধ নহয়; <%u-%u> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2764
+msgid "ethernet"
+msgstr "ইথাৰনেট"
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2764 ../libnm-glib/nm-device.c:1812
+#: ../tui/nm-editor-utils.c:164
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2767
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' সংযোগ ধৰণৰ বাবে ৩ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#. 4
-#: ../cli/src/devices.c:87
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../cli/src/connections.c:2768 ../cli/src/connections.c:2822
+#: ../cli/src/connections.c:2944 ../cli/src/connections.c:2990
+#: ../cli/src/connections.c:3050 ../cli/src/connections.c:3118
+#: ../cli/src/connections.c:3281 ../cli/src/connections.c:3377
+#: ../cli/src/connections.c:3459
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "আপà§à¦¨à¦¿ সিহতক পà§à§°à¦¦à¦¾à¦¨ কৰিব খোজে নে? (হয়/নহয়) [হয়] "
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:200
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2776 ../cli/src/connections.c:2830
+#: ../cli/src/connections.c:2957 ../cli/src/connections.c:3058
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
-#. 6
-#: ../cli/src/devices.c:89
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2787 ../cli/src/connections.c:2841
+#: ../cli/src/connections.c:2920 ../cli/src/connections.c:2968
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2798
+msgid "Cloned MAC [none]: "
+msgstr "কà§à¦²à§Œà¦£à§à¦¡ MAC [none]: "
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' সংযোগ ধৰণৰ বাবে ৫ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2852
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "পৰিবহন অৱসà§à¦¥à¦¾ (datagram অথবা connected) [datagram]: "
+
+#: ../cli/src/connections.c:2865
+msgid "Parent interface [none]: "
+msgstr "উপধায়ক আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  [none]: "
+
+#: ../cli/src/connections.c:2876
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
+
+#: ../cli/src/connections.c:2886
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'parent' ধাৰà§à¦¯à§à¦¯ কৰোতে 'p-key' বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক।\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2911
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:2912 ../cli/src/connections.c:3014
+#: ../cli/src/connections.c:3233 ../cli/src/connections.c:3435
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "আপà§à¦¨à¦¿ ইয়াক পà§à§°à¦¦à¦¾à¦¨ কৰিব বিচাৰে নে? (হয়/নহয়) [হয়] "
+
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:2943
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "'PPPoE' সংযোগ ধৰণৰ বাবে ৪ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:2951 ../cli/src/connections.c:2999
+msgid "Password [none]: "
+msgstr "পাছৱাৰà§à¦¡ [none]: "
+
+#: ../cli/src/connections.c:2953
+msgid "Service [none]: "
+msgstr "সেৱা [à¦à¦•à§‹ নাই]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:2989
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "'মবাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡' সংযোগ ধৰণৰ বাবে ২ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:2997 ../cli/src/connections.c:3442
+msgid "Username [none]: "
+msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦® [none]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3013
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "'বà§à¦²à§à¦Ÿà§à¦¥' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:3022
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ধৰণ (panu, dun-gsm or dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:3030
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'bt-type': '%s' à¦à¦Ÿà¦¾ বৈধ বà§à¦²à§à¦Ÿà§à¦¥ ধৰণ নহয়।\n"
+
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:3049
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' সংযোগ ধৰণৰ বাবে ৪ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:3069
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN ফà§à¦²à§‡à¦—সমূহ (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:3080
+msgid "Ingress priority maps [none]: "
+msgstr "Ingress পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ মেপসমূহ [none]: "
+
+#: ../cli/src/connections.c:3091
+msgid "Egress priority maps [none]: "
+msgstr "Egress পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ মেপসমূহ [none]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:3117
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "'বানà§à¦§à¦¨à§€' সংযোগ ধৰণৰ বাবে বৈকলà§à¦ªà¦¿à¦• তৰà§à¦•à¦¸à¦®à§‚হ আছে।\n"
+
+#: ../cli/src/connections.c:3127
+msgid "Bonding mode [balance-rr]: "
+msgstr "বানà§à¦§à¦¨à§€ অৱসà§à¦¥à¦¾ [balance-rr]: "
+
+#: ../cli/src/connections.c:3143
+msgid "Bonding primary interface [none]: "
+msgstr "বানà§à¦§à¦¨à§€ পà§à§°à¦¾à¦¥à¦®à¦¿à¦• আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  [none]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'primary': '%s' à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়। \n"
+
+#: ../cli/src/connections.c:3154
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "বানà§à¦§à¦¨à§€ মনিটৰিং অৱসà§à¦¥à¦¾ (miimon অথবা arp) [miimon]: "
+
+#: ../cli/src/connections.c:3159
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ বৈধ মনিটৰিং অৱসà§à¦¥à¦¾ নহয়; '%s' অথবা '%s' বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
+
+#: ../cli/src/connections.c:3168
+msgid "Bonding miimon [100]: "
+msgstr "বানà§à¦§à¦¨à§€ miimon [100]: "
+
+#: ../cli/src/connections.c:3171
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'miimon': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <0-%u> নহয়।\n"
+
+#: ../cli/src/connections.c:3179
+msgid "Bonding downdelay [0]: "
+msgstr "বানà§à¦§à¦¨à§€ downdelay [0]: "
+
+#: ../cli/src/connections.c:3182
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'downdelay': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <0-%u> নহয়।\n"
+
+#: ../cli/src/connections.c:3190
+msgid "Bonding updelay [0]: "
+msgstr "বানà§à¦§à¦¨à§€ updelay [0]: "
+
+#: ../cli/src/connections.c:3193
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'updelay': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <0-%u> নহয়।\n"
+
+#: ../cli/src/connections.c:3202
+msgid "Bonding arp-interval [0]: "
+msgstr "বানà§à¦§à¦¨à§€ arp-interval [0]: "
+
+#: ../cli/src/connections.c:3205
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'arp-interval': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <0-%u> নহয়।\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3213
+msgid "Bonding arp-ip-target [none]: "
+msgstr "বানà§à¦§à¦¨à§€ arp-ip-target [none]: "
+
+#. Ask for optional 'team' arguments.
+#: ../cli/src/connections.c:3232
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "'%s' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:3241
+msgid "Team JSON configuration [none]: "
+msgstr "দল JSON সংৰূপ [à¦à¦•à§‹ নাই]: "
+
+#: ../cli/src/connections.c:3260
+msgid "team"
+msgstr "দল"
+
+#: ../cli/src/connections.c:3266
+msgid "team-slave"
+msgstr "দল-সà§à¦²à§‡à¦‡à¦­"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3280
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "'বà§à§°à¦¿à¦œ' সংযোগ ধৰণৰ বাবে ৬ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:3290
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিব নে (হয়/নহয়) [হয়]: "
+
+#: ../cli/src/connections.c:3294
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'stp': '%s'।\n"
+
+#: ../cli/src/connections.c:3302
+msgid "STP priority [128]: "
+msgstr "STP পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ [128]: "
+
+#: ../cli/src/connections.c:3306
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'priority': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <0-%d> নহয়।\n"
+
+#: ../cli/src/connections.c:3314
+msgid "Forward delay [15]: "
+msgstr "ফৰৱাৰà§à¦¡ বিলমà§à¦¬ [15]: "
+
+#: ../cli/src/connections.c:3318
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'forward-delay': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <2-30> নহয়।\n"
+
+#: ../cli/src/connections.c:3327
+msgid "Hello time [2]: "
+msgstr "হেলà§à¦²à§‹ সময় [2]: "
+
+#: ../cli/src/connections.c:3331
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'hello-time': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <1-10> নহয়।\n"
+
+#: ../cli/src/connections.c:3339
+msgid "Max age [20]: "
+msgstr "সৰà§à¦¬à¦¾à¦§à¦¿à¦• বয়স [20]: "
+
+#: ../cli/src/connections.c:3343
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'max-age': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <6-40> নহয়।\n"
+
+#: ../cli/src/connections.c:3351
+msgid "MAC address ageing time [300]: "
+msgstr "MAC ঠিকনা বয়স সময় [300]: "
+
+#: ../cli/src/connections.c:3355
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'ageing-time': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <0-1000000> নহয়।\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3376
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "'bridge-slave' সংযোগ ধৰণৰ বাবে ৩ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:3385
+msgid "Bridge port priority [32]: "
+msgstr "বà§à§°à¦¿à¦œ পৰà§à¦Ÿ পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ [32]: "
+
+#: ../cli/src/connections.c:3398
+msgid "Bridge port STP path cost [100]: "
+msgstr "বà§à§°à¦¿à¦œ পৰà§à¦Ÿ STP পথ কসà§à¦Ÿ [100]: "
+
+#: ../cli/src/connections.c:3412
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "হেয়াৰপিন (হয়/নহয়) [হয়]: "
+
+#: ../cli/src/connections.c:3416
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'hairpin': '%s'।\n"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:3434
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "'VPN' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3458
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "'OLPC Mesh' সংযোগ ধৰণৰ বাবে ২ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+
+#: ../cli/src/connections.c:3467
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC Mesh চেনেল [1]: "
+
+#: ../cli/src/connections.c:3470
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'channel': '%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ <1-13> নহয়।\n"
+
+#: ../cli/src/connections.c:3478
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC ঠিকনা [none]: "
+
+#: ../cli/src/connections.c:3526
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 ঠিকনা (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3528
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 ঠিকনা (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3546
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " ঠিকনা সফলভাৱে যোগ কৰা হল: %s %s\n"
+
+#: ../cli/src/connections.c:3548
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: ঠিকনা ইতিমধà§à¦¯ উপসà§à¦¥à¦¿à¦¤: %s %s\n"
+
+#: ../cli/src/connections.c:3550
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " ঠিকনা: অনà§à¦¤à¦¤ আবৰà§à¦œà¦¨à¦¾ উপেকà§à¦·à¦¾ কৰা হৈছে: '%s'\n"
+
+#: ../cli/src/connections.c:3552 ../cli/src/connections.c:4401
+#: ../cli/src/connections.c:4456 ../cli/src/connections.c:4855
+#: ../cli/src/connections.c:4865
+msgid "Error: "
+msgstr "তà§à§°à§à¦Ÿà¦¿:"
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3570
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "আপà§à¦¨à¦¿ IP ঠিকনা যোগ কৰিব বিচাৰে নে? (হয়/নহয়) [হয়] "
+
+#: ../cli/src/connections.c:3576
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "ঠিকনাসমূহ যোগ কৰা শেষ কৰিবলৈ <Enter> টিপক।\n"
+
+#: ../cli/src/connections.c:3722
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'parent': 'p-key' ৰ অবিহনে বৈধ নহয়।"
+
+#: ../cli/src/connections.c:3778 ../cli/src/connections.c:4771
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3781 ../cli/src/connections.c:4774
+msgid "Error: 'ssid' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'ssid' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:3845
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP নাম: "
+
+#: ../cli/src/connections.c:3848
+msgid "Error: 'nsp' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'nsp' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:3903
+msgid "PPPoE username: "
+msgstr "PPPoE বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦®: "
+
+#: ../cli/src/connections.c:3906
+msgid "Error: 'username' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'username' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:3977
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3980
+msgid "Error: 'apn' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'apn' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:4039
+msgid "Bluetooth device address: "
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ডিভাইচ ঠিকনা:"
+
+#: ../cli/src/connections.c:4042
+msgid "Error: 'addr' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'addr' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:4085
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'bt-type': '%s' বৈধ নহয়; [%s, %s (%s), %s] বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
+
+#: ../cli/src/connections.c:4130
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN উপধায়ক ডিভাইচ অথবা সংযোগ UUID:"
+
+#: ../cli/src/connections.c:4133
+msgid "Error: 'dev' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:4137
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:4140
+msgid "Error: 'id' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'id' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:4146
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'id': '%s' বৈধ নহয়; <0-4095> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
+
+#: ../cli/src/connections.c:4156
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev': '%s' UUID, আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  না, অথবা MAC নহয়।"
+
+#: ../cli/src/connections.c:4291
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'mode': %s."
+
+#: ../cli/src/connections.c:4300
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'primary': '%s' à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়।"
+
+#: ../cli/src/connections.c:4343
+msgid "Bond master: "
+msgstr "বানà§à¦§à¦¨à§€ মাসà§à¦Ÿà¦¾à§°:"
+
+#: ../cli/src/connections.c:4346 ../cli/src/connections.c:4438
+#: ../cli/src/connections.c:4625
+msgid "Error: 'master' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'master' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:4351 ../cli/src/connections.c:4448
+#: ../cli/src/connections.c:4636
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: 'type' বৰà§à¦¤à¦®à¦¾à¦¨à§‡ উপেকà§à¦·à¦¾ কৰা হৈছে। আমি à¦à¦¤à¦¿à§Ÿà¦¾à§° বাবে কেৱল ইথাৰনেট "
+"সà§à¦²à§‡à¦‡à¦­à¦¸à¦®à§‚হ সমৰà§à¦¥à¦¨ কৰো।\n"
+
+#: ../cli/src/connections.c:4435
+msgid "Team master: "
+msgstr "দলৰ গৰাকী:"
+
+#: ../cli/src/connections.c:4538
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'stp': %s।"
+
+#: ../cli/src/connections.c:4622
+msgid "Bridge master: "
+msgstr "বà§à§°à¦¿à¦œ মাসà§à¦Ÿà¦¾à§°:"
+
+#: ../cli/src/connections.c:4630
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'master': '%s' বৈধ UUID অথবা আনà§à¦¤à¦ƒà¦ªà¦·à§à¦  নহয়।"
+
+#: ../cli/src/connections.c:4663
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'hairpin': %s. "
+
+#: ../cli/src/connections.c:4715
+msgid "VPN type: "
+msgstr "VPN ধৰণ:"
+
+#: ../cli/src/connections.c:4718
+msgid "Error: 'vpn-type' is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'vpn-type' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:4729
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'vpn-type': %s।"
+
+#: ../cli/src/connections.c:4787
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'channel': '%s' বৈধ নহয়; <1-13> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
+
+#: ../cli/src/connections.c:4822
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ বৈধ সংযোগ ধৰণ নহয়।"
+
+#: ../cli/src/connections.c:4920
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' সংযোগ যোগ কৰিবলে বà§à¦¯à§°à§à¦¥: (%d) %s"
+
+#: ../cli/src/connections.c:4924
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "সংযোগ '%s' (%s) সফলভাৱে যোগ কৰা হল।\n"
+
+#: ../cli/src/connections.c:4998
+msgid "Connection type: "
+msgstr "সংযোগৰ ধৰণ:"
+
+#: ../cli/src/connections.c:5002
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'type' তৰà§à¦• পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:5008
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংযোগ ধৰণ; %s।"
+
+#: ../cli/src/connections.c:5017
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'autoconnect': %s।"
+
+#: ../cli/src/connections.c:5027
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'save': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'save': %s।"
+
+#: ../cli/src/connections.c:5043
+msgid "Interface name [*]: "
+msgstr "আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ à§° নাম [*]: "
+
+#: ../cli/src/connections.c:5048
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'ifname' তৰà§à¦• পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/connections.c:5055
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'ifname': '%s' অথবা '*' à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নহয়।"
+
+#: ../cli/src/connections.c:5884
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' সংহতি মানসমূহ]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5965
+#, c-format
+#| msgid ""
+#| "---[ Main menu ]---\n"
+#| "goto [<setting> | <prop>] :: go to a setting or property\n"
+#| "remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+#| "value\n"
+#| "set [<setting>.<prop> <value>] :: set property value\n"
+#| "describe [<setting>.<prop>] :: describe property\n"
+#| "print [all] :: print the connection\n"
+#| "verify [all] :: verify the connection\n"
+#| "save :: save the connection\n"
+#| "activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+#| "back :: go one level up (back)\n"
+#| "help/? [<command>] :: print this help\n"
+#| "nmcli <conf-option> <value> :: nmcli configuration\n"
+#| "quit :: exit nmcli\n"
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save [persistent|temporary] :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: à¦à¦Ÿà¦¾ সংহতি অথবা বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ যাওক\n"
+"remove <setting>[.<prop>] | <prop> :: সংহতি আতৰাওক অথবা বৈশিষà§à¦Ÿà§à¦¯à§° মান পà§à¦¨à§° "
+"সংহতি কৰক\n"
+"set [<setting>.<prop> <value>] :: বৈশিষà§à¦Ÿà§à¦¯à§° মান সংহতি কৰক\n"
+"describe [<setting>.<prop>] :: বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দিয়ক\n"
+"print [all] :: সংযোগ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক\n"
+"verify [all] :: সংযোগৰ সতা সতà§à¦¯ নিৰূপণ কৰক\n"
+"save [persistent|temporary] :: সংযোগ সংৰকà§à¦·à¦£ "
+"কৰক\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: সংযোগ সকà§à§°à¦¿à§Ÿ কৰক\n"
+"back :: à¦à¦• সà§à¦¤à§° ওপৰ যাওক (পিছলৈ)\n"
+"help/? [<command>] :: à¦à¦‡ সহায় পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক\n"
+"nmcli <conf-option> <value> :: nmcli সংৰূপ\n"
+"quit :: nmcli পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক\n"
+
+#: ../cli/src/connections.c:5992
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5999
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:6006
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: বৈশিষà§à¦Ÿà§à¦¯ মান সংহতি কৰক\n"
+"\n"
+"à¦à¦‡ কমানà§à¦¡à§‡ বৈশিষà§à¦Ÿà§à¦¯à§° মান সংহতি কৰে।\n"
+"\n"
+"উদাহৰণ: nmcli> set con.id My connection\n"
+
+#: ../cli/src/connections.c:6011
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দিয়ক\n"
+"\n"
+"বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দেখà§à§±à¦¾à§Ÿà¥¤ সকলো NM সংহতি আৰৠবৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ চাবলৈ আপà§à¦¨à¦¿ nm-"
+"settings(5) manual চাব পাৰে।\n"
+
+#: ../cli/src/connections.c:6016
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: সংহতি অথবা সংযোগৰ মান পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক\n"
+"\n"
+"বৰà§à¦¤à¦®à¦¾à¦¨ বৈশিষà§à¦Ÿà§à¦¯ অথবা সমà§à¦ªà§‚ৰà§à¦£ সংযোগ দেখà§à§±à¦¾à§Ÿà¥¤\n"
+"\n"
+"উদাহৰণ: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:6021
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: সংহতি অথবা সংযোগৰ বৈধতা সতা সতà§à¦¯ নিৰূপণ কৰক\n"
+"\n"
+"সংহতি অথবা সংযোগ বৈধ নে আৰৠপিছত সংৰকà§à¦·à¦£ কৰিব পাৰি নে সতা সতà§à¦¯ নিৰূপন কৰে। ই "
+"তà§à§°à§à¦Ÿà¦¿à¦¤ অবৈধ মানসমূহৰ সূচনা দিয়ে।\n"
+"\n"
+"উদাহৰণ: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:6028
+#, c-format
+msgid ""
+"save [persistent|temporary] :: save the connection\n"
+"\n"
+"Sends the connection profile to NetworkManager that either will save it\n"
+"pesistently, or will only keep it in memory. 'save' without an argument\n"
+"means 'save persistent'.\n"
+"Note that once you save the profile persistently those settings are saved\n"
+"across reboot or restart. Subsequent changes can also be temporary or\n"
+"persistent, but any temporary changes will not persist across reboot or\n"
+"restart. If you want to fully remove the persistent connection, the "
+"connection\n"
+"profile must be deleted.\n"
+msgstr ""
+"save [persistent|temporary] :: সংযোগ সংৰকà§à¦·à¦£ কৰক\n"
+"\n"
+"সংযোগ আলেখà§à¦¯à¦• Networkmanager লৈ পঠায় যি ইয়াক অসà§à¦¥à¦¾à§Ÿà§€à¦­à¦¾à§±à§‡ সংৰকà§à¦·à¦£ কৰিব\n"
+"অথবা ইয়াক মেমৰিত থব। à¦à¦Ÿà¦¾ তৰà§à¦• নহোৱাকৈ 'save' ৰ অৰà§à¦¥ হল\n"
+"'save persistent'।\n"
+"মন কৰিব যে à¦à¦¬à¦¾à§° আপà§à¦¨à¦¿ আলেখà§à¦¯à¦• সà§à¦¥à¦¾à§Ÿà§€à¦­à¦¾à§±à§‡ সংৰকà§à¦·à¦£ কৰিলে সেই সংহতিসমূহ "
+"পà§à¦¨à¦¾à§°à¦®à§à¦­à§°\n"
+"পিছতো থাকিব। কà§à§°à¦®à¦¨à§à¦¬à§Ÿ পৰিবৰà§à¦¤à¦¨à¦¸à¦®à§‚হ অসà§à¦¥à¦¾à§Ÿà§€ অথবা সà§à¦¥à¦¾à§Ÿà§€ হব পাৰে\n"
+"কিনà§à¦¤à§ কোনো অসà§à¦¥à¦¾à§Ÿà§€ পৰিবৰà§à¦¤à¦¨ পà§à¦¨à¦¾à§°à¦®à§à¦­à§° পিছত নাথাকিব।\n"
+"যদি আপà§à¦¨à¦¿ সà§à¦¥à¦¾à§Ÿà§€ সংযোগ সমà§à¦ªà§‚ৰà§à¦£à¦­à¦¾à§±à§‡ আতৰাব খোজে, "
+"সংযোগ\n"
+"আলেখà§à¦¯à¦• মচিব লাগিব।\n"
+
+#: ../cli/src/connections.c:6039
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: সংযোগ সকà§à§°à¦¿à§Ÿ কৰক\n"
+"\n"
+"সংযোগ সকà§à§°à¦¿à§Ÿ কৰে।\n"
+"\n"
+"উপলবà§à¦§ বিকলà§à¦ªà¦¸à¦®à§‚হ:\n"
+"<ifname> - ডিভাইচ য'ত সংযোগ সকà§à§°à¦¿à§Ÿ হব\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (আৰমà§à¦­à¦£à¦¿à¦¤ / যোগ কৰক যেতিয়া <ifname> "
+"ধাৰà§à¦¯à§à¦¯à¦¤ নহয়)\n"
+
+#: ../cli/src/connections.c:6046 ../cli/src/connections.c:6196
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: ওপৰ সà§à¦¤à§° মেনà§à¦²à§ˆ যাওক\n"
+"\n"
+
+#: ../cli/src/connections.c:6049
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli কমানà§à¦¡à¦¸à¦®à§‚হৰ বাবে সহায়\n"
+"\n"
+
+#: ../cli/src/connections.c:6052
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli সংৰূপ\n"
+"\n"
+"nmcli সংৰূপণ কৰে। নিমà§à¦¨à¦²à¦¿à¦–িত বিকলà§à¦ªà¦¸à¦®à§‚হ উপলবà§à¦§:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:6072 ../cli/src/connections.c:6202
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক\n"
+"\n"
+"à¦à¦‡ কমানà§à¦¡à§‡ nmcli পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰে। যেতিয়া সমà§à¦ªà¦¾à¦¦à¦¨ কৰি থকা সংযোগ সংৰকà§à¦·à¦£ কৰা নহয়, "
+"বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦• কাৰà§à¦¯à§à¦¯ সà§à¦¨à¦¿à¦¶à§à¦šà¦¿à¦¤ কৰিবলৈ কোৱা হয়।\n"
+
+#: ../cli/src/connections.c:6077 ../cli/src/connections.c:6207
+#: ../cli/src/connections.c:6581 ../cli/src/connections.c:7447
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "অজà§à¦žà¦¾à¦¤ কমানà§à¦¡: '%s'\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6143
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Property menu ]---\n"
+"set [<value>] :: নতà§à¦¨ মান সংহতি কৰক\n"
+"add [<value>] :: বৈশিষà§à¦Ÿà¦²à§ˆ নতà§à¦¨ বিকলà§à¦ª যোগ কৰক\n"
+"change :: বৰà§à¦¤à¦®à¦¾à¦¨ পৰিবৰà§à¦¤à¦¨ কৰক\n"
+"remove [<index> | <option>] :: মান মচি পেলাওক\n"
+"describe :: বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দিয়ক\n"
+"print [setting | connection] :: বৈশিষà§à¦Ÿà§à¦¯ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক (সংহতি/সংয়োগ) "
+"মান(সমূহ)\n"
+"back :: ওপৰ সà§à¦¤à§°à¦²à§ˆ যাওক\n"
+"help/? [<command>] :: à¦à¦‡ সহায় অথবা কমানà§à¦¡à§° বিৱৰণ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক\n"
+"quit :: nmcli পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক\n"
+
+#: ../cli/src/connections.c:6168
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: নতà§à¦¨ মান সংহতি কৰক\n"
+"\n"
+"à¦à¦‡ কমানà§à¦¡à§‡ à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ পà§à§°à¦¦à¦¾à¦¨ কৰা <value> সংহতি কৰে\n"
+
+#: ../cli/src/connections.c:6172
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ নতà§à¦¨ বিকলà§à¦ª যোগ কৰক\n"
+"\n"
+"à¦à¦‡ কমানà§à¦¡à§‡ à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ পà§à§°à¦¦à¦¾à¦¨ কৰা <value> যোগ কৰে, যদি বৈশিষà§à¦Ÿà§à¦¯ à¦à¦Ÿà¦¾ বৈয়াম "
+"ধৰণৰ "
+"হয়। single-valued বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হৰ বাবে ই মান পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ কৰো ('set' ৰ নিচিনা "
+"à¦à¦•à§‡)।\n"
+
+#: ../cli/src/connections.c:6178
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: বৰà§à¦¤à¦®à¦¾à¦¨ মান পৰিবৰà§à¦¤à¦¨ কৰক\n"
+"\n"
+"বৰà§à¦¤à¦®à¦¾à¦¨ মান পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰে আৰৠইয়াক সমà§à¦ªà¦¾à¦¦à¦¨ কৰাৰ অনà§à¦®à¦¤à¦¿ দিয়ে।\n"
+
+#: ../cli/src/connections.c:6182
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: মান মচি পেলাওক\n"
+"\n"
+"বৈশিষà§à¦Ÿà§à¦¯à§° মান আতৰায় (ইয়াক অবিকলà§à¦ªà¦¿à¦¤à¦²à§ˆ সংহতি কৰে)।\n"
+
+#: ../cli/src/connections.c:6186
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দিয়ক\n"
+"\n"
+"বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দেখà§à§±à¦¾à§Ÿà¥¤ সকলো NM সংহতি আৰৠবৈশিষà§à¦Ÿà§à¦¯ চাবলৈ nm-settings(5) "
+"manual "
+"চাওক।\n"
+
+#: ../cli/src/connections.c:6191
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: বৈশিষà§à¦Ÿà§à¦¯ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক (সংহতি, সংযোগ) "
+"মান(সমূহ)\n"
+"\n"
+"বৈশিষà§à¦Ÿà§à¦¯à§° মান দেখà§à§±à¦¾à§Ÿà¥¤ à¦à¦Ÿà¦¾ তৰà§à¦• পà§à§°à¦¦à¦¾à¦¨ কৰি আপà§à¦¨à¦¿ সমà§à¦ªà§‚ৰà§à¦£ সংহতি অথবা সংযোগৰ "
+"বাবে "
+"মানসমূহ পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰিব পাৰিব।\n"
+
+#: ../cli/src/connections.c:6199
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli কমানà§à¦¡à¦¸à¦®à§‚হৰ বাবে সহায়\n"
+"\n"
+
+#: ../cli/src/connections.c:6286
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল।\n"
+
+#: ../cli/src/connections.c:6357
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংহতি '%s' বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক আৰৠআতৰাব নোৱাৰি।\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6375
+#, c-format
+#| msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+
+#: ../cli/src/connections.c:6438
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"সংযোগ আলেখà§à¦¯à¦• অনà§à¦¯ কà§à¦²à¦¾à¦à¦¨à§à¦Ÿà§° পৰা আতৰোৱা হৈছে। আপà§à¦¨à¦¿ ইয়াক পà§à¦¨à§°à§à¦¦à§à¦§à¦¾à§° কৰিবলৈ "
+"মূখà§à¦¯ মেনà§à¦¤ "
+"'save' টাইপ কৰিব পাৰে।\n"
+
+#: ../cli/src/connections.c:6460 ../cli/src/connections.c:6885
+#: ../cli/src/connections.c:6943
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' মান সà§à¦®à§à§±à¦¾à¦“ক:"
+
+#: ../cli/src/connections.c:6477 ../cli/src/connections.c:6496
+#: ../cli/src/connections.c:6891 ../cli/src/connections.c:6950
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বৈশিষà§à¦Ÿà§à¦¯ সংহতি কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s\n"
+
+#: ../cli/src/connections.c:6489
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' মান সমà§à¦ªà¦¾à¦¦à¦¨ কৰক:"
+
+#: ../cli/src/connections.c:6518
+#, c-format
+msgid "Error: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s\n"
+
+#: ../cli/src/connections.c:6524 ../cli/src/connections.c:7029
+#: ../cli/src/connections.c:7070
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' ৰ মান আতৰাবলৈ বà§à¦¯à§°à§à¦¥: %s\n"
+
+#: ../cli/src/connections.c:6545
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "অজà§à¦žà¦¾à¦¤ কমানà§à¦¡ তৰà§à¦•: '%s'\n"
+
+#: ../cli/src/connections.c:6565 ../cli/src/connections.c:7435
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr ""
+"সংযোগ সংৰকà§à¦·à¦£ কৰা হোৱা নাই। আপà§à¦¨à¦¿ সà¦à¦šà¦¾à¦•à§ˆ পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰিব বিচাৰে নে? [y/n]\n"
+
+#: ../cli/src/connections.c:6677
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "উপলবà§à¦§ সংহতিসমূহ: %s\n"
+
+#: ../cli/src/connections.c:6686
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংহতি নাম; %s\n"
+
+#: ../cli/src/connections.c:6703
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "উপলবà§à¦§ বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ: %s\n"
+
+#: ../cli/src/connections.c:6711
+#, c-format
+msgid "Error: property %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: বৈশিষà§à¦Ÿà§à¦¯ %s\n"
+
+#: ../cli/src/connections.c:6752
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"'autoconnect=yes' ৰ সৈতে সংযোগ সংৰকà§à¦·à¦£ কৰা হৈছে। ইয়াৰ ফলসà§à¦¬à§°à§‚প সংযোগৰ "
+"তৎকà§à¦·à¦¨à¦¾à¦¤ "
+"সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ হব।\n"
+"আপà§à¦¨à¦¿ তথাপিও সংৰকà§à¦·à¦£ কৰিব বিচাৰে নে? [হয়]"
+
+#: ../cli/src/connections.c:6826
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "আপà§à¦¨à¦¿ নিমà§à¦¨à¦²à¦¿à¦–িত সংহতিসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ কৰিব পাৰিব: %s\n"
+
+#: ../cli/src/connections.c:6853
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"সংযোগ আলেখà§à¦¯à¦• অনà§à¦¯ কà§à¦²à¦¾à¦à¦¨à§à¦Ÿà§° পৰা আতৰোৱা হৈছে। আপà§à¦¨à¦¿ ইয়াক পà§à¦¨à§°à§à¦¦à§à¦§à¦¾à§° কৰিবলে "
+"'save' "
+"টাইপ কৰিব পাৰে।\n"
+
+#: ../cli/src/connections.c:6883 ../cli/src/connections.c:6941
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' বৈশিষà§à¦Ÿà§à¦¯à§° বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ মানসমূহ: %s\n"
+
+#: ../cli/src/connections.c:6895 ../cli/src/connections.c:7112
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো সংহতি নিৰà§à¦¬à¦¾à¦šà¦¨ কৰা হোৱা নাই; বৈধ হল [%s]\n"
+
+#: ../cli/src/connections.c:6896
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "পà§à§°à¦¥à¦®à¦¤à§‡ 'goto <setting>' বà§à¦¯à§±à¦¹à¦¾à§° কৰক, অথবা <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:6911 ../cli/src/connections.c:7049
+#: ../cli/src/connections.c:7129
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংহতি তৰà§à¦• '%s', বৈধ হল [%s]\n"
+
+#: ../cli/src/connections.c:6921
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বৈশিষà§à¦Ÿà§à¦¯à§° বাবে সংহতি নাই\n"
+
+#: ../cli/src/connections.c:6928
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ বৈশিষà§à¦Ÿà§à¦¯: %s\n"
+
+#: ../cli/src/connections.c:6977
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংহতি '%s'\n"
+
+#: ../cli/src/connections.c:6990
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "আপà§à¦¨à¦¿ নিমà§à¦¨à¦²à¦¿à¦–িত বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ কৰিব পাৰিব: %s\n"
+
+#: ../cli/src/connections.c:7034
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো তৰà§à¦• দিয়া হোৱা নাই, বৈধ হল [%s]\n"
+
+#: ../cli/src/connections.c:7047
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "সংহতি '%s' সংযোগত উপলবà§à¦§ নাই।\n"
+
+#: ../cli/src/connections.c:7088
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ, ই à¦à¦Ÿà¦¾ সংহতি নাম নহয়।\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"পà§à§°à¦¥à¦®à¦¤à§‡ 'goto <setting>' বà§à¦¯à§±à¦¹à¦¾à§° কৰক, অথবা 'describe <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:7154
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ বৈশিষà§à¦Ÿà§à¦¯: %s, অথবা à¦à¦Ÿà¦¾ বৈধ সংহতি নাম নহয়।\n"
+
+#: ../cli/src/connections.c:7178
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' সংহতি উপলবà§à¦§ নহয়\n"
+
+#: ../cli/src/connections.c:7181
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংহতি: '%s'\n"
+
+#: ../cli/src/connections.c:7197
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "সংহতি '%s' সতা সতà§à¦¯ নিৰূপণ কৰক: %s\n"
+
+#: ../cli/src/connections.c:7204
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "সংযোগ সতা সতà§à¦¯ নিৰূপণ কৰক: %s\n"
+
+#: ../cli/src/connections.c:7222
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid argument '%s'\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ তৰà§à¦• '%s'\n"
+
+#: ../cli/src/connections.c:7256
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সংৰকà§à¦·à¦£ কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s\n"
+
+#: ../cli/src/connections.c:7264
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "সংযোগ '%s' (%s) সফলভাৱে সংৰকà§à¦·à¦£ কৰা হল।\n"
+
+#: ../cli/src/connections.c:7265
+#, c-format
+#| msgid "Connection '%s' (%s) successfully added.\n"
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "সংযোগ '%s' (%s) সফলভাৱে আপডেইট কৰা হল।\n"
+
+#: ../cli/src/connections.c:7299
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সতা সতà§à¦¯ নিৰূপণ বà§à¦¯à§°à§à¦¥ হল: %s\n"
+
+#: ../cli/src/connections.c:7300
+msgid "(unknown error)"
+msgstr "(অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿)"
+
+#: ../cli/src/connections.c:7321
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ সংৰকà§à¦·à¦£ হোৱা নাই। পà§à§°à¦¥à¦®à¦¤à§‡ 'save' টাইপ কৰক।\n"
+
+#: ../cli/src/connections.c:7325
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ বৈধ নহয়: %s\n"
+
+#: ../cli/src/connections.c:7336
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি: %s।\n"
+
+#: ../cli/src/connections.c:7346
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সকà§à§°à¦¿à§Ÿ কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s\n"
+
+#: ../cli/src/connections.c:7352
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr "সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰা হৈছে (আগবাà§à¦¿à¦¬à¦²à§ˆ যিকোনো কি টিপক)\n"
+
+#: ../cli/src/connections.c:7390
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: status-line: %s\n"
+
+#: ../cli/src/connections.c:7398
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:7406
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: বেয়া ৰঙ সংখà§à¦¯à¦¾: '%s'; <0-8> বà§à¦¯à§±à¦¹à¦¾à§° কৰক\n"
+
+#: ../cli/src/connections.c:7418
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "বৰà§à¦¤à¦®à¦¾à¦¨ nmcli সংৰূপ:\n"
+
+#: ../cli/src/connections.c:7426
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "অবৈধ সংৰূপ বিকলà§à¦ª '%s'; অনà§à¦®à§‹à¦¦à¦¿à¦¤ [%s]\n"
+
+#: ../cli/src/connections.c:7649
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> কমানà§à¦¡-শাৰী সমà§à¦ªà¦¾à¦¦à¦¨ উপলবà§à¦§ নহয়। বৈশিষà§à¦Ÿà§à¦¯à¦• সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলৈ à¦à¦Ÿà¦¾ শাৰী "
+"সমà§à¦ªà¦¾à¦¦à¦¨ "
+"কৰা লাইবà§à§°à§‡à§°à§€ ইনসà§à¦Ÿà¦² কৰি চাওক। <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7675
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'id', uuid, অথবা 'path' ৰ যিকোনো à¦à¦Ÿà¦¾ পà§à§°à¦¦à¦¾à¦¨ কৰিব পাৰি।"
+
+#: ../cli/src/connections.c:7687 ../cli/src/connections.c:7884
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংযোগ '%s'।"
+
+#: ../cli/src/connections.c:7702
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨ সংযোগ '%s' সমà§à¦ªà¦¾à¦¦à¦¨ কৰা হৈছে; 'type' তৰà§à¦• উপেকà§à¦·à¦¾ কৰা "
+"হৈছে\n"
+
+#: ../cli/src/connections.c:7705
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨ সংযোগ '%s' সমà§à¦ªà¦¾à¦¦à¦¨ কৰা হৈছে; 'con-name' তৰà§à¦• উপেকà§à¦·à¦¾ "
+"কৰা "
+"হৈছে\n"
+
+#: ../cli/src/connections.c:7719
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "বৈধ সংযোগ ধৰণসমূহ: %s\n"
+
+#: ../cli/src/connections.c:7721
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংযোগ ধৰণ; %s\n"
+
+#: ../cli/src/connections.c:7757
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli interactive connection editor |==="
+
+#: ../cli/src/connections.c:7760
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨ '%s' সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰা হৈছে: '%s'"
+
+#: ../cli/src/connections.c:7762
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "à¦à¦Ÿà¦¾ নতà§à¦¨ '%s' সংযোগ যোগ কৰা হৈছে"
+
+#: ../cli/src/connections.c:7764
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "উপলবà§à¦§ কমানà§à¦¡à¦¸à¦®à§‚হৰ বাবে 'help' অথবা '?' টাইপ কৰক।"
+
+#: ../cli/src/connections.c:7766
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "বিৱৰিত বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণৰ বাবে 'describe [<setting>.<prop>]' টাইপ কৰক।"
+
+#: ../cli/src/connections.c:7805
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ '%s' পৰিবৰà§à¦¤à¦¨ কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s"
+
+#: ../cli/src/connections.c:7811
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "সংযোগ '%s' (%s) সফলভাৱে পৰিবৰà§à¦¤à¦¨ কৰা হৈছে।\n"
+
+#: ../cli/src/connections.c:7838
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো তৰà§à¦• পà§à§°à¦¦à¦¾à¦¨ কৰা হোৱা নাই।"
+
+#: ../cli/src/connections.c:7862
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ ID সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+
+#: ../cli/src/connections.c:7867
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "তà§à§°à§à¦Ÿà¦¿: <setting>.<property> তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+
+#: ../cli/src/connections.c:7890
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ <setting>.<property> '%s'।"
+
+#: ../cli/src/connections.c:7905
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ অথবা অনà§à¦®à¦¤à¦¿ নথকা সংহতি '%s': %s।"
+
+#: ../cli/src/connections.c:7926
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ বৈশিষà§à¦Ÿà§à¦¯ '%s': %s।"
+
+#: ../cli/src/connections.c:7932
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s.%s পৰিবৰà§à¦¤à¦¨ কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s।"
+
+#: ../cli/src/connections.c:7962
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ মচি পেলোৱা বà§à¦¯à§°à§à¦¥ হল: %s"
+
+#: ../cli/src/connections.c:8033
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংযোগ: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:8069
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংযোগ(সমূহ) মচি পেলাব নোৱাৰি: %s।"
+
+#: ../cli/src/connections.c:8140
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "ফাইল '%s' লড কৰিব পৰা নগল\n"
+
+#: ../cli/src/connections.c:8267
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ বৈধ 'connection' কমানà§à¦¡ নহয়।"
+
+#: ../cli/src/connections.c:8336 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "তà§à§°à§à¦Ÿà¦¿: চিসà§à¦Ÿà§‡à¦® সংহতিসমূহ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব নোৱাৰি।"
+
+#: ../cli/src/connections.c:8346
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব নোৱাৰি: সংহতিসমূহ সেৱা চলি থকা নাই।"
+
+#. 3
+#. 16
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "সংযোগ"
+
+#. 4
+#. 17
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:108
+#: ../cli/src/devices.c:89
msgid "VENDOR"
-msgstr "VENDOR"
+msgstr "বিকà§à§°à§‡à¦¤à¦¾"
#. 3
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
-msgstr "PRODUCT"
+msgstr "উৎপাদন"
#. 4
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:91
msgid "DRIVER"
-msgstr "DRIVER"
+msgstr "ডà§à§°à¦¾à¦‡à¦­à¦¾à§°"
#. 5
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
-msgstr "DRIVER-VERSION"
+msgstr "ডà§à§°à¦¾à¦‡à¦­à¦¾à§°-সংসà§à¦•à§°à¦£"
#. 6
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
-msgstr "FIRMWARE-VERSION"
+msgstr "ফাৰà§à¦®à§±à§‡à§°-সংসà§à¦•à§°à¦£"
#. 7
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:115
-msgid "REASON"
-msgstr "REASON"
+#. 8
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
#. 10
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:97
+msgid "REASON"
+msgstr "কাৰণ"
+
+#. 11
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:117
+#. 12
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:118
+#. 13
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
-msgstr "NM-MANAGED"
+msgstr "NM-বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#. 14
-#: ../cli/src/devices.c:120
+#. 15
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
-msgstr "FIRMWARE-MISSING"
+msgstr "ফাৰà§à¦®à§±à§‡à§°-সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨"
-#. 15
-#: ../cli/src/devices.c:121
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#. 0
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "উপলবà§à¦§-সংযোগ-পথসমূহ"
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "উপলবà§à¦§-সংযোগসমূহ"
#. 0
-#: ../cli/src/devices.c:130
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
-msgstr "CARRIER-DETECT"
+msgstr "পৰিবহক-চিনাকà§à¦¤"
#. 1
-#: ../cli/src/devices.c:131
+#: ../cli/src/devices.c:126
msgid "SPEED"
-msgstr "SPEED"
+msgstr "গতি"
#. 0
-#: ../cli/src/devices.c:140
+#: ../cli/src/devices.c:135
msgid "CARRIER"
-msgstr "CARRIER"
+msgstr "পৰিবহক"
#. 0
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:565
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:151
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:573
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:164
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:165
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:179
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:180
+#. 3
+#: ../cli/src/devices.c:175
msgid "MODE"
-msgstr "MODE"
+msgstr "অৱসà§à¦¥à¦¾"
-#. 3
-#: ../cli/src/devices.c:181
+#. 4
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:182
+#. 6
+#: ../cli/src/devices.c:178
msgid "RATE"
-msgstr "RATE"
+msgstr "হাৰ"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:183 ../cli/src/devices.c:201
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
-msgstr "SIGNAL"
+msgstr "সংকেত"
-#. 6
-#: ../cli/src/devices.c:184
+#. 8
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../cli/src/devices.c:181
msgid "SECURITY"
-msgstr "SECURITY"
+msgstr "সà§à§°à¦•à§à¦·à¦¾"
-#. 7
-#: ../cli/src/devices.c:185
+#. 10
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:186
+#. 11
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
+#. 14
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#. 0
+#: ../cli/src/devices.c:213
+msgid "SLAVES"
+msgstr "সà§à¦²à§‡à¦‡à¦­à¦¬à§‹à§°"
+
+#. 0
+#: ../cli/src/devices.c:222
+msgid "ID"
+msgstr "ID"
+
+#. 0
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "কà§à¦·à¦®à¦¤à¦¾à¦¸à¦®à§‚হ"
+
+#. 1
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ"
+
+#. 3
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤-বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ"
+
#. 4
-#: ../cli/src/devices.c:188 ../cli/src/devices.c:204
-msgid "ACTIVE"
-msgstr "ACTIVE"
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ"
+
+#. 10
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "বানà§à¦§à¦¨à§€"
+
+#. 11
+#: ../cli/src/devices.c:248 ../libnm-glib/nm-device.c:1830
+#: ../libnm-util/nm-connection.c:1278 ../tui/nm-editor-utils.c:227
+#: ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "সংযোগসমূহ"
-#: ../cli/src/devices.c:223
+#: ../cli/src/devices.c:274
#, c-format
msgid ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli dev { COMMAND | help }\n"
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device status { help }\n"
+"\n"
+"সকলো ডিভাইচৰ অৱসà§à¦¥à¦¾ দেখà§à§±à¦¾à¦“ক।\n"
+"অবিকলà§à¦ªà¦¿à¦¤à¦­à¦¾à§±à§‡, নিমà§à¦¨à¦²à¦¿à¦–িত সà§à¦¤à¦®à§à¦­à¦¬à§‹à§° দেখà§à§±à¦¾ হয়:\n"
+" DEVICE - আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ à§° নাম\n"
+" TYPE - ডিভাইচৰ ধৰণ\n"
+" STATE - ডিভাইচৰ অৱসà§à¦¥à¦¾\n"
+" CONNECTION - ডিভাইচত সকà§à§°à¦¿à§Ÿ সংযোগ (যদি উপলবà§à¦§)\n"
+"পà§à§°à¦¦à§°à§à¦¶à¦¿à¦¤ সà§à¦¤à¦®à§à¦­à¦¬à§‹à§° '--fields' বিশà§à¦¬à¦¬à§à¦¯à¦¾à¦ªà§€ বিকলà§à¦ª বà§à¦¯à§±à¦¹à¦¾à§° কৰি পৰিবৰà§à¦¤à¦¨ কৰিব "
+"পাৰি। "
+"'status' হল\n"
+"অবিকলà§à¦ªà¦¿à¦¤ কমানà§à¦¡, যাৰ অৰà§à¦¥ 'nmcli device' ঠ'nmcli device status' ক কল কৰে।\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"ডিভাইচ(সমূহ) ৰ বিৱৰণ দেখà§à§±à¦¾à¦“ক।\n"
+"কমানà§à¦¡à§‡ সকলো ডিভাইচৰ বাবে, অথবা à¦à¦Ÿà¦¾ নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ ডিভাইচৰ বাবে বিৱৰণ দেখà§à§±à¦¾à§Ÿà¥¤\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ডিভাইচ সংযোগ কৰক।\n"
+"NetworkManager à¦à¦Ÿà¦¾ উপযà§à¦•à§à¦¤ সংযোগক সনà§à¦§à¦¾à¦¨ কৰাৰ চেষà§à¦Ÿà¦¾ কৰিব যাক সকà§à§°à¦¿à§Ÿ কৰা হব।\n"
+"ই লগতে সà§à¦¬-সংযোগ হব নলগা সংযোগসমূহ সনà§à¦§à¦¾à¦¨ কৰিব \n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ডিভাইচ বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤ কৰক।\n"
+"কমানà§à¦¡à§‡ ডিভাইচক বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤ কৰে আৰৠইয়াক বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€/হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤\n"
+"হসà§à¦¤à¦•à§à¦·à§‡à¦ªà§° অবিহনে ততোধিক সংযোগ সà§à¦¬-সকà§à§°à¦¿à§Ÿà¦•à§°à¦£à§° পৰা পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে\n"
"\n"
-#: ../cli/src/devices.c:323
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Wi-Fi ডিভাইচসমূহত কাৰà§à¦¯à§à¦¯ পৰিৱেশন কৰক।\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"উপলবà§à¦§ Wi-Fi অভিগম বিনà§à¦¦à§à¦¬à§‹à§° ধেখà§à§±à¦¾à¦“ক। 'ifname' আৰৠ'bssid' বিকলà§à¦ªà¦¸à¦®à§‚হক\n"
+"à¦à¦Ÿà¦¾ বিশেষ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ à§° বাবে APs দেখà§à§±à¦¾à¦¬à¦²à§ˆ বà§à¦¯à§±à¦¹à¦¾à§° কৰিব পাৰি, অথবা à¦à¦Ÿà¦¾ "
+"নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ "
+"BSSID ৰ সৈতে।\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"SSID অথবা BSSID দà§à¦¬à¦¾à§°à¦¾ ধাৰà§à¦¯à§à¦¯ কৰা à¦à¦Ÿà¦¾ Wi-Fi নেটাৱাৰà§à¦•à¦²à§ˆ সংযোগ কৰক। কমানà§à¦¡à§‡ "
+"à¦à¦Ÿà¦¾ "
+"নতà§à¦¨\n"
+"সংযোগ সৃষà§à¦Ÿà¦¿ কৰে আৰৠতাৰ পিছত à¦à¦Ÿà¦¾ ডিভাইচত সকà§à§°à¦¿à§Ÿ কৰে। ই à¦à¦Ÿà¦¾ GUI কà§à¦²à¦¾à¦à¦¨à§à¦Ÿà¦¤ "
+"SSID "
+"কà§à¦²à¦¿à¦• কৰাৰ\n"
+"à¦à¦Ÿà¦¾ কমানà§à¦¡-লাইন বিকলà§à¦ªà¥¤ কমানà§à¦¡à§‡ সদায় à¦à¦Ÿà¦¾ নতà§à¦¨ সংযোগ সৃষà§à¦Ÿà¦¿ কৰে আৰৠসেয়েহে ই "
+"মূখà§à¦¯à§°à§‚পে "
+"নতà§à¦¨\n"
+"Wi-Fi নেটৱাৰà§à¦•à§° সৈতে সংযোগ কৰাৰ বাবে উপযোগী।\n"
+"যদি নেটৱাৰà§à¦•à§° বাবে à¦à¦Ÿà¦¾ সংযোগ ইতিমধà§à¦¯à§‡ অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨, ইয়াক নিমà§à¦¨à¦²à¦¿à¦–িতৰূপে অনাটো\n"
+"ভাল: nmcli con up id <name>. মন কৰিব যে\n"
+"কেৱল খোলা, WEP আৰৠWPA-PSK নেটৱাৰà§à¦•à¦¸à¦®à§‚হ বৰà§à¦¤à¦®à¦¾à¦¨à§‡ সমৰà§à¦¥à¦¿à¦¤à¥¤ লগতে à¦à¦¨à§‡à¦•à§à§±à¦¾ ভবা হয় "
+"যে\n"
+"IP সংৰূপ DHCP দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰা হয়।\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"অনà§à§°à§‹à¦§ কৰক যে NetworkManager ঠউপলবà§à¦§ অভিগম বিনà§à¦¦à§à¦¬à§‹à§°à§° বাবে তৎকà§à¦·à¦¨à¦¾à¦¤ "
+"পà§à¦¨à§°-সà§à¦•à§‡à¦¨ "
+"কৰে।\n"
+"NetworkManager ঠWi-Fi নেটৱাৰà§à¦•à¦¸à¦®à§‚হ সময়ে সময়ে সà§à¦•à§‡à¦¨ কৰে, কিনà§à¦¤à§ কিছà§à¦®à¦¾à¦¨ "
+"কà§à¦·à§‡à¦¤à§à§°à¦¤\n"
+"সà§à¦•à§‡à¦¨à¦¿à¦‚ হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡ আৰমà§à¦­ কৰাটো উপযোগী হব পাৰে। মন কৰিব যে à¦à¦‡ কমানà§à¦¡à§‡ APs "
+"নেদেখà§à§±à¦¾à§Ÿ\n"
+", তাৰ বাবে 'nmcli device wifi list' বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX ডিভাইচসমূহত কাৰà§à¦¯à§à¦¯ পৰিৱেশন কৰক।\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"উপলবà§à¦§ WiMAX NSPs দেখà§à§±à¦¾à¦“ক। 'ifname' আৰৠ'nsp' বিকলà§à¦ªà¦¸à¦®à§‚হক\n"
+"à¦à¦Ÿà¦¾ নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ à§° বাবে নেটৱাৰà§à¦•à¦¸à¦®à§‚হ তালিকাভà§à¦•à§à¦¤ কৰিবলৈ বà§à¦¯à§±à¦¹à¦¾à§° কৰিব "
+"পাৰি, অথবা "
+"à¦à¦Ÿà¦¾ নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ NSP ৰ সৈতে।\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(শূণà§à¦¯)"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:549
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:550
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:389
-msgid "Encrypted: "
-msgstr "à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦Ÿà§‡à¦¡: "
-
-#: ../cli/src/devices.c:394
-msgid "WEP "
-msgstr "WEP "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:396
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:569
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:398
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:578
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:401
-msgid "Enterprise "
-msgstr "à¦à¦¨à§à¦Ÿà¦¾à§°à¦ªà§à§°à¦¾à¦‡à¦œ "
-
-#: ../cli/src/devices.c:410
+#: ../cli/src/devices.c:594
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:410
-msgid "Infrastructure"
-msgstr "আনà§à¦¤à¦ƒà¦—াথনী"
+#: ../cli/src/devices.c:595
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:445
+#: ../cli/src/devices.c:627
msgid "Home"
msgstr "ঘৰ"
-#: ../cli/src/devices.c:448
+#: ../cli/src/devices.c:630
msgid "Partner"
msgstr "অংশীদাৰ"
-#: ../cli/src/devices.c:451
+#: ../cli/src/devices.c:633
msgid "Roaming"
msgstr "ৰ'মিং"
-#: ../cli/src/devices.c:523
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev list': %s"
-
-#: ../cli/src/devices.c:525
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev list': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
-
-#: ../cli/src/devices.c:534
+#: ../cli/src/devices.c:727
msgid "Device details"
msgstr "ডিভাইচৰ বিৱৰণ"
-#: ../cli/src/devices.c:579 ../cli/src/devices.c:582 ../cli/src/devices.c:1000
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:739
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'device show': %s"
+
+#: ../cli/src/devices.c:789 ../cli/src/devices.c:792 ../cli/src/devices.c:1336
+#: ../cli/src/devices.c:1476
msgid "(unknown)"
msgstr "(অজà§à¦žà¦¾à¦¤)"
-#: ../cli/src/devices.c:591
-msgid "not connected"
-msgstr "সংযà§à¦•à§à¦¤ নহয়"
-
-#: ../cli/src/devices.c:618
+#: ../cli/src/devices.c:829
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:915
msgid "on"
msgstr "অন"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:915
msgid "off"
msgstr "অফ"
-#: ../cli/src/devices.c:842
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev status': %s"
-
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1190
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev status': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
+msgid "Error: 'device status': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'device status': %s"
-#: ../cli/src/devices.c:867
+#. Add headers
+#: ../cli/src/devices.c:1208
msgid "Status of devices"
msgstr "ডিভাইচসমূহৰ অৱসà§à¦¥à¦¾"
-#: ../cli/src/devices.c:898
+#: ../cli/src/devices.c:1239
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgid "Error: invalid extra argument '%s'."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ অতিৰিকà§à¦¤ তৰà§à¦• '%s'।"
-#: ../cli/src/devices.c:939 ../cli/src/devices.c:1104
-#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1892
+#: ../cli/src/devices.c:1267 ../cli/src/devices.c:1424
+#: ../cli/src/devices.c:1559 ../cli/src/devices.c:1698
+#: ../cli/src/devices.c:2442
#, c-format
msgid "Error: Device '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' পোৱা নগল।"
-#: ../cli/src/devices.c:962
+#: ../cli/src/devices.c:1321
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "সফল: ডিভাইচ '%s' সফলভাৱে সকà§à§°à¦¿à§Ÿ কৰা হল।"
+
+#: ../cli/src/devices.c:1335
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥: %s"
+
+#: ../cli/src/devices.c:1352
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "ডিভাইচ '%s' সংযà§à¦•à§à¦¤ কৰা হৈছে।\n"
+
+#: ../cli/src/devices.c:1379 ../cli/src/devices.c:1514
+msgid "Interface: "
+msgstr "আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ :"
+
+#: ../cli/src/devices.c:1383 ../cli/src/devices.c:1392
+#: ../cli/src/devices.c:1518 ../cli/src/devices.c:1527
+#, c-format
+msgid "Error: No interface specified."
+msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ধাৰà§à¦¯à§à¦¯ কৰা হোৱা নাই।"
+
+#: ../cli/src/devices.c:1398 ../cli/src/devices.c:1533
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অতিৰিকà§à¦¤ তৰà§à¦•à§° অনà§à¦®à¦¤à¦¿ নাই: '%s'।"
+
+#: ../cli/src/devices.c:1461
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "সফলতা: ডিভাইচ '%s' সফলভাৱে বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হল।"
-#: ../cli/src/devices.c:997
+#: ../cli/src/devices.c:1473
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' (%s) বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা বà§à¦¯à§°à§à¦¥ হল: %s"
-#: ../cli/src/devices.c:1010
+#: ../cli/src/devices.c:1487
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "ডিভাইচ '%s' বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হৈছে।\n"
-#: ../cli/src/devices.c:1073
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "তà§à§°à§à¦Ÿà¦¿: iface ধাৰà§à¦¯à§à¦¯ কৰিব লাগিব।"
+#: ../cli/src/devices.c:1630
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi সà§à¦•à§‡à¦¨ তালিকা"
-#: ../cli/src/devices.c:1203
+#: ../cli/src/devices.c:1668
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev wifi': %s"
+msgid "Error: 'device wifi': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wifi': %s"
-#: ../cli/src/devices.c:1205
-#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev wifi': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
-
-#: ../cli/src/devices.c:1228
-msgid "WiFi scan list"
-msgstr "WiFi সà§à¦•à§‡à¦¨ তালিকা"
-
-#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1319
+#: ../cli/src/devices.c:1721 ../cli/src/devices.c:1790
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: bssid '%s' ৰ সৈতে অভিগম বিনà§à¦¦à§ পোৱা নগল।"
-#: ../cli/src/devices.c:1282
+#: ../cli/src/devices.c:1745 ../cli/src/devices.c:2137
+#: ../cli/src/devices.c:2299
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' à¦à¦Ÿà¦¾ WiFi ডিভাইচ নহয়।"
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' à¦à¦Ÿà¦¾ Wi-Fi ডিভাইচ নহয়।"
-#: ../cli/src/devices.c:1350 ../cli/src/devices.c:1396
+#: ../cli/src/devices.c:1827 ../cli/src/devices.c:1874
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' ৰ সৈতে সংযোগ সৃষà§à¦Ÿà¦¿ কৰা হল আৰৠডিভাইচ '%s' ড সকà§à§°à¦¿à§Ÿ কৰা হল\n"
-#: ../cli/src/devices.c:1355
+#: ../cli/src/devices.c:1831
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: (%d) %s।"
-#: ../cli/src/devices.c:1380
+#: ../cli/src/devices.c:1856
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à§°à¦¿à§Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: (%d) %s"
-#: ../cli/src/devices.c:1388
+#: ../cli/src/devices.c:1864
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "তà§à§°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à§°à¦¿à§Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/devices.c:1532
+#: ../cli/src/devices.c:2019
+msgid "SSID or BSSID: "
+msgstr "SSID অথবা BSSID: "
+
+#: ../cli/src/devices.c:2024
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "তà§à§°à§à¦Ÿà¦¿: SSID অথবা BSSID সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
-#: ../cli/src/devices.c:1555
+#: ../cli/src/devices.c:2048
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "তà§à§°à§à¦Ÿà¦¿: bssid তৰà§à¦• মান '%s' à¦à¦Ÿà¦¾ বৈধ BSSID নহয়।"
-#: ../cli/src/devices.c:1579
+#: ../cli/src/devices.c:2072
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
msgstr ""
"তà§à§°à§à¦Ÿà¦¿: wep-key-type তৰà§à¦• মান '%s' অবৈধ, 'key' অথবা 'phrase' বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#: ../cli/src/devices.c:1619
+#: ../cli/src/devices.c:2092
+#, c-format
+msgid "Error: %s: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s: %s।"
+
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "তà§à§°à§à¦Ÿà¦¿: (%s) লে সংযোগ কৰিব লগিয়া BSSID bssid তৰà§à¦• (%s) পৰা পৃথক।"
-#: ../cli/src/devices.c:1625
+#: ../cli/src/devices.c:2113
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "তà§à§°à§à¦Ÿà¦¿: পà§à§°à¦¾à¦šà¦² '%s' SSID অথবা BSSID নহয়।"
-#: ../cli/src/devices.c:1654
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' à¦à¦Ÿà¦¾ Wi-Fi ডিভাইচ নহয়।"
-
-#: ../cli/src/devices.c:1656
+#: ../cli/src/devices.c:2139 ../cli/src/devices.c:2301
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো Wi-Fi ডিভাইচ পোৱা নগল।"
-#: ../cli/src/devices.c:1674
+#: ../cli/src/devices.c:2157
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "তà§à§°à§à¦Ÿà¦¿: SSID '%s' ৰ সৈতে কোনো নেটৱাৰà§à¦• পোৱা নগল।"
-#: ../cli/src/devices.c:1676
+#: ../cli/src/devices.c:2159
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "তà§à§°à§à¦Ÿà¦¿: BSSID '%s' ৰ সৈতে কোনো অভিগম বিনà§à¦¦à§ পোৱা নগল।"
-#: ../cli/src/devices.c:1774
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev wifi' কমানà§à¦¡ '%s' বৈধ নহয়।"
-
-#: ../cli/src/devices.c:1850
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev wimax': %s"
+#: ../cli/src/devices.c:2198
+msgid "Password: "
+msgstr "পাছৱাৰà§à¦¡:"
-#: ../cli/src/devices.c:1852
+#: ../cli/src/devices.c:2327
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev wimax': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wifi' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/devices.c:1875
+#: ../cli/src/devices.c:2374
msgid "WiMAX NSP list"
msgstr "WiMAX NSP তালিকা"
-#: ../cli/src/devices.c:1912
+#: ../cli/src/devices.c:2411
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wimax': %s"
+
+#: ../cli/src/devices.c:2465
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: নাম '%s' ৰ সৈতে NSP পোৱা নগল।"
-#: ../cli/src/devices.c:1923
+#: ../cli/src/devices.c:2478
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' à¦à¦Ÿà¦¾ WiMAX ডিভাইচ নহয়।"
-#: ../cli/src/devices.c:1954
+#: ../cli/src/devices.c:2516
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: nsp '%s' ৰ সৈতে অভিগম বিনà§à¦¦à§ পোৱা নগল।"
-#: ../cli/src/devices.c:1981
+#: ../cli/src/devices.c:2548
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev wimax' কমানà§à¦¡ '%s' বৈধ নহয়।"
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wimax' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/devices.c:2031
+#: ../cli/src/devices.c:2627
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev' কমানà§à¦¡ '%s' বৈধ নহয়।"
#: ../cli/src/network-manager.c:37
msgid "RUNNING"
-msgstr "RUNNING"
+msgstr "চলি থকা"
#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
-msgstr "VERSION"
+msgstr "সংসà§à¦•à§°à¦£"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "আৰমà§à¦­à¦£à¦¿"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+msgid "CONNECTIVITY"
+msgstr "সংযোগ"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "নেটৱাৰà§à¦•à¦¿à¦‚"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
-msgstr "PERMISSION"
+msgstr "অনà§à¦®à¦¤à¦¿"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
-msgstr "VALUE"
+msgstr "মান"
+
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "সà§à¦¤à§°"
-#: ../cli/src/network-manager.c:77
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "ডমেইন"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli nm { COMMAND | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli general status { help }\n"
+"\n"
+"NetworkManager ৰ সৰà§à¦¬à¦®à§à¦  অৱসà§à¦¥à¦¾ দেখà§à§±à¦¾à¦“ক।\n"
+"'status' হল অবিকলà§à¦ªà¦¿ কাৰà§à¦¯à§à¦¯, যাৰ অৰà§à¦¥ 'nmcli gen' ঠ'nmcli gen status' ক কল "
+"কৰে\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦® পà§à§°à¦¾à¦ªà§à¦¤ কৰক অথবা পৰিবৰà§à¦¤à¦¨ কৰক।\n"
+"কোনো তৰà§à¦• নাথাকিলে, ই বৰà§à¦¤à¦®à¦¾à¦¨à§‡ সংৰূপিত হসà§à¦Ÿà¦¨à¦¾à¦® পà§à§°à¦¿à¦¨à§à¦Ÿ কৰে। যেতিয়া আপà§à¦¨à¦¿\n"
+"à¦à¦Ÿà¦¾ হসà§à¦Ÿà¦¨à¦¾à¦® পà§à§°à§‡à§°à¦£ কৰে, NetworkManager ঠইয়াক নতà§à¦¨ সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦® "
+"ৰূপে "
+"সংহতি কৰিব।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli general permissions { help }\n"
+"\n"
+"পà§à§°à¦®à¦¾à¦£à§€à¦¤ কাৰà§à¦¯à§à¦¯à¦¸à¦®à§‚হৰ বাবে কলাৰ অনà§à¦®à¦¤à¦¿ দেখà§à§±à¦¾à¦“ক।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"NetworkManager লগিং সà§à¦¤à§° আৰৠডমেইনসমূহ পà§à§°à¦¾à¦ªà§à¦¤ কৰক অথবা পৰিবৰà§à¦¤à¦¨ কৰক।\n"
+"কোনো তৰà§à¦• নহোৱাকৈ বৰà§à¦¤à¦®à¦¾à¦¨ লগিং সà§à¦¤à§° আৰৠডমেইনসমূহ দেখà§à§±à¦¾ হয়। লগিং অৱসà§à¦¥à¦¾ "
+"পৰিবৰà§à¦¤à¦¨\n"
+"কৰিবলৈ, সà§à¦¤à§° আৰà§/অথবা ডমেইন পà§à§°à¦¦à¦¾à¦¨ কৰক। সমà§à¦­à¦¾à¦¬à§à¦¯ লগিং ডমেইনসমূহৰ তালিকাৰ বাবে "
+"অনà§à¦—à§à§°à¦¹ কৰি\n"
+"man পৃষà§à¦ à¦¾ চাওক\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli networking on { help }\n"
+"\n"
+"নেটৱাৰà§à¦•à¦¿à¦‚ অন কৰক।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli networking off { help }\n"
+"\n"
+"নেটৱাৰà§à¦•à¦¿à¦‚ অফ কৰক।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"নেটৱাৰà§à¦• সংযোগ অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক।\n"
+"বৈকলà§à¦ªà¦¿à¦• 'check' তৰà§à¦•à§Ÿ NetworkManager ক সংযোগ পà§à¦¨à§°-নিৰীকà§à¦·à¦£ কৰিব দিয়ে।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"সকলো ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা সিহতক অন/অফ কৰক।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Wi-Fi ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা ইয়াক অন/অফ কৰক।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"মবাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা ইয়াক অন/অফ কৰক।\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"WiMAX ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা ইয়াক অন/অফ কৰক।\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "নিদà§à§°à¦¿à¦¤"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "সংযোগ কৰা হৈছে"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "সংযà§à¦•à§à¦¤ (কেৱল সà§à¦¥à¦¾à¦¨à§€à§Ÿ)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "সংযà§à¦•à§à¦¤ (কেৱল ছাইট)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হৈছে"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "পৰà§à¦Ÿà§‡à¦²"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "সীমিত"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "পূৰà§à¦£"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'nm status': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: কেৱল à¦à¦‡ ফিলà§à¦¡à¦¸à¦®à§‚হ অনà§à¦®à§‹à¦¦à¦¿à¦¤: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "সামৰà§à¦¥à¦¬à¦¾à¦¨"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "অসামৰà§à¦¥à¦¬à¦¾à¦¨"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "NetworkManager ৰ অৱসà§à¦¥à¦¾"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "চলি আছে"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "চলি থকা নাই"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "আৰমà§à¦­ কৰা হৈছে"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "আৰমà§à¦­ কৰা হল"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'nm permissions': %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'nm permissions': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'general permissions': %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "NetworkManager অনà§à¦®à¦¤à¦¿à¦¸à¦®à§‚হ"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: চিসà§à¦Ÿà§‡à¦® বাচৰ সৈতে সংযোগ কৰিব পৰা নগল: %s"
+msgid "Error: 'general logging': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'general logging': %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "তà§à§°à§à¦Ÿà¦¿: D-Bus অবজেকà§à¦Ÿ পà§à§°à¦•à§à¦¸à¦¿ সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল।"
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager লগিং"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "নিদà§à§°à¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿: %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: '--fields' মান '%s' ইয়াত বৈধ নহয়; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: লগিং সংহতি কৰিবলৈ অভিগম নাকচ কৰা হৈছে; %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "নেটৱাৰà§à¦•à¦¿à¦‚ সামৰà§à¦¥à¦¬à¦¾à¦¨"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ 'enable' পà§à§°à¦¾à¦šà¦²: '%s'; 'true' অথবা 'false' বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'general' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "তà§à§°à§à¦Ÿà¦¿: নিদà§à§°à¦¾ অৱসà§à¦¥à¦¾ NetworkManager দà§à¦¬à¦¾à§°à¦¾ à¦à¦•à§à¦¸à¦ªà§‹à§°à§à¦Ÿ কৰা নহয়।"
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '--fields' মান '%s' ইয়াত বৈধ নহয় (অনà§à¦®à§‹à¦¦à¦¿à¦¤ মান: %s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ 'sleep' পà§à§°à¦¾à¦šà¦²: '%s'; 'true' অথবা 'false' বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ '%s' তৰà§à¦•: '%s' (on/off বà§à¦¯à§±à¦¹à¦¾à§° কৰক)।"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi সামৰà§à¦¥à¦¬à¦¾à¦¨"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "সংযোগ"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ 'wifi' পà§à§°à¦¾à¦šà¦²: '%s'।"
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "নেটৱাৰà§à¦•à¦¿à¦‚"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN সামৰà§à¦¥à¦¬à¦¾à¦¨"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'networking connectivity' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ 'wwan' পà§à§°à¦¾à¦šà¦²: '%s'।"
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'networking' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX সামৰà§à¦¥à¦¬à¦¾à¦¨"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "ৰেডিঅ' চà§à¦‡à¦šà¦¸à¦®à§‚হ"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ 'wimax' পà§à§°à¦¾à¦šà¦²: '%s'।"
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi ৰেডিঅ' চà§à¦‡à¦š"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN ৰেডিঅ' চà§à¦‡à¦š"
+
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX ৰেডিঅ' চà§à¦‡à¦š"
-#: ../cli/src/network-manager.c:585
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'nm' কমানà§à¦¡ '%s' বৈধ নহয়।"
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'radio' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1650,13 +4260,18 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
"বà§à¦¯à§±à¦¹à¦¾à§°: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1670,232 +4285,781 @@ msgstr ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:121
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবজেকà§à¦Ÿ '%s' অজà§à¦žà¦¾à¦¤, 'nmcli help' চেষà§à¦Ÿà¦¾ কৰি চাওক।"
-#: ../cli/src/nmcli.c:151
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '--terse' দà§à¦¬à¦¿à¦¤à§€à§Ÿà¦¬à¦¾à§° ধাৰà§à¦¯à§à¦¯ কৰা হৈছে।"
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '--terse' '--pretty' ৰ সৈতে পাৰসà§à¦ªà§°à¦¿à¦•à¦­à¦¾à§±à§‡ সà§à¦•à§€à§Ÿà¦¾à¥¤"
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '--pretty' দà§à¦¬à¦¿à¦¤à§€à§Ÿ বাৰত ধাৰà§à¦¯à§à¦¯ কৰা হয়।"
-#: ../cli/src/nmcli.c:169
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ªn '--pretty' '--terse' ৰ সৈতে পাৰসà§à¦ªà§°à¦¿à¦•à¦­à¦¾à§±à§‡ সূকীয়া।"
-#: ../cli/src/nmcli.c:179 ../cli/src/nmcli.c:195
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§° বাবে তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
-#: ../cli/src/nmcli.c:188 ../cli/src/nmcli.c:204
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' '%s' বিকলà§à¦ªà§° বাবে বৈধ তৰà§à¦• নহয়।"
-#: ../cli/src/nmcli.c:211
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà¦¸à¦®à§‚হৰ বাবে কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
-#: ../cli/src/nmcli.c:219
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§° বাবে '%s' à¦à¦Ÿà¦¾ বৈধ সময়অনà§à¦¤ নহয়।"
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli সà¦à¦œà§à¦²à¦¿, সংসà§à¦•à§°à¦£ %s\n"
-#: ../cli/src/nmcli.c:225
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '%s' অজà§à¦žà¦¾à¦¤, 'nmcli -help' চেষà§à¦Ÿà¦¾ কৰি চাওক।"
-#: ../cli/src/nmcli.c:244
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"তà§à§°à§à¦Ÿà¦¿: nmcli ক সংকেত %d দà§à¦¬à¦¾à§°à¦¾ অনà§à¦¤ কৰা হৈছে।"
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "সংকেত মাসà§à¦• সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "সংকেত %d পà§à§°à¦¾à¦ªà§à¦¤ হৈছে, বনà§à¦§ কৰা হৈছে..."
+msgid "Failed to create signal handling thread: %d"
+msgstr "সংকেত নিয়নà§à¦¤à§à§°à¦£ থà§à§°à§‡à¦¡ সৃষà§à¦Ÿà¦¿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
-#: ../cli/src/nmcli.c:269
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "তà§à§°à§à¦Ÿà¦¿: NMClient অবজেকà§à¦Ÿ সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল।"
-#: ../cli/src/nmcli.c:285
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "সফলতা"
-#: ../cli/src/settings.c:525
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit পাচফà§à§°à§‡à¦‡à¦›)"
-#: ../cli/src/settings.c:530 ../cli/src/settings.c:658
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (অজà§à¦žà¦¾à¦¤)"
-#: ../cli/src/settings.c:556
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (অজà§à¦žà¦¾à¦¤)"
-#: ../cli/src/settings.c:562
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "যিকোনো, "
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:588
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:606
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:612
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (অসামৰà§à¦¥à¦¬à¦¾à¦¨)"
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (সামৰà§à¦¥à¦¬à¦¾à¦¨, ৰাজহà§à§±à¦¾ IP পছনà§à¦¦)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (সামৰà§à¦¥à¦¬à¦¾à¦¨, অসà§à¦¥à¦¾à§Ÿà§€ IP পছনà§à¦¦)"
-#: ../cli/src/settings.c:777 ../cli/src/settings.c:973
-#: ../cli/src/settings.c:1682
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (à¦à¦•à§‹ নাই)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "অভিকৰà§à¦¤à¦¾-সà§à¦¬à¦¤à§à¦¬à¦¤,"
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "সংৰকà§à¦·à¦¿à¦¤ নহয়,"
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ নহয়,"
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (অসামৰà§à¦¥à¦¬à¦¾à¦¨)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "সামৰà§à¦¥à¦¬à¦¾à¦¨, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "পà§à§°à¦šà¦¾à§°, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "ইচà§à¦›à§à¦•, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (অসংহিত)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "অবিকলà§à¦ªà¦¿à¦¤"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "আপà§à¦¨à¦¿ '%s' ক '%s' লৈ সংহতি কৰিব খোজে নে? [yes]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "আপà§à¦¨à¦¿ '%s' ক পৰিষà§à¦•à¦¾à§° কৰিব খোজে নে? [yes]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' বৈধ নহয়"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' বৈধ নহয়; <%d-%d> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' বৈধ নহয়; <%d-%d> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' বৈধ নহয়; <option>=<value> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "সূচী '%s' বৈধ নহয়"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "আতৰাবলৈ কোনো বসà§à¦¤à§ নাই"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "সূচী '%d' বিসà§à¦¤à¦¾à§° <0-%d> ত নাই"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "অবৈধ বিকলà§à¦ª '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ বিকলà§à¦ª"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ নহয় (অথবা বিসà§à¦¤à¦¾à§°à§° বাহিৰ)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ ইথাৰনেট MAC নহয়"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' à¦à¦Ÿà¦¾ সংখà§à¦¯à¦¾ নহয়"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ হেকà§à¦¸ আখৰ নহয়"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ MAC নহয়"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ UUID নহয়"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ অনà§à¦®à¦¤à¦¿à¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক। নিমà§à¦¨à¦²à¦¿à¦–িত ধৰণত বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ "
+"নামসমূহৰ "
+"à¦à¦Ÿà¦¾ তালিকা আছে:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"বসà§à¦¤à§à¦¬à§‹à§°à¦• কমা অথবা সà§à¦ªà§‡à¦‡à¦š দà§à¦¬à¦¾à§°à¦¾ পৃথক কৰিব পাৰি।\n"
+"\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ মাসà§à¦Ÿà¦¾à§° নহয়; ifname অথবা সংযোগ UUID বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি পাছৱাৰà§à¦¡ পà§à§°à¦¦à¦¾à¦¨ কৰা হোৱা নাই"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"à¦à¦Ÿà¦¾ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি অথবা কি পাছৱাৰà§à¦¡à¦²à§ˆ পথ সà§à¦®à§à§±à¦¾à¦“ক (যদি à¦à¦¤à¦¿à§Ÿà¦¾à¦“ সংহতি কৰা হোৱা "
+"নাই):\n"
+" <file path> [<password>]\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"বাইটক হেকà§à¦¸à¦¾à¦¡à§‡à¦šà¦¿à¦®à§‡à¦² মানসমূহৰ à¦à¦Ÿà¦¾ তালিকা হিচাপে সà§à¦®à§à§±à¦¾à¦“ক।\n"
+"দà§à¦Ÿà¦¾ বিনà§à¦¯à¦¾à¦¸ অনà§à¦®à§‹à¦¦à¦¿à¦¤:\n"
+"(a) হেকà§à¦¸à¦¾à¦¡à§‡à¦šà¦¿à¦®à§‡à¦² ডিজিটসমূহৰ à¦à¦Ÿà¦¾ সà§à¦Ÿà§à§°à¦¿à¦‚, য'ত দà§à¦Ÿà¦¾ ডিজিট à¦à¦Ÿà¦¾ বাইট বà§à¦œà¦¾à§Ÿ\n"
+"(b) সà§à¦ªà§‡à¦‡à¦š-পৃথকিত হেকà§à¦¸à¦¾à¦¡à§‡à¦šà¦¿à¦®à§‡à¦² ডিজিটসমূহৰ বাইটৰ তালিকা (বৈকলà§à¦ªà¦¿à¦• 0x/0X "
+"উপসৰà§à¦—, আৰৠ"
+"বৈকলà§à¦ªà¦¿à¦• লিডিং 0)।\n"
+"\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"নিমà§à¦¨à¦²à¦¿à¦–িত বিনà§à¦¯à¦¾à¦¸à¦¤ বানà§à¦§à¦¨à§€ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
+" option = <value>, option = <value>,... \n"
+"বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হ হল: %s\n"
+"'mode' ক à¦à¦Ÿà¦¾ নাম অথবা সংখà§à¦¯à¦¾ হিচাপে পà§à§°à¦¦à¦¾à¦¨ কৰিব পাৰি:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ InfiniBand MAC নহয়"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ IBoIP P_Key নহয়"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হৰ IPv4 ঠিকনাসমূহৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক।\n"
+"\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' বৈধ নহয় (ip[/prefix] [gateway] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"নিমà§à¦¨à¦²à¦¿à¦–িত বিনà§à¦¯à¦¾à¦¸à¦¤ IPv4 ঠিকনাসমূহৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 32 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' বৈধ নহয় (ip/[prefix] next-hop [metric] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"নিমà§à¦¨à¦²à¦¿à¦–িত ধৰণত বিনà§à¦¯à¦¾à¦¸à¦¿à¦¤ IPv4 পথবোৰৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 32 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 0 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"\n"
+"উদাহৰণ: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হৰ IPv6 ঠিকনাসমূহৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক। যদি IPv6 সংৰূপ পদà§à¦§à¦¤à¦¿ "
+"'auto' "
+"তেনà§à¦¤à§‡ à¦à¦‡ DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ সংৰূপ দà§à¦¬à¦¾à§°à¦¾ ঘà§à§°à¦¾à¦‡ দিয়ালৈ সংযোজন কৰা হয় "
+"(যদি "
+"উপলবà§à¦§)। DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হক 'shared' অথবা 'link-local' IPv6 সংৰূপ পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হৰ "
+"সৈতে "
+"বà§à¦¯à§±à¦¹à¦¾à§° কৰিব নোৱাৰি, যিহেতৠকোনো আপসà§à¦Ÿà§à§°à¦¿à¦® নেটৱাৰà§à¦• উপলবà§à¦§ নাই। অনà§à¦¯ সকলো "
+"IPv6 সংৰূপ "
+"পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হত, à¦à¦‡ DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হক à¦à¦‡ সংযোগৰ বাবে à¦à¦•à¦®à¦¾à¦¤à§à§° উপলবà§à¦§ DNS "
+"চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ "
+"হিচাপে বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয়।\n"
+"\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"নিমà§à¦¨à¦²à¦¿à¦–িত বিনà§à¦¯à¦¾à¦¸à¦¤ IPv6 ঠিকনাসমূহৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 128 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"\n"
+"উদাহৰণসà§à¦¬à§°à§‚প: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr "'%s' বৈধ নহয় (<dest IP>/prefix <next-hop IP> [metric] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"নিমà§à¦¨à¦²à¦¿à¦–িত ধৰণত বিনà§à¦¯à¦¾à¦¸à¦¿à¦¤ IPv6 পথবোৰৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 128 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 0 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"\n"
+"উদাহৰণ: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:db8:"
+"beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' বৈধ নহয়; 0, 1, অথবা 2 বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়; <1-13> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' বৈধ নহয়; [e, o, n] বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli ঠদà§à§Ÿà§‹ পà§à§°à¦¤à§à¦¯à¦•à§à¦· JSON সংৰূপ তথà§à¦¯ আৰৠসংৰূপ অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰা à¦à¦Ÿà¦¾ ফাইল নাম "
+"গà§à§°à¦¹à¦£ কৰিব "
+"পাৰে। পিছৰ কà§à¦·à§‡à¦¤à§à§°à¦¤ ফাইল পà§à¦¾ হয় আৰৠসমলসমূহক à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦¤ থোৱা হয়।\n"
+"\n"
+"উদাহৰণ: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "আতৰাবলৈ কোনো পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ নাই"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "সূচী '%d' বিসà§à¦¤à¦¾à§° <0-%d> ত নাই"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' বৈধ নহয়; ৩ টা সà§à¦Ÿà§à§°à¦¿ পà§à§°à¦¦à¦¾à¦¨ কৰিব লাগিব"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"তিনিটা চেনেলৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক (কমা অথবা সà§à¦ªà§‡à¦‡à¦š পৃথকিত)।\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"নিমà§à¦¨à¦²à¦¿à¦–িত বিনà§à¦¯à¦¾à¦¸à¦¤ S/390 বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
+" option = <value>, option = <value>,...\n"
+"বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হ হল: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP কি'ক '%s' ৰ বà§à¦²à¦¿ ধৰা হয়\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' [0 (unknown), 1 (key), 2 (passphrase)] ৰ মাজৰ নহয়"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP কি'সমূহৰ ধৰণ সà§à¦®à§à§±à¦¾à¦“ক। গà§à§°à¦¹à¦£ কৰা মানসমূহ হল: 0 অথবা অজà§à¦žà¦¾à¦¤, 1 অথবা কি', "
+"আৰৠ2 "
+"অথবা পাচফà§à§°à§‡à¦‡à¦›à¥¤\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ PSK নহয়"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ DCB ফà§à¦²à§‡à¦— নহয়"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' à¦à¦Ÿà¦¾ DCB à¦à¦ª পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ নহয়"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "৮ কমা-পৃথকিত সংখà§à¦¯à¦¾ অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰিব লাগিব"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' 0 আৰৠ%u (অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤) অথবা %u মাজৰ à¦à¦Ÿà¦¾ সংখà§à¦¯à¦¾ নহয়"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' 0 আৰৠ%u (অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤) মাজৰ à¦à¦Ÿà¦¾ সংখà§à¦¯à¦¾ নহয়"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: পৰিবৰà§à¦¤à¦¨à§° কোনো পà§à§°à¦­à¦¾à§± নহব যেতিয়ালৈকে '%s' ঠ1 (সামৰà§à¦¥à¦¬à¦¾à¦¨) "
+"অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ "
+"নকৰে\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "বেণà§à¦¡à§±à¦¾à¦‡à¦¡à§à¦¥ শতাংশ হব লাগিব সৰà§à¦¬à¦®à§à¦  100%%"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§° মান কেনেকৈ পà§à§°à¦¾à¦ªà§à¦¤ কৰা হব জà§à¦žà¦¾à¦¤ নহয়"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à¦• পৰিবৰà§à¦¤à¦¨ কৰিব নোৱাৰি"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli বিশেষ বিৱৰণ]"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' তৰà§à¦•à§° বাবে মান পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
+
+#: ../cli/src/utils.c:153
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "তà§à§°à§à¦Ÿà¦¿: তৰà§à¦• '%s' আশা কৰা হৈছিল, কিনà§à¦¤à§ '%s' পà§à§°à¦¦à¦¾à¦¨ কৰা হৈছে।"
+
+#: ../cli/src/utils.c:156
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ তৰà§à¦• '%s'"
+
+#: ../cli/src/utils.c:206
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 ঠিকনা '0x%X' ক লিখনী বিনà§à¦¯à¦¾à¦¸à¦²à§‡ পৰিবৰà§à¦¤à¦¨ কৰোতে তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:234
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 ঠিকনা '%s' ক লিখনী বিনà§à¦¯à¦¾à¦¸à¦¤ পৰিবৰà§à¦¤à¦¨ কৰোতে তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:410
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' বৈধ নহয়; [%s] অথবা [%s] বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../cli/src/utils.c:492
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' দà§à¦¬à§ˆà§°à§à¦¥à¦• (%s x %s)"
+
+#: ../cli/src/utils.c:504
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ নাম, [%s] ৰ à¦à¦Ÿà¦¾ চেষà§à¦Ÿà¦¾ কৰি চাওক"
+
+#: ../cli/src/utils.c:721
#, c-format
msgid "field '%s' has to be alone"
msgstr "কà§à¦·à§‡à¦¤à§à§° '%s' অকলে থাকিব লাগিব"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:724
#, c-format
-msgid "invalid field '%s'"
-msgstr "অবৈধ কà§à¦·à§‡à¦¤à§à§° '%s'"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "অবৈধ ফিলà§à¦¡ '%s'; অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফিলà§à¦¡à¦¸à¦®à§‚হ: %s"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:781
msgid "Option '--terse' requires specifying '--fields'"
msgstr "বিকলà§à¦ªà§° '--terse' ৰ '--fields' ধাৰà§à¦¯à§à¦¯ কৰাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:785
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
-"বিকলà§à¦ª '--terse' ৰ বিশেষ '--fields' বিকলà§à¦ª মানসমূহ ধাৰà§à¦¯à§à¦¯ কৰাৰ পà§à§°à§Ÿà§‹à¦œà¦¨, "
-"'%s' নহয়"
+"বিকলà§à¦ª '--terse' ৰ বিশেষ '--fields' বিকলà§à¦ª মানসমূহ ধাৰà§à¦¯à§à¦¯ কৰাৰ পà§à§°à§Ÿà§‹à¦œà¦¨, '%s' "
+"নহয়"
-#: ../cli/src/utils.c:468
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"তà§à§°à§à¦Ÿà¦¿: org.freedesktop.DBus ৰ বাবে D-Bus অবজেকà§à¦Ÿ পà§à§°à¦•à§à¦¸à¦¿ সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল"
-
-#: ../cli/src/utils.c:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: NameHasOwner অনà§à§°à§‹à¦§ বà§à¦¯à§°à§à¦¥ হল: %s"
-
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1104
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1905,7 +5069,7 @@ msgstr ""
"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾ "
"দবাবলে --nocheck বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1113
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1914,6 +5078,65 @@ msgstr ""
"তà§à§°à§à¦Ÿà¦¿: nmcli (%s) আৰৠNetworkManager (%s) সংসà§à¦•à§°à¦£à¦¸à¦®à§‚হ মিল নাখায়। --nocheck "
"বà§à¦¯à§±à¦¹à¦¾à§° কৰি à¦à¦•à§à¦¸à¦¿à¦•à¦¿à¦‰à¦šà¦¨ বলৱৎ কৰক, কিনà§à¦¤à§ ফলাফলসমূহৰ আগজাননী দিব নোৱাৰি।"
+#: ../libnm-glib/nm-device.c:1814
+msgid "Bluetooth"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥"
+
+#: ../libnm-glib/nm-device.c:1816
+msgid "OLPC Mesh"
+msgstr "OLPC মেশ"
+
+#: ../libnm-glib/nm-device.c:1818
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../libnm-glib/nm-device.c:1820 ../tui/nm-editor-utils.c:182
+msgid "Mobile Broadband"
+msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡"
+
+#: ../libnm-glib/nm-device.c:1824 ../libnm-util/nm-connection.c:1272
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+msgid "Bond"
+msgstr "বানà§à¦§à¦¨à§€"
+
+#: ../libnm-glib/nm-device.c:1826 ../libnm-util/nm-connection.c:1274
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4265 ../tui/nm-editor-utils.c:218
+msgid "Team"
+msgstr "দল"
+
+#: ../libnm-glib/nm-device.c:1828 ../libnm-util/nm-connection.c:1276
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4449 ../tui/nm-editor-utils.c:209
+msgid "Bridge"
+msgstr "বà§à§°à¦¿à¦œ"
+
+#: ../libnm-glib/nm-device.c:1832
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1860
+msgid "Wired"
+msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤"
+
+#: ../libnm-glib/nm-device.c:1891
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1893
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../libnm-glib/nm-device.c:1989 ../libnm-glib/nm-device.c:2008
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -1924,116 +5147,87 @@ msgstr "PEM কি' ফাইলৰ কোনো কোনো অনà§à¦¤ টà§
msgid "Doesn't look like a PEM private key file."
msgstr "দেখাত à¦à¦Ÿà¦¾ PEM বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ফাইল যেন নালাগে।"
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM ফাইল তথà§à¦¯ সংৰকà§à¦·à¦£ কৰিবলে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "কà§à¦·à¦¤à¦¿à¦—à§à§°à¦¸à§à¦¥ PEM ফাইল: Proc-Type পà§à§°à¦¥à¦® টেগ নাছিল।"
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "কà§à¦·à¦¤à¦¿à¦—à§à§°à¦¸à§à¦¥ PEM ফাইল: অজà§à¦žà¦¾à¦¤ Proc-Type tag '%s'"
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "কà§à¦·à¦¤à¦¿à¦—à§à§°à¦¸à§à¦¥ PEM ফাইল: DEK-Info দà§à¦¬à¦¿à¦¤à§€à§Ÿ টেগ নাছিল।"
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "কà§à¦·à¦¤à¦¿à¦—à§à§°à¦¸à§à¦¥ PEM ফাইল: DEK-Info টেগত কোনো IV পোৱা নগল।"
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "কà§à¦·à¦¤à¦¿à¦—à§à§°à¦¸à§à¦¥ PEM ফাইল: DEK-Info টেগত IV ৰ অবৈধ বিনà§à¦¯à¦¾à¦¸à¥¤"
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "কà§à¦·à¦¤à¦¿à¦—à§à§°à¦¸à§à¦¥ PEM ফাইল: অজà§à¦žà¦¾à¦¤ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' চিফাৰ '%s'।"
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিক'ড কৰিব পৰা নগল।"
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ PKCS#8 আৰমà§à¦­à¦£à¦¿ টেগ সনà§à¦§à¦¾à¦¨ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ PKCS#8 অনà§à¦¤ টেগ '%s' সনà§à¦§à¦¾à¦¨ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' তথà§à¦¯ সংৰকà§à¦·à¦£ কৰিবলে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডি'কড কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° তথà§à¦¯ সংৰকà§à¦·à¦£ কৰিবলে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV দৈৰà§à¦˜à§à¦¯à¦¤ বাইটসমূহৰ à¦à¦Ÿà¦¾ ধনাতà§à¦®à¦• সংখà§à¦¯à¦¾ হব লাগিব।"
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV সংৰকà§à¦·à¦£ কৰিবলে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ঠনন-হেকà§à¦¸à¦¾à¦¡à§‡à¦šà¦¿à¦®à§‡à¦² ডিজিটসমূহ অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰে।"
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' চিফাৰ '%s' অজà§à¦žà¦¾à¦¤ আছিল।"
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "ডিকà§à§°à¦¿à¦ªà§à¦Ÿà§‡à¦¡ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' সংৰকà§à¦·à¦£ কৰিবলে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি ধৰণ নিৰà§à¦§à¦¾à§°à¦£ কৰিবলে অকà§à¦·à¦®à¥¤"
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§°à§° কোনো আৰমà§à¦­à¦£à¦¿ টেগ '%s' নাই।"
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§°à§° কোনো অনà§à¦¤ টেগ '%s' নাই।"
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° ডিক'ড কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
@@ -2052,97 +5246,87 @@ msgstr "MD5 ইঞà§à¦œà¦¿à¦¨ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§
msgid "Invalid IV length (must be at least %zd)."
msgstr "অবৈধ IV দৈৰà§à¦˜à§à¦¯ (অনà§à¦¤à¦¤ %zd হব লাগিব)।"
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "ডিকà§à§°à¦¿à¦ªà§à¦Ÿà§‡à¦¡ কি' বাফাৰৰ বাবে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£ চিফাৰ পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে সমমিতি কি' সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ পেডিং দৈৰà§à¦˜à§à¦¯à¥¤"
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "ইনকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে মেমৰি আবনà§à¦Ÿà¦¨ কৰিব পৰা নগল।"
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£ চিফাৰ পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে সমমিতি কি' সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "তথà§à¦¯ ইনকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° তথà§à¦¯ আৰমà§à¦­ কৰিবলে তà§à§°à§à¦Ÿà¦¿: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° ডি'কড কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 ডি'কডাৰ আৰমà§à¦­ কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 ফাইল ডি'কড কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 ফাইল সতা সতà§à¦¯ নিৰূপণ কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 ডি'কডাৰ আৰমà§à¦­ কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ফাইল ডি'কড কৰিব পৰা নগল: %s"
@@ -2162,354 +5346,661 @@ msgstr "MD5 পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিব
msgid "Invalid IV length (must be at least %d)."
msgstr "অবৈধ IV দৈৰà§à¦˜à§à¦¯ (অনà§à¦¤à¦¤ %d হব লাগিব)।"
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£ চিফাৰ সà§à¦²à¦Ÿ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে সমমিতি কি' সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£ পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰা তথà§à¦¯ অতি ডাঙৰ।"
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি'ৰ ডিকà§à§°à¦¿à¦ªà¦·à¦£ সমà§à¦ªà§‚ৰà§à¦£ কৰিবলে বà§à¦¯à§°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£ চিফাৰ সà§à¦²à¦Ÿ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে সমমিতি কি' সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£ পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "ইনকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "ইনকà§à§°à¦¿à¦ªà§à¦Ÿ কৰাৰ পিছত তথà§à¦¯à§° অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ পৰিমাণ।"
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° ডিক'ড কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "পাছৱাৰà§à¦¡à¦• UCS2 লে পৰিবৰà§à¦¤à¦¨ কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 ডি'কডাৰ আৰমà§à¦­ কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 ফাইল ডি'কড কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 ফাইল সতা সতà§à¦¯ নিৰূপণ কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "যাদৃচà§à¦›à¦¿à¦• তথà§à¦¯ সৃজন কৰিব পৰা নগল।"
-#: ../libnm-util/nm-utils.c:2040
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:769
+#: ../libnm-util/nm-setting-ip4-config.c:778
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ ৰিকà§à¦¤"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 ৰ বাবে '%s' বৈশিষà§à¦Ÿà§à¦¯ মিল খাব লাগিব"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:760
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ অবৈধ"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "'%s' বৈশিষà§à¦Ÿà§à¦¯à§° বাবে à¦à¦Ÿà¦¾ বৈধ মান নহয়"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' অথবা '%s' সংহতিৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "অবৈধ বিকলà§à¦ª '%s' অথবা ইয়াৰ মান '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "কেৱল '%s' আৰৠ'%s' সংহতি কৰিব পাৰি"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক বিকলà§à¦ª '%s' সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' ৰ বাবে '%s' à¦à¦Ÿà¦¾ বৈধ মান নহয়"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s > 0' ৰ সৈতে '%s=%s' সংগত নহয়"
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' বিকলà§à¦ª '%s' ৰ বাবে à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়"
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' বিকলà§à¦ª কেৱল '%s=%s' ৰ বাবে বৈধ"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s' ৰ বাবে '%s=%s' à¦à¦Ÿà¦¾ বৈধ সংৰূপ নহয়"
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' বিকলà§à¦ªà§° সংহতি হবলৈ '%s' বিকলà§à¦ª সংহতি কৰা হব লাগিব"
+
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' বিকলà§à¦ª ৰিকà§à¦¤"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' বিকলà§à¦ªà§° বাবে '%s' à¦à¦Ÿà¦¾ বৈধ IPv4 ঠিকনা নহয়"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§° বাবে '%d' à¦à¦Ÿà¦¾ বৈধ মান নহয় (হব লাগিব <= %d)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "মান '%d' বিসà§à¦¤à¦¾à§°à§° বাহিৰ <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ ৰিকà§à¦¤'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' ভাৰছà§à§±à§‡à¦² আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম '%s' ৰ সৈতে মিল নাখায়"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "সংযোগত '%s' সংহতি উপসà§à¦¥à¦¿à¦¤ থকাটো পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 সংৰূপ সà§à¦²à§‡à¦‡à¦­à§° বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 সংৰূপ সà§à¦²à§‡à¦‡à¦­à§° বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "ফà§à¦²à§‡à¦—সমূহ অবৈধ"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "ফà§à¦²à§‡à¦—সমূহ অবৈধ - অসামৰà§à¦¥à¦¬à¦¾à¦¨"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ অবৈধ (সামৰà§à¦¥à¦¬à¦¾à¦¨ নহয়)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "উপাদান অবৈধ"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "ঘোগফল ১০০% নহয়"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ অবৈধ"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ মান '%s' ৰিকà§à¦¤ অথবা অতি দীঘল (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' ঠঅবৈধ আখৰ(সমূহ) অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰে ([A-Za-z._-] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' দৈৰà§à¦˜à§à¦¯ অবৈধ (৫ অথবা ৬ ডিজিট হব লাগিব)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "যদি উপধায়ক ধাৰà§à¦¯à§à¦¯ কৰা হৈছে à¦à¦Ÿà¦¾ P_Key ধাৰà§à¦¯à§à¦¯ কৰিব লাগিব"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key সংযোগে উপধায়ক আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম ধাৰà§à¦¯à§à¦¯ নকৰিলে"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:748
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯ '%s=%s' ৰ বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
+
+#: ../libnm-util/nm-setting-ip4-config.c:792
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d। IPv4 ঠিকনা অবৈধ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:802
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d। IPv4 ঠিকনাৰ অবৈধ উপসৰà§à¦—"
+
+#: ../libnm-util/nm-setting-ip4-config.c:818
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d। পথ অবৈধ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d। পথৰ অবৈধ উপসৰà§à¦—"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "%s=%s ৰ বাবে '%s' অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID দৈৰà§à¦˜à§à¦¯ বিসà§à¦¤à¦¾à§° <1-32> বাইটৰ বাহিৰ"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' বৈধ বিসà§à¦¤à¦¾à§° <128-16384> ৰ বাহিৰ"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯ সংহতি কৰিবলে অ-শূণà§à¦¯ '%s' বৈশিষà§à¦Ÿà§à¦¯à§° পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' মান '%s=%s' ৰ সৈতে মিল নাখায়"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' à¦à¦Ÿà¦¾ UUID অথবা à¦à¦Ÿà¦¾ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ ধাৰà§à¦¯à§à¦¯à¦¤ নহয় আৰৠ'%s:%s' নহয়"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "ফà§à¦²à§‡à¦—সমূহ অবৈধ"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ ইথাৰনেট পোৰà§à¦Ÿ মান নহয়"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ ডà§à¦ªà§à¦²à§‡à¦•à§à¦¸ মান নহয়"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "à¦à¦Ÿà¦¾ বৈধ MAC ঠিকনা নহয়"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ MAC ঠিকনা নহয়"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "অবৈধ '%s' অথবা ইয়াৰ মান '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' সà§à§°à¦•à§à¦·à¦¾à§° বাবে '%s=%s' ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' সà§à§°à¦•à§à¦·à¦¾à§° বাবে '%s' সংহতিৰ উপসà§à¦¥à¦¿à¦¤à¦¿ পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£ কি' নিৰà§à¦®à¦¾à¦£ কৰিবলে পৰà§à¦¯à¦¾à¦ªà§à¦¤ মেমৰি নাই।"
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' মান বিসà§à¦¤à¦¾à§° <0-3> ৰ বাহিৰ"
-#: ../libnm-util/nm-utils.c:2150
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM ফাইল সৃষà§à¦Ÿà¦¿à§° বাবে মেমৰি আবনà§à¦Ÿà¦¨ কৰিব পৰা নগল।"
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' সংযোগসমূহৰ à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦¤ '%s' ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' ক কেৱল '%s=%s' (WEP) ৰ সৈতে বà§à¦¯à§±à¦¹à¦¾à§° কৰিব পাৰি"
-#: ../libnm-util/nm-utils.c:2162
+#: ../libnm-util/nm-setting-wireless.c:715
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "IV ক PEM ফাইললে লিখিবলে মেমৰি আবনà§à¦Ÿà¦¨ কৰিব পৰা নগল।"
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ Wi-Fi অৱসà§à¦¥à¦¾ নহয়"
-#: ../libnm-util/nm-utils.c:2174
+#: ../libnm-util/nm-setting-wireless.c:725
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "ইনকà§à§°à¦¿à¦ªà§à¦Ÿà§‡à¦¡ কি'ক PEM ফাইললে লিখিবলে মেমৰি আবনà§à¦Ÿà¦¨ কৰিব পৰা নগল।"
+msgid "'%s' is not a valid band"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ বেণà§à¦¡ নহয়"
-#: ../libnm-util/nm-utils.c:2193
+#: ../libnm-util/nm-setting-wireless.c:735
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ফাইল তথà§à¦¯à§° বাবে মেমৰি আবনà§à¦Ÿà¦¨ কৰিব পৰা নগল।"
+msgid "requires setting '%s' property"
+msgstr "'%s' বৈশিষà§à¦Ÿà§à¦¯ সংহতি কৰাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "চিসà§à¦Ÿà§‡à¦® নেটৱাৰà§à¦•à¦¿à¦‚ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
msgid "System policy prevents enabling or disabling system networking"
msgstr ""
-"চিসà§à¦Ÿà§‡à¦® নীতিয়ে চিসà§à¦Ÿà§‡à¦® নেটৱাৰà§à¦•à¦¿à¦‚ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰাটো পà§à§°à¦¤à¦¿à§°à§‹à¦§ "
-"কৰে"
+"চিসà§à¦Ÿà§‡à¦® নীতিয়ে চিসà§à¦Ÿà§‡à¦® নেটৱাৰà§à¦•à¦¿à¦‚ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰাটো পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:3
msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
msgstr ""
"NetworkManager ক নিদà§à§°à¦¾ দিয়ক অথবা ইয়াক সাৰ পোৱাওক (কেৱল চিসà§à¦Ÿà§‡à¦® শকà§à¦¤à¦¿ "
-"বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¨à¦¾ দà§à¦¬à¦¾à§°à¦¾ "
-"বà§à¦¯à§±à¦¹à¦¾à§° হব লাগিব)"
+"বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¨à¦¾ "
+"দà§à¦¬à¦¾à§°à¦¾ বà§à¦¯à§±à¦¹à¦¾à§° হব লাগিব)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
msgstr ""
-"চিসà§à¦Ÿà§‡à¦® নীতিয়ে NetworkManager ক নিদà§à§°à¦¾ দিয়াত অথবা ইয়াক সাৰ পোৱাৰ পৰা "
-"পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
+"চিসà§à¦Ÿà§‡à¦® নীতিয়ে NetworkManager ক নিদà§à§°à¦¾ দিয়াত অথবা ইয়াক সাৰ পোৱাৰ পৰা পà§à§°à¦¤à¦¿à§°à§‹à¦§ "
+"কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
msgstr "WiFi ডিভাইচসমূহ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
msgstr ""
"চিসà§à¦Ÿà§‡à¦® নীতিয়ে WiFi ডিভাইচসমূহ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰাটো পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
msgid "Enable or disable mobile broadband devices"
msgstr "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ ডিভাইচসমূহ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
msgid "System policy prevents enabling or disabling mobile broadband devices"
msgstr ""
"চিসà§à¦Ÿà§‡à¦® নীতিয়ে ম'বাইল বৰà§à¦¡à¦¬à§‡à¦£à§à¦¡ ডিভাইচসমূহ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰাটো "
-"পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
+"পà§à§°à¦¤à¦¿à§°à§‹à¦§ "
+"কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "WiMAX ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ ডিভাইচসমূহ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
"চিসà§à¦Ÿà§‡à¦® নীতিয়ে WiMAX ম'বাইল বৰà§à¦¡à¦¬à§‡à¦£à§à¦¡ ডিভাইচসমূহ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ "
-"কৰাটো পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
+"কৰাটো "
+"পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
msgstr "নেটৱাৰà§à¦• সংযোগসমূহৰ নিয়নà§à¦¤à§à§°à¦£à§° অনà§à¦®à¦¤à¦¿ দিয়ক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
msgid "System policy prevents control of network connections"
msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে নেটৱাৰà§à¦• সংযোগসমূহৰ নিয়নà§à¦¤à§à§°à¦£ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:13
msgid "Connection sharing via a protected WiFi network"
msgstr "à¦à¦Ÿà¦¾ সà§à§°à¦•à§à¦·à¦¿à¦¤ WiFi নেটৱাৰà§à¦•à§°à§‡ সংযোগ অংশীদাৰী"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
msgid "System policy prevents sharing connections via a protected WiFi network"
msgstr ""
"চিসà§à¦Ÿà§‡à¦® নীতিয়ে à¦à¦Ÿà¦¾ সà§à§°à¦•à§à¦·à¦¿à¦¤ WiFi নেটৱাৰà§à¦•à§°à§‡ সংযোগসমূহৰ অংশীদাৰী পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
msgid "Connection sharing via an open WiFi network"
msgstr "à¦à¦Ÿà¦¾ মà§à¦•à§à¦¤ WiFi নেটৱাৰà§à¦•à§°à§‡ সংযোগৰ অংশীদাৰী"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
"চিসà§à¦Ÿà§‡à¦® নীতিয়ে à¦à¦Ÿà¦¾ মà§à¦•à§à¦¤ WiFi নেটৱাৰà§à¦•à§°à§‡ সংযোগসমূহৰ অংশীদাৰী পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত নেটৱাৰà§à¦• সংযোগসমূহ পৰিবৰà§à¦¤à¦¨ কৰক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
msgid "System policy prevents modification of personal network settings"
msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত নেটৱাৰà§à¦• সংহতিসমূহৰ পৰিবৰà§à¦¤à¦¨ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
msgid "Modify network connections for all users"
msgstr "সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে নেটৱাৰà§à¦• সংযোগসমূহ পৰিবৰà§à¦¤à¦¨ কৰক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
msgid "System policy prevents modification of network settings for all users"
msgstr ""
"চিসà§à¦Ÿà§‡à¦® নীতিয়ে সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে নেটৱাৰà§à¦• সংহতিসমূহৰ পৰিবৰà§à¦¤à¦¨ পà§à§°à¦¤à¦¿à§°à§‹à¦§ "
"কৰে"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
msgstr "সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦® পৰিবৰà§à¦¤à¦¨ কৰক"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦®à§° পৰিবৰà§à¦¤à¦¨ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../src/main.c:158
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "সংকেত মাসà§à¦• সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "সংকেত নিয়নà§à¦¤à§à§°à¦£ থà§à§°à§‡à¦¡ সৃষà§à¦Ÿà¦¿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
-
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s খোলিবলে বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s লে লিখা বà§à¦¯à§°à§à¦¥ হল: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s বনà§à¦§ কৰা বà§à¦¯à§°à§à¦¥ হল: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager ইতিমধà§à¦¯à§‡ চলি আছে (pid %ld)\n"
-#: ../src/main.c:376
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager সংসà§à¦•à§°à¦£ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰি পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
-#: ../src/main.c:377
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "à¦à¦Ÿà¦¾ ডিমন নহব"
-#: ../src/main.c:378
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "à¦à¦Ÿà¦¾ ডিমন হৈ, stderr লৈ লগ নকৰিব"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "লগ সà§à¦¤à§°: [%s] ৰ à¦à¦Ÿà¦¾"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "',' দà§à¦¬à¦¾à§°à¦¾ পৃথকিত লগ ডমেইনসমূহ: [%s] ৰ যিকোনো সংযà§à¦•à§à¦¤à¦¿"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "সকলো সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾ মাৰাতà§à¦®à¦• কৰক"
-#: ../src/main.c:379
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "à¦à¦Ÿà¦¾ PID ফাইলৰ অৱসà§à¦¥à¦¾à¦¨ ধাৰà§à¦¯à§à¦¯ কৰক"
-#: ../src/main.c:379
+#: ../src/main.c:337
msgid "filename"
msgstr "ফাইলনাম"
-#: ../src/main.c:380
+#: ../src/main.c:338
msgid "State file location"
msgstr "ফাইলৰ অৱসà§à¦¥à¦¾à¦¨ দেখà§à§±à¦¾à¦“ক"
-#: ../src/main.c:380
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:381
-msgid "Config file location"
-msgstr "Config ফাইলৰ অৱসà§à¦¥à¦¾à¦¨"
-
-#: ../src/main.c:381
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:382
-msgid "List of plugins separated by ','"
-msgstr "',' দà§à¦¬à¦¾à§°à¦¾ পৃথকিত পà§à¦²à¦¾à¦—িনসমূহৰ তালিকা"
-
-#: ../src/main.c:382
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:384
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "লগ সà§à¦¤à§°: [ERR, WARN, INFO, DEBUG] ৰ à¦à¦Ÿà¦¾"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:387
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"লগ ডমেইনসমূহ ',' দà§à¦¬à¦¾à§°à¦¾ পৃথকিত: \n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL] "
-"ৰ যিকোনো সংযà§à¦•à§à¦¤à¦¿"
-
-#: ../src/main.c:393
-msgid "An http(s) address for checking internet connectivity"
-msgstr "ইনà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿ সংযোগ নীৰিকà§à¦·à¦£ কৰিবলে à¦à¦Ÿà¦¾ http(s) ঠিকনা"
-
-#: ../src/main.c:394
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "সংযোগ নীৰিকà§à¦·à¦£à§° মাজৰ অনà§à¦¤à§°à¦¾à¦² (ছেকেণà§à¦¡à¦¤)"
-
-#: ../src/main.c:395
-msgid "The expected start of the response"
-msgstr "পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾à§° পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ আৰমà§à¦­à¦£à¦¿"
-
-#: ../src/main.c:395
-msgid "Bingo!"
-msgstr "Bingo!"
-
-#: ../src/main.c:400
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules আপোনাৰ পà§à¦²à§‡à¦Ÿà¦«à§°à§à¦®à¦¤ সমৰà§à¦¥à¦¿à¦¤ নহয়!\n"
-#: ../src/main.c:423
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "NetworkManager চলাবলে আপà§à¦¨à¦¿ ৰà§à¦Ÿ হব লাগিব!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2519,46 +6010,63 @@ msgstr ""
"NetworkManager ঠসকলো নেটৱাৰà§à¦• সংযোগ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰে আৰৠসà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡\n"
"বà§à¦¯à§±à¦¹à¦¾à§° কৰিবলে সৰà§à¦¬à§‹à¦¤à§à¦¤à¦® সংযোগ নিৰà§à¦¬à¦¾à¦šà¦¨ কৰে। ই লগতে বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦œà¦¨à¦•\n"
"কমপিউটাৰত থকা বেতাà¦à§° কাৰà§à¦¡à¦¸à¦®à§‚হ সংযà§à¦•à§à¦¤ হব লগিয়া বেতাà¦à§° অভিগম বিনà§à¦¦à§ ধাৰà§à¦¯à§à¦¯ "
-"কৰাৰ অনà§à¦®à¦¤à¦¿ দিয়ে।"
+"কৰাৰ অনà§à¦®à¦¤à¦¿ "
+"দিয়ে।"
-#: ../src/main.c:429
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"অবৈধ বিকলà§à¦ªà¥¤ বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° "
"কৰক।\n"
-#: ../src/main.c:439
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager চলাবলে আপà§à¦¨à¦¿ ৰà§à¦Ÿ হব লাগিব!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr ""
+"%s। বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
-#: ../src/main.c:460
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"কমানà§à¦¡ লাইনত পà§à§°à§‡à§°à¦£ কৰা অপৰিচিত লগ ডমেইন(সমূহ) '%s' উপেকà§à¦·à¦¾ কৰা হৈছে।\n"
+
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "সংৰূপ পà§à¦¿à¦¬à¦²à§‡ বà§à¦¯à§°à§à¦¥: (%d) %s\n"
-#: ../src/main.c:471
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr ""
-"%s। বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "সংৰূপ ফাইলত তà§à§°à§à¦Ÿà¦¿: %s।\n"
+
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "সংৰূপ ফাইলসমূহত অপৰিচিত লগ ডমেইন(সমূহ) '%s' উপেকà§à¦·à¦¾ কৰা হৈছে।\n"
-#: ../src/main.c:478
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "অৱসà§à¦¥à¦¾ ফাইল %s বিশà§à¦²à§‡à¦·à¦£ কৰাটো বà§à¦¯à§°à§à¦¥ হল: (%d) %s\n"
-#: ../src/main.c:495
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "ডিমনাইজ কৰিব পৰা নগল: %s [error %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../src/bluez-manager/nm-bluez-device.c:193
+#, c-format
+msgid "%s Network"
+msgstr "%s নেটৱাৰà§à¦•"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# NetworkManager দà§à¦¬à¦¾à§°à¦¾ সৃষà§à¦Ÿà¦¿ কৰা\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2567,2087 +6075,1035 @@ msgstr ""
"# %s ৰ পৰা à¦à¦•à¦¤à§à§°à¦¿à¦¤ কৰা\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "কোনো বà§à¦¯à§±à¦¹à¦¾à§°à¦¯à§‹à¦—à§à¦¯ DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ পোৱা নগল।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' পোৱা গল।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' পোৱা গল।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "অসমৰà§à¦¥à¦¿à¦¤ DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:380
+#: ../src/dns-manager/nm-dns-manager.c:400
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "NOTE: libc ৰিচ'লভাৰে ৩ টাৰ অধিক নামচাৰà§à¦­à¦¾à§° সমৰà§à¦¥à¦¨ নকৰিবও পাৰে।"
-#: ../src/dns-manager/nm-dns-manager.c:382
+#: ../src/dns-manager/nm-dns-manager.c:402
msgid "The nameservers listed below may not be recognized."
msgstr "তলত তালিকাভà§à¦•à§à¦¤ নামচাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ পৰিচিত নহবও পাৰে।"
-#: ../src/logging/nm-logging.c:131
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "অজà§à¦žà¦¾à¦¤ লগ সà§à¦¤à§° '%s'"
-#: ../src/logging/nm-logging.c:156
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "অজà§à¦žà¦¾à¦¤ লগ ডমেইন '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:281 ../src/nm-device-bt.c:351
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA সংযোগ %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Config ফাইলৰ অৱসà§à¦¥à¦¾à¦¨"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "Config ডাইৰেকটৰি অৱসà§à¦¥à¦¾à¦¨"
-#: ../src/modem-manager/nm-modem-gsm.c:559 ../src/nm-device-bt.c:347
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' দà§à¦¬à¦¾à§°à¦¾ পৃথকিত পà§à¦²à¦¾à¦—িনসমূহৰ তালিকা"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ইনà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿ সংযোগ নীৰিকà§à¦·à¦£ কৰিবলে à¦à¦Ÿà¦¾ http(s) ঠিকনা"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "সংযোগ নীৰিকà§à¦·à¦£à§° মাজৰ অনà§à¦¤à§°à¦¾à¦² (ছেকেণà§à¦¡à¦¤)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾à§° পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ আৰমà§à¦­à¦£à¦¿"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:865 ../src/devices/nm-device-bt.c:333
#, c-format
msgid "GSM connection %d"
msgstr "GSM সংযোগ %d"
-#: ../src/nm-device-bond.c:191
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:892 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA সংযোগ %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "বানà§à¦§à¦¨à§€ সংযোগ %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL সংযোগ %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "বà§à§°à¦¿à¦œ সংযোগ %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN সংযোগ %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN সংযোগ %d"
-#: ../src/nm-device-ethernet.c:1327
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE সংযোগ %d"
-#: ../src/nm-device-ethernet.c:1327 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ সংযোগ %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand সংযোগ %d"
-#: ../src/nm-device-olpc-mesh.c:303
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "মেশ %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "দল সংযোগ %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN সংযোগ %d"
-#: ../src/nm-manager.c:661
+#: ../src/nm-manager.c:3452 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN সংযোগ %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "চকেটত তথà§à¦¯à§° বাবে অপেকà§à¦·à¦¾ কৰোতে তà§à§°à§à¦Ÿà¦¿ দেখা দিলে"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "netlink বাৰà§à¦¤à¦¾ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ কৰোতে তà§à§°à§à¦Ÿà¦¿: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "চকেটত তথà§à¦¯à§° বাবে অপেকà§à¦·à¦¾ কৰোতে তà§à§°à§à¦Ÿà¦¿ দেখা দিলে"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "লিংক অৱসà§à¦¥à¦¾ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰিবলে netlink লে সংযোগ কৰিবলে অকà§à¦·à¦®: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "netlink হেনà§à¦¡à§‡à¦² তথà§à¦¯ পà§à§°à§‡à§°à¦£ সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে অকà§à¦·à¦®: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr "লিংক অৱসà§à¦¥à¦¾ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰিবলে netlink হপনà§à¦¡à§‡à¦² আবনà§à¦Ÿà¦¨ কৰিবলে অকà§à¦·à¦®: %s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"লিংক অৱসà§à¦¥à¦¾ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰিবলে netlink লিংক কà§à¦¯à¦¾à¦¶ আবনà§à¦Ÿà¦¨ কৰিবলে অকà§à¦·à¦®: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "netlink দলত অংশগà§à§°à¦¹à¦£ কৰিবলে অকà§à¦·à¦®: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "লিংক কà§à¦¯à¦¾à¦¶ আপডেইট কৰোতে তà§à§°à§à¦Ÿà¦¿: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager ঠনেটৱাৰà§à¦•à¦¸à¦®à§‚হ বনà§à¦§ কৰিব লাগিব"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:94
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "চিসà§à¦Ÿà§‡à¦®"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3641
-msgid "Bond"
-msgstr "বানà§à¦§à¦¨à§€"
-
-#: ../test/nm-online.c:112
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\rসংযোগ কৰা হৈছে"
-#: ../test/nm-online.c:143
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "à¦à¦Ÿà¦¾ সংযোগৰ বাবে অপেকà§à¦·à¦¾ কৰিবলে সময়, ছেকেণà§à¦¡à¦¤ (অবিকলà§à¦ªà¦¿à¦¤ হল ৩০)"
-
-#: ../test/nm-online.c:144
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"যদি NetworkManager চলি থকা নাই অথবা সংযোগ কৰা নাই তৎকà§à¦·à¦¨à¦¾à¦¤ পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰিব"
+"à¦à¦Ÿà¦¾ সংযোগৰ বাবে অপেকà§à¦·à¦¾ কৰিব লগিয়া সময়, ছেকেণà§à¦¡à¦¤ (বিকলà§à¦ªà§° অবিহনে, অবিকলà§à¦ªà¦¿à¦¤ "
+"মান "
+"হল ৩০)"
+
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "যদি NetworkManager চলি থকা নাই তৎকà§à¦·à¦¨à¦¾à¦¤ পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
-#: ../test/nm-online.c:145
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "à¦à¦•à§‹ পà§à§°à¦¿à¦¨à§à¦Ÿ নকৰিব"
-#: ../test/nm-online.c:163
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "NetworkManager ত à¦à¦Ÿà¦¾ সফল সংযোগৰ বাবে অপেকà§à¦·à¦¾ কৰে।"
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager দà§à¦¬à¦¾à§°à¦¾ আৰমà§à¦­à¦£à¦¿ নেটৱাৰà§à¦• সংযোগসমূহ সকà§à§°à¦¿à§Ÿ কৰা সমাপà§à¦¤ কৰিবলৈ "
+"অপেকà§à¦·à¦¾ "
+"কৰে।"
-#: ../test/nm-online.c:169 ../test/nm-online.c:178
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
-"অবৈধ বিকলà§à¦ªà¥¤ বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° "
-"কৰক।"
-
-#~ msgid "Network"
-#~ msgstr "নেটৱাৰà§à¦•"
-
-#~ msgid "Manage your network connections"
-#~ msgstr "আপোনাৰ নেটৱাৰà§à¦• সংযোগসমূহ বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¨à¦¾ কৰক"
+"অবৈধ বিকলà§à¦ªà¥¤ বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#~ msgid "Network Connections"
-#~ msgstr "নেটৱাৰà§à¦• সংযোগসমূহ"
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "ঠিক আছে"
-#~ msgid "Manage and change your network connection settings"
-#~ msgstr "আপোনাৰ নেটৱাৰà§à¦• সংযোগক বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¨à¦¾ আৰৠসলনি কৰক"
-
-#~ msgid "Disable connected notifications"
-#~ msgstr "সংযà§à¦•à§à¦¤ অধিসূচনাসমূহ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
-
-#~ msgid ""
-#~ "Set this to true to disable notifications when connecting to a network."
-#~ msgstr ""
-#~ "à¦à¦Ÿà¦¾ নেটৱাৰà§à¦•à¦²à§‡ সংযোগ কৰোতে অধিসূচনাসমূহ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে ইয়াক সতà§à¦¯à¦²à§‡ সংহতি "
-#~ "কৰক।"
-
-#~ msgid "Disable disconnected notifications"
-#~ msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨ হোৱাৰ অধিসূচনা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰা হ'ব"
-
-#~ msgid ""
-#~ "Set this to true to disable notifications when disconnecting from a "
-#~ "network."
-#~ msgstr ""
-#~ "à¦à¦Ÿà¦¾ নেটৱাৰà§à¦•à§° পৰা বিচà§à¦›à¦¿à¦¨à§à¦¨ হওতে অধিসূচনাসমূহ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে ইয়াক সতà§à¦¯à¦²à§‡ "
-#~ "সংহতি কৰক।"
-
-#~ msgid "Disable VPN notifications"
-#~ msgstr "VPN অধিসূচনাসমূহ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
-
-#~ msgid ""
-#~ "Set this to true to disable notifications when connecting to or "
-#~ "disconnecting from a VPN."
-#~ msgstr ""
-#~ "à¦à¦Ÿà¦¾ VPN লে সংযোগ কৰোতে অথবা তাৰ পৰা বিচà§à¦›à¦¿à¦¨à§à¦¨ হওতে অধিসূচনাসমূহ অসামৰà§à¦¥à¦¬à¦¾à¦¨ "
-#~ "কৰিবলে ইয়াক সতà§à¦¯à¦²à§‡ সংহতি কৰক।"
-
-#~ msgid "Suppress networks available notifications"
-#~ msgstr "উপলবà§à¦§ নেটৱাৰà§à¦•à§° অধিসূচনা পà§à§°à¦¦à§°à§à¦¶à¦¨ লà§à¦•à§à§±à¦¾ হ'ব"
-
-#~ msgid ""
-#~ "Set this to true to disable notifications when wireless networks are "
-#~ "available."
-#~ msgstr ""
-#~ "যেতিয়া বেতাà¦à§° নেটৱাৰà§à¦•à¦¸à¦®à§‚হ উপলবà§à¦§ থাকে অধিসূচনাসমূহ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে ইয়াক সতà§à¦¯à¦²à§‡ "
-#~ "সংহতি কৰক।"
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "অসà§à¦¥à¦¾à§Ÿà§€ ফাইল সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল: %s"
-#~ msgid "Stamp"
-#~ msgstr "সà§à¦Ÿà§‡à¦®à§à¦ª"
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦• বà§à¦¯à§°à§à¦¥ হল: %s"
-#~ msgid ""
-#~ "Used to determine whether settings should be migrated to a new version."
-#~ msgstr ""
-#~ "নতà§à¦¨ সংসà§à¦•à§°à¦£à¦¤ সংহতিসমূহ পà§à§°à¦¬à§à§°à¦œà¦¨ কৰা হ'ব নে নহয় নিৰà§à¦§à¦¾à§°à¦£ কৰিবলৈ ইয়াক বà§à¦¯à§±à¦¹à¦¾à§° কৰা "
-#~ "হয়।"
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ফাইল পà§à¦¨à§°-পà§à¦¿à¦¬ পৰা নগল: %s"
-#~ msgid "Disable WiFi Create"
-#~ msgstr "WiFi সৃষà§à¦Ÿà¦¿ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ইথাৰনেট সংযোগ %d"
-#~ msgid ""
-#~ "Set to true to disable creation of adhoc networks when using the applet."
-#~ msgstr ""
-#~ "à¦à¦ªà§à¦²à§‡à¦Ÿ বà§à¦¯à§±à¦¹à¦¾à§° কৰি থাকোতে adhoc নেটৱাৰà§à¦•à¦¸à¦®à§‚হৰ সৃষà§à¦Ÿà¦¿ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে সতà§à¦¯à¦²à§‡ "
-#~ "সংহতি কৰক।"
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi সংযোগ %d"
-#~ msgid "Ignore CA certificate"
-#~ msgstr "CA পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° উপেকà§à¦·à¦¾ কৰক"
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ সংযোগ %d"
-#~ msgid ""
-#~ "Set this to true to disable warnings about CA certificates in EAP "
-#~ "authentication."
-#~ msgstr ""
-#~ "EAP পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à¦¤ CA পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§°à¦¸à¦®à§‚হৰ বিষয়ে সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে ইয়াক "
-#~ "সতà§à¦¯à¦²à§‡ সংহতি কৰক।"
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
-#~ msgid ""
-#~ "Set this to true to disable warnings about CA certificates in phase 2 of "
-#~ "EAP authentication."
-#~ msgstr ""
-#~ "EAP পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° সà§à¦¤à§° ২ ত CA পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§°à¦¸à¦®à§‚হৰ বিষয়ে সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾à¦¸à¦®à§‚হ অসামৰà§à¦¥à¦¬à¦¾à¦¨ "
-#~ "কৰিবলে ইয়াক সতà§à¦¯à¦²à§‡ সংহতি কৰক।"
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL সংযোগ %d"
-#~ msgid "You are now connected to '%s'."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ '%s' লৈ সংযà§à¦•à§à¦¤à¥¤"
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "বাছক..."
-#~ msgid "You are now connected to the mobile broadband network."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ নেটৱাৰà§à¦•à§° সৈতে সংযà§à¦•à§à¦¤à¥¤"
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "যোগ কৰক"
-#~ msgid "Preparing mobile broadband connection '%s'..."
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ সংযোগ '%s' সৃষà§à¦Ÿà¦¿ কৰা হৈছে..."
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾..."
-#~ msgid "Configuring mobile broadband connection '%s'..."
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ সংযোগ '%s' সংৰূপণ কৰা হৈছে..."
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "মচি পেলাওক"
-#~ msgid "User authentication required for mobile broadband connection '%s'..."
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ সংযোগ '%s' ৰ বাবে বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨..."
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "ধৰণ '%s' ৰ সংযোগ '%s' ৰ বাবে সমà§à¦ªà¦¾à¦¦à¦• সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল।"
-#~ msgid "Requesting a network address for '%s'..."
-#~ msgstr "'%s' ৰ কাৰণে নেটৱাৰà§à¦• ঠিকনা অনà§à§°à§‹à¦§ কৰা হৈছে..."
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "অবৈধ সংযোগ '%s' ৰ বাবে সমà§à¦ªà¦¾à¦¦à¦• সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল।"
-#~ msgid "Mobile broadband connection '%s' active"
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ সংযোগ '%s' সকà§à§°à¦¿à§Ÿ"
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক"
-#~ msgid "Mobile Broadband (%s)"
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ (%s)"
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "সংযোগ সংৰকà§à¦·à¦£ কৰোতে তà§à§°à§à¦Ÿà¦¿: %s"
-#~ msgid "Mobile Broadband"
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡"
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "সংযোগ সংৰকà§à¦·à¦£ কৰিবলৈ অকà§à¦·à¦®: %s"
-#~ msgid "New Mobile Broadband (CDMA) connection..."
-#~ msgstr "নতà§à¦¨ ম'বাইল বà§à§°'ডবেণà§à¦¡ (CDMA) সংযোগ..."
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "নতà§à¦¨ সংযোগ যোগ কৰিবলৈ অকà§à¦·à¦®: %s"
-#~ msgid "You are now connected to the CDMA network."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ CDMA নেটৱাৰà§à¦•à¦²à§ˆ সংযà§à¦•à§à¦¤à¥¤"
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "বাতিল কৰক"
-#~ msgid "Mobile broadband connection '%s' active: (%d%%%s%s)"
-#~ msgstr "'%s' ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সংযোগ বৰà§à¦¤à¦®à¦¾à¦¨à§‡ সকà§à§°à¦¿à§Ÿ: (%d%%%s%s)"
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(অবিকলà§à¦ªà¦¿à¦¤)"
-#~ msgid "CDMA network."
-#~ msgstr "CDMA নেটৱাৰà§à¦•à¥¤"
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "বাইট"
-#~ msgid "You are now registered on a roaming network."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ à¦à¦Ÿà¦¾ ৰ'মিং নেটৱাৰà§à¦•à¦¤ ৰেজিসà§à¦Ÿà¦¾à§°à§à¦¡à¥¤"
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
-#~ msgid "GSM"
-#~ msgstr "GSM"
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "সকà§à§°à¦¿à§Ÿ বেকআপ"
-#~ msgid "New Mobile Broadband (GSM) connection..."
-#~ msgstr "নতà§à¦¨ ম'বাইল বà§à§°'ডবেণà§à¦¡ (GSM) সংযোগ..."
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
-#~ msgid "You are now connected to the GSM network."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ GSM নেটৱাৰà§à¦•à¦²à§ˆ সংযà§à¦•à§à¦¤à¥¤"
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "সমà§à¦ªà§à§°à¦šà¦¾à§°"
-#~ msgid "PIN code for SIM card '%s' on '%s'"
-#~ msgstr "'%s' ত SIM কাৰà§à¦¡ '%s' ৰ বাবে PIN ক'ড"
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
-#~ msgid "Wrong PIN code; please contact your provider."
-#~ msgstr "ভà§à¦² PIN ক'ড; অনà§à¦—à§à§°à¦¹ কৰি সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° সৈতে যোগাযোগ কৰক।"
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "à¦à¦¡à¦¾à¦ªà¦Ÿà¦¿à¦­ টà§à§°à¦¾à¦¨à§à¦¸à¦®à¦¿à¦Ÿ ল'ড বেলেঞà§à¦šà¦¿à¦‚ (tlb)"
-#~ msgid "Wrong PUK code; please contact your provider."
-#~ msgstr "ভà§à¦² PUK ক'ড; অনà§à¦—à§à§°à¦¹ কৰি সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° সৈতে যোগাযোগ কৰক।"
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "à¦à¦¡à¦¾à¦ªà§à¦Ÿà¦¿à¦‚ ল'ড বেলেঞà§à¦šà¦¿à¦‚ (alb)"
-#~ msgid "Sending unlock code..."
-#~ msgstr "আনলক কৰাৰ ক'ড পঠিওৱা হৈছে..."
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (উপদেশিত)"
-#~ msgid "SIM PIN Unlock Required"
-#~ msgstr "SIM PIN আনলক কৰা পà§à§°à§Ÿà§‹à¦œà¦¨"
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
-#~ msgid ""
-#~ "The mobile broadband device '%s' requires a SIM PIN code before it can be "
-#~ "used."
-#~ msgstr ""
-#~ "'%s' ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ ডিভাইচ বà§à¦¯à§±à¦¹à¦¾à§° কৰাৰ আগতে à¦à¦Ÿà¦¾ SIM PIN ক'ড উপলবà§à¦§ থকা "
-#~ "আৱশà§à¦¯à¦•à¥¤"
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "সà§à¦²à§‡à¦‡à¦­à¦¬à§‹à§°"
-#~ msgid "PIN code:"
-#~ msgstr "PIN ক'ড:"
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "অৱসà§à¦¥à¦¾"
-#~ msgid "Show PIN code"
-#~ msgstr "PIN ক'ড দেখà§à§±à¦¾à¦“ক"
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "পà§à§°à¦¾à¦¥à¦®à¦¿à¦•"
-#~ msgid "SIM PUK Unlock Required"
-#~ msgstr "SIM PUK আনলক কৰা পà§à§°à§Ÿà§‹à¦œà¦¨"
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "লিংকৰ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£"
-#~ msgid ""
-#~ "The mobile broadband device '%s' requires a SIM PUK code before it can be "
-#~ "used."
-#~ msgstr ""
-#~ "'%s' ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ ডিভাইচ বà§à¦¯à§±à¦¹à¦¾à§° কৰাৰ আগতে à¦à¦Ÿà¦¾ SIM PUK ক'ড উপলবà§à¦§ থকা "
-#~ "আৱশà§à¦¯à¦•à¥¤"
-
-#~ msgid "PUK code:"
-#~ msgstr "PUK ক'ড:"
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
-#~ msgid "New PIN code:"
-#~ msgstr "নতà§à¦¨ PIN ক'ড:"
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "কমà§à¦ªà¦¨à¦¾à¦‚ক পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£"
-#~ msgid "Re-enter new PIN code:"
-#~ msgstr "নতà§à¦¨ PIN ক'ড পà§à¦¨à¦ƒ লিখক:"
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "লিংক আপ বিলমà§à¦¬"
-#~ msgid "Show PIN/PUK codes"
-#~ msgstr "PIN/PUK ক'ডসমূহ দেখà§à§±à¦¾à¦“ক"
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "লিংক ডাউন বিলমà§à¦¬"
-#~ msgid "GSM network."
-#~ msgstr "GSM নেটৱাৰà§à¦•à¥¤"
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP লকà§à¦·à§à¦¯"
-#~ msgid "Auto Ethernet"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ ইথাৰনেট"
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "বà§à§°à¦¿à¦œ পোৰà§à¦Ÿ"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "পথ মূলà§à¦¯"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "হেয়াৰপিন অৱসà§à¦¥à¦¾"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "বà§à§°à¦¿à¦œ"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "ছেকেণà§à¦¡"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "à¦à¦œà¦¿à¦‚ সময়"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক (সà§à¦ªà§‡à¦¨à¦¿à¦‚ টà§à§°à¦¿ পà§à§°à¦Ÿà§‹à¦•à¦²)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "আগবà§à§‹à§±à¦¾à§° বিলমà§à¦¬"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "হেলà§à¦²à§‹ সময়"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "সৰà§à¦¬à¦¾à¦§à¦¿à¦• আয়à§"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ইথাৰনেট"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "কà§à¦²à§Œà¦¨à§à¦¡ MAC ঠিকনা"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "ইনফিবেণà§à¦¡"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "ডাটাগà§à§°à¦¾à¦®"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "সংযà§à¦•à§à¦¤"
-#~ msgid "Wired Networks (%s)"
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦• (%s)"
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "পৰিৱহন অৱসà§à¦¥à¦¾"
-#~ msgid "Wired Network (%s)"
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦• (%s)"
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "অসামৰà§à¦¥à¦¬à¦¾à¦¨"
-#~ msgid "Wired Networks"
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦•à¦¸à¦®à§‚হ"
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
-#~ msgid "Wired Network"
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦•"
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ-সংযোগ"
-#~ msgid "You are now connected to the wired network."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦•à¦²à§ˆ সংযà§à¦•à§à¦¤à¥¤"
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤"
-#~ msgid "Configuring wired network connection '%s'..."
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦• সংযোগ '%s' সংৰূপণ কৰা হৈছে..."
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "অংশীদাৰী কৰা"
-#~ msgid "User authentication required for wired network connection '%s'..."
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦• সংযোগ '%s' ৰ কাৰণে বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨..."
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 সংৰূপ"
-#~ msgid "Requesting a wired network address for '%s'..."
-#~ msgstr "'%s' ৰ কাৰণে তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦• ঠিকনা অনà§à§°à§‹à¦§ কৰা হৈছে..."
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(কোনো সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ নাই)"
-#~ msgid "Wired network connection '%s' active"
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ নেটৱাৰà§à¦• সংযোগ '%s' সকà§à§°à¦¿à§Ÿ"
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à¦à¦Ÿà¦¾ সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ"
+msgstr[1] "%d সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ"
-#~ msgid "DSL authentication"
-#~ msgstr "DSL পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "ঠিকনাসমূহ"
-#~ msgid "_Connect to Hidden Wireless Network..."
-#~ msgstr "লà§à¦•à§à§±à¦¾ বেতাà¦à§° নেটৱাৰà§à¦•à¦²à§ˆ সংযà§à¦•à§à¦¤ কৰক (_C)..."
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "গেইটৱে"
-#~ msgid "Create _New Wireless Network..."
-#~ msgstr "নতà§à¦¨ বেতাà¦à§° নেটৱাৰà§à¦• সৃষà§à¦Ÿà¦¿ কৰক (_N)..."
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ"
-#~ msgid "Wireless Networks (%s)"
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦•à¦¸à¦®à§‚হ (%s)"
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "সনà§à¦§à¦¾à¦¨ ডমেইন"
-#~ msgid "Wireless Network (%s)"
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• (%s)"
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "ৰà§à¦Ÿà¦¿à¦‚"
-#~ msgid "Wireless Network"
-#~ msgid_plural "Wireless Networks"
-#~ msgstr[0] "বেতাà¦à§° নেটৱাৰà§à¦•"
-#~ msgstr[1] "বেতাà¦à§° নেটৱাৰà§à¦•à¦¸à¦®à§‚হ"
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "অবিকলà§à¦ªà¦¿à¦¤ পথৰ বাবে à¦à¦‡ নেটৱাৰà§à¦• কেতিয়াও বà§à¦¯à§±à¦¹à¦¾à§° নকৰিব"
-#~ msgid "wireless is disabled"
-#~ msgstr "বেতাà¦à§° অসামৰà§à¦¥à¦¬à¦¾à¦¨"
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "à¦à¦‡ সংযোগ সমà§à¦ªà§‚ৰà§à¦£ হবলে IPv ঠিকনাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#~ msgid "wireless is disabled by hardware switch"
-#~ msgstr "বেতাà¦à§° হাৰà§à¦¡à§±à§‡à§° চà§à¦‡à¦š দà§à¦¬à¦¾à§°à¦¾ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰা আছে"
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "উপেকà§à¦·à¦¾ কৰক"
-#~ msgid "More networks"
-#~ msgstr "অতিৰিকà§à¦¤ নেটৱাৰà§à¦•"
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤, (কেৱল DHCP)"
-#~ msgid "Wireless Networks Available"
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• উপসà§à¦¥à¦¿à¦¤"
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 সংৰূপ"
-#~ msgid "Use the network menu to connect to a wireless network"
-#~ msgstr "à¦à¦Ÿà¦¾ বেতাà¦à§° নেটৱাৰà§à¦•à¦²à§‡ সংযোগ কৰিবলে নেটৱাৰà§à¦• মেনৠবà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "à¦à¦‡ সংযোগ সমà§à¦ªà§‚ৰà§à¦£ হবলে IPv6 ঠিকনাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#~ msgid "Don't show this message again"
-#~ msgstr "à¦à¦‡ বাৰà§à¦¤à¦¾ আকৌ নেদেখà§à§±à¦¾à¦¬"
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "লà§à¦•à§à§±à¦¾à¦“ক"
-#~ msgid "You are now connected to the wireless network '%s'."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ বেতাà¦à§° নেটৱাৰà§à¦• '%s' লৈ সংযà§à¦•à§à¦¤à¥¤"
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "দেখà§à§±à¦¾à¦“ক"
-#~ msgid "Preparing wireless network connection '%s'..."
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• সংযোগ '%s' সৃষà§à¦Ÿà¦¿ কৰা হৈছে..."
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "আলেখà§à¦¯à§° নাম"
-#~ msgid "Configuring wireless network connection '%s'..."
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• '%s' সংৰূপণ কৰা হৈছে..."
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "ডিভাইচ"
-#~ msgid "User authentication required for wireless network '%s'..."
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• সংযোগ '%s' ৰ কাৰণে বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨..."
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡ সংযোগ কৰক"
-#~ msgid "Requesting a wireless network address for '%s'..."
-#~ msgstr "'%s' ৰ কাৰণে বেতাà¦à§° নেটৱাৰà§à¦• ঠিকনা অনà§à§°à§‹à¦§ কৰা হৈছে..."
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে উপলবà§à¦§"
-#~ msgid "Wireless network connection '%s' active: %s (%d%%)"
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• সংযোগ '%s' সকà§à§°à¦¿à§Ÿ: %s (%d%%)"
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "দল পৰà§à¦Ÿ"
-#~ msgid "Wireless network connection '%s' active"
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• সংযোগ '%s' সকà§à§°à¦¿à§Ÿ"
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON সংৰূপ"
-#~ msgid "WiMAX Mobile Broadband (%s)"
-#~ msgstr "WiMAX ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ (%s)"
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "দল"
-#~ msgid "WiMAX Mobile Broadband"
-#~ msgstr "WiMAX ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡"
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "উপধায়ক"
-#~ msgid "WiMAX is disabled by hardware switch"
-#~ msgstr "WiMAX হাৰà§à¦¡à§±à§‡à§° চà§à¦‡à¦š দà§à¦¬à¦¾à§°à¦¾ অসামৰà§à¦¥à¦¬à¦¾à¦¨"
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN id"
-#~ msgid "You are now connected to the WiMAX network."
-#~ msgstr "আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ WiMAX নেটৱাৰà§à¦•à¦²à§‡ সংযà§à¦•à§à¦¤à¥¤"
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
-#~ msgid "Error displaying connection information:"
-#~ msgstr "সঠিক তথà§à¦¯ দেখà§à§±à¦¾à¦“à¦à¦¤à§‡ তà§à§°à§à¦Ÿà¦¿:"
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "অভিগম বিনà§à¦¦à§"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc নেটৱাৰà§à¦•"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
-#~ msgid "LEAP"
-#~ msgstr "LEAP"
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
-#~ msgid "Dynamic WEP"
-#~ msgstr "ডাইনামিক WEP"
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
-#~ msgctxt "Wifi/wired security"
-#~ msgid "None"
-#~ msgstr "কোনো নহয়"
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "কোনো নহয়"
-#~ msgid "%s (default)"
-#~ msgstr "%s (অবিকলà§à¦ªà¦¿à¦¤)"
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 à¦à¦¨à§à¦Ÿà¦¾à§°à¦ªà§à§°à¦¾à¦‡à¦œ"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit কি (Hex অথবা ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-বিট পাচফà§à§°à§‡à¦‡à¦›"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "চলমান WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "১ (অবিকলà§à¦ªà¦¿à¦¤)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "২"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "৩"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "৪"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "খোলা চিসà§à¦Ÿà§‡à¦®"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "অংশীদাৰী কৰা কি'"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "চেনেল"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "সà§à§°à¦•à§à¦·à¦¾"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "পাছৱাৰà§à¦¡"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise ৰ বাবে কোনো সমৰà§à¦¥à¦¨ নাই...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "কি'"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP সূচী"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(dynamic-wep ৰ বাবে à¦à¦¤à¦¿à§Ÿà¦¾à¦“ কোনো সমৰà§à¦¥à¦¨ নাই...)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦®"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "পà§à§°à¦¤à¦¿à¦¬à¦¾à§° à¦à¦‡ পাছৱাৰà§à¦¡ বিচাৰিব"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "পাছৱাৰà§à¦¡ দেখà§à§±à¦¾à¦“ক"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "গনà§à¦¤à¦¬à§à¦¯"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "উপসৰà§à¦—"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "পৰৱৰà§à¦¤à§€ বিৰাম"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "মেটà§à§°à¦¿à¦•"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "কোনো সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ নাই।"
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "পৰিচয়"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' পাছৱাৰà§à¦¡"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "সেৱা"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "বেতাà¦à§° নেটৱাৰà§à¦•à§° দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"বেতাà¦à§° নেটৱাৰà§à¦• '%s' অভিগম কৰিবলে পাছৱাৰà§à¦¡à¦¸à¦®à§‚হ অথবা ইনকà§à§°à¦¿à¦ªà¦·à¦£ কি'সমূহৰ "
+"পà§à§°à§Ÿà§‹à¦œà¦¨à¥¤"
-#~ msgctxt "Speed"
-#~ msgid "Unknown"
-#~ msgstr "অজà§à¦žà¦¾à¦¤"
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ 802.1X পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
-#~ msgid "%d dB"
-#~ msgstr "%d dB"
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "নেটৱাৰà§à¦•à§° নাম"
-#~ msgctxt "WiMAX Base Station ID"
-#~ msgid "unknown"
-#~ msgstr "অজà§à¦žà¦¾à¦¤"
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
-#~ msgid "Ethernet (%s)"
-#~ msgstr "ইথাৰনেট (%s)"
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN ক'ডৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#~ msgid "802.11 WiFi (%s)"
-#~ msgstr "802.11 WiFi (%s)"
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "মবাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সেৱাৰ বাবে PIN ক'ডৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#~ msgid "GSM (%s)"
-#~ msgstr "GSM (%s)"
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
-#~ msgid "CDMA (%s)"
-#~ msgstr "CDMA (%s)"
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ নেটৱাৰà§à¦•à§° পাছৱাৰà§à¦¡"
-#~ msgid "WiMAX (%s)"
-#~ msgstr "WiMAX (%s)"
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' লে সংযোগ কৰিবলে à¦à¦Ÿà¦¾ পাছৱাৰà§à¦¡à§° পà§à§°à§Ÿà§‹à¦œà¦¨à¥¤"
-#~ msgid "General"
-#~ msgstr "সাধাৰণ"
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "আপà§à¦¨à¦¿ যোগ কৰিব বিচৰা সà§à¦²à§‡à¦‡à¦­ সংযোগৰ ধৰণ বাছক।"
-#~ msgid "Interface:"
-#~ msgstr "আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ :"
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "যোগ কৰক..."
-#~ msgid "Hardware Address:"
-#~ msgstr "হাৰà§à¦¡à§±à§‡à§° ঠিকনা:"
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "আতৰাওক"
-#~ msgid "Driver:"
-#~ msgstr "ডà§à§°à¦¾à¦‡à¦­à¦¾à§°:"
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল"
-#~ msgid "Speed:"
-#~ msgstr "গতি:"
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "সংযোগ কৰা হৈছে..."
-#~ msgid "Security:"
-#~ msgstr "সà§à§°à¦•à§à¦·à¦¾:"
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "সংযোগ সকà§à§°à¦¿à§Ÿ কৰিব পৰা নগল: %s"
-#~ msgid "IP Address:"
-#~ msgstr "IP ঠিকনা:"
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "সকà§à§°à¦¿à§Ÿ কৰক"
-#~ msgctxt "Address"
-#~ msgid "Unknown"
-#~ msgstr "অজà§à¦žà¦¾à¦¤"
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "নিষà§à¦•à§à§°à¦¿à§Ÿ কৰক"
-#~ msgid "Broadcast Address:"
-#~ msgstr "পà§à§°à¦šà¦¾à§° ঠিকনা:"
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
-#~ msgid "Subnet Mask:"
-#~ msgstr "চাবনেট মাসà§à¦•:"
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "à¦à¦‡ ধৰণৰ কোনো সংযোগ '%s' নাই"
-#~ msgctxt "Subnet Mask"
-#~ msgid "Unknown"
-#~ msgstr "অজà§à¦žà¦¾à¦¤"
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "সংযোগ ইতিমধà§à¦¯à§‡ সকà§à§°à¦¿à§Ÿ"
-#~ msgid "Default Route:"
-#~ msgstr "অবিকলà§à¦ªà¦¿à¦¤ পথ:"
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "সৃষà§à¦Ÿà¦¿ কৰক"
-#~ msgid "Primary DNS:"
-#~ msgstr "মূখà§à¦¯ DNS:"
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "আপà§à¦¨à¦¿ সৃষà§à¦Ÿà¦¿ কৰিব বিচৰা সংযোগৰ ধৰণ বাছক।"
-#~ msgid "Secondary DNS:"
-#~ msgstr "দà§à¦¬à¦¿à¦¤à§€à§Ÿ DNS:"
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"যদি আপà§à¦¨à¦¿ à¦à¦Ÿà¦¾ VPN সৃষà§à¦Ÿà¦¿ কৰি আছে, আৰৠআপà§à¦¨à¦¿ সৃষà§à¦Ÿà¦¿ কৰিব বিচৰা VPN সংযোগ "
+"তালিকাত "
+"নাথাকে, আপোনাৰ হয়তো সঠিক VPN পà§à¦²à¦¾à¦—িন ইনসà§à¦Ÿà¦² নাই।"
-#~ msgid "Ternary DNS:"
-#~ msgstr "তà§à§°à§Ÿà¦¾à¦¤à§à¦®à¦• DNS:"
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "নতà§à¦¨ সংযোগ"
-#~ msgid "Ignored"
-#~ msgstr "উপেকà§à¦·à¦¾ কৰা হৈছে"
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "সংযোগ মচি পেলাবলৈ অকà§à¦·à¦®: %s"
-#~ msgid "VPN Type:"
-#~ msgstr "VPN ধৰণ:"
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "আপà§à¦¨à¦¿ নিশà§à¦šà¦¿à¦¤à§°à§‚পে '%s' সংযোগ মচিবলে ইচà§à¦›à§à¦• নে?"
-#~ msgid "VPN Gateway:"
-#~ msgstr "VPN গেইটৱে:"
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "সংযোগ মচিব পৰা নগল: %s"
-#~ msgid "VPN Username:"
-#~ msgstr "VPN বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦®:"
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰক"
-#~ msgid "VPN Banner:"
-#~ msgstr "VPN বেনাৰ:"
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦®"
-#~ msgid "Base Connection:"
-#~ msgstr "ভিতà§à¦¤à¦¿ সংযোগ:"
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦®à¦• '%s' লৈ সংহতি কৰক"
-#~ msgid ""
-#~ "Copyright © 2004-2011 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2008 Novell, Inc.\n"
-#~ "and many other community contributors and translators"
-#~ msgstr ""
-#~ "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•à¦¾à§° © ২০০৪-২০১১ Red Hat, Inc.\n"
-#~ "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•à¦¾à§° © ২০০৫-২০০৮ Novell, Inc.\n"
-#~ "আৰৠঅনà§à¦¯ বহà§à¦¤à§‹ সমà§à¦ªà§à§°à¦¦à¦¾à§Ÿà§° অৱদানকাৰী আৰৠঅনà§à¦¬à¦¾à¦¦à¦•à¦¸à¦•à¦²"
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰিবলৈ অকà§à¦·à¦®: %s"
-#~ msgid ""
-#~ "Notification area applet for managing your network devices and "
-#~ "connections."
-#~ msgstr ""
-#~ "আপোনাৰ নেটৱাৰà§à¦• ডিভাইচ আৰৠসংযোগসমূহ বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¨à¦¾à§° বাবে অধিসূচনা সà§à¦¥à¦¾à¦¨à§° à¦à¦ªà§à¦²à§‡à¦Ÿà¥¤"
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "সংযোগ"
-#~ msgid "Missing resources"
-#~ msgstr "অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ সমà§à¦ªà¦¦"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "à¦à¦Ÿà¦¾ সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক"
-#~ msgid "Mobile broadband network password"
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ নেটৱাৰà§à¦•à§° পাছৱাৰà§à¦¡"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "à¦à¦Ÿà¦¾ সংযোগ সকà§à§°à¦¿à§Ÿ কৰক"
-#~ msgid "A password is required to connect to '%s'."
-#~ msgstr "'%s' লৈ সংযোগ কৰিবলৈ à¦à¦Ÿà¦¾ পাছৱাৰà§à¦¡à§° পà§à§°à§Ÿà§‹à¦œà¦¨à¥¤"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "নতà§à¦¨ হসà§à¦Ÿà¦¨à¦¾à¦®"
-#~ msgid "Password:"
-#~ msgstr "পাছৱাৰà§à¦¡:"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "চিসà§à¦Ÿà§‡à¦®à§° হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰক"
-#~ msgid "Disconnect failure"
-#~ msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা বà§à¦¯à§°à§à¦¥ হল"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
-#~ msgid ""
-#~ "\n"
-#~ "The VPN connection '%s' failed because the network connection was "
-#~ "interrupted."
-#~ msgstr ""
-#~ "\n"
-#~ "নেটৱাৰà§à¦• সংযোগ বিঘà§à¦¨à¦¿à¦¤ হোৱাৰ ফলত VPN সংযোগ '%s' বিফল হৈছে।"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "অনà§à¦—à§à§°à¦¹ কৰি à¦à¦Ÿà¦¾ বিকলà§à¦ª বাছক"
-#~ msgid ""
-#~ "\n"
-#~ "The VPN connection '%s' failed because the VPN service failed to start."
-#~ msgstr ""
-#~ "\n"
-#~ "VPN সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হোৱা বাবে VPN সংযোগ '%s' বà§à¦¯à§°à§à¦¥ হল।"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "বà§à¦¯à§±à¦¹à¦¾à§°"
-#~ msgid ""
-#~ "\n"
-#~ "The VPN connection '%s' failed because there were no valid VPN secrets."
-#~ msgstr ""
-#~ "\n"
-#~ "কোনো বৈধ VPN গোপন তথà§à¦¯ নথকা বাবে VPN সংযোগ '%s' বà§à¦¯à§°à§à¦¥ হল।"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "তৰà§à¦•à¦¸à¦®à§‚হ বিশà§à¦²à§‡à¦·à¦£ কৰিব পৰা নগল"
-#~ msgid ""
-#~ "\n"
-#~ "The VPN connection '%s' failed because of invalid VPN secrets."
-#~ msgstr ""
-#~ "\n"
-#~ "অবৈধ VPN গোপন তথà§à¦¯à§° বাবে VPN সংযোগ '%s' বà§à¦¯à§°à§à¦¥ হল।"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManager চলি থকা নাই।"
#~ msgid ""
+#~ "save :: save the connection\n"
#~ "\n"
-#~ "The VPN connection '%s' disconnected because the network connection was "
-#~ "interrupted."
+#~ "Sends the connection to NetworkManager that will save it.\n"
#~ msgstr ""
+#~ "save :: সংযোগ সংৰকà§à¦·à¦£ কৰক\n"
#~ "\n"
-#~ "নেটৱাৰà§à¦• সংযোগ বাধাগà§à§°à¦¸à§à¦¥ হোৱা বাবে VPN সংযোগ '%s' বিচà§à¦›à¦¿à¦¨à§à¦¨ হল।"
-
-#~ msgid ""
-#~ "\n"
-#~ "The VPN connection '%s' disconnected because the VPN service stopped."
-#~ msgstr ""
-#~ "\n"
-#~ "VPN সেৱা বনà§à¦§ হোৱা বাবে VPN সংযোগ '%s' বিচà§à¦›à¦¿à¦¨à§à¦¨ হল।"
-
-#~ msgid ""
-#~ "\n"
-#~ "The VPN connection '%s' disconnected."
-#~ msgstr ""
-#~ "\n"
-#~ "VPN সংযোগ '%s' বিচà§à¦›à¦¿à¦¨à§à¦¨ হল।"
-
-#~ msgid "VPN connection has been successfully established.\n"
-#~ msgstr "VPN সংযোগ সফলভাৱে সà§à¦¥à¦¾à¦ªà¦¨ কৰা হৈছে।\n"
-
-#~ msgid "VPN Login Message"
-#~ msgstr "VPN লগিন বাৰà§à¦¤à¦¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "The VPN connection '%s' failed because the VPN service failed to start.\n"
-#~ "\n"
-#~ "%s"
-#~ msgstr ""
-#~ "\n"
-#~ "VPN সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হোৱা বাবে VPN সংযোগ '%s' বà§à¦¯à§°à§à¦¥ হল।\n"
-#~ "\n"
-#~ "%s"
-
-#~ msgid "device not ready (firmware missing)"
-#~ msgstr "ডিভাইচ পà§à§°à¦¸à§à¦¤à§à¦¤ নহয় (ফাৰà§à¦®à§±à§‡à§° সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨)"
-
-#~ msgid "device not ready"
-#~ msgstr "ডিভাইচ পà§à§°à¦¸à§à¦¤à§à¦¤ নহয়"
-
-#~ msgid "Disconnect"
-#~ msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰক"
-
-#~ msgid "_VPN Connections"
-#~ msgstr "VPN সংযোগসমূহ (_V)"
-
-#~ msgid "_Configure VPN..."
-#~ msgstr "VPN সংৰূপণ কৰক (_C)..."
-
-#~ msgid "_Disconnect VPN"
-#~ msgstr "VPN ৰ সৈতে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰক (_D)..."
-
-#~ msgid "Enable _Wireless"
-#~ msgstr "বেতাà¦à§° সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক (_W)"
-
-#~ msgid "Enable _Mobile Broadband"
-#~ msgstr "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সকà§à§°à¦¿à§Ÿ কৰক (_M)"
-
-#~ msgid "Enable N_otifications"
-#~ msgstr "অধিসূচনাসমূহ সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক (_o)"
-
-#~ msgid "Connection _Information"
-#~ msgstr "সংযোগ তথà§à¦¯ (_I)"
-
-#~ msgid "Edit Connections..."
-#~ msgstr "সংযোগসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক..."
-
-#~ msgid "_Help"
-#~ msgstr "সহায় (_H)"
-
-#~ msgid "_About"
-#~ msgstr "বিষয়ে (_A)"
-
-#~ msgid "Disconnected"
-#~ msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
-
-#~ msgid "Preparing network connection '%s'..."
-#~ msgstr "নেটৱাৰà§à¦• সংযোগ '%s' পà§à§°à¦¸à§à¦¤à§à¦¤ কৰা হৈছে..."
-
-#~ msgid "User authentication required for network connection '%s'..."
-#~ msgstr "নেটৱাৰà§à¦• সংযোগ '%s' ৰ বাবে বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨..."
-
-#~ msgid "Network connection '%s' active"
-#~ msgstr "নেটৱাৰà§à¦• সংযোগ '%s' সকà§à§°à¦¿à§Ÿ"
-
-#~ msgid "Starting VPN connection '%s'..."
-#~ msgstr "VPN সংযোগ '%s' আৰমà§à¦­ কৰা হৈছে..."
-
-#~ msgid "User authentication required for VPN connection '%s'..."
-#~ msgstr "VPN সংযোগ '%s' ৰ বাবে বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨..."
-
-#~ msgid "Requesting a VPN address for '%s'..."
-#~ msgstr "'%s' ৰ বাবে à¦à¦Ÿà¦¾ VPN ঠিকনা অনà§à§°à§‹à¦§ কৰা হৈছে..."
-
-#~ msgid "NetworkManager Applet"
-#~ msgstr "NetworkManager à¦à¦ªà§à¦²à§‡à¦Ÿ"
-
-#~ msgid "Automatically unlock this device"
-#~ msgstr "à¦à¦‡ ডিভাইচ সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡ আনলক কৰক"
-
-#~ msgid "_Unlock"
-#~ msgstr "আনলক কৰক (_U)"
-
-#~ msgid "Connection Information"
-#~ msgstr "সংযোগ তথà§à¦¯"
-
-#~ msgid "Wired 802.1X authentication"
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ 802.1X পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
-
-#~ msgid "_Network name:"
-#~ msgstr "নেটৱাৰà§à¦•à§° নাম (_N):"
-
-#~ msgid "Failed to update connection secrets due to an unknown error."
-#~ msgstr "à¦à¦Ÿà¦¾ অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿à§° বাবে সংযোগ গোপনসমূহ আপডেইট কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-
-#~ msgid ""
-#~ "IP addresses identify your computer on the network. Click the \"Add\" "
-#~ "button to add an IP address."
-#~ msgstr ""
-#~ "IP ঠিকনাসমূহে আপোনাৰ কমপিউটাৰক নেটৱাৰà§à¦•à¦¤ চিনাকà§à¦¤ কৰে। à¦à¦Ÿà¦¾ IP ঠিকনা যোগ "
-#~ "কৰিবলে \"যোগ কৰক\" বà§à¦Ÿà¦¾à¦® কà§à¦²à¦¿à¦• কৰক।"
-
-#~ msgid "Ig_nore automatically obtained routes"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡ পà§à§°à¦¾à¦ªà§à¦¤ পথসমূহ উপেকà§à¦·à¦¾ কৰক (_n)"
-
-#~ msgid "_Use this connection only for resources on its network"
-#~ msgstr "à¦à¦‡ সংযোগক কেৱল ইয়াৰ নেটৱাৰà§à¦•à§° সমà§à¦ªà¦¸à¦®à§‚হৰ বাবে বà§à¦¯à§±à¦¹à¦¾à§° কৰক (_U)"
-
-#~ msgid ""
-#~ "If enabled, this connection will never be used as the default network "
-#~ "connection."
-#~ msgstr ""
-#~ "যদি সামৰà§à¦¥à¦¬à¦¾à¦¨, à¦à¦‡ সংযোগক কেতিয়াও অবিকলà§à¦ªà¦¿à¦¤ নেটৱাৰà§à¦• সংযোগ হিচাপে বà§à¦¯à§±à¦¹à¦¾à§° কৰা "
-#~ "নহব।"
-
-#~ msgid "_Username:"
-#~ msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° নাম (_U):"
-
-#~ msgid "_Service:"
-#~ msgstr "সেৱা (_S):"
-
-#~ msgid "Sho_w password"
-#~ msgstr "পাছৱাৰà§à¦¡ দেখà§à§±à¦¾à¦“ক (_w)"
-
-#~ msgid "_Password:"
-#~ msgstr "পাছৱাৰà§à¦¡ (_P):"
-
-#~ msgid "Automatic"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
-
-#~ msgid "Automatic with manual DNS settings"
-#~ msgstr "হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤ DNS সংহতিসমূহৰ সৈতে সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
-
-#~ msgid "Manual"
-#~ msgstr "হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤"
-
-#~ msgid "Link-Local"
-#~ msgstr "সংযোগ-সà§à¦¥à¦¾à¦¨à§€à§Ÿ"
-
-#~ msgid "Shared to other computers"
-#~ msgstr "অনà§à¦¯ কমপিউটাৰৰ সৈতে অংশীদাৰী কৰা আছে"
-
-#~ msgid "_Method:"
-#~ msgstr "পদà§à¦§à¦¤à¦¿ (_M):"
-
-#~ msgid "Addresses"
-#~ msgstr "ঠিকনাসমূহ"
-
-#~ msgid ""
-#~ "The DHCP client identifier allows the network administrator to customize "
-#~ "your computer's configuration. If you wish to use a DHCP client "
-#~ "identifier, enter it here."
-#~ msgstr ""
-#~ "DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ পৰিচয়কৰ সহায়ত নেটৱাৰà§à¦• পà§à§°à¦¶à¦¾à¦¸à¦•à§‡ আপোনাৰ কমপিউটাৰৰ সংৰূপ নিৰà§à¦§à¦¾à§°à¦£ "
-#~ "কৰিবলৈ পাৰিব। DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ পৰিচয়কৰ বà§à¦¯à§±à¦¹à¦¾à§° কৰিবলৈ ইচà§à¦›à§à¦• হ'লে সেইটো ইয়াত "
-#~ "লিখক।"
-
-#~ msgid ""
-#~ "Domains used when resolving host names. Use commas to separate multiple "
-#~ "domains."
-#~ msgstr ""
-#~ "হসà§à¦Ÿ নাম বিশà§à¦²à§‡à¦·à¦£ কৰাৰ বাবে বà§à¦¯à§±à¦¹à§ƒà¦¤ ডোমেইন। à¦à¦•à¦¾à¦§à¦¿à¦• ডোমেইন চিহà§à¦¨à¦¿à¦¤ কৰাৰ সময়ত "
-#~ "কমা চিহà§à¦¨ পà§à§°à§Ÿà§‹à¦— কৰা হ'ব।"
-
-#~ msgid "S_earch domains:"
-#~ msgstr "ডমেইনসমূহ সনà§à¦§à¦¾à¦¨ কৰক (_e):"
-
-#~ msgid "_DNS servers:"
-#~ msgstr "DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ (_D):"
-
-#~ msgid ""
-#~ "IP addresses of domain name servers used to resolve host names. Use "
-#~ "commas to separate multiple domain name server addresses."
-#~ msgstr ""
-#~ "হসà§à¦Ÿ নাম বিশà§à¦²à§‡à¦·à¦£ কৰাৰ বাবে বà§à¦¯à§±à¦¹à§ƒà¦¤ ডোমেইন নাম চাৰà§à¦­à¦¾à§°à§° IP ঠিকনা। à¦à¦•à¦¾à¦§à¦¿à¦• "
-#~ "ডোমেইন নাম চাৰà§à¦­à¦¾à§°à§° ঠিকনা চিহà§à¦¨à¦¿à¦¤ কৰাৰ সময় কমা চিহà§à¦¨ পà§à§°à§Ÿà§‹à¦— কৰা হ'ব।"
-
-#~ msgid "Require IPv_4 addressing for this connection to complete"
-#~ msgstr "à¦à¦‡ সংযোগ সমà§à¦ªà§‚ৰà§à¦£ হবলে IPv4 ঠিকনাৰ পà§à§°à§Ÿà§‹à¦œà¦¨ (_4)"
-
-#~ msgid ""
-#~ "When connecting to IPv6-capable networks, allows the connection to "
-#~ "complete if IPv4 configuration fails but IPv6 configuration succeeds."
-#~ msgstr ""
-#~ "IPv6 ৰ সৈতে সà§à¦¸à¦™à§à¦—ত নেটৱাৰà§à¦•à§° সৈতে সংযোগ কৰোà¦à¦¤à§‡, সংযোগক সমà§à¦ªà§‚ৰà§à¦£ হ'বলৈ দিয়ে যদি "
-#~ "IPv4 সংৰূপ বিফল হয় কিনà§à¦¤à§ IPv6 সংৰূপ সফল হয়।"
-
-#~ msgid "_Routes…"
-#~ msgstr "পথসমূহ (_R)…"
-
-#~ msgid "Require IPv_6 addressing for this connection to complete"
-#~ msgstr "à¦à¦‡ সংযোগ সমà§à¦ªà§‚ৰà§à¦£ হবলে IPv6 ঠিকনাৰ পà§à§°à§Ÿà§‹à¦œà¦¨ (_6)"
-
-#~ msgid ""
-#~ "When connecting to IPv4-capable networks, allows the connection to "
-#~ "complete if IPv6 configuration fails but IPv4 configuration succeeds."
-#~ msgstr ""
-#~ "IPv4 ৰ সৈতে সà§à¦¸à¦™à§à¦—ত নেটৱাৰà§à¦•à§° সৈতে সংযোগ কৰোà¦à¦¤à§‡, সংযোগক সমà§à¦ªà§‚ৰà§à¦£ হ'বলৈ দিয়ে যদি "
-#~ "IPv4 সংৰূপ বিফল হয় কিনà§à¦¤à§ IPv4 সংৰূপ সফল হয়।"
-
-#~ msgid "Any"
-#~ msgstr "যিকোনো"
-
-#~ msgid "3G (UMTS/HSPA)"
-#~ msgstr "3G (UMTS/HSPA)"
-
-#~ msgid "2G (GPRS/EDGE)"
-#~ msgstr "2G (GPRS/EDGE)"
-
-#~ msgid "Prefer 3G (UMTS/HSPA)"
-#~ msgstr "পছনà§à¦¦ 3G (UMTS/HSPA)"
-
-#~ msgid "Prefer 2G (GPRS/EDGE)"
-#~ msgstr "পছনà§à¦¦ 2G (GPRS/EDGE)"
-
-#~ msgid "Basic"
-#~ msgstr "মৌলিক"
-
-#~ msgid "Nu_mber:"
-#~ msgstr "সংখà§à¦¯à¦¾ (_m):"
-
-#~ msgid "Advanced"
-#~ msgstr "উনà§à¦¨à¦¤"
-
-#~ msgid "_APN:"
-#~ msgstr "APN (_A):"
-
-#~ msgid "N_etwork ID:"
-#~ msgstr "নেটৱাৰà§à¦•à§° ID (_e):"
-
-#~ msgid "_Type:"
-#~ msgstr "ধৰণ (_T):"
-
-#~ msgid "Change..."
-#~ msgstr "পৰিবৰà§à¦¤à¦¨ কৰক..."
-
-#~ msgid "P_IN:"
-#~ msgstr "PIN (_I):"
-
-#~ msgid "Allow _roaming if home network is not available"
-#~ msgstr "ঘৰ নেটৱাৰà§à¦• উপসà§à¦¥à¦¿à¦¤ নাথাকিলে ৰ'মিংৰ অনà§à¦®à¦¤à¦¿ দিয়ক (_r)"
-
-#~ msgid "Sho_w passwords"
-#~ msgstr "পাছৱাৰà§à¦¡à¦¸à¦®à§‚হ দেখà§à§±à¦¾à¦“ক (_w)"
-
-#~ msgid "Authentication"
-#~ msgstr "পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
-
-#~ msgid "Allowed methods:"
-#~ msgstr "অনà§à¦®à§‹à¦¦à¦¿à¦¤ পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হ:"
-
-#~ msgid "Configure _Methods…"
-#~ msgstr "পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হ সংৰূপণ কৰক (_M)…"
-
-#~ msgid "Compression"
-#~ msgstr "সংকোচন"
-
-#~ msgid "_Use point-to-point encryption (MPPE)"
-#~ msgstr "বিনà§à¦¦à§à§°-পৰা-বিনà§à¦¦à§ ইনকà§à§°à¦¿à¦ªà¦·à¦£ বà§à¦¯à§±à¦¹à¦¾à§° কৰক (MPPE) (_U)"
-
-#~ msgid "_Require 128-bit encryption"
-#~ msgstr "128-bit ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨ (_R)"
-
-#~ msgid "Use _stateful MPPE"
-#~ msgstr "অৱসà§à¦¥à¦¾à¦ªà§‚ৰà§à¦£ MPPE বà§à¦¯à§±à¦¹à¦¾à§° কৰক (_s)"
-
-#~ msgid "Allow _BSD data compression"
-#~ msgstr "BSD তথà§à¦¯ সংকোচনৰ অনà§à¦®à¦¤à¦¿ দিয়ক (_B)"
-
-#~ msgid "Allow _Deflate data compression"
-#~ msgstr "ডিফà§à¦²à§‡à¦‡à¦Ÿ তথà§à¦¯ সংকোচনৰ অনà§à¦®à¦¤à¦¿ দিয়ক (_D)"
-
-#~ msgid "Use TCP _header compression"
-#~ msgstr "TCP হেডাৰ সংকোচন বà§à¦¯à§±à¦¹à¦¾à§° কৰক (_h)"
-
-#~ msgid "Echo"
-#~ msgstr "Echo"
-
-#~ msgid "Send PPP _echo packets"
-#~ msgstr "PPP echo পেকেটসমূহ পঠাওক (_e)"
-
-#~ msgid "Twisted Pair (TP)"
-#~ msgstr "টà§à¦‡à¦¸à§à¦Ÿà§‡à¦¡ পেয়াৰ (TP)"
-
-#~ msgid "Attachment Unit Interface (AUI)"
-#~ msgstr "à¦à¦Ÿà¦¾à¦šà¦®à§‡à¦¨à§à¦Ÿ à¦à¦•à¦• আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  (AUI)"
-
-#~ msgid "BNC"
-#~ msgstr "BNC"
-
-#~ msgid "Media Independent Interface (MII)"
-#~ msgstr "মাধà§à¦¯à¦® মà§à¦•à§à¦¤ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  (MII)"
-
-#~ msgid "10 Mb/s"
-#~ msgstr "10 Mb/s"
-
-#~ msgid "100 Mb/s"
-#~ msgstr "100 Mb/s"
-
-#~ msgid "1 Gb/s"
-#~ msgstr "1 Gb/s"
-
-#~ msgid "10 Gb/s"
-#~ msgstr "10 Gb/s"
-
-#~ msgid "_Port:"
-#~ msgstr "পৰà§à¦Ÿ (_P):"
-
-#~ msgid "_Speed:"
-#~ msgstr "গতি (_S):"
-
-#~ msgid "Full duple_x"
-#~ msgstr "সমà§à¦ªà§‚ৰà§à¦£ ডà§à¦ªà§à¦²à§‡à¦•à§à¦¸ (_x)"
-
-#~ msgid "Aut_onegotiate"
-#~ msgstr "সà§à¦¬à¦†à¦ªà§‹à¦š (_o)"
-
-#~ msgid "_Device MAC address:"
-#~ msgstr "ডিভাইচ MAC ঠিকনা (_D):"
-
-#~ msgid "C_loned MAC address:"
-#~ msgstr "কà§à¦²à§Œà¦¨à§à¦¡ MAC ঠিকনা (_l):"
-
-#~ msgid ""
-#~ "The MAC address entered here will be used as hardware address for the "
-#~ "network device this connection is activated on. This feature is known as "
-#~ "MAC cloning or spoofing. Example: 00:11:22:33:44:55"
-#~ msgstr ""
-#~ "ইয়াত সà§à¦®à§à§±à¦¾ MAC ঠিকনাক à¦à¦‡ সংযোগ সকà§à§°à¦¿à§Ÿ কৰা নেটৱাৰà§à¦• ডিভাইচৰ বাবে হাৰà§à¦¡à§±à§‡à§° "
-#~ "ঠিকনা হিচাপে বà§à¦¯à§±à¦¹à¦¾à§° কৰা হব। à¦à¦‡ বৈশিষà§à¦Ÿà¦• MAC কà§à¦²à§Œà¦¨à¦¿à¦‚ অথবা সà§à¦ªà§à¦«à¦¿à¦‚ হিচাপে জনা "
-#~ "যায়। উদাহৰণ: 00:11:22:33:44:55"
-
-#~ msgid "_MTU:"
-#~ msgstr "MTU (_M):"
-
-#~ msgid "A (5 GHz)"
-#~ msgstr "A (5 GHz)"
-
-#~ msgid "B/G (2.4 GHz)"
-#~ msgstr "B/G (2.4 GHz)"
-
-#~ msgid "mW"
-#~ msgstr "mW"
-
-#~ msgid "Transmission po_wer:"
-#~ msgstr "পৰিবহন শকà§à¦¤à¦¿ (_w):"
-
-#~ msgid "Mb/s"
-#~ msgstr "Mb/s"
-
-#~ msgid "_Rate:"
-#~ msgstr "হাৰ (_R):"
-
-#~ msgid ""
-#~ "This option locks this connection to the wireless access point (AP) "
-#~ "specified by the BSSID entered here. Example: 00:11:22:33:44:55"
-#~ msgstr ""
-#~ "à¦à¦‡ বিকলà§à¦ªà¦‡ ইয়াত দিয়া BSSID য়ে নিৰà§à¦§à¦¾à§°à¦¿à¦¤ কৰাৰ মতে বেতাà¦à§° অভিগম পইনà§à¦Ÿ (AP) ত "
-#~ "সংযোগক লক কৰে। যেনে: 00:11:22:33:44:55"
-
-#~ msgid "C_hannel:"
-#~ msgstr "চেনেল (_h):"
-
-#~ msgid "M_ode:"
-#~ msgstr "অৱসà§à¦¥à¦¾ (_o):"
-
-#~ msgid "S_ecurity:"
-#~ msgstr "সà§à§°à¦•à§à¦·à¦¾ (_e):"
-
-#~ msgid "Allowed Authentication Methods"
-#~ msgstr "অনà§à¦®à§‹à¦¦à¦¿à¦¤ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হ"
-
-#~ msgid "_EAP"
-#~ msgstr "EAP (_E)"
-
-#~ msgid "Extensible Authentication Protocol"
-#~ msgstr "পà§à§°à¦¸à¦¾à§°à¦¨à¦¯à§‹à¦—à§à¦¯ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পà§à§°à¦Ÿà§‹à¦•à¦²"
-
-#~ msgid "_PAP"
-#~ msgstr "PAP (_P)"
-
-#~ msgid "Password Authentication Protocol"
-#~ msgstr "পাছৱাৰà§à¦¡ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পà§à§°à¦Ÿà§‹à¦•à¦²"
-
-#~ msgid "C_HAP"
-#~ msgstr "CHAP (_H)"
-
-#~ msgid "Challenge Handshake Authentication Protocol"
-#~ msgstr "হেণà§à¦¡à¦¶à§‡à¦‡à¦• পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পà§à§°à¦Ÿà§‹à¦•à¦²à¦• পà§à§°à¦¤à§à¦¯à¦¾à¦¹à§à¦¬à¦¾à¦¨ জনাওক"
-
-#~ msgid "_MSCHAP"
-#~ msgstr "MSCHAP (_M)"
-
-#~ msgid "Microsoft Challenge Handshake Authentication Protocol"
-#~ msgstr "Microsoft পà§à§°à¦¤à§à¦¯à¦¾à¦¹à§à¦¬à¦¾à¦¨ হেণà§à¦¡à¦›à§‡à¦‡à¦• পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পà§à§°à¦Ÿà§‹à¦•à¦²"
-
-#~ msgid "MSCHAP v_2"
-#~ msgstr "MSCHAP v_2"
-
-#~ msgid "Microsoft Challenge Handshake Authentication Protocol version 2"
-#~ msgstr "Microsoft পà§à§°à¦¤à§à¦¯à¦¾à¦¹à§à¦¬à¦¾à¦¨ হেণà§à¦¡à¦¶à§‡à¦‡à¦• পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পà§à§°à¦Ÿà§‹à¦•à¦²à¦• সংসà§à¦•à§°à¦£ ২"
-
-#~ msgid ""
-#~ "In most cases, the provider's PPP servers will support all authentication "
-#~ "methods. If connections fail, try disabling support for some methods."
-#~ msgstr ""
-#~ "বেছিৰভাগ কà§à¦·à§‡à¦¤à§à§°à¦¤, পà§à§°à¦¦à¦¾à¦¨à¦•à¦¾à§°à§€à§° PPP চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হে সকলো পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পদà§à¦§à¦¤à¦¿ সমৰà§à¦¥à¦¨ "
-#~ "কৰিব। যদি সংযোগসমূহ বà§à¦¯à§°à§à¦¥ হব, কিছà§à¦®à¦¾à¦¨ পদà§à¦§à¦¤à¦¿à§° বাবে সমৰà§à¦¥à¦¨ অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰি চাওক।"
-
-#~ msgid " "
-#~ msgstr " "
-
-#~ msgid "Choose a VPN Connection Type"
-#~ msgstr "à¦à¦Ÿà¦¾ VPN সংযোগ ধৰণ বাছক"
-
-#~ msgid ""
-#~ "Select the type of VPN you wish to use for the new connection. If the "
-#~ "type of VPN connection you wish to create does not appear in the list, "
-#~ "you may not have the correct VPN plugin installed."
-#~ msgstr ""
-#~ "নতà§à¦¨ সংযোগৰ বাবে বà§à¦¯à§±à¦¹à¦¾à§° কৰিব বিচৰা VPN ৰ ধৰণ বাছক। যদি আপà§à¦¨à¦¿ সৃষà§à¦Ÿà¦¿ কৰিব "
-#~ "বিচৰা VPN সংযোগ তালিকাত নাথাকে, আপোনাৰ হয়তো সঠিক VPN পà§à¦²à¦¾à¦—িন ইনসà§à¦Ÿà¦² নাই।"
-
-#~ msgid "Create…"
-#~ msgstr "সৃষà§à¦Ÿà¦¿ কৰক..."
-
-#~ msgid "Address"
-#~ msgstr "ঠিকনা"
-
-#~ msgid "Netmask"
-#~ msgstr "নেটমাসà§à¦•"
-
-#~ msgid "Gateway"
-#~ msgstr "গেইটৱে"
-
-#~ msgid "Metric"
-#~ msgstr "মেটà§à§°à¦¿à¦•"
-
-#~ msgid "Prefix"
-#~ msgstr "উপসৰà§à¦—"
-
-#~ msgid "Could not load DSL user interface."
-#~ msgstr "DSL বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিব পৰা নাযায়।"
-
-#~ msgid "Automatic (VPN)"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (VPN)"
-
-#~ msgid "Automatic (VPN) addresses only"
-#~ msgstr "কেৱল সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (VPN) ঠিকনাসমূহ"
-
-#~ msgid "Automatic (PPP)"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (PPP)"
-
-#~ msgid "Automatic (PPP) addresses only"
-#~ msgstr "কেৱল সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (PPP) ঠিকনাসমূহ"
-
-#~ msgid "Automatic (PPPoE)"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (PPPoE)"
-
-#~ msgid "Automatic (PPPoE) addresses only"
-#~ msgstr "কেৱল সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (PPPoE) ঠিকনাসমূহ"
-
-#~ msgid "Automatic (DHCP)"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (DHCP)"
-
-#~ msgid "Automatic (DHCP) addresses only"
-#~ msgstr "কেৱল সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ (DHCP) ঠিকনাসমূহ"
-
-#~ msgid "Link-Local Only"
-#~ msgstr "কেৱল সংযোগ-সà§à¦¥à¦¾à¦¨à§€à§Ÿ"
-
-#~ msgid "Additional _DNS servers:"
-#~ msgstr "অতিৰিকà§à¦¤ DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ (_D):"
-
-#~ msgid "Additional s_earch domains:"
-#~ msgstr "অতিৰিকà§à¦¤ সনà§à¦§à¦¾à¦¨ ডমেইনসমূহ (_e):"
-
-#~ msgid "Editing IPv4 routes for %s"
-#~ msgstr "%s ৰ বাবে IPv4 পথবোৰ সমà§à¦ªà¦¾à¦¦à¦¨ কৰা"
-
-#~ msgid "IPv4 Settings"
-#~ msgstr "IPv4 সংহতিসমূহ"
-
-#~ msgid "Could not load IPv4 user interface."
-#~ msgstr "IPv4 বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিব পৰা নগল।"
-
-#~ msgid "Automatic, addresses only"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤, কেৱল ঠিকনা"
-
-#~ msgid "Ignore"
-#~ msgstr "উপেকà§à¦·à¦¾ কৰক"
-
-#~ msgid "Automatic, DHCP only"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤, কেৱল DHCP"
-
-#~ msgid "Editing IPv6 routes for %s"
-#~ msgstr "%s ৰ বাবে IPv6 পথ সমà§à¦ªà¦¾à¦¦à¦¨"
-
-#~ msgid "IPv6 Settings"
-#~ msgstr "IPv6 ৰ সংহতিসমূহ"
-
-#~ msgid "Could not load IPv6 user interface."
-#~ msgstr "IPv6 বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিবলৈ বà§à¦¯à§°à§à¦¥à¥¤"
-
-#~ msgid "Could not load mobile broadband user interface."
-#~ msgstr "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিবলৈ বà§à¦¯à§°à§à¦¥à¥¤"
-
-#~ msgid "Unsupported mobile broadband connection type."
-#~ msgstr "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সংযোগৰ ধৰণ সমৰà§à¦¥à¦¿à¦¤ নহয়।"
-
-#~ msgid "Select Mobile Broadband Provider Type"
-#~ msgstr "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° ধৰণ বাছক"
-
-#~ msgid ""
-#~ "Select the technology your mobile broadband provider uses. If you are "
-#~ "unsure, ask your provider."
-#~ msgstr ""
-#~ "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° দà§à¦¬à¦¾à§°à¦¾ বà§à¦¯à§±à¦¹à§ƒà¦¤ সেৱা বাছক। à¦à¦‡ তথà§à¦¯ অজà§à¦žà¦¾à¦¤ "
-#~ "থাকিলে, সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° সৈতে যোগাযোগ কৰক।"
-
-#~ msgid ""
-#~ "My provider uses _GSM-based technology (i.e. GPRS, EDGE, UMTS, HSDPA)"
-#~ msgstr ""
-#~ "মোৰ সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° দà§à¦¬à¦¾à§°à¦¾ GSM-ভিতà§à¦¤à¦¿à¦• পà§à§°à¦¯à§à¦•à§à¦¤à¦¿ বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয় (অৰà§à¦¥à¦¾à§Ž GPRS, "
-#~ "EDGE, UMTS, HSDPA) (_G)"
-
-#~ msgid "My provider uses C_DMA-based technology (i.e. 1xRTT, EVDO)"
-#~ msgstr ""
-#~ "মোৰ সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾ দà§à¦¬à¦¾à§°à¦¾ CDMA-ভিতà§à¦¤à¦¿à¦• পà§à§°à¦¯à§à¦•à§à¦¤à¦¿ বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয় (অৰà§à¦¥à¦¾à§Ž 1xRTT, "
-#~ "EVDO) (_D)"
-
-#~ msgid "PAP"
-#~ msgstr "PAP"
-
-#~ msgid "CHAP"
-#~ msgstr "CHAP"
-
-#~ msgid "MSCHAPv2"
-#~ msgstr "MSCHAPv2"
-
-#~ msgid "MSCHAP"
-#~ msgstr "MSCHAP"
-
-#~ msgid "Editing PPP authentication methods for %s"
-#~ msgstr "%s ৰ বাবে PPP পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পদà§à¦§à¦¤à¦¿ সমà§à¦ªà¦¾à¦¦à¦¨"
-
-#~ msgid "PPP Settings"
-#~ msgstr "PPP ৰ সংহতিসমূহ"
-
-#~ msgid "Could not load PPP user interface."
-#~ msgstr "PPP বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিবলৈ বà§à¦¯à§°à§à¦¥à¥¤"
-
-#~ msgid "Could not load VPN user interface."
-#~ msgstr "VPN বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিব পৰা নগল।"
-
-#~ msgid "Could not find VPN plugin service for '%s'."
-#~ msgstr "'%s' ৰ বাবে VPN পà§à¦²à¦¾à¦—-ইন সেৱা পোৱা নাযায়।"
-
-#~ msgid ""
-#~ "This option locks this connection to the network device specified by its "
-#~ "permanent MAC address entered here. Example: 00:11:22:33:44:55"
-#~ msgstr ""
-#~ "à¦à¦‡ বিকলà§à¦ªà§Ÿ নেটৱাৰà§à¦• ডিভাইচ যাক ইয়াত সà§à¦®à§à§±à¦¾ তাৰ সà§à¦¥à¦¾à§Ÿà§€ MAC ঠিকনাৰে ধাৰà§à¦¯à§à¦¯ কৰা "
-#~ "হৈছে তালৈ à¦à¦‡ সংযোগক লক কৰে। উদাহৰণসà§à¦¬à§°à§‚প: 00:11:22:33:44:55"
-
-#~ msgid "Wired"
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤"
-
-#~ msgid "Could not load wired user interface."
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিবলৈ বà§à¦¯à§°à§à¦¥à¥¤"
-
-#~ msgid "802.1x Security"
-#~ msgstr "802.1x সà§à§°à¦•à§à¦·à¦¾"
-
-#~ msgid "Could not load Wired Security security user interface."
-#~ msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ সà§à§°à¦•à§à¦·à¦¾ সà§à§°à¦•à§à¦·à¦¾ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিব নোৱাৰি।"
-
-#~ msgid "default"
-#~ msgstr "অবিকলà§à¦ªà¦¿à¦¤"
-
-#~ msgid "Wireless"
-#~ msgstr "বেতাà¦à§°"
-
-#~ msgid "Could not load WiFi user interface."
-#~ msgstr "WiFi বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিব পৰা নাযায়।"
-
-#~ msgid "Wireless connection %d"
-#~ msgstr "বেতাà¦à§° সংযোগ %d"
-
-#~ msgid "WEP 40/128-bit Key (Hex or ASCII)"
-#~ msgstr "WEP 40/128-bit কি (Hex অথবা ASCII)"
-
-#~ msgid "Dynamic WEP (802.1x)"
-#~ msgstr "ডাইনামিক WEP (802.1x)"
-
-#~ msgid "WPA & WPA2 Personal"
-#~ msgstr "WPA আৰৠWPA2 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত"
-
-#~ msgid "Could not load WiFi security user interface; missing WiFi setting."
-#~ msgstr ""
-#~ "WiFi সà§à§°à¦•à§à¦·à¦¾à§° বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিবলৈ বà§à¦¯à§°à§à¦¥; WiFi সংহতিসমূহ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-
-#~ msgid "Wireless Security"
-#~ msgstr "বেতাà¦à§° সà§à§°à¦•à§à¦·à¦¾"
-
-#~ msgid "Could not load WiFi security user interface."
-#~ msgstr "WiFi সà§à§°à¦•à§à¦·à¦¾à§° বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ল'ড কৰিবলৈ বà§à¦¯à§°à§à¦¥à¥¤"
-
-#~ msgid "Editing %s"
-#~ msgstr "%s সমà§à¦ªà¦¾à¦¦à¦¨"
-
-#~ msgid "Editing un-named connection"
-#~ msgstr "নামবিহীন সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨"
-
-#~ msgid ""
-#~ "The connection editor could not find some required resources (the .ui "
-#~ "file was not found)."
-#~ msgstr ""
-#~ "সংযোগ সমà§à¦ªà¦¾à¦¦à¦•à§‡ কিছà§à¦®à¦¾à¦¨ পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ সমà§à¦ªà¦¦ বিচাৰি নাপায় (.ui ফাইল পোৱা নগল)।"
-
-#~ msgid "Error creating connection editor dialog."
-#~ msgstr "সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨à§° বাৰà§à¦¤à¦¾ পà§à§°à¦¸à§à¦¤à§à¦¤ কৰিবলৈ তà§à§°à§à¦Ÿà¦¿à¥¤"
-
-#~ msgid "_Save"
-#~ msgstr "সংৰকà§à¦·à¦£ কৰক (_S)"
-
-#~ msgid "Save any changes made to this connection."
-#~ msgstr "à¦à¦‡ সংযোগলে কৰা যিকোনো পৰিবৰà§à¦¤à¦¨ সংৰকà§à¦·à¦£ কৰক।"
-
-#~ msgid "_Save..."
-#~ msgstr "সংৰকà§à¦·à¦£ কৰক (_S)..."
-
-#~ msgid "Authenticate to save this connection for all users of this machine."
-#~ msgstr ""
-#~ "à¦à¦‡ ডিভাইচৰ সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে à¦à¦‡ সংযোগ সংৰকà§à¦·à¦£ কৰাৰ বাবে পà§à§°à¦®à¦¾à¦£à§€à¦¤ কৰক।"
-
-#~ msgid "_Import"
-#~ msgstr "ইমপোৰà§à¦Ÿ কৰক (_I)"
-
-#~ msgid "E_xport"
-#~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à§°à§à¦Ÿ কৰক (_x)"
-
-#~ msgid "Connection _name:"
-#~ msgstr "সংযোগৰ নাম (_n):"
-
-#~ msgid "Connect _automatically"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à¦¬à§‡ সংযোগ কৰা হ'ব (_a)"
-
-#~ msgid "A_vailable to all users"
-#~ msgstr "সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে উপসà§à¦¥à¦¿à¦¤"
-
-#~ msgid "%d minute ago"
-#~ msgid_plural "%d minutes ago"
-#~ msgstr[0] "%d মিনিট আগতে"
-#~ msgstr[1] "%d মিনিট আগতে"
-
-#~ msgid "%d hour ago"
-#~ msgid_plural "%d hours ago"
-#~ msgstr[0] "%d ঘনà§à¦Ÿà¦¾ আগতে"
-#~ msgstr[1] "%d ঘনà§à¦Ÿà¦¾ আগতে"
-
-#~ msgid "%d day ago"
-#~ msgid_plural "%d days ago"
-#~ msgstr[0] "%d দিন আগতে"
-#~ msgstr[1] "%d দিন আগতে"
-
-#~ msgid "%d month ago"
-#~ msgid_plural "%d months ago"
-#~ msgstr[0] "%d মাহ আগতে"
-#~ msgstr[1] "%d মাহ আগতে"
-
-#~ msgid "%d year ago"
-#~ msgid_plural "%d years ago"
-#~ msgstr[0] "%d বছৰ আগতে"
-#~ msgstr[1] "%d বছৰ আগতে"
-
-#~ msgid "Connection add failed"
-#~ msgstr "সংযোগ যোগ কৰিবলৈ বà§à¦¯à§°à§à¦¥"
-
-#~ msgid "The property '%s' / '%s' is invalid: %d"
-#~ msgstr "বৈশিষà§à¦Ÿ '%s' / '%s' অবৈধ: %d"
-
-#~ msgid "An unknown error occurred."
-#~ msgstr "à¦à¦Ÿà¦¾ অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿ হৈছে।"
-
-#~ msgid ""
-#~ "The connection editor dialog could not be initialized due to an unknown "
-#~ "error."
-#~ msgstr "অজà§à¦žà¦¾à¦¤ কাৰণে সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ বà§à¦¯à§±à¦¸à§à¦¥à¦¾à§° বাৰà§à¦¤à¦¾ আৰমà§à¦­ কৰা নাযায়।"
-
-#~ msgid "Could not edit new connection"
-#~ msgstr "নতà§à¦¨ সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰা সমà§à¦­à§± নহয়"
-
-#~ msgid "Could not edit connection"
-#~ msgstr "সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰা সমà§à¦­à§± নহয়"
-
-#~ msgid "Are you sure you wish to delete the connection %s?"
-#~ msgstr "আপà§à¦¨à¦¿ নিশà§à¦šà¦¿à¦¤à§°à§‚পে %s সংযোগ মচিবলে ইচà§à¦›à§à¦• নে?"
-
-#~ msgid "Cannot import VPN connection"
-#~ msgstr "VPN সংযোগ ইমপোৰà§à¦Ÿ কৰিবলৈ বà§à¦¯à§°à§à¦¥"
+#~ "সংযোগক NetworkManager লৈ পঠায় যি ইয়াক সংৰকà§à¦·à¦£ কৰিব।\n"
#~ msgid ""
-#~ "The VPN plugin failed to import the VPN connection correctly\n"
+#~ "Usage: nmcli connection show { ARGUMENTS | help }\n"
#~ "\n"
-#~ "Error: no VPN service type."
-#~ msgstr ""
-#~ "VPN পà§à¦²à¦¾à¦—-ইন দà§à¦¬à¦¾à§°à¦¾ সঠিকভাবে VPN সংযোগ ইমপোৰà§à¦Ÿ কৰা সমà§à¦­à§± নহয়\n"
+#~ "ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
#~ "\n"
-#~ "তà§à§°à§à¦Ÿà¦¿: কোনো VPN সেৱাৰ ধৰণ উপলবà§à¦§ নহয়।"
-
-#~ msgid "Could not edit imported connection"
-#~ msgstr "ইমপোৰà§à¦Ÿ কৰা সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰা সমà§à¦­à§± নহয়"
-
-#~ msgid "Name"
-#~ msgstr "নাম"
-
-#~ msgid "Last Used"
-#~ msgstr "সৰà§à¦¬à¦¶à§‡à¦· বà§à¦¯à§±à¦¹à§ƒà¦¤"
-
-#~ msgid "No VPN plugin available. Please install one to enable this button."
-#~ msgstr ""
-#~ "কোনো VPN পà§à¦²à¦¾à¦—িন উপলবà§à¦§ নাই। à¦à¦‡ বà§à¦Ÿà¦¾à¦® সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে অনà§à¦—à§à§°à¦¹ কৰি à¦à¦Ÿà¦¾ ইনসà§à¦Ÿà¦² "
-#~ "কৰক।"
-
-#~ msgid "_Edit"
-#~ msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ কৰক (_E)"
-
-#~ msgid "Edit the selected connection"
-#~ msgstr "নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক"
-
-#~ msgid "_Edit..."
-#~ msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ কৰক (_E)..."
-
-#~ msgid "Authenticate to edit the selected connection"
-#~ msgstr "নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰাৰ আগতে পà§à§°à¦®à¦¾à¦£à§€à¦¤ হোৱা পà§à§°à§Ÿà§‹à¦œà¦¨"
-
-#~ msgid "_Delete"
-#~ msgstr "মচি পেলাওক (_D)"
-
-#~ msgid "Delete the selected connection"
-#~ msgstr "নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ সংযোগ মচি পেলাওক"
-
-#~ msgid "_Delete..."
-#~ msgstr "মচি পেলাওক (_D)..."
-
-#~ msgid "Authenticate to delete the selected connection"
-#~ msgstr "নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ সংযোগ মচি পেলোৱাৰ আগতে পà§à§°à¦®à¦¾à¦£à§€à¦¤ হোৱা পà§à§°à§Ÿà§‹à¦œà¦¨"
-
-#~ msgid "Error creating connection"
-#~ msgstr "সংযোগ সৃষà§à¦Ÿà¦¿ কৰোতে তà§à§°à§à¦Ÿà¦¿"
-
-#~ msgid "Don't know how to create '%s' connections"
-#~ msgstr "'%s' সংযোগসমূহ কিদৰে সৃষà§à¦Ÿà¦¿ কৰা হব জà§à¦žà¦¾à¦¤ নহয়"
-
-#~ msgid "Error editing connection"
-#~ msgstr "সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰোতে তà§à§°à§à¦Ÿà¦¿"
-
-#~ msgid "Don't know how to edit '%s' connections"
-#~ msgstr "'%s' সংযোগসমূহ কিদৰে সমà§à¦ªà¦¾à¦¦à¦¨ কৰা হব জà§à¦žà¦¾à¦¤ নহয়"
-
-#~ msgid "Did not find a connection with UUID '%s'"
-#~ msgstr "UUID '%s' ৰ সৈতে à¦à¦Ÿà¦¾ সংযোগ পোৱা নগল"
-
-#~ msgid ""
-#~ "The file '%s' could not be read or does not contain recognized VPN "
-#~ "connection information\n"
+#~ "Show connections which are currently used by a device to connect to a "
+#~ "network.\n"
+#~ "Without a parameter, all active connections are listed. When <ID> is "
+#~ "provided,\n"
+#~ "the connection details are displayed instead.\n"
#~ "\n"
-#~ "Error: %s."
-#~ msgstr ""
-#~ "'%s' ফাইল পà§à¦¾ নাযায় বা ফাইলত কোনো পৰিচিত VPN সংযোগৰ তথà§à¦¯ উপসà§à¦¥à¦¿à¦¤ নাই\n"
+#~ "ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
#~ "\n"
-#~ "তà§à§°à§à¦Ÿà¦¿: %s।"
-
-#~ msgid "Select file to import"
-#~ msgstr "ইমপোৰà§à¦Ÿ কৰিবলৈ ফাইল বাছক"
-
-#~ msgid "A file named \"%s\" already exists."
-#~ msgstr "\"%s\" নামৰ ফাইল ইতিমধà§à¦¯à§‡ আছে।"
-
-#~ msgid "_Replace"
-#~ msgstr "পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ কৰক (_R)"
-
-#~ msgid "Do you want to replace %s with the VPN connection you are saving?"
-#~ msgstr "সংৰকà§à¦·à¦£à§° বাবে চিহà§à¦¨à¦¿à¦¤ VPN সংযোগ সহায়ত %s ৰ পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ কৰা হ'ব নেকি?"
-
-#~ msgid "Cannot export VPN connection"
-#~ msgstr "VPN সংযোগ à¦à¦•à§à¦¸à¦ªà§‹à§°à§à¦Ÿ কৰা নাযায়"
-
-#~ msgid ""
-#~ "The VPN connection '%s' could not be exported to %s.\n"
+#~ "Show in-memory and on-disk connections, some of which may also be active "
+#~ "if\n"
+#~ "a device is using that connection profile. Without a parameter, all "
+#~ "profiles\n"
+#~ "are listed. When <ID> is provided, the profile details are displayed "
+#~ "instead.\n"
#~ "\n"
-#~ "Error: %s."
#~ msgstr ""
-#~ "'%s' VPN সংযোগ %s লৈ à¦à¦•à§à¦¸à¦ªà§‹à§°à§à¦Ÿ কৰা নাযায়।\n"
+#~ "বà§à¦¯à§±à¦¹à¦¾à§°: nmcli connection show { ARGUMENTS | help }\n"
#~ "\n"
-#~ "তà§à§°à§à¦Ÿà¦¿: %s।"
-
-#~ msgid "Export VPN connection..."
-#~ msgstr "VPN সংযোগ à¦à¦•à§à¦¸à¦ªà§‹à§°à§à¦Ÿ কৰক..."
-
-#~| msgid ""
-#~| "Bluetooth configuration not possible (failed to connect to D-Bus: %s)."
-#~ msgid ""
-#~ "Bluetooth configuration not possible (failed to connect to D-Bus: (%s) %"
-#~ "s)."
-#~ msgstr "বà§à¦²à§à¦Ÿà§à¦¥ সংৰূপ সমà§à¦­à§± নহয় (D-Bus লৈ সংযোগ কৰিবলৈ বিফল: (%s) %s)।"
-
-#~| msgid ""
-#~| "Bluetooth configuration not possible (error finding NetworkManager: %s)."
-#~ msgid ""
-#~ "Bluetooth configuration not possible (error finding NetworkManager: (%s) %"
-#~ "s)."
-#~ msgstr "বà§à¦²à§à¦Ÿà§à¦¥ সংৰূপ সমà§à¦­à¦¬ নহয় (NetworkManager বিচাৰি পাওতে তà§à§°à§à¦Ÿà¦¿: (%s) %s)।"
-
-#~ msgid "Use your mobile phone as a network device (PAN/NAP)"
-#~ msgstr "নেটৱাৰà§à¦• ডিভাইচ ৰূপে ম'বাইল ফোন বà§à¦¯à§±à¦¹à¦¾à§° কৰা হ'ব (PAN/NAP)"
-
-#~ msgid "Access the Internet using your mobile phone (DUN)"
-#~ msgstr "ম'বাইল ফোনৰ মাধà§à¦¯à¦®à§‡ ইনà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿ বà§à¦¯à§±à¦¹à¦¾à§° কৰক (DUN)"
-
-#~ msgid "Your phone is now ready to use!"
-#~ msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে আপোনাৰ ফোন à¦à¦¤à¦¿à§Ÿà¦¾ পà§à§°à¦¸à§à¦¤à§à¦¤!"
-
-#~ msgid "Mobile wizard was canceled"
-#~ msgstr "ম'বাইল উইজাৰà§à¦¡ বাতিল কৰা হৈছে"
-
-#~ msgid "Unknown phone device type (not GSM or CDMA)"
-#~ msgstr "অজà§à¦žà¦¾à¦¤ ধৰণৰ ফোন ডিভাইচ (GSM বা CDMA নহয়)"
-
-#~ msgid "unknown modem type."
-#~ msgstr "অজà§à¦žà¦¾à¦¤ মডেম ধৰণ।"
-
-#~ msgid "unexpectedly disconnected from the phone."
-#~ msgstr "ফোনৰ সৈতে অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤à§°à§‚পে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ হৈছে।"
-
-#~ msgid "timed out detecting phone details."
-#~ msgstr "ফোনৰ বিৱৰণ নিৰà§à¦§à¦¾à§°à¦£à§° সময়সীমা উতà§à¦¤à§€à§°à§à¦£ হৈছে।"
-
-#~ msgid ""
-#~ "The default Bluetooth adapter must be enabled before setting up a Dial-Up-"
-#~ "Networking connection."
-#~ msgstr ""
-#~ "ডায়েল-আপ নেটৱাৰà§à¦• সংযোগ পà§à§°à¦¸à§à¦¤à§à¦¤ কৰাৰ আগতে অবিকলà§à¦ªà¦¿à¦¤ বà§à¦²à§à¦Ÿà§à¦¥ à¦à¦¡à¦¾à¦ªà§à¦Ÿà¦¾à§° সকà§à§°à¦¿à§Ÿ কৰা "
-#~ "আৱশà§à¦¯à¦•à¥¤"
-
-#~ msgid "Failed to create PAN connection: %s"
-#~ msgstr "PAN সংযোগ সৃষà§à¦Ÿà¦¿ কৰিবলে বà§à¦¯à§°à§à¦¥: %s"
-
-#~ msgid "%s Network"
-#~ msgstr "%s নেটৱাৰà§à¦•"
-
-#~ msgid ""
-#~ "Your mobile broadband connection is configured with the following "
-#~ "settings:"
-#~ msgstr "নিমà§à¦¨à¦²à¦¿à¦–িত সংহতিসমূহৰ সৈতে ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সংযোগ সংৰূপণ কৰা হৈছে:"
-
-#~ msgid "Your Device:"
-#~ msgstr "আপোনাৰ ডিভাইচ:"
-
-#~ msgid "Your Provider:"
-#~ msgstr "আপোনাৰ সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾:"
-
-#~ msgid "Your Plan:"
-#~ msgstr "আপোনাৰ পৰিকলà§à¦ªà¦¨à¦¾:"
-
-#~ msgid ""
-#~ "A connection will now be made to your mobile broadband provider using the "
-#~ "settings you selected. If the connection fails or you cannot access "
-#~ "network resources, double-check your settings. To modify your mobile "
-#~ "broadband connection settings, choose \"Network Connections\" from the "
-#~ "System >> Preferences menu."
-#~ msgstr ""
-#~ "আপোনাৰ নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ সংহতিসমূহসমূহ পà§à§°à§Ÿà§‹à¦— কৰি à¦à¦¤à¦¿à§Ÿà¦¾ আপোনাৰ ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সেৱা "
-#~ "উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° সৈতে সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ কৰা হ'ব। সংযোগ বিফল হ'লে বা নেটৱাৰà§à¦• সমà§à¦ªà¦¦ "
-#~ "বà§à¦¯à§±à¦¹à¦¾à§° কৰা সমà§à¦­à§± ন'হ'লে, নিৰà§à¦§à¦¾à§°à¦¿à¦¤ সংহতিসমূহসমূহ পৰীকà§à¦·à¦¾ কৰক। ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ "
-#~ "সংযোগৰ সংহতিসমূহ পৰিবৰà§à¦¤à¦¨ কৰাৰ বাবে পà§à§°à¦£à¦¾à¦²à§€ >> পছনà§à¦¦ তালিকাৰ পৰা \"নেটৱাৰà§à¦• "
-#~ "সংযোগ\" বাছক।"
-
-#~ msgid "Confirm Mobile Broadband Settings"
-#~ msgstr "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡à§° সংহতিসমূহ নিশà§à¦šà¦¿à¦¤ কৰক"
-
-#~ msgid "Unlisted"
-#~ msgstr "তালিকা বহিৰà§à¦­à§‚ত"
-
-#~ msgid "_Select your plan:"
-#~ msgstr "আপোনাৰ পৰিকলà§à¦ªà¦¨à¦¾ বাছক (_S):"
-
-#~ msgid "Selected plan _APN (Access Point Name):"
-#~ msgstr "নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ পৰিকলà§à¦ªà¦¨à¦¾à§° APN (à¦à¦•à§à¦¸à§‡à¦š পইনà§à¦Ÿ নেম) (_A):"
-
-#~ msgid ""
-#~ "Warning: Selecting an incorrect plan may result in billing issues for "
-#~ "your broadband account or may prevent connectivity.\n"
+#~ "ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
#~ "\n"
-#~ "If you are unsure of your plan please ask your provider for your plan's "
-#~ "APN."
-#~ msgstr ""
-#~ "সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: ভà§à¦² পৰিকলà§à¦ªà¦¨à¦¾ নিৰà§à¦¬à¦¾à¦šà¦¨ কৰিলে আপোনাৰ বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সংযোগৰ বিল আৰৠসংযোগ "
-#~ "সà§à¦¥à¦¾à¦ªà¦¨à¦¤ সমসà§à¦¯à¦¾ হ'ব।\n"
+#~ "à¦à¦Ÿà¦¾ নেটৱাৰà§à¦•à§° সৈতে সংযোগ কৰিবলৈ à¦à¦Ÿà¦¾ ডিভাইচ দà§à¦¬à¦¾à§°à¦¾ বৰà§à¦¤à¦®à¦¾à¦¨à§‡ বà§à¦¯à§±à¦¹à¦¾à§° কৰা "
+#~ "সংযোগসমূহ দেখà§à§±à¦¾à¦“ক।\n"
+#~ "à¦à¦Ÿà¦¾ পà§à§°à¦¾à¦šà¦² নহোৱাকৈ, সকলো সকà§à§°à¦¿à§Ÿ সংযোগ তালিকাভà§à¦•à§à¦¤ কৰা হয়। যেতিয়া <ID> পà§à§°à¦¦à¦¾à¦¨ "
+#~ "কৰা হয়,\n"
+#~ "ইয়াৰ পৰিৱৰà§à¦¤à§‡ সংযোগৰ বিৱৰণসমূহ পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰা হয়।\n"
#~ "\n"
-#~ "পৰিকলà§à¦ªà¦¨à¦¾ সমà§à¦ªà§°à§à¦•à§‡ নিশà§à¦šà¦¿à¦¤ ন'হ'লে অনà§à¦—à§à§°à¦¹ কৰি সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾ সৈতে যোগাযোগ কৰি "
-#~ "আপোনাৰ বà§à¦¯à§±à¦¹à§ƒà¦¤ পৰিকলà§à¦ªà¦¨à¦¾à§° APN জানক।"
-
-#~ msgid "Choose your Billing Plan"
-#~ msgstr "বà§à¦¯à§±à¦¹à§ƒà¦¤ বিল পৰিকলà§à¦ªà¦¨à¦¾ বাছক"
-
-#~ msgid "My plan is not listed..."
-#~ msgstr "মোৰ পৰিকলà§à¦ªà¦¨à¦¾ তালিকাভà§à¦•à§à¦¤ নহয়..."
-
-#~ msgid "Select your provider from a _list:"
-#~ msgstr "তালিকাৰ পৰা সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° নাম বাছক (_l):"
-
-#~ msgid "Provider"
-#~ msgstr "সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾"
-
-#~ msgid "I can't find my provider and I wish to enter it _manually:"
-#~ msgstr "সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° নাম অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ আৰৠমই সà§à¦¬à§Ÿà¦‚ সেইটো লিখিবলৈ ইচà§à¦›à§à¦• (_m):"
-
-#~ msgid "Provider:"
-#~ msgstr "সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾:"
-
-#~ msgid "My provider uses GSM technology (GPRS, EDGE, UMTS, HSPA)"
-#~ msgstr ""
-#~ "মোৰ সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾ দà§à¦¬à¦¾à§°à¦¾ GSM পà§à§°à¦¯à§à¦•à§à¦¤à¦¿ বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয় (GPRS, EDGE, UMTS, HSPA)"
-
-#~ msgid "My provider uses CDMA technology (1xRTT, EVDO)"
-#~ msgstr "মোৰ সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾ দà§à¦¬à¦¾à§°à¦¾ CDMA পà§à§°à¦¯à§à¦•à§à¦¤à¦¿ বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয় (1xRTT, EVDO)"
-
-#~ msgid "Choose your Provider"
-#~ msgstr "সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾ বাছক"
-
-#~ msgid "Country or Region List:"
-#~ msgstr "দেশ অথবা অঞà§à¦šà¦² তালিকা:"
-
-#~ msgid "Country or region"
-#~ msgstr "দেশ অথবা অঞà§à¦šà¦²"
-
-#~ msgid "My country is not listed"
-#~ msgstr "মোৰ দেশ তালিকাত নাই"
-
-#~ msgid "Choose your Provider's Country or Region"
-#~ msgstr "আপোনাৰ পà§à§°à¦¦à¦¾à¦¨à¦•à¦¾à§°à§€à§° দেশ অথবা অঞà§à¦šà¦² বাছক"
-
-#~ msgid "Installed GSM device"
-#~ msgstr "ইনসà§à¦Ÿà¦² কৰা GSM ডিভাইচ"
-
-#~ msgid "Installed CDMA device"
-#~ msgstr "ইনসà§à¦Ÿà¦² কৰা CDMA ডিভাইচ"
-
-#~ msgid ""
-#~ "This assistant helps you easily set up a mobile broadband connection to a "
-#~ "cellular (3G) network."
-#~ msgstr ""
-#~ "à¦à¦‡ সহায়ক বà§à¦¯à§±à¦¸à§à¦¥à¦¾à§° সহায়ত à¦à¦Ÿà¦¾ চেলà§à¦²à¦¾à§° (3G) নেটৱাৰà§à¦•à§° সৈতে ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সংযোগ "
-#~ "সà§à¦¥à¦¾à¦ªà¦¨ কৰা যাব।"
-
-#~ msgid "You will need the following information:"
-#~ msgstr "নিমà§à¦¨à¦²à¦¿à¦–িত তথà§à¦¯à§° পà§à§°à§Ÿà§‹à¦œà¦¨:"
-
-#~ msgid "Your broadband provider's name"
-#~ msgstr "বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সেৱা উপলবà§à¦§à¦•à§°à§à¦¤à¦¾à§° নাম"
-
-#~ msgid "Your broadband billing plan name"
-#~ msgstr "বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ বিলিং পৰিকলà§à¦ªà¦¨à¦¾à§° নাম"
-
-#~ msgid "(in some cases) Your broadband billing plan APN (Access Point Name)"
-#~ msgstr ""
-#~ "(কিছৠকà§à¦·à§‡à¦¤à§à§°à¦¤) আপোনাৰ বà§à¦¯à§±à¦¹à§ƒà¦¤ বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ বিলিং পৰিকলà§à¦ªà¦¨à¦¾ APN (à¦à¦•à§à¦¸à§‡à¦š পইনà§à¦Ÿ নেম)"
-
-#~ msgid "Any device"
-#~ msgstr "যিকোনো ডিভাইচ"
-
-#~ msgid "Set up a Mobile Broadband Connection"
-#~ msgstr "ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সংযোগ পà§à§°à¦¸à§à¦¤à§à¦¤ কৰক"
-
-#~ msgid "New Mobile Broadband Connection"
-#~ msgstr "নতà§à¦¨ ম'বাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সংযোগ"
-
-#~ msgid "New..."
-#~ msgstr "নতà§à¦¨..."
-
-#~ msgid "C_reate"
-#~ msgstr "সৃষà§à¦Ÿà¦¿ কৰক (_r)"
-
-#~ msgid ""
-#~ "Passwords or encryption keys are required to access the wireless network "
-#~ "'%s'."
-#~ msgstr ""
-#~ "'%s' বেতাà¦à§° নেটৱাৰà§à¦• বà§à¦¯à§±à¦¹à¦¾à§° কৰাৰ বাবে পাছৱাৰà§à¦¡ বা à¦à¦¨à¦•à§à§°à¦¿à¦ªà¦¶à¦¨ কি'ৰ পà§à§°à§Ÿà§‹à¦œà¦¨à¥¤"
-
-#~ msgid "Wireless Network Authentication Required"
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦• পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পà§à§°à§Ÿà§‹à¦œà¦¨"
-
-#~ msgid "Authentication required by wireless network"
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦•à§° দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨"
-
-#~ msgid "Create New Wireless Network"
-#~ msgstr "নতà§à¦¨ বেতাà¦à§° নেটৱাৰà§à¦• সৃষà§à¦Ÿà¦¿ কৰক"
-
-#~ msgid "New wireless network"
-#~ msgstr "নতà§à¦¨ বেতাà¦à§° নেটৱাৰà§à¦•"
-
-#~ msgid "Enter a name for the wireless network you wish to create."
-#~ msgstr "সৃষà§à¦Ÿà¦¿ কৰাৰ বাবে চিহà§à¦¨à¦¿à¦¤ বেতাà¦à§° নেটৱাৰà§à¦•à§° নাম নিৰà§à¦§à¦¾à§°à¦£ কৰক।"
-
-#~ msgid "Connect to Hidden Wireless Network"
-#~ msgstr "গোপন বেতাà¦à§° নেটৱাৰà§à¦•à§° সৈতে সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ কৰক"
-
-#~ msgid "Hidden wireless network"
-#~ msgstr "গোপন বেতাà¦à§° নেটৱাৰà§à¦•"
-
-#~ msgid ""
-#~ "Enter the name and security details of the hidden wireless network you "
-#~ "wish to connect to."
-#~ msgstr ""
-#~ "সংযোগ কৰাৰ বাবে চিহà§à¦¨à¦¿à¦¤ গোপন বেতাà¦à§° নেটৱাৰà§à¦•à§° নাম আৰৠসà§à§°à¦•à§à¦·à¦¾ বিষয়ক তথà§à¦¯ লিখক।"
-
-#~ msgid "Wireless _security:"
-#~ msgstr "বেতাà¦à§° সà§à§°à¦•à§à¦·à¦¾ (_s):"
-
-#~ msgid "Wireless _adapter:"
-#~ msgstr "বেতাà¦à§° à¦à¦¡à¦¾à¦ªà§à¦Ÿà¦¾à§° (_a):"
-
-#~ msgid "Usage:"
-#~ msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦ªà¦¦à§à¦§à¦¤à¦¿ (_U):"
-
-#~ msgid ""
-#~ "This program is a component of NetworkManager (http://projects.gnome.org/"
-#~ "NetworkManager)."
-#~ msgstr ""
-#~ "à¦à¦‡ পà§à§°à¦—à§à§°à¦¾à¦® NetworkManager ৰ à¦à¦Ÿà¦¾ উপাদান (http://projects.gnome.org/"
-#~ "NetworkManager)।"
-
-#~ msgid ""
-#~ "It is not intended for command-line interaction but instead runs in the "
-#~ "GNOME desktop environment."
-#~ msgstr ""
-#~ "ইয়াক কমানà§à¦¡-শাৰীৰ মাধà§à¦¯à¦®à§‡ বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে নিৰà§à¦®à¦¿à¦¤ নহয় আৰৠGNOME ডেসà§à¦•à¦Ÿà¦ª পৰিবেশত "
-#~ "সঞà§à¦šà¦¾à¦²à¦¿à¦¤ হয়।"
-
-#~ msgid "GPRS"
-#~ msgstr "GPRS"
-
-#~ msgid "EDGE"
-#~ msgstr "EDGE"
-
-#~ msgid "UMTS"
-#~ msgstr "UMTS"
-
-#~ msgid "HSDPA"
-#~ msgstr "HSDPA"
-
-#~ msgid "HSUPA"
-#~ msgstr "HSUPA"
-
-#~ msgid "HSPA"
-#~ msgstr "HSPA"
-
-#~ msgid "not registered"
-#~ msgstr "ৰেজিসà§à¦Ÿà¦¾à§°à§à¦¡ নহয়"
-
-#~ msgid "Home network (%s)"
-#~ msgstr "ঘৰৰ নেটৱাৰà§à¦• (%s)"
-
-#~ msgid "Home network"
-#~ msgstr "ঘৰৰ নেটৱাৰà§à¦•"
-
-#~ msgid "searching"
-#~ msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ কৰা হৈছে"
-
-#~ msgid "%s (%s roaming)"
-#~ msgstr "%s (%s ৰ'মিং)"
-
-#~ msgid "%s (roaming)"
-#~ msgstr "%s (ৰ'মিং)"
-
-#~ msgid "Roaming network (%s)"
-#~ msgstr "ৰ'মিং নেটৱাৰà§à¦• (%s)"
-
-#~ msgid "Default"
-#~ msgstr "অবিকলà§à¦ªà¦¿à¦¤"
-
-#~ msgid ""
-#~ "The NetworkManager Applet could not find some required resources (the .ui "
-#~ "file was not found)."
-#~ msgstr ""
-#~ "NetworkManager à¦à¦ªà§à¦²à§‡à¦Ÿà§‡ কিছà§à¦®à¦¾à¦¨ পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ সমà§à¦ªà¦¦ বিচাৰি নাপায় (.ui ফাইল পোৱা "
-#~ "নগল)।"
-
-#~ msgid "No Certificate Authority certificate chosen"
-#~ msgstr "কোনো পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° কতৃপকà§à¦·à§° পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° নিৰà§à¦¬à¦¾à¦šà¦¨ কৰা নহয়"
-
-#~ msgid ""
-#~ "Not using a Certificate Authority (CA) certificate can result in "
-#~ "connections to insecure, rogue wireless networks. Would you like to "
-#~ "choose a Certificate Authority certificate?"
-#~ msgstr ""
-#~ "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° কতৃপকà§à¦· (CA) পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° বà§à¦¯à§±à¦¹à¦¾à§° নকৰিলে সà§à§°à¦•à§à¦·à¦¾à¦¬à¦¿à¦¹à§€à¦¨ আৰৠবিপজà§à¦œà¦¨à¦• নেটৱাৰà§à¦•à§° "
-#~ "সৈতে সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ কৰা হ'ব পাৰে। আপà§à¦¨à¦¿ à¦à¦Ÿà¦¾ পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° কতৃপকà§à¦· পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° নিৰà§à¦¬à¦¾à¦šà¦¨ "
-#~ "কৰিব বিচাৰে নেকি?"
-
-#~ msgid "Choose CA Certificate"
-#~ msgstr "à¦à¦Ÿà¦¾ CA পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° বাছক"
-
-#~ msgid "DER, PEM, or PKCS#12 private keys (*.der, *.pem, *.p12)"
-#~ msgstr "DER, PEM, বা PKCS#12 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি'সমূহ (*.der, *.pem, *.p12)"
-
-#~ msgid "DER or PEM certificates (*.der, *.pem, *.crt, *.cer)"
-#~ msgstr "DER বা PEM পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§°à¦¸à¦®à§‚হ (*.der, *.pem, *.crt, *.cer)"
-
-#~ msgid "Anonymous"
-#~ msgstr "বেনামী"
-
-#~ msgid "Authenticated"
-#~ msgstr "পà§à§°à¦®à¦¾à¦£à§€à¦¤"
-
-#~ msgid "Both"
-#~ msgstr "দà§à§Ÿà§‹"
-
-#~ msgid "Anony_mous identity:"
-#~ msgstr "বেনামী পৰিচয় (_m):"
-
-#~ msgid "Allow automatic PAC pro_visioning"
-#~ msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤ PAC যোগানৰ অনà§à¦®à¦¤à¦¿ দিয়ক (_v)"
-
-#~ msgid "GTC"
-#~ msgstr "GTC"
-
-#~ msgid "Choose a PAC file..."
-#~ msgstr "à¦à¦Ÿà¦¾ PAC ফাইল বাছক..."
-
-#~ msgid "PAC files (*.pac)"
-#~ msgstr "PAC ফাইলসমূহ (*.pac)"
-
-#~ msgid "All files"
-#~ msgstr "সকলো ফাইল"
-
-#~ msgid "MD5"
-#~ msgstr "MD5"
-
-#~ msgid "Choose a Certificate Authority certificate..."
-#~ msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° কতৃপকà§à¦·à§° পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° বাছক..."
-
-#~ msgid "Version 0"
-#~ msgstr "সংসà§à¦•à§°à¦£ 0"
-
-#~ msgid "Version 1"
-#~ msgstr "সংসà§à¦•à§°à¦£ 1"
-
-#~ msgid "C_A certificate:"
-#~ msgstr "CA পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° (_A):"
-
-#~ msgid "PEAP _version:"
-#~ msgstr "PEAP সংসà§à¦•à§°à¦£ (_v):"
-
-#~ msgid "As_k for this password every time"
-#~ msgstr "পà§à§°à¦¤à¦¿à¦¬à¦¾à§° à¦à¦‡ পাছৱাৰà§à¦¡ লিখাৰ অনà§à§°à§‹à¦§ কৰা হ'ব (_k)"
-
-#~ msgid "Unencrypted private keys are insecure"
-#~ msgstr "à¦à¦¨à¦•à§à§°à¦¿à¦ªà¦¶à¦¨ বিহীন বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' নিৰাপদ নহয়"
-
-#~ msgid ""
-#~ "The selected private key does not appear to be protected by a password. "
-#~ "This could allow your security credentials to be compromised. Please "
-#~ "select a password-protected private key.\n"
+#~ "ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
#~ "\n"
-#~ "(You can password-protect your private key with openssl)"
-#~ msgstr ""
-#~ "নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' সমà§à¦­à§±à¦¤ পাছৱাৰà§à¦¡ সহায়ত সà§à§°à¦•à§à¦·à¦¿à¦¤ নহয়। ইয়াৰ ফলত সà§à§°à¦•à§à¦·à¦¾ বিষয়ক "
-#~ "পৰিচয়ৰ সà§à§°à¦•à§à¦·à¦¾ হানী হোৱাৰ সমà§à¦­à¦¾à§±à¦¨à¦¾ আছে। অনà§à¦—à§à§°à¦¹ কৰি, পাছৱাৰà§à¦¡ সহায়ত সà§à§°à¦•à§à¦·à¦¿à¦¤ à¦à¦Ÿà¦¾ "
-#~ "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' বাছক।\n"
+#~ "ইন-মেমৰি আৰৠঅন-ডিসà§à¦• সংযোগসমূহ দেখà§à§±à¦¾à¦“ক, যাৰ কিছà§à¦®à¦¾à¦¨ সকà§à§°à¦¿à§Ÿ থাকিব পাৰে যদি\n"
+#~ "à¦à¦Ÿà¦¾ ডিভাইচে সেই সংযোগৰ আলেখà§à¦¯ বà§à¦¯à§±à¦¹à¦¾à§° কৰি থাকে। à¦à¦Ÿà¦¾ পà§à§°à¦¾à¦šà¦² নহোৱাকৈ, সকলো\n"
+#~ "তালিকাভà§à¦•à§à¦¤ কৰা হয়। যেতিয়া <ID> পà§à§°à¦¦à¦¾à¦¨ কৰা হয়, ইয়াৰ পৰিৱৰà§à¦¤à§‡ আলেখà§à¦¯à§° বিৱৰণসমূহ "
+#~ "পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰা হয়।\n"
#~ "\n"
-#~ "(openssl ৰ মাধà§à¦¯à¦®à§‡ পাছৱাৰà§à¦¡ সহায়ত বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' সà§à§°à¦•à§à¦·à¦¿à¦¤ কৰা যাব)"
-
-#~ msgid "Choose your personal certificate..."
-#~ msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° বাছক..."
-
-#~ msgid "I_dentity:"
-#~ msgstr "পৰিচয় (_d):"
-
-#~ msgid "_User certificate:"
-#~ msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° (_U):"
-
-#~ msgid "Private _key:"
-#~ msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' (_k):"
-
-#~ msgid "_Private key password:"
-#~ msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' পাছৱাৰà§à¦¡ (_P):"
-
-#~ msgid "No"
-#~ msgstr "নহয়"
-#~ msgid "Yes"
-#~ msgstr "হয়"
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: 'list configured': %s"
-#~ msgid "TLS"
-#~ msgstr "TLS"
+#~ msgid "List of configured connections"
+#~ msgstr "সংৰূপিত সংযোগসমূহৰ তালিকা"
-#~ msgid "FAST"
-#~ msgstr "FAST"
+#~ msgid "Error: 'show configured': %s"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: 'show configured': %s"
-#~ msgid "Tunneled TLS"
-#~ msgstr "টানেল কৰা TLS"
+#~ msgid "Error: 'list active': %s"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: 'list active': %s"
-#~ msgid "Protected EAP (PEAP)"
-#~ msgstr "সà§à§°à¦•à§à¦·à¦¿à¦¤ EAP (PEAP)"
+#~ msgid "List of active connections"
+#~ msgstr "সকà§à§°à¦¿à§Ÿ সংযোগসমূহৰ তালিকা"
-#~ msgid "Au_thentication:"
-#~ msgstr "পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ (_t):"
-
-#~ msgid "Shared Key"
-#~ msgstr "অংশীদাৰী কৰা কি'"
-
-#~ msgid "1 (Default)"
-#~ msgstr "1 (অবিকলà§à¦ªà¦¿à¦¤)"
-
-#~ msgid "2"
-#~ msgstr "2"
-
-#~ msgid "3"
-#~ msgstr "3"
-
-#~ msgid "4"
-#~ msgstr "4"
-
-#~ msgid "_Key:"
-#~ msgstr "কি' (_K):"
-
-#~ msgid "Sho_w key"
-#~ msgstr "কি' দেখà§à§±à¦¾à¦“ক (_w)"
-
-#~ msgid "WEP inde_x:"
-#~ msgstr "WEP সূচী (_x):"
-
-#~ msgid "could not find the Bluetooth device."
-#~ msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ডিভাইচ পোৱা নাযায়।"
-
-#~ msgid "Bluetooth configuration not possible (failed to create D-Bus proxy)."
-#~ msgstr "বà§à¦²à§à¦Ÿà§à¦¥ সংৰূপ সমà§à¦­à§± নহয় (D-Bus পà§à§°à¦•à§à¦¸à¦¿ সৃষà§à¦Ÿà¦¿ কৰিবলৈ বিফল)।"
-
-#~ msgid "An instance of nm-applet is already running.\n"
-#~ msgstr "nm-applet ৰ à¦à¦Ÿà¦¾ চানেকি বৰà§à¦¤à¦®à¦¾à¦¨à§‡ চলি আছে।\n"
-
-#~ msgid "Could not acquire the %s service. (%d)\n"
-#~ msgstr "%s সেৱা গà§à§°à¦¹à¦£ কৰিবলৈ বà§à¦¯à§°à§à¦¥à¥¤ (%d)\n"
-
-#~ msgid "PUK code required"
-#~ msgstr "PUK ক'ড পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ"
-
-#~ msgid "PUK code is needed for the mobile broadband device"
-#~ msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ ডিভাইচৰ কাৰণে PUK ক'ড পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ"
-
-#~ msgctxt "No wired security used"
-#~ msgid "None"
-#~ msgstr "à¦à¦•à§‹ নাই"
-
-#~ msgctxt "Unknown/unrecognized wired or wifi security"
-#~ msgid "Unknown"
-#~ msgstr "অজà§à¦žà¦¾à¦¤"
-
-#~ msgid "translator-credits"
-#~ msgstr "অমিতাকà§à¦· ফà§à¦•à¦¨ (aphukan@fedoraproject.org)"
+#~ msgid "Error: 'show active': %s"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: 'show active': %s"
#~ msgid ""
-#~ "<span size=\"larger\" weight=\"bold\">Active Network Connections</span>"
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
#~ msgstr ""
-#~ "<span size=\"larger\" weight=\"bold\">Active Network Connections</span>"
-
-#~ msgid ""
-#~ "Automatic\n"
-#~ "Version 0\n"
-#~ "Version 1"
-#~ msgstr ""
-#~ "Automatic\n"
-#~ "Version 0\n"
-#~ "Version 1"
-
-#~ msgid "C_onnect"
-#~ msgstr "C_onnect"
-
-#~ msgid "Other Wireless Network..."
-#~ msgstr "বেতাà¦à§° নেটৱাৰà§à¦•"
-
-#~ msgid "label"
-#~ msgstr "লেবেল"
-
-#~ msgid "<b>Addresses</b>"
-#~ msgstr "<b>Addresses</b>"
-
-#~ msgid ""
-#~ "Automatic\n"
-#~ "Automatic with manual DNS settings\n"
-#~ "Manual\n"
-#~ "Link-Local\n"
-#~ "Shared to other computers"
-#~ msgstr ""
-#~ "Automatic\n"
-#~ "Automatic with manual DNS settings\n"
-#~ "Manual\n"
-#~ "Link-Local\n"
-#~ "Shared to other computers"
-
-#~ msgid "_Routes&#x2026;"
-#~ msgstr "ৰà§à¦Ÿ&#x2026; (_R)"
-
-#~ msgid "<b>Basic</b>"
-#~ msgstr "<b>Basic</b>"
-
-#~ msgid ""
-#~ "Any\n"
-#~ "3G (UMTS/HSPA)\n"
-#~ "2G (GPRS/EDGE)\n"
-#~ "Prefer 3G (UMTS/HSPA)\n"
-#~ "Prefer 2G (GPRS/EDGE)"
-#~ msgstr ""
-#~ "Any\n"
-#~ "3G (UMTS/HSPA)\n"
-#~ "2G (GPRS/EDGE)\n"
-#~ "Prefer 3G (UMTS/HSPA)\n"
-#~ "Prefer 2G (GPRS/EDGE)"
-
-#~ msgid "<b>Authentication</b>"
-#~ msgstr "DSL পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
-
-#~ msgid "<b>Echo</b>"
-#~ msgstr "<b>Echo</b>"
-
-#~ msgid ""
-#~ "Automatic\n"
-#~ "10 Mb/s\n"
-#~ "100 Mb/s\n"
-#~ "1 Gb/s\n"
-#~ "10 Gb/s"
-#~ msgstr ""
-#~ "Automatic\n"
-#~ "10 Mb/s\n"
-#~ "100 Mb/s\n"
-#~ "1 Gb/s\n"
-#~ "10 Gb/s"
-
-#~ msgid ""
-#~ "Automatic\n"
-#~ "Twisted Pair (TP)\n"
-#~ "Attachment Unit Interface (AUI)\n"
-#~ "BNC\n"
-#~ "Media Independent Interface (MII)"
-#~ msgstr ""
-#~ "Automatic\n"
-#~ "Twisted Pair (TP)\n"
-#~ "Attachment Unit Interface (AUI)\n"
-#~ "BNC\n"
-#~ "Media Independent Interface (MII)"
-
-#~ msgid ""
-#~ "Automatic\n"
-#~ "A (5 GHz)\n"
-#~ "B/G (2.4 GHz)"
-#~ msgstr ""
-#~ "Automatic\n"
-#~ "A (5 GHz)\n"
-#~ "B/G (2.4 GHz)"
-
-#~ msgid "_Security:"
-#~ msgstr "_Security:"
-
-#~ msgid ""
-#~ "The connection editor could not find some required resources (the "
-#~ "NetworkManager applet glade file was not found)."
-#~ msgstr ""
-#~ "সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ বà§à¦¯à§±à¦¸à§à¦¥à¦¾ দà§à¦¬à¦¾à§°à¦¾ কিছৠআৱশà§à¦¯à¦• সমà§à¦ªà¦¦ সনà§à¦§à¦¾à¦¨ কৰা সমà§à¦­à§± নহয় "
-#~ "(NetworkManager à¦à¦ªà§à¦²à§‡à¦Ÿ glade ফাইল পোৱা নাযায়)।"
-
-#~ msgid "Apply"
-#~ msgstr "পà§à§°à§Ÿà§‹à¦— কৰক"
-
-#~ msgid "Save this connection for all users of this machine."
-#~ msgstr "à¦à¦‡ ডিভাইচৰ সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে à¦à¦‡ সংযোগ সংৰকà§à¦·à¦£ কৰক।"
-
-#~ msgid "Apply..."
-#~ msgstr "পà§à§°à§Ÿà§‹à¦— কৰক..."
-
-#~ msgid "Country"
-#~ msgstr "দেশ"
-
-#~ msgid "United Kingdom"
-#~ msgstr "যà§à¦•à§à¦¤à§°à¦¾à¦œà§à¦¯"
-
-#~ msgid "Cannot start VPN connection '%s'"
-#~ msgstr "VPN সংযোগ '%s' আৰমà§à¦­ কৰিবলৈ বà§à¦¯à§°à§à¦¥"
-
-#~ msgid ""
-#~ "Could not find the authentication dialog for VPN connection type '%s'. "
-#~ "Contact your system administrator."
-#~ msgstr ""
-#~ "'%s' ধৰণৰ VPN সংযোগৰ কà§à¦·à§‡à¦¤à§à§°à¦¤ অনà§à¦®à§‹à¦¦à¦¨à§° বাৰà§à¦¤à¦¾ পোৱা নাযায়। পà§à§°à¦£à¦¾à¦²à§€ পà§à§°à¦¶à¦¾à¦¸à¦•à§° সৈতে "
-#~ "যোগাযোগ কৰক।"
-
-#~ msgid ""
-#~ "There was a problem launching the authentication dialog for VPN "
-#~ "connection type '%s'. Contact your system administrator."
-#~ msgstr ""
-#~ "'%s' ধৰণৰ VPN সংযোগৰ অনà§à¦®à§‹à¦¦à¦¨à§° বাৰà§à¦¤à¦¾ আৰমà§à¦­ কৰিবলৈ সমসà§à¦¯à¦¾ দেখা দিছে। পà§à§°à¦£à¦¾à¦²à§€ "
-#~ "পà§à§°à¦¶à¦¾à¦¸à¦•à§° সৈতে যোগাযোগ কৰক।"
-
-#~ msgid ""
-#~ "The NetworkManager applet could not find some required resources. It "
-#~ "cannot continue.\n"
-#~ msgstr ""
-#~ "The NetworkManager applet could not find some required resources. It "
-#~ "cannot continue.\n"
-
-#~ msgid "Select A File"
-#~ msgstr "à¦à¦Ÿà¦¾ পঞà§à¦œà¦¿à¦•à¦¾ নিৰà§à¦¬à¦¾à¦šà¦¨ কৰক"
-
-#~ msgid ""
-#~ "Insufficient privileges or unknown error retrieving system connection "
-#~ "secrets."
-#~ msgstr ""
-#~ "Insufficient privileges or unknown error retrieving system connection "
-#~ "secrets."
-
-#~ msgid "Could not connect to D-Bus to request connection secrets."
-#~ msgstr "Could not connect to D-Bus to request connection secrets."
-
-#~ msgid "PU_K:"
-#~ msgstr "PU_K:"
-
-#~ msgid "_Band:"
-#~ msgstr "_Band:"
+#~ "তà§à§°à§à¦Ÿà¦¿: 'connection show' ৰ বাবে 'configured' অথবা 'active' কমানà§à¦¡ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤à¥¤"
diff --git a/po/bg.po b/po/bg.po
index cda45f19e..026964325 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -774,8 +774,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:431
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:440
msgid "Encrypted: "
diff --git a/po/bn_IN.po b/po/bn_IN.po
index 6d3f8307a..02a511dcf 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -1170,7 +1170,7 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:401
#, c-format
-msgid "%u MB/s"
+msgid "%u Mbit/s"
msgstr "%u মেগাবাইট/সেকেনà§à¦¡"
#: ../cli/src/devices.c:410
diff --git a/po/ca.po b/po/ca.po
index d4e6c8e24..c3940b9a5 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -766,8 +766,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:431
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:440
msgid "Encrypted: "
diff --git a/po/cs.po b/po/cs.po
index 7335e726d..25b2be19c 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -687,7 +687,7 @@ msgstr "FREKV"
#. 4
#: ../cli/src/devices.c:207
msgid "RATE"
-msgstr "POMÄšR"
+msgstr "RYCHLOST"
#. 5
#. 1
@@ -789,7 +789,7 @@ msgstr "připojuje se (kontroluje se kontektivita IP)"
#: ../cli/src/devices.c:290
#| msgid "connecting (getting IP configuration)"
msgid "connecting (starting secondary connections)"
-msgstr "připojuje se (spouští se druhé připojení)"
+msgstr "připojuje se (spouští se sekundární připojení)"
#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104
msgid "connected"
@@ -820,8 +820,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:461
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:470
msgid "Encrypted: "
diff --git a/po/da.po b/po/da.po
index bbcde42d2..82f456cce 100644
--- a/po/da.po
+++ b/po/da.po
@@ -797,8 +797,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:395
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:404
msgid "Encrypted: "
diff --git a/po/de.po b/po/de.po
index b86de96f4..40e2011f2 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,6 +1,7 @@
# German translation of NetworkManager.
# Copyright (C) 2005 Dan Williams <dcbw@redhat.com>
# This file is distributed under the same license as the NetworkManager package.
+#
# Hendrik Brandt <heb@gnome-de.org>, 2004, 2005.
# Frank Arnold <frank@scirocco-5v-turbo.de>, 2005.
# Hendrik Richter <hendrikr@gnome.org>, 2006.
@@ -8,368 +9,464 @@
# Andre Klapper <ak-47@gmx.net>, 2007.
# Hauke Mehrtens <hauke@hauke-m.de>, 2008.
# Daniel Schury <Daniel.Schury@physik.uni-giessen.de>, 2010.
-# Christian Kirbach <christian.kirbach@gmail.com>, 2009-2012.
# Daniel Winzen <d@winzen4.de>, 2012.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2012.
-# Wolfgang Stöggl <c72578@yahoo.de>, 2012.
-#
+# Wolfgang Stöggl <c72578@yahoo.de>, 2012, 2013.
+# Christian Kirbach <christian.kirbach@gmail.com>, 2009-2014.
+# Benjamin Steinwender <b@stbe.at>, 2014.
+# Hedda Peters <hpeters@redhat.com>, 2014.
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager HEAD\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-11-05 03:24+0000\n"
-"PO-Revision-Date: 2012-11-03 08:24+0100\n"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-05-15 10:17+0000\n"
+"PO-Revision-Date: 2014-05-02 16:51+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
-"Language: \n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Gtranslator 2.91.5\n"
+"X-Generator: Poedit 1.5.4\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:179
+#: ../cli/src/connections.c:201
msgid "GROUP"
msgstr "GRUPPE"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADRESSE"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ROUTE"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMAIN"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:3000
+#: ../cli/src/settings.c:3019
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "Ungültige IPv4-Adresse »%s«"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "ungültiger Präfix »%s«. <1-32> ist erlaubt"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "Ungültiges Gateway »%s«"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3341
+#: ../cli/src/settings.c:3360
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "Ungültige IPv6-Adresse »%s«"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "ungültiger Präfix »%s«. <1-128> ist erlaubt"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "Ungültige IPv4-Route »%s«"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "ungültiger Präfix »%s«. <0-32> ist erlaubt"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "ungültige next-hop-Adresse »%s«"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "Ungültige Metrik »%s«"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "Ungültige IPv6-Route »%s«"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "ungültiger Präfix »%s«. <0-128> ist erlaubt"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "nicht verwaltet"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "nicht verfügbar"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "nicht verbunden"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "wird verbunden (wird vorbereitet)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "wird verbunden (wird eingerichtet)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "wird verbunden (Legitimierung wird benötigt)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "wird verbunden (IP-Einstellungen werden ermittelt)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "wird verbunden (IP-Funktionalität wird geprüft)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "wird verbunden (Zweitverbindungen werden gestartet)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "verbunden"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:633
+#: ../cli/src/common.c:639 ../cli/src/connections.c:540
msgid "deactivating"
msgstr "wird deaktiviert"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
-msgstr "Verbindung gescheitert"
-
-#: ../cli/src/common.c:390 ../cli/src/connections.c:636
-#: ../cli/src/connections.c:659 ../cli/src/connections.c:1351
-#: ../cli/src/devices.c:644 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:458
-#: ../src/main.c:477
+msgstr "Verbindung fehlgeschlagen"
+
+#: ../cli/src/common.c:643 ../cli/src/connections.c:545
+#: ../cli/src/connections.c:568 ../cli/src/connections.c:1631
+#: ../cli/src/devices.c:829 ../cli/src/devices.c:2269
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1120 ../src/main.c:502 ../src/main.c:530
msgid "unknown"
msgstr "unbekannt"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "Kein Grund angegeben"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2429
+#, c-format
msgid "Unknown error"
msgstr "Unbekannter Fehler"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "Gerät wird nun verwaltet"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "Gerät wird nun nicht mehr verwaltet"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "Das Gerät konnte nicht für die Konfiguration vorbereitet werden"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"IP-Konfiguration konnte nicht reserviert werden (keine verfügbare Adresse, "
"Zeitüberschreitung usw.)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "Die IP-Konfiguration ist nicht mehr gültig"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "Geheimdaten waren erforderlich, wurden aber nicht angegeben"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X-Supplicant getrennt"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "Einrichtung des 802.1X-Supplicant fehlgeschlagen"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X-Supplicant fehlgeschlagen"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X-Supplicant brauchte zu lange für die Legitimierung"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "PPP-Dienst konnte nicht gestartet werden"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP-Dienst getrennt"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP fehlgeschlagen"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "DHCP-Client konnte nicht gestartet werden"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP-Client-Fehler"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP-Client fehlgeschlagen"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr ""
"Dienst für gemeinsam verwendete Verbindung konnte nicht gestartet werden"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "Dienst für gemeinsam verwendete Verbindung fehlgeschlagen"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "Start des AutoIP-Diensts fehlgeschlagen"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "Fehler des AutoIP-Diensts"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP-Dienst fehlgeschlagen"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "Die Leitung ist besetzt"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "Kein Freizeichen"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "Es konnte kein Trägersignal aufgebaut werden"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "Der Einwahlvorgang benötigte zu viel Zeit"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "Der Einwahlversuch ist fehlgeschlagen"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "Modeminitialisierung fehlgeschlagen"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "Angegebener APN konnte nicht ausgewählt werden"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "Es wird nicht nach Netzwerken gesucht"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "Netzwerkanmeldung abgelehnt"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "Netzwerkanmeldung benötigte zu viel Zeit"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "Anmeldung an dem angeforderten Netzwerk fehlgeschlagen"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN-Überprüfung fehlgeschlagen"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "Notwendige Firmware des Geräts fehlt möglicherweise"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "Das Gerät wurde entfernt"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager ging in den Schlafmodus"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "Die aktive Verbindung des Geräts verschwand"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "Das Gerät wurde durch den Benutzer oder Client getrennt"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "Trägersignal/Verbindung geändert"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "Die bestehende Verbindung des Geräts wurde angenommen"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "Der Supplicant ist nun verfügbar"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "Das Modem wurde nicht gefunden"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr ""
"Die Bluetooth-Verbindung ist fehlgeschlagen oder benötigte zu viel Zeit"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "SIM-Karte des GSM-Modems ist nicht eingesteckt"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "PIN der SIM-Karte des GSM-Modems erforderlich"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "PUK der SIM-Karte des GSM-Modems erforderlich"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "SIM-Karte des GSM-Modems ist falsch"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "Das InfiniBand-Gerät unterstützt keinen »Connected«-Modus"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "Eine Abhängigkeit der Verbindung ist gescheitert"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "Ein Problem mit RFC 2684-Überbrückung (Ethernet über ADSL)"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager ist nicht verfügbar"
-#: ../cli/src/common.c:558
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Das WLAN konnte nicht gefunden werden"
-#: ../cli/src/common.c:561
-#, fuzzy
-#| msgid "A seconadary connection of the base connection failed"
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "Eine Zweitverbindung der Basisverbindung schlug fehl"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:294 ../cli/src/devices.c:310
-#: ../cli/src/devices.c:432 ../cli/src/devices.c:476
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr ""
+"Einrichtung für DCB (»Data Center Bridging«) oder FCoE (»Fibre Channel over "
+"Ethernet«) fehlgeschlagen"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "teamd-Bedienung fehlgeschlagen"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:824 ../cli/src/devices.c:636
+#: ../libnm-glib/nm-device.c:1836
msgid "Unknown"
msgstr "Unbekannt"
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "ungültige Prioritätsabbildung »%s«"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "Priorität »%s« ist ungültig (<0-%ld>)"
+
+#: ../cli/src/common.c:946
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "»%s« ist keine gültige Bündelungskonfiguration oder Dateiname."
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "Einstellungsname?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "Eigenschaftenname?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "Geben Sie den Verbindungstyp an: "
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:107 ../cli/src/devices.c:131 ../cli/src/devices.c:141
-#: ../cli/src/devices.c:151 ../cli/src/devices.c:165 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:217 ../cli/src/devices.c:226
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:180
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NAME"
#. 0
#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
msgid "UUID"
msgstr "UUID"
@@ -377,1001 +474,3151 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:204
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:202
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TYP"
#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "ZEITSTEMPEL"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "ZEITSTEMPEL-ECHT"
#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#. 14
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "AUTO-VERBINDEN"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "NUR-LESEN"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:188
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS-PFAD"
-#. 2
-#: ../cli/src/connections.c:131
-msgid "DEVICES"
-msgstr "GERÄTE"
+#. 7
+#. 13
+#. 4
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
+#: ../cli/src/devices.c:202
+msgid "ACTIVE"
+msgstr "AKTIV"
+
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:71 ../cli/src/devices.c:87
+#: ../cli/src/devices.c:184 ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "GERÄT"
+#. 9
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:116 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:78 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:73 ../cli/src/devices.c:96
+#: ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATUS"
+#. 10
+#: ../cli/src/connections.c:79
+msgid "ACTIVE-PATH"
+msgstr "AKTIV-PFAD"
+
+#. 2
+#: ../cli/src/connections.c:182
+msgid "DEVICES"
+msgstr "GERÄTE"
+
#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:184
msgid "DEFAULT"
msgstr "VORGABE"
#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:185
msgid "DEFAULT6"
msgstr "STANDARD6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:186
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#. 4
+#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:405
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:138
+#. 5
+#. 18
+#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PFAD"
#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:190
msgid "ZONE"
msgstr "ZONE"
#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:191
msgid "MASTER-PATH"
msgstr "MASTER-PFAD"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "ALLGEMEIN"
-
-#. 0
-#: ../cli/src/connections.c:149
-msgid "IP"
-msgstr "IP"
-
#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:203
msgid "USERNAME"
msgstr "BENUTZERNAME"
#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:204
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:205
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:206
msgid "VPN-STATE"
msgstr "VPN-STATUS"
#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:207
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "ALLGEMEIN"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:261
#, c-format
msgid ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
+"Usage: nmcli connection { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> "
+"<value>)+\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
msgstr ""
-"Aufruf: nmcli con { BEFEHL | help }\n"
-" BEFEHL := { list | status | up | down | delete }\n"
+"Aufruf: nmcli connection { BEFEHL | help }\n"
+"\n"
+"BEFEHL := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <Kennung>] ...\n"
+"\n"
+" up [[id | uuid | path] <Kennung>] [ifname <Schnittstellenname>] [ap "
+"<BSSID>] [nsp <Name>]\n"
+"\n"
+" up [[id | uuid | path] <Kennung>] [ifname <Schnittstellenname>] [ap "
+"<BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <Kennung>\n"
+"\n"
+" add NORMALE_OPTIONEN TYP_SPEZIFISCHE_OPTIONEN IP_OPTIONEN\n"
+"\n"
+" modify [--temporary] [id | uuid | path] <Kennung> ([+|-]<Einstellung>."
+"<Eigenschaft> <Wert>)+\n"
+"\n"
+" edit [id | uuid | path] <Kennung>\n"
+" edit [type <neuer Verbindungstyp>] [con-name <neuer Verbindungsname>]\n"
+"\n"
+" delete [id | uuid | path] <Kennung>\n"
+"\n"
+" reload\n"
+"\n"
+" load <Dateiname> [ <Dateiname>... ]\n"
"\n"
-" list [id <Kennung> | uuid <Kennung>]\n"
-" status [id <Kennung> | uuid <Kennung> | path <Pfad>]\n"
-" up id <Kennung> | uuid <Kennung> [iface <Schnittstelle>] [ap <BSSID>] [nsp "
-"<Name>] [--nowait] [--timeout <timeout>]\n"
-" up id <Kennung> | uuid <Kennung> [iface <Schnittstelle>] [ap <BSSID>] [--"
-"nowait] [--timeout <timeout>]\n"
-" down id <Kennung> | uuid <Kennung>\n"
-" delete id <Kennung> | uuid <Kennung>\n"
-#: ../cli/src/connections.c:249 ../cli/src/connections.c:609
+#: ../cli/src/connections.c:283
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Fehler: »Verb. Liste«: %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"List in-memory and on-disk connection profiles, some of which may also be\n"
+"active if a device is using that connection profile. Without a parameter, "
+"all\n"
+"profiles are listed. When --active option is specified, only the active\n"
+"profiles are shown.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Show details for specified connections. By default, both static "
+"configuration\n"
+"and active connection data are displayed. It is possible to filter the "
+"output\n"
+"using global '--fields' option. Refer to the manual page for more "
+"information.\n"
+"When --active option is specified, only the active profiles are taken into\n"
+"account.\n"
+msgstr ""
+"Aufruf: nmcli connection show { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [--active]\n"
+"\n"
+"Zeigt Verbindungen, die derzeit von einem Gerät verwendet werden, um mit\n"
+"einem Netzwerk zu verbinden. Ohne Parameter werden alle aktiven "
+"Verbindungen\n"
+"aufgeführt. Wenn eine <Kennung> angegeben wird, werden stattdessen die\n"
+"Verbindungsdetails angezeigt.\n"
+"\n"
+"PARAMETER := [--active] [id | uuid | path | apath] <Kennung> ...\n"
+"\n"
+"Zeigt Verbindungen im Hauptspeicher und auf der Festplatte, von denen "
+"einige\n"
+"auch aktiv sein können, falls ein Gerät das Verbindungsprofil verwendet. "
+"Ohne\n"
+"Parameter werden alle Profile aufgeführt. Wenn eine <Kennung> angegeben "
+"wird,\n"
+"werden stattdessen die Verbindungsdetails angezeigt.\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:305
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Fehler: »Verb. Liste«: %s; erlaubte Felder: %s"
-
-#: ../cli/src/connections.c:259
-msgid "Connection details"
-msgstr "Verbindungsinformationen"
-
-#: ../cli/src/connections.c:484
-msgid "never"
-msgstr "nie"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli connection up { ARGUMENTE | help }\n"
+"\n"
+"ARGUMENTE := [id | uuid | path] <Kennung> [ifname <ifname>] [ap <BSSID>] "
+"[nsp <name>]\n"
+"\n"
+"Eine Verbindung auf einem Gerät aktivieren. Das zu aktivierende Profile wird "
+"durch den Namen, die UUID oder den D-Bus-Pfad identifiziert.\n"
+"\n"
+"ARGUMENTE := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Ein Gerät mit einer Verbindung aktivieren. Das Verbindungsprofil wird durch "
+"NetworkManager automatisch gewählt.\n"
+"\n"
+"ifname - spezifiziert das Gerät auf dem die Verbindung aktiviert werden "
+"soll\n"
+"ap - spezifiziert den zu verbindenden Zugangspunkt (nur gültig für "
+"Drahtlosnetzwerke)\n"
+"nsp - spezifiert den Netzwerkdienstanbieter (nur gültig für WiMAX)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:485 ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714 ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717 ../cli/src/devices.c:440
-#: ../cli/src/devices.c:493 ../cli/src/devices.c:609 ../cli/src/devices.c:610
-#: ../cli/src/devices.c:611 ../cli/src/devices.c:643 ../cli/src/devices.c:670
-#: ../cli/src/devices.c:671 ../cli/src/devices.c:672 ../cli/src/devices.c:673
-#: ../cli/src/devices.c:674 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:787
-#: ../cli/src/settings.c:907 ../cli/src/settings.c:1189
-#: ../cli/src/settings.c:1190 ../cli/src/settings.c:1192
-#: ../cli/src/settings.c:1194 ../cli/src/settings.c:1195
-#: ../cli/src/settings.c:1326 ../cli/src/settings.c:1327
-#: ../cli/src/settings.c:1328 ../cli/src/settings.c:1329
-#: ../cli/src/settings.c:1406 ../cli/src/settings.c:1407
-#: ../cli/src/settings.c:1408 ../cli/src/settings.c:1409
-#: ../cli/src/settings.c:1410 ../cli/src/settings.c:1411
-#: ../cli/src/settings.c:1412 ../cli/src/settings.c:1413
-#: ../cli/src/settings.c:1414 ../cli/src/settings.c:1415
-#: ../cli/src/settings.c:1416 ../cli/src/settings.c:1417
-#: ../cli/src/settings.c:1418 ../cli/src/settings.c:1489
-msgid "yes"
-msgstr "ja"
+#: ../cli/src/connections.c:326
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli connection down { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [id | uuid | path | apath] <Kennung>\n"
+"\n"
+"Deaktiviert eine Verbindung von einem Gerät (hindert das Gerät jedoch nicht\n"
+"daran, weiterhin automatisch zu verbinden). Das zu deaktivierende Profil "
+"wird\n"
+"anhand dessen Name, UUID oder D-Bus-Pfad identifiziert.\n"
+"\n"
-#: ../cli/src/connections.c:485 ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714 ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717 ../cli/src/devices.c:440
-#: ../cli/src/devices.c:493 ../cli/src/devices.c:609 ../cli/src/devices.c:610
-#: ../cli/src/devices.c:611 ../cli/src/devices.c:643 ../cli/src/devices.c:670
-#: ../cli/src/devices.c:671 ../cli/src/devices.c:672 ../cli/src/devices.c:673
-#: ../cli/src/devices.c:674 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:714
-#: ../cli/src/settings.c:787 ../cli/src/settings.c:907
-#: ../cli/src/settings.c:1189 ../cli/src/settings.c:1190
-#: ../cli/src/settings.c:1192 ../cli/src/settings.c:1194
-#: ../cli/src/settings.c:1195 ../cli/src/settings.c:1326
-#: ../cli/src/settings.c:1327 ../cli/src/settings.c:1328
-#: ../cli/src/settings.c:1329 ../cli/src/settings.c:1406
-#: ../cli/src/settings.c:1407 ../cli/src/settings.c:1408
-#: ../cli/src/settings.c:1409 ../cli/src/settings.c:1410
-#: ../cli/src/settings.c:1411 ../cli/src/settings.c:1412
-#: ../cli/src/settings.c:1413 ../cli/src/settings.c:1414
-#: ../cli/src/settings.c:1415 ../cli/src/settings.c:1416
-#: ../cli/src/settings.c:1417 ../cli/src/settings.c:1418
-#: ../cli/src/settings.c:1489
-msgid "no"
-msgstr "nein"
+#: ../cli/src/connections.c:339
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname, or connection UUID or name)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname, or connection UUID or name)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli connection add { ARGUMENTE | help }\n"
+" ARGUMENTE := NORMALE_OPTIONEN TYP_SPEZIFISCHE_OPTIONEN IP_OPTIONEN\n"
+"\n"
+" NORMALE_OPTIONEN:\n"
+" type <Typ>\n"
+" ifname <Schnittstellenname> | \"*\"\n"
+" [con-name <Verbindungsname>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYP_SPEZIFISCHE_OPTIONEN:\n"
+" Ethernet: [mac <MAC-Adresse>]\n"
+" [cloned-mac <geklonte MAC-Adresse>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" WLAN: ssid <SSID>\n"
+" [mac <MAC-Adresse>]\n"
+" [cloned-mac <geklonte MAC-Adresse>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC-Adresse>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE Benutzername>\n"
+" [password <PPPoE Passwort>]\n"
+" [service <PPPoE Dienstname>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC-Adresse>]\n"
+"\n"
+" gsm: apn <APN>]\n"
+" [user <Benutzername>]\n"
+" [password <Passwort>]\n"
+"\n"
+" cdma: [user <Benutzername>]\n"
+" [password <Passwort>]\n"
+"\n"
+" infiniband: [mac <MAC-Adresse>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <Schnittstellenname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" Bluetooth: [addr <bluetooth-Adresse>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (Verbindungs-UUID, Schnittstellenname "
+"oder MAC)\n"
+" [id <VLAN-Kennung>]\n"
+" [flags <VLAN-Flags>]\n"
+" [ingress <Prioritätsabbildung Eingangsverkehr>]\n"
+" [egress <Prioritätsabbildung Ausgangsverkehr>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <Schnittstellenname>]\n"
+" [miimon <Zahl>]\n"
+" [downdelay <Zahl>]\n"
+" [updelay <Zahl>]\n"
+" [arp-interval <Zahl>]\n"
+" [arp-ip-target <Zahl>]\n"
+"\n"
+" bond-slave: master <master (Schnittstellenname oder Verbindungs-UUID)\n"
+"\n"
+" team: [config <Datei>|<Pure JSON-Daten>]\n"
+"\n"
+" team-slave: master <master (Schnittstellenname oder Verbindungs-UUID)\n"
+" [config <Datei>|<Pure JSON-Daten>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <Zahl>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (Schnittstellenname oder Verbindungs-UUID)\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <Benutzername>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC-Adresse>]\n"
+"\n"
+" IP_OPTIONEN:\n"
+" [ip4 <IPv4-Adresse>] [gw4 <IPv4-Gateway>]\n"
+" [ip6 <IPv6-Adresse>] [gw6 <IPv6-Gateway>]\n"
-#: ../cli/src/connections.c:560
-msgid "Connection list"
-msgstr "Verbindungsliste"
-
-#: ../cli/src/connections.c:573 ../cli/src/connections.c:1110
-#: ../cli/src/connections.c:1648 ../cli/src/connections.c:1663
-#: ../cli/src/connections.c:1672 ../cli/src/connections.c:1682
-#: ../cli/src/connections.c:1694 ../cli/src/connections.c:1802
-#: ../cli/src/connections.c:1904 ../cli/src/devices.c:1121
-#: ../cli/src/devices.c:1131 ../cli/src/devices.c:1249
-#: ../cli/src/devices.c:1257 ../cli/src/devices.c:1621
-#: ../cli/src/devices.c:1628 ../cli/src/devices.c:1642
-#: ../cli/src/devices.c:1649 ../cli/src/devices.c:1666
-#: ../cli/src/devices.c:1677 ../cli/src/devices.c:1898
-#: ../cli/src/devices.c:1905
+#: ../cli/src/connections.c:417
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "Fehler: Argument %s fehlt."
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
+"\n"
+"Modify one or more properties of the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path. For multi-valued\n"
+"properties you can use optional '+' or '-' prefix to the property name.\n"
+"The '+' sign allows appending items instead of overwriting the whole value.\n"
+"The '-' sign allows removing selected items instead of the whole value.\n"
+"\n"
+"Examples:\n"
+"nmcli con mod home-wifi wifi.ssid rakosnicek\n"
+"nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.2/24, "
+"10.10.1.5/8\"\n"
+"nmcli con mod em1-1 +ipv4.dns 8.8.4.4\n"
+"nmcli con mod em1-1 -ipv4.dns 1\n"
+"nmcli con mod em1-1 -ipv6.addr \"abbe::cafe/56\"\n"
+"nmcli con mod bond0 +bond.options mii=500\n"
+"nmcli con mod bond0 -bond.options downdelay\n"
+"\n"
+msgstr ""
-#: ../cli/src/connections.c:586
+#: ../cli/src/connections.c:441
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Fehler: Verbindung %s existiert nicht."
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli connection edit { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [id | uuid | path] <Kennung>\n"
+"\n"
+"Bearbeitet ein vorhandenes Verbindungsprofil in einem interaktiven Editor.\n"
+"Das Profil wird anhand dessen Name, UUID oder D-Bus-Pfad identifiziert\n"
+"\n"
+"PARAMETER := [type <neuer Verbindungstyp>] [con-name <neuer "
+"Verbindungsname>]\n"
+"\n"
+"Fügt ein neues Verbindungsprofil in einem interaktiven Editor hinzu.\n"
+"\n"
-#: ../cli/src/connections.c:592 ../cli/src/connections.c:1707
-#: ../cli/src/connections.c:1819 ../cli/src/connections.c:1911
-#: ../cli/src/devices.c:905 ../cli/src/devices.c:985 ../cli/src/devices.c:1145
-#: ../cli/src/devices.c:1263 ../cli/src/devices.c:1690
-#: ../cli/src/devices.c:1911
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Unbekannter Parameter: %s\n"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli connection delete { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [id | uuid | path] <Kennung>\n"
+"\n"
+"Löscht ein Verbindungsprofil.\n"
+"Das Profil wird anhand dessen Name, UUID oder D-Bus-Pfad identifiziert.\n"
+"\n"
-#: ../cli/src/connections.c:601
+#: ../cli/src/connections.c:469
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Fehler: Es wurde kein gültiger Parameter angegeben."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli connection reload { help }\n"
+"\n"
+"Lädt alle Verbindungsdateien neu von der Festplatte.\n"
+"\n"
-#: ../cli/src/connections.c:616 ../cli/src/connections.c:2004
-#: ../cli/src/devices.c:2119 ../cli/src/network-manager.c:596
+#: ../cli/src/connections.c:478
#, c-format
-msgid "Error: %s."
-msgstr "Fehler: %s."
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli connection load { PARAMETER | help }\n"
+"\n"
+"PARAMETER := <Dateiname> [<Dateiname>...]\n"
+"\n"
+"Lädt eine oder mehrere Verbindungsdateien von der Festplatte (bzw. lädt "
+"neu).\n"
+"Verwenden Sie dies nach einer manuellen Änderung an einer Verbindungsdatei,\n"
+"um sicherzustellen, dass der NetworkManager die Änderungen übernimmt.\n"
+"\n"
-#: ../cli/src/connections.c:629
+#: ../cli/src/connections.c:536
msgid "activating"
msgstr "wird aktiviert"
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:538
msgid "activated"
msgstr "aktiviert"
-#: ../cli/src/connections.c:645
+#: ../cli/src/connections.c:542
+msgid "deactivated"
+msgstr "deaktiviert"
+
+#: ../cli/src/connections.c:554
msgid "VPN connecting (prepare)"
msgstr "VPN wird verbunden (wird vorbereitet)"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:556
msgid "VPN connecting (need authentication)"
msgstr "VPN wird verbunden (Legitimierung wird benötigt)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:558
msgid "VPN connecting"
msgstr "VPN wird verbunden"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:560
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN wird verbunden (IP-Einstellungen werden ermittelt)"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:562
msgid "VPN connected"
msgstr "VPN verbunden"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:564
msgid "VPN connection failed"
msgstr "VPN-Verbindung gescheitert"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:566
msgid "VPN disconnected"
msgstr "VPN getrennt"
-#: ../cli/src/connections.c:710 ../cli/src/connections.c:720
+#: ../cli/src/connections.c:649
+msgid "Connection profile details"
+msgstr "Details des Verbindungsprofils"
+
+#: ../cli/src/connections.c:661 ../cli/src/connections.c:1008
+#, c-format
+msgid "Error: 'connection show': %s"
+msgstr "Fehler: »connection show«: %s"
+
+#: ../cli/src/connections.c:805
+msgid "never"
+msgstr "nie"
+
+#. "CAPABILITIES"
+#: ../cli/src/connections.c:806 ../cli/src/connections.c:807
+#: ../cli/src/connections.c:809 ../cli/src/connections.c:868
+#: ../cli/src/connections.c:869 ../cli/src/connections.c:871
+#: ../cli/src/connections.c:6448 ../cli/src/connections.c:6449
+#: ../cli/src/devices.c:606 ../cli/src/devices.c:656 ../cli/src/devices.c:798
+#: ../cli/src/devices.c:799 ../cli/src/devices.c:800 ../cli/src/devices.c:833
+#: ../cli/src/devices.c:862 ../cli/src/devices.c:863 ../cli/src/devices.c:864
+#: ../cli/src/devices.c:865 ../cli/src/devices.c:866 ../cli/src/devices.c:867
+#: ../cli/src/devices.c:868 ../cli/src/network-manager.c:442
+msgid "yes"
+msgstr "ja"
+
+#: ../cli/src/connections.c:806 ../cli/src/connections.c:807
+#: ../cli/src/connections.c:809 ../cli/src/connections.c:868
+#: ../cli/src/connections.c:869 ../cli/src/connections.c:871
+#: ../cli/src/connections.c:6448 ../cli/src/connections.c:6449
+#: ../cli/src/devices.c:606 ../cli/src/devices.c:656 ../cli/src/devices.c:798
+#: ../cli/src/devices.c:799 ../cli/src/devices.c:800 ../cli/src/devices.c:833
+#: ../cli/src/devices.c:862 ../cli/src/devices.c:863 ../cli/src/devices.c:864
+#: ../cli/src/devices.c:865 ../cli/src/devices.c:866 ../cli/src/devices.c:867
+#: ../cli/src/devices.c:868 ../cli/src/network-manager.c:444
+msgid "no"
+msgstr "nein"
+
+#: ../cli/src/connections.c:864 ../cli/src/connections.c:874
+#: ../cli/src/devices.c:596
msgid "N/A"
msgstr "N.V."
-#: ../cli/src/connections.c:914 ../cli/src/connections.c:1138
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Fehler: »Verb. Status«: %s"
+#: ../cli/src/connections.c:996
+msgid "Activate connection details"
+msgstr "Verbindungsdetails aktivieren"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1229
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Fehler: »Verb. Status«: %s; erlaubte Felder: %s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "Ungültiges Feld »%s«; erlaubte Felder: %s und %s oder %s,%s"
-#: ../cli/src/connections.c:924
-msgid "Active connection details"
-msgstr "Einzelheiten zur aktiven Verbindung"
-
-#: ../cli/src/connections.c:1060 ../cli/src/connections.c:1722
-#: ../cli/src/connections.c:1834 ../cli/src/connections.c:1925
-#: ../cli/src/devices.c:932 ../cli/src/devices.c:994 ../cli/src/devices.c:1160
-#: ../cli/src/devices.c:1293 ../cli/src/devices.c:1712
-#: ../cli/src/devices.c:1940 ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1244 ../cli/src/connections.c:1252
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr ""
-"Fehler: Es kann nicht erkannt werden, ob NetworkManager ausgeführt wird: %s."
+msgid "'%s' has to be alone"
+msgstr "»%s« muss allein stehen"
-#: ../cli/src/connections.c:1064 ../cli/src/connections.c:1726
-#: ../cli/src/connections.c:1838 ../cli/src/connections.c:1929
-#: ../cli/src/devices.c:936 ../cli/src/devices.c:998 ../cli/src/devices.c:1164
-#: ../cli/src/devices.c:1297 ../cli/src/devices.c:1716
-#: ../cli/src/devices.c:1944 ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1283 ../cli/src/connections.c:2009
+#: ../cli/src/connections.c:2069 ../cli/src/connections.c:7926
+#: ../cli/src/connections.c:8134 ../cli/src/connections.c:8227
+#: ../cli/src/connections.c:8255 ../cli/src/devices.c:1199
+#: ../cli/src/devices.c:1247 ../cli/src/devices.c:1411
+#: ../cli/src/devices.c:1546 ../cli/src/devices.c:1683
+#: ../cli/src/devices.c:2127 ../cli/src/devices.c:2426
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Fehler: NetworkManager wird nicht ausgeführt"
-#: ../cli/src/connections.c:1096
-msgid "Active connections"
-msgstr "Aktive Verbindungen"
+#. Add headers
+#: ../cli/src/connections.c:1313
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager aktive Profile"
+
+#: ../cli/src/connections.c:1314
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager Verbindungsprofile"
+
+#: ../cli/src/connections.c:1351 ../cli/src/connections.c:1954
+#: ../cli/src/connections.c:1970 ../cli/src/connections.c:1979
+#: ../cli/src/connections.c:1989 ../cli/src/connections.c:2086
+#: ../cli/src/connections.c:7942 ../cli/src/connections.c:8165
+#: ../cli/src/devices.c:1641 ../cli/src/devices.c:1649
+#: ../cli/src/devices.c:2040 ../cli/src/devices.c:2047
+#: ../cli/src/devices.c:2061 ../cli/src/devices.c:2068
+#: ../cli/src/devices.c:2085 ../cli/src/devices.c:2093
+#: ../cli/src/devices.c:2289 ../cli/src/devices.c:2385
+#: ../cli/src/devices.c:2392
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Fehler: Argument %s fehlt."
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1402
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "Fehler: »%s« ist keine aktive Verbindung."
+msgid "Error: %s - no such connection profile."
+msgstr "Fehler: Verbindungsprofil %s existiert nicht."
-#: ../cli/src/connections.c:1126
+#: ../cli/src/connections.c:1418 ../cli/src/connections.c:2022
+#: ../cli/src/connections.c:8233 ../cli/src/connections.c:8274
+#: ../cli/src/connections.c:8428 ../cli/src/devices.c:2268
+#: ../cli/src/devices.c:2642 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "Fehler: unbekannter Parameter: %s"
+msgid "Error: %s."
+msgstr "Fehler: %s."
-#: ../cli/src/connections.c:1233
+#: ../cli/src/connections.c:1513
#, c-format
msgid "no active connection on device '%s'"
msgstr "Keine aktive Verbindung auf Gerät »%s«"
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1521
msgid "no active connection or device"
msgstr "Keine aktive Verbindung oder Gerät"
-#: ../cli/src/connections.c:1312
+#: ../cli/src/connections.c:1592
#, c-format
msgid "device '%s' not compatible with connection '%s'"
-msgstr "Gerät »%s« ist nicht mit der Verbindung »%s« kompatibel"
+msgstr "Gerät »%s« ist nicht mit der Verbindung »%s« kompatibel"
-#: ../cli/src/connections.c:1315
+#: ../cli/src/connections.c:1595
#, c-format
msgid "no device found for connection '%s'"
-msgstr "Für die Verbindung »%s« wurde kein Gerät gefunden"
+msgstr "Für die Verbindung »%s« wurde kein Gerät gefunden"
-#: ../cli/src/connections.c:1327
+#: ../cli/src/connections.c:1607
msgid "unknown reason"
msgstr "unbekannter Grund"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1609 ../cli/src/network-manager.c:288
msgid "none"
msgstr "kein"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1611
msgid "the user was disconnected"
msgstr "Der Benutzer wurde getrennt"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1613
msgid "the base network connection was interrupted"
msgstr "Die Basisverbindung wurde unterbrochen"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1615
msgid "the VPN service stopped unexpectedly"
msgstr "Der VPN-Dienst wurde unerwartet gestoppt"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1617
msgid "the VPN service returned invalid configuration"
msgstr "Der VPN-Dienst gab ungültige Einstellungen zurück"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1619
msgid "the connection attempt timed out"
msgstr "Der Verbindungsversuch benötigte zu viel Zeit"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1621
msgid "the VPN service did not start in time"
msgstr "Der VPN-Dienst wurde nicht rechtzeitig gestartet"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1623
msgid "the VPN service failed to start"
msgstr "Der VPN-Dienst konnte nicht gestartet werden"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1625
msgid "no valid VPN secrets"
msgstr "Keine gültigen VPN-Schlüssel"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1627
msgid "invalid VPN secrets"
msgstr "Ungültige VPN-Schlüssel"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1629
msgid "the connection was removed"
msgstr "Die Verbindung wurde entfernt"
-#: ../cli/src/connections.c:1366 ../cli/src/connections.c:1571
+#: ../cli/src/connections.c:1646 ../cli/src/connections.c:1802
+#: ../cli/src/connections.c:6344
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "Verbindung wurde erfolgreich aktiviert (aktiver D-Bus-Pfad: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1472
+#: ../cli/src/connections.c:1651
#, c-format
msgid "Error: Connection activation failed."
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert."
-#: ../cli/src/connections.c:1396
+#: ../cli/src/connections.c:1676
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN-Verbindung wurde erfolgreich aktiviert (aktiver D-Bus-Pfad: %s)\n"
-#: ../cli/src/connections.c:1404
+#: ../cli/src/connections.c:1683
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s."
-#: ../cli/src/connections.c:1501 ../cli/src/devices.c:1054
+#: ../cli/src/connections.c:1701 ../cli/src/devices.c:1296
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Fehler: Zeitbeschränkung von %d Sekunden ist abgelaufen."
-#: ../cli/src/connections.c:1562
+#: ../cli/src/connections.c:1766
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Fehler: Gerät »%s« wartet auf »Slaves«, bevor mit der Aktivierung "
+"fortgefahren wird."
+
+#: ../cli/src/connections.c:1786
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s"
-#: ../cli/src/connections.c:1656 ../cli/src/connections.c:1810
-#: ../cli/src/connections.c:1938
+#: ../cli/src/connections.c:1891 ../cli/src/connections.c:2023
+msgid "unknown error"
+msgstr "unbekannter Fehler"
+
+#: ../cli/src/connections.c:1899
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Fehler: Unbekannte Verbindung: %s."
+msgid "unknown device '%s'."
+msgstr "Unbekanntes Gerät »%s«,"
+
+#: ../cli/src/connections.c:1904
+msgid "neither a valid connection nor device given"
+msgstr "weder eine gültige Verbindung noch ein Gerät angegeben"
-#: ../cli/src/connections.c:1702 ../cli/src/devices.c:1139
-#: ../cli/src/devices.c:1685
+#: ../cli/src/connections.c:1942 ../cli/src/connections.c:2054
+#: ../cli/src/connections.c:8141
+msgid "Connection (name, UUID, or path): "
+msgstr "Verbindung (Name, UUID oder Pfad): "
+
+#: ../cli/src/connections.c:1998 ../cli/src/devices.c:1173
+#: ../cli/src/devices.c:1655 ../cli/src/devices.c:2104
+#: ../cli/src/devices.c:2398
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Fehler: Der Wert »%s« ist keine gültige Zeitangabe."
+msgid "Unknown parameter: %s\n"
+msgstr "Unbekannter Parameter: %s\n"
+
+#: ../cli/src/connections.c:2031
+msgid "preparing"
+msgstr "Vorbereitung läuft"
-#: ../cli/src/connections.c:1715 ../cli/src/connections.c:1827
-#: ../cli/src/connections.c:1918
+#: ../cli/src/connections.c:2059 ../cli/src/connections.c:8146
+#: ../cli/src/connections.c:8261
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Fehler: id oder uuid müssen angegeben werden."
+msgid "Error: No connection specified."
+msgstr "Fehler: Keine Verbindung angegeben."
-#: ../cli/src/connections.c:1747
+#: ../cli/src/connections.c:2096
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Fehler: Es wurde kein passendes Gerät gefunden: %s."
+msgid "Error: '%s' is not an active connection."
+msgstr "Fehler: »%s« ist keine aktive Verbindung."
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:2408 ../cli/src/utils.c:513
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Fehler: Es wurde kein passendes Gerät gefunden."
+msgid "'%s' not among [%s]"
+msgstr "»%s« ist nicht unter [%s]"
-#: ../cli/src/connections.c:1863
+#: ../cli/src/connections.c:2490
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Warnung: Verbindung ist nicht aktiv\n"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Fehler: »%s«: »%s« ist keine gültige %s MAC-Adresse."
-#: ../cli/src/connections.c:1877
+#: ../cli/src/connections.c:2491 ../libnm-glib/nm-device.c:1824
+#: ../tui/nm-editor-utils.c:173
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2491 ../libnm-glib/nm-device.c:1812
+#: ../tui/nm-editor-utils.c:156
+msgid "Ethernet"
+msgstr "Ethernet"
+
+#: ../cli/src/connections.c:2514
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "Fehler: Löschen der Verbindung fehlgeschlagen: %s"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Fehler: »mtu«: »%s« ist keine gültige MTU."
-#: ../cli/src/connections.c:1995
+#: ../cli/src/connections.c:2530
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Fehler: Der »con«-Befehl »%s« ist ungültig."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Fehler: »parent«: »%s« ist kein gültiger Name einer Schnittstelle."
-#: ../cli/src/connections.c:2063
+#: ../cli/src/connections.c:2551
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Fehler: Verbindung zu D-Bus konnte nicht hergestellt werden."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Fehler: »p-key«: »%s« ist kein gültiger InfiniBand »P_KEY«."
-#: ../cli/src/connections.c:2071
+#: ../cli/src/connections.c:2567
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Fehler: Systemeinstellungen konnten nicht ermittelt werden."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"Fehler: »mode»: »%s« ist kein gültiger InfiniBand-Transportmodus [datagram, "
+"connected]."
-#: ../cli/src/connections.c:2081
+#: ../cli/src/connections.c:2583
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Fehler: »flags«: »%s« ist ungültig. Verwenden Sie <0-7>."
+
+#: ../cli/src/connections.c:2605
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Fehler: »%s«: »%s« ist ungültig; %s "
+
+#: ../cli/src/connections.c:2798
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Fehler: »%s«: »%s« ist ungültig; verwenden Sie <%u-%u>."
+
+#: ../cli/src/connections.c:2812
+msgid "ethernet"
+msgstr "Ethernet"
+
+#: ../cli/src/connections.c:2812 ../libnm-glib/nm-device.c:1814
+#: ../tui/nm-editor-utils.c:164
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2815
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "Es sind 3 optionale Argumente für Verbindungstyp »%s« vorhanden.\n"
+
+#: ../cli/src/connections.c:2816 ../cli/src/connections.c:2870
+#: ../cli/src/connections.c:2992 ../cli/src/connections.c:3038
+#: ../cli/src/connections.c:3098 ../cli/src/connections.c:3166
+#: ../cli/src/connections.c:3329 ../cli/src/connections.c:3425
+#: ../cli/src/connections.c:3507
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "Möchten Sie diese zur Verfügung stellen? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:2824 ../cli/src/connections.c:2878
+#: ../cli/src/connections.c:3005 ../cli/src/connections.c:3106
+msgid "MTU [auto]: "
+msgstr "MTU [automatisch]: "
+
+#: ../cli/src/connections.c:2835 ../cli/src/connections.c:2889
+#: ../cli/src/connections.c:2968 ../cli/src/connections.c:3016
+msgid "MAC [none]: "
+msgstr "MAC [keine]: "
+
+#: ../cli/src/connections.c:2846
+msgid "Cloned MAC [none]: "
+msgstr "Geklonte MAC [keine]: "
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2869
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "Es gibt 5 optionale Argumente für den Verbindungstyp »InfiniBand«.\n"
+
+#: ../cli/src/connections.c:2900
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "Transportmodus (»datagram« oder »connected«) [datagram]: "
+
+#: ../cli/src/connections.c:2913
+msgid "Parent interface [none]: "
+msgstr "Ãœbergeordnete Schnittstelle [keine]: "
+
+#: ../cli/src/connections.c:2924
+msgid "P_KEY [none]: "
+msgstr "P_KEY [keiner]: "
+
+#: ../cli/src/connections.c:2934
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "Fehler: »p-key« wird benötigt wenn »parent« angegeben ist.\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2959
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "Es gibt 1 optionales Argument für den Verbindungstyp »WiMax«.\n"
+
+#: ../cli/src/connections.c:2960 ../cli/src/connections.c:3062
+#: ../cli/src/connections.c:3281 ../cli/src/connections.c:3483
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "Möchten Sie es zur Verfügung stellen? (yes/no) [yes]: "
+
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:2991
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "Es gibt 4 optionale Argumente für den Verbindungstyp »PPPoE«.\n"
+
+#: ../cli/src/connections.c:2999 ../cli/src/connections.c:3047
+msgid "Password [none]: "
+msgstr "Passwort [keines]: "
+
+#: ../cli/src/connections.c:3001
+msgid "Service [none]: "
+msgstr "Dienst [keiner]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:3037
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
msgstr ""
-"Fehler: Verbindungen können nicht ermittelt werden: Der Einstellungsdienst "
-"wird nicht ausgeführt."
+"Es gibt 5 optionale Argumente für den Verbindungstyp »Mobiles Breitband«.\n"
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:108 ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
-msgid "DEVICE"
-msgstr "GERÄT"
+#: ../cli/src/connections.c:3045 ../cli/src/connections.c:3490
+msgid "Username [none]: "
+msgstr "Benutzername [keiner]: "
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "RESSOURCEN"
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3061
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "Es gibt 1 optionales Argument für den Verbindungstyp »bluetooth«.\n"
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "WLAN-EIGENSCHAFTEN"
+#: ../cli/src/connections.c:3070
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Bluetooth-Typ (»panu«, »dun-gsm« oder »dun-cdma«) [panu]: "
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:3078
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Fehler: »bt-type«: »%s« ist kein gültiger Bluetooth-Typ.\n"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "KABEL-EIGENSCHAFTEN"
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "Es gibt 4 optionale Argumente für den Verbindungstyp »VLAN«.\n"
-#. 4
-#: ../cli/src/devices.c:87
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-EIGENSCHAFTEN"
+#: ../cli/src/connections.c:3117
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN-Flags (<0-7>) [keine]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:3128
+msgid "Ingress priority maps [none]: "
+msgstr "Eingehende Prioritätsumschlüsselungen [keine]:"
-#. 6
-#: ../cli/src/devices.c:89
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:3139
+msgid "Egress priority maps [none]: "
+msgstr "Ausgehende Prioritätsumschlüsselungen [keine]:"
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:3165
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "Es gibt optionale Argumente für den Verbindungstyp »Bündelung«.\n"
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:3175
+msgid "Bonding mode [balance-rr]: "
+msgstr "Bündelungsmodus [balance-rr]: "
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:3191
+msgid "Bonding primary interface [none]: "
+msgstr "Primäre Schnittstelle der Bündelung [keine]: "
-#. 10
-#: ../cli/src/devices.c:93
-msgid "BOND"
-msgstr "GEBÃœNDELT"
+#: ../cli/src/connections.c:3194
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Fehler: »primary«: »%s« ist kein gültiger Name einer Schnittstelle.\n"
-#. 11
-#: ../cli/src/devices.c:94
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:3202
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "Bindungs-Ãœberwachungsmodus (miimon oder arp) [miimon]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"Fehler: »%s« ist kein gültiger Überwachungsmodus; verwenden Sie »%s« oder "
+"»%s«.\n"
+
+#: ../cli/src/connections.c:3216
+msgid "Bonding miimon [100]: "
+msgstr "Bündelung »miimon« [100]: "
+
+#: ../cli/src/connections.c:3219
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fehler: »miimon«: »%s« ist keine gültige Zahl <0-%u>.\n"
+
+#: ../cli/src/connections.c:3227
+msgid "Bonding downdelay [0]: "
+msgstr "Bündelung »downdelay« [0]: "
+
+#: ../cli/src/connections.c:3230
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fehler: »downdelay«: »%s« ist keine gültige Zahl <0-%u>.\n"
+
+#: ../cli/src/connections.c:3238
+msgid "Bonding updelay [0]: "
+msgstr "Bündelung »updelay« [0]: "
+
+#: ../cli/src/connections.c:3241
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fehler: »updelay«: »%s« ist keine gültige Zahl <0-%u>.\n"
+
+#: ../cli/src/connections.c:3250
+msgid "Bonding arp-interval [0]: "
+msgstr "Bündelung »arp-interval« [0]: "
+
+#: ../cli/src/connections.c:3253
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fehler: »arp-interval«: »%s« ist keine gültige Zahl <0-%u>.\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3261
+msgid "Bonding arp-ip-target [none]: "
+msgstr "Bündelung »arp-ip-target« [keines]: "
+
+#. Ask for optional 'team' arguments.
+#: ../cli/src/connections.c:3280
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "Es gibt 1 optionales Argument für den Verbindungstyp »%s«.\n"
+
+#: ../cli/src/connections.c:3289
+msgid "Team JSON configuration [none]: "
+msgstr "JSON-Konfiguration der Bündelung [keine]: "
+
+#: ../cli/src/connections.c:3308
+msgid "team"
+msgstr "Bündelung"
+
+#: ../cli/src/connections.c:3314
+msgid "team-slave"
+msgstr "Bündelungs-Slave"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3328
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "Es gibt 6 optionale Argumente für den Verbindungstyp »bridge«.\n"
+
+#: ../cli/src/connections.c:3338
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP aktivieren (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3342
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "Fehler: »stp«: »%s«.\n"
+
+#: ../cli/src/connections.c:3350
+msgid "STP priority [32768]: "
+msgstr "STP-Priorität [32768]: "
+
+#: ../cli/src/connections.c:3354
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Fehler: »priority«: »%s« ist keine gültige Zahl <0-%d>.\n"
+
+#: ../cli/src/connections.c:3362
+msgid "Forward delay [15]: "
+msgstr "Weiterleitungsverzögerung [15]: "
+
+#: ../cli/src/connections.c:3366
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Fehler: »forward-delay«: »%s« ist keine gültige Zahl <2-30>.\n"
+
+#: ../cli/src/connections.c:3375
+msgid "Hello time [2]: "
+msgstr "Hello-Zeit [2]: "
+
+#: ../cli/src/connections.c:3379
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Fehler: »hello-time«: »%s« ist keine gültige Zahl <1-10>.\n"
+
+#: ../cli/src/connections.c:3387
+msgid "Max age [20]: "
+msgstr "Maximales Alter [20]: "
+
+#: ../cli/src/connections.c:3391
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Fehler: »max.age«: »%s« ist keine gültige Zahl <6-40>.\n"
+
+#: ../cli/src/connections.c:3399
+msgid "MAC address ageing time [300]: "
+msgstr "Verfallszeit für MAC-Adressen [300]: "
+
+#: ../cli/src/connections.c:3403
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Fehler: 'ageing-time': »%s« ist keine gültige Zahl <0-1000000>.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3424
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "Es gibt 3 optionale Argumente für den Verbindungstyp »bridge-slave«.\n"
+
+#: ../cli/src/connections.c:3433
+msgid "Bridge port priority [32]: "
+msgstr "Bridge-Port-Priorität [32]: "
+
+#: ../cli/src/connections.c:3446
+msgid "Bridge port STP path cost [100]: "
+msgstr "Bridge-Port-STP-Pfadkosten [100]: "
+
+#: ../cli/src/connections.c:3460
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3464
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "Fehler: »hairpin«: »%s«.\n"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:3482
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "Es ist 1 optionales Argument für den Verbindungstyp »VPN« vorhanden.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3506
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "Es gibt 2 optionale Argumente für den Verbindungstyp »OLPC Mesh«.\n"
+
+#: ../cli/src/connections.c:3515
+msgid "OLPC Mesh channel [1]: "
+msgstr "»OLPC Mesh« Kanal [1]: "
+
+#: ../cli/src/connections.c:3518
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Fehler: »channel«: »%s« ist keine gültige Zahl <1-13>.\n"
+
+#: ../cli/src/connections.c:3526
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC-Adresse [keine]: "
+
+#: ../cli/src/connections.c:3574
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4-Adresse (IP[/plen] [Gateway]) [keine]: "
+
+#: ../cli/src/connections.c:3576
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6-Adresse (IP[/plen] [Gateway]) [keine]: "
+
+#: ../cli/src/connections.c:3594
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " Adresse erfolgreich hinzugefügt: %s %s\n"
+
+#: ../cli/src/connections.c:3596
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Warnung: Adresse ist bereits vorhanden: %s %s\n"
+
+#: ../cli/src/connections.c:3598
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Warnung: der Unsinn am Ende wird ignoriert: »%s«\n"
+
+#: ../cli/src/connections.c:3600 ../cli/src/connections.c:4454
+#: ../cli/src/connections.c:4514 ../cli/src/connections.c:4912
+#: ../cli/src/connections.c:4922
+msgid "Error: "
+msgstr "Fehler: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3618
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "Möchten Sie die IP-Adresse hinzufügen? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:3624
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr ""
+"Drücken Sie die Eingabetaste, um das Hinzufügen einer Adresse "
+"abzuschließen.\n"
+
+#: ../cli/src/connections.c:3770
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Fehler: »parent«: nicht gültig ohne »p-key«."
+
+#: ../cli/src/connections.c:3826 ../cli/src/connections.c:4828
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3829 ../cli/src/connections.c:4831
+msgid "Error: 'ssid' is required."
+msgstr "Fehler: »SSID« ist notwendig."
+
+#: ../cli/src/connections.c:3893
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP-Name: "
+
+#: ../cli/src/connections.c:3896
+msgid "Error: 'nsp' is required."
+msgstr "Fehler: »nsp« ist notwendig."
+
+#: ../cli/src/connections.c:3951
+msgid "PPPoE username: "
+msgstr "PPPoE Benutzername: "
+
+#: ../cli/src/connections.c:3954
+msgid "Error: 'username' is required."
+msgstr "Fehler: »username« ist notwendig."
+
+#: ../cli/src/connections.c:4025
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:4028
+msgid "Error: 'apn' is required."
+msgstr "Fehler: »apn« ist notwendig."
+
+#: ../cli/src/connections.c:4087
+msgid "Bluetooth device address: "
+msgstr "Bluetooth Geräteadresse: "
+
+#: ../cli/src/connections.c:4090
+msgid "Error: 'addr' is required."
+msgstr "Fehler: »addr« ist notwendig."
+
+#: ../cli/src/connections.c:4133
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr ""
+"Fehler: »bt-type«: »%s« ist nicht gültig. Verwenden Sie [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:4178
+msgid "VLAN parent device or connection UUID: "
+msgstr "Übergeordnetes VLAN-Gerät oder UUID der Verbindung: "
+
+#: ../cli/src/connections.c:4181
+msgid "Error: 'dev' is required."
+msgstr "Fehler: »dev« ist notwendig."
+
+#: ../cli/src/connections.c:4185
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN-Kennung <0-4095>: "
+
+#: ../cli/src/connections.c:4188
+msgid "Error: 'id' is required."
+msgstr "Fehler: »id« ist notwendig."
+
+#: ../cli/src/connections.c:4194
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Fehler: »id«: »%s« ist ungültig; verwenden Sie <0-4095>."
+
+#: ../cli/src/connections.c:4204
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr ""
+"Fehler: »dev«: »%s« ist weder eine UUID noch ein Schnittstellenname oder "
+"eine MAC-Adresse."
+
+#: ../cli/src/connections.c:4339
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "Fehler: »mode«: %s."
+
+#: ../cli/src/connections.c:4348
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Fehler: »primary«: »%s« ist kein gültiger Name einer Schnittstelle."
+
+#: ../cli/src/connections.c:4392
+msgid "Bond master: "
+msgstr "Bond-Master: "
+
+#: ../cli/src/connections.c:4395 ../cli/src/connections.c:4492
+#: ../cli/src/connections.c:4684
+msgid "Error: 'master' is required."
+msgstr "Fehler: »master« ist notwendig."
+
+#: ../cli/src/connections.c:4401 ../cli/src/connections.c:4498
+#: ../cli/src/connections.c:4690
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "Warnung: master=»%s« bezieht sich auf kein vorhandenes Profil.\n"
+
+#: ../cli/src/connections.c:4404 ../cli/src/connections.c:4506
+#: ../cli/src/connections.c:4693
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Warnung: »type« wird derzeit ignoriert. Zur Zeit werden nur Ethernet-slaves "
+"unterstützt.\n"
+
+#: ../cli/src/connections.c:4489
+msgid "Team master: "
+msgstr "Bündelungs-Master: "
+
+#: ../cli/src/connections.c:4596
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "Fehler: »stp«: %s."
+
+#: ../cli/src/connections.c:4681
+msgid "Bridge master: "
+msgstr "Master der Netzwerkbrücke: "
+
+#: ../cli/src/connections.c:4720
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "Fehler: »hairpin«: %s."
+
+#: ../cli/src/connections.c:4772
+msgid "VPN type: "
+msgstr "VPN-Typ: "
+
+#: ../cli/src/connections.c:4775
+msgid "Error: 'vpn-type' is required."
+msgstr "Fehler: »vpn-type« ist notwendig."
+
+#: ../cli/src/connections.c:4786
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "Fehler: »vpn-type«: %s."
+
+#: ../cli/src/connections.c:4844
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Fehler: »channel«: »%s« ist ungültig. Verwenden Sie <1-13>."
+
+#: ../cli/src/connections.c:4879
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Fehler: »%s« ist kein gültiger Verbindungstyp."
+
+#: ../cli/src/connections.c:4977
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Fehler: Verbindung »%s« konnte nicht hinzugefügt werden: (%d) %s"
+
+#: ../cli/src/connections.c:4981
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Verbindung »%s« (%s) erfolgreich hinzugefügt.\n"
+
+#: ../cli/src/connections.c:5055
+msgid "Connection type: "
+msgstr "Verbindungstyp: "
+
+#: ../cli/src/connections.c:5059
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Fehler: Das Argument »type« ist notwendig."
+
+#: ../cli/src/connections.c:5065
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Fehler: Unbekannter Verbindungstyp: %s."
+
+#: ../cli/src/connections.c:5074
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Fehler: »autoconnect«: %s."
+
+#: ../cli/src/connections.c:5084
+#, c-format
+msgid "Error: 'save': %s."
+msgstr "Fehler: »save«: %s."
+
+#: ../cli/src/connections.c:5100
+msgid "Interface name [*]: "
+msgstr "Schnittstellenname [*]: "
+
+#: ../cli/src/connections.c:5105
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "Fehler: Das Argument »ifname« ist notwendig."
+
+#: ../cli/src/connections.c:5112
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Fehler: »ifname«: »%s« ist weder eine gültige Schnittstelle noch »*«."
+
+#: ../cli/src/connections.c:5941
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' Werte werden gesetzt]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save [persistent|temporary] :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Hauptmenü ]---\n"
+"goto [<Einstellung> | <Eigenschaft>] :: zu einer Einstellung oder "
+"Eigenschaft wechseln\n"
+"remove <Einstellung>[.<Eigenschaft>] | <Eigenschaft> :: Einstellung "
+"entfernen oder Eigenschaftswert zurücksetzen\n"
+"set [<Einstellung>.<Eigenschaft> <Wert>] :: Eigenschaftswert "
+"festlegen\n"
+"describe [<Einstellung>.<Eigenschaft>] :: Eigenschaft beschreiben\n"
+"print [all] :: Die Verbindung ausgeben\n"
+"verify [all] :: Die Verbindung prüfen\n"
+"save [persistent|temporary] :: Die Verbindung speichern\n"
+"activate [<Schnittstelle>] [/<ap>|<nsp>] :: Die Verbindung aktivieren\n"
+"back :: Eine Ebene nach oben gehen (zurück)\n"
+"help/? [<Befehl>] :: Diese Hilfe ausgeben\n"
+"nmcli <conf-option> <Wert> :: nmcli-Konfiguration\n"
+"quit :: nmcli beenden\n"
+
+#: ../cli/src/connections.c:6049
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <Einstellung>[.<Eigenschaft>] | <Eigenschaft> :: Einstellung/"
+"Eigenschaft zum Bearbeiten eingeben\n"
+"\n"
+"Dieser Befehl betritt eine Einstellung oder Eigenschaft zur Bearbeitung.\n"
+"\n"
+"Beispiele: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:6056
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <Einstellung>[.<Eigenschaft>] :: Einstellung entfernen oder "
+"Eigenschaftswert zurücksetzen\n"
+"\n"
+"Dieser Befehl entfernt eine vollständige Einstellung der Verbindung, oder im "
+"Falle einer\n"
+"Eigenschaft wird der Eigenschaftswert auf die Voreinstellung zurückgesetzt.\n"
+"\n"
+"Beispiele: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:6063
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<Einstellung>.<Eigenschaft> <Wert>] :: Eigenschaftswert festlegen\n"
+"\n"
+"Dieser Befehl legt den Eigenschaftswert fest.\n"
+"\n"
+"Beispiel: nmcli> s con.id Meine Verbindung\n"
+
+#: ../cli/src/connections.c:6068
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<Einstellung>.<Eigenschaft>] :: Eigenschaft beschreiben\n"
+"\n"
+"Zeigt die Eigenschaftsbeschreibung. Sie können die Hilfeseite nm-settings(5) "
+"zu Rate ziehen, um alle Einstellungen und Eigenschaften nachzulesen.\n"
+
+#: ../cli/src/connections.c:6073
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: Die Verbindung oder Verbindungswerte ausgeben\n"
+"\n"
+"Zeigt die aktuelle Eigenschaft oder die gesamte Verbindung.\n"
+"\n"
+"Beispiel: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:6078
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: Die Verbindung oder Verbindungsgültigkeit prüfen\n"
+"\n"
+"Prüft, ob die Einstellung oder Verbindung gültig ist und später gespeichert "
+"werden kann. Ungültige Werte werden bei Fehler hervorgehoben.\n"
+"\n"
+"Beispiele: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:6085
+#, c-format
+msgid ""
+"save [persistent|temporary] :: save the connection\n"
+"\n"
+"Sends the connection profile to NetworkManager that either will save it\n"
+"persistently, or will only keep it in memory. 'save' without an argument\n"
+"means 'save persistent'.\n"
+"Note that once you save the profile persistently those settings are saved\n"
+"across reboot or restart. Subsequent changes can also be temporary or\n"
+"persistent, but any temporary changes will not persist across reboot or\n"
+"restart. If you want to fully remove the persistent connection, the "
+"connection\n"
+"profile must be deleted.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:6096
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<Schnittstelle>] [/<Zugriffspunkt>|<nsp>] :: Die Verbindung "
+"aktivieren\n"
+"\n"
+"Aktiviert die Verbindung.\n"
+"\n"
+"Mögliche Optionen:\n"
+"<Schnittstelle> - Gerät, wo die Verbindung aktiviert werden soll\n"
+"/<Zugriffspunkt>|<nsp> - Zugriffspunkt (WLAN) oder NSP (WiMAX) (stellen Sie "
+"»/« voraus wenn <Schnittstelle> nicht angegeben wird)\n"
+
+#: ../cli/src/connections.c:6103 ../cli/src/connections.c:6260
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: Eine Menüebene nach oben gehen\n"
+"\n"
+
+#: ../cli/src/connections.c:6106
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: Hilfe zu den nmcli-Befehlen\n"
+"\n"
+
+#: ../cli/src/connections.c:6109
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<Konfigurationsoption> <Wert>] :: nmcli-Konfiguration\n"
+"\n"
+"Richtet nmcli ein. die folgenden Optionen sind verfügbar:\n"
+"status-line yes | no [Vorgabe: no]\n"
+"save-confirmation yes | no [Vorgabe: yes]\n"
+"prompt-color <0-8> [Vorgabe: 0]\n"
+" 0 = normal\n"
+" 1 = schwarz\n"
+" 2 = rot\n"
+" 3 = grün\n"
+" 4 = gelb\n"
+" 5 = blau\n"
+" 6 = magenta\n"
+" 7 = zyan\n"
+" 8 = weiß\n"
+"\n"
+"Beispiele: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:6129 ../cli/src/connections.c:6266
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli beenden\n"
+"\n"
+"Dieser Befehl beendet nmcli. Wenn die Verbindung in Bearbeitung nicht "
+"gespeichert ist wird der Benutzer gefragt, die Aktion zu bestätigen.\n"
+
+#: ../cli/src/connections.c:6134 ../cli/src/connections.c:6271
+#: ../cli/src/connections.c:6652 ../cli/src/connections.c:7518
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "Unbekannter Befehl: »%s«\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6200
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Eigenschaften-Menü ]---\n"
+"set [<value>] :: Einen neuen Wert festlegen\n"
+"add [<value>] :: Der Eigenschaft eine neue Option "
+"hinzufügen\n"
+"change :: Den aktuellen Wert ändern\n"
+"remove [<index> | <option>] :: Den Wert löschen\n"
+"describe :: Die Eigenschaft beschreiben\n"
+"print [setting | connection] :: Die Eigenschaftswert(e) (Einstellung/"
+"Verbindung) ausgeben\n"
+"back :: In obere Ebene wechseln\n"
+"help/? [<command>] :: Diese Hilfe oder die Befehlsbeschreibung "
+"ausgeben\n"
+"quit :: nmcli beenden\n"
+
+#: ../cli/src/connections.c:6225
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<Wert>] :: einen neuen Wert setzen\n"
+"\n"
+"Dieser Befehl setzt den <Wert> für die Eigenschaft\n"
+
+#: ../cli/src/connections.c:6229
+#, c-format
+msgid ""
+"add [<value>] :: append new value to the property\n"
+"\n"
+"This command adds provided <value> to this property, if the property is of a "
+"container type. For single-valued properties the property value is replaced "
+"(same as 'set').\n"
+msgstr ""
+"add [<Wert>] :: Neuen Wert zur Eigenschaft hinzufügen\n"
+"\n"
+"Dieser Befehl fügt den angegebenen <Wert> zu dieser Eigenschaft hinzu, falls "
+"die Eigenschaft ein Container-Typ ist. Für einwertige Eigenschaften wird der "
+"Wert ersetzt (genau wie »set«).\n"
+
+#: ../cli/src/connections.c:6235
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: ändert den aktuellen Wert\n"
+"\n"
+"Zeigt den aktuellen Wert an und lässt ihn bearbeiten.\n"
+
+#: ../cli/src/connections.c:6239
+#, c-format
+msgid ""
+"remove [<value>|<index>|<option name>] :: delete the value\n"
+"\n"
+"Removes the property value. For single-valued properties, this sets the\n"
+"property back to its default value. For container-type properties, this "
+"removes\n"
+"all the values of that property, or you can specify an argument to remove "
+"just\n"
+"a single item or option. The argument is either a value or index of the item "
+"to\n"
+"remove, or an option name (for properties with named options).\n"
+"\n"
+"Examples: nmcli ipv4.dns> remove 8.8.8.8\n"
+" nmcli ipv4.dns> remove 2\n"
+" nmcli bond.options> remove downdelay\n"
+"\n"
+msgstr ""
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: die Eigenschaft erklären\n"
+"\n"
+"Zeigt die Beschreibung für die Eigenschaft. Sie können im Handbuch »nm-"
+"settings(5)« alle NetworkManager- Einstellungen und Eigenschaften "
+"nachlesen.\n"
+
+#: ../cli/src/connections.c:6255
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: Eigenschafts- (Einstellungs-, "
+"Verbindungs-) Wert(e) ausgeben\n"
+"\n"
+"Zeigt Eigenschaftswerte an. Wenn Sie ein Argument angeben, werden auch Werte "
+"für die gesamten Einstellungen oder Verbindungen angezeigt.\n"
+
+#: ../cli/src/connections.c:6263
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: Hilfe zu den nmcli-Befehlen\n"
+"\n"
+
+#: ../cli/src/connections.c:6350
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Fehler: Aktivierung der Verbindung ist gescheitert.\n"
+
+#: ../cli/src/connections.c:6428
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr ""
+"Fehler: Die Einstellung »%s« ist erforderlich und kann nicht entfernt "
+"werden.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6446
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ Typ: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+
+#: ../cli/src/connections.c:6509
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"Das Verbindungsprofil wurde von einem anderen Client gelöscht. Sie können "
+"»save« im Hauptmenü eingeben, um es wiederherzustellen.\n"
+
+#: ../cli/src/connections.c:6531 ../cli/src/connections.c:6956
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Geben Sie den Wert »%s« ein:"
+
+#: ../cli/src/connections.c:6548 ../cli/src/connections.c:6567
+#: ../cli/src/connections.c:6962 ../cli/src/connections.c:7021
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Fehler: Eigenschaft »%s« konnte nicht festgelegt werden: %s\n"
+
+#: ../cli/src/connections.c:6560
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Bearbeiten Sie den Wert »%s«:"
+
+#: ../cli/src/connections.c:6589
+#, c-format
+msgid "Error: %s\n"
+msgstr "Fehler: %s\n"
+
+#: ../cli/src/connections.c:6595 ../cli/src/connections.c:7100
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Fehler: Entfernen des Wertes »%s« ist fehlgeschlagen: %s\n"
+
+#: ../cli/src/connections.c:6616
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Unbekanntes Befehlsargument: »%s«\n"
+
+#: ../cli/src/connections.c:6636 ../cli/src/connections.c:7506
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr ""
+"Die Verbindung wurde noch nicht gespeichert. Möchten Sie wirklich beenden? "
+"[j/n]\n"
+
+#: ../cli/src/connections.c:6748
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Verfügbare Einstellungen: %s\n"
+
+#: ../cli/src/connections.c:6757
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Fehler: Ungültiger Einstellungsname: %s\n"
+
+#: ../cli/src/connections.c:6774
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Verfügbare Eigenschaften: %s\n"
+
+#: ../cli/src/connections.c:6782
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Fehler: Eigenschaft »%s«\n"
+
+#: ../cli/src/connections.c:6823
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"Die Verbindung wird mit »autoconnect=yes« (automatisch verbinden) "
+"gespeichert. Dadurch könnte die Verbindung sofort aktiviert werden.\n"
+"Möchten Sie speichern? [Ja] "
+
+#: ../cli/src/connections.c:6897
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Sie können die folgenden Einstellungen bearbeiten: %s\n"
+
+#: ../cli/src/connections.c:6924
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"Das Verbindungsprofil wurde von einem anderen Client gelöscht. Sie können "
+"»save« eingeben, um es wiederherzustellen.\n"
+
+#: ../cli/src/connections.c:6954 ../cli/src/connections.c:7012
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Gültige Werte für Eigenschaft »%s«: %s\n"
+
+#: ../cli/src/connections.c:6966 ../cli/src/connections.c:7183
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Fehler: Keine Einstellung gewählt. Gültig sind [%s]\n"
+
+#: ../cli/src/connections.c:6967
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"Verwenden Sie zuerst »goto <Einstellung>«, oder »set <Einstellung>."
+"<Eigenschaft>«\n"
+
+#: ../cli/src/connections.c:6982 ../cli/src/connections.c:7120
+#: ../cli/src/connections.c:7200
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "Fehler: Ungültiges Festlegen des Arguments »%s«. Gültig sind [%s]\n"
+
+#: ../cli/src/connections.c:6992
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Fehler: Fehlende Einstellung für die Eigenschaft »%s«\n"
+
+#: ../cli/src/connections.c:6999
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Fehler: Ungültige Eigenschaft: %s\n"
+
+#: ../cli/src/connections.c:7048
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Fehler: Unbekannte Einstellung »%s«\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Sie können die folgenden Eigenschaften bearbeiten: %s\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Fehler: Es wurde kein Argument angegeben; gültig sind [%s]\n"
+
+#: ../cli/src/connections.c:7118
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "Die Einstellung »%s« ist in der Verbindung nicht vorhanden.\n"
+
+#: ../cli/src/connections.c:7159
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Fehler: %s Eigenschaft, noch ist es ein Einstellungsname.\n"
+
+#: ../cli/src/connections.c:7184
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"Verwenden Sie zuerst »goto <Einstellung>«, oder »describe <Einstellung>."
+"<Eigenschaft>«\n"
+
+#: ../cli/src/connections.c:7225
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "Fehler: Ungültige Eigenschaft: %s, kein gültiger Einstellungsname.\n"
+
+#: ../cli/src/connections.c:7249
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "Fehler: »%s« Einstellung nicht vorhanden\n"
+
+#: ../cli/src/connections.c:7252
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Fehler: Unbekannte Einstellung: »%s«\n"
+
+#: ../cli/src/connections.c:7268
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Überprüfe Einstellung »%s«: %s\n"
+
+#: ../cli/src/connections.c:7275
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Verbindung überprüfen: %s\n"
+
+#: ../cli/src/connections.c:7293
+#, c-format
+msgid "Error: invalid argument '%s'\n"
+msgstr "Fehler: Ungültiges Argument »%s«\n"
+
+#: ../cli/src/connections.c:7327
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "Fehler: Speichern von »%s« (%s) ist fehlgeschlagen: (%d) %s\n"
+
+#: ../cli/src/connections.c:7335
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Verbindung »%s« (%s) erfolgreich gespeichert.\n"
+
+#: ../cli/src/connections.c:7336
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "Verbindung »%s« (%s) erfolgreich aktualisiert.\n"
+
+#: ../cli/src/connections.c:7370
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Fehler: Prüfung der Verbindung ist fehlgeschlagen: %s\n"
+
+#: ../cli/src/connections.c:7371
+msgid "(unknown error)"
+msgstr "(Unbekannter Fehler)"
+
+#: ../cli/src/connections.c:7392
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr ""
+"Fehler: Verbindung ist nicht gespeichert. Geben Sie zuerst »save« ein.\n"
+
+#: ../cli/src/connections.c:7396
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Fehler: Verbindung ist ungültig: %s\n"
+
+#: ../cli/src/connections.c:7407
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Fehler: Verbindung kann nicht aktiviert werden: %s.\n"
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr ""
+"Fehler: Aktivieren der Verbindung »%s« (%s) ist fehlgeschlagen: (%d) %s\n"
+
+#: ../cli/src/connections.c:7423
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Überwachen einer Verbindungsherstellung (drücken Sie eine beliebige Taste, "
+"um fortzusetzen)\n"
+
+#: ../cli/src/connections.c:7461
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Fehler: Statuszeile: %s\n"
+
+#: ../cli/src/connections.c:7469
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Fehler: Speicherbestätigung: %s\n"
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Fehler: ungültige Farbnummer: »%s«. Verwenden Sie <0-8>\n"
+
+#: ../cli/src/connections.c:7489
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Aktuelle nmcli-Konfiguration:\n"
+
+#: ../cli/src/connections.c:7497
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Ungültige Konfigurationsoption »%s«. Gültig sind [%s]\n"
+
+#: ../cli/src/connections.c:7729
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> Kommandozeilenbearbeitung ist nicht verfügbar. Betrachten Sie die "
+"Installation einer Bibliothek um diese Funktion zu aktivieren. <<<\n"
+"Unterstützte Bibliotheken sind:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7755
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr ""
+"Fehler: es kann nur entweder »id«, »uuid« oder »path« festgelegt werden."
+
+#: ../cli/src/connections.c:7767 ../cli/src/connections.c:7957
+#: ../cli/src/connections.c:7964
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Fehler: Unbekannte Verbindung »%s«."
+
+#: ../cli/src/connections.c:7782
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Warnung: bestehende Verbindung »%s« wird bearbeitet. Das Argment »type« wird "
+"ignoriert\n"
+
+#: ../cli/src/connections.c:7785
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Warnung: bestehende Verbindung »%s« wird bearbeitet. Das Argment »con-name« "
+"wird ignoriert\n"
+
+#: ../cli/src/connections.c:7799
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Gültige Verbindungstypen: %s\n"
+
+#: ../cli/src/connections.c:7801
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Fehler: Ungültiger Verbindungstyp: %s\n"
+
+#: ../cli/src/connections.c:7837
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli interaktiver Verbindungs-Editor |==="
+
+#: ../cli/src/connections.c:7840
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Bestehende Verbindung »%s« wird bearbeitet: »%s«"
+
+#: ../cli/src/connections.c:7842
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Neue »%s«-Verbindung hinzufügen"
+
+#: ../cli/src/connections.c:7844
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Tippen Sie »help« oder »?«, um verfügbare Befehle anzuzeigen."
+
+#: ../cli/src/connections.c:7846
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Tippen Sie »describe [<Einstellung>.<Eigenschaft>]« für eine detaillierte "
+"Eigenschaftenbeschreibung."
+
+#: ../cli/src/connections.c:7885
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Fehler: Ändern der Verbindung »%s« ist fehlgeschlagen: (%d) %s"
+
+#: ../cli/src/connections.c:7891
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Verbindung »%s« (%s) erfolgreich bearbeitet.\n"
+
+#: ../cli/src/connections.c:7932
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Fehler: Es wurden keine Argumente angegeben."
+
+#: ../cli/src/connections.c:7951
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Fehler: Verbindungskennung fehlt."
+
+#: ../cli/src/connections.c:7973 ../cli/src/connections.c:7986
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Fehler: Argument für Einstellung fehlt."
+
+#: ../cli/src/connections.c:7991
+#, c-format
+msgid "Error: value for '%s' is missing."
+msgstr "Fehler: Wert für »%s« fehlt."
+
+#: ../cli/src/connections.c:8009
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Fehler: Ungültiger Einstellungsname: »%s«."
+
+#: ../cli/src/connections.c:8017
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Fehler: Ungültige oder nicht zulässige Einstellung »%s«: %s."
+
+#: ../cli/src/connections.c:8038
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Fehler: Ungültige Eigenschaft »%s«: %s."
+
+#: ../cli/src/connections.c:8049
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Fehler: Ändern ist fehlgeschlagen %s.%s: %s."
+
+#: ../cli/src/connections.c:8067
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "Fehler: Entfernen eines Wertes von %s.%s: %s ist fehlgeschlagen."
+
+#: ../cli/src/connections.c:8103
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Fehler: Löschen der Verbindung fehlgeschlagen: %s"
+
+#: ../cli/src/connections.c:8174
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Fehler: Unbekannte Verbindung: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:8210
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr ""
+"Fehler: Unbekannte Verbindung(en) »%s« kann/können nicht gelöscht werden."
+
+#: ../cli/src/connections.c:8281
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "Datei »%s« konnte nicht geladen werden\n"
+
+#: ../cli/src/connections.c:8415
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Fehler: »%s« ist kein aktiver Verbindungsbefehl."
+
+#: ../cli/src/connections.c:8484 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Fehler: Systemeinstellungen konnten nicht ermittelt werden."
+
+#: ../cli/src/connections.c:8494
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr ""
+"Fehler: Verbindungen können nicht ermittelt werden: Der Einstellungsdienst "
+"wird nicht ausgeführt."
+
+#. 3
+#. 16
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "VERBINDUNG"
+
+#. 4
+#. 17
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "HERSTELLER"
#. 3
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUKT"
#. 4
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "TREIBER"
#. 5
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "TREIBER-VERSION"
#. 6
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:117
+#. 8
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:96 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "GRUND"
-#. 10
-#: ../cli/src/devices.c:118
+#. 11
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:119
+#. 12
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:120
+#. 13
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-VERWALTET"
-#. 14
-#: ../cli/src/devices.c:122
+#. 15
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-FEHLT"
-#. 15
-#: ../cli/src/devices.c:123
-msgid "CONNECTION"
-msgstr "VERBINDUNG"
+#. 0
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "VERFÃœGBARE-VERBINDUNG-PFADE"
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "VERFUEGBARE-VERBINDUNGEN"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
-msgstr "TRÄGERFREQUENZERKENNUNG"
+msgstr "TRÄGERFREQUENZERKENNUNG"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "GESCHWINDIGKEIT"
#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:135
msgid "CARRIER"
-msgstr "TRÄGERFREQUENZ"
+msgstr "TRÄGERFREQUENZ"
#. 0
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:565
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:573
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQUENZ"
#. 1
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:182
+#. 3
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODUS"
-#. 3
-#: ../cli/src/devices.c:183
+#. 4
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQUENZ"
-#. 4
-#: ../cli/src/devices.c:184
+#. 6
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:186
+#. 8
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SICHERHEIT"
-#. 7
-#: ../cli/src/devices.c:187
+#. 10
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-SCHALTER"
-#. 8
-#: ../cli/src/devices.c:188
+#. 11
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-SCHALTER"
-#. 10
-#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
-msgid "ACTIVE"
-msgstr "AKTIV"
+#. 14
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:227
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "Kennung"
-#: ../cli/src/devices.c:243
+#. 0
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "RESSOURCEN"
+
+#. 1
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WLAN-EIGENSCHAFTEN"
+
+#. 3
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "KABEL-EIGENSCHAFTEN"
+
+#. 4
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-EIGENSCHAFTEN"
+
+#. 10
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "GEBÃœNDELT"
+
+#. 11
+#: ../cli/src/devices.c:248 ../libnm-glib/nm-device.c:1832
+#: ../libnm-util/nm-connection.c:1303 ../tui/nm-editor-utils.c:227
+#: ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "VERBINDUNGEN"
+
+#: ../cli/src/devices.c:274
#, c-format
msgid ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Aufruf: nmcli dev { BEFEHL | help }\n"
+"Aufruf: nmcli Gerät { BEFEHL | help }\n"
"\n"
-" BEFEHL := { status | list | disconnect | wifi | wimax }\n"
+" BEFEHL := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" BEFEHL := { status | list | disconnect | wifi }\n"
+" BEFEHL := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <Schnittstelle>]\n"
-" disconnect iface <Schnittstelle> [--nowait] [--timeout <timeout>]\n"
+"\n"
+" show [<Schnittstelle>]\n"
+"\n"
+" connect <Schnittstelle>\n"
+"\n"
+" disconnect <Schnittstelle>\n"
+"\n"
" wifi [list [iface <Schnittstelle>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <Passwort>] [wep-key-type key|phrase] "
-"[iface <Schnittstelle>] [bssid <BSSID>] [name <Name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
+"[iface <Schnittstelle>]\n"
+" [bssid <BSSID>] [name <Name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <Schnittstelle>]\n"
+"\n"
" wimax [list [iface <Schnittstelle>] [nsp <Name>]]\n"
"\n"
-#: ../cli/src/devices.c:343
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli device status { help }\n"
+"\n"
+"Zeigt den Status für alle Geräte.\n"
+"Standardmäßig werden folgende Spalten angezeigt:\n"
+" DEVICE - Schnittstellenname\n"
+" TYPE - Gerätetyp\n"
+" STATE - Gerätestatus\n"
+" CONNECTION - Aktivierte Verbindungen auf dem Gerät\n"
+"Angezeigte Spalten können mithilfe der globalen Option »--fields« geändert "
+"werden.\n"
+"»status« ist der Standardbefehl, das heißt »nmcli device« ruft »nmcli device "
+"status« auf.\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli device show { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [<Schnittstellenname>]\n"
+"\n"
+"Zeigt Details des Geräts.\n"
+"Der Befehl listet alle Details für alle Geräte oder für ein angegebenes "
+"Gerät auf.\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli device connect { PARAMETER | help }\n"
+"\n"
+"PARAMETER := <Schnittstellenname>\n"
+"\n"
+"Verbindet das Gerät.\n"
+"NetworkManager versucht, eine geeignete Verbindung zu finden, die aktiviert "
+"wird.\n"
+"Dabei werden auch Verbindungen berücksichtigt, die nicht für eine "
+"automatische\n"
+"Verbindung konfiguriert sind.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli device disconnect { PARAMETER | help }\n"
+"\n"
+"PARAMETER := <Schnittstellenname>\n"
+"\n"
+"Trennt die Verbindung des Geräts.\n"
+"Der Befehl trennt die Verbindung des Geräts und hindert es daran, sich ohne\n"
+"Benutzereingriff weiterhin automatisch neu zu verbinden.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli device wifi { PARAMETER | help }\n"
+"\n"
+"Führt eine Operation auf Wi-Fi-Geräten durch.\n"
+"\n"
+"PARAMETER := [list [ifname <Schnittstellenname>] [bssid <BSSID>]]\n"
+"\n"
+"Listet verfügbare Wi-Fi-Zugangspunkte auf. Die Optionen »ifname« und "
+"»bssid«\n"
+"können dazu verwendet werden, um Zugangspunkte für eine bestimmte "
+"Schnittstelle\n"
+"oder mit einer bestimmten BSSID aufzulisten.\n"
+"\n"
+"PARAMETER := connect <(B)SSID> [password <Passwort>] [wep-key-type key|"
+"phrase] [ifname <Schnittstellenname>]\n"
+" [bssid <BSSID>] [name <Name>] [private yes|no]\n"
+"\n"
+"Verbindet mit einem Wi-Fi-Netzwerk, das anhand seiner SSID oder BSSID\n"
+"spezifiziert wird. Der Befehl erstellt eine neue Verbindung und aktiviert\n"
+"diese auf einem Gerät. Dieser Befehl entspricht dem Klicken auf eine SSID "
+"in\n"
+"einem GUI-Client. Der Befehl erstellt immer eine neue Verbindung und ist\n"
+"deshalb hauptsächlich nützlich zum Verbinden mit neuen Wi-Fi-Verbindungen.\n"
+"Falls eine Verbindung für das Netzwerk bereits existiert, ist es besser, "
+"das\n"
+"vorhandene Profil wie folgt aufzurufen: nmcli con up id <Name>. Beachten\n"
+"Sie, dass derzeit lediglich offene, WEP und WPA-PSK Netzwerke unterstützt "
+"werden.\n"
+"Es wird zudem vorausgesetzt, dass die IP-Konfiguration über DHCP bezogen "
+"wird.\n"
+"\n"
+"PARAMETER := rescan [[ifname] <Schnittstellenname>]\n"
+"\n"
+"Fordert den NetworkManager auf, sofort erneut nach verfügbaren\n"
+"Zugangspunkten zu suchen. NetworkManager sucht regelmäßig nach Wi-Fi-"
+"Netzwerken,\n"
+"doch in bestimmten Situationen kann es nützlich sein, diese Suche manuell\n"
+"anzustoßen. Beachten Sie, dass dieser Befehl die Zugangspunkte\n"
+"nicht anzeigt, benutzen Sie dazu »nmcli device wifi list«.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli device wimax { PARAMETER | help }\n"
+"\n"
+"Führt eine Operation auf WiMAX-Geräten durch.\n"
+"\n"
+"PARAMETER := [list [ifname <Schnittstellenname>] [nsp <Name>]]\n"
+"\n"
+"Listet verfügbare WiMAX NSPs auf. Die Optionen »ifname« und »nsp« können\n"
+"dazu verwendet werden, um Netzwerke für eine bestimmte Schnittstelle oder\n"
+"mit einem bestimmten NSP aufzulisten.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(keine)"
-#: ../cli/src/devices.c:399
+#: ../cli/src/devices.c:549
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:550
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:409
-msgid "Encrypted: "
-msgstr "Verschlüsselt: "
+#: ../cli/src/devices.c:569
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:414
-msgid "WEP "
-msgstr "WEP"
-
-#: ../cli/src/devices.c:416
-msgid "WPA "
-msgstr "WPA"
+#: ../cli/src/devices.c:578
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:418
-msgid "WPA2 "
-msgstr "WPA2"
-
-# Das ergibt z.B. WPA-Enterprise, klingt komisch mit »Unternehmen«
-#: ../cli/src/devices.c:421
-msgid "Enterprise "
-msgstr "Enterprise"
-
-#: ../cli/src/devices.c:430
+#: ../cli/src/devices.c:594
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:431
-msgid "Infrastructure"
-msgstr "Infrastuktur"
+#: ../cli/src/devices.c:595
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:467
+#: ../cli/src/devices.c:627
msgid "Home"
msgstr "Zu Hause"
-#: ../cli/src/devices.c:470
+#: ../cli/src/devices.c:630
msgid "Partner"
msgstr "Partner"
# CHECK
-#: ../cli/src/devices.c:473
+#: ../cli/src/devices.c:633
msgid "Roaming"
msgstr "Roaming"
-#: ../cli/src/devices.c:545
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Fehler: »Geräteliste«: %s"
+#: ../cli/src/devices.c:727
+msgid "Device details"
+msgstr "Geräteinformationen"
-#: ../cli/src/devices.c:547
+#: ../cli/src/devices.c:739
#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Fehler: »Geräteliste«: %s; erlaubte Felder: %s"
+msgid "Error: 'device show': %s"
+msgstr "Fehler: »device show«: %s"
-#: ../cli/src/devices.c:556
-msgid "Device details"
-msgstr "Geräteinformationen"
-
-#: ../cli/src/devices.c:601 ../cli/src/devices.c:604 ../cli/src/devices.c:1080
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:789 ../cli/src/devices.c:792 ../cli/src/devices.c:1339
+#: ../cli/src/devices.c:1482
msgid "(unknown)"
msgstr "(unbekannt)"
-#: ../cli/src/devices.c:613
-msgid "not connected"
-msgstr "nicht verbunden"
-
-#: ../cli/src/devices.c:640
+#: ../cli/src/devices.c:829
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:714
+#: ../cli/src/devices.c:915
msgid "on"
msgstr "an"
-#: ../cli/src/devices.c:714
+#: ../cli/src/devices.c:915
msgid "off"
msgstr "aus"
-#: ../cli/src/devices.c:922
+#: ../cli/src/devices.c:1190
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Fehler: »Gerätestatus«: %s"
+msgid "Error: 'device status': %s"
+msgstr "Fehler: »device status«: %s"
-#: ../cli/src/devices.c:924
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Fehler: »Gerätestatus«: %s; erlaubte Felder: %s"
-
-#: ../cli/src/devices.c:947
+#. Add headers
+#: ../cli/src/devices.c:1208
msgid "Status of devices"
msgstr "Status der Geräte"
-#: ../cli/src/devices.c:978
+#: ../cli/src/devices.c:1239
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Fehler: Argument »%s« fehlt."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Fehler: Ungültiger zusätzlicher Parameter »%s«."
-#: ../cli/src/devices.c:1019 ../cli/src/devices.c:1184
-#: ../cli/src/devices.c:1325 ../cli/src/devices.c:1972
+#: ../cli/src/devices.c:1267 ../cli/src/devices.c:1430
+#: ../cli/src/devices.c:1565 ../cli/src/devices.c:1704
+#: ../cli/src/devices.c:2448
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Fehler: Gerät »%s« wurde nicht gefunden."
-#: ../cli/src/devices.c:1042
+#: ../cli/src/devices.c:1322
#, c-format
-msgid "Success: Device '%s' successfully disconnected."
-msgstr "Erfolg: Gerät »%s« wurde erfolgreich getrennt."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "Gerät »%s« wurde erfolgreich mit »%s« aktiviert.\n"
-#: ../cli/src/devices.c:1077
+#: ../cli/src/devices.c:1338
#, c-format
-msgid "Error: Device '%s' (%s) disconnecting failed: %s"
-msgstr "Fehler: Trennung des Gerätes »%s« (%s) ist gescheitert: %s"
+msgid "Error: Device activation failed: %s"
+msgstr "Fehler: Aktivierung des Geräts ist gescheitert: %s"
-#: ../cli/src/devices.c:1090
+#: ../cli/src/devices.c:1346
#, c-format
-msgid "Device '%s' has been disconnected.\n"
-msgstr "Gerät »%s« wurde getrennt.\n"
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "Fehler: Aktivierung des Geräts ist gescheitert: Gerät war getrennt."
+
+#: ../cli/src/devices.c:1359
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "Gerät »%s« hat sich verbunden.\n"
+
+#: ../cli/src/devices.c:1385 ../cli/src/devices.c:1520
+msgid "Interface: "
+msgstr "Schnittstelle: "
-#: ../cli/src/devices.c:1153
+#: ../cli/src/devices.c:1389 ../cli/src/devices.c:1398
+#: ../cli/src/devices.c:1524 ../cli/src/devices.c:1533
#, c-format
-msgid "Error: iface has to be specified."
+msgid "Error: No interface specified."
msgstr "Fehler: Es muss eine Schnittstelle angegeben werden."
-#: ../cli/src/devices.c:1283
+#: ../cli/src/devices.c:1404 ../cli/src/devices.c:1539
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Fehler: »Geräte-WLAN«: %s"
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Fehler: Zusätzlicher Parameter nicht erlaubt: »%s«."
-#: ../cli/src/devices.c:1285
+#: ../cli/src/devices.c:1467
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Fehler: »Geräte-WLAN«: %s; erlaubte Felder: %s"
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Erfolg: Gerät »%s« wurde erfolgreich getrennt."
-#: ../cli/src/devices.c:1308
-msgid "WiFi scan list"
+#: ../cli/src/devices.c:1479
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Fehler: Trennung des Gerätes »%s« (%s) ist gescheitert: %s"
+
+#: ../cli/src/devices.c:1493
+#, c-format
+msgid "Device '%s' has been disconnected.\n"
+msgstr "Gerät »%s« wurde getrennt.\n"
+
+#: ../cli/src/devices.c:1636
+msgid "Wi-Fi scan list"
msgstr "Suchliste des WLAN"
-#: ../cli/src/devices.c:1345 ../cli/src/devices.c:1399
+#: ../cli/src/devices.c:1674
+#, c-format
+msgid "Error: 'device wifi': %s"
+msgstr "Fehler: »device wifi«: %s"
+
+#: ../cli/src/devices.c:1727 ../cli/src/devices.c:1796
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Fehler: Zugangspunkt mit der BSSID »%s« nicht gefunden."
-#: ../cli/src/devices.c:1362
+#: ../cli/src/devices.c:1751 ../cli/src/devices.c:2143
+#: ../cli/src/devices.c:2305
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "Fehler: Gerät »%s« ist kein WLAN-Gerät."
-#: ../cli/src/devices.c:1430 ../cli/src/devices.c:1476
+#: ../cli/src/devices.c:1833 ../cli/src/devices.c:1880
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr ""
"Verbindung mit der UUID »%s« wurde erstellt und auf dem Gerät »%s« "
"aktiviert\n"
-#: ../cli/src/devices.c:1435
+#: ../cli/src/devices.c:1837
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: (%d) %s."
-#: ../cli/src/devices.c:1460
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr ""
"Fehler: Neue Verbindung konnte nicht hinzugefügt und aktiviert werden: (%d) "
"%s"
-#: ../cli/src/devices.c:1468
+#: ../cli/src/devices.c:1870
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"Fehler: Neue Verbindung konnte nicht hinzugefügt und aktiviert werden: "
"Unbekannter Fehler"
-#: ../cli/src/devices.c:1612
+#: ../cli/src/devices.c:2025
+msgid "SSID or BSSID: "
+msgstr "SSID oder BSSID: "
+
+#: ../cli/src/devices.c:2030
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "Fehler: SSID oder BSSID fehlt."
-#: ../cli/src/devices.c:1635
+#: ../cli/src/devices.c:2054
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "Fehler: Der Wert »%s« des BSSID-Arguments ist keine gültige BSSID."
-#: ../cli/src/devices.c:1659
+#: ../cli/src/devices.c:2078
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1379,78 +3626,77 @@ msgstr ""
"Fehler: Wert des Arguments wep-key-type »%s« ist ungültig, verwenden Sie "
"stattdessen »key« oder »phrase«"
-#: ../cli/src/devices.c:1699
+#: ../cli/src/devices.c:2098
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Fehler: %s: %s."
+
+#: ../cli/src/devices.c:2113
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"Fehler: BSSID für die Verbindung (%s) entspricht nicht dem bssid-Argument "
"(%s)."
-#: ../cli/src/devices.c:1705
+#: ../cli/src/devices.c:2119
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "Fehler: Parameter »%s« ist weder SSID noch BSSID."
-#: ../cli/src/devices.c:1734
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "Fehler: Gerät »%s« ist kein WLAN-Gerät."
-
-#: ../cli/src/devices.c:1736
+#: ../cli/src/devices.c:2145 ../cli/src/devices.c:2307
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "Fehler: Es wurde kein WLAN-Gerät gefunden."
-#: ../cli/src/devices.c:1754
+#: ../cli/src/devices.c:2163
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "Fehler: Es wurde kein Netzwerk mit SSID »%s« gefunden."
-#: ../cli/src/devices.c:1756
+#: ../cli/src/devices.c:2165
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "Fehler: Es wurde kein Zugangspunkt mit BSSID »%s« gefunden."
-#: ../cli/src/devices.c:1854
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Fehler: Der Befehl »%s« für »dev wifi« ist ungültig."
-
-#: ../cli/src/devices.c:1930
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Fehler: »Gerät Wimax«: %s"
+#: ../cli/src/devices.c:2204
+msgid "Password: "
+msgstr "Passwort: "
-#: ../cli/src/devices.c:1932
+#: ../cli/src/devices.c:2333
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Fehler: »Gerät Wimax«: %s; erlaubte Felder: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Fehler: Der »device wifi«-Befehl »%s« ist ungültig."
-#: ../cli/src/devices.c:1955
+#: ../cli/src/devices.c:2380
msgid "WiMAX NSP list"
msgstr "WiMAX NSP-Liste"
-#: ../cli/src/devices.c:1992
+#: ../cli/src/devices.c:2417
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Fehler: »device wimax«: %s"
+
+#: ../cli/src/devices.c:2471
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Fehler: NSP namens »%s« wurde nicht gefunden."
-#: ../cli/src/devices.c:2003
+#: ../cli/src/devices.c:2484
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Fehler: Gerät »%s« ist kein WiMAX-Gerät."
-#: ../cli/src/devices.c:2034
+#: ../cli/src/devices.c:2522
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Fehler: Zugangspunkt mit NSP »%s« nicht gefunden."
-#: ../cli/src/devices.c:2061
+#: ../cli/src/devices.c:2554
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Fehler: Der Befehl »%s« für »dev wimax« ist ungültig."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Fehler: Der »device wimax«-Befehl für »%s« ist ungültig."
-#: ../cli/src/devices.c:2111
+#: ../cli/src/devices.c:2633
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Fehler: Der Befehl »%s« für »dev« ist ungültig."
@@ -1466,246 +3712,510 @@ msgstr "VERSION"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NETZ-AKTIVIERT"
+msgid "STARTUP"
+msgstr "STARTEN"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WLAN-HARDWARE"
+msgid "CONNECTIVITY"
+msgstr "KONNEKTIVITÄT"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WLAN"
+msgid "NETWORKING"
+msgstr "NETZWERK"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WLAN-HW"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WLAN"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "BEFUGNIS"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "WERT"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "STUFE"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMÄNEN"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"Aufruf: nmcli nm { BEFEHL | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" BEFEHL := { status | permissions | enable | sleep | wifi | wwan | wimax }\n"
+msgstr ""
+"Aufruf: nmcli general { BEFEHL | help }\n"
"\n"
-" BEFEHL := { status | permissions | enable | sleep | wifi | wwan }\n"
+" BEFEHL := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<Rechnername>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <Protokollstufe>] [domains <Protokoll-Domänen>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli general status { help }\n"
+"\n"
+"Zeigt den Gesamtstatus vom NetworkManager.\n"
+"»status« ist die Standardaktion, das heißt »nmcli gen« ruft »nmcli gen "
+"status« auf\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli general hostname { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [<Rechnername>]\n"
+"\n"
+"Ruft den System-Hostnamen ab oder legt diesen persistent fest.\n"
+"Ohne Parameter wird der derzeit konfigurierte Hostname angezeigt. Wenn\n"
+"Sie einen Hostnamen übergeben, legt NetworkManager diesen als neuen\n"
+"persistenten System-Hostnamen fest.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli general permissions { help }\n"
+"\n"
+"Zeigt die Aufrufberechtigungen für authentifizierte Operationen.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli general logging { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [level <Protokoll-Stufe>] [domains <Protokoll-Domänen>]\n"
+"\n"
+"Ruft die NetworkManager-Protokoll-Stufe und -Domänen ab bzw.\n"
+"ändert diese. Ohne Parameter werden die derzeitige Protokoll-Stufe\n"
+"und -Domänen angezeigt. Um den Protokollstatus zu ändern,\n"
+"geben Sie die Stufe und/oder die Domäne an. Auf der Handbuchseite\n"
+"finden Sie eine Liste der möglichen Protokoll-Domänen.\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli networking { BEFEHL | help }\n"
+"\n"
+" BEFEHL := { on | off | connectivity }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli networking on { help }\n"
+"\n"
+"Netzwerkverbindungen einschalten.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli networking off { help }\n"
+"\n"
+"Netzwerkverbindungen ausschalten.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli networking connectivity { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [check]\n"
+"\n"
+"Ruft den Verbindungsstatus des Netzwerks ab.\n"
+"Mit dem optionalen »check«-Parameter prüft NetworkManager den\n"
+"Verbindungsstatus erneut.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli radio { BEFEHL | help }\n"
+"\n"
+" BEFEHL := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+" BEFEHL := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli radio all { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [on | off]\n"
+"\n"
+"Ruft den Status aller Funkschalter ab oder schaltet diese an/aus.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli radio wifi { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [on | off]\n"
+"\n"
+"Ruft den Status des Wi-Fi-Funkschalters ab oder schaltet diesen an/aus.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli radio wwan { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [on | off]\n"
+"\n"
+"Ruft den Status des mobilen Breitbandschalters ab oder schaltet diesen an/"
+"aus.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli radio wimax { PARAMETER | help }\n"
+"\n"
+"PARAMETER := [on | off]\n"
+"\n"
+"Ruft den Status des WiMAX-Funkschalters ab oder schaltet diesen an/aus.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "schlafend"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "wird verbunden"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "verbunden (nur lokal)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "verbunden (nur Gelände)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "wird getrennt"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Fehler: »NM-Status«: %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "Portal"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "begrenzt"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "vollständig"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Fehler: »NM-Status«: %s; erlaubte Felder: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Fehler: Nur die folgenden Felder sind erlaubt: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "aktiviert"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "deaktiviert"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "Status von NetworkManager"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "wird ausgeführt"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "wird nicht ausgeführt"
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "wird gestartet"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "gestartet"
+
# Könnte auch Legitimierung sein. Der kontext entscheidet. -ck
# Sieht entweder nach lausigen Englischkenntnissen oder nach einem irrtümlicherweise als übersetzbar markierten String aus.
-#: ../cli/src/network-manager.c:271
-#, fuzzy
-#| msgid "auto"
+#: ../cli/src/network-manager.c:446
msgid "auth"
-msgstr "auth"
-
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "Fehler: »nm permissions«: %s"
+msgstr "Legitimierung"
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "Fehler: »nm permissions«: %s; erlaubte Felder: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Fehler: »general permissions«: %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "Befugnisse von NetworkManager"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Fehler: Verbindung zum Systembus konnte nicht hergestellt werden: %s"
+msgid "Error: 'general logging': %s"
+msgstr "Fehler: »general logging«: %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Fehler: D-Bus-Objektproxy konnte nicht erstellt werden."
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "Protokollierung in NetworkManager"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Fehler beim schlafen gehen: %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "Fehler: Festlegen des Rechnernamens schlug fehl: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"Fehler: Der Wert »%s« für »--fields« ist hier nicht gültig; erlaubte Felder: "
-"%s"
+msgid "Error: access denied to set logging; %s"
+msgstr "Fehler: Zugriff verweigert um die Protokollierung einzustellen: %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "Netzwerk aktiviert"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "Fehler: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Fehler: Ungültiger »aktiviert«-Parameter: »%s«; Verwenden Sie »true« oder "
-"»false«."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Fehler: Der allgemeine Befehl »%s« ist ungültig."
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"Fehler: Der Schlafzustand-Status wurde von NetworkManager nicht exportiert."
+"Fehler: Der Wert »%s« für »--fields« ist hier nicht gültig (erlaubtes Feld: "
+"%s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Fehler: Ungültiger »schlafend«-Parameter: »%s«; Verwenden Sie »true« oder "
-"»false«."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Fehler: Ungültiger »%s«-Parameter: »%s« (verwenden Sie ein/aus)."
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WLAN aktiviert"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "Konnektivität"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Fehler: Ungültiger »wifi«-Parameter: »%s«."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "Netzwerk"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN aktiviert"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Fehler: Der »networking connectivity«-Befehl »%s« ist ungültig."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Fehler: Ungültiger »wwan«-Parameter: »%s«."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Fehler: Der »networking«-Befehl »%s« ist ungültig."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX aktiviert"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Funkschalter"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Fehler: Ungültiger »wimax«-Parameter: »%s«."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "WLAN-Funkschalter"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN-Funkschalter"
+
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX-Funkschalter"
-#: ../cli/src/network-manager.c:585
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Fehler: Der Befehl »%s« für »nm« ist ungültig."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Fehler: Der »radio«-Befehl »%s« ist ungültig."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:82
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1719,251 +4229,937 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
"Aufruf: %s [OPTIONEN] OBJEKT { BEFEHL | help }\n"
"\n"
"OPTIONEN\n"
" -t[erse] Kurze Ausgabe\n"
-" -p[retty] Hübsche Ausgabe\n"
+" -p[retty] Hübsche Ausgabe\n"
" -m[ode] tabular|multiline Ausgabemodus\n"
-" -f[ields] <Feld1,Feld2,…>|all|common Ausgabefelder angeben\n"
+" -f[ields] <Feld1,Feld2,…>|all|common Ausgabefelder angeben\n"
" -e[scape] yes|no Escape-Spaltenseparator in "
"Werten\n"
" -n[ocheck] Nicht die Versionen von nmcli "
"und NetworkManager prüfen\n"
+" -a[sk] Nach fehlenden Parametern "
+"fragen\n"
+" -w[ait] <Sekunden> Zeitablauf beim Warten auf "
+"Abschluss des Vorgangs festlegen\n"
" -v[ersion] Programmversion anzeigen\n"
" -h[elp] Diese Hilfe ausgeben\n"
"\n"
"OBJEKT\n"
-" nm Status von NetworkManager\n"
-" con Verbindungen von NetworkManager\n"
-" dev Von NetworkManager verwaltete Verbindungen\n"
+" g[eneral] Allgemeiner Status und Vorgänge von NetworkManager\n"
+" n[etworking] Allgemeine Netzwerksteuerung\n"
+" r[adio] Funkschalter von NetworkManager\n"
+" c[onnection] Verbindungen von NetworkManager\n"
+" d[evice] Von NetworkManager verwaltete Geräte\n"
"\n"
-#: ../cli/src/nmcli.c:121
+#: ../cli/src/nmcli.c:136
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Fehler: Objekt »%s« ist unbekannt, versuchen Sie »nmcli help«."
-#: ../cli/src/nmcli.c:151
+#: ../cli/src/nmcli.c:166
#, c-format
msgid "Error: Option '--terse' is specified the second time."
-msgstr "Fehler: Option »---terse« wurde zweimal gesetzt."
+msgstr "Fehler: Option »--terse« wurde zweimal gesetzt."
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:171
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Fehler: Option »--terse« schließt »--pretty« aus."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:179
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Fehler: Option »--pretty« wurde zweimal gesetzt."
-#: ../cli/src/nmcli.c:169
+#: ../cli/src/nmcli.c:184
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Fehler: Option »--pretty« schließt »--terse« aus."
-#: ../cli/src/nmcli.c:179 ../cli/src/nmcli.c:195
+#: ../cli/src/nmcli.c:194 ../cli/src/nmcli.c:210 ../cli/src/nmcli.c:239
#, c-format
msgid "Error: missing argument for '%s' option."
-msgstr "Fehler: Fehlendes Argument für die Option »%s«."
+msgstr "Fehler: Fehlendes Argument für die Option »%s«."
-#: ../cli/src/nmcli.c:188 ../cli/src/nmcli.c:204
+#: ../cli/src/nmcli.c:203 ../cli/src/nmcli.c:219
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
-msgstr "Fehler: »%s« ist kein gültiges Argument für die Option »%s«."
+msgstr "Fehler: »%s« ist kein gültiges Argument für die Option »%s«."
-#: ../cli/src/nmcli.c:211
+#: ../cli/src/nmcli.c:226
#, c-format
msgid "Error: fields for '%s' options are missing."
-msgstr "Fehler: Felder für die Option »%s« fehlen."
+msgstr "Fehler: Felder für die Option »%s« fehlen."
-#: ../cli/src/nmcli.c:219
+#: ../cli/src/nmcli.c:244
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Fehler: »%s« ist kein gültiger Zeitablauf für die Option »%s«."
+
+#: ../cli/src/nmcli.c:251
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli-Werkzeug, Version %s\n"
-#: ../cli/src/nmcli.c:225
+#: ../cli/src/nmcli.c:257
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Fehler: Option »%s« ist unbekannt, versuchen Sie »nmcli -help«."
-#: ../cli/src/nmcli.c:244
+#: ../cli/src/nmcli.c:292
+#, c-format
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"Fehler: nmcli mit Signal %d beendet."
+
+#: ../cli/src/nmcli.c:322 ../src/main.c:128
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "Fehler beim Festlegen der Signalmaske: %d"
+
+#: ../cli/src/nmcli.c:329 ../src/main.c:137
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Signal %d wurde empfangen, wird beendet …"
+msgid "Failed to create signal handling thread: %d"
+msgstr "Erstellen des Threads für die Signalbehandlung schlug fehl: %d"
-#: ../cli/src/nmcli.c:269
+#: ../cli/src/nmcli.c:342 ../test/nm-online.c:166
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Fehler: NMClient-Objekt konnte nicht erstellt werden."
-#: ../cli/src/nmcli.c:285
+#: ../cli/src/nmcli.c:358
msgid "Success"
msgstr "Erfolg"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:666
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (HEX-ASCII-Schlüssel)"
+msgid "%d (key)"
+msgstr "%d (Schlüssel)"
-#: ../cli/src/settings.c:529
+#: ../cli/src/settings.c:668
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit-Passphrase)"
+msgid "%d (passphrase)"
+msgstr "%d (Passphrase)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (unbekannt)"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (unbekannt)"
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "jede,"
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz,"
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz,"
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz,"
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz,"
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:588
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:590
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (KEINES)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (deaktiviert)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (aktiviert, öffentliche IP bevorzugen)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (aktiviert, temporäre IP bevorzugen)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (keine)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "Agent-Besitz, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "nicht gespeichert,"
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "nicht notwendig, "
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (deaktiviert)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "aktiviert, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "sichtbar, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "willig, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (nicht gesetzt)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "auto"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "Vorgabe"
+
+#: ../cli/src/settings.c:1621
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Möchen Sie auch »%s« auf »%s« setzen? [Ja]: "
+
+#: ../cli/src/settings.c:1623
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Möchen Sie auch »%s« löschen? [Ja]: "
+
+#: ../cli/src/settings.c:1784
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+
+#: ../cli/src/settings.c:1866 ../cli/src/settings.c:2146
+#: ../cli/src/settings.c:4204
+#, c-format
+msgid "'%s' is not valid"
+msgstr "»%s» ist ungültig"
+
+#: ../cli/src/settings.c:1889
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "»%d« ist ungültig. Verwenden Sie <%d-%d>"
+
+#: ../cli/src/settings.c:1911
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "»%u« ist ungültig. Verwenden Sie <%d-%d>"
+
+#: ../cli/src/settings.c:1977
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "»%s« ist ungültig. Verwenden Sie <Option>=<Wert>"
+
+#: ../cli/src/settings.c:2011
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "Index »%s« ist ungültig"
+
+#: ../cli/src/settings.c:2016 ../cli/src/settings.c:2041
+msgid "no item to remove"
+msgstr "Kein Eintrag zum Entfernen vorhanden"
+
+#: ../cli/src/settings.c:2020 ../cli/src/settings.c:2045
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "Index »%d« ist außerhalb des Bereichs <0-%d>"
+
+#: ../cli/src/settings.c:2060
+#, c-format
+msgid "invalid option '%s'"
+msgstr "Ungültige Option »%s«"
+
+#: ../cli/src/settings.c:2062
+msgid "missing option"
+msgstr "fehlende Option"
+
+#: ../cli/src/settings.c:2092 ../cli/src/settings.c:2112
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "»%s« ist kein gültiger Wert (oder außerhalb des gültigen Bereichs)"
+
+#: ../cli/src/settings.c:2166
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "»%s« ist keine gültige Ethernet MAC-Adresse"
+
+#: ../cli/src/settings.c:2192 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:830
+#: ../libnm-util/nm-setting-vlan.c:548
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "»%s« ist kein gültiger Schnittstellenname"
+
+#: ../cli/src/settings.c:2210 ../cli/src/settings.c:3593
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "»%s« ist keine Zahl"
+
+#: ../cli/src/settings.c:2262
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "»%s« ist kein gültiger hexadezimaler Wert"
+
+#: ../cli/src/settings.c:2292
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "»%s« ist keine gültige MAC-Adresse"
+
+#: ../cli/src/settings.c:2329 ../libnm-util/nm-setting-connection.c:793
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "»%s» ist keine gültige UUID"
+
+#: ../cli/src/settings.c:2396
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "die Eigenschaft enthält nicht die Berechtigung »%s«"
+
+#: ../cli/src/settings.c:2408
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"Geben Sie eine Liste mit Benutzerberechtigungen ein. Es ist eine formatierte "
+"Liste von Benutzernamen:\n"
+" [user:]<Benutzername 1>, [user:]<Benutzername 2>, …\n"
+"Die Objekte dürfen durch Kommata oder Leerzeichen getrennt sein.\n"
+"\n"
+"Beispiel: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2427
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr ""
+"»%s« ist kein gültiger Master; verwenden Sie einen Interfacenamen (ifname) "
+"oder eine Verbindungskennung (UUID)"
+
+#: ../cli/src/settings.c:2471
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr ""
+
+#: ../cli/src/settings.c:2476
+#, c-format
+msgid "'%s' is not a name of any exiting profile"
+msgstr "»%s« ist kein Name eines bestehenden Profils"
+
+#: ../cli/src/settings.c:2502
+#, c-format
+msgid "the value '%s' is not a valid UUID"
+msgstr "Der Wert »%s» ist keine gültige UUID"
+
+#: ../cli/src/settings.c:2509
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "die Eigenschaft enthält nicht die UUID »%s«"
+
+#: ../cli/src/settings.c:2521
+msgid ""
+"Enter secondary connections that should be activated when this connection "
+"is\n"
+"activated. Connections can be specified either by UUID or ID (name). nmcli\n"
+"transparently translates names to UUIDs. Note that NetworkManager only "
+"supports\n"
+"VPNs as secondary connections at the moment.\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+msgstr ""
+
+#: ../cli/src/settings.c:2598
+msgid "private key password not provided"
+msgstr "Passwort für privaten Schlüssel nicht angegeben"
+
+#: ../cli/src/settings.c:2625
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "Die Eigenschaft enthält nicht die EAP-Methode »%s«"
+
+#: ../cli/src/settings.c:2650
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr ""
+
+#: ../cli/src/settings.c:2679
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr ""
+
+#: ../cli/src/settings.c:2705
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"Geben Sie den Pfad zu einem privaten Schlüssel und das Schlüsselpasswort\n"
+"ein (wenn noch nicht festgelegt):\n"
+" <Dateipfad> [<Passwort>]\n"
+"Beispiel: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2775
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"Geben sie Bytes als eine Liste von Hexadezimalen Werten an.\n"
+"Zwei Formate sind möglich:\n"
+"(a) Eine Zeichenkette mit hexadezimalen Zeichen, wobei jeweils zwei Zeichen "
+"einem Byte entsprechen\n"
+"(b) Eine Leerzeichen-getrennte Liste von Bytes, in hexadezimalen Zeichen "
+"(ein führender »0x« / »0X« Präfix bzw. eine führende Null sind optional).\n"
+"\n"
+"Beispiele: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2878
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"Geben Sie eine Liste von Bündelungsoptionen in folgendem Format ein:\n"
+" option = <Wert>, option = <Wert>,... \n"
+"Gültige Optionen sind: %s\n"
+"»mode« kann als ein Name oder eine Nummer angegeben werden:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Beispiel: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2919
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "»%s« ist keine gültige InfiniBand MAC-Adresse"
+
+#: ../cli/src/settings.c:2957
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "»%s« ist kein gültiger IBoIP P_Key"
+
+#: ../cli/src/settings.c:3025 ../cli/src/settings.c:3366
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "die Eigenschaft enthält nicht den DNS-Server »%s«"
+
+#: ../cli/src/settings.c:3037
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"Geben Sie eine Liste von DNS-Servern im IPv4-Format ein.\n"
+"\n"
+"Beispiel: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:3073 ../cli/src/settings.c:3420
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "die Eigenschaft enthält nicht die Suchdomäne »%s«"
+
+#: ../cli/src/settings.c:3093 ../cli/src/settings.c:3440
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "»%s« ist ungültig (verwenden Sie ip/[prefix] [gateway])"
+
+#: ../cli/src/settings.c:3142 ../cli/src/settings.c:3488
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "die Eigenschaft enthält nicht die IP-Adresse »%s«"
+
+#: ../cli/src/settings.c:3155
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"Geben Sie eine Liste von IPv4-Adressen nach folgenden Format an:\n"
+" IP[/Präfix] [Gateway], IP[/Präfix] [Gateway], …\n"
+"Ein fehlendes Präfix wird mit 32 angenommen.\n"
+"\n"
+"Beispiel: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:3206
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "»%s« ist ungültig (verwenden Sie ip/[prefix] next-hop [Metrik])"
+
+#: ../cli/src/settings.c:3254 ../cli/src/settings.c:3565
+#, c-format
+msgid "the property doesn't contain route '%s'"
+msgstr "Die Eigenschaft enthält nicht die Route »%s«"
+
+#: ../cli/src/settings.c:3267
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"Geben Sie eine Liste von IPv4-Routen nach folgendem Format ein:\n"
+" ip/[Präfix] next-hop [Metrik],... \n"
+"Fehlendes Präfix wird als Präfix 32 angenommen.\n"
+"Fehlende Metrik wird als Metrik 0 angenommen.\n"
+"\n"
+"Beispiel: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3378
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"Geben Sie eine Liste von DNS-Servern im IPv6-Format ein. Wenn die IPv6-"
+"Konfigurationsmethode auf »automatisch« gestellt ist, werden diese DNS-"
+"Server an jene der automatischen Konfiguration angefügt. DNS-Server können "
+"in »gemeinsamen« oder »Link-Lokal« IPv6 Konfigurationen nicht verwendet "
+"werden. In allen anderen IPv6 Konfigurationen werden nur diese DNS-Server "
+"für diese Verbindung verwendet.\n"
+"\n"
+"Beispiel: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3501
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"Geben Sie eine Liste von IPv6-Adressen nach folgenden Format an:\n"
+" IP[/Präfix] [Gateway], IP[/Präfix] [Gateway], …\n"
+"Ein fehlendes Präfix wird als 128 angenommen.\n"
+"\n"
+"Beispiel: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3517
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"»%s« ist ungültig (verwenden Sie <dest IP>/prefix <next-hop IP> [Metrik])"
+
+#: ../cli/src/settings.c:3578
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"Geben Sie eine Liste von IPv6-Routen nach folgendem Format ein:\n"
+" ip/[Präfix] next-hop [Metrik],... \n"
+"Fehlendes Präfix wird als Präfix 128 angenommen.\n"
+"Fehlende Metrik wird als Metrik 0 angenommen.\n"
+"\n"
+"Beispiel: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3600
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "»%s« ist ungültig. Verwenden Sie 0, 1 oder 2"
+
+#: ../cli/src/settings.c:3617
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "»%s« ist kein gültiger Kanal. Verwenden Sie <1-13>"
+
+#: ../cli/src/settings.c:3638
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "»%s« ist ungültig. Verwenden Sie [e, o, n]"
+
+#: ../cli/src/settings.c:3666
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli akzeptiert sowohl direkte JSON-Konfigurationsdaten als auch den Namen "
+"einer Datei, die die Konfiguration enthält. In letzterem Fall wird die Datei "
+"gelesen und die Inhalte werden in diese Eigenschaft übertragen.\n"
+"\n"
+"Beispiele: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3706
+msgid "no priority to remove"
+msgstr "Keine Priorität zum Entfernen"
+
+#: ../cli/src/settings.c:3710
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "Index »%d« ist außerhalb des Bereichs <0-%d>"
+
+#: ../cli/src/settings.c:3749
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+
+#: ../cli/src/settings.c:3756
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "Die Eigenschaft enthält nicht die Abbildung »%s«"
+
+#: ../cli/src/settings.c:3865 ../cli/src/settings.c:4033
+#: ../libnm-util/nm-setting-wired.c:651
+#: ../libnm-util/nm-setting-wireless.c:843
+#: ../libnm-util/nm-setting-wireless.c:857
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "»%s« ist keine gültige MAC-Adresse"
+
+#: ../cli/src/settings.c:3871 ../cli/src/settings.c:4039
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "die Eigenschaft enthält nicht die MAC-Adresse »%s«"
+
+#: ../cli/src/settings.c:3890
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "»%s« ist ungültig. 3 Zeichenketten müssen angegeben werden"
+
+#: ../cli/src/settings.c:3909
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"Geben Sie eine Liste von drei Kanälen an (durch Komma oder Leerzeichen "
+"getrennt).\n"
+"\n"
+"Beispiel: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3959
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"Geben Sie eine List von S/390-Optionen wie folgt an:\n"
+" Option = <Wert>, Option = <Wert>,… \n"
+"Mögliche Optionen sind: %s\n"
+
+#: ../cli/src/settings.c:4005
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "»%s« ist kein gültiger Kanal"
+
+#: ../cli/src/settings.c:4011
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "»%ld« ist kein gültiger Kanal"
+
+#: ../cli/src/settings.c:4098 ../cli/src/settings.c:4136
+#: ../cli/src/settings.c:4174
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "die Eigenschaft enthält nicht das Protokoll »%s«"
+
+#: ../cli/src/settings.c:4213
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+
+#: ../cli/src/settings.c:4221
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "Der WEP-Schlüssel ist vermutlich »%s«\n"
+
+#: ../cli/src/settings.c:4223
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "Der WEP-Schlüsselindex wurde auf »%d« gesetzt\n"
+
+#: ../cli/src/settings.c:4246
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "»%s« nicht innerhalb [0 (unbekannt), 1 (Schlüssel), 2 (Passphrase)]"
+
+#: ../cli/src/settings.c:4262 ../cli/src/settings.c:4265
+#: ../cli/src/settings.c:4268 ../cli/src/settings.c:4271
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+
+#: ../cli/src/settings.c:4284
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"Geben Sie den WEP-Schlüsseltyp ein. Gültige Werte sind: 0 oder "
+"»unknown« (unbekannt), 1 oder »key« (Schlüssel) und 2 oder "
+"»passphrase« (Passwort).\n"
+
+#: ../cli/src/settings.c:4297
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "»%s« ist kein gültiger PSK"
+
+#: ../cli/src/settings.c:4341
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "»%s« ist kein gültiges DCB-Flag"
+
+#: ../cli/src/settings.c:4364
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "»%s« ist keine gültige DCB-Applikationspriorität"
+
+#: ../cli/src/settings.c:4390
+msgid "must contain 8 comma-separated numbers"
+msgstr "muss 8 mit Kommata getrennte Zahlen enthalten"
+
+#: ../cli/src/settings.c:4407
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "»%s« ist keine Zahl zwischen 0 und %u (einschließlich) oder %u"
+
+#: ../cli/src/settings.c:4410
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "»%s« ist keine Zahl zwischen 0 und %u (einschließlich)"
+
+#: ../cli/src/settings.c:4432
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"Warnung: Die Änderungen wirken sich erst aus wenn »%s« 1 enthält "
+"(aktiviert)\n"
+"\n"
+
+#: ../cli/src/settings.c:4485
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "Die Prozentzahlen der Bandbreiten müssen in Summe 100%% ergeben"
+
+#: ../cli/src/settings.c:6163
+msgid "don't know how to get the property value"
+msgstr "Unbekannt, wie der Eigenschaftswert ermittelt wird"
+
+#: ../cli/src/settings.c:6216 ../cli/src/settings.c:6256
+msgid "the property can't be changed"
+msgstr "Die Einstellung konnte nicht geändert werden"
+
+#: ../cli/src/settings.c:6360
+msgid "[NM property description]"
+msgstr "[NM Eigenschaft-Beschreibung]"
+
+#: ../cli/src/settings.c:6366
+msgid "[nmcli specific description]"
+msgstr "[nmcli-spezifische Beschreibung]"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Fehler: Ein Wert ist für den Parameter »%s« notwendig."
+
+#: ../cli/src/utils.c:153
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Fehler: Parameter »%s« wurde erwartet, aber »%s« geliefert."
+
+#: ../cli/src/utils.c:156
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Fehler: Unerwarteter Parameter »%s«."
+
+#: ../cli/src/utils.c:206
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "Fehler beim Umwandeln der IPv4-Adresse »0x%X« in eine Textform"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:234
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "Fehler beim Umwandeln der IPv6-Adresse »%s« in eine Textform"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:406
+#, fuzzy, c-format
+#| msgid "'%s' is ambiguous (%s x %s)"
+msgid "'%s' is ambiguous (on x off)"
+msgstr "»%s« ist mehrdeutig (%s x %s)"
+
+#: ../cli/src/utils.c:416
#, c-format
-msgid "field '%s' has to be alone"
-msgstr "Feld »%s« muss allein stehen"
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "»%s« ist ungültig. Verwenden Sie [%s] oder [%s]."
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:498
#, c-format
-msgid "invalid field '%s'"
-msgstr "ungültiges Feld »%s«"
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "»%s« ist mehrdeutig (%s x %s)"
-#: ../cli/src/utils.c:254
-msgid "Option '--terse' requires specifying '--fields'"
-msgstr "Option »--terse« benötigt die Angabe von »--fields«"
+#: ../cli/src/utils.c:510
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "Fehlender Name, versuchen Sie einen von [%s]"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:727
#, c-format
-msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "Option »--terse« benötigt bestimmte »--fields«-Werte, nicht »%s«"
+msgid "field '%s' has to be alone"
+msgstr "Feld »%s« muss allein stehen"
-#: ../cli/src/utils.c:468
+#: ../cli/src/utils.c:730
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"Fehler: D-Bus-Objektproxy konnte nicht für org.freedesktop.DBus erstellt "
-"werden."
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "Ungültiges Feld »%s«; erlaubte Felder: %s"
+
+#: ../cli/src/utils.c:787
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Option »--terse« benötigt die Angabe von »--fields«"
-#: ../cli/src/utils.c:476
+#: ../cli/src/utils.c:791
#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Fehler: Anfrage NameHasOwner ist gescheitert: %s"
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Option »--terse« benötigt bestimmte »--fields«-Werte, nicht »%s«"
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1110
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1972,7 +5168,7 @@ msgstr ""
"Warnung: Die Versionen von nmcli (%s) und NetworkManager (%s) stimmen nicht "
"überein. Verwenden Sie »--nocheck«, um diese Warnung zu unterdrücken.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1119
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1982,6 +5178,69 @@ msgstr ""
"überein. Eine Ausführung kann mit »--nocheck« erzwungen werden, aber die "
"Resultate sind unvorhersehbar."
+#: ../libnm-glib/nm-device.c:1816
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1818
+msgid "OLPC Mesh"
+msgstr "OLPC-Mesh"
+
+#: ../libnm-glib/nm-device.c:1820
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../libnm-glib/nm-device.c:1822 ../tui/nm-editor-utils.c:182
+msgid "Mobile Broadband"
+msgstr "Mobiles Breitband"
+
+#: ../libnm-glib/nm-device.c:1826 ../libnm-util/nm-connection.c:1297
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4286 ../tui/nm-editor-utils.c:200
+msgid "Bond"
+msgstr "Gebündelt"
+
+#: ../libnm-glib/nm-device.c:1828 ../libnm-util/nm-connection.c:1299
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4397 ../tui/nm-editor-utils.c:218
+msgid "Team"
+msgstr "Bündelung"
+
+#: ../libnm-glib/nm-device.c:1830 ../libnm-util/nm-connection.c:1301
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4581 ../tui/nm-editor-utils.c:209
+msgid "Bridge"
+msgstr "Brücke"
+
+#: ../libnm-glib/nm-device.c:1834
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1862
+msgid "Wired"
+msgstr "Kabelgebunden"
+
+#: ../libnm-glib/nm-device.c:1893
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1895
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../libnm-glib/nm-device.c:1991 ../libnm-glib/nm-device.c:2010
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:151
+msgid "Disconnected by D-Bus"
+msgstr "Durch D-Bus getrennt"
+
#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -1992,119 +5251,87 @@ msgstr "PEM-Schlüsseldatei hat kein abschließendes Tag »%s«."
msgid "Doesn't look like a PEM private key file."
msgstr "Das sieht nicht nach einer privaten PEM-Schlüsseldatei aus."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Nicht genügend freier Speicher zum Speichern der PEM-Datendatei."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Fehlerhafte PEM-Datei: Proc-Type ist nicht das erste Tag."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Fehlerhafte PEM-Datei: unbekannter Proc-Type-Tag »%s«."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Fehlerhafte PEM-Datei: DEK-Info ist nicht das zweite Tag."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Fehlerhafte PEM-Datei: kein IV im DEK-Info-Tag gefunden."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "Fehlerhafte PEM-Datei: falsches Format des IV im DEK-Info-Tag."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Fehlerhafte PEM-Datei: Unbekannter privater Schlüsselstrom »%s«."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "Der private Schlüssel konnte nicht entschlüsselt werden."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Auffinden der erwarteten PKCS#8-Startmarkierung scheiterte."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:293
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Auffinden der erwarteten PKCS#8-Endmarkierung »%s« scheiterte."
#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr ""
-"Nicht genug freier Speicher zum Speichern der Daten des privaten Schlüssels."
-
-#: ../libnm-util/crypto.c:317
msgid "Failed to decode PKCS#8 private key."
msgstr "Die Entschlüsselung des privaten PKCS#8-Schlüssels scheiterte."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Nicht genug freier Speicher zum Speichern des Zertifikats."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV muss eine gerade Anzahl an Byte lang sein."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Nicht genug freier Speicher zum Speichern des IV."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV enthält nicht-hexadezimale Zeichen."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:408 ../libnm-util/crypto_gnutls.c:150
+#: ../libnm-util/crypto_gnutls.c:267 ../libnm-util/crypto_nss.c:170
+#: ../libnm-util/crypto_nss.c:331
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Privater Schlüsselstrom »%s« ist unbekannt."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Nicht genug freier Speicher zum Entschlüsseln des privaten Schlüssels."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr ""
-"Nicht genug freier Speicher zum Speichern des entschlüsselten privaten "
-"Schlüssels."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "Der Typ des privaten Schlüssels konnte nicht bestimmt werden."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM-Zertifikat hatte kein Start-Tag »%s«."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM-Zertifikat hatte kein abschließendes Tag »%s«."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "Die Entschlüsselung des Zertifikats scheiterte."
@@ -2118,114 +5345,100 @@ msgstr "Die Initialisierung der crypto-engine scheiterte."
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Die Initialisierung der MD5-engine %s / %s scheiterte."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "Ungültige IV-Länge (muss mindestens %zd betragen)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr ""
-"Nicht genug freier Speicher zum Zwischenspeichern des entschlüsselten "
-"Schlüssels."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:169
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr ""
"Die Initialisierung des Entschlüsselung-Chiffrekontextes scheiterte: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:178
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
"Das Anlegen der symmetrischen Schlüssel zum Entschlüsseln scheiterte: %s / "
"%s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Das Anlegen des IV zum Entschlüsseln scheiterte: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:196
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:206 ../libnm-util/crypto_nss.c:260
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"Die Entschlüsselung des privaten Schlüssels scheiterte: Unerwartete "
"Zeilenlänge."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:217 ../libnm-util/crypto_nss.c:271
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr ""
-"Es konnte nicht genügend freier Speicher zum Verschlüsseln angefordert "
-"werden."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:289
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr ""
"Die Initialisierung des Verschlüsselung-Chiffrekontextes scheiterte: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:298
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr ""
"Das Anlegen des symmetrischen Schlüssels zum Verschlüsseln scheiterte: %s / "
"%s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Die Verschlüsselung der Daten scheiterte: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Die Initialisierung der Zertifikatsdaten schlug fehl: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Zertifikat konnte nicht entschlüsselt werden: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:403
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12-Decoder konnte nicht initialisiert werden: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:416
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 konnte nicht entschlüsselt werden: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:428
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12-Datei konnte nicht überprüft werden: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:456
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8-Decoder konnte nicht initialisiert werden: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8-Datei konnte nicht entschlüsselt werden: %s"
@@ -2240,142 +5453,523 @@ msgstr "Die Initialisierung der crypto-engine scheiterte: %d."
msgid "Failed to initialize the MD5 context: %d."
msgstr "Die Initialisierung des MD5-Kontexts scheiterte: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "Ungültige IV-Länge (muss mindestens %d betragen)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
-msgstr "Die Initialisierung des Entschlüsselungsstromslots scheiterte."
+msgstr "Die Initialisierung des Entschlüsselungsstrom-Slots scheiterte."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr ""
"Das Anlegen des symmetrischen Schlüssels zur Entschlüsselung scheiterte."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Das Anlegen des IV zur Entschlüsselung scheiterte."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Die Initialisierung des Entschlüsselungskontexts scheiterte."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Das Entschlüsseln des privaten Schlüssels scheiterte: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:238
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"Das Entschlüsseln des privaten Schlüssels scheiterte: Die entschlüsselten "
"Daten sind zu groß."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:249
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr ""
"Das Abschließen der Entschlüsselung des privaten Schlüssels scheiterte: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Die Initialisierung des Verschlüsselungsstromslots scheiterte."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr ""
"Das Anlegen des symmetrischen Schlüssels zur Verschlüsselung scheiterte."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Die Initialisierung des Verschlüsselungskontexts scheiterte."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Das Verschlüsseln scheiterte: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Unerwartete Datenmenge nach der Verschlüsselung."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Das Zertifikat konnte nicht entschlüsselt werden: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Das Passwort konnte nicht zu UCS2 konvertiert werden: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:496
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12-Decoder konnte nicht initialisiert werden: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:505
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12-Datei konnte nicht verschlüsselt werden: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:514
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12-Datei konnte nicht überprüft werden: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "Es konnten keine Zufallsdaten generiert werden."
-#: ../libnm-util/nm-utils.c:2078
-#, c-format
-msgid "Not enough memory to make encryption key."
+#: ../libnm-util/nm-setting-8021x.c:594
+msgid "CA certificate must be in X.509 format"
msgstr ""
-"Nicht genügend freier Speicher zur Erstellung des Verschlüsselungsschlüssels."
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr ""
-"Es konnte nicht genügend freier Speicher zur Erstellung der PEM-Datei "
-"angefordert werden."
+#: ../libnm-util/nm-setting-8021x.c:912 ../libnm-util/nm-setting-8021x.c:1175
+#: ../libnm-util/nm-setting-8021x.c:1498
+#, fuzzy
+#| msgid "Error initializing certificate data: %s"
+msgid "invalid certificate format"
+msgstr "Die Initialisierung der Zertifikatsdaten schlug fehl: %s"
+
+#: ../libnm-util/nm-setting-8021x.c:1767
+#, fuzzy
+#| msgid "invalid gateway '%s'"
+msgid "invalid private key"
+msgstr "Ungültiges Gateway »%s«"
+
+#: ../libnm-util/nm-setting-8021x.c:2078
+#, fuzzy
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte."
+
+#: ../libnm-util/nm-setting-8021x.c:2280 ../libnm-util/nm-setting-8021x.c:2297
+#: ../libnm-util/nm-setting-8021x.c:2338 ../libnm-util/nm-setting-8021x.c:2355
+#: ../libnm-util/nm-setting-8021x.c:2407 ../libnm-util/nm-setting-8021x.c:2419
+#: ../libnm-util/nm-setting-8021x.c:2437 ../libnm-util/nm-setting-8021x.c:2449
+#: ../libnm-util/nm-setting-8021x.c:2473 ../libnm-util/nm-setting-8021x.c:2651
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-connection.c:786
+#: ../libnm-util/nm-setting-connection.c:841
+#: ../libnm-util/nm-setting-ip4-config.c:887
+#: ../libnm-util/nm-setting-ip6-config.c:812
+#: ../libnm-util/nm-setting-ip6-config.c:876
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:141
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:894
+#: ../libnm-util/nm-setting-wireless.c:753
+msgid "property is missing"
+msgstr "Eigenschaft fehlt"
+
+#: ../libnm-util/nm-setting-8021x.c:2287 ../libnm-util/nm-setting-8021x.c:2304
+#: ../libnm-util/nm-setting-8021x.c:2345 ../libnm-util/nm-setting-8021x.c:2362
+#: ../libnm-util/nm-setting-8021x.c:2413 ../libnm-util/nm-setting-8021x.c:2425
+#: ../libnm-util/nm-setting-8021x.c:2443 ../libnm-util/nm-setting-8021x.c:2455
+#: ../libnm-util/nm-setting-8021x.c:2480 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:777
+#: ../libnm-util/nm-setting-connection.c:848
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:952
+#: ../libnm-util/nm-setting-ip4-config.c:961
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-wireless-security.c:932
+#: ../libnm-util/nm-setting-wireless-security.c:956
+msgid "property is empty"
+msgstr "Eigenschaft ist leer"
+
+#: ../libnm-util/nm-setting-8021x.c:2315 ../libnm-util/nm-setting-8021x.c:2327
+#: ../libnm-util/nm-setting-8021x.c:2373 ../libnm-util/nm-setting-8021x.c:2385
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "muss mit der Eigenschaft »%s« für PKCS#12 übereinstimmen"
+
+#: ../libnm-util/nm-setting-8021x.c:2626 ../libnm-util/nm-setting-8021x.c:2660
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:943
+#: ../libnm-util/nm-setting-ip6-config.c:867
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:150 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:663 ../libnm-util/nm-setting-wired.c:672
+#: ../libnm-util/nm-setting-wireless-security.c:975
+#: ../libnm-util/nm-setting-wireless-security.c:984
+#: ../libnm-util/nm-setting-wireless-security.c:992
+#: ../libnm-util/nm-setting-wireless-security.c:1000
+#: ../libnm-util/nm-setting-wireless-security.c:1008
+#: ../libnm-util/nm-setting-wireless-security.c:1017
+#: ../libnm-util/nm-setting-wireless-security.c:1026
+#: ../libnm-util/nm-setting-wireless-security.c:1035
+#: ../libnm-util/nm-setting-wireless-security.c:1071
+#: ../libnm-util/nm-setting-wireless-security.c:1081
+#: ../libnm-util/nm-setting-wireless.c:813
+#: ../libnm-util/nm-setting-wireless.c:822
+#: ../libnm-util/nm-setting-wireless.c:831
+msgid "property is invalid"
+msgstr "Eigenschaft ist ungültig"
+
+#: ../libnm-util/nm-setting-8021x.c:2685 ../libnm-util/nm-setting-8021x.c:2695
+#: ../libnm-util/nm-setting-8021x.c:2705 ../libnm-util/nm-setting-8021x.c:2715
+#: ../libnm-util/nm-setting-8021x.c:2725 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:903
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "Fehler: »%s« ist kein gültiger Wert für die Eigenschaft"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "Erfordert die Einstellung »%s« oder »%s«"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "ungültige Option »%s« oder deren Wert »%s«"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "es kann nur entweder »%s« oder »%s« festgelegt werden"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "zwingende Option »%s« fehlt"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "Fehler: »%s« ist kein gültiger Wert für »%s«."
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "»%s=%s« ist nicht kompatibel mit »%s > 0« "
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "»%s« ist kein gültiger Schnittstellenname für die Option »%s«"
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "Option »%s« ist nur gültig für »%s=%s«."
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "»%s=%s« ist keine gültige Konfiguration für »%s«."
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
+msgid "'%s' option requires '%s' option to be set"
+msgstr "Option »%s« erfordert, dass die Einstellung »%s« aktiv ist"
+
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "Option »%s« ist leer"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "»%s« ist keine gültige IPv4-Adresse für die Option »%s«"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "»%d« ist kein gültiger Wert für die Eigenschaft (sollte <= %d sein)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "Wert »%d« ist außerhalb des Bereichs <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "Eigenschaft ist leer"
+
+#: ../libnm-util/nm-setting-connection.c:812
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "»%s« stimmt nicht mit dem virtuellen Schnittstellennamen »%s« überein"
+
+#: ../libnm-util/nm-setting-connection.c:858
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "erfordert das Vorhandensein der Einstellung »%s« in der Verbindung"
+
+#: ../libnm-util/nm-setting-connection.c:880
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4-Konfiguration ist nicht erlaubt für einen »Sklaven«"
+
+#: ../libnm-util/nm-setting-connection.c:893
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6-Konfiguration ist nicht erlaubt für einen »Sklaven«"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "Ungültige Flags"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "Ungültige Flags - deaktiviert"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "Eigenschaft ist ungültig (nicht aktiviert)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "ungültiges Element"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "Summe nicht 100%"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "Ungültige Eigenschaft"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "Eigenschaft fehlt"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "Eigenschaftswert »%s« ist leer oder zu lang (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "»%s« enthält ungültige Zeichen (Verwenden Sie [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "»%s« Länge ist ungültig (muss 5 oder 6 Ziffern sein)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "kein gültiger Schnittstellenname"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Wenn »parent« angegeben ist, muss auch ein »P_Key« angegeben werden"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr ""
-"Es konnte nicht genügend freier Speicher zum Schreiben des IV in die PEM-"
-"Datei angefordert werden."
+"InfiniBand »P_Key«-Verbindung definierte keinen übergeordneten (parent) "
+"Schnittstellennamen"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-ip4-config.c:897
+#: ../libnm-util/nm-setting-ip6-config.c:822
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "Diese Eigenschaft darf nicht für »%s=%s« leer sein"
+
+#: ../libnm-util/nm-setting-ip4-config.c:909
+#: ../libnm-util/nm-setting-ip4-config.c:919
+#: ../libnm-util/nm-setting-ip4-config.c:931
+#: ../libnm-util/nm-setting-ip6-config.c:835
+#: ../libnm-util/nm-setting-ip6-config.c:845
+#: ../libnm-util/nm-setting-ip6-config.c:855
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "Diese Eigenschaft ist nicht erlaubt für »%s=%s«"
+
+#: ../libnm-util/nm-setting-ip4-config.c:978
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4-Adresse ist ungültig"
+
+#: ../libnm-util/nm-setting-ip4-config.c:988
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4-Adresse hat ein ungültiges Präfix"
+
+#: ../libnm-util/nm-setting-ip4-config.c:998
+#, c-format
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4-Adresse hat ungültiges Markierung »%s«"
+
+#: ../libnm-util/nm-setting-ip4-config.c:1009
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
msgstr ""
-"Es konnte nicht genügend freier Speicher zum Schreiben des verschlüsselten "
-"Schlüssels in die PEM-Datei angefordert werden."
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-ip4-config.c:1025
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. Zielwegwahl ist ungültig"
+
+#: ../libnm-util/nm-setting-ip4-config.c:1035
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. Pfadwahl hat ein ungültiges Präfix"
+
+#: ../libnm-util/nm-setting-ip6-config.c:834
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "»%s« ist nicht erlaubt für %s=%s"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:762
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "Länge der SSID ist außerhalb des Bereichs <1-32> Byte"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:802
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "»%d« ist kein gültiger Kanal"
+
+#: ../libnm-util/nm-setting-ppp.c:390
#, c-format
-msgid "Could not allocate memory for PEM file data."
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "»%d« ist außerhalb des Bereichs <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
msgstr ""
-"Es konnte nicht genügend freier Speicher für die PEM-Datei angefordert "
-"werden."
+"Festlegen dieser Eigenschaft erfordert eine von Null verschiedene "
+"Eigenschaft »%s«"
+
+#: ../libnm-util/nm-setting-vlan.c:570
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "Wert »%s« entspricht nicht »%s=%s«"
+
+#: ../libnm-util/nm-setting-vlan.c:581
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "»%s« ist weder eine UUID noch ein Schnittstellenname"
+
+#: ../libnm-util/nm-setting-vlan.c:594
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "Eigenschaft ist nicht festgelegt und ebensowenig ist »%s:%s«"
+
+#: ../libnm-util/nm-setting-vlan.c:607
+msgid "flags are invalid"
+msgstr "Flags sind ungültig"
+
+#: ../libnm-util/nm-setting-wired.c:618
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "»%s« ist kein gültiger Wert für einen Ethernet-Port"
+
+#: ../libnm-util/nm-setting-wired.c:628
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "»%s« ist kein gültiger Duplex-Wert"
+
+#: ../libnm-util/nm-setting-wired.c:638 ../libnm-util/nm-setting-wired.c:696
+msgid "is not a valid MAC address"
+msgstr "ist keine gültige MAC-Adresse"
+
+#: ../libnm-util/nm-setting-wired.c:685
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "ungültiges »%s« oder dessen Wert »%s«"
+
+#: ../libnm-util/nm-setting-wireless-security.c:915
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "Sicherheit »%s« erfordert »%s=%s«"
+
+#: ../libnm-util/nm-setting-wireless-security.c:944
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "Sicherheit »%s« erfordert Vorhandensein der Einstellung »%s«"
+
+#: ../libnm-util/nm-setting-wireless-security.c:965
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "Wert »%d« ist außerhalb des Bereichs <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:1062
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "»%s« Verbindungen erfordern »%s« in dieser Eigenschaft"
+
+#: ../libnm-util/nm-setting-wireless-security.c:1092
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "»%s« kann nur zusammen mit »%s=%s« verwendet werden (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:771
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "»%s« ist kein gültiger WLAN-Modus"
+
+#: ../libnm-util/nm-setting-wireless.c:781
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "»%s« ist kein gültiges Band"
+
+#: ../libnm-util/nm-setting-wireless.c:791
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "erfordert eine Festlegung der Eigenschaft »%s«"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2403,34 +5997,34 @@ msgstr ""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
-msgstr "WLAN-Geräte aktivieren oder deaktivieren"
+msgstr "WLAN-Geräte aktivieren oder deaktivieren"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
msgstr ""
"Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von WLAN-"
-"Geräten"
+"Geräten"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
msgid "Enable or disable mobile broadband devices"
-msgstr "Mobile Breitbandgeräte aktivieren oder deaktivieren"
+msgstr "Mobile Breitbandgeräte aktivieren oder deaktivieren"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
msgid "System policy prevents enabling or disabling mobile broadband devices"
msgstr ""
"Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler "
-"Breitbandgeräte"
+"Breitbandgeräte"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
msgid "Enable or disable WiMAX mobile broadband devices"
-msgstr "Mobile WiMAX-Breitbandgeräte aktivieren oder deaktivieren"
+msgstr "Mobile WiMAX-Breitbandgeräte aktivieren oder deaktivieren"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
"Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler "
-"WiMAX-Breitbandgeräte"
+"WiMAX-Breitbandgeräte"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
@@ -2491,128 +6085,82 @@ msgstr ""
"Die Systemrichtlinien verhindern das Bearbeiten des ständigen Rechnernamens "
"des Systems"
-#: ../src/main.c:158
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "Fehler beim Festlegen der Signalmaske: %d"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "Erstellen des Threads für die Signalbehandlung schlug fehl: %d"
-
-#: ../src/main.c:182
+#: ../src/main.c:152
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Öffnen von %s fehlgeschlagen: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:158
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Schreiben nach %s gescheitert: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:163
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Schließen von %s fehlgeschlagen: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:206
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager läuft bereits (pid %ld)\n"
-#: ../src/main.c:376
+#: ../src/main.c:359
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager-Version anzeigen und beenden"
-#: ../src/main.c:377
+#: ../src/main.c:360
msgid "Don't become a daemon"
msgstr "Nicht zum Hintergrunddienst werden"
-#: ../src/main.c:378
+#: ../src/main.c:361
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Nicht zum Hintergrunddienst werden und auf stderr protokollieren"
+
+#: ../src/main.c:362
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Protokollierungsstufe: Eine von [%s]"
+
+#: ../src/main.c:364
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr ""
+"Protokoll-Domänen, durch Kommata getrennt. Eine beliebige Kombination von "
+"[%s]"
+
+#: ../src/main.c:366
msgid "Make all warnings fatal"
msgstr "Alle Warnungen als fatal betrachten"
-#: ../src/main.c:379
+#: ../src/main.c:367
msgid "Specify the location of a PID file"
msgstr "Geben Sie den Ort der PID-Datei an"
-#: ../src/main.c:379
+#: ../src/main.c:367
msgid "filename"
msgstr "Dateiname"
-#: ../src/main.c:380
+#: ../src/main.c:368
msgid "State file location"
msgstr "Speicherort der Statusdatei"
-#: ../src/main.c:380
+#: ../src/main.c:368
msgid "/path/to/state.file"
msgstr "/pfad/zur/status.datei"
-#: ../src/main.c:381
-msgid "Config file location"
-msgstr "Speicherort der Konfigurationsdatei"
-
-#: ../src/main.c:381
-msgid "/path/to/config.file"
-msgstr "/pfad/zur/config.datei"
-
-#: ../src/main.c:382
-msgid "List of plugins separated by ','"
-msgstr "Mit »,« getrennte Liste von Erweiterungen"
-
-#: ../src/main.c:382
-msgid "plugin1,plugin2"
-msgstr "erweiterung1,erweiterung2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:384
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Protokollierungsstufe: Möglich sind [ERR, WARN, INFO, DEBUG]"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:387
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"Protokolldomänen, getrennt durch »,«: beliebige Kombination von\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:393
-msgid "An http(s) address for checking internet connectivity"
-msgstr "Eine http(s)-Adresse zum Prüfen der Internetverbindung"
-
#: ../src/main.c:394
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "Das Intervall zwischen Verbindungsprüfungen (in Sekunden)"
-
-#: ../src/main.c:395
-msgid "The expected start of the response"
-msgstr "Der erwartete Start einer Antwort"
-
-#: ../src/main.c:395
-msgid "Bingo!"
-msgstr "Bingo!"
-
-#: ../src/main.c:400
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules werden von Ihrer Plattform nicht unterstützt!\n"
-#: ../src/main.c:419
+#: ../src/main.c:399
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr ""
+"Sie müssen Systemverwaltungsrechte besitzen, um NetworkManager auszuführen!\n"
+
+#: ../src/main.c:422
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2625,46 +6173,51 @@ msgstr ""
"dem Anwender diejenigen Drahtlos-Zugangspunkte anzugeben, mit welchen sich\n"
"die Drahtlos-Netzwerkkarten des Rechners verbinden sollen."
-#: ../src/main.c:425
+#: ../src/main.c:428 ../src/main.c:444
#, c-format
-msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
-"Ungültige Option. Verwenden Sie --help um eine Liste der verfügbaren "
-"Optionen zu erhalten.\n"
+"%s. Verwenden Sie --help, um eine Liste der verfügbaren Optionen zu "
+"erhalten.\n"
-#: ../src/main.c:435
+#: ../src/main.c:449
#, c-format
-msgid "You must be root to run NetworkManager!\n"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
-"Sie müssen Systemverwaltungsrechte besitzen, um NetworkManager auszuführen!\n"
+"Unbekannte Protokolldomäne(n) »%s« wurden über die Befehlszeile erhalten.\n"
-#: ../src/main.c:456
+#: ../src/main.c:500
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Konfiguration konnte nicht gelesen werden: (%d) %s\n"
-#: ../src/main.c:467
+#: ../src/main.c:514
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "Fehler in Konfigurationsdatei: %s.\n"
+
+#: ../src/main.c:519
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr ""
-"%s. Verwenden Sie --help, um eine Liste der verfügbaren Optionen zu "
-"erhalten.\n"
+"Unbekannte Protokolldomäne(n) »%s« aus den Konfigurationsdateien werden "
+"ignoriert.\n"
-#: ../src/main.c:474
+#: ../src/main.c:527
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Statusdatei %s konnte nicht verarbeitet werden: (%d) %s\n"
-#: ../src/main.c:491
+#: ../src/main.c:540
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Hintergrunddienst nicht möglich: %s [error %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:61
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
msgid "# Created by NetworkManager\n"
msgstr "# Erstellt von NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:68
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2673,427 +6226,1175 @@ msgstr ""
"# Zusammengeführt aus %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
msgid "no usable DHCP client could be found."
msgstr "Es konnte kein verwendbarer DHCP-Client gefunden werden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:320
msgid "'dhclient' could be found."
-msgstr "»dhclient« konnte nicht gefunden werden."
+msgstr "»dhclient« wurde gefunden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:330
msgid "'dhcpcd' could be found."
-msgstr "»dhcpcd« konnte nicht gefunden werden."
+msgstr "»dhcpcd« wurde gefunden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:338
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "Nicht unterstützter DHCP-Client »%s«"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"HINWEIS: Der libc-resolver unterstützt eventuell nicht mehr als drei "
"Nameserver."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Die nachfolgend gelisteten Nameserver werden eventuell nicht erkannt."
-#: ../src/logging/nm-logging.c:131
+#: ../src/logging/nm-logging.c:151
#, c-format
msgid "Unknown log level '%s'"
msgstr "Unbekannte Protokollstufe »%s«"
-#: ../src/logging/nm-logging.c:156
+#: ../src/logging/nm-logging.c:230
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Unbekannte Protokolldomäne »%s«"
-#: ../src/modem-manager/nm-modem-cdma.c:280 ../src/nm-device-bt.c:351
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA-Verbindung %d"
+#: ../src/config/nm-config.c:281
+msgid "Config file location"
+msgstr "Speicherort der Konfigurationsdatei"
-#: ../src/modem-manager/nm-modem-gsm.c:558 ../src/nm-device-bt.c:347
-#, c-format
-msgid "GSM connection %d"
-msgstr "GSM-Verbindung %d"
+#: ../src/config/nm-config.c:281
+msgid "/path/to/config.file"
+msgstr "/pfad/zur/config.datei"
-#: ../src/nm-device-bond.c:192
-#, c-format
-msgid "Bond connection %d"
-msgstr "Gebündelte Verbindung %d"
+#: ../src/config/nm-config.c:282
+msgid "Config directory location"
+msgstr "Speicherort des Konfigurationsordners"
+
+#: ../src/config/nm-config.c:282
+msgid "/path/to/config/dir"
+msgstr "/Pfad/zur/Konfiguration/Ordner"
-#: ../src/nm-device-adsl.c:193
+#: ../src/config/nm-config.c:284
+msgid "List of plugins separated by ','"
+msgstr "Mit »,« getrennte Liste von Erweiterungen"
+
+#: ../src/config/nm-config.c:284
+msgid "plugin1,plugin2"
+msgstr "erweiterung1,erweiterung2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:287
+msgid "An http(s) address for checking internet connectivity"
+msgstr "Eine http(s)-Adresse zum Prüfen der Internetverbindung"
+
+#: ../src/config/nm-config.c:288
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Das Intervall zwischen Verbindungsprüfungen (in Sekunden)"
+
+#: ../src/config/nm-config.c:289
+msgid "The expected start of the response"
+msgstr "Der erwartete Start einer Antwort"
+
+#: ../src/config/nm-config.c:289
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/devices/adsl/nm-device-adsl.c:147
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL-Verbindung %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/devices/bluetooth/nm-bluez-device.c:194
+#, c-format
+msgid "%s Network"
+msgstr "%s-Netzwerk"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN-Verbindung %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/devices/bluetooth/nm-device-bt.c:333
+#: ../src/devices/wwan/nm-modem-broadband.c:464
+#: ../src/devices/wwan/nm-modem-old.c:829
+#, c-format
+msgid "GSM connection %d"
+msgstr "GSM-Verbindung %d"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:337
+#: ../src/devices/wwan/nm-modem-broadband.c:486
+#: ../src/devices/wwan/nm-modem-old.c:856
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA-Verbindung %d"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN-Verbindung %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
+#, c-format
+msgid "Bond connection %d"
+msgstr "Gebündelte Verbindung %d"
+
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Brückenverbindung %d"
+
+#: ../src/devices/nm-device-ethernet.c:1508
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE-Verbindung %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1508
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Kabelgebundene Verbindung %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:271 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand-Verbindung %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
#, c-format
-msgid "Mesh %d"
-msgstr "Maschennetz %d‬"
+msgid "Team connection %d"
+msgstr "Gebündelte Verbindung %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN-Verbindung %d"
-#: ../src/nm-manager.c:662
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:174
+#, c-format
+msgid "Mesh %d"
+msgstr "Maschennetz %d‬"
+
+#: ../src/nm-manager.c:3231 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN-Verbindung %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "Fehler beim Verarbeiten der netlink-Nachricht: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager muss Netzwerke abschalten"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "Während des Wartens auf Daten am Socket ist ein Fehler aufgetreten"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:113
+msgid "System"
+msgstr "System"
-#: ../src/nm-netlink-monitor.c:296
+#: ../test/nm-online.c:86
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
+msgid "\rConnecting"
+msgstr "\rWird verbunden"
+
+#: ../test/nm-online.c:118
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"Die Verbindung zu netlink zur Ãœberwachung der Netzwerkverbindung konnte "
-"nicht hergestellt werden: %s"
+"Zeit zum Warten auf eine Verbindung, in Sekunden (ohne Angabe ist die "
+"Voreinstellung 30)"
-#: ../src/nm-netlink-monitor.c:307
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
+#: ../test/nm-online.c:119
+msgid "Exit immediately if NetworkManager is not running or connecting"
msgstr ""
-"Die netlink-Handle-Berechtigungsnachweisfreigabe konnte nicht aktiviert "
-"werden: %s"
+"Sofort beenden, falls NetworkManager nicht ausgeführt wird oder eine "
+"Verbindung herstellt"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
+#: ../test/nm-online.c:120
+msgid "Don't print anything"
+msgstr "Nichts ausgeben"
+
+#: ../test/nm-online.c:121
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "Auf Start von NetworkManager anstatt auf eine Verbindungen warten"
+
+#: ../test/nm-online.c:141
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
msgstr ""
-"Es konnte kein netlink-Handle zur Ãœberwachung der Netzwerkverbindung "
-"angefordert werden: %s"
+"Auf NetworkManager zum Aktivieren der Start-Netzwerkverbindungen warten"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#: ../test/nm-online.c:148 ../test/nm-online.c:158
+msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
-"Es konnte kein netlink-Verbindungszwischenspeicher zur Ãœberwachung der "
-"Netzwerkverbindung angefordert werden: %s"
+"Ungültige Option. Verwenden Sie »--help«, um eine Liste gültiger Optionen "
+"zu erhalten."
+
+#: ../tui/newt/nmt-newt-utils.c:179 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:121
+msgid "OK"
+msgstr "OK"
-#: ../src/nm-netlink-monitor.c:542
+#: ../tui/newt/nmt-newt-utils.c:327 ../tui/newt/nmt-newt-utils.c:359
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "Der netlink-Gruppe konnte nicht beigetreten werden: %s"
+msgid "Could not create temporary file: %s"
+msgstr "Temporäre Datei konnte nicht erstellt werden: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
+#: ../tui/newt/nmt-newt-utils.c:367
#, c-format
-msgid "error updating link cache: %s"
-msgstr "Die Aktualisierung des Verbindungszwischenspeichers schlug fehl: %s"
+msgid "Editor failed: %s"
+msgstr "Editor fehlgeschlagen: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
-msgid "System"
-msgstr "System"
+#: ../tui/newt/nmt-newt-utils.c:375
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "Editor fehlgeschlagen mit Status %d"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3663
-msgid "Bond"
-msgstr "Gebündelt"
+#: ../tui/newt/nmt-newt-utils.c:377
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "Editor fehlgeschlagen mit Signal %d"
-#: ../test/nm-online.c:111
+#: ../tui/newt/nmt-newt-utils.c:381
#, c-format
-msgid "\rConnecting"
-msgstr "\rWird verbunden"
+msgid "Could not re-read file: %s"
+msgstr "Datei konnte nicht erneut eingelesen werden: %s"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr ""
-"Zeit zum Warten auf eine Verbindung, in Sekunden (Voreinstellung ist 30)"
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Ethernet-Verbindung %d"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr ""
-"Sofort beenden, falls NetworkManager nicht ausgeführt wird oder sich nicht "
-"verbindet"
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "WLAN-Verbindung %d"
-#: ../test/nm-online.c:144
-msgid "Don't print anything"
-msgstr "Nichts ausgeben"
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Mobile Breitband-Verbindung %d"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "Warten auf eine erfolgreiche Verbindung in NetworkManager."
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
-msgid "Invalid option. Please use --help to see a list of valid options."
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL-Verbindung %d"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "Auswählen …"
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:175
+#: ../tui/nmt-page-ip6.c:173 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "Bearbeiten …"
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:462
+msgid "Delete"
+msgstr "Löschen"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "Editor für Verbindung »%s« vom Typ »%s« konnte nicht erstellt werden."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Editor für ungültige Verbindung »%s« konnte nicht erstellt werden."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit Connection"
+msgstr "Verbindung bearbeiten"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Fehler beim Speichern der Verbindung: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Verbindung kann nicht gespeichert werden: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Neue Verbindung kann nicht hinzugefügt werden: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:192
+#: ../tui/nmtui-edit.c:461 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(Vorgabe)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "Byte"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Rundlaufverfahren"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Aktive Sicherung"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Broadcast"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Adaptive Transmit Load Balancing (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Adaptive Load Balancing (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (empfohlen)"
+
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "Sklaven"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "Modus"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "Primär"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "Verbindungsüberwachung"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "Ãœberwachungsfrequenz"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Verzögerung bei der Aktivierung einer Verbindung"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Verzögerung bei der Deaktivierung einer Verbindung"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP-Ziele"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "Bridge-Port"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "Priorität"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Pfadkosten"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Hairpin-Modus"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "Bridge"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "Sekunden"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "Alterungszeit"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP aktivieren (Spanning Tree Protocol)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Verzögerung beim Weiterleiten"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Hello-Zeitintervall"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Höchstzulässiges Alter"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "Geklonte MAC-Adresse"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Datagramm"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "Verbunden"
+
+#: ../tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "Transportmodus"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Automatisch"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Link-Local"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Manuell"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Geteilt"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4-Konfiguration"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(Keine eigenen Routen)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "Eine eigene Route"
+msgstr[1] "%d eigene Routen"
+
+#: ../tui/nmt-page-ip4.c:144 ../tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "Adressen"
+
+#: ../tui/nmt-page-ip4.c:150 ../tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "Gateway"
+
+#: ../tui/nmt-page-ip4.c:156 ../tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS-Server"
+
+#: ../tui/nmt-page-ip4.c:162 ../tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "Suchdomänen"
+
+#: ../tui/nmt-page-ip4.c:177 ../tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "Routing"
+
+#: ../tui/nmt-page-ip4.c:179 ../tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "Dieses Netz niemals für die Standard-Route verwenden"
+
+#: ../tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "Eine IPv4-Adressierung für diese Verbindung verlangen"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automatisch (nur DHCP)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6-Konfiguration"
+
+#: ../tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "Eine IPv6-Adressierung für diese Verbindung verlangen"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "Verbergen"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "Anzeigen"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "Profilname"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "Gerät"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "Automatisch verbinden"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Für alle Benutzer verfügbar"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "Bündelungsport"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON-Konfiguration"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "Bündelung"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "Parent"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN Kennung"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WLAN"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Client"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "Zugriffspunkt"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc Netzwerk"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Automatisch"
+
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Keine"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 Persönlich"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 Unternehmen"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-Bit-Schlüssel (Hexadezimal oder ASCII-Zeichen)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128 Bit Passphrase"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "Dynamisches WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (Vorgabe)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "Offenes System"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "Gemeinsamer Schlüssel"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "Kanal"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "Sicherheit"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "Passwort"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(WPA-Unternehmen wird derzeit noch nicht unterstützt …)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "Schlüssel"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP-Index"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "Legitimierung"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Dynamisches WEP wird derzeit noch nicht unterstützt …)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "Benutzername"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Nach diesem Passwort jedes mal fragen"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Passwort zeigen"
+
+#: ../tui/nmt-route-table.c:226
+msgid "Destination"
+msgstr "Ziel"
+
+#: ../tui/nmt-route-table.c:226
+msgid "Prefix"
+msgstr "Präfix"
+
+#: ../tui/nmt-route-table.c:235
+msgid "Next Hop"
+msgstr "Next Hop"
+
+#: ../tui/nmt-route-table.c:243
+msgid "Metric"
+msgstr "Metrik"
+
+#: ../tui/nmt-route-table.c:263
+msgid "No custom routes are defined."
+msgstr "Es sind keine eigenen Routen festgelegt."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "Identität"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "Passwort für geheimen Schlüssel"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "Dienst"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "Legitimierung für Funknetzwerk wird benötigt"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
msgstr ""
-"Ungültige Option. Verwenden Sie »--help«, um eine Liste gültiger Optionen "
-"zu erhalten."
+"Passwörter oder Schlüssel sind erforderlich, um auf das Funknetzwerk »%s« "
+"zuzugreifen."
-#~ msgid "not set"
-#~ msgstr "nicht gesetzt"
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Kabelgebundene 802.1X-Legitimierung"
-#~ msgid "state: %s\n"
-#~ msgstr "Status: %s\n"
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Netzwerkname"
-#~ msgid "Connection activated\n"
-#~ msgstr "Verbindung aktiviert\n"
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL-Legitimierung"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "Status: %s (%d)\n"
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN-Code ist erforderlich"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "Status der aktiven Verbindung: %s\n"
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Für das mobile Breitbandgerät ist ein PIN-Code erforderlich"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "Pfad der aktiven Verbindung: %s\n"
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-EINSTELLUNGEN"
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "Passwort der mobilen Breitbandverbindung"
-#~ msgid "IP6-SETTINGS"
-#~ msgstr "IP6-EINSTELLUNGEN"
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden."
-#~ msgid "PREFIX"
-#~ msgstr "PRÄFIX"
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "Wählen Sie die Art der Slave-Verbindung, die Sie hinzufügen möchten."
-#~ msgid "unknown)"
-#~ msgstr "unbekannt)"
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Hinzufügen …"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "Gerätezustand: %d (%s)\n"
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Entfernen"
-#~ msgid "SCOPE"
-#~ msgstr "BANDBREITE"
+#: ../tui/nmtui-connect.c:94
+msgid "Activation failed"
+msgstr "Aktivierung fehlgeschlagen"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#: ../tui/nmtui-connect.c:142
+msgid "Connecting..."
+msgstr "Verbindungsaufbau …"
-#~ msgid "system"
-#~ msgstr "System"
+#: ../tui/nmtui-connect.c:172 ../tui/nmtui-connect.c:195
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Verbindungen konnte nicht aktiviert werden: %s"
-#~ msgid "user"
-#~ msgstr "Benutzer"
+#: ../tui/nmtui-connect.c:259 ../tui/nmtui-connect.c:308
+msgid "Activate"
+msgstr "Aktivieren"
-#~ msgid "System connections"
-#~ msgstr "Systemverbindungen"
+#: ../tui/nmtui-connect.c:261
+msgid "Deactivate"
+msgstr "Deaktivieren"
-#~ msgid "User connections"
-#~ msgstr "Benutzerverbindungen"
+#: ../tui/nmtui-connect.c:313 ../tui/nmtui-edit.c:95 ../tui/nmtui.c:115
+msgid "Quit"
+msgstr "Beenden"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "Fehler: Ermittlung der aktiven Verbindung für »%s« ist gescheitert."
+#: ../tui/nmtui-connect.c:336
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Verbindung »%s« existiert nicht"
-#~ msgid "Error: Could not get user settings."
-#~ msgstr "Fehler: Benutzereinstellungen konnten nicht ermittelt werden."
+#: ../tui/nmtui-connect.c:338
+msgid "Connection is already active"
+msgstr "Verbindung ist bereits aktiv"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "Die Verwendung von benutzerspezifischen Verbindungen erlauben"
+#: ../tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "Erstellen"
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr ""
-#~ "Die Systemrichtlinien verhindern die Verwendung von benutzerspezifischen "
-#~ "Verbindungen"
+#: ../tui/nmtui-edit.c:341
+msgid "Select the type of connection you wish to create."
+msgstr "Wählen Sie den Verbindungstyp, den Sie anlegen möchten."
+
+#: ../tui/nmtui-edit.c:348
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"Wenn Sie eine VPN-Verbindung erstellen möchten und die gewünschte Methode "
+"erscheint nicht in der Liste, dann haben Sie das korrekte Plugin nicht "
+"installiert."
+
+#: ../tui/nmtui-edit.c:381 ../tui/nmtui-edit.c:397
+msgid "New Connection"
+msgstr "Neue Verbindung"
+
+#: ../tui/nmtui-edit.c:434
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Verbindung kann nicht gelöscht werden: %s"
-#~ msgid "Auto %s"
-#~ msgstr "Auto %s"
+#: ../tui/nmtui-edit.c:463
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Sind Sie sicher, dass Sie die Verbindung »%s« entfernen möchten?"
-#~ msgid "Type"
-#~ msgstr "Typ"
+#: ../tui/nmtui-edit.c:477
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "Verbindung konnte nicht gelöscht werden: %s"
-#~ msgid "Name"
-#~ msgstr "Name"
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Rechnername festlegen"
-#~ msgid "User connections:\n"
-#~ msgstr "Benutzerverbindungen:\n"
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Rechnername"
-#~ msgid "System-wide connections"
-#~ msgstr "Systemweite Verbindungen"
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Rechnernamen auf »%s« festlegen"
-#~ msgid "Default"
-#~ msgstr "Vorgabe"
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Fehler beim Festlegen des Rechnernamens: %s"
-#~ msgid "Service"
-#~ msgstr "Dienst"
+#: ../tui/nmtui.c:60 ../tui/nmtui.c:63
+msgid "connection"
+msgstr "Verbindung"
-#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-#~ msgstr "%s, %s, Frequenz %d MHz, Durchsatz %d Mb/s, Stärke %d"
+#: ../tui/nmtui.c:61
+msgid "Edit a connection"
+msgstr "Eine Verbindung bearbeiten"
-#~ msgid "Device"
-#~ msgstr "Gerät"
+#: ../tui/nmtui.c:64
+msgid "Activate a connection"
+msgstr "Eine Verbindung aktivieren"
-#~ msgid "Driver"
-#~ msgstr "Treiber"
+#: ../tui/nmtui.c:66
+msgid "new hostname"
+msgstr "neuer Rechnername"
-#~ msgid "State"
-#~ msgstr "Status"
+#: ../tui/nmtui.c:67
+msgid "Set system hostname"
+msgstr "Den Rechnernamen des Systems festlegen"
-#~ msgid "HW Address"
-#~ msgstr "Hardwareadresse"
+#: ../tui/nmtui.c:90
+msgid "NetworkManager TUI"
+msgstr "NetworkManager Terminal-Benutzeroberfläche (TUI)"
+
+#: ../tui/nmtui.c:98
+msgid "Please select an option"
+msgstr "Bitte wählen Sie eine Option"
+
+#: ../tui/nmtui.c:159
+msgid "Usage"
+msgstr "Aufruf"
+
+#: ../tui/nmtui.c:241
+msgid "Could not parse arguments"
+msgstr "Parameter konnten nicht verarbeitet werden"
+
+#: ../tui/nmtui.c:251
+msgid "NetworkManager is not running."
+msgstr "NetworkManager wird nicht ausgeführt."
#~ msgid ""
+#~ "Usage: nmcli connection modify { ARGUMENTS | help }\n"
+#~ "\n"
+#~ "ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+#~ "[<value>]\n"
+#~ "\n"
+#~ "Modify a single property in the connection profile.\n"
+#~ "The profile is identified by its name, UUID or D-Bus path.\n"
#~ "\n"
-#~ " Capabilities:\n"
#~ msgstr ""
+#~ "Aufruf: nmcli connection modify { PARAMETER | help }\n"
+#~ "\n"
+#~ "PARAMETER := [id | uuid | path] <Kennung> <Einstellungsname>."
+#~ "<Eigenschaftsname> [<Wert>]\n"
+#~ "\n"
+#~ "Verändert eine einzelne Eigenschaft im Verbindungsprofil.\n"
+#~ "Das Profil wird anhand dessen Name, UUID oder D-Bus-Pfad identifiziert.\n"
#~ "\n"
-#~ " Fähigkeiten:\n"
-#~ msgid "Carrier Detect"
-#~ msgstr "Trägersignalkennung"
+#~ msgid "Error: 'master': '%s' is not valid UUID nor interface."
+#~ msgstr ""
+#~ "Fehler: »master«: »%s« ist weder eine gültige UUID noch eine "
+#~ "Schnittstelle."
-#~ msgid "Speed"
-#~ msgstr "Geschwindigkeit"
+#~ msgid ""
+#~ "save :: save the connection\n"
+#~ "\n"
+#~ "Sends the connection to NetworkManager that will save it.\n"
+#~ msgstr ""
+#~ "save :: Die Verbindung speichern\n"
+#~ "\n"
+#~ "Sendet die Verbindung an NetworkManager zum Speichern.\n"
#~ msgid ""
+#~ "remove [<index>|<option>] :: delete the value\n"
#~ "\n"
-#~ " Wireless Properties\n"
+#~ "Removes the property value (sets it to default).\n"
#~ msgstr ""
+#~ "remove [<Index>|<Option>] :: entfernt den Wert\n"
#~ "\n"
-#~ " Eigenschaften der Funkverbindung\n"
+#~ "Den Eigenschaftswert entfernen (auf die Vorgabe setzen).\n"
-#~ msgid "WEP Encryption"
-#~ msgstr "WEP-Verschlüsselung"
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr ""
+#~ "Ungültige Option. Verwenden Sie --help um eine Liste der verfügbaren "
+#~ "Optionen zu erhalten.\n"
-#~ msgid "WPA Encryption"
-#~ msgstr "WPA-Verschlüsselung"
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "Während des Wartens auf Daten am Socket ist ein Fehler aufgetreten"
-#~ msgid "WPA2 Encryption"
-#~ msgstr "WPA2-Verschlüsselung"
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "Fehler beim Verarbeiten der netlink-Nachricht: %s"
-#~ msgid "TKIP cipher"
-#~ msgstr "TKIP-Chiffre"
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr ""
+#~ "Die Verbindung zu netlink zur Ãœberwachung der Netzwerkverbindung konnte "
+#~ "nicht hergestellt werden: %s"
-#~ msgid "CCMP cipher"
-#~ msgstr "CCMP-Chiffre"
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr ""
+#~ "Die netlink-Handle-Berechtigungsnachweisfreigabe konnte nicht aktiviert "
+#~ "werden: %s"
-#~ msgid ""
-#~ "\n"
-#~ " Wireless Access Points %s\n"
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
#~ msgstr ""
-#~ "\n"
-#~ " Funknetzwerk-Zugangspunkte %s\n"
+#~ "Es konnte kein netlink-Handle zur Ãœberwachung der Netzwerkverbindung "
+#~ "angefordert werden: %s"
-#~ msgid "(* = current AP)"
-#~ msgstr "(* = momentaner Zugangspunkt)"
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "Der netlink-Gruppe konnte nicht beigetreten werden: %s"
#~ msgid ""
+#~ "Usage: nmcli connection show { ARGUMENTS | help }\n"
+#~ "\n"
+#~ "ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+#~ "\n"
+#~ "Show connections which are currently used by a device to connect to a "
+#~ "network.\n"
+#~ "Without a parameter, all active connections are listed. When <ID> is "
+#~ "provided,\n"
+#~ "the connection details are displayed instead.\n"
+#~ "\n"
+#~ "ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+#~ "\n"
+#~ "Show in-memory and on-disk connections, some of which may also be active "
+#~ "if\n"
+#~ "a device is using that connection profile. Without a parameter, all "
+#~ "profiles\n"
+#~ "are listed. When <ID> is provided, the profile details are displayed "
+#~ "instead.\n"
#~ "\n"
-#~ " Wired Properties\n"
#~ msgstr ""
+#~ "Aufruf: nmcli connection show { ARGUMENTE | help }\n"
+#~ "\n"
+#~ "ARGUMENTE := active [[id | uuid | path | apath] <Kennung>]\n"
+#~ "\n"
+#~ "Derzeit durch ein Gerät zum Verbinden mit einem Netzwerk verwendete "
+#~ "Verbindungen zeigen.\n"
+#~ "Ohne Parameter werden alle aktiven Verbindungen aufgelistet. Wenn "
+#~ "<Kennung> angegeben wird,\n"
+#~ "werden stattdessen die Verbindungsdetails angezeigt.\n"
+#~ "\n"
+#~ "ARGUMENTE := configured [[id | uuid | path] <Kennung>]\n"
#~ "\n"
-#~ " Eigenschaften der kabelgebundenen Verbindung\n"
+#~ "Verbindungen im Speicher und auf dem Datenträger anzeigen. Einige könnten "
+#~ "aktiv sein wenn\n"
+#~ "ein Gerät dieses Verbindungsprofil verwendet. Ohne Parameter werden alle "
+#~ "Profile\n"
+#~ "gelistet. Wenn <Kennung> angegeben wird werden stattdessen die "
+#~ "Profildetails angezeigt.\n"
+#~ "\n"
+
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "Fehler: »list configured«: %s"
+
+#~ msgid "List of configured connections"
+#~ msgstr "Liste der konfigurierten Verbindungen"
+
+#~ msgid "Error: 'show configured': %s"
+#~ msgstr "Fehler: »show configured«: %s"
-#~ msgid "Carrier"
-#~ msgstr "Trägersignal"
+#~ msgid "Error: 'list active': %s"
+#~ msgstr "Fehler: »ist active«: %s"
+
+#~ msgid "List of active connections"
+#~ msgstr "Liste der aktiven Verbindungen"
+
+#~ msgid "Error: 'show active': %s"
+#~ msgstr "Fehler: »show active«: %s"
#~ msgid ""
-#~ "\n"
-#~ " IPv4 Settings:\n"
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
#~ msgstr ""
-#~ "\n"
-#~ " IPv4-Einstellungen:\n"
+#~ "Fehler: Der Befehl »configured« oder »active« wird für »connection show« "
+#~ "erwartet."
-#~ msgid "Address"
-#~ msgstr "Adresse"
+#~ msgid "IP"
+#~ msgstr "IP"
-#~ msgid "Prefix"
-#~ msgstr "Präfix"
+#~ msgid "Error: 'show configured': %s; allowed fields: %s"
+#~ msgstr "Fehler: »show configured«: %s; erlaubte Felder: %s"
-#~ msgid "Gateway"
-#~ msgstr "Gateway"
+#~ msgid "Error: 'list active': %s; allowed fields: %s"
+#~ msgstr "Fehler: »ist active«: %s; erlaubte Felder: %s"
-#~ msgid "Device:"
-#~ msgstr "Gerät:"
+#~ msgid "Error: 'show active': %s; allowed fields: %s"
+#~ msgstr "Fehler: »show active«: %s; erlaubte Felder: %s"
-#~ msgid "Error: hwaddr has to be specified."
-#~ msgstr "Fehler: Es muss eine Hardwareadresse angegeben werden."
+#~ msgid "Error: No suitable device found: %s."
+#~ msgstr "Fehler: Es wurde kein passendes Gerät gefunden: %s."
-#~ msgid "Frequency:"
-#~ msgstr "Frequenz:"
+#~ msgid "Error: No suitable device found."
+#~ msgstr "Fehler: Es wurde kein passendes Gerät gefunden."
-#~ msgid "Mode:"
-#~ msgstr "Modus:"
+#~ msgid "Error: 'device show': %s; allowed fields: %s"
+#~ msgstr "Fehler: »device show«: %s; erlaubte Felder: %s"
-#~ msgid "Ad-hoc"
-#~ msgstr "Ad-hoc"
+#~ msgid "not connected"
+#~ msgstr "nicht verbunden"
-#~ msgid "Maximal bitrate:"
-#~ msgstr "Maximale Ãœbertragungsgeschwindigkeit:"
+#~ msgid "Error: 'device status': %s; allowed fields: %s"
+#~ msgstr "Fehler: »device status«: %s; erlaubte Felder: %s"
-#~ msgid "Strength:"
-#~ msgstr "Stärke:"
+#~ msgid "Error: 'device wifi': %s; allowed fields: %s"
+#~ msgstr "Fehler: »device wifi«: %s; erlaubte Felder: %s"
-#~ msgid "Flags:"
-#~ msgstr "Flags:"
+#~ msgid "Error: 'device wimax': %s; allowed fields: %s"
+#~ msgstr "Fehler: »device wimax«: %s; erlaubte Felder: %s"
-#~ msgid "privacy"
-#~ msgstr "Vertraulichkeit"
+#~ msgid "Error: %s (allowed fields: %s)"
+#~ msgstr "Fehler: %s (erlaubte Felder: %s)"
-#~ msgid "WPA flags:"
-#~ msgstr "WPA-Flags:"
+#~ msgid "Error: 'general permissions': %s; allowed fields: %s"
+#~ msgstr "Fehler: »general permissions«: %s; erlaubte Felder: %s"
-#~ msgid "RSN flags:"
-#~ msgstr "RSN-Flags:"
+#~ msgid "Error: 'general logging': %s; allowed fields: %s"
+#~ msgstr "Fehler: »general logging«: %s; erlaubte Felder: %s"
-#~ msgid "NM running:"
-#~ msgstr "NM läuft:"
+#~ msgid "invalid field '%s'"
+#~ msgstr "ungültiges Feld »%s«"
-#~ msgid "NM state:"
-#~ msgstr "Status von NM:"
+#~ msgid "Caught signal %d, shutting down..."
+#~ msgstr "Signal %d wurde empfangen, wird beendet …"
-#~ msgid "NM wireless hardware:"
-#~ msgstr "NM Funknetzwerk-Hardware:"
+#~ msgid "Error: 'ingress': '%s' is not valid; %s "
+#~ msgstr "Fehler: »ingress«: »%s« ist ungültig. %s "
-#~ msgid "NM wireless:"
-#~ msgstr "NM Funk:"
+#~ msgid "'%s' setting is required for the connection when the property is set"
+#~ msgstr ""
+#~ "Einstellung »%s« ist für die Verbindung notwendig, wenn die Eigenschaft "
+#~ "festgelegt ist"
-#~ msgid "NM WWAN hardware:"
-#~ msgstr "NM WWAN-Hardware:"
+#~ msgid "IPv4 method '%s' is not allowed when IPv6 method 'ignore' is set"
+#~ msgstr ""
+#~ "IPv4-Methode »%s« ist nicht erlaubt, wenn die IPv6-Methode »ignore« "
+#~ "festgelegt ist"
-#~ msgid "unable to join netlink group for monitoring link status: %s"
+#~ msgid "IPv6 method '%s' is not allowed when IPv4 method 'disabled' is set"
#~ msgstr ""
-#~ "Es kann nicht mit einer netlink-Gruppe zur Ãœberwachung der "
-#~ "Netzwerkverbindung verbunden werden: %s"
+#~ "IPv6-Methode »%s« ist nicht erlaubt, wenn die IPv4-Methode »disabled« "
+#~ "festgelegt ist"
-#~ msgid "unable to connect to netlink: %s"
-#~ msgstr "Es kann nicht mit netlink verbunden werden: %s"
+#~ msgid "Waits for a successful connection in NetworkManager."
+#~ msgstr "Warten auf eine erfolgreiche Verbindung in NetworkManager."
-#~ msgid "operation took too long"
-#~ msgstr "Vorgang dauerte zu lange"
+#~ msgid "setting '%s' is required"
+#~ msgstr "Die Einstellung »%s« ist notwendig"
-#~ msgid "received data from wrong type of sender"
-#~ msgstr "Daten von einem falschen Absendertyp erhalten"
+#~ msgid "Encrypted: "
+#~ msgstr "Verschlüsselt: "
-#~ msgid "received data from unexpected sender"
-#~ msgstr "Daten von einem unerwarteten Absender erhalten"
+#~ msgid "WPA "
+#~ msgstr "WPA"
-#~ msgid "too much data was sent over socket and some of it was lost"
-#~ msgstr ""
-#~ "Es wurden zu viele Daten über den Socket gesendet und einige davon sind "
-#~ "verloren gegangen"
+#~ msgid "WPA2 "
+#~ msgstr "WPA2"
diff --git a/po/el.po b/po/el.po
index 355249d44..db8cf543d 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1160,8 +1160,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:380
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:389
msgid "Encrypted: "
diff --git a/po/en_GB.po b/po/en_GB.po
index 32235ced9..3997ed51f 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -1157,8 +1157,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:380
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:389
msgid "Encrypted: "
diff --git a/po/eo.po b/po/eo.po
index 0284ae6cd..c466a5d20 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -1122,8 +1122,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:557
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:566
msgid "Encrypted: "
diff --git a/po/es.po b/po/es.po
index 408347c10..7b725298b 100644
--- a/po/es.po
+++ b/po/es.po
@@ -814,8 +814,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:461
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:470
msgid "Encrypted: "
@@ -823,19 +823,19 @@ msgstr "Encriptado: "
#: ../cli/src/devices.c:475
msgid "WEP "
-msgstr "WEP"
+msgstr "WEP "
#: ../cli/src/devices.c:477
msgid "WPA "
-msgstr "WPA"
+msgstr "WPA "
#: ../cli/src/devices.c:479
msgid "WPA2 "
-msgstr "WPA2"
+msgstr "WPA2 "
#: ../cli/src/devices.c:482
msgid "Enterprise "
-msgstr "Empresa"
+msgstr "Empresa "
#: ../cli/src/devices.c:491
msgid "Ad-Hoc"
diff --git a/po/eu.po b/po/eu.po
index 68b8204a4..20026f960 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -638,8 +638,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:863
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:869 ../cli/src/devices.c:871
msgid "AP parameters"
diff --git a/po/fi.po b/po/fi.po
index 8a7517f61..b4deae74b 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -761,7 +761,7 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:461
#, c-format
-msgid "%u MB/s"
+msgid "%u Mbit/s"
msgstr ""
#: ../cli/src/devices.c:470
diff --git a/po/fr.po b/po/fr.po
index b56bf3ffb..378831edc 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -787,7 +787,7 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:461
#, c-format
-msgid "%u MB/s"
+msgid "%u Mbit/s"
msgstr "%u Mo/s"
#: ../cli/src/devices.c:470
diff --git a/po/gl.po b/po/gl.po
index 5131f2b91..5dc613df0 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -1194,7 +1194,7 @@ msgstr ""
" disconnect iface <interface> [--nowait] [--timeout <tempo de espera>]\n"
" wifi [list [iface <interface>] [bssid <BSSID>]]\n"
" wifi connect <(B)SSID> [password <contrasinal>] [wep-key-type chave|frase] "
-"[iface <inteface>] [bssid <BSSID>] [name <nome>]\n"
+"[iface <interface>] [bssid <BSSID>] [name <nome>]\n"
" [--private] [--nowait] [--timeout <tempo de espera>]\n"
" wimax [list [iface <interface>] [nsp <nome>]]\n"
"\n"
@@ -1210,8 +1210,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:404
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:413
msgid "Encrypted: "
diff --git a/po/gu.po b/po/gu.po
index 73e3627ff..efa234d31 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -3,360 +3,455 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
#
# Ankit Patel <ankit@redhat.com>, 2004.
-# Sweta Kothari <swkothar@redhat.com>, 2009, 2010, 2012.
+# Sweta Kothari <swkothar@redhat.com>, 2009, 2010, 2012, 2013.
+# swkothar <swkothar@redhat.com>, 2013.
+# Ankit Patel <ankit@redhat.com>, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gu\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-11-13 15:25+0000\n"
-"PO-Revision-Date: 2012-11-20 15:41+0530\n"
-"Last-Translator: \n"
-"Language-Team: gu_IN <kde-i18n-doc@kde.org>\n"
-"Language: \n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-02-02 23:50+0000\n"
+"PO-Revision-Date: 2014-02-03 17:21+0630\n"
+"Last-Translator: Ankit Patel <ankit644@yahoo.com>\n"
+"Language-Team: American English <kde-i18n-doc@kde.org>\n"
+"Language: gu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:179
+#: ../cli/src/connections.c:201
msgid "GROUP"
msgstr "GROUP"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADDRESS"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ROUTE"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMAIN"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "અયોગà«àª¯ IPv4 સરનામà«àª‚ '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "અયોગà«àª¯ ઉપસરà«àª— '%s'; <1-32> પરવાનગી મળેલ છે"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "અયોગà«àª¯ ગેટવે '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "અયોગà«àª¯ IPv6 સરનામà«àª‚ '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "અયોગà«àª¯ ઉપસરà«àª— '%s'; <1-128> પરવાનગી મળેલ છે"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "અયોગà«àª¯ IPv4 મારà«àª— '%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "અયોગà«àª¯ ઉપસરà«àª— '%s'; <0-32> પરવાનગી મળેલ છે"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "અયોગà«àª¯ આગળનà«àª‚ હોપ સરનામà«àª‚ '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "અયોગà«àª¯ મેટà«àª°à«€àª• '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "અયોગà«àª¯ IPv6 મારà«àª— '%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "અયોગà«àª¯ ઉપસરà«àª— '%s'; <0-128> પરવાનગી મળેલ છે"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "અસંચાલિત થયેલ"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "ઉપલબà«àª§ નથી"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "તૂટેલ જોડાણ"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "જોડાઇ રહà«àª¯àª¾ છે (તૈયાર કરો)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "જોડાઇ રહà«àª¯àª¾ છે (રૂપરેખાંકિત કરી રહà«àª¯àª¾ છે)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "જોડાઇ રહà«àª¯àª¾ છે (સતà«àª¤àª¾àª§àª¿àª•àª°àª£àª¨à«€ જરૂર છે)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "જોડાઇ રહà«àª¯àª¾ છે (IP રૂપરેખાંકનને મેળવી રહà«àª¯àª¾ છે)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "જોડાઇ રહà«àª¯àª¾ છે (IP જોડાણને ચકાસી રહà«àª¯àª¾ છે)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "જોડાઇ રહà«àª¯àª¾ છે (ગૌણ જોડાણો શરૂ કરી રહà«àª¯àª¾ છે)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "જોડાયેલ"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:635
+#: ../cli/src/common.c:639 ../cli/src/connections.c:528
msgid "deactivating"
msgstr "નિષà«àª•à«àª°àª¿àª¯ કરી રહà«àª¯àª¾ છે"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "જોડાણ નિષà«àª«àª³"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:638
-#: ../cli/src/connections.c:661 ../cli/src/connections.c:1353
-#: ../cli/src/devices.c:645 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:451
-#: ../src/main.c:470
+#: ../cli/src/common.c:643 ../cli/src/connections.c:533
+#: ../cli/src/connections.c:556 ../cli/src/connections.c:1669
+#: ../cli/src/devices.c:829 ../cli/src/devices.c:2263
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1114 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "અજà«àªžàª¾àª¤"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "કારણ આપેલ નથી"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2467
+#, c-format
msgid "Unknown error"
msgstr "અજà«àªžàª¾àª¤ ભૂલ"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "ઉપકરણ હવે સંચાલિત થયેલ છે"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "ઉપકરણ હવે સંચાલિત થયેલ નથી"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "ઉપકરણ રૂપરેખાંકન માટે પહેલેથી તૈયાર કરી શકà«àª¯à« નહિં"
-#: ../cli/src/common.c:414
-msgid "IP configuration could not be reserved (no available address, timeout, etc.)"
-msgstr "IP રૂપરેખાંકનને આરકà«àª·àª¿àª¤ રાખી શકà«àª¯àª¾ નહિં (ઉપલબà«àª§ સરનામà«àª‚ નથી, સમય સમાપà«àª¤àª¿, વગેરે.)"
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+"IP રૂપરેખાંકનને આરકà«àª·àª¿àª¤ રાખી શકà«àª¯àª¾ નહિં (ઉપલબà«àª§ સરનામà«àª‚ નથી, સમય સમાપà«àª¤àª¿, "
+"વગેરે.)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "IP રૂપરેખાંકન લાંબા સમય સà«àª§à«€ માનà«àª¯ નથી"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "ખાનગીની જરૂરિયાત હતી, પરંતૠપૂરૠપાડેલ નથી"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X સપà«àª²àª¿àª•àª¨à«àªŸàª¨à«àª‚ જોડાણ તૂટી ગયà«"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X સપà«àª²àª¿àª•àª¨à«àªŸ રૂપરેખાંકન નિષà«àª«àª³"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X સપà«àª²àª¿àª•àª¨à«àªŸ નિષà«àª«àª³"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X સપà«àª²àª¿àª•àª¨à«àªŸ સતà«àª¤àª¾àª§àª¿àª•àª°àª£ કરવા માટે લાંબો સમય લીધો"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "શરૂ કરવા માટે PPP સેવા નિષà«àª«àª³"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "તૂટી ગયેલ PPP સેવા જોડાણ"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP નિષà«àª«àª³"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "શરૂ કરવા માટે DHCP કà«àª²àª¾àª¯àª¨à«àªŸ નિષà«àª«àª³"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP કà«àª²àª¾àª¯àª¨à«àªŸ ભૂલ"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP કà«àª²àª¾àª¯àª¨à«àªŸ નિષà«àª«àª³"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "શરૂ કરતી વખતે વહેંચાયેલ જોડાણ સેવા નિષà«àª«àª³"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "વહેંચાયેલ જોડાણ સેવા નિષà«àª«àª³"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "શરૂ કરવા માટે AutoIP સેવા નિષà«àª«àª³"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP સેવા ભૂલ"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP સેવા નિષà«àª«àª³"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "લાઇન વà«àª¯àª¸à«àª¤ છે"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "ડાયલ ટોન નથી"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "કૅરિઅર સà«àª¥àª¾àªªàª¿àª¤ કરી શકà«àª¯àª¾ નહિં"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "ડાયલ કરવાની માંગણીનો સમય સમાપà«àª¤"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "ડાયલ કરવાનો પà«àª°àª¯àª¾àª¸ નિષà«àª«àª³"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "મોડેમની શરૂઆત નિષà«àª«àª³"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "ખાસ APN ને પસંદ કરવાનà«àª‚ નિષà«àª«àª³"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "નેટવરà«àª•à«‹ માટે શોધી રહà«àª¯àª¾ નથી"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "નામંજૂર થયેલ નેટવરà«àª• રજીસà«àªŸà«àª°à«‡àª¶àª¨"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "નેટવરà«àª• રજીસà«àªŸà«àª°à«‡àª¶àª¨ કરવાનો સમય સમાપà«àª¤ થઇ ગયો"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "સૂચિત નેટવરà«àª• સાથે રજીસà«àªŸàª° કરવાનà«àª‚ નિષà«àª«àª³"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN ચકાસણી નિષà«àª«àª³"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "ઉપકરણ માટે જરૂરી ફરà«àª®àªµà«‡àª° ગà«àª® થઇ શકે છે"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "જોડાણને દૂર કરાયેલ હતà«"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager નિષà«àª•à«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ જતૠરહà«àª¯à«"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "ઉપકરણનà«àª‚ સકà«àª°àª¿àª¯ જોડાણ અદૃશà«àª¯"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "વપરાશકરà«àª¤àª¾ અથવા કà«àª²àª¾àª¯àª¨à«àªŸ દà«àª¦àª¾àª°àª¾ ઉપકરણનà«àª‚ જોડાણ તૂટી ગયà«"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "કૅરિઅર/કડી બદલાયેલ છે"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "ઉપકરણનાં હાલનાં જોડાણને ધારેલ હતà«"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "સપà«àª²à«€àª•àª¨à«àªŸ હવે ઉપલબà«àª§ નથી"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "મોડેમ મળી શકે તેમ નથી"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "બà«àª²à«àªŸà«àª¥ જોડાણ નિષà«àª«àª³ અથવા સમયસમાપà«àª¤àª¿"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM મોડેમનà«àª‚ SIM કારà«àª¡ દાખલ થયેલ છે"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM મોડેમનà«àª‚ SIM PIN જરૂરી છે"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM મોડેમનà«àª‚ SIM PUK જરૂરી છે"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM મોડેમનà«àª‚ SIM ખોટૠછે"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand ઉપકરણ જોડાયેલ સà«àª¥àª¿àª¤àª¿àª¨à«‡ આધાર આપતૠનથી"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "જોડાણની નિરà«àª­àª°àª¤àª¾ નિષà«àª«àª³"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL બà«àª°àª¿àªœ પર RFC 2684 ઇથરનેટ સાથે સમસà«àª¯àª¾"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager બિનઉપલબà«àª§ છે"
-#: ../cli/src/common.c:558
-#| msgid "The modem could not be found"
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi નેટવરà«àª•àª¨à«‡ શોધી શકà«àª¯àª¾ નહિં"
-#: ../cli/src/common.c:561
-#| msgid "A dependency of the connection failed"
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "મૂળ જોડાણનà«àª‚ ગૌણ જોડાણ નિષà«àª«àª³"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:295 ../cli/src/devices.c:311
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:477
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB અથવા FCoE સà«àª¯à«‹àªœàª¨ નિષà«àª«àª³"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "teamd નિયંતà«àª°àª£ નિષà«àª«àª³"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:824 ../cli/src/devices.c:636
+#: ../libnm-glib/nm-device.c:1834
msgid "Unknown"
msgstr "અજà«àªžàª¾àª¤"
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "અયોગà«àª¯ પà«àª°àª¾àª§àª¾àª¨à«àª¯ નકà«àª·à«‹ '%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "પà«àª°àª¾àª§àª¾àª¨à«àª¯ '%s' યોગà«àª¯ નથી (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' ઠમાનà«àª¯ ટà«àª•àª¡à«€ રૂપરેખાંકન કે ફાઇલ નામ નથી."
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "સà«àª¯à«‹àªœàª¨ નામ?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "ગà«àª£àª§àª°à«àª® નામ?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "જોડાણ પà«àª°àª•àª¾àª° દાખલ કરો:"
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:107 ../cli/src/devices.c:131 ../cli/src/devices.c:141
-#: ../cli/src/devices.c:151 ../cli/src/devices.c:165 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:217 ../cli/src/devices.c:226
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:180
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NAME"
#. 0
#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
msgid "UUID"
msgstr "UUID"
@@ -364,1095 +459,3132 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:204
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:202
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TYPE"
#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#. 14
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "READONLY"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:188
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#. 2
-#: ../cli/src/connections.c:131
-msgid "DEVICES"
-msgstr "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
+#: ../cli/src/devices.c:202
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:71 ../cli/src/devices.c:87
+#: ../cli/src/devices.c:184 ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "DEVICE"
+#. 9
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:116 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:78 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:73 ../cli/src/devices.c:96
+#: ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATE"
+#. 10
+#: ../cli/src/connections.c:79
+msgid "ACTIVE-PATH"
+msgstr "ACTIVE-PATH"
+
+#. 2
+#: ../cli/src/connections.c:182
+msgid "DEVICES"
+msgstr "DEVICES"
+
#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:184
msgid "DEFAULT"
msgstr "DEFAULT"
#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:185
msgid "DEFAULT6"
msgstr "DEFAULT6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:186
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#. 4
+#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:342
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:138
+#. 5
+#. 18
+#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PATH"
#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:190
msgid "ZONE"
msgstr "ZONE"
#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:191
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "GENERAL"
-
-#. 0
-#: ../cli/src/connections.c:149
-msgid "IP"
-msgstr "IP"
-
#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:203
msgid "USERNAME"
msgstr "USERNAME"
#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:204
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:205
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:206
msgid "VPN-STATE"
msgstr "VPN-STATE"
#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:207
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:261
#, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down | delete }\n"
-#| "\n"
-#| " list [id <id> | uuid <id>]\n"
-#| " status [id <id> | uuid <id> | path <path>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-#| "nowait] [--timeout <timeout>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
-#| " delete id <id> | uuid <id>\n"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
"વપરાશ: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:283
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "ભૂલ: 'con list': %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"List in-memory and on-disk connection profiles, some of which may also be\n"
+"active if a device is using that connection profile. Without a parameter, "
+"all\n"
+"profiles are listed. When --active option is specified, only the active\n"
+"profiles are shown.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Show details for specified connections. By default, both static "
+"configuration\n"
+"and active connection data are displayed. It is possible to filter the "
+"output\n"
+"using global '--fields' option. Refer to the manual page for more "
+"information.\n"
+"When --active option is specified, only the active profiles are taken into\n"
+"account.\n"
+msgstr ""
-#: ../cli/src/connections.c:253 ../cli/src/connections.c:613
+#: ../cli/src/connections.c:305
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "ભૂલ: 'con list': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
-
-#: ../cli/src/connections.c:261
-msgid "Connection details"
-msgstr "જોડાણો વિગતો"
-
-#: ../cli/src/connections.c:486
-msgid "never"
-msgstr "કદી નહિં"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"ઉપકરણ પરનà«àª‚ જોડાણ સકà«àª°àª¿àª¯ કરો. સકà«àª°àª¿àª¯ કરવા માટેની રૂપરેખા તેના નામ, UUID અથવા "
+"D-Bus "
+"પાથથી\n"
+"ઓળખવામાં આવે છે.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"જોડાણવાળા ઉપકરણને સકà«àª°àª¿àª¯ કરો. જોડાણ રૂપરેખા NetworkManager દà«àªµàª¾àª°àª¾ આપોઆપ\n"
+"પસંદ કરવામાં આવે છે.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:787
-#: ../cli/src/settings.c:907 ../cli/src/settings.c:1189
-#: ../cli/src/settings.c:1190 ../cli/src/settings.c:1192
-#: ../cli/src/settings.c:1194 ../cli/src/settings.c:1195
-#: ../cli/src/settings.c:1326 ../cli/src/settings.c:1327
-#: ../cli/src/settings.c:1328 ../cli/src/settings.c:1329
-#: ../cli/src/settings.c:1406 ../cli/src/settings.c:1407
-#: ../cli/src/settings.c:1408 ../cli/src/settings.c:1409
-#: ../cli/src/settings.c:1410 ../cli/src/settings.c:1411
-#: ../cli/src/settings.c:1412 ../cli/src/settings.c:1413
-#: ../cli/src/settings.c:1414 ../cli/src/settings.c:1415
-#: ../cli/src/settings.c:1416 ../cli/src/settings.c:1417
-#: ../cli/src/settings.c:1418 ../cli/src/settings.c:1489
-msgid "yes"
-msgstr "હાં"
+#: ../cli/src/connections.c:326
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"ઉપકરણનà«àª‚ જોડાણ નિષà«àª•à«àª°àª¿àª¯ કરો (ઉપકરણને ભવિષà«àª¯àª®àª¾àª‚ પà«àª¨àªƒàª¸àª•à«àª°àª¿àª¯ કરવાથી\n"
+"રોકà«àª¯àª¾ સિવાય). નિષà«àª•à«àª°àª¿àª¯ કરવા માટેની રૂપરેખા તેના નામ, UUID અથવા D-Bus પાથથી\n"
+"ઓળખવામાં આવે છે.\n"
+"\n"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:714
-#: ../cli/src/settings.c:787 ../cli/src/settings.c:907
-#: ../cli/src/settings.c:1189 ../cli/src/settings.c:1190
-#: ../cli/src/settings.c:1192 ../cli/src/settings.c:1194
-#: ../cli/src/settings.c:1195 ../cli/src/settings.c:1326
-#: ../cli/src/settings.c:1327 ../cli/src/settings.c:1328
-#: ../cli/src/settings.c:1329 ../cli/src/settings.c:1406
-#: ../cli/src/settings.c:1407 ../cli/src/settings.c:1408
-#: ../cli/src/settings.c:1409 ../cli/src/settings.c:1410
-#: ../cli/src/settings.c:1411 ../cli/src/settings.c:1412
-#: ../cli/src/settings.c:1413 ../cli/src/settings.c:1414
-#: ../cli/src/settings.c:1415 ../cli/src/settings.c:1416
-#: ../cli/src/settings.c:1417 ../cli/src/settings.c:1418
-#: ../cli/src/settings.c:1489
-msgid "no"
-msgstr "ના"
+#: ../cli/src/connections.c:339
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
-#: ../cli/src/connections.c:562
-msgid "Connection list"
-msgstr "જોડાણ યાદી"
-
-#: ../cli/src/connections.c:575 ../cli/src/connections.c:1112
-#: ../cli/src/connections.c:1650 ../cli/src/connections.c:1665
-#: ../cli/src/connections.c:1674 ../cli/src/connections.c:1684
-#: ../cli/src/connections.c:1696 ../cli/src/connections.c:1804
-#: ../cli/src/connections.c:1906 ../cli/src/devices.c:1122
-#: ../cli/src/devices.c:1132 ../cli/src/devices.c:1250
-#: ../cli/src/devices.c:1258 ../cli/src/devices.c:1622
-#: ../cli/src/devices.c:1629 ../cli/src/devices.c:1643
-#: ../cli/src/devices.c:1650 ../cli/src/devices.c:1667
-#: ../cli/src/devices.c:1678 ../cli/src/devices.c:1899
-#: ../cli/src/devices.c:1906
+#: ../cli/src/connections.c:417
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "ભૂલ: %s દલીલ ગેરહાજર છે."
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"જોડાણ રૂપરેખાનો àªàª•àª®àª¾àª¤à«àª° ગà«àª£àª§àª°à«àª® સà«àª§àª¾àª°à«‹.\n"
+"રૂપરેખા તેના નામ, UUID અથવા D-Bus પાથ દà«àªµàª¾àª°àª¾ ઓળખવામાં આવે છે.\n"
+"\n"
-#: ../cli/src/connections.c:588
+#: ../cli/src/connections.c:429
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Error: %s - આવા જોડાણ નથી."
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"પૂછપરછવાળા સંપાદકમાં હાલની જોડાણ રૂપરેખામાં ફેરફાર કરો.\n"
+"રૂપરેખા તેના નામ, UUID અથવા D-Bus પાથ દà«àªµàª¾àª°àª¾ ઓળખવામાં આવે છે.\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"પૂછપરછવાળા સંપાદકમાં નવી જોડાણ રૂપરેખા ઉમેરો.\n"
+"\n"
-#: ../cli/src/connections.c:594 ../cli/src/connections.c:1709
-#: ../cli/src/connections.c:1821 ../cli/src/connections.c:1913
-#: ../cli/src/devices.c:906 ../cli/src/devices.c:986 ../cli/src/devices.c:1146
-#: ../cli/src/devices.c:1264 ../cli/src/devices.c:1691
-#: ../cli/src/devices.c:1912
+#: ../cli/src/connections.c:445
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "અજà«àªžàª¾àª¤ પરિમાણ: %s\n"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"જોડાણ રૂપરેખા કાઢી નાંખો.\n"
+"રૂપરેખા તેના નામ, UUID અથવા D-Bus પાથથી ઓળખવામાં આવે છે.\n"
+"\n"
-#: ../cli/src/connections.c:603
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "ભૂલ: યોગà«àª¯ પરિમાણ સà«àªªàª·à«àªŸ થયેલ નથી."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection reload { help }\n"
+"\n"
+"ડિસà«àª•àª®àª¾àª‚થી બધી જોડાણ ફાઇલો પà«àª¨àªƒàª²à«‹àª¡ કરો.\n"
+"\n"
-#: ../cli/src/connections.c:618 ../cli/src/connections.c:2009
-#: ../cli/src/devices.c:2123 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:466
#, c-format
-msgid "Error: %s."
-msgstr "ભૂલ: %s."
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"ડિસà«àª•àª®àª¾àª‚થી àªàª• અથવા વધૠજોડાણ ફાઇલો લાવો/પà«àª¨àªƒàª²àª¾àªµà«‹. NetworkManager ઠતેની "
+"તાજેતરની "
+"પરિસà«àª¥àª¿àª¤àª¿àª¥à«€ પરિચિત છે\n"
+"તેની ખાતરી કરવા માટે જોડાણ ફાઇલમાં જાતે ફેરફાર કરà«àª¯àª¾ પછી આનો ઉપયોગ\n"
+"કરો.\n"
+"\n"
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:524
msgid "activating"
msgstr "સકà«àª°àª¿àª¯ કરી રહà«àª¯àª¾ છે"
-#: ../cli/src/connections.c:633
+#: ../cli/src/connections.c:526
msgid "activated"
msgstr "સકà«àª°àª¿àª¯ થયેલ છે"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:530
+msgid "deactivated"
+msgstr "અસકà«àª°àª¿àª¯"
+
+#: ../cli/src/connections.c:542
msgid "VPN connecting (prepare)"
msgstr "VPN જોડાઇ રહà«àª¯à« છે (તૈયાર કરો)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:544
msgid "VPN connecting (need authentication)"
msgstr "VPN જોડાઇ રહà«àª¯à« છે (સતà«àª¤àª¾àª§àª¿àª•àª°àª£àª¨à«€ જરૂર છે)"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:546
msgid "VPN connecting"
msgstr "VPN જોડાઇ રહà«àª¯à« છે"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:548
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN જોડાઇ રહà«àª¯à« છે (IP રૂપરેખાંકનને મેળવી રહà«àª¯àª¾ છે)"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:550
msgid "VPN connected"
msgstr "VPN જોડાયેલ છે"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:552
msgid "VPN connection failed"
msgstr "VPN જોડાણ નિષà«àª«àª³"
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:554
msgid "VPN disconnected"
msgstr "VPN જોડાણ તૂટી ગયà«"
-#: ../cli/src/connections.c:712 ../cli/src/connections.c:722
+#: ../cli/src/connections.c:637
+msgid "Connection profile details"
+msgstr "જોડાણો રૂપરેખા વિગતો"
+
+#: ../cli/src/connections.c:649 ../cli/src/connections.c:1046
+#, c-format
+msgid "Error: 'connection show': %s"
+msgstr "ભૂલ: 'જોડાણ બતાવો': %s"
+
+#: ../cli/src/connections.c:843
+msgid "never"
+msgstr "કદી નહિં"
+
+#. "CAPABILITIES"
+#: ../cli/src/connections.c:844 ../cli/src/connections.c:845
+#: ../cli/src/connections.c:847 ../cli/src/connections.c:906
+#: ../cli/src/connections.c:907 ../cli/src/connections.c:909
+#: ../cli/src/connections.c:6377 ../cli/src/connections.c:6378
+#: ../cli/src/devices.c:606 ../cli/src/devices.c:656 ../cli/src/devices.c:798
+#: ../cli/src/devices.c:799 ../cli/src/devices.c:800 ../cli/src/devices.c:833
+#: ../cli/src/devices.c:862 ../cli/src/devices.c:863 ../cli/src/devices.c:864
+#: ../cli/src/devices.c:865 ../cli/src/devices.c:866 ../cli/src/devices.c:867
+#: ../cli/src/devices.c:868 ../cli/src/network-manager.c:442
+msgid "yes"
+msgstr "હાં"
+
+#: ../cli/src/connections.c:844 ../cli/src/connections.c:845
+#: ../cli/src/connections.c:847 ../cli/src/connections.c:906
+#: ../cli/src/connections.c:907 ../cli/src/connections.c:909
+#: ../cli/src/connections.c:6377 ../cli/src/connections.c:6378
+#: ../cli/src/devices.c:606 ../cli/src/devices.c:656 ../cli/src/devices.c:798
+#: ../cli/src/devices.c:799 ../cli/src/devices.c:800 ../cli/src/devices.c:833
+#: ../cli/src/devices.c:862 ../cli/src/devices.c:863 ../cli/src/devices.c:864
+#: ../cli/src/devices.c:865 ../cli/src/devices.c:866 ../cli/src/devices.c:867
+#: ../cli/src/devices.c:868 ../cli/src/network-manager.c:444
+msgid "no"
+msgstr "ના"
+
+#: ../cli/src/connections.c:902 ../cli/src/connections.c:912
+#: ../cli/src/devices.c:596
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "ભૂલ: 'con status': %s"
+#: ../cli/src/connections.c:1034
+msgid "Activate connection details"
+msgstr "જોડાણ વિગતો સકà«àª°àª¿àª¯ કરો"
-#: ../cli/src/connections.c:918 ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1267
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "ભૂલ: 'con status': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
-
-#: ../cli/src/connections.c:926
-msgid "Active connection details"
-msgstr "સકà«àª°àª¿àª¯ જોડાણ વિગતો"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "અયોગà«àª¯ કà«àª·à«‡àª¤à«àª° '%s'; માનà«àª¯ કà«àª·à«‡àª¤à«àª°à«‹: %s અને %s, અથવા %s,%s"
-#: ../cli/src/connections.c:1062 ../cli/src/connections.c:1724
-#: ../cli/src/connections.c:1836 ../cli/src/connections.c:1927
-#: ../cli/src/devices.c:933 ../cli/src/devices.c:995 ../cli/src/devices.c:1161
-#: ../cli/src/devices.c:1294 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1941 ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1282 ../cli/src/connections.c:1290
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "ભૂલ: મળી શકતૠનથી જો NetworkManager ચાલી રહà«àª¯à« હોય: %s."
+msgid "'%s' has to be alone'"
+msgstr "'%s' ઠàªàª•àª²à« હોવૠજ જોઇàª'"
-#: ../cli/src/connections.c:1066 ../cli/src/connections.c:1728
-#: ../cli/src/connections.c:1840 ../cli/src/connections.c:1931
-#: ../cli/src/devices.c:937 ../cli/src/devices.c:999 ../cli/src/devices.c:1165
-#: ../cli/src/devices.c:1298 ../cli/src/devices.c:1717
-#: ../cli/src/devices.c:1945 ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1321 ../cli/src/connections.c:2047
+#: ../cli/src/connections.c:2107 ../cli/src/connections.c:7877
+#: ../cli/src/connections.c:7993 ../cli/src/connections.c:8086
+#: ../cli/src/connections.c:8114 ../cli/src/devices.c:1199
+#: ../cli/src/devices.c:1247 ../cli/src/devices.c:1405
+#: ../cli/src/devices.c:1540 ../cli/src/devices.c:1677
+#: ../cli/src/devices.c:2121 ../cli/src/devices.c:2420
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "ભૂલ: NetworkManager ચાલી રહà«àª¯à« નથી."
-#: ../cli/src/connections.c:1098
-msgid "Active connections"
-msgstr "સકà«àª°àª¿àª¯ જોડાણો"
+#. Add headers
+#: ../cli/src/connections.c:1351
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager સકà«àª°àª¿àª¯ રૂપરેખાઓ"
+
+#: ../cli/src/connections.c:1352
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager જોડાણ રૂપરેખાઓ"
+
+#: ../cli/src/connections.c:1389 ../cli/src/connections.c:1992
+#: ../cli/src/connections.c:2008 ../cli/src/connections.c:2017
+#: ../cli/src/connections.c:2027 ../cli/src/connections.c:2124
+#: ../cli/src/connections.c:7848 ../cli/src/connections.c:8024
+#: ../cli/src/devices.c:1635 ../cli/src/devices.c:1643
+#: ../cli/src/devices.c:2034 ../cli/src/devices.c:2041
+#: ../cli/src/devices.c:2055 ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2079 ../cli/src/devices.c:2087
+#: ../cli/src/devices.c:2283 ../cli/src/devices.c:2379
+#: ../cli/src/devices.c:2386
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "ભૂલ: %s દલીલ ગેરહાજર છે."
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1440
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "ભૂલ: '%s' સકà«àª°àª¿àª¯ જોડાણ નથી."
+msgid "Error: %s - no such connection profile."
+msgstr "ભૂલ: %s - આવી કોઈ જોડાણ રૂપરેખાનથી."
-#: ../cli/src/connections.c:1128
+#: ../cli/src/connections.c:1456 ../cli/src/connections.c:2060
+#: ../cli/src/connections.c:8092 ../cli/src/connections.c:8133
+#: ../cli/src/connections.c:8280 ../cli/src/devices.c:2262
+#: ../cli/src/devices.c:2636 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "ભૂલ: અજà«àªžàª¾àª¤ પરિમાણ: %s"
+msgid "Error: %s."
+msgstr "ભૂલ: %s."
-#: ../cli/src/connections.c:1235
+#: ../cli/src/connections.c:1551
#, c-format
msgid "no active connection on device '%s'"
msgstr "ઉપકરણ '%s' પર સકà«àª°àª¿àª¯ જોડાણ નથી"
-#: ../cli/src/connections.c:1243
+#: ../cli/src/connections.c:1559
msgid "no active connection or device"
msgstr "સકà«àª°àª¿àª¯ જોડાણ અથવા ઉપકરણ નથી"
-#: ../cli/src/connections.c:1314
+#: ../cli/src/connections.c:1630
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "ઉપકરણ '%s' ઠજોડાણ '%s' સાથે સà«àª¸àª‚ગત નથી"
-#: ../cli/src/connections.c:1317
+#: ../cli/src/connections.c:1633
#, c-format
msgid "no device found for connection '%s'"
msgstr "જોડાણ '%s' માટે ઉપકરણ મળà«àª¯à« નથી"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1645
msgid "unknown reason"
msgstr "અજà«àªžàª¾àª¤ કારણ"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1647 ../cli/src/network-manager.c:288
msgid "none"
msgstr "કંઇ નહિં"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1649
msgid "the user was disconnected"
msgstr "વપરાશકરà«àª¤àª¾àª¨à«àª‚ જોડાણ તૂટી ગયૠહતà«"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1651
msgid "the base network connection was interrupted"
msgstr "આધાર નેટવરà«àª• જોડાણ અવરોધેલ હતà«"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1653
msgid "the VPN service stopped unexpectedly"
msgstr "VPN સેવા અનિચà«àª›àª¨àª¿àª¯ રીતે બંધ થયેલ છે"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1655
msgid "the VPN service returned invalid configuration"
msgstr "VPN સેવા ઠઅયોગà«àª¯ રૂપરેખાંકનને પાછૠમેળવેલ છે"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1657
msgid "the connection attempt timed out"
msgstr "જોડાણનો પà«àª°àª¯àª¤à«àª¨ કરવાનો સમય સમાપà«àª¤ થઇ ગયો"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1659
msgid "the VPN service did not start in time"
msgstr "VPN સેવા ઠસમય પર શરૂ થઇ ન હતી"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1661
msgid "the VPN service failed to start"
msgstr "શરૂ કરતી વખતે VPN સેવા નિષà«àª«àª³"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1663
msgid "no valid VPN secrets"
msgstr "યોગà«àª¯ VPN ખાનગીઓ નથી"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1665
msgid "invalid VPN secrets"
msgstr "અયોગà«àª¯ VPN ખાનગીપણા"
-#: ../cli/src/connections.c:1351
+#: ../cli/src/connections.c:1667
msgid "the connection was removed"
msgstr "જોડાણને દૂર કરાયેલ હતà«"
-#: ../cli/src/connections.c:1368 ../cli/src/connections.c:1573
+#: ../cli/src/connections.c:1684 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:6280
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "જોડાણ સફળતાપૂરà«àªµàª• સકà«àª°àª¿àª¯ થયેલ છે (D-Bus સકà«àª°àª¿àª¯ પાથ: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1373 ../cli/src/connections.c:1474
+#: ../cli/src/connections.c:1689
#, c-format
msgid "Error: Connection activation failed."
msgstr "ભૂલ: જોડાણ સકà«àª°àª¿àª¯ કરવાનà«àª‚ નિષà«àª«àª³."
-#: ../cli/src/connections.c:1398
+#: ../cli/src/connections.c:1714
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN જોડાણ સફળતાપૂરà«àªµàª• સકà«àª°àª¿àª¯ થયેલ છે (D-Bus સકà«àª°àª¿àª¯ પાથ: %s)\n"
-#: ../cli/src/connections.c:1406
+#: ../cli/src/connections.c:1721
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "ભૂલ: જોડાણ સકà«àª°àª¿àª¯ કરવાનà«àª‚ નિષà«àª«àª³: %s."
-#: ../cli/src/connections.c:1503 ../cli/src/devices.c:1055
+#: ../cli/src/connections.c:1739 ../cli/src/devices.c:1296
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "ભૂલ: સમયસમાપà«àª¤àª¿ %d સેકંડ નો સમય સમાપà«àª¤ થઇ ગયો."
-#: ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:1804
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"ભૂલ: ઉપકરણ '%s' ઠસકà«àª°àª¿àª¯àª•àª°àª£ સાથે પà«àª°àª•à«àª°àª¿àª¯àª¾ કરતા પહેલાં સà«àª²à«‡àªµ માટે રાહ જોઇ "
+"રહà«àª¯à« છે."
+
+#: ../cli/src/connections.c:1824
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "ભૂલ: જોડાણ સકà«àª°àª¿àª¯ કરવાનà«àª‚ નિષà«àª«àª³: %s"
-#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1812
-#: ../cli/src/connections.c:1940
+#: ../cli/src/connections.c:1929 ../cli/src/connections.c:2061
+msgid "unknown error"
+msgstr "અજà«àªžàª¾àª¤ ભૂલ"
+
+#: ../cli/src/connections.c:1937
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "ભૂલ: અજà«àªžàª¾àª¤ જોડાણ: %s."
+msgid "unknown device '%s'."
+msgstr "અજà«àªžàª¾àª¤ ઉપકરણ '%s'."
+
+#: ../cli/src/connections.c:1942
+msgid "neither a valid connection nor device given"
+msgstr "કà«àª¯àª¾àª‚તો યોગà«àª¯ જોડાણ અથવા ઉપકરણ આપેલ નથી"
-#: ../cli/src/connections.c:1704 ../cli/src/devices.c:1140
-#: ../cli/src/devices.c:1686
+#: ../cli/src/connections.c:1980 ../cli/src/connections.c:2092
+#: ../cli/src/connections.c:8000
+msgid "Connection (name, UUID, or path): "
+msgstr "જોડાણ (નામ, UUID, અથવા પાથ): "
+
+#: ../cli/src/connections.c:2036 ../cli/src/devices.c:1173
+#: ../cli/src/devices.c:1649 ../cli/src/devices.c:2098
+#: ../cli/src/devices.c:2392
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "ભૂલ: સમયસમાપà«àª¤àª¿ કિંમત '%s' યોગà«àª¯ નથી."
+msgid "Unknown parameter: %s\n"
+msgstr "અજà«àªžàª¾àª¤ પરિમાણ: %s\n"
+
+#: ../cli/src/connections.c:2069
+msgid "preparing"
+msgstr "તૈયારી કરી રહà«àª¯àª¾ છે"
-#: ../cli/src/connections.c:1717 ../cli/src/connections.c:1829
-#: ../cli/src/connections.c:1920
+#: ../cli/src/connections.c:2097 ../cli/src/connections.c:8005
+#: ../cli/src/connections.c:8120
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "ભૂલ: id અથવા uuid ને સà«àªªàª·à«àªŸ કરવૠજ પડશે."
+msgid "Error: No connection specified."
+msgstr "ભૂલ: જોડાણ સà«àªªàª·à«àªŸ થયેલ નથી."
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:2134
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "ભૂલ: સà«àª¸àª‚ગત ઉપકરણ મળà«àª¯à« નથી: %s."
+msgid "Error: '%s' is not an active connection."
+msgstr "ભૂલ: '%s' સકà«àª°àª¿àª¯ જોડાણ નથી."
-#: ../cli/src/connections.c:1751
+#: ../cli/src/connections.c:2446 ../cli/src/utils.c:507
#, c-format
-msgid "Error: No suitable device found."
-msgstr "ભૂલ: સà«àª¸àª‚ગત ઉપકરણ મળà«àª¯à« નથી."
+msgid "'%s' not among [%s]"
+msgstr "'%s' ઠ[%s] ની વચà«àªšà«‡ નથી"
-#: ../cli/src/connections.c:1865
+#: ../cli/src/connections.c:2528
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "ચેતવણી: જોડાણ સકà«àª°àª¿àª¯ થયેલ નથી\n"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "ભૂલ: '%s': '%s' ઠયોગà«àª¯ %s MAC સરનામà«àª‚ નથી."
+
+#: ../cli/src/connections.c:2529 ../libnm-glib/nm-device.c:1822
+#: ../tui/nm-editor-utils.c:173
+msgid "InfiniBand"
+msgstr "ઇનà«àª«àª¿àª¨àª¿àª¬à«‡àª¨à«àª¡"
-#: ../cli/src/connections.c:1879
+#: ../cli/src/connections.c:2529 ../libnm-glib/nm-device.c:1810
+#: ../tui/nm-editor-utils.c:156
+msgid "Ethernet"
+msgstr "ઇથરનેટ"
+
+#: ../cli/src/connections.c:2552
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "ભૂલ: જોડાણ નિરાકરણ નિષà«àª«àª³: %s"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "ભૂલ: 'mtu': '%s' ઠયોગà«àª¯ MTU નથી."
-#: ../cli/src/connections.c:2000
+#: ../cli/src/connections.c:2568
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "ભૂલ: 'con' આદેશ '%s' યોગà«àª¯ નથી."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "ભૂલ: 'મà«àª–à«àª¯': '%s' ઠયોગà«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ નામ નથી."
-#: ../cli/src/connections.c:2068
+#: ../cli/src/connections.c:2589
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "ભૂલ: D-Bus નà«àª‚ જોડાણ કરી શકà«àª¯àª¾ નહિં."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "ભૂલ: 'p-key': '%s' ઠયોગà«àª¯ InfiniBand P_KEY નથી."
-#: ../cli/src/connections.c:2076
+#: ../cli/src/connections.c:2605
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "ભૂલ: સિસà«àªŸàª® સà«àª¯à«‹àªœàª¨à«‹àª¨à«‡ મેળવી શકà«àª¯àª¾ નથી."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"ભૂલ: 'સà«àª¥àª¿àª¤àª¿': '%s' ઠયોગà«àª¯ InfiniBand પરિવહન સà«àª¥àª¿àª¤àª¿ છે [ડેટાગà«àª°àª¾àª®, જોડાયેલ]."
-#: ../cli/src/connections.c:2086
+#: ../cli/src/connections.c:2621
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "ભૂલ: જોડાણોને પà«àª°àª¾àªªà«àª¤ કરી શકાતા નથી: સà«àª¯à«‹àªœàª¨à«‹ સેવાઓ ચાલી રહી નથી."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "ભૂલ: 'flags': '%s' ઠયોગà«àª¯ નથી; <0-7> વાપરો."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:108 ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2643
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "ભૂલ: '%s': '%s' ઠયોગà«àª¯ નથી; %s "
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2750
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "ભૂલ: '%s': '%s' ઠયોગà«àª¯ નથી; <%u-%u> ને વાપરો."
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2764
+msgid "ethernet"
+msgstr "ઇથરનેટ"
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2764 ../libnm-glib/nm-device.c:1812
+#: ../tui/nm-editor-utils.c:164
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2767
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ '%s' જોડાણ પà«àª°àª•àª¾àª° માટે 3 દલીલો છે.\n"
-#. 4
-#: ../cli/src/devices.c:87
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../cli/src/connections.c:2768 ../cli/src/connections.c:2822
+#: ../cli/src/connections.c:2944 ../cli/src/connections.c:2990
+#: ../cli/src/connections.c:3050 ../cli/src/connections.c:3118
+#: ../cli/src/connections.c:3281 ../cli/src/connections.c:3377
+#: ../cli/src/connections.c:3459
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "શà«àª‚ તમે તેઓને પૂરૠપાડવા માંગો છો (હાં/ના) [હાં]"
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2776 ../cli/src/connections.c:2830
+#: ../cli/src/connections.c:2957 ../cli/src/connections.c:3058
+msgid "MTU [auto]: "
+msgstr "MTU [આપોઆપ]: "
-#. 6
-#: ../cli/src/devices.c:89
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2787 ../cli/src/connections.c:2841
+#: ../cli/src/connections.c:2920 ../cli/src/connections.c:2968
+msgid "MAC [none]: "
+msgstr "MAC [કઇ નહિં]: "
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2798
+msgid "Cloned MAC [none]: "
+msgstr "કà«àª²à«‹àª¨ થયેલ MAC [કઇ નહિં]: "
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'InfiniBand' જોડાણ પà«àª°àª•àª¾àª° માટે 5 વૈકલà«àªªàª¿àª• દલીલો છે.\n"
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2852
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "પરિવહન સà«àª¥àª¿àª¤àª¿ (ડેટાગà«àª°àª¾àª® અથવા જોડાયેલ) [ડેટાગà«àª°àª¾àª®]:"
-#. 10
-#: ../cli/src/devices.c:93
-msgid "BOND"
-msgstr "BOND"
+#: ../cli/src/connections.c:2865
+msgid "Parent interface [none]: "
+msgstr "મà«àª–à«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ [કઇ નહિં]: "
-#. 11
-#: ../cli/src/devices.c:94
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2876
+msgid "P_KEY [none]: "
+msgstr "P_KEY [કઇ નહિં]: "
+
+#: ../cli/src/connections.c:2886
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "ભૂલ: 'p-key' ફરજિયાત છે જà«àª¯àª¾àª°à«‡ 'મà«àª–à«àª¯' સà«àªªàª·à«àªŸ થયેલ હોય.\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2911
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'WiMax' જોડાણ પà«àª°àª•àª¾àª° માટે 1 વૈકલà«àªªàª¿àª• દલીલ છે.\n"
+
+#: ../cli/src/connections.c:2912 ../cli/src/connections.c:3014
+#: ../cli/src/connections.c:3233 ../cli/src/connections.c:3435
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "શà«àª‚ તમે તેને પૂરૠપાડવા માંગો છો (હાં/ના) [હાં]"
+
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:2943
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "'PPPoE' જોડાણ પà«àª°àª•àª¾àª° માટે ૪ વૈકલà«àªªàª¿àª• દલીલો છે.\n"
+
+#: ../cli/src/connections.c:2951 ../cli/src/connections.c:2999
+msgid "Password [none]: "
+msgstr "પાસવરà«àª¡ [કઇ નહિં]: "
+
+#: ../cli/src/connections.c:2953
+msgid "Service [none]: "
+msgstr "સેવા [કંઇ નહિ]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:2989
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'મોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡' જોડાણ પà«àª°àª•àª¾àª° માટે 2 વૈકલà«àªªàª¿àª• દલીલો છે.\n"
+
+#: ../cli/src/connections.c:2997 ../cli/src/connections.c:3442
+msgid "Username [none]: "
+msgstr "વપરાશકરà«àª¤àª¾àª¨àª¾àª® [કંઇ નહિં]"
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3013
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'બà«àª²à«àªŸà«àª¥' જોડાણ પà«àª°àª•àª¾àª° માટે 1 વૈકલà«àªªàª¿àª• દલીલ છે.\n"
+
+#: ../cli/src/connections.c:3022
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "બà«àª²à«àªŸà«àª¥ પà«àª°àª•àª¾àª° (panu, dun-gsm or dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:3030
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "ભૂલ: 'bt-type': '%s' ઠયોગà«àª¯ બà«àª²à«àªŸà«àª¥ પà«àª°àª•àª¾àª° નથી.\n"
+
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:3049
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'VLAN' જોડાણ પà«àª°àª•àª¾àª° માટે 4 વૈકલà«àªªàª¿àª• દલીલો છે.\n"
+
+#: ../cli/src/connections.c:3069
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN ફà«àª²à«‡àª— (<0-7>) [કઇ નહિં]: "
+
+#: ../cli/src/connections.c:3080
+msgid "Ingress priority maps [none]: "
+msgstr "પà«àª°àªµà«‡àª¶ અગà«àª°àª¤àª¾ નકà«àª·à«‹ [કઇ નહિં]:"
+
+#: ../cli/src/connections.c:3091
+msgid "Egress priority maps [none]: "
+msgstr "બહાર નીકળવાનો મારà«àª— અગà«àª°àª¤àª¾ નકà«àª·à«‹ [કઇ નહિં]:"
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:3117
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'બોનà«àª¡' જોડાણ પà«àª°àª•àª¾àª° માટે વૈકલà«àªªàª¿àª• દલીલો છે.\n"
+
+#: ../cli/src/connections.c:3127
+msgid "Bonding mode [balance-rr]: "
+msgstr "બોનà«àª¡à«€àª‚ગ સà«àª¥àª¿àª¤àª¿ [balance-rr]: "
+
+#: ../cli/src/connections.c:3143
+msgid "Bonding primary interface [none]: "
+msgstr "બોનà«àª¡à«€àª‚ગ પà«àª°àª¾àª¥àª®àª¿àª• ઇનà«àªŸàª°àª«à«‡àª¸ [કંઇ નહિં]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "ભૂલ: 'પà«àª°àª¾àª¥àª®àª¿àª•': '%s' ઠયોગà«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ નામ નથી.\n"
+
+#: ../cli/src/connections.c:3154
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "બોનà«àª¡à«€àª‚ગ મોનીટરીંગ સà«àª¥àª¿àª¤àª¿ (miimon અથવા arp) [miimon]: "
+
+#: ../cli/src/connections.c:3159
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr "ભૂલ: '%s' ઠયોગà«àª¯ મોનિટરીંગ સà«àª¥àª¿àª¤àª¿ નથી; '%s' અથવા '%s' ને વાપરો.\n"
+
+#: ../cli/src/connections.c:3168
+msgid "Bonding miimon [100]: "
+msgstr "બોનà«àª¡à«€àª‚ગ miimon [100]: "
+
+#: ../cli/src/connections.c:3171
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "ભૂલ: 'miimon': '%s' ઠયોગà«àª¯ નંબર <0-%u> નથી.\n"
+
+#: ../cli/src/connections.c:3179
+msgid "Bonding downdelay [0]: "
+msgstr "બોનà«àª¡à«€àª‚ગ downdelay [0]: "
+
+#: ../cli/src/connections.c:3182
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "ભૂલ: 'downdelay': '%s' ઠયોગà«àª¯ નંબર <0-%u> નથી.\n"
+
+#: ../cli/src/connections.c:3190
+msgid "Bonding updelay [0]: "
+msgstr "બોનà«àª¡à«€àª‚ગ updelay [0]: "
+
+#: ../cli/src/connections.c:3193
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "ભૂલ: 'updelay': '%s' ઠયોગà«àª¯ નંબર <0-%u> નથી.\n"
+
+#: ../cli/src/connections.c:3202
+msgid "Bonding arp-interval [0]: "
+msgstr "બોનà«àª¡à«€àª‚ગ arp-interval [0]: "
+
+#: ../cli/src/connections.c:3205
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "ભૂલ: 'arp-interval': '%s' ઠયોગà«àª¯ નંબર <0-%u> નથી.\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3213
+msgid "Bonding arp-ip-target [none]: "
+msgstr "બોનà«àª¡à«€àª‚ગ arp-ip-target [કઇ નહિં]: "
+
+#. Ask for optional 'team' arguments.
+#: ../cli/src/connections.c:3232
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "'%s' જોડાણ પà«àª°àª•àª¾àª° માટે ૧ વૈકલà«àªªàª¿àª• દલીલ છે.\n"
+
+#: ../cli/src/connections.c:3241
+msgid "Team JSON configuration [none]: "
+msgstr "ટà«àª•àª¡à«€ JSON રૂપરેખાંકન [કંઇ નહિ]: "
+
+#: ../cli/src/connections.c:3260
+msgid "team"
+msgstr "ટà«àª•àª¡à«€"
+
+#: ../cli/src/connections.c:3266
+msgid "team-slave"
+msgstr "team-slave"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3280
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'બà«àª°àª¿àªœ' જોડાણ પà«àª°àª•àª¾àª° માટે 6 વૈકલà«àªªàª¿àª• દલીલો છે.\n"
+
+#: ../cli/src/connections.c:3290
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP (હાં/ના) [હાં] સકà«àª°àª¿àª¯ કરો: "
+
+#: ../cli/src/connections.c:3294
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "ભૂલ: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3302
+msgid "STP priority [128]: "
+msgstr "STP પà«àª°àª¾àª§àª¾àª¨à«àª¯ [128]: "
+
+#: ../cli/src/connections.c:3306
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "ભૂલ: 'પà«àª°àª¾àª§àª¾àª¨à«àª¯': '%s' ઠયોગà«àª¯ નંબર <0-%d> નથી.\n"
+
+#: ../cli/src/connections.c:3314
+msgid "Forward delay [15]: "
+msgstr "આગળ વિલંબ [15]:"
+
+#: ../cli/src/connections.c:3318
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "ભૂલ: 'forward-delay': '%s' ઠયોગà«àª¯ નંબર <2-30> નથી.\n"
+
+#: ../cli/src/connections.c:3327
+msgid "Hello time [2]: "
+msgstr "કેમ છો સમય [2]: "
+
+#: ../cli/src/connections.c:3331
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "ભૂલ: 'કેમ છો સમય': '%s' ઠયોગà«àª¯ નંબર <1-10> નથી.\n"
+
+#: ../cli/src/connections.c:3339
+msgid "Max age [20]: "
+msgstr "મહતà«àª¤àª® ઉંમર [20]: "
+
+#: ../cli/src/connections.c:3343
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "ભૂલ: 'મહતà«àª¤àª® નંબર': '%s' ઠયોગà«àª¯ નંબર <6-40> નથી.\n"
+
+#: ../cli/src/connections.c:3351
+msgid "MAC address ageing time [300]: "
+msgstr "MAC સરનામાં àªàªœà«€àª‚ગ સમય [300]: "
+
+#: ../cli/src/connections.c:3355
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "ભૂલ: 'àªàªœà«€àª‚ગ સમય': '%s' ઠયોગà«àª¯ નંબર <0-1000000> નથી.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3376
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'બà«àª°àª¿àªœ-સà«àª²à«‡àªµ' જોડાણ પà«àª°àª•àª¾àª° માટે 3 વૈકલà«àªªàª¿àª• દલીલો છે.\n"
+
+#: ../cli/src/connections.c:3385
+msgid "Bridge port priority [32]: "
+msgstr "બà«àª°àª¿àªœ પોરà«àªŸ પà«àª°àª¾àª§àª¾àª¨à«àª¯ [32]: "
+
+#: ../cli/src/connections.c:3398
+msgid "Bridge port STP path cost [100]: "
+msgstr "બà«àª°àª¿àªœ પોરà«àªŸ STP પાથ કિંમત [100]: "
+
+#: ../cli/src/connections.c:3412
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (હાં/ના) [હાં]: "
+
+#: ../cli/src/connections.c:3416
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "ભૂલ: 'hairpin': '%s'.\n"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:3434
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'VPN' જોડાણ પà«àª°àª•àª¾àª° માટે 1 વૈકલà«àªªàª¿àª• દલીલ છે.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3458
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "તà«àª¯àª¾àª‚ 'OLPC Mesh' જોડાણ પà«àª°àª•àª¾àª° માટે 2 વૈકલà«àªªàª¿àª• દલીલો છે.\n"
+
+#: ../cli/src/connections.c:3467
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC મેશ ચેનલ [1]: "
+
+#: ../cli/src/connections.c:3470
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "ભૂલ: 'ચેનલ': '%s' ઠયોગà«àª¯ નંબર <1-13> નથી.\n"
+
+#: ../cli/src/connections.c:3478
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC સરનામà«àª‚ [કઇ નહિં]: "
+
+#: ../cli/src/connections.c:3526
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 સરનામà«àª‚ (IP[/plen] [ગેટવે]) [કઇ નહિં]: "
+
+#: ../cli/src/connections.c:3528
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 સરનામà«àª‚ (IP[/plen] [ગેટવે]) [કઇ નહિં]: "
+
+#: ../cli/src/connections.c:3546
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " સરનામાંને સફળતાપૂરà«àªµàª• ઉમેરાયેલ છે: %s %s\n"
+
+#: ../cli/src/connections.c:3548
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " ચેતવણી: સરનામà«àª‚ પહેલેથી હાજર છે: %s %s\n"
+
+#: ../cli/src/connections.c:3550
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " ચેતવણી: અંતે કચરાને અવગણી રહà«àª¯àª¾ છે: '%s'\n"
+
+#: ../cli/src/connections.c:3552 ../cli/src/connections.c:4401
+#: ../cli/src/connections.c:4456 ../cli/src/connections.c:4855
+#: ../cli/src/connections.c:4865
+msgid "Error: "
+msgstr "ભૂલ: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3570
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "શà«àª‚ તમે IP સરનામાંને ઉમેરવા માંગો છો? (હાં/ના) [હાં]"
+
+#: ../cli/src/connections.c:3576
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "સરનામાંને ઉમેરવાનૠસમાપà«àª¤ કરવા માટે <Enter> દબાવો.\n"
+
+#: ../cli/src/connections.c:3722
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "ભૂલ: 'મà«àª–à«àª¯': 'p-key' વગર યોગà«àª¯ નથી."
+
+#: ../cli/src/connections.c:3778 ../cli/src/connections.c:4771
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3781 ../cli/src/connections.c:4774
+msgid "Error: 'ssid' is required."
+msgstr "ભૂલ: 'ssid' જરૂરી છે."
+
+#: ../cli/src/connections.c:3845
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP નામ: "
+
+#: ../cli/src/connections.c:3848
+msgid "Error: 'nsp' is required."
+msgstr "ભૂલ: 'nsp' જરૂરી છે."
+
+#: ../cli/src/connections.c:3903
+msgid "PPPoE username: "
+msgstr "PPPoE વપરાશકરà«àª¤àª¾àª¨àª¾àª®: "
+
+#: ../cli/src/connections.c:3906
+msgid "Error: 'username' is required."
+msgstr "કà«àª·àª¤àª¿: 'username' જરૂરી છે."
+
+#: ../cli/src/connections.c:3977
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3980
+msgid "Error: 'apn' is required."
+msgstr "ભૂલ: 'apn' જરૂરી છે."
+
+#: ../cli/src/connections.c:4039
+msgid "Bluetooth device address: "
+msgstr "બà«àª²à«àªŸà«àª¥ ઉપકરણ સરનામà«àª‚: "
+
+#: ../cli/src/connections.c:4042
+msgid "Error: 'addr' is required."
+msgstr "ભૂલ: 'addr' જરૂરી છે."
+
+#: ../cli/src/connections.c:4085
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "ભૂલ: 'bt-type': '%s' યોગà«àª¯ નથી; [%s, %s (%s), %s] વાપરો."
+
+#: ../cli/src/connections.c:4130
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN મà«àª–à«àª¯ ઉપકરણ અથવા જોડાણ UUID: "
+
+#: ../cli/src/connections.c:4133
+msgid "Error: 'dev' is required."
+msgstr "ભૂલ: 'dev' જરૂરી છે."
+
+#: ../cli/src/connections.c:4137
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:4140
+msgid "Error: 'id' is required."
+msgstr "ભૂલ: 'id' જરૂરી છે."
+
+#: ../cli/src/connections.c:4146
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "ભૂલ: 'id': '%s' ઠયોગà«àª¯ નથી; <0-4095> વાપરો."
+
+#: ../cli/src/connections.c:4156
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "ભૂલ: 'dev': '%s' ઠકà«àª¯àª¾àª‚તો UUID, ઇનà«àªŸàª°àª«à«‡àª¸ નામ, અથવા MAC નથી."
+
+#: ../cli/src/connections.c:4291
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "ભૂલ: 'સà«àª¥àª¿àª¤àª¿': %s."
+
+#: ../cli/src/connections.c:4300
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "ભૂલ: 'પà«àª°àª¾àª¥àª®àª¿àª•': '%s' ઠયોગà«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ નામ નથી."
+
+#: ../cli/src/connections.c:4343
+msgid "Bond master: "
+msgstr "બોનà«àª¡ માસà«àªŸàª°: "
+
+#: ../cli/src/connections.c:4346 ../cli/src/connections.c:4438
+#: ../cli/src/connections.c:4625
+msgid "Error: 'master' is required."
+msgstr "ભૂલ: 'મà«àª–à«àª¯' જરૂરી છે."
+
+#: ../cli/src/connections.c:4351 ../cli/src/connections.c:4448
+#: ../cli/src/connections.c:4636
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"ચેતવણી: 'પà«àª°àª•àª¾àª°' ને હાલમાં અવગણેલ છે. અમે ફકà«àª¤ અતà«àª¯àª¾àª°à«‡ ઇથરનેટ સà«àª²à«‡àªµàª¨à«‡ આધાર "
+"આપીઠછે.\n"
+
+#: ../cli/src/connections.c:4435
+msgid "Team master: "
+msgstr "જૂથ માસà«àªŸàª°:"
+
+#: ../cli/src/connections.c:4538
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "ભૂલ: 'stp': %s."
+
+#: ../cli/src/connections.c:4622
+msgid "Bridge master: "
+msgstr "બà«àª°àª¿àªœ માસà«àªŸàª°: "
+
+#: ../cli/src/connections.c:4630
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "ભૂલ: 'મà«àª–à«àª¯': '%s' ઠયોગà«àª¯ UUID અથવા ઇનà«àªŸàª°àª«à«‡àª¸ નથી."
+
+#: ../cli/src/connections.c:4663
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "ભૂલ: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4715
+msgid "VPN type: "
+msgstr "VPN પà«àª°àª•àª¾àª°: "
+
+#: ../cli/src/connections.c:4718
+msgid "Error: 'vpn-type' is required."
+msgstr "ભૂલ: 'vpn-type' જરૂરી છે."
+
+#: ../cli/src/connections.c:4729
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "ભૂલ: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4787
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "ભૂલ: 'ચેનલ': '%s' યોગà«àª¯ નથી; <1-13> વાપરો."
+
+#: ../cli/src/connections.c:4822
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "ભૂલ: '%s' ઠયોગà«àª¯ જોડાણ પà«àª°àª•àª¾àª° નથી."
+
+#: ../cli/src/connections.c:4920
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "ભૂલ: '%s' જોડાણને ઉમેરવામાં નિષà«àª«àª³àª¤àª¾: (%d) %s"
+
+#: ../cli/src/connections.c:4924
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "જોડાણ '%s' (%s) સફળતાપૂરà«àªµàª• ઉમેરાઇ ગયà«.\n"
+
+#: ../cli/src/connections.c:4998
+msgid "Connection type: "
+msgstr "જોડાણ પà«àª°àª•àª¾àª°: "
+
+#: ../cli/src/connections.c:5002
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "ભૂલ: 'પà«àª°àª•àª¾àª°' દલીલ જરૂરી છે."
+
+#: ../cli/src/connections.c:5008
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "ભૂલ: અયોગà«àª¯ જોડાણ પà«àª°àª•àª¾àª°; %s."
+
+#: ../cli/src/connections.c:5017
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "ભૂલ: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:5027
+#, c-format
+msgid "Error: 'save': %s."
+msgstr "ભૂલ: 'save': %s."
+
+#: ../cli/src/connections.c:5043
+msgid "Interface name [*]: "
+msgstr "ઇનà«àªŸàª°àª«à«‡àª¸ નામ [*]: "
+
+#: ../cli/src/connections.c:5048
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "કà«àª·àª¤àª¿: 'ifname' દલીલ જરૂરી છે."
+
+#: ../cli/src/connections.c:5055
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Ytn: 'ifname': '%s' ઠયોગà«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ અથવા '*' નથી."
+
+#: ../cli/src/connections.c:5884
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' સà«àª¯à«‹àªœàª¨ કિંમતો]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5965
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save [persistent|temporary] :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ મà«àª–à«àª¯ મેનૠ]---\n"
+"goto [<setting> | <prop>] :: સà«àª¯à«‹àªœàª¨ અથવા ગà«àª£àª§àª°à«àª®àª®àª¾àª‚ જાવ\n"
+"remove <setting>[.<prop>] | <prop> :: સà«àª¯à«‹àªœàª¨àª¨à«‡ દૂર કરો અથવા ગà«àª£àª§àª°à«àª® કિંમતને "
+"પà«àª¨:"
+"સà«àª¯à«‹àªœàª¿àª¤ કરો\n"
+"set [<setting>.<prop> <value>] :: ગà«àª£àª§àª°à«àª® કિંમતને સà«àª¯à«‹àªœàª¿àª¤ કરો\n"
+"describe [<setting>.<prop>] :: ગà«àª£àª§àª°à«àª®àª¨à«‡ વરà«àª£àªµà«‹\n"
+"print [all] :: જોડાણને છાપો\n"
+"verify [all] :: જોડાણ ચકાસો\n"
+"save [persistent|temporary] :: જોડાણ સંગà«àª°àª¹à«‹\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: જોડાણને સકà«àª°àª¿àª¯ કરો\n"
+"back :: àªàª• સà«àª¤àª° ઉપર જાવ (પાછળ)\n"
+"help/? [<command>] :: આ મદદને છાપો\n"
+"nmcli <conf-option> <value> :: nmcli રૂપરેખાંકન\n"
+"quit :: nmcli માંથી બહાર નીકળો\n"
+
+#: ../cli/src/connections.c:5992
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: ફેરફાર કરવા માટે સà«àª¯à«‹àªœàª¨/ગà«àª£àª§àª°à«àª®àª¨à«‡ દાખલ "
+"કરો\n"
+"\n"
+"આ આદેશને તેને બદલવા માટે સà«àª¯à«‹àªœàª¨ અથવા ગà«àª£àª§àª°à«àª®àª®àª¾ દાખલ કરે છે.\n"
+"\n"
+"ઉદાહરણો: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5999
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: સà«àª¯à«‹àªœàª¨àª¨à«‡ દૂર કરો અથવા ગà«àª£àª§àª°à«àª® કિંમતને "
+"પà«àª¨:સà«àª¯à«‹àªœàª¿àª¤ કરો\n"
+"\n"
+"આ આદેશ જોડાણમાંથી બધા સà«àª¯à«‹àªœàª¨àª¨à«‡ દૂર કરે છે, અથવા જો ગà«àª£àª§àª°à«àª® આપેલ હોય તો, "
+"મૂળભૂત કિંમતમાં\n"
+"ગà«àª£àª§àª°à«àª®àª¨à«‡ પà«àª¨:સà«àª¯à«‹àªœàª¿àª¤ કરે છ.\n"
+"\n"
+"ઉદાહરણો: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:6006
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: ગà«àª£àª§àª°à«àª® કિંમતને સà«àª¯à«‹àªœàª¿àª¤ કરો\n"
+"\n"
+"આ આદેશ ગà«àª£àª§àª°à«àª® કિંમતને સà«àª¯à«‹àªœàª¿àª¤ કરે છે.\n"
+"\n"
+"ઉદાહરણ: nmcli> ઠcon.id મારાં જોડાણને સà«àª¯à«‹àªœàª¿àª¤ કરે છે\n"
+
+#: ../cli/src/connections.c:6011
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: ગà«àª£àª§àª°à«àª®àª¨à«‡ વરà«àª£àªµà«‹\n"
+"\n"
+"ગà«àª£àª§àª°à«àª® વરà«àª£àª¨àª¨à«‡ બતાવે છે. બધા NM સà«àª¯à«‹àªœàª¨à«‹ અને ગà«àª£àª§àª°à«àª®à«‹àª¨à«‡ જોવા માટે તમે "
+"nm-settings(5) "
+"પà«àª¸à«àª¤àª¿àª•àª¾ પાનાંનો સંપરà«àª• કરી શકો છો.\n"
+
+#: ../cli/src/connections.c:6016
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: સà«àª¯à«‹àªœàª¨ અથવા જોડાણ કિંમતને છાપો\n"
+"\n"
+"હાલનાં ગà«àª£àª§àª°à«àª® અથવા આખા જોડાણને બતાવે છે.\n"
+"\n"
+"ઉદાહરણ: nmcli ipv4> બધૠછાપો\n"
+
+#: ../cli/src/connections.c:6021
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: સà«àª¯à«‹àªœàª¨ ચકાસો અથવા જોડાણ માનà«àª¯àª¤àª¾\n"
+"\n"
+"ચકાસો કà«àª¯àª¾àª‚તો સà«àª¯à«‹àªœàª¨ અથવા જોડાણ ઠયોગà«àª¯ છે અને પછીથી તેને સંગà«àª°àª¹ કરી શકાય છે. "
+"તે ભૂલ પર "
+"અયોગà«àª¯ કિંમતોને સૂચવે છે.\n"
+"\n"
+"ઉદાહરણો: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:6028
+#, c-format
+msgid ""
+"save [persistent|temporary] :: save the connection\n"
+"\n"
+"Sends the connection profile to NetworkManager that either will save it\n"
+"pesistently, or will only keep it in memory. 'save' without an argument\n"
+"means 'save persistent'.\n"
+"Note that once you save the profile persistently those settings are saved\n"
+"across reboot or restart. Subsequent changes can also be temporary or\n"
+"persistent, but any temporary changes will not persist across reboot or\n"
+"restart. If you want to fully remove the persistent connection, the "
+"connection\n"
+"profile must be deleted.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:6039
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: જોડાણ સકà«àª°àª¿àª¯ કરો\n"
+"\n"
+"જોડાણને સકà«àª°àª¿àª¯ કરે છે.\n"
+"\n"
+"ઉપલબà«àª§ વિકલà«àªªà«‹:\n"
+"<ifname> - ઉપકરણનà«àª‚ જોડાણ તેની પર સકà«àª°àª¿àª¯ થયેલ હશે\n"
+"/<ap>|<nsp> - AP (Wi-Fi) અથવા NSP (WiMAX) (/ સાથે જોડાવો જà«àª¯àª¾àª°à«‡ <ifname> "
+"સà«àªªàª·à«àªŸ "
+"થયેલ ન હોય)\n"
+
+#: ../cli/src/connections.c:6046 ../cli/src/connections.c:6196
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: ઉપરનાં મેનૠસà«àª¤àª° પર જાવો\n"
+"\n"
+
+#: ../cli/src/connections.c:6049
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli આદેશો માટે મદદ\n"
+"\n"
+
+#: ../cli/src/connections.c:6052
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli રૂપરેખાંકન\n"
+"\n"
+"nmcli ને રૂપરેખાંકિત કરે છે. નીચેનાં વિકલà«àªªà«‹ ઉપલબà«àª§ છે:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"ઉદાહરણો: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:6072 ../cli/src/connections.c:6202
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli માંથી બહાર નીકળો\n"
+"\n"
+"આ આદેશ nmcli ને બહાર નીકાળે છે. જà«àª¯àª¾àª°à«‡ બદલાયેલ જોડાણ ઠસંગà«àª°àª¹ થયેલ ન હોય, "
+"વપરાશકરà«àª¤àª¾ "
+"કà«àª°àª¿àª¯àª¾àª¨à«€ ખાતરી કરવા માટે પૂછે છે.\n"
+
+#: ../cli/src/connections.c:6077 ../cli/src/connections.c:6207
+#: ../cli/src/connections.c:6581 ../cli/src/connections.c:7447
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "અજà«àªžàª¾àª¤ આદેશ: '%s'\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6143
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ ગà«àª£àª§àª°à«àª® મેનૠ]---\n"
+"set [<value>] :: નવી કિંમતને સà«àª¯à«‹àªœàª¿àª¤ કરો\n"
+"add [<value>] :: ગà«àª£àª§àª°à«àª®àª®àª¾àª‚ નવાં વિકલà«àªªàª¨à«‡ ઉમેરો\n"
+"change :: હાલની કિંમત બદલો\n"
+"remove [<index> | <option>] :: કિંમતને કાઢી નાંખો\n"
+"describe :: ગà«àª£àª§àª°à«àª®àª¨à«‡ વરà«àª£àªµà«‹\n"
+"print [setting | connection] :: ગà«àª£àª§àª°à«àª®àª¨à«‡ છાપો (સà«àª¯à«‹àªœàª¨/જોડાણ) કિંમત(ઓ)\n"
+"back :: ઉપકરનાં સà«àª¤àª°à«‡ જાવ\n"
+"help/? [<command>] :: આ મદદ અથવા આદેશ વરà«àª£àª¨àª¨à«‡ છાપો\n"
+"quit :: nmcli માંથી બહાર નીકળો\n"
+
+#: ../cli/src/connections.c:6168
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: નવી કિંમતને સà«àª¯à«‹àªœàª¿àª¤ કરો\n"
+"\n"
+"આ આદેશ આ ગà«àª£àª§àª°à«àª®àª®àª¾àª‚ પૂરી પાડેલ <value> ને સà«àª¯à«‹àªœàª¿àª¤ કરે છે\n"
+
+#: ../cli/src/connections.c:6172
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: ગà«àª£àª§àª°à«àª®àª®àª¾àª‚ નવાં વિકલà«àªªàª¨à«‡ ઉમેરો\n"
+"\n"
+"આ આદેશ આ ગà«àª£àª§àª°à«àª®àª®àª¾àª‚ પૂરી પાડેલ <value> ને ઉમેરે છે, જો ગà«àª£àª§àª°à«àª® પાતà«àª° "
+"પà«àª°àª•àª¾àª°àª¨à«àª‚ હોય તો. àªàª•àªœ "
+"કિંમત થયેલ ગà«àª£àª§àª°à«àª®à«‹ માટે તે કિંમતને બદલે છે ('સà«àª¯à«‹àªœàª¨' જેવૠજ).\n"
+
+#: ../cli/src/connections.c:6178
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: હાલની કિંમતને બદલો\n"
+"\n"
+"હાલની કિંમતને દરà«àª¶àª¾àªµà«‡ છે અને તેને બદલવાની પરવાનગી આપે છે.\n"
+
+#: ../cli/src/connections.c:6182
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: કિંમતને કાઢી નાંખો\n"
+"\n"
+"ગà«àª£àª§àª°à«àª® કિંમતને દૂર કરે છે (મૂળભૂતમાં તેને સà«àª¯à«‹àªœàª¿àª¤ કરે છે).\n"
+
+#: ../cli/src/connections.c:6186
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: ગà«àª£àª§àª°à«àª®àª¨à«‡ વરà«àª£àªµà«‹\n"
+"\n"
+"ગà«àª£àª§àª°à«àª® વરà«àª£àª¨àª¨à«‡ બતાવે છે. બધા NM સà«àª¯à«‹àªœàª¨à«‹ અને ગà«àª£àª§àª°à«àª®à«‹àª¨à«‡ જોવા માટે તમે "
+"nm-settings(5) "
+"પà«àª¸à«àª¤àª¿àª•àª¾ પાનાંનો સંપરà«àª• કરી શકો છો.\n"
+
+#: ../cli/src/connections.c:6191
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: ગà«àª£àª§àª°à«àª® છાપો (સà«àª¯à«‹àªœàª¨, જોડાણ) "
+"કિંમત(ઓ)\n"
+"\n"
+"ગà«àª£àª§àª°à«àª® કિંમતને બતાવે છે. દલીલને પૂરૠપાડી રહà«àª¯àª¾ છે તમે આખા સà«àª¯à«‹àªœàª¨ અથવા જોડાણ "
+"માટે કિંમતોને "
+"પણ દરà«àª¶àª¾àªµà«€ શકાય છે.\n"
+
+#: ../cli/src/connections.c:6199
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli આદેશો માટે મદદ\n"
+"\n"
+
+#: ../cli/src/connections.c:6286
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "ભૂલ: જોડાણ સકà«àª°àª¿àª¯àª•àª°àª£ નિષà«àª«àª³àª¤àª¾.\n"
+
+#: ../cli/src/connections.c:6357
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "ભૂલ: સà«àª¯à«‹àªœàª¨ '%s' ફરજિયાત છે અને દૂર કરી શકાતૠનથી.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6375
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ જોડાણ પà«àª°àª•àª¾àª°: %s | નામ: %s | UUID: %s | ખરાબ: %s | કામચલાઉ: %s ]\n"
+
+#: ../cli/src/connections.c:6438
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"અનà«àª¯ કà«àª²àª¾àª¯àª¨à«àªŸàª®àª¾àª‚થી જોડાણ રૂપરેખા દૂર કરવામાં આવી છે. તેને પà«àª¨àªƒàª¸àª‚ગà«àª°àª¹ કરવા "
+"માટે તમે મà«àª–à«àª¯ મેનà«àª®àª¾àª‚ "
+"'save' લખી શકો છો.\n"
+
+#: ../cli/src/connections.c:6460 ../cli/src/connections.c:6885
+#: ../cli/src/connections.c:6943
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' કિંમતને દાખલ કરો: "
+
+#: ../cli/src/connections.c:6477 ../cli/src/connections.c:6496
+#: ../cli/src/connections.c:6891 ../cli/src/connections.c:6950
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "ભૂલ: '%s' ગà«àª£àª§àª°à«àª®àª¨à«‡ સà«àª¯à«‹àªœàª¿àª¤ કરવામાં નિષà«àª«àª³àª¤àª¾: %s\n"
+
+#: ../cli/src/connections.c:6489
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' કિંમતમાં ફેરફાર કરો: "
+
+#: ../cli/src/connections.c:6518
+#, c-format
+msgid "Error: %s\n"
+msgstr "ભૂલ: %s\n"
+
+#: ../cli/src/connections.c:6524 ../cli/src/connections.c:7029
+#: ../cli/src/connections.c:7070
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "ભૂલ: '%s' ની કિંમતને દૂર કરવામાં નિષà«àª«àª³àª¤àª¾: %s\n"
+
+#: ../cli/src/connections.c:6545
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "અજà«àªžàª¾àª¤ આદેશ દલીલ: '%s'\n"
+
+#: ../cli/src/connections.c:6565 ../cli/src/connections.c:7435
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "જોડાણ સંગà«àª°àª¹à«‡àª² નથી. શà«àª‚ તમે ખરેખર બહાર નીકળવા માંગો છો? [હાં/ના]\n"
+
+#: ../cli/src/connections.c:6677
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "ઉપલબà«àª§ સà«àª¯à«‹àªœàª¨à«‹: %s\n"
+
+#: ../cli/src/connections.c:6686
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "ભૂલ: અયોગà«àª¯ સà«àª¯à«‹àªœàª¨ નામ; %s\n"
+
+#: ../cli/src/connections.c:6703
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "ઉપલબà«àª§ ગà«àª£àª§àª°à«àª®à«‹: %s\n"
+
+#: ../cli/src/connections.c:6711
+#, c-format
+msgid "Error: property %s\n"
+msgstr "ભૂલ: ગà«àª£àª§àª°à«àª® %s\n"
+
+#: ../cli/src/connections.c:6752
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"'autoconnect=yes' સાથે જોડાણને સંગà«àª°àª¹à«€ રહà«àª¯àª¾ છે. આ જોડાણનà«àª‚ તરતજ સકà«àª°àª¿àª¯àª•àª°àª£àª®àª¾àª‚ "
+"પરિણમી "
+"શકે છે.\n"
+"શà«àª‚ તમે હજૠસંગà«àª°àª¹àªµàª¾ માંગો છો? [હાં] "
+
+#: ../cli/src/connections.c:6826
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "તમે નીચેનાં સà«àª¯à«‹àªœàª¨à«‹àª®àª¾àª‚ ફેરફાર કરી શકે છે: %s\n"
+
+#: ../cli/src/connections.c:6853
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"અનà«àª¯ કà«àª²àª¾àª¯àª¨à«àªŸàª®àª¾àª‚થી જોડાણ રૂપરેખા દૂર કરવામાં આવી છે. તેને પà«àª¨àªƒàª¸àª‚ગà«àª°àª¹ કરવા "
+"માટે તમે 'save' "
+"લખી શકો છો.\n"
+
+#: ../cli/src/connections.c:6883 ../cli/src/connections.c:6941
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' ગà«àª£àª§àª°à«àª® માટે પરવાનગી મળેલ કિંમત: %s\n"
+
+#: ../cli/src/connections.c:6895 ../cli/src/connections.c:7112
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "ભૂલ: સà«àª¯à«‹àªœàª¨ પસંદ થયેલ નથી; યોગà«àª¯ [%s] છે\n"
+
+#: ../cli/src/connections.c:6896
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"પહેલાં '<setting> માં જાવ' ને વાપરો, અથવા '<setting>.<property> સà«àª¯à«‹àªœàª¿àª¤ કરો'\n"
+
+#: ../cli/src/connections.c:6911 ../cli/src/connections.c:7049
+#: ../cli/src/connections.c:7129
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "ભૂલ: અયોગà«àª¯ સà«àª¯à«‹àªœàª¨ દલીલ '%s'; યોગà«àª¯ [%s] છે\n"
+
+#: ../cli/src/connections.c:6921
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "ભૂલ: '%s' ગà«àª£àª§àª°à«àª® માટે ગà«àª® થયેલ સà«àª¯à«‹àªœàª¨\n"
+
+#: ../cli/src/connections.c:6928
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "ભૂલ: અયોગà«àª¯ ગà«àª£àª§àª°à«àª®: %s\n"
+
+#: ../cli/src/connections.c:6977
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "ભૂલ: અજà«àªžàª¾àª¤ સà«àª¯à«‹àªœàª¨ '%s'\n"
+
+#: ../cli/src/connections.c:6990
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "તમે નીચેનાં ગà«àª£àª§àª°à«àª®à«‹àª®àª¾àª‚ ફેરફાર લાવી શકો છો: %s\n"
+
+#: ../cli/src/connections.c:7034
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "ભૂલ: દલીલ આપેલ નથી; યોગà«àª¯ [%s] છે\n"
+
+#: ../cli/src/connections.c:7047
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "સà«àª¯à«‹àªœàª¨ '%s' ઠજોડાણમાં હાજર નથી.\n"
+
+#: ../cli/src/connections.c:7088
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "ભૂલ: %s ગà«àª£àª§àª°à«àª®à«‹, અથવા તે સà«àª¯à«‹àªœàª¨ નામ નથી.\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"પહેલાં '<setting> માં જાવ' ને વાપરો, અથવા '<setting>.<property> વરà«àª£àªµà«‹'\n"
+
+#: ../cli/src/connections.c:7154
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "ભૂલ: અયોગà«àª¯ ગà«àª£àª§àª°à«àª®: %s, યોગà«àª¯ સà«àª¯à«‹àªœàª¨ નામ નથી.\n"
+
+#: ../cli/src/connections.c:7178
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "ભૂલ: '%s' સà«àª¯à«‹àªœàª¨ હાજર નથી\n"
+
+#: ../cli/src/connections.c:7181
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "ભૂલ: અજà«àªžàª¾àª¤ સà«àª¯à«‹àªœàª¨: '%s'\n"
+
+#: ../cli/src/connections.c:7197
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "સà«àª¯à«‹àªœàª¨ '%s' ને ચકાસો: %s\n"
+
+#: ../cli/src/connections.c:7204
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "જોડાણ ચકાસો: %s\n"
+
+#: ../cli/src/connections.c:7222
+#, c-format
+msgid "Error: invalid argument '%s'\n"
+msgstr "ભૂલ: અયોગà«àª¯ દલીલ '%s'\n"
+
+#: ../cli/src/connections.c:7256
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "ભૂલ: '%s' (%s) જોડાણને સંગà«àª°àª¹àªµàª¾àª®àª¾ નિષà«àª«àª³àª¤àª¾: (%d) %s\n"
+
+#: ../cli/src/connections.c:7264
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "જોડાણ '%s' (%s) સફળતાપૂરà«àªµàª• સંગà«àª°àª¹à«‡àª² છે.\n"
+
+#: ../cli/src/connections.c:7265
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "જોડાણ '%s' (%s) સફળતાપૂરà«àªµàª• સà«àª§àª¾àª°àª¾àª‡ ગયà«.\n"
+
+#: ../cli/src/connections.c:7299
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "ભૂલ: જોડાણ ચકાસણી નિષà«àª«àª³: %s\n"
+
+#: ../cli/src/connections.c:7300
+msgid "(unknown error)"
+msgstr "(અજà«àªžàª¾àª¤ ભૂલ)"
+
+#: ../cli/src/connections.c:7321
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "ભૂલ: જોડાણ સગà«àª°àª¹à«‡àª² નથી. પહેલાં 'સગà«àª°àª¹à«‹' ને ટાઇપ કરો.\n"
+
+#: ../cli/src/connections.c:7325
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "ભૂલ: જોડાણ યોગà«àª¯ નથી: %s\n"
+
+#: ../cli/src/connections.c:7336
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "ભૂલ: જોડાણને સકà«àª°àª¿àª¯ કરી શકાતૠનથી: %s.\n"
+
+#: ../cli/src/connections.c:7346
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "ભૂલ: '%s' (%s) જોડાણને સકà«àª°àª¿àª¯ કરવામાં નિષà«àª«àª³àª¤àª¾: (%d) %s\n"
+
+#: ../cli/src/connections.c:7352
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr "મોનિટરીંગ જોડાણ સકà«àª°àª¿àª¯àª•àª°àª£ (ચાલૠરાખવા માટે કોઇપણ કીને દબાવો)\n"
+
+#: ../cli/src/connections.c:7390
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "ભૂલ: પરિસà«àª¥àª¿àª¤àª¿-લાઇન: %s\n"
+
+#: ../cli/src/connections.c:7398
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "ભૂલ: સંગà«àª°àª¹à«‹-ખાતરી: %s\n"
+
+#: ../cli/src/connections.c:7406
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "ભૂલ: ખોટો રંગ નંબર: '%s'; use <0-8>\n"
+
+#: ../cli/src/connections.c:7418
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "હાલનà«àª‚ nmcli રૂપરેખાંકન:\n"
+
+#: ../cli/src/connections.c:7426
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "અયોગà«àª¯ રૂપરેખાંકન વિકલà«àªª '%s'; પરવાનગી મળેલ [%s]\n"
+
+#: ../cli/src/connections.c:7649
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> આદેશ-વાકà«àª¯àª®àª¾àª‚ ફેરફાર કરવાનà«àª‚ ઉપલબà«àª§ નથી. લકà«àª·àª£àª¨à«‡ સકà«àª°àª¿àª¯ કરીને "
+"લાઇબà«àª°à«‡àª°à«€àª®àª¾àª‚ ફેરફાર કરવા "
+"માટે વાકà«àª¯àª¨à«‡ નકà«àª•à«€ કરો. <<<\n"
+"આધારભૂત લાઇબà«àª°à«‡àª°à«€àª“ આ છે:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7675
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "ભૂલ: ફકà«àª¤ 'id', uuid, અથવા 'path' માંના àªàª•àª¨à«‡ પૂરૠપાડી શકાય છે."
+
+#: ../cli/src/connections.c:7687 ../cli/src/connections.c:7884
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "ભૂલ: અજà«àªžàª¾àª¤ જોડાણ '%s'."
+
+#: ../cli/src/connections.c:7702
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"ચેતવણી: હાલનાં જોડાણ '%s' માં ફેરફાર કરી રહà«àª¯àª¾ છે; 'પà«àª°àª•àª¾àª°' દલીલને અવગણેલ છે\n"
+
+#: ../cli/src/connections.c:7705
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"ચેતવણી: હાલનાં જોડાણ '%s' માં ફેરફાર કરી રહà«àª¯àª¾ છે; 'con-name' દલીલ અવગણે છે\n"
+
+#: ../cli/src/connections.c:7719
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "યોગà«àª¯ જોડાણ પà«àª°àª•àª¾àª°à«‹: %s\n"
+
+#: ../cli/src/connections.c:7721
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "ભૂલ: અયોગà«àª¯ જોડાણ પà«àª°àª•àª¾àª°; %s\n"
+
+#: ../cli/src/connections.c:7757
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli પરસà«àªªàª° જોડાણ સંપાદક |==="
+
+#: ../cli/src/connections.c:7760
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "હાલનાં '%s' જોડાણમાં ફેરફાર કરી રહà«àª¯àª¾ છે: '%s'"
+
+#: ../cli/src/connections.c:7762
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "નવૠ'%s' જોડાણને ઉમેરી રહà«àª¯àª¾ છે"
+
+#: ../cli/src/connections.c:7764
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "ઉપલબà«àª§ આદેશો માટે 'મદદ' અથવા '?' ટાઇપ કરો."
+
+#: ../cli/src/connections.c:7766
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "વિગત થયેલ ગà«àª£àª§àª°à«àª® વરà«àª£àª¨ માટે '[<setting>.<prop>] વરà«àª£àªµà«‹' ટાઇપ કરો."
+
+#: ../cli/src/connections.c:7805
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "ભૂલ: જોડાણ '%s' ને બદલવામાં નિષà«àª«àª³àª¤àª¾: (%d) %s"
+
+#: ../cli/src/connections.c:7811
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "જોડાણ '%s' (%s) સફળતાપૂરà«àªµàª• બદલેલ છે.\n"
+
+#: ../cli/src/connections.c:7838
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "ભૂલ: દલીલો પૂરા પાડેલ છે."
+
+#: ../cli/src/connections.c:7862
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "ભૂલ: જોડાણ ID ગà«àª® થયેલ છે."
+
+#: ../cli/src/connections.c:7867
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "ભૂલ: <setting>.<property> દલીલ ગà«àª® થયેલ છે."
+
+#: ../cli/src/connections.c:7890
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "ભૂલ: અયોગà«àª¯ <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7905
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "ભૂલ: અયોગà«àª¯ અથવા સà«àª¯à«‹àªœàª¨ '%s' ને પરવાનગી મળેલ નથી: %s."
+
+#: ../cli/src/connections.c:7926
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "ભૂલ: અયોગà«àª¯ ગà«àª£àª§àª°à«àª® '%s': %s."
+
+#: ../cli/src/connections.c:7932
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "ભૂલ: %s.%s ને બદલવામાં નિષà«àª«àª³àª¤àª¾: %s."
+
+#: ../cli/src/connections.c:7962
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "ભૂલ: જોડાણ નિરાકરણ નિષà«àª«àª³: %s"
+
+#: ../cli/src/connections.c:8033
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "ભૂલ: અજà«àªžàª¾àª¤ જોડાણ: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:8069
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "ભૂલ: અજà«àªžàª¾àª¤ જોડાણ(ઓ) ને કાઢી શકાતૠનથી: %s."
+
+#: ../cli/src/connections.c:8140
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "ફાઇલ '%s' લાવી શકà«àª¯àª¾ નહિ\n"
+
+#: ../cli/src/connections.c:8267
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "ભૂલ: '%s' ઠયોગà«àª¯ 'જોડાણ' આદેશ નથી."
+
+#: ../cli/src/connections.c:8336 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "ભૂલ: સિસà«àªŸàª® સà«àª¯à«‹àªœàª¨à«‹àª¨à«‡ મેળવી શકà«àª¯àª¾ નથી."
+
+#: ../cli/src/connections.c:8346
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "ભૂલ: જોડાણોને પà«àª°àª¾àªªà«àª¤ કરી શકાતા નથી: સà«àª¯à«‹àªœàª¨à«‹ સેવાઓ ચાલી રહી નથી."
+
+#. 3
+#. 16
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNECTION"
+
+#. 4
+#. 17
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUCT"
#. 4
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
#. 6
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:117
+#. 8
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "REASON"
-#. 10
-#: ../cli/src/devices.c:118
+#. 11
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:119
+#. 12
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:120
+#. 13
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:122
+#. 15
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#. 15
-#: ../cli/src/devices.c:123
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#. 0
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:565
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:573
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:182
+#. 3
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:183
+#. 4
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:184
+#. 6
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:186
+#. 8
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:187
+#. 10
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:188
+#. 11
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
-msgid "ACTIVE"
-msgstr "ACTIVE"
+#. 14
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:227
-#| msgid "UUID"
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:243
-#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-#| "[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-#| " [--private] [--nowait] [--timeout <timeout>]\n"
-#| " wimax [list [iface <iface>] [nsp <name>]]\n"
-#| "\n"
+#. 0
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 3
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-PROPERTIES"
+
+#. 10
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../cli/src/devices.c:248 ../libnm-glib/nm-device.c:1830
+#: ../libnm-util/nm-connection.c:1278 ../tui/nm-editor-utils.c:227
+#: ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "CONNECTIONS"
+
+#: ../cli/src/devices.c:274
+#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"વપરાશ: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli device status { help }\n"
+"\n"
+"બધા ઉપકરણો માટે સà«àª¥àª¿àª¤àª¿ બતાવો.\n"
+"મૂળભૂત રીતે, નીચેના સà«àª¤àª‚ભો બતાવવામાં આવે છે:\n"
+" DEVICE - ઇનà«àªŸàª°àª«à«‡àª¸ નામ\n"
+" TYPE - ઉપકરણ પà«àª°àª•àª¾àª°\n"
+" STATE - ઉપકરણ સà«àª¥àª¿àª¤àª¿\n"
+" CONNECTION - ઉપકરણ પર જોડાણ સકà«àª°àª¿àª¯àª•à«ƒàª¤ થયà«àª‚ (જો કોઇ હોય તો)\n"
+"દરà«àª¶àª¾àªµàªµàª¾àª®àª¾àª‚ આવેલ સà«àª¤àª‚ભો વૈશà«àªµàª¿àª• વિકલà«àªª '--fields' ની મદદથી બદલી શકાય છે. "
+"'status' àª\n"
+"મૂળભૂત આદેશ છે, જેનો અરà«àª¥ ઠથાય કે 'nmcli device' ઠ'nmcli device status' ને "
+"બોલાવે "
+"છે.\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"ઉપકરણ(ઓ) ની વિગતો બતાવો.\n"
+"આદેશ બધા ઉપકરણોની વિગતોની યાદી આપે છે, અથવા આપેલ ઉપકરણ માટે.\n"
"\n"
-#: ../cli/src/devices.c:344
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ઉપકરણ સાથે જોડાવ.\n"
+"NetworkManager સà«àª¸àª‚ગત જોડાણ શોધવાનો પà«àª°àª¯àª¾àª¸ કરશે કે જે સકà«àª°àª¿àª¯ થશે.\n"
+"તે જોડાણોને પણ ધà«àª¯àª¾àª¨àª®àª¾àª‚ રાખશે કે જે આપોઆપ-જોડાવા માટે સà«àª¯à«‹àªœà«€àª¤ નથી.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ઉપકરણનà«àª‚ જોડાણ તોડો.\n"
+"આ આદેશ ઉપકરણનà«àª‚ જોડાણ તોડે છે અને તેને ભવિષà«àª¯àª®àª¾àª‚ વપરાશકરà«àª¤àª¾/માનવીય દખલ વિના\n"
+"આપોઆપ-પà«àª¨àªƒàª¸àª•à«àª°àª¿àª¯ કરવાથી રોકે છે.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Wi-Fi ઉપકરણો પર પà«àª°àª•à«àª°àª¿àª¯àª¾ કરે છે.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"ઉપલબà«àª§ Wi-Fi àªàª•à«àª¸à«‡àª¸ પોંઇનà«àªŸàª¨à«€ યાદી આપો. 'ifname' અને 'bssid' વિકલà«àªªà«‹ કોઇ ખાસ\n"
+"ઇનà«àªŸàª°àª«à«‡àª¸, અથવા ચોકà«àª•àª¸ BSSID વાળા માટે AP ની યાદી આપવા માટે વાપરી શકાય છે.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"SSID અથવા BSSID દà«àªµàª¾àª°àª¾ સà«àªªàª·à«àªŸ થયેલ Wi-Fi નેટવરà«àª•àª®àª¾àª‚ જોડાણ કરો. આદેશ નવà«àª‚ "
+"જોડાણ\n"
+"બનાવે છે અને પછી તેને ઉપકરણ પર સકà«àª°àª¿àª¯ કરે છે. આ GUI કà«àª²àª¾àª¯àª¨à«àªŸàª®àª¾àª‚ SSID પર\n"
+"કà«àª²àª¿àª• કરવાનો આદેશ આધારિત પરà«àª¯àª¾àª¯ છે. આદેશ હંમેશા નવà«àª‚ જોડાણ બનાવે છે\n"
+"અને તેથી તે મà«àª–à«àª¯àª¤à«àªµà«‡ નવા Wi-Fi નેટવરà«àª•à«‹àª®àª¾àª‚ જોડાણ કરવા માટે ઉપયોગી\n"
+"છે. જો નેટવરà«àª•àª¨à«àª‚ જોડાણ પહેલાથી હાજર હોય, તો નીચે પà«àª°àª®àª¾àª£à«‡ પહેલાંની રૂપરેખાઓ\n"
+"લઇ આવવà«àª‚ વધૠસારà«àª‚ છે: nmcli con up id <name>. નોંધ કરો કે માતà«àª°\n"
+"open, WEP અને WPA-PSK નેટવરà«àª•à«‹ હાલમાં આધારભૂત છે. àªàªµà«àª‚ પણ\n"
+"ધારવામાં આવે છે કે IP રૂપરેખાંકન ઠDHCP મારફતે મેળવવામાં આવે છે.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"અરજી કરો કે NetworkManager તà«àª°àª‚ત બધા ઉપલબà«àª§ àªàª•à«àª¸à«‡àª¸ પોંઇનà«àªŸ માટે પà«àª¨àªƒàª¸à«àª•à«‡àª¨ "
+"કરે.\n"
+"NetworkManager સામયિકપણે Wi-Fi નેટવરà«àª•à«‹àª¨à«‡ સà«àª•à«‡àª¨ કરે છે, પરંતૠઅમà«àª• "
+"કિસà«àª¸àª¾àª“માં\n"
+"જાતે સà«àª•à«‡àª¨ શરૂ કરવાનà«àª‚ ઉપયોગી હોઇ શકે. નોંધ કરો કે આ આદેશ AP બતાવશે નહિ,\n"
+"તેના માટે 'nmcli device wifi list' વાપરો.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX ઉપકરણો પર પà«àª°àª•à«àª°àª¿àª¯àª¾ કરે છે.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"ઉપલબà«àª§ WiMAX NSP ની યાદી આપે છે. 'ifname' અને 'nsp' વિકલà«àªªà«‹ ખાસ ઇનà«àªŸàª°àª«à«‡àª¸\n"
+"માટેના નેટવરà«àª•à«‹àª¨à«€ યાદી આપે છે, અથવા ખાસ NSP ની.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(કંઇ નહિં)"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:549
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:401
+#: ../cli/src/devices.c:550
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:410
-msgid "Encrypted: "
-msgstr "àªàª¨àª•à«àª°àª¿àªªà«àªŸ થયેલ: "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:415
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:569
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:417
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:578
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:419
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:422
-msgid "Enterprise "
-msgstr "Enterprise "
-
-#: ../cli/src/devices.c:431
+#: ../cli/src/devices.c:594
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:432
-msgid "Infrastructure"
-msgstr "ઇનà«àª«à«àª°àª¾àª¸à«àªŸà«àª°àª•à«àªšàª°"
+#: ../cli/src/devices.c:595
+msgid "Infra"
+msgstr "ઇનà«àª«à«àª°àª¾"
-#: ../cli/src/devices.c:468
+#: ../cli/src/devices.c:627
msgid "Home"
msgstr "ઘર"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:630
msgid "Partner"
msgstr "ભાગીદાર"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:633
msgid "Roaming"
msgstr "ફરવà«"
-#: ../cli/src/devices.c:546
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "ભૂલ: 'dev list': %s"
-
-#: ../cli/src/devices.c:548
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "ભૂલ: 'dev list': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
-
-#: ../cli/src/devices.c:557
+#: ../cli/src/devices.c:727
msgid "Device details"
msgstr "ઉપકરણ વિગતો"
-#: ../cli/src/devices.c:602 ../cli/src/devices.c:605 ../cli/src/devices.c:1081
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:739
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "ભૂલ: 'ઉપકરણ બતાવો': %s"
+
+#: ../cli/src/devices.c:789 ../cli/src/devices.c:792 ../cli/src/devices.c:1336
+#: ../cli/src/devices.c:1476
msgid "(unknown)"
msgstr "(અજà«àªžàª¾àª¤)"
-#: ../cli/src/devices.c:614
-msgid "not connected"
-msgstr "જોડાયેલ નથી"
-
-#: ../cli/src/devices.c:641
+#: ../cli/src/devices.c:829
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:915
msgid "on"
msgstr "ચાલà«"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:915
msgid "off"
msgstr "બંધ"
-#: ../cli/src/devices.c:923
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "ભૂલ: 'dev status': %s"
-
-#: ../cli/src/devices.c:925
+#: ../cli/src/devices.c:1190
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "ભૂલ: 'dev status': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
+msgid "Error: 'device status': %s"
+msgstr "ભૂલ: 'ઉપકરણ પરિસà«àª¥àª¿àª¤àª¿': %s"
-#: ../cli/src/devices.c:948
+#. Add headers
+#: ../cli/src/devices.c:1208
msgid "Status of devices"
msgstr "ઉપકરણોની પરિસà«àª¥àª¿àª¤àª¿"
-#: ../cli/src/devices.c:979
+#: ../cli/src/devices.c:1239
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "ભૂલ: '%s' દલીલ ગેરહાજર છે."
+msgid "Error: invalid extra argument '%s'."
+msgstr "ભૂલ: અયોગà«àª¯ વધારાની દલીલ '%s'."
-#: ../cli/src/devices.c:1020 ../cli/src/devices.c:1185
-#: ../cli/src/devices.c:1326 ../cli/src/devices.c:1973
+#: ../cli/src/devices.c:1267 ../cli/src/devices.c:1424
+#: ../cli/src/devices.c:1559 ../cli/src/devices.c:1698
+#: ../cli/src/devices.c:2442
#, c-format
msgid "Error: Device '%s' not found."
msgstr "ભૂલ: ઉપકરણ '%s' મળà«àª¯à« નથી."
-#: ../cli/src/devices.c:1043
+#: ../cli/src/devices.c:1321
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "સફળ: ઉપકરણ '%s' સફળતાપૂરà«àªµàª• સકà«àª°àª¿àª¯ થયેલ છે."
+
+#: ../cli/src/devices.c:1335
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "ભૂલ: ઉપકરણ સકà«àª°àª¿àª¯àª•àª°àª£ નિષà«àª«àª³: %s"
+
+#: ../cli/src/devices.c:1352
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "ઉપકરણ '%s' ને જોડી દેવામાં આવà«àª¯à« છે.\n"
+
+#: ../cli/src/devices.c:1379 ../cli/src/devices.c:1514
+msgid "Interface: "
+msgstr "ઈનà«àªŸàª°àª«à«‡àª¸: "
+
+#: ../cli/src/devices.c:1383 ../cli/src/devices.c:1392
+#: ../cli/src/devices.c:1518 ../cli/src/devices.c:1527
+#, c-format
+msgid "Error: No interface specified."
+msgstr "ભૂલ: ઇનà«àªŸàª°àª«à«‡àª¸ સà«àªªàª·à«àªŸ થયેલ નથી."
+
+#: ../cli/src/devices.c:1398 ../cli/src/devices.c:1533
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "ભૂલ: વધારાની દલીલની પરવાનગી મળેલ નથી: '%s'."
+
+#: ../cli/src/devices.c:1461
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "સફળ: ઉપકરણ '%s' નà«àª‚ સફળતાપૂરà«àªµàª• જોડાણ તૂટી ગયà«."
-#: ../cli/src/devices.c:1078
+#: ../cli/src/devices.c:1473
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "ભૂલ: ઉપકરણ '%s' (%s) નà«àª‚ જોડાણ તૂટવામાં નિષà«àª«àª³àª¤àª¾: %s"
-#: ../cli/src/devices.c:1091
+#: ../cli/src/devices.c:1487
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "ઉપકરણ '%s' નà«àª‚ સફળતાપૂરà«àªµàª• જોડાણ તૂટી ગયà«.\n"
-#: ../cli/src/devices.c:1154
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "ભૂલ: iface ને સà«àªªàª·à«àªŸ કરવૠજ પડશે."
-
-#: ../cli/src/devices.c:1284
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "ભૂલ: 'dev wifi': %s"
+#: ../cli/src/devices.c:1630
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi સà«àª•à«‡àª¨ યાદી"
-#: ../cli/src/devices.c:1286
+#: ../cli/src/devices.c:1668
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "ભૂલ: 'dev wifi': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
+msgid "Error: 'device wifi': %s"
+msgstr "ભૂલ: 'ઉપકરણ wifi': %s"
-#: ../cli/src/devices.c:1309
-msgid "WiFi scan list"
-msgstr "WiFi સà«àª•à«‡àª¨ યાદી"
-
-#: ../cli/src/devices.c:1346 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1721 ../cli/src/devices.c:1790
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "ભૂલ: bssid '%s' સાથે પà«àª°àªµà«‡àª¶ બિંદૠમળà«àª¯à« નથી."
-#: ../cli/src/devices.c:1363
+#: ../cli/src/devices.c:1745 ../cli/src/devices.c:2137
+#: ../cli/src/devices.c:2299
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "ભૂલ: ઉપકરણ '%s' ઠWiFi ઉપકરણ નથી."
-#: ../cli/src/devices.c:1431 ../cli/src/devices.c:1477
+#: ../cli/src/devices.c:1827 ../cli/src/devices.c:1874
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' સાથે જોડાણ બનાવેલ છે અને ઉપકરણ '%s' પર સકà«àª°àª¿àª¯ થયેલ છે\n"
-#: ../cli/src/devices.c:1436
+#: ../cli/src/devices.c:1831
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "ભૂલ: જોડાણ સકà«àª°àª¿àª¯ કરવાનà«àª‚ નિષà«àª«àª³: (%d) %s."
-#: ../cli/src/devices.c:1461
+#: ../cli/src/devices.c:1856
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "ભૂલ: નવાં જોડાણ ઉમેરવા/સકà«àª°àª¿àª¯ કરવાનà«àª‚ નિષà«àª«àª³: (%d) %s"
-#: ../cli/src/devices.c:1469
+#: ../cli/src/devices.c:1864
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "ભૂલ: નવાં જોડાણને ઉમેરવાનà«àª‚/સકà«àª°àª¿àª¯ કરવામાં નિષà«àª«àª³: અજà«àªžàª¾àª¤ ભૂલ"
-#: ../cli/src/devices.c:1613
+#: ../cli/src/devices.c:2019
+msgid "SSID or BSSID: "
+msgstr "SSID અથવા BSSID: "
+
+#: ../cli/src/devices.c:2024
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "ભૂલ: SSID અથવા BSSID ગà«àª® થયેલ છે."
-#: ../cli/src/devices.c:1636
+#: ../cli/src/devices.c:2048
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "ભૂલ: bssid દલીલ કિંમત '%s' ઠમાનà«àª¯ BSSID નથી."
-#: ../cli/src/devices.c:1660
+#: ../cli/src/devices.c:2072
#, c-format
-msgid "Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
-msgstr "ભૂલ: wep-key-type દલીલ કિંમત '%s' અયોગà«àª¯ છે, 'key' અથવા 'phrase' ને વાપરો."
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgstr ""
+"ભૂલ: wep-key-type દલીલ કિંમત '%s' અયોગà«àª¯ છે, 'key' અથવા 'phrase' ને વાપરો."
+
+#: ../cli/src/devices.c:2092
+#, c-format
+msgid "Error: %s: %s."
+msgstr "ભૂલ: %s: %s."
-#: ../cli/src/devices.c:1700
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "ભૂલ: (%s) માં BSSID સાથે જોડાવà«àª‚ bssid દલીલમાંથી અલગ પડે છે (%s)."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:2113
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "ભૂલ: પરિમાણ '%s' કà«àª¯àª¾àª‚તો SSID અથવા BSSID નથી."
-#: ../cli/src/devices.c:1735
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "ભૂલ: ઉપકરણ '%s' ઠWiFi ઉપકરણ નથી."
-
-#: ../cli/src/devices.c:1737
+#: ../cli/src/devices.c:2139 ../cli/src/devices.c:2301
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "ભૂલ: Wi-Fi ઉપકરણ મળà«àª¯à« નથી."
-#: ../cli/src/devices.c:1755
+#: ../cli/src/devices.c:2157
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "ભૂલ: SSID '%s' સાથે નેટવરà«àª• મળà«àª¯à« નથી."
-#: ../cli/src/devices.c:1757
+#: ../cli/src/devices.c:2159
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "ભૂલ: BSSID '%s' સાથે પà«àª°àªµà«‡àª¶ બિંદૠમળà«àª¯à« નથી."
-#: ../cli/src/devices.c:1855
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "ભૂલ: 'dev wifi' આદેશ '%s' યોગà«àª¯ નથી."
-
-#: ../cli/src/devices.c:1931
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "ભૂલ: 'dev wimax': %s"
+#: ../cli/src/devices.c:2198
+msgid "Password: "
+msgstr "પાસવરà«àª¡:"
-#: ../cli/src/devices.c:1933
+#: ../cli/src/devices.c:2327
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "ભૂલ: 'dev wimax': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "ભૂલ: 'ઉપકરણ wifi' આદેશ '%s' યોગà«àª¯ નથી."
-#: ../cli/src/devices.c:1956
+#: ../cli/src/devices.c:2374
msgid "WiMAX NSP list"
msgstr "WiMAX NSP યાદી"
-#: ../cli/src/devices.c:1993
+#: ../cli/src/devices.c:2411
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "ભૂલ: 'ઉપકરણ wimax': %s"
+
+#: ../cli/src/devices.c:2465
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "ભૂલ: નામ '%s' સાથે NSP મળà«àª¯à« નથી."
-#: ../cli/src/devices.c:2004
+#: ../cli/src/devices.c:2478
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "ભૂલ: ઉપકરણ '%s' WiMAX ઉપકરણ નથી."
-#: ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2516
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "ભૂલ: nsp '%s' સાથે પà«àª°àªµà«‡àª¶ બિંદૠમળà«àª¯à« નથી."
-#: ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2548
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "ભૂલ: 'dev wimax' આદેશ '%s' માનà«àª¯ નથી."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "ભૂલ: 'ઉપકરણ wimax' આદેશ '%s' યોગà«àª¯ નથી."
-#: ../cli/src/devices.c:2115
+#: ../cli/src/devices.c:2627
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "ભૂલ: 'dev' આદેશ '%s' યોગà«àª¯ નથી."
@@ -1468,257 +3600,509 @@ msgstr "VERSION"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "STARTUP"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+msgid "CONNECTIVITY"
+msgstr "CONNECTIVITY"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "નેટવરà«àª•à«€àª‚ગ"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "PERMISSION"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "સà«àª¤àª°"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "ડોમેઇન"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"વપરાશ: nmcli nm { COMMAND | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"વપરાશ: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli general status { help }\n"
+"\n"
+"NetworkManager ની આખી પરિસà«àª¥àª¿àª¤àª¿ બતાવો.\n"
+"'status' ઠમૂળભૂત કà«àª°àª¿àª¯àª¾ છે, કે જેનો અરà«àª¥ àªàªµà«‹ થાય કે 'nmcli gen' ઠ'nmcli gen "
+"status' ને બોલાવે છે\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"હાજર સિસà«àªŸàª® યજમાનનામ મેળવો અથવા બદલો.\n"
+"કોઇ દલીલો વિના, આ વરà«àª¤àª®àª¾àª¨àª®àª¾àª‚ રૂપરેખાંકિત યજમાનનામ છાપે છે. જà«àª¯àª¾àª°à«‡ તમે "
+"યજમાનનામ\n"
+"પૂરà«àª‚ પાડો, તà«àª¯àª¾àª°à«‡ NetworkManager તેને નવી હાજર સિસà«àªŸàª® યજમાનનામ તરીકે સà«àª¯à«‹àªœà«€àª¤ "
+"કરશે.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli general permissions { help }\n"
+"\n"
+"સતà«àª¤àª¾àª§àª¿àª•àª¾àª°à«€àª¤ પà«àª°àª•à«àª°àª¿àª¯àª¾àª“ માટે બોલાવનારની પરવાનગીઓ બતાવો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"NetworkManager લૉગીંગ સà«àª¤àª° અને ડૉમેઇનો મેળવો અથવા બદલો.\n"
+"કોઇપણ દલીલ વિના વરà«àª¤àª®àª¾àª¨ લૉગીંગ સà«àª¤àª° અને ડૉમેઇનો બતાવવા આવેલા છે. લૉગીંગ "
+"પરિસà«àª¥àª¿àª¤àª¿\n"
+"બદલવા માટે, સà«àª¤àª° અને/અથવા ડૉમેઇન પૂરà«àª‚ પાડો. સંભવિત લૉગીંગ ડૉમેઇનોની યાદી "
+"માટે\n"
+"મહેરબાની કરીને મદદ પાનાંનો સંદરà«àª­ લો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli networking on { help }\n"
+"\n"
+"નેટવરà«àª•à«€àª‚ગને ચાલૠકરો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli networking off { help }\n"
+"\n"
+"નેટવરà«àª•à«€àª‚ગને બંધ કરો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"નેટવરà«àª• જોડાણ પરિસà«àª¥àª¿àª¤àª¿ મેળવો.\n"
+"વૈકલà«àªªàª¿àª• 'check' દલીલ NetworkManager ને જોડાણ પà«àª¨àªƒ-ચકાસવા માટે સકà«àª°àª¿àª¯ કરે "
+"છે.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"બધી રેડિયો સà«àªµà«€àªšàª¨à«€ પરિસà«àª¥àª¿àª¤àª¿ મેળવો, અથવા તેમને ચાલà«/બંધ કરો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Wi-Fi રેડિયો સà«àªµà«€àªšàª¨à«€ પરિસà«àª¥àª¿àª¤àª¿ મેળવો, અથવા તેને ચાલà«/બંધ કરો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"મોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡ રેડિયો સà«àªµà«€àªšàª¨à«€ પરિસà«àª¥àª¿àª¤àª¿ મેળવો, અથવા તેને ચાલà«/બંધ કરો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"વપરાશ: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"WiMAX રેડિયો સà«àªµà«€àªšàª¨à«€ પરિસà«àª¥àª¿àª¤àª¿ મેળવો, અથવા તેને ચાલà«/બંધ કરો.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "સૂતેલà«àª‚"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "જોડાઇ રહà«àª¯àª¾ છે"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "જોડાયેલ (ફકà«àª¤ સà«àª¥àª¾àª¨àª¿àª•)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "જોડાયેલ (ફકà«àª¤ સાઇટ)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "જોડાઇ તૂટી રહà«àª¯à« છે"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "ભૂલ: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "પોરà«àªŸàª²"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "મરà«àª¯àª¾àª¦àª¿àª¤"
+
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "પૂરà«àª£"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "ભૂલ: 'nm status': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "કà«àª·àª¤àª¿: માતà«àª° આ કà«àª·à«‡àª¤à«àª°à«‹ માનà«àª¯ છે: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "સકà«àª°àª¿àª¯ થયેલ"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "નિષà«àª•à«àª°àª¿àª¯ થયેલ"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "NetworkManager પરિસà«àª¥àª¿àª¤àª¿"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "ચાલી રહà«àª¯à« છે"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "ચાલી રહà«àª¯à« નથી"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "શરૂ કરી રહà«àª¯àª¾ છે"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "શરૂ થયેલ છે"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "સતà«àª¤àª¾"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "ભૂલ: 'nm permissions': %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "ભૂલ: 'nm permissions': %s; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "ભૂલ: 'સમાનà«àª¯ પરવાનગીઓ': %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "NetworkManager પરવાનગીઓ"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "ભૂલ: સિસà«àªŸàª® બસમાં જોડી શકà«àª¯àª¾ નહિં: %s"
+msgid "Error: 'general logging': %s"
+msgstr "ભૂલ: 'સામાનà«àª¯ લૉગીંગ': %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "ભૂલ: D-Bus ઑબà«àªœà«‡àª•à«àªŸ પà«àª°à«‹àª•à«àª¸à«€àª¨à«‡ બનાવી શકà«àª¯àª¾ નહિં."
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager લૉગીંગ"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "સà«àª²à«€àªªàª®àª¾àª‚ ભૂલ: %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "કà«àª·àª¤àª¿: યજમાનનામ સà«àª¯à«‹àªœà«€àª¤ કરવામાં નિષà«àª«àª³: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "ભૂલ: '--fields' કિંમત '%s' ઠઅહિંયા યોગà«àª¯ નથી; માનà«àª¯ થયેલ કà«àª·à«‡àª¤à«àª°à«‹: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "ભૂલ: લૉગીંગને સà«àª¯à«‹àªœàª¿àª¤ કરવા માટે પà«àª°àªµà«‡àª¶ નામંજૂર થયેલ છે; %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "નેટવરà«àª•à«€àª‚ગ સકà«àª°àª¿àª¯"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "ભૂલ: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "ભૂલ: અયોગà«àª¯ 'enable' પરિમાણ: '%s'; 'true' અથવા 'false' વાપરો."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "ભૂલ: 'સામાનà«àª¯ આદેશ '%s' યોગà«àª¯ નથી."
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "ભૂલ: સà«àª²à«€àªªà«€àª‚ગ પરિસà«àª¥àª¿àª¤àª¿ NetworkManager દà«àª¦àª¾àª°àª¾ નિકાસ થયેલ નથી."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr "ભૂલ: '--fields' કિંમત '%s' અહિંયા યોગà«àª¯ નથી (પરવાનગી મળેલ કà«àª·à«‡àª¤à«àª°: %s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "ભૂલ: અયોગà«àª¯ 'sleep' પરિમાણ: '%s'; 'true' અથવા 'false' વાપરો"
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "ભૂલ: અયોગà«àª¯ '%s' દલીલ: '%s' (ચાલà«/બંધ વાપરો)."
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi સકà«àª°àª¿àª¯ થયેલ"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "જોડાણ"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "ભૂલ: અયોગà«àª¯ 'wifi' પરિમાણ: '%s'."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "નેટવરà«àª•à«€àª‚ગ"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN સકà«àª°àª¿àª¯ થયેલ"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "ભૂલ: 'નેટવરà«àª•à«€àª‚ગ જોડાણ' આદેશ '%s' યોગà«àª¯ નથી."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "ભૂલ: અયોગà«àª¯ 'wwan' પરિમાણ: '%s'."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "ભૂલ: 'નેટવરà«àª•à«€àª‚ગ આદેશ' આદેશ '%s' યોગà«àª¯ નથી."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX સકà«àª°àª¿àª¯"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "રેડિયો સà«àªµà«€àªš"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "ભૂલ: અયોગà«àª¯ 'wimax' પરિમાણ: '%s'."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi રેડિયો સà«àªµà«€àªš"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN રેડિયો સà«àªµà«€àªš"
-#: ../cli/src/network-manager.c:588
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX રેડિયો સà«àªµà«€àªš"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "ભૂલ: 'nm' આદેશ '%s' યોગà«àª¯ નથી."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "ભૂલ: 'રેડિયો' આદેશ '%s' યોગà«àª¯ નથી."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -n[ocheck] don't check nmcli and "
-#| "NetworkManager versions\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1731,266 +4115,882 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
"વપરાશ: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
-"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -m[ode] tabular|multiline output mode\n"
-" -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-" -e[scape] yes|no escape columns separators in "
-"values\n"
-" -n[ocheck] don't check nmcli and "
-"NetworkManager versions\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+"વિકલà«àªªà«‹\n"
+" -t[erse] સંકà«àª·àª¿àªªà«àª¤ આઉટપà«àªŸ\n"
+" -p[retty] સારà«àª‚ આઉટપà«àªŸ\n"
+" -m[ode] tabular|multiline આઉટપà«àªŸ સà«àª¥àª¿àª¤àª¿\n"
+" -f[ields] <field1,field2,...>|all|common આઉટપà«àªŸàª®àª¾àª‚ કà«àª·à«‡àª¤à«àª°à«‹àª¨à«‡ સà«àªªàª·à«àªŸ કરો\n"
+" -e[scape] yes|no કિંમતોમાં સà«àª¤àª‚ભ વિભાજકને છોડો\n"
+" -n[ocheck] nmcli અને NetworkManager "
+"આવૃતà«àª¤àª¿àª¨à«‡ "
+"ચકાસો નહિં\n"
+" -a[sk] ગેરહાજર પરિમાણો વિશે પૂછો\n"
+" -w[ait] <seconds> કà«àª°àª¿àª¯àª¾àª“ સમાપà«àª¤ કરવાની રાહ જોવા "
+"સમય "
+"સમાપà«àª¤àª¿àª¨à«‡ સà«àª¯à«‹àªœàª¿àª• કરો \n"
+" -a[sk] ગà«àª® થયેલ પરિમાણો માટે પૂછો\n"
+" -v[ersion] કારà«àª¯àª•à«àª°àª® આવૃતà«àª¤àª¿àª¨à«‡ બતાવો\n"
+" -h[elp] આ મદદને છાપો\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
-" c[onnection] NetworkManager's connections\n"
-" d[evice] devices managed by NetworkManager\n"
+" g[eneral] NetworkManager ની સામાનà«àª¯ પરિસà«àª¥àª¿àª¤àª¿ અને કà«àª°àª¿àª¯àª¾àª“\n"
+" n[etworking] આખૠનેટવરà«àª•à«€àª‚ગ નિયંતà«àª°àª£\n"
+" r[adio] NetworkManager રેડિયો સà«àªµà«€àªš\n"
+" c[onnection] NetworkManager નાં જોડાણો\n"
+" d[evice] NetworkManager દà«àª¦àª¾àª°àª¾ સંચાલિત થયેલ ઉપકરણો\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "ભૂલ: ઑબà«àªœà«‡àª•à«àªŸ '%s' અજà«àªžàª¾àª¤ છે, 'nmcli help' નો પà«àª°àª¯àª¤à«àª¨ કરો."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "ભૂલ: વિકલà«àªª '--terse' ઠબીજી વખત સà«àªªàª·à«àªŸ થયેલ છે."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "ભૂલ: વિકલà«àªª '--terse' ઠ'--pretty' સાથે પરસà«àªªàª° અનોખà«àª‚ છે."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "ભૂલ: વિકલà«àªª '--pretty' ઠબીજી વખત સà«àªªàª·à«àªŸ થયેલ છે."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "ભૂલ: વિકલà«àªª '--pretty' ઠ'--terse' સાથે પરસà«àªªàª° અનોખà«àª‚ છે."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "ભૂલ: '%s' વિકલà«àªª માટે ગેરહાજર દલીલ."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "ભૂલ: '%s' ઠ'%s' વિકલà«àªª માટે યોગà«àª¯ દલીલ નથી."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "ભૂલ: '%s' વિકલà«àªªà«‹ માટે કà«àª·à«‡àª¤à«àª°à«‹ ગેરહાજર છે."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "ભૂલ: '%s' ઠ'%s' વિકલà«àªª માટે યોગà«àª¯ સમયસમાપà«àª¤àª¿ નથી."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli સાધન, આવૃતà«àª¤àª¿ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "ભૂલ: વિકલà«àªª '%s' ઠઅજà«àªžàª¾àª¤ છે, 'nmcli -help' નો પà«àª°àª¯àª¤à«àª¨ કરો."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"ભૂલ: nmcli ઠસંકેત %d દà«àª¦àª¾àª°àª¾ કાઢી નાંખેલ છે."
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "સંકેત %d પકડà«àª¯à«, બંધ કરી રહà«àª¯àª¾ છે..."
+msgid "Failed to set signal mask: %d"
+msgstr "સંકેત માસà«àª• ને સà«àª¯à«‹àªœàª¿àª¤ કરવાનà«àª‚ નિષà«àª«àª³: %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "સંકેત સંચાલિત થà«àª°à«‡àª¡àª¨à«‡ બનાવવામાં નિષà«àª«àª³àª¤àª¾: %d"
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "ભૂલ: NMClient ઑબà«àªœà«‡àª•à«àªŸàª¨à«‡ બનાવી શકà«àª¯àª¾ નહિં."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "સફળ"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:529
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit પાસફà«àª°à«‡àª)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (અજà«àªžàª¾àª¤)"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (અજà«àªžàª¾àª¤)"
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "કોઇપણ, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:588
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:590
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (નિષà«àª•à«àª°àª¿àª¯)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (સકà«àª°àª¿àª¯, સારà«àªµàªœàª¨àª¿àª• IP પસંદ કરà«àª¯à« છે)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (સકà«àª°àª¿àª¯, કામચલાઉ IP પસંદ કરà«àª¯à« છે)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "૦ (કંઇ નહિં)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "માલિકી થયેલ àªàªœàª¨à«àªŸ, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "સંગà«àª°àª¹à«‡àª² નથી, "
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "જરૂરી નથી, "
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (નિષà«àª•à«àª°àª¿àª¯)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "સકà«àª°àª¿àª¯, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "જાહેરાત કરો, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "ઇચà«àª›à«àª•, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (અસà«àª¯à«‹àªœà«€àª¤)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "સà«àªµàª¯àª‚"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "મૂળભૂત"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "શà«àª‚ તમે '%s' માં '%s' ને સà«àª¯à«‹àªœàª¿àª¤ કરવા માંગો છો? [હાં]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "શà«àª‚ તમે '%s' ને સાફ કરવા માંગો છો? [હાં]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' યોગà«àª¯ નથી"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' ઠયોગà«àª¯ નથી; <%d-%d> વાપરો"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' યોગà«àª¯ નથી; <%d-%d> વાપરો"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' યોગà«àª¯ નથી; <option>=<value> વાપરો"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "અનà«àª•à«àª°àª®àª£àª¿àª•àª¾ '%s' યોગà«àª¯ નથી"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "દૂર કરવા વસà«àª¤à« નથી"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "અનà«àª•à«àª°àª®àª£àª¿àª•àª¾ '%d' ઠસીમા <0-%d> માં નથી"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "અયોગà«àª¯ વિકલà«àªª '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "ગà«àª® થયેલ વિકલà«àªª"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' ઠયોગà«àª¯ નંબર નથી (સીમાની બહાર)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' ઠયોગà«àª¯ ઇથરનેટ MAC નથી"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' ઠàªàª• યોગà«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ નામ છે"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' ઠસંખà«àª¯àª¾ નથી"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' ઠયોગà«àª¯ હેકà«àª¸ અકà«àª·àª° નથી"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' ઠયોગà«àª¯ MAC નથી"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' ઠયોગà«àª¯ UUID નથી"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"વપરાશકરà«àª¤àª¾ પરવાનગીઓની યાદી દાખલ કરો. આ નીચે પà«àª°àª®àª¾àª£à«‡ ઘડાયેલ વપરાશકરà«àª¤àª¾ નામોની "
+"યાદી "
+"છે:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"વસà«àª¤à«àª“ અલà«àªªàªµàª¿àª°àª¾àª® અથવા ખાલી જગà«àª¯àª¾àª“થી અલગ કરી શકાય છે.\n"
+"\n"
+"ઉદાહરણ: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' ઠયોગà«àª¯ માસà«àªŸàª° નથી; ifname અથવા જોડાણ UUID ને વાપરો"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "ખાનગી કી પાસવરà«àª¡ પૂરો પાડેલ નથી"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"ખાનગી કી અને કી પાસવરà«àª¡ માટે પાથને દાખલ કરો (જો હજૠસà«àª¯à«‹àªœàª¿àª¤ ન હોય તો):\n"
+" <file path> [<password>]\n"
+"ઉદાહરણ: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"હેકà«àªàª¾àª¡à«‡àª¸àª¿àª®àª² કિંમતોની યાદી તરીકે બાઇટને દાખલ કરો.\n"
+"બે બંધારણો સà«àªµà«€àª•àª¾àª°à«‡àª² છે:\n"
+"(a) હેકà«àªàª¾àª¡à«‡àª¸àª¿àª®àª² આંકડાની શબà«àª¦àª®àª¾àª³àª¾, જà«àª¯àª¾àª‚ દરેક બે આંકડા ઠàªàª• બાઇટને રજૂ કરે "
+"છે\n"
+"(b) બાઇટની જગà«àª¯àª¾àª¥à«€ અલગ થયેલ યાદી હેકà«àªàª¾àª¡à«‡àª¸àª¿àª®àª² આંકડા તરીકે લખાયેલ બાઇટની યાદી "
+"છે "
+"(વૈકલà«àªªàª¿àª• 0x/0X ઉપસરà«àª— સાથે, અને વૈકલà«àªªàª¿àª• અગà«àª°àª£à«€ 0).\n"
+"\n"
+"ઉદાહરણો: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"આ તરીકે બંધારિત થયેલ વિકલà«àªªà«‹àª¨à«€ યાદીને દાખલ કરો:\n"
+" વિકલà«àªª = <value>, વિકલà«àªª = <value>,... \n"
+"યોગà«àª¯ કિંમતો આ છે: %s\n"
+"'સà«àª¥àª¿àª¤àª¿' નામ અથવા નંબર તરીકે પૂરૠપાડી શકાય છે:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"ઉદાહરણ: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' ઠયોગà«àª¯ InfiniBand MAC નથી"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' ઠયોગà«àª¯ IBoIP P_Key નથી"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS સરà«àªµàª°àª¨àª¾àª‚ IPv4 સરનામાંની યાદીને દાખલ કરો.\n"
+"\n"
+"ઉદાહરણ: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' યોગà«àª¯ નથી (ip[/prefix] [gateway] વાપરો)"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"આ તરીકે બંધારિત થયેલ IPv4 સરનામાંની યાદીને દાખલ કરો:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"ગà«àª® થયેલ ઉપસરà«àª—ને 32 નાં ઉપસરà«àª— તરીકે ગણવામાં આવે છે.\n"
+"\n"
+"ઉદાહરણ: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' યોગà«àª¯ નથી (ip/[prefix] next-hop [metric] વાપરો)"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"નીચે પà«àª°àª®àª¾àª£à«‡ ઘડાયેલા IPv4 રà«àªŸàª¨à«€ યાદી દાખલ કરો:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"ગà«àª® થયેલ prefix ઠ32 ના પૂરà«àªµàª— તરીકે સંબોધિત થાય છે.\n"
+"ગà«àª® થયેલ metric ઠ0 ના મેટà«àª°àª¿àª• તરીકે સંબોધિત થાય છે.\n"
+"\n"
+"ઉદાહરણ: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS સરà«àªµàª°àª¨à«€ IPv6 સરનામાંની યાદીને દાખલ કરો. જો IPv6 રૂપરેખાંકન પદà«àª¦àª¤àª¿ ઠ"
+"'આપોઆપ' "
+"હોય તો આ DNS સરà«àªµàª°à«‹ ઠપેલાં માટે જોડાયેલ છે (જો કોઇપણ) આપમેળે રૂપરેખાંકન "
+"દà«àª¦àª¾àª°àª¾ પાછૠમળેલ "
+"છે. DNS સરà«àªµàª°à«‹ 'વહેંચાયેલ' અથવા 'સà«àª¥àª¾àª¨àª¿àª• કડી' IPv6 રૂપરેખાંકન પદà«àª¦àª¤àª¿àª“ સાથે "
+"વાપરી શકાતી "
+"નથી , અપસà«àªŸà«àª°à«€àª® નેટવરà«àª• નથી. બધી બીજી IPv6 રૂપરેખાંકન પદà«àª¦àª¤àª¿àª“માં, આ DNS "
+"સરà«àªµàª°à«‹ ઠઆ "
+"જોડાણ માટે ફકà«àª¤ DNS સરà«àªµàª°à«‹ તરીકે વાપરેલ છે.\n"
+"\n"
+"ઉદાહરણ: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"આ તરીકે બંધારિત થયેલ IPv6 સરનામાંની યાદીને દાખલ કરો:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"ગà«àª® થયેલ ઉપસરà«àª—ને 128 નાં ઉપસરà«àª— તરીકે ગણવામાં આવે છે.\n"
+"\n"
+"ઉદાહરણ: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr "'%s' યોગà«àª¯ નથી (<dest IP>/prefix <next-hop IP> [metric] ને વાપરો)"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"નીચે પà«àª°àª®àª¾àª£à«‡ ઘડાયેલા IPv6 રà«àªŸàª¨à«€ યાદી દાખલ કરો:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"ગà«àª® થયેલ prefix ઠ128 ના પૂરà«àªµàª— તરીકે સંબોધિત થાય છે.\n"
+"ગà«àª® થયેલ metric ઠ0 ના મેટà«àª°àª¿àª• તરીકે સંબોધિત થાય છે.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' યોગà«àª¯ નથી; 0, 1, અથવા 2 વાપરો"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' યોગà«àª¯ ચેનલ નથી; <1-13> વાપરો"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' યોગà«àª¯ નથી; [e, o, n] ને વાપરો"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli ઠબંને સીધી JSON રૂપરેખાંકન માહિતી અને રૂપરેખાંકન સમાવતà«àª‚ ફાઇલ નામ "
+"ધરાવી શકે છે. "
+"પછીના કિસà«àª¸àª¾àª®àª¾àª‚ ફાઇલ વંચાય છે અને સમાવિષà«àªŸà«‹ આ ગà«àª£àª§àª°à«àª®àª®àª¾àª‚ મૂકવામાં આવે છે.\n"
+"\n"
+"ઉદાહરણો: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "દૂર કરવા માટે પà«àª°àª¾àª§àª¾àª¨à«àª¯ નથી"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "અનà«àª•à«àª°àª®àª£àª¿àª•àª¾ '%d' ઠ<0-%d> ની સીમામાં નથી"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' યોગà«àª¯ નથી; 3 શબà«àª¦àª®àª¾àª³àª¾àª“ને પૂરી પાડવી જોઇàª"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"તà«àª°àª£ ચેનલોની યાદીને દાખલ કરો (અલà«àªªàªµàª¿àª°àª¾àª® અથવા જગà«àª¯àª¾àª¥à«€ અલગ થયેલ).\n"
+"\n"
+"ઉદાહરણ: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"નીચે પà«àª°àª®àª¾àª£à«‡ ઘડાયેલા S/390 વિકલà«àªªà«‹àª¨à«€ યાદી દાખલ કરો:\n"
+" option = <value>, option = <value>,...\n"
+"માનà«àª¯ વિકલà«àªªà«‹ છે: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' ઠયોગà«àª¯ ચેનલ નથી"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' યોગà«àª¯ ચેનલ નથી"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP કીઠ'%s' હોવાનà«àª‚ અનà«àª®àª¾àª¨ લગાવà«àª¯à« છે\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' ઠ[0 (અજà«àªžàª¾àª¤), 1 (કી), 2 (પાસફà«àª°à«‡àªœ)] ની વચà«àªšà«‡ નથી"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP કીનાં પà«àª°àª•àª¾àª°àª¨à«‡ દાખલ કરો. સà«àªµà«€àª•àª¾àª°à«‡àª² કિંમતો આ છે: 0 અથવા અજà«àªžàª¾àª¤, 1 અથવા કી, "
+"અને 2 "
+"અથવા પાસફà«àª°à«‡àªœ.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' ઠયોગà«àª¯ PSK નથી"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' ઠમાનà«àª¯ DCB નિશાની નથી"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' ઠમાનà«àª¯ DCB કારà«àª¯àª•à«àª°àª® પà«àª°àª¾àª§àª¾àª¨à«àª¯ નથી"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "8 અલà«àªªàªµàª¿àª°àª¾àª®àª¥à«€-અલગ પડેલી સંખà«àª¯àª¾àª“ સમાવતà«àª‚ હોવà«àª‚ જ જોઇàª"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' ઠ0 અને %u (સંકલિત) અથવા %u વચà«àªšà«‡àª¨à«€ સંખà«àª¯àª¾ નથી"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' ઠ0 અને %u (સંકલિત) વચà«àªšà«‡àª¨à«€ સંખà«àª¯àª¾ નથી"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"ચેતવણી: '%s' જà«àª¯àª¾àª‚ સà«àª§à«€ 1 સમાવે નહિ તà«àª¯àª¾àª‚ સà«àª§à«€ ફેરફારોની કોઇ અસર થશે નહિ "
+"(સકà«àª°àª¿àª¯àª•à«ƒàª¤)\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "બેનà«àª¡àªµàª¿àª¥ ટકાનો સરવાળો 100%% થવો જ જોઇàª"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "જાણતા નથી કેવી રીતે ગà«àª£àª§àª°à«àª® કિંમતને મેળવવી"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "ગà«àª£àª§àª°à«àª®àª¨à«‡ બદલી શકાતૠનથી"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM ગà«àª£àª§àª°àª® વરà«àª£àª¨]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli ખાસ વરà«àª£àª¨]"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "ભૂલ: '%s' માટે કિંમત દલીલ જરૂરી છે."
+
+#: ../cli/src/utils.c:153
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "ભૂલ: દલીલ '%s' ઇચà«àª›àª¿àª¤ હતà«, પરંતૠ'%s' ને પૂરૠપાડેલ છે."
+
+#: ../cli/src/utils.c:156
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "ભૂલ: અનિચà«àª›àª¨à«€àª¯ દલીલ '%s'"
+
+#: ../cli/src/utils.c:206
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 સરનામાં '0x%X' ને લખાણ રૂપમાં રૂપાંતર કરવામાં ભૂલ"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:234
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 સરનામà«àª‚ '%s' ને લખાણ રૂપમાં રૂપાંતર કરતી વખતે ભૂલ"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:410
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' યોગà«àª¯ નથી; [%s] અથવા [%s] વાપરો"
+
+#: ../cli/src/utils.c:492
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' ઠઅસà«àªªàª·à«àªŸ છે (%s x %s)"
+
+#: ../cli/src/utils.c:504
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "ગà«àª® થયેલ નામ, [%s] માંના àªàª•àª¨à«‹ પà«àª°àª¯àª¤à«àª¨ કરો"
+
+#: ../cli/src/utils.c:721
#, c-format
msgid "field '%s' has to be alone"
msgstr "કà«àª·à«‡àª¤à«àª° '%s' ઠàªàª•àª²à« હોવૠજ જોઇàª"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:724
#, c-format
-msgid "invalid field '%s'"
-msgstr "અયોગà«àª¯ કà«àª·à«‡àª¤à«àª° '%s'"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "અયોગà«àª¯ કà«àª·à«‡àª¤à«àª° '%s'; માનà«àª¯ કà«àª·à«‡àª¤à«àª°à«‹: %s"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:781
msgid "Option '--terse' requires specifying '--fields'"
msgstr "વિકલà«àªª '--terse' ને '--fields' ની જરૂર છે"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:785
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "વિકલà«àªª '--terse' ને ચોકà«àª•àª¸ '--fields' વિકલà«àªª કિંમતોની જરૂર છે, '%s' ની નહિં"
-
-#: ../cli/src/utils.c:468
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr "ભૂલ: org.freedesktop.DBus માટે D-Bus ઑબà«àªœà«‡àª•à«àªŸ પà«àª°à«‹àª•à«àª¸à«€ બનાવી શકà«àª¯àª¾ નહિં"
-
-#: ../cli/src/utils.c:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "ભૂલ: NameHasOwner માંગણી નિષà«àª«àª³: %s"
+msgstr ""
+"વિકલà«àªª '--terse' ને ચોકà«àª•àª¸ '--fields' વિકલà«àªª કિંમતોની જરૂર છે, '%s' ની નહિં"
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1104
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
"nocheck to suppress the warning.\n"
msgstr ""
-"ચેતવણી: nmcli (%s) અને NetworkManager (%s) આવૃતà«àª¤àª¿àª“ બંધબેસતી નથી. ચેતવણીઓ પર પà«àª°àª¤àª¿àª¬àª‚ધ "
+"ચેતવણી: nmcli (%s) અને NetworkManager (%s) આવૃતà«àª¤àª¿àª“ બંધબેસતી નથી. ચેતવણીઓ પર "
+"પà«àª°àª¤àª¿àª¬àª‚ધ "
"મૂકવા માટે --nocheck વાપરો.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1113
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
"execution using --nocheck, but the results are unpredictable."
msgstr ""
-"ભૂલ: nmcli (%s) અને NetworkManager (%s) આવૃતà«àª¤àª¿àª“ બંધબેસતી નથી. --nocheck મદદથી "
+"ભૂલ: nmcli (%s) અને NetworkManager (%s) આવૃતà«àª¤àª¿àª“ બંધબેસતી નથી. --nocheck "
+"મદદથી "
"ચલાવવા પર દબાણ કરો, પરંતૠપરિણામો ધારી શકાય તેમ નથી."
+#: ../libnm-glib/nm-device.c:1814
+msgid "Bluetooth"
+msgstr "બà«àª²à«àªŸà«àª¥"
+
+#: ../libnm-glib/nm-device.c:1816
+msgid "OLPC Mesh"
+msgstr "OLPC મેશ"
+
+#: ../libnm-glib/nm-device.c:1818
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../libnm-glib/nm-device.c:1820 ../tui/nm-editor-utils.c:182
+msgid "Mobile Broadband"
+msgstr "મોબાઇલ બà«àª°à«‹àª¡àª¬à«…નà«àª¡"
+
+#: ../libnm-glib/nm-device.c:1824 ../libnm-util/nm-connection.c:1272
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4162 ../tui/nm-editor-utils.c:200
+msgid "Bond"
+msgstr "બોનà«àª¡"
+
+#: ../libnm-glib/nm-device.c:1826 ../libnm-util/nm-connection.c:1274
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4269 ../tui/nm-editor-utils.c:218
+msgid "Team"
+msgstr "જૂથ"
+
+#: ../libnm-glib/nm-device.c:1828 ../libnm-util/nm-connection.c:1276
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4453 ../tui/nm-editor-utils.c:209
+msgid "Bridge"
+msgstr "બà«àª°àª¿àªœ"
+
+#: ../libnm-glib/nm-device.c:1832
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1860
+msgid "Wired"
+msgstr "વાયરવાળà«àª‚"
+
+#: ../libnm-glib/nm-device.c:1891
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1893
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../libnm-glib/nm-device.c:1989 ../libnm-glib/nm-device.c:2008
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -2001,116 +5001,87 @@ msgstr "PEM કી ફાઇલ પાસે છેલà«àª²à«‹ ટેગ '%s' à
msgid "Doesn't look like a PEM private key file."
msgstr "PEM ખાનગી કી ફાઇલ જેવી દેખાતી નથી."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM ફાઇલ માહિતી ને સંગà«àª°àª¹ કરવા માટે મેમરી પૂરતી નથી."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "મેલફોરà«àª® થયેલ PEM ફાઇલ: Proc-Type ઠપહેલો ટેગ ન હતો."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "મેલફોરà«àª® થયેલ PEM ફાઇલ: અજà«àªžàª¾àª¤ Proc-Type ટેગ '%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "મેલફોરà«àª® થયેલ PEM ફાઇલ: DEK-Info ઠબીજો ટેગ હતો નહિં."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "મેલફોરà«àª® થયેલ PEM ફાઇલ: IV ઠDEK-Info ટેગમાં શોધાયૠનહિં."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "મેલફોરà«àª® થયેલ PEM ફાઇલ: DEK-Info ટેગમાં IV નà«àª‚ અયોગà«àª¯ બંધારણ."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "મેલફોરà«àª® થયેલ PEM ફાઇલ: અજà«àªžàª¾àª¤ ખાનગી કી સાઇફર '%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "ખાનગી કીને ડિકોડ કરી શકાયૠનહિં."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "ઇચà«àª›àª¿àª¤ PKCS#8 શરૂઆત ટૅગને શોધવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "ઇચà«àª›àª¿àª¤ PKCS#8 અંત ટેગ '%s' ને શોધવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "ખાનગી કી માહિતીને સંગà«àª°àª¹ કરવા પૂરતી મેમરી નથી."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 ખાનગી કીને ડિકોડ કરવામાં નિષà«àª«àª³àª¤àª¾."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "પà«àª°àª®àª¾àª£àªªàª¤à«àª° માહિતીને સંગà«àª°àª¹ કરવા માટે મેમરી પૂરતી નથી."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ઠલંબાઇમાં બાઇટોનà«àª‚ બેકી નંબર જ હોવૠજ જોઇàª."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV ને સંગà«àª°àª¹ કરવા માટે પૂરતી મેમરી નથી."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ઠબિન-હેકà«àªàª¾àª¡à«‡àª¸àª¿àª®àª² આંકડાઓને સમાવે છે."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "ખાનગી કી સાઇફર '%s' ઠઅજà«àªžàª¾àª¤ હતà«."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "ખાનગી કીને ડિકà«àª°àª¿àªªà«àªŸ કરવા માટે મેમરી પૂરતી નથી."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "ડિકà«àª°àª¿àªªà«àªŸ થયેલ ખાનગી કીને સંગà«àª°àª¹ કરવા માટે મેમરી પૂરતી નથી."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "ખાનગી કી પà«àª°àª•àª¾àª° ને નકà«àª•à«€ કરવાનà«àª‚ નિષà«àª«àª³."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM પà«àª°àª®àª¾àª£àªªàª¤à«àª° પાસે અંત ટેગ '%s' ન હતો."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM પà«àª°àª®àª¾àª£àªªàª¤à«àª° પાસે અંત ટેગ '%s' ન હતો."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "પà«àª°àª®àª¾àª£àªªàª¤à«àª°àª¨à«‡ ડિકોડ કરવાનà«àª‚ નિષà«àª«àª³."
@@ -2129,97 +5100,87 @@ msgstr "MD5 àªàª‚જિનને પà«àª°àª¾àª°àª‚ભ કરવાનà«àª‚ àª
msgid "Invalid IV length (must be at least %zd)."
msgstr "અયોગà«àª¯ IV લંબાઇ (ઓછામાં ઓછી %zd હોવી જ જોઇàª)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "ડિકà«àª°àª¿àªªà«àªŸ થયેલ કી બફર માટે પૂરતી મેમરી નથી."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "ડિકà«àª°àª¿àªªà«àª¶àª¨ સાઇફર સંદરà«àª­àª¨à«‡ પà«àª°àª¾àª°àª‚ભ કરવાનà«àª‚ નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "ડિકà«àª°àª¿àªªà«àª¶àª¨ માટે સમપà«àª°àª®àª¾àª£ કીને સà«àª¯à«‹àªœàª¿àª¤ કરવામાં નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ડિકà«àª°àª¿àªªà«àª¶àª¨ માટે IV ને સà«àª¯à«‹àªœàª¿àª¤ કરવાનà«àª‚ નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "ખાનગી કીને ડિકà«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "ખાનગી કી ને ડિકà«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³: અનિચà«àª›àª¨àª¿àª¯ પેડિંગ લંબાઇ."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "ખાનગી કીને ડિકà«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "àªàª¨àª•à«àª°àª¿àªªà«àªŸ કરà«àª¯àª¾ પછી મેમરીને ફાળવી શકà«àª¯àª¾ નહિં."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ સાઇફર સંદરà«àª­àª¨à«‡ પà«àª°àª¾àª°àª‚ભ કરવાનà«àª‚ નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ માટે સમપà«àª°àª®àª¾àª£ કીને સà«àª¯à«‹àªœàª¿àª¤ કરવામાં નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ માટે IV ને સà«àª¯à«‹àªœàª¿àª¤ કરવાનà«àª‚ નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "માહિતીને àªàª¨àª•à«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "પà«àª°àª®àª¾àª£àªªàª¤à«àª° માહિતીને પà«àª°àª¾àª°àª‚ભ કરતી વખતે ભૂલ: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "પà«àª°àª®àª¾àª£àªªàª¤à«àª°àª¨à«‡ ડિકોડ કરી શકાયૠનહિં: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 ડિકોડરને પà«àª°àª¾àª°àª‚ભ કરી શકાયૠનહિં: %s "
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 ફાઇલને ડિકોડ કરી શકાયૠનહિં: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 ફાઇલને ચકાસી શકાયૠનહિં: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 ડિકોડરનà«àª‚ પà«àª°àª¾àª°àª‚ભ કરી શકà«àª¯àª¾ નહિં: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ફાઇલને ડિકોડ કરી શકà«àª¯àª¾ નહિં: %s"
@@ -2239,123 +5200,480 @@ msgstr "MD5 સંદરà«àª­àª¨à«‡ પà«àª°àª¾àª°àª‚ભ કરવાનà«àª‚
msgid "Invalid IV length (must be at least %d)."
msgstr "અયોગà«àª¯ IV લંબાઇ (ઓછામાં ઓછી %d હોવી જ જોઇàª)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ડિકà«àª°àª¿àªªà«àª¶àª¨ સાઇફર સà«àª²à«‹àªŸàª¨à«‡ પà«àª°àª¾àª°àª‚ભ કરવાનà«àª‚ નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ડિકà«àª°àª¿àªªà«àª¶àª¨ માટે સમપà«àª°àª®àª¾àª£ કીને સà«àª¯à«‹àªœàª¿àª¤ કરવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ડિકà«àª°àª¿àªªà«àª¶àª¨ માટે IV ને સà«àª¯à«‹àªœàª¿àª¤ કરવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ડિકà«àª°àª¿àªªà«àª¶àª¨ સંદરà«àª­àª¨à«‡ આખરી રૂપ આપવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "ખાનગી કી ને ડિકà«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
-msgstr "ખાનગી કીને ડિકà«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³: ડિકà«àª°àª¿àªªà«àªŸ થયેલ માહિતી ઘણી લાંબી છે."
+msgstr ""
+"ખાનગી કીને ડિકà«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³: ડિકà«àª°àª¿àªªà«àªŸ થયેલ માહિતી ઘણી લાંબી છે."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "ખાનગી કીનાં ડિકà«àª°àª¿àªªà«àª¶àª¨àª¨àª¨à«‡ આખરી રૂપ આપવાનà«àª‚ નિષà«àª«àª³: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ સાઇફર સà«àª²à«‹àªŸàª¨à«‡ પà«àª°àª¾àª°àª‚ભ કરવાનà«àª‚ નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ માટે સમપà«àª°àª®àª¾àª£ કીને સà«àª¯à«‹àªœàª¿àª¤ કરવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ માટે IV ને સà«àª¯à«‹àªœàª¿àª¤ કરવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ સંદરà«àª­àª¨à«‡ પà«àª°àª¾àª°àª‚ભ કરવામાં નિષà«àª«àª³."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àªŸ કરવાનà«àª‚ નિષà«àª«àª³: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "àªàª¨àª•à«àª°àª¿àªªà«àªŸ કરà«àª¯àª¾ પછી માહિતીની અનિચà«àª›àª¨àª¿àª¯ સંખà«àª¯àª¾."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "પà«àª°àª®àª¾àª£àªªàª¤à«àª°àª¨à«‡ ડિકોડ કરી શકાયૠનહિં: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "UCS2 માં પાસવરà«àª¡àª¨à«‡ રૂપાંતરિત કરી શકાયૠનહિં: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 ડિકોડરને પà«àª°àª¾àª°àª‚ભ કરી શકાયૠનહિં: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 ફાઇલને ડિકોડ કરી શકાયૠનહિં: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 ફાઇલને ચકાસી શકાયૠનહિં: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "રેનà«àª¡àª® માહિતી ને ઉતà«àªªàª¨à«àª¨ કરી શકà«àª¯àª¾ નહિં."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "ગà«àª£àª§àª°à«àª® ગેરહાજર છે"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:769
+#: ../libnm-util/nm-setting-ip4-config.c:778
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "ગà«àª£àª§àª°à«àª® ખાલી છે"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 માટે '%s' ગà«àª£àª§àª°à«àª® બંધબેસતો હોવો જ જોઇàª"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:760
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "ગà«àª£àª§àª°à«àª® અયોગà«àª¯ છે"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "'%s' ઠગà«àª£àª§àª°à«àª® માટે યોગà«àª¯ કિંમત નથી"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' અથવા '%s' સà«àª¯à«‹àªœàª¨àª¨à«€ જરૂરિયાત છે"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "અયોગà«àª¯ વિકલà«àªª '%s' અથવા તેની કિંમત '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "ફકà«àª¤ '%s' નà«àª‚ àªàª• અને '%s' ને સà«àª¯à«‹àªœàª¿àª¤ કરી શકાય છે"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "ફરજિયાત વિકલà«àªª '%s' ગà«àª® થયેલ છે"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' ઠ'%s' માટે યોગà«àª¯ કિંમત નથી"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' ઠ'%s > 0' સાથે સà«àª¸àª‚ગત નથી"
+
+#: ../libnm-util/nm-setting-bond.c:583
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ કીને બનાવવા માટે મેમરી પૂરતી નથી."
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' ઠ'%s' વિકલà«àªª માટે યોગà«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ નથી"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM ફાઇલ બનાવવા માટે મેમરી ફાળવી શકà«àª¯àª¾ નહિંી પૂરતી નથી."
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' વિકલà«àªª ફકà«àª¤ '%s=%s' માટે યોગà«àª¯ છે"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' ઠ'%s' માટે યોગà«àª¯ રૂપરેખાંકન નથી"
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' ને સà«àª¯à«‹àªœàª¿àª¤ કરવા માટે '%s' વિકલà«àªªàª¨à«€ જરૂરિયાત છે"
+
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' વિકલà«àªª ખાલી છે"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:671
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "PEM ફાઇલમાં IV ને લખવા માટે મેમરીને ફાળવી શકà«àª¯àª¾ નહિં."
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' ઠ'%s' વિકલà«àªª માટે યોગà«àª¯ IPv4 સરનામૠનથી"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "PEM ફાઇલમાં અનકà«àª°àª¿àªªà«àªŸ થયેલ કી ને લખવા માટે મેમરીને ફાળવી શકà«àª¯àª¾ નહિં."
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' ઠàªàª• ગà«àª£àª§àª°à«àª® માટે યોગà«àª¯ કિંમત છે (<= %d હોવી જોઇàª)"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-bridge.c:251
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ફાઇલ માહિતી માટે મેમરી ફાળવી શકà«àª¯àª¾ નહિં."
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "કિંમત '%d' ઠસીમા <%d-%d> ની બહાર છે"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "ગà«àª£àª§àª°à«àª® ખાલી છે'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' ઠવરà«àªšà«àª¯à«àª…લ ઇનà«àªŸàª°àª«à«‡àª¸ નામ '%s' સાથે બંધબેસતૠનથી"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "જોડાણમાં '%s' સà«àª¯à«‹àªœàª¨àª¨à«€ હાજરીની જરૂરિયાત છે"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 રૂપરેખાકન સà«àª²à«‡àªµ માટે પરવાનગી મળેલ નથી"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 રૂપરેખાકન સà«àª²à«‡àªµ માટે પરવાનગી મળેલ નથી"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "ફà«àª²à«‡àª— અયોગà«àª¯"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "ફà«àª²à«‡àª— અયોગà«àª¯ - નિષà«àª•à«àª°àª¿àª¯"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "ગà«àª£àª§àª°à«àª® અયોગà«àª¯ (સકà«àª°àª¿àª¯ થયેલ નથી)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "ઘટક અયોગà«àª¯"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "સરવાળો 100% નથી"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "ગà«àª£àª§àª°à«àª® અયોગà«àª¯"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "ગà«àª£àª§àª°à«àª® ગà«àª® થયેલ છે"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "ગà«àª£àª§àª°à«àª® કિંમત '%s' ખાલી છે અથવા ઘણà«àª‚ લાંબૠછે (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' ઠઅયોગà«àª¯ અકà«àª·àª°à«‹àª¨à«‡ સમાવે છે ([A-Za-z._-] વાપરો)"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' લંબાઇ અયોગà«àª¯ છે (à«« અથવા ૬ અંકો હોવા જોઇàª)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "યોગà«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ નામ નથી"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "P_Key ને સà«àªªàª·à«àªŸ કરવૠજ જોઇઠજો મà«àª–à«àª¯àª¨à«‡ સà«àªªàª·à«àªŸ કરી રહà«àª¯àª¾ હોય"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key જોડાણ ઠમà«àª–à«àª¯ ઇનà«àªŸàª°àª«à«‡àª¸ નામને સà«àªªàª·à«àªŸ કરતૠનથી"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:748
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "આ ગà«àª£àª§àª°à«àª®àª¨à«‡ '%s=%s' માટે પરવાનગી મળેલ નથી"
+
+#: ../libnm-util/nm-setting-ip4-config.c:792
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 સરનામà«àª‚ અયોગà«àª¯ છે"
+
+#: ../libnm-util/nm-setting-ip4-config.c:802
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 સરનામાં પાસે અયોગà«àª¯ ઉપસરà«àª— છે"
+
+#: ../libnm-util/nm-setting-ip4-config.c:818
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. મારà«àª— અયોગà«àª¯ છે"
+
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. મારà«àª— પાસે અયોગà«àª¯ ઉપસરà«àª— છે"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' ને %s=%s માટે પરવાનગી મળેલ નથી"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID લંબાઇ સીમા <1-32> બાઇટની બહાર છે"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' યોગà«àª¯ ચેનલ નથી"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' ઠયોગà«àª¯ <128-16384> સીમાની બહાર છે"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "આ ગà«àª£àª§àª°à«àª® સà«àª¯à«‹àªœàª¨àª¨à«‡ શૂનà«àª¯ વગરની '%s' ગà«àª£àª§àª°à«àª®àª¨à«€ જરૂરિયાત છે"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' કિંમત '%s=%s' સાથે બંધબેસતૠનથી"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' ઠકà«àª¯àª¾àª‚તો કદી UUID અથવા ઇનà«àªŸàª°àª«à«‡àª¸ નામ ન હતà«"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "ગà«àª£àª§àª°à«àª® સà«àªªàª·à«àªŸ થયેલ નથી અને '%s:%s' પણ કડી સà«àªªàª·à«àªŸ થયેલ નથી"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "ફà«àª²à«‡àª— અયોગà«àª¯ છે"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' ઠયોગà«àª¯ ઇથરનેટ પોરà«àªŸ કિંમત નથી"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' ઠયોગà«àª¯ ડà«àªªà«àª²à«‡àª¶ કિંમત નથી"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "આ યોગà«àª¯ MAC સરનામà«àª‚ નથી"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' ઠયોગà«àª¯ MAC સરનામà«àª‚ નથી"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "અયોગà«àª¯ '%s' અથવા તેની કિંમત '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' સà«àª°àª•à«àª·àª¾àª¨à«‡ '%s=%s' ની જરૂરિયાત છે"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' સà«àª°àª•à«àª·àª¾àª¨à«‡ '%s' સà«àª¯à«‹àªœàª¨ હાજરીની જરૂરિયાત છે"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' ઠ<0-3> સીમાની બહાર છે"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' જોડાણોને આ ગà«àª£àª§àª°à«àª®àª®àª¾àª‚ '%s' ની જરૂરિયાત છે"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' ફકà«àª¤ '%s=%s' (WEP) સાથે વાપરી શકાય છે"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' ઠયોગà«àª¯ Wi-Fi સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ નથી."
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' ઠયોગà«àª¯ બૅનà«àª¡ નથી"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "સà«àª¯à«‹àªœàª¨ '%s' ગà«àª£àª§àª°à«àª®àª¨à«€ જરૂર છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2363,20 +5681,23 @@ msgstr "સિસà«àªŸàª® નેટવરà«àª•à«€àª‚ગ ને સકà«àª°àª¿
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
msgid "System policy prevents enabling or disabling system networking"
-msgstr "સિસà«àªŸàª® પોલિસી ઠસિસà«àªŸàª® નેટવરà«àª•à«€àª‚ગને નિષà«àª•à«àª°àª¿àª¯ અથવા સકà«àª°àª¿àª¯ કરવાનà«àª‚ અટકાવે છે"
+msgstr ""
+"સિસà«àªŸàª® પોલિસી ઠસિસà«àªŸàª® નેટવરà«àª•à«€àª‚ગને નિષà«àª•à«àª°àª¿àª¯ અથવા સકà«àª°àª¿àª¯ કરવાનà«àª‚ અટકાવે છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:3
msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
msgstr ""
-"NetworkManager ને નિષà«àª•à«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿ અથવા સકà«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ મૂકો (સિસà«àªŸàª® પાવર સંચાલન "
+"NetworkManager ને નિષà«àª•à«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿ અથવા સકà«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ મૂકો (સિસà«àªŸàª® પાવર "
+"સંચાલન "
"દà«àª¦àª¾àª°àª¾ ફકà«àª¤ વાપરવૠજોઇàª)"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
msgstr ""
-"સિસà«àªŸàª® પોલિસી NetworkManager ને નિષà«àª•à«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ મૂકલાનà«àª‚ અથવા સકà«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ "
+"સિસà«àªŸàª® પોલિસી NetworkManager ને નિષà«àª•à«àª°àª¿àª¯ સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ મૂકલાનà«àª‚ અથવા સકà«àª°àª¿àª¯ "
+"સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ "
"રાખવાનà«àª‚ અટકાવે છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
@@ -2393,16 +5714,20 @@ msgstr "મોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡ ઉપકરણોનà
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
msgid "System policy prevents enabling or disabling mobile broadband devices"
-msgstr "સિસà«àªŸàª® પોલિસી ઠમોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡ ઉપકરણોને સકà«àª°àª¿àª¯ અથવા નિષà«àª•à«àª°àª¿àª¯ કરવાનà«àª‚ અટકાવે છે"
+msgstr ""
+"સિસà«àªŸàª® પોલિસી ઠમોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡ ઉપકરણોને સકà«àª°àª¿àª¯ અથવા નિષà«àª•à«àª°àª¿àª¯ કરવાનà«àª‚ "
+"અટકાવે છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "WiMAX મોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡ ઉપકરણોને સકà«àª°àª¿àª¯ અથવા નિષà«àª•à«àª°àª¿àª¯ કરો"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
-msgid "System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
-"સિસà«àªŸàª® પોલિસી ઠWiMAX મોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡ ઉપકરણોને સકà«àª°àª¿àª¯ અથવા નિષà«àª•à«àª°àª¿àª¯ કરવાનà«àª‚ અટકાવે છે"
+"સિસà«àªŸàª® પોલિસી ઠWiMAX મોબાઇલ બà«àª°à«‹àª¡àª¬à«‡àª¨à«àª¡ ઉપકરણોને સકà«àª°àª¿àª¯ અથવા નિષà«àª•à«àª°àª¿àª¯ "
+"કરવાનà«àª‚ અટકાવે છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
@@ -2418,7 +5743,9 @@ msgstr "સà«àª°àª•à«àª·àª¿àª¤ થયેલ WiFi નેટવરà«àª• માà
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "સિસà«àªŸàª® પોલિસી ઠસà«àª°àª•à«àª·àª¿àª¤ થયેલ WiFi નેટવરà«àª• મારફતે વહેંચણી જોડાણોને રોકી રહà«àª¯àª¾ છે"
+msgstr ""
+"સિસà«àªŸàª® પોલિસી ઠસà«àª°àª•à«àª·àª¿àª¤ થયેલ WiFi નેટવરà«àª• મારફતે વહેંચણી જોડાણોને રોકી રહà«àª¯àª¾ "
+"છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
msgid "Connection sharing via an open WiFi network"
@@ -2426,7 +5753,8 @@ msgstr "ખà«àª²à«àª²àª¾ WiFi નેટવરà«àª• મારફતે જોà
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "સિસà«àªŸàª® પોલિસી ઠખà«àª²à«àª²àª¾ WiFi નેટવરà«àª• મારફતે વહેંચણી જોડાણોને રોકી રહà«àª¯àª¾ છે"
+msgstr ""
+"સિસà«àªŸàª® પોલિસી ઠખà«àª²à«àª²àª¾ WiFi નેટવરà«àª• મારફતે વહેંચણી જોડાણોને રોકી રહà«àª¯àª¾ છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
@@ -2442,7 +5770,8 @@ msgstr "બધા વપરાશકરà«àª¤àª¾àª“ માટે નેટવર
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
msgid "System policy prevents modification of network settings for all users"
-msgstr "સિસà«àªŸàª® પોલિસી ઠબધા વપરાશકરà«àª¤àª¾àª“ માટે નેટવરà«àª• સà«àª¯à«‹àªœàª¨à«‹àª¨àª¾àª‚ બદલાવને અટકાવે છે"
+msgstr ""
+"સિસà«àªŸàª® પોલિસી ઠબધા વપરાશકરà«àª¤àª¾àª“ માટે નેટવરà«àª• સà«àª¯à«‹àªœàª¨à«‹àª¨àª¾àª‚ બદલાવને અટકાવે છે"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
@@ -2452,175 +5781,148 @@ msgstr "નિરંતર સિસà«àªŸàª® યજમાનનામને બ
msgid "System policy prevents modification of the persistent system hostname"
msgstr "સિસà«àªŸàª® પોલિસી ઠનિરંતર સિસà«àªŸàª® યજમાનનામનાં બદલાવને અટકાવે છે"
-#: ../src/main.c:158
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "સંકેત માસà«àª• ને સà«àª¯à«‹àªœàª¿àª¤ કરવાનà«àª‚ નિષà«àª«àª³: %d"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "સંકેત સંચાલિત થà«àª°à«‡àª¡àª¨à«‡ બનાવવામાં નિષà«àª«àª³àª¤àª¾: %d"
-
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s ને ખોલવાનà«àª‚ નિષà«àª«àª³: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s માં લખવાનà«àª‚ નિષà«àª«àª³: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s ને બંધ કરવાનà«àª‚ નિષà«àª«àª³: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager પહેલેથી ચાલી રહà«àª¯à« છે (pid %ld)\n"
-#: ../src/main.c:363
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager આવૃતà«àª¤àª¿àª¨à«‡ છાપો અને બહાર નીકળો"
-#: ../src/main.c:364
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "ડિમન બનો નહિં"
-#: ../src/main.c:365
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "ડિમન બનો નહિં, અને stderr માં પà«àª°àªµà«‡àª¶à«‹"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "લૉગ સà«àª¤àª°: [%s] નà«àª‚ àªàª•"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "',' દà«àª¦àª¾àª°àª¾ લૉગ ડોમેઇન અલગ થયેલ છે: [%s] નà«àª‚ કોઇપણ સંયોજન"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "બધી ચેતવણીઓને ફેટલ બનાવો"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "PID ફાઇલનà«àª‚ સà«àª¥àª¾àª¨ સà«àªªàª·à«àªŸ કરો"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "filename"
msgstr "ફાઇલનામ"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "State file location"
msgstr "સà«àª¥àª¿àª¤àª¿ ફાઇલ સà«àª¥àª¾àª¨"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:368
-msgid "Config file location"
-msgstr "રૂપરેખાંકન ફાઇલ સà«àª¥àª¾àª¨"
-
-#: ../src/main.c:368
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:369
-msgid "List of plugins separated by ','"
-msgstr "',' દà«àª¦àª¾àª°àª¾ અલગ થયેલ પà«àª²àª—ઇનોની યાદી"
-
-#: ../src/main.c:369
-msgid "plugin1,plugin2"
-msgstr "પà«àª²àª—ઇન1,પà«àª²àª—ઇન2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:371
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "લૉગ સà«àª¤àª°: [ERR, WARN, INFO, DEBUG] માંના àªàª•"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:374
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"',' દà«àª¦àª¾àª°àª¾ અલગ થયેલ લૉગ ડોમેઇન: આમાંનૠકોઇપણ સંયોજન\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:380
-msgid "An http(s) address for checking internet connectivity"
-msgstr "ઇનà«àªŸàª°àª¨à«‡àªŸ જોડાણને ચકાસવા માટે http(s) સરનામà«àª‚"
-
-#: ../src/main.c:381
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "જોડાણ ચકાસણી વચà«àªšà«‡àª¨à«‹ અંતરાલ (સેકંડ માં)"
-
-#: ../src/main.c:382
-msgid "The expected start of the response"
-msgstr "જવાબની ઇચà«àª›àª¿àª¤ શરૂઆત"
-
-#: ../src/main.c:382
-msgid "Bingo!"
-msgstr "બિનà«àª—à«‹!"
-
-#: ../src/main.c:387
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules ઠતમારાં પà«àª²à«‡àªŸàª«à«‹àª°à«àª® પર આધારભૂત નથી!\n"
-#: ../src/main.c:406
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "તમારે NetworkManager ને ચલાવવા રà«àªŸ તમારે રà«àªŸ હોલૠજરૂરી જ છે!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
"specify wireless access points which wireless cards in the computer\n"
"should associate with."
msgstr ""
-"NetworkManager બધા નેટવરà«àª• જોડાણોને મોનિટર કરે છે અને આપમેળે વાપરવા માટે સારામાં સારા "
+"NetworkManager બધા નેટવરà«àª• જોડાણોને મોનિટર કરે છે અને આપમેળે વાપરવા માટે "
+"સારામાં સારા "
"જોડાણને પસંદ કરે છે.\n"
-"તે પણ વાયરલેસ પà«àª°àªµà«‡àª¶ બિંદà«àª¨à«‡ સà«àªªàª·à«àªŸ કરવા માટે વપરાશકરà«àª¤àª¾àª¨à«‡ પરવાનગી આપે છે કે જે કમà«àªªà«àª¯à«‚ટરમાં "
+"તે પણ વાયરલેસ પà«àª°àªµà«‡àª¶ બિંદà«àª¨à«‡ સà«àªªàª·à«àªŸ કરવા માટે વપરાશકરà«àª¤àª¾àª¨à«‡ પરવાનગી આપે છે કે "
+"જે કમà«àªªà«àª¯à«‚ટરમાં "
"વાયરલેસ કારà«àª¡ તેની સાથે સંકળાયેલ\n"
"હોવા જોઇàª."
-#: ../src/main.c:412
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr "અયોગà«àª¯ વિકલà«àªª. મહેરબાની કરીને યોગà«àª¯ વિકલà«àªªà«‹àª¨à«€ યાદી ને જોવા માટે --help ને વાપરો.\n"
+msgstr ""
+"અયોગà«àª¯ વિકલà«àªª. મહેરબાની કરીને યોગà«àª¯ વિકલà«àªªà«‹àª¨à«€ યાદી ને જોવા માટે --help ને "
+"વાપરો.\n"
-#: ../src/main.c:422
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "તમારે NetworkManager ને ચલાવવા રà«àªŸ તમારે રà«àªŸ હોલૠજરૂરી જ છે!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr ""
+"%s. મહેરબાની કરીને યોગà«àª¯ વિકલà«àªªà«‹àª¨à«€ યાદીને જોવા માટે --help ને વાપરો.\n"
+
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"આદેશ વાકà«àª¯ પર આપવામાં આવેલા નહિં ઓળખાયેલ લૉગ ડોમેઇન(ઓ) '%s' અવગણી રહà«àª¯àª¾ છીàª.\n"
-#: ../src/main.c:449
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "રૂપરેખાંકનને વાંચવાનૠનિષà«àª«àª³: (%d) %s\n"
-#: ../src/main.c:460
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. મહેરબાની કરીને યોગà«àª¯ વિકલà«àªªà«‹àª¨à«€ યાદીને જોવા માટે --help ને વાપરો.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "રૂપરેખાંકન ફાઇલમાં કà«àª·àª¤àª¿: %s.\n"
-#: ../src/main.c:467
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"રૂપરેખાંકન ફાઇલોમાંના નહિં ઓળખાયેલ લૉગ ડોમેઇન(ઓ) '%s' અવગણી રહà«àª¯àª¾ છીàª.\n"
+
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "સà«àª¥àª¿àª¤àª¿ ફાઇલ %s નà«àª‚ પદચà«àª›à«‡àª¦àª¨ કરવામાં નિષà«àª«àª³àª¤àª¾: (%d) %s\n"
-#: ../src/main.c:484
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "ડિમોનાઇઠકરી શકà«àª¯àª¾ નહિં: %s [ભૂલ %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:61
+#: ../src/bluez-manager/nm-bluez-device.c:193
+#, c-format
+msgid "%s Network"
+msgstr "%s નેટવરà«àª•"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# ને NetworkManager દà«àª¦àª¾àª°àª¾ બનાવેલ છે\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:68
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2629,224 +5931,1029 @@ msgstr ""
"# ને %s માંથી ભેગૠકરેલ છે\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "ન વાપરી શકાય તેવૠDHCP કà«àª²àª¾àª‡àª¨à«àªŸ મળી શકે છે."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' મળી શકે છે."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' મળી શકે છે."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "બિનઆધારભૂત DHCP કà«àª²àª¾àª‡àª¨à«àªŸ '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:400
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "નોંધ: libc સà«àª§àª¾àª°àª¨àª¾àª° ઠ૩ નામ સરà«àªµàª°à«‹ કરતા વધારે આધારને સમાવી શકતૠનથી."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:402
msgid "The nameservers listed below may not be recognized."
msgstr "નીચે યાદી થયેલ નામસરà«àªµàª°à«‹ ઠઓળખી શકાતા નથી."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "અજà«àªžàª¾àª¤ લોગ સà«àª¤àª° '%s'"
-#: ../src/logging/nm-logging.c:181
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "અજà«àªžàª¾àª¤ લોગ ડોમેઇન '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:280 ../src/nm-device-bt.c:351
-#, c-format
-msgid "CDMA connection %d"
-msgstr "Connexion CDMA %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "રૂપરેખાંકન ફાઇલ સà«àª¥àª¾àª¨"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "રૂપરેખાંકન ડિરેકà«àªŸàª°à«€ સà«àª¥àª¾àª¨"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' દà«àª¦àª¾àª°àª¾ અલગ થયેલ પà«àª²àª—ઇનોની યાદી"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "પà«àª²àª—ઇન1,પà«àª²àª—ઇન2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ઇનà«àªŸàª°àª¨à«‡àªŸ જોડાણને ચકાસવા માટે http(s) સરનામà«àª‚"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "જોડાણ ચકાસણી વચà«àªšà«‡àª¨à«‹ અંતરાલ (સેકંડ માં)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "જવાબની ઇચà«àª›àª¿àª¤ શરૂઆત"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "બિનà«àª—à«‹!"
-#: ../src/modem-manager/nm-modem-gsm.c:558 ../src/nm-device-bt.c:347
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:865 ../src/devices/nm-device-bt.c:333
#, c-format
msgid "GSM connection %d"
msgstr "Connexion GSM %d"
-#: ../src/nm-device-bond.c:192
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:892 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "Connexion CDMA %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "બોનà«àª¡ જોડાણ %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL જોડાણ %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "બà«àª°àª¿àªœ જોડાણ %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN જોડાણ %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN જોડાણ %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE જોડાણ %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "વાયર થયેલ જોડાણ %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand જોડાણ %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "મેશ %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "જૂથ જોડાણ %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN જોડાણ %d"
-#: ../src/nm-manager.c:662
+#: ../src/nm-manager.c:3452 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN જોડાણ %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:220
+msgid "error occurred while waiting for data on socket"
+msgstr "ભૂલ ઉદà«àª­àªµà«€ જà«àª¯àª¾àª°à«‡ સોકેટ પર માહિતી માટે રાહ જોઇ રહà«àª¯àª¾ હોય"
+
+#: ../src/nm-netlink-monitor.c:241
#, c-format
msgid "error processing netlink message: %s"
msgstr "નેટલિંક સંદેશ ને પà«àª°àª•à«àª°àª¿àª¯àª¾ કરવામાં ભૂલ: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "ભૂલ ઉદà«àª­àªµà«€ જà«àª¯àª¾àª°à«‡ સોકેટ પર માહિતી માટે રાહ જોઇ રહà«àª¯àª¾ હોય"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:265
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "કડી સà«àª¥àª¿àª¤àª¿àª¨à«‡ મોનિટર કરવા માટે નેટલિંકને જોડવામાં અસમરà«àª¥: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:276
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "નેટલિંકને સંભાળવાનો શà«àª°à«‡àª¯àª¨à«‡ જવાનà«àª‚ સકà«àª°àª¿àª¯ કરવા માટે અસમરà«àª¥: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:320 ../src/nm-netlink-monitor.c:382
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "કડી સà«àª¥àª¿àª¤àª¿àª¨à«‡ મોનિટર કરવા માટે નેટલિંકને સંભાળવાનà«àª‚ ફાળવવામાં અસમરà«àª¥: %s"
-
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "કડી સà«àª¥àª¿àª¤àª¿àª¨à«‡ મોનિટર કરવા માટે નેટલિંક કડી કેશને ફાળવવામાં અસમરà«àª¥: %s"
+msgstr ""
+"કડી સà«àª¥àª¿àª¤àª¿àª¨à«‡ મોનિટર કરવા માટે નેટલિંકને સંભાળવાનà«àª‚ ફાળવવામાં અસમરà«àª¥: %s"
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:470
#, c-format
msgid "unable to join netlink group: %s"
msgstr "નેટલીંક જૂથ ને જોડાવવાનà«àª‚ અસમરà«àª¥: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "કડી કેશને સà«àª§àª¾àª°à«‹ કરતી વખતે ભૂલ: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "નેટવરà«àª•àª¨à«‡ બંધ કરવા માટે NetworkManager ની જરૂર છે"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "સિસà«àªŸàª®"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3663
-msgid "Bond"
-msgstr "બોનà«àª¡"
-
-#: ../test/nm-online.c:111
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\rજોડાઇ રહà«àª¯àª¾ છે"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "જોડાણ માટે રાહ જોવાનો સમય, સેકંડમાં (મૂળભૂત 30 છે)"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr "જોડાણ માટે રાહ જોવાનો સમય, સેકંડમાં (વિકà«àª²àªª વગર, મૂળભૂત કિંમત 30 છે)"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr "તરત જ બહાર નીકળો જો NetworkManager ચાલી ન રહà«àª¯à« હોય અથવા જોડાઇ ન રહà«àª¯à« હોય"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "તરત જ બહાર નીકળો જો NetworkManager ચાલી રહà«àª¯à« નથી"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "કંઇપણ છાપો નહિં"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "NetworkManager માં સફળ જોડાણ માટે રાહ જોવે છે."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"શરૂઆતનાં નેટવરà«àª• જોડાણને સકà«àª°àª¿àª¯ કરવાનà«àª‚ સમાપà«àª¤ કરવા માટે NetworkManager માટે "
+"રાહ જà«àª“."
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
-msgstr "અયોગà«àª¯ વિકલà«àªª. મહેરબાની કરીને યોગà«àª¯ વિકલà«àªªà«‹àª¨à«€ યાદી ને જોવા માટે --help ને વાપરો."
+msgstr ""
+"અયોગà«àª¯ વિકલà«àªª. મહેરબાની કરીને યોગà«àª¯ વિકલà«àªªà«‹àª¨à«€ યાદી ને જોવા માટે --help ને "
+"વાપરો."
+
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "બરાબર"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "કામચલાઉ ફાઇલ બનાવી શકà«àª¯àª¾ નહિ: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "સંપાદન નિષà«àª«àª³: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ફાઇલ પà«àª¨àªƒ-વાંચી શકà«àª¯àª¾ નહિ: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ઇથરનેટ જોડાણ %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi જોડાણ %d"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "મોબાઇલ બà«àª°à«‹àª¡àª¬à«…નà«àª¡ જોડાણ %d"
-#~ msgid "SCOPE"
-#~ msgstr "SCOPE"
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL જોડાણ %d"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "પસંદ કરો..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "ઉમેરો"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:175
+#: ../tui/nmt-page-ip6.c:173 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "ફેરફાર..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "કાઢી નાંખો"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "જોડાણ '%s' માટે સંપાદક બનાવી શકà«àª¯àª¾ નહિ કે જે '%s' પà«àª°àª•àª¾àª°àª¨à«àª‚ છે."
-#~ msgid "system"
-#~ msgstr "સિસà«àªŸàª®"
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "અયોગà«àª¯ જોડાણ '%s' માટે સંપાદક બનાવી શકà«àª¯àª¾ નહિ."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "જોડાણમાં ફેરફાર કરો"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "જોડાણ સંગà«àª°àª¹àªµàª¾àª®àª¾àª‚ કà«àª·àª¤àª¿: %s"
-#~ msgid "user"
-#~ msgstr "વપરાશકરà«àª¤àª¾"
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "જોડાણ સંગà«àª°àª¹àªµàª¾àª®àª¾àª‚ અસમરà«àª¥: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "નવà«àª‚ જોડાણ ઉમેરવામાં અસમરà«àª¥: %s"
-#~ msgid "System connections"
-#~ msgstr "સિસà«àªŸàª® જોડાણો"
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "રદ કરો"
-#~ msgid "User connections"
-#~ msgstr "વપરાશકરà«àª¤àª¾ જોડાણો"
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(મૂળભૂત)"
-#~ msgid "state: %s\n"
-#~ msgstr "પરિસà«àª¥àª¿àª¤àª¿: %s\n"
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "બાઇટો"
-#~ msgid "Connection activated\n"
-#~ msgstr "સકà«àª°àª¿àª¯ થયેલ જોડાણ\n"
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "રાઉનà«àª¡-રૉબિન"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "પરિસà«àª¥àª¿àª¤àª¿: %s (%d)\n"
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "કà«àª°àª¿àª¯àª¾ બૅકઅપ"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "ભૂલ: '%s' માટે સકà«àª°àª¿àª¯ જોડાણ પà«àª°àª¾àªªà«àª¤ કરવામાં નિષà«àª«àª³àª¤àª¾."
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "સકà«àª°àª¿àª¯ જોડાણ પરિસà«àª¥àª¿àª¤àª¿: %s\n"
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "બà«àª°à«‹àª¡àª•àª¾àª¸à«àªŸ"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "સકà«àª°àª¿àª¯ જોડાણ પાથ: %s\n"
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-SETTINGS"
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "àªàª¡à«‡àªªà«àªŸà«€àªµ ટà«àª°àª¾àª¨à«àª¸àª®à«€àªŸ લૉડ બેલેનà«àª¸à«€àª‚ગ (tlb)"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "àªàª¡à«‡àªªà«àªŸà«€àªµ લૉડ બેલેનà«àª¸à«€àª‚ગ (alb)"
-#~ msgid "unknown)"
-#~ msgstr "અજà«àªžàª¾àª¤)"
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (આગà«àª°àª¹àª£à«€àª¯)"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "ઉપકરણ પરિસà«àª¥àª¿àª¤àª¿: %d (%s)\n"
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
-#~ msgid "not set"
-#~ msgstr "સà«àª¯à«‹àªœàª¿àª¤ નથી"
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "ગૌણ"
-#~ msgid "Auto %s"
-#~ msgstr "%s સà«àªµàª¯àª‚ કરો"
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "સà«àª¥àª¿àª¤àª¿"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "પà«àª°àª¾àª¥àª®àª¿àª•"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "કડી મોનીટરીંગ"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "મોનીટરીંગ આવૃતà«àª¤àª¿"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "કડી ઉપર આવવામાં વિલંબ"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "કડી નીચે લાવવામાં વિલંબ"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP લકà«àª·à«àª¯à«‹"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "BRIDGE PORT"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "પà«àª°àª¾àª§àª¾àª¨à«àª¯"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "પાથ ખરà«àªš"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "હેરપિન સà«àª¥àª¿àª¤àª¿"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRIDGE"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "સેકનà«àª¡à«‹"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "ઊંમર સમય"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP (સà«àªªàª¾àª¨à«€àª‚ગ ટà«àª°à«€ પà«àª°à«‹àªŸà«‹àª•à«‹àª²) સકà«àª°àª¿àª¯ કરો"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "ફોરà«àªµàª°à«àª¡ ડિલે"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "હેલો ટાઇમ"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "મહતà«àª¤àª® ઊંમર"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ઇથરનેટ"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "કà«àª²à«‹àª¨ થયેલ MAC સરનામà«àª‚"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "ઈનà«àª«à«€àª¬à«‡àª¨à«àª¡"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "ડેટાગà«àª°àª¾àª®"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "જોડાયેલ"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "ટà«àª°àª¾àª¨à«àª¸àªªà«‹àª°à«àªŸ સà«àª¥àª¿àª¤àª¿"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "નિષà«àª•à«àª°àª¿àª¯àª•à«ƒàª¤"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "આપોઆપ"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "કડી-સà«àª¥àª¾àª¨àª¿àª¯"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "જાતે"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "વહેંચાયેલ"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 રૂપરેખાંકન"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(કોઇ વૈવિધà«àª¯àªªà«‚રà«àª£ મારà«àª—à«‹ નથી)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "àªàª• વૈવિધà«àª¯àªªà«‚રà«àª£ મારà«àª—"
+msgstr[1] "%d વૈવિધà«àª¯àªªà«‚રà«àª£ મારà«àª—à«‹"
+
+#: ../tui/nmt-page-ip4.c:144 ../tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "સરનામાં"
+
+#: ../tui/nmt-page-ip4.c:150 ../tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "ગેટવે"
+
+#: ../tui/nmt-page-ip4.c:156 ../tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS સરà«àªµàª°à«‹"
+
+#: ../tui/nmt-page-ip4.c:162 ../tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "ડોમેઇનો શોધો"
+
+#: ../tui/nmt-page-ip4.c:177 ../tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "રાઉટીંગ"
+
+#: ../tui/nmt-page-ip4.c:179 ../tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "મૂળભૂત મારà«àª— માટે આ નેટવરà«àª• કà«àª¯àª¾àª°à«‡àª¯ વાપરશો નહિ"
+
+#: ../tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "આ જોડાણ માટે IPv4 સરનામાકરણ જરૂરી છે"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "અવગણો"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "આપોઆપ (DHCP-માતà«àª°)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 રૂપરેખાંકન"
+
+#: ../tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "આ જોડાણ માટે IPv6 સરનામાકરણ જરૂરી છે"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "છà«àªªàª¾àªµà«‹"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "બતાવો"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "રૂપરેખા નામ"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "ઉપકરણ"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "આપોઆપ જોડાવ"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "બધા વપરાશકરà«àª¤àª¾àª“ માટે ઉપલબà«àª§"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "ટીમ પોરà«àªŸ"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON રૂપરેખાંકન"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "ટીમ"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "પિતૃ"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "કà«àª²àª¾àª¯àª¨à«àªŸ"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "àªàª•à«àª¸à«‡àª¸ પોંઇનà«àªŸ"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "àªàª¡-હોક નેટવરà«àª•"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "આપોઆપ"
+
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "કંઇ નહિ"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 વà«àª¯àª•à«àª¤àª¿àª—ત"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 àªàª¨à«àªŸàª°àªªà«àª°àª¾àª‡àª"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit કી (Hex અથવા ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-બીટ પાસફà«àª°à«‡àª"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "વૈશà«àªµàª¿àª• WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (મૂળભૂત)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "સિસà«àªŸàª® ખોલો"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "વહેંચાયેલ કી"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "ચેનલ"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "સà«àª°àª•à«àª·àª¾"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "પાસવરà«àª¡"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise માટે હજૠસà«àª§à«€ કોઇ આધાર નથી...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "કી"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP અનà«àª•à«àª°àª®"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "સતà«àª¤àª¾àª§àª¿àª•àª°àª£"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "dynamic-wep માટે હજૠસà«àª§à«€ કોઇ આધાર નથી...)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "વપરાશકરà«àª¤àª¾àª¨àª¾àª®"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "દર વખતે આ પાસવરà«àª¡ માટે પૂછો"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "પાસવરà«àª¡ બતાવો"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "અંતિમ મà«àª•àª¾àª®"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "પૂરà«àªµàª—"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "આગળનો હૉપ"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "મેટà«àª°àª¿àª•"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "કોઇ વૈવિધà«àª¯àªªà«‚રà«àª£ મારà«àª—à«‹ વà«àª¯àª¾àª–à«àª¯àª¾àª¯àª¿àª¤ નથી."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "ઓળખ"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "ખાનગી કી પાસવરà«àª¡"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "સેવા"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "વાયરલેસ નેટવરà«àª• માટે સતà«àª¤àª¾àª§àª¿àª•àª°àª£ જરૂરી"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"વાયરલેસ નેટવરà«àª• '%s' વાપરવા માટે પાસવરà«àª¡à«‹ અથવા àªàª¨àª•à«àª°àª¿àªªà«àª¶àª¨ કીઓ જરૂરી છે."
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "વાયરવાળà«àª‚ 802.1X સતà«àª¤àª¾àª§àª¿àª•àª°àª£"
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "નેટવરà«àª• નામ"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL સતà«àª¤àª¾àª§àª¿àª•àª°àª£"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "પિન કોડ જરૂરી"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "મોબાઇલ બà«àª°à«‹àª¡àª¬à«…નà«àª¡ ઉપકરણ માટે પિન કોડ જરૂરી છે"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "પિન"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "મોબાઇલ બà«àª°à«‹àª¡àª¬à«…નà«àª¡ નેટવરà«àª• પાસવરà«àª¡"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' સાથે જોડાવા માટે પાસવરà«àª¡ જરૂરી."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "જે પà«àª°àª•àª¾àª°àª¨à«àª‚ ગૌણ જોડાણ તમે ઉમેરવા ઇચà«àª›à«‹ છો તે પસંદ કરો."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "ઉમેરો..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "દૂર કરો"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "સકà«àª°àª¿àª¯àª•àª°àª£ નિષà«àª«àª³"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "જોડાઇ રહà«àª¯àª¾ છીàª..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "જોડાણ સકà«àª°àª¿àª¯ કરી શકà«àª¯àª¾ નહિ: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "સકà«àª°àª¿àª¯ કરો"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "નિષà«àª•à«àª°àª¿àª¯ કરો"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "બહાર નીકળો"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "આવà«àª‚ કોઇ જોડાણ '%s' નથી"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "જોડાણ પહેલાથી જ સકà«àª°àª¿àª¯ છે"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "બનાવો"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "તમે જે પà«àª°àª•àª¾àª°àª¨à«àª‚ જોડાણ બનાવવા ઇચà«àª›à«‹ છો તે પસંદ કરો."
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"જો તમે VPN બનાવી રહà«àª¯àª¾ હોય, અને જે પà«àª°àª•àª¾àª°àª¨à«àª‚ VPN જોડાણ બનાવવા ઇચà«àª›à«‹ તે "
+"યાદીમાં દેખાય "
+"નહિ, તો તમારી પાસે યોગà«àª¯ VPN પà«àª²àª—ઇન સà«àª¥àª¾àªªàª¿àª¤ થયેલ નહિ હોઇ શકે."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "નવà«àª‚ જોડાણ"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "જોડાણ કાઢવામાં અસમરà«àª¥: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "શà«àª‚ તમે ખરેખર '%s' જોડાણ કાઢી નાંખવા માંગો છો?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "જોડાણ કાઢી શકà«àª¯àª¾ નહિ: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "યજમાનનામ સà«àª¯à«‹àªœà«€àª¤ કરો"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "યજમાનનામ"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "યજમાનનામને '%s' માં સà«àª¯à«‹àªœà«€àª¤ કરો"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "યજમાનનામ સà«àª¯à«‹àªœà«€àª¤ કરવામાં અસમરà«àª¥: %s"
+
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "જોડાણ"
+
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "જોડાણમાં ફેરફાર કરો"
+
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "જોડાણ સકà«àª°àª¿àª¯ કરો"
+
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "નવà«àª‚ યજમાનનામ"
+
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "સિસà«àª¯àª® યજમાનનામ સà«àª¯à«‹àªœà«€àª¤ કરો"
+
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "મહેરબાની કરીને વિકલà«àªª પસંદ કરો"
+
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "વપરાશ"
+
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "દલીલો પસાર કરી શકà«àª¯àª¾ નહિ"
+
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManager ચાલતà«àª‚ નથી."
+
+#~ msgid ""
+#~ "Usage: nmcli connection show { ARGUMENTS | help }\n"
+#~ "\n"
+#~ "ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+#~ "\n"
+#~ "Show connections which are currently used by a device to connect to a "
+#~ "network.\n"
+#~ "Without a parameter, all active connections are listed. When <ID> is "
+#~ "provided,\n"
+#~ "the connection details are displayed instead.\n"
+#~ "\n"
+#~ "ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+#~ "\n"
+#~ "Show in-memory and on-disk connections, some of which may also be active "
+#~ "if\n"
+#~ "a device is using that connection profile. Without a parameter, all "
+#~ "profiles\n"
+#~ "are listed. When <ID> is provided, the profile details are displayed "
+#~ "instead.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "વપરાશ: nmcli connection show { ARGUMENTS | help }\n"
+#~ "\n"
+#~ "ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+#~ "\n"
+#~ "નેટવરà«àª•àª®àª¾àª‚ જોડાવા માટે ઉપકરણ દà«àªµàª¾àª°àª¾ વરà«àª¤àª®àª¾àª¨àª®àª¾àª‚ વપરાતા જોડાણો બતાવો.\n"
+#~ "પરિમાણ વિના, બધા સકà«àª°àª¿àª¯ જોડાણોની યાદી અપાયેલી છે. જà«àª¯àª¾àª°à«‡ <ID> પૂરૠપાડવામાં આવે,\n"
+#~ "તà«àª¯àª¾àª°à«‡ તેની જગà«àª¯àª¾àª જોડાણ વિગતો દરà«àª¶àª¾àªµàªµàª¾àª®àª¾àª‚ આવે છે.\n"
+#~ "\n"
+#~ "ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+#~ "\n"
+#~ "મેમરીમાં અને ડિસà«àª•-પરના જોડાણો બતાવો, જેમાં અમà«àª• સકà«àª°àª¿àª¯ પણ હોઇ શકે જો\n"
+#~ "ઉપકરણ તે જોડાણ રૂપરેખા વાપરી રહà«àª¯à«àª‚ હોય. પરિમાણ વિના, બધી રૂપરેખાઓની\n"
+#~ "યાદી અપાયેલી છે. જà«àª¯àª¾àª°à«‡ <ID> પૂરૠપાડવામાં આવે, તà«àª¯àª¾àª°à«‡ તેની જગà«àª¯àª¾àª રૂપરેખા વિગતો "
+#~ "દરà«àª¶àª¾àªµàªµàª¾àª®àª¾àª‚ આવે છે.\n"
+#~ "\n"
+
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "ભૂલ: 'રૂપરેખાંકિત થયેલની યાદી': %s"
+
+#~ msgid "List of configured connections"
+#~ msgstr "રૂપરેખાંકિત થયેલ જોડાણોની યાદી"
+
+#~ msgid "Error: 'show configured': %s"
+#~ msgstr "ભૂલ: 'રૂપરેખાંકિત થયેલ બતાવો': %s"
+
+#~ msgid "Error: 'list active': %s"
+#~ msgstr "ભૂલ: 'સકà«àª°àª¿àª¯àª¨à«€ યાદી': %s"
+
+#~ msgid "List of active connections"
+#~ msgstr "સકà«àª°àª¿àª¯ જોડાણોની યાદી"
+
+#~ msgid "Error: 'show active': %s"
+#~ msgstr "ભૂલ: 'સકà«àª°àª¿àª¯ બતાવો': %s"
+
+#~ msgid ""
+#~ "save :: save the connection\n"
+#~ "\n"
+#~ "Sends the connection to NetworkManager that will save it.\n"
+#~ msgstr ""
+#~ "save :: જોડાણને સંગà«àª°àª¹à«‹\n"
+#~ "\n"
+#~ "NetworkManager માં જોડાણને મોકલે છે કે જે તેને સંગà«àª°àª¹àª¶à«‡.\n"
+
+#~ msgid ""
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr "ભૂલ: 'રૂપરેખાંકિત' અથવા 'સકà«àª°àª¿àª¯' આદેશે 'જોડાણ બતાવો' માટે ઇચà«àª›àª¾ રાખેલ છે."
diff --git a/po/hi.po b/po/hi.po
index 542397c23..8111be67c 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -2,1469 +2,3421 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Rajesh Ranjan <rranjan@redhat.com>, 2010, 2012.
+# Translators:
+# Rajesh Ranjan <rranjan@redhat.com>, 2010, 2012, 2013.
# chandankumar <chandankumar.093047@gmail.com>, 2012.
+# raj <raj>, 2013.
+# rajesh <rranjan@redhat.com>, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: hi\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-11-13 15:25+0000\n"
-"PO-Revision-Date: 2012-11-23 14:11+0530\n"
-"Last-Translator: Rajesh Ranjan <rajesh>\n"
-"Language-Team: Hindi <kde-i18n-doc@kde.org>\n"
-"Language: hi\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2014-01-29 17:21+0630\n"
+"Last-Translator: Rajesh <rranjan@redhat.com>\n"
+"Language-Team: Hindi <kde-i18n-doc@kde.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"\n"
-"\n"
-"\n"
-"\n"
-"\n"
-"\n"
+"Language: hi\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
msgstr "समूह"
-#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "पता"
-#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "रूट"
-#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
-#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMAIN"
-#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "जीता"
-#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "विकलà¥à¤ª"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "अमानà¥à¤¯ IPv4 पता '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "अवैध उपसरà¥à¤— '%s'; <1-32> अनà¥à¤®à¤¤à¤¿"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "अवैध गेटवे '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "अमानà¥à¤¯ IPv6 पता '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "अवैध उपसरà¥à¤— '%s'; <1-128> अनà¥à¤®à¤¤à¤¿"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "अवैध IPv4 रूट '%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "अवैध उपसरà¥à¤— '%s'; <0-32> अनà¥à¤®à¤¤à¤¿"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "अमानà¥à¤¯ अगला हॉप पता '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "अमानà¥à¤¯ मीटà¥à¤°à¤¿à¤• '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "अवैध IPv6 रूट '%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "अवैध उपसरà¥à¤— '%s'; <0-128> अनà¥à¤®à¤¤à¤¿"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "अपà¥à¤°à¤¬à¤‚धित"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "अनà¥à¤ªà¤²à¤¬à¥à¤§"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "डिसकनेकà¥à¤Ÿà¥‡à¤¡"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (तैयार)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (विनà¥à¤¯à¤¸à¥à¤¤ कर रहा है)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (सतà¥à¤¯à¤¾à¤ªà¤¨ जरूरी)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (IP विनà¥à¤¯à¤¾à¤¸ पा रहा है)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (IP कनेकà¥à¤¶à¤¨ जाà¤à¤š रहा है)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "जà¥à¤¡à¤¼ रहा हैं (माधà¥à¤¯à¤®à¤¿à¤• कनेकà¥à¤¶à¤¨ शà¥à¤°à¥‚ करने के लिà¤)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "कनेकà¥à¤Ÿà¥‡à¤¡"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:635
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
msgid "deactivating"
msgstr "अकà¥à¤°à¤¿à¤¯ कर रहा है"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "कनेकà¥à¤¶à¤¨ विफल"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:638
-#: ../cli/src/connections.c:661 ../cli/src/connections.c:1353
-#: ../cli/src/devices.c:645 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:451
-#: ../src/main.c:470
+#: ../cli/src/common.c:643 ../cli/src/connections.c:737
+#: ../cli/src/connections.c:760 ../cli/src/connections.c:1462
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2257
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1080 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "अजà¥à¤žà¤¾à¤¤"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "कोई कारण नहीं दिया गया"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
msgid "Unknown error"
msgstr "अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "यà¥à¤•à¥à¤¤à¤¿ अब पà¥à¤°à¤¬à¤‚धित है"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "यà¥à¤•à¥à¤¤à¤¿ अब पà¥à¤°à¤¬à¤‚धित नहीं है"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "यà¥à¤•à¥à¤¤à¤¿ विनà¥à¤¯à¤¾à¤¸ के लिठनहीं सज सकता है"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
-"आईपी ​​विनà¥à¤¯à¤¾à¤¸ (कोई उपलबà¥à¤§ पता नहीं, मधà¥à¤¯à¤¾à¤‚तर, आदि) आरकà¥à¤·à¤¿à¤¤ नहीं किया जा सकता "
-"है"
+"आईपी ​​विनà¥à¤¯à¤¾à¤¸ (कोई उपलबà¥à¤§ पता नहीं, मधà¥à¤¯à¤¾à¤‚तर, आदि) आरकà¥à¤·à¤¿à¤¤ नहीं किया जा "
+"सकता है"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "आईपी ​​विनà¥à¤¯à¤¾à¤¸ अब मानà¥à¤¯ नहीं है"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "गोपनीयता की आवशà¥à¤¯à¤•à¤¤à¤¾ है, लेकिन नहीं पà¥à¤°à¤¦à¤¾à¤¨ की गई"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X निवेदक डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ हो गया"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X निवेदक विनà¥à¤¯à¤¾à¤¸ विफल रहा"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X निवेदक विफल रहा"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X निवेदक को पà¥à¤°à¤®à¤¾à¤£à¤¿à¤¤ करने में बहà¥à¤¤ जà¥à¤¯à¤¾à¤¦à¤¾ समय लग रहा हैं"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "PPP सेवा आरंभ होने में विफल रहा"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP सेवा डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ हो गया"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP विफल"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "DHCP कà¥à¤²à¤¾à¤‡à¤‚ट के लिठपà¥à¤°à¤¾à¤°à¤‚भ करने में विफल"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP कà¥à¤²à¤¾à¤‡à¤‚ट विफल"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "साà¤à¤¾ कनेकà¥à¤¶à¤¨ सेवा पà¥à¤°à¤¾à¤°à¤‚भ करने में विफल"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "साà¤à¤¾ कनेकà¥à¤¶à¤¨ सेवा विफल"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "AutoIP सेवा आरंभ होने में विफल रहा"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP सेवा तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "VPN सेवा विफल"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "लाइन वà¥à¤¯à¤¸à¥à¤¤ है"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "डायल टोन नहीं"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "कोई वाहक सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ नहीं किया जा सकता"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "डायलन अनà¥à¤°à¥‹à¤§ का समय समापà¥à¤¤"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "डायलन करने का पà¥à¤°à¤¯à¤¾à¤¸ विफल"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "मोडेम आरमà¥à¤­à¥€à¤•à¤°à¤£ असफ़ल रहा"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ APN का चयन करने में विफल"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "संजाल के लिठकोई खोज नहीं"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "नेटवरà¥à¤• पंजीकरण से इनकार किया"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "संजाल पंजीयन समयबाहà¥à¤¯ हो गई है"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "अनà¥à¤°à¥‹à¤§ नेटवरà¥à¤• के साथ पंजीकृत करने में विफल"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN चेक करने में विफल रहा"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "इस उपकरण के लिठआवशà¥à¤¯à¤• फरà¥à¤®à¤µà¥‡à¤¯à¤° लापता हो सकता है"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "उपकरण हटाया गया था"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक सो गया"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "उपकरण सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ गायब हो गया"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "यà¥à¤•à¥à¤¤à¤¿ उपयोगकरà¥à¤¤à¤¾ या गà¥à¤°à¤¾à¤¹à¤• दà¥à¤µà¤¾à¤°à¤¾ डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ कर दिया गया"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr " कैरियर/लिंक बदल दिया गया"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "डिवाइस मौजूदा कनेकà¥à¤¶à¤¨ मान लिया गया था."
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "निवेदक अब उपलबà¥à¤§ है"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "मॉडेम पाया नहीं जा सका"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "बà¥à¤²à¥‚टूथ कनेकà¥à¤¶à¤¨ में विफल रहा है या समयबाहà¥à¤¯ हो गई है"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम कारà¥à¤¡ नहीं समà¥à¤®à¤¿à¤²à¤¿à¤¤ किया गया हैं"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम पिन आवशà¥à¤¯à¤• "
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम PUK की आवशà¥à¤¯à¤•à¤¤à¤¾ है"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम गलत"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand डिवाइस जà¥à¤¡à¤¼à¤¾ हà¥à¤† मोड का समरà¥à¤¥à¤¨ नहीं करता हैं"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "कनेकà¥à¤¶à¤¨ के à¤à¤• निरà¥à¤­à¤°à¤¤à¤¾ विफल रहा"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL बà¥à¤°à¤¿à¤œ पर आरà¤à¤«à¤¸à¥€ 2684 ईथरनेट के साथ à¤à¤• समसà¥à¤¯à¤¾"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager अनà¥à¤ªà¤²à¤¬à¥à¤§ है"
-#: ../cli/src/common.c:558
-#| msgid "The modem could not be found"
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "वाइ-फाइ संजाल पाया नहीं जा सका"
-#: ../cli/src/common.c:561
-#| msgid "A dependency of the connection failed"
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "बेस कनेकà¥à¤¶à¤¨ का दूसरा कनेकà¥à¤¶à¤¨ विफल रहा"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:295 ../cli/src/devices.c:311
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:477
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB या FCoE सेटअप विफल"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "टीम का नियंतà¥à¤°à¤£ विफल"
+
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "अजà¥à¤žà¤¾à¤¤"
-#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:107 ../cli/src/devices.c:131 ../cli/src/devices.c:141
-#: ../cli/src/devices.c:151 ../cli/src/devices.c:165 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:217 ../cli/src/devices.c:226
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "अवैध पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ नकà¥à¤¶à¤¾ '%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ '%s' मानà¥à¤¯ नहीं है (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' à¤à¤• वैध टीम विनà¥à¤¯à¤¾à¤¸ नहीं है या फ़ाइल नाम नहीं है."
+
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "सेटिंग नाम? "
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "गà¥à¤£ नाम?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° दरà¥à¤œ करें: "
+
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:175
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "नाम"
-#. 0
-#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:204
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:201
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "पà¥à¤°à¤•à¤¾à¤°"
-#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "समय-चिहà¥à¤¨"
-#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "समय-चिहà¥à¤¨ अचल"
-#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "ऑटो कनेकà¥à¤Ÿ"
-#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "पढ़ने लायक"
-#. 6
-#. 8
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS पथ"
-#. 2
-#: ../cli/src/connections.c:131
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "उपकरण"
-#. 3
-#. 1
-#. 8
-#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:116 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "सà¥à¤¥à¤¿à¤¤à¤¿"
-#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "डिफ़ॉलà¥à¤Ÿ"
-#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:180
msgid "DEFAULT6"
msgstr "DEFAULT6"
-#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
msgid "VPN"
msgstr "VPN"
-#. 9
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PATH"
-#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:185
msgid "ZONE"
msgstr "कà¥à¤·à¥‡à¤¤à¥à¤°"
-#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:186
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "सामानà¥à¤¯"
-
-#. 0
-#: ../cli/src/connections.c:149
-msgid "IP"
-msgstr "आईपी"
-
-#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:202
msgid "USERNAME"
msgstr "उपयोकà¥à¤¤à¤¾à¤¨à¤¾à¤®"
-#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:203
msgid "GATEWAY"
msgstr "गेटवे"
-#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:204
msgid "BANNER"
msgstr "धà¥à¤µà¤œ"
-#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
msgstr "VPN-सà¥à¤¥à¤¿à¤¤à¤¿"
-#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:206
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
-#, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down | delete }\n"
-#| "\n"
-#| " list [id <id> | uuid <id>]\n"
-#| " status [id <id> | uuid <id> | path <path>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-#| "nowait] [--timeout <timeout>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
-#| " delete id <id> | uuid <id>\n"
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "सामानà¥à¤¯"
+
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:255
+#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+
+#: ../cli/src/connections.c:278
+#, c-format
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Show connections which are currently used by a device to connect to a "
+"network.\n"
+"Without a parameter, all active connections are listed. When <ID> is "
+"provided,\n"
+"the connection details are displayed instead.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Show in-memory and on-disk connections, some of which may also be active if\n"
+"a device is using that connection profile. Without a parameter, all profiles\n"
+"are listed. When <ID> is provided, the profile details are displayed instead."
+"\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"कनेकà¥à¤¶à¤¨ दिखाà¤à¤ जो अभी किसी यà¥à¤•à¥à¤¤à¤¿ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤— किया गया है जो किसी संजाल से "
+"कनेकà¥à¤Ÿ हà¥à¤† है.\n"
+"बिना किसी पैरामीटर के, सभी सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ सूचीबदà¥à¤§ हैं. जब <ID> दिठजाते "
+"हैं,\n"
+"तो कनेकà¥à¤¶à¤¨ विवरण यहाठदिखाठगठहैं.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"सà¥à¤®à¥ƒà¤¤à¤¿ और ऑनडिसà¥à¤• कनेकà¥à¤¶à¤¨ दिखाà¤à¤, उनमें से कà¥à¤› सकà¥à¤°à¤¿à¤¯ हो सकते हैं यदि\n"
+"कोई यà¥à¤•à¥à¤¤à¤¿ उस कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² को पà¥à¤°à¤¯à¥‹à¤— कर रहा है. बिना किसी पैरामीटर के, "
+"सभी पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² सूचीबदà¥à¤§ हैं.\n जब <ID> पà¥à¤°à¤¦à¤¾à¤¨ किठजाते हैं, पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² विवरण "
+"इसके बजाय दिखाठजाते हैं."
+"\n"
+"\n"
+
+#: ../cli/src/connections.c:297
+#, c-format
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"किसी यà¥à¤•à¥à¤¤à¤¿ पर कनेकà¥à¤¶à¤¨ को सकà¥à¤°à¤¿à¤¯ करें. सकà¥à¤°à¤¿à¤¯ करने के लिठपà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤²\n"
+"इसके नाम, UUID या D-Bus पथ के दà¥à¤µà¤¾à¤°à¤¾ पहचाने जाते हैं.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"कनेकà¥à¤¶à¤¨ के साथ यà¥à¤•à¥à¤¤à¤¿ को सकà¥à¤°à¤¿à¤¯ करें. कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤²\n"
+"NetworkManager दà¥à¤µà¤¾à¤°à¤¾ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से चà¥à¤¨à¤¾ गया है.\n"
+"\n"
+"ifname - कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ करने के लिठयà¥à¤•à¥à¤¤à¤¿ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करता है\n"
+"ap - AP को निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करता है जिसमें कनेकà¥à¤Ÿ किया जाना है (केवल Wi-Fi के "
+"लिठवैध है)\n"
+"nsp - NSP निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करता है जिसमें कनेकà¥à¤Ÿ करना है (केवल WiMAX के लिठवैध)\n"
+"\n"
+
+#: ../cli/src/connections.c:318
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"किसी यà¥à¤•à¥à¤¤à¤¿ से कनेकà¥à¤¶à¤¨ निषà¥à¤•à¥à¤°à¤¿à¤¯ करें (आगे सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ से\n"
+"रोकने के बिना). निषà¥à¤•à¥à¤°à¤¿à¤¯ करने के लिठपà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² इसके नाम के दà¥à¤µà¤¾à¤°à¤¾,\n"
+"UUID या D-Bus पथ के दà¥à¤µà¤¾à¤°à¤¾ पहचाने जाते हैं.\n"
+"\n"
+
+#: ../cli/src/connections.c:331
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+
+#: ../cli/src/connections.c:408
+#, c-format
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"कनेकà¥à¤¶à¤¨ फ़ाइल में à¤à¤•à¤² गà¥à¤£ के साथ बदलें.\n"
+"पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² इसके नाम के दà¥à¤µà¤¾à¤°à¤¾ पहचाना जाता है, UUID या D-Bus पथ दà¥à¤µà¤¾à¤°à¤¾.\n"
+"\n"
+
+#: ../cli/src/connections.c:420
+#, c-format
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"किसी अंतःकà¥à¤°à¤¿à¤¯à¤¾à¤¤à¥à¤®à¤• संपादक में मौजूदा कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² संपादित करें.\n"
+"यह पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² इसके नाम से पहचाना जाता है, UUID या D-Bus पथ दà¥à¤µà¤¾à¤°à¤¾\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"किसी अंतःकà¥à¤°à¤¿à¤¯à¤¾à¤¤à¥à¤®à¤• संपादक में कोई नया कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² जोड़ें.\n"
+"\n"
+
+#: ../cli/src/connections.c:436
+#, c-format
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"कनेकà¥à¤¶à¤¨ फ़ाइल में à¤à¤•à¤² गà¥à¤£ के साथ बदलें.\n"
+"पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² इसके नाम के दà¥à¤µà¤¾à¤°à¤¾ पहचाना जाता है, UUID या D-Bus पथ दà¥à¤µà¤¾à¤°à¤¾.\n"
"\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:448
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'con list': %s"
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection reload { help }\n"
+"\n"
+"डिसà¥à¤• से सभी कनेकà¥à¤¶à¤¨ फ़ाइल फिर लोड करें.\n"
+"\n"
-#: ../cli/src/connections.c:253 ../cli/src/connections.c:613
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'con list': %s; अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"डिसà¥à¤• से à¤à¤• या अधिक कनेकà¥à¤¶à¤¨ फ़ाइल लोड/रिलोड करें. इसका उपयोग\n"
+"किसी कनेकà¥à¤¶à¤¨ फ़ाइल का संपादन करके करें ताकि पकà¥à¤•à¤¾ किया जा सके कि "
+"NetworkManager अपने नवीनतम सà¥à¤¥à¤¿à¤¤à¤¿\n"
+"से परिचित है.\n"
+"\n"
+
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'list configured': %s"
-#: ../cli/src/connections.c:261
+#: ../cli/src/connections.c:523
msgid "Connection details"
msgstr "कनेकà¥à¤¶à¤¨à¥à¤¸ विवरण"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "कभी नहीं"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:787
-#: ../cli/src/settings.c:907 ../cli/src/settings.c:1189
-#: ../cli/src/settings.c:1190 ../cli/src/settings.c:1192
-#: ../cli/src/settings.c:1194 ../cli/src/settings.c:1195
-#: ../cli/src/settings.c:1326 ../cli/src/settings.c:1327
-#: ../cli/src/settings.c:1328 ../cli/src/settings.c:1329
-#: ../cli/src/settings.c:1406 ../cli/src/settings.c:1407
-#: ../cli/src/settings.c:1408 ../cli/src/settings.c:1409
-#: ../cli/src/settings.c:1410 ../cli/src/settings.c:1411
-#: ../cli/src/settings.c:1412 ../cli/src/settings.c:1413
-#: ../cli/src/settings.c:1414 ../cli/src/settings.c:1415
-#: ../cli/src/settings.c:1416 ../cli/src/settings.c:1417
-#: ../cli/src/settings.c:1418 ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:442
msgid "yes"
msgstr "हाà¤"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:714
-#: ../cli/src/settings.c:787 ../cli/src/settings.c:907
-#: ../cli/src/settings.c:1189 ../cli/src/settings.c:1190
-#: ../cli/src/settings.c:1192 ../cli/src/settings.c:1194
-#: ../cli/src/settings.c:1195 ../cli/src/settings.c:1326
-#: ../cli/src/settings.c:1327 ../cli/src/settings.c:1328
-#: ../cli/src/settings.c:1329 ../cli/src/settings.c:1406
-#: ../cli/src/settings.c:1407 ../cli/src/settings.c:1408
-#: ../cli/src/settings.c:1409 ../cli/src/settings.c:1410
-#: ../cli/src/settings.c:1411 ../cli/src/settings.c:1412
-#: ../cli/src/settings.c:1413 ../cli/src/settings.c:1414
-#: ../cli/src/settings.c:1415 ../cli/src/settings.c:1416
-#: ../cli/src/settings.c:1417 ../cli/src/settings.c:1418
-#: ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:444
msgid "no"
msgstr "नहीं"
-#: ../cli/src/connections.c:562
-msgid "Connection list"
-msgstr "कनेकà¥à¤¶à¤¨ सूची"
-
-#: ../cli/src/connections.c:575 ../cli/src/connections.c:1112
-#: ../cli/src/connections.c:1650 ../cli/src/connections.c:1665
-#: ../cli/src/connections.c:1674 ../cli/src/connections.c:1684
-#: ../cli/src/connections.c:1696 ../cli/src/connections.c:1804
-#: ../cli/src/connections.c:1906 ../cli/src/devices.c:1122
-#: ../cli/src/devices.c:1132 ../cli/src/devices.c:1250
-#: ../cli/src/devices.c:1258 ../cli/src/devices.c:1622
-#: ../cli/src/devices.c:1629 ../cli/src/devices.c:1643
-#: ../cli/src/devices.c:1650 ../cli/src/devices.c:1667
-#: ../cli/src/devices.c:1678 ../cli/src/devices.c:1899
-#: ../cli/src/devices.c:1906
+#: ../cli/src/connections.c:667
+msgid "List of configured connections"
+msgstr "विनà¥à¤¯à¤¸à¥à¤¤ कनेकà¥à¤¶à¤¨ की सूची"
+
+#: ../cli/src/connections.c:684 ../cli/src/connections.c:1225
+#: ../cli/src/connections.c:1785 ../cli/src/connections.c:1801
+#: ../cli/src/connections.c:1810 ../cli/src/connections.c:1820
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:7563
+#: ../cli/src/connections.c:7738 ../cli/src/devices.c:1633
+#: ../cli/src/devices.c:1641 ../cli/src/devices.c:2028
+#: ../cli/src/devices.c:2035 ../cli/src/devices.c:2049
+#: ../cli/src/devices.c:2056 ../cli/src/devices.c:2073
+#: ../cli/src/devices.c:2081 ../cli/src/devices.c:2277
+#: ../cli/src/devices.c:2373 ../cli/src/devices.c:2380
#, c-format
msgid "Error: %s argument is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s तरà¥à¤• अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/connections.c:588
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s - कोई à¤à¤¸à¤¾ कनेकà¥à¤¶à¤¨ नहीं."
-#: ../cli/src/connections.c:594 ../cli/src/connections.c:1709
-#: ../cli/src/connections.c:1821 ../cli/src/connections.c:1913
-#: ../cli/src/devices.c:906 ../cli/src/devices.c:986 ../cli/src/devices.c:1146
-#: ../cli/src/devices.c:1264 ../cli/src/devices.c:1691
-#: ../cli/src/devices.c:1912
+#: ../cli/src/connections.c:710
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "अजà¥à¤žà¤¾à¤¤ पैरामीटर: %s\n"
+msgid "Error: 'show configured': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'विनà¥à¤¯à¤¸à¥à¤¤ दिखाà¤à¤': %s"
-#: ../cli/src/connections.c:603
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई वैध पैरामीटर निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं."
-
-#: ../cli/src/connections.c:618 ../cli/src/connections.c:2009
-#: ../cli/src/devices.c:2123 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:715 ../cli/src/connections.c:1853
+#: ../cli/src/connections.c:7804 ../cli/src/connections.c:7845
+#: ../cli/src/connections.c:7997 ../cli/src/devices.c:2256
+#: ../cli/src/devices.c:2630 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
msgid "Error: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s."
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "सकà¥à¤°à¤¿à¤¯ कर रहा है"
-#: ../cli/src/connections.c:633
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "सकà¥à¤°à¤¿à¤¯ किया हà¥à¤†"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "निषà¥à¤•à¥à¤°à¤¿à¤¯ किया गया"
+
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग (तैयार)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग (सतà¥à¤¯à¤¾à¤ªà¤¨ जरूरी)"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग (IP विनà¥à¤¯à¤¾à¤¸ पा रहा है)"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN कनेकà¥à¤Ÿà¥‡à¤¡"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN कनेकà¥à¤¶à¤¨ विफल"
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN डिसकनेकà¥à¤Ÿà¥‡à¤‚ड"
-#: ../cli/src/connections.c:712 ../cli/src/connections.c:722
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'con status': %s"
-
-#: ../cli/src/connections.c:918 ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1012
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'con status': %s; अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+msgid "Error: 'list active': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सूची सकà¥à¤°à¤¿à¤¯': %s"
-#: ../cli/src/connections.c:926
+#: ../cli/src/connections.c:1020
msgid "Active connection details"
msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ विवरण"
-#: ../cli/src/connections.c:1062 ../cli/src/connections.c:1724
-#: ../cli/src/connections.c:1836 ../cli/src/connections.c:1927
-#: ../cli/src/devices.c:933 ../cli/src/devices.c:995 ../cli/src/devices.c:1161
-#: ../cli/src/devices.c:1294 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1941 ../cli/src/network-manager.c:311
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यदि नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक चल रहा है तो नहीं कर सकते.: %s."
-
-#: ../cli/src/connections.c:1066 ../cli/src/connections.c:1728
-#: ../cli/src/connections.c:1840 ../cli/src/connections.c:1931
-#: ../cli/src/devices.c:937 ../cli/src/devices.c:999 ../cli/src/devices.c:1165
-#: ../cli/src/devices.c:1298 ../cli/src/devices.c:1717
-#: ../cli/src/devices.c:1945 ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:1899 ../cli/src/connections.c:7592
+#: ../cli/src/connections.c:7707 ../cli/src/connections.c:7798
+#: ../cli/src/connections.c:7826 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1403
+#: ../cli/src/devices.c:1538 ../cli/src/devices.c:1675
+#: ../cli/src/devices.c:2115 ../cli/src/devices.c:2414
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यदि नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक नहीं चल रहा है "
-#: ../cli/src/connections.c:1098
-msgid "Active connections"
-msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨"
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ की सूची"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿:कोई '%s' सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ नहीं है."
-#: ../cli/src/connections.c:1128
+#: ../cli/src/connections.c:1251
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ पैरामीटर: %s"
+msgid "Error: 'show active': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सकà¥à¤°à¤¿à¤¯ दिखाà¤à¤': %s"
-#: ../cli/src/connections.c:1235
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "यà¥à¤•à¥à¤¤à¤¿ '%s' पर कोई सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ नहीं"
-#: ../cli/src/connections.c:1243
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "कोई सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ या यà¥à¤•à¥à¤¤à¤¿ नहीं"
-#: ../cli/src/connections.c:1314
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "यà¥à¤•à¥à¤¤à¤¿ '%s' '%s' के साथ संगत नहीं है"
-#: ../cli/src/connections.c:1317
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "'%s' कनेकà¥à¤¶à¤¨ के लिठकोई यà¥à¤•à¥à¤¤à¤¿ नहीं मिला"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "अजà¥à¤žà¤¾à¤¤ कारण"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "कà¥à¤› नहीं"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "उपयोकà¥à¤¤à¤¾ डिसकनेकà¥à¤Ÿ किया गया था"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "मौलिक संजाल कनेकà¥à¤¶à¤¨ में बाधा आई थी"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN सेवा अचानक रà¥à¤• गई"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN सेवा ने अवैध विनà¥à¤¯à¤¾à¤¸ वापस किया"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "कनेकà¥à¤¶à¤¨ पà¥à¤°à¤¯à¤¾à¤¸ का समय समापà¥à¤¤"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN सेवा समय पर आरंभ नहीं हà¥à¤†"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN सेवा आरंभ होने में विफल रहा"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "कोई वैध VPN गà¥à¤ªà¥à¤¤ नहीं"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "अवैध VPN गà¥à¤ªà¥à¤¤"
-#: ../cli/src/connections.c:1351
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "कनेकà¥à¤¶à¤¨ हटाया गया था"
-#: ../cli/src/connections.c:1368 ../cli/src/connections.c:1573
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯ किया गया (डी बस सकà¥à¤°à¤¿à¤¯ पथ: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1373 ../cli/src/connections.c:1474
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ किया जाना विफल."
-#: ../cli/src/connections.c:1398
+#: ../cli/src/connections.c:1507
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯ किया गया (डी बस सकà¥à¤°à¤¿à¤¯ पथ: %s)\n"
-#: ../cli/src/connections.c:1406
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: %s."
-#: ../cli/src/connections.c:1503 ../cli/src/devices.c:1055
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: समय समापà¥à¤¤à¤¿ %d सेकेंड में समापà¥à¤¤."
-#: ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' सà¥à¤²à¥‡à¤µ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾à¤°à¤¤ है सकà¥à¤°à¤¿à¤¯à¤¨ से आगे बढ़ने के पहले."
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: %s"
-#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1812
-#: ../cli/src/connections.c:1940
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ कनेकà¥à¤¶à¤¨: %s."
+msgid "unknown device '%s'."
+msgstr "अजà¥à¤žà¤¾à¤¤ यà¥à¤•à¥à¤¤à¤¿ '%s'."
+
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "न तो वैध कनेकà¥à¤¶à¤¨ न यà¥à¤•à¥à¤¤à¤¿ पà¥à¤°à¤¦à¤¤à¥à¤¤"
-#: ../cli/src/connections.c:1704 ../cli/src/devices.c:1140
-#: ../cli/src/devices.c:1686
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "कनेकà¥à¤¶à¤¨ (नाम, UUID, या पथ): "
+
+#: ../cli/src/connections.c:1829 ../cli/src/devices.c:1171
+#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
+#: ../cli/src/devices.c:2386
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: समय समापà¥à¤¤à¤¿ मान '%s' वैध नहीं है."
+msgid "Unknown parameter: %s\n"
+msgstr "अजà¥à¤žà¤¾à¤¤ पैरामीटर: %s\n"
+
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "तैयारी"
-#: ../cli/src/connections.c:1717 ../cli/src/connections.c:1829
-#: ../cli/src/connections.c:1920
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: id या uuid को निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ किया जाना है."
+msgid "Error: No connection specified."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई कनेकà¥à¤¶à¤¨ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं."
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई उपयà¥à¤•à¥à¤¤ यà¥à¤•à¥à¤¤à¤¿ नहीं मिला: %s."
+msgid "'%s' not among [%s]"
+msgstr "'%s' [%s] में से नहीं"
-#: ../cli/src/connections.c:1751
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: No suitable device found."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई उपयà¥à¤•à¥à¤¤ यà¥à¤•à¥à¤¤à¤¿ नहीं मिला."
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s': '%s' à¤à¤• वैध %s MAC पता नहीं है."
-#: ../cli/src/connections.c:1865
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "ईथरनेट"
+
+#: ../cli/src/connections.c:2343
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "चेतावनी: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ नहीं\n"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'mtu': '%s' à¤à¤• वैध MTU नहीं है."
-#: ../cli/src/connections.c:1879
+#: ../cli/src/connections.c:2359
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ विलोपन विफल: %s"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'parent': à¤à¤• '%s' वैध अंतरफलक नाम नहीं है."
-#: ../cli/src/connections.c:2000
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'con' कमांड '%s' वैध नहीं है."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'p-key': '%s' à¤à¤• वैध InfiniBand P_KEY नहीं है."
-#: ../cli/src/connections.c:2068
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: D-Bus से कनेकà¥à¤Ÿ नहीं कर पाया."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"तà¥à¤°à¥à¤Ÿà¤¿: 'mode': '%s' à¤à¤• वैध InfiniBand परिवहन विधि [datagram, connected] "
+"नहीं है."
-#: ../cli/src/connections.c:2076
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: सिसà¥à¤Ÿà¤® सेटिंग नहीं पा सका."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'flags': '%s' वैध नहीं है; <0-7> उपयोग करें."
-#: ../cli/src/connections.c:2086
+#: ../cli/src/connections.c:2434
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ नहीं पा सकता है: सेटिंग सेवा चल नहीं रही है."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s': '%s' वैध नहीं है; %s "
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:108 ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
-msgid "DEVICE"
-msgstr "उपकरण"
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s': '%s' वैध नहीं है; <%u-%u> का उपयोग करें."
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "सामरà¥à¤¥à¥à¤¯"
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ईथरनेट"
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "वाईफ़ाई गà¥à¤£"
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "वाई-फाई"
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "3 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं '%s' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "तार गà¥à¤£"
+#: ../cli/src/connections.c:2559 ../cli/src/connections.c:2613
+#: ../cli/src/connections.c:2735 ../cli/src/connections.c:2781
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:2909
+#: ../cli/src/connections.c:3072 ../cli/src/connections.c:3168
+#: ../cli/src/connections.c:3250
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "कà¥à¤¯à¤¾ आप उनà¥à¤¹à¥‡à¤‚ पà¥à¤°à¤¦à¤¾à¤¨ करना चाहते हैं? (हाà¤/नहीं) [हाà¤] "
-#. 4
-#: ../cli/src/devices.c:87
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX के गà¥à¤£"
+#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
+#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
+#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
-#. 6
-#: ../cli/src/devices.c:89
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "कà¥à¤²à¥‹à¤¨ MAC [none]: "
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "5 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'InfiniBand' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "परिवहन विधि (डेटागà¥à¤°à¤¾à¤® या कनेकà¥à¤Ÿà¥‡à¤¡) [datagram]: "
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "जनक अंतरफलक [कोई नहीं]:"
-#. 10
-#: ../cli/src/devices.c:93
-msgid "BOND"
-msgstr "बॉनà¥à¤¡"
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
-#. 11
-#: ../cli/src/devices.c:94
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'p-key' अनिवारà¥à¤¯ है जब 'parent' निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ हैं.\n"
+
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'WiMax' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:2703 ../cli/src/connections.c:2805
+#: ../cli/src/connections.c:3024 ../cli/src/connections.c:3226
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "कà¥à¤¯à¤¾ आप इसे पà¥à¤°à¤¦à¤¾à¤¨ करना चाहते हैं? (हाà¤/नहीं) [हाà¤]"
+
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "4 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'PPPoE' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "कूटशबà¥à¤¦ [कोई नहीं]:"
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "सरà¥à¤µà¤¿à¤¸ [कोई नहीं]: "
+
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "2 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'मोबाइल बà¥à¤°à¤¾à¤¡à¤¬à¥ˆà¤‚ड' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "उपयोकà¥à¤¤à¤¾à¤¨à¤¾à¤® [कोई नहीं]:"
+
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बà¥à¤²à¥‚टूथ' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "बà¥à¤²à¥‚टूथ किसà¥à¤® (panu, dun-gsm or dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'bt-type': '%s' is not a valid bluetooth type.\n"
+
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "4 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'वीलैन' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN फà¥à¤²à¥ˆà¤— (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ मैप [कोई नहीं]: "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ मैप [कोई नहीं]:"
+
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बांड' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "बांडिंग अवसà¥à¤¥à¤¾ [balance-rr]: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "बांडिंग पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• अंतरफलक [कोई नहीं]: "
+
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'primary': '%s' à¤à¤• वैध अंतरफलक नाम नहीं है\n"
+
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "बांडिंग मॉनिटरिंग अवसà¥à¤¥à¤¾ (miimon या arp) [miimon]: "
+
+#: ../cli/src/connections.c:2950
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"तà¥à¤°à¥à¤Ÿà¤¿: '%s' à¤à¤• वैध मॉनिटरिंग अवसà¥à¤¥à¤¾ नहीं है; '%s' या '%s' का उपयोग करें.\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "बांडिंग miimon [100]: "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'miimon': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <0-%u>.\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "बांडिंग downdelay [0]: "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'downdelay': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <0-%u>.\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "बांडिंग updelay [0]: "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿:'updelay': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <0-%u>.\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "बांडिंग arp-interval [0]: "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'arp-interval': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <0-%u>.\n"
+
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "बांडिंग arp-ip-target [none]: "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं '%s' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "टीम JSON विनà¥à¤¯à¤¾à¤¸ [कोई नहीं]: "
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "टोली"
+
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "team-slave"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "6 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बà¥à¤°à¤¿à¤œ' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP सकà¥à¤°à¤¿à¤¯ करें (हाà¤/नहीं) [हाà¤]: "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3093
+msgid "STP priority [128]: "
+msgstr "STP पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ [128]: "
+
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'priority': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <0-%d>.\n"
+
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "अगà¥à¤°à¥‡à¤·à¤¿à¤¤ विलंब [15]:"
+
+#: ../cli/src/connections.c:3109
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'forward-delay': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <2-30>.\n"
+
+#: ../cli/src/connections.c:3118
+msgid "Hello time [2]: "
+msgstr "हेलो समय [2]: "
+
+#: ../cli/src/connections.c:3122
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'hello-time': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <1-10>.\n"
+
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "अधिकतम आयॠ[20]: "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'max-age': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <6-40>.\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "MAC पता उमà¥à¤° समय [300]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'ageing-time': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <0-1000000>.\n"
+
+#: ../cli/src/connections.c:3167
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "3 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बà¥à¤°à¤¿à¤œ-सà¥à¤²à¥‡à¤µ' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "बà¥à¤°à¤¿à¤œ पोरà¥à¤Ÿ पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ [32]: "
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "बà¥à¤°à¤¿à¤œ पोरà¥à¤Ÿ STP पथ लागत [100]: "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "हेयरपिन (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'hairpin': '%s'.\n"
+
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'वीपीà¤à¤¨' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "2 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'ओà¤à¤²à¤ªà¥€à¤¸à¥€ मेश' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC मेश चैनल [1]: "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'channel': '%s' à¤à¤• वैध संखà¥à¤¯à¤¾ नहीं है <1-13>.\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC पता [none]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 पता (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 पता (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " पता सफलतापूरà¥à¤µà¤• जोड़ा गया: %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " चेतावनी: पता पहले से मौजूद: %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " चेतावनी: कचड़ा को अंत में अनदेखा कर रहा है: '%s'\n"
+
+#: ../cli/src/connections.c:3343 ../cli/src/connections.c:4192
+#: ../cli/src/connections.c:4247 ../cli/src/connections.c:4646
+#: ../cli/src/connections.c:4656
+msgid "Error: "
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: "
+
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "कà¥à¤¯à¤¾ आप IP पता जोड़ना चाहते हैं? (yes/no) [yes]"
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "<Enter> को पता जोड़ने के लिठदबाà¤à¤.\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'parent': 'p-key' बिना मानà¥à¤¯ नहीं."
+
+#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+msgid "SSID: "
+msgstr "SSID:"
+
+#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+msgid "Error: 'ssid' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'ssid' जरूरी है."
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP नाम: "
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'nsp' जरूरी है."
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "PPPoE उपयोकà¥à¤¤à¤¾à¤¨à¤¾à¤®: "
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'username' जरूरी है."
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'apn' जरूरी है."
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "बà¥à¤²à¥‚टूथ यà¥à¤•à¥à¤¤à¤¿ पता:"
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'addr' जरूरी है."
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'bt-type': '%s' वैध नहीं है; [%s, %s (%s), %s] उपयोग करें."
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN जनक यà¥à¤•à¥à¤¤à¤¿ या कनेकà¥à¤¶à¤¨ यà¥à¤•à¥à¤¤à¤¿ UUID:"
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev' जरूरी है."
+
+#: ../cli/src/connections.c:3928
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>:"
+
+#: ../cli/src/connections.c:3931
+msgid "Error: 'id' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'id' जरूरी है."
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'id': '%s' वैध नहीं है; <0-4095> का उपयोग करें."
+
+#: ../cli/src/connections.c:3947
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev': '%s' न तो UUID है, अंतरफलक नाम, न ही MAC."
+
+#: ../cli/src/connections.c:4082
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'mode': %s."
+
+#: ../cli/src/connections.c:4091
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'primary': '%s' à¤à¤• वैध अंतरफलक नाम नहीं है"
+
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "बांड मासà¥à¤Ÿà¤°:"
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'master' जरूरी है."
+
+#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
+#: ../cli/src/connections.c:4427
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"चेतावनी: 'type' अभी अनदेखा किया गया है. हम केवल इथरनेट सà¥à¤²à¥‡à¤µ अभी समरà¥à¤¥à¤¨ करते "
+"हैं.\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "टीम मासà¥à¤Ÿà¤°: "
-#. 2
-#: ../cli/src/devices.c:110
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'stp': %s."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "बà¥à¤°à¤¿à¤œ मासà¥à¤Ÿà¤°:"
+
+#: ../cli/src/connections.c:4421
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'master': '%s' वैध UUID नहीं है न ही अंतरफलक है."
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "VPN पà¥à¤°à¤•à¤¾à¤°:"
+
+#: ../cli/src/connections.c:4509
+msgid "Error: 'vpn-type' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'vpn-type' जरूरी है."
+
+#: ../cli/src/connections.c:4520
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4578
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'channel': '%s' वैध नहीं है; <1-13> उपयोग करें."
+
+#: ../cli/src/connections.c:4613
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' à¤à¤• वैध कनेकà¥à¤¶à¤¨ किसà¥à¤® नहीं है."
+
+#: ../cli/src/connections.c:4711
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' कनेकà¥à¤¶à¤¨ को जोड़ने में विफल : (%d) %s"
+
+#: ../cli/src/connections.c:4715
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "'%s' (%s) कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• जोड़ा गया.\n"
+
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤°..."
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'type' वितरà¥à¤• जरूरी है."
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध कनेकà¥à¤¶à¤¨ किसà¥à¤®; %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "अंतरफलक नाम [*]:"
+
+#: ../cli/src/connections.c:4801
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'ifname' वितरà¥à¤• जरूरी है."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'ifname': '%s' à¤à¤• वैध अंतरफलक नाम नहीं है न ही '*'."
+
+#: ../cli/src/connections.c:5627
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' सेटिंग मान]\n"
+
+#: ../cli/src/connections.c:5708
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+
+#: ../cli/src/connections.c:5735
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5742
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5749
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+
+#: ../cli/src/connections.c:5754
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+
+#: ../cli/src/connections.c:5759
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5764
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5771
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+
+#: ../cli/src/connections.c:5775
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: मेनà¥à¤¯à¥‚ सà¥à¤¤à¤° पर जाà¤à¤\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+
+#: ../cli/src/connections.c:5788
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+
+#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
+#: ../cli/src/connections.c:6313 ../cli/src/connections.c:7162
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "अजà¥à¤žà¤¾à¤¤ कमांड: '%s'\n"
+
+#: ../cli/src/connections.c:5879
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+
+#: ../cli/src/connections.c:5904
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+
+#: ../cli/src/connections.c:5908
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+
+#: ../cli/src/connections.c:5914
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: change current value\n"
+"\n"
+"मौजूदा मान दिखाता है और इसे संपादन करने देता है.\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+
+#: ../cli/src/connections.c:5922
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+
+#: ../cli/src/connections.c:5927
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ किया जाना विफल.\n"
+
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' सेटिंग अनिवारà¥à¤¯ है और हटाया नहीं जा सकता है.\n"
+
+#: ../cli/src/connections.c:6111
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+
+#: ../cli/src/connections.c:6171
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"दूसरे कà¥à¤²à¤¾à¤¯à¤‚ट से कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² हटाया गया है. आप पà¥à¤°à¤§à¤¾à¤¨ मेनà¥à¤¯à¥‚ में "
+"'सहेजें' को इसे जमा करने के लिठटाइप कर सकते हैं.\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' मान दें:"
+
+#: ../cli/src/connections.c:6209 ../cli/src/connections.c:6228
+#: ../cli/src/connections.c:6621 ../cli/src/connections.c:6680
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' गà¥à¤£ सेट करने में विफल: %s\n"
+
+#: ../cli/src/connections.c:6221
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' मान संपादित करें: "
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid "Error: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s\n"
+
+#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
+#: ../cli/src/connections.c:6800
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' मान हटाने में विफल: %s\n"
+
+#: ../cli/src/connections.c:6277
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "अजà¥à¤žà¤¾à¤¤ कमांड वितरà¥à¤•: '%s'\n"
+
+#: ../cli/src/connections.c:6297 ../cli/src/connections.c:7150
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "कनेकà¥à¤¶à¤¨ सहेजा नहीं है. कà¥à¤¯à¤¾ आप सचमà¥à¤š बाहर होना चाहते हैं? [y/n]\n"
+
+#: ../cli/src/connections.c:6409
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "उपलबà¥à¤§ सेटिंगà¥à¤¸: %s\n"
+
+#: ../cli/src/connections.c:6418
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध सेटिंग नाम; %s\n"
+
+#: ../cli/src/connections.c:6435
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "उपलबà¥à¤§ विशेषता: %s\n"
+
+#: ../cli/src/connections.c:6443
+#, c-format
+msgid "Error: property %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विशेषता %s\n"
+
+#: ../cli/src/connections.c:6484
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"कनेकà¥à¤¶à¤¨ को 'autoconnect=yes' से सहेजें. वह कनेकà¥à¤¶à¤¨ के ततà¥à¤•à¤¾à¤² सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ का "
+"परिणाम देगा.\n"
+"कà¥à¤¯à¤¾ आप अभी भी सहेजना चाहते हैं? [yes] "
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "आप निमà¥à¤¨à¤²à¤¿à¤–ित सेटिंगà¥à¤¸ संपादित कर सकते हैं: %s\n"
+
+#: ../cli/src/connections.c:6583
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"दूसरे कà¥à¤²à¤¾à¤¯à¤‚ट से कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² हटाया गया है. आप 'सहेजें' को इसे जमा करने "
+"के लिठटाइप कर सकते हैं.\n"
+
+#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' विशेषता के लिठअनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ मान: %s\n"
+
+#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई सेटिंग चयनित नहीं; मान [%s] हैं\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "'goto <setting>' का उपयोग पहले करें, या 'set <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:6641 ../cli/src/connections.c:6779
+#: ../cli/src/connections.c:6859
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध सेटिंग वितरà¥à¤• '%s'; मान हैं [%s]\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' गà¥à¤£ के लिठअनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ सेटिंग\n"
+
+#: ../cli/src/connections.c:6658
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध मान: %s\n"
+
+#: ../cli/src/connections.c:6707
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ सेटिंग '%s'\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "आप निमà¥à¤¨à¤²à¤¿à¤–ित विशेषता संपादित कर सकते हैं: %s\n"
+
+#: ../cli/src/connections.c:6764
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई वितरà¥à¤• नहीं दिया हà¥à¤†; मान हैं [%s]\n"
+
+#: ../cli/src/connections.c:6777
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "'%s' सेटिंग इस कनेकà¥à¤¶à¤¨ में उपसà¥à¤¥à¤¿à¤¤ नहीं है.\n"
+
+#: ../cli/src/connections.c:6818
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s विशेषताà¤à¤, न ही यह सेटिंग नाम है.\n"
+
+#: ../cli/src/connections.c:6843
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr "'goto <setting>' पहले उपयोग करें, या 'describe <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:6884
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध विशेषता: %s, न ही वैध सेटिंग नाम है.\n"
+
+#: ../cli/src/connections.c:6908
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' सेटिंग उपसà¥à¤¥à¤¿à¤¤ नहीं है\n"
+
+#: ../cli/src/connections.c:6911
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ सेटिंग: '%s'\n"
+
+#: ../cli/src/connections.c:6927
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "'%s' सेटिंग जाà¤à¤šà¥‡à¤‚: %s\n"
+
+#: ../cli/src/connections.c:6934
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "कनेकà¥à¤¶à¤¨ जाà¤à¤šà¥‡à¤‚: %s\n"
+
+#: ../cli/src/connections.c:6973
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' (%s) कनेकà¥à¤¶à¤¨ को सहेजने में विफल : (%d) %s\n"
+
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "'%s' (%s) कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• सहेजा गया\n"
+
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ जाà¤à¤š विफलता: %s\n"
+
+#: ../cli/src/connections.c:7015
+msgid "(unknown error)"
+msgstr "(अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿)"
+
+#: ../cli/src/connections.c:7036
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ नहीं सहेजा गया. 'सहेजें' पहले टाइप करें.\n"
+
+#: ../cli/src/connections.c:7040
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ वैध नहीं है: %s\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ नहीं कर सकता है: %s.\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' (%s) कनेकà¥à¤¶à¤¨ को सकà¥à¤°à¤¿à¤¯ करने में विफल : (%d) %s\n"
+
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ (जारी रखने के लिठदबाà¤à¤) मॉनिटरिंग\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: status-line: %s\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:7121
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: खराब रंग संखà¥à¤¯à¤¾: '%s'; <0-8> उपयोग करें\n"
+
+#: ../cli/src/connections.c:7133
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "मौजूदा nmcli विनà¥à¤¯à¤¾à¤¸:\n"
+
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "अवैध विनà¥à¤¯à¤¾à¤¸ विकलà¥à¤ª '%s'; अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ [%s]\n"
+
+#: ../cli/src/connections.c:7364
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7390
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'id', uuid, या 'path' का केवल à¤à¤• दिया जा सकता है."
+
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ कनेकà¥à¤¶à¤¨: '%s'."
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr "चेतावनी: मौजूदा कनेकà¥à¤¶à¤¨ '%s' का संपादन; 'type' वितरà¥à¤• अनदेखा है\n"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr "चेतावनी: मौजूदा कनेकà¥à¤¶à¤¨ '%s' का संपादन; 'con-name' वितरà¥à¤• अनदेखा है\n"
+
+#: ../cli/src/connections.c:7434
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "वैध कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤°: %s\n"
+
+#: ../cli/src/connections.c:7436
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध कनेकà¥à¤¶à¤¨ किसà¥à¤®; %s\n"
+
+#: ../cli/src/connections.c:7472
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli interactive connection editor |==="
+
+#: ../cli/src/connections.c:7475
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "मौजूदा '%s' कनेकà¥à¤¶à¤¨ का संपादन: '%s'"
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "नया '%s' कनेकà¥à¤¶à¤¨ जोड़ रहा है"
+
+#: ../cli/src/connections.c:7479
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "'help' या '?' उपलबà¥à¤§ कमांड के लिठटाइप करें."
+
+#: ../cli/src/connections.c:7481
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "'describe [<setting>.<prop>]' टाइप करें विसà¥à¤¤à¥ƒà¤¤ विशेषता विवरण के लिà¤."
+
+#: ../cli/src/connections.c:7520
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' कनेकà¥à¤¶à¤¨ रूपांतरण के लिठविफल: (%d) %s"
+
+#: ../cli/src/connections.c:7526
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "'%s' (%s) कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• बदला गया\n"
+
+#: ../cli/src/connections.c:7553
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई वितरà¥à¤• नहीं दिया गया."
+
+#: ../cli/src/connections.c:7577
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ ID अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: <setting>.<property> वितरà¥à¤• अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7620
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध या अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ सेटिंग नहीं '%s': %s."
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध विशेषता '%s': %s."
+
+#: ../cli/src/connections.c:7647
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s.%s बदलने में विफल: %s."
+
+#: ../cli/src/connections.c:7677
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ विलोपन विफल: %s"
+
+#: ../cli/src/connections.c:7747
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ कनेकà¥à¤¶à¤¨: %s\n"
+
+#: ../cli/src/connections.c:7781
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ कनेकà¥à¤¶à¤¨ मिटा नहीं सकता है: %s."
+
+#: ../cli/src/connections.c:7852
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "'%s' फ़ाइल को लोड नही कर सका\n"
+
+#: ../cli/src/connections.c:7917
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"तà¥à¤°à¥à¤Ÿà¤¿: 'विनà¥à¤¯à¤¸à¥à¤¤' या 'सकà¥à¤°à¤¿à¤¯' कमांड 'कनेकà¥à¤¶à¤¨ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨' के लिठपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ है."
+
+#: ../cli/src/connections.c:7984
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' à¤à¤• वैध कनेकà¥à¤¶à¤¨ कमांड नहीं है."
+
+#: ../cli/src/connections.c:8053 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: सिसà¥à¤Ÿà¤® सेटिंग नहीं पा सका."
+
+#: ../cli/src/connections.c:8063
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ नहीं पा सकता है: सेटिंग सेवा चल नहीं रही है."
+
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "उपकरण"
+
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "कनेकà¥à¤¶à¤¨"
+
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "विकà¥à¤°à¥‡à¤¤à¤¾"
-#. 3
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "उतà¥à¤ªà¤¾à¤¦"
-#. 4
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "डà¥à¤°à¤¾à¤‡à¤µà¤°"
-#. 5
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "डà¥à¤°à¤¾à¤‡à¤µà¤° संसà¥à¤•à¤°à¤£"
-#. 6
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "फरà¥à¤®à¤µà¥‡à¤¯à¤° संसà¥à¤•à¤°à¤£"
-#. 7
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "कारण"
-#. 10
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "फरà¥à¤®à¤µà¥‡à¤¯à¤° अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤"
-#. 15
-#: ../cli/src/devices.c:123
-msgid "CONNECTION"
-msgstr "कनेकà¥à¤¶à¤¨"
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "मौजूद-कनेकà¥à¤¶à¤¨-पथ"
-#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "मौजूद-कनेकà¥à¤¶à¤¨"
+
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "वाहक पता लगा"
-#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "गति"
-#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "कैरियर"
-#. 0
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#. 1
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "मोड"
-#. 3
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
-#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "छड़ें"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:187
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:188
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIVE"
-#. 0
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "सà¥à¤²à¥‡à¤µ"
-#. 0
-#: ../cli/src/devices.c:227
-#| msgid "UUID"
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:243
-#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-#| "[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-#| " [--private] [--nowait] [--timeout <timeout>]\n"
-#| " wimax [list [iface <iface>] [nsp <name>]]\n"
-#| "\n"
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "सामरà¥à¤¥à¥à¤¯"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "वाईफ़ाई गà¥à¤£"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "तार गà¥à¤£"
+
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX के गà¥à¤£"
+
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "बॉनà¥à¤¡"
+
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "कनेकà¥à¤¶à¤¨"
+
+#: ../cli/src/devices.c:274
+#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"पà¥à¤°à¤¯à¥‹à¤—: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:344
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device status'.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli device status { help }\n"
+"\n"
+"सभी यà¥à¤•à¥à¤¤à¤¿ के लिठसà¥à¤¥à¤¿à¤¤à¤¿ दिखाà¤à¤.\n"
+"तयशà¥à¤¦à¤¾ रूप से, निमà¥à¤¨à¤²à¤¿à¤–ित सà¥à¤¤à¤‚भ दिखाठगठहैं:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - यà¥à¤•à¥à¤¤à¤¿ पर कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ (यदि कोई है)\n"
+"पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ सà¥à¤¤à¤‚भ को '--fields' वैशà¥à¤µà¤¿à¤• विकलà¥à¤ª के उपयोग से बदला जा सकता है. "
+"'status'\n"
+"तयशà¥à¤¦à¤¾ कमांड है, जिसका अरà¥à¤¥ है कि 'nmcli device' 'nmcli device status' को कॉल "
+"करता है.\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"यà¥à¤•à¥à¤¤à¤¿à¤¯à¥‹à¤‚ के विवरण दिखाà¤à¤.\n"
+"सभी यà¥à¤•à¥à¤¤à¤¿à¤¯à¥‹à¤‚ के लिठकमांड नीचे के विवरण सूचीबदà¥à¤§ करता है, या फिर दी गठ"
+"यà¥à¤•à¥à¤¤à¤¿ के लिà¤.\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be activated."
+"\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"यà¥à¤•à¥à¤¤à¤¿ को कनेकà¥à¤Ÿ करें.\n"
+"NetworkManager किसी उपयà¥à¤•à¥à¤¤ कनेकà¥à¤¶à¤¨ को ढूà¤à¤¢à¤¼à¤¨à¥‡ की कोशिश करेगा जो सकà¥à¤°à¤¿à¤¯ किया "
+"जाà¤à¤—ा."
+"\n"
+"यह कनेकà¥à¤¶à¤¨ को देखेगा जो सà¥à¤µà¤¤à¤ƒ कनेकà¥à¤Ÿ पर सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से सेट नहीं है.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"यà¥à¤•à¥à¤¤à¤¿ को डिसकनेकà¥à¤Ÿ करें.\n"
+"यह कमांड यà¥à¤•à¥à¤¤à¤¿ को डिसकनेकà¥à¤Ÿ करता है और इसे सà¥à¤µà¤¤à¤ƒ सकà¥à¤°à¤¿à¤¯à¤£ से रोकता है\n"
+"बिना उपयोकà¥à¤¤à¤¾/दसà¥à¤¤à¥€ रोकटोक के.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"वाई-फ़ाई यà¥à¤•à¥à¤¤à¤¿ पर संचालन करें.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"उपलबà¥à¤§ वाई-फ़ाई पहà¥à¤à¤š बिंदॠसूचीबदà¥à¤§ करें. 'ifname' और 'bssid' विकलà¥à¤ª को\n"
+"APs को खास अंतरफलक के लिठसूचीबदà¥à¤§ करने के लिठपà¥à¤°à¤¯à¥‹à¤— किया जाता है या किसी "
+"विशेष BSSID से.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"वाई-फ़ाई संजाल से SSID या BSSID दà¥à¤µà¤¾à¤°à¤¾ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ से कनेकà¥à¤Ÿ करें. यह कमांड\n"
+"à¤à¤• नया कनेकà¥à¤¶à¤¨ बनाता है और इसे किसी यà¥à¤•à¥à¤¤à¤¿ पर सकà¥à¤°à¤¿à¤¯ करता है. यह à¤à¤• कमांड "
+"लाइन\n"
+"कà¥à¤²à¤¿à¤• करने काउंटरपारà¥à¤Ÿ है किसी जीयूआई कà¥à¤²à¤¾à¤¯à¤‚ट में. यह कमांड हमेशा\n"
+"किसी नठकनेकà¥à¤¶à¤¨ को बनाता है और इस पà¥à¤°à¤•à¤¾à¤° यह मà¥à¤–à¥à¤¯ रूप से नठवाई-फ़ाइल \n"
+"संजाल कनेकà¥à¤¶à¤¨ के लिठउपयोगी है. यदि संजाल के लिठकनेकà¥à¤¶à¤¨ पहले से मौजूद है, तो "
+"यह बेहतर\n"
+"है कि मौजूदा पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² को निमà¥à¤¨à¤¾à¤¨à¥à¤¸à¤¾à¤° लाया जाà¤: nmcli con up id <name>. नोट "
+"करें कि\n"
+"केवल खà¥à¤²à¤¾, WEP और WPA-PSK संजाल अभी समरà¥à¤¥à¤¿à¤¤ हैं. यह मानकर\n"
+"चला जाता है कि IP विनà¥à¤¯à¤¾à¤¸ DHCP से होकर पà¥à¤°à¤¾à¤ªà¥à¤¤ किया जाता है.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"निवेदन है कि संजाल पà¥à¤°à¤¬à¤‚धक ततà¥à¤•à¤¾à¤² उपलबà¥à¤§ पहà¥à¤à¤š बिंदॠको फिर से सà¥à¤•à¥ˆà¤¨ करता "
+"है.\n"
+"NetworkManager Wi-Fi संजाल को समय समय पर जाà¤à¤šà¤¤à¤¾ है लेकिन समान सà¥à¤¥à¤¿à¤¤à¤¿ में यह \n"
+"उपयोगी हो सकता है कि इसे दसà¥à¤¤à¥€ रूप से सà¥à¤•à¥ˆà¤¨ किया जाà¤. नोट करें कि यह कमांड \n"
+"AP को नहीं दिखाता है, 'nmcli device wifi list' को इसके लिठदेखें.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX यà¥à¤•à¥à¤¤à¤¿ पर संचालन करें.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"उपलबà¥à¤§ WiMAX NSP को सूचीबदà¥à¤§ करें. 'ifname' और 'nsp' विकलà¥à¤ª को \n"
+"संजाल सूची को सूचीबदà¥à¤§ करने के लिठकिसी खास अंतरफलक के लिठपà¥à¤°à¤¯à¥‹à¤— किया जा "
+"सकता है, या किसी विशेष NSP के साथ.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(कोई नहीं)"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:401
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:410
-msgid "Encrypted: "
-msgstr "गोपित: "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:415
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:417
-msgid "WPA "
-msgstr "WPA "
-
-#: ../cli/src/devices.c:419
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:422
-msgid "Enterprise "
-msgstr "à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ "
-
-#: ../cli/src/devices.c:431
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
-msgstr "तदरà¥à¤¥"
+msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:432
-msgid "Infrastructure"
-msgstr "आधारभूत ढाà¤à¤šà¤¾"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:468
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "घर"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "संगी"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "रोमिंग"
-#: ../cli/src/devices.c:546
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev list': %s"
-
-#: ../cli/src/devices.c:548
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev list': %s; अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/devices.c:557
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "यà¥à¤•à¥à¤¤à¤¿ विवरण"
-#: ../cli/src/devices.c:602 ../cli/src/devices.c:605 ../cli/src/devices.c:1081
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨': %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1474
msgid "(unknown)"
msgstr "(अजà¥à¤žà¤¾à¤¤)"
-#: ../cli/src/devices.c:614
-msgid "not connected"
-msgstr "कनेकà¥à¤Ÿà¥‡à¤¡ नहीं है"
-
-#: ../cli/src/devices.c:641
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "चालू"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "बंद"
-#: ../cli/src/devices.c:923
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev status': %s"
+msgid "Error: 'device status': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ सà¥à¤¥à¤¿à¤¤à¤¿': %s"
-#: ../cli/src/devices.c:925
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev status': %s; अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/devices.c:948
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "यà¥à¤•à¥à¤¤à¤¿ की सà¥à¤¥à¤¿à¤¤à¤¿"
-#: ../cli/src/devices.c:979
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' तरà¥à¤• अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
+msgid "Error: invalid extra argument '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध 'अतिरिकà¥à¤¤ वितरà¥à¤• '%s'."
-#: ../cli/src/devices.c:1020 ../cli/src/devices.c:1185
-#: ../cli/src/devices.c:1326 ../cli/src/devices.c:1973
+#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1422
+#: ../cli/src/devices.c:1557 ../cli/src/devices.c:1696
+#: ../cli/src/devices.c:2436
#, c-format
msgid "Error: Device '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' नहीं मिला."
-#: ../cli/src/devices.c:1043
+#: ../cli/src/devices.c:1319
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "सफल: यà¥à¤•à¥à¤¤à¤¿ '%s' सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "यà¥à¤•à¥à¤¤à¤¿ '%s' को कनेकà¥à¤Ÿ किया गया.\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "अंतरफलक:"
+
+#: ../cli/src/devices.c:1381 ../cli/src/devices.c:1390
+#: ../cli/src/devices.c:1516 ../cli/src/devices.c:1525
+#, c-format
+msgid "Error: No interface specified."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई अंतरफलक निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अतिरिकà¥à¤¤ वितरà¥à¤• नहीं अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤: '%s'."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "सफल: यà¥à¤•à¥à¤¤à¤¿ '%s' सफलतापूरà¥à¤µà¤• डिसकनेकà¥à¤¡à¥‡à¤¡."
-#: ../cli/src/devices.c:1078
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' (%s) डिसकनेकà¥à¤Ÿà¤¿à¤‚ग विफल: %s"
-#: ../cli/src/devices.c:1091
+#: ../cli/src/devices.c:1485
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr " यà¥à¤•à¥à¤¤à¤¿ '%s' डिसकनेकà¥à¤Ÿ हो गया है.\n"
-#: ../cli/src/devices.c:1154
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: iface को निरà¥à¤¦à¤¿à¤·à¥à¤Ÿà¤¿ करना है."
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi सà¥à¤•à¥ˆà¤¨ सूची"
-#: ../cli/src/devices.c:1284
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev wifi': %s"
+msgid "Error: 'device wifi': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईफाई': %s"
-#: ../cli/src/devices.c:1286
-#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev wifi': %s; अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/devices.c:1309
-msgid "WiFi scan list"
-msgstr "WiFi सà¥à¤•à¥ˆà¤¨ सूची"
-
-#: ../cli/src/devices.c:1346 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: पहà¥à¤à¤š बिंदॠके साथ bssid '%s' नहीं मिली."
-#: ../cli/src/devices.c:1363
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' à¤à¤• WiFi यà¥à¤•à¥à¤¤à¤¿ नहीं है."
-#: ../cli/src/devices.c:1431 ../cli/src/devices.c:1477
+#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' के साथ कनेकà¥à¤¶à¤¨ बनाया है और यà¥à¤•à¥à¤¤à¤¿ '%s' पर सकà¥à¤°à¤¿à¤¯ हैं \n"
-#: ../cli/src/devices.c:1436
+#: ../cli/src/devices.c:1829
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: (%d) %s."
-#: ../cli/src/devices.c:1461
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: नया कनेकà¥à¤¶à¤¨ को जोड़ने के लिठ/ सकà¥à¤°à¤¿à¤¯ करने में विफल : (%d) %s"
-#: ../cli/src/devices.c:1469
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"तà¥à¤°à¥à¤Ÿà¤¿: नया कनेकà¥à¤¶à¤¨ को जोड़ने के लिठ/ सकà¥à¤°à¤¿à¤¯ करने में विफल: अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/devices.c:1613
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID या BSSID: "
+
+#: ../cli/src/devices.c:2018
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: SSID या BSSID अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/devices.c:1636
+#: ../cli/src/devices.c:2042
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: bssid तरà¥à¤• मान '%s' à¤à¤• वैध BSSID नहीं है."
-#: ../cli/src/devices.c:1660
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
msgstr ""
-"तà¥à¤°à¥à¤Ÿà¤¿: wep कà¥à¤‚जी पà¥à¤°à¤•à¤¾à¤° के तरà¥à¤• मान '%s' अमानà¥à¤¯ है, 'कà¥à¤‚जी' या 'पद' का उपयोग "
-"करें."
+"तà¥à¤°à¥à¤Ÿà¤¿: wep कà¥à¤‚जी पà¥à¤°à¤•à¤¾à¤° के तरà¥à¤• मान '%s' अमानà¥à¤¯ है, 'कà¥à¤‚जी' या 'पद' का "
+"उपयोग करें."
-#: ../cli/src/devices.c:1700
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s: %s."
+
+#: ../cli/src/devices.c:2101
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: BSSID (%s) से कनेकà¥à¤Ÿ करने के लिठbssid तरà¥à¤• (%s) से अलग है."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: पैरामीटर '%s' न तो SSID और न ही BSSID है."
-#: ../cli/src/devices.c:1735
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' à¤à¤• WiFi यà¥à¤•à¥à¤¤à¤¿ नहीं है."
-
-#: ../cli/src/devices.c:1737
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई Wi-Fi यà¥à¤•à¥à¤¤à¤¿ नहीं मिला."
-#: ../cli/src/devices.c:1755
+#: ../cli/src/devices.c:2151
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: SSID '%s' के साथ कोई संजाल नहीं मिला."
-#: ../cli/src/devices.c:1757
+#: ../cli/src/devices.c:2153
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: SSID '%s' के साथ कोई पहà¥à¤à¤š बिंदॠनहीं मिला."
-#: ../cli/src/devices.c:1855
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev wifi' कमांड '%s' वैध नहीं है."
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "कूटशबà¥à¤¦:"
-#: ../cli/src/devices.c:1931
+#: ../cli/src/devices.c:2321
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev wimax': %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईफाई' कमांड '%s' वैध नहीं है."
-#: ../cli/src/devices.c:1933
-#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev wimax': %s; अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/devices.c:1956
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP सूची"
-#: ../cli/src/devices.c:1993
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईमैकà¥à¤¸': %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: NSP नाम '%s' के साथ नहीं मिला."
-#: ../cli/src/devices.c:2004
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' à¤à¤• WiMAX यà¥à¤•à¥à¤¤à¤¿ नहीं है."
-#: ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2510
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Error: nsp '%s' के साथ पहà¥à¤à¤š बिंदॠनहीं मिला."
-#: ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2542
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev wimax' कमांड '%s' वैध नहीं है."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईमैकà¥à¤¸' कमांड '%s' वैध नहीं है."
-#: ../cli/src/devices.c:2115
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev' कमांड '%s' वैध नहीं है."
@@ -1473,265 +3425,503 @@ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev' कमांड '%s' वैध नहीं à¤
msgid "RUNNING"
msgstr "कारà¥à¤¯à¤¶à¥€à¤²"
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "संसà¥à¤•à¤°à¤£"
-#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "नेट सकà¥à¤·à¤®"
+msgid "STARTUP"
+msgstr "पà¥à¤°à¤¾à¤°à¤‚भ"
-#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "वाईफ़ाई वाईफ़ाई हारà¥à¤¡à¤µà¥‡à¤¯à¤°"
+msgid "CONNECTIVITY"
+msgstr "कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€"
-#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "वाईफ़ाई "
+msgid "NETWORKING"
+msgstr "संजालन"
-#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
-#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "वाईफ़ाई "
-#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-वाईफ़ाई हारà¥à¤¡à¤µà¥‡à¤¯à¤°"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
-#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "अनà¥à¤®à¤¤à¤¿"
-#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "मान"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "सà¥à¤¤à¤°"
+
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMAINS"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"पà¥à¤°à¤¯à¥‹à¤—: nmcli nm { COMMAND | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli general status { help }\n"
+"\n"
+"NetworkManager का सà¥à¤¥à¤¿à¤¤à¤¿ दिखाà¤à¤.\n"
+"'status' तयशà¥à¤¦à¤¾ कà¥à¤°à¤¿à¤¯à¤¾ है, जिसका अरà¥à¤¥ है कि 'nmcli gen' 'nmcli gen "
+"status' को कॉल करता है\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system hostname."
+"\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"परसिसà¥à¤Ÿà¥‡à¤‚ट तंतà¥à¤° मेजबाननाम बदलें या पाà¤à¤.\n"
+"बिना किसी विरà¥à¤¤à¤• के, यह मौजूदा रूप से विनà¥à¤¯à¤¸à¥à¤¤ मेजबाननाम को छापता है. जब आप\n"
+"मेजबाननाम पास करते हैं, NetworkManager इसे नया सà¥à¤¥à¤¿à¤° तंतà¥à¤° मेजबाननाम के रूप "
+"में सेट करता है."
+"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli general permissions { help }\n"
+"\n"
+"सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ संचालन के लिठकॉलर अनà¥à¤®à¤¤à¤¿ दिखाà¤à¤.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"NetworkManager लॉगिंग लेवल और डोमेन पाà¤à¤ या बदलें.\n"
+"बिना किसी वितरà¥à¤• के, मौजूदा लॉगिंग और डोमेन दिखाठजाते हैं. लॉगिंग सà¥à¤¥à¤¿à¤¤à¤¿ "
+"बदलने\n"
+"के लिà¤à¤· सà¥à¤¤à¤° और/या डोमेन बदलें. कृपया मैन पेज का संदरà¥à¤­ लें\n"
+"संभावित लॉगिंग डोमेन के लिà¤.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli networking on { help }\n"
+"\n"
+"सà¥à¤µà¤¿à¤š संजालन चालू.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli networking off { help }\n"
+"\n"
+"सà¥à¤µà¤¿à¤š संजालन चालू\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the connectivity."
+"\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"संजाल कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€ सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤.\n"
+"वैकलà¥à¤ªà¤¿à¤• 'check' वितरà¥à¤• NetworkManager कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€ को फिर जाà¤à¤š करने के लिठ"
+"बनाता है."
+"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"सभी रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"सभी वाई-फ़ाई रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"सभी मोबाइल बà¥à¤°à¤¾à¤à¤¡à¤¬à¥ˆà¤‚ड रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"सभी वाईमैकà¥à¤¸ रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "asleep"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "जà¥à¤¡à¤¼ रहा है"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr " जà¥à¤¡à¤¼à¤¾(केवल सà¥à¤¥à¤¾à¤¨à¥€à¤¯)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "जà¥à¤¡à¤¼à¤¾ (केवल साइट)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "डिसकनेकà¥à¤Ÿ कर रहा है"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "पोरà¥à¤Ÿà¤²"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "सीमित"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "पूरà¥à¤£"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'nm status': %s; अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: केवल यह कà¥à¤·à¥‡à¤¤à¥à¤° ही अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ है: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "सकà¥à¤·à¤®"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "अकà¥à¤·à¤®"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "NetworkManager सà¥à¤¥à¤¿à¤¤à¤¿"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "कारà¥à¤¯à¤¶à¥€à¤²"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "नहीं चल रहा है"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "शà¥à¤°à¥‚ कर रहा है"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "आरंभ किया"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "ऑथ"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'nm अनà¥à¤®à¤¤à¤¿': %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'nm अनà¥à¤®à¤¤à¤¿': %s; अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सामानà¥à¤¯ अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤': %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक अनà¥à¤®à¤¤à¤¿"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: तंतà¥à¤° से कनेकà¥à¤Ÿ नहीं कर पाया.: %s"
+msgid "Error: 'general logging': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सामानà¥à¤¯ लॉगिंग': %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: डी बस वसà¥à¤¤à¥ पà¥à¤°à¥‰à¤•à¥à¤¸à¥€ नहीं बना सका."
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक लॉगिंग"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "नींद में तà¥à¤°à¥à¤Ÿà¤¿: %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: मेजबाननाम सेट करने में विफल: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"तà¥à¤°à¥à¤Ÿà¤¿: '--fields' मान '%s' यहाठवैध नहीं है; अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤° हैं: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: लॉगिंग सेट करने के लिठपहà¥à¤à¤š मना; %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "नेटवरà¥à¤•à¤¿à¤‚ग सकà¥à¤·à¤® है"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अमानà¥à¤¯ 'सकà¥à¤·à¤®' पैरामीटर: '%s', 'सही' या 'गलत' का उपयोग करें."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सामानà¥à¤¯' कमांड '%s' वैध नहीं है."
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: सà¥à¤²à¥€à¤ªà¤¿à¤‚ग सà¥à¤¥à¤¿à¤¤à¤¿ नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक दà¥à¤µà¤¾à¤°à¤¾ निरà¥à¤¯à¤¾à¤¤ नहीं है."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr ""
+"तà¥à¤°à¥à¤Ÿà¤¿: '--fields' मान '%s' यहाठवैध नहीं है (अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤° हैं: "
+"%s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अमानà¥à¤¯ 'नींद' पैरामीटर: '%s', 'सही' या 'गलत' का उपयोग करें."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध '%s' वितरà¥à¤•: '%s' (चालू/बंद का उपयोग करें)."
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi सकà¥à¤·à¤®"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध 'wifi' पैरामीटर: '%s'."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "संजालन"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN सकà¥à¤°à¤¿à¤¯"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'networking connectivity' कमांड '%s' वैध नहीं है."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध 'wwan' पैरामीटर: '%s'."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'संजालन' कमांड '%s' वैध नहीं है."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX सकà¥à¤·à¤®"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "रेडियो सà¥à¤µà¤¿à¤šà¥‡à¤¸"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध 'wimax' पैरामीटर: '%s'."
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi रेडियो सà¥à¤µà¤¿à¤š"
+
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN रेडियो सà¥à¤µà¤¿à¤š"
+
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX रेडियो सà¥à¤µà¤¿à¤š"
-#: ../cli/src/network-manager.c:588
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'nm' कमांड '%s' वैध नहीं है."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'रेडियो' कमांड '%s' वैध नहीं है."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -n[ocheck] don't check nmcli and "
-#| "NetworkManager versions\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1744,11 +3934,16 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
@@ -1764,247 +3959,782 @@ msgstr ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: वसà¥à¤¤à¥ '%s' अजà¥à¤žà¤¾à¤¤ है, 'nmcli help' आजमाà¤à¤."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--terse' ने दूसरी बार निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ किया है."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--terse' '--pretty' के साथ परसà¥à¤ªà¤° वहिरà¥à¤µà¥‡à¤·à¥€ है."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--pretty' दूसरी बार निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ किया है."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--pretty' परसà¥à¤ªà¤° वहिरà¥à¤µà¥‡à¤¶à¥€ है '--terse' के साथ."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' विकलà¥à¤ª के लिठअनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ तरà¥à¤•."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' '%s' विकलà¥à¤ª के लिठवैध तरà¥à¤• नहीं है."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' विकलà¥à¤ª के लिठकà¥à¤·à¥‡à¤¤à¥à¤° अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' वैध समापà¥à¤¤à¤¿ नहीं है '%s' विकलà¥à¤ª के लिà¤."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli टूल, संसà¥à¤•à¤°à¤£ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '%s' अजà¥à¤žà¤¾à¤¤ है, 'nmcli -help' आजमाà¤à¤."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "संकेत %d पकड़ा, बंद कर रहा है..."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"तà¥à¤°à¥à¤Ÿà¤¿: nmcli की संकेत %d के दà¥à¤µà¤¾à¤°à¤¾ समापà¥à¤¤à¤¿."
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "संकेत मà¥à¤–ौटा सेट करने में विफल: %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "संकेत से निपटने मà¥à¤¦à¥à¤¦à¤¾ बनाने में विफल: %d"
+
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: NMClient ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ नहीं बना सका."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "सफल"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:529
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-बिट पासफà¥à¤°à¥‡à¤œ)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (अजà¥à¤žà¤¾à¤¤)"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (अजà¥à¤žà¤¾à¤¤)"
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "कोई, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:588
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:590
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (कà¥à¤› नहीं)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (अकà¥à¤·à¤®)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (सकà¥à¤·à¤®, सारà¥à¤µà¤œà¤¨à¤¿à¤• आईपी पसंद करते हैं)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (सकà¥à¤·à¤® है, असà¥à¤¥à¤¾à¤¯à¥€ आईपी पसंद करते हैं)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (कोई नहीं)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "à¤à¤œà¥‡à¤‚ट-सà¥à¤µà¤¾à¤®à¤¿à¤¤à¥à¤µ, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "सहेजा नहीं"
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "जरूरी नहीं, "
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (disabled)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "सकà¥à¤·à¤®, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "विजà¥à¤žà¤¾à¤ªà¤¿à¤¤ करें,"
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "इचà¥à¤›à¥à¤•, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (अनसेट)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "auto"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "तयशà¥à¤¦à¤¾"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "कà¥à¤¯à¤¾ आप '%s' को '%s' में सेट करना चाहते हैं? [yes]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "कà¥à¤¯à¤¾ आप '%s' को साफ करना चाहते हैं? [yes]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' वैध नहीं है"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' वैध नहीं है; उपयोग करें <%d-%d>"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' वैध नहीं है; <%d-%d> उपयोग करें"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' वैध नहीं है; <option>=<value> का उपयोग करें"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "सूची '%s' वैध नहीं है"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "हटाने के लिठकोई मद नहीं"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "सूची '%d' परिसर में नहीं है <0-%d>"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "अवैध विकलà¥à¤ª '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ विकलà¥à¤ª"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' वैध संखà¥à¤¯à¤¾ नहीं है (या परिसर से बाहर)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' à¤à¤• वैध इथरनेट MAC नहीं है"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' कोई वैध अंतरफलक नाम नहीं है"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' संखà¥à¤¯à¤¾ नहीं है"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' à¤à¤• वैध हेसà¥à¤• वरà¥à¤£ नहीं है"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' à¤à¤• वैध MAC नहीं है"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' वैध UUID नहीं है"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"उपयोकà¥à¤¤à¤¾ अनà¥à¤®à¤¤à¤¿ की सूची दें. यह इस पà¥à¤°à¤•à¤¾à¤° संरूपित नामों की सूची है:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"यह मद कौमा या सà¥à¤¥à¤¾à¤¨ के दà¥à¤µà¤¾à¤°à¤¾ पृथक होगा.\n"
+"\n"
+"उदाहरण: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' à¤à¤• वैध मासà¥à¤Ÿà¤° नहीं है; ifname या कनेकà¥à¤¶à¤¨ UUID का उपयोग करें"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "निजी कà¥à¤‚जी कूटशबà¥à¤¦ नहीं दिया हà¥à¤† है"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"किसी निजी कà¥à¤à¤œà¥€ में पथ दरà¥à¤œ करें (यदि अबतक सेट नहीं है):\n"
+" <file path> [<password>]\n"
+"उदाहरण: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"बाइट को हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¥€à¤®à¤² मान के रूप में दरà¥à¤œ करें.\n"
+"दो सà¥à¤µà¤°à¥‚प सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ हैं:\n"
+"(a) हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¥€à¤®à¤² अंक का सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग, जहाठहर को अंक à¤à¤• बाइट को बताता है\n"
+"(b) सà¥à¤¥à¤¾à¤¨ से अलग बाइट की सूची बतौर हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¥€à¤®à¤² लिखित (वैकलà¥à¤ªà¤¿à¤• 0x/0X "
+"पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸, और वैकलà¥à¤ªà¤¿à¤• अगà¥à¤°à¤£à¥€ 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"बांडिंग विकलà¥à¤ª की सूची को इस पà¥à¤°à¤•à¤¾à¤° पà¥à¤°à¤¾à¤°à¥‚पित रूप में दरà¥à¤œ करें:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"उदाहरण: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' वैध InfiniBand MAC नहीं है"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' वैध IBoIP P_Key नहीं है"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS सरà¥à¤µà¤° IPv4 पता की सूची दरà¥à¤œ करें .\n"
+"\n"
+"उदाहरण: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' वैध नहीं है (use ip[/prefix] [gateway])"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"IPv4 पता की सूची इस पà¥à¤°à¤•à¤¾à¤° पà¥à¤°à¤¾à¤°à¥‚पित तरीके से दरà¥à¤œ करें:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ 32 के पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ के रूप में माना जाà¤à¤—ा.\n"
+"\n"
+"उदाहरण: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' वैध नहीं है (use ip/[prefix] next-hop [metric])"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"IPv4 रॉट की सूची à¤à¤¸à¥‡ संरूपित रूप में दरà¥à¤œ करें:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"32 के पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ पूरà¥à¤µà¤¸à¤°à¥à¤—.\n"
+"0 की मेटà¥à¤°à¤¿à¤• के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ मेटà¥à¤°à¤¿à¤•.\n"
+"\n"
+"उदाहरण: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS सरà¥à¤µà¤° के IPv6 की सूची दरà¥à¤œ करें. यदि IPv6 विनà¥à¤¯à¤¾à¤¸ विधि 'auto' है इन DNS "
+"सरà¥à¤µà¤° को (यदि कोई है) में जोड़ा जाà¤à¤—ा जो सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ विनà¥à¤¯à¤¾à¤¸ के दà¥à¤µà¤¾à¤°à¤¾ वापस "
+"किया जाता है. DNS सरà¥à¤µà¤° को 'shared' या 'link-local' IPv6 विनà¥à¤¯à¤¾à¤¸ विधि के "
+"दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤— नहीं किया जा सकता है, कà¥à¤¯à¥‹à¤‚कि कोई अपसà¥à¤Ÿà¥à¤°à¥€à¤® संजाल नहीं है. सभी "
+"दूसरे IPv6 विनà¥à¤¯à¤¾à¤¸ विधि में, ये DNS सरà¥à¤µà¤° को केवल पà¥à¤°à¤¯à¥‹à¤— किया जा सकता है इस "
+"कनेकà¥à¤¶à¤¨ के लिठDNS के साथ.\n"
+"\n"
+"उदाहरण: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+msgstr ""
+"IPv6 पता की सूची इस पà¥à¤°à¤•à¤¾à¤° पà¥à¤°à¤¾à¤°à¥‚पित तरीके से दरà¥à¤œ करें:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ 32 के पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ के रूप में माना जाà¤à¤—ा.\n"
+"\n"
+"उदाहरण: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"'%s' वैध नहीं है (<dest IP>/prefix <next-hop IP> [metric] का उपयोग करें)"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"IPv6 रॉट की सूची à¤à¤¸à¥‡ संरूपित रूप में दरà¥à¤œ करें:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"128 के पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ पूरà¥à¤µà¤¸à¤°à¥à¤—.\n"
+"0 की मेटà¥à¤°à¤¿à¤• के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ मेटà¥à¤°à¤¿à¤•.\n"
+"\n"
+"उदाहरण: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' वैध नहीं है; 0, 1, अथवा 2 का उपयोग करें"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' à¤à¤• वैध चैनल नहीं है; <1-13> का उपयोग करें"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' वैध नहीं है; [e, o, n] का उपयोग करें"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli पà¥à¤°à¤¤à¥à¤¯à¤•à¥à¤· JSON विनà¥à¤¯à¤¾à¤¸ आà¤à¤•à¤¡à¤¼à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤° कर सकता है और विनà¥à¤¯à¤¾à¤¸ समाहित करने "
+"वाले फ़ाइल नाम. बाद की सà¥à¤¥à¤¿à¤¤à¤¿ में फ़ाइल फ़ाइल पढ़ा जाता है और सामगà¥à¤°à¥€ को इस "
+"गà¥à¤£ में डाला जाता है.\n"
+"\n"
+"उदाहरण: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "हटाने के लिठकोई पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ नहीं"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "सूची '%d' <0-%d> के परिसर का नहीं है"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' वैध नहीं है; 3 सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग दिया जाना चाहिà¤"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"तीन चैनल की सूची दरà¥à¤œ करें (कौमा या सà¥à¤¥à¤¾à¤¨ से अलग).\n"
+"\n"
+"उदाहरण: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"S/390 विकलà¥à¤ª इस पà¥à¤°à¤•à¤¾à¤° संरूपित:\n"
+" विकलà¥à¤ª = <value>, option = <value>,...\n"
+"वैध विकलà¥à¤ª हैं: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' वैध चैनल नहीं है"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' वैध चैनल नहीं है"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP कà¥à¤à¤œà¥€ '%s' का अनà¥à¤®à¤¾à¤¨à¤¿à¤¤ है\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' [0 (unknown), 1 (key), 2 (passphrase)] में से है"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP कà¥à¤à¤œà¥€ का पà¥à¤°à¤•à¤¾à¤° दरà¥à¤œ करें. सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ मान हैं: 0 या अजà¥à¤žà¤¾à¤¤, 1 या कà¥à¤à¤œà¥€, "
+"और 2 या कूटशबà¥à¤¦.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' वैध PSK नहीं है"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' वैध DCB फà¥à¤²à¥ˆà¤— नहीं है"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' à¤à¤• DCB à¤à¤ªà¥à¤ª पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ नहीं है"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "जरूर ८ कौमा से पृथक संखà¥à¤¯à¤¾ समाहित करनी चाहिà¤"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' 0 और %u (समावेशी) अथवा %u के बीच की संखà¥à¤¯à¤¾ नहीं है"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' 0 और %u (समावेशी) के बीच की संखà¥à¤¯à¤¾ नहीं है"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"चेतावनी: परिवरà¥à¤¤à¤¨ तबतक पà¥à¤°à¤­à¤¾à¤µà¥€ नहीं होगा जब '%s' शामिल करता है 1 (सकà¥à¤°à¤¿à¤¯)\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "बैंडबिडà¥à¤¥ पà¥à¤°à¤¤à¤¿à¤¶à¤¤ कà¥à¤² 100%% होना चाहिà¤"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "विशेषता मान पाने के लिठनहीं जानते हैं कैसे"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "विशेषता बदला नहीं जा सकता है"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM विशेषता विवरण]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli विशिषà¥à¤Ÿ विवरण]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' वितरà¥à¤• के लिठमान जरूरी है."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: वितरà¥à¤• '%s' पà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ था, लेकिन '%s' पà¥à¤°à¤¦à¤¾à¤¨ किया गया."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ वितरà¥à¤•."
+
+#: ../cli/src/utils.c:189
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "पाठ के रूप IP4 पते '0x%X' में परिवरà¥à¤¤à¤¿à¤¤ करने में तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:217
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "पाठ के रूप IP6 पते '%s' में परिवरà¥à¤¤à¤¿à¤¤ करने में तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' वैध नहीं है; [%s] या [%s] उपयोग करें"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' दà¥à¤µà¤¿à¤§à¤¾à¤ªà¥‚रà¥à¤£ है (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ नाम, [%s] में से à¤à¤• की कोशिश करें"
+
+#: ../cli/src/utils.c:718
#, c-format
msgid "field '%s' has to be alone"
msgstr "कà¥à¤·à¥‡à¤¤à¥à¤° '%s' को अलग रहना है"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:720
#, c-format
-msgid "invalid field '%s'"
-msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'; अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "विकलà¥à¤ª '--terse' के लिठ'--fields' निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करना है"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "विकलà¥à¤ª '--terse' के लिठ'--fields' विकलà¥à¤ª मान की जरूरत है, न कि '%s'"
-#: ../cli/src/utils.c:468
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: org.freedesktop.DBus के लिठD-बस वसà¥à¤¤à¥ पà¥à¤°à¥‰à¤•à¥à¤¸à¥€ नहीं बना सका"
-
-#: ../cli/src/utils.c:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: NameHasOwner निवेदन असफल: %s"
-
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
"nocheck to suppress the warning.\n"
msgstr ""
-"चेतावनी: nmcli(%s) और नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक संसà¥à¤•à¤°à¤£ (%s) से मेल नहीं खाती है. पà¥à¤°à¤¯à¥‹à¤— "
-"करें -चेतावनी "
-"को दबाने के लिठnocheck करें.\n"
+"चेतावनी: nmcli(%s) और नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक संसà¥à¤•à¤°à¤£ (%s) से मेल नहीं खाती है. "
+"पà¥à¤°à¤¯à¥‹à¤— करें -चेतावनी को दबाने के लिठnocheck करें.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1079
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
"execution using --nocheck, but the results are unpredictable."
msgstr ""
"तà¥à¤°à¥à¤Ÿà¤¿: nmcli(%s) और नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक संसà¥à¤•à¤°à¤£ (%s) से मेल नहीं खाती है.बल "
-"कà¥à¤°à¤¿à¤¯à¤¾à¤¨à¥à¤µà¤¯à¤¨ का "
-"उपयोग करें - nocheck, लेकिन परिणाम अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ हैं."
+"कà¥à¤°à¤¿à¤¯à¤¾à¤¨à¥à¤µà¤¯à¤¨ का उपयोग करें - nocheck, लेकिन परिणाम अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ हैं."
#: ../libnm-util/crypto.c:133
#, c-format
@@ -2016,116 +4746,87 @@ msgstr "PEM कà¥à¤‚जी फाइल के पास कोई अंत à¤
msgid "Doesn't look like a PEM private key file."
msgstr "à¤à¤• PEM निजी कà¥à¤‚जी फाइल की तरह का नहीं दिखता है."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM फाइल डेटा जमा करने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¤¿ नहीं."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "विरूपित PEM फाइल: Proc-Type पहला टैग नहीं था."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "विरूपित PEM फाइल: अजà¥à¤žà¤¾à¤¤ Proc-Type टैग '%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "विरूपित PEM फाइल: DEK-Info दूसरा टैग नहीं था."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "विरूपित PEM फाइल: कोई IV DEK-Info टैग में नहीं मिला."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "विरूपित PEM फाइल: IV का अवैध पà¥à¤°à¤¾à¤°à¥‚प DEK-Info टैग में."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "विरूपित PEM फाइल: अजà¥à¤žà¤¾à¤¤ निजी कà¥à¤‚जी साइफर '%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "निजी कà¥à¤‚जी को विगोपित नहीं कर सका."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "अपेकà¥à¤·à¤¿à¤¤ PKCS#8 आरंभ टैग को खोजने में असफल."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "अपेकà¥à¤·à¤¿à¤¤ PKCS#8 अंत टैग '%s' को खोजने में असफल."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "निजी कà¥à¤‚जी डेटा सà¥à¤Ÿà¥‹à¤° करने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¤¿ नहीं है."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 निजी कà¥à¤‚जी वà¥à¤¯à¤¾à¤–à¥à¤¯à¤¾ करने में असफल रहा."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° आà¤à¤•à¤¡à¤¼à¤¾ जमा करने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¤¿ नहीं."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV की लंबाई में बाइट संखà¥à¤¯à¤¾ सम संखà¥à¤¯à¤¾ होनी चाहिà¤."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV जमा करने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¤¿ नहीं."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV गैर हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¥€à¤®à¥‡à¤² अंक समाहित करता है."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "निजी कà¥à¤‚जी साइफर '%s' अजà¥à¤žà¤¾à¤¤ था."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "निजी कà¥à¤‚जी गोपित करने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¤¿ नहीं."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "विगोपित निजी कà¥à¤‚जी जमा करने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¤¿ नहीं."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "निजी कà¥à¤‚जी पà¥à¤°à¤•à¤¾à¤° निरà¥à¤§à¤¾à¤°à¤¿à¤¤ करने में असमरà¥à¤¥."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° के पास कोई पà¥à¤°à¤¾à¤°à¤‚भ टैग '%s' नहीं है."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° के पास कोई अंत टैग '%s' नहीं है."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° विगोपित करने में विफल."
@@ -2144,97 +4845,87 @@ msgstr "MD5 ईंजन आरंभीकृत करने में विà
msgid "Invalid IV length (must be at least %zd)."
msgstr "अवैध IV लंबाई (कम से कम %zd होना चाहिà¤)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "विगोपित कà¥à¤‚जी बफर के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¤¿ नहीं."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "विगोपन साइफर संदरà¥à¤­ को आरंभीकृत करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "गोपन के लिठसममितीय कà¥à¤‚जी सेट करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "IV को गोपन के लिठसेट करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "निजी कà¥à¤‚जी गोपित करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "निजी कà¥à¤‚जी गोपित करने में विफल: अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ पैडिंग लंबाई."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "निजी कà¥à¤‚जी गोपित करने में विफल."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "गोपन के लिठसà¥à¤®à¥ƒà¤¤à¤¿ आबंटित नहीं कर सका."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "गोपन साइफर संदरà¥à¤­ को आरंभीकृत करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "गोपन के लिठसममितीय कà¥à¤‚जी सेट करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "IV को गोपन के लिठसेट करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "आà¤à¤•à¤¡à¤¼à¤¾ गोपित करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° आà¤à¤•à¤¡à¤¼à¤¾ आरंभीकृत करने में विफल: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° विगोपित नहीं कर सका: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 विगोपक आरंभीकृत नहीं कर सका: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 फाइल विगोपित नहीं कर सका: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 फाइल जाà¤à¤š नहीं सका: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 विगोपक आरंभीकृत नहीं कर सका: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 फाइल विगोपित नहीं कर सका: %s"
@@ -2254,123 +4945,479 @@ msgstr "MD5 संदरà¥à¤­ आरंभीकृत करने में à
msgid "Invalid IV length (must be at least %d)."
msgstr "अवैध IV लंबाई (जरूर कम से कम %d होना चाहिà¤)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "विगोपन साइफर सà¥à¤²à¥‰à¤Ÿ को आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "गोपन के लिठसममितीय कà¥à¤‚जी सेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "IV को गोपन के लिठसेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "गोपन संदरà¥à¤­ आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "निजी कà¥à¤‚जी गोपित करने में विफल: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "निजी कà¥à¤‚जी गोपित करने में विफल: विगोपित आà¤à¤•à¤¡à¤¼à¤¾ काफी बड़ा है."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "निजी कà¥à¤‚जी के विगोपन को अंतिम रूप देने में विफल: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "गोपन साइफर सà¥à¤²à¤¾à¤Ÿ आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "गोपन के लिठसममितीय कà¥à¤‚जी सेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "IV को गोपन के लिठसेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "गोपन संदरà¥à¤­ आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "गोपित करने में विफल: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "गोपन के बाद आà¤à¤•à¤¡à¤¼à¤¾ की अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ मातà¥à¤°à¤¾."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड नहीं कर सका: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "कूटशबà¥à¤¦ को UCS2 में बदल नहीं सका: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 डिकोडर को आरंभीकृत नहीं कर सका: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 फाइल विगोपित नहीं कर सका: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 फाइल जाà¤à¤š नहीं सका: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "कà¥à¤°à¤®à¤¹à¥€à¤¨ आà¤à¤•à¤¡à¤¼à¤¾ बना नहीं सका."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "गà¥à¤£ अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "गà¥à¤£ रिकà¥à¤¤ है"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "'%s' गà¥à¤£ को PKCS#12 के लिठमिलान करना है"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "गà¥à¤£ अवैध है"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "%s' गà¥à¤£ के लिठवैध मान नहीं है."
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' या '%s' सेटिंग की जरूरत है"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "'%s' अवैध विकलà¥à¤ª या इसका मान '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s' और '%s' में से केवल सेट किया जा सकता है"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "अनिवारà¥à¤¯ विकलà¥à¤ª '%s' अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' '%s' के लिठवैध मान नहीं है"
+
+#: ../libnm-util/nm-setting-bond.c:570
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "गोपन कà¥à¤‚जी बनाने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ मातà¥à¤°à¤¾ में सà¥à¤®à¥ƒà¤¤à¤¿ नहीं."
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' '%s > 0' के साथ असंगत है"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM फाइल निरà¥à¤®à¤¾à¤£ के लिठसà¥à¤®à¥ƒà¤¤à¤¿ नहीं आबंटित कर सका."
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' '%s' विकलà¥à¤ª के लिठवैध अंतरफलक नाम नहीं है"
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' विकलà¥à¤ª '%s=%s' के लिठकेवल वैध है"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' '%s' के लिठवैध विनà¥à¤¯à¤¾à¤¸ है"
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' विकलà¥à¤ª '%s' विकलà¥à¤ª के लिठसेट है"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "IV से PEM फाइल में लिखने के लिठसà¥à¤®à¥ƒà¤¤à¤¿ नहीं आबंटित कर सका."
+msgid "'%s' option is empty"
+msgstr "'%s' खाली है"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-bond.c:671
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "गोपित कà¥à¤‚जी को PEM फाइल में लिखने के लिठसà¥à¤®à¥ƒà¤¤à¤¿ नहीं आबंटित कर सका."
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s'à¤à¤• वैध IPv4 पता '%s' विकलà¥à¤ª के लिठनहीं है"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM फाइल आà¤à¤•à¤¡à¤¼à¤¾ के लिठसà¥à¤®à¥ƒà¤¤à¤¿ नहीं आबंटित कर सका."
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' गà¥à¤£ (होना चाहिठ<= %d) के लिठवैध मान नहीं है"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "मान '%d' परिसर के बाहर है <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "गà¥à¤£ रिकà¥à¤¤ है'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' वरà¥à¤šà¥à¤…ल अंतरफलक नाम '%s' से मेल नहीं खाता है"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "कनेकà¥à¤¶à¤¨ में '%s' सेटिंग की उपसà¥à¤¥à¤¿à¤¤à¤¿ की जरूरत है"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 विनà¥à¤¯à¤¾à¤¸ सà¥à¤²à¥‡à¤µà¤² के लिठअनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 विनà¥à¤¯à¤¾à¤¸ सà¥à¤²à¥‡à¤µà¤² के लिठअनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "पताका अवैध है"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "पताका अवैध है - निषà¥à¤•à¥à¤°à¤¿à¤¯"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "विशेषता अवैध (सकà¥à¤°à¤¿à¤¯ नहीं)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "ततà¥à¤µ अवैध है"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "योग 100% नहीं"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "गà¥à¤£ अवैध है"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "गà¥à¤£ अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "गà¥à¤£ मान '%s' रिकà¥à¤¤ है या काफी लंबा है (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' में अवैध वरà¥à¤£ हैं (उपयोग करें [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' लंबाई अवैध है (5 या 6 अंकों का होना चाहिà¤)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "कोई वैध अंतरफलक नाम नहीं है"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "à¤à¤• P_Key जरूर निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करें यदि जनक को निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ कर रहा है"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key कनेकà¥à¤¶à¤¨ जनक अंतरफलक नाम निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं कर रहा है"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "यह गà¥à¤£ '%s=%s' के लिठअनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 पता अवैध है"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 पता में अवैध उपसरà¥à¤— है"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. रूट अवैध है"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. रूट में अवैध उपसरà¥à¤— है"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' %s=%s के लिठअनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID लंबाई <1-32> बाइट के बाहर है"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' वैध चैनल नहीं है"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' वैध परिसर के बाहर है <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "इस गà¥à¤£ की सेटिंग के लिठगैर शूनà¥à¤¯ '%s' गà¥à¤£ चाहिà¤"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' मान '%s=%s' से मेल नहीं खाता है"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' न ही UUID है न हीं à¤à¤• अंतरफलक नाम"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "गà¥à¤£ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं है और न ही '%s:%s'"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "पताका अवैध है"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' à¤à¤• वैध इथरनेट पोरà¥à¤Ÿ मान नहीं है"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' à¤à¤• वैध डà¥à¤ªà¥à¤²à¥‡à¤•à¥à¤¸ मान नहीं है"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "à¤à¤• वैध MAC पता नहीं है"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' à¤à¤• वैध MAC पता नहीं है"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "अवैध '%s' या इसका मान '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' सà¥à¤°à¤•à¥à¤·à¤¾ के लिठ'%s=%s' चाहिà¤"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' सà¥à¤°à¤•à¥à¤·à¤¾ के लिठ'%s' सेटिंग उपसà¥à¤¥à¤¿à¤¤à¤¿ चाहिà¤"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' मान परिसर से बाहर है <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' कनेकà¥à¤¶à¤¨ के लिठइस गà¥à¤£ में चाहिठ'%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' को '%s=%s' (WEP) के साथ केवल पà¥à¤°à¤¯à¥‹à¤— किया जा सकता है"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' à¤à¤• वैध Wi-Fi अवसà¥à¤¥à¤¾ नहीं चाहिà¤"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' à¤à¤• वैध बांड नहीं है"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "सेटिंग '%s' गà¥à¤£ चाहिà¤"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2386,13 +5433,13 @@ msgid ""
"power management)"
msgstr ""
" NetworkManager को सà¥à¤²à¥€à¤ª सà¥à¤¥à¤¿à¤¤à¤¿ या वेकअप सà¥à¤¥à¤¿à¤¤à¤¿ में रखें (केवल सिसà¥à¤Ÿà¤® पावर "
-"मैनेजमेंट के "
-"दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤— किया जाà¤à¤—ा)"
+"मैनेजमेंट के दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤— किया जाà¤à¤—ा)"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
msgstr ""
-"NetworkManager को सà¥à¤²à¥€à¤ª या वेकअप सà¥à¤¥à¤¿à¤¤à¤¿ में लाने के लिठनेटवरà¥à¤•à¤®à¥ˆà¤¨à¥‡à¤œà¤° रोकता है"
+"NetworkManager को सà¥à¤²à¥€à¤ª या वेकअप सà¥à¤¥à¤¿à¤¤à¤¿ में लाने के लिठनेटवरà¥à¤•à¤®à¥ˆà¤¨à¥‡à¤œà¤° रोकता "
+"है"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
@@ -2419,7 +5466,8 @@ msgstr "WiMAX मोबाइल बà¥à¤°à¤¾à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿à
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
-"WiMAX मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿ के सकà¥à¤°à¤¿à¤¯à¤£ या निषà¥à¤•à¥à¤°à¤¿à¤¯à¤£ को तंतà¥à¤° नीति रोकता है"
+"WiMAX मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿ के सकà¥à¤°à¤¿à¤¯à¤£ या निषà¥à¤•à¥à¤°à¤¿à¤¯à¤£ को तंतà¥à¤° नीति रोकता "
+"है"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
@@ -2471,128 +5519,79 @@ msgstr "सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® को सà¥
msgid "System policy prevents modification of the persistent system hostname"
msgstr "सिसà¥à¤Ÿà¤® नीति सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® के रूपांतरण को रोकता है."
-#: ../src/main.c:158
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "संकेत मà¥à¤–ौटा सेट करने में विफल: %d"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "संकेत से निपटने मà¥à¤¦à¥à¤¦à¤¾ बनाने में विफल: %d"
-
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr " %s को खोलना असफल: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr " %s पे लिखने में असफल: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "समापन %s में विफल रहा है: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक पहले से ही चल रहा है (pid %ld)\n"
-#: ../src/main.c:363
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "छापें नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक संसà¥à¤•à¤°à¤£ और बाहर निकलें"
-#: ../src/main.c:364
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "डेमॉन न होयें"
-#: ../src/main.c:365
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "कोई डेमान मत बनाà¤à¤, और stderr में लॉग करें"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "लॉग सà¥à¤¤à¤°: [%s] में से à¤à¤•"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "लॉग डोमेन ',' से अलग: [%s] का कोई संयोग"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "सभी चेतावनी गंभीर बनाà¤à¤"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "à¤à¤• पीआईडी ​​फ़ाइल का सà¥à¤¥à¤¾à¤¨ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करें"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "filename"
msgstr "फाइलनाम"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "State file location"
msgstr " फ़ाइल सà¥à¤¥à¤¾à¤¨ की सà¥à¤¥à¤¿à¤¤à¤¿"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:368
-msgid "Config file location"
-msgstr "Config फाइल सà¥à¤¥à¤¾à¤¨"
-
-#: ../src/main.c:368
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:369
-msgid "List of plugins separated by ','"
-msgstr "',' के दà¥à¤µà¤¾à¤°à¤¾ अलग पà¥à¤²à¤—िन की सूची "
-
-#: ../src/main.c:369
-msgid "plugin1,plugin2"
-msgstr "पà¥à¤²à¤—इन 1,पà¥à¤²à¤—इन2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:371
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "लॉग सà¥à¤¤à¤°à¤ƒ [ERR, WARN, INFO, DEBUG] में से à¤à¤•"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:374
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"लॉग डोमेन ',' के दà¥à¤µà¤¾à¤°à¤¾ अलग: किसी भी संयोजन का\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:380
-msgid "An http(s) address for checking internet connectivity"
-msgstr "इंटरनेट कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€ की जाà¤à¤š के लिठà¤à¤• HTTP पता (ओं)"
-
-#: ../src/main.c:381
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "संयोजकता जांचों के बीच अंतराल (सेकंड में)"
-
-#: ../src/main.c:382
-msgid "The expected start of the response"
-msgstr "पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ की अपेकà¥à¤·à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤"
-
-#: ../src/main.c:382
-msgid "Bingo!"
-msgstr "बिंगो!"
-
-#: ../src/main.c:387
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules आपके पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¤¾à¤°à¥à¤® पर समरà¥à¤¥à¤¿à¤¤ नहीं हैं!\n"
-#: ../src/main.c:406
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr " नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक! चलाने के लिठआपको रूट होना होगा\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2604,41 +5603,56 @@ msgstr ""
" चà¥à¤¨à¤¤à¤¾ है. यह भी उपयोगकरà¥à¤¤à¤¾ बेतार पहà¥à¤à¤š बिंदॠहै जो कंपà¥à¤¯à¥‚टर में वायरलेस \n"
" कारà¥à¤¡ के साथ संबदà¥à¤§ करना चाहिठनिरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करने की अनà¥à¤®à¤¤à¤¿ देता है."
-#: ../src/main.c:412
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "अवैध विकलà¥à¤ª. कृपया --help का उपयोग वैध विकलà¥à¤ª देने के लिठकरें.\n"
-#: ../src/main.c:422
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr " नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक! चलाने के लिठआपको रूट होना होगा\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. कृपया --help का उपयोग वैध विकलà¥à¤ª देने के लिठकरें.\n"
+
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr "अपरिचित लॉग डोमेन '%s' कमांड लाइन पर पास किया गया.\n"
-#: ../src/main.c:449
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "विनà¥à¤¯à¤¾à¤¸ को पढ़ने में असफ़ल: (%d) %s\n"
-#: ../src/main.c:460
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. कृपया --help का उपयोग वैध विकलà¥à¤ª देने के लिठकरें.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "विनà¥à¤¯à¤¾à¤¸ फ़ाइल में तà¥à¤°à¥à¤Ÿà¤¿: %s.\n"
+
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "अपरिचित लॉग डोमेन '%s' को कॉनà¥à¤«à¤¿à¤— फ़ाइल से अनदेखा किया.\n"
-#: ../src/main.c:467
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "सà¥à¤Ÿà¥‡à¤Ÿ %s फ़ाइल पारà¥à¤¸ करने में विफल: (%d) %s\n"
-#: ../src/main.c:484
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "daemonize नहीं कर सका: %s [error %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:61
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "%s संजाल"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# संजाल पà¥à¤°à¤¬à¤‚धक दà¥à¤µà¤¾à¤°à¤¾ निरà¥à¤®à¤¿à¤¤\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:68
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2647,234 +5661,1002 @@ msgstr ""
"#%s से मिलाया गया\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "कोई पà¥à¤°à¤¯à¥‹à¤œà¥à¤¯ DHCP कà¥à¤²à¤¾à¤‡à¤‚ट नहीं मिला."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' नहीं मिल सका."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' नहीं मिल सका."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "असमरà¥à¤¥à¤¿à¤¤ DHCP कà¥à¤²à¤¾à¤‡à¤‚ट '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "नोट: libc समाधानकरà¥à¤¤à¤¾ 3 नेमसरà¥à¤µà¤° से अधिक का समरà¥à¤¥à¤¨ नहीं कर सकता है."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "नीचे सूची में दिया गया नेमसरà¥à¤µà¤° पहचाना नहीं जा सकता है."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "अजà¥à¤žà¤¾à¤¤ लॉग सà¥à¤¤à¤° '%s'"
-#: ../src/logging/nm-logging.c:181
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "अजà¥à¤žà¤¾à¤¤ लॉग डोमेन '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:280 ../src/nm-device-bt.c:351
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA कनेकà¥à¤¶à¤¨ %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Config फाइल सà¥à¤¥à¤¾à¤¨"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
-#: ../src/modem-manager/nm-modem-gsm.c:558 ../src/nm-device-bt.c:347
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "Config निरà¥à¤¦à¥‡à¤¶à¤¿à¤•à¤¾ सà¥à¤¥à¤¾à¤¨"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' के दà¥à¤µà¤¾à¤°à¤¾ अलग पà¥à¤²à¤—िन की सूची "
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "पà¥à¤²à¤—इन 1,पà¥à¤²à¤—इन2"
+
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "इंटरनेट कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€ की जाà¤à¤š के लिठà¤à¤• HTTP पता (ओं)"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "संयोजकता जांचों के बीच अंतराल (सेकंड में)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ की अपेकà¥à¤·à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "बिंगो!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
msgid "GSM connection %d"
msgstr "GSM कनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-device-bond.c:192
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA कनेकà¥à¤¶à¤¨ %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "बॉणà¥à¤¡ कनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL कनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "बà¥à¤°à¤¿à¤œ कनेकà¥à¤¶à¤¨ %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN कनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN कनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE कनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "तारयà¥à¤•à¥à¤¤ संबंधन %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBandकनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "मेश %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "टीम कनेकà¥à¤¶à¤¨ %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN कनेकà¥à¤¶à¤¨ %d"
-#: ../src/nm-manager.c:662
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN संबंधन %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "सॉकेट पर आà¤à¤•à¤¡à¤¼à¤¾ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करने के दौरान तà¥à¤°à¥à¤Ÿà¤¿"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "netlink संदेश की पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ में तà¥à¤°à¥à¤Ÿà¤¿: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "सॉकेट पर आà¤à¤•à¤¡à¤¼à¤¾ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करने के दौरान तà¥à¤°à¥à¤Ÿà¤¿"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "नेटलिंक को मॉनिटरिंग लिंक सà¥à¤¥à¤¿à¤¤à¤¿ के लिठकनेकà¥à¤Ÿ करने में असमरà¥à¤¥: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "नेटलिंक नियंतà¥à¤°à¤£ शà¥à¤°à¥‡à¤¯ पासिंग सकà¥à¤°à¤¿à¤¯ करने में असमरà¥à¤¥: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
"लिंक सà¥à¤¥à¤¿à¤¤à¤¿ मॉनिटर करने के लिठनेटलिंक नियंतà¥à¤°à¤£ का आबंटित नहीं कर सका: %s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "नेटलिंक कैश को मॉनिटरिंग लिंक सà¥à¤¥à¤¿à¤¤à¤¿ के लिठआबंटित करने में असमरà¥à¤¥: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "नेटलिंक समूह में शामिल होने में असमरà¥à¤¥: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "लिंक कैश अदà¥à¤¯à¤¤à¤¨ करने में तà¥à¤°à¥à¤Ÿà¤¿: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager को संजाल को बंद करने की जरूरत है"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "तंतà¥à¤°"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3663
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "बॉनà¥à¤¡"
-#: ../test/nm-online.c:111
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "टोली"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
+msgid "Bridge"
+msgstr "पà¥à¤²"
+
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\rजà¥à¤¡à¤¼ रहा है"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "à¤à¤• कनेकà¥à¤¶à¤¨ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें, सेकंड में समय (डिफ़ॉलà¥à¤Ÿ 30 है)"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"à¤à¤• कनेकà¥à¤¶à¤¨ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें, सेकंड में समय (डिफ़ॉलà¥à¤Ÿ 30 है बिना विकलà¥à¤ª "
+"के)"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr "तà¥à¤°à¤‚त बाहर निकलें अगर नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक चल रहा है या नहीं जोड़ने है"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "तà¥à¤°à¤‚त बाहर निकलें अगर नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक नहीं चल रहा है"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "कà¥à¤› भी मà¥à¤¦à¥à¤°à¤¿à¤¤ नहीं"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक में à¤à¤• सफल कनेकà¥à¤¶à¤¨ के लिठइंतजार कर रहा है."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें संजाल करनेकà¥à¤¶à¤¨ के आरंभन के लिठसकà¥à¤°à¤¿à¤¯ "
+"करने के लिà¤."
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr "अवैध विकलà¥à¤ª. कृपया --help का उपयोग वैध विकलà¥à¤ª देने के लिठकरें."
-#~ msgid "SCOPE"
-#~ msgstr "SCOPE"
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "ठीक"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "असà¥à¤¥à¤¾à¤¯à¥€ फ़ाइल नहीं बना सका: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿ विफल: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "फ़ाइल फिर नहीं पढ़ सका: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "तारयà¥à¤•à¥à¤¤ संबंधन %d "
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "वाई - फाई संबंधन %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड कनेकà¥à¤¶à¤¨ %d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL कनेकà¥à¤¶à¤¨ %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "तारसहित"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "बà¥à¤²à¥‚टूथ"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "OLPC जाल"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "पीसीआई"
+
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "यूà¤à¤¸à¤¬à¥€"
+
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "चà¥à¤¨à¥‡à¤‚..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "जोड़ें"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "संपादन..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "मिटाà¤à¤"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "'%s' पà¥à¤°à¤•à¤¾à¤° के '%s' कनेकà¥à¤¶à¤¨ के लिठसंपादक नहीं बना सका."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "अवैध कनेकà¥à¤¶à¤¨ के लिठसंपादक नहीं बना सका: '%s'."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "कनेकà¥à¤¶à¤¨ संपादित करें"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "कनेकà¥à¤¶à¤¨ सहेजने में तà¥à¤°à¥à¤Ÿà¤¿: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "कनेकà¥à¤¶à¤¨ सहेजने में असमरà¥à¤¥: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "नया कनेकà¥à¤¶à¤¨ जोड़ने में असमरà¥à¤¥: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "रदà¥à¤¦ करें"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(तयशà¥à¤¦à¤¾)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "बाइटà¥à¤¸"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "राउणà¥à¤¡ रॉबिन"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "सकà¥à¤°à¤¿à¤¯ बैकअप"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "बà¥à¤°à¥‰à¤¡à¤•à¤¾à¤¸à¥à¤Ÿ"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "अनà¥à¤•à¥‚ली संचारित लोड संतà¥à¤²à¤¨ (tlb)"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "अनà¥à¤•à¥‚ली लोड संतà¥à¤²à¤¨ (alb)"
-#~ msgid "system"
-#~ msgstr "तंतà¥à¤°"
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (अनà¥à¤¶à¤‚सित)"
-#~ msgid "user"
-#~ msgstr "उपयोकà¥à¤¤à¤¾"
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
-#~ msgid "System connections"
-#~ msgstr "सिसà¥à¤Ÿà¤® कनेकà¥à¤¶à¤¨"
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "सà¥à¤²à¥‡à¤µ"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "पà¥à¤°à¤•à¤¾à¤°"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "कड़ी मॉनिटरिंग"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "मॉनिटरिंग आवृतà¥à¤¤à¤¿"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "लिंक अप विलंब"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "लिंक डाउन विलंब"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP लकà¥à¤·à¥à¤¯"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "पà¥à¤² पोरà¥à¤Ÿ"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "पथ लागत"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "हेयरपिन पà¥à¤°à¤•à¤¾à¤°"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "पà¥à¤²"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "सेकणà¥à¤¡"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "à¤à¤œà¤¿à¤‚ग समय"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "सकà¥à¤°à¤¿à¤¯ करें à¤à¤¸à¤Ÿà¥€à¤ªà¥€ (सà¥à¤ªà¥ˆà¤¨à¤¿à¤‚ग टà¥à¤°à¥€ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤²)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "अगà¥à¤°à¥‡à¤·à¤¿à¤¤ विलंब"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "हेलो समय"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "अधिकतम आयà¥"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ईथरनेट"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "कà¥à¤²à¥‹à¤¨ MAC पता"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "आंकड़ारेख"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "कनेकà¥à¤Ÿà¥‡à¤¡"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "परिवहन अवसà¥à¤¥à¤¾"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "अकà¥à¤·à¤®"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "लिंक सà¥à¤¥à¤¾à¤¨à¥€à¤¯"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "साà¤à¤¾"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "आईपीवी 4 विनà¥à¤¯à¤¾à¤¸"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(कोई पसंदीदा रूट नहीं)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à¤à¤• मनपसंद रूट"
+msgstr[1] "%d मनपसंद रूट"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "पता"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "गेटवे"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "डीà¤à¤¨à¤à¤¸ सरà¥à¤µà¤°"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "डोमेन खोजें"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "रॉटिंग"
+
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "तयशà¥à¤¦à¤¾ मारà¥à¤— के लिठइस संजाल को कभी पà¥à¤°à¤¯à¥‹à¤— मत करें"
+
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "इस कनेकà¥à¤¶à¤¨ के पूरा होने के लिठIPv4 पता चाहिà¤"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "नज़रअंदाज़ करें"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ (केवल DHCP)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "आईपीवी 6 विनà¥à¤¯à¤¾à¤¸"
+
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "इस कनेकà¥à¤¶à¤¨ के पूरा होने के लिठIPv6 पता चाहिà¤"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "छिपाà¤à¤"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "दिखाà¤à¤"
-#~ msgid "User connections"
-#~ msgstr "उपयोकà¥à¤¤à¤¾ कनेकà¥à¤¶à¤¨"
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² नाम"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "यà¥à¤•à¥à¤¤à¤¿"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ कनेकà¥à¤Ÿ"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "सभी उपयोकà¥à¤¤à¤¾ के लिठउपलबà¥à¤§"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "टीम पोरà¥à¤Ÿ"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON विनà¥à¤¯à¤¾à¤¸"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "टोली"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "पैरेंट"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN ID"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "वाई-फाई"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "पहà¥à¤à¤š बिंदà¥"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "तदरà¥à¤¥ संजाल"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤"
+
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "बी/जी (2.4 गीगा)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "कोई नहीं"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA व WPA2 निजी"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA व WPA2 à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-बिट कà¥à¤à¤œà¥€ (हेकà¥à¤¸ या ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit पासफà¥à¤°à¥‡à¤œ"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "गतिशील WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (तयशà¥à¤¦à¤¾)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "खà¥à¤²à¤¾ तंतà¥à¤°"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "साà¤à¤¾ कà¥à¤‚जी"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "चैनल"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "सà¥à¤°à¤•à¥à¤·à¤¾"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "कूटशबà¥à¤¦"
+
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise के लिठअबतक कोई समरà¥à¤¥à¤¨ नहीं...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "कà¥à¤‚जी"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP सूची"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "सतà¥à¤¯à¤¾à¤ªà¤¨"
+
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(गतिशील-wep के लिठअबतक कोई समरà¥à¤¥à¤¨ नहीं...)"
+
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "उपयोकà¥à¤¤à¤¾à¤¨à¤¾à¤®"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "इस कूटशबà¥à¤¦ के लिठहर समय पूछें"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "कूटशबà¥à¤¦ दिखाà¤à¤"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "गंतवà¥à¤¯"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "उपसरà¥à¤—"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "अगला हॉप"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "मेटà¥à¤°à¤¿à¤•"
-#~ msgid "state: %s\n"
-#~ msgstr "सà¥à¤¥à¤¿à¤¤à¤¿: %s\n"
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "कोई पसंदीदा रूट परिभाषित नहीं है."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "पहचान"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "निजी कà¥à¤‚जी कूटशबà¥à¤¦"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "सेवा"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "बेतार संजाल के दà¥à¤µà¤¾à¤°à¤¾ सतà¥à¤¯à¤¾à¤ªà¤¨ जरूरी"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr "कूटशबà¥à¤¦ या गोपन कà¥à¤‚जी बेतार संजाल '%s' की पहà¥à¤à¤š के लिठजरूरी है."
-#~ msgid "Connection activated\n"
-#~ msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ किया गया\n"
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "तारयà¥à¤•à¥à¤¤ 802.1X सतà¥à¤¯à¤¾à¤ªà¤¨"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "सà¥à¤¥à¤¿à¤¤à¤¿: %s (%d)\n"
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "संजाल नाम"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' के लिठसकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ पा रहा है."
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "डीà¤à¤¸à¤à¤² सतà¥à¤¯à¤¾à¤ªà¤¨"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "पिन कोड जरूरी"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "पिन कोड मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿ के लिठजरूरी है"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "पिन"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ज संजाल कूटशबà¥à¤¦"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' में कनेकà¥à¤Ÿ होने के लिठà¤à¤• कूटशबà¥à¤¦ जरूरी है."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "सà¥à¤²à¥‡à¤µ कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° चà¥à¤¨à¥‡à¤‚ जिसे आप जोड़ना चाहते हैं."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "जोड़ें..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "हटाà¤à¤"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "जà¥à¤¡à¤¼ रहा है..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ नहीं कर सका: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "सकà¥à¤°à¤¿à¤¯ करें"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "निषà¥à¤•à¥à¤°à¤¿à¤¯ करें"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "बाहर"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "कोई à¤à¤¸à¤¾ कनेकà¥à¤¶à¤¨ नहीं '%s'"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "कनेकà¥à¤¶à¤¨ पहले से सकà¥à¤°à¤¿à¤¯ है"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "बनाà¤à¤"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° चà¥à¤¨à¥‡à¤‚ जिसे आप करना चाहते हैं."
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"यदि VPN कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° आप बनाना चाहते हैं सूची में पà¥à¤°à¤•à¤Ÿ नहीं होता है, तो "
+"आप सही वीपीà¤à¤¨ पà¥à¤²à¤—इन संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ नहीं हो सकता है."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "नया कनेकà¥à¤¶à¤¨"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "कनेकà¥à¤¶à¤¨ मिटाने में असमरà¥à¤¥: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "कà¥à¤¯à¤¾ आप निशà¥à¤šà¤¿à¤¤ हैं कि आप इस कनेकà¥à¤¶à¤¨ '%s को मिटाना चाहते हैं?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "टीà¤à¤²à¤à¤¸ कनेकà¥à¤¶à¤¨ मिटा नहीं सका: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "मेजबाननाम सेट करें"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "मेजबाननाम"
+
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "'%s' पर मेजबाननाम सेट करें"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "मेजबाननाम सेट नहीं कर सका: %s"
+
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "कनेकà¥à¤¶à¤¨"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ सà¥à¤¥à¤¿à¤¤à¤¿: %s\n"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "कनेकà¥à¤¶à¤¨ संपादित करें"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ पथ: %s\n"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ करें"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-SETTINGS"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "नया मेजबाननाम"
-#~ msgid "IP6-SETTINGS"
-#~ msgstr "IP6-SETTINGS"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "तंतà¥à¤° मेजबाननाम सेट करें"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
-#~ msgid "unknown)"
-#~ msgstr "अजà¥à¤žà¤¾à¤¤)"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "कृपया कोई विकलà¥à¤ª चà¥à¤¨à¥‡à¤‚"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "यà¥à¤•à¥à¤¤à¤¿ सà¥à¤¥à¤¿à¤¤à¤¿: %d (%s)\n"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "पà¥à¤°à¤¯à¥‹à¤—"
-#~ msgid "not set"
-#~ msgstr "सेट नहीं"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "तरà¥à¤• पदवà¥à¤¯à¤¾à¤–à¥à¤¯à¤¾ नहीं कर सकता"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "उपयोकà¥à¤¤à¤¾ विशिषà¥à¤Ÿ कनेकà¥à¤¶à¤¨ के उपयोग की सà¥à¤µà¥€à¤•à¥ƒà¤¤à¤¿ दें"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक कारà¥à¤¯à¤¶à¥€à¤² नहीं है."
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr "सिसà¥à¤Ÿà¤® नीति उपयोकà¥à¤¤à¤¾ विशेष कनेकà¥à¤¶à¤¨ के उपयोग को रोकता है"
-#~ msgid "Auto %s"
-#~ msgstr "सà¥à¤µà¤¤à¤ƒ %s"
diff --git a/po/hr.po b/po/hr.po
index 4e245654f..3cc5e452d 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -794,8 +794,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:471
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:480
msgid "Encrypted: "
diff --git a/po/hu.po b/po/hu.po
index b422bcd6f..00d95bc3c 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -1,27 +1,28 @@
# Hungarian translation of NetworkManager
# This file is distributed under the same license as the NetworkManager package.
-# Copyright (C) 2005, Free Software Foundation. Inc.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. Free Software Foundation. Inc.
#
-# Gabor Kelemen <kelemeng at gnome dot hu>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
+# Gabor Kelemen <kelemeng at gnome dot hu>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-02-09 15:25+0000\n"
-"PO-Revision-Date: 2012-02-16 04:41+0100\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2013-05-01 21:55+0000\n"
+"PO-Revision-Date: 2013-05-18 03:06+0200\n"
"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
-"Language-Team: Magyar <gnome-hu-list at gnome dot org>\n"
+"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
+"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Launchpad-Export-Date: 2010-10-02 18:28+0000\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:119
-#: ../cli/src/connections.c:153
+#: ../cli/src/common.c:63 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:169
msgid "GROUP"
msgstr "CSOPORT"
@@ -32,7 +33,6 @@ msgstr "CÃM"
#. 1
#: ../cli/src/common.c:34 ../cli/src/common.c:54
-#| msgid "RATE"
msgid "ROUTE"
msgstr "ÚTVONAL"
@@ -56,18 +56,306 @@ msgstr "WINS"
msgid "OPTION"
msgstr "KAPCSOLÓ"
+#: ../cli/src/common.c:366
+msgid "unmanaged"
+msgstr "kezeletlen"
+
+#: ../cli/src/common.c:368
+msgid "unavailable"
+msgstr "elérhetetlen"
+
+#: ../cli/src/common.c:370 ../cli/src/network-manager.c:148
+msgid "disconnected"
+msgstr "leválasztva"
+
+#: ../cli/src/common.c:372
+msgid "connecting (prepare)"
+msgstr "kapcsolódás (előkészítés)"
+
+#: ../cli/src/common.c:374
+msgid "connecting (configuring)"
+msgstr "kapcsolódás (konfigurálás)"
+
+#: ../cli/src/common.c:376
+msgid "connecting (need authentication)"
+msgstr "kapcsolódás (hitelesítés szükséges)"
+
+#: ../cli/src/common.c:378
+msgid "connecting (getting IP configuration)"
+msgstr "kapcsolódás (IP-beállítások lekérése)"
+
+#: ../cli/src/common.c:380
+msgid "connecting (checking IP connectivity)"
+msgstr "kapcsolódás (IP-összekapcsolhatóság ellenőrzése)"
+
+#: ../cli/src/common.c:382
+msgid "connecting (starting secondary connections)"
+msgstr "kapcsolódás (másodlagos kapcsolatok indítása)"
+
+#: ../cli/src/common.c:384 ../cli/src/network-manager.c:144
+msgid "connected"
+msgstr "kapcsolódva"
+
+#: ../cli/src/common.c:386 ../cli/src/connections.c:468
+msgid "deactivating"
+msgstr "kikapcsolás"
+
+#: ../cli/src/common.c:388
+msgid "connection failed"
+msgstr "kapcsolódás sikertelen"
+
+#: ../cli/src/common.c:390 ../cli/src/connections.c:473
+#: ../cli/src/connections.c:496 ../cli/src/connections.c:1193
+#: ../cli/src/devices.c:664 ../cli/src/devices.c:1918
+#: ../cli/src/network-manager.c:151 ../cli/src/network-manager.c:214
+#: ../cli/src/network-manager.c:217 ../cli/src/network-manager.c:226
+#: ../cli/src/network-manager.c:283 ../cli/src/network-manager.c:299
+#: ../cli/src/settings.c:664 ../cli/src/settings.c:692
+#: ../cli/src/settings.c:754 ../cli/src/utils.c:627 ../src/main.c:403
+#: ../src/main.c:422
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: ../cli/src/common.c:399
+msgid "No reason given"
+msgstr "Nincs megadva ok"
+
+#: ../cli/src/common.c:402
+msgid "Unknown error"
+msgstr "Ismeretlen hiba"
+
+#: ../cli/src/common.c:405
+msgid "Device is now managed"
+msgstr "Az eszköz mostantól kezelt"
+
+#: ../cli/src/common.c:408
+msgid "Device is now unmanaged"
+msgstr "Az eszköz mostantól nem kezelt"
+
+#: ../cli/src/common.c:411
+msgid "The device could not be readied for configuration"
+msgstr "Az eszköz nem készíthető fel a beállításra"
+
+#: ../cli/src/common.c:414
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+"Az IP-beállítások nem foglalhatók le (nem érhető el cím, időkorlát stb.)"
+
+#: ../cli/src/common.c:417
+msgid "The IP configuration is no longer valid"
+msgstr "Az IP-beállítások már nem érvényesek"
+
+#: ../cli/src/common.c:420
+msgid "Secrets were required, but not provided"
+msgstr "Titkos információkra volt szükség, de nem lettek megadva"
+
+#: ../cli/src/common.c:423
+msgid "802.1X supplicant disconnected"
+msgstr "A 802.1X-kliens bontotta a kapcsolatot"
+
+#: ../cli/src/common.c:426
+msgid "802.1X supplicant configuration failed"
+msgstr "A 802.1X-kliens beállítása meghiúsult"
+
+#: ../cli/src/common.c:429
+msgid "802.1X supplicant failed"
+msgstr "A 802.1X-kliens sikertelen"
+
+#: ../cli/src/common.c:432
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "A 802.1X-kliens hitelesítése túl sokáig tartott"
+
+#: ../cli/src/common.c:435
+msgid "PPP service failed to start"
+msgstr "A PPP szolgáltatás nem indult el"
+
+#: ../cli/src/common.c:438
+msgid "PPP service disconnected"
+msgstr "PPP szolgáltatás leválasztva"
+
+#: ../cli/src/common.c:441
+msgid "PPP failed"
+msgstr "A PPP sikertelen"
+
+#: ../cli/src/common.c:444
+msgid "DHCP client failed to start"
+msgstr "A DHCP kliens nem indult el"
+
+#: ../cli/src/common.c:447
+msgid "DHCP client error"
+msgstr "DHCP-klienshiba"
+
+#: ../cli/src/common.c:450
+msgid "DHCP client failed"
+msgstr "A DHCP-kliens sikertelen"
+
+#: ../cli/src/common.c:453
+msgid "Shared connection service failed to start"
+msgstr "A megosztott kapcsolat szolgáltatás nem indult el"
+
+#: ../cli/src/common.c:456
+msgid "Shared connection service failed"
+msgstr "A megosztott kapcsolat szolgáltatás sikertelen"
+
+#: ../cli/src/common.c:459
+msgid "AutoIP service failed to start"
+msgstr "Az AutoIP szolgáltatás nem indult el"
+
+#: ../cli/src/common.c:462
+msgid "AutoIP service error"
+msgstr "AutoIP szolgáltatáshiba"
+
+#: ../cli/src/common.c:465
+msgid "AutoIP service failed"
+msgstr "Az AutoIP szolgáltatás sikertelen"
+
+#: ../cli/src/common.c:468
+msgid "The line is busy"
+msgstr "A vonal foglalt"
+
+#: ../cli/src/common.c:471
+msgid "No dial tone"
+msgstr "Nincs tárcsahang"
+
+#: ../cli/src/common.c:474
+msgid "No carrier could be established"
+msgstr "Nem hozható létre vivőjel"
+
+#: ../cli/src/common.c:477
+msgid "The dialing request timed out"
+msgstr "A tárcsázási kérés túllépte az időkorlátot"
+
+#: ../cli/src/common.c:480
+msgid "The dialing attempt failed"
+msgstr "A tárcsázási kísérlet meghiúsult"
+
+#: ../cli/src/common.c:483
+msgid "Modem initialization failed"
+msgstr "A modem előkészítése sikertelen"
+
+#: ../cli/src/common.c:486
+msgid "Failed to select the specified APN"
+msgstr "A megadott APN kiválasztása meghiúsult"
+
+#: ../cli/src/common.c:489
+msgid "Not searching for networks"
+msgstr "Nem keres hálózatokat"
+
+#: ../cli/src/common.c:492
+msgid "Network registration denied"
+msgstr "Hálózatregisztráció megtagadva"
+
+#: ../cli/src/common.c:495
+msgid "Network registration timed out"
+msgstr "A hálózatregisztráció túllépte az időkorlátot"
+
+#: ../cli/src/common.c:498
+msgid "Failed to register with the requested network"
+msgstr "A kért hálózaton való regisztráció sikertelen"
+
+#: ../cli/src/common.c:501
+msgid "PIN check failed"
+msgstr "A PIN ellenőrzése sikertelen"
+
+#: ../cli/src/common.c:504
+msgid "Necessary firmware for the device may be missing"
+msgstr "Az eszközhöz szükséges firmware hiányozhat"
+
+#: ../cli/src/common.c:507
+msgid "The device was removed"
+msgstr "Az eszköz eltávolításra került"
+
+#: ../cli/src/common.c:510
+msgid "NetworkManager went to sleep"
+msgstr "A Hálózatkezelő altatva"
+
+#: ../cli/src/common.c:513
+msgid "The device's active connection disappeared"
+msgstr "Az eszköz aktív kapcsolata eltűnt"
+
+#: ../cli/src/common.c:516
+msgid "Device disconnected by user or client"
+msgstr "Az eszközt a felhasználó vagy a kliens leválasztotta"
+
+#: ../cli/src/common.c:519
+msgid "Carrier/link changed"
+msgstr "A vivőjel/kapcsolat megváltozott"
+
+#: ../cli/src/common.c:522
+msgid "The device's existing connection was assumed"
+msgstr "Az eszköz meglévő kapcsolata felvéve"
+
+#: ../cli/src/common.c:525
+msgid "The supplicant is now available"
+msgstr "A kliens nem érhető el"
+
+#: ../cli/src/common.c:528
+msgid "The modem could not be found"
+msgstr "A modem nem található"
+
+#: ../cli/src/common.c:531
+msgid "The Bluetooth connection failed or timed out"
+msgstr "A Bluetooth kapcsolódás sikertelen, vagy túllépte az időkorlátot"
+
+#: ../cli/src/common.c:534
+msgid "GSM Modem's SIM card not inserted"
+msgstr "A GSM modem SIM kártyája nincs behelyezve"
+
+#: ../cli/src/common.c:537
+msgid "GSM Modem's SIM PIN required"
+msgstr "A GSM modem SIM PIN kódja szükséges"
+
+#: ../cli/src/common.c:540
+msgid "GSM Modem's SIM PUK required"
+msgstr "A GSM modem SIM PUK kódja szükséges"
+
+#: ../cli/src/common.c:543
+msgid "GSM Modem's SIM wrong"
+msgstr "A GSM modem SIM kódja hibás"
+
+#: ../cli/src/common.c:546
+msgid "InfiniBand device does not support connected mode"
+msgstr "Az InfiniBand eszköz nem támogatja a csatlakoztatott módot"
+
+#: ../cli/src/common.c:549
+msgid "A dependency of the connection failed"
+msgstr "A kapcsolat egyik függősége sikertelen volt"
+
+#: ../cli/src/common.c:552
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr "Hiba az RFC 2684 ADSL fölötti Ethernet bridge-dzsel"
+
+#: ../cli/src/common.c:555
+msgid "ModemManager is unavailable"
+msgstr "A Modemkezelő nem érhető el"
+
+#: ../cli/src/common.c:558
+msgid "The Wi-Fi network could not be found"
+msgstr "A Wi-Fi hálózat nem található"
+
+#: ../cli/src/common.c:561
+msgid "A secondary connection of the base connection failed"
+msgstr "Az alapkapcsolat egyik másodlagos kapcsolata sikertelen"
+
+#: ../cli/src/common.c:564 ../cli/src/devices.c:310 ../cli/src/devices.c:328
+#: ../cli/src/devices.c:450 ../cli/src/devices.c:494
+msgid "Unknown"
+msgstr "Ismeretlen"
+
#. 0
#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:56 ../cli/src/connections.c:120
-#: ../cli/src/devices.c:100 ../cli/src/devices.c:121 ../cli/src/devices.c:131
-#: ../cli/src/devices.c:141 ../cli/src/devices.c:155 ../cli/src/devices.c:169
-#: ../cli/src/devices.c:191
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:136
+#: ../cli/src/devices.c:109 ../cli/src/devices.c:134 ../cli/src/devices.c:144
+#: ../cli/src/devices.c:154 ../cli/src/devices.c:164 ../cli/src/devices.c:180
+#: ../cli/src/devices.c:194 ../cli/src/devices.c:216 ../cli/src/devices.c:232
+#: ../cli/src/devices.c:241
msgid "NAME"
msgstr "NÉV"
#. 0
#. 1
-#: ../cli/src/connections.c:57 ../cli/src/connections.c:121
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:137
msgid "UUID"
msgstr "UUID"
@@ -75,28 +363,29 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:58 ../cli/src/connections.c:154
-#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:194
+#: ../cli/src/connections.c:64 ../cli/src/connections.c:170
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:111 ../cli/src/devices.c:219
msgid "TYPE"
msgstr "TÃPUS"
#. 2
-#: ../cli/src/connections.c:59
+#: ../cli/src/connections.c:65
msgid "TIMESTAMP"
msgstr "IDÅBÉLYEG"
#. 3
-#: ../cli/src/connections.c:60
+#: ../cli/src/connections.c:66
msgid "TIMESTAMP-REAL"
msgstr "IDÅBÉLYEG-VALÓDI"
#. 4
-#: ../cli/src/connections.c:61
+#. 13
+#: ../cli/src/connections.c:67 ../cli/src/devices.c:123
msgid "AUTOCONNECT"
msgstr "AUTO-CSATLAKOZÃS"
#. 5
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:68
msgid "READONLY"
msgstr "CSAK OLVASHATÓ"
@@ -105,512 +394,502 @@ msgstr "CSAK OLVASHATÓ"
#. 2
#. 11
#. 5
-#: ../cli/src/connections.c:63 ../cli/src/connections.c:128
-#: ../cli/src/devices.c:68 ../cli/src/devices.c:181 ../cli/src/devices.c:197
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:144
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:206 ../cli/src/devices.c:222
msgid "DBUS-PATH"
msgstr "DBUS-ÚTVONAL"
#. 2
-#: ../cli/src/connections.c:122
+#: ../cli/src/connections.c:138
msgid "DEVICES"
msgstr "ESZKÖZÖK"
#. 3
#. 1
-#. 6
+#. 8
#. 1
-#: ../cli/src/connections.c:123 ../cli/src/devices.c:67
-#: ../cli/src/devices.c:107 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:139 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:118 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "ÃLLAPOT"
#. 4
-#: ../cli/src/connections.c:124
+#: ../cli/src/connections.c:140
msgid "DEFAULT"
msgstr "ALAPÉRTELMEZETT"
#. 5
-#: ../cli/src/connections.c:125
-#| msgid "DEFAULT"
+#: ../cli/src/connections.c:141
msgid "DEFAULT6"
msgstr "ALAPÉRTELMEZETT6"
#. 6
-#: ../cli/src/connections.c:126
+#: ../cli/src/connections.c:142
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJEKTUM"
#. 7
#. 1
-#: ../cli/src/connections.c:127 ../cli/src/connections.c:141
+#: ../cli/src/connections.c:143 ../cli/src/connections.c:157
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:129
+#: ../cli/src/connections.c:145
msgid "CON-PATH"
msgstr "KAPCS-ÚTVONAL"
#. 10
-#: ../cli/src/connections.c:130
+#: ../cli/src/connections.c:146
msgid "ZONE"
msgstr "ZÓNA"
#. 11
-#: ../cli/src/connections.c:131
-#| msgid "DBUS-PATH"
+#: ../cli/src/connections.c:147
msgid "MASTER-PATH"
msgstr "ELSÅDLEGES-ÚTVONAL"
-#: ../cli/src/connections.c:139 ../cli/src/devices.c:77
+#: ../cli/src/connections.c:155 ../cli/src/devices.c:83
msgid "GENERAL"
msgstr "ÃLTALÃNOS"
#. 0
-#: ../cli/src/connections.c:140
-#| msgid "TKIP"
+#: ../cli/src/connections.c:156
msgid "IP"
msgstr "IP"
#. 1
-#: ../cli/src/connections.c:155
-#| msgid "NAME"
+#: ../cli/src/connections.c:171
msgid "USERNAME"
msgstr "FELHASZNÃLÓNÉV"
#. 2
-#: ../cli/src/connections.c:156
+#: ../cli/src/connections.c:172
msgid "GATEWAY"
msgstr "ÃTJÃRÓ"
#. 3
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:173
msgid "BANNER"
msgstr "FEJLÉC"
#. 4
-#: ../cli/src/connections.c:158
-#| msgid "STATE"
+#: ../cli/src/connections.c:174
msgid "VPN-STATE"
msgstr "VPN-ÃLLAPOT"
#. 5
-#: ../cli/src/connections.c:159
+#: ../cli/src/connections.c:175
msgid "CFG"
msgstr "KFG"
-#: ../cli/src/connections.c:180
+#: ../cli/src/connections.c:197
#, c-format
#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down }\n"
+#| "Usage: nmcli connection { COMMAND | help }\n"
+#| " COMMAND := { show | up | down | delete }\n"
#| "\n"
-#| " list [id <id> | uuid <id>]\n"
-#| " status\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
-#| "nowait] [--timeout <timeout>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--"
+#| " show configured [[ id | uuid | path ] <ID>]\n"
+#| "\n"
+#| " show active [[ id | uuid | path | apath ] <ID>]\n"
+#| "\n"
+#| " up [ id | uuid | path ] <ID> [iface <iface>] [ap <BSSID>] [nsp <name>] "
+#| "[--nowait] [--timeout <timeout>]\n"
+#| "\n"
+#| " up [ id | uuid | path ] <ID> [iface <iface>] [ap <BSSID>] [--nowait] [--"
#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
+#| "\n"
+#| " down [ id | uuid | path | apath ] <ID>\n"
+#| "\n"
+#| " delete [ id | uuid | path ] <ID>\n"
+#| "\n"
msgid ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
-"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"Usage: nmcli connection { COMMAND | help }\n"
+" COMMAND := { show | up | down | delete }\n"
+"\n"
+" show configured [[ id | uuid | path ] <ID>]\n"
+"\n"
+" show active [[ id | uuid | path | apath ] <ID>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>] "
+"[--nowait] [--timeout <timeout>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [--nowait] [--"
+"timeout <timeout>]\n"
+"\n"
+" down [ id | uuid | path | apath ] <ID>\n"
+"\n"
+" delete [ id | uuid | path ] <ID>\n"
+"\n"
msgstr ""
-"Használat: nmcli con { PARANCS | help }\n"
-" PARANCS := { list | status | up | down | delete }\n"
-"\n"
-" list [id <azonosító> | uuid <azonosító> | system | user]\n"
-" status [id <azonosító> | uuid <azonosító> | path <útvonal>]\n"
-" up id <azonosító> | uuid <azonosító> [iface <csatoló>] [ap <BSSID>] [nsp "
-"<név>] [--nowait] [--timeout <időkorlát>]\n"
-" up id <azonosító> | uuid <azonosító> [iface <csatoló>] [ap <BSSID>] [--"
+"Használat: nmcli connection { PARANCS | help }\n"
+" PARANCS := { show | up | down | delete }\n"
+"\n"
+" show configured [[ id | uuid | path ] <ID>]\n"
+"\n"
+" show active [[ id | uuid | path | apath ] <ID>]\n"
+"\n"
+" up [ id | uuid | útvonal ] <azonosító> [ifname <csatoló>] [ap <BSSID>] "
+"[nsp <név>] [--nowait] [--timeout <időkorlát>]\n"
+"\n"
+" up [ id | uuid | útvonal ] <azonosító> [ifname <csatoló>] [ap <BSSID>] [--"
"nowait] [--timeout <időkorlát>]\n"
+"\n"
" down id <azonosító> | uuid <azonosító>\n"
+"\n"
" delete id <azonosító> | uuid <azonosító>\n"
+"\n"
-#: ../cli/src/connections.c:234 ../cli/src/connections.c:567
+#: ../cli/src/connections.c:256
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Hiba: „con listâ€: %s"
+msgid "Error: 'list configured': %s"
+msgstr "Hiba: „list configuredâ€: %s"
-#: ../cli/src/connections.c:236 ../cli/src/connections.c:569
+#: ../cli/src/connections.c:258
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Hiba: „con listâ€: %s; engedélyezett mezÅ‘k: %s"
+msgid "Error: 'list configured': %s; allowed fields: %s"
+msgstr "Hiba: „list configuredâ€: %s; engedélyezett mezÅ‘k: %s"
-#: ../cli/src/connections.c:244
+#: ../cli/src/connections.c:266
msgid "Connection details"
msgstr "Kapcsolat részletei"
-#: ../cli/src/connections.c:442
+#: ../cli/src/connections.c:317
msgid "never"
msgstr "soha"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:443 ../cli/src/connections.c:444
-#: ../cli/src/connections.c:681 ../cli/src/connections.c:682
-#: ../cli/src/connections.c:684 ../cli/src/devices.c:586
-#: ../cli/src/devices.c:639 ../cli/src/devices.c:750 ../cli/src/devices.c:751
-#: ../cli/src/devices.c:783 ../cli/src/devices.c:809 ../cli/src/devices.c:810
-#: ../cli/src/devices.c:811 ../cli/src/devices.c:812 ../cli/src/devices.c:813
-#: ../cli/src/settings.c:576 ../cli/src/settings.c:646
-#: ../cli/src/settings.c:766 ../cli/src/settings.c:1048
-#: ../cli/src/settings.c:1049 ../cli/src/settings.c:1051
-#: ../cli/src/settings.c:1053 ../cli/src/settings.c:1054
-#: ../cli/src/settings.c:1182 ../cli/src/settings.c:1183
-#: ../cli/src/settings.c:1184 ../cli/src/settings.c:1185
-#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261
-#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263
-#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265
-#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267
-#: ../cli/src/settings.c:1268 ../cli/src/settings.c:1269
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271
-#: ../cli/src/settings.c:1272 ../cli/src/settings.c:1343
+#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
+#: ../cli/src/connections.c:554 ../cli/src/connections.c:555
+#: ../cli/src/connections.c:557 ../cli/src/devices.c:458
+#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
+#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
+#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
+#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
+#: ../cli/src/network-manager.c:293
msgid "yes"
msgstr "igen"
-#: ../cli/src/connections.c:443 ../cli/src/connections.c:444
-#: ../cli/src/connections.c:681 ../cli/src/connections.c:682
-#: ../cli/src/connections.c:684 ../cli/src/devices.c:586
-#: ../cli/src/devices.c:639 ../cli/src/devices.c:750 ../cli/src/devices.c:751
-#: ../cli/src/devices.c:783 ../cli/src/devices.c:809 ../cli/src/devices.c:810
-#: ../cli/src/devices.c:811 ../cli/src/devices.c:812 ../cli/src/devices.c:813
-#: ../cli/src/settings.c:576 ../cli/src/settings.c:578
-#: ../cli/src/settings.c:646 ../cli/src/settings.c:766
-#: ../cli/src/settings.c:1048 ../cli/src/settings.c:1049
-#: ../cli/src/settings.c:1051 ../cli/src/settings.c:1053
-#: ../cli/src/settings.c:1054 ../cli/src/settings.c:1182
-#: ../cli/src/settings.c:1183 ../cli/src/settings.c:1184
-#: ../cli/src/settings.c:1185 ../cli/src/settings.c:1260
-#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262
-#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264
-#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266
-#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1268
-#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270
-#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1272
-#: ../cli/src/settings.c:1343
+#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
+#: ../cli/src/connections.c:554 ../cli/src/connections.c:555
+#: ../cli/src/connections.c:557 ../cli/src/devices.c:458
+#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
+#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
+#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
+#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
+#: ../cli/src/network-manager.c:295
msgid "no"
msgstr "nem"
-#: ../cli/src/connections.c:518
-msgid "Connection list"
-msgstr "Kapcsolatlista"
-
-#: ../cli/src/connections.c:531 ../cli/src/connections.c:1064
-#: ../cli/src/connections.c:1808 ../cli/src/connections.c:1823
-#: ../cli/src/connections.c:1832 ../cli/src/connections.c:1842
-#: ../cli/src/connections.c:1854 ../cli/src/connections.c:1949
-#: ../cli/src/connections.c:2051 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1200 ../cli/src/devices.c:1314
-#: ../cli/src/devices.c:1322 ../cli/src/devices.c:1535
-#: ../cli/src/devices.c:1542
+#: ../cli/src/connections.c:400
+msgid "List of configured connections"
+msgstr "A beállított kapcsolatok listája"
+
+#: ../cli/src/connections.c:417 ../cli/src/connections.c:953
+#: ../cli/src/connections.c:1438 ../cli/src/connections.c:1459
+#: ../cli/src/connections.c:1468 ../cli/src/connections.c:1478
+#: ../cli/src/connections.c:1490 ../cli/src/connections.c:1627
+#: ../cli/src/connections.c:1727 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1305 ../cli/src/devices.c:1313
+#: ../cli/src/devices.c:1684 ../cli/src/devices.c:1691
+#: ../cli/src/devices.c:1705 ../cli/src/devices.c:1712
+#: ../cli/src/devices.c:1729 ../cli/src/devices.c:1740
+#: ../cli/src/devices.c:1938 ../cli/src/devices.c:2026
+#: ../cli/src/devices.c:2033
#, c-format
msgid "Error: %s argument is missing."
msgstr "Hiba: az argumentum (%s) hiányzik."
-#: ../cli/src/connections.c:544
+#: ../cli/src/connections.c:431
#, c-format
msgid "Error: %s - no such connection."
msgstr "Hiba: nincs ilyen kapcsolat: %s."
-#: ../cli/src/connections.c:550 ../cli/src/connections.c:1867
-#: ../cli/src/connections.c:1966 ../cli/src/connections.c:2058
-#: ../cli/src/devices.c:987 ../cli/src/devices.c:1067
-#: ../cli/src/devices.c:1214 ../cli/src/devices.c:1328
-#: ../cli/src/devices.c:1548
+#: ../cli/src/connections.c:444
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Ismeretlen paraméter: %s\n"
+msgid "Error: 'show configured': %s"
+msgstr "Hiba: „show configuredâ€: %s"
-#: ../cli/src/connections.c:559
+#: ../cli/src/connections.c:446
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Hiba: nincs megadva érvényes paraméter."
+msgid "Error: 'show configured': %s; allowed fields: %s"
+msgstr "Hiba: „show configuredâ€: %s; engedélyezett mezÅ‘k: %s"
-#: ../cli/src/connections.c:574 ../cli/src/connections.c:2151
-#: ../cli/src/devices.c:1756 ../cli/src/network-manager.c:456
+#: ../cli/src/connections.c:451 ../cli/src/connections.c:1828
+#: ../cli/src/devices.c:1917 ../cli/src/devices.c:2244
+#: ../cli/src/network-manager.c:396 ../cli/src/network-manager.c:426
+#: ../cli/src/network-manager.c:436 ../cli/src/network-manager.c:444
+#: ../cli/src/network-manager.c:454 ../cli/src/network-manager.c:476
+#: ../cli/src/network-manager.c:577 ../cli/src/network-manager.c:590
#, c-format
msgid "Error: %s."
msgstr "Hiba: %s."
-#: ../cli/src/connections.c:587
+#: ../cli/src/connections.c:464
msgid "activating"
msgstr "aktiválás"
-#: ../cli/src/connections.c:589
+#: ../cli/src/connections.c:466
msgid "activated"
msgstr "aktiválva"
-#: ../cli/src/connections.c:591 ../cli/src/devices.c:261
-msgid "deactivating"
-msgstr "kikapcsolás"
+#: ../cli/src/connections.c:470
+msgid "deactivated"
+msgstr "deaktiválva"
-#: ../cli/src/connections.c:594 ../cli/src/connections.c:617
-#: ../cli/src/connections.c:1680 ../cli/src/devices.c:265
-#: ../cli/src/devices.c:784 ../cli/src/network-manager.c:111
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291
-#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384
-#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:531
-#: ../cli/src/utils.c:499 ../src/main.c:443 ../src/main.c:462
-msgid "unknown"
-msgstr "ismeretlen"
-
-#: ../cli/src/connections.c:603
+#: ../cli/src/connections.c:482
msgid "VPN connecting (prepare)"
msgstr "VPN kapcsolódás (előkészítés)"
-#: ../cli/src/connections.c:605
+#: ../cli/src/connections.c:484
msgid "VPN connecting (need authentication)"
msgstr "VPN csatlakozás (hitelesítés szükséges)"
-#: ../cli/src/connections.c:607
+#: ../cli/src/connections.c:486
msgid "VPN connecting"
msgstr "VPN csatlakozás"
-#: ../cli/src/connections.c:609
+#: ../cli/src/connections.c:488
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN kapcsolódás (IP-beállítások lekérése)"
-#: ../cli/src/connections.c:611
+#: ../cli/src/connections.c:490
msgid "VPN connected"
msgstr "VPN csatlakozott"
-#: ../cli/src/connections.c:613
+#: ../cli/src/connections.c:492
msgid "VPN connection failed"
msgstr "VPN csatlakozás sikertelen"
-#: ../cli/src/connections.c:615
+#: ../cli/src/connections.c:494
msgid "VPN disconnected"
msgstr "VPN leválasztva"
-#: ../cli/src/connections.c:868 ../cli/src/connections.c:1092
+#: ../cli/src/connections.c:550 ../cli/src/connections.c:560
+msgid "N/A"
+msgstr "---"
+
+#: ../cli/src/connections.c:759
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Hiba: „con statusâ€: %s"
+msgid "Error: 'list active': %s"
+msgstr "Hiba: „list activeâ€: %s"
-#: ../cli/src/connections.c:870 ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:761
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Hiba: „con statusâ€: %s; engedélyezett mezÅ‘k: %s"
+msgid "Error: 'list active': %s; allowed fields: %s"
+msgstr "Hiba: „list activeâ€: %s; engedélyezett mezÅ‘k: %s"
-#: ../cli/src/connections.c:878
-#| msgid "Active connections"
+#: ../cli/src/connections.c:769
msgid "Active connection details"
msgstr "Aktív kapcsolat részletei"
-#: ../cli/src/connections.c:1014 ../cli/src/connections.c:1882
-#: ../cli/src/connections.c:1981 ../cli/src/connections.c:2072
-#: ../cli/src/devices.c:1014 ../cli/src/devices.c:1076
-#: ../cli/src/devices.c:1229 ../cli/src/devices.c:1358
-#: ../cli/src/devices.c:1577
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Hiba: nem lehet megállapítani, hogy a Hálózatkezelő fut-e: %s."
-
-#: ../cli/src/connections.c:1018 ../cli/src/connections.c:1886
-#: ../cli/src/connections.c:1985 ../cli/src/connections.c:2076
-#: ../cli/src/devices.c:1018 ../cli/src/devices.c:1080
-#: ../cli/src/devices.c:1233 ../cli/src/devices.c:1362
-#: ../cli/src/devices.c:1581
+#: ../cli/src/connections.c:907 ../cli/src/connections.c:1514
+#: ../cli/src/connections.c:1610 ../cli/src/connections.c:1696
+#: ../cli/src/devices.c:1005 ../cli/src/devices.c:1049
+#: ../cli/src/devices.c:1222 ../cli/src/devices.c:1351
+#: ../cli/src/devices.c:1776 ../cli/src/devices.c:2070
+#: ../cli/src/network-manager.c:339
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Hiba: a Hálózatkezelő nem fut."
-#: ../cli/src/connections.c:1050
-msgid "Active connections"
-msgstr "Aktív kapcsolatok"
+#: ../cli/src/connections.c:936
+msgid "List of active connections"
+msgstr "Aktív kapcsolatok listája"
-#: ../cli/src/connections.c:1075
+#: ../cli/src/connections.c:967 ../cli/src/connections.c:1637
#, c-format
-#| msgid "Error: %s - no such connection."
msgid "Error: '%s' is not an active connection."
msgstr "Hiba: a(z) „%s†nem egy aktív kapcsolat."
-#: ../cli/src/connections.c:1080
+#: ../cli/src/connections.c:980
#, c-format
-#| msgid "Unknown parameter: %s\n"
-msgid "Error: unknown parameter: %s"
-msgstr "Hiba: ismeretlen paraméter: %s"
+msgid "Error: 'show active': %s"
+msgstr "Hiba: „show activeâ€: %s"
-#: ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:982
+#, c-format
+msgid "Error: 'show active': %s; allowed fields: %s"
+msgstr "Hiba: „show activeâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/connections.c:1075
#, c-format
msgid "no active connection on device '%s'"
msgstr "nincs aktív kapcsolat a(z) „%s†eszközön"
-#: ../cli/src/connections.c:1572
-#, c-format
+#: ../cli/src/connections.c:1083
msgid "no active connection or device"
msgstr "nincs aktív kapcsolat vagy eszköz"
-#: ../cli/src/connections.c:1643
+#: ../cli/src/connections.c:1154
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "a(z) „%s†eszköz nem kompatibilis a(z) „%s†kapcsolattal"
-#: ../cli/src/connections.c:1645
+#: ../cli/src/connections.c:1157
#, c-format
msgid "no device found for connection '%s'"
msgstr "nem található eszköz a(z) „%s†kapcsolathoz"
-#: ../cli/src/connections.c:1656
+#: ../cli/src/connections.c:1169
msgid "unknown reason"
msgstr "ismeretlen ok"
-#: ../cli/src/connections.c:1658
+#: ../cli/src/connections.c:1171
msgid "none"
msgstr "nincs"
-#: ../cli/src/connections.c:1660
+#: ../cli/src/connections.c:1173
msgid "the user was disconnected"
msgstr "felhasználó leválasztva"
-#: ../cli/src/connections.c:1662
+#: ../cli/src/connections.c:1175
msgid "the base network connection was interrupted"
msgstr "az alap hálózati kapcsolat megszakadt"
-#: ../cli/src/connections.c:1664
+#: ../cli/src/connections.c:1177
msgid "the VPN service stopped unexpectedly"
msgstr "a VPN szolgáltatás váratlanul leállt"
-#: ../cli/src/connections.c:1666
+#: ../cli/src/connections.c:1179
msgid "the VPN service returned invalid configuration"
msgstr "a VPN szolgáltatás érvénytelen beállításokat adott"
-#: ../cli/src/connections.c:1668
+#: ../cli/src/connections.c:1181
msgid "the connection attempt timed out"
msgstr "a csatlakozási kísérlet túllépte az időkorlátot"
-#: ../cli/src/connections.c:1670
+#: ../cli/src/connections.c:1183
msgid "the VPN service did not start in time"
msgstr "a VPN szolgáltatás nem indult el időben"
-#: ../cli/src/connections.c:1672
+#: ../cli/src/connections.c:1185
msgid "the VPN service failed to start"
msgstr "a VPN szolgáltatás nem indult el"
-#: ../cli/src/connections.c:1674
+#: ../cli/src/connections.c:1187
msgid "no valid VPN secrets"
msgstr "nincsenek érvényes VPN titkok"
-#: ../cli/src/connections.c:1676
+#: ../cli/src/connections.c:1189
msgid "invalid VPN secrets"
msgstr "érvénytelen VPN titkok"
-#: ../cli/src/connections.c:1678
+#: ../cli/src/connections.c:1191
msgid "the connection was removed"
msgstr "a kapcsolat eltávolításra került"
-#: ../cli/src/connections.c:1692
+#: ../cli/src/connections.c:1208 ../cli/src/connections.c:1328
#, c-format
-msgid "state: %s\n"
-msgstr "állapot: %s\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "A kapcsolat sikeresen aktiválva (D-Bus aktív útvonal: %s)\n"
-#: ../cli/src/connections.c:1695 ../cli/src/connections.c:1721
-#, c-format
-msgid "Connection activated\n"
-msgstr "Kapcsolat aktiválva\n"
-
-#: ../cli/src/connections.c:1698
+#: ../cli/src/connections.c:1213
#, c-format
msgid "Error: Connection activation failed."
msgstr "Hiba: a kapcsolat aktiválása meghiúsult."
-#: ../cli/src/connections.c:1717
+#: ../cli/src/connections.c:1238
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "állapot: %s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "A VPN kapcsolat sikeresen aktiválva (D-Bus aktív útvonal: %s)\n"
-#: ../cli/src/connections.c:1727
+#: ../cli/src/connections.c:1246
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Hiba: a kapcsolat aktiválása meghiúsult: %s."
-#: ../cli/src/connections.c:1744 ../cli/src/devices.c:1136
+#: ../cli/src/connections.c:1264 ../cli/src/devices.c:1110
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Hiba: az időkorlát (%d mp) lejárt."
-#: ../cli/src/connections.c:1757
+#: ../cli/src/connections.c:1319
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Hiba: a kapcsolat aktiválása meghiúsult: %s"
-#: ../cli/src/connections.c:1763
+#: ../cli/src/connections.c:1385
#, c-format
-msgid "Active connection state: %s\n"
-msgstr "Aktív kapcsolat állapota: %s\n"
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr "Hiba: „%s†eszköz alárendeltekre vár az aktiválás folytatása előtt."
-#: ../cli/src/connections.c:1764
+#: ../cli/src/connections.c:1422 ../cli/src/connections.c:1595
+#: ../cli/src/connections.c:1703
+msgid "Connection (name, UUID, or path): "
+msgstr "Kapcsolat (név, UUID vagy útvonal): "
+
+#: ../cli/src/connections.c:1427 ../cli/src/connections.c:1600
+#: ../cli/src/connections.c:1708
#, c-format
-msgid "Active connection path: %s\n"
-msgstr "Aktív kapcsolat útvonala: %s\n"
+msgid "Error: No connection specified."
+msgstr "Hiba: Nincs megadva kapcsolat."
-#: ../cli/src/connections.c:1816 ../cli/src/connections.c:1957
-#: ../cli/src/connections.c:2085
+#: ../cli/src/connections.c:1450
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Hiba: ismeretlen kapcsolat: %s."
-#: ../cli/src/connections.c:1862 ../cli/src/devices.c:1208
+#: ../cli/src/connections.c:1498 ../cli/src/devices.c:1205
+#: ../cli/src/devices.c:1748
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "Hiba: a(z) „%s†időkorlát érvénytelen."
-#: ../cli/src/connections.c:1875 ../cli/src/connections.c:1974
-#: ../cli/src/connections.c:2065
+#: ../cli/src/connections.c:1503 ../cli/src/devices.c:976
+#: ../cli/src/devices.c:1319 ../cli/src/devices.c:1753
+#: ../cli/src/devices.c:2039
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Hiba: meg kell adni az id vagy uuid egyikét."
+msgid "Unknown parameter: %s\n"
+msgstr "Ismeretlen paraméter: %s\n"
-#: ../cli/src/connections.c:1903
+#: ../cli/src/connections.c:1532
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "Hiba: nem található megfelelő eszköz: %s."
-#: ../cli/src/connections.c:1905
+#: ../cli/src/connections.c:1534
#, c-format
msgid "Error: No suitable device found."
msgstr "Hiba: nem található megfelelő eszköz."
-#: ../cli/src/connections.c:2010
-#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Figyelmeztetés: a kapcsolat nem aktív\n"
-
-#: ../cli/src/connections.c:2024
+#: ../cli/src/connections.c:1666
#, c-format
-#| msgid "Error: Connection activation failed: %s"
msgid "Error: Connection deletion failed: %s"
msgstr "Hiba: a kapcsolat törlése meghiúsult: %s"
-#: ../cli/src/connections.c:2142
+#: ../cli/src/connections.c:1736
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Hiba: ismeretlen kapcsolat: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:1770
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Hiba: a(z) „%s†„con†parancs nem érvényes."
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Hiba: az ismeretlen kapcsolatok nem törölhetők: %s."
+
+#: ../cli/src/connections.c:1799
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"Hiba: a „configured†vagy „active†parancs szükséges a „connection showâ€-hoz."
-#: ../cli/src/connections.c:2207
+#: ../cli/src/connections.c:1819
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Hiba: nem lehet a D-Bushoz kapcsolódni."
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Hiba: a(z) „%s†nem érvényes „connection†parancs."
-#: ../cli/src/connections.c:2215
+#: ../cli/src/connections.c:1884
#, c-format
msgid "Error: Could not get system settings."
msgstr "Hiba: a rendszer beállításai nem kérhetők le."
-#: ../cli/src/connections.c:2225
+#: ../cli/src/connections.c:1894
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "Hiba: nem kérhetők le a kapcsolatok: a beállító szolgáltatás nem fut."
@@ -618,750 +897,627 @@ msgstr "Hiba: nem kérhetők le a kapcsolatok: a beállító szolgáltatás nem
#. 0
#. 9
#. 3
-#: ../cli/src/devices.c:65 ../cli/src/devices.c:101 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:195
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:220
msgid "DEVICE"
msgstr "ESZKÖZ"
#. 0
-#: ../cli/src/devices.c:78
+#: ../cli/src/devices.c:84
msgid "CAPABILITIES"
msgstr "KÉPESSÉGEK"
#. 1
-#: ../cli/src/devices.c:79
+#: ../cli/src/devices.c:85
msgid "WIFI-PROPERTIES"
msgstr "WIFI-KÉPESSÉGEK"
#. 2
-#: ../cli/src/devices.c:80
+#. 5
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:81
+#: ../cli/src/devices.c:87
msgid "WIRED-PROPERTIES"
msgstr "VEZETÉKES-TULAJDONSÃGOK"
#. 4
-#: ../cli/src/devices.c:82
+#: ../cli/src/devices.c:88
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-TULAJDONSÃGOK"
#. 5
#. 0
-#: ../cli/src/devices.c:83 ../cli/src/devices.c:192
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:217
msgid "NSP"
msgstr "NSP"
#. 6
-#: ../cli/src/devices.c:84
-#| msgid "IP4-DNS"
+#: ../cli/src/devices.c:90
msgid "IP4"
msgstr "IP4"
#. 7
-#: ../cli/src/devices.c:85
+#: ../cli/src/devices.c:91
msgid "DHCP4"
msgstr "DHCP4"
#. 8
-#: ../cli/src/devices.c:86
-#| msgid "IP6-DNS"
+#: ../cli/src/devices.c:92
msgid "IP6"
msgstr "IP6"
#. 9
-#: ../cli/src/devices.c:87
+#: ../cli/src/devices.c:93
msgid "DHCP6"
msgstr "DHCP6"
+#. 10
+#: ../cli/src/devices.c:94
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../cli/src/devices.c:95
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:96
+msgid "CONNECTIONS"
+msgstr "KAPCSOLATOK"
+
#. 2
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:112
msgid "VENDOR"
msgstr "GYÃRTÓ"
#. 3
-#: ../cli/src/devices.c:104
+#: ../cli/src/devices.c:113
msgid "PRODUCT"
msgstr "TERMÉK"
#. 4
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:114
msgid "DRIVER"
msgstr "ILLESZTÅPROGRAM"
#. 5
-#: ../cli/src/devices.c:106
+#: ../cli/src/devices.c:115
+msgid "DRIVER-VERSION"
+msgstr "ILLESZTÅPROGRAM-VERZIÓ"
+
+#. 6
+#: ../cli/src/devices.c:116
+msgid "FIRMWARE-VERSION"
+msgstr "FIRMWARE-VERZIÓ"
+
+#. 7
+#: ../cli/src/devices.c:117
msgid "HWADDR"
msgstr "HWCÃM"
-#. 7
-#: ../cli/src/devices.c:108
-#| msgid "READONLY"
+#. 9
+#: ../cli/src/devices.c:119
msgid "REASON"
msgstr "OK"
-#. 8
-#: ../cli/src/devices.c:109
+#. 10
+#: ../cli/src/devices.c:120
msgid "UDI"
msgstr "UDI"
-#. 9
-#: ../cli/src/devices.c:110
+#. 11
+#: ../cli/src/devices.c:121
msgid "IP-IFACE"
msgstr "IP-CSAT"
-#. 10
-#: ../cli/src/devices.c:111
+#. 12
+#: ../cli/src/devices.c:122
msgid "NM-MANAGED"
msgstr "NM-KEZELT"
-#. 11
-#: ../cli/src/devices.c:112
+#. 14
+#: ../cli/src/devices.c:124
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-HIÃNYZIK"
-#. 12
-#: ../cli/src/devices.c:113
-#| msgid "AUTOCONNECT"
+#. 15
+#: ../cli/src/devices.c:125
msgid "CONNECTION"
msgstr "CSATLAKOZÃS"
#. 0
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:135
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "ELÉRHETÅ-KAPCSOLAT-ÚTVONALAK"
+
+#. 1
+#: ../cli/src/devices.c:136
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "ELÉRHETÅ-KAPCSOLATOK"
+
+#. 0
+#: ../cli/src/devices.c:145
msgid "CARRIER-DETECT"
msgstr "VIVÅJEL-FELISMERÉS"
#. 1
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:146
msgid "SPEED"
msgstr "SEBESSÉG"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:155
msgid "CARRIER"
msgstr "VIVÅJEL"
#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:165
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:166
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:144
+#: ../cli/src/devices.c:167
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:145
+#: ../cli/src/devices.c:168
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:146
+#: ../cli/src/devices.c:169
msgid "CCMP"
msgstr "CCMP"
+#. 6
+#: ../cli/src/devices.c:171
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:181
msgid "CTR-FREQ"
msgstr "CTR-FREK"
#. 1
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:182
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:158
+#: ../cli/src/devices.c:183
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:159
+#: ../cli/src/devices.c:184
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:160
+#: ../cli/src/devices.c:185
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:195
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:196
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:172
+#: ../cli/src/devices.c:197
msgid "MODE"
msgstr "MÓD"
#. 3
-#: ../cli/src/devices.c:173
+#: ../cli/src/devices.c:198
msgid "FREQ"
msgstr "FREK"
#. 4
-#: ../cli/src/devices.c:174
+#: ../cli/src/devices.c:199
msgid "RATE"
msgstr "SEBESSÉG"
#. 5
#. 1
-#: ../cli/src/devices.c:175 ../cli/src/devices.c:193
+#: ../cli/src/devices.c:200 ../cli/src/devices.c:218
msgid "SIGNAL"
msgstr "SZIGNÃL"
#. 6
-#: ../cli/src/devices.c:176
+#: ../cli/src/devices.c:201
msgid "SECURITY"
msgstr "BIZTONSÃG"
#. 7
-#: ../cli/src/devices.c:177
+#: ../cli/src/devices.c:202
msgid "WPA-FLAGS"
msgstr "WPA-JELZÅK"
#. 8
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:203
msgid "RSN-FLAGS"
msgstr "RSN-JELZÅK"
#. 10
#. 4
-#: ../cli/src/devices.c:180 ../cli/src/devices.c:196
+#: ../cli/src/devices.c:205 ../cli/src/devices.c:221
msgid "ACTIVE"
msgstr "AKTÃV"
-#: ../cli/src/devices.c:213
+#. 0
+#: ../cli/src/devices.c:233
+msgid "SLAVES"
+msgstr "ALÃRENDELTEK"
+
+#. 0
+#: ../cli/src/devices.c:242
+msgid "ID"
+msgstr "AZONOSÃTÓ"
+
+#: ../cli/src/devices.c:258
#, c-format
#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
+#| "Usage: nmcli device { COMMAND | help }\n"
#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
+#| " COMMAND := { status | show | disconnect | wifi | wimax }\n"
#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
+#| " COMMAND := { status | show | disconnect | wifi }\n"
#| "\n"
#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+#| "\n"
+#| " show [<iface>]\n"
+#| "\n"
+#| " disconnect <iface> [--nowait] [--timeout <timeout>]\n"
+#| "\n"
+#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+#| "\n"
+#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
+#| "[iface <iface>] [bssid <BSSID>] [name <name>]\n"
+#| "\n"
+#| " [--private] [--nowait] [--timeout <timeout>]\n"
+#| "\n"
+#| " wifi scan [[iface] <iface>]\n"
+#| "\n"
#| " wimax [list [iface <iface>] [nsp <name>]]\n"
#| "\n"
msgid ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+" COMMAND := { status | show | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+" COMMAND := { status | show | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" disconnect <ifname> [--nowait] [--timeout <timeout>]\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
+"[ifname <ifname>] [bssid <BSSID>] [name <name>]\n"
+"\n"
+" [--private] [--nowait] [--timeout <timeout>]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"Használat: nmcli dev { PARANCS | help }\n"
"\n"
-" PARANCS := { status | list | disconnect | wifi | wimax }\n"
+" PARANCS := { status | show | disconnect | wifi | wimax }\n"
"\n"
-" PARANCS := { status | list | disconnect | wifi }\n"
+" PARANCS := { status | show | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <csatoló>]\n"
-" disconnect iface <csatoló> [--nowait] [--timeout <időkorlát>]\n"
-" wifi [list [iface <csatoló>] [bssid <hwcím>]]\n"
-" wimax [list [iface <csatoló>] [nsp <név>]]\n"
"\n"
-
-#: ../cli/src/devices.c:241
-msgid "unmanaged"
-msgstr "kezeletlen"
-
-#: ../cli/src/devices.c:243
-msgid "unavailable"
-msgstr "elérhetetlen"
-
-#: ../cli/src/devices.c:245 ../cli/src/network-manager.c:108
-msgid "disconnected"
-msgstr "leválasztva"
-
-#: ../cli/src/devices.c:247
-msgid "connecting (prepare)"
-msgstr "kapcsolódás (előkészítés)"
-
-#: ../cli/src/devices.c:249
-msgid "connecting (configuring)"
-msgstr "kapcsolódás (konfigurálás)"
-
-#: ../cli/src/devices.c:251
-msgid "connecting (need authentication)"
-msgstr "kapcsolódás (hitelesítés szükséges)"
-
-#: ../cli/src/devices.c:253
-msgid "connecting (getting IP configuration)"
-msgstr "kapcsolódás (IP-beállítások lekérése)"
-
-#: ../cli/src/devices.c:255
-msgid "connecting (checking IP connectivity)"
-msgstr "kapcsolódás (IP-összekapcsolhatóság ellenőrzése)"
-
-#: ../cli/src/devices.c:257
-msgid "connecting (starting secondary connections)"
-msgstr "kapcsolódás (másodlagos kapcsolatok indítása)"
-
-#: ../cli/src/devices.c:259 ../cli/src/network-manager.c:104
-msgid "connected"
-msgstr "kapcsolódva"
-
-#: ../cli/src/devices.c:263
-msgid "connection failed"
-msgstr "kapcsolódás sikertelen"
-
-#: ../cli/src/devices.c:274
-msgid "No reason given"
-msgstr "Nincs megadva ok"
-
-#: ../cli/src/devices.c:277
-#| msgid "Unknown"
-msgid "Unknown error"
-msgstr "Ismeretlen hiba"
-
-#: ../cli/src/devices.c:280
-msgid "Device is now managed"
-msgstr "Az eszköz mostantól kezelt"
-
-#: ../cli/src/devices.c:283
-msgid "Device is now unmanaged"
-msgstr "Az eszköz mostantól nem kezelt"
-
-#: ../cli/src/devices.c:286
-#| msgid "the VPN service returned invalid configuration"
-msgid "The device could not be readied for configuration"
-msgstr "Az eszköz nem készíthető fel a beállításra"
-
-#: ../cli/src/devices.c:289
-msgid ""
-"IP configuration could not be reserved (no available address, timeout, etc)"
-msgstr ""
-"Az IP-beállítások nem foglalhatók le (nem érhető el cím, időkorlát stb.)"
-
-#: ../cli/src/devices.c:292
-msgid "The IP configuration is no longer valid"
-msgstr "Az IP-beállítások már nem érvényesek"
-
-#: ../cli/src/devices.c:295
-msgid "Secrets were required, but not provided"
-msgstr "Titkos információkra volt szükség, de nem lettek megadva"
-
-#: ../cli/src/devices.c:298
-msgid "802.1X supplicant disconnected"
-msgstr "A 802.1X-kliens bontotta a kapcsolatot"
-
-#: ../cli/src/devices.c:301
-msgid "802.1X supplicant configuration failed"
-msgstr "A 802.1X-kliens beállítása meghiúsult"
-
-#: ../cli/src/devices.c:304
-msgid "802.1X supplicant failed"
-msgstr "A 802.1X-kliens sikertelen"
-
-#: ../cli/src/devices.c:307
-msgid "802.1X supplicant took too long to authenticate"
-msgstr "A 802.1X-kliens hitelesítése túl sokáig tartott"
-
-#: ../cli/src/devices.c:310
-#| msgid "the VPN service failed to start"
-msgid "PPP service failed to start"
-msgstr "A PPP szolgáltatás nem indult el"
-
-#: ../cli/src/devices.c:313
-#| msgid "VPN disconnected"
-msgid "PPP service disconnected"
-msgstr "PPP szolgáltatás leválasztva"
-
-#: ../cli/src/devices.c:316
-msgid "PPP failed"
-msgstr "A PPP sikertelen"
-
-#: ../cli/src/devices.c:319
-#| msgid "the VPN service failed to start"
-msgid "DHCP client failed to start"
-msgstr "A DHCP kliens nem indult el"
-
-#: ../cli/src/devices.c:322
-msgid "DHCP client error"
-msgstr "DHCP-klienshiba"
-
-#: ../cli/src/devices.c:325
-#| msgid "VPN connection failed"
-msgid "DHCP client failed"
-msgstr "A DHCP-kliens sikertelen"
-
-#: ../cli/src/devices.c:328
-#| msgid "the VPN service failed to start"
-msgid "Shared connection service failed to start"
-msgstr "A megosztott kapcsolat szolgáltatás nem indult el"
-
-#: ../cli/src/devices.c:331
-#| msgid "connection failed"
-msgid "Shared connection service failed"
-msgstr "A megosztott kapcsolat szolgáltatás sikertelen"
-
-#: ../cli/src/devices.c:334
-#| msgid "the VPN service failed to start"
-msgid "AutoIP service failed to start"
-msgstr "Az AutoIP szolgáltatás nem indult el"
-
-#: ../cli/src/devices.c:337
-msgid "AutoIP service error"
-msgstr "AutoIP szolgáltatáshiba"
-
-#: ../cli/src/devices.c:340
-#| msgid "the VPN service failed to start"
-msgid "AutoIP service failed"
-msgstr "Az AutoIP szolgáltatás sikertelen"
-
-#: ../cli/src/devices.c:343
-msgid "The line is busy"
-msgstr "A vonal foglalt"
-
-#: ../cli/src/devices.c:346
-msgid "No dial tone"
-msgstr "Nincs tárcsahang"
-
-#: ../cli/src/devices.c:349
-msgid "No carrier could be established"
-msgstr "Nem hozható létre vivőjel"
-
-#: ../cli/src/devices.c:352
-msgid "The dialing request timed out"
-msgstr "A tárcsázási kérés túllépte az időkorlátot"
-
-#: ../cli/src/devices.c:355
-msgid "The dialing attempt failed"
-msgstr "A tárcsázási kísérlet meghiúsult"
-
-#: ../cli/src/devices.c:358
-#| msgid "Error: Connection activation failed."
-msgid "Modem initialization failed"
-msgstr "A modem előkészítése sikertelen"
+" show [<csatolónév>]\n"
+"\n"
+" disconnect <csatolónév> [--nowait] [--timeout <időkorlát>]\n"
+"\n"
+" wifi [list [ifname <csatolónév>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <jelszó>] [wep-key-type key|phrase] "
+"[ifname <csatolónév>] [bssid <BSSID>] [name <név>]\n"
+"\n"
+" [--private] [--nowait] [--timeout <időkorlát>]\n"
+"\n"
+" wifi scan [[ifname] <csatolónév>]\n"
+"\n"
+" wimax [list [ifname <csatolónév>] [nsp <név>]]\n"
+"\n"
#: ../cli/src/devices.c:361
-#| msgid "Failed to decrypt the private key."
-msgid "Failed to select the specified APN"
-msgstr "A megadott APN kiválasztása meghiúsult"
-
-#: ../cli/src/devices.c:364
-msgid "Not searching for networks"
-msgstr "Nem keres hálózatokat"
-
-#: ../cli/src/devices.c:367
-#| msgid "Networking enabled"
-msgid "Network registration denied"
-msgstr "Hálózatregisztráció megtagadva"
-
-#: ../cli/src/devices.c:370
-msgid "Network registration timed out"
-msgstr "A hálózatregisztráció túllépte az időkorlátot"
-
-#: ../cli/src/devices.c:373
-msgid "Failed to register with the requested network"
-msgstr "A kért hálózaton való regisztráció sikertelen"
-
-#: ../cli/src/devices.c:376
-#| msgid "VPN connection failed"
-msgid "PIN check failed"
-msgstr "A PIN ellenőrzése sikertelen"
-
-#: ../cli/src/devices.c:379
-msgid "Necessary firmware for the device may be missing"
-msgstr "Az eszközhöz szükséges firmware hiányozhat"
-
-#: ../cli/src/devices.c:382
-#| msgid "the connection was removed"
-msgid "The device was removed"
-msgstr "Az eszköz eltávolításra került"
-
-#: ../cli/src/devices.c:385
-#| msgid "NetworkManager status"
-msgid "NetworkManager went to sleep"
-msgstr "A Hálózatkezelő altatva"
-
-#: ../cli/src/devices.c:388
-#| msgid "no active connection or device"
-msgid "The device's active connection disappeared"
-msgstr "Az eszköz aktív kapcsolata eltűnt"
-
-#: ../cli/src/devices.c:391
-msgid "Device disconnected by user or client"
-msgstr "Az eszközt a felhasználó vagy a kliens leválasztotta"
-
-#: ../cli/src/devices.c:394
-msgid "Carrier/link changed"
-msgstr "A vivőjel/kapcsolat megváltozott"
-
-#: ../cli/src/devices.c:397
-#| msgid "the connection was removed"
-msgid "The device's existing connection was assumed"
-msgstr "Az eszköz meglévő kapcsolata felvéve"
-
-#: ../cli/src/devices.c:400
-msgid "The supplicant is now available"
-msgstr "A kliens nem érhető el"
-
-#: ../cli/src/devices.c:403
-#| msgid "'dhcpcd' could be found."
-msgid "The modem could not be found"
-msgstr "A modem nem található"
-
-#: ../cli/src/devices.c:406
-#| msgid "the connection attempt timed out"
-msgid "The Bluetooth connection failed or timed out"
-msgstr "A Bluetooth kapcsolódás sikertelen, vagy túllépte az időkorlátot"
-
-#: ../cli/src/devices.c:409
-msgid "GSM Modem's SIM card not inserted"
-msgstr "A GSM modem SIM kártyája nincs behelyezve"
-
-#: ../cli/src/devices.c:412
-msgid "GSM Modem's SIM PIN required"
-msgstr "A GSM modem SIM PIN kódja szükséges"
-
-#: ../cli/src/devices.c:415
-msgid "GSM Modem's SIM PUK required"
-msgstr "A GSM modem SIM PUK kódja szükséges"
-
-#: ../cli/src/devices.c:418
-msgid "GSM Modem's SIM wrong"
-msgstr "A GSM modem SIM kódja hibás"
-
-#: ../cli/src/devices.c:421
-msgid "InfiniBand device does not support connected mode"
-msgstr "Az InfiniBand eszköz nem támogatja a csatlakoztatott módot"
-
-#: ../cli/src/devices.c:423 ../cli/src/devices.c:446 ../cli/src/devices.c:458
-#: ../cli/src/devices.c:578 ../cli/src/devices.c:622
-msgid "Unknown"
-msgstr "Ismeretlen"
-
-#: ../cli/src/devices.c:491
msgid "(none)"
msgstr "(semmi)"
-#: ../cli/src/devices.c:547
+#: ../cli/src/devices.c:417
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:548
+#: ../cli/src/devices.c:418
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:557
+#: ../cli/src/devices.c:427
msgid "Encrypted: "
msgstr "Titkosított: "
-#: ../cli/src/devices.c:562
+#: ../cli/src/devices.c:432
msgid "WEP "
msgstr "WEP "
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:434
msgid "WPA "
msgstr "WPA "
-#: ../cli/src/devices.c:566
+#: ../cli/src/devices.c:436
msgid "WPA2 "
msgstr "WPA2 "
-#: ../cli/src/devices.c:569
+#: ../cli/src/devices.c:439
msgid "Enterprise "
msgstr "Enterprise "
-#: ../cli/src/devices.c:578
+#: ../cli/src/devices.c:448
msgid "Ad-Hoc"
msgstr "Eseti"
-#: ../cli/src/devices.c:578
+#: ../cli/src/devices.c:449
msgid "Infrastructure"
msgstr "Infrastruktúra"
-#: ../cli/src/devices.c:613
+#: ../cli/src/devices.c:485
msgid "Home"
msgstr "Otthoni"
-#: ../cli/src/devices.c:616
+#: ../cli/src/devices.c:488
msgid "Partner"
msgstr "Partner"
-#: ../cli/src/devices.c:619
+#: ../cli/src/devices.c:491
msgid "Roaming"
msgstr "Barangoló"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:563
#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Hiba: „dev listâ€: %s"
+msgid "Error: 'device show': %s"
+msgstr "Hiba: „device showâ€: %s"
-#: ../cli/src/devices.c:693
+#: ../cli/src/devices.c:565
#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Hiba: „dev listâ€: %s; engedélyezett mezÅ‘k: %s"
+msgid "Error: 'device show': %s; allowed fields: %s"
+msgstr "Hiba: „device showâ€: %s; engedélyezett mezÅ‘k: %s"
-#: ../cli/src/devices.c:702
+#: ../cli/src/devices.c:574
msgid "Device details"
msgstr "Eszköz részletei"
-#: ../cli/src/devices.c:744 ../cli/src/devices.c:745 ../cli/src/devices.c:1152
-#: ../cli/src/utils.c:445
+#: ../cli/src/devices.c:621 ../cli/src/devices.c:624 ../cli/src/devices.c:1136
msgid "(unknown)"
msgstr "(ismeretlen)"
-#: ../cli/src/devices.c:753
-#| msgid "connected"
+#: ../cli/src/devices.c:633
msgid "not connected"
msgstr "nincs kapcsolat"
-#: ../cli/src/devices.c:780
+#: ../cli/src/devices.c:660
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:853
+#: ../cli/src/devices.c:736
msgid "on"
msgstr "be"
-#: ../cli/src/devices.c:853
+#: ../cli/src/devices.c:736
msgid "off"
msgstr "ki"
-#: ../cli/src/devices.c:1004
+#: ../cli/src/devices.c:993
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Hiba: „dev statusâ€: %s"
+msgid "Error: 'device status': %s"
+msgstr "Hiba: „device statusâ€: %s"
-#: ../cli/src/devices.c:1006
+#: ../cli/src/devices.c:995
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Hiba: „dev statusâ€: %s; engedélyezett mezÅ‘k: %s"
+msgid "Error: 'device status': %s; allowed fields: %s"
+msgstr "Hiba: „device statusâ€: %s; engedélyezett mezÅ‘k: %s"
-#: ../cli/src/devices.c:1029
+#: ../cli/src/devices.c:1015
msgid "Status of devices"
msgstr "Eszközök állapota"
-#: ../cli/src/devices.c:1060
+#: ../cli/src/devices.c:1041
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Hiba: „%s†argumentum hiányzik."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Hiba: érvénytelen extra argumentum: „%sâ€."
-#: ../cli/src/devices.c:1101 ../cli/src/devices.c:1253
-#: ../cli/src/devices.c:1390 ../cli/src/devices.c:1609
+#: ../cli/src/devices.c:1069 ../cli/src/devices.c:1240
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:2096
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Hiba: a(z) „%s†eszköz nem található."
-#: ../cli/src/devices.c:1124
+#: ../cli/src/devices.c:1098
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Siker: a(z) „%s†eszköz sikeresen leválasztva."
-#: ../cli/src/devices.c:1149
+#: ../cli/src/devices.c:1133
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Hiba: a(z) „%s†(%s) eszköz leválasztása meghiúsult: %s"
-#: ../cli/src/devices.c:1157
+#: ../cli/src/devices.c:1146
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "Eszköz állapota: %d (%s)\n"
+msgid "Device '%s' has been disconnected.\n"
+msgstr "A(z) „%s†eszköz leválasztva.\n"
-#: ../cli/src/devices.c:1222
+#: ../cli/src/devices.c:1177 ../cli/src/devices.c:1186
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Hiba: meg kell adni a csatolót."
+msgid "Error: No interface specified."
+msgstr "Hiba: Nincs megadva csatoló."
-#: ../cli/src/devices.c:1348
+#: ../cli/src/devices.c:1211
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Hiba: „dev wifiâ€: %s"
+msgid "Error: unknown argument '%s'."
+msgstr "Hiba: ismeretlen argumentum: „%sâ€."
-#: ../cli/src/devices.c:1350
+#: ../cli/src/devices.c:1339
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Hiba: „dev wifiâ€: %s; engedélyezett mezÅ‘k: %s"
+msgid "Error: 'device wifi': %s"
+msgstr "Hiba: „device wifiâ€: %s"
-#: ../cli/src/devices.c:1373
-msgid "WiFi scan list"
-msgstr "WiFi-keresési lista"
+#: ../cli/src/devices.c:1341
+#, c-format
+msgid "Error: 'device wifi': %s; allowed fields: %s"
+msgstr "Hiba: „device wifiâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/devices.c:1361
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi keresési lista"
-#: ../cli/src/devices.c:1410 ../cli/src/devices.c:1464
+#: ../cli/src/devices.c:1397 ../cli/src/devices.c:1451
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with bssid '%s' not found."
msgstr "Hiba: nem található a(z) „%s†BSSID-vel rendelkező hozzáférési pont,"
-#: ../cli/src/devices.c:1427
+#: ../cli/src/devices.c:1414 ../cli/src/devices.c:1792
+#: ../cli/src/devices.c:1954
+#, c-format
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Hiba: A(z) „%s†eszköz nem Wi-Fi eszköz."
+
+#: ../cli/src/devices.c:1482 ../cli/src/devices.c:1528
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr "A kapcsolat „%s†UUID-vel létrehozva és aktiválva a(z) „%s†eszközön\n"
+
+#: ../cli/src/devices.c:1487
+#, c-format
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "Hiba: a kapcsolat aktiválása meghiúsult: (%d) %s."
+
+#: ../cli/src/devices.c:1512
+#, c-format
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr "Hiba: Az új kapcsolat hozzáadása vagy aktiválása meghiúsult: (%d) %s"
+
+#: ../cli/src/devices.c:1520
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr ""
+"Hiba: Az új kapcsolat hozzáadása vagy aktiválása meghiúsult: ismeretlen hiba"
+
+#: ../cli/src/devices.c:1674
+#, c-format
+msgid "Error: SSID or BSSID are missing."
+msgstr "Hiba: az SSID vagy BSSID hiányzik."
+
+#: ../cli/src/devices.c:1698
+#, c-format
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr "Hiba: a(z) „%s†BSSID argumentumérték nem érvényes BSSID."
+
+#: ../cli/src/devices.c:1722
+#, c-format
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgstr ""
+"Hiba: a wep-key-type argumentum „%s†értéke érvénytelen, használja a „key†"
+"vagy „phrase†egyikét."
+
+#: ../cli/src/devices.c:1762
+#, c-format
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr ""
+"Hiba: a csatlakozáshoz használandó BSSID (%s) eltér a bssid argumentumtól "
+"(%s)."
+
+#: ../cli/src/devices.c:1768
+#, c-format
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "Hiba: a paraméter („%sâ€) nem SSID vagy BSSID."
+
+#: ../cli/src/devices.c:1794 ../cli/src/devices.c:1956
+#, c-format
+msgid "Error: No Wi-Fi device found."
+msgstr "Hiba: nem található Wi-Fi eszköz."
+
+#: ../cli/src/devices.c:1812
+#, c-format
+msgid "Error: No network with SSID '%s' found."
+msgstr "Hiba: nem található „%s†SSID-jú hálózat."
+
+#: ../cli/src/devices.c:1814
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Hiba: a(z) „%s†eszköz nem WiFi-eszköz."
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "Hiba: nem található „%s†BSSID-jú hozzáférési pont."
-#: ../cli/src/devices.c:1491
+#: ../cli/src/devices.c:1982
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Hiba: a „dev wifi†parancs („%s) nem érvényes."
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Hiba: a „device wifi†parancs („%s) nem érvényes."
-#: ../cli/src/devices.c:1567
+#: ../cli/src/devices.c:2058
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Hiba: „dev wimaxâ€: %s"
+msgid "Error: 'device wimax': %s"
+msgstr "Hiba: „device wimaxâ€: %s"
-#: ../cli/src/devices.c:1569
+#: ../cli/src/devices.c:2060
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Hiba: „dev wimaxâ€: %s; engedélyezett mezÅ‘k: %s"
+msgid "Error: 'device wimax': %s; allowed fields: %s"
+msgstr "Hiba: „device wimaxâ€: %s; engedélyezett mezÅ‘k: %s"
-#: ../cli/src/devices.c:1592
+#: ../cli/src/devices.c:2080
msgid "WiMAX NSP list"
msgstr "WiMAX NSP-lista"
-#: ../cli/src/devices.c:1629
+#: ../cli/src/devices.c:2116
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Hiba: a(z) „%s†nevű NSP nem található."
-#: ../cli/src/devices.c:1640
+#: ../cli/src/devices.c:2127
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Hiba: a(z) „%s†eszköz nem WiMAX-eszköz."
-#: ../cli/src/devices.c:1671
+#: ../cli/src/devices.c:2158
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with nsp '%s' not found."
msgstr "Hiba: nem található a(z) „%s†NSP-vel rendelkező hozzáférési pont."
-#: ../cli/src/devices.c:1698
+#: ../cli/src/devices.c:2185
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Hiba: a „dev wimax†parancs („%s) nem érvényes."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Hiba: a „device wimax†parancs („%s) nem érvényes."
-#: ../cli/src/devices.c:1748
+#: ../cli/src/devices.c:2236
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Hiba: a „dev†parancs („%s) nem érvényes."
@@ -1377,13 +1533,13 @@ msgstr "VERZIÓ"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-KÉPES"
+msgid "NETWORKING"
+msgstr "HÃLÓZATKEZELÉS"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDVER"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 4
#: ../cli/src/network-manager.c:42
@@ -1392,8 +1548,8 @@ msgstr "WIFI"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDVER"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 6
#: ../cli/src/network-manager.c:44
@@ -1402,8 +1558,8 @@ msgstr "WWAN"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDVER"
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
#. 8
#: ../cli/src/network-manager.c:46
@@ -1411,176 +1567,225 @@ msgid "WIMAX"
msgstr "WIMAX"
#: ../cli/src/network-manager.c:67
+msgid "PERMISSION"
+msgstr "JOGOSULTSÃG"
+
+#. 0
+#: ../cli/src/network-manager.c:68
+msgid "VALUE"
+msgstr "ÉRTÉK"
+
+#: ../cli/src/network-manager.c:76
+msgid "LEVEL"
+msgstr "SZINT"
+
+#. 0
+#: ../cli/src/network-manager.c:77
+msgid "DOMAINS"
+msgstr "TARTOMÃNYOK"
+
+#: ../cli/src/network-manager.c:92
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | permissions | logging }\n"
+"\n"
+" status\n"
+"\n"
+" permissions\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+msgstr ""
+"Használat: nmcli general { PARANCS | help }\n"
+"\n"
+" PARANCS := { status | permissions | logging }\n"
"\n"
" status\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <naplózási szint>] [domains <naplózandó tartományok>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:104
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+" COMMAND := { [ on | off ] }\n"
"\n"
msgstr ""
-"Használat: nmcli nm { PARANCS | help }\n"
+"Használat: nmcli networking { PARANCS | help }\n"
"\n"
-" PARANCS := { status | enable | sleep | wifi | wwan | wimax }\n"
+" PARANCS := { [ on | off ] }\n"
"\n"
-" PARANCS := { status | enable | sleep | wifi | wwan }\n"
+
+#: ../cli/src/network-manager.c:113
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
"\n"
-" status\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+" COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+" COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"Használat: nmcli radio { PARANCS | help }\n"
+"\n"
+" PARANCS := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off]\n"
+"\n"
+" PARANCS := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:96
+#: ../cli/src/network-manager.c:136
msgid "asleep"
msgstr "alszik"
-#: ../cli/src/network-manager.c:98
+#: ../cli/src/network-manager.c:138
msgid "connecting"
msgstr "csatlakozás"
-#: ../cli/src/network-manager.c:100
+#: ../cli/src/network-manager.c:140
msgid "connected (local only)"
msgstr "kapcsolódva (csak helyi)"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:142
msgid "connected (site only)"
msgstr "kapcsolódva (csak hely)"
-#: ../cli/src/network-manager.c:106
+#: ../cli/src/network-manager.c:146
msgid "disconnecting"
msgstr "leválasztás"
-#: ../cli/src/network-manager.c:146
+#: ../cli/src/network-manager.c:186
#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Hiba: „nm statusâ€: %s"
+msgid "Error: %s"
+msgstr "Hiba: %s"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:188
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Hiba: „nm statusâ€: %s; engedélyezett mezÅ‘k: %s"
+msgid "Error: %s (allowed fields: %s)"
+msgstr "Hiba: %s (engedélyezett mezők: %s)"
-#. create NMClient
-#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
-#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
-#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
-#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
-#: ../cli/src/network-manager.c:421
+#: ../cli/src/network-manager.c:202 ../cli/src/network-manager.c:203
+#: ../cli/src/network-manager.c:204 ../cli/src/network-manager.c:205
+#: ../cli/src/network-manager.c:206 ../cli/src/network-manager.c:208
+#: ../cli/src/network-manager.c:209
msgid "enabled"
msgstr "engedélyezve"
-#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
-#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
-#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
-#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
-#: ../cli/src/network-manager.c:421
+#: ../cli/src/network-manager.c:202 ../cli/src/network-manager.c:203
+#: ../cli/src/network-manager.c:204 ../cli/src/network-manager.c:205
+#: ../cli/src/network-manager.c:206 ../cli/src/network-manager.c:208
+#: ../cli/src/network-manager.c:209
msgid "disabled"
msgstr "letiltva"
-#: ../cli/src/network-manager.c:181
+#: ../cli/src/network-manager.c:222
msgid "NetworkManager status"
msgstr "Hálózatkezelő állapota"
#. Print header
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:225
msgid "running"
msgstr "fut"
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:225
msgid "not running"
msgstr "nem fut"
-#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:425
+#: ../cli/src/network-manager.c:297
+msgid "auth"
+msgstr "auth"
+
+#: ../cli/src/network-manager.c:327
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Hiba: nem lehet a rendszerbuszhoz kapcsolódni: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Hiba: „general permissionsâ€: %s"
-#: ../cli/src/network-manager.c:226
+#: ../cli/src/network-manager.c:329
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Hiba: nem lehet a D-Bus objektumproxyhoz kapcsolódni."
+msgid "Error: 'general permissions': %s; allowed fields: %s"
+msgstr "Hiba: „general permissionsâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/network-manager.c:345
+msgid "NetworkManager permissions"
+msgstr "Hálózatkezelő jogosultságai"
-#: ../cli/src/network-manager.c:232
+#: ../cli/src/network-manager.c:384
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Hiba az alváskor: %s"
+msgid "Error: 'general logging': %s"
+msgstr "Hiba: „general loggingâ€: %s"
-#: ../cli/src/network-manager.c:276 ../cli/src/network-manager.c:331
-#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408
+#: ../cli/src/network-manager.c:386
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"Hiba: a(z) „%s†„--fields†érték itt nem érvényes; engedélyezett mezők: %s"
+msgid "Error: 'general logging': %s; allowed fields: %s"
+msgstr "Hiba: „general loggingâ€: %s; engedélyezett mezÅ‘k: %s"
-#: ../cli/src/network-manager.c:284
-msgid "Networking enabled"
-msgstr "Hálózatkezelés engedélyezve"
+#: ../cli/src/network-manager.c:403
+msgid "NetworkManager logging"
+msgstr "Hálózatkezelő naplózása"
-#: ../cli/src/network-manager.c:300
+#: ../cli/src/network-manager.c:487
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Hiba: érvénytelen „enable†paraméter: „%sâ€; használja a „true†vagy „false†"
-"egyikét."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Hiba: a(z) „%s†„general†parancs nem érvényes."
-#: ../cli/src/network-manager.c:310
+#: ../cli/src/network-manager.c:506
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Hiba: a Hálózatkezelő nem exportálta az alvási állapotot."
+msgid "Error: '--fields' value '%s' is not valid here (allowed fields: %s)"
+msgstr ""
+"Hiba: a(z) „%s†„--fields†érték itt nem érvényes (engedélyezett mezők: %s)"
-#: ../cli/src/network-manager.c:318
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Hiba: érvénytelen „sleep†paraméter: „%sâ€; használja a „true†vagy „false†"
-"egyikét."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Hiba: érvénytelen „%s†argumentum: „%s†(csak az on/off használható)."
-#: ../cli/src/network-manager.c:339
-msgid "WiFi enabled"
-msgstr "WiFi engedélyezve"
+#: ../cli/src/network-manager.c:547
+msgid "Networking"
+msgstr "Hálózatkezelés"
-#: ../cli/src/network-manager.c:355
+#: ../cli/src/network-manager.c:557
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Hiba: érvénytelen „wifi†paraméter: „%sâ€."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Hiba: a(z) „%s†„networking†parancs nem érvényes."
-#: ../cli/src/network-manager.c:377
-msgid "WWAN enabled"
-msgstr "WWAN engedélyezve"
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:595
+msgid "Radio switches"
+msgstr "Rádiókapcsolók"
-#: ../cli/src/network-manager.c:393
-#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Hiba: érvénytelen „wwan†paraméter: „%sâ€."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:609
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi rádiókapcsoló"
-#: ../cli/src/network-manager.c:416
-msgid "WiMAX enabled"
-msgstr "WiMAX engedélyezve"
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:621
+msgid "WWAN radio switch"
+msgstr "WWAN rádiókapcsoló"
-#: ../cli/src/network-manager.c:432
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Hiba: érvénytelen „wimax†paraméter: „%sâ€."
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:634
+msgid "WiMAX radio switch"
+msgstr "WiMAX rádiókapcsoló"
-#: ../cli/src/network-manager.c:445
+#: ../cli/src/network-manager.c:649
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Hiba: a(z) „%s†„nm†parancs nem érvényes."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Hiba: a(z) „%s†„radio†parancs nem érvényes."
-#: ../cli/src/nmcli.c:64
+#: ../cli/src/nmcli.c:76
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1594,13 +1799,16 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
"Használat: %s [KAPCSOLÓK] OBJEKTUM { PARANCS | help }\n"
@@ -1615,213 +1823,256 @@ msgstr ""
" értékekben\n"
" -n[ocheck] ne ellenőrizze az nmcli és a\n"
" Hálózatkezelő verzióit\n"
+" -a[sk] ask for missing parameters\n"
" -v[ersion] programverzió kiírása\n"
" -h[elp] ezen súgó kiírása\n"
"\n"
"OBJEKTUM\n"
-" nm A Hálózatkezelő állapota\n"
-" con A Hálózatkezelő kapcsolatai\n"
-" dev A Hálózatkezelő által kezelt eszközök\n"
+" g[eneral] A Hálózatkezelő általános állapota és műveletei\n"
+" n[etworking] Ãltalános hálózatfelügyelet\n"
+" r[adio] A Hálózatkezelő rádiókapcsolói\n"
+" c[onnection] A Hálózatkezelő kapcsolatai\n"
+" d[evice] A Hálózatkezelő által kezelt eszközök\n"
"\n"
-#: ../cli/src/nmcli.c:109
+#: ../cli/src/nmcli.c:129
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr ""
"Hiba: a(z) „%s†objektum ismeretlen, adja ki az „nmcli help†parancsot."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:159
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Hiba: a „--terse†kapcsoló másodszor lett megadva."
-#: ../cli/src/nmcli.c:144
+#: ../cli/src/nmcli.c:164
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Hiba: a „--terse†és a „--pretty†kapcsolók kölcsönösen kizáróak."
-#: ../cli/src/nmcli.c:152
+#: ../cli/src/nmcli.c:172
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Hiba: a „--pretty†kapcsoló másodszor lett megadva."
-#: ../cli/src/nmcli.c:157
+#: ../cli/src/nmcli.c:177
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Hiba: a „--pretty†és „--terse†kapcsolók kölcsönösen kizáróak."
-#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
+#: ../cli/src/nmcli.c:187 ../cli/src/nmcli.c:203
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Hiba: a(z) „%s†kapcsoló argumentuma hiányzik."
-#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
+#: ../cli/src/nmcli.c:196 ../cli/src/nmcli.c:212
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Hiba: „%s†nem érvényes argumentum a(z) „%s†kapcsolóhoz."
-#: ../cli/src/nmcli.c:199
+#: ../cli/src/nmcli.c:219
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Hiba: a(z) „%s†kapcsoló mezői hiányoznak."
-#: ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:229
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli eszköz, %s verzió\n"
-#: ../cli/src/nmcli.c:213
+#: ../cli/src/nmcli.c:235
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr ""
"Hiba: a(z) „%s†kapcsoló ismeretlen, adja ki az „nmcli-help†parancsot."
-#: ../cli/src/nmcli.c:232
+#: ../cli/src/nmcli.c:254
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "%d szignál érkezett, leállítás…"
-#: ../cli/src/nmcli.c:257
+#: ../cli/src/nmcli.c:279
msgid "Error: Could not create NMClient object."
msgstr "Hiba: nem sikerült a NMClient objektumot létrehozni."
-#: ../cli/src/nmcli.c:273
+#: ../cli/src/nmcli.c:295
msgid "Success"
msgstr "Siker"
-#: ../cli/src/settings.c:465
+#: ../cli/src/settings.c:598
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-kulcs)"
-#: ../cli/src/settings.c:467
+#: ../cli/src/settings.c:600
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128 bites jelmondat)"
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:603 ../cli/src/settings.c:731
#, c-format
msgid "%d (unknown)"
msgstr "%d (ismeretlen)"
-#: ../cli/src/settings.c:496
+#: ../cli/src/settings.c:629
msgid "0 (unknown)"
msgstr "0 (ismeretlen)"
-#: ../cli/src/settings.c:502
+#: ../cli/src/settings.c:635
msgid "any, "
msgstr "bármely, "
-#: ../cli/src/settings.c:504
+#: ../cli/src/settings.c:637
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:506
+#: ../cli/src/settings.c:639
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:508
+#: ../cli/src/settings.c:641
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:510
+#: ../cli/src/settings.c:643
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:512
+#: ../cli/src/settings.c:645
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:514
+#: ../cli/src/settings.c:647
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:516
+#: ../cli/src/settings.c:649
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:518
+#: ../cli/src/settings.c:651
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:520
+#: ../cli/src/settings.c:653
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:522
+#: ../cli/src/settings.c:655
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:524
+#: ../cli/src/settings.c:657
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:526
-#| msgid "WCDMA 3GPP UMTS 900 MHz, "
+#: ../cli/src/settings.c:659
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:528
-#| msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#: ../cli/src/settings.c:661
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:650 ../cli/src/settings.c:846
-#: ../cli/src/settings.c:1550
+#: ../cli/src/settings.c:679
+msgid "0 (NONE)"
+msgstr "0 (NINCS)"
+
+#: ../cli/src/settings.c:685
+msgid "REORDER_HEADERS, "
+msgstr "FEJLÉCEK_ÃTRENDEZÉSE, "
+
+#: ../cli/src/settings.c:687
+msgid "GVRP, "
+msgstr "GVRP, "
+
+#: ../cli/src/settings.c:689
+msgid "LOOSE_BINDING, "
+msgstr "LAZA_ÖSSZEKAPCSOLÃS, "
+
+#: ../cli/src/settings.c:725
+#, c-format
+msgid "%d (disabled)"
+msgstr "%d (letiltva)"
+
+#: ../cli/src/settings.c:727
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (engedélyezve, nyilvános IP előnyben)"
+
+#: ../cli/src/settings.c:729
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (engedélyezve, ideiglenes IP előnyben)"
+
+#: ../cli/src/settings.c:741
+msgid "0 (none)"
+msgstr "0 (nincs)"
+
+#: ../cli/src/settings.c:747
+msgid "agent-owned, "
+msgstr "ügynök tulajdona, "
+
+#: ../cli/src/settings.c:749
+msgid "not saved, "
+msgstr "nincs mentve, "
+
+#: ../cli/src/settings.c:751
+msgid "not required, "
+msgstr "nem szükséges, "
+
+#: ../cli/src/settings.c:1064 ../cli/src/settings.c:1232
+#: ../cli/src/settings.c:1273
msgid "auto"
msgstr "auto"
-#: ../cli/src/settings.c:840 ../cli/src/settings.c:843
-#: ../cli/src/settings.c:844 ../cli/src/utils.c:247
-msgid "not set"
-msgstr "nincs beállítva"
+#: ../cli/src/utils.c:109
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Hiba: „%s†argumentum értéke kötelező."
+
+#: ../cli/src/utils.c:134
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Hiba: a várt „%s†argumentum helyett „%s†lett megadva."
+
+#: ../cli/src/utils.c:137
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Hiba: váratlan argumentum: „%sâ€"
-#: ../cli/src/utils.c:103
+#: ../cli/src/utils.c:192
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "Hiba az IP4 cím („0x%Xâ€) szöveges formátumúvá konvertálásakor"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:220
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP6 address '%s' to text form"
msgstr "Hiba az IP6 cím („%sâ€) szöveges formátumúvá konvertálásakor"
-#: ../cli/src/utils.c:200
+#: ../cli/src/utils.c:382
#, c-format
msgid "field '%s' has to be alone"
msgstr "a(z) „%s†mezőnek önállónak kell lennie"
-#: ../cli/src/utils.c:203
+#: ../cli/src/utils.c:385
#, c-format
msgid "invalid field '%s'"
msgstr "érvénytelen mezÅ‘: „%sâ€"
-#: ../cli/src/utils.c:222
-#, c-format
+#: ../cli/src/utils.c:404
msgid "Option '--terse' requires specifying '--fields'"
msgstr "A „--terse†megköveteli a „--fields†megadását."
-#: ../cli/src/utils.c:226
+#: ../cli/src/utils.c:408
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"A „--terse†adott „--fields†kapcsolóértékeket követel meg, nem ezt: „%sâ€."
-#: ../cli/src/utils.c:436
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"Hiba: nem sikerült a D-Bus objektumproxyt létrehozni az org.freedesktop.DBus "
-"névtérhez"
-
-#: ../cli/src/utils.c:444
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Hiba: a NameHasOwner kérés meghiúsult: %s"
-
-#: ../cli/src/utils.c:489
+#: ../cli/src/utils.c:617
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1830,7 +2081,7 @@ msgstr ""
"Figyelmeztetés: az nmcli (%s) és a Hálózatkezelő (%s) verziói nem egyeznek. "
"A figyelmeztetés kikapcsolásához használja a --nocheck kapcsolót.\n"
-#: ../cli/src/utils.c:498
+#: ../cli/src/utils.c:626
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1850,120 +2101,89 @@ msgstr "A PEM kulcsfájl nem rendelkezik „%s†zárócímkével."
msgid "Doesn't look like a PEM private key file."
msgstr "Nem tűnik PEM személyes kulcs fájlnak."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Nincs elég memória a PEM fájl adatainak tárolásához."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Rosszul formázott PEM fájl: a Proc-Type nem az első címke."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Rosszul formázott PEM fájl: ismeretlen Proc-Type címke („%sâ€)."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Rosszul formázott PEM fájl: A DEK-Info nem a második címke."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Rosszul formázott PEM fájl: nem található IV a DEK-Info címkében."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr ""
"Rosszul formázott PEM fájl: az IV formátuma érvénytelen a DEK-Info címkében."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr ""
"Rosszul formázott PEM fájl: ismeretlen személyes kulcs titkosító: „%sâ€."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "A személyes kulcs nem fejthető vissza."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "A várt PKCS#8 kezdőcímke nem található."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "A várt „%s†PKCS#8 zárócímke nem található."
-#: ../libnm-util/crypto.c:312
-#| msgid "Not enough memory to store certificate data."
-msgid "Not enough memory to store private key data."
-msgstr "Nincs elég memória a személyes kulcs adatainak tárolásához."
-
-#: ../libnm-util/crypto.c:317
-#| msgid "Failed to decrypt the private key."
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "A PKCS#8 személyes kulcs visszafejtése meghiúsult."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Nincs elég memória a tanúsítvány adatainak tárolásához."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "Az IV hosszának páros számú bájtnak kell lennie."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Nincs elég memória az IV tárolásához."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "Az IV nem hexadecimális számjegyeket tartalmaz."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "A(z) „%s†személyeskulcs-titkosító ismeretlen."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Nincs elég memória a személyes kulcs visszafejtéséhez."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Nincs elég memória a visszafejtett személyes kulcs tárolásához."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "A személyes kulcs típusa nem határozható meg."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "A PEM tanúsítvány nem tartalmaz kezdő „%s†címkét."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "A PEM tanúsítvány nem tartalmaz záró „%s†címkét."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "A tanúsítvány visszafejtése meghiúsult."
@@ -1982,101 +2202,89 @@ msgstr "Az MD5 alrendszer előkészítése meghiúsult: %s / %s."
msgid "Invalid IV length (must be at least %zd)."
msgstr "Érvénytelen IV hossz (legalább %zd hosszúnak kell lennie)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Nincs elég memória a visszafejtett kulcspufferhez."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr ""
"A visszafejtési titkosító kontextusának előkészítése meghiúsult: %s /%s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "A szimmetrikus kulcs beállítása meghiúsult a visszafejtéshez: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Az IV beállítása meghiúsult a visszafejtéshez: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "A személyes kulcs visszafejtése meghiúsult: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "A személyes kulcs visszafejtése meghiúsult: váratlan kitöltéshossz."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "A személyes kulcs visszafejtése meghiúsult."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Nem sikerült memóriát foglalni a titkosításhoz."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "A titkosító kontextusának előkészítése meghiúsult: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "A szimmetrikus kulcs beállítása meghiúsult a titkosításhoz: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Az IV beállítása meghiúsult a titkosításhoz: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Az adatot nem sikerült titkosítani: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Hiba a tanúsítvány adatainak előkészítésekor: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "A tanúsítvány nem fejthető vissza: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "A PKCS#12 dekódoló nem készíthető elő: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "A PKCS#12 fájl nem fejthető vissza: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "A PKCS#12 fájl nem ellenőrizhető: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
-#| msgid "Couldn't initialize PKCS#12 decoder: %s"
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "A PKCS#8 dekódoló nem készíthető elő: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
-#| msgid "Couldn't decode PKCS#12 file: %s"
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "A PKCS#8 fájl nem fejthető vissza: %s"
@@ -2095,138 +2303,466 @@ msgstr "Az MD5 kontextus előkészítése meghiúsult: %d."
msgid "Invalid IV length (must be at least %d)."
msgstr "Érvénytelen IV hossz (legalább %d hosszúnak kell lennie)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "A visszafejtési titkosítóhely előkészítése meghiúsult."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "A szimmetrikus kulcs nem állítható be a visszafejtéshez."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Az IV nem állítható be a visszafejtéshez."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "A visszafejtési kontextus előkészítése meghiúsult."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "A személyes kulcs visszafejtése meghiúsult: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"A személyes kulcs visszafejtése meghiúsult: a visszafejtett adatok túl "
"nagyok."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "A személyes kulcs visszafejtésének befejezése meghiúsult: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "A titkosítóhely előkészítése meghiúsult."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "A szimmetrikus kulcs nem állítható be a titkosításhoz."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Az IV nem állítható be a titkosításhoz."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "A titkosítási kontextus előkészítése meghiúsult."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "A titkosítás meghiúsult: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Váratlan mennyiségű adat a titkosítás után."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "A tanúsítvány nem fejthető vissza: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "A jelszó nem alakítható UCS2 formátumra: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "A PKCS#12 dekódoló nem készíthető elő: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "A PKCS#12 fájl nem fejthető vissza: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "A PKCS#12 fájl nem ellenőrizhető: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "Nem sikerült a véletlen adatok előállítása."
-#: ../libnm-util/nm-utils.c:2034
+#: ../libnm-util/nm-setting-8021x.c:2119 ../libnm-util/nm-setting-8021x.c:2136
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2246 ../libnm-util/nm-setting-8021x.c:2258
+#: ../libnm-util/nm-setting-8021x.c:2276 ../libnm-util/nm-setting-8021x.c:2288
+#: ../libnm-util/nm-setting-8021x.c:2312 ../libnm-util/nm-setting-8021x.c:2487
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bluetooth.c:171
+#: ../libnm-util/nm-setting-bond.c:368 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:674
+#: ../libnm-util/nm-setting-connection.c:690
+#: ../libnm-util/nm-setting-connection.c:743
+#: ../libnm-util/nm-setting-ip4-config.c:693
+#: ../libnm-util/nm-setting-ip4-config.c:703
+#: ../libnm-util/nm-setting-ip6-config.c:675
+#: ../libnm-util/nm-setting-ip6-config.c:685
+#: ../libnm-util/nm-setting-ip6-config.c:738
+#: ../libnm-util/nm-setting-olpc-mesh.c:128
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-vpn.c:394
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:792
+#: ../libnm-util/nm-setting-wireless.c:610
+msgid "property is missing"
+msgstr "a tulajdonság hiányzik"
+
+#: ../libnm-util/nm-setting-8021x.c:2126 ../libnm-util/nm-setting-8021x.c:2143
+#: ../libnm-util/nm-setting-8021x.c:2184 ../libnm-util/nm-setting-8021x.c:2201
+#: ../libnm-util/nm-setting-8021x.c:2252 ../libnm-util/nm-setting-8021x.c:2264
+#: ../libnm-util/nm-setting-8021x.c:2282 ../libnm-util/nm-setting-8021x.c:2294
+#: ../libnm-util/nm-setting-8021x.c:2318 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:681
+#: ../libnm-util/nm-setting-connection.c:750
+#: ../libnm-util/nm-setting-gsm.c:280 ../libnm-util/nm-setting-gsm.c:337
+#: ../libnm-util/nm-setting-gsm.c:346
+#: ../libnm-util/nm-setting-ip4-config.c:754
+#: ../libnm-util/nm-setting-ip4-config.c:763
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:403 ../libnm-util/nm-setting-vpn.c:413
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:822
+#: ../libnm-util/nm-setting-wireless-security.c:830
+#: ../libnm-util/nm-setting-wireless-security.c:854
+msgid "property is empty"
+msgstr "a tulajdonság üres"
+
+#: ../libnm-util/nm-setting-8021x.c:2154 ../libnm-util/nm-setting-8021x.c:2166
+#: ../libnm-util/nm-setting-8021x.c:2212 ../libnm-util/nm-setting-8021x.c:2224
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "egyeznie kell a(z) „%s†tulajdonsággal a PKCS#12-höz"
+
+#: ../libnm-util/nm-setting-8021x.c:2462 ../libnm-util/nm-setting-8021x.c:2496
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:377
+#: ../libnm-util/nm-setting-infiniband.c:149
+#: ../libnm-util/nm-setting-infiniband.c:164
+#: ../libnm-util/nm-setting-ip4-config.c:745
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#: ../libnm-util/nm-setting-olpc-mesh.c:156
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:501
+#: ../libnm-util/nm-setting-wired.c:510
+#: ../libnm-util/nm-setting-wireless-security.c:873
+#: ../libnm-util/nm-setting-wireless-security.c:882
+#: ../libnm-util/nm-setting-wireless-security.c:890
+#: ../libnm-util/nm-setting-wireless-security.c:898
+#: ../libnm-util/nm-setting-wireless-security.c:906
+#: ../libnm-util/nm-setting-wireless-security.c:915
+#: ../libnm-util/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-wireless-security.c:933
+#: ../libnm-util/nm-setting-wireless-security.c:969
+#: ../libnm-util/nm-setting-wireless-security.c:979
+#: ../libnm-util/nm-setting-wireless.c:670
+#: ../libnm-util/nm-setting-wireless.c:679
+#: ../libnm-util/nm-setting-wireless.c:688
+msgid "property is invalid"
+msgstr "a tulajdonság érvénytelen"
+
+#: ../libnm-util/nm-setting-8021x.c:2521 ../libnm-util/nm-setting-8021x.c:2531
+#: ../libnm-util/nm-setting-8021x.c:2541 ../libnm-util/nm-setting-8021x.c:2551
+#: ../libnm-util/nm-setting-8021x.c:2561 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:179
+#: ../libnm-util/nm-setting-wireless-security.c:801
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "„%s†nem érvényes érték a tulajdonsághoz"
+
+#: ../libnm-util/nm-setting-bluetooth.c:201
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "a(z) „%s†vagy „%s†beállítás szükséges"
+
+#: ../libnm-util/nm-setting-bond.c:391
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "„%s†kapcsoló vagy az értéke („%sâ€) érvénytelen"
+
+#: ../libnm-util/nm-setting-bond.c:410
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "„%s†és „%s†közül csak az egyik állítható be"
+
+#: ../libnm-util/nm-setting-bond.c:421
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Nincs elég memória titkosítási kulcs készítéséhez."
+msgid "setting '%s' is required"
+msgstr "„%s†beállítás szükséges"
-#: ../libnm-util/nm-utils.c:2144
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Nem sikerült memóriát foglalni PEM fájl készítéséhez."
+#: ../libnm-util/nm-setting-bond.c:430
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "„%s†nem érvényes érték ehhez: „%sâ€"
-#: ../libnm-util/nm-utils.c:2156
+#: ../libnm-util/nm-setting-bond.c:443
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Nem sikerült memóriát foglalni az IV írásához PEM fájlba."
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "„%s=%s†nem kompatibilis a(z) „%s > 0â€-val"
-#: ../libnm-util/nm-utils.c:2168
+#: ../libnm-util/nm-setting-bond.c:454
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr ""
-"Nem sikerült memóriát foglalni a titkosított kulcs PEM fájlba írásához."
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "„%s=%s†nem érvényes beállítás ehhez: „%sâ€"
+
+#: ../libnm-util/nm-setting-bond.c:467 ../libnm-util/nm-setting-bond.c:476
+#: ../libnm-util/nm-setting-bond.c:496 ../libnm-util/nm-setting-bond.c:532
+#, c-format
+msgid "'%s' option requires setting '%s' option"
+msgstr "„%s†beállítás megköveteli a(z) „%s†beállítás megadását"
+
+#: ../libnm-util/nm-setting-bond.c:508
+#, c-format
+msgid "'%s' option is empty"
+msgstr "„%s†beállítás üres"
+
+#: ../libnm-util/nm-setting-bond.c:520
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "„%s†nem érvényes IPv4 cím a(z) „%s†beállításhoz"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:165
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "„%d†nem érvényes érték a tulajdonsághoz (<= %d kellene legyen)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "„%d†érték kívül esik a tartományon: <%d-%d>"
+
+#: ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:732
+#: ../libnm-util/nm-setting-vlan.c:468
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "a(z) „%s†nem érvényes csatolónév"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "a tulajdonság üres"
+
+#: ../libnm-util/nm-setting-connection.c:697
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "„%s†nem érvényes UUID"
+
+#: ../libnm-util/nm-setting-connection.c:716
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "„%s†nem egyezik a virtuális csatoló nevével („%sâ€)"
+
+#: ../libnm-util/nm-setting-connection.c:760
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "megköveteli a(z) „%s†beállítás jelenlétét a kapcsolatban"
+
+#: ../libnm-util/nm-setting-connection.c:784
+msgid "IPv4 configuration is not allowed for bonding slave"
+msgstr "Az IPv4 beállítás nem engedélyezett a bond kapcsolat alárendeltjéhez"
+
+#: ../libnm-util/nm-setting-connection.c:801
+msgid "IPv6 configuration is not allowed for bonding slave"
+msgstr "Az IPv6 beállítás nem engedélyezett a bond kapcsolat alárendeltjéhez"
+
+#: ../libnm-util/nm-setting-gsm.c:293
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "„%s†tulajdonságérték üres vagy túl hosszú (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:325
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "„%s†érvénytelen karaktereket tartalmaz (használható: [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:360
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "„%s†hossz érvénytelen (5 vagy 6 számjegy kellene legyen)"
+
+#: ../libnm-util/nm-setting-gsm.c:371
+#, c-format
+msgid "'%s' is not a number"
+msgstr "„%s†nem szám"
+
+#: ../libnm-util/nm-setting-ip4-config.c:714
+#: ../libnm-util/nm-setting-ip4-config.c:724
+#: ../libnm-util/nm-setting-ip4-config.c:734
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:707
+#: ../libnm-util/nm-setting-ip6-config.c:717
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "ez a tulajdonság nem engedélyezett ehhez: „%s=%sâ€"
+
+#: ../libnm-util/nm-setting-ip4-config.c:777
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "a(z) %d. IPv4 cím érvénytelen"
+
+#: ../libnm-util/nm-setting-ip4-config.c:787
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "a(z) %d. IPv4 cím előtagja érvénytelen"
+
+#: ../libnm-util/nm-setting-ip4-config.c:803
+#, c-format
+msgid "%d. route is invalid"
+msgstr "a(z) %d. útvonal érvénytelen"
+
+#: ../libnm-util/nm-setting-ip4-config.c:813
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "a(z) %d. útvonal előtagja érvénytelen"
+
+#: ../libnm-util/nm-setting-ip6-config.c:696
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "„%s†nem engedélyezett ehhez: „%s=%sâ€"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:137
+#: ../libnm-util/nm-setting-wireless.c:619
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "az SSID hossza kívül esik az <1-32> bájt tartományon"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:146
+#: ../libnm-util/nm-setting-wireless.c:659
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "„%d†nem érvényes csatorna"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "„%d†kívül esik az érvényes <128-16384> tartományon"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "ezen tulajdonság beállításához nem nulla „%s†tulajdonság szükséges"
+
+#: ../libnm-util/nm-setting-vlan.c:490
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "„%s†érték nem felel meg ennek: „%s=%sâ€"
+
+#: ../libnm-util/nm-setting-vlan.c:501
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "„%s†nem UUID vagy csatolónév"
+
+#: ../libnm-util/nm-setting-vlan.c:514
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "a tulajdonság nincs megadva és nem is „%s:%sâ€"
+
+#: ../libnm-util/nm-setting-vlan.c:527
+msgid "flags are invalid"
+msgstr "a jelzők érvénytelenek"
+
+#: ../libnm-util/nm-setting-wired.c:456
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "„%s†nem érvényes ethernet port érték"
+
+#: ../libnm-util/nm-setting-wired.c:466
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "„%s†nem érvényes duplex érték"
+
+#: ../libnm-util/nm-setting-wired.c:476 ../libnm-util/nm-setting-wired.c:534
+msgid "is not a valid MAC address"
+msgstr "nem érvényes MAC cím"
-#: ../libnm-util/nm-utils.c:2187
+#: ../libnm-util/nm-setting-wired.c:489
+#: ../libnm-util/nm-setting-wireless.c:700
+#: ../libnm-util/nm-setting-wireless.c:714
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Nem sikerült memóriát foglalni a PEM fájl adatainak."
+msgid "'%s' is not a valid MAC address"
+msgstr "„%s†nem érvényes MAC cím"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#: ../libnm-util/nm-setting-wired.c:523
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "„%s†vagy az értéke („%sâ€) érvénytelen"
+
+#: ../libnm-util/nm-setting-wireless-security.c:813
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "„%s†biztonság megköveteli ezt: „%s=%sâ€"
+
+#: ../libnm-util/nm-setting-wireless-security.c:842
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "„%s†biztonság megköveteli „%s†beállítás jelenlétét"
+
+#: ../libnm-util/nm-setting-wireless-security.c:863
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "„%d†érték kívül esik a <0-3> tartományon"
+
+#: ../libnm-util/nm-setting-wireless-security.c:960
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "„%s†kapcsolat ebben a tulajdonságban megköveteli ezt: „%sâ€"
+
+#: ../libnm-util/nm-setting-wireless-security.c:990
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "„%s†csak a(z) „%s=%s†(WEP) kapcsolóval együtt használható"
+
+#: ../libnm-util/nm-setting-wireless.c:628
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "„%s†nem érvényes Wi-Fi mód"
+
+#: ../libnm-util/nm-setting-wireless.c:638
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "„%s†nem érvényes sáv"
+
+#: ../libnm-util/nm-setting-wireless.c:648
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "megköveteli a(z) „%s†tulajdonság beállítását"
+
+#: ../libnm-util/nm-setting-wireless.c:726
+#, c-format
+msgid "'%s' setting is required for the connection when the property is set"
+msgstr ""
+"„%s†beállítás szükséges a kapcsolathoz, ha a tulajdonság be van állítva"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "Rendszer hálózatkezelésének be- és kikapcsolása"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
msgid "System policy prevents enabling or disabling system networking"
msgstr ""
"A rendszer házirendje megakadályozza a rendszer hálózatkezelésének be- vagy "
"kikapcsolását"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:3
msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
@@ -2234,206 +2770,165 @@ msgstr ""
"Hálózatkezelő elaltatása vagy felébresztése (csak a rendszer "
"energiagazdálkodása által használandó)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
msgstr ""
"A rendszer házirendje megakadályozza a Hálózatkezelő elaltatását vagy "
"felébresztését"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
msgstr "WiFi eszközök be- és kikapcsolása"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
msgstr ""
"A rendszer házirendje megakadályozza a WiFi eszközök be- vagy kikapcsolását"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
msgid "Enable or disable mobile broadband devices"
msgstr "Mobil széles sávú eszközök be- és kikapcsolása"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
msgid "System policy prevents enabling or disabling mobile broadband devices"
msgstr ""
"A rendszer házirendje megakadályozza a mobil széles sávú eszközök be- vagy "
"kikapcsolását"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "WiMAX mobil széles sávú eszközök be- és kikapcsolása"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
"A rendszer házirendje megakadályozza a WiMAX mobil széles sávú eszközök be- "
"vagy kikapcsolását"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
msgstr "Hálózati kapcsolatok felügyeletének engedélyezése"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
msgid "System policy prevents control of network connections"
msgstr ""
"A rendszer házirendje megakadályozza a hálózati kapcsolatok felügyeletét"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:13
msgid "Connection sharing via a protected WiFi network"
msgstr "Kapcsolatmegosztás védett WiFi hálózaton"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
msgid "System policy prevents sharing connections via a protected WiFi network"
msgstr ""
"A rendszer házirendje megakadályozza a kapcsolatok megosztását védett WiFi "
"hálózaton"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
msgid "Connection sharing via an open WiFi network"
msgstr "Kapcsolatmegosztás nyílt WiFi hálózaton"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
"A rendszer házirendje megakadályozza a kapcsolatok megosztását nyílt WiFi "
"hálózaton"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
msgstr "Személyes hálózati kapcsolatok módosítása"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
msgid "System policy prevents modification of personal network settings"
msgstr ""
"A rendszer házirendje megakadályozza a személyes hálózati beállítások "
"módosítását"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
msgid "Modify network connections for all users"
msgstr "Hálózati kapcsolatok módosítása minden felhasználó számára"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
msgid "System policy prevents modification of network settings for all users"
msgstr ""
"A rendszer házirendje megakadályozza a hálózati beállítások módosítását "
"minden felhasználó számára"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
msgstr "Ãllandó rendszergépnév módosítása"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"A rendszer házirendje megakadályozza a rendszer állandó gépnevének "
"módosítását"
-#: ../src/main.c:143
+#: ../src/main.c:131
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "A szignálmaszk beállítása meghiúsult: %d"
+
+#: ../src/main.c:140
#, c-format
-#| msgid "Failed to initialize the crypto engine: %d."
-msgid "Failed to initialize SIGTERM pipe: %d"
-msgstr "A SIGTERM adatcsatorna előkészítése meghiúsult: %d"
+msgid "Failed to create signal handling thread: %d"
+msgstr "A szignálkezelő szál létrehozása meghiúsult: %d"
-#: ../src/main.c:174
+#: ../src/main.c:155
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s megnyitása sikertelen: %s\n"
-#: ../src/main.c:180
+#: ../src/main.c:161
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Nem sikerült írni a(z) %s fájlba: %s\n"
-#: ../src/main.c:185
+#: ../src/main.c:166
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s lezárása sikertelen: %s\n"
-#: ../src/main.c:228
+#: ../src/main.c:209
#, c-format
-#| msgid "Error: NetworkManager is not running."
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "A Hálózatkezelő már fut (pid: %ld)\n"
-#: ../src/main.c:365
-#| msgid "NetworkManager status"
+#: ../src/main.c:324
msgid "Print NetworkManager version and exit"
msgstr "A Hálózatkezelő verziószámának kiírása és kilépés"
-#: ../src/main.c:366
+#: ../src/main.c:325
msgid "Don't become a daemon"
msgstr "Ne démonként fusson"
-#: ../src/main.c:367
+#: ../src/main.c:326
msgid "Make all warnings fatal"
msgstr "Minden figyelmeztetés végzetes legyen"
-#: ../src/main.c:368
+#: ../src/main.c:327
msgid "Specify the location of a PID file"
msgstr "A PID fájl helyének megadása"
-#: ../src/main.c:368
+#: ../src/main.c:327
msgid "filename"
msgstr "fájlnév"
-#: ../src/main.c:369
+#: ../src/main.c:328
msgid "State file location"
msgstr "Ãllapotfájl helye"
-#: ../src/main.c:369
+#: ../src/main.c:328
msgid "/path/to/state.file"
msgstr "/útvonal/állapot.fájl"
-#: ../src/main.c:370
-msgid "Config file location"
-msgstr "Beállítófájl helye"
-
-#: ../src/main.c:370
-msgid "/path/to/config.file"
-msgstr "/útvonal/beállító.fájl"
-
-#: ../src/main.c:371
-msgid "List of plugins separated by ','"
-msgstr "BÅ‘vítmények „,â€-vel elválasztott listája"
-
-#: ../src/main.c:371
-msgid "plugin1,plugin2"
-msgstr "bővítmény1,bővítmény2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:373
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Naplózási szint: az [ERR, WARN, INFO, DEBUG] egyike"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:376
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,BT,MB,"
-"DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,"
-"SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,CORE,"
-"DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL]"
-msgstr ""
-"Naplózási tartományok „,â€-vel elválasztva: az alábbiak tetszÅ‘leges "
-"kombinációja:\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,BT,MB,"
-"DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,"
-"SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,CORE,"
-"DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL]"
-
-#: ../src/main.c:386
+#: ../src/main.c:333
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "A platform nem támogatja a GModule-okat!\n"
-#: ../src/main.c:405
+#: ../src/main.c:353
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2446,44 +2941,43 @@ msgstr ""
"lévő\n"
"vezeték nélküli kártyáknak kapcsolódniuk kell."
-#: ../src/main.c:411
+#: ../src/main.c:359
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Érvénytelen kapcsoló. Az érvényes kapcsolók listájáért használja a --help "
"kapcsolót.\n"
-#: ../src/main.c:421
+#: ../src/main.c:369
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr "A Hálózatkezelő futtatásához rendszergazdai jogosultság szükséges!\n"
-#: ../src/main.c:441
+#: ../src/main.c:401
#, c-format
-#| msgid "Failed to set IV for encryption: %s / %s."
msgid "Failed to read configuration: (%d) %s\n"
msgstr "A beállítások olvasása sikertelen: (%d) %s\n"
-#: ../src/main.c:452
+#: ../src/main.c:412
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. Használja a --help kapcsolót az érvényes kapcsolókért.\n"
-#: ../src/main.c:459
+#: ../src/main.c:419
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "A(z) %s állapotfájl feldolgozása sikertelen: (%d) %s\n"
-#: ../src/main.c:476
+#: ../src/main.c:436
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Nem lehet démon módban elindulni: %s [hiba: %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
msgid "# Created by NetworkManager\n"
msgstr "# Készítette a Hálózatkezelő\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2492,146 +2986,468 @@ msgstr ""
"# Összefésülve ebből: %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "nem található használható DHCP-kliens."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "A „dhclient†nem használható."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "A „dhcpd†nem használható."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "nem támogatott DHCP-kliens („%sâ€)"
-#: ../src/dns-manager/nm-dns-manager.c:376
+#: ../src/dns-manager/nm-dns-manager.c:366
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "MEGJEGYZÉS: a libc feloldó nem támogat háromnál több névkiszolgálót."
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../src/dns-manager/nm-dns-manager.c:368
msgid "The nameservers listed below may not be recognized."
msgstr ""
"Az alább felsorolt névkiszolgálók lehet, hogy nem kerülnek felismerésre."
-#: ../src/logging/nm-logging.c:153
+#: ../src/logging/nm-logging.c:142
#, c-format
msgid "Unknown log level '%s'"
msgstr "Ismeretlen naplózási szint: „%sâ€"
-#: ../src/logging/nm-logging.c:178
+#: ../src/logging/nm-logging.c:188
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Ismeretlen naplózási tartomány: „%sâ€"
-#: ../src/modem-manager/nm-modem-cdma.c:308 ../src/nm-device-bt.c:354
+#: ../src/config/nm-config.c:255
+msgid "Config file location"
+msgstr "Beállítófájl helye"
+
+#: ../src/config/nm-config.c:255
+msgid "/path/to/config.file"
+msgstr "/útvonal/beállító.fájl"
+
+#: ../src/config/nm-config.c:256
+msgid "Config directory location"
+msgstr "Beállítókönyvtár helye"
+
+#: ../src/config/nm-config.c:256
+msgid "/path/to/config/dir"
+msgstr "/útvonal/beállító/könyvtár"
+
+#: ../src/config/nm-config.c:258
+msgid "List of plugins separated by ','"
+msgstr "BÅ‘vítmények „,â€-vel elválasztott listája"
+
+#: ../src/config/nm-config.c:258
+msgid "plugin1,plugin2"
+msgstr "bővítmény1,bővítmény2"
+
+#: ../src/config/nm-config.c:259
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Naplózási szint: az [%s] egyike"
+
+#: ../src/config/nm-config.c:261
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr ""
+"Vesszővel elválasztott naplózási tartományok: [%s] tetszőleges kombinációja"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:265
+msgid "An http(s) address for checking internet connectivity"
+msgstr "http(s) cím az internet elérhetőségének teszteléséhez"
+
+#: ../src/config/nm-config.c:266
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Az elérhetőségi tesztek közti idő (másodpercben)"
+
+#: ../src/config/nm-config.c:267
+msgid "The expected start of the response"
+msgstr "A válasz várt kezdete"
+
+#: ../src/config/nm-config.c:267
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/modem-manager/nm-modem-cdma.c:255
+#: ../src/modem-manager/nm-modem-broadband.c:516 ../src/nm-device-bt.c:331
#, c-format
msgid "CDMA connection %d"
msgstr "%d. CDMA kapcsolat"
-#: ../src/modem-manager/nm-modem-gsm.c:542 ../src/nm-device-bt.c:350
+#: ../src/modem-manager/nm-modem-gsm.c:531
+#: ../src/modem-manager/nm-modem-broadband.c:494 ../src/nm-device-bt.c:327
#, c-format
msgid "GSM connection %d"
msgstr "%d. GSM kapcsolat"
-#: ../src/nm-device-bt.c:325
+#: ../src/nm-device-bond.c:166
+#, c-format
+msgid "Bond connection %d"
+msgstr "%d. bond kapcsolat"
+
+#: ../src/nm-device-adsl.c:197
+#, c-format
+msgid "ADSL connection %d"
+msgstr "%d. ADSL kapcsolat"
+
+#: ../src/nm-device-bridge.c:164
+#, c-format
+msgid "Bridge connection %d"
+msgstr "%d. bridge kapcsolat"
+
+#: ../src/nm-device-bt.c:302
#, c-format
msgid "PAN connection %d"
msgstr "%d. PAN kapcsolat"
-#: ../src/nm-device-bt.c:358
+#: ../src/nm-device-bt.c:335
#, c-format
msgid "DUN connection %d"
msgstr "%d. DUN kapcsolat"
-#: ../src/nm-device-ethernet.c:1382
+#: ../src/nm-device-ethernet.c:1294
#, c-format
msgid "PPPoE connection %d"
msgstr "%d. PPPoE kapcsolat"
-#: ../src/nm-device-ethernet.c:1382 ../src/settings/nm-settings-utils.c:50
+#: ../src/nm-device-ethernet.c:1294 ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "%d. vezetékes kapcsolat"
-#: ../src/nm-device-infiniband.c:332
+#: ../src/nm-device-infiniband.c:270
#, c-format
-#| msgid "Wired connection %d"
msgid "InfiniBand connection %d"
msgstr "%d. InfiniBand kapcsolat"
-#: ../src/nm-device-olpc-mesh.c:323
+#: ../src/nm-device-olpc-mesh.c:304
#, c-format
msgid "Mesh %d"
msgstr "%d. háló"
-#: ../src/nm-manager.c:680
+#: ../src/nm-device-vlan.c:315
+#, c-format
+msgid "VLAN connection %d"
+msgstr "%d. VLAN kapcsolat"
+
+#: ../src/nm-manager.c:751
#, c-format
msgid "VPN connection %d"
msgstr "%d. VPN kapcsolat"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:162 ../src/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:671
#, c-format
msgid "error processing netlink message: %s"
msgstr "hiba a netlink üzenet feldolgozásakor: %s"
-#: ../src/nm-netlink-monitor.c:251
+#: ../src/nm-netlink-monitor.c:265
msgid "error occurred while waiting for data on socket"
msgstr "hiba lépett fel adatokra várakozás közben a foglalaton"
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:310
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"nem lehet kapcsolódni a netlinkhez a kapcsolat állapotának megfigyelése "
"érdekében: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:321
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr ""
"nem engedélyezhető a hálózati kapcsolatkezelő hitelesítési adatainak "
"átadása: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:364 ../src/nm-netlink-monitor.c:424
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
"nem lehet netlink kezelőt lefoglalni a kapcsolat állapotának megfigyelése "
"érdekében: %s"
-#: ../src/nm-netlink-monitor.c:415
+#: ../src/nm-netlink-monitor.c:449
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
"nem lehet netlink kapcsolat-gyorsítótárat lefoglalni a kapcsolat állapotának "
"megfigyelése érdekében: %s"
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:541
#, c-format
msgid "unable to join netlink group: %s"
msgstr "nem lehet csatlakozni a netlink csoporthoz: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
+#: ../src/nm-netlink-monitor.c:647 ../src/nm-netlink-monitor.c:660
#, c-format
msgid "error updating link cache: %s"
msgstr "hiba a kapcsolat gyorsítótárának frissítésekor: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:91
-#: ../src/settings/plugins/ifnet/connection_parser.c:51
+#: ../src/settings/plugins/ifcfg-rh/reader.c:110
msgid "System"
msgstr "Rendszer"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3660
-#| msgid "on"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3664
msgid "Bond"
msgstr "Kapcsolódva"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3852
+msgid "Bridge"
+msgstr "Bridge"
+
+#: ../test/nm-online.c:111
+#, c-format
+msgid "\rConnecting"
+msgstr "\rcsatlakozás"
+
+#: ../test/nm-online.c:142
+msgid "Time to wait for a connection, in seconds (default is 30)"
+msgstr "Kapcsolatra várakozás ennyi ideig, másodpercben (alapérték: 30)"
+
+#: ../test/nm-online.c:143
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "Kilépés azonnal, ha a Hálózatkezelő nem fut vagy nem kapcsolódik"
+
+#: ../test/nm-online.c:144
+msgid "Don't print anything"
+msgstr "Ne írjon ki semmit"
+
+#: ../test/nm-online.c:162
+msgid "Waits for a successful connection in NetworkManager."
+msgstr "A Hálózatkezelő sikeres kapcsolódására vár."
+
+#: ../test/nm-online.c:168 ../test/nm-online.c:177
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"Érvénytelen kapcsoló. Az érvényes kapcsolók listájáért használja a --help "
+"kapcsolót."
+
+#~ msgid "NET-ENABLED"
+#~ msgstr "NET-KÉPES"
+
+#~ msgid "WIFI-HARDWARE"
+#~ msgstr "WIFI-HARDVER"
+
+#~ msgid "WWAN-HARDWARE"
+#~ msgstr "WWAN-HARDVER"
+
+#~ msgid "WIMAX-HARDWARE"
+#~ msgstr "WIMAX-HARDVER"
+
+#~ msgid "Error: Couldn't connect to system bus: %s"
+#~ msgstr "Hiba: nem lehet a rendszerbuszhoz kapcsolódni: %s"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy."
+#~ msgstr "Hiba: nem lehet a D-Bus objektumproxyhoz kapcsolódni."
+
+#~ msgid "Error in sleep: %s"
+#~ msgstr "Hiba az alváskor: %s"
+
+#~| msgid ""
+#~| "Usage: nmcli nm { COMMAND | help }\n"
+#~| "\n"
+#~| " COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+#~| "\n"
+#~| " COMMAND := { status | enable | sleep | wifi | wwan }\n"
+#~| "\n"
+#~| " status\n"
+#~| " enable [true|false]\n"
+#~| " sleep [true|false]\n"
+#~| " wifi [on|off]\n"
+#~| " wwan [on|off]\n"
+#~| " wimax [on|off]\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: nmcli nm { COMMAND | help }\n"
+#~ "\n"
+#~ " COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
+#~ "wimax }\n"
+#~ "\n"
+#~ " COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+#~ "\n"
+#~ " status\n"
+#~ " permissions\n"
+#~ " enable [true|false]\n"
+#~ " sleep [true|false]\n"
+#~ " wifi [on|off]\n"
+#~ " wwan [on|off]\n"
+#~ " wimax [on|off]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: nmcli nm { PARANCS | help }\n"
+#~ "\n"
+#~ " PARANCS := { status | permissions | enable | sleep | wifi | wwan | "
+#~ "wimax }\n"
+#~ "\n"
+#~ " PARANCS := { status | permissions | enable | sleep | wifi | wwan }\n"
+#~ "\n"
+#~ " status\n"
+#~ " permissions\n"
+#~ " enable [true|false]\n"
+#~ " sleep [true|false]\n"
+#~ " wifi [on|off]\n"
+#~ " wwan [on|off]\n"
+#~ " wimax [on|off]\n"
+#~ "\n"
+
+#~ msgid "Networking enabled"
+#~ msgstr "Hálózatkezelés engedélyezve"
+
+#~ msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr ""
+#~ "Hiba: érvénytelen „enable†paraméter: „%sâ€; használja a „true†vagy "
+#~ "„false†egyikét."
+
+#~ msgid "Error: Sleeping status is not exported by NetworkManager."
+#~ msgstr "Hiba: a Hálózatkezelő nem exportálta az alvási állapotot."
+
+#~ msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr ""
+#~ "Hiba: érvénytelen „sleep†paraméter: „%sâ€; használja a „true†vagy "
+#~ "„false†egyikét."
+
+#~ msgid "WiFi enabled"
+#~ msgstr "WiFi engedélyezve"
+
+#~ msgid "Error: invalid 'wifi' parameter: '%s'."
+#~ msgstr "Hiba: érvénytelen „wifi†paraméter: „%sâ€."
+
+#~ msgid "WWAN enabled"
+#~ msgstr "WWAN engedélyezve"
+
+#~ msgid "Error: invalid 'wwan' parameter: '%s'."
+#~ msgstr "Hiba: érvénytelen „wwan†paraméter: „%sâ€."
+
+#~ msgid "WiMAX enabled"
+#~ msgstr "WiMAX engedélyezve"
+
+#~ msgid "Error: invalid 'wimax' parameter: '%s'."
+#~ msgstr "Hiba: érvénytelen „wimax†paraméter: „%sâ€."
+
+#~ msgid "Error: 'nm' command '%s' is not valid."
+#~ msgstr "Hiba: a(z) „%s†„nm†parancs nem érvényes."
+
+#~ msgid "Connection list"
+#~ msgstr "Kapcsolatlista"
+
+#~ msgid "Error: no valid parameter specified."
+#~ msgstr "Hiba: nincs megadva érvényes paraméter."
+
+#~ msgid "Error: Can't find out if NetworkManager is running: %s."
+#~ msgstr "Hiba: nem lehet megállapítani, hogy a Hálózatkezelő fut-e: %s."
+
+#~ msgid "state: %s\n"
+#~ msgstr "állapot: %s\n"
+
+#~ msgid "Connection activated\n"
+#~ msgstr "Kapcsolat aktiválva\n"
+
+#~ msgid "state: %s (%d)\n"
+#~ msgstr "állapot: %s (%d)\n"
+
+#~ msgid "Active connection state: %s\n"
+#~ msgstr "Aktív kapcsolat állapota: %s\n"
+
+#~ msgid "Active connection path: %s\n"
+#~ msgstr "Aktív kapcsolat útvonala: %s\n"
+
+#~ msgid "Error: id or uuid has to be specified."
+#~ msgstr "Hiba: meg kell adni az id vagy uuid egyikét."
+
+#~ msgid "Warning: Connection not active\n"
+#~ msgstr "Figyelmeztetés: a kapcsolat nem aktív\n"
+
+#~ msgid "Error: could not connect to D-Bus."
+#~ msgstr "Hiba: nem lehet a D-Bushoz kapcsolódni."
+
+#~ msgid "Device state: %d (%s)\n"
+#~ msgstr "Eszköz állapota: %d (%s)\n"
+
+#~ msgid "Error: 'nm status': %s"
+#~ msgstr "Hiba: „nm statusâ€: %s"
+
+#~ msgid "Error: 'nm status': %s; allowed fields: %s"
+#~ msgstr "Hiba: „nm statusâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+#~ msgstr ""
+#~ "Hiba: nem sikerült a D-Bus objektumproxyt létrehozni az org.freedesktop."
+#~ "DBus névtérhez"
+
+#~ msgid "Error: NameHasOwner request failed: %s"
+#~ msgstr "Hiba: a NameHasOwner kérés meghiúsult: %s"
+
+#~ msgid "Not enough memory to store PEM file data."
+#~ msgstr "Nincs elég memória a PEM fájl adatainak tárolásához."
+
+#~| msgid "Not enough memory to store certificate data."
+#~ msgid "Not enough memory to store private key data."
+#~ msgstr "Nincs elég memória a személyes kulcs adatainak tárolásához."
+
+#~ msgid "Not enough memory to store certificate data."
+#~ msgstr "Nincs elég memória a tanúsítvány adatainak tárolásához."
+
+#~ msgid "Not enough memory to store the IV."
+#~ msgstr "Nincs elég memória az IV tárolásához."
+
+#~ msgid "Not enough memory to decrypt private key."
+#~ msgstr "Nincs elég memória a személyes kulcs visszafejtéséhez."
+
+#~ msgid "Not enough memory to store decrypted private key."
+#~ msgstr "Nincs elég memória a visszafejtett személyes kulcs tárolásához."
+
+#~ msgid "Not enough memory for decrypted key buffer."
+#~ msgstr "Nincs elég memória a visszafejtett kulcspufferhez."
+
+#~ msgid "Could not allocate memory for encrypting."
+#~ msgstr "Nem sikerült memóriát foglalni a titkosításhoz."
+
+#~ msgid "Not enough memory to make encryption key."
+#~ msgstr "Nincs elég memória titkosítási kulcs készítéséhez."
+
+#~ msgid "Could not allocate memory for PEM file creation."
+#~ msgstr "Nem sikerült memóriát foglalni PEM fájl készítéséhez."
+
+#~ msgid "Could not allocate memory for writing IV to PEM file."
+#~ msgstr "Nem sikerült memóriát foglalni az IV írásához PEM fájlba."
+
+#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
+#~ msgstr ""
+#~ "Nem sikerült memóriát foglalni a titkosított kulcs PEM fájlba írásához."
+
+#~ msgid "Could not allocate memory for PEM file data."
+#~ msgstr "Nem sikerült memóriát foglalni a PEM fájl adatainak."
+
+#~| msgid "Failed to initialize the crypto engine: %d."
+#~ msgid "Failed to initialize SIGTERM pipe: %d"
+#~ msgstr "A SIGTERM adatcsatorna előkészítése meghiúsult: %d"
+
+#~ msgid ""
+#~ "Log domains separated by ',': any combination of\n"
+#~ " [NONE,HW,RFKILL,ETHER,WIFI,BT,"
+#~ "MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,"
+#~ "VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,CORE,"
+#~ "DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL]"
+#~ msgstr ""
+#~ "Naplózási tartományok „,â€-vel elválasztva: az alábbiak tetszÅ‘leges "
+#~ "kombinációja:\n"
+#~ " [NONE,HW,RFKILL,ETHER,WIFI,BT,"
+#~ "MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,"
+#~ "VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,CORE,"
+#~ "DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL]"
+
#~ msgid "Error: Obtaining active connection for '%s' failed."
#~ msgstr "Hiba: az aktív kapcsolat létrehozása meghiúsult ehhez: „%sâ€."
diff --git a/po/id.po b/po/id.po
index 42cc406e0..028833864 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1135,8 +1135,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:380
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:389
msgid "Encrypted: "
diff --git a/po/it.po b/po/it.po
index f90c51bb0..00f56fbe0 100644
--- a/po/it.po
+++ b/po/it.po
@@ -1,364 +1,458 @@
# Italian translation for NetworkManager
-# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 the NetworkManager CopyRight Holder
+# Copyright (C) 2004 - 2011, 2012, 2013, 2014 the NetworkManager CopyRight Holder
# This file is distributed under the same license as the NetworkManager package.
# Francesco Marletta <francesco.marletta@tiscali.it>, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
# Vincenzo Reale <smart2128@baslug.org>, 2011.
-# Milo Casagrande <milo@ubuntu.com>, 2011, 2012, 2013.
+# Milo Casagrande <milo@ubuntu.com>, 2011, 2012, 2013, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: network-manager\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-28 22:52+0100\n"
-"PO-Revision-Date: 2013-01-07 15:42+0100\n"
-"Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
+"POT-Creation-Date: 2014-01-10 09:21+0100\n"
+"PO-Revision-Date: 2014-03-09 17:07+0100\n"
+"Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
-"Language: Italian\n"
+"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Launchpad-Export-Date: 2011-10-23 16:25+0000\n"
-"X-Generator: Launchpad (build 14170)\n"
+"X-Generator: Poedit 1.6.4\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:133
-#: ../cli/src/connections.c:167
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
msgstr "GRUPPO"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "INDIRIZZO"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "INSTRADAMENTO"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMINIO"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPZIONE"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "indirizzo IPv4 «%s» non valido"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "prefisso «%s» non valido; consentito <1-32>"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "gateway «%s» non valido"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "indirizzo IPv6 «%s» non valido"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "prefisso «%s» non valido; consentito <1-128>"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "instradamento IPv4 «%s» non valido"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "prefisso «%s» non valido; consentito <0-32>"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "indirizzo hop successivo «%s» non valido"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "metrica «%s» non valida"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "instradamento IPv6 «%s» non valido"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "prefisso «%s» non valido; consentito <1-128>"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "non gestito"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "non disponibile"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "scollegato"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "connessione in corso (preparazione)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "connessione in corso (configurazione)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "connessione in corso (autenticazione necessaria)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "connessione in corso (acquisizione configurazione IP)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "connessione in corso (verifica connettività IP)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "connessione in corso (avvio connessioni secondarie)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "collegato"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:658
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
msgid "deactivating"
msgstr "disattivazione"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "connessione non riuscita"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:661
-#: ../cli/src/connections.c:684 ../cli/src/connections.c:1376
-#: ../cli/src/devices.c:650 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:629
-#: ../cli/src/settings.c:657 ../cli/src/utils.c:533 ../src/main.c:434
-#: ../src/main.c:453
+#: ../cli/src/common.c:643 ../cli/src/connections.c:737
+#: ../cli/src/connections.c:760 ../cli/src/connections.c:1462
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2252
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1080 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "sconosciuto"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "Nessun motivo specificato"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
msgid "Unknown error"
msgstr "Errore sconosciuto"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "Il dispositivo è ora gestito"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "Il dispositivo non è più gestito"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "Impossibile preparare il dispositivo per la configurazione"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"La configurazione IP non può essere riservata (nessun indirizzo disponibile, "
"timeout...)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "La configurazione IP non è più valida"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "Erano richiesti dei segreti, ma non ne sono stati forniti"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "Supplicant 802.1X scollegato"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "Configurazione supplicant 802.1X non riuscita"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "Supplicant 802.1X non riuscito"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "L'autenticazione del supplicant 802.1X ha impiegato troppo tempo"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "Avvio del servizio PPP non riuscito"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "Servizio PPP non connesso"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "Errore PPP"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "Avvio del client DHCP non riuscito"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "Errore client DHCP"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "Client DHCP non riuscito"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "Avvio del servizio di connessione condivisa non riuscito"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "Servizio connessione condivisa non riuscito"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "Avvio del servizio AutoIP non riuscito"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "Errore servizio AutoIP"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "Servizio AutoIP non riuscito"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "La linea è occupata"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "Nessun segnale di chiamata"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "Impossibile stabilire alcuna portante"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "La richiesta di selezione è scaduta"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "Il tentativo di selezione non è riuscito"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "Inizializzazione modem non riuscita"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "Selezione dell'APN specificato non riuscita"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "Nessuna ricerca attiva di reti"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "Registrazione di rete non consentita"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "Registrazione di rete scaduta"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "Registrazione con la rete richiesta non riuscita"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "Verifica PIN non riuscita"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
-msgstr "Il firmware per il dispositivo potrebbe mancare"
+msgstr ""
+"Il firmware necessario per il dispositivo potrebbe non essere disponibile"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "Il dispositivo è stato rimosso"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager è entrato in pausa"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "La connessione attiva del dispositivo è scomparsa"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "Dispositivo scollegato dall'utente o dal client"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "Modifica di portante/collegamento"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "Considerata la connessione attiva del dispositivo"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "Il supplicant è ora disponibile"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "Impossibile trovare il modem"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "Il collegamento Bluetooth non è riuscito o è scaduto"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
-msgstr "La scheda SIM non è inserita nel model GSM"
+msgstr "La scheda SIM non è inserita nel modem GSM"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
-msgstr "Richiesto il PIN del modem GSM"
+msgstr "Richiesto il PIN della SIM del modem GSM"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
-msgstr "Richiesto il PUK del modem GSM"
+msgstr "Richiesto il PUK della SIM del modem GSM"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "SIM del modem GSM errata"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "Il dispositivo InfiniBand non supporta la modalità collegata"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "Una dipendenza della connessione ha causato un errore"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "Un problema col bridge RFC 2684 Ethernet su ADSL"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager non è disponibile"
-#: ../cli/src/common.c:558
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Impossibile trovare la rete Wi-Fi"
-#: ../cli/src/common.c:561
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr ""
"Si è verificato un errore in una connessione secondaria di quella di base"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:296 ../cli/src/devices.c:314
-#: ../cli/src/devices.c:436 ../cli/src/devices.c:480
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "Setup di DCB o FCoE non riuscito"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "controllo teamd non riuscito"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "Sconosciuto"
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "mappa priorità «%s» non valida"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "priorità «%s» non valida (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "«%s» non è una configurazione di team o un nome di file valido."
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "Nome impostazione? "
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "Nome proprietà? "
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "Digitare il tipo di connessione:"
+
#. 0
#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
-#: ../cli/src/devices.c:108 ../cli/src/devices.c:132 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152 ../cli/src/devices.c:166 ../cli/src/devices.c:180
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:218 ../cli/src/devices.c:227
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:175
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NOME"
#. 0
#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
@@ -366,1077 +460,3139 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
-#: ../cli/src/devices.c:72 ../cli/src/devices.c:110 ../cli/src/devices.c:205
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:201
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TIPO"
#. 2
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REALE"
#. 4
-#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:122
+#. 14
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "CONN-AUTOMATICA"
#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "SOLO LETTURA"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
-#: ../cli/src/devices.c:74 ../cli/src/devices.c:192 ../cli/src/devices.c:208
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "PERCORSO-DBUS"
#. 2
-#: ../cli/src/connections.c:136
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "DISPOSITIVI"
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:117 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATO"
#. 4
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "PREDEFINITO"
#. 5
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:180
msgid "DEFAULT6"
msgstr "PREDEFINITO6"
#. 6
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OGGETTO"
#. 7
-#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#. 4
+#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:344
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:143
+#. 5
+#. 18
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "PERCORSO-CON"
#. 10
-#: ../cli/src/connections.c:144
+#: ../cli/src/connections.c:185
msgid "ZONE"
msgstr "ZONA"
#. 11
-#: ../cli/src/connections.c:145
+#: ../cli/src/connections.c:186
msgid "MASTER-PATH"
msgstr "PERCORSO-MASTER"
-#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
-msgid "GENERAL"
-msgstr "GENERALE"
-
-#. 0
-#: ../cli/src/connections.c:154
-msgid "IP"
-msgstr "IP"
-
#. 1
-#: ../cli/src/connections.c:169
+#: ../cli/src/connections.c:202
msgid "USERNAME"
msgstr "NOMEUTENTE"
#. 2
-#: ../cli/src/connections.c:170
+#: ../cli/src/connections.c:203
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:171
+#: ../cli/src/connections.c:204
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:172
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
msgstr "STATO-VPN"
#. 5
-#: ../cli/src/connections.c:173
+#: ../cli/src/connections.c:206
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:195
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GENERALE"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:255
#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
-"Uso: nmcli connection { COMANDO | help }\n"
-" COMANDO := { list | status | up | down | delete }\n"
+"Uso: mmcli connection { COMANDO | help }\n"
+"\n"
+" COMANDO := { show | up | down | delete }\n"
+"\n"
+" show configured [[id | uuid | path ] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [id | uuid | path] <ID> [ifname <nomeif>] [ap <BSSID>] [nsp <nome>]\n"
+"\n"
+" up [id | uuid | path] <ID> [ifname <nomeif>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add OPZIONI_COMUNI OPZIONI_SPECIFICHE OPZIONI_IP\n"
+"\n"
+" modify [id | uuid | path] <ID> <impostazione>.<proprietà> <valore>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <tipo_nuova_conn>] [con-name <nome_nuova_conn>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <nomefile> [<nomefile>...]\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <percorso>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:634
+#: ../cli/src/connections.c:278
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Errore: «con list»: %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Show connections which are currently used by a device to connect to a "
+"network.\n"
+"Without a parameter, all active connections are listed. When <ID> is "
+"provided,\n"
+"the connection details are displayed instead.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Show in-memory and on-disk connections, some of which may also be active if\n"
+"a device is using that connection profile. Without a parameter, all "
+"profiles\n"
+"are listed. When <ID> is provided, the profile details are displayed "
+"instead.\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection show { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Mostra le connessione che sono usate da un device per connettersi a una "
+"rete.\n"
+"Senza alcun parametro, vengono mostrate tutte le connessioni attive. Quando\n"
+"viene specificato <ID>, vengono mostrati i dettagli per quella connessione.\n"
+"\n"
+"ARGOMENTI := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Mostra le connessioni in memoria e sul disco: alcune possono essere attive "
+"se\n"
+"un device sta usando quel profilo di connessione. Senza alcun parametro, "
+"sono\n"
+"mostrati tutti i profili. Quando viene specificato <ID>, vengono mostrati i\n"
+"dettagli del profilo.\n"
+"\n"
+
+#: ../cli/src/connections.c:297
+#, c-format
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection up { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [id | uuid | path] <ID> [ifname <nomeif>] [ap <BSSID>]\n"
+" [nsp <nome>]\n"
+"Attiva una connessione su un device. Il profilo da attivare è identificato\n"
+"tramite il suo nome, UUID o percorso D-Bus.\n"
+"\n"
+"ARGOMENTI := ifname <nomeif> [ap <BSSID>] [nsp <nome>]\n"
+"\n"
+"Attiva un device con una connessione. Il profilo della connessione viene\n"
+"selezionato automaticamente.\n"
+"\n"
+"nomeif - Indica il device su cui attivare la connessione\n"
+"ap - Indica lo access point a cui connettersi (solo per Wi-Fi)\n"
+"nsp - Indica lo NSP a cui connettersi (solo per WiMAX)\n"
+"\n"
+
+#: ../cli/src/connections.c:318
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection down { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Disattiva una connessione da un device (facendo in modo che il device non "
+"possa\n"
+"più connettersi automaticamente). Il profilo da disattivare è identificato\n"
+"tramite il suo nome, UUID o percorso D-Bus.\n"
+"\n"
+
+#: ../cli/src/connections.c:331
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection add { OPZIONI | help }\n"
+"\n"
+" OPZIONI := OPZIONI_COMUNI OPZIONI_SPECIFICHE OPZIONI_IP\n"
+"\n"
+" OPZIONI_COMUNI:\n"
+" type <tipo>\n"
+" ifname <nome interfaccia>\n"
+" [con-name <nome connessione>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" OPZIONI_SPECIFICHE:\n"
+" ethernet: [mac <indirizzo MAC>]\n"
+" [cloned-mac <indirizzo MAC clonato>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <indirizzo MAC>]\n"
+" [cloned-mac <indirizzo MAC clonato>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <indirizzo MAC>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <nome utente PPPoE>\n"
+" [password <password PPPoE>]\n"
+" [service <nome servizio PPPoE>]\n"
+" [mtu <MTU>]\n"
+" [mac <indirizzo MAC>]\n"
+"\n"
+" gsm: apn <APN>]\n"
+" [user <nome utente>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <nome utente>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <indirizzo MAC>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode <modalità>]\n"
+" [parent <ifname>]\n"
+" [p-key <P_Key IPoIB>]\n"
+"\n"
+" bluetooth: [addr <indirizzo bluetooth>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <dispositivo genitore (UUID connessione, ifname o "
+"MAC)\n"
+" [id <id VLAN>]\n"
+" [flags <flag VLAN>]\n"
+" [ingress <corrispondenza priorità ingress>]\n"
+" [egress <corrispondenza priorità egress>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"|\n"
+" broadcast (3) | 802.3ad (4) | balance-tlb (5) "
+"|\n"
+" balance-alb (6)]\n"
+" [primary <nomeif>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp_interval <num>]\n"
+" [arp_ip_traget <num>]\n"
+"\n"
+" bond-slave: master <master (ifname o UUID connessione)\n"
+"\n"
+" team: [config <configurazione json>]\n"
+"\n"
+" team-slave: master <master (ifname o UUID connessione)\n"
+" [config <file>|<dati JSON>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname o UUID connessione)\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <nome utente>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <indirizzo MAC>]\n"
+"\n"
+" OPZIONI_IP:\n"
+" [ip4 <indirizzo IPv4>] [gw4 <gateway IPv4>]\n"
+" [ip6 <indirizzo IPv6>] [gw6 <gateway IPv6>]\n"
+"\n"
+
+#: ../cli/src/connections.c:408
+#, c-format
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection modify { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [id | uuid | path] <ID> <nome imp.>.<nome prop.> [<valore>]\n"
+"\n"
+"Modifica una proprietà nel profilo di connessione.\n"
+"Il profilo viene identificato tramite il suo nome, UUID o percorso D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:636
+#: ../cli/src/connections.c:420
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Errore: «con list»: %s; campi consentiti: %s"
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection edit { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [id | uuid | path] <ID>\n"
+"\n"
+"Modifica un profilo di connessione esistente con un editor interattivo.\n"
+"Il profile viene identificato tramite il suo nome, UUID o percorso D-Bus.\n"
+"\n"
+"ARGOMENTI := [type <nuovo tipo connessione>] [con-name <nome connessione>]\n"
+"\n"
+"Aggiunge un nuovo profilo di connessione con un editor interattivo.\n"
+"\n"
-#: ../cli/src/connections.c:266
+#: ../cli/src/connections.c:436
+#, c-format
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection delete { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [id | uuid | path] <ID>\n"
+"\n"
+"Elimina un profilo di connessione.\n"
+"Il profilo viene identificato tramite il suo nome, UUID o percorso D-Bus.\n"
+"\n"
+
+#: ../cli/src/connections.c:448
+#, c-format
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection reload { help }\n"
+"\n"
+"Ricarica tutti i file della connessione dal disco.\n"
+"\n"
+
+#: ../cli/src/connections.c:457
+#, c-format
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"Uso: mmcli connection load { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := <nomefile> [<nomefile>...]\n"
+"\n"
+"Carica/Ricarica uno o più file di connessione dal disco. Usare questo "
+"comando\n"
+"dopo aver modificato manualmente un file di connessione per assicurarsi che\n"
+"NetworkManager consideri le nuove modifiche.\n"
+"\n"
+
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "Errore: «list configured»: %s"
+
+#. Main header
+#: ../cli/src/connections.c:523
msgid "Connection details"
msgstr "Dettagli connessione"
-#: ../cli/src/connections.c:509
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "mai"
#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:510 ../cli/src/connections.c:511
-#: ../cli/src/connections.c:739 ../cli/src/connections.c:740
-#: ../cli/src/connections.c:742 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:748 ../cli/src/settings.c:823
-#: ../cli/src/settings.c:943 ../cli/src/settings.c:1226
-#: ../cli/src/settings.c:1227 ../cli/src/settings.c:1229
-#: ../cli/src/settings.c:1231 ../cli/src/settings.c:1232
-#: ../cli/src/settings.c:1363 ../cli/src/settings.c:1364
-#: ../cli/src/settings.c:1365 ../cli/src/settings.c:1366
-#: ../cli/src/settings.c:1443 ../cli/src/settings.c:1444
-#: ../cli/src/settings.c:1445 ../cli/src/settings.c:1446
-#: ../cli/src/settings.c:1447 ../cli/src/settings.c:1448
-#: ../cli/src/settings.c:1449 ../cli/src/settings.c:1450
-#: ../cli/src/settings.c:1451 ../cli/src/settings.c:1452
-#: ../cli/src/settings.c:1453 ../cli/src/settings.c:1454
-#: ../cli/src/settings.c:1455 ../cli/src/settings.c:1526
-#: ../cli/src/settings.c:1869 ../cli/src/settings.c:1906
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:442
msgid "yes"
msgstr "sì"
-#: ../cli/src/connections.c:510 ../cli/src/connections.c:511
-#: ../cli/src/connections.c:739 ../cli/src/connections.c:740
-#: ../cli/src/connections.c:742 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:748 ../cli/src/settings.c:750
-#: ../cli/src/settings.c:823 ../cli/src/settings.c:943
-#: ../cli/src/settings.c:1226 ../cli/src/settings.c:1227
-#: ../cli/src/settings.c:1229 ../cli/src/settings.c:1231
-#: ../cli/src/settings.c:1232 ../cli/src/settings.c:1363
-#: ../cli/src/settings.c:1364 ../cli/src/settings.c:1365
-#: ../cli/src/settings.c:1366 ../cli/src/settings.c:1443
-#: ../cli/src/settings.c:1444 ../cli/src/settings.c:1445
-#: ../cli/src/settings.c:1446 ../cli/src/settings.c:1447
-#: ../cli/src/settings.c:1448 ../cli/src/settings.c:1449
-#: ../cli/src/settings.c:1450 ../cli/src/settings.c:1451
-#: ../cli/src/settings.c:1452 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1454 ../cli/src/settings.c:1455
-#: ../cli/src/settings.c:1526 ../cli/src/settings.c:1869
-#: ../cli/src/settings.c:1906
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:444
msgid "no"
msgstr "no"
-#: ../cli/src/connections.c:585
-msgid "Connection list"
-msgstr "Elenco connessioni"
-
-#: ../cli/src/connections.c:598 ../cli/src/connections.c:1135
-#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1688
-#: ../cli/src/connections.c:1697 ../cli/src/connections.c:1707
-#: ../cli/src/connections.c:1719 ../cli/src/connections.c:1828
-#: ../cli/src/connections.c:1930 ../cli/src/devices.c:1127
-#: ../cli/src/devices.c:1137 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1263 ../cli/src/devices.c:1627
-#: ../cli/src/devices.c:1634 ../cli/src/devices.c:1648
-#: ../cli/src/devices.c:1655 ../cli/src/devices.c:1672
-#: ../cli/src/devices.c:1683 ../cli/src/devices.c:1904
-#: ../cli/src/devices.c:1911
+#. Add headers
+#: ../cli/src/connections.c:667
+msgid "List of configured connections"
+msgstr "Elenco delle connessioni configurate"
+
+#: ../cli/src/connections.c:684 ../cli/src/connections.c:1225
+#: ../cli/src/connections.c:1785 ../cli/src/connections.c:1801
+#: ../cli/src/connections.c:1810 ../cli/src/connections.c:1820
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:7503
+#: ../cli/src/connections.c:7678 ../cli/src/devices.c:1628
+#: ../cli/src/devices.c:1636 ../cli/src/devices.c:2023
+#: ../cli/src/devices.c:2030 ../cli/src/devices.c:2044
+#: ../cli/src/devices.c:2051 ../cli/src/devices.c:2068
+#: ../cli/src/devices.c:2076 ../cli/src/devices.c:2272
+#: ../cli/src/devices.c:2368 ../cli/src/devices.c:2375
#, c-format
msgid "Error: %s argument is missing."
msgstr "Errore: manca l'argomento %s."
-#: ../cli/src/connections.c:611
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "Errore: %s - la connessione non esiste."
-#: ../cli/src/connections.c:617 ../cli/src/connections.c:1732
-#: ../cli/src/connections.c:1845 ../cli/src/connections.c:1937
-#: ../cli/src/devices.c:911 ../cli/src/devices.c:991 ../cli/src/devices.c:1151
-#: ../cli/src/devices.c:1269 ../cli/src/devices.c:1696
-#: ../cli/src/devices.c:1917
+#: ../cli/src/connections.c:710
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Parametro sconosciuto: %s\n"
-
-#: ../cli/src/connections.c:626
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Errore: non è stato specificato alcun parametro valido."
+msgid "Error: 'show configured': %s"
+msgstr "Errore: «show configured»: %s"
-#: ../cli/src/connections.c:641 ../cli/src/connections.c:2033
-#: ../cli/src/devices.c:2128 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:715 ../cli/src/connections.c:1853
+#: ../cli/src/connections.c:7744 ../cli/src/connections.c:7785
+#: ../cli/src/connections.c:7937 ../cli/src/devices.c:2251
+#: ../cli/src/devices.c:2625 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
msgid "Error: %s."
msgstr "Errore: %s."
-#: ../cli/src/connections.c:654
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "attivazione"
-#: ../cli/src/connections.c:656
+#: ../cli/src/connections.c:730
msgid "activated"
-msgstr "attivato"
+msgstr "attivata"
+
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "disattivata"
-#: ../cli/src/connections.c:670
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "Connessione VPN (preparazione)"
-#: ../cli/src/connections.c:672
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "Connessione VPN (autenticazione necessaria)"
-#: ../cli/src/connections.c:674
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "Connessione VPN"
-#: ../cli/src/connections.c:676
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "Connessione VPN (acquisizione configurazione IP)"
-#: ../cli/src/connections.c:678
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "Connessi alla VPN"
-#: ../cli/src/connections.c:680
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "Connessione VPN non riuscita"
-#: ../cli/src/connections.c:682
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "Disconnessi dalla VPN"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:745
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "N/D"
-#: ../cli/src/connections.c:939 ../cli/src/connections.c:1163
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Errore: «con status»: %s"
-
-#: ../cli/src/connections.c:941 ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:1012
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Errore: «con status»: %s; campi consentiti: %s"
+msgid "Error: 'list active': %s"
+msgstr "Errore: «list active»: %s"
-# [NdT] si tratta di un messaggio che descrive un'azione
-#: ../cli/src/connections.c:949
+# [NdT] si tratta di un messaggio che descrive un’azione
+#. Main header
+#: ../cli/src/connections.c:1020
msgid "Active connection details"
msgstr "Dettagli connessione attiva"
-#: ../cli/src/connections.c:1085 ../cli/src/connections.c:1747
-#: ../cli/src/connections.c:1860 ../cli/src/connections.c:1951
-#: ../cli/src/devices.c:938 ../cli/src/devices.c:1000
-#: ../cli/src/devices.c:1166 ../cli/src/devices.c:1299
-#: ../cli/src/devices.c:1718 ../cli/src/devices.c:1946
-#: ../cli/src/network-manager.c:311
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Errore: impossibile determinare se NetworkManager è in esecuzione: %s."
-
-#: ../cli/src/connections.c:1089 ../cli/src/connections.c:1751
-#: ../cli/src/connections.c:1864 ../cli/src/connections.c:1955
-#: ../cli/src/devices.c:942 ../cli/src/devices.c:1004
-#: ../cli/src/devices.c:1170 ../cli/src/devices.c:1303
-#: ../cli/src/devices.c:1722 ../cli/src/devices.c:1950
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:1899 ../cli/src/connections.c:7532
+#: ../cli/src/connections.c:7647 ../cli/src/connections.c:7738
+#: ../cli/src/connections.c:7766 ../cli/src/devices.c:1195
+#: ../cli/src/devices.c:1242 ../cli/src/devices.c:1398
+#: ../cli/src/devices.c:1533 ../cli/src/devices.c:1670
+#: ../cli/src/devices.c:2110 ../cli/src/devices.c:2409
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Errore: NetworkManager non è in esecuzione."
-# [NdT] si tratta di un messaggio che descrive un'azione
-#: ../cli/src/connections.c:1121
-msgid "Active connections"
-msgstr "Connessioni attive"
+#. Add headers
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "Elenco delle connessioni attive"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "Errore: «%s» non è una connessione attiva."
-#: ../cli/src/connections.c:1151
+#: ../cli/src/connections.c:1251
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "Errore: parametro sconosciuto: %s"
+msgid "Error: 'show active': %s"
+msgstr "Errore: «show active»: %s"
-#: ../cli/src/connections.c:1258
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "nessuna connessione attiva sul dispositivo «%s»"
-#: ../cli/src/connections.c:1266
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "nessuna connessione o dispositivo attivo"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "dispositivo «%s» non compatibile con la connessione «%s»"
-#: ../cli/src/connections.c:1340
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "nessun dispositivo trovato per la connessione «%s»"
-#: ../cli/src/connections.c:1352
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "motivo sconosciuto"
-#: ../cli/src/connections.c:1354
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "nessuno"
-#: ../cli/src/connections.c:1356
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "l'utente è stato scollegato"
-#: ../cli/src/connections.c:1358
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "la connessione di rete di base è stata interrotta"
-#: ../cli/src/connections.c:1360
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "il servizio VPN si è arrestato inaspettatamente"
-#: ../cli/src/connections.c:1362
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "il servizio VPN ha restituito una configurazione non valida"
-#: ../cli/src/connections.c:1364
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "il tentativo di connessione è scaduto"
-#: ../cli/src/connections.c:1366
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "il servizio VPN non è stato avviato in tempo"
-#: ../cli/src/connections.c:1368
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "l'avvio del servizio VPN non è riuscito"
-#: ../cli/src/connections.c:1370
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "nessun segreto VPN valido"
-#: ../cli/src/connections.c:1372
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "segreti VPN non validi"
-#: ../cli/src/connections.c:1374
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "la connessione è stata rimossa"
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1596
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "Connessione attivata con successo (percorso D-Bus attivo: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1396 ../cli/src/connections.c:1497
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "Errore: attivazione connessione non riuscita."
-#: ../cli/src/connections.c:1421
+#: ../cli/src/connections.c:1507
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "Connessione VPN attivata con successo (percorso D-Bus attivo: %s)\n"
-#: ../cli/src/connections.c:1429
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Errore: attivazione connessione non riuscita: %s."
-#: ../cli/src/connections.c:1526 ../cli/src/devices.c:1060
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1289
#, c-format
msgid "Error: Timeout %d sec expired."
-msgstr "Errore: timeout, %d sec scaduti."
+msgstr "Errore: timeout, sono trascorsi %d secondi."
+
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Errore: il dispositivo «%s» è in attesa degli slave prima di poter procedere "
+"con l'attivazione."
-#: ../cli/src/connections.c:1587
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Errore: attivazione connessione non riuscita: %s"
-#: ../cli/src/connections.c:1681 ../cli/src/connections.c:1836
-#: ../cli/src/connections.c:1964
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "errore sconosciuto"
+
+#: ../cli/src/connections.c:1730
+#, c-format
+msgid "unknown device '%s'."
+msgstr "dispositivo «%s» sconosciuto."
+
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "non sono stati forniti un dispositivo e una connessione validi"
+
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7654
+msgid "Connection (name, UUID, or path): "
+msgstr "Connessione (nome, UUID o percorso): "
+
+#: ../cli/src/connections.c:1829 ../cli/src/devices.c:1169
+#: ../cli/src/devices.c:1642 ../cli/src/devices.c:2087
+#: ../cli/src/devices.c:2381
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Parametro sconosciuto: %s\n"
+
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "preparazione"
+
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7659
+#: ../cli/src/connections.c:7772
+#, c-format
+msgid "Error: No connection specified."
+msgstr "Errore: nessuna connessione specificata."
+
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
+#, c-format
+msgid "'%s' not among [%s]"
+msgstr "«%s» non tra [%s]"
+
+#: ../cli/src/connections.c:2319
+#, c-format
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Errore: «%s»: «%s» non è un indirizzo MAC %s valido."
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "Ethernet"
+
+#: ../cli/src/connections.c:2343
+#, c-format
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Errore: «mtu»: «%s» non è un MTU valido."
+
+#: ../cli/src/connections.c:2359
+#, c-format
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Errore: «parent»: «%s» non è un'interfaccia valida."
+
+#: ../cli/src/connections.c:2380
+#, c-format
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Errore: «p-key»: «%s» non è un P_KEY InfiniBand valido."
+
+#: ../cli/src/connections.c:2396
+#, c-format
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"Error: «mode»: «%s» non è una modalità di trasporto InfiniBand valida "
+"[datagram, connected]."
+
+#: ../cli/src/connections.c:2412
+#, c-format
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Errore: «flags»: «%s» non è valido; usare <0-7>."
+
+#: ../cli/src/connections.c:2434
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Errore: «%s»: «%s» non è valido; %s "
+
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Errore: «%s»: «%s» non è valido; usare <%u-%u>."
+
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ethernet"
+
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "Ci sono 3 argomenti opzionali per il tipo di connessione «%s».\n"
+
+#: ../cli/src/connections.c:2559 ../cli/src/connections.c:2613
+#: ../cli/src/connections.c:2735 ../cli/src/connections.c:2781
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:2909
+#: ../cli/src/connections.c:3072 ../cli/src/connections.c:3168
+#: ../cli/src/connections.c:3250
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "Fornirli? (sì/no) [sì] "
+
+#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
+#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
+
+#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
+#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+msgid "MAC [none]: "
+msgstr "MAC [nessuno]: "
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "MAC clonato [nessuno]: "
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr ""
+"Ci sono 5 argomenti opzionali per il tipo di connessione «InfiniBand».\n"
+
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "Modalità trasporto (datagram o connected) [datagram]: "
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "Interfaccia genitore [nessuna]: "
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [nessuno]: "
+
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "Errore: «p-key» è obbligatorio quanto «parent» è specificato.\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "C'è un argomento opzionale per il tipo di connessione «WiMax».\n"
+
+#: ../cli/src/connections.c:2703 ../cli/src/connections.c:2805
+#: ../cli/src/connections.c:3024 ../cli/src/connections.c:3226
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "Fornirlo? (sì/no) [sì] "
+
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "Ci sono 4 argomenti opzionali per il tipo di connessione «PPPoE».\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "Password [nessuna]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "Servizio [nessuno]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr ""
+"Ci sono 2 argomenti opzionali per il tipo di connessione «mobile "
+"broadband».\n"
+
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "Nome utente [nessuno]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "C'è un argomento opzionale per il tipo di connessione «Bluetooth».\n"
+
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Tipo di Bluetooth (panu, dun-gsm o dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Errore: «bt-type»: «%s» non è una tipologia di Bluetooth valida.\n"
+
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "Ci sono 4 argomenti opzionali per il tipo di connessione «VLAN».\n"
+
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "Flag VLAN (<0-7>) [nessuno]: "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "Mappe priorità ingress [nessuna]: "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Mappe priorità egress [nessuna]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "Ci sono argomenti opzionali per il tipo di connessione «bond».\n"
+
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "Modalità di aggregazione [balance-rr]: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "Interfaccia principale di aggregazione [nessuna]: "
+
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Errore: «primary»: «%s» non è un nome d'interfaccia valido.\n"
+
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "Modalità monitoraggio di aggregazione (miimon o arp) [miimon]: "
+
+#: ../cli/src/connections.c:2950
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"Errore: «%s» non è una modalità di monitoraggio valida; usare «%s» o «%s».\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "Miimon di aggregazione [100]: "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Errore: «miimon»: «%s» non è un numero valido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "Downdelay di aggregazione [0]: "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Errore: «downdelay»: «%s» non è un numero valido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "Updelay di aggregazione [0]: "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Errore: «updelay»: «%s» non è un numero valido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "Arp-interval di aggregazione [0]: "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Errore: «arp-interval»: «%s» non è un numero valido <0-%u>.\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "Arp-ip-target di aggregazione [nessuno]: "
+
+#. Ask for optional 'team' arguments.
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "C'è un argomento opzionale per il tipo di connessione «%s».\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "Configurazione JSON team [nessuna]: "
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "team"
+
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "team-slave"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "Ci sono 6 argomenti opzionali per il tipo di connessione «bridge».\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "Abilitare STP (sì/no) [sì]: "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "Errore: «stp»: «%s».\n"
+
+#: ../cli/src/connections.c:3093
+msgid "STP priority [128]: "
+msgstr "Priorità STP [128]: "
+
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Errore: «priority»: «%s» non è un numero valido <0-%d>.\n"
+
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "Forward delay [15]: "
+
+#: ../cli/src/connections.c:3109
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Errore: «forward-dealy»: «%s» non è un numero valido <2-30>.\n"
+
+#: ../cli/src/connections.c:3118
+msgid "Hello time [2]: "
+msgstr "Hello time [2]: "
+
+#: ../cli/src/connections.c:3122
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Errore: «hello-time»: «%s» non è un numero valido <1-10>.\n"
+
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "Età massima [20]: "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Errore: «max-age»: «%s» non è un numero valido <6-40>.\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "Tempo invecchiamento indirizzo MAC [300]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Errore: «ageing-time»: «%s» non è un numero valido <0-1000000>.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3167
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr ""
+"Ci sono 3 argomenti opzionali per il tipo di connessione «bridge-slave».\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "Priorità porta bridge [32]: "
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "Costo percorso STP porta bridge [100]: "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (sì/no) [sì]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "Errore: «hairpin»: «%s».\n"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "C'è un argomento opzionale per il tipo di connessione «VPN».\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr ""
+"Ci sono 2 argomenti opzionali per il tipo di connessione «Mesh OLPC».\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "Canale mesh OLPC [1]: "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Errore: «channel»: «%s» non è un numero valido <1-13>.\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "Indirizzo MAC DHCP anycast [nessuno]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "Indirizzo IPv4 (IP[/plen] [gateway]) [nessuno]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "Indirizzo IPv6 (IP[/plen] [gateway]) [nessuno]: "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " Indirizzo aggiunto con successo: %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Attenzione: indirizzo già presente: %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Attenzione: ignorati i dati non necessari alla fine: «%s»\n"
+
+#: ../cli/src/connections.c:3343 ../cli/src/connections.c:4192
+#: ../cli/src/connections.c:4247 ../cli/src/connections.c:4646
+#: ../cli/src/connections.c:4656
+msgid "Error: "
+msgstr "Errore: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "Aggiungere indirizzi IP? (sì/no) [sì]"
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "Premere Invio per terminare l'immissione di indirizzi.\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Errore: «parent»: non valido senza «p-key»."
+
+#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+msgid "Error: 'ssid' is required."
+msgstr "Errore: è richiesto «ssid»."
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "Nome NSP WiMAX: "
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "Errore: è richiesto «nsp»."
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "Nome utente PPPoE:"
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "Errore: è richiesto «username»."
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "Errore: è richiesto «apn»."
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "Indirizzo dispositivo Bluetooth: "
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "Errore: è richiesto «addr»."
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "Errore: «bt-type»: «%s» non valido; usare [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "Dispositivo genitore VLAN o UUID di connessione:"
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "Errore: è richiesto «dev»."
+
+#: ../cli/src/connections.c:3928
+msgid "VLAN ID <0-4095>: "
+msgstr "ID VLAN <0-4095>: "
+
+#: ../cli/src/connections.c:3931
+msgid "Error: 'id' is required."
+msgstr "Errore: è richiesto «id»."
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Errore: «id»: «%s» non è valido; usare <0-4095>."
+
+#: ../cli/src/connections.c:3947
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr ""
+"Errore: «dev»: «%s» non è né uno UUID né il nome di un'interfaccia né un MAC."
+
+#: ../cli/src/connections.c:4082
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "Errore: «mode»: %s"
+
+#: ../cli/src/connections.c:4091
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Errore: «primary»: «%s» non è un nome valido di interfaccia."
+
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "Bond master: "
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "Errore: è richiesto «master»."
+
+#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
+#: ../cli/src/connections.c:4427
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Attenzione: «type» è attualmente ignorato. Al momento sono supportati "
+"solamente slave Ethernet.\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "Team master: "
+
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "Errore: «stp»: %s."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "Bridge master: "
+
+#: ../cli/src/connections.c:4421
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "Errore: «master»: «%s» non è né un UUID né un'interfaccia valido"
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "Errore: «hairpin»: %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "Tipo di VPN: "
+
+#: ../cli/src/connections.c:4509
+msgid "Error: 'vpn-type' is required."
+msgstr "Errore: è richiesto «vpn-type»."
+
+#: ../cli/src/connections.c:4520
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "Errore: «vpn-type»: %s."
+
+#: ../cli/src/connections.c:4578
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Errore: connessione sconosciuta: %s."
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Errore: «channel»: «%s» non è valido; usare <1-13>."
-#: ../cli/src/connections.c:1727 ../cli/src/devices.c:1145
-#: ../cli/src/devices.c:1691
+#: ../cli/src/connections.c:4613
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Errore: il valore di timeout «%s» non è valido."
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Errore: «%s» non è tipo di connessione valido."
-#: ../cli/src/connections.c:1740 ../cli/src/connections.c:1853
-#: ../cli/src/connections.c:1944
+#: ../cli/src/connections.c:4711
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Errore: specificare id o uuid."
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Errore: aggiunta della connessione «%s» non riuscita: (%d) %s"
-#: ../cli/src/connections.c:1773
+#: ../cli/src/connections.c:4715
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Errore: nessun dispositivo idoneo trovato: %s."
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Connessione «%s» (%s) aggiunta con successo.\n"
-#: ../cli/src/connections.c:1775
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "Tipo di connessione:"
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Errore: è richiesto l'argomento «type»."
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Errore: tipo di connessione non valido; %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Errore: «autoconnect»: %s."
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "Nome interfaccia [*]: "
+
+#: ../cli/src/connections.c:4801
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "Errore: è richiesto l'argomento «ifname»."
+
+#: ../cli/src/connections.c:4808
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Errore: nessun dispositivo idoneo trovato."
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Errore: «ifname»: «%s» e «*» non sono interfacce valide."
-#: ../cli/src/connections.c:1889
+#: ../cli/src/connections.c:5627
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Attenzione: connessione non attiva\n"
+msgid "['%s' setting values]\n"
+msgstr "[impostazione valori di «%s»]\n"
-#: ../cli/src/connections.c:1903
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5708
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Menù principale ]---\n"
+"goto [<impostazione> | <prop>] :: Va a un'impostazione o proprietà\n"
+"remove <impostazione>[.<prop>] | <prop>\n"
+" :: Rimuove impostazione o "
+"ripristina\n"
+" il valore di una proprietà\n"
+"set [<impostazione>.<prop> <val>] :: Imposta il valore della "
+"proprietà\n"
+"describe [<impostazione>.<prop>] :: Descrive la proprietà\n"
+"print [all] :: Stampa la connessione\n"
+"verify [all] :: Verifica la connessione\n"
+"save :: Salva la connessione\n"
+"activate [<nomeif>] [/<ap>|<nsp>] :: Attiva la connessione\n"
+"back :: Va al livello superiore "
+"(indietro)\n"
+"help/? [<comando>] :: Mostra questo aiuto\n"
+"mmcli <opzione-conf> <val> :: Configurazione di nmcli\n"
+"quit :: Esce da nmcli\n"
+
+#: ../cli/src/connections.c:5735
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <impostazione>[.<prop>] | <prop> :: Va a impostazione/proprietà\n"
+" per la modifica\n"
+"\n"
+"Questo comando entra in un'impostazione o proprietà per modificarla.\n"
+"\n"
+"Esempi: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5742
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <impostazione>[.<prop>] :: Rimuove impostazione o ripristina il "
+"valore della propriet¡a\n"
+"\n"
+"Questo comando rimuove completamente un'impostazione dall connessione o, "
+"seviene fornita una proprietà, la reimposta al valore predefinito.\n"
+"\n"
+"Esempi: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5749
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<impostazione>.<prop> <val>] :: Imposta il valore della proprietà\n"
+"\n"
+"Questo comando imposta il valore della proprietà.\n"
+"\n"
+"Esempio: nmcli> set con.id La mia connessione\n"
+
+#: ../cli/src/connections.c:5754
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<impostazione>.<prop>] :: Descrive la proprietà\n"
+"\n"
+"Mostra la descrizione della proprietà. Per maggiori informazioni su tutte "
+"le\n"
+"impostazioni e proprietà di NM, consultare la pagina di manuale nm-"
+"settings(5).\n"
+
+#: ../cli/src/connections.c:5759
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: Stampa i valori dell'impostazione o della connessione\n"
+"\n"
+"Mostra la proprietà corrente o la connessione.\n"
+"\n"
+"Esempio: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5764
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: Verifica la validità dell'impostazione o della connessione\n"
+"\n"
+"Verifica se l'impostazione o la connessione è valida e può essere salvata.\n"
+"Indica i valori non validi in caso di errore.\n"
+"\n"
+"Esempi: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5771
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: Salva la connessione\n"
+"\n"
+"Invia la connessione a NetworkManager per salvarla.\n"
+
+#: ../cli/src/connections.c:5775
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<nomeif>] [/<ap>|<nsp>] :: attiva la connessione\n"
+"\n"
+"Attiva la connessione.\n"
+"\n"
+"Opzioni disponibili:\n"
+"<nomeif> - Device su cui la connessione verrà attivata\n"
+"/<ap>|<nsp> - AP (Wi-Fi) o NSP (WiMAX) (iniziare con / quando "
+"<ifname> non è specificato)\n"
+
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: Va al livello superiore del menù\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<comando>] :: Aiuto per i comandi nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:5788
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<opzione-conf> <val>] :: Configurazione di nmcli\n"
+"\n"
+"Configure nmcli. Sono disponibile le seguenti opzioni:\n"
+"status-line yes | no [predefinito: no]\n"
+"save-confirmation yes | no [predefinito: yes]\n"
+"prompt-color <0-8> [predefinito: 0]\n"
+" 0 = normale\n"
+" 1 = nero\n"
+" 2 = rosso\n"
+" 3 = verde\n"
+" 4 = giallo\n"
+" 5 = blu\n"
+" 6 = magenta\n"
+" 7 = ciano\n"
+" 8 = wbianco\n"
+"\n"
+"Esempi: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: Esce da nmcli\n"
+"\n"
+"Questo comando esce da nmcli. Quando la connessione in modifica non è "
+"salvata,\n"
+"viene richiesto di confermare l'azione.\n"
+
+#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
+#: ../cli/src/connections.c:6285 ../cli/src/connections.c:7106
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "Comando sconosciuto «%s»\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5879
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Menù proprietà ]---\n"
+"set [<val>] :: Imposta il nuovo valore\n"
+"add [<val>] :: Aggiunge una nuova opzione alla "
+"proprietà\n"
+"change :: Modifica il valore attuale\n"
+"remove [<indice> | <opzione>] :: Elimina il valore\n"
+"describe :: Descrive la proprietà\n"
+"print [setting | connection] :: Stampa il valore della proprietà\n"
+" (setting/connection)\n"
+"back :: Va al livello superiore\n"
+"help/? [<comando>] :: Stampa questo aiuto o la descrizione "
+"del\n"
+" comando\n"
+"quit :: Esce da nmcli\n"
+
+#: ../cli/src/connections.c:5904
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<valore>] :: Imposta il nuovo valore\n"
+"\n"
+"Questo comando imposta il <valore> fornito a questa proprietà.\n"
+
+#: ../cli/src/connections.c:5908
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<valore>] :: Aggiunge una nuova opzione alla proprietà\n"
+"\n"
+"Questo comando aggiunge il <valore> fornito a questa proprietà, se essa è "
+"di\n"
+"tipo contenitore. Per proprietà a valore singolo rimpiazza il valore\n"
+"(come il comando «set»).\n"
+
+#: ../cli/src/connections.c:5914
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: Modifica il valore attuale\n"
+"\n"
+"Visualizza il valore attuale e consente di modificarlo.\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<indice>|<opzione>] :: Elimina il valore\n"
+"\n"
+"Elimina il valore della proprietà (lo imposta a quello predefinito).\n"
+
+#: ../cli/src/connections.c:5922
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: Descrive la proprietà\n"
+"\n"
+"Mostra la descrizione della proprietà. Per maggiori informazioni su tutte "
+"le\n"
+"impostazioni e proprietà di NM, consultare la pagina di manuale nm-"
+"settings(5).\n"
+
+#: ../cli/src/connections.c:5927
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: Stampa i valori della properità,\n"
+" impostazione o connessione\n"
+"\n"
+"Mostra il valore della proprietà. Se viene fornito un argomento, è "
+"possibile\n"
+"visualizzare i valori per l'impostazione o la connessione.\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<comando>] :: Aiuto per i comandi di nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Errore: attivazione connessione non riuscita.\n"
+
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "Errore: l'impostazione «%s» è obbligatoria e non può essere rimossa.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6111
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ Tipo connessione: %s | nome: %s | UUID: %s | dirty: %s ]\n"
+
+#: ../cli/src/connections.c:6164 ../cli/src/connections.c:6576
+#: ../cli/src/connections.c:6634
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Inserire il valore per «%s»:"
+
+#: ../cli/src/connections.c:6181 ../cli/src/connections.c:6200
+#: ../cli/src/connections.c:6582 ../cli/src/connections.c:6641
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Errore: impostazione della proprietà «%s» non riuscita: %s\n"
+
+#: ../cli/src/connections.c:6193
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Modifica valore di «%s»: "
+
+#: ../cli/src/connections.c:6222
+#, c-format
+msgid "Error: %s\n"
+msgstr "Errore: %s\n"
+
+#: ../cli/src/connections.c:6228 ../cli/src/connections.c:6715
+#: ../cli/src/connections.c:6756
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Errore: rimozione del valore di «%s» non riuscita: %s\n"
+
+#: ../cli/src/connections.c:6249
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Argomento sconosciuto del comando: «%s»\n"
+
+#: ../cli/src/connections.c:6269 ../cli/src/connections.c:7094
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "La connessione non è stata salvata. Uscire veramente? [y/n]\n"
+
+#: ../cli/src/connections.c:6381
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Impostazioni disponibili: %s\n"
+
+#: ../cli/src/connections.c:6390
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Errore: nome impostazione non valido; %s\n"
+
+#: ../cli/src/connections.c:6407
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Proprietà disponibili: %s\n"
+
+#: ../cli/src/connections.c:6415
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Errore: proprietà %s\n"
+
+#: ../cli/src/connections.c:6456
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"Viene salvata la connessione con «autoconnect=yes»: potrebbe attivare la "
+"connessione immediatamente.\n"
+"Salvarla veramente? [yes]"
+
+#: ../cli/src/connections.c:6526
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "È possibile modificare le seguenti impostazioni: %s\n"
+
+#: ../cli/src/connections.c:6574 ../cli/src/connections.c:6632
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Valori consentiti per la proprietà «%s»: %s\n"
+
+#: ../cli/src/connections.c:6586 ../cli/src/connections.c:6798
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Errore: selezione non impostata; valori validi sono [%s]\n"
+
+#: ../cli/src/connections.c:6587
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "Prima usare «goto <impostazione>» o «set <impostazione>.<proprietà>»\n"
+
+#: ../cli/src/connections.c:6602 ../cli/src/connections.c:6735
+#: ../cli/src/connections.c:6815
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr ""
+"Errore: argomento «%s» dell'impostazione non valido; valori validi sono "
+"[%s]\n"
+
+#: ../cli/src/connections.c:6612
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Errore: manca l'impostazione per la proprietà «%s»\n"
+
+#: ../cli/src/connections.c:6619
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Errore: proprità non valida: %s\n"
+
+#: ../cli/src/connections.c:6668
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Errore: impostazione «%s» sconosciuta\n"
+
+#: ../cli/src/connections.c:6681
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "È possibile modificare le seguenti proprietà: %s\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Errore: nessun argomento fornito; argomenti validi sono [%s]\n"
+
+#: ../cli/src/connections.c:6733
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "L'impostazione «%s» non è presente nella connessione.\n"
+
+#: ../cli/src/connections.c:6774
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Errore: proprietà %s, non è nemmeno il nome di un'impostazione.\n"
+
+#: ../cli/src/connections.c:6799
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"Prima usare «goto <impostazione>» o «describe <impostazione>.<proprietà>»\n"
+
+#: ../cli/src/connections.c:6840
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr ""
+"Errore: proprietà non valida: %s, non è nemmeno il nome valido di "
+"un'impostazione.\n"
+
+#: ../cli/src/connections.c:6864
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "Errore: impostazione «%s» assente\n"
+
+#: ../cli/src/connections.c:6867
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Errore: impostazione sconosciuta: «%s»\n"
+
+#: ../cli/src/connections.c:6883
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Verifica dell'impostazione «%s»: %s\n"
+
+#: ../cli/src/connections.c:6890
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Verifica della connessione: %s\n"
+
+#: ../cli/src/connections.c:6929
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr ""
+"Errore: salvataggio della connessione «%s» (%s) non riuscita: (%d) %s\n"
+
+#: ../cli/src/connections.c:6938
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Connessione «%s» (%s) salvata con successo.\n"
+
+#: ../cli/src/connections.c:6958
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Errore: verifica della connessione non riuscita: %s\n"
+
+#: ../cli/src/connections.c:6959
+msgid "(unknown error)"
+msgstr "(errore sconosciuto)"
+
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "Errore: la connessione non è stata salvata. Digitare «save».\n"
+
+#: ../cli/src/connections.c:6984
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Errore: la connessione non è valida: %s\n"
+
+#: ../cli/src/connections.c:6995
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Errore: impossibile attivare la connessione: %s.\n"
+
+#: ../cli/src/connections.c:7005
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "Errore: attivazione di «%s» (%s) non riuscita: (%d) %s\n"
+
+#: ../cli/src/connections.c:7011
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Monitoraggio attivazione connessione (premere un tasto per continuare)\n"
+
+#: ../cli/src/connections.c:7049
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Errore: status-line: %s\n"
+
+#: ../cli/src/connections.c:7057
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Errore: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:7065
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Errore: codice colore errato: «%s»; usare <0-8>\n"
+
+#: ../cli/src/connections.c:7077
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Configurazione di nmcli attuale:\n"
+
+#: ../cli/src/connections.c:7085
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Opzione di configurazione «%s» non valida; consentito [%s]\n"
+
+#: ../cli/src/connections.c:7305
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> La modifica delle riga di comando non è disponibile. Per abilitare la "
+"funzionalità installare una libreria apposita. <<<\n"
+"Le librerie supportate sono:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7331
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "Errore: solo uno tra «id», uuid o «path» può essere fornito."
+
+#: ../cli/src/connections.c:7343 ../cli/src/connections.c:7539
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Errore: connessione «%s» sconosciuta."
+
+#: ../cli/src/connections.c:7358
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Attenzione: modifica della connessione esistente «%s»; l'argomento «type» "
+"viene ignorato\n"
+
+#: ../cli/src/connections.c:7361
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Attenzione: modifica della connessione esistente «%s»; l'argomento «con-"
+"name» viene ignorato\n"
+
+#: ../cli/src/connections.c:7375
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Tipi di connessione validi: %s\n"
+
+#: ../cli/src/connections.c:7377
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Errore: tipo di connessione non valido; %s\n"
+
+#: ../cli/src/connections.c:7413
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| Editor interattivo di connessione nmcli |==="
+
+#: ../cli/src/connections.c:7416
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Modifica della connessione esistente «%s»: «%s»"
+
+#: ../cli/src/connections.c:7418
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Aggiunta di una nuova connessione «%s»"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Digitare «help» o «?» per i comandi disponibili."
+
+#: ../cli/src/connections.c:7422
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Digitare «describe [<impostazione>.<prop>]» per informazioni dettagliate "
+"sulla proprietà."
+
+#: ../cli/src/connections.c:7460
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Errore: modifica della connessione «%s» non riuscita: (%d) %s"
+
+#: ../cli/src/connections.c:7466
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Connessione «%s» (%s) modificata con successo.\n"
+
+#: ../cli/src/connections.c:7493
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Errore: non è stato fornito alcun argomento."
+
+#: ../cli/src/connections.c:7517
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Errore: manca l'ID della connessione."
+
+#: ../cli/src/connections.c:7522
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Errore: manca l'argomento <impostazione>.<proprietà>."
+
+#: ../cli/src/connections.c:7545
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Errore: <impostazione>.<proprietà> «%s» non valida."
+
+#: ../cli/src/connections.c:7560
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Errore: impostazione «%s» non valida o non consentita: %s."
+
+#: ../cli/src/connections.c:7581
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Errore: proprietà «%s» non valida: %s."
+
+#: ../cli/src/connections.c:7587
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Errore: modifica di %s.%s non riuscita: %s."
+
+#: ../cli/src/connections.c:7617
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "Errore: eliminazione connessione non riuscita: %s"
-#: ../cli/src/connections.c:2024
+#: ../cli/src/connections.c:7687
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Errore: connessione sconosciuta: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:7721
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Errore: il comando «con» «%s» non è valido."
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Errore: impossibile eliminare connessioni sconosciute: %s."
-#: ../cli/src/connections.c:2092
+#: ../cli/src/connections.c:7792
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Errore: impossibile collegarsi a D-Bus."
+msgid "Could not load file '%s'\n"
+msgstr "Impossibile caricare il file «%s»\n"
+
+#: ../cli/src/connections.c:7857
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"Error: il comando «configured» o «active» è attesto per «connection show»."
-#: ../cli/src/connections.c:2100
+#: ../cli/src/connections.c:7924
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Errore: «%s» non è un comando «connection» valido."
+
+#: ../cli/src/connections.c:7993 ../cli/src/network-manager.c:615
#, c-format
msgid "Error: Could not get system settings."
msgstr "Errore: impossibile ottenere le impostazioni del sistema."
-#: ../cli/src/connections.c:2110
+#: ../cli/src/connections.c:8003
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr ""
-"Errore: impossibile ottenere le connessioni (i servizi per le impostazioni "
-"non sono in esecuzione)."
+"Errore: impossibile ottenere le connessioni (li servizio per le impostazioni "
+"non è in esecuzione)."
#. 0
-#. 9
+#. 12
#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:190
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
msgid "DEVICE"
msgstr "DEVICE"
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "CAPACITÀ"
-
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "PROPRIETÀ-WIFI"
-
-#. 2
-#: ../cli/src/devices.c:86
-msgid "AP"
-msgstr "AP"
-
#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "PROPRIETÀ-VIA-CAVO"
+#. 16
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNESSIONE"
#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "PROPRIETÀ-WIMAX"
-
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:203
-msgid "NSP"
-msgstr "NSP"
-
-#. 6
-#: ../cli/src/devices.c:90
-msgid "IP4"
-msgstr "IP4"
-
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
-
-#. 8
-#: ../cli/src/devices.c:92
-msgid "IP6"
-msgstr "IP6"
-
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
-
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "BOND"
-
-#. 11
-#: ../cli/src/devices.c:95
-msgid "VLAN"
-msgstr "VLAN"
+#. 17
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "UUID-CON"
#. 2
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODOTTO"
#. 4
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "VERSIONE-DRIVER"
#. 6
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "VERSIONE-FIRMWARE"
#. 7
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:118
+#. 8
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "MOTIVO"
-#. 10
-#: ../cli/src/devices.c:119
+#. 11
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:120
+#. 12
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:121
+#. 13
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:123
+#. 15
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MANCANTE"
-#. 15
-#: ../cli/src/devices.c:124
-msgid "CONNECTION"
-msgstr "CONNESSIONE"
+#. 0
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "PERC-CONNESSIONI-DISPONIBILI"
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "CONNESSIONI-DISPONIBILI"
#. 0
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "RILEVAMENTO-PORTANTE"
#. 1
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "VELOCITÀ"
#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "PORTANTE"
#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "FREQ-CTR"
#. 1
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:183
+#. 3
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODALITÀ"
-#. 3
-#: ../cli/src/devices.c:184
+#. 4
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:185
+#. 6
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "VELOCITÀ"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:186 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SEGNALE"
-#. 6
-#: ../cli/src/devices.c:187
+#. 8
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SICUREZZA"
-#. 7
-#: ../cli/src/devices.c:188
+#. 10
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "FLAG-WPA"
-#. 8
-#: ../cli/src/devices.c:189
+#. 11
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "FLAG-RSN"
-#. 10
+#. 13
#. 4
-#: ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ATTIVO"
+#. 14
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
#. 0
-#: ../cli/src/devices.c:219
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "SLAVE"
#. 0
-#: ../cli/src/devices.c:228
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:244
+#. 0
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPACITÀ"
+
+#. 1
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "PROPRIETÀ-WIFI"
+
+#. 3
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "PROPRIETÀ-VIA-CAVO"
+
+#. 4
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "PROPRIETÀ-WIMAX"
+
+#. 10
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "CONNESSIONI"
+
+#: ../cli/src/devices.c:274
#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"Uso: nmcli device { COMANDO | help }\n"
"\n"
-" COMANDO := { status | list | disconnect | wifi | wimax }\n"
+"COMANDO := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMANDO := { status | list | disconnect | wifi }\n"
+"COMANDO := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <nome>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <nome>]]\n"
+"\n"
+" show [<nomeif>]\n"
+"\n"
+" connect <nomeif>\n"
+"\n"
+" disconnect <nomeif>\n"
+"\n"
+" wifi [list [ifname <nomeif>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase]\n"
+" [ifname <nomeif>] [bssid <BSSID>] [name <nome>]\n"
+" [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <nomeif>]\n"
+"\n"
+" wimax [list [ifname <nomeif>] [nsp <nome>]]\n"
"\n"
-#: ../cli/src/devices.c:347
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"Uso: nmcli device status { help }\n"
+"\n"
+"Mostra lo stato di tutti i device.\n"
+"Per impostazione predefinita, vengono mostrate le seguenti colonne:\n"
+" DEVICE - nome dell'interfaccia\n"
+" TIPO - tipo di device\n"
+" STATE - stato del device\n"
+" CONNESSIONE - connessione attivata sul device (se disponibile)\n"
+"Le colonne visualizzate possono essere modificate tramite l'opzione globale\n"
+"«--fields». Il comando predefinito è «status»: «mmcli device» equivale "
+"quindi a\n"
+"«nmcli device status».\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"Uso: mmcli device show { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := <nomeif>\n"
+"\n"
+"Mostra i dettagli dei device.\n"
+"Elenca i dettagli per i device o per uno specifico\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"Uso: nmcli device connect { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := <nomeif>\n"
+"\n"
+"Connette il device.\n"
+"NetworkManager cerca di trovare una connessione valida da attivare.\n"
+"Considera anche connessioni che non sono state impostate come automatiche.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"Uso: nmcli device disconnect { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := <nomeif>\n"
+"\n"
+"Disconnette il device.\n"
+"Il comando disconnette il device e fa in modo che non possa attivare più\n"
+"automaticamente connessione senza un intervento dell'utente o manuale.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"Uso: nmcli device wifi { ARGOMENTI | help }\n"
+"\n"
+"Esegue operazioni su dispositivi Wi-Fi.\n"
+"\n"
+"ARGOMENTI := [list [ifname <nomeif>] [bssid <BSSID>]]\n"
+"\n"
+"Elenca gli access point Wi-Fi disponibili. Le opzioni «ifname» e «nsp» "
+"possono\n"
+"essere usate per elencare gli access point per un'interfaccia o con un "
+"BSSID\n"
+"specifico.\n"
+"\n"
+"ARGOMENTI := connect <(B)SSID> [password <password>][wep-key-type key|"
+"phrase]\n"
+" [ifname <nomeif>] [bssid <BSSID>] [name "
+"<nome>]\n"
+" [private yes|no]\n"
+"\n"
+"Connette a una rete Wi-Fi specificata da un SSID o BSSID. Il comando crea "
+"una\n"
+"nuova connessione e la attiva su un device. Ciò equivale a fare clic su un\n"
+"SSID tramite un programma grafico. Il comando crea sempre una nuova "
+"connessione\n"
+"e quindi è più che altro utile per collegarsi a nuove reti Wi-Fi. Se esiste "
+"già\n"
+"una connessione per la rete, è consigliato attivare il profilo esiste in "
+"questo\n"
+"modo: nmcli con up id <nome>.\n"
+"Notare che, al momento, sono supportate solamente reti aperte, WEP e WPA-"
+"PSK.\n"
+"La configurazione IP si assume venga effettuata tramite DHCP.\n"
+"\n"
+"ARGOMENTI := rescan [[ifname] <nomeif>]\n"
+"\n"
+"Richiede una nuova scansione immediata di access point.\n"
+"NetworkManager analizza le reti Wi-Fi periodicamente, ma in alcuni casi\n"
+"potrebbe essere utile avviare una scansione manualmente. Questo comando non\n"
+"mostra gli access point, usare «nmcli device wifi list» per fare ciò.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"Uso: nmcli device wimax { ARGOMENTI | help }\n"
+"\n"
+"Esegue operazioni su dispositivi WiMAX.\n"
+"\n"
+"ARGOMENTI := [list [ifname <nomeif>] [nsp <nome>]]\n"
+"\n"
+"Elenca gli NSP WiMAX disponibili. Le opzioni «ifname» e «nsp» possono "
+"essere\n"
+"usate per elencare le reti per un'interfaccia o con un NSP specifico.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(nessuno)"
-#: ../cli/src/devices.c:403
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:404
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:413
-msgid "Encrypted: "
-msgstr "Cifrato: "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:418
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:420
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:422
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:425
-msgid "Enterprise "
-msgstr "Enterprise "
-
-#: ../cli/src/devices.c:434
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:435
-msgid "Infrastructure"
-msgstr "Infrastruttura"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "Home"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "Partner"
-#: ../cli/src/devices.c:477
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "Roaming"
-#: ../cli/src/devices.c:549
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Errore: «dev list»: %s"
-
-#: ../cli/src/devices.c:551
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Errore: «dev list»: %s; campi consentiti: %s"
-
-#: ../cli/src/devices.c:560
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "Informazioni dispositivo"
-#: ../cli/src/devices.c:607 ../cli/src/devices.c:610 ../cli/src/devices.c:1086
-#: ../cli/src/utils.c:479
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "Errore: «device show»: %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1329
+#: ../cli/src/devices.c:1469
msgid "(unknown)"
msgstr "(sconosciuto)"
-#: ../cli/src/devices.c:619
-msgid "not connected"
-msgstr "non collegato"
-
-#: ../cli/src/devices.c:646
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "on"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "off"
-#: ../cli/src/devices.c:928
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Errore: «dev status»: %s"
-
-#: ../cli/src/devices.c:930
+#: ../cli/src/devices.c:1186
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Errore: «dev status»: %s; campi consentiti: %s"
+msgid "Error: 'device status': %s"
+msgstr "Errore: «device status»: %s"
-#: ../cli/src/devices.c:953
+#. Add headers
+#: ../cli/src/devices.c:1204
msgid "Status of devices"
msgstr "Stato dispositivi"
-#: ../cli/src/devices.c:984
+#: ../cli/src/devices.c:1234
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Errore: manca l'argomento «%s»."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Errore: parametro extra «%s» non valido."
-#: ../cli/src/devices.c:1025 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1331 ../cli/src/devices.c:1978
+#: ../cli/src/devices.c:1262 ../cli/src/devices.c:1417
+#: ../cli/src/devices.c:1552 ../cli/src/devices.c:1691
+#: ../cli/src/devices.c:2431
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Errore: dispositivo «%s» non trovato."
-#: ../cli/src/devices.c:1048
+#: ../cli/src/devices.c:1314
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "Successo: dispositivo «%s» attivato con successo."
+
+#: ../cli/src/devices.c:1328
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "Errore: attivazione device non riuscita: %s"
+
+#: ../cli/src/devices.c:1345
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "Il dispositivo «%s» è stato collegato.\n"
+
+#: ../cli/src/devices.c:1372 ../cli/src/devices.c:1507
+msgid "Interface: "
+msgstr "Interfaccia:"
+
+#: ../cli/src/devices.c:1376 ../cli/src/devices.c:1385
+#: ../cli/src/devices.c:1511 ../cli/src/devices.c:1520
+#, c-format
+msgid "Error: No interface specified."
+msgstr "Errore: nessuna interfaccia specificata."
+
+#: ../cli/src/devices.c:1391 ../cli/src/devices.c:1526
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Errore: parametri extra non consentiti: «%s»."
+
+#: ../cli/src/devices.c:1454
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Successo: dispositivo «%s» scollegato con successo."
-#: ../cli/src/devices.c:1083
+#: ../cli/src/devices.c:1466
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Errore: scollegamento dispositivo «%s» (%s) non riuscito: %s"
-#: ../cli/src/devices.c:1096
+#: ../cli/src/devices.c:1480
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "Il dispositivo «%s» è stato scollegato con successo.\n"
-#: ../cli/src/devices.c:1159
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Errore: iface deve essere specificato."
-
-#: ../cli/src/devices.c:1289
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Errore: «dev wifi»: %s"
+#: ../cli/src/devices.c:1623
+msgid "Wi-Fi scan list"
+msgstr "Elenco analisi Wi-Fi"
-#: ../cli/src/devices.c:1291
+#: ../cli/src/devices.c:1661
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Errore: «dev wifi»: %s; campi consentiti: %s"
+msgid "Error: 'device wifi': %s"
+msgstr "Errore: «device wifi»: %s"
-#: ../cli/src/devices.c:1314
-msgid "WiFi scan list"
-msgstr "Elenco scansione Wi-Fi"
-
-#: ../cli/src/devices.c:1351 ../cli/src/devices.c:1405
+#: ../cli/src/devices.c:1714 ../cli/src/devices.c:1783
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Errore: punto di accesso con bssid «%s» non trovato."
-#: ../cli/src/devices.c:1368
+#: ../cli/src/devices.c:1738 ../cli/src/devices.c:2126
+#: ../cli/src/devices.c:2288
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "Errore: il dispositivo «%s» non è un dispositivo Wi-Fi."
-#: ../cli/src/devices.c:1436 ../cli/src/devices.c:1482
+#: ../cli/src/devices.c:1820 ../cli/src/devices.c:1867
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "Connessione con UUID «%s» creata e attivata sul dispositivo «%s»\n"
-#: ../cli/src/devices.c:1441
+#: ../cli/src/devices.c:1824
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Errore: attivazione connessione non riuscita: (%d) %s."
-#: ../cli/src/devices.c:1466
+#: ../cli/src/devices.c:1849
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "Errore: aggiunta/attivazione nuova connessione non riuscita: (%d) %s"
-#: ../cli/src/devices.c:1474
+#: ../cli/src/devices.c:1857
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"Errore: aggiunta/attivazione nuova connessione non riuscita: errore "
"sconosciuto"
-#: ../cli/src/devices.c:1618
+#: ../cli/src/devices.c:2008
+msgid "SSID or BSSID: "
+msgstr "SSID o BSSID: "
+
+#: ../cli/src/devices.c:2013
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "Errore: SSID o BSSID mancante."
-#: ../cli/src/devices.c:1641
+#: ../cli/src/devices.c:2037
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "Errore: il valore «%s» di bssid non è un BSSID valido."
-#: ../cli/src/devices.c:1665
+#: ../cli/src/devices.c:2061
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
msgstr ""
"Errore: il valore «%s» di wep-key-type non è valido, usare «key» o «phrase»."
-#: ../cli/src/devices.c:1705
+#: ../cli/src/devices.c:2081
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Errore: %s: %s."
+
+#: ../cli/src/devices.c:2096
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "Error: BSSID a cui connettersi (%s) diverso dall'argomento bssid (%s)."
-#: ../cli/src/devices.c:1711
+#: ../cli/src/devices.c:2102
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "Errore: il parametro «%s» non è né SSID né BSSID."
-#: ../cli/src/devices.c:1740
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "Errore: il dispositivo «%s» non è un dispositivo Wi-Fi."
-
-#: ../cli/src/devices.c:1742
+#: ../cli/src/devices.c:2128 ../cli/src/devices.c:2290
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "Errore: nessun dispositivo Wi-Fi trovato."
-#: ../cli/src/devices.c:1760
+#: ../cli/src/devices.c:2146
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "Errore: rete con SSID «%s» non trovata."
-#: ../cli/src/devices.c:1762
+#: ../cli/src/devices.c:2148
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "Errore: punto di accesso con BSSID «%s» non trovato."
-#: ../cli/src/devices.c:1860
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Errore: il comando «dev wifi» «%s» non è valido."
-
-#: ../cli/src/devices.c:1936
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Errore: «dev wimax»: %s"
+#: ../cli/src/devices.c:2187
+msgid "Password: "
+msgstr "Password: "
-#: ../cli/src/devices.c:1938
+#: ../cli/src/devices.c:2316
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Errore: «dev wimax»: %s; campi consentiti: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Errore: il comando «device wifi» «%s» non è valido."
-#: ../cli/src/devices.c:1961
+#: ../cli/src/devices.c:2363
msgid "WiMAX NSP list"
msgstr "Elenco NSP WiMAX"
-#: ../cli/src/devices.c:1998
+#: ../cli/src/devices.c:2400
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Errore: «device wimax»: %s"
+
+#: ../cli/src/devices.c:2454
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Errore: NSP con nome «%s» non trovato."
-#: ../cli/src/devices.c:2009
+#: ../cli/src/devices.c:2467
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Errore: il dispositivo «%s» non è un dispositivo WiMAX."
-#: ../cli/src/devices.c:2040
+#: ../cli/src/devices.c:2505
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Errore: punto di accesso con nsp «%s» non trovato."
-#: ../cli/src/devices.c:2067
+#: ../cli/src/devices.c:2537
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Errore: il comando «dev wimax» «%s» non è valido."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Errore: il comando «device wimax» «%s» non è valido."
-#: ../cli/src/devices.c:2120
+#: ../cli/src/devices.c:2616
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Errore: il comando «dev» «%s» non è valido."
@@ -1452,237 +3608,504 @@ msgstr "VERSIONE"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "STARTUP"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "HARDWARE-WIFI"
+msgid "CONNECTIVITY"
+msgstr "CONNETTIVITÀ"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "NETWORK"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "HARDWARE-WWAN"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "HARDWARE-WIMAX"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "PERMESSO"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "VALORE"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "LIVELLO"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMINI"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"Uso: nmcli nm { COMANDO | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMANDO := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"Uso: nmcli general { COMANDO | help }\n"
"\n"
-" COMANDO := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMANDO := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<nomehost>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <livello registrazione>] [domains <domini registrazione>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"Uso: mmcli general status { help }\n"
+"\n"
+"Mostra lo stato generale di NetworkManager.\n"
+"L'azione predefinita è «status»: «mmcli gen» equivale a «mmcli gen status»\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"Uso: nmcli general hostname { ARGOMENTI | help }\n"
+"\n"
+"AGOMENTI := [<nome host>]\n"
+"\n"
+"Ottiene/Modifica il nome host persistente del sistema.\n"
+"Senza alcun argomento, stampa il nome host attualmente configurato. Quando\n"
+"viene passato un nome host, viene impostato come il nuovo nome host.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"Uso: nmcli general permissions { help }\n"
+"\n"
+"Mostra i permessi del chiamante per le operazioni autenticate.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"Uso: nmcli general logging { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [level <livello registro>] [domanis <domini registro>]\n"
+"\n"
+"Ottiene/Modifica il livello e il dominio di registro di NetworkManager.\n"
+"Senza alcun argomento vengono mostrati i livelli e il dominio attuali. Per\n"
+"modificare lo stato di registrazione, fornire il livello o il dominio. Per\n"
+"l'elenco dei possibili domini di registrazione, consultare la pagina man.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"Uso: nmcli networking { COMANDO | help }\n"
+"\n"
+"COMANDO := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"Uso: mmcli networking on { help }\n"
+"\n"
+"Attiva la rete.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"Uso: mmcli networking off { help }\n"
+"\n"
+"Disattiva la rete.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"Uso: nmcli networking connectivity { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [check]\n"
+"\n"
+"Ottiene lo stato di connettività della rete.\n"
+"L'argomento opzionale «check» fa ricontrollare la connettività.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio { COMANDO | help }\n"
+"\n"
+"COMANDO := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMANDO := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio all { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [on | off]\n"
+"\n"
+"Ottiene lo stato di tutti gli interruttori radio o li attiva/disattiva.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio wifi { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [on | off]\n"
+"\n"
+"Ottiene lo stato dell'interruttore Wi-Fi o lo attiva/disattiva.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio wwan { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [on | off]\n"
+"\n"
+"Ottiene lo stato dell'interruttore banda larga mobile o lo attiva/"
+"disattiva.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio wimax { ARGOMENTI | help }\n"
+"\n"
+"ARGOMENTI := [on | off]\n"
+"\n"
+"Ottiene lo stato dell'interruttore WiMAX o lo attiva/disattiva.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "dormiente"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "connessione in corso"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "collegato (solo local)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "collegato (solo site)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "disconnessione in corso"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Errore: «nm status»: %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "portale"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "limitato"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "pieno"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Errore: «nm status»: %s; campi consentiti: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Errore: solo questi campi sono consentiti: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "abilitato"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "disabilitato"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "Stato NetworkManager"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "in esecuzione"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "non in esecuzione"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "in avvio"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "avviata"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "autorizzazione"
-#: ../cli/src/network-manager.c:301
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "Errore: «nm permissions»: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Errore: «general permissions»: %s"
-#: ../cli/src/network-manager.c:303
-#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "Errore: «nm permissions»: %s; campi consentiti: %s"
-
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "Permessi NetworkManager"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Errore: impossibile collegarsi al bus di sistema: %s."
+msgid "Error: 'general logging': %s"
+msgstr "Errore: «general logging»: %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Errore: impossibile creare l'oggetto proxy D-Bus."
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "Registrazioni di NetworkManager"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Errore in sleep: %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "Errore: impostazione nome host non riuscita: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"Errore: qui il valore «--fields» «%s» non è valido; campi consentiti: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "Errore: accesso non consentito per impostare la registrazione; %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "Connettività di rete abilitata"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "Errore: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "Errore: parametro «enable» non valido: «%s»; usare «true» o «false»."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Errore: comando «general» «%s» non valido."
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Errore: lo stato di «sleep» non è esportato da NetworkManager."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr ""
+"Errore: qui il valore «--fields» «%s» non è valido (campo consentito: %s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "Errore: parametro «sleep» non valido: «%s»; usare «true» o «false»."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Errore: argomento «%s» non valido: «%s» (usare on/off)"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "Wi-Fi abilitato"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "Connettività"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Errore: parametro «wifi» non valido: «%s»."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "Rete"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN abilitato"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Errore: il comando «networking connectivity» «%s» non è valido."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Errore: parametro «wwan» non valido: «%s»."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Errore: il comando «networking» «%s» non è valido."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX abilitato"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Interruttori radio"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Errore: parametro «wimax» non valido: «%s»."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Interruttore Wi-Fi"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "Interruttore WWAN"
-#: ../cli/src/network-manager.c:588
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "Interruttore WiMAX"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Errore: comando «nm» «%s» non valido."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Errore: il comando «radio» «%s» non è valido."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1696,11 +4119,16 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
@@ -1712,239 +4140,780 @@ msgstr ""
" -p[retty] Output formattato\n"
" -m[ode] tabular|multiline Modalità output\n"
" -f[ields] <field1,field2,...>|all|common Specifica i campi da mostrare\n"
-" -e[scape] yes|no Esegue l'escape dei "
-"separatori \n"
+" -e[scape] yes|no Esegue l'escape dei separatori\n"
" delle colonne nei valori\n"
" -n[ocheck] Non verifica le versioni di "
"nmcli e\n"
" NetworkManager\n"
+" -a[sk] Chiede i parametri mancanti\n"
+" -w[ait] <secondi> Imposta il timeout di attesa "
+"per il\n"
+" completamento delle operazioni\n"
" -v[ersion] Mostra la versione del "
"programma\n"
" -h[elp] Stampa questo aiuto\n"
"\n"
"OGGETTO\n"
-" nm Stato NetworkManager\n"
-" c[onnection] Connessioni NetworkManager\n"
+" g[eneral] Stato e operazioni di NetworkManager\n"
+" n[etworking] Controllo di rete generale\n"
+" r[adio] Interruttori radio di NetworkManager\n"
+" c[onnection] Connessioni di NetworkManager\n"
" d[evice] Dispositivi gestiti da NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Errore: l'oggetto «%s» è sconosciuto, provare «nmcli help»."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Errore: l'opzione «--terse» è stata specificata una seconda volta."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Errore: l'opzione «--terse» si esclude con «--pretty»."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Errore: l'opzione «--pretty» è stata specificata una seconda volta."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Errore: l'opzione «--pretty» si esclude con «--terse»."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Errore: manca l'argomento per l'opzione «%s»."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Errore: \"%s\" non è un argomento valido per l'opzione «%s»."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Errore: mancano i campi per le opzioni «%s»."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Errore: «%s» non è un timeout valido per l'opzione «%s»."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "Strumento nmcli, versione %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Errore: l'opzione «%s» è sconosciuta, provare «nmcli -help»."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Intercettato segnale %d, arresto in corso."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"Errore: mmcli terminato dal segnale %d."
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "Impostazione della maschera di segnale non riuscita: %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Creazione del thread per la gestione dei segnali non riuscita: %d"
+
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Errore: impossibile creare l'oggetto NMClient."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "Successo"
-#: ../cli/src/settings.c:563
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:565
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (frase di accesso a 104/128-bit)"
-#: ../cli/src/settings.c:568 ../cli/src/settings.c:696
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (sconosciuto)"
-#: ../cli/src/settings.c:594
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (sconosciuto)"
-#: ../cli/src/settings.c:600
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "qualsiasi, "
-#: ../cli/src/settings.c:602
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:604
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:606
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:610
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:612
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:620
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:622
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:624
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:626
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NESSUNO)"
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:690
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (disabilitato)"
-#: ../cli/src/settings.c:692
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (abilitato, preferire IP pubblico)"
-#: ../cli/src/settings.c:694
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (abilitato, preferire IP temporaneo)"
-#: ../cli/src/settings.c:827 ../cli/src/settings.c:1024
-#: ../cli/src/settings.c:1734
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (nessuno)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "proprietà agente, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "non salvato, "
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "non richiesto, "
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (disabilitato)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "abilitato,"
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "pubblicizza, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "disponibile, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (non impostato)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "auto"
-#: ../cli/src/utils.c:105
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "predefinito"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Impostare anche «%s» a «%s»? [yes]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Cancellare anche «%s»? [yes]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "«%s» non è valido"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "«%d» non è valido; usare <%d-%d>"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "«%u» non è valido; usare <%d-%d>"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "«%s» non è valido; usare <opzione>=<valore>"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "l'indice «%s» non è valido"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "nessun elemento da rimuovere"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "l'indice «%d» non è nell'intervallo <0-%d>"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "opzione «%s» non valida"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "opzione mancante"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "«%s» non è un numero valido (o non è nell'intervallo)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "«%s» non è un MAC Ethernet valido"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "«%s» non è un nome valido di interfaccia"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "«%s» non è un numero"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "«%s» non è un carattere hex valido"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "«%s» non è un MAC valido"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "«%s» non è uno UUID valido"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"Digitare un elenco di permessi utente. Questo è un elenco di nomi utente "
+"strutturato in questo modo:\n"
+" [utente:]<nome utente 1>, [utente:]<nome utente 2>,... \n"
+"Gli elementi possono essere separati da virgole o spazi.\n"
+"\n"
+"Esempio: mario carlo alice\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "«%s» non è un master valido, usare ifname o lo UUID di connessione"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "password della chiave privata non fornita"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"Digirare il percorso a una chiave private e la sua password (se non ancora "
+"impostata):\n"
+" <percorso file> [<password>]\n"
+"Esempio: /home/mario/jara-priv-key Passwordsicura\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"Digitare i byte come elenco di valori esadecimali.\n"
+"Sono accettati due formati:\n"
+"(a) una stringa di valori esadecimali, dove due cifre rappresentano un byte\n"
+"(b) elenco separato da spazi di byte scritti in cifre esadecimali (con "
+"prefisso 0x/0X e 0 iniziale opzionali)\n"
+"\n"
+"Esempi: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"Digitare un elenco di opzioni strutturato in questo modo:\n"
+" opzione = <valore>, opzione = <valore>,... \n"
+"Opzioni valide sono: %s\n"
+"«mode» può essere fornito come nome o numero:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Esempio: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "«%s» non è un MAC InfiniBand valido"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "«%s» non è una P_Key IBoIP valida"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"Digitare un elenco di indirizzi IP di server DNS.\n"
+"\n"
+"Esempio: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "«%s» non è valido (usare ip[/prefisso] [gateway])"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"Digitare un elenco di indirizzi IPv4 strutturato in questo modo:\n"
+" ip[/prefisso] [gateway], ip[/prefisso] [gateway],...\n"
+"Se manca il prefisso, viene inteso come 32.\n"
+"\n"
+"Esempio: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "«%s» non è valido (usare ip/[prefisso] next-htop [metrica])"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"Digitare un elenco di instradamenti IPv4 formattato in questo modo:\n"
+" ip/[prefisso] next-hop [metrica],... \n"
+"Se manca il prefisso, viene inteso come 32.\n"
+"Se manca la metrica, viene intesa come 0.\n"
+"\n"
+"Esempio: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"Digitare un elenco di indirizzi IPv6 di server DNS. Se il metodo di "
+"configurazione IPv6 è «auto», questi server DNS vengono aggiunti a quelli "
+"(se esistenti) forniti dalla configurazione automatica. I server DNS non "
+"possono essere usati con i metodi di configurazione IPv6 «shared» o «link-"
+"local», poiché non esiste una rete upstream. In tutti gli altri metodi di "
+"configurazione IPv6, questi server DNS sono usati come i soli server DNS per "
+"la connessione.\n"
+"\n"
+"Esempio: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"Digitare un elenco di indirizzi IPv6 strutturato in questo modo:\n"
+" ip[/prefisso] [gateway], ip[/prefisso] [gateway],...\n"
+"Se manca il prefisso, viene inteso come 128.\n"
+"\n"
+"Esempio: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr "«%s» non è valido (usare <IP dest>/prefisso <IP next-hop> [metrica])"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"Digitare un elenco di instradamenti IPv6 formattato in questo modo:\n"
+" ip/[prefisso] next-hop [metrica],... \n"
+"Se manca il prefisso, viene inteso come 128.\n"
+"Se manca la metrica, viene intesa come 0.\n"
+"\n"
+"Esempio: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "«%s» non è valido; usare 0, 1 o 2"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "«%s» non è un canale valido; usare <1-13>"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "«%s» non è valido; usare [e, o, n]"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli è in grado di accettare sia dati JSON diretti per la configurazione "
+"sia il nome di un file contenente la configurazione. Nel secondo caso, il "
+"file viene letto e il contenuto caricato in questa proprietà.\n"
+"\n"
+"Esempi: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/mio-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "nessuna priorità da rimuovere"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "l'indice «%d» non è nell'intervallo <0-%d>"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "«%s» non è valido; dovrebbero essere fornite 3 stringhe"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"Digitare un elenco di 3 canali (separato da virgole o spazi).\n"
+"\n"
+"Esempio: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"Digitare un elenco di opzioni S/390 strutturato in questo modo:\n"
+" opzione = <valore>, opzione = <valore>,... \n"
+"Opzioni valide sono: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "«%s» non è un canale valido"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "«%ld» non è un canale valido"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "La chiave WEP è ipotizzata essere di «%s»\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "«%s» non tra [0 (sconosciuto), 1 (chiave), 2 (passphrase)]"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"Digitare il tipo di chiavi WEP. I valori accettati sono: 0 per sconosciuto, "
+"1 per chiave e 2 per passphrase.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "«%s» non è una PSK valida"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "«%s» non è un flag DCB valido"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "«%s» non è una priorità di applicazione DCB"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "deve contenere 8 numeri separati da virgole"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "«%s» non è un numero tra 0 e %u (inclusivo) o %u"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "«%s» non è un numero tra 0 e %u (inclusivo)"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"Attenzione: le modifiche non avranno alcun effetto finché «%s» include 1 "
+"(abilitato)\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "le percentuali della banda devono totalizzare 100%%"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "impossibile determinare come recuperare il valore della proprietà"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "la proprietà non può essere modificata"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[Descrizione proprietà NM]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[Descrizione specifica di nmcli]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Errore: è richiesto il valore per l'argomento «%s»."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Errore: atteso l'argomento «%s», ma è stato fornito «%s»."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Errore: argomento «%s» non atteso."
+
+#: ../cli/src/utils.c:189
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "Errore nel convertire l'indirizzo IP4 «0x%X» in formato testuale"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:217
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "Errore nel convertire l'indirizzo IP6 «%s» in formato testuale"
-#: ../cli/src/utils.c:234
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "«%s» non è valido; usare [%s] o [%s]"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "«%s» è ambiguo (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "manca il nome, provare uno tra [%s]"
+
+#: ../cli/src/utils.c:718
#, c-format
msgid "field '%s' has to be alone"
msgstr "il campo «%s» deve essere isolato"
-#: ../cli/src/utils.c:237
+#: ../cli/src/utils.c:720
#, c-format
-msgid "invalid field '%s'"
-msgstr "campo «%s» non valido"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "campo «%s» non valido; campi consentiti: %s"
-#: ../cli/src/utils.c:256
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "Con l'opzione «--terse» è necessario specificare «--fields»"
-#: ../cli/src/utils.c:260
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"L'opzione «--terse» richiede valori specifici dell'opzione «--fields», non "
"«%s»"
-#: ../cli/src/utils.c:470
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"Errore: impossibile creare l'oggetto proxy D-Bus per org.freedesktop.DBus"
-
-#: ../cli/src/utils.c:478
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Errore: richiesta NameHasOwner non riuscita: %s"
-
-#: ../cli/src/utils.c:523
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1953,7 +4922,7 @@ msgstr ""
"Attenzione: le versioni di nmcli (%s) e NetworkManager (%s) non "
"corrispondono. Usare --nocheck per disabilitare questo avviso.\n"
-#: ../cli/src/utils.c:532
+#: ../cli/src/utils.c:1079
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1973,116 +4942,87 @@ msgstr "Il file di chiave PEM non ha il tag di chiusura «%s»."
msgid "Doesn't look like a PEM private key file."
msgstr "Non sembra un file di chiave privata PEM."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Memoria insufficiente per memorizzare i dati del file PEM."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "File PEM malformato: Proc-Type non è il primo tag."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "File PEM malformato: tag Proc-Type «%s» sconosciuto."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "File PEM malformato: DEK-Info non è il secondo tag."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "File PEM malformato: IV non trovato nel tag DEK-Info."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "File PEM malformato: formato di IV nel tag DEK-Info non valido."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "File PEM malformato: cifrario chiave privata «%s» sconosciuto."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "Impossibile decodificare la chiave privata."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Tag di apertura PKCS#8 atteso non trovato."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Tag di chiusura PKCS#8 «%s» atteso non trovato."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "Memoria insufficiente per archiviare i dati della chiave privata."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "Decodifica della chiave privata PKCS#8 non riuscita."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Memoria insufficiente per archiviare i dati del certificato."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV deve essere lungo un numero pari di byte."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Memoria insufficiente per archiviare l'IV."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV contiene cifre non esadecimali."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Il cifrario di chiave privata «%s» è sconosciuto."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Memoria insufficiente per decifrare la chiave privata."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Memoria insufficiente per archiviare la chiave privata decifrata."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "Impossibile stabilire il tipo di chiave privata."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "Il certificato PEM non ha il tag di apertura «%s»."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "Il certificato PEM non ha il tag di chiusura «%s»."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "Decodifica del certificato non riuscita."
@@ -2101,102 +5041,92 @@ msgstr "Inizializzazione del motore MD5 non riuscita: %s / %s"
msgid "Invalid IV length (must be at least %zd)."
msgstr "Lunghezza di IV non valida (deve essere almeno %zd)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Memoria insufficiente per il buffer della chiave decifrata."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Inizializzazione del contesto di decifrazione non riuscita: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
"Impostazione della chiave simmetrica per la decifrazione non riuscita: %s / "
"%s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Impostazione di IV per la decifrazione non riuscita: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Decifrazione della chiave privata non riuscita: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"Impossibile decifrare la chiave privata: lunghezza non prevista dello spazio "
"di riempimento."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Decifrazione della chiave privata non riuscita."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Impossibile assegnare memoria per la cifratura."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Inizializzazione contesto del cifratore non riuscita: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr ""
"Impostazione della chiave simmetrica per la codifica non riuscita: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Impostazione di IV per la cifratura non riuscita: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Cifratura dati non riuscita: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Errore nell'inizializzare i dati dei certificati: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Impossibile decodificare il certificato: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Impossibile inizializzare il decodificatore PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Impossibile decodificare il file PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Impossibile verificare il file PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "Impossibile inizializzare il decodificatore PKCS#8: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Impossibile decodificare il file PKCS#8: %s"
@@ -2216,134 +5146,489 @@ msgstr "Inizializzazione del contesto MD5 non riuscita: %d."
msgid "Invalid IV length (must be at least %d)."
msgstr "Lunghezza di IV non valida (deve avere almeno %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Inizializzazione dello slot del decifratore non riuscita."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Impostazione della chiave simmetrica di decifrazione non riuscita."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Impostazione di IV per la decifrazione non riuscita."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Inizializzazione del contesto di decifrazione non riuscita."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Decifrazione della chiave privata non riuscita: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"Decifratura della chiave privata non riuscita: i dati decifrati sono troppo "
"lunghi."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr ""
"Finalizzazione della decifratura della chiave privata non riuscita: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Inizializzazione dello slot del cifratore non riuscita."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Impostazione della chiave simmetrica di cifratura non riuscita."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Impostazione di IV per la cifratura non riuscita."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Inizializzazione del contesto di cifratura non riuscita."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Cifratura non riuscita: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Quantità di dati non prevista dopo la cifratura."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Impossibile decodificare il certificato: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Impossibile convertire la password in UCS2: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Impossibile inizializzare il decodificatore PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Impossibile decodificare il file PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Impossibile verificare il file PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "Impossibile generare dati casuali."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "manca la proprietà"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "la proprietà è vuota"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "deve corrispondere alla proprietà «%s» per PKCS#12"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "la proprietà non è valida"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "«%s» non è un valore valido per la proprietà"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "richiede l'impostazione «%s» o «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "opzione «%s» o il suo valore «%s» non valido"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "solo uno tra «%s» e «%s» può essere impostato"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "manca l'opzione obbligatoria «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "«%s» non è un valore valido per «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "«%s=%s» non è compatibile con «%s > 0»"
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "«%s» non è un nome valido di interfaccia per l'opzione «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "l'opzione «%s» è valida solamente per «%s=%s»"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "«%s=%s» non è una configurazione valida per «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "l'opzione «%s» richiede l'impostazione dell'opzione «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "l'opzione «%s» è vuota"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "«%s» non è un indirizzo IPv4 valido per l'opzione «%s»"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Memoria insufficiente per creare la chiave di cifratura."
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "«%d» non è un valore valido per la proprietà (dovrebbe essere <= %d)"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Impossibile assegnare memoria per la creazione del file PEM."
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "il valore «%d» non è nell'intervallo <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "la proprietà è vuota"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "«%s» non corrisponde al nome «%s» dell'interfaccia virtuale"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-connection.c:780
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Impossibile assegnare memoria per la scrittura di IV sul file PEM."
+msgid "requires presence of '%s' setting in the connection"
+msgstr "richiede la presenza dell'impostazione «%s» nella connessione"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "La configurazione IPv4 non è consentita per lo slave"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "La configurazione IPv6 non è consentita per lo slave"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "flag non validi"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "flag non validi - disabilitato"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "la proprietà non è valida (non abilitata)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "elemento non valido"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "somma non 100%"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "la proprietà non è valida"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "manca la proprietà"
+
+#: ../libnm-util/nm-setting-gsm.c:297
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "il valore «%s» della proprietà è vuoto o troppo lungo (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "«%s» contiene caratteri non validi (usare [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "la lunghezza di «%s» non è valida (dovrebbe essere di 5 o 6 cifre)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "non è un nome valido di interfaccia"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Deve essere specificata una P_Key se viene utilizzato un genitore"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr ""
-"Impossibile assegnare memoria per la scrittura della chiave cifrata sul file "
-"PEM."
+"La connessione InfiniBand P_Key non ha specificato il nome dell'interfaccia "
+"genitore"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "questa proprietà non è consentita per «%s=%s»"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. L'indirizzo IPv4 non è valido"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. L'indirizzo IPv4 ha un prefisso non valido"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. L'instradamento non è valido"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. L'instradamento ha un prefisso non valido"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "«%s» non consentito per %s=%s"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "lunghezza SSID non nell'intervallo di <1-32> byte"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "«%d» non è un canale valido"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "«%d» non è nell'intervallo valido <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "l'impostazione di questa proprietà richiede che «%s» non sia zero"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "il valore di «%s» non corrisponde a «%s=%s»"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "«%s» non è né uno UUID né il nome di un'interfaccia"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "la proprietà non è specificata e nemmeno «%s:%s» lo è"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "i flag non sono validi"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "«%s» non è un valore valido per una porta Ethernet"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "«%s» non è un valore duplex valido"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "non è un indirizzo MAC valido"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "«%s» non è un indirizzo MAC valido"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "«%s» o il suo valore «%s» non valido"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "la sicurezza «%s» richiede «%s=%s»"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "la sicurezza «%s» richiede l'impostazione «%s»"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "il valore «%d» non è nell'intervallo <0-3>"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-wireless-security.c:963
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Impossibile assegnare memoria per i dati del file PEM."
+msgid "'%s' connections require '%s' in this property"
+msgstr "le connessioni «%s» richiedono «%s» in questa proprietà"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "«%s» può essere usato solamente con «%s=%s» (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "«%s» non è una modalità Wi-Fi valida"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "«%s» non è una banda valida"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "richiede l'impostazione della proprietà «%s»"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "Abilita o disabilita la rete di sistema"
-# [NdT] si tratta di un messaggio che descrive un'azione
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
msgid "System policy prevents enabling or disabling system networking"
msgstr ""
@@ -2355,7 +5640,7 @@ msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
msgstr ""
-"Sospendere o riattivare NetworkManager (dovrebbe essere usato solo dalla "
+"Sospende o riattiva NetworkManager (dovrebbe essere usato solo dalla "
"gestione dell'alimentazione di sistema)"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
@@ -2367,7 +5652,6 @@ msgstr ""
msgid "Enable or disable WiFi devices"
msgstr "Abilita o disabilita i dispositivi Wi-Fi"
-# [NdT] si tratta di un messaggio che descrive un'azione
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
msgstr ""
@@ -2397,9 +5681,8 @@ msgstr ""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
-msgstr "Permettere il controllo delle connessioni di rete"
+msgstr "Permette il controllo delle connessioni di rete"
-# [NdT] si tratta di un messaggio che descrive un'azione
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
msgid "System policy prevents control of network connections"
msgstr "La politica di sistema impedisce di controllare le connessioni di rete"
@@ -2446,7 +5729,7 @@ msgstr ""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
-msgstr "Modificare il nome host persistente del sistema"
+msgstr "Modifica del nome host persistente del sistema"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
@@ -2454,128 +5737,80 @@ msgstr ""
"La politica di sistema impedisce di modificare il nome host persistente del "
"sistema"
-#: ../src/main.c:135
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "Impostazione della maschera di segnale non riuscita: %d"
-
-#: ../src/main.c:144
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "Creazione del thread per la gestione del segnale non riuscita: %d"
-
-#: ../src/main.c:159
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Apertura di %s non riuscita: %s\n"
-#: ../src/main.c:165
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Scrittura su %s non riuscita: %s\n"
-#: ../src/main.c:170
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Chiusura di %s non riuscita: %s\n"
-#: ../src/main.c:213
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager è già in esecuzione (pid %ld)\n"
-#: ../src/main.c:340
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "Stampa la versione di NetworkManager ed esce"
-#: ../src/main.c:341
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "Non si avvia in modalità demone"
-#: ../src/main.c:342
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Non si avvia in modalità demone e registra su stderr"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Livello di registrazione: uno di [%s]"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr ""
+"Domini di registrazione separati da «,»: qualsiasi combinazione di [%s]"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "Rende tutti gli avvisi fatali"
-#: ../src/main.c:343
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "Specifica la posizione di un file PID"
-#: ../src/main.c:343
+#: ../src/main.c:337
msgid "filename"
msgstr "nomefile"
-#: ../src/main.c:344
+#: ../src/main.c:338
msgid "State file location"
msgstr "Posizione file di stato"
-#: ../src/main.c:344
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/percorso/a/file.di.stato"
-#: ../src/main.c:345
-msgid "Config file location"
-msgstr "Posizione file di configurazione"
-
-#: ../src/main.c:345
-msgid "/path/to/config.file"
-msgstr "/percorso/a/file.di.config"
-
-#: ../src/main.c:346
-msgid "List of plugins separated by ','"
-msgstr "Elenco di plugin separati da virgole"
-
-#: ../src/main.c:346
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:348
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Livello di registrazione, uno di [ERR, WARN, INFO, DEBUG]"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:351
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"Domini di registrazione separati da virgole, qualsiasi combinazione di\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:357
-msgid "An http(s) address for checking internet connectivity"
-msgstr "Un indirizzo HTTP(S) per verificare la connessione"
-
-#: ../src/main.c:358
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "L'intervallo tra i controlli di connettività (in secondi)"
-
-#: ../src/main.c:359
-msgid "The expected start of the response"
-msgstr "L'inizio atteso della risposta"
-
-#: ../src/main.c:359
-msgid "Bingo!"
-msgstr "Bingo!"
-
#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules non supportati su questa piattaforma.\n"
-#: ../src/main.c:383
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "È necessario essere root per eseguire NetworkManager.\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2584,46 +5819,65 @@ msgid ""
msgstr ""
"NetworkManager controlla tutte le connessioni di rete e\n"
"sceglie automaticamente la migliore da usare. Consente agli\n"
-"utenti di specificare l'access point Wi-Fi e quale scheda\n"
+"utenti di specificare gli access point Wi-Fi e quali schede\n"
"Wi-Fi del computer associarvi."
-#: ../src/main.c:389
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Opzione non valida. Usare --help per ottenere un elenco delle opzioni "
"valide.\n"
-#: ../src/main.c:399
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "È necessario essere root per eseguire NetworkManager.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Usare --help per ottenere un elenco di opzioni valide.\n"
+
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"Domini di registrazione «%s» non riconosciuti passati sulla riga di "
+"comando.\n"
-#: ../src/main.c:432
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Lettura della configurazione non riuscita: (%d) %s\n"
-#: ../src/main.c:443
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. Usare --help per ottenere un elenco di opzioni valide.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "Errore nel file di configurazione: %s.\n"
+
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"I domini di registrazione «%s» non riconosciuti caricati dai file di "
+"configurazione vengono ignorati.\n"
-#: ../src/main.c:450
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Analisi del file di stato %s non riuscita: (%d) %s\n"
-#: ../src/main.c:467
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Impossibile avviare come demone: %s [errore %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:138
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "Rete %s"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# Creato da NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:145
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2632,194 +5886,993 @@ msgstr ""
"# Unito da %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "non è stato trovato alcun client DHCP utilizzabile."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "è stato trovato «dhclient»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "è stato trovato «dhcpcd»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "client DHCP «%s» non supportato"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "Nota: il risolutore libc non supporta più di tre server di nomi."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "I server di nomi elencati sotto non possono essere riconosciuti."
-#: ../src/logging/nm-logging.c:141
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "Livello di registrazione «%s» sconosciuto"
-#: ../src/logging/nm-logging.c:187
+#: ../src/logging/nm-logging.c:228
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Dominio di registrazione «%s» sconosciuto"
-#: ../src/modem-manager/nm-modem-cdma.c:280
-#: ../src/modem-manager/nm-modem-broadband.c:553 ../src/nm-device-bt.c:345
-#, c-format
-msgid "CDMA connection %d"
-msgstr "Connessione CDMA %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Posizione file di configurazione"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/percorso/a/file.di.config"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "Posizione directory di configurazione"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/percorso/dir/config"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "Elenco di plugin separati da virgole"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "Un indirizzo HTTP(S) per controllare la connessione"
-#: ../src/modem-manager/nm-modem-gsm.c:558
-#: ../src/modem-manager/nm-modem-broadband.c:531 ../src/nm-device-bt.c:341
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "L'intervallo tra i controlli della connessione (in secondi)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "L'inizio atteso della risposta"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
msgid "GSM connection %d"
msgstr "Connessione GSM %d"
-# [NdT] si tratta di un messaggio che descrive un'azione
-#: ../src/nm-device-bond.c:202
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "Connessione CDMA %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "Connessione aggregata %d"
-#: ../src/nm-device-adsl.c:194
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "Connessione ADSL %d"
-# [NdT] si tratta di un messaggio che descrive un'azione
-#: ../src/nm-device-bridge.c:208
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
#, c-format
msgid "Bridge connection %d"
msgstr "Connessione bridge %d"
-#: ../src/nm-device-bt.c:316
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "Connessione PAN %d"
-#: ../src/nm-device-bt.c:349
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "Connessione DUN %d"
-#: ../src/nm-device-ethernet.c:1324
+#: ../src/devices/nm-device-ethernet.c:1241
#, c-format
msgid "PPPoE connection %d"
msgstr "Connessione PPPoE %d"
-# [NdT] si tratta di un messaggio che descrive un'azione
-#: ../src/nm-device-ethernet.c:1324 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1241
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Connessione via cavo %d"
-# [NdT] si tratta di un messaggio che descrive un'azione
-#: ../src/nm-device-infiniband.c:305
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "Connessione InfiniBand %d"
-#: ../src/nm-device-olpc-mesh.c:293
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "Mesh %d"
-#: ../src/nm-device-vlan.c:335
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "Connessione team %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "Connessione VLAN %d"
-#: ../src/nm-manager.c:746
+#: ../src/nm-manager.c:3364 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "Connessione VPN %d"
-#: ../src/nm-netlink-monitor.c:152 ../src/nm-netlink-monitor.c:276
-#: ../src/nm-netlink-monitor.c:699
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "si è verificato un errore durante l'attesa dei dati sul socket"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "errore nell'elaborare il messaggio netlink: %s"
-#: ../src/nm-netlink-monitor.c:255
-msgid "error occurred while waiting for data on socket"
-msgstr "si è verificato un errore durante l'attesa dei dati sul socket"
-
-#: ../src/nm-netlink-monitor.c:300
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"impossibile collegarsi a netlink per monitorare lo stato del collegamento: %s"
-#: ../src/nm-netlink-monitor.c:311
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr ""
"impossibile abilitare il passaggio delle credenziali handle netlink: %s"
-#: ../src/nm-netlink-monitor.c:334 ../src/nm-netlink-monitor.c:394
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
"impossibile allocare un handle netlink per monitorare lo stato del "
"collegamento: %s"
-#: ../src/nm-netlink-monitor.c:419
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"impossibile allocare la cache dei collegamenti netlink per monitorare lo "
-"stato del collegamento: %s"
-
-#: ../src/nm-netlink-monitor.c:546
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "impossibile unirsi a un gruppo netlink: %s"
-#: ../src/nm-netlink-monitor.c:675 ../src/nm-netlink-monitor.c:688
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "errore nell'aggiornare la cache dei link: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager deve disabilitare le reti"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "Sistema"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3702
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "Aggregata"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3887
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "Team"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
msgid "Bridge"
msgstr "Bridge"
-#: ../test/nm-online.c:111
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\rConnessione in corso"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "Tempo di attesa per una connessione, in secondi (predefinito 30)"
-
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"Esce immediatamente se il programma non è in esecuzione o non è in "
-"connessione"
+"Tempo di attesa per una connessione, in secondi (senza l'opzione, "
+"predefinito a 30)"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "Esce immediatamente se il programma non è in esecuzione"
+
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "Non stampa nulla"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "Attende una connessione stabilita con successo"
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"Attende che NetworkManager completi l'attivazione delle connessioni di rete "
+"di avvio"
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
"Opzione non valida. Usare --help per ottenere un elenco delle opzioni valide."
+
+#: ../tui/newt/nmt-newt-utils.c:161 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-edit.c:443 ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:111
+msgid "OK"
+msgstr "OK"
+
+#: ../tui/newt/nmt-newt-utils.c:278 ../tui/newt/nmt-newt-utils.c:310
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "Impossibile decodificare il file temporaneo: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:316
+#, c-format
+msgid "Editor failed: %s"
+msgstr "Apertura dell'editor non riuscita: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:322
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Impossibile rileggere il file: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Connessione Ethernet %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Connessione Wi-Fi %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "Banda larga mobile"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Connessione a banda larga mobile %d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "Connessione DSL %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "Via cavo"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "Mesh OLPC"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "PCI"
+
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%2$s %1$s"
+
+#: ../tui/nmt-connect-connection-list.c:606
+msgid "Activation failed"
+msgstr "Attivazione non riuscita"
+
+#: ../tui/nmt-connect-connection-list.c:647
+msgid "Connecting..."
+msgstr "Connessione..."
+
+#: ../tui/nmt-connect-connection-list.c:705 ../tui/nmtui-connect.c:72
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Impossibile attivare la connessione: %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "Seleziona..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Aggiungi"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "Modifica..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:472
+msgid "Delete"
+msgstr "Elimina"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "Impossibile creare l'editor per la connessione «%s» di tipo «%s»."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Impossibile creare l'editor per la connessione non valida «%s»."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "Modifica connessione"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Errore nel salvare la connessione: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Impossibile salvare la connessione: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Impossibile aggiungere una nuova connessione: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:471 ../tui/nmtui-hostname.c:69 ../tui/nmtui.c:109
+msgid "Cancel"
+msgstr "Annulla"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(predefinito)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "byte"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Backup attivo"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Broadcast"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Adaptive Transmit Load Balancing (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Adaptive Load Balancing (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (consigliato)"
+
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "Slave"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "Modalità"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "Primario"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "Monitoraggio collegamento"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "Frequenza monitoraggio"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Ritardo ripristino collegamento"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Ritardo caduta collegamento"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "Obiettivi ARP"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "PORTA BRIDGE"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "Priorità"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Costo percorso"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Modalità hairpin"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRIDGE"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "secondi"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "Tempo d'invecchiamento"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "Abilita STP (Spanning Tree Protocol)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Forward delay"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Hello time"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Età massima"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "Indirizzo MAC clonato"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Datagram"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "Collegato"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "Modalità trasporto"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Disabilitata"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Automatico"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Link-Local"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Manuale"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Condivisa"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "CONFIGURAZIONE IPv4"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(nessun instradamento personalizzato)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "Un instradamento personalizzato"
+msgstr[1] "%d instradamento personalizzati"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "Indirizzi"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "Gateway"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "Server DNS"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "Domini di ricerca"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "Instradamento"
+
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "Non usare mai questa rete per l'instradamento predefinito"
+
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "Richiede indirizzamento IPv4 per questa connessione"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignora"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automatico (solo DHCP)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "CONFIGURAZIONE IPv6"
+
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "Richiede indirizzamento IPv6 per questa connessione"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "Nascondi"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "Mostra"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "Nome profilo"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "Dispositivo"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "Connessione automatica"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Disponibile per tutti gli utenti"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "PORTA TEAM"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "Configurazione JSON"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "TEAM"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "Genitore"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "Id VLAN"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI "
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Client"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "Punto di accesso"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Rete Ad-Hoc"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Automatico"
+
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Nessuna"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA e WPA2 Personal"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA e WPA2 Enterprise"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "Chiave WEP 40/128-bit (hex o ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "Frase di accesso WEP 128-bit"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "WEP dinamico (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (predefinito)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "Sistema aperto"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "Chiave condivisa"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "Canale"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "Sicurezza"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "Password"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(supporto per wpa-enterprise non ancora disponibile)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "Chiave"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "Indice WEP"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "Autenticazione"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(supporto per dynamic-wep non ancora disponibile)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "Nome utente"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Chiedi sempre la password"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Mostra password"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "Destinazione"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "Prefisso"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "Hop successivo"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "Metrica"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "Nessun instradamento personalizzato definito."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "Identità"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "Password della chiave privata"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "Servizio"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "Richiesta autenticazione dalla rete wireless"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"Password o chiavi di cifratura sono richieste per accedere alla rete "
+"wireless «%s»."
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Autenticazione via cavo 802.1X"
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Nome rete"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "Autenticazione DSL"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "Richiesto codice PIN"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "È necessario il codice PIN per il dispositivo mobile a banda larga"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "Password rete mobile a banda larga"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "È richiesta una password per collegarsi a «%s»."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "Selezionare il tipo di connessione slave da aggiungere."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Aggiungi..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Rimuovi"
+
+#. FIXME: the activate button doesn't do anything
+#: ../tui/nmtui-connect.c:113
+msgid "Activate"
+msgstr "Attiva"
+
+#: ../tui/nmtui-connect.c:114 ../tui/nmtui-edit.c:102
+msgid "Quit"
+msgstr "Esci"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "Crea"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "Selezionare il tipo di connessione da creare."
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"Se si sta creando una connessione VPN e tale connessione non appare "
+"nell'elenco, potrebbe mancare il corretto plugin VPN."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "Nuova connessione"
+
+#: ../tui/nmtui-edit.c:444
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Impossibile eliminare la connessione: %s"
+
+#: ../tui/nmtui-edit.c:473
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Eliminare la connessione «%s»?"
+
+#: ../tui/nmtui-edit.c:487
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "Impossibile eliminare la connessione: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Imposta nome host"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Nome host"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Nome host impostato a «%s»"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Impossibile impostare il nome host: %s"
+
+#: ../tui/nmtui.c:61
+msgid "Edit a connection"
+msgstr "Modifica una connessione"
+
+# [NdT] si tratta di un messaggio che descrive un’azione
+#: ../tui/nmtui.c:64
+msgid "Activate a connection"
+msgstr "Attiva una connessione"
+
+#: ../tui/nmtui.c:67
+msgid "Set system hostname"
+msgstr "Imposta il nome host del sistema"
+
+#: ../tui/nmtui.c:83
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../tui/nmtui.c:91
+msgid "Please select an option"
+msgstr "Selezionare un'opzione"
diff --git a/po/ja.po b/po/ja.po
index a57bfe5e2..16c7d12bf 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: NetworkManager\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2013-09-23 12:01+0900\n"
+"POT-Creation-Date: 2013-09-20 02:25+0000\n"
"PO-Revision-Date: 2013-09-17 10:09+0000\n"
"Last-Translator: Noriko Mizumoto <noriko@fedoraproject.org>\n"
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
@@ -20,341 +20,419 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: Plural-Forms: nplurals=1; plural=0;\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:133
-#: ../cli/src/connections.c:167
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:145
+#: ../cli/src/connections.c:179
msgid "GROUP"
msgstr "グループ"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "アドレス"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ルート"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "ドメイン"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "オプション"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:388 ../cli/src/settings.c:2646
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "無効㪠IPv4 アドレス '%s'"
+
+#: ../cli/src/common.c:396
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "無効ãªãƒ—レフィックス '%s'; <1-32> 許å¯"
+
+#: ../cli/src/common.c:403 ../cli/src/common.c:456
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "無効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ '%s'"
+
+#: ../cli/src/common.c:441 ../cli/src/settings.c:2892
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "無効㪠IPv6 アドレス '%s'"
+
+#: ../cli/src/common.c:449
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "無効ãªãƒ—レフィックス '%s'; <1-128> 許å¯"
+
+#: ../cli/src/common.c:496
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "無効㪠IPv4 ルート '%s'"
+
+#: ../cli/src/common.c:504
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "無効ãªãƒ—レフィックス '%s'; <0-32> 許å¯"
+
+#: ../cli/src/common.c:511 ../cli/src/common.c:574
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "無効ãªãƒã‚¯ã‚¹ãƒˆãƒ›ãƒƒãƒ—アドレス '%s'"
+
+#: ../cli/src/common.c:518 ../cli/src/common.c:582
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "無効ãªãƒ¡ãƒˆãƒªãƒƒã‚¯ '%s'"
+
+#: ../cli/src/common.c:559
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "無効㪠IPv6 ルート '%s'"
+
+#: ../cli/src/common.c:567
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "無効ãªãƒ—レフィックス '%s'; <0-128> 許å¯"
+
+#: ../cli/src/common.c:603
msgid "unmanaged"
msgstr "管ç†ç„¡ã—"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:605
msgid "unavailable"
msgstr "利用ä¸å¯"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:607 ../cli/src/network-manager.c:154
msgid "disconnected"
msgstr "切断済ã¿"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:609
msgid "connecting (prepare)"
msgstr "接続中(準備)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:611
msgid "connecting (configuring)"
msgstr "接続中(設定中)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:613
msgid "connecting (need authentication)"
msgstr "接続中(èªè¨¼ãŒå¿…è¦ï¼‰"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:615
msgid "connecting (getting IP configuration)"
msgstr "接続中(IP 設定をå–得中)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:617
msgid "connecting (checking IP connectivity)"
msgstr "接続中(IP ã®æŽ¥ç¶šæ€§ãƒã‚§ãƒƒã‚¯ï¼‰"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:619
msgid "connecting (starting secondary connections)"
msgstr "接続中(セカンダリ接続を開始)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:621 ../cli/src/network-manager.c:150
msgid "connected"
msgstr "接続済ã¿"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:466
+#: ../cli/src/common.c:623 ../cli/src/connections.c:570
msgid "deactivating"
msgstr "åœæ­¢ä¸­"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:625
msgid "connection failed"
msgstr "接続ã«å¤±æ•—"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:471
-#: ../cli/src/connections.c:494 ../cli/src/connections.c:1189
-#: ../cli/src/devices.c:664 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:661
-#: ../cli/src/settings.c:689 ../cli/src/settings.c:751 ../cli/src/utils.c:533
-#: ../src/main.c:435 ../src/main.c:454
+#: ../cli/src/common.c:627 ../cli/src/connections.c:575
+#: ../cli/src/connections.c:598 ../cli/src/connections.c:1287
+#: ../cli/src/devices.c:702 ../cli/src/devices.c:1979
+#: ../cli/src/network-manager.c:157 ../cli/src/network-manager.c:175
+#: ../cli/src/network-manager.c:241 ../cli/src/network-manager.c:244
+#: ../cli/src/network-manager.c:254 ../cli/src/network-manager.c:256
+#: ../cli/src/network-manager.c:313 ../cli/src/network-manager.c:329
+#: ../cli/src/settings.c:695 ../cli/src/settings.c:723
+#: ../cli/src/settings.c:785 ../cli/src/utils.c:990 ../src/main.c:461
+#: ../src/main.c:483
msgid "unknown"
msgstr "ä¸æ˜Ž"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:636
msgid "No reason given"
msgstr "原因ä¸æ˜Ž"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:639 ../cli/src/connections.c:2036
+#, c-format
msgid "Unknown error"
msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:642
msgid "Device is now managed"
msgstr "デãƒã‚¤ã‚¹ãŒç®¡ç†ä¸‹ã«ç½®ã‹ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:645
msgid "Device is now unmanaged"
msgstr "デãƒã‚¤ã‚¹ãŒç®¡ç†ä¸‹ã‹ã‚‰å¤–ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:648
msgid "The device could not be readied for configuration"
msgstr "デãƒã‚¤ã‚¹ã®è¨­å®šæº–å‚™ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:651
msgid "IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr "IP 設定を確ä¿ã§ãã¾ã›ã‚“ã§ã—㟠(利用å¯èƒ½ãªã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãªã„ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãªã©)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:654
msgid "The IP configuration is no longer valid"
msgstr "ã“ã® IP 設定ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã—ãŸ"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:657
msgid "Secrets were required, but not provided"
msgstr "秘密ãŒå¿…è¦ã§ã—ãŸãŒå…¥åŠ›ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:660
msgid "802.1X supplicant disconnected"
msgstr "802.1X サプリカントãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:663
msgid "802.1X supplicant configuration failed"
msgstr "802.1X サプリカントã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:666
msgid "802.1X supplicant failed"
msgstr "802.1X サプリカントãŒå¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:669
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X サプリカントã®èªè¨¼ã«æ™‚é–“ãŒã‹ã‹ã‚ŠéŽãŽã¾ã—ãŸ"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:672
msgid "PPP service failed to start"
msgstr "PPP サービスã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:675
msgid "PPP service disconnected"
msgstr "PPP サービスã®æŽ¥ç¶šãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:678
msgid "PPP failed"
msgstr "PPP ã®å¤±æ•—"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:681
msgid "DHCP client failed to start"
msgstr "DHCP クライアントã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:684
msgid "DHCP client error"
msgstr "DHCP クライアントエラー"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:687
msgid "DHCP client failed"
msgstr "DHCP クライアントã®å¤±æ•—"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:690
msgid "Shared connection service failed to start"
msgstr "共有接続サービスã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:693
msgid "Shared connection service failed"
msgstr "共有接続サービスã®å¤±æ•—"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:696
msgid "AutoIP service failed to start"
msgstr "AutoIP サービスã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:699
msgid "AutoIP service error"
msgstr "AutoIP サービスエラー"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:702
msgid "AutoIP service failed"
msgstr "AutoIP サービスã®å¤±æ•—"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:705
msgid "The line is busy"
msgstr "回線ãŒä½¿ç”¨ä¸­ã§ã™"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:708
msgid "No dial tone"
msgstr "ダイアル音ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:711
msgid "No carrier could be established"
msgstr "確立ã§ãるキャリアãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:714
msgid "The dialing request timed out"
msgstr "ダイアルè¦æ±‚ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:717
msgid "The dialing attempt failed"
msgstr "ダイアルã®è©¦è¡Œã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:720
msgid "Modem initialization failed"
msgstr "モデムã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:723
msgid "Failed to select the specified APN"
msgstr "指定ã•ã‚ŒãŸ APN ã®é¸æŠžã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:726
msgid "Not searching for networks"
msgstr ""
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:729
msgid "Network registration denied"
msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç™»éŒ²ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:732
msgid "Network registration timed out"
msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç™»éŒ²ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:735
msgid "Failed to register with the requested network"
msgstr "è¦æ±‚ã•ã‚ŒãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:738
msgid "PIN check failed"
msgstr "PIN 確èªã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:741
msgid "Necessary firmware for the device may be missing"
msgstr "ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã«å¿…è¦ãªãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:744
msgid "The device was removed"
msgstr "ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:747
msgid "NetworkManager went to sleep"
msgstr "NetworkManager ãŒã‚¹ãƒªãƒ¼ãƒ—状態ã«å…¥ã‚Šã¾ã—ãŸ"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:750
msgid "The device's active connection disappeared"
msgstr "ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šãŒæ¶ˆæ»…ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:753
msgid "Device disconnected by user or client"
msgstr "ユーザーã¾ãŸã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚ˆã‚Šãƒ‡ãƒã‚¤ã‚¹ãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:756
msgid "Carrier/link changed"
msgstr "キャリアï¼ãƒªãƒ³ã‚¯ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:759
msgid "The device's existing connection was assumed"
msgstr ""
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:762
msgid "The supplicant is now available"
msgstr "サプリカントãŒä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸ"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:765
msgid "The modem could not be found"
msgstr "モデムãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:768
msgid "The Bluetooth connection failed or timed out"
msgstr "Bluetooth 接続ãŒå¤±æ•—ã¾ãŸã¯ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:771
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM モデム㮠SIM カードãŒæŒ¿å…¥ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:774
msgid "GSM Modem's SIM PIN required"
msgstr "GSM モデム㮠SIM PIN ãŒå¿…è¦ã§ã™"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:777
msgid "GSM Modem's SIM PUK required"
msgstr "GSM モデム㮠SIM PUK ãŒå¿…è¦ã§ã™"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:780
msgid "GSM Modem's SIM wrong"
msgstr "GSM モデム㮠SIM ãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:783
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand デãƒã‚¤ã‚¹ã§ã¯æŽ¥ç¶šãƒ¢ãƒ¼ãƒ‰ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:786
msgid "A dependency of the connection failed"
msgstr "接続ä¾å­˜æ€§ã®å¤±æ•—"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:789
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL ブリッジ経由㮠RFC 2684 Ethernet ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:792
msgid "ModemManager is unavailable"
msgstr "ModemManager ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“"
-#: ../cli/src/common.c:558
+#: ../cli/src/common.c:795
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:561
+#: ../cli/src/common.c:798
msgid "A secondary connection of the base connection failed"
msgstr "ベース接続ã®ã‚»ã‚«ãƒ³ãƒ€ãƒªæŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:310 ../cli/src/devices.c:328
-#: ../cli/src/devices.c:450 ../cli/src/devices.c:494
+#: ../cli/src/common.c:801 ../cli/src/devices.c:519
msgid "Unknown"
msgstr "ä¸æ˜Ž"
+#: ../cli/src/common.c:843
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "無効ãªå„ªå…ˆåº¦ãƒžãƒƒãƒ— '%s'"
+
+#: ../cli/src/common.c:850 ../cli/src/common.c:856
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªå„ªå…ˆåº¦ã§ã¯ã‚ã‚Šã¾ã›ã‚“ (<0-%ld>)"
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "設定åã¯? "
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "プロパティåã¯? "
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "接続タイプを入力ã—ã¦ãã ã•ã„: "
+
#. 0
#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:146
#: ../cli/src/devices.c:109 ../cli/src/devices.c:134 ../cli/src/devices.c:144
#: ../cli/src/devices.c:154 ../cli/src/devices.c:164 ../cli/src/devices.c:180
-#: ../cli/src/devices.c:194 ../cli/src/devices.c:216 ../cli/src/devices.c:232
-#: ../cli/src/devices.c:241
+#: ../cli/src/devices.c:194 ../cli/src/devices.c:221 ../cli/src/devices.c:237
+#: ../cli/src/devices.c:246
msgid "NAME"
msgstr "åå‰"
#. 0
#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:147
msgid "UUID"
msgstr "UUID"
@@ -362,44 +440,44 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
-#: ../cli/src/devices.c:72 ../cli/src/devices.c:111 ../cli/src/devices.c:219
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:180
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:111 ../cli/src/devices.c:224
msgid "TYPE"
msgstr "タイプ"
#. 2
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "タイムスタンプ"
#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "タイムスタンプ-リアル"
#. 4
#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:123
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:123
msgid "AUTOCONNECT"
msgstr "自動接続"
#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "読ã¿è¾¼ã¿å°‚用"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
-#: ../cli/src/devices.c:74 ../cli/src/devices.c:206 ../cli/src/devices.c:222
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:154
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:210 ../cli/src/devices.c:227
msgid "DBUS-PATH"
msgstr "DBUS パス"
#. 2
-#: ../cli/src/connections.c:136
+#: ../cli/src/connections.c:148
msgid "DEVICES"
msgstr "デãƒã‚¤ã‚¹"
@@ -407,492 +485,1840 @@ msgstr "デãƒã‚¤ã‚¹"
#. 1
#. 8
#. 1
-#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
+#: ../cli/src/connections.c:149 ../cli/src/devices.c:73
#: ../cli/src/devices.c:118 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "状態"
#. 4
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:150
msgid "DEFAULT"
msgstr "デフォルト"
#. 5
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:151
msgid "DEFAULT6"
msgstr "デフォルト6"
#. 6
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:152
msgid "SPEC-OBJECT"
msgstr "スペックオブジェクト"
#. 7
#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#: ../cli/src/connections.c:153 ../cli/src/connections.c:167
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:143
+#: ../cli/src/connections.c:155
msgid "CON-PATH"
msgstr "CON パス"
#. 10
-#: ../cli/src/connections.c:144
+#: ../cli/src/connections.c:156
msgid "ZONE"
msgstr "ゾーン"
#. 11
-#: ../cli/src/connections.c:145
+#: ../cli/src/connections.c:157
msgid "MASTER-PATH"
msgstr "マスターパス"
-#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
+#: ../cli/src/connections.c:165 ../cli/src/devices.c:83
msgid "GENERAL"
msgstr "全般"
#. 0
-#: ../cli/src/connections.c:154
+#: ../cli/src/connections.c:166
msgid "IP"
msgstr "IP"
#. 1
-#: ../cli/src/connections.c:169
+#: ../cli/src/connections.c:181
msgid "USERNAME"
msgstr "ユーザーå"
#. 2
-#: ../cli/src/connections.c:170
+#: ../cli/src/connections.c:182
msgid "GATEWAY"
msgstr "ゲートウェイ"
#. 3
-#: ../cli/src/connections.c:171
+#: ../cli/src/connections.c:183
msgid "BANNER"
msgstr "ãƒãƒŠãƒ¼"
#. 4
-#: ../cli/src/connections.c:172
+#: ../cli/src/connections.c:184
msgid "VPN-STATE"
msgstr "VPN ã®çŠ¶æ…‹"
#. 5
-#: ../cli/src/connections.c:173
+#: ../cli/src/connections.c:185
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:195
-#, fuzzy, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down }\n"
-#| "\n"
-#| " list [id <id> | uuid <id> | system | user]\n"
-#| " status\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
+#: ../cli/src/connections.c:211
+#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
+" COMMAND := { show | up | down | delete }\n"
+"\n"
+" show configured [[ id | uuid | path ] <ID>]\n"
+"\n"
+" show active [[ id | uuid | path | apath ] <ID>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [ id | uuid | path | apath ] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [ id | uuid | path ] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [ id | uuid | path ] <ID> | [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [ id | uuid | path ] <ID>\n"
+"\n"
+" reload\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout <timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
"\n"
msgstr ""
-"使用法: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down }\n"
+"使ã„æ–¹: nmcli connection { コマンド | help }\n"
+" コマンド := { show | up | down | delete }\n"
+"\n"
+" show configured [[ id | uuid | path ] <ID>]\n"
+"\n"
+" show active [[ id | uuid | path | apath ] <ID>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [ id | uuid | path | apath ] <ID>\n"
+"\n"
+" add 共通オプション タイプ固有オプション IP オプション\n"
+"\n"
+" modify [ id | uuid | path ] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [ id | uuid | path ] <ID> | [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [ id | uuid | path ] <ID>\n"
+"\n"
+" reload\n"
+"\n"
"\n"
-" list [id <id> | uuid <id> | system | user]\n"
-" status\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
-" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:442
-#, fuzzy, c-format
-#| msgid "Error: 'stp': %s."
-msgid "Error: 'con list': %s"
-msgstr "エラー:'stp': %s。"
+#: ../cli/src/connections.c:233
+#, c-format
+msgid ""
+"Usage: nmcli connection add { OPTIONS | help }\n"
+" OPTIONS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" [id <VLAN id>]\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) | broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <json config>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <json config>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+msgstr ""
+"使ã„æ–¹: nmcli connection add { オプション | help }\n"
+" オプション := 共通オプション タイプ固有オプション IP オプション\n"
+"\n"
+" 共通オプション:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" タイプ固有オプション:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" [id <VLAN id>]\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) | broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <json config>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <json config>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP オプション:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
-#, fuzzy, c-format
-#| msgid "Error: 'nm status': %s; allowed fields: %s"
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "エラー: 'nm status': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+#: ../cli/src/connections.c:346
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "エラー: 'list configured': %s"
-#: ../cli/src/connections.c:266
+#: ../cli/src/connections.c:348
+#, c-format
+msgid "Error: 'list configured': %s; allowed fields: %s"
+msgstr "エラー: 'list configured': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+
+#. Main header
+#: ../cli/src/connections.c:356
msgid "Connection details"
msgstr "接続ã®è©³ç´°"
-#: ../cli/src/connections.c:317
+#: ../cli/src/connections.c:420
msgid "never"
msgstr "ã—ãªã„"
#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
-#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
-#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
-#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
-#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
-#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
-#: ../cli/src/network-manager.c:267 ../cli/src/settings.c:866
-#: ../cli/src/settings.c:941 ../cli/src/settings.c:1076
-#: ../cli/src/settings.c:1166 ../cli/src/settings.c:1376
-#: ../cli/src/settings.c:1377 ../cli/src/settings.c:1379
-#: ../cli/src/settings.c:1381 ../cli/src/settings.c:1382
-#: ../cli/src/settings.c:1513 ../cli/src/settings.c:1514
-#: ../cli/src/settings.c:1515 ../cli/src/settings.c:1516
-#: ../cli/src/settings.c:1594 ../cli/src/settings.c:1595
-#: ../cli/src/settings.c:1596 ../cli/src/settings.c:1597
-#: ../cli/src/settings.c:1598 ../cli/src/settings.c:1599
-#: ../cli/src/settings.c:1600 ../cli/src/settings.c:1601
-#: ../cli/src/settings.c:1602 ../cli/src/settings.c:1603
-#: ../cli/src/settings.c:1604 ../cli/src/settings.c:1605
-#: ../cli/src/settings.c:1606 ../cli/src/settings.c:1688
-#: ../cli/src/settings.c:2044 ../cli/src/settings.c:2081
+#: ../cli/src/connections.c:421 ../cli/src/connections.c:422
+#: ../cli/src/connections.c:671 ../cli/src/connections.c:672
+#: ../cli/src/connections.c:674 ../cli/src/connections.c:5251
+#: ../cli/src/devices.c:489 ../cli/src/devices.c:539 ../cli/src/devices.c:673
+#: ../cli/src/devices.c:674 ../cli/src/devices.c:675 ../cli/src/devices.c:706
+#: ../cli/src/devices.c:734 ../cli/src/devices.c:735 ../cli/src/devices.c:736
+#: ../cli/src/devices.c:737 ../cli/src/devices.c:738 ../cli/src/devices.c:739
+#: ../cli/src/devices.c:740 ../cli/src/network-manager.c:323
msgid "yes"
msgstr "ã¯ã„"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
-#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
-#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
-#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
-#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
-#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
-#: ../cli/src/network-manager.c:269 ../cli/src/settings.c:866
-#: ../cli/src/settings.c:868 ../cli/src/settings.c:941
-#: ../cli/src/settings.c:1076 ../cli/src/settings.c:1166
-#: ../cli/src/settings.c:1376 ../cli/src/settings.c:1377
-#: ../cli/src/settings.c:1379 ../cli/src/settings.c:1381
-#: ../cli/src/settings.c:1382 ../cli/src/settings.c:1513
-#: ../cli/src/settings.c:1514 ../cli/src/settings.c:1515
-#: ../cli/src/settings.c:1516 ../cli/src/settings.c:1594
-#: ../cli/src/settings.c:1595 ../cli/src/settings.c:1596
-#: ../cli/src/settings.c:1597 ../cli/src/settings.c:1598
-#: ../cli/src/settings.c:1599 ../cli/src/settings.c:1600
-#: ../cli/src/settings.c:1601 ../cli/src/settings.c:1602
-#: ../cli/src/settings.c:1603 ../cli/src/settings.c:1604
-#: ../cli/src/settings.c:1605 ../cli/src/settings.c:1606
-#: ../cli/src/settings.c:1688 ../cli/src/settings.c:2044
-#: ../cli/src/settings.c:2081
+#: ../cli/src/connections.c:421 ../cli/src/connections.c:422
+#: ../cli/src/connections.c:671 ../cli/src/connections.c:672
+#: ../cli/src/connections.c:674 ../cli/src/connections.c:5251
+#: ../cli/src/devices.c:489 ../cli/src/devices.c:539 ../cli/src/devices.c:673
+#: ../cli/src/devices.c:674 ../cli/src/devices.c:675 ../cli/src/devices.c:706
+#: ../cli/src/devices.c:734 ../cli/src/devices.c:735 ../cli/src/devices.c:736
+#: ../cli/src/devices.c:737 ../cli/src/devices.c:738 ../cli/src/devices.c:739
+#: ../cli/src/devices.c:740 ../cli/src/network-manager.c:325
msgid "no"
msgstr "ã„ã„ãˆ"
-#: ../cli/src/connections.c:393
-#, fuzzy
-#| msgid "Connection details"
-msgid "Connection list"
-msgstr "接続ã®è©³ç´°"
-
-#: ../cli/src/connections.c:406 ../cli/src/connections.c:948
-#: ../cli/src/connections.c:1486 ../cli/src/connections.c:1501
-#: ../cli/src/connections.c:1510 ../cli/src/connections.c:1520
-#: ../cli/src/connections.c:1532 ../cli/src/connections.c:1641
-#: ../cli/src/connections.c:1743 ../cli/src/devices.c:1192
-#: ../cli/src/devices.c:1202 ../cli/src/devices.c:1320
-#: ../cli/src/devices.c:1328 ../cli/src/devices.c:1692
-#: ../cli/src/devices.c:1699 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1720 ../cli/src/devices.c:1737
-#: ../cli/src/devices.c:1748 ../cli/src/devices.c:1969
-#: ../cli/src/devices.c:1976
+#. Add headers
+#: ../cli/src/connections.c:499
+msgid "List of configured connections"
+msgstr "設定ã•ã‚Œã¦ã„る接続ã®ä¸€è¦§"
+
+#: ../cli/src/connections.c:518 ../cli/src/connections.c:1047
+#: ../cli/src/connections.c:1546 ../cli/src/connections.c:1567
+#: ../cli/src/connections.c:1576 ../cli/src/connections.c:1586
+#: ../cli/src/connections.c:1708 ../cli/src/connections.c:6520
+#: ../cli/src/connections.c:6695 ../cli/src/devices.c:1351
+#: ../cli/src/devices.c:1359 ../cli/src/devices.c:1750
+#: ../cli/src/devices.c:1757 ../cli/src/devices.c:1771
+#: ../cli/src/devices.c:1778 ../cli/src/devices.c:1795
+#: ../cli/src/devices.c:1803 ../cli/src/devices.c:1999
+#: ../cli/src/devices.c:2095 ../cli/src/devices.c:2102
#, c-format
msgid "Error: %s argument is missing."
msgstr "エラー: %s 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:419
+#: ../cli/src/connections.c:532
#, c-format
msgid "Error: %s - no such connection."
msgstr "エラー: %s - ãã®ã‚ˆã†ãªæŽ¥ç¶šã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:425 ../cli/src/connections.c:1545
-#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1750
-#: ../cli/src/devices.c:976 ../cli/src/devices.c:1056
-#: ../cli/src/devices.c:1216 ../cli/src/devices.c:1334
-#: ../cli/src/devices.c:1761 ../cli/src/devices.c:1982
+#: ../cli/src/connections.c:545
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "ä¸æ˜Žãªãƒ‘ラメーター: %s\n"
+msgid "Error: 'show configured': %s"
+msgstr "エラー: 'show configured': %s"
-#: ../cli/src/connections.c:434
+#: ../cli/src/connections.c:547
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "エラー: 有効ãªãƒ‘ラメータãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+msgid "Error: 'show configured': %s; allowed fields: %s"
+msgstr "エラー: 'show configured': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/connections.c:449 ../cli/src/connections.c:1846
-#: ../cli/src/devices.c:2193 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:553 ../cli/src/connections.c:6761
+#: ../cli/src/connections.c:6871 ../cli/src/devices.c:1978
+#: ../cli/src/devices.c:2327 ../cli/src/network-manager.c:428
+#: ../cli/src/network-manager.c:458 ../cli/src/network-manager.c:468
+#: ../cli/src/network-manager.c:476 ../cli/src/network-manager.c:486
+#: ../cli/src/network-manager.c:603 ../cli/src/network-manager.c:639
+#: ../cli/src/network-manager.c:652
#, c-format
msgid "Error: %s."
msgstr "エラー: %s."
-#: ../cli/src/connections.c:462
+#: ../cli/src/connections.c:566
msgid "activating"
msgstr "アクティベート中"
-#: ../cli/src/connections.c:464
+#: ../cli/src/connections.c:568
msgid "activated"
msgstr "アクティベート済ã¿"
-#: ../cli/src/connections.c:468
+#: ../cli/src/connections.c:572
msgid "deactivated"
msgstr "åœæ­¢ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:480
+#: ../cli/src/connections.c:584
msgid "VPN connecting (prepare)"
msgstr "VPN 接続(準備)"
-#: ../cli/src/connections.c:482
+#: ../cli/src/connections.c:586
msgid "VPN connecting (need authentication)"
msgstr "VPN 接続(èªè¨¼ãŒå¿…è¦ï¼‰"
-#: ../cli/src/connections.c:484
+#: ../cli/src/connections.c:588
msgid "VPN connecting"
msgstr "VPN 接続"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:590
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN 接続(IP 設定をå–得)"
-#: ../cli/src/connections.c:488
+#: ../cli/src/connections.c:592
msgid "VPN connected"
msgstr "VPN 接続済ã¿"
-#: ../cli/src/connections.c:490
+#: ../cli/src/connections.c:594
msgid "VPN connection failed"
msgstr "VPN 接続失敗"
-#: ../cli/src/connections.c:492
+#: ../cli/src/connections.c:596
msgid "VPN disconnected"
msgstr "VPN 切断済ã¿"
-#: ../cli/src/connections.c:548 ../cli/src/connections.c:558
+#: ../cli/src/connections.c:667 ../cli/src/connections.c:677
+#: ../cli/src/devices.c:479
msgid "N/A"
msgstr "ãªã—"
-#: ../cli/src/connections.c:752 ../cli/src/connections.c:976
-#, fuzzy, c-format
-#| msgid "Error: 'device status': %s"
-msgid "Error: 'con status': %s"
-msgstr "エラー: 'device status': %s"
+#: ../cli/src/connections.c:850
+#, c-format
+msgid "Error: 'list active': %s"
+msgstr "エラー: 'list active': %s"
-#: ../cli/src/connections.c:754 ../cli/src/connections.c:978
-#, fuzzy, c-format
-#| msgid "Error: 'nm status': %s; allowed fields: %s"
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "エラー: 'nm status': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+#: ../cli/src/connections.c:852
+#, c-format
+msgid "Error: 'list active': %s; allowed fields: %s"
+msgstr "エラー: 'list active': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/connections.c:762
+#. Main header
+#: ../cli/src/connections.c:860
msgid "Active connection details"
msgstr "アクティブãªæŽ¥ç¶šã®è©³ç´°"
-#: ../cli/src/connections.c:898 ../cli/src/connections.c:1560
-#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1764
-#: ../cli/src/devices.c:1003 ../cli/src/devices.c:1065
-#: ../cli/src/devices.c:1231 ../cli/src/devices.c:1364
-#: ../cli/src/devices.c:1783 ../cli/src/devices.c:2011
-#: ../cli/src/network-manager.c:311
-#, fuzzy, c-format
-#| msgid "Error: NetworkManager is not running."
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "エラー: NetworkManager ãŒèµ·å‹•ã—ã¦ã„ã¾ã›ã‚“。"
-
-#: ../cli/src/connections.c:902 ../cli/src/connections.c:1564
-#: ../cli/src/connections.c:1677 ../cli/src/connections.c:1768
-#: ../cli/src/devices.c:1007 ../cli/src/devices.c:1069
-#: ../cli/src/devices.c:1235 ../cli/src/devices.c:1368
-#: ../cli/src/devices.c:1787 ../cli/src/devices.c:2015
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:999 ../cli/src/connections.c:1606
+#: ../cli/src/connections.c:1691 ../cli/src/connections.c:6549
+#: ../cli/src/connections.c:6664 ../cli/src/connections.c:6755
+#: ../cli/src/devices.c:1058 ../cli/src/devices.c:1105
+#: ../cli/src/devices.c:1256 ../cli/src/devices.c:1397
+#: ../cli/src/devices.c:1837 ../cli/src/devices.c:2140
+#: ../cli/src/network-manager.c:369
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "エラー: NetworkManager ãŒèµ·å‹•ã—ã¦ã„ã¾ã›ã‚“。"
-#: ../cli/src/connections.c:934
-#, fuzzy
-#| msgid "Active connection details"
-msgid "Active connections"
-msgstr "アクティブãªæŽ¥ç¶šã®è©³ç´°"
+#. Add headers
+#: ../cli/src/connections.c:1025
+msgid "List of active connections"
+msgstr "アクティブãªæŽ¥ç¶šã®ä¸€è¦§"
-#: ../cli/src/connections.c:959
+#: ../cli/src/connections.c:1061 ../cli/src/connections.c:1718
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "エラー: '%s' ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:964
-#, fuzzy, c-format
-#| msgid "Unknown parameter: %s\n"
-msgid "Error: unknown parameter: %s"
-msgstr "ä¸æ˜Žãªãƒ‘ラメーター: %s\n"
+#: ../cli/src/connections.c:1074
+#, c-format
+msgid "Error: 'show active': %s"
+msgstr "エラー: 'show active': %s"
-#: ../cli/src/connections.c:1071
+#: ../cli/src/connections.c:1076
+#, c-format
+msgid "Error: 'show active': %s; allowed fields: %s"
+msgstr "エラー: 'show active': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+
+#: ../cli/src/connections.c:1169
#, c-format
msgid "no active connection on device '%s'"
msgstr "デãƒã‚¤ã‚¹ '%s' 上ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1079
+#: ../cli/src/connections.c:1177
msgid "no active connection or device"
msgstr "アクティブãªæŽ¥ç¶šã¾ãŸã¯ãƒ‡ãƒã‚¤ã‚¹ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1248
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "デãƒã‚¤ã‚¹ '%s' ã¯æŽ¥ç¶š '%s' ã¨äº’æ›æ€§ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1153
+#: ../cli/src/connections.c:1251
#, c-format
msgid "no device found for connection '%s'"
msgstr "接続 '%s'用ã®ãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:1263
msgid "unknown reason"
msgstr "ä¸æ˜Žãªç†ç”±"
-#: ../cli/src/connections.c:1167
+#: ../cli/src/connections.c:1265 ../cli/src/network-manager.c:166
msgid "none"
msgstr "ãªã—"
-#: ../cli/src/connections.c:1169
+#: ../cli/src/connections.c:1267
msgid "the user was disconnected"
msgstr "ユーザーã®æŽ¥ç¶šãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:1171
+#: ../cli/src/connections.c:1269
msgid "the base network connection was interrupted"
msgstr "基本ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãŒå¦¨å®³ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:1173
+#: ../cli/src/connections.c:1271
msgid "the VPN service stopped unexpectedly"
msgstr "VPN サービスãŒäºˆæœŸã—ãªã„åœæ­¢ã‚’ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:1175
+#: ../cli/src/connections.c:1273
msgid "the VPN service returned invalid configuration"
msgstr "VPN サービスã¯ç„¡åŠ¹ãªè¨­å®šã‚’è¿”ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1275
msgid "the connection attempt timed out"
msgstr "接続試行ã¯æ™‚間切れã§ã™"
-#: ../cli/src/connections.c:1179
+#: ../cli/src/connections.c:1277
msgid "the VPN service did not start in time"
msgstr "VPN サービスã¯æ™‚間内ã«é–‹å§‹ã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/connections.c:1181
+#: ../cli/src/connections.c:1279
msgid "the VPN service failed to start"
msgstr "VPN サービスã®é–‹å§‹ã¯å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:1183
+#: ../cli/src/connections.c:1281
msgid "no valid VPN secrets"
msgstr "有効㪠VPN シークレットã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1185
+#: ../cli/src/connections.c:1283
msgid "invalid VPN secrets"
msgstr "無効㪠VPN シークレット"
-#: ../cli/src/connections.c:1187
+#: ../cli/src/connections.c:1285
msgid "the connection was removed"
msgstr "接続ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/connections.c:1204 ../cli/src/connections.c:1409
+#: ../cli/src/connections.c:1302 ../cli/src/connections.c:1460
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "接続ãŒæ­£å¸¸ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œã¾ã—㟠(D-Bus アクティブパス: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1209 ../cli/src/connections.c:1310
+#: ../cli/src/connections.c:1307
#, c-format
msgid "Error: Connection activation failed."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:1234
+#: ../cli/src/connections.c:1332
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN 接続ãŒæ­£å¸¸ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œã¾ã—㟠(D-Bus アクティブパス: %s)\n"
-#: ../cli/src/connections.c:1242
+#: ../cli/src/connections.c:1339
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s。"
-#: ../cli/src/connections.c:1339 ../cli/src/devices.c:1125
+#: ../cli/src/connections.c:1357 ../cli/src/devices.c:1166
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "エラー: 制é™æ™‚é–“ã® %d 秒ãŒçµŒéŽ"
-#: ../cli/src/connections.c:1400
+#: ../cli/src/connections.c:1424
+#, c-format
+msgid "Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr "エラー: デãƒã‚¤ã‚¹ '%s' ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã®ãƒ—ロセスを開始ã™ã‚‹å‰ã«ã‚¹ãƒ¬ãƒ¼ãƒ–ã‚’å¾…æ©Ÿã—ã¦ã„ã¾ã™"
+
+#: ../cli/src/connections.c:1444
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã«å¤±æ•—: %s"
-#: ../cli/src/connections.c:1494 ../cli/src/connections.c:1649
-#: ../cli/src/connections.c:1777
+#: ../cli/src/connections.c:1530 ../cli/src/connections.c:1676
+#: ../cli/src/connections.c:6671
+msgid "Connection (name, UUID, or path): "
+msgstr "接続 (åå‰ã€UUID ã¾ãŸã¯ãƒ‘ス): "
+
+#: ../cli/src/connections.c:1535 ../cli/src/connections.c:1681
+#: ../cli/src/connections.c:6676
+#, c-format
+msgid "Error: No connection specified."
+msgstr "エラー: 接続ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:1558
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶š: %s。"
-#: ../cli/src/connections.c:1540 ../cli/src/devices.c:1210
-#: ../cli/src/devices.c:1756
-#, fuzzy, c-format
-#| msgid "Error: bssid argument value '%s' is not a valid BSSID."
-msgid "Error: timeout value '%s' is not valid."
-msgstr "エラー: bssid ã®å¼•æ•°å€¤ '%s' ã¯æœ‰åŠ¹ãª BSSID ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../cli/src/connections.c:1553 ../cli/src/connections.c:1666
-#: ../cli/src/connections.c:1757
+#: ../cli/src/connections.c:1595 ../cli/src/devices.c:1028
+#: ../cli/src/devices.c:1365 ../cli/src/devices.c:1814
+#: ../cli/src/devices.c:2108
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "エラー: id ã‹åˆã¯ uuid ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
+msgid "Unknown parameter: %s\n"
+msgstr "ä¸æ˜Žãªãƒ‘ラメーター: %s\n"
-#: ../cli/src/connections.c:1586
+#: ../cli/src/connections.c:1625
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "エラー: é©åˆ‡ãªãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
-#: ../cli/src/connections.c:1588
+#: ../cli/src/connections.c:1627
#, c-format
msgid "Error: No suitable device found."
msgstr "エラー: é©åˆ‡ãªãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1702
+#: ../cli/src/connections.c:1654
+msgid "preparing"
+msgstr "準備中"
+
+#: ../cli/src/connections.c:2015 ../cli/src/utils.c:490
+#, c-format
+msgid "'%s' not among [%s]"
+msgstr ""
+
+#: ../cli/src/connections.c:2097
+#, c-format
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "エラー: ''%s': '%s' ã¯æœ‰åŠ¹ãª %s MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:2098
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2098
+msgid "Ethernet"
+msgstr "Ethernet"
+
+#: ../cli/src/connections.c:2121
+#, c-format
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "エラー: 'mtu': '%s' ã¯æœ‰åŠ¹ãª MTU ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:2137
+#, c-format
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "エラー: 'parent': '%s' ã¯æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:2158
+#, c-format
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "エラー: 'p-key': '%s' ã¯æœ‰åŠ¹ãª InfiniBand P_KEY ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:2174
+#, c-format
+msgid "Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, connected]."
+msgstr "エラー: 'mode': '%s' ã¯æœ‰åŠ¹ãª InfiniBand 転é€ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“ [datagram, connected]。"
+
+#: ../cli/src/connections.c:2190
+#, c-format
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "エラー: 'flags': '%s' ã¯ç„¡åŠ¹ã§ã™; <0-7> を使用ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/connections.c:2212
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "エラー: '%s': '%s' ã¯ç„¡åŠ¹ã§ã™; %s "
+
+#: ../cli/src/connections.c:2317
+#, fuzzy, c-format
+#| msgid "Error: '%s': '%s' is not valid; use <%d-%d>."
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "エラー: '%s': '%s' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/connections.c:2331
+msgid "ethernet"
+msgstr "Ethernet"
+
+#: ../cli/src/connections.c:2331
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2334
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s ' 接続タイプã«ã¯ 3 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2335 ../cli/src/connections.c:2380
+#: ../cli/src/connections.c:2482 ../cli/src/connections.c:2534
+#: ../cli/src/connections.c:2590 ../cli/src/connections.c:2665
+#: ../cli/src/connections.c:2746 ../cli/src/connections.c:2816
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "指定ã—ã¾ã™ã‹? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:2341 ../cli/src/connections.c:2386
+#: ../cli/src/connections.c:2540
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
+
+#: ../cli/src/connections.c:2350 ../cli/src/connections.c:2395
+#: ../cli/src/connections.c:2463
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
+
+#: ../cli/src/connections.c:2359
+msgid "Cloned MAC [none]: "
+msgstr "クローン㮠MAC [none]: "
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2379
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' 接続タイプã«ã¯ 5 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2404
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "転é€ãƒ¢ãƒ¼ãƒ‰ (datagram ã¾ãŸã¯ connected) [datagram]: "
+
+#: ../cli/src/connections.c:2415
+msgid "Parent interface [none]: "
+msgstr "親インターフェース [none]: "
+
+#: ../cli/src/connections.c:2424
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
+
+#: ../cli/src/connections.c:2432
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "エラー: 'parent' を指定ã™ã‚‹å ´åˆã€'p-key' ã¯å¿…é ˆã§ã™ã€‚\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2456
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' 接続タイプã«ã¯ 1 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2457 ../cli/src/connections.c:2503
+#: ../cli/src/connections.c:2795
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "指定ã—ã¾ã™ã‹? (yes/no) [yes] "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:2481
+#, c-format
+msgid "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "'モãƒã‚¤ãƒ«ãƒ–ロードãƒãƒ³ãƒ‰' 接続タイプã«ã¯ 2 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2487 ../cli/src/connections.c:2800
+msgid "Username [none]: "
+msgstr "ユーザーå [none]: "
+
+#: ../cli/src/connections.c:2489
+msgid "Password [none]: "
+msgstr "パスワード [none]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:2502
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "'bluetooth' 接続タイプã«ã¯ 1 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2509
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Bluetooth タイプ (panuã€dun-gsmã€dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:2517
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "エラー: ''bt-type': '%s' ã¯æœ‰åŠ¹ãª bluetooth タイプã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
+
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:2533
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' 接続タイプã«ã¯ 4 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2549
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN フラグ (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:2558
+msgid "Ingress priority maps [none]: "
+msgstr "イングレス優先度マップ [none]: "
+
+#: ../cli/src/connections.c:2567
+msgid "Egress priority maps [none]: "
+msgstr "イーグレス優先度マップ [none]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:2589
+#, c-format
+msgid "There are 6 optional arguments for 'bond' connection type.\n"
+msgstr "'ボンド' 接続タイプã«ã¯ 6 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2597
+msgid "Bonding mode [balance-rr]: "
+msgstr "ボンドモード [balance-rr]: "
+
+#: ../cli/src/connections.c:2611
+msgid "Bonding miimon [100]): "
+msgstr "ボンド miimon [100]): "
+
+#: ../cli/src/connections.c:2614
+#, fuzzy, c-format
+#| msgid "Error: 'miimon': '%s' is not a valid number <0-%d>.\n"
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "エラー: 'miimon': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+
+#: ../cli/src/connections.c:2620
+msgid "Bonding downdelay [0]): "
+msgstr "ボンド downdelay [0]): "
+
+#: ../cli/src/connections.c:2623
+#, fuzzy, c-format
+#| msgid "Error: 'downdelay': '%s' is not a valid number <0-%d>.\n"
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "エラー: 'downdelay': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+
+#: ../cli/src/connections.c:2629
+msgid "Bonding updelay [0]): "
+msgstr "ボンド updelay [0]): "
+
+#: ../cli/src/connections.c:2632
+#, fuzzy, c-format
+#| msgid "Error: 'updelay': '%s' is not a valid number <0-%d>.\n"
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Error: 'updelay': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+
+#: ../cli/src/connections.c:2638
+msgid "Bonding arp-interval [0]): "
+msgstr "ボンド arp-interval [0]): "
+
+#: ../cli/src/connections.c:2641
+#, fuzzy, c-format
+#| msgid "Error: 'arp-interval': '%s' is not a valid number <0-%d>.\n"
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Error: 'arp-interval': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:2647
+msgid "Bonding arp-ip-target [none]): "
+msgstr "ボンド arp-ip-target [none]): "
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:2664
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "'ブリッジ' 接続タイプã«ã¯ 6 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2672
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP ã®æœ‰åŠ¹åŒ– (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:2676
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "エラー:'stp': %s。\n"
+
+#: ../cli/src/connections.c:2682
+msgid "STP priority [128]): "
+msgstr "STP 優先度 [128]): "
+
+#: ../cli/src/connections.c:2686
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "エラー: '優先度': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+
+#: ../cli/src/connections.c:2692
+msgid "Forward delay [15]): "
+msgstr "フォワードé…延 [15]): "
+
+#: ../cli/src/connections.c:2696
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "エラー: 'フォワードé…延': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <2-30>。\n"
+
+#: ../cli/src/connections.c:2703
+msgid "Hello time [2]): "
+msgstr "Hello タイム [2]): "
+
+#: ../cli/src/connections.c:2707
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "エラー: 'hello タイム': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <1-10>。\n"
+
+#: ../cli/src/connections.c:2713
+msgid "Max age [20]): "
+msgstr "最大エイジ [20]): "
+
+#: ../cli/src/connections.c:2717
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "エラー: '最大エイジ': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <6-40>。\n"
+
+#: ../cli/src/connections.c:2723
+msgid "MAC address ageing time [300]): "
+msgstr "MAC アドレスエージングタイム [300]): "
+
+#: ../cli/src/connections.c:2727
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "エラー: 'エージングタイム': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-1000000>。\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:2745
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "'ブリッジスレーブ' 接続タイプã«ã¯ 3 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2752
+msgid "Bridge port priority [32]): "
+msgstr "ブリッジãƒãƒ¼ãƒˆå„ªå…ˆåº¦ [32]): "
+
+#: ../cli/src/connections.c:2763
+msgid "Bridge port STP path cost [100]): "
+msgstr "ブリッジãƒãƒ¼ãƒˆ STP パスコスト [100]): "
+
+#: ../cli/src/connections.c:2775
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "ヘアピン (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:2779
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "エラー: 'ヘアピン': '%s'。\n"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:2794
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "'VPN' 接続タイプã«ã¯ 1 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:2815
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "’OLPC メッシュ' 接続タイプã«ã¯ 2 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:2822
+msgid "OLPC Mesh channel [1]): "
+msgstr "OLPC メッシュãƒãƒ£ãƒ³ãƒãƒ« [1]): "
+
+#: ../cli/src/connections.c:2825
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "エラー: 'channel': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <1-13>。\n"
+
+#: ../cli/src/connections.c:2831
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC アドレス [none]: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:2877
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "IP アドレスを追加ã—ã¾ã™ã‹? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:2883
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 アドレス (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:2890 ../cli/src/connections.c:2911
+#, c-format
+msgid "Warning: ignoring garbage at the end: '%s'\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2892 ../cli/src/connections.c:2913
+#: ../cli/src/connections.c:4069 ../cli/src/connections.c:4078
+msgid "Error: "
+msgstr "エラー: "
+
+#: ../cli/src/connections.c:2904
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 address (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3062
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "エラー: '親': 'p-key' ãŒãªã„ã¨ä½¿ç”¨ã§ãã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:3118 ../cli/src/connections.c:3986
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3121 ../cli/src/connections.c:3989
+msgid "Error: 'ssid' is required."
+msgstr "エラー: 'ssid' ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3185
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP å: "
+
+#: ../cli/src/connections.c:3188
+msgid "Error: 'nsp' is required."
+msgstr "エラー: 'nsp' ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3244
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3247
+msgid "Error: 'apn' is required."
+msgstr "エラー: 'apn' ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3306
+msgid "Bluetooth device address: "
+msgstr "Bluetooth デãƒã‚¤ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹: "
+
+#: ../cli/src/connections.c:3309
+msgid "Error: 'addr' is required."
+msgstr "エラー: 'addr' ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3352
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "エラー: 'bt-type': '%s' ã¯ç„¡åŠ¹ã§ã™; [%s, %s (%s), %s] を使用ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/connections.c:3397
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN 親デãƒã‚¤ã‚¹ã¾ãŸã¯æŽ¥ç¶š UUID: "
+
+#: ../cli/src/connections.c:3400
+msgid "Error: 'dev' is required."
+msgstr "エラー: 'dev' ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3404
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:3407
+msgid "Error: 'id' is required."
+msgstr "エラー: 'id' ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3413
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "エラー: 'id': '%s' ã¯ç„¡åŠ¹ã§ã™; <0-4095> を使用ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/connections.c:3423
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "エラー: 'dev': '%s' 㯠UUIDã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã€MAC ã®ã„ãšã‚Œã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:3553
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "エラー: 'モード': %s。"
+
+#: ../cli/src/connections.c:3595
+msgid "Bond master: "
+msgstr "ボンドマスター: "
+
+#: ../cli/src/connections.c:3598 ../cli/src/connections.c:3669
+#: ../cli/src/connections.c:3840
+msgid "Error: 'master' is required."
+msgstr "エラー: 'マスター' ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3603 ../cli/src/connections.c:3674
+#: ../cli/src/connections.c:3851
+#, c-format
+msgid "Warning: 'type' is currently ignored. We only support ethernet slaves for now.\n"
+msgstr "警告: ç¾åœ¨ã€'タイプ' ã¯ç„¡è¦–ã•ã‚Œã¦ã„ã¾ã™ã€‚対応ã—ã¦ã„ã‚‹ã®ã¯ Ethernet スレーブã®ã¿ã«ãªã‚Šã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:3666
+msgid "Team master: "
+msgstr "ãƒãƒ¼ãƒ ãƒžã‚¹ã‚¿ãƒ¼: "
+
+#: ../cli/src/connections.c:3753
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "エラー:'stp': %s。"
+
+#: ../cli/src/connections.c:3837
+msgid "Bridge master: "
+msgstr "ブリッジマスター: "
+
+#: ../cli/src/connections.c:3845
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "エラー: 'マスター': '%s' ã¯æœ‰åŠ¹ãª UUID ã§ã‚‚インターフェースã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:3878
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "エラー: 'ヘアピン': %s。"
+
+#: ../cli/src/connections.c:3930
+msgid "VPN type: "
+msgstr "VPN タイプ: "
+
+#: ../cli/src/connections.c:3933
+msgid "Error: 'vpn-type' is required."
+msgstr "エラー: ’vpn タイプ’ ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:3944
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "エラー: 'vpn タイプ': %s。"
+
+#: ../cli/src/connections.c:4002
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "エラー: 'ãƒãƒ£ãƒ³ãƒãƒ«': '%s' ã¯ç„¡åŠ¹ã§ã™; <1-13> を使用ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/connections.c:4037
+#, c-format
+msgid "Error: '%s' is a not valid connection type."
+msgstr "エラー: '%s' ã¯ç„¡åŠ¹ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:4133
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "エラー: '%s' 接続ã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
+
+#: ../cli/src/connections.c:4137
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«è¿½åŠ ã•ã‚Œã¾ã—ãŸã€‚\n"
+
+#: ../cli/src/connections.c:4183
+msgid "Connection type: "
+msgstr "接続タイプ: "
+
+#: ../cli/src/connections.c:4187
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "エラー: 'タイプ' 引数ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:4193
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "エラー: 無効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—; %s。"
+
+#: ../cli/src/connections.c:4202
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "エラー: '自動接続': %s。"
+
+#: ../cli/src/connections.c:4218
+msgid "Interface name [*]: "
+msgstr "インターフェースå [*]: "
+
+#: ../cli/src/connections.c:4225
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "エラー: 'ifname': '%s' ã¯æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã§ã‚‚ '*' ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:4847
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' 設定値]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:4925
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ メインメニュー ]---\n"
+"goto [<setting> | <prop>] :: 設定ã¾ãŸã¯ãƒ—ロパティã¸ç§»å‹•\n"
+"remove <setting>[.<prop>] | <prop> :: 設定ã®å‰Šé™¤ã¾ãŸã¯ãƒ—ロパティ値ã®ãƒªã‚»ãƒƒãƒˆ\n"
+"set [<setting>.<prop> <value>] :: プロパティ値ã®è¨­å®š\n"
+"describe [<setting>.<prop>] :: プロパティã®è©³ç´°è¡¨ç¤º\n"
+"print [all] :: 接続ã®è¡¨ç¤º\n"
+"verify [all] :: 接続ã®ç¢ºèª\n"
+"save :: 接続ã®ä¿å­˜\n"
+"back :: 一ã¤ä¸Šã®ãƒ¬ãƒ™ãƒ«ã«ç§»å‹• (戻る)\n"
+"help/? [<command>] :: ã“ã®ãƒ˜ãƒ«ãƒ—を表示\n"
+"nmcli <conf-option> <value> :: nmcli 設定\n"
+"quit :: nmcli ã®çµ‚了\n"
+
+#: ../cli/src/connections.c:4951
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editation\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: 設定ï¼ãƒ—ロパティを入力ã—ã¦å¤‰æ›´\n"
+"\n"
+"設定やプロパティã®å¤‰æ›´ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™ã€‚\n"
+"\n"
+"例: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:4958
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: 設定ã®å‰Šé™¤ã¾ãŸã¯ãƒ—ロパティ値ã®ãƒªã‚»ãƒƒãƒˆ\n"
+"\n"
+"接続ã‹ã‚‰å…¨è¨­å®šã‚’削除ã—ã¾ã™ã€‚ã¾ãŸã¯ã€ãƒ—ロパティを指定ã—ã¦ã„ã‚‹å ´åˆã«ã¯\n"
+"ãã®ãƒ—ロパティをデフォルト値ã¨ã—ã¦ãƒªã‚»ãƒƒãƒˆã—ã¾ã™ã€‚\n"
+"\n"
+"例: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:4965
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> s con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: プロパティ値ã®è¨­å®š\n"
+"\n"
+"プロパティ値を設定ã—ã¾ã™ã€‚\n"
+"\n"
+"例: nmcli> s con.id My connection\n"
+
+#: ../cli/src/connections.c:4970
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to see all NM settings and properties.\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: プロパティ値ã®è¨­å®š\n"
+"\n"
+"プロパティ値を設定ã—ã¾ã™ã€‚\n"
+"\n"
+"例: nmcli> s con.id My connection\n"
+
+#: ../cli/src/connections.c:4975
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: 設定ã¾ãŸã¯æŽ¥ç¶šå€¤ã®è¡¨ç¤º\n"
+"\n"
+"ç¾åœ¨ã®ãƒ—ロパティã¾ãŸã¯æŽ¥ç¶šå…¨ä½“を表示ã—ã¾ã™ã€‚\n"
+"\n"
+"例: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:4980
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: 設定ã¾ãŸã¯æŽ¥ç¶šã®æœ‰åŠ¹æ€§ã®ç¢ºèª\n"
+"\n"
+"設定ã¾ãŸã¯æŽ¥ç¶šãŒæœ‰åŠ¹ã‹ã©ã†ã‹ã‚’確èªã—ã€ã‚ã¨ã§ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚エラーã®å ´åˆã«ã¯ç„¡åŠ¹ãªå€¤ã‚’表示ã—ã¾ã™ã€‚\n"
+"\n"
+"例: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:4987
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: 接続ã®ä¿å­˜\n"
+"\n"
+"接続をä¿å­˜ã™ã‚‹ NetworkManager ã«ã“ã®æŽ¥ç¶šã‚’é€ä¿¡ã—ã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:4991 ../cli/src/connections.c:5141
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: 一ã¤ä¸Šã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ¬ãƒ™ãƒ«ã«ç§»å‹•\n"
+"\n"
+
+#: ../cli/src/connections.c:4994
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli コマンドã®ãƒ˜ãƒ«ãƒ—\n"
+"\n"
+
+#: ../cli/src/connections.c:4997
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli 設定\n"
+"\n"
+"nmcli ã®è¨­å®šã‚’è¡Œãªã„ã¾ã™ã€‚次ã®ã‚ªãƒ—ションãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚\n"
+"status-line yes | no [デフォルト: no]\n"
+"save-confirmation yes | no [デフォルト: yes]\n"
+"prompt-color <0-8> [デフォルト: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"例: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:5017 ../cli/src/connections.c:5147
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli ã®çµ‚了\n"
+"\n"
+"nmcli を終了ã—ã¾ã™ã€‚変更ã—ãŸæŽ¥ç¶šã®ä¿å­˜ã‚’è¡Œãªã£ã¦ã„ãªã„å ´åˆã€ã“ã®å‹•ä½œã®ç¢ºèªãŒæ±‚ã‚られã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:5022 ../cli/src/connections.c:5152
+#: ../cli/src/connections.c:5421 ../cli/src/connections.c:6144
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰: '%s'\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5088
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ プロパティメニュー]---\n"
+"set [<value>] :: æ–°ã—ã„値ã®è¨­å®š\n"
+"add [<value>] :: プロパティã«æ–°è¦ã‚ªãƒ—ションを追加\n"
+"change :: ç¾åœ¨ã®å€¤ã‚’変更\n"
+"remove [<index> | <option>] :: 値ã®å‰Šé™¤\n"
+"describe :: プロパティã®è©³ç´°è¡¨ç¤º\n"
+"print [setting | connection] :: プロパティ値 (設定/接続) ã®è¡¨ç¤º\n"
+"back :: 上ã®ãƒ¬ãƒ™ãƒ«ã«ç§»å‹•\n"
+"help/? [<command>] :: ã“ã®ãƒ˜ãƒ«ãƒ—ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ã®è©³ç´°ã‚’表示\n"
+"quit :: nmcli ã®çµ‚了\n"
+
+#: ../cli/src/connections.c:5113
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: æ–°ã—ã„値ã®è¨­å®š\n"
+"\n"
+"ã“ã®ãƒ—ロパティã«æŒ‡å®šã—㟠<value> を設定ã—ã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:5117
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a container type. For single-valued properties it replaces the value (same as 'set').\n"
+msgstr ""
+"add [<value>] :: プロパティã«æ–°è¦ã‚ªãƒ—ションを追加\n"
+"\n"
+"ã“ã®ãƒ—ロパティã®ã‚¿ã‚¤ãƒ—ãŒã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã®å ´åˆã€æŒ‡å®šã—㟠<value> を追加ã—ã¾ã™ã€‚å˜ä¸€å€¤ã®ãƒ—ロパティã®å ´åˆã¯ãã®å€¤ãŒç½®æ›ã•ã‚Œã¾ã™ ('set' ã¨åŒã˜)。\n"
+
+#: ../cli/src/connections.c:5123
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: ç¾åœ¨ã®å€¤ã‚’変更\n"
+"\n"
+"ç¾åœ¨ã®å€¤ã‚’表示ã—ã€ãã®å€¤ã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:5127
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: 値ã®å‰Šé™¤\n"
+"\n"
+"プロパティ値を削除ã—ã¾ã™ (プロパティ値をデフォルトã«æˆ»ã™)。\n"
+
+#: ../cli/src/connections.c:5131
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to see all NM settings and properties.\n"
+msgstr ""
+"describe :: プロパティã®è©³ç´°è¡¨ç¤º\n"
+"\n"
+"プロパティã®è©³ç´°ã‚’表示ã—ã¾ã™ã€‚NM 設定ã¨ãƒ—ロパティã®å…¨è©³ç´°ã¯ nm-settings(5) man ページをå‚ç…§ã—ã¦ãã ã•ã„。\n"
+
+#: ../cli/src/connections.c:5136
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: プロパティ値ã®è¡¨ç¤º (設定ã€æŽ¥ç¶š)\n"
+"\n"
+"プロパティ値を表示ã—ã¾ã™ã€‚引数を指定ã™ã‚‹ã¨ã€è¨­å®šã¾ãŸã¯æŽ¥ç¶šå…¨ä½“ã®å€¤ã‚’表示ã•ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚\n"
+
+#: ../cli/src/connections.c:5144
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli コマンドã®ãƒ˜ãƒ«ãƒ—\n"
+"\n"
+
+#: ../cli/src/connections.c:5232
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "エラー: 設定 '%s' ã¯å¿…é ˆã®ãŸã‚削除ã§ãã¾ã›ã‚“。\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:5250
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ 接続タイプ: %s | name: %s | UUID: %s | dirty: %s ]\n"
+
+#: ../cli/src/connections.c:5300 ../cli/src/connections.c:5696
+#: ../cli/src/connections.c:5754
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' 値を入力ã—ã¦ãã ã•ã„: "
+
+#: ../cli/src/connections.c:5317 ../cli/src/connections.c:5336
+#: ../cli/src/connections.c:5702 ../cli/src/connections.c:5761
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "エラー: '%s' プロパティã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: ../cli/src/connections.c:5329
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' 値ã®ç·¨é›†: "
+
+#: ../cli/src/connections.c:5358
+#, c-format
+msgid "Error: %s\n"
+msgstr "エラー: %s\n"
+
+#: ../cli/src/connections.c:5364 ../cli/src/connections.c:5835
+#: ../cli/src/connections.c:5876
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "エラー: '%s' ã®å€¤ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: ../cli/src/connections.c:5385
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰å¼•æ•°: '%s'\n"
+
+#: ../cli/src/connections.c:5405 ../cli/src/connections.c:6132
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "ã“ã®æŽ¥ç¶šã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“。本当ã«çµ‚了ã—ã¦ã‚ˆã„ã§ã™ã‹? [y/n]\n"
+
+#: ../cli/src/connections.c:5517
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "使用å¯èƒ½ãªè¨­å®š: %s\n"
+
+#: ../cli/src/connections.c:5526
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "警告: 接続ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã‚ã‚Šã¾ã›ã‚“\n"
+msgid "Error: invalid setting name; %s\n"
+msgstr "エラー: 無効ãªè¨­å®šå; %s\n"
-#: ../cli/src/connections.c:1716
+#: ../cli/src/connections.c:5543
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "使用å¯èƒ½ãªãƒ—ロパティ: %s\n"
+
+#: ../cli/src/connections.c:5551
+#, c-format
+msgid "Error: property %s\n"
+msgstr "エラー: プロパティ %s\n"
+
+#: ../cli/src/connections.c:5578
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"'autoconnect=yes' ã§ã“ã®æŽ¥ç¶šã‚’ä¿å­˜ã—ã¦ã„ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šç›´ã¡ã«æŽ¥ç¶šãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚\n"
+"本当ã«ä¿å­˜ã—ã¾ã™ã‹? [yes] "
+
+#: ../cli/src/connections.c:5648
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "次ã®è¨­å®šã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™: %s\n"
+
+#: ../cli/src/connections.c:5694 ../cli/src/connections.c:5752
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' プロパティã«å¯¾ã—ã¦è¨±å¯ã•ã‚Œã¦ã„る値: %s\n"
+
+#: ../cli/src/connections.c:5706 ../cli/src/connections.c:5917
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "エラー: 設定ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“; 有効ãªè¨­å®šã¯ [%s] ã«ãªã‚Šã¾ã™\n"
+
+#: ../cli/src/connections.c:5707
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "ã¾ãšå…ˆã« 'goto <setting>' を使用ã™ã‚‹ã‹ã€'set <setting>.<property>' を使用ã—ã¦ãã ã•ã„。\n"
+
+#: ../cli/src/connections.c:5722 ../cli/src/connections.c:5855
+#: ../cli/src/connections.c:5934
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "エラー: 無効ãªè¨­å®šå¼•æ•° %s ã§ã™; [%s] ãŒæœ‰åŠ¹ãªå¼•æ•°ã«ãªã‚Šã¾ã™\n"
+
+#: ../cli/src/connections.c:5732
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "エラー: '%s' プロパティ用ã®è¨­å®šãŒã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ../cli/src/connections.c:5739
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "エラー: 無効ãªãƒ—ロパティ: %s\n"
+
+#: ../cli/src/connections.c:5788
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "エラー: ä¸æ˜Žãªè¨­å®š '%s'\n"
+
+#: ../cli/src/connections.c:5801
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "変更ã§ãã‚‹ã®ã¯æ¬¡ã®ãƒ—ロパティã«ãªã‚Šã¾ã™: %s\n"
+
+#: ../cli/src/connections.c:5840
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "エラー: 引数ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“; [%s] ãŒæœ‰åŠ¹ãªå¼•æ•°ã«ãªã‚Šã¾ã™\n"
+
+#: ../cli/src/connections.c:5853
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "ã“ã®æŽ¥ç¶šã«ã¯è¨­å®š '%s' ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
+
+#: ../cli/src/connections.c:5893
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "エラー: %s プロパティã€è¨­å®šåã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr "ã¾ãšå…ˆã« 'goto <setting>' を使用ã™ã‚‹ã‹ã€'describe <setting>.<property>' を使用ã—ã¦ãã ã•ã„\n"
+
+#: ../cli/src/connections.c:5959
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "エラー: 無効ãªãƒ—ロパティ: %sã€æœ‰åŠ¹ãªè¨­å®šåã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。\n"
+
+#: ../cli/src/connections.c:5983
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "エラー: '%s' 設定ã¯ã‚ã‚Šã¾ã›ã‚“\n"
+
+#: ../cli/src/connections.c:5986
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "エラー: ä¸æ˜Žãªè¨­å®š: '%s'\n"
+
+#: ../cli/src/connections.c:6002
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "設定 '%s' ã®ç¢ºèª: %s\n"
+
+#: ../cli/src/connections.c:6009
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "接続ã®ç¢ºèª: %s\n"
+
+#: ../cli/src/connections.c:6048
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "エラー: '%s' (%s) 接続ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s\n"
+
+#: ../cli/src/connections.c:6055
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«ä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚\n"
+
+#: ../cli/src/connections.c:6063
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "エラー: 接続ã®ç¢ºèªã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: ../cli/src/connections.c:6064
+msgid "(unknown error)"
+msgstr "(ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼)"
+
+#: ../cli/src/connections.c:6087
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "エラー: status-line: %s\n"
+
+#: ../cli/src/connections.c:6095
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "エラー: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:6103
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "エラー: 色番å·ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“: '%s'; <0-8> を使用ã—ã¦ãã ã•ã„\n"
+
+#: ../cli/src/connections.c:6115
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "ç¾åœ¨ã® nmcli 設定:\n"
+
+#: ../cli/src/connections.c:6123
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "無効ãªè¨­å®šã‚ªãƒ—ション '%s'; [%s] ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã™\n"
+
+#: ../cli/src/connections.c:6323
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> コマンドライン編集ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。ã“ã®æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹å ´åˆã¯ã€ãƒ©ã‚¤ãƒ³ç·¨é›†ãƒ©ã‚¤ãƒ–ラリã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’検討ã—ã¦ãã ã•ã„。 <<<\n"
+"対応ライブラリã¯æ¬¡ã®é€šã‚Šã§ã™:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:6349
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "エラー: 指定ã§ãã‚‹ã®ã¯ 'id'ã€uuidã€'path' ã®ã„ãšã‚Œã‹ä¸€ã¤ã«ãªã‚Šã¾ã™ã€‚"
+
+#: ../cli/src/connections.c:6361 ../cli/src/connections.c:6556
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶š '%s' ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:6376
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr "警告: 既存ã®æŽ¥ç¶š '%s' を編集ã—ã¦ã„ã¾ã™; 'タイプ' 引数ã¯ç„¡è¦–ã•ã‚Œã¾ã™\n"
+
+#: ../cli/src/connections.c:6379
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr "警告: 既存ã®æŽ¥ç¶š '%s' を編集ã—ã¦ã„ã¾ã™; 'con å' 引数ã¯ç„¡è¦–ã•ã‚Œã¾ã™\n"
+
+#: ../cli/src/connections.c:6393
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "有効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—: %s\n"
+
+#: ../cli/src/connections.c:6395
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "エラー: 無効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—; %s\n"
+
+#: ../cli/src/connections.c:6431
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli インテラクティブ接続エディター |==="
+
+#: ../cli/src/connections.c:6434
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "既存㮠'%s' 接続を編集中: '%s'"
+
+#: ../cli/src/connections.c:6436
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "æ–°è¦ã® '%s' 接続を追加中"
+
+#: ../cli/src/connections.c:6438
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "使用ã§ãるコマンドを表示ã™ã‚‹ã«ã¯ 'help' ã¾ãŸã¯ '?' を入力ã—ã¾ã™ã€‚"
+
+#: ../cli/src/connections.c:6440
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "プロパティ詳細を表示ã™ã‚‹ã«ã¯ 'describe [<setting>.<prop>]' を入力ã—ã¾ã™ã€‚"
+
+#: ../cli/src/connections.c:6477
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "エラー: 接続 '%s' ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
+
+#: ../cli/src/connections.c:6483
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚\n"
+
+#: ../cli/src/connections.c:6510
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "エラー: 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:6534
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "エラー: 接続 ID ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:6539
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "エラー: <setting>.<property> 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:6562
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "エラー: 無効㪠<setting>.<property> '%s' ã§ã™ã€‚"
+
+#: ../cli/src/connections.c:6577
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "エラー: 無効ã¾ãŸã¯è¨±å¯ã•ã‚Œã¦ã„ãªã„設定 '%s' ã§ã™: %s。"
+
+#: ../cli/src/connections.c:6598
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "エラー: 無効ãªãƒ—ロパティ '%s': %s。"
+
+#: ../cli/src/connections.c:6604
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "エラー: %s.%s ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: %s。"
+
+#: ../cli/src/connections.c:6634
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "エラー: 接続ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-#: ../cli/src/connections.c:1837
-#, fuzzy, c-format
-#| msgid "Error: 'radio' command '%s' is not valid."
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "エラー: 'radio' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+#: ../cli/src/connections.c:6704
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶šã§ã™: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:6738
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶šã‚’削除ã§ãã¾ã›ã‚“: %s。"
-#: ../cli/src/connections.c:1905
+#: ../cli/src/connections.c:6822
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "エラー: D-Bus ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgid "Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr "エラー: 'connection show' ã«ã¯ 'configured' ã¾ãŸã¯ 'active' コマンドã®ä½¿ç”¨ãŒæœŸå¾…ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: ../cli/src/connections.c:1913
+#: ../cli/src/connections.c:6862
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "エラー: '%s' ã¯æœ‰åŠ¹ãª '接続' コマンドã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:6927
#, c-format
msgid "Error: Could not get system settings."
msgstr "エラー: システム設定をå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/connections.c:1923
+#: ../cli/src/connections.c:6937
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "エラー: 接続をå–å¾—ã§ãã¾ã›ã‚“: 設定サービスãŒç¨¼åƒã—ã¦ã„ã¾ã›ã‚“。"
#. 0
-#. 9
+#. 12
#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:204
-#: ../cli/src/devices.c:220
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:207
+#: ../cli/src/devices.c:225
msgid "DEVICE"
msgstr "デãƒã‚¤ã‚¹"
@@ -924,7 +2350,7 @@ msgstr "WIMAX-プロパティ"
#. 5
#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:217
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:222
msgid "NSP"
msgstr "NSP"
@@ -1049,7 +2475,7 @@ msgid "CARRIER"
msgstr "キャリア"
#. 0
-#: ../cli/src/devices.c:165
+#: ../cli/src/devices.c:165 ../cli/src/devices.c:448
msgid "WEP"
msgstr "WEP"
@@ -1059,7 +2485,7 @@ msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:167 ../cli/src/devices.c:456
msgid "WPA2"
msgstr "WPA2"
@@ -1110,100 +2536,105 @@ msgstr "SSID"
#. 1
#: ../cli/src/devices.c:196
-msgid "BSSID"
-msgstr "BSSID"
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
#. 2
#: ../cli/src/devices.c:197
-msgid "MODE"
-msgstr "モード"
+msgid "BSSID"
+msgstr "BSSID"
#. 3
#: ../cli/src/devices.c:198
-msgid "FREQ"
-msgstr "周波数"
+msgid "MODE"
+msgstr "モード"
#. 4
#: ../cli/src/devices.c:199
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:200
+msgid "FREQ"
+msgstr "周波数"
+
+#. 6
+#: ../cli/src/devices.c:201
msgid "RATE"
msgstr "レート"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:200 ../cli/src/devices.c:218
+#: ../cli/src/devices.c:202 ../cli/src/devices.c:223
msgid "SIGNAL"
msgstr "ä¿¡å·"
-#. 6
-#: ../cli/src/devices.c:201
+#. 8
+#: ../cli/src/devices.c:203
+msgid "BARS"
+msgstr "ãƒãƒ¼"
+
+#. 9
+#: ../cli/src/devices.c:204
msgid "SECURITY"
msgstr "セキュリティ"
-#. 7
-#: ../cli/src/devices.c:202
+#. 10
+#: ../cli/src/devices.c:205
msgid "WPA-FLAGS"
msgstr "WPA-フラグ"
-#. 8
-#: ../cli/src/devices.c:203
+#. 11
+#: ../cli/src/devices.c:206
msgid "RSN-FLAGS"
msgstr "RSN-フラグ"
-#. 10
+#. 13
#. 4
-#: ../cli/src/devices.c:205 ../cli/src/devices.c:221
+#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
msgid "ACTIVE"
msgstr "アクティブ"
+#. 14
+#: ../cli/src/devices.c:209
+msgid "*"
+msgstr "*"
+
#. 0
-#: ../cli/src/devices.c:233
+#: ../cli/src/devices.c:238
msgid "SLAVES"
msgstr "スレーブ"
#. 0
-#: ../cli/src/devices.c:242
+#: ../cli/src/devices.c:247
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:258
-#, fuzzy, c-format
-#| msgid ""
-#| "Usage: nmcli device { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | show | disconnect | wifi | wimax }\n"
-#| "\n"
-#| " COMMAND := { status | show | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| "\n"
-#| " show [<ifname>]\n"
-#| "\n"
-#| " disconnect <ifname>\n"
-#| "\n"
-#| " wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
-#| "\n"
-#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [ifname <ifname>] [bssid <BSSID>] [name <name>]\n"
-#| "\n"
-#| " [private yes|no]\n"
-#| "\n"
-#| " wifi rescan [[ifname] <ifname>]\n"
-#| "\n"
-#| " wimax [list [ifname <ifname>] [nsp <name>]]\n"
-#| "\n"
+#: ../cli/src/devices.c:263
+#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+" COMMAND := { status | show | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+" COMMAND := { status | show | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [ifname <ifname>] [bssid <BSSID>] [name <name>]\n"
+"\n"
+" [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"使ã„æ–¹: nmcli device { コマンド | help }\n"
@@ -1229,287 +2660,276 @@ msgstr ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:361
+#: ../cli/src/devices.c:365
msgid "(none)"
msgstr "(ãªã—)"
-#: ../cli/src/devices.c:417
+#: ../cli/src/devices.c:432
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:418
+#: ../cli/src/devices.c:433
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:427
-msgid "Encrypted: "
-msgstr "æš—å·åŒ–:"
-
-#: ../cli/src/devices.c:432
-msgid "WEP "
-msgstr "WEP "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:434
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:452
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:436
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:461
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:439
-msgid "Enterprise "
-msgstr "Enterprise "
-
-#: ../cli/src/devices.c:448
+#: ../cli/src/devices.c:477
msgid "Ad-Hoc"
msgstr "アドホック"
-#: ../cli/src/devices.c:449
-msgid "Infrastructure"
-msgstr "インフラストラクãƒãƒ£"
+#: ../cli/src/devices.c:478
+msgid "Infra"
+msgstr "インフラ"
-#: ../cli/src/devices.c:485
+#: ../cli/src/devices.c:510
msgid "Home"
msgstr "ホーム"
-#: ../cli/src/devices.c:488
+#: ../cli/src/devices.c:513
msgid "Partner"
msgstr "パートナー"
-#: ../cli/src/devices.c:491
+#: ../cli/src/devices.c:516
msgid "Roaming"
msgstr "ローミング"
-#: ../cli/src/devices.c:563
-#, fuzzy, c-format
-#| msgid "Error: 'device status': %s"
-msgid "Error: 'dev list': %s"
-msgstr "エラー: 'device status': %s"
-
-#: ../cli/src/devices.c:565
-#, fuzzy, c-format
-#| msgid "Error: 'device status': %s; allowed fields: %s"
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "エラー: 'device status': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#: ../cli/src/devices.c:574
+#: ../cli/src/devices.c:588
msgid "Device details"
msgstr "デãƒã‚¤ã‚¹ã®è©³ç´°"
-#: ../cli/src/devices.c:621 ../cli/src/devices.c:624 ../cli/src/devices.c:1151
-#: ../cli/src/utils.c:479
+#: ../cli/src/devices.c:600
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "エラー: 'device show': %s"
+
+#: ../cli/src/devices.c:602
+#, c-format
+msgid "Error: 'device show': %s; allowed fields: %s"
+msgstr "エラー: 'device show': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+
+#: ../cli/src/devices.c:665 ../cli/src/devices.c:668 ../cli/src/devices.c:1192
msgid "(unknown)"
msgstr "(ä¸æ˜Ž)"
-#: ../cli/src/devices.c:633
+#: ../cli/src/devices.c:677
msgid "not connected"
msgstr "未接続"
-#: ../cli/src/devices.c:660
+#: ../cli/src/devices.c:702
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:736
+#: ../cli/src/devices.c:785
msgid "on"
msgstr "オン"
-#: ../cli/src/devices.c:736
+#: ../cli/src/devices.c:785
msgid "off"
msgstr "オフ"
-#: ../cli/src/devices.c:993
-#, fuzzy, c-format
-#| msgid "Error: 'device status': %s"
-msgid "Error: 'dev status': %s"
+#: ../cli/src/devices.c:1046
+#, c-format
+msgid "Error: 'device status': %s"
msgstr "エラー: 'device status': %s"
-#: ../cli/src/devices.c:995
-#, fuzzy, c-format
-#| msgid "Error: 'device status': %s; allowed fields: %s"
-msgid "Error: 'dev status': %s; allowed fields: %s"
+#: ../cli/src/devices.c:1048
+#, c-format
+msgid "Error: 'device status': %s; allowed fields: %s"
msgstr "エラー: 'device status': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/devices.c:1018
+#. Add headers
+#: ../cli/src/devices.c:1067
msgid "Status of devices"
msgstr "デãƒã‚¤ã‚¹ã®çŠ¶æ…‹"
-#: ../cli/src/devices.c:1049
-#, fuzzy, c-format
-#| msgid "Error: %s argument is missing."
-msgid "Error: '%s' argument is missing."
-msgstr "エラー: %s 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: ../cli/src/devices.c:1097
+#, c-format
+msgid "Error: invalid extra argument '%s'."
+msgstr "エラー: '%s' ã¯ç„¡åŠ¹ãªè¿½åŠ å¼•æ•°ã§ã™ã€‚"
-#: ../cli/src/devices.c:1090 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:2043
+#: ../cli/src/devices.c:1125 ../cli/src/devices.c:1275
+#: ../cli/src/devices.c:1418 ../cli/src/devices.c:2162
#, c-format
msgid "Error: Device '%s' not found."
msgstr "エラー: デãƒã‚¤ã‚¹'%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ../cli/src/devices.c:1113
+#: ../cli/src/devices.c:1154
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "æˆåŠŸ: デãƒã‚¤ã‚¹ '%s' ã¯æ­£å¸¸ã«åˆ‡æ–­ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/devices.c:1148
+#: ../cli/src/devices.c:1189
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "エラー: デãƒã‚¤ã‚¹ '%s' (%s) ã®åˆ‡æ–­ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-#: ../cli/src/devices.c:1161
+#: ../cli/src/devices.c:1203
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "デãƒã‚¤ã‚¹ '%s' ã¯åˆ‡æ–­ã•ã‚Œã¦ã„ã¾ã™ã€‚\n"
-#: ../cli/src/devices.c:1224
-#, fuzzy, c-format
-#| msgid "Error: id or uuid has to be specified."
-msgid "Error: iface has to be specified."
-msgstr "エラー: id ã‹åˆã¯ uuid ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
+#: ../cli/src/devices.c:1230
+msgid "Interface: "
+msgstr "インターフェース: "
-#: ../cli/src/devices.c:1354
-#, fuzzy, c-format
-#| msgid "Error: 'device wifi': %s"
-msgid "Error: 'dev wifi': %s"
-msgstr "エラー: 'dev wifi': %s"
+#: ../cli/src/devices.c:1234 ../cli/src/devices.c:1243
+#, c-format
+msgid "Error: No interface specified."
+msgstr "エラー: インターフェースãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1356
-#, fuzzy, c-format
-#| msgid "Error: 'device wifi': %s; allowed fields: %s"
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "エラー: 'dev wifi': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+#: ../cli/src/devices.c:1249
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "エラー: 追加ã®å¼•æ•°ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“: '%s'。"
-#: ../cli/src/devices.c:1379
-#, fuzzy
-#| msgid "Wi-Fi scan list"
-msgid "WiFi scan list"
+#: ../cli/src/devices.c:1346
+msgid "Wi-Fi scan list"
msgstr "Wi-Fi スキャン一覧"
-#: ../cli/src/devices.c:1416 ../cli/src/devices.c:1470
+#: ../cli/src/devices.c:1385
+#, c-format
+msgid "Error: 'device wifi': %s"
+msgstr "エラー: 'dev wifi': %s"
+
+#: ../cli/src/devices.c:1387
+#, c-format
+msgid "Error: 'device wifi': %s; allowed fields: %s"
+msgstr "エラー: 'dev wifi': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+
+#: ../cli/src/devices.c:1441 ../cli/src/devices.c:1510
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "エラー: bssid '%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1433
-#, fuzzy, c-format
-#| msgid "Error: Device '%s' is not a Wi-Fi device."
-msgid "Error: Device '%s' is not a WiFi device."
+#: ../cli/src/devices.c:1465 ../cli/src/devices.c:1853
+#: ../cli/src/devices.c:2015
+#, c-format
+msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "エラー: デãƒã‚¤ã‚¹ '%s' 㯠Wi-Fi デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1501 ../cli/src/devices.c:1547
+#: ../cli/src/devices.c:1547 ../cli/src/devices.c:1594
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' ã®æŽ¥ç¶šãŒ '%s' デãƒã‚¤ã‚¹ä¸Šã«ä½œæˆã•ã‚Œã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œã¾ã—ãŸã€‚\n"
-#: ../cli/src/devices.c:1506
+#: ../cli/src/devices.c:1551
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s。"
-#: ../cli/src/devices.c:1531
+#: ../cli/src/devices.c:1576
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "エラー: æ–°è¦æŽ¥ç¶šã®è¿½åŠ ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
-#: ../cli/src/devices.c:1539
+#: ../cli/src/devices.c:1584
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "エラー: æ–°è¦æŽ¥ç¶šã®è¿½åŠ ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
-#: ../cli/src/devices.c:1683
+#: ../cli/src/devices.c:1735
+msgid "SSID or BSSID: "
+msgstr "SSID ã¾ãŸã¯ BSSID: "
+
+#: ../cli/src/devices.c:1740
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "エラー: SSID ã¾ãŸã¯ BSSID ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:1764
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "エラー: bssid ã®å¼•æ•°å€¤ '%s' ã¯æœ‰åŠ¹ãª BSSID ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1730
+#: ../cli/src/devices.c:1788
#, c-format
msgid "Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
msgstr "エラー: wep-key-type ã®å¼•æ•°å€¤ '%s' ã¯ç„¡åŠ¹ã§ã™ã€‚'key' ã¾ãŸã¯ 'phrase' を使用ã—ã¦ãã ã•ã„。"
-#: ../cli/src/devices.c:1770
+#: ../cli/src/devices.c:1808
+#, c-format
+msgid "Error: %s: %s."
+msgstr "エラー: %s: %s。"
+
+#: ../cli/src/devices.c:1823
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "エラー: (%s) ãŒæŽ¥ç¶šå…ˆã¨ãªã‚‹ BSSID 㯠bssid 引数 (%s) ã«ã‚ˆã‚Šç•°ãªã‚Šã¾ã™ã€‚"
-#: ../cli/src/devices.c:1776
+#: ../cli/src/devices.c:1829
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "エラー: パラメーター '%s' 㯠SSIDã€BSSID ã®ã„ãšã‚Œã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1805
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "エラー: デãƒã‚¤ã‚¹ '%s' 㯠Wi-Fi デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../cli/src/devices.c:1807
+#: ../cli/src/devices.c:1855 ../cli/src/devices.c:2017
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "エラー: Wi-Fi デãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:1825
+#: ../cli/src/devices.c:1873
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "エラー: SSID ㌠'%s' ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:1827
+#: ../cli/src/devices.c:1875
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "エラー: BSSID ㌠'%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:1925
-#, fuzzy, c-format
-#| msgid "Error: 'device wifi' command '%s' is not valid."
-msgid "Error: 'dev wifi' command '%s' is not valid."
+#: ../cli/src/devices.c:1914
+msgid "Password: "
+msgstr "パスワード: "
+
+#: ../cli/src/devices.c:2043
+#, c-format
+msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "エラー: 'dev wifi' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:2001
-#, fuzzy, c-format
-#| msgid "Error: 'device wimax': %s"
-msgid "Error: 'dev wimax': %s"
+#: ../cli/src/devices.c:2090
+msgid "WiMAX NSP list"
+msgstr "WiMAX NSP 一覧"
+
+#: ../cli/src/devices.c:2128
+#, c-format
+msgid "Error: 'device wimax': %s"
msgstr "エラー: 'device wimax': %s"
-#: ../cli/src/devices.c:2003
-#, fuzzy, c-format
-#| msgid "Error: 'device wimax': %s; allowed fields: %s"
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
+#: ../cli/src/devices.c:2130
+#, c-format
+msgid "Error: 'device wimax': %s; allowed fields: %s"
msgstr "エラー: 'device wimax': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/devices.c:2026
-msgid "WiMAX NSP list"
-msgstr "WiMAX NSP 一覧"
-
-#: ../cli/src/devices.c:2063
+#: ../cli/src/devices.c:2185
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "エラー: '%s' ã¨è¨€ã†åå‰ã® NSP ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:2074
+#: ../cli/src/devices.c:2198
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "エラー: デãƒã‚¤ã‚¹ '%s' 㯠WiMAX デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:2105
+#: ../cli/src/devices.c:2236
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "エラー: nsp '%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:2132
-#, fuzzy, c-format
-#| msgid "Error: 'device wimax' command '%s' is not valid."
-msgid "Error: 'dev wimax' command '%s' is not valid."
+#: ../cli/src/devices.c:2268
+#, c-format
+msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "エラー: 'dev wimax' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯ç„¡åŠ¹ã§ã™ã€‚"
-#: ../cli/src/devices.c:2185
+#: ../cli/src/devices.c:2319
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "エラー: 'dev' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
@@ -1525,77 +2945,129 @@ msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
+msgid "STARTUP"
msgstr ""
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+msgid "CONNECTIVITY"
+msgstr "接続性"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+msgid "WIFI-HW"
+msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-#, fuzzy
-#| msgid "WIFI-HARDWARE"
-msgid "WIMAX-HARDWARE"
-msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+msgid "WWAN-HW"
+msgstr "WWAN ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "パーミッション"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "値"
-#: ../cli/src/network-manager.c:77
-#, fuzzy, c-format
-#| msgid ""
-#| "Usage: nmcli radio { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { all | wifi | wwan | wimax }\n"
-#| "\n"
-#| " all | wifi | wwan | wimax [ on | off ]\n"
-#| "\n"
-#| " COMMAND := { all | wifi | wwan }\n"
-#| "\n"
-#| " all | wifi | wwan [ on | off ]\n"
-#| "\n"
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "レベル"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "ドメイン"
+
+#: ../cli/src/network-manager.c:95
+#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | permissions | logging }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | wimax }\n"
+" status\n"
+"\n"
+" permissions\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+msgstr ""
+"使ã„æ–¹: nmcli general { コマンド | help }\n"
+"\n"
+" コマンド := { status | permissions | logging }\n"
"\n"
" status\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+" COMMAND := { on | off | connectivity }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"使ã„æ–¹ : nmcli networking { コマンド | help }\n"
+"\n"
+" コマンド := { on | off | connectivity }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:119
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+" COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+" COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
"\n"
msgstr ""
"使ã„æ–¹: nmcli radio { コマンド | help }\n"
@@ -1609,199 +3081,181 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:142
msgid "asleep"
msgstr "休止中"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:144
msgid "connecting"
msgstr "接続中"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:146
msgid "connected (local only)"
msgstr "接続完了 (ローカルã®ã¿)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:148
msgid "connected (site only)"
msgstr "接続完了 (サイトã®ã¿)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:152
msgid "disconnecting"
msgstr "切断中"
-#: ../cli/src/network-manager.c:158
-#, fuzzy, c-format
-#| msgid "Error: 'device status': %s"
-msgid "Error: 'nm status': %s"
-msgstr "エラー: 'device status': %s"
+#: ../cli/src/network-manager.c:168
+msgid "portal"
+msgstr "ãƒãƒ¼ã‚¿ãƒ«"
+
+#: ../cli/src/network-manager.c:170
+msgid "limited"
+msgstr "制é™ä»˜ã"
+
+#: ../cli/src/network-manager.c:172
+msgid "full"
+msgstr "完全"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:511
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "エラー: 'nm status': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+msgid "Error: %s"
+msgstr "エラー: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:213
+#, c-format
+msgid "Error: %s (allowed fields: %s)"
+msgstr "エラー: %s (許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s)"
+
+#: ../cli/src/network-manager.c:229 ../cli/src/network-manager.c:230
+#: ../cli/src/network-manager.c:231 ../cli/src/network-manager.c:232
+#: ../cli/src/network-manager.c:233 ../cli/src/network-manager.c:235
+#: ../cli/src/network-manager.c:236
msgid "enabled"
msgstr "有効"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:229 ../cli/src/network-manager.c:230
+#: ../cli/src/network-manager.c:231 ../cli/src/network-manager.c:232
+#: ../cli/src/network-manager.c:233 ../cli/src/network-manager.c:235
+#: ../cli/src/network-manager.c:236
msgid "disabled"
msgstr "無効"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:248
msgid "NetworkManager status"
msgstr "NetworkManager ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:253
msgid "running"
msgstr "実行中"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:253
msgid "not running"
msgstr "実行ã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:256
+#, fuzzy
+#| msgid "activating"
+msgid "starting"
+msgstr "アクティベート中"
+
+#: ../cli/src/network-manager.c:256
+msgid "started"
+msgstr ""
+
+#: ../cli/src/network-manager.c:327
msgid "auth"
msgstr "èªè¨¼"
-#: ../cli/src/network-manager.c:301
-#, fuzzy, c-format
-#| msgid "Error: 'general permissions': %s"
-msgid "Error: 'nm permissions': %s"
+#: ../cli/src/network-manager.c:357
+#, c-format
+msgid "Error: 'general permissions': %s"
msgstr "エラー: 'general permissions': %s"
-#: ../cli/src/network-manager.c:303
-#, fuzzy, c-format
-#| msgid "Error: 'general permissions': %s; allowed fields: %s"
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
+#: ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: 'general permissions': %s; allowed fields: %s"
msgstr "エラー: 'general permissions': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:374
msgid "NetworkManager permissions"
msgstr "NetworkManager ã®ãƒ‘ーミッション"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
-#, fuzzy, c-format
-#| msgid "Error: could not connect to D-Bus."
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "エラー: D-Bus ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: ../cli/src/network-manager.c:416
+#, c-format
+msgid "Error: 'general logging': %s"
+msgstr "エラー: 'general logging': %s"
-#: ../cli/src/network-manager.c:361
-#, fuzzy, c-format
-#| msgid "Error: Could not create NMClient object."
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "エラー: NMClient オブジェクトを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+#: ../cli/src/network-manager.c:418
+#, c-format
+msgid "Error: 'general logging': %s; allowed fields: %s"
+msgstr "エラー: 'general logging': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/network-manager.c:367
-#, fuzzy, c-format
-#| msgid "Error: %s: %s."
-msgid "Error in sleep: %s"
-msgstr "エラー: %s: %s。"
+#: ../cli/src/network-manager.c:434
+msgid "NetworkManager logging"
+msgstr "NetworkManager ã®ãƒ­ã‚®ãƒ³ã‚°"
+
+#: ../cli/src/network-manager.c:509
+#, c-format
+msgid "Error: access denied to set logging; %s"
+msgstr "エラー: ロギング設定ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸ; %s"
+
+#: ../cli/src/network-manager.c:522
+#, c-format
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "エラー: 'general' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:541
#, fuzzy, c-format
#| msgid "Error: '--fields' value '%s' is not valid here (allowed fields: %s)"
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr "エラー: '--fields' ã®å€¤ '%s' ã¯ã“ã“ã§ã¯ç„¡åŠ¹ã§ã™; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/network-manager.c:424
-#, fuzzy
-#| msgid "Networking"
-msgid "Networking enabled"
-msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
-
-#: ../cli/src/network-manager.c:440
-#, fuzzy, c-format
-#| msgid "Error: invalid '%s' argument: '%s' (use on/off)."
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+#: ../cli/src/network-manager.c:566
+#, c-format
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr "エラー: 無効㪠'%s' 引数ã§ã™: '%s' (on ã‹ off を使用ã—ã¦ãã ã•ã„)。"
-#: ../cli/src/network-manager.c:450
-#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr ""
+#: ../cli/src/network-manager.c:577
+msgid "Connectivity"
+msgstr "接続性"
-#: ../cli/src/network-manager.c:458
-#, fuzzy, c-format
-#| msgid "Error: invalid '%s' argument: '%s' (use on/off)."
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "エラー: 無効㪠'%s' 引数ã§ã™: '%s' (on ã‹ off を使用ã—ã¦ãã ã•ã„)。"
+#: ../cli/src/network-manager.c:589
+msgid "Networking"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "Wi-Fi ã¯æœ‰åŠ¹ã§ã™"
+#: ../cli/src/network-manager.c:610
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "エラー: 'networking connectivity' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/network-manager.c:495
-#, fuzzy, c-format
-#| msgid "Error: invalid extra argument '%s'."
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "エラー: '%s' ã¯ç„¡åŠ¹ãªè¿½åŠ å¼•æ•°ã§ã™ã€‚"
+#: ../cli/src/network-manager.c:619
+#, c-format
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "エラー: 'networking' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN ã¯æœ‰åŠ¹ã§ã™"
+#: ../cli/src/network-manager.c:644 ../cli/src/network-manager.c:657
+msgid "Radio switches"
+msgstr "ラジオスイッãƒ"
-#: ../cli/src/network-manager.c:533
-#, fuzzy, c-format
-#| msgid "Error: invalid extra argument '%s'."
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "エラー: '%s' ã¯ç„¡åŠ¹ãªè¿½åŠ å¼•æ•°ã§ã™ã€‚"
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:671
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi ラジオスイッãƒ"
-#: ../cli/src/network-manager.c:556
-#, fuzzy
-#| msgid "WiFi enabled"
-msgid "WiMAX enabled"
-msgstr "Wi-Fi ã¯æœ‰åŠ¹ã§ã™"
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:683
+msgid "WWAN radio switch"
+msgstr "WWAN ラジオスイッãƒ"
-#: ../cli/src/network-manager.c:572
-#, fuzzy, c-format
-#| msgid "Error: invalid extra argument '%s'."
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "エラー: '%s' ã¯ç„¡åŠ¹ãªè¿½åŠ å¼•æ•°ã§ã™ã€‚"
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:696
+msgid "WiMAX radio switch"
+msgstr "WiMAX ラジオスイッãƒ"
-#: ../cli/src/network-manager.c:588
-#, fuzzy, c-format
-#| msgid "Error: 'dev' command '%s' is not valid."
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "エラー: 'dev' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+#: ../cli/src/network-manager.c:711
+#, c-format
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "エラー: 'radio' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/nmcli.c:76
-#, fuzzy, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in values\n"
-#| " -n[ocheck] don't check nmcli and NetworkManager versions\n"
-#| " -a[sk] ask for missing parameters\n"
-#| " -w[ait] <seconds> set timeout waiting for finishing operations\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " g[eneral] NetworkManager's general status and operations\n"
-#| " n[etworking] overall networking control\n"
-#| " r[adio] NetworkManager radio switches\n"
-#| " c[onnection] NetworkManager's connections\n"
-#| " d[evice] devices managed by NetworkManager\n"
-#| "\n"
+#: ../cli/src/nmcli.c:78
+#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1812,11 +3266,15 @@ msgid ""
" -f[ields] <field1,field2,...>|all|common specify fields to output\n"
" -e[scape] yes|no escape columns separators in values\n"
" -n[ocheck] don't check nmcli and NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
@@ -1843,242 +3301,657 @@ msgstr ""
" d[evice] NetworkManager ã§ç®¡ç†ã—ã¦ã„るデãƒã‚¤ã‚¹\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "エラー: オブジェクト '%s' ã¯ä¸æ˜Žã§ã™ã€‚'nmcli help' を確èªã—ã¦ãã ã•ã„。"
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "エラー: オプション '--terse' ãŒäºŒåº¦æŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "エラー: オプション '--terse' 㯠'--pretty' ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚"
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "エラー: オプション '--pretty' ãŒäºŒåº¦æŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "エラー: オプション '--pretty' 㯠'--terse' ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚"
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "エラー: %s オプション用ã®å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "エラー: '%s' 㯠'%s' オプション用ã®æœ‰åŠ¹ãªå¼•æ•°ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "エラー: '%s' オプション用ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "エラー: '%s' 㯠'%s' オプションã®æœ‰åŠ¹ãªã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli ツールã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "エラー: オプション '%s' ã¯ä¸æ˜Žã§ã™ã€'nmcli -help' を確èªã—ã¦ãã ã•ã„。"
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "シグナル %d ãŒå‡ºã¾ã—ãŸã€ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã—ã¾ã™..."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:129
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "ä¿¡å·ãƒžã‚¹ã‚¯ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %d"
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:325 ../src/main.c:138
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "ä¿¡å·å‡¦ç†ã‚¹ãƒ¬ãƒƒãƒ‰ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %d"
+
+#: ../cli/src/nmcli.c:338
msgid "Error: Could not create NMClient object."
msgstr "エラー: NMClient オブジェクトを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "æˆåŠŸ"
-#: ../cli/src/settings.c:595
+#: ../cli/src/settings.c:629
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:597
+#: ../cli/src/settings.c:631
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit パスフレーズ)"
-#: ../cli/src/settings.c:600 ../cli/src/settings.c:728
+#: ../cli/src/settings.c:634 ../cli/src/settings.c:762
#, c-format
msgid "%d (unknown)"
msgstr "%d (ä¸æ˜Ž)"
-#: ../cli/src/settings.c:626
+#: ../cli/src/settings.c:660
msgid "0 (unknown)"
msgstr "0 (ä¸æ˜Ž)"
-#: ../cli/src/settings.c:632
+#: ../cli/src/settings.c:666
msgid "any, "
msgstr "ã„ãšã‚Œã§ã‚‚ã€"
-#: ../cli/src/settings.c:634
+#: ../cli/src/settings.c:668
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:636
+#: ../cli/src/settings.c:670
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:638
+#: ../cli/src/settings.c:672
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:640
+#: ../cli/src/settings.c:674
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:642
+#: ../cli/src/settings.c:676
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:678
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:646
+#: ../cli/src/settings.c:680
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:648
+#: ../cli/src/settings.c:682
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:684
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:686
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:688
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:690
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:692
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:676
+#: ../cli/src/settings.c:710
msgid "0 (NONE)"
msgstr "0 (ãªã—)"
-#: ../cli/src/settings.c:682
+#: ../cli/src/settings.c:716
msgid "REORDER_HEADERS, "
msgstr "ヘッダーã®é †åºå¤‰æ›´ã€"
-#: ../cli/src/settings.c:684
+#: ../cli/src/settings.c:718
msgid "GVRP, "
msgstr "GVRPã€"
-#: ../cli/src/settings.c:686
+#: ../cli/src/settings.c:720
msgid "LOOSE_BINDING, "
msgstr "çµåˆã‚’ç·©ã‚ã‚‹ã€"
-#: ../cli/src/settings.c:722
+#: ../cli/src/settings.c:756
#, c-format
msgid "%d (disabled)"
msgstr "%d (無効)"
-#: ../cli/src/settings.c:724
+#: ../cli/src/settings.c:758
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (有効ã€ãƒ‘ブリック IP 優先)"
-#: ../cli/src/settings.c:726
+#: ../cli/src/settings.c:760
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (有効ã€ãƒ†ãƒ³ãƒãƒ©ãƒª IP を優先)"
-#: ../cli/src/settings.c:738
+#: ../cli/src/settings.c:772
msgid "0 (none)"
msgstr "0 (ãªã—)"
-#: ../cli/src/settings.c:744
+#: ../cli/src/settings.c:778
msgid "agent-owned, "
msgstr "エージェント所有〠"
-#: ../cli/src/settings.c:746
+#: ../cli/src/settings.c:780
msgid "not saved, "
msgstr "未ä¿å­˜ã€ "
-#: ../cli/src/settings.c:748
+#: ../cli/src/settings.c:782
msgid "not required, "
msgstr "ä¸å¿…è¦ã€ "
-#: ../cli/src/settings.c:945 ../cli/src/settings.c:1163
-#: ../cli/src/settings.c:1904
+#: ../cli/src/settings.c:1108 ../cli/src/settings.c:1291
+#: ../cli/src/settings.c:1331
msgid "auto"
msgstr "自動"
-#: ../cli/src/utils.c:105
+#: ../cli/src/settings.c:1121
+msgid "default"
+msgstr "デフォルト"
+
+#: ../cli/src/settings.c:1452
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "'%s' ã‚’ '%s' ã«è¨­å®šã—ã¾ã™ã‹? [yes]: "
+
+#: ../cli/src/settings.c:1454
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "'%s' も消去ã—ã¾ã™ã‹? [yes]: "
+
+#: ../cli/src/settings.c:1652 ../cli/src/settings.c:1907
+#: ../cli/src/settings.c:3483
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™"
+
+#: ../cli/src/settings.c:1675
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„"
+
+#: ../cli/src/settings.c:1697
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„"
+
+#: ../cli/src/settings.c:1763
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; <option>=<value> を使用ã—ã¦ãã ã•ã„"
+
+#: ../cli/src/settings.c:1797
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "インデックス '%s' ã¯ç„¡åŠ¹ã§ã™"
+
+#: ../cli/src/settings.c:1802
+msgid "no item to remove"
+msgstr "削除ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:1806
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "インデックス '%d' ã¯ç¯„囲内ã«ã‚ã‚Šã¾ã›ã‚“ <0-%d>"
+
+#: ../cli/src/settings.c:1821
+#, c-format
+msgid "invalid option '%s'"
+msgstr "無効ãªã‚ªãƒ—ション '%s'"
+
+#: ../cli/src/settings.c:1823
+msgid "missing option"
+msgstr "足りãªã„オプション"
+
+#: ../cli/src/settings.c:1853 ../cli/src/settings.c:1873
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªæ•°å­—ã§ã¯ã‚ã‚Šã¾ã›ã‚“ (ã¾ãŸã¯ç¯„囲外ã«ãªã‚Šã¾ã™)"
+
+#: ../cli/src/settings.c:1927
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª Ethernet MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:1953 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:760
+#: ../libnm-util/nm-setting-vlan.c:478
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:1971 ../cli/src/settings.c:3050
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' ã¯æ•°å­—ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:2023
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª 16 進文字ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:2053
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:2090 ../libnm-util/nm-setting-connection.c:723
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª UUID ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:2155
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,... \n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"ユーザーパーミッションã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。次ã®ã‚ˆã†ãªå½¢å¼ã§æ§‹æˆã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®ä¸€è¦§ã§ã™ã€‚\n"
+" [user:]<user name 1>, [user:]<user name 2>,... \n"
+"複数ã®å ´åˆã¯ã‚³ãƒ³ãƒžã¾ãŸã¯ç©ºç™½ã§åŒºåˆ‡ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
+"\n"
+"例: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2170
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' 㯠有効ãªãƒžã‚¹ã‚¿ãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“: ifname ã‹æŽ¥ç¶š UUID を使用ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/settings.c:2291
+msgid "private key password not provided"
+msgstr "プライベートキーã®ãƒ‘スワードãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:2351
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"プライベートキーã¸ã®ãƒ‘スã¨ã‚­ãƒ¼ãƒ‘スワード (ã¾ã è¨­å®šã—ã¦ã„ãªã„å ´åˆ) を入力ã—ã¦ãã ã•ã„:\n"
+" <file path> [<password>]\n"
+"例: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2421
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"16 進値ã®ä¸€è¦§ã®ãƒã‚¤ãƒˆã‚’入力ã—ã¦ãã ã•ã„。\n"
+"入力ã§ãã‚‹å½¢å¼ã¯ 2 種類ã‚ã‚Šã¾ã™ã€‚\n"
+"(a) 16 進ã®æ•°å­—ã‹ã‚‰æˆã‚‹åˆ—ã€2 æ¡ã§ 1 ãƒã‚¤ãƒˆ\n"
+"(b) 空白ã§åŒºåˆ‡ã£ãŸ 16 進ã®æ•°å­—ã®ä¸¦ã³ (オプション㧠0x/0X プレフィックスã€ãŠã‚ˆã³å…ˆè¡Œã® 0 を使用å¯èƒ½)\n"
+"\n"
+"例: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2524
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"次ã®ã‚ˆã†ãªå½¢å¼ã§ãƒœãƒ³ãƒ‰ã®ã‚ªãƒ—ション一覧を入力ã—ã¦ãã ã•ã„。\n"
+" オプション = <value>, オプション = <value>,... \n"
+"有効ãªã‚ªãƒ—ション: %s\n"
+"'mode' ã¯ãƒ¢ãƒ¼ãƒ‰åã¾ãŸã¯æ•°å€¤ã§æŒ‡å®šã§ãã¾ã™ã€‚\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"例: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2565
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª InfiniBand MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:2603
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª IBoIP P_Key ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:2663
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS サーãƒãƒ¼ã® IPv4 アドレス一覧を入力ã—ã¦ãã ã•ã„。\n"
+"\n"
+"例: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2709 ../cli/src/settings.c:2961
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™ (ip[/prefix] [gateway] を使用ã—ã¦ãã ã•ã„)"
+
+#: ../cli/src/settings.c:2735
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv4 アドレスã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 32 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
+"\n"
+"例: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2792
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™ (ip/[prefix] next-hop [metric] を使用ã—ã¦ãã ã•ã„)"
+
+#: ../cli/src/settings.c:2818
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv4 ルートã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
+" ip/[prefix] next-hop [metric],... \n"
+"プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 32 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
+"メトリックãŒãªã„ã‚‚ã®ã¯ãƒ¡ãƒˆãƒªãƒƒã‚¯ 0 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
+"\n"
+"例: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:2909
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration method is 'auto' these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared' or 'link-local' IPv6 configuration methods, as there is no usptream network. In all other IPv6 configuration methods methods, these DNS servers are used as the only DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS サーãƒãƒ¼ã® IPv6 アドレス一覧を入力ã—ã¦ãã ã•ã„。IPv6 設定方法㌠'auto' ã®å ´åˆã¯ã€è‡ªå‹•è¨­å®šã§è¿”ã•ã‚Œã‚‹ã‚‚ã®ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚DNS サーãƒãƒ¼ã¯ã€ä¸Šæµã¨ãªã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒãªã„ãŸã‚ 'shared' ã¾ãŸã¯ 'link-local' ã® IPv6 設定方法ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。ãã®ä»–ã® IPv6 設定方法ã§ã¯ã™ã¹ã¦ã€ã“れら㮠DNS サーãƒãƒ¼ã¯ã“ã®æŽ¥ç¶šç”¨ã® DNS サーãƒãƒ¼ã¨ã—ã¦ã®ã¿ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚\n"
+"\n"
+"例: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:2987
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv6 アドレスã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 128 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
+"\n"
+"例: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3009
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™ (<dest IP>/prefix <next-hop IP> [metric] を使用ã—ã¦ãã ã•ã„)"
+
+#: ../cli/src/settings.c:3035
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:db8:beef::3 2\n"
+msgstr ""
+"次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv6 ルートã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
+" ip/[prefix] next-hop [metric],... \n"
+"プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 128 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"例: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3057
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; 0ã€1ã€2 ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/settings.c:3074
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“; <1-13> を使用ã—ã¦ãã ã•ã„"
+
+#: ../cli/src/settings.c:3095
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; [e, o, n] を使用ã—ã¦ãã ã•ã„"
+
+#: ../cli/src/settings.c:3135
+msgid "no priority to remove"
+msgstr "削除ã™ã‚‹å„ªå…ˆåº¦ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:3139
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "インデックス '%d' 㯠<0-%d> ã®ç¯„囲内ã«ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:3254
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; 3 ã¤ã®æ–‡å­—列を入力ã—ã¦ãã ã•ã„"
+
+#: ../cli/src/settings.c:3273
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"3 ãƒãƒ£ãƒ³ãƒãƒ«ã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„ (ãƒãƒ£ãƒ³ãƒãƒ«åŒå£«ã¯ã‚³ãƒ³ãƒžã¾ãŸã¯ç©ºç™½ã§åŒºåˆ‡ã‚Šã¾ã™)。\n"
+"\n"
+"例: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3323
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+msgstr ""
+"次ã®ã‚ˆã†ãªå½¢å¼ã§ S/390 ã®ã‚ªãƒ—ション一覧を入力ã—ã¦ãã ã•ã„。\n"
+" option = <value>, option = <value>,... \n"
+"有効ãªã‚ªãƒ—ション: %s\n"
+
+#: ../cli/src/settings.c:3369
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:3375
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:3478 ../cli/src/settings.c:3481
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP キー㯠'%s' ã§ã‚ã‚‹ã¨ä»®å®šã—ã¦ã„ã¾ã™\n"
+
+#: ../cli/src/settings.c:3505
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr ""
+
+#: ../cli/src/settings.c:3525
+#, c-format
+msgid "Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, and 2 or passphrase.\n"
+msgstr ""
+
+#: ../cli/src/settings.c:3538
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª PSK ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:5038
+msgid "don't know how to get the property value"
+msgstr "プロパティ値ã®å–得方法ãŒã‚ã‹ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:5091 ../cli/src/settings.c:5131
+msgid "the property can't be changed"
+msgstr "ã“ã®ãƒ—ロパティã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
+
+#: ../cli/src/settings.c:5235
+msgid "[NM property description]"
+msgstr "[NM プロパティã®è©³ç´°]"
+
+#: ../cli/src/settings.c:5241
+msgid "[nmcli specific description]"
+msgstr "[nmcli 固有ã®è©³ç´°]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "エラー: '%s' 引数ã®å€¤ãŒå¿…è¦ã§ã™ã€‚"
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "エラー: 引数 '%s' ã®å…¥åŠ›ãŒæœŸå¾…ã•ã‚Œã¦ã„ã¾ã—ãŸãŒã€'%s' ãŒå…¥åŠ›ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "エラー: 予期ã—ãªã„引数 '%s' ã§ã™"
+
+#: ../cli/src/utils.c:189
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 アドレス 0x%X をテキスト形å¼ã«å¤‰æ›ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:217
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 アドレス '%s' をテキスト形å¼ã«å¤‰æ›ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-#: ../cli/src/utils.c:234
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; [%s] ã‹ [%s] を使用ã—ã¦ãã ã•ã„"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' ãŒä¸æ˜Žçž­ã§ã™ (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "åå‰ãŒã‚ã‚Šã¾ã›ã‚“ã€[%s] ã®ã†ã¡ã®ã„ãšã‚Œã‹ã§è©¦ã—ã¦ã¿ã¦ãã ã•ã„"
+
+#: ../cli/src/utils.c:640
#, c-format
msgid "field '%s' has to be alone"
msgstr "フィールド '%s' ã¯å­¤ç«‹ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
-#: ../cli/src/utils.c:237
+#: ../cli/src/utils.c:643
#, c-format
msgid "invalid field '%s'"
msgstr "無効ãªãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ '%s'"
-#: ../cli/src/utils.c:256
+#: ../cli/src/utils.c:662
msgid "Option '--terse' requires specifying '--fields'"
msgstr "オプション '--terse' ã«ã¯ '--fields' ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
-#: ../cli/src/utils.c:260
+#: ../cli/src/utils.c:666
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "オプション'--terse' ã«ã¯ç‰¹å®šã® '--fields' オプションã®å€¤ãŒå¿…è¦ã§ã€ '%s' ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/utils.c:470
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-
-#: ../cli/src/utils.c:478
-#, fuzzy, c-format
-#| msgid "Error: Connection deletion failed: %s"
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "エラー: 接続ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-
-#: ../cli/src/utils.c:523
+#: ../cli/src/utils.c:980
#, c-format
msgid "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --nocheck to suppress the warning.\n"
msgstr "警告: nmcli (%s) 㨠NetworkManager (%s) ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä¸€è‡´ã—ã¾ã›ã‚“。警告を回é¿ã™ã‚‹å ´åˆã¯ --nocheck を使用ã—ã¾ã™ã€‚\n"
-#: ../cli/src/utils.c:532
+#: ../cli/src/utils.c:989
#, c-format
msgid "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force execution using --nocheck, but the results are unpredictable."
msgstr "エラー: nmcli (%s) 㨠NetworkManager (%s) ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä¸€è‡´ã—ã¾ã›ã‚“。--nocheck を使用ã™ã‚‹ã¨å¼·åˆ¶çš„ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€äºˆæ¸¬ã§ããªã„çµæžœã¨ãªã‚Šã¾ã™ã€‚"
@@ -2093,118 +3966,87 @@ msgstr "PEM キーファイルã¯çµ‚了タグ '%s' ã‚’æŒã¡ã¾ã›ã‚“。"
msgid "Doesn't look like a PEM private key file."
msgstr "PEM プライベートキーファイルã§ã¯ãªã„よã†ã§ã™ã€‚"
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM ファイルデータã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "ä¸æ­£å½¢å¼ã® PEM ファイル: Proc-Type ã¯æœ€åˆã®ã‚¿ã‚°ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "ä¸æ­£å½¢å¼ã® PEM ファイル: ä¸æ˜Žãª Proc-Type ã‚¿ã‚° '%s' ã§ã™ã€‚"
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "ä¸æ­£å½¢å¼ã® PEM ファイル: DEK-Info ã¯ï¼’ã¤ç›®ã®ã‚¿ã‚°ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "ä¸æ­£å½¢å¼ã® PEM ファイル: DEK-Info タグ内㫠IV ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "ä¸æ­£å½¢å¼ã® PEM ファイル: DEK-Info タグ内ã«ç„¡åŠ¹ãªå½¢å¼ã® IV"
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "ä¸æ­£å½¢å¼ã® PEM ファイル: ä¸æ˜Žãªãƒ—ライベートキー暗å·æ–‡ '%s'。"
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "プライベートキーを復å·ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../libnm-util/crypto.c:290
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "期待ã•ã‚Œã¦ã„ã‚‹ PKCS#8 開始タグã®æ¤œå‡ºã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto.c:298
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "期待ã•ã‚Œã¦ã„ã‚‹ PKCS#8 終了タグ '%s' ã®æ¤œå‡ºã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto.c:318
-#, fuzzy
-#| msgid "Not enough memory to store file data."
-msgid "Not enough memory to store private key data."
-msgstr "ファイルデータã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../libnm-util/crypto.c:323
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 プライベートキーã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto.c:345 ../libnm-util/crypto.c:631
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "証明書データã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../libnm-util/crypto.c:371
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ã¯ãã®é•·ã•ã§å¶æ•°ã®ãƒã‚¤ãƒˆæ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: ../libnm-util/crypto.c:380
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV ã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../libnm-util/crypto.c:391
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV 㯠16進法ã§ãªã„æ•°å­—ã‚’å«ã‚“ã§ã„ã¾ã™ã€‚"
-#: ../libnm-util/crypto.c:429 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "プライベートキー暗å·æ–‡ '%s' ã¯ä¸æ˜Žã§ã™ã€‚"
-#: ../libnm-util/crypto.c:438
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "プライベートキーã®è§£èª­ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../libnm-util/crypto.c:503
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "復å·ã—ãŸãƒ—ライベートキーã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../libnm-util/crypto.c:548
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "プライベートキーã®ã‚¿ã‚¤ãƒ—を判定ã§ãã¾ã›ã‚“。"
-#: ../libnm-util/crypto.c:603
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM 証明書ã«çµ‚了タグ '%s' ãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../libnm-util/crypto.c:612
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM 証明書ã«çµ‚了タグ '%s' ãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../libnm-util/crypto.c:636
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "証明書ã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
@@ -2223,97 +4065,87 @@ msgstr "MD5 エンジンã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s"
msgid "Invalid IV length (must be at least %zd)."
msgstr "IV ã®é•·ã•ãŒç„¡åŠ¹ã§ã™ (最低 %zd ã®é•·ã•ãŒå¿…è¦)。"
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "復å·ã—ãŸã‚­ãƒ¼ãƒãƒƒãƒ•ã‚¡ç”¨ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "復å·åŒ–æš—å·æ–‡ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "復å·ç”¨ã®ã‚·ãƒ³ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚­ãƒ¼ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "復å·ç”¨ã® IV ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "プライベートキーã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "プライベートキーã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸ: 予想外ã®ä¸è¦èªžå¥ã®é•·ã•ã§ã™ã€‚"
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "プライベートキーã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "æš—å·åŒ–用ã®ãƒ¡ãƒ¢ãƒªãƒ¼å‰²ã‚Šå½“ã¦ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚"
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "æš—å·åŒ–æš—å·æ–‡ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "æš—å·åŒ–用ã®ã‚·ãƒ³ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚­ãƒ¼ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "æš—å·åŒ–用㮠IV ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "データã®æš—å·åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "証明書データã®åˆæœŸåŒ–ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "証明書をデコードã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 デコーダーをåˆæœŸåŒ–ã§ãã¾ã›ã‚“: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 ファイルをデコードã§ãã¾ã›ã‚“: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 ファイルを確証ã§ãã¾ã›ã‚“: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 デコーダーをåˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ファイルをデコードã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
@@ -2333,123 +4165,441 @@ msgstr "MD5 コンテキストã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ: %d。"
msgid "Invalid IV length (must be at least %d)."
msgstr "IV ã®é•·ã•ãŒç„¡åŠ¹ã§ã™ (最低ã§ã‚‚ %d ã¯å¿…è¦)。"
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "復å·åŒ–æš—å·æ–‡ã‚¹ãƒ­ãƒƒãƒˆã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "復å·åŒ–用シンメトリックキーã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "復å·åŒ–用 IV ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "復å·åŒ–コンテキストã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "プライベートキーã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸ: %d"
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "プライベートキーã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸ: 復å·ã—ãŸãƒ‡ãƒ¼ã‚¿ãŒå¤§ãã™ãŽã¾ã™ã€‚"
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "プライベートキー復å·åŒ–ã®å®Œäº†ã«å¤±æ•—ã—ã¾ã—ãŸ: %d"
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "æš—å·åŒ–æš—å·æ–‡ã‚¹ãƒ­ãƒƒãƒˆã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "æš—å·åŒ–用ã®ã‚·ãƒ³ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚­ãƒ¼ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "æš—å·åŒ–用㮠IV ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "æš—å·åŒ–コンテキストã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "æš—å·åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ: %d"
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "æš—å·åŒ–ã®å¾Œã«äºˆæœŸã—ãªã„データã®é‡ãŒã‚ã‚Šã¾ã™ã€‚"
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "証明書ã®ãƒ‡ã‚³ãƒ¼ãƒ‰ãŒã§ãã¾ã›ã‚“: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "パスワードを UCS2 ã«å¤‰æ›ã§ãã¾ã›ã‚“: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 デコーダーをåˆæœŸåŒ–ã§ãã¾ã›ã‚“: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 ファイルをデコードã§ãã¾ã›ã‚“: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 ファイルを確証ã§ãã¾ã›ã‚“: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "ランダムデータを生æˆã§ãã¾ã›ã‚“。"
-#: ../libnm-util/nm-utils.c:2158
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2538
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bluetooth.c:171
+#: ../libnm-util/nm-setting-bond.c:378 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:700
+#: ../libnm-util/nm-setting-connection.c:716
+#: ../libnm-util/nm-setting-connection.c:771
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:128
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:406 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#: ../libnm-util/nm-setting-wireless.c:700
+msgid "property is missing"
+msgstr "プロパティãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:707
+#: ../libnm-util/nm-setting-connection.c:778
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:415 ../libnm-util/nm-setting-vpn.c:425
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:834
+#: ../libnm-util/nm-setting-wireless-security.c:842
+#: ../libnm-util/nm-setting-wireless-security.c:866
+msgid "property is empty"
+msgstr "プロパティãŒç©ºã§ã™"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 ã® '%s' プロパティã¨ä¸€è‡´ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-8021x.c:2513 ../libnm-util/nm-setting-8021x.c:2547
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:387
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:156
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:894
+#: ../libnm-util/nm-setting-wireless-security.c:902
+#: ../libnm-util/nm-setting-wireless-security.c:910
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:945
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:991
+#: ../libnm-util/nm-setting-wireless.c:760
+#: ../libnm-util/nm-setting-wireless.c:769
+#: ../libnm-util/nm-setting-wireless.c:778
+msgid "property is invalid"
+msgstr "プロパティãŒç„¡åŠ¹ã§ã™"
+
+#: ../libnm-util/nm-setting-8021x.c:2572 ../libnm-util/nm-setting-8021x.c:2582
+#: ../libnm-util/nm-setting-8021x.c:2592 ../libnm-util/nm-setting-8021x.c:2602
+#: ../libnm-util/nm-setting-8021x.c:2612 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:179
+#: ../libnm-util/nm-setting-wireless-security.c:813
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒ—ロパティã®å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-bluetooth.c:201
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' ã¾ãŸã¯ '%s' ã®è¨­å®šãŒå¿…è¦ã§ã™"
+
+#: ../libnm-util/nm-setting-bond.c:401
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "無効ãªã‚ªãƒ—ション '%s'ã€ã¾ãŸã¯ãã®å€¤ '%s' ã§ã™"
+
+#: ../libnm-util/nm-setting-bond.c:420
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr ""
+
+#: ../libnm-util/nm-setting-bond.c:431
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "必須オプション㮠'%s' ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-bond.c:440
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª '%s' ã®å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-bond.c:453
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' 㯠'%s > 0' ã¨ã¯äº’æ›æ€§ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-bond.c:464
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' 㯠'%s' ã®æœ‰åŠ¹ãªè¨­å®šã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-bond.c:477 ../libnm-util/nm-setting-bond.c:486
+#: ../libnm-util/nm-setting-bond.c:506 ../libnm-util/nm-setting-bond.c:542
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' オプションを使用ã™ã‚‹å ´åˆã¯ '%s' オプションを設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' オプションãŒç©ºç™½ã§ã™"
+
+#: ../libnm-util/nm-setting-bond.c:530
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' 㯠'%s' オプション用ã®æœ‰åŠ¹ãª IPv4 アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' ã¯ãƒ—ロパティã®æœ‰åŠ¹ãªå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ (%d 以下ã¨ãªã‚‹ã¯ãšã§ã™)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "値 '%d' 㯠<%d-%d> ã®ç¯„囲外ã§ã™"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "プロパティãŒç©ºã§ã™"
+
+#: ../libnm-util/nm-setting-connection.c:742
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' ã¯ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹å '%s' ã¨ä¸€è‡´ã—ã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-connection.c:788
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "接続ã«ã¯ '%s' 設定ãŒãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-connection.c:812
+msgid "IPv4 configuration is not allowed for bonding slave"
+msgstr "ボンドスレーブã«ã¯ IPv4 設定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-connection.c:829
+msgid "IPv6 configuration is not allowed for bonding slave"
+msgstr "ボンドスレーブã«ã¯ IPv6 設定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "プロパティ値 '%s' ãŒç©ºç™½ã€ã¾ãŸã¯é•·éŽãŽã¾ã™ (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' ã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ ([A-Za-z._-] を使用ã—ã¦ãã ã•ã„)"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' ã®é•·ã•ã¯ç„¡åŠ¹ã§ã™ (5 æ¡ã¾ãŸã¯ 6 æ¡ã«ã—ã¦ãã ã•ã„)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "無効ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã§ã™"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "親を指定ã—ã¦ã„ã‚‹å ´åˆã¯ P_Key を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key 接続ã§è¦ªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "ã“ã®ãƒ—ロパティ㯠'%s=%s' ã«ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 アドレスã¯ç„¡åŠ¹ã§ã™"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 ã«ç„¡åŠ¹ãªãƒ—レフィックスãŒã‚ã‚Šã¾ã™"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. ルートã¯ç„¡åŠ¹ã§ã™"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. ルートã«ç„¡åŠ¹ãªãƒ—レフィックスãŒã‚ã‚Šã¾ã™"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' 㯠%s=%s ã«è¨±å¯ã•ã‚Œã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:137
+#: ../libnm-util/nm-setting-wireless.c:709
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID ã®é•·ã•ã¯ç¯„囲外 <1-32> ãƒã‚¤ãƒˆã§ã™"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:146
+#: ../libnm-util/nm-setting-wireless.c:749
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' ã¯ç„¡åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã™"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' ã¯æœ‰åŠ¹ãªç¯„囲 <128-16384> ã®å¤–ã«ã‚ã‚Šã¾ã™"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "ã“ã®ãƒ—ロパティを設定ã™ã‚‹ã«ã¯ã‚¼ãƒ­ä»¥å¤–ã® '%s' プロパティãŒå¿…è¦ã§ã™"
+
+#: ../libnm-util/nm-setting-vlan.c:500
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' ã®å€¤ã¯ '%s=%s' ã¨ä¸€è‡´ã—ã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-vlan.c:511
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' 㯠UUIDã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã®ã„ãšã‚Œã§ã‚‚ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-vlan.c:524
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr ""
+
+#: ../libnm-util/nm-setting-vlan.c:537
+msgid "flags are invalid"
+msgstr "フラグãŒç„¡åŠ¹ã§ã™"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª Ethernet ãƒãƒ¼ãƒˆå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªäºŒé‡å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "ã¯æœ‰åŠ¹ãª MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:790
+#: ../libnm-util/nm-setting-wireless.c:804
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "æš—å·åŒ–キーを作æˆã™ã‚‹ã®ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../libnm-util/nm-utils.c:2268
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM ファイル作æˆç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "無効㪠'%s' ã¾ãŸã¯ãã®å€¤ '%s' ã§ã™"
+
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' セキュリティã«ã¯ '%s=%s' ãŒå¿…è¦ã§ã™"
+
+#: ../libnm-util/nm-setting-wireless-security.c:854
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' セキュリティã«ã¯ '%s' ã®è¨­å®šãŒå¿…è¦ã«ãªã‚Šã¾ã™"
+
+#: ../libnm-util/nm-setting-wireless-security.c:875
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' ã®å€¤ã¯ <0-3> ã®ç¯„囲外ã«ãªã‚Šã¾ã™"
-#: ../libnm-util/nm-utils.c:2280
+#: ../libnm-util/nm-setting-wireless-security.c:972
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "PEM ファイルã¸ã® IV ã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' ã®æŽ¥ç¶šã®å ´åˆã€ã“ã®ãƒ—ロパティ㫠'%s' ãŒå¿…è¦ã«ãªã‚Šã¾ã™"
-#: ../libnm-util/nm-utils.c:2292
+#: ../libnm-util/nm-setting-wireless-security.c:1002
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "PEM ファイルã¸ã®æš—å·åŒ–キーã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' 㯠'%s=%s' (WEP) ã§ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“"
-#: ../libnm-util/nm-utils.c:2311
+#: ../libnm-util/nm-setting-wireless.c:718
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ファイルデータ用ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' ã¯æœ‰åŠ¹ãª Wi-Fi モードã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-wireless.c:728
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: ../libnm-util/nm-setting-wireless.c:738
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "'%s' プロパティã®è¨­å®šãŒå¿…è¦ã§ã™"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2539,16 +4689,6 @@ msgstr "永続的ãªã‚·ã‚¹ãƒ†ãƒ ã®ãƒ›ã‚¹ãƒˆåを修正"
msgid "System policy prevents modification of the persistent system hostname"
msgstr "システムãƒãƒªã‚·ãƒ¼ã«ã‚ˆã‚Šæ°¸ç¶šçš„ãªã‚·ã‚¹ãƒ†ãƒ ã®ãƒ›ã‚¹ãƒˆåã®ä¿®æ­£ãŒé˜»æ­¢ã•ã‚Œã¾ã™"
-#: ../src/main.c:129
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "ä¿¡å·ãƒžã‚¹ã‚¯ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %d"
-
-#: ../src/main.c:138
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "ä¿¡å·å‡¦ç†ã‚¹ãƒ¬ãƒƒãƒ‰ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %d"
-
#: ../src/main.c:153
#, c-format
msgid "Opening %s failed: %s\n"
@@ -2569,88 +4709,58 @@ msgstr "%s ã®ã‚¯ãƒ­ãƒ¼ã‚ºã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager ã¯ã™ã§ã«èµ·å‹•ã—ã¦ã„ã¾ã™ (pid %ld)\n"
-#: ../src/main.c:333
+#: ../src/main.c:326
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã—ã¦çµ‚了ã™ã‚‹"
-#: ../src/main.c:334
+#: ../src/main.c:327
msgid "Don't become a daemon"
msgstr "デーモンã«ã—ãªã„"
-#: ../src/main.c:335
+#: ../src/main.c:328
+msgid "Don't become a daemon, and log to stderr"
+msgstr "デーモンã«ã›ãšã€stderr ã«ãƒ­ã‚°è¨˜éŒ²ã™ã‚‹"
+
+#: ../src/main.c:329
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "ログレベル: [%s] ã®ã„ãšã‚Œã‹"
+
+#: ../src/main.c:331
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "「,ã€ã§åŒºåˆ‡ã£ãŸãƒ­ã‚°ãƒ‰ãƒ¡ã‚¤ãƒ³: [%s] ã®çµ„ã¿åˆã‚ã›"
+
+#: ../src/main.c:333
msgid "Make all warnings fatal"
msgstr "ã™ã¹ã¦ã®è­¦å‘Šã‚’致命的ã«ã™ã‚‹"
-#: ../src/main.c:336
+#: ../src/main.c:334
msgid "Specify the location of a PID file"
msgstr "PID ファイルã®å ´æ‰€ã‚’指定ã™ã‚‹"
-#: ../src/main.c:336
+#: ../src/main.c:334
msgid "filename"
msgstr "ファイルå"
-#: ../src/main.c:337
+#: ../src/main.c:335
msgid "State file location"
msgstr "状態ファイルã®å ´æ‰€"
-#: ../src/main.c:337
+#: ../src/main.c:335
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:338
-msgid "Config file location"
-msgstr "設定ファイルã®å ´æ‰€"
-
-#: ../src/main.c:338
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:339
-msgid "List of plugins separated by ','"
-msgstr "複数ã®ãƒ—ラグインを「,ã€ã§åŒºåˆ‡ã£ãŸä¸€è¦§"
-
-#: ../src/main.c:339
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:341
-#, fuzzy
-#| msgid "Log level: one of [%s]"
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "ログレベル: [%s] ã®ã„ãšã‚Œã‹"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:344
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-
-#: ../src/main.c:350
-msgid "An http(s) address for checking internet connectivity"
-msgstr "インターãƒãƒƒãƒˆã®æŽ¥ç¶šæ€§ã‚’確èªã™ã‚‹ãŸã‚ã® http(s) アドレス"
-
-#: ../src/main.c:351
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "接続性ãƒã‚§ãƒƒã‚¯ã®é–“éš” (秒å˜ä½)"
-
-#: ../src/main.c:352
-msgid "The expected start of the response"
-msgstr "期待ã•ã‚Œã¦ã„る応答ã®é–‹å§‹ç‚¹"
-
-#: ../src/main.c:352
-msgid "Bingo!"
-msgstr "当ãŸã‚Š!"
-
-#: ../src/main.c:370
+#: ../src/main.c:361
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules ã¯ã”使用ã®ãƒ—ラットフォームã§ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“!\n"
+#: ../src/main.c:366
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "NetworkManager を実行ã™ã‚‹ã«ã¯ root ã«ãªã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™!\n"
+
#: ../src/main.c:389
msgid ""
"NetworkManager monitors all network connections and automatically\n"
@@ -2668,36 +4778,31 @@ msgstr ""
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "無効ãªã‚ªãƒ—ションã§ã™ã€‚--help を使用ã—ã¦æœ‰åŠ¹ãªã‚ªãƒ—ションã®ä¸€è¦§ã‚’確èªã—ã¦ãã ã•ã„。\n"
-#: ../src/main.c:405
+#: ../src/main.c:408 ../src/main.c:472
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager を実行ã™ã‚‹ã«ã¯ root ã«ãªã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s --help を使用ã—ã¦æœ‰åŠ¹ãªã‚ªãƒ—ションã®ä¸€è¦§ã‚’確èªã—ã¦ãã ã•ã„。\n"
-#: ../src/main.c:433
+#: ../src/main.c:459
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "設定ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s\n"
-#: ../src/main.c:444
-#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s --help を使用ã—ã¦æœ‰åŠ¹ãªã‚ªãƒ—ションã®ä¸€è¦§ã‚’確èªã—ã¦ãã ã•ã„。\n"
-
-#: ../src/main.c:451
+#: ../src/main.c:480
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "状態ファイル %s ã®è§£æžã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s\n"
-#: ../src/main.c:468
+#: ../src/main.c:493
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "デーモン化ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s [エラー %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# NetworkManager ã§ä½œæˆã•ã‚Œã¦ã„ã¾ã™\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2706,1976 +4811,258 @@ msgstr ""
"# %s ã‹ã‚‰ãƒžãƒ¼ã‚¸ã•ã‚Œã¦ã„ã¾ã™\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:315
msgid "no usable DHCP client could be found."
msgstr "使用ã§ãã‚‹ DHCP クライアントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:324
#, fuzzy
msgid "'dhclient' could be found."
msgstr "'dhclient' ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:334
#, fuzzy
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:342
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "サãƒãƒ¼ãƒˆã®ç„¡ã„ DHCP クライアント '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:376
+#: ../src/dns-manager/nm-dns-manager.c:366
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "注記: libc リゾルãƒãƒ¼ã¯ 3ã¤ä»¥ä¸Šã®ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãƒ¼ã‚’サãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。"
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../src/dns-manager/nm-dns-manager.c:368
msgid "The nameservers listed below may not be recognized."
msgstr "以下ã®ä¸€è¦§ã«ã‚ã‚‹ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãƒ¼ã¯èªè­˜ã•ã‚Œãªã„ã‹ã‚‚知れã¾ã›ã‚“。"
-#: ../src/logging/nm-logging.c:143
+#: ../src/logging/nm-logging.c:152
#, c-format
msgid "Unknown log level '%s'"
msgstr "ä¸æ˜Žãªãƒ­ã‚°ãƒ¬ãƒ™ãƒ« '%s'"
-#: ../src/logging/nm-logging.c:189
+#: ../src/logging/nm-logging.c:198
#, c-format
msgid "Unknown log domain '%s'"
msgstr "ä¸æ˜Žãªãƒ­ã‚°ãƒ‰ãƒ¡ã‚¤ãƒ³ '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:271
-#: ../src/modem-manager/nm-modem-broadband.c:533 ../src/nm-device-bt.c:338
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA 接続 %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "設定ファイルã®å ´æ‰€"
-#: ../src/modem-manager/nm-modem-gsm.c:549
-#: ../src/modem-manager/nm-modem-broadband.c:511 ../src/nm-device-bt.c:334
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "設定ディレクトリã®å ´æ‰€"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "複数ã®ãƒ—ラグインを「,ã€ã§åŒºåˆ‡ã£ãŸä¸€è¦§"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "インターãƒãƒƒãƒˆã®æŽ¥ç¶šæ€§ã‚’確èªã™ã‚‹ãŸã‚ã® http(s) アドレス"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "接続性ãƒã‚§ãƒƒã‚¯ã®é–“éš” (秒å˜ä½)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "期待ã•ã‚Œã¦ã„る応答ã®é–‹å§‹ç‚¹"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "当ãŸã‚Š!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:331
#, c-format
msgid "GSM connection %d"
msgstr "GSM 接続 %d"
-#: ../src/nm-device-bond.c:202
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:335
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA 接続 %d"
+
+#: ../src/devices/nm-device-bond.c:133
#, c-format
msgid "Bond connection %d"
msgstr "ボンド接続 %d"
-#: ../src/nm-device-adsl.c:194
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL 接続 %d"
-#: ../src/nm-device-bridge.c:201
+#: ../src/devices/nm-device-bridge.c:131
#, c-format
msgid "Bridge connection %d"
msgstr "ブリッジ接続 %d"
-#: ../src/nm-device-bt.c:309
+#: ../src/devices/nm-device-bt.c:306
#, c-format
msgid "PAN connection %d"
msgstr "PAN 接続 %d"
-#: ../src/nm-device-bt.c:342
+#: ../src/devices/nm-device-bt.c:339
#, c-format
msgid "DUN connection %d"
msgstr "DUN 接続 %d"
-#: ../src/nm-device-ethernet.c:1320
+#: ../src/devices/nm-device-ethernet.c:1162
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE 接続 %d"
-#: ../src/nm-device-ethernet.c:1320 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1162
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "有線接続 %d"
-#: ../src/nm-device-infiniband.c:299
+#: ../src/devices/nm-device-infiniband.c:265
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand 接続 %d"
-#: ../src/nm-device-olpc-mesh.c:293
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "Mesh %d"
-#: ../src/nm-device-vlan.c:331
+#: ../src/devices/nm-device-team.c:147
+#, c-format
+msgid "Team connection %d"
+msgstr "ãƒãƒ¼ãƒ æŽ¥ç¶š %d"
+
+#: ../src/devices/nm-device-vlan.c:253
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN 接続 %d"
-#: ../src/nm-manager.c:813
+#: ../src/nm-manager.c:878
#, c-format
msgid "VPN connection %d"
msgstr "VPN 接続 %d"
-#: ../src/nm-netlink-monitor.c:149 ../src/nm-netlink-monitor.c:273
-#: ../src/nm-netlink-monitor.c:714
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "ソケット上ã§ãƒ‡ãƒ¼ã‚¿ã‚’å¾…ã£ã¦ã„ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "netlink メッセージã®ãƒ—ロセス中ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ: %s"
-#: ../src/nm-netlink-monitor.c:252
-msgid "error occurred while waiting for data on socket"
-msgstr "ソケット上ã§ãƒ‡ãƒ¼ã‚¿ã‚’å¾…ã£ã¦ã„ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-
-#: ../src/nm-netlink-monitor.c:297
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "リンク状æ³ç›£è¦–用ã®ãƒãƒƒãƒˆãƒªãƒ³ã‚¯ã«æŽ¥ç¶šã§ãã¾ã›ã‚“: %s"
-#: ../src/nm-netlink-monitor.c:308
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "netlink ãƒãƒ³ãƒ‰ãƒ«ä¿¡ä»»æƒ…å ±ã®ä¼é”を有効ã«ã§ãã¾ã›ã‚“: %s"
-#: ../src/nm-netlink-monitor.c:331 ../src/nm-netlink-monitor.c:391
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr "リンクステータス監視用ã®ãƒãƒƒãƒˆãƒªãƒ³ã‚¯ãƒãƒ³ãƒ‰ãƒ«ã‚’割り当ã¦ã§ãã¾ã›ã‚“: %s"
-#: ../src/nm-netlink-monitor.c:416
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "リンク状æ³ç›£è¦–用ã®ãƒãƒƒãƒˆãƒªãƒ³ã‚¯ã®ãƒªãƒ³ã‚¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’割り当ã¦ã§ãã¾ã›ã‚“: %s"
-
-#: ../src/nm-netlink-monitor.c:543
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "netlink グループã¸å‚加ã§ãã¾ã›ã‚“: %s"
-#: ../src/nm-netlink-monitor.c:690 ../src/nm-netlink-monitor.c:703
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "リンクキャッシュã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+#, fuzzy
+#| msgid "NetworkManager status"
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
msgid "System"
msgstr "システム"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3705
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3803
msgid "Bond"
msgstr "ボンド"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3898
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3889
+msgid "Team"
+msgstr "ãƒãƒ¼ãƒ "
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4077
msgid "Bridge"
msgstr "ブリッジ"
-#: ../test/nm-online.c:111
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\r接続中"
-#: ../test/nm-online.c:142
+#: ../test/nm-online.c:104
msgid "Time to wait for a connection, in seconds (without the option, default value is 30)"
msgstr "接続を待機ã™ã‚‹æ™‚間を秒å˜ä½ã§æŒ‡å®šã™ã‚‹ (オプションãªã—ã®å ´åˆã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã¯ 30)"
-#: ../test/nm-online.c:143
-#, fuzzy
-#| msgid "Exit immediately if NetworkManager is not running"
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
msgstr "NetworkManager ãŒèµ·å‹•ã—ã¦ã„ãªã„å ´åˆã¯ç›´ã¡ã«çµ‚了ã™ã‚‹"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "出力を抑制ã™ã‚‹"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr ""
+#: ../test/nm-online.c:124
+msgid "Waits for NetworkManager to finish activating startup network connections."
+msgstr "NetworkManager ã«ã‚ˆã‚Šã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆãŒå®Œäº†ã•ã‚Œã‚‹ã®ã‚’å¾…æ©Ÿã—ã¾ã™ã€‚"
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr "無効ãªã‚ªãƒ—ションã§ã™ã€‚--help を使用ã—ã¦æœ‰åŠ¹ãªã‚ªãƒ—ションã®ä¸€è¦§ã‚’確èªã—ã¦ãã ã•ã„。"
-#~ msgid "invalid IPv4 address '%s'"
-#~ msgstr "無効㪠IPv4 アドレス '%s'"
-
-#~ msgid "invalid prefix '%s'; <1-32> allowed"
-#~ msgstr "無効ãªãƒ—レフィックス '%s'; <1-32> 許å¯"
-
-#~ msgid "invalid gateway '%s'"
-#~ msgstr "無効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ '%s'"
-
-#~ msgid "invalid IPv6 address '%s'"
-#~ msgstr "無効㪠IPv6 アドレス '%s'"
-
-#~ msgid "invalid prefix '%s'; <1-128> allowed"
-#~ msgstr "無効ãªãƒ—レフィックス '%s'; <1-128> 許å¯"
-
-#~ msgid "invalid IPv4 route '%s'"
-#~ msgstr "無効㪠IPv4 ルート '%s'"
-
-#~ msgid "invalid prefix '%s'; <0-32> allowed"
-#~ msgstr "無効ãªãƒ—レフィックス '%s'; <0-32> 許å¯"
-
-#~ msgid "invalid next hop address '%s'"
-#~ msgstr "無効ãªãƒã‚¯ã‚¹ãƒˆãƒ›ãƒƒãƒ—アドレス '%s'"
-
-#~ msgid "invalid metric '%s'"
-#~ msgstr "無効ãªãƒ¡ãƒˆãƒªãƒƒã‚¯ '%s'"
-
-#~ msgid "invalid IPv6 route '%s'"
-#~ msgstr "無効㪠IPv6 ルート '%s'"
-
-#~ msgid "invalid prefix '%s'; <0-128> allowed"
-#~ msgstr "無効ãªãƒ—レフィックス '%s'; <0-128> 許å¯"
-
-#~ msgid "invalid priority map '%s'"
-#~ msgstr "無効ãªå„ªå…ˆåº¦ãƒžãƒƒãƒ— '%s'"
-
-#~ msgid "priority '%s' is not valid (<0-%ld>)"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªå„ªå…ˆåº¦ã§ã¯ã‚ã‚Šã¾ã›ã‚“ (<0-%ld>)"
-
-#~ msgid "Setting name? "
-#~ msgstr "設定åã¯? "
-
-#~ msgid "Property name? "
-#~ msgstr "プロパティåã¯? "
-
-#~ msgid "Enter connection type: "
-#~ msgstr "接続タイプを入力ã—ã¦ãã ã•ã„: "
-
-#~ msgid ""
-#~ "Usage: nmcli connection { COMMAND | help }\n"
-#~ " COMMAND := { show | up | down | delete }\n"
-#~ "\n"
-#~ " show configured [[ id | uuid | path ] <ID>]\n"
-#~ "\n"
-#~ " show active [[ id | uuid | path | apath ] <ID>]\n"
-#~ "\n"
-#~ " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
-#~ "\n"
-#~ " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
-#~ "\n"
-#~ " down [ id | uuid | path | apath ] <ID>\n"
-#~ "\n"
-#~ " add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
-#~ "\n"
-#~ " modify [ id | uuid | path ] <ID> <setting>.<property> <value>\n"
-#~ "\n"
-#~ " edit [ id | uuid | path ] <ID> | [type <new_con_type>] [con-name <new_con_name>]\n"
-#~ "\n"
-#~ " delete [ id | uuid | path ] <ID>\n"
-#~ "\n"
-#~ " reload\n"
-#~ "\n"
-#~ "\n"
-#~ msgstr ""
-#~ "使ã„æ–¹: nmcli connection { コマンド | help }\n"
-#~ " コマンド := { show | up | down | delete }\n"
-#~ "\n"
-#~ " show configured [[ id | uuid | path ] <ID>]\n"
-#~ "\n"
-#~ " show active [[ id | uuid | path | apath ] <ID>]\n"
-#~ "\n"
-#~ " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
-#~ "\n"
-#~ " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
-#~ "\n"
-#~ " down [ id | uuid | path | apath ] <ID>\n"
-#~ "\n"
-#~ " add 共通オプション タイプ固有オプション IP オプション\n"
-#~ "\n"
-#~ " modify [ id | uuid | path ] <ID> <setting>.<property> <value>\n"
-#~ "\n"
-#~ " edit [ id | uuid | path ] <ID> | [type <new_con_type>] [con-name <new_con_name>]\n"
-#~ "\n"
-#~ " delete [ id | uuid | path ] <ID>\n"
-#~ "\n"
-#~ " reload\n"
-#~ "\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Usage: nmcli connection add { OPTIONS | help }\n"
-#~ " OPTIONS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
-#~ "\n"
-#~ " COMMON_OPTIONS:\n"
-#~ " type <type>\n"
-#~ " ifname <interface name> | \"*\"\n"
-#~ " [con-name <connection name>]\n"
-#~ " [autoconnect yes|no]\n"
-#~ "\n"
-#~ " TYPE_SPECIFIC_OPTIONS:\n"
-#~ " ethernet: [mac <MAC address>]\n"
-#~ " [cloned-mac <cloned MAC address>]\n"
-#~ " [mtu <MTU>]\n"
-#~ "\n"
-#~ " wifi: ssid <SSID>\n"
-#~ " [mac <MAC address>]\n"
-#~ " [cloned-mac <cloned MAC address>]\n"
-#~ " [mtu <MTU>]\n"
-#~ "\n"
-#~ " wimax: [mac <MAC address>]\n"
-#~ " [nsp <NSP>]\n"
-#~ "\n"
-#~ " gsm: apn <APN>\n"
-#~ " [user <username>]\n"
-#~ " [password <password>]\n"
-#~ "\n"
-#~ " cdma: [user <username>]\n"
-#~ " [password <password>]\n"
-#~ "\n"
-#~ " infiniband: [mac <MAC address>]\n"
-#~ " [mtu <MTU>]\n"
-#~ " [transport-mode datagram | connected]\n"
-#~ " [parent <ifname>]\n"
-#~ " [p-key <IPoIB P_Key>]\n"
-#~ "\n"
-#~ " bluetooth: [addr <bluetooth address>]\n"
-#~ " [bt-type panu|dun-gsm|dun-cdma]\n"
-#~ "\n"
-#~ " vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
-#~ " [id <VLAN id>]\n"
-#~ " [flags <VLAN flags>]\n"
-#~ " [ingress <ingress priority mapping>]\n"
-#~ " [egress <egress priority mapping>]\n"
-#~ " [mtu <MTU>]\n"
-#~ "\n"
-#~ " bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) | broadcast (3) |\n"
-#~ " 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\n"
-#~ " [miimon <num>]\n"
-#~ " [downdelay <num>]\n"
-#~ " [updelay <num>]\n"
-#~ " [arp-interval <num>]\n"
-#~ " [arp-ip-target <num>]\n"
-#~ "\n"
-#~ " bond-slave: master <master (ifname or connection UUID)>\n"
-#~ "\n"
-#~ " team: [config <json config>]\n"
-#~ "\n"
-#~ " team-slave: master <master (ifname or connection UUID)>\n"
-#~ " [config <json config>]\n"
-#~ "\n"
-#~ " bridge: [stp yes|no>]\n"
-#~ " [priority <num>]\n"
-#~ " [forward-delay <2-30>]\n"
-#~ " [hello-time <1-10>]\n"
-#~ " [max-age <6-40>]\n"
-#~ " [ageing-time <0-1000000>]\n"
-#~ "\n"
-#~ " bridge-slave: master <master (ifname or connection UUID)\n"
-#~ " [priority <0-63>]\n"
-#~ " [path-cost <1-65535>]\n"
-#~ " [hairpin yes|no]\n"
-#~ "\n"
-#~ " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
-#~ " [user <username>]\n"
-#~ "\n"
-#~ " olpc-mesh: ssid <SSID>\n"
-#~ " [channel <1-13>]\n"
-#~ " [dhcp-anycast <MAC address>]\n"
-#~ "\n"
-#~ " IP_OPTIONS:\n"
-#~ " [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
-#~ " [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
-#~ msgstr ""
-#~ "使ã„æ–¹: nmcli connection add { オプション | help }\n"
-#~ " オプション := 共通オプション タイプ固有オプション IP オプション\n"
-#~ "\n"
-#~ " 共通オプション:\n"
-#~ " type <type>\n"
-#~ " ifname <interface name> | \"*\"\n"
-#~ " [con-name <connection name>]\n"
-#~ " [autoconnect yes|no]\n"
-#~ "\n"
-#~ " タイプ固有オプション:\n"
-#~ " ethernet: [mac <MAC address>]\n"
-#~ " [cloned-mac <cloned MAC address>]\n"
-#~ " [mtu <MTU>]\n"
-#~ "\n"
-#~ " wifi: ssid <SSID>\n"
-#~ " [mac <MAC address>]\n"
-#~ " [cloned-mac <cloned MAC address>]\n"
-#~ " [mtu <MTU>]\n"
-#~ "\n"
-#~ " wimax: [mac <MAC address>]\n"
-#~ " [nsp <NSP>]\n"
-#~ "\n"
-#~ " gsm: apn <APN>\n"
-#~ " [user <username>]\n"
-#~ " [password <password>]\n"
-#~ "\n"
-#~ " cdma: [user <username>]\n"
-#~ " [password <password>]\n"
-#~ "\n"
-#~ " infiniband: [mac <MAC address>]\n"
-#~ " [mtu <MTU>]\n"
-#~ " [transport-mode datagram | connected]\n"
-#~ " [parent <ifname>]\n"
-#~ " [p-key <IPoIB P_Key>]\n"
-#~ "\n"
-#~ " bluetooth: [addr <bluetooth address>]\n"
-#~ " [bt-type panu|dun-gsm|dun-cdma]\n"
-#~ "\n"
-#~ " vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
-#~ " [id <VLAN id>]\n"
-#~ " [flags <VLAN flags>]\n"
-#~ " [ingress <ingress priority mapping>]\n"
-#~ " [egress <egress priority mapping>]\n"
-#~ " [mtu <MTU>]\n"
-#~ "\n"
-#~ " bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) | broadcast (3) |\n"
-#~ " 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\n"
-#~ " [miimon <num>]\n"
-#~ " [downdelay <num>]\n"
-#~ " [updelay <num>]\n"
-#~ " [arp-interval <num>]\n"
-#~ " [arp-ip-target <num>]\n"
-#~ "\n"
-#~ " bond-slave: master <master (ifname or connection UUID)>\n"
-#~ "\n"
-#~ " team: [config <json config>]\n"
-#~ "\n"
-#~ " team-slave: master <master (ifname or connection UUID)>\n"
-#~ " [config <json config>]\n"
-#~ "\n"
-#~ " bridge: [stp yes|no>]\n"
-#~ " [priority <num>]\n"
-#~ " [forward-delay <2-30>]\n"
-#~ " [hello-time <1-10>]\n"
-#~ " [max-age <6-40>]\n"
-#~ " [ageing-time <0-1000000>]\n"
-#~ "\n"
-#~ " bridge-slave: master <master (ifname or connection UUID)\n"
-#~ " [priority <0-63>]\n"
-#~ " [path-cost <1-65535>]\n"
-#~ " [hairpin yes|no]\n"
-#~ "\n"
-#~ " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
-#~ " [user <username>]\n"
-#~ "\n"
-#~ " olpc-mesh: ssid <SSID>\n"
-#~ " [channel <1-13>]\n"
-#~ " [dhcp-anycast <MAC address>]\n"
-#~ "\n"
-#~ " IP オプション:\n"
-#~ " [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
-#~ " [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
-
-#~ msgid "Error: 'list configured': %s"
-#~ msgstr "エラー: 'list configured': %s"
-
-#~ msgid "Error: 'list configured': %s; allowed fields: %s"
-#~ msgstr "エラー: 'list configured': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#~ msgid "List of configured connections"
-#~ msgstr "設定ã•ã‚Œã¦ã„る接続ã®ä¸€è¦§"
-
-#~ msgid "Error: 'show configured': %s"
-#~ msgstr "エラー: 'show configured': %s"
-
-#~ msgid "Error: 'show configured': %s; allowed fields: %s"
-#~ msgstr "エラー: 'show configured': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#~ msgid "Error: 'list active': %s"
-#~ msgstr "エラー: 'list active': %s"
-
-#~ msgid "Error: 'list active': %s; allowed fields: %s"
-#~ msgstr "エラー: 'list active': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#~ msgid "List of active connections"
-#~ msgstr "アクティブãªæŽ¥ç¶šã®ä¸€è¦§"
-
-#~ msgid "Error: 'show active': %s"
-#~ msgstr "エラー: 'show active': %s"
-
-#~ msgid "Error: 'show active': %s; allowed fields: %s"
-#~ msgstr "エラー: 'show active': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#~ msgid "Error: Device '%s' is waiting for slaves before proceeding with activation."
-#~ msgstr "エラー: デãƒã‚¤ã‚¹ '%s' ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã®ãƒ—ロセスを開始ã™ã‚‹å‰ã«ã‚¹ãƒ¬ãƒ¼ãƒ–ã‚’å¾…æ©Ÿã—ã¦ã„ã¾ã™"
-
-#~ msgid "Connection (name, UUID, or path): "
-#~ msgstr "接続 (åå‰ã€UUID ã¾ãŸã¯ãƒ‘ス): "
-
-#~ msgid "Error: No connection specified."
-#~ msgstr "エラー: 接続ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#~ msgid "preparing"
-#~ msgstr "準備中"
-
-#~ msgid "Error: '%s': '%s' is not a valid %s MAC address."
-#~ msgstr "エラー: ''%s': '%s' ã¯æœ‰åŠ¹ãª %s MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "InfiniBand"
-#~ msgstr "InfiniBand"
-
-#~ msgid "Ethernet"
-#~ msgstr "Ethernet"
-
-#~ msgid "Error: 'mtu': '%s' is not a valid MTU."
-#~ msgstr "エラー: 'mtu': '%s' ã¯æœ‰åŠ¹ãª MTU ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: 'parent': '%s' is not a valid interface name."
-#~ msgstr "エラー: 'parent': '%s' ã¯æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
-#~ msgstr "エラー: 'p-key': '%s' ã¯æœ‰åŠ¹ãª InfiniBand P_KEY ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, connected]."
-#~ msgstr "エラー: 'mode': '%s' ã¯æœ‰åŠ¹ãª InfiniBand 転é€ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“ [datagram, connected]。"
-
-#~ msgid "Error: 'flags': '%s' is not valid; use <0-7>."
-#~ msgstr "エラー: 'flags': '%s' ã¯ç„¡åŠ¹ã§ã™; <0-7> を使用ã—ã¦ãã ã•ã„。"
-
-#~ msgid "Error: '%s': '%s' is not valid; %s "
-#~ msgstr "エラー: '%s': '%s' ã¯ç„¡åŠ¹ã§ã™; %s "
-
-#, fuzzy
-#~| msgid "Error: '%s': '%s' is not valid; use <%d-%d>."
-#~ msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
-#~ msgstr "エラー: '%s': '%s' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„。"
-
-#~ msgid "ethernet"
-#~ msgstr "Ethernet"
-
-#~ msgid "Wi-Fi"
-#~ msgstr "Wi-Fi"
-
-#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
-#~ msgstr "'%s ' 接続タイプã«ã¯ 3 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Do you want to provide them? (yes/no) [yes] "
-#~ msgstr "指定ã—ã¾ã™ã‹? (yes/no) [yes] "
-
-#~ msgid "MTU [auto]: "
-#~ msgstr "MTU [auto]: "
-
-#~ msgid "MAC [none]: "
-#~ msgstr "MAC [none]: "
-
-#~ msgid "Cloned MAC [none]: "
-#~ msgstr "クローン㮠MAC [none]: "
-
-#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
-#~ msgstr "'InfiniBand' 接続タイプã«ã¯ 5 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Transport mode (datagram or connected) [datagram]: "
-#~ msgstr "転é€ãƒ¢ãƒ¼ãƒ‰ (datagram ã¾ãŸã¯ connected) [datagram]: "
-
-#~ msgid "Parent interface [none]: "
-#~ msgstr "親インターフェース [none]: "
-
-#~ msgid "P_KEY [none]: "
-#~ msgstr "P_KEY [none]: "
-
-#~ msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
-#~ msgstr "エラー: 'parent' を指定ã™ã‚‹å ´åˆã€'p-key' ã¯å¿…é ˆã§ã™ã€‚\n"
-
-#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
-#~ msgstr "'WiMax' 接続タイプã«ã¯ 1 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Do you want to provide it? (yes/no) [yes] "
-#~ msgstr "指定ã—ã¾ã™ã‹? (yes/no) [yes] "
-
-#~ msgid "There are 2 optional arguments for 'mobile broadband' connection type.\n"
-#~ msgstr "'モãƒã‚¤ãƒ«ãƒ–ロードãƒãƒ³ãƒ‰' 接続タイプã«ã¯ 2 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Username [none]: "
-#~ msgstr "ユーザーå [none]: "
-
-#~ msgid "Password [none]: "
-#~ msgstr "パスワード [none]: "
-
-#~ msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
-#~ msgstr "'bluetooth' 接続タイプã«ã¯ 1 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
-#~ msgstr "Bluetooth タイプ (panuã€dun-gsmã€dun-cdma) [panu]: "
-
-#~ msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
-#~ msgstr "エラー: ''bt-type': '%s' ã¯æœ‰åŠ¹ãª bluetooth タイプã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-
-#~ msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
-#~ msgstr "'VLAN' 接続タイプã«ã¯ 4 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "VLAN flags (<0-7>) [none]: "
-#~ msgstr "VLAN フラグ (<0-7>) [none]: "
-
-#~ msgid "Ingress priority maps [none]: "
-#~ msgstr "イングレス優先度マップ [none]: "
-
-#~ msgid "Egress priority maps [none]: "
-#~ msgstr "イーグレス優先度マップ [none]: "
-
-#~ msgid "There are 6 optional arguments for 'bond' connection type.\n"
-#~ msgstr "'ボンド' 接続タイプã«ã¯ 6 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Bonding mode [balance-rr]: "
-#~ msgstr "ボンドモード [balance-rr]: "
-
-#~ msgid "Bonding miimon [100]): "
-#~ msgstr "ボンド miimon [100]): "
-
-#, fuzzy
-#~| msgid "Error: 'miimon': '%s' is not a valid number <0-%d>.\n"
-#~ msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
-#~ msgstr "エラー: 'miimon': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
-
-#~ msgid "Bonding downdelay [0]): "
-#~ msgstr "ボンド downdelay [0]): "
-
-#, fuzzy
-#~| msgid "Error: 'downdelay': '%s' is not a valid number <0-%d>.\n"
-#~ msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
-#~ msgstr "エラー: 'downdelay': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
-
-#~ msgid "Bonding updelay [0]): "
-#~ msgstr "ボンド updelay [0]): "
-
-#, fuzzy
-#~| msgid "Error: 'updelay': '%s' is not a valid number <0-%d>.\n"
-#~ msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
-#~ msgstr "Error: 'updelay': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
-
-#~ msgid "Bonding arp-interval [0]): "
-#~ msgstr "ボンド arp-interval [0]): "
-
-#, fuzzy
-#~| msgid "Error: 'arp-interval': '%s' is not a valid number <0-%d>.\n"
-#~ msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
-#~ msgstr "Error: 'arp-interval': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
-
-#~ msgid "Bonding arp-ip-target [none]): "
-#~ msgstr "ボンド arp-ip-target [none]): "
-
-#~ msgid "There are 6 optional arguments for 'bridge' connection type.\n"
-#~ msgstr "'ブリッジ' 接続タイプã«ã¯ 6 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Enable STP (yes/no) [yes]: "
-#~ msgstr "STP ã®æœ‰åŠ¹åŒ– (yes/no) [yes]: "
-
-#~ msgid "Error: 'stp': '%s'.\n"
-#~ msgstr "エラー:'stp': %s。\n"
-
-#~ msgid "STP priority [128]): "
-#~ msgstr "STP 優先度 [128]): "
-
-#~ msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
-#~ msgstr "エラー: '優先度': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
-
-#~ msgid "Forward delay [15]): "
-#~ msgstr "フォワードé…延 [15]): "
-
-#~ msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
-#~ msgstr "エラー: 'フォワードé…延': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <2-30>。\n"
-
-#~ msgid "Hello time [2]): "
-#~ msgstr "Hello タイム [2]): "
-
-#~ msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
-#~ msgstr "エラー: 'hello タイム': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <1-10>。\n"
-
-#~ msgid "Max age [20]): "
-#~ msgstr "最大エイジ [20]): "
-
-#~ msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
-#~ msgstr "エラー: '最大エイジ': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <6-40>。\n"
-
-#~ msgid "MAC address ageing time [300]): "
-#~ msgstr "MAC アドレスエージングタイム [300]): "
-
-#~ msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
-#~ msgstr "エラー: 'エージングタイム': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-1000000>。\n"
-
-#~ msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
-#~ msgstr "'ブリッジスレーブ' 接続タイプã«ã¯ 3 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Bridge port priority [32]): "
-#~ msgstr "ブリッジãƒãƒ¼ãƒˆå„ªå…ˆåº¦ [32]): "
-
-#~ msgid "Bridge port STP path cost [100]): "
-#~ msgstr "ブリッジãƒãƒ¼ãƒˆ STP パスコスト [100]): "
-
-#~ msgid "Hairpin (yes/no) [yes]: "
-#~ msgstr "ヘアピン (yes/no) [yes]: "
-
-#~ msgid "Error: 'hairpin': '%s'.\n"
-#~ msgstr "エラー: 'ヘアピン': '%s'。\n"
-
-#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
-#~ msgstr "'VPN' 接続タイプã«ã¯ 1 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
-#~ msgstr "’OLPC メッシュ' 接続タイプã«ã¯ 2 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "OLPC Mesh channel [1]): "
-#~ msgstr "OLPC メッシュãƒãƒ£ãƒ³ãƒãƒ« [1]): "
-
-#~ msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
-#~ msgstr "エラー: 'channel': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <1-13>。\n"
-
-#~ msgid "DHCP anycast MAC address [none]: "
-#~ msgstr "DHCP anycast MAC アドレス [none]: "
-
-#~ msgid "Do you want to add IP addresses? (yes/no) [yes] "
-#~ msgstr "IP アドレスを追加ã—ã¾ã™ã‹? (yes/no) [yes] "
-
-#~ msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
-#~ msgstr "IPv4 アドレス (IP[/plen] [gateway]) [none]: "
-
-#~ msgid "Error: "
-#~ msgstr "エラー: "
-
-#~ msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
-#~ msgstr "IPv6 address (IP[/plen] [gateway]) [none]: "
-
-#~ msgid "Error: 'parent': not valid without 'p-key'."
-#~ msgstr "エラー: '親': 'p-key' ãŒãªã„ã¨ä½¿ç”¨ã§ãã¾ã›ã‚“。"
-
-#~ msgid "SSID: "
-#~ msgstr "SSID: "
-
-#~ msgid "Error: 'ssid' is required."
-#~ msgstr "エラー: 'ssid' ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "WiMAX NSP name: "
-#~ msgstr "WiMAX NSP å: "
-
-#~ msgid "Error: 'nsp' is required."
-#~ msgstr "エラー: 'nsp' ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "APN: "
-#~ msgstr "APN: "
-
-#~ msgid "Error: 'apn' is required."
-#~ msgstr "エラー: 'apn' ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "Bluetooth device address: "
-#~ msgstr "Bluetooth デãƒã‚¤ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹: "
-
-#~ msgid "Error: 'addr' is required."
-#~ msgstr "エラー: 'addr' ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
-#~ msgstr "エラー: 'bt-type': '%s' ã¯ç„¡åŠ¹ã§ã™; [%s, %s (%s), %s] を使用ã—ã¦ãã ã•ã„。"
-
-#~ msgid "VLAN parent device or connection UUID: "
-#~ msgstr "VLAN 親デãƒã‚¤ã‚¹ã¾ãŸã¯æŽ¥ç¶š UUID: "
-
-#~ msgid "Error: 'dev' is required."
-#~ msgstr "エラー: 'dev' ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "VLAN ID <0-4095>: "
-#~ msgstr "VLAN ID <0-4095>: "
-
-#~ msgid "Error: 'id' is required."
-#~ msgstr "エラー: 'id' ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "Error: 'id': '%s' is not valid; use <0-4095>."
-#~ msgstr "エラー: 'id': '%s' ã¯ç„¡åŠ¹ã§ã™; <0-4095> を使用ã—ã¦ãã ã•ã„。"
-
-#~ msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
-#~ msgstr "エラー: 'dev': '%s' 㯠UUIDã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã€MAC ã®ã„ãšã‚Œã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: 'mode': %s."
-#~ msgstr "エラー: 'モード': %s。"
-
-#~ msgid "Bond master: "
-#~ msgstr "ボンドマスター: "
-
-#~ msgid "Error: 'master' is required."
-#~ msgstr "エラー: 'マスター' ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "Warning: 'type' is currently ignored. We only support ethernet slaves for now.\n"
-#~ msgstr "警告: ç¾åœ¨ã€'タイプ' ã¯ç„¡è¦–ã•ã‚Œã¦ã„ã¾ã™ã€‚対応ã—ã¦ã„ã‚‹ã®ã¯ Ethernet スレーブã®ã¿ã«ãªã‚Šã¾ã™ã€‚\n"
-
-#~ msgid "Team master: "
-#~ msgstr "ãƒãƒ¼ãƒ ãƒžã‚¹ã‚¿ãƒ¼: "
-
-#~ msgid "Bridge master: "
-#~ msgstr "ブリッジマスター: "
-
-#~ msgid "Error: 'master': '%s' is not valid UUID nor interface."
-#~ msgstr "エラー: 'マスター': '%s' ã¯æœ‰åŠ¹ãª UUID ã§ã‚‚インターフェースã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
+#~ msgid "Caught signal %d, shutting down..."
+#~ msgstr "シグナル %d ãŒå‡ºã¾ã—ãŸã€ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã—ã¾ã™..."
-#~ msgid "Error: 'hairpin': %s."
-#~ msgstr "エラー: 'ヘアピン': %s。"
-
-#~ msgid "VPN type: "
-#~ msgstr "VPN タイプ: "
-
-#~ msgid "Error: 'vpn-type' is required."
-#~ msgstr "エラー: ’vpn タイプ’ ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "Error: 'vpn-type': %s."
-#~ msgstr "エラー: 'vpn タイプ': %s。"
-
-#~ msgid "Error: 'channel': '%s' is not valid; use <1-13>."
-#~ msgstr "エラー: 'ãƒãƒ£ãƒ³ãƒãƒ«': '%s' ã¯ç„¡åŠ¹ã§ã™; <1-13> を使用ã—ã¦ãã ã•ã„。"
-
-#~ msgid "Error: '%s' is a not valid connection type."
-#~ msgstr "エラー: '%s' ã¯ç„¡åŠ¹ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—ã§ã™ã€‚"
-
-#~ msgid "Error: Failed to add '%s' connection: (%d) %s"
-#~ msgstr "エラー: '%s' 接続ã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
-
-#~ msgid "Connection '%s' (%s) successfully added.\n"
-#~ msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«è¿½åŠ ã•ã‚Œã¾ã—ãŸã€‚\n"
-
-#~ msgid "Connection type: "
-#~ msgstr "接続タイプ: "
-
-#~ msgid "Error: 'type' argument is required."
-#~ msgstr "エラー: 'タイプ' 引数ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "Error: invalid connection type; %s."
-#~ msgstr "エラー: 無効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—; %s。"
-
-#~ msgid "Error: 'autoconnect': %s."
-#~ msgstr "エラー: '自動接続': %s。"
-
-#~ msgid "Interface name [*]: "
-#~ msgstr "インターフェースå [*]: "
-
-#~ msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
-#~ msgstr "エラー: 'ifname': '%s' ã¯æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã§ã‚‚ '*' ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "['%s' setting values]\n"
-#~ msgstr "['%s' 設定値]\n"
-
-#~ msgid ""
-#~ "---[ Main menu ]---\n"
-#~ "goto [<setting> | <prop>] :: go to a setting or property\n"
-#~ "remove <setting>[.<prop>] | <prop> :: remove setting or reset property value\n"
-#~ "set [<setting>.<prop> <value>] :: set property value\n"
-#~ "describe [<setting>.<prop>] :: describe property\n"
-#~ "print [all] :: print the connection\n"
-#~ "verify [all] :: verify the connection\n"
-#~ "save :: save the connection\n"
-#~ "back :: go one level up (back)\n"
-#~ "help/? [<command>] :: print this help\n"
-#~ "nmcli <conf-option> <value> :: nmcli configuration\n"
-#~ "quit :: exit nmcli\n"
-#~ msgstr ""
-#~ "---[ メインメニュー ]---\n"
-#~ "goto [<setting> | <prop>] :: 設定ã¾ãŸã¯ãƒ—ロパティã¸ç§»å‹•\n"
-#~ "remove <setting>[.<prop>] | <prop> :: 設定ã®å‰Šé™¤ã¾ãŸã¯ãƒ—ロパティ値ã®ãƒªã‚»ãƒƒãƒˆ\n"
-#~ "set [<setting>.<prop> <value>] :: プロパティ値ã®è¨­å®š\n"
-#~ "describe [<setting>.<prop>] :: プロパティã®è©³ç´°è¡¨ç¤º\n"
-#~ "print [all] :: 接続ã®è¡¨ç¤º\n"
-#~ "verify [all] :: 接続ã®ç¢ºèª\n"
-#~ "save :: 接続ã®ä¿å­˜\n"
-#~ "back :: 一ã¤ä¸Šã®ãƒ¬ãƒ™ãƒ«ã«ç§»å‹• (戻る)\n"
-#~ "help/? [<command>] :: ã“ã®ãƒ˜ãƒ«ãƒ—を表示\n"
-#~ "nmcli <conf-option> <value> :: nmcli 設定\n"
-#~ "quit :: nmcli ã®çµ‚了\n"
-
-#~ msgid ""
-#~ "goto <setting>[.<prop>] | <prop> :: enter setting/property for editation\n"
-#~ "\n"
-#~ "This command enters into a setting or property for editing it.\n"
-#~ "\n"
-#~ "Examples: nmcli> goto connection\n"
-#~ " nmcli connection> goto secondaries\n"
-#~ " nmcli> goto ipv4.addresses\n"
-#~ msgstr ""
-#~ "goto <setting>[.<prop>] | <prop> :: 設定ï¼ãƒ—ロパティを入力ã—ã¦å¤‰æ›´\n"
-#~ "\n"
-#~ "設定やプロパティã®å¤‰æ›´ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: nmcli> goto connection\n"
-#~ " nmcli connection> goto secondaries\n"
-#~ " nmcli> goto ipv4.addresses\n"
-
-#~ msgid ""
-#~ "remove <setting>[.<prop>] :: remove setting or reset property value\n"
-#~ "\n"
-#~ "This command removes an entire setting from the connection, or if a property\n"
-#~ "is given, resets that property to the default value.\n"
-#~ "\n"
-#~ "Examples: nmcli> remove wifi-sec\n"
-#~ " nmcli> remove eth.mtu\n"
-#~ msgstr ""
-#~ "remove <setting>[.<prop>] :: 設定ã®å‰Šé™¤ã¾ãŸã¯ãƒ—ロパティ値ã®ãƒªã‚»ãƒƒãƒˆ\n"
-#~ "\n"
-#~ "接続ã‹ã‚‰å…¨è¨­å®šã‚’削除ã—ã¾ã™ã€‚ã¾ãŸã¯ã€ãƒ—ロパティを指定ã—ã¦ã„ã‚‹å ´åˆã«ã¯\n"
-#~ "ãã®ãƒ—ロパティをデフォルト値ã¨ã—ã¦ãƒªã‚»ãƒƒãƒˆã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: nmcli> remove wifi-sec\n"
-#~ " nmcli> remove eth.mtu\n"
-
-#~ msgid ""
-#~ "set [<setting>.<prop> <value>] :: set property value\n"
-#~ "\n"
-#~ "This command sets property value.\n"
-#~ "\n"
-#~ "Example: nmcli> s con.id My connection\n"
-#~ msgstr ""
-#~ "set [<setting>.<prop> <value>] :: プロパティ値ã®è¨­å®š\n"
-#~ "\n"
-#~ "プロパティ値を設定ã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: nmcli> s con.id My connection\n"
-
-#~ msgid ""
-#~ "describe [<setting>.<prop>] :: describe property\n"
-#~ "\n"
-#~ "Shows property description. You can consult nm-settings(5) manual page to see all NM settings and properties.\n"
-#~ msgstr ""
-#~ "set [<setting>.<prop> <value>] :: プロパティ値ã®è¨­å®š\n"
-#~ "\n"
-#~ "プロパティ値を設定ã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: nmcli> s con.id My connection\n"
-
-#~ msgid ""
-#~ "print [all] :: print setting or connection values\n"
-#~ "\n"
-#~ "Shows current property or the whole connection.\n"
-#~ "\n"
-#~ "Example: nmcli ipv4> print all\n"
-#~ msgstr ""
-#~ "print [all] :: 設定ã¾ãŸã¯æŽ¥ç¶šå€¤ã®è¡¨ç¤º\n"
-#~ "\n"
-#~ "ç¾åœ¨ã®ãƒ—ロパティã¾ãŸã¯æŽ¥ç¶šå…¨ä½“を表示ã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: nmcli ipv4> print all\n"
-
-#~ msgid ""
-#~ "verify [all] :: verify setting or connection validity\n"
-#~ "\n"
-#~ "Verifies whether the setting or connection is valid and can be saved later. It indicates invalid values on error.\n"
-#~ "\n"
-#~ "Examples: nmcli> verify\n"
-#~ " nmcli bond> verify\n"
-#~ msgstr ""
-#~ "verify [all] :: 設定ã¾ãŸã¯æŽ¥ç¶šã®æœ‰åŠ¹æ€§ã®ç¢ºèª\n"
-#~ "\n"
-#~ "設定ã¾ãŸã¯æŽ¥ç¶šãŒæœ‰åŠ¹ã‹ã©ã†ã‹ã‚’確èªã—ã€ã‚ã¨ã§ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚エラーã®å ´åˆã«ã¯ç„¡åŠ¹ãªå€¤ã‚’表示ã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: nmcli> verify\n"
-#~ " nmcli bond> verify\n"
-
-#~ msgid ""
-#~ "save :: save the connection\n"
-#~ "\n"
-#~ "Sends the connection to NetworkManager that will save it.\n"
-#~ msgstr ""
-#~ "save :: 接続ã®ä¿å­˜\n"
-#~ "\n"
-#~ "接続をä¿å­˜ã™ã‚‹ NetworkManager ã«ã“ã®æŽ¥ç¶šã‚’é€ä¿¡ã—ã¾ã™ã€‚\n"
-
-#~ msgid ""
-#~ "back :: go to upper menu level\n"
-#~ "\n"
-#~ msgstr ""
-#~ "back :: 一ã¤ä¸Šã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ¬ãƒ™ãƒ«ã«ç§»å‹•\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "help/? [<command>] :: help for the nmcli commands\n"
-#~ "\n"
-#~ msgstr ""
-#~ "help/? [<command>] :: nmcli コマンドã®ãƒ˜ãƒ«ãƒ—\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "nmcli [<conf-option> <value>] :: nmcli configuration\n"
-#~ "\n"
-#~ "Configures nmcli. The following options are available:\n"
-#~ "status-line yes | no [default: no]\n"
-#~ "save-confirmation yes | no [default: yes]\n"
-#~ "prompt-color <0-8> [default: 0]\n"
-#~ " 0 = normal\n"
-#~ " 1 = black\n"
-#~ " 2 = red\n"
-#~ " 3 = green\n"
-#~ " 4 = yellow\n"
-#~ " 5 = blue\n"
-#~ " 6 = magenta\n"
-#~ " 7 = cyan\n"
-#~ " 8 = white\n"
-#~ "\n"
-#~ "Examples: nmcli> nmcli status-line yes\n"
-#~ " nmcli> nmcli save-confirmation no\n"
-#~ " nmcli> nmcli prompt-color 3\n"
-#~ msgstr ""
-#~ "nmcli [<conf-option> <value>] :: nmcli 設定\n"
-#~ "\n"
-#~ "nmcli ã®è¨­å®šã‚’è¡Œãªã„ã¾ã™ã€‚次ã®ã‚ªãƒ—ションãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚\n"
-#~ "status-line yes | no [デフォルト: no]\n"
-#~ "save-confirmation yes | no [デフォルト: yes]\n"
-#~ "prompt-color <0-8> [デフォルト: 0]\n"
-#~ " 0 = normal\n"
-#~ " 1 = black\n"
-#~ " 2 = red\n"
-#~ " 3 = green\n"
-#~ " 4 = yellow\n"
-#~ " 5 = blue\n"
-#~ " 6 = magenta\n"
-#~ " 7 = cyan\n"
-#~ " 8 = white\n"
-#~ "\n"
-#~ "例: nmcli> nmcli status-line yes\n"
-#~ " nmcli> nmcli save-confirmation no\n"
-#~ " nmcli> nmcli prompt-color 3\n"
-
-#~ msgid ""
-#~ "quit :: exit nmcli\n"
-#~ "\n"
-#~ "This command exits nmcli. When the connection being edited is not saved, the user is asked to confirm the action.\n"
-#~ msgstr ""
-#~ "quit :: nmcli ã®çµ‚了\n"
-#~ "\n"
-#~ "nmcli を終了ã—ã¾ã™ã€‚変更ã—ãŸæŽ¥ç¶šã®ä¿å­˜ã‚’è¡Œãªã£ã¦ã„ãªã„å ´åˆã€ã“ã®å‹•ä½œã®ç¢ºèªãŒæ±‚ã‚られã¾ã™ã€‚\n"
-
-#~ msgid "Unknown command: '%s'\n"
-#~ msgstr "ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰: '%s'\n"
-
-#~ msgid ""
-#~ "---[ Property menu ]---\n"
-#~ "set [<value>] :: set new value\n"
-#~ "add [<value>] :: add new option to the property\n"
-#~ "change :: change current value\n"
-#~ "remove [<index> | <option>] :: delete the value\n"
-#~ "describe :: describe property\n"
-#~ "print [setting | connection] :: print property (setting/connection) value(s)\n"
-#~ "back :: go to upper level\n"
-#~ "help/? [<command>] :: print this help or command description\n"
-#~ "quit :: exit nmcli\n"
-#~ msgstr ""
-#~ "---[ プロパティメニュー]---\n"
-#~ "set [<value>] :: æ–°ã—ã„値ã®è¨­å®š\n"
-#~ "add [<value>] :: プロパティã«æ–°è¦ã‚ªãƒ—ションを追加\n"
-#~ "change :: ç¾åœ¨ã®å€¤ã‚’変更\n"
-#~ "remove [<index> | <option>] :: 値ã®å‰Šé™¤\n"
-#~ "describe :: プロパティã®è©³ç´°è¡¨ç¤º\n"
-#~ "print [setting | connection] :: プロパティ値 (設定/接続) ã®è¡¨ç¤º\n"
-#~ "back :: 上ã®ãƒ¬ãƒ™ãƒ«ã«ç§»å‹•\n"
-#~ "help/? [<command>] :: ã“ã®ãƒ˜ãƒ«ãƒ—ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ã®è©³ç´°ã‚’表示\n"
-#~ "quit :: nmcli ã®çµ‚了\n"
-
-#~ msgid ""
-#~ "set [<value>] :: set new value\n"
-#~ "\n"
-#~ "This command sets provided <value> to this property\n"
-#~ msgstr ""
-#~ "set [<value>] :: æ–°ã—ã„値ã®è¨­å®š\n"
-#~ "\n"
-#~ "ã“ã®ãƒ—ロパティã«æŒ‡å®šã—㟠<value> を設定ã—ã¾ã™ã€‚\n"
-
-#~ msgid ""
-#~ "add [<value>] :: add new option to the property\n"
-#~ "\n"
-#~ "This command add provided <value> to this property, if the property is of a container type. For single-valued properties it replaces the value (same as 'set').\n"
-#~ msgstr ""
-#~ "add [<value>] :: プロパティã«æ–°è¦ã‚ªãƒ—ションを追加\n"
-#~ "\n"
-#~ "ã“ã®ãƒ—ロパティã®ã‚¿ã‚¤ãƒ—ãŒã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã®å ´åˆã€æŒ‡å®šã—㟠<value> を追加ã—ã¾ã™ã€‚å˜ä¸€å€¤ã®ãƒ—ロパティã®å ´åˆã¯ãã®å€¤ãŒç½®æ›ã•ã‚Œã¾ã™ ('set' ã¨åŒã˜)。\n"
-
-#~ msgid ""
-#~ "change :: change current value\n"
-#~ "\n"
-#~ "Displays current value and allows editing it.\n"
-#~ msgstr ""
-#~ "change :: ç¾åœ¨ã®å€¤ã‚’変更\n"
-#~ "\n"
-#~ "ç¾åœ¨ã®å€¤ã‚’表示ã—ã€ãã®å€¤ã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
-
-#~ msgid ""
-#~ "remove [<index>|<option>] :: delete the value\n"
-#~ "\n"
-#~ "Removes the property value (sets it to default).\n"
-#~ msgstr ""
-#~ "remove [<index>|<option>] :: 値ã®å‰Šé™¤\n"
-#~ "\n"
-#~ "プロパティ値を削除ã—ã¾ã™ (プロパティ値をデフォルトã«æˆ»ã™)。\n"
-
-#~ msgid ""
-#~ "describe :: describe property\n"
-#~ "\n"
-#~ "Shows property description. You can consult nm-settings(5) manual page to see all NM settings and properties.\n"
-#~ msgstr ""
-#~ "describe :: プロパティã®è©³ç´°è¡¨ç¤º\n"
-#~ "\n"
-#~ "プロパティã®è©³ç´°ã‚’表示ã—ã¾ã™ã€‚NM 設定ã¨ãƒ—ロパティã®å…¨è©³ç´°ã¯ nm-settings(5) man ページをå‚ç…§ã—ã¦ãã ã•ã„。\n"
-
-#~ msgid ""
-#~ "print [property|setting|connection] :: print property (setting, connection) value(s)\n"
-#~ "\n"
-#~ "Shows property value. Providing an argument you can also display values for the whole setting or connection.\n"
-#~ msgstr ""
-#~ "print [property|setting|connection] :: プロパティ値ã®è¡¨ç¤º (設定ã€æŽ¥ç¶š)\n"
-#~ "\n"
-#~ "プロパティ値を表示ã—ã¾ã™ã€‚引数を指定ã™ã‚‹ã¨ã€è¨­å®šã¾ãŸã¯æŽ¥ç¶šå…¨ä½“ã®å€¤ã‚’表示ã•ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚\n"
-
-#~ msgid ""
-#~ "help/? [<command>] :: help for nmcli commands\n"
-#~ "\n"
-#~ msgstr ""
-#~ "help/? [<command>] :: nmcli コマンドã®ãƒ˜ãƒ«ãƒ—\n"
-#~ "\n"
-
-#~ msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
-#~ msgstr "エラー: 設定 '%s' ã¯å¿…é ˆã®ãŸã‚削除ã§ãã¾ã›ã‚“。\n"
-
-#~ msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
-#~ msgstr "[ 接続タイプ: %s | name: %s | UUID: %s | dirty: %s ]\n"
-
-#~ msgid "Enter '%s' value: "
-#~ msgstr "'%s' 値を入力ã—ã¦ãã ã•ã„: "
-
-#~ msgid "Error: failed to set '%s' property: %s\n"
-#~ msgstr "エラー: '%s' プロパティã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#~ msgid "Edit '%s' value: "
-#~ msgstr "'%s' 値ã®ç·¨é›†: "
-
-#~ msgid "Error: %s\n"
-#~ msgstr "エラー: %s\n"
-
-#~ msgid "Error: failed to remove value of '%s': %s\n"
-#~ msgstr "エラー: '%s' ã®å€¤ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#~ msgid "Unknown command argument: '%s'\n"
-#~ msgstr "ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰å¼•æ•°: '%s'\n"
-
-#~ msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
-#~ msgstr "ã“ã®æŽ¥ç¶šã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“。本当ã«çµ‚了ã—ã¦ã‚ˆã„ã§ã™ã‹? [y/n]\n"
-
-#~ msgid "Available settings: %s\n"
-#~ msgstr "使用å¯èƒ½ãªè¨­å®š: %s\n"
-
-#~ msgid "Error: invalid setting name; %s\n"
-#~ msgstr "エラー: 無効ãªè¨­å®šå; %s\n"
-
-#~ msgid "Available properties: %s\n"
-#~ msgstr "使用å¯èƒ½ãªãƒ—ロパティ: %s\n"
-
-#~ msgid "Error: property %s\n"
-#~ msgstr "エラー: プロパティ %s\n"
-
-#~ msgid ""
-#~ "Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.\n"
-#~ "Do you still want to save? [yes] "
-#~ msgstr ""
-#~ "'autoconnect=yes' ã§ã“ã®æŽ¥ç¶šã‚’ä¿å­˜ã—ã¦ã„ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šç›´ã¡ã«æŽ¥ç¶šãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚\n"
-#~ "本当ã«ä¿å­˜ã—ã¾ã™ã‹? [yes] "
-
-#~ msgid "You may edit the following settings: %s\n"
-#~ msgstr "次ã®è¨­å®šã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™: %s\n"
-
-#~ msgid "Allowed values for '%s' property: %s\n"
-#~ msgstr "'%s' プロパティã«å¯¾ã—ã¦è¨±å¯ã•ã‚Œã¦ã„る値: %s\n"
-
-#~ msgid "Error: no setting selected; valid are [%s]\n"
-#~ msgstr "エラー: 設定ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“; 有効ãªè¨­å®šã¯ [%s] ã«ãªã‚Šã¾ã™\n"
-
-#~ msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
-#~ msgstr "ã¾ãšå…ˆã« 'goto <setting>' を使用ã™ã‚‹ã‹ã€'set <setting>.<property>' を使用ã—ã¦ãã ã•ã„。\n"
-
-#~ msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
-#~ msgstr "エラー: 無効ãªè¨­å®šå¼•æ•° %s ã§ã™; [%s] ãŒæœ‰åŠ¹ãªå¼•æ•°ã«ãªã‚Šã¾ã™\n"
-
-#~ msgid "Error: missing setting for '%s' property\n"
-#~ msgstr "エラー: '%s' プロパティ用ã®è¨­å®šãŒã‚ã‚Šã¾ã›ã‚“\n"
-
-#~ msgid "Error: invalid property: %s\n"
-#~ msgstr "エラー: 無効ãªãƒ—ロパティ: %s\n"
-
-#~ msgid "Error: unknown setting '%s'\n"
-#~ msgstr "エラー: ä¸æ˜Žãªè¨­å®š '%s'\n"
-
-#~ msgid "You may edit the following properties: %s\n"
-#~ msgstr "変更ã§ãã‚‹ã®ã¯æ¬¡ã®ãƒ—ロパティã«ãªã‚Šã¾ã™: %s\n"
-
-#~ msgid "Error: no argument given; valid are [%s]\n"
-#~ msgstr "エラー: 引数ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“; [%s] ãŒæœ‰åŠ¹ãªå¼•æ•°ã«ãªã‚Šã¾ã™\n"
-
-#~ msgid "Setting '%s' is not present in the connection.\n"
-#~ msgstr "ã“ã®æŽ¥ç¶šã«ã¯è¨­å®š '%s' ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-
-#~ msgid "Error: %s properties, nor it is a setting name.\n"
-#~ msgstr "エラー: %s プロパティã€è¨­å®šåã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。\n"
-
-#~ msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
-#~ msgstr "ã¾ãšå…ˆã« 'goto <setting>' を使用ã™ã‚‹ã‹ã€'describe <setting>.<property>' を使用ã—ã¦ãã ã•ã„\n"
-
-#~ msgid "Error: invalid property: %s, neither a valid setting name.\n"
-#~ msgstr "エラー: 無効ãªãƒ—ロパティ: %sã€æœ‰åŠ¹ãªè¨­å®šåã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。\n"
-
-#~ msgid "Error: '%s' setting not present\n"
-#~ msgstr "エラー: '%s' 設定ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-
-#~ msgid "Error: unknown setting: '%s'\n"
-#~ msgstr "エラー: ä¸æ˜Žãªè¨­å®š: '%s'\n"
-
-#~ msgid "Verify setting '%s': %s\n"
-#~ msgstr "設定 '%s' ã®ç¢ºèª: %s\n"
-
-#~ msgid "Verify connection: %s\n"
-#~ msgstr "接続ã®ç¢ºèª: %s\n"
-
-#~ msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
-#~ msgstr "エラー: '%s' (%s) 接続ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s\n"
-
-#~ msgid "Connection '%s' (%s) sucessfully saved.\n"
-#~ msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«ä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚\n"
-
-#~ msgid "Error: connection verification failed: %s\n"
-#~ msgstr "エラー: 接続ã®ç¢ºèªã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#~ msgid "(unknown error)"
-#~ msgstr "(ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼)"
-
-#~ msgid "Error: status-line: %s\n"
-#~ msgstr "エラー: status-line: %s\n"
-
-#~ msgid "Error: save-confirmation: %s\n"
-#~ msgstr "エラー: save-confirmation: %s\n"
-
-#~ msgid "Error: bad color number: '%s'; use <0-8>\n"
-#~ msgstr "エラー: 色番å·ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“: '%s'; <0-8> を使用ã—ã¦ãã ã•ã„\n"
-
-#~ msgid "Current nmcli configuration:\n"
-#~ msgstr "ç¾åœ¨ã® nmcli 設定:\n"
-
-#~ msgid "Invalid configuration option '%s'; allowed [%s]\n"
-#~ msgstr "無効ãªè¨­å®šã‚ªãƒ—ション '%s'; [%s] ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã™\n"
-
-#~ msgid ""
-#~ ">>> Command-line editing is not available. Consider installing a line editing library to enable the feature. <<<\n"
-#~ "Supported libraries are:\n"
-#~ " - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html\n"
-#~ " - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
-#~ msgstr ""
-#~ ">>> コマンドライン編集ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。ã“ã®æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹å ´åˆã¯ã€ãƒ©ã‚¤ãƒ³ç·¨é›†ãƒ©ã‚¤ãƒ–ラリã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’検討ã—ã¦ãã ã•ã„。 <<<\n"
-#~ "対応ライブラリã¯æ¬¡ã®é€šã‚Šã§ã™:\n"
-#~ " - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html\n"
-#~ " - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
-
-#~ msgid "Error: only one of 'id', uuid, or 'path' can be provided."
-#~ msgstr "エラー: 指定ã§ãã‚‹ã®ã¯ 'id'ã€uuidã€'path' ã®ã„ãšã‚Œã‹ä¸€ã¤ã«ãªã‚Šã¾ã™ã€‚"
-
-#~ msgid "Error: Unknown connection '%s'."
-#~ msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶š '%s' ã§ã™ã€‚"
-
-#~ msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
-#~ msgstr "警告: 既存ã®æŽ¥ç¶š '%s' を編集ã—ã¦ã„ã¾ã™; 'タイプ' 引数ã¯ç„¡è¦–ã•ã‚Œã¾ã™\n"
-
-#~ msgid "Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
-#~ msgstr "警告: 既存ã®æŽ¥ç¶š '%s' を編集ã—ã¦ã„ã¾ã™; 'con å' 引数ã¯ç„¡è¦–ã•ã‚Œã¾ã™\n"
-
-#~ msgid "Valid connection types: %s\n"
-#~ msgstr "有効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—: %s\n"
-
-#~ msgid "Error: invalid connection type; %s\n"
-#~ msgstr "エラー: 無効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—; %s\n"
-
-#~ msgid "===| nmcli interactive connection editor |==="
-#~ msgstr "===| nmcli インテラクティブ接続エディター |==="
-
-#~ msgid "Editing existing '%s' connection: '%s'"
-#~ msgstr "既存㮠'%s' 接続を編集中: '%s'"
-
-#~ msgid "Adding a new '%s' connection"
-#~ msgstr "æ–°è¦ã® '%s' 接続を追加中"
-
-#~ msgid "Type 'help' or '?' for available commands."
-#~ msgstr "使用ã§ãるコマンドを表示ã™ã‚‹ã«ã¯ 'help' ã¾ãŸã¯ '?' を入力ã—ã¾ã™ã€‚"
-
-#~ msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
-#~ msgstr "プロパティ詳細を表示ã™ã‚‹ã«ã¯ 'describe [<setting>.<prop>]' を入力ã—ã¾ã™ã€‚"
-
-#~ msgid "Error: Failed to modify connection '%s': (%d) %s"
-#~ msgstr "エラー: 接続 '%s' ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
-
-#~ msgid "Connection '%s' (%s) successfully modified.\n"
-#~ msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚\n"
-
-#~ msgid "Error: No arguments provided."
-#~ msgstr "エラー: 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: connection ID is missing."
-#~ msgstr "エラー: 接続 ID ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: <setting>.<property> argument is missing."
-#~ msgstr "エラー: <setting>.<property> 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: invalid <setting>.<property> '%s'."
-#~ msgstr "エラー: 無効㪠<setting>.<property> '%s' ã§ã™ã€‚"
-
-#~ msgid "Error: invalid or not allowed setting '%s': %s."
-#~ msgstr "エラー: 無効ã¾ãŸã¯è¨±å¯ã•ã‚Œã¦ã„ãªã„設定 '%s' ã§ã™: %s。"
-
-#~ msgid "Error: invalid property '%s': %s."
-#~ msgstr "エラー: 無効ãªãƒ—ロパティ '%s': %s。"
-
-#~ msgid "Error: failed to modify %s.%s: %s."
-#~ msgstr "エラー: %s.%s ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: %s。"
-
-#~ msgid "Error: unknown connection: %s\n"
-#~ msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶šã§ã™: %s\n"
-
-#~ msgid "Error: cannot delete unknown connection(s): %s."
-#~ msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶šã‚’削除ã§ãã¾ã›ã‚“: %s。"
-
-#~ msgid "Error: 'configured' or 'active' command is expected for 'connection show'."
-#~ msgstr "エラー: 'connection show' ã«ã¯ 'configured' ã¾ãŸã¯ 'active' コマンドã®ä½¿ç”¨ãŒæœŸå¾…ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-
-#~ msgid "Error: '%s' is not valid 'connection' command."
-#~ msgstr "エラー: '%s' ã¯æœ‰åŠ¹ãª '接続' コマンドã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "SSID-HEX"
-#~ msgstr "SSID-HEX"
-
-#~ msgid "CHAN"
-#~ msgstr "CHAN"
-
-#~ msgid "BARS"
-#~ msgstr "ãƒãƒ¼"
-
-#~ msgid "*"
-#~ msgstr "*"
-
-#~ msgid "WPA1"
-#~ msgstr "WPA1"
-
-#~ msgid "802.1X"
-#~ msgstr "802.1X"
-
-#~ msgid "Infra"
-#~ msgstr "インフラ"
-
-#~ msgid "Error: 'device show': %s"
-#~ msgstr "エラー: 'device show': %s"
-
-#~ msgid "Error: 'device show': %s; allowed fields: %s"
-#~ msgstr "エラー: 'device show': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#~ msgid "Interface: "
-#~ msgstr "インターフェース: "
-
-#~ msgid "Error: No interface specified."
-#~ msgstr "エラー: インターフェースãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#~ msgid "Error: extra argument not allowed: '%s'."
-#~ msgstr "エラー: 追加ã®å¼•æ•°ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“: '%s'。"
-
-#~ msgid "SSID or BSSID: "
-#~ msgstr "SSID ã¾ãŸã¯ BSSID: "
-
-#~ msgid "Password: "
-#~ msgstr "パスワード: "
-
-#~ msgid "CONNECTIVITY"
-#~ msgstr "接続性"
-
-#~ msgid "NETWORKING"
-#~ msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
-
-#~ msgid "WIFI-HW"
-#~ msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
-
-#~ msgid "WWAN-HW"
-#~ msgstr "WWAN ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
-
-#~ msgid "WIMAX-HW"
-#~ msgstr "WIMAX ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
-
-#~ msgid "LEVEL"
-#~ msgstr "レベル"
+#~ msgid "SCOPE"
+#~ msgstr "範囲"
-#~ msgid "DOMAINS"
-#~ msgstr "ドメイン"
+#~ msgid "DBUS-SERVICE"
+#~ msgstr "DBUS-サービス"
#~ msgid ""
-#~ "Usage: nmcli general { COMMAND | help }\n"
-#~ "\n"
-#~ " COMMAND := { status | permissions | logging }\n"
+#~ "Usage: nmcli con { COMMAND | help }\n"
+#~ " COMMAND := { list | status | up | down }\n"
#~ "\n"
+#~ " list [id <id> | uuid <id> | system | user]\n"
#~ " status\n"
-#~ "\n"
-#~ " permissions\n"
-#~ "\n"
-#~ " logging [level <log level>] [domains <log domains>]\n"
-#~ "\n"
+#~ " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
+#~ " down id <id> | uuid <id>\n"
#~ msgstr ""
-#~ "使ã„æ–¹: nmcli general { コマンド | help }\n"
-#~ "\n"
-#~ " コマンド := { status | permissions | logging }\n"
+#~ "使用法: nmcli con { COMMAND | help }\n"
+#~ " COMMAND := { list | status | up | down }\n"
#~ "\n"
+#~ " list [id <id> | uuid <id> | system | user]\n"
#~ " status\n"
-#~ "\n"
-#~ " permissions\n"
-#~ "\n"
-#~ " logging [level <log level>] [domains <log domains>]\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Usage: nmcli networking { COMMAND | help }\n"
-#~ "\n"
-#~ " COMMAND := { on | off | connectivity }\n"
-#~ "\n"
-#~ " on\n"
-#~ "\n"
-#~ " off\n"
-#~ "\n"
-#~ " connectivity [check]\n"
-#~ "\n"
-#~ msgstr ""
-#~ "使ã„æ–¹ : nmcli networking { コマンド | help }\n"
-#~ "\n"
-#~ " コマンド := { on | off | connectivity }\n"
-#~ "\n"
-#~ " on\n"
-#~ "\n"
-#~ " off\n"
-#~ "\n"
-#~ " connectivity [check]\n"
-#~ "\n"
-
-#~ msgid "portal"
-#~ msgstr "ãƒãƒ¼ã‚¿ãƒ«"
-
-#~ msgid "limited"
-#~ msgstr "制é™ä»˜ã"
-
-#~ msgid "full"
-#~ msgstr "完全"
-
-#~ msgid "Error: %s"
-#~ msgstr "エラー: %s"
-
-#~ msgid "Error: %s (allowed fields: %s)"
-#~ msgstr "エラー: %s (許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s)"
-
-#, fuzzy
-#~| msgid "activating"
-#~ msgid "starting"
-#~ msgstr "アクティベート中"
-
-#~ msgid "Error: 'general logging': %s"
-#~ msgstr "エラー: 'general logging': %s"
-
-#~ msgid "Error: 'general logging': %s; allowed fields: %s"
-#~ msgstr "エラー: 'general logging': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#~ msgid "NetworkManager logging"
-#~ msgstr "NetworkManager ã®ãƒ­ã‚®ãƒ³ã‚°"
-
-#~ msgid "Error: access denied to set logging; %s"
-#~ msgstr "エラー: ロギング設定ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸ; %s"
-
-#~ msgid "Error: 'general' command '%s' is not valid."
-#~ msgstr "エラー: 'general' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Connectivity"
-#~ msgstr "接続性"
-
-#~ msgid "Error: 'networking connectivity' command '%s' is not valid."
-#~ msgstr "エラー: 'networking connectivity' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Error: 'networking' command '%s' is not valid."
-#~ msgstr "エラー: 'networking' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "Radio switches"
-#~ msgstr "ラジオスイッãƒ"
-
-#~ msgid "Wi-Fi radio switch"
-#~ msgstr "Wi-Fi ラジオスイッãƒ"
-
-#~ msgid "WWAN radio switch"
-#~ msgstr "WWAN ラジオスイッãƒ"
-
-#~ msgid "WiMAX radio switch"
-#~ msgstr "WiMAX ラジオスイッãƒ"
-
-#~ msgid "Error: '%s' is not a valid timeout for '%s' option."
-#~ msgstr "エラー: '%s' 㯠'%s' オプションã®æœ‰åŠ¹ãªã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#~ msgid "default"
-#~ msgstr "デフォルト"
-
-#~ msgid "Do you also want to set '%s' to '%s'? [yes]: "
-#~ msgstr "'%s' ã‚’ '%s' ã«è¨­å®šã—ã¾ã™ã‹? [yes]: "
-
-#~ msgid "Do you also want to clear '%s'? [yes]: "
-#~ msgstr "'%s' も消去ã—ã¾ã™ã‹? [yes]: "
-
-#~ msgid "'%s' is not valid"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™"
-
-#~ msgid "'%d' is not valid; use <%d-%d>"
-#~ msgstr "'%d' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„"
-
-#~ msgid "'%u' is not valid; use <%d-%d>"
-#~ msgstr "'%u' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„"
-
-#~ msgid "'%s' is not valid; use <option>=<value>"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; <option>=<value> を使用ã—ã¦ãã ã•ã„"
-
-#~ msgid "index '%s' is not valid"
-#~ msgstr "インデックス '%s' ã¯ç„¡åŠ¹ã§ã™"
-
-#~ msgid "no item to remove"
-#~ msgstr "削除ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ãŒã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "index '%d' is not in range <0-%d>"
-#~ msgstr "インデックス '%d' ã¯ç¯„囲内ã«ã‚ã‚Šã¾ã›ã‚“ <0-%d>"
-
-#~ msgid "invalid option '%s'"
-#~ msgstr "無効ãªã‚ªãƒ—ション '%s'"
-
-#~ msgid "missing option"
-#~ msgstr "足りãªã„オプション"
-
-#~ msgid "'%s' is not a valid number (or out of range)"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªæ•°å­—ã§ã¯ã‚ã‚Šã¾ã›ã‚“ (ã¾ãŸã¯ç¯„囲外ã«ãªã‚Šã¾ã™)"
-
-#~ msgid "'%s' is not a valid Ethernet MAC"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª Ethernet MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid interface name"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a number"
-#~ msgstr "'%s' ã¯æ•°å­—ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid hex character"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª 16 進文字ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid MAC"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid UUID"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª UUID ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid ""
-#~ "Enter a list of user permissions. This is a list of user names formatted as:\n"
-#~ " [user:]<user name 1>, [user:]<user name 2>,... \n"
-#~ "The items can be separated by commas or spaces.\n"
-#~ "\n"
-#~ "Example: alice bob charlie\n"
-#~ msgstr ""
-#~ "ユーザーパーミッションã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。次ã®ã‚ˆã†ãªå½¢å¼ã§æ§‹æˆã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®ä¸€è¦§ã§ã™ã€‚\n"
-#~ " [user:]<user name 1>, [user:]<user name 2>,... \n"
-#~ "複数ã®å ´åˆã¯ã‚³ãƒ³ãƒžã¾ãŸã¯ç©ºç™½ã§åŒºåˆ‡ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: alice bob charlie\n"
-
-#~ msgid "'%s' is not valid master; use ifname or connection UUID"
-#~ msgstr "'%s' 㯠有効ãªãƒžã‚¹ã‚¿ãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“: ifname ã‹æŽ¥ç¶š UUID を使用ã—ã¦ãã ã•ã„。"
-
-#~ msgid "private key password not provided"
-#~ msgstr "プライベートキーã®ãƒ‘スワードãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#~ msgid ""
-#~ "Enter path to a private key and the key password (if not set yet):\n"
-#~ " <file path> [<password>]\n"
-#~ "Example: /home/cimrman/jara-priv-key Dardanely\n"
-#~ msgstr ""
-#~ "プライベートキーã¸ã®ãƒ‘スã¨ã‚­ãƒ¼ãƒ‘スワード (ã¾ã è¨­å®šã—ã¦ã„ãªã„å ´åˆ) を入力ã—ã¦ãã ã•ã„:\n"
-#~ " <file path> [<password>]\n"
-#~ "例: /home/cimrman/jara-priv-key Dardanely\n"
-
-#~ msgid ""
-#~ "Enter bytes as a list of hexadecimal values.\n"
-#~ "Two formats are accepted:\n"
-#~ "(a) a string of hexadecimal digits, where each two digits represent one byte\n"
-#~ "(b) space-separated list of bytes written as hexadecimal digits (with optional 0x/0X prefix, and optional leading 0).\n"
-#~ "\n"
-#~ "Examples: ab0455a6ea3a74C2\n"
-#~ " ab 4 55 0xa6 ea 3a 74 C2\n"
-#~ msgstr ""
-#~ "16 進値ã®ä¸€è¦§ã®ãƒã‚¤ãƒˆã‚’入力ã—ã¦ãã ã•ã„。\n"
-#~ "入力ã§ãã‚‹å½¢å¼ã¯ 2 種類ã‚ã‚Šã¾ã™ã€‚\n"
-#~ "(a) 16 進ã®æ•°å­—ã‹ã‚‰æˆã‚‹åˆ—ã€2 æ¡ã§ 1 ãƒã‚¤ãƒˆ\n"
-#~ "(b) 空白ã§åŒºåˆ‡ã£ãŸ 16 進ã®æ•°å­—ã®ä¸¦ã³ (オプション㧠0x/0X プレフィックスã€ãŠã‚ˆã³å…ˆè¡Œã® 0 を使用å¯èƒ½)\n"
-#~ "\n"
-#~ "例: ab0455a6ea3a74C2\n"
-#~ " ab 4 55 0xa6 ea 3a 74 C2\n"
-
-#~ msgid ""
-#~ "Enter a list of bonding options formatted as:\n"
-#~ " option = <value>, option = <value>,... \n"
-#~ "Valid options are: %s\n"
-#~ "'mode' can be provided as a name or a number:\n"
-#~ "balance-rr = 0\n"
-#~ "active-backup = 1\n"
-#~ "balance-xor = 2\n"
-#~ "broadcast = 3\n"
-#~ "802.3ad = 4\n"
-#~ "balance-tlb = 5\n"
-#~ "balance-alb = 6\n"
-#~ "\n"
-#~ "Example: mode=2,miimon=120\n"
-#~ msgstr ""
-#~ "次ã®ã‚ˆã†ãªå½¢å¼ã§ãƒœãƒ³ãƒ‰ã®ã‚ªãƒ—ション一覧を入力ã—ã¦ãã ã•ã„。\n"
-#~ " オプション = <value>, オプション = <value>,... \n"
-#~ "有効ãªã‚ªãƒ—ション: %s\n"
-#~ "'mode' ã¯ãƒ¢ãƒ¼ãƒ‰åã¾ãŸã¯æ•°å€¤ã§æŒ‡å®šã§ãã¾ã™ã€‚\n"
-#~ "balance-rr = 0\n"
-#~ "active-backup = 1\n"
-#~ "balance-xor = 2\n"
-#~ "broadcast = 3\n"
-#~ "802.3ad = 4\n"
-#~ "balance-tlb = 5\n"
-#~ "balance-alb = 6\n"
-#~ "\n"
-#~ "例: mode=2,miimon=120\n"
-
-#~ msgid "'%s' is not a valid InfiniBand MAC"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª InfiniBand MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid IBoIP P_Key"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª IBoIP P_Key ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid ""
-#~ "Enter a list of IPv4 addresses of DNS servers.\n"
-#~ "\n"
-#~ "Example: 8.8.8.8, 8.8.4.4\n"
-#~ msgstr ""
-#~ "DNS サーãƒãƒ¼ã® IPv4 アドレス一覧を入力ã—ã¦ãã ã•ã„。\n"
-#~ "\n"
-#~ "例: 8.8.8.8, 8.8.4.4\n"
-
-#~ msgid "'%s' is not valid (use ip[/prefix] [gateway])"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™ (ip[/prefix] [gateway] を使用ã—ã¦ãã ã•ã„)"
-
-#~ msgid ""
-#~ "Enter a list of IPv4 addresses formatted as:\n"
-#~ " ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
-#~ "Missing prefix is regarded as prefix of 32.\n"
-#~ "\n"
-#~ "Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#~ msgstr ""
-#~ "次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv4 アドレスã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
-#~ " ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
-#~ "プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 32 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-
-#~ msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™ (ip/[prefix] next-hop [metric] を使用ã—ã¦ãã ã•ã„)"
-
-#~ msgid ""
-#~ "Enter a list of IPv4 routes formatted as:\n"
-#~ " ip/[prefix] next-hop [metric],... \n"
-#~ "Missing prefix is regarded as a prefix of 32.\n"
-#~ "Missing metric is regarded as a metric of 0.\n"
-#~ "\n"
-#~ "Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
-#~ msgstr ""
-#~ "次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv4 ルートã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
-#~ " ip/[prefix] next-hop [metric],... \n"
-#~ "プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 32 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
-#~ "メトリックãŒãªã„ã‚‚ã®ã¯ãƒ¡ãƒˆãƒªãƒƒã‚¯ 0 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
-
-#~ msgid ""
-#~ "Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration method is 'auto' these DNS servers are appended to those (if any) returned by automatic configuration. DNS servers cannot be used with the 'shared' or 'link-local' IPv6 configuration methods, as there is no usptream network. In all other IPv6 configuration methods methods, these DNS servers are used as the only DNS servers for this connection.\n"
-#~ "\n"
-#~ "Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
-#~ msgstr ""
-#~ "DNS サーãƒãƒ¼ã® IPv6 アドレス一覧を入力ã—ã¦ãã ã•ã„。IPv6 設定方法㌠'auto' ã®å ´åˆã¯ã€è‡ªå‹•è¨­å®šã§è¿”ã•ã‚Œã‚‹ã‚‚ã®ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚DNS サーãƒãƒ¼ã¯ã€ä¸Šæµã¨ãªã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒãªã„ãŸã‚ 'shared' ã¾ãŸã¯ 'link-local' ã® IPv6 設定方法ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。ãã®ä»–ã® IPv6 設定方法ã§ã¯ã™ã¹ã¦ã€ã“れら㮠DNS サーãƒãƒ¼ã¯ã“ã®æŽ¥ç¶šç”¨ã® DNS サーãƒãƒ¼ã¨ã—ã¦ã®ã¿ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
-
-#~ msgid ""
-#~ "Enter a list of IPv6 addresses formatted as:\n"
-#~ " ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
-#~ "Missing prefix is regarded as prefix of 128.\n"
-#~ "\n"
-#~ "Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:326b\n"
-#~ msgstr ""
-#~ "次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv6 アドレスã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
-#~ " ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
-#~ "プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 128 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
-#~ "\n"
-#~ "例: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:326b\n"
-
-#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™ (<dest IP>/prefix <next-hop IP> [metric] を使用ã—ã¦ãã ã•ã„)"
-
-#~ msgid ""
-#~ "Enter a list of IPv6 routes formatted as:\n"
-#~ " ip/[prefix] next-hop [metric],... \n"
-#~ "Missing prefix is regarded as a prefix of 128.\n"
-#~ "Missing metric is regarded as a metric of 0.\n"
-#~ "\n"
-#~ "Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:db8:beef::3 2\n"
-#~ msgstr ""
-#~ "次ã®ã‚ˆã†ãªå½¢å¼ã§ IPv6 ルートã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„。\n"
-#~ " ip/[prefix] next-hop [metric],... \n"
-#~ "プレフィックスãŒãªã„ã‚‚ã®ã¯ãƒ—レフィックス 128 ã¨ã¿ãªã—ã¾ã™ã€‚\n"
-#~ "Missing metric is regarded as a metric of 0.\n"
-#~ "\n"
-#~ "例: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:db8:beef::3 2\n"
-
-#~ msgid "'%s' is not valid; use 0, 1, or 2"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; 0ã€1ã€2 ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ãã ã•ã„。"
-
-#~ msgid "'%s' is not a valid channel; use <1-13>"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“; <1-13> を使用ã—ã¦ãã ã•ã„"
-
-#~ msgid "'%s' is not valid; use [e, o, n]"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; [e, o, n] を使用ã—ã¦ãã ã•ã„"
-
-#~ msgid "no priority to remove"
-#~ msgstr "削除ã™ã‚‹å„ªå…ˆåº¦ãŒã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "index '%d' is not in the range of <0-%d>"
-#~ msgstr "インデックス '%d' 㯠<0-%d> ã®ç¯„囲内ã«ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not valid; 3 strings should be provided"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; 3 ã¤ã®æ–‡å­—列を入力ã—ã¦ãã ã•ã„"
-
-#~ msgid ""
-#~ "Enter a list of three channels (comma or space separated).\n"
-#~ "\n"
-#~ "Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#~ msgstr ""
-#~ "3 ãƒãƒ£ãƒ³ãƒãƒ«ã®ä¸€è¦§ã‚’入力ã—ã¦ãã ã•ã„ (ãƒãƒ£ãƒ³ãƒãƒ«åŒå£«ã¯ã‚³ãƒ³ãƒžã¾ãŸã¯ç©ºç™½ã§åŒºåˆ‡ã‚Šã¾ã™)。\n"
-#~ "\n"
-#~ "例: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-
-#~ msgid ""
-#~ "Enter a list of S/390 options formatted as:\n"
-#~ " option = <value>, option = <value>,... \n"
-#~ "Valid options are: %s\n"
-#~ msgstr ""
-#~ "次ã®ã‚ˆã†ãªå½¢å¼ã§ S/390 ã®ã‚ªãƒ—ション一覧を入力ã—ã¦ãã ã•ã„。\n"
-#~ " option = <value>, option = <value>,... \n"
-#~ "有効ãªã‚ªãƒ—ション: %s\n"
-
-#~ msgid "'%s' is not a valid channel"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%ld' is not a valid channel"
-#~ msgstr "'%ld' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "WEP key is guessed to be of '%s'\n"
-#~ msgstr "WEP キー㯠'%s' ã§ã‚ã‚‹ã¨ä»®å®šã—ã¦ã„ã¾ã™\n"
-
-#~ msgid "'%s' is not a valid PSK"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª PSK ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "don't know how to get the property value"
-#~ msgstr "プロパティ値ã®å–得方法ãŒã‚ã‹ã‚Šã¾ã›ã‚“"
-
-#~ msgid "the property can't be changed"
-#~ msgstr "ã“ã®ãƒ—ロパティã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
-
-#~ msgid "[NM property description]"
-#~ msgstr "[NM プロパティã®è©³ç´°]"
-
-#~ msgid "[nmcli specific description]"
-#~ msgstr "[nmcli 固有ã®è©³ç´°]"
-
-#~ msgid "Error: value for '%s' argument is required."
-#~ msgstr "エラー: '%s' 引数ã®å€¤ãŒå¿…è¦ã§ã™ã€‚"
-
-#~ msgid "Error: Argument '%s' was expected, but '%s' provided."
-#~ msgstr "エラー: 引数 '%s' ã®å…¥åŠ›ãŒæœŸå¾…ã•ã‚Œã¦ã„ã¾ã—ãŸãŒã€'%s' ãŒå…¥åŠ›ã•ã‚Œã¾ã—ãŸã€‚"
-
-#~ msgid "Error: Unexpected argument '%s'"
-#~ msgstr "エラー: 予期ã—ãªã„引数 '%s' ã§ã™"
-
-#~ msgid "'%s' is not valid; use [%s] or [%s]"
-#~ msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; [%s] ã‹ [%s] を使用ã—ã¦ãã ã•ã„"
-
-#~ msgid "'%s' is ambiguous (%s x %s)"
-#~ msgstr "'%s' ãŒä¸æ˜Žçž­ã§ã™ (%s x %s)"
-
-#~ msgid "missing name, try one of [%s]"
-#~ msgstr "åå‰ãŒã‚ã‚Šã¾ã›ã‚“ã€[%s] ã®ã†ã¡ã®ã„ãšã‚Œã‹ã§è©¦ã—ã¦ã¿ã¦ãã ã•ã„"
-
-#~ msgid "property is missing"
-#~ msgstr "プロパティãŒã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "property is empty"
-#~ msgstr "プロパティãŒç©ºã§ã™"
-
-#~ msgid "has to match '%s' property for PKCS#12"
-#~ msgstr "PKCS#12 ã® '%s' プロパティã¨ä¸€è‡´ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
-
-#~ msgid "property is invalid"
-#~ msgstr "プロパティãŒç„¡åŠ¹ã§ã™"
-
-#~ msgid "'%s' is not a valid value for the property"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒ—ロパティã®å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "requires '%s' or '%s' setting"
-#~ msgstr "'%s' ã¾ãŸã¯ '%s' ã®è¨­å®šãŒå¿…è¦ã§ã™"
-
-#~ msgid "invalid option '%s' or its value '%s'"
-#~ msgstr "無効ãªã‚ªãƒ—ション '%s'ã€ã¾ãŸã¯ãã®å€¤ '%s' ã§ã™"
-
-#~ msgid "mandatory option '%s' is missing"
-#~ msgstr "必須オプション㮠'%s' ãŒã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid value for '%s'"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª '%s' ã®å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s=%s' is incompatible with '%s > 0'"
-#~ msgstr "'%s=%s' 㯠'%s > 0' ã¨ã¯äº’æ›æ€§ãŒã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s=%s' is not a valid configuration for '%s'"
-#~ msgstr "'%s=%s' 㯠'%s' ã®æœ‰åŠ¹ãªè¨­å®šã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' option requires '%s' option to be set"
-#~ msgstr "'%s' オプションを使用ã™ã‚‹å ´åˆã¯ '%s' オプションを設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
-
-#~ msgid "'%s' option is empty"
-#~ msgstr "'%s' オプションãŒç©ºç™½ã§ã™"
-
-#~ msgid "'%s' is not a valid IPv4 address for '%s' option"
-#~ msgstr "'%s' 㯠'%s' オプション用ã®æœ‰åŠ¹ãª IPv4 アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%d' is not a valid value for the property (should be <= %d)"
-#~ msgstr "'%d' ã¯ãƒ—ロパティã®æœ‰åŠ¹ãªå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ (%d 以下ã¨ãªã‚‹ã¯ãšã§ã™)"
-
-#~ msgid "value '%d' is out of range <%d-%d>"
-#~ msgstr "値 '%d' 㯠<%d-%d> ã®ç¯„囲外ã§ã™"
-
-#~ msgid "property is empty'"
-#~ msgstr "プロパティãŒç©ºã§ã™"
-
-#~ msgid "'%s' doesn't match the virtual interface name '%s'"
-#~ msgstr "'%s' ã¯ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹å '%s' ã¨ä¸€è‡´ã—ã¾ã›ã‚“"
-
-#~ msgid "requires presence of '%s' setting in the connection"
-#~ msgstr "接続ã«ã¯ '%s' 設定ãŒãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
-
-#~ msgid "IPv4 configuration is not allowed for bonding slave"
-#~ msgstr "ボンドスレーブã«ã¯ IPv4 設定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#~ msgid "IPv6 configuration is not allowed for bonding slave"
-#~ msgstr "ボンドスレーブã«ã¯ IPv6 設定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#~ msgid "property value '%s' is empty or too long (>64)"
-#~ msgstr "プロパティ値 '%s' ãŒç©ºç™½ã€ã¾ãŸã¯é•·éŽãŽã¾ã™ (>64)"
-
-#~ msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
-#~ msgstr "'%s' ã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ ([A-Za-z._-] を使用ã—ã¦ãã ã•ã„)"
-
-#~ msgid "'%s' length is invalid (should be 5 or 6 digits)"
-#~ msgstr "'%s' ã®é•·ã•ã¯ç„¡åŠ¹ã§ã™ (5 æ¡ã¾ãŸã¯ 6 æ¡ã«ã—ã¦ãã ã•ã„)"
-
-#~ msgid "not a valid interface name"
-#~ msgstr "無効ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã§ã™"
-
-#~ msgid "Must specify a P_Key if specifying parent"
-#~ msgstr "親を指定ã—ã¦ã„ã‚‹å ´åˆã¯ P_Key を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
-
-#~ msgid "InfiniBand P_Key connection did not specify parent interface name"
-#~ msgstr "InfiniBand P_Key 接続ã§è¦ªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ã§ã—ãŸ"
-
-#~ msgid "this property is not allowed for '%s=%s'"
-#~ msgstr "ã“ã®ãƒ—ロパティ㯠'%s=%s' ã«ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#~ msgid "%d. IPv4 address is invalid"
-#~ msgstr "%d. IPv4 アドレスã¯ç„¡åŠ¹ã§ã™"
-
-#~ msgid "%d. IPv4 address has invalid prefix"
-#~ msgstr "%d. IPv4 ã«ç„¡åŠ¹ãªãƒ—レフィックスãŒã‚ã‚Šã¾ã™"
-
-#~ msgid "%d. route is invalid"
-#~ msgstr "%d. ルートã¯ç„¡åŠ¹ã§ã™"
-
-#~ msgid "%d. route has invalid prefix"
-#~ msgstr "%d. ルートã«ç„¡åŠ¹ãªãƒ—レフィックスãŒã‚ã‚Šã¾ã™"
-
-#~ msgid "'%s' not allowed for %s=%s"
-#~ msgstr "'%s' 㯠%s=%s ã«è¨±å¯ã•ã‚Œã¾ã›ã‚“"
-
-#~ msgid "SSID length is out of range <1-32> bytes"
-#~ msgstr "SSID ã®é•·ã•ã¯ç¯„囲外 <1-32> ãƒã‚¤ãƒˆã§ã™"
-
-#~ msgid "'%d' is not a valid channel"
-#~ msgstr "'%d' ã¯ç„¡åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã™"
-
-#~ msgid "'%d' is out of valid range <128-16384>"
-#~ msgstr "'%d' ã¯æœ‰åŠ¹ãªç¯„囲 <128-16384> ã®å¤–ã«ã‚ã‚Šã¾ã™"
-
-#~ msgid "setting this property requires non-zero '%s' property"
-#~ msgstr "ã“ã®ãƒ—ロパティを設定ã™ã‚‹ã«ã¯ã‚¼ãƒ­ä»¥å¤–ã® '%s' プロパティãŒå¿…è¦ã§ã™"
-
-#~ msgid "'%s' value doesn't match '%s=%s'"
-#~ msgstr "'%s' ã®å€¤ã¯ '%s=%s' ã¨ä¸€è‡´ã—ã¾ã›ã‚“"
-
-#~ msgid "'%s' is neither an UUID nor an interface name"
-#~ msgstr "'%s' 㯠UUIDã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã®ã„ãšã‚Œã§ã‚‚ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "flags are invalid"
-#~ msgstr "フラグãŒç„¡åŠ¹ã§ã™"
-
-#~ msgid "'%s' is not a valid ethernet port value"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª Ethernet ãƒãƒ¼ãƒˆå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid duplex value"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªäºŒé‡å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "is not a valid MAC address"
-#~ msgstr "ã¯æœ‰åŠ¹ãª MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid MAC address"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "invalid '%s' or its value '%s'"
-#~ msgstr "無効㪠'%s' ã¾ãŸã¯ãã®å€¤ '%s' ã§ã™"
-
-#~ msgid "'%s' security requires '%s=%s'"
-#~ msgstr "'%s' セキュリティã«ã¯ '%s=%s' ãŒå¿…è¦ã§ã™"
-
-#~ msgid "'%s' security requires '%s' setting presence"
-#~ msgstr "'%s' セキュリティã«ã¯ '%s' ã®è¨­å®šãŒå¿…è¦ã«ãªã‚Šã¾ã™"
-
-#~ msgid "'%d' value is out of range <0-3>"
-#~ msgstr "'%d' ã®å€¤ã¯ <0-3> ã®ç¯„囲外ã«ãªã‚Šã¾ã™"
-
-#~ msgid "'%s' connections require '%s' in this property"
-#~ msgstr "'%s' ã®æŽ¥ç¶šã®å ´åˆã€ã“ã®ãƒ—ロパティ㫠'%s' ãŒå¿…è¦ã«ãªã‚Šã¾ã™"
-
-#~ msgid "'%s' can only be used with '%s=%s' (WEP)"
-#~ msgstr "'%s' 㯠'%s=%s' (WEP) ã§ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid Wi-Fi mode"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãª Wi-Fi モードã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "'%s' is not a valid band"
-#~ msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#~ msgid "requires setting '%s' property"
-#~ msgstr "'%s' プロパティã®è¨­å®šãŒå¿…è¦ã§ã™"
-
-#~ msgid "Don't become a daemon, and log to stderr"
-#~ msgstr "デーモンã«ã›ãšã€stderr ã«ãƒ­ã‚°è¨˜éŒ²ã™ã‚‹"
-
-#~ msgid "Log domains separated by ',': any combination of [%s]"
-#~ msgstr "「,ã€ã§åŒºåˆ‡ã£ãŸãƒ­ã‚°ãƒ‰ãƒ¡ã‚¤ãƒ³: [%s] ã®çµ„ã¿åˆã‚ã›"
-
-#~ msgid "Config directory location"
-#~ msgstr "設定ディレクトリã®å ´æ‰€"
-
-#~ msgid "/path/to/config/dir"
-#~ msgstr "/path/to/config/dir"
-
-#~ msgid "Team connection %d"
-#~ msgstr "ãƒãƒ¼ãƒ æŽ¥ç¶š %d"
-
-#, fuzzy
-#~| msgid "NetworkManager status"
-#~ msgid "NetworkManager needs to turn off networks"
-#~ msgstr "NetworkManager ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
-
-#~ msgid "Team"
-#~ msgstr "ãƒãƒ¼ãƒ "
-
-#~ msgid "Waits for NetworkManager to finish activating startup network connections."
-#~ msgstr "NetworkManager ã«ã‚ˆã‚Šã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆãŒå®Œäº†ã•ã‚Œã‚‹ã®ã‚’å¾…æ©Ÿã—ã¾ã™ã€‚"
-
-#~ msgid "SCOPE"
-#~ msgstr "範囲"
-
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-サービス"
+#~ " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
+#~ " down id <id> | uuid <id>\n"
#~ msgid "system"
#~ msgstr "システム"
@@ -4683,6 +5070,9 @@ msgstr "無効ãªã‚ªãƒ—ションã§ã™ã€‚--help を使用ã—ã¦æœ‰åŠ¹ãªã‚ªãƒ—ã‚
#~ msgid "user"
#~ msgstr "ユーザー"
+#~ msgid "Error: no valid parameter specified."
+#~ msgstr "エラー: 有効ãªãƒ‘ラメータãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
#~ msgid "state: %s\n"
#~ msgstr "状態: %s\n"
@@ -4695,6 +5085,15 @@ msgstr "無効ãªã‚ªãƒ—ションã§ã™ã€‚--help を使用ã—ã¦æœ‰åŠ¹ãªã‚ªãƒ—ã‚
#~ msgid "Active connection path: %s\n"
#~ msgstr "アクティブ接続ã®ãƒ‘ス: %s\n"
+#~ msgid "Error: id or uuid has to be specified."
+#~ msgstr "エラー: id ã‹åˆã¯ uuid ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
+
+#~ msgid "Warning: Connection not active\n"
+#~ msgstr "警告: 接続ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã‚ã‚Šã¾ã›ã‚“\n"
+
+#~ msgid "Error: could not connect to D-Bus."
+#~ msgstr "エラー: D-Bus ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
#~ msgid "IP4-SETTINGS"
#~ msgstr "IP4-セッティング"
@@ -4722,11 +5121,89 @@ msgstr "無効ãªã‚ªãƒ—ションã§ã™ã€‚--help を使用ã—ã¦æœ‰åŠ¹ãªã‚ªãƒ—ã‚
#~ " wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
#~ "\n"
+#~ msgid "Encrypted: "
+#~ msgstr "æš—å·åŒ–:"
+
+#~ msgid "WEP "
+#~ msgstr "WEP "
+
+#~ msgid "WPA "
+#~ msgstr "WPA "
+
+#~ msgid "WPA2 "
+#~ msgstr "WPA2 "
+
+#~ msgid "Enterprise "
+#~ msgstr "Enterprise "
+
+#~ msgid "Infrastructure"
+#~ msgstr "インフラストラクãƒãƒ£"
+
#~ msgid "unknown)"
#~ msgstr "ä¸æ˜Ž)"
#~ msgid "Device state: %d (%s)\n"
#~ msgstr "デãƒã‚¤ã‚¹ã®çŠ¶æ…‹: %d (%s)\n"
+#~ msgid "WIFI-HARDWARE"
+#~ msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+
+#~ msgid "WWAN-HARDWARE"
+#~ msgstr "WWAN ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+
+#~ msgid "Error: 'nm status': %s; allowed fields: %s"
+#~ msgstr "エラー: 'nm status': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+
+#~ msgid "WiFi enabled"
+#~ msgstr "Wi-Fi ã¯æœ‰åŠ¹ã§ã™"
+
+#~ msgid "WWAN enabled"
+#~ msgstr "WWAN ã¯æœ‰åŠ¹ã§ã™"
+
+#~ msgid "Not enough memory to store PEM file data."
+#~ msgstr "PEM ファイルデータã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Not enough memory to store certificate data."
+#~ msgstr "証明書データã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Not enough memory to store file data."
+#~ msgstr "ファイルデータã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Not enough memory to store the IV."
+#~ msgstr "IV ã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Not enough memory to decrypt private key."
+#~ msgstr "プライベートキーã®è§£èª­ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Not enough memory to store decrypted private key."
+#~ msgstr "復å·ã—ãŸãƒ—ライベートキーã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Not enough memory for decrypted key buffer."
+#~ msgstr "復å·ã—ãŸã‚­ãƒ¼ãƒãƒƒãƒ•ã‚¡ç”¨ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Could not allocate memory for encrypting."
+#~ msgstr "æš—å·åŒ–用ã®ãƒ¡ãƒ¢ãƒªãƒ¼å‰²ã‚Šå½“ã¦ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#~ msgid "Not enough memory to make encryption key."
+#~ msgstr "æš—å·åŒ–キーを作æˆã™ã‚‹ã®ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#~ msgid "Could not allocate memory for PEM file creation."
+#~ msgstr "PEM ファイル作æˆç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+
+#~ msgid "Could not allocate memory for writing IV to PEM file."
+#~ msgstr "PEM ファイルã¸ã® IV ã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+
+#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
+#~ msgstr "PEM ファイルã¸ã®æš—å·åŒ–キーã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+
+#~ msgid "Could not allocate memory for PEM file data."
+#~ msgstr "PEM ファイルデータ用ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+
+#~ msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#~ msgstr "リンク状æ³ç›£è¦–用ã®ãƒãƒƒãƒˆãƒªãƒ³ã‚¯ã®ãƒªãƒ³ã‚¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’割り当ã¦ã§ãã¾ã›ã‚“: %s"
+
+#~ msgid "error updating link cache: %s"
+#~ msgstr "リンクキャッシュã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼: %s"
+
#~ msgid "Auto %s"
#~ msgstr "自動 %s"
diff --git a/po/kn.po b/po/kn.po
index c4a4630c5..16d69e0e5 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -2,1429 +2,3379 @@
# Kannada translation of NetworkManager.
# Copyright (C) 2009 NetworkManager's COPYRIGHT HOLDER
# This file is distributed under the same license as the NetworkManager package.
-#
-# Shankar Prasad <svenkate@redhat.com>, 2009, 2010, 2012.
+#
+# Shankar Prasad <svenkate@redhat.com>, 2009, 2010, 2012, 2013.
+# Shankar Prasad <svenkate@redhat.com>, 2009, 2010, 2012, 2013, 2014.
+# Shankar <svenkate@redhat.com>, 2014. #zanata
msgid ""
msgstr ""
-"Project-Id-Version: NetworkManager.po.master.kn\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-12-01 03:25+0000\n"
-"PO-Revision-Date: 2012-12-12 23:58+0530\n"
-"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
-"Language-Team: Kannada <kde-i18n-doc@kde.org>\n"
-"Language: kn\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"PO-Revision-Date: 2014-01-30 05:52-0500\n"
+"Last-Translator: Shankar Prasad <svenkate AT redhat Dot com>\n"
+"Language-Team: Kannada <kde-i18n-doc@kde.org>\n"
+"Language: kn\n"
+"X-Generator: Zanata 3.2.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:133
-#: ../cli/src/connections.c:167
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
msgstr "GROUP"
-#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADDRESS"
-#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ROUTE"
-#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
-#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMAIN"
-#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
-#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv4 ವಿಳಾಸ '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <1-32> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಗೇಟà³â€Œà²µà³‡ '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv4 ವಿಳಾಸ '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <1-128> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv4 ರೌಟೠ'%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <0-32> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಮà³à²‚ದಿನ hop ವಿಳಾಸ '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಮೆಟà³à²°à²¿à²•à³ '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv6 ರೌಟೠ'%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <0-128> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "ನಿರà³à²µà²¹à²¿à²¸à²¦à³† ಇರà³à²µ"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "ಲಭà³à²¯à²µà²¿à²²à³à²²"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "ಸಂಪರà³à²•à²•à²¡à²¿à²¦à³ ಹೋಗಿದೆ"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಸಿದà³à²§à²—ೊಳಿಕೆ)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಸಂರಚಿಸà³à²µà²¿à²•à³†)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ದೃಢೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (IP ಸಂರಚನೆಯನà³à²¨à³ ಪಡೆಯಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/common.c:380
-#| msgid "connecting (getting IP configuration)"
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (IP ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/common.c:382
-#| msgid "connecting (getting IP configuration)"
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಎರಡನೆಯ ಸಂರಚನೆಯನà³à²¨à³ ಆರಂಭಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "ಸಂಪರà³à²•à²—ೊಂಡಿದೆ"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:658
-#| msgid "activating"
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
msgid "deactivating"
msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "ಸಂಪರà³à²• ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:661
-#: ../cli/src/connections.c:684 ../cli/src/connections.c:1376
-#: ../cli/src/devices.c:650 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:629
-#: ../cli/src/settings.c:657 ../cli/src/utils.c:533 ../src/main.c:451
-#: ../src/main.c:470
+#: ../cli/src/common.c:643 ../cli/src/connections.c:737
+#: ../cli/src/connections.c:760 ../cli/src/connections.c:1462
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2257
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1080 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "ಗೊತà³à²¤à²¿à²²à³à²²à²¦"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "ಯಾವà³à²¦à³† ಕಾರಣ ನೀಡಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:402
-#| msgid "Unknown"
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
msgid "Unknown error"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "ಸಾಧನವನà³à²¨à³ ಈಗ ನಿಯಂತà³à²°à²£à²•à³à²•à³Šà²³à²ªà²¡à²¿à²¸à²²à²¾à²—ಿದೆ"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "ಸಾಧನವನà³à²¨à³ ಈಗ ನಿಯಂತà³à²°à²£à²•à³à²•à³Šà²³à²ªà²¡à²¿à²¸à²²à²¾à²—ಿಲà³à²²"
-#: ../cli/src/common.c:411
-#| msgid "the VPN service returned invalid configuration"
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "ಸಾಧನವನà³à²¨à³ ಸಂರಚನೆಗಾಗಿ ಸಿದà³à²§à²—ೊಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"IP ಸಂರಚನೆಯನà³à²¨à³ ಕಾದಿರಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²² (ಲಭà³à²¯à²µà²¿à²°à³à²µ ಯಾವà³à²¦à³† ವಿಳಾಸ, ಕಾಲತೀರಿಕೆ, "
"ಮà³à²‚ತಾದವà³à²—ಳಿಲà³à²².)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "IP ಸಂರಚನೆಯೠಇನà³à²¨à³ ಮà³à²‚ದೆ ಮಾನà³à²¯à²µà²¾à²—ಿರà³à²µà³à²¦à²¿à²²à³à²²"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "ರಹಸà³à²¯à²—ಳ ಅಗತà³à²¯à²µà²¿à²¦à³†, ಆದರೆ ಒದಗಿಸಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟà³â€Œà²¨à³Šà²‚ದಿಗಿನ ಸಂಪರà³à²• ಕಡಿದಿದೆ"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟೠಸಂರಚನೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟà³â€Œ ದೃಢೀಕರಿಸಲೠಬಹಳ ಸಮಯ ತೆಗೆದà³à²•à³Šà²‚ಡಿದೆ"
-#: ../cli/src/common.c:435
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "PPP ಸೇವೆಯನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ"
-#: ../cli/src/common.c:438
-#| msgid "VPN disconnected"
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP ಸೇವೆಯ ಸಂಪರà³à²• ಕಡಿದಿದೆ"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:444
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "DHCP ಕà³à²²à³ˆà²‚ಟೠಆರಂಭಗೊಳà³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP ಕà³à²²à³ˆà²‚ಟೠದೋಷ"
-#: ../cli/src/common.c:450
-#| msgid "VPN connection failed"
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP ಕà³à²²à³ˆà²‚ಟೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:453
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "ಹಂಚಲಾದ ಸಂಪರà³à²• ಸೇವೆಯೠಆರಂಭಗೊಳà³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:456
-#| msgid "connection failed"
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "ಹಂಚಲಾದ ಸಂಪರà³à²• ಸೇವೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:459
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "AutoIP ಸೇವೆಯನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP ಸೇವಾ ದೋಷ"
-#: ../cli/src/common.c:465
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP ಸೇವೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "ಮಾರà³à²—ವೠಕಾರà³à²¯à²¨à²¿à²°à²¤à²µà²¾à²—ಿದೆ"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "ಡಯಲೠಶಬà³à²§à²µà²¿à²²à³à²²"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "ಯಾವà³à²¦à³† ವಾಹಕವನà³à²¨à³ ಸಾಧಿಸಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "ಡಯಲೠಮಾಡà³à²µ ಮನವಿಯ ಕಾಲಾವಧಿ ಮà³à²—ಿದಿದೆ"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "ಡಯಲೠಮಾಡà³à²µ ಪà³à²°à²¯à²¤à³à²¨à²µà³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:483
-#| msgid "Error: Connection activation failed."
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "ಮಾಡೆಮೠಆರಂಭಗೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:486
-#| msgid "Failed to decrypt the private key."
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "ನಿಶà³à²šà²¿à²¤ APN ಅನà³à²¨à³ ಆರಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "ಜಾಲಬಂಧಗಳಿಗಾಗಿ ಹà³à²¡à³à²•à²²à²¾à²—à³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "ಜಾಲಬಂಧ ನೋಂದಣಿಯನà³à²¨à³ ನಿರಾಕರಿಸಲಾಗಿದೆ"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "ಜಾಲಬಂಧ ನೋಂದಣಿಯ ಕಾಲಾವಧಿ ತೀರಿದೆ"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "ಮನವಿ ಸಲà³à²²à²¿à²¸à²²à²¾à²¦ ಜಾಲಬಂಧದೊಂದಿಗೆ ನೋಂದಾಯಿಸಲೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:501
-#| msgid "VPN connection failed"
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN ಪರಿಶೀಲನೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "ಸಾಧನಕà³à²•à²¾à²—ಿ ಯಾವà³à²¦à³† ಅಗತà³à²¯ ಫರà³à²®à³-ವೇರೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/common.c:507
-#| msgid "the connection was removed"
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "ಸಾಧನವನà³à²¨à³ ತೆಗೆದೠಹಾಕಲಾಗಿದೆ"
-#: ../cli/src/common.c:510
-#| msgid "NetworkManager status"
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager ನಿದà³à²°à²¾à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಹೋಗಿದೆ"
-#: ../cli/src/common.c:513
-#| msgid "no active connection or device"
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "ಸಾಧನದ ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²µà³ ಮರೆಯಾಗಿದೆ"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "ಸಾಧನದೊಂದಿಗಿನ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಬಳಕೆದಾರ ಅಥವ ಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²¿à²‚ದ ಕಡಿದೠಹಾಕಲಾಗಿದೆ"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "ವಾಹಕ/ಕೊಂಡಿಯನà³à²¨à³ ಬದಲಾಯಿಸಲಾಗಿದೆ"
-#: ../cli/src/common.c:522
-#| msgid "the connection was removed"
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "ಸಾಧನದ ಈಗಿನ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಊಹಿಸಲಾಗಿದೆ"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟೠಈಗ ಲಭà³à²¯à²µà²¿à²¦à³†"
-#: ../cli/src/common.c:528
-#| msgid "'dhcpcd' could be found."
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "ಮಾಡೆಮà³â€Œ ಕಂಡೠಬಂದಿಲà³à²²"
-#: ../cli/src/common.c:531
-#| msgid "the connection attempt timed out"
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "ಬà³à²²à³‚ಟೂತೠಸಂಪರà³à²•à²µà³ ವಿಫಲಗೊಂಡಿದೆ ಅಥವ ಕಾಲಾವಧಿ ಮೀರಿದೆ"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM ಕಾರà³à²¡à³ ಅನà³à²¨à³ ಸೇರಿಸಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM PIN ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM PUK ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM ತಪà³à²ªà²¾à²—ಿದೆ"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand ಸಾಧನವೠಸಂಪರà³à²•à²¿à²¤ ಸà³à²¥à²¿à²¤à²¿à²¯à²²à³à²²à²¿ ಬೆಂಬಲಿತವಾಗಿಲà³à²²"
-#: ../cli/src/common.c:549
-#| msgid "connection failed"
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "ಸಂಪರà³à²•à²¦ ಅವಲಂಬನೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
-msgstr "ADSL ಬà³à²°à²¿à²¡à³à²œà²¿à²¨ ಮà³à²–ಾಂತರದ RFC 2684 ಎತರà³à²¨à³†à²Ÿà³â€Œà²¨à²²à³à²²à²¿ ಒಂದೠತೊಂದರೆ ಕಂಡà³à²¬à²‚ದಿದೆ"
+msgstr ""
+"ADSL ಬà³à²°à²¿à²¡à³à²œà²¿à²¨ ಮà³à²–ಾಂತರದ RFC 2684 ಎತರà³à²¨à³†à²Ÿà³â€Œà²¨à²²à³à²²à²¿ ಒಂದೠತೊಂದರೆ ಕಂಡà³à²¬à²‚ದಿದೆ"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager ಲಭà³à²¯à²µà²¿à²²à³à²²"
-#: ../cli/src/common.c:558
-#| msgid "'dhclient' could be found."
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi ಜಾಲಬಂಧವೠಕಂಡೠಬಂದಿಲà³à²²"
-#: ../cli/src/common.c:561
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "ಮೂಲ ಸಂಪರà³à²•à²¦ ಎರಡನೇ ಸಂಪರà³à²•à²µà³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:296 ../cli/src/devices.c:314
-#: ../cli/src/devices.c:436 ../cli/src/devices.c:480
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB ಅಥವ FCoE ಸಿದà³à²§à²¤à³† ವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "teamd ನಿಯಂತà³à²°à²• ವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦"
-#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
-#: ../cli/src/devices.c:108 ../cli/src/devices.c:132 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152 ../cli/src/devices.c:166 ../cli/src/devices.c:180
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:218 ../cli/src/devices.c:227
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆದà³à²¯à²¤à³† ನಕà³à²·à³† '%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "'%s' ಆದà³à²¯à²¤à³†à²¯à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಟೀಮೠಸಂರಚನೆ ಅಥವ ಕಡತದ ಹೆಸರೠಆಗಿಲà³à²²."
+
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "ಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರೆ?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "ಗà³à²£à²¦ ಹೆಸರೆ?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "ಸಂಪರà³à²•à²¦ ಬಗೆಯನà³à²¨à³ ನಮೂದಿಸಿ: "
+
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:175
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NAME"
-#. 0
-#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
-#: ../cli/src/devices.c:72 ../cli/src/devices.c:110 ../cli/src/devices.c:205
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:201
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TYPE"
-#. 2
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
-#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
-#. 4
-#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:122
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
-#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "READONLY"
-#. 6
-#. 8
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
-#: ../cli/src/devices.c:74 ../cli/src/devices.c:192 ../cli/src/devices.c:208
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#. 2
-#: ../cli/src/connections.c:136
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "DEVICES"
-#. 3
-#. 1
-#. 8
-#. 1
-#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:117 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATE"
-#. 4
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "DEFAULT"
-#. 5
-#: ../cli/src/connections.c:139
-#| msgid "DEFAULT"
+#: ../cli/src/connections.c:180
msgid "DEFAULT6"
msgstr "DEFAULT6"
-#. 6
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#. 7
-#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
msgid "VPN"
msgstr "VPN"
-#. 9
-#: ../cli/src/connections.c:143
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PATH"
-#. 10
-#: ../cli/src/connections.c:144
+#: ../cli/src/connections.c:185
msgid "ZONE"
msgstr "ZONE"
-#. 11
-#: ../cli/src/connections.c:145
+#: ../cli/src/connections.c:186
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
-msgid "GENERAL"
-msgstr "GENERAL"
-
-#. 0
-#: ../cli/src/connections.c:154
-#| msgid "TKIP"
-msgid "IP"
-msgstr "IP"
-
-#. 1
-#: ../cli/src/connections.c:169
-#| msgid "NAME"
+#: ../cli/src/connections.c:202
msgid "USERNAME"
msgstr "USERNAME"
-#. 2
-#: ../cli/src/connections.c:170
+#: ../cli/src/connections.c:203
msgid "GATEWAY"
msgstr "GATEWAY"
-#. 3
-#: ../cli/src/connections.c:171
+#: ../cli/src/connections.c:204
msgid "BANNER"
msgstr "BANNER"
-#. 4
-#: ../cli/src/connections.c:172
-#| msgid "STATE"
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
msgstr "VPN-STATE"
-#. 5
-#: ../cli/src/connections.c:173
+#: ../cli/src/connections.c:206
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:195
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:255
#, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down }\n"
-#| "\n"
-#| " list [id <id> | uuid <id> | system | user]\n"
-#| " status\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
"ಬಳಕೆ: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+
+#: ../cli/src/connections.c:278
+#, c-format
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Show connections which are currently used by a device to connect to a "
+"network.\n"
+"Without a parameter, all active connections are listed. When <ID> is "
+"provided,\n"
+"the connection details are displayed instead.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Show in-memory and on-disk connections, some of which may also be active if\n"
+"a device is using that connection profile. Without a parameter, all profiles\n"
+"are listed. When <ID> is provided, the profile details are displayed instead."
+"\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"ಒಂದೠಜಾಲಬಂಧಕà³à²•à³† ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²²à³ ಒಂದೠಸಾಧನದಿಂದ ಪà³à²°à²¸à²•à³à²¤ ಬಳಸಲಾಗà³à²¤à³à²¤à²¿à²°à³à²µ "
+"ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ತೋರಿಸà³.\n"
+"ಒಂದೠನಿಯತಾಂಕವಿಲà³à²²à²¦à³†, ಎಲà³à²²à²¾ ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†. <ID> "
+"ಅನà³à²¨à³ ಒದಗಿಸಿದಾಗ,\n"
+"ಬದಲಿಗೆ ಸಂಪರà³à²•à²¦ ವಿವರಗಳನà³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Show in-memory and on-disk connections, some of ಮೆಮೊರಿಯಲà³à²²à²¿à²¨ ಮತà³à²¤à³ "
+"ಡಿಸà³à²•à²¿à²¨à²²à³à²²à²¿à²¨ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ತೋರಿಸà³, ಆ ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಒಂದೠಸಾಧನವà³\n"
+"ಬಳಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³à²¦à²²à³à²²à²¿ ಅವà³à²—ಳಲà³à²²à²¿ ಕೆಲವೠಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿರಬಹà³à²¦à³. ಒಂದೠನಿಯತಾಂಕವಿಲà³à²²à²¦à³†, "
+"ಎಲà³à²²à²¾ \n"
+"ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†. <ID> ಅನà³à²¨à³ ಒದಗಿಸಿದಾಗ,\n"
+"ಬದಲಿಗೆ ಸಂಪರà³à²•à²¦ ವಿವರಗಳನà³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+
+#: ../cli/src/connections.c:297
+#, c-format
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"ಒಂದೠಸಾಧನದಲà³à²²à²¿ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿ. ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಬೇಕಿರà³à²µ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ "
+"ಅದರ ಹೆಸರà³,\n"
+"UUID ಅಥವ D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"ಒಂದೠಸಂಪರà³à²•à²¦à³Šà²‚ದಿಗೆ ಒಂದೠಸಾಧನವನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿ. ಸಂಪರà³à²• ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ "
+"ಸà³à²µà²¯à²‚ಚಾಲಿತವಾಗಿ\n"
+"NetworkManager ನಿಂದ ಆಯà³à²•à³† ಮಾಡಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ifname - ಯಾವ ಸಾಧನದಲà³à²²à²¿ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಬೇಕೊ ಅದನà³à²¨à³ ಸೂಚಿಸà³à²¤à³à²¤à²¦à³†\n"
+"ap - ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²¬à³‡à²•à²¿à²°à³à²µ AP ಅನà³à²¨à³ ಸೂಚಿಸà³à²¤à³à²¤à²¦à³† (ಕೇವಲ ವೈ-ಫೈಗೆ ಮಾತà³à²° "
+"ಅನà³à²µà²¯à²¿à²¸à³à²¤à³à²¤à²¦à³†)\n"
+"nsp - ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²¬à³‡à²•à²¿à²°à³à²µ NSP ಅನà³à²¨à³ ಸೂಚಿಸà³à²¤à³à²¤à²¦à³† (ಕೇವಲ WiMAX ಗೆ ಮಾತà³à²° "
+"ಅನà³à²µà²¯à²¿à²¸à³à²¤à³à²¤à²¦à³†)\n"
+"\n"
+
+#: ../cli/src/connections.c:318
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"ಒಂದೠಸಾಧನದಿಂದ ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ (ಸಾಧನವೠಇನà³à²¨à²·à³à²Ÿà³ ಸà³à²µà²¯à²‚-"
+"ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆ\n"
+"ಮಾಡದಂತೆ ನಿರà³à²¬à²‚ಧಿಸಿದೆ). ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಬೇಕಿರà³à²µ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅದರ ಹೆಸರà³, UUID "
+"ಅಥವ \n"
+"D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/connections.c:331
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+
+#: ../cli/src/connections.c:408
+#, c-format
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à²¿à²¨à²²à³à²²à²¿ ಒಂದೠಗà³à²£à²µà²¨à³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¿.\n"
+"ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅದರ ಹೆಸರà³, UUID ಅಥವ D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/connections.c:420
+#, c-format
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"ಸಂವಾದಾತà³à²®à²• ಸಂಪಾದಕದಲà³à²²à²¿ ಈಗಿರà³à²µ ಒಂದೠಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಸಂಪಾದಿಸಿ.\n"
+"ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅದರ ಹೆಸರà³, UUID ಅಥವ D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"ಒಂದೠಸಂವಾದಾತà³à²®à²• ಸಂಪಾದಕದಲà³à²²à²¿ ಒಂದೠಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಿ.\n"
+"\n"
+
+#: ../cli/src/connections.c:436
+#, c-format
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"ಒಂದೠಸಂಪರà³à²• ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅಳಿಸಿ.\n"
+"ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅದರ ಹೆಸರà³, UUID ಅಥವ D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†\n"
"\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:634
+#: ../cli/src/connections.c:448
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "ದೋಷ: 'con list': %s"
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection reload { help }\n"
+"\n"
+"ಡಿಸà³à²•à²¿à²¨à²¿à²‚ದ ಎಲà³à²²à²¾ ಸಂಪರà³à²• ಕಡತಗಳನà³à²¨à³ ಮರಳಿ ಲೋಡೠಮಾಡà³.\n"
+"\n"
+
+#: ../cli/src/connections.c:457
+#, c-format
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"ಡಿಸà³à²•à²¿à²¨à²¿à²‚ದ ಒಂದೠಅಥವ ಹೆಚà³à²šà²¿à²¨ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಲೋಡà³/ಮರà³à²²à³‹à²¡à³ ಮಾಡà³. NetworkManager ಗೆ "
+"ಅದರ\n"
+"ಇತà³à²¤à³€à²šà²¿à²¨ ಸà³à²¥à²¿à²¤à²¿à²¯ ಅರಿವಿದೆ ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ ಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²²à³ ಒಂದೠಸಂಪರà³à²• ಕಡತವನà³à²¨à³ "
+"ಕೈಯಾರೆ ಸಂಪಾದಿಸಿದ ನಂತರ ಇದನà³à²¨à³ \n"
+"ಬಳಸಿ.\n"
+"\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:636
+#: ../cli/src/connections.c:515
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'con list': %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
+msgid "Error: 'list configured': %s"
+msgstr "ದೋಷ: 'list configured': %s"
-#: ../cli/src/connections.c:266
+#: ../cli/src/connections.c:523
msgid "Connection details"
msgstr "ಸಂಪರà³à²•à²¦ ವಿವರಗಳà³"
-#: ../cli/src/connections.c:509
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "ಎಂದಿಗೂ ಬೇಡ"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:510 ../cli/src/connections.c:511
-#: ../cli/src/connections.c:739 ../cli/src/connections.c:740
-#: ../cli/src/connections.c:742 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:748 ../cli/src/settings.c:823
-#: ../cli/src/settings.c:943 ../cli/src/settings.c:1225
-#: ../cli/src/settings.c:1226 ../cli/src/settings.c:1228
-#: ../cli/src/settings.c:1230 ../cli/src/settings.c:1231
-#: ../cli/src/settings.c:1362 ../cli/src/settings.c:1363
-#: ../cli/src/settings.c:1364 ../cli/src/settings.c:1365
-#: ../cli/src/settings.c:1442 ../cli/src/settings.c:1443
-#: ../cli/src/settings.c:1444 ../cli/src/settings.c:1445
-#: ../cli/src/settings.c:1446 ../cli/src/settings.c:1447
-#: ../cli/src/settings.c:1448 ../cli/src/settings.c:1449
-#: ../cli/src/settings.c:1450 ../cli/src/settings.c:1451
-#: ../cli/src/settings.c:1452 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1454 ../cli/src/settings.c:1525
-#: ../cli/src/settings.c:1867 ../cli/src/settings.c:1904
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:442
msgid "yes"
msgstr "ಹೌದà³"
-#: ../cli/src/connections.c:510 ../cli/src/connections.c:511
-#: ../cli/src/connections.c:739 ../cli/src/connections.c:740
-#: ../cli/src/connections.c:742 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:748 ../cli/src/settings.c:750
-#: ../cli/src/settings.c:823 ../cli/src/settings.c:943
-#: ../cli/src/settings.c:1225 ../cli/src/settings.c:1226
-#: ../cli/src/settings.c:1228 ../cli/src/settings.c:1230
-#: ../cli/src/settings.c:1231 ../cli/src/settings.c:1362
-#: ../cli/src/settings.c:1363 ../cli/src/settings.c:1364
-#: ../cli/src/settings.c:1365 ../cli/src/settings.c:1442
-#: ../cli/src/settings.c:1443 ../cli/src/settings.c:1444
-#: ../cli/src/settings.c:1445 ../cli/src/settings.c:1446
-#: ../cli/src/settings.c:1447 ../cli/src/settings.c:1448
-#: ../cli/src/settings.c:1449 ../cli/src/settings.c:1450
-#: ../cli/src/settings.c:1451 ../cli/src/settings.c:1452
-#: ../cli/src/settings.c:1453 ../cli/src/settings.c:1454
-#: ../cli/src/settings.c:1525 ../cli/src/settings.c:1867
-#: ../cli/src/settings.c:1904
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:444
msgid "no"
msgstr "ಇಲà³à²²"
-#: ../cli/src/connections.c:585
-#| msgid "Connection details"
-msgid "Connection list"
-msgstr "ಸಂಪರà³à²•à²¦ ಪಟà³à²Ÿà²¿"
-
-#: ../cli/src/connections.c:598 ../cli/src/connections.c:1135
-#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1688
-#: ../cli/src/connections.c:1697 ../cli/src/connections.c:1707
-#: ../cli/src/connections.c:1719 ../cli/src/connections.c:1828
-#: ../cli/src/connections.c:1930 ../cli/src/devices.c:1127
-#: ../cli/src/devices.c:1137 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1263 ../cli/src/devices.c:1627
-#: ../cli/src/devices.c:1634 ../cli/src/devices.c:1648
-#: ../cli/src/devices.c:1655 ../cli/src/devices.c:1672
-#: ../cli/src/devices.c:1683 ../cli/src/devices.c:1904
-#: ../cli/src/devices.c:1911
+#: ../cli/src/connections.c:667
+msgid "List of configured connections"
+msgstr "ಸಂರಚಿತಗೊಂಡ ಸಂಪರà³à²•à²—ಳ ಪಟà³à²Ÿà²¿"
+
+#: ../cli/src/connections.c:684 ../cli/src/connections.c:1225
+#: ../cli/src/connections.c:1785 ../cli/src/connections.c:1801
+#: ../cli/src/connections.c:1810 ../cli/src/connections.c:1820
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:7563
+#: ../cli/src/connections.c:7738 ../cli/src/devices.c:1633
+#: ../cli/src/devices.c:1641 ../cli/src/devices.c:2028
+#: ../cli/src/devices.c:2035 ../cli/src/devices.c:2049
+#: ../cli/src/devices.c:2056 ../cli/src/devices.c:2073
+#: ../cli/src/devices.c:2081 ../cli/src/devices.c:2277
+#: ../cli/src/devices.c:2373 ../cli/src/devices.c:2380
#, c-format
msgid "Error: %s argument is missing."
msgstr "ದೋಷ: %s ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/connections.c:611
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "ದೋಷ: %s - ಅಂತಹ ಯಾವà³à²¦à³† ಸಂಪರà³à²•à²—ಳಿಲà³à²²."
-#: ../cli/src/connections.c:617 ../cli/src/connections.c:1732
-#: ../cli/src/connections.c:1845 ../cli/src/connections.c:1937
-#: ../cli/src/devices.c:911 ../cli/src/devices.c:991 ../cli/src/devices.c:1151
-#: ../cli/src/devices.c:1269 ../cli/src/devices.c:1696
-#: ../cli/src/devices.c:1917
-#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ನಿಯತಾಂಕಗಳà³: %s\n"
-
-#: ../cli/src/connections.c:626
+#: ../cli/src/connections.c:710
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "ದೋಷ: ಮಾನà³à²¯à²µà²¾à²¦ ಯಾವà³à²¦à³† ನಿಯತಾಂಖವನà³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²²."
+msgid "Error: 'show configured': %s"
+msgstr "ದೋಷ: 'show configured': %s"
-#: ../cli/src/connections.c:641 ../cli/src/connections.c:2033
-#: ../cli/src/devices.c:2128 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:715 ../cli/src/connections.c:1853
+#: ../cli/src/connections.c:7804 ../cli/src/connections.c:7845
+#: ../cli/src/connections.c:7997 ../cli/src/devices.c:2256
+#: ../cli/src/devices.c:2630 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
msgid "Error: %s."
msgstr "ದೋಷ: %s."
-#: ../cli/src/connections.c:654
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/connections.c:656
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
-#: ../cli/src/connections.c:670
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
+
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಸಿದà³à²§à²—ೊಳಿಕೆ)"
-#: ../cli/src/connections.c:672
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ದೃಢೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†)"
-#: ../cli/src/connections.c:674
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN ಸಂಪರà³à²•à²¿à²¤à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/connections.c:676
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN ಸಂಪರà³à²•à²—ೊಂಡಿದೆ (IP ಸಂರಚನೆಯನà³à²¨à³ ಪಡೆಯಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/connections.c:678
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN ಸಂಪರà³à²•à²—ೊಂಡಿದೆ"
-#: ../cli/src/connections.c:680
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN ಸಂಪರà³à²•à²µà³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/connections.c:682
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN ಸಂಪರà³à²• ಕಡಿದಿದೆ"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:745
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "ಲಭà³à²¯à²µà²¿à²²à³à²²"
-#: ../cli/src/connections.c:939 ../cli/src/connections.c:1163
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "ದೋಷ: 'con status': %s"
-
-#: ../cli/src/connections.c:941 ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:1012
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'con status': %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
+msgid "Error: 'list active': %s"
+msgstr "ದೋಷ: ''list active': %s"
-#: ../cli/src/connections.c:949
-#| msgid "Active connections"
+#: ../cli/src/connections.c:1020
msgid "Active connection details"
msgstr "ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ವಿವರಗಳà³"
-#: ../cli/src/connections.c:1085 ../cli/src/connections.c:1747
-#: ../cli/src/connections.c:1860 ../cli/src/connections.c:1951
-#: ../cli/src/devices.c:938 ../cli/src/devices.c:1000
-#: ../cli/src/devices.c:1166 ../cli/src/devices.c:1299
-#: ../cli/src/devices.c:1718 ../cli/src/devices.c:1946
-#: ../cli/src/network-manager.c:311
-#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "ದೋಷ: NetworkManager ಚಾಲನೆಯಲà³à²²à²¿à²¦à³†à²¯à³† ಎಂದೠಪತà³à²¤à³† ಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²:%s."
-
-#: ../cli/src/connections.c:1089 ../cli/src/connections.c:1751
-#: ../cli/src/connections.c:1864 ../cli/src/connections.c:1955
-#: ../cli/src/devices.c:942 ../cli/src/devices.c:1004
-#: ../cli/src/devices.c:1170 ../cli/src/devices.c:1303
-#: ../cli/src/devices.c:1722 ../cli/src/devices.c:1950
-#: ../cli/src/network-manager.c:315
-#, c-format
-#| msgid "NetworkManager status"
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:1899 ../cli/src/connections.c:7592
+#: ../cli/src/connections.c:7707 ../cli/src/connections.c:7798
+#: ../cli/src/connections.c:7826 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1403
+#: ../cli/src/devices.c:1538 ../cli/src/devices.c:1675
+#: ../cli/src/devices.c:2115 ../cli/src/devices.c:2414
+#: ../cli/src/network-manager.c:484
+#, c-format
msgid "Error: NetworkManager is not running."
msgstr "ದೋಷ: NetworkManager ಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²."
-#: ../cli/src/connections.c:1121
-msgid "Active connections"
-msgstr "ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳà³"
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ಪಟà³à²Ÿà²¿"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
#, c-format
-#| msgid "Error: %s - no such connection."
msgid "Error: '%s' is not an active connection."
msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಯಾವà³à²¦à³† ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²µà²²à³à²²."
-#: ../cli/src/connections.c:1151
+#: ../cli/src/connections.c:1251
#, c-format
-#| msgid "Unknown parameter: %s\n"
-msgid "Error: unknown parameter: %s"
-msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ನಿಯತಾಂಕಗಳà³: %s"
+msgid "Error: 'show active': %s"
+msgstr "ದೋಷ: 'show active': %s"
-#: ../cli/src/connections.c:1258
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "'%s' ಎಂಬ ಸಾಧನದಲà³à²²à²¿ ಯಾವà³à²¦à³† ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²µà³ ಕಂಡà³à²¬à²‚ದಿಲà³à²²"
-#: ../cli/src/connections.c:1266
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "ಯಾವà³à²¦à³† ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²• ಅಥವ ಸಾಧನವೠಕಂಡà³à²¬à²‚ದಿಲà³à²²"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "'%s' ಎಂಬ ಸಾಧನವೠ'%s' ಸಂಪರà³à²•à²¦à³Šà²‚ದಿಗೆ ಹೊಂದಿಕೊಳà³à²³à³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/connections.c:1340
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "'%s' ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ ಯಾವà³à²¦à³† ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²"
-#: ../cli/src/connections.c:1352
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಕಾರಣ"
-#: ../cli/src/connections.c:1354
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "ಯಾವà³à²¦à³‚ ಇಲà³à²²"
-#: ../cli/src/connections.c:1356
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಪರà³à²• ಕಡಿದà³à²¹à³‹à²—ಿದೆ"
-#: ../cli/src/connections.c:1358
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "ಮೂಲ ಜಾಲಬಂಧ ಸಂಪರà³à²•à²•à³à²•à³† ತಡೆಯà³à²‚ಟಾಗಿದೆ"
-#: ../cli/src/connections.c:1360
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN ಸೇವೆಯನà³à²¨à³ ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²—ಿ ನಿಲà³à²²à²¿à²¸à²²à²¾à²—ಿದೆ"
-#: ../cli/src/connections.c:1362
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN ಸೇವೆಯೠಅಮಾನà³à²¯à²µà²¾à²¦ ಸಂರಚನೆಯನà³à²¨à³ ಮರಳಿಸಿದೆ"
-#: ../cli/src/connections.c:1364
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "ಸಂಪರà³à²•à²¦ ಪà³à²°à²¯à²¤à³à²¨à²¦ ಕಾಲಾವಧಿ ಮೀರಿದೆ"
-#: ../cli/src/connections.c:1366
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN ಸೇವೆಯೠಸರಿಯಾದ ಸಮಯದಲà³à²²à²¿ ಆರಂಭಗೊಳà³à²³à²²à²¿à²²à³à²²"
-#: ../cli/src/connections.c:1368
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN ಸೇವೆಯೠಆರಂಭಗೊಳà³à²³à²²à³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/connections.c:1370
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "ಯಾವà³à²¦à³† ಮಾನà³à²¯à²µà²¾à²¦ VPN ರಹಸà³à²¯à²—ಳಿಲà³à²² (ಸೀಕà³à²°à³‡à²Ÿà³â€Œà²—ಳಿಲà³à²²)"
-#: ../cli/src/connections.c:1372
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ VPN ರಹಸà³à²¯à²—ಳà³"
-#: ../cli/src/connections.c:1374
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ತೆಗೆದೠಹಾಕಲಾಗಿದೆ"
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1596
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ (D-ಬಸೠಸಕà³à²°à²¿à²¯ ಮಾರà³à²—: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1396 ../cli/src/connections.c:1497
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../cli/src/connections.c:1421
+#: ../cli/src/connections.c:1507
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
"VPN ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ (D-ಬಸೠಸಕà³à²°à²¿à²¯ ಮಾರà³à²—: %s)\n"
-#: ../cli/src/connections.c:1429
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "ದೋಷ: ಸಂಪರà³à²• ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: %s."
-#: ../cli/src/connections.c:1526 ../cli/src/devices.c:1060
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "ದೋಷ: ಕಾಲಾವಧಿ %d sec ತೀರಿದೆ."
-#: ../cli/src/connections.c:1587
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"ದೋಷ: ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೊಂದಿಗೆ ಮà³à²‚ದà³à²µà²°à³†à²¯à³à²µ ಮೊದಲೠ'%s' ಸಾಧನವೠಉಪಪà³à²°à²•à³à²°à²¿à²¯à³†à²—ಳಿಗಾಗಿ "
+"ಕಾಯà³à²¤à³à²¤à²¿à²¦à³†."
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "ದೋಷ: ಸಂಪರà³à²• ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../cli/src/connections.c:1681 ../cli/src/connections.c:1836
-#: ../cli/src/connections.c:1964
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಂಪರà³à²•: %s."
+msgid "unknown device '%s'."
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಸಾಧನ '%s'."
+
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "ಒಂದೊ ಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²µà²¾à²—ಿಲà³à²² ಅಥವ ಒದಗಿಸಲಾದ ಸಾಧನವಲà³à²²"
-#: ../cli/src/connections.c:1727 ../cli/src/devices.c:1145
-#: ../cli/src/devices.c:1691
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "ಸಂಪರà³à²• (ಹೆಸರà³, UUID, ಅಥವ ಮಾರà³à²—): "
+
+#: ../cli/src/connections.c:1829 ../cli/src/devices.c:1171
+#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
+#: ../cli/src/devices.c:2386
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "ದೋಷ: '%s' ಎಂಬ ಕಾಲಾವಧಿ ತೀರಿಕೆ ಮೌಲà³à²¯à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ."
+msgid "Unknown parameter: %s\n"
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ನಿಯತಾಂಕಗಳà³: %s\n"
-#: ../cli/src/connections.c:1740 ../cli/src/connections.c:1853
-#: ../cli/src/connections.c:1944
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "ಸಿದà³à²§à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
+
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "ದೋಷ: id ಅಥವ uuid ಅನà³à²¨à³ ಸೂಚಿಸಬೇಕà³."
+msgid "Error: No connection specified."
+msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²²."
-#: ../cli/src/connections.c:1773
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸೂಕà³à²¤à²µà²¾à²¦ ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²: %s."
+msgid "'%s' not among [%s]"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ [%s] ಎಂಬà³à²¦à²°à²²à³à²²à²¿à²²à³à²² "
-#: ../cli/src/connections.c:1775
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: No suitable device found."
-msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸೂಕà³à²¤à²µà²¾à²¦ ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²."
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "ದೋಷ: '%s': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ %s MAC ವಿಳಾಸವಲà³à²²."
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "ಎತರà³à²¨à³†à²Ÿà³"
-#: ../cli/src/connections.c:1889
+#: ../cli/src/connections.c:2343
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "ಎಚà³à²šà²°à²¿à²•à³†: ಸಂಪರà³à²•à²µà³ ಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿಲà³à²²\n"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "ದೋಷ: 'mtu: '%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MTU ಅಲà³à²²."
-#: ../cli/src/connections.c:1903
+#: ../cli/src/connections.c:2359
#, c-format
-#| msgid "Error: Connection activation failed: %s"
-msgid "Error: Connection deletion failed: %s"
-msgstr "ದೋಷ: ಸಂಪರà³à²• ಅಳಿಸà³à²µà²¿à²•à³†à²¯à³ ವಿಫಲಗೊಂಡಿದೆ: %s"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "ದೋಷ: 'parent': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಲà³à²²."
-#: ../cli/src/connections.c:2024
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "ದೋಷ: 'con' ಆಜà³à²·à³† '%s' ಎಂಬà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "ದೋಷ: 'p-key': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ InfiniBand P_KEY ಅಲà³à²²."
-#: ../cli/src/connections.c:2092
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "ದೋಷ: D-Bus ನೊಂದಿಗೆ ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²²à³ ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"ದೋಷ: 'mode: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ InfiniBand ವರà³à²—ಾವಣೆ ಕà³à²°à²®à²µà²²à³à²² "
+"[ಡೇಟಾಗà³à²°à²¾à²®à³, ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ]"
-#: ../cli/src/connections.c:2100
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "ದೋಷ: ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಿದà³à²§à²¤à³†à²—ಳೠಕಂಡà³à²¬à²‚ದಿಲà³à²²."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "ದೋಷ: 'flags': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <0-7> ಬಳಸಿ."
-#: ../cli/src/connections.c:2110
+#: ../cli/src/connections.c:2434
#, c-format
-#| msgid "Error: Can't obtain connections: settings services are not running."
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "ದೋಷ: ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಪಡೆಯಲಾಗಿಲà³à²²: ಸಿದà³à²§à²¤à³†à²—ಳ ಸೇವೆಯೠಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "ದೋಷ: '%s': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; %s"
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:190
-#: ../cli/src/devices.c:206
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "ದೋಷ: '%s': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <%u-%u> ಬಳಸಿ."
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ಎತರà³à²¨à³†à²Ÿà³"
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "ವೈ-ಫೈ"
-#. 2
-#: ../cli/src/devices.c:86
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 3 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#: ../cli/src/connections.c:2559 ../cli/src/connections.c:2613
+#: ../cli/src/connections.c:2735 ../cli/src/connections.c:2781
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:2909
+#: ../cli/src/connections.c:3072 ../cli/src/connections.c:3168
+#: ../cli/src/connections.c:3250
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "ನೀವೠಅದನà³à²¨à³ ಒದಗಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à²¾? (ಹೌದà³/ಇಲà³à²²) [ಹೌದà³]"
-#. 4
-#: ../cli/src/devices.c:88
-#| msgid "WIFI-PROPERTIES"
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
+#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+msgid "MTU [auto]: "
+msgstr "MTU [ಸà³à²µà²¯à²‚]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:203
-#| msgid "DNS"
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
+#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+msgid "MAC [none]: "
+msgstr "MAC [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
-#. 6
-#: ../cli/src/devices.c:90
-#| msgid "IP4-DNS"
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "ತದà³à²°à³‚ಪà³à²—ೊಳಿಸಿದ MAC [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 5 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
-#. 8
-#: ../cli/src/devices.c:92
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "ವರà³à²—ಾವಣೆ ಕà³à²°à²®à²µà²²à³à²² [ಡೇಟಾಗà³à²°à²¾à²®à³, ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ] [datagram]:"
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "ಮೂಲ ಸಂಪರà³à²•à²¸à²¾à²§à²¨ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "BOND"
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#. 11
-#: ../cli/src/devices.c:95
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "ದೋಷ: 'parent' ಅನà³à²¨à³ ಸೂಚಿಸಿದಾಗ 'p-key' ಖಡà³à²¡à²¾à²¯à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³†.\n"
+
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\n"
+
+#: ../cli/src/connections.c:2703 ../cli/src/connections.c:2805
+#: ../cli/src/connections.c:3024 ../cli/src/connections.c:3226
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "ನೀವೠಅದನà³à²¨à³ ಒದಗಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à²¾? (ಹೌದà³/ಇಲà³à²²) [ಹೌದà³]"
+
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "'PPPoE' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 4 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "ಗà³à²ªà³à²¤à²ªà²¦ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "ಸೇವೆ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "'mobile broadband' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 2 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "ಬಳಕೆದಾರ ಹೆಸರೠ[ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "'bluetooth' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\n"
+
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "ಬà³à²²à³‚ಟೂತೠಬಗೆ (panu, dun-gsm ಅವ dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "ದೋಷ: 'bt-type': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಬà³à²²à³‚ಟೂತೠಬಗೆಯಲà³à²².\n"
-#. 2
-#: ../cli/src/devices.c:111
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 4 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN ಫà³à²²à²¾à²—à³â€Œà²—ಳೠ(<0-7>) [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "ಇಂಗà³à²°à³†à²¸à³ ಆದà³à²¯à²¤à³† ನಕà³à²·à³†à²—ಳೠ[ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "ಇಗà³à²°à³†à²¸à³ ಆದà³à²¯à²¤à³† ನಕà³à²·à³†à²—ಳೠ[ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "'bond' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 3 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "ಬಾಂಡಿಂಗೠಸà³à²¥à²¿à²¤à²¿ [balance-rr]: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "ಬಾಂಡಿಂಗೠಪà³à²°à²¾à²¥à²®à²¿à²• ಸಂಪರà³à²•à²¸à²¾à²§à²¨ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
+
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "ದೋಷ: 'primary': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "ಬಾಂಡಿಂಗೠಮೇಲà³à²µà²¿à²šà²¾à²°à²£à²¾ ಸà³à²¥à²¿à²¤à²¿ (miimon ಅಥವ arp) [miimon]: "
+
+#: ../cli/src/connections.c:2950
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à²¾ ಸà³à²¥à²¿à²¤à²¿à²¯à²¾à²—ಿಲà³à²²; '%s' ಅಥವ '%s' "
+"ಅನà³à²¨à³ ಬಳಸಿ.\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "ಬಾಂಡಿಂಗೠmiimon [100]: "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "ದೋಷ: 'miimon': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <0-%u> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "ಬಾಂಡಿಂಗೠಡೌನà³â€Œà²¡à²¿à²²à³† [0]: "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "ದೋಷ: 'downdelay:' '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <0-%u> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "ಬಾಂಡಿಂಗೠಅಪà³â€Œà²¡à²¿à²²à³† [0]: "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "ದೋಷ: 'updelay': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <0-%u> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "ಬಾಂಡಿಂಗೠarp-interval [0]: "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr ""
+"ದೋಷ: 'arp-interval': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <0-%u> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "ಬಾಂಡಿಂಗೠarp-ip-target [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "'%s' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "ಟೀಮೠJSON ಸಂರಚನೆ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "ಟೀಮà³"
+
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "ಸೇವಕ-ಸà³à²²à³‡à²µà³"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "'bridge' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 6 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP ಅನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸೠ(yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "ದೋಷ: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3093
+msgid "STP priority [128]: "
+msgstr "ಆದà³à²¯à²¤à³† ಆದà³à²¯à²¤à³† [128]: "
+
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "ದೋಷ: 'priority': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <0-%d> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "ಫಾರà³à²µà²¾à²°à³à²¡à³ ವಿಳಂಬ [15]: "
+
+#: ../cli/src/connections.c:3109
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr ""
+"ದೋಷ: 'forward-delay': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <2-30> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:3118
+msgid "Hello time [2]: "
+msgstr "ಹೆಲೊ ಟೈಮೠ[2]: "
+
+#: ../cli/src/connections.c:3122
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr ""
+"ದೋಷ: 'hello-time': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <1-10> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "ಗರಿಷà³à²Ÿ ಕಾಲಾವಧಿ [20]: "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "ದೋಷ: 'max-age': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <6-40> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "MAC ವಿಳಾಸದ ಕಾಲಾವಧಿ ತೀರಿಕೆಯ ಸಮಯ [300]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr ""
+"ದೋಷ: 'ageing-time': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <0-1000000> ಆಗಿಲà³à²²."
+"\n"
+
+#: ../cli/src/connections.c:3167
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "'bridge-slave' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 3 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "ಬà³à²°à²¿à²œà³ ಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨à²¦ ಆದà³à²¯à²¤à³† [32]: "
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "ಬà³à²°à²¿à²œà³ ಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨à²¦ STP ಮಾರà³à²—ದ ಬೆಲೆ [100]: "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "ಹೇರà³à²ªà²¿à²¨à³ (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "ದೋಷ: 'hairpin': '%s'.\n"
+
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "'VPN' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "'OLPC Mesh' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 2 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC ಮೆಶೠಚಾನಲೠ[1]: "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "ದೋಷ: 'channel': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <1-13> ಆಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP ಎನಿಕà³à²¯à²¾à²¸à³à²Ÿà³ MAC ವಿಳಾಸ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 ವಿಳಾಸ (IP[/plen] [gateway]) [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 ವಿಳಾಸ (IP[/plen] [gateway]) [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " ವಿಳಾಸವನà³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸೇರಿಸಲಾಗಿದೆ: %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " ಎಚà³à²šà²°à²¿à²•à³†: ವಿಳಾಸವೠಈಗಾಗಲೆ ಇದೆ: %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " ಎಚà³à²šà²°à²¿à²•à³†: ಕೊನೆಯಲà³à²²à²¿à²°à³à²µ ನಿರà³à²ªà²¯à³à²•à³à²¤à²µà²¾à²¦à³à²¦à²¨à³à²¨à³ ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†: '%s'\n"
+
+#: ../cli/src/connections.c:3343 ../cli/src/connections.c:4192
+#: ../cli/src/connections.c:4247 ../cli/src/connections.c:4646
+#: ../cli/src/connections.c:4656
+msgid "Error: "
+msgstr "ದೋಷ: "
+
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "ನೀವೠIP ವಿಳಾಸವನà³à²¨à³ ಸೇರಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "ವಿಳಾಸವನà³à²¨à³ ಸೇರಿಸà³à²µà³à²¦à²¨à³à²¨à³ ಪೂರà³à²£à²—ೊಳಿಸಲೠ<Enter> ಅನà³à²¨à³ ಒತà³à²¤à²¿.\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "ದೋಷ: 'parent': 'p-key' ಇಲà³à²²à²¦à³† ಮಾನà³à²¯à²µà²¾à²—ಿರà³à²µà³à²¦à²¿à²²à³à²²."
+
+#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+msgid "Error: 'ssid' is required."
+msgstr "ದೋಷ: 'ssid' ಯ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP ಹೆಸರà³:"
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "ದೋಷ: 'nsp' ಯ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "PPPoE ಬಳಕೆದಾರ ಹೆಸರà³: "
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "ದೋಷ: 'username' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "ದೋಷ: 'apn' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "ಬà³à²²à³‚ಟೂತà³â€Œ ಸಾಧನದ ವಿಳಾಸ:"
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "ದೋಷ: 'addr' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "ದೋಷ: 'bt-type': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; [%s, %s (%s), %s] ಅನà³à²¨à³ ಬಳಸಿ."
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN ಮೂಲ ಸಾಧನ ಅಥವ ಸಂಪರà³à²• UUID: "
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "ದೋಷ: 'dev' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:3928
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:3931
+msgid "Error: 'id' is required."
+msgstr "ದೋಷ: 'id' ಯ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "ದೋಷ: 'id': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <0-4095> ಬಳಸಿ."
+
+#: ../cli/src/connections.c:3947
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr ""
+"ದೋಷ: 'dev': '%s' ಎನà³à²¨à³à²µà³à²¦à³ UUID ಆಗಲಿ, ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಲಿ ಅಥವ MAC ಆಗಲಿ ಅಲà³à²²."
+""
+
+#: ../cli/src/connections.c:4082
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "ದೋಷ: 'mode': %s"
+
+#: ../cli/src/connections.c:4091
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "ದೋಷ: 'primary': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಿಲà³à²²."
+
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "ಬಾಂಡೠಮಾಸà³à²Ÿà²°à³:"
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "ದೋಷ: 'master' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
+#: ../cli/src/connections.c:4427
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: 'type' ಅನà³à²¨à³ ಪà³à²°à²¸à²•à³à²¤ ಕಡೆಗಣಿಸಲಾಗಿದೆ. ನಾವೠಈಗ ಕೇವಲ ಇತರà³à²¨à³†à²Ÿà³ "
+"ಸà³à²²à³‡à²µà³â€Œà²—ಳನà³à²¨à³ ಮಾತà³à²° ಬೆಂಬಲಿಸà³à²¤à³à²¤à³‡à²µà³†.\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "ತಂಡದ ಪà³à²°à²®à³à²–:"
+
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "ದೋಷ: 'stp': %s."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "ಬà³à²°à²¿à²œà³ ಮಾಸà³à²Ÿà²°à³: "
+
+#: ../cli/src/connections.c:4421
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "ದೋಷ: 'master': '%s' ಎನà³à²¨à³à²µà³à²¦à³ UUID ಅಥವ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²µà²¾à²—ಿಲà³à²²."
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "ದೋಷ: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "VPN ಬಗೆ: "
+
+#: ../cli/src/connections.c:4509
+msgid "Error: 'vpn-type' is required."
+msgstr "ದೋಷ: 'vpn-type' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:4520
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "ದೋಷ: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4578
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "ದೋಷ: 'channel': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <1-13> ಬಳಸಿ."
+
+#: ../cli/src/connections.c:4613
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆಯಾಗಿಲà³à²²."
+
+#: ../cli/src/connections.c:4711
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "ದೋಷ: '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
+
+#: ../cli/src/connections.c:4715
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "'%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸೇರಿಸಲಾಗಿದೆ.\n"
+
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "ಸಂಪರà³à²•à²¦ ಬಗೆ: "
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "ದೋಷ: 'type' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆ: %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "ದೋಷ: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರೠ[*]:: "
+
+#: ../cli/src/connections.c:4801
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "ದೋಷ: 'ifname' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr ""
+"ದೋಷ: 'ifname': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಲಿ ಅಥವ '*' ಆಗಲಿ "
+"ಆಗಿಲà³à²²."
+
+#: ../cli/src/connections.c:5627
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' ಸಿದà³à²§à²¤à³†à²¯ ಮೌಲà³à²¯à²—ಳà³]\n"
+
+#: ../cli/src/connections.c:5708
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ ಮà³à²–à³à²¯ ಪರಿವಿಡಿ ]---\n"
+"goto [<setting> | <prop>] :: ಸಿದà³à²§à²¤à³† ಅಥವ ಗà³à²£à²•à³à²•à³† ಹೋಗà³\n"
+"remove <setting>[.<prop>] | <prop> :: ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³ ಅಥವ ಗà³à²£à²¦ "
+"ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಮರà³à²¹à³Šà²‚ದಿಸà³\n"
+"set [<setting>.<prop> <value>] :: ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³\n"
+"describe [<setting>.<prop>] :: ಗà³à²£à²µà²¨à³à²¨à³ ವಿವರಿಸà³\n"
+"print [all] :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
+"verify [all] :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸà³\n"
+"save :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸà³\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³\n"
+"back :: ಮೇಲಿನ ಹಂತಕà³à²•à³† ಹೋಗೠ(ಹಿಂದಕà³à²•à³†)\n"
+"help/? [<command>] :: ಈ ನೆರವನà³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
+"nmcli <conf-option> <value> :: nmcli ಸಂರಚನೆ\n"
+"quit :: nmcli ಇಂದ ನಿರà³à²—ಮಿಸà³\n"
+
+#: ../cli/src/connections.c:5735
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: ಸಂಪಾದಿಸಲೠಸಿದà³à²§à²¤à³†/ಗà³à²£à²•à³à²•à³† ಹೋಗà³\n"
+"\n"
+"ಈ ಆದೇಶವೠಒಂದೠಸಿದà³à²§à²¤à³† ಅಥವ ಗà³à²£à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸಲೠಅದಕà³à²•à³† ಹೋಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆಗಳà³: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5742
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³ ಅಥವ ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ "
+"ಮರà³à²¹à³Šà²‚ದಿಸà³\n"
+"\n"
+"ಈ ಆದೇಶವೠಸಂಪೂರà³à²£ ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಸಂಪರà³à²•à²¦à²¿à²‚ದ ತೆಗೆದà³à²¹à²¾à²•à³à²¤à³à²¤à²¦à³†, ಅಥವ ಒಂದೠಗà³à²£à²µà²¨à³à²¨à³\n"
+"ನೀಡಲಾಗಿದà³à²¦à²°à³† ಆ ಗà³à²£à²µà²¨à³à²¨à³ ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ಮೌಲà³à²¯à²•à³à²•à³† ಮರà³à²¹à³Šà²‚ದಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆಗಳà³: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5749
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³\n"
+"\n"
+"ಈ ಆದೇಶವೠಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆ: nmcli> set con.id My connection\n"
+
+#: ../cli/src/connections.c:5754
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: ಗà³à²£à²µà²¨à³à²¨à³ ವಿವರಿಸà³\n"
+"\n"
+"ಗà³à²£à²¦ ವಿವರಣೆಯನà³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ಎಲà³à²²à²¾ NM ಸಿದà³à²§à²¤à³†à²—ಳೠಮತà³à²¤à³ ಗà³à²£à²—ಳನà³à²¨à³ ನೋಡಲೠನೀವೠ"
+"nm-settings(5) ಮಾಹಿತಿ ಪà³à²Ÿà²µà²¨à³à²¨à³ ನೋಡಬಹà³à²¦à³.\n"
+
+#: ../cli/src/connections.c:5759
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: ಸಿದà³à²§à²¤à³† ಅಥವ ಸಂಪರà³à²•à²¦ ಮೌಲà³à²¯à²—ಳನà³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
+"\n"
+"ಪà³à²°à²¸à²•à³à²¤ ಗà³à²£ ಅಥವ ಸಂಪೂರà³à²£ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆ: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5764
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: ಸಿದà³à²§à²¤à³† ಅಥವ ಸಂಪರà³à²•à²¦ ಮಾನà³à²¯à²¤à³†à²¯à²¨à³à²¨à³ ಪರಿಶೀಲಿಸೠ\n"
+"\n"
+"ಸಿದà³à²§à²¤à³† ಅಥವ ಸಂಪರà³à²•à²µà³ ಮಾನà³à²¯à²µà²¾à²—ಿದೆಯೆ ಮತà³à²¤à³ ನಂತರದ ಸಮಯದಲà³à²²à²¿ ಉಳಿಸಬಹà³à²¦à³† "
+"ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¦à³†. ಇದೠದೋಷ ಉಂಟಾದಾಗ ಅಮಾನà³à²¯à²µà²¾à²¦ ಮೌಲà³à²¯à²—ಳನà³à²¨à³ "
+"ಸೂಚಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆಗಳà³: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5771
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸà³\n"
+"\n"
+"ಸಂಪರà³à²•à²µà²¨à³à²¨à³ NetworkManager ಗೆ ಕಳà³à²¹à²¿à²¸à³à²¤à³à²¤à²¦à³† ಅದೠಉಳಿಸà³à²¤à³à²¤à²¦à³†.\n"
+
+#: ../cli/src/connections.c:5775
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³\n"
+"\n"
+"ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಲಭà³à²¯à²µà²¿à²°à³à²µ ಆಯà³à²•à³†à²—ಳà³:\n"
+"<ifname> - ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಾವ ಸಾಧನದಲà³à²²à²¿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಬೇಕೊ ಆ ಸಾಧನ\n"
+"/<ap>|<nsp> - AP (Wi-Fi) ಅಥವ NSP (WiMAX) (<ifname> ಅನà³à²¨à³ ಸೂಚಿಸದೆ ಇದà³à²¦à²²à³à²²à²¿ / "
+"ಪೂರà³à²µà²¦à²²à³à²²à²¿ ಸೇರಿಸಿ)\n"
+
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#, c-format
+msgid "back :: go to upper menu level\n"
+"\n"
+msgstr "back :: ಮೇಲಿನ ಪರಿವಿಡಿಯ ಮಟà³à²Ÿà²•à³à²•à³† ಹೋಗà³\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid "help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: nmcli ಆದೇಶಗಳಿಗಾಗಿನ ನೆರವà³\n"
+"\n"
+
+#: ../cli/src/connections.c:5788
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli ಸಂರಚನೆ\n"
+"\n"
+"nmcli ಅನà³à²¨à³ ಸಂರಚಿಸà³à²¤à³à²¤à²¦à³†. ಈ ಕೆಳಗಿನ ಆಯà³à²•à³†à²—ಳೠಲಭà³à²¯à²µà²¿à²µà³†:\n"
+"status-line yes | no [ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤: no]\n"
+"save-confirmation yes | no [ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤: yes]\n"
+"prompt-color <0-8> [ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"ಉದಾಹರಣೆಗಳà³: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli ಇಂದ ನಿರà³à²—ಮಿಸà³\n"
+"\n"
+"ಈ ಆದೇಶವೠnmcli ಇಂದೠನಿರà³à²—ಮಿಸà³à²µà²‚ತೆ ಮಾಡà³à²¤à³à²¤à²¦à³†. ಸಂಪಾದಿಸà³à²¤à³à²¤à²¿à²°à³à²µ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ "
+"ಉಳಿಸದೆ ಇದà³à²¦à²²à³à²²à²¿, ಕà³à²°à²¿à²¯à³†à²¯à²¨à³à²¨à³ ಖಚಿತಪಡಿಸà³à²µà²‚ತೆ ಬಳಕೆದಾರರನà³à²¨à³ ಕೇಳಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+
+#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
+#: ../cli/src/connections.c:6313 ../cli/src/connections.c:7162
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಆದೇಶ: '%s'\n"
+
+#: ../cli/src/connections.c:5879
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ ಗà³à²£à²¦ ಪರಿವಿಡಿ ]---\n"
+"set [<value>] :: ಹೊಸ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³\n"
+"add [<value>] :: ಗà³à²£à²•à³à²•à³† ಹೊಸ ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಸೇರಿಸà³\n"
+"change :: ಪà³à²°à²¸à²•à³à²¤ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಬದಲಾಯಿಸà³\n"
+"remove [<index> | <option>] :: ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಬದಲಾಯಿಸà³\n"
+"describe :: ಗà³à²£à²µà²¨à³à²¨à³ ವಿವರಿಸà³\n"
+"print [setting | connection] :: ಗà³à²£à²µà²¨à³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³ (ಸಿದà³à²§à²¤à³†/ಸಂಪರà³à²•) "
+"value(s)\n"
+"back :: ಮೇಲಿನ ಹಂತಕà³à²•à³† ಹೋಗà³\n"
+"help/? [<command>] :: ಈ ನೆರವೠಅಥವ ಆದೇಶದ ವಿವರಣೆಯನà³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
+"quit :: nmcli ಇಂದ ನಿರà³à²—ಮಿಸà³\n"
+
+#: ../cli/src/connections.c:5904
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: ಹೊಸ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³\n"
+"\n"
+"ಈ ಆದೇಶವೠಈ ಗà³à²£à²•à³à²•à³† <value> ಅನà³à²¨à³ ಹೊಂದಿಸà³à²¤à³à²¤à²¦à³†\n"
+
+#: ../cli/src/connections.c:5908
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: ಗà³à²£à²•à³à²•à³† ಹೊಸ ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಸೇರಿಸà³\n"
+"\n"
+"ಈ ಆದೇಶವೠಒದಗಿಸಲಾದ <value> ಅನà³à²¨à³ ಈ ಗà³à²£à²•à³à²•à³† ಸೇರಿಸà³à²¤à³à²¤à²¦à³†, ಗà³à²£à²µà³ ಒಂದೠಕಂಟೇನರಿನ "
+"ಬಗೆಯದಾಗಿದà³à²¦à²°à³†. à²à²•-ಮೌಲà³à²¯à²¦ ಗà³à²£à²—ಳಿಗಾಗಿ ಇದೠಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಬದಲಿ ಮಾಡà³à²¤à³à²¤à²¦à³† ('set' "
+"ನಂತೆಯೆ ಇರà³à²¤à³à²¤à²¦à³†).\n"
+
+#: ../cli/src/connections.c:5914
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: ಪà³à²°à²¸à²•à³à²¤ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಬದಲಾಯಿಸà³\n"
+"\n"
+"ಪà³à²°à²¸à²•à³à²¤ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಅದನà³à²¨à³ ಸಂಪಾದಿಸಲೠಅನà³à²®à²¤à²¿à²¸à³à²¤à³à²¤à²¦à³†.\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಅಳಿಸà³\n"
+"\n"
+"ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³à²¤à³à²¤à²¦à³† (ಅದನà³à²¨à³ ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²•à³à²•à³† ಹೊಂದಿಸà³à²¤à³à²¤à²¦à³†).\n"
+
+#: ../cli/src/connections.c:5922
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: ಗà³à²£à²µà²¨à³à²¨à³ ವಿವರಿಸà³\n"
+"\n"
+"ಗà³à²£à²¦ ವಿವರಣೆಯನà³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ಎಲà³à²²à²¾ NM ಸಿದà³à²§à²¤à³†à²—ಳೠಮತà³à²¤à³ ಗà³à²£à²—ಳನà³à²¨à³ ನೋಡಲೠನೀವೠ"
+"nm-settings(5) ಮಾಹಿತಿ ಪà³à²Ÿà²µà²¨à³à²¨à³ ನೋಡಬಹà³à²¦à³.\n"
+
+#: ../cli/src/connections.c:5927
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: ಗà³à²£à²¦ (ಸಿದà³à²§à²¤à³†, ಸಂಪರà³à²•) "
+"ಮೌಲà³à²¯à²µà²¨à³à²¨à³(ಗಳನà³à²¨à³) ಮà³à²¦à³à²°à²¿à²¸à³\n"
+"\n"
+"ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ಒಂದೠಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಅನà³à²¨à³ ಒದಗಿಸಿದಲà³à²²à²¿ ಸಂಪೂರà³à²£ "
+"ಸಿದà³à²§à²¤à³† ಅಥವ ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿನ ಮೌಲà³à²¯à²—ಳನà³à²¨à³‚ ಸಹ ನೀವೠತೋರಿಸಬಹà³à²¦à³.\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid "help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: nmcli ಆದೇಶಗಳಿಗಾಗಿನ ನೆರವà³\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ.\n"
+
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr ""
+"ದೋಷ: '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಖಡà³à²¡à²¾à²¯à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ತೆಗೆದà³à²¹à²¾à²•à²²à³ ಸಾಧà³à²¯à²µà²¿à²°à³à²µà³à²¦à²¿à²²à³à²².\n"
+
+#: ../cli/src/connections.c:6111
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+
+#: ../cli/src/connections.c:6171
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಬೇರೊಂದೠಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²¿à²‚ದ ತೆಗೆದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ. ನೀವೠಅದನà³à²¨à³ "
+"ಮರಳಿಸà³à²¥à²¾à²ªà²¿à²¸à²²à³ ಮà³à²–à³à²¯ ಮೆನà³à²µà²¿à²¨à²²à³à²²à²¿ 'save' ಅನà³à²¨à³ ನಮೂದಿಸಬಹà³.\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ನಮೂದಿಸಿ: "
+
+#: ../cli/src/connections.c:6209 ../cli/src/connections.c:6228
+#: ../cli/src/connections.c:6621 ../cli/src/connections.c:6680
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "ದೋಷ: '%s' ಗà³à²£à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
+
+#: ../cli/src/connections.c:6221
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸಿ: "
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid "Error: %s\n"
+msgstr "ದೋಷ: %s\n"
+
+#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
+#: ../cli/src/connections.c:6800
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "ದೋಷ: '%s' ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
+
+#: ../cli/src/connections.c:6277
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಆದೇಶದ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³: '%s'\n"
+
+#: ../cli/src/connections.c:6297 ../cli/src/connections.c:7150
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲಾಗಿಲà³à²². ನೀವೠನಿಜವಾಗಲೠನಿರà³à²—ಮಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à³†? [y/n]\n"
+
+#: ../cli/src/connections.c:6409
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "ಲಭà³à²¯à²µà²¿à²°à³à²µ ಸಿದà³à²§à²¤à³†à²—ಳà³: %s\n"
+
+#: ../cli/src/connections.c:6418
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರà³; %s\n"
+
+#: ../cli/src/connections.c:6435
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "ಲಭà³à²¯à²µà²¿à²°à³à²µ ಗà³à²£à²—ಳà³: %s\n"
+
+#: ../cli/src/connections.c:6443
+#, c-format
+msgid "Error: property %s\n"
+msgstr "ದೋಷ: %s ಗà³à²£\n"
+
+#: ../cli/src/connections.c:6484
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"'autoconnect=yes' ನೊಂದಿಗೆ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†. ಇದೠಸಂಪರà³à²•à²¦ ತಕà³à²·à²£à²¦ "
+"ಒಂದೠಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಗೆ ಕಾರಣವಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಆದರೂ ಸಹ ನೀವದನà³à²¨à³ ಉಳಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? [yes] "
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "ನೀವೠಈ ಕೆಳಗಿನ ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಸಂಪಾದಿಸಬಹà³à²¦à³: %s\n"
+
+#: ../cli/src/connections.c:6583
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಬೇರೊಂದೠಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²¿à²‚ದ ತೆಗೆದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ. ನೀವೠಅದನà³à²¨à³ "
+"ಮರಳಿಸà³à²¥à²¾à²ªà²¿à²¸à²²à³ 'save' ಅನà³à²¨à³ ನಮೂದಿಸಬಹà³.\n"
+
+#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' ಗà³à²£à²•à³à²•à²¾à²—ಿನ ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಮೌಲà³à²¯à²—ಳà³: %s\n"
+
+#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಆರಿಸಲಾಗಿಲà³à²²; ,ಮಾನà³à²¯à²µà²¾à²¦à²µà³ [%s]\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"ಮೊದಲೠ'goto <setting>' ಅನà³à²¨à³, ಅಥವ 'set <setting>.<property>' ಅನà³à²¨à³ ಬಳಸಿ\n"
+
+#: ../cli/src/connections.c:6641 ../cli/src/connections.c:6779
+#: ../cli/src/connections.c:6859
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಿದà³à²§à²¤à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œ '%s'; ಮಾನà³à²¯à²µà²¾à²¦à²µà³ [%s]\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "ದೋಷ: '%s' ಗà³à²£à²•à³à²•à²¾à²—ಿ ಸಿದà³à²§à²¤à³†à²¯à³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²\n"
+
+#: ../cli/src/connections.c:6658
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಗà³à²£à²²à²•à³à²·à²£ %s\n"
+
+#: ../cli/src/connections.c:6707
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಿದà³à²§à²¤à³† '%s'\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "ನೀವೠಈ ಕೆಳಗಿನ ಗà³à²£à²—ಳನà³à²¨à³ ಸಂಪಾದಿಸಬಹà³à²¦à³: %s\n"
+
+#: ../cli/src/connections.c:6764
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œ ಅನà³à²¨à³ ಒದಗಿಸಲಾಗಿಲà³à²²; ಮಾನà³à²¯à²µà²¾à²¦à²µà³ [%s]\n"
+
+#: ../cli/src/connections.c:6777
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "ಸಂಪರà³à²•à²¦à²²à³à²²à²¿ '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಇಲà³à²².\n"
+
+#: ../cli/src/connections.c:6818
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "ದೋಷ: %s ಗà³à²£à²—ಳà³, ಇದೠಒಂದೠಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರಾಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:6843
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"ಮೊದಲೠ'goto <setting>' ಅನà³à²¨à³, ಅಥವ 'describe <setting>.<property>' ಅನà³à²¨à³ "
+"ಬಳಸಿ\n"
+
+#: ../cli/src/connections.c:6884
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಗà³à²£: %s, ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರಾಗಿಲà³à²².\n"
+
+#: ../cli/src/connections.c:6908
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "ದೋಷ: '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಅಸà³à²¤à²¿à²¤à³à²µà²¦à²²à³à²²à²¿à²²à³à²²\n"
+
+#: ../cli/src/connections.c:6911
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಿದà³à²§à²¤à³† '%s'\n"
+
+#: ../cli/src/connections.c:6927
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "'%s' ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಪರಿಶೀಲಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†: %s\n"
+
+#: ../cli/src/connections.c:6934
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸಿ: %s\n"
+
+#: ../cli/src/connections.c:6973
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "ದೋಷ: '%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s\n"
+
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "'%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಉಳಿಸಲಾಗಿದೆ.\n"
+
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "ದೋಷ: ಸಂಪರà³à²•à²¦ ಪರಿಶೀಲನೆ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
+
+#: ../cli/src/connections.c:7015
+msgid "(unknown error)"
+msgstr "(ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ)"
+
+#: ../cli/src/connections.c:7036
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲಾಗಿಲà³à²². ಮೊದಲೠ'save' ಅನà³à²¨à³ ನಮೂದಿಸಿ.\n"
+
+#: ../cli/src/connections.c:7040
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²¾à²—ಿಲà³à²²: %s\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿಲà³à²²: %s.\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "ದೋಷ: '%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s\n"
+
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"ಸಂಪರà³à²•à²¦ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯನà³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³† (ಮà³à²‚ದà³à²µà²°à³†à²¯à²²à³ ಯಾವà³à²¦à³† "
+"ಕೀಲಿಯನà³à²¨à³ ಒತà³à²¤à²¿)\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "ದೋಷ: ಸà³à²¥à²¿à²¤à²¿-ಸಾಲà³: %s\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "ದೋಷ: ಉಳಿಕೆ-ಖಚಿತಪಡಿಕೆ: %s\n"
+
+#: ../cli/src/connections.c:7121
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "ದೋಷ: ತಪà³à²ªà²¾à²¦ ಬಣà³à²£à²¦ ಸಂಖà³à²¯à³†: '%s'; use <0-8>\n"
+
+#: ../cli/src/connections.c:7133
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "ಪà³à²°à²¸à²•à³à²¤ nmcli ಸಂರಚನೆ:\n"
+
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಂರಚನಾ ಆಯà³à²•à³† '%s'; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—à³à²µà³à²¦à³ [%s]\n"
+
+#: ../cli/src/connections.c:7364
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> ಆದೇಶ-ಸಾಲಿನ ಸಂಪಾದನೆ ಲಭà³à²¯à²µà²¿à²²à³à²². ಈ ಸೌಲಭà³à²¯à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲೠಒಂದೠಸಾಲನà³à²¨à³ "
+"ಸಂಪಾದಿಸಲೠಲೈಬà³à²°à²°à²¿à²¯à²¨à³à²¨à³ ನೀವೠಅನà³à²¸à³à²¥à²¾à²ªà²¿à²¸à²¬à²¹à³à²¦à³. <<<\n"
+"ಬೆಂಬಲವಿರà³à²µ ಲೈಬà³à²°à²°à²¿à²—ಳೆಂದರೆ:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7390
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "ದೋಷ: 'id', uuid, ಅಥವ 'path' ಅನà³à²¨à³ ಮಾತà³à²° ಒದಗಿಸಬಹà³à²¦à³."
+
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಂಪರà³à²• '%s'."
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: ಈಗಿರà³à²µ ಸಂಪರà³à²• '%s' ಅನà³à²¨à³ ಸಂಪಾದಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†; 'type' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠ"
+"ಅನà³à²¨à³ ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†\n"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: ಈಗಿರà³à²µ ಸಂಪರà³à²• '%s' ಅನà³à²¨à³ ಸಂಪಾದಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†; 'con-name' "
+"ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಅನà³à²¨à³ ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†\n"
+
+#: ../cli/src/connections.c:7434
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "ಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆಗಳà³: %s\n"
+
+#: ../cli/src/connections.c:7436
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆ: %s\n"
+
+#: ../cli/src/connections.c:7472
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli ಸಂವಾದಾತà³à²®à²• ಸಂಪರà³à²• ಸಂಪಾದಕ |==="
+
+#: ../cli/src/connections.c:7475
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "ಈಗಿರà³à²µ '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†: '%s'"
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "ಒಂದೠಹೊಸ '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"
+
+#: ../cli/src/connections.c:7479
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "ಲಭà³à²¯à²µà²¿à²°à³à²µ ಆದೇಶಗಳಿಗಾಗಿ 'help' ಅಥವ '?' ಅನà³à²¨à³ ಟೈಪೠಮಾಡಿ."
+
+#: ../cli/src/connections.c:7481
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "ವಿವರವಾದ ಗà³à²£à²¦ ವಿವರಣೆಗಾಗಿ 'describe [<setting>.<prop>]' ಎಂದೠಟೈಪೠಮಾಡಿ."
+
+#: ../cli/src/connections.c:7520
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "ದೋಷ: '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²²à³ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
+
+#: ../cli/src/connections.c:7526
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "'%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಮಾರà³à²ªà²¡à²¿à²¸à²²à²¾à²—ಿದೆ.\n"
+
+#: ../cli/src/connections.c:7553
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³à²—ಳನà³à²¨à³ ಒದಗಿಸಲಾಗಿಲà³à²²."
+
+#: ../cli/src/connections.c:7577
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "ದೋಷ: ಸಂಪರà³à²•à²¦ ID ಯೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "ದೋಷ: <setting>.<property> ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7620
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಅಥವ ಅನà³à²®à²¤à²¿ ಇರದೆ ಇರà³à²µ ಸಿದà³à²§à²¤à³† '%s': %s."
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಗà³à²£à²²à²•à³à²·à²£ '%s': %s."
+
+#: ../cli/src/connections.c:7647
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "ದೋಷ: %s.%s ಅನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s."
+
+#: ../cli/src/connections.c:7677
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "ದೋಷ: ಸಂಪರà³à²• ಅಳಿಸà³à²µà²¿à²•à³†à²¯à³ ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../cli/src/connections.c:7747
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಂಪರà³à²•: %s\n"
+
+#: ../cli/src/connections.c:7781
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ (ಗಳನà³à²¨à³) ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²²: %s."
+
+#: ../cli/src/connections.c:7852
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "'%s' ಕಡತವನà³à²¨à³ ಲೋಡೠಮಾಡಲಾಗಿಲà³à²²\n"
+
+#: ../cli/src/connections.c:7917
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"ದೋಷ: 'connection show' ಗಾಗಿ 'configured' ಅಥವ 'active' ಆದೇಶಯನà³à²¨à³ "
+"ನಿರೀಕà³à²·à²¿à²¸à²²à²¾à²—ಿದೆ."
+
+#: ../cli/src/connections.c:7984
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠ'connection' ಆದೇಶವಾಗಿಲà³à²²."
+
+#: ../cli/src/connections.c:8053 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "ದೋಷ: ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಿದà³à²§à²¤à³†à²—ಳೠಕಂಡà³à²¬à²‚ದಿಲà³à²²."
+
+#: ../cli/src/connections.c:8063
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "ದೋಷ: ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಪಡೆಯಲಾಗಿಲà³à²²: ಸಿದà³à²§à²¤à³†à²—ಳ ಸೇವೆಯೠಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²."
+
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNECTION"
+
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "VENDOR"
-#. 3
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUCT"
-#. 4
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
-#. 5
-#: ../cli/src/devices.c:114
-#| msgid "DRIVER"
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
-#. 6
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
-#. 7
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "REASON"
-#. 10
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#. 15
-#: ../cli/src/devices.c:124
-#| msgid "AUTOCONNECT"
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
-#. 0
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
+
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
-#. 1
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
-#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
-#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:167
-#| msgid "FREQ"
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#. 1
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
-#. 1
-#: ../cli/src/devices.c:186 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:187
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:188
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:189
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIVE"
-#. 0
-#: ../cli/src/devices.c:219
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "SLAVES"
-#. 0
-#: ../cli/src/devices.c:228
-#| msgid "UUID"
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:244
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-PROPERTIES"
+
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "CONNECTIONS"
+
+#: ../cli/src/devices.c:274
#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
-#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"ಬಳಕೆ: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device status'.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli device status { help }\n"
+"\n"
+"ಎಲà³à²²à²¾ ಸಾಧನಗಳಿಗಾಗಿ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³.\n"
+"ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²µà²¾à²—ಿ, ಈ ಕೆಳಗಿನ ಲಂಬಸಾಲà³à²—ಳನà³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†:\n"
+" DEVICE - ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರà³\n"
+" TYPE - ಸಾಧನದ ಬಗೆ\n"
+" STATE - ಸಾಧನದ ಸà³à²¥à²¿à²¤à²¿\n"
+" CONNECTION - ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಾಧನದಲà³à²²à²¿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ (ಯಾವà³à²¦à²¾à²¦à²°à³‚ ಇದà³à²¦à²²à³à²²à²¿)\n"
+"'--fields' ಸಾರà³à²µà²¤à³à²°à²¿à²• ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಬಳಸಿಕೊಂಡೠತೋರಿಸಲಾದ ಲಂಬಸಾಲà³à²—ಳನà³à²¨à³ "
+"ಬದಲಾಯಿಸಬಹà³à²¦à³.\n"
+" 'status' ಯೠಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ಆದೇಶವಾಗಿರà³à²¤à³à²¤à²¦à³†, ಇದರರà³à²¥ 'nmcli device' ಎನà³à²¨à³à²µà³à²¦à³ "
+"'nmcli device status' ಅನà³à²¨à³ ಚಲಾಯಿಸà³à²¤à³à²¤à²¦à³† ಎಂದಾಗಿರà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"ಸಾಧನದ(ಗಳ) ವಿವರಗಳನà³à²¨à³ ತೋರಿಸà³.\n"
+"ಆದೇಶವೠಎಲà³à²²à²¾ ಸಾಧನಗಳಿಗಾಗಿನ, ಅಥವ ಒಂದೠನಿರà³à²¦à²¿à²·à³à²Ÿ ಸಾಧನಕà³à²•à²¾à²—ಿನ ವಿವರಗಳನà³à²¨à³ "
+"ತೋರಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be activated."
+"\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ಸಾಧನಕà³à²•à³† ಸಂಪರà³à²• ಜೋಡಿಸà³.\n"
+"NetworkManager ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಬಹà³à²¦à²¾à²¦ ಒಂದೠಸೂಕà³à²¤à²µà²¾à²¦ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪತà³à²¤à³† ಮಾಡಲೠ"
+"ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à³à²¤à³à²¤à²¦à³†.\n"
+"ಇದೠಸà³à²µà²¯à²‚-ಚಾಲಿತವಾಗಿ ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²²à³ ಹೊಂದಿಸದೆ ಇರà³à²µ ಸಂಪರà³à²•à²—ಳನà³à²¨à³‚ ಸಹ "
+"ಪರಿಗಣಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ಸಾಧನದ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ತಪà³à²ªà²¿à²¸à³.\n"
+"ಆದೇಶವೠಸಾಧನದೊಂದಿಗಿನ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ತಪà³à²ªà²¿à²¸à³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಬಳಕೆದಾರರಿಂದ/ಕೈಯಾರೆ ಯಾವà³à²¦à³† "
+"ಹಸà³à²¤à²•à³à²·à³‡à²ªà²µà²¿à²²à³à²²à²¦à³†\n"
+"ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸà³à²µà²¯à²‚-ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²µà³à²¦à²¨à³à²¨à³ ತಡೆಯà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"ವೈ-ಫೈ ಸಾಧನಗಳ ಮೇಲೆ ಕಾರà³à²¯à²¾à²šà²°à²£à³†à²¯à²¨à³à²¨à³ ನಡೆಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"ಲಭà³à²¯à²µà²¿à²°à³à²µ ವೈ-ಫೈ ನಿಲà³à²•à³ ಬಿಂದà³à²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ಒಂದೠನಿರà³à²¦à²¿à²·à³à²Ÿ "
+"ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²•à³à²•à²¾à²—ಿ,\n"
+"ಅಥವ ಒಂದೠನಿಶà³à²šà²¿à²¤ BSSID ಗಾಗಿ AP ಗಳನà³à²¨à³ ಪಟà³à²Ÿà²¿ ಮಾಡಲೠ'ifname' ಮತà³à²¤à³ 'bssid' "
+"ಆಯà³à²•à³†à²—ಳನà³à²¨à³ ಬಳಸಬಹà³à²¦à³.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"SSID ಅಥವ BSSID ಇಂದ ಸೂಚಿಸಲಾದ ಒಂದೠವೈ-ಫೈ ಜಾಲಬಂಧಕà³à²•à³† ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²¿. ಆದೇಶವೠಒಂದೠ"
+"ಹೊಸ\n"
+"ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ರಚಿಸà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಅದನà³à²¨à³ ಒಂದೠಸಾಧನದಲà³à²²à²¿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²¤à³à²¤à²¦à³†. ಇದೠ"
+"GUI ಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²²à³à²²à²¿ SSID ಯ\n"
+"ಮೇಲೆ ಕà³à²²à²¿à²•à³ ಮಾಡಿದಾಗ ಉಂಟಾಗà³à²µ ಬದಲಾವಣೆಗಳ ಒಂದೠಆದೇಶ-ಸಾಲಿನ ಭಾಗವಾಗಿರà³à²¤à³à²¤à²¦à³†. ಆದೇಶವೠ"
+"\n"
+"ಯಾವಾಗಲೂ ಒಂದೠಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ರಚಿಸà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಇದೠಮà³à²–à³à²¯à²µà²¾à²—ಿ ವೈ-ಫೈ "
+"ಜಾಲಬಂಧಗಳೊಂದಿಗೆ\n"
+"ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à³à²µà²¾à²— ಸಹಾಯಕವಾಗà³à²¤à³à²¤à²¦à³†. ಜಾಲಬಂಧಕà³à²•à²¾à²—ಿ ಒಂದೠಸಂಪರà³à²•à²µà³ ಈಗಾಗಲೆ "
+"ಅಸà³à²¤à²¿à²¤à³à²µà²¦à²²à³à²²à²¿à²¦à³à²¦à²°à³†, ಈ\n"
+"ಕೆಳಗಿನಂತೆ ಈಗಾಗಲೆ ಇರà³à²µ ಒಂದೠಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಮೇಲಕà³à²•à³† ತರà³à²µà³à²¦à³ ಉತà³à²¤à²®: nmcli con "
+"up id <name>.\n"
+"ಪà³à²°à²¸à²•à³à²¤ ಕೇವಲ ಮà³à²•à³à²¤, WEP ಮತà³à²¤à³ WPA-PSK ಜಾಲಬಂಧಗಳೠಮಾತà³à²° ಬೆಂಬಲಿತವಾಗಿವೆ "
+"ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ ನೆನಪಿಡಿ. \n"
+"IP ಸಂರಚನೆಯನà³à²¨à³‚ ಸಹ DHCP ಮà³à²–ಾಂತರ ಪಡೆಯಲಾಗà³à²¤à³à²¤à²¦à³† ಎಂದೠಊಹಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"NetworkManager ಕೂಡಲೆ ಲಭà³à²¯à²µà²¿à²°à³à²µ ನಿಲà³à²•à³ ಬಿಂದà³à²—ಳಿಗಾಗಿ ಮರಳಿ-ಸà³à²•à³à²¯à²¾à²¨à³â€Œ ಮಾಡà³à²¤à³à²¤à²¦à³†.\n"
+"Wi-Fi ಜಾಲಬಂಧಗಳಿಗಾಗಿ NetworkManager ಕಾಲಕಾಲಕà³à²•à³† ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¦à³†, ಆದರೆ ಕೆಲವೠ"
+"ಸಂದರà³à²­à²—ಳಲà³à²²à²¿\n"
+"ಕೈಯಾರೆ (ಮà³à²¯à²¾à²¨à³à²µà²²à²¿) ಸà³à²•à³à²¯à²¾à²¨à²¿à²‚ಗೠನಡೆಸà³à²µà³à²¦à³ ಪà³à²°à²¯à³‹à²œà²¨à²•à²¾à²°à²¿à²¯à²¾à²—à³à²¤à³à²¤à²¦à³†. ಈ ಆದೇಶವೠAP "
+"ಗಳನà³à²¨à³\n"
+"ತೋರಿಸà³à²µà³à²¦à²¿à²²à³à²², ಅದಕà³à²•à²¾à²—ಿ 'nmcli device wifi list' ಅನà³à²¨à³ ಬಳಸಿ.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX ಸಾಧನಗಳ ಮೇಲೆ ಕಾರà³à²¯à²¾à²šà²°à²£à³†à²¯à²¨à³à²¨à³ ನಡೆಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"ಲಭà³à²¯à²µà²¿à²°à³à²µ WiMAX NSPಗಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³. ಒಂದೠನಿರà³à²¦à²¿à²·à³à²Ÿ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²•à³à²•à²¾à²—ಿ, "
+"ಅಥವ ಒಂದೠನಿಶà³à²šà²¿à²¤\n"
+" NSP ಗಾಗಿನ ಜಾಲಬಂಧಗಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನೋಡಲೠ'ifname' ಮತà³à²¤à³ 'nsp' ಆಯà³à²•à³†à²—ಳನà³à²¨à³ "
+"ಬಳಸಬಹà³à²¦à³.\n"
"\n"
-#: ../cli/src/devices.c:347
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(ಯಾವà³à²¦à³‚ ಇಲà³à²²)"
-#: ../cli/src/devices.c:403
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:404
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:413
-msgid "Encrypted: "
-msgstr "ಗೂಢಲಿಪೀಕರಣಗೊಂಡ: "
-
-#: ../cli/src/devices.c:418
-msgid "WEP "
-msgstr "WEP "
-
-#: ../cli/src/devices.c:420
-msgid "WPA "
-msgstr "WPA "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:422
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:425
-msgid "Enterprise "
-msgstr "ಎಂಟರà³à²ªà³à²°à³ˆà²¸à³ "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:434
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "ತಾತà³à²•à²¾à²²à²¿à²•"
-#: ../cli/src/devices.c:435
-msgid "Infrastructure"
-msgstr "ಮೂಲಭೂತ ವà³à²¯à²µà²¸à³à²¥à³†"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "ಇನà³â€Œà²«à³à²°à²¾"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "ನೆಲೆ"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "ಪಾಲà³à²¦à²¾à²°"
-#: ../cli/src/devices.c:477
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "ರೋಮಿಂಗà³"
-#: ../cli/src/devices.c:549
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "ದೋಷ: 'dev list': %s"
-
-#: ../cli/src/devices.c:551
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'dev list'; %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
-
-#: ../cli/src/devices.c:560
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "ಸಾಧನದ ವಿವರಗಳà³"
-#: ../cli/src/devices.c:607 ../cli/src/devices.c:610 ../cli/src/devices.c:1086
-#: ../cli/src/utils.c:479
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "ದೋಷ: 'device show': %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1474
msgid "(unknown)"
msgstr "(ಗೊತà³à²¤à²¿à²°à²¦)"
-#: ../cli/src/devices.c:619
-#| msgid "connected"
-msgid "not connected"
-msgstr "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿಲà³à²²"
-
-#: ../cli/src/devices.c:646
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "ಆನà³â€Œ"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "ಆಫà³"
-#: ../cli/src/devices.c:928
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "ದೋಷ: 'dev status': %s"
-
-#: ../cli/src/devices.c:930
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'dev status': %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
+msgid "Error: 'device status': %s"
+msgstr "ದೋಷ: 'device status': %s"
-#: ../cli/src/devices.c:953
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "ಸಾಧನಗಳ ಸà³à²¥à²¿à²¤à²¿"
-#: ../cli/src/devices.c:984
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "ದೋಷ: '%s' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
+msgid "Error: invalid extra argument '%s'."
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಹೆಚà³à²šà³à²µà²°à²¿ ನಿಯತಾಂಕ '%s'."
-#: ../cli/src/devices.c:1025 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1331 ../cli/src/devices.c:1978
+#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1422
+#: ../cli/src/devices.c:1557 ../cli/src/devices.c:1696
+#: ../cli/src/devices.c:2436
#, c-format
msgid "Error: Device '%s' not found."
msgstr "ದೋಷ: '%s' ಎಂಬ ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²."
-#: ../cli/src/devices.c:1048
+#: ../cli/src/devices.c:1319
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "ಯಶಸà³à²¸à³: '%s' ಎಂಬ ಸಾಧನವನà³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "ದೋಷ: ಸಾಧನದ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "'%s' ಸಾಧನವೠಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ.\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "ಸಂಪರà³à²•à²¸à²¾à²§à²¨: "
+
+#: ../cli/src/devices.c:1381 ../cli/src/devices.c:1390
+#: ../cli/src/devices.c:1516 ../cli/src/devices.c:1525
+#, c-format
+msgid "Error: No interface specified."
+msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²µà²¨à³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²²."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "ದೋಷ: ಹೆಚà³à²šà³à²µà²°à²¿ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ೆ ಅನà³à²®à²¤à²¿ ಇಲà³à²²: '%s'."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "ಯಶಸà³à²¸à³: '%s' ಎಂಬ ಸಾಧನದಿಂದ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಕಡಿದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ."
-#: ../cli/src/devices.c:1083
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "ದೋಷ: '%s' (%s) ಎಂಬ ಸಾಧನದ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಕಡಿದೠಹಾಕà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../cli/src/devices.c:1096
+#: ../cli/src/devices.c:1485
#, c-format
-#| msgid "Success: Device '%s' successfully disconnected."
msgid "Device '%s' has been disconnected.\n"
msgstr "'%s' ಎಂಬ ಸಾಧನದಿಂದ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಕಡಿದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ.\n"
-#: ../cli/src/devices.c:1159
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "ದೋಷ: iface ಅನà³à²¨à³ ಸೂಚಿಸಬೇಕà³."
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi ಸà³à²•à³à²¯à²¾à²¨à³ ಪಟà³à²Ÿà²¿"
-#: ../cli/src/devices.c:1289
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "ದೋಷ: 'dev wifi': %s"
+msgid "Error: 'device wifi': %s"
+msgstr "ದೋಷ: 'device wifi': %s"
-#: ../cli/src/devices.c:1291
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'dev wifi': %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
-
-#: ../cli/src/devices.c:1314
-msgid "WiFi scan list"
-msgstr "WiFi ಸà³à²•à³à²¯à²¾à²¨à³ ಪಟà³à²Ÿà²¿"
-
-#: ../cli/src/devices.c:1351 ../cli/src/devices.c:1405
-#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with bssid '%s' not found."
msgstr "ದೋಷ: '%s' ಎಂಬ bssid ಯ ನಿಲà³à²•à²£à²¾ ಬಿಂದà³à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:1368
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "ದೋಷ: '%s' ಎಂಬà³à²¦à³ ಒಂದೠWiFi ಸಾಧನವಾಗಿಲà³à²²."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "ದೋಷ: '%s' ಎಂಬà³à²¦à³ ಒಂದೠWi-Fi ಸಾಧನವಾಗಿಲà³à²²."
-#: ../cli/src/devices.c:1436 ../cli/src/devices.c:1482
+#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr ""
"ರಚಿಸಲಾದ UUID '%s' ಯೊಂದಿಗೆ ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ ಮತà³à²¤à³ '%s' ಸಾಧನದಲà³à²²à²¿ "
"ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ\n"
-#: ../cli/src/devices.c:1441
+#: ../cli/src/devices.c:1829
#, c-format
-#| msgid "Error: Connection activation failed: %s."
msgid "Error: Connection activation failed: (%d) %s."
msgstr "ದೋಷ: ಸಂಪರà³à²• ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s."
-#: ../cli/src/devices.c:1466
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "ದೋಷ: ಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲà³/ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
-#: ../cli/src/devices.c:1474
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
-msgstr "ದೋಷ: ಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲà³/ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: ಅಜà³à²žà²¾à²¤ ದೋಷ"
+msgstr "ದೋಷ: ಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲà³/ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
+
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID ಅಥವ BSSID: "
-#: ../cli/src/devices.c:1618
+#: ../cli/src/devices.c:2018
#, c-format
-#| msgid "Error: %s argument is missing."
msgid "Error: SSID or BSSID are missing."
msgstr "ದೋಷ: SSID ಅಥವ BSSID ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:1641
+#: ../cli/src/devices.c:2042
#, c-format
-#| msgid "Error: timeout value '%s' is not valid."
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "ದೋಷ: bssid ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಮೌಲà³à²¯ '%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ BSSID ಆಗಿಲà³à²²."
-#: ../cli/src/devices.c:1665
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1432,381 +3382,584 @@ msgstr ""
"ದೋಷ: wep-key-type ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಮೌಲà³à²¯ '%s' ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ, 'key' ಅಥವ 'phrase' "
"ಅನà³à²¨à³ ಬಳಸಿ."
-#: ../cli/src/devices.c:1705
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "ದೋಷ: %s: %s."
+
+#: ../cli/src/devices.c:2101
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
-"ದೋಷ: ಸಂಪರà³à²•à²¿à²¤à²—ೊಳà³à²³à²¬à³‡à²•à²¿à²°à³à²µ BSSID ಯೠ(%s) bssid ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಿಂತ (%"
-"s)ಭಿನà³à²¨à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³†."
+"ದೋಷ: ಸಂಪರà³à²•à²¿à²¤à²—ೊಳà³à²³à²¬à³‡à²•à²¿à²°à³à²µ BSSID ಯೠ(%s) bssid ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಿಂತ "
+"(%s)ಭಿನà³à²¨à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³†."
-#: ../cli/src/devices.c:1711
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "ದೋಷ: '%s' ನಿಯತಾಂಕವೠSSID ಅಥವ BSSID ಆಗಿಲà³à²²."
-#: ../cli/src/devices.c:1740
-#, c-format
-#| msgid "Error: Device '%s' is not a WiFi device."
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "ದೋಷ: '%s' ಎಂಬà³à²¦à³ ಒಂದೠWi-Fi ಸಾಧನವಾಗಿಲà³à²²."
-
-#: ../cli/src/devices.c:1742
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
-#| msgid "Error: No suitable device found."
msgid "Error: No Wi-Fi device found."
msgstr "ದೋಷ: ಯಾವà³à²¦à³† Wi-Fi ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²."
-#: ../cli/src/devices.c:1760
+#: ../cli/src/devices.c:2151
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: No network with SSID '%s' found."
msgstr "ದೋಷ: SSID '%s' ನೊಂದಿಗೆ ಯಾವà³à²¦à³† ಜಾಲಬಂಧ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:1762
+#: ../cli/src/devices.c:2153
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: No access point with BSSID '%s' found."
msgstr "ದೋಷ: '%s' ಎಂಬ BSSID ಯ ನಿಲà³à²•à²£à²¾ ಬಿಂದà³à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:1860
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "ದೋಷ: '%s' ಎಂಬ 'dev wifi' ಆಜà³à²žà³†à²¯à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-
-#: ../cli/src/devices.c:1936
-#, c-format
-#| msgid "Error: 'dev wifi': %s"
-msgid "Error: 'dev wimax': %s"
-msgstr "ದೋಷ: 'dev wimax': %s"
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "ಗà³à²ªà³à²¤à²ªà²¦: "
-#: ../cli/src/devices.c:1938
+#: ../cli/src/devices.c:2321
#, c-format
-#| msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'dev wimax': %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "ದೋಷ: 'device wifi' ಆದೇಶ '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/devices.c:1961
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP ಪಟà³à²Ÿà²¿"
-#: ../cli/src/devices.c:1998
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "ದೋಷ: 'device wimax': %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
-#| msgid "Error: Device '%s' not found."
msgid "Error: NSP with name '%s' not found."
msgstr "ದೋಷ: '%s' ಎಂಬ ಹೆಸರಿನ NSP ಕಂಡೠಬಂದಿಲà³à²²."
-#: ../cli/src/devices.c:2009
+#: ../cli/src/devices.c:2472
#, c-format
-#| msgid "Error: Device '%s' is not a WiFi device."
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "ದೋಷ: '%s' ಎಂಬà³à²¦à³ ಒಂದೠWiMAX ಸಾಧನವಿಲà³à²²."
-#: ../cli/src/devices.c:2040
+#: ../cli/src/devices.c:2510
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with nsp '%s' not found."
msgstr "ದೋಷ: nsp '%s' ಎಂಬà³à²¦à²°à³Šà²‚ದಿಗಿನ ನಿಲà³à²•à²£à²¾ ಬಿಂದà³à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:2067
+#: ../cli/src/devices.c:2542
#, c-format
-#| msgid "Error: 'dev wifi' command '%s' is not valid."
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "ದೋಷ: '%s' ಎಂಬ 'wimax' ಆಜà³à²žà³†à²¯à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "ದೋಷ: 'device wimax' ಆದೇಶ '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/devices.c:2120
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
-msgstr "ದೋಷ: '%s' ಎಂಬ 'dev' ಆಜà³à²žà³†à²¯à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
+msgstr "ದೋಷ: '%s' ಎಂಬ 'dev' ಆದೇಶಯೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
#: ../cli/src/network-manager.c:37
msgid "RUNNING"
msgstr "RUNNING"
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "VERSION"
-#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "ಆರಂಭ"
-#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+msgid "CONNECTIVITY"
+msgstr "ಸಂಪರà³à²•"
-#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "NETWORKING"
-#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
-#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
-#. 7
#: ../cli/src/network-manager.c:45
-#| msgid "WIFI-HARDWARE"
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
-#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "PERMISSION"
-#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "LEVEL"
+
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMAINS"
+
+#: ../cli/src/network-manager.c:95
#, c-format
-#| msgid ""
-#| "Usage: nmcli nm { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
-#| "\n"
-#| " status\n"
-#| " sleep\n"
-#| " wakeup\n"
-#| " wifi [on|off]\n"
-#| " wwan [on|off]\n"
-#| "\n"
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"ಬಳಕೆ: nmcli nm { COMMAND | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"ಬಳಕೆ: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli general status { help }\n"
+"\n"
+"NetworkManager ನ ಒಟà³à²Ÿà²¾à²°à³† ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"'status' ಎನà³à²¨à³à²µà³à²¦à³ ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ಕà³à²°à²¿à²¯à³†à²¯à²¾à²—ಿರà³à²¤à³à²¤à²¦à³†, ಇದರರà³à²¥ 'nmcli gen' "
+"ಎನà³à²¨à³à²µà³à²¦à³ 'nmcli gen status' ಯನà³à²¨à³ ಚಲಾಯಿಸà³à²¤à³à²¤à²¦à³† ಎಂದà³\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system hostname."
+"\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³† ಆತಿಥೇಯಹೆಸರನà³à²¨à³ ಪಡೆಯಿರಿ ಅಥವ ಬದಲಾಯಿಸಿ.\n"
+"ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿಲà³à²²à²¦à³†, ಇದೠಪà³à²°à²¸à²•à³à²¤ ಸಂರಚಿಸಲಾದ ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ "
+"ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ನೀವೠಆತಿಥೇಯದ\n"
+"ಹೆಸರನà³à²¨à³ ನೀಡಿದಲà³à²²à²¿, NetworkManager ಅದನà³à²¨à³ ಹೊಸ ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³† ಆತಿಥೇಯಹೆಸರಿಗೆ "
+"ಹೊಂದಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli general permissions { help }\n"
+"\n"
+"ದೃಢೀಕರಿಸಲಾದ ಕಾರà³à²¯à²¾à²šà²°à²£à³†à²—ಳಿಗಾಗಿ ಕಾಲರೠಅನà³à²®à²¤à²¿à²—ಳನà³à²¨à³ ತೋರಿಸà³.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"NetworkManager ಲಾಗಿಂಗೠಮಟà³à²Ÿ ಮತà³à²¤à³ ಡೊಮೇನà³â€Œà²—ಳನà³à²¨à³ ಪಡೆದà³à²•à³Š ಅಥವ ಬದಲಾಯಿಸà³.\n"
+"ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿಲà³à²²à²¦à³† ಇದà³à²¦à²°à³† ಪà³à²°à²¸à²•à³à²¤ ಲಾಗಿಂಗೠಮಟà³à²Ÿ ಮತà³à²¤à³ ಡೊಮೇನà³â€Œà²—ಳನà³à²¨à³ "
+"ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†. ಲಾಗಿಂಗೠ\n"
+"ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಬದಲಾಯಿಸಲà³, ಮಟà³à²Ÿ ಮತà³à²¤à³/ಅಥವ ಡೊಮೇನೠಅನà³à²¨à³ ಒದಗಿಸಿ. ಸಾಧà³à²¯à²µà²¿à²°à³à²µ "
+"ಲಾಗಿಂಗೠಡೊಮೇನà³â€Œà²—ಳ \n"
+"ಪಟà³à²Ÿà²¿à²—ಾಗಿ ದಯವಿಟà³à²Ÿà³ ಮಾಹಿತಿ (ಮà³à²¯à²¾à²¨à³) ಪà³à²Ÿà²•à³à²•à³† ಭೇಟಿ ಕೊಡಿ.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli networking { COMMAND | help }\n"
+"\n"
+" COMMAND := { on | off | connectivity }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid "Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli networking on { help }\n"
+"\n"
+"ಜಾಲಬಂಧವನà³à²¨à³ ಸಕà³à²°à²¿à²¯ ಸà³à²¥à²¿à²¤à²¿à²—ೆ ಬದಲಾಯಿಸà³.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid "Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli networking off { help }\n"
+"\n"
+"ಜಾಲಬಂಧವನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯ ಸà³à²¥à²¿à²¤à²¿à²—ೆ ಬದಲಾಯಿಸà³.|\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the connectivity."
+"\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"ಜಾಲಬಂಧ ಸಂಪರà³à²•à²¦ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š.\n"
+"à²à²šà³à²›à²¿à²• 'check' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨à²¿à²‚ದಾಗಿ NetworkManager ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಮರಳಿ-"
+"ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"ಎಲà³à²²à²¾ ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³â€Œà²—ಳ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š, ಅಥವ ಅವà³à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯/"
+"ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"ಎಲà³à²²à²¾ ವೈ-ಫೈ ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³â€Œà²—ಳ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š, ಅಥವ ಅವà³à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯/"
+"ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"ಎಲà³à²²à²¾ ಮೊಬೈಲà³â€Œ ಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡà³â€Œ ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³â€Œà²—ಳ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š, ಅಥವ "
+"ಅವà³à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯/ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"ಎಲà³à²²à²¾ WiMAX ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³â€Œà²—ಳ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š, ಅಥವ ಅವà³à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯/"
+"ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "ನಿದà³à²°à²¿à²¸à³à²µ"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ (ಸà³à²¥à²³à³€à²¯ ಮಾತà³à²°)"
-#: ../cli/src/network-manager.c:114
-#| msgid "connected"
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ (ತಾಣ ಮಾತà³à²°)"
-#: ../cli/src/network-manager.c:118
-#| msgid "connecting"
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "ಸಂಪರà³à²• ತಪà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "ದೋಷ: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "ಪೋರà³à²Ÿà²²à³â€Œ"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "ಸೀಮಿತ"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "ಸಂಪೂರà³à²£"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'nm status': %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "ದೋಷ: ಕೇವಲ ಈ ಸà³à²¥à²³à²—ಳಿಗೆ ಮಾತà³à²° ಅನà³à²®à²¤à²¿ ಇದೆ: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಂಡ"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "NetworkManager ಸà³à²¥à²¿à²¤à²¿"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "ಚಾಲನೆಯಲà³à²²à²¿à²¦à³†"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "ಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "ಆರಂಭಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "ಪà³à²°à²¾à²°à²‚ಭಗೊಂಡಿದೆ"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "ದೃಢೀಕರಣ"
-#: ../cli/src/network-manager.c:301
+#: ../cli/src/network-manager.c:475
#, c-format
-#| msgid "Error: 'nm status': %s"
-msgid "Error: 'nm permissions': %s"
-msgstr "ದೋಷ: 'nm permissions': %s"
+msgid "Error: 'general permissions': %s"
+msgstr "ದೋಷ: 'general permissions': %s"
-#: ../cli/src/network-manager.c:303
-#, c-format
-#| msgid "Error: 'nm status': %s; allowed fields: %s"
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "ದೋಷ: 'nm permissions': %s; ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²¦ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: %s"
-
-#: ../cli/src/network-manager.c:324
-#| msgid "NetworkManager status"
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "NetworkManager ಅನà³à²®à²¤à²¿à²—ಳà³"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
+#: ../cli/src/network-manager.c:530
#, c-format
-#| msgid "Error: could not connect to D-Bus."
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "ದೋಷ: ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಬಸà³â€Œà²¨à³Šà²‚ದಿಗೆ ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²²à³ ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+msgid "Error: 'general logging': %s"
+msgstr "ದೋಷ: 'general logging': %s"
+
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager ಲಾಗಿಂಗà³"
-#: ../cli/src/network-manager.c:361
+#: ../cli/src/network-manager.c:565
#, c-format
-#| msgid "Error: could not connect to D-Bus."
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "ದೋಷ: D-Bus ಆಬà³à²œà³†à²•à³à²¸à³ ಪà³à²°à²¾à²•à³à²¸à²¿à²¯à²¨à³à²¨à³ ರಚಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "ದೋಷ: ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:682
#, c-format
-#| msgid "Error: 'con list': %s"
-msgid "Error in sleep: %s"
-msgstr "ಜಡಗೊಳಿಸà³à²µà²²à³à²²à²¿ ದೋಷ: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "ದೋಷ: ಲಾಗಿಂಗೠಅನà³à²¨à³ ಹೊಂದಿಸಲೠಪà³à²°à²µà³‡à²¶à²¾à²§à²¿à²•à²¾à²°à²µà²¨à³à²¨à³ ನಿರಾಕರಿಸಲಾಗಿದೆ; %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"ದೋಷ: '--fields' '%s' ಎಂಬ ಮೌಲà³à²¯à²µà³ ಇಲà³à²²à²¿ ಸರಿಯಾದà³à²¦à²²à³à²².; ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಕà³à²·à³‡à²¤à³à²°à²—ಳà³: "
-"%s"
+msgid "Error: %s"
+msgstr "ದೋಷ: %s"
-#: ../cli/src/network-manager.c:424
-#| msgid "WiFi enabled"
-msgid "Networking enabled"
-msgstr "ಜಾಲಬಂಧ ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
+#: ../cli/src/network-manager.c:692
+#, c-format
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "ದೋಷ: '%s' ಎಂಬ 'general' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:710
#, c-format
-#| msgid "Error: invalid 'wwan' parameter: '%s'."
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ 'enable' ರ ನಿಯತಾಂಕ: '%s'; 'true' ಅಥವ 'false' ಅನà³à²¨à³ ಬಳಸಿ."
+"ದೋಷ: '--fields' '%s' ಎಂಬ ಮೌಲà³à²¯à²µà³ ಇಲà³à²²à²¿ ಸರಿಯಾದà³à²¦à²²à³à²² (ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಕà³à²·à³‡à²¤à³à²°: "
+"%s)"
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:735
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "ದೋಷ: NetworkManager ನಿಂದ ನಿದà³à²°à²¾ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ರಫà³à²¤à³ ಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ '%s' ನಿಯತಾಂಕ: '%s' (ಆನà³/ಆಫೠಅನà³à²¨à³ ಬಳಸಿ)."
-#: ../cli/src/network-manager.c:458
-#, c-format
-#| msgid "Error: invalid 'wifi' parameter: '%s'."
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ 'sleep' ನ ನಿಯತಾಂಕ: '%s'; 'true' ಅಥವ 'false' ಅನà³à²¨à³ ಬಳಸಿ."
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "ಸಂಪರà³à²•"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "ಜಾಲಬಂಧ"
-#: ../cli/src/network-manager.c:495
+#: ../cli/src/network-manager.c:783
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ 'wifi' ನಿಯತಾಂಕ: '%s'."
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "ದೋಷ: '%s' ಎಂಬ 'networking connectivity' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
-
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ 'wwan' ರ ನಿಯತಾಂಕ: '%s'."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "ದೋಷ: '%s' ಎಂಬ 'networking' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/network-manager.c:556
-#| msgid "WiFi enabled"
-msgid "WiMAX enabled"
-msgstr "WiMAX ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "ರೇಡಿಯೋ ಸà³à²µà²¿à²šà³â€Œà²—ಳà³"
-#: ../cli/src/network-manager.c:572
-#, c-format
-#| msgid "Error: invalid 'wifi' parameter: '%s'."
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ 'wimax' ನಿಯತಾಂಕ: '%s'."
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³"
+
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³"
+
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³"
-#: ../cli/src/network-manager.c:588
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "ದೋಷ: '%s' ಎಂಬ 'nm' ಆಜà³à²žà³†à²¯à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "ದೋಷ: '%s' ಎಂಬ 'radio' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1819,11 +3972,16 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
@@ -1831,246 +3989,772 @@ msgstr ""
"ಬಳಕೆ: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -m[ode] tabular|multiline output mode\n"
-" -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-" -e[scape] yes|no escape columns separators in "
-"values\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse ಔಟà³â€Œà²ªà³à²Ÿà³\n"
+" -p[retty] ಪà³à²°à²Ÿà²¿ ಔಟà³â€Œà²ªà³à²Ÿà³\n"
+" -m[ode] tabular|multiline ಔಟà³â€Œà²ªà³à²Ÿà³ ಸà³à²¥à²¿à²¤à²¿\n"
+" -f[ields] <field1,field2,...>|all|common ಔಟà³â€Œà²ªà³à²Ÿà³ ಮಾಡಲೠಜಾಗಗಳನà³à²¨à³ ಸೂಚಿಸà³\n"
+" -e[scape] yes|no ಮೌಲà³à²¯à²—ಳಲà³à²²à²¿à²°à³à²µ ಎಸà³à²•à³‡à²ªà³ "
+"ಉದà³à²¦à²¸à²¾à²²à³à²—ಳ ವಿಭಜಕಗಳà³\n"
+" -v[ersion] ಪà³à²°à³Šà²—à³à²°à²¾à²®à²¿à²¨ ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³\n"
+" -h[elp] ನೆರವನà³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" nm NetworkManager ಸà³à²¥à²¿à²¤à²¿\n"
+" con NetworkManager ಸಂಪರà³à²•à²—ಳà³\n"
+" dev NetworkManager ಇಂದ ನೋಡಿಕೊಳà³à²³à²²à²¾à²—à³à²µ ಸಾಧನಗಳà³\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
-msgstr "ದೋಷ: '%s' ಎಂಬ ವಸà³à²¤à³à²µà²¿à²¨ ಬಗೆಗೆ ತಿಳಿದಿಲà³à²², 'nmcli help' ಅನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿."
+msgstr ""
+"ದೋಷ: '%s' ಎಂಬ ವಸà³à²¤à³à²µà²¿à²¨ ಬಗೆಗೆ ತಿಳಿದಿಲà³à²², 'nmcli help' ಅನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "ದೋಷ: '--terse' ಎಂಬ ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಎರಡನೆ ಬಾರಿಗೆ ಸೂಚಿಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "ದೋಷ: '--terse' ಎಂಬà³à²¦à³ '--pretty' ಯೊಂದಿಗೆ ಪರಸà³à²ªà²° ಮೀಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "ದೋಷ: '--pretty' ಎಂಬ ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಎರಡನೆ ಬಾರಿಗೆ ಸೂಚಿಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "ದೋಷ: '--pretty' ಎಂಬà³à²¦à³ '--terse' ಯೊಂದಿಗೆ ಪರಸà³à²ªà²° ಮೀಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "ದೋಷ: '%s' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ಸರಿಯಾದ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಆಗಿಲà³à²²."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "ದೋಷ: '%s' ಎಂಬ ಆಯà³à²•à³†à²¯ ಕà³à²·à³‡à²¤à³à²°à²—ಳೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ಸರಿಯಾದ ಕಾಲಾವಧಿ ತೀರಿಕೆಯಲà³à²²."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli ಉಪಕರಣ, ಆವೃತà³à²¤à²¿ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "ದೋಷ: '%s' ಎಂಬ ಆಯà³à²•à³†à²¯ ಬಗೆಗೆ ತಿಳಿದಿಲà³à²², 'nmcli -help' ಅನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid "\n"
+"Error: nmcli terminated by signal %d."
+msgstr "\n"
+"ದೋಷ: %d ಸಂಕೇತದೊಂದಿಗೆ ಅಂತà³à²¯à²—ೊಂಡಿದೆ."
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "%d ಎಂಬ ಸಂಕೇತವೠಕಂಡà³à²¬à²‚ದಿದೆ, ಮà³à²šà³à²šà²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†......"
+msgid "Failed to set signal mask: %d"
+msgstr "ಸಂಜà³à²žà³† ಮà³à²¸à³à²•à²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d"
-#: ../cli/src/nmcli.c:272
-#| msgid "Error: Could not get user settings."
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "ಸಂಜà³à²žà³† ನಿಭಾಯಿಸà³à²µ ಎಳೆಯನà³à²¨à³ ನಿರà³à²®à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲವಾಗಿದೆ :%d"
+
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "ದೋಷ: NMClient ವಸà³à²¤à³à²µà²¨à³à²¨à³ ರಚಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿದೆ"
-#: ../cli/src/settings.c:563
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:565
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-ಬಿಟà³â€Œ ಗà³à²ªà³à²¤à²µà²¾à²•à³à²¯à²¾à²‚ಶ)"
-#: ../cli/src/settings.c:568 ../cli/src/settings.c:696
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
-msgstr "%d (ಅಜà³à²žà²¾à²¤)"
+msgstr "%d (ಗೊತà³à²¤à²¿à²°à²¦)"
-#: ../cli/src/settings.c:594
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (ಗೊತà³à²¤à²¿à²°à²¦)"
-#: ../cli/src/settings.c:600
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "ಯಾವà³à²¦à²¾à²¦à²°à³‚, "
-#: ../cli/src/settings.c:602
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:604
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:606
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:610
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:612
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:620
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:622
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:624
-#| msgid "WCDMA 3GPP UMTS 900 MHz, "
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:626
-#| msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:690
+#: ../cli/src/settings.c:793
#, c-format
-#| msgid "disabled"
msgid "%d (disabled)"
msgstr "%d (ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ)"
-#: ../cli/src/settings.c:692
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ, ಸಾರà³à²µà²œà²¨à²¿à²• IP ಗೆ ಆದà³à²¯à²¤à³† ನೀಡà³)"
-#: ../cli/src/settings.c:694
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ, ತಾತà³à²•à²¾à²²à²¿à²• IP ಗೆ ಆದà³à²¯à²¤à³† ನೀಡà³)"
-#: ../cli/src/settings.c:827 ../cli/src/settings.c:1023
-#: ../cli/src/settings.c:1732
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (ಯಾವà³à²¦à³‚ ಇಲà³à²²)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "ಮಧà³à²¯à²µà²°à³à²¤à²¿-ಹೊಂದಿದ,"
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "ಉಳಿಸದೆ ಇರà³à²µ"
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "ಅಗತà³à²¯à²µà²¿à²°à²¦,"
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಂಡ, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "ಜಾಹಿರಾತೠಮಾಡà³,"
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "ಸಮà³à²®à²¤à²¿à²¸à²¿à²¦,"
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (ಹೊಂದಿಸಿಲà³à²²)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ"
-#: ../cli/src/utils.c:105
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "ನೀವೠ'%s' ಅನà³à²¨à³ '%s' ಗೆ ಹೊಂದಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? [yes]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "ನೀವೠ'%s' ಅನà³à²¨à³ ಅಳಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? [yes]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s\" ಒಂದೠಮಾನà³à²¯à²µà²¾à²—ಿಲà³à²²"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <%d-%d> ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <%d-%d> ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <option>=<value> ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "'%s' ಸೂಚಿಯೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "ತೆಗೆದà³à²¹à²¾à²•à²²à³ ಯಾವà³à²¦à³† ಅಂಶವಿಲà³à²²"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "'%d' ಸೂಚಿಯೠ<0-%d> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³† '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "ಆಯà³à²•à³† ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²² (ಅಥವ ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ MAC ಅಲà³à²²"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಲà³à²²"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' ಒಂದೠಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²²"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s\" ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಹೆಕà³à²¸à³ ಅಕà³à²·à²° ಆಗಿಲà³à²²"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MAC ಅಲà³à²²"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s\" ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ UUID ಆಗಿಲà³à²²"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"ಬಳಕೆದಾರ ಅನà³à²®à²¤à²¿à²—ಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ. ಈ ಪಟà³à²Ÿà²¿à²¯à³ ಈ ಕೆಳಗಿನಂತೆ "
+"ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ ಬಳಕೆದಾರ ಪಟà³à²Ÿà²¿à²¯à²¾à²—ಿದೆ:\n"
+" [user:]<user name 1>, [user:]<user name 2>,... \n"
+"ಅಂಶಗಳನà³à²¨à³ ವಿರಾಮಚಿಹà³à²¨à³†à²—ಳೠಅಥವ ಖಾಲಿಜಾಗಗಳಿಂದ (ಸà³à²ªà³‡à²¸à³) ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²¬à²¹à³à²¦à³.\n"
+"\n"
+"ಉದಾಹರಣೆಗೆ: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮಾಸà³à²Ÿà²°à³ ಆಗಿಲà³à²²; ifname ಅಥವ ಸಂಪರà³à²• UUID ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "ಖಾಸಗಿ ಕೀಲಿ ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಒದಗಿಸಲಾಗಿಲà³à²²"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"ಖಾಸಗಿ ಕೀಲಿ ಮತà³à²¤à³ ಕೀಲಿ ಗà³à²ªà³à²¤à²ªà²¦à²•à³à²•à³† ಮಾರà³à²—ವನà³à²¨à³ ಒದಗಿಸಿ (ಈವರೆಗೂ ಹೊಂದಿಸಲಾಗಿರದೆ "
+"ಇದà³à²¦à²²à³à²²à²¿):\n"
+" <file path> [<password>]\n"
+"ಉದಾಹರಣೆಗೆ: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"ಬೈಟà³â€Œà²—ಳನà³à²¨à³ ಹೆಕà³à²¸à²¾à²¡à³†à²¸à²¿à²®à²²à³ ಮೌಲà³à²¯à²—ಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯ ರೂಪದಲà³à²²à²¿ ನಮೂದಿಸಿ.\n"
+"ಎರಡೠವಿನà³à²¯à²¾à²¸à²—ಳಿಗೆ ಅನà³à²®à²¤à²¿ ಇದೆ:\n"
+"(a) ಹೆಕà³à²¸à²¾à²¡à³†à²¸à²¿à²®à²²à³ ಅಂಕಿಗಳ ಒಂದೠವಾಕà³à²¯à²¾à²‚ಶ, ಇಲà³à²²à²¿ ಪà³à²°à²¤à²¿ ಎರಡೠಅಂಕಿಗಳೠಒಂದೠಬೈಟà³â€Œ "
+"ಅನà³à²¨à³ ಪà³à²°à²¤à²¿à²¨à²¿à²§à²¿à²¸à³à²¤à³à²¤à²µà³†\n"
+"(b) ಹೆಕà³à²¸à²¾à²¡à³†à²¸à²¿à²®à²²à³ ಅಂಕಿಗಳಲà³à²²à²¿ ಬರೆಯಲಾದ ಖಾಲಿಜಾಗಗಳಿಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಪಟà³à²Ÿà²¿ "
+"(à²à²šà³à²›à²¿à²• 0x/0X ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³, ಮತà³à²¤à³ ಎದà³à²°à²¿à²—ೆ ನಮೂದಿಸಲಾದ à²à²šà³à²›à²¿à²• 0 ಯೊಂದಿಗೆ).\n"
+"\n"
+"ಉದಾಹರಣೆಗಳà³: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"ಹೀಗೆ ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ ಬಾಂಡಿಂಗೠಆಯà³à²•à³†à²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ:\n"
+" option = <value>, option = <value>,... \n"
+"ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳೆಂದರೆ: %s\n"
+"'mode' ಅನà³à²¨à³ ಒಂದೠಹೆಸರೠಅಥವ ಒಂದೠಸಂಖà³à²¯à³†à²¯à²¾à²—ಿ ಒದಗಿಸಬೇಕà³:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"ಉದಾಹರಣೆ: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ InfiniBand MAC ಅಲà³à²²"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s\" ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ IBoIP P_Key ಆಗಿಲà³à²²"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS ಪೂರೈಕೆಗಣಕಗಳ IPv4 ವಿಳಾಸಗಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ.\n"
+"\n"
+"ಉದಾಹರಣೆ: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (ip[/prefix] [gateway] ಅನà³à²¨à³ ಬಳಸಿ)"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"ಹೀಗೆ ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ IPv4 ವಿಳಾಸಗಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"\n"
+"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 32 ರ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ ಎಂದೠಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಉದಾಹರಣೆ: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (ip/[prefix] next-hop [metric] ಅನà³à²¨à³ ಬಳಸಿ)"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"ಹೀಗೆ ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ IPv4 ರೌಟà³â€Œà²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 32 ರ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ ಎಂದೠಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಮೆಟà³à²°à²¿à²•à³ ಅನà³à²¨à³ 0 ಯ ಮೆಟà³à²°à²¿à²•à³ ಆಗಿ ಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆ: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS ಪೂರೈಕೆಗಣಕಗಳ IPv6 ವಿಳಾಸಗಳನà³à²¨à³ ನಮೂದಿಸಿ. IPv6 ಸಂರಚನೆಯ ವಿಧಾನವೠ'auto' "
+"ಆಗಿದà³à²¦à²²à³à²²à²¿ ಈ DNS ಪೂರೈಕೆಗಣಕಗಳಿಗೆ ಸà³à²µà²¯à²‚ಚಾಲಿತ ಸಂರಚನೆಯಿಂದ ದೊರೆತ ಮೌಲà³à²¯à²—ಳನà³à²¨à³ "
+"ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¦à³† (ಯಾವà³à²¦à²¾à²¦à²°à³‚ ಇದà³à²¦à²²à³à²²à²¿). DNS ಪೂರೈಕೆಗಣಕಗಳನà³à²¨à³ 'shared' ಅಥವ "
+"'link-local' IPv6 ಸಂರಚನಾ ವಿಧಾನಗಳೊಡನೆ ಬಳಸಲೠಸಾಧà³à²¯à²µà²¿à²°à³à²µà³à²¦à²¿à²²à³à²², à²à²•à³†à²‚ದರೆ ಯಾವà³à²¦à³† "
+"ಅಪà³â€Œà²¸à³à²Ÿà³à²°à³€à²®à³ ಜಾಲಬಂಧವೠಇರà³à²µà³à²¦à²¿à²²à³à²². ಮಿಕà³à²•à³à²³à²¿à²¦ ಎಲà³à²²à²¾ IPv6 ಸಂರಚನಾ ವಿಧಾನಗಳಲà³à²²à²¿, ಈ "
+"DNS ಪೂರೈಕೆಗಣಕಗಳನà³à²¨à³ ಈ ಸಂಪರà³à²•à²•à³à²•à³† ಮಾತà³à²°à²µà²¾à²¦ DNS ಪೂರೈಕೆಗಣಕಗಳಾಗಿ ಬಳಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆ: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+msgstr ""
+"ಹೀಗೆ ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ IPv6 ವಿಳಾಸಗಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"\n"
+"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 32 ರ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ ಎಂದೠಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಉದಾಹರಣೆ: / 26, 0/\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (<dest IP>/prefix <next-hop IP> [metric] ಅನà³à²¨à³ ಬಳಸಿ)"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"ಹೀಗೆ ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ IPv6 ರೌಟà³â€Œà²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 32 ರ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ ಎಂದೠಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಮೆಟà³à²°à²¿à²•à³ ಅನà³à²¨à³ 0 ಯ ಮೆಟà³à²°à²¿à²•à³ ಆಗಿ ಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆ: / 2 , 00/ 1\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; [0, 1 ಅಥವ 2] ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²; <1-13> ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; [e, o, n] ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli ಯೠನೇರವಾದ JSON ಸಂರಚನಾ ದತà³à²¤à²¾à²‚ಶ ಮತà³à²¤à³ ಸಂರಚನೆಯನà³à²¨à³ ಹೊಂದಿರà³à²µ ಕಡತದ ಹೆಸರೠ"
+"ಎರಡನà³à²¨à³‚ ಸಹ ಅಂಗೀಕರಿಸà³à²¤à³à²¤à²¦à³†. ಎರಡನೆಯ ಸಂದರà³à²­à²¦à²²à³à²²à²¿, ಕಡತವನà³à²¨à³ ಓದಿ ನಂತರ "
+"ಅದರಲà³à²²à²¿à²°à³à²µà³à²¦à²¨à³à²¨à³ ಈ ಗà³à²£à²•à³à²•à³† ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆಗೆ: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "ತೆಗೆದà³à²¹à²¾à²•à²²à³ ಯಾವà³à²¦à³† ಆದà³à²¯à²¤à³† ಇಲà³à²²"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "'%d' ಸೂಚಿಯೠ<0-%d> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; 3 ವಾಕà³à²¯à²¾à²‚ಶಗಳನà³à²¨à³ ಒದಗಿಸಬೇಕà³"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"ಮೂರೠಚಾನಲà³â€Œà²—ಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ (ವಿರಾಮಚಿಹà³à²¨à³† ಅಥವ ಖಾಲಿಸà³à²¥à²³à²—ಳಿಂದ "
+"ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦).\n"
+"\n"
+"ಉದಾಹರಣೆ: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"ಈ ಕೆಳಗಿನಂತೆ ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ S/390 ಆಯà³à²•à³†à²—ಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ:\n"
+" option = <value>, option = <value>,... \n"
+"ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳೆಂದರೆ: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP ಕೀಲಿಯನà³à²¨à³ '%s' ಎಂದೠಊಹಿಸಲಾಗಿದೆ\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr ""
+"'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಇವà³à²—ಳಲà³à²²à²¿ ಒಂದೠಆಗಿಲà³à²² [0 (unknown), 1 (key), 2 (passphrase)]"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP ಕೀಲಿಗಳ ಬಗೆಯನà³à²¨à³ ನಮೂದಿಸಿ. ಅಂಗೀಕರಿಸಲಾಗà³à²µ ಮೌಲà³à²¯à²—ಳೆಂದರೆ: 0 ಅಥವ unknown, 1 "
+"ಅಥವ key, ಮತà³à²¤à³ 2 ಅಥವ passphrase.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ PSK ಆಗಿಲà³à²²"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ DCB ಫà³à²²à³à²¯à²¾à²—ೠಆಗಿಲà³à²²"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠDCB app ಆದà³à²¯à²¤à³† ಆಗಿಲà³à²²"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "8 ವಿರಾಮಚಿಹà³à²¨à³†à²—ಳಿಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಸಂಖà³à²¯à³†à²—ಳನà³à²¨à³ ಹೊಂದಿರಬೇಕà³"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr ""
+"'%s' ಎನà³à²¨à³à²µà³à²¦à³ 0 ಮತà³à²¤à³ %u (ಅದೂ ಸೇರಿದಂತೆ) ಅಥವ %u ನಡà³à²µà²¿à²¨ ಒಂದೠಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²²"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ 0 ಮತà³à²¤à³ %u (ಅದೂ ಸೇರಿದಂತೆ) ನಡà³à²µà²¿à²¨ ಒಂದೠಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²²"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid "Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: '%s' ಎನà³à²¨à³à²µà³à²¦à³ 1 (ಸಕà³à²°à²¿à²¯à²—ೊಂಡ) ಅನà³à²¨à³ ಹೊಂದಿರà³à²µà²µà²°à³†à²—ೆ ಬದಲಾವಣೆಗಳೠ"
+"ಯಾವà³à²¦à³† ಪರಿಣಾಮ ಬೀರà³à²µà³à²¦à²¿à²²à³à²²\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "ಬà³à²¯à²¾à²‚ಡà³â€Œà²µà²¿à²¡à³à²¤à³ ಪà³à²°à²¤à²¿à²¶à²¤à²—ಳೠಒಟà³à²Ÿà³ 100%% ಆಗಿರಬೇಕà³"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "ಗà³à²£à²¦ ಮೌಲà³à²¯à²•à³à²•à³† ಹೇಗೆ ಹೋಗಬೇಕೠಎಂದೠತಿಳಿದಿಲà³à²²"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "ಗà³à²£à²µà²¨à³à²¨à³ ಬದಲಾಯಿಸಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²²"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM ಗà³à²£à²¦ ವಿವರಣೆ]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli ನಿಶà³à²šà²¿à²¤ ವಿವರಣೆ]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "ದೋಷ: '%s' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨ ಮೌಲà³à²¯à²¦ ಅಗತà³à²¯à²µà²¿à²¦à³†."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "ದೋಷ: '%s' ಅನà³à²¨à³ ನಿರೀಕà³à²·à²¿à²¸à²²à²¾à²—ಿತà³à²¤à³, ಆದರೆ '%s' ಅನà³à²¨à³ ನೀಡಲಾಗಿದೆ."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "ದೋಷ: ಅನಿರೀಕà³à²·à²¿à²¤ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠ'%s'"
+
+#: ../cli/src/utils.c:189
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "ಇದರಿಂದ IP4 ವಿಳಾಸ '0x%X' ಅನà³à²¨à³ ಪಠà³à²¯à²µà²¾à²—ಿ ಪರಿವರà³à²¤à²¿à²¸à³à²µà²²à³à²²à²¿ ದೋಷ"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:217
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP6 address '%s' to text form"
msgstr "ಇದರಿಂದ IP6 ವಿಳಾಸ '%s' ಅನà³à²¨à³ ಪಠà³à²¯à²µà²¾à²—ಿ ಪರಿವರà³à²¤à²¿à²¸à³à²µà²²à³à²²à²¿ ದೋಷ"
-#: ../cli/src/utils.c:234
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; [%s] ಅಥವ [%s] ಅನà³à²¨à³ ಬಳಸಿ"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' ಎಂಬà³à²¦à³ ಅಸà³à²ªà²·à³à²Ÿà²µà²¾à²—ಿದೆ (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "ಹೆಸರೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²², [%s] ನಲà³à²²à²¿ ಒಂದನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿"
+
+#: ../cli/src/utils.c:718
#, c-format
msgid "field '%s' has to be alone"
msgstr "'%s' ಎಂಬ ಕà³à²·à³‡à²¤à³à²°à²µà³ ಒಂಟಿಯಾಗಿಯೆ ಇರಬೇಕà³"
-#: ../cli/src/utils.c:237
+#: ../cli/src/utils.c:720
#, c-format
-msgid "invalid field '%s'"
-msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಕà³à²·à³‡à²¤à³à²° '%s'"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಸà³à²¥à²³ '%s'; ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಸà³à²¥à²³à²—ಳà³: %s"
-#: ../cli/src/utils.c:256
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "'--terse' ಎಂಬ ಆಯà³à²•à³†à²—ೆ '--fields' ಅನà³à²¨à³ ಸೂಚಿಸಬೇಕಾಗà³à²¤à³à²¤à²¦à³†"
-#: ../cli/src/utils.c:260
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"'--terse' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ನಿಶà³à²šà²¿à²¤à²µà²¾à²¦ '--fields' ಆಯà³à²•à³†à²¯ ಮೌಲà³à²¯à²¦ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†à²¯à³† "
-"ಹೊರತà³, "
-"'%s' ಎಂಬà³à²¦à²²à³à²²"
+"ಹೊರತà³, '%s' ಎಂಬà³à²¦à²²à³à²²"
-#: ../cli/src/utils.c:470
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"ದೋಷ: org.freedesktop.DBus ಗಾಗಿ D-Bus ಆಬà³à²œà³†à²•à³à²Ÿà³â€ ಪà³à²°à²¾à²•à³à²¸à²¿à²¯à²¨à³à²¨à³ ರಚಿಸಲೠ"
-"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²"
-
-#: ../cli/src/utils.c:478
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "ದೋಷ: NameHasOwner ಮನವಿ ವಿಫಲಗೊಂಡಿದೆ: %s"
-
-#: ../cli/src/utils.c:523
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -2079,15 +4763,16 @@ msgstr ""
"ಎಚà³à²šà²°à²¿à²•à³†: nmcli (%s) ಮತà³à²¤à³ NetworkManager (%s) ಆವೃತà³à²¤à²¿à²—ಳೠತಾಳೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²². "
"ಎಚà³à²šà²°à²¿à²•à³†à²¯à²¨à³à²¨à³ ಮರೆಮಾಚಲೠ--nocheck ಬಳಸà³.\n"
-#: ../cli/src/utils.c:532
+#: ../cli/src/utils.c:1079
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
"execution using --nocheck, but the results are unpredictable."
msgstr ""
-"ಎಚà³à²šà²°à²¿à²•à³†: nmcli (%s) ಮತà³à²¤à³ NetworkManager (%s) ಆವೃತà³à²¤à²¿à²—ಳೠತಾಳೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²². "
-"--nocheck ಅನà³à²¨à³ ಬಳಸಿಕೊಂಡೠಕಾರà³à²¯à²—ತಗೊಳಿಸಲೠಒತà³à²¤à²¾à²¯à²ªà²¡à²¿à²¸à³, ಆದರೆ ಫಲಿತಾಂಶಗಳೠ"
-"ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²—ಿರà³à²¤à³à²¤à²µà³†.\n."
+"ಎಚà³à²šà²°à²¿à²•à³†: nmcli (%s) ಮತà³à²¤à³ NetworkManager (%s) ಆವೃತà³à²¤à²¿à²—ಳೠತಾಳೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²². --"
+"nocheck ಅನà³à²¨à³ ಬಳಸಿಕೊಂಡೠಕಾರà³à²¯à²—ತಗೊಳಿಸಲೠಒತà³à²¤à²¾à²¯à²ªà²¡à²¿à²¸à³, ಆದರೆ ಫಲಿತಾಂಶಗಳೠ"
+"ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²—ಿರà³à²¤à³à²¤à²µà³†.\n"
+"."
#: ../libnm-util/crypto.c:133
#, c-format
@@ -2099,120 +4784,87 @@ msgstr "PEM ಕೀಲಿ ಕಡತವೠಯಾವà³à²¦à³† ಅಂತà³à²¯ ಟà
msgid "Doesn't look like a PEM private key file."
msgstr "ಒಂದೠPEM ಖಾಸಗಿ ಕೀಲಿ ಕಡತದಂತೆ ತೋರà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM ಕಡತ ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ಶೇಖರಿಸಿಡಲೠಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: Proc-ಬಗೆಯೠಮೊದಲಿನ ಟà³à²¯à²¾à²—ೠಆಗಿಲà³à²²."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: ಗೊತà³à²¤à²¿à²°à²¦ Proc-ಬಗೆಯ ಟà³à²¯à²¾à²—à³ '%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: DEK-Info ಯೠಎರಡನೆ ಟà³à²¯à²¾à²—ೠಆಗಿಲà³à²²."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: DEK-Info ಟà³à²¯à²¾à²—à³â€Œà²¨à²²à³à²²à²¿ ಯಾವà³à²¦à³† IV ಕಂಡà³à²¬à²‚ದಿಲà³à²²."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: DEK-Info ಟà³à²¯à²¾à²—à³â€Œà²¨à²²à³à²²à²¿ IV ಯ ಅಮಾನà³à²¯à²µà²¾à²¦ ವಿನà³à²¯à²¾à²¸."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: ಗೊತà³à²¤à²¿à²°à²¦ ಖಾಸಗಿ ಕೀಲಿ ಸಿಫರೠ'%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕೋಡೠಮಾಡಲಾಗಲಿಲà³à²²."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "ನಿರೀಕà³à²·à²¿à²¤ PKCS#8 ಆರಂಭಿಕ ಟà³à²¯à²¾à²—ೠಅನà³à²¨à³ ಪತà³à²¤à³† ಮಾಡಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "ನಿರೀಕà³à²·à²¿à²¤ PKCS#8 ಅಂತà³à²¯ ಟà³à²¯à²¾à²—à³ '%s' ಅನà³à²¨à³ ಪತà³à²¤à³† ಮಾಡಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto.c:312
-#| msgid "Not enough memory to store file data."
-msgid "Not enough memory to store private key data."
-msgstr "ಖಾಸಗಿ ಕೀಲಿ ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ಶೇಖರಿಸಿಡಲೠಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
-
-#: ../libnm-util/crypto.c:317
-#| msgid "Failed to decrypt the private key."
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕೋಡೠಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²° ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ಶೇಖರಿಸಿಡಲೠಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ಯ ಉದà³à²¦à²µà³ ಸರಿ ಸಂಖà³à²¯à³†à²¯ ಬೈಟà³â€Œà²—ಳಂದ ಆಗಿರಬೇಕà³."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV ಅನà³à²¨à³ ಶೇಖರಿಸಿಡಲೠಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ಯೠಹೆಕà³à²¸à²¾-ದಶಮಾಂಶ ಅಲà³à²²à²¦ ಅಂಕೆಗಳನà³à²¨à³ ಹೊಂದಿದೆ."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "ಖಾಸಗಿ ಕೀಲಿ ಸಿಫರೠ'%s' ತಿಳಿದಿಲà³à²²."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲಾದ ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಶೇಖರಿಸಿಡಲೠಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯ ಬಗೆಯನà³à²¨à³ ನಿರà³à²§à²°à²¿à²¸à²²à³ ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
-#| msgid "PEM certificate '%s' had no end tag '%s'."
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà³ ಯಾವà³à²¦à³† ಆರಂಭದ ಟà³à²¯à²¾à²—à³ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
-#| msgid "PEM certificate '%s' had no end tag '%s'."
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà³ ಯಾವà³à²¦à³† ಅಂತà³à²¯à²¦ ಟà³à²¯à²¾à²—à³ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà²¨à³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠವಿಫಲಗೊಂಡಿದೆ."
@@ -2231,103 +4883,91 @@ msgstr "MD5 ಎಂಜಿನೠಅನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²
msgid "Invalid IV length (must be at least %zd)."
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IV ಗಾತà³à²° (ಕನಿಷà³à²Ÿ %zd ಇರಬೇಕà³)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲಾದ ಬಫರಿಗಾಗಿ ಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr ""
"ಡೀಕà³à²°à²¿à²ªà³à²¸à³ ಮಾಡà³à²µ ಸಿಫರೠಸಂದರà³à²­à²µà²¨à³à²¨à³ ಆರಂಭಗೊಳಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠಸಿಮಿಟà³à²°à²¿à²•à³ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²¦ ಪà³à²¯à²¾à²¡à²¿à²‚ಗೠ"
"ಗಾತà³à²°"
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠಮೆಮೊರಿಯನà³à²¨à³ ನಿಯೋಜಸಿಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "ಗೂಢಲಿಪೀಕರಣ ಸಿಫರೠಸಂದರà³à²­à²µà²¨à³à²¨à³ ಆರಂಭಗೊಳಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠಸಿಮಿಟà³à²°à²¿à²•à³ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಗೂಢಲಿಪೀಕರಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²° ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ದೋಷ ಉಂಟಾಗಿದೆ: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà²¨à³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 ಡೀಕೋಡರೠಅನà³à²¨à³ ಆರಂಭಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 ಕಡತವನà³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 ಕಡತವನà³à²¨à³ ಪರಿಶೀಲಿಸಲಾಗಿಲà³à²²: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
-#| msgid "Couldn't initialize PKCS#12 decoder: %s"
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 ಡೀಕೋಡರೠಅನà³à²¨à³ ಆರಂಭಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
-#| msgid "Couldn't decode PKCS#12 file: %s"
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ಕಡತವನà³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
@@ -2346,129 +4986,485 @@ msgstr "MD5 ಸಂದರà³à²­à²µà²¨à³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à
msgid "Invalid IV length (must be at least %d)."
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IV ಗಾತà³à²° (ಕನಿಷà³à²Ÿ %d ಇರಬೇಕà³)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ಡೀಕà³à²°à²ªà³à²Ÿà³ ಮಾಡಲಾಗà³à²µ ಸಿಫರೠಜಾಗವನà³à²¨à³ ಆರಂಭಿಸಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠಸಿಮಿಟà³à²°à²¿à²•à³ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µ ಸನà³à²¨à²¿à²µà³‡à²¶à²µà²¨à³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲಾದ ದತà³à²¤à²¾à²‚ಶದ "
-"ಗಾತà³à²°à²µà³ "
-"ಬಹಳ ದೊಡà³à²¡à²¦à²¾à²—ಿದೆ."
+"ಗಾತà³à²°à²µà³ ಬಹಳ ದೊಡà³à²¡à²¦à²¾à²—ಿದೆ."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr ""
"ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µà²¿à²•à³†à²¯à²¨à³à²¨à³ ಪೂರà³à²£à²—ೊಳಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲಾಗà³à²µ ಸಿಫರೠಜಾಗವನà³à²¨à³ ಆರಂಭಿಸಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠಸಿಮಿಟà³à²°à²¿à²•à³ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "ಗೂಢಲಿಪೀಕರಿಸà³à²µ ಸನà³à²¨à²¿à²µà³‡à²¶à²µà²¨à³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "ಗೂಢಲಿಪೀಕರಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²¦ ದತà³à²¤à²¾à²‚ಶದ ಮೊತà³à²¤."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà²¨à³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಲಿಲà³à²²: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ UCS2 ಗೆ ಬದಲಾಯಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 ಡೀಕೋಡರೠಅನà³à²¨à³ ಆರಂಭಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 ಕಡತವನà³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 ಕಡತವನà³à²¨à³ ಖಚಿತಪಡಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "ಮನಸà³à²¸à²¿à²—ೆ ಬಂದ ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ಉತà³à²ªà²¾à²¦à²¿à²¸à²²à²¾à²—ಲಿಲà³à²²."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "ಗà³à²£à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "ಗà³à²£à²µà³ ಖಾಲಿ ಇದೆ"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ PKCS#12 ಗಾಗಿನ ಗà³à²£à²¦à³Šà²‚ದಿಗೆ ಹೊಂದಿಕೆಯಾಗಬೇಕà³"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "ಗà³à²£à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಗà³à²£à²¦ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮೌಲà³à²¯à²µà²²à³à²²"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' ಅಥವ '%s' ಸಿದà³à²§à²¤à³†à²¯ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "ಆಯà³à²•à³† '%s' ಅಥವ ಅದರ ಮೌಲà³à²¯ '%s' ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s' ಮತà³à²¤à³ '%s' ರಲà³à²²à²¿ ಕೇವಲ ಒಂದನà³à²¨à³ ಮಾತà³à²° ಸೂಚಿಸಬಹà³à²¦à²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "ಖಡà³à²¡à²¾à²¯ ಆಯà³à²•à³† '%s' ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s\" ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಗಾಗಿನ ಒಂದೠಮಾನà³à²¯ ಮೌಲà³à²¯à²µà²²à³à²²"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s > 0' ನೊಂದಿಗೆ ಹೊಂದಿಕೊಳà³à²³à³à²¤à³à²¤à²¿à²²à³à²²"
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಗಾಗಿನ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಲà³à²²"
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' ಆಯà³à²•à³†à²¯à³ ಕೇವಲ '%s=%s' ಕà³à²•à³† ಮಾತà³à²° ಮಾನà³à²¯à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³†"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಗಾಗಿನ ಮಾನà³à²¯à²µà²¾à²¦ ಸಂರಚನೆಯಲà³à²²"
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' ಆಯà³à²•à³†à²—ಾಗಿ '%s' ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಸಿದà³à²§à²—ೊಳಿಸà³à²µ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಗೂಢಲಿಪೀಕರಿಸಲೠಸಾಕಷà³à²Ÿà³ ಮೆಮೊರಿ ಇಲà³à²²."
+msgid "'%s' option is empty"
+msgstr "'%s' ಆಯà³à²•à³†à²¯à³ ಖಾಲಿ ಇದೆ"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಆಯà³à²•à³†à²—ಾಗಿನ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ IPv4 ವಿಳಾಸವಲà³à²²"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' ಎನà³à²¨à³à²µà³à²¦à³ ಗà³à²£à²¦ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮೌಲà³à²¯à²µà²²à³à²² (ಇದೠ<= %d ಆಗಿರಬೇಕà³)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "'%d' ಮೌಲà³à²¯à²µà³ <%d-%d> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "ಗà³à²£à²µà³ ಖಾಲಿ ಇದೆ'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr ""
+"'%s' ಎನà³à²¨à³à²µà³à²¦à³ ವರà³à²šà³à²µà²²à³ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾದ '%s' ಕà³à²•à³† ಹೊಂದಿಕೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²²"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "ಇದಕà³à²•à²¾à²—ಿ ಸಂಪರà³à²•à²¦à²²à³à²²à²¿ '%s' ಸಿದà³à²§à²¤à³†à²¯ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "ಸà³à²²à³‡à²µà³â€Œà²—ಾಗಿ IPv4 ಸಂರಚನೆಗೆ ಅನà³à²®à²¤à²¿ ಇರà³à²µà³à²¦à²¿à²²à³à²²"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM ಕಡತ ರಚನೆಗೆ ಮೆಮೊರಿಯನà³à²¨à³ ನಿಯೋಜಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "ಸà³à²²à³‡à²µà³â€Œà²—ಾಗಿ IPv6 ಸಂರಚನೆಗೆ ಅನà³à²®à²¤à²¿ ಇರà³à²µà³à²¦à²¿à²²à³à²²"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "ಫà³à²²à³à²¯à²¾à²—à³â€Œà²—ಳೠಅಮಾನà³à²¯à²µà²¾à²—ಿವೆ"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "ಫà³à²²à³à²¯à²¾à²—à³â€Œà²—ಳೠಅಮಾನà³à²¯à²µà²¾à²—ಿವೆ - ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "ಗà³à²£à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ (ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿಲà³à²²)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "ಘಟಕವೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "ಮೊತà³à²¤à²µà³ 100% ಆಗಿಲà³à²²"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "ಗà³à²£à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "ಗà³à²£à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
+
+#: ../libnm-util/nm-setting-gsm.c:297
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "IV ಅನà³à²¨à³ PEM ಕಡತಕà³à²•à³† ಬರೆಯಲೠಮೆಮೊರಿಯನà³à²¨à³ ನಿಯೋಜಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "'%s' ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà³ ಖಾಲಿ ಇದೆ ಅಥವ ಬಹಳ ಉದà³à²¦à²µà²¾à²—ಿದೆ (>64)"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-gsm.c:329
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr ""
-"ಗೂಢಲಿಪೀಕರಿಸಲಾದ ಕೀಲಿಯನà³à²¨à³ PEM ಕಡತಕà³à²•à³† ಬರೆಯಲೠಮೆಮೊರಿಯನà³à²¨à³ ನಿಯೋಜಿಸಲೠ"
-"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+"'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಅಮಾನà³à²¯à²µà²¾à²¦ ಅಕà³à²·à²°à²µà²¨à³à²¨à³(ಗಳನà³à²¨à³) ಹೊಂದಿದೆ ( [A-Za-z._-] ಅನà³à²¨à³ "
+"ಬಳಸà³)"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' ಉದà³à²¦à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ (5 ಅಥವ 6 ಅಂಕಿಗಳಷà³à²Ÿà²¿à²°à²¬à³‡à²•à³)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಲà³à²²"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "ಮೂಲವನà³à²¨à³ (ಪೇರೆಂಟà³) ಸೂಚಿಸà³à²µà²¾à²— P_Key ಅನà³à²¨à³ ಸೂಚಿಸà³à²µà³à²¦à³ ಅತà³à²¯à²—ತà³à²¯"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key ಸಂಪರà³à²•à²µà³ ಮೂಲ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರನà³à²¨à³ ಸೂಚಿಸಿಲà³à²²"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "ಈ ಗà³à²£à²µà³ '%s=%s' ಗಾಗಿ ಅನà³à²®à²¤à²¿ ಇಲà³à²²"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 ವಿಳಾಸವೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 ವಿಳಾಸವೠಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ ಹೊಂದಿದೆ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. ರೌಟà³â€Œ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-ip4-config.c:825
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ಕಡತ ದತà³à²¤à²¾à²‚ಶಕà³à²•à²¾à²—ಿ ಮೆಮೊರಿಯನà³à²¨à³ ನಿಯೋಜಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+msgid "%d. route has invalid prefix"
+msgstr "%d. ರೌಟà³â€Œ ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ ಹೊಂದಿದೆ"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' ಯೠ%s=%s ಗಾಗಿ ಅನà³à²®à²¤à²¿ ಇಲà³à²²"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID ಉದà³à²¦à²µà³ <1-32> ಬೈಟà³â€Œà²—ಳ ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ <128-16384> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "ಈ ಗà³à²£à²µà²¨à³à²¨à³ ಹೊಂದಿಸಲೠಶೂನà³à²¯à²µà²²à³à²²à²¦ '%s' ಗà³à²£à²¦ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' ಮೌಲà³à²¯à²µà³ '%s=%s' ಗೆ ಹೊಂದಿಕೆಯಾಗà³à²µà³à²¦à²¿à²²à³à²²"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ UUID ಅಥವ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಿಲà³à²²"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "ಗà³à²£à²µà²¨à³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²² ಮತà³à²¤à³ '%s:%s' ಆಗಿಲà³à²²"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "ಫà³à²²à³à²¯à²¾à²—à³â€Œà²—ಳೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ ಎತರà³à²¨à³†à²Ÿà³ ಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨ ಮೌಲà³à²¯à²µà²²à³à²²"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಡà³à²¯à³‚ಪà³à²²à³†à²•à³à²¸à³ ಮೌಲà³à²¯à²µà²²à³à²²"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MAC ವಿಳಾಸವಲà³à²²"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MAC ವಿಳಾಸವಲà³à²²"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "'%s' ಅಥವ ಅದರ ಮೌಲà³à²¯à²µà³ '%s' ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' ಸà³à²°à²•à³à²·à²¤à³†à²—ಾಗಿ '%s=%s' ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' ಸà³à²°à²•à³à²·à²¤à³†à²—ಾಗಿ '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಇರà³à²µ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' ಮೌಲà³à²¯à²µà³ <0-3> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "ಈ ಗà³à²£à²¦à²²à³à²²à²¿ '%s' ಸಂಪರà³à²•à²—ಳಿಗಾಗಿ '%s' ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' ಅನà³à²¨à³ ಕೇವಲ '%s=%s' ಎನà³à²¨à³à²µà³à²¦à²°à³Šà²‚ದಿಗೆ ಮಾತà³à²° ಬಳಸಬಹà³à²¦à³ (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' ಎಂಬà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ವೈ-ಫೈ ಸಾಧನವಾಗಿಲà³à²²."
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s\" ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಬà³à²¯à²¾à²‚ಡೠಅಲà³à²²"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "'%s' ಗà³à²£à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³à²µ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2486,15 +5482,13 @@ msgid ""
"power management)"
msgstr ""
"NetworkManager ಅನà³à²¨à³ ನಿದà³à²°à²¾à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಅಥವ ಎಚà³à²šà²°à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಕಳà³à²¹à²¿à²¸à²¿ (ಇದನà³à²¨à³ ಕೇವಲ "
-"ವà³à²¯à²µà²¸à³à²¥à³†à²¯ "
-"ವಿದà³à²¯à³à²šà³à²›à²•à³à²¤à²¿ ನಿರà³à²µà²¹à²£à³†à²¯à²¿à²‚ದ ಮಾತà³à²° ಬಳಸಬೇಕà³)"
+"ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ವಿದà³à²¯à³à²šà³à²›à²•à³à²¤à²¿ ನಿರà³à²µà²¹à²£à³†à²¯à²¿à²‚ದ ಮಾತà³à²° ಬಳಸಬೇಕà³)"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
msgstr ""
"NetworkManager ಅನà³à²¨à³ ನಿದà³à²°à²¾à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಅಥವ ಎಚà³à²šà²°à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಕಳà³à²¹à²¿à²¸à³à²µà³à²¦à²¨à³à²¨à³ "
-"ವà³à²¯à²µà²¸à³à²¥à³†à²¯ "
-"ನಿಯಮವೠತಡೆಯà³à²¤à³à²¤à²¿à²¦à³†"
+"ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮವೠತಡೆಯà³à²¤à³à²¤à²¿à²¦à³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
@@ -2516,18 +5510,16 @@ msgstr ""
"ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
-#| msgid "Enable or disable mobile broadband devices"
msgid "Enable or disable WiMAX mobile broadband devices"
-msgstr "WiMAX ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಿ ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ"
+msgstr ""
+"WiMAX ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಿ ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
-#| msgid ""
-#| "System policy prevents enabling or disabling mobile broadband devices"
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
-"WiMAX ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤ ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ "
-"ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
+"WiMAX ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤ ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸದಂತೆ "
+"ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
@@ -2542,7 +5534,8 @@ msgid "Connection sharing via a protected WiFi network"
msgstr "ಒಂದೠಸಂರಕà³à²·à²¿à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸà³à²µà²¿à²•à³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
-msgid "System policy prevents sharing connections via a protected WiFi network"
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
msgstr ""
"ಒಂದೠಸಂರಕà³à²·à²¿à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠ"
"ತಡೆಯà³à²¤à³à²¤à²µà³†"
@@ -2554,26 +5547,23 @@ msgstr "ಒಂದೠಮà³à²•à³à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂà
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"ಒಂದೠಮà³à²•à³à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
+"ಒಂದೠಮà³à²•à³à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠ"
+"ತಡೆಯà³à²¤à³à²¤à²µà³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
-#| msgid "Allow control of network connections"
msgid "Modify personal network connections"
msgstr "ವೈಯಕà³à²¤à²¿à²• ಜಾಲಬಂಧ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¿"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
-#| msgid "System policy prevents modification of system settings"
msgid "System policy prevents modification of personal network settings"
msgstr ""
"ವೈಯಕà³à²¤à²¿à²• ಜಾಲಬಂಧದ ಸಿದà³à²§à²¤à³†à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
-#| msgid "Modify system connections"
msgid "Modify network connections for all users"
msgstr "ಎಲà³à²²à²¾ ಬಳಕೆದಾರರಿಗಾಗಿ ಜಾಲಬಂಧ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¿"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
-#| msgid "System policy prevents modification of system settings"
msgid "System policy prevents modification of network settings for all users"
msgstr ""
"ಎಲà³à²²à²¾ ಬಳಕೆದಾರರಿಗಾಗಿ ಜಾಲಬಂಧದ ಸಿದà³à²§à²¤à³†à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠ"
@@ -2588,131 +5578,80 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
-#: ../src/main.c:158
-#, c-format
-#| msgid "Failed to encrypt: %d."
-msgid "Failed to set signal mask: %d"
-msgstr "ಸಂಜà³à²žà³† ಮà³à²¸à³à²•à²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "ಸಂಜà³à²žà³† ನಿಭಾಯಿಸà³à²µ ಎಳೆಯನà³à²¨à³ ನಿರà³à²®à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲವಾಗಿದೆ :%d"
-
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s ಅನà³à²¨à³ ತೆರೆಯà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s ಗೆ ಬರೆಯà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s ಅನà³à²¨à³ ಮà³à²šà³à²šà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager ಈಗಾಗಲೆ ಚಾಲನೆಯಲà³à²²à²¿à²¦à³† (pid %ld)\n"
-#: ../src/main.c:363
-#| msgid "NetworkManager status"
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à²¿ ನಿರà³à²—ಮಿಸà³"
-#: ../src/main.c:364
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "ಒಂದೠಡೆಮನೠಆಗಬೇಡ"
-#: ../src/main.c:365
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "ಒಂದೠಡೆಮನೠಆಗಬೇಡ, ಮತà³à²¤à³ stderr ಗೆ ಲಾಗೠಮಾಡà³"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "ಲಾಗೠಹಂತ: [%s] ದಲà³à²²à²¿ ಒಂದà³"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr ""
+"ಲಾಗೠಡೊಮೇನà³â€Œà²—ಳನà³à²¨à³ ',' ಇಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²—ಿರà³à²¤à³à²¤à²¦à³†: [%s] ನ ಯಾವà³à²¦à³† ಸಂಯೋಜನೆ"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "ಎಲà³à²²à²¾ ಎಚà³à²šà²°à²¿à²•à³†à²—ಳನà³à²¨à³ ಮಾರಕವಾಗಿಸà³"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "ಒಂದೠPID ಕಡತವನà³à²¨à³ ಸೂಚಿಸಿ"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "filename"
msgstr "ಕಡತದಹೆಸರà³"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "State file location"
msgstr "ಸà³à²¥à²¿à²¤à²¿ ಕಡತವೠಇರà³à²µ ಸà³à²¥à²³"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:368
-msgid "Config file location"
-msgstr "Config ಕಡತವೠಇರà³à²µ ಸà³à²¥à²³"
-
-#: ../src/main.c:368
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:369
-msgid "List of plugins separated by ','"
-msgstr "',' ಇಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಪà³à²²à²—à³â€Œà²‡à²¨à³â€Œà²—ಳ ಪಟà³à²Ÿà²¿"
-
-#: ../src/main.c:369
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:371
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "ದಿನಚರಿಯ ಹಂತ: [ERR, WARN, INFO, DEBUG] ದಲà³à²²à²¿ ಒಂದà³"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:374
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"ದಿನಚರಿಯ ಡೊಮೈನà³â€Œà²—ಳನà³à²¨à³ ',' ಇಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²—ಿರà³à²¤à³à²¤à²¦à³†: ಇವà³à²—ಳಲà³à²²à²¿ ಯಾವà³à²¦à²¾à²¦à²° "
-"ಸಂಯೋಜನೆಯಾಗಿರಬಹà³à²¦à³\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:380
-msgid "An http(s) address for checking internet connectivity"
-msgstr "ಅಂತರಜಾಲ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸಲೠಒಂದೠhttp(s) ವಿಳಾಸ"
-
-#: ../src/main.c:381
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "ಸಂಪರà³à²•à²¦ ಪರಿಶೀಲನೆಯ ನಡà³à²µà²¿à²¨ ಕಾಲಾವಧಿ (ಸೆಕೆಂಡà³à²—ಳಲà³à²²à²¿)"
-
-#: ../src/main.c:382
-msgid "The expected start of the response"
-msgstr "ಪà³à²°à²¤à²¿à²•à³à²°à²¿à²¯à³†à²¯ ನಿರೀಕà³à²·à²¿à²¤ ಆರಂಭ"
-
-#: ../src/main.c:382
-msgid "Bingo!"
-msgstr "ಬಿಂಗೂ!"
-
-#: ../src/main.c:387
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules ನಿಮà³à²® ಪà³à²²à²¾à²Ÿà³â€Œà²«à²¾à²°à³à²®à²¿à²¨à²²à³à²²à²¿ ಬೆಂಬಲಿತವಾಗಿಲà³à²²!\n"
-#: ../src/main.c:406
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "NetworkManager ಅನà³à²¨à³ ಚಲಾಯಿಸಲೠನೀವೠನಿರà³à²µà²¾à²¹à²•à²°à²¾à²—ಿರಬೇಕà³!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2726,473 +5665,1068 @@ msgstr ""
"ಬಳಕೆದಾರರà³\n"
"ನಿರà³à²§à²°à²¿à²¸à²²à³ ಸಹಾಯ ಮಾಡà³à²¤à³à²¤à²¦à³†."
-#: ../src/main.c:412
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ.\n"
-#: ../src/main.c:422
+#: ../src/main.c:412
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager ಅನà³à²¨à³ ಚಲಾಯಿಸಲೠನೀವೠನಿರà³à²µà²¾à²¹à²•à²°à²¾à²—ಿರಬೇಕà³!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ.\n"
-#: ../src/main.c:449
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"ಆದೇಶ ಸಾಲಿಗೆ ಕಳà³à²¹à²¿à²¸à²²à²¾à²¦ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ದೆ ಇರà³à²µ ಲಾಗೠಡೊಮೇನà³â€Œ(ಗಳà³) '%s' ಅನà³à²¨à³ "
+"ಕಡೆಗಣಿಸಲಾಗಿದೆ.\n"
+
+#: ../src/main.c:468
#, c-format
-#| msgid "Failed to set IV for encryption: %s / %s."
msgid "Failed to read configuration: (%d) %s\n"
msgstr "ಸಂರಚನೆಯನà³à²¨à³ ಓದà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s\n"
-#: ../src/main.c:460
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "ಸಂರಚನಾ ಕಡತದಲà³à²²à²¿ ದೋಷ: %s.\n"
-#: ../src/main.c:467
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ದೆ ಇರà³à²µ ಲಾಗೠಡೊಮೇನà³â€Œ(ಗಳà³) '%s' ಅನà³à²¨à³ ಸಂರಚನಾ ಕಡತಗಳಿಂದ "
+"ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†.\n"
+
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "ಸà³à²¥à²¿à²¤à²¿ ಕಡತ %s ಅನà³à²¨à³ ಪಾರà³à²¸à³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ: (%d) %s\n"
-#: ../src/main.c:484
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "ಡೀಮನೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s [ದೋಷ %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:138
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "%s ಜಾಲಬಂಧ"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# NetworkManager ನಿಂದ ನಿರà³à²®à²¿à²¸à²²à²¾à²—ಿದೆ\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:145
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
-msgid ""
-"# Merged from %s\n"
+msgid "# Merged from %s\n"
"\n"
-msgstr ""
-"# %s ಇಂದ ಒಗà³à²—ೂಡಿಸಲಾಗಿದೆ\n"
+msgstr "# %s ಇಂದ ಒಗà³à²—ೂಡಿಸಲಾಗಿದೆ\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "ಬಳಸಬಹà³à²¦à²¾à²¦ ಯಾವà³à²¦à³† DHCP ಕà³à²²à³ˆà²‚ಟೠಕಂಡà³à²¬à²‚ದಿಲà³à²²."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' ಕಂಡೠಬಂದಿದೆ."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' ಕಂಡೠಬಂದಿದೆ."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ಬೆಂಬಲವಿರದ DHCP ಕà³à²²à³ˆà²‚ಟೠ'%s'"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
-"ಸೂಚನೆ: libc ಪರಿಹಾರಕವà³(ರಿಸಾಲà³à²µà²°à³) ೩ ನಾಮಪರಿಚಾರಕಗಳಿಗಿಂತ ಹೆಚà³à²šà²¿à²¨à²µà³à²—ಳನà³à²¨à³ "
+"ಸೂಚನೆ: libc ಪರಿಹಾರಕವà³(ರಿಸಾಲà³à²µà²°à³) 3 ನೇಮà³â€Œà²¸à²°à³à²µà²°à³à²—ಳಿಗಿಂತ ಹೆಚà³à²šà²¿à²¨à²µà³à²—ಳನà³à²¨à³ "
"ಬೆಂಬಲಿಸà³à²µà³à²¦à²¿à²²à³à²²."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
-msgstr "ಈ ಕೆಳಗೆ ಸೂಚಿಸಲಾದ ನಾಮಪರಿಚಾರಕಗಳನà³à²¨à³ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ಿಲà³à²²."
+msgstr "ಈ ಕೆಳಗೆ ಸೂಚಿಸಲಾದ ನೇಮà³â€Œà²¸à²°à³à²µà²°à³à²—ಳನà³à²¨à³ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ಿಲà³à²²."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಮಟà³à²Ÿ '%s'"
-#: ../src/logging/nm-logging.c:181
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಡೊಮೈನೠ'%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:280
-#: ../src/modem-manager/nm-modem-broadband.c:546 ../src/nm-device-bt.c:352
-#, c-format
-#| msgid "connection failed"
-msgid "CDMA connection %d"
-msgstr "CDMA ಸಂಪರà³à²• %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Config ಕಡತವೠಇರà³à²µ ಸà³à²¥à²³"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "ಸಂರಚನಾ ಕಡತಕೋಶವೠಇರà³à²µ ಸà³à²¥à²³"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dira"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' ಇಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಪà³à²²à²—à³â€Œà²‡à²¨à³â€Œà²—ಳ ಪಟà³à²Ÿà²¿"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ಅಂತರಜಾಲ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸಲೠಒಂದೠhttp(s) ವಿಳಾಸ"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "ಸಂಪರà³à²•à²¦ ಪರಿಶೀಲನೆಯ ನಡà³à²µà²¿à²¨ ಕಾಲಾವಧಿ (ಸೆಕೆಂಡà³à²—ಳಲà³à²²à²¿)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "ಪà³à²°à²¤à²¿à²•à³à²°à²¿à²¯à³†à²¯ ನಿರೀಕà³à²·à²¿à²¤ ಆರಂಭ"
-#: ../src/modem-manager/nm-modem-gsm.c:558
-#: ../src/modem-manager/nm-modem-broadband.c:524 ../src/nm-device-bt.c:348
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "ಬಿಂಗೂ!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
-#| msgid "connection failed"
msgid "GSM connection %d"
msgstr "GSM ಸಂಪರà³à²• %d"
-#: ../src/nm-device-bond.c:200
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA ಸಂಪರà³à²• %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
-#| msgid "connection failed"
msgid "Bond connection %d"
msgstr "ಬಾಂಡೠಸಂಪರà³à²• %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
-#| msgid "connection failed"
msgid "ADSL connection %d"
msgstr "ADSL ಸಂಪರà³à²• %d"
-#: ../src/nm-device-bridge.c:206
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
#, c-format
-#| msgid "Active connections"
msgid "Bridge connection %d"
msgstr "ಬà³à²°à²¿à²¡à³à²œà³â€ ಸಂಪರà³à²• %d"
-#: ../src/nm-device-bt.c:323
+#: ../src/devices/nm-device-bt.c:308
#, c-format
-#| msgid "VPN connection failed"
msgid "PAN connection %d"
msgstr "PAN ಸಂಪರà³à²• %d"
-#: ../src/nm-device-bt.c:356
+#: ../src/devices/nm-device-bt.c:341
#, c-format
-#| msgid "VPN connection failed"
msgid "DUN connection %d"
msgstr "DUN ಸಂಪರà³à²• %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
-#| msgid "VPN connection failed"
msgid "PPPoE connection %d"
msgstr "PPPoE ಸಂಪರà³à²• %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
-#| msgid "Active connections"
msgid "Wired connection %d"
msgstr "ತಂತಿಯà³à²•à³à²¤ ಸಂಪರà³à²• %d"
-#: ../src/nm-device-infiniband.c:301
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand ಸಂಪರà³à²• %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "ಜಾಲರಿ %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "ತಂಡದ ಸಂಪರà³à²• %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
-#| msgid "VPN connection failed"
msgid "VLAN connection %d"
msgstr "VLAN ಸಂಪರà³à²• %d"
-#: ../src/nm-manager.c:666
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
-#| msgid "VPN connection failed"
msgid "VPN connection %d"
msgstr "VPN ಸಂಪರà³à²• %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "ಸಾಕೆಟà³â€Œà²¨à²²à³à²²à²¿ ದತà³à²¤à²¾à²‚ಶಕà³à²•à²¾à²—ಿ ಕಾಯà³à²µà²¾à²— ದೋಷವೠಎದà³à²°à²¾à²—ಿದೆ"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "ನೆಟà³â€Œà²²à²¿à²‚ಕೠಸಂದೇಶವನà³à²¨à³ ಸಂಸà³à²•à²°à²¿à²¸à³à²µà²²à³à²²à²¿ ದೋಷ ಉಂಟಾಗಿದೆ: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "ಸಾಕೆಟà³â€Œà²¨à²²à³à²²à²¿ ದತà³à²¤à²¾à²‚ಶಕà³à²•à²¾à²—ಿ ಕಾಯà³à²µà²¾à²— ದೋಷವೠಎದà³à²°à²¾à²—ಿದೆ"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕà³â€Œà²¨à³Šà²‚ದಿಗೆ ಸಂಪರà³à²• ಜೋಡಿಸಲೠ"
-"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: "
-"%s"
+"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr ""
"ನೆಟà³â€Œà²²à²¿à²‚ಕೠಹà³à²¯à²¾à²‚ಡಲೠಕà³à²°à³†à²¡à³†à²¨à³à²¶à²¿à²¯à²²à³ ಪಾಸಿಂಗೠಅನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
"ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕೠಹà³à²¯à²¾à²‚ಡಲೠಅನà³à²¨à³ ನಿಯೋಜಿಸಲೠ"
"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕೠಕೊಂಡಿ ಕà³à²¯à²¾à²¶à³†à²¯à²¨à³à²¨à³ ನಿಯೋಜಿಸಲೠ"
-"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "ನೆಟà³â€Œà²²à²¿à²‚ಕೠಗà³à²‚ಪನà³à²¨à³ ಸೇರಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "ಕೊಂಡಿ ಕà³à²¯à²¾à²¶à³†à²¯à²¨à³à²¨à³ ಅಪà³â€Œà²¡à³‡à²Ÿà³ ಮಾಡà³à²µà²¾à²— ದೋಷ ಉಂಟಾಗಿದೆ: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "ಜಾಲಬಂಧಗಳನà³à²¨à³ ಸà³à²¥à²—ಿತಗೊಳಿಸಬೇಕೠಎಂದೠNetworkManager ಬಯಸà³à²¤à³à²¤à²¦à³†"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "ವà³à²¯à²µà²¸à³à²¥à³†"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3702
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "ಬಾಂಡà³"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3887
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "ತಂಡ"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
msgid "Bridge"
msgstr "ಬà³à²°à²¿à²¡à³à²œà³â€"
-#: ../test/nm-online.c:111
+#: ../test/nm-online.c:73
#, c-format
-#| msgid "connecting"
msgid "\rConnecting"
msgstr "\rಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "ಒಂದೠಸಂಪರà³à²•à²•à³à²•à³† ಕಾಯಬೇಕಿರà³à²µ ಸಮಯ (ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²µà³ 30 ಆಗಿರà³à²¤à³à²¤à²¦à³†)"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"ಒಂದೠಸಂಪರà³à²•à²•à³à²•à³† ಕಾಯಬೇಕಿರà³à²µ ಸಮಯ (ಈ ಆಯà³à²•à³† ಇಲà³à²²à²¦à³†, ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²µà³ ಮೌಲà³à²¯à²µà³ 30 "
+"ಆಗಿರà³à²¤à³à²¤à²¦à³†)"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
msgstr "NetworkManager ಸಂಪರà³à²•à²¿à²¤à²—ೊಳà³à²³à²¦à³† ಇದà³à²¦à²²à³à²²à²¿ ತಕà³à²·à²£à²µà³† ನಿರà³à²—ಮಿಸà³"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "à²à²¨à²¨à³à²¨à³‚ ಮà³à²¦à³à²°à²¿à²¸à²¬à³‡à²¡"
-#: ../test/nm-online.c:162
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "NetworkManager ನಲà³à²²à²¿à²¨ ಒಂದೠಯಶಸà³à²µà²¿ ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²²à³ ಕಾಯಲಾಗà³à²¤à³à²¤à²¿à²¦à³†."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"ಆರಂಭಿಕ ಜಾಲಬಂಧ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²µà²‚ತೆ NetworkManager ಗೆ ಕಾಯಲಾಗà³à²¤à³à²¤à²¦à³†."
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
-#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ."
-#~ msgid "SCOPE"
-#~ msgstr "SCOPE"
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "ಸರಿ"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "ತಾತà³à²•à²¾à²²à²¿à²• ಕಡತವನà³à²¨à³ ರಚಿಸಲಾಗಿಲà³à²²: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "ಸಂಪಾದಕವೠವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ಕಡತವನà³à²¨à³ ಪà³à²¨à²ƒ-ಓದಲಾಗಿಲà³à²²: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ಎತರà³à²¨à³†à²Ÿà³ ಸಂಪರà³à²• %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "ವೈ-ಫೈ ಸಂಪರà³à²• %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡà³"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಂಪರà³à²• %d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL ಸಂಪರà³à²• %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "ತಂತಿಯà³à²•à³à²¤"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "ಬà³à²²à³‚ಟೂತà³"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "OLPC ಮೆಶà³"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "PCI"
+
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "USB"
+
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "ಆರಿಸà³..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "ಸೇರಿಸà³"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "ಸಂಪಾದಿಸà³..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "ಅಳಿಸà³"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "'%s' ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ ('%s' ಬಗೆ) ಸಂಪಾದಕವನà³à²¨à³ ರಚಿಸಲಾಗಿಲà³à²²."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ '%s' ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ ಸಂಪಾದಕವನà³à²¨à³ ರಚಿಸಲಾಗಿಲà³à²²."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸಿ"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸà³à²µà²²à³à²²à²¿ ದೋಷ: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "ಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "ರದà³à²¦à³à²—ೊಳಿಸà³"
-#~ msgid "system"
-#~ msgstr "ವà³à²¯à²µà²¸à³à²¥à³†"
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤)"
-#~ msgid "user"
-#~ msgstr "ಬಳಕೆದಾರ"
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "ಬೈಟà³â€Œà²—ಳà³"
-#~ msgid "System connections"
-#~ msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಂಪರà³à²•à²—ಳà³"
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "ರೌಂಡà³-ರಾಬಿನà³"
-#~ msgid "User connections"
-#~ msgstr "ಬಳಕೆದಾರ ಸಂಪರà³à²•à²—ಳà³"
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "ಸಕà³à²°à²¿à²¯ ಬà³à²¯à²¾à²•à³à²…ಪà³"
-#~ msgid "state: %s\n"
-#~ msgstr "ಸà³à²¥à²¿à²¤à²¿: %s\n"
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
-#~ msgid "Connection activated\n"
-#~ msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ\n"
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "ಪà³à²°à²¸à²¾à²°à²£à³†"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "ಸà³à²¥à²¿à²¤à²¿: %s (%d)\n"
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "ದೋಷ: '%s' ಗಾಗಿ ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪಡೆಯà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "ಅಡಾಪà³à²Ÿà³€à²µà³ ಟà³à²°à²¾à²¨à³à²¸à³â€Œà²®à²¿à²Ÿà³ ಲೋಡೠಬà³à²¯à²¾à²²à³†à²¨à³à²¸à²¿à²‚ಗೠ(tlb)"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²¦ ಸà³à²¥à²¿à²¤à²¿: %s\n"
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "ಅಡಾಪà³à²Ÿà³€à²µà³ ಲೋಡೠಬà³à²¯à²¾à²²à³†à²¨à³à²¸à²¿à²‚ಗೠ(alb)"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²• ಮಾರà³à²—: %s\n"
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (ಸಲಹೆ ಮಾಡಲಾಗà³à²µ)"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-SETTINGS"
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "ಸà³à²²à³‡à²µà³â€Œà²—ಳà³"
-#~ msgid "unknown)"
-#~ msgstr "ಗೊತà³à²¤à²¿à²°à²¦)"
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "ಕà³à²°à²®"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "ಸಾಧನದ ಸà³à²¥à²¿à²¤à²¿: %d (%s)\n"
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "ಪà³à²°à²¾à²¥à²®à²¿à²•"
-#~ msgid "not set"
-#~ msgstr "ಹೊಂದಿಸಲಾಗಿಲà³à²²"
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "ಕೊಂಡಿಯ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³†"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "ಬಳಕೆದಾರ-ನಿಶà³à²šà²¿à²¤ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಬಳಸà³à²µà³à²¦à²¨à³à²¨à³ ಅನà³à²®à²¤à²¿à²¸à³"
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
-#~| msgid "System policy prevents modification of system settings"
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr "ಬಳಕೆದಾರ-ನಿಶà³à²šà²¿à²¤ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಬಳಸà³à²µà³à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮವೠತಡೆಯà³à²¤à³à²¤à²¿à²¦à³†"
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "ಫà³à²°à³€à²•à³à²µà³†à²¨à³à²¸à²¿ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³†"
-#~ msgid "Auto %s"
-#~ msgstr "ಸà³à²µà²¯à²‚ %s"
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "ಕೊಂಡಿ ಸಕà³à²°à²¿à²¯à²¦ ವಿಳಂಬ"
-#~ msgid "Type"
-#~ msgstr "ಬಗೆ"
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "ಕೊಂಡಿ ನಿಷà³à²•à³à²°à²¿à²¯à²¦ ವಿಳಂಬ"
-#~ msgid "Name"
-#~ msgstr "ಹೆಸರà³"
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP ಗà³à²°à²¿à²—ಳà³"
-#~ msgid "User connections:\n"
-#~ msgstr "ಬಳಕೆದಾರ ಸಂಪರà³à²•à²—ಳà³:\n"
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "BRIDGE PORT"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "ಆದà³à²¯à²¤à³†"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "ಮಾರà³à²—ದ ದರ"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "ಹೇರà³à²ªà²¿à²¨à³ ಕà³à²°à²®"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRIDGE"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "ಸೆಕೆಂಡà³à²—ಳà³"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "ಹಳೆಯದಾಗà³à²¤à³à²¤à²¿à²°à³à²µ ಸಮಯ"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP ಅನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸೠ(ಸà³à²ªà²¾à²¨à²¿à²‚ಗೠಟà³à²°à³€ ಪà³à²°à³Šà²Ÿà³Šà²•à²¾à²²à³)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "ಫಾರà³à²µà²¾à²°à³à²¡à³ ವಿಳಂಬ"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "ಹೆಲೊ ಟೈಮà³"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "ಗರಿಷà³à²Ÿ ಕಾಲಾವಧಿ"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "ತದà³à²°à³‚ಪà³à²—ೊಳಿಸಲಾದ MAC ವಿಳಾಸ"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "ಡೇಟಾಗà³à²°à²¾à²®à³"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ"
-#~ msgid "System-wide connections"
-#~ msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯à²¾à²¦à³à²¯à²‚ತದ ಸಂಪರà³à²•à²—ಳà³"
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "ವರà³à²—ಾವಣೆ ಕà³à²°à²®"
-#~ msgid "Default"
-#~ msgstr "ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤"
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ"
-#~ msgid "Service"
-#~ msgstr "ಸೇವೆ"
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ"
-#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-#~ msgstr "%s, %s, ಫà³à²°à³€à²•à³à²µà³† %d MHz, ದರ %d Mb/s, ದೃಢತೆ %d"
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "ಸà³à²¥à²³à³€à²¯-ಕೊಂಡಿ"
-#~ msgid "Device"
-#~ msgstr "ಸಾಧನ"
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "ಕೈಯಾರೆ"
-#~ msgid "Driver"
-#~ msgstr "ಚಾಲಕ"
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "ಹಂಚಲಾದ"
-#~ msgid "State"
-#~ msgstr "ಸà³à²¥à²¿à²¤à²¿"
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 CONFIGURATION"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(ಯಾವà³à²¦à³† ಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œà²—ಳಿಲà³à²²)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "ಒಂದೠಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œ"
+msgstr[1] "%d ಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œà²—ಳà³"
-#~ msgid "HW Address"
-#~ msgstr "HW ವಿಳಾಸ"
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "ವಿಳಾಸಗಳà³"
-#~ msgid ""
-#~ "\n"
-#~ " Capabilities:\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ಸಾಮಾರà³à²¥à³à²¯à²—ಳà³:\n"
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "ಗೇಟà³â€Œà²µà³‡"
-#~ msgid "Carrier Detect"
-#~ msgstr "ಕà³à²¯à²¾à²°à²¿à²¯à²°à³ ಪತà³à²¤à³†"
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "DNS ಪೂರೈಕೆಗಣಕಗಳà³"
-#~ msgid "Speed"
-#~ msgstr "ವೇಗ"
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "ಹà³à²¡à³à²•à³ ಡೊಮೈನà³â€Œà²—ಳà³"
-#~ msgid ""
-#~ "\n"
-#~ " Wireless Properties\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ವೈರà³à²²à³†à²¸à³â€Œ ಗà³à²£à²§à²°à³à²®à²—ಳà³\n"
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "ರೌಟೠಮಾಡà³à²µà²¿à²•à³†"
-#~ msgid "WEP Encryption"
-#~ msgstr "WEP ಗೂಢಲಿಪೀಕರಣ"
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ರೌಟà³â€Œà²—ಾಗಿ ಎಂದಿಗೂ ಈ ಜಾಲಬಂಧವನà³à²¨à³ ಬಳಸಬೇಡ"
-#~ msgid "WPA Encryption"
-#~ msgstr "WPA ಗೂಢಲಿಪೀಕರಣ"
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "ಈ ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ IPv4 ವಿಳಾಸ ನೀಡಿಕೆಯ ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#~ msgid "WPA2 Encryption"
-#~ msgstr "WPA2 ಗೂಢಲಿಪೀಕರಣ"
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "ಕಡೆಗಣಿಸà³"
-#~ msgid "TKIP cipher"
-#~ msgstr "TKIP ಸಿಫರà³"
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ (DHCP ಮಾತà³à²°)"
-#~ msgid "CCMP cipher"
-#~ msgstr "CCMP ಸಿಫರà³"
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 ಸಂರಚನೆ"
-#~ msgid ""
-#~ "\n"
-#~ " Wireless Access Points %s\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ವೈರà³à²²à³†à²¸à³ ನಿಲà³à²•à²£à²¾ ಬಿಂದà³à²—ಳೠ%s\n"
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "ಈ ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ IPv6 ವಿಳಾಸ ನೀಡಿಕೆಯ ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#~ msgid "(* = current AP)"
-#~ msgstr "(* = ಪà³à²°à²¸à²•à³à²¤ AP)"
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "ಅಡಗಿಸà³"
-#~ msgid ""
-#~ "\n"
-#~ " Wired Properties\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ವೈರà³à²¡à³ ಗà³à²£à²§à²°à³à²®à²—ಳà³\n"
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "ತೋರಿಸà³"
-#~ msgid "Carrier"
-#~ msgstr "ವಾಹಕ(ಕà³à²¯à²¾à²°à²¿à²¯à²°à³)"
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "ಪà³à²°à³Šà²«à³ˆà²²à²¿à²¨ ಹೆಸರà³"
-#~ msgid ""
-#~ "\n"
-#~ " IPv4 Settings:\n"
-#~ msgstr ""
-#~ "\n"
-#~ " IPV4 ಸಿದà³à²§à²¤à³†à²—ಳà³:\n"
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "ಸಾಧನ"
-#~ msgid "Address"
-#~ msgstr "ವಿಳಾಸ"
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತವಾಗಿ ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à³"
-#~ msgid "Prefix"
-#~ msgstr "ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³"
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "ಎಲà³à²²à²¾ ಬಳಕೆದಾರರಿಗೆ ಲಭà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
-#~ msgid "Gateway"
-#~ msgstr "ಗೇಟà³â€Œà²µà³‡"
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "ಟೀಮೠಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨"
-#~ msgid "Device:"
-#~ msgstr "ಸಾಧನ:"
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON ಸಂರಚನೆ"
-#~ msgid "Error: hwaddr has to be specified."
-#~ msgstr "ದೋಷ: hwaddr ಅನà³à²¨à³ ಸೂಚಿಸಬೇಕà³."
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "ಟೀಮà³"
-#~ msgid "AP parameters"
-#~ msgstr "AP ನಿಯತಾಂಕಗಳà³"
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "ಪೋಷಕ"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "ವೈ-ಫೈ"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "ಕà³à²²à³ˆà²‚ಟà³â€Œ"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "ನಿಲà³à²•à³ ಬಿಂದà³"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "ತಾತà³à²ªà³‚ರà³à²¤à²¿à²• ಜಾಲಬಂಧ"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ"
+
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "à²à²¨à³‚ ಇಲà³à²²"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 ವೈಯಕà³à²¤à²¿à²•"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 ಎಂಟರà³à²ªà³à²°à³ˆà²¸à³"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-ಬಿಟೠಕೀಲಿ (ಹೆಕà³à²¸à³ ಅಥವ ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit ಗà³à²ªà³à²¤à²µà²¾à²•à³à²¯"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "ಡೈನಮಿಕೠWEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "ಮà³à²•à³à²¤ ವà³à²¯à²µà²¸à³à²¥à³†"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "ಹಂಚಲಾದ ಕೀಲಿ"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "ಚಾನಲà³â€Œ"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "ಸà³à²°à²•à³à²·à²¤à³†"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "ಗà³à²ªà³à²¤à²ªà²¦"
+
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-ಎಂಟರà³à²ªà³à²°à³ˆà²¸à³â€Œà²—ಾಗಿ ಇನà³à²¨à³‚ ಸಹ ಬೆಂಬಲವಿಲà³à²²...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "ಕೀಲಿ"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP ಸೂಚಿ"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "ದೃಢೀಕರಣ"
-#~ msgid "Frequency:"
-#~ msgstr "ಫà³à²°à³€à²•à³à²µà³†à²¨à³à²¸à²¿:"
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(ಡೈನಮಿಕà³-wep ಗಾಗಿ ಇನà³à²¨à³‚ ಸಹ ಬೆಂಬಲವಿಲà³à²²...)"
-#~ msgid "Mode:"
-#~ msgstr "ಕà³à²°à²®:"
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "ಬಳಕೆದಾರಹೆಸರà³"
-#~ msgid "Ad-hoc"
-#~ msgstr "ತಾತà³à²•à²¾à²²à²¿à²•"
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "ಪà³à²°à²¤à²¿ ಬಾರಿಯೂ ಈ ಗà³à²ªà³à²¤à²ªà²¦à²•à³à²•à²¾à²—ಿ ಕೇಳà³"
-#~ msgid "Maximal bitrate:"
-#~ msgstr "ಗರಿಷà³à²Ÿ ಬಿಟೠದರ:"
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ತೋರಿಸà³"
-#~ msgid "Strength:"
-#~ msgstr "ದೃಢತೆ:"
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "ಗà³à²°à²¿"
-#~ msgid "Flags:"
-#~ msgstr "ಫà³à²²à²¾à²—à³â€Œà²—ಳà³:"
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "ಮà³à²‚ದಿನ ಜಿಗಿತ"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "ಮೆಟà³à²°à²¿à²•à³"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "ಯಾವà³à²¦à³† ಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œà²—ಳನà³à²¨à³ ವಿವರಿಸಲಾಗಿಲà³à²²"
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "ಗà³à²°à³à²¤à³"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "ಖಾಸಗಿ ಕೀಲಿ ಗà³à²ªà³à²¤à²ªà²¦"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "ಸೇವೆ"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "ವೈರà³à²²à³†à²¸à³ ಜಾಲಬಂಧಕà³à²•à²¾à²—ಿ ದೃಢೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"ವೈರà³à²²à³†à²¸à³ ಜಾಲಬಂಧ '%s' ಅನà³à²¨à³ ನಿಲà³à²•à²¿à²¸à²¿à²•à³Šà²³à³à²³à²²à³ ಗà³à²ªà³à²¤à²ªà²¦ ಅಥವ ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಯ "
+"ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†."
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "ತಂತಿಸಹಿತ 802.1X ದೃಢೀಕರಣ"
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "ಜಾಲಬಂಧದ ಹೆಸರà³"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL ದೃಢೀಕರಣ"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN ಕೋಡà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಕà³à²•à²¾à²—ಿ PIN ಕೋಡà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಜಾಲಬಂಧದ ಗà³à²ªà³à²¤à²ªà²¦"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' ನೊಂದಿಗೆ ಸಂಪರà³à²•à²¹à³Šà²‚ದಲೠಅಗತà³à²¯à²µà²¿à²°à³à²µ ಗà³à²ªà³à²¤à²ªà²¦."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "ನೀವೠಸೇರಿಸಲೠಬಯಸà³à²µ ಸà³à²²à³‡à²µ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಆಯà³à²•à³† ಮಾಡಿ."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "ಸೇರಿಸà³..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "ತೆಗೆದೠಹಾಕà³"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "ಸಂಪರà³à²•à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿಲà³à²²: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "ತà³à²¯à²œà²¿à²¸à³"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "ಅಂತಹ ಯಾವà³à²¦à³† ಸಂಪರà³à²• '%s' ಇಲà³à²²"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "ಸಂಪರà³à²•à²µà³ ಈಗಾಗಲೆ ಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "ರಚಿಸà³"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "ನೀವೠರಚಿಸಲೠಬಯಸà³à²µ ಸಂಪರà³à²•à²¦ ಬಗೆಯನà³à²¨à³ ಆರಿಸಿ."
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"ನೀವೠಒಂದೠVPN ಅನà³à²¨à³ ರಚಿಸà³à²¤à³à²¤à²¿à²¦à³à²¦à²²à³à²²à²¿, ಮತà³à²¤à³ ನೀವೠರಚಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à³à²µ VPN "
+"ಸಂಪರà³à²•à²µà³ ಪಟà³à²Ÿà²¿à²¯à²²à³à²²à²¿ ಕಾಣಿಸದೆ ಇದà³à²¦à²°à³†, ನೀವೠಸರಿಯಾದ VPN ಪà³à²²à²—à³â€Œà²‡à²¨à³ ಅನà³à²¨à³ "
+"ಅನà³à²¸à³à²¥à²¾à²ªà²¿à²¸à²¿à²¦à³† ಇರಬಹà³à²¦à³ ಎಂದರà³à²¥."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "ಹೊಸ ಸಂಪರà³à²•"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "ನೀವೠನಿಜವಾಗಲೂ ಸಂಪರà³à²• '%s ಅನà³à²¨à³ ಅಳಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à³†?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "ಅತಿಥೇಯದ ಹೆಸರà³"
+
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ '%s' ಗೆ ಹೊಂದಿಸà³"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#~ msgid "privacy"
-#~ msgstr "ಗೌಪà³à²¯à²¤à³†"
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "ಸಂಪರà³à²•"
-#~ msgid "WPA flags:"
-#~ msgstr "WPA ಫà³à²²à²¾à²—à³â€Œà²—ಳà³:"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸà³"
-#~ msgid "RSN flags:"
-#~ msgstr "RSN ಫà³à²²à²¾à²—à³â€Œà²—ಳà³:"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
-#~ msgid "NM running:"
-#~ msgstr "NM ಚಾಲನೆಯಲà³à²²à²¿à²¦à³†:"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "ಹೊಸ ಆತಿಥೇಯದ ಹೆಸರà³"
-#~ msgid "NM state:"
-#~ msgstr "NM ಸà³à²¥à²¿à²¤à²¿:"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³"
-#~ msgid "NM wireless hardware:"
-#~ msgstr "NM ವೈರà³à²²à³†à²¸à³â€Œ ಯಂತà³à²°à²¾à²‚ಶ:"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
-#~ msgid "NM wireless:"
-#~ msgstr "NM ಯಂತà³à²°à²¾à²‚ಶ:"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "ದಯವಿಟà³à²Ÿà³ ಒಂದೠಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಆರಿಸಿ"
-#~ msgid "NM WWAN hardware:"
-#~ msgstr "NM WWAN ಯಂತà³à²°à²¾à²‚ಶ:"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "ಬಳಕೆ"
-#~ msgid "unable to join netlink group for monitoring link status: %s"
-#~ msgstr ""
-#~ "ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕೠಗà³à²‚ಪನà³à²¨à³ ಸೇರಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳನà³à²¨à³ ಪಾರà³à²¸à³ ಮಾಡಲಾಗಿಲà³à²²"
-#~ msgid "unable to connect to netlink: %s"
-#~ msgstr "ನೆಟà³â€Œà²²à²¿à²‚ಕà³â€Œà²¨à³Šà²‚ದಿಗೆ ಸಂಪರà³à²• ಜೋಡಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManager ಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²."
diff --git a/po/ko.po b/po/ko.po
index ba6bb0b6c..a5e95b464 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -780,8 +780,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:471
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:480
msgid "Encrypted: "
diff --git a/po/lt.po b/po/lt.po
index 0b1abc8fd..3e0ed1fd7 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -2,377 +2,437 @@
# Copyright (C) 2005-2010 Free Software Foundation, Inc.
# This file is distributed under the same license as the NetworkManager package.
# Žygimantas BeruÄka <zygis@gnome.org>, 2005-2006, 2008, 2010.
-# Aurimas ÄŒernius <aurisc4@gmail.com>, 2010.
# Rimas Kudelis <rq@akl.lt>, 2010.
# Algimantas MargeviÄius <margevicius.algimantas@gmail.com>, 2012.
+# Aurimas ÄŒernius <aurisc4@gmail.com>, 2010, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager HEAD\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-07-18 15:25+0000\n"
-"PO-Revision-Date: 2012-08-25 22:45+0300\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2013-09-07 02:24+0000\n"
+"PO-Revision-Date: 2013-08-19 23:49+0300\n"
"Last-Translator: Aurimas ÄŒernius <aurisc4@gmail.com>\n"
-"Language-Team: Lietuvių <>\n"
+"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-"X-Generator: Virtaal 0.5.2\n"
-
-#: ../cli/src/common.c:32
-#: ../cli/src/common.c:44
-#: ../cli/src/common.c:52
-#: ../cli/src/common.c:63
-#: ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
+"%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Gtranslator 2.91.6\n"
+
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:145
+#: ../cli/src/connections.c:179
msgid "GROUP"
msgstr "GRUPÄ–"
#. 0
-#: ../cli/src/common.c:33
-#: ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADRESAS"
#. 1
-#: ../cli/src/common.c:34
-#: ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "KELIAS"
#. 2
-#: ../cli/src/common.c:35
-#: ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36
-#: ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMENAS"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "SÄ–KMÄ–S"
#. 0
-#: ../cli/src/common.c:45
-#: ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "PARINKTIS"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:388 ../cli/src/settings.c:2618
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "netinkamas IPv4 adresas „%s“"
+
+#: ../cli/src/common.c:396
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "netinkamas priešdėlis „%s“; leidžiama <1-32>"
+
+#: ../cli/src/common.c:403 ../cli/src/common.c:456
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "netinkamas šliuzas „%s“"
+
+#: ../cli/src/common.c:441 ../cli/src/settings.c:2798
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "netinkamas IPv6 adresas „%s“"
+
+#: ../cli/src/common.c:449 ../cli/src/common.c:567
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "netinkamas priešdėlis „%s“; leidžiama <0-128>"
+
+#: ../cli/src/common.c:496
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "netinkamas IPv4 kelias „%s“"
+
+#: ../cli/src/common.c:504
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "netinkamas priešdėlis „%s“; leidžiama <0-32>"
+
+#: ../cli/src/common.c:511 ../cli/src/common.c:574
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "netinkamas kito mazgo adresas „%s“"
+
+#: ../cli/src/common.c:518 ../cli/src/common.c:582
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "netinkamas matavimas „%s“"
+
+#: ../cli/src/common.c:559
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "netinkamas IPv6 kelias „%s“"
+
+#: ../cli/src/common.c:603
msgid "unmanaged"
msgstr "nevaldomas"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:605
msgid "unavailable"
msgstr "neprieinamas"
-#: ../cli/src/common.c:370
-#: ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:607 ../cli/src/network-manager.c:153
msgid "disconnected"
msgstr "atjungtas"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:609
msgid "connecting (prepare)"
msgstr "jungiamasi (ruošiama)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:611
msgid "connecting (configuring)"
msgstr "jungiamasi (konfigūruojama)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:613
msgid "connecting (need authentication)"
msgstr "jungiamasi (reikia nustatyti tapatybÄ™)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:615
msgid "connecting (getting IP configuration)"
msgstr "jungiamasi (gaunama IP konfigūracija)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:617
msgid "connecting (checking IP connectivity)"
msgstr "jungiamasi (tikrinamas IP jungiamumas)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:619
msgid "connecting (starting secondary connections)"
msgstr "jungiamasi (paleidžiami antriniai prisijungimai)"
-#: ../cli/src/common.c:384
-#: ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:621 ../cli/src/network-manager.c:149
msgid "connected"
msgstr "prisijungta"
-#: ../cli/src/common.c:386
-#: ../cli/src/connections.c:633
+#: ../cli/src/common.c:623 ../cli/src/connections.c:570
msgid "deactivating"
msgstr "deaktyvuojama"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:625
msgid "connection failed"
msgstr "prisijungti nepavyko"
-#: ../cli/src/common.c:390
-#: ../cli/src/connections.c:636
-#: ../cli/src/connections.c:659
-#: ../cli/src/connections.c:1349
-#: ../cli/src/devices.c:622
-#: ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185
-#: ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197
-#: ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273
-#: ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486
-#: ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563
-#: ../cli/src/settings.c:585
-#: ../cli/src/settings.c:613
-#: ../cli/src/utils.c:531
-#: ../src/main.c:462
-#: ../src/main.c:481
+#: ../cli/src/common.c:627 ../cli/src/connections.c:575
+#: ../cli/src/connections.c:598 ../cli/src/connections.c:1287
+#: ../cli/src/devices.c:702 ../cli/src/devices.c:1977
+#: ../cli/src/network-manager.c:156 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:239 ../cli/src/network-manager.c:242
+#: ../cli/src/network-manager.c:252 ../cli/src/network-manager.c:310
+#: ../cli/src/network-manager.c:326 ../cli/src/settings.c:695
+#: ../cli/src/settings.c:723 ../cli/src/settings.c:785 ../cli/src/utils.c:990
+#: ../src/main.c:461 ../src/main.c:483
msgid "unknown"
msgstr "nežinoma"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:636
msgid "No reason given"
msgstr "Nenurodyta priežastis"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:639 ../cli/src/connections.c:2037
+#, c-format
msgid "Unknown error"
msgstr "Nežinoma klaida"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:642
msgid "Device is now managed"
msgstr "Įrenginys dabar yra valdomas"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:645
msgid "Device is now unmanaged"
msgstr "Įrenginys dabar yra nevaldomas"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:648
msgid "The device could not be readied for configuration"
msgstr "Nepavyko paruošti įrenginio konfigūravimui"
-#: ../cli/src/common.c:414
-msgid "IP configuration could not be reserved (no available address, timeout, etc)"
-msgstr "Nepavyko rezervuoti IP konfigūracijos (nėra galimo adreso, baigėsi laikas ir kt.)"
+#: ../cli/src/common.c:651
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+"Nepavyko rezervuoti IP konfigūracijos (nėra galimo adreso, baigėsi laikas ir "
+"kt.)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:654
msgid "The IP configuration is no longer valid"
msgstr "IP konfigūracija nebeteisinga"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:657
msgid "Secrets were required, but not provided"
msgstr "Reikalingos bet nepateiktos paslaptys"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:660
msgid "802.1X supplicant disconnected"
msgstr "802.1X prašytojas atjungtas"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:663
msgid "802.1X supplicant configuration failed"
msgstr "802.1X prašytojo konfigūracija nepavyko"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:666
msgid "802.1X supplicant failed"
msgstr "802.1X prašytojas dingo"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:669
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X prašytojui per ilgai užtruko patvirtinti tapatybę"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:672
msgid "PPP service failed to start"
msgstr "nepavyko paleisti PPP tarnybos"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:675
msgid "PPP service disconnected"
msgstr "PPP tarnyba atjungta"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:678
msgid "PPP failed"
msgstr "PPP nepavyko"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:681
msgid "DHCP client failed to start"
msgstr "nepavyko paleisti DHCP kliento"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:684
msgid "DHCP client error"
msgstr "DHCO kliento klaida"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:687
msgid "DHCP client failed"
msgstr "DHCP klientas dingo"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:690
msgid "Shared connection service failed to start"
msgstr "Bendro ryšio tarnybos nepavyko paleisti"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:693
msgid "Shared connection service failed"
msgstr "Nepavyko bendro ryšio tarnybos paleidimas"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:696
msgid "AutoIP service failed to start"
msgstr "AutoIP tarnybos nepavyko paleisti"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:699
msgid "AutoIP service error"
msgstr "AutoIP tarnybos klaida"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:702
msgid "AutoIP service failed"
msgstr "Nepavyko AutoIP tarnybos paleidimas"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:705
msgid "The line is busy"
msgstr "Linija užimta"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:708
msgid "No dial tone"
msgstr "NÄ—ra skambinimo tono"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:711
msgid "No carrier could be established"
msgstr "Nepavyko nustatyti pernešėjo"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:714
msgid "The dialing request timed out"
msgstr "Skambinimo užklausos laikas baigėsi"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:717
msgid "The dialing attempt failed"
msgstr "MÄ—ginimas skambinti nepavyko"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:720
msgid "Modem initialization failed"
msgstr "Nepavyko inicializuoti modemo"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:723
msgid "Failed to select the specified APN"
msgstr "Nepavyko pasirinkti nurodyto APN"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:726
msgid "Not searching for networks"
msgstr "Neieškoma tinklų"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:729
msgid "Network registration denied"
msgstr "Tinklo registracija draudžiama"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:732
msgid "Network registration timed out"
msgstr "BaigÄ—si tinklo registracijos laikas"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:735
msgid "Failed to register with the requested network"
msgstr "Nepavyko registruoti su prašomu tinklu"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:738
msgid "PIN check failed"
msgstr "Nepavyko patikrinti PIN"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:741
msgid "Necessary firmware for the device may be missing"
msgstr "Trūksta įrenginiui reikalingos aparatinės programinės įrangos"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:744
msgid "The device was removed"
msgstr "Įrenginys buvo pašalintas"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:747
msgid "NetworkManager went to sleep"
msgstr "NetworkManager užmigo"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:750
msgid "The device's active connection disappeared"
msgstr "Įrenginio aktyvus ryšys dingo"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:753
msgid "Device disconnected by user or client"
msgstr "Įrenginys atjungtas naudotojo arba kliento"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:756
msgid "Carrier/link changed"
msgstr "Pernešėjas/saitas pasikeitė"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:759
msgid "The device's existing connection was assumed"
msgstr "Įrenginio esamas ryšys buvo priimtas"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:762
msgid "The supplicant is now available"
msgstr "Prašytojas dabar yra prieinamas"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:765
msgid "The modem could not be found"
msgstr "Nepavyko rasti modemo"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:768
msgid "The Bluetooth connection failed or timed out"
msgstr "Bluetooth ryšys nepavyko arba baigėsi laikas"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:771
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM modemo SIM kortelė neįdėta"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:774
msgid "GSM Modem's SIM PIN required"
msgstr "Reikalingas GSM modemo SIM kortelÄ—s PIN"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:777
msgid "GSM Modem's SIM PUK required"
msgstr "Reikalingas GSM modemo SIM kortelÄ—s PUK"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:780
msgid "GSM Modem's SIM wrong"
msgstr "Neteisinga GSM modemo SIM"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:783
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand įrenginys nepalaiko ryšio veiksenos"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:786
msgid "A dependency of the connection failed"
msgstr "Ryšio priklausomybė nepavyko"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:789
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "Problema su RFC 2684 laidiniu per ADSL tiklų tiltą"
-#: ../cli/src/common.c:555
-#: ../cli/src/devices.c:274
-#: ../cli/src/devices.c:290
-#: ../cli/src/devices.c:410
-#: ../cli/src/devices.c:454
+#: ../cli/src/common.c:792
+msgid "ModemManager is unavailable"
+msgstr "NÄ—ra ModemManager"
+
+#: ../cli/src/common.c:795
+msgid "The Wi-Fi network could not be found"
+msgstr "Nepavyko rasti Wi-Fi tinklo"
+
+#: ../cli/src/common.c:798
+msgid "A secondary connection of the base connection failed"
+msgstr "Bazinio ryšio antraeilis ryšys nepavyko"
+
+#: ../cli/src/common.c:801 ../cli/src/devices.c:519
msgid "Unknown"
msgstr "Nežinoma"
+#: ../cli/src/common.c:843
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "netinkamas prioritetų susiejimas „%s“"
+
+#: ../cli/src/common.c:850 ../cli/src/common.c:856
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "prioritetas „%s“ yra netinkamas (<0-%ld>)"
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "Nustatomas pavadinimas?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "SavybÄ—s pavadinimas?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "Įveskite ryšio tipą: "
+
#. 0
#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59
-#: ../cli/src/connections.c:129
-#: ../cli/src/devices.c:105
-#: ../cli/src/devices.c:129
-#: ../cli/src/devices.c:139
-#: ../cli/src/devices.c:149
-#: ../cli/src/devices.c:163
-#: ../cli/src/devices.c:177
-#: ../cli/src/devices.c:199
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:146
+#: ../cli/src/devices.c:109 ../cli/src/devices.c:134 ../cli/src/devices.c:144
+#: ../cli/src/devices.c:154 ../cli/src/devices.c:164 ../cli/src/devices.c:180
+#: ../cli/src/devices.c:194 ../cli/src/devices.c:221 ../cli/src/devices.c:237
+#: ../cli/src/devices.c:246
msgid "NAME"
msgstr "PAVADINIMAS"
#. 0
#. 1
-#: ../cli/src/connections.c:60
-#: ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:147
msgid "UUID"
msgstr "UUID"
@@ -380,51 +440,44 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:61
-#: ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71
-#: ../cli/src/devices.c:107
-#: ../cli/src/devices.c:202
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:180
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:111 ../cli/src/devices.c:224
msgid "TYPE"
msgstr "TIPAS"
#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "LAIKO-ŽYMA"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "LAIKO-ŽYMA-TIKROJI"
#. 4
#. 13
-#: ../cli/src/connections.c:64
-#: ../cli/src/devices.c:119
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:123
msgid "AUTOCONNECT"
msgstr "AUTOPRISIJUNGIMAS"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "TIKSKAITOMA"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:66
-#: ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73
-#: ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:154
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:210 ../cli/src/devices.c:227
msgid "DBUS-PATH"
msgstr "DBUS-KELIAS"
#. 2
-#: ../cli/src/connections.c:131
+#: ../cli/src/connections.c:148
msgid "DEVICES"
msgstr "ĮRENGINIAI"
@@ -432,1119 +485,2620 @@ msgstr "ĮRENGINIAI"
#. 1
#. 8
#. 1
-#: ../cli/src/connections.c:132
-#: ../cli/src/devices.c:72
-#: ../cli/src/devices.c:114
-#: ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:149 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:118 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "BŪSENA"
#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:150
msgid "DEFAULT"
msgstr "NUMATYTASIS"
#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:151
msgid "DEFAULT6"
msgstr "NUMATYTASIS6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:152
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECTAS"
#. 7
#. 1
-#: ../cli/src/connections.c:136
-#: ../cli/src/connections.c:150
+#: ../cli/src/connections.c:153 ../cli/src/connections.c:167
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:155
msgid "CON-PATH"
msgstr "RYÅ IO-KELIAS"
#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:156
msgid "ZONE"
msgstr "ZONA"
#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:157
msgid "MASTER-PATH"
msgstr "PAGRINDINIS-KELIAS"
-#: ../cli/src/connections.c:148
-#: ../cli/src/devices.c:82
+#: ../cli/src/connections.c:165 ../cli/src/devices.c:83
msgid "GENERAL"
msgstr "BENDRA"
#. 0
-#: ../cli/src/connections.c:149
+#: ../cli/src/connections.c:166
msgid "IP"
msgstr "IP"
#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:181
msgid "USERNAME"
msgstr "NAUDOTOJO VARDAS"
#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:182
msgid "GATEWAY"
msgstr "Å LIUZAS"
#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:183
msgid "BANNER"
msgstr "PRANEÅ IMAS"
#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:184
msgid "VPN-STATE"
msgstr "VPN BŪSENA"
#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:185
msgid "CFG"
msgstr "KONF"
-#: ../cli/src/connections.c:190
+#: ../cli/src/connections.c:211
#, c-format
msgid ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
+"Usage: nmcli connection { COMMAND | help }\n"
+" COMMAND := { show | up | down | delete }\n"
+"\n"
+" show configured [[ id | uuid | path ] <ID>]\n"
+"\n"
+" show active [[ id | uuid | path | apath ] <ID>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [ id | uuid | path | apath ] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [ id | uuid | path ] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [ id | uuid | path ] <ID> | [type <new_con_type>] [con-name "
+"<new_con_name>]\n"
+"\n"
+" delete [ id | uuid | path ] <ID>\n"
+"\n"
+" reload\n"
+"\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout <timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
msgstr ""
-"Naudojimas: nmcli con { KOMANDA | help }\n"
-" KOMANDA := { list | status | up | down | delete }\n"
+"Naudojimas: nmcli connection { KOMANDA | help }\n"
+" KOMANDA := { show | up | down | delete }\n"
+"\n"
+" show configured [[ id | uuid | kelias ] <ID>]\n"
+"\n"
+" show active [[ id | uuid | kelias | alt_kelias ] <ID>]\n"
+"\n"
+" up [ id | uuid | kelias ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <pav>]\n"
+"\n"
+" up [ id | uuid | kelias ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [ id | uuid | kelias | alt_kelias ] <ID>\n"
+"\n"
+" add BENDRI_PARAMETRAI TIPO_SPECIFINIAI_PARAMETRAI IP_PARAMETRAI\n"
+"\n"
+" modify [ id | uuid | path ] <ID> <nustatymas>.<savybÄ—> <vertÄ—>\n"
+"\n"
+" edit [ id | uuid | kelias ] <ID> | [type <naujo_ryšio_tipas>] [con-name "
+"<naujo_ryšio_pav>]\n"
+"\n"
+" delete [ id | uuid | kelias ] <ID>\n"
+"\n"
+" reload\n"
+"\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout <timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:249
-#: ../cli/src/connections.c:609
+#: ../cli/src/connections.c:233
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: nmcli connection add { OPTIONS | help }\n"
+#| " OPTIONS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+#| "\n"
+#| " COMMON_OPTIONS:\n"
+#| " type <type>\n"
+#| " ifname <interface name> | \"*\"\n"
+#| " [con-name <connection name>]\n"
+#| " [autoconnect yes|no]\n"
+#| "\n"
+#| " TYPE_SPECIFIC_OPTIONS:\n"
+#| " ethernet: [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " wifi: [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| " [ssid <SSID>]\n"
+#| "\n"
+#| " wimax: [mac <MAC address>]\n"
+#| " [nsp <NSP>]\n"
+#| "\n"
+#| " gsm: apn <APN>]\n"
+#| " [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " cdma: [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " infiniband: [mac <MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| " [transport-mode datagram | connected]\n"
+#| "\n"
+#| " [parent <ifname>]\n"
+#| "\n"
+#| " [p-key <IPoIB P_Key>]\n"
+#| "\n"
+#| " bluetooth: [addr <bluetooth address>]\n"
+#| " [bt-type panu|dun-gsm|dun-cdma]\n"
+#| " vlan: dev <parent device (connection UUID, ifname, or MAC)\n"
+#| " [id <VLAN id>]\n"
+#| " [flags <VLAN flags>]\n"
+#| " [ingress <ingress priority mapping>]\n"
+#| " [egress <egress priority mapping>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " bond: [mode balance-rr (0) | active-backup (1) | balance-xor "
+#| "(2) | broadcast (3) |\n"
+#| " 802.3ad (4) | balance-tlb (5) | balance-alb "
+#| "(6)]\n"
+#| " [miimon <num>]\n"
+#| " [downdelay <num>]\n"
+#| " [updelay <num>]\n"
+#| " [arp-interval <num>]\n"
+#| " [arp-ip-target <num>]\n"
+#| "\n"
+#| " bond-slave: master <master (ifname or connection UUID)\n"
+#| "\n"
+#| " team: [config <json config>]\n"
+#| "\n"
+#| " team-slave: master <master (ifname or connection UUID)\n"
+#| " [config <json config>]\n"
+#| "\n"
+#| " bridge: [stp yes|no>]\n"
+#| " [priority <num>]\n"
+#| " [forward-delay <2-30>]\n"
+#| " [hello-time <1-10>]\n"
+#| " [max-age <6-40>]\n"
+#| " [ageing-time <0-1000000>]\n"
+#| "\n"
+#| " bridge-slave: master <master (ifname or connection UUID)\n"
+#| " [priority <0-63>]\n"
+#| " [path-cost <1-65535>]\n"
+#| " [hairpin yes|no]\n"
+#| "\n"
+#| " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+#| " [user <username>]\n"
+#| "\n"
+#| " olpc-mesh: ssid <SSID>\n"
+#| " [channel <1-13>]\n"
+#| " [dhcp-anycast <MAC address>]\n"
+#| "\n"
+#| " IP_OPTIONS:\n"
+#| " [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+#| " [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+msgid ""
+"Usage: nmcli connection add { OPTIONS | help }\n"
+" OPTIONS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" [id <VLAN id>]\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <json config>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <json config>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+msgstr ""
+"Naudojimas: nmcli connection add { PARAMETRAI | help }\n"
+" PARAMETRAI := BENDRI_PARAMETRAI TIPUI_SPECIFINIAI_PARAMETRAI "
+"IP_PARAMETRAI\n"
+"\n"
+" BENDRI_PARAMETRAI:\n"
+" type <tipas>\n"
+" ifname <sÄ…sajos pav> | \"*\"\n"
+" [con-name <ryšio pav>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TIPUI_SPECIFINIAI_PARAMETRAI:\n"
+" ethernet: [mac <MAC adresas>]\n"
+" [cloned-mac <klonuotas MAC adresas>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: [mac <MAC adresas>]\n"
+" [cloned-mac <klonuotas MAC adresas>]\n"
+" [mtu <MTU>]\n"
+" [ssid <SSID>]\n"
+"\n"
+" wimax: [mac <MAC adresas>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" gsm: apn <APN>]\n"
+" [user <naudotojas>]\n"
+" [password <slaptažodis>]\n"
+"\n"
+" cdma: [user <naudotojas>]\n"
+" [password <slaptažodis>]\n"
+"\n"
+" infiniband: [mac <MAC adresas>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+"\n"
+" [parent <ifname>]\n"
+"\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth adresas>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+" vlan: dev <tėvinis įrenginys (ryšio UUID, ifname, arba MAC)\n"
+" [id <VLAN id>]\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress prioritetų susiejimai>]\n"
+" [egress <egress prioritetų susiejimai>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname arba ryšio UUID)\n"
+"\n"
+" team: [config <json konfigūracija>]\n"
+"\n"
+" team-slave: master <master (ifname arba ryšio UUID)\n"
+" [config <json konfigūracija>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname arba ryšio UUID)\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <naudotojas>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC adresas>]\n"
+"\n"
+" IP_PARAMETRAI:\n"
+" [ip4 <IPv4 adresas>] [gw4 <IPv4 Å¡liuzas>]\n"
+" [ip6 <IPv6 adresas>] [gw6 <IPv6 Å¡liuzas>]\n"
+
+#: ../cli/src/connections.c:346
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Klaida: „con list“: %s"
+msgid "Error: 'list configured': %s"
+msgstr "Klaida: „list configured“: %s"
-#: ../cli/src/connections.c:251
-#: ../cli/src/connections.c:611
+#: ../cli/src/connections.c:348
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Klaida: „con list“: %s; leidžiami laukai: %s"
+msgid "Error: 'list configured': %s; allowed fields: %s"
+msgstr "Klaida: „list configured“: %s; leidžiami laukai: %s"
-#: ../cli/src/connections.c:259
+#. Main header
+#: ../cli/src/connections.c:356
msgid "Connection details"
msgstr "Ryšio informacija"
-#: ../cli/src/connections.c:484
+#: ../cli/src/connections.c:420
msgid "never"
msgstr "niekada"
#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:485
-#: ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714
-#: ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717
-#: ../cli/src/devices.c:418
-#: ../cli/src/devices.c:471
-#: ../cli/src/devices.c:587
-#: ../cli/src/devices.c:588
-#: ../cli/src/devices.c:589
-#: ../cli/src/devices.c:621
-#: ../cli/src/devices.c:647
-#: ../cli/src/devices.c:648
-#: ../cli/src/devices.c:649
-#: ../cli/src/devices.c:650
-#: ../cli/src/devices.c:651
-#: ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:694
-#: ../cli/src/settings.c:764
-#: ../cli/src/settings.c:884
-#: ../cli/src/settings.c:1166
-#: ../cli/src/settings.c:1167
-#: ../cli/src/settings.c:1169
-#: ../cli/src/settings.c:1171
-#: ../cli/src/settings.c:1172
-#: ../cli/src/settings.c:1303
-#: ../cli/src/settings.c:1304
-#: ../cli/src/settings.c:1305
-#: ../cli/src/settings.c:1306
-#: ../cli/src/settings.c:1383
-#: ../cli/src/settings.c:1384
-#: ../cli/src/settings.c:1385
-#: ../cli/src/settings.c:1386
-#: ../cli/src/settings.c:1387
-#: ../cli/src/settings.c:1388
-#: ../cli/src/settings.c:1389
-#: ../cli/src/settings.c:1390
-#: ../cli/src/settings.c:1391
-#: ../cli/src/settings.c:1392
-#: ../cli/src/settings.c:1393
-#: ../cli/src/settings.c:1394
-#: ../cli/src/settings.c:1395
-#: ../cli/src/settings.c:1466
+#: ../cli/src/connections.c:421 ../cli/src/connections.c:422
+#: ../cli/src/connections.c:671 ../cli/src/connections.c:672
+#: ../cli/src/connections.c:674 ../cli/src/connections.c:5210
+#: ../cli/src/devices.c:489 ../cli/src/devices.c:539 ../cli/src/devices.c:673
+#: ../cli/src/devices.c:674 ../cli/src/devices.c:675 ../cli/src/devices.c:706
+#: ../cli/src/devices.c:734 ../cli/src/devices.c:735 ../cli/src/devices.c:736
+#: ../cli/src/devices.c:737 ../cli/src/devices.c:738 ../cli/src/devices.c:739
+#: ../cli/src/devices.c:740 ../cli/src/network-manager.c:320
msgid "yes"
msgstr "taip"
-#: ../cli/src/connections.c:485
-#: ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714
-#: ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717
-#: ../cli/src/devices.c:418
-#: ../cli/src/devices.c:471
-#: ../cli/src/devices.c:587
-#: ../cli/src/devices.c:588
-#: ../cli/src/devices.c:589
-#: ../cli/src/devices.c:621
-#: ../cli/src/devices.c:647
-#: ../cli/src/devices.c:648
-#: ../cli/src/devices.c:649
-#: ../cli/src/devices.c:650
-#: ../cli/src/devices.c:651
-#: ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:694
-#: ../cli/src/settings.c:696
-#: ../cli/src/settings.c:764
-#: ../cli/src/settings.c:884
-#: ../cli/src/settings.c:1166
-#: ../cli/src/settings.c:1167
-#: ../cli/src/settings.c:1169
-#: ../cli/src/settings.c:1171
-#: ../cli/src/settings.c:1172
-#: ../cli/src/settings.c:1303
-#: ../cli/src/settings.c:1304
-#: ../cli/src/settings.c:1305
-#: ../cli/src/settings.c:1306
-#: ../cli/src/settings.c:1383
-#: ../cli/src/settings.c:1384
-#: ../cli/src/settings.c:1385
-#: ../cli/src/settings.c:1386
-#: ../cli/src/settings.c:1387
-#: ../cli/src/settings.c:1388
-#: ../cli/src/settings.c:1389
-#: ../cli/src/settings.c:1390
-#: ../cli/src/settings.c:1391
-#: ../cli/src/settings.c:1392
-#: ../cli/src/settings.c:1393
-#: ../cli/src/settings.c:1394
-#: ../cli/src/settings.c:1395
-#: ../cli/src/settings.c:1466
+#: ../cli/src/connections.c:421 ../cli/src/connections.c:422
+#: ../cli/src/connections.c:671 ../cli/src/connections.c:672
+#: ../cli/src/connections.c:674 ../cli/src/connections.c:5210
+#: ../cli/src/devices.c:489 ../cli/src/devices.c:539 ../cli/src/devices.c:673
+#: ../cli/src/devices.c:674 ../cli/src/devices.c:675 ../cli/src/devices.c:706
+#: ../cli/src/devices.c:734 ../cli/src/devices.c:735 ../cli/src/devices.c:736
+#: ../cli/src/devices.c:737 ../cli/src/devices.c:738 ../cli/src/devices.c:739
+#: ../cli/src/devices.c:740 ../cli/src/network-manager.c:322
msgid "no"
msgstr "ne"
-#: ../cli/src/connections.c:560
-msgid "Connection list"
-msgstr "Ryšių sąrašas"
-
-#: ../cli/src/connections.c:573
-#: ../cli/src/connections.c:1110
-#: ../cli/src/connections.c:1646
-#: ../cli/src/connections.c:1661
-#: ../cli/src/connections.c:1670
-#: ../cli/src/connections.c:1680
-#: ../cli/src/connections.c:1692
-#: ../cli/src/connections.c:1800
-#: ../cli/src/connections.c:1902
-#: ../cli/src/devices.c:1041
-#: ../cli/src/devices.c:1051
-#: ../cli/src/devices.c:1169
-#: ../cli/src/devices.c:1177
-#: ../cli/src/devices.c:1541
-#: ../cli/src/devices.c:1548
-#: ../cli/src/devices.c:1562
-#: ../cli/src/devices.c:1569
-#: ../cli/src/devices.c:1586
-#: ../cli/src/devices.c:1597
-#: ../cli/src/devices.c:1818
-#: ../cli/src/devices.c:1825
+#. Add headers
+#: ../cli/src/connections.c:499
+msgid "List of configured connections"
+msgstr "Sukonfigūruotų ryšių sąrašas"
+
+#: ../cli/src/connections.c:518 ../cli/src/connections.c:1047
+#: ../cli/src/connections.c:1547 ../cli/src/connections.c:1568
+#: ../cli/src/connections.c:1577 ../cli/src/connections.c:1587
+#: ../cli/src/connections.c:1709 ../cli/src/connections.c:6479
+#: ../cli/src/connections.c:6654 ../cli/src/devices.c:1350
+#: ../cli/src/devices.c:1358 ../cli/src/devices.c:1748
+#: ../cli/src/devices.c:1755 ../cli/src/devices.c:1769
+#: ../cli/src/devices.c:1776 ../cli/src/devices.c:1793
+#: ../cli/src/devices.c:1801 ../cli/src/devices.c:1997
+#: ../cli/src/devices.c:2093 ../cli/src/devices.c:2100
#, c-format
msgid "Error: %s argument is missing."
msgstr "Klaida: trūksta argumento %s."
-#: ../cli/src/connections.c:586
+#: ../cli/src/connections.c:532
#, c-format
msgid "Error: %s - no such connection."
msgstr "Klaida: ryšio %s nėra."
-#: ../cli/src/connections.c:592
-#: ../cli/src/connections.c:1705
-#: ../cli/src/connections.c:1817
-#: ../cli/src/connections.c:1909
-#: ../cli/src/devices.c:825
-#: ../cli/src/devices.c:905
-#: ../cli/src/devices.c:1065
-#: ../cli/src/devices.c:1183
-#: ../cli/src/devices.c:1610
-#: ../cli/src/devices.c:1831
+#: ../cli/src/connections.c:545
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Nežinomas parametras: %s\n"
+msgid "Error: 'show configured': %s"
+msgstr "Klaida: „show configured“: %s"
-#: ../cli/src/connections.c:601
+#: ../cli/src/connections.c:547
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Klaida: nenurodyta tinkamų parametrų."
+msgid "Error: 'show configured': %s; allowed fields: %s"
+msgstr "Klaida: „show configured“: %s; leidžiami laukai: %s"
-#: ../cli/src/connections.c:616
-#: ../cli/src/connections.c:2002
-#: ../cli/src/devices.c:2039
-#: ../cli/src/network-manager.c:596
+#: ../cli/src/connections.c:553 ../cli/src/connections.c:6720
+#: ../cli/src/connections.c:6830 ../cli/src/devices.c:1976
+#: ../cli/src/devices.c:2325 ../cli/src/network-manager.c:425
+#: ../cli/src/network-manager.c:455 ../cli/src/network-manager.c:465
+#: ../cli/src/network-manager.c:473 ../cli/src/network-manager.c:483
+#: ../cli/src/network-manager.c:611 ../cli/src/network-manager.c:646
+#: ../cli/src/network-manager.c:659
#, c-format
msgid "Error: %s."
msgstr "Klaida: %s"
-#: ../cli/src/connections.c:629
+#: ../cli/src/connections.c:566
msgid "activating"
msgstr "aktyvuojama"
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:568
msgid "activated"
msgstr "aktyvuota"
-#: ../cli/src/connections.c:645
+#: ../cli/src/connections.c:572
+msgid "deactivated"
+msgstr "išjungtas"
+
+#: ../cli/src/connections.c:584
msgid "VPN connecting (prepare)"
msgstr "VPN jungiamasi (ruošiama)"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:586
msgid "VPN connecting (need authentication)"
msgstr "VPN jungiamasi (reikia nustatyti tapatybÄ™)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:588
msgid "VPN connecting"
msgstr "VPN jungiamasi"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:590
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN jungiamasi (gaunama IP konfigūracija)"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:592
msgid "VPN connected"
msgstr "VPN prisijungta"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:594
msgid "VPN connection failed"
msgstr "VPN prisijungti nepavyko"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:596
msgid "VPN disconnected"
msgstr "VPN atsijungta"
-#: ../cli/src/connections.c:710
-#: ../cli/src/connections.c:720
+#: ../cli/src/connections.c:667 ../cli/src/connections.c:677
+#: ../cli/src/devices.c:479
msgid "N/A"
msgstr "Neprieinama"
-#: ../cli/src/connections.c:914
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:850
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Klaida: „con status“: %s"
+msgid "Error: 'list active': %s"
+msgstr "Klaida: „list active“: %s"
-#: ../cli/src/connections.c:916
-#: ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:852
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Klaida: „con status“: %s; leidžiami laukai: %s"
+msgid "Error: 'list active': %s; allowed fields: %s"
+msgstr "Klaida: „list active“: %s; leidžiami laukai: %s"
-#: ../cli/src/connections.c:924
+#. Main header
+#: ../cli/src/connections.c:860
msgid "Active connection details"
msgstr "Aktyvaus ryšio detalės"
-#: ../cli/src/connections.c:1060
-#: ../cli/src/connections.c:1720
-#: ../cli/src/connections.c:1832
-#: ../cli/src/connections.c:1923
-#: ../cli/src/devices.c:852
-#: ../cli/src/devices.c:914
-#: ../cli/src/devices.c:1080
-#: ../cli/src/devices.c:1213
-#: ../cli/src/devices.c:1632
-#: ../cli/src/devices.c:1860
-#: ../cli/src/network-manager.c:311
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Klaida: nepavyko nustatyti ar veikia NetworkManager: %s."
-
-#: ../cli/src/connections.c:1064
-#: ../cli/src/connections.c:1724
-#: ../cli/src/connections.c:1836
-#: ../cli/src/connections.c:1927
-#: ../cli/src/devices.c:856
-#: ../cli/src/devices.c:918
-#: ../cli/src/devices.c:1084
-#: ../cli/src/devices.c:1217
-#: ../cli/src/devices.c:1636
-#: ../cli/src/devices.c:1864
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:999 ../cli/src/connections.c:1607
+#: ../cli/src/connections.c:1692 ../cli/src/connections.c:6508
+#: ../cli/src/connections.c:6623 ../cli/src/connections.c:6714
+#: ../cli/src/devices.c:1058 ../cli/src/devices.c:1105
+#: ../cli/src/devices.c:1255 ../cli/src/devices.c:1396
+#: ../cli/src/devices.c:1835 ../cli/src/devices.c:2138
+#: ../cli/src/network-manager.c:366
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Klaida: NetworkManager neveikia."
-#: ../cli/src/connections.c:1096
-msgid "Active connections"
-msgstr "Aktyvūs ryšiai"
+#. Add headers
+#: ../cli/src/connections.c:1025
+msgid "List of active connections"
+msgstr "Aktyvių ryšių sąrašas"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1061 ../cli/src/connections.c:1719
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "Klaida: „%s“ nėra aktyvus ryšys."
-#: ../cli/src/connections.c:1126
+#: ../cli/src/connections.c:1074
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "Klaida: nežinomas parametras: %s"
+msgid "Error: 'show active': %s"
+msgstr "Klaida: „show active“: %s"
-#: ../cli/src/connections.c:1233
+#: ../cli/src/connections.c:1076
+#, c-format
+msgid "Error: 'show active': %s; allowed fields: %s"
+msgstr "Klaida: „show active“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/connections.c:1169
#, c-format
msgid "no active connection on device '%s'"
msgstr "nėra aktyvaus ryšio įrenginyje „%s“"
-#: ../cli/src/connections.c:1241
-#, c-format
+#: ../cli/src/connections.c:1177
msgid "no active connection or device"
msgstr "nėra aktyvaus ryšio įrenginyje"
-#: ../cli/src/connections.c:1312
+#: ../cli/src/connections.c:1248
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "įrenginys „%s“ nesuderinamas su ryšiu „%s“"
-#: ../cli/src/connections.c:1314
+#: ../cli/src/connections.c:1251
#, c-format
msgid "no device found for connection '%s'"
msgstr "nerastas įrenginys ryšiui „%s“"
-#: ../cli/src/connections.c:1325
+#: ../cli/src/connections.c:1263
msgid "unknown reason"
msgstr "nežinoma priežastis"
-#: ../cli/src/connections.c:1327
+#: ../cli/src/connections.c:1265 ../cli/src/network-manager.c:165
msgid "none"
msgstr "jokia"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1267
msgid "the user was disconnected"
msgstr "naudotojas buvo atjungtas"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1269
msgid "the base network connection was interrupted"
msgstr "bazinis tinklo ryšys buvo pertrauktas"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1271
msgid "the VPN service stopped unexpectedly"
msgstr "VPN tarnyba netikÄ—tai sustojo"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1273
msgid "the VPN service returned invalid configuration"
msgstr "VPN tarnyba grąžino netinkamą konfigūraciją"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1275
msgid "the connection attempt timed out"
msgstr "bandymo jungtis laikas baigÄ—si"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1277
msgid "the VPN service did not start in time"
msgstr "VPN tarnyba nebuvo paleista laiku"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1279
msgid "the VPN service failed to start"
msgstr "nepavyko paleisti VPN tarnybos"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1281
msgid "no valid VPN secrets"
msgstr "nÄ—ra tinkamų VPN paslapÄių"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1283
msgid "invalid VPN secrets"
msgstr "netinkamos VPN paslaptys"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1285
msgid "the connection was removed"
msgstr "ryšys buvo pašalintas"
-#: ../cli/src/connections.c:1364
-#: ../cli/src/connections.c:1569
+#: ../cli/src/connections.c:1302 ../cli/src/connections.c:1461
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "Ryšys sėkmingai aktyvuotas (D-Bus aktyvus kelias: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1369
-#: ../cli/src/connections.c:1470
+#: ../cli/src/connections.c:1308
#, c-format
msgid "Error: Connection activation failed."
msgstr "Klaida: nepavyko aktyvuoti ryšio."
-#: ../cli/src/connections.c:1394
+#: ../cli/src/connections.c:1333
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN ryšys sėkmingai aktyvuotas (D-Bus aktyvus kelias: %s)\n"
-#: ../cli/src/connections.c:1402
+#: ../cli/src/connections.c:1341
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Klaida: nepavyko aktyvuoti ryšio: %s."
-#: ../cli/src/connections.c:1499
-#: ../cli/src/devices.c:974
+#: ../cli/src/connections.c:1359 ../cli/src/devices.c:1166
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Klaida: baigÄ—si %d sek. laikas."
-#: ../cli/src/connections.c:1560
+#: ../cli/src/connections.c:1426
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Klaida: įrenginys „%s“ laukia pagalbininkų prieš pradėdamas aktyvavimą."
+
+#: ../cli/src/connections.c:1446
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Klaida: nepavyko aktyvuoti ryšio: %s"
-#: ../cli/src/connections.c:1654
-#: ../cli/src/connections.c:1808
-#: ../cli/src/connections.c:1936
+#: ../cli/src/connections.c:1531 ../cli/src/connections.c:1677
+#: ../cli/src/connections.c:6630
+msgid "Connection (name, UUID, or path): "
+msgstr "Ryšys (pavadinimas, UUID arba kelias): "
+
+#: ../cli/src/connections.c:1536 ../cli/src/connections.c:1682
+#: ../cli/src/connections.c:6635
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Klaida: nežinomas ryšys: %s"
+msgid "Error: No connection specified."
+msgstr "Klaida: nenurodytas ryšys."
-#: ../cli/src/connections.c:1700
-#: ../cli/src/devices.c:1059
-#: ../cli/src/devices.c:1605
+#: ../cli/src/connections.c:1559
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Klaida: netinkama laukimo laiko reikšmė „%s“."
+msgid "Error: Unknown connection: %s."
+msgstr "Klaida: nežinomas ryšys: %s"
-#: ../cli/src/connections.c:1713
-#: ../cli/src/connections.c:1825
-#: ../cli/src/connections.c:1916
+#: ../cli/src/connections.c:1596 ../cli/src/devices.c:1028
+#: ../cli/src/devices.c:1364 ../cli/src/devices.c:1812
+#: ../cli/src/devices.c:2106
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Klaida: id arba uuid turi būti nurodytas."
+msgid "Unknown parameter: %s\n"
+msgstr "Nežinomas parametras: %s\n"
-#: ../cli/src/connections.c:1745
+#: ../cli/src/connections.c:1626
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "Klaida: nerastas tinkamas įrenginys: %s."
-#: ../cli/src/connections.c:1747
+#: ../cli/src/connections.c:1628
#, c-format
msgid "Error: No suitable device found."
msgstr "Klaida: nerastas tinkamas įrenginys."
-#: ../cli/src/connections.c:1861
+#: ../cli/src/connections.c:1655
+msgid "preparing"
+msgstr "ruošiama"
+
+#: ../cli/src/connections.c:2016 ../cli/src/utils.c:490
+#, c-format
+msgid "'%s' not among [%s]"
+msgstr "„%s“ nėra tarp [%s]"
+
+#: ../cli/src/connections.c:2098
+#, c-format
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Klaida: „%s“: „%s“ nėra tinkamas %s MAC adresas."
+
+#: ../cli/src/connections.c:2099
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2099
+msgid "Ethernet"
+msgstr ""
+
+#: ../cli/src/connections.c:2122
+#, fuzzy, c-format
+#| msgid "Error: 'mtu': '%s' is not valid."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Klaida: „mtu“: „%s“ nėra tinkamas."
+
+#: ../cli/src/connections.c:2138
+#, c-format
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Klaida: „parent“: „%s“ nėra tinkamas sąsajos pavadinimas."
+
+#: ../cli/src/connections.c:2159
+#, fuzzy, c-format
+#| msgid "Error: 'p-key': '%s' is not valid."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Klaida: „p-key“: „%s“ nėra tinkamas."
+
+#: ../cli/src/connections.c:2175
+#, fuzzy, c-format
+#| msgid "Error: 'parent': '%s' is not a valid interface name."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr "Klaida: „parent“: „%s“ nėra tinkamas sąsajos pavadinimas."
+
+#: ../cli/src/connections.c:2191
+#, c-format
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Klaida: „flags“: „%s“ yra netinkamas; naudokite <0-7>."
+
+#: ../cli/src/connections.c:2213
+#, fuzzy, c-format
+#| msgid "Error: 'egress': '%s' is not valid; %s "
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Klaida: „egress“: „%s“ yra netinkamas; %s."
+
+#: ../cli/src/connections.c:2318
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%d-%d>."
+msgstr "Klaida: „%s“: „%s“ nėra tinkamas; naudokite <%d-%d>."
+
+#: ../cli/src/connections.c:2332
+msgid "ethernet"
+msgstr ""
+
+#: ../cli/src/connections.c:2332
+msgid "Wi-Fi"
+msgstr ""
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2335
+#, fuzzy, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "Klaida: trÅ«ksta argumento parinkÄiai „%s“."
+
+#: ../cli/src/connections.c:2336 ../cli/src/connections.c:2381
+#: ../cli/src/connections.c:2483 ../cli/src/connections.c:2535
+#: ../cli/src/connections.c:2591 ../cli/src/connections.c:2670
+#: ../cli/src/connections.c:2751 ../cli/src/connections.c:2821
+#, fuzzy
+#| msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "Ar norite taip pat nustatyti „%s“ į „%s“? [yes]: "
+
+#: ../cli/src/connections.c:2342 ../cli/src/connections.c:2387
+#: ../cli/src/connections.c:2541
+msgid "MTU [auto]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2351 ../cli/src/connections.c:2396
+#: ../cli/src/connections.c:2464
+msgid "MAC [none]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2360
+msgid "Cloned MAC [none]: "
+msgstr ""
+
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2380
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2405
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2416
+#, fuzzy
+#| msgid "Interface name: "
+msgid "Parent interface [none]: "
+msgstr "SÄ…sajos pavadinimas: "
+
+#: ../cli/src/connections.c:2425
+msgid "P_KEY [none]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2433
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr ""
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2457
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2458 ../cli/src/connections.c:2504
+#: ../cli/src/connections.c:2800
+#, fuzzy
+#| msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "Ar norite taip pat nustatyti „%s“ į „%s“? [yes]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:2482
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2488 ../cli/src/connections.c:2805
+msgid "Username [none]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2490
+#, fuzzy
+#| msgid "Password: "
+msgid "Password [none]: "
+msgstr "Slaptažodis: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:2503
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2510
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2518
+#, fuzzy, c-format
+#| msgid "Error: 'p-key': '%s' is not valid."
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Klaida: „p-key“: „%s“ nėra tinkamas."
+
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:2534
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2550
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2559
+msgid "Ingress priority maps [none]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2568
+msgid "Egress priority maps [none]: "
+msgstr ""
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:2590
+#, c-format
+msgid "There are 6 optional arguments for 'bond' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2598
+msgid "Bonding mode [balance-rr]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2612
+msgid "Bonding miimon [100]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2616
+#, fuzzy, c-format
+#| msgid "Error: '%s': '%s' is not valid; use <%d-%d>."
+msgid "Error: 'miimon': '%s' is not a valid number <0-%d>.\n"
+msgstr "Klaida: „%s“: „%s“ nėra tinkamas; naudokite <%d-%d>."
+
+#: ../cli/src/connections.c:2622
+msgid "Bonding downdelay [0]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2626
+#, fuzzy, c-format
+#| msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%d>.\n"
+msgstr "Klaida: „flags“: „%s“ yra netinkamas; naudokite <0-7>."
+
+#: ../cli/src/connections.c:2632
+msgid "Bonding updelay [0]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2636
+#, fuzzy, c-format
+#| msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgid "Error: 'updelay': '%s' is not a valid number <0-%d>.\n"
+msgstr "Klaida: „flags“: „%s“ yra netinkamas; naudokite <0-7>."
+
+#: ../cli/src/connections.c:2642
+msgid "Bonding arp-interval [0]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2646
+#, fuzzy, c-format
+#| msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%d>.\n"
+msgstr "Klaida: „channel“: „%s“ yra netinkamas; naudokite <1-13>."
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:2652
+msgid "Bonding arp-ip-target [none]): "
+msgstr ""
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:2669
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2677
+msgid "Enable STP (yes/no) [yes]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2681
+#, fuzzy, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'stp': '%s'.\n"
+msgstr "Klaida: „stp“: %s."
+
+#: ../cli/src/connections.c:2687
+msgid "STP priority [128]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2691
+#, fuzzy, c-format
+#| msgid "Error: '%s': '%s' is not valid; use <%d-%d>."
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Klaida: „%s“: „%s“ nėra tinkamas; naudokite <%d-%d>."
+
+#: ../cli/src/connections.c:2697
+msgid "Forward delay [15]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2701
+#, fuzzy, c-format
+#| msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Klaida: „flags“: „%s“ yra netinkamas; naudokite <0-7>."
+
+#: ../cli/src/connections.c:2708
+msgid "Hello time [2]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2712
+#, fuzzy, c-format
+#| msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Klaida: „channel“: „%s“ yra netinkamas; naudokite <1-13>."
+
+#: ../cli/src/connections.c:2718
+msgid "Max age [20]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2722
+#, fuzzy, c-format
+#| msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Klaida: „id“: „%s“ yra netinkamas; naudokite <0-4095>."
+
+#: ../cli/src/connections.c:2728
+msgid "MAC address ageing time [300]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2732
+#, fuzzy, c-format
+#| msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Klaida: „id“: „%s“ yra netinkamas; naudokite <0-4095>."
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:2750
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2757
+msgid "Bridge port priority [32]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2768
+msgid "Bridge port STP path cost [100]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2780
+msgid "Hairpin (yes/no) [yes]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2784
+#, fuzzy, c-format
+#| msgid "Error: 'hairpin': %s."
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "Klaida: „hairpin“: %s"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:2799
+#, fuzzy, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "Klaida: trÅ«ksta argumento parinkÄiai „%s“."
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:2820
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr ""
+
+#: ../cli/src/connections.c:2827
+msgid "OLPC Mesh channel [1]): "
+msgstr ""
+
+#: ../cli/src/connections.c:2830
+#, fuzzy, c-format
+#| msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Klaida: „channel“: „%s“ yra netinkamas; naudokite <1-13>."
+
+#: ../cli/src/connections.c:2836
+msgid "DHCP anycast MAC address [none]: "
+msgstr ""
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:2859
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr ""
+
+#: ../cli/src/connections.c:2865
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr ""
+
+#: ../cli/src/connections.c:2871 ../cli/src/connections.c:2889
+#: ../cli/src/connections.c:4045 ../cli/src/connections.c:4054
+msgid "Error: "
+msgstr "Klaida: "
+
+#: ../cli/src/connections.c:2883
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr ""
+
+#: ../cli/src/connections.c:3038
+#, fuzzy, c-format
+#| msgid "Error: 'parent': not valid without p-key."
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Klaida: „parent“: netinkamas be p-key."
+
+#: ../cli/src/connections.c:3094 ../cli/src/connections.c:3962
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3097 ../cli/src/connections.c:3965
+msgid "Error: 'ssid' is required."
+msgstr "Klaida: būtinas „ssid“."
+
+#: ../cli/src/connections.c:3161
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP pavadinimas: "
+
+#: ../cli/src/connections.c:3164
+msgid "Error: 'nsp' is required."
+msgstr "Klaida: būtinas „nsp“."
+
+#: ../cli/src/connections.c:3220
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3223
+msgid "Error: 'apn' is required."
+msgstr "Klaida: būtinas „apn“."
+
+#: ../cli/src/connections.c:3282
+msgid "Bluetooth device address: "
+msgstr "Bluetooth įrenginio adresas:"
+
+#: ../cli/src/connections.c:3285
+msgid "Error: 'addr' is required."
+msgstr "Klaida: būtinas „addr“."
+
+#: ../cli/src/connections.c:3328
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "Klaida: „bt-type“: „%s“ netinkamas; naudokite [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:3373
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN tėvinis įrenginys arba ryšio UUID: "
+
+#: ../cli/src/connections.c:3376
+msgid "Error: 'dev' is required."
+msgstr "Klaida: būtinas „dev“."
+
+#: ../cli/src/connections.c:3380
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:3383
+msgid "Error: 'id' is required."
+msgstr "Klaida: būtinas „id“."
+
+#: ../cli/src/connections.c:3389
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Klaida: „id“: „%s“ yra netinkamas; naudokite <0-4095>."
+
+#: ../cli/src/connections.c:3399
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "Klaida: „dev“: „%s“ nėra nei UUID, nei sąsajos pavadinimas, nei MAC."
+
+#: ../cli/src/connections.c:3529
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "Klaida: „mode“: %s."
+
+#: ../cli/src/connections.c:3571
+msgid "Bond master: "
+msgstr "Bond pagrindinis: "
+
+#: ../cli/src/connections.c:3574 ../cli/src/connections.c:3645
+#: ../cli/src/connections.c:3816
+msgid "Error: 'master' is required."
+msgstr "Klaida: būtinas „master“."
+
+#: ../cli/src/connections.c:3579 ../cli/src/connections.c:3650
+#: ../cli/src/connections.c:3827
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Įspėjimas: „type“ šiuo metu nepaisoma. Šiuo metu palaikomi tik laidiniai "
+"potinkliai.\n"
+
+#: ../cli/src/connections.c:3642
+msgid "Team master: "
+msgstr "Komandos pagrindinis: "
+
+#: ../cli/src/connections.c:3729
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "Klaida: „stp“: %s."
+
+#: ../cli/src/connections.c:3813
+msgid "Bridge master: "
+msgstr "Susietas pagrindinis: "
+
+#: ../cli/src/connections.c:3821
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "Klaida: „master“: „%s“ nėra tinkamas UUID ar sąsaja."
+
+#: ../cli/src/connections.c:3854
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "Klaida: „hairpin“: %s"
+
+#: ../cli/src/connections.c:3906
+msgid "VPN type: "
+msgstr "VPN tipas: "
+
+#: ../cli/src/connections.c:3909
+msgid "Error: 'vpn-type' is required."
+msgstr "Klaida: būtinas „vpn-type“."
+
+#: ../cli/src/connections.c:3920
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "Klaida: „vpn-type“: %s."
+
+#: ../cli/src/connections.c:3978
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Klaida: „channel“: „%s“ yra netinkamas; naudokite <1-13>."
+
+#: ../cli/src/connections.c:4013
+#, c-format
+msgid "Error: '%s' is a not valid connection type."
+msgstr "Klaida: „%s“ nėra tinkamas ryšio tipas."
+
+#: ../cli/src/connections.c:4109
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Klaida: nepavyko pridėti „%s“ ryšio: (%d) %s"
+
+#: ../cli/src/connections.c:4114
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Ryšys „%s“ (%s) sėkmingai pridėtas.\n"
+
+#: ../cli/src/connections.c:4160
+msgid "Connection type: "
+msgstr "Ryšio tipas: "
+
+#: ../cli/src/connections.c:4164
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Klaida: būtinas argumentas „type“."
+
+#: ../cli/src/connections.c:4170
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Klaida: netinkamas ryšio tipas; %s."
+
+#: ../cli/src/connections.c:4179
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Klaida: „autoconnect“: %s."
+
+#: ../cli/src/connections.c:4195
+#, fuzzy
+#| msgid "Interface name: "
+msgid "Interface name [*]: "
+msgstr "SÄ…sajos pavadinimas: "
+
+#: ../cli/src/connections.c:4202
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Klaida: „ifname“: „%s“ nėra nei tinkama sąsaja, nei „*“."
+
+#: ../cli/src/connections.c:4806
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "[„%s“ nustatomos vertės]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:4884
+#, fuzzy, c-format
+#| msgid ""
+#| "---[ Main menu ]---\n"
+#| "goto [<setting> | <prop>] :: go to a setting or property\n"
+#| "set [<setting>.<prop> <value>] :: set property value\n"
+#| "describe [<setting>.<prop>] :: describe property\n"
+#| "print [all] :: print the connection\n"
+#| "verify [all] :: verify the connection\n"
+#| "save :: save the connection\n"
+#| "back :: go one level up (back)\n"
+#| "help/? [<command>] :: print this help\n"
+#| "nmcli <conf-option> <value> :: nmcli configuration\n"
+#| "quit :: exit nmcli\n"
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Pagrindinis meniu ]---\n"
+"goto [<nustatymas> | <savybÄ—>] :: eiti prie nustatymo ar savybÄ—s\n"
+"set [<nustat>.<savyb> <vertÄ—>] :: nustatyti savybÄ—s vertÄ™\n"
+"describe [<nustatymas>.<savybė>] :: apibūdinti savybę\n"
+"print [all] :: atspausdinti ryšį\n"
+"verify [all] :: patikrinti ryšį\n"
+"save :: įrašyti ryšį\n"
+"back :: pereiti vienu lygmeniu aukÅ¡Äiau "
+"(atgal)\n"
+"help/? [<command>] :: atspausdinti Å¡iÄ… pagalbÄ…\n"
+"nmcli <conf-option> <value> :: nmcli konfigūracija\n"
+"quit :: išeiti iš nmcli\n"
+
+#: ../cli/src/connections.c:4910
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editation\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <nustatymas>[.<savybė>] | <savybė> :: eiti į nustatymo/savybės "
+"redagavimÄ…\n"
+"\n"
+"Ši komanda į eina į nustatymą ar savybę jo redagavimui.\n"
+"\n"
+"Pavyzdžiai: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:4917
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+
+#: ../cli/src/connections.c:4924
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> s con.id My connection\n"
+msgstr ""
+"set [<nustatymas>.<savybÄ—> <vertÄ—>] :: nustatyti savybÄ—s vertÄ™\n"
+"\n"
+"Å i komanda nustato savybÄ—s vertÄ™.\n"
+"\n"
+"Pavyzdys: nmcli> s con.id Mano ryšys\n"
+
+#: ../cli/src/connections.c:4929
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<nustatymas>.<savybė>] :: apibūdinti savybę\n"
+"\n"
+"Parodo savybės aprašymą. Visus NM nustatymus ir savybes rasite nm-settings"
+"(5) vadove.\n"
+
+#: ../cli/src/connections.c:4934
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: atspausdinti nustatymo ar ryšio vertes\n"
+"\n"
+"Parodo dabartinę savybę ar visą ryšį.\n"
+"\n"
+"Pavyzdys: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:4939
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: patikrinti nustatymo ar ryšio teisingumą\n"
+"\n"
+"Patikrina, ar nustatymas arba ryšys yra tinkamas ir gali būti vėliau "
+"įrašytas. Kilus klaidai nurodomos netinkamos vertės.\n"
+"\n"
+"Pavyzdžiai: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:4946
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: įrašyti ryšį\n"
+"\n"
+"NusiunÄia ryšį į NetworkManager, kuris jį įraÅ¡ys.\n"
+
+#: ../cli/src/connections.c:4950 ../cli/src/connections.c:5100
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: pereiti į aukštesnį meniu lygmenį\n"
+"\n"
+
+#: ../cli/src/connections.c:4953
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<komanda>] :: nmcli komandų pagalba\n"
+"\n"
+
+#: ../cli/src/connections.c:4956
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<konf-parametras> <vertė>] :: nmcli konfigūracija\n"
+"\n"
+"Konfigūruoja nmcli. Galimi šie parametrai:\n"
+"status-line yes | no [numatyta: no]\n"
+"save-confirmation yes | no [numatyta: yes]\n"
+"prompt-color <0-8> [numatyta: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Pavyzdžiai: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:4976 ../cli/src/connections.c:5106
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: išeiti iš nmcli\n"
+"\n"
+"Ši komanda išeina iš nmcli. Kai redaguojamas ryšys nėra įrašytas, naudotojo "
+"prašoma patvirtinti veiksmą.\n"
+
+#: ../cli/src/connections.c:4981 ../cli/src/connections.c:5111
+#: ../cli/src/connections.c:5380 ../cli/src/connections.c:6103
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "Nežinoma komanda: „%s“\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5047
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) value"
+"(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Savybių meniu ]---\n"
+"set [<vertÄ—>] :: nustatyti naujÄ… vertÄ™\n"
+"add [<vertÄ—>] :: pridÄ—ti naujÄ… parametrÄ… ar savybÄ™\n"
+"change :: keisti dabartinÄ™ vertÄ™\n"
+"remove [<indeksas> | <param>] :: ištrinti vertę\n"
+"describe :: apibūdinti savybę\n"
+"print [nustatymas | ryšys] :: atspausdinti savybės (nustatymo/ryšio) "
+"vertÄ™(es)\n"
+"back :: pereiti į aukštesnį lygį\n"
+"help/? [<komanda>] :: atspausdinti Å¡iÄ… pagalbÄ… arba komandos "
+"aprašymą\n"
+"quit :: išeiti iš nmcli\n"
+
+#: ../cli/src/connections.c:5072
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<vertÄ—>] :: nustatyti naujÄ… vertÄ™\n"
+"\n"
+"Å i komanda Å¡iai savybei nustato pateiktÄ… <vertÄ™>\n"
+
+#: ../cli/src/connections.c:5076
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<vertÄ—>] :: pridÄ—ti naujÄ… parametrÄ… savybei\n"
+"\n"
+"Å i komanda Å¡iai savybei prideda pateiktÄ… <vertÄ™>, jei savybÄ— yra konteinerio "
+"tipo. Vienos vertÄ—s savybÄ—ms ji pakeiÄia vertÄ™ (tas pats, kaip „set“).\n"
+
+#: ../cli/src/connections.c:5082
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: pakeisti dabartinÄ™ vertÄ™\n"
+"\n"
+"Parodo dabartinę vertę ir leidžia ją redaguoti.\n"
+
+#: ../cli/src/connections.c:5086
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<indeksas>|<parametras>] :: ištrinti vertę\n"
+"\n"
+"Pašalina savybės vertę (nustato ją į numatytąją).\n"
+
+#: ../cli/src/connections.c:5090
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: apibūdinti savybę\n"
+"\n"
+"Parodo savybės aprašymą. Visus NM nustatymus ir savybes rasite nm-settings"
+"(5) žinyne.\n"
+
+#: ../cli/src/connections.c:5095
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [savybė|nustatymas|ryšys] :: atspausdinti savybės (nustatymo, ryšio) "
+"vertÄ™(es)\n"
+"\n"
+"Parodo savybÄ—s vertÄ™. PateikÄ™ argumentÄ… taip pat galite pamatyti viso "
+"nustatymo ar ryšio vertes.\n"
+
+#: ../cli/src/connections.c:5103
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<komanda>] :: nmcli komandų pagalba\n"
+"\n"
+
+#: ../cli/src/connections.c:5191
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr ""
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:5209
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ Ryšio tipas: %s | pavadinimas: %s | UUID: %s | pakeistas: %s ]\n"
+
+#: ../cli/src/connections.c:5259 ../cli/src/connections.c:5655
+#: ../cli/src/connections.c:5713
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Įveskite „%s“ vertę: "
+
+#: ../cli/src/connections.c:5276 ../cli/src/connections.c:5295
+#: ../cli/src/connections.c:5661 ../cli/src/connections.c:5720
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Klaida: nepavyko nustatyti „%s“ savybės: %s\n"
+
+#: ../cli/src/connections.c:5288
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Klaida „%s“ vertė: "
+
+#: ../cli/src/connections.c:5317
+#, c-format
+msgid "Error: %s\n"
+msgstr "Klaida: %s\n"
+
+#: ../cli/src/connections.c:5323 ../cli/src/connections.c:5794
+#: ../cli/src/connections.c:5835
+#, fuzzy, c-format
+#| msgid "Error: failed to modify %s.%s: %s."
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Klaida: nepavyko pakeisti %s.%s: %s."
+
+#: ../cli/src/connections.c:5344
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Nežinomas komandos argumentas: „%s“\n"
+
+#: ../cli/src/connections.c:5364 ../cli/src/connections.c:6091
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "Ryšys neįrašytas. Ar tikrai norite išeiti? [y/n]\n"
+
+#: ../cli/src/connections.c:5476
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Galimi nustatymai: %s\n"
+
+#: ../cli/src/connections.c:5485
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Klaida: netinkamas nustatymo pavadinimas; %s\n"
+
+#: ../cli/src/connections.c:5502
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Galimos savybÄ—s: %s\n"
+
+#: ../cli/src/connections.c:5510
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Klaida: savybÄ— %s\n"
+
+#: ../cli/src/connections.c:5537
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"Ryšys įrašomas su „autoconnect=yes“. Tai gali sukelti ryšio aktyvavimą "
+"nedelsiant.\n"
+"Ar vistiek norite įrašyti? [yes] "
+
+#: ../cli/src/connections.c:5607
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Galite keisti Å¡iuos nustatymus: %s\n"
+
+#: ../cli/src/connections.c:5653 ../cli/src/connections.c:5711
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Galimos vertės „%s“ savybei: %s\n"
+
+#: ../cli/src/connections.c:5665 ../cli/src/connections.c:5876
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Klaida: nepasirinktas nustatymas; galimi yra [%s]\n"
+
+#: ../cli/src/connections.c:5666
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"pirmiausia naudokite „goto <nustatymas>“ arba „set <nustatymas>.<savybė>“\n"
+
+#: ../cli/src/connections.c:5681 ../cli/src/connections.c:5814
+#: ../cli/src/connections.c:5893
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "Klaida: netinkamas nustatymo argumentas „%s“; tinkami yra [%s]\n"
+
+#: ../cli/src/connections.c:5691
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Klaida: trūksta nustatymo savybei „%s“\n"
+
+#: ../cli/src/connections.c:5698
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Klaida: netinkama savybÄ—: %s\n"
+
+#: ../cli/src/connections.c:5747
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Klaida: nežinomas nustatymas „%s“\n"
+
+#: ../cli/src/connections.c:5760
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Galite keisti Å¡ias savybes: %s\n"
+
+#: ../cli/src/connections.c:5799
+#, fuzzy, c-format
+#| msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Klaida: netinkamas nustatymo argumentas „%s“; tinkami yra [%s]\n"
+
+#: ../cli/src/connections.c:5812
+#, fuzzy, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "Klaida: „%s“ nėra aktyvus ryšys."
+
+#: ../cli/src/connections.c:5852
+#, fuzzy, c-format
+#| msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Klaida: netinkama savybÄ—: %s, nei teisingas nustatymo pavadinimas.\n"
+
+#: ../cli/src/connections.c:5877
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"pirmiausia naudokite „goto <nustatymas>“ arba „descrive <nustatymas>."
+"<savybė>“\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "Klaida: netinkama savybÄ—: %s, nei teisingas nustatymo pavadinimas.\n"
+
+#: ../cli/src/connections.c:5942
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "Klaida: nustatymo „%s“ nėra\n"
+
+#: ../cli/src/connections.c:5945
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Klaida: nežinomas nustatymas: %s\n"
+
+#: ../cli/src/connections.c:5961
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Patikrinti nustatymą „%s“: %s\n"
+
+#: ../cli/src/connections.c:5968
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Patikrinti ryšį: %s\n"
+
+#: ../cli/src/connections.c:6007
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "Klaida: nepavyiko įrašyti „%s“ (%s) ryšio: (%d) %s\n"
+
+#: ../cli/src/connections.c:6014
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Ryšys „%s“ (%s) sėkmingai įrašytas.\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Klaida: ryšio patikrinimas nesėkmingas: %s\n"
+
+#: ../cli/src/connections.c:6023
+msgid "(unknown error)"
+msgstr "(nežinoma klaida)"
+
+#: ../cli/src/connections.c:6046
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Klaida: status-line: %s\n"
+
+#: ../cli/src/connections.c:6054
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Klaida: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:6062
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Klaida: blogas spalvos numeris: „%s“; naudokite <0-8>\n"
+
+#: ../cli/src/connections.c:6074
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Dabartinė nmcli konfigūracija:\n"
+
+#: ../cli/src/connections.c:6082
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Netinkamas konfigūracijos parametras „%s“; leidžiami [%s]\n"
+
+#: ../cli/src/connections.c:6282
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> Komandų eilutės redagavimas neprieinamas. Šiai savybei įjungti diekite "
+"eiluÄių redagavimo bibliotekÄ…. <<<\n"
+"Palaikomos bibliotekos:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:6308
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "Klaida: gali būti pateiktas tik vienas iš „id“, uuid arba „path“."
+
+#: ../cli/src/connections.c:6320 ../cli/src/connections.c:6515
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Klaida: nežinomas ryšys „%s“."
+
+#: ../cli/src/connections.c:6335
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr "Ä®spÄ—jimas: keiÄiamas esamas ryÅ¡ys „%s“; „type“ argumento nepaisoma\n"
+
+#: ../cli/src/connections.c:6338
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Ä®spÄ—jimas: keiÄiamas esamas ryÅ¡ys „%s“; „con-name“ argumento nepaisoma\n"
+
+#: ../cli/src/connections.c:6352
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Galimi ryšio tipai: %s\n"
+
+#: ../cli/src/connections.c:6354
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Klaida: nežinomas ryšio tipas; %s\n"
+
+#: ../cli/src/connections.c:6390
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli interaktyvus ryšių redaktorius |==="
+
+#: ../cli/src/connections.c:6393
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "KeiÄiamas esamas „%s“ ryÅ¡ys: „%s“"
+
+#: ../cli/src/connections.c:6395
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Pridedamas naujas „%s“ ryšys"
+
+#: ../cli/src/connections.c:6397
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Galimoms komandoms gauti rašykite „help“ arba „?“."
+
+#: ../cli/src/connections.c:6399
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+
+#: ../cli/src/connections.c:6436
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Klaida: nepavyko pakeisti ryšio „%s“: (%d) %s"
+
+#: ../cli/src/connections.c:6442
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Ryšys „%s“ (%s) sėkmingai pakeistas.\n"
+
+#: ../cli/src/connections.c:6469
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Klaida: nepateikta argumentų."
+
+#: ../cli/src/connections.c:6493
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Klaida: trūksta ryšio ID."
+
+#: ../cli/src/connections.c:6498
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Klaida: trūksta <nustatymo>.<savybės> argumento."
+
+#: ../cli/src/connections.c:6521
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Klaida: netinkamas <nustatymas>.<savybė> „%s“."
+
+#: ../cli/src/connections.c:6536
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Klaida: netinkamas arba neleidžiamas nustatymas „%s“: %s."
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Klaida: netinkama savybė „%s“: %s."
+
+#: ../cli/src/connections.c:6563
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Įspėjimas: ryšys neaktyvus\n"
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Klaida: nepavyko pakeisti %s.%s: %s."
-#: ../cli/src/connections.c:1875
+#: ../cli/src/connections.c:6593
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "Klaida: nepavyko ištrinti ryšio: %s"
-#: ../cli/src/connections.c:1993
+#: ../cli/src/connections.c:6663
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Klaida: netinkama „con“ komanda „%s“."
+msgid "Error: unknown connection: %s\n"
+msgstr "Klaida: nežinomas ryšys: %s\n"
-#: ../cli/src/connections.c:2061
+#. truncate trailing ", "
+#: ../cli/src/connections.c:6697
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Klaida: nepavyko prisijungti prie D-Bus."
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Klaida: negalima ištrinti nežinomo ryšio(-ių): %s."
-#: ../cli/src/connections.c:2069
+#: ../cli/src/connections.c:6781
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"Klaida: „connection show“ tikimasi „configured“ arba „active“ komandos."
+
+#: ../cli/src/connections.c:6821
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Klaida: „%s“ nėra tinkama „connection“ komanda."
+
+#: ../cli/src/connections.c:6886
#, c-format
msgid "Error: Could not get system settings."
msgstr "Klaida: nepavyko gauti sistemos nustatymų."
-#: ../cli/src/connections.c:2079
+#: ../cli/src/connections.c:6896
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "Klaida: nepavyko gauti ryšių: nustatymų tarnyba neveikia."
#. 0
-#. 9
+#. 12
#. 3
-#: ../cli/src/devices.c:70
-#: ../cli/src/devices.c:106
-#: ../cli/src/devices.c:187
-#: ../cli/src/devices.c:203
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:207
+#: ../cli/src/devices.c:225
msgid "DEVICE"
msgstr "ĮRENGINYS"
#. 0
-#: ../cli/src/devices.c:83
+#: ../cli/src/devices.c:84
msgid "CAPABILITIES"
msgstr "GEBOS"
#. 1
-#: ../cli/src/devices.c:84
+#: ../cli/src/devices.c:85
msgid "WIFI-PROPERTIES"
msgstr "WIFI-SAVYBÄ–S"
#. 2
-#: ../cli/src/devices.c:85
+#. 5
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:86
+#: ../cli/src/devices.c:87
msgid "WIRED-PROPERTIES"
msgstr "LAIDINIO-TINKLO-SAVYBÄ–S"
#. 4
-#: ../cli/src/devices.c:87
+#: ../cli/src/devices.c:88
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-SAVYBÄ–S"
#. 5
#. 0
-#: ../cli/src/devices.c:88
-#: ../cli/src/devices.c:200
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:222
msgid "NSP"
msgstr "NSP"
#. 6
-#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:90
msgid "IP4"
msgstr "IP4"
#. 7
-#: ../cli/src/devices.c:90
+#: ../cli/src/devices.c:91
msgid "DHCP4"
msgstr "DHCP4"
#. 8
-#: ../cli/src/devices.c:91
+#: ../cli/src/devices.c:92
msgid "IP6"
msgstr "IP6"
#. 9
-#: ../cli/src/devices.c:92
+#: ../cli/src/devices.c:93
msgid "DHCP6"
msgstr "DHCP6"
+#. 10
+#: ../cli/src/devices.c:94
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../cli/src/devices.c:95
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:96
+msgid "CONNECTIONS"
+msgstr "RYÅ IAI"
+
#. 2
-#: ../cli/src/devices.c:108
+#: ../cli/src/devices.c:112
msgid "VENDOR"
msgstr "GAMINTOJAS"
#. 3
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:113
msgid "PRODUCT"
msgstr "PRODUKTAS"
#. 4
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:114
msgid "DRIVER"
msgstr "TVARKYKLÄ–"
#. 5
-#: ../cli/src/devices.c:111
-#| msgid "VERSION"
+#: ../cli/src/devices.c:115
msgid "DRIVER-VERSION"
msgstr "TVARKYKLÄ–S-VERSIJA"
#. 6
-#: ../cli/src/devices.c:112
-#| msgid "FIRMWARE-MISSING"
+#: ../cli/src/devices.c:116
msgid "FIRMWARE-VERSION"
msgstr "APĮRANGOS-VERSIJA"
#. 7
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:117
msgid "HWADDR"
msgstr "APARATINIS-ADRESAS"
#. 9
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:119
msgid "REASON"
msgstr "PRIEŽASTIS"
#. 10
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:120
msgid "UDI"
msgstr "UDI"
#. 11
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:121
msgid "IP-IFACE"
msgstr "IP-IFACE"
#. 12
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:122
msgid "NM-MANAGED"
msgstr "NM-VALDOMAS"
#. 14
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:124
msgid "FIRMWARE-MISSING"
msgstr "TRŪKSTA-APĮRANGOS"
#. 15
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:125
msgid "CONNECTION"
msgstr "PRISIJUNGIMAS"
#. 0
-#: ../cli/src/devices.c:130
+#: ../cli/src/devices.c:135
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#. 1
+#: ../cli/src/devices.c:136
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
+
+#. 0
+#: ../cli/src/devices.c:145
msgid "CARRIER-DETECT"
msgstr "NEÅ LIO-APTIKIMAS"
#. 1
-#: ../cli/src/devices.c:131
+#: ../cli/src/devices.c:146
msgid "SPEED"
msgstr "SPARTA"
#. 0
-#: ../cli/src/devices.c:140
+#: ../cli/src/devices.c:155
msgid "CARRIER"
msgstr "NEÅ LYS"
#. 0
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:165 ../cli/src/devices.c:448
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:151
+#: ../cli/src/devices.c:166
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:167 ../cli/src/devices.c:456
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:168
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:169
msgid "CCMP"
msgstr "CCMP"
+#. 6
+#: ../cli/src/devices.c:171
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:164
+#: ../cli/src/devices.c:181
msgid "CTR-FREQ"
msgstr "CTR DAŽNIS"
#. 1
-#: ../cli/src/devices.c:165
+#: ../cli/src/devices.c:182
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:183
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:184
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:185
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:195
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:179
+#: ../cli/src/devices.c:196
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:197
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:180
+#. 3
+#: ../cli/src/devices.c:198
msgid "MODE"
msgstr "VEIKSENA"
-#. 3
-#: ../cli/src/devices.c:181
+#. 4
+#: ../cli/src/devices.c:199
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:200
msgid "FREQ"
msgstr "DAŽNIS"
-#. 4
-#: ../cli/src/devices.c:182
+#. 6
+#: ../cli/src/devices.c:201
msgid "RATE"
msgstr "DAŽNUMAS"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:183
-#: ../cli/src/devices.c:201
+#: ../cli/src/devices.c:202 ../cli/src/devices.c:223
msgid "SIGNAL"
msgstr "SIGNALAS"
-#. 6
-#: ../cli/src/devices.c:184
+#. 8
+#: ../cli/src/devices.c:203
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../cli/src/devices.c:204
msgid "SECURITY"
msgstr "SAUGA"
-#. 7
-#: ../cli/src/devices.c:185
+#. 10
+#: ../cli/src/devices.c:205
msgid "WPA-FLAGS"
msgstr "WPA-ŽYMOS"
-#. 8
-#: ../cli/src/devices.c:186
+#. 11
+#: ../cli/src/devices.c:206
msgid "RSN-FLAGS"
msgstr "RSN-ŽYMOS"
-#. 10
+#. 13
#. 4
-#: ../cli/src/devices.c:188
-#: ../cli/src/devices.c:204
+#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
msgid "ACTIVE"
msgstr "AKTYVUS"
-#: ../cli/src/devices.c:223
+#. 14
+#: ../cli/src/devices.c:209
+msgid "*"
+msgstr "*"
+
+#. 0
+#: ../cli/src/devices.c:238
+msgid "SLAVES"
+msgstr "SLAVES"
+
+#. 0
+#: ../cli/src/devices.c:247
+msgid "ID"
+msgstr "ID"
+
+#: ../cli/src/devices.c:263
#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-#| " wimax [list [iface <iface>] [nsp <name>]]\n"
-#| "\n"
msgid ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+" COMMAND := { status | show | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+" COMMAND := { status | show | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
+"[ifname <ifname>] [bssid <BSSID>] [name <name>]\n"
+"\n"
+" [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Naudojimas: nmcli dev { KOMANDA | help }\n"
+"Usage: nmcli įrenginys { KOMANDA | help }\n"
"\n"
-" KOMANDA := { status | list | disconnect | wifi | wimax }\n"
+" KOMANDA := { status | show | disconnect | wifi | wimax }\n"
"\n"
-" KOMANDA := { status | list | disconnect | wifi }\n"
+" KOMANDA := { status | show | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [sąrašas [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <slaptažodis>] [wep-key-type key|phrase] "
+"[ifname <ifname>] [bssid <BSSID>] [name <pav>]\n"
+"\n"
+" [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:323
+#: ../cli/src/devices.c:365
msgid "(none)"
msgstr "(jokios)"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:432
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:433
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:389
-msgid "Encrypted: "
-msgstr "Å ifruota: "
+#: ../cli/src/devices.c:452
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:394
-msgid "WEP "
-msgstr "WEP"
-
-#: ../cli/src/devices.c:396
-msgid "WPA "
-msgstr "WPA"
+#: ../cli/src/devices.c:461
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:398
-msgid "WPA2 "
-msgstr "WPA2"
-
-#: ../cli/src/devices.c:401
-msgid "Enterprise "
-msgstr "Kompanija "
-
-#: ../cli/src/devices.c:410
+#: ../cli/src/devices.c:477
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:410
-msgid "Infrastructure"
-msgstr "Infrastruktūra"
+#: ../cli/src/devices.c:478
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:445
+#: ../cli/src/devices.c:510
msgid "Home"
msgstr "Namai"
-#: ../cli/src/devices.c:448
+#: ../cli/src/devices.c:513
msgid "Partner"
msgstr "Partneris"
-#: ../cli/src/devices.c:451
+#: ../cli/src/devices.c:516
msgid "Roaming"
msgstr "Tarptinklinio ryšio tinklas"
-#: ../cli/src/devices.c:523
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Klaida: „dev list“: %s"
+#: ../cli/src/devices.c:588
+msgid "Device details"
+msgstr "Įrenginio informacija"
-#: ../cli/src/devices.c:525
+#: ../cli/src/devices.c:600
#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Klaida: „dev list“: %s; leidžiami laukai: %s"
+msgid "Error: 'device show': %s"
+msgstr "Klaida: „device show“: %s"
-#: ../cli/src/devices.c:534
-msgid "Device details"
-msgstr "Įrenginio informacija"
+#: ../cli/src/devices.c:602
+#, c-format
+msgid "Error: 'device show': %s; allowed fields: %s"
+msgstr "Klaida: „device show“: %s; leidžiami laukai: %s"
-#: ../cli/src/devices.c:579
-#: ../cli/src/devices.c:582
-#: ../cli/src/devices.c:1000
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:665 ../cli/src/devices.c:668 ../cli/src/devices.c:1192
msgid "(unknown)"
msgstr "(nežinoma)"
-#: ../cli/src/devices.c:591
+#: ../cli/src/devices.c:677
msgid "not connected"
msgstr "neprisijungta"
-#: ../cli/src/devices.c:618
+#: ../cli/src/devices.c:702
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:785
msgid "on"
msgstr "įjungta"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:785
msgid "off"
msgstr "išjungta"
-#: ../cli/src/devices.c:842
+#: ../cli/src/devices.c:1046
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Klaida: „dev status“: %s"
+msgid "Error: 'device status': %s"
+msgstr "Klaida: „device status“: %s"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1048
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Klaida: „dev status“: %s; leidžiami laukai: %s"
+msgid "Error: 'device status': %s; allowed fields: %s"
+msgstr "Klaida: „device status“: %s; leidžiami laukai: %s"
-#: ../cli/src/devices.c:867
+#. Add headers
+#: ../cli/src/devices.c:1067
msgid "Status of devices"
msgstr "Įrenginių būsena"
-#: ../cli/src/devices.c:898
+#: ../cli/src/devices.c:1097
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Klaida: trūksta argumento „%s“."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Klaida: netinkamas papildomas argumentas „%s“."
-#: ../cli/src/devices.c:939
-#: ../cli/src/devices.c:1104
-#: ../cli/src/devices.c:1245
-#: ../cli/src/devices.c:1892
+#: ../cli/src/devices.c:1125 ../cli/src/devices.c:1274
+#: ../cli/src/devices.c:1417 ../cli/src/devices.c:2160
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Klaida: nerastas įrenginys „%s“."
-#: ../cli/src/devices.c:962
+#: ../cli/src/devices.c:1154
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Pavyko: sėkmingai atjungtas įrenginys „%s“."
-#: ../cli/src/devices.c:997
+#: ../cli/src/devices.c:1189
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Klaida: įrenginio „%s“ (%s) atjungti nepavyko: %s"
-#: ../cli/src/devices.c:1010
+#: ../cli/src/devices.c:1202
#, c-format
-#| msgid "Success: Device '%s' successfully disconnected."
msgid "Device '%s' has been disconnected.\n"
msgstr "Įrenginys „%s“ sėkmingai atjungtas.\n"
-#: ../cli/src/devices.c:1073
+#: ../cli/src/devices.c:1229
+msgid "Interface: "
+msgstr "SÄ…saja: "
+
+#: ../cli/src/devices.c:1233 ../cli/src/devices.c:1242
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Klaida: turi būti nurodytas iface."
+msgid "Error: No interface specified."
+msgstr "Klaida: nenurodyta sÄ…saja."
-#: ../cli/src/devices.c:1203
+#: ../cli/src/devices.c:1248
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Klaida: „dev wifi“: %s"
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Klaida: papildomas argumentas neleidžiamas: „%s“."
+
+#: ../cli/src/devices.c:1345
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi skenavimo sąrašas"
-#: ../cli/src/devices.c:1205
+#: ../cli/src/devices.c:1384
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Klaida: „dev wifi“: %s; leidžiami laukai: %s"
+msgid "Error: 'device wifi': %s"
+msgstr "Klaida: „device wifi“: %s"
-#: ../cli/src/devices.c:1228
-msgid "WiFi scan list"
-msgstr "WiFi skenavimo sąrašas"
+#: ../cli/src/devices.c:1386
+#, c-format
+msgid "Error: 'device wifi': %s; allowed fields: %s"
+msgstr "Klaida: „device wifi“: %s; leidžiami laukai: %s"
-#: ../cli/src/devices.c:1265
-#: ../cli/src/devices.c:1319
+#: ../cli/src/devices.c:1440 ../cli/src/devices.c:1509
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Klaida: prieigos taškas su bssid „%s“ nerastas"
-#: ../cli/src/devices.c:1282
+#: ../cli/src/devices.c:1464 ../cli/src/devices.c:1851
+#: ../cli/src/devices.c:2013
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Klaida: „%s“ nėra WiFi įrenginys "
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Klaida: „%s“ nėra WiFi įrenginys."
-#: ../cli/src/devices.c:1350
-#: ../cli/src/devices.c:1396
+#: ../cli/src/devices.c:1546 ../cli/src/devices.c:1592
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "Ryšys su UUID „%s“ sukurtas ir aktyvuotas įrenginyje „%s“\n"
-#: ../cli/src/devices.c:1355
+#: ../cli/src/devices.c:1551
#, c-format
-#| msgid "Error: Connection activation failed: %s."
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Klaida: nepavyko aktyvuoti ryšio: (%d) %s."
-#: ../cli/src/devices.c:1380
+#: ../cli/src/devices.c:1576
#, c-format
-#| msgid "Failed to read configuration: (%d) %s\n"
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "Klaida: nepavyko pridėti/aktyvuoti naujo ryšio: (%d) %s"
-#: ../cli/src/devices.c:1388
+#: ../cli/src/devices.c:1584
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "Klaida: nepavyko pridėti/aktyvuoti naujo ryšio: nežinoma klaida"
-#: ../cli/src/devices.c:1532
+#: ../cli/src/devices.c:1733
+msgid "SSID or BSSID: "
+msgstr "SSID arba BSSID: "
+
+#: ../cli/src/devices.c:1738
#, c-format
-#| msgid "Error: %s argument is missing."
msgid "Error: SSID or BSSID are missing."
msgstr "Klaida: trūksta SSID arba BSSID."
-#: ../cli/src/devices.c:1555
+#: ../cli/src/devices.c:1762
#, c-format
-#| msgid "Error: timeout value '%s' is not valid."
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "Klaida: bssid argumento reikšmė „%s“ nėra tinkamas BSSID."
-#: ../cli/src/devices.c:1579
+#: ../cli/src/devices.c:1786
#, c-format
-msgid "Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
-msgstr "Klaida: wep-key-type argumento vertė „%s“ netinkama, naudokite „key“ arba „phrase“."
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgstr ""
+"Klaida: wep-key-type argumento vertė „%s“ netinkama, naudokite „key“ arba "
+"„phrase“."
-#: ../cli/src/devices.c:1619
+#: ../cli/src/devices.c:1806
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Klaida: %s: %s."
+
+#: ../cli/src/devices.c:1821
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "Klaida: BSSID prisijungimui (%s) skiriasi nuo bssid argumento (%s)."
-#: ../cli/src/devices.c:1625
+#: ../cli/src/devices.c:1827
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "Klaida: parametras „%s“ nėra nei SSID, nei BSSID."
-#: ../cli/src/devices.c:1654
-#, c-format
-#| msgid "Error: Device '%s' is not a WiFi device."
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "Klaida: „%s“ nėra WiFi įrenginys."
-
-#: ../cli/src/devices.c:1656
+#: ../cli/src/devices.c:1853 ../cli/src/devices.c:2015
#, c-format
-#| msgid "Error: No suitable device found."
msgid "Error: No Wi-Fi device found."
msgstr "Klaida: nerastas Wi-Fi įrenginys."
-#: ../cli/src/devices.c:1674
+#: ../cli/src/devices.c:1871
#, c-format
-#| msgid "Error: NSP with name '%s' not found."
msgid "Error: No network with SSID '%s' found."
msgstr "Klaida: nerastas tinklas su SSID „%s“."
-#: ../cli/src/devices.c:1676
+#: ../cli/src/devices.c:1873
#, c-format
-#| msgid "Error: Access point with nsp '%s' not found."
msgid "Error: No access point with BSSID '%s' found."
msgstr "Klaida: nerastas prieigos taškas su BSSID „%s“."
-#: ../cli/src/devices.c:1774
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Klaida: netinkama „dev wifi“ komanda „%s“."
-
-#: ../cli/src/devices.c:1850
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Klaida: „dev wimax“: %s"
+#: ../cli/src/devices.c:1912
+msgid "Password: "
+msgstr "Slaptažodis: "
-#: ../cli/src/devices.c:1852
+#: ../cli/src/devices.c:2041
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Klaida: „dev wimax“: %s; leidžiami laukai: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Klaida: netinkama „device wifi“ komanda „%s“."
-#: ../cli/src/devices.c:1875
+#: ../cli/src/devices.c:2088
msgid "WiMAX NSP list"
msgstr "WiMAX NSP sąrašas"
-#: ../cli/src/devices.c:1912
+#: ../cli/src/devices.c:2126
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Klaida: „device wimax“: %s"
+
+#: ../cli/src/devices.c:2128
+#, c-format
+msgid "Error: 'device wimax': %s; allowed fields: %s"
+msgstr "Klaida: „device wimax“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/devices.c:2183
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Klaida: NSP pavadintas „%s“ nerastas."
-#: ../cli/src/devices.c:1923
+#: ../cli/src/devices.c:2196
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Klaida: „%s“ nėra WiMAX įrenginys "
-#: ../cli/src/devices.c:1954
+#: ../cli/src/devices.c:2234
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Klaida: prieigos su nsp „%s“ taškas nerastas."
-#: ../cli/src/devices.c:1981
+#: ../cli/src/devices.c:2266
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Klaida: netinkama „dev wimax“ komanda „%s“."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Klaida: netinkama „device wimax“ komanda „%s“."
-#: ../cli/src/devices.c:2031
+#: ../cli/src/devices.c:2317
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Klaida: netinkama „dev“ komanda „%s“."
@@ -1560,265 +3114,305 @@ msgstr "VERSIJA"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "TINKLAS-ĮJUNGTAS"
+#, fuzzy
+#| msgid "CONNECTION"
+msgid "CONNECTIVITY"
+msgstr "PRISIJUNGIMAS"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-APARATINĖ-ĮRANGA"
+msgid "NETWORKING"
+msgstr "NETWORKING"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-APARATINĖ-ĮRANGA"
+msgid "WIFI"
+msgstr "WIFI"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-APARATINĖ-ĮRANGA"
+msgid "WWAN"
+msgstr "WWAN"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 9
+#: ../cli/src/network-manager.c:47
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
-#| msgid "VERSION"
+#: ../cli/src/network-manager.c:69
msgid "PERMISSION"
msgstr "LEIDIMAS"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:70
msgid "VALUE"
msgstr "VERTÄ–"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:78
+msgid "LEVEL"
+msgstr "LEVEL"
+
+#. 0
+#: ../cli/src/network-manager.c:79
+msgid "DOMAINS"
+msgstr "DOMAINS"
+
+#: ../cli/src/network-manager.c:94
#, c-format
+msgid ""
+"Usage: nmcli general { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | permissions | logging }\n"
+"\n"
+" status\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+msgstr ""
+"Naudojimas: nmcli general { KOMANDA | help }\n"
+"\n"
+" KOMANDA := { status | permissions | logging }\n"
+"\n"
+" status\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <žurnalo lygis>] [domains <žurnalo domenai>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:106
+#, fuzzy, c-format
#| msgid ""
-#| "Usage: nmcli nm { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
-#| "\n"
-#| " COMMAND := { status | enable | sleep | wifi | wwan }\n"
+#| "Usage: nmcli networking { COMMAND | help }\n"
#| "\n"
-#| " status\n"
-#| " enable [true|false]\n"
-#| " sleep [true|false]\n"
-#| " wifi [on|off]\n"
-#| " wwan [on|off]\n"
-#| " wimax [on|off]\n"
+#| " COMMAND := { [ on | off ] }\n"
#| "\n"
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli networking { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | wimax }\n"
+" COMMAND := { on | off | connectivity }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+" on\n"
"\n"
-" status\n"
-" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
"\n"
msgstr ""
-"Naudojimas: nmcli nm { KOMANDA | help }\n"
+"Naudojimas: nmcli networking { KOMANDA | help }\n"
"\n"
-" KOMANDA := { status | permissions | enable | sleep | wifi | wwan | wimax }\n"
+" KOMANDA := { [ on | off ] }\n"
+"\n"
+
+#: ../cli/src/network-manager.c:118
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
"\n"
-" KOMANDA := { status | permissions | enable | sleep | wifi | wwan }\n"
+" COMMAND := { all | wifi | wwan | wimax }\n"
"\n"
-" status\n"
-" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+" COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"Naudojimas: nmcli radio { KOMANDA | help }\n"
+"\n"
+" KOMANDA := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+" KOMANDA := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:141
msgid "asleep"
msgstr "miegantis"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:143
msgid "connecting"
msgstr "jungiamasi"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:145
msgid "connected (local only)"
msgstr "prisijungta (vietinis)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:147
msgid "connected (site only)"
msgstr "prisijungta (tik puslapyje)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:151
msgid "disconnecting"
msgstr "atsijungiama"
-#: ../cli/src/network-manager.c:158
+#: ../cli/src/network-manager.c:167
+msgid "portal"
+msgstr ""
+
+#: ../cli/src/network-manager.c:169
+msgid "limited"
+msgstr ""
+
+#: ../cli/src/network-manager.c:171
+msgid "full"
+msgstr ""
+
+#: ../cli/src/network-manager.c:210 ../cli/src/network-manager.c:508
#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Klaida: „nm status“: %s"
+msgid "Error: %s"
+msgstr "Klaida: %s"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:212
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Klaida: „nm status“: %s; leidžiami laukai: %s"
+msgid "Error: %s (allowed fields: %s)"
+msgstr "Klaida: %s (leidžiami laukai: %s)"
-#. create NMClient
-#: ../cli/src/network-manager.c:173
-#: ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175
-#: ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177
-#: ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180
-#: ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484
-#: ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:227 ../cli/src/network-manager.c:228
+#: ../cli/src/network-manager.c:229 ../cli/src/network-manager.c:230
+#: ../cli/src/network-manager.c:231 ../cli/src/network-manager.c:233
+#: ../cli/src/network-manager.c:234
msgid "enabled"
msgstr "įjungta"
-#: ../cli/src/network-manager.c:173
-#: ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175
-#: ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177
-#: ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180
-#: ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484
-#: ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:227 ../cli/src/network-manager.c:228
+#: ../cli/src/network-manager.c:229 ../cli/src/network-manager.c:230
+#: ../cli/src/network-manager.c:231 ../cli/src/network-manager.c:233
+#: ../cli/src/network-manager.c:234
msgid "disabled"
msgstr "išjungta"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:246
msgid "NetworkManager status"
msgstr "NetworkManager būsena"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:251
msgid "running"
msgstr "veikia"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:251
msgid "not running"
msgstr "neveikia"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:324
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
+#: ../cli/src/network-manager.c:354
#, c-format
-#| msgid "Error: 'nm status': %s"
-msgid "Error: 'nm permissions': %s"
-msgstr "Klaida: „nm permissions“: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Klaida: „general permissions“: %s"
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:356
#, c-format
-#| msgid "Error: 'nm status': %s; allowed fields: %s"
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "Klaida: „nm permissions“: %s; leidžiami laukai: %s"
+msgid "Error: 'general permissions': %s; allowed fields: %s"
+msgstr "Klaida: „general permissions“: %s; leidžiami laukai: %s"
-#: ../cli/src/network-manager.c:324
-#| msgid "NetworkManager status"
+#: ../cli/src/network-manager.c:371
msgid "NetworkManager permissions"
msgstr "NetworkManager leidimai"
-#: ../cli/src/network-manager.c:350
-#: ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:413
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Klaida: nepavyko prisijungti prie sistemos magistralÄ—s: %s"
+msgid "Error: 'general logging': %s"
+msgstr "Klaida: „general logging“: %s"
-#: ../cli/src/network-manager.c:361
+#: ../cli/src/network-manager.c:415
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Klaida: nepavyko sukurti D-Bus tarpinio objekto."
+msgid "Error: 'general logging': %s; allowed fields: %s"
+msgstr "Klaida: „general logging“: %s; leidžiami laukai: %s"
-#: ../cli/src/network-manager.c:367
-#, c-format
-msgid "Error in sleep: %s"
-msgstr "Klaida užmigdant: %s"
-
-#: ../cli/src/network-manager.c:416
-#: ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509
-#: ../cli/src/network-manager.c:548
-#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "Klaida: „--fields“ reikÅ¡mÄ— „%s“ Äia netinkama; leidžiami laukai: %s"
+#: ../cli/src/network-manager.c:431
+msgid "NetworkManager logging"
+msgstr "NetworkManager žurnalai"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "Tinklas įjungtas"
+#: ../cli/src/network-manager.c:506
+#, fuzzy, c-format
+#| msgid "Error: 'general logging': %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "Klaida: „general logging“: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:519
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "Klaida: netinkamas „enable“ parametras: „%s“; naudokite „true“ arba „false“."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Klaida: „general“ komanda „%s“ yra netinkama."
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:538 ../cli/src/network-manager.c:576
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Klaida: „NetworkManager“ nepateikia informacijos apie miego būseną."
+msgid "Error: '--fields' value '%s' is not valid here (allowed fields: %s)"
+msgstr "Klaida: „--fields“ vertÄ— „%s“ Äia netinkama (leidžiami laukai: %s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:562
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "Klaida: netinkamas „sleep“ parametras: „%s“; naudokite „true“ arba „false“."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Klaida: netinkamas „%s“ argumentas: „%s“ (naudokite on/off)."
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi įjungtas"
+#: ../cli/src/network-manager.c:585
+#, fuzzy
+#| msgid "\rConnecting"
+msgid "Connectivity"
+msgstr "\rJungiamasi"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Klaida: netinkamas „wifi“ parametras: „%s“."
+#: ../cli/src/network-manager.c:597
+msgid "Networking"
+msgstr "Tinklai"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN įjungta"
+#: ../cli/src/network-manager.c:617
+#, fuzzy, c-format
+#| msgid "Error: 'networking' command '%s' is not valid."
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Klaida: netinkama „networking“ komanda „%s“."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:626
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Klaida: netinkamas „wwan“ parametras: „%s“."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Klaida: netinkama „networking“ komanda „%s“."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX įjungtas"
+#: ../cli/src/network-manager.c:651 ../cli/src/network-manager.c:664
+msgid "Radio switches"
+msgstr "Radijo jungikliai"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Klaida: netinkamas „wimax“ parametras: „%s“."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:678
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi radijo jungiklis"
-#: ../cli/src/network-manager.c:585
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:690
+msgid "WWAN radio switch"
+msgstr "WWAN radijo jungiklis"
+
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:703
+msgid "WiMAX radio switch"
+msgstr "WiMAX radijo jungiklis"
+
+#: ../cli/src/network-manager.c:718
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Klaida: netinkama „nm“ komanda „%s“."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Klaida: netinkama „radio“ komanda „%s“."
-#: ../cli/src/nmcli.c:64
+#: ../cli/src/nmcli.c:76
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1828,263 +3422,717 @@ msgid ""
" -p[retty] pretty output\n"
" -m[ode] tabular|multiline output mode\n"
" -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-" -e[scape] yes|no escape columns separators in values\n"
-" -n[ocheck] don't check nmcli and NetworkManager versions\n"
+" -e[scape] yes|no escape columns separators in "
+"values\n"
+" -n[ocheck] don't check nmcli and "
+"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
-"Naudojimas: %s [PARINKTYS] OBJEKTAS { KOMANDA | help }\n"
+"Naudojimas: %s [PARAMETRAI] OBJEKTAS { KOMANDA | help }\n"
"\n"
-"PARINKTYS\n"
+"PARAMETRAI\n"
" -t[erse] trumpa išvestis\n"
" -p[retty] graži išvestis\n"
-" -m[ode] tabular|multiline išvedimo veiksena\n"
-" -f[fields] <field1,field2,...>|all|common nurodyti išvedamus laukus\n"
-" -e[scape] yes|no atlikti stulpelių skirtukų kaitą\n"
-" -n[ocheck] netikrinti nmcli ir NetworkManager versijų\n"
-" -v[ersion] rodyti programos versijÄ…\n"
-" -h[elp] išvesti šią pagalbą\n"
+" -m[ode] tabular|multiline išvesties veiksena\n"
+" -f[ields] <field1,field2,...>|all|common nurodyti išvedamus laukus\n"
+" -e[scape] yes|no keisti stulpelių skirtukus "
+"vertÄ—se\n"
+" -n[ocheck] netikrinti nmcli ir "
+"NetworkManager versijų\n"
+" -a[sk] prašyti trūkstamų parametrų\n"
+" -w[ait] <seconds> nustatyti laiko ribą veiksmų "
+"užbaigimui\n"
+" -v[ersion] parodyti programos versijÄ…\n"
+" -h[elp] atspausdinti Å¡iÄ… pagalbÄ…\n"
"\n"
"OBJEKTAS\n"
-" nm NetworkManager būsena\n"
-" con NetworkManager ryšiai\n"
-" dev NetworkManager valdomi įrenginiai\n"
+" g[eneral] NetworkManager bendra būsena ir veiksmai\n"
+" n[etworking] bendras tinklų valdymas\n"
+" r[adio] NetworkManager radijo jungikliai\n"
+" c[onnection] NetworkManager ryšiai\n"
+" d[evice] NetworkManager valdomi įrenginiai\n"
"\n"
-#: ../cli/src/nmcli.c:109
+#: ../cli/src/nmcli.c:130
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Klaida: nežinomas objektas „%s“, bandykite „nmcli help“."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:160
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Klaida: parinktis „--terse“ nurodyta antrą kartą."
-#: ../cli/src/nmcli.c:144
+#: ../cli/src/nmcli.c:165
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
-msgstr "Klaida: parinktis „--terse“ yra tarpusavyje nesuderinama su „--pretty“."
+msgstr ""
+"Klaida: parinktis „--terse“ yra tarpusavyje nesuderinama su „--pretty“."
-#: ../cli/src/nmcli.c:152
+#: ../cli/src/nmcli.c:173
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Klaida: parinktis „--pretty“ nurodyta antrą kartą."
-#: ../cli/src/nmcli.c:157
+#: ../cli/src/nmcli.c:178
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
-msgstr "Klaida: parinktis „--pretty“ yra tarpusavyje nesuderinama su „--terse“."
+msgstr ""
+"Klaida: parinktis „--pretty“ yra tarpusavyje nesuderinama su „--terse“."
-#: ../cli/src/nmcli.c:167
-#: ../cli/src/nmcli.c:183
+#: ../cli/src/nmcli.c:188 ../cli/src/nmcli.c:204 ../cli/src/nmcli.c:233
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Klaida: trÅ«ksta argumento parinkÄiai „%s“."
-#: ../cli/src/nmcli.c:176
-#: ../cli/src/nmcli.c:192
+#: ../cli/src/nmcli.c:197 ../cli/src/nmcli.c:213
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Klaida: „%s“ yra netinkamas argumentas parinkÄiai „%s“."
-#: ../cli/src/nmcli.c:199
+#: ../cli/src/nmcli.c:220
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Klaida: trūksta laukų parinktims „%s“."
-#: ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:238
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Klaida: „%s“ yra netinkama leiko riba parametrui „%s“."
+
+#: ../cli/src/nmcli.c:245
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli įrankis, versija %s\n"
-#: ../cli/src/nmcli.c:213
+#: ../cli/src/nmcli.c:251
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Klaida: nežinoma parinktis „%s“, bandykite „nmcli -help“."
-#: ../cli/src/nmcli.c:232
+#: ../cli/src/nmcli.c:270
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "Gautas signalas %d, išjungiama..."
-#: ../cli/src/nmcli.c:257
+#: ../cli/src/nmcli.c:295
msgid "Error: Could not create NMClient object."
msgstr "Klaida: nepavyko sukurti NMClient objekto."
-#: ../cli/src/nmcli.c:273
+#: ../cli/src/nmcli.c:311
msgid "Success"
msgstr "Pavyko"
-#: ../cli/src/settings.c:519
+#: ../cli/src/settings.c:629
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (šešioliktainis ascii raktas)"
-#: ../cli/src/settings.c:521
+#: ../cli/src/settings.c:631
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128 bitų slaptažodis)"
-#: ../cli/src/settings.c:524
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:634 ../cli/src/settings.c:762
#, c-format
msgid "%d (unknown)"
msgstr "%d (nežinoma)"
-#: ../cli/src/settings.c:550
+#: ../cli/src/settings.c:660
msgid "0 (unknown)"
msgstr "0 (nežinoma)"
-#: ../cli/src/settings.c:556
+#: ../cli/src/settings.c:666
msgid "any, "
msgstr "bet koks, "
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:668
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:560
+#: ../cli/src/settings.c:670
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:562
+#: ../cli/src/settings.c:672
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:674
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:676
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:678
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:680
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:682
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:684
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:686
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:688
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:690
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:692
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:600
+#: ../cli/src/settings.c:710
msgid "0 (NONE)"
msgstr "0 (JOKS)"
-#: ../cli/src/settings.c:606
+#: ../cli/src/settings.c:716
msgid "REORDER_HEADERS, "
msgstr "PERRIKIUOTI_ANTRAÅ TES, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:718
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:610
+#: ../cli/src/settings.c:720
msgid "LOOSE_BINDING, "
msgstr "PRARASTI_SUSIEJIMÄ„, "
-#: ../cli/src/settings.c:646
+#: ../cli/src/settings.c:756
#, c-format
-#| msgid "disabled"
msgid "%d (disabled)"
msgstr "%d (išjungta)"
-#: ../cli/src/settings.c:648
+#: ../cli/src/settings.c:758
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (įjungta, pageidaujamas viešas IP)"
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:760
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (įjungta, pageidaujamas laikinas IP)"
-#: ../cli/src/settings.c:768
-#: ../cli/src/settings.c:964
-#: ../cli/src/settings.c:1673
+#: ../cli/src/settings.c:772
+msgid "0 (none)"
+msgstr "0 (nÄ—ra)"
+
+#: ../cli/src/settings.c:778
+msgid "agent-owned, "
+msgstr "agent-owned, "
+
+#: ../cli/src/settings.c:780
+msgid "not saved, "
+msgstr "neįrašyta, "
+
+#: ../cli/src/settings.c:782
+msgid "not required, "
+msgstr "nebūtina, "
+
+#: ../cli/src/settings.c:1108 ../cli/src/settings.c:1291
+#: ../cli/src/settings.c:1331
msgid "auto"
msgstr "automatinis"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1121
+msgid "default"
+msgstr "numatyta"
+
+#: ../cli/src/settings.c:1450
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Ar norite taip pat nustatyti „%s“ į „%s“? [yes]: "
+
+#: ../cli/src/settings.c:1452
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Ar norite taip pat išvalyti „%s“? [yes]: "
+
+#: ../cli/src/settings.c:1650 ../cli/src/settings.c:1905
+#: ../cli/src/settings.c:3389
+#, c-format
+msgid "'%s' is not valid"
+msgstr "„%s“ yra netinkama"
+
+#: ../cli/src/settings.c:1673
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "„%d“ yra netinkama; naudokite <%d-%d>"
+
+#: ../cli/src/settings.c:1695
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "„%u“ nėra tinkama; naudokite <%d-%d>"
+
+#: ../cli/src/settings.c:1761
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "„%s“ yra netinkama; naudokite <parametras>=<vertė>"
+
+#: ../cli/src/settings.c:1795
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "indeksas „%s“ yra netinkamas"
+
+#: ../cli/src/settings.c:1800
+msgid "no item to remove"
+msgstr "nÄ—ra Å¡alinamo elemento"
+
+#: ../cli/src/settings.c:1804
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "indeksas „%d“ nėra rėžiuose <0-%d>"
+
+#: ../cli/src/settings.c:1819
+#, c-format
+msgid "invalid option '%s'"
+msgstr "netinkamas parametras „%s“"
+
+#: ../cli/src/settings.c:1821
+msgid "missing option"
+msgstr "trūksta parametro"
+
+#: ../cli/src/settings.c:1851 ../cli/src/settings.c:1871
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "„%s“ yra netinkamas numeris (arba už ribų)"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "„%s“ nėra tinkamas laidinio tinklo MAC"
+
+#: ../cli/src/settings.c:1940 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:760
+#: ../libnm-util/nm-setting-vlan.c:478
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "„%s“ nėra tinkamas sąsajos pavadinimas"
+
+#: ../cli/src/settings.c:1958 ../cli/src/settings.c:2956
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "„%s“ nÄ—ra skaiÄius"
+
+#: ../cli/src/settings.c:2010
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "„%s“ nėra tinkamas šešioliktainis simbolis"
+
+#: ../cli/src/settings.c:2040
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "„%s“ nėra tinkamas MAC"
+
+#: ../cli/src/settings.c:2067 ../libnm-util/nm-setting-connection.c:723
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "„%s“ nėra tinkamas UUID"
+
+#: ../cli/src/settings.c:2132
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,... \n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"Įveskite naudotojo leidimų sąrašą. Tai yra naudotojų vardų sąrašas, "
+"formatuotas taip:\n"
+" [user:]<naudotojo vardas 1>, [user:]<naudotojo vardas 2>,...\n"
+"Elementai gali būti skiriami kableliais arba tarpais.\n"
+"\n"
+"Pavyzdys: jonas petras antanas\n"
+
+#: ../cli/src/settings.c:2147
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "„%s“ nėra tinkamas pagrindinis ryšys; naudokite ifname arba ryšio UUID"
+
+#: ../cli/src/settings.c:2268
+msgid "private key password not provided"
+msgstr "nepateiktas asmeninio rakto slaptažodis"
+
+#: ../cli/src/settings.c:2328
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"Įveskite kelią iki asmeninio rakto bei rakto slaptažodį (jei dar "
+"nenustatytas):\n"
+" <failo kelias> [<slaptažodis>]\n"
+"Pavyzdys: /home/vardenis/jara-priv-key Dardanelai\n"
+
+#: ../cli/src/settings.c:2398
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"Ä®veskite baitus kaip Å¡eÅ¡ioliktainių verÄių sÄ…raÅ¡Ä….\n"
+"Galimi du formatai:\n"
+"(a) šešioliktainių skaitmenų eilutė, kurie kiekviena skaitmenų pora reiškia "
+"vienÄ… baitÄ…\n"
+"(b) tarpais skiriamas baitų sąrašas, parašytas kaip šešioliktianiai "
+"skaitmenys (su nebūtinais 0x/0X priešdėliu bei 0 pabaigoje).\n"
+"\n"
+"Pavyzdžiai: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2501
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"Įveskite susiejamų parametrų sąrašą, suformatuotą taip:\n"
+" options = <vertÄ—>, parametras = <vertÄ—>,..\n"
+"Galimi parametrai yra: %s\n"
+"„mode“ gali bÅ«ti pateiktas kaip pavadinimas arba skaiÄius:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Pavyzdys: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2542
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "„%s“ nėra tinkamas InfiniBand MAC"
+
+#: ../cli/src/settings.c:2576
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "„%s“ nėra tinkamas IBoIP P_Key"
+
+#: ../cli/src/settings.c:2635
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"Įveskite DNS serverių IPv4 adresų sąrašą.\n"
+"\n"
+"Pavyzdys: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2681 ../cli/src/settings.c:2867
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "„%s“ nėra tinkamas (naudokite ip[/priešdėlis] [šliuzas])"
+
+#: ../cli/src/settings.c:2707
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"Įveskite IPv4 adresų sąrašą, suformatuotą taip:\n"
+" ip[/priešdėlis] [šliuzas], ip[/priešdėlis] [šliuzas],...\n"
+"Trūkstamas priešdėlis laikomas priešdėlius 32.\n"
+"\n"
+"Pavyzdys: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2729
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr ""
+"„%s“ nėra tinkamas (naudokite ip/[priešdėlis] kitas-mazgas [matavimas])"
+
+#: ../cli/src/settings.c:2755
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"Įveskite IPv4 kelių sąršą, suformatuotą taip:\n"
+" ip/[priešdėlis] kitas-mazgas [metavimas],...\n"
+"Trūkstamas priešdėlis laikomas lygiu 32.\n"
+"Trūkstamas matavimas laikoma lygiu 0.\n"
+"\n"
+"Pavyzdys: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:2815
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no usptream network. In "
+"all other IPv6 configuration methods methods, these DNS servers are used as "
+"the only DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"Įveskite DNS serverių IPv6 adresų sąrašą. Jei IPv6 konfigūracijos metodas "
+"yra „auto“, šie DNS serveriai yra pridedami prie automatinės konfigūracijos "
+"grąžintų (jei tokie yra). DNS serveriai negali būti naudojami su „shared“ "
+"arba „link-local“ IPv6 konfigūracijos metodais, kadangi nėra pagrindinio "
+"tinklo. Visuose kituose IPv6 konfigūracijos metoduose šie DNS serveriai yra "
+"naudojami kaip vieninteliai DNS serveriai šyšiui.\n"
+"\n"
+"Pavyzdys: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:2893
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"Įveskite IPv6 adresų sąrašą, suformatuotą taip:\n"
+" ip[/priešdėlis] [šliuzas], ip[/priešdėlis] [šliuzas],...\n"
+"Trūkstamas priešdėlis laikomas lygiu 128.\n"
+"\n"
+"Pavyzdys: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:2915
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"„%s“ yra netinkamas (naudokite <paskirties IP>/priešdėlis <kito mazgo IP> "
+"[matavimas])"
+
+#: ../cli/src/settings.c:2941
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"Įveskite IPv6 kelių sąrašą, suformatuotą taip:\n"
+" ip/[priešdėlis] kitas-mazgas [matavimas],...\n"
+"Trūkstamas priešdėlis laikomas lygiu 128.\n"
+"Trūkstamas matavimas laikomas lygiu 0.\n"
+"\n"
+"Pavyzdys: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:2963
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "„%s“ yra netinkamas; naudokite 0,1 arba 2"
+
+#: ../cli/src/settings.c:2980
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "„%s“ yra netinkamas kanalas; naudokite <1-13>"
+
+#: ../cli/src/settings.c:3001
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "„%s“ yra netinkamas; naudokite [e, o, n]"
+
+#: ../cli/src/settings.c:3041
+msgid "no priority to remove"
+msgstr "nÄ—ra Å¡alinamo prioriteto"
+
+#: ../cli/src/settings.c:3045
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "indeksas „%d“ yra už ribų <0-%d>"
+
+#: ../cli/src/settings.c:3160
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "„%s“ yra netinkamas; turi būti pateiktos 3 eilutės"
+
+#: ../cli/src/settings.c:3179
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"Įveskite trijų kanalų sąrašą (skiriama kableliais arba tarpais).\n"
+"\n"
+"Pavyzdys: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3229
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+msgstr ""
+"Įveskite S/390 parametrų sąrašą, suformatuotą taip:\n"
+" parametras = <vertÄ—>, parametras = <vertÄ—>,...\n"
+"Galimos vertÄ—s yra: %s\n"
+
+#: ../cli/src/settings.c:3275
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "„%s“ nėra tinkamas kanalas"
+
+#: ../cli/src/settings.c:3281
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "„%ld“ nėra tinkamas kanalas"
+
+#: ../cli/src/settings.c:3384 ../cli/src/settings.c:3387
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "Spėjama, kad WEP raktas yra „%s“\n"
+
+#: ../cli/src/settings.c:3427
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "„%s“ nėra tinkamas PSK"
+
+#: ../cli/src/settings.c:4730
+msgid "don't know how to get the property value"
+msgstr "nežinoma, kaip gauti savybės vertę"
+
+#: ../cli/src/settings.c:4760 ../cli/src/settings.c:4800
+msgid "the property can't be changed"
+msgstr "savybÄ—s negalima keisti"
+
+#: ../cli/src/settings.c:4904
+msgid "[NM property description]"
+msgstr "[NM savybės aprašymas]"
+
+#: ../cli/src/settings.c:4910
+msgid "[nmcli specific description]"
+msgstr "[nmcli specifinis aprašymas]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Klaida: „%s“ argumentui būtina vertė."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Klaida: tikėtasi argumento „%s“, bet pateiktas „%s“."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Klaida: netikėtas argumentas „%s“"
+
+#: ../cli/src/utils.c:189
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "Klaida konvertuojant IP4 adresą „0x%X“ į tekstinę formą"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:217
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "Klaida konvertuojant IP6 adresą „%s“ į tekstinę formą"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "„%s“ yra netinkamas; naudokite [%s] arba [%s]"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "„%s“ yra nevienareikšmis (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr ""
+
+#: ../cli/src/utils.c:640
#, c-format
msgid "field '%s' has to be alone"
msgstr "laukas „%s“ turi būti vienintelis"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:643
#, c-format
msgid "invalid field '%s'"
msgstr "netinkamas laukas „%s“"
-#: ../cli/src/utils.c:254
-#, c-format
+#: ../cli/src/utils.c:662
msgid "Option '--terse' requires specifying '--fields'"
msgstr "Parinktis „--terse“ reikalauja nurodyti „--fields“"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:666
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "Parinktis „--terse“ reikalauja konkreÄių parinkties „--fields“ reikÅ¡mių, ne „%s“"
-
-#: ../cli/src/utils.c:468
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr "Klaida: nepavyko sukurti D-Bus tarpinio objekto skirto org.freedesktop.DBus"
-
-#: ../cli/src/utils.c:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Klaida: NameHasOwner užklausa nepavyko: %s"
+msgstr ""
+"Parinktis „--terse“ reikalauja konkreÄių parinkties „--fields“ reikÅ¡mių, ne "
+"„%s“"
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:980
#, c-format
-msgid "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --nocheck to suppress the warning.\n"
-msgstr "Įspėjimas: nmcli (%s) ir NetworkManager (%s) versijos neatitinka. Naudokite --nocheck įspėjimui nerodyti.\n"
+msgid ""
+"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
+"nocheck to suppress the warning.\n"
+msgstr ""
+"Įspėjimas: nmcli (%s) ir NetworkManager (%s) versijos neatitinka. Naudokite "
+"--nocheck įspėjimui nerodyti.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:989
#, c-format
-msgid "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force execution using --nocheck, but the results are unpredictable."
-msgstr "Klaida: nmcli (%s) ir NetworkManager (%s) versijos neatitinka. Priverskite vykdymÄ… naudodami --nocheck, bet rezultatai yra nenuspÄ—jami."
+msgid ""
+"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
+"execution using --nocheck, but the results are unpredictable."
+msgstr ""
+"Klaida: nmcli (%s) ir NetworkManager (%s) versijos neatitinka. Priverskite "
+"vykdymÄ… naudodami --nocheck, bet rezultatai yra nenuspÄ—jami."
#: ../libnm-util/crypto.c:133
#, c-format
@@ -2096,119 +4144,89 @@ msgstr "PEM rakto faile nėra pabaigos gairės „%s“."
msgid "Doesn't look like a PEM private key file."
msgstr "Nepanašu į PEM asmeninio rakto failą."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Nepakanka atminties PEM failo duomenų saugojimui."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Netinkamai suformuotas PEM failas: Proc-Type buvo ne pirma gairÄ—."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Netinkamai suformuotas PEM failas: nežinoma Proc-Type gairė „%s“."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Netinkamai suformuotas PEM failas: DEK-Info buvo ne antra gairÄ—."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Netinkamai suformuotas PEM failas: DEK-Info gairÄ—je nerasta IV."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
-msgstr "Netinkamai suformuotas PEM failas: DEK-Info gairÄ—je netinkamas IV formatas."
+msgstr ""
+"Netinkamai suformuotas PEM failas: DEK-Info gairÄ—je netinkamas IV formatas."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
-msgstr "Netinkamai suformuotas PEM failas: nežinomas asmeninio rakto šifras „%s“."
+msgstr ""
+"Netinkamai suformuotas PEM failas: nežinomas asmeninio rakto šifras „%s“."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "Nepavyko iškoduoti asmeninio rakto."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Nepavyko rasti laukiamos PKCS#8 pradžios žymos."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Nepavyko rasti laukiamos PKCS#8 pabaigos žymos „%s“."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "Nepakanka atminties išsaugoti privataus rakto duomenis."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "Nepavyko iššifruoti PKCS#8 asmeninio rakto."
-#: ../libnm-util/crypto.c:339
-#: ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Nepakanka atminties liudijimo duomenų saugojimui."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ilgis turi bÅ«ti lyginis baitų skaiÄius."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Nepakanka atminties IV saugojimui."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV yra ne šešioliktainių skaitmenų."
-#: ../libnm-util/crypto.c:423
-#: ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265
-#: ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Asmeninio rakto šifras „%s“ nežinomas."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Nepakanka atminties iššifruoti asmeninį raktą."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Nepakanka atminties iššifruoto asmeninio rakto saugojimui."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "Nepavyko nustatyti asmeninio rakto tipo."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM liudijime nėra pradžios gairės „%s“."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM liudijime nėra pabaigos gairės „%s“."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "Nepavyko iškoduoti liudijimo."
@@ -2227,101 +4245,87 @@ msgstr "Nepavyko inicijuoti MD5 posistemÄ—s: %s / %s."
msgid "Invalid IV length (must be at least %zd)."
msgstr "Netinkamas IV ilgis (turi būti bent %zd)."
-#: ../libnm-util/crypto_gnutls.c:164
-#: ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Nepakanka atminties iššifruoto rakto buferiui."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Nepavyko inicijuoti iššifravimo šifro konteksto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "Nepavyko iššifravimui nustatyti simetriško rakto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Nepavyko iššifravimui nustatyti IV: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Nepavyko iššifruoti asmeninio rakto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209
-#: ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "Nepavyko iššifruoti asmeninio rakto: netikėtas užpildo ilgis."
-#: ../libnm-util/crypto_gnutls.c:220
-#: ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Nepavyko iššifruoti asmeninio rakto."
-#: ../libnm-util/crypto_gnutls.c:285
-#: ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Nepavyko išskirti atminties šifravimui."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Nepavyko inicijuoti Å¡ifravimo Å¡ifro konteksto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Nepavyko šifravimui nustatyti simetriško rakto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Nepavyko Å¡ifravimui nustatyti IV: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Nepavyko šifruoti duomenų: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Klaida inicijuojant liudijimo duomenis: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Nepavyko iškoduoti liudijimo: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Nepavyko inicializuoti PKCS#12 dekoderio: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Nepavyko iškoduoti PKCS#12 failo: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Nepavyko patvirtinti PKCS#12 failo: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "Nepavyko inicializuoti PKCS#8 dekoderio: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Nepavyko iškoduoti PKCS#8 failo: %s"
@@ -2341,337 +4345,628 @@ msgstr "Nepavyko inicijuoti MD5 konteksto: %d."
msgid "Invalid IV length (must be at least %d)."
msgstr "Netinkamas IV ilgis (turi būti bent %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Nepavyko inicijuoti iššifravimo šifro lizdo."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Nepavyko iššifravimui nustatyti simetriško rakto."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Nepavyko iššifravimui nustatyti IV."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Nepavyko inicijuoti iššifravimo konteksto."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Nepavyko iššifruoti asmeninio rakto: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "Nepavyko iššifruoti asmeninio rakto: iššifruoti duomenys per dideli."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Nepavyko baigti asmeninio rakto iššifravimo: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Nepavyko inicijuoti Å¡ifravimo Å¡ifro lizdo."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Nepavyko šifravimui nustatyti simetriško rakto."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Nepavyko Å¡ifravimui nustatyti IV."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Nepavyko inicijuoti Å¡ifravimo konteksto."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Nepavyko Å¡ifruoti: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Netikėtas duomenų kiekis po šifravimo."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Nepavyko iškoduoti liudijimo: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Nepavyko konvertuoti slaptažodžio į UCS-2: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Nepavyko inicializuoti PKCS#12 dekoderio: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Nepavyko iškoduoti PKCS#12 failo: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Nepavyko patvirtinti PKCS#12 failo: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "Nepavyko sugeneruoti atsitiktinių duomenų."
-#: ../libnm-util/nm-utils.c:2040
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2538
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bluetooth.c:171
+#: ../libnm-util/nm-setting-bond.c:378 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:700
+#: ../libnm-util/nm-setting-connection.c:716
+#: ../libnm-util/nm-setting-connection.c:771
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:128
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:406 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#: ../libnm-util/nm-setting-wireless.c:700
+msgid "property is missing"
+msgstr "trūksta savybės"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:707
+#: ../libnm-util/nm-setting-connection.c:778
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:415 ../libnm-util/nm-setting-vpn.c:425
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:834
+#: ../libnm-util/nm-setting-wireless-security.c:842
+#: ../libnm-util/nm-setting-wireless-security.c:866
+msgid "property is empty"
+msgstr "savybÄ— yra tuÅ¡Äia"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 turi atitikti „%s“ savybę"
+
+#: ../libnm-util/nm-setting-8021x.c:2513 ../libnm-util/nm-setting-8021x.c:2547
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:387
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:156
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:894
+#: ../libnm-util/nm-setting-wireless-security.c:902
+#: ../libnm-util/nm-setting-wireless-security.c:910
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:945
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:991
+#: ../libnm-util/nm-setting-wireless.c:760
+#: ../libnm-util/nm-setting-wireless.c:769
+#: ../libnm-util/nm-setting-wireless.c:778
+msgid "property is invalid"
+msgstr "savybÄ— netinkama"
+
+#: ../libnm-util/nm-setting-8021x.c:2572 ../libnm-util/nm-setting-8021x.c:2582
+#: ../libnm-util/nm-setting-8021x.c:2592 ../libnm-util/nm-setting-8021x.c:2602
+#: ../libnm-util/nm-setting-8021x.c:2612 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:179
+#: ../libnm-util/nm-setting-wireless-security.c:813
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "„%s“ yra netinkama vertė savybei"
+
+#: ../libnm-util/nm-setting-bluetooth.c:201
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "reikalauja nustatymo „%s“ arba „%s“"
+
+#: ../libnm-util/nm-setting-bond.c:401
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "netinkamas parametras „%s“ arba jo vertė „%s“"
+
+#: ../libnm-util/nm-setting-bond.c:420
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "gali būti nustatyta tik viena iš „%s“ ir „%s“"
+
+#: ../libnm-util/nm-setting-bond.c:431
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "trūksta būtino parametro „%s“"
+
+#: ../libnm-util/nm-setting-bond.c:440
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "„%s“ yra netinkama „%s“ vertė"
+
+#: ../libnm-util/nm-setting-bond.c:453
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "„%s=%s“ nesuderinama su „%s > 0“"
+
+#: ../libnm-util/nm-setting-bond.c:464
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "„%s=%s“ yra netinkama „%s“ konfigūracija"
+
+#: ../libnm-util/nm-setting-bond.c:477 ../libnm-util/nm-setting-bond.c:486
+#: ../libnm-util/nm-setting-bond.c:506 ../libnm-util/nm-setting-bond.c:542
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "„%s“ parametras reikalauja nustatyti parametrą „%s“"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "'%s' option is empty"
+msgstr "„%s“ parametras yra tuÅ¡Äias"
+
+#: ../libnm-util/nm-setting-bond.c:530
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "„%s“ yra netinkamas IPv4 adresas parametrui „%s“"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "„%d“ yra netinkama vertė savybei (turi būti <= %d)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "vertė „%d“ yra už ribų <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "savybÄ— yra tuÅ¡Äia"
+
+#: ../libnm-util/nm-setting-connection.c:742
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "„%s“ neatitinka virtualaus sąsajos pavadinimo „%s“"
+
+#: ../libnm-util/nm-setting-connection.c:788
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "reikalauja „%s“ nustatymo ryšyje"
+
+#: ../libnm-util/nm-setting-connection.c:812
+msgid "IPv4 configuration is not allowed for bonding slave"
+msgstr "IPv4 konfigūracija neleidžiama pagalbiniam susiejimui"
+
+#: ../libnm-util/nm-setting-connection.c:829
+msgid "IPv6 configuration is not allowed for bonding slave"
+msgstr "IPv6 konfigūracija neleidžiama pagalbiniam susiejimui"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "savybÄ—s vertÄ— „%s“ yra tuÅ¡Äia arba per ilga (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "„%s“ turi netinkamų simbolių (naudokite [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "„%s“ ilgis yra netinkamas (turi būti 5 arba 6 skaitmenys)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "netinkamas sÄ…sajos pavadinimas"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Reikia nurodyti P_Key nurodant tÄ—vÄ…"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key ryšiui nenurodytas tėvinės sąsajos pavadinimas"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "ši savybė neleidžiama „%s=%s“"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 adresas yra netinkamas"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 adresas turi netinkamą priešdėlį"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. kelias yra netinkamas"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. kelias turi netinkamą priešdėlį"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "„%s“ neleidžiamas %s=%s"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:137
+#: ../libnm-util/nm-setting-wireless.c:709
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID ilgis yra už ribū <1-32> baitai"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:146
+#: ../libnm-util/nm-setting-wireless.c:749
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "„%d“ yra netinkamas kanalas"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "„%d“ yra už galimų ribų <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "šios savybės nustatymas reikalauja, kad savybė „%s“ būtų ne nulis"
+
+#: ../libnm-util/nm-setting-vlan.c:500
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "„%s“ vertė neatitinka „%s=%s“"
+
+#: ../libnm-util/nm-setting-vlan.c:511
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "„%s“ nėra nei UUID, nei sąsajos pavadinimas"
+
+#: ../libnm-util/nm-setting-vlan.c:524
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "savybė yra nenurodyta ir nėra „%s:%s“"
+
+#: ../libnm-util/nm-setting-vlan.c:537
+msgid "flags are invalid"
+msgstr "požymiai yra netinkami"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "„%s“ nėra tinkama laidinio prievado vertė"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "„%s“ nėra tinkama dupleksinė vertė"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "nÄ—ra tinkamas MAC adresas"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:790
+#: ../libnm-util/nm-setting-wireless.c:804
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "„%s“ nėra tinkamas MAC adresas"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "netinkamas „%s“ arba jo vertė „%s“"
+
+#: ../libnm-util/nm-setting-wireless-security.c:825
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Nepakanka atminties Å¡ifravimo raktui sukurti."
+msgid "'%s' security requires '%s=%s'"
+msgstr "„%s“ saugumas reikalauja „%s=%s“"
-#: ../libnm-util/nm-utils.c:2150
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Nepakanka atminties PEM failui sukurti."
+#: ../libnm-util/nm-setting-wireless-security.c:854
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "„%s“ saugumas reikalauja „%s“ nustatymo"
+
+#: ../libnm-util/nm-setting-wireless-security.c:875
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "„%d“ vertė yra už ribų <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "„%s“ ryšys šioje savybėje reikalauja „%s“"
-#: ../libnm-util/nm-utils.c:2162
+#: ../libnm-util/nm-setting-wireless-security.c:1002
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Nepakanka atminties IV įrašyti į PEM failą."
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "„%s“ gali būti naudojamas tik su „%s=%s“ (WEP)"
-#: ../libnm-util/nm-utils.c:2174
+#: ../libnm-util/nm-setting-wireless.c:718
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "Nepakanka atminties šifruotam raktui įrašyti į PEM failą."
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "„%s“ nėra tinkama Wi-Fi veiksena"
-#: ../libnm-util/nm-utils.c:2193
+#: ../libnm-util/nm-setting-wireless.c:728
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Nepakanka atminties PEM failo duomenims."
+msgid "'%s' is not a valid band"
+msgstr "„%s“ nėra tinkamos bangos"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#: ../libnm-util/nm-setting-wireless.c:738
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "reikalauja nustatyti „%s“ savybę"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "Įjungti arba išjungti sistemos prieigą prie tinklo"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
msgid "System policy prevents enabling or disabling system networking"
-msgstr "Sistemos politika neleidžia įjungti arba išjungti sistemos prieigos prie tinklo"
+msgstr ""
+"Sistemos politika neleidžia įjungti arba išjungti sistemos prieigos prie "
+"tinklo"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
-msgid "Put NetworkManager to sleep or wake it up (should only be used by system power management)"
-msgstr "Užmigdyti arba pažadinti NetworkManager (tai turėtų naudoti tik sistemos energijos valdymo posistemė)"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:3
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Užmigdyti arba pažadinti NetworkManager (tai turėtų naudoti tik sistemos "
+"energijos valdymo posistemÄ—)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
msgstr "Sistemos politika neleidžia užmigdyti arba pažadinti NetworkManager"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
msgstr "Įjungti arba išjungti WiFi įrenginius"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
msgstr "Sistemos politika neleidžia įjungti arba išjungti WiFi įrenginių"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
msgid "Enable or disable mobile broadband devices"
msgstr "Ä®jungti arba iÅ¡jungti mobiliojo plaÄiajuosÄio ryÅ¡io įrenginius"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
msgid "System policy prevents enabling or disabling mobile broadband devices"
-msgstr "Sistemos politika neleidžia įjungti arba iÅ¡jungti mobiliojo plaÄiajuosÄio ryÅ¡io įrenginių"
+msgstr ""
+"Sistemos politika neleidžia įjungti arba iÅ¡jungti mobiliojo plaÄiajuosÄio "
+"ryšio įrenginių"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "Ä®jungti arba iÅ¡jungti WiMAX mobiliojo plaÄiajuosÄio ryÅ¡io įrenginius"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
-msgid "System policy prevents enabling or disabling WiMAX mobile broadband devices"
-msgstr "Sistemos politika neleidžia įjungti arba iÅ¡jungti WiMAX mobiliojo plaÄiajuosÄio ryÅ¡io įrenginių"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr ""
+"Sistemos politika neleidžia įjungti arba išjungti WiMAX mobiliojo "
+"plaÄiajuosÄio ryÅ¡io įrenginių"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
msgstr "Leisti valdyti tinklo ryšius"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
msgid "System policy prevents control of network connections"
msgstr "Sistemos politika neleidžia valdyti tinklo ryšių"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:13
msgid "Connection sharing via a protected WiFi network"
msgstr "Dalijimasis ryšiu naudojant apsaugotą WiFi tinklą"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "Sistemos politika nelaidžia dalytis ryšiais naudojant apsaugotą WiFi tinklą"
+msgstr ""
+"Sistemos politika nelaidžia dalytis ryšiais naudojant apsaugotą WiFi tinklą"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
msgid "Connection sharing via an open WiFi network"
msgstr "Dalijimasis ryšiu naudojant atvirą WiFi tinklą"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "Sistemos politika neleidžia dalytis ryšiais naudojant atvirą WiFi tinklą"
+msgstr ""
+"Sistemos politika neleidžia dalytis ryšiais naudojant atvirą WiFi tinklą"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
msgstr "Keisti asmeninius tinklo ryšius"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
msgid "System policy prevents modification of personal network settings"
msgstr "Sistemos politika neleidžia keisti asmeninių tinklų nustatymų"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
msgid "Modify network connections for all users"
msgstr "Keisti visų naudotojų tinklo ryšius"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
msgid "System policy prevents modification of network settings for all users"
-msgstr "Sistemos politika neleidžia keisti tinklo nustatymų, skirtų visiems naudotojams"
+msgstr ""
+"Sistemos politika neleidžia keisti tinklo nustatymų, skirtų visiems "
+"naudotojams"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
msgstr "Keisti pastovų sistemos vardą"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
msgstr "Sistemos politika neleidžia keisti įsiminto sistemos vardo"
-#: ../src/main.c:158
+#: ../src/main.c:129
#, c-format
msgid "Failed to set signal mask: %d"
msgstr "Nepavyko nustatyti signalo kaukÄ—s: %d"
-#: ../src/main.c:167
+#: ../src/main.c:138
#, c-format
msgid "Failed to create signal handling thread: %d"
msgstr "Nepavyko sukurti signalo apdorojimo gijos: %d"
-#: ../src/main.c:182
+#: ../src/main.c:153
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Nepavyko atverti %s: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:159
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Nepavyko rašymas į %s: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:164
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Nepavyko užverti %s: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:207
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager jau veikia „pid %ld)\n"
-#: ../src/main.c:376
+#: ../src/main.c:326
msgid "Print NetworkManager version and exit"
msgstr "Parodyti NetworkManager versiją ir išeiti"
-#: ../src/main.c:377
+#: ../src/main.c:327
msgid "Don't become a daemon"
msgstr "Netapti demonu"
-#: ../src/main.c:378
+#: ../src/main.c:328
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Netapti demonu ir rašyti žurnalą į stderr"
+
+#: ../src/main.c:329
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Žurnalo lygis: vienas iš [%s]"
+
+#: ../src/main.c:331
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "Žurnalo domenai, skiriami „,“: bet kuri [%s] kombinacija"
+
+#: ../src/main.c:333
msgid "Make all warnings fatal"
msgstr "Paversti visus įspėjimus lemtingais"
-#: ../src/main.c:379
+#: ../src/main.c:334
msgid "Specify the location of a PID file"
msgstr "Nurodykite PID failo vietÄ…"
-#: ../src/main.c:379
+#: ../src/main.c:334
msgid "filename"
msgstr "failo pavadinimas"
-#: ../src/main.c:380
+#: ../src/main.c:335
msgid "State file location"
msgstr "BÅ«senos failo vieta"
-#: ../src/main.c:380
+#: ../src/main.c:335
msgid "/path/to/state.file"
msgstr "/kelias/iki/būsenos.failo"
-#: ../src/main.c:381
-msgid "Config file location"
-msgstr "Konfigūracijos failo vieta"
-
-#: ../src/main.c:381
-msgid "/path/to/config.file"
-msgstr "/kelias/iki/konfigūracijos.failo"
-
-#: ../src/main.c:382
-msgid "List of plugins separated by ','"
-msgstr "Įskiepių sąrašas skiriant „,“"
-
-#: ../src/main.c:382
-msgid "plugin1,plugin2"
-msgstr "įskiepis1,įskiepis2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:384
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Žurnalo lygis: vienas iš [ERR, WARN, INFO, DEBUG]"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:387
-#| msgid ""
-#| "Log domains separated by ',': any combination of\n"
-#| " [NONE,HW,RFKILL,ETHER,WIFI,BT,"
-#| "MB,DHCP4,DHCP6,PPP,\n"
-#| " WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,"
-#| "VPN,SHARING,SUPPLICANT,\n"
-#| " AGENTS,SETTINGS,SUSPEND,CORE,"
-#| "DEVICE,OLPC,WIMAX,\n"
-#| " INFINIBAND,FIREWALL]"
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"Žurnalo sritys skiriamos „,“: bet kokia reikšmių kombinacija\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:393
-msgid "An http(s) address for checking internet connectivity"
-msgstr "http(s) adresas interneto jungiamumui tikrinti"
-
-#: ../src/main.c:394
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "Intervalas tarp jungiamumo tikrinimų (sekundėmis)"
-
-#: ../src/main.c:395
-msgid "The expected start of the response"
-msgstr "Tikėtina atsakymo pradžia"
-
-#: ../src/main.c:395
-msgid "Bingo!"
-msgstr "Bingo!"
-
-#: ../src/main.c:400
+#: ../src/main.c:361
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules nepalaikomi jūsų platformoje\n"
-#: ../src/main.c:423
+#: ../src/main.c:366
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "Jūs turite būti root, kad paleistumėte NetworkManager!\n"
+
+#: ../src/main.c:389
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2683,41 +4978,38 @@ msgstr ""
"nurodyti belaidžio ryšio prieigos taškus, su kuriais susieti\n"
"jūsų kompiuterio belaidžio ryšio kortas."
-#: ../src/main.c:429
+#: ../src/main.c:395
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr "Netinkama parinktis. Galimų parinkÄių sÄ…raÅ¡Ä… galite pamatyti naudodami parametrÄ… --help.\n"
+msgstr ""
+"Netinkama parinktis. Galimų parinkÄių sÄ…raÅ¡Ä… galite pamatyti naudodami "
+"parametrÄ… --help.\n"
-#: ../src/main.c:439
+#: ../src/main.c:408 ../src/main.c:472
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "Jūs turite būti root, kad paleistumėte NetworkManager!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Naudokite --help, galimų parinkÄių sÄ…raÅ¡ui gauti.\n"
-#: ../src/main.c:460
+#: ../src/main.c:459
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Nepavyko perskaityti konfigūracijos: (%d) %s\n"
-#: ../src/main.c:471
-#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. Naudokite --help, galimų parinkÄių sÄ…raÅ¡ui gauti.\n"
-
-#: ../src/main.c:478
+#: ../src/main.c:480
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Nepavyko perskaityti būsenos failo %s: (%d) %s\n"
-#: ../src/main.c:495
+#: ../src/main.c:493
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Nepavyko tapri demonu: %s [klaida %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# Sukurta NetworkManager programos\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2726,229 +5018,247 @@ msgstr ""
"# Sulieta iš %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:315
msgid "no usable DHCP client could be found."
msgstr "nerastas veikiantis DHCP klientas."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:324
msgid "'dhclient' could be found."
msgstr "nerastas „dhclient“."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:334
msgid "'dhcpcd' could be found."
msgstr "nerastas „dhcpcd“."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:342
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "nepalaikomas DHCP klientas „%s“."
-#: ../src/dns-manager/nm-dns-manager.c:381
+#: ../src/dns-manager/nm-dns-manager.c:366
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "PASTABA: libc adresų nustatymo funkcija gali nepalaikyti daugiau nei 3 vardų serverių."
+msgstr ""
+"PASTABA: libc adresų nustatymo funkcija gali nepalaikyti daugiau nei 3 vardų "
+"serverių."
-#: ../src/dns-manager/nm-dns-manager.c:383
+#: ../src/dns-manager/nm-dns-manager.c:368
msgid "The nameservers listed below may not be recognized."
msgstr "Žemiau pateikti vardų serveriai gali būti neatpažinti."
-#: ../src/logging/nm-logging.c:131
+#: ../src/logging/nm-logging.c:152
#, c-format
msgid "Unknown log level '%s'"
msgstr "Nežinomas žurnalo vedimo lygis „%s“"
-#: ../src/logging/nm-logging.c:156
+#: ../src/logging/nm-logging.c:198
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Nežinoma žurnalo sritis „%s“"
-#: ../src/modem-manager/nm-modem-cdma.c:279
-#: ../src/nm-device-bt.c:325
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA ryšys %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Konfigūracijos failo vieta"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/kelias/iki/konfigūracijos.failo"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "Konfigūracijos aplanko vieta"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/kelias/iki/konfigūracijos/aplanko"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "Įskiepių sąrašas skiriant „,“"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "įskiepis1,įskiepis2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "http(s) adresas interneto jungiamumui tikrinti"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Intervalas tarp jungiamumo tikrinimų (sekundėmis)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "Tikėtina atsakymo pradžia"
-#: ../src/modem-manager/nm-modem-gsm.c:547
-#: ../src/nm-device-bt.c:321
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:331
#, c-format
msgid "GSM connection %d"
msgstr "GSM ryšys %d"
-#: ../src/nm-device-bond.c:191
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:335
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA ryšys %d"
+
+#: ../src/devices/nm-device-bond.c:133
#, c-format
msgid "Bond connection %d"
msgstr "Susieti ryšį %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
-#| msgid "GSM connection %d"
msgid "ADSL connection %d"
msgstr "ADSL ryšys %d"
-#: ../src/nm-device-bt.c:296
+#: ../src/devices/nm-device-bridge.c:131
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Susieti ryšį %d"
+
+#: ../src/devices/nm-device-bt.c:306
#, c-format
msgid "PAN connection %d"
msgstr "PAN ryšys %d"
-#: ../src/nm-device-bt.c:329
+#: ../src/devices/nm-device-bt.c:339
#, c-format
msgid "DUN connection %d"
msgstr "DUN ryšys %d"
-#: ../src/nm-device-ethernet.c:1327
+#: ../src/devices/nm-device-ethernet.c:1210
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE ryšys %d"
-#: ../src/nm-device-ethernet.c:1327
+#: ../src/devices/nm-device-ethernet.c:1210
#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Laidinis ryšys %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:246
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand ryšys %d"
-#: ../src/nm-device-olpc-mesh.c:303
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "Susiejimas %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:147
+#, c-format
+msgid "Team connection %d"
+msgstr "Komandinis ryšys %d"
+
+#: ../src/devices/nm-device-vlan.c:213
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN ryšys %d"
-#: ../src/nm-manager.c:661
+#: ../src/nm-manager.c:878
#, c-format
msgid "VPN connection %d"
msgstr "VPN ryšys %d"
-#: ../src/nm-netlink-monitor.c:148
-#: ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "laukiant lizde duomenų įvyko klaida"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "klaida apdorojant netlink pranešimą: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "laukiant lizde duomenų įvyko klaida"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "nepavyko prisijungti prie netlink saito būsenai stebėti: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "nepavyko įjungti netlink valdiklio įgaliojimams perduoti: %s"
-#: ../src/nm-netlink-monitor.c:330
-#: ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr "nepavyko rezervuoti netlink valdiklio saito būsenai stebėti: %s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "nepavyko rezervuoti netlink saito podėlio saito būsenai stebėti: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "nepavyko prisijungti prie netlink grupÄ—s: %s"
-#: ../src/nm-netlink-monitor.c:671
-#: ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "klaida atnaujinant saito podėlį: %s"
-
-#: ../src/settings/plugins/ifcfg-rh/reader.c:94
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
msgid "System"
msgstr "Sistema"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3641
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3803
msgid "Bond"
msgstr "Susieti"
-#: ../test/nm-online.c:112
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3889
+msgid "Team"
+msgstr "Komanda"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4077
+msgid "Bridge"
+msgstr "Susiejimas"
+
+#: ../test/nm-online.c:73
#, c-format
-#| msgid "connecting"
msgid "\rConnecting"
msgstr "\rJungiamasi"
-#: ../test/nm-online.c:143
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "Laikas sekundėmis, kiek laukti ryšio (numatyta 30)"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr "Laikas sekundėmis, kiek laukti ryšio (be parametro numatyta 30)"
-#: ../test/nm-online.c:144
-#| msgid "Error: NetworkManager is not running."
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr "IÅ¡eiti nedelsiant, jei NetworkManager neveikia arba nesijungia"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "IÅ¡eiti nedelsiant, jei NetworkManager neveikia"
-#: ../test/nm-online.c:145
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "Nespausdinti nieko"
-#: ../test/nm-online.c:163
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "Laukia sėkmingo ryšio NetworkManager."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr "Laukia, kol NetworkManager baigs aktyvuoti pradinius tinklo ryšius."
-#: ../test/nm-online.c:169
-#: ../test/nm-online.c:178
-#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
-msgstr "Netinkama parinktis. Galimų parinkÄių sÄ…raÅ¡Ä… galite pamatyti naudodami parametrÄ… --help."
-
-#~ msgid "state: %s\n"
-#~ msgstr "būsena: %s\n"
-
-#~ msgid "Connection activated\n"
-#~ msgstr "Ryšys aktyvuotas\n"
-
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "būsena: %s (%d)\n"
-
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "Aktyvaus ryšio būsena: %s\n"
-
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "Aktyvaus ryšio kelias: %s\n"
-
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "Įrenginio būsena: %d (%s)\n"
-
-#~ msgid "not set"
-#~ msgstr "nenustatyta"
-
-#~ msgid "SCOPE"
-#~ msgstr "SRITIS"
-
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-TARNYBA"
-
-#~ msgid "system"
-#~ msgstr "sisteminis"
-
-#~ msgid "user"
-#~ msgstr "naudotojo"
+msgstr ""
+"Netinkama parinktis. Galimų parinkÄių sÄ…raÅ¡Ä… galite pamatyti naudodami "
+"parametrÄ… --help."
-#~ msgid "System connections"
-#~ msgstr "Sistemos ryšiai"
+#~| msgid "Error: 'nm' command '%s' is not valid."
+#~ msgid "Error: 'ingress': '%s' is not valid; %s "
+#~ msgstr "Klaida: „ingress“: „%s“ yra netinkamas; %s."
-#~ msgid "User connections"
-#~ msgstr "Naudotojo ryšiai"
+#~| msgid "Error: '%s' argument is missing."
+#~ msgid "Error: 'ifname' argument is required."
+#~ msgstr "Klaida: būtinas argumentas „ifname“."
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "Klaida: nepavyko „%s“ gauti aktyvaus ryšio."
+#~ msgid "IPv4 method '%s' is not allowed when IPv6 method 'ignore' is set"
+#~ msgstr ""
+#~ "IPv4 metodas „%s“ neleidžiamas, kai nustatytas IPv6 metodas „ignore“"
-#~ msgid "Error: Could not get user settings."
-#~ msgstr "Klaida: nepavyko gauti naudotojo nustatymų."
+#~ msgid "IPv6 method '%s' is not allowed when IPv4 method 'disabled' is set"
+#~ msgstr ""
+#~ "IPv6 metodas „%s“ neleidžiamas, kai nustatytas IPv4 metodas „disabled“"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-PARAMETRAI"
+#~ msgid "'%s' setting is required for the connection when the property is set"
+#~ msgstr "„%s“ nustatymas reikalauja ryšio, kai savybė yra nustatoma"
diff --git a/po/ml.po b/po/ml.po
index 4d4340404..7a289a2a9 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -3,15 +3,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Ani Peter <apeter@redhat.com>, 2010, 2012.
+# Ani Peter <apeter@redhat.com>, 2010, 2012, 2013.
# Mohammed <sadiqpkp@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ml\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-11-13 15:25+0000\n"
-"PO-Revision-Date: 2012-11-27 13:44+0530\n"
+"POT-Creation-Date: 2013-03-14 15:25+0000\n"
+"PO-Revision-Date: 2013-03-25 18:21+0530\n"
"Last-Translator: Ani Peter <peter.ani@gmail.com>\n"
"Language-Team: Malayalam <discuss@lists.smc.org.in>\n"
"Language: ml\n"
@@ -22,8 +22,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:63 ../cli/src/connections.c:133
+#: ../cli/src/connections.c:167
msgid "GROUP"
msgstr "GROUP"
@@ -97,7 +97,7 @@ msgstr "കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (à´°à´£àµà´Ÿà´¾à´‚à´˜
msgid "connected"
msgstr "കണകàµà´Ÿàµ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:635
+#: ../cli/src/common.c:386 ../cli/src/connections.c:466
msgid "deactivating"
msgstr "സജീവമലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´¨àµà´¨àµ"
@@ -105,16 +105,16 @@ msgstr "സജീവമലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´¨àµà´¨àµ"
msgid "connection failed"
msgstr "കണകàµà´·à´¨àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:638
-#: ../cli/src/connections.c:661 ../cli/src/connections.c:1353
-#: ../cli/src/devices.c:645 ../cli/src/network-manager.c:123
+#: ../cli/src/common.c:390 ../cli/src/connections.c:471
+#: ../cli/src/connections.c:494 ../cli/src/connections.c:1189
+#: ../cli/src/devices.c:664 ../cli/src/network-manager.c:123
#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:451
-#: ../src/main.c:470
+#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:669
+#: ../cli/src/settings.c:697 ../cli/src/settings.c:759 ../cli/src/utils.c:533
+#: ../src/main.c:422 ../src/main.c:441
msgid "unknown"
msgstr "അപരിചിതം"
@@ -335,32 +335,31 @@ msgid "ModemManager is unavailable"
msgstr "ModemManager ലഭàµà´¯à´®à´²àµà´²"
#: ../cli/src/common.c:558
-#| msgid "The modem could not be found"
msgid "The Wi-Fi network could not be found"
msgstr "വൈ-ഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²"
#: ../cli/src/common.c:561
-#| msgid "A dependency of the connection failed"
msgid "A secondary connection of the base connection failed"
msgstr "à´…à´Ÿà´¿à´¸àµà´¥à´¾à´¨ കണകàµà´·à´¨àµà´³àµà´³ സെകàµà´•à´£àµà´Ÿà´±à´¿ കണകàµà´·à´¨àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:295 ../cli/src/devices.c:311
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:477
+#: ../cli/src/common.c:564 ../cli/src/devices.c:310 ../cli/src/devices.c:328
+#: ../cli/src/devices.c:450 ../cli/src/devices.c:494
msgid "Unknown"
msgstr "അപരിചിതം"
#. 0
#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:107 ../cli/src/devices.c:131 ../cli/src/devices.c:141
-#: ../cli/src/devices.c:151 ../cli/src/devices.c:165 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:217 ../cli/src/devices.c:226
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
+#: ../cli/src/devices.c:109 ../cli/src/devices.c:134 ../cli/src/devices.c:144
+#: ../cli/src/devices.c:154 ../cli/src/devices.c:164 ../cli/src/devices.c:180
+#: ../cli/src/devices.c:194 ../cli/src/devices.c:216 ../cli/src/devices.c:232
+#: ../cli/src/devices.c:241
msgid "NAME"
msgstr "NAME"
#. 0
#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
msgid "UUID"
msgstr "UUID"
@@ -368,29 +367,29 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:204
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:111 ../cli/src/devices.c:219
msgid "TYPE"
msgstr "TYPE"
#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:63
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:64
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
#. 4
#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#: ../cli/src/connections.c:65 ../cli/src/devices.c:123
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:66
msgid "READONLY"
msgstr "READONLY"
@@ -399,13 +398,13 @@ msgstr "READONLY"
#. 2
#. 11
#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:206 ../cli/src/devices.c:222
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
#. 2
-#: ../cli/src/connections.c:131
+#: ../cli/src/connections.c:136
msgid "DEVICES"
msgstr "DEVICES"
@@ -413,95 +412,83 @@ msgstr "DEVICES"
#. 1
#. 8
#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:116 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:118 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATE"
#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:138
msgid "DEFAULT"
msgstr "DEFAULT"
#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:139
msgid "DEFAULT6"
msgstr "DEFAULT6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:140
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:143
msgid "CON-PATH"
msgstr "CON-PATH"
#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:144
msgid "ZONE"
msgstr "ZONE"
#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:145
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
+#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
msgid "GENERAL"
msgstr "GENERAL"
#. 0
-#: ../cli/src/connections.c:149
+#: ../cli/src/connections.c:154
msgid "IP"
msgstr "IP"
#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:169
msgid "USERNAME"
msgstr "USERNAME"
#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:170
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:171
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:172
msgid "VPN-STATE"
msgstr "VPN-STATE"
#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:173
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
-#, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down | delete }\n"
-#| "\n"
-#| " list [id <id> | uuid <id>]\n"
-#| " status [id <id> | uuid <id> | path <path>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-#| "nowait] [--timeout <timeout>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
-#| " delete id <id> | uuid <id>\n"
+#: ../cli/src/connections.c:195
+#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
" COMMAND := { list | status | up | down | delete }\n"
@@ -529,359 +516,370 @@ msgstr ""
" delete id <id> | uuid <id>\n"
"\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:256 ../cli/src/connections.c:442
#, c-format
msgid "Error: 'con list': %s"
msgstr "പിശകàµ: 'con list': %s"
-#: ../cli/src/connections.c:253 ../cli/src/connections.c:613
+#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
#, c-format
msgid "Error: 'con list': %s; allowed fields: %s"
msgstr "പിശകàµ: 'con list': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-#: ../cli/src/connections.c:261
+#: ../cli/src/connections.c:266
msgid "Connection details"
msgstr "കണകàµà´·à´¨àµâ€ വിശദാംശങàµà´™à´³àµâ€"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:317
msgid "never"
msgstr "à´’à´°à´¿à´•àµà´•à´²àµà´®à´¿à´²àµà´²"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:787
-#: ../cli/src/settings.c:907 ../cli/src/settings.c:1189
-#: ../cli/src/settings.c:1190 ../cli/src/settings.c:1192
-#: ../cli/src/settings.c:1194 ../cli/src/settings.c:1195
-#: ../cli/src/settings.c:1326 ../cli/src/settings.c:1327
-#: ../cli/src/settings.c:1328 ../cli/src/settings.c:1329
-#: ../cli/src/settings.c:1406 ../cli/src/settings.c:1407
-#: ../cli/src/settings.c:1408 ../cli/src/settings.c:1409
-#: ../cli/src/settings.c:1410 ../cli/src/settings.c:1411
-#: ../cli/src/settings.c:1412 ../cli/src/settings.c:1413
-#: ../cli/src/settings.c:1414 ../cli/src/settings.c:1415
-#: ../cli/src/settings.c:1416 ../cli/src/settings.c:1417
-#: ../cli/src/settings.c:1418 ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
+#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
+#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
+#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
+#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
+#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
+#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
+#: ../cli/src/network-manager.c:267 ../cli/src/settings.c:875
+#: ../cli/src/settings.c:950 ../cli/src/settings.c:1086
+#: ../cli/src/settings.c:1176 ../cli/src/settings.c:1386
+#: ../cli/src/settings.c:1387 ../cli/src/settings.c:1389
+#: ../cli/src/settings.c:1391 ../cli/src/settings.c:1392
+#: ../cli/src/settings.c:1523 ../cli/src/settings.c:1524
+#: ../cli/src/settings.c:1525 ../cli/src/settings.c:1526
+#: ../cli/src/settings.c:1604 ../cli/src/settings.c:1605
+#: ../cli/src/settings.c:1606 ../cli/src/settings.c:1607
+#: ../cli/src/settings.c:1608 ../cli/src/settings.c:1609
+#: ../cli/src/settings.c:1610 ../cli/src/settings.c:1611
+#: ../cli/src/settings.c:1612 ../cli/src/settings.c:1613
+#: ../cli/src/settings.c:1614 ../cli/src/settings.c:1615
+#: ../cli/src/settings.c:1616 ../cli/src/settings.c:1698
+#: ../cli/src/settings.c:2056 ../cli/src/settings.c:2093
msgid "yes"
msgstr "ഉവàµà´µàµàµ"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:714
-#: ../cli/src/settings.c:787 ../cli/src/settings.c:907
-#: ../cli/src/settings.c:1189 ../cli/src/settings.c:1190
-#: ../cli/src/settings.c:1192 ../cli/src/settings.c:1194
-#: ../cli/src/settings.c:1195 ../cli/src/settings.c:1326
-#: ../cli/src/settings.c:1327 ../cli/src/settings.c:1328
-#: ../cli/src/settings.c:1329 ../cli/src/settings.c:1406
-#: ../cli/src/settings.c:1407 ../cli/src/settings.c:1408
-#: ../cli/src/settings.c:1409 ../cli/src/settings.c:1410
-#: ../cli/src/settings.c:1411 ../cli/src/settings.c:1412
-#: ../cli/src/settings.c:1413 ../cli/src/settings.c:1414
-#: ../cli/src/settings.c:1415 ../cli/src/settings.c:1416
-#: ../cli/src/settings.c:1417 ../cli/src/settings.c:1418
-#: ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
+#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
+#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
+#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
+#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
+#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
+#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
+#: ../cli/src/network-manager.c:269 ../cli/src/settings.c:875
+#: ../cli/src/settings.c:877 ../cli/src/settings.c:950
+#: ../cli/src/settings.c:1086 ../cli/src/settings.c:1176
+#: ../cli/src/settings.c:1386 ../cli/src/settings.c:1387
+#: ../cli/src/settings.c:1389 ../cli/src/settings.c:1391
+#: ../cli/src/settings.c:1392 ../cli/src/settings.c:1523
+#: ../cli/src/settings.c:1524 ../cli/src/settings.c:1525
+#: ../cli/src/settings.c:1526 ../cli/src/settings.c:1604
+#: ../cli/src/settings.c:1605 ../cli/src/settings.c:1606
+#: ../cli/src/settings.c:1607 ../cli/src/settings.c:1608
+#: ../cli/src/settings.c:1609 ../cli/src/settings.c:1610
+#: ../cli/src/settings.c:1611 ../cli/src/settings.c:1612
+#: ../cli/src/settings.c:1613 ../cli/src/settings.c:1614
+#: ../cli/src/settings.c:1615 ../cli/src/settings.c:1616
+#: ../cli/src/settings.c:1698 ../cli/src/settings.c:2056
+#: ../cli/src/settings.c:2093
msgid "no"
msgstr "ഇലàµà´²"
-#: ../cli/src/connections.c:562
+#: ../cli/src/connections.c:393
msgid "Connection list"
msgstr "കണകàµà´·à´¨àµâ€ പടàµà´Ÿà´¿à´•"
-#: ../cli/src/connections.c:575 ../cli/src/connections.c:1112
-#: ../cli/src/connections.c:1650 ../cli/src/connections.c:1665
-#: ../cli/src/connections.c:1674 ../cli/src/connections.c:1684
-#: ../cli/src/connections.c:1696 ../cli/src/connections.c:1804
-#: ../cli/src/connections.c:1906 ../cli/src/devices.c:1122
-#: ../cli/src/devices.c:1132 ../cli/src/devices.c:1250
-#: ../cli/src/devices.c:1258 ../cli/src/devices.c:1622
-#: ../cli/src/devices.c:1629 ../cli/src/devices.c:1643
-#: ../cli/src/devices.c:1650 ../cli/src/devices.c:1667
-#: ../cli/src/devices.c:1678 ../cli/src/devices.c:1899
-#: ../cli/src/devices.c:1906
+#: ../cli/src/connections.c:406 ../cli/src/connections.c:948
+#: ../cli/src/connections.c:1486 ../cli/src/connections.c:1501
+#: ../cli/src/connections.c:1510 ../cli/src/connections.c:1520
+#: ../cli/src/connections.c:1532 ../cli/src/connections.c:1641
+#: ../cli/src/connections.c:1743 ../cli/src/devices.c:1192
+#: ../cli/src/devices.c:1202 ../cli/src/devices.c:1320
+#: ../cli/src/devices.c:1328 ../cli/src/devices.c:1692
+#: ../cli/src/devices.c:1699 ../cli/src/devices.c:1713
+#: ../cli/src/devices.c:1720 ../cli/src/devices.c:1737
+#: ../cli/src/devices.c:1748 ../cli/src/devices.c:1969
+#: ../cli/src/devices.c:1976
#, c-format
msgid "Error: %s argument is missing."
msgstr "പിശകàµ: %s ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/connections.c:588
+#: ../cli/src/connections.c:419
#, c-format
msgid "Error: %s - no such connection."
msgstr "പിശകàµ: %s - ഇതàµà´¤à´°à´‚ കണകàµà´·à´¨àµâ€ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/connections.c:594 ../cli/src/connections.c:1709
-#: ../cli/src/connections.c:1821 ../cli/src/connections.c:1913
-#: ../cli/src/devices.c:906 ../cli/src/devices.c:986 ../cli/src/devices.c:1146
-#: ../cli/src/devices.c:1264 ../cli/src/devices.c:1691
-#: ../cli/src/devices.c:1912
+#: ../cli/src/connections.c:425 ../cli/src/connections.c:1545
+#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1750
+#: ../cli/src/devices.c:976 ../cli/src/devices.c:1056
+#: ../cli/src/devices.c:1216 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1761 ../cli/src/devices.c:1982
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "അപരിചിതമായ പരാമീറàµà´±à´°àµâ€: %s\n"
-#: ../cli/src/connections.c:603
+#: ../cli/src/connections.c:434
#, c-format
msgid "Error: no valid parameter specified."
msgstr "പിശകàµ: ശരിയായ പരാമീറàµà´±à´°àµâ€ നലàµâ€à´•à´¿à´¯à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²."
-#: ../cli/src/connections.c:618 ../cli/src/connections.c:2009
-#: ../cli/src/devices.c:2123 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:449 ../cli/src/connections.c:1846
+#: ../cli/src/devices.c:2193 ../cli/src/network-manager.c:599
#, c-format
msgid "Error: %s."
msgstr "പിശകàµ: %s."
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:462
msgid "activating"
msgstr "സജീവമാകàµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:633
+#: ../cli/src/connections.c:464
msgid "activated"
msgstr "സജീവമാകàµà´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:468
+#| msgid "activated"
+msgid "deactivated"
+msgstr "നിരàµâ€à´œàµà´œàµ€à´µà´®à´¾à´•àµà´•à´¿à´¯à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ"
+
+#: ../cli/src/connections.c:480
msgid "VPN connecting (prepare)"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (തയàµà´¯à´¾à´±à´¾à´•àµà´•)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:482
msgid "VPN connecting (need authentication)"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (ആധികാരികത ഉറപàµà´ªà´¾à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµàµ)"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:484
msgid "VPN connecting"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:486
msgid "VPN connecting (getting IP configuration)"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (à´à´ªà´¿ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ)"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:488
msgid "VPN connected"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:490
msgid "VPN connection failed"
msgstr "വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ"
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:492
msgid "VPN disconnected"
msgstr "വിപിഎനàµâ€ വിഛേദിചàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:712 ../cli/src/connections.c:722
+#: ../cli/src/connections.c:548 ../cli/src/connections.c:558
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:752 ../cli/src/connections.c:976
#, c-format
msgid "Error: 'con status': %s"
msgstr "പിശകàµ: 'con status': %s"
-#: ../cli/src/connections.c:918 ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:754 ../cli/src/connections.c:978
#, c-format
msgid "Error: 'con status': %s; allowed fields: %s"
msgstr "പിശകàµ: 'con status': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-#: ../cli/src/connections.c:926
+#: ../cli/src/connections.c:762
msgid "Active connection details"
msgstr "സജീവമായ കണകàµà´·à´¨àµâ€ വിശദാംശങàµà´™à´³àµâ€"
-#: ../cli/src/connections.c:1062 ../cli/src/connections.c:1724
-#: ../cli/src/connections.c:1836 ../cli/src/connections.c:1927
-#: ../cli/src/devices.c:933 ../cli/src/devices.c:995 ../cli/src/devices.c:1161
-#: ../cli/src/devices.c:1294 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1941 ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:898 ../cli/src/connections.c:1560
+#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1764
+#: ../cli/src/devices.c:1003 ../cli/src/devices.c:1065
+#: ../cli/src/devices.c:1231 ../cli/src/devices.c:1364
+#: ../cli/src/devices.c:1783 ../cli/src/devices.c:2011
+#: ../cli/src/network-manager.c:311
#, c-format
msgid "Error: Can't find out if NetworkManager is running: %s."
msgstr ""
"പിശകàµ: നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨àµà´£àµà´Ÿàµ‹ à´Žà´¨àµà´¨à´±à´¿à´¯à´¾à´¨àµâ€ "
"സാധികàµà´•àµà´¨àµà´¨à´¿à´²àµà´²: %s."
-#: ../cli/src/connections.c:1066 ../cli/src/connections.c:1728
-#: ../cli/src/connections.c:1840 ../cli/src/connections.c:1931
-#: ../cli/src/devices.c:937 ../cli/src/devices.c:999 ../cli/src/devices.c:1165
-#: ../cli/src/devices.c:1298 ../cli/src/devices.c:1717
-#: ../cli/src/devices.c:1945 ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:902 ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:1677 ../cli/src/connections.c:1768
+#: ../cli/src/devices.c:1007 ../cli/src/devices.c:1069
+#: ../cli/src/devices.c:1235 ../cli/src/devices.c:1368
+#: ../cli/src/devices.c:1787 ../cli/src/devices.c:2015
+#: ../cli/src/network-manager.c:315
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "പിശകàµ: നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²."
-#: ../cli/src/connections.c:1098
+#: ../cli/src/connections.c:934
msgid "Active connections"
msgstr "സജീവമായ കണകàµà´·à´¨àµà´•à´³àµâ€"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:959
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "പിശകàµ: '%s' ഒരൠസജീവമായ കണകàµà´·à´¨àµâ€ à´…à´²àµà´²."
-#: ../cli/src/connections.c:1128
+#: ../cli/src/connections.c:964
#, c-format
msgid "Error: unknown parameter: %s"
msgstr "പിശകàµ: അപരിചിതമായ പരാമീറàµà´±à´°àµâ€: %s"
-#: ../cli/src/connections.c:1235
+#: ../cli/src/connections.c:1071
#, c-format
msgid "no active connection on device '%s'"
msgstr "ഡിവൈസൠ'%s'-à´²àµâ€ സജീവമായ കണകàµà´·à´¨àµâ€ ലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1243
+#: ../cli/src/connections.c:1079
msgid "no active connection or device"
msgstr "സജീവമായ കണകàµà´·à´¨àµâ€ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഡിവൈസൠലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1314
+#: ../cli/src/connections.c:1150
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "'%s' ഡിവൈസൠ'%s' കണകàµà´·à´¨àµà´®à´¾à´¯à´¿ പൊരàµà´¤àµà´¤à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´¿à´²àµà´²"
-#: ../cli/src/connections.c:1317
+#: ../cli/src/connections.c:1153
#, c-format
msgid "no device found for connection '%s'"
msgstr "ഡിവൈസൠ'%s'-à´²àµâ€ സജീവമായ കണകàµà´·à´¨àµâ€ ലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1165
msgid "unknown reason"
msgstr "അപരിചിതമായ കാരണം"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1167
msgid "none"
msgstr "à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1169
msgid "the user was disconnected"
msgstr "ഉപയോകàµà´¤à´¾à´µàµàµ വിഛേദിചàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1171
msgid "the base network connection was interrupted"
msgstr "à´…à´Ÿà´¿à´¸àµà´¥à´¾à´¨ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ കണകàµà´·à´¨àµâ€ തടസàµà´¸à´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1173
msgid "the VPN service stopped unexpectedly"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ à´…à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´¤à´®à´¾à´¯à´¿ നിരàµâ€à´¤àµà´¤à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1175
msgid "the VPN service returned invalid configuration"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ തെറàµà´±à´¾à´¯ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ തിരികെ നലàµâ€à´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1177
msgid "the connection attempt timed out"
msgstr "കണകàµà´·à´¨àµà´³àµà´³ à´¶àµà´°à´®à´‚ à´•à´´à´¿à´žàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1179
msgid "the VPN service did not start in time"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ സമയതàµà´¤à´¿à´¨àµàµ ആരംഭിചàµà´šà´¿à´²àµà´²"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1181
msgid "the VPN service failed to start"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1183
msgid "no valid VPN secrets"
msgstr "ശരിയായ വിപിഎനàµâ€ രഹസàµà´¯à´™àµà´™à´³àµâ€ ലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1185
msgid "invalid VPN secrets"
msgstr "തെറàµà´±à´¾à´¯ വിപിഎനàµâ€ രഹസàµà´¯à´™àµà´™à´³àµâ€"
-#: ../cli/src/connections.c:1351
+#: ../cli/src/connections.c:1187
msgid "the connection was removed"
msgstr "കണകàµà´·à´¨àµâ€ നീകàµà´•à´‚ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1368 ../cli/src/connections.c:1573
+#: ../cli/src/connections.c:1204 ../cli/src/connections.c:1409
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "കണകàµà´·à´¨àµâ€ സജീവമായി വിജയിചàµà´šà´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ (à´¡à´¿-ബസൠസജീവ പാഥàµ: %s)\n"
#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1373 ../cli/src/connections.c:1474
+#: ../cli/src/connections.c:1209 ../cli/src/connections.c:1310
#, c-format
msgid "Error: Connection activation failed."
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../cli/src/connections.c:1398
+#: ../cli/src/connections.c:1234
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
"വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ വിജയകരമായി സജീവമാകàµà´•à´¿à´¯à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ (à´¡à´¿-ബസൠസജീവ പാഥàµ: %s)\n"
-#: ../cli/src/connections.c:1406
+#: ../cli/src/connections.c:1242
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s."
-#: ../cli/src/connections.c:1503 ../cli/src/devices.c:1055
+#: ../cli/src/connections.c:1339 ../cli/src/devices.c:1125
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "പിശകàµ: സമയപരിധി %d നിമിഷതàµà´¤à´¿à´¨àµà´±àµ† കാലാവധി à´•à´´à´¿à´žàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ."
-#: ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:1400
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s"
-#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1812
-#: ../cli/src/connections.c:1940
+#: ../cli/src/connections.c:1494 ../cli/src/connections.c:1649
+#: ../cli/src/connections.c:1777
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "പിശകàµ: അപരിചിതമായ കണകàµà´·à´¨àµâ€: %s."
-#: ../cli/src/connections.c:1704 ../cli/src/devices.c:1140
-#: ../cli/src/devices.c:1686
+#: ../cli/src/connections.c:1540 ../cli/src/devices.c:1210
+#: ../cli/src/devices.c:1756
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "പിശഖàµ: സമയപരിധിയàµà´Ÿàµ† മൂലàµà´²àµà´¯à´‚ '%s' തെറàµà´±à´¾à´£àµàµ."
-#: ../cli/src/connections.c:1717 ../cli/src/connections.c:1829
-#: ../cli/src/connections.c:1920
+#: ../cli/src/connections.c:1553 ../cli/src/connections.c:1666
+#: ../cli/src/connections.c:1757
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "പിശകàµ: id à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ uuid à´µàµà´¯à´•àµà´¤à´®à´¾à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµàµ."
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:1586
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "പിശകàµ: ഉചിതമായ ഡിവൈസൠലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %s."
-#: ../cli/src/connections.c:1751
+#: ../cli/src/connections.c:1588
#, c-format
msgid "Error: No suitable device found."
msgstr "പിശകàµ: ഉചിതമായ ഡിവൈസൠലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/connections.c:1865
+#: ../cli/src/connections.c:1702
#, c-format
msgid "Warning: Connection not active\n"
msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: കണകàµà´·à´¨àµâ€ സജീവമലàµà´²\n"
-#: ../cli/src/connections.c:1879
+#: ../cli/src/connections.c:1716
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ നീകàµà´•à´‚ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s"
-#: ../cli/src/connections.c:2000
+#: ../cli/src/connections.c:1837
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "പിശകàµ: 'con' കമാനàµâ€à´¡àµ '%s' ശരിയലàµà´²."
-#: ../cli/src/connections.c:2068
+#: ../cli/src/connections.c:1905
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "പിശകàµ: D-Bus-ലേകàµà´•àµàµ കണകàµà´Ÿàµ ചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/connections.c:2076
+#: ../cli/src/connections.c:1913
#, c-format
msgid "Error: Could not get system settings."
msgstr "പിശകàµ: സിസàµà´±àµà´±à´‚ സജàµà´œàµ€à´•à´°à´£à´™àµà´™à´³àµâ€ ലഭàµà´¯à´®à´¾à´•àµà´•à´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/connections.c:2086
+#: ../cli/src/connections.c:1923
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr ""
@@ -891,278 +889,284 @@ msgstr ""
#. 0
#. 9
#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:108 ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:220
msgid "DEVICE"
msgstr "DEVICE"
#. 0
-#: ../cli/src/devices.c:83
+#: ../cli/src/devices.c:84
msgid "CAPABILITIES"
msgstr "CAPABILITIES"
#. 1
-#: ../cli/src/devices.c:84
+#: ../cli/src/devices.c:85
msgid "WIFI-PROPERTIES"
msgstr "WIFI-PROPERTIES"
#. 2
-#: ../cli/src/devices.c:85
+#. 5
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:86
+#: ../cli/src/devices.c:87
msgid "WIRED-PROPERTIES"
msgstr "WIRED-PROPERTIES"
#. 4
-#: ../cli/src/devices.c:87
+#: ../cli/src/devices.c:88
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-PROPERTIES"
#. 5
#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:217
msgid "NSP"
msgstr "NSP"
#. 6
-#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:90
msgid "IP4"
msgstr "IP4"
#. 7
-#: ../cli/src/devices.c:90
+#: ../cli/src/devices.c:91
msgid "DHCP4"
msgstr "DHCP4"
#. 8
-#: ../cli/src/devices.c:91
+#: ../cli/src/devices.c:92
msgid "IP6"
msgstr "IP6"
#. 9
-#: ../cli/src/devices.c:92
+#: ../cli/src/devices.c:93
msgid "DHCP6"
msgstr "DHCP6"
#. 10
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:94
msgid "BOND"
msgstr "BOND"
#. 11
-#: ../cli/src/devices.c:94
+#: ../cli/src/devices.c:95
msgid "VLAN"
msgstr "VLAN"
+#. 12
+#: ../cli/src/devices.c:96
+#| msgid "CONNECTION"
+msgid "CONNECTIONS"
+msgstr "CONNECTIONS"
+
#. 2
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:112
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:113
msgid "PRODUCT"
msgstr "PRODUCT"
#. 4
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:114
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:115
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
#. 6
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:116
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:117
msgid "HWADDR"
msgstr "HWADDR"
#. 9
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:119
msgid "REASON"
msgstr "REASON"
#. 10
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:120
msgid "UDI"
msgstr "UDI"
#. 11
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:121
msgid "IP-IFACE"
msgstr "IP-IFACE"
#. 12
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:122
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
#. 14
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:124
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
#. 15
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:125
msgid "CONNECTION"
msgstr "CONNECTION"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:135
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#. 1
+#: ../cli/src/devices.c:136
+#| msgid "CONNECTION"
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
+
+#. 0
+#: ../cli/src/devices.c:145
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:146
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:155
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:165
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:166
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:167
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:168
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:169
msgid "CCMP"
msgstr "CCMP"
+#. 6
+#: ../cli/src/devices.c:171
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:181
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:182
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:183
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:184
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:185
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:195
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:196
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:197
msgid "MODE"
msgstr "MODE"
#. 3
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:198
msgid "FREQ"
msgstr "FREQ"
#. 4
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:199
msgid "RATE"
msgstr "RATE"
#. 5
#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../cli/src/devices.c:200 ../cli/src/devices.c:218
msgid "SIGNAL"
msgstr "SIGNAL"
#. 6
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:201
msgid "SECURITY"
msgstr "SECURITY"
#. 7
-#: ../cli/src/devices.c:187
+#: ../cli/src/devices.c:202
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
#. 8
-#: ../cli/src/devices.c:188
+#: ../cli/src/devices.c:203
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
#. 10
#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
+#: ../cli/src/devices.c:205 ../cli/src/devices.c:221
msgid "ACTIVE"
msgstr "ACTIVE"
#. 0
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:233
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:227
-#| msgid "UUID"
+#: ../cli/src/devices.c:242
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:243
-#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-#| "[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-#| " [--private] [--nowait] [--timeout <timeout>]\n"
-#| " wimax [list [iface <iface>] [nsp <name>]]\n"
-#| "\n"
+#: ../cli/src/devices.c:258
+#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
@@ -1196,202 +1200,202 @@ msgstr ""
" wimax [list [iface <iface>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:344
+#: ../cli/src/devices.c:361
msgid "(none)"
msgstr "(à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²)"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:417
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:401
+#: ../cli/src/devices.c:418
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:410
+#: ../cli/src/devices.c:427
msgid "Encrypted: "
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ: "
-#: ../cli/src/devices.c:415
+#: ../cli/src/devices.c:432
msgid "WEP "
msgstr "WEP "
-#: ../cli/src/devices.c:417
+#: ../cli/src/devices.c:434
msgid "WPA "
msgstr "WPA "
-#: ../cli/src/devices.c:419
+#: ../cli/src/devices.c:436
msgid "WPA2 "
msgstr "WPA2 "
-#: ../cli/src/devices.c:422
+#: ../cli/src/devices.c:439
msgid "Enterprise "
msgstr "à´Žà´¨àµà´±à´°àµâ€à´ªàµà´°àµˆà´¸àµ "
-#: ../cli/src/devices.c:431
+#: ../cli/src/devices.c:448
msgid "Ad-Hoc"
msgstr "à´…à´¡àµ-ഹോകàµ"
-#: ../cli/src/devices.c:432
+#: ../cli/src/devices.c:449
msgid "Infrastructure"
msgstr "ഇനàµâ€à´«àµà´°à´¾à´¸àµà´Ÿàµà´°à´•àµà´šà´°àµâ€"
-#: ../cli/src/devices.c:468
+#: ../cli/src/devices.c:485
msgid "Home"
msgstr "പാരàµâ€à´ªàµà´ªà´¿à´Ÿà´‚"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:488
msgid "Partner"
msgstr "പങàµà´•à´¾à´³à´¿"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:491
msgid "Roaming"
msgstr "റോമിങàµ"
-#: ../cli/src/devices.c:546
+#: ../cli/src/devices.c:563
#, c-format
msgid "Error: 'dev list': %s"
msgstr "പിശകàµ: 'dev list': %s"
-#: ../cli/src/devices.c:548
+#: ../cli/src/devices.c:565
#, c-format
msgid "Error: 'dev list': %s; allowed fields: %s"
msgstr "പിശകàµ: 'dev list': %s, à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-#: ../cli/src/devices.c:557
+#: ../cli/src/devices.c:574
msgid "Device details"
msgstr "ഡിവൈസിനàµà´±àµ† വിശദാംശങàµà´™à´³àµâ€"
-#: ../cli/src/devices.c:602 ../cli/src/devices.c:605 ../cli/src/devices.c:1081
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:621 ../cli/src/devices.c:624 ../cli/src/devices.c:1151
+#: ../cli/src/utils.c:479
msgid "(unknown)"
msgstr "(അപരിചിതം)"
-#: ../cli/src/devices.c:614
+#: ../cli/src/devices.c:633
msgid "not connected"
msgstr "കണകàµà´Ÿàµ ചെയàµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²"
-#: ../cli/src/devices.c:641
+#: ../cli/src/devices.c:660
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:736
msgid "on"
msgstr "à´“à´£àµâ€"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:736
msgid "off"
msgstr "à´“à´«àµ"
-#: ../cli/src/devices.c:923
+#: ../cli/src/devices.c:993
#, c-format
msgid "Error: 'dev status': %s"
msgstr "പിശകàµ: 'dev status': %s"
-#: ../cli/src/devices.c:925
+#: ../cli/src/devices.c:995
#, c-format
msgid "Error: 'dev status': %s; allowed fields: %s"
msgstr "പിശകàµ: 'dev status': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-#: ../cli/src/devices.c:948
+#: ../cli/src/devices.c:1018
msgid "Status of devices"
msgstr "ഡിവൈസàµà´•à´³àµà´Ÿàµ† അവസàµà´¥"
-#: ../cli/src/devices.c:979
+#: ../cli/src/devices.c:1049
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "പിശകàµ: '%s' ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1020 ../cli/src/devices.c:1185
-#: ../cli/src/devices.c:1326 ../cli/src/devices.c:1973
+#: ../cli/src/devices.c:1090 ../cli/src/devices.c:1255
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:2043
#, c-format
msgid "Error: Device '%s' not found."
msgstr "പിശകàµ: ഡിവൈസൠ'%s' ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/devices.c:1043
+#: ../cli/src/devices.c:1113
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "വിജയിചàµà´šàµ: ഡിവൈസൠ'%s' വിജയകരമായി വിഛേദിചàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ."
-#: ../cli/src/devices.c:1078
+#: ../cli/src/devices.c:1148
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "പിശകàµ: ഡിവൈസൠ'%s' (%s) വിഛേദികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s"
-#: ../cli/src/devices.c:1091
+#: ../cli/src/devices.c:1161
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "ഡിവൈസൠ'%s' വിജയകരമായി വിഛേദിചàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ.\n"
-#: ../cli/src/devices.c:1154
+#: ../cli/src/devices.c:1224
#, c-format
msgid "Error: iface has to be specified."
msgstr "പിശകàµ: iface നലàµâ€à´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµàµ."
-#: ../cli/src/devices.c:1284
+#: ../cli/src/devices.c:1354
#, c-format
msgid "Error: 'dev wifi': %s"
msgstr "പിശകàµ: 'dev wifi': %s"
-#: ../cli/src/devices.c:1286
+#: ../cli/src/devices.c:1356
#, c-format
msgid "Error: 'dev wifi': %s; allowed fields: %s"
msgstr "പിശകàµ: 'dev wifi': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-#: ../cli/src/devices.c:1309
+#: ../cli/src/devices.c:1379
msgid "WiFi scan list"
msgstr "WiFi പരിശോധന പടàµà´Ÿà´¿à´•"
-#: ../cli/src/devices.c:1346 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1416 ../cli/src/devices.c:1470
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "പിശകàµ: '%s' à´Žà´¨àµà´¨àµ bssid ഉളàµà´³ ആകàµà´¸àµ†à´¸àµà´¸àµ പോയിനàµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1363
+#: ../cli/src/devices.c:1433
#, c-format
msgid "Error: Device '%s' is not a WiFi device."
msgstr "പിശകàµ: '%s' ഡിവൈസൠഒരൠവൈഫൈ ഡിവൈസലàµà´²."
-#: ../cli/src/devices.c:1431 ../cli/src/devices.c:1477
+#: ../cli/src/devices.c:1501 ../cli/src/devices.c:1547
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr ""
"UUID '%s'-à´¯àµà´•àµà´•à´³àµà´³ കണകàµà´·à´¨àµâ€ തയàµà´¯à´¾à´±à´¾à´•àµà´•à´¿ '%s' ഡിവൈസിലàµâ€ "
"സജീവമാകàµà´•à´¿à´¯à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ\n"
-#: ../cli/src/devices.c:1436
+#: ../cli/src/devices.c:1506
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: (%d) %s."
-#: ../cli/src/devices.c:1461
+#: ../cli/src/devices.c:1531
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "പിശകàµ: à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™à´³àµâ€ വായികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: (%d) %s"
-#: ../cli/src/devices.c:1469
+#: ../cli/src/devices.c:1539
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"പിശകàµ: à´ªàµà´¤à´¿à´¯ കണകàµà´·à´¨àµâ€ ചേരàµâ€à´•àµà´•àµà´µà´¾à´¨àµâ€/സജീവമാകàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം : അപരിചിതമായ "
"പിശകàµ"
-#: ../cli/src/devices.c:1613
+#: ../cli/src/devices.c:1683
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "പിശകàµ: SSID à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ BSSID ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1636
+#: ../cli/src/devices.c:1706
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "പിശകàµ: bssid ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ മൂലàµà´²àµà´¯à´‚ '%s' ശരിയായൊരൠBSSID മൂലàµà´²àµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1660
+#: ../cli/src/devices.c:1730
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1399,78 +1403,78 @@ msgstr ""
"പിശകàµ: wep-key-type ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ മൂലàµà´²àµà´¯à´‚ '%s' അസാധàµà´µà´¾à´£àµàµ, 'key' "
"à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ 'phrase'."
-#: ../cli/src/devices.c:1700
+#: ../cli/src/devices.c:1770
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"പിശകàµ: BSSID (%s)-ലേകàµà´•àµà´³àµà´³ കണകàµà´·à´¨àµâ€ bssid ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ (%s)-à´²àµâ€ നിനàµà´¨àµà´‚ "
"à´µàµà´¯à´¤àµà´¯à´¾à´¸à´®àµà´£àµà´Ÿàµàµ."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:1776
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "പിശകàµ: പരാമീറàµà´±à´°àµâ€ '%s' SSID/BSSID à´…à´²àµà´²."
-#: ../cli/src/devices.c:1735
+#: ../cli/src/devices.c:1805
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "പിശകàµ: '%s' ഡിവൈസൠഒരൠവൈഫൈ ഡിവൈസലàµà´²."
-#: ../cli/src/devices.c:1737
+#: ../cli/src/devices.c:1807
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "പിശകàµ: വൈഫൈ ഡിവൈസൠലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/devices.c:1755
+#: ../cli/src/devices.c:1825
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "പിശകàµ: SSID '%s' ഉളàµà´³ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/devices.c:1757
+#: ../cli/src/devices.c:1827
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "പിശകàµ: '%s' à´Žà´¨àµà´¨ BSSID ഉളàµà´³ ആകàµà´¸àµ†à´¸àµà´¸àµ പോയിനàµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1855
+#: ../cli/src/devices.c:1925
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "പിശകàµ: 'dev wifi' കമാനàµâ€à´¡àµ '%s' ശരിയലàµà´²."
-#: ../cli/src/devices.c:1931
+#: ../cli/src/devices.c:2001
#, c-format
msgid "Error: 'dev wimax': %s"
msgstr "പിശകàµ: 'dev wimax': %s"
-#: ../cli/src/devices.c:1933
+#: ../cli/src/devices.c:2003
#, c-format
msgid "Error: 'dev wimax': %s; allowed fields: %s"
msgstr "പിശകàµ: 'dev wimax': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-#: ../cli/src/devices.c:1956
+#: ../cli/src/devices.c:2026
msgid "WiMAX NSP list"
msgstr "WiMAX NSP പടàµà´Ÿà´¿à´•"
-#: ../cli/src/devices.c:1993
+#: ../cli/src/devices.c:2063
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "പിശകàµ: '%s' à´Žà´¨àµà´¨ പേരിലàµà´³àµà´³ NSP ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/devices.c:2004
+#: ../cli/src/devices.c:2074
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "പിശകàµ: '%s' ഡിവൈസൠഒരൠവൈമാകàµà´¸àµ ഡിവൈസലàµà´²."
-#: ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2105
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "പിശകàµ: '%s' à´Žà´¨àµà´¨ nsp ഉളàµà´³ ആകàµà´¸àµ†à´¸àµà´¸àµ പോയിനàµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2132
#, c-format
msgid "Error: 'dev wimax' command '%s' is not valid."
msgstr "പിശകàµ: 'dev wimax' കമാനàµâ€à´¡àµ '%s' ശരിയലàµà´²."
-#: ../cli/src/devices.c:2115
+#: ../cli/src/devices.c:2185
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "പിശകàµ: 'dev' കമാനàµâ€à´¡àµ '%s' ശരിയലàµà´²."
@@ -1643,7 +1647,7 @@ msgstr "പിശകàµ: 'nm permissions': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨
msgid "NetworkManager permissions"
msgstr "NetworkManager à´…à´¨àµà´®à´¤à´¿à´•à´³àµâ€"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
#, c-format
msgid "Error: Couldn't connect to system bus: %s"
msgstr "പിശകàµ: സിസàµà´±àµà´±à´‚ bus-ലേകàµà´•àµàµ കണകàµà´Ÿàµ ചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %s"
@@ -1723,26 +1727,6 @@ msgstr "പിശകàµ: 'nm' കമാനàµâ€à´¡àµ '%s' ശരിയലàµà´
#: ../cli/src/nmcli.c:76
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -n[ocheck] don't check nmcli and "
-#| "NetworkManager versions\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1847,161 +1831,179 @@ msgstr "പിശകàµ: NMClient നിരàµâ€à´®àµà´®à´¿à´•àµà´•àµà´µà´¾à
msgid "Success"
msgstr "വിജയിചàµà´šàµ"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:603
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:529
+#: ../cli/src/settings.c:605
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-ബിറàµà´±àµ പാസàµà´«àµà´°àµ†à´¯à´¿à´¸àµ)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../cli/src/settings.c:608 ../cli/src/settings.c:736
#, c-format
msgid "%d (unknown)"
msgstr "%d (അപരിചിതം)"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:634
msgid "0 (unknown)"
msgstr "0 (അപരിചിതം)"
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:640
msgid "any, "
msgstr "à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚,"
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:642
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:644
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:646
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:648
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:650
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:652
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:654
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:656
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:658
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:660
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:662
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:588
+#: ../cli/src/settings.c:664
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:590
+#: ../cli/src/settings.c:666
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:684
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:690
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:692
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:694
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:730
#, c-format
msgid "%d (disabled)"
msgstr "%d (à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:732
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨ സജàµà´œà´‚, പബàµà´²à´¿à´•àµ à´à´ªà´¿)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:734
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨ സജàµà´œà´‚, താലàµâ€à´•àµà´•à´¾à´²à´¿à´• à´à´ªà´¿)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../cli/src/settings.c:746
+#| msgid "(none)"
+msgid "0 (none)"
+msgstr "0 (à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²)"
+
+#: ../cli/src/settings.c:752
+msgid "agent-owned, "
+msgstr "à´à´œà´¨àµà´±à´¿à´¨àµà´±à´‚ ഉടമസàµà´¥à´¯à´¿à´²àµâ€,"
+
+#: ../cli/src/settings.c:754
+#| msgid "not set"
+msgid "not saved, "
+msgstr "സൂകàµà´·à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´²,"
+
+#: ../cli/src/settings.c:756
+msgid "not required, "
+msgstr "ആവശàµà´¯à´®à´¿à´²àµà´²,"
+
+#: ../cli/src/settings.c:954 ../cli/src/settings.c:1173
+#: ../cli/src/settings.c:1914
msgid "auto"
msgstr "à´“à´Ÿàµà´Ÿàµ‹"
-#: ../cli/src/utils.c:103
+#: ../cli/src/utils.c:105
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "'0x%X' IP4 വിലാസം വാകàµà´¯à´¤àµà´¤à´¿à´²à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:133
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "'%s' IP6 വിലാസം വാകàµà´¯à´¤àµà´¤à´¿à´²à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:234
#, c-format
msgid "field '%s' has to be alone"
msgstr "ഫീളàµâ€à´¡àµ '%s' മാതàµà´°à´®à´¾à´¯à´¿à´°à´¿à´•àµà´•à´£à´‚"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:237
#, c-format
msgid "invalid field '%s'"
msgstr "തെറàµà´±à´¾à´¯ ഫീളàµâ€à´¡àµ '%s'"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:256
msgid "Option '--terse' requires specifying '--fields'"
msgstr "'--terse' à´à´šàµà´›à´¿à´•à´¤àµà´¤à´¿à´¨àµàµ '--fields' നലàµâ€à´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµàµ"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:260
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"'--terse' à´Žà´¨àµà´¨ à´à´šàµà´›à´¿à´•à´¤àµà´¤à´¿à´¨àµàµ à´ªàµà´°à´¤àµà´¯àµ‡à´• '--fields' à´à´šàµà´›à´¿à´•à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ, '%s' "
"à´…à´²àµà´²"
-#: ../cli/src/utils.c:468
+#: ../cli/src/utils.c:470
#, c-format
msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
msgstr ""
"പിശകàµ: org.freedesktop.DBus-à´¯àµà´•àµà´•àµà´³àµà´³ à´¡à´¿-ബസൠഒബàµà´œà´•àµà´Ÿàµ à´ªàµà´°àµ‹à´•àµà´¸à´¿ "
"തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²."
-#: ../cli/src/utils.c:476
+#: ../cli/src/utils.c:478
#, c-format
msgid "Error: NameHasOwner request failed: %s"
msgstr "പിശകàµ: NameHasOwner ആവശàµà´¯à´‚ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s"
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:523
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -2011,7 +2013,7 @@ msgstr ""
"ചേരàµà´¨àµà´¨à´¿à´²àµà´². à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ "
"ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ --nocheck ഉപയോഗിയàµà´•àµà´•àµà´•.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:532
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -2031,117 +2033,87 @@ msgstr "PEM കീ ഫയലിനàµàµ അവസാനമàµà´³àµà´³ à´±àµà´
msgid "Doesn't look like a PEM private key file."
msgstr "ഒരൠPEM à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഫയലàµâ€ പോലെയലàµà´²à´¿à´¤àµàµ."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr " ‌PEM ഫയലàµâ€ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "തെറàµà´±à´¾à´¯ PEM ഫയലàµâ€: Proc-രീതിയിലàµà´³àµà´³à´¤àµàµ ആദàµà´¯à´¤àµà´¤àµ† à´±àµà´±à´¾à´—ൠഅലàµà´²."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "തെറàµà´±à´¾à´¯ PEM ഫയലàµâ€: അപരിചിതമായ Proc-രീതിയിലàµà´³àµà´³ à´±àµà´±à´¾à´—ൠ'%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "തെറàµà´±à´¾à´¯ PEM ഫയലàµâ€: DEK-Info à´°à´£àµà´Ÿà´¾à´¤àµà´¤àµ† à´±àµà´±à´¾à´—ൠഅലàµà´²."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "തെറàµà´±à´¾à´¯ PEM ഫയലàµâ€: DEK-Info à´±àµà´±à´¾à´—à´¿à´²àµâ€ IV ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "തെറàµà´±à´¾à´¯ PEM ഫയലàµâ€: DEK-Info à´±àµà´±à´¾à´—à´¿à´²àµâ€ IV-à´¨àµà´±àµ† ശൈലി തെറàµà´±à´¾à´£àµàµ."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "തെറàµà´±à´¾à´¯ PEM ഫയലàµâ€: അപരിചിതമായ à´¸àµà´µà´•à´¾à´°àµà´¯ കീ സിഫരàµâ€ '%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകോഡൠചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´šàµà´š PKCS#8 à´¤àµà´Ÿà´•àµà´• à´±àµà´±à´¾à´—ൠ'%s' à´•à´£àµà´Ÿàµà´ªà´¿à´Ÿà´¿à´¯àµà´•àµà´•à´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´šàµà´š PKCS#8 അവസാന à´±àµà´±à´¾à´—ൠ'%s' à´•à´£àµà´Ÿàµà´ªà´¿à´Ÿà´¿à´¯àµà´•àµà´•à´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകോഡൠചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "‌സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±àµ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV-à´¨àµà´±àµ† à´µàµà´¯à´¾à´ªàµà´¤à´¿ ഈവനàµâ€ à´…à´•àµà´•à´¤àµà´¤à´¿à´²àµà´³àµà´³ ബൈറàµà´±àµà´•à´³à´¾à´¯à´¿à´°à´¿à´•àµà´•à´£à´‚."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV-à´²àµâ€ നോണàµâ€-ഹെകàµà´¸à´¾à´¡àµ†à´¸à´¿à´®à´²àµâ€ à´…à´•àµà´•à´™àµà´™à´³àµà´£àµà´Ÿàµàµ."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ സിഫരàµâ€ '%s' അപരിചിതം."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr ""
-"ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ à´¸àµà´µà´•à´¾à´°àµà´¯ കീ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ രീതി à´•à´£àµà´Ÿàµà´ªà´¿à´Ÿà´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±à´¿à´¨àµ à´¤àµà´Ÿà´•àµà´•à´¤àµà´¤à´¿à´²àµà´³àµà´³ à´±àµà´±à´¾à´—ൠ'%s' ലഭàµà´¯à´®à´²àµà´²."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±à´¿à´¨àµ à´’à´Ÿàµà´µà´¿à´²àµà´³àµà´³ à´±àµà´±à´¾à´—ൠ'%s' ലഭàµà´¯à´®à´²àµà´²."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±àµ ഡീകോഡൠചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
@@ -2160,103 +2132,93 @@ msgstr "MD5 à´Žà´žàµà´šà´¿à´¨àµâ€ ആരംഭികàµà´•àµà´µà´¾à´¨àµâ€
msgid "Invalid IV length (must be at least %zd)."
msgstr "തെറàµà´±à´¾à´¯ IV à´µàµà´¯à´¾à´ªàµà´¤à´¿ (à´•àµà´±à´žàµà´žà´¤àµàµ %zd ആയിരികàµà´•à´£à´‚)"
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ കീ ബഫറിനാവശàµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "ഡീകàµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
"ഡീകàµà´°à´¿à´ªàµà´·à´¨àµà´³àµà´³ സിമàµà´®àµ†à´Ÿàµà´°à´¿à´•àµ കീ സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ഡീകàµà´°à´¿à´ªàµà´·à´¨àµà´³àµà´³ IV സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: à´…à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´¤à´®à´¾à´¯ പാഢിങൠ"
"നീളം."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±à´¿à´™à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ,"
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr ""
"à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %"
"s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr ""
"à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµà´³àµà´³ സിമàµà´®àµ†à´Ÿàµà´°à´¿à´•àµ കീ സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµà´³àµà´³ IV സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "ഡേറàµà´±à´¾ à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±àµ ഡേറàµà´±à´¾ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±àµ ഡീകോഡൠചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 ഡീകോഡരàµâ€ ആരംഭികàµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 ഫയലàµâ€ ഡീകോഡൠചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 ഫയലàµâ€ ഉറപàµà´ªà´¾à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 ഡീകോഡരàµâ€ ആരംഭികàµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ഫയലàµâ€ ഡീകോഡൠചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %s"
@@ -2276,129 +2238,466 @@ msgstr "MD5 കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà
msgid "Invalid IV length (must be at least %d)."
msgstr "തെറàµà´±à´¾à´¯ IV നീളം (à´•àµà´±à´žàµà´žà´¤àµàµ %d ആയിരികàµà´•à´£à´‚)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ഡീകàµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ à´¸àµà´²àµ‹à´Ÿàµà´Ÿàµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ഡീകàµà´°à´¿à´ªàµà´·à´¨àµà´³àµà´³ സിമàµà´®àµ†à´Ÿàµà´°à´¿à´•àµ കീ സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ഡീകàµà´°à´¿à´ªàµà´·à´¨à´¾à´¯à´¿ IV സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ഡീകàµà´°à´¿à´ªàµà´·à´¨àµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ "
"ഡേറàµà´± വളരെ വലàµà´¤à´¾à´£àµàµ."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീയàµà´Ÿàµ† â€à´¡àµ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ ഉറപàµà´ªà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ à´¸àµà´²àµ‹à´Ÿàµà´Ÿàµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµà´³àµà´³ സിമàµà´®àµ†à´Ÿàµà´°à´¿à´•àµ കീ സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµà´³àµà´³ IV കീ സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤à´¤à´¿à´¨àµàµ ശേഷം à´…à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´¤à´®à´¾à´¯ ഡേറàµà´±à´¾"
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±àµ ഡീകോഡൠചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "രഹസàµà´¯à´µà´¾à´•àµà´•àµ UCS2-ലേകàµà´•àµ വേരàµâ€à´¤à´¿à´°à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 ഡീകോഡരàµâ€ ആരംഭികàµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 ഫയലàµâ€ ഡീകോഡൠചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 ഫയലàµâ€ ഉറപàµà´ªà´¾à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "വേഗതàµà´¤à´¿à´²àµâ€ ഡേറàµà´±à´¾ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2119 ../libnm-util/nm-setting-8021x.c:2136
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2246 ../libnm-util/nm-setting-8021x.c:2258
+#: ../libnm-util/nm-setting-8021x.c:2276 ../libnm-util/nm-setting-8021x.c:2288
+#: ../libnm-util/nm-setting-8021x.c:2312 ../libnm-util/nm-setting-8021x.c:2487
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bluetooth.c:171
+#: ../libnm-util/nm-setting-bond.c:368 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:674
+#: ../libnm-util/nm-setting-connection.c:690
+#: ../libnm-util/nm-setting-connection.c:743
+#: ../libnm-util/nm-setting-ip4-config.c:693
+#: ../libnm-util/nm-setting-ip4-config.c:703
+#: ../libnm-util/nm-setting-ip6-config.c:675
+#: ../libnm-util/nm-setting-ip6-config.c:685
+#: ../libnm-util/nm-setting-ip6-config.c:738
+#: ../libnm-util/nm-setting-olpc-mesh.c:128
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-vpn.c:388
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:792
+#: ../libnm-util/nm-setting-wireless.c:610
+#| msgid "Error: %s argument is missing."
+msgid "property is missing"
+msgstr "വിശേഷത ലഭàµà´¯à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-8021x.c:2126 ../libnm-util/nm-setting-8021x.c:2143
+#: ../libnm-util/nm-setting-8021x.c:2184 ../libnm-util/nm-setting-8021x.c:2201
+#: ../libnm-util/nm-setting-8021x.c:2252 ../libnm-util/nm-setting-8021x.c:2264
+#: ../libnm-util/nm-setting-8021x.c:2282 ../libnm-util/nm-setting-8021x.c:2294
+#: ../libnm-util/nm-setting-8021x.c:2318 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:681
+#: ../libnm-util/nm-setting-connection.c:750
+#: ../libnm-util/nm-setting-gsm.c:280 ../libnm-util/nm-setting-gsm.c:337
+#: ../libnm-util/nm-setting-gsm.c:346
+#: ../libnm-util/nm-setting-ip4-config.c:754
+#: ../libnm-util/nm-setting-ip4-config.c:763
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:397 ../libnm-util/nm-setting-vpn.c:407
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:822
+#: ../libnm-util/nm-setting-wireless-security.c:830
+#: ../libnm-util/nm-setting-wireless-security.c:854
+msgid "property is empty"
+msgstr "വിശേഷത കാലിയാണàµàµ"
+
+#: ../libnm-util/nm-setting-8021x.c:2154 ../libnm-util/nm-setting-8021x.c:2166
+#: ../libnm-util/nm-setting-8021x.c:2212 ../libnm-util/nm-setting-8021x.c:2224
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12-à´¨àµàµ '%s' വിശേഷതയàµà´®à´¾à´¯à´¿ പൊരàµà´¤àµà´¤à´®àµà´£àµà´Ÿà´¾à´¯à´¿à´°à´¿à´¯àµà´•àµà´•à´£à´‚"
+
+#: ../libnm-util/nm-setting-8021x.c:2462 ../libnm-util/nm-setting-8021x.c:2496
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:377
+#: ../libnm-util/nm-setting-infiniband.c:166
+#: ../libnm-util/nm-setting-infiniband.c:181
+#: ../libnm-util/nm-setting-ip4-config.c:745
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#: ../libnm-util/nm-setting-olpc-mesh.c:156
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:501
+#: ../libnm-util/nm-setting-wired.c:510
+#: ../libnm-util/nm-setting-wireless-security.c:873
+#: ../libnm-util/nm-setting-wireless-security.c:882
+#: ../libnm-util/nm-setting-wireless-security.c:890
+#: ../libnm-util/nm-setting-wireless-security.c:898
+#: ../libnm-util/nm-setting-wireless-security.c:906
+#: ../libnm-util/nm-setting-wireless-security.c:915
+#: ../libnm-util/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-wireless-security.c:933
+#: ../libnm-util/nm-setting-wireless-security.c:969
+#: ../libnm-util/nm-setting-wireless-security.c:979
+#: ../libnm-util/nm-setting-wireless.c:670
+#: ../libnm-util/nm-setting-wireless.c:679
+#: ../libnm-util/nm-setting-wireless.c:688
+msgid "property is invalid"
+msgstr "വിശേഷത തെറàµà´±à´¾à´£àµàµ"
+
+#: ../libnm-util/nm-setting-8021x.c:2521 ../libnm-util/nm-setting-8021x.c:2531
+#: ../libnm-util/nm-setting-8021x.c:2541 ../libnm-util/nm-setting-8021x.c:2551
+#: ../libnm-util/nm-setting-8021x.c:2561 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:179
+#: ../libnm-util/nm-setting-infiniband.c:190
+#: ../libnm-util/nm-setting-vlan.c:554 ../libnm-util/nm-setting-wired.c:543
+#: ../libnm-util/nm-setting-wireless-security.c:801
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid value for the property"
+msgstr "'%s', വിശേഷതയàµà´•àµà´•àµà´³àµà´³ ശരിയായൊരൠമൂലàµà´²àµà´¯à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-bluetooth.c:201
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ '%s' സജàµà´œàµ€à´•à´°à´£à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-bond.c:391
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "അസാധàµà´µà´¾à´¯ à´à´šàµà´›à´¿à´•à´‚ '%s' à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ അതിനàµà´±àµ† മൂലàµà´²àµà´¯à´‚ '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:410
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s', '%s' à´Žà´¨àµà´¨à´¿à´µà´¯à´¿à´²àµâ€ ഒരെണàµà´£à´®àµ‡ സജàµà´œà´®à´¾à´•àµà´•àµà´¾à´¨àµâ€ സാധàµà´¯à´®àµà´³àµà´³àµ‚"
+
+#: ../libnm-util/nm-setting-bond.c:421
+#, c-format
+msgid "setting '%s' is required"
+msgstr "'%s' സജàµà´œàµ€à´•à´°à´£à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-bond.c:430
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s', '%s'-à´¨àµà´³àµà´³ ശരിയായ മൂലàµà´²àµà´¯à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-bond.c:443
+#, c-format
+#| msgid "device '%s' not compatible with connection '%s'"
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s', '%s > 0'-മായി പൊരàµà´¤àµà´¤à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´¿à´²àµà´²"
+
+#: ../libnm-util/nm-setting-bond.c:454
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s', '%s'-à´¨àµà´³àµà´³ ശരിയായൊരൠകàµà´°à´®àµ€à´•à´°à´£à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-bond.c:467 ../libnm-util/nm-setting-bond.c:476
+#: ../libnm-util/nm-setting-bond.c:496 ../libnm-util/nm-setting-bond.c:532
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ കീ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+msgid "'%s' option requires setting '%s' option"
+msgstr "'%s' à´à´šàµà´›à´¿à´•à´¤àµà´¤à´¿à´¨àµàµ '%s' à´à´šàµà´›à´¿à´•à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM ഫയലàµâ€ ഉണàµà´Ÿà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+#: ../libnm-util/nm-setting-bond.c:508
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' à´à´šàµà´›à´¿à´•à´‚ കാലിയാണàµàµ"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:520
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr ""
-"PEM ഫയലിലേകàµà´•àµ IV സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ "
-"സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' ശരിയായൊരൠIPv4 വിലാസമലàµà´², '%s' à´à´šàµà´›à´¿à´•à´¤àµà´¤à´¿à´¨àµàµ"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:165
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "വിശേഷതയàµà´•àµà´•àµà´³àµà´³ ശരിയായ മൂലàµà´²àµà´¯à´®à´²àµà´² '%d' (<= %d ആയിരിയàµà´•àµà´•à´£à´‚)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "'%d' മൂലàµà´²àµà´¯à´‚ പരിധിയàµà´•àµà´•àµàµ à´ªàµà´±à´¤àµà´¤à´¾à´•àµà´¨àµà´¨àµ <%d-%d>"
+
+#: ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:732
+#: ../libnm-util/nm-setting-vlan.c:486
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' ശരിയായ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ നാമമലàµà´²"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "വിശേഷത കാലിയാണàµàµ"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-connection.c:697
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' ശരിയായ à´¯àµà´¯àµà´à´¡à´¿à´¯à´²àµà´²"
+
+#: ../libnm-util/nm-setting-connection.c:716
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s', '%s' à´Žà´¨àµà´¨ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ നാമവàµà´®à´¾à´¯à´¿ പൊരàµà´¤àµà´¤à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´¿à´²àµà´²"
+
+#: ../libnm-util/nm-setting-connection.c:760
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "കണകàµà´·à´¨à´¿à´²àµâ€ '%s' സജàµà´œàµ€à´•à´°à´£à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-connection.c:784
+#| msgid "The IP configuration is no longer valid"
+msgid "IPv4 configuration is not allowed for bonding slave"
+msgstr "IPv4 à´•àµà´°à´®àµ€à´•à´°à´£à´‚ ബോണàµà´Ÿà´¿à´™àµ à´¸àµà´²àµ‡à´µà´¿à´¨àµàµ à´…à´¨àµà´µà´¦à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²"
+
+#: ../libnm-util/nm-setting-connection.c:801
+#| msgid "The IP configuration is no longer valid"
+msgid "IPv6 configuration is not allowed for bonding slave"
+msgstr "IPv6 à´•àµà´°à´®àµ€à´•à´°à´£à´‚ ബോണàµà´Ÿà´¿à´™àµ à´¸àµà´²àµ‡à´µà´¿à´¨àµàµ à´…à´¨àµà´µà´¦à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²"
+
+#: ../libnm-util/nm-setting-gsm.c:293
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
msgstr ""
-"PEM ഫയലിലേകàµà´•àµ à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ കീ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ "
-"à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+"വിശേഷതയàµà´Ÿàµ† മൂലàµà´²àµà´¯à´‚ '%s' കാലിയാണàµàµ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ വളരെ ദൈരàµâ€à´˜àµà´¯à´®àµà´³àµà´³à´¤àµàµ (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:325
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s'-à´²àµâ€ അസാധàµà´µà´¾à´¯ à´…à´•àµà´·à´°à´™àµà´™à´³àµâ€ ([A-Za-z._-] ഉപയോഗിയàµà´•àµà´•àµà´•)"
+
+#: ../libnm-util/nm-setting-gsm.c:360
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' നീളം അസാധàµà´µà´¾à´£àµàµ (5 à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ 6 à´…à´•àµà´•à´™àµà´™à´³à´¾à´¯à´¿à´°à´¿à´¯àµà´•àµà´•à´£à´‚)"
+
+#: ../libnm-util/nm-setting-gsm.c:371
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' ഒരൠഅകàµà´•à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-ip4-config.c:714
+#: ../libnm-util/nm-setting-ip4-config.c:724
+#: ../libnm-util/nm-setting-ip4-config.c:734
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:707
+#: ../libnm-util/nm-setting-ip6-config.c:717
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "à´ˆ വിശേഷത '%s=%s'-à´¨àµàµ à´…à´¨àµà´µà´¦à´¨àµ€à´¯à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-ip4-config.c:777
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 വിലാസം അസാധàµ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:787
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 വിലാസതàµà´¤à´¿à´²àµâ€ അസാധàµà´µà´¾à´¯ à´ªàµà´°àµ€à´«à´¿à´•àµà´¸àµ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:803
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. റൂടàµà´Ÿàµ അസാധàµ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:813
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. റൂടàµà´Ÿà´¿à´¨àµàµ തെറàµà´±à´¾à´¯ à´ªàµà´°àµ€à´«à´¿à´•àµà´¸àµ"
+
+#: ../libnm-util/nm-setting-ip6-config.c:696
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s', %s=%s-à´¨àµàµ à´…à´¨àµà´µà´¦à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:137
+#: ../libnm-util/nm-setting-wireless.c:619
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "à´Žà´¸àµà´Žà´¸àµà´à´¡à´¿ à´µàµà´¯à´¾à´ªàµà´¤à´¿ <1-32> ബൈറàµà´±àµà´•à´³àµà´Ÿàµ† പരിധിയàµà´•àµà´•àµàµ à´ªàµà´±à´¤àµà´¤àµàµ"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:146
+#: ../libnm-util/nm-setting-wireless.c:659
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' ശരിയായൊരൠചാനലലàµà´²"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d', സാധàµà´¤à´¯àµà´³àµà´³ <128-16384> പരിധിയàµà´Ÿàµ† à´ªàµà´±à´¤àµà´¤àµàµ"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "à´ˆ വിശേഷത സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµàµ പൂജàµà´¯à´®à´²àµà´²à´¾à´¤àµà´¤ '%s' വിശേഷത ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' മൂലàµà´²àµà´¯à´‚ '%s=%s'-മായി പൊരàµà´¤àµà´¤à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´¿à´²àµà´²"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-vlan.c:519
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ഫയലàµâ€ ഡേറàµà´±à´¾à´¯àµà´•àµà´•àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' ഒരൠയàµà´¯àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ നാമമലàµà´²"
+
+#: ../libnm-util/nm-setting-vlan.c:532
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "വിശേഷത നിഷàµà´•à´°àµâ€à´·à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´², '%s:%s' ആകàµà´•à´¯àµà´®à´¿à´²àµà´²"
+
+#: ../libnm-util/nm-setting-vlan.c:545
+msgid "flags are invalid"
+msgstr "à´«àµà´²à´¾à´—àµà´•à´³àµâ€ അസാധàµà´µà´¾à´£àµàµ"
+
+#: ../libnm-util/nm-setting-wired.c:456
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' ശരിയായൊരൠഇഥരàµâ€à´¨àµ†à´±àµà´±àµ പോരàµâ€à´Ÿàµà´Ÿàµ മൂലàµà´²àµà´¯à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-wired.c:466
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' ശരിയായൊരൠഡൂപàµà´²àµ†à´•àµà´¸àµ മൂലàµà´²àµà´¯à´®à´²àµà´²"
+
+#: ../libnm-util/nm-setting-wired.c:476 ../libnm-util/nm-setting-wired.c:534
+msgid "is not a valid MAC address"
+msgstr "ശരിയായൊരൠമാകൠവിലാസമലàµà´²"
+
+#: ../libnm-util/nm-setting-wired.c:489
+#: ../libnm-util/nm-setting-wireless.c:700
+#: ../libnm-util/nm-setting-wireless.c:714
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' ശരിയായൊരൠമാകൠവിലാസമലàµà´²"
+
+#: ../libnm-util/nm-setting-wired.c:523
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid '%s' or its value '%s'"
+msgstr "തെറàµà´±à´¾à´¯ '%s' à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഇതിനàµà´±àµ† മൂലàµà´²àµà´¯à´‚ '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:813
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' à´¸àµà´°à´•àµà´·à´¯àµà´•àµà´•àµàµ '%s=%s' ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:842
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' à´¸àµà´°à´•àµà´·à´¯àµà´•àµà´•àµàµ '%s' സജàµà´œàµ€à´•à´°à´£à´¤àµà´¤à´¿à´¨àµà´±àµ† ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:863
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' മൂലàµà´²àµà´¯à´‚ <0-3> പരിധിയàµà´•àµà´•àµàµ à´ªàµà´±à´¤àµà´¤àµàµ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:960
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' കണകàµà´·à´¨àµà´•à´³àµâ€à´•àµà´•àµàµ à´ˆ വിശേഷതയിലàµâ€ '%s' ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:990
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s', '%s=%s' (WEP)-നൊപàµà´ªà´‚ മാതàµà´°à´®àµ‡ ഉപയോഗിയàµà´•àµà´•àµà´µà´¾à´¨àµâ€ സാധിയàµà´•àµà´•àµ‚"
+
+#: ../libnm-util/nm-setting-wireless.c:628
+#, c-format
+#| msgid "Error: Device '%s' is not a Wi-Fi device."
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' ശരിയായൊരൠവൈഫൈ മോഡലàµà´²"
+
+#: ../libnm-util/nm-setting-wireless.c:638
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' ശരിയായൊരൠബാനàµâ€à´¡à´²àµà´²"
+
+#: ../libnm-util/nm-setting-wireless.c:648
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "'%s' വിശേഷത സജàµà´œà´®à´¾à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµàµ"
+
+#: ../libnm-util/nm-setting-wireless.c:726
+#, c-format
+msgid "'%s' setting is required for the connection when the property is set"
+msgstr "വിശേഷത സജàµà´œà´®à´¾à´•àµà´•àµà´®àµà´ªàµ‹à´³àµâ€ '%s' സജàµà´œàµ€à´•à´°à´£à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2523,89 +2822,89 @@ msgstr ""
"സിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµà´±àµ† ഹോസàµà´±àµà´±àµà´¨à´¾à´®à´¤àµà´¤à´¿à´²àµâ€ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´¨àµà´¨à´¤àµàµ സിസàµà´±àµà´±à´‚ പോളിസി "
"തടയàµà´¨àµà´¨àµ"
-#: ../src/main.c:158
+#: ../src/main.c:130
#, c-format
msgid "Failed to set signal mask: %d"
msgstr "സിഗàµà´¨à´²àµâ€ മാസàµà´•àµ സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d."
-#: ../src/main.c:167
+#: ../src/main.c:139
#, c-format
msgid "Failed to create signal handling thread: %d"
msgstr "സിഗàµà´¨à´²àµâ€ കൈകാരàµà´¯à´‚ ചെയàµà´¯àµà´¨àµà´¨ സിഗàµà´¨à´²àµâ€ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം: %d"
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s à´¤àµà´±à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s ഇലേകàµà´•àµ à´Žà´´àµà´¤àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s à´…à´Ÿà´¯àµà´•àµà´•àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr ""
"നെറàµà´±àµâ€‹à´µà´°àµâ€à´•àµà´•àµ മാനേജരàµâ€ ആദàµà´¯à´®àµ‡ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´šàµà´šàµà´•àµŠà´£àµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµà´£àµà´Ÿàµ (pid %"
"ld)\n"
-#: ../src/main.c:363
+#: ../src/main.c:328
msgid "Print NetworkManager version and exit"
msgstr "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´±à´¿à´¨àµà´±àµ† പതിപàµà´ªàµ വിവരം കാണിചàµà´šàµ à´ªàµà´±à´¤àµà´¤àµ à´•à´Ÿà´•àµà´•àµà´•"
-#: ../src/main.c:364
+#: ../src/main.c:329
msgid "Don't become a daemon"
msgstr "ഒരൠഡെമണàµâ€ ആകേണàµà´Ÿ"
-#: ../src/main.c:365
+#: ../src/main.c:330
msgid "Make all warnings fatal"
msgstr "à´Žà´²àµà´²à´¾ à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµà´•à´³àµà´‚ à´¸àµà´ªàµà´°à´§à´¾à´¨à´®à´¾à´•àµà´•àµà´•"
-#: ../src/main.c:366
+#: ../src/main.c:331
msgid "Specify the location of a PID file"
msgstr "PID ഫയലിനàµà´±àµ† à´¸àµà´¥à´¾à´¨à´‚ നലàµâ€à´•àµà´•"
-#: ../src/main.c:366
+#: ../src/main.c:331
msgid "filename"
msgstr "à´ªàµà´°à´®à´¾à´£à´¨à´¾à´®à´‚"
-#: ../src/main.c:367
+#: ../src/main.c:332
msgid "State file location"
msgstr "à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµà´±àµ† à´¸àµà´¥à´¾à´¨à´‚ à´ªàµà´°à´¸àµà´¤à´¾à´µà´¿à´•àµà´•àµà´•"
-#: ../src/main.c:367
+#: ../src/main.c:332
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:368
+#: ../src/main.c:333
msgid "Config file location"
msgstr "à´•àµà´°à´®àµ€à´•à´°à´£ à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµà´±àµ† à´¸àµà´¥à´¾à´¨à´‚"
-#: ../src/main.c:368
+#: ../src/main.c:333
msgid "/path/to/config.file"
msgstr "/path/to/config.file"
-#: ../src/main.c:369
+#: ../src/main.c:334
msgid "List of plugins separated by ','"
msgstr "',' ഉപയോഗിചàµà´šàµàµ വേരàµâ€à´¤à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨ à´ªàµà´²à´—à´¿à´¨àµà´•à´³àµà´Ÿàµ† പടàµà´Ÿà´¿à´•"
-#: ../src/main.c:369
+#: ../src/main.c:334
msgid "plugin1,plugin2"
msgstr "plugin1,plugin2"
#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:371
+#: ../src/main.c:336
msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
msgstr "[ERR, WARN, INFO, DEBUG]-à´¨àµà´±àµ† ലോഗൠലവലàµâ€ à´’à´£àµâ€"
#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:374
+#: ../src/main.c:339
msgid ""
"Log domains separated by ',': any combination of\n"
" [NONE,HW,RFKILL,ETHER,WIFI,"
@@ -2625,28 +2924,28 @@ msgstr ""
"CORE,DEVICE,OLPC,WIMAX,\n"
" INFINIBAND,FIREWALL,ADSL]"
-#: ../src/main.c:380
+#: ../src/main.c:345
msgid "An http(s) address for checking internet connectivity"
msgstr "ഇനàµà´±à´°àµâ€à´¨àµ†à´±àµà´±àµ കണകàµà´±àµà´±à´¿à´µà´¿à´±àµà´±à´¿ പരിശോധിയàµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ http വിലാസം"
-#: ../src/main.c:381
+#: ../src/main.c:346
msgid "The interval between connectivity checks (in seconds)"
msgstr "കണകàµà´±àµà´±à´¿à´µà´¿à´±àµà´±à´¿ പരിശോധനകളàµà´Ÿàµ† ഇടവേള (സെകàµà´•à´¨àµâ€à´¡àµà´•à´³à´¿à´²àµâ€)"
-#: ../src/main.c:382
+#: ../src/main.c:347
msgid "The expected start of the response"
msgstr "മറàµà´ªà´Ÿà´¿à´¯àµà´Ÿàµ† à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´šàµà´š ആരംഭം"
-#: ../src/main.c:382
+#: ../src/main.c:347
msgid "Bingo!"
msgstr "à´¹àµà´±àµ‡!!"
-#: ../src/main.c:387
+#: ../src/main.c:352
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "à´ˆ à´ªàµà´²à´¾à´±àµà´±àµà´«àµ‹à´®à´¿à´²àµâ€ GModules പിനàµà´¤à´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²!\n"
-#: ../src/main.c:406
+#: ../src/main.c:371
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2660,44 +2959,44 @@ msgstr ""
"കാരàµâ€à´¡àµà´•à´³àµâ€à´•àµà´•àµà´³àµà´³ വയരàµâ€à´²àµ†à´¸àµà´¸àµ ആകàµà´¸à´¸àµà´¸àµ പോയിനàµà´±àµà´•à´³àµâ€ നലàµâ€à´•àµà´µà´¾à´¨àµâ€ ഇതàµàµ\n"
"ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµ† സഹായിയàµà´•àµà´•àµà´¨àµà´¨àµ."
-#: ../src/main.c:412
+#: ../src/main.c:377
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"തെറàµà´±à´¾à´¯ ഉപാധി. ശരിയായ കൂടàµà´¤à´²àµâ€ ഉപാധികളàµâ€à´•àµà´•à´¾à´¯à´¿ ദയവായി --help ഉപയോഗികàµà´•àµà´•.\n"
-#: ../src/main.c:422
+#: ../src/main.c:387
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr ""
"പിശകàµ: നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´•àµà´•à´¾à´¨àµâ€ നിങàµà´™à´³àµâ€ root "
"ആയിരികàµà´•àµ‡à´£àµà´Ÿà´¤àµ à´…à´¤àµà´¯à´¾à´µà´¶àµà´¯à´®à´¾à´£àµ\n"
-#: ../src/main.c:449
+#: ../src/main.c:420
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™à´³àµâ€ വായികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: (%d) %s\n"
-#: ../src/main.c:460
+#: ../src/main.c:431
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. ശരിയായ കൂടàµà´¤à´²àµâ€ ഉപാധികളàµâ€à´•àµà´•à´¾à´¯à´¿ ദയവായി --help ഉപയോഗികàµà´•àµà´•.\n"
-#: ../src/main.c:467
+#: ../src/main.c:438
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "അവസàµà´¥ ഫയലàµâ€ %s പാഴàµà´¸à´¿à´™àµ പരാജയം: (%d) %s\n"
-#: ../src/main.c:484
+#: ../src/main.c:455
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "ഡെമണൈസൠചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s [error %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:61
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
msgid "# Created by NetworkManager\n"
msgstr "# തയàµà´¯à´¾à´±à´¾à´•àµà´•à´¿à´¯à´¤àµàµ NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:68
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2706,29 +3005,29 @@ msgstr ""
"# %s-à´²àµâ€ നിനàµà´¨àµà´‚ കൂടàµà´Ÿà´¿à´šàµ‡à´°àµâ€à´¤àµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:264
msgid "no usable DHCP client could be found."
msgstr "ഉപയോഗികàµà´•àµà´µà´¾à´¨àµâ€ സാധികàµà´•àµà´¨àµà´¨ DHCP à´•àµà´²à´¯à´¨àµà´±àµ ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:273
msgid "'dhclient' could be found."
msgstr "'dhclient' ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:283
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:291
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "പിനàµà´¤à´£à´²à´­àµà´¯à´®à´²àµà´²à´¾à´¤àµà´¤ DHCP à´•àµà´²à´¯à´¨àµà´±àµ '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"à´•àµà´±à´¿à´ªàµà´ªàµàµ: libc റിസോളàµâ€à´µà´°àµâ€ 3 നെയിംസരàµâ€à´µà´±àµà´•à´³à´¿à´²àµâ€ കൂടതലàµâ€ പിനàµà´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´²àµà´²."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:378
msgid "The nameservers listed below may not be recognized."
msgstr "താഴെ പറഞàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨ നെയിംസരàµâ€à´µà´±àµà´•à´³àµâ€ തിരിചàµà´šà´±à´¿à´¯à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´µà´¯à´²àµà´²."
@@ -2737,125 +3036,137 @@ msgstr "താഴെ പറഞàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨ നെയിà
msgid "Unknown log level '%s'"
msgstr "അപരിചതമായ ലോഗൠലവലàµâ€ '%s'"
-#: ../src/logging/nm-logging.c:181
+#: ../src/logging/nm-logging.c:188
#, c-format
msgid "Unknown log domain '%s'"
msgstr "അപരിചിതമായ ലോഗൠഡൊമെയിനàµâ€ '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:280 ../src/nm-device-bt.c:351
+#: ../src/modem-manager/nm-modem-cdma.c:255
+#: ../src/modem-manager/nm-modem-broadband.c:512 ../src/nm-device-bt.c:331
#, c-format
msgid "CDMA connection %d"
msgstr "CDMA കണകàµà´·à´¨àµâ€ %d"
-#: ../src/modem-manager/nm-modem-gsm.c:558 ../src/nm-device-bt.c:347
+#: ../src/modem-manager/nm-modem-gsm.c:531
+#: ../src/modem-manager/nm-modem-broadband.c:490 ../src/nm-device-bt.c:327
#, c-format
msgid "GSM connection %d"
msgstr "GSM കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-bond.c:192
+#: ../src/nm-device-bond.c:166
#, c-format
msgid "Bond connection %d"
msgstr "Bond കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/nm-device-adsl.c:196
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/nm-device-bridge.c:164
+#, c-format
+#| msgid "Bond connection %d"
+msgid "Bridge connection %d"
+msgstr "à´¬àµà´°à´¿à´¡àµà´œàµ കണകàµà´·à´¨àµâ€ %d"
+
+#: ../src/nm-device-bt.c:302
#, c-format
msgid "PAN connection %d"
msgstr "PAN കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/nm-device-bt.c:335
#, c-format
msgid "DUN connection %d"
msgstr "DUN കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/nm-device-ethernet.c:1294
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/nm-device-ethernet.c:1294 ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Wired കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/nm-device-infiniband.c:270
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/nm-device-olpc-mesh.c:304
#, c-format
msgid "Mesh %d"
msgstr "മെഷൠ%d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/nm-device-vlan.c:310
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-manager.c:662
+#: ../src/nm-manager.c:750
#, c-format
msgid "VPN connection %d"
msgstr "വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:162 ../src/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:671
#, c-format
msgid "error processing netlink message: %s"
msgstr "നെറàµà´±àµà´²à´¿à´™àµà´•àµ സനàµà´¦àµ‡à´¶à´‚ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´®àµà´ªàµ‹à´³àµâ€ പിശകàµ: %s"
-#: ../src/nm-netlink-monitor.c:251
+#: ../src/nm-netlink-monitor.c:265
msgid "error occurred while waiting for data on socket"
msgstr "സോകàµà´•à´±àµà´±à´¿à´²àµâ€ ഡേറàµà´±à´¾à´¯àµà´•àµà´•à´¾à´¯à´¿ കാതàµà´¤à´¿à´°à´¿à´•àµà´•àµà´®àµà´ªàµ‹à´³àµâ€ പിശകàµà´£àµà´Ÿà´¾à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:310
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"ലിങàµà´•à´¿à´¨àµà´±àµ† അവസàµà´¥ നിരീകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ നെറàµà´±àµà´²à´¿à´™àµà´•àµà´®à´¾à´¯à´¿ കണകàµà´Ÿàµ ചെയàµà´¯àµà´µà´¾à´¨àµâ€ "
"സാധàµà´¯à´®à´²àµà´²: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:321
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "നെറàµà´±àµà´²à´¿à´™àµà´•àµ ഹാനàµâ€à´¡à´¿à´²àµâ€ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:364 ../src/nm-netlink-monitor.c:424
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
"ലിങàµà´•à´¿à´¨àµà´±àµ† അവസàµà´¥ നിരീകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ നെറàµà´±àµà´²à´¿à´™àµà´•àµ ഹാനàµâ€à´¡à´¿à´²àµâ€ "
"à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s"
-#: ../src/nm-netlink-monitor.c:415
+#: ../src/nm-netlink-monitor.c:449
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
"ലിങàµà´•à´¿à´¨àµà´±àµ† അവസàµà´¥ നിരീകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ നെറàµà´±àµà´²à´¿à´™àµà´•àµ ലിങàµà´•àµ കാഷേ "
"à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s "
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:541
#, c-format
msgid "unable to join netlink group: %s"
msgstr "നെറàµà´±àµà´²à´¿à´™àµà´•àµ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´²àµâ€ ചേരàµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
+#: ../src/nm-netlink-monitor.c:647 ../src/nm-netlink-monitor.c:660
#, c-format
msgid "error updating link cache: %s"
msgstr "ലിങàµà´•àµ കാഷേ പരിഷàµà´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
+#: ../src/settings/plugins/ifcfg-rh/reader.c:110
msgid "System"
msgstr "സിസàµà´±àµà´±à´‚"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3663
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3680
msgid "Bond"
msgstr "Bond"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3860
+msgid "Bridge"
+msgstr "à´¬àµà´°à´¿à´¡àµà´œàµ"
+
#: ../test/nm-online.c:111
#, c-format
msgid "\rConnecting"
@@ -2884,6 +3195,46 @@ msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
"തെറàµà´±à´¾à´¯ ഉപാധി. ശരിയായ കൂടàµà´¤à´²àµâ€ ഉപാധികളàµâ€à´•àµà´•à´¾à´¯à´¿ ദയവായി --help ഉപയോഗികàµà´•àµà´•."
+#~ msgid "Not enough memory to store PEM file data."
+#~ msgstr " ‌PEM ഫയലàµâ€ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Not enough memory to store private key data."
+#~ msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Not enough memory to store certificate data."
+#~ msgstr "‌സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±àµ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Not enough memory to store the IV."
+#~ msgstr "IV സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Not enough memory to decrypt private key."
+#~ msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Not enough memory to store decrypted private key."
+#~ msgstr "ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ à´¸àµà´µà´•à´¾à´°àµà´¯ കീ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Not enough memory for decrypted key buffer."
+#~ msgstr "ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ കീ ബഫറിനാവശàµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Could not allocate memory for encrypting."
+#~ msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±à´¿à´™à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ,"
+
+#~ msgid "Not enough memory to make encryption key."
+#~ msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ കീ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#~ msgid "Could not allocate memory for PEM file creation."
+#~ msgstr "PEM ഫയലàµâ€ ഉണàµà´Ÿà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+
+#~ msgid "Could not allocate memory for writing IV to PEM file."
+#~ msgstr "PEM ഫയലിലേകàµà´•àµ IV സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+
+#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
+#~ msgstr ""
+#~ "PEM ഫയലിലേകàµà´•àµ à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ കീ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+
+#~ msgid "Could not allocate memory for PEM file data."
+#~ msgstr "PEM ഫയലàµâ€ ഡേറàµà´±à´¾à´¯àµà´•àµà´•àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+
#~ msgid "state: %s\n"
#~ msgstr "അവസàµà´¥: %s\n"
@@ -2902,9 +3253,6 @@ msgstr ""
#~ msgid "Device state: %d (%s)\n"
#~ msgstr "ഡിവൈസിനàµà´±àµ† അവസàµà´¥: %d (%s)\n"
-#~ msgid "not set"
-#~ msgstr "സജàµà´œà´®à´²àµà´²"
-
#~ msgid "Failed to initialize SIGTERM pipe: %d"
#~ msgstr "SIGTERM പൈപൠആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d"
diff --git a/po/mr.po b/po/mr.po
index 1e465d85d..5a59536d3 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -1,361 +1,455 @@
# translation of NetworkManager.master.po to Marathi
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
-# Sandeep Shedmake <sshedmak@redhat.com>, 2009.
-# Sandeep Shedmake <sshedmak@redhat.com>, 2010, 2011, 2012.
+# Sandeep Shedmake <sshedmak@redhat.com>, 2009, 2013.
+# Sandeep Shedmake <sshedmak@redhat.com>, 2010, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-11-13 15:25+0000\n"
-"PO-Revision-Date: 2012-11-22 13:46+0530\n"
+"POT-Creation-Date: 2014-01-23 15:24+0000\n"
+"PO-Revision-Date: 2014-01-26 23:56+0630\n"
"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
-"Language-Team: Marathi <maajhe-sanganak@freelists.org>\n"
+"Language-Team: Marathi <kde-i18n-doc@kde.org>\n"
"Language: mr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Project-Style: gnome\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:179
+#: ../cli/src/connections.c:201
msgid "GROUP"
msgstr "GROUP"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADDRESS"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ROUTE"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMAIN"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "अवैध IPv4 पतà¥à¤¤à¤¾ '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <1-32> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "अवैध गेटवे '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "अवैध IPv6 पतà¥à¤¤à¤¾ '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+#| msgid "invalid prefix '%s'; <0-128> allowed"
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <1-128> सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "अवैध IPv4 राउट '%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <0-32> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "अवैध पà¥à¤¢à¥€à¤² हॉप पतà¥à¤¤à¤¾ '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "अवैध मेटà¥à¤°à¤¿à¤• '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "अवैध IPv6 राउट '%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <0-128> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "अवà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¥€à¤¤"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "अनà¥à¤ªà¤²à¥à¤¬à¤§"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "खंडीत"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "जोडणी (तयार करत आहे)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "जोडणी (संरचीत करत आहे)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "जोडणी (ओळख पटवणे आवशà¥à¤¯à¤• आहे)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "जोडणी (IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ करत आहे)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "जोडणी करत आहे (IP जोडणी तपासत आहे)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "जोडणी (दà¥à¤¸à¤°à¥€ जोडणी सà¥à¤°à¥‚ करत आहे)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "जोडणी यशसà¥à¤µà¥€"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:635
+#: ../cli/src/common.c:639 ../cli/src/connections.c:527
msgid "deactivating"
msgstr "बंद करत आहे"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "जोडणी अपयशी"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:638
-#: ../cli/src/connections.c:661 ../cli/src/connections.c:1353
-#: ../cli/src/devices.c:645 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:451
-#: ../src/main.c:470
+#: ../cli/src/common.c:643 ../cli/src/connections.c:532
+#: ../cli/src/connections.c:555 ../cli/src/connections.c:1668
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2257
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1114 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "अपरिचीत"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "कारण दिले नाही"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2466
+#, c-format
msgid "Unknown error"
msgstr "अपरिचीत तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "साधन आता वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¥€à¤¤ आहे"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "साधन आता वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ अशकà¥à¤¯ आहे"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "साधनाला संरचनाकरीता सजà¥à¤œ करणे अशकà¥à¤¯"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr "IP संरचना आरकà¥à¤·à¤¿à¤¤ (पतà¥à¤¤à¤¾, वेळसमापà¥à¤¤à¤¿, इतà¥à¤¯à¤¾à¤¦à¤¿ अनà¥à¤ªà¤²à¤¬à¥à¤§) करणे अशकà¥à¤¯"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "IP संरचना यापà¥à¤¢à¥‡ वैध नाही"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "गोपनीयता आवशà¥à¤¯à¤•, परंतॠपà¥à¤°à¤µà¤²à¥‡ नाही"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X सपà¥à¤ªà¤¿à¤•à¤‚ट खंडीत केले"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X सपà¥à¤²à¤¿à¤•à¤‚ट संरचना अपयशी"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X सपà¥à¤²à¤¿à¤•à¤‚ट अपयशी"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X सपà¥à¤²à¤¿à¤•à¤‚टला ओळख पटवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ जासà¥à¤¤ वेळ लागला"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "PPP सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP सरà¥à¤µà¥à¤¹à¤¿à¤¸ खंडीत"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP अपयशी"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट अपयशी"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "शेअरà¥à¤¡ जोडणी सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "शेअरà¥à¤¡ जोडणी सरà¥à¤µà¥à¤¹à¤¿à¤¸ अपयशी"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "ऑटोIP सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "ऑटोIP सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "ऑटोIP सरà¥à¤µà¥à¤¹à¤¿à¤¸ अपयशी"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "लाइन वà¥à¤¯à¤¸à¥à¤¥ आहे"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "डायल सूर आढळले नाही"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "कॅरिअर सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करणे अशकà¥à¤¯"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "डायलिंग विनंतीची वेळसमापà¥à¤¤à¤¿"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "डायलिंग पà¥à¤°à¤¯à¤¤à¥à¤¨ अपयशी"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "मोडेम पà¥à¤°à¤¾à¤°à¤‚भिकरण अपयशी"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ APN नीवडणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "नेटवरà¥à¤•à¤•à¤°à¥€à¤¤à¤¾ शोधत आहे"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "नेटवरà¥à¤• नोंदणी नकारले"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "नेटवरà¥à¤• नोंदणीची वेळसमापà¥à¤¤à¤¿"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "विनंती केलेलà¥à¤¯à¤¾ नेटवरà¥à¤•à¤¸à¤¹ नोंदणी अपयशी"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN तपासणी अपयशी"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "साधनकरीता आवशà¥à¤¯à¤• फरà¥à¤®à¤µà¥‡à¤…र कदाचित आढळले नाही"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "साधन काढून टाकले"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager पूरà¥à¤£à¤ªà¤£à¥‡ निषà¥à¤•à¥à¤°à¥€à¤¯ à¤à¤¾à¤²à¥‡"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "साधनाची सकà¥à¤°à¤¿à¤¯ जोडणी खंडीत à¤à¤¾à¤²à¥€"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "वापरकरà¥à¤¤à¤¾ किंवा कà¥à¤²à¤¾à¤à¤‚टतरà¥à¤«à¥‡ साधन खंडीत केले"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "कॅरिअर किंवा दà¥à¤µà¤¾ बदलले"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "साधनाची असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी गृहीत धरले"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "सपà¥à¤²à¤¿à¤•à¤‚ट आता उपलबà¥à¤§ आहे"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "मोडेम आढळले नाही"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ जोडणी अपयशी किंवा वेळ समापà¥à¤¤à¤¿ आढळली"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM मोडेमचे SIM कारà¥à¤¡ अंतरà¥à¤­à¥à¤¤ केले नाही"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM मोडेमचे SIM PIN आवशà¥à¤¯à¤•"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM मोडेमचे SIM PUK आवशà¥à¤¯à¤•"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM मोडेमचे SIM चà¥à¤•à¤¿à¤šà¥‡"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "इंफिनिबà¤à¤¡ साधन जोडणी मोडकरीता समरà¥à¤¥à¤¨ पà¥à¤°à¤µà¤¤ नाही"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "जोडणीचे अवलंबन अपयशी"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "RFC 2684 इथरनेट ओवà¥à¤¹à¤° ADSL बà¥à¤°à¤¿à¤œà¤¸à¤¹ अडचण"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager अनà¥à¤ªà¤²à¤¬à¥à¤§"
-#: ../cli/src/common.c:558
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi नेटवरà¥à¤• आढळले नाही"
-#: ../cli/src/common.c:561
-#| msgid "A seconadary connection of the base connection failed"
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "बेस जोडणीचे सेकंडरि जोड अपयशी"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:295 ../cli/src/devices.c:311
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:477
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB किंवा FCoE सेटअप अपयशी"
+
+#: ../cli/src/common.c:820
+#| msgid "connection failed"
+msgid "teamd control failed"
+msgstr "teamd नियंतà¥à¤°à¤£ अपयशी"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "अपरिचीत"
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "अवैध पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ मॅप '%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ '%s' वैध नाही (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+#| msgid "'%s=%s' is not a valid configuration for '%s'"
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' वैध गट संरचना किंवा फाइन नाव नाही."
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "सेटिंगचे नाव? "
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ नाव? "
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "जोडणी पà¥à¤°à¤•à¤¾à¤° दà¥à¤¯à¤¾: "
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:107 ../cli/src/devices.c:131 ../cli/src/devices.c:141
-#: ../cli/src/devices.c:151 ../cli/src/devices.c:165 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:217 ../cli/src/devices.c:226
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:180
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NAME"
#. 0
#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
msgid "UUID"
msgstr "UUID"
@@ -363,1020 +457,3266 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:204
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:202
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TYPE"
#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#. 14
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "READONLY"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:188
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#. 2
-#: ../cli/src/connections.c:131
-msgid "DEVICES"
-msgstr "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
+#: ../cli/src/devices.c:202
+msgid "ACTIVE"
+msgstr "ACTIVE"
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:71 ../cli/src/devices.c:87
+#: ../cli/src/devices.c:184 ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#. 9
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:116 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:78 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:73 ../cli/src/devices.c:96
+#: ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATE"
+#. 10
+#: ../cli/src/connections.c:79
+#| msgid "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "ACTIVE-PATH"
+
+#. 2
+#: ../cli/src/connections.c:182
+msgid "DEVICES"
+msgstr "DEVICES"
+
#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:184
msgid "DEFAULT"
msgstr "DEFAULT"
#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:185
msgid "DEFAULT6"
msgstr "DEFAULT6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:186
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#. 4
+#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:138
+#. 5
+#. 18
+#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PATH"
#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:190
msgid "ZONE"
msgstr "ZONE"
#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:191
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "GENERAL"
-
-#. 0
-#: ../cli/src/connections.c:149
-msgid "IP"
-msgstr "IP"
-
#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:203
msgid "USERNAME"
msgstr "USERNAME"
#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:204
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:205
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:206
msgid "VPN-STATE"
msgstr "VPN-STATE"
#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:207
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:261
#, c-format
#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down | delete }\n"
-#| "\n"
-#| " list [id <id> | uuid <id>]\n"
-#| " status [id <id> | uuid <id> | path <path>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-#| "nowait] [--timeout <timeout>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
-#| " delete id <id> | uuid <id>\n"
+#| "Usage: nmcli connection { COMMAND | help }\n"
+#| " COMMAND := { show | up | down | delete }\n"
+#| "\n"
+#| " show configured [[ id | uuid | path ] <ID>]\n"
+#| "\n"
+#| " show active [[ id | uuid | path | apath ] <ID>]\n"
+#| "\n"
+#| " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+#| "<name>]\n"
+#| "\n"
+#| " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
+#| "\n"
+#| " down [ id | uuid | path | apath ] <ID>\n"
+#| "\n"
+#| " add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+#| "\n"
+#| " modify [ id | uuid | path ] <ID> <setting>.<property> <value>\n"
+#| "\n"
+#| " edit [ id | uuid | path ] <ID> | [type <new_con_type>] [con-name "
+#| "<new_con_name>]\n"
+#| "\n"
+#| " delete [ id | uuid | path ] <ID>\n"
+#| "\n"
+#| " reload\n"
+#| "\n"
+#| "\n"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
"वापर: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:283
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con list': %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"List in-memory and on-disk connection profiles, some of which may also be\n"
+"active if a device is using that connection profile. Without a parameter, "
+"all\n"
+"profiles are listed. When --active option is specified, only the active\n"
+"profiles are shown.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Show details for specified connections. By default, both static "
+"configuration\n"
+"and active connection data are displayed. It is possible to filter the "
+"output\n"
+"using global '--fields' option. Refer to the manual page for more "
+"information.\n"
+"When --active option is specified, only the active profiles are taken into\n"
+"account.\n"
+msgstr ""
+"वापर: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"इन-मेमरि आणि ऑन-डिसà¥à¤• जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸ दाखवा, साधन\n"
+"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤šà¤¾ वापर करत असलà¥à¤¯à¤¾à¤¸, काही कदाचीत सकà¥à¤°à¥€à¤¯ देखील असू शकतात. बाब "
+"विना, "
+"सरà¥à¤µ\n"
+"पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸ दाखवले जातात. --active परà¥à¤¯à¤¾à¤¯ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केलà¥à¤¯à¤¾à¤µà¤°, फकà¥à¤¤\n"
+"सकà¥à¤°à¥€à¤¯ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸ दाखवले जातात.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ जोडणà¥à¤¯à¤¾à¤‚करिता तपशील दाखवा. पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤à¤ªà¤£à¥‡, दोनà¥à¤¹à¥€ सà¥à¤Ÿà¥…टिक"
+"संरचना\n"
+"आणि सकà¥à¤°à¥€à¤¯ जोडणी माहिती दाखविली जाते. गà¥à¤²à¥‹à¤¬à¤² '--fields' परà¥à¤¯à¤¾à¤¯à¤šà¤¾ वापर करून "
+"आउटपà¥à¤Ÿ\n"
+"फिलà¥à¤Ÿà¤° करणे शकà¥à¤¯ आहे. अधिक माहितीकरिता "
+"मॅन पृषà¥à¤  पहा.\n"
+"--active परà¥à¤¯à¤¾à¤¯ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केलà¥à¤¯à¤¾à¤µà¤°, फकà¥à¤¤ सकà¥à¤°à¥€à¤¯ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸à¤šà¤¾à¤š विचार\n"
+"होतो.\n"
-#: ../cli/src/connections.c:253 ../cli/src/connections.c:613
+#: ../cli/src/connections.c:305
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con list': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/connections.c:261
-msgid "Connection details"
-msgstr "जोडणीचे तपशील"
-
-#: ../cli/src/connections.c:486
-msgid "never"
-msgstr "कधिच नाही"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"साधनावरील जोडणी सकà¥à¤°à¥€à¤¯ करा. सकà¥à¤°à¥€à¤¯à¤œà¥‹à¤—ी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² "
+"तà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾\n"
+"नाव, UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ ओळखले जाते.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"जोडणीसह साधन सकà¥à¤°à¥€à¤¯ करा. NetworkManager तरà¥à¤«à¥‡ सà¥à¤µ जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²\n"
+"नीवडले जाते.\n"
+"\n"
+"ifname - जोडणी सकà¥à¤°à¥€à¤¯ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€à¤šà¥‡ साधन ठरवतो\n"
+"ap - जोडणीसाठीचे AP ठरवतो (फकà¥à¤¤ वाय-फायकरिताच वैध)\n"
+"nsp - जोडणीसाठीचे NSP ठरवतो (फकà¥à¤¤ वायमॅकà¥à¤¸à¤•à¤°à¤¿à¤¤à¤¾à¤š वैध)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:787
-#: ../cli/src/settings.c:907 ../cli/src/settings.c:1189
-#: ../cli/src/settings.c:1190 ../cli/src/settings.c:1192
-#: ../cli/src/settings.c:1194 ../cli/src/settings.c:1195
-#: ../cli/src/settings.c:1326 ../cli/src/settings.c:1327
-#: ../cli/src/settings.c:1328 ../cli/src/settings.c:1329
-#: ../cli/src/settings.c:1406 ../cli/src/settings.c:1407
-#: ../cli/src/settings.c:1408 ../cli/src/settings.c:1409
-#: ../cli/src/settings.c:1410 ../cli/src/settings.c:1411
-#: ../cli/src/settings.c:1412 ../cli/src/settings.c:1413
-#: ../cli/src/settings.c:1414 ../cli/src/settings.c:1415
-#: ../cli/src/settings.c:1416 ../cli/src/settings.c:1417
-#: ../cli/src/settings.c:1418 ../cli/src/settings.c:1489
-msgid "yes"
-msgstr "होय"
+#: ../cli/src/connections.c:326
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"साधनापासून जोडणी निषà¥à¤•à¥à¤°à¥€à¤¯ करा (साधनाला पà¥à¤¢à¥€à¤² सà¥à¤µ-सकà¥à¤°à¥€à¤¯à¤¤à¤¾à¤ªà¤¾à¤¸à¥‚न टाळलà¥à¤¯à¤¾à¤µà¤¿à¤¨à¤¾\n"
+"). नाव,\n"
+"UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ निषà¥à¤•à¥à¤°à¥€à¤¯à¤œà¥‹à¤—ी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² ओळखले जाते.\n"
+"\n"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:714
-#: ../cli/src/settings.c:787 ../cli/src/settings.c:907
-#: ../cli/src/settings.c:1189 ../cli/src/settings.c:1190
-#: ../cli/src/settings.c:1192 ../cli/src/settings.c:1194
-#: ../cli/src/settings.c:1195 ../cli/src/settings.c:1326
-#: ../cli/src/settings.c:1327 ../cli/src/settings.c:1328
-#: ../cli/src/settings.c:1329 ../cli/src/settings.c:1406
-#: ../cli/src/settings.c:1407 ../cli/src/settings.c:1408
-#: ../cli/src/settings.c:1409 ../cli/src/settings.c:1410
-#: ../cli/src/settings.c:1411 ../cli/src/settings.c:1412
-#: ../cli/src/settings.c:1413 ../cli/src/settings.c:1414
-#: ../cli/src/settings.c:1415 ../cli/src/settings.c:1416
-#: ../cli/src/settings.c:1417 ../cli/src/settings.c:1418
-#: ../cli/src/settings.c:1489
-msgid "no"
-msgstr "नाही"
+#: ../cli/src/connections.c:339
+#, c-format
+#| msgid ""
+#| "Usage: nmcli connection add { OPTIONS | help }\n"
+#| " OPTIONS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+#| "\n"
+#| " COMMON_OPTIONS:\n"
+#| " type <type>\n"
+#| " ifname <interface name> | \"*\"\n"
+#| " [con-name <connection name>]\n"
+#| " [autoconnect yes|no]\n"
+#| "\n"
+#| " TYPE_SPECIFIC_OPTIONS:\n"
+#| " ethernet: [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " wifi: [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| " [ssid <SSID>]\n"
+#| "\n"
+#| " wimax: [mac <MAC address>]\n"
+#| " [nsp <NSP>]\n"
+#| "\n"
+#| " gsm: apn <APN>]\n"
+#| " [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " cdma: [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " infiniband: [mac <MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| " [transport-mode datagram | connected]\n"
+#| "\n"
+#| " [parent <ifname>]\n"
+#| "\n"
+#| " [p-key <IPoIB P_Key>]\n"
+#| "\n"
+#| " bluetooth: [addr <bluetooth address>]\n"
+#| " [bt-type panu|dun-gsm|dun-cdma]\n"
+#| " vlan: dev <parent device (connection UUID, ifname, or MAC)\n"
+#| " [id <VLAN id>]\n"
+#| " [flags <VLAN flags>]\n"
+#| " [ingress <ingress priority mapping>]\n"
+#| " [egress <egress priority mapping>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " bond: [mode balance-rr (0) | active-backup (1) | balance-xor "
+#| "(2) | broadcast (3) |\n"
+#| " 802.3ad (4) | balance-tlb (5) | balance-alb "
+#| "(6)]\n"
+#| " [miimon <num>]\n"
+#| " [downdelay <num>]\n"
+#| " [updelay <num>]\n"
+#| " [arp-interval <num>]\n"
+#| " [arp-ip-target <num>]\n"
+#| "\n"
+#| " bond-slave: master <master (ifname or connection UUID)\n"
+#| "\n"
+#| " bridge: [stp yes|no>]\n"
+#| " [priority <num>]\n"
+#| " [forward-delay <2-30>]\n"
+#| " [hello-time <1-10>]\n"
+#| " [max-age <6-40>]\n"
+#| " [ageing-time <0-1000000>]\n"
+#| "\n"
+#| " bridge-slave: master <master (ifname or connection UUID)\n"
+#| " [priority <0-63>]\n"
+#| " [path-cost <1-65535>]\n"
+#| " [hairpin yes|no]\n"
+#| "\n"
+#| " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+#| " [user <username>]\n"
+#| "\n"
+#| " olpc-mesh: ssid <SSID>\n"
+#| " [channel <1-13>]\n"
+#| " [dhcp-anycast <MAC address>]\n"
+#| "\n"
+#| " IP_OPTIONS:\n"
+#| " [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+#| " [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
-#: ../cli/src/connections.c:562
-msgid "Connection list"
-msgstr "जोडणी सूची"
-
-#: ../cli/src/connections.c:575 ../cli/src/connections.c:1112
-#: ../cli/src/connections.c:1650 ../cli/src/connections.c:1665
-#: ../cli/src/connections.c:1674 ../cli/src/connections.c:1684
-#: ../cli/src/connections.c:1696 ../cli/src/connections.c:1804
-#: ../cli/src/connections.c:1906 ../cli/src/devices.c:1122
-#: ../cli/src/devices.c:1132 ../cli/src/devices.c:1250
-#: ../cli/src/devices.c:1258 ../cli/src/devices.c:1622
-#: ../cli/src/devices.c:1629 ../cli/src/devices.c:1643
-#: ../cli/src/devices.c:1650 ../cli/src/devices.c:1667
-#: ../cli/src/devices.c:1678 ../cli/src/devices.c:1899
-#: ../cli/src/devices.c:1906
+#: ../cli/src/connections.c:416
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s घटक आढळले नाही."
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤®à¤§à¥€à¤² à¤à¤• गà¥à¤£à¤§à¤°à¥à¤® संपादित करा.\n"
+"नाव, UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² ओळखले जाते.\n"
+"\n"
-#: ../cli/src/connections.c:588
+#: ../cli/src/connections.c:428
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s - यापà¥à¤°à¤•à¤¾à¤°à¤šà¥€ जोडणी आढळली नाही."
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"संवादासà¥à¤ªà¤¦ संपादकात असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² संपादित करा.\n"
+"नाव, UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² ओळखले जाते\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"संवादासà¥à¤ªà¤¦ संपादकात नवीन जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² समाविषà¥à¤Ÿ करा.\n"
+"\n"
-#: ../cli/src/connections.c:594 ../cli/src/connections.c:1709
-#: ../cli/src/connections.c:1821 ../cli/src/connections.c:1913
-#: ../cli/src/devices.c:906 ../cli/src/devices.c:986 ../cli/src/devices.c:1146
-#: ../cli/src/devices.c:1264 ../cli/src/devices.c:1691
-#: ../cli/src/devices.c:1912
+#: ../cli/src/connections.c:444
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "अपरिचीत घटक: %s\n"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² नषà¥à¤Ÿ करा.\n"
+"नाव, UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² ओळखले जाते.\n"
+"\n"
-#: ../cli/src/connections.c:603
+#: ../cli/src/connections.c:456
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: वैध घटक निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection reload { help }\n"
+"\n"
+"डिसà¥à¤•à¤ªà¤¾à¤¸à¥‚न सरà¥à¤µ जोडणी फाइलà¥à¤¸ पà¥à¤¨à¥à¤¹à¤¾ लोड करा.\n"
+"\n"
-#: ../cli/src/connections.c:618 ../cli/src/connections.c:2009
-#: ../cli/src/devices.c:2123 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:465
#, c-format
-msgid "Error: %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s."
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"वापर: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"डिसà¥à¤•à¤ªà¤¾à¤¸à¥‚न लोड किंवा पà¥à¤¨à¥à¤¹à¤¾ लोड करा. जोडणी फाइल सà¥à¤µà¤¤à¤ƒ संपादित केलà¥à¤¯à¤¾à¤¨à¤‚तर\n"
+"याचा वापर करा आणि NetworkManagerला या"
+"सरà¥à¤µà¤¾à¤¤ नवीन\n"
+"सà¥à¤¤à¤°à¤µà¤¿à¤·à¤¯à¥€ माहिती आहे, याची खातà¥à¤°à¥€ करा.\n"
+"\n"
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:523
msgid "activating"
msgstr "बंद करत आहे"
-#: ../cli/src/connections.c:633
+#: ../cli/src/connections.c:525
msgid "activated"
msgstr "सकà¥à¤°à¤¿à¤¯ केले"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:529
+msgid "deactivated"
+msgstr "निषà¥à¤•à¥à¤°à¥€à¤¯ केले"
+
+#: ../cli/src/connections.c:541
msgid "VPN connecting (prepare)"
msgstr "VPN जोडणी (तयार करा)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:543
msgid "VPN connecting (need authentication)"
msgstr "VPN जोडणी (ओळख पटवणे आवशà¥à¤¯à¤• आहे)"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:545
msgid "VPN connecting"
msgstr "VPN जोडणी"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:547
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN जोडणी (IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ करत आहे)"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:549
msgid "VPN connected"
msgstr "VPN जोडणी यशसà¥à¤µà¥€"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:551
msgid "VPN connection failed"
msgstr "VPN जोडणी अपयशी"
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:553
msgid "VPN disconnected"
msgstr "VPN जोडणी खंडीत à¤à¤¾à¤²à¥€"
-#: ../cli/src/connections.c:712 ../cli/src/connections.c:722
+#: ../cli/src/connections.c:636
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤šà¥‡ तपशील"
+
+#: ../cli/src/connections.c:648 ../cli/src/connections.c:1045
+#, c-format
+#| msgid "Error: 'device show': %s"
+msgid "Error: 'connection show': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'connection show': %s"
+
+#: ../cli/src/connections.c:842
+msgid "never"
+msgstr "कधिच नाही"
+
+#. "CAPABILITIES"
+#: ../cli/src/connections.c:843 ../cli/src/connections.c:844
+#: ../cli/src/connections.c:846 ../cli/src/connections.c:905
+#: ../cli/src/connections.c:906 ../cli/src/connections.c:908
+#: ../cli/src/connections.c:6320 ../cli/src/devices.c:604
+#: ../cli/src/devices.c:654 ../cli/src/devices.c:796 ../cli/src/devices.c:797
+#: ../cli/src/devices.c:798 ../cli/src/devices.c:831 ../cli/src/devices.c:860
+#: ../cli/src/devices.c:861 ../cli/src/devices.c:862 ../cli/src/devices.c:863
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:865 ../cli/src/devices.c:866
+#: ../cli/src/network-manager.c:442
+msgid "yes"
+msgstr "होय"
+
+#: ../cli/src/connections.c:843 ../cli/src/connections.c:844
+#: ../cli/src/connections.c:846 ../cli/src/connections.c:905
+#: ../cli/src/connections.c:906 ../cli/src/connections.c:908
+#: ../cli/src/connections.c:6320 ../cli/src/devices.c:604
+#: ../cli/src/devices.c:654 ../cli/src/devices.c:796 ../cli/src/devices.c:797
+#: ../cli/src/devices.c:798 ../cli/src/devices.c:831 ../cli/src/devices.c:860
+#: ../cli/src/devices.c:861 ../cli/src/devices.c:862 ../cli/src/devices.c:863
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:865 ../cli/src/devices.c:866
+#: ../cli/src/network-manager.c:444
+msgid "no"
+msgstr "नाही"
+
+#: ../cli/src/connections.c:901 ../cli/src/connections.c:911
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con status': %s"
+#: ../cli/src/connections.c:1033
+#| msgid "Active connection details"
+msgid "Activate connection details"
+msgstr "जोडणी तपशील सकà¥à¤°à¥€à¤¯ करा"
-#: ../cli/src/connections.c:918 ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1266
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con status': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/connections.c:926
-msgid "Active connection details"
-msgstr "सकà¥à¤°à¥€à¤¯ जोडणीचे तपशील"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s आणि %s, किंवा %s,%s"
-#: ../cli/src/connections.c:1062 ../cli/src/connections.c:1724
-#: ../cli/src/connections.c:1836 ../cli/src/connections.c:1927
-#: ../cli/src/devices.c:933 ../cli/src/devices.c:995 ../cli/src/devices.c:1161
-#: ../cli/src/devices.c:1294 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1941 ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1281 ../cli/src/connections.c:1289
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: NetworkManager कारà¥à¤¯à¤°à¤¤ आहे, हे शोधणे अशकà¥à¤¯: %s."
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone'"
+msgstr "'%s' वेगळे असायला हवे"
-#: ../cli/src/connections.c:1066 ../cli/src/connections.c:1728
-#: ../cli/src/connections.c:1840 ../cli/src/connections.c:1931
-#: ../cli/src/devices.c:937 ../cli/src/devices.c:999 ../cli/src/devices.c:1165
-#: ../cli/src/devices.c:1298 ../cli/src/devices.c:1717
-#: ../cli/src/devices.c:1945 ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1320 ../cli/src/connections.c:2046
+#: ../cli/src/connections.c:2106 ../cli/src/connections.c:7800
+#: ../cli/src/connections.c:7916 ../cli/src/connections.c:8009
+#: ../cli/src/connections.c:8037 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1403
+#: ../cli/src/devices.c:1538 ../cli/src/devices.c:1675
+#: ../cli/src/devices.c:2115 ../cli/src/devices.c:2414
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: NetworkManager कारà¥à¤¯à¤°à¤¤ नाही."
-#: ../cli/src/connections.c:1098
-msgid "Active connections"
-msgstr "सकà¥à¤°à¤¿à¤¯ जोडणी"
+#. Add headers
+#: ../cli/src/connections.c:1350
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager सकà¥à¤°à¥€à¤¯ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1351
+#| msgid "NetworkManager went to sleep"
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸"
+
+#: ../cli/src/connections.c:1388 ../cli/src/connections.c:1991
+#: ../cli/src/connections.c:2007 ../cli/src/connections.c:2016
+#: ../cli/src/connections.c:2026 ../cli/src/connections.c:2123
+#: ../cli/src/connections.c:7771 ../cli/src/connections.c:7947
+#: ../cli/src/devices.c:1633 ../cli/src/devices.c:1641
+#: ../cli/src/devices.c:2028 ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2049 ../cli/src/devices.c:2056
+#: ../cli/src/devices.c:2073 ../cli/src/devices.c:2081
+#: ../cli/src/devices.c:2277 ../cli/src/devices.c:2373
+#: ../cli/src/devices.c:2380
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' सकà¥à¤°à¥€à¤¯ जोडणी नाही."
+msgid "Error: %s argument is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s बाब आढळले नाही."
+
+#: ../cli/src/connections.c:1439
+#, c-format
+#| msgid "Error: %s - no such connection."
+msgid "Error: %s - no such connection profile."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s - यापà¥à¤°à¤•à¤¾à¤°à¤šà¥‡ जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² नाही."
-#: ../cli/src/connections.c:1128
+#: ../cli/src/connections.c:1455 ../cli/src/connections.c:2059
+#: ../cli/src/connections.c:8015 ../cli/src/connections.c:8056
+#: ../cli/src/connections.c:8203 ../cli/src/devices.c:2256
+#: ../cli/src/devices.c:2630 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत घटक: %s"
+msgid "Error: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s."
-#: ../cli/src/connections.c:1235
+#: ../cli/src/connections.c:1550
#, c-format
msgid "no active connection on device '%s'"
msgstr "साधन '%s' वरील सकà¥à¤°à¤¿à¤¯ जोडणी आढळली नाही"
-#: ../cli/src/connections.c:1243
+#: ../cli/src/connections.c:1558
msgid "no active connection or device"
msgstr "सकà¥à¤°à¤¿à¤¯ जोडणी किंवा साधन आढळले नाही"
-#: ../cli/src/connections.c:1314
+#: ../cli/src/connections.c:1629
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "साधन '%s' जोडणी '%s' सह सहतà¥à¤µ नाही"
-#: ../cli/src/connections.c:1317
+#: ../cli/src/connections.c:1632
#, c-format
msgid "no device found for connection '%s'"
msgstr "जोडणी '%s' करीता साधन आढळले नाही"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1644
msgid "unknown reason"
msgstr "अपरिचीत कारण"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1646 ../cli/src/network-manager.c:288
msgid "none"
msgstr "काहिच नाही"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1648
msgid "the user was disconnected"
msgstr "वापरकरà¥à¤¤à¤¾ खंडीत à¤à¤¾à¤²à¥‡"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1650
msgid "the base network connection was interrupted"
msgstr "बेस नेटवरà¥à¤• जोडणी खंडीत à¤à¤¾à¤²à¥‡"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1652
msgid "the VPN service stopped unexpectedly"
msgstr "VPN सेवा अनपेकà¥à¤·à¥€à¤¤à¤°à¤¿à¤¤à¥à¤¯à¤¾ थांबली"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1654
msgid "the VPN service returned invalid configuration"
msgstr "VPN सेवाने अवैध संरचना रिटरà¥à¤¨ केली"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1656
msgid "the connection attempt timed out"
msgstr "जोडणी पà¥à¤°à¤¯à¤¤à¥à¤¨à¤¾à¤šà¥€ वेळ समापà¥à¤¤à¥€ आढळली"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1658
msgid "the VPN service did not start in time"
msgstr "VPN सेवा वेळेवर सà¥à¤°à¥‚ à¤à¤¾à¤²à¥€ नाही"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1660
msgid "the VPN service failed to start"
msgstr "VPN सेवा सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1662
msgid "no valid VPN secrets"
msgstr "वैध VPN गोपणीयता आढळले नाही"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1664
msgid "invalid VPN secrets"
msgstr "अवैध VPN गोपणीयता"
-#: ../cli/src/connections.c:1351
+#: ../cli/src/connections.c:1666
msgid "the connection was removed"
msgstr "जोडणी काढून टाकली"
-#: ../cli/src/connections.c:1368 ../cli/src/connections.c:1573
+#: ../cli/src/connections.c:1683 ../cli/src/connections.c:1839
+#: ../cli/src/connections.c:6224
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "जोडणी यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सà¥à¤°à¥‚ केले (D-Bus सकà¥à¤°à¤¿à¤¯ मारà¥à¤—: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1373 ../cli/src/connections.c:1474
+#: ../cli/src/connections.c:1688
#, c-format
msgid "Error: Connection activation failed."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../cli/src/connections.c:1398
+#: ../cli/src/connections.c:1713
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN जोडणी यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सà¥à¤°à¥‚ केले (D-Bus सकà¥à¤°à¤¿à¤¯ मारà¥à¤—: %s)\n"
-#: ../cli/src/connections.c:1406
+#: ../cli/src/connections.c:1720
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s."
-#: ../cli/src/connections.c:1503 ../cli/src/devices.c:1055
+#: ../cli/src/connections.c:1738 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: वेळसमापà¥à¤¤à¥€ %d सेकंद समापà¥à¤¤."
-#: ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:1803
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: सकà¥à¤°à¥€à¤¯ होणà¥à¤¯à¤¾à¤ªà¥‚रà¥à¤µà¥€ साधन '%s' सà¥à¤²à¥‡à¤µà¥à¤¸à¤•à¤°à¤¿à¤¤à¤¾ वाट पहात आहे."
+
+#: ../cli/src/connections.c:1823
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s"
-#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1812
-#: ../cli/src/connections.c:1940
+#: ../cli/src/connections.c:1928 ../cli/src/connections.c:2060
+#| msgid "(unknown error)"
+msgid "unknown error"
+msgstr "अपरिचीत तà¥à¤°à¥à¤Ÿà¥€"
+
+#: ../cli/src/connections.c:1936
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी: %s."
+#| msgid "Unknown log level '%s'"
+msgid "unknown device '%s'."
+msgstr "अपरिचीत साधन '%s'."
+
+#: ../cli/src/connections.c:1941
+#| msgid "no active connection or device"
+msgid "neither a valid connection nor device given"
+msgstr "à¤à¤•à¤¤à¤° वैध जोडणी किंवा साधन दिले नाही"
-#: ../cli/src/connections.c:1704 ../cli/src/devices.c:1140
-#: ../cli/src/devices.c:1686
+#: ../cli/src/connections.c:1979 ../cli/src/connections.c:2091
+#: ../cli/src/connections.c:7923
+msgid "Connection (name, UUID, or path): "
+msgstr "जोडणी (नाव, UUID, किंवा मारà¥à¤—): "
+
+#: ../cli/src/connections.c:2035 ../cli/src/devices.c:1171
+#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
+#: ../cli/src/devices.c:2386
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: वेळसमापà¥à¤¤à¥€à¤šà¥‡ मà¥à¤²à¥à¤¯ '%s' वैध नाही."
+msgid "Unknown parameter: %s\n"
+msgstr "अपरिचीत घटक: %s\n"
+
+#: ../cli/src/connections.c:2068
+msgid "preparing"
+msgstr "तयार करत आहे"
-#: ../cli/src/connections.c:1717 ../cli/src/connections.c:1829
-#: ../cli/src/connections.c:1920
+#: ../cli/src/connections.c:2096 ../cli/src/connections.c:7928
+#: ../cli/src/connections.c:8043
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: id किंवा uuid निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे."
+msgid "Error: No connection specified."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केली नाही."
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:2133
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: योगà¥à¤¯ साधन आढळले नाही: %s."
+msgid "Error: '%s' is not an active connection."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' सकà¥à¤°à¥€à¤¯ जोडणी नाही."
-#: ../cli/src/connections.c:1751
+#: ../cli/src/connections.c:2445 ../cli/src/utils.c:507
#, c-format
-msgid "Error: No suitable device found."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: योगà¥à¤¯ साधन आढळले नाही."
+msgid "'%s' not among [%s]"
+msgstr "'%s' हे [%s] पैकी नाही"
-#: ../cli/src/connections.c:1865
+#: ../cli/src/connections.c:2527
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "सावधान: जोडणी सकà¥à¤°à¤¿à¤¯ नाही\n"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s': '%s' वैध %s MAC पतà¥à¤¤à¤¾ नाही."
+
+#: ../cli/src/connections.c:2528 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "इंफिनिबà¤à¤¡"
+
+#: ../cli/src/connections.c:2528 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "इथरनेट"
-#: ../cli/src/connections.c:1879
+#: ../cli/src/connections.c:2551
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी नषà¥à¤Ÿ करणे अपयशी: %s"
+#| msgid "Error: 'mtu': '%s' is not valid."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'mtu': '%s' वैध MTU नाही."
-#: ../cli/src/connections.c:2000
+#: ../cli/src/connections.c:2567
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con' आदेश '%s' वैध नाही."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'parent': '%s' वैध इंटरफेस नाही."
-#: ../cli/src/connections.c:2068
+#: ../cli/src/connections.c:2588
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: D-Bus सह जोडणी करणे अशकà¥à¤¯."
+#| msgid "Error: 'p-key': '%s' is not valid."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'p-key': '%s' वैध इनफिनिबà¤à¤¡ P_KEY नाही."
-#: ../cli/src/connections.c:2076
+#: ../cli/src/connections.c:2604
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: पà¥à¤°à¤£à¤¾à¤²à¥€à¤šà¥€ संयोजना पà¥à¤°à¤¾à¤ªà¥à¤¤ करणे अशकà¥à¤¯."
+#| msgid "Error: 'parent': '%s' is not a valid interface name."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"तà¥à¤°à¥à¤Ÿà¥€: 'mode': '%s' वैध इनफिनिबà¤à¤¡ टà¥à¤°à¤¾à¤à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ मोड [डाटागà¥à¤°à¤¾à¤®, जà¥à¤³à¤²à¥‡à¤²à¥‡]."
-#: ../cli/src/connections.c:2086
+#: ../cli/src/connections.c:2620
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: सेटिंगà¥à¤¸à¥ सरà¥à¤µà¥à¤¹à¤¿à¤¸ कारà¥à¤¯à¤°à¤¤ नाही."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'फà¥à¤²à¥…गà¥à¤¸': '%s' वैध नाही; <0-7>चा वापर करा."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:108 ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2642
+#, c-format
+#| msgid "Error: 'egress': '%s' is not valid; %s "
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s': '%s' वैध नाही; %s "
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2749
+#, c-format
+#| msgid "Error: '%s': '%s' is not valid; use <%d-%d>."
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s': '%s' वैध नाही; <%u-%u> याचा वापर करा."
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2763
+msgid "ethernet"
+msgstr "इथरनेट"
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2763 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "वाय-फाय"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2766
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ३ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#. 4
-#: ../cli/src/devices.c:87
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../cli/src/connections.c:2767 ../cli/src/connections.c:2821
+#: ../cli/src/connections.c:2943 ../cli/src/connections.c:2989
+#: ../cli/src/connections.c:3049 ../cli/src/connections.c:3117
+#: ../cli/src/connections.c:3280 ../cli/src/connections.c:3376
+#: ../cli/src/connections.c:3458
+#| msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ ते पà¥à¤°à¤µà¤¾à¤¯à¤šà¥‡ आहेत? (होय किंवा नाही) [होय] "
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2775 ../cli/src/connections.c:2829
+#: ../cli/src/connections.c:2956 ../cli/src/connections.c:3057
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
-#. 6
-#: ../cli/src/devices.c:89
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2786 ../cli/src/connections.c:2840
+#: ../cli/src/connections.c:2919 ../cli/src/connections.c:2967
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2797
+msgid "Cloned MAC [none]: "
+msgstr "कà¥à¤²à¥‹à¤¨ केलेले MAC [none]: "
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2820
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'इनफिनिबà¤à¤¡' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ५ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2851
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "टà¥à¤°à¤¾à¤‚सà¥à¤ªà¥‹à¤°à¥à¤Ÿ मोड (डाटागà¥à¤°à¤¾à¤® किंवा जोडणी केलेले) [डाटागà¥à¤°à¤¾à¤®]: "
-#. 10
-#: ../cli/src/devices.c:93
-msgid "BOND"
-msgstr "BOND"
+#: ../cli/src/connections.c:2864
+#| msgid "Interface name: "
+msgid "Parent interface [none]: "
+msgstr "पॅरेंट संवाद [काहीही नाही]: "
-#. 11
-#: ../cli/src/devices.c:94
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2875
+msgid "P_KEY [none]: "
+msgstr "P_KEY [काहीही नाही]: "
+
+#: ../cli/src/connections.c:2885
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'parent' निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले असताना 'p-key' अनिवारà¥à¤¯ आहे.\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2910
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
+
+#: ../cli/src/connections.c:2911 ../cli/src/connections.c:3013
+#: ../cli/src/connections.c:3232 ../cli/src/connections.c:3434
+#| msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ ते पà¥à¤°à¤µà¤¾à¤¯à¤šà¥‡? (होय किंवा नाही) [होय] "
+
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:2942
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "'PPPoE' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ४ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
+
+#: ../cli/src/connections.c:2950 ../cli/src/connections.c:2998
+#| msgid "Password: "
+msgid "Password [none]: "
+msgstr "पासवरà¥à¤¡ [none]: "
+
+#: ../cli/src/connections.c:2952
+msgid "Service [none]: "
+msgstr "सेवा [काहीही नाही]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:2988
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "'मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ २ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
+
+#: ../cli/src/connections.c:2996 ../cli/src/connections.c:3441
+msgid "Username [none]: "
+msgstr "वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ [none]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3012
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "'बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
+
+#: ../cli/src/connections.c:3021
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ पà¥à¤°à¤•à¤¾à¤° (panu, dun-gsm किंवा dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:3029
+#, c-format
+#| msgid "Error: 'p-key': '%s' is not valid."
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'bt-type': '%s' वैध बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ पà¥à¤°à¤•à¤¾à¤° नाही.\n"
+
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:3048
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ४ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
+
+#: ../cli/src/connections.c:3068
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN फà¥à¤²à¥…गà¥à¤œ (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:3079
+msgid "Ingress priority maps [none]: "
+msgstr "इंगà¥à¤°à¥‡à¤¸ पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ मॅपà¥à¤¸ [none]: "
+
+#: ../cli/src/connections.c:3090
+msgid "Egress priority maps [none]: "
+msgstr "à¤à¤—à¥à¤°à¥‡à¤¸ पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ मॅपà¥à¤¸ [none]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:3116
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "'बाà¤à¤¡' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
+
+#: ../cli/src/connections.c:3126
+msgid "Bonding mode [balance-rr]: "
+msgstr "बाà¤à¤¡à¤¿à¤‚ग मोड [balance-rr]: "
+
+#: ../cli/src/connections.c:3142
+msgid "Bonding primary interface [none]: "
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• संवादची बांधणी करत आहे [none]: "
+
+#: ../cli/src/connections.c:3145
+#, c-format
+#| msgid "Error: 'parent': '%s' is not a valid interface name."
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'primary': '%s' वैध संवाद नाव नाही.\n"
+
+#: ../cli/src/connections.c:3153
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "मॉनिटरिंग मोडची बांधणी करत आहे (miimon किंवा arp) [miimon]: "
+
+#: ../cli/src/connections.c:3158
+#, c-format
+#| msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' वैध मॉनिटरिंग मोड नाही; '%s' किंवा '%s' चा वापर करा.\n"
+
+#: ../cli/src/connections.c:3167
+msgid "Bonding miimon [100]: "
+msgstr "miimon [100] ची बांधणी करत आहे: "
+
+#: ../cli/src/connections.c:3170
+#, c-format
+#| msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'miimon': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <0-%u> नाही.\n"
+
+#: ../cli/src/connections.c:3178
+msgid "Bonding downdelay [0]: "
+msgstr "downdelay [0] ची बांधणी करत आहे: "
+
+#: ../cli/src/connections.c:3181
+#, c-format
+#| msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'downdelay': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <0-%u> नाही.\n"
+
+#: ../cli/src/connections.c:3189
+msgid "Bonding updelay [0]: "
+msgstr "updelay [0] ची बांधणी करत आहे: "
+
+#: ../cli/src/connections.c:3192
+#, c-format
+#| msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'updelay': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <0-%u> नाही.\n"
+
+#: ../cli/src/connections.c:3201
+msgid "Bonding arp-interval [0]: "
+msgstr "arp-interval [0] ची बांधणी करत आहे: "
+
+#: ../cli/src/connections.c:3204
+#, c-format
+#| msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'arp-interval': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <0-%u> नाही.\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3212
+msgid "Bonding arp-ip-target [none]: "
+msgstr "arp-ip-target [none] ची बांधणी करत आहे: "
+
+#. Ask for optional 'team' arguments.
+#: ../cli/src/connections.c:3231
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "'%s' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
+
+#: ../cli/src/connections.c:3240
+#| msgid "The IP configuration is no longer valid"
+msgid "Team JSON configuration [none]: "
+msgstr "टिम JSON संरचना [काहीही नाही]: "
+
+#: ../cli/src/connections.c:3259
+msgid "team"
+msgstr "टिम"
+
+#: ../cli/src/connections.c:3265
+msgid "team-slave"
+msgstr "team-slave"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3279
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "'bridge' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ६ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
+
+#: ../cli/src/connections.c:3289
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP सà¥à¤°à¥‚ करा (होय किंवा नाही) [होय]: "
+
+#: ../cli/src/connections.c:3293
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'stp': '%s'.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3301
+msgid "STP priority [128]: "
+msgstr "STP पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ [128]: "
+
+#: ../cli/src/connections.c:3305
+#, c-format
+#| msgid "Error: '%s': '%s' is not valid; use <%d-%d>."
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'priority': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <0-%d> नाही.\n"
+
+#: ../cli/src/connections.c:3313
+msgid "Forward delay [15]: "
+msgstr "फॉरवरà¥à¤¡ डिले [15]: "
+
+#: ../cli/src/connections.c:3317
+#, c-format
+#| msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'forward-delay': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <2-30> नाही.\n"
+
+#: ../cli/src/connections.c:3326
+msgid "Hello time [2]: "
+msgstr "हलो वेळ [2]: "
+
+#: ../cli/src/connections.c:3330
+#, c-format
+#| msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'hello-time': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <1-10> नाही.\n"
+
+#: ../cli/src/connections.c:3338
+msgid "Max age [20]: "
+msgstr "कमाल वय [20]: "
+
+#: ../cli/src/connections.c:3342
+#, c-format
+#| msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'max-age': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <6-40> नाही.\n"
+
+#: ../cli/src/connections.c:3350
+msgid "MAC address ageing time [300]: "
+msgstr "MAC पतà¥à¤¤à¤¾ अजिंग वेळ [300]: "
+
+#: ../cli/src/connections.c:3354
+#, c-format
+#| msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'ageing-time': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <0-1000000> नाही.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3375
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "'bridge-slave' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ३ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
+
+#: ../cli/src/connections.c:3384
+msgid "Bridge port priority [32]: "
+msgstr "बà¥à¤°à¤¿à¤œ पोरà¥à¤Ÿ पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ [32]: "
+
+#: ../cli/src/connections.c:3397
+msgid "Bridge port STP path cost [100]: "
+msgstr "बà¥à¤°à¤¿à¤œ पोरà¥à¤Ÿ STP पाथ कॉसà¥à¤Ÿ [100]: "
+
+#: ../cli/src/connections.c:3411
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "हैरपिन (होय किंवा नाही) [होय]: "
+
+#: ../cli/src/connections.c:3415
+#, c-format
+#| msgid "Error: 'hairpin': %s."
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'hairpin': '%s'.\n"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:3433
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "'VPN' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3457
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "'OLPC Mesh' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ २ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
+
+#: ../cli/src/connections.c:3466
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC मेश वाहिनी [1]: "
+
+#: ../cli/src/connections.c:3469
+#, c-format
+#| msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'channel': '%s' वैध कà¥à¤°à¤®à¤¾à¤‚क <1-13> नाही.\n"
+
+#: ../cli/src/connections.c:3477
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP à¤à¤¨à¤¿à¤•à¤¾à¤¸à¥à¤Ÿ MAC पतà¥à¤¤à¤¾ [none]: "
+
+#: ../cli/src/connections.c:3525
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 पतà¥à¤¤à¤¾ (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3527
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 पतà¥à¤¤à¤¾ (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3545
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " पतà¥à¤¤à¤¾ यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ समाविषà¥à¤Ÿ केले: %s %s\n"
+
+#: ../cli/src/connections.c:3547
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " सावधानता: पतà¥à¤¤à¤¾ आधीपासूनच उपलबà¥à¤§ आहे: %s %s\n"
+
+#: ../cli/src/connections.c:3549
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " सावधानता: समापà¥à¤¤à¤¿à¤¸ गारà¥à¤¬à¥‡à¤œà¤•à¤°à¤¿à¤¤à¤¾ दà¥à¤°à¥à¤²à¤•à¥à¤· करत आहे: '%s'\n"
+
+#: ../cli/src/connections.c:3551 ../cli/src/connections.c:4400
+#: ../cli/src/connections.c:4455 ../cli/src/connections.c:4854
+#: ../cli/src/connections.c:4864
+msgid "Error: "
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3569
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ IP पतà¥à¤¤à¤¾ समाविषà¥à¤Ÿ करायला आवडेल? (होय किंवा नाही) [होय] "
+
+#: ../cli/src/connections.c:3575
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "पतà¥à¤¤à¤¾ समावेश पूरà¥à¤£ करणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ <Enter> दाबा.\n"
+
+#: ../cli/src/connections.c:3721
+#, c-format
+#| msgid "Error: 'parent': not valid without p-key."
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'parent': 'p-key' विना वैध नाही."
+
+#: ../cli/src/connections.c:3777 ../cli/src/connections.c:4770
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3780 ../cli/src/connections.c:4773
+msgid "Error: 'ssid' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'ssid' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:3844
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP नाव: "
+
+#: ../cli/src/connections.c:3847
+msgid "Error: 'nsp' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nsp' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:3902
+msgid "PPPoE username: "
+msgstr "PPPoE वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ: "
+
+#: ../cli/src/connections.c:3905
+#| msgid "Error: 'master' is required."
+msgid "Error: 'username' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'username' आवशà¥à¤¯à¤•."
+
+#: ../cli/src/connections.c:3976
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3979
+msgid "Error: 'apn' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'apn' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:4038
+msgid "Bluetooth device address: "
+msgstr "बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ साधन पतà¥à¤¤à¤¾: "
+
+#: ../cli/src/connections.c:4041
+msgid "Error: 'addr' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'addr' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:4084
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'bt-type': '%s' वैध नाही; [%s, %s (%s), %s]चा वापर करा."
+
+#: ../cli/src/connections.c:4129
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN पॅरेंट साधन किंवा जोडणी UUID: "
+
+#: ../cli/src/connections.c:4132
+msgid "Error: 'dev' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:4136
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:4139
+msgid "Error: 'id' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'id' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:4145
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'id': '%s' वैध नाही; <0-4095>चा वापर करा."
+
+#: ../cli/src/connections.c:4155
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev': '%s' UUID, संवाद नाव, किंवा MAC पैकी नाही."
+
+#: ../cli/src/connections.c:4290
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'mode': %s."
+
+#: ../cli/src/connections.c:4299
+#, c-format
+#| msgid "Error: 'parent': '%s' is not a valid interface name."
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'primary': '%s' वैध संवाद नाव नाही."
+
+#: ../cli/src/connections.c:4342
+msgid "Bond master: "
+msgstr "बाà¤à¤¡ मासà¥à¤Ÿà¤°: "
+
+#: ../cli/src/connections.c:4345 ../cli/src/connections.c:4437
+#: ../cli/src/connections.c:4624
+msgid "Error: 'master' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'मासà¥à¤Ÿà¤°' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:4350 ../cli/src/connections.c:4447
+#: ../cli/src/connections.c:4635
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"सावधानता: 'type'कडे सधà¥à¤¯à¤¾ दà¥à¤°à¥à¤²à¤•à¥à¤· केले जाते. आतà¥à¤¤à¤¾ फकà¥à¤¤ इथरनेट सà¥à¤²à¥‡à¤µà¥à¤¸à¤•à¤°à¤¿à¤¤à¤¾ "
+"समरà¥à¤¥à¤¨ पà¥à¤°à¤µà¤²à¥‡ "
+"जाते.\n"
+
+#: ../cli/src/connections.c:4434
+#| msgid "Bridge master: "
+msgid "Team master: "
+msgstr "टिम मासà¥à¤Ÿà¤°: "
+
+#: ../cli/src/connections.c:4537
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'stp': %s."
+
+#: ../cli/src/connections.c:4621
+msgid "Bridge master: "
+msgstr "बà¥à¤°à¤¿à¤œ मासà¥à¤Ÿà¤°: "
+
+#: ../cli/src/connections.c:4629
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'मासà¥à¤Ÿà¤°': '%s' वैध UUID किंवा संवाद नाही."
+
+#: ../cli/src/connections.c:4662
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'हेअरपिन': %s."
+
+#: ../cli/src/connections.c:4714
+msgid "VPN type: "
+msgstr "VPN पà¥à¤°à¤•à¤¾à¤°: "
+
+#: ../cli/src/connections.c:4717
+msgid "Error: 'vpn-type' is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'vpn-type' आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:4728
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4786
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'वाहिनी': '%s' वैध नाही; <1-13>चा वापर करा."
+
+#: ../cli/src/connections.c:4821
+#, c-format
+#| msgid "Error: '%s' is a not valid connection type."
+msgid "Error: '%s' is not a valid connection type."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' वैध जोडणी पà¥à¤°à¤•à¤¾à¤° नाही."
+
+#: ../cli/src/connections.c:4919
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' जोडणी समाविषà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: (%d) %s"
+
+#: ../cli/src/connections.c:4923
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "जोडणी '%s' (%s) यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ समाविषà¥à¤Ÿ केले.\n"
+
+#: ../cli/src/connections.c:4969
+msgid "Connection type: "
+msgstr "जोडणी पà¥à¤°à¤•à¤¾à¤°: "
+
+#: ../cli/src/connections.c:4973
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'type' बाब आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:4979
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध जोडणी पà¥à¤°à¤•à¤¾à¤°; %s."
+
+#: ../cli/src/connections.c:4988
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:5004
+#| msgid "Interface name: "
+msgid "Interface name [*]: "
+msgstr "इंटरफेस नाव [*]: "
+
+#: ../cli/src/connections.c:5009
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'ifname' बाब आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/connections.c:5016
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'ifname': '%s' वैध इंटरफेस तसेच '*' नाही."
+
+#: ../cli/src/connections.c:5835
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' सेटिंग मूलà¥à¤¯à¥‡]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5916
+#, c-format
+#| msgid ""
+#| "---[ Main menu ]---\n"
+#| "goto [<setting> | <prop>] :: go to a setting or property\n"
+#| "set [<setting>.<prop> <value>] :: set property value\n"
+#| "describe [<setting>.<prop>] :: describe property\n"
+#| "print [all] :: print the connection\n"
+#| "verify [all] :: verify the connection\n"
+#| "save :: save the connection\n"
+#| "back :: go one level up (back)\n"
+#| "help/? [<command>] :: print this help\n"
+#| "nmcli <conf-option> <value> :: nmcli configuration\n"
+#| "quit :: exit nmcli\n"
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ मà¥à¤–à¥à¤¯ मेनà¥à¤¯à¥‚ ]---\n"
+"goto [<setting> | <prop>] :: सेटिंग किंवा गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤¡à¥‡ जा\n"
+"remove <setting>[.<prop>] | <prop> :: सेटिंग काढून टाका किंवा "
+"गà¥à¤£à¤§à¤°à¥à¤® पà¥à¤¨à¥à¤¹à¤¾ सेट करा\n"
+"set [<setting>.<prop> <value>] :: गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ ठरवा\n"
+"describe [<setting>.<prop>] :: गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ वरà¥à¤£à¤¨ करा\n"
+"print [all] :: जोडणीची छपाई करा\n"
+"verify [all] :: जोडणीची तपासणी करा\n"
+"save :: जोडणी साठवा\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: जोडणी सकà¥à¤°à¥€à¤¯ करा\n"
+"back :: à¤à¤• सà¥à¤¤à¤° वर (मागे) चला\n"
+"help/? [<command>] :: हà¥à¤¯à¤¾ मदतीची छपाई करा\n"
+"nmcli <conf-option> <value> :: nmcli संरचना\n"
+"quit :: nmcli पासून बाहेर पडा\n"
+
+#: ../cli/src/connections.c:5943
+#, c-format
+#| msgid ""
+#| "goto <setting>[.<prop>] | <prop> :: enter setting/property for "
+#| "editation\n"
+#| "\n"
+#| "This command enters into a setting or property for editing it.\n"
+#| "\n"
+#| "Examples: nmcli> goto connection\n"
+#| " nmcli connection> goto secondaries\n"
+#| " nmcli> goto ipv4.addresses\n"
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: संपादनकरिता सेटिंग किंवा गà¥à¤£à¤§à¤°à¥à¤® दà¥à¤¯à¤¾\n"
+"\n"
+"हà¥à¤¯à¤¾ आदेशमà¥à¤³à¥‡ संपादनकरिता सेटिंग किंवा गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ जाणे शकà¥à¤¯ होते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5950
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: सेटिंग काढून टाका किंवा गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ "
+"पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¥€à¤¤ आणा\n"
+"\n"
+"हे आदेश जोडणीपासून संपूरà¥à¤£ सेटिंग काढून टाकते, किंवा गà¥à¤£à¤§à¤°à¥à¤® दिले असलà¥à¤¯à¤¾à¤¸\n"
+", तà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤²à¤¾ पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ मूलà¥à¤¯à¤•à¤°à¤¿à¤¤à¤¾ सेट करते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5957
+#, c-format
+#| msgid ""
+#| "set [<setting>.<prop> <value>] :: set property value\n"
+#| "\n"
+#| "This command sets property value.\n"
+#| "\n"
+#| "Example: nmcli> s con.id My connection\n"
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ सेट करा\n"
+"\n"
+"हे आदेश गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ सेट करते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: nmcli> set con.id My connection\n"
+
+#: ../cli/src/connections.c:5962
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ वरà¥à¤£à¤¨ करा\n"
+"\n"
+"गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ वरà¥à¤£à¤¨ दाखवतो. सरà¥à¤µ NM सेटिंगà¥à¤œ आणि गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥à¤¯à¤¾ पहाणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾, "
+"तà¥à¤®à¥à¤¹à¥€ nm-"
+"settings(5) मॅनà¥à¤¯à¥à¤…ल पृषà¥à¤Ÿ पाहू शकता.\n"
+
+#: ../cli/src/connections.c:5967
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: सेटिंग किंवा जोडणी मूलà¥à¤¯à¤¾à¤‚ची छपाई करा\n"
+"\n"
+"सधà¥à¤¯à¤¾à¤šà¥‡ गà¥à¤£à¤§à¤°à¥à¤® किंवा संपूरà¥à¤£ जोडणी दाखवतो.\n"
+"\n"
+"उदाहरणारà¥à¤¥: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5972
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: सेटिंग किंवा जोडणी वैधताची खातà¥à¤°à¥€ करा\n"
+"\n"
+"सेटिंग किंवा जोडणी वैध आहे याची खातà¥à¤°à¥€ करतो व तà¥à¤¯à¤¾à¤¸ नंतर साठवणे शकà¥à¤¯ आहे. "
+"तà¥à¤°à¥à¤Ÿà¥€à¤•à¤°à¤¿à¤¤à¤¾ अवैध "
+"मूलà¥à¤¯ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करतो.\n"
+"\n"
+"उदाहरणारà¥à¤¥: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5979
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: जोडणी साठवा\n"
+"\n"
+"जोडणीला NetworkManager करिता पाठवतो, जà¥à¤¯à¤¾à¤¸ साठवले जाते.\n"
+
+#: ../cli/src/connections.c:5983
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: जोडणी सकà¥à¤°à¥€à¤¯ करा\n"
+"\n"
+"जोडणी सकà¥à¤°à¥€à¤¯ करते.\n"
+"\n"
+"उपलबà¥à¤§ परà¥à¤¯à¤¾à¤¯:\n"
+"<ifname> - साधन जोडणी सकà¥à¤°à¥€à¤¯ होईल तेवà¥à¤¹à¤¾ साधन जोडा\n"
+"/<ap>|<nsp> - AP (Wi-Fi) किंवा NSP (WiMAX) (<ifname> निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ न केलà¥à¤¯à¤¾à¤¸ / सह "
+"पहिले जोडा)\n"
+
+#: ../cli/src/connections.c:5990 ../cli/src/connections.c:6140
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: शीरà¥à¤·à¤•à¤¡à¥€à¤² मेनà¥à¤¯à¥‚ सà¥à¤¤à¤°à¤•à¤¡à¥‡ जा\n"
+"\n"
+
+#: ../cli/src/connections.c:5993
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli आदेशांकरिता मदत\n"
+"\n"
+
+#: ../cli/src/connections.c:5996
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli संरचना\n"
+"\n"
+"nmcli संरचीत करतो. खालील परà¥à¤¯à¤¾à¤¯ उपलबà¥à¤§ आहेत:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"उदाहरणारà¥à¤¥: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:6016 ../cli/src/connections.c:6146
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli पासून बाहेर पडा\n"
+"\n"
+"हे आदेशने तà¥à¤®à¥à¤¹à¥€ nmcli पासून बाहेर पडाल. संपादनजोगी जोडणी साठवली जात नसताना, "
+"वापरकरà¥à¤¤à¥à¤¯à¤¾à¤²à¤¾ कृतीची खातà¥à¤°à¥€ करणà¥à¤¯à¤¾à¤¸ विचारले जाते.\n"
+
+#: ../cli/src/connections.c:6021 ../cli/src/connections.c:6151
+#: ../cli/src/connections.c:6521 ../cli/src/connections.c:7370
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "अपरिचीत आदेश: '%s'\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6087
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ गà¥à¤£à¤§à¤°à¥à¤® मेनà¥à¤¯à¥‚ ]---\n"
+"set [<value>] :: नवीन मूलà¥à¤¯ सेट करा\n"
+"add [<value>] :: गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ नविन परà¥à¤¯à¤¾à¤¯ समाविषà¥à¤Ÿ करा\n"
+"change :: सधà¥à¤¯à¤¾à¤šà¥‡ मूलà¥à¤¯ बदला\n"
+"remove [<index> | <option>] :: मूलà¥à¤¯ नषà¥à¤Ÿ करा\n"
+"describe :: गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ वरà¥à¤£à¤¨ करा\n"
+"print [setting | connection] :: गà¥à¤£à¤§à¤°à¥à¤® (सेटिंग किंवा जोडणी) मूलà¥à¤¯à¤¾à¤‚ची "
+"छपाई करा\n"
+"back :: शीरà¥à¤· सà¥à¤¤à¤°à¤¾à¤•à¤¡à¥‡ जा\n"
+"help/? [<command>] :: हà¥à¤¯à¤¾ मदत किंवा आदेश वरà¥à¤£à¤¨à¤¾à¤šà¥€ छपाई करा\n"
+"quit :: nmcli पासून बाहेर पडा\n"
+
+#: ../cli/src/connections.c:6112
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: नविन मूलà¥à¤¯ सेट करा\n"
+"\n"
+"हे आदेश संच हà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ <value> पà¥à¤°à¤µà¤¤à¥‡\n"
+
+#: ../cli/src/connections.c:6116
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ नविन परà¥à¤¯à¤¾à¤¯ समाविषà¥à¤Ÿ करा\n"
+"\n"
+"हे आदेश हà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ <value> पà¥à¤°à¤µà¤¤à¥‡, गà¥à¤£à¤§à¤°à¥à¤® कंटेनर पà¥à¤°à¤•à¤¾à¤°à¤šà¥‡ असलà¥à¤¯à¤¾à¤¸. "
+"à¤à¤•-मूलà¥à¤¯ "
+"गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ मूलà¥à¤¯ ('set' पà¥à¤°à¤¾à¤£à¥‡à¤š असते) अदलाबदल करतो.\n"
+
+#: ../cli/src/connections.c:6122
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: सधà¥à¤¯à¤¾à¤šà¥‡ मूलà¥à¤¯ बदला\n"
+"\n"
+"सधà¥à¤¯à¤¾à¤šà¥‡ मूलà¥à¤¯ दाखवतो व संपादन सà¥à¤µà¥€à¤•à¤¾à¤°à¤¤à¥‹.\n"
+
+#: ../cli/src/connections.c:6126
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: मूलà¥à¤¯ नषà¥à¤Ÿ करा\n"
+"\n"
+"गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ काढून टाकतो (पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤à¤•à¤°à¤¿à¤¤à¤¾ सेट करतो).\n"
+
+#: ../cli/src/connections.c:6130
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ वरà¥à¤£à¤¨ करा\n"
+"\n"
+"गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ वरà¥à¤£à¤¨ दाखवतो. सरà¥à¤µ NM सेटिंगà¥à¤œ आणि गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥à¤¯à¤¾ पहाणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾, "
+"तà¥à¤®à¥à¤¹à¥€ nm-"
+"settings(5) मॅनà¥à¤¯à¥à¤…ल पृषà¥à¤Ÿ पाहू शकता.\n"
+
+#: ../cli/src/connections.c:6135
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯à¤¾à¤‚ची छपाई करा (सेटिंग, "
+"जोडणी) \n"
+"\n"
+"गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ दाखवतो. बाब पà¥à¤°à¤µà¥‚न तà¥à¤®à¥à¤¹à¥€ संपूरà¥à¤£ सेटिंग किंवा जोडणीकरिता "
+"पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ मूलà¥à¤¯à¥‡ "
+"तेखील दाखवू शकता.\n"
+
+#: ../cli/src/connections.c:6143
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli आदेशांकरिता मदत\n"
+"\n"
+
+#: ../cli/src/connections.c:6230
+#, c-format
+#| msgid "Error: Connection activation failed."
+msgid "Error: Connection activation failed.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¥€à¤¯ करणे अपयशी.\n"
+
+#: ../cli/src/connections.c:6301
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: सेटिंग '%s' अनिवारà¥à¤¯ आहे आणि काढून टाकणे शकà¥à¤¯ नाही.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6319
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ जोडणी पà¥à¤°à¤•à¤¾à¤°: %s | name: %s | UUID: %s | dirty: %s ]\n"
+
+#: ../cli/src/connections.c:6379
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² इतर कà¥à¤²à¤¾à¤à¤‚टपासून काढून टाकले गेले आहे. पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¥€à¤¤ "
+"आणणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ "
+"मà¥à¤–à¥à¤¯ मेनà¥à¤¯à¥à¤®à¤§à¥à¤¯à¥‡ 'save' टाइप करा.\n"
+
+#: ../cli/src/connections.c:6400 ../cli/src/connections.c:6823
+#: ../cli/src/connections.c:6881
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' मूलà¥à¤¯ दà¥à¤¯à¤¾: "
+
+#: ../cli/src/connections.c:6417 ../cli/src/connections.c:6436
+#: ../cli/src/connections.c:6829 ../cli/src/connections.c:6888
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' गà¥à¤£à¤§à¤°à¥à¤® सेट करणà¥à¤¯à¤¾à¤¸ अपयशी: %s\n"
+
+#: ../cli/src/connections.c:6429
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' मूलà¥à¤¯ संपादित करा: "
+
+#: ../cli/src/connections.c:6458
+#, c-format
+msgid "Error: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s\n"
+
+#: ../cli/src/connections.c:6464 ../cli/src/connections.c:6967
+#: ../cli/src/connections.c:7008
+#, c-format
+#| msgid "Error: failed to modify %s.%s: %s."
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s': %s चे मूलà¥à¤¯ काढून टाकणà¥à¤¯à¤¾à¤¸ अपयशी\n"
+
+#: ../cli/src/connections.c:6485
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "अपरिचीत आदेश बाब: '%s'\n"
+
+#: ../cli/src/connections.c:6505 ../cli/src/connections.c:7358
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "जोडणी साठवली नाही. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नकà¥à¤•à¥€ बाहेर जायचे? [y/n]\n"
+
+#: ../cli/src/connections.c:6617
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "उपलबà¥à¤§ सेटिंगà¥à¤œ: %s\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध सेटिंगचे नाव; %s\n"
+
+#: ../cli/src/connections.c:6643
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "उपलबà¥à¤§ गà¥à¤£à¤§à¤°à¥à¤®: %s\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: property %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: गà¥à¤£à¤§à¤°à¥à¤® %s\n"
+
+#: ../cli/src/connections.c:6692
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"'autoconnect=yes' सह जोडणी साठवत आहे. तà¥à¤¯à¤¾à¤®à¥à¤³à¥‡ जोडणी पटकण सकà¥à¤°à¥€à¤¯ होते.\n"
+"तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तरीही साठवायचे? [होय] "
+
+#: ../cli/src/connections.c:6765
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "तà¥à¤®à¥à¤¹à¥€ खालील सेटिंगà¥à¤œ संपादित करू शकता: %s\n"
+
+#: ../cli/src/connections.c:6791
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² इतर कà¥à¤²à¤¾à¤à¤‚टपासून काढून टाकले गेले आहे. पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¥€à¤¤ "
+"आणणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ "
+"मà¥à¤–à¥à¤¯ मेनà¥à¤¯à¥à¤®à¤§à¥à¤¯à¥‡ तà¥à¤®à¥à¤¹à¥€ 'save' टाइप करू शकता.\n"
+
+#: ../cli/src/connections.c:6821 ../cli/src/connections.c:6879
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ मूलà¥à¤¯: %s\n"
+
+#: ../cli/src/connections.c:6833 ../cli/src/connections.c:7050
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: सेटिंग निवडली नाही; वैध [%s] आहे\n"
+
+#: ../cli/src/connections.c:6834
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"पहिले '<setting> कडे जा' चा वापर करा, किंवा ' <setting>.<property> सेट करा'\n"
+
+#: ../cli/src/connections.c:6849 ../cli/src/connections.c:6987
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध सेटिंग बाब '%s'; वैध [%s] आहे\n"
+
+#: ../cli/src/connections.c:6859
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ सेटिंग आढळले नाही\n"
+
+#: ../cli/src/connections.c:6866
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध गà¥à¤£à¤§à¤°à¥à¤®: %s\n"
+
+#: ../cli/src/connections.c:6915
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत सेटिंग '%s'\n"
+
+#: ../cli/src/connections.c:6928
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "तà¥à¤®à¥à¤¹à¥€ खालील गà¥à¤£à¤§à¤°à¥à¤®: %s संपादित करू शकता\n"
+
+#: ../cli/src/connections.c:6972
+#, c-format
+#| msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: बाब दिले नाही; [%s] वैध मूलà¥à¤¯ आहे\n"
+
+#: ../cli/src/connections.c:6985
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "सेटिंग '%s' जोडणीमधà¥à¤¯à¥‡ उपसà¥à¤¥à¤¿à¤¤ नाही.\n"
+
+#: ../cli/src/connections.c:7026
+#, c-format
+#| msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s गà¥à¤£à¤§à¤°à¥à¤®, तसेच नाव सेट करणे अशकà¥à¤¯.\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"पहिले '<setting> कडे जा' चा वापर करा, किंवा ' <setting>.<property> ठरवा'\n"
+
+#: ../cli/src/connections.c:7092
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध गà¥à¤£à¤§à¤°à¥à¤®: %s, वैध सेटिंग नाव नाही.\n"
+
+#: ../cli/src/connections.c:7116
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' सेटिंग अनà¥à¤ªà¤²à¤¬à¥à¤§\n"
+
+#: ../cli/src/connections.c:7119
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत सेटिंग '%s'\n"
+
+#: ../cli/src/connections.c:7135
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "'%s': %s सेटिंग तपासा\n"
+
+#: ../cli/src/connections.c:7142
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "जोडणीची तपासणी करा: %s\n"
+
+#: ../cli/src/connections.c:7181
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' (%s) जोडणी: (%d) %s साठवणà¥à¤¯à¤¾à¤¸ अपयशी\n"
+
+#: ../cli/src/connections.c:7188
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "जोडणी '%s' (%s) यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ साठवली.\n"
+
+#: ../cli/src/connections.c:7222
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी तपासणी अपयशी: %s\n"
+
+#: ../cli/src/connections.c:7223
+msgid "(unknown error)"
+msgstr "(अपरिचीत तà¥à¤°à¥à¤Ÿà¥€)"
+
+#: ../cli/src/connections.c:7244
+#, c-format
+#| msgid "Error: connection ID is missing."
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी साठवली नाही. पहिले 'save' टाइप करा.\n"
+
+#: ../cli/src/connections.c:7248
+#, c-format
+#| msgid "Error: connection verification failed: %s\n"
+msgid "Error: connection is not valid: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी वैध नाही: %s\n"
+
+#: ../cli/src/connections.c:7259
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी: %s सकà¥à¤°à¥€à¤¯ करणे अशकà¥à¤¯.\n"
+
+#: ../cli/src/connections.c:7269
+#, c-format
+#| msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' (%s) जोडणी सकà¥à¤°à¥€à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी: (%d) %s\n"
+
+#: ../cli/src/connections.c:7275
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr "जोडणी सकà¥à¤°à¥€à¤¯ करणे मॉनिटर करत आहे (पà¥à¤¢à¥‡ जाणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ कोणतीही कि दाबा)\n"
+
+#: ../cli/src/connections.c:7313
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: status-line: %s\n"
+
+#: ../cli/src/connections.c:7321
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:7329
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: चà¥à¤•à¤¿à¤šà¤¾ रंग कà¥à¤°à¤®à¤¾à¤‚क: '%s'; <0-8>चा वापर करा\n"
+
+#: ../cli/src/connections.c:7341
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "सधà¥à¤¯à¤¾à¤šà¥€ nmcli संरचना:\n"
+
+#: ../cli/src/connections.c:7349
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "अवैध संरचना परà¥à¤¯à¤¾à¤¯ '%s'; [%s] सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯\n"
+
+#: ../cli/src/connections.c:7572
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> आदेश-ओळ संपादन अनà¥à¤ªà¤²à¤¬à¥à¤§. गà¥à¤£à¤µà¤¿à¤¶à¥‡à¤· सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ ओळ संपादन लाइबà¥à¤°à¤°à¤¿à¤šà¤¾ "
+"वापर गृहीत "
+"घà¥à¤¯à¤¾. <<<\n"
+"समरà¥à¤¥à¥€à¤¤ लाइबà¥à¤°à¤°à¤¿à¤œ खालील पà¥à¤°à¤®à¤¾à¤£à¥‡ आहे:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7598
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'id', uuid, किंवा 'path' पैकी à¤à¤• पà¥à¤°à¤µà¤£à¥‡ शकà¥à¤¯."
+
+#: ../cli/src/connections.c:7610 ../cli/src/connections.c:7807
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी '%s'."
+
+#: ../cli/src/connections.c:7625
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"सावधानता: असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी '%s' संपादित करत आहे; 'type' बाब दà¥à¤°à¥à¤²à¤•à¥à¤·à¤¿à¤¤ केले "
+"जाते\n"
+
+#: ../cli/src/connections.c:7628
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"सावधानता: असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी '%s' संपादित करत आहे; 'con-name' बाबकडे दà¥à¤°à¥à¤²à¤•à¥à¤· "
+"केले\n"
+
+#: ../cli/src/connections.c:7642
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "अवैध जोडणी पà¥à¤°à¤•à¤¾à¤°: %s\n"
+
+#: ../cli/src/connections.c:7644
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध जोडणी पà¥à¤°à¤•à¤¾à¤°; %s\n"
+
+#: ../cli/src/connections.c:7680
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli इंटरॲकà¥à¤Ÿà¤¿à¤µà¥à¤¹ कनेकà¥à¤¶à¤¨ à¤à¤¡à¤¿à¤Ÿà¤° |==="
+
+#: ../cli/src/connections.c:7683
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² '%s' जोडणी संपादित करत आहे: '%s'"
+
+#: ../cli/src/connections.c:7685
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "नविन '%s' जोडणी समाविषà¥à¤Ÿ करत आहे"
+
+#: ../cli/src/connections.c:7687
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "उपलबà¥à¤§ आदेशकरिता 'help' किंवा '?' टाइप करा."
+
+#: ../cli/src/connections.c:7689
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "तपशील गà¥à¤£à¤§à¤°à¥à¤® वरà¥à¤£à¤¨à¤•à¤°à¤¿à¤¤à¤¾ 'describe [<setting>.<prop>]' टाइप करा."
+
+#: ../cli/src/connections.c:7728
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी '%s': (%d) %s संपादित करणà¥à¤¯à¤¾à¤¸ अपयशी"
+
+#: ../cli/src/connections.c:7734
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "जोडणी '%s' (%s) यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ संपादित केली.\n"
+
+#: ../cli/src/connections.c:7761
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: बाबी पà¥à¤°à¤µà¤²à¥‡ नाही."
+
+#: ../cli/src/connections.c:7785
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी ID आढळले नाही."
+
+#: ../cli/src/connections.c:7790
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: <setting>.<property> बाब आढळले नाही."
+
+#: ../cli/src/connections.c:7813
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7828
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध किंवा असà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ सेटिंग '%s': %s."
+
+#: ../cli/src/connections.c:7849
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध गà¥à¤£à¤§à¤°à¥à¤® '%s': %s."
+
+#: ../cli/src/connections.c:7855
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s.%s: %s संपादित करणà¥à¤¯à¤¾à¤¸ अपयशी."
+
+#: ../cli/src/connections.c:7885
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी नषà¥à¤Ÿ करणे अपयशी: %s"
+
+#: ../cli/src/connections.c:7956
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:7992
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी: %s नषà¥à¤Ÿ करणे अशकà¥à¤¯."
+
+#: ../cli/src/connections.c:8063
+#, c-format
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not load file '%s'\n"
+msgstr "फाइल '%s' लोड करणे अशकà¥à¤¯\n"
+
+#: ../cli/src/connections.c:8190
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' वैध 'connection' आदेश नाही."
+
+#: ../cli/src/connections.c:8259 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: पà¥à¤°à¤£à¤¾à¤²à¥€à¤šà¥€ संयोजना पà¥à¤°à¤¾à¤ªà¥à¤¤ करणे अशकà¥à¤¯."
+
+#: ../cli/src/connections.c:8269
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: सेटिंगà¥à¤¸à¥ सरà¥à¤µà¥à¤¹à¤¿à¤¸ कारà¥à¤¯à¤°à¤¤ नाही."
+
+#. 3
+#. 16
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNECTION"
+
+#. 4
+#. 17
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+#| msgid "UUID"
+msgid "CON-UUID"
+msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUCT"
#. 4
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
#. 6
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:117
+#. 8
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "REASON"
-#. 10
-#: ../cli/src/devices.c:118
+#. 11
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:119
+#. 12
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:120
+#. 13
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:122
+#. 15
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#. 15
-#: ../cli/src/devices.c:123
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#. 0
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:182
+#. 3
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:183
+#. 4
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:184
+#. 6
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:186
+#. 8
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:187
+#. 10
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:188
+#. 11
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
-msgid "ACTIVE"
-msgstr "ACTIVE"
+#. 14
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
#. 0
-#: ../cli/src/devices.c:218
+#. 5
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#. 0
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:227
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:243
+#. 0
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 3
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-PROPERTIES"
+
+#. 10
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "CONNECTIONS"
+
+#: ../cli/src/devices.c:274
#, c-format
#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
+#| "Usage: nmcli device { COMMAND | help }\n"
#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
+#| " COMMAND := { status | show | disconnect | wifi | wimax }\n"
#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
+#| " COMMAND := { status | show | disconnect | wifi }\n"
#| "\n"
#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+#| "\n"
+#| " show [<ifname>]\n"
+#| "\n"
+#| " disconnect <ifname>\n"
+#| "\n"
+#| " wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+#| "\n"
#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-#| "[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-#| " [--private] [--nowait] [--timeout <timeout>]\n"
-#| " wimax [list [iface <iface>] [nsp <name>]]\n"
+#| "[ifname <ifname>] [bssid <BSSID>] [name <name>]\n"
+#| "\n"
+#| " [private yes|no]\n"
+#| "\n"
+#| " wifi rescan [[ifname] <ifname>]\n"
+#| "\n"
+#| " wimax [list [ifname <ifname>] [nsp <name>]]\n"
#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"वापर: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:344
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"वापर: nmcli device status { help }\n"
+"\n"
+"सरà¥à¤µ साधनांकरिता सà¥à¤¥à¤¿à¤¤à¥€ दाखवा.\n"
+"पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤à¤ªà¤£à¥‡, खालील सà¥à¤¤à¤‚भ दाखवले गेले आहे :\n"
+" DEVICE - संवाद नाव\n"
+" TYPE - साधन पà¥à¤°à¤•à¤¾à¤°\n"
+" STATE - साधन सà¥à¤¤à¤°\n"
+" CONNECTION - साधनावर सकà¥à¤°à¥€à¤¯ केलेली जोडणी (जर असलà¥à¤¯à¤¾à¤¸)\n"
+"'--fields' जागतिक परà¥à¤¯à¤¾à¤¯à¤šà¤¾ वापर करून दृषà¥à¤¯à¤¾à¤¸à¥à¤ªà¤¦ सà¥à¤¤à¤‚भ बदलणे शकà¥à¤¯ आहे. "
+"'status'\n"
+"पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ आदेश आहे, जे 'nmcli device' हे 'nmcli device status' ला कॉल "
+"करते असे सà¥à¤ªà¤·à¥à¤Ÿ करते.\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"वापर: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"साधनाचे तपशील दाखवा.\n"
+"आदेश सरà¥à¤µ साधनांकरिता, किंवा ठरावकि साधनाकरिता तपशील दाखवते.\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"वापर: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"साधनाची जोडणी करा.\n"
+"NetworkManager योगà¥à¤¯ जोडणी शोधणà¥à¤¯à¤¾à¤šà¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करेल जà¥à¤¯à¤¾à¤¸ सकà¥à¤°à¥€à¤¯ केले जाईल."
+"\n"
+"auto-connect करिता सेट न केलेलà¥à¤¯à¤¾ जोडणींचा देखील विचार होईल.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"वापर: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"साधनाला खंडीत करा.\n"
+"आदेश साधनाला खंडीत करते आणि तà¥à¤¯à¤¾à¤¸ विना वापरकरà¥à¤¤à¤¾ किंवा मॅनà¥à¤¯à¥à¤…ल मतभेदविना "
+"पà¥à¤¢à¥€à¤² जोडणींकरिता\n"
+"सà¥à¤µ-सकà¥à¤°à¥€à¤¯ होणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न अडवते.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"वापर: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"वायफाय साधनांवर कारà¥à¤¯ करा.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"उपलबà¥à¤§ वायफाय ॲकà¥à¤¸à¥‡à¤¸ पॉइंटà¥à¤¸ सूची दाखवा. 'ifname' आणि 'bssid' परà¥à¤¯à¤¾à¤¯à¤¾à¤‚चा "
+"वापर\n"
+"ठराविक संवादकरिता, किंवा ठराविक BSSID सह APs दाखवणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ केला जातो.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"SSID किंवा BSSID दà¥à¤µà¤¾à¤°à¥‡ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ वायफाय नेटवरà¥à¤•à¤¶à¥€ जोडणी करा. आदेश नवीन\n"
+"जोडणी करतो आणि नंतर साधनाला सकà¥à¤°à¥€à¤¯ करतो. हे\n"
+"GUI कà¥à¤²à¤¾à¤à¤‚टमधà¥à¤¯à¥‡ SSID कà¥à¤²à¤¿à¤• करणà¥à¤¯à¤¾à¤šà¥‡ परसà¥à¤ªà¤° आदेश ओळ आहे. आदेश नेहमी\n"
+"नवीन जोडणी निरà¥à¤®à¤¾à¤£ करतो आणि बऱà¥à¤¯à¤¾à¤ªà¥ˆà¤•à¥€ नवीन वायफाय नेटवरà¥à¤•à¥à¤¸à¤¶à¥€ जोडणी "
+"करणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾\n"
+"उपयोगी ठरते. नेटवरà¥à¤•à¤•à¤°à¤¿à¤¤à¤¾ जोडणी आधीपासूनच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ असलà¥à¤¯à¤¾à¤¸, असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² "
+"पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸ खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡\n"
+"सकà¥à¤°à¥€à¤¯ करणे शिफारसीय आहे: nmcli con up id <name>. लकà¥à¤·à¤¾à¤¤ ठेवा\n"
+", फकà¥à¤¤ WEP आणि WPA-PSK नेटवरà¥à¤•à¥à¤¸ याकà¥à¤·à¤£à¥€ समरà¥à¤¥à¥€à¤¤ आहे. \n"
+"DHCP तरà¥à¤«à¥‡ IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ होते, असेही सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"NetworkManager ने उपलबà¥à¤§ ॲकà¥à¤¸à¥‡à¤¸ पॉइंटà¥à¤¸à¤•à¤°à¤¿à¤¤à¤¾ पà¥à¤¨à¥à¤¹à¤¾à¤¸à¥à¤•à¥…न करायची विनंती करा.\n"
+"NetworkManager वायफाय नेटवरà¥à¤•à¥à¤¸ वेळोवेळी सà¥à¤•à¥…न करतो, परंतॠकाही घटनांमधà¥à¤¯à¥‡ "
+"सà¥à¤µà¤¹à¤¸à¥à¤¤à¥‡ सà¥à¤•à¥…निंग सà¥à¤°à¥‚ करणे\n"
+"उपयोगी ठरू शकते. लकà¥à¤·à¤¾à¤¤ ठेवा आदेश\n"
+"APs दाखवत नाही, तà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ 'nmcli device wifi list' याचा वापर करा.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"वापर: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX साधनांवर कारà¥à¤¯ सà¥à¤°à¥‚ करा.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"उपलबà¥à¤§ WiMAX NSPs सूचीत दाखवा. 'ifname' आणि 'nsp' परà¥à¤¯à¤¾à¤¯à¤¾à¤‚चा वापर\n"
+"ठराविक संवादकरिता, किंवा ठराविक NSP सह नेटवरà¥à¤• सूची दाखवणà¥à¤¯à¤¾à¤¸ शकà¥à¤¯ आहे.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(काहिच नाही)"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:401
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:410
-msgid "Encrypted: "
-msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡: "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:415
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:417
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:419
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:422
-msgid "Enterprise "
-msgstr "à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ"
-
-#: ../cli/src/devices.c:431
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "à¤à¤¡-हॉक"
-#: ../cli/src/devices.c:432
-msgid "Infrastructure"
-msgstr "इंफà¥à¤°à¤¾à¤¸à¥à¤Ÿà¥à¤°à¤•à¥à¤šà¤°"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "इंफà¥à¤°à¤¾"
-#: ../cli/src/devices.c:468
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "होम"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "पारà¥à¤Ÿà¤¨à¤°"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "रोमिंग"
-#: ../cli/src/devices.c:546
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev list': %s"
-
-#: ../cli/src/devices.c:548
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev list': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/devices.c:557
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "साधनाचे तपशील"
-#: ../cli/src/devices.c:602 ../cli/src/devices.c:605 ../cli/src/devices.c:1081
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन दाखवा': %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1474
msgid "(unknown)"
msgstr "(अपरिचीत)"
-#: ../cli/src/devices.c:614
-msgid "not connected"
-msgstr "जोडणी अशकà¥à¤¯"
-
-#: ../cli/src/devices.c:641
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "सà¥à¤°à¥‚ करा"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "बंद करा"
-#: ../cli/src/devices.c:923
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev status': %s"
-
-#: ../cli/src/devices.c:925
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev status': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+msgid "Error: 'device status': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन सà¥à¤¥à¤¿à¤¤à¥€': %s"
-#: ../cli/src/devices.c:948
+#. Add headers
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "साधनांची सà¥à¤¥à¤¿à¤¤à¥€"
-#: ../cli/src/devices.c:979
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' घटक आढळले नाही."
+msgid "Error: invalid extra argument '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध अगाऊ बाब '%s'."
-#: ../cli/src/devices.c:1020 ../cli/src/devices.c:1185
-#: ../cli/src/devices.c:1326 ../cli/src/devices.c:1973
+#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1422
+#: ../cli/src/devices.c:1557 ../cli/src/devices.c:1696
+#: ../cli/src/devices.c:2436
#, c-format
msgid "Error: Device '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' आढळले नाही."
-#: ../cli/src/devices.c:1043
+#: ../cli/src/devices.c:1319
+#, c-format
+#| msgid "Success: Device '%s' successfully disconnected."
+msgid "Success: Device '%s' successfully activated."
+msgstr "यशसà¥à¤µà¥€: साधन '%s' यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सकà¥à¤°à¥€à¤¯ केले."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: Device activation failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन सकà¥à¤°à¥€à¤¯ करणे अपयशी: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+#| msgid "Device '%s' has been disconnected.\n"
+msgid "Device '%s' has been connected.\n"
+msgstr "साधन '%s' ची यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ जोडणी à¤à¤¾à¤²à¥€.\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "संवाद: "
+
+#: ../cli/src/devices.c:1381 ../cli/src/devices.c:1390
+#: ../cli/src/devices.c:1516 ../cli/src/devices.c:1525
+#, c-format
+msgid "Error: No interface specified."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: संवाद निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अगाऊ बाब सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही: '%s'."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "यशसà¥à¤µà¥€: साधन '%s' यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ खंडीत à¤à¤¾à¤²à¥‡."
-#: ../cli/src/devices.c:1078
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' (%s) खंडीत होणे अपयशी à¤à¤¾à¤²à¥‡: %s"
-#: ../cli/src/devices.c:1091
+#: ../cli/src/devices.c:1485
#, c-format
msgid "Device '%s' has been disconnected.\n"
-msgstr "साधन '%s' खंडीत à¤à¤¾à¤²à¥‡. \n"
+msgstr "साधन '%s' खंडीत à¤à¤¾à¤²à¥‡.\n"
-#: ../cli/src/devices.c:1154
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: iface निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे."
-
-#: ../cli/src/devices.c:1284
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wifi': %s"
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi सà¥à¤•à¥…न सूची"
-#: ../cli/src/devices.c:1286
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wifi': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/devices.c:1309
-msgid "WiFi scan list"
-msgstr "WiFi सà¥à¤•à¥…न सूची"
+msgid "Error: 'device wifi': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'device wifi': %s"
-#: ../cli/src/devices.c:1346 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: bssid '%s' सह ॲकà¥à¤¸à¥‡à¤¸ पॉइंट आढळले नाही."
-#: ../cli/src/devices.c:1363
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' WiFi साधन नाही."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' Wi-Fi साधन नाही."
-#: ../cli/src/devices.c:1431 ../cli/src/devices.c:1477
+#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' सह जोडणी निरà¥à¤®à¤¾à¤£ केली व साधन '%s' वर सà¥à¤°à¥‚ केली\n"
-#: ../cli/src/devices.c:1436
+#: ../cli/src/devices.c:1829
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सà¥à¤°à¥‚ करणे अपयशी: (%d) %s."
-#: ../cli/src/devices.c:1461
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: नवीन जोडणी: (%d) %s समाविषà¥à¤Ÿ/सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/devices.c:1469
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: नवीन जोडणी समाविषà¥à¤Ÿ/सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸ अपयशी: अपरिचीत तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/devices.c:1613
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID किंवा BSSID: "
+
+#: ../cli/src/devices.c:2018
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: SSID किंवा BSSID आढळले नाही."
-#: ../cli/src/devices.c:1636
+#: ../cli/src/devices.c:2042
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: bssid घटक मूलà¥à¤¯ '%s' वैध BSSID नाही."
-#: ../cli/src/devices.c:1660
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1384,76 +3724,75 @@ msgstr ""
"तà¥à¤°à¥à¤Ÿà¥€: wep-key-type आरà¥à¤—à¥à¤¯à¥à¤®à¥‡à¤‚ट मूलà¥à¤¯ '%s' अवैध आहे, 'key' किंवा 'phrase'चा "
"वापर करा."
-#: ../cli/src/devices.c:1700
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s: %s."
+
+#: ../cli/src/devices.c:2101
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणà¥à¤¯à¤¾à¤œà¥‹à¤—ी BSSID (%s) bssid आरà¥à¤—à¥à¤¯à¥à¤®à¥‡à¤‚ट (%s) पासून भिनà¥à¤¨ आहे."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: घटक '%s' SSID किंवा BSSID नाही."
-#: ../cli/src/devices.c:1735
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' Wi-Fi साधन नाही."
-
-#: ../cli/src/devices.c:1737
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: Wi-Fi साधन आढळले नाही."
-#: ../cli/src/devices.c:1755
+#: ../cli/src/devices.c:2151
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: SSID '%s' सह नेटवरà¥à¤• आढळले नाही."
-#: ../cli/src/devices.c:1757
+#: ../cli/src/devices.c:2153
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: BSSID '%s' सह ॲकà¥à¤¸à¥‡à¤¸ पॉईंट आढळले नाही."
-#: ../cli/src/devices.c:1855
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wifi' आदेश '%s' वैध नाही."
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "पासवरà¥à¤¡: "
-#: ../cli/src/devices.c:1931
+#: ../cli/src/devices.c:2321
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wimax': %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'device wifi' आदेश '%s' वैध नाही."
-#: ../cli/src/devices.c:1933
-#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wimax': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-
-#: ../cli/src/devices.c:1956
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP सूची"
-#: ../cli/src/devices.c:1993
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन wimax': %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: NSP, साधन '%s' सह आढळले नाही."
-#: ../cli/src/devices.c:2004
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' हे WiMAX साधन नाही."
-#: ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2510
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: nsp '%s' सह ॲकà¥à¤¸à¥‡à¤¸ पॉईंट आढळले नाही."
-#: ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2542
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wimax' आदेश '%s' वैध नाही."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'device wimax' आदेश '%s' वैध नाही."
-#: ../cli/src/devices.c:2115
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev' आदेश '%s' वैध नाही."
@@ -1469,257 +3808,553 @@ msgstr "VERSION"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "STARTUP"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+#| msgid "CONNECTION"
+msgid "CONNECTIVITY"
+msgstr "CONNECTIVITY"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "NETWORKING"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "PERMISSION"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "LEVEL"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMAINS"
+
+#: ../cli/src/network-manager.c:95
#, c-format
+#| msgid ""
+#| "Usage: nmcli general { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { status | permissions | logging }\n"
+#| "\n"
+#| " status\n"
+#| "\n"
+#| " permissions\n"
+#| "\n"
+#| " logging [level <log level>] [domains <log domains>]\n"
+#| "\n"
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"वापर: nmcli nm { COMMAND | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"वापर: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"वापर: nmcli general status { help }\n"
+"\n"
+"NetworkManagerची सरासर सà¥à¤¥à¤¿à¤¤à¥€ दाखवा.\n"
+"'status' पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ कृती आहे, मà¥à¤¹à¤£à¤œà¥‡à¤š 'nmcli gen' हे 'nmcli gen "
+"status'ला कॉल करते\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"वापर: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव पà¥à¤°à¤¾à¤ªà¥à¤¤ करा किंवा कायमसà¥à¤µà¤°à¥‚पी बदला.\n"
+"विना बाब, हे सधà¥à¤¯à¤¾à¤šà¥‡ यजमाननावाची छपाई करते. यजमाननाव पà¥à¤°à¤µà¤²à¥à¤¯à¤¾à¤µà¤°\n"
+", NetworkManager तà¥à¤¯à¤¾à¤¸ कायमसà¥à¤µà¤°à¥‚पी पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव असे सेट करेल."
+"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"वापर: nmcli general permissions { help }\n"
+"\n"
+"ओळख पटलेलà¥à¤¯à¤¾ कारà¥à¤¯à¤¾à¤‚करिता कॉलर परवानगी दाखवा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"वापर: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"NetworkManager लॉगिंग सà¥à¤¤à¤° आणि डोमेनà¥à¤¸ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा किंवा बदला.\n"
+"कोणतà¥à¤¯à¤¾à¤¹à¥€ बाबविना सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ लॉगिंग सà¥à¤¤à¤° आणि डोमेनà¥à¤¸ दाखवले जातात. लॉगिंग सà¥à¤¤à¤° "
+"बदलणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾\n"
+", सà¥à¤¤à¤° आणि/किंवा डोमेन पà¥à¤°à¤µà¤¾. संभावà¥à¤¯ लॉगिंग डोमेनà¥à¤¸à¤šà¥à¤¯à¤¾ सूचीकरिता "
+"कृपया man पृषà¥à¤ \n"
+"पहा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+#| msgid ""
+#| "Usage: nmcli networking { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { [ on | off ] }\n"
+#| "\n"
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"वापर: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+#| msgid ""
+#| "Usage: nmcli networking { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { [ on | off ] }\n"
+#| "\n"
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"वापर: nmcli networking on { help }\n"
+"\n"
+"सà¥à¤µà¤¿à¤š नेटवरà¥à¤•à¤¿à¤‚ग सà¥à¤°à¥‚ करा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+#| msgid ""
+#| "Usage: nmcli networking { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { [ on | off ] }\n"
+#| "\n"
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"वापर: nmcli networking off { help }\n"
+"\n"
+"सà¥à¤µà¤¿à¤š नेटवरà¥à¤•à¤¿à¤‚ग बंद करा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"वापर: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"नेटवरà¥à¤• जोडणी सà¥à¤¤à¤° पà¥à¤°à¤¾à¤ªà¥à¤¤ करा.\n"
+"वैकà¥à¤²à¤ªà¤¿à¤• 'check' बाब NetworkManagerला जोडणी पà¥à¤¨à¥à¤¹à¤¾ तपासणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ परवानगी देते."
+"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+#| msgid ""
+#| "Usage: nmcli radio { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { all | wifi | wwan | wimax }\n"
+#| "\n"
+#| " all | wifi | wwan | wimax [ on | off ]\n"
+#| "\n"
+#| " COMMAND := { all | wifi | wwan }\n"
+#| "\n"
+#| " all | wifi | wwan [ on | off ]\n"
+#| "\n"
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"वापर: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"वापर: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"सरà¥à¤µ रेडिओ सà¥à¤µà¤¿à¤šà¥‡à¤¸à¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा तà¥à¤¯à¤¾à¤¸ सà¥à¤°à¥‚ किंवा बंद करा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"वापर: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"वायफाय रेडिओ सà¥à¤µà¤¿à¤šà¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा सà¥à¤°à¥‚/बंद करा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"वापर: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ रेडिओ सà¥à¤µà¤¿à¤šà¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा सà¥à¤°à¥‚/बंद करा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"वापर: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"वायमॅकà¥à¤¸ रेडिओ सà¥à¤µà¤¿à¤šà¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा सà¥à¤°à¥‚/बंद करा.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
-msgstr "असà¥à¤²à¥€à¤ªà¥"
+msgstr "असà¥à¤²à¥€à¤ª"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "जोडणी करत आहे"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "जोडले (फकà¥à¤¤ सà¥à¤¥à¤¾à¤¨à¥€à¤¯)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "जोडले (फकà¥à¤¤ सà¥à¤¥à¤³)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "जोडणी अशकà¥à¤¯ करत आहे"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "पोरà¥à¤Ÿà¤²"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "मरà¥à¤¯à¤¾à¤¦à¤¿à¤¤"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "भरलेला"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm status': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+#| msgid "Error: 'list configured': %s; allowed fields: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: फकà¥à¤¤ हे कà¥à¤·à¥‡à¤¤à¥à¤° सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ आहे: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "सà¥à¤°à¥‚ केले"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "बंद केले"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "NetworkManager सà¥à¤¥à¤¿à¤¤à¥€"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "कारà¥à¤¯à¤°à¤¤ आहे"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "कारà¥à¤¯à¤°à¤¤ नाही"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+#| msgid "activating"
+msgid "starting"
+msgstr "सà¥à¤°à¥‚ करत आहे"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "सà¥à¤°à¥‚ केले"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm permissions': %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm permissions': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सरà¥à¤µà¤¸à¤¾à¤§à¤¾à¤°à¤£ परवानगी': %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "NetworkManager परवानगी"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: सिसà¥à¤Ÿà¤® बससह जोडणी करणे अशकà¥à¤¯: %s"
+msgid "Error: 'general logging': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सरà¥à¤µà¤¸à¤¾à¤§à¤¾à¤°à¤£ लॉगिंग': %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: D-Bus ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ पà¥à¤°à¥‰à¤•à¥à¤¸à¥€ निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯."
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager लॉगिंग"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "sleep मधà¥à¤¯à¥‡ तà¥à¤°à¥à¤Ÿà¥€ आढळली: %s"
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: यजमाननाव सेट करणà¥à¤¯à¤¾à¤¸ अपयशी: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: येथील '--fields' मूलà¥à¤¯ '%s' वैध नाही; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+#| msgid "Error: 'general logging': %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: लॉगिंग सेट करणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ पà¥à¤°à¤µà¥‡à¤¶ नकारले; %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "नेटवरà¥à¤•à¤¿à¤‚ग सà¥à¤°à¥‚ केले"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'enable' घटक: '%s'; 'true' किंवा 'false' चा वापर करा."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'general' आदेश '%s' वैध नाही."
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: सà¥à¤²à¤¿à¤ªà¤¿à¤‚ग सà¥à¤¤à¤° NetworkManager दà¥à¤µà¤¾à¤°à¥‡ à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ केले जात नाही."
+#| msgid "Error: '--fields' value '%s' is not valid here (allowed fields: %s)"
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '--fields' मूलà¥à¤¯ '%s' येथे वैध नाही (सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'sleep' घटक: '%s'; 'true' किंवा 'false'चा वापर करा."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध '%s' बाब: '%s' (सà¥à¤°à¥‚ किंवा बंदचा वापर करा)."
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi समरà¥à¤¥à¥€à¤¤"
+#: ../cli/src/network-manager.c:746
+#| msgid "\rConnecting"
+msgid "Connectivity"
+msgstr "जोडणी"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'wifi' घटक: '%s'."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "नेटवरà¥à¤•à¤¿à¤‚ग"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN समरà¥à¤¥à¥€à¤¤"
+#: ../cli/src/network-manager.c:783
+#, c-format
+#| msgid "Error: 'networking' command '%s' is not valid."
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'networking connectivity' आदेश '%s' वैध नाही."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'wwan' घटक: '%s'."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'networking' आदेश '%s' वैध नाही."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX समरà¥à¤¥à¥€à¤¤"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "रेडिओ सà¥à¤µà¤¿à¤šà¥‡à¤¸"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'wimax' घटक: '%s'."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi रेडिओ सà¥à¤µà¤¿à¤š"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN रेडिओ सà¥à¤µà¤¿à¤š"
-#: ../cli/src/network-manager.c:588
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX रेडिओ सà¥à¤µà¤¿à¤š"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm' आदेश '%s' वैध नाही."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'radio' आदेश '%s' वैध नाही."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -n[ocheck] don't check nmcli and "
-#| "NetworkManager versions\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1732,11 +4367,16 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
@@ -1752,232 +4392,813 @@ msgstr ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: घटक '%s' अपरिचीत आहे, 'nmcli help' वापरून पहा."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '--terse' दà¥à¤¸à¤±à¥à¤¯à¤¾à¤µà¥‡à¤³à¥€ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '--pretty' चà¥à¤¯à¤¾ तà¥à¤²à¤¨à¥‡à¤¤ परà¥à¤¯à¤¾à¤¯ '--terse' वेगळे आहे."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '--pretty' दà¥à¤¸à¤±à¥à¤¯à¤¾à¤µà¥‡à¤³à¥€ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '--terse' चà¥à¤¯à¤¾ तà¥à¤²à¤¨à¥‡à¤¤ परà¥à¤¯à¤¾à¤¯ '--pretty' वेगळे आहे."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ न आढळलेले घटक."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ '%s' वैध घटक नाही."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ कà¥à¤·à¥‡à¤¤à¥à¤° आढळले नाही."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' हे '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¤¿à¤¤à¤¾ वैध वेळसमापà¥à¤¤à¤¿ नाही."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli साधन, आवृतà¥à¤¤à¥€ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '%s' अपरिचीत आहे, 'nmcli -help' वापरून पहा."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"तà¥à¤°à¥à¤Ÿà¥€: सिगà¥à¤¨à¤² %d तरà¥à¤«à¥‡ nmcli खंडीत à¤à¤¾à¤²à¥‡."
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "संकेत %d पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥‡, बंद करत आहे..."
+msgid "Failed to set signal mask: %d"
+msgstr "सिगà¥à¤¨à¤² मासà¥à¤•: %d सेट करणà¥à¤¯à¤¾à¤¸ अपयशी"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "सिगà¥à¤¨à¤² हाताळणी थà¥à¤°à¥‡à¤¡: %d निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: NMClient ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "यश"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:529
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-बीट पासफà¥à¤°à¥‡à¤œ)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (अपरिचीत)"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (अपरिचीत)"
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "कà¥à¤ à¤²à¥‡à¤¹à¥€, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:588
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:590
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (बंद केले)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (सà¥à¤°à¥‚ केले, पबà¥à¤²à¤¿à¤• IP शिफारसीय आहे)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (सà¥à¤°à¥‚ केले, तातà¥à¤ªà¥à¤°à¥à¤¤à¥‡ IP शिफारसीय आहे)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (काहिच नाही)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "à¤à¤œà¥‡à¤‚ट-मालकी, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "साठवले नाही, "
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "आवशà¥à¤¯à¤• नाही, "
+
+#: ../cli/src/settings.c:1124
+#| msgid "%d (disabled)"
+msgid "0 (disabled)"
+msgstr "0 (बंद केले)"
+
+#: ../cli/src/settings.c:1130
+#| msgid "enabled"
+msgid "enabled, "
+msgstr "सà¥à¤°à¥‚ केले,"
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "जाहिर करा, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "सà¥à¤µà¥€à¤•à¤¾à¤°, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (सेट अशकà¥à¤¯)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "सà¥à¤µà¤¯à¤‚"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ '%s' ला '%s' करिता सेट करायचे? [होय]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ '%s' नषà¥à¤Ÿ करायचे? [होय]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' वैध नाही"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' वैध नाही; <%d-%d> याचा वापर करा"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' वैध नाही; <%d-%d> याचा वापर करा"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' वैध नाही; <option>=<value> याचा वापर करा"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "इंडेकà¥à¤¸ '%s' वैध नाही"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "काढून टाकणà¥à¤¯à¤¾à¤œà¥‹à¤—ी घटक नाही"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "इंडेकà¥à¤¸ '%d' वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿ <0-%d>चà¥à¤¯à¤¾ बाहेर आहे"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "अवैध परà¥à¤¯à¤¾à¤¯ '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "न आढळणारे परà¥à¤¯à¤¾à¤¯"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' वैध कà¥à¤°à¤®à¤¾à¤‚क नाही (किंवा वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿à¤šà¥à¤¯à¤¾ बाहेर आहे)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' वैध इथरनेट MAC मूलà¥à¤¯ नाही"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' वैध इंटरफेस नाव नाही"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' कà¥à¤°à¤®à¤¾à¤‚क नाही"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' वैध हेकà¥à¤¸ अकà¥à¤·à¤° नाही"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' वैध MAC नाही"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' वैध UUID नाही"
+
+#: ../cli/src/settings.c:2317
+#| msgid ""
+#| "Enter a list of user permissions. This is a list of user names formatted "
+#| "as:\n"
+#| " [user:]<user name 1>, [user:]<user name 2>,... \n"
+#| "The items can be separated by commas or spaces.\n"
+#| "\n"
+#| "Example: alice bob charlie\n"
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"वापरकरà¥à¤¤à¤¾ परवानगीची सूची दà¥à¤¯à¤¾. हे वापरकरà¥à¤¤à¤¾ नावांची सूची आहे जà¥à¤¯à¤¾à¤‚चे रूपण "
+"खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡ आहे:\n"
+" [user:]<user name 1>, [user:]<user name 2>,... \n"
+"सà¥à¤µà¤²à¥à¤ªà¤µà¤¿à¤°à¤¾à¤® किंवा सà¥à¤ªà¥‡à¤¸à¤¤à¤°à¥à¤«à¥‡ घटकांना विभाजीत करणे शकà¥à¤¯ आहे.\n"
+"\n"
+"उदाहरणारà¥à¤¥: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' वैध मासà¥à¤Ÿà¤° नाही; ifname किंवा जोडणी UUIDचा वापर करा"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "वà¥à¤¯à¤•à¥à¤¤à¤¿à¤—त कि पासवरà¥à¤¡ पà¥à¤°à¤µà¤²à¥‡ नाही"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ किकरिता मारà¥à¤— व कि पासवरà¥à¤¡ दà¥à¤¯à¤¾ (अजूनही सेट केले नसलà¥à¤¯à¤¾à¤¸):\n"
+" <file path> [<password>]\n"
+"उदाहरणारà¥à¤¥: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¤¿à¤®à¤² मूलà¥à¤¯à¤¾à¤‚ची सूची बाईटà¥à¤¸ सà¥à¤µà¤°à¥‚पात दà¥à¤¯à¤¾.\n"
+"दोन रूपण सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जातात:\n"
+"(a) हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¤¿à¤®à¤² डिजिटà¥à¤¸à¥à¤šà¥€ सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग, जेथे दोन अंक à¤à¤•à¤¾ बाईटचे पà¥à¤°à¤¤à¤¿à¤¨à¤¿à¤§à¤¿à¤¤à¥à¤µ "
+"करतात\n"
+"(b) सà¥à¤ªà¥‡à¤¸-विभाजीत बाइटà¥à¤¸à¥à¤šà¥€ सूची जà¥à¤¯à¤¾à¤¸ हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¤¿à¤®à¤² अंक मà¥à¤¹à¤£à¥‚न लिहले जाते "
+"(वैकलà¥à¤ªà¤¿à¤• 0x/0X "
+"पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤¸à¤¹, आणि वैकलà¥à¤ªà¤¿à¤• लिडिंग 0).\n"
+"\n"
+"उदाहरणारà¥à¤¥: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"बाà¤à¤¡à¤¿à¤‚ग परà¥à¤¯à¤¾à¤¯à¤¾à¤‚ची सूची दà¥à¤¯à¤¾ जà¥à¤¯à¤¾à¤šà¥‡ रूपण खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡ असते:\n"
+" option = <value>, option = <value>,... \n"
+"वैध परà¥à¤¯à¤¾à¤¯ आहेत: %s\n"
+"'mode' ला नाव किंवा कà¥à¤°à¤®à¤¾à¤‚क मà¥à¤¹à¤£à¥‚न पà¥à¤°à¤µà¤£à¥‡ शकà¥à¤¯ आहे:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"उदाहरणारà¥à¤¥: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' वैध InfiniBand MAC नाही"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' वैध IBoIP P_Key नाही"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS सरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¤šà¥à¤¯à¤¾ IPv4 पतà¥à¤¤à¥à¤¯à¤¾à¤‚ची सूची दà¥à¤¯à¤¾.\n"
+"\n"
+"उदाहरणारà¥à¤¥: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' वैध नाही (ip[/prefix] [gateway])"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"IPv4 पतà¥à¤¤à¥à¤¯à¤¾à¤‚ची सूची दà¥à¤¯à¤¾ जà¥à¤¯à¤¾à¤šà¥‡ रूपण खालील पà¥à¤°à¤®à¤¾à¤£à¥‡ आहे:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"न आढळणाऱà¥à¤¯à¤¾ पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤²à¤¾ 32चे पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ असे सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' वैध नाही (ip/[prefix] next-hop [metric] चा वापर करा)"
+
+#: ../cli/src/settings.c:2980
+#| msgid ""
+#| "Enter a list of IPv4 routes formatted as:\n"
+#| " ip/[prefix] next-hop [metric],... \n"
+#| "Missing prefix is regarded as a prefix of 32.\n"
+#| "Missing metric is regarded as a metric of 0.\n"
+#| "\n"
+#| "Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"IPv4 राऊटà¥à¤¸à¥à¤šà¥€ सूची दà¥à¤¯à¤¾ जà¥à¤¯à¤¾à¤šà¥‡ रूपण खालील पà¥à¤°à¤®à¤¾à¤£à¥‡ आहे:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"न आढळणाऱà¥à¤¯à¤¾ पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤²à¤¾ 32चे पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ मà¥à¤¹à¤£à¥‚न घोषीत केले जाते.\n"
+"न आढळणाऱà¥à¤¯à¤¾ पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤²à¤¾ 0चे पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ मà¥à¤¹à¤£à¥‚न घोषीत केले जाते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+#| msgid ""
+#| "Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+#| "method is 'auto' these DNS servers are appended to those (if any) "
+#| "returned by automatic configuration. DNS servers cannot be used with the "
+#| "'shared' or 'link-local' IPv6 configuration methods, as there is no "
+#| "usptream network. In all other IPv6 configuration methods methods, these "
+#| "DNS servers are used as the only DNS servers for this connection.\n"
+#| "\n"
+#| "Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS सरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¤šà¥à¤¯à¤¾ IPv6 पतà¥à¤¤à¥à¤¯à¤¾à¤‚ची सूची दà¥à¤¯à¤¾. IPv6 संरचना मेथड 'auto' "
+"असलà¥à¤¯à¤¾à¤¸, हà¥à¤¯à¤¾ DNS सरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¤²à¤¾ सà¥à¤µà¤¸à¤‚रचनातरà¥à¤«à¥‡ पà¥à¤°à¤µà¤²à¥‡à¤²à¥à¤¯à¤¾à¤‚धà¥à¤¯à¥‡ (असलà¥à¤¯à¤¾à¤¸) "
+"समाविषà¥à¤Ÿ केले जाते. DNS सरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¤šà¤¾ वापर अपसà¥à¤Ÿà¥à¤°à¤¿à¤® नेटवरà¥à¤• नसलà¥à¤¯à¤¾à¤¨à¥‡, "
+"'shared' किंवा 'link-local' IPv6 संरचना मेथेडà¥à¤¸à¤¸à¤¹ शकà¥à¤¯ नाही. इतर सरà¥à¤µ IPv6 "
+"संरचना मेथडà¥à¤¸à¤®à¤§à¥à¤¯à¥‡, हà¥à¤¯à¤¾ DNS सरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¤šà¤¾ वापर हà¥à¤¯à¤¾ जोडणीकरिता à¤à¤•à¤®à¥‡à¤µ DNS "
+"सरà¥à¤µà¥à¤¹à¤°à¥à¤¸ मà¥à¤¹à¤£à¥‚न केला जातो.\n"
+"\n"
+"उदाहरणारà¥à¤¥: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"IPv6 पतà¥à¤¤à¥à¤¯à¤¾à¤‚ची सूची दà¥à¤¯à¤¾ जà¥à¤¯à¤¾à¤šà¥‡ रूपण खालील पà¥à¤°à¤®à¤¾à¤£à¥‡ आहे:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"न आढळणाऱà¥à¤¯à¤¾ पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤²à¤¾ 128चे पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ असे सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr "'%s' वैध नाही (<dest IP>/prefix <next-hop IP> [metric] चा वापर करा)"
+
+#: ../cli/src/settings.c:3197
+#| msgid ""
+#| "Enter a list of IPv6 routes formatted as:\n"
+#| " ip/[prefix] next-hop [metric],... \n"
+#| "Missing prefix is regarded as a prefix of 128.\n"
+#| "Missing metric is regarded as a metric of 0.\n"
+#| "\n"
+#| "Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+#| "db8:beef::3 2\n"
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"IPv6 राऊटà¥à¤¸à¥à¤šà¥€ सूची दà¥à¤¯à¤¾ जà¥à¤¯à¤¾à¤šà¥‡ रूपण खालील पà¥à¤°à¤®à¤¾à¤£à¥‡ आहे:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"न आढळणाऱà¥à¤¯à¤¾ पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤²à¤¾ 128चे पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ असे सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते.\n"
+"न आढळणाऱà¥à¤¯à¤¾ पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤²à¤¾ 0चे पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ असे सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' वैध नाही; 0, 1, किंवा 2चा वापर करा"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' वैध वाहिनी नाही; <1-13> याचा वापर करा"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' वैध नाही; [e, o, n] याचा वापर करा"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli दोनà¥à¤¹à¥€ JSON संरचना डाटा आणि संरचना असलेले फाइल नाव सà¥à¤µà¥€à¤•à¤¾à¤°à¥‚ शकतो. "
+"संबंधित घटनामधà¥à¤¯à¥‡ फाइलचे वाचन होते आणि अंतरà¥à¤­à¥à¤¤ माहितीला हà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ "
+"समाविषà¥à¤Ÿ केले जाते.\n"
+"\n"
+"उदाहरणारà¥à¤¥: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "काढून टाकणà¥à¤¯à¤¾à¤œà¥‹à¤—ी पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ नाही"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "इंडेकà¥à¤¸ '%d' <0-%d>चà¥à¤¯à¤¾ वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿à¤®à¤§à¥à¤¯à¥‡ नाही"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' वैध नाही; 3 सà¥à¤Ÿà¥à¤°à¤¿à¤‚गà¥à¤œ पà¥à¤°à¤µà¤£à¥‡ आवशà¥à¤¯à¤•"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"तीन वाहिनींची सूची दà¥à¤¯à¤¾ (सà¥à¤µà¤²à¥à¤ªà¤µà¤¿à¤°à¤¾à¤® किंवा सà¥à¤ªà¥‡à¤¸ विभाजीत).\n"
+"\n"
+"उदाहरणारà¥à¤¥: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+#| msgid ""
+#| "Enter a list of S/390 options formatted as:\n"
+#| " option = <value>, option = <value>,... \n"
+#| "Valid options are: %s\n"
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"S/390 परà¥à¤¯à¤¾à¤¯à¤¾à¤‚ची सूची दà¥à¤¯à¤¾:\n"
+" option = <value>, option = <value>,...\n"
+"वैध परà¥à¤¯à¤¾à¤¯ खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡ आहेत: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' वैध वाहिनी नाही"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' वैध वाहिनी नाही"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP कि '%s' असू शकते\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' पैकी नाही [0 (अपरिचीत), 1 (कि), 2 (पासफà¥à¤°à¥‡à¤œ)]"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP किजचा पà¥à¤°à¤•à¤¾à¤° दà¥à¤¯à¤¾. सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ मूलà¥à¤¯à¥‡: 0 किंवा अपरिचीत, 1 किंवा कि, आणि 2 "
+"किंवा पासफà¥à¤°à¥‡à¤œ आहे.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' वैध PSK नाही"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+#| msgid "'%s' is not a valid MAC"
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' वैध DCB फà¥à¤²à¥…ग नाही"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+#| msgid "'%s' is not a valid value for the property"
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' DCB ॲप पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ नाही"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "८ सà¥à¤µà¤²à¥à¤ªà¤µà¤¿à¤°à¤¾à¤®-विभाजीत संखà¥à¤¯à¤¾ समाविषà¥à¤Ÿà¥€à¤¤ पाहिजे"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' हे ० आणि %u (इंकà¥à¤²à¥à¤¸à¤¿à¤µà¥à¤¹) किंवा %u अंतरà¥à¤—त संखà¥à¤¯à¤¾ नाही"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' हे ० आणि %u (इंकà¥à¤²à¥à¤¸à¤¿à¤µà¥à¤¹) अंतरà¥à¤—त संखà¥à¤¯à¤¾ नाही"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"सावधानता: '%s' मधà¥à¤¯à¥‡ जोपरà¥à¤¯à¤‚त १ (सà¥à¤°à¥‚) समाविषà¥à¤Ÿà¥€à¤¤ असलà¥à¤¯à¤¾à¤µà¤¿à¤¨à¤¾ केलेले बदल "
+"पà¥à¤°à¤­à¤¾à¤µà¥€ ठरणार नाही\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "बà¤à¤¡à¤µà¤¿à¤¡à¥à¤¥ टकà¥à¤•à¥‡à¤µà¤¾à¤°à¥€ à¤à¤•à¥‚ण 100%% पाहिजे"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ कसे पà¥à¤°à¤¾à¤ªà¥à¤¤ करायचे ते माहिती नाही"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® बदलणे अशकà¥à¤¯"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM गà¥à¤£à¤§à¤°à¥à¤® वरà¥à¤£à¤¨]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ वरà¥à¤£à¤¨]"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' बाबकरिता मूलà¥à¤¯ आवशà¥à¤¯à¤• आहे."
+
+#: ../cli/src/utils.c:153
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: बाब '%s' अपेकà¥à¤·à¥€à¤¤, परंतॠ'%s' पà¥à¤°à¤µà¤²à¥‡."
+
+#: ../cli/src/utils.c:156
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अनपेकà¥à¤·à¥€à¤¤ बाब '%s'"
+
+#: ../cli/src/utils.c:206
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 पतà¥à¤¤à¤¾ '0x%X' यास मजकूर सà¥à¤µà¤°à¥‚पात रूपांतरीत करतेवेळी तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:234
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 पतà¥à¤¤à¤¾ '%s' यास मजकूर सà¥à¤µà¤°à¥‚पात रूपांतरीत करतेवेळी तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:410
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' वैध नाही; [%s] किंवा [%s] याचा वापर करा"
+
+#: ../cli/src/utils.c:492
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' संदिगà¥à¤§ आहे (%s x %s)"
+
+#: ../cli/src/utils.c:504
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "नाव आढळले नाही, [%s] पैकी à¤à¤• वापरून पहा"
+
+#: ../cli/src/utils.c:721
#, c-format
msgid "field '%s' has to be alone"
msgstr "कà¥à¤·à¥‡à¤¤à¥à¤° '%s' वेगळे असायला हवे"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:724
#, c-format
-msgid "invalid field '%s'"
-msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'"
+#| msgid "Error: 'list configured': %s; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:781
msgid "Option '--terse' requires specifying '--fields'"
msgstr "परà¥à¤¯à¤¾à¤¯ '--terse' यांस '--fields' निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:785
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"परà¥à¤¯à¤¾à¤¯ '--terse' यांस '--fields' परà¥à¤¯à¤¾à¤¯ मूलà¥à¤¯à¥‡ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे , '%"
"s' नाही"
-#: ../cli/src/utils.c:468
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"तà¥à¤°à¥à¤Ÿà¥€: org.freedesktop.DBus करीता D-Bus ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ पà¥à¤°à¥‰à¤•à¥à¤¸à¥€ निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯"
-
-#: ../cli/src/utils.c:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: NameHasOwner विनंती अपयशी: %s"
-
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1104
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1986,7 +5207,7 @@ msgstr ""
"सावधानता: nmcli (%s) व NetworkManager (%s) आवृतà¥à¤¤à¥€ जà¥à¤³à¤¤ नाही. सावधानता "
"दडपणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ --nocheck याचा वापर करा.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1113
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -2006,116 +5227,87 @@ msgstr "PEM कि फाइल अंतरà¥à¤—त समापà¥à¤¤ टॅà
msgid "Doesn't look like a PEM private key file."
msgstr "PEM वैयकà¥à¤¤à¤¿à¤• कि फाइल नà¥à¤°à¥‚प आढळले नाही."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM फाइल माहिती साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "सदोषीत PEM फाइल: Proc-Type पà¥à¤°à¤¥à¤® टॅग नवà¥à¤¹à¤¤à¥‡."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "सदोषीत PEM फाइल: अपरिचीत Proc-Type टॅग '%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "सदोषीत PEM फाइल: DEK-Info दूसरे टॅग नवà¥à¤¹à¤¤à¥‡."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "सदोषीत PEM फाइल: DEK-Info टॅग अंतरà¥à¤—त IV आढळले नाही."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "सदोषीत PEM फाइल:DEK-Info टॅग अंतरà¥à¤—त IV चे अवैध सà¥à¤µà¤°à¥‚प आढळे."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "सदोषीत PEM फाइल: अपरिचीत वैयकà¥à¤¤à¤¿à¤• सीफर कि '%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि डिकोड करू शकले नाही."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "अपेकà¥à¤·à¤¿à¤¤ PKCS#8 सà¥à¤°à¥‚वातीचे टॅग शोधणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "अपेकà¥à¤·à¤¿à¤¤ PKCS#8 समापà¥à¤¤à¤¿à¤šà¥‡ टॅग '%s' शोधणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "वà¥à¤¯à¤•à¥à¤¤à¤¿à¤—त कि डाटा साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ अतिरिकà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¥€ नाही."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि डिकोड करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° माहिती साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ची लांबी सम बाईटसॠची संखà¥à¤¯à¤¾ असायला हवी."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¥à¤• नाही."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV अंतरà¥à¤—त non-hexadecimal अंक."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि सिफर '%s' अपरिचीत नà¥à¤°à¥‚प आढळले."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "फाइल माहिती साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "जà¥à¤£à¥€ वैयकà¥à¤¤à¤¿à¤• कि साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¥à¤• नाही."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि पà¥à¤°à¤•à¤¾à¤° ओळखणे अशकà¥à¤¯."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤°à¤¾à¤¤ सà¥à¤°à¤µà¤¾à¤¤ टॅग '%s' आढळले नाही."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤°à¤¾à¤¤ समापà¥à¤¤ टॅग '%s' आढळले नाही."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड करणà¥à¤¯à¤¾à¤¸ अपयशी."
@@ -2134,97 +5326,87 @@ msgstr "MD5 इंजीन पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपà¤
msgid "Invalid IV length (must be at least %zd)."
msgstr "अवैध IV लांबी (किमान %zd असायला हवे)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "जà¥à¤£à¥‡ कि बफर करीता सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ सिफर संदरà¥à¤­ पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ करीता सम कि निशà¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ करीता IV निशà¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणे अशकà¥à¤¯: अनपेकà¥à¤·à¥€à¤¤ पॅडींग लांबी."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥€à¤‚ग करीता मेमरीचे वाटप करणे अशकà¥à¤¯."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ सीफर संदरà¥à¤­ सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨à¤•à¤°à¥€à¤¤à¤¾ सम कि सेट करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ करीता IV सेट करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£ माहिती पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ तà¥à¤°à¥à¤Ÿà¥€: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 डिकोडर पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 फाइल डिकोड करणà¥à¤¯à¤¾à¤¸ अपयशी: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 फाइल तपासणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 डिकोडर: %s सà¥à¤°à¥‚ करणे अशकà¥à¤¯"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 फाइल: %s डिकोड करणे अशकà¥à¤¯"
@@ -2244,124 +5426,490 @@ msgstr "MD5 संदरà¥à¤­ पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अà¤
msgid "Invalid IV length (must be at least %d)."
msgstr "अवैध IV लांबी (किमान %d असायला हवे)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ सिफर कà¥à¤·à¥‡à¤¤à¥à¤° पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ करीता सम कि निशà¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ करीता IV निशà¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ संदरà¥à¤­ पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणे अशकà¥à¤¯: डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ केलेला डाटा खूप मोठा आहे."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "वैयकà¥à¤¤à¤¿à¤• किचे डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ ठरविणà¥à¤¯à¤¾à¤¸ अपयशी: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ सीफर सà¥à¤²à¥‰à¤Ÿ सà¥à¤°à¥‚ करणे अशकà¥à¤¯."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ करीता सिमेटà¥à¤°à¥€à¤• कि सेट करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨à¤¸à¤¾à¤ à¥€ IV सेट करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ संदरà¥à¤­ पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥€à¤‚ग नंतर अनपेकà¥à¤·à¥€à¤¤ डाटाचे पà¥à¤°à¤®à¤¾à¤£."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड करणे अशकà¥à¤¯: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "परवलीचा शबà¥à¤¦ UCS2 नà¥à¤°à¥‚प रूपांतरन अशकà¥à¤¯: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 डिकोडर पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 फाइल डिकोड करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 फाइल तपास करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "विनाकà¥à¤°à¤® डाटा निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® आढळले नाही"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® रिकामे आहे"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 करीता '%s' गà¥à¤£à¤§à¤°à¥à¤® जà¥à¤³à¤¾à¤¯à¤²à¤¾ हवे"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® अवैध आहे"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¥€à¤¤à¤¾ '%s' वैध मूलà¥à¤¯ नाही"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' किंवा '%s' सेटिंग आवशà¥à¤¯à¤•"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "अवैध परà¥à¤¯à¤¾à¤¯ '%s' किंवा मूलà¥à¤¯ '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s' पैकी à¤à¤• व '%s' ठरवणे शकà¥à¤¯"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "अनिवारà¥à¤¯ परà¥à¤¯à¤¾à¤¯ '%s' आढळले नाही"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' हे '%s' करीता वैध मूलà¥à¤¯ नाही"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' हे '%s > 0' सह असहतà¥à¤µ आहे"
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+#| msgid "'%s' is not a valid interface name"
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' वैध संवाद नाव नाही, '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¤¿à¤¤à¤¾"
+
+#: ../libnm-util/nm-setting-bond.c:593
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ कि निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अतिरीकà¥à¤¤ मेमरी आढळली नाही."
+#| msgid "'%s' is not a valid value for '%s'"
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' परà¥à¤¯à¤¾à¤¯ फकà¥à¤¤ '%s=%s' करिता वैध आहे"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM फाइल निरà¥à¤®à¤¾à¤£à¤•à¤°à¥€à¤¤à¤¾ मेमरीचे वाटप करणे अशकà¥à¤¯."
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' हे '%s' करीता वैध संरचना नाही"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "IV ला PEM फाइलवर लिहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मेमरीचे वाटप करणे अशकà¥à¤¯."
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' परà¥à¤¯à¤¾à¤¯à¤²à¤¾ '%s' परà¥à¤¯à¤¾à¤¯ सेट करणे आवशà¥à¤¯à¤• आहे"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ किला PEM फाइलवर लिहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मेमरीचे वाटप करणे अशकà¥à¤¯."
+msgid "'%s' option is empty"
+msgstr "'%s' परà¥à¤¯à¤¾à¤¯ रिकामे आहे"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-bond.c:671
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM फाइल डाटाकरीता मेमरीचे वाटप करणे अशकà¥à¤¯."
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' हे '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ वैध IPv4 पतà¥à¤¤à¤¾ नाही"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¥€à¤¤à¤¾ '%d' वैध मूलà¥à¤¯ नाही (<= %d पाहिजे)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "मूलà¥à¤¯ '%d' वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿ <%d-%d> चà¥à¤¯à¤¾ बाहेर आहे"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® रिकामे आहे"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' वरà¥à¤šà¥à¤¯à¥à¤…ल इंटरफेस नाव '%s' सह जà¥à¤³à¤¤ नाही"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "जोडणीमधà¥à¤¯à¥‡ '%s' सेटिंग असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ पाहिजे"
+
+#: ../libnm-util/nm-setting-connection.c:802
+#| msgid "IPv4 configuration is not allowed for bonding slave"
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 संरचना सà¥à¤²à¥‡à¤µà¥à¤¹à¤•à¤°à¤¿à¤¤à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
+
+#: ../libnm-util/nm-setting-connection.c:815
+#| msgid "IPv6 configuration is not allowed for bonding slave"
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 संरचना सà¥à¤²à¥‡à¤µà¥à¤¹à¤•à¤°à¤¿à¤¤à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+#| msgid "flags are invalid"
+msgid "flags invalid"
+msgstr "फà¥à¤²à¥…गà¥à¤œ अवैध"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+#| msgid "flags are invalid"
+msgid "flags invalid - disabled"
+msgstr "फà¥à¤²à¥…गà¥à¤œ अवैध - बंद केले"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+#| msgid "property is invalid"
+msgid "property invalid (not enabled)"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® अवैध (सà¥à¤°à¥‚ केले नाही)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+#| msgid "flags are invalid"
+msgid "element invalid"
+msgstr "à¤à¤²à¤¿à¤®à¥‡à¤‚ट अवैध"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "बेरीज 100% नाही"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+#| msgid "property is invalid"
+msgid "property invalid"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® अवैध"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+#| msgid "property is missing"
+msgid "property missing"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® आढळले नाही"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ '%s' रिकामे आहे किंवा खूप लांब आहे (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' मधà¥à¤¯à¥‡ अवैध अकà¥à¤·à¤°à¥‡ आहेत ([A-Za-z._-] यांचा वापर करा)"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' लांबी अवैध आहे (5 किंवा 6 अंकीय पाहिजे)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "वैध इंटरफेस नाव नाही"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "पॅरेंट निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करत असलà¥à¤¯à¤¾à¤¸ P_Key निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करा"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key जोडणीने पॅरेंट इंटरफेस नाव निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले नाही"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "हे गà¥à¤£à¤§à¤°à¥à¤® '%s=%s' करीता सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 पतà¥à¤¤à¤¾ अवैध आहे"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 पतà¥à¤¤à¤¾à¤®à¤§à¥à¤¯à¥‡ अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ आहे"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. राऊट अवैध आहे"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. राऊटकडे अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ आहे"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' यास %s=%s करीता सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जात नाही"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID लांबी वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿ <1-32> बाइटà¥à¤¸à¤šà¥à¤¯à¤¾ बाहेर आहे"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' वैध वाहिनी नाही"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' वैध वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿ <128-16384> चà¥à¤¯à¤¾ बाहेर आहे"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "या गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤²à¤¾ ठरवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ नॉन-à¤à¤¿à¤°à¥‹ '%s' गà¥à¤£à¤§à¤°à¥à¤® आवशà¥à¤¯à¤• आहे"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' मूलà¥à¤¯ '%s=%s' सह जà¥à¤³à¤¤ नाही"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' UUID किंवा इंटरफेस नाव नाही"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही व '%s:%s' नाही"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "फà¥à¤²à¥…गà¥à¤¸ अवैध आहेत"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' वैध इथरनेट पोरà¥à¤Ÿ मूलà¥à¤¯ नाही"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' वैध डà¥à¤¯à¥à¤ªà¥à¤²à¥‡à¤•à¥à¤¸ मूलà¥à¤¯ नाही"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "वैध MAC पतà¥à¤¤à¤¾ नाही"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' वैध MAC पतà¥à¤¤à¤¾ नाही"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "अवैध '%s' किंवा तà¥à¤¯à¤¾à¤šà¥‡ मूलà¥à¤¯ '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' सà¥à¤°à¤•à¥à¤·à¤¾à¤•à¤°à¤¿à¤¤à¤¾ '%s=%s' आवशà¥à¤¯à¤•"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' सेकà¥à¤¯à¥à¤°à¤¿à¤Ÿà¤¿à¤²à¤¾ '%s' सेटिंग आवशà¥à¤¯à¤• आहे"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' मूलà¥à¤¯ <0-3> वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿à¤šà¥à¤¯à¤¾ बाहेर आहे"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' जोडणींना या गà¥à¤£à¤§à¤°à¥à¤® अंतरà¥à¤—त '%s' आवशà¥à¤¯à¤• आहे"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' यास फकà¥à¤¤ '%s=%s' (WEP) सह वापरणे शकà¥à¤¯ आहे"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' वैध वाय-फाय मोड नाही"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' वैध बà¤à¤¡ नाही"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "'%s' गà¥à¤£à¤§à¤°à¥à¤® सेट करणे आवशà¥à¤¯à¤• आहे"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2460,128 +6008,79 @@ msgstr "परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननà
msgid "System policy prevents modification of the persistent system hostname"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननावाचे संपादन रोखत आहे"
-#: ../src/main.c:158
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "सिगà¥à¤¨à¤² मासà¥à¤•: %d सेट करणà¥à¤¯à¤¾à¤¸ अपयशी"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "सिगà¥à¤¨à¤² हाताळणी थà¥à¤°à¥‡à¤¡: %d निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अपयशी"
-
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s ला उघडणà¥à¤¯à¤¾à¤¸ अपयशी: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s करीता लिहणà¥à¤¯à¤¾à¤¸ अपयशी: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s बंद करणà¥à¤¯à¤¾à¤¸ अपयशी: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager आधिपासूनच (pid %ld) चालवत आहे\n"
-#: ../src/main.c:363
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager आवृतà¥à¤¤à¥€à¤šà¥€ छपाई करा व बाहेर पडा"
-#: ../src/main.c:364
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "डिमन बनू नका"
-#: ../src/main.c:365
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "डिमन बनू नका, व stderr करिता लॉग करा"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "लॉग सà¥à¤¤à¤°: [%s] पैकी à¤à¤•"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "',' दà¥à¤µà¤¾à¤°à¥‡ विभाजीत लॉग डोमेनà¥à¤¸: [%s] पैकी कोणतिही जोडणी"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "सरà¥à¤µ सावधानता धोकादायक करा"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "PID फाइलचे ठिकाण निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करा"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "filename"
msgstr "फाइलनाव"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "State file location"
msgstr "फाइल ठिकाण ठरवा"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:368
-msgid "Config file location"
-msgstr "फाइल ठिकाण संरचीत करा"
-
-#: ../src/main.c:368
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:369
-msgid "List of plugins separated by ','"
-msgstr "',' तरà¥à¤«à¥‡ विभाजीत पà¥à¤²à¤—इंसà¥à¤šà¥€ सूची"
-
-#: ../src/main.c:369
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:371
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "लॉग सà¥à¤¤à¤°: [ERR, WARN, INFO, DEBUG] पैकी à¤à¤•"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:374
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"',' तरà¥à¤«à¥‡ विभाजीत लॉग डोमैनà¥à¤¸à¥: खालीलपैकी कोणतेहि à¤à¤•\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:380
-msgid "An http(s) address for checking internet connectivity"
-msgstr "इंटरनेट जोडणी तपासणीकरीता http(s) पतà¥à¤¤à¤¾"
-
-#: ../src/main.c:381
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "जोडणी तपासणी (सेकंदात) अंतरà¥à¤—त कालवधि"
-
-#: ../src/main.c:382
-msgid "The expected start of the response"
-msgstr "पà¥à¤°à¤¤à¤¿à¤¸à¤¾à¤¦à¤¾à¤šà¥€ अपेकà¥à¤·à¤¿à¤¤ सà¥à¤°à¥‚वात"
-
-#: ../src/main.c:382
-msgid "Bingo!"
-msgstr "बिंगो!"
-
-#: ../src/main.c:387
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules तà¥à¤®à¤šà¥à¤¯à¤¾ पà¥à¤²à¥…फॉरà¥à¤®à¤µà¤° समरà¥à¤¥à¥€à¤¤ नाही!\n"
-#: ../src/main.c:406
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "NetworkManager सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ रूट असणे आवशà¥à¤¯à¤•!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2589,47 +6088,63 @@ msgid ""
"should associate with."
msgstr ""
"NetworkManager सरà¥à¤µ नेटवरà¥à¤• जोडणी नियंतà¥à¤°à¥€à¤¤ करतो व सà¥à¤µà¤¯à¤‚रितà¥à¤¯à¤¾ वापरकरीता\n"
-"उतà¥à¤¤à¤® जोडणी पसंत करतो. ते वापरकरà¥à¤¤à¥à¤¯à¤¾à¤²à¤¾ वायरलेस ॲकà¥à¤¸à¥‡à¤¸ पॉईंटसॠनिरà¥à¤¦à¥‡à¤¶à¥€à¤¤ "
+"उतà¥à¤¤à¤® जोडणी पसंत करतो. ते वापरकरà¥à¤¤à¥à¤¯à¤¾à¤²à¤¾ वायरलेस ॲकà¥à¤¸à¥‡à¤¸ पॉईंटसॠनिरà¥à¤¦à¥‡à¤¶à¥€à¤¤ "
"करणà¥à¤¯à¤¾à¤¸\n"
"परवानगी देते जà¥à¤¯à¤¾à¤¸à¤¹ संगणकातील वायरलेस\n"
-"कारà¥à¤¡à¤¸à¥ संपरà¥à¤•\n"
-"साधतात."
+"कारà¥à¤¡à¤¸à¥ संपरà¥à¤• साधतात."
-#: ../src/main.c:412
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "अवैध परà¥à¤¯à¤¾à¤¯. वैध परà¥à¤¯à¤¾à¤¯à¤šà¥€ यादी पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --help वापरा.\n"
-#: ../src/main.c:422
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ रूट असणे आवशà¥à¤¯à¤•!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. वैध परà¥à¤¯à¤¾à¤¯à¤šà¥€ सूची पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --help वापरा.\n"
-#: ../src/main.c:449
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr "आदेश ओळवरील पà¥à¤°à¤µà¤²à¥‡à¤²à¥à¤¯à¤¾ अपरिचीत लॉग डोमेनà¥à¤¸ '%s' कडे दà¥à¤°à¥à¤²à¤•à¥à¤· करत आहे\n"
+
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "संरचना: (%d) %s वाचणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯\n"
-#: ../src/main.c:460
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. वैध परà¥à¤¯à¤¾à¤¯à¤šà¥€ सूची पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --help वापरा.\n"
+#| msgid "Error: connection verification failed: %s\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "संरचना फाइल: %s मधà¥à¤¯à¥‡ तà¥à¤°à¥à¤Ÿà¥€.\n"
-#: ../src/main.c:467
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "config फाइलà¥à¤¸à¤ªà¤¾à¤¸à¥‚न अपरिचीत लॉग डोमेनà¥à¤¸ '%s'.\n"
+
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "सà¥à¤Ÿà¥‡à¤Ÿ फाइल %s वाचणà¥à¤¯à¤¾à¤¸ अपयशी: (%d) %s\n"
-#: ../src/main.c:484
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "डिमनाइज करणे अशकà¥à¤¯: %s [error %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:61
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+#| msgid "Networking"
+msgid "%s Network"
+msgstr "%s नेटवरà¥à¤•"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# NetworkManager दà¥à¤µà¤¾à¤°à¥‡ निरà¥à¤®à¥€à¤¤\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:68
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2638,185 +6153,1320 @@ msgstr ""
"# %s पासून à¤à¤•à¤¤à¥à¤°à¥€à¤¤ केले\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "वापरणà¥à¤¯à¤¾à¤œà¥‹à¤—ी DHCP कà¥à¤²à¤¾à¤à¤‚ट आढळले नाही."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' आढळले नाही."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' आढळले नाही."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "असमरà¥à¤¥à¥€à¤¤ DHCP कà¥à¤²à¤¾à¤à¤‚ट '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"NOTE: libc रिजॉलवà¥à¤¹à¤° 3 पेकà¥à¤·à¤¾ जासà¥à¤¤ नेमसरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¥ करीता समरà¥à¤¥à¤¨ पà¥à¤°à¤µà¥‚ शकणार "
"नाही."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "खालिल यादीतील नेमसरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¥ अनोळखी राहतील."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "अपरिचीत लॉग सà¥à¤¤à¤° '%s'"
-#: ../src/logging/nm-logging.c:181
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "अपरिचीत लॉग डोमेन '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:280 ../src/nm-device-bt.c:351
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA जोडणी %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "फाइल ठिकाण संरचीत करा"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
-#: ../src/modem-manager/nm-modem-gsm.c:558 ../src/nm-device-bt.c:347
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "डिरेकà¥à¤Ÿà¥à¤°à¤¿ ठिकाण संरचीत करा"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' तरà¥à¤«à¥‡ विभाजीत पà¥à¤²à¤—इंसà¥à¤šà¥€ सूची"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "इंटरनेट जोडणी तपासणीकरीता http(s) पतà¥à¤¤à¤¾"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "जोडणी तपासणी (सेकंदात) अंतरà¥à¤—त कालवधि"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "पà¥à¤°à¤¤à¤¿à¤¸à¤¾à¤¦à¤¾à¤šà¥€ अपेकà¥à¤·à¤¿à¤¤ सà¥à¤°à¥‚वात"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "बिंगो!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
msgid "GSM connection %d"
msgstr "GSM जोडणी %d"
-#: ../src/nm-device-bond.c:192
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA जोडणी %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "बाà¤à¤¡ जोडणी %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL जोडणी %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "बà¥à¤°à¤¿à¤œ जोडणी %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN जोडणी %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN जोडणी %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE जोडणी %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "वायरà¥à¤¡à¥ जोडणी %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "इंफिनिबà¤à¤¡ जोडणी %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "मेशMesh %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Team connection %d"
+msgstr "टिम जोडणी %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN जोडणी %d"
-#: ../src/nm-manager.c:662
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN जोडणी %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "सॉकेट वरील माहिती करीता पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करतेवेळी तà¥à¤°à¥à¤Ÿà¥€ आढळली"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "netlink संदेश विशà¥à¤²à¥‡à¤·à¥€à¤¤ करतेवेळी तà¥à¤°à¥à¤Ÿà¥€: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "सॉकेट वरील माहिती करीता पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करतेवेळी तà¥à¤°à¥à¤Ÿà¥€ आढळली"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink शी जà¥à¤³à¤µà¤£à¥€ सà¥à¤¥à¤¾à¤ªà¥€à¤¤ करणे अशकà¥à¤¯: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "netlink दà¥à¤µà¤¾à¤°à¥‡ परवानगी सà¥à¤µà¥€à¤•à¤¾à¤°à¤£à¥‡ समरà¥à¤¥à¥€à¤¤ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr "दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink handle चे वाटप अशकà¥à¤¯: %s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink दà¥à¤µà¤¾ कॅशे वाटप करणे अशकà¥à¤¯: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "netlink गटसह जोडणी करणे अशकà¥à¤¯: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "दà¥à¤µà¤¾ कॅशे अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करतेवेळी तà¥à¤°à¥à¤Ÿà¥€: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+#| msgid "NetworkManager status"
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager ला नेटवरà¥à¤• बंद करायची आवशà¥à¤¯à¤•à¤¤à¤¾ आहे"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3663
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "बाà¤à¤¡"
-#: ../test/nm-online.c:111
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "टिम"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
+msgid "Bridge"
+msgstr "बà¥à¤°à¤¿à¤œ"
+
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\rजोडणी करत आहे"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "जोडणीकरीता थांबणà¥à¤¯à¤¾à¤œà¥‹à¤—ी वेळ, सेकंदात (30 पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ आहे)"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"जोडणीकरिता पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करणà¥à¤¯à¤¾à¤œà¥‹à¤—ी वेळ, सेकंदात (परà¥à¤¯à¤¾à¤¯ विना, पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ "
+"मूलà¥à¤¯ 30 आहे)"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr "NetworkManager सà¥à¤°à¥‚ नसलà¥à¤¯à¤¾à¤¸ किंवा जोडणी अशकà¥à¤¯ असलà¥à¤¯à¤¾à¤¸ पटकन बाहेर पडा"
+#: ../test/nm-online.c:105
+#| msgid "Exit immediately if NetworkManager is not running or connecting"
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "NetworkManager सà¥à¤°à¥‚ नसलà¥à¤¯à¤¾à¤¸ पटकण बाहेर पडा"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "काहिहि छापू नका"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "NetworkManager मधà¥à¤¯à¥‡ यशसà¥à¤µà¥€ जोडणीकरीता थांबतो."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…प नेटवरà¥à¤• जोडणà¥à¤¯à¤¾ सकà¥à¤°à¥€à¤¯ करणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न बंद करणà¥à¤¯à¤¾à¤šà¥€ पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करतो."
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
"अवैध परà¥à¤¯à¤¾à¤¯. वैध परà¥à¤¯à¤¾à¤¯à¤¾à¤‚ची सूची पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --helpचा वापर करा."
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "ठिक आहे"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+#| msgid "Could not allocate memory for PEM file data."
+msgid "Could not create temporary file: %s"
+msgstr "तातà¥à¤ªà¥à¤°à¥à¤¤à¥à¤¯à¤¾ फाइल: %s चे निरà¥à¤®à¤¾à¤£ अशकà¥à¤¯"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+#| msgid "Writing to %s failed: %s\n"
+msgid "Editor failed: %s"
+msgstr "संपादक अपयशी: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not re-read file: %s"
+msgstr "फाइल: %s वाचणे अशकà¥à¤¯"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Ethernet connection %d"
+msgstr "इथरनेट जोडणी %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Wi-Fi connection %d"
+msgstr "वायफाय जोडणी %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+#| msgid "Bond connection %d"
+msgid "Mobile broadband connection %d"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ जोडणी %d"
+
+#: ../tui/nm-editor-utils.c:190
+#| msgid "DNS"
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+#| msgid "ADSL connection %d"
+msgid "DSL connection %d"
+msgstr "DSL जोडणी %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "वायरà¥à¤¡"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "बà¥à¤²à¥à¤Ÿà¥à¤¥"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "OLPC मेश"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "WiMax"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "PCI"
+
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "निवडा..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "समाविषà¥à¤Ÿ करा"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "संपादित करा..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "नषà¥à¤Ÿ करा"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "जोडणी '%s', पà¥à¤°à¤•à¤¾à¤° '%s' करिता संपादकचे निरà¥à¤®à¤¾à¤£ अशकà¥à¤¯."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+#| msgid "Could not allocate memory for PEM file creation."
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "अवैध जोडणी '%s' करिता संपादकाचे निरà¥à¤®à¤¾à¤£ अशकà¥à¤¯."
+
+#: ../tui/nmt-editor.c:95
+#| msgid "disconnecting"
+msgid "Edit connection"
+msgstr "जोडणी संपादित करा"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error saving connection: %s"
+msgstr "जोडणी: %s साठवतेवेळी तà¥à¤°à¥à¤Ÿà¥€"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+#| msgid "unable to join netlink group: %s"
+msgid "Unable to save connection: %s"
+msgstr "जोडणी: %s साठवणे अशकà¥à¤¯"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Unable to add new connection: %s"
+msgstr "नवीन जोडणी: %s समाविषà¥à¤Ÿ करणे अशकà¥à¤¯"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "रदà¥à¤¦ करा"
+
+#: ../tui/nmt-mtu-entry.c:86
+#| msgid "default"
+msgid "(default)"
+msgstr "(पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "बाइटà¥à¤¸"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "राऊंड-रॉबिन"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "सकà¥à¤°à¥€à¤¯ बॅकअप"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "बà¥à¤°à¥‰à¤¡à¤•à¤¾à¤¸à¥à¤Ÿ"
+
+#: ../tui/nmt-page-bond.c:92
+#| msgid "802.1X"
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "अडॅपà¥à¤Ÿà¤¿à¤µà¥à¤¹ टà¥à¤°à¤¾à¤‚सà¥à¤®à¤¿à¤Ÿ लोड बॅलेंसिंग (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "अडॅपà¥à¤Ÿà¤¿à¤µà¥à¤¹ लोड बॅलेंसिंग (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (शिफारसीय)"
+
+#: ../tui/nmt-page-bond.c:101
+#| msgid "AP"
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "सà¥à¤²à¥‡à¤µà¥à¤¹à¤œ"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "मोड"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "लिंक नियंतà¥à¤°à¤£"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "नियंतà¥à¤°à¤£ वारंवारता"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "लिंक अप विलंब"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "लिंक डाऊन विलंब"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP लकà¥à¤·à¥à¤¯"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "BRIDGE PORT"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "पाथ कॉसà¥à¤Ÿ"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "हैरà¥à¤ªà¤¿à¤¨ मोड"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRIDGE"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "सेकंद"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "à¤à¤œà¤¿à¤‚ग वेळ"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP सà¥à¤°à¥‚ करा (सà¥à¤ªà¥…निंग टà¥à¤°à¥€ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤²)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "फॉरवरà¥à¤¡ डिले"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "हलो वेळ"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "कमाल वय"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+#| msgid "is not a valid MAC address"
+msgid "Cloned MAC address"
+msgstr "कà¥à¤²à¥‹à¤¨ केलेले MAC पतà¥à¤¤à¥‡"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "डाटागà¥à¤°à¤¾à¤®"
+
+#: ../tui/nmt-page-infiniband.c:52
+#| msgid "connected"
+msgid "Connected"
+msgstr "जोडणी केली"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "टà¥à¤°à¤¾à¤‚सà¥à¤ªà¥‹à¤°à¥à¤Ÿ मोड"
+
+#: ../tui/nmt-page-ip4.c:41
+#| msgid "disabled"
+msgid "Disabled"
+msgstr "बंद केले"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "सà¥à¤µ"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "लिंक-लोकल"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "मॅनà¥à¤¯à¥à¤…ल"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "शेअरà¥à¤¡"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 संरचना"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(पसंतीचे राऊटà¥à¤¸ नाही)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à¤à¤• पसंतीचा राउट"
+msgstr[1] "%d पसंतीचे राउट"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "पतà¥à¤¤à¥‡"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "गेटवे"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "DNS सरà¥à¤µà¥à¤¹à¤°à¥à¤¸"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "सरà¥à¤š डोमैनà¥à¤¸"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "राउटिंग"
+
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ राऊटकरिता हà¥à¤¯à¤¾ नेटवरà¥à¤•à¤šà¤¾ वापर कधीच करू नका"
+
+#: ../tui/nmt-page-ip4.c:184
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "Require IPv4 addressing for this connection"
+msgstr "हà¥à¤¯à¤¾ जोडणीकरिता IPv4 पतà¥à¤¤à¤¾ आवशà¥à¤¯à¤• आहे"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "दà¥à¤°à¥à¤²à¤•à¥à¤· करा"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "सà¥à¤µ (फकà¥à¤¤ DHCP)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 संरचना"
+
+#: ../tui/nmt-page-ip6.c:182
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "Require IPv6 addressing for this connection"
+msgstr "हà¥à¤¯à¤¾ जोडणीकरिता IPv6 पतà¥à¤¤à¤¾ आवशà¥à¤¯à¤• आहे"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "लपवा"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "दाखवा"
+
+#: ../tui/nmt-page-main.c:181
+#| msgid "filename"
+msgid "Profile name"
+msgstr "पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² नाव"
+
+#: ../tui/nmt-page-main.c:188
+#| msgid "Device details"
+msgid "Device"
+msgstr "साधन"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "सà¥à¤µ जोडणी करा"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "सरà¥à¤µ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤‚ना उपलबà¥à¤§"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "TEAM PORT"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON संरचना"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "TEAM"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "पॅरेंट"
+
+#: ../tui/nmt-page-vlan.c:124
+#| msgid "VLAN"
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "कà¥à¤²à¤¾à¤à¤‚ट"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "ॲकà¥à¤¸à¥‡à¤¸ पॉइंट"
+
+#: ../tui/nmt-page-wifi.c:71
+#| msgid "Ad-Hoc"
+msgid "Ad-Hoc Network"
+msgstr "ॲडहॉक नेटवरà¥à¤•"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "सà¥à¤µ"
+
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "काहिही नाही"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA आणि WPA2 परà¥à¤¸à¤¨à¤²"
+
+#: ../tui/nmt-page-wifi.c:87
+#| msgid "Enterprise "
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA आणि WPA2 à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-बिट कि (Hex किंवा ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+#| msgid "%d (104/128-bit passphrase)"
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-बिट पासफà¥à¤°à¥‡à¤œ"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "डायनॅमिक WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+#| msgid "default"
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "१ (पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "२"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "३"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "४"
+
+#: ../tui/nmt-page-wifi.c:104
+#| msgid "System"
+msgid "Open System"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ उघडा"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "शेअरà¥à¤¡ कि"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "वाहिनी"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "सà¥à¤°à¤•à¥à¤·à¤¾"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+#| msgid "Password: "
+msgid "Password"
+msgstr "पासवरà¥à¤¡"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise करिता अजूनही समरà¥à¤¥à¤¨ नाही...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "कि"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+#| msgid "WEP "
+msgid "WEP index"
+msgstr "WEP इंडेकà¥à¤¸"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "ओळख पटवा"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(dynamic-wep करिता अजूनही समरà¥à¤¥à¤¨ नाही...)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+#| msgid "filename"
+msgid "Username"
+msgstr "वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "पà¥à¤°à¤¤à¥à¤¯à¥‡à¤•à¤µà¥‡à¤³à¥€ हà¥à¤¯à¤¾ पासवरà¥à¤¡à¤•à¤°à¤¿à¤¤à¤¾ विचारा"
+
+#: ../tui/nmt-password-fields.c:131
+#| msgid "Password: "
+msgid "Show password"
+msgstr "पासवरà¥à¤¡ दाखवा"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "लकà¥à¤·à¥à¤¯"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "पà¥à¤¢à¥€à¤² हॉप"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "मेटà¥à¤°à¤¿à¤•"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "पसंतीचे राउटà¥à¤¸ ठरवले नाही."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "ओळख"
+
+#: ../tui/nmt-secret-agent.c:228
+#| msgid "private key password not provided"
+msgid "Private key password"
+msgstr "पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि पासवरà¥à¤¡"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "सेवा"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "वायरलेस नेटवरà¥à¤•à¤¤à¤°à¥à¤«à¥‡ ओळख पटवणे आवशà¥à¤¯à¤• आहे"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"वायरलेस नेटवरà¥à¤• '%s' करिता पà¥à¤°à¤µà¥‡à¤¶ पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ पासवरà¥à¤¡à¤œ किंवा "
+"à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ किज आवशà¥à¤¯à¤• आहे."
+
+#: ../tui/nmt-secret-agent.c:349
+#| msgid "connecting (need authentication)"
+msgid "Wired 802.1X authentication"
+msgstr "वायरà¥à¤¡ 802.1X ओळख पटवा"
+
+#: ../tui/nmt-secret-agent.c:352
+#| msgid "Networking"
+msgid "Network name"
+msgstr "नेटवरà¥à¤• नाव"
+
+#: ../tui/nmt-secret-agent.c:359
+#| msgid "connecting (need authentication)"
+msgid "DSL authentication"
+msgstr "DSL ओळख पटवा"
+
+#: ../tui/nmt-secret-agent.c:367
+#| msgid "not required, "
+msgid "PIN code required"
+msgstr "PIN कोड आवशà¥à¤¯à¤•"
+
+#: ../tui/nmt-secret-agent.c:368
+#| msgid "Enable or disable mobile broadband devices"
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ साधनकरिता PIN कोड आवशà¥à¤¯à¤• आहे"
+
+#: ../tui/nmt-secret-agent.c:370
+#| msgid "VPN"
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ नेटवरà¥à¤• पासवरà¥à¤¡"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' सह जोडणीकरिता पासवरà¥à¤¡ आवशà¥à¤¯à¤• आहे."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "समावेशजोगी सà¥à¤²à¥‡à¤µà¥à¤¹ जोडणीचे पà¥à¤°à¤•à¤¾à¤° नीवडा."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "समाविषà¥à¤Ÿ करा..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "काढून टाका"
+
+#: ../tui/nmtui-connect.c:82
+#| msgid "connection failed"
+msgid "Activation failed"
+msgstr "सकà¥à¤°à¥€à¤¯à¤¤à¤¾ अपयशी"
+
+#: ../tui/nmtui-connect.c:134
+#| msgid "\rConnecting"
+msgid "Connecting..."
+msgstr "जोडणी करत आहे..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+#| msgid "List of active connections"
+msgid "Could not activate connection: %s"
+msgstr "जोडणी: %s सकà¥à¤°à¥€à¤¯ करणे अशकà¥à¤¯"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+#| msgid "activated"
+msgid "Activate"
+msgstr "सà¥à¤°à¥‚ करा"
+
+#: ../tui/nmtui-connect.c:220
+#| msgid "deactivated"
+msgid "Deactivate"
+msgstr "बंद करा"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "बाहेर पडा"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+#| msgid "PAN connection %d"
+msgid "No such connection '%s'"
+msgstr "हà¥à¤¯à¤¾ पà¥à¤°à¤•à¤¾à¤°à¤šà¥€ जोडणी '%s' नाही"
+
+#: ../tui/nmtui-connect.c:306
+#| msgid "Connection activated\n"
+msgid "Connection is already active"
+msgstr "जोडणी आधीपासूनच सकà¥à¤°à¥€à¤¯ आहे"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "निरà¥à¤®à¤¾à¤£ करा"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "निरà¥à¤®à¤¾à¤£à¤œà¥‹à¤—ी जोडणीचे पà¥à¤°à¤•à¤¾à¤° नीवडा."
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"VPN चे निरà¥à¤®à¤¾à¤£ करत असलà¥à¤¯à¤¾à¤¸, आणि जोडणीजोगी VPN जोडणी सूचीमधà¥à¤¯à¥‡ आढळत नसलà¥à¤¯à¤¾à¤¸, "
+"तà¥à¤®à¤šà¥à¤¯à¤¾à¤•à¤¡à¥‡ कदाचित योगà¥à¤¯ VPN पà¥à¤²à¤—इन इंसà¥à¤Ÿà¥‰à¤² केले नसावे."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+#| msgid "\rConnecting"
+msgid "New Connection"
+msgstr "नवीन जोडणी"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+#| msgid "unable to join netlink group: %s"
+msgid "Unable to delete connection: %s"
+msgstr "जोडणी: '%s' नषà¥à¤Ÿ करणे अशकà¥à¤¯"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नकà¥à¤•à¥€ जोडणी '%s' नषà¥à¤Ÿ करायचे?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+#| msgid "Error: cannot delete unknown connection(s): %s."
+msgid "Could not delete connection: %s"
+msgstr "जोडणी: %s नषà¥à¤Ÿ करणे अशकà¥à¤¯"
+
+#: ../tui/nmtui-hostname.c:47
+#| msgid "Setting name? "
+msgid "Set Hostname"
+msgstr "यजमाननाव सेट करा"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "यजमाननाव"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "यजमाननाव '%s' असे सेट करा"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+#| msgid "Failed to set signal mask: %d"
+msgid "Unable to set hostname: %s"
+msgstr "यजमाननाव: %s असे सेट करा"
+
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+#| msgid "connecting"
+msgid "connection"
+msgstr "जोडणी"
+
+#: ../tui/nmtui.c:60
+#| msgid "disconnecting"
+msgid "Edit a connection"
+msgstr "जोडणी संपादित करा"
+
+#: ../tui/nmtui.c:63
+#| msgid "Active connection details"
+msgid "Activate a connection"
+msgstr "जोडणी सकà¥à¤°à¥€à¤¯ करा"
+
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "नवीन यजमाननाव"
+
+#: ../tui/nmtui.c:66
+#| msgid "Modify persistent system hostname"
+msgid "Set system hostname"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव सेट करा"
+
+#: ../tui/nmtui.c:89
+#| msgid "NetworkManager status"
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "कृपया परà¥à¤¯à¤¾à¤¯ पसंत करा"
+
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "वापर"
+
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "बाबी वाचणे आवशà¥à¤¯à¤•"
+
+#: ../tui/nmtui.c:229
+#| msgid "Error: NetworkManager is not running."
+msgid "NetworkManager is not running."
+msgstr "NetworkManager सà¥à¤°à¥‚ नाही."
+
+#~ msgid "IP"
+#~ msgstr "IP"
+
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सूची संरचीत केली': %s"
+
+#~ msgid "List of configured connections"
+#~ msgstr "संरचीत जोडणींची सूची"
+
+#~ msgid "Error: 'show configured': %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'संरचीत दाखवा': %s"
+
+#~ msgid "Error: 'show configured': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'संरचीत दाखवा': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: 'list active': %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सकà¥à¤°à¥€à¤¯ सूची': %s"
+
+#~ msgid "Error: 'list active': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सकà¥à¤°à¥€à¤¯ सूची': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: 'show active': %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सकà¥à¤°à¥€à¤¯ दाखवा': %s"
+
+#~ msgid "Error: 'show active': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सकà¥à¤°à¥€à¤¯ दाखवा': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: No suitable device found: %s."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: योगà¥à¤¯ साधन आढळले नाही: %s."
+
+#~ msgid "Error: No suitable device found."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: योगà¥à¤¯ साधन आढळले नाही."
+
+#~ msgid "Error: 'ingress': '%s' is not valid; %s "
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'इंगà¥à¤°à¥‡à¤¸': '%s' वैध नाही; %s "
+
+#~ msgid ""
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'configured' किंवा 'active' आदेश 'connection show'करिता अपेकà¥à¤·à¥€à¤¤."
+
+#~ msgid "Error: 'device show': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन दाखवा': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "not connected"
+#~ msgstr "जोडणी अशकà¥à¤¯"
+
+#~ msgid "Error: 'device status': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन सà¥à¤¥à¤¿à¤¤à¥€': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: 'device wifi': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'device wifi': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: 'device wimax': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन wimax': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: %s (allowed fields: %s)"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s (सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s)"
+
+#~ msgid "Error: 'general permissions': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सरà¥à¤µà¤¸à¤¾à¤§à¤¾à¤°à¤£ परवानगी': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: 'general logging': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सरà¥à¤µà¤¸à¤¾à¤§à¤¾à¤°à¤£ लॉगिंग': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Caught signal %d, shutting down..."
+#~ msgstr "संकेत %d पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥‡, बंद करत आहे..."
+
+#~ msgid "invalid field '%s'"
+#~ msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'"
+
+#~ msgid "IPv4 method '%s' is not allowed when IPv6 method 'ignore' is set"
+#~ msgstr "IPv6 मेथड 'ignore' सेट केले असलà¥à¤¯à¤¾à¤¸, IPv4 मेथड '%s' सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
+
+#~ msgid "IPv6 method '%s' is not allowed when IPv4 method 'disabled' is set"
+#~ msgstr "IPv4 मेथड 'disabled' सेट केलà¥à¤¯à¤¾à¤¨à¤‚तर, IPv6 मेथड '%s' सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
+
+#~ msgid "'%s' setting is required for the connection when the property is set"
+#~ msgstr "गà¥à¤£à¤§à¤°à¥à¤® सेट केलà¥à¤¯à¤¾à¤¨à¤‚तर जोडणीकरीता '%s' सेटिंग आवशà¥à¤¯à¤• आहे"
+
+#~ msgid "Waits for a successful connection in NetworkManager."
+#~ msgstr "NetworkManager मधà¥à¤¯à¥‡ यशसà¥à¤µà¥€ जोडणीकरीता थांबतो."
+
+#~ msgid "setting '%s' is required"
+#~ msgstr "सेटिंग '%s' आवशà¥à¤¯à¤•"
+
+#~ msgid "Error: no valid parameter specified."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: वैध घटक निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही."
+
+#~ msgid "Error: Can't find out if NetworkManager is running: %s."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: NetworkManager कारà¥à¤¯à¤°à¤¤ आहे, हे शोधणे अशकà¥à¤¯: %s."
+
+#~ msgid "Error: unknown parameter: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत घटक: %s"
+
+#~ msgid "Error: timeout value '%s' is not valid."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: वेळसमापà¥à¤¤à¥€à¤šà¥‡ मà¥à¤²à¥à¤¯ '%s' वैध नाही."
+
+#~ msgid "Error: id or uuid has to be specified."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: id किंवा uuid निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे."
+
+#~ msgid "Warning: Connection not active\n"
+#~ msgstr "सावधान: जोडणी सकà¥à¤°à¤¿à¤¯ नाही\n"
+
+#~ msgid "Error: could not connect to D-Bus."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: D-Bus सह जोडणी करणे अशकà¥à¤¯."
+
+#~ msgid "Encrypted: "
+#~ msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡: "
+
+#~ msgid "WPA "
+#~ msgstr "WPA "
+
+#~ msgid "WPA2 "
+#~ msgstr "WPA2 "
+
+#~ msgid "Infrastructure"
+#~ msgstr "इंफà¥à¤°à¤¾à¤¸à¥à¤Ÿà¥à¤°à¤•à¥à¤šà¤°"
+
+#~ msgid "Error: Device '%s' is not a WiFi device."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' WiFi साधन नाही."
+
+#~ msgid "NET-ENABLED"
+#~ msgstr "NET-ENABLED"
+
+#~ msgid "WIFI-HARDWARE"
+#~ msgstr "WIFI-HARDWARE"
+
+#~ msgid "WWAN-HARDWARE"
+#~ msgstr "WWAN-HARDWARE"
+
+#~ msgid "WIMAX-HARDWARE"
+#~ msgstr "WIMAX-HARDWARE"
+
+#~ msgid "Error: 'nm status': %s; allowed fields: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm status': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#~ msgid "Error: Couldn't connect to system bus: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: सिसà¥à¤Ÿà¤® बससह जोडणी करणे अशकà¥à¤¯: %s"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: D-Bus ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ पà¥à¤°à¥‰à¤•à¥à¤¸à¥€ निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯."
+
+#~ msgid "Error in sleep: %s"
+#~ msgstr "sleep मधà¥à¤¯à¥‡ तà¥à¤°à¥à¤Ÿà¥€ आढळली: %s"
+
+#~ msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'enable' घटक: '%s'; 'true' किंवा 'false' चा वापर करा."
+
+#~ msgid "Error: Sleeping status is not exported by NetworkManager."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: सà¥à¤²à¤¿à¤ªà¤¿à¤‚ग सà¥à¤¤à¤° NetworkManager दà¥à¤µà¤¾à¤°à¥‡ à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ केले जात नाही."
+
+#~ msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'sleep' घटक: '%s'; 'true' किंवा 'false'चा वापर करा."
+
+#~ msgid "WiFi enabled"
+#~ msgstr "WiFi समरà¥à¤¥à¥€à¤¤"
+
+#~ msgid "WWAN enabled"
+#~ msgstr "WWAN समरà¥à¤¥à¥€à¤¤"
+
+#~ msgid "WiMAX enabled"
+#~ msgstr "WiMAX समरà¥à¤¥à¥€à¤¤"
+
+#~ msgid "Error: invalid 'wimax' parameter: '%s'."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'wimax' घटक: '%s'."
+
+#~ msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: org.freedesktop.DBus करीता D-Bus ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ पà¥à¤°à¥‰à¤•à¥à¤¸à¥€ निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯"
+
+#~ msgid "Error: NameHasOwner request failed: %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: NameHasOwner विनंती अपयशी: %s"
+
+#~ msgid ""
+#~ "Log domains separated by ',': any combination of\n"
+#~ " [NONE,HW,RFKILL,ETHER,"
+#~ "WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,"
+#~ "AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,"
+#~ "CORE,DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL,ADSL]"
+#~ msgstr ""
+#~ "',' तरà¥à¤«à¥‡ विभाजीत लॉग डोमैनà¥à¤¸à¥: खालीलपैकी कोणतेहि à¤à¤•\n"
+#~ " [NONE,HW,RFKILL,ETHER,"
+#~ "WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,"
+#~ "AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,"
+#~ "CORE,DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL,ADSL]"
+
+#~ msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#~ msgstr "दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink दà¥à¤µà¤¾ कॅशे वाटप करणे अशकà¥à¤¯: %s"
+
+#~ msgid "error updating link cache: %s"
+#~ msgstr "दà¥à¤µà¤¾ कॅशे अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करतेवेळी तà¥à¤°à¥à¤Ÿà¥€: %s"
+
+#~ msgid "Not enough memory to store PEM file data."
+#~ msgstr "PEM फाइल माहिती साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
+
+#~ msgid "Not enough memory to store private key data."
+#~ msgstr "वà¥à¤¯à¤•à¥à¤¤à¤¿à¤—त कि डाटा साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ अतिरिकà¥à¤¤ सà¥à¤®à¥ƒà¤¤à¥€ नाही."
+
+#~ msgid "Not enough memory to store certificate data."
+#~ msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° माहिती साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
+
+#~ msgid "Not enough memory to store the IV."
+#~ msgstr "IV साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¥à¤• नाही."
+
+#~ msgid "Not enough memory to decrypt private key."
+#~ msgstr "फाइल माहिती साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
+
+#~ msgid "Not enough memory to store decrypted private key."
+#~ msgstr "जà¥à¤£à¥€ वैयकà¥à¤¤à¤¿à¤• कि साठवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¥à¤• नाही."
+
+#~ msgid "Not enough memory for decrypted key buffer."
+#~ msgstr "जà¥à¤£à¥‡ कि बफर करीता सà¥à¤®à¥ƒà¤¤à¥€ शिलà¥à¤²à¤• नाही."
+
+#~ msgid "Could not allocate memory for encrypting."
+#~ msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥€à¤‚ग करीता मेमरीचे वाटप करणे अशकà¥à¤¯."
+
+#~ msgid "Not enough memory to make encryption key."
+#~ msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ कि निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अतिरीकà¥à¤¤ मेमरी आढळली नाही."
+
+#~ msgid "Could not allocate memory for writing IV to PEM file."
+#~ msgstr "IV ला PEM फाइलवर लिहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मेमरीचे वाटप करणे अशकà¥à¤¯."
+
+#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
+#~ msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ किला PEM फाइलवर लिहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मेमरीचे वाटप करणे अशकà¥à¤¯."
+
#~ msgid "state: %s\n"
#~ msgstr "सà¥à¤¤à¤°: %s\n"
-#~ msgid "Connection activated\n"
-#~ msgstr "जोडणी सकà¥à¤°à¤¿à¤¯ केली\n"
-
#~ msgid "state: %s (%d)\n"
#~ msgstr "सà¥à¤¤à¤°: %s (%d)\n"
@@ -2841,6 +7491,3 @@ msgstr ""
#~ msgid "Device state: %d (%s)\n"
#~ msgstr "साधनाचे सà¥à¤¤à¤°: %d (%s)\n"
-
-#~ msgid "not set"
-#~ msgstr "सेट केले नाही"
diff --git a/po/or.po b/po/or.po
index f108e3e20..105969a6f 100644
--- a/po/or.po
+++ b/po/or.po
@@ -1,1427 +1,3363 @@
# translation of NetworkManager.master.or.po to Oriya
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
-# Manoj Kumar Giri <mgiri@redhat.com>, 2008, 2010, 2012.
+#
+# Manoj Kumar Giri <mgiri@redhat.com>, 2008, 2010, 2012, 2013.
+# mgiri <mgiri@redhat.com>, 2013. #zanata
+# mgiri <mgiri@redhat.com>, 2014. #zanata
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager.master.or\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-11-13 15:25+0000\n"
-"PO-Revision-Date: 2012-11-27 16:40+0530\n"
-"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
-"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
-"Language: or\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.5\n"
+"PO-Revision-Date: 2014-01-31 06:49-0500\n"
+"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
+"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
+"Language: or\n"
+"X-Generator: Zanata 3.2.3\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"\n"
-"\n"
-"\n"
-"\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
msgstr "ସମà­à¬¹"
-#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADDRESS"
-#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ପଥ"
-#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
-#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "ଡମେନ"
-#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "ୱିନସ"
-#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "ବିକଳà­à¬ª"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "ଅବୈଧ IPv4 ଠିକଣା '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "ଅବୈଧ ଉପସରà­à¬— '%s'; <1-32> ଅନà­à¬®à­‹à¬¦à¬¿à¬¤"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "ଅବୈଧ ଗେଟୱେ '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "ଅବୈଧ IPv6 ଠିକଣା '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "ଅବୈଧ ଉପସରà­à¬— '%s'; <1-128> ଅନà­à¬®à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "ଅବୈଧ IPv4 ପଥ '%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "ଅବୈଧ ଉପସରà­à¬— '%s'; <0-32> ଅନà­à¬®à­‹à¬¦à¬¿à¬¤"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "ଅବୈଧ ପରବରà­à¬¤à­à¬¤à­€ ହପ ଠିକଣା: '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "ଅବୈଧ ମେଟà­à¬°à¬¿à¬• '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "ଅବୈଧ IPv6 ପଥ '%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "ଅବୈଧ ଉପସରà­à¬— '%s'; <0-128> ଅନà­à¬®à­‹à¬¦à¬¿à¬¤"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "ଅପରିଚାଳିତ"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "ଅନà­à¬ªà¬²à¬¬à­à¬§"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (ପà­à¬°à¬¸à­à¬¤à­à¬¤)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (ବିନà­à­Ÿà¬¾à¬¸ କରà­à¬…ଛି)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (ବୈଧିକରଣ ଆବଶà­à­Ÿà¬•)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (IP ସଂରଚନା ଗà­à¬°à¬¹à¬£ କରà­à¬…ଛି)"
-#: ../cli/src/common.c:380
-#| msgid "connecting (getting IP configuration)"
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (IP ସଂଯୋଜକତାକୠଯାଞà­à¬š କରà­à¬…ଛି)"
-#: ../cli/src/common.c:382
-#| msgid "connecting (getting IP configuration)"
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (ଦà­à­±à¬¿à¬¤à­€à­Ÿà¬• ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ଆରମà­à¬­ କରà­à¬…ଛି)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "ସଂଯୋଗ ସà­à¬¥à¬¾à¬ªà¬¿à¬¤ ହେଲା"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:635
-#| msgid "activating"
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
msgid "deactivating"
msgstr "ନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରà­à¬…ଛି"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "ସଂଯୋଗ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:638
-#: ../cli/src/connections.c:661 ../cli/src/connections.c:1353
-#: ../cli/src/devices.c:645 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:451
-#: ../src/main.c:470
+#: ../cli/src/common.c:643 ../cli/src/connections.c:737
+#: ../cli/src/connections.c:760 ../cli/src/connections.c:1462
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2257
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1080 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "ଅଜଣା"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "କୌଣସି କାରଣ ଦିଆଯାଇ ନାହିà¬"
-#: ../cli/src/common.c:402
-#| msgid "Unknown"
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
msgid "Unknown error"
msgstr "ଅଜଣା ତà­à¬°à­à¬Ÿà¬¿"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "ଉପକରଣଟି ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ପରିଚାଳିତ"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "ଉପକରଣଟି ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ଅପରିଚାଳିତ"
-#: ../cli/src/common.c:411
-#| msgid "the VPN service returned invalid configuration"
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "ଉପକରଣକୠସଂରଚନା ପାଇଠପଢ଼ିହେଲା ନାହିà¬"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"IP ସଂରଚନାକୠସଂରକà­à¬·à¬£ କରିହେଲା ନାହିଠ(କୌଣସି ଉପଲବà­à¬§ ଠିକଣା, ସମୟ ସମାପà­à¬¤à¬¿, ଇତà­à­Ÿà¬¾à¬¦à¬¿ "
"ନାହିà¬à¥¤)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "IP ସଂରଚନାଟି ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ବୈଧ ନାହିà¬"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "ଗà­à¬ªà­à¬¤ ତଥà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬• ଆବଶà­à­Ÿà¬•, କିନà­à¬¤à­ ଦିଆଯାଇ ନାହିà¬"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X ପà­à¬°à¬¾à¬°à­à¬¥à¬¿ ସହିତ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X ପà­à¬°à¬¾à¬°à­à¬¥à¬¿ ସଂରଚନା ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X ପà­à¬°à¬¾à¬°à­à¬¥à¬¿ ବିଫଳ"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X ପà­à¬°à¬¾à¬°à­à¬¥à¬¿ ବୈଧିକୃତ ହେବା ପାଇଠଅଧିକ ସମୟ ନେଇନଥାà¬"
-#: ../cli/src/common.c:435
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "PPC ସରà­à¬­à¬¿à¬¸ ଆରମà­à¬­ ହେବାରେ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:438
-#| msgid "VPN disconnected"
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP ସରà­à¬­à¬¿à¬¸ ସହିତ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:444
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "DHCP କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ଆରମà­à¬­ ହେବାରେ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ତà­à¬°à­à¬Ÿà¬¿"
-#: ../cli/src/common.c:450
-#| msgid "VPN connection failed"
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:453
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "ସହଭାଗୀ ସଂଯୋଗ ସରà­à¬­à¬¿à¬¸ ଆରମà­à¬­ ହେବାରେ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:456
-#| msgid "connection failed"
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "ସହଭାଗୀ ସଂଯୋଗ ସରà­à¬­à¬¿à¬¸ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:459
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "AutoIP ସରà­à¬­à¬¿à¬¸ ଆରମà­à¬­ ହେବାରେ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP ସରà­à¬­à¬¿à¬¸ ତà­à¬°à­à¬Ÿà¬¿"
-#: ../cli/src/common.c:465
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP ସରà­à¬­à¬¿à¬¸ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "ଧାଡ଼ି ବà­à­Ÿà¬¸à­à¬¤ ଅଛି"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "କୌଣସି ଡାà¬à¬²à¬Ÿà¬¨ ନାହିà¬"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "କୌଣସିବାହକ ପà­à¬°à¬¤à¬¿à¬·à­à¬ à¬¾ ହୋଇ ପାରିବ ନାହିà¬"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "ଡାà¬à¬² ଅନà­à¬°à­‹à¬§ ସମୟ ସମାପà­à¬¤à¬¿"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "ଡାà¬à¬² ପà­à¬°à¬šà­‡à¬·à­à¬Ÿà¬¾ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:483
-#| msgid "Error: Connection activation failed."
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "ମଡେମ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:486
-#| msgid "Failed to decrypt the private key."
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "ଉଲà­à¬²à¬¿à¬–ିତ APN ବାଛିବାରେ ବିଫଳ"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "ନେଟୱରà­à¬•à¬—à­à¬¡à¬¼à¬¿à¬• ପାଇଠକୌଣସି ସନà­à¬§à¬¾à¬¨ ନାହିà¬"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "ନେଟୱରà­à¬• ପଞà­à¬œà¬¿à¬•à¬°à¬£ ବାରଣ ହୋଇଛି"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "ନେଟୱରà­à¬• ପଞà­à¬œà¬¿à¬•à¬°à¬£ ସମୟ ସମାପà­à¬¤"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "ଅନà­à¬°à­‹à¬§ କରାଯାଇଥିବା ନେଟୱରà­à¬• ସହିତ ପଞà­à¬œà¬¿à¬•à¬°à¬£ କରିବାରେ ବିଫଳ"
-#: ../cli/src/common.c:501
-#| msgid "VPN connection failed"
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN ଯାଞà­à¬š ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "ଉପକରଣ ପାଇଠଆବଶà­à­Ÿà¬•à­€à­Ÿ ଫରà­à¬®à­±à­‡à¬° ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି"
-#: ../cli/src/common.c:507
-#| msgid "the connection was removed"
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "ଉପକରଣଟିକୠକଢ଼ାଯାଇଛି"
-#: ../cli/src/common.c:510
-#| msgid "NetworkManager status"
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager ସà­à¬ªà­à¬¤ ଅଛି"
-#: ../cli/src/common.c:513
-#| msgid "no active connection or device"
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "ଉପକରଣର ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ଅଦୃଶà­à­Ÿ ହୋଇଛି"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "ଉପକରଣଟି ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€ କିମà­à¬¬à¬¾ କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ଦà­à­±à¬¾à¬°à¬¾ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "ବାହକ/ଲିଙà­à¬• ପରିବରà­à¬¤à­à¬¤à¬¿à¬¤ ହୋଇଛି"
-#: ../cli/src/common.c:522
-#| msgid "the connection was removed"
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "ଉପକରଣର ସà­à¬¥à¬¿à¬¤à¬¬à¬¾à¬¨ ସଂଯୋଗକୠଗà­à¬°à¬¹à¬£ କରାଯାଇଛି"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "ପà­à¬°à¬¾à¬°à­à¬¥à¬¿ ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ଉପଲବà­à¬§"
-#: ../cli/src/common.c:528
-#| msgid "'dhcpcd' could be found."
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "ମଡେମ ମିଳିପାରିଲା ନାହିà¬"
-#: ../cli/src/common.c:531
-#| msgid "the connection attempt timed out"
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "ବà­à¬²à­à¬Ÿà­à¬¥ ସଂଯୋଗ ବିଫଳ ହୋଇଛି ଅଥବା ସମୟ ସମାପà­à¬¤ ହୋଇଛି"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM ମଡେମର SIM କାରà­à¬¡ ଭରà­à¬¤à­à¬¤à¬¿ ହୋଇ ନାହିà¬"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM ମଡେମର SIM PIN ଆବଶà­à­Ÿà¬•"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM ମଡେମର SIM PUK ଆବଶà­à­Ÿà¬•"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM ମଡେମର SIM ଭà­à¬² ଅଛି"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand ଉପକରଣ ସଂଯà­à¬•à­à¬¤ ଧାରାକୠସହାୟତା କରିନଥାà¬"
-#: ../cli/src/common.c:549
-#| msgid "connection failed"
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "ସଂଯୋଗର ନିରà­à¬­à¬°à¬• ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL ବà­à¬°à¬¿à¬œ ଉପରେ RFC 2684 ଇଥରନେଟ ସହିତ à¬à¬• ସମସà­à­Ÿà¬¾ ଦେଖାଦେଇଛି"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ମଡେମ ପରିଚାଳକ ଉପଲବà­à¬§ ନାହିà¬"
-#: ../cli/src/common.c:558
-#| msgid "'dhclient' could be found."
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi ନେଟୱରà­à¬• ମିଳିଲା ନାହିà¬"
-#: ../cli/src/common.c:561
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "ମୂଳ ସଂଯୋଗର à¬à¬• ଦà­à­±à¬¿à¬¤à­€à­Ÿà¬• ସଂଯୋଗ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:295 ../cli/src/devices.c:311
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:477
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB କିମà­à¬¬à¬¾ FCoE ବà­à­Ÿà¬¬à¬¸à­à¬¥à¬¾ ବିଫଳ ହୋଇଛି"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "teamd ନିୟନà­à¬¤à­à¬°à¬£ ବିଫଳ ହୋଇଛି"
+
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "ଅଜଣା"
-#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:107 ../cli/src/devices.c:131 ../cli/src/devices.c:141
-#: ../cli/src/devices.c:151 ../cli/src/devices.c:165 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:217 ../cli/src/devices.c:226
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "ଅବୈଧ ପà­à¬°à¬¾à¬¥à¬®à¬¿à¬•à¬¤à¬¾ ମେଳକ '%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "ପà­à¬°à¬¾à¬¥à¬®à¬¿à¬•à¬¤à¬¾ '%s' ଟି ବୈଧ ନà­à¬¹à¬ (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ ସମୂହ ସଂରଚନା କିମà­à¬¬à¬¾ ଫାଇଲ ନାମ ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "ନାମ ରଚନା କରà­à¬›à¬¨à­à¬¤à¬¿ କି?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ନାମ କଣ?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ଭରଣ କରନà­à¬¤à­: "
+
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:175
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NAME"
-#. 0
-#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:204
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:201
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TYPE"
-#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
-#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
-#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
-#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "READONLY"
-#. 6
-#. 8
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#. 2
-#: ../cli/src/connections.c:131
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "DEVICES"
-#. 3
-#. 1
-#. 8
-#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:116 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATE"
-#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "DEFAULT"
-#. 5
-#: ../cli/src/connections.c:134
-#| msgid "DEFAULT"
+#: ../cli/src/connections.c:180
msgid "DEFAULT6"
msgstr "DEFAULT6"
-#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
msgid "VPN"
msgstr "VPN"
-#. 9
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PATH"
-#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:185
msgid "ZONE"
msgstr "ZONE"
-#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:186
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "GENERAL"
-
-#. 0
-#: ../cli/src/connections.c:149
-#| msgid "TKIP"
-msgid "IP"
-msgstr "IP"
-
-#. 1
-#: ../cli/src/connections.c:164
-#| msgid "NAME"
+#: ../cli/src/connections.c:202
msgid "USERNAME"
msgstr "USERNAME"
-#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:203
msgid "GATEWAY"
msgstr "GATEWAY"
-#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:204
msgid "BANNER"
msgstr "BANNER"
-#. 4
-#: ../cli/src/connections.c:167
-#| msgid "STATE"
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
msgstr "VPN-STATE"
-#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:206
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:255
#, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down }\n"
-#| "\n"
-#| " list [id <id> | uuid <id> | system | user]\n"
-#| " status\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli ସଂଯୋଗ { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+
+#: ../cli/src/connections.c:278
+#, c-format
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Show connections which are currently used by a device to connect to a "
+"network.\n"
+"Without a parameter, all active connections are listed. When <ID> is "
+"provided,\n"
+"the connection details are displayed instead.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Show in-memory and on-disk connections, some of which may also be active if\n"
+"a device is using that connection profile. Without a parameter, all profiles\n"
+"are listed. When <ID> is provided, the profile details are displayed instead."
+"\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ କୌଣସି ଉପକରଣ ଦà­à­±à¬¾à¬°à¬¾ ନେଟୱରà­à¬• ସହିତ ସଂଯୋଗ ହେବା ପାଇଠବà­à­Ÿà¬¬à¬¹à¬¾à¬° ହେଉଥିବା "
+"ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ଦରà­à¬¶à¬¾à¬¨à­à¬¤à­ ।\n"
+"ବିନା ପà­à¬°à¬¾à¬šà¬³à¬°à­‡, ସମସà­à¬¤ ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬• ତାଲିକାଭà­à¬•à­à¬¤ ହୋଇଛି। <ID> ଦିଆଯାଇଥିବା "
+"ସମୟରେ,\n"
+"ସଂଯୋଗ ବିବରଣୀଗà­à¬¡à¬¼à¬¿à¬• ତାହା ପରିବରà­à¬¤à­à¬¤à­‡ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"ସà­à¬®à­ƒà¬¤à¬¿à¬¸à­à¬¥à¬¾à¬¨ à¬à¬¬à¬‚ ଡିସà­à¬• ଉପର ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à¬°à­‡ ଦରà­à¬¶à¬¾à¬¨à­à¬¤à­, ଯେଉà¬à¬¥à¬¿à¬°à­ କିଛି ହà­à¬à¬¤ ସକà­à¬°à¬¿à­Ÿ "
+"ଥାଇପାରେ ଯଦି\n"
+"କୌଣସି ଉପକରଣ ସେହି ସଂଯୋଗ ରୂପରେଖାକୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରିଥାà¬à¥¤ ପà­à¬°à¬¾à¬šà¬³ ବିନା, ସମସà­à¬¤ "
+"ରୂପରେଖାଗà­à¬¡à¬¼à¬¿à¬•\n"
+"ତାଲିକାଭà­à¬•à­à¬¤ ହୋଇଥାà¬à¥¤ ଯେତେବେଳେ <ID> ପà­à¬°à¬¦à¬¾à¬¨ କରାଯାଇଥାà¬, ସେତେବେଳେ ରୂପରେଖା "
+"ବିବରଣୀଗà­à¬¡à¬¼à¬¿à¬• ତାହା ପରିବରà­à¬¤à­à¬¤à­‡ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"\n"
+
+#: ../cli/src/connections.c:297
+#, c-format
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"ଉପକରଣ ଉପରେ à¬à¬• ସଂଯୋଗକୠସକà­à¬°à¬¿à­Ÿ କରନà­à¬¤à­à¥¤ ସକà­à¬°à¬¿à­Ÿ କରିବା ପାଇଠରୂପରେଖାଟି ତାହାର ନାମ "
+"ଦà­à­±à¬¾à¬°à¬¾à¬ªà¬°à¬¿à¬šà¬¿à¬¤\n"
+"ହୋଇଥାà¬, UUID କିମà­à¬¬à¬¾ D-Bus ପଥ।\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"ଗୋଟିଠସଂଯୋଗ ସହିତ ଉପକରଣକୠସକà­à¬°à¬¿à­Ÿ କରନà­à¬¤à­à¥¤ ସଂଯୋଗ ରୂପରେଖାଟି\n"
+"ସà­à­±à­Ÿà¬‚ଚାଳିତ ଭାବରେ NetworkManager ଦà­à­±à¬¾à¬°à¬¾ ବଛାଯାଇଥାà¬à¥¤\n"
+"\n"
+"ifname - ଉପକରଣକୠà¬à¬¹à¬¾ ଉପରେ ସକà­à¬°à¬¿à­Ÿ କରିବା ପାଇଠଉଲà­à¬²à­‡à¬– କରିଥାà¬\n"
+"ap - AP କୠà¬à¬¹à¬¾ ସହିତ ସଂଯୋଗ କରିବା ପାଇଠଉଲà­à¬²à­‡à¬– କରିଥାଠ(କେବଳ Wi-Fi ପାଇଠ"
+"ବୈଧ)\n"
+"nsp - NSP କୠà¬à¬¹à¬¾ ସହିତ ସଂଯୋଗ କରିବା ପାଇଠଉଲà­à¬²à­‡à¬– କରିଥାଠ(କେବଳ WiMAX ପାଇଠ"
+"ବୈଧ)\n"
+"\n"
+
+#: ../cli/src/connections.c:318
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"à¬à¬• ସଂଯୋଗକୠଉପକରଣରୠନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରନà­à¬¤à­ (ଉପକରଣକୠସà­à­±à­Ÿà¬‚-ସକà­à¬°à¬¿à­Ÿà¬£à¬°à­ ବାରଣ\n"
+"ନକରି)। ରୂପରେଖାକୠନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରିବା ତାହାର ନାମ ଦà­à­±à¬¾à¬°à¬¾à¬ªà¬°à¬¿à¬šà¬¿à¬¤ ହୋଇଥାà¬,\n"
+"UUID କିମà­à¬¬à¬¾ D-Bus ପଥ।\n"
+"\n"
+
+#: ../cli/src/connections.c:331
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+
+#: ../cli/src/connections.c:408
+#, c-format
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"ସଂଯୋଗ ରୂପରେଖାରେ à¬à¬• ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­à¥¤\n"
+"ରୂପରେଖାଟି ତାହାର ନାମ ଦà­à­±à¬¾à¬°à¬¾ ପରିଚିତ, UUID କିମà­à¬¬à¬¾ D-Bus ପଥ।\n"
+"\n"
+
+#: ../cli/src/connections.c:420
+#, c-format
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"କà­à¬°à¬¿à­Ÿà¬¾à¬°à¬¤ ସମà­à¬ªà¬¾à¬¦à¬•à¬°à­‡ à¬à¬• ସà­à¬¥à¬¿à¬¤à¬¬à¬¾à¬¨ ସଂଯୋଗ ରୂପରେଖାକୠସମà­à¬ªà¬¾à¬¦à¬¨ କରନà­à¬¤à­à¥¤\n"
+"ରୂପରେଖାଟି ତାହାର ନାମ ଦà­à­±à¬¾à¬°à¬¾ ପରିଚିତ, UUID କିମà­à¬¬à¬¾ D-Bus ପଥ\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"ନୂତନ à¬à¬• ସଂଯୋଗ ରୂପରେଖାକୠକà­à¬°à¬¿à­Ÿà¬¾à¬°à¬¤ ସମà­à¬ªà¬¾à¬¦à¬•à¬°à­‡ ଯୋଗ କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/connections.c:436
+#, c-format
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
"\n"
msgstr ""
-"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection delete { ARGUMENTS | help }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"à¬à¬• ସଂଯୋଗ ରୂପରେଖାକୠଅପସାରଣ କରନà­à¬¤à­à¥¤\n"
+"ରୂପରେଖାଟି ତାହାର ନାମ ଦà­à­±à¬¾à¬°à¬¾ ପରିଚିତ, UUID କିମà­à¬¬à¬¾ D-Bus ପଥ।\n"
"\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:448
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con list': %s"
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection reload { help }\n"
+"\n"
+"ଡିସà­à¬•à¬°à­ ସମସà­à¬¤ ସଂଯୋଗ ଫାଇଲଗà­à¬¡à¬¼à¬¿à¬•à­ ପà­à¬¨à¬°à­à¬¦à­à¬§à¬¾à¬°à¬£ କରନà­à¬¤à­à¥¤\n"
+"\n"
-#: ../cli/src/connections.c:253 ../cli/src/connections.c:613
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con list': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°: %s"
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"ଗୋଟିଠକିମà­à¬¬à¬¾ ଅଧିକ ସଂଯୋଗ ଫାଇଲଗà­à¬¡à¬¼à¬¿à¬•à­ ଡିସà­à¬•à¬°à­ ଧାରଣ/ପà­à¬¨à¬°à­à¬¦à­à¬§à¬¾à¬°à¬£ କରନà­à¬¤à­à¥¤ ହସà­à¬¤à¬•à­ƒà¬¤ "
+"ଭାବରେ à¬à¬• ସଂଯୋଗ ଫାଇଲକà­\n"
+"ସମà­à¬ªà¬¾à¬¦à¬¨ କରି NetworkManager à¬à¬¹à¬¾à¬° ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ସà­à¬¥à¬¿à¬¤à¬¿ ବିଷୟରେ ଜାଣିଛି କି ନାହିଠ"
+"ନିଶà­à¬šà¬¿à¬¤à¬•à¬°à¬¿à¬¬à¬¾ ପାଇà¬\n"
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­\n"
+"\n"
-#: ../cli/src/connections.c:261
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ବିନà­à­Ÿà¬¾à¬¸à¬¿à¬¤ ତାଲିକା': %s"
+
+#: ../cli/src/connections.c:523
msgid "Connection details"
msgstr "ସଂଯୋଗ ବିବରଣୀ"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "କଦାପି ନà­à¬¹à¬"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:787
-#: ../cli/src/settings.c:907 ../cli/src/settings.c:1189
-#: ../cli/src/settings.c:1190 ../cli/src/settings.c:1192
-#: ../cli/src/settings.c:1194 ../cli/src/settings.c:1195
-#: ../cli/src/settings.c:1326 ../cli/src/settings.c:1327
-#: ../cli/src/settings.c:1328 ../cli/src/settings.c:1329
-#: ../cli/src/settings.c:1406 ../cli/src/settings.c:1407
-#: ../cli/src/settings.c:1408 ../cli/src/settings.c:1409
-#: ../cli/src/settings.c:1410 ../cli/src/settings.c:1411
-#: ../cli/src/settings.c:1412 ../cli/src/settings.c:1413
-#: ../cli/src/settings.c:1414 ../cli/src/settings.c:1415
-#: ../cli/src/settings.c:1416 ../cli/src/settings.c:1417
-#: ../cli/src/settings.c:1418 ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:442
msgid "yes"
msgstr "ହà¬"
-#: ../cli/src/connections.c:487 ../cli/src/connections.c:488
-#: ../cli/src/connections.c:716 ../cli/src/connections.c:717
-#: ../cli/src/connections.c:719 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:714
-#: ../cli/src/settings.c:787 ../cli/src/settings.c:907
-#: ../cli/src/settings.c:1189 ../cli/src/settings.c:1190
-#: ../cli/src/settings.c:1192 ../cli/src/settings.c:1194
-#: ../cli/src/settings.c:1195 ../cli/src/settings.c:1326
-#: ../cli/src/settings.c:1327 ../cli/src/settings.c:1328
-#: ../cli/src/settings.c:1329 ../cli/src/settings.c:1406
-#: ../cli/src/settings.c:1407 ../cli/src/settings.c:1408
-#: ../cli/src/settings.c:1409 ../cli/src/settings.c:1410
-#: ../cli/src/settings.c:1411 ../cli/src/settings.c:1412
-#: ../cli/src/settings.c:1413 ../cli/src/settings.c:1414
-#: ../cli/src/settings.c:1415 ../cli/src/settings.c:1416
-#: ../cli/src/settings.c:1417 ../cli/src/settings.c:1418
-#: ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:444
msgid "no"
msgstr "ନାà¬"
-#: ../cli/src/connections.c:562
-#| msgid "Connection details"
-msgid "Connection list"
-msgstr "ସଂଯୋଗ ତାଲିକା"
-
-#: ../cli/src/connections.c:575 ../cli/src/connections.c:1112
-#: ../cli/src/connections.c:1650 ../cli/src/connections.c:1665
-#: ../cli/src/connections.c:1674 ../cli/src/connections.c:1684
-#: ../cli/src/connections.c:1696 ../cli/src/connections.c:1804
-#: ../cli/src/connections.c:1906 ../cli/src/devices.c:1122
-#: ../cli/src/devices.c:1132 ../cli/src/devices.c:1250
-#: ../cli/src/devices.c:1258 ../cli/src/devices.c:1622
-#: ../cli/src/devices.c:1629 ../cli/src/devices.c:1643
-#: ../cli/src/devices.c:1650 ../cli/src/devices.c:1667
-#: ../cli/src/devices.c:1678 ../cli/src/devices.c:1899
-#: ../cli/src/devices.c:1906
+#: ../cli/src/connections.c:667
+msgid "List of configured connections"
+msgstr "ବିନà­à­Ÿà¬¾à¬¸à¬¿à¬¤ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à¬° ତାଲିକା"
+
+#: ../cli/src/connections.c:684 ../cli/src/connections.c:1225
+#: ../cli/src/connections.c:1785 ../cli/src/connections.c:1801
+#: ../cli/src/connections.c:1810 ../cli/src/connections.c:1820
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:7563
+#: ../cli/src/connections.c:7738 ../cli/src/devices.c:1633
+#: ../cli/src/devices.c:1641 ../cli/src/devices.c:2028
+#: ../cli/src/devices.c:2035 ../cli/src/devices.c:2049
+#: ../cli/src/devices.c:2056 ../cli/src/devices.c:2073
+#: ../cli/src/devices.c:2081 ../cli/src/devices.c:2277
+#: ../cli/src/devices.c:2373 ../cli/src/devices.c:2380
#, c-format
msgid "Error: %s argument is missing."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି।"
-#: ../cli/src/connections.c:588
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s - à¬à¬ªà¬°à¬¿ କୌଣସି ସଂଯୋଗ ନାହିà¬à¥¤"
-#: ../cli/src/connections.c:594 ../cli/src/connections.c:1709
-#: ../cli/src/connections.c:1821 ../cli/src/connections.c:1913
-#: ../cli/src/devices.c:906 ../cli/src/devices.c:986 ../cli/src/devices.c:1146
-#: ../cli/src/devices.c:1264 ../cli/src/devices.c:1691
-#: ../cli/src/devices.c:1912
+#: ../cli/src/connections.c:710
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "ଅଜଣା ପà­à¬°à¬¾à¬šà¬³: %s\n"
+msgid "Error: 'show configured': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ବିନà­à­Ÿà¬¾à¬¸à¬¿à¬¤à¬•à­ ଦରà­à¬¶à¬¾à¬¨à­à¬¤à­': %s"
-#: ../cli/src/connections.c:603
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ବୈଧ ପà­à¬°à¬¾à¬šà¬³ ଉଲà­à¬²à­‡à¬– ହୋଇନାହିà¬à¥¤"
-
-#: ../cli/src/connections.c:618 ../cli/src/connections.c:2009
-#: ../cli/src/devices.c:2123 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:715 ../cli/src/connections.c:1853
+#: ../cli/src/connections.c:7804 ../cli/src/connections.c:7845
+#: ../cli/src/connections.c:7997 ../cli/src/devices.c:2256
+#: ../cli/src/devices.c:2630 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
msgid "Error: %s."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s."
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "ସକà­à¬°à¬¿à­Ÿ କରà­à¬…ଛି"
-#: ../cli/src/connections.c:633
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "ସକà­à¬°à¬¿à­Ÿ ହୋଇସାରିଛି"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "ନିଷà­à¬•à­à¬°à¬¿à­Ÿ ହୋଇସାରିଛି"
+
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି (ପà­à¬°à¬¸à­à¬¤à­à¬¤)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି (ବୈଧିକରଣ ଆବଶà­à­Ÿà¬•)"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି (IP ସଂରଚନା ଗà­à¬°à¬¹à¬£ କରà­à¬…ଛି)"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN ସଂଯà­à¬•à­à¬¤ ହୋଇଛି"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN ସଂଯୋଗ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି"
-#: ../cli/src/connections.c:712 ../cli/src/connections.c:722
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1012
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con status': %s"
+msgid "Error: 'list active': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ତାଲିକା ସକà­à¬°à¬¿à­Ÿ': %s"
-#: ../cli/src/connections.c:918 ../cli/src/connections.c:1142
-#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con status': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°: %s"
-
-#: ../cli/src/connections.c:926
-#| msgid "Active connections"
+#: ../cli/src/connections.c:1020
msgid "Active connection details"
msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ବିବରଣୀ"
-#: ../cli/src/connections.c:1062 ../cli/src/connections.c:1724
-#: ../cli/src/connections.c:1836 ../cli/src/connections.c:1927
-#: ../cli/src/devices.c:933 ../cli/src/devices.c:995 ../cli/src/devices.c:1161
-#: ../cli/src/devices.c:1294 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1941 ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:1899 ../cli/src/connections.c:7592
+#: ../cli/src/connections.c:7707 ../cli/src/connections.c:7798
+#: ../cli/src/connections.c:7826 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1403
+#: ../cli/src/devices.c:1538 ../cli/src/devices.c:1675
+#: ../cli/src/devices.c:2115 ../cli/src/devices.c:2414
+#: ../cli/src/network-manager.c:484
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: NetworkManager ଚାଲà­à¬…ଛି କି ନାହିଠତାହା ଜାଣିପାରିଲା ନାହିà¬: %s."
-
-#: ../cli/src/connections.c:1066 ../cli/src/connections.c:1728
-#: ../cli/src/connections.c:1840 ../cli/src/connections.c:1931
-#: ../cli/src/devices.c:937 ../cli/src/devices.c:999 ../cli/src/devices.c:1165
-#: ../cli/src/devices.c:1298 ../cli/src/devices.c:1717
-#: ../cli/src/devices.c:1945 ../cli/src/network-manager.c:315
-#, c-format
-#| msgid "NetworkManager status"
msgid "Error: NetworkManager is not running."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: NetworkManager ଚାଲୠନାହିà¬à¥¤"
-#: ../cli/src/connections.c:1098
-msgid "Active connections"
-msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•"
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à¬° ତାଲିକା"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
#, c-format
-#| msgid "Error: %s - no such connection."
msgid "Error: '%s' is not an active connection."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ଟି à¬à¬• ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/connections.c:1128
+#: ../cli/src/connections.c:1251
#, c-format
-#| msgid "Unknown parameter: %s\n"
-msgid "Error: unknown parameter: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅଜଣା ପà­à¬°à¬¾à¬šà¬³: %s"
+msgid "Error: 'show active': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଦୃଶà­à­Ÿ ସକà­à¬°à¬¿à­Ÿ': %s"
-#: ../cli/src/connections.c:1235
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "ଉପକରଣ '%s' ରେ କୌଣସି ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ନାହିà¬"
-#: ../cli/src/connections.c:1243
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "କୌଣସି ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ କିମà­à¬¬à¬¾ ଉପକରଣ ନାହିà¬"
-#: ../cli/src/connections.c:1314
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "ଉପକରଣ '%s' ସଂଯୋଗ '%s' ସହିତ ସà­à¬¸à¬™à­à¬—ତ ନà­à¬¹à¬"
-#: ../cli/src/connections.c:1317
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "ସଂଯୋଗ '%s' ପାଇଠକୌଣସି ଉପକରଣ ମିଳିଲା ନାହିà¬"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "ଅଜଣା କାରଣ"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "କିଛି ନà­à¬¹à­‡à¬"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "ଚାଳକଟି ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଥିଲା"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "ମୂଳ ନେଟୱରà­à¬• ସଂଯୋଗଟି ବାଧାପà­à¬°à¬¾à¬ªà­à¬¤ ହୋଇଥିଲା"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଅପà­à¬°à¬¤à­à­Ÿà¬¾à¬¶à¬¿à¬¤ ଭାବରେ ବନà­à¬¦ ହୋଇଯାଇଛି"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଅବୈଧ ସଂରଚନା ଫେରାଇଛି"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "ସଂଯୋଗ ସମୟ ସମାପà­à¬¤ ପାଇଠଚେଷà­à¬Ÿà¬¾à¬•à¬°à¬¿à¬›à¬¿"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଠିକ ସମୟରେ ଆରମà­à¬­ ହୋଇନଥିଲା"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଆରମà­à¬­ ହେବାରେ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "କୌଣସି ବୈଧ VPN ଗà­à¬ªà­à¬¤ ତଥà­à­Ÿ ନାହିà¬"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "ଅବୈଧ VPN ଗà­à¬ªà­à¬¤ ତଥà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬•"
-#: ../cli/src/connections.c:1351
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "ସଂଯୋଗକୠକଢ଼ାଯାଇଛି"
-#: ../cli/src/connections.c:1368 ../cli/src/connections.c:1573
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "ସଂଯୋଗ ସଫଳଭାବରେ ସକà­à¬°à¬¿à­Ÿ ହୋଇଛି (D-Bus ସକà­à¬°à¬¿à­Ÿ ପଥ: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1373 ../cli/src/connections.c:1474
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି।"
-#: ../cli/src/connections.c:1398
+#: ../cli/src/connections.c:1507
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN ସଂଯୋଗ ସଫଳତାର ସହିତ ସକà­à¬°à¬¿à­Ÿ ହୋଇଛି (D-Bus ସକà­à¬°à¬¿à­Ÿ ପଥ: %s)\n"
-#: ../cli/src/connections.c:1406
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି: %s."
-#: ../cli/src/connections.c:1503 ../cli/src/devices.c:1055
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସମୟ ସମାପà­à¬¤ %d ସେକଣà­à¬¡ ବିତିଯାଇଛି।"
-#: ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"ତà­à¬°à­à¬Ÿà¬¿: ସକà­à¬°à¬¿à­Ÿ କରିବା ସହିତ ଆଗକୠବଢ଼ିବା ପୂରà­à¬¬à¬°à­ ଉପକରଣ '%s' ଅନà­à¬šà¬°à¬®à¬¾à¬¨à¬™à­à¬•à­ "
+"ଅପେକà­à¬·à¬¾ କରିଥାà¬à¥¤"
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି: %s"
-#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1812
-#: ../cli/src/connections.c:1940
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "ଅଜଣା ତà­à¬°à­à¬Ÿà¬¿"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅଜଣା ସଂଯୋଗ: %s."
+msgid "unknown device '%s'."
+msgstr "ଅଜଣା ଉପକରଣ '%s'."
-#: ../cli/src/connections.c:1704 ../cli/src/devices.c:1140
-#: ../cli/src/devices.c:1686
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "କୌଣସି ବୈଧ ସଂଯୋଗ କିମà­à¬¬à¬¾ ଉପକରଣ ଦିଆଯାଇ ନାହିà¬"
+
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "ସଂଯୋଗ (ନାମ, UUID, କିମà­à¬¬à¬¾ ପଥ): "
+
+#: ../cli/src/connections.c:1829 ../cli/src/devices.c:1171
+#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
+#: ../cli/src/devices.c:2386
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସମୟ ସମାପà­à¬¤ ମୂଲà­à­Ÿ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
+msgid "Unknown parameter: %s\n"
+msgstr "ଅଜଣା ପà­à¬°à¬¾à¬šà¬³: %s\n"
+
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "ପà­à¬°à¬¸à­à¬¤à­à¬¤ କରà­à¬…ଛି"
-#: ../cli/src/connections.c:1717 ../cli/src/connections.c:1829
-#: ../cli/src/connections.c:1920
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: id କିମà­à¬¬à¬¾ uuid କୠଉଲà­à¬²à­‡à¬– କରିବା ଉଚିତ।"
+msgid "Error: No connection specified."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ସଂଯୋଗ ଉଲà­à¬²à­‡à¬– ହୋଇନାହିà¬à¥¤"
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ଉପଯà­à¬•à­à¬¤ ଉପକରଣ ମିଳିଲାନାହିà¬: %s."
+msgid "'%s' not among [%s]"
+msgstr "'%s' ଟି [%s] ମଧà­à¬¯à¬°à­ ଗୋଟିଠନà­à¬¹à¬"
-#: ../cli/src/connections.c:1751
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: No suitable device found."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ଉପଯà­à¬•à­à¬¤ ଉପକରଣ ମିଳିଲାନାହିà¬à¥¤"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s': '%s' ଟି à¬à¬• ବୈଧ %s MAC ଠିକଣା ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "ଇନଫିନିବà­à­Ÿà¬¾à¬£à­à¬¡"
-#: ../cli/src/connections.c:1865
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "ଇଥରନେଟ"
+
+#: ../cli/src/connections.c:2343
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "ଚେତାବନୀ: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿ ନà­à¬¹à¬\n"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "ତୃଟି: 'mtu': '%s' ଟି ଗୋଟିଠବୈଧ MTU ନà­à¬¹à¬à¥¤"
-#: ../cli/src/connections.c:1879
+#: ../cli/src/connections.c:2359
#, c-format
-#| msgid "Error: Connection activation failed: %s"
-msgid "Error: Connection deletion failed: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ଅପସାରଣ ବିଫଳ ହୋଇଛି: %s"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "ତୃଟି: 'parent': '%s' ଟି ଗୋଟିଠବୈଧ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/connections.c:2000
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "ତୃଟି: 'p-key': '%s' ଟି ଗୋଟିଠବୈଧ InfiniBand P_KEY ନà­à¬¹à¬à¥¤"
-#: ../cli/src/connections.c:2068
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: D-Bus ସହିତ ସଂଯà­à¬•à­à¬¤ ହୋଇପାରିଲା ନାହିà¬à¥¤"
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"ତୃଟି: 'mode': '%s' ଟି ଗୋଟିଠବୈଧInfiniBand ପରିବହନ ଧାରା ନà­à¬¹à¬ [datagram, "
+"connected]."
-#: ../cli/src/connections.c:2076
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ତନà­à¬¤à­à¬° ସଂରଚନା ପାଇଲା ନାହିà¬à¥¤"
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ସୂଚକ': '%s' ଟି ବୈଧ ନà­à¬¹à¬; <0-7> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
-#: ../cli/src/connections.c:2086
+#: ../cli/src/connections.c:2434
#, c-format
-#| msgid "Error: Can't obtain connections: settings services are not running."
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ଧାରଣ କରିପାରିବେ ନାହିà¬: ବିନà­à­Ÿà¬¾à¬¸ ସରà­à¬­à¬¿à¬¸à¬—à­à¬¡à¬¼à¬¿à¬• ଚାଲà­à¬¨à¬¾à¬¹à¬¿à¬à¥¤"
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s': '%s' ଟି à¬à¬• ବୈଧ ନà­à¬¹à¬; %s "
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:108 ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "ତୃଟି: '%s': '%s' ଟି ବୈଧ ନà­à¬¹à¬; <%u-%u> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ଇଥରନେଟ"
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ ତିନୋଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#: ../cli/src/connections.c:2559 ../cli/src/connections.c:2613
+#: ../cli/src/connections.c:2735 ../cli/src/connections.c:2781
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:2909
+#: ../cli/src/connections.c:3072 ../cli/src/connections.c:3168
+#: ../cli/src/connections.c:3250
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "ଆପଣ ସେଗà­à¬¡à¬¼à¬¿à¬•à­ ପà­à¬°à¬¦à¬¾à¬¨ କରିବାକୠଚାହà­à¬à¬›à¬¨à­à¬¤à¬¿ କି? (yes/no) [yes] "
-#. 4
-#: ../cli/src/devices.c:87
-#| msgid "WIFI-PROPERTIES"
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
+#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+msgid "MTU [auto]: "
+msgstr "MTU [ସà­à­±à­Ÿà¬‚ଚାଳିତ]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
-#| msgid "DNS"
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
+#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+msgid "MAC [none]: "
+msgstr "MAC [କିଛି ନà­à¬¹à¬]: "
-#. 6
-#: ../cli/src/devices.c:89
-#| msgid "IP4-DNS"
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "କà­à¬²à­‹à¬¨ ହୋଇଥିବା MAC [କିଛି ନà­à¬¹à¬]: "
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr ""
+"'InfiniBand' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ 5 ଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
-#. 8
-#: ../cli/src/devices.c:91
-#| msgid "IP6-DNS"
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "ପରିବହନ ଧାରା (datagram or connected) [datagram]: "
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "ମୂଖà­à­Ÿ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  [କିଛି ନାହିà¬]: "
-#. 10
-#: ../cli/src/devices.c:93
-msgid "BOND"
-msgstr "BOND"
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [କିଛି ନାହିà¬]: "
-#. 11
-#: ../cli/src/devices.c:94
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "ତୃଟି: 'p-key' ଟି ବାଧà­à¬¯à¬¤à¬¾à¬®à­‚ଳକ ଅଟେ ଯେତେବେଳେ 'ମୂଖà­à­Ÿ' ଉଲà­à¬²à­‡à¬– ହୋଇଥାà¬à¥¤\n"
+
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ 1 ଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:2703 ../cli/src/connections.c:2805
+#: ../cli/src/connections.c:3024 ../cli/src/connections.c:3226
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "ଆପଣ ତାହାକୠପà­à¬°à¬¦à¬¾à¬¨ କରିବାକୠଚାହà­à¬à¬›à¬¨à­à¬¤à¬¿ କି? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "ସେଠାରେ 4 ଟି ବୈକଳà­à¬ªà¬¿à¬• 'PPPoE' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ [କିଛି ନାହିà¬]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "ସରà­à¬­à¬¿à¬¸ [କିଛି ନାହିà¬]: "
+
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr ""
+"'ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¬à­à­Ÿà¬¾à¬£à­à¬¡' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ 2 ଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° "
+"ଅଛି।\n"
+
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€ ନାମ [କିଛି ନାହିà¬]: "
+
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "'ବà­à¬²à­à¬Ÿà­à¬¥' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ ଗୋଟିଠବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "ବà­à¬²à­à¬Ÿà­à¬¥ ପà­à¬°à¬•à¬¾à¬° (panu, dun-gsm or dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "ତୃଟି: 'bt-type': '%s' à¬à¬• ବୈଧ ବà­à¬²à­à¬Ÿà­à¬¥ ପà­à¬°à¬•à¬¾à¬° ନà­à¬¹à¬à¥¤\n"
+
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ 4 ଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
-#. 2
-#: ../cli/src/devices.c:110
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN ସୂଚକ (<0-7>) [କିଛି ନାହିà¬]: "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "Ingress ଅଗà­à¬°à¬¾à¬§à¬¿à¬•à¬¾à¬° ମେଳକ [କିଛି ନà­à¬¹à¬]: "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Egress ଅଗà­à¬°à¬¾à¬§à¬¿à¬•à¬¾à¬° ମେଳକ [କିଛି ନà­à¬¹à¬]: "
+
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "'bond' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ ଇଚà­à¬›à¬¾à¬§à­€à¬¨ ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "ବନà­à¬§à¬¨ ଧାରା [balance-rr]: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "ପà­à¬°à¬¾à¬¥à¬®à¬¿à¬• ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬ à¬•à­ ବାନà­à¬§à­à¬…ଛି [କିଛି ନାହିà¬]: "
+
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "ତୃଟି: 'primary': '%s' ଟି ଗୋଟିଠବୈଧ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ ନà­à¬¹à¬à¥¤\n"
+
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "ବନà­à¬§à¬¨ ନିରୀକà­à¬·à¬£ ଧାରା (miimon ଅଥବା arp) [miimon]: "
+
+#: ../cli/src/connections.c:2950
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"ତୃଟି: '%s' ଟି ଗୋଟିଠବୈଧ ନିରୀକà­à¬·à¬£ ଧାରା ନà­à¬¹à¬; '%s' କିମà­à¬¬à¬¾ '%s' କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° "
+"କରନà­à¬¤à­à¥¤\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "ବନà­à¬§à¬¨ miimon [100]: "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "ତୃଟି: 'miimon': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <0-%u>.\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "ବନà­à¬§à¬¨ downdelay [0]: "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "ତୃଟି: 'downdelay': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <0-%u>.\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "ବନà­à¬§à¬¨ updelay [0]: "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "ତୃଟି: 'updelay': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <0-%u>.\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "ବନà­à¬§à¬¨ arp-interval [0]: "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "ତୃଟି: 'arp-interval': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <0-%u>.\n"
+
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "ବନà­à¬§à¬¨ arp-ip-target [none]: "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "ସେଠାରେ '%s' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠ1 ଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "ଦଳ JSON ସଂରଚନା [କିଛି ନାହିà¬]: "
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "ଦଳ"
+
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "team-slave"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "'bridge' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ 6 ଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP କୠସକà­à¬°à¬¿à­Ÿ କରିଥାଠ(yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "ତୃଟି: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3093
+msgid "STP priority [128]: "
+msgstr "STP ଅଗà­à¬°à¬¾à¬§à¬¿à¬•à¬¾à¬° [128]: "
+
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "ତୃଟି: 'priority': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <0-%d>.\n"
+
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "ଅଗà­à¬°à¬¸à¬°à¬£ ବିଳମà­à¬¬ [15]: "
+
+#: ../cli/src/connections.c:3109
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "ତୃଟି: 'forward-delay': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <2-30>.\n"
+
+#: ../cli/src/connections.c:3118
+msgid "Hello time [2]: "
+msgstr "ହେଲୋ ସମୟ [2]: "
+
+#: ../cli/src/connections.c:3122
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "ତୃଟି: 'hello-time': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <1-10>.\n"
+
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "ସରà­à¬¬à¬¾à¬§à¬¿à¬• ବୟସ [20]: "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "ତୃଟି: 'max-age': '%s' ଟି ଗୋଟିଠବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <6-40>.\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "MAC ଠିକଣା ସମୟ ଅବଧି [300]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "ତୃଟି: 'ageing-time': '%s' ଟି à¬à¬• ବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <0-1000000>.\n"
+
+#: ../cli/src/connections.c:3167
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr ""
+"'bridge-slave' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ 3 ଟି ଇଚà­à¬›à¬¾à¬§à­€à¬¨ ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "ବà­à¬°à¬¿à¬œ ପୋରà­à¬Ÿ ଅଗà­à¬°à¬¾à¬§à­€à¬•à¬¾à¬° [32]: "
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "ବà­à¬°à¬¿à¬œ ପୋରà­à¬Ÿ STP ପଥ ମୂଲà­à­Ÿ [100]: "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "ତୃଟି: 'hairpin': '%s'.\n"
+
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "'VPN' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠସେଠାରେ ଗୋଟିଠବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅଛି।\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "'OLPC Mesh' ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ପାଇଠ2 ଟି ବୈକଳà­à¬ªà¬¿à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ନାହିà¬à¥¤\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC ମà­à­Ÿà­‡à¬¶ ଚà­à¬¯à¬¾à¬¨à­‡à¬² [1]: "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "ତୃଟି: 'channel': '%s' ଟି à¬à¬• ବୈଧ ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ <1-13>.\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC ଠିକଣା [none]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 ଠିକଣା (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 ଠିକଣା (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " ଠିକଣାକୠସଫଳତାର ସହିତ ଯୋଗ କରାଯାଇଛି: %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " ଚେତାବନୀ: ଠିକଣା ପୂରà­à¬¬à¬°à­ ଉପସà­à¬¥à¬¿à¬¤ ଅଛି: %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " ଚେତାବନୀ: ଶେଷରେ ଆବରà­à¬œà¬¨à¬¾à¬•à­ ଅଗà­à¬°à¬¾à¬¹à­à­Ÿ କରà­à¬…ଛି: '%s'\n"
+
+#: ../cli/src/connections.c:3343 ../cli/src/connections.c:4192
+#: ../cli/src/connections.c:4247 ../cli/src/connections.c:4646
+#: ../cli/src/connections.c:4656
+msgid "Error: "
+msgstr "ତୃଟି: "
+
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "ଆପଣ IP ଠିକଣାକୠଯୋଗ କରିବା ପାଇଠଚାହà­à¬à¬›à¬¨à­à¬¤à¬¿ କି? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "ଠିକଣା ଯୋଗ କରିବାକୠସମାପà­à¬¤ କରିବା ପାଇଠ<Enter> କୠଦବାନà­à¬¤à­à¥¤\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "ତୃଟି: 'parent': 'p-key' ବିନା ବୈଧ ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+msgid "Error: 'ssid' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ssid' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP ନାମ: "
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'nsp' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "PPPoE ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€ ନାମ: "
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "ତୃଟି: 'username' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'apn' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "ବà­à¬²à­à¬Ÿà­à¬¥ ଉପକରଣ ଠିକଣା:"
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'addr' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'bt-ପà­à¬°à¬•à¬¾à¬°': '%s' ବୈଧ ନà­à¬¹à¬; [%s, %s (%s), %s] ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN ମୂଖà­à­Ÿ ଉପକରଣ କିମà­à¬¬à¬¾ ସଂଯୋଗ UUID: "
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:3928
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:3931
+msgid "Error: 'id' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'id' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'id': '%s' ଟି ବୈଧ ନà­à¬¹à¬; <0-4095> ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
+
+#: ../cli/src/connections.c:3947
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev': '%s' ଟି UUID, ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ, ନà­à¬¹à¬ MAC."
+
+#: ../cli/src/connections.c:4082
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଧାରା': %s."
+
+#: ../cli/src/connections.c:4091
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'primary': '%s' ଟି ଗୋଟିଠବୈଧ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "ବନà­à¬§à¬¨ ମୂଖà­à­Ÿ: "
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ମୂଖà­à­Ÿ' ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
+#: ../cli/src/connections.c:4427
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"ଚେତାବନୀ: 'ପà­à¬°à¬•à¬¾à¬°' ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ଅଗà­à¬°à¬¹à¬£à­€à­Ÿà¥¤ ଆମେବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ କେବଳ ଇଥରନେଟ ଅନà­à¬šà¬°à¬•à­ "
+"ସମରà­à¬¥à¬¨ କରିଥାଉ।\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "ଦଳ ମୂଖà­à­Ÿ: "
+
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'stp': %s."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "ବà­à¬°à¬¿à¬œ ମୂଖà­à­Ÿ: "
+
+#: ../cli/src/connections.c:4421
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ମୂଖà­à­Ÿ': '%s' ଟି ବୈଧ UUID ନà­à¬¹à¬ କିମà­à¬¬à¬¾ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "VPN ପà­à¬°à¬•à¬¾à¬°: "
+
+#: ../cli/src/connections.c:4509
+msgid "Error: 'vpn-type' is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'vpn-ପà­à¬°à¬•à¬¾à¬°' ଆବଶà­à­Ÿà¬• ହୋଇଥାà¬à¥¤"
+
+#: ../cli/src/connections.c:4520
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4578
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଚà­à¬¯à¬¾à¬¨à­‡à¬²': '%s' ଟି ବୈଧ ନà­à¬¹à¬; <1-13> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
+
+#: ../cli/src/connections.c:4613
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "ତୃଟି: '%s' ଟି ଗୋଟିଠବୈଧ ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬° ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:4711
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ସଂଯୋଗକୠଯୋଗ କରିବାରେ ବିଫଳ: (%d) %s"
+
+#: ../cli/src/connections.c:4715
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "ସଂଯୋଗ '%s' (%s) କୠସଫଳତାର ସହିତ ଯୋଗ କରାଯାଇଛି।\n"
+
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬°:"
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ପà­à¬°à¬•à¬¾à¬°' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬°: %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'autoconnect': %s"
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ [*]: "
+
+#: ../cli/src/connections.c:4801
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "ତୃଟି: 'ifname' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "ତୃଟି: 'ifname': '%s' ଟି ଗୋଟିଠବୈଧ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନà­à¬¹à¬ କିମà­à¬¬à¬¾ '*' ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:5627
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' ମୂଲà­à­Ÿ ସେଟ କରà­à¬…ଛି]\n"
+
+#: ../cli/src/connections.c:5708
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+
+#: ../cli/src/connections.c:5735
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"ସମà­à¬ªà¬¾à¬¦à¬¨ କରିବା ପାଇଠà¬à¬¹à¬¿ ନିରà­à¬¦à­à¬¦à­‡à¬¶ à¬à¬• ସଂରଚନା ଅଥବା ଗà­à¬£à¬§à¬°à­à¬®à¬®à¬§à­à¬¯à¬°à­‡ ପà­à¬°à¬¬à­‡à¬¶ କରିଥାà¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5742
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"à¬à¬¹à¬¿ ନିରà­à¬¦à­à¬¦à­‡à¬¶ ସଂଯୋଗରୠସମଗà­à¬° ସଂରଚନାକୠବାହାର କରିଥାà¬, କିମà­à¬¬à¬¾ ଯଦି ଗୋଟିଠଗà­à¬£à¬§à¬°à­à¬® "
+"ପà­à¬°à¬¦à¬¾à¬¨\n"
+"କରାଯାଇଥାà¬, ତେବେ ସେହି ଗà­à¬®à¬§à¬°à­à¬®à¬•à­ ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ମୂଲà­à­Ÿà¬•à­ ପà­à¬¨à¬ƒà¬¸à­à¬¥à¬¾à¬ªà¬¨ କରିଥାà¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5749
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"à¬à¬¹à¬¿ ନିରà­à¬¦à­à¬¦à­‡à¬¶ ଗà­à¬£à¬§à¬°à­à¬® ମୂଲà­à­Ÿ ସେଟ କରିଥାà¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: nmcli> set con.id My connection\n"
+
+#: ../cli/src/connections.c:5754
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"ଗà­à¬£à¬§à¬°à­à¬® ବରà­à¬£à­à¬£à¬¨à¬¾ ଦରà­à¬¶à¬¾à¬‡à¬¥à¬¾à¬à¥¤ ସମସà­à¬¤ NM ସଂରଚନା à¬à¬¬à¬‚ ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ ଦେଖିବା ପାଇଠଆପଣ nm-"
+"settings(5) ହସà­à¬¤à¬ªà­à¬¸à­à¬¤à¬•à¬•à­ ଅନà­à¬¸à¬°à¬£ କରିପାରିବେ।\n"
+
+#: ../cli/src/connections.c:5759
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨à¬° ଗà­à¬£à¬§à¬°à­à¬® ଅଥବା ସମà­à¬ªà­‚ରà­à¬£à­à¬£ ସଂଯୋଗକୠଦରà­à¬¶à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5764
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"ସଂରଚନା କିମà­à¬¬à¬¾ ସଂଯୋଗ ବୈଧ କି ନà­à¬¹à¬ ତାହା ଯାଞà­à¬š କରିଥାଠà¬à¬¬à¬‚ ତାହାକୠପରେ ସଂରକà­à¬·à¬£ "
+"କରାଯାଇପାରିବ।à¬à¬¹à¬¾ ତୃଟିର ଅବୈଧ ମୂଲà­à­Ÿà¬•à­ ସୂଚାଇଥାà¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5771
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: save the connection\n"
+"\n"
+"ସଂଯୋଗକୠNetworkManager ପାଖକୠପଠାଇଥାଠଯାହା à¬à¬¹à¬¾à¬•à­ ସଂରକà­à¬·à¬£ କରିବ।\n"
+
+#: ../cli/src/connections.c:5775
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"ସଂଯୋଗକୠସକà­à¬°à¬¿à­Ÿ କରିଥାà¬à¥¤\n"
+"\n"
+"ଉପଲବà­à¬§ ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬•:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#, c-format
+msgid "back :: go to upper menu level\n"
+"\n"
+msgstr "back :: go to upper menu level\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid "help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+
+#: ../cli/src/connections.c:5788
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"nmcli କୠବିନà­à­Ÿà¬¾à¬¸ କରିଥାà¬à¥¤ ନିମà­à¬¨à¬²à¬¿à¬–ିତ ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬• ଉପଲବà­à¬§:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"ଉଦାହରଣ: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: exit nmcli\n"
+"\n"
+"à¬à¬¹à¬¿ ନିରà­à¬¦à­à¬¦à­‡à¬¶ nmcli କୠପà­à¬°à¬¸à­à¬¥à¬¾à¬¨ କରିଥାà¬à¥¤ ଯେତେବେଳେ ସମà­à¬ªà¬¾à¬¦à¬¿à¬¤ ସଂଯୋଗକୠସଂରକà­à¬·à¬£ "
+"କରାଯାଇନଥାà¬, ସେତେବେଳେବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€ ସେହି କାରà­à¬¯à­à­Ÿà¬•à­ ନିଶà­à¬šà¬¿à¬¤ କରିବା ପାଇଠ"
+"ପଚାରିଥାà¬à¥¤\n"
+
+#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
+#: ../cli/src/connections.c:6313 ../cli/src/connections.c:7162
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "ଅଜଣା ନିରà­à¬¦à­à¬¦à­‡à¬¶: '%s'\n"
+
+#: ../cli/src/connections.c:5879
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+
+#: ../cli/src/connections.c:5904
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: set new value\n"
+"\n"
+"à¬à¬¹à¬¿ ନିରà­à¬¦à­à¬¦à­‡à¬¶ ସେଟଗà­à¬¡à¬¼à¬¿à¬• ଗà­à¬£à¬§à¬°à­à¬®à¬° <value> ପà­à¬°à¬¦à¬¾à¬¨ କରିଥାà¬\n"
+
+#: ../cli/src/connections.c:5908
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"à¬à¬¹à¬¿ ନିରà­à¬¦à­à¬¦à­‡à¬¶ ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ <value> ପà­à¬°à¬¦à¬¾à¬¨ କରିଥାà¬, ଯଦି ସେହି ଗà­à¬£à¬§à¬°à­à¬®à¬Ÿà¬¿ à¬à¬• ପାତà­à¬° "
+"ଆକାରରେ ଥାà¬à¥¤ ଗୋଟିଠମୂଲà­à­Ÿ ବିଶିଷà­à¬Ÿ ଗà­à¬£à¬§à¬°à­à¬® ପାଇଠତାହା ମୂଲà­à­Ÿà¬•à­ ବଦଳାଇଥାଠ('set' "
+"ପରି ସମାନ)।\n"
+
+#: ../cli/src/connections.c:5914
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: change current value\n"
+"\n"
+"ପà­à¬°à¬šà¬³à¬¿à¬¤ ମୂଲà­à­Ÿà¬•à­ ଦରà­à¬¶à¬¾à¬‡à¬¥à¬¾à¬ à¬à¬¬à¬‚ ତାହାକୠସମà­à¬ªà¬¾à¬¦à¬¨ କରିବା ପାଇଠଅନà­à¬®à¬¤à¬¿ ଦେଇଥାà¬à¥¤\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"ଗà­à¬£à¬§à¬°à­à¬® ମୂଲà­à­Ÿà¬•à­ ବାହାର କରିଥାଠ(à¬à¬¹à¬¾à¬•à­ ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ଭାବରେ ସେଟ କରିଥାà¬)।\n"
+
+#: ../cli/src/connections.c:5922
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: describe property\n"
+"\n"
+"ଗà­à¬£à¬§à¬°à­à¬® ବରà­à¬£à­à¬£à¬¨à¬¾ ଦରà­à¬¶à¬¾à¬‡à¬¥à¬¾à¬à¥¤ ସମସà­à¬¤ NM ସଂରଚନା à¬à¬¬à¬‚ ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ ଦେଖିବା ପାଇà¬"
+"ଆପଣ nm-settings(5) ହସà­à¬¤à¬ªà­à¬¸à­à¬¤à¬• ପୃଷà­à¬ à¬¾à¬•à­ ଅନà­à¬¸à¬°à¬£ କରିପାରିବେ।\n"
+
+#: ../cli/src/connections.c:5927
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"ଗà­à¬£à¬§à¬°à­à¬® ମୂଲà­à­Ÿà¬•à­ ଦରà­à¬¶à¬¾à¬‡à¬¥à¬¾à¬à¥¤ à¬à¬• ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ପà­à¬°à¬¦à¬¾à¬¨ କରି ଆପଣ ସମଗà­à¬° ସଂରଚନା à¬à¬¬à¬‚ "
+"ସଂଯୋଗ ପାଇଠମୂଲà­à­Ÿ ଦରà­à¬¶à¬¾à¬‡à¬ªà¬¾à¬°à¬¿à¬¬à­‡à¥¤\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid "help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: help for nmcli commands\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "ତୃଟି: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି।\n"
+
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr ""
+"ତୃଟି: '%s' କୠସେଟ କରିବା ବାଧà­à¬¯à¬¤à¬¾à¬®à­‚ଳକ ଅଟେ à¬à¬¬à¬‚ ତାହାକୠବାହାର କରାଯାଇପାରିବ "
+"ନାହିà¬à¥¤\n"
+
+#: ../cli/src/connections.c:6111
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬°: %s | name: %s | UUID: %s | dirty: %s ]\n"
+
+#: ../cli/src/connections.c:6171
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"ସଂଯୋଗ ରୂପରେଖାକୠଅନà­à­Ÿ କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ପାଖରୠକଢ଼ାଯାଇଛି। ଆପଣ ମୂଖà­à­Ÿ ତାଲିକାରେ à¬à¬¹à¬¾à¬•à­ "
+"ରଖିବା ପାଇଠ'ସଂରକà­à¬·à¬£' କୠଲେଖିପାରିବେ।\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' ମୂଲà­à­Ÿ ଭରଣ କରନà­à¬¤à­: "
+
+#: ../cli/src/connections.c:6209 ../cli/src/connections.c:6228
+#: ../cli/src/connections.c:6621 ../cli/src/connections.c:6680
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "ତୃଟି: '%s' ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ ସେଟ କରିବାରେ ବିଫଳ: %s\n"
+
+#: ../cli/src/connections.c:6221
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' ମୂଲà­à­Ÿà¬•à­ ସମà­à¬ªà¬¾à¬¦à¬¨ କରନà­à¬¤à­: "
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid "Error: %s\n"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s\n"
+
+#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
+#: ../cli/src/connections.c:6800
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "ତୃଟି: '%s' ର ମୂଲà­à­Ÿà¬•à­ ବାହାର କରିବାରେ ବିଫଳ: %s\n"
+
+#: ../cli/src/connections.c:6277
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "ଅଜଣା ନିରà­à¬¦à­à¬¦à­‡à¬¶ ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬°: '%s'\n"
+
+#: ../cli/src/connections.c:6297 ../cli/src/connections.c:7150
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr ""
+"à¬à¬¹à¬¿ ସଂଯୋଗକୠସଂରକà­à¬·à¬£ କରାଯାଇ ନାହିà¬à¥¤ ଆପଣ ପà­à¬°à¬•à­ƒà¬¤à¬°à­‡ ବିଦାୟ ନେବାକୠଚାହà­à¬à¬›à¬¨à­à¬¤à¬¿ କି? "
+"[y/n]\n"
+
+#: ../cli/src/connections.c:6409
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "ଉପଲବà­à¬§ ସଂରଚନା: %s\n"
+
+#: ../cli/src/connections.c:6418
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "ତୃଟି: ଅବୈଧ ସଂରଚନା ନାମ; %s\n"
+
+#: ../cli/src/connections.c:6435
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "ଉପଲବà­à¬§ ଗà­à¬£à¬§à¬°à­à¬®: %s\n"
+
+#: ../cli/src/connections.c:6443
+#, c-format
+msgid "Error: property %s\n"
+msgstr "ତୃଟି: ଗà­à¬£à¬§à¬°à­à¬® %s\n"
+
+#: ../cli/src/connections.c:6484
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"ସଂଯୋଗକୠ'autoconnect=yes' ସହିତ ସଂରକà­à¬·à¬£ କରିଥାà¬à¥¤ ତାହା ହà­à¬à¬¤à¬ƒ ସଂଯୋଗର ସଙà­à¬—à­‡ ସଙà­à¬—à­‡ "
+"ସକà­à¬°à¬¿à­Ÿ କରିଥାà¬à¥¤\n"
+"ଆପଣ ତଥାପି ସଂରକà­à¬·à¬£ କରିବାକୠଚାହà­à¬à¬›à¬¨à­à¬¤à¬¿ କି? [ହà¬] "
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "ଆପମ ନିମà­à¬¨à¬²à¬¿à¬–ିତ ସଂରଚନାକୠସମà­à¬ªà¬¾à¬¦à¬¨ କରିପାରିବେ: %s\n"
+
+#: ../cli/src/connections.c:6583
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"ସଂଯୋଗ ରୂପରେଖାକୠଅନà­à­Ÿ କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ପାଖରୠକଢ଼ାଯାଇଛି। ଆପଣ à¬à¬¹à¬¾à¬•à­ ରଖିବା ପାଇଠ"
+"'ସଂରକà­à¬·à¬£' କୠଲେଖିପାରିବେ।\n"
+
+#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' ଗà­à¬£à¬§à¬°à­à¬® ପାଇଠଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ ମୂଲà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬•: %s\n"
+
+#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "ତୃଟି: କୌଣସି ସଂରଚନା ବଛା ହୋଇନାହିà¬; ବୈଧ ମୂଲà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬• ହେଉଛି [%s]\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"'goto <setting>' କୠପà­à¬°à¬¥à¬®à­‡ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­, ଅଥବା 'set <setting>.<property>' "
+"କୠସେଟ କରନà­à¬¤à­\n"
+
+#: ../cli/src/connections.c:6641 ../cli/src/connections.c:6779
+#: ../cli/src/connections.c:6859
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "ତୃଟି: ଅବୈଧ ସଂରଚନା ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° '%s'; ବୈଧଗà­à¬¡à¬¼à¬¿à¬• ହେଉଛି [%s]\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "ତୃଟି: '%s' ଗà­à¬£à¬§à¬°à­à¬® ପାଇଠଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ସଂରଚନା\n"
+
+#: ../cli/src/connections.c:6658
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "ତୃଟି: ଅବୈଧ ଗà­à¬£à¬§à¬°à­à¬®: %s\n"
+
+#: ../cli/src/connections.c:6707
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "ତୃଟି: ଅଜଣା ସଂରଚନା '%s'\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "ଆପଣ ନିମà­à¬¨à¬²à¬¿à¬–ିତ ଗà­à¬£à¬§à¬°à­à¬®à¬—à­à¬¡à¬¼à¬¿à¬•à­ ସମà­à¬ªà¬¾à¬¦à¬¨ କରିପାରିବେ: %s\n"
+
+#: ../cli/src/connections.c:6764
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "ତୃଟି: କୌଣସି ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଦିଆଯାଇ ନାହିà¬; ବୈଧ ମୂଲà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬• ହେଉଛି [%s]\n"
+
+#: ../cli/src/connections.c:6777
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "ସଂରଚନା '%s' ଟି ସଂଯୋଗରେ ଉପସà­à¬¥à¬¿à¬¤ ନାହିà¬à¥¤\n"
+
+#: ../cli/src/connections.c:6818
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "ତୃଟି: %s ଗà­à¬£à¬§à¬°à­à¬® ନାହିà¬, କିମà­à¬¬à¬¾ à¬à¬¹à¬¾à¬° ସଂରଚନା ନାମ ନାହିà¬à¥¤\n"
+
+#: ../cli/src/connections.c:6843
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"ପà­à¬°à¬¥à¬®à­‡ 'goto <setting>' କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­, ଅଥବା 'describe <setting>."
+"<property>'\n"
+
+#: ../cli/src/connections.c:6884
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "ତୃଟି: ଅବୈଧ ଗà­à¬£à¬§à¬°à­à¬®: %s, à¬à¬• ବୈଧ ସଂରଚନା ନାମ ନà­à¬¹à¬à¥¤\n"
+
+#: ../cli/src/connections.c:6908
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "ତୃଟି: '%s' ସଂରଚନା ଉପସà­à¬¥à¬¿à¬¤ ନାହିà¬\n"
+
+#: ../cli/src/connections.c:6911
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "ତୃଟି: ଅଜଣା ସଂରଚନା: '%s'\n"
+
+#: ../cli/src/connections.c:6927
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "ସଂରଚନା '%s' କୠଯାଞà­à¬š କରନà­à¬¤à­: %s\n"
+
+#: ../cli/src/connections.c:6934
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "ସଂଯୋଗକୠଯାଞà­à¬š କରନà­à¬¤à­: %s\n"
+
+#: ../cli/src/connections.c:6973
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "ତୃଟି: '%s' (%s) ସଂଯୋଗକୠସଂରକà­à¬·à¬£ କରିବାରେ ବିଫଳ: (%d) %s\n"
+
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "ସଂଯୋଗ '%s' (%s) ସଫଳତାର ସହିତ ସଂରକà­à¬·à¬¿à¬¤ ହୋଇଛି।\n"
+
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "ତୃଟି: ସଂଯୋଗ ଯାଞà­à¬š ବିଫଳ ହୋଇଛି: %s\n"
+
+#: ../cli/src/connections.c:7015
+msgid "(unknown error)"
+msgstr "(ଅଜଣା ତà­à¬°à­à¬Ÿà¬¿)"
+
+#: ../cli/src/connections.c:7036
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "ତୃଟି: ସଂଯୋଗ ସଂରକà­à¬·à¬¿à¬¤ ନାହିà¬à¥¤ ପà­à¬°à¬¥à¬®à­‡ 'ସଂରକà­à¬·à¬£' ଲେଖନà­à¬¤à­à¥¤\n"
+
+#: ../cli/src/connections.c:7040
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "ତୃଟି: ସଂଯୋଗଟି ବୈଧ ନà­à¬¹à¬: %s\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "ତୃଟି: ସଂଯୋଗକୠସକà­à¬°à¬¿à­Ÿ କରିପାରିବେ ନାହିà¬: %s.\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "ତୃଟି: '%s' (%s) ସଂଯୋଗକୠସକà­à¬°à¬¿à­Ÿ କରିବାରେ ବିଫଳ: (%d) %s\n"
+
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£à¬•à­ ନିରୀକà­à¬·à¬£ କରà­à¬…ଛି (ଆଗକୠବଢ଼ିବା ପାଇଠଯେକୌଣସି କି କୠଦବାନà­à¬¤à­)\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "ତୃଟି: ସà­à¬¥à¬¿à¬¤à¬¿-ପଟି: %s\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "ତୃଟି: ନିଶà­à¬šà¬¿à¬¤à¬•à¬°à¬£à¬•à­ ସଂରକà­à¬·à¬£ କରନà­à¬¤à­: %s\n"
+
+#: ../cli/src/connections.c:7121
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "ତୃଟି: ଖରାପ ରଙà­à¬— ସଂଖà­à­Ÿà¬¾: '%s'; <0-8> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­\n"
+
+#: ../cli/src/connections.c:7133
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "ପà­à¬°à¬šà¬³à¬¿à¬¤ nmcli ସଂରଚନା:\n"
+
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "ଅବୈଧ ସଂରଚନା ବିକଳà­à¬ª '%s'; [%s] ଅନà­à¬®à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤\n"
+
+#: ../cli/src/connections.c:7364
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7390
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "ତୃଟି: 'id', uuid, କିମà­à¬¬à¬¾ 'path' ମଧà­à¬¯à¬°à­ କେବଳ ଗୋଟିଠଦିଆଯାଇଛି।"
+
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "ତୃଟି: ଅଜଣା ସଂଯୋଗ '%s'."
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"ଚେତାବନୀ: ସà­à¬¥à¬¿à¬¤à¬¬à¬¾à¬¨ ସଂଯୋଗ '%s' କୠସମà­à¬ªà¬¾à¬¦à¬¨ କରà­à¬…ଛି; 'type' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬°à¬•à­ à¬à¬¡à¬¼à¬¾à¬‡ "
+"ଦିଆଯାଇଛି\n"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"ଚେତାବନୀ: ସà­à¬¥à¬¿à¬¤à¬¬à¬¾à¬¨ ସଂଯୋଗ '%s' କୠସମà­à¬ªà¬¾à¬¦à¬¨ କରà­à¬…ଛି; 'con-name' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬°à¬•à­ "
+"à¬à¬¡à¬¼à¬¾à¬‡ ଦିଆଯାଇଛି\n"
+
+#: ../cli/src/connections.c:7434
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "ବୈଧ ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬°: %s\n"
+
+#: ../cli/src/connections.c:7436
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "ତୃଟି: ଅବୈଧ ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬°; %s\n"
+
+#: ../cli/src/connections.c:7472
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli ପାରସà­à¬ªà¬°à¬¿à¬• ସଂଯୋଗ ସମà­à¬ªà¬¾à¬¦à¬• |==="
+
+#: ../cli/src/connections.c:7475
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "ସà­à¬¥à¬¿à¬¤à¬¬à¬¾à¬¨ '%s' ସଂଯୋଗକୠସମà­à¬ªà¬¾à¬¦à¬¨ କରà­à¬…ଛି: '%s'"
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "ନୂତନ à¬à¬• '%s' ସଂଯୋଗକୠଯୋଗ କରà­à¬…ଛି"
+
+#: ../cli/src/connections.c:7479
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "ଉପଲବà­à¬§ ନିରà­à¬¦à­à¬¦à­‡à¬¶à¬—à­à¬¡à¬¼à¬¿à¬• ପାଇଠ'help' କିମà­à¬¬à¬¾ '?' ଲେଖନà­à¬¤à­à¥¤"
+
+#: ../cli/src/connections.c:7481
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "ବିସà­à¬¤à­ƒà¬¤ ଗà­à¬£à¬§à¬°à­à¬® ବରà­à¬£à­à¬£à¬¨à¬¾ ପାଇଠ'describe [<setting>.<prop>]' ଲେଖନà­à¬¤à­à¥¤"
+
+#: ../cli/src/connections.c:7520
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "ତୃଟି: ସଂଯୋଗ '%s' କୠପରିବରà­à¬¤à­à¬¤à¬¨ କରିବାରେ ବିଫଳ: (%d) %s"
+
+#: ../cli/src/connections.c:7526
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "ସଂଯୋଗ '%s' (%s) ସଫଳତାର ସହିତ ପରିବରà­à¬¤à­à¬¤à¬¿à¬¤ ହୋଇଛି।\n"
+
+#: ../cli/src/connections.c:7553
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "ତୃଟି: କୌଣସି ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଦିଆଯାଇ ନାହିà¬à¥¤"
+
+#: ../cli/src/connections.c:7577
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "ତୃଟି: ସଂଯୋଗ ID ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤à¥¤"
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "ତୃଟି: <setting>.<property> ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤à¥¤"
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "ତୃଟି: ଅବୈଧ <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7620
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "ତୃଟି: ଅବୈଧ କିମà­à¬¬à¬¾ ଅନà­à¬®à¬¤à¬¿ ନଥିବା ସଂରଚନା '%s': %s."
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "ତୃଟି: ଅବୈଧ ଗà­à¬£à¬§à¬°à­à¬® '%s': %s."
+
+#: ../cli/src/connections.c:7647
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "ତୃଟି: %s.%s କୠପରିବରà­à¬¤à­à¬¤à¬¨ କରିବାରେ ବିଫଳ: %s."
+
+#: ../cli/src/connections.c:7677
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ଅପସାରଣ ବିଫଳ ହୋଇଛି: %s"
+
+#: ../cli/src/connections.c:7747
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅଜଣା ସଂଯୋଗ: %s\n"
+
+#: ../cli/src/connections.c:7781
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅଜଣା ସଂଯୋଗ(ଗà­à¬¡à¬¼à¬¿à¬•à­) ଅପସାରଣ କରିପାରିବେ ନାହିà¬: %s."
+
+#: ../cli/src/connections.c:7852
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "ଫାଇଲ '%s' କୠଧାରଣ କରିପାରିଲା ନାହିà¬\n"
+
+#: ../cli/src/connections.c:7917
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"ତà­à¬°à­à¬Ÿà¬¿: 'ସଂଯୋଗ ଦୃଶà­à­Ÿ' ପାଇଠ'ବିନà­à­Ÿà¬¾à¬¸à¬¿à¬¤' କିମà­à¬¬à¬¾ 'ସକà­à¬°à¬¿à­Ÿ' ନିରà­à¬¦à­à¬¦à­‡à¬¶ "
+"ଆଶାକରାଯାଇଥାà¬à¥¤"
+
+#: ../cli/src/connections.c:7984
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ଟି à¬à¬• ବୈଧ 'ସଂଯୋଗ' ନିରà­à¬¦à­à¬¦à­‡à¬¶ ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/connections.c:8053 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ତନà­à¬¤à­à¬° ସଂରଚନା ପାଇଲା ନାହିà¬à¥¤"
+
+#: ../cli/src/connections.c:8063
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ଧାରଣ କରିପାରିବେ ନାହିà¬: ବିନà­à­Ÿà¬¾à¬¸ ସରà­à¬­à¬¿à¬¸à¬—à­à¬¡à¬¼à¬¿à¬• ଚାଲà­à¬¨à¬¾à¬¹à¬¿à¬à¥¤"
+
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNECTION"
+
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "VENDOR"
-#. 3
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUCT"
-#. 4
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
-#. 5
-#: ../cli/src/devices.c:113
-#| msgid "DRIVER"
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
-#. 6
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
-#. 7
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "REASON"
-#. 10
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#. 15
-#: ../cli/src/devices.c:123
-#| msgid "AUTOCONNECT"
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "ଉପଲବà­à¬§-ସଂଯୋଗ-ପଥ"
+
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "ଉପଲବà­à¬§-ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•"
-#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
-#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
-#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
-#. 0
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:166
-#| msgid "FREQ"
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "à¬à¬¡à­â€Œà¬¹à¬•à­â€Œ"
+
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#. 1
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
-#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:187
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:188
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIVE"
-#. 0
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "SLAVES"
-#. 0
-#: ../cli/src/devices.c:227
-#| msgid "UUID"
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:243
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-PROPERTIES"
+
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "ସଂଯୋଗଗà­à¬¡à¬¿à¬•"
+
+#: ../cli/src/devices.c:274
#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
-#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device status'.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli device status { help }\n"
+"\n"
+"ସମସà­à¬¤ ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬•à¬° ସà­à¬¥à¬¿à¬¤à¬¿ ଦରà­à¬¶à¬¾à¬¨à­à¬¤à­à¥¤\n"
+"ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ଭାବରେ, ନିମà­à¬¨à¬²à¬¿à¬–ିତ ସà­à¬¤à¬®à­à¬­à¬—à­à¬¡à¬¼à¬¿à¬•à­ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬›à¬¿:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - ଉପକରଣ ଉପରେ ସଂଯୋଗକୠସକà­à¬°à¬¿à­Ÿ କରାଯାଇଛି (ଯଦି କିଛି ଥାà¬)\n"
+"ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¿à¬¬à¬¾ ସà­à¬¤à¬®à­à¬­à¬—à­à¬¡à¬¼à¬¿à¬•à­ '--fields' ସରà­à¬¬à¬¸à¬¾à¬§à¬¾à¬°à¬£ ବିକଳà­à¬ªà¬•à­ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରି "
+"ପରିବରà­à¬¤à­à¬¤à¬¨ କରାଯାଇପାରିବ। 'ସà­à¬¥à¬¿à¬¤à¬¿' ହେଉଛି\n"
+"ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ନିରà­à¬¦à­à¬¦à­‡à¬¶, ଯାହା ଅରà­à¬¥ ହେଉଛି 'nmcli device' ଟି 'nmcli device "
+"status' କୠଡ଼ାକିଥାà¬à¥¤\n"
"\n"
-#: ../cli/src/devices.c:344
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"ଉପକରଣ(ଗà­à¬¡à¬¼à¬¿à¬•)ର ବିସà­à¬¤à­ƒà¬¤ ବିବରଣୀ ଦରà­à¬¶à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"ସମସà­à¬¤ ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬• ପାଇଠନିରà­à¬¦à­à¬¦à­‡à¬¶ ତାଲିକାଗà­à¬¡à¬¼à¬¿à¬•, କିମà­à¬¬à¬¾ ପà­à¬°à¬¦à¬¤à­à¬¤ ଉପକରଣ ପାଇà¬à¥¤\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be activated."
+"\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ଉପକରଣକୠସଂଯୋଗ କରନà­à¬¤à­à¥¤\n"
+"NetworkManager à¬à¬• ଉପଯà­à¬•à­à¬¤ ସଂଯୋଗ ଖୋଜିବାକୠଚେଷà­à¬Ÿà¬¾ କରà­à¬…ଛି ଯାହାକୠସକà­à¬°à¬¿à­Ÿ କରିହେବ।\n"
+"à¬à¬¹à¬¾ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ମଧà­à¬¯ ଗà­à¬°à¬¹à¬£ କରିଥାଠଯାହା ସà­à­±à­Ÿà¬‚-ସଂଯୋଗ ଭାବରେ ସେଟ ହୋଇନଥାà¬à¥¤\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"ଉପକରଣ ସହିତ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ କରନà­à¬¤à­à¥¤\n"
+"ନିରà­à¬¦à­à¬¦à­‡à¬¶à¬Ÿà¬¿ ଉପକରଣ ସହିତ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ କରିଥାଠà¬à¬¬à¬‚ ତାହାକୠବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€/"
+"ହସà­à¬¤à¬ªà­à¬¸à­à¬¤à¬• ବିନା ଅଧିକ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•\n"
+"ସହିତ ସà­à­±à­Ÿà¬‚-ସଂଯୋଗ ହେବାରୠବାରଣ କରିଥାà¬à¥¤\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Wi-Fi ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬• ଉପରେ କାମ କରନà­à¬¤à­à¥¤\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"ତାଲିକାରେ ଉପଲବà­à¬§ Wi-Fi ଅଭିଗମà­à­Ÿ ସà­à¬¥à¬¾à¬¨ ଅଛି। 'ifname' à¬à¬¬à¬‚ 'bssid' ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬•à­\n"
+"à¬à¬• ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ପାଇଠAPs କୠତାଲିକାଭà­à¬•à­à¬¤ କରିବାକୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° "
+"କରାଯାଇଥାà¬, ଅଥବା à¬à¬• ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ BSSID ସହିତ।\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"SSID କିମà­à¬¬à¬¾ BSSID ଦà­à­±à¬¾à¬°à¬¾ ଉଲà­à¬²à¬¿à¬–ିତ କୌଣସି Wi-Fi ସହିତ ସଂଯୋଗ ସà­à¬¥à¬¾à¬ªà¬¨ କରନà­à¬¤à­à¥¤ à¬à¬¹à¬¿ "
+"ନିରà­à¬¦à­à¬¦à­‡à¬¶à¬Ÿà¬¿\n"
+"ନୂତନ à¬à¬• ସଂଯୋଗ ପà­à¬°à¬¸à­à¬¤à­à¬¤ କରିଥାଠà¬à¬¬à¬‚ ତାପରେ à¬à¬¹à¬¾à¬•à­ à¬à¬• ଉପକରଣ ଉପରେ ସକà­à¬°à¬¿à­Ÿ କରିଥାà¬à¥¤ "
+"à¬à¬¹à¬¾ à¬à¬• ନିରà­à¬¦à­à¬¦à­‡à¬¶ ଧାରାର\n"
+"ସାଥୀ ଯାହାକି SSID କୠGUI କà­à¬²à¬¾à¬à¬£à­à¬Ÿà¬°à­‡ କà­à¬²à¬¿à¬• କରିଥାà¬à¥¤ ସେହି ନିରà­à¬¦à­à¬¦à­‡à¬¶à¬Ÿà¬¿ ସରà­à¬¬à¬¦à¬¾ "
+"ନୂତନ ସଂଯୋଗ ପà­à¬°à¬¸à­à¬¤à­à¬¤ କରିଥାà¬\n"
+"à¬à¬¬à¬‚ ତାହା ଫଳରେ à¬à¬¹à¬¾ ନୂତନ Wi-Fi ନେଟୱରà­à¬• ସଂଯୋଗ ପାଇଠଉପଯୋଗୀ ହୋଇଥାà¬à¥¤\n"
+"ଯଦି ସେହି ନେଟୱରà­à¬• ପାଇଠସଂଯୋଗ ପୂରà­à¬¬à¬°à­ ଅବସà­à¬¥à¬¿à¬¤ ଥାà¬, ତେବେ \n"
+"ସà­à¬¥à¬¿à¬¤à¬¬à¬¾à¬¨ ରୂପରେଖାକୠନିମà­à¬¨à¬²à¬¿à¬–ିତ ଭାବରେ ଦରà­à¬¶à¬¾à¬‡à¬¬à¬¾ ଉଚିତ: nmcli con up id <name>. "
+"ମନେରଖନà­à¬¤à­ ଯେ\n"
+"କେବଳ ଖୋଲା, WEP à¬à¬¬à¬‚ WPA-PSK ନେଟୱରà­à¬•à¬—à­à¬¡à¬¼à¬¿à¬• ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ସହାୟତା ପà­à¬°à¬¾à¬ªà­à¬¤à¥¤ à¬à¬¹à¬¾ "
+"ଅନà­à¬®à¬¾à¬¨ କରାଯାଇଥାଠଯେ\n"
+"IP ସଂରଚନାକୠDHCP ମାଧà­à¬¯à¬®à¬°à­‡ ପà­à¬°à¬¾à¬ªà­à¬¤ ହୋଇଥାà¬à¥¤\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"ସେହି NetworkManager କୠସଙà­à¬—à­‡ ସଙà­à¬—à­‡ ପà­à¬¨à¬ƒ ନିରୀକà­à¬·à¬£ କରିବା ପାଇଠଅନà­à¬°à­‹à¬§ କରନà­à¬¤à­à¥¤\n"
+"NetworkManager Wi-Fi ନେଟୱରà­à¬•à¬—à­à¬¡à¬¼à¬¿à¬•à­ ନିୟମିତ ଭାବରେ ସମୀକà­à¬·à¬¾ କରିଥାà¬, କିନà­à¬¤à­ କିଛି "
+"ପରିସà­à¬¥à¬¿à¬¤à¬¿à¬°à­‡ à¬à¬¹à¬¾ ହà­à¬à¬¤à¬ƒ\n"
+"ନିଜେ ସମୀକà­à¬·à¬¾ କରିବା ଉପଯୋଗୀ ହୋଇଥାà¬à¥¤ ମନେରଖନà­à¬¤à­ ଯେ à¬à¬¹à¬¿ ନିରà­à¬¦à­à¬¦à­‡à¬¶\n"
+"APs କୠଦରà­à¬¶à¬¾à¬‡à¬¨à¬¥à¬¾à¬, ତାହା ପାଇଠ'nmcli device wifi list' କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬• ଉପରେ କାମ କରନà­à¬¤à­à¥¤\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"WiMAX NSPs ର ତାଲିକା ଉପଲବà­à¬§à¥¤ 'ifname' à¬à¬¬à¬‚ 'nsp' ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬•à­ ନେଟୱରà­à¬•à¬—à­à¬¡à¬¼à¬¿à¬•à­ "
+"à¬à¬• ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ପାଇà¬\n"
+"ତାଲିକାଭà­à¬•à­à¬¤ କରିବାକୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରାଯାଇପାରିବ, ଅଥବା à¬à¬• ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ NSP ସହିତ।\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(କିଛି ନାହିà¬)"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:401
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:410
-msgid "Encrypted: "
-msgstr "ସଂଗà­à¬ªà­à¬¤: "
-
-#: ../cli/src/devices.c:415
-msgid "WEP "
-msgstr "WEP "
-
-#: ../cli/src/devices.c:417
-msgid "WPA "
-msgstr "WPA "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:419
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:422
-msgid "Enterprise "
-msgstr "ବାଣିଜà­à­Ÿà¬¿à¬•"
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:431
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "à¬à¬¡-ହୋକ"
-#: ../cli/src/devices.c:432
-msgid "Infrastructure"
-msgstr "ଅବସଂରଚନା"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:468
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "ମୂଳ ସà­à¬¥à¬¾à¬¨"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "ସାଥୀ"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "ରୋମିଙà­à¬—"
-#: ../cli/src/devices.c:546
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev list': %s"
-
-#: ../cli/src/devices.c:548
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev list': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
-
-#: ../cli/src/devices.c:557
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "ଉପକରଣ ବିବରଣୀ"
-#: ../cli/src/devices.c:602 ../cli/src/devices.c:605 ../cli/src/devices.c:1081
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଉପକରଣ ଦୃଶà­à­Ÿ': %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1474
msgid "(unknown)"
msgstr "(ଅଜଣା)"
-#: ../cli/src/devices.c:614
-#| msgid "connected"
-msgid "not connected"
-msgstr "ସଂଯୋଗ ହୋଇ ନାହିà¬"
-
-#: ../cli/src/devices.c:641
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "ଚାଲà­"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "ବନà­à¬¦"
-#: ../cli/src/devices.c:923
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev status': %s"
-
-#: ../cli/src/devices.c:925
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev status': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
+msgid "Error: 'device status': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଉପକରଣ ସà­à¬¥à¬¿à¬¤à¬¿': %s"
-#: ../cli/src/devices.c:948
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "ଉପକରଣର ସà­à¬¥à¬¿à¬¤à¬¿"
-#: ../cli/src/devices.c:979
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤à¥¤"
+msgid "Error: invalid extra argument '%s'."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ ଅତିରିକà­à¬¤ ପà­à¬°à¬¾à¬šà¬³ '%s'."
-#: ../cli/src/devices.c:1020 ../cli/src/devices.c:1185
-#: ../cli/src/devices.c:1326 ../cli/src/devices.c:1973
+#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1422
+#: ../cli/src/devices.c:1557 ../cli/src/devices.c:1696
+#: ../cli/src/devices.c:2436
#, c-format
msgid "Error: Device '%s' not found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:1043
+#: ../cli/src/devices.c:1319
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "ସଫଳ: ଉପକରଣ '%s' କୠସଫଳତାର ସହିତ ସକà­à¬°à¬¿à­Ÿ କରାଯାଇଛି।"
+
+#: ../cli/src/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "ତୃଟି: ଉପକରଣ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "ଉପକରଣ '%s' କୠସଂଯୋଗ କରାଯାଇଛି।\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬ : "
+
+#: ../cli/src/devices.c:1381 ../cli/src/devices.c:1390
+#: ../cli/src/devices.c:1516 ../cli/src/devices.c:1525
+#, c-format
+msgid "Error: No interface specified."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ଉଲà­à¬²à­‡à¬– କରାଯାଇ ନାହିà¬à¥¤"
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿:ଅତିରିକà­à¬¤ ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ପାଇଠଅନà­à¬®à¬¤à¬¿ ନାହିà¬: '%s'."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "ସଫଳ: ଉପକରଣ '%s' ସଫଳତାର ସହିତ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି।"
-#: ../cli/src/devices.c:1078
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' (%s) ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ବିଫଳ ହୋଇଛି: %s"
-#: ../cli/src/devices.c:1091
+#: ../cli/src/devices.c:1485
#, c-format
-#| msgid "Success: Device '%s' successfully disconnected."
msgid "Device '%s' has been disconnected.\n"
msgstr "ଉପକରଣ '%s' ସଫଳତାର ସହିତ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି।\n"
-#: ../cli/src/devices.c:1154
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: iface କୠଉଲà­à¬²à­‡à¬– କରାଯିବା ଉଚିତ।"
-
-#: ../cli/src/devices.c:1284
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev wifi': %s"
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi କà­à¬°à¬®à¬¬à­€à¬•à­à¬·à¬£ ତାଲିକା"
-#: ../cli/src/devices.c:1286
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev wifi': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
-
-#: ../cli/src/devices.c:1309
-msgid "WiFi scan list"
-msgstr "WiFi କà­à¬°à¬®à¬¬à­€à¬•à­à¬·à¬£ ତାଲିକା"
+msgid "Error: 'device wifi': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଉପକରଣ wifi': %s"
-#: ../cli/src/devices.c:1346 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with bssid '%s' not found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿:bssid '%s' ସହିତ ଅଭିଗମà­à­Ÿà¬¤à¬¾ ବିନà­à¬¦à­ ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:1363
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' ଟି ଗୋଟିଠWiFi ଉପକରଣ ନà­à¬¹à¬à¥¤"
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' ଟି ଗୋଟିଠWi-Fi ଉପକରଣ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:1431 ../cli/src/devices.c:1477
+#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' ସହିତ ସଂଯୋଗ ନିରà­à¬®à¬¾à¬£ ହୋଇଛି à¬à¬¬à¬‚ ଉପକରଣ '%s' ରେ ସକà­à¬°à¬¿à­Ÿ ହୋଇଛି\n"
-#: ../cli/src/devices.c:1436
+#: ../cli/src/devices.c:1829
#, c-format
-#| msgid "Error: Connection activation failed: %s."
msgid "Error: Connection activation failed: (%d) %s."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି: (%d) %s."
-#: ../cli/src/devices.c:1461
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿:ନୂତନ ସଂଯୋଗକୠଯୋଗ କରିବା/ସକà­à¬°à¬¿à­Ÿ କରିବାରେ ବିଫଳ: (%d) %s"
-#: ../cli/src/devices.c:1469
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "ତà­à¬°à­à¬Ÿà¬¿:ନୂତନ ସଂଯୋଗକୠଯୋଗ କରିବା/ସକà­à¬°à¬¿à­Ÿ କରିବାରେ ବିଫଳ: ଅଜଣା ତà­à¬°à­à¬Ÿà¬¿"
-#: ../cli/src/devices.c:1613
-#, fuzzy, c-format
-#| msgid "Error: %s argument is missing."
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID କିମà­à¬¬à¬¾ BSSID: "
+
+#: ../cli/src/devices.c:2018
+#, c-format
msgid "Error: SSID or BSSID are missing."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s SSID କିମà­à¬¬à¬¾ BSSID ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି।"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: SSID କିମà­à¬¬à¬¾ BSSID ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି।"
-#: ../cli/src/devices.c:1636
+#: ../cli/src/devices.c:2042
#, c-format
-#| msgid "Error: timeout value '%s' is not valid."
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: bssid ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ମୂଲà­à­Ÿ '%s' ଟି à¬à¬• ବୈଧ BSSID ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:1660
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1429,88 +3365,77 @@ msgstr ""
"ତà­à¬°à­à¬Ÿà¬¿: wep-key-type ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ମୂଲà­à­Ÿ '%s' ଟି ଅବୈଧ ଅଟେ, 'key' କିମà­à¬¬à¬¾ "
"'phrase' କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
-#: ../cli/src/devices.c:1700
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s: %s."
+
+#: ../cli/src/devices.c:2101
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
-"ତà­à¬°à­à¬Ÿà¬¿: (%s) ସହିତ ସଂଯୋଗ କରିବାକୠଥିବା BSSID bssid ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଠାରୠଭିନà­à¬¨ ଅଟେ (%"
-"s)."
+"ତà­à¬°à­à¬Ÿà¬¿: (%s) ସହିତ ସଂଯୋଗ କରିବାକୠଥିବା BSSID bssid ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଠାରୠଭିନà­à¬¨ ଅଟେ "
+"(%s)."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ପà­à¬°à¬¾à¬šà¬³ '%s' ଟି SSID କିମà­à¬¬à¬¾ BSSID ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:1735
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
-#| msgid "Error: Device '%s' is not a WiFi device."
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' ଟି ଗୋଟିଠWi-Fi ଉପକରଣ ନà­à¬¹à¬à¥¤"
-
-#: ../cli/src/devices.c:1737
-#, c-format
-#| msgid "Error: No suitable device found."
msgid "Error: No Wi-Fi device found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି Wi-Fi ଉପକରଣ ମିଳିଲାନାହିà¬à¥¤"
-#: ../cli/src/devices.c:1755
+#: ../cli/src/devices.c:2151
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: No network with SSID '%s' found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: SSID '%s' ସହିତ କୌଣସି ନେଟୱରà­à¬• ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:1757
+#: ../cli/src/devices.c:2153
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: No access point with BSSID '%s' found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: BSSID '%s' ସହିତ ଅଭିଗମà­à­Ÿà¬¤à¬¾ ବିନà­à¬¦à­ ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:1855
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev wifi' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-
-#: ../cli/src/devices.c:1931
-#, c-format
-#| msgid "Error: 'dev wifi': %s"
-msgid "Error: 'dev wimax': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'devwimax': %s"
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•à­‡à¬¤: "
-#: ../cli/src/devices.c:1933
+#: ../cli/src/devices.c:2321
#, c-format
-#| msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev wimax': %s; ଅନà­à¬®à­‹à¬¦à¬¿à¬¤ ସà­à¬¥à¬¾à¬¨: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଉପକରଣ wifi' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:1956
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP ତାଲିକା"
-#: ../cli/src/devices.c:1993
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଉପକରଣ wimax': %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
-#| msgid "Error: Device '%s' not found."
msgid "Error: NSP with name '%s' not found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ନାମ ସହିତ NSP ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:2004
+#: ../cli/src/devices.c:2472
#, c-format
-#| msgid "Error: Device '%s' is not a WiFi device."
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' ଟି ଗୋଟିଠWiMAX ଉପକରଣ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2510
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with nsp '%s' not found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: nsp '%s' ସହିତ ଅଭିଗମà­à­Ÿà¬¤à¬¾ ବିନà­à¬¦à­ ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2542
#, c-format
-#| msgid "Error: 'dev wifi' command '%s' is not valid."
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'devwimax' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ଉପକରଣ wimax' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:2115
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
@@ -1519,291 +3444,503 @@ msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈ
msgid "RUNNING"
msgstr "RUNNING"
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "ସଂସà­à¬•à¬°à¬£"
-#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "STARTUP"
-#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+msgid "CONNECTIVITY"
+msgstr "ସଂଯୋଜକତା"
-#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "ନେଟୱରà­à¬•à¬¿à¬™à­à¬—"
-#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
-#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
-#. 7
#: ../cli/src/network-manager.c:45
-#| msgid "WIFI-HARDWARE"
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
-#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "ଅନà­à¬®à¬¤à¬¿"
-#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "ମୂଲà­à¬¯"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "ସà­à¬¤à¬°"
+
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "ଡମେନଗà­à¬¡à¬¼à¬¿à¬•"
+
+#: ../cli/src/network-manager.c:95
#, c-format
-#| msgid ""
-#| "Usage: nmcli nm { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
-#| "\n"
-#| " status\n"
-#| " sleep\n"
-#| " wakeup\n"
-#| " wifi [on|off]\n"
-#| " wwan [on|off]\n"
-#| "\n"
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli nm { COMMAND | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli general status { help }\n"
+"\n"
+"NetworkManager ର ସମà­à¬ªà­‚ରà­à¬£à­à¬£ ସà­à¬¥à¬¿à¬¤à¬¿ ଦରà­à¬¶à¬¾à¬¨à­à¬¤à­à¥¤\n"
+"'status' ଟି ହେଉଛି ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ କାରà­à¬¯à­à­Ÿ, ଯାହା ଅରà­à¬¥ ହେଉଛି 'nmcli gen' "
+"calls 'nmcli gen status'\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system hostname."
+"\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿ ନାମ ପà­à¬°à¬¾à¬ªà­à¬¤ କରନà­à¬¤à­ ଅଥବା ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­à¥¤\n"
+"ବିନା ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬°à¬°à­‡, à¬à¬¹à¬¾ ବରà­à¬¤à­à¬¤à¬®à¬¾à¬¨ ବିନà­à­Ÿà¬¾à¬¸à¬¿à¬¤ ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬•à­ ମà­à¬¦à­à¬°à¬£ କରିଥାà¬à¥¤ "
+"ଯେତେବେଳେ\n"
+"ଆପଣ à¬à¬• ହୋଷà­à¬Ÿà¬¨à¬¾à¬® ପଠାନà­à¬¤à¬¿, NetworkManager ତାହାକୠନୂତନ ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬® "
+"ଭାବରେ ସେଟ କରିଥାà¬à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli general permissions { help }\n"
+"\n"
+"ବୈଧିକୃତ ପà­à¬°à­Ÿà­‹à¬—ଗà­à¬¡à¬¼à¬¿à¬• ପାଇଠକଲରର ଅନà­à¬®à¬¤à¬¿ ଦରà­à¬¶à¬¾à¬¨à­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"NetworkManager ଲଗଇନ ସà­à¬¤à¬° à¬à¬¬à¬‚ ଡମେନଗà­à¬¡à¬¼à¬¿à¬•à­ ପà­à¬°à¬¾à¬ªà­à¬¤ କରନà­à¬¤à­ କିମà­à¬¬à¬¾ ପରିବରà­à¬¤à­à¬¤à¬¨ "
+"କରନà­à¬¤à­à¥¤\n"
+"ବିନା ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬°à¬°à­‡ ପà­à¬°à¬šà¬³à¬¿à¬¤ ଲଗଇନ ସà­à¬¤à¬° à¬à¬¬à¬‚ ଡମେନଗà­à¬¡à¬¼à¬¿à¬•à­ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤ ଲଗଇନ "
+"ସà­à¬¥à¬¿à¬¤à¬¿à¬•à­à¬ªà¬°à¬¿à¬¬à¬°à­à¬¤à­à¬¤à¬¨\n"
+"କରିବା ପାଇà¬, ସà­à¬¤à¬° à¬à¬¬à¬‚/କିମà­à¬¬à¬¾ ଡମେନ ପà­à¬°à¬¦à¬¾à¬¨ କରନà­à¬¤à­à¥¤ ସମà­à¬­à¬¾à¬¬à­à­Ÿ ଲଗଇନ ଡମେନଗà­à¬¡à¬¼à¬¿à¬•à¬° "
+"ତାଲିକା ପାଇଠଦୟାକରି manପୃଷà­à¬ à¬¾à¬•à­\n"
+"ଅନà­à¬¸à¬°à¬£ କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid "Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli networking on { help }\n"
+"\n"
+"ନେଟୱରà­à¬•à¬¿à¬™à­à¬—କୠଅନ କରନà­à¬¤à­à¥¤\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid "Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli networking off { help }\n"
+"\n"
+"ନେଟୱରà­à¬•à¬¿à¬™à­à¬—କୠଅଫ କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the connectivity."
+"\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"ନେଟୱରà­à¬• ସଂଯୋଜକତା ସà­à¬¥à¬¿à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤ କରନà­à¬¤à­à¥¤\n"
+"ବୈକଳà­à¬ªà¬¿à¬• 'check' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° NetworkManager କୠସଂଯୋଜକତାକୠପà­à¬¨à¬ƒ ଯାଞà­à¬š "
+"କରାଇଥାà¬à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"ସମସà­à¬¤ ରେଡ଼ିଓ ସà­à­±à­€à¬šà¬—à­à¬¡à¬¼à¬¿à¬•à¬° ସà­à¬¥à¬¿à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤ କରନà­à¬¤à­, ଅଥବା ସେଗà­à¬¡à¬¼à¬¿à¬•à­ ଅନ/ଅଫ "
+"କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Wi-Fi ରେଡ଼ିଓ ସà­à­±à­€à¬šà¬° ସà­à¬¥à¬¿à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤ କରନà­à¬¤à­, ଅଥବା ତାହାକୠଅନ/ଅଫ କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ରେଡ଼ିଓ ସà­à­±à­€à¬šà¬° ସà­à¬¥à¬¿à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤ କରନà­à¬¤à­, ଅଥବା ତାହାକୠଅନ/ଅଫ "
+"କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"WiMAX ରେଡ଼ିଓ ସà­à­±à­€à¬šà¬° ସà­à¬¥à¬¿à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤ କରନà­à¬¤à­, ଅଥବା ତାହାକୠଅନ/ଅଫ କରନà­à¬¤à­à¥¤\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "ଶà­à¬ªà­à¬¤"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "ସଂଯà­à¬•à­à¬¤ (କେବଳ ସà­à¬¥à¬¾à¬¨à­€à­Ÿ)"
-#: ../cli/src/network-manager.c:114
-#| msgid "connected"
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "ସଂଯà­à¬•à­à¬¤ ଅଛି (କେବଳ ସାଇଟ)"
-#: ../cli/src/network-manager.c:118
-#| msgid "connecting"
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ କରà­à¬…ଛି"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "ପୋରà­à¬Ÿà¬¾à¬²"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "ସୀମିତ"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "ସଂପୂରà­à¬£à­à¬£"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'nm status': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "ତୃଟି: କେବଳ à¬à¬¹à¬¿ ସà­à¬¥à¬¾à¬¨à¬—à­à¬¡à¬¼à¬¿à¬• ଅନà­à¬®à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "ସକà­à¬°à¬¿à­Ÿ"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "ନିଷà­à¬•à­à¬°à¬¿à­Ÿ"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "NetworkManager ସà­à¬¥à¬¿à¬¤à¬¿"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "ଚାଲà­à¬…ଛି"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "ଚାଲà­à¬¨à¬¾à¬¹à¬¿à¬"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "ଆରମà­à¬­ କରà­à¬…ଛି"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "ଆରମà­à¬­ ହୋଇଛି"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
-#, c-format
-#| msgid "Error: 'nm status': %s"
-msgid "Error: 'nm permissions': %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'nm ଅନà­à¬®à¬¤à¬¿à¬—à­à¬¡à¬¼à¬¿à¬•': %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-#| msgid "Error: 'nm status': %s; allowed fields: %s"
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'nm ଅନà­à¬®à¬¤à¬¿à¬—à­à¬¡à¬¼à¬¿à¬•': %s; ଅନà­à¬®à­‹à¬¦à¬¿à¬¤ ସà­à¬¥à¬¾à¬¨: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ସାଧାରଣ ଅନà­à¬®à¬¤à¬¿à¬—à­à¬¡à¬¼à¬¿à¬•': %s"
-#: ../cli/src/network-manager.c:324
-#| msgid "NetworkManager status"
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "NetworkManager ଅନà­à¬®à¬¤à¬¿à¬—à­à¬¡à¬¼à¬¿à¬•"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:530
#, c-format
-#| msgid "Error: could not connect to D-Bus."
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ତନà­à¬¤à­à¬° ବସ ସହିତ ସଂଯà­à¬•à­à¬¤ ହୋଇପାରିଲା ନାହିà¬: %s"
+msgid "Error: 'general logging': %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ସାଧାରଣ ଲଗଇନ': %s"
+
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager ଲଗଇନ"
-#: ../cli/src/network-manager.c:361
+#: ../cli/src/network-manager.c:565
#, c-format
-#| msgid "Error: could not connect to D-Bus."
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: D-Bus ବସà­à¬¤à­ ପà­à¬°à¬•à­à¬¸à¬¿ ନିରà­à¬®à¬¿à¬¤ ହୋଇପାରିଲା ନାହିà¬à¥¤"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "ତୃଟି: ହୋଷà­à¬Ÿà¬¨à¬¾à¬® ସେଟ କରିବାରେ ବିଫଳ: (%d) %s"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:682
#, c-format
-#| msgid "Error: 'con list': %s"
-msgid "Error in sleep: %s"
-msgstr "ସà­à¬ªà­à¬¤ ଅବସà­à¬¥à¬¾à¬°à­‡ ତà­à¬°à­à¬Ÿà¬¿: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "ତୃଟି: ଲଗଇନ ସେଟ କରିବା ପାଇଠଅନà­à¬®à¬¤à¬¿ ନାହିà¬; %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"ତà­à¬°à­à¬Ÿà¬¿: '--fields' ମୂଲà­à­Ÿ '%s' à¬à¬ à¬¾à¬°à­‡ ବୈଧ ନà­à¬¹à¬; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
+msgid "Error: %s"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s"
-#: ../cli/src/network-manager.c:424
-#| msgid "WiFi enabled"
-msgid "Networking enabled"
-msgstr "ନେଟୱରà­à¬•à¬¿à¬™à­à¬— ସକà­à¬°à¬¿à­Ÿ ଅଛି"
+#: ../cli/src/network-manager.c:692
+#, c-format
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ସାଧାରଣ' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:710
#, c-format
-#| msgid "Error: invalid 'wwan' parameter: '%s'."
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ 'ସକà­à¬°à¬¿à­Ÿ' ପà­à¬°à¬¾à¬šà¬³: '%s'; 'true' କିମà­à¬¬à¬¾ 'false' କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
+"ତୃଟି: '--fields' ମୂଲà­à­Ÿ '%s' ଟି à¬à¬ à¬¾à¬°à­‡ ବୈଧ ନà­à¬¹à¬ (ଅନà­à¬®à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤ ସà­à¬¥à¬¾à¬¨: %s)"
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:735
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: NetworkManager ଦà­à­±à¬¾à¬°à¬¾ ସà­à¬ªà­à¬¤ ସà­à¬¥à¬¿à¬¤à¬¿ ରପà­à¬¤à¬¾à¬¨à¬¿ କରିପାରିଲା ନାହିà¬à¥¤"
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ '%s' ପà­à¬°à¬¾à¬šà¬³: '%s'(ଅନ/ଅଫ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­)।"
-#: ../cli/src/network-manager.c:458
-#, c-format
-#| msgid "Error: invalid 'wifi' parameter: '%s'."
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ 'ସà­à¬ªà­à¬¤' ପà­à¬°à¬¾à¬šà¬³: '%s'; 'true' କିମà­à¬¬à¬¾ 'false' କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "ସଂଯୋଜକତା"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi ସକà­à¬°à¬¿à­Ÿ ଅଛି"
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "ନେଟୱରà­à¬•à¬¿à¬™à­à¬—"
-#: ../cli/src/network-manager.c:495
+#: ../cli/src/network-manager.c:783
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ 'wifi' ପà­à¬°à¬¾à¬šà¬³: '%s'."
-
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN ସକà­à¬°à¬¿à­Ÿ ଅଛି"
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "ତୃଟି: 'networking connectivity' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ 'wwan' ପà­à¬°à¬¾à¬šà¬³: '%s'."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ନେଟୱରà­à¬•à¬¿à¬™à­à¬—' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/network-manager.c:556
-#| msgid "WiFi enabled"
-msgid "WiMAX enabled"
-msgstr "WiMAX ସକà­à¬°à¬¿à­Ÿ ଅଛି"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "ରେଡିଓ ସà­à­±à­€à¬šà¬—à­à¬¡à¬¼à¬¿à¬•"
-#: ../cli/src/network-manager.c:572
-#, c-format
-#| msgid "Error: invalid 'wifi' parameter: '%s'."
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅବୈଧ 'wimax' ପà­à¬°à¬¾à¬šà¬³: '%s'."
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi ରେଡିଓ ସà­à­±à­€à¬š"
+
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN ରେଡିଓ ସà­à­±à­€à¬š"
+
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX ରେଡିଓ ସà­à­±à­€à¬š"
-#: ../cli/src/network-manager.c:588
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'nm' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'ରେଡିଓ' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1816,11 +3953,16 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
@@ -1836,247 +3978,780 @@ msgstr ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ବସà­à¬¤à­ '%s' ଟି ଅଜଣା ଅଟେ, 'nmcli help' କୠଚେଷà­à¬Ÿà¬¾ କରନà­à¬¤à­à¥¤"
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ବିକଳà­à¬ª '--terse' କୠଦà­à­±à¬¿à¬¤à­€à­Ÿ ଥର ପାଇଠଉଲà­à¬²à­‡à¬– କରାଯାଇଛି।"
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ବିକଳà­à¬ª '--terse' à¬à¬¬à¬‚ '--pretty' ପରସà­à¬ªà¬° ଠାରୠପୃଥକ।"
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ବିକଳà­à¬ª '--pretty' କୠଦà­à­±à¬¿à¬¤à­€à­Ÿ ଥର ପାଇଠଉଲà­à¬²à­‡à¬– କରାଯାଇଛି।"
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ବିକଳà­à¬ª '--pretty' à¬à¬¬à¬‚ '--terse' ପରସà­à¬ªà¬° ଠାରୠପୃଥକ।"
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ବିକଳà­à¬ª ପାଇଠସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି।"
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ଟି '%s' ପାଇଠଗୋଟିଠବୈଧ ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ନà­à¬¹à¬à¥¤"
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ବିକଳà­à¬ª ପାଇଠସà­à¬¥à¬¾à¬¨ ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤à¥¤"
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ଟି '%s' ବିକଳà­à¬ª ପାଇଠଗୋଟିଠବୈଧ ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ନà­à¬¹à¬à¥¤"
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli ସାଧନ, ସଂସà­à¬•à¬°à¬£ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ବିକଳà­à¬ª '%s' ଟି ଅଜଣା, 'nmcli -help' କୠଚେଷà­à¬Ÿà¬¾à¬•à¬°à¬¨à­à¬¤à­à¥¤"
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid "\n"
+"Error: nmcli terminated by signal %d."
+msgstr "\n"
+"ତୃଟି: nmcli ସଂକେତ %d ଦà­à­±à¬¾à¬°à¬¾ ସମାପà­à¬¤ ହୋଇଛି।"
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "ସଂକେତ ମà­à¬–ା ସେଟ କରିବାରେ ବିଫଳ: %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "ସଂକେତ %d କୠଧରିଅଛି, ବନà­à¬¦ କରà­à¬…ଛି..."
+msgid "Failed to create signal handling thread: %d"
+msgstr "ସଂକେତ ନିୟନà­à¬¤à­à¬°à¬£ ଥà­à¬°à­‡à¬¡ ନିରà­à¬®à¬¾à¬£ କରିବାରେ ବିଫଳ: %d"
-#: ../cli/src/nmcli.c:272
-#| msgid "Error: Could not get user settings."
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: NMClient ବସà­à¬¤à­ ନିରà­à¬®à¬¾à¬£ କରିପାରିଲା ନାହିà¬à¥¤"
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "ସଫଳତା"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:529
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-ବିଟ ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ ବାକà­à­Ÿà¬¾à¬‚ଶ)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (ଅଜଣା)"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (ଅଜଣା)"
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "ଯେକୌଣସି, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:588
-#| msgid "WCDMA 3GPP UMTS 900 MHz, "
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:590
-#| msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:793
#, c-format
-#| msgid "disabled"
msgid "%d (disabled)"
msgstr "%d (ନିଷà­à¬•à­à¬°à¬¿à­Ÿ)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (ସକà­à¬°à¬¿à­Ÿ, ସରà­à¬¬à¬¸à¬¾à¬§à¬¾à¬°à¬£ IP କୠପସନà­à¬¦ କରନà­à¬¤à­)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (ସକà­à¬°à¬¿à­Ÿ, ଅସà­à¬¥à¬¾à­Ÿà­€ IP କୠପସନà­à¬¦ କରନà­à¬¤à­)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (କିଛି ନାହିà¬)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "à¬à¬œà­‡à¬£à­à¬Ÿ-ପà­à¬°à¬¾à¬ªà­à¬¤, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "ସଂରକà­à¬·à¬¿à¬¤ ହୋଇନାହିà¬,"
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "ଆବଶà­à­Ÿà¬• ନାହିà¬, "
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (ନିଷà­à¬•à­à¬°à¬¿à­Ÿ)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "ସକà­à¬°à¬¿à­Ÿ, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "ବିଜà­à¬žà¬¾à¬ªà¬¨, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "ଇଚà­à¬›à¬¾, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (ଅବିନà­à­Ÿà¬¾à¬¸à¬¿à¬¤)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "ସà­à­±à­Ÿà¬‚ଚାଳିତ"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "ପୂରà­à¬¬ ନିରà­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "ଆପଣ '%s' କୠ'%s' ରେ ସେଟ କରିବା ପାଇଠଚାହà­à¬à¬›à¬¨à­à¬¤à¬¿ କି? [yes]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "ଆପଣ '%s' କୠସଫା କରିବା ପାଇଠଚାହà­à¬à¬›à¬¨à­à¬¤à¬¿ କି? [yes]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' ଟି ବୈଧ ନà­à¬¹à¬; <%d-%d> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' ଟି ବୈଧ ନà­à¬¹à¬; <%d-%d> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬; <option>=<value> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "ଅନà­à¬•à­à¬°à¬®à¬£à¬¿à¬•à¬¾ '%s' ଟି ବୈଧ ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "ବାହାର କରିବା ପାଇଠକୌଣସି ବସà­à¬¤à­ ନାହିà¬"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "ଅନà­à¬•à­à¬°à¬®à¬£à¬¿à¬•à¬¾ '%d' ଟି <0-%d> ପରିସର ମଧà­à¬¯à¬°à­‡ ନାହିà¬"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "ଅବୈଧ ବିକଳà­à¬ª '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ବିକଳà­à¬ª"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ କà­à¬°à¬® ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ (ଅଥବା ସୀମା ବାହାରେ ଅଛି)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ ଇଥରନେଟ MAC ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "' %s' ଟି ଗୋଟିଠବୈଧ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' ଟି à¬à¬• ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ ଶୋହଳମିକ ବରà­à¬£à­à¬£ ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ MAC ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ UUID ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€ ଅନà­à¬®à¬¤à¬¿à¬—à­à¬¡à¬¼à¬¿à¬•à¬° à¬à¬• ତାଲିକା ଭରଣ କରନà­à¬¤à­à¥¤ à¬à¬¹à¬¾ ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€ ନାମଗà­à¬¡à¬¼à¬¿à¬•à¬° "
+"à¬à¬• ତାଲିକା:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"ବସà­à¬¤à­à¬—à­à¬¡à¬¼à¬¿à¬•à­ କୋମା କିମà­à¬¬à¬¾ ଖାଲିସà­à¬¥à¬¾à¬¨ ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ କରାଯାଇପାରିବ।\n"
+"\n"
+"ଉଦାହରଣ: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr ""
+"'%s' ଟି ଗୋଟିଠବୈଧ ମୂଖà­à­Ÿ ନà­à¬¹à¬; ifname କିମà­à¬¬à¬¾ ସଂଯୋଗ UUID କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ ଦିଆଯାଇ ନାହିà¬"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କିର ପଥ à¬à¬¬à¬‚ କି ର ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ ଦିଅନà­à¬¤à­ (ଯଦି à¬à¬ªà¬°à­à¬¯à­à­Ÿà¬¨à­à¬¤ ସେଟ ହୋଇ "
+"ନାହିà¬):\n"
+" <file path> [<password>]\n"
+"ଉଦାହରଣ: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"ବାଇଟଗà­à¬¡à¬¼à¬¿à¬• ଶୋହଳମିକ ମୂଲà­à­Ÿ ଭାବରେ ଭରଣ କରନà­à¬¤à­à¥¤\n"
+"ଦà­à¬‡à¬Ÿà¬¿ ଶୈଳୀକୠଗà­à¬°à¬¹à¬£ ଗà­à¬°à¬¹à¬£ କରାଯାଇଥାà¬:\n"
+"(a) ଶୋହଳମିକ ଅଙà­à¬•à¬° à¬à¬• ବାକà­à­Ÿà¬–ଣà­à¬¡, ଯେଉà¬à¬ à¬¿ ପà­à¬°à¬¤à­à­Ÿà­‡à¬• ଦà­à¬‡à¬Ÿà¬¿ ଅଙà­à¬• ଗୋଟିଠବାଇଟକୠ"
+"ଦରà­à¬¶à¬¾à¬‡à¬¥à¬¾à¬\n"
+"(b) ଶୋହଳମିକ ଅଙà­à¬• ଭାବରେ ଲିଖିତ ଖାଲି ସà­à¬¥à¬¾à¬¨ ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ ବାଇଟ ତାଲିକା (ବୈକଳà­à¬ªà¬¿à¬• "
+"0x/0X ଉପସରà­à¬—, à¬à¬¬à¬‚ ବୈକଳà­à¬ªà¬¿à¬• ଅଗà­à¬°à¬—ାମୀ 0)।\n"
+"\n"
+"ଉଦାହରଣ: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"à¬à¬¹à¬¿à¬ªà¬°à¬¿ ଭାବରେ ସଜà­à¬œà¬¿à¬¤ ବନà­à¬§à¬¨ ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬•à¬° à¬à¬• ତାଲିକା ଭରଣ କରନà­à¬¤à­:\n"
+" option = <value>, option = <value>,... \n"
+"ବୈଧ ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬• ହେଉଛି: %s\n"
+"'mode' କୠà¬à¬• ନାମ କିମà­à¬¬à¬¾ ସଂଖà­à­Ÿà¬¾ ଭାବରେ ଦିଆଯାଇପାରିବ:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"ଉଦାହରଣ: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ InfiniBand MAC ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ IBoIP P_Key ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS ସରà­à¬­à¬°à¬° IPv4 ଠିକଣାଗà­à¬¡à¬¼à¬¿à¬•à¬° à¬à¬• ତାଲିକା ଭରଣ କରନà­à¬¤à­à¥¤\n"
+"\n"
+"ଉଦାହରଣ: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬ (ip[/prefix] [gateway] ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­)"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"à¬à¬¹à¬¿ ପରି ଭାବରେ ସଜà­à¬œà¬¿à¬•à­ƒà¬¤ IPv4 ଠିକଣାଗà­à¬¡à¬¼à¬¿à¬•à¬° à¬à¬• ତାଲିକା ଭରଣ କରନà­à¬¤à­:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଉପସରà­à¬—କୠ32 ର ଉପସରà­à¬— ଭାବରେ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬ ( ip/[prefix] next-hop [metric] କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­)"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"IPv4 ପଥଗà­à¬¡à¬¼à¬¿à¬•à¬° à¬à¬• ତାଲିକାକୠନିମà­à¬¨à¬²à¬¿à¬–ିତ ଭାବରେ ଭରଣ କରନà­à¬¤à­:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଉପସରà­à¬—କୠ32 ର ଉପସରà­à¬— ଭାବରେ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ମେଟà­à¬°à¬¿à¬•à¬•à­ 0 ର ମେଟà­à¬°à¬¿à¬• ଭାବରେ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS ସରà­à¬­à¬°à¬° IPv6 ଠିକଣାଗà­à¬¡à¬¼à¬¿à¬•à¬° ତାଲିକା ଭରଣ କରନà­à¬¤à­à¥¤ ଯଦି IPv6 ସଂରଚନା ପଦà­à¬§à¬¤à¬¿ "
+"'auto' ହୋଇଥାଠତେବେ à¬à¬¹à¬¿ DNS ସରà­à¬­à¬°à¬—à­à¬¡à¬¼à¬¿à¬• ସେଗà­à¬¡à¬¼à¬¿à¬•à¬°à­‡ ଯୋଡ଼ାଯାଇଥାଠ(ଯଦି ଥାà¬) "
+"ଯାହାକିସà­à­±à­Ÿà¬‚ଚାଳିତ ସଂରଚନା ଦà­à­±à¬¾à¬°à¬¾ ଫେରିଥାà¬à¥¤ DNS ସରà­à¬­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•à­ 'shared' "
+"କିମà­à¬¬à¬¾'link-local' IPv6 ସଂରଚନା ପଦà­à¬§à¬¤à¬¿ ସହିତ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରାଯାଇପାରିବ ନାହିà¬, ଯେହେତୠ"
+"ସେଠାରେ କୌଣସି ଅପଷà­à¬Ÿà­à¬°à¬¿à¬® ନେଟୱରà­à¬• ନାହିà¬à¥¤ ଅନà­à­Ÿ ସମସà­à¬¤ IPv6 ସଂରଚନା ପଦà­à¬§à¬¤à¬¿à¬—à­à¬¡à¬¼à¬¿à¬•à¬°à­‡, "
+"à¬à¬¹à¬¿ DNS ସରà­à¬­à¬°à¬—à­à¬¡à¬¼à¬¿à¬• à¬à¬¹à¬¿ ସଂଯୋଗ ପାଇଠକେବଳ DNS ସରà­à¬­à¬° ଭାବରେ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରାଯାଇଥାà¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+msgstr ""
+"à¬à¬¹à¬¿ ପରି ଭାବରେ ସଜà­à¬œà¬¿à¬¤ IPv6 ଠିକଣାଗà­à¬¡à¬¼à¬¿à¬•à¬° ତାଲିକା ଭରଣ କରନà­à¬¤à­:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଉପସରà­à¬—କୠ128 ର ଉପସରà­à¬— ଭାବରେ ଉଲà­à¬²à­‡à¬– କରାଯାଇଥାà¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"'%s' ଟି ବୈଧ ନà­à¬¹à¬ (<dest IP>/prefix <next-hop IP> [metric] କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­)"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଉପସରà­à¬—କୠ128 ର ଉପସରà­à¬— ଭାବରେ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ମେଟà­à¬°à¬¿à¬•à¬•à­ 0 ର ମେଟà­à¬°à¬¿à¬• ଭାବରେ ଦରà­à¬¶à¬¾à¬¯à¬¾à¬‡à¬¥à¬¾à¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:db8:"
+"beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬; 0, 1, କିମà­à¬¬à¬¾ 2 କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ ଚà­à­Ÿà¬¾à¬¨à­‡à¬² ନà­à¬¹à¬; <1-13> କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬; [e, o, n] କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"ସଂରଚନା ଧାରଣ କରିଥିବା nmcli ଉଭୟ ସିଧାସଳଖ JSON ସଂରଚନା ତଥà­à­Ÿà¬•à­ à¬à¬¬à¬‚ ଫାଇଲନାମକୠ"
+"ଗà­à¬°à¬¹à¬£ କରିପାରିବ। ପରବରà­à¬¤à­à¬¤à­€ ପରିସà­à¬¥à¬¿à¬¤à¬¿à¬°à­‡ ଫାଇଲକୠପଢ଼ିପାରିବେ à¬à¬¬à¬‚ ବିଷୟବସà­à¬¤à­à¬•à­ à¬à¬¹à¬¿ "
+"ଗà­à¬£à¬§à¬°à­à¬®à¬°à­‡ ରଖାଯାଇଥାà¬à¥¤\n"
+"\n"
+"ଉଦାହରଣ: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "ବାହାର କରିବା ପାଇଠକୌଣସି ଅଗà­à¬°à¬¾à¬§à¬¿à¬•à¬¾à¬° ନାହିà¬"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "ଅନà­à¬•à­à¬°à¬®à¬£à¬¿à¬•à¬¾ '%d' ଟି <0-%d> ର ସୀମା ମଧà­à¬¯à¬°à­‡ ନାହିà¬"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬; 3 ଟି ବାକà­à­Ÿà¬–ଣà­à¬¡ ଦିଆଯିବା ଉଚିତ"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"ତିନୋଟି ଚà­à­Ÿà¬¾à¬¨à­‡à¬²à¬° ତାଲିକା ଭରଣ କରନà­à¬¤à­ (କୋମା କିମà­à¬¬à¬¾ ଖାଲି ସà­à¬¥à¬¾à¬¨ ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ)।\n"
+"\n"
+"ଉଦାହରଣ: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"à¬à¬¹à¬¿à¬ªà¬°à¬¿ ଭାବରେ ସଜà­à¬œà¬¿à¬•à­ƒà¬¤ S/390 ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬•à¬° à¬à¬• ତାଲିକା ଭରଣ କରନà­à¬¤à­:\n"
+" ବିକଳà­à¬ª = <value>, ବିକଳà­à¬ª = <value>,...\n"
+"ବୈଧ ବିକଳà­à¬ªà¬—à­à¬¡à¬¼à¬¿à¬• ହେଉଛି: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ ଚà­à­Ÿà¬¾à¬¨à­‡à¬² ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' ଟି à¬à¬• ବୈଧ ଚà­à­Ÿà¬¾à¬¨à­‡à¬² ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP କି ଟି '%s' ପରି ଭାବରେ ଅନà­à¬®à¬¾à¬¨ କରାଯାଇଥାà¬\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' ଟି [0 (unknown), 1 (key), 2 (passphrase)] ମଧà­à¬¯à¬°à­ ଗୋଟିଠନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP କିଗà­à¬¡à¬¼à¬¿à¬•à¬° ପà­à¬°à¬•à¬¾à¬° ଭରଣ କରନà­à¬¤à­à¥¤ ଗà­à¬°à¬¹à¬£ କରାଯାଇଥିବା ମୂଲà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬• ହେଉଛି: 0 "
+"କିମà­à¬¬à¬¾ ଅଜଣା, 1 କିମà­à¬¬à¬¾ କି, à¬à¬¬à¬‚ 2 କିମà­à¬¬à¬¾ ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ ବାକà­à­Ÿà¬¾à¬‚ଶ।\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ PSK ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' ଟି ଗୋଟିଠବୈଧ DCB ସୂଚକ ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' ଟି ଗୋଟିଠDCB ପà­à¬°à­Ÿà­‹à¬— ଅଗà­à¬°à¬¾à¬§à¬¿à¬•à¬¾à¬° ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "ନିଶà­à¬šà¬¿à¬¤ ଭାବରେ 8 ଟି କୋମା ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ ସଂଖା ଧାରଣ କରିଥିବା ଉଚିତ"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' ଟି 0 à¬à¬¬à¬‚ %u (ଅନà­à¬¤à¬°à­à¬­à­à¬•à­à¬¤) ମଧà­à¬¯à¬°à­‡ ଥିବା à¬à¬• ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬ କିମà­à¬¬à¬¾ %u"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' ଟି 0 à¬à¬¬à¬‚ %u (ଅନà­à¬¤à¬°à­à¬­à­à¬•à­à¬¤) ମଧà­à¬¯à¬°à­‡ ଥିବା à¬à¬• ସଂଖà­à­Ÿà¬¾ ନà­à¬¹à¬"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid "Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"ଚେତାବନୀ:'%s' ଯେପରà­à¬¯à­à­Ÿà¬¨à­à¬¤ 1 (ସକà­à¬°à¬¿à­Ÿ) କୠଅନà­à¬¤à¬°à­à¬­à­à¬•à­à¬¤ ନକରିଛି ସେପରà­à¬¯à­à­Ÿà¬¨à­à¬¤ "
+"ପରିବରà­à¬¤à­à¬¤à¬¨à¬—à­à¬¡à¬¼à¬¿à¬• କୌଣସି ପà­à¬°à¬­à¬¾à¬¬ ପକାଇବ ନାହିà¬\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "ବà­à­Ÿà¬¾à¬£à­à¬¡à­±à¬¿à¬¡à¬¼à¬¥ ପà­à¬°à¬¤à¬¿à¬¶à¬¤ ସରà­à¬¬à¬®à­‹à¬Ÿ 100%% ହେବା ଉଚିତ"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ମୂଲà­à­Ÿà¬•à­ କିପରି ପାଇବେ ତାହା ଜାଣି ନାହିà¬"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରିପାରିବେ ନାହିà¬"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM ଗà­à¬£à¬§à¬°à­à¬® ବରà­à¬£à­à¬£à¬¨à¬¾]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ ବରà­à¬£à­à¬£à¬¨à¬¾]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ପାଇଠମୂଲà­à­Ÿ ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr ""
+"ତà­à¬°à­à¬Ÿà¬¿: ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° '%s' କୠଆଶାକରାଯାଇଥିଲା, କିନà­à¬¤à­ '%s' ପà­à¬°à¬¦à¬¾à¬¨ କରାଯାଇଛି।"
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅପà­à¬°à¬¤à­à­Ÿà¬¾à¬¶à¬¿à¬¤ ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° '%s'"
+
+#: ../cli/src/utils.c:189
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 ଠିକଣା '0x%X' କୠପାଠà­à­Ÿ ଧାରାରେ ପରିବରà­à¬¤à­à¬¤à¬¨ କରିବାରେ ତà­à¬°à­à¬Ÿà¬¿"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:217
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 ଠିକଣା '%s' କୠପାଠà­à­Ÿ ଧାରାରେ ପରିବରà­à¬¤à­à¬¤à¬¨ କରିବାରେ ତà­à¬°à­à¬Ÿà¬¿"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' ଟି ବୈଧ ନà­à¬¹à¬; [%s] କିମà­à¬¬à¬¾ [%s] କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' ଟି ସନà­à¬¦à­‡à¬¹à¬œà¬¨à¬• (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ନାମ, [%s] ମଧà­à¬¯à¬°à­ ଗୋଟିà¬à¬•à­ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­"
+
+#: ../cli/src/utils.c:718
#, c-format
msgid "field '%s' has to be alone"
msgstr "କà­à¬·à­‡à¬¤à­à¬° '%s' à¬à¬•à­à¬Ÿà¬¿à¬† ଥିବା ଉଚିତ"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:720
#, c-format
-msgid "invalid field '%s'"
-msgstr "ଅବୈଧ କà­à¬·à­‡à¬¤à­à¬° '%s'"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "ଅବୈଧ ସà­à¬¥à¬¾à¬¨ '%s'; ଅନà­à¬®à­‹à¬¦à¬¿à¬¤ ସà­à¬¥à¬¾à¬¨: %s"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "ବିକଳà­à¬ª '--terse' '--fields' କୠଉଲà­à¬²à­‡à¬– କରିବା ଆବଶà­à­Ÿà¬• କରିଥାà¬"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
-"ବିକଳà­à¬ª '--terse' ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ '--fields' ବିକଳà­à¬ª ମୂଲà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬•à­ ଆବଶà­à­Ÿà¬• କରିଥାଠ, '%"
-"s' କୠନà­à¬¹à¬"
+"ବିକଳà­à¬ª '--terse' ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ '--fields' ବିକଳà­à¬ª ମୂଲà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬•à­ ଆବଶà­à­Ÿà¬• କରିଥାଠ, "
+"'%s' କୠନà­à¬¹à¬"
-#: ../cli/src/utils.c:468
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"ତà­à¬°à­à¬Ÿà¬¿: org.freedesktop.DBus ପାଇଠD-Bus ବସà­à¬¤à­ ପà­à¬°à¬•à­à¬¸à¬¿ ନିରà­à¬®à¬¾à¬£ କରିପାରିଲା ନାହିà¬"
-
-#: ../cli/src/utils.c:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "ତà­à¬°à­à¬Ÿà¬¿: NameHasOwner ଅନà­à¬°à­‹à¬§ ବିଫଳ: %s"
-
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
"nocheck to suppress the warning.\n"
msgstr ""
-"ଚେତାବନୀ: nmcli (%s) à¬à¬¬à¬‚ NetworkManager (%s) ସଂସà­à¬•à¬°à¬£ ମେଳ ଖାଇନଥାà¬à¥¤ "
-"ଚେତାବନୀକୠà¬à¬¡à¬¼à¬¾à¬‡à¬¬à¬¾ ପାଇଠ--nocheck କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤\n"
+"ଚେତାବନୀ: nmcli (%s) à¬à¬¬à¬‚ NetworkManager (%s) ସଂସà­à¬•à¬°à¬£ ମେଳ ଖାଇନଥାà¬à¥¤ ଚେତାବନୀକୠ"
+"à¬à¬¡à¬¼à¬¾à¬‡à¬¬à¬¾ ପାଇଠ--nocheck କୠବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1079
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -2095,120 +4770,87 @@ msgstr "PEM କି ଫାଇଲରେ କୌଣସି ଅନà­à¬¤ ଟà­à­Ÿà¬¾à
msgid "Doesn't look like a PEM private key file."
msgstr "PEM ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି ଫାଇଲ ପରି ଦେଖାଯାଉନାହିà¬."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM ଫାଇଲ ତଥà­à­Ÿà¬•à­ ସଂରକà­à¬·à¬£ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "ତà­à¬°à­à¬Ÿà¬¿à¬¯à­à¬•à­à¬¤ PEM ଫାଇଲ: Proc-ପà­à¬°à¬•à¬¾à¬°à¬Ÿà¬¿ ପà­à¬°à¬¥à¬® ଟà­à­Ÿà¬¾à¬— ନà­à¬¹à¬."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "ତà­à¬°à­à¬Ÿà¬¿à¬¯à­à¬•à­à¬¤ PEM ଫାଇଲ: ଅଜଣା Proc-ପà­à¬°à¬•à¬¾à¬° ଟà­à­Ÿà¬¾à¬— '%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "ତà­à¬°à­à¬Ÿà¬¿à¬¯à­à¬•à­à¬¤ PEM ଫାଇଲ: DEK-ସୂଚନାଟି ଦà­à­±à¬¿à¬¤à­€à­Ÿ ଟà­à­Ÿà¬¾à¬— ନà­à¬¹à¬."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "ତà­à¬°à­à¬Ÿà¬¿à¬¯à­à¬•à­à¬¤ PEM ଫାଇଲ: DEK-ସୂଚନା ଟà­à­Ÿà¬¾à¬—ରେ କୌଣସି IV ମିଳିଲା ନାହିà¬."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "ତà­à¬°à­à¬Ÿà¬¿à¬¯à­à¬•à­à¬¤ PEM ଫାଇଲ: DEK-ସୂଚନା ଟà­à­Ÿà¬¾à¬—ରେ IVର ଅବୈଧ ଶୈଳୀ."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "ତà­à¬°à­à¬Ÿà¬¿à¬¯à­à¬•à­à¬¤ PEM ଫାଇଲ: ଅଜଣା ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି କà­à¬žà­à¬œà¬¿ '%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି କୠଅବସଂକେତ କରିହେବ ନାହିà¬."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "ଆଶାତିତ PKCS#8 କୠଖୋଜିବାରେ ବିଫଳ।"
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "ଆଶାତିତ PKCS#8 ସମାପà­à¬¤à¬¿ ଟà­à­Ÿà¬¾à¬— '%s' କୠଖୋଜିବାରେ ବିଫଳ।"
-#: ../libnm-util/crypto.c:312
-#| msgid "Not enough memory to store file data."
-msgid "Not enough memory to store private key data."
-msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି ତଥà­à­Ÿà¬•à­ ସଂରକà­à¬·à¬£ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬à¥¤"
-
-#: ../libnm-util/crypto.c:317
-#| msgid "Failed to decrypt the private key."
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି କୠଖୋଲିବାରେ ବିଫଳ।"
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "ପà­à¬°à¬®à¬¾à¬£à¬ªà¬¤à­à¬° ତଥà­à­Ÿ ସଂରକà­à¬·à¬£ ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ଆକାରରେ ନିଶà­à¬šà¬¿à¬¤ ରୂପେ ଗୋଟିଠଯà­à¬—à­à¬® ସଂଖà­à­Ÿà¬• ବାଇଟ ହୋଇଥିବା ଉଚିତ."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV କୠସଂରକà­à¬·à¬£ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ଷୋହଳମିକ ସଂଖà­à­Ÿà¬¾ ଧାରଣ କରିନଥାà¬."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି କà­à¬žà­à¬œà¬¿ '%s' ଅଜଣା ଥିଲା."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି କୠବିକୋଡ଼ନ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "ବିକୋଡ଼ନ ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ ତଥà­à­Ÿ ସଂରକà­à¬·à¬£ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି ପà­à¬°à¬•à¬¾à¬° ନିରà­à¬§à¬¾à¬°à¬£ କରିବାରେ ଅସମରà­à¬¥."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
-#| msgid "PEM certificate '%s' had no end tag '%s'."
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM ପà­à¬°à¬®à¬¾à¬£ ପତà­à¬°à¬°à­‡ କୌଣସି ଆରମà­à¬­ ଟà­à­Ÿà¬¾à¬— '%s' ନାହିà¬à¥¤"
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
-#| msgid "PEM certificate '%s' had no end tag '%s'."
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM ପà­à¬°à¬®à¬¾à¬£ ପତà­à¬° ରେ ସମାପà­à¬¤à¬¿ ଟà­à­Ÿà¬¾à¬— '%s' ନାହିà¬à¥¤"
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "ପà­à¬°à¬®à¬¾à¬£à¬ªà¬¤à­à¬° ଅବସଂକେତକ କରିବାରେ ବିଫଳ."
@@ -2227,100 +4869,88 @@ msgstr "MD5 ଯନà­à¬¤à­à¬°à¬•à­ ଆରମà­à¬­ କରିବାରେ ବà¬
msgid "Invalid IV length (must be at least %zd)."
msgstr "ଅବୈଧ IV ଲମà­à¬¬ (ଅତିକମରେ %zd ହେବା ଉଚିତ)।"
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "କି ବଫରକୠବିକୋଡ଼ନ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "ବିକୋଡ଼ନ କà­à¬žà­à¬œà¬¿ ପà­à¬°à¬¸à¬™à­à¬—କୠଆରମà­à¬­ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "ବିକୋଡ଼ନ ପାଇଠସମମିତ କି ବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ବିକୋଡ଼ନ ପାଇଠIV ବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି କୠବିକୋଡ଼ନ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କିକୠଅବସଂକେତ କରିବାରେ ବିଫଳ: ଅପà­à¬°à¬¤à­à­Ÿà¬¾à¬¶à¬¿à¬¤ ପà­à­Ÿà¬¾à¬¡à¬¿à¬™à­à¬— ଲମà­à¬¬à¥¤"
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି କୠବିକୋଡ଼ନ କରିବାରେ ବିଫଳ."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "ସଂଗà­à¬ªà­à¬¤ କରିବା ପାଇଠସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨à¬•à­ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "ବିକୋଡ଼ନ କà­à¬žà­à¬œà¬¿ ପà­à¬°à¬¸à¬™à­à¬—କୠଆରମà­à¬­ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "ବିକୋଡ଼ନ ପାଇଠସମମିତ କି ବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "ବିକୋଡ଼ନ ପାଇଠIV ବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "ତଥà­à­Ÿà¬•à­ ବିକୋଡ଼ନ କରିବାରେ ବିଫଳ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "ପà­à¬°à¬®à¬¾à¬£à¬ªà¬¤à­à¬° ତଥà­à­Ÿà¬•à­ ଆରମà­à¬­ କରିବାରେ ତà­à¬°à­à¬Ÿà¬¿: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "ପà­à¬°à¬®à¬¾à¬£à¬ªà¬¤à­à¬°à¬•à­ ଅବସଂକେତ କରିପାରିଲେ ନାହିà¬: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 ଅବସଂକେତକକୠଆରମà­à¬­ କରିପାରିଲେ ନାହିà¬: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 ଫାଇଲକୠଅବସଂକେତ କରିହେବ ନାହିà¬: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 ଫାଇଲକୠଯାଞà­à¬š କରିହେଲା ନାହିà¬: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
-#| msgid "Couldn't initialize PKCS#12 decoder: %s"
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 ଅବସଂକେତକକୠଆରମà­à¬­ କରିପାରିଲେ ନାହିà¬: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
-#| msgid "Couldn't decode PKCS#12 file: %s"
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ଫାଇଲକୠଅବସଂକେତ କରିହେବ ନାହିà¬: %s"
@@ -2339,123 +4969,479 @@ msgstr "MD5 ପà­à¬°à¬¸à¬™à­à¬—କୠଆରମà­à¬­ କରିବାରେ à¬
msgid "Invalid IV length (must be at least %d)."
msgstr "ଅବୈଧ IV ଲମà­à¬¬ (ନିଶà­à¬šà¬¿à¬¤ ଭାବରେ ଅତିକମରେ %d ହେବା ଉଚିତ)।"
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ଅବସଂକେତନ କà­à¬žà­à¬œà¬¿ ସà­à¬¥à¬¾à¬¨à¬•à­ ଆରମà­à¬­ କରିବାରେ ବିଫଳ."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ଅବସଂକେତନ ପାଇଠସମମିତ କିକୠବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ଅବସଂକେତନ ପାଇଠIV ବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ଅବସଂକେତନ ପà­à¬°à¬¸à¬™à­à¬—କୠଆରମà­à¬­ କରିବାରେ ବିଫଳ."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କିକୠଅବସଂକେତ କରିବାରେ ବିଫଳ: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କିକୠଅବସଂକେତ କରିବାରେ ବିଫଳ: ଅବସଂକେତ ତଥà­à­Ÿà¬Ÿà¬¿ ଅତà­à­Ÿà¬§à¬¿à¬• ବଡ଼।"
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କିର ଅବସଂକେତନକୠନିଶà­à¬šà­Ÿ କରିବାରେ ବିଫଳ: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "ଅବସଂକେତନ କà­à¬žà­à¬œà¬¿ ସà­à¬¥à¬¾à¬¨à¬•à­ ଆରମà­à¬­ କରିବାରେ ବିଫଳ।"
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "ଅବସଂକେତନ ପାଇଠସମମିତ କିକୠବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ।"
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "ଅବସଂକେତନ ପାଇଠIV ବିନà­à­Ÿà¬¾à¬¸ କରିବାରେ ବିଫଳ।"
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "ଅବସଂକେତନ ପà­à¬°à¬¸à¬™à­à¬—କୠଆରମà­à¬­ କରିବାରେ ବିଫଳ।"
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "ଅବସଂକେତ କରିବାରେ ବିଫଳ: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "ସଂଗà­à¬ªà­à¬¤ କରିବା ପରେ ଅପà­à¬°à¬¤à­à­Ÿà¬¶à¬¿à¬¤ ପରିମାଣର ତଥà­à­Ÿà¥¤"
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "ପà­à¬°à¬®à¬¾à¬£à¬ªà¬¤à­à¬°à¬•à­ ଅବସଂକେତନ କରିହେଲା ନାହିà¬: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "ପà­à¬°à¬¬à­‡à¬¶à¬¸à¬™à­à¬•à­‡à¬¤à¬•à­ UCS2ରେ ପରିବରà­à¬¤à­à¬¤à¬¨ କରିହେଲା ନାହିà¬: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 ଅବସଂକେତକକୠଆରମà­à¬­ କରିହେଲା ନାହିà¬: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 ଫାଇଲକୠଅବସଂକେତନ କରିହେଲା ନାହିà¬: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 ଫାଇଲକୠଯାଞà­à¬š କରିହେଲାନାହିà¬: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "ମନଇଚà­à¬›à¬¾ ତଥà­à­Ÿà¬•à­ ଅବସଂକେତ କରିହେଲା ନାହିà¬à¥¤"
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ଖାଲି ଅଛି"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 ପାଇଠ'%s' ଗà­à¬£à¬§à¬°à­à¬® ସହିତ ମେଳ ହେବା ଉଚିତ"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬®à¬Ÿà¬¿ ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "'%s' ଟି ଗà­à¬£à¬§à¬°à­à¬® ପାଇଠଗୋଟିଠବୈଧ ମୂଲà­à­Ÿ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' କିମà­à¬¬à¬¾ '%s' ସଂରଚନା ଆବଶà­à­Ÿà¬•"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "ଅବୈଧ ବିକଳà­à¬ª '%s' କିମà­à¬¬à¬¾ ତାହାର ମୂଲà­à­Ÿ '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s' à¬à¬¬à¬‚ '%s' ମଧà­à¬¯à¬°à­ କେବଳ ଗୋଟିà¬à¬•à­ ସେଟ କରିପାରିବେ"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "ବାଧà­à¬¯à¬¤à¬¾à¬®à­‚ଳକ ବିକଳà­à¬ª '%s' ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' ଟି '%s' ପାଇଠଗୋଟିଠବୈଧ ମୂଲà­à­Ÿ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' ଟି '%s > 0' ସହିତ ସà­à¬¸à¬™à­à¬—ତ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-bond.c:583
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "ବିକୋଡ଼ନ କି କୠନିରà­à¬®à¬¾à¬£ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬à¥¤"
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' ଟି '%s' ବିକଳà­à¬ª ପାଇଠଗୋଟିଠବୈଧ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ ନà­à¬¹à¬"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM ଫାଇଲ ନିରà­à¬®à¬¾à¬£ ପାଇଠସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' ବିକଳà­à¬ªà¬Ÿà¬¿ କେବଳ '%s=%s' ପାଇଠବୈଧ"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' ଟି '%s ' ପାଇଠଗୋଟିଠବୈଧ ବିନà­à­Ÿà¬¾à¬¸ ନà­à¬¹à¬"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "PEM ଫାଇଲରେ IV ଲେଖିବା ପାଇଠସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' ବିକଳà­à¬ª '%s' ବିକଳà­à¬ªà¬•à­ ସେଟ କରିବା ଆବଶà­à­Ÿà¬• କରିଥାà¬"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "PEM ଫାଇଲରେ ସଂଗà­à¬ªà­à¬¤ କି ଲେଖିବା ପାଇଠସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
+msgid "'%s' option is empty"
+msgstr "'%s' ବିକଳà­à¬ª ଖାଲି ଅଛି"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-bond.c:671
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ଫାଇଲ ତଥà­à­Ÿà¬•à­ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' ଟି '%s' ବିକଳà­à¬ªà¬ªà¬¾à¬‡à¬ ଗୋଟିଠବୈଧ IPv4 ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' ଟି ଗà­à¬£à¬§à¬°à­à¬® ପାଇଠà¬à¬• ବୈଧ ମୂଲà­à­Ÿ ନà­à¬¹à¬ (<= %d ହେବା ଉଚିତ)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "ମୂଲà­à­Ÿ '%d' ସୀମା ବାହାରେ <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ଖାଲି ଅଛି'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' ଆଭାସୀ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ '%s' ସହିତ ମେଳ ଖାଉ ନାହିà¬"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "ସଂଯୋଗରେ '%s' ବà­à­Ÿà¬¬à¬¸à­à¬¥à¬¾à¬° ଉପସà­à¬¥à¬¿à¬¤à¬¿ ଆବଶà­à­Ÿà¬•"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 ସଂରଚନା ସà­à¬²à­‡à¬­ ପାଇଠଅନà­à¬®à­‹à¬¦à¬¿à¬¤ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 ସଂରଚନା ସà­à¬²à­‡à¬­ ପାଇଠଅନà­à¬®à­‹à¬¦à¬¿à¬¤ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "ସୂଚକଗà­à¬¡à¬¼à¬¿à¬• ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "ସୂଚକଗà­à¬¡à¬¼à¬¿à¬• ଅବୈଧ - ନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରାଯାଇଛି"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ଅବୈଧ (ସକà­à¬°à¬¿à­Ÿ ହୋଇ ନାହିà¬)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "ଉପାଦାନଟି ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "ସମଷà­à¬Ÿà¬¿ 100% ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ମୂଲà­à­Ÿ '%s' ଟି ଖାଲି ଅଛି କିମà­à¬¬à¬¾ ଅତà­à­Ÿà¬§à¬¿à¬• ବଡ଼ (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' ଅବୈଧ ଅକà­à¬·à¬° ଧାରଣ କରିଥାଠ([A-Za-z._-] ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­)"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' ଲମà­à¬¬à¬Ÿà¬¿ ଅବୈଧ ଅଟେ (5 କିମà­à¬¬à¬¾ 6 ଅଙà­à¬• ବିଶିଷà­à¬Ÿ ହେବା ଉଚିତ)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "à¬à¬• ବୈଧ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "ଗୋଟିଠP_Key ଉଲà­à¬²à­‡à¬– କରିବା ଉଚିତ ଯଦି ମୂଖà­à­Ÿà¬•à­ ଉଲà­à¬²à­‡à¬– କରାଯାଇଥାà¬"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key ସଂଯୋଗ ମୂଖà­à­Ÿ ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମକୠଉଲà­à¬²à­‡à¬– କରିନଥାà¬"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "à¬à¬¹à¬¿ ଗà­à¬®à¬§à¬°à­à¬®à¬Ÿà¬¿ '%s=%s' ପାଇଠଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 ଠିକଣାଟି ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 ଠିକଣାରେ ଅବୈଧ ଉପସରà­à¬— ଅଛି"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. ପଥ ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. ପଥରେ ଅବୈଧ ଉପସରà­à¬— ଅଛି"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' ଟି %s=%s ପାଇଠଅନà­à¬®à¬¤à¬¿ ପà­à¬°à¬¾à¬ªà­à¬¤ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID ଲମà­à¬¬ ସୀମା ବାହାରେ <1-32> ବାଇଟà­â€Œ"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' ଟି à¬à¬• ବୈଧ ଚà­à­Ÿà¬¾à¬¨à­‡à¬² ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' ଟି ବୈଧ ସୀମା ବାହାରେ <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "à¬à¬¹à¬¿ ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ ସେଟ କରିବା ଦà­à­±à¬¾à¬°à¬¾ ଶୂନà­à­Ÿ-ହୀନ '%s' ଗà­à¬£à¬§à¬°à­à¬® ଅବଶà­à­Ÿà¬• ହୋଇନଥାà¬"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' ମୂଲà­à­Ÿ '%s=%s' ସହିତ ମେଳ ଖାଇନଥାà¬"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' ଟି à¬à¬• UUID ନà­à¬¹à¬ କି ଅନà­à¬¤à¬°à¬¾à¬ªà­ƒà¬·à­à¬  ନାମ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "ଗà­à¬£à¬§à¬°à­à¬® ଉଲà­à¬²à­‡à¬– ହୋଇନାହିଠକି '%s:%s' ମଧà­à¬¯ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "ସୂଚକଗà­à¬¡à¬¼à¬¿à¬• ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ ଇଥରନେଟà­â€Œ ପୋରà­à¬Ÿà­â€Œ ମୂଲà­à­Ÿ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ ଡà­à­Ÿà­à¬ªà¬²à­‡à¬•à­à¬¸à­â€Œ ମୂଲà­à­Ÿ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "à¬à¬¹à¬¾ à¬à¬• ବୈଧ MAC ଠିକଣା ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ MAC ଠିକଣା ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "'%s' କିମà­à¬¬à¬¾ à¬à¬¹à¬¾à¬° ମୂଲà­à­Ÿ '%s' ଅବୈଧ ଅଟେ"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' ସà­à¬°à¬•à­à¬·à¬¾ '%s=%s' ଆବଶà­à­Ÿà¬• କରିଥାà¬"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' ସà­à¬°à¬•à­à¬·à¬¾ '%s' ସେଟିଙà­à¬—ର ଉପସà­à¬¥à¬¿à¬¤à¬¿ ଆବଶà­à­Ÿà¬• କରିଥାà¬"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' ମୂଲà­à­Ÿà¬Ÿà¬¿ ସୀମା ବାହାରେ <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬• à¬à¬¹à¬¿ ଗà­à¬£à¬§à¬°à­à¬®à¬°à­‡ '%s' ଆବଶà­à­Ÿà¬• କରିଥାà¬"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' କୠ'%s=%s' (WEP) ସହିତ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରାଯାଇପାରିବ"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ Wi-Fi ଧାରା ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' ଟି à¬à¬• ବୈଧ ବà­à­Ÿà¬¾à¬£à­à¬¡à­â€Œ ନà­à¬¹à¬"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "'%s' ଗà­à¬£à¬§à¬°à­à¬®à¬•à­ ସେଟ କରିବା ଆବଶà­à­Ÿà¬• ହୋଇଥାà¬"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2472,8 +5458,7 @@ msgid ""
"power management)"
msgstr ""
"NetworkManager କୠସà­à¬ªà­à¬¤ କିମà­à¬¬à¬¾ ଜାଗà­à¬°à¬¤ ରଖନà­à¬¤à­ (କେବଳ ତନà­à¬¤à­à¬° ଶକà­à¬¤à¬¿ ପରିଚାଳନା "
-"ଦà­à­±à¬¾à¬°à¬¾ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° "
-"ହେବା ଉଚିତ)"
+"ଦà­à­±à¬¾à¬°à¬¾ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ହେବା ଉଚିତ)"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
@@ -2499,19 +5484,15 @@ msgstr ""
"ବାରଣ କରିଥାà¬"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
-#| msgid "Enable or disable mobile broadband devices"
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "WiMAX ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬•à­ ସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରନà­à¬¤à­"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
-#| msgid ""
-#| "System policy prevents enabling or disabling mobile broadband devices"
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
"ତନà­à¬¤à­à¬° ନିତୀ WiMAX ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬•à­ ସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ "
-"ହେବାରୠ"
-"ବାରଣ କରିଥାà¬"
+"ହେବାରୠବାରଣ କରିଥାà¬"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
@@ -2526,7 +5507,8 @@ msgid "Connection sharing via a protected WiFi network"
msgstr "ଗୋଟିଠସà­à¬°à¬•à­à¬·à¬¿à¬¤ WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
-msgid "System policy prevents sharing connections via a protected WiFi network"
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
msgstr ""
"ତନà­à¬¤à­à¬° ନିତୀ ଗୋଟିଠସà­à¬°à¬•à­à¬·à¬¿à¬¤ WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାà¬"
@@ -2539,25 +5521,22 @@ msgid "System policy prevents sharing connections via an open WiFi network"
msgstr "ତନà­à¬¤à­à¬° ନିତୀ ଗୋଟିଠଖୋଲା WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାà¬"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
-#| msgid "Allow control of network connections"
msgid "Modify personal network connections"
msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ ନେଟୱରà­à¬• ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
-#| msgid "System policy prevents modification of system settings"
msgid "System policy prevents modification of personal network settings"
msgstr "ତନà­à¬¤à­à¬° ନିତୀ ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ ନେଟୱରà­à¬• ସଂରଚନା ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ କରିଥାà¬"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
-#| msgid "Modify system connections"
msgid "Modify network connections for all users"
msgstr "ସମସà­à¬¤ ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€à¬™à­à¬• ପାଇଠନେଟୱରà­à¬• ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
-#| msgid "System policy prevents modification of system settings"
msgid "System policy prevents modification of network settings for all users"
msgstr ""
-"ତନà­à¬¤à­à¬° ନିତୀ ସମସà­à¬¤ ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€à¬™à­à¬• ପାଇଠନେଟୱରà­à¬• ବିନà­à­Ÿà¬¾à¬¸ ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ କରିଥାà¬"
+"ତନà­à¬¤à­à¬° ନିତୀ ସମସà­à¬¤ ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€à¬™à­à¬• ପାଇଠନେଟୱରà­à¬• ବିନà­à­Ÿà¬¾à¬¸ ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ "
+"କରିଥାà¬"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
@@ -2567,130 +5546,79 @@ msgstr "ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬•à­ ପ
msgid "System policy prevents modification of the persistent system hostname"
msgstr "ତନà­à¬¤à­à¬° ନିତୀ ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬° ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ କରିଥାà¬"
-#: ../src/main.c:158
-#, c-format
-#| msgid "Failed to encrypt: %d."
-msgid "Failed to set signal mask: %d"
-msgstr "ସଂକେତ ମà­à¬–ା ସେଟ କରିବାରେ ବିଫଳ: %d"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "ସଂକେତ ନିୟନà­à¬¤à­à¬°à¬£ ଥà­à¬°à­‡à¬¡ ନିରà­à¬®à¬¾à¬£ କରିବାରେ ବିଫଳ: %d"
-
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s କୠଖୋଲିବାରେ ବିଫଳ: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s ରେ ଲେଖିବା ବିଫଳ ହୋଇଛି: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s କୠବନà­à¬¦ କରିବା ବିଫଳ ହୋଇଛି: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager ପୂରà­à¬¬à¬°à­ ଚାଲà­à¬…ଛି (pid %ld)\n"
-#: ../src/main.c:363
-#| msgid "NetworkManager status"
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager ସଂସà­à¬•à¬°à¬£à¬•à­ ମà­à¬¦à­à¬°à¬£ କରନà­à¬¤à­ à¬à¬¬à¬‚ ପà­à¬°à¬¸à­à¬¥à¬¾à¬¨ କରନà­à¬¤à­"
-#: ../src/main.c:364
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "ଗୋଟିଠଡିମୋନ ହà­à¬… ନାହିà¬"
-#: ../src/main.c:365
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "ଗୋଟିଠଡେମନ ହà­à¬… ନାହିà¬, à¬à¬¬à¬‚ stderr ରେ ଲଗ କରନà­à¬¤à­"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "ଲଗ ସà­à¬¤à¬°: [%s] ମଧà­à¬¯à¬°à­ ଗୋଟିà¬"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "ଲଗ ଡମେନଗà­à¬¡à¬¼à¬¿à¬• ',' ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ ହୋଇଥାà¬: [%s] ର ଯେକୌଣସି ଯà­à¬—ଳ"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "ସବୠଚେତାବନୀଗà­à¬¡à¬¿à¬•à­ ମାରାତà­à¬®à¬• କରନà­à¬¤à­"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "à¬à¬• PID ଫାଇଲର ଅବସà­à¬¥à¬¾à¬¨à¬•à­ ଉଲà­à¬²à­‡à¬– କରନà­à¬¤à­"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "filename"
msgstr "ଫାଇଲ ନାମ"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "State file location"
msgstr "ଫାଇଲ ଅବସà­à¬¥à¬¾à¬¨ ଜଣାନà­à¬¤à­"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:368
-msgid "Config file location"
-msgstr "ସଂରଚନା ଫାଇଲ ଅବସà­à¬¥à¬¾à¬¨"
-
-#: ../src/main.c:368
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:369
-msgid "List of plugins separated by ','"
-msgstr "',' ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ ପà­à¬²à¬—ଇନ ତାଲିକା"
-
-#: ../src/main.c:369
-msgid "plugin1,plugin2"
-msgstr "ପà­à¬²à¬—ଇନ1,ପà­à¬²à¬—ଇନ2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:371
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "ଲଗ ସà­à¬¤à¬°: [ERR, WARN, INFO, DEBUG] ମଧà­à¬¯à¬°à­ ଗୋଟିà¬"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:374
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"ଲଗ ଡମେନଗà­à¬¡à¬¼à¬¿à¬• ',' ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ ହୋଇଛି: à¬à¬¹à¬¾à¬° ଯେକୌଣସି ଯà­à¬—ଳ\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:380
-msgid "An http(s) address for checking internet connectivity"
-msgstr "ଇଣà­à¬Ÿà¬°à¬¨à­‡à¬Ÿ ସଂଯୋଗକୠଯାଞà­à¬š କରିବା ପାଇଠà¬à¬• http(s) ଠିକଣା"
-
-#: ../src/main.c:381
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "ସଂଯୋଜକତା ଯାଞà­à¬š ମଧà­à¬¯à¬°à­‡ ଅନà­à¬¤à¬°à¬¾à¬³ (ସେକଣà­à¬¡à¬°à­‡)"
-
-#: ../src/main.c:382
-msgid "The expected start of the response"
-msgstr "ଉତà­à¬¤à¬°à¬° ଆରମà­à¬­"
-
-#: ../src/main.c:382
-msgid "Bingo!"
-msgstr "ବିଙà­à¬—à­‹!"
-
-#: ../src/main.c:387
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModule ଗà­à¬¡à¬¼à¬¿à¬• ଆପଣଙà­à¬• ପà­à¬²à¬¾à¬Ÿà¬«à¬°à­à¬®à¬°à­‡ ସହାୟତା ପà­à¬°à¬¾à¬ªà­à¬¤ ନà­à¬¹à¬!\n"
-#: ../src/main.c:406
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "NetworkManager କୠଚଲାଇବା ପାଇଠଆପଣଙà­à¬•à­ ରà­à¬Ÿ ହେବାକୠପଡ଼ିବ!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2698,303 +5626,1068 @@ msgid ""
"should associate with."
msgstr ""
"NetworkManager ସମସà­à¬¤ ନେଟୱରà­à¬• ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ଦେଖିଥାଠà¬à¬¬à¬‚ ସà­à­±à­Ÿà¬‚ଚାଳିତ ଭାବରେ\n"
-"ଉତà­à¬¤à¬® ସଂଯୋଗକୠବାଛିଥାà¬à¥¤ à¬à¬¹à¬¾ ମଧà­à¬¯ ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€à¬™à­à¬•à­ ବେତାର ଅଭିଗମà­à­Ÿà¬¤à¬¾ ଉଲà­à¬²à­‡à¬– କରିବା "
-"ପାଇà¬\n"
+"ଉତà­à¬¤à¬® ସଂଯୋଗକୠବାଛିଥାà¬à¥¤ à¬à¬¹à¬¾ ମଧà­à¬¯ ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€à¬™à­à¬•à­ ବେତାର ଅଭିଗମà­à­Ÿà¬¤à¬¾ ଉଲà­à¬²à­‡à¬– "
+"କରିବା ପାଇà¬\n"
"ଅନà­à¬®à¬¤à¬¿ ଦେଇଥାଠଯିà¬à¬•à¬¿ ବେତାର କାରà­à¬¡à¬—à­à¬¡à¬¼à¬¿à¬•à­ କମà­à¬ªà­à¬Ÿà¬° ସହିତ\n"
" ସମà­à¬ªà­ƒà¬•à­à¬¤ ଥାà¬à¥¤"
-#: ../src/main.c:412
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"ଅବୈଧ ବିକଳà­à¬ª. ବୈଧ ବିକଳà­à¬ªà¬° ତାଲିକା ଦେଖିବା ପାଇଠଦୟାକରି --ସହାୟତା ବà­à­Ÿà¬¬à¬¹à¬¾à¬° "
-"କରନà­à¬¤à­.\n"
+"ଅବୈଧ ବିକଳà­à¬ª. ବୈଧ ବିକଳà­à¬ªà¬° ତାଲିକା ଦେଖିବା ପାଇଠଦୟାକରି --ସହାୟତା ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­."
+"\n"
-#: ../src/main.c:422
+#: ../src/main.c:412
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager କୠଚଲାଇବା ପାଇଠଆପଣଙà­à¬•à­ ରà­à¬Ÿ ହେବାକୠପଡ଼ିବ!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. ବୈଧ ବିକଳà­à¬ªà¬° ତାଲିକା ଦେଖିବା ପାଇଠଦୟାକରି --help ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤\n"
+
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"ନିରà­à¬¦à­à¬¦à­‡à¬¶ ଧାରାରେ ପଠାଯାଇଥିବା ଅଚିହà­à¬¨à¬¾ '%s' ଲଗ ଡମେନ(ଗà­à¬¡à¬¼à¬¿à¬•à­) ଅଗà­à¬°à¬¾à¬¹à­à­Ÿ କରà­à¬…ଛି।\n"
-#: ../src/main.c:449
+#: ../src/main.c:468
#, c-format
-#| msgid "Failed to set IV for encryption: %s / %s."
msgid "Failed to read configuration: (%d) %s\n"
msgstr "ସଂରଚନା ପଢ଼ିବାରେ ବିଫଳ: (%d) %s\n"
-#: ../src/main.c:460
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. ବୈଧ ବିକଳà­à¬ªà¬° ତାଲିକା ଦେଖିବା ପାଇଠଦୟାକରି --help ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "ସଂରଚନା ଫାଇଲରେ ତୃଟି: %s.\n"
+
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "ଅଚିହà­à¬¨à¬¾ '%s' ଲଗ ଡମେନ(ଗà­à¬¡à¬¼à¬¿à¬•à­) ସଂରଚନା ଫାଇଲଗà­à¬¡à¬¼à¬¿à¬•à¬°à­ ଅଗà­à¬°à¬¾à¬¹à­à­Ÿ କରà­à¬…ଛି।\n"
-#: ../src/main.c:467
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "ସà­à¬¥à¬¿à¬¤à¬¿ ଫାଇଲ %s ବିଶà­à¬³à­‡à¬·à¬£ ବିଫଳ ହୋଇଛି: (%d) %s\n"
-#: ../src/main.c:484
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "ଡେମନ କରିପାରିଲା ନାହିà¬: %s [ତà­à¬°à­à¬Ÿà¬¿ %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:61
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "%s ନେଟୱରà­à¬•"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# NetworkManager ଦà­à­±à¬¾à¬°à¬¾ ନିରà­à¬®à¬¿à¬¤\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:68
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
-msgid ""
-"# Merged from %s\n"
+msgid "# Merged from %s\n"
"\n"
-msgstr ""
-"# %s ରୠମିଶà­à¬°à¬¿à¬¤\n"
+msgstr "# %s ରୠମିଶà­à¬°à¬¿à¬¤\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "କୌଣସି ଉପଯୋଗୀ DHCP କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ମିଳିଲା ନାହିà¬à¥¤"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' ମିଳି ପାରିଲା।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' ମିଳିପାରିଲା।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ଅସମରà­à¬¥à¬¿à¬¤ DHCP କà­à¬²à¬¾à¬à¬£à­à¬Ÿ '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "ଟିପà­à¬ªà¬£à­€: libc resolver 3 ରୠଅଧିକ nameserverଗà­à¬¡à¬¼à¬¿à¬•à­ ସମରà­à¬¥à¬¨ କରିନପାରେ."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "ନିମà­à¬¨à¬°à­‡ ତାଲିକାଭà­à¬•à­à¬¤ nameserverଗà­à¬¡à¬¼à¬¿à¬•à­ ଚିହà­à¬¨à¬¿ ହୋଇନପାରେ."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "ଅଜà­à¬žà¬¾à¬¤ ଲଗ ସà­à¬¤à¬° '%s'"
-#: ../src/logging/nm-logging.c:181
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "ଅଜà­à¬žà¬¾à¬¤ ଲଗ ଡମେନ '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:280 ../src/nm-device-bt.c:351
-#, c-format
-#| msgid "connection failed"
-msgid "CDMA connection %d"
-msgstr "CDMA ସଂଯୋଗ %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "ସଂରଚନା ଫାଇଲ ଅବସà­à¬¥à¬¾à¬¨"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "ସଂରଚନା ଡିରେକà­à¬Ÿà­‹à¬°à­€ ଅବସà­à¬¥à¬¾à¬¨"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' ଦà­à­±à¬¾à¬°à¬¾ ପୃଥକ ପà­à¬²à¬—ଇନ ତାଲିକା"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "ପà­à¬²à¬—ଇନ1,ପà­à¬²à¬—ଇନ2"
+
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ଇଣà­à¬Ÿà¬°à¬¨à­‡à¬Ÿ ସଂଯୋଗକୠଯାଞà­à¬š କରିବା ପାଇଠà¬à¬• http(s) ଠିକଣା"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "ସଂଯୋଜକତା ଯାଞà­à¬š ମଧà­à¬¯à¬°à­‡ ଅନà­à¬¤à¬°à¬¾à¬³ (ସେକଣà­à¬¡à¬°à­‡)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "ଉତà­à¬¤à¬°à¬° ଆରମà­à¬­"
-#: ../src/modem-manager/nm-modem-gsm.c:558 ../src/nm-device-bt.c:347
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "ବିଙà­à¬—à­‹!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
-#| msgid "connection failed"
msgid "GSM connection %d"
msgstr "GSM ସଂଯୋଗ %d"
-#: ../src/nm-device-bond.c:192
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA ସଂଯୋଗ %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
-#| msgid "connection failed"
msgid "Bond connection %d"
msgstr "ବନà­à¬§à¬¨ ସଂଯୋଗ %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
-#| msgid "connection failed"
msgid "ADSL connection %d"
msgstr "ADSL ସଂଯୋଗ %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "ବà­à¬°à¬¿à¬œ ସଂଯୋଗ %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
-#| msgid "VPN connection failed"
msgid "PAN connection %d"
msgstr "PAN ସଂଯୋଗ %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/devices/nm-device-bt.c:341
#, c-format
-#| msgid "VPN connection failed"
msgid "DUN connection %d"
msgstr "DUN ସଂଯୋଗ %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
-#| msgid "VPN connection failed"
msgid "PPPoE connection %d"
msgstr "PPPoE ସଂଯୋଗ %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
-#| msgid "Active connections"
msgid "Wired connection %d"
msgstr "ତାରମୟ ସଂଯୋଗ %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand ସଂଯୋଗ %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "ମେସ %d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "ଦଳ ସଂଯୋଗ %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
-#| msgid "VPN connection failed"
msgid "VLAN connection %d"
msgstr "VLAN ସଂଯୋଗ %d"
-#: ../src/nm-manager.c:662
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
-#| msgid "VPN connection failed"
msgid "VPN connection %d"
msgstr "VPN ସଂଯୋଗ %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "ସକେଟରେ ତଥà­à­Ÿ ପାଇଠଅପେକà­à¬·à¬¾ କରିବା ସମୟରେ ତà­à¬°à­à¬Ÿà¬¿"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "netlink ସନà­à¬¦à­‡à¬¶ ପଠାଇବାରେ ତà­à¬°à­à¬Ÿà¬¿: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "ସକେଟରେ ତଥà­à­Ÿ ପାଇଠଅପେକà­à¬·à¬¾ କରିବା ସମୟରେ ତà­à¬°à­à¬Ÿà¬¿"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "ସଂଯୋଗ ସà­à¬¥à¬¿à¬¤à¬¿ ଅନà­à­±à­‡à¬·à¬£ କରିବା ପାଇଠnetlink ସହିତ ସଂଯୋଗ ହେବାରେ ଅସମରà­à¬¥: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "netlink ନିୟନà­à¬¤à­à¬°à¬£ ଅଧିକାର ପଠାଇବାକୠସକà­à¬°à¬¿à­Ÿ କରିବାରେ ଅସମରà­à¬¥: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
"ସଂଯୋଗ ସà­à¬¥à¬¿à¬¤à¬¿ ଅନà­à­±à­‡à¬·à¬£ କରିବା ପାଇଠnetlink ନିୟନà­à¬¤à­à¬°à¬£ ଦରà­à¬¶à¬¾à¬‡à¬¬à¬¾à¬°à­‡ ଅସମରà­à¬¥: %s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "ସଂଯୋଗ ସà­à¬¥à¬¿à¬¤à¬¿ ଅନà­à­±à­‡à¬·à¬£ କରିବା ପାଇଠnetlink କà­à­Ÿà¬¾à¬¶à­‡ ଦରà­à¬¶à¬¾à¬‡à¬¬à¬¾à¬°à­‡ ଅସମରà­à¬¥: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "netlink ଶà­à¬°à­‡à¬£à­€à¬°à­‡ ମିଶିବାରେ ଅସମରà­à¬¥: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "ସଂଯୋଗ କà­à­Ÿà¬¾à¬¶à­‡ ଅଦà­à­Ÿà¬¤à¬¨ କରିବାରେ ତà­à¬°à­à¬Ÿà¬¿: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager ନେଟୱରà­à¬•à¬—à­à¬¡à¬¼à¬¿à¬•à­ ଅଫ କରିବା ଆବଶà­à­Ÿà¬•"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "ତନà­à¬¤à­à¬°"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3663
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "ବନà­à¬§à¬¨"
-#: ../test/nm-online.c:111
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "ଦଳ"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
+msgid "Bridge"
+msgstr "ବà­à¬°à¬¿à¬œ"
+
+#: ../test/nm-online.c:73
#, c-format
-#| msgid "connecting"
msgid "\rConnecting"
msgstr "\rସଂଯୋଗ କରà­à¬…ଛି"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"à¬à¬• ସଂଯୋଗ ପାଇଠଅପେକà­à¬·à¬¾ କରିବାକୠଥିବା ସମୟ, ସେକଣà­à¬¡à¬°à­‡ (ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤à¬Ÿà¬¿ ହେଉଛି 30)"
+"à¬à¬• ସଂଯୋଗ ସà­à¬¥à¬¾à¬ªà¬¨ ପାଇଠଅପେକà­à¬·à¬¾ ସମୟ, ସେକେଣà­à¬¡à¬°à­‡ (ସେହି ବିକଳà­à¬ª ବିନା, "
+"ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ମୂଲà­à­Ÿà¬Ÿà¬¿ ହେଉଛି 30)"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr ""
-"NetworkManager ଚାଲà­à¬¨à¬¥à¬¿à¬²à­‡ କିମà­à¬¬à¬¾ ସଂଯୋଗ କରà­à¬¨à¬¥à¬¿à¬²à­‡ ସଙà­à¬—à­‡ ସଙà­à¬—à­‡ ପà­à¬°à¬¸à­à¬¥à¬¾à¬¨ କରନà­à¬¤à­"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "NetworkManager ଚାଲà­à¬¨à¬¥à¬¿à¬²à­‡ ସଙà­à¬—à­‡ ସଙà­à¬—à­‡ ପà­à¬°à¬¸à­à¬¥à¬¾à¬¨ କରନà­à¬¤à­"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "କିଛି ମà­à¬¦à­à¬°à¬£ କରନà­à¬¤à­ ନାହିà¬"
-#: ../test/nm-online.c:162
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "NetworkManager ରେ à¬à¬• ସଫଳ ସଂଯୋଗ ପାଇଠଅପେକà­à¬·à¬¾ କରନà­à¬¤à­à¥¤"
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"ପà­à¬°à¬¾à¬°à¬®à­à¬­à¬¿à¬• ନେଟୱରà­à¬• ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ସକà­à¬°à¬¿à­Ÿ କରିସାରିବା ପାଇଠNetworkManager କୠ"
+"ଅପେକà­à¬·à¬¾ କରନà­à¬¤à­à¥¤"
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
-#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
"ଅବୈଧ ବିକଳà­à¬ªà¥¤ ବୈଧ ବିକଳà­à¬ªà¬° ତାଲିକା ଦେଖିବା ପାଇଠଦୟାକରି --help ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤"
-#~ msgid "SCOPE"
-#~ msgstr "SCOPE"
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "ଠିକ ଅଛି"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "ଅସà­à¬¥à¬¾à­Ÿà­€ ଫାଇଲ ସୃଷà­à¬Ÿà¬¿ କରିପାରିଲା ନାହିà¬: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "ସମà­à¬ªà¬¾à¬¦à¬• ବିଫଳ ହୋଇଛି: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ଫାଇଲକୠପà­à¬£à¬¿ ପଢ଼ି ପାରିଲା ନାହିà¬: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ଇଥରନେଟ ସଂଯୋଗ %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi ସଂଯୋଗ %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¼à¬¬à­à­Ÿà¬¾à¬£à­à¬¡"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¼à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ସଂଯୋଗ %d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL ସଂଯୋଗ %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "ତାରଯà­à¬•à­à¬¤"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "ବà­à¬²à­à¬Ÿà­à¬¥"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "OLPC ମେଶ"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "WiMAX"
-#~ msgid "system"
-#~ msgstr "ତନà­à¬¤à­à¬°"
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
-#~ msgid "user"
-#~ msgstr "ଚାଳକ"
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "PCI"
-#~ msgid "System connections"
-#~ msgstr "ତନà­à¬¤à­à¬° ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•"
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "USB"
-#~ msgid "User connections"
-#~ msgstr "ଚାଳକ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•"
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "ବାଛନà­à¬¤à­ ..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "ଯୋଗ କରନà­à¬¤à­"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "ସମà­à¬ªà¬¾à¬¦à¬¨ କରନà­à¬¤à­..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "ଅପସାରଣ କରନà­à¬¤à­"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "'%s' ପà­à¬°à¬•à¬¾à¬°à¬° ସଂଯୋଗ '%s' ପାଇଠସମà­à¬ªà¬¾à¬¦à¬• ନିରà­à¬®à¬¾à¬£ କରିପାରିଲା ନାହିà¬à¥¤"
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "ଅବୈଧ ସଂଯୋଗ '%s' ପାଇଠସମà­à¬ªà¬¾à¬¦à¬• ନିରà­à¬®à¬¾à¬£ କରିପାରିଲା ନାହିà¬à¥¤"
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "ସଂଯୋଗକୠସମà­à¬ªà¬¾à¬¦à¬¨ କରନà­à¬¤à­"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "ସଂଯୋଗ ସଂରକà­à¬·à¬£ କରିବାରେ ତà­à¬°à­à¬Ÿà¬¿: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "ସଂଯୋଗକୠସଂରକà­à¬·à¬£ କରିବାରେ ଅସମରà­à¬¥: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "ନୂତନ ସଂଯୋଗକୠଯୋଡ଼ିବାରେ ଅସମରà­à¬¥: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "ବାତିଲ କରନà­à¬¤à­"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(ପୂରà­à¬¬ ନିରà­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "ବାଇଟ"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "ସକà­à¬°à¬¿à­Ÿ ନକଲ ସଂରକà­à¬·à¬£"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "ପà­à¬°à¬¸à¬¾à¬°à¬£"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "ଅନà­à¬•à­‚ଳ ପରିବହନ ଭାର ସନà­à¬¤à­à¬³à¬¨ (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "ଅନà­à¬•à­‚ଳ ଭାର ସନà­à¬¤à­à¬³à¬¨ (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (ପରାମରà­à¬¶à¬¿à¬¤)"
+
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "ଅନà­à¬—ାମୀ"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "ଧାରା"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "ପà­à¬°à¬¾à¬¥à¬®à¬¿à¬•"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "ଲିଙà­à¬• ନିରିକà­à¬·à¬£"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "ନିରୀକà­à¬·à¬£ ପà­à¬¨à¬°à¬¾à¬¬à­ƒà¬¤à­à¬¤à¬¿"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "ଲିଙà­à¬• ସକà­à¬°à¬¿à­Ÿ ହେବାରେ ବିଳମà­à¬¬"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "ଲିଙà­à¬• ନିଷà­à¬•à­à¬°à¬¿à­Ÿ ହେବାରେ ବିଳମà­à¬¬"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP ଲକà­à¬·à­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬•"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "ବà­à¬°à¬¿à¬œ ପୋରà­à¬Ÿ"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "ଅଗà­à¬°à¬¾à¬§à¬¿à¬•à¬¾à¬°"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "ପଥ ମୂଲà­à­Ÿ"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "ହେୟରପିନ ଧାରା"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "ବà­à¬°à¬¿à¬œ"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "ସେକେଣà­à¬¡"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "à¬à¬œà¬¿à¬™à­à¬— ସମୟ"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP କୠସକà­à¬°à¬¿à­Ÿ କରିଥାଠ(ସà­à¬ªà­‡à¬¨à¬¿à¬™à­à¬— ଟà­à¬°à­€ ପà­à¬°à¬Ÿà­‹à¬•à¬²)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "ଅଗà­à¬°à¬¸à¬°à¬£ ବିଳମà­à¬¬"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "ହୋଲୋ ସମୟ"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "ସରà­à¬¬à¬¾à¬§à¬¿à¬• ଆୟà­"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ଇଥରନେଟ"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "ଅବିକଳ MAC ଠିକଣା"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "ଇନଫିନିବà­à­Ÿà¬¾à¬£à­à¬¡"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "ଡେଟାଗà­à¬°à¬¾à¬®"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "ସଂଯà­à¬•à­à¬¤"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "ପରିବହନ ଧାରା"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "ନିଷà­à¬•à­à¬°à¬¿à­Ÿ"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "ସà­à¬¬à­Ÿà¬‚ଚାଳିତ"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "ସଂଯୋଗ-ସà­à¬¥à¬¾à¬¨à­€à­Ÿ"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "ହସà­à¬¤ ପà­à¬¸à­à¬¤à¬¿à¬•à¬¾"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "ସହଭାଗ"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 ବିନà­à¬¯à¬¾à¬¸"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(କୌଣସି ଇଚà­à¬›à¬¾à¬®à­à¬¤à¬¾à¬¬à¬• ପଥ ନାହିà¬)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "ଗୋଟିଠଇଚà­à¬›à¬¾à¬®à­à¬¤à¬¾à¬¬à¬• ପଥ"
+msgstr[1] "%d ଟି ଇଚà­à¬›à¬¾à¬®à­à¬¤à¬¾à¬¬à¬• ପଥ"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "ଠିକଣାଗà­à¬¡à¬¿à¬•"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "ଗେଟୱେ"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "DNS ସରà­à¬­à¬°"
-#~ msgid "state: %s\n"
-#~ msgstr "ଅବସà­à¬¥à¬¾: %s\n"
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "ସନà­à¬§à¬¾à¬¨ ଡମେନଗà­à¬¡à¬¼à¬¿à¬•"
-#~ msgid "Connection activated\n"
-#~ msgstr "ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿ ହୋଇଛି\n"
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "ରାଉଟିଙà­à¬—"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "ଅବସà­à¬¥à¬¾: %s (%d)\n"
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ରାଉଟ ପାଇଠà¬à¬¹à¬¿ ନେଟୱରà­à¬•à¬•à­ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­ ନାହିà¬"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ପାଇଠସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ଧାରଣ କରିବାରେ ବିଫଳ ହୋଇଛି।"
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "à¬à¬¹à¬¿ ସଂଯୋଗ ପାଇଠIPv4 ଠିକଣା ଆବଶà­à­Ÿà¬•"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ଅବସà­à¬¥à¬¾: %s\n"
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "ଅଗà­à¬°à¬¾à¬¹à­à­Ÿ କରନà­à¬¤à­"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "ସà­à­±à­Ÿà¬‚ଚାଳିତ (କେବଳ DHCP)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 ବିନà­à¬¯à¬¾à¬¸"
+
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "à¬à¬¹à¬¿ ସଂଯୋଗ ପାଇଠIPv6 ଠିକଣା ଆବଶà­à­Ÿà¬•"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "ଲà­à¬šà¬¾à¬¨à­à¬¤à­"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "ଦେଖାନà­à¬¤à­"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "ରୂପରେଖା ନାମ"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "ଉପକରଣ"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "ସà­à¬¬à­Ÿà¬‚ଚାଳିତଭାବରେ ସଂଯୋଗ କରନà­à¬¤à­"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "ସମସà­à¬¤ ଚାଳକ ମାନଙà­à¬• ପାଇଠଉପଲବà­à¬§"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "ଶà­à¬°à­‡à¬£à­€ ପୋରà­à¬Ÿ"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON ବିନà­à¬¯à¬¾à¬¸"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "ଶà­à¬°à­‡à¬£à­€"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "ମୂଖà­à­Ÿ"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "କà­à¬²à¬¾à¬à¬£à­à¬Ÿ"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "ଅଭିଗମà­à­Ÿ ବିନà­à¬¦à­"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "à¬à¬¡-ହକ ନେଟୱରà­à¬•"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "ସà­à¬¬à­Ÿà¬‚ଚାଳିତ"
+
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "କିଛି ନାହିà¬"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 ଉଦà­à¬¦à­‹à¬—"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-ବିଟ କି (Hex କିମà­à¬¬à¬¾ ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-ବିଟ ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "ଗତିଜ WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (ପୂରà­à¬¬ ନିରà­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "ଖୋଲା ତନà­à¬¤à­à¬°"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "ସହଭାଗୀ କି"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "ଚà­à­Ÿà¬¾à¬¨à­‡à¬²"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "ସà­à¬°à¬•à­à¬·à¬¾"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•à­‡à¬¤"
+
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(à¬à¬ªà¬°à­à¬¯à­à­Ÿà¬¨à­à¬¤ wpa-enterprise ପାଇଠକୌଣସି ସହାୟତା ନାହିଠ...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "କି"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP ସୂଚୀ"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "ବୈଧିକରଣ"
+
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(à¬à¬ªà¬°à­à¬¯à­à­Ÿà¬¨à­à¬¤ dynamic-wep ପାଇଠକୌଣସି ସହାୟତା ନାହିଠ...)"
+
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬¾à¬°à­€ ନାମ"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "ପà­à¬°à¬¤à­à­Ÿà­‡à¬• ଥର à¬à¬¹à¬¿ ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତକୠପଚାରନà­à¬¤à­"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ ଦରà­à¬¶à¬¾à¬¨à­à¬¤à­"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "ଗନà­à¬¤à¬¬à­à¬¯ ସà­à¬¥à¬³"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "ଉପସରà­à¬—"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "ପରବରà­à¬¤à­à¬¤à­€ ହପ"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "ମେଟà­à¬°à¬¿à¬•"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "କୌଣସି ଇଚà­à¬›à¬¾à¬°à­‚ପଣ ପଥ ବà­à­Ÿà¬¾à¬–ା କରାଯାଇ ନାହିà¬à¥¤"
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "ପରିଚୟ"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ କି ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "ସରà­à¬­à¬¿à¬¸"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "ବେତାର ନେଟୱରà­à¬• ପାଇଠପà­à¬°à¬¾à¬§à¬¿à¬•à¬°à¬£ ଆବଶà­à­Ÿà¬•"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"ବେତାର ନେଟୱରà­à¬• '%s' କୠଅଭିଗମà­à­Ÿ କରିବା ପାଇଠପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ କିମà­à¬¬à¬¾ ସଂଗà­à¬ªà­à¬¤ "
+"କିଗà­à¬¡à¬¼à¬¿à¬• ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "ତାରଯà­à¬•à­à¬¤ 802.1X ବୈଧିକରଣ"
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "ନେଟୱରà­à¬• ନାମ"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL ବୈଧିକରଣ"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN ସଂକେତ ଆବଶà­à­Ÿà¬•"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ଉପକରଣ ପାଇଠPIN ସଂକେତ ଆବଶà­à­Ÿà¬•"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¼à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ନେଟୱରà­à¬• ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' ସହିତ ସଂଯà­à¬•à­à¬¤ ହେବା ପାଇଠଗୋଟିଠପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ ଆବଶà­à­Ÿà¬•à¥¤"
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "ଆପଣ ଯୋଗ କରିବାକୠଚାହà­à¬à¬¥à¬¿à¬¬à¬¾ ସà­à¬²à­‡à¬­ ସଂଯୋଗ ପà­à¬°à¬•à¬¾à¬°à¬•à­ ବାଛନà­à¬¤à­à¥¤"
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "ଯୋଗ କରନà­à¬¤à­..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "ଅପସାରଣ କରନà­à¬¤à­"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "ସଂଯୋଗ କରà­à¬…ଛି..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "ସଂଯୋଗକୠସକà­à¬°à¬¿à­Ÿ କରିପାରିଲା ନାହିà¬: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "ସକà­à¬°à¬¿à­Ÿ କରନà­à¬¤à­"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "ନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରନà­à¬¤à­"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "ବିଦାୟ ନିଅନà­à¬¤à­"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "'%s' ପରି କୌଣସି ସଂଯୋଗ ନାହିà¬"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "ସଂଯୋଗ ପୂରà­à¬¬à¬°à­ ସକà­à¬°à¬¿à­Ÿ ଅଛି"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "ନିରà­à¬®à¬¾à¬£ କରନà­à¬¤à­"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "ଆପଣ ପà­à¬°à¬¸à­à¬¤à­à¬¤ କରିବାକୠଚାହà­à¬à¬¥à¬¿à¬¬à¬¾ ସଂଯୋଗର ପà­à¬°à¬•à¬¾à¬° ବାଛନà­à¬¤à­à¥¤"
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"ଯଦି ଆପଣ ଗୋଟିଠVPN ସୃଷà­à¬Ÿà¬¿ କରà­à¬›à¬¨à­à¬¤à¬¿, à¬à¬¬à¬‚ ଆପଣ ନିରà­à¬®à¬¾à¬£ କରିବାକୠଚାହà­à¬à¬¥à¬¿à¬¬à¬¾ ସେହି "
+"VPN ସଂଯୋଗ ତାଲିକାରେ ଦେଖାନଯାà¬, ତେବେ ଆପଣଙà­à¬• ପାଖରେ ସଠିକ VPN ପà­à¬²à¬—ଇନ ସà­à¬¥à¬¾à¬ªà¬¿à¬¤ "
+"ନାହିà¬à¥¤"
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "ନୂଆ ସଂଯୋଗ"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "ସଂଯୋଗକୠଅପସାରଣ କରିବାରେ ଅସମରà­à¬¥: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "ସଂଯୋଗ '%s କୠଅପସାରଣ କରିବେ ବୋଲି ଆପଣ ନିଶà­à¬šà¬¿à¬¤ କି?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "ସଂଯୋଗକୠଅପସାରଣ କରିପାରିଲା ନାହିà¬: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "ହୋଷà­à¬Ÿà¬¨à¬¾à¬® ସେଟ କରନà­à¬¤à­"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "ହୋଷà­à¬Ÿ ନାମ"
+
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬•à­ '%s' ଭାବରେ ସେଟ କରନà­à¬¤à­"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "ହୋଷà­à¬Ÿà¬¨à¬¾à¬® ସେଟ କରିବାରେ ଅସମରà­à¬¥: %s"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ପଥ: %s\n"
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "ସଂଯୋଗ"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-SETTINGS"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "ସଂଯୋଗକୠସମà­à¬ªà¬¾à¬¦à¬¨ କରନà­à¬¤à­"
-#~| msgid "IP4-SETTINGS"
-#~ msgid "IP6-SETTINGS"
-#~ msgstr "IP6-SETTINGS"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "ସଂଯୋଗକୠସକà­à¬°à¬¿à­Ÿ କରନà­à¬¤à­"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "ନୂଆ ହୋଷà­à¬Ÿà¬¨à¬¾à¬®"
-#~ msgid "unknown)"
-#~ msgstr "ଅଜଣା)"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "ଗୋଟିଠତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬® ସେଟ କରନà­à¬¤à­"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "ଉପକରଣ ସà­à¬¥à¬¿à¬¤à¬¿: %d (%s)\n"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
-#~ msgid "not set"
-#~ msgstr "ସେଟ ହୋଇନାହିà¬"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "ଦୟାକରି ଗୋଟିଠବିକଳà­à¬ª ବାଛନà­à¬¤à­"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "ଚାଳକ-ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à¬° ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à­ ଅନà­à¬®à¬¤à¬¿ ଦିଅନà­à¬¤à­"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "ବà­à­Ÿà¬¬à¬¹à¬¾à¬° ବିଧି"
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr "ତନà­à¬¤à­à¬° ନିତୀ ତନà­à¬¤à­à¬°-ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ବାରଣ କରିଥାà¬"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬°à¬•à­ ବିଶà­à¬³à­‡à¬·à¬£ କରିପାରିଲା ନାହିà¬"
-#~ msgid "Auto %s"
-#~ msgstr "ସà­à­±à­Ÿà¬‚ %s"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManager ଚାଲà­à¬¨à¬¾à¬¹à¬¿à¬à¥¤"
diff --git a/po/pa.po b/po/pa.po
index 0fd027534..3b8ee457d 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -1213,8 +1213,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:380
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:389
msgid "Encrypted: "
diff --git a/po/pl.po b/po/pl.po
index 5698f7a04..c19a0ee1f 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -7,14 +7,15 @@
# Wadim Dziedzic <wdziedzic@aviary.pl>, 2007-2008.
# Artur Flinta <aflinta@at.kernel.pl>, 2007.
# Tomasz Dominikowski <dominikowski@gmail.com>, 2008-2010.
-# Piotr DrÄ…g <piotrdrag@gmail.com>, 2009-2013.
-# Aviary.pl <gnomepl@aviary.pl>, 2007-2013.
+# Piotr DrÄ…g <piotrdrag@gmail.com>, 2009-2014.
+# Aviary.pl <gnomepl@aviary.pl>, 2007-2014.
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-03-23 18:00+0100\n"
-"PO-Revision-Date: 2013-03-23 18:01+0100\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-06-21 15:16+0000\n"
+"PO-Revision-Date: 2014-06-21 21:00+0200\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n"
@@ -26,345 +27,479 @@ msgstr ""
"X-Poedit-Language: Polish\n"
"X-Poedit-Country: Poland\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:133
-#: ../cli/src/connections.c:167
+#: ../cli/src/common.c:38 ../cli/src/common.c:50 ../cli/src/common.c:58
+#: ../cli/src/common.c:69 ../cli/src/connections.c:193
+#: ../cli/src/connections.c:215
msgid "GROUP"
msgstr "GRUPA"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:39 ../cli/src/common.c:59
msgid "ADDRESS"
msgstr "ADRES"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:40 ../cli/src/common.c:60
msgid "ROUTE"
msgstr "TRASA"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:41 ../cli/src/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:42 ../cli/src/common.c:62
msgid "DOMAIN"
msgstr "DOMENA"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:43
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:51 ../cli/src/common.c:70
msgid "OPTION"
msgstr "OPCJA"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:408 ../cli/src/settings.c:3020
+#: ../cli/src/settings.c:3039
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "nieprawidłowy adres IPv4 \"%s\""
+
+#: ../cli/src/common.c:416
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "nieprawidłowy przedrostek \"%s\"; dozwolone <1-32>"
+
+#: ../cli/src/common.c:423 ../cli/src/common.c:476
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "nieprawidłowa brama \"%s\""
+
+#: ../cli/src/common.c:461 ../cli/src/settings.c:3365
+#: ../cli/src/settings.c:3384
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "nieprawidłowy adres IPv6 \"%s\""
+
+#: ../cli/src/common.c:469
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "nieprawidłowy przedrostek \"%s\"; dozwolone <1-128>"
+
+#: ../cli/src/common.c:552
+#, c-format
+msgid "invalid route destination address '%s'"
+msgstr "nieprawidłowy adres celu trasy \"%s\""
+
+#: ../cli/src/common.c:559
+#, c-format
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "nieprawidłowy przedrostek \"%s\"; dozwolone <1-%d>"
+
+#: ../cli/src/common.c:569
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "nieprawidłowy adres next-hop \"%s\""
+
+#: ../cli/src/common.c:574
+#, c-format
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"drugi składnik trasy (\"%s\") nie jest adresem next-hop ani parametrami"
+
+#: ../cli/src/common.c:584
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "nieprawidłowe parametry \"%s\""
+
+#: ../cli/src/common.c:593
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"nie można dodać domyślnej trasy (usługa NetworkManager sama ją obsługuje)"
+
+#: ../cli/src/common.c:681
msgid "unmanaged"
msgstr "niezarzÄ…dzane"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:683
msgid "unavailable"
msgstr "niedostępne"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:685 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "rozłączono"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:687
msgid "connecting (prepare)"
msgstr "Å‚Ä…czenie (przygotowanie)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:689
msgid "connecting (configuring)"
msgstr "Å‚Ä…czenie (konfigurowanie)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:691
msgid "connecting (need authentication)"
msgstr "Å‚Ä…czenie (wymaga uwierzytelnienia)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:693
msgid "connecting (getting IP configuration)"
msgstr "Å‚Ä…czenie (pobieranie konfiguracji adresu IP)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:695
msgid "connecting (checking IP connectivity)"
msgstr "łączenie (sprawdzanie łączności IP)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:697
msgid "connecting (starting secondary connections)"
msgstr "łączenie (uruchamianie drugorzędnych połączeń)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:699 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "połączono"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:466
+#: ../cli/src/common.c:701 ../cli/src/connections.c:560
msgid "deactivating"
msgstr "deaktywowanie"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:703
msgid "connection failed"
msgstr "połączenie się nie powiodło"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:471
-#: ../cli/src/connections.c:494 ../cli/src/connections.c:1189
-#: ../cli/src/devices.c:664 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:661
-#: ../cli/src/settings.c:689 ../cli/src/settings.c:751 ../cli/src/utils.c:533
-#: ../src/main.c:429 ../src/main.c:448
+#: ../cli/src/common.c:705 ../cli/src/connections.c:565
+#: ../cli/src/connections.c:588 ../cli/src/connections.c:1656
+#: ../cli/src/devices.c:832 ../cli/src/devices.c:2270
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:735 ../cli/src/settings.c:763
+#: ../cli/src/settings.c:825 ../cli/src/settings.c:1141
+#: ../cli/src/utils.c:1122 ../src/main.c:503 ../src/main.c:531
msgid "unknown"
msgstr "nieznane"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:714
msgid "No reason given"
msgstr "Nie podano przyczyny"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:717 ../cli/src/connections.c:2452
+#, c-format
msgid "Unknown error"
msgstr "Nieznany błąd"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:720
msgid "Device is now managed"
msgstr "UrzÄ…dzenie jest teraz zarzÄ…dzane"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:723
msgid "Device is now unmanaged"
msgstr "UrzÄ…dzenie nie jest teraz zarzÄ…dzane"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:726
msgid "The device could not be readied for configuration"
msgstr "Urządzenie nie może zostać odczytane do konfiguracji"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:729
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"Konfiguracja IP nie mogła zostać zastrzeżona (brak dostępnego adresu, czasu "
"oczekiwania itp.)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:732
msgid "The IP configuration is no longer valid"
msgstr "Konfiguracja IP nie jest już prawidłowa"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:735
msgid "Secrets were required, but not provided"
msgstr "Hasła są wymagane, ale nie zostały podane"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:738
msgid "802.1X supplicant disconnected"
msgstr "Suplikant 802.1X został rozłączony"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:741
msgid "802.1X supplicant configuration failed"
msgstr "Konfiguracja suplikanta 802.1X się nie powiodła"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:744
msgid "802.1X supplicant failed"
msgstr "Suplikant 802.1X się nie powiódł"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:747
msgid "802.1X supplicant took too long to authenticate"
msgstr "Suplikant 802.1X za długo się uwierzytelniał"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:750
msgid "PPP service failed to start"
msgstr "Uruchomienie usługi PPP się nie powiodło"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:753
msgid "PPP service disconnected"
msgstr "Rozłączono z usługą PPP"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:756
msgid "PPP failed"
msgstr "Usługa PPP się nie powiodła"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:759
msgid "DHCP client failed to start"
msgstr "Uruchomienie klienta DHCP się nie powiodło"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:762
msgid "DHCP client error"
msgstr "BÅ‚Ä…d klienta DHCP"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:765
msgid "DHCP client failed"
msgstr "Klient DHCP się nie powiódł"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:768
msgid "Shared connection service failed to start"
msgstr "Uruchomienie usługi współdzielenia połączenia się nie powiodło"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:771
msgid "Shared connection service failed"
msgstr "Usługa współdzielenia połączenia się nie powiodła"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:774
msgid "AutoIP service failed to start"
msgstr "Uruchomienie usługi AutoIP się nie powiodło"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:777
msgid "AutoIP service error"
msgstr "Błąd usługi AutoIP"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:780
msgid "AutoIP service failed"
msgstr "Usługa AutoIP się nie powiodła"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:783
msgid "The line is busy"
msgstr "Linia jest zajęta"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:786
msgid "No dial tone"
msgstr "Brak sygnału telefonicznego"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:789
msgid "No carrier could be established"
msgstr "Nie można ustanowić operatora"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:792
msgid "The dialing request timed out"
msgstr "Żądanie zadzwonienia przekroczyło czas oczekiwania"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:795
msgid "The dialing attempt failed"
msgstr "Próba zadzwonienia się nie powiodła"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:798
msgid "Modem initialization failed"
msgstr "Zainicjowanie modemu się nie powiodło"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:801
msgid "Failed to select the specified APN"
msgstr "Wybranie podanego APN się nie powiodło"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:804
msgid "Not searching for networks"
msgstr "Sieci nie sÄ… wyszukiwane"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:807
msgid "Network registration denied"
msgstr "Odmówiono rejestracji sieci"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:810
msgid "Network registration timed out"
msgstr "Przekroczono czas oczekiwania rejestracji sieci"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:813
msgid "Failed to register with the requested network"
msgstr "Zarejestrowanie w żądanej sieci się nie powiodło"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:816
msgid "PIN check failed"
msgstr "Sprawdzenie kodu PIN się nie powiodło"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:819
msgid "Necessary firmware for the device may be missing"
msgstr "Brak wymaganego oprogramowania sprzętowego dla urządzenia"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:822
msgid "The device was removed"
msgstr "Urządzenie zostało usunięte"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:825
msgid "NetworkManager went to sleep"
msgstr "Usługa NetworkManager została uśpiona"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:828
msgid "The device's active connection disappeared"
msgstr "Aktywne połączenie urządzenia zniknęło"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:831
msgid "Device disconnected by user or client"
msgstr "Urządzenie zostało rozłączone przez użytkownika lub klienta"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:834
msgid "Carrier/link changed"
msgstr "Zmieniono operatora/Å‚Ä…cze"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:837
msgid "The device's existing connection was assumed"
msgstr "Przyjęto istniejące połączenie urządzenia"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:840
msgid "The supplicant is now available"
msgstr "Suplikant jest teraz dostępny"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:843
msgid "The modem could not be found"
msgstr "Nie można odnaleźć modemu"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:846
msgid "The Bluetooth connection failed or timed out"
msgstr ""
"Połączenie Bluetooth się nie powiodło lub przekroczyło czas oczekiwania"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:849
msgid "GSM Modem's SIM card not inserted"
msgstr "Karta SIM modemu GSM nie została włożona"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:852
msgid "GSM Modem's SIM PIN required"
msgstr "Wymagany jest kod PIN karty SIM modemu GSM"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:855
msgid "GSM Modem's SIM PUK required"
msgstr "Wymagany jest kod PUK karty SIM modemu GSM"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:858
msgid "GSM Modem's SIM wrong"
msgstr "Karta SIM modemu GSM jest błędna"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:861
msgid "InfiniBand device does not support connected mode"
msgstr "Urządzenie InfiniBand nie obsługuje trybu połączonego"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:864
msgid "A dependency of the connection failed"
msgstr "Zależność połączenia się nie powiodła"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:867
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "Problem z mostkiem ethernetowym RFC 2684 na ADSL"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:870
msgid "ModemManager is unavailable"
msgstr "Usługa ModemManager jest niedostępna"
-#: ../cli/src/common.c:558
+#: ../cli/src/common.c:873
msgid "The Wi-Fi network could not be found"
msgstr "Nie można odnaleźć sieci Wi-Fi"
-#: ../cli/src/common.c:561
+#: ../cli/src/common.c:876
msgid "A secondary connection of the base connection failed"
msgstr "Drugorzędne połączenie połączenia podstawowego się nie powiodło"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:310 ../cli/src/devices.c:328
-#: ../cli/src/devices.c:450 ../cli/src/devices.c:494
+#: ../cli/src/common.c:879
+msgid "DCB or FCoE setup failed"
+msgstr "Ustawienie DCB lub FCoE się nie powiodło"
+
+#: ../cli/src/common.c:882
+msgid "teamd control failed"
+msgstr "kontrola teamd się nie powiodła"
+
+#: ../cli/src/common.c:885
+msgid "Modem failed or no longer available"
+msgstr "Modem się nie powiódł lub nie jest już dostępny"
+
+#: ../cli/src/common.c:888
+msgid "Modem now ready and available"
+msgstr "Modem jest teraz gotowy i dostępny"
+
+#: ../cli/src/common.c:891
+msgid "SIM PIN was incorrect"
+msgstr "Kod PIN karty SIM był niepoprawny"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:895 ../cli/src/devices.c:639
+#: ../libnm-glib/nm-device.c:1814
msgid "Unknown"
msgstr "Nieznane"
+#: ../cli/src/common.c:937
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "nieprawidłowa mapa priorytetów \"%s\""
+
+#: ../cli/src/common.c:944 ../cli/src/common.c:950
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "priorytet \"%s\" jest nieprawidłowy (<0-%ld>)"
+
+#: ../cli/src/common.c:1017
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "\"%s\" nie jest prawidłową konfiguracją zespołu lub nazwą pliku."
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:64
+msgid "Setting name? "
+msgstr "Nazwa ustawienia? "
+
+#: ../cli/src/connections.c:65
+msgid "Property name? "
+msgstr "Nazwa właściwości? "
+
+#: ../cli/src/connections.c:66
+msgid "Enter connection type: "
+msgstr "Proszę podać typ połączenia: "
+
+#. define some other prompts
+#: ../cli/src/connections.c:69
+msgid "Connection type: "
+msgstr "Typ połączenia: "
+
+#: ../cli/src/connections.c:70
+msgid "VPN type: "
+msgstr "Typ VPN: "
+
+#: ../cli/src/connections.c:71
+msgid "Bond master: "
+msgstr "\"Master\" wiÄ…zania: "
+
+#: ../cli/src/connections.c:72
+msgid "Team master: "
+msgstr "\"Master\" zespołu: "
+
+#: ../cli/src/connections.c:73
+msgid "Bridge master: "
+msgstr "\"Master\" mostku: "
+
+#: ../cli/src/connections.c:74
+msgid "Connection (name, UUID, or path): "
+msgstr "Połączenie (nazwa, UUID lub ścieżka): "
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
-#: ../cli/src/devices.c:109 ../cli/src/devices.c:134 ../cli/src/devices.c:144
-#: ../cli/src/devices.c:154 ../cli/src/devices.c:164 ../cli/src/devices.c:180
-#: ../cli/src/devices.c:194 ../cli/src/devices.c:216 ../cli/src/devices.c:232
-#: ../cli/src/devices.c:241
+#: ../cli/src/connections.c:82 ../cli/src/connections.c:194
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:117 ../cli/src/devices.c:127
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:146 ../cli/src/devices.c:161
+#: ../cli/src/devices.c:174 ../cli/src/devices.c:200 ../cli/src/devices.c:215
+#: ../cli/src/devices.c:224
msgid "NAME"
msgstr "NAZWA"
#. 0
#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:83 ../cli/src/connections.c:195
msgid "UUID"
msgstr "UUID"
@@ -372,1028 +507,3115 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
-#: ../cli/src/devices.c:72 ../cli/src/devices.c:111 ../cli/src/devices.c:219
+#: ../cli/src/connections.c:84 ../cli/src/connections.c:216
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:91 ../cli/src/devices.c:203
msgid "TYPE"
msgstr "TYP"
#. 2
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:85
msgid "TIMESTAMP"
msgstr "OKRES-CZASU"
#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:86
msgid "TIMESTAMP-REAL"
msgstr "RZECZYWISTY-OKRES-CZASU"
#. 4
-#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:123
+#. 14
+#: ../cli/src/connections.c:87 ../cli/src/devices.c:104
msgid "AUTOCONNECT"
msgstr "ÅÄ„CZENIE-AUTOMATYCZNE"
#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:88
msgid "READONLY"
msgstr "TYLKO-DO-ODCZYTU"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
-#: ../cli/src/devices.c:74 ../cli/src/devices.c:206 ../cli/src/devices.c:222
+#: ../cli/src/connections.c:89 ../cli/src/connections.c:202
+#: ../cli/src/devices.c:77 ../cli/src/devices.c:190 ../cli/src/devices.c:206
msgid "DBUS-PATH"
-msgstr "ŚCIEŻKA-DO-DBUS"
+msgstr "ŚCIEŻKA-DBUS"
-#. 2
-#: ../cli/src/connections.c:136
-msgid "DEVICES"
-msgstr "URZÄ„DZENIA"
+#. 7
+#. 13
+#. 4
+#: ../cli/src/connections.c:90 ../cli/src/devices.c:188
+#: ../cli/src/devices.c:205
+msgid "ACTIVE"
+msgstr "AKTYWNOŚĆ"
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../cli/src/connections.c:91 ../cli/src/devices.c:74 ../cli/src/devices.c:90
+#: ../cli/src/devices.c:187 ../cli/src/devices.c:204
+msgid "DEVICE"
+msgstr "URZÄ„DZENIE"
+
+#. 9
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:118 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:92 ../cli/src/connections.c:197
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:99
+#: ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STAN"
+#. 10
+#: ../cli/src/connections.c:93
+msgid "ACTIVE-PATH"
+msgstr "AKTYWNA-ŚCIEŻKA"
+
+#. 2
+#: ../cli/src/connections.c:196
+msgid "DEVICES"
+msgstr "URZÄ„DZENIA"
+
#. 4
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:198
msgid "DEFAULT"
msgstr "DOMYÅšLNE"
#. 5
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:199
msgid "DEFAULT6"
msgstr "DOMYÅšLNE6"
#. 6
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:200
msgid "SPEC-OBJECT"
msgstr "KONKRETNY-OBIEKT"
#. 7
-#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:239
+#: ../cli/src/connections.c:3505 ../tui/nm-editor-utils.c:243
+#: ../tui/nmt-connect-connection-list.c:405
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:143
+#. 5
+#. 18
+#: ../cli/src/connections.c:203 ../cli/src/devices.c:80
+#: ../cli/src/devices.c:108
msgid "CON-PATH"
-msgstr "ÅšCIEÅ»KA-DO-POÅÄ„CZENIA"
+msgstr "ÅšCIEÅ»KA-POÅÄ„CZENIA"
#. 10
-#: ../cli/src/connections.c:144
+#: ../cli/src/connections.c:204
msgid "ZONE"
msgstr "STREFA"
#. 11
-#: ../cli/src/connections.c:145
+#: ../cli/src/connections.c:205
msgid "MASTER-PATH"
msgstr "GÅÓWNA-ÅšCIEÅ»KA"
-#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
-msgid "GENERAL"
-msgstr "OGÓLNE"
-
-#. 0
-#: ../cli/src/connections.c:154
-msgid "IP"
-msgstr "IP"
-
#. 1
-#: ../cli/src/connections.c:169
+#: ../cli/src/connections.c:217
msgid "USERNAME"
msgstr "NAZWA-UŻYTKOWNIKA"
#. 2
-#: ../cli/src/connections.c:170
+#: ../cli/src/connections.c:218
msgid "GATEWAY"
msgstr "BRAMA"
#. 3
-#: ../cli/src/connections.c:171
+#: ../cli/src/connections.c:219
msgid "BANNER"
msgstr "BANER"
#. 4
-#: ../cli/src/connections.c:172
+#: ../cli/src/connections.c:220
msgid "VPN-STATE"
msgstr "STAN-VPN"
#. 5
-#: ../cli/src/connections.c:173
+#: ../cli/src/connections.c:221
msgid "CFG"
msgstr "KONFIGURACJA"
-#: ../cli/src/connections.c:195
+#: ../cli/src/connections.c:234 ../cli/src/devices.c:239
+msgid "GENERAL"
+msgstr "OGÓLNE"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:235 ../cli/src/devices.c:246
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:236 ../cli/src/devices.c:247
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:237 ../cli/src/devices.c:248
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:238 ../cli/src/devices.c:249
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:280
#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> "
+"<value>)+\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
"Użycie: nmcli connection { POLECENIE | help }\n"
-" POLECENIE := { list | status | up | down | delete }\n"
+" POLECENIE := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <identyfikator>] ...\n"
+"\n"
+" up [id | uuid | path] <identyfikator> [ifname <nazwa-interfejsu>] [ap "
+"<BSSID>] [nsp <name>]\n"
+"\n"
+" up [id | uuid | path] <identyfikator> [ifname <nazwa-interfejsu>] [ap "
+"<BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <identyfikator>\n"
+"\n"
+" add WSPÓLNE_OPCJE OPCJE_DLA_KONKRETNYCH_TYPÓW OPCJE_IP\n"
"\n"
-" list [id <identyfikator> | uuid <identyfikator>]\n"
-" status [id <identyfikator> | uuid <identyfikator> | path <ścieżka>]\n"
-" up id <identyfikator> | uuid <identyfikator> [iface <interfejs>] [ap "
-"<BSSID>] [nsp <nazwa>] [--nowait] [--timeout <czas>]\n"
-" up id <identyfikator> | uuid <identyfikator> [iface <interfejs>] [ap "
-"<BSSID>] [--nowait] [--timeout <timeout>]\n"
-" down id <identyfikator> | uuid <identyfikator>\n"
-" delete id <identyfikator> | uuid <identyfikator>\n"
+" modify [--temporary] [id | uuid | path] <identyfikator> ([+|-]<ustawienie>."
+"<właściwość> <wartość>)+\n"
+"\n"
+" edit [id | uuid | path] <identyfikator>\n"
+" edit [type <typ_nowego_połączenia>] [con-name <nazwa_nowego_połączenia>]\n"
+"\n"
+" delete [id | uuid | path] <identyfikator>\n"
+"\n"
+" reload\n"
+"\n"
+" load <nazwa_pliku> [ <nazwa_pliku>... ]\n"
"\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:442
+#: ../cli/src/connections.c:302
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "BÅ‚Ä…d: \"con list\": %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"List in-memory and on-disk connection profiles, some of which may also be\n"
+"active if a device is using that connection profile. Without a parameter, "
+"all\n"
+"profiles are listed. When --active option is specified, only the active\n"
+"profiles are shown.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Show details for specified connections. By default, both static "
+"configuration\n"
+"and active connection data are displayed. It is possible to filter the "
+"output\n"
+"using global '--fields' option. Refer to the manual page for more "
+"information.\n"
+"When --active option is specified, only the active profiles are taken into\n"
+"account.\n"
+msgstr ""
+"Użycie: nmcli connection show { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [--active]\n"
+"\n"
+"Wyświetla listę wszystkich profili połączeń w pamięci i na dysku, z których\n"
+"niektóre mogą być aktywne, jeśli urządzenie używa danego profilu. Bez\n"
+"parametru wszystkie profile zostaną wyświetlone. Podanie opcji --active\n"
+"spowoduje wyświetlenie tylko aktywnych profili.\n"
+"\n"
+"PARAMETRY := [--active] [id | uuid | path | apath] <identyfikator>...\n"
+"\n"
+"Wyświetla szczegóły podanych połączeń. Domyślnie wyświetlane są dane\n"
+"statycznej konfiguracji i aktywnego połączenia. Można filtrować wyjście\n"
+"używając globalnej opcji \"--fields\". Na stronie podręcznika znajduje się\n"
+"więcej informacji. Podanie opcji --active spowoduje uwzględnienie tylko\n"
+"aktywnych profili.\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
+#: ../cli/src/connections.c:324
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"con list\": %s; dozwolone pola: %s"
-
-#: ../cli/src/connections.c:266
-msgid "Connection details"
-msgstr "Szczegóły połączenia"
-
-#: ../cli/src/connections.c:317
-msgid "never"
-msgstr "nigdy"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection up { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [id | uuid | path] <identyfikator> [ifname <nazwa-interfejsu>] "
+"[ap <BSSID>] [nsp <nazwa>]\n"
+"\n"
+"Aktywuje połączenie na urządzeniu. Profil do aktywowania jest\n"
+"identyfikowany po swojej nazwie, UUID lub ścieżce D-Bus.\n"
+"\n"
+"PARAMETRY := ifname <nazwa-interfejsu> [ap <BSSID>] [nsp <nazwa>]\n"
+"\n"
+"Aktywuje urządzenie z połączeniem. Profil połączenia jest wybierany\n"
+"automatycznie przez usługę NetworkManager.\n"
+"\n"
+"ifname - podaje urządzenie, na którym aktywować połączenie\n"
+"ap - podaje AP, z którym połączyć (prawidłowe tylko dla Wi-Fi)\n"
+"nsp - podaje NSP, z którym połączyć (prawidłowe tylko dla WiMAX)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
-#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
-#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
-#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
-#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
-#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
-#: ../cli/src/network-manager.c:267 ../cli/src/settings.c:866
-#: ../cli/src/settings.c:941 ../cli/src/settings.c:1076
-#: ../cli/src/settings.c:1166 ../cli/src/settings.c:1376
-#: ../cli/src/settings.c:1377 ../cli/src/settings.c:1379
-#: ../cli/src/settings.c:1381 ../cli/src/settings.c:1382
-#: ../cli/src/settings.c:1513 ../cli/src/settings.c:1514
-#: ../cli/src/settings.c:1515 ../cli/src/settings.c:1516
-#: ../cli/src/settings.c:1594 ../cli/src/settings.c:1595
-#: ../cli/src/settings.c:1596 ../cli/src/settings.c:1597
-#: ../cli/src/settings.c:1598 ../cli/src/settings.c:1599
-#: ../cli/src/settings.c:1600 ../cli/src/settings.c:1601
-#: ../cli/src/settings.c:1602 ../cli/src/settings.c:1603
-#: ../cli/src/settings.c:1604 ../cli/src/settings.c:1605
-#: ../cli/src/settings.c:1606 ../cli/src/settings.c:1688
-#: ../cli/src/settings.c:2044 ../cli/src/settings.c:2081
-msgid "yes"
-msgstr "tak"
+#: ../cli/src/connections.c:345
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection down { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [id | uuid | path | apath] <identyfikator>\n"
+"\n"
+"Deaktywuje połączenie z urządzenia (bez uniemożliwienia urządzeniu ponownej\n"
+" automatycznej aktywacji). Profil do deaktywowania jest identyfikowany po\n"
+"swojej nazwie, UUID lub ścieżce D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
-#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
-#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
-#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
-#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
-#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
-#: ../cli/src/network-manager.c:269 ../cli/src/settings.c:866
-#: ../cli/src/settings.c:868 ../cli/src/settings.c:941
-#: ../cli/src/settings.c:1076 ../cli/src/settings.c:1166
-#: ../cli/src/settings.c:1376 ../cli/src/settings.c:1377
-#: ../cli/src/settings.c:1379 ../cli/src/settings.c:1381
-#: ../cli/src/settings.c:1382 ../cli/src/settings.c:1513
-#: ../cli/src/settings.c:1514 ../cli/src/settings.c:1515
-#: ../cli/src/settings.c:1516 ../cli/src/settings.c:1594
-#: ../cli/src/settings.c:1595 ../cli/src/settings.c:1596
-#: ../cli/src/settings.c:1597 ../cli/src/settings.c:1598
-#: ../cli/src/settings.c:1599 ../cli/src/settings.c:1600
-#: ../cli/src/settings.c:1601 ../cli/src/settings.c:1602
-#: ../cli/src/settings.c:1603 ../cli/src/settings.c:1604
-#: ../cli/src/settings.c:1605 ../cli/src/settings.c:1606
-#: ../cli/src/settings.c:1688 ../cli/src/settings.c:2044
-#: ../cli/src/settings.c:2081
-msgid "no"
-msgstr "nie"
+#: ../cli/src/connections.c:358
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname, or connection UUID or name)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" bridge-slave: master <master (ifname, or connection UUID or name)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection add { PARAMETRY | help }\n"
+" OPCJE := WSPÓLNE_OPCJE OPCJE_DLA_KONKRETNYCH_TYPÓW OPCJE_IP\n"
+"\n"
+" WSPÓLNE_OPCJE:\n"
+" type <typ>\n"
+" ifname <nazwa interfejsu> | \"*\"\n"
+" [con-name <nazwa połączenia>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" OPCJE_DLA_KONKRETNYCH_TYPÓW:\n"
+" ethernet: [mac <adres MAC>]\n"
+" [cloned-mac <sklonowany adres MAC>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <adres MAC>]\n"
+" [cloned-mac <sklonowany adres MAC>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <adres MAC>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <nazwa użytkownika PPPoE>\n"
+" [password <hasło PPPoE>]\n"
+" [service <nazwa usługi PPPoE>]\n"
+" [mtu <MTU>]\n"
+" [mac <adres MAC>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <nazwa użytkownika>]\n"
+" [password <hasło>]\n"
+"\n"
+" cdma: [user <nazwa użytkownika>]\n"
+" [password <hasło>]\n"
+"\n"
+" infiniband: [mac <adres MAC>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <nazwa interfejsu>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <adres Bluetooth>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <urządzenie nadrzędne (UUID połączenia, nazwa "
+"interfejsu lub MAC)>\n"
+" [id <identyfikator VLAN>]\n"
+" [flags <flagi VLAN>]\n"
+" [ingress <wejściowe mapowanie priorytetów>]\n"
+" [egress <wyjściowe mapowanie priorytetów>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <nazwa interfejsu>]\n"
+" [miimon <numer>]\n"
+" [downdelay <numer>]\n"
+" [updelay <numer>]\n"
+" [arp-interval <numer>]\n"
+" [arp-ip-target <numer>]\n"
+"\n"
+" bond-slave: master <master (nazwa interfejsu, UUID połączenia lub "
+"naza)>\n"
+"\n"
+" team: [config <konfiguracja JSON>]\n"
+"\n"
+" team-slave: master <master (nazwa interfejsu, UUID połączenia lub "
+"nazwa)>\n"
+" [config <konfiguracja JSON>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <numer>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+" [mac <adres MAC>]\n"
+"\n"
+" bridge-slave: master <master (nazwa interfejsu lub UUID połączenia)\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
+" [user <nazwa użytkownika>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <adres MAC>]\n"
+"\n"
+" OPCJE_IP:\n"
+" [ip4 <adres IPv4>] [gw4 <brama IPv4>]\n"
+" [ip6 <adres IPv6>] [gw6 <brama IPv6>]\n"
-#: ../cli/src/connections.c:393
-msgid "Connection list"
-msgstr "Lista połączeń"
-
-#: ../cli/src/connections.c:406 ../cli/src/connections.c:948
-#: ../cli/src/connections.c:1486 ../cli/src/connections.c:1501
-#: ../cli/src/connections.c:1510 ../cli/src/connections.c:1520
-#: ../cli/src/connections.c:1532 ../cli/src/connections.c:1641
-#: ../cli/src/connections.c:1743 ../cli/src/devices.c:1192
-#: ../cli/src/devices.c:1202 ../cli/src/devices.c:1320
-#: ../cli/src/devices.c:1328 ../cli/src/devices.c:1692
-#: ../cli/src/devices.c:1699 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1720 ../cli/src/devices.c:1737
-#: ../cli/src/devices.c:1748 ../cli/src/devices.c:1969
-#: ../cli/src/devices.c:1976
+#: ../cli/src/connections.c:437
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "BÅ‚Ä…d: brak parametru %s."
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
+"\n"
+"Modify one or more properties of the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path. For multi-valued\n"
+"properties you can use optional '+' or '-' prefix to the property name.\n"
+"The '+' sign allows appending items instead of overwriting the whole value.\n"
+"The '-' sign allows removing selected items instead of the whole value.\n"
+"\n"
+"Examples:\n"
+"nmcli con mod home-wifi wifi.ssid rakosnicek\n"
+"nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.2/24, "
+"10.10.1.5/8\"\n"
+"nmcli con mod em1-1 +ipv4.dns 8.8.4.4\n"
+"nmcli con mod em1-1 -ipv4.dns 1\n"
+"nmcli con mod em1-1 -ipv6.addr \"abbe::cafe/56\"\n"
+"nmcli con mod bond0 +bond.options mii=500\n"
+"nmcli con mod bond0 -bond.options downdelay\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection modify { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [id | uuid | path] <identyfikator> ([+|-]<ustawienie>."
+"<właściwość> <wartość>)+\n"
+"\n"
+"Modyfikuje jedną lub więcej właściwości profilu połączenia.\n"
+"Profil jest identyfikowany po swojej nazwie, UUID lub ścieżce D-Bus.\n"
+"Właściwości o wielu wartościach mogą używać opcjonalnych przedrostków \"+\"\n"
+"lub \"-\" przed nazwą właściwości. Znak \"+\" umożliwia dołączanie\n"
+"elementów zamiast zastępowania całego wartości. Znak \"-\" umożliwia\n"
+"usuwanie zaznaczonych elementów zamiast całej wartości.\n"
+"\n"
+"Przykłady:\n"
+"nmcli con mod home-wifi wifi.ssid rakosnicek\n"
+"nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.2/24, "
+"10.10.1.5/8\"\n"
+"nmcli con mod em1-1 +ipv4.dns 8.8.4.4\n"
+"nmcli con mod em1-1 -ipv4.dns 1\n"
+"nmcli con mod em1-1 -ipv6.addr \"abbe::cafe/56\"\n"
+"nmcli con mod bond0 +bond.options mii=500\n"
+"nmcli con mod bond0 -bond.options downdelay\n"
+"\n"
-#: ../cli/src/connections.c:419
+#: ../cli/src/connections.c:461
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Błąd: %s - nie ma takiego połączenia."
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection edit { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [id | uuid | path] <identyfikator>\n"
+"\n"
+"Modyfikuje istniejący profil połączenia w interaktywnym edytorze.\n"
+"Profil jest identyfikowany po swojej nazwie, UUID lub ścieżce D-Bus\n"
+"\n"
+"PARAMETRY := [type <typ nowego połączenia>] [con-name <nazwa nowego "
+"połączenia>]\n"
+"\n"
+"Dodaje nowy profil połączenia w interaktywnym edytorze.\n"
+"\n"
-#: ../cli/src/connections.c:425 ../cli/src/connections.c:1545
-#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1750
-#: ../cli/src/devices.c:976 ../cli/src/devices.c:1056
-#: ../cli/src/devices.c:1216 ../cli/src/devices.c:1334
-#: ../cli/src/devices.c:1761 ../cli/src/devices.c:1982
+#: ../cli/src/connections.c:477
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Nieznany parametr: %s\n"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection delete { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [id | uuid | path] <identyfikator>\n"
+"\n"
+"Usuwa profil połączenia.\n"
+"Profil jest identyfikowany po swojej nazwie, UUID lub ścieżce D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:434
+#: ../cli/src/connections.c:489
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Błąd: nie podano prawidłowego parametru."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection reload { help }\n"
+"\n"
+"Wczytuje ponownie wszystkie pliki połączeń z dysku.\n"
+"\n"
-#: ../cli/src/connections.c:449 ../cli/src/connections.c:1846
-#: ../cli/src/devices.c:2193 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:498
#, c-format
-msgid "Error: %s."
-msgstr "BÅ‚Ä…d: %s."
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli connection load { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := <nazwa-pliku> [<nazwa-pliku>...]\n"
+"\n"
+"Wczytuje/wczytuje ponownie jeden lub więcej plików połączeń z dysku. Należy\n"
+"tego użyć po ręcznym modyfikowaniu pliku połączenia aby się upewnić, że\n"
+"usługa NetworkManager zna jego najnowszy stan.\n"
+"\n"
-#: ../cli/src/connections.c:462
+#: ../cli/src/connections.c:556
msgid "activating"
msgstr "aktywowanie"
-#: ../cli/src/connections.c:464
+#: ../cli/src/connections.c:558
msgid "activated"
msgstr "aktywowano"
-#: ../cli/src/connections.c:468
+#: ../cli/src/connections.c:562
msgid "deactivated"
msgstr "deaktywowano"
-#: ../cli/src/connections.c:480
+#: ../cli/src/connections.c:574
msgid "VPN connecting (prepare)"
msgstr "ÅÄ…czenie z VPN (przygotowanie)"
-#: ../cli/src/connections.c:482
+#: ../cli/src/connections.c:576
msgid "VPN connecting (need authentication)"
msgstr "ÅÄ…czenie z VPN (wymaga uwierzytelnienia)"
-#: ../cli/src/connections.c:484
+#: ../cli/src/connections.c:578
msgid "VPN connecting"
msgstr "ÅÄ…czenie z VPN"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:580
msgid "VPN connecting (getting IP configuration)"
msgstr "ÅÄ…czenie z VPN (pobieranie konfiguracji adresu IP)"
-#: ../cli/src/connections.c:488
+#: ../cli/src/connections.c:582
msgid "VPN connected"
msgstr "Połączono z VPN"
-#: ../cli/src/connections.c:490
+#: ../cli/src/connections.c:584
msgid "VPN connection failed"
msgstr "Połączenie z VPN się nie powiodło"
-#: ../cli/src/connections.c:492
+#: ../cli/src/connections.c:586
msgid "VPN disconnected"
msgstr "Rozłączono z VPN"
-#: ../cli/src/connections.c:548 ../cli/src/connections.c:558
+#: ../cli/src/connections.c:669
+msgid "Connection profile details"
+msgstr "Szczegóły profilu połączenia"
+
+#: ../cli/src/connections.c:681 ../cli/src/connections.c:1033
+#, c-format
+msgid "Error: 'connection show': %s"
+msgstr "BÅ‚Ä…d: \"connection show\": %s"
+
+#: ../cli/src/connections.c:825
+msgid "never"
+msgstr "nigdy"
+
+#. "CAPABILITIES"
+#: ../cli/src/connections.c:826 ../cli/src/connections.c:827
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:888
+#: ../cli/src/connections.c:889 ../cli/src/connections.c:891
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:6572
+#: ../cli/src/connections.c:6573 ../cli/src/devices.c:609
+#: ../cli/src/devices.c:659 ../cli/src/devices.c:801 ../cli/src/devices.c:802
+#: ../cli/src/devices.c:803 ../cli/src/devices.c:836 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/devices.c:867 ../cli/src/devices.c:868
+#: ../cli/src/devices.c:869 ../cli/src/devices.c:870 ../cli/src/devices.c:871
+#: ../cli/src/network-manager.c:442
+msgid "yes"
+msgstr "tak"
+
+#: ../cli/src/connections.c:826 ../cli/src/connections.c:827
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:888
+#: ../cli/src/connections.c:889 ../cli/src/connections.c:891
+#: ../cli/src/connections.c:2842 ../cli/src/connections.c:6572
+#: ../cli/src/connections.c:6573 ../cli/src/devices.c:609
+#: ../cli/src/devices.c:659 ../cli/src/devices.c:801 ../cli/src/devices.c:802
+#: ../cli/src/devices.c:803 ../cli/src/devices.c:836 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/devices.c:867 ../cli/src/devices.c:868
+#: ../cli/src/devices.c:869 ../cli/src/devices.c:870 ../cli/src/devices.c:871
+#: ../cli/src/network-manager.c:444
+msgid "no"
+msgstr "nie"
+
+#: ../cli/src/connections.c:884 ../cli/src/connections.c:894
+#: ../cli/src/devices.c:599
msgid "N/A"
msgstr "Nie dotyczy"
-#: ../cli/src/connections.c:752 ../cli/src/connections.c:976
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "BÅ‚Ä…d: \"con status\": %s"
+#: ../cli/src/connections.c:1021
+msgid "Activate connection details"
+msgstr "Szczegóły aktywowania połączenia"
-#: ../cli/src/connections.c:754 ../cli/src/connections.c:978
+#: ../cli/src/connections.c:1254
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"con status\": %s; dozwolone pola: %s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "nieprawidłowe pole \"%s\"; dozwolone pola: %s i %s, albo %s,%s"
-#: ../cli/src/connections.c:762
-msgid "Active connection details"
-msgstr "Szczegóły aktywnego połączenia"
-
-#: ../cli/src/connections.c:898 ../cli/src/connections.c:1560
-#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1764
-#: ../cli/src/devices.c:1003 ../cli/src/devices.c:1065
-#: ../cli/src/devices.c:1231 ../cli/src/devices.c:1364
-#: ../cli/src/devices.c:1783 ../cli/src/devices.c:2011
-#: ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1269 ../cli/src/connections.c:1277
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr ""
-"Błąd: nie można ustalić, czy usługa NetworkManager jest uruchomiona: %s."
+msgid "'%s' has to be alone"
+msgstr "\"%s\" musi być same"
-#: ../cli/src/connections.c:902 ../cli/src/connections.c:1564
-#: ../cli/src/connections.c:1677 ../cli/src/connections.c:1768
-#: ../cli/src/devices.c:1007 ../cli/src/devices.c:1069
-#: ../cli/src/devices.c:1235 ../cli/src/devices.c:1368
-#: ../cli/src/devices.c:1787 ../cli/src/devices.c:2015
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1308 ../cli/src/connections.c:2032
+#: ../cli/src/connections.c:2092 ../cli/src/connections.c:8072
+#: ../cli/src/connections.c:8280 ../cli/src/connections.c:8373
+#: ../cli/src/connections.c:8401 ../cli/src/devices.c:1202
+#: ../cli/src/devices.c:1250 ../cli/src/devices.c:1413
+#: ../cli/src/devices.c:1547 ../cli/src/devices.c:1684
+#: ../cli/src/devices.c:2128 ../cli/src/devices.c:2427
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Błąd: usługa NetworkManager nie jest uruchomiona."
-#: ../cli/src/connections.c:934
-msgid "Active connections"
-msgstr "Aktywne połączenia"
+#. Add headers
+#: ../cli/src/connections.c:1338
+msgid "NetworkManager active profiles"
+msgstr "Aktywne profile usługi NetworkManager"
+
+#: ../cli/src/connections.c:1339
+msgid "NetworkManager connection profiles"
+msgstr "Profile połączeń usługi NetworkManager"
+
+#: ../cli/src/connections.c:1376 ../cli/src/connections.c:1977
+#: ../cli/src/connections.c:1993 ../cli/src/connections.c:2002
+#: ../cli/src/connections.c:2012 ../cli/src/connections.c:2109
+#: ../cli/src/connections.c:8088 ../cli/src/connections.c:8311
+#: ../cli/src/devices.c:1642 ../cli/src/devices.c:1650
+#: ../cli/src/devices.c:2041 ../cli/src/devices.c:2048
+#: ../cli/src/devices.c:2062 ../cli/src/devices.c:2069
+#: ../cli/src/devices.c:2086 ../cli/src/devices.c:2094
+#: ../cli/src/devices.c:2290 ../cli/src/devices.c:2386
+#: ../cli/src/devices.c:2393
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "BÅ‚Ä…d: brak parametru %s."
-#: ../cli/src/connections.c:959
+#: ../cli/src/connections.c:1427
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "Błąd: \"%s\" nie jest aktywnym połączeniem."
+msgid "Error: %s - no such connection profile."
+msgstr "Błąd: %s - nie ma takiego profilu połączenia."
-#: ../cli/src/connections.c:964
+#: ../cli/src/connections.c:1443 ../cli/src/connections.c:2045
+#: ../cli/src/connections.c:8379 ../cli/src/connections.c:8420
+#: ../cli/src/connections.c:8625 ../cli/src/devices.c:2269
+#: ../cli/src/devices.c:2714 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "BÅ‚Ä…d nieznany parametr: %s"
+msgid "Error: %s."
+msgstr "BÅ‚Ä…d: %s."
-#: ../cli/src/connections.c:1071
+#: ../cli/src/connections.c:1538
#, c-format
msgid "no active connection on device '%s'"
msgstr "brak aktywnych połączeń na urządzeniu \"%s\""
-#: ../cli/src/connections.c:1079
+#: ../cli/src/connections.c:1546
msgid "no active connection or device"
msgstr "brak aktywnych połączeń na urządzeń"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1617
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "urządzenie \"%s\" nie jest zgodne z połączeniem \"%s\""
-#: ../cli/src/connections.c:1153
+#: ../cli/src/connections.c:1620
#, c-format
msgid "no device found for connection '%s'"
msgstr "nie odnaleziono urządzenia dla połączenia \"%s\""
-#: ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:1632
msgid "unknown reason"
msgstr "nieznany powód"
-#: ../cli/src/connections.c:1167
+#: ../cli/src/connections.c:1634 ../cli/src/network-manager.c:288
msgid "none"
msgstr "brak"
-#: ../cli/src/connections.c:1169
+#: ../cli/src/connections.c:1636
msgid "the user was disconnected"
msgstr "użytkownik został rozłączony"
-#: ../cli/src/connections.c:1171
+#: ../cli/src/connections.c:1638
msgid "the base network connection was interrupted"
msgstr "podstawowe połączenie sieciowe zostało przerwane"
-#: ../cli/src/connections.c:1173
+#: ../cli/src/connections.c:1640
msgid "the VPN service stopped unexpectedly"
msgstr "usługa VPN została nieoczekiwanie zatrzymana"
-#: ../cli/src/connections.c:1175
+#: ../cli/src/connections.c:1642
msgid "the VPN service returned invalid configuration"
msgstr "usługa VPN zwróciła nieprawidłową konfigurację"
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1644
msgid "the connection attempt timed out"
msgstr "próba połączenia przekroczyła czas oczekiwania"
-#: ../cli/src/connections.c:1179
+#: ../cli/src/connections.c:1646
msgid "the VPN service did not start in time"
msgstr "usługa VPN nie została uruchomiona w czasie"
-#: ../cli/src/connections.c:1181
+#: ../cli/src/connections.c:1648
msgid "the VPN service failed to start"
msgstr "uruchomienie usługi VPN się nie powiodło"
-#: ../cli/src/connections.c:1183
+#: ../cli/src/connections.c:1650
msgid "no valid VPN secrets"
msgstr "brak prawidłowych haseł VPN"
-#: ../cli/src/connections.c:1185
+#: ../cli/src/connections.c:1652
msgid "invalid VPN secrets"
msgstr "nieprawidłowe hasła VPN"
-#: ../cli/src/connections.c:1187
+#: ../cli/src/connections.c:1654
msgid "the connection was removed"
msgstr "połączenie zostało usunięte"
-#: ../cli/src/connections.c:1204 ../cli/src/connections.c:1409
+#: ../cli/src/connections.c:1671 ../cli/src/connections.c:1827
+#: ../cli/src/connections.c:6468
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
"Połączenie zostało pomyślnie aktywowane (ścieżka aktywacji D-Bus: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1209 ../cli/src/connections.c:1310
+#: ../cli/src/connections.c:1676
#, c-format
msgid "Error: Connection activation failed."
msgstr "Błąd: aktywacja połączenia się nie powiodła."
-#: ../cli/src/connections.c:1234
+#: ../cli/src/connections.c:1701
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
"Połączenie VPN zostało pomyślnie aktywowane (ścieżka aktywacji D-Bus: %s)\n"
-#: ../cli/src/connections.c:1242
+#: ../cli/src/connections.c:1708
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Błąd: aktywacja połączenia się nie powiodła: %s."
-#: ../cli/src/connections.c:1339 ../cli/src/devices.c:1125
+#: ../cli/src/connections.c:1726 ../cli/src/devices.c:1299
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "BÅ‚Ä…d: przekroczono czas oczekiwania o %d sekund."
-#: ../cli/src/connections.c:1400
+#: ../cli/src/connections.c:1791
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Błąd: urządzenie \"%s\" oczekuje na podrzędne przed kontynuowaniem aktywacji."
+
+#: ../cli/src/connections.c:1811
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Błąd: aktywacja połączenia się nie powiodła: %s"
-#: ../cli/src/connections.c:1494 ../cli/src/connections.c:1649
-#: ../cli/src/connections.c:1777
-#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Błąd: nieznane połączenie: %s."
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:2046
+msgid "unknown error"
+msgstr "nieznany błąd"
-#: ../cli/src/connections.c:1540 ../cli/src/devices.c:1210
-#: ../cli/src/devices.c:1756
+#: ../cli/src/connections.c:1924
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Błąd: wartość czasu oczekiwania \"%s\" jest nieprawidłowa."
+msgid "unknown device '%s'."
+msgstr "nieznane urzÄ…dzenie \"%s\"."
-#: ../cli/src/connections.c:1553 ../cli/src/connections.c:1666
-#: ../cli/src/connections.c:1757
+#: ../cli/src/connections.c:1929
+msgid "neither a valid connection nor device given"
+msgstr "nie podano prawidłowego połączenia ani urządzenia"
+
+#: ../cli/src/connections.c:2021 ../cli/src/devices.c:1176
+#: ../cli/src/devices.c:1656 ../cli/src/devices.c:2105
+#: ../cli/src/devices.c:2399
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Błąd: należy podać identyfikator lub UUID."
+msgid "Unknown parameter: %s\n"
+msgstr "Nieznany parametr: %s\n"
+
+#: ../cli/src/connections.c:2054
+msgid "preparing"
+msgstr "przygotowywanie"
-#: ../cli/src/connections.c:1586
+#: ../cli/src/connections.c:2082 ../cli/src/connections.c:8292
+#: ../cli/src/connections.c:8407
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "BÅ‚Ä…d: nie odnaleziono odpowiedniego urzÄ…dzenia: %s."
+msgid "Error: No connection specified."
+msgstr "Błąd: nie podano połączenia."
-#: ../cli/src/connections.c:1588
+#: ../cli/src/connections.c:2119
#, c-format
-msgid "Error: No suitable device found."
-msgstr "BÅ‚Ä…d: nie odnaleziono odpowiedniego urzÄ…dzenia."
+msgid "Error: '%s' is not an active connection."
+msgstr "Błąd: \"%s\" nie jest aktywnym połączeniem."
-#: ../cli/src/connections.c:1702
+#: ../cli/src/connections.c:2431 ../cli/src/utils.c:515
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Ostrzeżenie: połączenie nie jest aktywne\n"
+msgid "'%s' not among [%s]"
+msgstr "\"%s\" nie jest w [%s]"
-#: ../cli/src/connections.c:1716
+#: ../cli/src/connections.c:2513
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "Błąd: usunięcie połączenia się nie powiodło: %s"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Błąd: \"%s\": \"%s\" nie jest prawidłowym adresem MAC %s."
-#: ../cli/src/connections.c:1837
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2514 ../cli/src/connections.c:2957
+#: ../libnm-glib/nm-device.c:1802 ../tui/nm-editor-utils.c:173
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2514 ../libnm-glib/nm-device.c:1790
+#: ../tui/nm-editor-utils.c:156
+msgid "Ethernet"
+msgstr "Ethernet"
+
+#: ../cli/src/connections.c:2537
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Błąd: polecenie \"con\" \"%s\" jest nieprawidłowe."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Błąd: \"mtu\": \"%s\" nie jest prawidłowym MTU."
-#: ../cli/src/connections.c:1905
+#: ../cli/src/connections.c:2553
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Błąd: nie można połączyć się z D-Bus."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Błąd: \"parent\": \"%s\" nie jest prawidłową nazwą interfejsu."
-#: ../cli/src/connections.c:1913
+#: ../cli/src/connections.c:2574
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Błąd: nie można uzyskać ustawień systemu."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Błąd: \"p-key\": \"%s\" nie jest prawidłowym P_KEY InfiniBand."
-#: ../cli/src/connections.c:1923
+#: ../cli/src/connections.c:2603
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
msgstr ""
-"Błąd: nie można uzyskać połączeń: usługa ustawień nie jest uruchomiona."
+"Błąd: \"mode\": \"%s\" nie jest prawidłowym trybem transportu InfiniBand "
+"[datagram, connected]."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:204
-#: ../cli/src/devices.c:220
-msgid "DEVICE"
-msgstr "URZÄ„DZENIE"
+#: ../cli/src/connections.c:2617
+#, c-format
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Błąd: \"flags\": \"%s\" jest nieprawidłowe; należy użyć <0-7>."
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "MOŻLIWOŚCI"
+#: ../cli/src/connections.c:2639
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Błąd: \"%s\": \"%s\" jest nieprawidłowe; %s "
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "WÅAÅšCIWOÅšCI-WIFI"
+#: ../cli/src/connections.c:2832
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Błąd: \"%s\": \"%s\" jest nieprawidłowe; należy użyć <%u-%u>."
-#. 2
-#. 5
-#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
-msgid "AP"
-msgstr "PUNKT-DOSTĘPOWY"
+#. Ask for optional arguments.
+#: ../cli/src/connections.c:2888
+#, c-format
+msgid "There is %d optional argument for '%s' connection type.\n"
+msgid_plural "There are %d optional arguments for '%s' connection type.\n"
+msgstr[0] "Istnieje %d opcjonalny parametr dla typu połączenia \"%s\".\n"
+msgstr[1] "Istnieją %d opcjonalne parametry dla typu połączenia \"%s\".\n"
+msgstr[2] "Istnieje %d opcjonalnych parametrów dla typu połączenia \"%s\".\n"
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "WÅAÅšCIWOÅšCI-POÅÄ„CZENIA-PRZEWODOWEGO"
+#: ../cli/src/connections.c:2891
+#, c-format
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "Podać go? %s"
+msgstr[1] "Podać je? %s"
+msgstr[2] "Podać je? %s"
-#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "WÅAÅšCIWOÅšCI-WIMAX"
+#: ../cli/src/connections.c:2906
+msgid "ethernet"
+msgstr "ethernet"
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:217
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2906 ../libnm-glib/nm-device.c:1792
+#: ../tui/nm-editor-utils.c:164
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 6
-#: ../cli/src/devices.c:90
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2914 ../cli/src/connections.c:2962
+#: ../cli/src/connections.c:3071 ../cli/src/connections.c:3150
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2925 ../cli/src/connections.c:2973
+#: ../cli/src/connections.c:3043 ../cli/src/connections.c:3082
+#: ../cli/src/connections.c:3437
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
-#. 8
-#: ../cli/src/devices.c:92
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:2936
+msgid "Cloned MAC [none]: "
+msgstr "Sklonowany MAC [none]: "
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Transport mode %s"
+msgstr "Tryb przesyłania %s"
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "WIÄ„ZANE"
+#: ../cli/src/connections.c:2997
+msgid "Parent interface [none]: "
+msgstr "Interfejs nadrzędny [none]: "
+
+#: ../cli/src/connections.c:3008
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
+
+#: ../cli/src/connections.c:3018
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "BÅ‚Ä…d: \"p-key\" jest wymagane, kiedy podano \"parent\".\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:3038 ../libnm-glib/nm-device.c:1798
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:3061
+msgid "PPPoE"
+msgstr "PPPoE"
+
+#: ../cli/src/connections.c:3065 ../cli/src/connections.c:3103
+msgid "Password [none]: "
+msgstr "Hasło [none]: "
+
+#: ../cli/src/connections.c:3067
+msgid "Service [none]: "
+msgstr "Usługa [none]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:3097
+msgid "mobile broadband"
+msgstr "komórkowe"
+
+#: ../cli/src/connections.c:3101 ../cli/src/connections.c:3509
+msgid "Username [none]: "
+msgstr "Nazwa użytkownika [none]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3116
+msgid "bluetooth"
+msgstr "bluetooth"
+#: ../cli/src/connections.c:3123
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "Typ Bluetooth %s"
+
+#: ../cli/src/connections.c:3129
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Błąd: \"bt-type\": \"%s\" nie jest prawidłowym typem Bluetooth.\n"
+
+#. Ask for optional 'vlan' arguments.
#. 11
-#: ../cli/src/devices.c:95
+#: ../cli/src/connections.c:3145 ../cli/src/devices.c:251
+#: ../libnm-glib/nm-device.c:1810 ../libnm-util/nm-connection.c:1303
+#: ../tui/nm-editor-utils.c:227 ../tui/nmt-page-vlan.c:53
msgid "VLAN"
msgstr "VLAN"
-#. 12
-#: ../cli/src/devices.c:96
-msgid "CONNECTIONS"
-msgstr "POÅÄ„CZENIA"
+#: ../cli/src/connections.c:3161
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "Flagi VLAN= (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:3172
+msgid "Ingress priority maps [none]: "
+msgstr "Wejściowe mapy priorytetów [none]: "
+
+#: ../cli/src/connections.c:3183
+msgid "Egress priority maps [none]: "
+msgstr "Wyjściowe mapy priorytetów [none]: "
+
+#: ../cli/src/connections.c:3194
+msgid "Bonding mode [balance-rr]: "
+msgstr "Tryb wiÄ…zania [balance-rr]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:3209
+msgid "bond"
+msgstr "wiÄ…zanie"
+
+#: ../cli/src/connections.c:3231
+msgid "Bonding primary interface [none]: "
+msgstr "Interfejs nadrzędny wiązania [none]: "
+
+#: ../cli/src/connections.c:3234
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Błąd: \"primary\": \"%s\" nie jest prawidłową nazwą interfejsu.\n"
+
+#: ../cli/src/connections.c:3242
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "Tryb monitorowania wiÄ…zania %s"
+
+#: ../cli/src/connections.c:3248
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"Błąd: \"%s\" nie jest prawidłowym trybem monitorowania; należy użyć \"%s\" "
+"lub \"%s\".\n"
+
+#: ../cli/src/connections.c:3257
+msgid "Bonding miimon [100]: "
+msgstr "miimon wiÄ…zania [100]: "
+
+#: ../cli/src/connections.c:3260
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Błąd: \"miimon\": \"%s\" nie jest prawidłową liczbą <0-%u>.\n"
+
+#: ../cli/src/connections.c:3268
+msgid "Bonding downdelay [0]: "
+msgstr "downdelay wiÄ…zania [0]: "
+
+#: ../cli/src/connections.c:3271
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Błąd: \"downdelay\": \"%s\" nie jest prawidłową liczbą <0-%u>.\n"
+
+#: ../cli/src/connections.c:3279
+msgid "Bonding updelay [0]: "
+msgstr "updelay wiÄ…zania [0]: "
+
+#: ../cli/src/connections.c:3282
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Błąd: \"updelay\": \"%s\" nie jest prawidłową liczbą <0-%u>.\n"
+
+#: ../cli/src/connections.c:3291
+msgid "Bonding arp-interval [0]: "
+msgstr "arp-interval wiÄ…zania [0]: "
+
+#: ../cli/src/connections.c:3294
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Błąd: \"arp-interval\": \"%s\" nie jest prawidłową liczbą <0-%u>.\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3302
+msgid "Bonding arp-ip-target [none]: "
+msgstr "arp-ip-target wiÄ…zania [none]: "
+
+#: ../cli/src/connections.c:3322
+msgid "Team JSON configuration [none]: "
+msgstr "Konfiguracja JSON zespołu [none]: "
+
+#: ../cli/src/connections.c:3339
+msgid "team"
+msgstr "zespół"
+
+#: ../cli/src/connections.c:3345
+msgid "team-slave"
+msgstr "podrzędny-zespołu"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3357
+msgid "bridge"
+msgstr "mostek"
+
+#: ../cli/src/connections.c:3363
+#, c-format
+msgid "Enable STP %s"
+msgstr "WÅ‚Ä…czenie STP %s"
+
+#: ../cli/src/connections.c:3368
+#, c-format
+msgid "Error: 'stp': %s.\n"
+msgstr "BÅ‚Ä…d: \"stp\": %s.\n"
+
+#: ../cli/src/connections.c:3376
+msgid "STP priority [32768]: "
+msgstr "Priorytet STP [32768]: "
+
+#: ../cli/src/connections.c:3380
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Błąd: \"priority\": \"%s\" nie jest prawidłową liczbą <0-%d>.\n"
+
+#: ../cli/src/connections.c:3388
+msgid "Forward delay [15]: "
+msgstr "Forward-delay [15]: "
+
+#: ../cli/src/connections.c:3392
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Błąd: \"forward-delay\": \"%s\" nie jest prawidłową liczbą <2-30>.\n"
+
+#: ../cli/src/connections.c:3401
+msgid "Hello time [2]: "
+msgstr "Hello-time [2]: "
+
+#: ../cli/src/connections.c:3405
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Błąd: \"hello-time\": \"%s\" nie jest prawidłową liczbą <1-10>.\n"
+
+#: ../cli/src/connections.c:3413
+msgid "Max age [20]: "
+msgstr "Max-age [20]: "
+
+#: ../cli/src/connections.c:3417
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Błąd: \"max-age\": \"%s\" nie jest prawidłową liczbą <6-40>.\n"
+
+#: ../cli/src/connections.c:3425
+msgid "MAC address ageing time [300]: "
+msgstr "Czas starzenia adresu MAC [300]: "
+
+#: ../cli/src/connections.c:3429
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr ""
+"Błąd: \"ageing-time\": \"%s\" nie jest prawidłową liczbą <0-1000000>.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3456
+msgid "bridge-slave"
+msgstr "podrzędny-mostku"
+
+#: ../cli/src/connections.c:3461
+msgid "Bridge port priority [32]: "
+msgstr "Priorytet portu mostku [32]: "
+
+#: ../cli/src/connections.c:3474
+msgid "Bridge port STP path cost [100]: "
+msgstr "Koszt ścieżki STP portu mostku [100]: "
+
+#: ../cli/src/connections.c:3488
+#, c-format
+msgid "Hairpin %s"
+msgstr "Hairpin %s"
+
+#: ../cli/src/connections.c:3493
+#, c-format
+msgid "Error: 'hairpin': %s.\n"
+msgstr "BÅ‚Ä…d: \"hairpin\": %s.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3520 ../libnm-glib/nm-device.c:1796
+msgid "OLPC Mesh"
+msgstr "Kratowe OLPC"
+
+#: ../cli/src/connections.c:3525
+msgid "OLPC Mesh channel [1]: "
+msgstr "Kanał sieci kratowej OLPC [1]: "
+
+#: ../cli/src/connections.c:3528
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Błąd: \"channel\": \"%s\" nie jest prawidłową liczbą <1-13>.\n"
+
+#: ../cli/src/connections.c:3536
+msgid "DHCP anycast MAC address [none]: "
+msgstr "Adres MAC \"anycast\" DHCP [none]: "
+
+#: ../cli/src/connections.c:3581
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "Adres IPv4 (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3583
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "Adres IPv6 (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3601
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " Pomyślnie dodano adres: %s %s\n"
+
+#: ../cli/src/connections.c:3603
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Ostrzeżenie: adres jest już obecny: %s %s\n"
+
+#: ../cli/src/connections.c:3605
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Ostrzeżenie: ignorowanie śmieci na końcu: \"%s\"\n"
+
+#: ../cli/src/connections.c:3607 ../cli/src/connections.c:4464
+#: ../cli/src/connections.c:4527 ../cli/src/connections.c:4938
+#: ../cli/src/connections.c:4948
+msgid "Error: "
+msgstr "BÅ‚Ä…d: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3624
+#, c-format
+msgid "Do you want to add IP addresses? %s"
+msgstr "Dodać adresy IP? %s"
+
+#: ../cli/src/connections.c:3631
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "Naciśnięcie klawisza <Enter> zakończy dodawanie adresów.\n"
+
+#: ../cli/src/connections.c:3777
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Błąd: \"parent\": nieprawidłowe bez \"p-key\"."
+
+#: ../cli/src/connections.c:3833 ../cli/src/connections.c:4854
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3836 ../cli/src/connections.c:4857
+msgid "Error: 'ssid' is required."
+msgstr "BÅ‚Ä…d: \"ssid\" jest wymagane."
+
+#: ../cli/src/connections.c:3900
+msgid "WiMAX NSP name: "
+msgstr "Nazwa NSP sieci WiMAX: "
+
+#: ../cli/src/connections.c:3903
+msgid "Error: 'nsp' is required."
+msgstr "BÅ‚Ä…d: \"nsp\" jest wymagane."
+
+#: ../cli/src/connections.c:3958
+msgid "PPPoE username: "
+msgstr "Nazwa użytkownika PPPoE: "
+
+#: ../cli/src/connections.c:3961
+msgid "Error: 'username' is required."
+msgstr "BÅ‚Ä…d: \"username\" jest wymagane."
+
+#: ../cli/src/connections.c:4032
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:4035
+msgid "Error: 'apn' is required."
+msgstr "BÅ‚Ä…d: \"apn\" jest wymagane."
+
+#: ../cli/src/connections.c:4094
+msgid "Bluetooth device address: "
+msgstr "Adres urzÄ…dzenia Bluetooth: "
+
+#: ../cli/src/connections.c:4097
+msgid "Error: 'addr' is required."
+msgstr "BÅ‚Ä…d: \"addr\" jest wymagane."
+
+#: ../cli/src/connections.c:4140
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr ""
+"Błąd: \"bt-type\": \"%s\" jest nieprawidłowe; należy użyć [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:4185
+msgid "VLAN parent device or connection UUID: "
+msgstr "Urządzenie nadrzędne VLAN lub UUID połączenia: "
+
+#: ../cli/src/connections.c:4188
+msgid "Error: 'dev' is required."
+msgstr "BÅ‚Ä…d: \"dev\" jest wymagane."
+
+#: ../cli/src/connections.c:4192
+msgid "VLAN ID <0-4095>: "
+msgstr "Identyfikator VLAN <0-4095>: "
+
+#: ../cli/src/connections.c:4195
+msgid "Error: 'id' is required."
+msgstr "BÅ‚Ä…d: \"id\" jest wymagane."
+
+#: ../cli/src/connections.c:4201
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Błąd: \"id\": \"%s\" jest nieprawidłowe; należy użyć <0-4095>."
+
+#: ../cli/src/connections.c:4211
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "BÅ‚Ä…d: \"dev\": \"%s\" nie jest UUID, nazwÄ… interfejsu ani MAC."
+
+#: ../cli/src/connections.c:4346
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "BÅ‚Ä…d: \"mode\": %s."
+
+#: ../cli/src/connections.c:4355
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Błąd: \"primary\": \"%s\" nie jest prawidłową nazwą interfejsu."
+
+#: ../cli/src/connections.c:4405 ../cli/src/connections.c:4505
+#: ../cli/src/connections.c:4712
+msgid "Error: 'master' is required."
+msgstr "BÅ‚Ä…d: \"master\" jest wymagane."
+
+#: ../cli/src/connections.c:4411 ../cli/src/connections.c:4511
+#: ../cli/src/connections.c:4718
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr ""
+"Ostrzeżenie: master=\"%s\" nie odnosi się do żadnego istniejącego profilu.\n"
+
+#: ../cli/src/connections.c:4414 ../cli/src/connections.c:4519
+#: ../cli/src/connections.c:4721
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Ostrzeżenie: \"type\" jest obecnie ignorowane. W tej chwili obsługiwane są "
+"tylko podrzędne Ethernet.\n"
+
+#: ../cli/src/connections.c:4614
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "BÅ‚Ä…d: \"stp\": %s."
+
+#: ../cli/src/connections.c:4748
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "BÅ‚Ä…d: \"hairpin\": %s."
+
+#: ../cli/src/connections.c:4801
+msgid "Error: 'vpn-type' is required."
+msgstr "BÅ‚Ä…d: \"vpn-type\" jest wymagane."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "BÅ‚Ä…d: \"vpn-type\": nieznane %s.\n"
+
+#: ../cli/src/connections.c:4870
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Błąd: \"channel\": \"%s\" jest nieprawidłowe; należy użyć <1-13>."
+
+#: ../cli/src/connections.c:4905
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Błąd: \"%s\" nie jest prawidłowym typem połączenia."
+
+#: ../cli/src/connections.c:5003
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Błąd: dodanie połączenia \"%s\" się nie powiodło: (%d) %s"
+
+#: ../cli/src/connections.c:5007
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Pomyślnie dodano połączenie \"%s\" (%s).\n"
+
+#: ../cli/src/connections.c:5221
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "BÅ‚Ä…d: parametr \"type\" jest wymagany."
+
+#: ../cli/src/connections.c:5229
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Błąd: nieznany typ połączenia; %s."
+
+#: ../cli/src/connections.c:5238
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "BÅ‚Ä…d: \"autoconnect\": %s."
+
+#: ../cli/src/connections.c:5248
+#, c-format
+msgid "Error: 'save': %s."
+msgstr "BÅ‚Ä…d: \"save\": %s."
+
+#: ../cli/src/connections.c:5264
+msgid "Interface name [*]: "
+msgstr "Nazwa interfejsu [*]: "
+
+#: ../cli/src/connections.c:5269
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "BÅ‚Ä…d: parametr \"ifname\" jest wymagany."
+
+#: ../cli/src/connections.c:5276
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Błąd: \"ifname\": \"%s\" nie jest prawidłowym interfejsem ani \"*\"."
+
+#: ../cli/src/connections.c:6064
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "[wartości ustawienia \"%s\"]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6146
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save [persistent|temporary] :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Menu główne ]---\n"
+"goto [<ustawienie> | <właściwość>] :: przechodzi do ustawienia\n"
+" lub właściwości\n"
+"remove <ustawienie>[.<właściwość>] | <właściwość> :: usuwa ustawienie lub\n"
+" przywraca wartość "
+"właściwości\n"
+"set [<ustawienie>.<właściwość> <wartość>] :: ustawia wartość "
+"właściwości\n"
+"describe [<ustawienie>.<właściwość>] :: opisuje właściwość\n"
+"print [all] :: wyświetla połączenie\n"
+"verify [all] :: sprawdza połączenie\n"
+"save [persistent|temporary] :: zapisuje połączenie\n"
+"activate [<nazwa-interfejsu>] [/<ap>|<nsp>] :: aktywuje połączenie\n"
+"back :: przechodzi o poziom\n"
+" wyżej (wstecz)\n"
+"help/? [<polecenie>] :: wyświetla tę pomoc\n"
+"nmcli <opcja-konfiguracji> <wartość> :: konfiguracja nmcli\n"
+"quit :: kończy działanie nmcli\n"
+
+#: ../cli/src/connections.c:6173
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <ustawienie>[.<właściwość>] | <właściwość> :: przechodzi do\n"
+" ustawienia/właściwości do modyfikacji\n"
+"\n"
+"To polecenie przechodzi do ustawienia lub właściwości w celu ich "
+"modyfikacji.\n"
+"\n"
+"Przykłady: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:6180
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <ustawienie>[.<właściwość>] :: usuwa ustawienie lub przywraca\n"
+" wartość właściwości\n"
+"\n"
+"To polecenie usuwa całe ustawienie z połączenia, lub jeśli podano\n"
+"właściwość, przywraca ją do domyślnej wartości.\n"
+"\n"
+"Przykłady: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:6187
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<ustawienie>.<właściwość> <wartość>] :: ustawia wartość właściwości\n"
+"\n"
+"To polecenie ustawia wartość właściwości.\n"
+"\n"
+"Przykład: nmcli> set con.id Moje połączenie\n"
+
+#: ../cli/src/connections.c:6192
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<ustawienie>.<właściwość>] :: opisuje właściwość\n"
+"\n"
+"Wyświetla opis właściwości. Wszystkie ustawienia i właściwości usługi NM\n"
+"można znaleźć na stronie podręcznika nm-settings(5).\n"
+
+#: ../cli/src/connections.c:6197
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: wyświetla ustawienia lub wartości połączeń\n"
+"\n"
+"Wyświetla bieżącą właściwość lub całe połączenie.\n"
+"\n"
+"Przykład: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:6202
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: sprawdza ustawienie lub poprawność połączenia\n"
+"\n"
+"Sprawdza, czy ustawienie lub połączenie jest prawidłowe i może zostać\n"
+"później zapisane. Wskazuje nieprawidłowe wartości po napotkaniu błędu.\n"
+"\n"
+"Przykłady: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:6209
+#, c-format
+msgid ""
+"save [persistent|temporary] :: save the connection\n"
+"\n"
+"Sends the connection profile to NetworkManager that either will save it\n"
+"persistently, or will only keep it in memory. 'save' without an argument\n"
+"means 'save persistent'.\n"
+"Note that once you save the profile persistently those settings are saved\n"
+"across reboot or restart. Subsequent changes can also be temporary or\n"
+"persistent, but any temporary changes will not persist across reboot or\n"
+"restart. If you want to fully remove the persistent connection, the "
+"connection\n"
+"profile must be deleted.\n"
+msgstr ""
+"save [persistent|temporary] :: zapisuje połączenie\n"
+"\n"
+"Wysyła profil połączenia do usługi NetworkManager, która zapisze go na\n"
+"stałe lub tylko przechowa w pamięci. \"save\" bez parametru oznacza \"save "
+"persistent\".\n"
+"Proszę zauważyć, że po zapisaniu profilu na stałe te ustawienia są\n"
+"zachowywane między ponownymi uruchomieniami. Dalsze zmiany także mogą być\n"
+"tymczasowe lub stałe, ale wszystkie zmiany tymczasowe nie będą zachowywane\n"
+"między ponownymi uruchomieniami. Aby w pełni usunąć trwałe połączenie,\n"
+"należy usunąć profil połączenia.\n"
+
+#: ../cli/src/connections.c:6220
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<nazwa-interfejsu>] [/<ap>|<nsp>] :: aktywuje połączenie\n"
+"\n"
+"Aktywuje połączenie.\n"
+"\n"
+"Dostępne opcje:\n"
+"<nazwa-interfejsu> - urządzenie, na którym aktywowane będzie połączenie\n"
+"/<ap>|<nsp> - AP (Wi-Fi) lub NSP (WiMAX) (należy poprzedzić\n"
+" znakiem /, kiedy nie podano <nazwy-interfejsu>)\n"
+
+#: ../cli/src/connections.c:6227 ../cli/src/connections.c:6384
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: przechodzi do menu wyższego poziomu\n"
+"\n"
+
+#: ../cli/src/connections.c:6230
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<polecenie>] :: pomoc dla poleceń nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6233
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<opcja-konfiguracji> <wartość>] :: konfiguracja nmcli\n"
+"\n"
+"Konfiguruje nmcli. Dostępne opcje:\n"
+"status-line yes | no [domyślnie: no]\n"
+"save-confirmation yes | no [domyślnie: yes]\n"
+"prompt-color <0-8> [domyślnie: 0]\n"
+" 0 = zwykły\n"
+" 1 = czarny\n"
+" 2 = czerwony\n"
+" 3 = zielony\n"
+" 4 = żółty\n"
+" 5 = niebieski\n"
+" 6 = purpurowy\n"
+" 7 = niebieskozielony\n"
+" 8 = biały\n"
+"\n"
+"Przykłady: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:6253 ../cli/src/connections.c:6390
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: kończy działanie nmcli\n"
+"\n"
+"To polecenie kończy działanie nmcli. Jeśli modyfikowane połączenie nie jest "
+"zapisane, użytkownik zostanie poproszony o potwierdzenie działania.\n"
+
+#: ../cli/src/connections.c:6258 ../cli/src/connections.c:6395
+#: ../cli/src/connections.c:6783 ../cli/src/connections.c:7676
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "Nieznane polecenie: \"%s\"\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6324
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Menu właściwości ]---\n"
+"set [<wartość>] :: ustawia nową wartość\n"
+"add [<wartość>] :: dodaje nową wartość do właściwości\n"
+"change :: zmienia bieżącą wartość\n"
+"remove [<indeks> | <opcja>] :: usuwa wartość\n"
+"describe :: opisuje wartość\n"
+"print [setting | connection] :: wyświetla wartości właściwości\n"
+" (ustawienia/połączenia)\n"
+"back :: przechodzi do wyższego poziomu\n"
+"help/? [<polecenie>] :: wyświetla tę pomoc lub opis polecenia\n"
+"quit :: kończy działanie nmcli\n"
+
+#: ../cli/src/connections.c:6349
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<wartość>] :: ustawia nową wartość\n"
+"\n"
+"To polecenie ustawia podaną <wartość> tej właściwości\n"
+
+#: ../cli/src/connections.c:6353
+#, c-format
+msgid ""
+"add [<value>] :: append new value to the property\n"
+"\n"
+"This command adds provided <value> to this property, if the property is of a "
+"container type. For single-valued properties the property value is replaced "
+"(same as 'set').\n"
+msgstr ""
+"add [<wartość>] :: dodaje nową wartość do właściwości\n"
+"\n"
+"To polecenie dodaje podaną <wartość> do tej właściwości, jeśli właściwość "
+"jest typu kontener. W przypadku właściwości zawierających jedną wartość "
+"zastępuje tę wartość (podobnie jak \"set\").\n"
+
+#: ../cli/src/connections.c:6359
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: zmienia bieżącą wartość\n"
+"\n"
+"Wyświetla bieżącą wartość i umożliwia jej modyfikację.\n"
+
+#: ../cli/src/connections.c:6363
+#, c-format
+msgid ""
+"remove [<value>|<index>|<option name>] :: delete the value\n"
+"\n"
+"Removes the property value. For single-valued properties, this sets the\n"
+"property back to its default value. For container-type properties, this "
+"removes\n"
+"all the values of that property, or you can specify an argument to remove "
+"just\n"
+"a single item or option. The argument is either a value or index of the item "
+"to\n"
+"remove, or an option name (for properties with named options).\n"
+"\n"
+"Examples: nmcli ipv4.dns> remove 8.8.8.8\n"
+" nmcli ipv4.dns> remove 2\n"
+" nmcli bond.options> remove downdelay\n"
+"\n"
+msgstr ""
+"remove [<wartość>|<indeks>|<nazwa opcji>] :: usuwa wartość\n"
+"\n"
+"Usuwa wartość właściwości. W przypadku właściwości o pojedynczej wartości\n"
+"ustawiona zostanie jej domyślna wartość. W przypadku właściwości typu\n"
+"kontenera usunięte zostaną wszystkie wartości danej właściwości, jeśli nie\n"
+"zostanie ustawiony parametr usuwajÄ…cy tylko pojedynczy element lub opcjÄ™.\n"
+"Parametrem jest wartość lub indeks usuwanego elementu albo nazwa opcji\n"
+"(dla właściwości z nazwanymi opcjami).\n"
+"\n"
+"Przykłady: nmcli ipv4.dns> remove 8.8.8.8\n"
+" nmcli ipv4.dns> remove 2\n"
+" nmcli bond.options> remove downdelay\n"
+"\n"
+
+#: ../cli/src/connections.c:6374
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: opisuje właściwość\n"
+"\n"
+"Wyświetla opis właściwości. Wszystkie ustawienia i właściwości usługi NM "
+"można znaleźć na stronie podręcznika nm-settings(5).\n"
+
+#: ../cli/src/connections.c:6379
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: wyświetla wartości właściwości\n"
+" (ustawienia, połączenia)\n"
+"\n"
+"Wyświetla wartość właściwości. Podając parametr można także wyświetlić "
+"wartości dla całego ustawienia lub połączenia.\n"
+
+#: ../cli/src/connections.c:6387
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<polecenie>] :: pomoc dla poleceń nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6474
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Błąd: aktywacja połączenia się nie powiodła.\n"
+
+#: ../cli/src/connections.c:6552
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "Błąd: ustawienie \"%s\" jest wymagane i nie może być usuwane.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6570
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ Typ: %s | nazwa: %s | UUID: %s | dirty: %s | tymczasowe: %s ]\n"
+
+#: ../cli/src/connections.c:6605
+#, c-format
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr "Połączenie nie jest zapisane. Na pewno zakończyć? %s"
+
+#: ../cli/src/connections.c:6650
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"Profil połączenia został usunięty z innego klienta. Można wpisać \"save\" w "
+"głównym oknie, aby go przywrócić.\n"
+
+#: ../cli/src/connections.c:6672 ../cli/src/connections.c:7087
+#: ../cli/src/connections.c:7142
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Proszę podać wartość \"%s\": "
+
+#: ../cli/src/connections.c:6687 ../cli/src/connections.c:6705
+#: ../cli/src/connections.c:7091 ../cli/src/connections.c:7147
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Błąd: ustawienie właściwości \"%s\" się nie powiodło: %s\n"
+
+#: ../cli/src/connections.c:6699
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Modyfikacja wartości \"%s\": "
+
+#: ../cli/src/connections.c:6726
+#, c-format
+msgid "Error: %s\n"
+msgstr "BÅ‚Ä…d: %s\n"
+
+#: ../cli/src/connections.c:6732 ../cli/src/connections.c:7226
+#: ../cli/src/connections.c:7267
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Błąd: usunięcie wartości \"%s\" się nie powiodło: %s\n"
+
+#: ../cli/src/connections.c:6753
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Nieznany parametr polecenia: \"%s\"\n"
+
+#: ../cli/src/connections.c:6879
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Dostępne ustawienia: %s\n"
+
+#: ../cli/src/connections.c:6888
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Błąd: nieprawidłowa nazwa ustawienia; %s\n"
+
+#: ../cli/src/connections.c:6905
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Dostępne właściwości: %s\n"
+
+#: ../cli/src/connections.c:6913
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Błąd: właściwość %s\n"
+
+#: ../cli/src/connections.c:6954
+#, c-format
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? %s"
+msgstr ""
+"Zapisywanie połączenia za pomocą \"autoconnect=yes\". Może to spowodować "
+"natychmiastową aktywację połączenia.\n"
+"Na pewno zapisać? %s"
+
+#: ../cli/src/connections.c:7029
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Można modyfikować następujące ustawienia: %s\n"
+
+#: ../cli/src/connections.c:7056
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"Profil połączenia został usunięty z innego klienta. Można wpisać \"save\", "
+"aby go przywrócić.\n"
+
+#: ../cli/src/connections.c:7085 ../cli/src/connections.c:7140
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Dozwolone wartości dla właściwości \"%s\": %s\n"
+
+#: ../cli/src/connections.c:7095 ../cli/src/connections.c:7309
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Błąd: nie wybrano ustawienia; prawidłowe to [%s]\n"
+
+#: ../cli/src/connections.c:7096
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"należy najpierw użyć \"goto <ustawienie>\" lub \"set <ustawienie>."
+"<właściwość>\"\n"
+
+#: ../cli/src/connections.c:7110 ../cli/src/connections.c:7246
+#: ../cli/src/connections.c:7326
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "Błąd: nieprawidłowy parametr ustawienia \"%s\"; prawidłowe to [%s]\n"
+
+#: ../cli/src/connections.c:7120
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Błąd: brak ustawienia dla właściwości \"%s\"\n"
+
+#: ../cli/src/connections.c:7127
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Błąd: nieprawidłowa właściwość: %s\n"
+
+#: ../cli/src/connections.c:7174
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "BÅ‚Ä…d: nieznane ustawienie \"%s\"\n"
+
+#: ../cli/src/connections.c:7187
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Można modyfikować następujące właściwości: %s\n"
+
+#: ../cli/src/connections.c:7231
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Błąd: nie podano żadnego parametru; prawidłowe to [%s]\n"
+
+#: ../cli/src/connections.c:7244
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "Ustawienie \"%s\" nie jest obecne w połączeniu.\n"
+
+#: ../cli/src/connections.c:7285
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Błąd: właściwości %s, ani nie jest nazwą ustawiania.\n"
+
+#: ../cli/src/connections.c:7310
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"należy najpierw użyć \"goto <ustawienie>\" lub \"describe <ustawienie>."
+"<właściwość>\"\n"
+
+#: ../cli/src/connections.c:7351
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "Błąd: nieprawidłowa właściwość: %s: ani prawidłową nazwą ustawienia.\n"
+
+#: ../cli/src/connections.c:7380
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "BÅ‚Ä…d: nieznane ustawienie: \"%s\"\n"
+
+#: ../cli/src/connections.c:7385
+#, c-format
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "Błąd: ustawienie \"%s\" nie jest obecne w połączeniu\n"
+
+#: ../cli/src/connections.c:7410
+#, c-format
+msgid "Error: invalid property: %s%s\n"
+msgstr "Błąd: nieprawidłowa właściwość: %s%s\n"
+
+#: ../cli/src/connections.c:7412
+msgid ", neither a valid setting name"
+msgstr ", ani prawidłową nazwą ustawienia"
+
+#: ../cli/src/connections.c:7432
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Sprawdzenie ustawienia \"%s\": %s\n"
+
+#: ../cli/src/connections.c:7439
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Sprawdzenie połączenia: %s\n"
+
+#: ../cli/src/connections.c:7457
+#, c-format
+msgid "Error: invalid argument '%s'\n"
+msgstr "Błąd: nieprawidłowy parametr \"%s\"\n"
+
+#: ../cli/src/connections.c:7491
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "Błąd: zapisanie połączenia \"%s\" (%s) się nie powiodło: (%d) %s\n"
+
+#: ../cli/src/connections.c:7499
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Pomyślnie zapisano połączenie \"%s\" (%s).\n"
+
+#: ../cli/src/connections.c:7500
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "Pomyślnie zaktualizowano połączenie \"%s\" (%s).\n"
+
+#: ../cli/src/connections.c:7534
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Błąd: sprawdzenie połączenia się nie powiodło: %s\n"
+
+#: ../cli/src/connections.c:7535
+msgid "(unknown error)"
+msgstr "(nieznany błąd)"
+
+#: ../cli/src/connections.c:7556
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "Błąd: połączenie nie jest zapisane. Należy najpierw wpisać \"save\".\n"
+
+#: ../cli/src/connections.c:7560
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Błąd: połączenie jest nieprawidłowe: %s\n"
+
+#: ../cli/src/connections.c:7571
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Błąd: nie można aktywować połączenia: %s.\n"
+
+#: ../cli/src/connections.c:7581
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "Błąd: aktywowanie połączenia \"%s\" (%s) się nie powiodło: (%d) %s\n"
+
+#: ../cli/src/connections.c:7587
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Aktywacja monitorowania połączenia (naciśnięcie dowolnego klawisza "
+"kontynuuje)\n"
+
+#: ../cli/src/connections.c:7625
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "BÅ‚Ä…d: status-line: %s\n"
+
+#: ../cli/src/connections.c:7633
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "BÅ‚Ä…d: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Błąd: błędny numer koloru: \"%s\"; należy użyć <0-8>\n"
+
+#: ../cli/src/connections.c:7653
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Obecna konfiguracja nmcli:\n"
+
+#: ../cli/src/connections.c:7661
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Nieprawidłowa opcja konfiguracji \"%s\"; dozwolone [%s]\n"
+
+#: ../cli/src/connections.c:7904
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "Błąd: tylko jedno z \"id\", UUID lub \"path\" może być podane."
+
+#: ../cli/src/connections.c:7916 ../cli/src/connections.c:8103
+#: ../cli/src/connections.c:8110
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Błąd: nieznane połączenie \"%s\"."
+
+#: ../cli/src/connections.c:7931
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Ostrzeżenie: modyfikowanie istniejącego połączenia \"%s\"; parametr \"type\" "
+"jest ignorowany\n"
+
+#: ../cli/src/connections.c:7934
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Ostrzeżenie: modyfikowanie istniejącego połączenia \"%s\"; parametr \"con-"
+"name\" jest ignorowany\n"
+
+#: ../cli/src/connections.c:7948
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Prawidłowe typy połączeń: %s\n"
+
+#: ../cli/src/connections.c:7950
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Błąd: nieznany typ połączenia; %s\n"
+
+#: ../cli/src/connections.c:7986
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| interaktywny edytor połączeń nmcli |==="
+
+#: ../cli/src/connections.c:7989
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Modyfikowanie istniejącego połączenia \"%s\": \"%s\""
+
+#: ../cli/src/connections.c:7991
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Dodawanie nowego połączenia \"%s\""
+
+#: ../cli/src/connections.c:7993
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Wpisanie \"help\" lub \"?\" wyświetla dostępne polecenia."
+
+#: ../cli/src/connections.c:7995
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Wpisanie \"describe [<ustawienie>.<właściwość>]\" wyświetla szczegółowy opis "
+"właściwości."
+
+#: ../cli/src/connections.c:8031
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Błąd: zmodyfikowanie połączenia \"%s\" się nie powiodło: (%d) %s"
+
+#: ../cli/src/connections.c:8037
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Pomyślnie zmodyfikowano połączenie \"%s\" (%s).\n"
+
+#: ../cli/src/connections.c:8078
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Błąd: nie podano żadnych parametrów."
+
+#: ../cli/src/connections.c:8097
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Błąd: brak identyfikatora połączenia."
+
+#: ../cli/src/connections.c:8119 ../cli/src/connections.c:8132
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Błąd: brak parametru <ustawienie>.<właściwość>."
+
+#: ../cli/src/connections.c:8137
+#, c-format
+msgid "Error: value for '%s' is missing."
+msgstr "Błąd: brak wartości dla \"%s\"."
+
+#: ../cli/src/connections.c:8155
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Błąd: nieprawidłowe <ustawienie>.<właściwość> \"%s\"."
+
+#: ../cli/src/connections.c:8163
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Błąd: nieprawidłowe lub niedozwolone ustawienie \"%s\": %s."
+
+#: ../cli/src/connections.c:8184
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Błąd: nieprawidłowa właściwość \"%s\": %s."
+
+#: ../cli/src/connections.c:8195
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Błąd: zmodyfikowanie %s.%s się nie powiodło: %s."
+
+#: ../cli/src/connections.c:8213
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "Błąd: usunięcie wartości z %s.%s się nie powiodło: %s."
+
+#: ../cli/src/connections.c:8249
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Błąd: usunięcie połączenia się nie powiodło: %s"
+
+#: ../cli/src/connections.c:8320
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Błąd: nieznane połączenie: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:8356
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Błąd: nie można usunąć nieznanych połączeń: %s."
+
+#: ../cli/src/connections.c:8427
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "Nie można wczytać pliku \"%s\"\n"
+
+#: ../cli/src/connections.c:8612
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Błąd: \"%s\" nie jest prawidłowym poleceniem \"connection\"."
+
+#: ../cli/src/connections.c:8681 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Błąd: nie można uzyskać ustawień systemu."
+
+#: ../cli/src/connections.c:8691
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr ""
+"Błąd: nie można uzyskać połączeń: usługa ustawień nie jest uruchomiona."
+
+#. define some prompts
+#: ../cli/src/devices.c:70
+msgid "Interface: "
+msgstr "Interfejs: "
+
+#. 3
+#. 16
+#: ../cli/src/devices.c:78 ../cli/src/devices.c:106
+msgid "CONNECTION"
+msgstr "POÅÄ„CZENIE"
+
+#. 4
+#. 17
+#: ../cli/src/devices.c:79 ../cli/src/devices.c:107
+msgid "CON-UUID"
+msgstr "UUID-POÅÄ„CZENIA"
#. 2
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:92
msgid "VENDOR"
msgstr "PRODUCENT"
#. 3
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:93
msgid "PRODUCT"
msgstr "PRODUKT"
#. 4
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:94
msgid "DRIVER"
msgstr "STEROWNIK"
#. 5
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:95
msgid "DRIVER-VERSION"
msgstr "WERSJA-STEROWNIKA"
#. 6
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:96
msgid "FIRMWARE-VERSION"
msgstr "WERSJA-OPROGRAMOWANIA-SPRZĘTOWEGO"
#. 7
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:97
msgid "HWADDR"
msgstr "ADRES-SPRZĘTOWY"
-#. 9
-#: ../cli/src/devices.c:119
+#. 8
+#: ../cli/src/devices.c:98 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:96 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../cli/src/devices.c:100
msgid "REASON"
msgstr "PRZYCZYNA"
-#. 10
-#: ../cli/src/devices.c:120
+#. 11
+#: ../cli/src/devices.c:101
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:121
+#. 12
+#: ../cli/src/devices.c:102
msgid "IP-IFACE"
msgstr "INTERFEJS-IP"
-#. 12
-#: ../cli/src/devices.c:122
+#. 13
+#: ../cli/src/devices.c:103
msgid "NM-MANAGED"
msgstr "ZARZÄ„DZANE-PRZEZ-NM"
-#. 14
-#: ../cli/src/devices.c:124
+#. 15
+#: ../cli/src/devices.c:105
msgid "FIRMWARE-MISSING"
msgstr "BRAK-OPROGRAMOWANIA-SPRZĘTOWEGO"
-#. 15
-#: ../cli/src/devices.c:125
-msgid "CONNECTION"
-msgstr "POÅÄ„CZENIE"
-
#. 0
-#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:118
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "DOSTĘPNE-ÅšCIEÅ»KI-POÅÄ„CZEŃ"
#. 1
-#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:119
msgid "AVAILABLE-CONNECTIONS"
msgstr "DOSTĘPNE-POÅÄ„CZENIA"
#. 0
-#: ../cli/src/devices.c:145
+#: ../cli/src/devices.c:128
msgid "CARRIER-DETECT"
msgstr "WYKRYWANIE-OPERATORA"
#. 1
-#: ../cli/src/devices.c:146
+#: ../cli/src/devices.c:129
msgid "SPEED"
msgstr "PRĘDKOŚĆ"
#. 0
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:138
msgid "CARRIER"
msgstr "OPERATOR"
#. 0
-#: ../cli/src/devices.c:165
+#: ../cli/src/devices.c:147 ../cli/src/devices.c:568
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:148
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:576
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:150
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:151
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:152 ../cli/src/devices.c:242
+msgid "AP"
+msgstr "PUNKT-DOSTĘPOWY"
+
#. 6
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:153
msgid "ADHOC"
msgstr "ADHOC"
#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:162
msgid "CTR-FREQ"
msgstr "CZĘSTOTLIWOŚĆ-CTR"
#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:163
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:164
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:165
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:166
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:195
+#: ../cli/src/devices.c:175 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:196
+#: ../cli/src/devices.c:176
+msgid "SSID-HEX"
+msgstr "SZESNASTKOWY-SSID"
+
+#. 2
+#: ../cli/src/devices.c:177 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:197
+#. 3
+#: ../cli/src/devices.c:178
msgid "MODE"
msgstr "TRYB"
-#. 3
-#: ../cli/src/devices.c:198
+#. 4
+#: ../cli/src/devices.c:179
+msgid "CHAN"
+msgstr "KANAÅ"
+
+#. 5
+#: ../cli/src/devices.c:180
msgid "FREQ"
msgstr "CZĘSTOTLIWOŚĆ"
-#. 4
-#: ../cli/src/devices.c:199
+#. 6
+#: ../cli/src/devices.c:181
msgid "RATE"
msgstr "OCENA"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:200 ../cli/src/devices.c:218
+#: ../cli/src/devices.c:182 ../cli/src/devices.c:202
msgid "SIGNAL"
msgstr "SYGNAÅ"
-#. 6
-#: ../cli/src/devices.c:201
+#. 8
+#: ../cli/src/devices.c:183
+msgid "BARS"
+msgstr "PASKI"
+
+#. 9
+#: ../cli/src/devices.c:184
msgid "SECURITY"
msgstr "ZABEZPIECZENIA"
-#. 7
-#: ../cli/src/devices.c:202
+#. 10
+#: ../cli/src/devices.c:185
msgid "WPA-FLAGS"
msgstr "FLAGI-WPA"
-#. 8
-#: ../cli/src/devices.c:203
+#. 11
+#: ../cli/src/devices.c:186
msgid "RSN-FLAGS"
msgstr "FLAGI-RSN"
-#. 10
-#. 4
-#: ../cli/src/devices.c:205 ../cli/src/devices.c:221
-msgid "ACTIVE"
-msgstr "AKTYWNOŚĆ"
+#. 14
+#: ../cli/src/devices.c:189
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../cli/src/devices.c:201 ../cli/src/devices.c:245
+msgid "NSP"
+msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:233
+#: ../cli/src/devices.c:216
msgid "SLAVES"
msgstr "PODRZĘDNE"
#. 0
-#: ../cli/src/devices.c:242
+#: ../cli/src/devices.c:225
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:258
+#. 0
+#: ../cli/src/devices.c:240
+msgid "CAPABILITIES"
+msgstr "MOŻLIWOŚCI"
+
+#. 1
+#: ../cli/src/devices.c:241
+msgid "WIFI-PROPERTIES"
+msgstr "WÅAÅšCIWOÅšCI-WIFI"
+
+#. 3
+#: ../cli/src/devices.c:243
+msgid "WIRED-PROPERTIES"
+msgstr "WÅAÅšCIWOÅšCI-POÅÄ„CZENIA-PRZEWODOWEGO"
+
+#. 4
+#: ../cli/src/devices.c:244
+msgid "WIMAX-PROPERTIES"
+msgstr "WÅAÅšCIWOÅšCI-WIMAX"
+
+#. 10
+#: ../cli/src/devices.c:250 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "WIÄ„ZANE"
+
+#. 12
+#: ../cli/src/devices.c:252
+msgid "CONNECTIONS"
+msgstr "POÅÄ„CZENIA"
+
+#: ../cli/src/devices.c:277
#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
"Użycie: nmcli device { POLECENIE | help }\n"
"\n"
-" POLECENIE := { status | list | disconnect | wifi | wimax }\n"
+"POLECENIE := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" POLECENIE := { status | list | disconnect | wifi }\n"
+"POLECENIE := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <interfejs]\n"
-" disconnect iface <interfejs> [--nowait] [--timeout <czas>]\n"
-" wifi [list [iface <interfejs>] [bssid <BSSID>]]\n"
-" wifi connect <(B)SSID> [password <hasło>] [wep-key-type key|phrase] [iface "
-"<interfejs>] [bssid <BSSID>] [name <nazwa>]\n"
-" [--private] [--nowait] [--timeout <czas>]\n"
-" wimax [list [iface <interfejs>] [nsp <nazwa>]]\n"
+"\n"
+" show [<nazwa-interfejsu>]\n"
+"\n"
+" connect <nazwa-interfejsu>\n"
+"\n"
+" disconnect <nazwa-interfejsu>\n"
+"\n"
+" wifi [list [ifname <nazwa-interfejsu>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <hasło>] [wep-key-type key|phrase] "
+"[ifname <nazwa-interfejsu>] [bssid <BSSID>] [name <nazwa>]\n"
+"\n"
+" [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <nazwa-interfejsu>]\n"
+"\n"
+" wimax [list [ifname <nazwa-interfejsu>] [nsp <nazwa>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:301
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli device status { help }\n"
+"\n"
+"Wyświetla stan wszystkich urzadzeń.\n"
+"Domyślnie wyświetlane są następujące kolumny:\n"
+" URZÄ„DZENIE - nazwa interfejsu\n"
+" TYP - typ urzÄ…dzenia\n"
+" STAN - stan urzÄ…dzenia\n"
+" POÅÄ„CZENIE - poÅ‚Ä…czenie aktywowane na urzÄ…dzeniu (jeÅ›li istnieje)\n"
+"Wyświetlane kolumny mogą być zmieniane używając globalnej opcji\n"
+"\"--fields\". \"status\" jest domyślnym poleceniem, co oznacza, że \"nmcli\n"
+"device\" wywołuje \"nmcli device status\".\n"
+"\n"
+
+#: ../cli/src/devices.c:317
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli device show { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [<ifname>]\n"
+"\n"
+"Wyświetla szczegóły urządzeń.\n"
+"Polecenie wyświetla szczegóły dla wszystkich urządzeń lub tylko podanego.\n"
+"\n"
+
+#: ../cli/src/devices.c:329
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli device connect { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := <nazwa-interfejsu>\n"
+"\n"
+"ÅÄ…czy urzÄ…dzenie.\n"
+"Usługa NetworkManager spróbuje odnaleźć pasujące połączenie do aktywowania.\n"
+"Weźmie pod uwagę także połączenia, które nie są ustawione na\n"
+"automatyczne Å‚Ä…czenie.\n"
+"\n"
+
+#: ../cli/src/devices.c:342
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli device disconnect { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := <nazwa-interfejsu>\n"
+"\n"
+"Rozłącza urządzenie.\n"
+"Polecenie rozłącza urządzenie i uniemożliwia mu dalsze automatyczne\n"
+"aktywowanie połączeń bez działania użytkownika.\n"
+"\n"
+
+#: ../cli/src/devices.c:355
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli device wifi { PARAMETRY | help }\n"
+"\n"
+"Wykonuje działanie na urządzeniach Wi-Fi.\n"
+"\n"
+"PARAMETRY := [list [ifname <nazwa-urzÄ…dzenia>] [bssid <BSSID>]]\n"
+"\n"
+"Wyświetla listę dostępnych punktów dostępowych Wi-Fi. Opcje \"ifname\" i\n"
+"\"bssid\" mogą być używane do wyświetlenia listy punktów dostępowych dla\n"
+"konkretnego interfejsu lub o podanym BSSID.\n"
+"\n"
+"PARAMETRY := connect <(B)SSID> [password <hasło>] [wep-key-type key|phrase] "
+"[ifname <nazwa-interfejsu>]\n"
+" [bssid <BSSID>] [name <nazwa>] [private yes|no]\n"
+"\n"
+"ÅÄ…czy z sieciÄ… Wi-Fi podanÄ… jako SSID lub BSSID. Polecenie tworzy nowe\n"
+"połączenia, a następnie aktywuje je na urządzeniu. Jest to odpowiednik\n"
+"kliknięcia SSID w kliencie graficznym dla wiersza poleceń. Polecenie zawsze\n"
+"tworzy nowe połączenie, jest więc przydatne głównie do łączenia z nowymi\n"
+"sieciami Wi-Fi. Jeśli połączenie dla sieci już istnieje, to lepiej jest\n"
+"aktywować istniejący profil w ten sposób: nmcli con up id <nazwa>. Proszę\n"
+"zauważyć, że w tej chwili obsługiwane są tylko sieci otwarte oraz\n"
+"zabezpieczone za pomocą WEP i WPA-PSK. Przyjmowane jest także, że\n"
+"konfiguracja IP jest uzyskiwana przez DHCP.\n"
+"\n"
+"PARAMETRY := rescan [[ifname] <nazwa-interfejsu>]\n"
+"\n"
+"Żąda, aby usługa NetworkManager natychmiastowo ponownie przeskanowała "
+"dostępne punkty dostępowe.\n"
+"Usługa NetworkManager okresowo skanuje sieci Wi-Fi, ale w niektórych\n"
+"przypadkach ręczne rozpoczęcie skanowania może być przydatne. Proszę\n"
+"zauważyć, że to polecenie nie wyświetla punktów dostępowych, i w tym celu\n"
+"należy użyć \"nmcli device wifi list\".\n"
+"\n"
+
+#: ../cli/src/devices.c:389
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli device wimax { PARAMETRY | help }\n"
+"\n"
+"Wykonuje działanie na urządzeniach WiMAX.\n"
+"\n"
+"PARAMETRY := [list [ifname <nazwa-interfejsu>] [nsp <nazwa>]]\n"
+"\n"
+"Wyświetla listę dostępnych NSP WiMAX. Opcje \"ifname\" i \"nsp\" mogą być\n"
+"używane do wyświetlania list sieci dla konkretnego interfejsu lub o podanym "
+"NSP.\n"
"\n"
-#: ../cli/src/devices.c:361
+#: ../cli/src/devices.c:483
msgid "(none)"
msgstr "(brak)"
-#: ../cli/src/devices.c:417
+#: ../cli/src/devices.c:552
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:418
+#: ../cli/src/devices.c:553
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:427
-msgid "Encrypted: "
-msgstr "Zaszyfrowane: "
-
-#: ../cli/src/devices.c:432
-msgid "WEP "
-msgstr "WEP "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:434
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:572
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:436
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:581
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:439
-msgid "Enterprise "
-msgstr "Enterprise "
-
-#: ../cli/src/devices.c:448
+#: ../cli/src/devices.c:597
msgid "Ad-Hoc"
msgstr "Ad-hoc"
-#: ../cli/src/devices.c:449
-msgid "Infrastructure"
+#: ../cli/src/devices.c:598
+msgid "Infra"
msgstr "Infrastruktura"
-#: ../cli/src/devices.c:485
+#: ../cli/src/devices.c:630
msgid "Home"
msgstr "Dom"
-#: ../cli/src/devices.c:488
+#: ../cli/src/devices.c:633
msgid "Partner"
msgstr "Partner"
-#: ../cli/src/devices.c:491
+#: ../cli/src/devices.c:636
msgid "Roaming"
msgstr "Roaming"
-#: ../cli/src/devices.c:563
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "BÅ‚Ä…d: \"dev list\": %s"
-
-#: ../cli/src/devices.c:565
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"dev list\": %s; dozwolone pola: %s"
-
-#: ../cli/src/devices.c:574
+#: ../cli/src/devices.c:730
msgid "Device details"
msgstr "Informacje o urzÄ…dzeniu"
-#: ../cli/src/devices.c:621 ../cli/src/devices.c:624 ../cli/src/devices.c:1151
-#: ../cli/src/utils.c:479
+#: ../cli/src/devices.c:742
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "BÅ‚Ä…d: \"device show\": %s"
+
+#: ../cli/src/devices.c:792 ../cli/src/devices.c:795 ../cli/src/devices.c:1342
+#: ../cli/src/devices.c:1484
msgid "(unknown)"
msgstr "(nieznane)"
-#: ../cli/src/devices.c:633
-msgid "not connected"
-msgstr "niepołączono"
-
-#: ../cli/src/devices.c:660
+#: ../cli/src/devices.c:832
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:736
+#: ../cli/src/devices.c:918
msgid "on"
msgstr "włączone"
-#: ../cli/src/devices.c:736
+#: ../cli/src/devices.c:918
msgid "off"
msgstr "wyłączone"
-#: ../cli/src/devices.c:993
+#: ../cli/src/devices.c:1193
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "BÅ‚Ä…d: \"dev status\": %s"
+msgid "Error: 'device status': %s"
+msgstr "BÅ‚Ä…d: \"device status\": %s"
-#: ../cli/src/devices.c:995
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"dev status\": %s; dozwolone pola: %s"
-
-#: ../cli/src/devices.c:1018
+#. Add headers
+#: ../cli/src/devices.c:1211
msgid "Status of devices"
msgstr "Stan urzÄ…dzenia"
-#: ../cli/src/devices.c:1049
+#: ../cli/src/devices.c:1242
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "BÅ‚Ä…d: brak parametru \"%s\"."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Błąd: nieprawidłowy dodatkowy parametr \"%s\"."
-#: ../cli/src/devices.c:1090 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:2043
+#: ../cli/src/devices.c:1270 ../cli/src/devices.c:1432
+#: ../cli/src/devices.c:1566 ../cli/src/devices.c:1705
+#: ../cli/src/devices.c:2449
#, c-format
msgid "Error: Device '%s' not found."
msgstr "BÅ‚Ä…d: nie odnaleziono urzÄ…dzenia \"%s\"."
-#: ../cli/src/devices.c:1113
+#: ../cli/src/devices.c:1325
+#, c-format
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "Pomyślnie aktywowano urządzenie \"%s\" za pomocą \"%s\".\n"
+
+#: ../cli/src/devices.c:1341
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "Błąd: aktywacja urządzenia się nie powiodła: %s"
+
+#: ../cli/src/devices.c:1349
+#, c-format
+msgid "Error: Device activation failed: device was disconnected"
+msgstr ""
+"Błąd: aktywacja urządzenia się nie powiodła: urządzenie zostało rozłączone"
+
+#: ../cli/src/devices.c:1362
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "Urządzenie \"%s\" zostało połączone.\n"
+
+#: ../cli/src/devices.c:1391 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1534
+#, c-format
+msgid "Error: No interface specified."
+msgstr "Błąd: nie podano żadnego interfejsu."
+
+#: ../cli/src/devices.c:1406 ../cli/src/devices.c:1540
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "BÅ‚Ä…d: niedozwolony dodatkowy parametr: \"%s\"."
+
+#: ../cli/src/devices.c:1469
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Powodzenie: urządzenie \"%s\" zostało rozłączone."
-#: ../cli/src/devices.c:1148
+#: ../cli/src/devices.c:1481
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Błąd: rozłączenie urządzenia \"%s\" (%s) się nie powiodło: %s"
-#: ../cli/src/devices.c:1161
+#: ../cli/src/devices.c:1495
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "Urządzenie \"%s\" zostało rozłączone.\n"
-#: ../cli/src/devices.c:1224
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Błąd: należy podać interfejs."
-
-#: ../cli/src/devices.c:1354
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "BÅ‚Ä…d: \"dev wifi\": %s"
+#: ../cli/src/devices.c:1637
+msgid "Wi-Fi scan list"
+msgstr "Lista skanowania sieci Wi-Fi"
-#: ../cli/src/devices.c:1356
+#: ../cli/src/devices.c:1675
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"dev wifi\": %s; dozwolone pola: %s"
-
-#: ../cli/src/devices.c:1379
-msgid "WiFi scan list"
-msgstr "Lista skanowania sieci WiFi"
+msgid "Error: 'device wifi': %s"
+msgstr "BÅ‚Ä…d: \"device wifi\": %s"
-#: ../cli/src/devices.c:1416 ../cli/src/devices.c:1470
+#: ../cli/src/devices.c:1728 ../cli/src/devices.c:1797
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Błąd: nie odnaleziono punktu dostępowego z BSSID \"%s\"."
-#: ../cli/src/devices.c:1433
+#: ../cli/src/devices.c:1752 ../cli/src/devices.c:2144
+#: ../cli/src/devices.c:2306
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "BÅ‚Ä…d: urzÄ…dzenie \"%s\" nie jest urzÄ…dzeniem WiFi."
-#: ../cli/src/devices.c:1501 ../cli/src/devices.c:1547
+#: ../cli/src/devices.c:1834 ../cli/src/devices.c:1881
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "Utworzono i aktywowano połączenie o UUID \"%s\" na urządzeniu \"%s\"\n"
-#: ../cli/src/devices.c:1506
+#: ../cli/src/devices.c:1838
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Błąd: aktywacja połączenia się nie powiodła: (%d) %s."
-#: ../cli/src/devices.c:1531
+#: ../cli/src/devices.c:1863
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "Błąd: dodanie/aktywacja nowego połączenia się nie powiodła: (%d) %s"
-#: ../cli/src/devices.c:1539
+#: ../cli/src/devices.c:1871
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"Błąd: dodanie/aktywacja nowego połączenia się nie powiodła: nieznany błąd"
-#: ../cli/src/devices.c:1683
+#: ../cli/src/devices.c:2026
+msgid "SSID or BSSID: "
+msgstr "SSID lub BSSID: "
+
+#: ../cli/src/devices.c:2031
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "BÅ‚Ä…d: brak SSID lub BSSID."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:2055
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "Błąd: wartość parametru BSSID \"%s\" nie jest prawidłowym BSSID."
-#: ../cli/src/devices.c:1730
+#: ../cli/src/devices.c:2079
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1401,76 +3623,75 @@ msgstr ""
"Błąd: wartość \"%s\" parametru wep-key-type jest nieprawidłowa, należy użyć "
"\"key\" lub \"phrase\"."
-#: ../cli/src/devices.c:1770
+#: ../cli/src/devices.c:2099
+#, c-format
+msgid "Error: %s: %s."
+msgstr "BÅ‚Ä…d: %s: %s."
+
+#: ../cli/src/devices.c:2114
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "Błąd: BSSID do połączenia (%s) różni się od parametru BSSID (%s)."
-#: ../cli/src/devices.c:1776
+#: ../cli/src/devices.c:2120
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "BÅ‚Ä…d: parametr \"%s\" nie wynosi SSID ani BSSID."
-#: ../cli/src/devices.c:1805
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "BÅ‚Ä…d: urzÄ…dzenie \"%s\" nie jest urzÄ…dzeniem WiFi."
-
-#: ../cli/src/devices.c:1807
+#: ../cli/src/devices.c:2146 ../cli/src/devices.c:2308
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "BÅ‚Ä…d: nie odnaleziono urzÄ…dzenia WiFi."
-#: ../cli/src/devices.c:1825
+#: ../cli/src/devices.c:2164
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "BÅ‚Ä…d: nie odnaleziono sieci z SSID \"%s\"."
-#: ../cli/src/devices.c:1827
+#: ../cli/src/devices.c:2166
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "Błąd: nie odnaleziono punktu dostępowego z BSSID \"%s\"."
-#: ../cli/src/devices.c:1925
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Błąd: polecenie \"dev wifi\" \"%s\" jest nieprawidłowe."
+#: ../cli/src/devices.c:2205
+msgid "Password: "
+msgstr "Hasło: "
-#: ../cli/src/devices.c:2001
+#: ../cli/src/devices.c:2334
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "BÅ‚Ä…d: \"dev wimax\": %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Błąd: polecenie \"device wifi\" \"%s\" jest nieprawidłowe."
-#: ../cli/src/devices.c:2003
-#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"dev wimax\": %s; dozwolone pola: %s"
-
-#: ../cli/src/devices.c:2026
+#: ../cli/src/devices.c:2381
msgid "WiMAX NSP list"
msgstr "Lista NSP sieci WiMAX"
-#: ../cli/src/devices.c:2063
+#: ../cli/src/devices.c:2418
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "BÅ‚Ä…d: \"device wimax\": %s"
+
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "BÅ‚Ä…d: nie odnaleziono NSP o nazwie \"%s\"."
-#: ../cli/src/devices.c:2074
+#: ../cli/src/devices.c:2485
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "BÅ‚Ä…d: urzÄ…dzenie \"%s\" nie jest urzÄ…dzeniem WiMAX."
-#: ../cli/src/devices.c:2105
+#: ../cli/src/devices.c:2523
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Błąd: nie odnaleziono punktu dostępowego z NSP \"%s\"."
-#: ../cli/src/devices.c:2132
+#: ../cli/src/devices.c:2555
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Błąd: polecenie \"dev wimax\" \"%s\" jest nieprawidłowe."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Błąd: polecenie \"device wimax\" \"%s\" jest nieprawidłowe."
-#: ../cli/src/devices.c:2185
+#: ../cli/src/devices.c:2705
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Błąd: polecenie \"dev\" \"%s\" jest nieprawidłowe."
@@ -1486,242 +3707,507 @@ msgstr "WERSJA"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "SIEĆ-WÅÄ„CZONA"
+msgid "STARTUP"
+msgstr "URUCHAMIANIE"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "SPRZĘT-WIFI"
+msgid "CONNECTIVITY"
+msgstr "ÅÄ„CZNOŚĆ"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "SIEĆ"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "SPRZĘT-WWAN"
+msgid "WIFI-HW"
+msgstr "SPRZĘT-WIFI"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "SPRZĘT-WIMAX"
+msgid "WWAN-HW"
+msgstr "SPRZĘT-WWAN"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "SPRZĘT-WIMAX"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "UPRAWNIENIE"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "WARTOŚĆ"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "POZIOM"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMENY"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"Użycie: nmcli nm { POLECENIE | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" POLECENIE := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"Użycie: nmcli general { POLECENIE | help }\n"
"\n"
-" POLECENIE := { status | permissions | enable | sleep | wifi | wwan }\n"
+"POLECENIE := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<nazwa komputera>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <poziom dziennika>] [domains <domeny dziennika>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"Użycie: nmcli general status { help }\n"
+"\n"
+"Wyświetla ogólny stan usługi NetworkManager.\n"
+"\"status\" jest domyślnym działaniem, co oznacza, że \"nmcli gen\" wywołuje "
+"\"nmcli gen status\"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli general hostname { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [<nazwa-komputera>]\n"
+"\n"
+"Uzyskuje lub zmienia trwałą systemową nazwę komputera.\n"
+"Bez podania parametrów spowoduje to wyświetlenie obecnie skonfigurowanej\n"
+"nazwy komputera. Jeśli podano nazwę komputera, to usługa NetworkManager\n"
+"ustawi ją jako nową trwałą systemową nazwę komputera.\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli general permissions { help }\n"
+"\n"
+"Wyświetla uprawnienia dzwoniącego dla uwierzytelnionych działań.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli general logging { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [level <poziom dziennika>] [domains <domeny dziennika>]\n"
+"\n"
+"Uzyskuje lub zmienia poziom i domeny dziennika usługi NetworkManager.\n"
+"Bez podania żadnych parametrów spowoduje to wyświetlenie bieżącego poziomu\n"
+"i domen dziennika. Aby zmienić stan dziennika, należy podać poziom i/lub\n"
+"domenę. Lista możliwych domen dziennika znajduje się na stronie "
+"podręcznika.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"Użycie: nmcli networking { POLECENIE | help }\n"
+"\n"
+"POLECENIE := { on | off | connectivity }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli networking on { help }\n"
+"\n"
+"Włącza sieć.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli networking off { help }\n"
+"\n"
+"Wyłącza sieć.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli networking connectivity { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [check]\n"
+"\n"
+"Uzyskuje stan łączności sieciowej.\n"
+"Opcjonalny parametr \"check\" sprawia, że usługa NetworkManager ponownie\n"
+"sprawdzi łączność.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"Użycie: nmcli radio { POLECENIE | help }\n"
+"\n"
+"POLECENIE := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"POLECENIE := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli radio all { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [on | off]\n"
+"\n"
+"Uzyskuje stan wszystkich przełączników radia lub włącza/wyłącza je.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli radio wifi { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [on | off]\n"
+"\n"
+"Uzyskuje stan przełącznika radia Wi-Fi lub włącza/wyłącza go.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli radio wwan { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [on | off]\n"
+"\n"
+"Uzyskuje stan przełącznika radia komórkowego lub włącza/wyłącza go.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Użycie: nmcli radio wimax { PARAMETRY | help }\n"
+"\n"
+"PARAMETRY := [on | off]\n"
+"\n"
+"Uzyskuje stan przełącznika radia WiMAX lub włącza/wyłącza go.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "wstrzymane"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "Å‚Ä…czenie"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "połączono (tylko lokalnie)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "połączono (tylko witryny)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "rozłączanie"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "BÅ‚Ä…d: \"nm status\": %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "portal"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "ograniczone"
+
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "pełne"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"nm status\": %s; dozwolone pola: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "BÅ‚Ä…d: tylko te pola sÄ… dozwolone: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "włączone"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "wyłączone"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "Stan usługi NetworkManager"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "uruchamiany"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "nieuruchomiony"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "uruchamianie"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "uruchomiono"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "uwierzytelnianie"
-#: ../cli/src/network-manager.c:301
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "BÅ‚Ä…d: \"nm permissions\": %s"
+msgid "Error: 'general permissions': %s"
+msgstr "BÅ‚Ä…d: \"general permissions\": %s"
-#: ../cli/src/network-manager.c:303
-#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "BÅ‚Ä…d: \"nm permissions\": %s; dozwolone pola: %s"
-
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "Uprawnienia usługi NetworkManager"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Błąd: nie można połączyć się z magistralą systemową: %s"
+msgid "Error: 'general logging': %s"
+msgstr "BÅ‚Ä…d: \"general logging\": %s"
-#: ../cli/src/network-manager.c:361
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "Dziennik usługi NetworkManager"
+
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Błąd: nie można utworzyć pośrednika obiektu usługi D-Bus."
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "Błąd: ustawienie nazwy komputera się nie powiodło: (%d) %s"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error in sleep: %s"
-msgstr "BÅ‚Ä…d w poleceniu sleep: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "Błąd: brak dostępu do ustawienia zapisywania w dzienniku; %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"Błąd: wartość \"%s\" opcji \"--fields\" jest nieprawidłowa; dozwolone pola: "
-"%s"
+msgid "Error: %s"
+msgstr "BÅ‚Ä…d: %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "Sieć jest włączona"
+#: ../cli/src/network-manager.c:692
+#, c-format
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Błąd: polecenie \"general\" \"%s\" jest nieprawidłowe."
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"Błąd: nieprawidłowy parametr \"enable\": \"%s\"; należy użyć \"true\" lub "
-"\"false\"."
+"Błąd: wartość \"--fields\" \"%s\" jest nieprawidłowa (dozwolone pola: %s)"
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Błąd: stan snu nie jest eksportowany przez usługę NetworkManager."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Błąd: nieprawidłowy parametr \"%s\": \"%s\" (należy użyć on/off)."
-#: ../cli/src/network-manager.c:458
-#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Błąd: nieprawidłowy parametr \"sleep\": \"%s\"; należy użyć \"true\" lub "
-"\"false\"."
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "ÅÄ…czność"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi jest włączone"
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "Sieć"
-#: ../cli/src/network-manager.c:495
+#: ../cli/src/network-manager.c:783
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Błąd: nieprawidłowy parametr \"wifi\": \"%s\"."
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Błąd: polecenie \"networking connectivity\" \"%s\" jest nieprawidłowe."
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN jest włączone"
-
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Błąd: nieprawidłowy parametr \"wwan\": \"%s\"."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Błąd: polecenie \"networking\" \"%s\" jest nieprawidłowe."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX jest włączone"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Przełączniki radiowe"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Błąd: nieprawidłowy parametr \"wimax\": \"%s\"."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Przełącznik radiowy Wi-Fi"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "Przełącznik radiowy WWAN"
+
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "Przełącznik radiowy WiMAX"
-#: ../cli/src/network-manager.c:588
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Błąd: parametr \"nm\" \"%s\" jest nieprawidłowy."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Błąd: polecenie \"radio\" \"%s\" jest nieprawidłowe."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:83
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1735,11 +4221,16 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
@@ -1751,256 +4242,953 @@ msgstr ""
" -p[retty] sformatowane wyjście\n"
" -m[ode] tabulatory|wielowierszowe tryb wyjścia\n"
" -f[ields] <pole1,pole2,...>|all|common określa pola do wyjścia\n"
-" -e[scape] yes|no modyfikuje separatory kolumn w "
-"wartościach\n"
-" -n[ocheck] bez sprawdzania wersji nmcli i "
-"NetworkManager\n"
+" -e[scape] yes|no modyfikuje separatory kolumn\n"
+" w wartościach\n"
+" -n[ocheck] bez sprawdzania wersji nmcli\n"
+" i NetworkManager\n"
+" -a[sk] pyta o brakujÄ…ce parametry\n"
+" -w[ait] <sekundy> ustawia czas oczekiwania\n"
+" na ukończenie działań\n"
" -v[ersion] wyświetla wersję usługi\n"
" -h[elp] wyświetla tę opcję\n"
"\n"
"OBIEKT\n"
+" g[eneral] ogólny stan i działania usługi NetworkManager\n"
+" n[etworking] ogólna kontrola sieci\n"
+" r[adio] przełączniki radiowe usługi NetworkManager\n"
" nm stan usługi NetworkManager\n"
" c[onnection] połączenia usługi NetworkManager\n"
" d[evice] urządzenia zarządzane przez usługę NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:137
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr ""
"Błąd: obiekt \"%s\" jest nieznany, można spróbować polecenie \"nmcli help\"."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Błąd: opcja \"--terse\" został podana po raz drugi."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:172
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr ""
"BÅ‚Ä…d: opcja \"--terse\" jest wzajemnie wykluczajÄ…ca z opcjÄ… \"--pretty\"."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Błąd: opcja \"--pretty\" został podana po raz drugi."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:185
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr ""
"BÅ‚Ä…d: opcja \"--pretty\" jest wzajemnie wykluczajÄ…ca z opcjÄ… \"--terse\"."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:195 ../cli/src/nmcli.c:211 ../cli/src/nmcli.c:240
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "BÅ‚Ä…d: brak parametru dla opcji \"%s\"."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:204 ../cli/src/nmcli.c:220
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Błąd: \"%s\" nie jest prawidłowym parametrem dla opcji \"%s\"."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:227
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Błąd: brak pól dla opcji \"%s\"."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:245
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Błąd: \"%s\" nie jest prawidłowym czasem oczekiwania dla opcji \"%s\"."
+
+#: ../cli/src/nmcli.c:252
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "narzędzie nmcli, wersja %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:258
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr ""
"Błąd: opcja \"%s\" jest nieznana. Można spróbować polecenie \"nmcli help\"."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:293
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Przechwycono sygnał %d, wyłączanie..."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"Błąd: nmcli zostało zakończone sygnałem %d."
+
+#: ../cli/src/nmcli.c:323 ../src/main.c:129
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "Ustawienie maski sygnału nie powiodło: %d"
+
+#: ../cli/src/nmcli.c:330 ../src/main.c:138
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Utworzenie wątku obsługującego sygnały się nie powiodło: %d"
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:343 ../test/nm-online.c:196
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Błąd: nie można utworzyć obiektu NMClient."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:359
msgid "Success"
msgstr "Powodzenie"
-#: ../cli/src/settings.c:595
+#: ../cli/src/settings.c:669
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (klucz-szesnastkowy-ascii)"
+msgid "%d (key)"
+msgstr "%d (klucz)"
-#: ../cli/src/settings.c:597
+#: ../cli/src/settings.c:671
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bitowe hasło)"
+msgid "%d (passphrase)"
+msgstr "%d (hasło)"
-#: ../cli/src/settings.c:600 ../cli/src/settings.c:728
+#: ../cli/src/settings.c:674 ../cli/src/settings.c:802
#, c-format
msgid "%d (unknown)"
msgstr "%d (nieznane)"
-#: ../cli/src/settings.c:626
+#: ../cli/src/settings.c:700
msgid "0 (unknown)"
msgstr "0 (nieznane)"
-#: ../cli/src/settings.c:632
+#: ../cli/src/settings.c:706
msgid "any, "
msgstr "dowolne, "
-#: ../cli/src/settings.c:634
+#: ../cli/src/settings.c:708
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:636
+#: ../cli/src/settings.c:710
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:638
+#: ../cli/src/settings.c:712
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:640
+#: ../cli/src/settings.c:714
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:642
+#: ../cli/src/settings.c:716
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:718
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:646
+#: ../cli/src/settings.c:720
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:648
+#: ../cli/src/settings.c:722
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:724
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:726
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:728
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:730
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:732
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:676
+#: ../cli/src/settings.c:750
msgid "0 (NONE)"
msgstr "0 (BRAK)"
-#: ../cli/src/settings.c:682
+#: ../cli/src/settings.c:756
msgid "REORDER_HEADERS, "
msgstr "ZMIANA_KOLEJNOÅšCI_NAGÅÓWKÓW, "
-#: ../cli/src/settings.c:684
+#: ../cli/src/settings.c:758
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:686
+#: ../cli/src/settings.c:760
msgid "LOOSE_BINDING, "
msgstr "LUŹNE_DOWIĄZANIE, "
-#: ../cli/src/settings.c:722
+#: ../cli/src/settings.c:796
#, c-format
msgid "%d (disabled)"
msgstr "%d (wyłączone)"
-#: ../cli/src/settings.c:724
+#: ../cli/src/settings.c:798
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (włączone, preferowanie publicznego adresu IP)"
-#: ../cli/src/settings.c:726
+#: ../cli/src/settings.c:800
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (włączone, preferowanie tymczasowego adresu IP)"
-#: ../cli/src/settings.c:738
+#: ../cli/src/settings.c:812
msgid "0 (none)"
msgstr "0 (brak)"
-#: ../cli/src/settings.c:744
+#: ../cli/src/settings.c:818
msgid "agent-owned, "
msgstr "posiadane przez agenta, "
-#: ../cli/src/settings.c:746
+#: ../cli/src/settings.c:820
msgid "not saved, "
msgstr "niezapisane, "
-#: ../cli/src/settings.c:748
+#: ../cli/src/settings.c:822
msgid "not required, "
msgstr "niewymagane, "
-#: ../cli/src/settings.c:945 ../cli/src/settings.c:1163
-#: ../cli/src/settings.c:1904
+#: ../cli/src/settings.c:1128
+msgid "0 (disabled)"
+msgstr "0 (wyłączone)"
+
+#: ../cli/src/settings.c:1134
+msgid "enabled, "
+msgstr "włączone, "
+
+#: ../cli/src/settings.c:1136
+msgid "advertise, "
+msgstr "rozgłaszanie, "
+
+#: ../cli/src/settings.c:1138
+msgid "willing, "
+msgstr "chętne, "
+
+#: ../cli/src/settings.c:1166
+msgid "-1 (unset)"
+msgstr "-1 (usunięcie ustawienia)"
+
+#: ../cli/src/settings.c:1274 ../cli/src/settings.c:1457
+#: ../cli/src/settings.c:1497
msgid "auto"
msgstr "automatyczne"
-#: ../cli/src/utils.c:105
+#: ../cli/src/settings.c:1287
+msgid "default"
+msgstr "domyślne"
+
+#: ../cli/src/settings.c:1625
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Ustawić \"%s\" na \"%s\"? [yes]: "
+
+#: ../cli/src/settings.c:1627
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Wyczyścić \"%s\"? [yes]: "
+
+#: ../cli/src/settings.c:1788
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"Ostrzeżenie: ustawiono %s.%s na \"%s\", ale może zostać zignorowane w trybie "
+"infrastruktury\n"
+
+#: ../cli/src/settings.c:1870 ../cli/src/settings.c:2150
+#: ../cli/src/settings.c:4232
+#, c-format
+msgid "'%s' is not valid"
+msgstr "\"%s\" jest nieprawidłowe"
+
+#: ../cli/src/settings.c:1893
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "\"%d\" jest nieprawidłowe; należy użyć <%d-%d>"
+
+#: ../cli/src/settings.c:1915
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "\"%u\" jest nieprawidłowe; należy użyć <%d-%d>"
+
+#: ../cli/src/settings.c:1981
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "\"%s\" jest nieprawidłowe; należy użyć <opcja>=<wartość>"
+
+#: ../cli/src/settings.c:2015
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "indeks \"%s\" jest nieprawidłowy"
+
+#: ../cli/src/settings.c:2020 ../cli/src/settings.c:2045
+msgid "no item to remove"
+msgstr "brak elementu do usunięcia"
+
+#: ../cli/src/settings.c:2024 ../cli/src/settings.c:2049
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "indeks \"%d\" jest poza zakresem <0-%d>"
+
+#: ../cli/src/settings.c:2064
+#, c-format
+msgid "invalid option '%s'"
+msgstr "nieprawidłowa opcja \"%s\""
+
+#: ../cli/src/settings.c:2066
+msgid "missing option"
+msgstr "brak opcji"
+
+#: ../cli/src/settings.c:2096 ../cli/src/settings.c:2116
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "\"%s\" nie jest prawidłową liczbą (lub jest poza zakresem)"
+
+#: ../cli/src/settings.c:2170
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "\"%s\" nie jest prawidłowym adresem MAC Ethernetu"
+
+#: ../cli/src/settings.c:2196 ../libnm-util/nm-setting-bridge.c:296
+#: ../libnm-util/nm-setting-connection.c:830
+#: ../libnm-util/nm-setting-vlan.c:548
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "\"%s\" nie jest prawidłową nazwą interfejsu"
+
+#: ../cli/src/settings.c:2214 ../cli/src/settings.c:3621
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "\"%s\" nie jest liczbÄ…"
+
+#: ../cli/src/settings.c:2266
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "\"%s\" nie jest prawidłowym znakiem szesnastkowym"
+
+#: ../cli/src/settings.c:2296
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "\"%s\" nie jest prawidłowym adresem MAC"
+
+#: ../cli/src/settings.c:2333 ../libnm-util/nm-setting-connection.c:793
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "\"%s\" nie jest prawidłowym UUID"
+
+#: ../cli/src/settings.c:2400
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "właściwość nie zawiera uprawnienia \"%s\""
+
+#: ../cli/src/settings.c:2412
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"Proszę podać listę uprawnień użytkowników. Jest to lista nazw użytkowników "
+"sformatowana jako:\n"
+" [użytkownik:]<nazwa użytkownika 1>, [użytkownik:]<nazwa użytkownika "
+"2>,...\n"
+"Elementy mogą być oddzielane przecinkami lub spacjami.\n"
+"\n"
+"Przykład: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2431
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr ""
+"\"%s\" nie jest prawidłowym \"master\"; należy użyć nazwy interfejsu lub "
+"UUID połączenia"
+
+#: ../cli/src/settings.c:2475
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr ""
+"Ostrzeżenie: %s nie jest UUID żadnego istniejącego profilu połączenia\n"
+
+#: ../cli/src/settings.c:2479 ../cli/src/settings.c:2495
+#, c-format
+msgid "'%s' is not a VPN connection profile"
+msgstr "\"%s\" nie jest profilem połączenia VPN"
+
+#: ../cli/src/settings.c:2488
+#, c-format
+msgid "'%s' is not a name of any exiting profile"
+msgstr "\"%s\" nie jest nazwą żadnego istniejącego profilu"
+
+#: ../cli/src/settings.c:2522
+#, c-format
+msgid "the value '%s' is not a valid UUID"
+msgstr "wartość \"%s\" nie jest prawidłowym UUID"
+
+#: ../cli/src/settings.c:2529
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "właściwość nie zawiera UUID \"%s\""
+
+#: ../cli/src/settings.c:2541
+msgid ""
+"Enter secondary connections that should be activated when this connection "
+"is\n"
+"activated. Connections can be specified either by UUID or ID (name). nmcli\n"
+"transparently translates names to UUIDs. Note that NetworkManager only "
+"supports\n"
+"VPNs as secondary connections at the moment.\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+msgstr ""
+"Proszę podać drugorzędne połączenia, które powinny zostać aktywowane\n"
+"podczas aktywacji tego połączenia. Połączenia mogą być podawane według UUID\n"
+"lub identyfikatora (nazwy). nmcli samodzielnie przetłumaczy nazwy na UUID.\n"
+"Proszę zauważyć, że w tej chwili usługa NetworkManager obsługuje sieci VPN\n"
+"tylko jako drugorzędne połączenia.\n"
+"Elementy mogą być oddzielane przecinkami lub spacjami.\n"
+"\n"
+"Przykład: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../cli/src/settings.c:2618
+msgid "private key password not provided"
+msgstr "nie podano hasła klucza prywatnego"
+
+#: ../cli/src/settings.c:2645
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "właściwość nie zawiera metody EAP \"%s\""
+
+#: ../cli/src/settings.c:2670
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "właściwość nie zawiera alternatywnego dopasowania tematu \"%s\""
+
+#: ../cli/src/settings.c:2699
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr ""
+"właściwość nie zawiera alternatywnego dopasowania tematu \"phase2\" \"%s\""
+
+#: ../cli/src/settings.c:2725
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"Proszę podać ścieżkę do klucza prywatnego i jego hasło (jeśli nie jest "
+"jeszcze ustawione):\n"
+" <ścieżka do pliku> [<hasło>]\n"
+"Przykład: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2795
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"Proszę podać bajty jako listę wartości szesnastkowych.\n"
+"Możliwe są dwa formaty:\n"
+"(a) ciąg cyfr szesnastkowych, gdzie każde dwie cyfry oznaczają jeden bajt\n"
+"(b) lista bajtów oddzielonych spacjami zapisanych jako cyfry szesnastkowe (z "
+"opcjonalnym przedrostkiem 0x/0X i opcjonalnym przyrostkiem 0).\n"
+"\n"
+"Przykłady: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2898
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"Proszę podać listę opcji wiązania sformatowanych jako:\n"
+" opcja = <wartość>, opcja = <wartość>,... \n"
+"Prawidłowe opcje: %s\n"
+"\"mode\" może być podawane jako nazwa lub liczba:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Przykład: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2939
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "\"%s\" nie jest prawidłowym adresem MAC InfiniBand"
+
+#: ../cli/src/settings.c:2977
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "\"%s\" nie jest prawidłowym P_Key IBoIP"
+
+#: ../cli/src/settings.c:3045 ../cli/src/settings.c:3390
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "właściwość nie zawiera serwera DNS \"%s\""
+
+#: ../cli/src/settings.c:3057
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"Proszę podać listę adresów IPv4 serwerów DNS.\n"
+"\n"
+"Przykład: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:3093 ../cli/src/settings.c:3444
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "właściwość nie zawiera domeny wyszukiwania DNS \"%s\""
+
+#: ../cli/src/settings.c:3113 ../cli/src/settings.c:3464
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "\"%s\" jest nieprawidłowe (należy użyć ip[/przedrostek] [brama])"
+
+#: ../cli/src/settings.c:3162 ../cli/src/settings.c:3512
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "właściwość nie zawiera adresu IP \"%s\""
+
+#: ../cli/src/settings.c:3175
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"Proszę podać listę adresów IPv4 sformatowanych jako:\n"
+" ip[/przedrostek] [brama], ip[/przedrostek] [brama],...\n"
+"Brak przedrostka jest traktowany jako przedrostek 32.\n"
+"\n"
+"Przykład: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:3228 ../cli/src/settings.c:3543
+#, c-format
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr ""
+"\"%s\" jest nieprawidłowe (format: ip[/przedrostek] [next-hop] [parametry])"
+
+#: ../cli/src/settings.c:3276 ../cli/src/settings.c:3591
+#, c-format
+msgid "the property doesn't contain route '%s'"
+msgstr "właściwość nie zawiera trasy \"%s\""
+
+#: ../cli/src/settings.c:3289
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing next-hop is regarded as 0.0.0.0.\n"
+"Missing metric or 0 means a default metric (NM/kernel will set a default "
+"value).\n"
+"\n"
+"Examples: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+" 10.1.2.0/24\n"
+msgstr ""
+"Proszę podać listę tras IPv4 sformatowanych jako:\n"
+" ip/[przedrostek] [next-hop] [parametry],...\n"
+"Brak przedrostka jest traktowany jako przedrostek 32.\n"
+"Brak parametrów jest traktowany jako parametry 0.\n"
+"\n"
+"Przykład: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+" 10.1.2.0/24\n"
+
+#: ../cli/src/settings.c:3402
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"Proszę podać listę adresów IPv6 serwerów DNS. Jeśli metoda konfiguracji IPv6 "
+"to \"auto\", to te serwery DNS są dołączane do tych zwróconych przez "
+"konfigurację automatyczną (jeśli jakieś zostaną zwrócone). Serwery DNS nie "
+"mogą być używane z metodami konfiguracji IPv6 \"shared\" lub \"link-local\", "
+"ponieważ nie ma żadnej nadrzędnej sieci. We wszystkich innych metodach "
+"konfiguracji IPv6 te serwery są używane jako wyłączne serwery DNS dla danego "
+"połączenia.\n"
+"\n"
+"Przykład: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3525
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"Proszę podać listę adresów IPv6 sformatowanych jako:\n"
+" ip[/przedrostek] [brama], ip[/przedrostek] [brama],...\n"
+"Brak przedrostka jest traktowany jako przedrostek 128.\n"
+"\n"
+"Przykład: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3604
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing next-hop is regarded as \"::\".\n"
+"Missing metric or 0 means a default metric (NM/kernel will set a default "
+"value).\n"
+"\n"
+"Examples: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+" abbe::/64 55\n"
+msgstr ""
+"Proszę podać listę tras IPv6 sformatowanych jako:\n"
+" ip/[przedrostek] [next-hop] [parametry],...\n"
+"Brak przedrostka jest traktowany jako przedrostek 128.\n"
+"Brak next-hop jest traktowane jako \"::\".\n"
+"Brak parametrów lub 0 oznacza domyślne parametry (NM/jądro ustawi domyślną "
+"wartość).\n"
+"\n"
+"Przykłady: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+" abbe::/64 55\n"
+
+#: ../cli/src/settings.c:3628
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "\"%s\" jest nieprawidłowe; należy użyć 0, 1 lub 2"
+
+#: ../cli/src/settings.c:3645
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "\"%s\" nie jest prawidłowym kanałem; należy użyć <1-13>"
+
+#: ../cli/src/settings.c:3666
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "\"%s\" jest nieprawidłowe; należy użyć [e, o, n]"
+
+#: ../cli/src/settings.c:3694
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli może przyjmować zarówno bezpośrednie dane konfiguracji JSON, jak i "
+"nazwÄ™ pliku zawierajÄ…cego konfiguracjÄ™. W tym drugim przypadku plik jest "
+"odczytywany, a jego zawartość jest umieszczana w tej właściwości.\n"
+"\n"
+"Przykłady: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/mój-zespół.conf\n"
+
+#: ../cli/src/settings.c:3734
+msgid "no priority to remove"
+msgstr "brak priorytetu do usunięcia"
+
+#: ../cli/src/settings.c:3738
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "indeks \"%d\" jest poza zakresem <0-%d>"
+
+#: ../cli/src/settings.c:3777
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"Ostrzeżenie: obsługiwane jest tylko jedno mapowanie na raz; przyjmowanie "
+"pierwszego (%s)\n"
+
+#: ../cli/src/settings.c:3784
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "właściwość nie zawiera mapowania \"%s\""
+
+#: ../cli/src/settings.c:3893 ../cli/src/settings.c:4061
+#: ../libnm-util/nm-setting-wired.c:651
+#: ../libnm-util/nm-setting-wireless.c:843
+#: ../libnm-util/nm-setting-wireless.c:857
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "\"%s\" nie jest prawidłowym adresem MAC"
+
+#: ../cli/src/settings.c:3899 ../cli/src/settings.c:4067
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "właściwość nie zawiera adresu MAC \"%s\""
+
+#: ../cli/src/settings.c:3918
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "\"%s\" jest nieprawidłowe; powinny zostać podane trzy ciągi"
+
+#: ../cli/src/settings.c:3937
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"Proszę podać listę trzech kanałów (oddzielonych przecinkami lub spacjami).\n"
+"\n"
+"Przykład: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3987
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"Proszę podać listę opcji S/390 sformatowanych jako:\n"
+" opcja = <wartość>, opcja = <wartość>,...\n"
+"Prawidłowe opcje: %s\n"
+
+#: ../cli/src/settings.c:4033
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "\"%s\" nie jest prawidłowym kanałem"
+
+#: ../cli/src/settings.c:4039
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "\"%ld\" nie jest prawidłowym kanałem"
+
+#: ../cli/src/settings.c:4126 ../cli/src/settings.c:4164
+#: ../cli/src/settings.c:4202
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "właściwość nie zawiera protokołu \"%s\""
+
+#: ../cli/src/settings.c:4241
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"\"%s\" nie jest zgodne z %s \"%s\", proszę zmienić klucz lub ustawić "
+"najpierw właściwe %s."
+
+#: ../cli/src/settings.c:4249
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "Klucz WEP jest prawdopodobnie typu \"%s\"\n"
+
+#: ../cli/src/settings.c:4251
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "Ustawiono indeks klucza WEP na \"%d\"\n"
+
+#: ../cli/src/settings.c:4274
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "\"%s\" nie jest jednym z [0 (unknown), 1 (key), 2 (passphrase)]"
+
+#: ../cli/src/settings.c:4290 ../cli/src/settings.c:4293
+#: ../cli/src/settings.c:4296 ../cli/src/settings.c:4299
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"Ostrzeżenie: \"%s\" nie jest zgodne z typem \"%s\", proszę zmienić lub "
+"usunąć klucz.\n"
+
+#: ../cli/src/settings.c:4312
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"Proszę podać typ kluczy WEP. Możliwe wartości: 0 lub \"unknown\", 1 lub \"key"
+"\" i 2 lub \"passphrase\".\n"
+
+#: ../cli/src/settings.c:4325
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "\"%s\" nie jest prawidłowym PSK"
+
+#: ../cli/src/settings.c:4369
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "\"%s\" nie jest prawidłową flagą DCB"
+
+#: ../cli/src/settings.c:4392
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "\"%s\" nie jest prawidłowym priorytetem aplikacji DCB"
+
+#: ../cli/src/settings.c:4418
+msgid "must contain 8 comma-separated numbers"
+msgstr "musi zawierać osiem liczb oddzielonych przecinkami"
+
+#: ../cli/src/settings.c:4435
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "\"%s\" nie jest liczbą między 0 a %u (włącznie) lub %u"
+
+#: ../cli/src/settings.c:4438
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "\"%s\" nie jest liczbą między 0 a %u (włącznie)"
+
+#: ../cli/src/settings.c:4460
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"Ostrzeżenie: zmiany nie zostaną zastosowane, dopóki \"%s\" zawiera 1 "
+"(włączone)\n"
+"\n"
+
+#: ../cli/src/settings.c:4513
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "procenty szerokości pasma muszą razem wynosić 100%%"
+
+#: ../cli/src/settings.c:6198
+msgid "don't know how to get the property value"
+msgstr "nie wiadomo, jak uzyskać wartość właściwości"
+
+#: ../cli/src/settings.c:6251 ../cli/src/settings.c:6291
+msgid "the property can't be changed"
+msgstr "nie można zmieniać tej właściwości"
+
+#: ../cli/src/settings.c:6374
+msgid "(not available)"
+msgstr "(niedostępne)"
+
+#: ../cli/src/settings.c:6399
+msgid "[NM property description]"
+msgstr "[opis właściwości NM]"
+
+#: ../cli/src/settings.c:6404
+msgid "[nmcli specific description]"
+msgstr "[konkretny opis nmcli]"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Błąd: wartość dla parametru \"%s\" jest wymagana."
+
+#: ../cli/src/utils.c:153
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "BÅ‚Ä…d: oczekiwano parametru \"%s\", ale podano \"%s\"."
+
+#: ../cli/src/utils.c:156
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "BÅ‚Ä…d: nieoczekiwany parametr \"%s\""
+
+#: ../cli/src/utils.c:206
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "BÅ‚Ä…d podczas konwertowania adresu IPv4 \"0x%X\" na formÄ™ tekstowÄ…"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:234
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "BÅ‚Ä…d podczas konwertowania adresu IPv6 \"%s\" na formÄ™ tekstowÄ…"
-#: ../cli/src/utils.c:234
+#: ../cli/src/utils.c:408
+#, c-format
+msgid "'%s' is ambiguous (on x off)"
+msgstr "\"%s\" jest niejednoznaczne (on x off)"
+
+#: ../cli/src/utils.c:418
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "\"%s\" jest nieprawidłowy; należy użyć [%s] lub [%s]"
+
+#: ../cli/src/utils.c:500
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "\"%s\" jest niejednoznaczne (%s x %s)"
+
+#: ../cli/src/utils.c:512
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "brak nazwy, należy spróbować jednej z [%s]"
+
+#: ../cli/src/utils.c:729
#, c-format
msgid "field '%s' has to be alone"
msgstr "pole \"%s\" musi być same"
-#: ../cli/src/utils.c:237
+#: ../cli/src/utils.c:732
#, c-format
-msgid "invalid field '%s'"
-msgstr "nieprawidłowe pole \"%s\""
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "nieprawidłowe pole \"%s\"; dozwolone pola: %s"
-#: ../cli/src/utils.c:256
+#: ../cli/src/utils.c:789
msgid "Option '--terse' requires specifying '--fields'"
msgstr "Opcja \"--terse\" wymaga podania opcji \"--fields\""
-#: ../cli/src/utils.c:260
+#: ../cli/src/utils.c:793
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"Opcja \"--terse\" wymaga konkretnej wartości opcji \"--fields\", nie \"%s\""
-#: ../cli/src/utils.c:470
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"Błąd: nie można utworzyć pośrednika obiektu usługi D-Bus dla org.freedesktop."
-"DBus"
-
-#: ../cli/src/utils.c:478
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Błąd: żądanie NameHasOwner się nie powiodło: %s"
-
-#: ../cli/src/utils.c:523
+#: ../cli/src/utils.c:1112
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -2009,7 +5197,7 @@ msgstr ""
"Ostrzeżenie: wersje programu nmcli (%s) i usługi NetworkManager (%s) się nie "
"zgadzają. Użycie opcji --nocheck ukrywa ostrzeżenie.\n"
-#: ../cli/src/utils.c:532
+#: ../cli/src/utils.c:1121
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -2019,6 +5207,61 @@ msgstr ""
"zgadzają. Wymuszono wykonanie używając opcji --nocheck, ale wynik może być "
"nieprzewidywalny."
+#: ../libnm-glib/nm-device.c:1794
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1800 ../tui/nm-editor-utils.c:182
+msgid "Mobile Broadband"
+msgstr "Komórkowe"
+
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1297
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4287 ../tui/nm-editor-utils.c:200
+msgid "Bond"
+msgstr "WiÄ…zane"
+
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1299
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4398 ../tui/nm-editor-utils.c:218
+msgid "Team"
+msgstr "Zespół"
+
+#: ../libnm-glib/nm-device.c:1808 ../libnm-util/nm-connection.c:1301
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4593 ../tui/nm-editor-utils.c:209
+msgid "Bridge"
+msgstr "Mostek"
+
+#: ../libnm-glib/nm-device.c:1812
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1840
+msgid "Wired"
+msgstr "Przewodowe"
+
+#: ../libnm-glib/nm-device.c:1871
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1873
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../libnm-glib/nm-device.c:1969 ../libnm-glib/nm-device.c:1988
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%2$s (%1$s)"
+
+#: ../libnm-glib/nm-remote-connection.c:151
+msgid "Disconnected by D-Bus"
+msgstr "Rozłączono przez D-Bus"
+
#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -2029,121 +5272,89 @@ msgstr "Plik klucza PEM nie zawiera znacznika końcowego \"%s\"."
msgid "Doesn't look like a PEM private key file."
msgstr "Nie wyglÄ…da na plik klucza prywatnego PEM."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Brak wystarczającej ilości pamięci do przechowania danych pliku PEM."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Uszkodzony plik PEM: Proc-Type nie był pierwszym znacznikiem."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Uszkodzony plik PEM: nieznany znacznik Proc-Type \"%s\"."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Uszkodzony plik PEM: DEK-Info nie był drugim znacznikiem."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Uszkodzony plik PEM: brak IV w znaczniku DEK-Info."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "Uszkodzony plik PEM: nieprawidłowy format IV w znaczniku DEK-Info."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Uszkodzony plik PEM: nieznany szyfr klucza prywatnego: \"%s\"."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "Nie można zdekodować klucza prywatnego."
-#: ../libnm-util/crypto.c:290
+#: ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr ""
"Odnalezienie oczekiwanego znacznika początkowego PKCS#8 się nie powiodło."
-#: ../libnm-util/crypto.c:298
+#: ../libnm-util/crypto.c:293
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr ""
"Odnalezienie oczekiwanego znacznika końcowego PKCS#8 \"%s\" się nie powiodło."
-#: ../libnm-util/crypto.c:318
-msgid "Not enough memory to store private key data."
-msgstr ""
-"Brak wystarczającej ilości pamięci do przechowania danych klucza prywatnego."
-
-#: ../libnm-util/crypto.c:323
+#: ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "Odkodowanie klucza prywatnego PKCS#8 się nie powiodło."
-#: ../libnm-util/crypto.c:345 ../libnm-util/crypto.c:631
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Brak wystarczającej ilości pamięci do przechowania danych certyfikatu."
-
-#: ../libnm-util/crypto.c:371
+#: ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "Liczba bajtów w IV musi być liczbą parzystą."
-#: ../libnm-util/crypto.c:380
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Brak wystarczającej ilości pamięci do przechowania IV."
-
-#: ../libnm-util/crypto.c:391
+#: ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV zawiera nieszesnastkowe cyfry."
-#: ../libnm-util/crypto.c:429 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:408 ../libnm-util/crypto_gnutls.c:150
+#: ../libnm-util/crypto_gnutls.c:267 ../libnm-util/crypto_nss.c:170
+#: ../libnm-util/crypto_nss.c:331
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Nieznany szyfr klucza prywatnego \"%s\"."
-#: ../libnm-util/crypto.c:438
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Brak wystarczającej ilości pamięci do odszyfrowania klucza prywatnego."
-
-#: ../libnm-util/crypto.c:503
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr ""
-"Brak wystarczającej ilości pamięci do przechowania odszyfrowanego klucza "
-"prywatnego."
-
-#: ../libnm-util/crypto.c:548
+#: ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "Nie można określić typu klucza prywatnego."
-#: ../libnm-util/crypto.c:603
+#: ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "Certyfikat PEM nie zawiera poczÄ…tkowego znacznika \"%s\"."
-#: ../libnm-util/crypto.c:612
+#: ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "Certyfikat PEM nie zawiera kończącego znacznika \"%s\"."
-#: ../libnm-util/crypto.c:636
+#: ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "Zdekodowanie certyfikatu się nie powiodło."
@@ -2157,108 +5368,98 @@ msgstr "Zainicjowanie modułu szyfrowania się nie powiodło."
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Zainicjowanie modułu MD5 się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "Nieprawidłowa długość IV (musi wynosić co najmniej %zd)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Brak wystarczającej ilości pamięci dla bufora odszyfrowanego klucza."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:169
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr ""
"Zainicjowanie kontekstu szyfru do odszyfrowania się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:178
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
"Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Ustawienie IV do odszyfrowania się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:196
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Odszyfrowanie klucza prywatnego się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:206 ../libnm-util/crypto_nss.c:260
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"Odszyfrowanie klucza prywatnego się nie powiodło: nieoczekiwana długość "
"wypełnienia."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:217 ../libnm-util/crypto_nss.c:271
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Odszyfrowanie klucza prywatnego się nie powiodło."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Nie można przydzielić pamięci do szyfrowania."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:289
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr ""
"Zainicjowanie kontekstu szyfru do szyfrowania się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:298
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr ""
"Ustawienie klucza symetrycznego do szyfrowania się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Ustawienie IV do szyfrowania się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Zaszyfrowanie danych się nie powiodło: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "BÅ‚Ä…d podczas inicjowania danych certyfikatu: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Nie można zdekodować certyfikatu: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:403
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Nie można zainicjować dekodera PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:416
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Nie można odszyfrować pliku PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:428
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Nie można zweryfikować pliku PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:456
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "Nie można zainicjować dekodera PKCS#8: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Nie można dekodować pliku PKCS#8: %s"
@@ -2273,132 +5474,512 @@ msgstr "Zainicjowanie modułu szyfrowania się nie powiodło: %d."
msgid "Failed to initialize the MD5 context: %d."
msgstr "Zainicjowanie kontekstu MD5 się nie powiodło: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "Nieprawidłowa długość IV (musi wynosić co najmniej %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Zainicjowanie gniazda szyfru do odszyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Ustawienie IV do odszyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Zainicjowanie kontekstu odszyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Odszyfrowanie klucza prywatnego się nie powiodło: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:238
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"Odszyfrowanie klucza prywatnego się nie powiodło: odszyfrowane dane są za "
"duże."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:249
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Zakończenie odszyfrowania klucza prywatnego się nie powiodło: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Zainicjowanie gniazda szyfru do szyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Ustawienie klucza symetrycznego do szyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Ustawienie IV do szyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Zainicjowanie kontekstu szyfrowania się nie powiodło."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Zaszyfrowanie się nie powiodło: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Nieoczekiwana ilość danych po zaszyfrowaniu."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Nie można zdekodować certyfikatu: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Nie można przekonwertować hasła do UCS2: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:496
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Nie można zainicjować dekodera PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:505
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Nie można odszyfrować pliku PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:514
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Nie można zweryfikować pliku PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "Nie można utworzyć losowych danych."
-#: ../libnm-util/nm-utils.c:2157
+#: ../libnm-util/nm-setting-8021x.c:594
+msgid "CA certificate must be in X.509 format"
+msgstr "Certyfikat CA musi być w formacie X.509"
+
+#: ../libnm-util/nm-setting-8021x.c:912 ../libnm-util/nm-setting-8021x.c:1175
+#: ../libnm-util/nm-setting-8021x.c:1498
+msgid "invalid certificate format"
+msgstr "nieprawidłowy format certyfikatu"
+
+#: ../libnm-util/nm-setting-8021x.c:1767
+msgid "invalid private key"
+msgstr "nieprawidłowy klucz prywatny"
+
+#: ../libnm-util/nm-setting-8021x.c:2078
+msgid "invalid phase2 private key"
+msgstr "nieprawidłowy klucz prywatny drugiego etapu"
+
+#: ../libnm-util/nm-setting-8021x.c:2280 ../libnm-util/nm-setting-8021x.c:2297
+#: ../libnm-util/nm-setting-8021x.c:2338 ../libnm-util/nm-setting-8021x.c:2355
+#: ../libnm-util/nm-setting-8021x.c:2407 ../libnm-util/nm-setting-8021x.c:2419
+#: ../libnm-util/nm-setting-8021x.c:2437 ../libnm-util/nm-setting-8021x.c:2449
+#: ../libnm-util/nm-setting-8021x.c:2473 ../libnm-util/nm-setting-8021x.c:2651
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:287
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-connection.c:786
+#: ../libnm-util/nm-setting-connection.c:841
+#: ../libnm-util/nm-setting-ip4-config.c:887
+#: ../libnm-util/nm-setting-ip6-config.c:812
+#: ../libnm-util/nm-setting-ip6-config.c:876
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:141
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:894
+#: ../libnm-util/nm-setting-wireless.c:753
+msgid "property is missing"
+msgstr "brak właściwości"
+
+#: ../libnm-util/nm-setting-8021x.c:2287 ../libnm-util/nm-setting-8021x.c:2304
+#: ../libnm-util/nm-setting-8021x.c:2345 ../libnm-util/nm-setting-8021x.c:2362
+#: ../libnm-util/nm-setting-8021x.c:2413 ../libnm-util/nm-setting-8021x.c:2425
+#: ../libnm-util/nm-setting-8021x.c:2443 ../libnm-util/nm-setting-8021x.c:2455
+#: ../libnm-util/nm-setting-8021x.c:2480 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:777
+#: ../libnm-util/nm-setting-connection.c:848
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:952
+#: ../libnm-util/nm-setting-ip4-config.c:961
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-wireless-security.c:932
+#: ../libnm-util/nm-setting-wireless-security.c:956
+msgid "property is empty"
+msgstr "właściwość jest pusta"
+
+#: ../libnm-util/nm-setting-8021x.c:2315 ../libnm-util/nm-setting-8021x.c:2327
+#: ../libnm-util/nm-setting-8021x.c:2373 ../libnm-util/nm-setting-8021x.c:2385
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "musi pasować do właściwości \"%s\" dla PKCS#12"
+
+#: ../libnm-util/nm-setting-8021x.c:2626 ../libnm-util/nm-setting-8021x.c:2660
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:943
+#: ../libnm-util/nm-setting-ip6-config.c:867
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:150 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:663 ../libnm-util/nm-setting-wired.c:672
+#: ../libnm-util/nm-setting-wireless-security.c:975
+#: ../libnm-util/nm-setting-wireless-security.c:984
+#: ../libnm-util/nm-setting-wireless-security.c:992
+#: ../libnm-util/nm-setting-wireless-security.c:1000
+#: ../libnm-util/nm-setting-wireless-security.c:1008
+#: ../libnm-util/nm-setting-wireless-security.c:1017
+#: ../libnm-util/nm-setting-wireless-security.c:1026
+#: ../libnm-util/nm-setting-wireless-security.c:1035
+#: ../libnm-util/nm-setting-wireless-security.c:1071
+#: ../libnm-util/nm-setting-wireless-security.c:1081
+#: ../libnm-util/nm-setting-wireless.c:813
+#: ../libnm-util/nm-setting-wireless.c:822
+#: ../libnm-util/nm-setting-wireless.c:831
+msgid "property is invalid"
+msgstr "właściwość jest nieprawidłowa"
+
+#: ../libnm-util/nm-setting-8021x.c:2685 ../libnm-util/nm-setting-8021x.c:2695
+#: ../libnm-util/nm-setting-8021x.c:2705 ../libnm-util/nm-setting-8021x.c:2715
+#: ../libnm-util/nm-setting-8021x.c:2725 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:903
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "\"%s\" nie jest prawidłową wartością dla właściwości"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "wymaga ustawienia \"%s\" lub \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "nieprawidłowa opcja \"%s\" lub jej wartość \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "tylko jedno z \"%s\" lub \"%s\" może być ustawione"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "brak wymaganej opcji \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "\"%s\" nie jest prawidłową wartością dla \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "\"%s=%s\" nie jest zgodne z \"%s > 0\""
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "\"%s\" nie jest prawidłową nazwą interfejsu dla opcji \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "opcja \"%s\" jest prawidłowa tylko dla \"%s=%s\""
+
+#: ../libnm-util/nm-setting-bond.c:606
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Brak wystarczającej ilości pamięci, aby utworzyć klucz szyfrowania."
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "\"%s=%s\" nie jest prawidłową konfiguracją dla \"%s\""
-#: ../libnm-util/nm-utils.c:2267
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Nie można przydzielić pamięci do utworzenia pliku PEM."
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "opcja \"%s\" wymaga ustawienia opcji \"%s\""
-#: ../libnm-util/nm-utils.c:2279
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Nie można przydzielić pamięci do zapisywania IV do pliku PEM."
+msgid "'%s' option is empty"
+msgstr "opcja \"%s\" jest pusta"
-#: ../libnm-util/nm-utils.c:2291
+#: ../libnm-util/nm-setting-bond.c:671
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "\"%s\" nie jest prawidłowym adresem IPv4 dla opcji \"%s\""
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
msgstr ""
-"Nie można przydzielić pamięci do zapisywania zaszyfrowanego klucza do pliku "
-"PEM."
+"\"%d\" nie jest prawidłową wartością dla właściwości (powinno wynosić <= %d)"
-#: ../libnm-util/nm-utils.c:2310
+#: ../libnm-util/nm-setting-bridge.c:270
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Nie można przydzielić pamięci dla danych pliku PEM."
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "wartość \"%d\" jest poza zakresem <%d-%d>"
+
+#: ../libnm-util/nm-setting-bridge.c:306 ../libnm-util/nm-setting-wired.c:638
+#: ../libnm-util/nm-setting-wired.c:696
+msgid "is not a valid MAC address"
+msgstr "nie jest prawidłowym adresem MAC"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "właściwość jest pusta\""
+
+#: ../libnm-util/nm-setting-connection.c:812
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "\"%s\" nie pasuje do nazwy interfejsu wirtualnego \"%s\""
+
+#: ../libnm-util/nm-setting-connection.c:858
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "wymaga obecności ustawienia \"%s\" w połączeniu"
+
+#: ../libnm-util/nm-setting-connection.c:880
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "konfiguracja IPv4 nie jest dozwolona dla podrzędnego"
+
+#: ../libnm-util/nm-setting-connection.c:893
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "konfiguracja IPv6 nie jest dozwolona dla podrzędnego"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "flagi są nieprawidłowe"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "flagi są nieprawidłowe - wyłączone"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "właściwość jest nieprawidłowa (niewłączone)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "element jest nieprawidłowy"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "suma nie wynosi 100%"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "właściwość jest nieprawidłowa"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "brak właściwości"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "wartość właściwości \"%s\" jest pusta lub za długa (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "\"%s\" zawiera nieprawidłowe znaki (należy używać [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "długość \"%s\" jest nieprawidłowa (powinna mieć 5 lub 6 cyfr)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "nie jest prawidłową nazwą interfejsu"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Należy podać P_Key, jeśli podawane jest nadrzędne"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "Połączenie P_Key InfiniBand nie podało nazwy interfejsu nadrzędnego"
+
+#: ../libnm-util/nm-setting-ip4-config.c:897
+#: ../libnm-util/nm-setting-ip6-config.c:822
+#, c-format
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "ta właściwość nie może być pusta dla \"%s=%s\""
+
+#: ../libnm-util/nm-setting-ip4-config.c:909
+#: ../libnm-util/nm-setting-ip4-config.c:919
+#: ../libnm-util/nm-setting-ip4-config.c:931
+#: ../libnm-util/nm-setting-ip6-config.c:835
+#: ../libnm-util/nm-setting-ip6-config.c:845
+#: ../libnm-util/nm-setting-ip6-config.c:855
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "ta właściwość nie jest dozwolona dla \"%s=%s\""
+
+#: ../libnm-util/nm-setting-ip4-config.c:978
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. adres IPv4 jest nieprawidłowy"
+
+#: ../libnm-util/nm-setting-ip4-config.c:988
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. adres IPv4 posiada nieprawidłowy przedrostek"
+
+#: ../libnm-util/nm-setting-ip4-config.c:998
+#, c-format
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. adres IPv4 posiada nieprawidłową etykietę \"%s\""
+
+#: ../libnm-util/nm-setting-ip4-config.c:1009
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "Liczba adresów IPv4/etykiet się nie zgadza (%d vs %d)"
+
+#: ../libnm-util/nm-setting-ip4-config.c:1025
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. trasa jest nieprawidłowa"
+
+#: ../libnm-util/nm-setting-ip4-config.c:1035
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. trasa posiada nieprawidłowy przedrostek"
+
+#: ../libnm-util/nm-setting-ip6-config.c:834
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "\"%s\" nie jest dozwolone dla %s=%s"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:762
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "długość SSID jest poza zakresem <1-32> bajtów"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:802
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "\"%d\" nie jest prawidłowym kanałem"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "\"%d\" jest poza prawidłowym zakresem <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "ustawienie tej właściwości wymaga niezerowej właściwości \"%s\""
+
+#: ../libnm-util/nm-setting-vlan.c:570
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "wartość \"%s\" nie pasuje do \"%s=%s\""
+
+#: ../libnm-util/nm-setting-vlan.c:581
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "\"%s\" nie jest UUID ani nazwÄ… interfejsu"
+
+#: ../libnm-util/nm-setting-vlan.c:594
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "właściwość nie została podana, tak jak i \"%s:%s\""
+
+#: ../libnm-util/nm-setting-vlan.c:607
+msgid "flags are invalid"
+msgstr "flagi są nieprawidłowe"
+
+#: ../libnm-util/nm-setting-wired.c:618
+#, c-format
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "\"%s\" nie jest prawidłową wartością portu Ethernet"
+
+#: ../libnm-util/nm-setting-wired.c:628
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "\"%s\" nie jest prawidłową wartością dupleksu"
+
+#: ../libnm-util/nm-setting-wired.c:685
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "nieprawidłowe \"%s\" lub jego wartość \"%s\""
+
+#: ../libnm-util/nm-setting-wireless-security.c:915
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "zabezpieczenie \"%s\" wymaga \"%s=%s\""
+
+#: ../libnm-util/nm-setting-wireless-security.c:944
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "zabezpieczenie \"%s\" wymaga obecności ustawienia \"%s\""
+
+#: ../libnm-util/nm-setting-wireless-security.c:965
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "wartość \"%d\" jest poza zakresem <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:1062
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "połączenia \"%s\" wymagają \"%s\" w tej właściwości"
+
+#: ../libnm-util/nm-setting-wireless-security.c:1092
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "\"%s\" może być używane tylko z \"%s=%s\" (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:771
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "\"%s\" nie jest prawidłowym trybem Wi-Fi"
+
+#: ../libnm-util/nm-setting-wireless.c:781
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "\"%s\" nie jest prawidłowym pasmem"
+
+#: ../libnm-util/nm-setting-wireless.c:791
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "wymaga ustawienia właściwości \"%s\""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2506,128 +6087,80 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"Polityka systemu powstrzymuje modyfikację trwałej systemowej nazwy komputera"
-#: ../src/main.c:130
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "Ustawienie maski sygnału nie powiodło: %d"
-
-#: ../src/main.c:139
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "Utworzenie wątku obsługującego sygnały się nie powiodło: %d"
-
-#: ../src/main.c:154
+#: ../src/main.c:153
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Otwarcie %s się nie powiodło: %s\n"
-#: ../src/main.c:160
+#: ../src/main.c:159
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Zapisanie do %s się nie powiodło: %s\n"
-#: ../src/main.c:165
+#: ../src/main.c:164
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Zamknięcie %s się nie powiodło: %s\n"
-#: ../src/main.c:208
+#: ../src/main.c:207
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "Usługa NetworkManager jest już uruchomiona (PID %ld)\n"
-#: ../src/main.c:335
+#: ../src/main.c:360
msgid "Print NetworkManager version and exit"
msgstr "Wyświetla wersję usługi NetworkManager i kończy działanie"
-#: ../src/main.c:336
+#: ../src/main.c:361
msgid "Don't become a daemon"
msgstr "Bez zmiany w usługę"
-#: ../src/main.c:337
+#: ../src/main.c:362
+msgid "Don't become a daemon, and log to stderr"
+msgstr ""
+"Bez zmiany w usługę i zapisywanie dziennika do standardowego wyjścia błędów"
+
+#: ../src/main.c:363
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Poziom dziennika: jeden z [%s]"
+
+#: ../src/main.c:365
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "Domeny dziennika oddzielone przez \",\": dowolne połączenie [%s]"
+
+#: ../src/main.c:367
msgid "Make all warnings fatal"
msgstr "Wszystkie ostrzeżenia jako krytyczne"
-#: ../src/main.c:338
+#: ../src/main.c:368
msgid "Specify the location of a PID file"
msgstr "Podaje położenie pliku PID"
-#: ../src/main.c:338
+#: ../src/main.c:368
msgid "filename"
msgstr "nazwa pliku"
-#: ../src/main.c:339
+#: ../src/main.c:369
msgid "State file location"
msgstr "Położenie pliku stanu"
-#: ../src/main.c:339
+#: ../src/main.c:369
msgid "/path/to/state.file"
msgstr "/ścieżka/do/pliku.stanu"
-#: ../src/main.c:340
-msgid "Config file location"
-msgstr "Położenie pliku konfiguracji"
-
-#: ../src/main.c:340
-msgid "/path/to/config.file"
-msgstr "/ścieżka/do/pliku.konfiguracji"
-
-#: ../src/main.c:341
-msgid "List of plugins separated by ','"
-msgstr "Lista wtyczek oddzielonych \",\""
-
-#: ../src/main.c:341
-msgid "plugin1,plugin2"
-msgstr "wtyczka1,wtyczka2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:343
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Poziom dziennika: jeden z [ERR, WARN, INFO, DEBUG]"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:346
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"Domeny dziennika oddzielone przez \",\": dowolne połączenie z\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:352
-msgid "An http(s) address for checking internet connectivity"
-msgstr "Adres http(s) do sprawdzania łączności internetowej"
-
-#: ../src/main.c:353
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "Czas między sprawdzaniem łączności (w sekundach)"
-
-#: ../src/main.c:354
-msgid "The expected start of the response"
-msgstr "Oczekiwany poczÄ…tek odpowiedzi"
-
-#: ../src/main.c:354
-msgid "Bingo!"
-msgstr "Bingo!"
-
-#: ../src/main.c:359
+#: ../src/main.c:395
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules nie są obsługiwane na tej platformie.\n"
-#: ../src/main.c:378
+#: ../src/main.c:400
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "Tylko root może uruchamiać usługę NetworkManager.\n"
+
+#: ../src/main.c:423
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2639,42 +6172,49 @@ msgstr ""
"wybranie bezprzewodowych punktów dostępowych, z którymi karty\n"
"sieciowe w komputerze powinny być powiązane."
-#: ../src/main.c:384
+#: ../src/main.c:429 ../src/main.c:445
#, c-format
-msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr ""
-"Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Parametr --help wyświetli listę prawidłowych opcji.\n"
-#: ../src/main.c:394
+#: ../src/main.c:450
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "Tylko root może uruchamiać usługę NetworkManager.\n"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"Ignorowanie nierozpoznanych domen dziennika \"%s\" przekazanych w wierszu "
+"poleceń.\n"
-#: ../src/main.c:427
+#: ../src/main.c:501
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Odczytanie konfiguracji się nie powiodło: (%d) %s\n"
-#: ../src/main.c:438
+#: ../src/main.c:515
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. Parametr --help wyświetli listę prawidłowych opcji.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "BÅ‚Ä…d w pliku konfiguracji: %s.\n"
+
+#: ../src/main.c:520
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"Ignorowanie nierozpoznanych domen dziennika \"%s\" z plików konfiguracji.\n"
-#: ../src/main.c:445
+#: ../src/main.c:528
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Przetworzenie pliku stanu %s się nie powiodło: (%d) %s\n"
-#: ../src/main.c:462
+#: ../src/main.c:541
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Nie można zmienić w usługę: %s [błąd %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:140
msgid "# Created by NetworkManager\n"
msgstr "# Utworzony przez usługę NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:147
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2683,190 +6223,955 @@ msgstr ""
"# Scalony od %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
msgid "no usable DHCP client could be found."
msgstr "nie odnaleziono używalnego klienta DHCP."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:320
msgid "'dhclient' could be found."
msgstr "nie można odnaleźć polecenia \"dhclient\"."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:330
msgid "'dhcpcd' could be found."
msgstr "nie można odnaleźć usługi \"dhcpcd\"."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:338
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "nieobsługiwany klient DHCP \"%s\""
-#: ../src/dns-manager/nm-dns-manager.c:376
+#: ../src/dns-manager/nm-dns-manager.c:385
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "UWAGA: obsługa nazw libc nie obsługuje więcej niż 3 serwery nazw."
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../src/dns-manager/nm-dns-manager.c:387
msgid "The nameservers listed below may not be recognized."
msgstr "Poniższe serwery nazw nie mogą nie zostać rozpoznane."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:150
#, c-format
msgid "Unknown log level '%s'"
msgstr "Nieznany poziom dziennika \"%s\""
-#: ../src/logging/nm-logging.c:188
+#: ../src/logging/nm-logging.c:229
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Nieznana domena dziennika \"%s\""
-#: ../src/modem-manager/nm-modem-cdma.c:271
-#: ../src/modem-manager/nm-modem-broadband.c:553 ../src/nm-device-bt.c:338
-#, c-format
-msgid "CDMA connection %d"
-msgstr "Połączenie CDMA %d"
+#: ../src/config/nm-config.c:281
+msgid "Config file location"
+msgstr "Położenie pliku konfiguracji"
-#: ../src/modem-manager/nm-modem-gsm.c:549
-#: ../src/modem-manager/nm-modem-broadband.c:531 ../src/nm-device-bt.c:334
-#, c-format
-msgid "GSM connection %d"
-msgstr "Połączenie GSM %d"
+#: ../src/config/nm-config.c:281
+msgid "/path/to/config.file"
+msgstr "/ścieżka/do/pliku.konfiguracji"
-#: ../src/nm-device-bond.c:202
-#, c-format
-msgid "Bond connection %d"
-msgstr "Połączenie wiązane %d"
+#: ../src/config/nm-config.c:282
+msgid "Config directory location"
+msgstr "Położenie katalogu konfiguracji"
+
+#: ../src/config/nm-config.c:282
+msgid "/path/to/config/dir"
+msgstr "/ścieżka/do/katalogu/konfiguracji"
+
+#: ../src/config/nm-config.c:284
+msgid "List of plugins separated by ','"
+msgstr "Lista wtyczek oddzielonych \",\""
-#: ../src/nm-device-adsl.c:194
+#: ../src/config/nm-config.c:284
+msgid "plugin1,plugin2"
+msgstr "wtyczka1,wtyczka2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:287
+msgid "An http(s) address for checking internet connectivity"
+msgstr "Adres http(s) do sprawdzania łączności internetowej"
+
+#: ../src/config/nm-config.c:288
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Czas między sprawdzaniem łączności (w sekundach)"
+
+#: ../src/config/nm-config.c:289
+msgid "The expected start of the response"
+msgstr "Oczekiwany poczÄ…tek odpowiedzi"
+
+#: ../src/config/nm-config.c:289
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/devices/adsl/nm-device-adsl.c:122
#, c-format
msgid "ADSL connection %d"
msgstr "Połączenie ADSL %d"
-#: ../src/nm-device-bridge.c:201
+#: ../src/devices/bluetooth/nm-bluez-device.c:194
#, c-format
-msgid "Bridge connection %d"
-msgstr "Połączenie mostkowane %d"
+msgid "%s Network"
+msgstr "Sieć %s"
-#: ../src/nm-device-bt.c:309
+#: ../src/devices/bluetooth/nm-device-bt.c:284
#, c-format
msgid "PAN connection %d"
msgstr "Połączenie PAN %d"
-#: ../src/nm-device-bt.c:342
+#: ../src/devices/bluetooth/nm-device-bt.c:309
+#: ../src/devices/wwan/nm-modem-broadband.c:438
+#: ../src/devices/wwan/nm-modem-old.c:815
+#, c-format
+msgid "GSM connection %d"
+msgstr "Połączenie GSM %d"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:313
+#: ../src/devices/wwan/nm-modem-broadband.c:460
+#: ../src/devices/wwan/nm-modem-old.c:842
+#, c-format
+msgid "CDMA connection %d"
+msgstr "Połączenie CDMA %d"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:317
#, c-format
msgid "DUN connection %d"
msgstr "Połączenie DUN %d"
-#: ../src/nm-device-ethernet.c:1320
+#: ../src/devices/nm-device-bond.c:138 ../tui/nm-editor-utils.c:204
+#, c-format
+msgid "Bond connection %d"
+msgstr "Połączenie wiązane %d"
+
+#: ../src/devices/nm-device-bridge.c:148 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Połączenie mostkowane %d"
+
+#: ../src/devices/nm-device-ethernet.c:1486
#, c-format
msgid "PPPoE connection %d"
msgstr "Połączenie PPPoE %d"
-#: ../src/nm-device-ethernet.c:1320 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1486
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Połączenie przewodowe %d"
-#: ../src/nm-device-infiniband.c:299
+#: ../src/devices/nm-device-infiniband.c:255 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "Połączenie InfiniBand %d"
-#: ../src/nm-device-olpc-mesh.c:293
+#: ../src/devices/nm-device-team.c:150 ../tui/nm-editor-utils.c:223
#, c-format
-msgid "Mesh %d"
-msgstr "Sieć kratowa %d"
+msgid "Team connection %d"
+msgstr "Połączenie zespołowe %d"
-#: ../src/nm-device-vlan.c:331
+#: ../src/devices/nm-device-vlan.c:230 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "Połączenie VLAN %d"
-#: ../src/nm-manager.c:751
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:164
+#, c-format
+msgid "Mesh %d"
+msgstr "Sieć kratowa %d"
+
+#: ../src/nm-manager.c:3304 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "Połączenie VPN %d"
-#: ../src/nm-netlink-monitor.c:149 ../src/nm-netlink-monitor.c:273
-#: ../src/nm-netlink-monitor.c:714
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "błąd podczas przetwarzania komunikatu netlink: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "Usługa NetworkManager musi wyłączyć sieci"
-#: ../src/nm-netlink-monitor.c:252
-msgid "error occurred while waiting for data on socket"
-msgstr "wystąpił błąd podczas oczekiwania na dane na gnieździe"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:113
+msgid "System"
+msgstr "Systemowe"
-#: ../src/nm-netlink-monitor.c:297
+#: ../test/nm-online.c:96
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
+msgid "\rConnecting"
+msgstr "\rÅÄ…czenie"
+
+#: ../test/nm-online.c:148
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"nie można połączyć się z netlink dla monitorowania stanu połączenia: %s"
+"Czas oczekiwania na połączenie, w sekundach (bez opcji, domyślna wartość to "
+"30)"
-#: ../src/nm-netlink-monitor.c:308
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
+#: ../test/nm-online.c:149
+msgid "Exit immediately if NetworkManager is not running or connecting"
msgstr ""
-"nie można włączyć przekazywania danych uwierzytelniających uchwytu netlink: "
-"%s"
+"Kończy działanie od razu, jeśli usługa NetworkManager nie jest uruchomiona "
+"lub nie Å‚Ä…czy"
-#: ../src/nm-netlink-monitor.c:331 ../src/nm-netlink-monitor.c:391
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
+#: ../test/nm-online.c:150
+msgid "Don't print anything"
+msgstr "Bez wyświetlania czegokolwiek"
+
+#: ../test/nm-online.c:151
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "Czeka na uruchomienie usługi NetworkManager zamiast połączenia"
+
+#: ../test/nm-online.c:172
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
msgstr ""
-"nie można przydzielić uchwytu netlink dla monitorowania stanu połączenia: %s"
+"Czeka, aż usługa NetworkManager ukończy aktywowanie połączeń sieciowych."
-#: ../src/nm-netlink-monitor.c:416
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#: ../test/nm-online.c:179 ../test/nm-online.c:185
+msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
-"nie można przydzielić pamięci podręcznej połączenia netlink dla "
-"monitorowania stanu połączenia: %s"
+"Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji."
+
+#: ../tui/newt/nmt-newt-utils.c:179 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:121
+msgid "OK"
+msgstr "OK"
-#: ../src/nm-netlink-monitor.c:543
+#: ../tui/newt/nmt-newt-utils.c:327 ../tui/newt/nmt-newt-utils.c:359
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "nie można dołączyć do grupy netlink: %s"
+msgid "Could not create temporary file: %s"
+msgstr "Nie można utworzyć pliku tymczasowego: %s"
-#: ../src/nm-netlink-monitor.c:690 ../src/nm-netlink-monitor.c:703
+#: ../tui/newt/nmt-newt-utils.c:367
#, c-format
-msgid "error updating link cache: %s"
-msgstr "błąd podczas aktualizowania pamięci podręcznej połączenia: %s"
+msgid "Editor failed: %s"
+msgstr "Edytor się nie powiódł: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
-msgid "System"
-msgstr "Systemowe"
+#: ../tui/newt/nmt-newt-utils.c:375
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "Edytor się nie powiódł ze stanem %d"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3705
-msgid "Bond"
-msgstr "WiÄ…zane"
+#: ../tui/newt/nmt-newt-utils.c:377
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "Edytor się nie powiódł z sygnałem %d"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3898
-msgid "Bridge"
-msgstr "Mostek"
+#: ../tui/newt/nmt-newt-utils.c:381
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Nie można ponownie odczytać pliku: %s"
-#: ../test/nm-online.c:111
+#: ../tui/nm-editor-utils.c:160
#, c-format
-msgid "\rConnecting"
-msgstr "\rÅÄ…czenie"
+msgid "Ethernet connection %d"
+msgstr "Połączenie ethernet %d"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "Czas oczekiwania na połączenie, w sekundach (domyślnie 30)"
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Połączenie Wi-Fi %d"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Połączenie komórkowe %d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "Połączenie DSL %d"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "Wybierz..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Dodaj"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:175
+#: ../tui/nmt-page-ip6.c:173 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "Modyfikuj..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:467
+msgid "Delete"
+msgstr "Usuń"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "Nie można utworzyć edytora dla połączenia \"%s\" typu \"%s\"."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Nie można utworzyć edytora dla nieprawidłowego połączenia \"%s\"."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit Connection"
+msgstr "Modyfikuj połączenie"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Błąd podczas zapisywania połączenia: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Nie można zapisać połączenia: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Nie można dodać nowego połączenia: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:192
+#: ../tui/nmtui-edit.c:466 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(domyślne)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "bajty"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Aktywna kopia zapasowa"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Rozgłaszanie"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Adaptacyjne równoważenie obciążenia przesyłania (TLB)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Adaptacyjne równoważenie obciążenia (ALB)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (zalecane)"
+
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "Podrzędne"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "Tryb"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "Główne"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "Monitorowanie Å‚Ä…cza"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "Częstotliwość monitorowania"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Opóźnienie łącza wysyłania"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Opóźnienie łącza pobierania"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "Cele ARP"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "PORT MOSTKA"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "Priorytet"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Koszt ścieżki"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Tryb hairpin"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "MOSTEK"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "s"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "Czas starzenia"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "WÅ‚Ä…czenie STP (Spanning Tree Protocol)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Opóźnienie przekazywania"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Czas powitania"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Maksymalny wiek"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "Sklonowany adres MAC"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Datagram"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "Połączone"
+
+#: ../tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "Tryb przesyłania"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Wyłączone"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Automatyczne"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Link-Local"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Ręczne"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Współdzielone"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "KONFIGURACJA IPv4"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(Brak reguł użytkownika)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "%d reguła użytkownika"
+msgstr[1] "%d reguły użytkownika"
+msgstr[2] "%d reguł użytkownika"
+
+#: ../tui/nmt-page-ip4.c:144 ../tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "Adresy"
+
+#: ../tui/nmt-page-ip4.c:150 ../tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "Brama"
+
+#: ../tui/nmt-page-ip4.c:156 ../tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "Serwery DNS"
+
+#: ../tui/nmt-page-ip4.c:162 ../tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "Domeny wyszukiwania"
+
+#: ../tui/nmt-page-ip4.c:177 ../tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "Trasowanie"
+
+#: ../tui/nmt-page-ip4.c:179 ../tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "Bez używania tej sieci jako domyślnej trasy"
+
+#: ../tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "Wymaganie adresowania IPv4 dla tego połączenia"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignorowanie"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automatyczne (tylko DHCP)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "KONFIGURACJA IPv6"
+
+#: ../tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "Wymaganie adresowania IPv6 dla tego połączenia"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "Ukryj"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "Wyświetl"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "Nazwa profilu"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "UrzÄ…dzenie"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "ÅÄ…czenie automatyczne"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Dostępne dla wszystkich użytkowników"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "PORT ZESPOÅU"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "Konfiguracja JSON"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "ZESPÓÅ"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "Nadrzędne"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "Identyfikator VLAN"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Klient"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "Punkt dostępowy"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Sieć Ad-hoc"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Automatyczne"
+
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Brak"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA i WPA2 Personal"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA i WPA2 Enterprise"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "40/128-bitowy klucz WEP (szesnastkowy lub ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "128-bitowe hasło WEP"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "Dynamiczne WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (domyślne)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "System otwarty"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "Klucz współdzielony"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "Kanał"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "Zabezpieczenia"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "Hasło"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(WPA Enterprise nie jest jeszcze obsługiwane)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "Klucz"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "Indeks WEP"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "Uwierzytelnianie"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Dynamiczne WEP nie jest jeszcze obsługiwane)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "Nazwa użytkownika"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Pytanie o to hasło za każdym razem"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Wyświetlanie hasła"
+
+#: ../tui/nmt-route-table.c:226
+msgid "Destination"
+msgstr "Cel"
+
+#: ../tui/nmt-route-table.c:226
+msgid "Prefix"
+msgstr "Przedrostek"
+
+#: ../tui/nmt-route-table.c:235
+msgid "Next Hop"
+msgstr "Następny krok"
+
+#: ../tui/nmt-route-table.c:243
+msgid "Metric"
+msgstr "Parametry"
+
+#: ../tui/nmt-route-table.c:263
+msgid "No custom routes are defined."
+msgstr "Nie określono żadnych tras użytkownika."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "Tożsamość"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "Hasło klucza prywatnego"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "Usługa"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "Sieć bezprzewodowa wymaga uwierzytelnienia"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
msgstr ""
-"Kończy działanie od razu, jeśli usługa NetworkManager nie jest uruchomiona "
-"lub w trakcie Å‚Ä…czenia"
+"Wymagane są hasła lub klucze szyfrowania, aby uzyskać dostęp do sieci "
+"bezprzewodowej \"%s\"."
-#: ../test/nm-online.c:144
-msgid "Don't print anything"
-msgstr "Bez wyświetlania czegokolwiek"
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Przewodowe uwierzytelnianie 802.1X"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "Oczekuje na pomyślne połączenie w usłudze NetworkManager."
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Nazwa sieci"
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
-msgid "Invalid option. Please use --help to see a list of valid options."
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "Uwierzytelnianie DSL"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "Wymagany jest kod PIN"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Urządzenie komórkowe wymaga kodu PIN"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "Hasło sieci komórkowej"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "Wymagane jest hasło, aby połączyć z \"%s\"."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "Proszę wybrać typ połączenia podrzędnego do dodania."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Dodaj..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Usuń"
+
+#: ../tui/nmtui-connect.c:94
+msgid "Activation failed"
+msgstr "Aktywacja się nie powiodła"
+
+#: ../tui/nmtui-connect.c:142
+msgid "Connecting..."
+msgstr "ÅÄ…czenie..."
+
+#: ../tui/nmtui-connect.c:172 ../tui/nmtui-connect.c:195
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Nie można aktywować połączenia: %s"
+
+#: ../tui/nmtui-connect.c:259 ../tui/nmtui-connect.c:308
+msgid "Activate"
+msgstr "Aktywuj"
+
+#: ../tui/nmtui-connect.c:261
+msgid "Deactivate"
+msgstr "Deaktywuj"
+
+#: ../tui/nmtui-connect.c:313 ../tui/nmtui-edit.c:95 ../tui/nmtui.c:115
+msgid "Quit"
+msgstr "Zakończ"
+
+#: ../tui/nmtui-connect.c:336
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Brak połączenia \"%s\""
+
+#: ../tui/nmtui-connect.c:338
+msgid "Connection is already active"
+msgstr "Połączenie jest już aktywne"
+
+#: ../tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "Utwórz"
+
+#: ../tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "Proszę wybrać typ połączenia do utworzenia."
+
+#: ../tui/nmtui-edit.c:350
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
msgstr ""
-"Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji."
+"Jeśli tworzone jest połączenie VPN, a tworzone połączenie VPN nie pojawia "
+"się na liście, to być może właściwa wtyczka VPN nie jest zainstalowana."
+
+#: ../tui/nmtui-edit.c:386 ../tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "Nowe połączenie"
+
+#: ../tui/nmtui-edit.c:439
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Nie można usunąć połączenia: %s"
+
+#: ../tui/nmtui-edit.c:468
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Na pewno usunąć połączenie \"%s\"?"
+
+#: ../tui/nmtui-edit.c:482
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "Nie można usunąć połączenia: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Ustaw nazwÄ™ komputera"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Nazwa komputera"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Ustawiono nazwÄ™ komputera na \"%s\""
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Nie można ustawić nazwy komputera: %s"
+
+#: ../tui/nmtui.c:60 ../tui/nmtui.c:63
+msgid "connection"
+msgstr "połączenie"
+
+#: ../tui/nmtui.c:61
+msgid "Edit a connection"
+msgstr "Modyfikuj połączanie"
+
+#: ../tui/nmtui.c:64
+msgid "Activate a connection"
+msgstr "Aktywuj połączenie"
+
+#: ../tui/nmtui.c:66
+msgid "new hostname"
+msgstr "nowa nazwa komputera"
+
+#: ../tui/nmtui.c:67
+msgid "Set system hostname"
+msgstr "Ustaw systemowÄ… nazwÄ™ komputera"
+
+#: ../tui/nmtui.c:90
+msgid "NetworkManager TUI"
+msgstr "Tekstowy interfejs usługi NetworkManager"
+
+#: ../tui/nmtui.c:98
+msgid "Please select an option"
+msgstr "Proszę wybrać opcję"
+
+#: ../tui/nmtui.c:159
+msgid "Usage"
+msgstr "Użycie"
+
+#: ../tui/nmtui.c:241
+msgid "Could not parse arguments"
+msgstr "Nie można przetworzyć parametrów"
+
+#: ../tui/nmtui.c:251
+msgid "NetworkManager is not running."
+msgstr "Usługa NetworkManager nie jest uruchomiona."
diff --git a/po/pt_BR.po b/po/pt_BR.po
index cfb50d243..245809f2c 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,1439 +7,3432 @@
# Og Maciel <ogmaciel@gnome.org>, 2008.
# Fabrício Godoy <skarllot@gmail.com>, 2008.
# Enrico Nicoletto <liverig@gmail.com>, 2013.
-#
+# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013.
+# gcintra <gcintra@redhat.com>, 2013. #zanata
+# gcintra <gcintra@redhat.com>, 2014. #zanata
msgid ""
msgstr ""
-"Project-Id-Version: NetworkManager\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2013-02-10 15:25+0000\n"
-"PO-Revision-Date: 2013-02-10 17:03-0300\n"
-"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
-"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
-"Language: pt_BR\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2014-02-27 06:23-0500\n"
+"Last-Translator: gcintra <gcintra@redhat.com>\n"
+"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
+"Language: pt-BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Zanata 3.2.3\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:133
-#: ../cli/src/connections.c:167
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
msgstr "GRUPO"
-#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ENDEREÇO"
-#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ROTA"
-#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
-#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMÃNIO"
-#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
-#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPÇÃO"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "\"%s\" não é um endereço IPv4 válido"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "O prefixo \"%s\" é inválido; <1-32> são permitidos"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "O gateway \"%s\" é inválido"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "\"%s\" não é um endereço IPv6 válido"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "O prefixo \"%s\" é inválido; <1-128> são permitidos"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "\"%s\" não é uma rota IPv4 válida"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "O prefixo \"%s\" é inválido; <0-32> são permitidos"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "O próximo endereço de salto \"%s\" é inválido"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "A métrica \"%s\" é inválida"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "\"%s\" não é uma rota IPv6 válida"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "O prefixo \"%s\" é inválido; <0-128> são permitidos"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "não gerenciável"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "não disponível"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "desconectado"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "conectando (preparando)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "conectando (configurando)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "conectando (precisa de autenticação)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "conectando (obtendo configuração de IP)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "conectando (verificando conectividade de IP)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "conectando (iniciando conexões secundárias)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "conectado"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:466
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
msgid "deactivating"
msgstr "desativando"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "falha na conexão"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:469
-#: ../cli/src/connections.c:492 ../cli/src/connections.c:1187
-#: ../cli/src/devices.c:650 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:661
-#: ../cli/src/settings.c:689 ../cli/src/settings.c:751 ../cli/src/utils.c:533
-#: ../src/main.c:434 ../src/main.c:453
+#: ../cli/src/common.c:643 ../cli/src/connections.c:737
+#: ../cli/src/connections.c:760 ../cli/src/connections.c:1462
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2257
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1080 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "desconhecido"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "Nenhuma razão fornecida"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
msgid "Unknown error"
msgstr "Erro desconhecido"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "Agora o dispositivo é gerenciável"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "Agora o dispositivo não é gerenciável"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "O dispositivo pode não estar pronto para configuração"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"A configuração IP não pode estar reservada (nenhum endereço disponível, "
"timeout, etc)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "A configuração IP não é mais válida"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "Segredos foram requisitados, mas não fornecidos"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X suplicante - desconectado"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X suplicante - falha de configuração"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X suplicante - falhou"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X suplicante - demorou muito para autenticar"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "O serviço PPP falhou ao iniciar"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "Serviço PPP desconectado"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "O PPP falhou"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "O cliente DHCP falhou ao iniciar"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "Erro no cliente DHCP"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "O cliente DHCP falhou"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "O serviço de conexão compartilhada falhou ao iniciar"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "falha no serviço de conexão compartilhada"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "O serviço AutoIP falhou ao iniciar"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "Erro no serviço AutoIP"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "O serviço AutoIP falhou"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "A linha está ocupada"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "Sem tom de discagem"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "Nenhum serviço de comunicação pôde ser estabelecido"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "Tempo excedido durante a requisição de discagem"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "A tentativa de discagem falhou"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "Falha na inicialização do modem"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
-msgstr "Falha ao selecionar a APN especificada"
+msgstr "Falha ao selecionar o APN especificado"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "Não procurando redes"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "Registro na rede negado"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "Tempo excedido ao registrar na rede"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "Falha ao registrar com a rede requisitada"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "Verificação de PIN falhou"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "O firmware necessário para o dispositivo pode estar faltando"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "O dispositivo foi removido"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager posto para dormir"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "A conexão do dispositivo ativo desapareceu"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "Dispositivo desconectado pelo usuário ou cliente"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "Comunicador/link alterado"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "A conexão do dispositivo existente foi assumida"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
-msgstr "O supplicant agora está disponível"
+msgstr "O suplicante agora está disponível"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
-msgstr "O modem não pôde ser encontrado."
+msgstr "O modem não pôde ser encontrado"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "A conexão Bluetooth falhou ou teve seu tempo excedido"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "Cartão SIM do modem GSM não inserido"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
-msgstr "PIN do modem GSM necessário"
+msgstr "PIN do cartão SIM do modem GSM necessário"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
-msgstr "PUK do modem GSM necessário"
+msgstr "PUK do cartão SIM do modem GSM necessário"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
-msgstr "SIM do modem GSM errado"
+msgstr "SIM do cartão SIM do modem GSM errado"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "Dispositivo InfiniBand não oferece suporte ao modo conectado"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "Uma dependência da conexão falhou"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "Um problema com a RFC 2684 Ethernet sobre ponte ADSL"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager não está disponível"
-#: ../cli/src/common.c:558
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
-msgstr "A rede Wi-Fi não pôde ser encontrada"
+msgstr "Não foi possível encontrar a rede Wi-Fi"
-#: ../cli/src/common.c:561
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "Uma conexão secundária à conexão base falhou"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:296 ../cli/src/devices.c:314
-#: ../cli/src/devices.c:436 ../cli/src/devices.c:480
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "Configuração do DCB ou FCoE falhou"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "controle do teamd falhou"
+
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "Desconhecido"
-#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
-#: ../cli/src/devices.c:108 ../cli/src/devices.c:132 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152 ../cli/src/devices.c:166 ../cli/src/devices.c:180
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:218 ../cli/src/devices.c:227
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "O mapa de prioridade \"%s\" é inválido"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "A prioridade \"%s\" não é válida (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' não é uma configuração de equipe válida ou um nome de arquivo."
+
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "Nome configuração?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "Nome propriedade?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "Digite o tipo de conexão: "
+
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:175
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NOME"
-#. 0
-#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
-#: ../cli/src/devices.c:72 ../cli/src/devices.c:110 ../cli/src/devices.c:205
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:201
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TIPO"
-#. 2
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "HORÃRIO"
-#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "HORÃRIO-REAL"
-#. 4
-#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:122
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "AUTOCONECTAR"
-#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "SOMENTE-LEITURA"
-#. 6
-#. 8
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
-#: ../cli/src/devices.c:74 ../cli/src/devices.c:192 ../cli/src/devices.c:208
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "CAMINHO DBUS"
-#. 2
-#: ../cli/src/connections.c:136
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "DISPOSITIVOS"
-#. 3
-#. 1
-#. 8
-#. 1
-#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:117 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "ESTADO"
-#. 4
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "PADRÃO"
-#. 5
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:180
msgid "DEFAULT6"
msgstr "PADRÃO6"
-#. 6
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "OBJETO-ESPEC."
-#. 7
-#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
msgid "VPN"
msgstr "VPN"
-#. 9
-#: ../cli/src/connections.c:143
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CAMINHO CON"
-#. 10
-#: ../cli/src/connections.c:144
+#: ../cli/src/connections.c:185
msgid "ZONE"
msgstr "ZONA"
-#. 11
-#: ../cli/src/connections.c:145
+#: ../cli/src/connections.c:186
msgid "MASTER-PATH"
msgstr "CAMINHO PRINCIPAL"
-#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
-msgid "GENERAL"
-msgstr "GERAL"
-
-#. 0
-#: ../cli/src/connections.c:154
-msgid "IP"
-msgstr "IP"
-
-#. 1
-#: ../cli/src/connections.c:169
+#: ../cli/src/connections.c:202
msgid "USERNAME"
msgstr "NOME DE USUÃRIO"
-#. 2
-#: ../cli/src/connections.c:170
+#: ../cli/src/connections.c:203
msgid "GATEWAY"
msgstr "MÃQUINA"
-#. 3
-#: ../cli/src/connections.c:171
+#: ../cli/src/connections.c:204
msgid "BANNER"
msgstr "BANNER"
-#. 4
-#: ../cli/src/connections.c:172
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
msgstr "ESTADO VPN"
-#. 5
-#: ../cli/src/connections.c:173
+#: ../cli/src/connections.c:206
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:195
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GERAL"
+
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:255
#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+msgstr ""
+"Uso: conexão do nmcli { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+
+#: ../cli/src/connections.c:278
+#, c-format
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Show connections which are currently used by a device to connect to a "
+"network.\n"
+"Without a parameter, all active connections are listed. When <ID> is "
+"provided,\n"
+"the connection details are displayed instead.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Show in-memory and on-disk connections, some of which may also be active if\n"
+"a device is using that connection profile. Without a parameter, all profiles\n"
+"are listed. When <ID> is provided, the profile details are displayed instead."
+"\n"
+"\n"
+msgstr ""
+"Uso: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Exibir conexões que são utilizadas atualmente por um dispositivo para "
+"conectar-se à uma rede de trabalho.\n"
+"Sem um parâmetros, todas as conexões ativas são listadas. Quando um <ID> é "
+"fornecido,\n"
+"são exibidos detalhes de conexão.\n"
+"\n"
+"ARGUMENTS := configurado [[id | uuid | path] <ID>]\n"
+"\n"
+"Exibe conexões in-memord e on-disk, algumas das quais podem também estar "
+"ativas se um dispositivo\n"
+"estiver utilizando aquele perfil de conexão. Sem um parâmetro, todos os "
+"perfis\n"
+"são listados. Quando o <ID> é fornecido, são exibidos os detalhes do perfil.\n"
+"\n"
+
+#: ../cli/src/connections.c:297
+#, c-format
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"Uso: ativa a conexão do nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Ative uma conexão em um dispositivo. O perfil para ativar é identificado por "
+"seu\n"
+"nome, UUID ou caminho do D-Bus.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Ative um dispositivo com uma conexão. O perfil da conexão é selecionado\n"
+"automaticamente pelo NetworkManager.\n"
+"\n"
+"ifname - especifica o dispositivo para ativar a conexão\n"
+"ap - especifica AP para se conectar (válido somente para Wi-Fi)\n"
+"nsp - especifica NSP para se conectar (válido somente para WiMAX)\n"
+"\n"
+
+#: ../cli/src/connections.c:318
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Uso: conexão nmcli desativada { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Desativar uma conexão de um dispositivo (sem prevenir o dispositivo de auto-"
+"ativamento no futuro).\n"
+"O perfil para desativar é identificado por seu nome,\n"
+"UUID or D-Bus path.\n"
+"\n"
+
+#: ../cli/src/connections.c:331
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"Uso: adicionar conexão do nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+
+#: ../cli/src/connections.c:408
+#, c-format
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
"\n"
msgstr ""
-"Utilização: nmcli connection { COMANDO | help }\n"
-" COMANDO := { list | status | up | down | delete }\n"
+"Uso: modificação de conexão do nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <caminho>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <nome>] [--"
-"nowait] [--timeout <tempo de espera>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<tempo de espera>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"Modifica uma propriedade única no perfil de conexão. \n"
+"O perfil é identificado pelo seu nome, UUID ou caminho de D-Bus.\n"
"\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:442
+#: ../cli/src/connections.c:420
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Erro: \"con list\": %s"
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"Uso: edição de conexão do nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edita um perfil de conexão existente em um editor interativo.\n"
+"O perfil é identificado pelo seu nome, UUID ou caminho de D-Bus\n"
+"\n"
+"ARGUMENTS := [tipo <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Adiciona um perfil de conexão novo em um editor interativo.\n"
+"\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
+#: ../cli/src/connections.c:436
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Erro: \"con list\": %s; campos permitidos: %s"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"Uso: remover a conexão de nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Remover um perfil de conexão.\n"
+"O perfil é identificado por seu nome, UUID ou caminho de D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:266
+#: ../cli/src/connections.c:448
+#, c-format
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Usage: recarga de conexão de nmcli { help }\n"
+"\n"
+"Recarrega todos os arquivos de conexão do disco.\n"
+"\n"
+
+#: ../cli/src/connections.c:457
+#, c-format
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"Uso: carga de conexão do nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Carga/recarga de um ou mais arquivos de conexão do disco. Use este após "
+"editar\n"
+"manualmente um arquivo de conexão para garantir que o NetworkManager sabe de "
+"seu último\n"
+"estado.\n"
+"\n"
+
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "Erro: 'list configured': %s"
+
+#: ../cli/src/connections.c:523
msgid "Connection details"
msgstr "Detalhes da conexão"
-#: ../cli/src/connections.c:317
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "nunca"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:550 ../cli/src/connections.c:551
-#: ../cli/src/connections.c:553 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:866 ../cli/src/settings.c:941
-#: ../cli/src/settings.c:1076 ../cli/src/settings.c:1166
-#: ../cli/src/settings.c:1376 ../cli/src/settings.c:1377
-#: ../cli/src/settings.c:1379 ../cli/src/settings.c:1381
-#: ../cli/src/settings.c:1382 ../cli/src/settings.c:1513
-#: ../cli/src/settings.c:1514 ../cli/src/settings.c:1515
-#: ../cli/src/settings.c:1516 ../cli/src/settings.c:1594
-#: ../cli/src/settings.c:1595 ../cli/src/settings.c:1596
-#: ../cli/src/settings.c:1597 ../cli/src/settings.c:1598
-#: ../cli/src/settings.c:1599 ../cli/src/settings.c:1600
-#: ../cli/src/settings.c:1601 ../cli/src/settings.c:1602
-#: ../cli/src/settings.c:1603 ../cli/src/settings.c:1604
-#: ../cli/src/settings.c:1605 ../cli/src/settings.c:1606
-#: ../cli/src/settings.c:1688 ../cli/src/settings.c:2044
-#: ../cli/src/settings.c:2081
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:442
msgid "yes"
msgstr "sim"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:550 ../cli/src/connections.c:551
-#: ../cli/src/connections.c:553 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:866 ../cli/src/settings.c:868
-#: ../cli/src/settings.c:941 ../cli/src/settings.c:1076
-#: ../cli/src/settings.c:1166 ../cli/src/settings.c:1376
-#: ../cli/src/settings.c:1377 ../cli/src/settings.c:1379
-#: ../cli/src/settings.c:1381 ../cli/src/settings.c:1382
-#: ../cli/src/settings.c:1513 ../cli/src/settings.c:1514
-#: ../cli/src/settings.c:1515 ../cli/src/settings.c:1516
-#: ../cli/src/settings.c:1594 ../cli/src/settings.c:1595
-#: ../cli/src/settings.c:1596 ../cli/src/settings.c:1597
-#: ../cli/src/settings.c:1598 ../cli/src/settings.c:1599
-#: ../cli/src/settings.c:1600 ../cli/src/settings.c:1601
-#: ../cli/src/settings.c:1602 ../cli/src/settings.c:1603
-#: ../cli/src/settings.c:1604 ../cli/src/settings.c:1605
-#: ../cli/src/settings.c:1606 ../cli/src/settings.c:1688
-#: ../cli/src/settings.c:2044 ../cli/src/settings.c:2081
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:444
msgid "no"
msgstr "não"
-#: ../cli/src/connections.c:393
-msgid "Connection list"
-msgstr "Lista de conexões"
-
-#: ../cli/src/connections.c:406 ../cli/src/connections.c:946
-#: ../cli/src/connections.c:1484 ../cli/src/connections.c:1499
-#: ../cli/src/connections.c:1508 ../cli/src/connections.c:1518
-#: ../cli/src/connections.c:1530 ../cli/src/connections.c:1639
-#: ../cli/src/connections.c:1741 ../cli/src/devices.c:1129
-#: ../cli/src/devices.c:1139 ../cli/src/devices.c:1257
-#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1629
-#: ../cli/src/devices.c:1636 ../cli/src/devices.c:1650
-#: ../cli/src/devices.c:1657 ../cli/src/devices.c:1674
-#: ../cli/src/devices.c:1685 ../cli/src/devices.c:1906
-#: ../cli/src/devices.c:1913
+#: ../cli/src/connections.c:667
+msgid "List of configured connections"
+msgstr "Lista de conexões configuradas"
+
+#: ../cli/src/connections.c:684 ../cli/src/connections.c:1225
+#: ../cli/src/connections.c:1785 ../cli/src/connections.c:1801
+#: ../cli/src/connections.c:1810 ../cli/src/connections.c:1820
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:7563
+#: ../cli/src/connections.c:7738 ../cli/src/devices.c:1633
+#: ../cli/src/devices.c:1641 ../cli/src/devices.c:2028
+#: ../cli/src/devices.c:2035 ../cli/src/devices.c:2049
+#: ../cli/src/devices.c:2056 ../cli/src/devices.c:2073
+#: ../cli/src/devices.c:2081 ../cli/src/devices.c:2277
+#: ../cli/src/devices.c:2373 ../cli/src/devices.c:2380
#, c-format
msgid "Error: %s argument is missing."
msgstr "Erro: está faltando o argumento %s."
-#: ../cli/src/connections.c:419
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "Erro: %s - não existe esta conexão."
-#: ../cli/src/connections.c:425 ../cli/src/connections.c:1543
-#: ../cli/src/connections.c:1656 ../cli/src/connections.c:1748
-#: ../cli/src/devices.c:913 ../cli/src/devices.c:993 ../cli/src/devices.c:1153
-#: ../cli/src/devices.c:1271 ../cli/src/devices.c:1698
-#: ../cli/src/devices.c:1919
+#: ../cli/src/connections.c:710
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Parâmetro desconhecido: %s\n"
+msgid "Error: 'show configured': %s"
+msgstr "Erro: 'show configured': %s"
-#: ../cli/src/connections.c:434
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Erro: nenhum parâmetro válido especificado."
-
-#: ../cli/src/connections.c:449 ../cli/src/connections.c:1844
-#: ../cli/src/devices.c:2130 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:715 ../cli/src/connections.c:1853
+#: ../cli/src/connections.c:7804 ../cli/src/connections.c:7845
+#: ../cli/src/connections.c:7997 ../cli/src/devices.c:2256
+#: ../cli/src/devices.c:2630 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
msgid "Error: %s."
msgstr "Erro: %s."
-#: ../cli/src/connections.c:462
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "ativando"
-#: ../cli/src/connections.c:464
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "ativado"
-#: ../cli/src/connections.c:478
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "desativado"
+
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "Conexão VPN (preparando)"
-#: ../cli/src/connections.c:480
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "Conexão VPN (precisa de autenticação)"
-#: ../cli/src/connections.c:482
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "Conexão VPN"
-#: ../cli/src/connections.c:484
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "Conexão VPN (obtendo configuração de IP)"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN conectada"
-#: ../cli/src/connections.c:488
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "Conexão VPN falhou"
-#: ../cli/src/connections.c:490
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN desconectada"
-#: ../cli/src/connections.c:546 ../cli/src/connections.c:556
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:750 ../cli/src/connections.c:974
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Erro: \"con status\": %s"
-
-#: ../cli/src/connections.c:752 ../cli/src/connections.c:976
+#: ../cli/src/connections.c:1012
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Erro: \"con status\": %s; campos permitidos: %s"
+msgid "Error: 'list active': %s"
+msgstr "Erro: 'list active': %s"
-#: ../cli/src/connections.c:760
+#: ../cli/src/connections.c:1020
msgid "Active connection details"
msgstr "Detalhe das conexões ativas"
-#: ../cli/src/connections.c:896 ../cli/src/connections.c:1558
-#: ../cli/src/connections.c:1671 ../cli/src/connections.c:1762
-#: ../cli/src/devices.c:940 ../cli/src/devices.c:1002
-#: ../cli/src/devices.c:1168 ../cli/src/devices.c:1301
-#: ../cli/src/devices.c:1720 ../cli/src/devices.c:1948
-#: ../cli/src/network-manager.c:311
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr ""
-"Erro: não foi possível descobrir se o NetworkManager está em execução: %s."
-
-#: ../cli/src/connections.c:900 ../cli/src/connections.c:1562
-#: ../cli/src/connections.c:1675 ../cli/src/connections.c:1766
-#: ../cli/src/devices.c:944 ../cli/src/devices.c:1006
-#: ../cli/src/devices.c:1172 ../cli/src/devices.c:1305
-#: ../cli/src/devices.c:1724 ../cli/src/devices.c:1952
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:1899 ../cli/src/connections.c:7592
+#: ../cli/src/connections.c:7707 ../cli/src/connections.c:7798
+#: ../cli/src/connections.c:7826 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1403
+#: ../cli/src/devices.c:1538 ../cli/src/devices.c:1675
+#: ../cli/src/devices.c:2115 ../cli/src/devices.c:2414
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Erro: O NetworkManager não está em execução."
-#: ../cli/src/connections.c:932
-msgid "Active connections"
-msgstr "Conexões ativas"
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "Lista de conexões ativas"
-#: ../cli/src/connections.c:957
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "Erro: \"%s\" - não é uma conexão ativa."
-#: ../cli/src/connections.c:962
+#: ../cli/src/connections.c:1251
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "Erro: Parâmetro desconhecido: %s"
+msgid "Error: 'show active': %s"
+msgstr "Erro: 'show active': %s"
-#: ../cli/src/connections.c:1069
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "nenhuma conexão ativa no dispositivo \"%s\""
-#: ../cli/src/connections.c:1077
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "nenhuma conexão ou dispositivo ativo"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "dispositivo \"%s\" não é compatível com a conexão \"%s\""
-#: ../cli/src/connections.c:1151
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "nenhum dispositivo encontrado para a conexão \"%s\""
-#: ../cli/src/connections.c:1163
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "razão desconhecida"
-#: ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "nenhum(a)"
-#: ../cli/src/connections.c:1167
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "o usuário foi desconectado"
-#: ../cli/src/connections.c:1169
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "a conexão base de rede foi interrompida"
-#: ../cli/src/connections.c:1171
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "o serviço VPN parou inesperadamente"
-#: ../cli/src/connections.c:1173
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "o serviço VPN retornou uma configuração inválida"
-#: ../cli/src/connections.c:1175
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "tentativa de conexão esgotada"
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "o serviço VPN não iniciou a tempo"
-#: ../cli/src/connections.c:1179
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "o serviço VPN falhou ao iniciar"
-#: ../cli/src/connections.c:1181
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "sem segredos VPN válidos"
-#: ../cli/src/connections.c:1183
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "segredos VPN inválidos"
-#: ../cli/src/connections.c:1185
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "a conexão foi removida"
-#: ../cli/src/connections.c:1202 ../cli/src/connections.c:1407
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "Conexão ativada com sucesso (caminho ativo D-Bus: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1207 ../cli/src/connections.c:1308
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "Erro: a ativação da conexão falhou."
-#: ../cli/src/connections.c:1232
+#: ../cli/src/connections.c:1507
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "Conexão VPN ativada com sucesso (caminho ativo D-Bus: %s)\n"
-#: ../cli/src/connections.c:1240
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Erro: a ativação da conexão falhou: %s."
-#: ../cli/src/connections.c:1337 ../cli/src/devices.c:1062
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Erro: tempo expirado - %d seg."
-#: ../cli/src/connections.c:1398
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Erro: O dispositivo \"%s\" está esperando por escravos antes de proceder com "
+"a ativação."
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Erro: a ativação da conexão falhou: %s"
-#: ../cli/src/connections.c:1492 ../cli/src/connections.c:1647
-#: ../cli/src/connections.c:1775
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "erro desconhecido"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Erro: conexão desconhecida: %s."
+msgid "unknown device '%s'."
+msgstr "dispositivo \"%s\" desconhecido."
+
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "nem uma conexão válida ou um dispositivo fornecido"
-#: ../cli/src/connections.c:1538 ../cli/src/devices.c:1147
-#: ../cli/src/devices.c:1693
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "Conexão (nome, UUID, ou caminho): "
+
+#: ../cli/src/connections.c:1829 ../cli/src/devices.c:1171
+#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
+#: ../cli/src/devices.c:2386
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Erro: valor do tempo de expiração \"%s\" não é válido."
+msgid "Unknown parameter: %s\n"
+msgstr "Parâmetro desconhecido: %s\n"
-#: ../cli/src/connections.c:1551 ../cli/src/connections.c:1664
-#: ../cli/src/connections.c:1755
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "preparando"
+
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Erro: id ou uuid tem que ser especificado."
+msgid "Error: No connection specified."
+msgstr "Erro: nenhuma conexão especificada."
-#: ../cli/src/connections.c:1584
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Erro: nenhum dispositivo adequado encontrado: %s."
+msgid "'%s' not among [%s]"
+msgstr "\"%s\" não está entre [%s]"
-#: ../cli/src/connections.c:1586
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Erro: nenhum dispositivo adequado encontrado."
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Erro: '%s': '%s' não é um endereço MAC %s válido."
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "Ethernet"
-#: ../cli/src/connections.c:1700
+#: ../cli/src/connections.c:2343
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Aviso: conexão inativa\n"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Erro: \"mtu\": \"%s\" não é um MTU válido."
-#: ../cli/src/connections.c:1714
+#: ../cli/src/connections.c:2359
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "Erro: a exclusão da conexão falhou: %s"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Erro: 'parent': \"%s\" não é um nome de interface válido"
-#: ../cli/src/connections.c:1835
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Erro: comando \"con\" \"%s\" não é válido."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Erro: a \"p-key\": \"%s\" não é uma P_KEY InfiniBand válida."
-#: ../cli/src/connections.c:1903
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Erro: não foi possível conectar ao D-Bus."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"Erro: \"mode\": \"%s\" não é um modo de transporte InfiniBand válido "
+"[datagrama, conectado]."
-#: ../cli/src/connections.c:1911
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Erro: Não foi possível obter as configurações do sistema."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Erro: \"flags\": \"%s\" não é válido; use <0-7>."
-#: ../cli/src/connections.c:1921
+#: ../cli/src/connections.c:2434
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Erro: \"%s\": \"%s\" não é válido; %s "
+
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Erro: '%s': '%s' não é válido; use <%u-%u>."
+
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ethernet"
+
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "Sem fio (Wi-Fi)"
+
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "Há 3 argumentos opcionais para o tipo de conexão \"%s\".\n"
+
+#: ../cli/src/connections.c:2559 ../cli/src/connections.c:2613
+#: ../cli/src/connections.c:2735 ../cli/src/connections.c:2781
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:2909
+#: ../cli/src/connections.c:3072 ../cli/src/connections.c:3168
+#: ../cli/src/connections.c:3250
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "Você deseja fornecê-las(os)? (sim/não) [sim]"
+
+#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
+#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+msgid "MTU [auto]: "
+msgstr "MTU [automático]: "
+
+#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
+#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+msgid "MAC [none]: "
+msgstr "MAC [nenhum]: "
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "MAC clonado [nenhum]: "
+
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "Há 5 argumentos opcionais para o tipo de conexão \"InfiniBand\".\n"
+
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "Modo de transporte (datagrama ou conectado) [datagrama]: "
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "Interface principal [nenhuma]: "
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [nenhum]: "
+
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "Erro: \"p-key\" é obrigatório quando 'parent' é especificado.\n"
+
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "Há 1 argumento opcional para o tipo de conexão \"WiMax\".\n"
+
+#: ../cli/src/connections.c:2703 ../cli/src/connections.c:2805
+#: ../cli/src/connections.c:3024 ../cli/src/connections.c:3226
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "Você deseja fornecer isto? (sim/não) [sim]"
+
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "Há 4 argumentos opcionais para o tipo de conexão \"PPPoE\".\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "Senha [nenhuma]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "Serviço [Nenhum]: "
+
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
msgstr ""
-"Erro: Não é possível obter conexões: o serviço de configurações não está em "
-"execução."
+"Há 2 argumentos opcionais para o tipo de conexão \"banda larga móvel\".\n"
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:190
-#: ../cli/src/devices.c:206
-msgid "DEVICE"
-msgstr "DISPOSITIVO"
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "Nome de usuário [nenhum]: "
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "CAPACIDADES"
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "Há 1 argumento opcional para o tipo de conexão \"bluetooth\".\n"
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "PROPRIEDADES (WI-FI)"
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Tipo de bluetooth (panu, dun-gsm ou dun-cdma) [panu]: "
-#. 2
-#: ../cli/src/devices.c:86
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Erro: o \"bt-type\": \"%s\" não é um tipo bluetooth válido.\n"
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "PROPRIEDADES (CABO)"
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "Há 4 argumentos opcionais para o tipo de conexão \"VLAN\".\n"
-#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "PROPRIEDADES (WIMAX)"
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "Sinalizadores VLAN (<0-7>) [nenhum]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:203
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "Mapas de prioridade de ingresso [nenhum]: "
-#. 6
-#: ../cli/src/devices.c:90
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Mapas de prioridade de egresso [nenhum]: "
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "Há argumentos opcionais para o tipo de conexão \"vinculada\".\n"
-#. 8
-#: ../cli/src/devices.c:92
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "Modo de vinculação [balanço-rr]: "
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "Vinculação da interface principal [nenhuma]: "
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "VÃNCULO"
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Erro: \"primary\": \"%s\" não é um nome de interface válido.\n"
-#. 11
-#: ../cli/src/devices.c:95
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "Modo de monitoração de vinculação (miimon ou arp) [miimon]: "
+
+#: ../cli/src/connections.c:2950
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr "Erro: \"%s\" não é um modo de monitoramento válido; use \"%s\" ou \"%s\".\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "Vinculação miimon [100]: "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Erro: \"miimon\": \"%s\" não é um número válido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "Vinculação downdelay [0]: "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Erro: 'downdelay': '%s' não é um número válido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "Vinculação updelay [0]: "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Erro: 'updelay': '%s' não é um número válido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "Vinculação intervalo arp [0]: "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Erro: 'arp-interval': '%s' não é um número válido <0-%u>.\n"
+
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "Vinculação arp-ip-destino [nenhum]: "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "Há 1 argumento opcional para o tipo de conexão \"%s\".\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "Configuration da Equipe JSON [nenhum]:"
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "equipe"
+
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "equipe-escrava"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "Há 6 argumentos opcionais para o tipo de conexão \"ponte\".\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "Habilitar STP (sim/não) [sim]: "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "Erro: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3093
+msgid "STP priority [128]: "
+msgstr "Prioridade STP [128]: "
+
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Erro: 'priority': '%s' não é um número válido <0-%d>.\n"
+
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "Atraso de encaminhamento [15]: "
+
+#: ../cli/src/connections.c:3109
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Errr: 'forward-delay': '%s' não é um número válido <2-30>.\n"
+
+#: ../cli/src/connections.c:3118
+msgid "Hello time [2]: "
+msgstr "Tempo de saudação [2]: "
+
+#: ../cli/src/connections.c:3122
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Erro: 'hello-time': '%s' não é um número válido <1-10>.\n"
+
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "Tempo de expiração máximo [20]: "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Erro: 'max-age': '%s' não é um número válido <6-40>.\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "Tempo de vencimento do endereço MAC [300]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Erro: 'ageing-time': '%s' não é um número válido <0-1000000>.\n"
+
+#: ../cli/src/connections.c:3167
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "Há 3 argumentos opcionais para o tipo de conexão \"ponte-escrava\".\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "Prioridade da porta da ponte [32]: "
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "Custo do caminho STP da porta da ponte [100]: "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (sim/não) [sim]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "Erro: 'hairpin': '%s'.\n"
+
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "Há 1 argumento opcional para o tipo de conexão \"VPN\".\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "Há 2 argumentos opcionais para o tipo de conexão \"OLPC Mesh\".\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "Canal da malha OLPC [1]: "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Erro: \"channel\": \"%s\" não é um número válido <1-13>.\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "Endereço MAC de difusão DHCP [nenhum]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "Endereço IPv4 (IP[/plen] [gateway]) [nenhum]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "Endereço IPv6 (IP[/plen] [gateway]) [nenhum]: "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " Endereço adicionado com sucesso: %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Aviso: endereço já existente: %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Aviso: ignorando lixo ao final: '%s'\n"
+
+#: ../cli/src/connections.c:3343 ../cli/src/connections.c:4192
+#: ../cli/src/connections.c:4247 ../cli/src/connections.c:4646
+#: ../cli/src/connections.c:4656
+msgid "Error: "
+msgstr "Erro: "
+
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "Você deseja adicionar endereços de IP? (sim/não) [sim] "
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "Pressione <Enter> para concluir a adição de endereços.\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Erro: \"parent\": não é válido sem \"p-key\"."
+
+#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+msgid "Error: 'ssid' is required."
+msgstr "Erro: é necessário o \"ssid\"."
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "Nome do NSP WiMAX: "
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "Erro: é necessário o \"nsp\"."
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "Nome de usuário do PPPoE: "
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "Erro: 'nome de usuário' é necessário"
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "Nome do ponto de acesso (APN):"
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "Erro: é necessário o \"apn\"."
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "Endereço de dispositivo Bluetooth: "
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "Erro: é necessário o \"addr\"."
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "Erro: \"bt-type\": \"%s\" não é válido; use [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "Dispositivo VLAN principal ou conexão UUID: "
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "Erro: é necessário o \"dev\"."
+
+#: ../cli/src/connections.c:3928
+msgid "VLAN ID <0-4095>: "
+msgstr "ID da VLAN <0-4095>: "
+
+#: ../cli/src/connections.c:3931
+msgid "Error: 'id' is required."
+msgstr "Erro: é necessário o \"id\"."
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Erro: 'id': '%s' não é válido; use <0-4095>."
+
+#: ../cli/src/connections.c:3947
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "Erro: \"dev\": \"%s\" não é um UUID, nome de interface, e nem um MAC."
+
+#: ../cli/src/connections.c:4082
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "Erro: 'mode': %s."
+
+#: ../cli/src/connections.c:4091
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Erro: \"primary\": \"%s\" não é um nome de interface válido."
+
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "Mestre vinculado:"
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "Erro: é necessário o \"master\"."
+
+#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
+#: ../cli/src/connections.c:4427
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Aviso: atualmente o 'type' está sendo ignorado. A partir de agora só há "
+"suporte a escravos de rede.\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "Mestre da união:"
+
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "Erro: 'stp': %s."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "Ponte mestre: "
+
+#: ../cli/src/connections.c:4421
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "Erro: \"master\": \"%s\" não é um UUID nem interface válidos."
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "Erro: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "Tipo de VPN: "
+
+#: ../cli/src/connections.c:4509
+msgid "Error: 'vpn-type' is required."
+msgstr "Erro: é necessário o \"vpn-type\"."
+
+#: ../cli/src/connections.c:4520
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "Erro: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4578
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Erro: \"channel\": \"%s\" não é válido; use <1-13>."
+
+#: ../cli/src/connections.c:4613
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Erro: \"%s\" não é um tipo de conexão válido."
+
+#: ../cli/src/connections.c:4711
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Erro: falha ao adicionar a conexão \"%s\": (%d) %s"
+
+#: ../cli/src/connections.c:4715
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "A conexão \"%s\" (%s) foi adicionada com sucesso.\n"
+
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "Tipo de conexão: "
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Erro: é necessário o argumento \"type\"."
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Erro: tipo de conexão inválido; %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Erro: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "Nome da interface [*]: "
+
+#: ../cli/src/connections.c:4801
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "Erro: é necessário o argumento \"ifname\"."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Erro: 'ifname': '%s' não é uma interface válida nem '*'."
+
+#: ../cli/src/connections.c:5627
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "[valores de configuração '%s']\n"
+
+#: ../cli/src/connections.c:5708
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Menu principal ]---\n"
+"goto [<setting> | <prop>] :: vai a uma configuração ou "
+"propriedade\n"
+"remove <setting>[.<prop>] | <prop> :: remove configuração ou reinicia "
+"valor de propriedade\n"
+"set [<setting>.<prop> <value>] :: define valor propriedade\n"
+"describe [<setting>.<prop>] :: descreve propriedade\n"
+"print [all] :: exibe a conexão\n"
+"verify [all] :: verifica a conexão\n"
+"save :: salva a conexão\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: ativa a conexão\n"
+"back :: vai um nível acima (retorna)\n"
+"help/? [<command>] :: exibe esta ajuda\n"
+"nmcli <conf-option> <value> :: configuração do nmcli\n"
+"quit :: sai do nmcli\n"
+
+#: ../cli/src/connections.c:5735
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: digite configuração/propriedade para "
+"edição\n"
+"\n"
+"Este comando entra em uma configuração ou propriedade para editá-lo.\n"
+"\n"
+"Exemplos: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5742
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: remove configuração ou reinicia o valor da "
+"propriedade\n"
+"\n"
+"Este comando remove uma configuração inteira da conexão, ou se uma "
+"propriedade é\n"
+"fornecida, reinicia tal propriedade para o valor padrão.\n"
+"\n"
+"Exemplos: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5749
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: define valor da propriedade\n"
+"\n"
+"Este comando configura o valor da propriedade.\n"
+"\n"
+"Exemplo: nmcli> set con.id Minha conexão\n"
+
+#: ../cli/src/connections.c:5754
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: descreve a propriedade\n"
+"\n"
+"Mostra a descrição da propriedade. Você pode consultar a página do manual nm-"
+"settings(5) para ver todas as configurações e propriedades do NM.\n"
+
+#: ../cli/src/connections.c:5759
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: exibe valores da conexão ou configuração\n"
+"\n"
+"Mostra a propriedade atual ou toda a conexão .\n"
+"\n"
+"Exemplo: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5764
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: verifica a validação de configurações ou da conexão\n"
+"\n"
+"Verifiica se a configuração ou conexão é, ou não, válida e pode ser salva "
+"posteriormente. Isto indica valores inválidos ou erros.\n"
+"\n"
+"Exemplos: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5771
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: salva a conexão\n"
+"\n"
+"Envia a conexão ao NetworkManager que, por sua vez, irá salvá-la.\n"
+
+#: ../cli/src/connections.c:5775
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: ativa a conexão\n"
+"\n"
+"Ativa a conexão.\n"
+"\n"
+"Opções disponíveis:\n"
+"<ifname> - dispositivo que ativará a conexão\n"
+"/<ap>|<nsp> - Ponto de acesso (Wi-Fi) ou provedor de serviço de rede (WiMAX) "
+"(preceda com / quando o <ifname> não for especificado)\n"
+
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#, c-format
+msgid "back :: go to upper menu level\n"
+"\n"
+msgstr "back :: vai ao nível de menu superior\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid "help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: ajuda para os comandos do nmcli \n"
+"\n"
+
+#: ../cli/src/connections.c:5788
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: configuração do nmcli\n"
+"\n"
+"Configura o nmcli. Estão disponíveis as seguintes opções:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Exemplos: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: sai do nmcli\n"
+"\n"
+"Este comando sai do nmcli. Quando a conexão sendo editada não foi salva, o "
+"usuário é solicitado a confirmar a ação.\n"
+
+#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
+#: ../cli/src/connections.c:6313 ../cli/src/connections.c:7162
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "Comando desconhecido: '%s'\n"
+
+#: ../cli/src/connections.c:5879
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Menu de propriedades ]---\n"
+"set [<value>] :: define novo valor\n"
+"add [<value>] :: adiciona nova opção à propriedade\n"
+"change :: modifica o valor atual\n"
+"remove [<index> | <option>] :: exclui o valor\n"
+"describe :: descreve propriedade\n"
+"print [setting | connection] :: exibe valor(es) da propriedade "
+"(configuração/conexão)\n"
+"back :: vai ao nível superior\n"
+"help/? [<command>] :: exibe esta ajuda ou descrição de comando\n"
+"quit :: sai do nmcli\n"
+
+#: ../cli/src/connections.c:5904
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: define novo valor\n"
+"\n"
+"Este comando configura o <value> fornecido à propriedade\n"
+
+#: ../cli/src/connections.c:5908
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: adiciona nova opção à propriedade\n"
+"\n"
+"Este comando adiciona o <value> fornecido à propriedade, caso propriedade "
+"seja um tipo de contêiner. Para propriedades com valores únicos, isto "
+"substitui o valor (semelhante ao 'set').\n"
+
+#: ../cli/src/connections.c:5914
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: modifica o valor atual\n"
+"\n"
+"Exibe o valor atual e permite sua edição.\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: exclui o valor\n"
+"\n"
+"Remove o valor da propriedade (define-o como padrão).\n"
+
+#: ../cli/src/connections.c:5922
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: descreve propriedade\n"
+"\n"
+"Mostra a descrição da propriedade. Você pode consultar a página do manual nm-"
+"settings(5) para ver todas as configurações e propriedades do NM.\n"
+
+#: ../cli/src/connections.c:5927
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: exibe valor(es) da "
+"propriedade(configuração, conexão)\n"
+"\n"
+"Mostra o valor da propriedade. Fornecendo um argumento, você também pode "
+"exibir valores para toda a conexão ou configuração.\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid "help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: ajuda para os comandos do nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Erro: a ativação da conexão falhou.\n"
-#. 2
-#: ../cli/src/devices.c:111
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "Erro: a configuração \"%s\" é obrigatória e não pode ser removida.\n"
+
+#: ../cli/src/connections.c:6111
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ Tipo da conexão: %s | nome: %s | UUID: %s | impurezas: %s ]\n"
+
+#: ../cli/src/connections.c:6171
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"O perfil de conexão foi removido do outro cliente. Você pode digitar 'save' "
+"no menu principal para recuperá-lo.\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Digite o valor de \"%s\":"
+
+#: ../cli/src/connections.c:6209 ../cli/src/connections.c:6228
+#: ../cli/src/connections.c:6621 ../cli/src/connections.c:6680
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Erro: falha ao definir propriedade \"%s\": %s\n"
+
+#: ../cli/src/connections.c:6221
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Edite o valor de \"%s\":"
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid "Error: %s\n"
+msgstr "Erro: %s\n"
+
+#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
+#: ../cli/src/connections.c:6800
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Erro: falha ao remover valor de '%s': %s\n"
+
+#: ../cli/src/connections.c:6277
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Argumento de comando desconhecido: \"%s\"\n"
+
+#: ../cli/src/connections.c:6297 ../cli/src/connections.c:7150
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "A conexão não foi salva. Você realmente deseja sair? [s/n]\n"
+
+#: ../cli/src/connections.c:6409
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Configurações disponíveis: %s\n"
+
+#: ../cli/src/connections.c:6418
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Erro: nome de configuração inválido; %s\n"
+
+#: ../cli/src/connections.c:6435
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Propriedades disponíveis: %s\n"
+
+#: ../cli/src/connections.c:6443
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Erro: propriedade %s\n"
+
+#: ../cli/src/connections.c:6484
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"Salvando a conexão com \"autoconnect=yes\". Isto pode resultar em uma "
+"ativação imediata da conexão.\n"
+"Você ainda deseja salvar? [sim] "
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Você pode editar as seguintes configurações: %s\n"
+
+#: ../cli/src/connections.c:6583
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"O perfil de conexão foi removido de outro cliente. Você pode digitar 'save' "
+"para recuperá-lo.\n"
+
+#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Valores permitidos para a propriedade \"%s\": %s\n"
+
+#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Erro: nenhuma configuração selecionada; as válidas são [%s]\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "primeiro use 'goto <setting>' ou 'set <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:6641 ../cli/src/connections.c:6779
+#: ../cli/src/connections.c:6859
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "Erro: argumento de configuração \"%s\" inválido; os válidos são [%s]\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Erro: falta configuração para a propriedade \"%s\"\n"
+
+#: ../cli/src/connections.c:6658
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Erro: propriedade inválida: %s\n"
+
+#: ../cli/src/connections.c:6707
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Erro: configuração desconhecida: \"%s\"\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Você pode editar as seguintes propriedades: %s\n"
+
+#: ../cli/src/connections.c:6764
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Erro: nenhum argumento fornecido; os válidos são [%s]\n"
+
+#: ../cli/src/connections.c:6777
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "A configuração \"%s\" não está presente na conexão.\n"
+
+#: ../cli/src/connections.c:6818
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Erro: propriedades %s, tampouco é um nome de configuração válido.\n"
+
+#: ../cli/src/connections.c:6843
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr "primeiro use 'goto <setting>' ou 'describe <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:6884
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr ""
+"Erro: propriedade inválida: %s, tampouco um nome de configuração válido.\n"
+
+#: ../cli/src/connections.c:6908
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "Erro: configuração \"%s\" ausente\n"
+
+#: ../cli/src/connections.c:6911
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Erro: configuração desconhecida: \"%s\"\n"
+
+#: ../cli/src/connections.c:6927
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Verificar configuração \"%s\": %s\n"
+
+#: ../cli/src/connections.c:6934
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Verificar conexão: %s\n"
+
+#: ../cli/src/connections.c:6973
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "Erro: falha ao salvar '%s' (%s) na conexão: (%d) %s\n"
+
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "A conexão \"%s\" (%s) foi salva com sucesso.\n"
+
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Erro: falha na verificação de conexão: %s\n"
+
+#: ../cli/src/connections.c:7015
+msgid "(unknown error)"
+msgstr "(erro desconhecido)"
+
+#: ../cli/src/connections.c:7036
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "Erro: a conexão não foi salva. Primeiro digite 'save'.\n"
+
+#: ../cli/src/connections.c:7040
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Erro: a conexão não é válida: %s\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Erro: Não foi possível ativar conexão: %s.\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "Erro: falha ao ativar '%s' (%s) na conexão: (%d) %s\n"
+
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Monitorando ativação da conexão (pressione qualquer tecla para continuar)\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Erro: estado da linha (\"status-line\"): %s\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Erro: salvar confirmação: %s\n"
+
+#: ../cli/src/connections.c:7121
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Erro: número ruim para cor: \"%s\"; use <0-8>\n"
+
+#: ../cli/src/connections.c:7133
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Configuração atual do nmcli:\n"
+
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "A opção de configuração \"%s\" é inválida; é permitido [%s]\n"
+
+#: ../cli/src/connections.c:7364
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> A edição por linha de comando não está disponível. Considere a "
+"instalação de uma biblioteca de edição de linha para habilitar o recurso. "
+"<<<\n"
+"As bibliotecas suportadas são:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7390
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "Erro: apenas um \"id\", uuid, ou \"path\" podem ser fornecidos."
+
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Erro: conexão desconhecida: \"%s\"."
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Aviso: editando a conexão existente \"%s\"; o argumento \"type\" é "
+"ignorado\n"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Aviso: editando a conexão existente \"%s\"; o argumento \"con-name\" é "
+"ignorado\n"
+
+#: ../cli/src/connections.c:7434
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Tipos de conexões válidos: %s\n"
+
+#: ../cli/src/connections.c:7436
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Erro: tipo de conexão inválido; %s\n"
+
+#: ../cli/src/connections.c:7472
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| editor de conexões interativas nmcli |==="
+
+#: ../cli/src/connections.c:7475
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Editando conexão existente \"%s\": \"%s\""
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Adicioando uma nova conexão \"%s\""
+
+#: ../cli/src/connections.c:7479
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Digite 'help' ou '?' para comandos disponíveis."
+
+#: ../cli/src/connections.c:7481
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Digite 'describe [<setting>.<prop>]' para exibir descrição detalhada da "
+"propriedade."
+
+#: ../cli/src/connections.c:7520
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Erro: falha ao modificar a conexão \"%s\": (%d) %s"
+
+#: ../cli/src/connections.c:7526
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "A conexão \"%s\" (%s) foi modificada com sucesso.\n"
+
+#: ../cli/src/connections.c:7553
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Erro: nenhum argumento foi fornecido."
+
+#: ../cli/src/connections.c:7577
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Erro: está faltando o ID da conexão."
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Erro: está faltando argumento <setting>.<property>."
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Erro: inválida <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7620
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Erro: configuração inválida ou não permitida \"%s\": %s."
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Erro: propriedade inválida '%s': %s."
+
+#: ../cli/src/connections.c:7647
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Erro: falha ao modificar %s.%s: %s."
+
+#: ../cli/src/connections.c:7677
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Erro: a exclusão da conexão falhou: %s"
+
+#: ../cli/src/connections.c:7747
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Erro: conexão desconhecida: %s\n"
+
+#: ../cli/src/connections.c:7781
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Erro: não é possível excluir conexão(ões) desconhecida(s): %s."
+
+#: ../cli/src/connections.c:7852
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "Não foi possível carregar arquivo '%s'\n"
+
+#: ../cli/src/connections.c:7917
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"Erro: era esperado o comando 'configured' ou 'active' para 'connection show'."
+""
+
+#: ../cli/src/connections.c:7984
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Erro: \"%s\" não é um comando de \"connection\" válido."
+
+#: ../cli/src/connections.c:8053 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Erro: Não foi possível obter as configurações do sistema."
+
+#: ../cli/src/connections.c:8063
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr ""
+"Erro: Não é possível obter conexões: o serviço de configurações não está em "
+"execução."
+
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "DISPOSITIVO"
+
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONEXÃO"
+
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "FABRICANTE"
-#. 3
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUTO"
-#. 4
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "CONTROLADOR"
-#. 5
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "VERSÃO-CONTROLADOR"
-#. 6
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "VERSÃO-FIRMWARE"
-#. 7
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "ENDEREÇO-HW"
-#. 9
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "RAZÃO"
-#. 10
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP (IFACE)"
-#. 12
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "GERENCIADO (NM)"
-#. 14
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FALTANDO FIRMWARE"
-#. 15
-#: ../cli/src/devices.c:124
-msgid "CONNECTION"
-msgstr "CONEXÃO"
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "CAMINHOS-CONEXÃO-DISPONÃVEL"
+
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "CONEXÕES-DISPONÃVEIS"
-#. 0
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "PORTADORA-DETECTADA"
-#. 1
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "VELOCIDADE"
-#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "PROVEDOR"
-#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR FREQ"
-#. 1
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODO"
-#. 3
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CANAL"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "TAXA"
-#. 5
-#. 1
-#: ../cli/src/devices.c:186 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SINAL"
-#. 6
-#: ../cli/src/devices.c:187
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARRAS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SEGURANÇA"
-#. 7
-#: ../cli/src/devices.c:188
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "FLAGS WPA"
-#. 8
-#: ../cli/src/devices.c:189
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "FLAGS RSN"
-#. 10
-#. 4
-#: ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ATIVO"
-#. 0
-#: ../cli/src/devices.c:219
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "ESCRAVOS"
-#. 0
-#: ../cli/src/devices.c:228
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:244
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPACIDADES"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "PROPRIEDADES (WI-FI)"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "PROPRIEDADES (CABO)"
+
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "PROPRIEDADES (WIMAX)"
+
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "VÃNCULO"
+
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "CONEXÕES"
+
+#: ../cli/src/devices.c:274
#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Utilização: nmcli device { COMANDO | help }\n"
+"Uso: dispositivo do nmcli { COMMAND | help }\n"
"\n"
-" COMANDO := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMANDO := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <tempo de espera>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wifi connect <(B)SSID> [password <senha>] [wep-key-type key|phrase] [iface "
-"<iface>] [bssid <BSSID>] [name <nome>]\n"
-" [--private] [--nowait] [--timeout <tempo de espera>]\n"
-" wimax [list [iface <iface>] [nsp <nome>]]\n"
+"\n"
+" exibir [<ifname>]\n"
+"\n"
+" conectar <ifname>\n"
+"\n"
+" desconectar <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+" conectar wifi <(B)SSID> [password <password>] [wep-key-type key|phrase] "
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device status'.\n"
+"\n"
+msgstr ""
+"Uso: estado do dispositivo do nmcli { help }\n"
+"\n"
+"exibir estado para todos os dispositivos.\n"
+"Por padrão, são exibidas as seguintes colunas:\n"
+" DEVICE - nome da interface\n"
+" TYPE - tipo de dispositivo\n"
+" STATE - estado do dispositivo\n"
+" CONNECTION - conexão ativada no dispositivo (caso haja algum)\n"
+"Colunas exibidas podem ser modificadas utilizando a opção mundial '--fields'."
+" 'status' é\n"
+"o comando padrão, o que significa que 'nmcli device' chama 'nmcli device "
+"status'.\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"Uso: exibe o dispositivo nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Exibe detalhes de dispositivo(s).\n"
+"Os detalhes da lista do comando para todos os dispositivos, ou para "
+"dispositivos dados.\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be activated."
+"\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"Uso: conectar dispositivo de nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Conecta o dispositivo.\n"
+"NetworkManager tentará encontrar uma conexão adequada que será ativada.\n"
+"Também irá considerar conexões que não sejam configuradas para auto-connect.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"Uso: desconectar o dispositivo nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Desconecta o dispositivo.\n"
+"O comando desconecta o dispositivo e previne-o de auto-ativar\n"
+"conexões futuras sem a intervenção do usuário/manual.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"Uso: wifi do dispositivo nmcli { ARGUMENTS | help }\n"
+"\n"
+"Realizar operação em dispositivo Wi-Fi.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"Lista pontos de acesso de Wi-Fi disponíveis. As opções 'ifname' e 'bssid' "
+"podem ser\n"
+"usadas para listar APs para uma interface específica, ou com um BSSID "
+"específico.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Conecta à uma rede Wi-Fi especificada por SSID ou BSSID. O comando cria\n"
+"uma nova conexão e então ativa-a em um dispositivo. Isto é um parceiro de "
+"linha de comando\n"
+"para clicar um SSID em um cliente GUI. O comando sempre cria\n"
+"uma nova conexão e então é utilizada principalmente para conectar à novas "
+"rede Wi-Fi\n"
+"Se uma conexão para a rede já existe, é melhor\n"
+"traga o perfil existente como se segue: nmcli con up id <name>. Note que\n"
+"somente as redes abertas WEP e WPA-PSK são suportadas no momento. Presume-se "
+"também que\n"
+"a configuração IP seja obtida via DHCP\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Requer que o NetworkManager copie novamente imediatamente para pontos de "
+"acesso disponíveis.\n"
+"NetworkManager scaneia as redes Wi-Fi periodicamente, mas em alguns casos "
+"pode ser\n"
+"útil iniciar o scan manualmente. Note que este comando não exibe o\n"
+"APs, use 'nmcli device wifi list' para isto.\n"
"\n"
-#: ../cli/src/devices.c:347
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"Uso: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Realizar operações nos dispositivos WiMAX.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"Lista WiMAX NSPs disponíveis. As opções 'ifname' e 'nsp' podem ser "
+"utilizadas para\n"
+"listar redes para uma interface específica, ou com um NSP específico.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(nenhum(a))"
-#: ../cli/src/devices.c:403
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:404
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:413
-msgid "Encrypted: "
-msgstr "Criptografada:"
-
-#: ../cli/src/devices.c:418
-msgid "WEP "
-msgstr "WEP "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:420
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:422
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:425
-msgid "Enterprise "
-msgstr "Empresarial"
-
-#: ../cli/src/devices.c:434
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:435
-msgid "Infrastructure"
-msgstr "Infraestrutura"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "Residencial"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "Parceiro"
-#: ../cli/src/devices.c:477
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "Roaming"
-#: ../cli/src/devices.c:549
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Erro: \"dev list\": %s"
-
-#: ../cli/src/devices.c:551
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Erro: \"dev list\": %s; campos permitidos: %s"
-
-#: ../cli/src/devices.c:560
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "Detalhes do dispositivo"
-#: ../cli/src/devices.c:607 ../cli/src/devices.c:610 ../cli/src/devices.c:1088
-#: ../cli/src/utils.c:479
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "Erro: \"device show\": %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1474
msgid "(unknown)"
msgstr "(desconhecido)"
-#: ../cli/src/devices.c:619
-msgid "not connected"
-msgstr "não conectado"
-
-#: ../cli/src/devices.c:646
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "ligado"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "desligado"
-#: ../cli/src/devices.c:930
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Erro: \"dev status\": %s"
-
-#: ../cli/src/devices.c:932
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Erro: \"dev status\": %s; campos permitidos: %s"
+msgid "Error: 'device status': %s"
+msgstr "Erro: \"device status\": %s"
-#: ../cli/src/devices.c:955
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "Status dos dispositivos"
-#: ../cli/src/devices.c:986
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Erro: argumento \"%s\" está faltando."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Erro: argumento extra \"%s\" inválido."
-#: ../cli/src/devices.c:1027 ../cli/src/devices.c:1192
-#: ../cli/src/devices.c:1333 ../cli/src/devices.c:1980
+#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1422
+#: ../cli/src/devices.c:1557 ../cli/src/devices.c:1696
+#: ../cli/src/devices.c:2436
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Erro: dispositivo \"%s\" não encontrado."
-#: ../cli/src/devices.c:1050
+#: ../cli/src/devices.c:1319
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "Sucesso: dispositivo \"%s\" ativado com sucesso."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "Erro: a ativação do dispositivo falhou: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "O dispositivo \"%s\" foi conectado.\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "Interface: "
+
+#: ../cli/src/devices.c:1381 ../cli/src/devices.c:1390
+#: ../cli/src/devices.c:1516 ../cli/src/devices.c:1525
+#, c-format
+msgid "Error: No interface specified."
+msgstr "Erro: nenhuma interface especificada."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Erro: não é permitido o argumento extra: \"%s\"."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Sucesso: dispositivo \"%s\" desconectado com sucesso."
-#: ../cli/src/devices.c:1085
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Erro: desconexão do dispositivo \"%s\" (%s) falhou: %s"
-#: ../cli/src/devices.c:1098
+#: ../cli/src/devices.c:1485
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "O dispositivo \"%s\" foi desconectado.\n"
-#: ../cli/src/devices.c:1161
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Erro: iface tem que ser especificada."
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Lista de varredura de redes sem fio (Wi-Fi)"
-#: ../cli/src/devices.c:1291
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Erro: \"dev wifi\": %s"
-
-#: ../cli/src/devices.c:1293
-#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Erro: \"dev wifi\": %s; campos permitidos: %s"
-
-#: ../cli/src/devices.c:1316
-msgid "WiFi scan list"
-msgstr "Lista de varredura de redes sem fio"
+msgid "Error: 'device wifi': %s"
+msgstr "Erro: \"device wifi\": %s"
-#: ../cli/src/devices.c:1353 ../cli/src/devices.c:1407
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Erro: Ponto de acesso com bssid \"%s\" não encontrado."
-#: ../cli/src/devices.c:1370
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Erro: dispositivo \"%s\" não é um dispositivo sem fio."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Erro: o dispositivo \"%s\" não é um dispositivo Wi-Fi."
-#: ../cli/src/devices.c:1438 ../cli/src/devices.c:1484
+#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "Conexão com UUID '%s' foi criada e ativada no dispositivo '%s'\n"
-#: ../cli/src/devices.c:1443
+#: ../cli/src/devices.c:1829
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Erro: Falha na ativação da conexão: (%d) %s."
-#: ../cli/src/devices.c:1468
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "Erro: Falha ao adicionar/ativar nova conexão: (%d) %s"
-#: ../cli/src/devices.c:1476
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"Erro: Ocorreu falha ao adicionar/ativar nova conexão: Erro desconhecido"
-#: ../cli/src/devices.c:1620
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID ou BSSID: "
+
+#: ../cli/src/devices.c:2018
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "Erro: SSID ou BSSID estão faltando."
-#: ../cli/src/devices.c:1643
+#: ../cli/src/devices.c:2042
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
-msgstr "Erro: o valor do argumento bssid '%s' não é um BSSID válido."
+msgstr "Erro: o valor do argumento bssid \"%s\" não é um BSSID válido."
-#: ../cli/src/devices.c:1667
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
msgstr ""
-"Erro: o valor do argumento wep-key-type '%s' é inválido, utilize 'key' ou "
-"'phrase'."
+"Erro: o valor do argumento wep-key-type \"%s\" é inválido, utilize \"key\" "
+"ou \"phrase\"."
+
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Erro: %s: %s."
-#: ../cli/src/devices.c:1707
+#: ../cli/src/devices.c:2101
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "Erro: BSSID para conectar-se a (%s) é diferente do argumento (%s)."
-#: ../cli/src/devices.c:1713
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
-msgstr "Erro: o parâmetro '%s' não é SSID nem BSSID."
+msgstr "Erro: o parâmetro \"%s\" não é SSID nem BSSID."
-#: ../cli/src/devices.c:1742
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "Erro: o dispositivo \"%s\" não é um dispositivo Wi-Fi."
-
-#: ../cli/src/devices.c:1744
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "Erro: nenhum dispositivo Wi-Fi encontrado."
-#: ../cli/src/devices.c:1762
+#: ../cli/src/devices.c:2151
#, c-format
msgid "Error: No network with SSID '%s' found."
-msgstr "Erro: nenhuma rede com SSID '%s' foi encontrada."
+msgstr "Erro: nenhuma rede com SSID \"%s\" foi encontrada."
-#: ../cli/src/devices.c:1764
+#: ../cli/src/devices.c:2153
#, c-format
msgid "Error: No access point with BSSID '%s' found."
-msgstr "Erro: nenhum ponto de acesso com BSSID '%s' encontrado."
+msgstr "Erro: nenhum ponto de acesso com BSSID \"%s\" encontrado."
-#: ../cli/src/devices.c:1862
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Erro: comando \"dev wifi %s\" é inválido."
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "Senha:"
-#: ../cli/src/devices.c:1938
+#: ../cli/src/devices.c:2321
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Erro: \"dev wimax\": %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Erro: o comando \"%s\" de \"device wifi\" não é válido."
-#: ../cli/src/devices.c:1940
-#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Erro: \"dev wimax\": %s; campos permitidos: %s"
-
-#: ../cli/src/devices.c:1963
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "lista WiMAX NSP"
-#: ../cli/src/devices.c:2000
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Erro: \"device wimax\": %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Erro: NSP chamado \"%s\" não encontrado."
-#: ../cli/src/devices.c:2011
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Erro: dispositivo \"%s\" não é um dispositivo WiMAX."
-#: ../cli/src/devices.c:2042
+#: ../cli/src/devices.c:2510
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Erro: Ponto de acesso com nsp \"%s\" não encontrado."
-#: ../cli/src/devices.c:2069
+#: ../cli/src/devices.c:2542
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Erro: comando \"dev wimax %s\" é inválido."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Erro: o comando \"%s\" de \"device wimax\" não é válido."
-#: ../cli/src/devices.c:2122
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Erro: comando \"dev %s\" é inválido."
@@ -1448,244 +3441,499 @@ msgstr "Erro: comando \"dev %s\" é inválido."
msgid "RUNNING"
msgstr "EXECUTANDO"
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "VERSÃO"
-#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "INICIALIZAÇÃO"
-#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "HARDWARE WIFI"
+msgid "CONNECTIVITY"
+msgstr "CONECTIVIDADE"
-#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "REDE"
-#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "HARDWARE WWAN"
+msgid "WIFI-HW"
+msgstr "HW-WIFI"
-#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
-#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "HARDWARE WIMAX"
+msgid "WWAN-HW"
+msgstr "HW-WWAN"
-#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "HW-WIMAX"
+
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "PERMISSÃO"
-#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "VALOR"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "NÃVEL"
+
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMÃNIOS"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"Utilização: nmcli nm { COMANDO | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMANDO := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"Uso: nmcli general { COMMAND | help }\n"
"\n"
-" COMANDO := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
-" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
+" permissões\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"Uso: status geral do nmcli { help }\n"
+"\n"
+"Exibe status geral de NetworkManager.\n"
+"'status' é a ação padrão, o que significa que 'nmcli gen' chama 'nmcli gen "
+"status'\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system hostname."
+"\n"
+"\n"
+msgstr ""
+"Uso: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Obtém ou muda hostname de sistema persistente.\n"
+"Sem um argumento, ele imprime o hostname configurado atualmente. Quando você "
+"passa\n"
+"um hostname,o NetworkManager o definirá como o novo hostname de sistema "
+"persistente.\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"Uso: permissões gerais do nmcli { help }\n"
+"\n"
+"Exibir permissões de quem chama para operações autenticadas.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"Uso: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"Uso: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid "Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr "Uso: nmcli networking on { help }\n"
+"\n"
+"Ativa a rede.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid "Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr "Uso: rede desativada do nmcli { help }\n"
+"\n"
+"Desativa rede.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the connectivity."
+"\n"
+"\n"
+msgstr ""
+"Uso: conexão de rede nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Obtém estado de conexão de rede.\n"
+"O argumento de 'verificação' opcional, faz com que o NetworkManager verifica "
+"novamente a conexão.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtém status de todos os interruptores de radio, ou os ativa ou desativa.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtém status do interruptor de radio Wi-Fi, ou os ativa ou desativa.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtém status de um radio switch de banda larga móvel, ou o ativa ou desativa."
+"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"Uso: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtém status do WiMAX radio switch, ou o ativa ou desativa.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "adormecido"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "conectando"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "conectado (somente local)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "conectado (somente site)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "desconectando"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Erro: \"nm status\": %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "portal"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "limitada"
+
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "completa"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Erro: \"nm status\": %s; campos permitidos: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Erro: somente estes campos são permitidos: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "habilitado"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "desabilitado"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "Status do NetworkManager"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "executando"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "não executando"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "iniciando"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "iniciado"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "Erro: \"permissões do nm\": %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "Erro: \"permissões do nm\": %s; campos permitidos: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Erro: \"permissões gerais\": %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "Permissões do NetworkManager"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Erro: não foi possível conectar bus do sistema: %s"
+msgid "Error: 'general logging': %s"
+msgstr "Erro: \"gravação registros gerais\": %s"
-#: ../cli/src/network-manager.c:361
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "Gravação de registros do NetworkManager"
+
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Erro: não foi possível criar um objeto proxy D-Bus."
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "Erro: falha ao definir hostname: (%d) %s"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Erro ao dormir: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "Erro: acesso negado ao definir gravação de registros; %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "Erro: valor \"--fields %s\" não é válido aqui; campos permitidos: %s"
+msgid "Error: %s"
+msgstr "Erro: %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "Comunicação em redes habilitada"
+#: ../cli/src/network-manager.c:692
+#, c-format
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Erro: o comando \"%s\" de \"general\" não é válido."
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"Erro: parâmetro \"enable\" inválido: \"%s\"; use \"true\" ou \"false\"."
+"Erro: o valor \"%s\" de \"--fields\" não é válido aqui (campos permitidos: "
+"%s)"
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Erro: Status de \"dormência\" não é exportado pelo NetworkManager."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Erro: argumento \"%s\" inválido: \"%s\" (use on/off)."
-#: ../cli/src/network-manager.c:458
-#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "Erro: parâmetro \"sleep\" inválido: \"%s\"; use \"true\" ou \"false\"."
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "Conectividade"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi habilitado"
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "Rede"
-#: ../cli/src/network-manager.c:495
+#: ../cli/src/network-manager.c:783
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Erro: parâmetro \"wifi\" inválido: \"%s\""
-
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN habilitado"
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Erro: o comando \"%s\" de \"conectividade de rede\" não é válido."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Erro: parâmetro \"wwan\" inválido: \"%s\""
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Erro: o comando \"%s\" de \"networking\" não é válido."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX habilitado"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Alternadores de rádio"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Erro: parâmetro \"wimax\" inválido: \"%s\"."
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Alternador de rádio Wi-Fi"
-#: ../cli/src/network-manager.c:588
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "Alternador de rádio WWAN"
+
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "Alternador de rádio WiMAX"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Erro: comando \"nm %s\" é inválido."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Erro: o comando \"%s\" de \"radio\" não é válido."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1699,267 +3947,794 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
-"Utilização: %s [OPÇÕES] OBJETO { COMANDO | help }\n"
+"Uso: %s [OPÇÕES] OBJETO { COMANDO | help }\n"
"\n"
"OPÇÕES\n"
" -t[erse] saída precisa\n"
" -p[retty] saída elegante\n"
" -m[ode] tabular|multiline modo de visão da saída\n"
-" -f[ields] <field1,field2,...>|all|common especifica os campos para "
-"saída\n"
+" -f[ields] <field1,field2,...>|all|common especifica os campos para saída\n"
" -e[scape] yes|no descarta separadores de colunas "
"em valores\n"
" -n[ocheck] não verifica as versões do "
"nmcli e do NetworkManager\n"
+" -a[sk] questiona sobre os parâmetros "
+"que faltam\n"
+" -w[ait] <seconds> define tempo de espera para "
+"operações sendo finalizadas\n"
" -v[ersion] mostra a versão do programa\n"
" -h[elp] exibe esta ajuda\n"
"\n"
"OBJETO\n"
-" nm Status do NetworkManager\n"
-" c[onnection] Conexões do NetworkManager\n"
+" g[eneral] estado geral do NetworkManager e de operações\n"
+" n[etworking] controle geral da rede\n"
+" r[adio] alternadores de rádio do NetworkManager\n"
+" c[onnection] conexões do NetworkManager\n"
" d[evice] dispositivos gerenciados pelo NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Erro: Objeto \"%s\" é desconhecido, tente \"nmcli help\"."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Erro: Opção \"--terse\" especificada pela segunda vez."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Erro: Opção \"--terse\" é mutualmente exclusiva com \"--pretty\"."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Erro: Opção \"--pretty\" especificada pela segunda vez."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Erro: Opção \"--pretty\" é mutualmente exclusiva com \"--terse\"."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Erro: faltando argumento para a opção \"%s\"."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Erro: argumento \"%s\" não é válido para a opção \"%s\"."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Erro: faltando campos para as opções \"%s\"."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Erro: \"%s\" não é um tempo de espera válido para a opção \"%s\"."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "ferramenta nmcli, versão %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Erro: Opção \"%s\" é desconhecida, tente \"nmcli -help\"."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid "\n"
+"Error: nmcli terminated by signal %d."
+msgstr "\n"
+"Erro: nmcli foi finalizado com sinal %d."
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Sinal capturado %d, desligando..."
+msgid "Failed to set signal mask: %d"
+msgstr "Falha ao definir máscara do sinal: %d"
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Ocorreu falha ao criar o segmento de manipulação de sinal: %d"
+
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Erro: não foi possível criar objeto NMClient."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "Sucesso"
-#: ../cli/src/settings.c:595
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (chave-ascii-hex)"
-#: ../cli/src/settings.c:597
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (palavra-chave de 104/128-bit)"
-#: ../cli/src/settings.c:600 ../cli/src/settings.c:728
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (desconhecido)"
-#: ../cli/src/settings.c:626
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (desconhecido)"
-#: ../cli/src/settings.c:632
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "qualquer, "
-#: ../cli/src/settings.c:634
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:636
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:638
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:640
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:642
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:646
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:648
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:676
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NENHUM(A))"
-#: ../cli/src/settings.c:682
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDENAR_CABEÇALHOS, "
-#: ../cli/src/settings.c:684
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:686
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "PERDA_VÃNCULO, "
-#: ../cli/src/settings.c:722
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (desabilitada)"
-#: ../cli/src/settings.c:724
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (ativada, prefere IP público)"
-#: ../cli/src/settings.c:726
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (ativada, prefere IP temporário)"
-#: ../cli/src/settings.c:738
+#: ../cli/src/settings.c:809
msgid "0 (none)"
msgstr "0 (nenhum(a))"
-#: ../cli/src/settings.c:744
+#: ../cli/src/settings.c:815
msgid "agent-owned, "
msgstr "pertence-ao-agente, "
-#: ../cli/src/settings.c:746
+#: ../cli/src/settings.c:817
msgid "not saved, "
msgstr "não foi salvo, "
-#: ../cli/src/settings.c:748
+#: ../cli/src/settings.c:819
msgid "not required, "
msgstr "não requisitado, "
-#: ../cli/src/settings.c:945 ../cli/src/settings.c:1163
-#: ../cli/src/settings.c:1904
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (desativado)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "habilitado,"
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "publicar,"
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "desejando,"
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (indefinido)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "auto"
-#: ../cli/src/utils.c:105
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "padrão"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Você também deseja definir \"%s\" para \"%s\"? [sim]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Você também deseja limpar \"%s\"? [sim]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "\"%s\" não é válido"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "\"%d\" não é válido; use <%d-%d>"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "\"%u\" não é válido; use <%d-%d>"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "\"%s\" não é válido; use <opção>=<valor>"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "\"%s\" não é um índice válido"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "nenhum item para remover"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "índice \"%d\" está fora da faixa <0-%d>"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "A opção \"%s\" é inválida"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "falta opção"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "\"%s\" não é um valor válido (ou está fora de faixa)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "\"%s\" não é um MAC de porta ethernet válido"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "\"%s\" não é um nome de interface válido"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "%s não é um número"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "\"%s\" não é um caracter hexadecimal válido"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "\"%s\" não é um MAC válido"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "\"%s\" não é um UUID válido"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"Inserir uma lista de permissões de usuário. Esta é uma lista de nomes de "
+"usuários formatados como:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"Os ítens pode ser separado por commas ou espaços.\n"
+"\n"
+"Exemplo: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "\"%s\" não é um mestre válido; use ifname ou UUID da conexão"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "não foi fornecida a senha da chave privada"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"Digite o caminho para uma chave privada e a senha da chave (se não tiver "
+"sido definido ainda):\n"
+" <caminho do arquivo> [<senha>]\n"
+"Exemplo: /home/fulanodetal/jara-priv-key SenhaSegredo\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"Digite os bytes como uma lista de valores hexadecimais.\n"
+"São aceitos dois formatos:\n"
+"(a) uma string de dígitos hexadecimais, onde cada dois dígitos representam "
+"um byte\n"
+"(b) lista separada por espaço de bytes escritos como dígitos hexadecimais "
+"(opcionalmente com prefixo 0x/0X e 0 à esquerda).\n"
+"\n"
+"Exemplos: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"Digite uma lista de opções de vinculação, formatados como:\n"
+" option = <valor>, option = <valor>,... \n"
+"Opções válidas são: %s\n"
+"\"mode\" pode ser fornecido como um nome ou um número:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Exemplo: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "\"%s\" não é um MAC InfiniBand válido"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "\"%s\" não é uma P_Key IBoIP válida"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"Digite uma lista de endereços IPv4 de servidores DNS.\n"
+"\n"
+"Exemplo: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "\"%s\" não é válido; (use ip[/prefixo] [gateway])"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"Digite uma lista de endereços IPv4 formatados como:\n"
+" ip[/prefixo] [gateway], ip[/prefixo] [gateway],...\n"
+"O prefixo que falta é considerado como prefixo de 32.\n"
+"\n"
+"Exemplo: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "\"%s\" não é válido; (use ip/[prefixo] next-hop [métrica])"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"Digite uma lista de rotas IPv4 formatados como:\n"
+" ip/[prefixo] next-hop [métrica],... \n"
+"O prefixo que falta é considerado como um prefixo de 32.\n"
+"A métrica que falta é considerada como uma métrica de 0.\n"
+"\n"
+"Exemplo: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"Digite uma lista de endereços IPv6 de servidores DNS. Se o método de "
+"configuração IPv6 for 'auto' estes servidores DNS são acrescentados a "
+"aqueles (caso existam) retornados pela configuração automática. Servidores "
+"de DNS não podem ser usados com os métodos de configuração IPv6 'shared' ou "
+"'link-local', caso não exista nenhuma rede acima (upstream). Em todos os "
+"outros métodos de configuração IPv6, estes servidores DNS são usados como os "
+"únicos servidores DNS para esta conexão.\n"
+"\n"
+"Exemplo: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+msgstr ""
+"Digite uma lista de endereços IPv6 formatados como:\n"
+" ip[/prefixo] [gateway], ip[/prefixo] [gateway],...\n"
+"O prefixo que falta é considerado como prefixo de 128.\n"
+"\n"
+"Exemplo: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr "'%s' não é válido (use <dest IP>/prefix <next-hop IP> [metric])"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"Digite uma lista de rotas IPv6, formatadas como:\n"
+" ip/[prefixo] next-hop [métrica],... \n"
+"O prefixo que falta é considerado como prefixo de 128.\n"
+"A métrica que falta é considerada como uma métrica de 0.\n"
+"\n"
+"Exemplo: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "\"%s\" não é válido; use 0, 1, ou 2"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "\"%s\" não é um canal válido; use <1-13>"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "\"%s\" não é válido; use [e, o, n]"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli pode aceitar ambos dados de configuração diretos do JSON e um nome de "
+"arquivo contendo a configuração. Neste caso, o arquivo é lido e o conteúdo é "
+"colocado nesta propriedade.\n"
+"\n"
+"Exemplos: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "sem prioridade para remover"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "índice \"%d\" está fora da faixa de <0-%d>"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "\"%s\" não é válido; devem ser fornecidas 3 strings"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"Digite uma lista de três canais (separados por vírgulas ou espaços).\n"
+"\n"
+"Exemplo: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"Digite uma lista de opções S/390, formatadas como:\n"
+" option = <value>, option = <value>,... \n"
+"Opções válidas são: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "\"%s\" não é um canal válido"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "\"%ld\" não é um canal válido"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "Supõe-se que a chave WEP seja \"%s\"\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr ""
+"\"%s\" não está nas proximidades [0 (desconhecido), 1 (chave), 2 (palavra-"
+"chave)]"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"Digite o tipo das chaves WEP. Os valores aceitáveis são: 0 ou unknown, 1 ou "
+"key, e 2 ou passphrase.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "\"%s\" não é um PSK válido"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' não é uma sinalização DCB válida"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' não é uma prioridade de app de DCB"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "deve conter 8 números separados por vírgulas"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' não é um número entre 0 e %u (inclusive) ou %u"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' não um número entre 0 e %u (inclusive)"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid "Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"Aviso: mudanças não tomarão efeito até '%s' incluindo 1 (habilitado)\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "porcentagem da largura de banda deve totalizar 100%%"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "não há conhecimento de como obter o valor da propriedade"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "a propriedade não pode ser alterada"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[descrição propriedade NM]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[descrição específica nmcli]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Erro: é necessário valor para o argumento \"%s\"."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Erro: era esperado o argumento \"%s\", porém foi fornecido \"%s\"."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Erro: o argumento \"%s\" é inesperado"
+
+#: ../cli/src/utils.c:189
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "Erro ao converter endereço IP4 \"0x%X\" para o formato texto"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:217
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "Erro ao converter endereço IP6 \"%s\" para o formato texto"
-#: ../cli/src/utils.c:234
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "\"%s\" não é válido; use [%s] ou [%s]"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "\"%s\" é ambíguo (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "nome em falta, tente um de [%s]"
+
+#: ../cli/src/utils.c:718
#, c-format
msgid "field '%s' has to be alone"
msgstr "campo \"%s\" tem que ser um só"
-#: ../cli/src/utils.c:237
+#: ../cli/src/utils.c:720
#, c-format
-msgid "invalid field '%s'"
-msgstr "campo \"%s\" é inválido"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "campo inválido '%s'; campos permitidos: %s"
-#: ../cli/src/utils.c:256
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "Opção \"--terse\" requer especificação de \"--fields\""
-#: ../cli/src/utils.c:260
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "Opção \"--terse\" requer valores da opção \"--fields\", não \"%s\""
-#: ../cli/src/utils.c:470
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"Erro: Não foi possível criar objeto proxy D-Bus para org.freedesktop.DBus"
-
-#: ../cli/src/utils.c:478
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Erro: Requisição NameHasOwner falhou: %s"
-
-#: ../cli/src/utils.c:523
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1968,7 +4743,7 @@ msgstr ""
"Aviso: As versões do nmcli (%s) e do NetworkManager (%s) não correspondem. "
"Use --nocheck para omitir este aviso.\n"
-#: ../cli/src/utils.c:532
+#: ../cli/src/utils.c:1079
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1987,117 +4762,87 @@ msgstr "A chave do arquivo PEM não tinha a marca de finalização \"%s\"."
msgid "Doesn't look like a PEM private key file."
msgstr "Não se parece com um arquivo de chave privada PEM."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Memória insuficiente para armazenar os dados do arquivo PEM."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Arquivo PEM defeituoso: Proc-Type não era a primeira marca."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Arquivo PEM defeituoso: marca Proc-Type desconhecida: \"%s\"."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Arquivo PEM defeituoso: DEK-Info não era a segunda marca."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Arquivo PEM defeituoso: nenhum IV localizado na marca DEK-Info."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "Arquivo PEM defeituoso: formato inválido do IV na marca DEK-Info."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Arquivo PEM defeituoso: cifra de chave privada desconhecida \"%s\"."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "Não foi possível decodificar chave privada."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Falha ao procurar a marca de início PKCS#8 esperada."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Falha ao procurar a marca de finalização PKCS#8 \"%s\" esperada."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "Memória insuficiente para armazenar dados da chave privada."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "Falha ao descriptografar a chave privada PKCS#8."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Memória insuficiente para armazenar os dados do certificado."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "O tamanho do IV deve ser um número par de bytes."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Memória insuficiente para armazenar o IV."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV contém dígitos não-hexadecimais."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "A cifra da chave privada \"%s\" era desconhecida."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Memória insuficiente para descriptografar a chave privada."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr ""
-"Memória insuficiente para armazenar a chave privada de descriptografia."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "Não foi possível determinar o tipo da chave privada."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "Certificado PEM não tinha a marca de inicialização \"%s\"."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "Certificado PEM não tinha a marca de finalização \"%s\"."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "Falha ao decodificar o certificado."
@@ -2116,99 +4861,89 @@ msgstr "Falha ao inicializar o motor MD5: %s / %s."
msgid "Invalid IV length (must be at least %zd)."
msgstr "Tamanho do IV inválido (tem que ser pelo menos %zd)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Memória insuficiente para o buffer da chave descriptografada."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Falha ao inicializar o contexto da cifra de descriptografia: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "Falha ao definir chave simétrica para descriptografia: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Falha ao definir IV para descriptografia: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Falha ao descriptografar a chave privada: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"Falha ao descriptografar a chave privada: comprimento de preenchimento não "
"esperado."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Falha ao descriptografar a chave privada."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Não foi possível alocar memória para criptografia."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Falha ao inicializar o contexto da cifra de criptografia: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Falha ao definir chave simétrica para criptografia: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Falha ao definir IV para criptografia: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Falha ao criptografar a chave privada: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Erro ao inicializar os dados do certificado: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Não foi possível decodificar o certificado: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Não foi possível inicializar o decodificador PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Não foi possível decodificar o arquivo PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Não foi possível verificar o arquivo PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "Não foi possível inicializar o decodificador PKCS#8: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Não foi possível decodificar o arquivo PKCS#8: %s"
@@ -2228,127 +4963,482 @@ msgstr "Falha ao inicializar o contexto MD5: %d."
msgid "Invalid IV length (must be at least %d)."
msgstr "Tamanho inválido do IV (tem que ser pelo menos %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Falha ao inicializar o espaço de cifra de descriptografia."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Falha ao definir chave simétrica para descriptografia."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Falha ao definir IV para descriptografia."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Falha ao inicializar o contexto de descriptografia."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Falha ao descriptografar a chave privada: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"Falha ao descriptografar a chave privada: dados descriptografados muito "
"compridos."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Falha ao finalizar a descriptografia da chave privada: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Falha ao inicializar o espaço de cifra de criptografia."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Falha ao definir chave simétrica para criptografia."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Falha ao definir IV para criptografia."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Falha ao inicializar o contexto de criptografia."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Falha ao criptografar a chave privada: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Quantidade de dados inesperados depois da criptografia."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Não foi possível decodificar o certificado: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Não foi possível converter senha para o formato UCS2: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Não foi possível inicializar o decodificador PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Não foi possível decodificar o arquivo PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Não foi possível verificar o arquivo PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "Não foi possível gerar dados aleatórios."
-#: ../libnm-util/nm-utils.c:2151
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "propriedade está faltando"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "propriedade está vazia"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "tem que corresponder à propriedade \"%s\" para PKCS#12"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "propriedade é inválida"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "valor \"%s\" não é válido para a propriedade"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "requer definição de \"%s\" ou \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "opção \"%s\" ou seu valor \"%s\" inválido"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "apenas um entre \"%s\" e \"%s\" pode estar definido"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "A opção obrigatória \"%s\" está faltando"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "\"%s\" não é um valor válido para \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "\"%s=%s\" não é compatível com \"%s > 0\""
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "\"%s\" não é um nome de interface válido para a opção \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "A opção \"%s\" é válida apenas para \"%s=%s\""
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "\"%s=%s\" não é uma configuração válida para \"%s\""
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "A opção \"%s\" requer que a opção \"%s\" seja definida"
+
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Memória insuficiente para criar a chave de criptografia."
+msgid "'%s' option is empty"
+msgstr "opção \"%s\" está vazia"
-#: ../libnm-util/nm-utils.c:2261
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Não foi possível alocar memória para criação do arquivo PEM."
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "\"%s\" não é um endereço IPv4 válido para a opção \"%s\""
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "\"%d\" não é um valor válido para a propriedade (deveria ser <= %d)"
-#: ../libnm-util/nm-utils.c:2273
+#: ../libnm-util/nm-setting-bridge.c:251
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Não foi possível alocar memória para gravar IV no arquivo PEM."
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "valor \"%d\" está fora da faixa <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "propriedade está vazia"
-#: ../libnm-util/nm-utils.c:2285
+#: ../libnm-util/nm-setting-connection.c:734
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "\"%s\" não correspondem ao nome da interface virtual \"%s\""
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "requer a presença da definição de \"%s\" na conexão"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "A configuração de IPv4 não é permitida para escravo"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "A configuração IPv6 não é permitida para escravo"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "sinalizadores inválidos"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "sinalizadores inválidos - desabilitados"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "propriedade inválida (não habilitado)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "elemento inválido"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "a soma não é 100%"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "propriedade inválida"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "propriedade em falta"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "valor da propriedade \"%s\" está vazio ou é muito longo (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "\"%s\" contém cactere(s) inválido(s) (use [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "tamanho \"%s\" é inválido (deveria ser 5 ou 6 dígitos)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "não é um nome de interface válido"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Uma P_Key deve ser especificada se especificar um principal"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr ""
-"Não foi possível alocar memória para gravar a chave criptografada no arquivo "
-"PEM."
+"A P_Key da conexão InfiniBand não especifica um nome de interface principal"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "esta propriedade não é permitida para \"%s=%s\""
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. endereço IPv4 é inválido"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. endereço IPv4 possui prefixo inválido"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d: rota é inválida"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d: rota possui prefixo inválido"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "\"%s\" não é permitido para %s=%s"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "tamanho do SSID está fora da faixa <1-32> bytes"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "\"%d\" não é um canal válido"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "\"%d\" está fora da faixa válida <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "definição desta propriedade requer propriedade \"%s\" não-zero"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "valor \"%s\" não corresponde \"%s=%s\""
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "\"%s\" não é um UUID nem um nome de interface"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "propriedade não está especificada nem é \"%s=%s\""
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "sinalizadores são inválidos"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "\"%s\" não é um valor válido de porta ethernet"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "\"%s\" não é um valor duplex válido"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "não é um endereço MAC válido"
-#: ../libnm-util/nm-utils.c:2304
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Não foi possível alocar memória para os dados do arquivo PEM."
+msgid "'%s' is not a valid MAC address"
+msgstr "\"%s\" não é um endereço MAC válido"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "\"%s\" ou seu valor \"%s\" é inválido"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "segurança \"%s\" requer \"%s=%s\""
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "segurança \"%s\" requer a presença de definição de \"%s\""
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "valor \"%d\" está fora da faixa <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "conexões \"%s\" requerem \"%s\" nesta propriedade"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "\"%s\" pode ser usada apenas com \"%s=%s\" (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "\"%s\" não é um modo Wi-Fi válido"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "\"%s\" não é uma banda válida"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "requer definição da propriedade \"%s\""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2366,7 +5456,7 @@ msgid ""
"power management)"
msgstr ""
"Põe o NetworkManager para dormir ou acordar (deve ser usado somente pelo "
-"sistema de gerenciamento de energia"
+"sistema de gerenciamento de energia)"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
@@ -2418,7 +5508,8 @@ msgid "Connection sharing via a protected WiFi network"
msgstr "Compartilhamento de conexão via rede sem fio protegida"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
-msgid "System policy prevents sharing connections via a protected WiFi network"
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
msgstr ""
"Políticas de sistema previnem compartilhamento de conexões através de uma "
"rede sem fio protegida"
@@ -2440,7 +5531,8 @@ msgstr "Modificar conexões pessoais de rede"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
msgid "System policy prevents modification of personal network settings"
msgstr ""
-"Políticas de sistema previnem modificação das configurações pessoais de redes"
+"Políticas de sistema previnem modificação das configurações pessoais de "
+"redes"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
msgid "Modify network connections for all users"
@@ -2461,128 +5553,79 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"Políticas de sistema previnem modificação da máquina persistente do sistema"
-#: ../src/main.c:135
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "Falha ao definir máscara do sinal: %d"
-
-#: ../src/main.c:144
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "Ocorreu falha ao criar o segmento de manipulação de sinal: %d"
-
-#: ../src/main.c:159
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Falha ao abrir %s: %s\n"
-#: ../src/main.c:165
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Falha ao escrever para %s: %s\n"
-#: ../src/main.c:170
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Falha ao fechar %s: %s\n"
-#: ../src/main.c:213
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "O NetworkManager já está em execução (pid %ld)\n"
-#: ../src/main.c:340
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "Imprime a versão do NetworkManager e sai"
-#: ../src/main.c:341
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "Não se tornar um daemon"
-#: ../src/main.c:342
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Não se tornar um daemon e registrar à saída padrão de erro (stderr)"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Nível de registro: um dos [%s]"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "Domínios de registro separados por \",\": qualquer combinação de [%s]"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "Tornar todos os avisos fatais"
-#: ../src/main.c:343
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "Especificar a localização de um arquivo PID"
-#: ../src/main.c:343
+#: ../src/main.c:337
msgid "filename"
msgstr "nomedoarquivo"
-#: ../src/main.c:344
+#: ../src/main.c:338
msgid "State file location"
msgstr "Localização do arquivo de estado"
-#: ../src/main.c:344
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/caminho/para/arquivo.de.estado"
-#: ../src/main.c:345
-msgid "Config file location"
-msgstr "Localização do arquivo de configuração"
-
-#: ../src/main.c:345
-msgid "/path/to/config.file"
-msgstr "/caminho/para/arquivo.de.configuração"
-
-#: ../src/main.c:346
-msgid "List of plugins separated by ','"
-msgstr "Lista de plug-ins separada por \",\""
-
-#: ../src/main.c:346
-msgid "plugin1,plugin2"
-msgstr "plug-in1,plug-in2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:348
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Nível de registro: um dos [ERR, WARN, INFO, DEBUG]"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:351
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"Domínios de registro separados por ',': qualquer combinação de\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:357
-msgid "An http(s) address for checking internet connectivity"
-msgstr "Um endereço http(s) para verificar a conectividade com a internet"
-
-#: ../src/main.c:358
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "O intervalo de tempo entre verificações de conectividade (em segundos)"
-
-#: ../src/main.c:359
-msgid "The expected start of the response"
-msgstr "O início esperado da resposta"
-
-#: ../src/main.c:359
-msgid "Bingo!"
-msgstr "Bingo!"
-
#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "Não há suporte para GModules em sua plataforma!\n"
-#: ../src/main.c:383
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "Você precisa ser superusuário para executar o NetworkManager!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2594,450 +5637,1071 @@ msgstr ""
"especifique pontos de acesso sem fio os quais cartões sem fio no\n"
"computador podem ser associados."
-#: ../src/main.c:389
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"Opção inválida. Por favor, use --help para ver uma lista de opções válidas.\n"
+"Opção inválida. Por favor, use --help para ver uma lista de opções válidas."
+"\n"
-#: ../src/main.c:399
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "Você precisa ser superusuário para executar o NetworkManager!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Por favor, use --help para ver uma lista de opções válidas.\n"
+
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"Ignorando domínio(s) de log irreconhecíveis '%s' passaram na linha de "
+"comando.\n"
-#: ../src/main.c:432
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Falha ao ler configuração: (%d) %s\n"
-#: ../src/main.c:443
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. Por favor, use --help para ver uma lista de opções válidas.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "Erro no arquivo de configuração: %s.\n"
-#: ../src/main.c:450
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"Ignorando domínio(s) de log irreconhecíveis '%s' dos arquivos de config.\n"
+
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Falha ao analisar o arquivo de estado %s: (%d) %s\n"
-#: ../src/main.c:467
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Não pode ser daemonizado: %s [erro %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "Rede %s"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# Criado pelo NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
-msgid ""
-"# Merged from %s\n"
+msgid "# Merged from %s\n"
"\n"
-msgstr ""
-"# Mesclado de %s\n"
+msgstr "# Mesclado de %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "nenhum cliente DHCP utilizável pôde ser encontrado."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "\"dhclient\" não pôde ser encontrado."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "\"dhcpd\" não pôde ser encontrado."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "cliente DHCP \"%s\" não suportado"
-#: ../src/dns-manager/nm-dns-manager.c:368
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"NOTA: o resolvedor da libc não tem suporte a mais do que 3 servidores de "
"nomes."
-#: ../src/dns-manager/nm-dns-manager.c:370
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "Os servidores de nomes listados abaixo podem não ser reconhecidos."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "Nível de registro \"%s\" desconhecido"
-#: ../src/logging/nm-logging.c:188
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Domínio de registro \"%s\" desconhecido"
-#: ../src/modem-manager/nm-modem-cdma.c:271
-#: ../src/modem-manager/nm-modem-broadband.c:553 ../src/nm-device-bt.c:338
-#, c-format
-msgid "CDMA connection %d"
-msgstr "Conexão CDMA %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Localização do arquivo de configuração"
-#: ../src/modem-manager/nm-modem-gsm.c:549
-#: ../src/modem-manager/nm-modem-broadband.c:531 ../src/nm-device-bt.c:334
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/caminho/para/arquivo.de.configuração"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "Localização do diretório de configuração"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/caminho/para/diretório/configuração"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "Lista de plug-ins separada por \",\""
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "plug-in1,plug-in2"
+
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "Um endereço http(s) para verificar a conectividade com a internet"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr ""
+"O intervalo de tempo entre verificações de conectividade (em segundos)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "O início esperado da resposta"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
msgid "GSM connection %d"
msgstr "Conexão GSM %d"
-#: ../src/nm-device-bond.c:202
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "Conexão CDMA %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "Conexão vinculada %d"
-#: ../src/nm-device-adsl.c:194
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "Conexão ADSL %d"
-#: ../src/nm-device-bridge.c:201
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
#, c-format
msgid "Bridge connection %d"
msgstr "Conexão de Ponte %d"
-#: ../src/nm-device-bt.c:309
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "Conexão PAN %d"
-#: ../src/nm-device-bt.c:342
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "Conexão DUN %d"
-#: ../src/nm-device-ethernet.c:1319
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "Conexão PPPoE %d"
-#: ../src/nm-device-ethernet.c:1319 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Conexão cabeada %d"
-#: ../src/nm-device-infiniband.c:299
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "Conexão InfiniBand %d"
-#: ../src/nm-device-olpc-mesh.c:293
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "Malha %d"
-#: ../src/nm-device-vlan.c:331
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "Conexão de união %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "Conexão VLAN %d"
-#: ../src/nm-manager.c:750
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "Conexão VPN %d"
-#: ../src/nm-netlink-monitor.c:152 ../src/nm-netlink-monitor.c:276
-#: ../src/nm-netlink-monitor.c:717
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "ocorreu um erro ao esperar pelos dados da conexão"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "erro ao processar mensagem do netlink: %s"
-#: ../src/nm-netlink-monitor.c:255
-msgid "error occurred while waiting for data on socket"
-msgstr "ocorreu um erro ao esperar pelos dados da conexão"
-
-#: ../src/nm-netlink-monitor.c:300
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"não foi possível conectar ao netlink para monitoração de status do link: %s"
-#: ../src/nm-netlink-monitor.c:311
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr ""
"não foi possível habilitar o manipulador de credencial de passagem do "
"netlink: %s"
-#: ../src/nm-netlink-monitor.c:334 ../src/nm-netlink-monitor.c:394
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
"não foi possível alocar o manipulador do netlink para monitoração de status "
"do link: %s"
-#: ../src/nm-netlink-monitor.c:419
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"não foi possível alocar o cache de link do netlink para monitoração de "
-"status do link: %s"
-
-#: ../src/nm-netlink-monitor.c:546
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "não foi possível associar-se ao grupo do netlink: %s"
-#: ../src/nm-netlink-monitor.c:693 ../src/nm-netlink-monitor.c:706
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "erro ao atualizar o cache de link: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "O NetworkManager precisa desligar as redes"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "Sistema"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3702
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "Vínculo"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3887
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "União"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
msgid "Bridge"
msgstr "Ponte"
-#: ../test/nm-online.c:111
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\rConectando"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "Tempo a esperar por uma conexão, em segundos (o padrão é 30)"
-
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"Sair imediatamente caso o NetworkManager não esteja em execução ou conectado"
+"Tempo a esperar por uma conexão, em segundos (sem a opção, o valor padrão é "
+"30)"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "Sair imediatamente caso o NetworkManager não esteja em execução"
+
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "Não imprimir nada"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "Espera por uma conexão com sucesso no NetworkManager."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"Aguarda o NetworkManager finalizar a ativação das conexões de rede de "
+"inicialização."
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
"Opção inválida. Por favor, use --help para ver uma lista de opções válidas."
-#~ msgid "state: %s\n"
-#~ msgstr "estado: %s\n"
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "OK"
-#~ msgid "Connection activated\n"
-#~ msgstr "Conexão ativada\n"
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "Não foi possível criar um arquivo temporário: %s"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "estado: %s (%d)\n"
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "Editor falhou: %s"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "Estado da conexão ativa: %s\n"
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Não foi possível re-ler arquivo: %s"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "Caminho da conexão ativa: %s\n"
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Conexão de ethernet %d"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "Estado do dispositivo: %d (%s)\n"
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Conexão de Wi-Fi %d"
-#~ msgid "Failed to initialize SIGTERM pipe: %d"
-#~ msgstr "Falha ao inicializar \"pipe\" SIGTERM: %d."
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "Banda Larga Móvel"
-#~ msgid "Type"
-#~ msgstr "Tipo"
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Conexão de Banda larga móvel %d"
-#~ msgid "Name"
-#~ msgstr "Nome"
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
-#~ msgid "System connections:\n"
-#~ msgstr "Conexões de sistema:\n"
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "Conexão DSL %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "Cabeada"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "OLPC Mesh"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "PCI"
+
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "USB"
+
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "Selecionar..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Adicionar"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "Editar..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "Remover"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "Não foi possível criar editor para a conexão '%s' do tipo '%s'."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Não foi possível criar editor para a conexão inválida '%s'"
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "Editar conexão"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Erro ao salvar conexão: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Incapaz de salvar conexão: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Incapaz de adicionar nova conexão: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "Cancelar"
-#~ msgid "User connections:\n"
-#~ msgstr "Conexões de usuário:\n"
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(default)"
-#~ msgid "System-wide connections"
-#~ msgstr "Conexões de sistema"
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "bytes"
-#~ msgid "User connections"
-#~ msgstr "Conexões de usuário"
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
-#~ msgid "Default"
-#~ msgstr "Padrão"
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Backup Ativo"
-#~ msgid "Service"
-#~ msgstr "Serviço"
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "Erro: falha na obtenção da conexão ativa para \"%s\"."
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Broadcast"
-#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-#~ msgstr "%s, %s, Freq %d MHz, Taxa %d Mb/s, Força %d"
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
-#~ msgid "Device"
-#~ msgstr "Dispositivo"
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Balanceamento de Carga de Trasmissão Adaptativo (tlb)"
-#~ msgid "Driver"
-#~ msgstr "Controlador"
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Balanceamento de Carga Adaptativa (alb)"
-#~ msgid "State"
-#~ msgstr "Estado"
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (recomendado)"
-#~ msgid "HW Address"
-#~ msgstr "Endereço de HW"
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
-#~ msgid ""
-#~ "\n"
-#~ " Capabilities:\n"
-#~ msgstr ""
-#~ "\n"
-#~ " Capacidades:\n"
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "Escravos"
-#~ msgid "Carrier Detect"
-#~ msgstr "Detecção de Operadora"
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "Mode"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "Primário"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "Monitoramento de Link"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "Frequência de Monitoramento"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Atraso de Link up"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Atraso de Link down"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "Alvos ARP"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "PORTA DE PONTE"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "Prioridade"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Custo do Caminho"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Modo do Hairpin"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "PONTE"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "segundos"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "Tempo de Expiração"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "Habilitar STP (Spanning Tree Protocol)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Avançar atraso"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Tempo de Saudação"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Tempo de expiração máximo"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "Endereço MAC clonado"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Datagram"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "Conectado"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "Modo de Transporte"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Desabilitado"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Automático"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Link-local"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Manual"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Compartilhado"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "CONFIGURAÇÃO DO IPv4"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(Nenhuma rota de cliente)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "Uma rota de cliente"
+msgstr[1] "%d rotas de clientes"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "Endereços"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "Gateway"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "Servidores de DNS"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "Procurar domínios"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "Roteamento"
-#~ msgid "Speed"
-#~ msgstr "Velocidade"
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "Nunca usar esta rede para rota padrão"
-#~ msgid ""
-#~ "\n"
-#~ " Wireless Properties\n"
-#~ msgstr ""
-#~ "\n"
-#~ " Propriedades de rede sem fio\n"
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "Requer endereço IPv4 para esta conexão"
-#~ msgid "WEP Encryption"
-#~ msgstr "Criptografia WEP"
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignorar"
-#~ msgid "WPA Encryption"
-#~ msgstr "Criptografia WPA"
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automático (somente DHCP)"
-#~ msgid "WPA2 Encryption"
-#~ msgstr "Criptografia WPA2"
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "CONFIGURAÇÃO DO IPv6"
+
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "Requer endereço de IPv6 para esta conexão"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "Esconder"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "Exibir"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "Nome do perfil"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "Dispositivo"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "Conectar automaticamente"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Disponibilizar à todos os usuários"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "PORTA DA EQUIPE"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "Configuração do JSON"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "EQUIPE"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "Pai"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Cliente"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "Ponto de Acesso"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Rede Ad-Hoc"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Automático"
+
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Nenhum"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 Pessoal"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 Empresa"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit Key (Hex or ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit Frase senha"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "WEP Dinâmico (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (Default)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "Abrir Sistema"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "Chave compartilhada"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "Canal"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "Segurança"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "Senha"
+
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(Nenhum suporte para wpa-empresa ainda...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "Chave"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "Ãndice WEP"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "Autenticação"
+
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Nenhum suporte para o dynamic-wep ainda...)"
+
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "Nome de usuário"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Perguntar a senha todas as vezes"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Exibir senha"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "Destino"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "Prefixo"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "Próxima parada"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "Métrico"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "Nenhuma rota de cliente foi definida."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "Identidade"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "Senha de chave privada"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "Serviço"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "Autenticação requerida pela rede wireless"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"Senhas ou chaves de criptografia são necessárias para acessar a rede "
+"wireless '%s'."
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Autenticação Wired 802.1X "
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Nome de rede"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "Autenticação do DSL"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "Código PIN necessário"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Código PIN é necessário para o dispositivo de banda larga móvel"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "Senha de rede de banda larga móvel"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "Requer uma senha para conectar ao '%s'."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "Selecionar o tipo de conexão escrava que você deseja adicionar."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Adicionar..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Remover"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "Ativação falhou"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "Conectar..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Não foi possível ativar a conexão: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "Ativar"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "Desativar"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "Cancelar"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Nenhuma conexão '%s'"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "A conexão já está ativada"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "Criar"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "Selecionar o tipo de conexão que você deseja criar"
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"Se você estiver criando uma conexão VPN e esta conexão que você deseja criar "
+"não aparece na lista, você pode não ter o plugin VPN correto instalado."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "Nova Conexão"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Incapaz de remover conexão: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Você tem certeza de que você quer remover a conexão '%s'?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "Nâo foi possível remover a conexão: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Definir Hostname"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Hostname"
+
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Definir hostname para '%s'"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Incapaz de definir hostname: %s"
-#~ msgid "TKIP cipher"
-#~ msgstr "Cifrador TKIP"
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "conexão"
-#~ msgid "CCMP cipher"
-#~ msgstr "Cifrador CCMP"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "Editar a conexão"
-#~ msgid ""
-#~ "\n"
-#~ " Wireless Access Points %s\n"
-#~ msgstr ""
-#~ "\n"
-#~ " Pontos de acesso sem fio %s\n"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "Ativar a conexão"
-#~ msgid "(* = current AP)"
-#~ msgstr "(* = PA atual)"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "novo hostname"
-#~ msgid ""
-#~ "\n"
-#~ " Wired Properties\n"
-#~ msgstr ""
-#~ "\n"
-#~ " Propriedades de rede com fio\n"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "Definir hostname do sistema"
-#~ msgid "Carrier"
-#~ msgstr "Operadora"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
-#~ msgid ""
-#~ "\n"
-#~ " IPv4 Settings:\n"
-#~ msgstr ""
-#~ "\n"
-#~ " Configurações IPv4\n"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "Por favor selecione uma opção"
-#~ msgid "Address"
-#~ msgstr "Endereço"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "Uso"
-#~ msgid "Prefix"
-#~ msgstr "Prefixo"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "Não foi possível analisar argumentos"
-#~ msgid "Gateway"
-#~ msgstr "Gateway"
-
-#~ msgid "Device:"
-#~ msgstr "Dispositivo:"
-
-#~ msgid "Error: hwaddr has to be specified."
-#~ msgstr "Erro: hwaddr tem que ser especificado."
-
-#~ msgid "Frequency:"
-#~ msgstr "Frequência:"
-
-#~ msgid "Mode:"
-#~ msgstr "Modo:"
-
-#~ msgid "Ad-hoc"
-#~ msgstr "Ad-hoc"
-
-#~ msgid "Maximal bitrate:"
-#~ msgstr "Bitrate máxima:"
-
-#~ msgid "Strength:"
-#~ msgstr "Potência:"
-
-#~ msgid "Flags:"
-#~ msgstr "Flags:"
-
-#~ msgid "privacy"
-#~ msgstr "privacidade"
-
-#~ msgid "WPA flags:"
-#~ msgstr "Flags WPA:"
-
-#~ msgid "RSN flags:"
-#~ msgstr "Flags RSN:"
-
-#~ msgid "NM running:"
-#~ msgstr "NM rodando:"
-
-#~ msgid "NM state:"
-#~ msgstr "Estado do NM:"
-
-#~ msgid "NM wireless hardware:"
-#~ msgstr "Hardware sem fio do NM:"
-
-#~ msgid "NM wireless:"
-#~ msgstr "NM sem fio:"
-
-#~ msgid "NM WWAN hardware:"
-#~ msgstr "Hardware NM WWAN:"
-
-#~ msgid ""
-#~ "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#~ "\n"
-#~ "OPTIONS\n"
-#~ " -t[erse] terse output\n"
-#~ " -p[retty] pretty output\n"
-#~ " -v[ersion] show program version\n"
-#~ " -h[elp] print this help\n"
-#~ "\n"
-#~ "OBJECT\n"
-#~ " nm NetworkManager status\n"
-#~ " con NetworkManager connections\n"
-#~ " dev devices managed by NetworkManager\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Uso: %s [OPÇÕES] OBJETO { COMANDO | help }\n"
-#~ "\n"
-#~ "OPÇÕES\n"
-#~ " -t[erse] saída concisa\n"
-#~ " -p[retty] saída elegante\n"
-#~ " -v[ersion] mostra a versão do programa\n"
-#~ " -h[elp] imprime esta ajuda\n"
-#~ "\n"
-#~ "OBJETO\n"
-#~ " nm Status do NetworkManager\n"
-#~ " con Conexões do NetworkManager\n"
-#~ " dev Dispositivos gerenciados pelo NetworkManager\n"
-#~ "\n"
-
-#~ msgid "Auto %s"
-#~ msgstr "Auto %s"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManager não está em execução."
diff --git a/po/ru.po b/po/ru.po
index 56f3fce3e..490f69d8e 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1165,7 +1165,7 @@ msgstr "%u МГц"
#: ../cli/src/devices.c:400
#, c-format
-msgid "%u MB/s"
+msgid "%u Mbit/s"
msgstr "%u МБ/Ñ"
#: ../cli/src/devices.c:409
diff --git a/po/sl.po b/po/sl.po
index 744beb3b1..ddd4e08e9 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -1274,8 +1274,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:380
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:389
msgid "Encrypted: "
diff --git a/po/sr.po b/po/sr.po
index 160630c37..baefbaf54 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -711,8 +711,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:394
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:403
msgid "Encrypted: "
diff --git a/po/sr@latin.po b/po/sr@latin.po
index 3158facc0..b4f9f284f 100644
--- a/po/sr@latin.po
+++ b/po/sr@latin.po
@@ -711,8 +711,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:394
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:403
msgid "Encrypted: "
diff --git a/po/sv.po b/po/sv.po
index 9f66eb65b..7bcc96045 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1229,8 +1229,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:557
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:566
msgid "Encrypted: "
diff --git a/po/ta.po b/po/ta.po
index 7d5eef3f1..00df5a8b6 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -6,358 +6,465 @@
# Felix I <ifelix25@gmail.com>, 2009.
# I. Felix <ifelix@redhat.com>, 2009, 2010.
# I Felix <ifelix@redhat.com>, 2010.
-# Shantha kumar <shkumar@redhat.com>, 2012.
+# Shantha kumar <shkumar@redhat.com>, 2012, 2013, 2014.
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager.po.master.ta\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-12-18 03:25+0000\n"
-"PO-Revision-Date: 2012-12-19 15:05+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-01-23 15:24+0000\n"
+"PO-Revision-Date: 2014-01-24 15:22+0530\n"
"Last-Translator: Shantha kumar <shkumar@redhat.com>\n"
-"Language-Team: Tamil <>\n"
+"Language-Team: Tamil <kde-i18n-doc@kde.org>\n"
"Language: ta\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\\n"
"\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:133
-#: ../cli/src/connections.c:167
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:179
+#: ../cli/src/connections.c:201
msgid "GROUP"
msgstr "GROUP"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADDRESS"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ROUTE"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMAIN"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+#| msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgid "invalid IPv4 address '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv4 à®®à¯à®•à®µà®°à®¿ '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s' ; <1-32> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid gateway '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ கேடà¯à®µà¯‡: '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+#| msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgid "invalid IPv6 address '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv6 à®®à¯à®•à®µà®°à®¿ '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <1-128> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
+
+#: ../cli/src/common.c:512
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid IPv4 route '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv4 தடம௠'%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <0-32> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid next hop address '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ hop à®®à¯à®•à®µà®°à®¿ '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid metric '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ மெடà¯à®°à®¿à®•à¯ '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid IPv6 route '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv6 தடம௠'%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <0-128> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "பராமரிகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "கிடைகà¯à®•à®ªà¯à®ªà¯†à®±à®¾à®¤"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (தயாராகà¯à®•à¯)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (கடà¯à®Ÿà®®à¯ˆà®•à¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவை)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (IP கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ˆ பெறà¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (IP இணைபà¯à®ªà¯ˆ சோதிகà¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (இரணà¯à®Ÿà®¾à®®à¯ நிலை இணைபà¯à®ªà¯à®•à®³à¯ˆà®¤à¯ தொடஙà¯à®•à¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:658
+#: ../cli/src/common.c:639 ../cli/src/connections.c:527
msgid "deactivating"
msgstr "à®®à¯à®Ÿà®•à¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:661
-#: ../cli/src/connections.c:684 ../cli/src/connections.c:1376
-#: ../cli/src/devices.c:650 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:629
-#: ../cli/src/settings.c:657 ../cli/src/utils.c:533 ../src/main.c:457
-#: ../src/main.c:476
+#: ../cli/src/common.c:643 ../cli/src/connections.c:532
+#: ../cli/src/connections.c:555 ../cli/src/connections.c:1668
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2257
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1114 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "தெரியாத"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "காரணம௠கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2466
+#, c-format
msgid "Unknown error"
msgstr "தெரியாத பிழை"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "சாதனம௠இபà¯à®ªà¯‹à®¤à¯ நிரà¯à®µà®•à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "சாதனம௠இபà¯à®ªà¯‹à®¤à¯ நிரà¯à®µà®•à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "அமைவாகà¯à®•à®®à¯ செயà¯à®µà®¤à®±à¯à®•à¯ சாதனதà¯à®¤à¯ˆ தயாரà¯à®šà¯†à®¯à¯à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:414
-msgid "IP configuration could not be reserved (no available address, timeout, etc.)"
-msgstr "IP அமைவாகà¯à®•à®¤à¯à®¤à¯ˆ ஒதà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ (à®®à¯à®•à®µà®°à®¿ கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ, காலாவதியாதல௠போனà¯à®±à®µà¯ˆ)"
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+"IP அமைவாகà¯à®•à®¤à¯à®¤à¯ˆ ஒதà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ (à®®à¯à®•à®µà®°à®¿ கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ, காலாவதியாதல௠"
+"போனà¯à®±à®µà¯ˆ)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "IP அமைவாகà¯à®•à®®à¯ இபà¯à®ªà¯‹à®¤à¯ செலà¯à®²à®¾à®¤à¯"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "ரகசியஙà¯à®•à®³à¯ தேவையாயிரà¯à®¨à¯à®¤à®©, ஆனால௠தரபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ அமைவாகà¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ à®…à®™à¯à®•à¯€à®•à®¾à®°à®¤à¯à®¤à®¿à®±à¯à®•à¯ நீணà¯à®Ÿ நேரம௠எடà¯à®¤à¯à®¤à¯à®•à¯à®•à¯Šà®£à¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "பிபிபி சேவை தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "பிபிபி சேவை தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "பிபிபி தோலà¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "டிஹெசà¯à®šà®¿à®ªà®¿ கிளையனà¯à®Ÿà¯ தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP கிளையனà¯à®Ÿà¯ பிழை"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP கிளையனà¯à®Ÿà¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "பகிரà¯à®¨à¯à®¤ இணைபà¯à®ªà¯ சேவை தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "பகிரà¯à®¨à¯à®¤ இணைபà¯à®ªà¯ சேவை தோலà¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "AutoIP சேவையைத௠தொடஙà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP சேவை பிழை"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP சேவை தொடஙà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "தடம௠பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ உளà¯à®³à®¤à¯"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "டயல௠டோன௠இலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "கேரியரை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "டயல௠செயà¯à®¯à¯à®®à¯ நேரம௠கடநà¯à®¤à®¤à¯"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "டயல௠செயà¯à®¯à¯à®®à¯ à®®à¯à®¯à®±à¯à®šà®¿ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "மோடதà¯à®¤à¯ˆà®¤à¯ தொடஙà¯à®•à¯à®¤à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ à®à®ªà®¿à®Žà®©à¯ ஠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à¯à®•à®³à¯ˆà®¤à¯ தேடவிலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®²à¯ பதிவà¯à®šà¯†à®¯à¯à®¤à®²à¯ மறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®²à¯ பதிவà¯à®šà¯†à®¯à¯à®¤à®²à¯ நேரம௠கடநà¯à®¤à®¤à¯"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "வேணà¯à®Ÿà®¿à®¯ நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®²à¯ பதிவà¯à®šà¯†à®¯à¯à®¤à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN சோதனை தோலà¯à®µà®¿"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "சாதனதà¯à®¤à®¿à®©à¯ தேவையான வரà¯à®¤à¯à®¤à®• மெனà¯à®ªà¯Šà®°à¯à®³à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "சாதனம௠நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager உறஙà¯à®•à®¿à®µà®¿à®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "சாதனதà¯à®¤à®¿à®©à¯ செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ போயà¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "பயனர௠அலà¯à®²à®¤à¯ கிளையனà¯à®Ÿà¯ சாதனதà¯à®¤à¯ˆ இணைபà¯à®ªà¯ தà¯à®£à¯à®Ÿà®¿à®¤à¯à®¤à®¾à®°à¯"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "கேரியரà¯/இணைபà¯à®ªà¯ மாறிவிடà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "சாதனதà¯à®¤à®¿à®©à¯ தறà¯à®ªà¯‹à®¤à¯à®³à¯à®³ இணைபà¯à®ªà¯ இரà¯à®ªà¯à®ªà®¤à®¾à®• கொளà¯à®³à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ உளà¯à®³à®¤à¯"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "மோடதà¯à®¤à¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "Bluetooth இணைபà¯à®ªà¯ தோலà¯à®µà®¿ அலà¯à®²à®¤à¯ அதறà¯à®•à®¾à®© நேரம௠கடநà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM காரà¯à®Ÿà¯ செரà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM PIN தேவை"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM PUK தேவை"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM தவறà¯"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "இனà¯à®ªà®¿à®©à®¿à®ªà¯‡à®©à¯à®Ÿà¯ சாதனம௠இணைபà¯à®ªà¯ பாஙà¯à®•à¯ˆ ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "இணைபà¯à®ªà®¿à®©à¯ சாரà¯à®¨à®¿à®²à¯ˆ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "RFC 2684 ஈதà¯à®¤à®°à¯à®©à¯†à®Ÿà¯ ஓவர௠ADSL பிரிடà¯à®œà®¿à®²à¯ சிகà¯à®•à®²à¯"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager இலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:558
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi பிணையதà¯à®¤à¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:561
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "அடிபà¯à®ªà®Ÿà¯ˆ இணைபà¯à®ªà®¿à®©à¯ இரணà¯à®Ÿà®¾à®®à¯ நிலை இணைபà¯à®ªà¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:296 ../cli/src/devices.c:314
-#: ../cli/src/devices.c:436 ../cli/src/devices.c:480
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB அலà¯à®²à®¤à¯ FCoE அமைவ௠தோலà¯à®µà®¿"
+
+#: ../cli/src/common.c:820
+#| msgid "connection failed"
+msgid "teamd control failed"
+msgstr "teamd கடà¯à®Ÿà¯à®ªà¯à®ªà®¾à®Ÿà¯ தோலà¯à®µà®¿"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "தெரியாத"
+#: ../cli/src/common.c:866
+#, c-format
+#| msgid "invalid '%s' or its value '%s'"
+msgid "invalid priority map '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ வரைபடம௠'%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+#| msgid "'%s' is not a valid band"
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+#| msgid "'%s=%s' is not a valid configuration for '%s'"
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© அணி அமைவாகà¯à®•à®®à¯ அலà¯à®²à®¤à¯ கோபà¯à®ªà¯à®ªà¯ பெயரலà¯à®²."
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "பெயரை அமைகà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? "
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "பணà¯à®ªà®¿à®©à¯ பெயரà¯? "
+
+#: ../cli/src/connections.c:64
+#| msgid "Active connection state: %s\n"
+msgid "Enter connection type: "
+msgstr "இணைபà¯à®ªà¯ வகையை உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯: "
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
-#: ../cli/src/devices.c:108 ../cli/src/devices.c:132 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152 ../cli/src/devices.c:166 ../cli/src/devices.c:180
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:218 ../cli/src/devices.c:227
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:180
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
-msgstr "NAME"
+msgstr "பெயரà¯"
#. 0
#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
msgid "UUID"
msgstr "UUID"
@@ -365,1072 +472,3316 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
-#: ../cli/src/devices.c:72 ../cli/src/devices.c:110 ../cli/src/devices.c:205
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:202
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
-msgstr "TYPE"
+msgstr "வகை"
#. 2
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
-msgstr "TIMESTAMP"
+msgstr "நேர à®®à¯à®¤à¯à®¤à®¿à®°à¯ˆ"
#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
-msgstr "TIMESTAMP-REAL"
+msgstr "நேர à®®à¯à®¤à¯à®¤à®¿à®°à¯ˆ-மெயà¯"
#. 4
-#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:122
+#. 14
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
-msgstr "AUTOCONNECT"
+msgstr "தானியஙà¯à®•à¯ இணைபà¯à®ªà¯"
#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:74
msgid "READONLY"
-msgstr "READONLY"
+msgstr "வாசிகà¯à®•à®®à®Ÿà¯à®Ÿà¯à®®à¯"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
-#: ../cli/src/devices.c:74 ../cli/src/devices.c:192 ../cli/src/devices.c:208
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:188
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
-msgstr "DBUS-PATH"
+msgstr "DBUS-பாதை"
-#. 2
-#: ../cli/src/connections.c:136
-msgid "DEVICES"
-msgstr "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
+#: ../cli/src/devices.c:202
+msgid "ACTIVE"
+msgstr "செயலிலà¯"
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:71 ../cli/src/devices.c:87
+#: ../cli/src/devices.c:184 ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "சாதனமà¯"
+
+#. 9
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:117 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:78 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:73 ../cli/src/devices.c:96
+#: ../cli/src/network-manager.c:39
msgid "STATE"
-msgstr "STATE"
+msgstr "நிலை"
+
+#. 10
+#: ../cli/src/connections.c:79
+#| msgid "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "செயலில௠உளà¯à®³ பாதை"
+
+#. 2
+#: ../cli/src/connections.c:182
+msgid "DEVICES"
+msgstr "சாதனஙà¯à®•à®³à¯"
#. 4
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:184
msgid "DEFAULT"
-msgstr "DEFAULT"
+msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯"
#. 5
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:185
msgid "DEFAULT6"
-msgstr "DEFAULT6"
+msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯6"
#. 6
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:186
msgid "SPEC-OBJECT"
-msgstr "SPEC-OBJECT"
+msgstr "SPEC-பொரà¯à®³à¯"
#. 7
-#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#. 4
+#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:143
+#. 5
+#. 18
+#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
-msgstr "CON-PATH"
+msgstr "CON-பாதை"
#. 10
-#: ../cli/src/connections.c:144
+#: ../cli/src/connections.c:190
msgid "ZONE"
-msgstr "ZONE"
+msgstr "மணà¯à®Ÿà®²à®®à¯"
#. 11
-#: ../cli/src/connections.c:145
+#: ../cli/src/connections.c:191
msgid "MASTER-PATH"
-msgstr "MASTER-PATH"
-
-#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
-msgid "GENERAL"
-msgstr "GENERAL"
-
-#. 0
-#: ../cli/src/connections.c:154
-msgid "IP"
-msgstr "IP"
+msgstr "MASTER-பாதை"
#. 1
-#: ../cli/src/connections.c:169
+#: ../cli/src/connections.c:203
msgid "USERNAME"
-msgstr "USERNAME"
+msgstr "பயனரà¯à®ªà¯†à®¯à®°à¯"
#. 2
-#: ../cli/src/connections.c:170
+#: ../cli/src/connections.c:204
msgid "GATEWAY"
-msgstr "GATEWAY"
+msgstr "கேடà¯à®µà¯‡"
#. 3
-#: ../cli/src/connections.c:171
+#: ../cli/src/connections.c:205
msgid "BANNER"
-msgstr "BANNER"
+msgstr "பேனரà¯"
#. 4
-#: ../cli/src/connections.c:172
+#: ../cli/src/connections.c:206
msgid "VPN-STATE"
-msgstr "VPN-STATE"
+msgstr "VPN-நிலை"
#. 5
-#: ../cli/src/connections.c:173
+#: ../cli/src/connections.c:207
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:195
-#, c-format
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "பொதà¯"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:261
+#, c-format
+#| msgid ""
+#| "Usage: nmcli connection { COMMAND | help }\n"
+#| " COMMAND := { show | up | down | delete }\n"
+#| "\n"
+#| " show configured [[ id | uuid | path ] <ID>]\n"
+#| "\n"
+#| " show active [[ id | uuid | path | apath ] <ID>]\n"
+#| "\n"
+#| " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+#| "<name>] [--nowait] [--timeout <timeout>]\n"
+#| "\n"
+#| " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [--nowait] "
+#| "[--timeout <timeout>]\n"
+#| "\n"
+#| " down [ id | uuid | path | apath ] <ID>\n"
+#| "\n"
+#| " delete [ id | uuid | path ] <ID>\n"
+#| "\n"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
-"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection { COMMAND | help }\n"
+"\n"
+"கடà¯à®Ÿà®³à¯ˆ := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:634
+#: ../cli/src/connections.c:283
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "பிழை: 'con list': %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"List in-memory and on-disk connection profiles, some of which may also be\n"
+"active if a device is using that connection profile. Without a parameter, "
+"all\n"
+"profiles are listed. When --active option is specified, only the active\n"
+"profiles are shown.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Show details for specified connections. By default, both static "
+"configuration\n"
+"and active connection data are displayed. It is possible to filter the "
+"output\n"
+"using global '--fields' option. Refer to the manual page for more "
+"information.\n"
+"When --active option is specified, only the active profiles are taken into\n"
+"account.\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [--active]\n"
+"\n"
+"நினைவகதà¯à®¤à®¿à®²à¯ உளà¯à®³ மறà¯à®±à¯à®®à¯ வடà¯à®Ÿà®¿à®²à¯ உளà¯à®³ இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯à®•à®³à¯ˆà®ªà¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯,\n"
+"அநà¯à®¤ இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ˆ ஒர௠சாதனம௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯ அவறà¯à®±à®¿à®²à¯ "
+"சிலவà¯à®®à¯ செயலில௠இரà¯à®•à¯à®•à®²à®¾à®®à¯. அளவà¯à®°à¯à®µà®¿à®²à¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, "
+"அனைதà¯à®¤à¯\n"
+"தனியமைபà¯à®ªà¯à®•à®³à¯à®®à¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯. --active விரà¯à®ªà¯à®ªà®®à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯, "
+"செயலிலà¯\n"
+"உளà¯à®³ தனியமைபà¯à®ªà¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯ காடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à®¾à®© விவரஙà¯à®•à®³à¯ˆà®•à¯ காணà¯à®ªà®¿. à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà®¾à®•, நிலையான "
+"அமைவாகà¯à®•à®®à¯\n"
+"மறà¯à®±à¯à®®à¯ செயலில௠உளà¯à®³ இணைபà¯à®ªà¯ ஆகிய இரணà¯à®Ÿà®¿à®©à¯ தரவà¯à®®à¯ காடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯. வெளியீடà¯à®Ÿà¯ˆ "
+"வடிகடà¯à®Ÿà®µà¯à®®à¯ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯\n"
+"அதறà¯à®•à¯ '--fields' விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà¯à®®à¯. மேலà¯à®®à¯ தகவலà¯à®•à¯à®•à¯ "
+"கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
+"--active விரà¯à®ªà¯à®ªà®®à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯, செயலில௠உளà¯à®³ தனியமைபà¯à®ªà¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯\n"
+"கணகà¯à®•à®¿à®²à¯ எடà¯à®¤à¯à®¤à¯à®•à¯à®•à¯Šà®³à¯à®³à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:636
+#: ../cli/src/connections.c:305
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Error: 'con list': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
-
-#: ../cli/src/connections.c:266
-msgid "Connection details"
-msgstr "இணைபà¯à®ªà¯ விவரஙà¯à®•à®³à¯"
-
-#: ../cli/src/connections.c:509
-msgid "never"
-msgstr "à®’à®°à¯à®ªà¯‹à®¤à¯à®®à¯ இலà¯à®²à¯ˆ"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"ஒர௠சாதனதà¯à®¤à®¿à®²à¯ ஒர௠இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯. செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¿à®¯ தனியமைபà¯à®ªà®¾à®©à®¤à¯\n"
+"அதன௠பெயரà¯, UUID அலà¯à®²à®¤à¯ D-Bus பாதை மூலம௠அடையாளம௠காணபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"ஒர௠இணைபà¯à®ªà¯à®Ÿà®©à¯ உளà¯à®³ ஒர௠சாதனதà¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯. இணைபà¯à®ªà¯ தனியமைபà¯à®ªà®¾à®©à®¤à¯\n"
+"NetworkManager ஆல௠தானாக தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
+"\n"
+"ifname - இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¿à®¯ சாதனதà¯à®¤à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯\n"
+"ap - இணைகà¯à®• வேணà¯à®Ÿà®¿à®¯ AP à®à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯ (Wi-Fi கà¯à®•à¯ மடà¯à®Ÿà¯à®®à¯‡ "
+"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯)\n"
+"nsp - இணைகà¯à®• வேணà¯à®Ÿà®¿à®¯ NSP à®à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯ (WiMAX கà¯à®•à¯ மடà¯à®Ÿà¯à®®à¯‡ "
+"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:510 ../cli/src/connections.c:511
-#: ../cli/src/connections.c:739 ../cli/src/connections.c:740
-#: ../cli/src/connections.c:742 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:748 ../cli/src/settings.c:823
-#: ../cli/src/settings.c:943 ../cli/src/settings.c:1225
-#: ../cli/src/settings.c:1226 ../cli/src/settings.c:1228
-#: ../cli/src/settings.c:1230 ../cli/src/settings.c:1231
-#: ../cli/src/settings.c:1362 ../cli/src/settings.c:1363
-#: ../cli/src/settings.c:1364 ../cli/src/settings.c:1365
-#: ../cli/src/settings.c:1442 ../cli/src/settings.c:1443
-#: ../cli/src/settings.c:1444 ../cli/src/settings.c:1445
-#: ../cli/src/settings.c:1446 ../cli/src/settings.c:1447
-#: ../cli/src/settings.c:1448 ../cli/src/settings.c:1449
-#: ../cli/src/settings.c:1450 ../cli/src/settings.c:1451
-#: ../cli/src/settings.c:1452 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1454 ../cli/src/settings.c:1525
-#: ../cli/src/settings.c:1867 ../cli/src/settings.c:1904
-msgid "yes"
-msgstr "ஆமà¯"
+#: ../cli/src/connections.c:326
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path | apath] <ID>\n"
+"\n"
+"ஒர௠சாதனதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ இணைபà¯à®ªà¯ˆ செயலà¯à®®à¯à®Ÿà®•à¯à®•à¯à®¤à®²à¯ (சாதனதà¯à®¤à®¿à®©à¯ மேறà¯à®ªà®Ÿà®¿à®¯à®¾à®© \n"
+"தானியஙà¯à®•à¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ˆà®¤à¯ தடà¯à®•à¯à®•à®¾à®®à®²à¯). செயலà¯à®®à¯à®Ÿà®•à¯à®• வேணà¯à®Ÿà®¿à®¯ தனியமைபà¯à®ªà¯"
+"அதன௠பெயரà¯,\n"
+"UUID அலà¯à®²à®¤à¯ D-Bus பாதையினால௠அடையாளம௠காணபà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
-#: ../cli/src/connections.c:510 ../cli/src/connections.c:511
-#: ../cli/src/connections.c:739 ../cli/src/connections.c:740
-#: ../cli/src/connections.c:742 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:748 ../cli/src/settings.c:750
-#: ../cli/src/settings.c:823 ../cli/src/settings.c:943
-#: ../cli/src/settings.c:1225 ../cli/src/settings.c:1226
-#: ../cli/src/settings.c:1228 ../cli/src/settings.c:1230
-#: ../cli/src/settings.c:1231 ../cli/src/settings.c:1362
-#: ../cli/src/settings.c:1363 ../cli/src/settings.c:1364
-#: ../cli/src/settings.c:1365 ../cli/src/settings.c:1442
-#: ../cli/src/settings.c:1443 ../cli/src/settings.c:1444
-#: ../cli/src/settings.c:1445 ../cli/src/settings.c:1446
-#: ../cli/src/settings.c:1447 ../cli/src/settings.c:1448
-#: ../cli/src/settings.c:1449 ../cli/src/settings.c:1450
-#: ../cli/src/settings.c:1451 ../cli/src/settings.c:1452
-#: ../cli/src/settings.c:1453 ../cli/src/settings.c:1454
-#: ../cli/src/settings.c:1525 ../cli/src/settings.c:1867
-#: ../cli/src/settings.c:1904
-msgid "no"
-msgstr "இலà¯à®²à¯ˆ"
+#: ../cli/src/connections.c:339
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
-#: ../cli/src/connections.c:585
-msgid "Connection list"
-msgstr "இணைபà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯"
-
-#: ../cli/src/connections.c:598 ../cli/src/connections.c:1135
-#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1688
-#: ../cli/src/connections.c:1697 ../cli/src/connections.c:1707
-#: ../cli/src/connections.c:1719 ../cli/src/connections.c:1828
-#: ../cli/src/connections.c:1930 ../cli/src/devices.c:1127
-#: ../cli/src/devices.c:1137 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1263 ../cli/src/devices.c:1627
-#: ../cli/src/devices.c:1634 ../cli/src/devices.c:1648
-#: ../cli/src/devices.c:1655 ../cli/src/devices.c:1672
-#: ../cli/src/devices.c:1683 ../cli/src/devices.c:1904
-#: ../cli/src/devices.c:1911
+#: ../cli/src/connections.c:416
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "பிழை: %s விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"ஒர௠இணைபà¯à®ªà¯ தனியமைபà¯à®ªà®¿à®©à¯ ஒர௠பணà¯à®ªà¯ˆ மாறà¯à®±à®¿à®¯à®®à¯ˆ.\n"
+"தனியமைபà¯à®ªà®¾à®©à®¤à¯ அதன௠பெயர௠UUID அலà¯à®²à®¤à¯ D-Bus பாதையால௠அடையாளம௠காணபà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
-#: ../cli/src/connections.c:611
+#: ../cli/src/connections.c:428
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "பிழை: %s - அத௠போனà¯à®± இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path] <ID>\n"
+"\n"
+"à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ ஒர௠இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ˆ ஊடாட௠திரà¯à®¤à¯à®¤à®¿à®¯à®¿à®²à¯ திரà¯à®¤à¯à®¤à¯.\n"
+"தனியமைபà¯à®ªà®¾à®©à®¤à¯ அதன௠பெயரà¯, UUID அலà¯à®²à®¤à¯ D-Bus பாதையின௠மூலம௠அடையாளம௠"
+"காணபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [type <new connection type>] [con-name <new connection name>"
+"]\n"
+"\n"
+"ஊடாட௠திரà¯à®¤à¯à®¤à®¿à®¯à®¿à®²à¯ ஒர௠பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ˆà®šà¯ சேரà¯.\n"
+"\n"
-#: ../cli/src/connections.c:617 ../cli/src/connections.c:1732
-#: ../cli/src/connections.c:1845 ../cli/src/connections.c:1937
-#: ../cli/src/devices.c:911 ../cli/src/devices.c:991 ../cli/src/devices.c:1151
-#: ../cli/src/devices.c:1269 ../cli/src/devices.c:1696
-#: ../cli/src/devices.c:1917
+#: ../cli/src/connections.c:444
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "தெரியாத அளவà¯à®°à¯: %s\n"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path] <ID>\n"
+"\n"
+"ஒர௠இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ˆ அழி.\n"
+"தனியமைபà¯à®ªà®¾à®©à®¤à¯ அதன௠பெயரà¯, UUID அலà¯à®²à®¤à¯ D-Bus பாதையின௠மூலம௠அடையாளம௠"
+"காணபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
+"\n"
-#: ../cli/src/connections.c:626
+#: ../cli/src/connections.c:456
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "பிழை: கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿ சரியான அளவà¯à®°à¯ இலà¯à®²à¯ˆ."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection reload { help }\n"
+"\n"
+"இணைபà¯à®ªà¯ கோபà¯à®ªà¯à®•à®³à¯ அனைதà¯à®¤à¯ˆà®¯à¯à®®à¯ வடà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ மீளேறà¯à®±à¯.\n"
+"\n"
-#: ../cli/src/connections.c:641 ../cli/src/connections.c:2033
-#: ../cli/src/devices.c:2128 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:465
#, c-format
-msgid "Error: %s."
-msgstr "பிழை: %s."
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := <filename> [<filename>...]\n"
+"\n"
+"வடà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ ஒனà¯à®±à¯ அலà¯à®²à®¤à¯ அதிக இணைபà¯à®ªà¯ கோபà¯à®ªà¯à®•à®³à¯ˆ à®à®±à¯à®±à¯/மீளேறà¯à®±à¯. இதன௠"
+"சமீபதà¯à®¤à®¿à®¯ நிலை NetworkManager கà¯à®•à¯à®¤à¯\n"
+"தெரிநà¯à®¤à®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯ எனà¯à®ªà®¤à®¾à®²à¯, இணைபà¯à®ªà¯à®•à¯ கோபà¯à®ªà¯ˆ \n"
+"கைமà¯à®±à¯ˆà®¯à®¾à®• திரà¯à®¤à¯à®¤à®¿à®¯ பிறகே \n"
+"இதைப௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+"\n"
+"\n"
-#: ../cli/src/connections.c:654
+#: ../cli/src/connections.c:523
msgid "activating"
msgstr "செயலà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/connections.c:656
+#: ../cli/src/connections.c:525
msgid "activated"
msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:670
+#: ../cli/src/connections.c:529
+msgid "deactivated"
+msgstr "à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/connections.c:541
msgid "VPN connecting (prepare)"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (தயாராகà¯)"
-#: ../cli/src/connections.c:672
+#: ../cli/src/connections.c:543
msgid "VPN connecting (need authentication)"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவை)"
-#: ../cli/src/connections.c:674
+#: ../cli/src/connections.c:545
msgid "VPN connecting"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/connections.c:676
+#: ../cli/src/connections.c:547
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (IP கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ˆ பெறà¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/connections.c:678
+#: ../cli/src/connections.c:549
msgid "VPN connected"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/connections.c:680
+#: ../cli/src/connections.c:551
msgid "VPN connection failed"
msgstr "VPN ஠இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/connections.c:682
+#: ../cli/src/connections.c:553
msgid "VPN disconnected"
msgstr "VPN தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:745
+#: ../cli/src/connections.c:636
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ விவரஙà¯à®•à®³à¯"
+
+#: ../cli/src/connections.c:648 ../cli/src/connections.c:1045
+#, c-format
+#| msgid "Error: 'device show': %s"
+msgid "Error: 'connection show': %s"
+msgstr "பிழை: 'connection show': %s"
+
+#: ../cli/src/connections.c:842
+msgid "never"
+msgstr "à®’à®°à¯à®ªà¯‹à®¤à¯à®®à¯ இலà¯à®²à¯ˆ"
+
+#. "CAPABILITIES"
+#: ../cli/src/connections.c:843 ../cli/src/connections.c:844
+#: ../cli/src/connections.c:846 ../cli/src/connections.c:905
+#: ../cli/src/connections.c:906 ../cli/src/connections.c:908
+#: ../cli/src/connections.c:6320 ../cli/src/devices.c:604
+#: ../cli/src/devices.c:654 ../cli/src/devices.c:796 ../cli/src/devices.c:797
+#: ../cli/src/devices.c:798 ../cli/src/devices.c:831 ../cli/src/devices.c:860
+#: ../cli/src/devices.c:861 ../cli/src/devices.c:862 ../cli/src/devices.c:863
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:865 ../cli/src/devices.c:866
+#: ../cli/src/network-manager.c:442
+msgid "yes"
+msgstr "ஆமà¯"
+
+#: ../cli/src/connections.c:843 ../cli/src/connections.c:844
+#: ../cli/src/connections.c:846 ../cli/src/connections.c:905
+#: ../cli/src/connections.c:906 ../cli/src/connections.c:908
+#: ../cli/src/connections.c:6320 ../cli/src/devices.c:604
+#: ../cli/src/devices.c:654 ../cli/src/devices.c:796 ../cli/src/devices.c:797
+#: ../cli/src/devices.c:798 ../cli/src/devices.c:831 ../cli/src/devices.c:860
+#: ../cli/src/devices.c:861 ../cli/src/devices.c:862 ../cli/src/devices.c:863
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:865 ../cli/src/devices.c:866
+#: ../cli/src/network-manager.c:444
+msgid "no"
+msgstr "இலà¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:901 ../cli/src/connections.c:911
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "பொரà¯à®¨à¯à®¤à®¾à®¤à¯ "
-#: ../cli/src/connections.c:939 ../cli/src/connections.c:1163
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "பிழை: 'con status': %s"
+#: ../cli/src/connections.c:1033
+#| msgid "Active connection details"
+msgid "Activate connection details"
+msgstr "இணைபà¯à®ªà¯ விவரஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
-#: ../cli/src/connections.c:941 ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:1266
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "பிழை: 'con status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
-
-#: ../cli/src/connections.c:949
-msgid "Active connection details"
-msgstr "செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ விவரஙà¯à®•à®³à¯"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr ""
+"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பà¯à®²à®®à¯ '%s'; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s மறà¯à®±à¯à®®à¯ %s, அலà¯à®²à®¤à¯ %"
+"s,%s"
-#: ../cli/src/connections.c:1085 ../cli/src/connections.c:1747
-#: ../cli/src/connections.c:1860 ../cli/src/connections.c:1951
-#: ../cli/src/devices.c:938 ../cli/src/devices.c:1000
-#: ../cli/src/devices.c:1166 ../cli/src/devices.c:1299
-#: ../cli/src/devices.c:1718 ../cli/src/devices.c:1946
-#: ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1281 ../cli/src/connections.c:1289
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "பிழை: NetworkManager இயஙà¯à®•à¯à®•à®¿à®±à®¤à®¾ எனக௠கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s."
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone'"
+msgstr "'%s' தனியாக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../cli/src/connections.c:1089 ../cli/src/connections.c:1751
-#: ../cli/src/connections.c:1864 ../cli/src/connections.c:1955
-#: ../cli/src/devices.c:942 ../cli/src/devices.c:1004
-#: ../cli/src/devices.c:1170 ../cli/src/devices.c:1303
-#: ../cli/src/devices.c:1722 ../cli/src/devices.c:1950
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1320 ../cli/src/connections.c:2046
+#: ../cli/src/connections.c:2106 ../cli/src/connections.c:7800
+#: ../cli/src/connections.c:7916 ../cli/src/connections.c:8009
+#: ../cli/src/connections.c:8037 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1403
+#: ../cli/src/devices.c:1538 ../cli/src/devices.c:1675
+#: ../cli/src/devices.c:2115 ../cli/src/devices.c:2414
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "பிழை: NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/connections.c:1121
-msgid "Active connections"
-msgstr "இணைபà¯à®ªà¯à®•à®³à¯ˆ செயறà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
+#. Add headers
+#: ../cli/src/connections.c:1350
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager செயலில௠உளà¯à®³ தனியமைபà¯à®ªà¯à®•à®³à¯"
+
+#: ../cli/src/connections.c:1351
+#| msgid "NetworkManager went to sleep"
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯à®•à®³à¯"
+
+#: ../cli/src/connections.c:1388 ../cli/src/connections.c:1991
+#: ../cli/src/connections.c:2007 ../cli/src/connections.c:2016
+#: ../cli/src/connections.c:2026 ../cli/src/connections.c:2123
+#: ../cli/src/connections.c:7771 ../cli/src/connections.c:7947
+#: ../cli/src/devices.c:1633 ../cli/src/devices.c:1641
+#: ../cli/src/devices.c:2028 ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2049 ../cli/src/devices.c:2056
+#: ../cli/src/devices.c:2073 ../cli/src/devices.c:2081
+#: ../cli/src/devices.c:2277 ../cli/src/devices.c:2373
+#: ../cli/src/devices.c:2380
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "பிழை: %s விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1439
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ ஓர௠செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
+#| msgid "Error: %s - no such connection."
+msgid "Error: %s - no such connection profile."
+msgstr "பிழை: %s - இபà¯à®ªà®Ÿà®¿ ஒர௠இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
-#: ../cli/src/connections.c:1151
+#: ../cli/src/connections.c:1455 ../cli/src/connections.c:2059
+#: ../cli/src/connections.c:8015 ../cli/src/connections.c:8056
+#: ../cli/src/connections.c:8203 ../cli/src/devices.c:2256
+#: ../cli/src/devices.c:2630 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "பிழை: தெரியாத அளவà¯à®°à¯: %s"
+msgid "Error: %s."
+msgstr "பிழை: %s."
-#: ../cli/src/connections.c:1258
+#: ../cli/src/connections.c:1550
#, c-format
msgid "no active connection on device '%s'"
msgstr "சாதனம௠'%s' இல௠செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1266
+#: ../cli/src/connections.c:1558
msgid "no active connection or device"
msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ அலà¯à®²à®¤à¯ சாதனம௠இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1629
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "சாதனம௠'%s' இணைபà¯à®ªà¯ '%s' உடன௠உகநà¯à®¤à®¤à¯ அலà¯à®²"
-#: ../cli/src/connections.c:1340
+#: ../cli/src/connections.c:1632
#, c-format
msgid "no device found for connection '%s'"
msgstr "இணைபà¯à®ªà¯ '%s'கà¯à®•à¯ சாதனம௠எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1352
+#: ../cli/src/connections.c:1644
msgid "unknown reason"
msgstr "தெரியாத காரணமà¯"
-#: ../cli/src/connections.c:1354
+#: ../cli/src/connections.c:1646 ../cli/src/network-manager.c:288
msgid "none"
msgstr "ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à®¾à®¤"
-#: ../cli/src/connections.c:1356
+#: ../cli/src/connections.c:1648
msgid "the user was disconnected"
msgstr "பயனர௠செயலà¯à®¨à¯€à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯"
-#: ../cli/src/connections.c:1358
+#: ../cli/src/connections.c:1650
msgid "the base network connection was interrupted"
msgstr "தளப௠பிணைய இணைபà¯à®ªà®¾à®©à®¤à¯ தடை செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¤à¯"
-#: ../cli/src/connections.c:1360
+#: ../cli/src/connections.c:1652
msgid "the VPN service stopped unexpectedly"
msgstr "எதிரà¯à®ªà®¾à®°à®¾à®®à®²à¯ VPN சேவை நிறà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:1362
+#: ../cli/src/connections.c:1654
msgid "the VPN service returned invalid configuration"
msgstr "VPN சேவையானத௠தவறான கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà®¿à®±à¯à®•à¯ திரà¯à®®à¯à®ªà®¿à®¯à®¤à¯"
-#: ../cli/src/connections.c:1364
+#: ../cli/src/connections.c:1656
msgid "the connection attempt timed out"
msgstr "இணைபà¯à®ªà¯ à®®à¯à®¯à®±à¯à®šà®¿à®¯à®¿à®©à¯ நேரம௠மà¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯"
-#: ../cli/src/connections.c:1366
+#: ../cli/src/connections.c:1658
msgid "the VPN service did not start in time"
msgstr "VPN சேவை நேரதà¯à®¤à®¿à®±à¯à®•à¯ தà¯à®µà®™à¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1368
+#: ../cli/src/connections.c:1660
msgid "the VPN service failed to start"
msgstr "VPN சேவையை தà¯à®µà®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1370
+#: ../cli/src/connections.c:1662
msgid "no valid VPN secrets"
msgstr "சரியான VPN இரகசியஙà¯à®•à®³à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1372
+#: ../cli/src/connections.c:1664
msgid "invalid VPN secrets"
msgstr "தவறான VPN இரகசியஙà¯à®•à®³à¯"
-#: ../cli/src/connections.c:1374
+#: ../cli/src/connections.c:1666
msgid "the connection was removed"
msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1596
+#: ../cli/src/connections.c:1683 ../cli/src/connections.c:1839
+#: ../cli/src/connections.c:6224
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (டி-பஸ௠செயல௠பாதை: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1396 ../cli/src/connections.c:1497
+#: ../cli/src/connections.c:1688
#, c-format
msgid "Error: Connection activation failed."
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/connections.c:1421
+#: ../cli/src/connections.c:1713
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (டி-பஸ௠செயல௠பாதை: %s)\n"
-#: ../cli/src/connections.c:1429
+#: ../cli/src/connections.c:1720
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s."
-#: ../cli/src/connections.c:1526 ../cli/src/devices.c:1060
+#: ../cli/src/connections.c:1738 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "பிழை: நேரமà¯à®Ÿà®¿à®¨à¯à®¤ %d விநாடி காலாவதியானதà¯."
-#: ../cli/src/connections.c:1587
+#: ../cli/src/connections.c:1803
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"பிழை: சாதனம௠'%s' செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ˆà®¤à¯ தொடரà¯à®®à¯ à®®à¯à®©à¯à®ªà¯ ஸà¯à®²à¯‡à®µà¯à®•à®³à¯à®•à¯à®•à®¾à®• "
+"காதà¯à®¤à®¿à®°à¯à®•à¯à®•à®¿à®±à®¤à¯."
+
+#: ../cli/src/connections.c:1823
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ:%s"
-#: ../cli/src/connections.c:1681 ../cli/src/connections.c:1836
-#: ../cli/src/connections.c:1964
+#: ../cli/src/connections.c:1928 ../cli/src/connections.c:2060
+#| msgid "Unknown error"
+msgid "unknown error"
+msgstr "தெரியாத பிழை"
+
+#: ../cli/src/connections.c:1936
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "பிழை: தெரியாத பிழை: %s."
+#| msgid "Unknown log level '%s'"
+msgid "unknown device '%s'."
+msgstr "தெரியாத சாதனம௠'%s'."
+
+#: ../cli/src/connections.c:1941
+#| msgid "no active connection or device"
+msgid "neither a valid connection nor device given"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இணைபà¯à®ªà¯ அலà¯à®²à®¤à¯ சாதனம௠எதà¯à®µà¯à®®à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1979 ../cli/src/connections.c:2091
+#: ../cli/src/connections.c:7923
+msgid "Connection (name, UUID, or path): "
+msgstr "இணைபà¯à®ªà¯ (பெயரà¯, UUID அலà¯à®²à®¤à¯ பாதை): "
-#: ../cli/src/connections.c:1727 ../cli/src/devices.c:1145
-#: ../cli/src/devices.c:1691
+#: ../cli/src/connections.c:2035 ../cli/src/devices.c:1171
+#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
+#: ../cli/src/devices.c:2386
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "பிழை: நேரமà¯à®Ÿà®¿à®µà¯ மதிபà¯à®ªà¯ '%s' சரியானதலà¯à®²."
+msgid "Unknown parameter: %s\n"
+msgstr "தெரியாத அளவà¯à®°à¯: %s\n"
-#: ../cli/src/connections.c:1740 ../cli/src/connections.c:1853
-#: ../cli/src/connections.c:1944
+#: ../cli/src/connections.c:2068
+msgid "preparing"
+msgstr "தயாராகிறதà¯"
+
+#: ../cli/src/connections.c:2096 ../cli/src/connections.c:7928
+#: ../cli/src/connections.c:8043
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "பிழை: id அலà¯à®²à®¤à¯ uuid கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯."
+msgid "Error: No connection specified."
+msgstr "பிழை: இணைபà¯à®ªà¯ எதà¯à®µà¯à®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/connections.c:1773
+#: ../cli/src/connections.c:2133
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "பிழை: தகà¯à®¤à®¿à®¯à®¾à®© சாதனம௠காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ: %s."
+msgid "Error: '%s' is not an active connection."
+msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ ஓர௠செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
-#: ../cli/src/connections.c:1775
+#: ../cli/src/connections.c:2445 ../cli/src/utils.c:507
#, c-format
-msgid "Error: No suitable device found."
-msgstr "பிழை: தகà¯à®¤à®¿à®¯à®¾à®© சாதனம௠காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+#| msgid "'%s' not allowed for %s=%s"
+msgid "'%s' not among [%s]"
+msgstr "'%s' ஆனத௠இலà¯à®²à¯ˆ [%s]"
-#: ../cli/src/connections.c:1889
+#: ../cli/src/connections.c:2527
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: இணைபà¯à®ªà¯ செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ இலà¯à®²à¯ˆ\n"
+#| msgid "'%s' is not a valid MAC address"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "பிழை: '%s': '%s' எனà¯à®ªà®¤à¯ ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© %s MAC à®®à¯à®•à®µà®°à®¿ அலà¯à®²."
+
+#: ../cli/src/connections.c:2528 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "InfiniBand"
-#: ../cli/src/connections.c:1903
+#: ../cli/src/connections.c:2528 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯"
+
+#: ../cli/src/connections.c:2551
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "பிழை: இணைபà¯à®ªà¯ˆ நீகà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s"
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "பிழை: 'mtu': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MTU அலà¯à®²."
-#: ../cli/src/connections.c:2024
+#: ../cli/src/connections.c:2567
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "பிழை: 'con' கடà¯à®Ÿà®³à¯ˆ '%s' சரியானதலà¯à®²."
+#| msgid "'%s' is not a valid interface name"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "பிழை: 'parent': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®• பெயர௠அலà¯à®²."
-#: ../cli/src/connections.c:2092
+#: ../cli/src/connections.c:2588
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "பிழை: D-பஸà¯à®¸à¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+#| msgid "Error: '%s' is not valid 'connection' command."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "பிழை: 'p-key': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© InfiniBand P_KEY அலà¯à®²."
-#: ../cli/src/connections.c:2100
+#: ../cli/src/connections.c:2604
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "பிழை: கணினி அமைவà¯à®•à®³à¯ˆ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"பிழை: 'mode': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© InfiniBand போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ "
+"அலà¯à®² [டேடà¯à®Ÿà®¾à®•à¯à®°à®¾à®®à¯, இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯]."
-#: ../cli/src/connections.c:2110
+#: ../cli/src/connections.c:2620
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "பிழை: இணைபà¯à®ªà¯à®•à®³à¯ˆà®ªà¯ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: அமைவà¯à®•à®³à®¿à®©à¯ சேவை இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+#| msgid "Error: 'radio' command '%s' is not valid."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "பிழை: 'flags': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <0-7> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:190
-#: ../cli/src/devices.c:206
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2642
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "பிழை: '%s': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; %s "
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2749
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "பிழை: '%s': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <%u-%u> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2763
+msgid "ethernet"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯"
-#. 2
-#: ../cli/src/devices.c:86
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2763 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2766
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 3 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../cli/src/connections.c:2767 ../cli/src/connections.c:2821
+#: ../cli/src/connections.c:2943 ../cli/src/connections.c:2989
+#: ../cli/src/connections.c:3049 ../cli/src/connections.c:3117
+#: ../cli/src/connections.c:3280 ../cli/src/connections.c:3376
+#: ../cli/src/connections.c:3458
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "அவறà¯à®±à¯ˆ வழஙà¯à®• விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? (yes/no) [yes] "
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:203
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2775 ../cli/src/connections.c:2829
+#: ../cli/src/connections.c:2956 ../cli/src/connections.c:3057
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
-#. 6
-#: ../cli/src/devices.c:90
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2786 ../cli/src/connections.c:2840
+#: ../cli/src/connections.c:2919 ../cli/src/connections.c:2967
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2797
+msgid "Cloned MAC [none]: "
+msgstr "Cloned MAC [none]: "
-#. 8
-#: ../cli/src/devices.c:92
-msgid "IP6"
-msgstr "IP6"
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2820
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 5 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2851
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr ""
+"போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ (டேடà¯à®Ÿà®¾à®•à¯à®°à®¾à®®à¯ அலà¯à®²à®¤à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯) [datagram]: "
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "BOND"
+#: ../cli/src/connections.c:2864
+msgid "Parent interface [none]: "
+msgstr "தாய௠இடைமà¯à®•à®®à¯ [none]: "
-#. 11
-#: ../cli/src/devices.c:95
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2875
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
+
+#: ../cli/src/connections.c:2885
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "பிழை:'parent' கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯ போத௠'p-key' கடà¯à®Ÿà®¾à®¯à®®à¯.\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:2910
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
+
+#: ../cli/src/connections.c:2911 ../cli/src/connections.c:3013
+#: ../cli/src/connections.c:3232 ../cli/src/connections.c:3434
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "அதை வழஙà¯à®• விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? (yes/no) [yes] "
+
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:2942
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "'PPPoE' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 4 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
+
+#: ../cli/src/connections.c:2950 ../cli/src/connections.c:2998
+msgid "Password [none]: "
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ [none]: "
+
+#: ../cli/src/connections.c:2952
+#| msgid "Service"
+msgid "Service [none]: "
+msgstr "சேவை [none]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:2988
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr ""
+"'மொபைல௠பிராடà¯à®ªà¯‡à®©à¯à®Ÿà¯' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 2 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
+
+#: ../cli/src/connections.c:2996 ../cli/src/connections.c:3441
+msgid "Username [none]: "
+msgstr "பயனரà¯à®ªà¯†à®¯à®°à¯ [none]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3012
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "'bluetooth' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
+
+#: ../cli/src/connections.c:3021
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Bluetooth வகை (panu, dun-gsm அலà¯à®²à®¤à¯ dun-cdma) [panu]: "
+
+#: ../cli/src/connections.c:3029
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "பிழை: 'bt-type': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© bluetooth வகையலà¯à®².\n"
+
+#. Ask for optional 'vlan' arguments.
+#: ../cli/src/connections.c:3048
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 4 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
+
+#: ../cli/src/connections.c:3068
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN கொடிகள௠(<0-7>) [none]: "
+
+#: ../cli/src/connections.c:3079
+msgid "Ingress priority maps [none]: "
+msgstr "இனà¯à®•à®¿à®°à¯†à®¸à¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ வரைபடஙà¯à®•à®³à¯ [none]: "
+
+#: ../cli/src/connections.c:3090
+msgid "Egress priority maps [none]: "
+msgstr "எனà¯à®•à®¿à®°à¯†à®¸à¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ வரைபடஙà¯à®•à®³à¯ [none]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:3116
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "'bond' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
+
+#: ../cli/src/connections.c:3126
+msgid "Bonding mode [balance-rr]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à®²à¯ பயனà¯à®®à¯à®±à¯ˆ [balance-rr]: "
+
+#: ../cli/src/connections.c:3142
+msgid "Bonding primary interface [none]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ à®®à¯à®¤à®²à¯ நிலை இடைமà¯à®•à®®à¯ [none]: "
+
+#: ../cli/src/connections.c:3145
+#, c-format
+#| msgid "'%s' is not a valid interface name"
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "பிழை: 'primary': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®•à®ªà¯ பெயரலà¯à®².\n"
+
+#: ../cli/src/connections.c:3153
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ (miimon அலà¯à®²à®¤à¯ arp) [miimon]: "
+
+#: ../cli/src/connections.c:3158
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"பிழை: '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆà®¯à®²à¯à®²; '%s' அலà¯à®²à®¤à¯ '%s' à®à®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
+
+#: ../cli/src/connections.c:3167
+msgid "Bonding miimon [100]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ miimon [100]: "
+
+#: ../cli/src/connections.c:3170
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "பிழை: 'miimon': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <0-%u>.\n"
+
+#: ../cli/src/connections.c:3178
+msgid "Bonding downdelay [0]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ downdelay [0]: "
+
+#: ../cli/src/connections.c:3181
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "பிழை: 'downdelay': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <0-%u>.\n"
+
+#: ../cli/src/connections.c:3189
+msgid "Bonding updelay [0]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ updelay [0]: "
+
+#: ../cli/src/connections.c:3192
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "பிழை: 'updelay': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <0-%u>.\n"
+
+#: ../cli/src/connections.c:3201
+msgid "Bonding arp-interval [0]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ arp-interval [0]: "
+
+#: ../cli/src/connections.c:3204
+#, c-format
+#| msgid "Error: 'general' command '%s' is not valid."
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "பிழை: 'arp-interval': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <0-%u>.\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3212
+msgid "Bonding arp-ip-target [none]: "
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ arp-ip-target [none]: "
+
+#. Ask for optional 'team' arguments.
+#: ../cli/src/connections.c:3231
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "'%s' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
+
+#: ../cli/src/connections.c:3240
+#| msgid "The IP configuration is no longer valid"
+msgid "Team JSON configuration [none]: "
+msgstr "அணி JSON அமைவாகà¯à®•à®®à¯ [none]: "
+
+#: ../cli/src/connections.c:3259
+msgid "team"
+msgstr "அணி"
+
+#: ../cli/src/connections.c:3265
+msgid "team-slave"
+msgstr "team-slave"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3279
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "'bridge' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 6 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
+
+#: ../cli/src/connections.c:3289
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP ஠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3293
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: 'stp': '%s'.\n"
+msgstr "பிழை: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3301
+msgid "STP priority [128]: "
+msgstr "STP à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ [128]: "
+
+#: ../cli/src/connections.c:3305
+#, c-format
+#| msgid "Error: 'radio' command '%s' is not valid."
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "பிழை: 'priority': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <0-%d>.\n"
+
+#: ../cli/src/connections.c:3313
+msgid "Forward delay [15]: "
+msgstr "பகிரà¯à®¤à®²à¯ தாமதம௠[15]: "
+
+#: ../cli/src/connections.c:3317
+#, c-format
+#| msgid "Error: 'radio' command '%s' is not valid."
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "பிழை: 'forward-delay': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <2-30>.\n"
+
+#: ../cli/src/connections.c:3326
+msgid "Hello time [2]: "
+msgstr "ஹலோ நேரம௠[2]: "
+
+#: ../cli/src/connections.c:3330
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "பிழை: 'hello-time': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <1-10>.\n"
+
+#: ../cli/src/connections.c:3338
+msgid "Max age [20]: "
+msgstr "அதிகபடà¯à®š வயத௠[20]: "
+
+#: ../cli/src/connections.c:3342
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "பிழை: 'max-age': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <6-40>.\n"
+
+#: ../cli/src/connections.c:3350
+msgid "MAC address ageing time [300]: "
+msgstr "MAC à®®à¯à®•à®µà®°à®¿ வயதாகà¯à®®à¯ காலம௠[300]: "
+
+#: ../cli/src/connections.c:3354
+#, c-format
+#| msgid "Error: 'general' command '%s' is not valid."
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "பிழை: 'ageing-time': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <0-1000000>.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3375
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "'bridge-slave' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 3 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
+
+#: ../cli/src/connections.c:3384
+msgid "Bridge port priority [32]: "
+msgstr "பிரிடà¯à®œà¯ à®®à¯à®©à¯ˆà®¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ [32]: "
+
+#: ../cli/src/connections.c:3397
+msgid "Bridge port STP path cost [100]: "
+msgstr "பிரிடà¯à®œà¯ à®®à¯à®©à¯ˆà®¯ STP பாதை செலவ௠[100]: "
+
+#: ../cli/src/connections.c:3411
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "ஹேரà¯à®ªà®¿à®©à¯ (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3415
+#, c-format
+#| msgid "Error: 'show active': %s"
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "பிழை: 'hairpin': '%s'.\n"
+
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:3433
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "'VPN' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3457
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "'OLPC Mesh' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 2 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
+
+#: ../cli/src/connections.c:3466
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC Mesh சேனல௠[1]: "
+
+#: ../cli/src/connections.c:3469
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "பிழை: 'channel': '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² <1-13>.\n"
+
+#: ../cli/src/connections.c:3477
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC à®®à¯à®•à®µà®°à®¿ [none]: "
+
+#: ../cli/src/connections.c:3525
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 à®®à¯à®•à®µà®°à®¿ (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3527
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 à®®à¯à®•à®µà®°à®¿ (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3545
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " à®®à¯à®•à®µà®°à®¿ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: %s %s\n"
+
+#: ../cli/src/connections.c:3547
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: à®®à¯à®•à®µà®°à®¿ à®à®±à¯à®•à®©à®µà¯‡ உளà¯à®³à®¤à¯: %s %s\n"
+
+#: ../cli/src/connections.c:3549
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: கடைசியில௠உளà¯à®³ பà¯à®°à®¿à®¯à®¾à®¤à®µà®±à¯à®±à¯ˆà®ªà¯ பà¯à®±à®•à¯à®•à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯: '%s'\n"
+
+#: ../cli/src/connections.c:3551 ../cli/src/connections.c:4400
+#: ../cli/src/connections.c:4455 ../cli/src/connections.c:4854
+#: ../cli/src/connections.c:4864
+#| msgid "Error: %s"
+msgid "Error: "
+msgstr "பிழை: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3569
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "IP à®®à¯à®•à®µà®°à®¿à®•à®³à¯ˆà®šà¯ சேரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:3575
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "à®®à¯à®•à®µà®°à®¿à®•à®³à¯ˆà®šà¯ சேரà¯à®•à¯à®•à¯à®®à¯ செயலை à®®à¯à®Ÿà®¿à®•à¯à®• <Enter> à® à®…à®´à¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
+
+#: ../cli/src/connections.c:3721
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "பிழை: 'p-key' இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 'parent': செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®¾à®• இலà¯à®²à®¾à®®à®²à¯ போகà¯à®®à¯."
+
+#: ../cli/src/connections.c:3777 ../cli/src/connections.c:4770
+#| msgid "SSID"
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3780 ../cli/src/connections.c:4773
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'ssid' is required."
+msgstr "பிழை: 'ssid' தேவை."
+
+#: ../cli/src/connections.c:3844
+#| msgid "WiMAX NSP list"
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP பெயரà¯: "
+
+#: ../cli/src/connections.c:3847
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'nsp' is required."
+msgstr "பிழை: 'nsp' தேவை."
+
+#: ../cli/src/connections.c:3902
+msgid "PPPoE username: "
+msgstr "PPPoE பயனரà¯à®ªà¯†à®¯à®°à¯: "
+
+#: ../cli/src/connections.c:3905
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'username' is required."
+msgstr "பிழை: 'username' தேவை."
+
+#: ../cli/src/connections.c:3976
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3979
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'apn' is required."
+msgstr "பிழை: 'apn' தேவை."
+
+#: ../cli/src/connections.c:4038
+msgid "Bluetooth device address: "
+msgstr "Bluetooth சாதன à®®à¯à®•à®µà®°à®¿: "
+
+#: ../cli/src/connections.c:4041
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'addr' is required."
+msgstr "பிழை: 'addr' தேவை."
+
+#: ../cli/src/connections.c:4084
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr ""
+"பிழை: 'bt-type': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; [%s, %s (%s), %s] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+
+#: ../cli/src/connections.c:4129
+#| msgid "no device found for connection '%s'"
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN தாய௠சாதனம௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ UUID: "
+
+#: ../cli/src/connections.c:4132
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'dev' is required."
+msgstr "பிழை: 'dev' தேவை."
+
+#: ../cli/src/connections.c:4136
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:4139
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'id' is required."
+msgstr "பிழை: 'id' தேவை."
+
+#: ../cli/src/connections.c:4145
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "பிழை: 'id': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <0-4095> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+
+#: ../cli/src/connections.c:4155
+#, c-format
+#| msgid "'%s' is neither an UUID nor an interface name"
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr ""
+"பிழை: 'dev': '%s' எனà¯à®ªà®¤à¯ UUID, இடைமà¯à®•à®ªà¯ பெயரà¯, MAC ஆகியவறà¯à®±à®¿à®²à¯ எதà¯à®µà¯à®®à®²à¯à®²."
+
+#: ../cli/src/connections.c:4290
+#, c-format
+#| msgid "Error: 'show active': %s"
+msgid "Error: 'mode': %s."
+msgstr "பிழை: 'mode': %s."
+
+#: ../cli/src/connections.c:4299
+#, c-format
+#| msgid "'%s' is not a valid interface name"
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "பிழை: 'primary': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®•à®ªà¯ பெயரலà¯à®²."
+
+#: ../cli/src/connections.c:4342
+msgid "Bond master: "
+msgstr "பிணைபà¯à®ªà¯ பிரதானமà¯: "
+
+#: ../cli/src/connections.c:4345 ../cli/src/connections.c:4437
+#: ../cli/src/connections.c:4624
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'master' is required."
+msgstr "பிழை: 'master' தேவை."
+
+#: ../cli/src/connections.c:4350 ../cli/src/connections.c:4447
+#: ../cli/src/connections.c:4635
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: 'type' தறà¯à®ªà¯‹à®¤à¯ பà¯à®±à®•à¯à®•à®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯. தறà¯à®ªà¯‹à®¤à¯ நாஙà¯à®•à®³à¯ ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ "
+"ஸà¯à®²à¯‡à®µà¯à®•à®³à¯ˆ மடà¯à®Ÿà¯à®®à¯‡ ஆதரிகà¯à®•à®¿à®±à¯‹à®®à¯.\n"
+
+#: ../cli/src/connections.c:4434
+msgid "Team master: "
+msgstr "கà¯à®´à¯ மாஸà¯à®Ÿà¯à®Ÿà®°à¯: "
+
+#: ../cli/src/connections.c:4537
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: 'stp': %s."
+msgstr "பிழை: 'stp': %s."
+
+#: ../cli/src/connections.c:4621
+msgid "Bridge master: "
+msgstr "பிரிடà¯à®œà¯ மாஸà¯à®Ÿà¯à®Ÿà®°à¯: "
+
+#: ../cli/src/connections.c:4629
+#, c-format
+#| msgid "'%s' is neither an UUID nor an interface name"
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "பிழை: 'master': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© UUID அலà¯à®², இடைமà¯à®•à®®à¯à®®à¯ அலà¯à®²."
+
+#: ../cli/src/connections.c:4662
+#, c-format
+#| msgid "Error: 'show active': %s"
+msgid "Error: 'hairpin': %s."
+msgstr "பிழை: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4714
+msgid "VPN type: "
+msgstr "VPN வகை: "
+
+#: ../cli/src/connections.c:4717
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'vpn-type' is required."
+msgstr "பிழை: 'vpn-type' தேவை."
+
+#: ../cli/src/connections.c:4728
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: 'vpn-type': %s."
+msgstr "பிழை: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4786
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "பிழை: 'channel': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <1-13> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+
+#: ../cli/src/connections.c:4821
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: '%s' is not a valid connection type."
+msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இணைபà¯à®ªà¯ வகையலà¯à®²."
+
+#: ../cli/src/connections.c:4919
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "பிழை: '%s' இணைபà¯à®ªà¯ˆà®šà¯ சேரà¯à®ªà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: (%d) %s"
+
+#: ../cli/src/connections.c:4923
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "இணைபà¯à®ªà¯ '%s' (%s) வெறà¯à®±à®¿à®•à®°à®®à®¾à®•à®šà¯ சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
+
+#: ../cli/src/connections.c:4969
+#| msgid "Connection list"
+msgid "Connection type: "
+msgstr "இணைபà¯à®ªà¯ வகை: "
+
+#: ../cli/src/connections.c:4973
+#, c-format
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'type' argument is required."
+msgstr "பிழை: 'type' மதிபà¯à®ªà¯à®°à¯ தேவை."
+
+#: ../cli/src/connections.c:4979
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: invalid connection type; %s."
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ இணைபà¯à®ªà¯ வகை; %s."
+
+#: ../cli/src/connections.c:4988
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: 'autoconnect': %s."
+msgstr "பிழை: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:5004
+msgid "Interface name [*]: "
+msgstr "இடைமà¯à®•à®ªà¯ பெயர௠[*]: "
+
+#: ../cli/src/connections.c:5009
+#, c-format
+#| msgid "Error: value for '%s' argument is required."
+msgid "Error: 'ifname' argument is required."
+msgstr "பிழை: 'ifname' மதிபà¯à®ªà¯à®°à¯ தேவை."
+
+#: ../cli/src/connections.c:5016
+#, c-format
+#| msgid "'%s' is not a valid interface name"
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr ""
+"பிழை: 'ifname': '%s' எனà¯à®ªà®¤à¯ ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®•à®®à¯ அலà¯à®² '*' உம௠அலà¯à®²."
+
+#: ../cli/src/connections.c:5835
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' அமைவ௠மதிபà¯à®ªà¯à®•à®³à¯]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:5916
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: ஒர௠அமைவ௠அலà¯à®²à®¤à¯ பணà¯à®ªà¯à®•à¯à®•à¯à®šà¯ செலà¯\n"
+"remove <setting>[.<prop>] | <prop> :: அமைவை நீகà¯à®•à¯ அலà¯à®²à®¤à¯ பணà¯à®ªà¯ˆ மீடà¯à®Ÿà®®à¯ˆ "
+"value\n"
+"set [<setting>.<prop> <value>] :: பணà¯à®ªà¯ மதிபà¯à®ªà¯ˆ அமை\n"
+"describe [<setting>.<prop>] :: பணà¯à®ªà¯ˆ விவரி\n"
+"print [all] :: இணைபà¯à®ªà¯ˆ அசà¯à®šà®¿à®Ÿà¯\n"
+"verify [all] :: இணைபà¯à®ªà¯ˆ சரிபாரà¯\n"
+"save :: இணைபà¯à®ªà¯ˆà®šà¯ சேமி\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯\n"
+"back :: ஒர௠நிலை மேலே செல௠(பினà¯)\n"
+"help/? [<command>] :: இநà¯à®¤ உதவியை அசà¯à®šà®¿à®Ÿà¯\n"
+"nmcli <conf-option> <value> :: nmcli அமைவாகà¯à®•à®®à¯\n"
+"quit :: nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯\n"
+
+#: ../cli/src/connections.c:5943
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: திரà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•à®¾à®© அமைவà¯/பணà¯à®ªà¯à®•à¯à®•à¯à®šà¯ செலà¯\n"
+"\n"
+"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ திரà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•à®¾à®• ஒர௠அமைவ௠அலà¯à®²à®¤à¯ பணà¯à®ªà¯à®•à¯à®•à¯à®šà¯ செலà¯à®²à¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5950
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: அமைவை நீகà¯à®•à¯ அலà¯à®²à®¤à¯ பணà¯à®ªà¯ˆ மீடà¯à®Ÿà®®à¯ˆ\n"
+"\n"
+"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ இணைபà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ à®®à¯à®´à¯ அமைவையà¯à®®à¯ நீகà¯à®•à¯à®®à¯ அலà¯à®²à®¤à¯ பணà¯à®ªà¯ "
+"வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯\n"
+"அநà¯à®¤à®ªà¯ பணà¯à®ªà¯ˆ அதன௠மà¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯à®•à¯à®•à¯ மீடà¯à®Ÿà®®à¯ˆà®•à¯à®•à¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5957
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: பணà¯à®ªà¯ மதிபà¯à®ªà¯ˆ அமை\n"
+"\n"
+"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ பணà¯à®ªà®¿à®©à¯ மதிபà¯à®ªà¯ˆ அமைகà¯à®•à¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: nmcli> set con.id My connection\n"
+
+#: ../cli/src/connections.c:5962
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: பணà¯à®ªà¯ˆ விவரி\n"
+"\n"
+"இத௠பணà¯à®ªà®¿à®©à¯ விளகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯. அனைதà¯à®¤à¯ NM அமைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ பணà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ காண "
+"nm-settings(5) கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®²à®¾à®®à¯.\n"
+
+#: ../cli/src/connections.c:5967
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ மதிபà¯à®ªà¯à®•à®³à¯ˆ அசà¯à®šà®¿à®Ÿà¯\n"
+"\n"
+"தறà¯à®ªà¯‹à®¤à¯ˆà®¯ பணà¯à®ªà¯ அலà¯à®²à®¤à¯ à®®à¯à®´à¯ இணைபà¯à®ªà¯ˆà®¯à¯à®®à¯ காணà¯à®ªà®¿à®•à¯à®•à¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5972
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà®¿à®©à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¤à¯à®¤à®©à¯à®®à¯ˆà®¯à¯ˆ சரிபாரà¯\n"
+"\n"
+"ஒர௠அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®¾ எனà¯à®±à¯à®®à¯ அதை பிறக௠சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à®¾ "
+"எனà¯à®±à¯à®®à¯ சரிபாரà¯à®•à¯à®•à¯à®®à¯. செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ மதிபà¯à®ªà¯à®•à®³à¯ இரà¯à®¨à¯à®¤à®¾à®²à¯ பிழை மூலம௠"
+"தெரிவிகà¯à®•à¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5979
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: இணைபà¯à®ªà¯ˆà®šà¯ சேமி\n"
+"\n"
+"இணைபà¯à®ªà¯ˆ NetworkManager கà¯à®•à¯ அனà¯à®ªà¯à®ªà¯à®®à¯, NetworkManager அதைச௠சேமிகà¯à®•à¯à®®à¯.\n"
+
+#: ../cli/src/connections.c:5983
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯\n"
+"\n"
+"இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯.\n"
+"\n"
+"உளà¯à®³ விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯:\n"
+"<ifname> - இணைபà¯à®ªà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿ உளà¯à®³ சாதனமà¯\n"
+"/<ap>|<nsp> - AP (Wi-Fi) அலà¯à®²à®¤à¯ NSP (WiMAX) (<ifname> கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®¾à®¤ போத௠/ "
+"à® à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®• சேரà¯à®•à¯à®•à®µà¯à®®à¯)\n"
+
+#: ../cli/src/connections.c:5990 ../cli/src/connections.c:6140
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: மெனà¯à®µà®¿à®©à¯ மேல௠நிலைகà¯à®•à¯à®šà¯ செலà¯\n"
+"\n"
+
+#: ../cli/src/connections.c:5993
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli கடà¯à®Ÿà®³à¯ˆà®•à®³à¯à®•à¯à®•à®¾à®© உதவி\n"
+"\n"
+
+#: ../cli/src/connections.c:5996
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli அமைவாகà¯à®•à®®à¯\n"
+"\n"
+"nmcli ஠அமைவாகà¯à®•à®®à¯ செயà¯à®¯à¯à®®à¯. பினà¯à®µà®°à¯à®®à¯ விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯ உளà¯à®³à®©:\n"
+"status-line yes | no [à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯: no]\n"
+"save-confirmation yes | no [à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯: yes]\n"
+"prompt-color <0-8> [à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:6016 ../cli/src/connections.c:6146
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯\n"
+"\n"
+"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆ இயகà¯à®•à®¿à®©à®¾à®²à¯ nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯à®µà¯€à®°à¯à®•à®³à¯. திரà¯à®¤à¯à®¤à®¤à¯à®¤à®¿à®²à¯ "
+"உளà¯à®³ ஒர௠இணைபà¯à®ªà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯, செயலை உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à®¾à®±à¯ பயனரிடம௠"
+"கேடà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+
+#: ../cli/src/connections.c:6021 ../cli/src/connections.c:6151
+#: ../cli/src/connections.c:6521 ../cli/src/connections.c:7370
+#, c-format
+#| msgid "Unknown log domain '%s'"
+msgid "Unknown command: '%s'\n"
+msgstr "தெரியாத கடà¯à®Ÿà®³à¯ˆ: '%s'\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6087
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Property menu ]---\n"
+"set [<value>] :: பà¯à®¤à®¿à®¯ மதிபà¯à®ªà¯ˆ அமை\n"
+"add [<value>] :: பணà¯à®ªà¯à®•à¯à®•à¯ ஒர௠பà¯à®¤à®¿à®¯ விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®šà¯ சேரà¯\n"
+"change :: நடபà¯à®ªà¯ மதிபà¯à®ªà¯ˆ மாறà¯à®±à¯\n"
+"remove [<index> | <option>] :: மதிபà¯à®ªà¯ˆ அழி\n"
+"describe :: பணà¯à®ªà¯ˆ விளகà¯à®•à¯\n"
+"print [setting | connection] :: பணà¯à®ªà¯ˆ அசà¯à®šà®¿à®Ÿà¯ (அமைவà¯/இணைபà¯à®ªà¯) value(s)\n"
+"back :: மேல௠நிலைகà¯à®•à¯à®šà¯ செலà¯\n"
+"help/? [<command>] :: இநà¯à®¤ உதவி அலà¯à®²à®¤à¯ கடà¯à®Ÿà®³à¯ˆ விளகà¯à®•à®¤à¯à®¤à¯ˆ "
+"அசà¯à®šà®¿à®Ÿà¯\n"
+"quit :: nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯\n"
+
+#: ../cli/src/connections.c:6112
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: பà¯à®¤à®¿à®¯ மதிபà¯à®ªà¯ˆ அமை\n"
+"\n"
+"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ இநà¯à®¤ மதிபà¯à®ªà¯à®•à¯à®•à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ <value> ஠அமைகà¯à®•à¯à®®à¯\n"
+
+#: ../cli/src/connections.c:6116
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: பணà¯à®ªà¯à®•à¯à®•à¯ பà¯à®¤à®¿à®¯ விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®šà¯ சேரà¯\n"
+"\n"
+"பணà¯à®ªà®¾à®©à®¤à¯ à®’à®°à¯à®•à®©à¯à®Ÿà¯†à®¯à¯à®©à®°à¯ வகையின௠பணà¯à®ªà®¾à®• இரà¯à®¨à¯à®¤à®¾à®²à¯, இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ இநà¯à®¤à®ªà¯ "
+"பணà¯à®ªà¯à®•à¯à®•à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ <value> à®à®šà¯ சேரà¯à®•à¯à®•à¯à®®à¯. à®’à®±à¯à®±à¯ˆ மதிபà¯à®ªà¯à®³à¯à®³ பணà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯, "
+"இத௠மதிபà¯à®ªà¯ˆ மாறà¯à®±à¯à®®à¯ ('set' à®à®ªà¯ போலவே).\n"
+
+#: ../cli/src/connections.c:6122
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: நடபà¯à®ªà¯ மதிபà¯à®ªà¯ˆ மாறà¯à®±à¯\n"
+"\n"
+"நடபà¯à®ªà¯ மதிபà¯à®ªà¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯, அபà¯à®ªà¯‹à®¤à¯ மதிபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯.\n"
+
+#: ../cli/src/connections.c:6126
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: மதிபà¯à®ªà¯ˆ அழி\n"
+"\n"
+"பணà¯à®ªà®¿à®©à¯ மதிபà¯à®ªà¯ˆ நீகà¯à®•à¯à®®à¯ (அதன௠மà¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯à®•à¯à®•à¯ அமைகà¯à®•à¯à®®à¯).\n"
+
+#: ../cli/src/connections.c:6130
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: பணà¯à®ªà¯ˆ விவரி\n"
+"\n"
+"இத௠பணà¯à®ªà®¿à®©à¯ விளகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯. அனைதà¯à®¤à¯ NM அமைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ பணà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ காண "
+"nm-settings(5) கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®²à®¾à®®à¯.\n"
+
+#: ../cli/src/connections.c:6135
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"அசà¯à®šà®¿à®Ÿà¯ [property|setting|connection] :: பணà¯à®ªà¯ˆ அசà¯à®šà®¿à®Ÿà¯ (அமைவà¯, இணைபà¯à®ªà¯) "
+"மதிபà¯à®ªà¯à®•à®³à¯\n"
+"\n"
+"பணà¯à®ªà®¿à®©à¯ மதிபà¯à®ªà¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯. ஒர௠மதிபà¯à®ªà¯à®°à¯à®µà¯ˆ வழஙà¯à®•à¯à®µà®¤à®©à¯ மூலம௠நீஙà¯à®•à®³à¯ ஒர௠"
+"அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà®¿à®©à¯ à®®à¯à®´à¯ மதிபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ காணà¯à®ªà®¿à®•à¯à®•à®µà¯à®®à¯ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯.\n"
+
+#: ../cli/src/connections.c:6143
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli கடà¯à®Ÿà®³à¯ˆà®•à®³à¯à®•à¯à®•à®¾à®© உதவி\n"
+"\n"
+
+#: ../cli/src/connections.c:6230
+#, c-format
+#| msgid "Error: Connection activation failed."
+msgid "Error: Connection activation failed.\n"
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿.\n"
+
+#: ../cli/src/connections.c:6301
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "பிழை: '%s' அமைவ௠மிக அவசியமானதà¯, அதை நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6319
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+
+#: ../cli/src/connections.c:6379
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ மறà¯à®±à¯Šà®°à¯ கிளையனà¯à®Ÿà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ அகறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. அதை மீடà¯à®• "
+"பிரதான மெனà¯à®µà®¿à®²à¯ 'save' என தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®²à®¾à®®à¯.\n"
+
+#: ../cli/src/connections.c:6400 ../cli/src/connections.c:6823
+#: ../cli/src/connections.c:6881
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' மதிபà¯à®ªà¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯: "
+
+#: ../cli/src/connections.c:6417 ../cli/src/connections.c:6436
+#: ../cli/src/connections.c:6829 ../cli/src/connections.c:6888
+#, c-format
+#| msgid "requires setting '%s' property"
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "பிழை: '%s' பணà¯à®ªà¯ˆ அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s\n"
+
+#: ../cli/src/connections.c:6429
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' மதிபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯: "
+
+#: ../cli/src/connections.c:6458
+#, c-format
+#| msgid "Error: %s"
+msgid "Error: %s\n"
+msgstr "பிழை: %s\n"
+
+#: ../cli/src/connections.c:6464 ../cli/src/connections.c:6967
+#: ../cli/src/connections.c:7008
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "பிழை: '%s' இன௠மதிபà¯à®ªà¯ˆ நீகà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s\n"
+
+#: ../cli/src/connections.c:6485
+#, c-format
+#| msgid "Unknown parameter: %s\n"
+msgid "Unknown command argument: '%s'\n"
+msgstr "தெரியாத கடà¯à®Ÿà®³à¯ˆ மதிபà¯à®ªà¯à®°à¯: '%s'\n"
+
+#: ../cli/src/connections.c:6505 ../cli/src/connections.c:7358
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr "இணைபà¯à®ªà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. நிசà¯à®šà®¯à®®à¯ வெளியேற வேணà¯à®Ÿà¯à®®à®¾? [y/n]\n"
+
+#: ../cli/src/connections.c:6617
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "கிடைகà¯à®•à¯à®®à¯ அமைவà¯à®•à®³à¯: %s\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid setting name; %s\n"
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ அமைவ௠பெயரà¯; %s\n"
+
+#: ../cli/src/connections.c:6643
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "கிடைகà¯à®•à¯à®®à¯ பணà¯à®ªà¯à®•à®³à¯: %s\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+#| msgid "Error: %s"
+msgid "Error: property %s\n"
+msgstr "பிழை: பணà¯à®ªà¯ %s\n"
+
+#: ../cli/src/connections.c:6692
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"'autoconnect=yes' கொணà¯à®Ÿ இணைபà¯à®ªà¯ˆà®šà¯ சேமிகà¯à®•à®¿à®±à®¤à¯. இதனால௠இணைபà¯à®ªà¯ உடனடியாக "
+"செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®•à¯à®•à¯‚டà¯à®®à¯.\n"
+"இரà¯à®ªà¯à®ªà®¿à®©à¯à®®à¯ சேமிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾? [yes] "
+
+#: ../cli/src/connections.c:6765
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "நீஙà¯à®•à®³à¯ பினà¯à®µà®°à¯à®®à¯ அமைவà¯à®•à®³à¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à®²à®¾à®®à¯: %s\n"
+
+#: ../cli/src/connections.c:6791
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ மறà¯à®±à¯Šà®°à¯ கிளையனà¯à®Ÿà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ அகறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. அதை மீடà¯à®• "
+"'save' என தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®²à®¾à®®à¯.\n"
+
+#: ../cli/src/connections.c:6821 ../cli/src/connections.c:6879
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' பணà¯à®ªà¯à®•à¯à®•à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ மதிபà¯à®ªà¯à®•à®³à¯: %s\n"
+
+#: ../cli/src/connections.c:6833 ../cli/src/connections.c:7050
+#, c-format
+#| msgid "Error: Connection deletion failed: %s"
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "பிழை: அமைவ௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ; செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®µà¯ˆ [%s]\n"
+
+#: ../cli/src/connections.c:6834
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"à®®à¯à®¤à®²à®¿à®²à¯ 'goto <setting>' அலà¯à®²à®¤à¯ 'set <setting>.<property>' à®à®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯\n"
+
+#: ../cli/src/connections.c:6849 ../cli/src/connections.c:6987
+#: ../cli/src/connections.c:7067
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ அமைவ௠மதிபà¯à®ªà¯à®°à¯ '%s'; செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®µà¯ˆ [%s]\n"
+
+#: ../cli/src/connections.c:6859
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "Error: missing setting for '%s' property\n"
+msgstr "பிழை: '%s' பணà¯à®ªà¯à®•à¯à®•à®¾à®© அமைவ௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯\n"
+
+#: ../cli/src/connections.c:6866
+#, c-format
+#| msgid "Error: invalid 'wimax' parameter: '%s'."
+msgid "Error: invalid property: %s\n"
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பணà¯à®ªà¯: %s\n"
+
+#: ../cli/src/connections.c:6915
+#, c-format
+#| msgid "Error: unknown connection: %s\n"
+msgid "Error: unknown setting '%s'\n"
+msgstr "பிழை: தெரியாத அமைவ௠'%s'\n"
+
+#: ../cli/src/connections.c:6928
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "நீஙà¯à®•à®³à¯ பினà¯à®µà®°à¯à®®à¯ அமைவà¯à®•à®³à¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à®²à®¾à®®à¯: %s\n"
+
+#: ../cli/src/connections.c:6972
+#, c-format
+#| msgid "Error: unknown argument '%s'."
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "பிழை: மதிபà¯à®ªà¯à®°à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ; செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®µà¯ˆ [%s]\n"
+
+#: ../cli/src/connections.c:6985
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "இணைபà¯à®ªà®¿à®²à¯ அமைவ௠'%s' இலà¯à®²à¯ˆ.\n"
+
+#: ../cli/src/connections.c:7026
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "பிழை: %s பணà¯à®ªà¯à®•à®³à¯, அத௠ஒர௠அமைவ௠பெயரà¯à®®à¯ அலà¯à®².\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"à®®à¯à®¤à®²à®¿à®²à¯ 'goto <setting>'அலà¯à®²à®¤à¯ 'describe <setting>.<property>' à®à®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯\n"
+
+#: ../cli/src/connections.c:7092
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பணà¯à®ªà¯: %s, செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© ஒர௠அமைவ௠பெயரà¯à®®à¯ அலà¯à®².\n"
+
+#: ../cli/src/connections.c:7116
+#, c-format
+#| msgid "'%s' security requires '%s' setting presence"
+msgid "Error: '%s' setting not present\n"
+msgstr "பிழை: '%s' அமைவ௠இலà¯à®²à¯ˆ\n"
+
+#: ../cli/src/connections.c:7119
+#, c-format
+#| msgid "Error: unknown connection: %s\n"
+msgid "Error: unknown setting: '%s'\n"
+msgstr "பிழை: தெரியாத அமைவà¯: '%s'\n"
+
+#: ../cli/src/connections.c:7135
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "அமைவ௠'%s' à®à®šà¯ சரிபாரà¯: %s\n"
+
+#: ../cli/src/connections.c:7142
+#, c-format
+#| msgid "User connections:\n"
+msgid "Verify connection: %s\n"
+msgstr "இணைபà¯à®ªà¯ˆ சரிபாரà¯: %s\n"
+
+#: ../cli/src/connections.c:7181
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "பிழை: '%s' (%s) இணைபà¯à®ªà¯ˆà®šà¯ சேமிபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: (%d) %s\n"
+
+#: ../cli/src/connections.c:7188
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "இணைபà¯à®ªà¯ '%s' (%s) வெறà¯à®±à®¿à®•à®°à®®à®¾à®•à®šà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
+
+#: ../cli/src/connections.c:7222
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: connection verification failed: %s\n"
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ சரிபாரà¯à®ªà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s\n"
+
+#: ../cli/src/connections.c:7223
+#| msgid "Unknown error"
+msgid "(unknown error)"
+msgstr "(தெரியாத பிழை)"
+
+#: ../cli/src/connections.c:7244
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr ""
+"பிழை: இணைபà¯à®ªà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. à®®à¯à®¤à®²à®¿à®²à¯ 'save' ஠தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®µà¯à®®à¯.\n"
+
+#: ../cli/src/connections.c:7248
+#, c-format
+#| msgid "Error: Connection deletion failed: %s"
+msgid "Error: connection is not valid: %s\n"
+msgstr "பிழை: இணைபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²: %s\n"
+
+#: ../cli/src/connections.c:7259
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s.\n"
+
+#: ../cli/src/connections.c:7269
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "பிழை: '%s' (%s) இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: (%d) %s\n"
+
+#: ../cli/src/connections.c:7275
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"இணைபà¯à®ªà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ˆà®•à¯ கணà¯à®•à®¾à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯ (தொடர à®à®¤à¯‡à®©à¯à®®à¯ ஒர௠விசையை "
+"à®…à®´à¯à®¤à¯à®¤à®µà¯à®®à¯)\n"
+
+#: ../cli/src/connections.c:7313
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: status-line: %s\n"
+msgstr "பிழை: நிலை-வரி: %s\n"
+
+#: ../cli/src/connections.c:7321
+#, c-format
+#| msgid "Error: unknown connection: %s\n"
+msgid "Error: save-confirmation: %s\n"
+msgstr "பிழை: சேமிதà¯à®¤à®²à¯-உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯: %s\n"
+
+#: ../cli/src/connections.c:7329
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "பிழை: நிற எண௠தவறà¯: '%s'; <0-8> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯\n"
+
+#: ../cli/src/connections.c:7341
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "நடபà¯à®ªà¯ nmcli அமைவாகà¯à®•à®®à¯:\n"
+
+#: ../cli/src/connections.c:7349
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ அமைவாகà¯à®• விரà¯à®ªà¯à®ªà®®à¯ '%s'; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ [%s]\n"
+
+#: ../cli/src/connections.c:7572
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> கடà¯à®Ÿà®³à¯ˆà®µà®°à®¿ திரà¯à®¤à¯à®¤ வசதி கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ. இநà¯à®¤ வசதியைச௠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ ஒர௠வரி "
+"திரà¯à®¤à¯à®¤ தரவகதà¯à®¤à¯ˆ நிறà¯à®µà¯à®µà®¤à¯ பறà¯à®±à®¿ சிநà¯à®¤à®¿à®•à¯à®•à®µà¯à®®à¯. <<<\n"
+"ஆதரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ தரவகஙà¯à®•à®³à¯:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7598
+#, c-format
+#| msgid "only one of '%s' and '%s' can be set"
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr ""
+"பிழை: 'id', uuid அலà¯à®²à®¤à¯ 'path' ஆகியவறà¯à®±à®¿à®²à¯ ஒனà¯à®±à¯ˆ மடà¯à®Ÿà¯à®®à¯‡ வழஙà¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à¯."
+
+#: ../cli/src/connections.c:7610 ../cli/src/connections.c:7807
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: Unknown connection '%s'."
+msgstr "பிழை: தெரியாத இணைபà¯à®ªà¯: '%s'."
+
+#: ../cli/src/connections.c:7625
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ இணைபà¯à®ªà¯ '%s' à®à®¤à¯ திரà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯; 'type' மதிபà¯à®ªà¯à®°à¯ "
+"பà¯à®±à®•à¯à®•à®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
+
+#: ../cli/src/connections.c:7628
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ இணைபà¯à®ªà¯ '%s' à®à®¤à¯ திரà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯; 'con-name' மதிபà¯à®ªà¯à®°à¯ "
+"பà¯à®±à®•à¯à®•à®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
+
+#: ../cli/src/connections.c:7642
+#, c-format
+#| msgid "Active connection state: %s\n"
+msgid "Valid connection types: %s\n"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இணைபà¯à®ªà¯ வகைகளà¯: %s\n"
+
+#: ../cli/src/connections.c:7644
+#, c-format
+#| msgid "Error: unknown connection: %s\n"
+msgid "Error: invalid connection type; %s\n"
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ இணைபà¯à®ªà¯ வகை; %s\n"
+
+#: ../cli/src/connections.c:7680
+#, c-format
+#| msgid "no active connection or device"
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli தொடரà¯à®ªà¯à®¤à¯à®¤à®¿à®±à®©à¯ கொணà¯à®Ÿ இணைபà¯à®ªà¯à®¤à¯ திரà¯à®¤à¯à®¤à®¿ |==="
+
+#: ../cli/src/connections.c:7683
+#, c-format
+#| msgid "no device found for connection '%s'"
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ '%s' இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯: '%s'"
+
+#: ../cli/src/connections.c:7685
+#, c-format
+#| msgid "Modify personal network connections"
+msgid "Adding a new '%s' connection"
+msgstr "பà¯à®¤à®¿à®¯ '%s' இணைபà¯à®ªà¯ˆà®šà¯ சேரà¯à®•à¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/connections.c:7687
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "கிடைகà¯à®•à¯à®®à¯ கடà¯à®Ÿà®³à¯ˆà®•à®³à¯ˆà®•à¯ காண 'help' அலà¯à®²à®¤à¯ '?' எனத௠தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®µà¯à®®à¯."
+
+#: ../cli/src/connections.c:7689
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"பணà¯à®ªà®¿à®©à¯ விரிவான விளகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ காண 'describe [<setting>.<prop>]' எனத௠தடà¯à®Ÿà®šà¯à®šà¯ "
+"செயà¯à®¯à®µà¯à®®à¯."
+
+#: ../cli/src/connections.c:7728
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "பிழை: இணைபà¯à®ªà¯ '%s' இல௠மாறà¯à®±à®®à¯ செயà¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: ('%d) %s"
+
+#: ../cli/src/connections.c:7734
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "இணைபà¯à®ªà¯ '%s' இல௠(%s) வெறà¯à®±à®¿à®•à®°à®®à®¾à®• மாறà¯à®±à®®à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
+
+#: ../cli/src/connections.c:7761
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: No arguments provided."
+msgstr "பிழை: மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:7785
+#, c-format
+#| msgid "Error: No connection specified."
+msgid "Error: connection ID is missing."
+msgstr "பிழை: இணைபà¯à®ªà¯ ID விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+
+#: ../cli/src/connections.c:7790
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "பிழை: <setting>.<property> மதிபà¯à®ªà¯à®°à¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+
+#: ../cli/src/connections.c:7813
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7828
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ அலà¯à®²à®¤à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤ அமைவ௠'%s': %s."
+
+#: ../cli/src/connections.c:7849
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid property '%s': %s."
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பணà¯à®ªà¯ '%s': %s."
+
+#: ../cli/src/connections.c:7855
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "பிழை: %s.%s இல௠மாறà¯à®±à®®à¯ செயà¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s."
+
+#: ../cli/src/connections.c:7885
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ நீகà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s"
+
+#: ../cli/src/connections.c:7956
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "பிழை: தெரியாத இணைபà¯à®ªà¯: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:7992
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "பிழை: தெரியாத இணைபà¯à®ªà¯à®•à®³à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯: %s."
+
+#: ../cli/src/connections.c:8063
+#, c-format
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not load file '%s'\n"
+msgstr "கோபà¯à®ªà¯ '%s' à® à®à®±à¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ\n"
+
+#: ../cli/src/connections.c:8190
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© 'connection' கடà¯à®Ÿà®³à¯ˆà®¯à®²à¯à®²."
+
+#: ../cli/src/connections.c:8259 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "பிழை: கணினி அமைவà¯à®•à®³à¯ˆ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:8269
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "பிழை: இணைபà¯à®ªà¯à®•à®³à¯ˆà®ªà¯ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: அமைவà¯à®•à®³à®¿à®©à¯ சேவை இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#. 3
+#. 16
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNECTION"
+
+#. 4
+#. 17
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+#| msgid "UUID"
+msgid "CON-UUID"
+msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUCT"
#. 4
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
#. 6
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:118
+#. 8
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "REASON"
-#. 10
-#: ../cli/src/devices.c:119
+#. 11
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:120
+#. 12
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:121
+#. 13
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:123
+#. 15
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#. 15
-#: ../cli/src/devices.c:124
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#. 0
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
#. 0
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:173
+#| msgid "SSID"
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:183
+#. 3
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:184
+#. 4
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:185
+#. 6
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:186 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:187
+#. 8
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:188
+#. 10
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:189
+#. 11
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:191 ../cli/src/devices.c:207
-msgid "ACTIVE"
-msgstr "ACTIVE"
+#. 14
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
#. 0
-#: ../cli/src/devices.c:219
+#. 5
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#. 0
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:228
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:244
-#, c-format
+#. 0
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 3
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-PROPERTIES"
+
+#. 10
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "CONNECTIONS"
+
+#: ../cli/src/devices.c:274
+#, c-format
+#| msgid ""
+#| "Usage: nmcli device { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { status | show | disconnect | wifi | wimax }\n"
+#| "\n"
+#| " COMMAND := { status | show | disconnect | wifi }\n"
+#| "\n"
+#| " status\n"
+#| "\n"
+#| " show [<ifname>]\n"
+#| "\n"
+#| " disconnect <ifname> [--nowait] [--timeout <timeout>]\n"
+#| "\n"
+#| " wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+#| "\n"
+#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
+#| "[ifname <ifname>] [bssid <BSSID>] [name <name>]\n"
+#| "\n"
+#| " [--private] [--nowait] [--timeout <timeout>]\n"
+#| "\n"
+#| " wifi rescan [[ifname] <ifname>]\n"
+#| "\n"
+#| " wimax [list [ifname <ifname>] [nsp <name>]]\n"
+#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Usage: nmcli device { COMMAND | help }\n"
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"கடà¯à®Ÿà®³à¯ˆ := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"கடà¯à®Ÿà®³à¯ˆ := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device status { help }\n"
+"\n"
+"அனைதà¯à®¤à¯ சாதனஙà¯à®•à®³à¯à®•à¯à®•à¯à®®à®¾à®© நிலையைக௠காணà¯à®ªà®¿.\n"
+"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà®¾à®• பினà¯à®µà®°à¯à®®à¯ நெடà¯à®µà®°à®¿à®šà¯ˆà®•à®³à¯ காடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯:\n"
+" DEVICE - இடைமà¯à®•à®ªà¯ பெயரà¯\n"
+" TYPE - சாதன வகை\n"
+" STATE - சாதன நிலை\n"
+" CONNECTION - சாதனதà¯à®¤à®¿à®²à¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³ இணைபà¯à®ªà¯ (இரà¯à®¨à¯à®¤à®¾à®²à¯)\n"
+"'--fields' பொத௠விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ போத௠நெடà¯à®µà®°à®¿à®šà¯ˆà®•à®³à¯ மாறலாமà¯. "
+"'status' "
+"எனà¯à®ªà®¤à¯\n"
+"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ கடà¯à®Ÿà®³à¯ˆà®¯à®¾à®•à¯à®®à¯, அத௠'nmcli device' ஆனத௠'nmcli device "
+"status' ஠அழைகà¯à®•à®¿à®±à®¤à¯ எனப௠பொரà¯à®³à¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-#: ../cli/src/devices.c:347
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [<ifname>]\n"
+"\n"
+"சாதனஙà¯à®•à®³à®¿à®©à¯ விவரஙà¯à®•à®³à¯ˆà®•à¯ காணà¯à®ªà®¿.\n"
+"கடà¯à®Ÿà®³à¯ˆ அனைதà¯à®¤à¯ சாதனஙà¯à®•à®³à¯à®•à¯à®•à®¾à®© அலà¯à®²à®¤à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ ஒர௠சாதனதà¯à®¤à®¿à®±à¯à®•à®¾à®© "
+"விவரஙà¯à®•à®³à¯ˆà®ªà¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := <ifname>\n"
+"\n"
+"சாதனதà¯à®¤à¯ˆ இணை.\n"
+"செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®•à¯à®•à¯‚டிய பொரà¯à®¤à¯à®¤à®®à®¾à®© இணைபà¯à®ªà¯ உளà¯à®³à®¤à®¾ எனக௠கணà¯à®Ÿà®±à®¿à®¯ NetworkManager "
+"à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à¯à®®à¯.\n"
+"தானாக இணைகà¯à®•à¯à®®à¯à®ªà®Ÿà®¿ அமைகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤ இணைபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ கணகà¯à®•à®¿à®²à¯ எடà¯à®¤à¯à®¤à¯à®•à¯à®•à¯Šà®³à¯à®³à¯à®®à¯.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := <ifname>\n"
+"\n"
+"சாதனதà¯à®¤à¯ˆ தà¯à®£à¯à®Ÿà®¿.\n"
+"கடà¯à®Ÿà®³à¯ˆ சாதனதà¯à®¤à¯ˆà®¤à¯ தà¯à®£à¯à®Ÿà®¿à®¤à¯à®¤à¯, பயனரத௠இடையீட௠இலà¯à®²à®¾à®®à®²à¯ எதிரà¯à®•à®¾à®²à®¤à¯à®¤à®¿à®²à¯ அசà¯à®šà®¾à®¤à®©\n"
+"இணைபà¯à®ªà¯à®•à®³à¯ தானாக செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ˆà®¯à¯à®®à¯ தடà¯à®•à¯à®•à¯à®®à¯.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Wi-Fi சாதனஙà¯à®•à®³à®¿à®²à¯ செயலைச௠செயà¯.\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"கிடைகà¯à®•à¯à®®à¯ Wi-Fi அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®•à®³à¯ˆà®ªà¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®®à¯. 'ifname' மறà¯à®±à¯à®®à¯ 'bssid' "
+"ஆகிய விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿\n"
+"ஒர௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ இடைமà¯à®•à®®à¯ அலà¯à®²à®¤à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ BSSID கà¯à®•à®¾à®© AP களைப௠படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®šà¯ "
+"செயà¯à®¯à®²à®¾à®®à¯.\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n "
+"SSID அலà¯à®²à®¤à¯ BSSID ஆல௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®®à¯ ஒர௠Wi-Fi பிணையதà¯à®¤à®¿à®±à¯à®•à¯ இணைகà¯à®•à¯à®®à¯ . இநà¯à®¤à®•à¯ "
+"கடà¯à®Ÿà®³à¯ˆ\n"
+"ஒர௠பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ உரà¯à®µà®¾à®•à¯à®•à®¿ அதை ஒர௠சாதனதà¯à®¤à®¿à®²à¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯. இத௠GUI "
+"கிளையனà¯à®Ÿà¯à®Ÿà®¿à®²à¯ SSID ஠சொடà¯à®•à¯à®•à¯à®µà®¤à®±à¯à®•à®¾à®© கடà¯à®Ÿà®³à¯ˆ வரி\n"
+"மாறà¯à®±à®¾à®•à¯à®®à¯. இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ எபà¯à®ªà¯‹à®¤à¯à®®à¯\n"
+"ஒர௠பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ உரà¯à®µà®¾à®•à¯à®•à¯à®®à¯, ஆகவே பà¯à®¤à®¿à®¯ Wi-Fi\n"
+"பிணையஙà¯à®•à®³à¯à®Ÿà®©à¯ இணைகà¯à®• பயனà¯à®ªà®Ÿà¯à®®à¯. பிணையதà¯à®¤à®¿à®±à¯à®•à®¾à®© இணைபà¯à®ªà¯ à®à®±à¯à®•à®©à®µà¯‡ இரà¯à®ªà¯à®ªà®¿à®©à¯, \n"
+"பினà¯à®µà®°à¯à®®à¯à®ªà®Ÿà®¿ à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ தனியமைபà¯à®ªà¯ˆà®•à¯ கொணà¯à®Ÿà¯à®µà®°à¯à®µà®¤à¯ நலà¯à®²à®¤à¯: nmcli con up id <"
+"name>. இபà¯à®ªà¯‹à®¤à¯\n"
+"open, WEP மறà¯à®±à¯à®®à¯ WPA-PSK பிணையஙà¯à®•à®³à¯à®•à¯à®•à¯ மடà¯à®Ÿà¯à®®à¯‡ ஆதரவà¯à®³à¯à®³à®¤à¯ எனà¯à®ªà®¤à¯ˆ நினைவில௠"
+"கொளà¯à®³à®µà¯à®®à¯. IP அமைவாகà¯à®•à®®à¯à®®à¯\n"
+"DHCP வழியாக பெறபà¯à®ªà®Ÿà¯à®µà®¤à®¾à®•à®µà¯‡ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := rescan [[ifname] <ifname>]\n"
+"\n"
+"கிடைகà¯à®•à¯à®®à¯ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®•à®³à¯ உளà¯à®³à®¤à®¾ என மீணà¯à®Ÿà¯à®®à¯ தேடி ஸà¯à®•à¯‡à®©à¯ செயà¯à®¯ "
+"NetworkManager à®à®•à¯ கோரà¯à®®à¯.\n"
+"NetworkManager அவà¯à®µà®ªà¯à®ªà¯‹à®¤à¯ Wi-Fi பிணையஙà¯à®•à®³à¯ உளà¯à®³à®¤à®¾ என ஸà¯à®•à¯‡à®©à¯ செயà¯à®¯à¯à®®à¯, ஆனால௠"
+"சில சமயமà¯\n"
+"கைமà¯à®±à¯ˆà®¯à®¾à®• ஸà¯à®•à¯‡à®©à¯ செயà¯à®¯à®¤à¯ தொடஙà¯à®•à¯à®µà®¤à¯ பயனà¯à®³à¯à®³à®¤à¯. இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ\n"
+"APகளைக௠காடà¯à®Ÿà®¾à®¤à¯, அதறà¯à®•à¯ 'nmcli device wifi list' à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX சாதனஙà¯à®•à®³à®¿à®²à¯ செயலைச௠செயà¯.\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"கிடைகà¯à®•à¯à®®à¯ WiMAX NSPகளைப௠படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯. 'ifname' மறà¯à®±à¯à®®à¯ 'nsp' விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯ˆà®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿\n"
+"ஒர௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ இடைமà¯à®•à®®à¯ அலà¯à®²à®¤à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ NSP கà¯à®•à®¾à®© பிணையஙà¯à®•à®³à¯ˆà®ªà¯ "
+"படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®²à®¾à®®à¯.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à®¾à®¤)"
-#: ../cli/src/devices.c:403
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:404
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:413
-msgid "Encrypted: "
-msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:418
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:420
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:422
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:425
-msgid "Enterprise "
-msgstr "எனà¯à®Ÿà®°à¯à®ªà®¿à®°à¯ˆà®šà®¸à¯"
-
-#: ../cli/src/devices.c:434
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:435
-msgid "Infrastructure"
-msgstr "அடிதà¯à®¤à®³à®®à¯"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "இலà¯à®²à®®à¯"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "கூடà¯à®Ÿà®¾à®³à®°à¯"
-#: ../cli/src/devices.c:477
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "ரோமிஙà¯"
-#: ../cli/src/devices.c:549
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "பிழை: 'dev list': %s"
-
-#: ../cli/src/devices.c:551
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "பிழை: 'dev list': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
-
-#: ../cli/src/devices.c:560
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "சாதன விவரஙà¯à®•à®³à¯"
-#: ../cli/src/devices.c:607 ../cli/src/devices.c:610 ../cli/src/devices.c:1086
-#: ../cli/src/utils.c:479
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "பிழை: 'device show': %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1474
msgid "(unknown)"
msgstr "(தெரியாத)"
-#: ../cli/src/devices.c:619
-msgid "not connected"
-msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-
-#: ../cli/src/devices.c:646
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "ஆன௠"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "ஆஃபà¯"
-#: ../cli/src/devices.c:928
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "பிழை: 'dev status': %s"
+msgid "Error: 'device status': %s"
+msgstr "பிழை: 'device status': %s"
-#: ../cli/src/devices.c:930
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "பிழை: 'dev status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
-
-#: ../cli/src/devices.c:953
+#. Add headers
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "சாதனஙà¯à®•à®³à®¿à®©à¯ நிலை"
-#: ../cli/src/devices.c:984
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "பிழை: '%s' விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+msgid "Error: invalid extra argument '%s'."
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ கூடà¯à®¤à®²à¯ மதிபà¯à®ªà¯à®°à¯ '%s'."
-#: ../cli/src/devices.c:1025 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1331 ../cli/src/devices.c:1978
+#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1422
+#: ../cli/src/devices.c:1557 ../cli/src/devices.c:1696
+#: ../cli/src/devices.c:2436
#, c-format
msgid "Error: Device '%s' not found."
msgstr "பிழை: சாதனம௠'%s' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1048
+#: ../cli/src/devices.c:1319
+#, c-format
+#| msgid "Success: Device '%s' successfully disconnected."
+msgid "Success: Device '%s' successfully activated."
+msgstr "வெறà¯à®±à®¿: சாதனம௠'%s' வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: Device activation failed: %s"
+msgstr "பிழை: சாதனதà¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+#| msgid "Device '%s' has been disconnected.\n"
+msgid "Device '%s' has been connected.\n"
+msgstr "சாதனம௠'%s' இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯.\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "இடைமà¯à®•à®®à¯: "
+
+#: ../cli/src/devices.c:1381 ../cli/src/devices.c:1390
+#: ../cli/src/devices.c:1516 ../cli/src/devices.c:1525
+#, c-format
+msgid "Error: No interface specified."
+msgstr "பிழை: இடைமà¯à®•à®™à¯à®•à®³à¯ எதà¯à®µà¯à®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "பிழை: கூடà¯à®¤à®²à¯ மதிபà¯à®ªà¯à®°à¯à®µà¯à®•à¯à®•à¯ அனà¯à®®à®¤à®¿à®¯à®¿à®²à¯à®²à¯ˆ: '%s'."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "வெறà¯à®±à®¿: சாதனம௠'%s' வெறà¯à®±à®¿à®•à®°à®®à®¾à®• தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/devices.c:1083
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "பிழை: சாதனம௠'%s' (%s) தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../cli/src/devices.c:1096
+#: ../cli/src/devices.c:1485
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "சாதனம௠'%s' தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
-#: ../cli/src/devices.c:1159
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "பிழை: iபேஸ௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯."
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi ஸà¯à®•à¯‡à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
-#: ../cli/src/devices.c:1289
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "பிழை: 'dev wifi': '%s'"
+msgid "Error: 'device wifi': %s"
+msgstr "பிழை: 'device wifi': %s"
-#: ../cli/src/devices.c:1291
-#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "பிழை: 'dev wifi': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
-
-#: ../cli/src/devices.c:1314
-msgid "WiFi scan list"
-msgstr "WiFi ஸà¯à®•à¯‡à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
-
-#: ../cli/src/devices.c:1351 ../cli/src/devices.c:1405
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "பிழை: '%s' எனà¯à®± bssis கொணà¯à®Ÿ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1368
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "பிழை: சாதனம௠'%s' ஒர௠WiFi சாதனம௠இலà¯à®²à¯ˆ."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "பிழை: '%s' சாதனம௠ஒர௠Wi-Fi சாதனமலà¯à®²."
-#: ../cli/src/devices.c:1436 ../cli/src/devices.c:1482
+#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
-msgstr "'%s' சாதனதà¯à®¤à®¿à®²à¯ '%s' எனà¯à®®à¯ UUID கொணà¯à®Ÿ இணைபà¯à®ªà¯ உரà¯à®µà®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
+msgstr ""
+"'%s' சாதனதà¯à®¤à®¿à®²à¯ '%s' எனà¯à®®à¯ UUID கொணà¯à®Ÿ இணைபà¯à®ªà¯ உரà¯à®µà®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ "
+"செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
-#: ../cli/src/devices.c:1441
+#: ../cli/src/devices.c:1829
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: (%d) %s."
-#: ../cli/src/devices.c:1466
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "பிழை: பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ சேரà¯à®•à¯à®•/செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: (%d) %s"
-#: ../cli/src/devices.c:1474
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "பிழை: பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ சேரà¯à®•à¯à®•/செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: தெரியாத பிழை"
-#: ../cli/src/devices.c:1618
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID அலà¯à®²à®¤à¯ BSSID: "
+
+#: ../cli/src/devices.c:2018
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "பிழை: SSID அலலà¯à®¤à¯ BSSID இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1641
+#: ../cli/src/devices.c:2042
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "பிழை: bssid அளவà¯à®°à¯ மதிபà¯à®ªà¯ '%s' ஒர௠சரியான BSSID அலà¯à®²."
-#: ../cli/src/devices.c:1665
+#: ../cli/src/devices.c:2066
#, c-format
-msgid "Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
msgstr ""
"பிழை: wep-key-type அளவà¯à®°à¯ மதிபà¯à®ªà¯ '%s' தவறானத௠'key' அலà¯à®²à®¤à¯ 'phrase' à®à®ªà¯ "
"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#: ../cli/src/devices.c:1705
+#: ../cli/src/devices.c:2086
+#, c-format
+#| msgid "Error: %s."
+msgid "Error: %s: %s."
+msgstr "பிழை: %s: %s."
+
+#: ../cli/src/devices.c:2101
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
-msgstr "பிழை: (%s) கà¯à®•à¯ இணைகà¯à®• வேணà¯à®Ÿà®¿à®¯ BSSID bssid அளவà¯à®°à¯à®µà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ (%s) வேறà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+msgstr ""
+"பிழை: (%s) கà¯à®•à¯ இணைகà¯à®• வேணà¯à®Ÿà®¿à®¯ BSSID bssid அளவà¯à®°à¯à®µà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ (%s) "
+"வேறà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/devices.c:1711
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "பிழை: அளவà¯à®°à¯ '%s' SSID ஆகவà¯à®®à¯ இலà¯à®²à¯ˆ BSSID ஆகவà¯à®®à¯ இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1740
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "பிழை: '%s' சாதனம௠ஒர௠Wi-Fi சாதனமலà¯à®²."
-
-#: ../cli/src/devices.c:1742
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "பிழை: Wi-Fi சாதனம௠இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1760
+#: ../cli/src/devices.c:2151
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "பிழை: '%s' எனà¯à®± SSID கொணà¯à®Ÿ பிணையம௠இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1762
+#: ../cli/src/devices.c:2153
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "பிழை: '%s' எனà¯à®± BSSID கொணà¯à®Ÿ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1860
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "பிழை: 'dev wifi' கடà¯à®Ÿà®³à¯ˆ '%s' ஆனத௠தவறானதà¯."
-
-#: ../cli/src/devices.c:1936
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Error: 'dev wimax': %s"
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯:"
-#: ../cli/src/devices.c:1938
+#: ../cli/src/devices.c:2321
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "பிழை: 'dev wimax': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "பிழை: 'device wifi' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
-#: ../cli/src/devices.c:1961
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP படà¯à®Ÿà®¿à®¯à®²à¯"
-#: ../cli/src/devices.c:1998
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "பிழை: 'device wimax': %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "பிழை: '%s' எனà¯à®± பெயர௠கொணà¯à®Ÿ NSP இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2009
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "பிழை: சாதனம௠'%s' ஒர௠WiMAX சாதனம௠இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2040
+#: ../cli/src/devices.c:2510
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "பிழை: '%s' எனà¯à®± nsp கொணà¯à®Ÿ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2067
+#: ../cli/src/devices.c:2542
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "பிழை: '%s' எனà¯à®± 'dev wimax' கடà¯à®Ÿà®³à¯ˆ தவறானதà¯."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "பிழை: 'device wimax' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
-#: ../cli/src/devices.c:2120
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "பிழை: 'dev' கடà¯à®Ÿà®³à¯ˆ '%s' தவறானதà¯."
@@ -1446,237 +3797,580 @@ msgstr "VERSION"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "தà¯à®µà®•à¯à®•à®®à¯"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+#| msgid "CONNECTION"
+msgid "CONNECTIVITY"
+msgstr "இணைபà¯à®ªà¯à®¤à¯à®¤à®¿à®±à®©à¯"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "NETWORKING"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "PERMISSION"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:77
-#, c-format
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "LEVEL"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMAINS"
+
+#: ../cli/src/network-manager.c:95
+#, c-format
+#| msgid ""
+#| "Usage: nmcli general { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { status | permissions | logging }\n"
+#| "\n"
+#| " status\n"
+#| "\n"
+#| " permissions\n"
+#| "\n"
+#| " logging [level <log level>] [domains <log domains>]\n"
+#| "\n"
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"பயனà¯à®ªà®¾à®Ÿà¯: nmcli nm { COMMAND | help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli general status { help }\n"
+"\n"
+"NetworkManager இன௠ஒடà¯à®Ÿà¯à®®à¯Šà®¤à¯à®¤ நிலையைக௠காடà¯à®Ÿà¯.\n"
+"'status' எனà¯à®ªà®¤à¯‡ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ செயலà¯, அதாவத௠'nmcli gen' ஆனத௠'nmcli gen "
+"status' ஠அழைகà¯à®•à®¿à®±à®¤à¯ எனப௠பொரà¯à®³à¯\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [<hostname>]\n"
+"\n"
+"கணினி வழஙà¯à®•à®¿à®ªà¯†à®¯à®°à¯ˆ நிரநà¯à®¤à®°à®®à®¾à®•à®ªà¯ பெறà¯à®¤à®²à¯ அலà¯à®²à®¤à¯ மாறà¯à®±à¯à®¤à®²à¯.\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, இத௠தறà¯à®ªà¯‹à®¤à¯ˆà®¯ வழஙà¯à®•à®¿ பெயரைக௠கொடà¯à®•à¯à®•à¯à®®à¯. à®’à®°à¯\n"
+"வழஙà¯à®•à®¿ பெயரைக௠கொடà¯à®¤à¯à®¤à®¾à®²à¯, NetworkManager அதை பà¯à®¤à®¿à®¯ நிரநà¯à®¤à®° கணினி வழஙà¯à®•à®¿ "
+"பெயராக அமைகà¯à®•à¯à®®à¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli general permissions { help }\n"
+"\n"
+"à®…à®™à¯à®•à¯€à®•à®°à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ செயலà¯à®ªà®¾à®Ÿà¯à®•à®³à¯à®•à¯à®•à®¾à®© காலர௠அனà¯à®®à®¤à®¿à®•à®³à¯ˆà®•à¯ காடà¯à®Ÿà¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [level <log level>] [domains <log domains>]\n"
+"\n"
+"NetworkManager பதிவிடல௠நிலை அலà¯à®²à®¤à¯ களஙà¯à®•à®³à¯ˆ பெற௠அலà¯à®²à®¤à¯ மாறà¯à®±à¯.\n"
+"மதிபà¯à®ªà¯à®°à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, நடபà¯à®ªà¯ பதிவிடல௠நிலையà¯à®®à¯ களஙà¯à®•à®³à¯à®®à¯ "
+"காடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯. பதிவிடல௠நிலையை மாறà¯à®±,"
+"\n"
+"நிலை மறà¯à®±à¯à®®à¯/அலà¯à®²à®¤à¯ களதà¯à®¤à¯ˆ வழஙà¯à®•à®µà¯à®®à¯. சாதà¯à®¤à®¿à®¯à®®à¯à®³à¯à®³ பதிவிடல௠களஙà¯à®•à®³à®¿à®©à¯"
+"படà¯à®Ÿà®¿à®¯à®²à¯à®•à¯à®•à¯\n"
+"கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+#| msgid ""
+#| "Usage: nmcli networking { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { [ on | off ] }\n"
+#| "\n"
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli networking { COMMAND | help }\n"
+"\n"
+"கடà¯à®Ÿà®³à¯ˆ := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+#| msgid ""
+#| "Usage: nmcli networking { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { [ on | off ] }\n"
+#| "\n"
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli networking on { help }\n"
+"\n"
+"பிணையதà¯à®¤à¯ˆ ஆன௠செயà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:173
+#, c-format
+#| msgid ""
+#| "Usage: nmcli networking { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { [ on | off ] }\n"
+#| "\n"
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli networking off { help }\n"
+"\n"
+"பிணையதà¯à®¤à¯ˆ ஆஃப௠செயà¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [check]\n"
+"\n"
+"பிணைய இணைபà¯à®ªà¯ நிலையைப௠பெறà¯.\n"
+"'check' விரà¯à®ªà¯à®ªà®®à¯ கொடà¯à®¤à¯à®¤à®²à¯ NetworkManager இணைபà¯à®ªà¯ மீணà¯à®Ÿà¯à®®à¯ சோதிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+#| msgid ""
+#| "Usage: nmcli radio { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { all | wifi | wwan | wimax }\n"
+#| "\n"
+#| " all | wifi | wwan | wimax [ on | off ]\n"
+#| "\n"
+#| " COMMAND := { all | wifi | wwan }\n"
+#| "\n"
+#| " all | wifi | wwan [ on | off ]\n"
+#| "\n"
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli radio { COMMAND | help }\n"
+"\n"
+"கடà¯à®Ÿà®³à¯ˆ := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"கடà¯à®Ÿà®³à¯ˆ := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [on | off]\n"
+"\n"
+"அனைதà¯à®¤à¯ ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà¯à®•à®³à®¿à®©à¯ நிலைகளைப௠பெறà¯, அலலà¯à®¤à¯ அவறà¯à®±à¯ˆ ஆன௠அலà¯à®²à®¤à¯ ஆஃப௠"
+"செயà¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [on | off]\n"
+"\n"
+"Wi-Fi ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà®¿à®©à¯ நிலையைப௠பெறà¯, அலà¯à®²à®¤à¯ அதை ஆன௠அலà¯à®²à®¤à¯ ஆஃப௠செயà¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [on | off]\n"
+"\n"
+"மொபைல௠பிராடà¯à®ªà¯‡à®©à¯à®Ÿà¯ ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà®¿à®©à¯ நிலையைப௠பெறà¯, அலà¯à®²à®¤à¯ அதை ஆன௠அலà¯à®²à®¤à¯ "
+"ஆஃப௠செயà¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [on | off]\n"
+"\n"
+"WiMAX ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà®¿à®©à¯ நிலையைப௠பெறà¯, அலà¯à®²à®¤à¯ அதை ஆன௠அலà¯à®²à®¤à¯ ஆஃப௠செயà¯.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "தூஙà¯à®•à®¿à®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®¤à¯à®¤à®²à¯"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (கணினிகà¯à®•à¯à®³à¯ மடà¯à®Ÿà¯à®®à¯)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (தளம௠மடà¯à®Ÿà¯à®®à¯)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "பிழை: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "வலைவாசலà¯"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "வரமà¯à®ªà¯à®Ÿà¯ˆà®¯à®¤à¯"
+
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "à®®à¯à®´à¯"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "பிழை: 'nm status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+#| msgid "Error: 'list configured': %s; allowed fields: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "பிழை: இநà¯à®¤à®ªà¯ பà¯à®²à®™à¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯‡ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "செயலà¯à®¨à¯€à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "பிணைய மேலாளர௠நிலை"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "இயஙà¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+#| msgid "activating"
+msgid "starting"
+msgstr "தà¯à®µà®•à¯à®•à¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "தொடஙà¯à®•à®¿à®¯à®¤à¯"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "பிழை: 'nm அனà¯à®®à®¤à®¿à®•à®³à¯': %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "பிழை: 'nm அனà¯à®®à®¤à®¿à®•à®³à¯': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "பிழை: 'general permissions': %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "NetworkManager அனà¯à®®à®¤à®¿à®•à®³à¯"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "பிழை: கணினி பஸà¯à®Ÿà®©à¯ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+msgid "Error: 'general logging': %s"
+msgstr "பிழை: 'general logging': %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "பிழை: D-பஸ௠பொரà¯à®³à¯ பதிலியை உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager பதிவிடலà¯"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "ஸà¯à®²à¯€à®ªà¯à®ªà®¿à®²à¯ பிழை: %s"
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "பிழை: வழஙà¯à®•à®¿ பெயரை அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "பிழை: '--fields' மதிபà¯à®ªà¯ '%s' இஙà¯à®•à¯‡ சரியாக இலà¯à®²à¯ˆ; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
-
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®™à¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+#| msgid "Error: 'general logging': %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "பிழை: பதிவிடலை அமைகà¯à®• அணà¯à®•à®²à¯ மறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯; %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "பிழை: தவறான 'enable' அளவà¯à®°à¯: '%s'; 'true' அலà¯à®²à®¤à¯ 'false' à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+msgid "Error: %s"
+msgstr "பிழை: %s"
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "பிழை: உறஙà¯à®•à¯à®®à¯ நிலை NetworkManager ஆல௠à®à®±à¯à®±à¯à®®à®¤à®¿ செயà¯à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "பிழை: 'general' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
-#: ../cli/src/network-manager.c:458
-#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "பிழை: தவறான 'sleep' அளவà¯à®°à¯: '%s'; 'true' அலà¯à®²à®¤à¯ 'false' à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "பிழை: தவறான 'wifi' அளவà¯à®°à¯: '%s'."
-
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-
-#: ../cli/src/network-manager.c:533
-#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "பிழை: தவறான 'wwan' அளவà¯à®°à¯: '%s'."
-
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "பிழை: தவறான 'wimax' அளவà¯à®°à¯: '%s'."
-
-#: ../cli/src/network-manager.c:588
-#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Error: 'nm' கடà¯à®Ÿà®³à¯ˆ '%s' தவனாறதà¯."
-
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/network-manager.c:710
#, c-format
+#| msgid "Error: '--fields' value '%s' is not valid here (allowed fields: %s)"
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr ""
+"பிழை: '--fields' மதிபà¯à®ªà¯ '%s' இஙà¯à®•à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®®à¯: "
+"%s)"
+
+#: ../cli/src/network-manager.c:735
+#, c-format
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ '%s' மதிபà¯à®ªà¯à®°à¯: '%s' (on/off à®à®ªà¯à®ªà®¯à®©à¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)."
+
+#: ../cli/src/network-manager.c:746
+#| msgid "Connection list"
+msgid "Connectivity"
+msgstr "இணைபà¯à®ªà¯à®¤à¯à®¤à®¿à®±à®©à¯"
+
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "பிணையமாகà¯à®•à®®à¯"
+
+#: ../cli/src/network-manager.c:783
+#, c-format
+#| msgid "Error: 'networking' command '%s' is not valid."
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "பிழை: 'networking connectivity' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
+
+#: ../cli/src/network-manager.c:799
+#, c-format
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "பிழை: 'networking' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
+
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà¯à®•à®³à¯"
+
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯"
+
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯"
+
+#: ../cli/src/network-manager.c:908
+#, c-format
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "பிழை: 'radio' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
+
+#: ../cli/src/nmcli.c:78
+#, c-format
+#| msgid ""
+#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+#| "\n"
+#| "OPTIONS\n"
+#| " -t[erse] terse output\n"
+#| " -p[retty] pretty output\n"
+#| " -m[ode] tabular|multiline output mode\n"
+#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
+#| " -e[scape] yes|no escape columns separators in "
+#| "values\n"
+#| " -n[ocheck] don't check nmcli and "
+#| "NetworkManager versions\n"
+#| " -a[sk] ask for missing parameters\n"
+#| " -v[ersion] show program version\n"
+#| " -h[elp] print this help\n"
+#| "\n"
+#| "OBJECT\n"
+#| " g[eneral] NetworkManager's general status and operations\n"
+#| " n[etworking] overall networking control\n"
+#| " r[adio] NetworkManager radio switches\n"
+#| " c[onnection] NetworkManager's connections\n"
+#| " d[evice] devices managed by NetworkManager\n"
+#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1689,18 +4383,23 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
-"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+"பயனà¯à®ªà®¾à®Ÿà¯: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
-"OPTIONS\n"
+"விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯\n"
" -t[erse] terse output\n"
" -p[retty] pretty output\n"
" -m[ode] tabular|multiline output mode\n"
@@ -1709,245 +4408,833 @@ msgstr ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "பிழை: பொரà¯à®³à¯ '%s' ஆனத௠தெரியாததà¯, 'nmcli உதவியை' à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--terse' இரணà¯à®Ÿà®¾à®µà®¤à¯ à®®à¯à®±à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--terse'ஆனத௠'--pretty' உடன௠ஒனà¯à®±à®¾à®• உளà¯à®³à®¤à¯."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--pretty' இரணà¯à®Ÿà®¾à®µà®¤à¯ à®®à¯à®±à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--pretty'ஆனத௠'--terse' உடன௠ஒனà¯à®±à®¾à®• உளà¯à®³à®¤à¯"
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "பிழை: '%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "பிழை: '%s' ஆனத௠'%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ சரியான விவாதம௠அலà¯à®²."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "பிழை: '%s' கà¯à®•à¯ பà¯à®²à®™à¯à®•à®³à¯ விடà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:240
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "பிழை: '%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ '%s' ஆனத௠ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© காலமà¯à®Ÿà®¿à®µà®²à¯à®²."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli கரà¯à®µà®¿, பதிபà¯à®ªà¯ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '%s'ஆனத௠தெரியாததà¯, 'nmcli -உதவியை' à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:288
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "%d சிகà¯à®©à®²à¯ கிடைதà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯, பணி நிறà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯..."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"பிழை: சமிகà¯à®žà¯ˆ %d மூலம௠nmcli à®®à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "சிகà¯à®©à®²à¯ மூடà¯à®¤à®²à¯ˆ அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "சிகà¯à®©à®²à¯ˆà®•à¯ கையாளà¯à®®à¯ இழையை உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
+
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "பிழை: NMClient பொரà¯à®³à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "வெறà¯à®±à®¿"
-#: ../cli/src/settings.c:563
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:565
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit கடவà¯à®šà¯à®šà¯Šà®²à¯)"
-#: ../cli/src/settings.c:568 ../cli/src/settings.c:696
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (தெரியாத)"
-#: ../cli/src/settings.c:594
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (தெரியாத)"
-#: ../cli/src/settings.c:600
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "à®à®¤à®¾à®µà®¤à¯,"
-#: ../cli/src/settings.c:602
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:604
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:606
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:610
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:612
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:620
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:622
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:624
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:626
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:690
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯)"
-#: ../cli/src/settings.c:692
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, பொத௠IP சிறநà¯à®¤à®¤à¯)"
-#: ../cli/src/settings.c:694
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, தறà¯à®•à®¾à®²à®¿à®• IP சிறநà¯à®¤à®¤à¯)"
-#: ../cli/src/settings.c:827 ../cli/src/settings.c:1023
-#: ../cli/src/settings.c:1732
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (எதà¯à®µà¯à®®à®¿à®²à¯à®²à¯ˆ)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "à®à®œà®©à¯à®Ÿà¯ உரிமைகொணà¯à®Ÿà®¤à¯, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "சேமிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ, "
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "தேவைபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ, "
+
+#: ../cli/src/settings.c:1124
+#| msgid "%d (disabled)"
+msgid "0 (disabled)"
+msgstr "0 (à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯)"
+
+#: ../cli/src/settings.c:1130
+#| msgid "enabled"
+msgid "enabled, "
+msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "காடà¯à®Ÿà®¿à®•à¯à®•à¯Šà®³à¯"
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "விரà¯à®®à¯à®ªà¯à®µà®¤à¯, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (அமைகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "தானே"
-#: ../cli/src/utils.c:105
+#: ../cli/src/settings.c:1283
+#| msgid "Default"
+msgid "default"
+msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "'%s' à® '%s' கà¯à®•à¯ அமைகà¯à®•à®µà¯à®®à¯ விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? [yes]: "
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "'%s' à®à®¯à¯à®®à¯ அழிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾? [yes]: "
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not valid"
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+#| msgid "'%d' is not a valid channel"
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <%d-%d> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+#| msgid "'%s' is not a valid band"
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <%d-%d> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+#| msgid "'%s' is not a valid duplex value"
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <option>=<value> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "index '%s' is not valid"
+msgstr "அடà¯à®Ÿà®µà®£à¯ˆ '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "நீகà¯à®•à¯à®µà®¤à®±à¯à®•à¯ எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+#| msgid "value '%d' is out of range <%d-%d>"
+msgid "index '%d' is not in range <0-%d>"
+msgstr "அடà¯à®Ÿà®µà®£à¯ˆ '%d' ஆனத௠வரமà¯à®ªà¯ <0-%d> இல௠இலà¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid option '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ விரà¯à®ªà¯à®ªà®®à¯ '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "விரà¯à®ªà¯à®ªà®®à¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© எணà¯à®£à®²à¯à®² (அலà¯à®²à®¤à¯ வரமà¯à®ªà®¿à®±à¯à®•à¯ வெளியே உளà¯à®³à®¤à¯)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ MAC அலà¯à®²"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®• பெயர௠இலà¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' எனà¯à®ªà®¤à¯ ஒர௠எணà¯à®£à®²à¯à®²"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+#| msgid "'%s' is not a valid duplex value"
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© hex எழà¯à®¤à¯à®¤à®²à¯à®²"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+#| msgid "'%s' is not a valid MAC address"
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MAC அலà¯à®²"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯ UUID அலà¯à®²"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"பயனர௠அனà¯à®®à®¤à®¿à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯. இத௠பினà¯à®µà®°à¯à®®à¯à®ªà®Ÿà®¿ வடிவமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ "
+"பயனர௠பெயரà¯à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à®¾à®•à¯à®®à¯:\n"
+" [user:]<user name 1>, [user:]<user name 2>,... \n"
+"ஒவà¯à®µà¯Šà®©à¯à®±à¯ˆà®¯à¯à®®à¯ காறà¯à®ªà¯à®³à¯à®³à®¿ அலà¯à®²à®¤à¯ இடைவெளி மூலம௠பிரிகà¯à®•à®²à®¾à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr ""
+"'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© மாஸà¯à®Ÿà¯à®Ÿà®°à®²à¯à®²; ifname அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ UUID à®à®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை கடவà¯à®šà¯à®šà¯Šà®²à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"ஒர௠தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à®¾à®© பாதையையà¯à®®à¯ தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®¯à¯à®®à¯ (இனà¯à®©à¯à®®à¯ "
+"அமைகà¯à®•à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯) உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" <file path> [<password>]\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"hexadecimal மதிபà¯à®ªà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à®¾à®• பைடà¯à®Ÿà¯à®•à®³à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯.\n"
+"பினà¯à®µà®°à¯à®®à¯ இர௠வடிவஙà¯à®•à®³à¯ à®à®±à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯:\n"
+"(a) hexadecimal இலகà¯à®•à®™à¯à®•à®³à®¿à®©à¯ சரமà¯, இதில௠ஒவà¯à®µà¯Šà®°à¯ இரணà¯à®Ÿà¯ இலகà¯à®•à®™à¯à®•à®³à¯à®®à¯ ஒர௠"
+"பைடà¯à®Ÿà¯ˆà®•à¯ கà¯à®±à®¿à®•à¯à®•à¯à®®à¯\n"
+"(b) பைடà¯à®Ÿà¯à®•à®³à®¿à®©à¯ இடைவெளியால௠பிரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ படà¯à®Ÿà®¿à®¯à®²à¯, hexadecimal இலகà¯à®•à®™à¯à®•à®³à®¾à®• "
+"எழà¯à®¤à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ (விரà¯à®®à¯à®ªà®¿à®©à®¾à®²à¯ 0x/0X à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ மறà¯à®±à¯à®®à¯ விரà¯à®®à¯à®ªà®¿à®©à®¾à®²à¯ à®®à¯à®©à¯à®©à®¤à®¾à®• 0 "
+"சேரà¯à®¤à¯à®¤à¯ எழà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯).\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à¯ பிணைபà¯à®ªà¯ விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" option = <value>, option = <value>,... \n"
+"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯: %s\n"
+"'mode' ஠பெயராக அலà¯à®²à®¤à¯ ஒர௠எணà¯à®£à®¾à®• வழஙà¯à®•à®²à®¾à®®à¯:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+#| msgid "'%s' is not a valid band"
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© InfiniBand MAC அலà¯à®²"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© IBoIP P_Key அலà¯à®²"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS சேவையகஙà¯à®•à®³à®¿à®©à¯ IPv4 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+#| msgid "'%s' is not a valid duplex value"
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (ip[/prefix] [gateway] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ IPv4 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 32 எனà¯à®ªà®¤à¯ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+#| msgid "'%s' is not a valid value for the property"
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr ""
+"'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (ip/[prefix] next-hop [metric] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à®®à¯ˆà®¨à¯à®¤ IPv4 தடஙà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 32 எனà¯à®ªà®¤à¯ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"மெடà¯à®°à®¿à®•à¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 0 எனà¯à®ªà®¤à¯ மெடà¯à®°à®¿à®•à¯à®•à®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS சேவையகஙà¯à®•à®³à®¿à®©à¯ IPv6 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯. IPv6 அமைவாகà¯à®• "
+"à®®à¯à®±à¯ˆà®¯à®¾à®©à®¤à¯ 'auto' என இரà¯à®¨à¯à®¤à®¾à®²à¯ இநà¯à®¤ DNS சேவைகள௠தானியஙà¯à®•à¯ அமைவாகà¯à®•à®¤à¯à®¤à®¿à®©à®¾à®²à¯ "
+"வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ (வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯) மதிபà¯à®ªà¯à®•à®³à¯à®Ÿà®©à¯ பினà¯à®©à®¿à®£à¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®©à¯à®±. DNS "
+"சேவையகஙà¯à®•à®³à¯ˆ 'shared' அலà¯à®²à®¤à¯'link-local' IPv6 அமைவாகà¯à®• à®®à¯à®±à¯ˆà®•à®³à¯à®Ÿà®©à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ "
+"à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯, à®à®©à¯†à®©à®¿à®²à¯ அபà¯à®¸à¯à®Ÿà¯à®°à¯€à®®à¯ பிணையம௠இலà¯à®²à¯ˆ எனà¯à®ªà®¤à®¾à®²à¯. மறà¯à®±à®…னைதà¯à®¤à¯ IPv6 "
+"அமைவாகà¯à®• à®®à¯à®±à¯ˆà®•à®³à®¿à®²à¯à®®à¯, இநà¯à®¤ DNS சேவையகஙà¯à®•à®³à¯ இநà¯à®¤ இணைபà¯à®ªà¯à®•à¯à®•à®¾à®©DNS சேவையகஙà¯à®•à®³à®¾à®• "
+"மடà¯à®Ÿà¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®•à®¿à®©à¯à®±à®©.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ IPv6 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 128 எனà¯à®ªà®¤à¯ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:"
+"600:300c:326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (<dest IP>/prefix <next-hop IP> [metric] à®à®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à®®à¯ˆà®¨à¯à®¤ IPv6 தடஙà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" ip/[prefix] next-hop [metric],... \n"
+"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 128 எனà¯à®ªà®¤à¯ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"மெடà¯à®°à®¿à®•à¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 0 எனà¯à®ªà®¤à¯ மெடà¯à®°à®¿à®•à¯à®•à®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 "
+"2001:db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+#| msgid "'%s' is not a valid value for '%s'"
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; 0, 1 அலà¯à®²à®¤à¯ 2 à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+#| msgid "'%d' is not a valid channel"
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© சேனல௠அலà¯à®² <1-13>"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+#| msgid "'%s' is not a valid value for '%s'"
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; [e, o, n] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli ஆனத௠JSON அமைவாகà¯à®•à®¤à¯ தரவ௠மறà¯à®±à¯à®®à¯ அமைவாகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ கொணà¯à®Ÿà¯à®³à¯à®³ ஒர௠கோபà¯à®ªà¯à®ªà¯ "
+"பெயர௠ஆகிய இரணà¯à®Ÿà¯ˆà®¯à¯à®®à¯ à®à®±à¯à®•à¯à®®à¯. கோபà¯à®ªà¯ˆ வழஙà¯à®•à®¿à®©à®¾à®²à¯, கோபà¯à®ªà¯ வாசிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ "
+"அதிலà¯à®³à¯à®³à®µà¯ˆ பணà¯à®ªà¯à®•à®³à®¿à®²à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: set team.config { \"device\": \"team0\", \"runner\": "
+"{\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "நீகà¯à®•à¯à®µà®¤à®±à¯à®•à¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+#| msgid "value '%d' is out of range <%d-%d>"
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "அடà¯à®Ÿà®µà®£à¯ˆ '%d' ஆனத௠வரமà¯à®ªà¯ <0-%d> கà¯à®•à¯à®³à¯ இலà¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+#| msgid "'%s' is not a valid value for the property"
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; 3 சரஙà¯à®•à®³à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"சேனலà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯ (காறà¯à®ªà¯à®³à¯à®³à®¿ அலà¯à®²à®¤à¯ இடைவெளியால௠"
+"பிரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®ªà®Ÿà®¿).\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à®®à¯ˆà®¨à¯à®¤ S/390 விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" option = <value>, option = <value>,... \n"
+"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+#| msgid "'%d' is not a valid channel"
+msgid "'%s' is not a valid channel"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© சேனல௠அலà¯à®²"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+#| msgid "'%d' is not a valid channel"
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© சேனல௠அலà¯à®²"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP விசை '%s' இன௠விசையாக இரà¯à®•à¯à®•à¯à®®à¯ என ஊகிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' ஆனத௠[0 (unknown), 1 (key), 2 (passphrase)] கà¯à®•à¯à®³à¯ இலà¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP விசைகளின௠வகையை உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯. à®à®±à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ மதிபà¯à®ªà¯à®•à®³à¯: 0 அலà¯à®²à®¤à¯ தெரியாததà¯, "
+"1 அலà¯à®²à®¤à¯ விசை, மறà¯à®±à¯à®®à¯ 2 அலà¯à®²à®¤à¯ கடவà¯à®µà®¾à®•à¯à®•à®¿à®¯à®®à¯.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© PSK அலà¯à®²"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© DCB கொடி அலà¯à®²"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+#| msgid "'%s' is not a valid value for the property"
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© DCB பயனà¯à®ªà®¾à®Ÿà¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ அலà¯à®²"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "காறà¯à®ªà¯à®³à¯à®³à®¿à®•à®³à®¾à®²à¯ பிரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ 8 எணà¯à®•à®³à¯ˆà®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' எனà¯à®ªà®¤à¯ 0 மறà¯à®±à¯à®®à¯ %u (உடà¯à®ªà®Ÿ) அலà¯à®²à®¤à¯ %u கà¯à®•à¯ இடையிலான எணà¯à®£à®²à¯à®²"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' எனà¯à®ªà®¤à¯ 0 மறà¯à®±à¯à®®à¯ %u கà¯à®•à¯ (உடà¯à®ªà®Ÿ) இடையிலான எணà¯à®£à®²à¯à®²"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: '%s' இல௠1 சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ வரை (செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯) மாறà¯à®±à®™à¯à®•à®³à¯ "
+"செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®¾à®¤à¯\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "கறà¯à®±à¯ˆà®¯à®•à®²à®®à¯ சதவீதஙà¯à®•à®³à®¿à®©à¯ கூடà¯à®¤à®²à¯ 100%% ஆக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "பணà¯à®ªà®¿à®©à¯ மதிபà¯à®ªà¯ˆ எபà¯à®ªà®Ÿà®¿à®ªà¯ பெறà¯à®µà®¤à¯ எனத௠தெரியவிலà¯à®²à¯ˆ"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "பணà¯à®ªà¯ˆ மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM பணà¯à®ªà®¿à®©à¯ விளகà¯à®•à®®à¯]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli சாரà¯à®¨à¯à®¤ விளகà¯à®•à®®à¯]"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "பிழை: '%s' மதிபà¯à®ªà¯à®°à¯à®µà®•à¯à®•à¯ மதிபà¯à®ªà¯ தேவை."
+
+#: ../cli/src/utils.c:153
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "பிழை: '%s' மதிபà¯à®ªà¯à®°à¯ எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, ஆனால௠'%s' வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+
+#: ../cli/src/utils.c:156
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "பிழை: எதிரà¯à®ªà®¾à®°à®¾à®¤ மதிபà¯à®ªà¯à®°à¯ '%s'"
+
+#: ../cli/src/utils.c:206
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 à®®à¯à®•à®µà®°à®¿ '0x%X' ஠உரை வடிவதà¯à®¤à®¿à®±à¯à®•à¯ மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ பிழை"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:234
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 à®®à¯à®•à®µà®°à®¿ '%s' ஠உரை வடிவதà¯à®¤à®¿à®±à¯à®•à¯ மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ பிழை"
-#: ../cli/src/utils.c:234
+#: ../cli/src/utils.c:410
+#, c-format
+#| msgid "'%s' is not a valid value for '%s'"
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; [%s] அலà¯à®²à®¤à¯ [%s] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../cli/src/utils.c:492
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' தெளிவாக இலà¯à®²à¯ˆ (%s x %s)"
+
+#: ../cli/src/utils.c:504
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "பெயர௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯, [%s] இல௠ஒனà¯à®±à¯ˆ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯"
+
+#: ../cli/src/utils.c:721
#, c-format
msgid "field '%s' has to be alone"
msgstr "பà¯à®²à®®à¯ '%s' தனியாக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../cli/src/utils.c:237
+#: ../cli/src/utils.c:724
#, c-format
-msgid "invalid field '%s'"
-msgstr "தவறான பà¯à®²à®®à¯ '%s'"
+#| msgid "Error: 'list configured': %s; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பà¯à®²à®®à¯ '%s'; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
-#: ../cli/src/utils.c:256
+#: ../cli/src/utils.c:781
msgid "Option '--terse' requires specifying '--fields'"
msgstr "விரà¯à®ªà¯à®ªà®®à¯ '--terse' '--fields'஠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/utils.c:260
+#: ../cli/src/utils.c:785
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "விரà¯à®ªà¯à®ªà®®à¯ '--terse'கà¯à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ '--fields' விரà¯à®ªà¯à®ª மதிபà¯à®ªà¯à®•à®³à¯ தேவை, '%s' அலà¯à®²"
-
-#: ../cli/src/utils.c:470
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr "பிழை: org.freedesktop.DBus கà¯à®•à¯ D-பஸ௠பொரà¯à®³à¯ பதிலியை உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-
-#: ../cli/src/utils.c:478
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "பிழை: NameHasOwner கோரிகà¯à®•à¯ˆ தோலà¯à®µà®¿: %s"
+msgstr ""
+"விரà¯à®ªà¯à®ªà®®à¯ '--terse'கà¯à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ '--fields' விரà¯à®ªà¯à®ª மதிபà¯à®ªà¯à®•à®³à¯ தேவை, '%s' "
+"அலà¯à®²"
-#: ../cli/src/utils.c:523
+#: ../cli/src/utils.c:1104
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
"nocheck to suppress the warning.\n"
msgstr ""
-"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: nmcli (%s) மறà¯à®±à¯à®®à¯ NetworkManager (%s) பதிபà¯à®ªà¯ ஆகியவை பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ. "
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: nmcli (%s) மறà¯à®±à¯à®®à¯ NetworkManager (%s) பதிபà¯à®ªà¯ ஆகியவை "
+"பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ. "
"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆà®¯à¯ˆà®¤à¯ தவிரà¯à®•à¯à®• --nocheck கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
-#: ../cli/src/utils.c:532
+#: ../cli/src/utils.c:1113
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
"execution using --nocheck, but the results are unpredictable."
msgstr ""
"பிழை: nmcli (%s) மறà¯à®±à¯à®®à¯ NetworkManager (%s) பதிபà¯à®ªà¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ. --nocheck "
-"கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ கடà¯à®Ÿà®¾à®¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ செயலà¯à®ªà®Ÿà®µà¯ˆà®•à¯à®•à®²à®¾à®®à¯, ஆனால௠விளைவ௠எபà¯à®ªà®Ÿà®¿ இரà¯à®•à¯à®•à¯à®®à¯ என "
+"கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ கடà¯à®Ÿà®¾à®¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ செயலà¯à®ªà®Ÿà®µà¯ˆà®•à¯à®•à®²à®¾à®®à¯, ஆனால௠விளைவ௠எபà¯à®ªà®Ÿà®¿ "
+"இரà¯à®•à¯à®•à¯à®®à¯ என "
"கணிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
#: ../libnm-util/crypto.c:133
@@ -1960,116 +5247,88 @@ msgstr "PEM விசைக௠கோபà¯à®ªà®¿à®±à¯à®•à¯ à®®à¯à®Ÿà®¿à®µà¯
msgid "Doesn't look like a PEM private key file."
msgstr "இதைப௠பாரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯ ஒர௠PEM தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைக௠கோபà¯à®ªà¯ போல௠இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM கோபà¯à®ªà¯ தரவை சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: Proc-வகையானத௠மà¯à®¤à®²à¯ ஒடà¯à®Ÿà¯ இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: தெரியாத Proc-வகை ஒடà¯à®Ÿà¯ '%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: DEK-தகவலானத௠இரணà¯à®Ÿà®¾à®µà®¤à¯ ஒடà¯à®Ÿà®¾à®• இரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: IV ஆனத௠DEK-தகவல௠ஒடà¯à®Ÿà®¿à®²à¯ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: DEK-தகவல௠ஒடà¯à®Ÿà®¿à®©à¯à®³à¯ IV ன௠தவறான வடிவமà¯."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: தெரியாத தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை cipher '%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையை கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ PKCS#8 தொடகà¯à®•à®•à¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
-msgstr "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ PKCS#8 à®®à¯à®Ÿà®¿à®µà¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯ '%s' à®à®•à¯ கணà¯à®Ÿà®±à®¿à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿."
-
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠தரவைச௠சேமிகà¯à®• போதிய நினைவகம௠இலà¯à®²à¯ˆ."
+msgstr ""
+"எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ PKCS#8 à®®à¯à®Ÿà®¿à®µà¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯ '%s' à®à®•à¯ கணà¯à®Ÿà®±à®¿à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿."
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையை கà¯à®±à®¿à®¨à¯€à®•à¯à®•à®®à¯ செயà¯à®¤à®²à¯ தோலà¯à®µà®¿."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "சானà¯à®±à®¿à®¤à®´à¯ தரவை சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ஆனத௠நீளதà¯à®¤à®¿à®²à¯ ஒர௠பைடà¯à®Ÿà®¿à®•à®³à®¿à®©à¯ எணà¯à®©à¯ˆà®ªà¯ பெறà¯à®±à¯à®³à¯à®³à®¤à¯."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV஠சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ஆனதà¯-ஹெகà¯à®¸à®¾ தசம எணà¯à®•à®³à¯ˆ பெறà¯à®±à®¿à®°à¯à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை cipher '%s' ஆனத௠தெரியாததà¯."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• போதை நினைவகம௠இலà¯à®²à¯ˆ."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ சேமிகà¯à®• போதை நினைவகம௠இலà¯à®²à¯ˆ."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை வகையை வரையறà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM சானà¯à®±à®¿à®¤à®´à®¿à®²à¯ '%s' எனà¯à®± தொடகà¯à®•à®•à¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯ இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM சானà¯à®±à®¿à®¤à®´à®¿à®²à¯ '%s' எனà¯à®± à®®à¯à®Ÿà®¿à®µà¯à®•à¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯ இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
@@ -2088,97 +5347,88 @@ msgstr "MD5 எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿
msgid "Invalid IV length (must be at least %zd)."
msgstr "தவறான IV நீளம௠( %zdவத௠இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®• விசை பஃபà¯à®ªà®°à¯à®•à¯à®•à®¾à®© போதைய நினைவகம௠இலà¯à®²à¯ˆ."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "cipher சேரà¯à®¤à¯à®¤à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "IV கான மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
-msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: எதிரà¯à®ªà®¾à®°à®¾à®¤ பாடிங௠நீளமà¯."
+msgstr ""
+"தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: எதிரà¯à®ªà®¾à®°à®¾à®¤ பாடிங௠நீளமà¯."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© நினைவகதà¯à®¤à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "cipher சேரà¯à®¤à¯à®¤à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "IV கான மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "தரவை மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "சானà¯à®±à®¿à®¤à®´à¯ தரவை தà¯à®µà®•à¯à®•à¯à®µà®¤à®¿à®²à¯ பிழை: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 கà¯à®±à®¿à®¯à®¾à®³à®°à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ சரிபாரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 டீகோடரைத௠தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¨à¯€à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
@@ -2198,125 +5448,495 @@ msgstr "MD5 உரையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ
msgid "Invalid IV length (must be at least %d)."
msgstr "தவறான IV நீளம௠(%dயாவத௠இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• cipher வரிசையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "IV கான மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à¯ˆ சேரà¯à®¤à¯à®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
-"தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ தரவ௠மிக "
+"தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ "
+"தரவ௠மிக "
"நீளமானதà¯."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ à®®à¯à®Ÿà®¿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• cipher வரிசையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "IV கான மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• சேரà¯à®¤à¯à®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à¯à®ªà¯ பின௠எதிரà¯à®ªà®¾à®°à®¾à®¤ தரவின௠எணà¯à®£à®¿à®•à¯à®•à¯ˆ."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ UCS2கà¯à®•à¯ மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 கà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ சரிபாரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "தறà¯à®šà¯†à®¯à®²à®¾à®© தரவை உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "பணà¯à®ªà¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "பணà¯à®ªà¯ காலியாக உளà¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 கà¯à®•à¯ '%s' பணà¯à®ªà¯à®•à¯à®•à¯ பொரà¯à®¨à¯à®¤ வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "பணà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "பணà¯à®ªà¯à®•à¯à®•à¯ '%s' ஆனத௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© மதிபà¯à®ªà®²à¯à®²"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' அலà¯à®²à®¤à¯ '%s' அமைவ௠தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "'%s' விரà¯à®ªà¯à®ªà®®à¯ அலà¯à®²à®¤à¯ அதன௠மதிபà¯à®ªà¯ '%s' செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s' மறà¯à®±à¯à®®à¯ '%s' இரணà¯à®Ÿà®¿à®²à¯ ஒனà¯à®±à¯ˆ மடà¯à®Ÿà¯à®®à¯‡ அமைகà¯à®•à®²à®¾à®®à¯"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "அவசியமான விரà¯à®ªà¯à®ªà®®à¯ '%s' விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' கà¯à®•à¯ '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© மதிபà¯à®ªà®²à¯à®²"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' ஆனத௠'%s > 0' உடன௠இணகà¯à®•à®®à®¾à®©à®¤à®²à¯à®²"
+
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+#| msgid "'%s' is not a valid interface name"
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' எனà¯à®ªà®¤à¯ '%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®•à®ªà¯ பெயரலà¯à®²"
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+#| msgid "'%s' is not a valid value for '%s'"
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' விரà¯à®ªà¯à®ªà®®à¯ '%s=%s' கà¯à®•à¯ மடà¯à®Ÿà¯à®®à¯‡ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à¯"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' ஆனத௠'%s' கà¯à®•à¯ இணகà¯à®•à®®à®¾à®© அமைவாகà¯à®•à®®à®²à¯à®²"
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+#| msgid "'%s' option requires setting '%s' option"
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ '%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆ அமைகà¯à®• வேணà¯à®Ÿà®¿à®¯à®¤à¯ அவசியமà¯"
+
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' விரà¯à®ªà¯à®ªà®®à¯ காலியாக உளà¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' ஆனத௠'%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© IPv4 à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' ஆனத௠பணà¯à®ªà¯à®•à¯à®•à®¾à®© செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© மதிபà¯à®ªà®²à¯à®² (<= %d ஆக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "மதிபà¯à®ªà¯ '%d' ஆனத௠வரமà¯à®ªà®¿à®±à¯à®•à¯ வெளியே உளà¯à®³à®¤à¯ <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "பணà¯à®ªà¯ காலியாக உளà¯à®³à®¤à¯'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' ஆனத௠மெயà¯à®¨à®¿à®•à®°à¯ இடைமà¯à®•à®ªà¯ பெயர௠'%s' கà¯à®•à¯à®ªà¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "இணைபà¯à®ªà®¿à®²à¯ '%s' அமைபà¯à®ªà¯ இரà¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯à®¤à¯ அவசியமà¯"
+
+#: ../libnm-util/nm-setting-connection.c:802
+#| msgid "IPv4 configuration is not allowed for bonding slave"
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "ஸà¯à®²à¯‡à®µà¯à®•à¯à®•à¯ IPv4 அமைவாகà¯à®•à®®à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
+
+#: ../libnm-util/nm-setting-connection.c:815
+#| msgid "IPv6 configuration is not allowed for bonding slave"
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "ஸà¯à®²à¯‡à®µà¯à®•à¯à®•à¯ IPv6 அமைவாகà¯à®•à®®à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+#| msgid "flags are invalid"
+msgid "flags invalid"
+msgstr "கொடிகள௠செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+#| msgid "flags are invalid"
+msgid "flags invalid - disabled"
+msgstr "கொடிகள௠செலà¯à®²à®¾à®¤à®¤à¯ - à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+#| msgid "property is invalid"
+msgid "property invalid (not enabled)"
+msgstr "பணà¯à®ªà¯ செலà¯à®²à®¾à®¤à®¤à¯ (செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+#| msgid "flags are invalid"
+msgid "element invalid"
+msgstr "கூற௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "கூடà¯à®¤à®²à¯ 100% அலà¯à®²"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+#| msgid "property is invalid"
+msgid "property invalid"
+msgstr "பணà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+#| msgid "property is missing"
+msgid "property missing"
+msgstr "பணà¯à®ªà¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "பணà¯à®ªà¯ மதிபà¯à®ªà¯ '%s' காலியாக உளà¯à®³à®¤à¯ அலà¯à®²à®¤à¯ மிக நீளமாக உளà¯à®³à®¤à¯ (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr ""
+"'%s' இல௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ எழà¯à®¤à¯à®¤à¯à®•à®³à¯ உளà¯à®³à®© ([A-Za-z._-] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' நீளம௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤à®¤à¯ (5 அலà¯à®²à®¤à¯ 6 இலகà¯à®•à®™à¯à®•à®³à¯ இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+#| msgid "'%s' is not a valid interface name"
+msgid "not a valid interface name"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®• பெயர௠இலà¯à®²à¯ˆ"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "தாயைக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, ஒர௠P_Key à®à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key இணைபà¯à®ªà¯ தாய௠இடைமà¯à®•à®ªà¯ பெயரைக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "'%s=%s' கà¯à®•à¯ இநà¯à®¤ பணà¯à®ªà¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 à®®à¯à®•à®µà®°à®¿ செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 à®®à¯à®•à®µà®°à®¿à®¯à®¿à®²à¯ செலà¯à®²à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ உளà¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. பாதை செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. பாதையில௠செலà¯à®²à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ உளà¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "%s=%s கà¯à®•à¯ '%s' அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID நீளம௠வரமà¯à®ªà¯à®•à¯à®•à¯ வெளியே உளà¯à®³à®¤à¯ <1-32> பைடà¯à®Ÿà¯à®•à®³à¯"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© சேனல௠அலà¯à®²"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' ஆனத௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© வரமà¯à®ªà¯à®•à¯à®•à¯ வெளியே உளà¯à®³à®¤à¯ <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "இநà¯à®¤ பணà¯à®ªà¯ˆ அமைகà¯à®• வேணà¯à®Ÿà¯à®®à®¾à®©à®¾à®²à¯ பூசà¯à®šà®¿à®¯à®®à®²à¯à®²à®¾à®¤ '%s' பணà¯à®ªà¯ அவசியமà¯"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' மதிபà¯à®ªà®¾à®©à®¤à¯ '%s=%s' கà¯à®•à¯à®ªà¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' ஆனத௠UUID மறà¯à®±à¯à®®à¯ இடைமà¯à®•à®ªà¯ பெயர௠இரணà¯à®Ÿà¯à®•à¯à®•à¯à®®à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "பணà¯à®ªà¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà¯à®®à¯ இலà¯à®²à¯ˆ அத௠'%s:%s' ஆகவà¯à®®à¯ இலà¯à®²à¯ˆ"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "கொடிகள௠செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-wired.c:562
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• விசையை செயà¯à®¯ போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ à®®à¯à®©à¯ˆà®¯ மதிபà¯à®ªà®²à¯à®²"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM கோபà¯à®ªà®¿à®±à¯à®•à®¾à®© உரà¯à®µà®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à¯ போதைய நினைவ ஒதà¯à®•à¯à®•à¯€à®Ÿà¯ இலà¯à®²à¯ˆ."
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© டியூபà¯à®²à¯†à®•à¯à®¸à¯ மதிபà¯à®ªà®²à¯à®²"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MAC à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MAC à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-wired.c:629
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "PEM கோபà¯à®ªà®¿à®²à¯ IV஠எழà¯à®¤à¯à®µà®¤à®±à¯à®•à¯ போதைய நினைவக ஒதà¯à®•à¯à®•à¯€à®Ÿà¯ இலà¯à®²à¯ˆ."
+msgid "invalid '%s' or its value '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ '%s' அலà¯à®²à®¤à¯ அதன௠மதிபà¯à®ªà¯ '%s'"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-wireless-security.c:816
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "PEM கோபà¯à®ªà®¿à®±à¯à®•à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• விசையை எழà¯à®¤à¯à®µà®¤à®±à¯à®•à®¾à®© போதைய நினைவகதà¯à®¤à¯ˆ ஒதà¯à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' பாதà¯à®•à®¾à®ªà¯à®ªà¯à®•à¯à®•à¯ '%s=%s' அவசியமà¯"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-wireless-security.c:845
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM கோபà¯à®ªà¯ தரவிறà¯à®•à®¾à®• போதைய நினைவக ஒதà¯à®•à¯à®•à¯€à®Ÿà¯ இலà¯à®²à¯ˆ."
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' பாதà¯à®•à®¾à®ªà¯à®ªà¯à®•à¯à®•à¯ '%s' அமைவ௠இரà¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯à®¤à¯ அவசியமà¯"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' மதிபà¯à®ªà¯ வரமà¯à®ªà®¿à®±à¯à®•à¯ வெளியே உளà¯à®³à®¤à¯ <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ இநà¯à®¤à®ªà¯ பணà¯à®ªà®¿à®²à¯ '%s' இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' à® '%s=%s' (WEP) உடன௠மடà¯à®Ÿà¯à®®à¯‡ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© Wi-Fi பயனà¯à®®à¯à®±à¯ˆà®¯à®²à¯à®²"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯ படà¯à®Ÿà¯ˆà®¯à®²à¯à®²"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "இதறà¯à®•à¯ '%s' பணà¯à®ªà¯ˆ அமைகà¯à®• வேணà¯à®Ÿà¯à®®à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2324,7 +5944,8 @@ msgstr "கணினி நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®™à¯ வசதிà
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
msgid "System policy prevents enabling or disabling system networking"
-msgstr "கணினி பிணையதà¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ நீகà¯à®•à¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+msgstr ""
+"கணினி பிணையதà¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ நீகà¯à®•à¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:3
msgid ""
@@ -2344,7 +5965,8 @@ msgstr "WiFi சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ à®
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
-msgstr "WiFi சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ நீகà¯à®•à¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+msgstr ""
+"WiFi சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ நீகà¯à®•à¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
msgid "Enable or disable mobile broadband devices"
@@ -2353,16 +5975,19 @@ msgstr "மொபல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனஙà¯à
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
msgid "System policy prevents enabling or disabling mobile broadband devices"
msgstr ""
-"மொபைல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ நீகà¯à®•à¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+"மொபைல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ நீகà¯à®•à¯à®µà®¤à¯ˆ கணினி பாலிசி "
+"தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "WiMAX மொபைல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ அலà¯à®²à®¤à¯ à®®à¯à®Ÿà®•à¯à®•à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
-msgid "System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
-"WiMAX மொபைல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ à®®à¯à®Ÿà®•à¯à®•à¯à®µà®¤à¯ˆ கணினி கொளà¯à®•à¯ˆ "
+"WiMAX மொபைல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ˆ அலà¯à®²à®¤à¯ à®®à¯à®Ÿà®•à¯à®•à¯à®µà®¤à¯ˆ கணினி "
+"கொளà¯à®•à¯ˆ "
"தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
@@ -2380,7 +6005,8 @@ msgstr "ஒர௠பாதà¯à®•à®¾à®•à¯à®•à®ªà¯à®ª WiFi நெடà¯à®µà¯Šà®
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
msgid "System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"பாதà¯à®•à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯à®•à®³à¯ˆ பகிரà¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+"பாதà¯à®•à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯à®•à®³à¯ˆ பகிரà¯à®µà®¤à¯ˆ கணினி பாலிசி "
+"தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
msgid "Connection sharing via an open WiFi network"
@@ -2388,7 +6014,8 @@ msgstr "ஒர௠திறநà¯à®¤ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "திறநà¯à®¤ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯à®•à®³à¯ˆ பகிரà¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+msgstr ""
+"திறநà¯à®¤ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯à®•à®³à¯ˆ பகிரà¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
@@ -2404,7 +6031,8 @@ msgstr "எலà¯à®²à®¾à®ªà¯ பயனரà¯à®•à®³à¯à®•à¯à®•à¯à®®à®¾à®© பà
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
msgid "System policy prevents modification of network settings for all users"
-msgstr "எலà¯à®²à®¾à®ªà¯ பயனரà¯à®•à®³à¯à®•à¯à®•à¯à®®à®¾à®© பிணைய இணைபà¯à®ªà¯à®•à®³à®¿à®©à¯ மாறà¯à®±à®¤à¯à®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+msgstr ""
+"எலà¯à®²à®¾à®ªà¯ பயனரà¯à®•à®³à¯à®•à¯à®•à¯à®®à®¾à®© பிணைய இணைபà¯à®ªà¯à®•à®³à®¿à®©à¯ மாறà¯à®±à®¤à¯à®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
@@ -2414,128 +6042,80 @@ msgstr "நிலையான கணினி பà¯à®°à®µà®²à®ªà¯à®ªà¯†à®¯à®°à
msgid "System policy prevents modification of the persistent system hostname"
msgstr "நிலையான கணினி பà¯à®°à®µà®²à®ªà¯†à®¯à®°à¯ மாறà¯à®±à®¿à®¯à®®à¯ˆà®ªà¯à®ªà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../src/main.c:158
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "சிகà¯à®©à®²à¯ மூடà¯à®¤à®²à¯ˆ அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
-
-#: ../src/main.c:167
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "சிகà¯à®©à®²à¯ˆà®•à¯ கையாளà¯à®®à¯ இழையை உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
-
-#: ../src/main.c:182
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s à®à®¤à¯ திறபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s\n"
-#: ../src/main.c:188
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s இல௠எழà¯à®¤à¯à®¤à®²à¯ தோலà¯à®µà®¿: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s ஠மூடà¯à®¤à®²à¯ தோலà¯à®µà®¿: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager à®à®±à¯à®•à®©à®µà¯‡ இயஙà¯à®•à®¿à®•à¯à®•à¯Šà®£à¯à®Ÿà¯à®³à¯à®³à®¤à¯ (pid %ld)\n"
-#: ../src/main.c:363
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager பதிபà¯à®ªà¯ˆ அசà¯à®šà®¿à®Ÿà¯à®Ÿà¯ விடà¯à®Ÿà¯à®µà¯†à®³à®¿à®¯à¯‡à®±à¯"
-#: ../src/main.c:364
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "ஒர௠டெமானாக ஆக வேணà¯à®Ÿà®¾à®®à¯"
-#: ../src/main.c:365
+#: ../src/main.c:331
+#| msgid "Don't become a daemon"
+msgid "Don't become a daemon, and log to stderr"
+msgstr "ஒர௠டெமானாக ஆகி sterr இல௠பதிவிட வேணà¯à®Ÿà®¾à®®à¯"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "பதிவ௠நிலை: [%s] இல௠ஒனà¯à®±à¯"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "',' ஆல௠பிரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பதிவ௠டொமைனà¯à®•à®³à¯: [%s] இன௠à®à®¤à¯‡à®©à¯à®®à¯ ஒர௠சேரà¯à®•à¯à®•à¯ˆ"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "அனைதà¯à®¤à¯ எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ செயà¯à®¤à®¿à®•à®³à¯ˆà®¯à¯à®®à¯ à®®à¯à®Ÿà®¿à®µà®Ÿà¯ˆà®¯ செயà¯à®¯à®µà¯à®®à¯"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "ஒர௠PID கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®¤à¯à®¤à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯"
-#: ../src/main.c:366
+#: ../src/main.c:337
msgid "filename"
msgstr "கோபà¯à®ªà¯ பெயரà¯"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "State file location"
msgstr "கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®¤à¯à®¤à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯"
-#: ../src/main.c:367
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:368
-msgid "Config file location"
-msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
-
-#: ../src/main.c:368
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:369
-msgid "List of plugins separated by ','"
-msgstr "',' ஆல௠பிரிதà¯à®¤à®ªà®Ÿà®¿ செரà¯à®•à¯à®¨à®¿à®°à®²à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
-
-#: ../src/main.c:369
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:371
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "பதிவ௠நிலை: [ERR, WARN, INFO, DEBUG] இல௠ஒனà¯à®±à¯"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:374
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"',' ஆல௠பிரிதà¯à®¤à®ªà®Ÿà®¿ பதிவ௠களஙà¯à®•à®³à¯: இவறà¯à®±à®¿à®²à¯ à®à®¤à¯‡à®©à¯à®®à¯ ஒர௠சேரà¯à®•à¯à®•à¯ˆ\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:380
-msgid "An http(s) address for checking internet connectivity"
-msgstr "இணைய இணைபà¯à®ªà¯ˆà®šà¯ சோதிகà¯à®• ஒர௠http(s) à®®à¯à®•à®µà®°à®¿"
-
-#: ../src/main.c:381
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "இணைபà¯à®ªà¯ˆ சோதிகà¯à®•à¯à®®à¯ இடைவெளி (வினாடி)"
-
-#: ../src/main.c:382
-msgid "The expected start of the response"
-msgstr "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பதிலளிபà¯à®ªà®¿à®©à¯ தொடகà¯à®•à®®à¯"
-
-#: ../src/main.c:382
-msgid "Bingo!"
-msgstr "Bingo!"
-
-#: ../src/main.c:387
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "உஙà¯à®•à®³à¯ இயகà¯à®•à¯à®¤à®³à®¤à¯à®¤à®¿à®²à¯ GModules கà¯à®•à¯ ஆதரவிலà¯à®²à¯ˆ!\n"
-#: ../src/main.c:406
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "NetworkManager ஠இயகà¯à®• நீஙà¯à®•à®³à¯ மூலப௠பயனராக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2543,47 +6123,71 @@ msgid ""
"should associate with."
msgstr ""
"NetworkManager எலà¯à®²à®¾ பிணைய இணைபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ கணà¯à®•à®¾à®£à®¿à®¤à¯à®¤à¯\n"
-"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ சிறநà¯à®¤ இணைபà¯à®ªà¯ˆ தானாகவே தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à¯à®®à¯. கணினியில௠உளà¯à®³ வயரà¯à®²à¯†à®¸à¯ காரà¯à®Ÿà¯à®•à®³à¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ சிறநà¯à®¤ இணைபà¯à®ªà¯ˆ தானாகவே தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à¯à®®à¯. கணினியில௠உளà¯à®³ வயரà¯à®²à¯†à®¸à¯ "
+"காரà¯à®Ÿà¯à®•à®³à¯ "
"இணைய வேணà¯à®Ÿà®¿à®¯\n"
"வயரà¯à®²à¯†à®¸à¯ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®•à®³à¯ˆ பயனரே கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®¿à®±à®¤à¯\n"
"."
-#: ../src/main.c:412
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"தவறான விரà¯à®ªà¯à®ªà®®à¯. உதவியை --பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
+"தவறான விரà¯à®ªà¯à®ªà®®à¯. உதவியை --பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ "
+"பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
-#: ../src/main.c:422
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager ஠இயகà¯à®• நீஙà¯à®•à®³à¯ மூலப௠பயனராக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr ""
+"%s. --help஠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
+
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"கடà¯à®Ÿà®³à¯ˆà®µà®°à®¿à®¯à®¿à®²à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ அடையாளம௠காணபà¯à®ªà®Ÿà®¾à®¤ பதிவிடல௠களஙà¯à®•à®³à¯ '%s' "
+"பà¯à®±à®•à¯à®•à®ªà¯à®ªà®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®©.\n"
-#: ../src/main.c:455
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "அமைவாகà¯à®•à®¤à¯à®¤à¯ˆ வாசிபà¯à®ªà®¤à®¿à®²à¯ பிழை: (%d) %s\n"
-#: ../src/main.c:466
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. --help஠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
+#| msgid "Error: Connection activation failed: %s."
+msgid "Error in configuration file: %s.\n"
+msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®²à¯ பிழை: %s.\n"
-#: ../src/main.c:473
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®²à¯à®³à¯à®³ அடையாளம௠காணபà¯à®ªà®Ÿà®¾à®¤ பதிவிடல௠களஙà¯à®•à®³à¯ '%s' "
+"பà¯à®±à®•à¯à®•à®ªà¯à®ªà®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®©.\n"
+
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "நிலைக௠கோபà¯à®ªà¯ %s à®à®ªà¯ பாகà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: (%d) %s\n"
-#: ../src/main.c:490
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "டெமானாகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s [error %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:138
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+#| msgid "Networking"
+msgid "%s Network"
+msgstr "%s பிணையமà¯"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# Created by NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:145
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2592,186 +6196,1311 @@ msgstr ""
"# Merged from %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "பயனà¯à®ªà®Ÿà®•à¯à®•à¯‚டிய DHCP வாடிகà¯à®•à¯ˆà®¯à®¾à®³à®°à¯ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "தà¯à®£à¯ˆà®ªà¯à®°à®¿à®¯à®¾à®¤ DHCP வாடிகà¯à®•à¯ˆà®¯à®¾à®³à®°à¯ '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "கà¯à®±à®¿à®ªà¯à®ªà¯: இநà¯à®¤ libc மறà¯à®¤à¯€à®°à¯à®µà®¾à®³à®°à¯ 3 பெயரà¯à®šà¯‡à®µà¯ˆà®¯à®°à¯à®•à®³à¯à®•à¯à®•à¯ மேல௠தà¯à®£à¯ˆà®ªà¯à®°à®¿à®¯à®µà®¤à®¿à®²à¯à®²à¯ˆ."
+msgstr ""
+"கà¯à®±à®¿à®ªà¯à®ªà¯: இநà¯à®¤ libc மறà¯à®¤à¯€à®°à¯à®µà®¾à®³à®°à¯ 3 பெயரà¯à®šà¯‡à®µà¯ˆà®¯à®°à¯à®•à®³à¯à®•à¯à®•à¯ மேல௠தà¯à®£à¯ˆà®ªà¯à®°à®¿à®¯à®µà®¤à®¿à®²à¯à®²à¯ˆ."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "கீழே படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®³à¯à®³ பெயரà¯à®šà¯‡à®µà¯ˆà®¯à®•à®™à¯à®•à®³à¯ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../src/logging/nm-logging.c:142
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "தெரியாத பதிவ௠நிலை '%s'"
-#: ../src/logging/nm-logging.c:181
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "தெரியாத பதிவ௠டொமைன௠'%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:280
-#: ../src/modem-manager/nm-modem-broadband.c:546 ../src/nm-device-bt.c:352
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA இணைபà¯à®ªà¯ %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®•à®¤à¯à®¤à®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/அமைவாகà¯à®•/கோபà¯à®ªà®•à®¤à¯à®¤à®¿/à®±à¯à®•à®¾à®©/இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' ஆல௠பிரிதà¯à®¤à®ªà®Ÿà®¿ செரà¯à®•à¯à®¨à®¿à®°à®²à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "இணைய இணைபà¯à®ªà¯ˆà®šà¯ சோதிகà¯à®• ஒர௠http(s) à®®à¯à®•à®µà®°à®¿"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "இணைபà¯à®ªà¯ˆ சோதிகà¯à®•à¯à®®à¯ இடைவெளி (வினாடி)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பதிலளிபà¯à®ªà®¿à®©à¯ தொடகà¯à®•à®®à¯"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "Bingo!"
-#: ../src/modem-manager/nm-modem-gsm.c:558
-#: ../src/modem-manager/nm-modem-broadband.c:524 ../src/nm-device-bt.c:348
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
msgid "GSM connection %d"
msgstr "GSM இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-bond.c:200
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA இணைபà¯à®ªà¯ %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "பிணைபà¯à®ªà¯ இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-bridge.c:206
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
#, c-format
-#| msgid "Bond connection %d"
msgid "Bridge connection %d"
msgstr "பிணைபà¯à®ªà¯ இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-bt.c:323
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-bt.c:356
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "வயர௠இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-infiniband.c:301
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand இணைபà¯à®ªà¯ %d"
-#: ../src/nm-device-olpc-mesh.c:311
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "மெஷ௠%d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Team connection %d"
+msgstr "கà¯à®´à¯ இணைபà¯à®ªà¯ %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "VLAN இணைபà¯à®ªà¯ %d"
-#: ../src/nm-manager.c:742
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN இணைபà¯à®ªà¯ %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "சாகà¯à®•à¯†à®Ÿà¯à®Ÿà®¿à®²à¯ தரவிறà¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯ போத௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "netlink செயà¯à®¤à®¿à®¯à®¿à®©à¯ செயலà¯à®®à¯à®±à¯ˆà®¯à®¿à®²à¯ பிழை: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "சாகà¯à®•à¯†à®Ÿà¯à®Ÿà®¿à®²à¯ தரவிறà¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯ போத௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "இணைபà¯à®ªà¯ நிலையை பாரà¯à®µà¯ˆà®¯à®¿à®Ÿ நெடà¯à®‡à®£à¯ˆà®ªà¯à®ªà¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "netlink ஹாணà¯à®Ÿà®¿à®²à¯ நறà¯à®šà®¾à®©à¯à®±à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr "இணைபà¯à®ªà¯ நிலைகà¯à®•à®¾à®© netlink ஹாணà¯à®Ÿà®¿à®²à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "இணைபà¯à®ªà¯ நிலையை கணà¯à®•à®¾à®©à®¿à®•à¯à®• netlink இணைபà¯à®ªà¯ செகà¯à®•à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "netlink கà¯à®´à¯à®µà¯à®Ÿà®©à¯ சேர à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "பிழை மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ இணைபà¯à®ªà¯ செகà¯: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+#| msgid "NetworkManager status"
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager பிணையஙà¯à®•à®³à¯ˆ அணைகà¯à®• வேணà¯à®Ÿà®¿à®¯à¯à®³à¯à®³à®¤à¯"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "கணினி"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3702
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "பிணைபà¯à®ªà¯"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3887
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "அணி"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
msgid "Bridge"
msgstr "பிரிடà¯à®œà¯"
-#: ../test/nm-online.c:111
+#: ../test/nm-online.c:73
#, c-format
msgid "\rConnecting"
msgstr "\rஇணைகà¯à®•à®¿à®±à®¤à¯"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "ஒர௠இணைபà¯à®ªà¯à®•à¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯ நேரமà¯, வினாடிகளில௠(à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯, 30)"
+#: ../test/nm-online.c:104
+#| msgid "Time to wait for a connection, in seconds (default is 30)"
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"ஒர௠இணைபà¯à®ªà¯à®•à¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯ நேரமà¯, வினாடிகளில௠(விரà¯à®ªà¯à®ªà®®à¯ "
+"இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯ 30)"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr "NetworkManager இயஙà¯à®•à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ அலà¯à®²à®¤à¯ இணைகà¯à®•à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ உடனடியாக வெளியேறà¯"
+#: ../test/nm-online.c:105
+#| msgid "Exit immediately if NetworkManager is not running or connecting"
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "NetworkManager இயஙà¯à®•à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ உடனடியாக வெளியேறà¯"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "எதையà¯à®®à¯ அசà¯à®šà®¿à®Ÿ வேணà¯à®Ÿà®¾à®®à¯"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• கிடைகà¯à®•à¯à®®à¯ வரை NetworkManager இல௠காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager தொடகà¯à®• பிணைய இணைபà¯à®ªà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ செயலை à®®à¯à®Ÿà®¿à®•à¯à®•à¯à®®à¯ வரை "
+"காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯."
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
-"தவறான விரà¯à®ªà¯à®ªà®®à¯. சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®• --help à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+"தவறான விரà¯à®ªà¯à®ªà®®à¯. சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®• --help à®à®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "சரி"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+#| msgid "Could not allocate memory for PEM file data."
+msgid "Could not create temporary file: %s"
+msgstr "தறà¯à®•à®¾à®²à®¿à®• கோபà¯à®ªà®¿à®©à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+#| msgid "Writing to %s failed: %s\n"
+msgid "Editor failed: %s"
+msgstr "திரà¯à®¤à¯à®¤à®¿ தோலà¯à®µà®¿à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not re-read file: %s"
+msgstr "கோபà¯à®ªà¯ˆ மீணà¯à®Ÿà¯à®®à¯ வாசிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Ethernet connection %d"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ இணைபà¯à®ªà¯ %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi இணைபà¯à®ªà¯ %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "மொபல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+#| msgid "Bond connection %d"
+msgid "Mobile broadband connection %d"
+msgstr "மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ இணைபà¯à®ªà¯ %d"
+
+#: ../tui/nm-editor-utils.c:190
+#| msgid "DNS"
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+#| msgid "ADSL connection %d"
+msgid "DSL connection %d"
+msgstr "DSL இணைபà¯à®ªà¯ %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "வயரà¯à®Ÿà¯"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "OLPC மெஷà¯"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "PCI"
+
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+#| msgid "Address"
+msgid "Add"
+msgstr "சேரà¯"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "திரà¯à®¤à¯à®¤à¯..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "அழி"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr ""
+"'%s' வகையைச௠சேரà¯à®¨à¯à®¤ இணைபà¯à®ªà¯ '%s' கà¯à®•à¯ திரà¯à®¤à¯à®¤à®¿à®¯à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+#| msgid "Could not allocate memory for PEM file creation."
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ இணைபà¯à®ªà¯ '%s' கà¯à®•à¯ திரà¯à®¤à¯à®¤à®¿à®¯à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../tui/nmt-editor.c:95
+#| msgid "disconnecting"
+msgid "Edit connection"
+msgstr "இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error saving connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆ சேமிகà¯à®•à¯à®®à¯ போத௠பிழை: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+#| msgid "unable to connect to netlink: %s"
+msgid "Unable to save connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆ சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+#| msgid "unable to connect to netlink: %s"
+msgid "Unable to add new connection: %s"
+msgstr "பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆà®šà¯ சேரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "ரதà¯à®¤à¯à®šà¯†à®¯à¯"
+
+#: ../tui/nmt-mtu-entry.c:86
+#| msgid "Default"
+msgid "(default)"
+msgstr "(à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "பைடà¯à®Ÿà¯à®•à®³à¯"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "ரவà¯à®©à¯à®Ÿà¯-ராபினà¯"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "செயலà¯à®®à®¿à®•à¯ மறà¯à®ªà®¿à®°à®¤à®¿"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "ஒளிபà¯à®ªà®°à®ªà¯à®ªà¯"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "சரிசெயà¯à®¤à¯à®•à¯Šà®³à¯à®³à¯à®®à¯ பரபà¯à®ªà®²à¯ சà¯à®®à¯ˆ சமநிலைபà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "சரிசெயà¯à®¤à¯à®•à¯Šà®³à¯à®³à¯à®®à¯ சà¯à®®à¯ˆ சமநிலைபà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (பரிநà¯à®¤à¯à®°à¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯)"
+
+#: ../tui/nmt-page-bond.c:101
+#| msgid "AP"
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "அடிமைகளà¯"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+#| msgid "Mode:"
+msgid "Mode"
+msgstr "à®®à¯à®±à¯ˆ"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "à®®à¯à®¤à®©à¯à®®à¯ˆ"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "இணைபà¯à®ªà¯ கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "அதிரà¯à®µà¯†à®£à¯ கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "லிஙà¯à®•à¯ அப௠தாமதமà¯"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "லிஙà¯à®•à¯ டவà¯à®©à¯ தாமதமà¯"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP இலகà¯à®•à¯à®•à®³à¯"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "பிரிடà¯à®œà¯ போரà¯à®Ÿà¯"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "பாதை செலவà¯"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "ஹேரà¯à®ªà®¿à®©à¯ à®®à¯à®±à¯ˆà®®à¯ˆ"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "பிரிடà¯à®œà¯"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "விநாடிகளà¯"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "பழையதாகà¯à®®à¯ நேரமà¯"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP ஠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ (பரவà¯à®®à¯ மரகà¯à®•à®¿à®³à¯ˆ நெறிமà¯à®±à¯ˆ)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "பகிரà¯à®¤à®²à¯ தாமதமà¯"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "ஹலோ நேரமà¯"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "அதிகபடà¯à®š வயதà¯"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+#| msgid "is not a valid MAC address"
+msgid "Cloned MAC address"
+msgstr "நகலெடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ MAC à®®à¯à®•à®µà®°à®¿"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "தரவà¯à®ªà¯à®ªà®Ÿà®®à¯"
+
+#: ../tui/nmt-page-infiniband.c:52
+#| msgid "connected"
+msgid "Connected"
+msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯ à®®à¯à®±à¯ˆà®®à¯ˆ"
+
+#: ../tui/nmt-page-ip4.c:41
+#| msgid "disabled"
+msgid "Disabled"
+msgstr "à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "தானியகà¯à®•à®®à¯"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "உளà¯à®³à®®à¯ˆ இணைபà¯à®ªà¯"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "கைமà¯à®±à¯ˆ"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "பகிரபà¯à®ªà®Ÿà¯à®Ÿ"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 அமைவாகà¯à®•à®®à¯"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯ இலà¯à®²à¯ˆ)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "ஒர௠தனிபà¯à®ªà®¯à®©à¯ தடமà¯"
+msgstr[1] "%d தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+#| msgid "Address"
+msgid "Addresses"
+msgstr "à®®à¯à®•à®µà®°à®¿à®•à®³à¯"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "DNS சேவையகஙà¯à®•à®³à¯"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "தேடல௠டொமைனà¯à®•à®³à¯"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "ரௌடà¯à®Ÿà®¿à®™à¯"
+
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ தடதà¯à®¤à®¿à®±à¯à®•à¯ இநà¯à®¤ பிணையதà¯à®¤à¯ˆ à®’à®°à¯à®ªà¯‹à®¤à¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¾à®®à¯"
+
+#: ../tui/nmt-page-ip4.c:184
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "Require IPv4 addressing for this connection"
+msgstr "இநà¯à®¤ இணைபà¯à®ªà¯à®•à¯à®•à¯ IPv4 à®®à¯à®•à®µà®°à®¿ தேவை"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "தவிரà¯"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "தானியகà¯à®• (DHCP) மடà¯à®Ÿà¯à®®à¯)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 அமைவாகà¯à®•à®®à¯"
+
+#: ../tui/nmt-page-ip6.c:182
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "Require IPv6 addressing for this connection"
+msgstr "இநà¯à®¤ இணைபà¯à®ªà¯à®•à¯à®•à¯ IPv6 à®®à¯à®•à®µà®°à®¿ தேவை"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "மறை"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "காடà¯à®Ÿà¯"
+
+#: ../tui/nmt-page-main.c:181
+#| msgid "filename"
+msgid "Profile name"
+msgstr "தனியமைபà¯à®ªà¯ பெயரà¯"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "சாதனமà¯"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "தானாகவே இணைகà¯à®•à®µà¯à®®à¯"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "அனைதà¯à®¤à¯ பயனரà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ கிடைகà¯à®•à¯à®®à¯"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "அணி போரà¯à®Ÿà¯"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON அமைவாகà¯à®•à®®à¯"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "அணி"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "பெறà¯à®±à¯‹à®°à¯"
+
+#: ../tui/nmt-page-vlan.c:124
+#| msgid "VLAN"
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "கிளையனà¯à®Ÿà¯"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿"
+
+#: ../tui/nmt-page-wifi.c:71
+#| msgid "Ad-Hoc"
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc பிணையமà¯"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "தானியஙà¯à®•à®¿"
+
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "எதà¯à®µà¯à®®à®¿à®²à¯à®²à¯ˆ"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 தனிபà¯à®ªà®Ÿà¯à®Ÿ"
+
+#: ../tui/nmt-page-wifi.c:87
+#| msgid "Enterprise "
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-பிட௠விசை (Hex அலà¯à®²à®¤à¯ ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+#| msgid "%d (104/128-bit passphrase)"
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-பிட௠கடவà¯à®µà®¾à®•à¯à®•à®¿à®¯à®®à¯"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "மாறà¯à®®à¯ WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+#| msgid "Default"
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+#| msgid "System"
+msgid "Open System"
+msgstr "Open System"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "பகிரபà¯à®ªà®Ÿà¯à®Ÿ விசை"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "சேனலà¯"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "பாதà¯à®•à®¾à®ªà¯à®ªà¯"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(இபà¯à®ªà¯‹à®¤à¯ wpa-enterprise கà¯à®•à¯ ஆதரவ௠இலà¯à®²à¯ˆ...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "விசை"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+#| msgid "WEP "
+msgid "WEP index"
+msgstr "WEP அடà¯à®Ÿà®µà®£à¯ˆ"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(இபà¯à®ªà¯‹à®¤à¯ dynamic-wep கà¯à®•à¯ ஆதரவ௠இலà¯à®²à¯ˆ...)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+#| msgid "filename"
+msgid "Username"
+msgstr "பயனரà¯à®ªà¯†à®¯à®°à¯"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "ஒவà¯à®µà¯Šà®°à¯ à®®à¯à®±à¯ˆà®¯à¯à®®à¯ இநà¯à®¤ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ கேடà¯à®•à®µà¯à®®à¯"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ காடà¯à®Ÿà¯"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "இலகà¯à®•à¯"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "à®®à¯à®©à¯à®ªà¯Šà®°à¯à®¤à¯à®¤à®®à¯"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "அடà¯à®¤à¯à®¤ ஹாபà¯"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "மெடà¯à®°à®¿à®•à¯"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯ à®à®¤à¯à®®à¯ வரையறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "அடையாளமà¯"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "சேவை"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "வயரà¯à®²à¯†à®¸à¯ பிணையதà¯à®¤à®¿à®±à¯à®•à¯ à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"வயரà¯à®²à¯†à®¸à¯ பிணையம௠'%s' ஠அணà¯à®• கடவà¯à®šà¯à®šà¯Šà®±à¯à®•à®³à¯ அலà¯à®²à®¤à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à®•à¯ விசைகள௠"
+"தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../tui/nmt-secret-agent.c:349
+#| msgid "connecting (need authentication)"
+msgid "Wired 802.1X authentication"
+msgstr "ஒயரà¯à®Ÿà¯ 802.1X à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯"
+
+#: ../tui/nmt-secret-agent.c:352
+#| msgid "Networking"
+msgid "Network name"
+msgstr "பிணைய பெயரà¯"
+
+#: ../tui/nmt-secret-agent.c:359
+#| msgid "connecting (need authentication)"
+msgid "DSL authentication"
+msgstr "DSL à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯"
+
+#: ../tui/nmt-secret-agent.c:367
+#| msgid "not required, "
+msgid "PIN code required"
+msgstr "PIN கà¯à®±à®¿à®¯à¯€à®Ÿà¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../tui/nmt-secret-agent.c:368
+#| msgid "Enable or disable mobile broadband devices"
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "PIN கà¯à®±à®¿à®¯à¯€à®Ÿà¯ மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனதà¯à®¤à®¿à®±à¯à®•à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../tui/nmt-secret-agent.c:370
+#| msgid "VPN"
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ பிணையதà¯à®¤à®¿à®©à¯ கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s'஠இணைபà¯à®ªà®¤à®±à¯à®•à¯ ஒர௠கடவà¯à®šà¯à®šà¯Šà®²à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "நீஙà¯à®•à®³à¯ சேரà¯à®•à¯à®• விரà¯à®®à¯à®ªà¯à®®à¯ அடிமை இணைபà¯à®ªà¯ வகையைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "சேரà¯..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "அகறà¯à®±à¯"
+
+#: ../tui/nmtui-connect.c:82
+#| msgid "connection failed"
+msgid "Activation failed"
+msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯"
+
+#: ../tui/nmtui-connect.c:134
+#| msgid "\rConnecting"
+msgid "Connecting..."
+msgstr "இணைகà¯à®•à®¿à®±à®¤à¯..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+#| msgid "List of active connections"
+msgid "Could not activate connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+#| msgid "activated"
+msgid "Activate"
+msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
+
+#: ../tui/nmtui-connect.c:220
+#| msgid "deactivated"
+msgid "Deactivate"
+msgstr "செயலà¯à®®à¯à®Ÿà®•à¯à®•à¯"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "வெளியேறà¯"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+#| msgid "PAN connection %d"
+msgid "No such connection '%s'"
+msgstr "'%s' என ஒர௠இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ"
+
+#: ../tui/nmtui-connect.c:306
+#| msgid "Connection activated\n"
+msgid "Connection is already active"
+msgstr "இணைபà¯à®ªà¯ à®®à¯à®©à¯à®ªà¯‡ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "உரà¯à®µà®¾à®•à¯à®•à®µà¯à®®à¯"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "உரà¯à®µà®¾à®•à¯à®• விரà¯à®®à¯à®ªà¯à®®à¯ இணைபà¯à®ªà¯ வகையை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯."
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"நீஙà¯à®•à®³à¯ ஒர௠VPN ஠உரà¯à®µà®¾à®•à¯à®•à¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯ எனிலà¯, ஆனால௠அநà¯à®¤ VPN படà¯à®Ÿà®¿à®¯à®²à®¿à®²à¯ "
+"இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, சரியான VPN செரà¯à®•à¯à®¨à®¿à®°à®²à¯ நிறà¯à®µà®ªà¯à®ªà®Ÿà®¾à®¤à®¿à®°à¯à®•à¯à®•à®²à®¾à®®à¯."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+#| msgid "User connections"
+msgid "New Connection"
+msgstr "பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+#| msgid "unable to connect to netlink: %s"
+msgid "Unable to delete connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "நிசà¯à®šà®¯à®®à¯ இணைபà¯à®ªà¯ '%s' ஠அழிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+#| msgid "Error: cannot delete unknown connection(s): %s."
+msgid "Could not delete connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆ அழிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "வழஙà¯à®•à®¿ பெயரை அமைகà¯à®•à®µà¯à®®à¯"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "வழஙà¯à®•à®¿ பெயரà¯"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "வாழஙà¯à®•à®¿ பெயரை '%s' என அமைகà¯à®•à®µà¯à®®à¯"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+#| msgid "unable to connect to netlink: %s"
+msgid "Unable to set hostname: %s"
+msgstr "வழஙà¯à®•à®¿ பெயரை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+#| msgid "connecting"
+msgid "connection"
+msgstr "இணைபà¯à®ªà¯"
+
+#: ../tui/nmtui.c:60
+#| msgid "disconnecting"
+msgid "Edit a connection"
+msgstr "ஒர௠இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../tui/nmtui.c:63
+#| msgid "Active connection details"
+msgid "Activate a connection"
+msgstr "ஒர௠இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "பà¯à®¤à®¿à®¯ வழஙà¯à®•à®¿ பெயரà¯"
+
+#: ../tui/nmtui.c:66
+#| msgid "Modify persistent system hostname"
+msgid "Set system hostname"
+msgstr "கணினி வழஙà¯à®•à®¿ பெயரை அமைகà¯à®•à®µà¯à®®à¯"
+
+#: ../tui/nmtui.c:89
+#| msgid "NetworkManager status"
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "ஒர௠விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯"
+
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "பயனà¯à®ªà®¾à®Ÿà¯"
+
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ˆ பாகà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../tui/nmtui.c:229
+#| msgid "Error: NetworkManager is not running."
+msgid "NetworkManager is not running."
+msgstr "NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#~ msgid "IP"
+#~ msgstr "IP"
+
+#~| msgid "Error: 'con list': %s"
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "பிழை: 'list configured': %s"
+
+#~| msgid "Active connections"
+#~ msgid "List of configured connections"
+#~ msgstr "அமைவாகà¯à®•à®®à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ இணைபà¯à®ªà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
+
+#~| msgid "Error: 'con list': %s"
+#~ msgid "Error: 'show configured': %s"
+#~ msgstr "பிழை: 'show configured': %s"
+
+#~| msgid "Error: 'con list': %s; allowed fields: %s"
+#~ msgid "Error: 'show configured': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'show configured': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~| msgid "Error: 'con list': %s"
+#~ msgid "Error: 'list active': %s"
+#~ msgstr "பிழை: 'list active': %s"
+
+#~| msgid "Error: 'con list': %s; allowed fields: %s"
+#~ msgid "Error: 'list active': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'list active': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~| msgid "Error: 'con status': %s; allowed fields: %s"
+#~ msgid "Error: 'show active': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'show active': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~ msgid "Error: No suitable device found: %s."
+#~ msgstr "பிழை: தகà¯à®¤à®¿à®¯à®¾à®© சாதனம௠காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ: %s."
+
+#~ msgid "Error: No suitable device found."
+#~ msgstr "பிழை: தகà¯à®¤à®¿à®¯à®¾à®© சாதனம௠காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#~ msgid ""
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr ""
+#~ "பிழை: 'connection show' கà¯à®•à¯ 'configured' அலலà¯à®¤à¯ 'active' கடà¯à®Ÿà®³à¯ˆ "
+#~ "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯."
+
+#~ msgid "Encrypted: "
+#~ msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: "
+
+#~ msgid "WPA "
+#~ msgstr "WPA "
+
+#~ msgid "WPA2 "
+#~ msgstr "WPA2 "
+
+#~ msgid "Infrastructure"
+#~ msgstr "அடிதà¯à®¤à®³à®®à¯"
+
+#~| msgid "Error: 'dev list': %s; allowed fields: %s"
+#~ msgid "Error: 'device show': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'device show': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~ msgid "not connected"
+#~ msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#~| msgid "Error: 'dev status': %s; allowed fields: %s"
+#~ msgid "Error: 'device status': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'device status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~| msgid "Error: 'dev wifi': %s; allowed fields: %s"
+#~ msgid "Error: 'device wifi': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'device wifi': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~| msgid "Error: 'dev wimax': %s; allowed fields: %s"
+#~ msgid "Error: 'device wimax': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'device wimax': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~| msgid "Error: 'con list': %s; allowed fields: %s"
+#~ msgid "Error: %s (allowed fields: %s)"
+#~ msgstr "பிழை: %s (அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s)"
+
+#~| msgid "Error: 'nm permissions': %s; allowed fields: %s"
+#~ msgid "Error: 'general permissions': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'general permissions': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~| msgid "Error: 'con list': %s; allowed fields: %s"
+#~ msgid "Error: 'general logging': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'general logging': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~ msgid "Caught signal %d, shutting down..."
+#~ msgstr "%d சிகà¯à®©à®²à¯ கிடைதà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯, பணி நிறà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯..."
+
+#~ msgid "setting '%s' is required"
+#~ msgstr "அமைவ௠'%s' தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#~ msgid "'%s' setting is required for the connection when the property is set"
+#~ msgstr "பணà¯à®ªà¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ போத௠இணைபà¯à®ªà¯à®•à¯à®•à¯ '%s' அமைபà¯à®ªà¯ தேவை"
+
+#~ msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#~ msgstr "இணைபà¯à®ªà¯ நிலையை கணà¯à®•à®¾à®©à®¿à®•à¯à®• netlink இணைபà¯à®ªà¯ செகà¯à®•à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#~ msgid "error updating link cache: %s"
+#~ msgstr "பிழை மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ இணைபà¯à®ªà¯ செகà¯: %s"
+
+#~ msgid "Waits for a successful connection in NetworkManager."
+#~ msgstr "இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• கிடைகà¯à®•à¯à®®à¯ வரை NetworkManager இல௠காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯."
+
+#~ msgid "Error: no valid parameter specified."
+#~ msgstr "பிழை: கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿ சரியான அளவà¯à®°à¯ இலà¯à®²à¯ˆ."
+
+#~ msgid "Error: Can't find out if NetworkManager is running: %s."
+#~ msgstr "பிழை: NetworkManager இயஙà¯à®•à¯à®•à®¿à®±à®¤à®¾ எனக௠கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s."
+
+#~ msgid "Error: id or uuid has to be specified."
+#~ msgstr "பிழை: id அலà¯à®²à®¤à¯ uuid கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯."
+
+#~ msgid "Warning: Connection not active\n"
+#~ msgstr "எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: இணைபà¯à®ªà¯ செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ இலà¯à®²à¯ˆ\n"
+
+#~ msgid "Error: could not connect to D-Bus."
+#~ msgstr "பிழை: D-பஸà¯à®¸à¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#~ msgid "Error: Device '%s' is not a WiFi device."
+#~ msgstr "பிழை: சாதனம௠'%s' ஒர௠WiFi சாதனம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "NET-ENABLED"
+#~ msgstr "NET-ENABLED"
+
+#~ msgid "WIFI-HARDWARE"
+#~ msgstr "WIFI-HARDWARE"
+
+#~ msgid "WWAN-HARDWARE"
+#~ msgstr "WWAN-HARDWARE"
+
+#~ msgid "WIMAX-HARDWARE"
+#~ msgstr "WIMAX-HARDWARE"
+
+#~ msgid "Error: 'nm status': %s; allowed fields: %s"
+#~ msgstr "பிழை: 'nm status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#~ msgid "Error: Couldn't connect to system bus: %s"
+#~ msgstr "பிழை: கணினி பஸà¯à®Ÿà®©à¯ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy."
+#~ msgstr "பிழை: D-பஸ௠பொரà¯à®³à¯ பதிலியை உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#~ msgid "Error in sleep: %s"
+#~ msgstr "ஸà¯à®²à¯€à®ªà¯à®ªà®¿à®²à¯ பிழை: %s"
+
+#~ msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr ""
+#~ "பிழை: தவறான 'enable' அளவà¯à®°à¯: '%s'; 'true' அலà¯à®²à®¤à¯ 'false' à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+
+#~ msgid "Error: Sleeping status is not exported by NetworkManager."
+#~ msgstr "பிழை: உறஙà¯à®•à¯à®®à¯ நிலை NetworkManager ஆல௠à®à®±à¯à®±à¯à®®à®¤à®¿ செயà¯à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#~ msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr ""
+#~ "பிழை: தவறான 'sleep' அளவà¯à®°à¯: '%s'; 'true' அலà¯à®²à®¤à¯ 'false' à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+
+#~ msgid "WiFi enabled"
+#~ msgstr "WiFi செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#~ msgid "WWAN enabled"
+#~ msgstr "WWAN செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#~ msgid "WiMAX enabled"
+#~ msgstr "WiMAX செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+#~ msgstr ""
+#~ "பிழை: org.freedesktop.DBus கà¯à®•à¯ D-பஸ௠பொரà¯à®³à¯ பதிலியை உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+
+#~ msgid "Error: NameHasOwner request failed: %s"
+#~ msgstr "பிழை: NameHasOwner கோரிகà¯à®•à¯ˆ தோலà¯à®µà®¿: %s"
+
+#~ msgid ""
+#~ "Log domains separated by ',': any combination of\n"
+#~ " [NONE,HW,RFKILL,ETHER,"
+#~ "WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,"
+#~ "AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,"
+#~ "CORE,DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL,ADSL]"
+#~ msgstr ""
+#~ "',' ஆல௠பிரிதà¯à®¤à®ªà®Ÿà®¿ பதிவ௠களஙà¯à®•à®³à¯: இவறà¯à®±à®¿à®²à¯ à®à®¤à¯‡à®©à¯à®®à¯ ஒர௠சேரà¯à®•à¯à®•à¯ˆ\n"
+#~ " [NONE,HW,RFKILL,ETHER,"
+#~ "WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,"
+#~ "AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,"
+#~ "CORE,DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL,ADSL]"
+
+#~ msgid "Not enough memory to store PEM file data."
+#~ msgstr "PEM கோபà¯à®ªà¯ தரவை சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Not enough memory to store private key data."
+#~ msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠தரவைச௠சேமிகà¯à®• போதிய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Not enough memory to store certificate data."
+#~ msgstr "சானà¯à®±à®¿à®¤à®´à¯ தரவை சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Not enough memory to store the IV."
+#~ msgstr "IV஠சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Not enough memory to decrypt private key."
+#~ msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• போதை நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Not enough memory to store decrypted private key."
+#~ msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ சேமிகà¯à®• போதை நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Not enough memory for decrypted key buffer."
+#~ msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®• விசை பஃபà¯à®ªà®°à¯à®•à¯à®•à®¾à®© போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Could not allocate memory for encrypting."
+#~ msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© நினைவகதà¯à®¤à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#~ msgid "Not enough memory to make encryption key."
+#~ msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• விசையை செயà¯à®¯ போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#~ msgid "Could not allocate memory for writing IV to PEM file."
+#~ msgstr "PEM கோபà¯à®ªà®¿à®²à¯ IV஠எழà¯à®¤à¯à®µà®¤à®±à¯à®•à¯ போதைய நினைவக ஒதà¯à®•à¯à®•à¯€à®Ÿà¯ இலà¯à®²à¯ˆ."
+
+#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
+#~ msgstr ""
+#~ "PEM கோபà¯à®ªà®¿à®±à¯à®•à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• விசையை எழà¯à®¤à¯à®µà®¤à®±à¯à®•à®¾à®© போதைய நினைவகதà¯à®¤à¯ˆ ஒதà¯à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
#~ msgid "SCOPE"
#~ msgstr "SCOPE"
@@ -2788,24 +7517,15 @@ msgstr ""
#~ msgid "System connections"
#~ msgstr "கணினி இணைபà¯à®ªà¯à®•à®³à¯"
-#~ msgid "User connections"
-#~ msgstr "பயனர௠இணைபà¯à®ªà¯à®•à®³à¯"
-
#~ msgid "state: %s\n"
#~ msgstr "நிலை: %s\n"
-#~ msgid "Connection activated\n"
-#~ msgstr "இணைபà¯à®ªà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
-
#~ msgid "state: %s (%d)\n"
#~ msgstr "நிலை: %s (%d)\n"
#~ msgid "Error: Obtaining active connection for '%s' failed."
#~ msgstr "Error: Obtaining active connection for '%s' failed."
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ நிலை: %s\n"
-
#~ msgid "Active connection path: %s\n"
#~ msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ பாதை: %s\n"
@@ -2821,9 +7541,6 @@ msgstr ""
#~ msgid "Device state: %d (%s)\n"
#~ msgstr "சாதன நிலை: %d (%s)\n"
-#~ msgid "not set"
-#~ msgstr "அமைகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-
#~ msgid "Auto %s"
#~ msgstr "தானியகà¯à®•à®¿ %s"
@@ -2833,24 +7550,12 @@ msgstr ""
#~ msgid "Name"
#~ msgstr "பெயரà¯"
-#~ msgid "User connections:\n"
-#~ msgstr "பயனர௠இணைபà¯à®ªà¯à®•à®³à¯:\n"
-
#~ msgid "System-wide connections"
#~ msgstr "பரநà¯à®¤ கணினி இணைபà¯à®ªà¯à®•à®³à¯"
-#~ msgid "Default"
-#~ msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯"
-
-#~ msgid "Service"
-#~ msgstr "சேவை"
-
#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
#~ msgstr "%s, %s, Freq %d MHz, விகிதம௠%d Mb/s, வலிமை %d"
-#~ msgid "Device"
-#~ msgstr "சாதனமà¯"
-
#~ msgid "Driver"
#~ msgstr "இயகà¯à®•à®¿"
@@ -2922,15 +7627,6 @@ msgstr ""
#~ "\n"
#~ " IPv4 அமைவà¯à®•à®³à¯:\n"
-#~ msgid "Address"
-#~ msgstr "à®®à¯à®•à®µà®°à®¿"
-
-#~ msgid "Prefix"
-#~ msgstr "à®®à¯à®©à¯à®ªà¯Šà®°à¯à®¤à¯à®¤à®®à¯"
-
-#~ msgid "Gateway"
-#~ msgstr "நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯"
-
#~ msgid "Device:"
#~ msgstr "சாதனமà¯:"
@@ -2943,9 +7639,6 @@ msgstr ""
#~ msgid "Frequency:"
#~ msgstr "அடிகà¯à®•à®Ÿà®¿:"
-#~ msgid "Mode:"
-#~ msgstr "à®®à¯à®±à¯ˆà®®à¯ˆ:"
-
#~ msgid "Ad-hoc"
#~ msgstr "Ad-hoc"
@@ -2984,6 +7677,3 @@ msgstr ""
#~ msgid "unable to join netlink group for monitoring link status: %s"
#~ msgstr "இணைபà¯à®ªà¯ நிலையை கணà¯à®•à®¾à®©à®¿à®•à¯à®• netlink கà¯à®´à¯à®µà®¿à®²à¯ சேர à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-
-#~ msgid "unable to connect to netlink: %s"
-#~ msgstr "netlinkஉடன௠இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
diff --git a/po/te.po b/po/te.po
index b84730e50..dbbd14c98 100644
--- a/po/te.po
+++ b/po/te.po
@@ -3,1430 +3,3353 @@
# Copyright (C) 2009 NetworkManager's COPYRIGHT HOLDER
# This file is distributed under the same license as the NetworkManager package.
#
-# Krishna Babu K <kkrothap@redhat.com>, 2009, 2010, 2012.
+# Krishna Babu K <kkrothap@redhat.com>, 2009, 2010, 2012, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: te\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-10-22 15:26+0000\n"
-"PO-Revision-Date: 2012-11-27 16:24+0530\n"
-"Last-Translator: Krishnababu Krothapalli <kkrothap@redhat.com>\n"
-"Language-Team: Telugu <en@li.org>\n"
-"Language: te\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2014-01-29 17:53+0630\n"
+"Last-Translator: Krishnababu Krothapalli <kkrothap@redhat.com>\n"
+"Language-Team: Telugu <kde-i18n-doc@kde.org>\n"
+"Language: te\n"
"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"\n"
-"\n"
-"\n"
-"\n"
-"\n"
-"\n"
-"\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:128
-#: ../cli/src/connections.c:162
+#: ../cli/src/common.c:34 ../cli/src/common.c:46 ../cli/src/common.c:54
+#: ../cli/src/common.c:65 ../cli/src/connections.c:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
msgstr "GROUP"
-#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "ADDRESS"
-#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ROUTE"
-#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
-#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "DOMAIN"
-#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
-#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "చెలà±à°²à°¨à°¿ IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <1-32> à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "చెలà±à°²à°¨à°¿ గేటà±â€Œà°µà±‡ '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "చెలà±à°²à°¨à°¿ IPv6 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <1-128> à°…à°¨à±à°®à°¤à°¿à°‚చెనà±"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "చెలà±à°²à°¨à°¿ IPv4 రౌటౠ'%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <0-32> à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "తరà±à°µà°¾à°¤à°¿ చెలà±à°²à°¨à°¿ హాపౠచిరà±à°¨à°¾à°®à°¾ '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "చెలà±à°²à°¨à°¿ మాటà±à°°à°¿à°•à± '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "చెలà±à°²à°¨à°¿ IPv6 రౌటౠ'%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <0-128> à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨"
+
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "నిరà±à°µà°¹à°¿à°‚చని"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°²à±‡à°¨à°¿"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "అననà±à°¸à°‚ధానమైన"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (సిదà±à°¦à°ªà°¡à±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (ఆకృతీకరించబడà±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (ధృవీకరణమౠఅవసరమà±)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (IP ఆకృతీకరణనౠపొందà±à°šà±à°¨à±à°¨à°¦à°¿)"
-#: ../cli/src/common.c:380
-#| msgid "connecting (getting IP configuration)"
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (IP à°…à°¨à±à°¸à°‚ధానతనౠపరిశీలిసà±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:382
-#| msgid "connecting (getting IP configuration)"
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (à°¦à±à°µà°¿à°¤à±€à°¯ à°…à°¨à±à°¸à°‚ధానాలనౠపà±à°°à°¾à°°à°‚à°­à°¿à°¸à±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "à°…à°¨à±à°¸à°‚ధానమైంది"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:633
-#| msgid "activating"
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
msgid "deactivating"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚చేసà±à°¤à±‹à°‚ది"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "à°…à°¨à±à°¸à°‚ధానమౠవిఫలమైంది"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:636
-#: ../cli/src/connections.c:659 ../cli/src/connections.c:1351
-#: ../cli/src/devices.c:645 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:457
-#: ../src/main.c:476
+#: ../cli/src/common.c:643 ../cli/src/connections.c:737
+#: ../cli/src/connections.c:760 ../cli/src/connections.c:1462
+#: ../cli/src/devices.c:827 ../cli/src/devices.c:2257
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:732 ../cli/src/settings.c:760
+#: ../cli/src/settings.c:822 ../cli/src/settings.c:1137
+#: ../cli/src/utils.c:1080 ../src/main.c:470 ../src/main.c:498
msgid "unknown"
msgstr "తెలియని"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "ఠకారణం ఇవà±à°µà°²à±‡à°¦à±"
-#: ../cli/src/common.c:402
-#| msgid "Unknown"
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
msgid "Unknown error"
msgstr "తెలియని దోషం"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "పరికరం యిపà±à°ªà±à°¡à± నిరà±à°µà°¹à°¿à°‚చబడà±à°¤à±‹à°‚ది"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "పరికరం యిపà±à°ªà±à°¡à± నిరà±à°µà°¹à°¿à°‚చబడà±à°Ÿà°²à±‡à°¦à±"
-#: ../cli/src/common.c:411
-#| msgid "the VPN service returned invalid configuration"
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "ఆకృతీకరణ కొరకౠపరికరం సిదà±à°¦à°‚కాలేదà±"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:667
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"à°à°ªà°¿ ఆకృతీకరణననౠరిజరà±à°µà±à°šà±‡à°¸à°¿ కలిగివà±à°‚డలేదౠ(à°šà°¿à°°à±à°¨à°¾à°®à°¾, సమయమà±à°—à°¿à°‚à°ªà±, మొద. "
"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°²à±‡à°µà±)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "à°à°ªà°¿ ఆకృతీకరణ యిక చెలà±à°²à±à°¨à°¦à°¿ కాదà±"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "రహసà±à°¯à°¾à°²à± అవసరమైనవి, అయితే అందించబడలేదà±"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X సపà±à°²à°¿à°•à±†à°‚à°Ÿà± à°…à°¨à±à°¸à°‚ధానంపోయింది"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X సపà±à°²à°¿à°•à±†à°‚టౠఆకృతీకరణ విఫలమైంది"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X సపà±à°²à°¿à°•à±†à°‚టౠవిఫలమైంది"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "ధృవీకరణకౠ802.1X సపà±à°²à°¿à°•à±†à°‚టౠచాలా సమయం తీసà±à°•à±Šà°‚ది"
-#: ../cli/src/common.c:435
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమవà±à°Ÿà°•à± PPP సేవ విఫలమైంది"
-#: ../cli/src/common.c:438
-#| msgid "VPN disconnected"
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP సేవ తెంచబడింది"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP విఫలమైంది"
-#: ../cli/src/common.c:444
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± DHCP à°•à±à°²à±ˆà°‚టౠవిఫలమైంది"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP à°•à±à°²à±ˆà°‚టౠదోషం"
-#: ../cli/src/common.c:450
-#| msgid "VPN connection failed"
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP à°•à±à°²à±ˆà°‚టౠవిఫలమైంది"
-#: ../cli/src/common.c:453
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± భాగసà±à°µà°¾à°®à±à°¯ à°…à°¨à±à°¸à°‚ధానం విఫలమైంది"
-#: ../cli/src/common.c:456
-#| msgid "connection failed"
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "భాగసà±à°µà°¾à°®à±à°¯ à°…à°¨à±à°¸à°‚ధానం సేవ విఫలమైంది"
-#: ../cli/src/common.c:459
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± AutoIP సేవ విఫలమైంది"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP సేవ దోషం"
-#: ../cli/src/common.c:465
-#| msgid "the VPN service failed to start"
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP సేవ విఫలమైంది"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "లైనౠరదà±à°¦à±€à°—à°¾ à°µà±à°‚ది"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "డైలౠటోనౠలేదà±"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "ఠవాహకం à°à°°à±à°ªà°°à°šà°²à±‡à°• పోయింది"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "డయిలింగౠఅభà±à°¯à°°à±à°§à°¨ కాలం మించినది"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "డయిలింగౠయతà±à°¨à°‚ విఫలమైంది"
-#: ../cli/src/common.c:483
-#| msgid "Error: Connection activation failed."
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "మోడెమౠసిదà±à°¦à±€à°•à°°à°£ విఫలమైంది"
-#: ../cli/src/common.c:486
-#| msgid "Failed to decrypt the private key."
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "తెలిపిన APNనౠయెంపికచేయà±à°Ÿà°•à± విఫలమైంది"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
msgstr "నెటà±à°µà°°à±à°•à±à°² కొరకౠఅనà±à°µà±‡à°·à°¿à°‚à°šà±à°Ÿà°²à±‡à°¦à±"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "నెటà±à°µà°°à±à°•à± నమోదీకరణ తిరసà±à°•à°°à°¿à°‚చబడింది"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "నెటà±à°µà°°à±à°•à± నమోదీకరణ సమయం మించినది"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "à°…à°­à±à°¯à°°à±à°§à°¿à°‚à°šà°¿à°¨ నెటà±à°µà°°à±à°•à±à°¤à±‹ నమోదగà±à°Ÿà°•à± విఫలమైంది"
-#: ../cli/src/common.c:501
-#| msgid "VPN connection failed"
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "పినౠపరిశీలన విఫలమైంది"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "పరికరమౠకొరకౠతపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ కావలసిన à°«à°°à±à°®à±à°µà±‡à°°à± దొరకటà±à°²à±‡à°¦à±"
-#: ../cli/src/common.c:507
-#| msgid "the connection was removed"
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "పరికరం తీసివేయబడింది"
-#: ../cli/src/common.c:510
-#| msgid "NetworkManager status"
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
-msgstr "నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• à°¸à±à°²à±€à°ªà±â€Œà°²à±‹à°•à°¿ వెళà±à°³à°¿à°‚ది"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°¸à±à°²à±€à°ªà±â€Œà°²à±‹à°•à°¿ వెళà±à°³à°¿à°‚ది"
-#: ../cli/src/common.c:513
-#| msgid "no active connection or device"
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "పరికరం యొకà±à°• à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానం మాయమైంది"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "వాడà±à°•à°°à°¿ లేదా à°•à±à°²à±ˆà°‚టౠచేత పరికరం à°…à°¨à±à°¸à°‚ధానం తీసివేయబడింది"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "వాహకం/లంకె మారà±à°šà°¬à°¡à°¿à°‚ది"
-#: ../cli/src/common.c:522
-#| msgid "the connection was removed"
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
msgstr "పరికరపౠవà±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం పరిగణించడమైంది"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "సపà±à°²à°¿à°•à±†à°‚టౠయిపà±à°ªà±à°¡à± à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ à°µà±à°‚ది"
-#: ../cli/src/common.c:528
-#| msgid "'dhcpcd' could be found."
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "మోడెమౠకనà±à°—ొనబడలేదà±"
-#: ../cli/src/common.c:531
-#| msgid "the connection attempt timed out"
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "à°¬à±à°²à±‚టూతౠఅనà±à°¸à°‚ధానం విఫలమైంది లేదా సమయం మించెనà±"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠకారà±à°¡à± చొపà±à°ªà°¿à°‚చలేదà±"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠపినౠఅవసరం"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠPUK అవసరం"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠసరికానిది"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "à°…à°¨à±à°¸à°‚ధానించిన రీతిని యినà±à°«à±€à°¬à°¾à°‚డౠపరికరం తోడà±à°ªà°¾à°Ÿà±à°¨à±€à°¯à°Ÿà±à°²à±‡à°¦à±"
-#: ../cli/src/common.c:549
-#| msgid "connection failed"
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "à°…à°¨à±à°¸à°‚ధానం యొకà±à°• ఆధారం విఫలమైంది"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL à°¬à±à°°à°¿à°¡à±à°œà± నందౠRFC 2684 ఈథరà±à°¨à±†à°Ÿà±â€Œà°¤à±‹ వొక సమసà±à°¯"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±"
-#: ../cli/src/common.c:558
-#| msgid "'dhclient' could be found."
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi నెటà±à°µà°°à±à°•à± à°•à°¨à±à°—ొనలేక పోయింది"
-#: ../cli/src/common.c:561
-msgid "A seconadary connection of the base connection failed"
+#: ../cli/src/common.c:814
+msgid "A secondary connection of the base connection failed"
msgstr "à°ªà±à°°à°¾à°§à°®à°¿à°• à°…à°¨à±à°¸à°‚ధానం యొకà±à°• à°¦à±à°µà°¿à°¤à±€à°¯ à°…à°¨à±à°¸à°‚ధానం విఫలమైంది"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:294 ../cli/src/devices.c:310
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:477
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "DCB లేదా FCoE అమరà±à°ªà± విఫలమైంది"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "teamd నియంతà±à°°à°£ విఫలమైంది"
+
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
msgid "Unknown"
msgstr "తెలియని"
-#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:129
-#: ../cli/src/devices.c:107 ../cli/src/devices.c:131 ../cli/src/devices.c:141
-#: ../cli/src/devices.c:151 ../cli/src/devices.c:165 ../cli/src/devices.c:179
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:217 ../cli/src/devices.c:226
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤à°¾ మాపౠ'%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ '%s' చెలà±à°²à°¨à°¿à°¦à°¿ (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ టీమౠఆకృతీకరణ కాదౠలేదా ఫైలౠపేరౠకాదà±."
+
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "పేరౠఅమరà±à°šà°¾à°²à°¾?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "లకà±à°·à°£à°‚ పేరా?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:"
+
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:175
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:143 ../cli/src/devices.c:158
+#: ../cli/src/devices.c:171 ../cli/src/devices.c:197 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:221
msgid "NAME"
msgstr "NAME"
-#. 0
-#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:163
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:204
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:201
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:88 ../cli/src/devices.c:200
msgid "TYPE"
msgstr "TYPE"
-#. 2
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:71
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
-#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
-#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
-#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "READONLY"
-#. 6
-#. 8
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:66 ../cli/src/connections.c:137
-#: ../cli/src/devices.c:73 ../cli/src/devices.c:191 ../cli/src/devices.c:207
+#: ../cli/src/connections.c:75 ../cli/src/connections.c:183
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:187 ../cli/src/devices.c:203
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#. 2
-#: ../cli/src/connections.c:131
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "DEVICES"
-#. 3
-#. 1
-#. 8
-#. 1
-#: ../cli/src/connections.c:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:116 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATE"
-#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "DEFAULT"
-#. 5
-#: ../cli/src/connections.c:134
-#| msgid "DEFAULT"
+#: ../cli/src/connections.c:180
msgid "DEFAULT6"
msgstr "DEFAULT6"
-#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
+#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
msgid "VPN"
msgstr "VPN"
-#. 9
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON-PATH"
-#. 10
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:185
msgid "ZONE"
msgstr "ZONE"
-#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:186
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "GENERAL"
-
-#. 0
-#: ../cli/src/connections.c:149
-#| msgid "TKIP"
-msgid "IP"
-msgstr "IP"
-
-#. 1
-#: ../cli/src/connections.c:164
-#| msgid "NAME"
+#: ../cli/src/connections.c:202
msgid "USERNAME"
msgstr "USERNAME"
-#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:203
msgid "GATEWAY"
msgstr "GATEWAY"
-#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:204
msgid "BANNER"
msgstr "BANNER"
-#. 4
-#: ../cli/src/connections.c:167
-#| msgid "STATE"
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
msgstr "VPN-STATE"
-#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:206
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
-#, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down }\n"
-#| "\n"
-#| " list [id <id> | uuid <id> | system | user]\n"
-#| " status\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
-msgid ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
-"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-msgstr ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
-"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-
-#: ../cli/src/connections.c:249 ../cli/src/connections.c:609
-#, c-format
-msgid "Error: 'con list': %s"
-msgstr "దోషమà±: 'con list': %s"
-
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
-#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "దోషమà±: 'con list': %s; à°…à°¨à±à°®à°¤à°¿à°‚చబడౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à±: %s"
-
-#: ../cli/src/connections.c:259
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+msgid "IP6"
+msgstr "IP6"
+
+#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:255
+#, c-format
+msgid ""
+"Usage: nmcli connection { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | path] <ID>]\n"
+" show active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [id | uuid | path] <ID> <setting>.<property> <value>\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
+"\n"
+
+#: ../cli/src/connections.c:278
+#, c-format
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Show connections which are currently used by a device to connect to a "
+"network.\n"
+"Without a parameter, all active connections are listed. When <ID> is "
+"provided,\n"
+"the connection details are displayed instead.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Show in-memory and on-disk connections, some of which may also be active if\n"
+"a device is using that connection profile. Without a parameter, all profiles\n"
+"are listed. When <ID> is provided, the profile details are displayed instead."
+"\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"నెటà±à°µà°°à±à°•à±à°•à± à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± పరికరంచేత à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ ఉపయోగించబడే à°…à°¨à±à°¸à°‚ధానాలౠ"
+"చూపà±à°¨à±.\n"
+"పారామితి లేకà±à°‚à°¡à°¾, à°…à°¨à±à°¨à°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానాలౠజాబితా చేయబడà±à°¨à±. <ID> "
+"ఇచà±à°šà°¿à°¨à°ªà±à°ªà±à°¡à±,\n"
+"à°…à°¨à±à°¸à°‚ధానం వివరాలౠపà±à°°à°¦à°°à±à°¶à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"in-memory మరియౠon-disk à°…à°¨à±à°¸à°‚ధానాలౠచూపà±à°¨à±, ఒకవేళ పరికరం à°† à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°²à± "
+"ఉపయోగిసà±à°¤à±à°‚టే\n"
+"వాటిలో కొనà±à°¨à°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚à°—à°¾ à°µà±à°‚డివండవచà±à°šà±. పారామితి లేకà±à°‚à°¡à°¾, à°…à°¨à±à°¨à°¿ à°ªà±à°°à±Šà°«à±ˆà°³à±à°³à±\n"
+"జాబితా చేయబడి à°µà±à°¨à±à°¨à°¾à°¯à°¿. <ID> అందించబడినపà±à°ªà±à°¡à±, à°ªà±à°°à±Šà°«à±ˆà°²à± వివరాలౠ"
+"à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚చబడà±à°¨à±."
+"\n"
+"\n"
+
+#: ../cli/src/connections.c:297
+#, c-format
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"పరికరం పైన à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయà±à°¨à±. à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయà±à°Ÿà°•à± à°ªà±à°°à±Šà°«à±ˆà°²à± à°…à°¨à±à°¨à°¦à°¿ "
+"దాని\n"
+"పేరà±, UUID లేదా D-Bus పాతౠచే à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"పరికరంనౠఒక à°…à°¨à±à°¸à°‚ధానంతో à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయà±à°¨à±. à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°²à± à°…à°¨à±à°¨à°¦à°¿\n"
+"NetworkManager చే à°¸à±à°µà°¯à°‚చాలకంగా ఎంపికకాబడà±à°¨à±.\n"
+"\n"
+"ifname - దేనిపైన à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయాలో à°† పరికరం తెలà±à°ªà±à°¨à±\n"
+"ap - à°…à°¨à±à°¸à°‚ధానం కావడానికి AP తెలà±à°ªà±à°¨à± (Wi-Fi కొరకౠమాతà±à°°à°®à±‡ చెలà±à°²à±à°¨à±)\n"
+"nsp - à°…à°¨à±à°¸à°‚ధానం కావడానికి NSP తెలà±à°ªà±à°¨à± (WiMAX కొరకౠమాతà±à°°à°®à±‡ చెలà±à°²à±à°¨à±)\n"
+"\n"
+
+#: ../cli/src/connections.c:318
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"à°’à°• పరికరం à°¨à±à°‚à°¡à°¿ à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚ చేయి (పరికరంనౠఇకపై "
+"à°¸à±à°µà°¯à°‚చాలకంగా-à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ à°…à°—à±à°Ÿà°¨à±\n"
+"నిరోధించకà±à°‚à°¡à°¾). à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚ చేయవలసిన à°ªà±à°°à±Šà°«à±ˆà°²à± దాని "
+"పేరà±,\n"
+"UUID లేదా D-Bus పాతౠచేత à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/connections.c:331
+#, c-format
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname or connection UUID)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname or connection UUID)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+"\n"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+
+#: ../cli/src/connections.c:408
+#, c-format
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°²à± నందౠఒక లకà±à°·à°£à°‚ మాతà±à°°à°®à±‡ సవరించà±à°¨à±.\n"
+"à°ªà±à°°à±Šà°«à±ˆà°²à± దాని పేరà±, UUID లేదా D-Bus పాతౠచే à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/connections.c:420
+#, c-format
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"ఇంటరాకà±à°Ÿà°¿à°µà± ఎడిటరౠనందౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°µà±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± సరికూరà±à°šà±à°®à±.\n"
+"à°ªà±à°°à±Šà°«à±ˆà°²à± దాని పేరà±, UUID లేదా D-Bus పాతౠచే à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"ఇంటరాకà±à°Ÿà°¿à°µà± ఎడిటరౠనందౠకొతà±à°¤ à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± జతచేయి.\n"
+"\n"
+
+#: ../cli/src/connections.c:436
+#, c-format
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± తొలగించà±.\n"
+"à°ªà±à°°à±Šà°«à±ˆà°²à± దాని పేరà±, UUID లేదా D-Bus పాతౠచే à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/connections.c:448
+#, c-format
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection reload { help }\n"
+"\n"
+"à°¡à°¿à°¸à±à°•à± à°¨à±à°‚à°¡à°¿ à°…à°¨à±à°¨à°¿ à°…à°¨à±à°¸à°‚ధాన ఫైళà±à°³à°¨à± తిరిగిలోడà±à°šà±‡à°¯à°¿.\n"
+"\n"
+
+#: ../cli/src/connections.c:457
+#, c-format
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"à°¡à°¿à°¸à±à°•à± à°¨à±à°‚à°¡à°¿ à°’à°•à°Ÿà°¿ లేదా à°Žà°•à±à°•à±à°µ à°…à°¨à±à°¸à°‚ధాన ఫైళà±à°³à°¨à± లోడà±/తిరిగిలోడౠచేయి. à°…à°¨à±à°¸à°‚ధాన "
+"ఫైలà±à°¨à±\n"
+"మానవీయంగా సరికూరà±à°šà°¿ నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± దాని "
+"సరికొతà±à°¤\n"
+"à°¸à±à°¥à°¿à°¤à°¿\n"
+"తెలà±à°¸à±à°•à±Šà°¨à±à°¨à°Ÿà±à°²à± చేసిన తరà±à°µà°¾à°¤ దీనిని ఉపయోగించà±.\n"
+
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "దోషం: 'ఆకృతీకరించిన జాబితా': %s"
+
+#: ../cli/src/connections.c:523
msgid "Connection details"
msgstr "à°…à°¨à±à°¸à°‚ధానమౠవివరమà±à°²à±"
-#: ../cli/src/connections.c:484
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "à°Žà°ªà±à°ªà°Ÿà°¿à°•à°¿à°•à°¾à°¦à±"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:485 ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714 ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:787
-#: ../cli/src/settings.c:907 ../cli/src/settings.c:1189
-#: ../cli/src/settings.c:1190 ../cli/src/settings.c:1192
-#: ../cli/src/settings.c:1194 ../cli/src/settings.c:1195
-#: ../cli/src/settings.c:1326 ../cli/src/settings.c:1327
-#: ../cli/src/settings.c:1328 ../cli/src/settings.c:1329
-#: ../cli/src/settings.c:1406 ../cli/src/settings.c:1407
-#: ../cli/src/settings.c:1408 ../cli/src/settings.c:1409
-#: ../cli/src/settings.c:1410 ../cli/src/settings.c:1411
-#: ../cli/src/settings.c:1412 ../cli/src/settings.c:1413
-#: ../cli/src/settings.c:1414 ../cli/src/settings.c:1415
-#: ../cli/src/settings.c:1416 ../cli/src/settings.c:1417
-#: ../cli/src/settings.c:1418 ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:442
msgid "yes"
msgstr "à°…à°µà±à°¨à±"
-#: ../cli/src/connections.c:485 ../cli/src/connections.c:486
-#: ../cli/src/connections.c:714 ../cli/src/connections.c:715
-#: ../cli/src/connections.c:717 ../cli/src/devices.c:441
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:610 ../cli/src/devices.c:611
-#: ../cli/src/devices.c:612 ../cli/src/devices.c:644 ../cli/src/devices.c:671
-#: ../cli/src/devices.c:672 ../cli/src/devices.c:673 ../cli/src/devices.c:674
-#: ../cli/src/devices.c:675 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:712 ../cli/src/settings.c:714
-#: ../cli/src/settings.c:787 ../cli/src/settings.c:907
-#: ../cli/src/settings.c:1189 ../cli/src/settings.c:1190
-#: ../cli/src/settings.c:1192 ../cli/src/settings.c:1194
-#: ../cli/src/settings.c:1195 ../cli/src/settings.c:1326
-#: ../cli/src/settings.c:1327 ../cli/src/settings.c:1328
-#: ../cli/src/settings.c:1329 ../cli/src/settings.c:1406
-#: ../cli/src/settings.c:1407 ../cli/src/settings.c:1408
-#: ../cli/src/settings.c:1409 ../cli/src/settings.c:1410
-#: ../cli/src/settings.c:1411 ../cli/src/settings.c:1412
-#: ../cli/src/settings.c:1413 ../cli/src/settings.c:1414
-#: ../cli/src/settings.c:1415 ../cli/src/settings.c:1416
-#: ../cli/src/settings.c:1417 ../cli/src/settings.c:1418
-#: ../cli/src/settings.c:1489
+#: ../cli/src/connections.c:590 ../cli/src/connections.c:591
+#: ../cli/src/connections.c:833 ../cli/src/connections.c:834
+#: ../cli/src/connections.c:836 ../cli/src/connections.c:6112
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:654 ../cli/src/devices.c:796
+#: ../cli/src/devices.c:797 ../cli/src/devices.c:798 ../cli/src/devices.c:831
+#: ../cli/src/devices.c:860 ../cli/src/devices.c:861 ../cli/src/devices.c:862
+#: ../cli/src/devices.c:863 ../cli/src/devices.c:864 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/network-manager.c:444
msgid "no"
msgstr "కాదà±"
-#: ../cli/src/connections.c:560
-#| msgid "Connection details"
-msgid "Connection list"
-msgstr "à°…à°¨à±à°¸à°‚ధానమౠజాబితా"
-
-#: ../cli/src/connections.c:573 ../cli/src/connections.c:1110
-#: ../cli/src/connections.c:1648 ../cli/src/connections.c:1663
-#: ../cli/src/connections.c:1672 ../cli/src/connections.c:1682
-#: ../cli/src/connections.c:1694 ../cli/src/connections.c:1802
-#: ../cli/src/connections.c:1904 ../cli/src/devices.c:1122
-#: ../cli/src/devices.c:1132 ../cli/src/devices.c:1250
-#: ../cli/src/devices.c:1258 ../cli/src/devices.c:1622
-#: ../cli/src/devices.c:1629 ../cli/src/devices.c:1643
-#: ../cli/src/devices.c:1650 ../cli/src/devices.c:1667
-#: ../cli/src/devices.c:1678 ../cli/src/devices.c:1899
-#: ../cli/src/devices.c:1906
+#: ../cli/src/connections.c:667
+msgid "List of configured connections"
+msgstr "ఆకృతీకరించిన à°…à°¨à±à°¸à°‚ధానాల జాబితా"
+
+#: ../cli/src/connections.c:684 ../cli/src/connections.c:1225
+#: ../cli/src/connections.c:1785 ../cli/src/connections.c:1801
+#: ../cli/src/connections.c:1810 ../cli/src/connections.c:1820
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:7563
+#: ../cli/src/connections.c:7738 ../cli/src/devices.c:1633
+#: ../cli/src/devices.c:1641 ../cli/src/devices.c:2028
+#: ../cli/src/devices.c:2035 ../cli/src/devices.c:2049
+#: ../cli/src/devices.c:2056 ../cli/src/devices.c:2073
+#: ../cli/src/devices.c:2081 ../cli/src/devices.c:2277
+#: ../cli/src/devices.c:2373 ../cli/src/devices.c:2380
#, c-format
msgid "Error: %s argument is missing."
msgstr "దోషమà±: %s ఆరà±à°—à±à°®à±†à°‚టౠతపà±à°ªà°¿à°ªà±‹à°¯à°¿à°¨à°¦à°¿."
-#: ../cli/src/connections.c:586
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "దోషమà±: %s - à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధానమౠలేదà±."
-#: ../cli/src/connections.c:592 ../cli/src/connections.c:1707
-#: ../cli/src/connections.c:1819 ../cli/src/connections.c:1911
-#: ../cli/src/devices.c:906 ../cli/src/devices.c:986 ../cli/src/devices.c:1146
-#: ../cli/src/devices.c:1264 ../cli/src/devices.c:1691
-#: ../cli/src/devices.c:1912
+#: ../cli/src/connections.c:710
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "తెలియని పారామితి: %s\n"
-
-#: ../cli/src/connections.c:601
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "దోషమà±: ఠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ పారామితి తెలà±à°ªà°¬à°¡à°²à±‡à°¦à±."
+msgid "Error: 'show configured': %s"
+msgstr "దోషం: 'ఆకృతీకరించినవి చూపà±': %s"
-#: ../cli/src/connections.c:616 ../cli/src/connections.c:2004
-#: ../cli/src/devices.c:2120 ../cli/src/network-manager.c:596
+#: ../cli/src/connections.c:715 ../cli/src/connections.c:1853
+#: ../cli/src/connections.c:7804 ../cli/src/connections.c:7845
+#: ../cli/src/connections.c:7997 ../cli/src/devices.c:2256
+#: ../cli/src/devices.c:2630 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
msgid "Error: %s."
msgstr "దోషమà±: %s."
-#: ../cli/src/connections.c:629
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°šà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à°¿à°‚ది"
-#: ../cli/src/connections.c:645
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°ªà°°à°šà°¬à°¡à°¿à°‚ది"
+
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (సిదà±à°¦à°ªà°°à°šà±)"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (ధృవీకరణమౠఅవసరమà±)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (IP ఆకృతీకరణనౠపొందà±à°šà±à°¨à±à°¨à°¦à°¿)"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమైంది"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౠవిఫలమైంది"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN అననà±à°¸à°‚ధానమైంది"
-#: ../cli/src/connections.c:710 ../cli/src/connections.c:720
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:914 ../cli/src/connections.c:1138
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "దోషమà±: 'con status': %s"
-
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1012
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "దోషమà±: 'con status': %s; à°…à°¨à±à°®à°¤à°¿à°‚చబడౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à±: %s"
+msgid "Error: 'list active': %s"
+msgstr "Error: 'à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² జాబితా': %s"
-#: ../cli/src/connections.c:924
-#| msgid "Active connections"
+#: ../cli/src/connections.c:1020
msgid "Active connection details"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠవివరాలà±"
-#: ../cli/src/connections.c:1060 ../cli/src/connections.c:1722
-#: ../cli/src/connections.c:1834 ../cli/src/connections.c:1925
-#: ../cli/src/devices.c:933 ../cli/src/devices.c:995 ../cli/src/devices.c:1161
-#: ../cli/src/devices.c:1294 ../cli/src/devices.c:1713
-#: ../cli/src/devices.c:1941 ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1840
+#: ../cli/src/connections.c:1899 ../cli/src/connections.c:7592
+#: ../cli/src/connections.c:7707 ../cli/src/connections.c:7798
+#: ../cli/src/connections.c:7826 ../cli/src/devices.c:1197
+#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1403
+#: ../cli/src/devices.c:1538 ../cli/src/devices.c:1675
+#: ../cli/src/devices.c:2115 ../cli/src/devices.c:2414
+#: ../cli/src/network-manager.c:484
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "దోషమà±: నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• నడà±à°šà±à°šà±à°¨à±à°¨à°¦à±‹ లేదో à°•à°¨à±à°—ొనలేక పోయింది: %s"
-
-#: ../cli/src/connections.c:1064 ../cli/src/connections.c:1726
-#: ../cli/src/connections.c:1838 ../cli/src/connections.c:1929
-#: ../cli/src/devices.c:937 ../cli/src/devices.c:999 ../cli/src/devices.c:1165
-#: ../cli/src/devices.c:1298 ../cli/src/devices.c:1717
-#: ../cli/src/devices.c:1945 ../cli/src/network-manager.c:315
-#, c-format
-#| msgid "NetworkManager status"
msgid "Error: NetworkManager is not running."
-msgstr "దోషం: నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
+msgstr "దోషం: నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
-#: ../cli/src/connections.c:1096
-msgid "Active connections"
-msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమà±à°²à±"
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమà±à°² జాబితా"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
#, c-format
-#| msgid "Error: %s - no such connection."
msgid "Error: '%s' is not an active connection."
msgstr "దోషమà±: '%s' à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానం కాదà±."
-#: ../cli/src/connections.c:1126
+#: ../cli/src/connections.c:1251
#, c-format
-#| msgid "Unknown parameter: %s\n"
-msgid "Error: unknown parameter: %s"
-msgstr "దోషం: తెలియని పారామితి: %s"
+msgid "Error: 'show active': %s"
+msgstr "దోషం: 'à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°®à±ˆà°¨à°µà°¿ చూపà±': %s"
-#: ../cli/src/connections.c:1233
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "పరికరమౠ'%s' పైన యెటà±à°µà°‚à°Ÿà°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠలేదà±"
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "à°Žà°Ÿà±à°µà°‚à°Ÿà°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠలేదా పరికరమౠలేదà±"
-#: ../cli/src/connections.c:1312
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "పరికరమౠ'%s' à°…à°¨à±à°¸à°‚ధానమౠ'%s'తో సారూపà±à°¯à°®à±ˆà°¨à°¦à°¿ కాదà±"
-#: ../cli/src/connections.c:1315
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "à°…à°¨à±à°¸à°‚ధానమౠ'%s' కొరకౠయే పరికరమౠకనà±à°—ొనబడలేదà±"
-#: ../cli/src/connections.c:1327
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "తెలియని కారణమà±"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "à°à°¦à±€à°•à°¾à°¦à±"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "వినియోగదారి అననà±à°¸à°‚ధానింప బడినారà±"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "ఆధార నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానమౠఆటంకపరచబడింది"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN సేవ à°…à°¨à±à°•à±‹à°•à±à°‚à°¡à°¾ ఆపివేయబడింది"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN సేవ చెలà±à°²à°¨à°¿ ఆకృతీకరణనౠతిపà±à°ªà°¿à°¯à°¿à°šà±à°šà°¿à°¨à°¦à°¿"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "à°…à°¨à±à°¸à°‚ధానపౠపà±à°°à°¯à°¤à±à°¨à°‚ సమయం మించిపోయినది"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN సేవ సమయం లోపల à°ªà±à°°à°¾à°°à°‚భించబడలేదà±"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN సేవ à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± విఫలమైంది"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "ఠవిలà±à°µà±ˆà°¨ VPN రహసà±à°¯à°¾à°²à± లేవà±"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "చెలà±à°²à°¨à°¿ VPN రహసà±à°¯à°¾à°²à±"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "à°…à°¨à±à°¸à°‚ధానమౠతీసివేయబడింది"
-#: ../cli/src/connections.c:1366 ../cli/src/connections.c:1571
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "à°…à°¨à±à°¸à°‚ధానం సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à± (à°¡à°¿-బసౠకà±à°°à°¿à°¯à°¾à°¶à±€à°² పాతà±: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1472
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది."
-#: ../cli/src/connections.c:1396
+#: ../cli/src/connections.c:1507
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
"VPN à°…à°¨à±à°¸à°‚ధానం సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à± (à°¡à°¿-బసౠకà±à°°à°¿à°¯à°¾à°¶à±€à°² పాతà±: %s)\n"
-#: ../cli/src/connections.c:1404
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది: %s."
-#: ../cli/src/connections.c:1501 ../cli/src/devices.c:1055
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "దోషమà±: కాలపరిమితి %d సె మించినది."
-#: ../cli/src/connections.c:1562
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr "దోషం: à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± à°®à±à°‚à°¦à±à°—à°¾ పరికరం '%s' à°¸à±à°²à±‡à°µà±à°¸à± కొరకౠవేచివà±à°‚ది."
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది: %s"
-#: ../cli/src/connections.c:1656 ../cli/src/connections.c:1810
-#: ../cli/src/connections.c:1938
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "తెలియని దోషం"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "దోషమà±: తెలియని దోషమà±: %s."
+msgid "unknown device '%s'."
+msgstr "తెలియని పరికరం '%s'."
-#: ../cli/src/connections.c:1702 ../cli/src/devices.c:1140
-#: ../cli/src/devices.c:1686
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధానంగాని లేదా పరికరంగాని ఇవà±à°µà°²à±‡à°¦à±"
+
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "à°…à°¨à±à°¸à°‚ధానం (పేరà±, UUID, లేదా పాతà±):"
+
+#: ../cli/src/connections.c:1829 ../cli/src/devices.c:1171
+#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
+#: ../cli/src/devices.c:2386
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "దోషమà±: కాలమà±à°—ింపౠవిలà±à°µ '%s' చెలà±à°²à°¨à°¿à°¦à°¿."
+msgid "Unknown parameter: %s\n"
+msgstr "తెలియని పారామితి: %s\n"
-#: ../cli/src/connections.c:1715 ../cli/src/connections.c:1827
-#: ../cli/src/connections.c:1918
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "సిదà±à°¦à°®à±Œà°¤à±‹à°‚ది"
+
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "దోషమà±: id లేదా uuid తెలà±à°ªà°µà°²à°¸à°¿ à°µà±à°‚ది."
+msgid "Error: No connection specified."
+msgstr "దోషమà±: à° à°…à°¨à±à°¸à°‚ధానం తెలà±à°ªà°²à±‡à°¦à±."
-#: ../cli/src/connections.c:1747
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "దోషమà±: à°Žà°Ÿà±à°µà°‚à°Ÿà°¿ సూటయà±à°¯à±‡ పరికరమౠకనబడలేదà±: %s."
+msgid "'%s' not among [%s]"
+msgstr "'%s' [%s] నందౠలేదà±"
-#: ../cli/src/connections.c:1749
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: No suitable device found."
-msgstr "దోషమà±: ఠసూటగౠపరికరమౠకనబడలేదà±."
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "దోషం: '%s': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ %s MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ కాదà±."
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à±"
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
+#: ../tui/nm-ui-utils.c:335
+msgid "Ethernet"
+msgstr "ఈథరà±à°¨à±†à°Ÿà±"
-#: ../cli/src/connections.c:1863
+#: ../cli/src/connections.c:2343
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "దహెచà±à°šà°°à°¿à°•: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚à°—à°¾ లేదà±\n"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "దోషం: 'mtu': '%s' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ MTU కాదà±."
-#: ../cli/src/connections.c:1877
+#: ../cli/src/connections.c:2359
#, c-format
-#| msgid "Error: Connection activation failed: %s"
-msgid "Error: Connection deletion failed: %s"
-msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠతొలగింపౠవిఫలమైంది: %s"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "దోషం: 'parent': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± పేరౠకాదà±."
-#: ../cli/src/connections.c:1995
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "దోషమà±: 'con' ఆదేశమౠ'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "దోషం: 'p-key': '%s' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± P_KEY కాదà±."
-#: ../cli/src/connections.c:2063
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "దోషమà±: D-Busà°•à± à°…à°¨à±à°¸à°‚ధానమౠకాలేకపోయినది."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"దోషం: 'mode': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°šà°¿ ఇనà±à°«à°¿à°¬à°¾à°‚డౠసరఫరా రీతి [datagram, connected] "
+"కాదà±."
-#: ../cli/src/connections.c:2071
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "దోషమà±: సిసà±à°Ÿà°®à± అమరికలనౠపొందలేక పోయింది."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "దోషం: 'flags': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <0-7> à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
-#: ../cli/src/connections.c:2081
+#: ../cli/src/connections.c:2434
#, c-format
-#| msgid "Error: Can't obtain connections: settings services are not running."
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± పొందలేదà±: అమరికల సేవ నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "దోషం: '%s': '%s' చెలà±à°²à±à°¨à°¦à°¿à°•à°¾à°¦à±; %s "
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:70 ../cli/src/devices.c:108 ../cli/src/devices.c:189
-#: ../cli/src/devices.c:205
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "దోషం: '%s': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <%u-%u> ఉపయోగించà±."
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ఈథరà±à°¨à±†à°Ÿà±"
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 2
-#: ../cli/src/devices.c:85 ../cli/src/devices.c:431
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚à°•à± 3 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#: ../cli/src/connections.c:2559 ../cli/src/connections.c:2613
+#: ../cli/src/connections.c:2735 ../cli/src/connections.c:2781
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:2909
+#: ../cli/src/connections.c:3072 ../cli/src/connections.c:3168
+#: ../cli/src/connections.c:3250
+msgid "Do you want to provide them? (yes/no) [yes] "
+msgstr "మీరౠవాటిని అందించాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? (yes/no) [yes] "
-#. 4
-#: ../cli/src/devices.c:87
-#| msgid "WIFI-PROPERTIES"
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
+#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+msgid "MTU [auto]: "
+msgstr "MTU [auto]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
-#| msgid "DNS"
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
+#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
-#. 6
-#: ../cli/src/devices.c:89
-#| msgid "IP4-DNS"
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "à°•à±à°²à±‹à°¨à±â€Œà°¡à± MAC [none]:"
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚à°•à± 5 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
-#. 8
-#: ../cli/src/devices.c:91
-#| msgid "IP6-DNS"
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "సరఫరా రీతి (datagram లేదా connected) [datagram]"
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "మాతà±à°°à±à°• ఇంటరà±à°«à±‡à°¸à± [none]:"
-#. 10
-#: ../cli/src/devices.c:93
-msgid "BOND"
-msgstr "బాండà±"
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
-#. 11
-#: ../cli/src/devices.c:94
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "దోషం: 'p-key' అనేది తపà±à°ªà°¨à°¿à°¸à°°à°¿ 'parent' తెలిపినపà±à°ªà±à°¡à±.\n"
+
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ1 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà± à°µà±à°‚ది.\n"
+
+#: ../cli/src/connections.c:2703 ../cli/src/connections.c:2805
+#: ../cli/src/connections.c:3024 ../cli/src/connections.c:3226
+msgid "Do you want to provide it? (yes/no) [yes] "
+msgstr "మీరౠదానిని అందించాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "'PPPoE' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ4 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± ఉనà±à°¨à°¾à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "Password [none]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "Service [none]: "
+
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "'మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚à°¡à±' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚à°•à± 2 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à±à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "Username [none]: "
+
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "'bluetooth' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚à°•à± 1 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà± à°µà±à°‚ది.\n"
+
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "à°¬à±à°²à±‚టూతౠరకం (panu, dun-gsm or dun-cdma) [panu]:"
+
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "దోషం: 'bt-type': '%s' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°¬à±à°²à±‚టూతౠరకం కాదà±.\n"
+
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ4 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN flags (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "Ingress priority maps [none]: "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Egress priority maps [none]: "
+
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "'bond' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠà°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "Bonding mode [balance-rr]: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "Bonding primary interface [none]: "
+
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "దోషం: 'primary': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± పేరౠకాదà±.\n"
+
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "పరà±à°¯à°µà±‡à°•à±à°·à°£ రీతిని బందనంచేయà±à°Ÿ (miimon లేదా arp) [miimon]: "
+
+#: ../cli/src/connections.c:2950
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"దోషం: '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ పరà±à°¯à°µà±‡à°•à±à°·à°£ రీతి కాదà±; '%s' లేదా '%s' ఉపయోగించà±.\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "Bonding miimon [100]: "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "దోషం: 'miimon': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సఖà±à°¯à°•à°¾à°¦à± <0-%u>.\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "Bonding downdelay [0]: "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "దోషం: 'downdelay': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯à°•à°¾à°¦à± <0-%u>.\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "Bonding updelay [0]: "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "దోషం: 'updelay': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯à°•à°¾à°¦à± <0-%u>.\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "Bonding arp-interval [0]: "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "దోషం: 'arp-interval': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯à°•à°¾à°¦à± <0-%u>.\n"
+
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "Bonding arp-ip-target [none]: "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "'%s' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ1 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚టౠఉంది.\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "Team JSON configuration [none]: "
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "టీమà±"
+
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "టీమà±-à°¸à±à°²à±‡à°µà±"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "'bridge' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ6 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "STP చేతనంచేయాలా (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "దోషం: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3093
+msgid "STP priority [128]: "
+msgstr "STP à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ [128]: "
+
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "దోషం: 'priority': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯ కాదౠ<0-%d>.\n"
+
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "ఫారà±à°µà°¾à°°à±à°¡à± ఆలసà±à°¯à°‚ [15]: "
+
+#: ../cli/src/connections.c:3109
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "దోషం: 'forward-delay': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯ కాదౠ<2-30>.\n"
+
+#: ../cli/src/connections.c:3118
+msgid "Hello time [2]: "
+msgstr "హెలà±à°²à±‹ సమయం [2]: "
+
+#: ../cli/src/connections.c:3122
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "దోషం: 'hello-time': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯ కాదౠ<1-10>.\n"
+
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "à°—à°°à°¿à°·à±à°Ÿ వయసౠ[20]: "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "దోషం: 'max-age': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯à°•à°¾à°¦à± <6-40>.\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ à°à°œà°¿à°‚గౠసమయం [300]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "దోషం: 'ageing-time': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯ కాదౠ<0-1000000>.\n"
+
+#: ../cli/src/connections.c:3167
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr "'bridge-slave' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ3 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± పోరà±à°Ÿà± à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ [32]:"
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± పోరà±à°Ÿà± STP పాతౠకాసà±à°Ÿà± [100]: "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (yes/no) [yes]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "దోషం: 'hairpin': '%s'.\n"
+
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "'VPN' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ1 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚టౠఉంది.\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "'OLPC Mesh' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ2 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± ఉనà±à°¨à°¾à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC మెషౠఛానలౠ[1]: "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "దోషం: 'channel': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯ కాదౠ<1-13>.\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ [none]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 à°šà°¿à°°à±à°¨à°¾à°®à°¾ (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " à°šà°¿à°°à±à°¨à°¾à°®à°¾ విజయవంతంగా జతచేయబడెనà±: %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " హెచà±à°šà°°à°¿à°•: à°šà°¿à°°à±à°¨à°¾à°®à°¾ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°µà±à°‚ది: %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " హెచà±à°šà°°à°¿à°•: చివరిలో గారà±à°¬à±‡à°œà± విసà±à°®à°°à°¿à°‚à°šà±à°Ÿ: '%s'\n"
+
+#: ../cli/src/connections.c:3343 ../cli/src/connections.c:4192
+#: ../cli/src/connections.c:4247 ../cli/src/connections.c:4646
+#: ../cli/src/connections.c:4656
+msgid "Error: "
+msgstr "దోషమà±:"
+
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "మీరౠIP à°šà°¿à°°à±à°¨à°¾à°®à°¾à°²à± జతచేయాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾à°²à± జతచేయà±à°Ÿà°¨à± <Enter> వతà±à°¤à±à°Ÿ à°¦à±à°µà°¾à°°à°¾ పూరà±à°¤à°¿à°šà±‡à°¯à±à°®à±.\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "దోషమà±: 'parent': 'p-key' లేకà±à°‚à°¡à°¾ చెలà±à°²à°¦à±."
+
+#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+msgid "Error: 'ssid' is required."
+msgstr "దోషం: 'ssid' అవసరమైంది."
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP పేరà±: "
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "దోషం: 'nsp' అనసరమైంది."
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "PPPoE వాడà±à°•à°°à°¿à°ªà±‡à°°à±: "
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "దోషం: 'username' కావాలి."
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "దోషమà±: 'apn' అవసరమైంది."
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "à°¬à±à°²à±‚టూతౠపరికర à°šà°¿à°°à±à°¨à°¾à°®à°¾:"
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "దోషం: 'addr' అవసరమైంది."
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "దోషం: 'bt-type': '%s' చెలà±à°²à°¨à°¿à°¦à°¿; వాడà±à°• [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN పేరెంటౠపరికరం లేదా à°…à°¨à±à°¸à°‚ధానం UUID: "
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "దోషం: 'dev' అవసరమైంది."
+
+#: ../cli/src/connections.c:3928
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../cli/src/connections.c:3931
+msgid "Error: 'id' is required."
+msgstr "దోషం: 'id' అవసరమైంది."
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "దోషం: 'id': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <0-4095> à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
+
+#: ../cli/src/connections.c:3947
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "దోషం: 'dev': '%s' à°…à°¨à±à°¨à°¦à°¿ UUID, ఇంటరà±à°«à±‡à°¸à± పేరà±, MAC యేదీ కాదà±."
+
+#: ../cli/src/connections.c:4082
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "దోషం: 'mode': %s."
+
+#: ../cli/src/connections.c:4091
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "దోషం: 'primary': '%s' ఇంటరà±à°«à±‡à°¸à± పేరౠలేకà±à°‚à°¡à°¾ చెలà±à°²à°¦à±."
-#. 2
-#: ../cli/src/devices.c:110
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "బాండౠమాసà±à°Ÿà°°à±:"
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "దోషం: 'master' అవసరమైంది."
+
+#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
+#: ../cli/src/connections.c:4427
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"హెచà±à°šà°°à°¿à°•: 'type' à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ విసà±à°®à°°à°¿à°‚చబడింది. ఇపà±à°ªà°Ÿà°¿à°•à°¿ మేమౠఈథరà±à°¨à±†à°Ÿà± à°¸à±à°²à±‡à°µà±à°¸à± "
+"మాతà±à°°à°®à±‡ తోడà±à°ªà°¾à°Ÿà±à°¨à°¿à°¸à±à°¤à°¾à°®à±.\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "టీమౠమాసà±à°Ÿà°°à±:"
+
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "దోషం: 'stp': %s."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± మాసà±à°Ÿà°°à±:"
+
+#: ../cli/src/connections.c:4421
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "దోషం: 'master': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ UUID లేదా యింటరà±à°«à±‡à°¸à± కాదà±."
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "దోషం: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "VPN à°°à°•à°‚: "
+
+#: ../cli/src/connections.c:4509
+msgid "Error: 'vpn-type' is required."
+msgstr "దోషం: 'vpn-type' అవసరమైంది."
+
+#: ../cli/src/connections.c:4520
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "దోషం: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4578
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "దోషం: 'channel': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <1-13> à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
+
+#: ../cli/src/connections.c:4613
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "దోషం: '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కాదà±."
+
+#: ../cli/src/connections.c:4711
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "దోషం: '%s' à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
+
+#: ../cli/src/connections.c:4715
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' (%s) విజయవంతంగా జతచేయబడెనà±.\n"
+
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠరకం:"
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "దోషమà±: 'type' ఆరà±à°—à±à°®à±†à°‚టౠఅవసరమైంది."
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "దోషమà±: చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚; %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "దోషం: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "ఇంటరà±à°«à±‡à°¸à± పేరౠ[*]:"
+
+#: ../cli/src/connections.c:4801
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "దోషం: 'ifname' ఆరà±à°—à±à°®à±†à°‚టౠకావాలి."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "దోషం: 'ifname': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± కాదౠ'*' కాదà±."
+
+#: ../cli/src/connections.c:5627
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' విలà±à°µà°²à± అమరà±à°šà±à°¤à±‹à°‚ది]\n"
+
+#: ../cli/src/connections.c:5708
+#, c-format
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ à°®à±à°–à±à°¯à°®à±†à°¨à± ]---\n"
+"goto [<setting> | <prop>] :: అమరà±à°ªà± లేదా లకà±à°·à°£à°‚కౠవెళà±à°²à±à°®à±\n"
+"remove <setting>[.<prop>] | <prop> :: అమరà±à°ªà± తీసివేయà±à°¨à± లేదా లకà±à°·à°£à°‚ "
+"తిరిగివà±à°‚à°šà±à°¨à± value\n"
+"set [<setting>.<prop> <value>] :: లకà±à°·à°£à°‚ విలà±à°µ అమరà±à°šà±\n"
+"describe [<setting>.<prop>] :: లకà±à°·à°£à°‚ వివరించà±\n"
+"print [all] :: à°…à°¨à±à°¸à°‚ధానం à°®à±à°¦à±à°°à°¿à°‚à°šà±\n"
+"verify [all] :: à°…à°¨à±à°¸à°‚ధానం నిరà±à°§à°¾à°°à°¿à°‚à°šà±\n"
+"save :: à°…à°¨à±à°¸à°‚ధానం దాయి\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚చేయి\n"
+"back :: à°’à°• à°¸à±à°¥à°¾à°¯à°¿ పైకౠవెళà±à°³à± (వెనà±à°•à°•à±)\n"
+"help/? [<command>] :: à°ˆ సహాయం à°®à±à°¦à±à°°à°¿à°‚à°šà±à°¨à±\n"
+"nmcli <conf-option> <value> :: nmcli ఆకృతీకరణ\n"
+"quit :: nmcli నిషà±à°•à±à°°à°®à°¿à°‚à°šà±\n"
+
+#: ../cli/src/connections.c:5735
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <setting>[.<prop>] | <prop> :: సరికూరà±à°šà±à°Ÿà°•à± అమరà±à°ªà±/లకà±à°·à°£à°‚ à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±\n"
+"\n"
+"అమరిక లేదా లకà±à°·à°£à°‚ సరికూరà±à°šà±à°Ÿà°•à± à°ˆ ఆదేశం దానిలోకి à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°¨à±.\n"
+"\n"
+"ఉదాహరణలà±: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:5742
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <setting>[.<prop>] :: అమరà±à°ªà± తీసివేయà±à°¨à± లేదా లకà±à°·à°£à°‚ విలà±à°µ "
+"తిరిగివà±à°‚à°šà±à°¨à±\n"
+"\n"
+"à°ˆ ఆదేశం మొతà±à°¤à°‚ అమరికనౠఅనà±à°¸à°‚ధానం à°¨à±à°‚à°¡à°¿ తీసివేయà±à°¨à±, లేదా à°’à°• లకà±à°·à°£à°‚\n"
+"ఇవà±à°µà°¬à°¡à°¿à°¤à±‡, దానిని à°…à°ªà±à°°à°®à±‡à°¯ విలà±à°µà±à°•à± తిరిగివà±à°‚à°šà±à°¨à±.\n"
+"\n"
+"ఉదాహరణలà±: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:5749
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<setting>.<prop> <value>] :: à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ విలà±à°µ అమరà±à°šà±à°¨à±\n"
+"\n"
+"à°ˆ ఆదేశం à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ విలà±à°µ అమరà±à°šà±à°¨à±.\n"
+"\n"
+"ఉదాహరణ: nmcli> set con.id My connection\n"
+
+#: ../cli/src/connections.c:5754
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<setting>.<prop>] :: లకà±à°·à°£à°‚ వివరించà±à°¨à±\n"
+"\n"
+"లకà±à°·à°£à°‚ వివరణనౠచూపà±à°¨à±. à°…à°¨à±à°¨à°¿ NM అమరికలౠమరియౠలకà±à°·à°£à°¾à°²à± చూడà±à°Ÿà°•à± మీరౠnm-"
+"settings(5) మానà±à°¯à±‚వలౠపేజీ సంపà±à°°à°¦à°¿à°‚చవచà±à°šà±.\n"
+
+#: ../cli/src/connections.c:5759
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: à°®à±à°¦à±à°°à°£ అమరà±à°ªà± లేదా à°…à°¨à±à°¸à°‚ధానం విలà±à°µà°²à±\n"
+"\n"
+"à°ªà±à°°à°¸à±à°¤à±à°¤ లకà±à°·à°£à°‚ లేదా మొతà±à°¤à°‚ à°…à°¨à±à°¸à°‚ధానం చూపà±à°¨à±.\n"
+"\n"
+"ఉదాహరణ: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:5764
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: అమరిక లేదా à°…à°¨à±à°¸à°‚ధానం చెలà±à°²à±à°¬à°¾à°Ÿà± నిరà±à°¥à°¾à°°à°¿à°‚à°šà±à°¨à±\n"
+"\n"
+"అమరిక లేదా à°…à°¨à±à°¸à°‚ధానం చెలà±à°²à±à°¨à°¦à°¾ లేదా నిరà±à°¥à°¾à°°à°¿à°‚à°šà±à°¨à± మరియౠతరà±à°µà°¾à°¤ దాచగలదà±. "
+"చెలà±à°²à°¨à°¿ విలà±à°µà°²à°¨à± అది దోషమà±à°ªà±ˆ సూచించà±à°¨à±.\n"
+"\n"
+"ఉదాహరణలà±: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:5771
+#, c-format
+msgid ""
+"save :: save the connection\n"
+"\n"
+"Sends the connection to NetworkManager that will save it.\n"
+msgstr ""
+"save :: à°…à°¨à±à°¸à°‚ధానం దాయి\n"
+"\n"
+"à°…à°¨à±à°¸à°‚ధానంనౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±à°•à± పంపà±à°¨à± అది దానిని దాచà±à°¨à±.\n"
+
+#: ../cli/src/connections.c:5775
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<ifname>] [/<ap>|<nsp>] :: à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°¨à±\n"
+"\n"
+"à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°¨à±.\n"
+"\n"
+"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ à°à°šà±à°šà°¿à°•à°¾à°²à±:\n"
+"<ifname> - à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à± పరికరం\n"
+"/<ap>|<nsp> - AP (Wi-Fi) లేదా NSP (WiMAX) (<ifname> తెలà±à°ªà°¬à°¡à°¨à°ªà±à°ªà±à°¡à± / "
+"à°®à±à°‚à°¦à±à°šà±‡à°°à±à°šà°¬à°¡à±à°¨à±)\n"
+
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: పై మెనూ à°¸à±à°¥à°¾à°¯à°¿à°¨à°•à± వెళà±à°³à±à°¨à±\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli ఆదేశాల కొరకౠసహాయం\n"
+"\n"
+
+#: ../cli/src/connections.c:5788
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<conf-option> <value>] :: nmcli ఆకృతీకరణ\n"
+"\n"
+"nmcli ఆకృతీకరించà±à°¨à±. కింది à°à°šà±à°šà°¿à°•à°¾à°²à± à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉనà±à°¨à°¾à°¯à°¿:\n"
+"status-line yes | no [à°…à°ªà±à°°à°®à±‡à°¯à°‚: no]\n"
+"save-confirmation yes | no [à°…à°ªà±à°°à°®à±‡à°¯à°‚: yes]\n"
+"prompt-color <0-8> [à°…à°ªà±à°°à°®à±‡à°¯à°‚: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"ఉదాహరణ: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: nmcli నిషà±à°•à±à°°à°®à°¿à°‚à°šà±à°¨à±\n"
+"\n"
+"à°ˆ ఆదేశం nmcli నిషà±à°•à±à°°à°®à°¿à°‚పచేయà±à°¨à±. మారà±à°šà°¬à°¡à±à°¤à±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం దాయనపà±à°ªà±à°¡à±, à°† "
+"à°šà°°à±à°¯à°¨à± ఖాయం చేయమని వాడà±à°•à°°à°¿ à°…à°¡à±à°—బడతాడà±.\n"
+
+#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
+#: ../cli/src/connections.c:6313 ../cli/src/connections.c:7162
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "తెలియని ఆదేశం: '%s'\n"
+
+#: ../cli/src/connections.c:5879
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ లకà±à°·à°£ మెనూ ]---\n"
+"set [<value>] :: కొతà±à°¤ విలà±à°µà°¨à± అమరà±à°šà±à°¨à±\n"
+"add [<value>] :: లకà±à°·à°£à°‚కౠకొతà±à°¤ à°à°šà±à°šà°¿à°•à°‚ జతచేయà±à°¨à±\n"
+"change :: à°ªà±à°°à°¸à±à°¤à±à°¤ విలà±à°µà°¨à± మారà±à°šà±à°®à±\n"
+"remove [<index> | <option>] :: విలà±à°µà°¨à± తొలగించà±à°®à±\n"
+"describe :: లకà±à°·à°£à°‚ వివరించà±\n"
+"print [setting | connection] :: లకà±à°·à°£à°‚ (అమరిక/à°…à°¨à±à°¸à°‚ధానం) విలà±à°µ(à°²à±) "
+"à°®à±à°¦à±à°°à°¿à°‚à°šà±à°¨à±\n"
+"back :: పై à°¸à±à°¥à°¾à°¯à°¿à°•à± వెళà±à°³à±à°¨à±\n"
+"help/? [<command>] :: à°ˆ సహాయం లేదా ఆదేశ వివరణ à°®à±à°¦à±à°°à°¿à°‚à°šà±\n"
+"quit :: nmcli నిషà±à°•à±à°°à°®à°¿à°‚à°šà±\n"
+
+#: ../cli/src/connections.c:5904
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<value>] :: కొతà±à°¤ విలà±à°µà°¨à± అమరà±à°šà±à°¨à±\n"
+"\n"
+"అందించబడిన <value> నౠఈ లకà±à°·à°£à°‚à°•à± à°ˆ ఆదేశం అమరà±à°šà±à°¨à±\n"
+
+#: ../cli/src/connections.c:5908
+#, c-format
+msgid ""
+"add [<value>] :: add new option to the property\n"
+"\n"
+"This command add provided <value> to this property, if the property is of a "
+"container type. For single-valued properties it replaces the value (same as "
+"'set').\n"
+msgstr ""
+"add [<value>] :: లకà±à°·à°£à°‚కౠకొతà±à°¤ à°à°šà±à°šà°¿à°•à°‚ జతచేయి\n"
+"\n"
+"అందించిన <value> నౠఈ లకà±à°·à°£à°‚à°•à± à°ˆ ఆదేశం జతచేయà±à°¨à±, లకà±à°·à°£à°‚ à°—à°¨à±à°• కంటైనరౠరకం "
+"అయితే. à°’à°‚à°Ÿà°°à°¿-విలà±à°µ లకà±à°·à°£à°¾à°²à°•à± అది విలà±à°µà°¨à± à°ªà±à°¨à°ƒà°¸à±à°¥à°¾à°ªà°¿à°‚à°šà±à°¨à± ('set' వలె).\n"
+
+#: ../cli/src/connections.c:5914
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: à°ªà±à°°à°¸à±à°¤à±à°¤ విలà±à°µà°¨à± మారà±à°šà±à°¨à±\n"
+"\n"
+"à°ªà±à°°à°¸à±à°¤à±à°¤ విలà±à°µà°¨à± à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚à°šà±à°¨à± మరియౠదానిని సరికూరà±à°šà±à°Ÿà°•à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±à°¨à±.\n"
+
+#: ../cli/src/connections.c:5918
+#, c-format
+msgid ""
+"remove [<index>|<option>] :: delete the value\n"
+"\n"
+"Removes the property value (sets it to default).\n"
+msgstr ""
+"remove [<index>|<option>] :: విలà±à°µà°¨à± తొలగించà±\n"
+"\n"
+"లకà±à°·à°£à°‚ విలà±à°µà°¨à± తీసివేయà±à°¨à± (దానిని à°…à°ªà±à°°à°®à±‡à°¯à°‚కౠఅమరà±à°šà±à°¨à±).\n"
+
+#: ../cli/src/connections.c:5922
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: లకà±à°·à°£à°‚ వివరించà±\n"
+"\n"
+"లకà±à°·à°£à°‚ వివరణనౠచూపà±à°®à±. à°…à°¨à±à°¨à°¿ NM అమరికలౠమరియౠలకà±à°·à°£à°¾à°²à°¨à± చూడà±à°Ÿà°•à± మీరౠnm-"
+"settings(5) మానà±à°¯à±à°µà°²à± పేజీనౠసంపà±à°°à°¦à°¿à°‚చవచà±à°šà±.\n"
+
+#: ../cli/src/connections.c:5927
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [property|setting|connection] :: లకà±à°·à°£à°‚ (setting, connection) "
+"విలà±à°µ(à°²à±) à°®à±à°¦à±à°°à°¿à°‚à°šà±à°¨à±\n"
+"\n"
+"లకà±à°·à°£à°‚ విలà±à°µà°¨à± చూపà±à°¨à±. ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°¨à± అందించà±à°Ÿà°¤à±‹ పాటà±à°—à°¾ మీరౠమొతà±à°¤à°‚ అమరిక లేదా "
+"à°…à°¨à±à°¸à°‚ధానం కొరకౠవిలà±à°µà°²à± కూడా à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚చగలరà±.\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: nmcli ఆదేశాల కొరకౠసహాయం\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¤ విఫలమైంది.\n"
+
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "దోషం: అమరిక '%s' తపà±à°ªà°¨à°¿à°¸à°°à°¿ మరియౠతీసివేయబడలేదà±.\n"
+
+#: ../cli/src/connections.c:6111
+#, c-format
+msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgstr "[ à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚: %s | పేరà±: %s | UUID: %s | à°¡à°°à±à°Ÿà±€: %s ]\n"
+
+#: ../cli/src/connections.c:6171
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± à°…à°¨à±à°¨à°¦à°¿ వేరొక à°•à±à°²à±ˆà°‚à°Ÿà± à°¨à±à°‚à°¡à°¿ తీసివేయబడింది. దానిని తిరిగి "
+"ఉంచà±à°Ÿà°•à± à°®à±à°–à±à°¯ మెనూ నందౠ'save' టైపౠచేయవచà±à°šà±.\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' విలà±à°µ à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±: "
+
+#: ../cli/src/connections.c:6209 ../cli/src/connections.c:6228
+#: ../cli/src/connections.c:6621 ../cli/src/connections.c:6680
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "దోషం: '%s' లకà±à°·à°£à°‚ అమరà±à°šà±à°Ÿà°•à± విఫలమైంది: %s\n"
+
+#: ../cli/src/connections.c:6221
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' విలà±à°µ సరికూరà±à°šà±: "
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid "Error: %s\n"
+msgstr "దోషమà±: %s\n"
+
+#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
+#: ../cli/src/connections.c:6800
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "దోషమà±: '%s' విలà±à°µ తీసివేయà±à°Ÿà°•à± విఫలమైంది: %s\n"
+
+#: ../cli/src/connections.c:6277
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "తెలియని ఆదేశ ఆరà±à°—à±à°®à±†à°‚à°Ÿà±: '%s'\n"
+
+#: ../cli/src/connections.c:6297 ../cli/src/connections.c:7150
+msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgstr ""
+"à°…à°¨à±à°¸à°‚ధానం దాయబడలేదà±. మీరౠనిజంగా నిషà±à°•à±à°°à°®à°¿à°‚చాలని à°…à°¨à±à°•à±Šà°¨à±à°šà±à°¨à±à°¨à°¾à°°à°¾? [y/n]\n"
+
+#: ../cli/src/connections.c:6409
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ అమరికలà±: %s\n"
+
+#: ../cli/src/connections.c:6418
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "దోషం: చెలà±à°²à°¨à°¿ అమరిక పేరà±; %s\n"
+
+#: ../cli/src/connections.c:6435
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ లకà±à°·à°£à°¾à°²à±: %s\n"
+
+#: ../cli/src/connections.c:6443
+#, c-format
+msgid "Error: property %s\n"
+msgstr "దోషం: లకà±à°·à°£à°‚ %s\n"
+
+#: ../cli/src/connections.c:6484
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? [yes] "
+msgstr ""
+"'autoconnect=yes' తో à°…à°¨à±à°¸à°‚ధానం దాయà±à°šà±à°¨à±à°¨à°¦à°¿. అది à°…à°¨à±à°¸à°‚ధానం తకà±à°·à°£à°‚ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ "
+"à°…à°—à±à°¨à°Ÿà±à°²à± చేయà±à°¨à±.\n"
+"మీరౠఇంకా దాయలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? [yes] "
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "మీరౠకింది అమరికలనౠసరికూరà±à°šà°µà°šà±à°šà±: %s\n"
+
+#: ../cli/src/connections.c:6583
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± à°…à°¨à±à°¨à°¦à°¿ వేరొక à°•à±à°²à±ˆà°‚à°Ÿà± à°¨à±à°‚à°¡à°¿ తీసివేయబడింది. దానిని తిరిగి "
+"ఉంచà±à°Ÿà°•à± మీరౠ'save' టైపౠచేయవచà±à°šà±.\n"
+
+#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' లకà±à°·à°£à°‚ కొరకౠఅనà±à°®à°¤à°¿à°¨à°¿à°šà±à°šà± విలà±à°µà°²à±: %s\n"
+
+#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "దోషం: ఠఅమరిక ఎంపికకాలేదà±; చెలà±à°²à±à°¨à°µà°¿ [%s]\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "'goto <setting>' first, లేదా 'set <setting>.<property>' ఉపయోగించà±\n"
+
+#: ../cli/src/connections.c:6641 ../cli/src/connections.c:6779
+#: ../cli/src/connections.c:6859
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "దోషం: చెలà±à°²à°¨à°¿ అమరిక ఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s'; చెలà±à°²à±à°¨à°µà°¿ [%s]\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "దోషం: '%s' లకà±à°·à°£à°‚ కొరకౠదొరకని అమరిక\n"
+
+#: ../cli/src/connections.c:6658
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "దోషం: చెలà±à°²à°¨à°¿ లకà±à°·à°£à°‚: %s\n"
+
+#: ../cli/src/connections.c:6707
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "దోషం: తెలియని అమరిక '%s'\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "బహà±à°¶à°¾ మీరౠకింది లకà±à°·à°£à°¾à°²à°¨à± సరికూరà±à°šà°µà°šà±à°šà±: %s\n"
+
+#: ../cli/src/connections.c:6764
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "దోషం: ఠఆరà±à°—à±à°®à±†à°‚టౠఈయలేదà±; చెలà±à°²à±à°¨à°µà°¿ [%s]\n"
+
+#: ../cli/src/connections.c:6777
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "అమరిక '%s' à°…à°¨à±à°¨à°¦à°¿ à°…à°¨à±à°¸à°‚ధానం నందౠలేదà±.\n"
+
+#: ../cli/src/connections.c:6818
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "దోషం: %s లకà±à°·à°£à°¾à°²à±, అది పేరà±à°¨à± అమరà±à°šà±à°Ÿà°²à±‡à°¦à±.\n"
+
+#: ../cli/src/connections.c:6843
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"'goto <setting>' first, లేదా 'describe <setting>.<property>' à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±\n"
+
+#: ../cli/src/connections.c:6884
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "దోషం: చెలà±à°²à°¨à°¿ లకà±à°·à°£à°‚: %s, చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ అమరిక పేరౠకాదà±.\n"
+
+#: ../cli/src/connections.c:6908
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "దోషం: '%s' అమరిక లేదà±\n"
+
+#: ../cli/src/connections.c:6911
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "దోషం: తెలియని అమరిక: '%s'\n"
+
+#: ../cli/src/connections.c:6927
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "అమరిక '%s' నిరà±à°¥à°¾à°°à°¿à°‚à°šà±: %s\n"
+
+#: ../cli/src/connections.c:6934
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "à°…à°¨à±à°¸à°‚ధానం నిరà±à°¥à°¾à°°à°¿à°‚à°šà±: %s\n"
+
+#: ../cli/src/connections.c:6973
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "దోషం: '%s' (%s) à°…à°¨à±à°¸à°‚ధానం దాయà±à°Ÿà°•à± విఫలమైంది: (%d) %s\n"
+
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' (%s) విజయవంతంగా దాయబడింది.\n"
+
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం నిరà±à°§à°¾à°°à°£ విఫలమైంది: %s\n"
+
+#: ../cli/src/connections.c:7015
+msgid "(unknown error)"
+msgstr "(తెలియని దోషం)"
+
+#: ../cli/src/connections.c:7036
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం దాయబడలేదà±. à°®à±à°‚దౠ'save' టైపà±à°šà±‡à°¯à°¿.\n"
+
+#: ../cli/src/connections.c:7040
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం చెలà±à°²à±à°¨à°¦à°¿ కాదà±: %s\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°²à±‡à°¦à±: %s.\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "దోషం: '%s' (%s) à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: (%d) %s\n"
+
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¤ పరà±à°¯à°µà±‡à°•à±à°·à°£ (కొనసాగà±à°Ÿà°•à± à°à°¦à±‡à°¨à°¿ కీనౠవతà±à°¤à±à°®à±)\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "దోషం: à°¸à±à°¥à°¿à°¤à°¿-వరà±à°¸: %s\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "దోషం: దాపà±-నిరà±à°§à°¾à°°à°£: %s\n"
+
+#: ../cli/src/connections.c:7121
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "దోషం: చెడà±à°¡ రంగౠసంఖà±à°¯: '%s'; వాడà±à°• <0-8>\n"
+
+#: ../cli/src/connections.c:7133
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "à°ªà±à°°à°¸à±à°¤à±à°¤ nmcli ఆకృతీకరణ:\n"
+
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "చెలà±à°²à°¨à°¿ ఆకృతీకరమ à°à°šà±à°šà°¿à°•à°‚ '%s'; [%s] à°…à°¨à±à°®à°¤à°¿à°‚చబడెనà±\n"
+
+#: ../cli/src/connections.c:7364
+#, c-format
+msgid ""
+">>> Command-line editing is not available. Consider installing a line "
+"editing library to enable the feature. <<<\n"
+"Supported libraries are:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+msgstr ""
+">>> కమాండà±-లైనౠసరికూరà±à°ªà± à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°²à±‡à°¦à±. విశేషణంనౠచేతనంచేయà±à°Ÿà°•à± లైనౠ"
+"ఎడిటింగౠలైబà±à°°à°°à±€à°¨à± సంసà±à°¥à°¾à°ªà°¿à°‚à°šà±à°Ÿ పరిగణించà±à°®à±. <<<\n"
+"తోడà±à°ªà°¾à°Ÿà±à°¨à°¿à°šà±à°šà± లైబà±à°°à°°à±€à°²à±:\n"
+" - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#: ../cli/src/connections.c:7390
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "దోషం: 'id', uuid, లేదా 'path' లలో à°’à°•à°Ÿà°¿ మాతà±à°°à°®à±‡ అందించగలం."
+
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "దోషం: తెలియని à°…à°¨à±à°¸à°‚ధానం '%s'."
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"హెచà±à°šà°°à°¿à°•: ఉనà±à°¨ à°…à°¨à±à°¸à°‚ధానం '%s' సరికూరà±à°šà±à°¤à±‹à°‚ది; 'type' ఆరà±à°—à±à°®à±†à°‚à°Ÿà± "
+"విసà±à°®à°°à°¿à°‚చబడెనà±\n"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"హెచà±à°šà°°à°¿à°•: ఉనà±à°¨ à°…à°¨à±à°¸à°‚ధానం '%s' సరికూరà±à°šà±à°¤à±‹à°‚ది; 'con-name' ఆరà±à°—à±à°®à±†à°‚à°Ÿà± "
+"విసà±à°®à°°à°¿à°‚చబడెనà±\n"
+
+#: ../cli/src/connections.c:7434
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధాన రకాలà±: %s\n"
+
+#: ../cli/src/connections.c:7436
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "దోషం: చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚; %s\n"
+
+#: ../cli/src/connections.c:7472
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli ఇంటరాకà±à°Ÿà°¿à°µà± à°…à°¨à±à°¸à°‚ధాన సరికూరà±à°ªà°°à°¿ |==="
+
+#: ../cli/src/connections.c:7475
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "ఉనà±à°¨ '%s' à°…à°¨à±à°¸à°‚ధానం సరికూరà±à°šà±à°¤à±‹à°‚ది: '%s'"
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "కొతà±à°¤ '%s' à°…à°¨à±à°¸à°‚ధానం జతచేసà±à°¤à±‹à°‚ది"
+
+#: ../cli/src/connections.c:7479
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ ఆదేశాల కొరకౠ'help' లేదా '?' టైపౠచేయండి."
+
+#: ../cli/src/connections.c:7481
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "లకà±à°·à°£à°‚ విశదీకృత వివరమ కొరకౠ'describe [<setting>.<prop>]' టైపౠచేయండి."
+
+#: ../cli/src/connections.c:7520
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం '%s' సవరించà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
+
+#: ../cli/src/connections.c:7526
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' (%s) విజయవంతంగా సవరించబడింది.\n"
+
+#: ../cli/src/connections.c:7553
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "దోషం: ఠఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± అందించబడలేదà±."
+
+#: ../cli/src/connections.c:7577
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం ID దొరకలేదà±."
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "దోషం: <setting>.<property> ఆరà±à°—à±à°®à±†à°‚టౠదొరకలేదà±."
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "దోషà°: చెలà±à°²à°¨à°¿ <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7620
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "దోషం: చెలà±à°²à°¨à°¿à°¦à°¿ లేదా '%s' అమరిక à°…à°¨à±à°®à°¤à°¿à°‚చబడదà±: %s."
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "దోషం: చెలà±à°²à°¨à°¿ లకà±à°·à°£à°‚ '%s': %s."
+
+#: ../cli/src/connections.c:7647
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "దోషం: %s సవరించà±à°Ÿà°•à± విఫలమైంది.%s: %s."
+
+#: ../cli/src/connections.c:7677
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠతొలగింపౠవిఫలమైంది: %s"
+
+#: ../cli/src/connections.c:7747
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "దోషమà±: తెలియని à°…à°¨à±à°¸à°‚ధానం: %s\n"
+
+#: ../cli/src/connections.c:7781
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "దోషమà±: తెలియని à°…à°¨à±à°¸à°‚ధానమà±(à°²) నౠతొలగించలేదà±: %s."
+
+#: ../cli/src/connections.c:7852
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "ఫైలౠ'%s' లోడౠచేయలేక పోయింది\n"
+
+#: ../cli/src/connections.c:7917
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr "దోషం: 'configured' లేదా 'active' ఆదేశం 'connection show' కౠకావాలి."
+
+#: ../cli/src/connections.c:7984
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "దోషమà±: '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ 'à°…à°¨à±à°¸à°‚ధాన' ఆదేశం కాదà±."
+
+#: ../cli/src/connections.c:8053 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "దోషమà±: సిసà±à°Ÿà°®à± అమరికలనౠపొందలేక పోయింది."
+
+#: ../cli/src/connections.c:8063
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± పొందలేదà±: అమరికల సేవ నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
+
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNECTION"
+
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "à°…à°®à±à°®à°•à°‚దారà±"
-#. 3
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "ఉతà±à°ªà°¤à±à°¤à°¿"
-#. 4
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "à°¡à±à°°à±ˆà°µà°°à±"
-#. 5
-#: ../cli/src/devices.c:113
-#| msgid "DRIVER"
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "à°¡à±à°°à±ˆà°µà°°à±-వరà±à°·à°¨à±"
-#. 6
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
-#. 7
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:95 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:90 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "REASON"
-#. 10
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "à°«à°°à±à°®à±à°µà±‡à°°à±-దొరకటà±à°²à±‡à°¦à±"
-#. 15
-#: ../cli/src/devices.c:123
-#| msgid "AUTOCONNECT"
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿-à°…à°¨à±à°¸à°‚ధానాలà±"
-#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
-#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
-#. 0
-#: ../cli/src/devices.c:142
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
-#. 0
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:166
-#| msgid "FREQ"
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#. 1
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:173
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
-#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:187
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:188
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIVE"
-#. 0
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "NSP"
+
+#: ../cli/src/devices.c:213
msgid "SLAVES"
msgstr "à°¸à±à°²à±‡à°µà±à°¸à±"
-#. 0
-#: ../cli/src/devices.c:227
-#| msgid "UUID"
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:243
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-PROPERTIES"
+
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "బాండà±"
+
+#: ../cli/src/devices.c:248 ../tui/nm-editor-utils.c:227
+#: ../tui/nm-ui-utils.c:355 ../tui/nm-ui-utils.c:580 ../tui/nmt-page-vlan.c:53
+msgid "VLAN"
+msgstr "VLAN"
+
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "à°…à°¨à±à°¸à°‚ధానాలà±"
+
+#: ../cli/src/devices.c:274
#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
-#| "\n"
msgid ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"వాడà±à°•: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:343
+#: ../cli/src/devices.c:298
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device status'.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli device status { help }\n"
+"\n"
+"à°…à°¨à±à°¨à°¿ పరికరాల కొరకౠసà±à°¥à°¿à°¤à°¿ చూపà±à°¨à±.\n"
+"à°…à°ªà±à°°à°®à±‡à°¯à°‚à°—à°¾, కింది నిలà±à°µà±à°µà°°à±à°¸à°²à± చూపబడà±à°¨à±:\n"
+" DEVICE - ఇంటరà±à°«à±‡à°¸à± పేరà±\n"
+" TYPE - పరికరం రకం\n"
+" STATE - పరికరం à°¸à±à°¥à°¿à°¤à°¿\n"
+" CONNECTION - పరికరం పైన à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయబడిన à°…à°¨à±à°¸à°‚ధానం (à°à°®à±ˆà°¨à°¾ ఉంటే)\n"
+"à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚చబడిన నిలà±à°µà±à°µà°°à±à°¸à°²à± '--fields' à°—à±à°²à±‹à°¬à°²à± à°à°šà±à°šà°¿à°•à°‚ ఉపయోగించి మారà±à°šà°µà°šà±à°šà±. "
+"'status' à°…à°¨à±à°¨à°¦à°¿\n"
+"à°…à°ªà±à°°à°®à±‡à°¯ ఆదేశం, దానరà±à°§à°‚ 'nmcli device' అనేది 'nmcli device status' కాలౠ"
+"చేయà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/devices.c:314
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"పరికరమà±(à°²) వివరాలౠచూపà±à°¨à±.\n"
+"ఆదేశం à°…à°¨à±à°¨à°¦à°¿ à°…à°¨à±à°¨à°¿ పరికరాల, లేదా ఇచà±à°šà°¿à°¨ పరికరం యొకà±à°• వివరాలౠజాబితాచేయà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/devices.c:326
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be activated."
+"\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"పరికరం à°…à°¨à±à°¸à°‚ధానించà±à°¨à±.\n"
+"à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయà±à°Ÿà°•à± à°…à°¨à±à°µà±ˆà°¨ à°…à°¨à±à°¸à°‚ధానం కొరకౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±à°¨à±."
+"\n"
+"à°¸à±à°µà°¯à°‚చాలకంగా-à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± అమరà±à°šà°¨à°¿ à°…à°¨à±à°¸à°‚ధానాలనౠకూడా అది పరిగణించà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/devices.c:339
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"పరికరం à°…à°¨à±à°¸à°‚ధానం తీసివేయà±à°¨à±.\n"
+"ఆదేశం పరికరం à°…à°¨à±à°¸à°‚ధానం తీసివేయà±à°¨à± మరియౠఇకపై వాడà±à°•à°°à°¿/మానవీయ జోకà±à°¯à°‚ లేకà±à°‚à°¡à°¾ "
+"à°…à°¨à±à°¸à°‚ధానాలనà±\n"
+"à°¸à±à°µà°¯à°‚చాలకంగా-à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² పరచడం నిరోధించà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/devices.c:352
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Wi-Fi పరికరాలపై à°šà°°à±à°¯ జరà±à°ªà±à°¨à±.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ Wi-Fi à°à°•à±à°¸à±†à°¸à± పాయింటà±à°²à°¨à± జాబితా చేయà±à°¨à±. ఫలానా ఇంటరà±à°«à±‡à°¸à±, లేదా "
+"ఫలానా BSSID కొరకౠAP లనౠజాబితా చేయà±à°Ÿà°•à±\n"
+"'ifname' మరియౠ'bssid' à°à°šà±à°šà°¿à°•à°¾à°²à± ఉపయోగించవచà±à°šà±.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"SSID లేదా BSSID చేత తెలà±à°ªà°¬à°¡à°¿à°¨ Wi-Fi నెటà±à°µà°°à±à°•à±à°•à± à°…à°¨à±à°¸à°‚ధానం à°…à°—à±à°¨à±. ఆదేశం\n"
+"కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం సృషà±à°Ÿà°¿à°‚à°šà±à°¨à± à°…à°Ÿà±à°ªà±ˆ దానిని పరికరంపై à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయà±à°¨à±. SSID నౠ"
+"GUI à°•à±à°²à±ˆà°‚టౠనందà±\n"
+" నొకà±à°•à°Ÿà°•à± à°ªà±à°°à°¤à°¿à°—à°¾ ఇది కమాండà±â€Œ-లైనౠమారà±à°—à°‚. ఆదేశం à°Žà°ªà±à°ªà±à°¡à±‚ కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం "
+"సృషà±à°Ÿà°¿à°‚à°šà±à°¨à±\n"
+"à°…à°‚à°¦à±à°µà°²à°¨ కొతà±à°¤ Wi-Fi నెటà±à°µà°°à±à°•à±à°²à°•à± à°…à°¨à±à°¸à°‚ధానం à°…à°—à±à°Ÿà°•à± à°®à±à°–à±à°¯à°‚à°—à°¾ ఉపయోగంగా ఉంటà±à°‚ది.\n"
+"మనà±à°—డలో ఉనà±à°¨ నెటà±à°µà°°à±à°•à±à°•à± à°’à°• à°…à°¨à±à°¸à°‚ధానమంటే, మనà±à°—డలో ఉనà±à°¨ à°ªà±à°°à±Šà°«à±ˆà°²à± నౠఈ విధంగా\n"
+"తెవడం చాలా ఉతà±à°¤à°®à°‚: nmcli con up id <name>. à°ˆ సమయంలో open, WEP మరియౠWPA-PSK\n"
+"నెటà±à°µà°°à±à°•à±à°²à± మాతà±à°°à°®à±‡ తోడà±à°ªà°¾à°Ÿà±à°¨à°¿à°šà±à°šà±à°¨à±. à°à°ªà°¿ ఆకృతీకరణ à°…à°¨à±à°¨à°¦à°¿ DHCP à°¦à±à°µà°¾à°°à°¾ "
+"పొందబడà±à°¨à±\n"
+"అని కూడా à°…à°¨à±à°•à±‹à°¬à°¡à±à°¨à±.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ à°à°•à±à°¸à±†à°¸à± పాయింటà±à°²à°¨à± తకà±à°·à°£à°®à±‡ à°°à±€-à°¸à±à°•à°¾à°¨à± చేయà±à°Ÿà°•à± నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± "
+"à°…à°­à±à°¯à°°à±à°¦à°¿à°‚à°šà±à°®à±\n"
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± Wi-Fi నెటà±à°µà°°à±à°•à±à°² కొరకౠసమయానà±à°—తంగా పరిశీలించà±à°¨à±, అయితే "
+"కొనà±à°¨à°¿ సందరà±à°­à°¾à°²à°²à±‹\n"
+"అది మానవీయంగా à°¸à±à°•à°¾à°¨à± చేయà±à°Ÿà°•à± ఉపయోగకరంగా ఉంటà±à°‚ది. à°ˆ ఆదేశం AP లనౠచూపదని "
+"గమనించండి,\n"
+"దాని కొరకౠ'nmcli device wifi list' ఉపయోగించండి.\n"
+"\n"
+
+#: ../cli/src/devices.c:386
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"WiMAX పరికరాలపై ఆపరేషనౠజరà±à°ªà±à°®à±.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ WiMAX NSP లనౠజాబితాచేయి. నెటà±à°µà°°à±à°•à±à°²à°¨à± ఫలానా ఇంటరà±à°«à±‡à°¸à±â€Œà°¤à±‹, లేదా "
+"ఫలానా NSP తో\n"
+"జాబితా చేయà±à°Ÿà°•à± 'ifname' మరియౠ'nsp' à°à°šà±à°šà°¿à°•à°¾à°²à± ఉపయోగించవచà±à°šà±.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(à°à°¦à±€à°•à°¾à°¦à±)"
-#: ../cli/src/devices.c:399
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:548
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:409
-msgid "Encrypted: "
-msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà±†à°¡à±: "
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:414
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:416
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:418
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:421
-msgid "Enterprise "
-msgstr "à°Žà°‚à°Ÿà°°à±â€Œà°ªà±à°°à±ˆà°œà± "
-
-#: ../cli/src/devices.c:430
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:432
-msgid "Infrastructure"
-msgstr "అవసà±à°¥à°¾à°ªà°¨(ఇనà±à°«à±à°°à°¾à°¸à±à°Ÿà±à°°à°•à±à°šà°°à±)"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:468
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "నివాసం"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "భాగసà±à°µà°¾à°®à°¿"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "రోమింగà±"
-#: ../cli/src/devices.c:546
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "దోషమà±: 'dev list': %s"
-
-#: ../cli/src/devices.c:548
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "దోషమà±: 'dev list': %s; à°…à°¨à±à°®à°¤à°¿à°‚చబడౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à±: %s"
-
-#: ../cli/src/devices.c:557
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "పరికరమౠవివరమà±à°²à±"
-#: ../cli/src/devices.c:602 ../cli/src/devices.c:605 ../cli/src/devices.c:1081
-#: ../cli/src/utils.c:477
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "దోషం: 'పరికరం చూపà±': %s"
+
+#: ../cli/src/devices.c:787 ../cli/src/devices.c:790 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1474
msgid "(unknown)"
msgstr "(తెలియని)"
-#: ../cli/src/devices.c:614
-#| msgid "connected"
-msgid "not connected"
-msgstr "à°…à°¨à±à°¸à°‚ధానం కాలేదà±"
-
-#: ../cli/src/devices.c:641
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "ఆనà±"
-#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "ఆఫà±"
-#: ../cli/src/devices.c:923
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "దోషమà±: 'dev status': %s"
+msgid "Error: 'device status': %s"
+msgstr "దోషం: 'పరికరం చూపà±': %s"
-#: ../cli/src/devices.c:925
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "దోషమà±: 'dev status': %s; à°…à°¨à±à°®à°¤à°¿à°‚చబడౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à±: %s"
-
-#: ../cli/src/devices.c:948
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "పరికరమà±à°² యొకà±à°• à°¸à±à°¥à°¿à°¤à°¿"
-#: ../cli/src/devices.c:979
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "దోషమà±: '%s' ఆరà±à°—à±à°®à±†à°‚టౠతపà±à°ªà°¿à°ªà±‹à°¯à°¿à°¨à°¦à°¿."
+msgid "Error: invalid extra argument '%s'."
+msgstr "దోషమà±: చెలà±à°²à°¨à°¿ అదనపౠఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s'."
-#: ../cli/src/devices.c:1020 ../cli/src/devices.c:1185
-#: ../cli/src/devices.c:1326 ../cli/src/devices.c:1973
+#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1422
+#: ../cli/src/devices.c:1557 ../cli/src/devices.c:1696
+#: ../cli/src/devices.c:2436
#, c-format
msgid "Error: Device '%s' not found."
msgstr "దోషమà±: పరికరమౠ'%s' కనబడలేదà±."
-#: ../cli/src/devices.c:1043
+#: ../cli/src/devices.c:1319
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "సఫలం: పరికరం '%s' సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à±."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "దోషం: పరికరం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¤ విఫలమైంది: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "పరికరం '%s' à°…à°¨à±à°¸à°‚దానించబడెనà±.\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "ఇంటరà±à°«à±‡à°¸à±:"
+
+#: ../cli/src/devices.c:1381 ../cli/src/devices.c:1390
+#: ../cli/src/devices.c:1516 ../cli/src/devices.c:1525
+#, c-format
+msgid "Error: No interface specified."
+msgstr "దోషమà±: ఠయింటరà±à°«à±‡à°¸à± తెలà±à°ªà°²à±‡à°¦à±."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "దోషం: అదనపౠఆరà±à°—à±à°®à±†à°‚à°Ÿà± à°…à°¨à±à°®à°¤à°¿à°‚చబడదà±: '%s'."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "సఫలమైంది: పరికరమౠ'%s' సఫలవంతంగా అననà±à°¸à°‚ధానించబడింది."
-#: ../cli/src/devices.c:1078
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "దోషమà±: పరికరమౠ'%s' (%s) అననà±à°¸à°‚ధానమౠవిఫలమైంది: %s"
-#: ../cli/src/devices.c:1091
+#: ../cli/src/devices.c:1485
#, c-format
-#| msgid "Success: Device '%s' successfully disconnected."
msgid "Device '%s' has been disconnected.\n"
msgstr "పరికరమౠ'%s' à°…à°¨à±à°¸à°‚ధానం తెంచబడింది.\n"
-#: ../cli/src/devices.c:1154
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "దోషమà±: iface తెలà±à°ªà°µà°²à°¸à°¿ à°µà±à°‚ది."
-
-#: ../cli/src/devices.c:1284
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "దోషమà±: 'dev wifi': %s"
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "వై-ఫై à°¸à±à°•à°¾à°¨à± జాబితా"
-#: ../cli/src/devices.c:1286
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "దోషమà±: 'dev wifi': %s; à°…à°¨à±à°®à°¤à°¿à°‚చబడౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à±: %s"
+msgid "Error: 'device wifi': %s"
+msgstr "దోషం: 'పరికర వైఫై': %s"
-#: ../cli/src/devices.c:1309
-msgid "WiFi scan list"
-msgstr "WiFi à°¸à±à°•à°¾à°¨à± జాబితా"
-
-#: ../cli/src/devices.c:1346 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with bssid '%s' not found."
msgstr "దోషమà±: bssid '%s' తో యాకà±à°¸à±†à°¸à± పాయింటౠకనబడలేదà±."
-#: ../cli/src/devices.c:1363
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "దోషమà±: పరికరమౠ'%s' à°…à°¨à±à°¨à°¦à°¿ WiFi పరికరమౠకాదà±."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "దోషమà±: పరికరమౠ'%s' à°…à°¨à±à°¨à°¦à°¿ Wi-Fi పరికరమౠకాదà±."
-#: ../cli/src/devices.c:1431 ../cli/src/devices.c:1477
+#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr ""
-"UUID '%s' తో à°…à°¨à±à°¸à°‚ధానం సృషà±à°Ÿà°¿à°‚చబడింది మరియౠపరికరం '%s' పై à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à±\n"
+"UUID '%s' తో à°…à°¨à±à°¸à°‚ధానం సృషà±à°Ÿà°¿à°‚చబడింది మరియౠపరికరం '%s' పై "
+"à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à±\n"
-#: ../cli/src/devices.c:1436
+#: ../cli/src/devices.c:1829
#, c-format
-#| msgid "Error: Connection activation failed: %s."
msgid "Error: Connection activation failed: (%d) %s."
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది: (%d) %s."
-#: ../cli/src/devices.c:1461
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "దోషం: కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à±/à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
-#: ../cli/src/devices.c:1469
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"దోషం: కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à±/à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: తెలియని దోషం"
-#: ../cli/src/devices.c:1613
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID లేదా BSSID: "
+
+#: ../cli/src/devices.c:2018
#, c-format
-#| msgid "Error: %s argument is missing."
msgid "Error: SSID or BSSID are missing."
msgstr "దోషమà±: SSID లేదా BSSID దొరకటà±à°²à±‡à°¦à±."
-#: ../cli/src/devices.c:1636
+#: ../cli/src/devices.c:2042
#, c-format
-#| msgid "Error: timeout value '%s' is not valid."
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "దోషమà±: bssid ఆరà±à°—à±à°®à±†à°‚టౠవిలà±à°µ '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ BSSID కాదà±."
-#: ../cli/src/devices.c:1660
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1434,88 +3357,77 @@ msgstr ""
"దోషం: wep-key-type ఆరà±à°—à±à°®à±†à°‚టౠవిలà±à°µ '%s' చెలà±à°²à°¨à°¿à°¦à°¿, 'key' లేదా 'phrase' "
"à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
-#: ../cli/src/devices.c:1700
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "దోషం: %s: %s."
+
+#: ../cli/src/devices.c:2101
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"దోషం: (%s) à°•à± à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± BSSID à°…à°¨à±à°¨à°¦à°¿ bssid ఆరà±à°—à±à°®à±†à°‚à°Ÿà± (%s)తో "
"విభేదిసà±à°¤à±‹à°‚ది."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "దోషం: పారామితి '%s' à°…à°¨à±à°¨à°¦à°¿ SSID లేదా BSSID కాదà±."
-#: ../cli/src/devices.c:1735
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
-#| msgid "Error: Device '%s' is not a WiFi device."
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "దోషమà±: పరికరమౠ'%s' à°…à°¨à±à°¨à°¦à°¿ Wi-Fi పరికరమౠకాదà±."
-
-#: ../cli/src/devices.c:1737
-#, c-format
-#| msgid "Error: No suitable device found."
msgid "Error: No Wi-Fi device found."
msgstr "దోషమà±: à° Wi-Fi పరికరమౠకనబడలేదà±."
-#: ../cli/src/devices.c:1755
+#: ../cli/src/devices.c:2151
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: No network with SSID '%s' found."
msgstr "దోషమà±: SSID '%s'తో ఠనెటà±à°µà°°à±à°•à± కనబడలేదà±."
-#: ../cli/src/devices.c:1757
+#: ../cli/src/devices.c:2153
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: No access point with BSSID '%s' found."
msgstr "దోషమà±: BSSID '%s'తో యే యాకà±à°¸à±†à°¸à± పాయింటౠకనబడలేదà±."
-#: ../cli/src/devices.c:1855
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "దోషమà±: 'dev wifi' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
-
-#: ../cli/src/devices.c:1931
-#, c-format
-#| msgid "Error: 'dev wifi': %s"
-msgid "Error: 'dev wimax': %s"
-msgstr "దోషమà±: 'dev wimax': %s"
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "సంకేతపదం:"
-#: ../cli/src/devices.c:1933
+#: ../cli/src/devices.c:2321
#, c-format
-#| msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "దోషమà±: 'dev wimax': %s; à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨ à°•à±à°·à±‡à°¤à±à°°à°®à±à°²à±: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "దోషమà±: 'పరికర వైఫే' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
-#: ../cli/src/devices.c:1956
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP జాబితా"
-#: ../cli/src/devices.c:1993
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "దోషమà±: 'పరికర wimax': %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
-#| msgid "Error: Device '%s' not found."
msgid "Error: NSP with name '%s' not found."
msgstr "దోషమà±: పేరౠ'%s'తో NSP కనబడలేదà±."
-#: ../cli/src/devices.c:2004
+#: ../cli/src/devices.c:2472
#, c-format
-#| msgid "Error: Device '%s' is not a WiFi device."
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "దోషమà±: పరికరం '%s' WiMAX పరికరం కాదà±."
-#: ../cli/src/devices.c:2035
+#: ../cli/src/devices.c:2510
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
msgid "Error: Access point with nsp '%s' not found."
msgstr "దోషం: nsp '%s'తో యాకà±à°¸à±†à°¸à± పాయింటౠకనబడలేదà±."
-#: ../cli/src/devices.c:2062
+#: ../cli/src/devices.c:2542
#, c-format
-#| msgid "Error: 'dev wifi' command '%s' is not valid."
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "దోషం: 'dev wimax' ఆదేశం '%s' చెలà±à°²à±à°¨à°¦à°¿à°•à°¾à°¦à±."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "దోషం: 'పరికర wimax' ఆదేశం '%s' చెలà±à°²à±à°¨à°¦à°¿à°•à°¾à°¦à±."
-#: ../cli/src/devices.c:2112
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "దోషమà±: 'dev' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
@@ -1524,290 +3436,505 @@ msgstr "దోషమà±: 'dev' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à
msgid "RUNNING"
msgstr "RUNNING"
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "వరà±à°·à°¨à±"
-#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "నెటà±-చేతనమైంది"
+msgid "STARTUP"
+msgstr "à°ªà±à°°à°¾à°°à°‚à°­à°‚"
-#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+msgid "CONNECTIVITY"
+msgstr "à°…à°¨à±à°¸à°‚ధానత"
-#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "నెటà±à°µà°°à±à°•à°¿à°‚à°—à±"
-#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
-#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
-#. 7
#: ../cli/src/network-manager.c:45
-#| msgid "WIFI-HARDWARE"
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
-#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "వైమాకà±à°¸à±"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "à°…à°¨à±à°®à°¤à°¿"
-#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "విలà±à°µ"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "à°¸à±à°¥à°¾à°¯à°¿"
+
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "డొమైనà±à°²à±"
+
+#: ../cli/src/network-manager.c:95
#, c-format
-#| msgid ""
-#| "Usage: nmcli nm { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
-#| "\n"
-#| " status\n"
-#| " sleep\n"
-#| " wakeup\n"
-#| " wifi [on|off]\n"
-#| " wwan [on|off]\n"
-#| "\n"
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
msgstr ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"వాడà±à°•: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+" à°¸à±à°¥à°¿à°¤à°¿\n"
+"\n"
+" hostname [<hostname>]\n"
"\n"
-" status\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli general status { help }\n"
+"\n"
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± యొకà±à°• మొతà±à°¤à°‚ à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ చూపà±à°¨à±.\n"
+"'status' à°…à°¨à±à°¨à°¦à°¿ à°…à°ªà±à°°à°®à±‡à°¯ à°šà°°à±à°¯, దానరà±à°§à°‚ 'nmcli gen' à°…à°¨à±à°¨à°¦à°¿ 'nmcli gen "
+"status' పిలà±à°šà±à°¨à±\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system hostname."
+"\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"à°¸à±à°¥à°¿à°°à°®à±ˆà°¨ à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠపొందండి లేదా మారà±à°šà°‚à°¡à°¿.\n"
+"ఠఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°¸à± లేకà±à°‚à°¡à°¾, ఇది à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ ఆకృతీకరించిన అతిధేయపేరౠమà±à°¦à±à°°à°¿à°‚à°šà±à°¨à±. "
+"మీరౠఅతిధేయపేరౠపంపినపà±à°ªà±à°¡à±,\n"
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± దానిని కొతà±à°¤ à°¸à±à°¥à°¿à°°à°®à±ˆà°¨ à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠవలె అమరà±à°šà±à°¨à±."
+"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli general permissions { help }\n"
+"\n"
+"ధృవీకృత ఆపరేషనà±à°² కొరకౠకాలరౠపరిమితà±à°²à°¨à± చూపà±à°®à±.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± లాగింగౠసà±à°¥à°¾à°¯à°¿ మరియౠడొమైనà±à°²à± పొందౠలేదా మారà±à°šà±.\n"
+"ఠఆరà±à°—à±à°®à±†à°‚టౠలేకà±à°‚à°¡à°¾ à°ªà±à°°à°¸à±à°¤à±à°¤ లాగింగౠసà±à°¥à°¾à°¯à°¿ మరియౠడొమైనà±à°²à± చూపà±à°¨à±. లాగింగౠ"
+"à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ "
+"మారà±à°šà±à°Ÿà°•à±,\n"
+"à°¸à±à°¥à°¾à°¯à°¿ మరియà±/లేదా డొమైనౠఅందించà±à°®à±. సాధà±à°¯à°®à°—ౠలాగింగౠడొమైనà±à°² కొరకౠదచయేసి man "
+"పేజీ\n"
+"చూడండి.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli networking on { help }\n"
+"\n"
+"నెటà±à°µà°°à±à°•à°¿à°‚గౠఆనౠచేయà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli networking off { help }\n"
+"\n"
+"నెటà±à°µà°°à±à°•à°¿à°‚గౠఆఫౠచేయà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the connectivity."
+"\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధాన à°¸à±à°¥à°¿à°¤à°¿ పొందà±à°¨à±.\n"
+"à°à°šà±à°šà°¿à°• 'check' ఆరà±à°—à±à°®à±†à°‚à°Ÿà± à°…à°¨à±à°¨à°¦à°¿ నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నౠఅనà±à°¸à°‚ధానం కొరకౠ"
+"తిరిగి-పరిశీలించà±à°¨à°Ÿà±à°²à± చేయà±à°¨à±."
+"\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"à°…à°¨à±à°¨à°¿ రేడియో à°¸à±à°µà°¿à°šà±à°šà±à°² à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ పొందà±à°¨à±, లేదా వాటిని ఆనà±/ఆఫౠచేయà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"వై-ఫై రేడియో à°¸à±à°µà°¿à°šà± à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ పొందà±à°¨à±, లేదా ఆనà±/ఆఫౠచేయà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠరేడియో à°¸à±à°µà°¿à°šà± à°¸à±à°¥à°¿à°¤à°¿ పొందà±à°¨à±, లేదా దానిని ఆనà±/ఆఫౠ"
+"చేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"WiMAX రేడియో à°¸à±à°µà°¿à°šà± à°¸à±à°¥à°¿à°¤à°¿ పొందà±à°¨à±, లేదా దానిని ఆనà±/ఆఫౠచేయà±à°¨à±.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "à°¸à±à°¥à°¬à±à°¦à±à°—à°¾(asleep)"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "à°…à°¨à±à°¸à°‚ధానమైంది(à°¸à±à°¥à°¾à°¨à°¿à°•à°‚ మాతà±à°°à°®à±‡)"
-#: ../cli/src/network-manager.c:114
-#| msgid "connected"
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "à°…à°¨à±à°¸à°‚ధానమైంది (సైటౠమాతà±à°°à°®à±‡)"
-#: ../cli/src/network-manager.c:118
-#| msgid "connecting"
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "సంధానం తెంచà±à°¤à±‹à°‚ది"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "దోషమà±: 'nm status': %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "పోరà±à°Ÿà°²à±"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "పరిమితమైన"
+
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "పూరà±à°¤à°¿"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "దోషమà±: 'nm status': %s; allowed fields: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "దోషం: à°ˆ à°•à±à°·à±‡à°¤à±à°°à°®à±à°²à± మాతà±à°°à°®à±‡ à°…à°¨à±à°®à°¤à°¿à°‚చబడà±à°¨à±: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "చేతనమైంది"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "అచేతనమైంది"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
-msgstr "నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• à°¸à±à°¥à°¿à°¤à°¿"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°¸à±à°¥à°¿à°¤à°¿"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "నడà±à°šà±à°šà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "నడà±à°šà±à°Ÿà°²à±‡à°¦à±"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "à°ªà±à°°à°¾à°°à°‚à°­à°¿à°¸à±à°¤à±‹à°‚ది"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "à°ªà±à°°à°¾à°°à°‚భమైనà±"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
+#: ../cli/src/network-manager.c:475
#, c-format
-#| msgid "Error: 'nm status': %s"
-msgid "Error: 'nm permissions': %s"
-msgstr "దోషం: 'nm permissions': %s"
+msgid "Error: 'general permissions': %s"
+msgstr "దోషం: 'సాధారణ à°…à°¨à±à°®à°¤à±à°²à±': %s"
-#: ../cli/src/network-manager.c:303
-#, c-format
-#| msgid "Error: 'nm status': %s; allowed fields: %s"
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "దోషం: 'nm permissions': %s; à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨ à°•à±à°·à±‡à°¤à±à°°à°®à±à°²à±: %s"
-
-#: ../cli/src/network-manager.c:324
-#| msgid "NetworkManager status"
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
-msgstr "నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• à°…à°¨à±à°®à°¤à±à°²à±"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°…à°¨à±à°®à°¤à±à°²à±"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:457
+#: ../cli/src/network-manager.c:530
#, c-format
-#| msgid "Error: could not connect to D-Bus."
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "దోషం: à°µà±à°¯à°µà°¸à±à°¥ బసà±â€Œà°•à± à°…à°¨à±à°¸à°‚ధానం కాలేదà±: %s"
+msgid "Error: 'general logging': %s"
+msgstr "దోషమà±: 'సాధారణ లాగింగà±': %s"
-#: ../cli/src/network-manager.c:361
-#, c-format
-#| msgid "Error: could not connect to D-Bus."
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "దోషం: D-Bus ఆబà±à°œà°•à±à°Ÿà± à°ªà±à°°à±‹à°•à±à°¸à±€ సృషà±à°Ÿà°¿à°‚చలేక పోయింది."
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± లాగింగà±"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:565
#, c-format
-#| msgid "Error: 'con list': %s"
-msgid "Error in sleep: %s"
-msgstr "à°¸à±à°²à±€à°ªà± నందౠదోషం: %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "దోషం: అతిధేయ పేరౠఅమరà±à°šà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"దోషమà±: '--fields' విలà±à°µ '%s' యికà±à°•à°¡ చెలà±à°²à±à°¨à°¦à°¿ కాదà±; à°…à°¨à±à°®à°¤à°¿à°‚చబడౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à±: %"
-"s"
+msgid "Error: access denied to set logging; %s"
+msgstr "దోషం: లాగింగౠఅమరà±à°šà±à°Ÿà°•à± à°à°•à±à°¸à±†à°¸à± నిరాకరించబడెనà±; %s"
-#: ../cli/src/network-manager.c:424
-#| msgid "WiFi enabled"
-msgid "Networking enabled"
-msgstr "నెటà±à°µà°°à±à°•à°¿à°‚గౠచేతనమైంది"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "దోషమà±: %s"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:692
#, c-format
-#| msgid "Error: invalid 'wwan' parameter: '%s'."
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "దోషం: చెలà±à°²à°¨à°¿ 'చేతన' పారామితి: '%s'; 'true' లేదా 'false' à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "దోషమà±: 'సాధారణ' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:710
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "దోషమà±: నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• చే à°¸à±à°²à±€à°ªà°¿à°‚à°—à± à°¸à±à°¥à°¿à°¤à°¿ యెగà±à°®à°¤à°¿à°•à°¾à°²à±‡à°¦à±."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr ""
+"దోషమà±: '--fields' విలà±à°µ '%s' ఇకà±à°•à°¡ చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(à°…à°¨à±à°®à°¤à°¿à°‚à°šà± à°•à±à°·à±‡à°¤à±à°°à°‚: %s)"
-#: ../cli/src/network-manager.c:458
+#: ../cli/src/network-manager.c:735
#, c-format
-#| msgid "Error: invalid 'wifi' parameter: '%s'."
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "దోషం: చెలà±à°²à°¨à°¿ 'à°¸à±à°²à±€à°ªà±' పారామితి: '%s'; 'true' లేదా 'false' à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "దోషమà±: చెలà±à°²à°¨à°¿ '%s' ఆరà±à°—à±à°®à±†à°‚à°Ÿà±: '%s' (ఆనà±/ఆఫౠవà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±)."
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi చేతనమైంది"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "à°…à°¨à±à°¸à°‚ధానత"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "దోషమà±: చెలà±à°²à°¨à°¿ 'wifi' పారామితి: '%s'."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "నెటà±à°µà°°à±à°•à°¿à°‚à°—à±"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN చేతనమైంది"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "దోషం: 'నెటà±à°µà°°à±à°•à°¿à°‚à°—à± à°…à°¨à±à°¸à°‚ధానత' ఆదేశం '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±."
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "దోషమà±: చెలà±à°²à°¨à°¿ 'wwan' పారామితి: '%s'."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "దోషమà±: 'నెటà±à°µà°°à±à°•à°¿à°‚à°—à±' ఆదేశమౠ'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±."
-#: ../cli/src/network-manager.c:556
-#| msgid "WiFi enabled"
-msgid "WiMAX enabled"
-msgstr "WiMAX చేతనమైంది"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "రేడియో à°¸à±à°µà°¿à°šà±†à°¸à±"
-#: ../cli/src/network-manager.c:572
-#, c-format
-#| msgid "Error: invalid 'wifi' parameter: '%s'."
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "దోషమà±: చెలà±à°²à°¨à°¿ 'wimax' పారామితి: '%s'."
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "వై-ఫై రేడియో à°¸à±à°µà°¿à°šà±"
+
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN రేడియో à°¸à±à°µà°¿à°šà±"
-#: ../cli/src/network-manager.c:585
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX రేడియో à°¸à±à°µà°¿à°šà±"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "దోషమà±: 'nm' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "దోషమà±: 'రేడియో' ఆదేశమౠ'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1820,16 +3947,21 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
-"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+"వాడà±à°•: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
" -t[erse] terse output\n"
@@ -1840,258 +3972,789 @@ msgstr ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:121
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "దోషమà±: ఆబà±à°œà°•à±à°Ÿà± '%s' తెలియనిది, 'nmcli help' à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±."
-#: ../cli/src/nmcli.c:151
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--terse' రెండవ సమయానà±à°¨à°¿ తెలిపినది."
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr ""
"దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--terse' à°…à°¨à±à°¨à°¦à°¿ '--pretty'తో పరసà±à°ªà°°à°‚ విభేదించà±à°šà±à°¨à±à°¨à°¦à°¿."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--pretty' రెండవసారి తెలà±à°ªà°¬à°¡à°¿à°‚ది."
-#: ../cli/src/nmcli.c:169
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr ""
"దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--pretty' à°…à°¨à±à°¨à°¦à°¿ '--terse'తో పరసà±à°ªà°°à°‚ విభేదించà±à°šà±à°¨à±à°¨à°¦à°¿."
-#: ../cli/src/nmcli.c:179 ../cli/src/nmcli.c:195
+#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "దోషమà±: '%s' à°à°šà±à°šà°¿à°•à°®à± కొరకౠతపà±à°ªà°¿à°ªà±‹à°¯à°¿à°¨ ఆరà±à°—à±à°®à±†à°‚à°Ÿà±."
-#: ../cli/src/nmcli.c:188 ../cli/src/nmcli.c:204
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "దోషమà±: '%s' à°…à°¨à±à°¨à°¦à°¿ '%s' à°à°šà±à°šà°¿à°•à°®à± కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఆరà±à°—à±à°®à±†à°‚టౠకాదà±."
-#: ../cli/src/nmcli.c:211
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "దోషమà±: '%s' à°à°šà±à°šà°¿à°•à°®à±à°² కొరకౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à± à°…à°¨à±à°¨à°µà°¿ తపà±à°ªà°¿à°ªà±‹à°µà±à°šà±à°¨à±à°¨à°µà°¿."
-#: ../cli/src/nmcli.c:219
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "దోషం: '%s' à°…à°¨à±à°¨à°¦à°¿ '%s' à°à°šà±à°šà°¿à°•à°‚ కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సమయమà±à°—ింపౠకాదà±."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli సాధనమà±, వరà±à°·à°¨à± %s\n"
-#: ../cli/src/nmcli.c:225
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '%s' తెలియనిది, 'nmcli -help' à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±à°®à±."
-#: ../cli/src/nmcli.c:244
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %d."
+msgstr ""
+"\n"
+"దోషం: nmcli à°…à°¨à±à°¨à°¦à°¿ సంకేతం %d చేత ఆంతంచేయబడెనà±."
+
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "సిగà±à°¨à°²à± %d వచà±à°šà°¿à°‚ది, మూసివేయà±à°šà±à°¨à±à°¨à°¦à°¿..."
+msgid "Failed to set signal mask: %d"
+msgstr "సంకేత మాసà±à°•à± అమరà±à°šà±à°Ÿà°•à± విఫలమైంది: %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "సంకేతం సంభాలించౠతà±à°°à±†à°¡à± సృషà±à°Ÿà°¿à°‚à°šà±à°Ÿà°²à±‹ విఫలమైంది: %d"
-#: ../cli/src/nmcli.c:269
-#| msgid "Error: Could not get user settings."
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "దోషమà±: NMClient ఆబà±à°œà°•à±à°Ÿà± సృషà±à°Ÿà°¿à°‚చలేక పోయింది."
-#: ../cli/src/nmcli.c:285
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "సఫలంమైంది"
-#: ../cli/src/settings.c:527
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:529
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit passphrase)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (తెలియని)"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (తెలియని)"
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "à°à°¦à±ˆà°¨à°¾, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:588
-#| msgid "WCDMA 3GPP UMTS 900 MHz, "
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:590
-#| msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (à°à°¦à±€à°•à°¾à°¦à±)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:793
#, c-format
-#| msgid "disabled"
msgid "%d (disabled)"
msgstr "%d (అచేతనమైంది)"
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (చైతనమైన, అభీషà±à°Ÿ పబà±à°²à°¿à°•à± à°à°ªà°¿)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (చేతనమైన, అభీషà±à°Ÿ తాతà±à°•à°¾à°²à°¿à°• à°à°ªà°¿)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (à°à°¦à±€à°•à°¾à°¦à±)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "ఎజెంటà±-à°¸à±à°µà°‚తమైన,"
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "దాయ లేదà±,"
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "అవసరం లేని,"
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (అచేతనమైనà±)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "చేతనమైంది,"
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "à°ªà±à°°à°•à°Ÿà°¿à°‚à°šà±,"
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "విలà±à°²à°¿à°‚à°—à±,"
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (అమరà±à°ªà±à°¤à±€à°¯à°¿)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "à°¸à±à°µà°¯à°‚చాలక"
-#: ../cli/src/utils.c:103
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "à°…à°ªà±à°°à°®à±‡à°¯à°‚"
+
+#: ../cli/src/settings.c:1614
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "మీరౠ'%s' నౠ'%s' కౠఅమరà±à°šà°¾à°²à°¨à°¿ à°…à°¨à±à°•à±Šà°¨à±à°šà±à°¨à±à°¨à°¾à°°à°¾? [yes]:"
+
+#: ../cli/src/settings.c:1616
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "మీరౠ'%s' నౠకూడా à°¤à±à°¡à°¿à°šà°¿à°µà±‡à°¯à°¾à°²à°¨à°¿ à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? [yes]:"
+
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' చెలà±à°²à°¨à°¿à°¦à°¿"
+
+#: ../cli/src/settings.c:1837
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; ఉపయోగించౠ<%d-%d>"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; వాడà±à°• <%d-%d>"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; వాడà±à°• <option>=<value>"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "విషయసూచిక '%s' చెలà±à°²à±à°¨à°¦à°¿à°•à°¾à°¦à±"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "తొలగించà±à°Ÿà°•à± ఠఅంశం లేదà±"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "విషయసూచిక '%d' విసà±à°¤à±ƒà°¤à°¿ <0-%d> నందౠలేదà±"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°‚ '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "తపà±à°ªà°¿à°ªà±‹à°¯à°¿à°¨ à°à°šà±à°šà°¿à°•à°‚"
+
+#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯ కాదౠ(లేదా విసà±à°¤à±ƒà°¤à°¿ దాటి à°µà±à°‚ది)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఈథరà±à°¨à±†à°Ÿà± MAC కాదà±"
+
+#: ../cli/src/settings.c:2115 ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:752
+#: ../libnm-util/nm-setting-vlan.c:475
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ యింటరà±à°«à±‡à°¸à± పేరౠకాదà±"
+
+#: ../cli/src/settings.c:2133 ../cli/src/settings.c:3212
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' సంఖà±à°¯ కాదà±"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ hex à°…à°•à±à°·à°°à°‚ కాదà±"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ MAC కాదà±"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ UUID కాదà±"
+
+#: ../cli/src/settings.c:2317
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"వాడà±à°•à°°à°¿ పరిమితà±à°² జాబితా à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±. కింది విధంగా ఫారà±à°®à°¾à°Ÿà± చేసిన వాడà±à°•à°°à°¿ "
+"పేరà±à°² జాబితా ఇది:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"అంశాలౠఅనà±à°¨à°µà°¿ కామాలౠలేదా à°¸à±à°ªà±‡à°¸à± లతో వేరà±à°šà±‡à°¯à°µà°šà±à°šà±.\n"
+"\n"
+"ఉదాహరణ: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ మాసà±à°Ÿà°°à± కాదà±; ifname లేదా à°…à°¨à±à°¸à°‚ధానం UUID à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ సంకేతపదం అందిచబడలేదà±"
+
+#: ../cli/src/settings.c:2513
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ కౠమరియౠకీ సంకేతపదం à°•à± (ఇంకా అమరà±à°šà°¿ ఉండకపోతే) పాతౠ"
+"à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:\n"
+" <file path> [<password>]\n"
+"ఉదాహరణ: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2583
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"హెకà±à°¸à°¾à°¡à±†à°¸à°¿à°®à°²à± విలà±à°µà°² జాబితావలె బైటà±à°²à°¨à± à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±.\n"
+"రెండౠఫారà±à°®à°¾à°Ÿà±à°²à± ఆమోదించబడెనà±:\n"
+"(a) హెకà±à°¸à°¾à°¡à±†à°¸à°¿à°®à°²à± అంకెల à°¸à±à°Ÿà±à°°à°¿à°‚à°—à±, ఇకà±à°•à°¡ à°ªà±à°°à°¤à°¿ రెండౠఅంకెలౠఒక బైటà±â€Œà°¨à± "
+"సూచించà±à°¨à±where each two digits represent one byte\n"
+"(b) హెకà±à°¸à°¾à°¡à±†à°¸à°¿à°®à°²à± అంకెలవలె à°µà±à°°à°¾à°¸à°¿à°¨ బైటà±à°² జాబితా (à°à°šà±à°šà°¿à°• 0x/0X à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à±à°¤à±‹, "
+"à°à°šà±à°šà°¿à°• లీడింగౠ0 జతచేయి).\n"
+"\n"
+"ఉదాహరణలà±: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2686
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"à°ˆ విధంగా ఫారà±à°®à°¾à°Ÿà± చేసిన బాండింగౠà°à°šà±à°šà°¿à°•à°¾à°² జాబితానౠపà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:\n"
+" option = <value>, option = <value>,... \n"
+"చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°¾à°²à±: %s\n"
+"'mode' à°…à°¨à±à°¨à°¦à°¿ పేరà±à°—à°¾ లేదా సంఖà±à°¯à°—à°¾ అందించవచà±à°šà±:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"ఉదాహరణ: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' చెలà±à°²à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± MAC కాదà±"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ IBoIP P_Key కాదà±"
+
+#: ../cli/src/settings.c:2825
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS సేవికల యొకà±à°• IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾à°² జాబితానౠపà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±.\n"
+"\n"
+"ఉదాహరణ: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(ip[/prefix] [gateway] ఉపయోగించà±)"
+
+#: ../cli/src/settings.c:2897
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"à°ˆ విధంగా ఫారà±à°®à°¾à°Ÿà± చేసిన IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾à°² జాబితానౠపà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"దొరకని à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± 32 à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± వలె à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+"ఉదాహరణ: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:2954
+#, c-format
+msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(ip/[prefix] next-hop [metric] ఉపయోగించà±)"
+
+#: ../cli/src/settings.c:2980
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgstr ""
+"à°ˆ విధంగా ఫారà±à°®à°¾à°Ÿà± చేసిన IPv4 రౌటà±à°² జాబితా à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"దొరకని à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± 32 à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± వలె à°—à±à°°à±à°¤à°¿à°‚చబడెనà±.\n"
+"దొరకని మెటà±à°°à°¿à°•à± 0 మెటà±à°°à°¿à°•à± వలె à°—à±à°°à±à°¤à°¿à°‚చబడెనà±.\n"
+"\n"
+"ఉదాహరణ: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+
+#: ../cli/src/settings.c:3071
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"DNS సేవికల IPv6 à°šà°¿à°°à±à°¨à°¾à°®à°¾à°² జాబితా à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±. IPv6 ఆకృతీకరణ పదà±à°¦à°¤à°¿ "
+"'auto' అయితే à°—à°¨à±à°• à°ˆ DNS సేవికలౠసà±à°µà°¯à°‚చాలక ఆకృతీకరణచేత తిపà±à°ªà°¿à°¯à°¿à°µà±à°µà°¬à°¡à°¿à°¨ వాటికి "
+"(à°à°µà±ˆà°¨à°¾ à°µà±à°‚టే) జేరà±à°šà°¬à°¡à±à°¨à±. DNS సేవికలౠఅనà±à°¨à°µà°¿ 'shared' లేదా 'link-local' "
+"IPv6 ఆకృతీకరణ పదà±à°¦à°¤à±à°²à°¤à±‹ à°µà±à°ªà°¯à±‹à°—ించలేమà±, à°…à°•à±à°•à°¡ à°…à°ªà±â€Œà°¸à±à°Ÿà±à°°à±€à°®à± నెటà±à°µà°°à±à°•à± లేదà±à°—à°¨à±à°•."
+" à°…à°¨à±à°¨à°¿ ఇతర IPv6 ఆకృతీకరణ పదà±à°¦à°¤à±à°²à°¨à°‚à°¦à±, à°ˆ à°…à°¨à±à°¸à°‚ధానంకౠDNS సేవికలౠఈ DNS "
+"సేవికలౠమాతà±à°°à°®à±‡ à°…à°¨à±à°¨à°Ÿà±à°²à± ఉపయోగించబడెనà±.\n"
+"\n"
+"ఉదాహరణ: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3149
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+msgstr ""
+"à°ˆ విధంగా ఫారà±à°®à°¾à°Ÿà± చేసిన IPv6 à°šà°¿à°°à±à°¨à°¾à°®à°¾à°² జాబితా à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"దొరకని à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± 128 à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± వలె à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+"ఉదాహరణ: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(<dest IP>/prefix <next-hop IP> [metric] ఉపయోగించà±)"
+
+#: ../cli/src/settings.c:3197
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing metric is regarded as a metric of 0.\n"
+"\n"
+"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+msgstr ""
+"à°ˆ విధంగా ఫారà±à°®à°¾à°Ÿà± చేసిన IPv6 రౌటà±à°² జాబితానౠపà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"దొరకని à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± 128 à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à±à°—à°¾ à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"దొరకని మెటà±à°°à°¿à°•à± 0 మెటà±à°°à°¿à°•à±â€Œà°—à°¾ à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"\n"
+"ఉదాహరణ: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+
+#: ../cli/src/settings.c:3219
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; 0, 1, లేదా 2 ఉపయోగించà±"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఛానలౠలాదà±; ఉపయోగించౠ<1-13>"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; [e, o, n] ఉపయోగించౠ"
+
+#: ../cli/src/settings.c:3285
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli à°…à°¨à±à°¨à°¦à°¿ JSON ఆకృతీకరణ దతà±à°¤à°¾à°‚శం మరియౠఆకృతీకరణనౠకలిగివà±à°¨à±à°¨ ఫైలౠపేరౠ"
+"రెంటినీ "
+"ఆమోదించగలదà±. తరà±à°µà°¾à°¤à°¿ కేసౠనందౠఫైలౠచదà±à°µà°¬à°¡à±à°¨à± మరియౠకాంటెంటà±à°¸à± à°ˆ లకà±à°·à°£à°‚ నందౠ"
+"ఉంచబడà±à°¨à±.\n"
+"\n"
+"ఉదాహరణలà±: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3325
+msgid "no priority to remove"
+msgstr "తీసివేయà±à°Ÿà°•à± à° à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ లేదà±"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "విషయసూచిక '%d' విసà±à°¤à±ƒà°¤à°¿ <0-%d> నందౠలేదà±"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; 3 à°¸à±à°Ÿà±à°°à°¿à°‚à°—à±à°¸à± అందించబడాలి"
+
+#: ../cli/src/settings.c:3463
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"మూడౠఛానళà±à°³ జాబితానౠపà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à± (కామాతో లేదా ఖాళీతో వేరà±à°šà±‡à°¸à°¿à°¨).\n"
+"\n"
+"ఉదాహరణ: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3513
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"à°ˆ విధంగా ఫారà±à°®à°¾à°Ÿà± చేసిన S/390 à°à°šà±à°šà°¿à°•à°¾à°² జాబితానౠపà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±:\n"
+" option = <value>, option = <value>,...\n"
+"చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విలà±à°µà°²à±: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఛానలౠకాదà±"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఛానలౠకాదà±"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP à°•à±€ '%s' à°…à°¯à±à°¯à±à°‚à°Ÿà±à°‚దని à°…à°¨à±à°•à±‹à°¬à°¡à°¿à°‚ది\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' వీటి నందౠలేదౠ[0 (unknown), 1 (key), 2 (passphrase)]"
+
+#: ../cli/src/settings.c:3715
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"WEP కీల à°°à°•à°‚ à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±. ఆమోదించబడిన విలà±à°µà°²à±: 0 లేదా తెలియనిది, 1 లేదా "
+"కీ, మరియౠ2 లేదా సంకేతపదం.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ PSK కాదà±"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ DCB à°«à±à°²à°¾à°—ౠకాదà±"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ DCB à°…à°¨à±à°µà°°à±à°¤à°¨ à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ కాదà±"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "తపà±à°ªà°•à±à°‚à°¡à°¾ కామాతో వేరà±à°šà±‡à°¸à°¿à°¨ 8 అంకెలౠకావాలి"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ 0 మరియౠ%u (à°•à°²à±à°ªà±à°•à±Šà°¨à°¿) లేదా %u మధà±à°¯à°¨à°¿ సంఖà±à°¯à°•à°¾à°¦à±"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ 0 మరియౠ%u (à°•à°²à±à°ªà±à°•à±Šà°¨à°¿) మదà±à°¯à°¨à°¿ సంఖà±à°¯ కాదà±"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"హెచà±à°šà°°à°¿à°•: '%s' à°…à°¨à±à°¨à°¦à°¿ 1 à°•à°²à±à°ªà±à°•à±Šà°¨à±à°¨à°‚à°¤ వరకౠమారà±à°ªà±à°²à± à°ªà±à°°à°­à°¾à°µà°¿à°¤à°‚ కావౠ(చేతనమైనà±)\n\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "బాండà±â€Œà°µà°¿à°¡à±à°¤à± శాతాల మొతà±à°¤à°‚ తపà±à°ªà°• 100%% కావాలి"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "లకà±à°·à°£à°‚ విలà±à°µ ఎలా పొందాలో తెలియదà±"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "లకà±à°·à°£à°‚ మారà±à°šà°¬à°¡à°²à±‡à°¦à±"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[NM లకà±à°·à°£à°‚ వివరణ]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli à°ªà±à°°à°¤à±à°¯à±‡à°• వివరణ]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "దోషమà±: '%s' ఆరà±à°—à±à°®à±†à°‚టౠకొరకౠవిలà±à°µ అవసరమైంది."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "దోషం: ఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s' కావలసివà±à°‚à°¡à°—à°¾, '%s' యివà±à°µà°¬à°¡à°¿à°‚ది."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "దోషమà±: à°…à°¨à±à°•à±‹à°¨à°¿ ఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s'"
+
+#: ../cli/src/utils.c:189
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '0x%X'నౠపాఠ రూపంలోనికి మారà±à°šà±à°Ÿà°²à±‹ దోషం"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:217
#, c-format
-#| msgid "%s: error converting IP4 address 0x%X"
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s' నౠపాఠం రూపంలోనికి మారà±à°šà±à°Ÿà°²à±‹ దోషం"
-#: ../cli/src/utils.c:232
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; [%s] లేదా [%s] à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' సందిగà±à°§à°‚à°—à°¾ à°µà±à°‚ది (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "దొరకని పేరà±, [%s] లో à°’à°•à°Ÿà°¿ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±"
+
+#: ../cli/src/utils.c:718
#, c-format
msgid "field '%s' has to be alone"
msgstr "à°•à±à°·à±‡à°¤à±à°°à°®à± '%s' వొంటరిగా à°µà±à°‚డాలి"
-#: ../cli/src/utils.c:235
+#: ../cli/src/utils.c:720
#, c-format
-msgid "invalid field '%s'"
-msgstr "à°•à±à°·à±‡à°¤à±à°°à°®à± '%s' చెలà±à°²à°¨à°¿à°¦à°¿"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "చెలà±à°²à°¨à°¿ à°•à±à°·à±‡à°¤à±à°°à°¾à°®à± '%s'; à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨ à°•à±à°·à±‡à°¤à±à°°à°¾à°²à±: %s"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "à°à°šà±à°šà°¿à°•à°®à± '--terse' à°•à± '--fields' తెలà±à°ªà±à°Ÿ అవసరమà±"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"à°à°šà±à°šà°¿à°•à°®à± '--terse' à°•à± à°ªà±à°°à°¤à±à°¯à±‡à°•à°¿à°‚à°šà°¿ '--fields' à°à°šà±à°šà°¿à°•à°®à± విలà±à°µà°²à± అవసరమౠ, '%s' "
"కాదà±"
-#: ../cli/src/utils.c:468
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"దోషం: org.freedesktop.DBus కొరకౠడి-బసౠఆబà±à°œà°•à±à°Ÿà± à°ªà±à°°à±‹à°•à±à°¸à±€ సృషà±à°Ÿà°¿à°‚చలేక పోయింది"
-
-#: ../cli/src/utils.c:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "దోషం: NameHasOwner à°…à°­à±à°¯à°°à±à°§à°¨ విఫలమైంది: %s"
-
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
"nocheck to suppress the warning.\n"
msgstr ""
"హెచà±à°šà°°à°¿à°•: nmcli (%s) మరియౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± (%s) వరà±à°·à°¨à±à°²à± సరిపోలటంలేదà±. "
-"హెచà±à°šà°°à°¿à°•à°¨à± à°…à°°à°¿à°•à°Ÿà±à°Ÿà±à°Ÿà°•à± --"
-"nocheck à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±.\n"
+"హెచà±à°šà°°à°¿à°•à°¨à± à°…à°°à°¿à°•à°Ÿà±à°Ÿà±à°Ÿà°•à± --nocheck à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1079
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
"execution using --nocheck, but the results are unpredictable."
msgstr ""
-"దోషం: nmcli (%s) మరియౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± (%s) వరà±à°·à°¨à±à°²à± సరిపోలడంలేదà±. --nocheck "
-"à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°¿ బలవంతపౠనిరà±à°µà°°à±à°¤à°¨, "
-"అయితే ఫలితాలౠఊహించనివిధంగా à°µà±à°‚టాయి."
+"దోషం: nmcli (%s) మరియౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± (%s) వరà±à°·à°¨à±à°²à± సరిపోలడంలేదà±. --"
+"nocheck à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°¿ బలవంతపౠనిరà±à°µà°°à±à°¤à°¨, అయితే ఫలితాలౠఊహించనివిధంగా à°µà±à°‚టాయి."
#: ../libnm-util/crypto.c:133
#, c-format
@@ -2103,120 +4766,87 @@ msgstr "PEM à°•à±€ ఫైలౠఅంతà±à°¯ టాగౠ'%s' కలిగà°
msgid "Doesn't look like a PEM private key file."
msgstr "PEM à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ ఫైలà±à°µà°²à±† అనిపించà±à°Ÿà°²à±‡à°¦à±."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM ఫైలౠడాటానౠనిలà±à°µà°µà±à°‚à°šà±à°Ÿà°•à± సరిపోవౠమెమొరి లేదà±."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "తపà±à°ªà±à°—ావà±à°¨à±à°¨ PEM ఫైలà±: Proc-Type మొదటి టాగౠకాదà±."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "తపà±à°ªà±à°—ావà±à°¨à±à°¨ PEM ఫైలà±: తెలియని Proc-Type టాగౠ'%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "తపà±à°ªà±à°—ావà±à°¨à±à°¨ PEM దసà±à°¤à±à°°à°®à±: DEK-Info రెండవ టాగౠకాదà±."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "తపà±à°ªà±à°—ావà±à°¨à±à°¨ PEM ఫైలà±: DEK-Info టాగà±â€Œà°¨à°‚దౠIV కనబడలేదà±."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "తపà±à°ªà±à°—ావà±à°¨à±à°¨ PEM ఫైలà±: DEK-Info టాగà±â€Œà°¨à°‚దౠచెలà±à°²à°¨à°¿ ఫారà±à°®à°¾à°Ÿà±."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "తపà±à°ªà±à°—ావà±à°¨à±à°¨ PEM ఫైలà±: తెలియని à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ సైఫరౠ'%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడీకోడౠచేయలేక పోయింది."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "కావలసిన PKCS#8 à°ªà±à°°à°¾à°°à°‚à°­ టాగౠకనà±à°—ొనలేక పోయింది."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "కావలసిన PKCS#8 à°®à±à°—ింపౠటాగౠ'%s' à°•à°¨à±à°—ొనà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto.c:312
-#| msgid "Not enough memory to store file data."
-msgid "Not enough memory to store private key data."
-msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ దతà±à°¤à°¾à°‚శం నిలà±à°µà°µà±à°‚à°šà±à°Ÿà°²à±‹ తగౠమెమొరీ లేదà±."
-
-#: ../libnm-util/crypto.c:317
-#| msgid "Failed to decrypt the private key."
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ డీకోడౠచేయà±à°Ÿà°•à± విఫలమైంది."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "దృవీకరణపతà±à°°à°®à± డాటానౠనిలà±à°µà°µà±à°‚à°šà±à°Ÿà°•à± సరిపోని మెమొరి."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV పొడవౠతపà±à°ªà°• సరిసంఖà±à°¯ బైటà±à°²à°²à±‹à°¨à±‡ à°µà±à°‚డాలి."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV నిలà±à°µà°µà±à°‚à°šà±à°Ÿà°•à± సరిపోవà±à°¨à°‚à°¤ మెమొరి లేదà±."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV నానà±-హెకà±à°¸à°¾à°¡à±†à°¸à°¿à°®à°²à± సంఖà±à°¯à°²à°¨à± కలిగివà±à°‚ది."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ సైఫరౠ'%s' à°…à°¨à±à°¨à°¦à°¿ తెలియనిది."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడికà±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°•à± సరిపోవà±à°¨à°‚à°¤ మెమొరీలేదà±."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "డీకà±à°°à°¿à°ªà±à°Ÿà± చేసిన à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠనిలà±à°µà°µà±à°‚à°šà±à°Ÿà°•à± సరిపోవà±à°¨à°‚à°¤ మెమొరీలేదà±."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ à°°à°•à°®à±à°¨à± నిరà±à°£à°¯à°¿à°‚చలేక పోయింది."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
-#| msgid "PEM certificate '%s' had no end tag '%s'."
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM దృవీకరణపతà±à°°à°®à± à°ªà±à°°à°¾à°°à°‚à°­ టాగà±â€Œ '%s'నౠకలిగిలేదà±."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
-#| msgid "PEM certificate '%s' had no end tag '%s'."
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM దృవీకరణపతà±à°°à°®à± à°…à°‚à°¤à±à°¯ టాగà±â€Œ '%s'నౠకలిగిలేదà±."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "దృవీకరణపతà±à°°à°®à±à°¨à± డీకోడౠచేయà±à°Ÿà°•à± విఫలమైంది."
@@ -2235,100 +4865,88 @@ msgstr "MD5 యింజనౠసిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ à°µà°
msgid "Invalid IV length (must be at least %zd)."
msgstr "చెలà±à°²à°¨à°¿ IV పొడవౠ(తపà±à°ªà°• కనీసం %zd అయివà±à°‚డాలి)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "à°¡à°¿à°•à±à°°à°¿à°ªà±à°Ÿà±†à°¡à± à°•à±€ బఫరౠకొరకౠసరిపోవà±à°¨à°‚à°¤ మెమొరి లేదà±."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "à°¡à°¿à°•à±à°°à°¿à°ªà±à°·à°¨à± సైఫరౠకాంటెసà±à°Ÿà±à°¨à± సిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "వివరణ కొరకౠసిమెటà±à°°à°¿à°•à± కీనౠఅమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "వివరణ కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడికà±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడికà±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది: à°…à°¨à±à°•à±‹à°¨à°¿ పాడింగౠపొడవà±."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడికà±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà°¿à°‚గౠకొరకౠమెమొరీ కేటాయించలేక పోయింది."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± సైఫరౠకాంటెసà±à°Ÿà±à°¨à± సిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కొరకౠసిమెటà±à°°à°¿à°•à± కీనౠఅమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "డాటానౠఎనà±à°•à±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "దృవీకరణపతà±à°°à°‚ డాటానౠసిదà±à°¦à°ªà°°à°šà±à°Ÿà°²à±‹ దోషమà±: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "దృవీకరణపతà±à°°à°®à±à°¨à± డీకోడౠచేయలేక పోయింది: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 డీకోడరà±â€Œà°¨à± సిదà±à°¦à°ªà°°à°šà°²à±‡à°• పోయింది: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 ఫైలà±à°¨à± డీకోడౠపరచలేక పోయింది: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 ఫైలà±à°¨à± నిరà±à°§à°¾à°°à°¿à°‚చలేక పోయింది: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
-#| msgid "Couldn't initialize PKCS#12 decoder: %s"
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 డీకోడరౠసిదà±à°¦à°ªà°°à°šà°²à±‡à°¦à±: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
-#| msgid "Couldn't decode PKCS#12 file: %s"
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ఫైలౠడీకోడౠచేయలేక పోయింది: %s"
@@ -2347,126 +4965,481 @@ msgstr "MD5 కాంటెసà±à°Ÿà±à°¨à± సిదà±à°¦à°®à± చేయà±
msgid "Invalid IV length (must be at least %d)."
msgstr "చెలà±à°²à°¨à°¿ IV పొడవౠ(తపà±à°ªà°• కనీసం %d à°µà±à°‚డాలి)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "à°¡à°¿à°•à±à°°à°¿à°ªà±à°·à°¨à± సైఫరౠసà±à°²à°¾à°Ÿà±â€Œà°¨à± సిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "వివరణ కొరకౠసిమెటà±à°°à°¿à°•à± à°•à±€ అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "వివరణ కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "వివరణ సందరà±à°­à°®à±à°¨à± సిదà±à°¦à°ªà°°à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడికà±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడికà±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది: à°¡à°¿à°•à±à°°à°¿à°ªà±à°Ÿà± చేసిన డాటా మరీ "
"పెదà±à°¦à°¦à°¿."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ యొకà±à°• à°¡à°¿à°•à±à°°à°¿à°ªà±à°·à°¨à± ఖరారౠచేయà±à°Ÿà°²à±‹ విఫలమైంది: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± సైఫరౠసà±à°²à°¾à°Ÿà±â€Œà°¨à± సిదà±à°¦à°®à±à°šà±‡à°¯à±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కొరకౠసిమà±à°®à±†à°Ÿà±à°°à°¿à°•à± కీనౠఅమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± సందరà±à°­à°®à±à°¨à± సిదà±à°¦à°®à±à°šà±‡à°¯à±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°•à± విఫలమైంది: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà± చేసిన తరà±à°µà°¾à°¤ à°…à°¨à±à°•à±‹à°¨à°¿ డాటా మొతà±à°¤à°®à±."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "దృవీకరణపతà±à°°à°®à±à°¨à± డీకోడౠచేయలేక పోయింది: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "సంకేతపదమà±à°¨à± UCS2కౠమారà±à°šà°²à±‡à°• పోయింది: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 డీకోడరà±â€Œà°¨à± సిదà±à°¦à°®à± చేయలేక పోయింది: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 ఫైలౠడీకోడౠచేయలేక పోయింది: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 ఫైలౠనిరà±à°¦à°¾à°°à°¿à°‚చలేక పోయింది: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "యాదృశà±à°šà°¿à°• డాటానౠజనియింపచేయలేక పోయింది."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2170 ../libnm-util/nm-setting-8021x.c:2187
+#: ../libnm-util/nm-setting-8021x.c:2228 ../libnm-util/nm-setting-8021x.c:2245
+#: ../libnm-util/nm-setting-8021x.c:2297 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2327 ../libnm-util/nm-setting-8021x.c:2339
+#: ../libnm-util/nm-setting-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:692
+#: ../libnm-util/nm-setting-connection.c:708
+#: ../libnm-util/nm-setting-connection.c:763
+#: ../libnm-util/nm-setting-ip4-config.c:705
+#: ../libnm-util/nm-setting-ip4-config.c:715
+#: ../libnm-util/nm-setting-ip6-config.c:687
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:750
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:131
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:795
+#: ../libnm-util/nm-setting-wireless.c:697
+msgid "property is missing"
+msgstr "లకà±à°·à°£à°‚ దొరకలేదà±"
+
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2235 ../libnm-util/nm-setting-8021x.c:2252
+#: ../libnm-util/nm-setting-8021x.c:2303 ../libnm-util/nm-setting-8021x.c:2315
+#: ../libnm-util/nm-setting-8021x.c:2333 ../libnm-util/nm-setting-8021x.c:2345
+#: ../libnm-util/nm-setting-8021x.c:2369 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:699
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:766
+#: ../libnm-util/nm-setting-ip4-config.c:775
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../libnm-util/nm-setting-wireless-security.c:833
+#: ../libnm-util/nm-setting-wireless-security.c:857
+msgid "property is empty"
+msgstr "లకà±à°·à°£à°‚ ఖాళీ"
+
+#: ../libnm-util/nm-setting-8021x.c:2205 ../libnm-util/nm-setting-8021x.c:2217
+#: ../libnm-util/nm-setting-8021x.c:2263 ../libnm-util/nm-setting-8021x.c:2275
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "PKCS#12 కొరకౠ'%s' లకà±à°·à°£à°‚కౠసరిపోలాలి"
+
+#: ../libnm-util/nm-setting-8021x.c:2514 ../libnm-util/nm-setting-8021x.c:2548
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:757
+#: ../libnm-util/nm-setting-ip6-config.c:741
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:140 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:607 ../libnm-util/nm-setting-wired.c:616
+#: ../libnm-util/nm-setting-wireless-security.c:876
+#: ../libnm-util/nm-setting-wireless-security.c:885
+#: ../libnm-util/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-wireless-security.c:901
+#: ../libnm-util/nm-setting-wireless-security.c:909
+#: ../libnm-util/nm-setting-wireless-security.c:918
+#: ../libnm-util/nm-setting-wireless-security.c:927
+#: ../libnm-util/nm-setting-wireless-security.c:936
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless.c:757
+#: ../libnm-util/nm-setting-wireless.c:766
+#: ../libnm-util/nm-setting-wireless.c:775
+msgid "property is invalid"
+msgstr "లకà±à°·à°£à°‚ చెలà±à°²à°¨à°¿à°¦à°¿"
+
+#: ../libnm-util/nm-setting-8021x.c:2573 ../libnm-util/nm-setting-8021x.c:2583
+#: ../libnm-util/nm-setting-8021x.c:2593 ../libnm-util/nm-setting-8021x.c:2603
+#: ../libnm-util/nm-setting-8021x.c:2613 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "లకà±à°·à°£à°‚ కొరకౠ'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విలà±à°µ కాదà±"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' లేదా '%s' అమరిక కావాలి"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°‚ '%s' లేదా దాని విలà±à°µ '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s' మరియౠ'%s' లో వొకటే అమరà±à°šà°—లదà±"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "తపà±à°ªà°¨à°¿à°¸à°°à°¿ à°à°šà±à°šà°¿à°•à°‚ '%s' దొరకలేదà±"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ '%s' కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విలà±à°µ కాదà±"
+
+#: ../libnm-util/nm-setting-bond.c:570
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కీనౠతయారà±à°šà±‡à°¯à±à°Ÿà°•à± సరిపోవౠమెమొరీ లేదà±."
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' à°…à°¨à±à°¨à°¦à°¿ '%s > 0' తో సారూపà±à°¯à°¤à°•à°¾à°¨à°¿à°¦à°¿"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "మెమొరీనౠPEM ఫైలౠసృషà±à°Ÿà±€à°•à°°à°£ కొరకౠకేటాయించలేక పోయింది."
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ '%s' à°à°šà±à°šà°¿à°•à°‚ కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± పేరౠకాదà±"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:593
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "IVనౠPEM ఫైలà±à°¨à°•à± à°µà±à°°à°¾à°¯à±à°Ÿà°•à± మెమొరీనౠకేటాయించలేక పోయింది."
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' à°à°šà±à°šà°¿à°•à°‚ à°…à°¨à±à°¨à°¦à°¿ '%s=%s' కొరకౠమాతà±à°°à°®à±‡ చెలà±à°²à±à°¨à°¦à°¿"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-bond.c:606
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr ""
-"à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà± చేసిన కీనౠPEM ఫైలà±à°¨à°•à± à°µà±à°°à°¾à°¯à±à°Ÿà°•à± మెమొరీనౠకేటాయించలేక పోయింది."
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' à°…à°¨à±à°¨à°¦à°¿ '%s' కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఆకృతీకరణ కాదà±"
+
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' à°à°šà±à°šà°¿à°•à°‚à°•à± '%s' à°à°šà±à°šà°¿à°•à°‚ అమరà±à°šà°µà°²à°¸à°¿à°µà±à°‚à°Ÿà±à°‚ది"
+
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' à°à°šà±à°šà°¿à°•à°‚ ఖాళీ"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ '%s' à°à°šà±à°šà°¿à°•à°‚ కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ కాదà±"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' లకà±à°·à°£à°‚కౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విలà±à°µ కాదౠ(<= %d అయివà±à°‚డాలి)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "విలà±à°µ '%d' విసà±à°¤à±ƒà°¤à°¿ <%d-%d> బయట à°µà±à°‚ది"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "లకà±à°·à°£à°‚ ఖాళీ'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ వరà±à°šà±à°¯à±à°µà°²à± యింటరà±à°«à±‡à°¸à± పేరౠ'%s' తో సరిపోలడంలేదà±"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానం నందౠ'%s' అమరిక à°µà±à°‚డాలి"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 ఆకృతీకరణ à°¸à±à°²à±‡à°µà± కొరకౠఅనà±à°®à°¤à°¿à°‚చబడదà±"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 ఆకృతీకరణ à°¸à±à°²à±‡à°µà± కొరకౠఅనà±à°®à°¤à°¿à°‚చబడదà±"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "à°«à±à°²à°¾à°—à±à°¸à± చెలà±à°²à°¨à°¿à°µà°¿"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "à°«à±à°²à°¾à°—à±à°¸à± చెలà±à°²à°¨à°¿à°µà°¿ - అచేతనమైనà±"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "లకà±à°·à°£à°‚ చెలà±à°²à°¨à°¿à°¦à°¿ (చేతనం కాలేదà±)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "మూలకం చెలà±à°²à°¨à°¿à°¦à°¿"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "sum 100% కాదà±"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "లకà±à°·à°£à°‚ చెలà±à°²à°¨à°¿à°¦à°¿"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "లకà±à°·à°£à°‚ దొరకలేదà±"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "లకà±à°·à°£à°‚ విలà±à°µ '%s' ఖాళీ లేదా మరీ పొడవౠ(>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' చెలà±à°²à°¨à°¿ à°…à°•à±à°·à°°à°®à±(à°²à±) కలిగివà±à°¨à±à°¨à°¾à°¯à°¿ (à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà± [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' పొడవౠచెలà±à°²à°¨à°¿à°¦à°¿ (5 లేదా 6 అంకెలౠవà±à°‚డాలి)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± పేరౠకాదà±"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "మాతà±à°°à±à°• తెలà±à°ªà±à°¤à±à°‚టే తపà±à°ªà°•à±à°‚à°¡à°¾ P_Key తెలà±à°ªà°¾à°²à°¿"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± P_Key à°…à°¨à±à°¸à°‚ధానం మాతà±à°°à±à°• ఇంటరà±à°«à±‡à°¸à± పేరౠతెలà±à°ªà°²à±‡à°¦à±"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-ip4-config.c:726
+#: ../libnm-util/nm-setting-ip4-config.c:736
+#: ../libnm-util/nm-setting-ip4-config.c:746
+#: ../libnm-util/nm-setting-ip6-config.c:709
+#: ../libnm-util/nm-setting-ip6-config.c:719
+#: ../libnm-util/nm-setting-ip6-config.c:729
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ఫైలౠడాటా కొరకౠమెమొరీనౠకేటాయించలేక పోయింది."
+msgid "this property is not allowed for '%s=%s'"
+msgstr "'%s=%s' కొరకౠయీ లకà±à°·à°£à°‚ à°…à°¨à±à°®à°¤à°¿à°‚చబడదà±"
+
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ చెలà±à°²à°¨à°¿à°¦à°¿"
+
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± కలిగివà±à°‚ది"
+
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. రౌటౠచెలà±à°²à°¨à°¿à°¦à°¿"
+
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± కలిగివà±à°‚ది"
+
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ %s=%s కొరకౠఅనà±à°®à°¤à°¿à°‚చబడదà±"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:706
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID పొడవౠవిసà±à°¤à±ƒà°¤à°¿ <1-32> బైటà±à°¸à± బయట à°µà±à°‚ది"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:746
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ చానలౠకాదà±"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విసà±à°¤à±ƒà°¤à°¿ <128-16384> బయట à°µà±à°‚ది"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "à°ˆ లకà±à°·à°£à°‚ అమరà±à°šà±à°Ÿà°•à± à°¸à±à°¨à±à°¨à°¾-కాని '%s' లకà±à°·à°£à°‚ అవసరం"
+
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' విలà±à°µ '%s=%s' తో సరిపోలడం లేదà±"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ UUID కాదౠయింటరà±à°«à±‡à°¸à± పేరౠకాదà±"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "లకà±à°·à°£à°‚ తెలà±à°ªà°²à±‡à°¦à± మరియౠ'%s కాదà±:%s'"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "à°«à±à°²à°¾à°—à±à°¸à± చెలà±à°²à±à°¨à°µà°¿ కావà±"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఈథరà±à°¨à±†à°Ÿà± పోరà±à°Ÿà± విలà±à°µ కాదà±"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°¡à±à°ªà±à°²à±†à°•à±à°¸à± విలà±à°µ కాదà±"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ కాదà±"
+
+#: ../libnm-util/nm-setting-wired.c:595
+#: ../libnm-util/nm-setting-wireless.c:787
+#: ../libnm-util/nm-setting-wireless.c:801
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°šà°¿ MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ కాదà±"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "చెలà±à°²à°¨à°¿ '%s' లేదా దాని విలà±à°µ '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' à°°à°•à±à°·à°£ అవసరం '%s=%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' à°°à°•à±à°·à°£à°•à± '%s' అమరిక అభీషà±à°Ÿà°‚ అవసరం"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' విసà±à°¤à±ƒà°¤à°¿ <0-3> బయట à°µà±à°‚ది"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' à°…à°¨à±à°¸à°‚ధానంకౠ'%s' కావాలి యీ లకà±à°·à°£à°‚ నందà±"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ '%s=%s' (WEP) తో మాతà±à°°à°®à±‡ à°µà±à°ªà°¯à±‹à°—ించగలం"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ వై-ఫై రీతి కాదà±"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ బాండౠకాదà±"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "అమరిక '%s' లకà±à°·à°£à°‚ కావాలి"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2484,8 +5457,7 @@ msgid ""
"power management)"
msgstr ""
"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±â€Œà°¨à± à°¸à±à°²à±€à°ªà±â€Œà°¨à°•à± లేదా దానిని మెలà±à°•à±Šà°²à±à°ªà±à°Ÿà°•à± à°µà±à°‚à°šà°‚à°¡à°¿ (సిసà±à°Ÿà°®à± "
-"పవరౠనిరà±à°µà°¹à°£ చేత మాతà±à°°à°®à±‡ "
-"à°µà±à°ªà°¯à±‹à°—ించబడాలి)"
+"పవరౠనిరà±à°µà°¹à°£ చేత మాతà±à°°à°®à±‡ à°µà±à°ªà°¯à±‹à°—ించబడాలి)"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
msgid "System policy prevents putting NetworkManager to sleep or waking it up"
@@ -2514,13 +5486,10 @@ msgstr ""
"విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
-#| msgid "Enable or disable mobile broadband devices"
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "WiMAX మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠపరికరాలనౠచేతనం లేదా అచేతనం చేయి"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
-#| msgid ""
-#| "System policy prevents enabling or disabling mobile broadband devices"
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
@@ -2556,22 +5525,18 @@ msgstr ""
"నిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
-#| msgid "Allow control of network connections"
msgid "Modify personal network connections"
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానాలనౠసవరించà±"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
-#| msgid "System policy prevents modification of system settings"
msgid "System policy prevents modification of personal network settings"
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ నెటà±à°µà°°à±à°•à± అమరికల యొకà±à°• సవరింపà±à°¨à± à°µà±à°¯à°µà°¸à±à°¥ విధానం నిరోధించà±à°¨à±"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
-#| msgid "Modify system connections"
msgid "Modify network connections for all users"
msgstr "వాడà±à°•à°°à±à°²à°‚దరికి నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానాలనౠసవరించà±"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
-#| msgid "System policy prevents modification of system settings"
msgid "System policy prevents modification of network settings for all users"
msgstr "వాడà±à°•à°°à±à°²à°‚దరికి నెటà±à°µà°°à±à°•à± అమరికల సవరింపà±à°¨à± à°µà±à°¯à°µà°¸à±à°¥ విధానం నిరోధిసà±à°¤à±‹à°‚ది"
@@ -2584,130 +5549,79 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"నిరంతర సిసà±à°Ÿà°®à± హోసà±à°Ÿà±à°¨à°¾à°®à°®à±à°¨à± సవరించà±à°Ÿà°¨à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
-#: ../src/main.c:159
-#, c-format
-#| msgid "Failed to encrypt: %d."
-msgid "Failed to set signal mask: %d"
-msgstr "సంకేత మాసà±à°•à± అమరà±à°šà±à°Ÿà°•à± విఫలమైంది: %d"
-
-#: ../src/main.c:168
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "సంకేతం సంభాలించౠతà±à°°à±†à°¡à± సృషà±à°Ÿà°¿à°‚à°šà±à°Ÿà°²à±‹ విఫలమైంది: %d"
-
-#: ../src/main.c:183
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s తెరà±à°šà±à°Ÿà°•à± విఫలమైంది: %s\n"
-#: ../src/main.c:189
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s à°•à± à°µà±à°°à°¾à°¯à±à°Ÿà°•à± విఫలమైంది: %s\n"
-#: ../src/main.c:194
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s మూయà±à°Ÿà°•à± విఫలమైంది: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± యిపà±à°ªà°Ÿà°¿à°•à±‡ నడà±à°¸à±à°¤à±‹à°‚ది (pid %ld)\n"
-#: ../src/main.c:375
-#| msgid "NetworkManager status"
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
-msgstr "నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• వరà±à°·à°¨à± à°®à±à°¦à±à°°à°¿à°‚à°šà°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±à°®à±"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± వరà±à°·à°¨à± à°®à±à°¦à±à°°à°¿à°‚à°šà°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±à°®à±"
-#: ../src/main.c:376
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "డీమనౠకావదà±à°¦à±"
-#: ../src/main.c:377
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "డీమనౠకావదà±à°¦à±, stderr కౠలాగవà±à°µà±"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "లాగౠసà±à°¥à°¾à°¯à°¿: వీటిలో వొకటి [%s]"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "',' తో వేరà±à°šà±‡à°¯à°¬à°¡à°¿à°¨ లాగౠడొమైనà±à°²à±: [%s] యొకà±à°• à°à°¦à±‡à°¨à°¿ మేళనమà±"
+
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "à°…à°¨à±à°¨à°¿ హెచà±à°šà°°à°¿à°•à°²à°¨à± హానికారకంగా à°—à±à°°à±à°¤à±à°‚à°šà±"
-#: ../src/main.c:378
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "PID ఫైలౠయొకà±à°• à°¸à±à°¥à°¾à°¨à°®à± తెలà±à°ªà±à°®à±"
-#: ../src/main.c:378
+#: ../src/main.c:337
msgid "filename"
msgstr "ఫైలà±â€Œà°ªà±‡à°°à±"
-#: ../src/main.c:379
+#: ../src/main.c:338
msgid "State file location"
msgstr "ఫైలౠసà±à°¥à°¾à°¨à°®à± తెలియజెపà±à°ªà±"
-#: ../src/main.c:379
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:380
-msgid "Config file location"
-msgstr "ఆకృతీకరణ ఫైలౠసà±à°¥à°¾à°¨à°®à±"
-
-#: ../src/main.c:380
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:381
-msgid "List of plugins separated by ','"
-msgstr "',' తో వేరà±à°šà±‡à°¯à°¬à°¡à°¿à°¨ చొపà±à°ªà°¿à°‚తల జాబితా"
-
-#: ../src/main.c:381
-msgid "plugin1,plugin2"
-msgstr "చొపà±à°ªà°¿à°‚à°¤1,చొపà±à°ªà°¿à°‚à°¤2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:383
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "లాగౠసà±à°¥à°¾à°¯à°¿: వీటిలో వొకటి [ERR, WARN, INFO, DEBUG]"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:386
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"',' వేరౠచేయబడిన లాగౠడొమైనà±à°²à±: వీటిలో వొక సంయోగం\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:392
-msgid "An http(s) address for checking internet connectivity"
-msgstr "ఇంటరà±à°¨à±†à°Ÿà± à°…à°¨à±à°¸à°‚ధానత పరిశీలించà±à°Ÿà°•à± వొక http(s) à°šà°¿à°°à±à°¨à°¾à°®à°¾"
-
-#: ../src/main.c:393
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "à°…à°¨à±à°¸à°‚ధానత పరిశీలన మధà±à°¯ విరామం (à°•à±à°·à°£à°¾à°²à°²à±‹)"
-
-#: ../src/main.c:394
-msgid "The expected start of the response"
-msgstr "à°ªà±à°°à°¤à°¿à°¸à±à°ªà°‚దన యొకà±à°• à°…à°¨à±à°•à±Šà°¨à±à°¨ à°ªà±à°°à°¾à°°à°‚à°­à°‚"
-
-#: ../src/main.c:394
-msgid "Bingo!"
-msgstr "బింగో!"
-
-#: ../src/main.c:399
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "మీ à°ªà±à°²à°¾à°Ÿà±â€Œà°«à°¾à°‚ పై GModules తోడà±à°ªà°¾à°Ÿà±à°¨à±€à°¯à°µà±!\n"
-#: ../src/main.c:418
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±à°¨à± నడà±à°ªà±à°Ÿà°•à± మీరౠతపà±à°ªà°• రూటౠగా à°µà±à°‚డాలి!\n"
+
+#: ../src/main.c:392
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2720,45 +5634,60 @@ msgstr ""
"తెలà±à°ªà±à°Ÿà°•à±\n"
"వాడà±à°•à°°à±à°²à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±à°¨à±."
-#: ../src/main.c:424
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°®à±. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా కొరకౠ--help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°‚à°¡à°¿.\n"
+"చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°®à±. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా కొరకౠ--help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°‚à°¡à°¿."
+"\n"
+
+#: ../src/main.c:412
+#, c-format
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr ""
+"%s. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా చూచà±à°Ÿà°•à± దయచేసి --help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±à°®à±.\n"
-#: ../src/main.c:434
+#: ../src/main.c:417
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "You must be root to run NetworkManager!\n"
-msgstr "నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°•à°¨à± నడà±à°ªà±à°Ÿà°•à± మీరౠతపà±à°ªà°• రూటౠగా à°µà±à°‚డాలి!\n"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"కమాండౠలైనౠపైన పాసౠఅయిన à°—à±à°°à±à°¤à°¿à°‚చని లాగౠడొమైనà±(à°²à±) '%s' విసà±à°®à°°à°¿à°¸à±à°¤à±‹à°‚ది.\n"
-#: ../src/main.c:455
+#: ../src/main.c:468
#, c-format
-#| msgid "Failed to set IV for encryption: %s / %s."
msgid "Failed to read configuration: (%d) %s\n"
msgstr "ఆకృతీకరణనౠచదà±à°µà±à°Ÿà°•à± విఫలమైంది: (%d) %s\n"
-#: ../src/main.c:466
+#: ../src/main.c:482
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr ""
-"%s. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా చూచà±à°Ÿà°•à± దయచేసి --help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±à°®à±.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "ఆకృతీకరణ ఫైలౠనందౠదోషం: %s.\n"
-#: ../src/main.c:473
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "ఆకృతీకరణ ఫైళà±à°³ à°¨à±à°‚à°¡à°¿ à°—à±à°°à±à°¤à°¿à°‚చని లాగౠడొమైనà±(à°²à±) '%s' విసà±à°®à°°à°¿à°¸à±à°¤à±‹à°‚ది.\n"
+
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "à°¸à±à°Ÿà±‡à°Ÿà± ఫైలౠ%s పారà±à°¸à°¿à°‚గౠవిఫలమైంది: (%d) %s\n"
-#: ../src/main.c:490
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "డెమొనైజౠచేయలేదà±: %s [error %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:61
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "%s నెటà±à°µà°°à±à°•à±"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
-msgstr "# నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• à°¦à±à°µà°¾à°°à°¾ సృషà±à°Ÿà°¿à°‚చబడింది\n"
+msgstr "# నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°¦à±à°µà°¾à°°à°¾ సృషà±à°Ÿà°¿à°‚చబడింది\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:68
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2767,252 +5696,1008 @@ msgstr ""
"# %sà°¨à±à°‚à°¡à°¿ à°•à°²à±à°ªà°¬à°¡à°¿à°‚ది\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:313
msgid "no usable DHCP client could be found."
msgstr "à°Žà°Ÿà±à°µà°‚à°Ÿà°¿ à°µà±à°ªà°¯à±‹à°—à°•à°° DHCP à°•à±à°²à±ˆà°‚à°Ÿà± à°•à°¨à±à°—ొనబడలేదà±."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' à°•à°¨à±à°—ొనబడ గలదà±."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' à°•à°¨à±à°—ొనబడ గలదà±."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "మదà±à°¦à°¤à±€à°¯à°¨à°¿ DHCP à°•à±à°²à±ˆà°‚à°Ÿà± '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:379
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"గమనిక: libc రిజాలà±à°µà°°à± 3 నామపౠసేవికలకనà±à°¨à°¾ యెకà±à°•à±à°µ వాటికి మదà±à°¦à°¤à°¿à°µà±à°µà°²à±‡à°¦à±."
-#: ../src/dns-manager/nm-dns-manager.c:381
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "à°•à±à°°à°¿à°‚దన జాబితాచేసివà±à°¨à±à°¨ నామపà±à°¸à±‡à°µà°¿à°•à°²à± à°—à±à°°à±à°¤à°¿à°‚చబడక పోవచà±à°šà±à°¨à±."
-#: ../src/logging/nm-logging.c:131
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "తెలియని లాగౠసà±à°¥à°¾à°¯à°¿ '%s'"
-#: ../src/logging/nm-logging.c:156
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "తెలియని లాగౠడొమైనౠ'%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:281 ../src/nm-device-bt.c:351
-#, c-format
-#| msgid "connection failed"
-msgid "CDMA connection %d"
-msgstr "CDMA à°…à°¨à±à°¸à°‚ధానం %d"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "ఆకృతీకరణ ఫైలౠసà±à°¥à°¾à°¨à°®à±"
+
+#: ../src/config/nm-config.c:271
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
+
+#: ../src/config/nm-config.c:272
+msgid "Config directory location"
+msgstr "ఆకృతీకరణ సంచయం à°¸à±à°¥à°¾à°¨à°®à±"
+
+#: ../src/config/nm-config.c:272
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
+
+#: ../src/config/nm-config.c:274
+msgid "List of plugins separated by ','"
+msgstr "',' తో వేరà±à°šà±‡à°¯à°¬à°¡à°¿à°¨ చొపà±à°ªà°¿à°‚తల జాబితా"
+
+#: ../src/config/nm-config.c:274
+msgid "plugin1,plugin2"
+msgstr "చొపà±à°ªà°¿à°‚à°¤1,చొపà±à°ªà°¿à°‚à°¤2"
+
+#: ../src/config/nm-config.c:277
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ఇంటరà±à°¨à±†à°Ÿà± à°…à°¨à±à°¸à°‚ధానత పరిశీలించà±à°Ÿà°•à± వొక http(s) à°šà°¿à°°à±à°¨à°¾à°®à°¾"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "à°…à°¨à±à°¸à°‚ధానత పరిశీలన మధà±à°¯ విరామం (à°•à±à°·à°£à°¾à°²à°²à±‹)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "à°ªà±à°°à°¤à°¿à°¸à±à°ªà°‚దన యొకà±à°• à°…à°¨à±à°•à±Šà°¨à±à°¨ à°ªà±à°°à°¾à°°à°‚à°­à°‚"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "బింగో!"
-#: ../src/modem-manager/nm-modem-gsm.c:559 ../src/nm-device-bt.c:347
+#: ../src/modem-manager/nm-modem-broadband.c:459
+#: ../src/modem-manager/nm-modem-old.c:864 ../src/devices/nm-device-bt.c:333
#, c-format
-#| msgid "connection failed"
msgid "GSM connection %d"
msgstr "GSM à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-device-bond.c:192
+#: ../src/modem-manager/nm-modem-broadband.c:481
+#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:337
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
-#| msgid "connection failed"
msgid "Bond connection %d"
msgstr "బాండౠఅనà±à°¸à°‚ధానం %d"
-#: ../src/nm-device-adsl.c:193
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
-#| msgid "connection failed"
msgid "ADSL connection %d"
msgstr "ADSL à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-device-bt.c:322
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
-#| msgid "VPN connection failed"
msgid "PAN connection %d"
msgstr "PAN à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-device-bt.c:355
+#: ../src/devices/nm-device-bt.c:341
#, c-format
-#| msgid "VPN connection failed"
msgid "DUN connection %d"
msgstr "DUN à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-device-ethernet.c:1326
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
-#| msgid "VPN connection failed"
msgid "PPPoE connection %d"
msgstr "PPPoE à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
-#| msgid "Active connections"
msgid "Wired connection %d"
msgstr "వైరà±à°¤à±‹ à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-device-infiniband.c:303
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-device-olpc-mesh.c:306
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "మెషౠ%d"
-#: ../src/nm-device-vlan.c:362
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "టీమౠఅనà±à°¸à°‚ధానం %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
#, c-format
-#| msgid "VPN connection failed"
msgid "VLAN connection %d"
msgstr "VLAN à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-manager.c:661
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
-#| msgid "VPN connection failed"
msgid "VPN connection %d"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానం %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "సాకెటౠనందౠడాటా కొరకౠవేచివà±à°‚à°¡à±à°¨à°ªà±à°ªà±à°¡à± దోషమౠసంభవించినది"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "నెటà±â€Œà°²à°¿à°‚కౠసందేశమà±à°¨à± à°ªà±à°°à±‹à°¸à±†à°¸à°¿à°‚గౠచేయà±à°Ÿà°²à±‹ దోషమà±: %s"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "సాకెటౠనందౠడాటా కొరకౠవేచివà±à°‚à°¡à±à°¨à°ªà±à°ªà±à°¡à± దోషమౠసంభవించినది"
-
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚à°•à±à°•à± à°…à°¨à±à°¸à°‚ధానమౠకాలేకపోయింది: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "నెటà±â€Œà°²à°¿à°‚కౠహాండిలౠకà±à°°à±†à°¡à±†à°¨à±à°·à°¿à°¯à°²à± పాసింగౠచేతమౠచేయలేదà±: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
-"లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚కౠహాండిలà±â€Œà°¨à± కేటాయించలేక పోయింది: %s"
+"లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚కౠహాండిలà±â€Œà°¨à± కేటాయించలేక పోయింది: "
+"%s"
-#: ../src/nm-netlink-monitor.c:415
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚à°•à± à°•à±à°¯à°¾à°šà±€à°¨à°¿ కేటాయించలేక పోయింది: %s"
-
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "నెటà±â€Œà°²à°¿à°‚కౠసమూహానà±à°¨à°¿ చేరà±à°šà±à°•à±Šà°¨à°²à±‡à°• పోయింది: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "లింకౠకà±à°¯à°¾à°šà±€à°¨à°¿ నవీకరించà±à°Ÿà°²à±‹ దోషమà±: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నెటà±à°µà°°à±à°•à±à°²à°¨à± ఆపౠచేయవలసివà±à°‚ది"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "సిసà±à°Ÿà°®à±"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3663
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4158 ../tui/nm-editor-utils.c:200
+#: ../tui/nm-ui-utils.c:349 ../tui/nm-ui-utils.c:574
msgid "Bond"
msgstr "బాండà±"
-#: ../test/nm-online.c:111
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4240 ../tui/nm-editor-utils.c:218
+#: ../tui/nm-ui-utils.c:351 ../tui/nm-ui-utils.c:576
+msgid "Team"
+msgstr "టీమà±"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4424 ../tui/nm-editor-utils.c:209
+#: ../tui/nm-ui-utils.c:353 ../tui/nm-ui-utils.c:578
+msgid "Bridge"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà±"
+
+#: ../test/nm-online.c:73
#, c-format
-#| msgid "connecting"
msgid "\rConnecting"
msgstr "\rà°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "à°…à°¨à±à°¸à°‚ధానం కొరకౠవేచివà±à°‚డవలసిన సమయం, à°•à±à°·à°£à°¾à°²à°²à±‹(à°…à°ªà±à°°à°®à±‡à°¯à°‚à°—à°¾ 30)"
-
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°µà°•à°ªà±‹à°¯à°¿à°¨à°¾ లేక à°…à°¨à±à°¸à°‚ధానం కాకపోయినా తకà±à°·à°£à°®à±‡ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+"à°…à°¨à±à°¸à°‚ధానం కొరకౠవేచివà±à°‚డాలà±à°¸à°¿à°¨ సమయం, à°•à±à°·à°£à°¾à°²à°²à±‹ (à°à°šà±à°šà°¿à°•à°‚ లేకà±à°‚à°¡à°¾, à°…à°ªà±à°°à°®à±‡à°¯ "
+"విలà±à°µ 30)"
-#: ../test/nm-online.c:144
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°µà°•à°ªà±‹à°¯à°¿à°¨à°¾ తకà±à°·à°£à°®à±‡ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "దేనిని à°®à±à°¦à±à°°à°¿à°‚చవదà±à°¦à±"
-#: ../test/nm-online.c:162
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• నందౠసఫలవంతమైన à°…à°¨à±à°¸à°‚ధానమౠకొరకౠవేచివà±à°‚ది."
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"à°ªà±à°°à°¾à°°à°‚à°­ నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానాలనౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚చేయà±à°Ÿ పూరà±à°¤à°¿à°šà±‡à°¯à±à°Ÿà°•à± "
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± కొరకౠవేచివà±à°‚ది."
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
-#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
"చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°®à±. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా కొరకౠ--help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°‚à°¡à°¿."
-#~ msgid "SCOPE"
-#~ msgstr "SCOPE"
+#: ../tui/newt/nmt-newt-utils.c:168 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:120
+msgid "OK"
+msgstr "సరే"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "తాతà±à°•à°¾à°²à°¿à°• ఫైలౠసృషà±à°Ÿà°¿à°‚చలేక పోయింది: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "సరికూరà±à°ªà°°à°¿ విఫలమైంది: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ఫైలà±à°¨à± తిరిగి-à°šà°¦à±à°µ లేక పోయింది: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ఈథరà±à°¨à±†à°Ÿà± à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "వై-ఫై à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚à°¡à±"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚à°¡à± à°…à°¨à±à°¸à°‚ధానమౠ%d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "వైరà±à°¡à±"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "à°¬à±à°²à±‚టూతà±"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "OLPC మెషà±"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "వైమాకà±à°¸à±"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../tui/nm-ui-utils.c:420
+msgid "PCI"
+msgstr "PCI"
+
+#: ../tui/nm-ui-utils.c:422
+msgid "USB"
+msgstr "USB"
+
+#: ../tui/nm-ui-utils.c:498 ../tui/nm-ui-utils.c:518
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "ఎంపికచేయి..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "జతచేయి"
-#~ msgid "system"
-#~ msgstr "సిసà±à°Ÿà°®à±"
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:172
+#: ../tui/nmt-page-ip6.c:170 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "సరికూరà±à°šà±..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "తొలగించà±"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' à°°à°•à°‚ '%s' కొరకౠసరికూరà±à°ªà°°à°¿ సృషà±à°Ÿà°¿à°‚చలేక పోయింది."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధానం '%s' కొరకౠసరికూరà±à°ªà°°à°¿ సృషà±à°Ÿà°¿à°‚చలేక పోయింది."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠసరికూరà±à°šà±"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠసమాచారమà±à°¨à± దాచà±à°Ÿà°²à±‹ దోషమà±: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానం దాయలేక పోయింది: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయలేక పోయింది: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:201
+#: ../tui/nmtui-edit.c:470 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(à°…à°ªà±à°°à°®à±‡à°¯à°‚)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "బైటà±à°²à±"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "రౌండà±-రాబినà±"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°¬à±à°¯à°¾à°•à°ªà±"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "à°¬à±à°°à°¾à°¡à±â€Œà°•à°¾à°¸à±à°Ÿà±"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "ఎడాపà±à°Ÿà°¿à°µà± à°Ÿà±à°°à°¾à°¨à±à°¸à°¿à°®à°¿à°Ÿà± లోడౠబాలెనà±à°¸à°¿à°‚à°—à± (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "ఎడాపà±à°Ÿà°¿à°µà± లోడౠబాలెనà±à°¸à°¿à°‚à°—à± (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (సిఫారà±à°¸à±à°šà±‡à°¸à°¿à°¨)"
+
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "à°¸à±à°²à±‡à°µà±à°¸à±"
-#~ msgid "user"
-#~ msgstr "వినియోగదారి"
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "విధమà±"
-#~ msgid "System connections"
-#~ msgstr "సిసà±à°Ÿà°®à± à°…à°¨à±à°¸à°‚ధానమà±à°²à±"
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "à°ªà±à°°à°¾à°¥à°®à°¿à°•"
-#~ msgid "User connections"
-#~ msgstr "వినియోగదారి à°…à°¨à±à°¸à°‚ధానమà±à°²à±"
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "లింకౠమానిటరింగà±"
-#~ msgid "state: %s\n"
-#~ msgstr "à°¸à±à°¥à°¿à°¤à°¿: %s\n"
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "మిసె"
-#~ msgid "Connection activated\n"
-#~ msgstr "à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à°¿à°‚ది\n"
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "మానిటరింగౠఫà±à°°à±€à°•à±à°µà±†à°¨à±à°¸à±€"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "à°¸à±à°¥à°¿à°¤à°¿: %s (%d)\n"
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "లింకౠఅపౠఆలసà±à°¯à°‚"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "లింకౠడౌనౠఆలసà±à°¯à°‚"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP లకà±à°·à±à°¯à°¾à°²à±"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± పోరà±à°Ÿà±"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "à°ªà±à°°à°¾à°§à°¾à°¨à±à°¯à°¤"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "పాతౠకాసà±à°Ÿà±"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "హెయిరà±â€Œà°ªà°¿à°¨à± రీతి"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà±"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "à°•à±à°·à°£à°¾à°²à±"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "à°à°œà°¿à°‚గౠసమయం"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP (à°¸à±à°ªà°¾à°¨à°¿à°‚à°—à± à°Ÿà±à°°à±€ à°ªà±à°°à±Šà°Ÿà±‹à°•à°¾à°²à±) చేతనం చేయి"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "ఫారà±à°µà°¾à°°à±à°¡à± డిలే"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "హెలో సమయం"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "à°—à°°à°¿à°·à±à°Ÿ కాలపరిమితి"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ఈథరà±à°¨à±†à°Ÿà±"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "à°•à±à°²à±‹à°¨à± చేసిన MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à±"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "డాటాగà±à°°à°¾à°®à±"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "à°…à°¨à±à°¸à°‚ధానమైంది"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "బదిలి రీతి"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "అచేతనమైన"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "à°¸à±à°µà°¯à°‚చాలక"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "లింకà±-లోకలà±"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "మానవీయం"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "పంచà±à°•à±Šà°¨à°¿à°¨"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 ఆకృతీకరణ"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(మలచిన రౌటà±à°²à± లేవà±)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à°’à°• మలచిన రౌటà±"
+msgstr[1] "%d మలచిన రౌటà±à°²à±"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "గేటà±â€Œà°µà±‡"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "DNS సేవికలà±"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "à°…à°¨à±à°µà±‡à°·à°£ డొమైనà±à°²à±"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "రౌటింగà±"
+
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "à°…à°ªà±à°°à°®à±‡à°¯ రౌటౠకొరకౠఈ నెటà±à°µà°°à±à°•à± ఉపయోగించవదà±à°¦à±"
+
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "à°ˆ à°…à°¨à±à°¸à°‚ధానం కొరకౠIPv4 à°Žà°¡à±à°°à±†à°¸à±à°¸à°¿à°‚గౠకావాలి"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "విసà±à°®à°°à°¿à°‚à°šà±"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "à°¸à±à°µà°¯à°‚చాలక DHCP మాతà±à°°à°®à±‡"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 ఆకృతీకరణ"
+
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "à°ˆ à°…à°¨à±à°¸à°‚ధానం కొరకౠIPv6 à°Žà°¡à±à°°à°¸à°¿à°‚గౠకావాలి"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "దాయి"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "చూపà±"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à± పేరà±"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "పరికరం"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "à°¸à±à°µà°¯à°‚చాలకంగా à°…à°¨à±à°¸à°‚ధానించà±"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "వినియోగదారà±à°²à°‚దరికీ à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉంది"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "టీమౠపోరà±à°Ÿà±"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON ఆకృతీకరణ"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "టీమà±"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "పేరెంటà±"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN à°â€à°¡à°¿"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "వై-ఫై"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "à°•à°•à±à°·à°¿à°¦à°¾à°°à±"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "à°Žà°•à±à°¸à±†à°¸à± పాయింటà±"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "à°Žà°¡à±-హాకౠనెటà±à°µà°°à±à°•à±"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "à°¸à±à°µà°¯à°‚చాలక"
+
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "à°à°¦à±€à°•à°¾à°¦à±"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 పరà±à°¸à°¨à°²à±"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 à°Žà°‚à°Ÿà°°à±â€Œà°ªà±à°°à±ˆà°œà±"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit Key (Hex లేదా ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit పాసà±â€Œà°«à±à°°à±‡à°œà±"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "డైనమికౠWEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (à°…à°ªà±à°°à°®à±‡à°¯à°‚)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "ఓపెనౠవà±à°¯à°µà°¸à±à°¥"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "భాగసà±à°µà°¾à°®à±à°¯ à°•à±€"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "ఛానలà±"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "à°°à°•à±à°·à°£"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "సంకేతపదం"
+
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise కౠఇంకా తోడà±à°ªà°¾à°Ÿà± లేదà±...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "à°•à±€"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP సూచిక"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°£"
+
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(dynamic-wep కౠఇంకా తోడà±à°ªà°¾à°Ÿà± లేదà±...)"
+
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "వాడà±à°•à°°à°¿à°ªà±‡à°°à±"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "à°ˆ సంకేతపదం కొరకౠపà±à°°à°¤à°¿à°¸à°¾à°°à°¿ à°…à°¡à±à°—à±"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "సంకేతపదమà±à°¨à± చూపà±à°®à±"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "à°—à°®à±à°¯à°‚"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à±"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "తరà±à°µà°¾à°¤à°¿ హాపà±"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "మెటà±à°°à°¿à°•à±"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "ఠమలచిన రౌటà±à°²à± నిరà±à°µà°šà°¿à°‚చలేదà±."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "à°—à±à°°à±à°¤à°¿à°‚à°ªà±"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ సంకేతపదం"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "సేవ"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "వైరà±â€Œà°²à±†à°¸à± నెటà±â€Œà°µà°°à±à°•à± చేత ధృవీకరణ అవసరమైంది"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"వైరà±â€Œà°²à±†à°¸à± నెటà±â€Œà°µà°°à±à°•à± '%s' యాకà±à°¸à±†à°¸à± చేయà±à°Ÿà°•à± సంకేతపదాలౠలేదా à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కీలౠ"
+"అవసరం."
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "వైరà±à°¡à± 802.1X ధృవీకరణ"
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "నెటà±â€â€Œà°µà°°à±à°•à± పేరà±"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL ధృవీకరణ"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN కోడౠఅవసరమైంది"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠపరికరం కొరకౠPIN కోడౠఅవసరమైంది"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "పినà±"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠనెటà±à°µà°°à±à°•à± సంకేతపదం"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "%s'à°•à± à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± వొక సంకేతపదం అవసరమైంది."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "మీరౠజతచేయాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨ à°¸à±à°²à±‡à°µà± à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ ఎంపికచేయి."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "జతచేయి..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "తీసివేయి"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "à°…à°¨à±à°¸à°‚ధానిసà±à°¤à±‹à°‚ది..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°²à±‡à°• పోయింది: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¿à°‚à°šà±"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚చేయి"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధానాం '%s' లేదà±"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "à°…à°¨à±à°¸à°‚ధానం ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°®à±ˆà°µà±à°‚ది"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "సృషà±à°Ÿà°¿à°‚à°šà±"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "మీరౠసృషà±à°Ÿà°¿à°‚à°šà±à°¦à°¾à°®à°¨à°¿ à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ ఎంపికచేయండి."
+
+#: ../tui/nmtui-edit.c:357
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"ఒకవేళ మీరౠVPN à°…à°¨à±à°¸à°‚ధానం సృషà±à°Ÿà°¿à°‚చాలనà±à°•à±Šà°¨à°¿, మరియౠఆ VPN à°…à°¨à±à°¸à°‚ధానం జాబితా నందౠ"
+"కనిపించకపోతే, మీరౠసరైన VPN చొపà±à°ªà°¿à°‚à°¤ సంసà±à°¥à°¾à°ªà°¿à°‚à°šà°¿ ఉండకపోవచà±à°šà±."
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానం తొలగించలేక పోయింది: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "మీరౠఖచà±à°šà°¿à°¤à°‚à°—à°¾ à°…à°¨à±à°¸à°‚ధానమౠ'%sనౠతొలగించà±à°¦à°¾à°®à°¨à°¿ à°…à°¨à±à°•à±Šà°¨à±à°šà±à°¨à±à°¨à°¾à°°à°¾?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానమà±à°¨à± తొలగించలేక పోయింది: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "అతిధేయపేరౠఅమరà±à°šà±"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "అతిధేయపేరà±"
+
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "అతిధేయపేరౠ'%s' కౠఅమరà±à°šà±"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "అతిధేయపేరౠఅమరà±à°šà°²à±‡à°• పోయింది: %s"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "దోషమà±: '%s' కొరకౠకà±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమà±à°¨à± పొందà±à°Ÿà°²à±‹ విఫలమైంది."
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానమà±"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠసà±à°¥à°¿à°¤à°¿: %s\n"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠసరికూరà±à°šà±"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠపాతà±: %s\n"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚చేయి"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-SETTINGS"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "కొతà±à°¤ అతిధేయపేరà±"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠఅమరà±à°šà±"
-#~ msgid "unknown)"
-#~ msgstr "తెలియని)"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°Ÿà°¿à°¯à±à°"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "పరికరమౠసà±à°¥à°¿à°¤à°¿: %d (%s)\n"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "దయచేసి à°’à°• à°à°šà±à°šà°¿à°•à°‚ ఎంపికచేయి"
-#~ msgid "not set"
-#~ msgstr "అమరà±à°š లేదà±"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "వినిమయం"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "వినియోగదారి-à°ªà±à°°à°¤à±à°¯à±‡à°• à°…à°¨à±à°¸à°‚ధానమà±à°² à°µà±à°ªà°¯à±‹à°—à°®à±à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±à°®à±"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "పరామితà±à°²à± పారà±à°¸à± చేయలేకపోయింది"
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr "వినియోగదారి-à°ªà±à°°à°¤à±à°¯à±‡à°• à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±à°Ÿà°•à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
-#~ msgid "Auto %s"
-#~ msgstr "à°¸à±à°µà°¯à°‚చాలక %s"
-#~ msgid "IP6-SETTINGS"
-#~ msgstr "IP6-SETTINGS"
diff --git a/po/tr.po b/po/tr.po
index b1eb53662..713163b44 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -9,124 +9,535 @@ msgstr ""
"Project-Id-Version: NetworkManager master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-01-03 03:24+0000\n"
-"PO-Revision-Date: 2012-01-03 22:59+0000\n"
-"Last-Translator: Muhammet Kara <muhammet.k@gmail.com>\n"
+"POT-Creation-Date: 2013-03-30 15:29+0000\n"
+"PO-Revision-Date: 2013-04-06 18:00+0200\n"
+"Last-Translator: etc <etcetin@gmail.com>\n"
"Language-Team: Turkish <gnome-turk@gnome.org>\n"
+"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Launchpad-Export-Date: 2012-01-03 09:56+0000\n"
-"X-Generator: Lokalize 1.2\n"
-"Language: tr\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
+#: ../cli/src/common.c:63 ../cli/src/connections.c:133
+#: ../cli/src/connections.c:167
+msgid "GROUP"
+msgstr "GRUP"
+
+#. 0
+#: ../cli/src/common.c:33 ../cli/src/common.c:53
+msgid "ADDRESS"
+msgstr "ADRES"
+
+#. 1
+#: ../cli/src/common.c:34 ../cli/src/common.c:54
+msgid "ROUTE"
+msgstr ""
+
+#. 2
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
+msgid "DNS"
+msgstr "DNS"
+
+#. 3
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
+msgid "DOMAIN"
+msgstr ""
+
+#. 4
+#: ../cli/src/common.c:37
+msgid "WINS"
+msgstr ""
+
+#. 0
+#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#| msgid "CONNECTION"
+msgid "OPTION"
+msgstr "SEÇENEK"
+
+#: ../cli/src/common.c:366
+msgid "unmanaged"
+msgstr "yönetilmeyen"
+
+#: ../cli/src/common.c:368
+msgid "unavailable"
+msgstr "mevcut deÄŸil"
+
+#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+msgid "disconnected"
+msgstr "bağlantı kesildi"
+
+#: ../cli/src/common.c:372
+msgid "connecting (prepare)"
+msgstr "bağlanıyor (hazırlama)"
+
+#: ../cli/src/common.c:374
+msgid "connecting (configuring)"
+msgstr "bağlanıyor (yapılandırılıyor)"
+
+#: ../cli/src/common.c:376
+msgid "connecting (need authentication)"
+msgstr "bağlanıyor (kimlik doğrulama gerekiyor)"
+
+#: ../cli/src/common.c:378
+msgid "connecting (getting IP configuration)"
+msgstr "bağlanıyor (IP yapılandırması alınıyor)"
+
+#: ../cli/src/common.c:380
+msgid "connecting (checking IP connectivity)"
+msgstr "bağlanılıyor (IP bağlanılırlığı denetleniyor)"
+
+#: ../cli/src/common.c:382
+msgid "connecting (starting secondary connections)"
+msgstr "bağlanılıyor (ikincil bağlantılar başlatılıyor)"
+
+#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+msgid "connected"
+msgstr "bağlandı"
+
+#: ../cli/src/common.c:386 ../cli/src/connections.c:466
+msgid "deactivating"
+msgstr "etkisizleÅŸtiriliyor"
+
+#: ../cli/src/common.c:388
+msgid "connection failed"
+msgstr "bağlantı başarısız"
+
+#: ../cli/src/common.c:390 ../cli/src/connections.c:471
+#: ../cli/src/connections.c:494 ../cli/src/connections.c:1189
+#: ../cli/src/devices.c:664 ../cli/src/network-manager.c:123
+#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
+#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
+#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
+#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
+#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:670
+#: ../cli/src/settings.c:698 ../cli/src/settings.c:760 ../cli/src/utils.c:549
+#: ../src/main.c:422 ../src/main.c:441
+msgid "unknown"
+msgstr "bilinmeyen"
+
+#: ../cli/src/common.c:399
+msgid "No reason given"
+msgstr ""
+
+#: ../cli/src/common.c:402
+#| msgid "Unknown"
+msgid "Unknown error"
+msgstr "Bilinmeyen hata"
+
+#: ../cli/src/common.c:405
+msgid "Device is now managed"
+msgstr "Aygıt yönetiliyor"
-#: ../cli/src/connections.c:55 ../cli/src/connections.c:72
-#: ../cli/src/devices.c:103 ../cli/src/devices.c:123 ../cli/src/devices.c:133
-#: ../cli/src/devices.c:143 ../cli/src/devices.c:157 ../cli/src/devices.c:171
-#: ../cli/src/devices.c:182 ../cli/src/devices.c:193 ../cli/src/devices.c:202
-#: ../cli/src/devices.c:211 ../cli/src/devices.c:233
+#: ../cli/src/common.c:408
+msgid "Device is now unmanaged"
+msgstr "Aygıt yönetilmiyor"
+
+#: ../cli/src/common.c:411
+#| msgid "the VPN service returned invalid configuration"
+msgid "The device could not be readied for configuration"
+msgstr "Aygıt yapılandırma için hazır değil"
+
+#: ../cli/src/common.c:414
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+
+#: ../cli/src/common.c:417
+msgid "The IP configuration is no longer valid"
+msgstr ""
+
+#: ../cli/src/common.c:420
+msgid "Secrets were required, but not provided"
+msgstr ""
+
+#: ../cli/src/common.c:423
+msgid "802.1X supplicant disconnected"
+msgstr "802.1X iletiÅŸimi koptu"
+
+#: ../cli/src/common.c:426
+msgid "802.1X supplicant configuration failed"
+msgstr "802.1X iletişim yapılandırması başarısız"
+
+#: ../cli/src/common.c:429
+msgid "802.1X supplicant failed"
+msgstr "802.1X iletişimi başarısız"
+
+#: ../cli/src/common.c:432
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "802.1X iletişim kimlik doğrulaması uzun sürecek gibi"
+
+#: ../cli/src/common.c:435
+#| msgid "the VPN service failed to start"
+msgid "PPP service failed to start"
+msgstr "PPP hizmeti başlatılamadı"
+
+#: ../cli/src/common.c:438
+#| msgid "VPN disconnected"
+msgid "PPP service disconnected"
+msgstr "PPP hizmeti koptu"
+
+#: ../cli/src/common.c:441
+msgid "PPP failed"
+msgstr "PPP başarısız"
+
+#: ../cli/src/common.c:444
+#| msgid "the VPN service failed to start"
+msgid "DHCP client failed to start"
+msgstr "DHCP istemcisi başlatılamadı"
+
+#: ../cli/src/common.c:447
+msgid "DHCP client error"
+msgstr "DHCP istemci hatası"
+
+#: ../cli/src/common.c:450
+#| msgid "VPN connection failed"
+msgid "DHCP client failed"
+msgstr "DHCP istemcisi başarısız"
+
+#: ../cli/src/common.c:453
+#| msgid "the VPN service failed to start"
+msgid "Shared connection service failed to start"
+msgstr "Paylaşımlı ağ hizmeti başlatılamadı"
+
+#: ../cli/src/common.c:456
+#| msgid "connection failed"
+msgid "Shared connection service failed"
+msgstr "Paylaşımlı bağlantı hizmeti başarısız"
+
+#: ../cli/src/common.c:459
+#| msgid "the VPN service failed to start"
+msgid "AutoIP service failed to start"
+msgstr "AutoIP hizmeti başlatılamadı"
+
+#: ../cli/src/common.c:462
+msgid "AutoIP service error"
+msgstr "AutoIP hizmet hatası"
+
+#: ../cli/src/common.c:465
+#| msgid "the VPN service failed to start"
+msgid "AutoIP service failed"
+msgstr "AutoIP hizmeti başarısız"
+
+#: ../cli/src/common.c:468
+msgid "The line is busy"
+msgstr "Hat meÅŸgul"
+
+#: ../cli/src/common.c:471
+msgid "No dial tone"
+msgstr "Arama tonu yok"
+
+#: ../cli/src/common.c:474
+msgid "No carrier could be established"
+msgstr "Bir operatöre bağlanılamadı"
+
+#: ../cli/src/common.c:477
+msgid "The dialing request timed out"
+msgstr "Arama isteği zaman aşımına uğradı"
+
+#: ../cli/src/common.c:480
+msgid "The dialing attempt failed"
+msgstr "Arama girişimi başarısız"
+
+#: ../cli/src/common.c:483
+#| msgid "Error: Connection activation failed."
+msgid "Modem initialization failed"
+msgstr "Modem kurulumu başarısız"
+
+#: ../cli/src/common.c:486
+#| msgid "Failed to decrypt the private key."
+msgid "Failed to select the specified APN"
+msgstr "Belirtilen APN seçimi başarısız"
+
+#: ../cli/src/common.c:489
+msgid "Not searching for networks"
+msgstr "Ağlar için arama yapılmıyor"
+
+#: ../cli/src/common.c:492
+#| msgid "Networking enabled"
+msgid "Network registration denied"
+msgstr "Ağa katılım engellendi"
+
+#: ../cli/src/common.c:495
+msgid "Network registration timed out"
+msgstr "Ağ kaydı zaman aşımına uğradı"
+
+#: ../cli/src/common.c:498
+msgid "Failed to register with the requested network"
+msgstr "İstenilen ağa kayıt başarısız"
+
+#: ../cli/src/common.c:501
+#| msgid "VPN connection failed"
+msgid "PIN check failed"
+msgstr "PIN sorgulaması başarısız"
+
+#: ../cli/src/common.c:504
+msgid "Necessary firmware for the device may be missing"
+msgstr "Aygıt için gerekli ürün yazılımı eksik olabilir"
+
+#: ../cli/src/common.c:507
+#| msgid "the connection was removed"
+msgid "The device was removed"
+msgstr "Aygıt kaldırıldı"
+
+#: ../cli/src/common.c:510
+#| msgid "NetworkManager status"
+msgid "NetworkManager went to sleep"
+msgstr "NetworkManager uyudu"
+
+#: ../cli/src/common.c:513
+#| msgid "no active connection or device"
+msgid "The device's active connection disappeared"
+msgstr "Aygıtın varolan bağlantısı koptu"
+
+#: ../cli/src/common.c:516
+msgid "Device disconnected by user or client"
+msgstr "Kullanıcı ya da istemci tarafından bağlantı koparıldı"
+
+#: ../cli/src/common.c:519
+msgid "Carrier/link changed"
+msgstr "Operatör/bağlantı değişti"
+
+#: ../cli/src/common.c:522
+#| msgid "the connection was removed"
+msgid "The device's existing connection was assumed"
+msgstr "Aygıtın mevcut bağlantısı kabul edildi"
+
+#: ../cli/src/common.c:525
+msgid "The supplicant is now available"
+msgstr "Ä°letiÅŸim ÅŸimdi uygun"
+
+#: ../cli/src/common.c:528
+#| msgid "'dhcpcd' could be found."
+msgid "The modem could not be found"
+msgstr "Modem bulunamadı"
+
+#: ../cli/src/common.c:531
+#| msgid "the connection attempt timed out"
+msgid "The Bluetooth connection failed or timed out"
+msgstr "Bluetooth bağlantısı başarısız ya da zaman aşımına uğradı"
+
+#: ../cli/src/common.c:534
+msgid "GSM Modem's SIM card not inserted"
+msgstr "GSM Modem'in SIM kartı yerleştirilmemiş"
+
+#: ../cli/src/common.c:537
+msgid "GSM Modem's SIM PIN required"
+msgstr "GSM Modem'in SIM PIN'i gerekli"
+
+#: ../cli/src/common.c:540
+msgid "GSM Modem's SIM PUK required"
+msgstr "GSM Modem'in SIM PUK'u gerekli"
+
+#: ../cli/src/common.c:543
+msgid "GSM Modem's SIM wrong"
+msgstr "GSM Modem'in SIM'i yanlış"
+
+#: ../cli/src/common.c:546
+msgid "InfiniBand device does not support connected mode"
+msgstr ""
+
+#: ../cli/src/common.c:549
+#| msgid "connection failed"
+msgid "A dependency of the connection failed"
+msgstr "Bir bağlantı gereksinimi sağlanamadı, başarısız"
+
+#: ../cli/src/common.c:552
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr ""
+
+#: ../cli/src/common.c:555
+msgid "ModemManager is unavailable"
+msgstr ""
+
+#: ../cli/src/common.c:558
+#| msgid "'dhclient' could be found."
+msgid "The Wi-Fi network could not be found"
+msgstr "Wi-Fi ağı bulunamadı"
+
+#: ../cli/src/common.c:561
+msgid "A secondary connection of the base connection failed"
+msgstr ""
+
+#: ../cli/src/common.c:564 ../cli/src/devices.c:310 ../cli/src/devices.c:328
+#: ../cli/src/devices.c:450 ../cli/src/devices.c:494
+msgid "Unknown"
+msgstr "Bilinmeyen"
+
+#. 0
+#. used only for 'GENERAL' group listing
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
+#: ../cli/src/devices.c:109 ../cli/src/devices.c:134 ../cli/src/devices.c:144
+#: ../cli/src/devices.c:154 ../cli/src/devices.c:164 ../cli/src/devices.c:180
+#: ../cli/src/devices.c:194 ../cli/src/devices.c:216 ../cli/src/devices.c:232
+#: ../cli/src/devices.c:241
msgid "NAME"
msgstr "Ä°SÄ°M"
#. 0
-#: ../cli/src/connections.c:56 ../cli/src/connections.c:73
+#. 1
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
msgid "UUID"
msgstr "Kullanıcı Kimliği"
#. 1
-#: ../cli/src/connections.c:57
+#. 0
+#. 1
+#. 2
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
+#: ../cli/src/devices.c:72 ../cli/src/devices.c:111 ../cli/src/devices.c:219
+msgid "TYPE"
+msgstr "TÃœR"
+
+#. 2
+#: ../cli/src/connections.c:63
+msgid "TIMESTAMP"
+msgstr "ZAMANDAMGASI"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "TIMESTAMP-REAL"
+msgstr "ZAMANDAMGASI-GERÇEK"
+
+#. 4
+#. 13
+#: ../cli/src/connections.c:65 ../cli/src/devices.c:123
+msgid "AUTOCONNECT"
+msgstr "OTOMATÄ°K-BAÄžLANTI"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "READONLY"
+msgstr "SALT-OKUNUR"
+
+#. 6
+#. 8
+#. 2
+#. 11
+#. 5
+#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
+#: ../cli/src/devices.c:74 ../cli/src/devices.c:206 ../cli/src/devices.c:222
+msgid "DBUS-PATH"
+msgstr "DBUS-YOLU"
+
+#. 2
+#: ../cli/src/connections.c:136
msgid "DEVICES"
msgstr "AYGITLAR"
-#. 2
+#. 3
#. 1
-#. 6
+#. 8
#. 1
-#: ../cli/src/connections.c:58 ../cli/src/devices.c:70
-#: ../cli/src/devices.c:110 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:118 ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "DURUM"
-#. 3
-#: ../cli/src/connections.c:59
+#. 4
+#: ../cli/src/connections.c:138
msgid "DEFAULT"
msgstr "ÖNTANIMLI"
-#. 4
-#: ../cli/src/connections.c:60
-#| msgid "DEFAULT"
+#. 5
+#: ../cli/src/connections.c:139
msgid "DEFAULT6"
msgstr "ÖNTANIMLI6"
-#. 5
-#: ../cli/src/connections.c:61
+#. 6
+#: ../cli/src/connections.c:140
msgid "SPEC-OBJECT"
msgstr "BELÄ°RLÄ°-NESNE"
-#. 6
-#: ../cli/src/connections.c:62
+#. 7
+#. 1
+#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
msgid "VPN"
msgstr "VPN"
-#. 7
-#. 6
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:63 ../cli/src/connections.c:79
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:223 ../cli/src/devices.c:239
-msgid "DBUS-PATH"
-msgstr "DBUS-YOLU"
+#. 9
+#: ../cli/src/connections.c:143
+msgid "CON-PATH"
+msgstr ""
-#. 8
-#: ../cli/src/connections.c:64
+#. 10
+#: ../cli/src/connections.c:144
msgid "ZONE"
msgstr "BÖLGE"
-#. 1
+#. 11
+#: ../cli/src/connections.c:145
+#| msgid "DBUS-PATH"
+msgid "MASTER-PATH"
+msgstr "ANA-YOL"
+
+#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
+msgid "GENERAL"
+msgstr "GENEL"
+
#. 0
+#: ../cli/src/connections.c:154
+#| msgid "TKIP"
+msgid "IP"
+msgstr "IP"
+
#. 1
-#. 2
-#: ../cli/src/connections.c:74 ../cli/src/devices.c:69
-#: ../cli/src/devices.c:105 ../cli/src/devices.c:236
-msgid "TYPE"
-msgstr "TÃœR"
+#: ../cli/src/connections.c:169
+#| msgid "NAME"
+msgid "USERNAME"
+msgstr "KULLANICI ADI"
#. 2
-#: ../cli/src/connections.c:75
-msgid "TIMESTAMP"
-msgstr "ZAMANDAMGASI"
+#: ../cli/src/connections.c:170
+msgid "GATEWAY"
+msgstr "AĞ GEÇİDİ"
#. 3
-#: ../cli/src/connections.c:76
-msgid "TIMESTAMP-REAL"
-msgstr "ZAMANDAMGASI-GERÇEK"
+#: ../cli/src/connections.c:171
+msgid "BANNER"
+msgstr ""
#. 4
-#: ../cli/src/connections.c:77
-msgid "AUTOCONNECT"
-msgstr "OTOMATÄ°K-BAÄžLANTI"
+#: ../cli/src/connections.c:172
+#| msgid "STATE"
+msgid "VPN-STATE"
+msgstr "VPN DURUMU"
#. 5
-#: ../cli/src/connections.c:78
-msgid "READONLY"
-msgstr "SALT-OKUNUR"
+#: ../cli/src/connections.c:173
+msgid "CFG"
+msgstr ""
-#: ../cli/src/connections.c:149
-#, c-format
+#: ../cli/src/connections.c:195
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: nmcli con { COMMAND | help }\n"
+#| " COMMAND := { list | status | up | down | delete }\n"
+#| "\n"
+#| " list [id <id> | uuid <id>]\n"
+#| " status\n"
+#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
+#| "nowait] [--timeout <timeout>]\n"
+#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--"
+#| "timeout <timeout>]\n"
+#| " down id <id> | uuid <id>\n"
+#| " delete id <id> | uuid <id>\n"
msgid ""
-"Usage: nmcli con { COMMAND | help }\n"
+"Usage: nmcli connection { COMMAND | help }\n"
" COMMAND := { list | status | up | down | delete }\n"
"\n"
" list [id <id> | uuid <id>]\n"
-" status\n"
+" status [id <id> | uuid <id> | path <path>]\n"
" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
"nowait] [--timeout <timeout>]\n"
" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
"<timeout>]\n"
" down id <id> | uuid <id>\n"
" delete id <id> | uuid <id>\n"
+"\n"
msgstr ""
"Kullanımı: nmcli con { KOMUT | help }\n"
" KOMUT := { list | status | up | down | delete }\n"
@@ -140,356 +551,342 @@ msgstr ""
" down id <id> | uuid <id>\n"
" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:203 ../cli/src/connections.c:536
+#: ../cli/src/connections.c:256 ../cli/src/connections.c:442
#, c-format
msgid "Error: 'con list': %s"
msgstr "Hata: 'baÄŸ. listesi': %s"
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:538
+#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
#, c-format
msgid "Error: 'con list': %s; allowed fields: %s"
msgstr "Hata: 'bağlantı listesi': %s; izin verilen alanlar :%s"
-#: ../cli/src/connections.c:213
+#: ../cli/src/connections.c:266
msgid "Connection details"
msgstr "Bağlantı ayrıntıları"
-#: ../cli/src/connections.c:411
+#: ../cli/src/connections.c:317
msgid "never"
msgstr "hiçbir zaman"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:412 ../cli/src/connections.c:413
-#: ../cli/src/connections.c:610 ../cli/src/connections.c:611
-#: ../cli/src/connections.c:613 ../cli/src/devices.c:510
-#: ../cli/src/devices.c:563 ../cli/src/devices.c:668 ../cli/src/devices.c:669
-#: ../cli/src/devices.c:699 ../cli/src/devices.c:725 ../cli/src/devices.c:726
-#: ../cli/src/devices.c:727 ../cli/src/devices.c:728 ../cli/src/devices.c:729
-#: ../cli/src/settings.c:572 ../cli/src/settings.c:642
-#: ../cli/src/settings.c:761 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046
-#: ../cli/src/settings.c:1048 ../cli/src/settings.c:1049
-#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178
-#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180
-#: ../cli/src/settings.c:1255 ../cli/src/settings.c:1256
-#: ../cli/src/settings.c:1257 ../cli/src/settings.c:1258
-#: ../cli/src/settings.c:1259 ../cli/src/settings.c:1260
-#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262
-#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264
-#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266
-#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1338
+#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
+#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
+#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
+#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
+#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
+#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
+#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
+#: ../cli/src/network-manager.c:267
msgid "yes"
msgstr "evet"
-#: ../cli/src/connections.c:412 ../cli/src/connections.c:413
-#: ../cli/src/connections.c:610 ../cli/src/connections.c:611
-#: ../cli/src/connections.c:613 ../cli/src/devices.c:510
-#: ../cli/src/devices.c:563 ../cli/src/devices.c:668 ../cli/src/devices.c:669
-#: ../cli/src/devices.c:699 ../cli/src/devices.c:725 ../cli/src/devices.c:726
-#: ../cli/src/devices.c:727 ../cli/src/devices.c:728 ../cli/src/devices.c:729
-#: ../cli/src/settings.c:572 ../cli/src/settings.c:574
-#: ../cli/src/settings.c:642 ../cli/src/settings.c:761
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1048
-#: ../cli/src/settings.c:1049 ../cli/src/settings.c:1177
-#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179
-#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1255
-#: ../cli/src/settings.c:1256 ../cli/src/settings.c:1257
-#: ../cli/src/settings.c:1258 ../cli/src/settings.c:1259
-#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261
-#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263
-#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265
-#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267
-#: ../cli/src/settings.c:1338
+#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
+#: ../cli/src/connections.c:552 ../cli/src/connections.c:553
+#: ../cli/src/connections.c:555 ../cli/src/devices.c:458
+#: ../cli/src/devices.c:511 ../cli/src/devices.c:629 ../cli/src/devices.c:630
+#: ../cli/src/devices.c:631 ../cli/src/devices.c:663 ../cli/src/devices.c:690
+#: ../cli/src/devices.c:691 ../cli/src/devices.c:692 ../cli/src/devices.c:693
+#: ../cli/src/devices.c:694 ../cli/src/devices.c:695 ../cli/src/devices.c:696
+#: ../cli/src/network-manager.c:269
msgid "no"
msgstr "hayır"
-#: ../cli/src/connections.c:487
+#: ../cli/src/connections.c:393
msgid "Connection list"
msgstr "Bağlantı listesi"
-#: ../cli/src/connections.c:500 ../cli/src/connections.c:1416
-#: ../cli/src/connections.c:1431 ../cli/src/connections.c:1440
-#: ../cli/src/connections.c:1450 ../cli/src/connections.c:1462
-#: ../cli/src/connections.c:1557 ../cli/src/connections.c:1640
-#: ../cli/src/devices.c:1202 ../cli/src/devices.c:1212
-#: ../cli/src/devices.c:1326 ../cli/src/devices.c:1334
-#: ../cli/src/devices.c:1547 ../cli/src/devices.c:1554
+#: ../cli/src/connections.c:406 ../cli/src/connections.c:948
+#: ../cli/src/connections.c:1486 ../cli/src/connections.c:1501
+#: ../cli/src/connections.c:1510 ../cli/src/connections.c:1520
+#: ../cli/src/connections.c:1532 ../cli/src/connections.c:1641
+#: ../cli/src/connections.c:1743 ../cli/src/devices.c:1192
+#: ../cli/src/devices.c:1202 ../cli/src/devices.c:1320
+#: ../cli/src/devices.c:1328 ../cli/src/devices.c:1692
+#: ../cli/src/devices.c:1699 ../cli/src/devices.c:1713
+#: ../cli/src/devices.c:1720 ../cli/src/devices.c:1737
+#: ../cli/src/devices.c:1748 ../cli/src/devices.c:1969
+#: ../cli/src/devices.c:1976
#, c-format
msgid "Error: %s argument is missing."
msgstr "Hata: %s bağımsız değişken eksik."
-#: ../cli/src/connections.c:513
+#: ../cli/src/connections.c:419
#, c-format
msgid "Error: %s - no such connection."
msgstr "Hata: %s - böyle bir bağlantı yok."
-#: ../cli/src/connections.c:519 ../cli/src/connections.c:1475
-#: ../cli/src/connections.c:1574 ../cli/src/connections.c:1647
-#: ../cli/src/devices.c:999 ../cli/src/devices.c:1079
-#: ../cli/src/devices.c:1226 ../cli/src/devices.c:1340
-#: ../cli/src/devices.c:1560
+#: ../cli/src/connections.c:425 ../cli/src/connections.c:1545
+#: ../cli/src/connections.c:1658 ../cli/src/connections.c:1750
+#: ../cli/src/devices.c:976 ../cli/src/devices.c:1056
+#: ../cli/src/devices.c:1216 ../cli/src/devices.c:1334
+#: ../cli/src/devices.c:1761 ../cli/src/devices.c:1982
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Bilinmeyen deÄŸiÅŸtirge: %s\n"
-#: ../cli/src/connections.c:528
+#: ../cli/src/connections.c:434
#, c-format
msgid "Error: no valid parameter specified."
msgstr "Hata: geçerli bir değiştirge belirtilmedi."
-#: ../cli/src/connections.c:543 ../cli/src/connections.c:1728
-#: ../cli/src/devices.c:1768 ../cli/src/network-manager.c:456
+#: ../cli/src/connections.c:449 ../cli/src/connections.c:1846
+#: ../cli/src/devices.c:2193 ../cli/src/network-manager.c:599
#, c-format
msgid "Error: %s."
msgstr "Hata: %s."
-#: ../cli/src/connections.c:556
+#: ../cli/src/connections.c:462
msgid "activating"
msgstr "etkinleÅŸtiriliyor"
-#: ../cli/src/connections.c:558
+#: ../cli/src/connections.c:464
msgid "activated"
msgstr "etkinleÅŸtirildi"
-#: ../cli/src/connections.c:560 ../cli/src/devices.c:303
-msgid "deactivating"
-msgstr "etkisizleÅŸtiriliyor"
+#: ../cli/src/connections.c:468
+#| msgid "activated"
+msgid "deactivated"
+msgstr "devre dışı"
-#: ../cli/src/connections.c:563 ../cli/src/connections.c:1255
-#: ../cli/src/connections.c:1288 ../cli/src/devices.c:307
-#: ../cli/src/devices.c:700 ../cli/src/network-manager.c:111
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291
-#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384
-#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:527
-#: ../cli/src/utils.c:397
-msgid "unknown"
-msgstr "bilinmeyen"
+#: ../cli/src/connections.c:480
+msgid "VPN connecting (prepare)"
+msgstr "VPN bağlantısı (hazırlama)"
+
+#: ../cli/src/connections.c:482
+msgid "VPN connecting (need authentication)"
+msgstr "VPN bağlantısı (kimlik doğrulama gerekiyor)"
-#: ../cli/src/connections.c:652
+#: ../cli/src/connections.c:484
+msgid "VPN connecting"
+msgstr "VPN bağlantısı"
+
+#: ../cli/src/connections.c:486
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN bağlantısı (IP yapılandırması alınıyor)"
+
+#: ../cli/src/connections.c:488
+msgid "VPN connected"
+msgstr "VPN bağlı"
+
+#: ../cli/src/connections.c:490
+msgid "VPN connection failed"
+msgstr "VPN bağlantısı başarısız"
+
+#: ../cli/src/connections.c:492
+msgid "VPN disconnected"
+msgstr "VPN bağlı değil"
+
+#: ../cli/src/connections.c:548 ../cli/src/connections.c:558
+msgid "N/A"
+msgstr ""
+
+#: ../cli/src/connections.c:752 ../cli/src/connections.c:976
#, c-format
msgid "Error: 'con status': %s"
msgstr "Hata: 'bağlantı durumu':%s"
-#: ../cli/src/connections.c:654
+#: ../cli/src/connections.c:754 ../cli/src/connections.c:978
#, c-format
msgid "Error: 'con status': %s; allowed fields: %s"
msgstr "Hata: 'bağlantı durumu': %s; izin verilen alanlar :%s"
-#: ../cli/src/connections.c:662 ../cli/src/connections.c:1490
-#: ../cli/src/connections.c:1589 ../cli/src/connections.c:1661
-#: ../cli/src/devices.c:1026 ../cli/src/devices.c:1088
-#: ../cli/src/devices.c:1241 ../cli/src/devices.c:1370
-#: ../cli/src/devices.c:1589
+#: ../cli/src/connections.c:762
+#| msgid "Active connections"
+msgid "Active connection details"
+msgstr "Etkin bağlantı detayları"
+
+#: ../cli/src/connections.c:898 ../cli/src/connections.c:1560
+#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1764
+#: ../cli/src/devices.c:1003 ../cli/src/devices.c:1065
+#: ../cli/src/devices.c:1231 ../cli/src/devices.c:1364
+#: ../cli/src/devices.c:1783 ../cli/src/devices.c:2011
+#: ../cli/src/network-manager.c:311
#, c-format
msgid "Error: Can't find out if NetworkManager is running: %s."
msgstr "Hata: Ağ Yöneticisi çalışıyorsa bulunamıyor: %s"
-#: ../cli/src/connections.c:666 ../cli/src/connections.c:1494
-#: ../cli/src/connections.c:1593 ../cli/src/connections.c:1665
-#: ../cli/src/devices.c:1030 ../cli/src/devices.c:1092
-#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1374
-#: ../cli/src/devices.c:1593
+#: ../cli/src/connections.c:902 ../cli/src/connections.c:1564
+#: ../cli/src/connections.c:1677 ../cli/src/connections.c:1768
+#: ../cli/src/devices.c:1007 ../cli/src/devices.c:1069
+#: ../cli/src/devices.c:1235 ../cli/src/devices.c:1368
+#: ../cli/src/devices.c:1787 ../cli/src/devices.c:2015
+#: ../cli/src/network-manager.c:315
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Hata: Ağ Yöneticisi çalışmıyor."
-#: ../cli/src/connections.c:674
+#: ../cli/src/connections.c:934
msgid "Active connections"
msgstr "Etkin bağlantılar"
-#: ../cli/src/connections.c:1149
+#: ../cli/src/connections.c:959
+#, c-format
+#| msgid "Error: %s - no such connection."
+msgid "Error: '%s' is not an active connection."
+msgstr "Hata: %s etkin bir bağlantı değil."
+
+#: ../cli/src/connections.c:964
+#, c-format
+#| msgid "Unknown parameter: %s\n"
+msgid "Error: unknown parameter: %s"
+msgstr "Hata: bilinmeyen parametre: %s"
+
+#: ../cli/src/connections.c:1071
#, c-format
msgid "no active connection on device '%s'"
msgstr "'%s' aygıtı üzerinde etkin bir bağlantı yok"
-#: ../cli/src/connections.c:1157
-#, c-format
+#: ../cli/src/connections.c:1079
msgid "no active connection or device"
msgstr "etkin bağlantı veya aygıt yok"
-#: ../cli/src/connections.c:1228
+#: ../cli/src/connections.c:1150
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "'%s aygıtı '%s' bağlantısı ile uyumlu değil"
-#: ../cli/src/connections.c:1230
+#: ../cli/src/connections.c:1153
#, c-format
msgid "no device found for connection '%s'"
msgstr "'%s' bağlantısı için aygıt bulunamadı"
-#: ../cli/src/connections.c:1241
-msgid "VPN connecting (prepare)"
-msgstr "VPN bağlantısı (hazırlama)"
-
-#: ../cli/src/connections.c:1243
-msgid "VPN connecting (need authentication)"
-msgstr "VPN bağlantısı (kimlik doğrulama gerekiyor)"
-
-#: ../cli/src/connections.c:1245
-msgid "VPN connecting"
-msgstr "VPN bağlantısı"
-
-#: ../cli/src/connections.c:1247
-msgid "VPN connecting (getting IP configuration)"
-msgstr "VPN bağlantısı (IP yapılandırması alınıyor)"
-
-#: ../cli/src/connections.c:1249
-msgid "VPN connected"
-msgstr "VPN bağlı"
-
-#: ../cli/src/connections.c:1251
-msgid "VPN connection failed"
-msgstr "VPN bağlantısı başarısız"
-
-#: ../cli/src/connections.c:1253
-msgid "VPN disconnected"
-msgstr "VPN bağlı değil"
-
-#: ../cli/src/connections.c:1264
+#: ../cli/src/connections.c:1165
msgid "unknown reason"
msgstr "bilinmeyen neden"
-#: ../cli/src/connections.c:1266
+#: ../cli/src/connections.c:1167
msgid "none"
msgstr "yok"
-#: ../cli/src/connections.c:1268
+#: ../cli/src/connections.c:1169
msgid "the user was disconnected"
msgstr "kullanıcı bağlantısı kesildi"
-#: ../cli/src/connections.c:1270
+#: ../cli/src/connections.c:1171
msgid "the base network connection was interrupted"
msgstr "ana ağ bağlantısı yarıda kesildi"
-#: ../cli/src/connections.c:1272
+#: ../cli/src/connections.c:1173
msgid "the VPN service stopped unexpectedly"
msgstr "VPN hizmeti beklenmedik bir biçimde durdu"
-#: ../cli/src/connections.c:1274
+#: ../cli/src/connections.c:1175
msgid "the VPN service returned invalid configuration"
msgstr "VPN hizmeti geçersiz bir yapılandırma döndürdü"
-#: ../cli/src/connections.c:1276
+#: ../cli/src/connections.c:1177
msgid "the connection attempt timed out"
msgstr "bağlantı denemesi zaman aşımına uğradı"
-#: ../cli/src/connections.c:1278
+#: ../cli/src/connections.c:1179
msgid "the VPN service did not start in time"
msgstr "VPN hizmeti zamanında başlatılmadı"
-#: ../cli/src/connections.c:1280
+#: ../cli/src/connections.c:1181
msgid "the VPN service failed to start"
msgstr "VPN hizmeti başlatılamadı"
-#: ../cli/src/connections.c:1282
+#: ../cli/src/connections.c:1183
msgid "no valid VPN secrets"
msgstr "geçerli bir VPN parolası yok"
-#: ../cli/src/connections.c:1284
+#: ../cli/src/connections.c:1185
msgid "invalid VPN secrets"
msgstr "geçersiz VPN parolaları"
-#: ../cli/src/connections.c:1286
+#: ../cli/src/connections.c:1187
msgid "the connection was removed"
msgstr "bağlantı kaldırıldı"
-#: ../cli/src/connections.c:1300
-#, c-format
-msgid "state: %s\n"
-msgstr "durum: %s\n"
-
-#: ../cli/src/connections.c:1303 ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1204 ../cli/src/connections.c:1409
#, c-format
-msgid "Connection activated\n"
-msgstr "Bağlantı etkinleştirildi\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr ""
-#: ../cli/src/connections.c:1306
+#. Active connection failed and dissapeared, quit.
+#: ../cli/src/connections.c:1209 ../cli/src/connections.c:1310
#, c-format
msgid "Error: Connection activation failed."
msgstr "Hata: Bağlantı etkinleştirilemedi."
-#: ../cli/src/connections.c:1325
+#: ../cli/src/connections.c:1234
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "durum: %s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "VPN bağlantısı başarıyla atkifleştirildi (Etkin D-Bus yolu: %s)\n"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1242
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Hata: Bağlantı etkinleştirilemedi: %s."
-#: ../cli/src/connections.c:1352 ../cli/src/devices.c:1148
+#: ../cli/src/connections.c:1339 ../cli/src/devices.c:1125
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Hata: %d saniye zaman aşımı sona erdi."
-#: ../cli/src/connections.c:1365
+#: ../cli/src/connections.c:1400
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Hata: Bağlantı etkinleştirilemedi: %s"
-#: ../cli/src/connections.c:1371
-#, c-format
-msgid "Active connection state: %s\n"
-msgstr "Etkin bağlantı durumu: %s\n"
-
-#: ../cli/src/connections.c:1372
-#, c-format
-msgid "Active connection path: %s\n"
-msgstr "Etkin bağlantı yolu: %s\n"
-
-#: ../cli/src/connections.c:1424 ../cli/src/connections.c:1565
-#: ../cli/src/connections.c:1674
+#: ../cli/src/connections.c:1494 ../cli/src/connections.c:1649
+#: ../cli/src/connections.c:1777
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Hata: Bilinmeyen bağlantı: %s."
-#: ../cli/src/connections.c:1470 ../cli/src/devices.c:1220
+#: ../cli/src/connections.c:1540 ../cli/src/devices.c:1210
+#: ../cli/src/devices.c:1756
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "Hata: '%s' zaman aşımı değeri geçerli değil."
-#: ../cli/src/connections.c:1483 ../cli/src/connections.c:1582
-#: ../cli/src/connections.c:1654
+#: ../cli/src/connections.c:1553 ../cli/src/connections.c:1666
+#: ../cli/src/connections.c:1757
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "Hata: id veya uuid deÄŸeri belirtilmeli."
-#: ../cli/src/connections.c:1511
+#: ../cli/src/connections.c:1586
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "Hata: Uygun bir aygıt bulunamadı: %s."
-#: ../cli/src/connections.c:1513
+#: ../cli/src/connections.c:1588
#, c-format
msgid "Error: No suitable device found."
msgstr "Hata: Uygun bir aygıt bulunamadı."
-#: ../cli/src/connections.c:1618
+#: ../cli/src/connections.c:1702
#, c-format
msgid "Warning: Connection not active\n"
msgstr "Uyarı: Bağlantı etkin değil\n"
-#: ../cli/src/connections.c:1719
+#: ../cli/src/connections.c:1716
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: Connection deletion failed: %s"
+msgstr "Hata: Bağlantı silinemedi: %s"
+
+#: ../cli/src/connections.c:1837
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "HATA: 'bağlantı' '%s' komutu geçerli değil"
-#: ../cli/src/connections.c:1784
+#: ../cli/src/connections.c:1905
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "Hata: D-Bus'a bağlanılamadı."
-#: ../cli/src/connections.c:1792
+#: ../cli/src/connections.c:1913
#, c-format
msgid "Error: Could not get system settings."
msgstr "Hata: Sistem ayarları alınamadı."
-#: ../cli/src/connections.c:1802
+#: ../cli/src/connections.c:1923
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "Hata: Bağlantılar alınamıyor: ayarlar hizmeti çalışmıyor."
@@ -497,253 +894,304 @@ msgstr "Hata: Bağlantılar alınamıyor: ayarlar hizmeti çalışmıyor."
#. 0
#. 9
#. 3
-#: ../cli/src/devices.c:68 ../cli/src/devices.c:104 ../cli/src/devices.c:221
-#: ../cli/src/devices.c:237
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:220
msgid "DEVICE"
msgstr "AYGIT"
-#: ../cli/src/devices.c:80
-msgid "GENERAL"
-msgstr "GENEL"
-
#. 0
-#: ../cli/src/devices.c:81
+#: ../cli/src/devices.c:84
msgid "CAPABILITIES"
msgstr "YETENEKLER"
#. 1
-#: ../cli/src/devices.c:82
+#: ../cli/src/devices.c:85
msgid "WIFI-PROPERTIES"
msgstr "WIFI-ÖZELLİKLER"
#. 2
-#: ../cli/src/devices.c:83
+#. 5
+#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:84
+#: ../cli/src/devices.c:87
msgid "WIRED-PROPERTIES"
msgstr "KABLOLU-ÖZELLİKLER"
#. 4
-#: ../cli/src/devices.c:85
+#: ../cli/src/devices.c:88
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-ÖZELLİKLERİ"
#. 5
#. 0
-#: ../cli/src/devices.c:86 ../cli/src/devices.c:234
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:217
msgid "NSP"
msgstr "NSP"
#. 6
-#: ../cli/src/devices.c:87
-msgid "IP4-SETTINGS"
-msgstr "IP4-AYARLAR"
+#: ../cli/src/devices.c:90
+#| msgid "IP4-DNS"
+msgid "IP4"
+msgstr "IP4"
#. 7
-#: ../cli/src/devices.c:88
-msgid "IP4-DNS"
-msgstr "IP4-DNS"
+#: ../cli/src/devices.c:91
+msgid "DHCP4"
+msgstr "DHCP4"
#. 8
-#: ../cli/src/devices.c:89
-msgid "IP6-SETTINGS"
-msgstr "IP6-AYARLARL"
+#: ../cli/src/devices.c:92
+#| msgid "IP6-DNS"
+msgid "IP6"
+msgstr "IP6"
#. 9
-#: ../cli/src/devices.c:90
-msgid "IP6-DNS"
-msgstr "IP6-DNS"
+#: ../cli/src/devices.c:93
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#. 10
+#: ../cli/src/devices.c:94
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../cli/src/devices.c:95
+msgid "VLAN"
+msgstr "VLAN"
+
+#. 12
+#: ../cli/src/devices.c:96
+#| msgid "CONNECTION"
+msgid "CONNECTIONS"
+msgstr "BAÄžLANTILAR"
#. 2
-#: ../cli/src/devices.c:106
+#: ../cli/src/devices.c:112
msgid "VENDOR"
msgstr "SATICI"
#. 3
-#: ../cli/src/devices.c:107
+#: ../cli/src/devices.c:113
msgid "PRODUCT"
msgstr "ÃœRÃœN"
#. 4
-#: ../cli/src/devices.c:108
+#: ../cli/src/devices.c:114
msgid "DRIVER"
msgstr "SÜRÜCÜ"
#. 5
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:115
+#| msgid "VERSION"
+msgid "DRIVER-VERSION"
+msgstr "SÃœRÃœM"
+
+#. 6
+#: ../cli/src/devices.c:116
+#| msgid "FIRMWARE-MISSING"
+msgid "FIRMWARE-VERSION"
+msgstr "AYGIT-YAZILIMI"
+
+#. 7
+#: ../cli/src/devices.c:117
msgid "HWADDR"
msgstr "HWADDR"
-#. 7
-#: ../cli/src/devices.c:111
+#. 9
+#: ../cli/src/devices.c:119
+msgid "REASON"
+msgstr ""
+
+#. 10
+#: ../cli/src/devices.c:120
msgid "UDI"
msgstr "UDI"
-#. 8
-#: ../cli/src/devices.c:112
+#. 11
+#: ../cli/src/devices.c:121
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 9
-#: ../cli/src/devices.c:113
+#. 12
+#: ../cli/src/devices.c:122
msgid "NM-MANAGED"
msgstr "AY-YÖNETİMLİ"
-#. 10
-#: ../cli/src/devices.c:114
+#. 14
+#: ../cli/src/devices.c:124
msgid "FIRMWARE-MISSING"
msgstr "AYGIT-YAZILIMI-EKSÄ°K"
-#. 11
-#: ../cli/src/devices.c:115
-#| msgid "AUTOCONNECT"
+#. 15
+#: ../cli/src/devices.c:125
msgid "CONNECTION"
msgstr "BAÄžLANTI"
#. 0
-#: ../cli/src/devices.c:124
+#: ../cli/src/devices.c:135
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "UYGUN-BAÄžLANTI-YOLLARI"
+
+#. 1
+#: ../cli/src/devices.c:136
+#| msgid "CONNECTION"
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "UYGUN-BAÄžLANTILAR"
+
+#. 0
+#: ../cli/src/devices.c:145
msgid "CARRIER-DETECT"
msgstr "TAÅžIYICI-ALGILAMA"
#. 1
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:146
msgid "SPEED"
msgstr "HIZ"
#. 0
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:155
msgid "CARRIER"
msgstr "TAÅžIYICI"
#. 0
-#: ../cli/src/devices.c:144
+#: ../cli/src/devices.c:165
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:145
+#: ../cli/src/devices.c:166
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:146
+#: ../cli/src/devices.c:167
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:147
+#: ../cli/src/devices.c:168
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:148
+#: ../cli/src/devices.c:169
msgid "CCMP"
msgstr "CCMP"
+#. 6
+#: ../cli/src/devices.c:171
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:158
+#: ../cli/src/devices.c:181
msgid "CTR-FREQ"
msgstr "CTR-FREK"
#. 1
-#: ../cli/src/devices.c:159
+#: ../cli/src/devices.c:182
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:160
+#: ../cli/src/devices.c:183
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:161
+#: ../cli/src/devices.c:184
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:162
+#: ../cli/src/devices.c:185
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:172 ../cli/src/devices.c:183
-msgid "ADDRESS"
-msgstr "ADRES"
-
-#. 1
-#: ../cli/src/devices.c:173 ../cli/src/devices.c:184
-msgid "PREFIX"
-msgstr "ÖNEK"
-
-#. 2
-#: ../cli/src/devices.c:174 ../cli/src/devices.c:185
-msgid "GATEWAY"
-msgstr "AĞ GEÇİDİ"
-
-#. 0
-#: ../cli/src/devices.c:194 ../cli/src/devices.c:203
-msgid "DNS"
-msgstr "DNS"
-
-#. 0
-#: ../cli/src/devices.c:212
+#: ../cli/src/devices.c:195
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:213
+#: ../cli/src/devices.c:196
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:214
+#: ../cli/src/devices.c:197
msgid "MODE"
msgstr "KÄ°P"
#. 3
-#: ../cli/src/devices.c:215
+#: ../cli/src/devices.c:198
msgid "FREQ"
msgstr "FREKANS"
#. 4
-#: ../cli/src/devices.c:216
+#: ../cli/src/devices.c:199
msgid "RATE"
msgstr "ORAN"
#. 5
#. 1
-#: ../cli/src/devices.c:217 ../cli/src/devices.c:235
+#: ../cli/src/devices.c:200 ../cli/src/devices.c:218
msgid "SIGNAL"
msgstr "SiNYAL"
#. 6
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:201
msgid "SECURITY"
msgstr "GÃœVENLÄ°K"
#. 7
-#: ../cli/src/devices.c:219
+#: ../cli/src/devices.c:202
msgid "WPA-FLAGS"
msgstr "WPA-BAYRAKLAR"
#. 8
-#: ../cli/src/devices.c:220
+#: ../cli/src/devices.c:203
msgid "RSN-FLAGS"
msgstr "RSN-BAYRAKLAR"
#. 10
#. 4
-#: ../cli/src/devices.c:222 ../cli/src/devices.c:238
+#: ../cli/src/devices.c:205 ../cli/src/devices.c:221
msgid "ACTIVE"
msgstr "ETKÄ°N"
-#: ../cli/src/devices.c:255
-#, c-format
+#. 0
+#: ../cli/src/devices.c:233
+msgid "SLAVES"
+msgstr ""
+
+#. 0
+#: ../cli/src/devices.c:242
+#| msgid "UUID"
+msgid "ID"
+msgstr "ID"
+
+#: ../cli/src/devices.c:258
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: nmcli dev { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
+#| "\n"
+#| " COMMAND := { status | list | disconnect | wifi }\n"
+#| "\n"
+#| " status\n"
+#| " list [iface <iface>]\n"
+#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+#| " wimax [list [iface <iface>] [nsp <name>]]\n"
+#| "\n"
msgid ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
" COMMAND := { status | list | disconnect | wifi | wimax }\n"
"\n"
@@ -753,6 +1201,9 @@ msgid ""
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
+"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
+" [--private] [--nowait] [--timeout <timeout>]\n"
" wimax [list [iface <iface>] [nsp <name>]]\n"
"\n"
msgstr ""
@@ -769,262 +1220,283 @@ msgstr ""
" wimax [list [iface <iface>] [nsp <isim>]]\n"
"\n"
-#: ../cli/src/devices.c:283
-msgid "unmanaged"
-msgstr "yönetilmeyen"
-
-#: ../cli/src/devices.c:285
-msgid "unavailable"
-msgstr "mevcut deÄŸil"
-
-#: ../cli/src/devices.c:287 ../cli/src/network-manager.c:108
-msgid "disconnected"
-msgstr "bağlantı kesildi"
-
-#: ../cli/src/devices.c:289
-msgid "connecting (prepare)"
-msgstr "bağlanıyor (hazırlama)"
-
-#: ../cli/src/devices.c:291
-msgid "connecting (configuring)"
-msgstr "bağlanıyor (yapılandırılıyor)"
-
-#: ../cli/src/devices.c:293
-msgid "connecting (need authentication)"
-msgstr "bağlanıyor (kimlik doğrulama gerekiyor)"
-
-#: ../cli/src/devices.c:295
-msgid "connecting (getting IP configuration)"
-msgstr "bağlanıyor (IP yapılandırması alınıyor)"
-
-#: ../cli/src/devices.c:297
-msgid "connecting (checking IP connectivity)"
-msgstr "bağlanılıyor (IP bağlanılırlığı denetleniyor)"
-
-#: ../cli/src/devices.c:299
-msgid "connecting (starting secondary connections)"
-msgstr "bağlanılıyor (ikincil bağlantılar başlatılıyor)"
-
-#: ../cli/src/devices.c:301 ../cli/src/network-manager.c:104
-msgid "connected"
-msgstr "bağlandı"
-
-#: ../cli/src/devices.c:305
-msgid "connection failed"
-msgstr "bağlantı başarısız"
-
-#: ../cli/src/devices.c:330 ../cli/src/devices.c:342 ../cli/src/devices.c:502
-#: ../cli/src/devices.c:546
-msgid "Unknown"
-msgstr "Bilinmeyen"
-
-#: ../cli/src/devices.c:375
+#: ../cli/src/devices.c:361
msgid "(none)"
msgstr "(hiçbiri)"
-#: ../cli/src/devices.c:400
-#, c-format
-msgid "%s: error converting IP4 address 0x%X"
-msgstr "%s: IPv4 adresi dönüştürülürken hata 0x%X"
-
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:417
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:472
+#: ../cli/src/devices.c:418
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:481
+#: ../cli/src/devices.c:427
msgid "Encrypted: "
msgstr "Åžifreli: "
-#: ../cli/src/devices.c:486
+#: ../cli/src/devices.c:432
msgid "WEP "
msgstr "WEP "
-#: ../cli/src/devices.c:488
+#: ../cli/src/devices.c:434
msgid "WPA "
msgstr "WPA "
-#: ../cli/src/devices.c:490
+#: ../cli/src/devices.c:436
msgid "WPA2 "
msgstr "WPA2 "
-#: ../cli/src/devices.c:493
+#: ../cli/src/devices.c:439
msgid "Enterprise "
msgstr "Kurumsal "
-#: ../cli/src/devices.c:502
+#: ../cli/src/devices.c:448
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:502
+#: ../cli/src/devices.c:449
msgid "Infrastructure"
msgstr "Altyapı"
-#: ../cli/src/devices.c:537
+#: ../cli/src/devices.c:485
msgid "Home"
msgstr "Ev"
-#: ../cli/src/devices.c:540
+#: ../cli/src/devices.c:488
msgid "Partner"
msgstr "Ortak"
-#: ../cli/src/devices.c:543
+#: ../cli/src/devices.c:491
msgid "Roaming"
msgstr "Dolaşım"
-#: ../cli/src/devices.c:614
+#: ../cli/src/devices.c:563
#, c-format
msgid "Error: 'dev list': %s"
msgstr "Hata: 'dev list':%s"
-#: ../cli/src/devices.c:616
+#: ../cli/src/devices.c:565
#, c-format
msgid "Error: 'dev list': %s; allowed fields: %s"
msgstr "Hata: 'dev list':%s; izin verilen alanlar :%s"
-#: ../cli/src/devices.c:625
+#: ../cli/src/devices.c:574
msgid "Device details"
msgstr "Aygıt ayrıntıları"
-#: ../cli/src/devices.c:663 ../cli/src/devices.c:664 ../cli/src/devices.c:1164
-#: ../cli/src/utils.c:343
+#: ../cli/src/devices.c:621 ../cli/src/devices.c:624 ../cli/src/devices.c:1151
+#: ../cli/src/utils.c:495
msgid "(unknown)"
msgstr "(bilinmeyen)"
-#: ../cli/src/devices.c:671
-#| msgid "connected"
+#: ../cli/src/devices.c:633
msgid "not connected"
msgstr "bağlı değil"
-#: ../cli/src/devices.c:696
+#: ../cli/src/devices.c:660
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:769
+#: ../cli/src/devices.c:736
msgid "on"
msgstr "açık"
-#: ../cli/src/devices.c:769
+#: ../cli/src/devices.c:736
msgid "off"
msgstr "kapalı"
-#: ../cli/src/devices.c:1016
+#: ../cli/src/devices.c:993
#, c-format
msgid "Error: 'dev status': %s"
msgstr "Hata: 'dev status':%s"
-#: ../cli/src/devices.c:1018
+#: ../cli/src/devices.c:995
#, c-format
msgid "Error: 'dev status': %s; allowed fields: %s"
msgstr "Hata: 'dev status': %s; izin verilen alanlar: %s"
-#: ../cli/src/devices.c:1041
+#: ../cli/src/devices.c:1018
msgid "Status of devices"
msgstr "Aygıtların durumu"
-#: ../cli/src/devices.c:1072
+#: ../cli/src/devices.c:1049
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "Hata: '%s' değişkeni bulunamadı."
-#: ../cli/src/devices.c:1113 ../cli/src/devices.c:1265
-#: ../cli/src/devices.c:1402 ../cli/src/devices.c:1621
+#: ../cli/src/devices.c:1090 ../cli/src/devices.c:1255
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:2043
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Hata: '%s' aygıtı bulunamadı."
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:1113
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Başarılı: '%s' aygıtının bağlantısı başarıyla kesildi."
-#: ../cli/src/devices.c:1161
+#: ../cli/src/devices.c:1148
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Hata: '%s' aygıtının (%s) bağlantısı kesilemedi: %s"
-#: ../cli/src/devices.c:1169
+#: ../cli/src/devices.c:1161
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "Aygıt durumu: %d (%s)\n"
+#| msgid "Success: Device '%s' successfully disconnected."
+msgid "Device '%s' has been disconnected.\n"
+msgstr "'%s' aygıtının bağlantısı başarıyla kesildi.\n"
-#: ../cli/src/devices.c:1234
+#: ../cli/src/devices.c:1224
#, c-format
msgid "Error: iface has to be specified."
msgstr "Hata: iface belirtilmeli."
-#: ../cli/src/devices.c:1360
+#: ../cli/src/devices.c:1354
#, c-format
msgid "Error: 'dev wifi': %s"
msgstr "Hata: 'dev wifi': %s"
-#: ../cli/src/devices.c:1362
+#: ../cli/src/devices.c:1356
#, c-format
msgid "Error: 'dev wifi': %s; allowed fields: %s"
msgstr "Hata: 'dev wifi': %s; izin verilen alanlar: %s"
-#: ../cli/src/devices.c:1385
+#: ../cli/src/devices.c:1379
msgid "WiFi scan list"
msgstr "WiFi tarama listesi"
-#: ../cli/src/devices.c:1422 ../cli/src/devices.c:1476
+#: ../cli/src/devices.c:1416 ../cli/src/devices.c:1470
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Hata: '%s' bssid'li erişim noktası bulunamadı."
-#: ../cli/src/devices.c:1439
+#: ../cli/src/devices.c:1433
#, c-format
msgid "Error: Device '%s' is not a WiFi device."
msgstr "Hata: '%s' aygıtı bir WiFi aygıtı değil."
-#: ../cli/src/devices.c:1503
+#: ../cli/src/devices.c:1501 ../cli/src/devices.c:1547
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr ""
+"'%s' UUID ile bğlantı oluşturuldu ve '%s' aygıtı üzerinde etkinleştirildi\n"
+
+#: ../cli/src/devices.c:1506
+#, c-format
+#| msgid "Error: Connection activation failed: %s."
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "Hata: Bağlantı etkinleştirilemedi: (%d) %s."
+
+#: ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr "Hata: Yeni bir bağlantı ekleme/etkinleştirme başarısız: (%d) %s"
+
+#: ../cli/src/devices.c:1539
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr ""
+"Hata: Yeni bir bağlantı oluşturma/etkinleştirme başarısız: Bilinmeyen hata"
+
+#: ../cli/src/devices.c:1683
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: SSID or BSSID are missing."
+msgstr "Hata: SSID veya BSSID bilgileri eksik."
+
+#: ../cli/src/devices.c:1706
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr "Hata: '%s' geçerli bir BSSID değildir."
+
+#: ../cli/src/devices.c:1730
+#, c-format
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgstr ""
+
+#: ../cli/src/devices.c:1770
+#, c-format
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr ""
+
+#: ../cli/src/devices.c:1776
+#, c-format
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr ""
+
+#: ../cli/src/devices.c:1805
+#, c-format
+#| msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Hata: '%s' aygıtı bir Wi-Fi aygıtı değil."
+
+#: ../cli/src/devices.c:1807
+#, c-format
+#| msgid "Error: No suitable device found."
+msgid "Error: No Wi-Fi device found."
+msgstr "Hata: Wi-Fi aygıtı bulunamadı."
+
+#: ../cli/src/devices.c:1825
+#, c-format
+#| msgid "Error: NSP with name '%s' not found."
+msgid "Error: No network with SSID '%s' found."
+msgstr "Hata: '%s' adlı SSID bulunamadı."
+
+#: ../cli/src/devices.c:1827
+#, c-format
+#| msgid "Error: Access point with nsp '%s' not found."
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "Hata: '%s' adlı BSSID ile erişim noktası bulunamadı."
+
+#: ../cli/src/devices.c:1925
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "Hata: 'dev wifi' komut '%s' tanımlı değil."
-#: ../cli/src/devices.c:1579
+#: ../cli/src/devices.c:2001
#, c-format
msgid "Error: 'dev wimax': %s"
msgstr "Hata: 'dev wimax': %s"
-#: ../cli/src/devices.c:1581
+#: ../cli/src/devices.c:2003
#, c-format
msgid "Error: 'dev wimax': %s; allowed fields: %s"
msgstr "Hara: 'dev wimax': %s; izin verilen alanlar: %s"
-#: ../cli/src/devices.c:1604
+#: ../cli/src/devices.c:2026
msgid "WiMAX NSP list"
msgstr "WiMAX NSP listesi"
-#: ../cli/src/devices.c:1641
+#: ../cli/src/devices.c:2063
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Hata: '%s' adlı NSP bulunamadı."
-#: ../cli/src/devices.c:1652
+#: ../cli/src/devices.c:2074
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Hata: '%s' aygıtı bir WiMAX aygıtı değil."
-#: ../cli/src/devices.c:1683
+#: ../cli/src/devices.c:2105
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Hata: '%s' nsp'li erişim noktası bulunamadı."
-#: ../cli/src/devices.c:1710
+#: ../cli/src/devices.c:2132
#, c-format
msgid "Error: 'dev wimax' command '%s' is not valid."
msgstr "Hata: 'dev wimax' komutu '%s' geçerli değil."
-#: ../cli/src/devices.c:1760
+#: ../cli/src/devices.c:2185
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Hata: 'dev' komut '%s' tanımlı değil."
@@ -1073,16 +1545,42 @@ msgstr "WIMAX-DONANIMI"
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:67
-#, c-format
+#: ../cli/src/network-manager.c:62
+#| msgid "VERSION"
+msgid "PERMISSION"
+msgstr "Ä°ZÄ°N"
+
+#. 0
+#: ../cli/src/network-manager.c:63
+msgid "VALUE"
+msgstr "DEÄžER"
+
+#: ../cli/src/network-manager.c:77
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: nmcli nm { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+#| "\n"
+#| " COMMAND := { status | enable | sleep | wifi | wwan }\n"
+#| "\n"
+#| " status\n"
+#| " enable [true|false]\n"
+#| " sleep [true|false]\n"
+#| " wifi [on|off]\n"
+#| " wwan [on|off]\n"
+#| " wimax [on|off]\n"
+#| "\n"
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
+"wimax }\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
"\n"
" status\n"
+" permissions\n"
" enable [true|false]\n"
" sleep [true|false]\n"
" wifi [on|off]\n"
@@ -1104,145 +1602,186 @@ msgstr ""
" wimax [on|off]\n"
"\n"
-#: ../cli/src/network-manager.c:96
+#: ../cli/src/network-manager.c:108
msgid "asleep"
msgstr "uykuda"
-#: ../cli/src/network-manager.c:98
+#: ../cli/src/network-manager.c:110
msgid "connecting"
msgstr "bağlanıyor"
-#: ../cli/src/network-manager.c:100
+#: ../cli/src/network-manager.c:112
msgid "connected (local only)"
msgstr "bağlandı (sadece yerel)"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:114
msgid "connected (site only)"
msgstr "bağlandı (sadece siteye)"
-#: ../cli/src/network-manager.c:106
+#: ../cli/src/network-manager.c:118
msgid "disconnecting"
msgstr "bağlantı kesiliyor"
-#: ../cli/src/network-manager.c:146
+#: ../cli/src/network-manager.c:158
#, c-format
msgid "Error: 'nm status': %s"
msgstr "Hata: 'nm durumu': %s"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:160
#, c-format
msgid "Error: 'nm status': %s; allowed fields: %s"
msgstr "Hata: 'nm status': %s; izin verilen alanlar: %s"
#. create NMClient
-#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
-#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
-#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
-#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
-#: ../cli/src/network-manager.c:421
+#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
+#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
+#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
+#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
+#: ../cli/src/network-manager.c:561
msgid "enabled"
msgstr "etkin"
-#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
-#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
-#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
-#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
-#: ../cli/src/network-manager.c:421
+#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
+#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
+#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
+#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
+#: ../cli/src/network-manager.c:561
msgid "disabled"
msgstr "etkin deÄŸil"
-#: ../cli/src/network-manager.c:181
+#: ../cli/src/network-manager.c:193
msgid "NetworkManager status"
msgstr "NetworkManager durumu"
#. Print header
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:196
msgid "running"
msgstr "çalışıyor"
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:196
msgid "not running"
msgstr "çalışmıyor"
-#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323
+#: ../cli/src/network-manager.c:271
+msgid "auth"
+msgstr ""
+
+#: ../cli/src/network-manager.c:301
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: 'nm permissions': %s"
+msgstr "Hata: 'nm izinleri': %s"
+
+#: ../cli/src/network-manager.c:303
+#, c-format
+#| msgid "Error: 'nm status': %s; allowed fields: %s"
+msgid "Error: 'nm permissions': %s; allowed fields: %s"
+msgstr "Hata: 'nm izinleri': %s; izin verilen alanlar: %s"
+
+#: ../cli/src/network-manager.c:324
+#| msgid "NetworkManager status"
+msgid "NetworkManager permissions"
+msgstr "NetworkManager izinleri"
+
+#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:475
#, c-format
msgid "Error: Couldn't connect to system bus: %s"
msgstr "Hata: Sistem veri yoluna bağlanamadı: %s"
-#: ../cli/src/network-manager.c:226
+#: ../cli/src/network-manager.c:361
#, c-format
msgid "Error: Couldn't create D-Bus object proxy."
msgstr "Hata: D-Bus nesnesi proxy oluşturamadı."
-#: ../cli/src/network-manager.c:232
+#: ../cli/src/network-manager.c:367
#, c-format
msgid "Error in sleep: %s"
msgstr "Uyku hatası: %s"
-#: ../cli/src/network-manager.c:276 ../cli/src/network-manager.c:331
-#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408
+#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
+#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
#, c-format
msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
msgstr ""
"Hata: '--fields' değeri olan '%s' burada geçerli değil; izin verilen "
"alanlar: %s"
-#: ../cli/src/network-manager.c:284
+#: ../cli/src/network-manager.c:424
msgid "Networking enabled"
msgstr "AÄŸ oluÅŸturma etkinleÅŸtirildi"
-#: ../cli/src/network-manager.c:300
+#: ../cli/src/network-manager.c:440
#, c-format
msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
msgstr ""
"Hata: geçersiz 'enable' parametresi: %s'; kullanım 'true' yada 'false'."
-#: ../cli/src/network-manager.c:310
+#: ../cli/src/network-manager.c:450
#, c-format
msgid "Error: Sleeping status is not exported by NetworkManager."
msgstr "Hata: Uyku durumu Ağ Yöneticisi ile verilemez."
-#: ../cli/src/network-manager.c:318
+#: ../cli/src/network-manager.c:458
#, c-format
msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
msgstr "Hata: geçersiz 'sleep' parametresi: %s'; kullanım 'true' yada 'false'."
-#: ../cli/src/network-manager.c:339
+#: ../cli/src/network-manager.c:479
msgid "WiFi enabled"
msgstr "WiFi etkin"
-#: ../cli/src/network-manager.c:355
+#: ../cli/src/network-manager.c:495
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "Hata: geçersiz 'wifi' parametresi: '%s'."
-#: ../cli/src/network-manager.c:377
+#: ../cli/src/network-manager.c:517
msgid "WWAN enabled"
msgstr "WWAN etkin"
-#: ../cli/src/network-manager.c:393
+#: ../cli/src/network-manager.c:533
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "Hata: geçersiz 'wwan parametresi: '%s'."
-#: ../cli/src/network-manager.c:416
+#: ../cli/src/network-manager.c:556
msgid "WiMAX enabled"
msgstr "WiMAX etkin"
-#: ../cli/src/network-manager.c:432
+#: ../cli/src/network-manager.c:572
#, c-format
msgid "Error: invalid 'wimax' parameter: '%s'."
msgstr "Hata: geçersiz 'wimax' değiştirgesi: '%s'."
-#: ../cli/src/network-manager.c:445
+#: ../cli/src/network-manager.c:588
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "Hata: '%s' nm komutu geçerli değil."
-#: ../cli/src/nmcli.c:64
-#, c-format
+#: ../cli/src/nmcli.c:76
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+#| "\n"
+#| "OPTIONS\n"
+#| " -t[erse] terse output\n"
+#| " -p[retty] pretty output\n"
+#| " -m[ode] tabular|multiline output mode\n"
+#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
+#| " -e[scape] yes|no escape columns separators in "
+#| "values\n"
+#| " -n[ocheck] don't check nmcli and "
+#| "NetworkManager versions\n"
+#| " -v[ersion] show program version\n"
+#| " -h[elp] print this help\n"
+#| "\n"
+#| "OBJECT\n"
+#| " nm NetworkManager status\n"
+#| " con NetworkManager connections\n"
+#| " dev devices managed by NetworkManager\n"
+#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1259,9 +1798,9 @@ msgid ""
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+" nm NetworkManager's status\n"
+" c[onnection] NetworkManager's connections\n"
+" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
"Kullanımı: %s [SEÇENEKLER] NESNE { KOMUT | help }\n"
@@ -1285,187 +1824,243 @@ msgstr ""
" dev NetworkManager tarafından yönetilen aygıtlar\n"
"\n"
-#: ../cli/src/nmcli.c:109
+#: ../cli/src/nmcli.c:124
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Hata: '%s' nesnesi bilinmiyor, 'nmcli help' komutunu deneyin."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:154
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Hata: '--terse' seçeneği ikinci zaman için belirlenmiş."
-#: ../cli/src/nmcli.c:144
+#: ../cli/src/nmcli.c:159
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Hata: '--terse' parametresi '--pretty' parametresi ile çakışıyor."
-#: ../cli/src/nmcli.c:152
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Hata: '--pretty' seçeneği ikinci zaman için belirlenmiş."
-#: ../cli/src/nmcli.c:157
+#: ../cli/src/nmcli.c:172
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Hata: '--pretty' parametresi '--terse' parametresi ile çakışıyor."
-#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
+#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Hata: '%s' seçeneği için eksik değişken."
-#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
+#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Hata: '%s', '%s' seçeneği için geçerli bir değişken değil."
-#: ../cli/src/nmcli.c:199
+#: ../cli/src/nmcli.c:214
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Hata: '%s' seçeneği için alanlar eksik."
-#: ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli aracı, sürüm %s\n"
-#: ../cli/src/nmcli.c:213
+#: ../cli/src/nmcli.c:228
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Hata: '%s' seçeneği bilinmiyor, 'nmcli-help' komutunu deneyin."
-#: ../cli/src/nmcli.c:232
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "%d sinyali yakalandı, kapatılıyor..."
-#: ../cli/src/nmcli.c:257
+#: ../cli/src/nmcli.c:272
msgid "Error: Could not create NMClient object."
msgstr "Hata: NMClient nesnesi oluşturulamadı."
-#: ../cli/src/nmcli.c:273
+#: ../cli/src/nmcli.c:288
msgid "Success"
msgstr "Başarılı"
-#: ../cli/src/settings.c:461
+#: ../cli/src/settings.c:604
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:463
+#: ../cli/src/settings.c:606
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit parola)"
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:609 ../cli/src/settings.c:737
#, c-format
msgid "%d (unknown)"
msgstr "%d (bilinmeyen)"
-#: ../cli/src/settings.c:492
+#: ../cli/src/settings.c:635
msgid "0 (unknown)"
msgstr "0 (bilinmeyen)"
-#: ../cli/src/settings.c:498
+#: ../cli/src/settings.c:641
msgid "any, "
msgstr "herhangi, "
-#: ../cli/src/settings.c:500
+#: ../cli/src/settings.c:643
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:502
+#: ../cli/src/settings.c:645
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:504
+#: ../cli/src/settings.c:647
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:506
+#: ../cli/src/settings.c:649
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:508
+#: ../cli/src/settings.c:651
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:510
+#: ../cli/src/settings.c:653
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:512
+#: ../cli/src/settings.c:655
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:514
+#: ../cli/src/settings.c:657
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:516
+#: ../cli/src/settings.c:659
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:518
+#: ../cli/src/settings.c:661
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:520
+#: ../cli/src/settings.c:663
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:522
+#: ../cli/src/settings.c:665
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:524
+#: ../cli/src/settings.c:667
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:646 ../cli/src/settings.c:841
-#: ../cli/src/settings.c:1545
+#: ../cli/src/settings.c:685
+msgid "0 (NONE)"
+msgstr "0 (YOK)"
+
+#: ../cli/src/settings.c:691
+msgid "REORDER_HEADERS, "
+msgstr ""
+
+#: ../cli/src/settings.c:693
+msgid "GVRP, "
+msgstr ""
+
+#: ../cli/src/settings.c:695
+msgid "LOOSE_BINDING, "
+msgstr ""
+
+#: ../cli/src/settings.c:731
+#, c-format
+#| msgid "disabled"
+msgid "%d (disabled)"
+msgstr "%d (devre dışı)"
+
+#: ../cli/src/settings.c:733
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (etkinleÅŸtirildi, tercih edilen genel IP)"
+
+#: ../cli/src/settings.c:735
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (etkinleştirildi, tercih edilen geçici IP)"
+
+#: ../cli/src/settings.c:747
+#| msgid "(none)"
+msgid "0 (none)"
+msgstr "0 (hiçbiri)"
+
+#: ../cli/src/settings.c:753
+msgid "agent-owned, "
+msgstr ""
+
+#: ../cli/src/settings.c:755
+#| msgid "not set"
+msgid "not saved, "
+msgstr "kaydedilmemiÅŸ,"
+
+#: ../cli/src/settings.c:757
+msgid "not required, "
+msgstr "gerekli deÄŸil,"
+
+#: ../cli/src/settings.c:1071 ../cli/src/settings.c:1241
+#: ../cli/src/settings.c:1282
msgid "auto"
msgstr "otomatik"
-#: ../cli/src/settings.c:835 ../cli/src/settings.c:838
-#: ../cli/src/settings.c:839 ../cli/src/utils.c:176
-msgid "not set"
-msgstr "ayarlanmamış"
+#: ../cli/src/utils.c:105
+#, fuzzy, c-format
+#| msgid "%s: error converting IP4 address 0x%X"
+msgid "Error converting IP4 address '0x%X' to text form"
+msgstr "%s: IPv4 adresi dönüştürülürken hata 0x%X"
+
+#: ../cli/src/utils.c:133
+#, fuzzy, c-format
+#| msgid "%s: error converting IP4 address 0x%X"
+msgid "Error converting IP6 address '%s' to text form"
+msgstr "%s: IPv4 adresi dönüştürülürken hata 0x%X"
-#: ../cli/src/utils.c:128
+#: ../cli/src/utils.c:250
#, c-format
msgid "field '%s' has to be alone"
msgstr "'%s' alanı boş olmalı"
-#: ../cli/src/utils.c:131
+#: ../cli/src/utils.c:253
#, c-format
msgid "invalid field '%s'"
msgstr "geçersiz alan '%s'"
-#: ../cli/src/utils.c:150
-#, c-format
+#: ../cli/src/utils.c:272
msgid "Option '--terse' requires specifying '--fields'"
msgstr "'--terse' parametresi özel '--fields' parametresine ihtiyaç duyar"
-#: ../cli/src/utils.c:154
+#: ../cli/src/utils.c:276
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"'--terse' seçeneği özel '--fields' seçeneği değerlerini gerektirir, '%s' "
"deÄŸil"
-#: ../cli/src/utils.c:334
+#: ../cli/src/utils.c:486
#, c-format
msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
msgstr "Hata: D-Bus nesnesi proxy için org.freedesktop.DBus oluşturulamadı"
-#: ../cli/src/utils.c:342
+#: ../cli/src/utils.c:494
#, c-format
msgid "Error: NameHasOwner request failed: %s"
msgstr "Hata: NameHasOwner isteği başarısız oldu: %s"
-#: ../cli/src/utils.c:387
+#: ../cli/src/utils.c:539
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1474,15 +2069,15 @@ msgstr ""
"Uyarı: nmcli (%s) ve NetworkManager (%s) sürümleri uyuşmuyor. Uyarıyı "
"bastırmak için --nocheck seçeneğini kullanın.\n"
-#: ../cli/src/utils.c:396
+#: ../cli/src/utils.c:548
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
"execution using --nocheck, but the results are unpredictable."
msgstr ""
"Hata: nmcli (%s) ve NetworkManager (%s) sürümleri uyuşmuyor. --nocheck "
-"seçeneğini "
-"kullanarak işlemi zorlayabilirsiniz, fakat sonuçlar öngörülemez.\n."
+"seçeneğini kullanarak işlemi zorlayabilirsiniz, fakat sonuçlar öngörülemez.\n"
+"."
#: ../libnm-util/crypto.c:133
#, c-format
@@ -1494,116 +2089,87 @@ msgstr "PEM anahtar dosyası '%s' son etiketine sahip değil."
msgid "Doesn't look like a PEM private key file."
msgstr "Bir PEM özel anahtar dosyasına benzemiyor."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "PEM dosyası verilerini depolamak için yeterli bellek yok."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Bozuk PEM dosyası: Proc-Type ilk etiket değildi."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Bozuk PEM dosyası: bilinmeyen Proc-Type etiketi '%s'."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Bozuk PEM dosyası: DEK-Info ikinci etiket değildi."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Bozuk PEM dosyası: DEK-Info etiketinde IV mevcut değil."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "Bozuk PEM dosyası: DEK-Info etiketi içerisinde IV'ün geçersiz biçimi."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Bozuk PEM dosyası: bilinmeyen özel anahtar şifresi '%s'."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "Özel anahtar çözülemedi."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Beklenen PKCS#8 başlama etiketi bulunamadı."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Beklenen PKCS#8 bitiş etiketi '%s' bulunamadı."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "Özel anahtar verisini kaydetmek için yeterli bellek yok."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 özel anahtarının şifresi çözülemedi."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Sertifika verisi depolamak için yetersiz bellek."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV, uzunluk olarak bayt cinsinden bir çift sayı olmalıdır."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "IV'ü depolamak için yeterli bellek yok."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV, onaltılık olmayan sayılar barınırıyor."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:404 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:259 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "'%s' özel anahtar şifresi bilinmiyor."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Özel anahtarı çözümlemek için yeterli bellek yok."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Çözülmüş özel anahtarı depolamak için yeterli bellek yok."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "Özel anahtar türü belirlenemedi."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM sertifikasının başlama etiketi '%s' yok."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM sertifikasının bitiş etiketi '%s' yok."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "Sertifika çözülemedi."
@@ -1622,100 +2188,90 @@ msgstr "MD5 cihazını başlatma başarısız oldu: %s / %s."
msgid "Invalid IV length (must be at least %zd)."
msgstr "Geçersiz IV uzunluğu (en az %zd olmalı)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Çözümlenmiş anahtar ara belleği için yeterli bellek yok."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Şifre çözümleme içeriğini başlatma başarısız oldu: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:175
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
-"Şifre çözümleme işlemi için simetrik anahtar oluşturma başarısız oldu: %s / %"
-"s."
+"Şifre çözümleme işlemi için simetrik anahtar oluşturma başarısız oldu: %s / "
+"%s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Şifre çözümleme için IV ayarlama hatası: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:193
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Özel anahtarın şifresini çözme başarısız oldu: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"Özel anahtarın şifresini çözme başarısız oldu: beklenmeyen dolgu uzunluğu."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Özel anahtarın şifresini çözme başarısız oldu."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Şifrelemek için bellek ayrılamadı."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:281
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Şifreleme anahtarı içerik sıfırlama hatası: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Şifreleme için simetrik anahtar ayarlama hatası: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Şifreleme için IV ayarlama hatası: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Veri şifreleme başarısız: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Sertifika verisi başlatma hatası: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Sertifika çözülemedi: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 şifre çözücü sıfırlanamadı: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 dosya şifresi çözülemedi: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 dosyası doğrulanamadı: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:448
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 şifre çözücü ilklendirilemedi: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 dosya şifresi çözülemedi: %s"
@@ -1735,165 +2291,474 @@ msgstr "MD5 içeriği sıfırlama başarısız: %d."
msgid "Invalid IV length (must be at least %d)."
msgstr "Geçersiz IV uzunluğu (en azından %d olmalı)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Şifre çözücü anahtar yuvası sıfırlama hatası."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Şifre çözümlemesi için simetrik anahtar ayarlama başarısız."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Şifre çözümlemesi için IV ayarlama başarısız."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Şifre çözüm içeriği sıfırlanması başarısız."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Özel anahtar şifre çözme hatası: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:235
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "Özel anahtar şifre çözme hatası: şifresi çözülen veri çok uzun."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:246
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Özel anahtar şifre çözümleme bitirme hatası: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Şifreleme anahtar yuvası sıfırlama hatası."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Şifreleme için simetrik anahtar ayarlama hatası."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Şifreleme için IV ayarlama hatası."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Şifreleme içeriği sıfırlama hatası."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Åžifrelenemedi: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Åžifrelemeden sonra beklenmeyen miktarda veri."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Sertifikanın kodu çözülemedi: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Şifre UCS2'ye dönüştürülemedi: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:494
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 kod çözücü sıfırlanamadı: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:503
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 dosyası kodu çözülemedi: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:512
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 dosyası doğrulanamadı: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "Rastgele veri üretilemedi."
-#: ../libnm-util/nm-utils.c:2003
+#: ../libnm-util/nm-setting-8021x.c:2119 ../libnm-util/nm-setting-8021x.c:2136
+#: ../libnm-util/nm-setting-8021x.c:2177 ../libnm-util/nm-setting-8021x.c:2194
+#: ../libnm-util/nm-setting-8021x.c:2246 ../libnm-util/nm-setting-8021x.c:2258
+#: ../libnm-util/nm-setting-8021x.c:2276 ../libnm-util/nm-setting-8021x.c:2288
+#: ../libnm-util/nm-setting-8021x.c:2312 ../libnm-util/nm-setting-8021x.c:2487
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bluetooth.c:171
+#: ../libnm-util/nm-setting-bond.c:368 ../libnm-util/nm-setting-bridge.c:268
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:674
+#: ../libnm-util/nm-setting-connection.c:690
+#: ../libnm-util/nm-setting-connection.c:743
+#: ../libnm-util/nm-setting-ip4-config.c:693
+#: ../libnm-util/nm-setting-ip4-config.c:703
+#: ../libnm-util/nm-setting-ip6-config.c:675
+#: ../libnm-util/nm-setting-ip6-config.c:685
+#: ../libnm-util/nm-setting-ip6-config.c:738
+#: ../libnm-util/nm-setting-olpc-mesh.c:128
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-vpn.c:388
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:792
+#: ../libnm-util/nm-setting-wireless.c:610
+#, fuzzy
+#| msgid "Error: %s argument is missing."
+msgid "property is missing"
+msgstr "Hata: %s bağımsız değişken eksik."
+
+#: ../libnm-util/nm-setting-8021x.c:2126 ../libnm-util/nm-setting-8021x.c:2143
+#: ../libnm-util/nm-setting-8021x.c:2184 ../libnm-util/nm-setting-8021x.c:2201
+#: ../libnm-util/nm-setting-8021x.c:2252 ../libnm-util/nm-setting-8021x.c:2264
+#: ../libnm-util/nm-setting-8021x.c:2282 ../libnm-util/nm-setting-8021x.c:2294
+#: ../libnm-util/nm-setting-8021x.c:2318 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:681
+#: ../libnm-util/nm-setting-connection.c:750
+#: ../libnm-util/nm-setting-gsm.c:280 ../libnm-util/nm-setting-gsm.c:337
+#: ../libnm-util/nm-setting-gsm.c:346
+#: ../libnm-util/nm-setting-ip4-config.c:754
+#: ../libnm-util/nm-setting-ip4-config.c:763
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:397 ../libnm-util/nm-setting-vpn.c:407
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:822
+#: ../libnm-util/nm-setting-wireless-security.c:830
+#: ../libnm-util/nm-setting-wireless-security.c:854
+msgid "property is empty"
+msgstr ""
+
+#: ../libnm-util/nm-setting-8021x.c:2154 ../libnm-util/nm-setting-8021x.c:2166
+#: ../libnm-util/nm-setting-8021x.c:2212 ../libnm-util/nm-setting-8021x.c:2224
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Şifreleme anahtarı yapmak için yeterli bellek yok."
+msgid "has to match '%s' property for PKCS#12"
+msgstr ""
+
+#: ../libnm-util/nm-setting-8021x.c:2462 ../libnm-util/nm-setting-8021x.c:2496
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:377
+#: ../libnm-util/nm-setting-infiniband.c:166
+#: ../libnm-util/nm-setting-infiniband.c:181
+#: ../libnm-util/nm-setting-ip4-config.c:745
+#: ../libnm-util/nm-setting-ip6-config.c:729
+#: ../libnm-util/nm-setting-olpc-mesh.c:156
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:518
+#: ../libnm-util/nm-setting-wired.c:527
+#: ../libnm-util/nm-setting-wireless-security.c:873
+#: ../libnm-util/nm-setting-wireless-security.c:882
+#: ../libnm-util/nm-setting-wireless-security.c:890
+#: ../libnm-util/nm-setting-wireless-security.c:898
+#: ../libnm-util/nm-setting-wireless-security.c:906
+#: ../libnm-util/nm-setting-wireless-security.c:915
+#: ../libnm-util/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-wireless-security.c:933
+#: ../libnm-util/nm-setting-wireless-security.c:969
+#: ../libnm-util/nm-setting-wireless-security.c:979
+#: ../libnm-util/nm-setting-wireless.c:670
+#: ../libnm-util/nm-setting-wireless.c:679
+#: ../libnm-util/nm-setting-wireless.c:688
+msgid "property is invalid"
+msgstr ""
-#: ../libnm-util/nm-utils.c:2113
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM dosya oluşturma için bellek ayrılamadı."
+#: ../libnm-util/nm-setting-8021x.c:2521 ../libnm-util/nm-setting-8021x.c:2531
+#: ../libnm-util/nm-setting-8021x.c:2541 ../libnm-util/nm-setting-8021x.c:2551
+#: ../libnm-util/nm-setting-8021x.c:2561 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:179
+#: ../libnm-util/nm-setting-infiniband.c:190
+#: ../libnm-util/nm-setting-vlan.c:554 ../libnm-util/nm-setting-wired.c:560
+#: ../libnm-util/nm-setting-wireless-security.c:801
+#, fuzzy, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid value for the property"
+msgstr "Hata: '%s', '%s' seçeneği için geçerli bir değişken değil."
-#: ../libnm-util/nm-utils.c:2125
+#: ../libnm-util/nm-setting-bluetooth.c:201
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "IV'ü PEM dosyasına yazmak için bellek ayrılamadı."
+msgid "requires '%s' or '%s' setting"
+msgstr ""
-#: ../libnm-util/nm-utils.c:2137
+#: ../libnm-util/nm-setting-bond.c:391
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "Şifrelenmiş anahtarı PEM dosyasına yazmak için bellek ayrılamadı."
+msgid "invalid option '%s' or its value '%s'"
+msgstr ""
-#: ../libnm-util/nm-utils.c:2156
+#: ../libnm-util/nm-setting-bond.c:410
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM dosyası verisi için bellek ayrılamadı."
+msgid "only one of '%s' and '%s' can be set"
+msgstr ""
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
-msgid "Allow control of network connections"
-msgstr "Ağ bağlantılarının denetimine izin ver"
+#: ../libnm-util/nm-setting-bond.c:421
+#, c-format
+msgid "setting '%s' is required"
+msgstr ""
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Korumalı bir WiFi ağı yoluyla bağlantı paylaşımı"
+#: ../libnm-util/nm-setting-bond.c:430
+#, fuzzy, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid value for '%s'"
+msgstr "Hata: '%s', '%s' seçeneği için geçerli bir değişken değil."
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
-msgid "Connection sharing via an open WiFi network"
-msgstr "Açık bir Wfi ağı yoluyla bağlantı paylaşımı"
+#: ../libnm-util/nm-setting-bond.c:443
+#, fuzzy, c-format
+#| msgid "device '%s' not compatible with connection '%s'"
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s aygıtı '%s' bağlantısı ile uyumlu değil"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
-msgid "Enable or disable WiFi devices"
-msgstr "WiFi aygıtlarını etkinleştir ya da etkisizleştir"
+#: ../libnm-util/nm-setting-bond.c:454
+#, fuzzy, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "Hata: '%s', '%s' seçeneği için geçerli bir değişken değil."
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
-msgid "Enable or disable WiMAX mobile broadband devices"
-msgstr "WiMAX mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir"
+#: ../libnm-util/nm-setting-bond.c:467 ../libnm-util/nm-setting-bond.c:476
+#: ../libnm-util/nm-setting-bond.c:496 ../libnm-util/nm-setting-bond.c:532
+#, c-format
+msgid "'%s' option requires setting '%s' option"
+msgstr ""
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
-msgid "Enable or disable mobile broadband devices"
-msgstr "Mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir"
+#: ../libnm-util/nm-setting-bond.c:508
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' seçeneği boş"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
-msgid "Enable or disable system networking"
-msgstr "Sistem ağını etkinleştir ya da etkisizleştir"
+#: ../libnm-util/nm-setting-bond.c:520
+#, fuzzy, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "Hata: '%s', '%s' seçeneği için geçerli bir değişken değil."
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
-msgid "Modify network connections for all users"
-msgstr "Tüm kullanıcılar için ağ bağlantılarını düzenle"
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:165
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr ""
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
-msgid "Modify persistent system hostname"
-msgstr "Direşken sistemin adını değiştir"
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr ""
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
-msgid "Modify personal network connections"
-msgstr "Kişisel ağ bağlantılarını düzenle"
+#: ../libnm-util/nm-setting-bridge.c:277
+#: ../libnm-util/nm-setting-connection.c:732
+#: ../libnm-util/nm-setting-vlan.c:486
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr ""
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr ""
+
+#: ../libnm-util/nm-setting-connection.c:697
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' geçerli bir UUID değil"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../libnm-util/nm-setting-connection.c:716
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr ""
+
+#: ../libnm-util/nm-setting-connection.c:760
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr ""
+
+#: ../libnm-util/nm-setting-connection.c:784
+msgid "IPv4 configuration is not allowed for bonding slave"
+msgstr ""
+
+#: ../libnm-util/nm-setting-connection.c:801
+msgid "IPv6 configuration is not allowed for bonding slave"
+msgstr ""
+
+#: ../libnm-util/nm-setting-gsm.c:293
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr ""
+
+#: ../libnm-util/nm-setting-gsm.c:325
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr ""
+
+#: ../libnm-util/nm-setting-gsm.c:360
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr ""
+
+#: ../libnm-util/nm-setting-gsm.c:371
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' bir numara deÄŸil"
+
+#: ../libnm-util/nm-setting-ip4-config.c:714
+#: ../libnm-util/nm-setting-ip4-config.c:724
+#: ../libnm-util/nm-setting-ip4-config.c:734
+#: ../libnm-util/nm-setting-ip6-config.c:697
+#: ../libnm-util/nm-setting-ip6-config.c:707
+#: ../libnm-util/nm-setting-ip6-config.c:717
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr ""
+
+#: ../libnm-util/nm-setting-ip4-config.c:777
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 adresi geçersiz"
+
+#: ../libnm-util/nm-setting-ip4-config.c:787
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 adresi geçersiz bir ön eke sahip"
+
+#: ../libnm-util/nm-setting-ip4-config.c:803
+#, c-format
+msgid "%d. route is invalid"
+msgstr ""
+
+#: ../libnm-util/nm-setting-ip4-config.c:813
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr ""
+
+#: ../libnm-util/nm-setting-ip6-config.c:696
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr ""
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:137
+#: ../libnm-util/nm-setting-wireless.c:619
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID uzunluğu aşıldı <1-32> byte"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:146
+#: ../libnm-util/nm-setting-wireless.c:659
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr ""
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr ""
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr ""
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr ""
+
+#: ../libnm-util/nm-setting-vlan.c:519
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr ""
+
+#: ../libnm-util/nm-setting-vlan.c:532
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr ""
+
+#: ../libnm-util/nm-setting-vlan.c:545
+msgid "flags are invalid"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wired.c:473
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' geçerli bir ethernet port numarası değildir"
+
+#: ../libnm-util/nm-setting-wired.c:483
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wired.c:493 ../libnm-util/nm-setting-wired.c:551
+msgid "is not a valid MAC address"
+msgstr "geçerli bir MAC adresi değildir"
+
+#: ../libnm-util/nm-setting-wired.c:506
+#: ../libnm-util/nm-setting-wireless.c:700
+#: ../libnm-util/nm-setting-wireless.c:714
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' geçerli bir MAC adresi değildir"
+
+#: ../libnm-util/nm-setting-wired.c:540
+#, fuzzy, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid '%s' or its value '%s'"
+msgstr "geçersiz alan '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:813
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wireless-security.c:842
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wireless-security.c:863
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wireless-security.c:960
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wireless-security.c:990
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wireless.c:628
+#, c-format
+#| msgid "Error: Device '%s' is not a WiFi device."
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' geçerli bir Wi-Fi kipi değil"
+
+#: ../libnm-util/nm-setting-wireless.c:638
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wireless.c:648
+#, c-format
+msgid "requires setting '%s' property"
+msgstr ""
+
+#: ../libnm-util/nm-setting-wireless.c:726
+#, c-format
+msgid "'%s' setting is required for the connection when the property is set"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
+msgid "Enable or disable system networking"
+msgstr "Sistem ağını etkinleştir ya da etkisizleştir"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"Sistem kuralları, sistem ağını etkinleştirmeyi ya da etkisizleştirmeyi "
+"engelliyor"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:3
msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
@@ -1901,85 +2766,260 @@ msgstr ""
"NetworkManager'i uykuda konumuna getir veya uyandır (yalnızca sistem güç "
"yönetimi tarafından kullanılmalıdır)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents control of network connections"
-msgstr "Sistem kuralları, ağ bağlantılarını denetlemeyi engelliyor"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"Sistem kuralları, NetworkManager'ı uykuda konumuna getirmeyi veya "
+"uyandırmayı engelliyor"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi aygıtlarını etkinleştir ya da etkisizleştir"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
msgstr ""
"Sistem kuralları, WiFi aygıtlarını etkinleştirmeyi ya da etkisizleştirmeyi "
"engelliyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
+msgid "Enable or disable mobile broadband devices"
+msgstr "Mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Sistem kuralları, mobil genişbant aygıtlarını etkinleştirmeyi ya da "
+"etkisizleÅŸtirmeyi engelliyor"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "WiMAX mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
"Sistem kuralları, WiMAX mobil genişbant aygıtlarını etkinleştirmeyi ya da "
"etkisizleÅŸtirmeyi engelliyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
-msgid "System policy prevents enabling or disabling mobile broadband devices"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
+msgid "Allow control of network connections"
+msgstr "Ağ bağlantılarının denetimine izin ver"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
+msgid "System policy prevents control of network connections"
+msgstr "Sistem kuralları, ağ bağlantılarını denetlemeyi engelliyor"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:13
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Korumalı bir WiFi ağı yoluyla bağlantı paylaşımı"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
+msgid "System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"Sistem kuralları, mobil genişbant aygıtlarını etkinleştirmeyi ya da "
-"etkisizleÅŸtirmeyi engelliyor"
+"Sistem kuralları, korumalı kablosuz ağ yoluyla bağlantı paylaşımını önlüyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
-msgid "System policy prevents enabling or disabling system networking"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
+msgid "Connection sharing via an open WiFi network"
+msgstr "Açık bir Wfi ağı yoluyla bağlantı paylaşımı"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
+msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"Sistem kuralları, sistem ağını etkinleştirmeyi ya da etkisizleştirmeyi "
-"engelliyor"
+"Sistem kuralları, korumasız kablosuz ağ yoluyla bağlantı paylaşımını önlüyor"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
+msgid "Modify personal network connections"
+msgstr "Kişisel ağ bağlantılarını düzenle"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
+msgid "System policy prevents modification of personal network settings"
+msgstr ""
+"Sistem kuralları, kişisel ağ ayarlarının değiştirilmesine izin vermiyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
+msgid "Modify network connections for all users"
+msgstr "Tüm kullanıcılar için ağ bağlantılarını düzenle"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
msgid "System policy prevents modification of network settings for all users"
msgstr ""
"Sistem kuralları, tüm kullanıcılar için ağ ayarlarının değiştirilmesine izin "
"vermiyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
-msgid "System policy prevents modification of personal network settings"
-msgstr ""
-"Sistem kuralları, kişisel ağ ayarlarının değiştirilmesine izin vermiyor"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
+msgid "Modify persistent system hostname"
+msgstr "Direşken sistemin adını değiştir"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
msgstr "Sistem kuralları, direşken sistemin adının değiştirilmesini önlüyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
-msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+#: ../src/main.c:130
+#, c-format
+#| msgid "Failed to encrypt: %d."
+msgid "Failed to set signal mask: %d"
+msgstr "Sinyal maskeleme başarısız: %d."
+
+#: ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
msgstr ""
-"Sistem kuralları, NetworkManager'ı uykuda konumuna getirmeyi veya "
-"uyandırmayı engelliyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
-msgid "System policy prevents sharing connections via a protected WiFi network"
+#: ../src/main.c:154
+#, c-format
+msgid "Opening %s failed: %s\n"
+msgstr "%s açılması başarısız: %s\n"
+
+#: ../src/main.c:160
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "%s yazılması başarısız: %s\n"
+
+#: ../src/main.c:165
+#, c-format
+msgid "Closing %s failed: %s\n"
+msgstr "%s kapatılması başarısız: %s\n"
+
+#: ../src/main.c:208
+#, c-format
+#| msgid "Error: NetworkManager is not running."
+msgid "NetworkManager is already running (pid %ld)\n"
+msgstr "Hata: Ağ Yöneticisi zaten çalışıyor (pid %ld)\n"
+
+#: ../src/main.c:328
+#| msgid "NetworkManager status"
+msgid "Print NetworkManager version and exit"
+msgstr "Ağ Yöneticisinin sürümünü yazdır ve çık"
+
+#: ../src/main.c:329
+msgid "Don't become a daemon"
msgstr ""
-"Sistem kuralları, korumalı kablosuz ağ yoluyla bağlantı paylaşımını önlüyor"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
-msgid "System policy prevents sharing connections via an open WiFi network"
+#: ../src/main.c:330
+msgid "Make all warnings fatal"
msgstr ""
-"Sistem kuralları, korumasız kablosuz ağ yoluyla bağlantı paylaşımını önlüyor"
-#: ../src/main.c:405
+#: ../src/main.c:331
+msgid "Specify the location of a PID file"
+msgstr "PID dosyasının konumunu belirtin"
+
+#: ../src/main.c:331
+msgid "filename"
+msgstr "dosya adı"
+
+#: ../src/main.c:332
+msgid "State file location"
+msgstr ""
+
+#: ../src/main.c:332
+msgid "/path/to/state.file"
+msgstr ""
+
+#: ../src/main.c:333
+msgid "Config file location"
+msgstr "Yapılandırma dosyasının konumu"
+
+#: ../src/main.c:333
+msgid "/path/to/config.file"
+msgstr "/yol/altyol/config.file"
+
+#: ../src/main.c:334
+msgid "List of plugins separated by ','"
+msgstr "Eklentilerin listesi (',' ile ayrılmış)"
+
+#: ../src/main.c:334
+msgid "plugin1,plugin2"
+msgstr "eklenti1,eklenti2"
+
+#. Translators: Do not translate the values in the square brackets
+#: ../src/main.c:336
+msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
+msgstr ""
+
+#. Translators: Do not translate the values in the square brackets
+#: ../src/main.c:339
+msgid ""
+"Log domains separated by ',': any combination of\n"
+" [NONE,HW,RFKILL,ETHER,WIFI,"
+"BT,MB,DHCP4,DHCP6,PPP,\n"
+" WIFI_SCAN,IP4,IP6,AUTOIP4,"
+"DNS,VPN,SHARING,SUPPLICANT,\n"
+" AGENTS,SETTINGS,SUSPEND,"
+"CORE,DEVICE,OLPC,WIMAX,\n"
+" INFINIBAND,FIREWALL,ADSL]"
+msgstr ""
+
+#: ../src/main.c:345
+msgid "An http(s) address for checking internet connectivity"
+msgstr "İnternet bağlanılabilirliğini kontrol etmek için bir http(s) adresi"
+
+#: ../src/main.c:346
+msgid "The interval between connectivity checks (in seconds)"
+msgstr ""
+
+#: ../src/main.c:347
+msgid "The expected start of the response"
+msgstr ""
+
+#: ../src/main.c:347
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/main.c:352
+#, c-format
+msgid "GModules are not supported on your platform!\n"
+msgstr ""
+
+#: ../src/main.c:371
+msgid ""
+"NetworkManager monitors all network connections and automatically\n"
+"chooses the best connection to use. It also allows the user to\n"
+"specify wireless access points which wireless cards in the computer\n"
+"should associate with."
+msgstr ""
+
+#: ../src/main.c:377
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Geçersiz seçenek. Lütfen geçerli seçeneklerin listesini görmek için --help "
"kullanın.\n"
-#: ../src/main.c:446
+#: ../src/main.c:387
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "Ağ Yöneticisini çalıştırmak için kök iznine sahip olmalısınız\n"
+
+#: ../src/main.c:420
+#, c-format
+#| msgid "Failed to set IV for encryption: %s / %s."
+msgid "Failed to read configuration: (%d) %s\n"
+msgstr "Yapılandırma okunamıyor: (%d) %s\n"
+
+#: ../src/main.c:431
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
"%s. Geçerli seçeneklerin bir listesini görmek için lütfen --help komutunu "
"kullanın.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../src/main.c:438
+#, c-format
+msgid "State file %s parsing failed: (%d) %s\n"
+msgstr ""
+
+#: ../src/main.c:455
+#, c-format
+msgid "Could not daemonize: %s [error %u]\n"
+msgstr ""
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
msgid "# Created by NetworkManager\n"
msgstr "# Ağ Yöneticisi Tarafından Oluşturuldu\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1988,19 +3028,19 @@ msgstr ""
"# %s'den birleÅŸmiÅŸ\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+#: ../src/dhcp-manager/nm-dhcp-manager.c:264
msgid "no usable DHCP client could be found."
msgstr "kullanılabilir bir DHCP istemcisi bulunamadı."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:273
msgid "'dhclient' could be found."
msgstr "'dhclient' bulunamadı."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+#: ../src/dhcp-manager/nm-dhcp-manager.c:283
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' bulunamadı."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../src/dhcp-manager/nm-dhcp-manager.c:291
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "desteklenmeyen DHCP istemcisi '%s'"
@@ -2013,111 +3053,236 @@ msgstr "NOT: libc çözücü 3'den fazla sunucu adını desteklemeyebilir."
msgid "The nameservers listed below may not be recognized."
msgstr "Aşağıda listelenen sunucu adları tanınmayabilir."
-#: ../src/logging/nm-logging.c:154
+#: ../src/logging/nm-logging.c:142
#, c-format
msgid "Unknown log level '%s'"
msgstr "Bilinmeyen kayıt seviyesi '%s'"
-#: ../src/logging/nm-logging.c:179
+#: ../src/logging/nm-logging.c:188
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Bilinmeyen kayıt etki alanı '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:354
+#: ../src/modem-manager/nm-modem-cdma.c:255
+#: ../src/modem-manager/nm-modem-broadband.c:512 ../src/nm-device-bt.c:331
#, c-format
msgid "CDMA connection %d"
msgstr "CDMA bağlantısı %d"
-#: ../src/modem-manager/nm-modem-gsm.c:521 ../src/nm-device-bt.c:350
+#: ../src/modem-manager/nm-modem-gsm.c:531
+#: ../src/modem-manager/nm-modem-broadband.c:490 ../src/nm-device-bt.c:327
#, c-format
msgid "GSM connection %d"
msgstr "GSM bağlantısı %d"
-#: ../src/nm-device-bt.c:325
+#: ../src/nm-device-bond.c:166
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Bond connection %d"
+msgstr "Bond bağlantısı %d"
+
+#: ../src/nm-device-adsl.c:196
+#, c-format
+#| msgid "GSM connection %d"
+msgid "ADSL connection %d"
+msgstr "ADSL bağlantısı %d"
+
+#: ../src/nm-device-bridge.c:164
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Bridge connection %d"
+msgstr "Köprü bağlantısı %d"
+
+#: ../src/nm-device-bt.c:302
#, c-format
msgid "PAN connection %d"
msgstr "PAN bağlantısı %d"
-#: ../src/nm-device-bt.c:358
+#: ../src/nm-device-bt.c:335
#, c-format
msgid "DUN connection %d"
msgstr "DUN bağlantısı %d"
-#: ../src/nm-device-ethernet.c:1425
+#: ../src/nm-device-ethernet.c:1294
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE bağlantısı %d"
-#: ../src/nm-device-ethernet.c:1425 ../src/settings/nm-settings-utils.c:50
+#: ../src/nm-device-ethernet.c:1294 ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Kablolu bağlantı %d"
-#: ../src/nm-device-infiniband.c:292
+#: ../src/nm-device-infiniband.c:270
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand bağlantısı %d"
-#: ../src/nm-device-olpc-mesh.c:323
+#: ../src/nm-device-olpc-mesh.c:304
#, c-format
msgid "Mesh %d"
msgstr "Mesh %d"
-#: ../src/nm-manager.c:683
+#: ../src/nm-device-vlan.c:310
+#, c-format
+#| msgid "PAN connection %d"
+msgid "VLAN connection %d"
+msgstr "VLAN bağlatısı %d"
+
+#: ../src/nm-manager.c:751
#, c-format
msgid "VPN connection %d"
msgstr "VPN bağlantısı %d"
-#: ../src/nm-netlink-monitor.c:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/nm-netlink-monitor.c:162 ../src/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:671
#, c-format
msgid "error processing netlink message: %s"
msgstr "netlink iletisinin iÅŸlenmesinde hata: %s"
-#: ../src/nm-netlink-monitor.c:251
+#: ../src/nm-netlink-monitor.c:265
msgid "error occurred while waiting for data on socket"
msgstr "yuva üzerinde veri beklenirken hata oluştu"
-#: ../src/nm-netlink-monitor.c:296
+#: ../src/nm-netlink-monitor.c:310
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "bağ durumunu izlemek için netlink'e bağlanılamadı: %s"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-netlink-monitor.c:321
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "kimlik gönderimi için ağ köprüsü etkinleştirilemiyor: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-netlink-monitor.c:364 ../src/nm-netlink-monitor.c:424
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr "adres durumunu izlemek için ağ-adresi paylaşımı yapılamadı: %s"
-#: ../src/nm-netlink-monitor.c:415
+#: ../src/nm-netlink-monitor.c:449
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
"adres durumunu izlemek için ağ-adresi adres belleği paylaşımı yapılamadı: %s"
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/nm-netlink-monitor.c:541
#, c-format
msgid "unable to join netlink group: %s"
msgstr "netlink kümesine girilemedi: %s"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
+#: ../src/nm-netlink-monitor.c:647 ../src/nm-netlink-monitor.c:660
#, c-format
msgid "error updating link cache: %s"
msgstr "bağ önbelleğinin güncellenmesinde hata: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:97
-#: ../src/settings/plugins/ifnet/connection_parser.c:51
+#: ../src/settings/plugins/ifcfg-rh/reader.c:110
msgid "System"
msgstr "Sistem"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3557
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3680
msgid "Bond"
msgstr "BaÄŸ"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3868
+msgid "Bridge"
+msgstr "Köprü"
+
+#: ../test/nm-online.c:111
+#, c-format
+#| msgid "connecting"
+msgid "\rConnecting"
+msgstr "\rBağlanıyor"
+
+#: ../test/nm-online.c:142
+msgid "Time to wait for a connection, in seconds (default is 30)"
+msgstr "Bağlantı için bekleme zamanı, saniye cinsinden (varsayılan 30)"
+
+#: ../test/nm-online.c:143
+#| msgid "Error: NetworkManager is not running."
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "Eğer Ağ Yöneticisi çalışmıyor ya da bağlanmıyorsa hemen çık"
+
+#: ../test/nm-online.c:144
+msgid "Don't print anything"
+msgstr "Herhangi bir şey yazdırma"
+
+#: ../test/nm-online.c:162
+msgid "Waits for a successful connection in NetworkManager."
+msgstr "Ağ Yöneticisi başarılı bir bağlantı için bekliyor"
+
+#: ../test/nm-online.c:168 ../test/nm-online.c:177
+#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"Geçersiz seçenek. Lütfen geçerli seçeneklerin listesini görmek için --help "
+"parametresini kullanın."
+
+#~ msgid "state: %s\n"
+#~ msgstr "durum: %s\n"
+
+#~ msgid "Connection activated\n"
+#~ msgstr "Bağlantı etkinleştirildi\n"
+
+#~ msgid "state: %s (%d)\n"
+#~ msgstr "durum: %s (%d)\n"
+
+#~ msgid "Active connection state: %s\n"
+#~ msgstr "Etkin bağlantı durumu: %s\n"
+
+#~ msgid "Active connection path: %s\n"
+#~ msgstr "Etkin bağlantı yolu: %s\n"
+
+#~ msgid "IP4-SETTINGS"
+#~ msgstr "IP4-AYARLAR"
+
+#~ msgid "IP6-SETTINGS"
+#~ msgstr "IP6-AYARLARL"
+
+#~ msgid "PREFIX"
+#~ msgstr "ÖNEK"
+
+#~ msgid "Device state: %d (%s)\n"
+#~ msgstr "Aygıt durumu: %d (%s)\n"
+
+#~ msgid "Not enough memory to store PEM file data."
+#~ msgstr "PEM dosyası verilerini depolamak için yeterli bellek yok."
+
+#~ msgid "Not enough memory to store private key data."
+#~ msgstr "Özel anahtar verisini kaydetmek için yeterli bellek yok."
+
+#~ msgid "Not enough memory to store certificate data."
+#~ msgstr "Sertifika verisi depolamak için yetersiz bellek."
+
+#~ msgid "Not enough memory to store the IV."
+#~ msgstr "IV'ü depolamak için yeterli bellek yok."
+
+#~ msgid "Not enough memory to decrypt private key."
+#~ msgstr "Özel anahtarı çözümlemek için yeterli bellek yok."
+
+#~ msgid "Not enough memory to store decrypted private key."
+#~ msgstr "Çözülmüş özel anahtarı depolamak için yeterli bellek yok."
+
+#~ msgid "Not enough memory for decrypted key buffer."
+#~ msgstr "Çözümlenmiş anahtar ara belleği için yeterli bellek yok."
+
+#~ msgid "Could not allocate memory for encrypting."
+#~ msgstr "Şifrelemek için bellek ayrılamadı."
+
+#~ msgid "Not enough memory to make encryption key."
+#~ msgstr "Şifreleme anahtarı yapmak için yeterli bellek yok."
+
+#~ msgid "Could not allocate memory for PEM file creation."
+#~ msgstr "PEM dosya oluşturma için bellek ayrılamadı."
+
+#~ msgid "Could not allocate memory for writing IV to PEM file."
+#~ msgstr "IV'ü PEM dosyasına yazmak için bellek ayrılamadı."
+
+#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
+#~ msgstr "Şifrelenmiş anahtarı PEM dosyasına yazmak için bellek ayrılamadı."
+
+#~ msgid "Could not allocate memory for PEM file data."
+#~ msgstr "PEM dosyası verisi için bellek ayrılamadı."
+
#~ msgid "Allow use of user-specific connections"
#~ msgstr "Kullanıcı tanımlı bağlantılara izin ver"
diff --git a/po/uk.po b/po/uk.po
index 6449cd988..eff91f3ab 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -1,14 +1,14 @@
# Copyright (C) 2011 Free Software Foundation, Inc.
# This file is distributed under the same license as the NetworkManager package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2013-01-30 15:25+0000\n"
-"PO-Revision-Date: 2013-02-10 12:46+0200\n"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-06-24 10:05+0000\n"
+"PO-Revision-Date: 2014-06-24 19:45+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
@@ -16,354 +16,498 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.5\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-#: ../cli/src/common.c:32 ../cli/src/common.c:44 ../cli/src/common.c:52
-#: ../cli/src/common.c:63 ../cli/src/connections.c:133
-#: ../cli/src/connections.c:167
+#: ../cli/src/common.c:38 ../cli/src/common.c:50 ../cli/src/common.c:58
+#: ../cli/src/common.c:69 ../cli/src/connections.c:193
+#: ../cli/src/connections.c:215
msgid "GROUP"
msgstr "ГРУПÐ"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../cli/src/common.c:39 ../cli/src/common.c:59
msgid "ADDRESS"
msgstr "ÐДРЕСÐ"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../cli/src/common.c:40 ../cli/src/common.c:60
msgid "ROUTE"
msgstr "ÐœÐРШРУТ"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../cli/src/common.c:41 ../cli/src/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../cli/src/common.c:42 ../cli/src/common.c:62
msgid "DOMAIN"
msgstr "ДОМЕÐ"
#. 4
-#: ../cli/src/common.c:37
+#: ../cli/src/common.c:43
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../cli/src/common.c:51 ../cli/src/common.c:70
msgid "OPTION"
msgstr "ПÐРÐМЕТР"
-#: ../cli/src/common.c:366
+#: ../cli/src/common.c:408 ../cli/src/settings.c:3020
+#: ../cli/src/settings.c:3039
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "некоректна адреÑа IPv4, «%s»"
+
+#: ../cli/src/common.c:416
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr ""
+"некоректний префікÑ, «%s»; можна викориÑтовувати префікÑи лише у діапазоні "
+"<1-32>"
+
+#: ../cli/src/common.c:423 ../cli/src/common.c:476
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "некоректний шлюз, «%s»"
+
+#: ../cli/src/common.c:461 ../cli/src/settings.c:3365
+#: ../cli/src/settings.c:3384
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "некоректна адреÑа IPv6, «%s»"
+
+#: ../cli/src/common.c:469
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr ""
+"некоректний префікÑ, «%s»; можна викориÑтовувати префікÑи лише у діапазоні "
+"<1-128>"
+
+#: ../cli/src/common.c:552
+#, c-format
+#| msgid "invalid next hop address '%s'"
+msgid "invalid route destination address '%s'"
+msgstr "некоректна адреÑа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ñƒ, «%s»"
+
+#: ../cli/src/common.c:559
+#, c-format
+#| msgid "invalid prefix '%s'; <1-32> allowed"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr ""
+"некоректний префікÑ, «%s»; можна викориÑтовувати префікÑи лише у діапазоні "
+"<1-%d>"
+
+#: ../cli/src/common.c:569
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "некоректна адреÑа наÑтупного переходу, «%s»"
+
+#: ../cli/src/common.c:574
+#, c-format
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"другим компонентом маршруту («%s») не Ñ” ні наÑтупна адреÑа переходу, ні "
+"метрика"
+
+#: ../cli/src/common.c:584
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "некоректна метрика, «%s»"
+
+#: ../cli/src/common.c:593
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"не можна додавати типовий маршрут (NetworkManager оброблÑÑ” його Ñамотужки)"
+
+#: ../cli/src/common.c:681
msgid "unmanaged"
msgstr "некерований"
-#: ../cli/src/common.c:368
+#: ../cli/src/common.c:683
msgid "unavailable"
msgstr "недоÑтупний"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../cli/src/common.c:685 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "роз'єднано"
-#: ../cli/src/common.c:372
+#: ../cli/src/common.c:687
msgid "connecting (prepare)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (приготуваннÑ)"
-#: ../cli/src/common.c:374
+#: ../cli/src/common.c:689
msgid "connecting (configuring)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (налаштовуваннÑ)"
-#: ../cli/src/common.c:376
+#: ../cli/src/common.c:691
msgid "connecting (need authentication)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (потрібне розпізнаваннÑ)"
-#: ../cli/src/common.c:378
+#: ../cli/src/common.c:693
msgid "connecting (getting IP configuration)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ IP)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:695
msgid "connecting (checking IP connectivity)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (перевірка можливоÑÑ‚Ñ– з’єднаннÑ)"
-#: ../cli/src/common.c:382
+#: ../cli/src/common.c:697
msgid "connecting (starting secondary connections)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ñ€ÑƒÐ³Ð¾Ñ€Ñдних з’єднань)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../cli/src/common.c:699 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "з'єднано"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:466
+#: ../cli/src/common.c:701 ../cli/src/connections.c:560
msgid "deactivating"
msgstr "деактиваціÑ"
-#: ../cli/src/common.c:388
+#: ../cli/src/common.c:703
msgid "connection failed"
msgstr "невдала Ñпроба з’єднаннÑ"
-#: ../cli/src/common.c:390 ../cli/src/connections.c:469
-#: ../cli/src/connections.c:492 ../cli/src/connections.c:1184
-#: ../cli/src/devices.c:650 ../cli/src/network-manager.c:123
-#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:188
-#: ../cli/src/network-manager.c:197 ../cli/src/network-manager.c:257
-#: ../cli/src/network-manager.c:273 ../cli/src/network-manager.c:431
-#: ../cli/src/network-manager.c:486 ../cli/src/network-manager.c:524
-#: ../cli/src/network-manager.c:563 ../cli/src/settings.c:661
-#: ../cli/src/settings.c:689 ../cli/src/settings.c:751 ../cli/src/utils.c:533
-#: ../src/main.c:434 ../src/main.c:453
+#: ../cli/src/common.c:705 ../cli/src/connections.c:565
+#: ../cli/src/connections.c:588 ../cli/src/connections.c:1656
+#: ../cli/src/devices.c:832 ../cli/src/devices.c:2270
+#: ../cli/src/network-manager.c:279 ../cli/src/network-manager.c:297
+#: ../cli/src/network-manager.c:360 ../cli/src/network-manager.c:363
+#: ../cli/src/network-manager.c:373 ../cli/src/network-manager.c:375
+#: ../cli/src/network-manager.c:432 ../cli/src/network-manager.c:448
+#: ../cli/src/settings.c:735 ../cli/src/settings.c:763
+#: ../cli/src/settings.c:825 ../cli/src/settings.c:1141
+#: ../cli/src/utils.c:1122 ../src/main.c:503 ../src/main.c:531
msgid "unknown"
msgstr "невідомо"
-#: ../cli/src/common.c:399
+#: ../cli/src/common.c:714
msgid "No reason given"
msgstr "Причину не вказано"
-#: ../cli/src/common.c:402
+#: ../cli/src/common.c:717 ../cli/src/connections.c:2452
+#, c-format
msgid "Unknown error"
msgstr "Ðевідома помилка"
-#: ../cli/src/common.c:405
+#: ../cli/src/common.c:720
msgid "Device is now managed"
msgstr "Тепер приÑтрій Ñ” керованим"
-#: ../cli/src/common.c:408
+#: ../cli/src/common.c:723
msgid "Device is now unmanaged"
msgstr "Тепер приÑтрій Ñ” некерованим"
-#: ../cli/src/common.c:411
+#: ../cli/src/common.c:726
msgid "The device could not be readied for configuration"
msgstr "ПриÑтрій не може бути приготовано до налаштовуваннÑ"
-#: ../cli/src/common.c:414
-#| msgid ""
-#| "IP configuration could not be reserved (no available address, timeout, "
-#| "etc)"
+#: ../cli/src/common.c:729
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ IP (немає доÑтупної адреÑи, чаÑу "
"Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð¾Ñ‰Ð¾)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:732
msgid "The IP configuration is no longer valid"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ IP вже не Ñ” коректними"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:735
msgid "Secrets were required, but not provided"
msgstr "Потрібні були реєÑтраційні дані, Ñких не було надано"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:738
msgid "802.1X supplicant disconnected"
msgstr "Допоміжну програму 802.1X від’єднано"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:741
msgid "802.1X supplicant configuration failed"
msgstr "Спроба налаштувати допоміжну програму 802.1X завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:744
msgid "802.1X supplicant failed"
msgstr "Помилка допоміжної програми 802.1X"
-#: ../cli/src/common.c:432
+#: ../cli/src/common.c:747
msgid "802.1X supplicant took too long to authenticate"
msgstr ""
"Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° допомогою допоміжної програми 802.1X триває занадто довго"
-#: ../cli/src/common.c:435
+#: ../cli/src/common.c:750
msgid "PPP service failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу PPP"
-#: ../cli/src/common.c:438
+#: ../cli/src/common.c:753
msgid "PPP service disconnected"
msgstr "Службу PPP від’єднано"
-#: ../cli/src/common.c:441
+#: ../cli/src/common.c:756
msgid "PPP failed"
msgstr "помилка PPP"
-#: ../cli/src/common.c:444
+#: ../cli/src/common.c:759
msgid "DHCP client failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити клієнтÑьку програму DHCP"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:762
msgid "DHCP client error"
msgstr "помилка клієнтÑької програми DHCP"
-#: ../cli/src/common.c:450
+#: ../cli/src/common.c:765
msgid "DHCP client failed"
msgstr "критична помилка клієнтÑької програми DHCP"
-#: ../cli/src/common.c:453
+#: ../cli/src/common.c:768
msgid "Shared connection service failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-#: ../cli/src/common.c:456
+#: ../cli/src/common.c:771
msgid "Shared connection service failed"
msgstr "Критична помилка Ñлужби Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-#: ../cli/src/common.c:459
+#: ../cli/src/common.c:774
msgid "AutoIP service failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу AutoIP"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:777
msgid "AutoIP service error"
msgstr "Помилка Ñлужби AutoIP"
-#: ../cli/src/common.c:465
+#: ../cli/src/common.c:780
msgid "AutoIP service failed"
msgstr "Помилка Ñлужби AutoIP"
-#: ../cli/src/common.c:468
+#: ../cli/src/common.c:783
msgid "The line is busy"
msgstr "Лінію зайнÑто"
-#: ../cli/src/common.c:471
+#: ../cli/src/common.c:786
msgid "No dial tone"
msgstr "Ðемає гудка"
-#: ../cli/src/common.c:474
+#: ../cli/src/common.c:789
msgid "No carrier could be established"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ ноÑій Ñигналу"
-#: ../cli/src/common.c:477
+#: ../cli/src/common.c:792
msgid "The dialing request timed out"
msgstr "Перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ щодо набору номера"
-#: ../cli/src/common.c:480
+#: ../cli/src/common.c:795
msgid "The dialing attempt failed"
msgstr "Спроба Ð½Ð°Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾"
-#: ../cli/src/common.c:483
+#: ../cli/src/common.c:798
msgid "Modem initialization failed"
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ модем"
-#: ../cli/src/common.c:486
+#: ../cli/src/common.c:801
msgid "Failed to select the specified APN"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð±Ñ€Ð°Ñ‚Ð¸ вказаний APN"
-#: ../cli/src/common.c:489
+#: ../cli/src/common.c:804
msgid "Not searching for networks"
msgstr "Пошук мереж не виконуєтьÑÑ"
-#: ../cli/src/common.c:492
+#: ../cli/src/common.c:807
msgid "Network registration denied"
msgstr "РеєÑтрацію у мережі заборонено"
-#: ../cli/src/common.c:495
+#: ../cli/src/common.c:810
msgid "Network registration timed out"
msgstr "Перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° реєÑтрацію у мережі"
-#: ../cli/src/common.c:498
+#: ../cli/src/common.c:813
msgid "Failed to register with the requested network"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”ÑтруватиÑÑ Ñƒ потрібній мережі"
-#: ../cli/src/common.c:501
+#: ../cli/src/common.c:816
msgid "PIN check failed"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби перевірити PIN-код"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:819
msgid "Necessary firmware for the device may be missing"
msgstr "Можливо, не виÑтачає потрібної Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ приÑтрою мікропрограми"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:822
msgid "The device was removed"
msgstr "ПриÑтрій вилучено"
-#: ../cli/src/common.c:510
+#: ../cli/src/common.c:825
msgid "NetworkManager went to sleep"
msgstr "NetworkManager переведено у режим Ñну"
-#: ../cli/src/common.c:513
+#: ../cli/src/common.c:828
msgid "The device's active connection disappeared"
msgstr "Ðктивне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· приÑтроєм зникло"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:831
msgid "Device disconnected by user or client"
msgstr "ПриÑтрій роз’єднано з боку кориÑтувача або клієнтÑької програми"
-#: ../cli/src/common.c:519
+#: ../cli/src/common.c:834
msgid "Carrier/link changed"
msgstr "Змінено ноÑій або зв’Ñзок"
-#: ../cli/src/common.c:522
+#: ../cli/src/common.c:837
msgid "The device's existing connection was assumed"
msgstr ""
"Зроблено Ð¿Ñ€Ð¸Ð¿ÑƒÑ‰ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ вÑтановленого Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· приÑтроєм"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:840
msgid "The supplicant is now available"
msgstr "Відкрито доÑтуп до допоміжної програми"
-#: ../cli/src/common.c:528
+#: ../cli/src/common.c:843
msgid "The modem could not be found"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ñвити модем"
-#: ../cli/src/common.c:531
+#: ../cli/src/common.c:846
msgid "The Bluetooth connection failed or timed out"
msgstr ""
"Помилка Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Bluetooth або Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ "
"даних з’єднаннÑм"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:849
msgid "GSM Modem's SIM card not inserted"
msgstr "До модема GSM не вÑтавлено SIM-картки"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:852
msgid "GSM Modem's SIM PIN required"
msgstr "Слід вказати PIN-код SIM-картки у модемі GSM"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:855
msgid "GSM Modem's SIM PUK required"
msgstr "Слід вказати код Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ (PUK) SIM-картки у модемі GSM"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:858
msgid "GSM Modem's SIM wrong"
msgstr "Помилкова SIM-картка у модемі GSM"
-#: ../cli/src/common.c:546
+#: ../cli/src/common.c:861
msgid "InfiniBand device does not support connected mode"
msgstr "У приÑтрої InfiniBand не передбачено режиму з’єднаннÑ"
-#: ../cli/src/common.c:549
+#: ../cli/src/common.c:864
msgid "A dependency of the connection failed"
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати залежніÑÑ‚ÑŒ з’єднаннÑ"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:867
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "Проблема з міÑтком Ethernet на оÑнові ADSL відповідно до RFC 2684"
-#: ../cli/src/common.c:555
+#: ../cli/src/common.c:870
msgid "ModemManager is unavailable"
msgstr "ModemManager недоÑтупнийІ"
-#: ../cli/src/common.c:558
-#| msgid "The modem could not be found"
+#: ../cli/src/common.c:873
msgid "The Wi-Fi network could not be found"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ñвити мережу Wi-Fi"
-#: ../cli/src/common.c:561
-#| msgid "A dependency of the connection failed"
+#: ../cli/src/common.c:876
msgid "A secondary connection of the base connection failed"
msgstr "Ðе вдалоÑÑ Ð²Ñтановити вторинне щодо оÑновного з’єднаннÑ"
-#: ../cli/src/common.c:564 ../cli/src/devices.c:296 ../cli/src/devices.c:314
-#: ../cli/src/devices.c:436 ../cli/src/devices.c:480
+#: ../cli/src/common.c:879
+msgid "DCB or FCoE setup failed"
+msgstr "Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ DCB або FCoE"
+
+#: ../cli/src/common.c:882
+msgid "teamd control failed"
+msgstr "помилка ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ teamd"
+
+#: ../cli/src/common.c:885
+#| msgid "ModemManager is unavailable"
+msgid "Modem failed or no longer available"
+msgstr "Помилка модема або модем недоÑтупний"
+
+#: ../cli/src/common.c:888
+#| msgid "ModemManager is unavailable"
+msgid "Modem now ready and available"
+msgstr "Модем готовий до роботи Ñ– доÑтупний"
+
+#: ../cli/src/common.c:891
+msgid "SIM PIN was incorrect"
+msgstr "PIN-код SIM-картки є некоректним"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../cli/src/common.c:895 ../cli/src/devices.c:639
+#: ../libnm-glib/nm-device.c:1814
msgid "Unknown"
msgstr "Ðевідомо"
+#: ../cli/src/common.c:937
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "некоректне Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ–, «%s»"
+
+#: ../cli/src/common.c:944 ../cli/src/common.c:950
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr ""
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– «%s» Ñ” некоректним (можливий діапазон значень: <0-"
+"%ld>)"
+
+#: ../cli/src/common.c:1017
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "«%s» не Ñ” коректним налаштуваннÑм команди або назвою файла."
+
+#. define some prompts for connection editor
+#: ../cli/src/connections.c:64
+msgid "Setting name? "
+msgstr "Ðазва параметра? "
+
+#: ../cli/src/connections.c:65
+msgid "Property name? "
+msgstr "Ðазва влаÑтивоÑÑ‚Ñ–? "
+
+#: ../cli/src/connections.c:66
+msgid "Enter connection type: "
+msgstr "Вкажіть тип з’єднаннÑ: "
+
+#. define some other prompts
+#: ../cli/src/connections.c:69
+msgid "Connection type: "
+msgstr "Тип з’єднаннÑ: "
+
+#: ../cli/src/connections.c:70
+msgid "VPN type: "
+msgstr "Тип VPN: "
+
+#: ../cli/src/connections.c:71
+msgid "Bond master: "
+msgstr "ОÑнова прив’Ñзки: "
+
+#: ../cli/src/connections.c:72
+msgid "Team master: "
+msgstr "ОÑнова команди: "
+
+#: ../cli/src/connections.c:73
+msgid "Bridge master: "
+msgstr "ОÑнова міÑтка: "
+
+#: ../cli/src/connections.c:74
+msgid "Connection (name, UUID, or path): "
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (назва, UUID або шлÑÑ…): "
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:134
-#: ../cli/src/devices.c:108 ../cli/src/devices.c:132 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152 ../cli/src/devices.c:166 ../cli/src/devices.c:180
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:218 ../cli/src/devices.c:227
+#: ../cli/src/connections.c:82 ../cli/src/connections.c:194
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:117 ../cli/src/devices.c:127
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:146 ../cli/src/devices.c:161
+#: ../cli/src/devices.c:174 ../cli/src/devices.c:200 ../cli/src/devices.c:215
+#: ../cli/src/devices.c:224
msgid "NAME"
msgstr "ÐÐЗВÐ"
#. 0
#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../cli/src/connections.c:83 ../cli/src/connections.c:195
msgid "UUID"
msgstr "UUID"
@@ -371,1016 +515,3283 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:168
-#: ../cli/src/devices.c:72 ../cli/src/devices.c:110 ../cli/src/devices.c:205
+#: ../cli/src/connections.c:84 ../cli/src/connections.c:216
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:91 ../cli/src/devices.c:203
msgid "TYPE"
msgstr "ТИП"
#. 2
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:85
msgid "TIMESTAMP"
msgstr "ЧÐСОВРМІТКÐ"
#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:86
msgid "TIMESTAMP-REAL"
msgstr "ДІЙСÐРЧÐСОВРМІТКÐ"
#. 4
-#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:122
+#. 14
+#: ../cli/src/connections.c:87 ../cli/src/devices.c:104
msgid "AUTOCONNECT"
msgstr "ÐВТОЗ’ЄДÐÐÐÐЯ"
#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:88
msgid "READONLY"
msgstr "ЛИШЕ ЧИТÐÐÐЯ"
#. 6
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:67 ../cli/src/connections.c:142
-#: ../cli/src/devices.c:74 ../cli/src/devices.c:192 ../cli/src/devices.c:208
+#: ../cli/src/connections.c:89 ../cli/src/connections.c:202
+#: ../cli/src/devices.c:77 ../cli/src/devices.c:190 ../cli/src/devices.c:206
msgid "DBUS-PATH"
-msgstr "DBUS-PATH"
+msgstr "ШЛЯХ-DBUS"
-#. 2
-#: ../cli/src/connections.c:136
-msgid "DEVICES"
-msgstr "ПРИСТРОЇ"
+#. 7
+#. 13
+#. 4
+#: ../cli/src/connections.c:90 ../cli/src/devices.c:188
+#: ../cli/src/devices.c:205
+msgid "ACTIVE"
+msgstr "ÐКТИВÐИЙ"
+
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../cli/src/connections.c:91 ../cli/src/devices.c:74 ../cli/src/devices.c:90
+#: ../cli/src/devices.c:187 ../cli/src/devices.c:204
+msgid "DEVICE"
+msgstr "ПРИСТРІЙ"
+#. 9
#. 3
#. 1
-#. 8
+#. 9
#. 1
-#: ../cli/src/connections.c:137 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:117 ../cli/src/network-manager.c:39
+#: ../cli/src/connections.c:92 ../cli/src/connections.c:197
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:99
+#: ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "СТÐÐ"
+#. 10
+#: ../cli/src/connections.c:93
+msgid "ACTIVE-PATH"
+msgstr "ÐКТИВÐИЙ-ШЛЯХ"
+
+#. 2
+#: ../cli/src/connections.c:196
+msgid "DEVICES"
+msgstr "ПРИСТРОЇ"
+
#. 4
-#: ../cli/src/connections.c:138
+#: ../cli/src/connections.c:198
msgid "DEFAULT"
msgstr "ТИПОВЕ"
#. 5
-#: ../cli/src/connections.c:139
+#: ../cli/src/connections.c:199
msgid "DEFAULT6"
msgstr "ТИПОВИЙ6"
#. 6
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:200
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
-#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:239
+#: ../cli/src/connections.c:3505 ../tui/nm-editor-utils.c:243
+#: ../tui/nmt-connect-connection-list.c:405
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:143
+#. 5
+#. 18
+#: ../cli/src/connections.c:203 ../cli/src/devices.c:80
+#: ../cli/src/devices.c:108
msgid "CON-PATH"
msgstr "ШЛЯХ-ДО-CON"
#. 10
-#: ../cli/src/connections.c:144
+#: ../cli/src/connections.c:204
msgid "ZONE"
msgstr "ЗОÐÐ"
#. 11
-#: ../cli/src/connections.c:145
+#: ../cli/src/connections.c:205
msgid "MASTER-PATH"
msgstr "ОСÐОВÐИЙ-ШЛЯХ"
-#: ../cli/src/connections.c:153 ../cli/src/devices.c:83
-msgid "GENERAL"
-msgstr "ЗÐГÐЛЬÐІ"
-
-#. 0
-#: ../cli/src/connections.c:154
-msgid "IP"
-msgstr "IP"
-
#. 1
-#: ../cli/src/connections.c:169
+#: ../cli/src/connections.c:217
msgid "USERNAME"
msgstr "КОРИСТУВÐЧ"
#. 2
-#: ../cli/src/connections.c:170
+#: ../cli/src/connections.c:218
msgid "GATEWAY"
msgstr "ШЛЮЗ"
#. 3
-#: ../cli/src/connections.c:171
+#: ../cli/src/connections.c:219
msgid "BANNER"
msgstr "БÐÐЕР"
#. 4
-#: ../cli/src/connections.c:172
+#: ../cli/src/connections.c:220
msgid "VPN-STATE"
msgstr "СТÐÐ-VPN"
#. 5
-#: ../cli/src/connections.c:173
+#: ../cli/src/connections.c:221
msgid "CFG"
msgstr "КОÐФ"
-#: ../cli/src/connections.c:195
+#: ../cli/src/connections.c:234 ../cli/src/devices.c:239
+msgid "GENERAL"
+msgstr "ЗÐГÐЛЬÐІ"
+
+#. 0
+#. 6
+#: ../cli/src/connections.c:235 ../cli/src/devices.c:246
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../cli/src/connections.c:236 ../cli/src/devices.c:247
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../cli/src/connections.c:237 ../cli/src/devices.c:248
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../cli/src/connections.c:238 ../cli/src/devices.c:249
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../cli/src/connections.c:280
#, c-format
-#| msgid ""
-#| "Usage: nmcli con { COMMAND | help }\n"
-#| " COMMAND := { list | status | up | down | delete }\n"
-#| "\n"
-#| " list [id <id> | uuid <id>]\n"
-#| " status [id <id> | uuid <id> | path <path>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-#| "nowait] [--timeout <timeout>]\n"
-#| " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
-#| " delete id <id> | uuid <id>\n"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <path>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
-"nowait] [--timeout <timeout>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
+"load }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> "
+"<value>)+\n"
+"\n"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
+"\n"
+" delete [id | uuid | path] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
+"КориÑтуваннÑ: nmcli connection { КОМÐÐДР| help }\n"
+"\n"
+" КОМÐÐДР:= { show | up | down | add | modify | edit | | delete }\n"
+"\n"
+" show [--active] [[id | uuid | path | apath ] <ідентифікатор>] ...\n"
+"\n"
+" up [[id | uuid | path] <ідентифікатор>] [iface <інтерфейÑ>] [ap "
+"<ідентифікатор BSS>] [nsp <назва>] [--nowait] [--timeout <очікуваннÑ>]\n"
+"\n"
+" up [[id | uuid | path] <ідентифікатор>] [iface <інтерфейÑ>] [ap "
+"<ідентифікатор BSS>] [--nowait] [--timeout <очікуваннÑ>]\n"
+"\n"
+" down [id | uuid | path | apath] <ідентифікатор>\n"
+"\n"
+" add ЗÐГÐЛЬÐІ_ПÐРÐМЕТРИ СПЕЦИФІЧÐІ_ДЛЯ_ТИПУ_ПÐРÐМЕТРИ ПÐРÐМЕТРИ_IP\n"
+"\n"
+" modify [--temporary] [id | uuid | path] <ідентифікатор> ([+|-]<параметр>."
+"<влаÑтивіÑÑ‚ÑŒ> <значеннÑ>)+\n"
+"\n"
+" edit [ id | uuid | path ] <ідентифікатор>\n"
+" edit [type <новий_тип_з’єднаннÑ>] [con-name <нова_назва_з’єднаннÑ>]\n"
+"\n"
+" delete [ id | uuid | path ] <ідентифікатор>\n"
+"\n"
+" reload\n"
+"\n"
+" load <назва файла> [ <назва файла>... ]\n"
+"\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:442
+#: ../cli/src/connections.c:302
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Помилка: «con list»: %s"
+msgid ""
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"List in-memory and on-disk connection profiles, some of which may also be\n"
+"active if a device is using that connection profile. Without a parameter, "
+"all\n"
+"profiles are listed. When --active option is specified, only the active\n"
+"profiles are shown.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Show details for specified connections. By default, both static "
+"configuration\n"
+"and active connection data are displayed. It is possible to filter the "
+"output\n"
+"using global '--fields' option. Refer to the manual page for more "
+"information.\n"
+"When --active option is specified, only the active profiles are taken into\n"
+"account.\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection show { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [--active]\n"
+"\n"
+"Показати ÑпиÑок профілів у пам’ÑÑ‚Ñ– та на диÑку. ДеÑкі з профілів можуть\n"
+"також бути активними, Ñкщо профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтовуєтьÑÑ Ð¿ÐµÐ²Ð½Ð¸Ð¼\n"
+"приÑтроєм. Без параметрів команда покаже ÑпиÑок уÑÑ–Ñ… профілів. Якщо\n"
+"вказано параметр --active, буде показано лише активі профілі.\n"
+"\n"
+"ÐРГУМЕÐТИ := [--active] [id | uuid | path | apath] <ідентифікатор> ...\n"
+"\n"
+"Показати параметри вказаних з’єднань. Типово, буде показано Ñк дані "
+"Ñтатичних\n"
+"налаштувань, так Ñ– дані активних з’єднань. Можливе Ñ„Ñ–Ð»ÑŒÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð²\n"
+"за допомогою загального параметра «--fields». Докладніший Ð¾Ð¿Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð° знайти "
+"на\n"
+"Ñторінці підручника (man).\n"
+"Якщо вказано параметр «--active», братимутьÑÑ Ð´Ð¾ уваги лише активні "
+"профілі.\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
+#: ../cli/src/connections.c:324
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Помилка: «con list»: %s; дозволені полÑ: %s"
-
-#: ../cli/src/connections.c:266
-msgid "Connection details"
-msgstr "Параметри з’єднаннÑ"
-
-#: ../cli/src/connections.c:317
-msgid "never"
-msgstr "ніколи"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activate a connection on a device. The profile to activate is identified by "
+"its\n"
+"name, UUID or D-Bus path.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activate a device with a connection. The connection profile is selected\n"
+"automatically by NetworkManager.\n"
+"\n"
+"ifname - specifies the device to active the connection on\n"
+"ap - specifies AP to connect to (only valid for Wi-Fi)\n"
+"nsp - specifies NSP to connect to (only valid for WiMAX)\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection up { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [id | uuid | path] <ідентифікатор> [ifname <назва інтерфейÑу>] "
+"[ap <BSSID>] [nsp <назва>]\n"
+"\n"
+"Ðктивувати Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ð° приÑтрої. Профіль Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— можна визначити за "
+"назвою,\n"
+"UUID або шлÑхом D-Bus.\n"
+"\n"
+"ÐРГУМЕÐТИ := ifname <назва інтерфейÑу> [ap <BSSID>] [nsp <назва>]\n"
+"\n"
+"Ðктивувати приÑтрій зі з’єднаннÑм. Профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ”Ñ‚ÑŒÑÑ "
+"NetworkManager\n"
+"автоматично.\n"
+"\n"
+"ifname - визначає приÑтрій, на Ñкому Ñлід активувати з’єднаннÑ\n"
+"ap - визначає точку доÑтупу Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (актуальне лише Ð´Ð»Ñ Wi-Fi)\n"
+"nsp - визначає Ñлужбу доÑтупу Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (актуальне лише Ð´Ð»Ñ WiMAX)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:547 ../cli/src/connections.c:548
-#: ../cli/src/connections.c:550 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:267
-#: ../cli/src/settings.c:866 ../cli/src/settings.c:941
-#: ../cli/src/settings.c:1076 ../cli/src/settings.c:1166
-#: ../cli/src/settings.c:1376 ../cli/src/settings.c:1377
-#: ../cli/src/settings.c:1379 ../cli/src/settings.c:1381
-#: ../cli/src/settings.c:1382 ../cli/src/settings.c:1513
-#: ../cli/src/settings.c:1514 ../cli/src/settings.c:1515
-#: ../cli/src/settings.c:1516 ../cli/src/settings.c:1594
-#: ../cli/src/settings.c:1595 ../cli/src/settings.c:1596
-#: ../cli/src/settings.c:1597 ../cli/src/settings.c:1598
-#: ../cli/src/settings.c:1599 ../cli/src/settings.c:1600
-#: ../cli/src/settings.c:1601 ../cli/src/settings.c:1602
-#: ../cli/src/settings.c:1603 ../cli/src/settings.c:1604
-#: ../cli/src/settings.c:1605 ../cli/src/settings.c:1606
-#: ../cli/src/settings.c:1688 ../cli/src/settings.c:2044
-#: ../cli/src/settings.c:2081
-msgid "yes"
-msgstr "так"
+#: ../cli/src/connections.c:345
+#, c-format
+msgid ""
+"Usage: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Deactivate a connection from a device (without preventing the device from\n"
+"further auto-activation). The profile to deactivate is identified by its "
+"name,\n"
+"UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection down { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [id | uuid | path | apath] <ідентифікатор>\n"
+"\n"
+"СкаÑувати активацію Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ð° приÑтрої (без заборони приÑтрою виконувати\n"
+"автоматичну активацію). Профіль Ð´Ð»Ñ ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— можна вказати за\n"
+"назвою, UUID або шлÑхом D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:318 ../cli/src/connections.c:319
-#: ../cli/src/connections.c:547 ../cli/src/connections.c:548
-#: ../cli/src/connections.c:550 ../cli/src/devices.c:444
-#: ../cli/src/devices.c:497 ../cli/src/devices.c:615 ../cli/src/devices.c:616
-#: ../cli/src/devices.c:617 ../cli/src/devices.c:649 ../cli/src/devices.c:676
-#: ../cli/src/devices.c:677 ../cli/src/devices.c:678 ../cli/src/devices.c:679
-#: ../cli/src/devices.c:680 ../cli/src/network-manager.c:269
-#: ../cli/src/settings.c:866 ../cli/src/settings.c:868
-#: ../cli/src/settings.c:941 ../cli/src/settings.c:1076
-#: ../cli/src/settings.c:1166 ../cli/src/settings.c:1376
-#: ../cli/src/settings.c:1377 ../cli/src/settings.c:1379
-#: ../cli/src/settings.c:1381 ../cli/src/settings.c:1382
-#: ../cli/src/settings.c:1513 ../cli/src/settings.c:1514
-#: ../cli/src/settings.c:1515 ../cli/src/settings.c:1516
-#: ../cli/src/settings.c:1594 ../cli/src/settings.c:1595
-#: ../cli/src/settings.c:1596 ../cli/src/settings.c:1597
-#: ../cli/src/settings.c:1598 ../cli/src/settings.c:1599
-#: ../cli/src/settings.c:1600 ../cli/src/settings.c:1601
-#: ../cli/src/settings.c:1602 ../cli/src/settings.c:1603
-#: ../cli/src/settings.c:1604 ../cli/src/settings.c:1605
-#: ../cli/src/settings.c:1606 ../cli/src/settings.c:1688
-#: ../cli/src/settings.c:2044 ../cli/src/settings.c:2081
-msgid "no"
-msgstr "ні"
+#: ../cli/src/connections.c:358
+#, c-format
+#| msgid ""
+#| "Usage: nmcli connection add { ARGUMENTS | help }\n"
+#| "\n"
+#| "ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+#| "\n"
+#| " COMMON_OPTIONS:\n"
+#| " type <type>\n"
+#| " ifname <interface name> | \"*\"\n"
+#| " [con-name <connection name>]\n"
+#| " [autoconnect yes|no]\n"
+#| "\n"
+#| " [save yes|no]\n"
+#| "\n"
+#| " TYPE_SPECIFIC_OPTIONS:\n"
+#| " ethernet: [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " wifi: ssid <SSID>\n"
+#| " [mac <MAC address>]\n"
+#| " [cloned-mac <cloned MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " wimax: [mac <MAC address>]\n"
+#| " [nsp <NSP>]\n"
+#| "\n"
+#| " pppoe: username <PPPoE username>\n"
+#| " [password <PPPoE password>]\n"
+#| " [service <PPPoE service name>]\n"
+#| " [mtu <MTU>]\n"
+#| " [mac <MAC address>]\n"
+#| "\n"
+#| " gsm: apn <APN>\n"
+#| " [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " cdma: [user <username>]\n"
+#| " [password <password>]\n"
+#| "\n"
+#| " infiniband: [mac <MAC address>]\n"
+#| " [mtu <MTU>]\n"
+#| " [transport-mode datagram | connected]\n"
+#| " [parent <ifname>]\n"
+#| " [p-key <IPoIB P_Key>]\n"
+#| "\n"
+#| " bluetooth: [addr <bluetooth address>]\n"
+#| " [bt-type panu|dun-gsm|dun-cdma]\n"
+#| "\n"
+#| " vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+#| " id <VLAN ID>\n"
+#| " [flags <VLAN flags>]\n"
+#| " [ingress <ingress priority mapping>]\n"
+#| " [egress <egress priority mapping>]\n"
+#| " [mtu <MTU>]\n"
+#| "\n"
+#| " bond: [mode balance-rr (0) | active-backup (1) | balance-xor "
+#| "(2) | broadcast (3) |\n"
+#| " 802.3ad (4) | balance-tlb (5) | balance-alb "
+#| "(6)]\n"
+#| " [primary <ifname>]\n"
+#| " [miimon <num>]\n"
+#| " [downdelay <num>]\n"
+#| " [updelay <num>]\n"
+#| " [arp-interval <num>]\n"
+#| " [arp-ip-target <num>]\n"
+#| "\n"
+#| " bond-slave: master <master (ifname, or connection UUID or name)>\n"
+#| "\n"
+#| " team: [config <file>|<raw JSON data>]\n"
+#| "\n"
+#| " team-slave: master <master (ifname, or connection UUID or name)>\n"
+#| " [config <file>|<raw JSON data>]\n"
+#| "\n"
+#| " bridge: [stp yes|no]\n"
+#| " [priority <num>]\n"
+#| " [forward-delay <2-30>]\n"
+#| " [hello-time <1-10>]\n"
+#| " [max-age <6-40>]\n"
+#| " [ageing-time <0-1000000>]\n"
+#| "\n"
+#| " bridge-slave: master <master (ifname, or connection UUID or name)>\n"
+#| " [priority <0-63>]\n"
+#| " [path-cost <1-65535>]\n"
+#| " [hairpin yes|no]\n"
+#| "\n"
+#| " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+#| " [user <username>]\n"
+#| "\n"
+#| " olpc-mesh: ssid <SSID>\n"
+#| " [channel <1-13>]\n"
+#| " [dhcp-anycast <MAC address>]\n"
+#| "\n"
+#| " IP_OPTIONS:\n"
+#| " [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+#| " [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+#| "\n"
+msgid ""
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC address>]\n"
+" [cloned-mac <cloned MAC address>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC address>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE username>\n"
+" [password <PPPoE password>]\n"
+" [service <PPPoE service name>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" cdma: [user <username>]\n"
+" [password <password>]\n"
+"\n"
+" infiniband: [mac <MAC address>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth address>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN flags>]\n"
+" [ingress <ingress priority mapping>]\n"
+" [egress <egress priority mapping>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <ifname>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+"\n"
+" bond-slave: master <master (ifname, or connection UUID or name)>\n"
+"\n"
+" team: [config <file>|<raw JSON data>]\n"
+"\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
+" [config <file>|<raw JSON data>]\n"
+"\n"
+" bridge: [stp yes|no]\n"
+" [priority <num>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+" [mac <MAC address>]\n"
+"\n"
+" bridge-slave: master <master (ifname, or connection UUID or name)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
+" [user <username>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC address>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
+" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection add { ПÐРÐМЕТРИ | help }\n"
+" ПÐРÐМЕТРИ := ЗÐГÐЛЬÐІ_ПÐРÐМЕТРИ СПЕЦИФІЧÐІ_ДЛЯ_ТИПУ_ПÐРÐМЕТРИ "
+"ПÐРÐМЕТРИ_IP\n"
+"\n"
+" ЗÐГÐЛЬÐІ_ПÐРÐМЕТРИ:\n"
+" type <тип>\n"
+" ifname <назва інтерфейÑу> | \"*\"\n"
+" [con-name <назва з’єднаннÑ>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" СПЕЦИФІЧÐІ_ДЛЯ_ТИПУ_ПÐРÐМЕТРИ:\n"
+" ethernet: [mac <MAC-адреÑа>]\n"
+" [cloned-mac <клонована MAC-адреÑа>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC-адреÑа>]\n"
+" [cloned-mac <клонована MAC-адреÑа>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC-адреÑа>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <кориÑтувач PPPoE>\n"
+" [password <пароль PPPoE>]\n"
+" [service <назва Ñлужби PPPoE>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC-адреÑа>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <кориÑтувач>]\n"
+" [password <пароль>]\n"
+"\n"
+" cdma: [user <кориÑтувач>]\n"
+" [password <пароль>]\n"
+"\n"
+" infiniband: [mac <MAC-адреÑа>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <назва>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <адреÑа_bluetooth>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <батьківÑький приÑтрій (UUID з’єднаннÑ, назва або MAC-"
+"адреÑа)>\n"
+" id <ідентифікатор VLAN>\n"
+" [flags <прапорці VLAN>]\n"
+" [ingress <Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вхідного доÑтупу>]\n"
+" [egress <Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вихідного доÑтупу>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
+"| broadcast (3) |\n"
+" 802.3ad (4) | balance-tlb (5) | balance-alb "
+"(6)]\n"
+" [primary <назва>]\n"
+" [miimon <чиÑло>]\n"
+" [downdelay <чиÑло>]\n"
+" [updelay <чиÑло>]\n"
+" [arp-interval <чиÑло>]\n"
+" [arp-ip-target <чиÑло>]\n"
+"\n"
+" bond-slave: master <оÑновний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ (назва інтерфейÑу чи назва або "
+"UUID з’єднаннÑ)>\n"
+"\n"
+" team: [config <файл>|<дані JSON>]\n"
+"\n"
+" team-slave: master <оÑновний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ (назва інтерфейÑу чи назва або "
+"UUID з’єднаннÑ)>\n"
+" [config <файл>|<дані JSON>]\n"
+"\n"
+" bridge: [stp yes|no>]\n"
+" [priority <чиÑло>]\n"
+" [forward-delay <2-30>]\n"
+" [hello-time <1-10>]\n"
+" [max-age <6-40>]\n"
+" [ageing-time <0-1000000>]\n"
+" [mac <MAC-адреÑа>]\n"
+"\n"
+" bridge-slave: master <оÑновний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ (назва інтерфейÑу чи назва або "
+"UUID з’єднаннÑ)>\n"
+" [priority <0-63>]\n"
+" [path-cost <1-65535>]\n"
+" [hairpin yes|no]\n"
+"\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" [user <кориÑтувач>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC-адреÑа>]\n"
+"\n"
+" ПÐРÐМЕТРИ_IP:\n"
+" [ip4 <адреÑа IPv4>] [gw4 <шлюз IPv4>]\n"
+" [ip6 <адреÑа IPv6>] [gw6 <шлюз IPv6>]\n"
+"\n"
-#: ../cli/src/connections.c:393
-msgid "Connection list"
-msgstr "СпиÑок з’єднань"
-
-#: ../cli/src/connections.c:406 ../cli/src/connections.c:943
-#: ../cli/src/connections.c:1481 ../cli/src/connections.c:1496
-#: ../cli/src/connections.c:1505 ../cli/src/connections.c:1515
-#: ../cli/src/connections.c:1527 ../cli/src/connections.c:1636
-#: ../cli/src/connections.c:1738 ../cli/src/devices.c:1127
-#: ../cli/src/devices.c:1137 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1263 ../cli/src/devices.c:1627
-#: ../cli/src/devices.c:1634 ../cli/src/devices.c:1648
-#: ../cli/src/devices.c:1655 ../cli/src/devices.c:1672
-#: ../cli/src/devices.c:1683 ../cli/src/devices.c:1904
-#: ../cli/src/devices.c:1911
+#: ../cli/src/connections.c:437
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "Помилка: пропущено аргумент %s."
+msgid ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
+"\n"
+"Modify one or more properties of the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path. For multi-valued\n"
+"properties you can use optional '+' or '-' prefix to the property name.\n"
+"The '+' sign allows appending items instead of overwriting the whole value.\n"
+"The '-' sign allows removing selected items instead of the whole value.\n"
+"\n"
+"Examples:\n"
+"nmcli con mod home-wifi wifi.ssid rakosnicek\n"
+"nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.2/24, "
+"10.10.1.5/8\"\n"
+"nmcli con mod em1-1 +ipv4.dns 8.8.4.4\n"
+"nmcli con mod em1-1 -ipv4.dns 1\n"
+"nmcli con mod em1-1 -ipv6.addr \"abbe::cafe/56\"\n"
+"nmcli con mod bond0 +bond.options mii=500\n"
+"nmcli con mod bond0 -bond.options downdelay\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection modify { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [id | uuid | path] <ІДЕÐТИФІКÐТОР> ([+|-]<параметр>."
+"<влаÑтивіÑÑ‚ÑŒ> <значеннÑ>)+\n"
+"\n"
+"Змінити одну або декілька влаÑтивоÑтей профілю з’єднаннÑ.\n"
+"Профіль ідентифікуєтьÑÑ Ð·Ð° назвою, UUID або шлÑхом D-Bus. Ð”Ð»Ñ Ð²Ð»Ð°ÑтивоÑтей\n"
+"з декількома значеннÑми ви можете ÑкориÑтатиÑÑ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ð¼ префікÑом до\n"
+"влаÑтивоÑÑ‚Ñ– «+» або «-». Знак «+» надає змогу допиÑувати Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð¼Ñ–ÑÑ‚ÑŒ\n"
+"перезапиÑÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑього значеннÑ. За допомогою знаку «-» можна вилучити\n"
+"вказані значеннÑ, заміÑÑ‚ÑŒ уÑього значеннÑ.\n"
+"\n"
+"Приклади:\n"
+"nmcli con mod home-wifi wifi.ssid rakosnicek\n"
+"nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.2/24, "
+"10.10.1.5/8\"\n"
+"nmcli con mod em1-1 +ipv4.dns 8.8.4.4\n"
+"nmcli con mod em1-1 -ipv4.dns 1\n"
+"nmcli con mod em1-1 -ipv6.addr \"abbe::cafe/56\"\n"
+"nmcli con mod bond0 +bond.options mii=500\n"
+"nmcli con mod bond0 -bond.options downdelay\n"
+"\n"
-#: ../cli/src/connections.c:419
+#: ../cli/src/connections.c:461
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Помилка: невідоме Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %s."
+msgid ""
+"Usage: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Edit an existing connection profile in an interactive editor.\n"
+"The profile is identified by its name, UUID or D-Bus path\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Add a new connection profile in an interactive editor.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection edit { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [id | uuid | path] <ідентифікатор>\n"
+"\n"
+"Редагувати наÑвний профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñƒ інтерактивному редакторі.\n"
+"Профіль можна вказати за допомогою назви UUID або шлÑху D-Bus\n"
+"\n"
+"ÐРГУМЕÐТИ := [type <тип нового з’єднаннÑ>] [con-name <назва нового "
+"з’єднаннÑ>]\n"
+"\n"
+"Додати новий профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою інтерактивного редактора.\n"
+"\n"
-#: ../cli/src/connections.c:425 ../cli/src/connections.c:1540
-#: ../cli/src/connections.c:1653 ../cli/src/connections.c:1745
-#: ../cli/src/devices.c:911 ../cli/src/devices.c:991 ../cli/src/devices.c:1151
-#: ../cli/src/devices.c:1269 ../cli/src/devices.c:1696
-#: ../cli/src/devices.c:1917
+#: ../cli/src/connections.c:477
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Ðевідомий параметр: %s\n"
+msgid ""
+"Usage: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection delete { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [id | uuid | path] <ідентифікатор>\n"
+"\n"
+"Вилучити профіль з’єднаннÑ.\n"
+"Профіль можна вказати за допомогою назви, UUID або шлÑху D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:434
+#: ../cli/src/connections.c:489
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Помилка: не вказано коректних параметрів."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection reload { help }\n"
+"\n"
+"Перезавантажити уÑÑ–Ñ… файли з’єднань з диÑка.\n"
+"\n"
-#: ../cli/src/connections.c:449 ../cli/src/connections.c:1841
-#: ../cli/src/devices.c:2128 ../cli/src/network-manager.c:599
+#: ../cli/src/connections.c:498
#, c-format
-msgid "Error: %s."
-msgstr "Помилка: %s."
+msgid ""
+"Usage: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Load/reload one or more connection files from disk. Use this after manually\n"
+"editing a connection file to ensure that NetworkManager is aware of its "
+"latest\n"
+"state.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli connection load { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := <назва файла> [<назва файла>...]\n"
+"\n"
+"Завантажити або перезавантажити один або декілька файлів з’єднань з диÑка.\n"
+"Командою можна ÑкориÑтатиÑÑ Ð¿Ñ–ÑÐ»Ñ Ð²Ð½ÐµÑÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½ до файла Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ, "
+"длÑ\n"
+"того, щоб завантажити до NetworkManager найÑвіжіші налаштуваннÑ.\n"
+"\n"
-#: ../cli/src/connections.c:462
+#: ../cli/src/connections.c:556
msgid "activating"
msgstr "активаціÑ"
-#: ../cli/src/connections.c:464
+#: ../cli/src/connections.c:558
msgid "activated"
msgstr "активовано"
-#: ../cli/src/connections.c:478
+#: ../cli/src/connections.c:562
+msgid "deactivated"
+msgstr "вимкнено"
+
+#: ../cli/src/connections.c:574
msgid "VPN connecting (prepare)"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN (приготуваннÑ)"
-#: ../cli/src/connections.c:480
+#: ../cli/src/connections.c:576
msgid "VPN connecting (need authentication)"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN (потрібне розпізнаваннÑ)"
-#: ../cli/src/connections.c:482
+#: ../cli/src/connections.c:578
msgid "VPN connecting"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN"
-#: ../cli/src/connections.c:484
+#: ../cli/src/connections.c:580
msgid "VPN connecting (getting IP configuration)"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN (Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ IP)"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:582
msgid "VPN connected"
msgstr "VPN з’єднано"
-#: ../cli/src/connections.c:488
+#: ../cli/src/connections.c:584
msgid "VPN connection failed"
msgstr "Ðевдала Ñпроба Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN"
-#: ../cli/src/connections.c:490
+#: ../cli/src/connections.c:586
msgid "VPN disconnected"
msgstr "VPN роз’єднано"
-#: ../cli/src/connections.c:543 ../cli/src/connections.c:553
+#: ../cli/src/connections.c:669
+msgid "Connection profile details"
+msgstr "Параметри профілю з’єднаннÑ"
+
+#: ../cli/src/connections.c:681 ../cli/src/connections.c:1033
+#, c-format
+msgid "Error: 'connection show': %s"
+msgstr "Помилка: «connection show»: %s"
+
+#: ../cli/src/connections.c:825
+msgid "never"
+msgstr "ніколи"
+
+#. "CAPABILITIES"
+#: ../cli/src/connections.c:826 ../cli/src/connections.c:827
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:888
+#: ../cli/src/connections.c:889 ../cli/src/connections.c:891
+#: ../cli/src/connections.c:2841 ../cli/src/connections.c:6572
+#: ../cli/src/connections.c:6573 ../cli/src/devices.c:609
+#: ../cli/src/devices.c:659 ../cli/src/devices.c:801 ../cli/src/devices.c:802
+#: ../cli/src/devices.c:803 ../cli/src/devices.c:836 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/devices.c:867 ../cli/src/devices.c:868
+#: ../cli/src/devices.c:869 ../cli/src/devices.c:870 ../cli/src/devices.c:871
+#: ../cli/src/network-manager.c:442
+msgid "yes"
+msgstr "так"
+
+#: ../cli/src/connections.c:826 ../cli/src/connections.c:827
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:888
+#: ../cli/src/connections.c:889 ../cli/src/connections.c:891
+#: ../cli/src/connections.c:2842 ../cli/src/connections.c:6572
+#: ../cli/src/connections.c:6573 ../cli/src/devices.c:609
+#: ../cli/src/devices.c:659 ../cli/src/devices.c:801 ../cli/src/devices.c:802
+#: ../cli/src/devices.c:803 ../cli/src/devices.c:836 ../cli/src/devices.c:865
+#: ../cli/src/devices.c:866 ../cli/src/devices.c:867 ../cli/src/devices.c:868
+#: ../cli/src/devices.c:869 ../cli/src/devices.c:870 ../cli/src/devices.c:871
+#: ../cli/src/network-manager.c:444
+msgid "no"
+msgstr "ні"
+
+#: ../cli/src/connections.c:884 ../cli/src/connections.c:894
+#: ../cli/src/devices.c:599
msgid "N/A"
msgstr "н/д"
-#: ../cli/src/connections.c:747 ../cli/src/connections.c:971
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Помилка: «con status»: %s"
+#: ../cli/src/connections.c:1021
+msgid "Activate connection details"
+msgstr "Ðктивувати параметри з’єднаннÑ"
-#: ../cli/src/connections.c:749 ../cli/src/connections.c:973
+#: ../cli/src/connections.c:1254
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Помилка: «con status»: %s; дозволені полÑ: %s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "некоректне поле «%s»; дозволені полÑ: %s Ñ– %s або %s,%s"
-#: ../cli/src/connections.c:757
-msgid "Active connection details"
-msgstr "Параметри активного з’єднаннÑ"
-
-#: ../cli/src/connections.c:893 ../cli/src/connections.c:1555
-#: ../cli/src/connections.c:1668 ../cli/src/connections.c:1759
-#: ../cli/src/devices.c:938 ../cli/src/devices.c:1000
-#: ../cli/src/devices.c:1166 ../cli/src/devices.c:1299
-#: ../cli/src/devices.c:1718 ../cli/src/devices.c:1946
-#: ../cli/src/network-manager.c:311
+#: ../cli/src/connections.c:1269 ../cli/src/connections.c:1277
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸, чи працює NetworkManager: %s."
+msgid "'%s' has to be alone"
+msgstr "«%s» має бути єдиним"
-#: ../cli/src/connections.c:897 ../cli/src/connections.c:1559
-#: ../cli/src/connections.c:1672 ../cli/src/connections.c:1763
-#: ../cli/src/devices.c:942 ../cli/src/devices.c:1004
-#: ../cli/src/devices.c:1170 ../cli/src/devices.c:1303
-#: ../cli/src/devices.c:1722 ../cli/src/devices.c:1950
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/connections.c:1308 ../cli/src/connections.c:2032
+#: ../cli/src/connections.c:2092 ../cli/src/connections.c:8075
+#: ../cli/src/connections.c:8283 ../cli/src/connections.c:8376
+#: ../cli/src/connections.c:8404 ../cli/src/devices.c:1202
+#: ../cli/src/devices.c:1250 ../cli/src/devices.c:1413
+#: ../cli/src/devices.c:1547 ../cli/src/devices.c:1684
+#: ../cli/src/devices.c:2128 ../cli/src/devices.c:2427
+#: ../cli/src/network-manager.c:484
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Помилка: NetworkManager не працює."
-#: ../cli/src/connections.c:929
-msgid "Active connections"
-msgstr "Ðктивні з’єднаннÑ"
+#. Add headers
+#: ../cli/src/connections.c:1338
+msgid "NetworkManager active profiles"
+msgstr "Ðктивні профілі NetworkManager"
+
+#: ../cli/src/connections.c:1339
+msgid "NetworkManager connection profiles"
+msgstr "Профілі з’єднань NetworkManager"
+
+#: ../cli/src/connections.c:1376 ../cli/src/connections.c:1977
+#: ../cli/src/connections.c:1993 ../cli/src/connections.c:2002
+#: ../cli/src/connections.c:2012 ../cli/src/connections.c:2109
+#: ../cli/src/connections.c:8091 ../cli/src/connections.c:8314
+#: ../cli/src/devices.c:1642 ../cli/src/devices.c:1650
+#: ../cli/src/devices.c:2041 ../cli/src/devices.c:2048
+#: ../cli/src/devices.c:2062 ../cli/src/devices.c:2069
+#: ../cli/src/devices.c:2086 ../cli/src/devices.c:2094
+#: ../cli/src/devices.c:2290 ../cli/src/devices.c:2386
+#: ../cli/src/devices.c:2393
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Помилка: пропущено аргумент %s."
-#: ../cli/src/connections.c:954
+#: ../cli/src/connections.c:1427
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "Помилка: «%s» не Ñ” активним з’єднаннÑм."
+msgid "Error: %s - no such connection profile."
+msgstr "Помилка: профілю Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %s не Ñ–Ñнує."
-#: ../cli/src/connections.c:959
+#: ../cli/src/connections.c:1443 ../cli/src/connections.c:2045
+#: ../cli/src/connections.c:8382 ../cli/src/connections.c:8423
+#: ../cli/src/connections.c:8628 ../cli/src/devices.c:2269
+#: ../cli/src/devices.c:2714 ../cli/src/network-manager.c:539
+#: ../cli/src/network-manager.c:582 ../cli/src/network-manager.c:599
+#: ../cli/src/network-manager.c:645 ../cli/src/network-manager.c:659
+#: ../cli/src/network-manager.c:776 ../cli/src/network-manager.c:820
+#: ../cli/src/network-manager.c:840
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "Помилка: невідомий параметр: %s"
+msgid "Error: %s."
+msgstr "Помилка: %s."
-#: ../cli/src/connections.c:1066
+#: ../cli/src/connections.c:1538
#, c-format
msgid "no active connection on device '%s'"
msgstr "на приÑтрої «%s» немає активних з’єднань"
-#: ../cli/src/connections.c:1074
+#: ../cli/src/connections.c:1546
msgid "no active connection or device"
msgstr "немає активних з’єднань або приÑтроїв"
-#: ../cli/src/connections.c:1145
+#: ../cli/src/connections.c:1617
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "приÑтрій «%s» неÑуміÑний зі з’єднаннÑм «%s»"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1620
#, c-format
msgid "no device found for connection '%s'"
msgstr "не виÑвлено приÑтрою Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»"
-#: ../cli/src/connections.c:1160
+#: ../cli/src/connections.c:1632
msgid "unknown reason"
msgstr "невідома причина"
-#: ../cli/src/connections.c:1162
+#: ../cli/src/connections.c:1634 ../cli/src/network-manager.c:288
msgid "none"
msgstr "немає"
-#: ../cli/src/connections.c:1164
+#: ../cli/src/connections.c:1636
msgid "the user was disconnected"
msgstr "кориÑтувача від’єднано"
-#: ../cli/src/connections.c:1166
+#: ../cli/src/connections.c:1638
msgid "the base network connection was interrupted"
msgstr "оÑновне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· мережею розірвано"
-#: ../cli/src/connections.c:1168
+#: ../cli/src/connections.c:1640
msgid "the VPN service stopped unexpectedly"
msgstr "Ñлужба VPN неочікувано завершила роботу"
-#: ../cli/src/connections.c:1170
+#: ../cli/src/connections.c:1642
msgid "the VPN service returned invalid configuration"
msgstr "Ñлужбою VPN повернуто неприпуÑтимі налаштуваннÑ"
-#: ../cli/src/connections.c:1172
+#: ../cli/src/connections.c:1644
msgid "the connection attempt timed out"
msgstr "перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-#: ../cli/src/connections.c:1174
+#: ../cli/src/connections.c:1646
msgid "the VPN service did not start in time"
msgstr "Ñлужбу VPN не було вчаÑно запущено"
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1648
msgid "the VPN service failed to start"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу VPN"
-#: ../cli/src/connections.c:1178
+#: ../cli/src/connections.c:1650
msgid "no valid VPN secrets"
msgstr "не виÑвлено коректних реєÑтраційних даних VPN"
-#: ../cli/src/connections.c:1180
+#: ../cli/src/connections.c:1652
msgid "invalid VPN secrets"
msgstr "некоректні реєÑтраційні дані VPN"
-#: ../cli/src/connections.c:1182
+#: ../cli/src/connections.c:1654
msgid "the connection was removed"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено"
-#: ../cli/src/connections.c:1199 ../cli/src/connections.c:1404
+#: ../cli/src/connections.c:1671 ../cli/src/connections.c:1827
+#: ../cli/src/connections.c:6468
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÑƒÑпішно задіÑно (активний шлÑÑ… D-Bus: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1204 ../cli/src/connections.c:1305
+#: ../cli/src/connections.c:1676
#, c-format
msgid "Error: Connection activation failed."
msgstr "Помилка: невдала Ñпроба активації з’єднаннÑ."
-#: ../cli/src/connections.c:1229
+#: ../cli/src/connections.c:1701
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN уÑпішно задіÑно (активний шлÑÑ… D-Bus: %s)\n"
-#: ../cli/src/connections.c:1237
+#: ../cli/src/connections.c:1708
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з’єднаннÑ: %s."
-#: ../cli/src/connections.c:1334 ../cli/src/devices.c:1060
+#: ../cli/src/connections.c:1726 ../cli/src/devices.c:1299
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Помилка: перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ %d Ñ."
-#: ../cli/src/connections.c:1395
+#: ../cli/src/connections.c:1791
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Помилка: приÑтрій «%s» очікує на реакцію підлеглих приÑтроїв, перш ніж "
+"продовжувати активацію."
+
+#: ../cli/src/connections.c:1811
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з’єднаннÑ: %s"
-#: ../cli/src/connections.c:1489 ../cli/src/connections.c:1644
-#: ../cli/src/connections.c:1772
+#: ../cli/src/connections.c:1916 ../cli/src/connections.c:2046
+msgid "unknown error"
+msgstr "невідома помилка"
+
+#: ../cli/src/connections.c:1924
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Помилка: невідоме з’єднаннÑ: %s."
+msgid "unknown device '%s'."
+msgstr "невідомий приÑтрій, «%s»."
+
+#: ../cli/src/connections.c:1929
+msgid "neither a valid connection nor device given"
+msgstr "не вказано ні коректного з’єднаннÑ, ні приÑтрою"
-#: ../cli/src/connections.c:1535 ../cli/src/devices.c:1145
-#: ../cli/src/devices.c:1691
+#: ../cli/src/connections.c:2021 ../cli/src/devices.c:1176
+#: ../cli/src/devices.c:1656 ../cli/src/devices.c:2105
+#: ../cli/src/devices.c:2399
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Â«%s» Ñ” некоректним."
+msgid "Unknown parameter: %s\n"
+msgstr "Ðевідомий параметр: %s\n"
-#: ../cli/src/connections.c:1548 ../cli/src/connections.c:1661
-#: ../cli/src/connections.c:1752
+#: ../cli/src/connections.c:2054
+msgid "preparing"
+msgstr "приготуваннÑ"
+
+#: ../cli/src/connections.c:2082 ../cli/src/connections.c:8295
+#: ../cli/src/connections.c:8410
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Помилка: мало бути вказано id або uuid."
+msgid "Error: No connection specified."
+msgstr "Помилка: не вказано з’єднаннÑ."
-#: ../cli/src/connections.c:1581
+#: ../cli/src/connections.c:2119
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Помилка: не знайдено відповідних приÑтроїв: %s."
+msgid "Error: '%s' is not an active connection."
+msgstr "Помилка: «%s» не Ñ” активним з’єднаннÑм."
-#: ../cli/src/connections.c:1583
+#: ../cli/src/connections.c:2431 ../cli/src/utils.c:515
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Помилка: не знайдено відповідних приÑтроїв."
+msgid "'%s' not among [%s]"
+msgstr "«%s» немає Ñеред [%s]"
-#: ../cli/src/connections.c:1697
+#: ../cli/src/connections.c:2513
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Помилка: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” активним\n"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Помилка: «%s»: «%s» не Ñ” коректною MAC-адреÑою %s."
-#: ../cli/src/connections.c:1711
+#. Ask for optional arguments
+#: ../cli/src/connections.c:2514 ../cli/src/connections.c:2957
+#: ../libnm-glib/nm-device.c:1802 ../tui/nm-editor-utils.c:173
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../cli/src/connections.c:2514 ../libnm-glib/nm-device.c:1790
+#: ../tui/nm-editor-utils.c:156
+msgid "Ethernet"
+msgstr "Ethernet"
+
+#: ../cli/src/connections.c:2537
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Помилка: «mtu»: «%s» не Ñ” коректним значеннÑм MTU."
-#: ../cli/src/connections.c:1832
+#: ../cli/src/connections.c:2553
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Помилка: команда «con» «%s» є некоректною."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Помилка: «parent»: «%s» не Ñ” коректною назвою інтерфейÑу."
-#: ../cli/src/connections.c:1900
+#: ../cli/src/connections.c:2574
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· D-Bus."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Помилка: «p-key»: «%s» не є коректним закритим ключем InfiniBand"
-#: ../cli/src/connections.c:1908
+#: ../cli/src/connections.c:2603
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ параметри ÑиÑтеми."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"Помилка: «mode»: «%s» не Ñ” коректним режимом Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… InfiniBand "
+"[datagram, connected]."
-#: ../cli/src/connections.c:1918
+#: ../cli/src/connections.c:2617
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr ""
-"Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок з’єднань: Ñлужба параметрів не працює."
+"Помилка: «flags»: «%s» Ñ” некоректним; мало бути чиÑло у діапазоні <0-7>."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:109 ../cli/src/devices.c:190
-#: ../cli/src/devices.c:206
-msgid "DEVICE"
-msgstr "ПРИСТРІЙ"
+#: ../cli/src/connections.c:2639
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Помилка: «%s»: «%s» є некоректним; %s "
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "МОЖЛИВОСТІ"
+#: ../cli/src/connections.c:2832
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr ""
+"Помилка: «%s»: «%s» Ñ” некоректним; мало бути чиÑло у діапазоні <%u-%u>."
+
+#. Ask for optional arguments.
+#: ../cli/src/connections.c:2888
+#, c-format
+#| msgid "There is 1 optional argument for '%s' connection type.\n"
+msgid "There is %d optional argument for '%s' connection type.\n"
+msgid_plural "There are %d optional arguments for '%s' connection type.\n"
+msgstr[0] "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%2$s» передбачено %1$d додатковий аргумент.\n"
+msgstr[1] "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%2$s» передбачено %1$d додаткових аргументи.\n"
+msgstr[2] "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%2$s» передбачено %1$d додаткових аргументів.\n"
+msgstr[3] "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%2$s» передбачено %1$d додатковий аргумент.\n"
+
+#: ../cli/src/connections.c:2891
+#, c-format
+#| msgid "Do you want to provide it? (yes/no) [yes] "
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "Хочете вказати їх? %s"
+msgstr[1] "Хочете вказати їх? %s"
+msgstr[2] "Хочете вказати їх? %s"
+msgstr[3] "Хочете вказати його? %s"
+
+#: ../cli/src/connections.c:2906
+msgid "ethernet"
+msgstr "ethernet"
+
+#: ../cli/src/connections.c:2906 ../libnm-glib/nm-device.c:1792
+#: ../tui/nm-editor-utils.c:164
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#: ../cli/src/connections.c:2914 ../cli/src/connections.c:2962
+#: ../cli/src/connections.c:3071 ../cli/src/connections.c:3150
+msgid "MTU [auto]: "
+msgstr "MTU [типово авто]: "
+
+#: ../cli/src/connections.c:2925 ../cli/src/connections.c:2973
+#: ../cli/src/connections.c:3043 ../cli/src/connections.c:3082
+#: ../cli/src/connections.c:3437
+msgid "MAC [none]: "
+msgstr "MAC [типово немає]: "
+
+#: ../cli/src/connections.c:2936
+msgid "Cloned MAC [none]: "
+msgstr "Клонований MAC [типово немає]: "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+#| msgid "Transport mode"
+msgid "Transport mode %s"
+msgstr "Режим Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ %s"
+
+#: ../cli/src/connections.c:2997
+msgid "Parent interface [none]: "
+msgstr "БатьківÑький Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ [типово немає]: "
+
+#: ../cli/src/connections.c:3008
+msgid "P_KEY [none]: "
+msgstr "P_KEY [типово немає]: "
+
+#: ../cli/src/connections.c:3018
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr ""
+"Помилка: параметр «p-key» обов’Ñзковим, Ñкщо вказано параметр «parent».\n"
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "ПÐРÐМЕТРИ WIFI"
+#. Ask for optional 'wimax' arguments.
+#: ../cli/src/connections.c:3038 ../libnm-glib/nm-device.c:1798
+msgid "WiMAX"
+msgstr "WiMAX"
-#. 2
-#: ../cli/src/devices.c:86
-msgid "AP"
-msgstr "ТД"
+#. Ask for optional 'pppoe' arguments.
+#: ../cli/src/connections.c:3061
+msgid "PPPoE"
+msgstr "PPPoE"
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "ПÐРÐМЕТРИ WIRED"
+#: ../cli/src/connections.c:3065 ../cli/src/connections.c:3103
+msgid "Password [none]: "
+msgstr "Пароль [типово немає]: "
-#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "ПÐРÐМЕТРИ WIMAX"
+#: ../cli/src/connections.c:3067
+msgid "Service [none]: "
+msgstr "Служба [типово немає]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:203
-msgid "NSP"
-msgstr "NSP"
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:3097
+#| msgid "Mobile Broadband"
+msgid "mobile broadband"
+msgstr "мобільна радіомережа"
-#. 6
-#: ../cli/src/devices.c:90
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:3101 ../cli/src/connections.c:3509
+msgid "Username [none]: "
+msgstr "КориÑтувач [типово немає]: "
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3116
+#| msgid "Bluetooth"
+msgid "bluetooth"
+msgstr "bluetooth"
-#. 8
-#: ../cli/src/devices.c:92
-msgid "IP6"
-msgstr "IP6"
-
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:3123
+#, c-format
+#| msgid "Bluetooth"
+msgid "Bluetooth type %s"
+msgstr "Тип Bluetooth %s"
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "BOND"
+#: ../cli/src/connections.c:3129
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Помилка: «bt-type»: «%s» не є коректним типом bluetooth.\n"
+#. Ask for optional 'vlan' arguments.
#. 11
-#: ../cli/src/devices.c:95
+#: ../cli/src/connections.c:3145 ../cli/src/devices.c:251
+#: ../libnm-glib/nm-device.c:1810 ../libnm-util/nm-connection.c:1303
+#: ../tui/nm-editor-utils.c:227 ../tui/nmt-page-vlan.c:53
msgid "VLAN"
msgstr "VLAN"
+#: ../cli/src/connections.c:3161
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "Прапорці VLAN (<0-7>) [типово немає]: "
+
+#: ../cli/src/connections.c:3172
+msgid "Ingress priority maps [none]: "
+msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вхідного доÑтупу [типово немає]: "
+
+#: ../cli/src/connections.c:3183
+msgid "Egress priority maps [none]: "
+msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вихідного доÑтупу [типово немає]: "
+
+#: ../cli/src/connections.c:3194
+msgid "Bonding mode [balance-rr]: "
+msgstr "Режим прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово balance-rr]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../cli/src/connections.c:3209
+msgid "bond"
+msgstr "прив’Ñзка"
+
+#: ../cli/src/connections.c:3231
+msgid "Bonding primary interface [none]: "
+msgstr "ОÑновний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ñ€Ð¸Ð²â€™ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово немає]: "
+
+#: ../cli/src/connections.c:3234
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Помилка: «primary»: «%s» не Ñ” коректною назвою інтерфейÑу.\n"
+
+#: ../cli/src/connections.c:3242
+#, c-format
+#| msgid "Link monitoring"
+msgid "Bonding monitoring mode %s"
+msgstr "Режим ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° зв’Ñзком %s"
+
+#: ../cli/src/connections.c:3248
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"Помилка: «%s» не Ñ” коректним режимом ÑпоÑтереженнÑ; ÑкориÑтайтеÑÑ Â«%s» або "
+"«%s».\n"
+
+#: ../cli/src/connections.c:3257
+msgid "Bonding miimon [100]: "
+msgstr "ЧаÑтота ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ MII прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 100]: "
+
+#: ../cli/src/connections.c:3260
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Помилка: «miimon»: «%s» не Ñ” коректним чиÑлом у діапазоні <0-%u>.\n"
+
+#: ../cli/src/connections.c:3268
+msgid "Bonding downdelay [0]: "
+msgstr "downdelay прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]: "
+
+#: ../cli/src/connections.c:3271
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Помилка: «downdelay»: «%s» не Ñ” чиÑлом у діапазоні <0-%u>.\n"
+
+#: ../cli/src/connections.c:3279
+msgid "Bonding updelay [0]: "
+msgstr "updelay прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]: "
+
+#: ../cli/src/connections.c:3282
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Помилка: «updelay»: «%s» не Ñ” чиÑлом у діапазоні <0-%u>.\n"
+
+#: ../cli/src/connections.c:3291
+msgid "Bonding arp-interval [0]: "
+msgstr "arp-interval прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]: "
+
+#: ../cli/src/connections.c:3294
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Помилка: «arp-interval»: «%s» не Ñ” чиÑлом у діапазоні <0-%u>.\n"
+
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3302
+msgid "Bonding arp-ip-target [none]: "
+msgstr "arp-ip-target прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово немає]: "
+
+#: ../cli/src/connections.c:3322
+msgid "Team JSON configuration [none]: "
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ JSON команди [немає]: "
+
+#: ../cli/src/connections.c:3339
+msgid "team"
+msgstr "команда"
+
+#: ../cli/src/connections.c:3345
+msgid "team-slave"
+msgstr "підлеглий-команди"
+
+#. Ask for optional 'bridge' arguments.
+#: ../cli/src/connections.c:3357
+#| msgid "Bridge"
+msgid "bridge"
+msgstr "міÑток"
+
+#: ../cli/src/connections.c:3363
+#, c-format
+#| msgid "Enable STP (yes/no) [yes]: "
+msgid "Enable STP %s"
+msgstr "Ð’Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ STP %s"
+
+#: ../cli/src/connections.c:3368
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'stp': %s.\n"
+msgstr "Помилка: «stp»: %s.\n"
+
+#: ../cli/src/connections.c:3376
+msgid "STP priority [32768]: "
+msgstr "Пріоритет STP [типово 32768]: "
+
+#: ../cli/src/connections.c:3380
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Помилка: «priority»: «%s» не Ñ” чиÑлом у діапазоні <0-%d>.\n"
+
+#: ../cli/src/connections.c:3388
+msgid "Forward delay [15]: "
+msgstr "Затримка переÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ [типово 15]:"
+
+#: ../cli/src/connections.c:3392
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Помилка: «forward-delay»: «%s» не Ñ” чиÑлом у діапазоні <2-30>.\n"
+
+#: ../cli/src/connections.c:3401
+msgid "Hello time [2]: "
+msgstr "Ð§Ð°Ñ Ð½Ð° Ð²Ñ–Ñ‚Ð°Ð½Ð½Ñ [типово 2]:"
+
+#: ../cli/src/connections.c:3405
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Помилка: «hello-time»: «%s» не Ñ” чиÑлом у діапазоні <1-10>.\n"
+
+#: ../cli/src/connections.c:3413
+msgid "Max age [20]: "
+msgstr "МакÑ. вік [типово 20]: "
+
+#: ../cli/src/connections.c:3417
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Помилка: «max-age»: «%s» не Ñ” чиÑлом у діапазоні <6-40>.\n"
+
+#: ../cli/src/connections.c:3425
+msgid "MAC address ageing time [300]: "
+msgstr "Ð§Ð°Ñ Ð·Ð°ÑÑ‚Ð°Ñ€Ñ–Ð²Ð°Ð½Ð½Ñ MAC-адреÑи [типово 300]: "
+
+#: ../cli/src/connections.c:3429
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Помилка: «ageing-time»: «%s» не Ñ” чиÑлом у діапазоні <0-1000000>.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../cli/src/connections.c:3456
+#| msgid "team-slave"
+msgid "bridge-slave"
+msgstr "міÑток-підлеглий"
+
+#: ../cli/src/connections.c:3461
+msgid "Bridge port priority [32]: "
+msgstr "Пріоритетний порт міÑтка [типово 32]: "
+
+#: ../cli/src/connections.c:3474
+msgid "Bridge port STP path cost [100]: "
+msgstr "ВартіÑÑ‚ÑŒ маршруту STP порту міÑтка [типово 100]: "
+
+#: ../cli/src/connections.c:3488
+#, c-format
+#| msgid "Hairpin mode"
+msgid "Hairpin %s"
+msgstr "Початкова зона (hairpin) %s"
+
+#: ../cli/src/connections.c:3493
+#, c-format
+#| msgid "Error: 'hairpin': %s."
+msgid "Error: 'hairpin': %s.\n"
+msgstr "Помилка: «hairpin»: %s.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../cli/src/connections.c:3520 ../libnm-glib/nm-device.c:1796
+msgid "OLPC Mesh"
+msgstr "Сітка OLPC"
+
+#: ../cli/src/connections.c:3525
+msgid "OLPC Mesh channel [1]: "
+msgstr "Канал OLPC Mesh [типово 1]: "
+
+#: ../cli/src/connections.c:3528
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Помилка: «channel»: «%s» не Ñ” чиÑлом у діапазоні <1-13>.\n"
+
+#: ../cli/src/connections.c:3536
+msgid "DHCP anycast MAC address [none]: "
+msgstr "MAC-адреÑа довільного надÑÐ¸Ð»Ð°Ð½Ð½Ñ (anycast) DHCP [типово немає]: "
+
+#: ../cli/src/connections.c:3581
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "ÐдреÑа IPv4 (IP[/префікÑ] [шлюз]) [none]: "
+
+#: ../cli/src/connections.c:3583
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "ÐдреÑа IPv6 (IP[/префікÑ] [шлюз]) [none]: "
+
+#: ../cli/src/connections.c:3601
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " ÐдреÑу уÑпішно додано: %s %s\n"
+
+#: ../cli/src/connections.c:3603
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " ПопередженнÑ: адреÑу вже викориÑтано: %s %s\n"
+
+#: ../cli/src/connections.c:3605
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " ПопередженнÑ: зайві дані наприкінці проігноровано: «%s»\n"
+
+#: ../cli/src/connections.c:3607 ../cli/src/connections.c:4464
+#: ../cli/src/connections.c:4527 ../cli/src/connections.c:4938
+#: ../cli/src/connections.c:4948
+msgid "Error: "
+msgstr "Помилка: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3624
+#, c-format
+#| msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgid "Do you want to add IP addresses? %s"
+msgstr "Хочете додати IP-адреÑи? %s"
+
+#: ../cli/src/connections.c:3631
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "ÐатиÑніть <Enter>, щоб завершити Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑ.\n"
+
+#: ../cli/src/connections.c:3777
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Помилка: «parent»: є некоректним без «p-key»."
+
+#: ../cli/src/connections.c:3833 ../cli/src/connections.c:4854
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3836 ../cli/src/connections.c:4857
+msgid "Error: 'ssid' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «ssid»."
+
+#: ../cli/src/connections.c:3900
+msgid "WiMAX NSP name: "
+msgstr "Ðазва NSP WiMAX: "
+
+#: ../cli/src/connections.c:3903
+msgid "Error: 'nsp' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «nsp»."
+
+#: ../cli/src/connections.c:3958
+msgid "PPPoE username: "
+msgstr "КориÑтувач PPPoE: "
+
+#: ../cli/src/connections.c:3961
+msgid "Error: 'username' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «username»."
+
+#: ../cli/src/connections.c:4032
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:4035
+msgid "Error: 'apn' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «apn»."
+
+#: ../cli/src/connections.c:4094
+msgid "Bluetooth device address: "
+msgstr "ÐдреÑа приÑтрою Bluetooth: "
+
+#: ../cli/src/connections.c:4097
+msgid "Error: 'addr' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «addr»."
+
+#: ../cli/src/connections.c:4140
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr ""
+"Помилка: «bt-type»: «%s» Ñ” некоректним; ÑкориÑтайтеÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм з переліку "
+"[%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:4185
+msgid "VLAN parent device or connection UUID: "
+msgstr "БатьківÑький приÑтрій VLAN або UUID з’єднаннÑ: "
+
+#: ../cli/src/connections.c:4188
+msgid "Error: 'dev' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «dev»."
+
+#: ../cli/src/connections.c:4192
+msgid "VLAN ID <0-4095>: "
+msgstr "Ід. VLAN <0-4095>: "
+
+#: ../cli/src/connections.c:4195
+msgid "Error: 'id' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «id»."
+
+#: ../cli/src/connections.c:4201
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr ""
+"Помилка: «id»: «%s» Ñ” некоректним; мало бути чиÑло у діапазоні <0-4095>."
+
+#: ../cli/src/connections.c:4211
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr ""
+"Помилка: «dev»: «%s» не Ñ” ні UUID, ні назвою інтерфейÑу, ні MAC-адреÑою."
+
+#: ../cli/src/connections.c:4346
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "Помилка: «mode»: %s."
+
+#: ../cli/src/connections.c:4355
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Помилка: «primary»: «%s» не Ñ” коректною назвою інтерфейÑу."
+
+#: ../cli/src/connections.c:4405 ../cli/src/connections.c:4505
+#: ../cli/src/connections.c:4712
+msgid "Error: 'master' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «master»."
+
+#: ../cli/src/connections.c:4411 ../cli/src/connections.c:4511
+#: ../cli/src/connections.c:4718
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr ""
+"ПопередженнÑ: master='%s' не поÑилаєтьÑÑ Ð½Ñ– на один з наÑвних профілів.\n"
+
+#: ../cli/src/connections.c:4414 ../cli/src/connections.c:4519
+#: ../cli/src/connections.c:4721
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"ПопередженнÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«type» у поточній верÑÑ–Ñ— буде проігноровано. У "
+"поточній верÑÑ–Ñ— підтримку підлеглих інтерфейÑів передбачено лише Ð´Ð»Ñ "
+"Ethernet.\n"
+
+#: ../cli/src/connections.c:4614
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "Помилка: «stp»: %s."
+
+#: ../cli/src/connections.c:4748
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "Помилка: «hairpin»: %s."
+
+#: ../cli/src/connections.c:4801
+msgid "Error: 'vpn-type' is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «vpn-type»."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+#| msgid "Error: 'vpn-type': %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "ПопередженнÑ: «vpn-type»: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s.\n"
+
+#: ../cli/src/connections.c:4870
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr ""
+"Помилка: «channel»: «%s» Ñ” некоректним; Ñлід викориÑтовувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· "
+"діапазону <1-13>."
+
+#: ../cli/src/connections.c:4905
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Помилка: «%s» не Ñ” коректним типом з’єднаннÑ."
+
+#: ../cli/src/connections.c:5003
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: (%d) %s"
+
+#: ../cli/src/connections.c:5007
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно додано.\n"
+
+#: ../cli/src/connections.c:5221
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«type»."
+
+#: ../cli/src/connections.c:5229
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Помилка: некоректний тип з’єднаннÑ; %s."
+
+#: ../cli/src/connections.c:5238
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Помилка: «autoconnect»: %s."
+
+#: ../cli/src/connections.c:5248
+#, c-format
+msgid "Error: 'save': %s."
+msgstr "Помилка: «save»: %s."
+
+#: ../cli/src/connections.c:5264
+msgid "Interface name [*]: "
+msgstr "Ðазва інтерфейÑу [типово *]: "
+
+#: ../cli/src/connections.c:5269
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«ifname»."
+
+#: ../cli/src/connections.c:5276
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Помилка: «ifname»: «%s» не Ñ” коректним інтерфейÑом Ñ– не дорівнює «*»."
+
+#: ../cli/src/connections.c:6064
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6146
+#, c-format
+#| msgid ""
+#| "---[ Main menu ]---\n"
+#| "goto [<setting> | <prop>] :: go to a setting or property\n"
+#| "remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+#| "value\n"
+#| "set [<setting>.<prop> <value>] :: set property value\n"
+#| "describe [<setting>.<prop>] :: describe property\n"
+#| "print [all] :: print the connection\n"
+#| "verify [all] :: verify the connection\n"
+#| "save [persistent|temporary] :: save the connection\n"
+#| "activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+#| "back :: go one level up (back)\n"
+#| "help/? [<command>] :: print this help\n"
+#| "nmcli <conf-option> <value> :: nmcli configuration\n"
+#| "quit :: exit nmcli\n"
+msgid ""
+"---[ Main menu ]---\n"
+"goto [<setting> | <prop>] :: go to a setting or property\n"
+"remove <setting>[.<prop>] | <prop> :: remove setting or reset property "
+"value\n"
+"set [<setting>.<prop> <value>] :: set property value\n"
+"describe [<setting>.<prop>] :: describe property\n"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
+"verify [all] :: verify the connection\n"
+"save [persistent|temporary] :: save the connection\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"back :: go one level up (back)\n"
+"help/? [<command>] :: print this help\n"
+"nmcli <conf-option> <value> :: nmcli configuration\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Головне меню ]---\n"
+"goto [<параметр> | <влаÑтивіÑÑ‚ÑŒ>] :: перейти до параметра або "
+"влаÑтивоÑÑ‚Ñ–\n"
+"remove <парам.>[.<влаÑÑ‚.>] | <влаÑÑ‚.> :: вилучити параметр або відновити "
+"початкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
+"set [<парам.>.<влаÑÑ‚.> <знач.>] :: вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
+"describe [<парам.>.<влаÑÑ‚.>] :: показати Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
+"print [all| <параметр>[.<влаÑÑ‚.>]] :: вивеÑти дані з’єднаннÑ\n"
+"verify [all] :: перевірити з’єднаннÑ\n"
+"save [persistent|temporary] :: зберегти з’єднаннÑ\n"
+"activate [<інтерфейÑ>] [/<ap>|<nsp>] :: задіÑти з’єднаннÑ\n"
+"back :: перейти на рівень вище (назад)\n"
+"help/? [<команда>] :: вивеÑти це довідкове повідомленнÑ\n"
+"nmcli <параметр-налашт.> <знач.> :: Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ nmcli\n"
+"quit :: завершити роботу nmcli\n"
+
+#: ../cli/src/connections.c:6173
+#, c-format
+msgid ""
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
+"\n"
+"This command enters into a setting or property for editing it.\n"
+"\n"
+"Examples: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+msgstr ""
+"goto <параметр>[.<влаÑтивіÑÑ‚ÑŒ>] | <влаÑтивіÑÑ‚ÑŒ> :: відкрити параметр/"
+"влаÑтивіÑÑ‚ÑŒ Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ\n"
+"\n"
+"За допомогою цієї команди можна відкрити параметр або влаÑтивіÑÑ‚ÑŒ Ð´Ð»Ñ "
+"редагуваннÑ.\n"
+"\n"
+"Приклади: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../cli/src/connections.c:6180
+#, c-format
+msgid ""
+"remove <setting>[.<prop>] :: remove setting or reset property value\n"
+"\n"
+"This command removes an entire setting from the connection, or if a "
+"property\n"
+"is given, resets that property to the default value.\n"
+"\n"
+"Examples: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+msgstr ""
+"remove <параметр>[.<влаÑтивіÑÑ‚ÑŒ>] :: вилучити параметр або відновити "
+"початкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
+"\n"
+"За допомогою цієї команди можна вилучити параметр Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð°Ð±Ð¾, Ñкщо "
+"вказано влаÑтивіÑÑ‚ÑŒ,\n"
+"відновити типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–.\n"
+"\n"
+"Приклади: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../cli/src/connections.c:6187
+#, c-format
+msgid ""
+"set [<setting>.<prop> <value>] :: set property value\n"
+"\n"
+"This command sets property value.\n"
+"\n"
+"Example: nmcli> set con.id My connection\n"
+msgstr ""
+"set [<параметр>.<влаÑтивіÑÑ‚ÑŒ> <значеннÑ>] :: вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
+"влаÑтивоÑÑ‚Ñ–\n"
+"\n"
+"За допомогою цієї команди можна вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–.\n"
+"\n"
+"Приклад: nmcli> s con.id My connection\n"
+
+#: ../cli/src/connections.c:6192
+#, c-format
+msgid ""
+"describe [<setting>.<prop>] :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe [<параметр>.<влаÑтивіÑÑ‚ÑŒ>] :: показати Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
+"\n"
+"Показує Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. СпиÑок уÑÑ–Ñ… параметрів Ñ– влаÑтивоÑтей NM можна "
+"знайти на Ñторінці довідника (man) nm-settings(5).\n"
+
+#: ../cli/src/connections.c:6197
+#, c-format
+msgid ""
+"print [all] :: print setting or connection values\n"
+"\n"
+"Shows current property or the whole connection.\n"
+"\n"
+"Example: nmcli ipv4> print all\n"
+msgstr ""
+"print [all] :: вивеÑти Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° або параметрів з’єднаннÑ\n"
+"\n"
+"Показати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— влаÑтивоÑÑ‚Ñ– або уÑÑ–Ñ… параметрів з’єднаннÑ.\n"
+"\n"
+"Приклад: nmcli ipv4> print all\n"
+
+#: ../cli/src/connections.c:6202
+#, c-format
+msgid ""
+"verify [all] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later. "
+"It indicates invalid values on error.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all] :: перевірити чинніÑÑ‚ÑŒ параметра або запиÑу з’єднаннÑ\n"
+"\n"
+"ПеревірÑÑ”, чи Ñ” коректним Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° або Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– чи можна його "
+"згодом зберегти. Показує ÑпиÑок некоректних значень, Ñкщо було виÑвлено "
+"помилку.\n"
+"\n"
+"Приклади: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../cli/src/connections.c:6209
+#, c-format
+msgid ""
+"save [persistent|temporary] :: save the connection\n"
+"\n"
+"Sends the connection profile to NetworkManager that either will save it\n"
+"persistently, or will only keep it in memory. 'save' without an argument\n"
+"means 'save persistent'.\n"
+"Note that once you save the profile persistently those settings are saved\n"
+"across reboot or restart. Subsequent changes can also be temporary or\n"
+"persistent, but any temporary changes will not persist across reboot or\n"
+"restart. If you want to fully remove the persistent connection, the "
+"connection\n"
+"profile must be deleted.\n"
+msgstr ""
+"save [persistent|temporary] :: зберегти з’єднаннÑ\n"
+"\n"
+"ÐадÑилає профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ NetworkManager, Ñкий або збереже ÑпиÑок\n"
+"оÑтаточно або лише триматиме його у пам’ÑÑ‚Ñ–. «save» без аргументів означає\n"
+"«save persistent».\n"
+"Зауважте, що піÑÐ»Ñ Ð¾Ñтаточного Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ параметри будуть\n"
+"відновлюватиÑÑ Ð¿Ñ–ÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÑиÑтеми Ñ– перезапуÑку програми.\n"
+"Зауважте, що наÑтупні зміни також будуть тимчаÑовими або поÑтійними,\n"
+"а тимчаÑові зміни не зберігатимутьÑÑ Ð¿Ñ–ÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ. Якщо вам "
+"потрібно\n"
+"повніÑÑ‚ÑŽ вилучити поÑтійне з’єднаннÑ, вам доведетьÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ його профіль.\n"
+
+#: ../cli/src/connections.c:6220
+#, c-format
+msgid ""
+"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
+"\n"
+"Activates the connection.\n"
+"\n"
+"Available options:\n"
+"<ifname> - device the connection will be activated on\n"
+"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when <ifname> is not "
+"specified)\n"
+msgstr ""
+"activate [<інтерфейÑ>] [/<ap>|<nsp>] :: задіÑти з’єднаннÑ\n"
+"\n"
+"Ðктивує з’єднаннÑ.\n"
+"\n"
+"Можливі параметри:\n"
+"<інтерфейÑ> - приÑтрій, Ð´Ð»Ñ Ñкого буде задіÑно з’єднаннÑ\n"
+"/<ap>|<nsp> - AP (Wi-Fi) або NSP (WiMAX) (додайте на початку «/», Ñкщо не "
+"вказано <інтерфейÑ>)\n"
+
+#: ../cli/src/connections.c:6227 ../cli/src/connections.c:6384
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: піднÑтиÑÑ Ñƒ меню на один рівень\n"
+"\n"
+
+#: ../cli/src/connections.c:6230
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<команда>] :: довідка з команди nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6233
+#, c-format
+msgid ""
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
+"\n"
+"Configures nmcli. The following options are available:\n"
+"status-line yes | no [default: no]\n"
+"save-confirmation yes | no [default: yes]\n"
+"prompt-color <0-8> [default: 0]\n"
+" 0 = normal\n"
+" 1 = black\n"
+" 2 = red\n"
+" 3 = green\n"
+" 4 = yellow\n"
+" 5 = blue\n"
+" 6 = magenta\n"
+" 7 = cyan\n"
+" 8 = white\n"
+"\n"
+"Examples: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+msgstr ""
+"nmcli [<параметр налаштуваннÑ> <значеннÑ>] :: Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ nmcli\n"
+"\n"
+"ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ nmcli. Можна керувати такими параметрами:\n"
+"status-line yes | no [типово: no]\n"
+"save-confirmation yes | no [типово: yes]\n"
+"prompt-color <0-8> [типово: 0]\n"
+" 0 = normal\n"
+" 1 = чорний\n"
+" 2 = червоний\n"
+" 3 = зелений\n"
+" 4 = жовтий\n"
+" 5 = Ñиній\n"
+" 6 = малиновий\n"
+" 7 = блакитний\n"
+" 8 = білий\n"
+"\n"
+"Приклади: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../cli/src/connections.c:6253 ../cli/src/connections.c:6390
+#, c-format
+msgid ""
+"quit :: exit nmcli\n"
+"\n"
+"This command exits nmcli. When the connection being edited is not saved, the "
+"user is asked to confirm the action.\n"
+msgstr ""
+"quit :: завершити роботу nmcli\n"
+"\n"
+"За допомогою цієї команди можна завершити роботу nmcli. Якщо редагований "
+"Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ було збережено, кориÑтувачеві буде запропоновано "
+"підтвердити дію з виходу з програми.\n"
+
+#: ../cli/src/connections.c:6258 ../cli/src/connections.c:6395
+#: ../cli/src/connections.c:6783 ../cli/src/connections.c:7676
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "Ðевідома команда «%s».\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../cli/src/connections.c:6324
+#, c-format
+msgid ""
+"---[ Property menu ]---\n"
+"set [<value>] :: set new value\n"
+"add [<value>] :: add new option to the property\n"
+"change :: change current value\n"
+"remove [<index> | <option>] :: delete the value\n"
+"describe :: describe property\n"
+"print [setting | connection] :: print property (setting/connection) "
+"value(s)\n"
+"back :: go to upper level\n"
+"help/? [<command>] :: print this help or command description\n"
+"quit :: exit nmcli\n"
+msgstr ""
+"---[ Меню влаÑтивоÑтей ]---\n"
+"set [<значеннÑ>] :: вÑтановити нове значеннÑ\n"
+"add [<значеннÑ>] :: додати новий параметр до влаÑтивоÑÑ‚Ñ–\n"
+"change :: змінити поточне значеннÑ\n"
+"remove [<індекÑ> | <параметр>] :: вилучити значеннÑ\n"
+"describe :: показати Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
+"print [параметр | з’єднаннÑ] :: вивеÑти Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– (параметра/"
+"з’єднаннÑ)\n"
+"back :: перейти на рівень вище\n"
+"help/? [<команда>] :: вивеÑти цю довідку або Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸\n"
+"quit :: вийти з nmcli\n"
+
+#: ../cli/src/connections.c:6349
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<значеннÑ>] :: вÑтановити нове значеннÑ\n"
+"\n"
+"За допомогою цієї команди можна змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– на вказане "
+"<значеннÑ>\n"
+
+#: ../cli/src/connections.c:6353
+#, c-format
+msgid ""
+"add [<value>] :: append new value to the property\n"
+"\n"
+"This command adds provided <value> to this property, if the property is of a "
+"container type. For single-valued properties the property value is replaced "
+"(same as 'set').\n"
+msgstr ""
+"add [<значеннÑ>] :: допиÑати нове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾ влаÑтивоÑÑ‚Ñ–\n"
+"\n"
+"За допомогою цієї команди можна додати вказане <значеннÑ> до влаÑтивоÑÑ‚Ñ–, "
+"Ñкщо влаÑтивіÑÑ‚ÑŒ належить до типу контейнерів. Якщо влаÑтивіÑÑ‚ÑŒ ÑкладаєтьÑÑ "
+"лише з одного значеннÑ, це Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ замінено (те Ñаме, що Ñ– «set»).\n"
+
+#: ../cli/src/connections.c:6359
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: змінити поточне значеннÑ\n"
+"\n"
+"Показує поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– надає змогу його редагувати.\n"
+
+#: ../cli/src/connections.c:6363
+#, c-format
+msgid ""
+"remove [<value>|<index>|<option name>] :: delete the value\n"
+"\n"
+"Removes the property value. For single-valued properties, this sets the\n"
+"property back to its default value. For container-type properties, this "
+"removes\n"
+"all the values of that property, or you can specify an argument to remove "
+"just\n"
+"a single item or option. The argument is either a value or index of the item "
+"to\n"
+"remove, or an option name (for properties with named options).\n"
+"\n"
+"Examples: nmcli ipv4.dns> remove 8.8.8.8\n"
+" nmcli ipv4.dns> remove 2\n"
+" nmcli bond.options> remove downdelay\n"
+"\n"
+msgstr ""
+"remove [<значеннÑ>|<індекÑ>|<назва паарметра>] :: вилучити значеннÑ\n"
+"\n"
+"Вилучає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. Ð”Ð»Ñ Ð²Ð»Ð°ÑтивоÑтей з одним значеннÑм,\n"
+"вÑтановлює типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. Ð”Ð»Ñ Ð²Ð»Ð°ÑтивоÑтей типу контейнера,\n"
+"вилучає уÑÑ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. Ви також можете вказати аргумент длÑ\n"
+"Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¾ÐºÑ€ÐµÐ¼Ð¾Ð³Ð¾ запиÑу або параметра. Ðргументом може бути Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾\n"
+"Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð¿Ð¸Ñу, Ñкий Ñлід вилучити, або назва параметра (Ð´Ð»Ñ Ð²Ð»Ð°ÑтивоÑтей\n"
+"з іменованими параметрами).\n"
+"\n"
+"Приклади: nmcli ipv4.dns> remove 8.8.8.8\n"
+" nmcli ipv4.dns> remove 2\n"
+" nmcli bond.options> remove downdelay\n"
+"\n"
+
+#: ../cli/src/connections.c:6374
+#, c-format
+msgid ""
+"describe :: describe property\n"
+"\n"
+"Shows property description. You can consult nm-settings(5) manual page to "
+"see all NM settings and properties.\n"
+msgstr ""
+"describe :: показати Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
+"\n"
+"Показує Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. СпиÑок уÑÑ–Ñ… параметрів Ñ– влаÑтивоÑтей NM можна "
+"знайти на Ñторінці довідника (man) nm-settings(5).\n"
+
+#: ../cli/src/connections.c:6379
+#, c-format
+msgid ""
+"print [property|setting|connection] :: print property (setting, connection) "
+"value(s)\n"
+"\n"
+"Shows property value. Providing an argument you can also display values for "
+"the whole setting or connection.\n"
+msgstr ""
+"print [влаÑтивіÑÑ‚ÑŒ|параметр|з’єднаннÑ] :: вивеÑти Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–, "
+"параметра або з’єднаннÑ\n"
+"\n"
+"Виводить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. За допомогою аргументу команди ви можете "
+"виводити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑƒÑього параметра або уÑього запиÑу з’єднаннÑ.\n"
+
+#: ../cli/src/connections.c:6387
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<команда>] :: довідка з команди nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6474
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Помилка: невдала Ñпроба активації з’єднаннÑ.\n"
+
+#: ../cli/src/connections.c:6552
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "Помилка: параметр «%s» Ñ” обов’Ñзковим, його не можна вилучати.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../cli/src/connections.c:6570
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ Тип: %s | Ðазва: %s | UUID: %s | Ðе збережено: %s | Тимч.: %s ]\n"
+
+#: ../cli/src/connections.c:6605
+#, c-format
+#| msgid "The connection is not saved. Do you really want to quit? [y/n]\n"
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr ""
+"Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збережено. Ви Ñправді хочете завершити роботу програми? %s"
+
+#: ../cli/src/connections.c:6650
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' in the main menu to restore it.\n"
+msgstr ""
+"Профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено з іншого клієнта. Ви можете ввеÑти «save» у "
+"головному меню, щоб відновити його.\n"
+
+#: ../cli/src/connections.c:6672 ../cli/src/connections.c:7087
+#: ../cli/src/connections.c:7142
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Введіть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: "
+
+#: ../cli/src/connections.c:6687 ../cli/src/connections.c:6705
+#: ../cli/src/connections.c:7091 ../cli/src/connections.c:7147
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»: %s\n"
+
+#: ../cli/src/connections.c:6699
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: "
+
+#: ../cli/src/connections.c:6726
+#, c-format
+msgid "Error: %s\n"
+msgstr "Помилка: %s\n"
+
+#: ../cli/src/connections.c:6732 ../cli/src/connections.c:7226
+#: ../cli/src/connections.c:7267
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: %s\n"
+
+#: ../cli/src/connections.c:6753
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Ðевідомий аргумент команди: «%s»\n"
+
+#: ../cli/src/connections.c:6879
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "ДоÑтупні параметри: %s\n"
+
+#: ../cli/src/connections.c:6888
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Помилка: некоректна назва параметра; %s\n"
+
+#: ../cli/src/connections.c:6905
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "ДоÑтупні влаÑтивоÑÑ‚Ñ–: %s\n"
+
+#: ../cli/src/connections.c:6913
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Помилка: влаÑтивіÑÑ‚ÑŒ %s\n"
+
+#: ../cli/src/connections.c:6954
+#, c-format
+#| msgid ""
+#| "Saving the connection with 'autoconnect=yes'. That might result in an "
+#| "immediate activation of the connection.\n"
+#| "Do you still want to save? [yes] "
+msgid ""
+"Saving the connection with 'autoconnect=yes'. That might result in an "
+"immediate activation of the connection.\n"
+"Do you still want to save? %s"
+msgstr ""
+"Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· «autoconnect=yes». ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ "
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° може призвеÑти до негайного задіÑÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ.\n"
+"Хочете зберегти запиÑ? %s"
+
+#: ../cli/src/connections.c:7029
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Можна редагувати такі параметри: %s\n"
+
+#: ../cli/src/connections.c:7056
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"Профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено з іншого клієнта. Ви можете ввеÑти «save», "
+"щоб відновити його.\n"
+
+#: ../cli/src/connections.c:7085 ../cli/src/connections.c:7140
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Можливі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»: %s\n"
+
+#: ../cli/src/connections.c:7095 ../cli/src/connections.c:7309
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr ""
+"Помилка: не вибрано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°; коректними значеннÑми Ñ” такі: [%s]\n"
+
+#: ../cli/src/connections.c:7096
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"Ñпочатку ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ «goto <параметр>» або командою «set "
+"<параметр>.<влаÑтивіÑÑ‚ÑŒ>»\n"
+
+#: ../cli/src/connections.c:7110 ../cli/src/connections.c:7246
+#: ../cli/src/connections.c:7326
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr ""
+"Помилка: некоректний аргумент параметра, «%s»; коректними є такі аргументи: "
+"[%s]\n"
+
+#: ../cli/src/connections.c:7120
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Помилка: не вказано параметра Ð´Ð»Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»\n"
+
+#: ../cli/src/connections.c:7127
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s\n"
+
+#: ../cli/src/connections.c:7174
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Помилка: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»\n"
+
+#: ../cli/src/connections.c:7187
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Можна редагувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð°ÐºÐ¸Ñ… влаÑтивоÑтей: %s\n"
+
+#: ../cli/src/connections.c:7231
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Помилка: не вказано аргументу; коректними аргументами є такі: [%s]\n"
+
+#: ../cli/src/connections.c:7244
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "У Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” параметра «%s».\n"
+
+#: ../cli/src/connections.c:7285
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Помилка: влаÑтивоÑÑ‚Ñ– %s Ñ– не Ñ” назвою параметра.\n"
+
+#: ../cli/src/connections.c:7310
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"ÑкориÑтайтеÑÑ Ñпочатку командою «goto <параметр> або командою «describe "
+"<параметр>.<влаÑтивіÑÑ‚ÑŒ>»\n"
+
+#: ../cli/src/connections.c:7351
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr ""
+"Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s Ñ– не Ñ” коректною назвою параметра.\n"
+
+#: ../cli/src/connections.c:7380
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Помилка: невідомий параметр: «%s»\n"
+
+#: ../cli/src/connections.c:7385
+#, c-format
+#| msgid "Setting '%s' is not present in the connection.\n"
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "Помилка: у Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” параметра «%s».\n"
+
+#: ../cli/src/connections.c:7410
+#, c-format
+#| msgid "Error: invalid property: %s\n"
+msgid "Error: invalid property: %s%s\n"
+msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s%s\n"
+
+#: ../cli/src/connections.c:7412
+#| msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgid ", neither a valid setting name"
+msgstr ", і не є коректною назвою параметра"
+
+#: ../cli/src/connections.c:7432
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Перевірка параметра «%s»: %s\n"
+
+#: ../cli/src/connections.c:7439
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Перевірка з’єднаннÑ: %s\n"
+
+#: ../cli/src/connections.c:7457
+#, c-format
+msgid "Error: invalid argument '%s'\n"
+msgstr "Помилка: некоректний аргумент «%s»\n"
+
+#: ../cli/src/connections.c:7491
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "Помилка: не вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): (%d) %s\n"
+
+#: ../cli/src/connections.c:7499
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно збережено.\n"
+
+#: ../cli/src/connections.c:7500
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно оновлено.\n"
+
+#: ../cli/src/connections.c:7534
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Помилка: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ пройшло перевірки: %s\n"
+
+#: ../cli/src/connections.c:7535
+msgid "(unknown error)"
+msgstr "(невідома помилка)"
+
+#: ../cli/src/connections.c:7556
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "Помилка: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збережено. Спочатку введіть «save».\n"
+
+#: ../cli/src/connections.c:7560
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Помилка: некоректне з’єднаннÑ: %s\n"
+
+#: ../cli/src/connections.c:7571
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти з’єднаннÑ: %s.\n"
+
+#: ../cli/src/connections.c:7581
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): (%d) %s\n"
+
+#: ../cli/src/connections.c:7587
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"СпоÑтерігаємо за активацією Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (натиÑніть будь-Ñку клавішу, щоб "
+"продовжити)\n"
+
+#: ../cli/src/connections.c:7625
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Помилка: Ñ€Ñдок Ñтану: %s\n"
+
+#: ../cli/src/connections.c:7633
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Помилка: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr ""
+"Помилковий номер кольору: «%s»; Ñлід викориÑтовувати номери з діапазону "
+"<0-8>\n"
+
+#: ../cli/src/connections.c:7653
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Поточне Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ nmcli:\n"
+
+#: ../cli/src/connections.c:7661
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr ""
+"Ðекоректний параметр налаштуваннÑ, «%s»; можна викориÑтовувати лише такі: "
+"[%s]\n"
+
+#: ../cli/src/connections.c:7904
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "Помилка: можна вказувати лише один з параметрів «id», uuid або «path»."
+
+#: ../cli/src/connections.c:7916 ../cli/src/connections.c:8106
+#: ../cli/src/connections.c:8113
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Помилка: невідоме з’єднаннÑ, «%s»."
+
+#: ../cli/src/connections.c:7931
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"ПопередженнÑ: Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñтвореного запиÑу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»; аргумент "
+"«type» проігноровано\n"
+
+#: ../cli/src/connections.c:7934
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"ПопередженнÑ: Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñтвореного запиÑу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»; аргумент "
+"«con-name» проігноровано\n"
+
+#: ../cli/src/connections.c:7948
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Коректні типи з’єднань: %s\n"
+
+#: ../cli/src/connections.c:7950
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Помилка: некоректний тип з’єднаннÑ; %s\n"
+
+#: ../cli/src/connections.c:7989
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| Інтерактивний редактор з’єднань nmcli |==="
+
+#: ../cli/src/connections.c:7992
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñвного Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: «%s»"
+
+#: ../cli/src/connections.c:7994
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»"
+
+#: ../cli/src/connections.c:7996
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Введіть «help» або «?», щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком доÑтупних команд."
+
+#: ../cli/src/connections.c:7998
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Щоб ознайомитиÑÑ Ð· докладним опиÑом влаÑтивоÑÑ‚Ñ–, ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ "
+"«describe [<параметр>.<влаÑтивіÑÑ‚ÑŒ>]."
+
+#: ../cli/src/connections.c:8034
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Помилка: не вдалоÑÑ Ð²Ð½ÐµÑти зміни до запиÑу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: (%d) %s"
+
+#: ../cli/src/connections.c:8040
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Зміни до Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно внеÑено.\n"
+
+#: ../cli/src/connections.c:8081
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Помилка: не надано аргументів."
+
+#: ../cli/src/connections.c:8100
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Помилка: не вказано ідентифікатора з’єднаннÑ."
+
+#: ../cli/src/connections.c:8122 ../cli/src/connections.c:8135
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Помилка: пропущено аргумент <параметр>.<влаÑтивіÑÑ‚ÑŒ>."
+
+#: ../cli/src/connections.c:8140
+#, c-format
+msgid "Error: value for '%s' is missing."
+msgstr "Помилка: не вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»."
+
+#: ../cli/src/connections.c:8158
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Помилка: некоректний аргумент <параметр>.<влаÑтивіÑÑ‚ÑŒ>, «%s»."
+
+#: ../cli/src/connections.c:8166
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Помилка: некоректний або заборонений параметр, «%s»: %s."
+
+#: ../cli/src/connections.c:8187
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ, «%s»: %s."
+
+#: ../cli/src/connections.c:8198
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Помилка: не вдалоÑÑ Ð²Ð½ÐµÑти зміни до %s.%s: %s."
+
+#: ../cli/src/connections.c:8216
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· %s.%s: %s."
+
+#: ../cli/src/connections.c:8252
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
+
+#: ../cli/src/connections.c:8323
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Помилка: невідоме з’єднаннÑ: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:8359
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Помилка: не можна вилучати невідомі з’єднаннÑ: %s."
+
+#: ../cli/src/connections.c:8430
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл «%s»\n"
+
+#: ../cli/src/connections.c:8615
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Помилка: «%s» не є коректною командою набору «connection»."
+
+#: ../cli/src/connections.c:8684 ../cli/src/network-manager.c:615
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ параметри ÑиÑтеми."
+
+#: ../cli/src/connections.c:8694
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr ""
+"Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок з’єднань: Ñлужба параметрів не працює."
+
+#. define some prompts
+#: ../cli/src/devices.c:70
+msgid "Interface: "
+msgstr "ІнтерфейÑ: "
+
+#. 3
+#. 16
+#: ../cli/src/devices.c:78 ../cli/src/devices.c:106
+msgid "CONNECTION"
+msgstr "З’ЄДÐÐÐÐЯ"
+
+#. 4
+#. 17
+#: ../cli/src/devices.c:79 ../cli/src/devices.c:107
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
#. 2
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:92
msgid "VENDOR"
msgstr "ВИРОБÐИК"
#. 3
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:93
msgid "PRODUCT"
msgstr "ПРОДУКТ"
#. 4
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:94
msgid "DRIVER"
msgstr "ДРÐЙВЕР"
#. 5
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:95
msgid "DRIVER-VERSION"
msgstr "ВЕРСІЯ-ДРÐЙВЕРÐ"
#. 6
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:96
msgid "FIRMWARE-VERSION"
msgstr "ВЕРСІЯ-МІКРОПРОГРÐМИ"
#. 7
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:97
msgid "HWADDR"
msgstr "ÐП.ÐДРЕСÐ"
-#. 9
-#: ../cli/src/devices.c:118
+#. 8
+#: ../cli/src/devices.c:98 ../tui/nmt-page-ethernet.c:86
+#: ../tui/nmt-page-infiniband.c:96 ../tui/nmt-page-vlan.c:138
+#: ../tui/nmt-page-wifi.c:364
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../cli/src/devices.c:100
msgid "REASON"
msgstr "ПРИЧИÐÐ"
-#. 10
-#: ../cli/src/devices.c:119
+#. 11
+#: ../cli/src/devices.c:101
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:120
+#. 12
+#: ../cli/src/devices.c:102
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:121
+#. 13
+#: ../cli/src/devices.c:103
msgid "NM-MANAGED"
msgstr "КЕРОВÐÐЕ-NM"
-#. 14
-#: ../cli/src/devices.c:123
+#. 15
+#: ../cli/src/devices.c:105
msgid "FIRMWARE-MISSING"
msgstr "ПОТРІБÐИЙ-МІКРОКОД"
-#. 15
-#: ../cli/src/devices.c:124
-msgid "CONNECTION"
-msgstr "З’ЄДÐÐÐÐЯ"
+#. 0
+#: ../cli/src/devices.c:118
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "ДОСТУПÐІ-ШЛЯХИ-З’ЄДÐÐÐÐЯ"
+
+#. 1
+#: ../cli/src/devices.c:119
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "ДОСТУПÐІ-З’ЄДÐÐÐÐЯ"
#. 0
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:128
msgid "CARRIER-DETECT"
msgstr "ВИЗÐ.ÐОСІЯ"
#. 1
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:129
msgid "SPEED"
msgstr "ШВИДКІСТЬ"
#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:138
msgid "CARRIER"
msgstr "ÐОСІЙ"
#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:147 ../cli/src/devices.c:568
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:148
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:576
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:150
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:151
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:152 ../cli/src/devices.c:242
+msgid "AP"
+msgstr "ТД"
+
+#. 6
+#: ../cli/src/devices.c:153
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:162
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:163
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:164
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:170
+#: ../cli/src/devices.c:165
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:166
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:175 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:176
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../cli/src/devices.c:177 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:183
+#. 3
+#: ../cli/src/devices.c:178
msgid "MODE"
msgstr "РЕЖИМ"
-#. 3
-#: ../cli/src/devices.c:184
+#. 4
+#: ../cli/src/devices.c:179
+msgid "CHAN"
+msgstr "КÐÐÐЛ"
+
+#. 5
+#: ../cli/src/devices.c:180
msgid "FREQ"
msgstr "ЧÐСТОТÐ"
-#. 4
-#: ../cli/src/devices.c:185
+#. 6
+#: ../cli/src/devices.c:181
msgid "RATE"
msgstr "ШВИДКІСТЬ"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:186 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:182 ../cli/src/devices.c:202
msgid "SIGNAL"
msgstr "СИГÐÐЛ"
-#. 6
-#: ../cli/src/devices.c:187
+#. 8
+#: ../cli/src/devices.c:183
+msgid "BARS"
+msgstr "ГРÐФ"
+
+#. 9
+#: ../cli/src/devices.c:184
msgid "SECURITY"
msgstr "ЗÐХИСТ"
-#. 7
-#: ../cli/src/devices.c:188
+#. 10
+#: ../cli/src/devices.c:185
msgid "WPA-FLAGS"
msgstr "ПРÐПОРЦІ WPA"
-#. 8
-#: ../cli/src/devices.c:189
+#. 11
+#: ../cli/src/devices.c:186
msgid "RSN-FLAGS"
msgstr "ПРÐПОРЦІ RSN"
-#. 10
-#. 4
-#: ../cli/src/devices.c:191 ../cli/src/devices.c:207
-msgid "ACTIVE"
-msgstr "ÐКТИВÐИЙ"
+#. 14
+#: ../cli/src/devices.c:189
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../cli/src/devices.c:201 ../cli/src/devices.c:245
+msgid "NSP"
+msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:219
+#: ../cli/src/devices.c:216
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:228
-#| msgid "UUID"
+#: ../cli/src/devices.c:225
msgid "ID"
msgstr "Ід"
+#. 0
+#: ../cli/src/devices.c:240
+msgid "CAPABILITIES"
+msgstr "МОЖЛИВОСТІ"
+
+#. 1
+#: ../cli/src/devices.c:241
+msgid "WIFI-PROPERTIES"
+msgstr "ПÐРÐМЕТРИ WIFI"
+
+#. 3
+#: ../cli/src/devices.c:243
+msgid "WIRED-PROPERTIES"
+msgstr "ПÐРÐМЕТРИ WIRED"
+
+#. 4
#: ../cli/src/devices.c:244
+msgid "WIMAX-PROPERTIES"
+msgstr "ПÐРÐМЕТРИ WIMAX"
+
+#. 10
+#: ../cli/src/devices.c:250 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#. 12
+#: ../cli/src/devices.c:252
+msgid "CONNECTIONS"
+msgstr "З’ЄДÐÐÐÐЯ"
+
+#: ../cli/src/devices.c:277
#, c-format
-#| msgid ""
-#| "Usage: nmcli dev { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi | wimax }\n"
-#| "\n"
-#| " COMMAND := { status | list | disconnect | wifi }\n"
-#| "\n"
-#| " status\n"
-#| " list [iface <iface>]\n"
-#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-#| " wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-#| " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-#| "[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-#| " [--private] [--nowait] [--timeout <timeout>]\n"
-#| " wimax [list [iface <iface>] [nsp <name>]]\n"
-#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
-"[iface <iface>] [bssid <BSSID>] [name <name>]\n"
-" [--private] [--nowait] [--timeout <timeout>]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\n"
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"ВикориÑтаннÑ: nmcli приÑтрій { КОМÐÐДР| help }\n"
+"КориÑтуваннÑ: nmcli приÑтрій { КОМÐÐДР| help }\n"
"\n"
-" КОМÐÐДР:= { status | list | disconnect | wifi | wimax }\n"
+" КОМÐÐДР:= { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" КОМÐÐДР:= { status | list | disconnect | wifi }\n"
+" КОМÐÐДР:= { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <інтерфейÑ>]\n"
-" disconnect iface <інтерфейÑ> [--nowait] [--timeout <очікуваннÑ>]\n"
+"\n"
+" show [ <інтерфейÑ>]\n"
+"\n"
+" connect <інтерфейÑ>\n"
+"\n"
+" disconnect <інтерфейÑ> [--nowait] [--timeout <очікуваннÑ>]\n"
+"\n"
" wifi [list [iface <інтерфейÑ>] [bssid <BSSID>]]\n"
+"\n"
" wifi connect <(B)SSID> [password <пароль>] [wep-key-type key|phrase] "
-"[iface <інтерфейÑ>] [bssid <BSSID>] [name <назва>]\n"
-" [--private] [--nowait] [--timeout <Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ>]\n"
-" wimax [list [iface <інтерфейÑ>] [nsp <назва>]]\n"
+"[ifname <інтерфейÑ>]\n"
+" [bssid <BSSID>] [name <назва>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <назва інтерфейÑу>]\n"
+"\n"
+" wimax [list [ifname <назва інтерфейÑу>] [nsp <назва>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:301
+#, c-format
+msgid ""
+"Usage: nmcli device status { help }\n"
+"\n"
+"Show status for all devices.\n"
+"By default, the following columns are shown:\n"
+" DEVICE - interface name\n"
+" TYPE - device type\n"
+" STATE - device state\n"
+" CONNECTION - connection activated on device (if any)\n"
+"Displayed columns can be changed using '--fields' global option. 'status' "
+"is\n"
+"the default command, which means 'nmcli device' calls 'nmcli device "
+"status'.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli device status { help }\n"
+"\n"
+"Показати Ñтан Ð´Ð»Ñ ÑƒÑÑ–Ñ… приÑтроїв.\n"
+"Типово, буде показано такі Ñтовпчики даних:\n"
+" ПРИСТРІЙ - назва інтерфейÑу\n"
+" ТИП - тип приÑтрою\n"
+" СТÐÐ - Ñтан приÑтрою\n"
+" З’ЄДÐÐÐÐЯ - активоване на приÑтрої Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (Ñкщо Ñ”)\n"
+"Перелік показаних Ñтовпчиків можна змінити за допомогою загального параметра "
+"«--fields».\n"
+"«status» Ñ” типовою командою. Отже, «nmcli device» — це те Ñаме, що «nmcli "
+"device status».\n"
+"\n"
+
+#: ../cli/src/devices.c:317
+#, c-format
+msgid ""
+"Usage: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Show details of device(s).\n"
+"The command lists details for all devices, or for a given device.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli device show { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [<назва інтерфейÑу>]\n"
+"\n"
+"Показати дані щодо приÑтроїв.\n"
+"Буде виведено дані щодо уÑÑ–Ñ… приÑтроїв або лише вказаного за допомогою "
+"аргументу приÑтрою.\n"
+"\n"
+
+#: ../cli/src/devices.c:329
+#, c-format
+msgid ""
+"Usage: nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connect the device.\n"
+"NetworkManager will try to find a suitable connection that will be "
+"activated.\n"
+"It will also consider connections that are not set to auto-connect.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli device connect { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := <ifname>\n"
+"\n"
+"З’єднати приÑтрій.\n"
+"NetworkManager намагатиметьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідне з’єднаннÑ, Ñке буде "
+"активовано.\n"
+"Програма братиме до уваги з’єднаннÑ, Ð´Ð»Ñ Ñких не увімкнено автоматичне "
+"з’єднаннÑ.\n"
+"\n"
+
+#: ../cli/src/devices.c:342
+#, c-format
+msgid ""
+"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Disconnect the device.\n"
+"The command disconnects the device and prevents it from auto-activating\n"
+"further connections without user/manual intervention.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli device disconnect { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := <назва інтерфейÑу>\n"
+"\n"
+"Від’єднати приÑтрій.\n"
+"За допомогою цієї команди можна від’єднати приÑтрій Ñ– заборонити його\n"
+"повторну активацію Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¸Ñ… з’єднань без ручного втручаннÑ.\n"
+"\n"
+
+#: ../cli/src/devices.c:355
+#, c-format
+msgid ""
+"Usage: nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on Wi-Fi devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"List available Wi-Fi access points. The 'ifname' and 'bssid' options can be\n"
+"used to list APs for a particular interface, or with a specific BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type key|"
+"phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Connect to a Wi-Fi network specified by SSID or BSSID. The command creates\n"
+"a new connection and then activates it on a device. This is a command-line\n"
+"counterpart of clicking an SSID in a GUI client. The command always creates\n"
+"a new connection and thus it is mainly useful for connecting to new Wi-Fi\n"
+"networks. If a connection for the network already exists, it is better to\n"
+"bring up the existing profile as follows: nmcli con up id <name>. Note that\n"
+"only open, WEP and WPA-PSK networks are supported at the moment. It is also\n"
+"assumed that IP configuration is obtained via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Request that NetworkManager immediately re-scan for available access "
+"points.\n"
+"NetworkManager scans Wi-Fi networks periodically, but in some cases it "
+"might\n"
+"be useful to start scanning manually. Note that this command does not show\n"
+"the APs, use 'nmcli device wifi list' for that.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli device wifi { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"Виконати дію над приÑтроÑми Wi-Fi.\n"
+"\n"
+"ÐРГУМЕÐТИ := [list [ifname <назва інтерфейÑу>] [bssid <BSSID>]]\n"
+"\n"
+"Показати ÑпиÑок доÑтупних точок доÑтупу Wi-Fi. Параметрами «ifname» та\n"
+"«bssid» можна ÑкориÑтатиÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑку точок доÑтупу Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾\n"
+"інтерфейÑу або BSSID.\n"
+"\n"
+"ÐРГУМЕÐТИ := connect <(B)SSID> [password <пароль>] [wep-key-type key|phrase] "
+"[ifname <назва інтерфейÑу>]\n"
+" [bssid <BSSID>] [name <назва>] [private yes|no]\n"
+"\n"
+"Ð’Ñтановити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· мережею Wi-Fi, вказаною за допомогою SSID або BSSID.\n"
+"Програма Ñтворює нове Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– активує його на приÑтрої. Це аналог "
+"клацаннÑ\n"
+"на пункті SSID у графічному клієнті. У результаті Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ завжди\n"
+"ÑтворюєтьÑÑ Ð½Ð¾Ð²Ðµ з’єднаннÑ, тому вона, в оÑновному, кориÑна Ð´Ð»Ñ "
+"вÑтановленнÑ\n"
+"Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· новими мережами Wi-Fi. Якщо Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· певною мережею вже "
+"Ñ–Ñнує,\n"
+"краще викликати наÑвний профіль у такий ÑпоÑіб: nmcli con up id <назва>.\n"
+"Зауважте, що у поточній верÑÑ–Ñ— передбачено підтримку лише відкритих мереж "
+"та\n"
+"мереж WEP Ñ– WPA-PSK. Також припуÑкаєтьÑÑ, що Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ IP отримуютьÑÑ Ð·Ð°\n"
+"допомогою DHCP.\n"
+"\n"
+"ÐРГУМЕÐТИ := rescan [[ifname] <назва інтерфейÑу>]\n"
+"\n"
+"Ðаказати NetworkManager негайно виконати повторний пошук уÑÑ–Ñ… точок "
+"доÑтупу.\n"
+"NetworkManager виконує періодичний пошук мереж Wi-Fi автоматично, але іноді\n"
+"може виникнути потреба у ініціюванні пошуку мереж вручну. Зауважте, що\n"
+"Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° не виводить ÑпиÑку точок доÑтупу. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑку Ñлід\n"
+"ÑкориÑтатиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ «nmcli device wifi list».\n"
"\n"
-#: ../cli/src/devices.c:347
+#: ../cli/src/devices.c:389
+#, c-format
+msgid ""
+"Usage: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Perform operation on WiMAX devices.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"List available WiMAX NSPs. The 'ifname' and 'nsp' options can be used to\n"
+"list networks for a particular interface, or with a specific NSP.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli device wimax { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"Виконати дію над приÑтроÑми WiMAX.\n"
+"\n"
+"ÐРГУМЕÐТИ := [list [ifname <назва інтерфейÑу>] [nsp <назва>]]\n"
+"\n"
+"Показати ÑпиÑок доÑтупних Ñлужб Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ñлуг WiMAX. Параметрами\n"
+"«ifname» та «nsp» можна ÑкориÑтатиÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑку мереж\n"
+"Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ інтерфейÑу або певної Ñлужби Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ñлуг.\n"
+"\n"
+
+#: ../cli/src/devices.c:483
msgid "(none)"
msgstr "(немає)"
-#: ../cli/src/devices.c:403
+#: ../cli/src/devices.c:552
#, c-format
msgid "%u MHz"
msgstr "%u МГц"
-#: ../cli/src/devices.c:404
+#: ../cli/src/devices.c:553
#, c-format
-msgid "%u MB/s"
+msgid "%u Mbit/s"
msgstr "%u МБ/Ñ"
-#: ../cli/src/devices.c:413
-msgid "Encrypted: "
-msgstr "Зашифровано: "
-
-#: ../cli/src/devices.c:418
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:572
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:420
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:581
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:422
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:425
-msgid "Enterprise "
-msgstr "Enterprise "
-
-#: ../cli/src/devices.c:434
+#: ../cli/src/devices.c:597
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:435
-msgid "Infrastructure"
+#: ../cli/src/devices.c:598
+msgid "Infra"
msgstr "ІнфраÑтруктура"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:630
msgid "Home"
msgstr "Домівка"
-#: ../cli/src/devices.c:474
+#: ../cli/src/devices.c:633
msgid "Partner"
msgstr "Партнер"
-#: ../cli/src/devices.c:477
+#: ../cli/src/devices.c:636
msgid "Roaming"
msgstr "Роумінг"
-#: ../cli/src/devices.c:549
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Помилка: «dev list»: %s"
-
-#: ../cli/src/devices.c:551
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Помилка: «dev list»: %s; дозволені полÑ: %s"
-
-#: ../cli/src/devices.c:560
+#: ../cli/src/devices.c:730
msgid "Device details"
msgstr "Дані щодо приÑтрою"
-#: ../cli/src/devices.c:607 ../cli/src/devices.c:610 ../cli/src/devices.c:1086
-#: ../cli/src/utils.c:479
+#: ../cli/src/devices.c:742
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "Помилка: «device show»: %s"
+
+#: ../cli/src/devices.c:792 ../cli/src/devices.c:795 ../cli/src/devices.c:1342
+#: ../cli/src/devices.c:1484
msgid "(unknown)"
msgstr "(невідомо)"
-#: ../cli/src/devices.c:619
-msgid "not connected"
-msgstr "не з’єднано"
-
-#: ../cli/src/devices.c:646
+#: ../cli/src/devices.c:832
#, c-format
msgid "%u Mb/s"
msgstr "%u Мб/Ñ"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:918
msgid "on"
msgstr "увімкн."
-#: ../cli/src/devices.c:720
+#: ../cli/src/devices.c:918
msgid "off"
msgstr "вимкн."
-#: ../cli/src/devices.c:928
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Помилка: «dev status»: %s"
-
-#: ../cli/src/devices.c:930
+#: ../cli/src/devices.c:1193
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Помилка: «dev status»: %s; дозволені полÑ: %s"
+msgid "Error: 'device status': %s"
+msgstr "Помилка: «device status»: %s"
-#: ../cli/src/devices.c:953
+#. Add headers
+#: ../cli/src/devices.c:1211
msgid "Status of devices"
msgstr "Стан приÑтрою"
-#: ../cli/src/devices.c:984
+#: ../cli/src/devices.c:1242
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Помилка: не вказано аргументу «%s»."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Помилка: некоректний додатковий аргумент, «%s»."
-#: ../cli/src/devices.c:1025 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1331 ../cli/src/devices.c:1978
+#: ../cli/src/devices.c:1270 ../cli/src/devices.c:1432
+#: ../cli/src/devices.c:1566 ../cli/src/devices.c:1705
+#: ../cli/src/devices.c:2449
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Помилка: не знайдено приÑтрій «%s»."
-#: ../cli/src/devices.c:1048
+#: ../cli/src/devices.c:1325
+#, c-format
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "ПриÑтрій «%s» уÑпішно активовано з «%s».\n"
+
+#: ../cli/src/devices.c:1341
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ приÑтрій: %s"
+
+#: ../cli/src/devices.c:1349
+#, c-format
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ приÑтрій: приÑтрій було від’єднано"
+
+#: ../cli/src/devices.c:1362
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "ПриÑтрій «%s» було з’єднано.\n"
+
+#: ../cli/src/devices.c:1391 ../cli/src/devices.c:1400
+#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1534
+#, c-format
+msgid "Error: No interface specified."
+msgstr "Помилка: мало бути вказано інтерфейÑ."
+
+#: ../cli/src/devices.c:1406 ../cli/src/devices.c:1540
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Помилка: некоректний додатковий аргумент, «%s»."
+
+#: ../cli/src/devices.c:1469
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Виконано: приÑтрій «%s» уÑпішно від’єднано."
-#: ../cli/src/devices.c:1083
+#: ../cli/src/devices.c:1481
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Помилка: невдала Ñпроба Ð²Ñ–Ð´â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): %s"
-#: ../cli/src/devices.c:1096
+#: ../cli/src/devices.c:1495
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "ПриÑтрій «%s» було від’єднано.\n"
-#: ../cli/src/devices.c:1159
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Помилка: мало бути вказано інтерфейÑ."
+#: ../cli/src/devices.c:1637
+msgid "Wi-Fi scan list"
+msgstr "СпиÑок ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Wi-Fi"
-#: ../cli/src/devices.c:1289
+#: ../cli/src/devices.c:1675
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Помилка: «dev wifi»: %s"
+msgid "Error: 'device wifi': %s"
+msgstr "Помилка: «device wifi»: %s"
-#: ../cli/src/devices.c:1291
-#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Помилка: «dev wifi»: %s; дозволені полÑ: %s"
-
-#: ../cli/src/devices.c:1314
-msgid "WiFi scan list"
-msgstr "СпиÑок ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ WiFi"
-
-#: ../cli/src/devices.c:1351 ../cli/src/devices.c:1405
+#: ../cli/src/devices.c:1728 ../cli/src/devices.c:1797
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Помилка: не знайдено точки доÑтупу з bssid «%s»."
-#: ../cli/src/devices.c:1368
+#: ../cli/src/devices.c:1752 ../cli/src/devices.c:2144
+#: ../cli/src/devices.c:2306
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Помилка: приÑтрій «%s» не Ñ” приÑтроєм WiFi."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Помилка: приÑтрій «%s» не Ñ” приÑтроєм Wi-Fi."
-#: ../cli/src/devices.c:1436 ../cli/src/devices.c:1482
+#: ../cli/src/devices.c:1834 ../cli/src/devices.c:1881
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "Створено Ñ– задіÑно Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· UUID «%s» на приÑтрої «%s»\n"
-#: ../cli/src/devices.c:1441
+#: ../cli/src/devices.c:1838
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з’єднаннÑ: (%d) %s."
-#: ../cli/src/devices.c:1466
+#: ../cli/src/devices.c:1863
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ або задіÑти нове з’єднаннÑ: (%d) %s"
-#: ../cli/src/devices.c:1474
+#: ../cli/src/devices.c:1871
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ або задіÑти нове Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (невідома помилка)"
-#: ../cli/src/devices.c:1618
+#: ../cli/src/devices.c:2026
+msgid "SSID or BSSID: "
+msgstr "SSID або BSSID: "
+
+#: ../cli/src/devices.c:2031
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "Помилка: не виÑтачає SSID або BSSID."
-#: ../cli/src/devices.c:1641
+#: ../cli/src/devices.c:2055
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° bssid, «%s», не Ñ” коректним BSSID."
-#: ../cli/src/devices.c:1665
+#: ../cli/src/devices.c:2079
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1388,77 +3799,76 @@ msgstr ""
"Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° wep-key-type, «%s», Ñ” некоректним, Ñлід "
"викориÑтовувати «key» або «phrase»."
-#: ../cli/src/devices.c:1705
+#: ../cli/src/devices.c:2099
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Помилка: %s: %s."
+
+#: ../cli/src/devices.c:2114
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"Помилка: BSSID Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· (%s) відрізнÑєтьÑÑ Ð²Ñ–Ð´ параметра bssid (%s)."
-#: ../cli/src/devices.c:1711
+#: ../cli/src/devices.c:2120
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "Помилка: параметр «%s» не дорівнює ні SSID, ні BSSID."
-#: ../cli/src/devices.c:1740
-#, c-format
-msgid "Error: Device '%s' is not a Wi-Fi device."
-msgstr "Помилка: приÑтрій «%s» не Ñ” приÑтроєм Wi-Fi."
-
-#: ../cli/src/devices.c:1742
+#: ../cli/src/devices.c:2146 ../cli/src/devices.c:2308
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "Помилка: не знайдено жодного приÑтрою Wi-Fi."
-#: ../cli/src/devices.c:1760
+#: ../cli/src/devices.c:2164
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "Помилка: не знайдено мережі з SSID «%s»."
-#: ../cli/src/devices.c:1762
+#: ../cli/src/devices.c:2166
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "Помилка: не знайдено точки доÑтупу з BSSID «%s»."
-#: ../cli/src/devices.c:1860
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Помилка: команда «dev wifi» «%s» є некоректною."
-
-#: ../cli/src/devices.c:1936
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Помилка: «dev wimax»: %s"
+#: ../cli/src/devices.c:2205
+msgid "Password: "
+msgstr "Пароль: "
-#: ../cli/src/devices.c:1938
+#: ../cli/src/devices.c:2334
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Помилка: «dev wimax»: %s; дозволені полÑ: %s"
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Помилка: команда «device wifi» «%s» є некоректною."
-#: ../cli/src/devices.c:1961
+#: ../cli/src/devices.c:2381
msgid "WiMAX NSP list"
msgstr "СпиÑок WiMAX NSP"
-#: ../cli/src/devices.c:1998
+#: ../cli/src/devices.c:2418
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Помилка: «device wimax»: %s"
+
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Помилка: не знайдено NSP з назвою «%s»."
-#: ../cli/src/devices.c:2009
+#: ../cli/src/devices.c:2485
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Помилка: приÑтрій «%s» не Ñ” приÑтроєм WiMAX."
-#: ../cli/src/devices.c:2040
+#: ../cli/src/devices.c:2523
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Помилка: не знайдено точки доÑтупу з nsp «%s»."
-#: ../cli/src/devices.c:2067
+#: ../cli/src/devices.c:2555
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Помилка: команда «dev wimax» «%s» є некоректною."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Помилка: команда «device wimax» «%s» є некоректною."
-#: ../cli/src/devices.c:2120
+#: ../cli/src/devices.c:2705
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Помилка: команда «dev» «%s» є некоректною."
@@ -1474,263 +3884,515 @@ msgstr "ВЕРСІЯ"
#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+msgid "STARTUP"
+msgstr "ЗÐПУСК"
#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "ОБЛÐДÐÐÐÐЯ WIFI"
+msgid "CONNECTIVITY"
+msgstr "МОЖЛИВІСТЬ З’ЄДÐÐÐÐЯ"
#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "РОБОТРУ МЕРЕЖІ"
#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "ОБЛÐДÐÐÐÐЯ WWAN"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+msgid "WIFI"
+msgstr "WIFI"
#. 7
#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "ОБЛÐДÐÐÐÐЯ WIMAX"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
#: ../cli/src/network-manager.c:46
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../cli/src/network-manager.c:47
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../cli/src/network-manager.c:48
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:70
msgid "PERMISSION"
msgstr "ДОСТУП"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "ЗÐÐЧЕÐÐЯ"
-#: ../cli/src/network-manager.c:77
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "РІВЕÐЬ"
+
+#. 0
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "ДОМЕÐИ"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
-"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
"\n"
-msgstr ""
-"ВикориÑтаннÑ: nmcli nm { КОМÐÐДР| help }\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" КОМÐÐДР:= { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli general { КОМÐÐДР| help }\n"
"\n"
-" КОМÐÐДР:= { status | permissions | enable | sleep | wifi | wwan }\n"
+" КОМÐÐДР:= { status | hostname | permissions | logging }\n"
"\n"
" status\n"
+"\n"
+" hostname [<назва вузла>]\n"
+"\n"
" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"\n"
+" logging [level <рівень Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ>] [domains <домени Ð²ÐµÐ´ÐµÐ½Ð½Ñ "
+"журналу>]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:107
+#, c-format
+msgid ""
+"Usage: nmcli general status { help }\n"
+"\n"
+"Show overall status of NetworkManager.\n"
+"'status' is the default action, which means 'nmcli gen' calls 'nmcli gen "
+"status'\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli general status { help }\n"
+"\n"
+"Показати загальний Ñтан NetworkManager.\n"
+"«status» — типова діÑ. Це означає, що «nmcli gen» еквівалентне до «nmcli gen "
+"status»\n"
+"\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Get or change persistent system hostname.\n"
+"With no arguments, this prints currently configured hostname. When you pass\n"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli general hostname { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [<назва вузла>]\n"
+"\n"
+"Отримати або змінити поÑтійну назву вузла ÑиÑтеми.\n"
+"Без аргументів виводить дані щодо поточної налаштованої назви вузла. Якщо "
+"буде\n"
+"передано аргумент з назвою вузла, NetworkManager зробить цю назву новою "
+"поÑтійною\n"
+"назвою вузла ÑиÑтеми.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli general permissions { help }\n"
+"\n"
+"Показати права доÑтупу підпрограми виклику до дій, Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñких Ñлід "
+"пройти розпізнаваннÑ.\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../cli/src/network-manager.c:139
+#, c-format
+msgid ""
+"Usage: nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Get or change NetworkManager logging level and domains.\n"
+"Without any argument current logging level and domains are shown. In order "
+"to\n"
+"change logging state, provide level and/or domain. Please refer to the man "
+"page\n"
+"for the list of possible logging domains.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli general logging { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [level <рівень журналюваннÑ>] [domains <домени журналюваннÑ>]\n"
+"\n"
+"Отримати або змінити рівень Ñ– домени Ð¶ÑƒÑ€Ð½Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ NetworkManager.\n"
+"Без параметрів показує дані щодо поточного Ñ€Ñ–Ð²Ð½Ñ Ñ‚Ð° доменів журналюваннÑ. "
+"Якщо потрібно\n"
+"змінити Ñтан журналюваннÑ, вкажіть рівень Ñ–/або домен. СпиÑок можливих "
+"доменів\n"
+"Ð¶ÑƒÑ€Ð½Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ на Ñторінці підручника (man).\n"
+"\n"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid ""
+"Usage: nmcli networking { COMMAND | help }\n"
+"\n"
+"COMMAND := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli networking { КОМÐÐДР| help }\n"
+"\n"
+" КОМÐÐДР:= { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [перевірити]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:164
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli networking on { help }\n"
+"\n"
+"Увімкнути роботу у мережі\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli networking off { help }\n"
+"\n"
+"Вимкнути роботу у мережі.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:182
+#, c-format
+msgid ""
+"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Get network connectivity state.\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli networking connectivity { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [check]\n"
+"\n"
+"Отримати Ñтан придатноÑÑ‚Ñ– до Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ–.\n"
+"За допомогою додаткового аргументу «check» можна наказати NetworkManager "
+"виконати повторну перевірку можливоÑÑ‚Ñ– з’єднаннÑ.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:195
+#, c-format
+msgid ""
+"Usage: nmcli radio { COMMAND | help }\n"
+"\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli radio { КОМÐÐДР| help }\n"
+"\n"
+" КОМÐÐДР:= { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+" КОМÐÐДР:= { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:210
+#, c-format
+msgid ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of all radio switches, or turn them on/off.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli radio all { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [on | off]\n"
+"\n"
+"Отримати Ñтан уÑÑ–Ñ… перемикачів або перемкнути Ñ—Ñ… (увімкнути чи вимкнути).\n"
+"\n"
+
+#: ../cli/src/network-manager.c:221
+#, c-format
+msgid ""
+"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of Wi-Fi radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli radio wifi { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [on | off]\n"
+"\n"
+"Отримати Ñтан перемикача Wi-Fi або перемкнути його (увімкнути чи вимкнути).\n"
+"\n"
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid ""
+"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of mobile broadband radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli radio wwan { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [on | off]\n"
+"\n"
+"Отримати Ñтан перемикача мобільної широкоÑмугової мережі або перемкнути його "
+"(увімкнути чи вимкнути).\n"
+"\n"
+
+#: ../cli/src/network-manager.c:244
+#, c-format
+msgid ""
+"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Get status of WiMAX radio switch, or turn it on/off.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli radio wimax { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := [on | off]\n"
+"\n"
+"Отримати Ñтан перемикача WiMAX або перемкнути його (увімкнути чи вимкнути).\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "приÑпаний"
-#: ../cli/src/network-manager.c:110
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "з’єднуєтьÑÑ"
-#: ../cli/src/network-manager.c:112
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "з’єднуєтьÑÑ (локально)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "з’єднано (на вузлі)"
-#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "роз’єднуєтьÑÑ"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Помилка: «nm status»: %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "портал"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "обмежена"
+
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "повна"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Помилка: «nm status»: %s; дозволені полÑ: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Помилка: можна викориÑтовувати лише такі полÑ: %s"
-#. create NMClient
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "enabled"
msgstr "увімкнено"
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:176
-#: ../cli/src/network-manager.c:177 ../cli/src/network-manager.c:179
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:429
-#: ../cli/src/network-manager.c:484 ../cli/src/network-manager.c:522
-#: ../cli/src/network-manager.c:561
+#: ../cli/src/network-manager.c:348 ../cli/src/network-manager.c:349
+#: ../cli/src/network-manager.c:350 ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:352 ../cli/src/network-manager.c:354
+#: ../cli/src/network-manager.c:355
msgid "disabled"
msgstr "вимкнено"
-#: ../cli/src/network-manager.c:193
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "Стан NetworkManager"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "виконуєтьÑÑ"
-#: ../cli/src/network-manager.c:196
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "не виконуєтьÑÑ"
-#: ../cli/src/network-manager.c:271
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "запуÑк"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "запущено"
+
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "розпізн"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "Помилка: «nm permissions»: %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "Помилка: «nm permissions»: %s; дозволені полÑ: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Помилка: «general permissions»: %s"
-#: ../cli/src/network-manager.c:324
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "Права доÑтупу NetworkManager"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr ""
-"Помилка: не вдалоÑÑ Ð²Ñтановити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· ÑиÑтемним каналом обміну даними: "
-"%s"
+msgid "Error: 'general logging': %s"
+msgstr "Помилка: «general logging»: %s"
-#: ../cli/src/network-manager.c:361
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "Ð’ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ NetworkManager"
+
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Помилка: не вдалоÑÑ Ñтворити прокÑÑ–-об’єкт D-Bus."
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити назву вузла: (%d) %s"
-#: ../cli/src/network-manager.c:367
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Помилка у затримці: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "Помилка: заборонено доÑтуп до ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð¾Ð¼; %s"
-#: ../cli/src/network-manager.c:416 ../cli/src/network-manager.c:471
-#: ../cli/src/network-manager.c:509 ../cli/src/network-manager.c:548
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«--fields» «%s» не можна викориÑтовувати тут; дозволені "
-"полÑ: %s"
+msgid "Error: %s"
+msgstr "Помилка: %s"
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "Мережу увімкнено"
+#: ../cli/src/network-manager.c:692
+#, c-format
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Помилка: команда «general» «%s» є некоректною."
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"Помилка: некоректний параметр «enable»: «%s»; мало бути «true» або «false»."
+"Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«--fields» «%s» не можна викориÑтовувати тут (дозволене "
+"поле: %s)"
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Помилка: Ñтан приÑиплÑÐ½Ð½Ñ Ð½Ðµ екÑпортовано NetworkManager."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Помилка: некоректний аргумент «%s»: «%s» (мало бути on/off)."
-#: ../cli/src/network-manager.c:458
-#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Помилка: некоректний параметр «sleep»: «%s»; мало бути «true» або «false»."
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "МожливіÑÑ‚ÑŒ з’єднаннÑ"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi увімкнено"
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "Робота у мережі"
-#: ../cli/src/network-manager.c:495
+#: ../cli/src/network-manager.c:783
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Помилка: некоректний параметр «wifi»: «%s»."
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Помилка: команда «networking connectivity» «%s» є некоректною."
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN увімкнено"
-
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Помилка: некоректний параметр «wwan»: «%s»."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Помилка: команда «networking» «%s» є некоректною."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX увімкнено"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Радіоперемикачі"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Помилка: некоректний параметр «wimax»: «%s»."
+#. no argument, show current WiFi state
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Перемикач Wi-Fi"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "Перемикач WWAN"
-#: ../cli/src/network-manager.c:588
+#. no argument, show current WiMAX state
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "Перемикач WiMAX"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Помилка: команда «nm» «%s» є некоректною."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Помилка: команда «radio» «%s» є некоректною."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:85
#, c-format
-#| msgid ""
-#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
-#| "\n"
-#| "OPTIONS\n"
-#| " -t[erse] terse output\n"
-#| " -p[retty] pretty output\n"
-#| " -m[ode] tabular|multiline output mode\n"
-#| " -f[ields] <field1,field2,...>|all|common specify fields to output\n"
-#| " -e[scape] yes|no escape columns separators in "
-#| "values\n"
-#| " -n[ocheck] don't check nmcli and "
-#| "NetworkManager versions\n"
-#| " -v[ersion] show program version\n"
-#| " -h[elp] print this help\n"
-#| "\n"
-#| "OBJECT\n"
-#| " nm NetworkManager status\n"
-#| " con NetworkManager connections\n"
-#| " dev devices managed by NetworkManager\n"
-#| "\n"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1743,16 +4405,21 @@ msgid ""
"values\n"
" -n[ocheck] don't check nmcli and "
"NetworkManager versions\n"
+" -a[sk] ask for missing parameters\n"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
"OBJECT\n"
-" nm NetworkManager's status\n"
+" g[eneral] NetworkManager's general status and operations\n"
+" n[etworking] overall networking control\n"
+" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
"\n"
msgstr ""
-"ВикориÑтаннÑ: %s [ПÐРÐМЕТРИ] ОБ’ЄКТ { КОМÐÐДР| help }\n"
+"КориÑтуваннÑ: %s [ПÐРÐМЕТРИ] ОБ’ЄКТ { КОМÐÐДР| help }\n"
"\n"
"ПÐРÐМЕТРИ\n"
" -t[erse] Ñкорочене виведеннÑ\n"
@@ -1763,252 +4430,983 @@ msgstr ""
"у значеннÑÑ…\n"
" -n[ocheck] не перевірÑти верÑÑ–Ñ— nmcli Ñ– "
"NetworkManager\n"
+" -a[sk] проÑити вказати параметри, Ñких "
+"не виÑтачає\n"
+" -w[ait] <к-Ñ‚ÑŒ Ñекунд> вÑтановити Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° "
+"Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð´Ñ–Ð¹\n"
" -v[ersion] показати верÑÑ–ÑŽ програми\n"
" -h[elp] вивеÑти цю довідку\n"
"\n"
"ОБ’ЄКТ\n"
-" nm Ñтан NetworkManager\n"
+" g[eneral] загальний Ñтан Ñ– дії NetworkManager\n"
+" n[etworking] загальне ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶ÐµÑŽ\n"
+" r[adio] перемикачі радіозв’Ñзку NetworkManager\n"
" c[onnection] Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ NetworkManager\n"
-" dd[evice] приÑтрої, керовані NetworkManager\n"
+" d[evice] приÑтрої, Ñкими керує NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../cli/src/nmcli.c:139
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Помилка: невідомий об’єкт «%s», Ñпробуйте «nmcli help»."
-#: ../cli/src/nmcli.c:154
+#: ../cli/src/nmcli.c:169
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Помилка: параметр «--terse» вказано двічі."
-#: ../cli/src/nmcli.c:159
+#: ../cli/src/nmcli.c:174
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr ""
"Помилка: параметр «--terse» Ñ– «--pretty» не можна викориÑтовувати одночаÑно."
-#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:182
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Помилка: параметр «--pretty» вказано двічі."
-#: ../cli/src/nmcli.c:172
+#: ../cli/src/nmcli.c:187
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr ""
"Помилка: параметр «--pretty» Ñ– «--terse» не можна викориÑтовувати одночаÑно"
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../cli/src/nmcli.c:197 ../cli/src/nmcli.c:213 ../cli/src/nmcli.c:242
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Помилка: не вказано аргумент параметра «%s»."
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:222
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Помилка: «%s» не є коректним аргументом «%s»."
-#: ../cli/src/nmcli.c:214
+#: ../cli/src/nmcli.c:229
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Помилка: не вказано полів Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² «%s»."
-#: ../cli/src/nmcli.c:222
+#: ../cli/src/nmcli.c:247
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Помилка: «%s» не Ñ” коректним чаÑом Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»."
+
+#: ../cli/src/nmcli.c:254
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "інÑтрумент nmcli, верÑÑ–Ñ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../cli/src/nmcli.c:260
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Помилка: невідомий параметр «%s», Ñпробуйте «nmcli -help»."
-#: ../cli/src/nmcli.c:247
+#: ../cli/src/nmcli.c:340 ../cli/src/nmcli.c:349
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Отримано Ñигнал %d, Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸â€¦"
+#| msgid ""
+#| "\n"
+#| "Error: nmcli terminated by signal %d."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %s (%d)\n"
+msgstr ""
+"\n"
+"Помилка: роботу nmcli перервано Ñигналом %s (%d).\n"
-#: ../cli/src/nmcli.c:272
+#: ../cli/src/nmcli.c:380
+#, c-format
+#| msgid "Failed to set signal mask: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити маÑку Ñигналу: %d\n"
+
+#: ../cli/src/nmcli.c:387
+#, c-format
+#| msgid "Failed to create signal handling thread: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "Ðе вдалоÑÑ Ñтворити потік обробки Ñигналів: %d\n"
+
+#: ../cli/src/nmcli.c:400 ../test/nm-online.c:196
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Помилка: не вдалоÑÑ Ñтворити об’єкт NMClient."
-#: ../cli/src/nmcli.c:288
+#: ../cli/src/nmcli.c:416
msgid "Success"
msgstr "Виконано"
-#: ../cli/src/settings.c:595
+#: ../cli/src/settings.c:669
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (16-ковий ASCII-ключ)"
+msgid "%d (key)"
+msgstr "%d (ключ)"
-#: ../cli/src/settings.c:597
+#: ../cli/src/settings.c:671
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-бітовий пароль)"
+msgid "%d (passphrase)"
+msgstr "%d (пароль)"
-#: ../cli/src/settings.c:600 ../cli/src/settings.c:728
+#: ../cli/src/settings.c:674 ../cli/src/settings.c:802
#, c-format
msgid "%d (unknown)"
msgstr "%d (невідомо)"
-#: ../cli/src/settings.c:626
+#: ../cli/src/settings.c:700
msgid "0 (unknown)"
msgstr "0 (невідомо)"
-#: ../cli/src/settings.c:632
+#: ../cli/src/settings.c:706
msgid "any, "
msgstr "будь-Ñкий, "
-#: ../cli/src/settings.c:634
+#: ../cli/src/settings.c:708
msgid "900 MHz, "
msgstr "900 МГц, "
-#: ../cli/src/settings.c:636
+#: ../cli/src/settings.c:710
msgid "1800 MHz, "
msgstr "1800 МГц, "
-#: ../cli/src/settings.c:638
+#: ../cli/src/settings.c:712
msgid "1900 MHz, "
msgstr "1900 МГц, "
-#: ../cli/src/settings.c:640
+#: ../cli/src/settings.c:714
msgid "850 MHz, "
msgstr "800 МГц, "
-#: ../cli/src/settings.c:642
+#: ../cli/src/settings.c:716
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 МГц, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:718
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 МГц, "
-#: ../cli/src/settings.c:646
+#: ../cli/src/settings.c:720
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 МГц, "
-#: ../cli/src/settings.c:648
+#: ../cli/src/settings.c:722
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 МГц, "
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:724
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 МГц, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:726
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 МГц, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:728
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 МГц, "
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:730
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 МГц, "
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:732
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 МГц, "
-#: ../cli/src/settings.c:676
+#: ../cli/src/settings.c:750
msgid "0 (NONE)"
msgstr "0 (ÐЕМÐЄ)"
-#: ../cli/src/settings.c:682
+#: ../cli/src/settings.c:756
msgid "REORDER_HEADERS, "
msgstr "ПЕРЕВПОРЯДКОВУВÐÐÐЯ_ЗÐГОЛОВКІВ, "
-#: ../cli/src/settings.c:684
+#: ../cli/src/settings.c:758
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:686
+#: ../cli/src/settings.c:760
msgid "LOOSE_BINDING, "
msgstr "ШИРОКЕ_ПРИВ’ЯЗУВÐÐÐЯ, "
-#: ../cli/src/settings.c:722
+#: ../cli/src/settings.c:796
#, c-format
msgid "%d (disabled)"
msgstr "%d (вимкнено)"
-#: ../cli/src/settings.c:724
+#: ../cli/src/settings.c:798
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (увімкнено, перевага відкритого IP)"
-#: ../cli/src/settings.c:726
+#: ../cli/src/settings.c:800
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (увімкнено, перевага тимчаÑового IP)"
-#: ../cli/src/settings.c:738
-#| msgid "(none)"
+#: ../cli/src/settings.c:812
msgid "0 (none)"
msgstr "0 (немає)"
-#: ../cli/src/settings.c:744
+#: ../cli/src/settings.c:818
msgid "agent-owned, "
msgstr ", влаÑником Ñ” агент, "
-#: ../cli/src/settings.c:746
-#| msgid "not set"
+#: ../cli/src/settings.c:820
msgid "not saved, "
msgstr "не збережено, "
-#: ../cli/src/settings.c:748
+#: ../cli/src/settings.c:822
msgid "not required, "
msgstr "не Ñ” обов’Ñзковим, "
-#: ../cli/src/settings.c:945 ../cli/src/settings.c:1163
-#: ../cli/src/settings.c:1904
+#: ../cli/src/settings.c:1128
+msgid "0 (disabled)"
+msgstr "0 (вимкнено)"
+
+#: ../cli/src/settings.c:1134
+msgid "enabled, "
+msgstr "увімкнено, "
+
+#: ../cli/src/settings.c:1136
+msgid "advertise, "
+msgstr "оголошеннÑ, "
+
+#: ../cli/src/settings.c:1138
+msgid "willing, "
+msgstr "наданнÑ, "
+
+#: ../cli/src/settings.c:1166
+msgid "-1 (unset)"
+msgstr "-1 (не вÑтановлено)"
+
+#: ../cli/src/settings.c:1274 ../cli/src/settings.c:1457
+#: ../cli/src/settings.c:1497
msgid "auto"
msgstr "авто"
-#: ../cli/src/utils.c:105
+#: ../cli/src/settings.c:1287
+msgid "default"
+msgstr "типовий"
+
+#: ../cli/src/settings.c:1625
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Хочете також вÑтановити Ð´Ð»Ñ Â«%s» Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»? [типово yes або так]: "
+
+#: ../cli/src/settings.c:1627
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Хочете також Ñпорожнити «%s»? [типово yes — так]: "
+
+#: ../cli/src/settings.c:1788
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"ПопередженнÑ: %s.%s вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s», але це може бути "
+"проігноровано у режимі інфраÑтруктури\n"
+
+#: ../cli/src/settings.c:1870 ../cli/src/settings.c:2150
+#: ../cli/src/settings.c:4232
+#, c-format
+msgid "'%s' is not valid"
+msgstr "«%s» не є коректним"
+
+#: ../cli/src/settings.c:1893
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "«%d» Ñ” некоректним значеннÑм; Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати діапазону <%d-%d>"
+
+#: ../cli/src/settings.c:1915
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "«%u» не Ñ” коректним значеннÑм; Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати діапазону <%d-%d>"
+
+#: ../cli/src/settings.c:1981
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr ""
+"Ð—Ð°Ð¿Ð¸Ñ Â«%s» Ñ” некоректним; Ñлід викориÑтовувати формат <параметр>=<значеннÑ>"
+
+#: ../cli/src/settings.c:2015
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "Ñ–Ð½Ð´ÐµÐºÑ Â«%s» Ñ” некоректним"
+
+#: ../cli/src/settings.c:2020 ../cli/src/settings.c:2045
+msgid "no item to remove"
+msgstr "немає пунктів Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ"
+
+#: ../cli/src/settings.c:2024 ../cli/src/settings.c:2049
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "Ñ–Ð½Ð´ÐµÐºÑ Â«%d» лежить поза діапазоном <0-%d>"
+
+#: ../cli/src/settings.c:2064
+#, c-format
+msgid "invalid option '%s'"
+msgstr "некоректний параметр, «%s»"
+
+#: ../cli/src/settings.c:2066
+msgid "missing option"
+msgstr "пропущено параметр"
+
+#: ../cli/src/settings.c:2096 ../cli/src/settings.c:2116
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr ""
+"«%s» не Ñ” коректним значеннÑм номер (або лежить поза діапазоном припуÑтимих "
+"номерів)"
+
+#: ../cli/src/settings.c:2170
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "«%s» не Ñ” коректним значеннÑм MAC-адреÑи Ethernet"
+
+#: ../cli/src/settings.c:2196 ../libnm-util/nm-setting-bridge.c:296
+#: ../libnm-util/nm-setting-connection.c:830
+#: ../libnm-util/nm-setting-vlan.c:548
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "«%s» не Ñ” коректною назвою інтерфейÑу"
+
+#: ../cli/src/settings.c:2214 ../cli/src/settings.c:3621
+#: ../libnm-util/nm-setting-gsm.c:375
+#, c-format
+msgid "'%s' is not a number"
+msgstr "«%s» не Ñ” чиÑлом"
+
+#: ../cli/src/settings.c:2266
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "«%s» не Ñ” коректним шіÑтнадцÑтковим Ñимволом"
+
+#: ../cli/src/settings.c:2296
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "«%s» не Ñ” коректною MAC-адреÑою"
+
+#: ../cli/src/settings.c:2333 ../libnm-util/nm-setting-connection.c:793
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "«%s» не є коректним UUID"
+
+#: ../cli/src/settings.c:2400
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить права доÑтупу «%s»"
+
+#: ../cli/src/settings.c:2412
+msgid ""
+"Enter a list of user permissions. This is a list of user names formatted "
+"as:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: alice bob charlie\n"
+msgstr ""
+"Вкажіть ÑпиÑок кориÑтувачів. Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути таким:\n"
+" [кориÑтувач:]<Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача 1>, [кориÑтувач:]<Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача 2>,...\n"
+"ЗапиÑи можна відокремлювати комами або пробілами.\n"
+"\n"
+"Приклад: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2431
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr ""
+"«%s» не Ñ” коректним значеннÑм оÑновного інтерфейÑу; ÑкориÑтайтеÑÑ Ð½Ð°Ð·Ð²Ð¾ÑŽ "
+"інтерфейÑу або UUID з’єднаннÑ"
+
+#: ../cli/src/settings.c:2475
+#, c-format
+#| msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "ПопередженнÑ: %s не Ñ” UUID жодного з наÑвних профілів з’єднаннÑ.\n"
+
+#: ../cli/src/settings.c:2479 ../cli/src/settings.c:2495
+#, c-format
+#| msgid "Error: '%s' is not a valid connection type."
+msgid "'%s' is not a VPN connection profile"
+msgstr "«%s» не Ñ” профілем Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN"
+
+#: ../cli/src/settings.c:2488
+#, c-format
+#| msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgid "'%s' is not a name of any exiting profile"
+msgstr "«%s» не Ñ” назвою жодного з наÑвних профілів"
+
+#: ../cli/src/settings.c:2522
+#, c-format
+msgid "the value '%s' is not a valid UUID"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» не Ñ” коректним UUID"
+
+#: ../cli/src/settings.c:2529
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить UUID «%s»"
+
+#: ../cli/src/settings.c:2541
+msgid ""
+"Enter secondary connections that should be activated when this connection "
+"is\n"
+"activated. Connections can be specified either by UUID or ID (name). nmcli\n"
+"transparently translates names to UUIDs. Note that NetworkManager only "
+"supports\n"
+"VPNs as secondary connections at the moment.\n"
+"The items can be separated by commas or spaces.\n"
+"\n"
+"Example: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+msgstr ""
+"Вкажіть вторинні з’єднаннÑ, Ñкі Ñлід задіÑти, Ñкщо задіÑно це з’єднаннÑ.\n"
+"Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° вказати за допомогою UUID або ідентифікатора (назви).\n"
+"nmcli виконує прозору транÑлÑцію назви до UUID. Зауважте, що у "
+"NetworkManager\n"
+"поточної верÑÑ–Ñ— передбачено лише підтримку вторинних з’єднань VPN.\n"
+"Декілька запиÑів можна відокремити між Ñобою комами або пробілами.\n"
+"\n"
+"Приклад: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../cli/src/settings.c:2618
+msgid "private key password not provided"
+msgstr "не надано Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð¾ закритого ключа"
+
+#: ../cli/src/settings.c:2645
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить методу EAP «%s»"
+
+#: ../cli/src/settings.c:2670
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить альтернативної відповідноÑÑ‚Ñ– «%s»"
+
+#: ../cli/src/settings.c:2699
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr ""
+"влаÑтивіÑÑ‚ÑŒ не міÑтить відповідноÑÑ‚Ñ– альтернативного Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«phase2» "
+"«%s»"
+
+#: ../cli/src/settings.c:2725
+msgid ""
+"Enter path to a private key and the key password (if not set yet):\n"
+" <file path> [<password>]\n"
+"Example: /home/cimrman/jara-priv-key Dardanely\n"
+msgstr ""
+"Вкажіть шлÑÑ… до закритого ключа Ñ– пароль до ключа (Ñкщо його ще не "
+"вÑтановлено):\n"
+" <шлÑÑ… до ключа> [<пароль>]\n"
+"Приклад: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../cli/src/settings.c:2795
+msgid ""
+"Enter bytes as a list of hexadecimal values.\n"
+"Two formats are accepted:\n"
+"(a) a string of hexadecimal digits, where each two digits represent one "
+"byte\n"
+"(b) space-separated list of bytes written as hexadecimal digits (with "
+"optional 0x/0X prefix, and optional leading 0).\n"
+"\n"
+"Examples: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+msgstr ""
+"Вкажіть байти у форматі ÑпиÑку шіÑтнадцÑткових значень.\n"
+"Передбачено два форматуваннÑ:\n"
+"а) Ñ€Ñдок з шіÑтнадцÑткових цифр, де кожна пара цифр відповідає одному "
+"байту:\n"
+"б) відокремлений пробілами ÑпиÑок байтів у форматі шіÑтнадцÑткових цифр (з "
+"необов’Ñзковим префікÑом 0x/0X або початковим 0).\n"
+"\n"
+"Приклади: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../cli/src/settings.c:2898
+#, c-format
+msgid ""
+"Enter a list of bonding options formatted as:\n"
+" option = <value>, option = <value>,... \n"
+"Valid options are: %s\n"
+"'mode' can be provided as a name or a number:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Example: mode=2,miimon=120\n"
+msgstr ""
+"Вкажіть ÑпиÑок параметрів прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ такому форматі:\n"
+" параметр = <значеннÑ>, параметр = <значеннÑ>,... \n"
+"Можливі параметри: %s\n"
+"«режим» Ñлід вказувати у форматі назви режиму або чиÑла:\n"
+"balance-rr = 0\n"
+"active-backup = 1\n"
+"balance-xor = 2\n"
+"broadcast = 3\n"
+"802.3ad = 4\n"
+"balance-tlb = 5\n"
+"balance-alb = 6\n"
+"\n"
+"Приклад: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2939
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "«%s» не Ñ” коректним значеннÑм MAC-адреÑи InfiniBand"
+
+#: ../cli/src/settings.c:2977
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "«%s» не є коректним закритим ключем IBoIP"
+
+#: ../cli/src/settings.c:3045 ../cli/src/settings.c:3390
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить Ñервера DNS «%s»"
+
+#: ../cli/src/settings.c:3057
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"Вкажіть ÑпиÑок Ð°Ð´Ñ€ÐµÑ IPv4 Ñерверів DNS.\n"
+"\n"
+"Приклад: 8.8.8.8, 8.8.4.4\n"
+
+#: ../cli/src/settings.c:3093 ../cli/src/settings.c:3444
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить домену пошуку DNS «%s»"
+
+#: ../cli/src/settings.c:3113 ../cli/src/settings.c:3464
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "«%s» не Ñ” коректним значеннÑм (мало бути ip[/префікÑ] [шлюз])"
+
+#: ../cli/src/settings.c:3162 ../cli/src/settings.c:3512
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить адреÑи IP «%s»"
+
+#: ../cli/src/settings.c:3175
+msgid ""
+"Enter a list of IPv4 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 32.\n"
+"\n"
+"Example: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+msgstr ""
+"Вкажіть ÑпиÑок Ð°Ð´Ñ€ÐµÑ IPv4 у такому форматуванні:\n"
+" ip[/префікÑ] [шлюз], ip[/префікÑ] [шлюз],...\n"
+"Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ðµ буде вказано, викориÑтовуватиметьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 32.\n"
+"\n"
+"Приклад: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:3228 ../cli/src/settings.c:3543
+#, c-format
+#| msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr ""
+"«%s» Ñ” некоректним (формат: ip[/префікÑ] [наÑтупний_перехід] [метрика])"
+
+#: ../cli/src/settings.c:3276 ../cli/src/settings.c:3591
+#, c-format
+msgid "the property doesn't contain route '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить маршруту «%s»"
+
+#: ../cli/src/settings.c:3289
+#| msgid ""
+#| "Enter a list of IPv4 routes formatted as:\n"
+#| " ip/[prefix] next-hop [metric],...\n"
+#| "Missing prefix is regarded as a prefix of 32.\n"
+#| "Missing metric is regarded as a metric of 0.\n"
+#| "\n"
+#| "Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+msgid ""
+"Enter a list of IPv4 routes formatted as:\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
+"Missing prefix is regarded as a prefix of 32.\n"
+"Missing next-hop is regarded as 0.0.0.0.\n"
+"Missing metric or 0 means a default metric (NM/kernel will set a default "
+"value).\n"
+"\n"
+"Examples: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+" 10.1.2.0/24\n"
+msgstr ""
+"Вкажіть ÑпиÑок маршрутів IPv4 у такому форматуванні:\n"
+" ip/[префікÑ] [наÑтупний_перехід] [метрика],...\n"
+"\n"
+"Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ðµ вказано, буде викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 32.\n"
+"Якщо не вказано наÑтупний перехід, викориÑтовуєтьÑÑ 0.0.0.0.\n"
+"Якщо метрику не вказано або вказано 0, викориÑтовувати типову метрику (типове "
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ визначено NM або Ñдром).\n"
+"\n"
+"Приклади: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+" 10.1.2.0/24\n"
+
+#: ../cli/src/settings.c:3402
+msgid ""
+"Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration "
+"method is 'auto' these DNS servers are appended to those (if any) returned "
+"by automatic configuration. DNS servers cannot be used with the 'shared' or "
+"'link-local' IPv6 configuration methods, as there is no upstream network. In "
+"all other IPv6 configuration methods, these DNS servers are used as the only "
+"DNS servers for this connection.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+msgstr ""
+"Вкажіть ÑпиÑок Ð°Ð´Ñ€ÐµÑ IPv6 Ñерверів DNS. Якщо вказано метод Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ "
+"IPv6 «auto», адреÑи цих Ñерверів DNS буде допиÑано до повернутих заÑобом "
+"автоматичного Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів (Ñкщо такі буде отримано). Сервери DNS "
+"не можна викориÑтовувати, Ñкщо визначено методи Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv6 «shared» "
+"або «link-local», оÑкільки у них не передбачено мережі вищого рівнÑ. Ð”Ð»Ñ "
+"вÑÑ–Ñ… інших методів Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv6, ці Ñервери DNS буде викориÑтано Ñк "
+"єдиний набір Ñерверів DNS Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ з’єднаннÑ.\n"
+"\n"
+"Приклад: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../cli/src/settings.c:3525
+msgid ""
+"Enter a list of IPv6 addresses formatted as:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Missing prefix is regarded as prefix of 128.\n"
+"\n"
+"Example: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+msgstr ""
+"Вкажіть ÑпиÑок Ð°Ð´Ñ€ÐµÑ IPv6 у такому форматуванні:\n"
+" ip[/префікÑ] [шлюз], ip[/префікÑ] [шлюз],...\n"
+"Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ðµ буде вказано, викориÑтовуватиметьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 128.\n"
+"\n"
+"Приклад: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../cli/src/settings.c:3604
+#| msgid ""
+#| "Enter a list of IPv6 routes formatted as:\n"
+#| " ip/[prefix] next-hop [metric],...\n"
+#| "Missing prefix is regarded as a prefix of 128.\n"
+#| "Missing metric is regarded as a metric of 0.\n"
+#| "\n"
+#| "Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+#| "db8:beef::3 2\n"
+msgid ""
+"Enter a list of IPv6 routes formatted as:\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
+"Missing prefix is regarded as a prefix of 128.\n"
+"Missing next-hop is regarded as \"::\".\n"
+"Missing metric or 0 means a default metric (NM/kernel will set a default "
+"value).\n"
+"\n"
+"Examples: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+" abbe::/64 55\n"
+msgstr ""
+"Вкажіть ÑпиÑок маршрутів IPv6 у такому форматуванні:\n"
+" ip/[префікÑ] [наÑтупний_перехід] [метрика],...\n"
+"\n"
+"Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ðµ вказано, буде викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 128.\n"
+"Якщо не вказано наÑтупний перехід, викориÑтовуєтьÑÑ Â«::».\n"
+"Якщо метрику не вказано або вказано 0, викориÑтовувати типову метрику (типове "
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ визначено NM або Ñдром).\n"
+"\n"
+"Приклади: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+" abbe::/64 55\n"
+
+#: ../cli/src/settings.c:3628
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr ""
+"«%s» не Ñ” коректним значеннÑм; можна викориÑтовувати лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0, 1, 2"
+
+#: ../cli/src/settings.c:3645
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "«%s» не є коректним каналом; канал має належати діапазону <1-13>"
+
+#: ../cli/src/settings.c:3666
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr ""
+"«%s» Ñ” некоректним значеннÑм; Ñлід викориÑтовувати такі значеннÑ: [e, o, n]"
+
+#: ../cli/src/settings.c:3694
+msgid ""
+"nmcli can accepts both direct JSON configuration data and a file name "
+"containing the configuration. In the latter case the file is read and the "
+"contents is put into this property.\n"
+"\n"
+"Examples: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+msgstr ""
+"nmcli може працювати Ñк з даними налаштувань JSON, завантаженими "
+"безпоÑередньо, так Ñ– з вказаним за назвою файлом налаштувань. У оÑтанньому "
+"випадку, файл буде прочитано, а дані з нього завантажено до цієї "
+"влаÑтивоÑÑ‚Ñ–.\n"
+"\n"
+"Приклади: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
+"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../cli/src/settings.c:3734
+msgid "no priority to remove"
+msgstr "немає пріоритетноÑÑ‚Ñ– Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ"
+
+#: ../cli/src/settings.c:3738
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "Ñ–Ð½Ð´ÐµÐºÑ Â«%d» лежить поза діапазоном <0-%d>"
+
+#: ../cli/src/settings.c:3777
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"ПопередженнÑ: передбачено підтримку лише одної прив’Ñзки одночаÑно; вибрано "
+"першу прив’Ñзку (%s)\n"
+
+#: ../cli/src/settings.c:3784
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить прив’Ñзки «%s»"
+
+#: ../cli/src/settings.c:3893 ../cli/src/settings.c:4061
+#: ../libnm-util/nm-setting-wired.c:651
+#: ../libnm-util/nm-setting-wireless.c:843
+#: ../libnm-util/nm-setting-wireless.c:857
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "%s не Ñ” припуÑтимою MAC-адреÑою"
+
+#: ../cli/src/settings.c:3899 ../cli/src/settings.c:4067
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить адреÑи MAC «%s»"
+
+#: ../cli/src/settings.c:3918
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "«%s» не Ñ” коректним значеннÑм; Ñлід вказати 3 Ñ€Ñдки"
+
+#: ../cli/src/settings.c:3937
+msgid ""
+"Enter a list of three channels (comma or space separated).\n"
+"\n"
+"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+msgstr ""
+"Вкажіть ÑпиÑок з трьох каналів (запиÑи Ñлід відокремлювати комою або "
+"пробілом).\n"
+"\n"
+"Приклад: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../cli/src/settings.c:3987
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"Вкажіть ÑпиÑок параметрів S/390 у такому форматуванні:\n"
+" параметр = <значеннÑ>, параметр = <значеннÑ>,...\n"
+"Коректні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²: %s\n"
+
+#: ../cli/src/settings.c:4033
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "«%s» не є коректним каналом"
+
+#: ../cli/src/settings.c:4039
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "«%ld» не є коректним каналом"
+
+#: ../cli/src/settings.c:4126 ../cli/src/settings.c:4164
+#: ../cli/src/settings.c:4202
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить протоколу «%s»"
+
+#: ../cli/src/settings.c:4241
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"«%s» Ñ” неÑуміÑним з %s «%s», будь лаÑка, Ñпочатку змініть ключ або "
+"вÑтановіть правильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s."
+
+#: ../cli/src/settings.c:4249
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "ПрипуÑкаємо, що ключем WEP Ñ” «%s»\n"
+
+#: ../cli/src/settings.c:4251
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ»ÑŽÑ‡Ð° WEP вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%d»\n"
+
+#: ../cli/src/settings.c:4274
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "«%s» не належить до набору [0 (невідомо), 1 (ключ), 2 (пароль)]"
+
+#: ../cli/src/settings.c:4290 ../cli/src/settings.c:4293
+#: ../cli/src/settings.c:4296 ../cli/src/settings.c:4299
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"ПопередженнÑ: «%s» неÑуміÑний з типом «%s». Будь лаÑка, змініть або вилучіть "
+"ключ.\n"
+
+#: ../cli/src/settings.c:4312
+#, c-format
+msgid ""
+"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
+"and 2 or passphrase.\n"
+msgstr ""
+"Вкажіть тип ключів WEP. Можливі значеннÑ: 0 або unknown (невідомо), 1 або "
+"key (ключ) та 2 або passphrase (пароль).\n"
+
+#: ../cli/src/settings.c:4325
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "«%s» не є коректним PSK"
+
+#: ../cli/src/settings.c:4369
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "«%s» не є коректним прапорцем DCB"
+
+#: ../cli/src/settings.c:4392
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "«%s» не є пріоритетом програм DCB"
+
+#: ../cli/src/settings.c:4418
+msgid "must contain 8 comma-separated numbers"
+msgstr "має міÑтити 8 чиÑел, відокремлених комами"
+
+#: ../cli/src/settings.c:4435
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "«%s» не Ñ” чиÑлом у діапазоні від 0 до %u (включно) або %u"
+
+#: ../cli/src/settings.c:4438
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "«%s» не Ñ” чиÑлом у діапазоні від 0 до %u (включно)"
+
+#: ../cli/src/settings.c:4460
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"ПопередженнÑ: зміни не буде задіÑно, доки «%s» не включатиме 1 (увімкнено)\n"
+"\n"
+
+#: ../cli/src/settings.c:4513
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "Ñума чаÑтин каналу у відÑотках має Ñкладати 100%%"
+
+#: ../cli/src/settings.c:6198
+msgid "don't know how to get the property value"
+msgstr "програмі невідомий ÑпоÑіб Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–"
+
+#: ../cli/src/settings.c:6251 ../cli/src/settings.c:6291
+msgid "the property can't be changed"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– не можна змінювати"
+
+#: ../cli/src/settings.c:6374
+#| msgid "unavailable"
+msgid "(not available)"
+msgstr "(недоÑтупний)"
+
+#: ../cli/src/settings.c:6399
+msgid "[NM property description]"
+msgstr "[Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– NM]"
+
+#: ../cli/src/settings.c:6404
+msgid "[nmcli specific description]"
+msgstr "[Ñпецифічний Ð´Ð»Ñ nmcli опиÑ]"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» аргументу."
+
+#: ../cli/src/utils.c:153
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Помилка: мало бути вказано аргумент «%s», втім вказано аргумент «%s»."
+
+#: ../cli/src/utils.c:156
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Помилка: неочікуваний аргумент «%s»."
+
+#: ../cli/src/utils.c:206
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr ""
"Помилка під Ñ‡Ð°Ñ Ñпроби Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи IP4 «0x%X» у текÑтовий формат"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:234
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи IP6 «%s» у текÑтовий формат"
-#: ../cli/src/utils.c:234
+#: ../cli/src/utils.c:408
+#, c-format
+#| msgid "'%s' is ambiguous (%s x %s)"
+msgid "'%s' is ambiguous (on x off)"
+msgstr "«%s» є неоднозначним (on x off)"
+
+#: ../cli/src/utils.c:418
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "«%s» не Ñ” коректним значеннÑм; мало бути [%s] або [%s]"
+
+#: ../cli/src/utils.c:500
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "«%s» є неоднозначним (%s x %s)"
+
+#: ../cli/src/utils.c:512
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "пропущено назву, Ñпробуйте одну з таких назв: [%s]"
+
+#: ../cli/src/utils.c:729
#, c-format
msgid "field '%s' has to be alone"
msgstr "поле «%s» має бути єдиним"
-#: ../cli/src/utils.c:237
+#: ../cli/src/utils.c:732
#, c-format
-msgid "invalid field '%s'"
-msgstr "некоректне поле «%s»"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "некоректне поле «%s»; дозволені полÑ: %s"
-#: ../cli/src/utils.c:256
+#: ../cli/src/utils.c:789
msgid "Option '--terse' requires specifying '--fields'"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «--terse» потребує Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«--fields»"
-#: ../cli/src/utils.c:260
+#: ../cli/src/utils.c:793
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"Параметр «--terse» потребує певних значень параметра «--fields», а не «%s»"
-#: ../cli/src/utils.c:470
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr ""
-"Помилка: не вдалоÑÑ Ñтворити прокÑÑ–-об’єкт D-Bus Ð´Ð»Ñ org.freedesktop.DBus"
-
-#: ../cli/src/utils.c:478
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Помилка: невдала Ñпроба запиту NameHasOwner: %s"
-
-#: ../cli/src/utils.c:523
+#: ../cli/src/utils.c:1112
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -2017,7 +5415,7 @@ msgstr ""
"Увага: верÑÑ–Ñ— nmcli (%s) Ñ– NetworkManager (%s) не збігаютьÑÑ. СкориÑтайтеÑÑ "
"параметром --nocheck Ð´Ð»Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ попередженнÑ.\n"
-#: ../cli/src/utils.c:532
+#: ../cli/src/utils.c:1121
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -2028,6 +5426,61 @@ msgstr ""
"можуть бути непередбачуваними.\n"
"."
+#: ../libnm-glib/nm-device.c:1794
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1800 ../tui/nm-editor-utils.c:182
+msgid "Mobile Broadband"
+msgstr "Мобільна радіомережа"
+
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1297
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4287 ../tui/nm-editor-utils.c:200
+msgid "Bond"
+msgstr "Прив’Ñзка"
+
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1299
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4398 ../tui/nm-editor-utils.c:218
+msgid "Team"
+msgstr "Команда"
+
+#: ../libnm-glib/nm-device.c:1808 ../libnm-util/nm-connection.c:1301
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4593 ../tui/nm-editor-utils.c:209
+msgid "Bridge"
+msgstr "МіÑток"
+
+#: ../libnm-glib/nm-device.c:1812
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1840
+msgid "Wired"
+msgstr "Дротове"
+
+#: ../libnm-glib/nm-device.c:1871
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1873
+msgid "USB"
+msgstr "USB"
+
+#. 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
+#. * the strings otherwise.
+#.
+#: ../libnm-glib/nm-device.c:1969 ../libnm-glib/nm-device.c:1988
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:151
+msgid "Disconnected by D-Bus"
+msgstr "Від’єднано D-Bus"
+
#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -2038,118 +5491,89 @@ msgstr "У файлі ключа PEM не міÑтитьÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ
msgid "Doesn't look like a PEM private key file."
msgstr "Ймовірно, цей файл не є файлом закритого ключа PEM."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… файла PEM."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ PEM: Proc-Type не Ñ” першим теґом."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ PEM: невідомий теґ Proc-Type «%s»."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ PEM: DEK-Info не Ñ” другим теґом."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° PEM: не знайдено теґу DEK-Info у ВІ."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr ""
"Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° PEM: некоректне Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð’Ð† у тезі DEK-Info."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr ""
"Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° PEM: невідоме ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа «%s»."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ очікуваний початковий теґ PKCS#8."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:293
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ очікуваний завершальний теґ PKCS#8 «%s»."
#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… закритого ключа."
-
-#: ../libnm-util/crypto.c:317
msgid "Failed to decode PKCS#8 private key."
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ PKCS#8."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ñертифіката."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "Довжина ВІ має дорівнювати парній кількоÑÑ‚Ñ– байтів."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð’Ð†."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "ВІ міÑтить не шіÑтнадцÑткові цифри."
-#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
-#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
-#: ../libnm-util/crypto_nss.c:332
+#: ../libnm-util/crypto.c:408 ../libnm-util/crypto_gnutls.c:150
+#: ../libnm-util/crypto_gnutls.c:267 ../libnm-util/crypto_nss.c:170
+#: ../libnm-util/crypto_nss.c:331
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Ðевідоме ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа «%s»."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð´ÐµÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ закритого ключа."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ тип закритого ключа."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "Сертифікат PEM не міÑтить початкового теґу «%s»."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "Сертифікат PEM не міÑтить завершального теґу «%s»."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñертифікат."
@@ -2163,102 +5587,92 @@ msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ рушій шифрув
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ рушій обчиÑÐ»ÐµÐ½Ð½Ñ MD5: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "Ðекоректна довжина ВІ (має бути принаймні %zd)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð° розшифрованого ключа."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-util/crypto_gnutls.c:169
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ шифру декодуваннÑ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-util/crypto_gnutls.c:178
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити ВІ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-util/crypto_gnutls.c:196
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#: ../libnm-util/crypto_gnutls.c:206 ../libnm-util/crypto_nss.c:260
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ: неочікувана довжина доповненнÑ."
-#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#: ../libnm-util/crypto_gnutls.c:217 ../libnm-util/crypto_nss.c:271
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ пам’ÑÑ‚Ñ–."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-util/crypto_gnutls.c:289
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ шифру кодуваннÑ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-util/crypto_gnutls.c:298
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити ВІ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Ðе вдалоÑÑ Ð·Ð°ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ дані: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби ініціалізації даних Ñертифіката: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñертифікат: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:403
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрумент Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:416
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ файл PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-util/crypto_gnutls.c:428
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ файл PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-util/crypto_gnutls.c:456
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрумент Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ PKCS#8: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ файл PKCS#8: %s"
@@ -2273,131 +5687,518 @@ msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ рушій шифрув
msgid "Failed to initialize the MD5 context: %d."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ MD5: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "Ðекоректна довжина ВІ (має бути принаймні %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñлот шифру декодуваннÑ."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити ВІ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ розшифруваннÑ."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-util/crypto_nss.c:238
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ: розшифровані дані Ñ” занадто об’ємними."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-util/crypto_nss.c:249
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñлот шифру розкодуваннÑ."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити вектор ініціалізації Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ шифруваннÑ."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Ðе вдалоÑÑ Ð·Ð°ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Ðеочікуваний об’єм даних піÑÐ»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ Ñертифікат: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ð° UCS2: %d"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-util/crypto_nss.c:496
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрумент Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-util/crypto_nss.c:505
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ файл PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-util/crypto_nss.c:514
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ файл PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "Ðе вдалоÑÑ Ñтворити пÑевдовипадкові дані."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-setting-8021x.c:594
+msgid "CA certificate must be in X.509 format"
+msgstr "Форматом Ñертифіката CA має бути X.509"
+
+#: ../libnm-util/nm-setting-8021x.c:912 ../libnm-util/nm-setting-8021x.c:1175
+#: ../libnm-util/nm-setting-8021x.c:1498
+#| msgid "Error initializing certificate data: %s"
+msgid "invalid certificate format"
+msgstr "некоректний формат Ñертифіката"
+
+#: ../libnm-util/nm-setting-8021x.c:1767
+#| msgid "invalid gateway '%s'"
+msgid "invalid private key"
+msgstr "некоректний закритий ключ"
+
+#: ../libnm-util/nm-setting-8021x.c:2078
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "некоректний закритий ключ фази 2"
+
+#: ../libnm-util/nm-setting-8021x.c:2280 ../libnm-util/nm-setting-8021x.c:2297
+#: ../libnm-util/nm-setting-8021x.c:2338 ../libnm-util/nm-setting-8021x.c:2355
+#: ../libnm-util/nm-setting-8021x.c:2407 ../libnm-util/nm-setting-8021x.c:2419
+#: ../libnm-util/nm-setting-8021x.c:2437 ../libnm-util/nm-setting-8021x.c:2449
+#: ../libnm-util/nm-setting-8021x.c:2473 ../libnm-util/nm-setting-8021x.c:2651
+#: ../libnm-util/nm-setting-adsl.c:212
+#: ../libnm-util/nm-setting-bluetooth.c:144
+#: ../libnm-util/nm-setting-bluetooth.c:162
+#: ../libnm-util/nm-setting-bond.c:498 ../libnm-util/nm-setting-bridge.c:287
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:770
+#: ../libnm-util/nm-setting-connection.c:786
+#: ../libnm-util/nm-setting-connection.c:841
+#: ../libnm-util/nm-setting-ip4-config.c:887
+#: ../libnm-util/nm-setting-ip6-config.c:812
+#: ../libnm-util/nm-setting-ip6-config.c:876
+#: ../libnm-util/nm-setting-olpc-mesh.c:127
+#: ../libnm-util/nm-setting-pppoe.c:165 ../libnm-util/nm-setting-team.c:141
+#: ../libnm-util/nm-setting-vpn.c:405 ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:894
+#: ../libnm-util/nm-setting-wireless.c:753
+msgid "property is missing"
+msgstr "не вказано влаÑтивоÑÑ‚Ñ–"
+
+#: ../libnm-util/nm-setting-8021x.c:2287 ../libnm-util/nm-setting-8021x.c:2304
+#: ../libnm-util/nm-setting-8021x.c:2345 ../libnm-util/nm-setting-8021x.c:2362
+#: ../libnm-util/nm-setting-8021x.c:2413 ../libnm-util/nm-setting-8021x.c:2425
+#: ../libnm-util/nm-setting-8021x.c:2443 ../libnm-util/nm-setting-8021x.c:2455
+#: ../libnm-util/nm-setting-8021x.c:2480 ../libnm-util/nm-setting-adsl.c:219
+#: ../libnm-util/nm-setting-adsl.c:228 ../libnm-util/nm-setting-cdma.c:179
+#: ../libnm-util/nm-setting-cdma.c:188
+#: ../libnm-util/nm-setting-connection.c:777
+#: ../libnm-util/nm-setting-connection.c:848
+#: ../libnm-util/nm-setting-gsm.c:284 ../libnm-util/nm-setting-gsm.c:341
+#: ../libnm-util/nm-setting-gsm.c:350
+#: ../libnm-util/nm-setting-ip4-config.c:952
+#: ../libnm-util/nm-setting-ip4-config.c:961
+#: ../libnm-util/nm-setting-pppoe.c:172 ../libnm-util/nm-setting-pppoe.c:181
+#: ../libnm-util/nm-setting-vpn.c:414 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-wireless-security.c:932
+#: ../libnm-util/nm-setting-wireless-security.c:956
+msgid "property is empty"
+msgstr "влаÑтивіÑÑ‚ÑŒ Ñ” порожньою"
+
+#: ../libnm-util/nm-setting-8021x.c:2315 ../libnm-util/nm-setting-8021x.c:2327
+#: ../libnm-util/nm-setting-8021x.c:2373 ../libnm-util/nm-setting-8021x.c:2385
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "має відповідати влаÑтивоÑÑ‚Ñ– «%s» Ð´Ð»Ñ PKCS#12"
+
+#: ../libnm-util/nm-setting-8021x.c:2626 ../libnm-util/nm-setting-8021x.c:2660
+#: ../libnm-util/nm-setting-bluetooth.c:153
+#: ../libnm-util/nm-setting-bond.c:507
+#: ../libnm-util/nm-setting-infiniband.c:203
+#: ../libnm-util/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-ip4-config.c:943
+#: ../libnm-util/nm-setting-ip6-config.c:867
+#: ../libnm-util/nm-setting-olpc-mesh.c:155
+#: ../libnm-util/nm-setting-team.c:150 ../libnm-util/nm-setting-wimax.c:155
+#: ../libnm-util/nm-setting-wired.c:663 ../libnm-util/nm-setting-wired.c:672
+#: ../libnm-util/nm-setting-wireless-security.c:975
+#: ../libnm-util/nm-setting-wireless-security.c:984
+#: ../libnm-util/nm-setting-wireless-security.c:992
+#: ../libnm-util/nm-setting-wireless-security.c:1000
+#: ../libnm-util/nm-setting-wireless-security.c:1008
+#: ../libnm-util/nm-setting-wireless-security.c:1017
+#: ../libnm-util/nm-setting-wireless-security.c:1026
+#: ../libnm-util/nm-setting-wireless-security.c:1035
+#: ../libnm-util/nm-setting-wireless-security.c:1071
+#: ../libnm-util/nm-setting-wireless-security.c:1081
+#: ../libnm-util/nm-setting-wireless.c:813
+#: ../libnm-util/nm-setting-wireless.c:822
+#: ../libnm-util/nm-setting-wireless.c:831
+msgid "property is invalid"
+msgstr "влаÑтивіÑÑ‚ÑŒ Ñ” некоректною"
+
+#: ../libnm-util/nm-setting-8021x.c:2685 ../libnm-util/nm-setting-8021x.c:2695
+#: ../libnm-util/nm-setting-8021x.c:2705 ../libnm-util/nm-setting-8021x.c:2715
+#: ../libnm-util/nm-setting-8021x.c:2725 ../libnm-util/nm-setting-adsl.c:239
+#: ../libnm-util/nm-setting-adsl.c:250
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:903
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "«%s» не Ñ” коректним значеннÑм влаÑтивоÑÑ‚Ñ–"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "Ñлід вказати параметр «%s» або «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "некоректний параметр «%s» або його Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "можна вÑтановлювати лише одне з «%s» або «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "пропущено обов’Ñзковий параметр «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "«%s» не Ñ” коректним значеннÑм «%s»"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "«%s=%s» Ñ” неÑуміÑним з «%s > 0»"
+
+#: ../libnm-util/nm-setting-bond.c:583
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° шифруваннÑ."
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "«%s» не Ñ” коректною назвою інтерфейÑу Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° PEM."
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "параметр «%s» можна викориÑтовувати, лише Ñкщо «%s=%s»"
+
+#: ../libnm-util/nm-setting-bond.c:606
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "«%s=%s» не Ñ” коректним налаштуваннÑм Ð´Ð»Ñ Â«%s»"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-util/nm-setting-bond.c:619 ../libnm-util/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:684
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу ВІ до файла PEM."
+msgid "'%s' option requires '%s' option to be set"
+msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s» вимагає вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "'%s' option is empty"
+msgstr "параметр «%s» є порожнім"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "«%s» не Ñ” припуÑтимою адреÑою IPv4 Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
+
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
+#, c-format
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "«%d» Ñ” некоректним значеннÑм влаÑтивоÑÑ‚Ñ– (має бути <= %d)"
+
+#: ../libnm-util/nm-setting-bridge.c:270
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%d» лежить поза діапазоном <%d-%d>"
+
+#: ../libnm-util/nm-setting-bridge.c:306 ../libnm-util/nm-setting-wired.c:638
+#: ../libnm-util/nm-setting-wired.c:696
+msgid "is not a valid MAC address"
+msgstr "не Ñ” коректною MAC-адреÑою"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "влаÑтивіÑÑ‚ÑŒ Ñ” порожньою"
+
+#: ../libnm-util/nm-setting-connection.c:812
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "«%s» не відповідає назві віртуального інтерфейÑу «%s»"
+
+#: ../libnm-util/nm-setting-connection.c:858
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "потребує Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» у параметрах з’єднаннÑ"
+
+#: ../libnm-util/nm-setting-connection.c:880
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv4 Ð´Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ приÑтрою неможливе"
+
+#: ../libnm-util/nm-setting-connection.c:893
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv6 Ð´Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ приÑтрою неможливе"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "некоректні прапорці"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "некоректні прапорці — вимкнено"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "влаÑтивіÑÑ‚ÑŒ Ñ” некоректною (не увімкнено)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "некоректний елемент"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "Ñума не дорівнює 100%"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "некоректна влаÑтивіÑÑ‚ÑŒ"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "пропущено влаÑтивіÑÑ‚ÑŒ"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–, «%s», Ñ” порожнім або надто довгим (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "«%s» міÑтить некоректні Ñимволи (Ñлід викориÑтовувати [A-Za-z._-])"
+
+#: ../libnm-util/nm-setting-gsm.c:364
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "довжина «%s» є некоректною (має бути 5 або 6 цифр)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "не Ñ” коректною назвою інтерфейÑу"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Якщо вказано параметр parent, Ñлід вказати Ñ– P_Key"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr ""
-"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу зашифрованого ключа до файла "
-"PEM."
+"У запиÑÑ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа InfiniBand не вказано назви батьківÑького "
+"інтерфейÑу"
+
+#: ../libnm-util/nm-setting-ip4-config.c:897
+#: ../libnm-util/nm-setting-ip6-config.c:822
+#, c-format
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "Ñ†Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ не може бути порожньою, Ñкщо «%s=%s»"
+
+#: ../libnm-util/nm-setting-ip4-config.c:909
+#: ../libnm-util/nm-setting-ip4-config.c:919
+#: ../libnm-util/nm-setting-ip4-config.c:931
+#: ../libnm-util/nm-setting-ip6-config.c:835
+#: ../libnm-util/nm-setting-ip6-config.c:845
+#: ../libnm-util/nm-setting-ip6-config.c:855
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "цю влаÑтивіÑÑ‚ÑŒ не можна заÑтоÑовувати до «%s=%s»"
+
+#: ../libnm-util/nm-setting-ip4-config.c:978
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. ÐдреÑа IPv4 Ñ” некоректною"
+
+#: ../libnm-util/nm-setting-ip4-config.c:988
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. ÐдреÑа IPv4 має некоректний префікÑ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:998
+#, c-format
+#| msgid "%d. IPv4 address has invalid prefix"
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. ÐдреÑа IPv4 має некоректну мітку, «%s»"
+
+#: ../libnm-util/nm-setting-ip4-config.c:1009
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "ÐевідповідніÑÑ‚ÑŒ кількоÑÑ‚Ñ– Ð°Ð´Ñ€ÐµÑ IPv4 Ñ– кількоÑÑ‚Ñ– міток (%d Ñ– %d)"
+
+#: ../libnm-util/nm-setting-ip4-config.c:1025
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. Ðекоректний маршрут"
+
+#: ../libnm-util/nm-setting-ip4-config.c:1035
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. Маршрут має некоректний префікÑ"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-util/nm-setting-ip6-config.c:834
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð´Ð°Ð½Ð¸Ñ… файла PEM."
+msgid "'%s' not allowed for %s=%s"
+msgstr "«%s» не можна викориÑтовувати Ð´Ð»Ñ %s=%s"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:136
+#: ../libnm-util/nm-setting-wireless.c:762
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "Довжина SSID лежить поза діапазоном у <1-32> байтів"
+
+#: ../libnm-util/nm-setting-olpc-mesh.c:145
+#: ../libnm-util/nm-setting-wireless.c:802
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "«%d» не є коректним каналом"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "«%d» не належить до коректного діапазону <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr ""
+"вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ– вимагає ненульового Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»"
+
+#: ../libnm-util/nm-setting-vlan.c:570
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» не відповідає «%s=%s»"
+
+#: ../libnm-util/nm-setting-vlan.c:581
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "«%s» не Ñ” ні UUID, ні назвою інтерфейÑу"
+
+#: ../libnm-util/nm-setting-vlan.c:594
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "влаÑтивіÑÑ‚ÑŒ не вказано Ñ– не визначено «%s:%s»"
+
+#: ../libnm-util/nm-setting-vlan.c:607
+msgid "flags are invalid"
+msgstr "прапорці є некоректними"
+
+#: ../libnm-util/nm-setting-wired.c:618
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "«%s» не Ñ” коректним значеннÑм номера порту Ethernet"
+
+#: ../libnm-util/nm-setting-wired.c:628
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "«%s» не Ñ” коректним значеннÑм дуплекÑного режиму"
+
+#: ../libnm-util/nm-setting-wired.c:685
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "некоректний «%s» або його Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»"
+
+#: ../libnm-util/nm-setting-wireless-security.c:915
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "Ð´Ð»Ñ Ð·Ð°Ñ…Ð¸Ñту «%s» Ñлід вказати «%s=%s»"
+
+#: ../libnm-util/nm-setting-wireless-security.c:944
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "захиÑÑ‚ «%s» вимагає викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
+
+#: ../libnm-util/nm-setting-wireless-security.c:965
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%d» лежить поза діапазоном <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:1062
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» потребують «%s» у цій влаÑтивоÑÑ‚Ñ–"
+
+#: ../libnm-util/nm-setting-wireless-security.c:1092
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "«%s» можна викориÑтовувати лише з «%s=%s» (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:771
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "«%s» не є коректним режимом Wi-Fi"
+
+#: ../libnm-util/nm-setting-wireless.c:781
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "«%s» не Ñ” коректним значеннÑм Ñмуги"
+
+#: ../libnm-util/nm-setting-wireless.c:791
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "потребує вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2507,129 +6308,95 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"Правила ÑиÑтеми заборонÑÑŽÑ‚ÑŒ внеÑÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½ до поÑтійної назви вузла у мережі"
-#: ../src/main.c:135
+#: ../src/main.c:129
#, c-format
msgid "Failed to set signal mask: %d"
msgstr "Ðе вдалоÑÑ Ð²Ñтановити маÑку Ñигналу: %d"
-#: ../src/main.c:144
+#: ../src/main.c:138
#, c-format
msgid "Failed to create signal handling thread: %d"
msgstr "Ðе вдалоÑÑ Ñтворити потік обробки Ñигналів: %d"
-#: ../src/main.c:159
+#: ../src/main.c:153
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби відкрити %s: %s\n"
-#: ../src/main.c:165
+#: ../src/main.c:159
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запиÑу даних до %s: %s\n"
-#: ../src/main.c:170
+#: ../src/main.c:164
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ роботу %s: %s\n"
-#: ../src/main.c:213
+#: ../src/main.c:207
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager вже запущено (pid %ld)\n"
-#: ../src/main.c:340
+#: ../src/main.c:360
msgid "Print NetworkManager version and exit"
msgstr "ВивеÑти дані щодо верÑÑ–Ñ— NetworkManager Ñ– завершити роботу"
-#: ../src/main.c:341
+#: ../src/main.c:361
msgid "Don't become a daemon"
msgstr "Ðе переходити у Ñтан фонової Ñлужби"
-#: ../src/main.c:342
+#: ../src/main.c:362
+msgid "Don't become a daemon, and log to stderr"
+msgstr ""
+"Ðе переходити у Ñтан фонової Ñлужби Ñ– запиÑувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ до "
+"stderr"
+
+#: ../src/main.c:363
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Рівень докладноÑÑ‚Ñ– журналу: одне з таких значень: [%s]"
+
+#: ../src/main.c:365
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr ""
+"СпиÑок доменів Ð´Ð»Ñ Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, відокремлених Ñимволом «,»: будь-Ñка "
+"ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð°Ñ†Ñ–Ñ Ð· [%s]"
+
+#: ../src/main.c:367
msgid "Make all warnings fatal"
msgstr "Вважати вÑÑ– Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð¼Ð¸"
-#: ../src/main.c:343
+#: ../src/main.c:368
msgid "Specify the location of a PID file"
msgstr "Вказати Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° ідентифікатора процеÑу (PID)"
-#: ../src/main.c:343
+#: ../src/main.c:368
msgid "filename"
msgstr "назва файла"
-#: ../src/main.c:344
+#: ../src/main.c:369
msgid "State file location"
msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° Ñтану"
-#: ../src/main.c:344
+#: ../src/main.c:369
msgid "/path/to/state.file"
msgstr "/шлÑÑ…/до/файла.Ñтану"
-#: ../src/main.c:345
-msgid "Config file location"
-msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° налаштувань"
-
-#: ../src/main.c:345
-msgid "/path/to/config.file"
-msgstr "/шлÑÑ…/до/файла.налаштувань"
-
-#: ../src/main.c:346
-msgid "List of plugins separated by ','"
-msgstr "СпиÑок додатків, відокремлених комами («,»)"
-
-#: ../src/main.c:346
-msgid "plugin1,plugin2"
-msgstr "додаток1,додаток2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:348
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Рівень докладноÑÑ‚Ñ– журналу, одне зі значень: ERR, WARN, INFO, DEBUG"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:351
-msgid ""
-"Log domains separated by ',': any combination of\n"
-" [NONE,HW,RFKILL,ETHER,WIFI,"
-"BT,MB,DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,"
-"DNS,VPN,SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,"
-"CORE,DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-msgstr ""
-"ОблаÑÑ‚Ñ– Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, відокремлені комами, довільна ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð°Ñ†Ñ–Ñ Ñ‚Ð°ÐºÐ¸Ñ… "
-"значень:\n"
-" NONE,HW,RFKILL,ETHER,WIFI, BT,MB,"
-"DHCP4,DHCP6,PPP,\n"
-" WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,"
-"SHARING,SUPPLICANT,\n"
-" AGENTS,SETTINGS,SUSPEND,CORE,"
-"DEVICE,OLPC,WIMAX,\n"
-" INFINIBAND,FIREWALL,ADSL]"
-
-#: ../src/main.c:357
-msgid "An http(s) address for checking internet connectivity"
-msgstr "ÐдреÑа http(s) Ð´Ð»Ñ Ñпроб перевірки можливоÑÑ‚Ñ– вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-
-#: ../src/main.c:358
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "Інтервал між перевірками можливоÑÑ‚Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (у Ñекундах)"
-
-#: ../src/main.c:359
-msgid "The expected start of the response"
-msgstr "Очікуваний початок відповіді"
-
-#: ../src/main.c:359
-msgid "Bingo!"
-msgstr "Влучно!"
-
-#: ../src/main.c:364
+#: ../src/main.c:395
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "Підтримки GModules на цій платформі не передбачено!\n"
-#: ../src/main.c:383
+#: ../src/main.c:400
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr ""
+"ЗапуÑк NetworkManager Ñлід здійÑнювати з облікового запиÑу адмініÑтратора "
+"(root)!\n"
+
+#: ../src/main.c:423
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2642,47 +6409,51 @@ msgstr ""
"з Ñкими Ñлід пов’Ñзувати картки бездротового доÑтупу на вашому\n"
"комп’ютері."
-#: ../src/main.c:389
+#: ../src/main.c:429 ../src/main.c:445
#, c-format
-msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
-"Ðекоректний параметр. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ "
-"параметром --help.\n"
+"%s. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --"
+"help.\n"
-#: ../src/main.c:399
+#: ../src/main.c:450
#, c-format
-msgid "You must be root to run NetworkManager!\n"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
-"ЗапуÑк NetworkManager Ñлід здійÑнювати з облікового запиÑу адмініÑтратора "
-"(root)!\n"
+"Ігноруємо нерозпізнані домени журналюваннÑ, «%s», передані за допомогою "
+"командного Ñ€Ñдка.\n"
-#: ../src/main.c:432
+#: ../src/main.c:501
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ налаштуваннÑ: (%d) %s\n"
-#: ../src/main.c:443
+#: ../src/main.c:515
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "Помилка у файлі налаштувань: %s.\n"
+
+#: ../src/main.c:520
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr ""
-"%s. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --"
-"help.\n"
+"Ігноруємо нерозпізнані домени журналюваннÑ, «%s», з файлів налаштувань.\n"
-#: ../src/main.c:450
+#: ../src/main.c:528
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла Ñтану %s: (%d) %s\n"
-#: ../src/main.c:467
+#: ../src/main.c:541
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Ðе вдалоÑÑ Ñтворити фонову Ñлужбу: %s [помилка %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:140
msgid "# Created by NetworkManager\n"
msgstr "# Створено за допомогою NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:147
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2691,196 +6462,1449 @@ msgstr ""
"# Об’єднано з %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
msgid "no usable DHCP client could be found."
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ придатного до викориÑÑ‚Ð°Ð½Ð½Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð° DHCP."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
+#: ../src/dhcp-manager/nm-dhcp-manager.c:320
msgid "'dhclient' could be found."
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «dhclient»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
+#: ../src/dhcp-manager/nm-dhcp-manager.c:330
msgid "'dhcpcd' could be found."
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «dhcpcd»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:338
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "підтримки клієнта DHCP «%s» не передбачено"
-#: ../src/dns-manager/nm-dns-manager.c:375
+#: ../src/dns-manager/nm-dns-manager.c:385
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"ЗÐУВÐЖЕÐÐЯ: можливо, інÑтрумент Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑ Ð·Ð° назвами libc вашої "
"ÑиÑтеми не підтримує викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð½Ð°Ð´ 3 Ñерверів назв."
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:387
msgid "The nameservers listed below may not be recognized."
msgstr "Вказані у наведеному нижче ÑпиÑку Ñервери назв може бути пропущено."
-#: ../src/logging/nm-logging.c:141
+#: ../src/logging/nm-logging.c:150
#, c-format
msgid "Unknown log level '%s'"
-msgstr "Ðевідомий рівень Ð¶ÑƒÑ€Ð½Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Â«%s»"
+msgstr "Ðевідомий рівень Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, «%s»"
-#: ../src/logging/nm-logging.c:187
+#: ../src/logging/nm-logging.c:229
#, c-format
msgid "Unknown log domain '%s'"
-msgstr "Ðевідомий домен Ð¶ÑƒÑ€Ð½Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Â«%s»"
+msgstr "Ðевідомий домен Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, «%s»"
-#: ../src/modem-manager/nm-modem-cdma.c:271
-#: ../src/modem-manager/nm-modem-broadband.c:553 ../src/nm-device-bt.c:338
-#, c-format
-msgid "CDMA connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ CDMA %d"
+#: ../src/config/nm-config.c:281
+msgid "Config file location"
+msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° налаштувань"
-#: ../src/modem-manager/nm-modem-gsm.c:549
-#: ../src/modem-manager/nm-modem-broadband.c:531 ../src/nm-device-bt.c:334
-#, c-format
-msgid "GSM connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ GSM %d"
+#: ../src/config/nm-config.c:281
+msgid "/path/to/config.file"
+msgstr "/шлÑÑ…/до/файла.налаштувань"
-#: ../src/nm-device-bond.c:198
-#, c-format
-msgid "Bond connection %d"
-msgstr "Прив’Ñзане Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
+#: ../src/config/nm-config.c:282
+msgid "Config directory location"
+msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ налаштувань"
+
+#: ../src/config/nm-config.c:282
+msgid "/path/to/config/dir"
+msgstr "/шлÑÑ…/до/каталогу/налаштувань"
+
+#: ../src/config/nm-config.c:284
+msgid "List of plugins separated by ','"
+msgstr "СпиÑок додатків, відокремлених комами («,»)"
+
+#: ../src/config/nm-config.c:284
+msgid "plugin1,plugin2"
+msgstr "додаток1,додаток2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/config/nm-config.c:287
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ÐдреÑа http(s) Ð´Ð»Ñ Ñпроб перевірки можливоÑÑ‚Ñ– вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
+
+#: ../src/config/nm-config.c:288
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Інтервал між перевірками можливоÑÑ‚Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (у Ñекундах)"
+
+#: ../src/config/nm-config.c:289
+msgid "The expected start of the response"
+msgstr "Очікуваний початок відповіді"
+
+#: ../src/config/nm-config.c:289
+msgid "Bingo!"
+msgstr "Влучно!"
-#: ../src/nm-device-adsl.c:194
+#: ../src/devices/adsl/nm-device-adsl.c:122
#, c-format
msgid "ADSL connection %d"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ADSL %d"
-#: ../src/nm-device-bridge.c:208
+#: ../src/devices/bluetooth/nm-bluez-device.c:194
#, c-format
-#| msgid "Bond connection %d"
-msgid "Bridge connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ñтка %d"
+msgid "%s Network"
+msgstr "Мережа %s"
-#: ../src/nm-device-bt.c:309
+#: ../src/devices/bluetooth/nm-device-bt.c:284
#, c-format
msgid "PAN connection %d"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ PAN %d"
-#: ../src/nm-device-bt.c:342
+#: ../src/devices/bluetooth/nm-device-bt.c:309
+#: ../src/devices/wwan/nm-modem-broadband.c:438
+#: ../src/devices/wwan/nm-modem-old.c:815
+#, c-format
+msgid "GSM connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ GSM %d"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:313
+#: ../src/devices/wwan/nm-modem-broadband.c:460
+#: ../src/devices/wwan/nm-modem-old.c:842
+#, c-format
+msgid "CDMA connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ CDMA %d"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:317
#, c-format
msgid "DUN connection %d"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DUN %d"
-#: ../src/nm-device-ethernet.c:1319
+#: ../src/devices/nm-device-bond.c:138 ../tui/nm-editor-utils.c:204
+#, c-format
+msgid "Bond connection %d"
+msgstr "Прив’Ñзане Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
+
+#: ../src/devices/nm-device-bridge.c:148 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ñтка %d"
+
+#: ../src/devices/nm-device-ethernet.c:1486
#, c-format
msgid "PPPoE connection %d"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ PPPoE %d"
-#: ../src/nm-device-ethernet.c:1319 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet.c:1486
+#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Дротове Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
-#: ../src/nm-device-infiniband.c:299
+#: ../src/devices/nm-device-infiniband.c:255 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ InfiniBand %d"
-#: ../src/nm-device-olpc-mesh.c:293
+#: ../src/devices/nm-device-team.c:152 ../tui/nm-editor-utils.c:223
#, c-format
-msgid "Mesh %d"
-msgstr "Mesh %d"
+msgid "Team connection %d"
+msgstr "Командне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
-#: ../src/nm-device-vlan.c:331
+#: ../src/devices/nm-device-vlan.c:230 ../tui/nm-editor-utils.c:231
#, c-format
msgid "VLAN connection %d"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VLAN %d"
-#: ../src/nm-manager.c:746
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:164
+#, c-format
+msgid "Mesh %d"
+msgstr "Mesh %d"
+
+#: ../src/nm-manager.c:3304 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN %d"
-#: ../src/nm-netlink-monitor.c:152 ../src/nm-netlink-monitor.c:276
-#: ../src/nm-netlink-monitor.c:699
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ netlink: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager потрібно вимкнути роботу мереж"
-#: ../src/nm-netlink-monitor.c:255
-msgid "error occurred while waiting for data on socket"
-msgstr "під Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° дані з Ñокета ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:113
+msgid "System"
+msgstr "СиÑтема"
-#: ../src/nm-netlink-monitor.c:300
+#: ../test/nm-online.c:96
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
+msgid "\rConnecting"
+msgstr "\rÐ’ÑтановлюєтьÑÑ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
+
+#: ../test/nm-online.c:148
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr ""
-"не вдалоÑÑ Ð²Ñтановити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· netlink Ð´Ð»Ñ ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° Ñтаном "
-"з’єднаннÑ: %s"
+"Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° з’єднаннÑ, у Ñекундах (без цього параметра типовим "
+"значеннÑм Ñ” 30)"
-#: ../src/nm-netlink-monitor.c:311
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
+#: ../test/nm-online.c:149
+#| msgid "Exit immediately if NetworkManager is not running"
+msgid "Exit immediately if NetworkManager is not running or connecting"
msgstr ""
-"не вдалоÑÑ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ інÑтрумент netlink Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтраційних даних: %s"
+"Ðегайно завершити роботу, Ñкщо NetworkManager не запущено або виконуєтьÑÑ "
+"Ñпроба з’єднаннÑ"
-#: ../src/nm-netlink-monitor.c:334 ../src/nm-netlink-monitor.c:394
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
+#: ../test/nm-online.c:150
+msgid "Don't print anything"
+msgstr "Ðічого не виводити"
+
+#: ../test/nm-online.c:151
+#| msgid ""
+#| "Waits for NetworkManager to finish activating startup network connections."
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "Чекати на запуÑк NetworkManager, а не на з’єднаннÑ"
+
+#: ../test/nm-online.c:172
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
msgstr ""
-"не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити у пам’ÑÑ‚Ñ– інÑтрумент netlink Ð´Ð»Ñ ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° "
-"Ñтаном з’єднаннÑ: %s"
+"Очікує на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— NetworkManager з’єднань, Ñкі Ñлід активувати "
+"під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку."
-#: ../src/nm-netlink-monitor.c:419
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#: ../test/nm-online.c:179 ../test/nm-online.c:185
+msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
-"не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити у пам’ÑÑ‚Ñ– кеш з’єднань netlink Ð´Ð»Ñ ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° "
-"Ñтаном з’єднань: %s"
+"Ðекоректний параметр. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ "
+"параметром --help."
+
+#: ../tui/newt/nmt-newt-utils.c:179 ../tui/nmt-editor.c:231
+#: ../tui/nmt-password-dialog.c:175 ../tui/nmt-route-editor.c:135
+#: ../tui/nmtui-hostname.c:71 ../tui/nmtui.c:121
+msgid "OK"
+msgstr "Гаразд"
-#: ../src/nm-netlink-monitor.c:546
+#: ../tui/newt/nmt-newt-utils.c:327 ../tui/newt/nmt-newt-utils.c:359
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "не вдалоÑÑ Ð´Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ÑÑ Ð´Ð¾ групи netlink: %s"
+msgid "Could not create temporary file: %s"
+msgstr "Ðе вдалоÑÑ Ñтворити тимчаÑовий файл «%s»"
-#: ../src/nm-netlink-monitor.c:675 ../src/nm-netlink-monitor.c:688
+#: ../tui/newt/nmt-newt-utils.c:367
#, c-format
-msgid "error updating link cache: %s"
-msgstr "помилка під Ñ‡Ð°Ñ Ñпроби Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐµÑˆÑƒ з’єднаннÑ: %s"
+msgid "Editor failed: %s"
+msgstr "Помилка редактора: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
-msgid "System"
-msgstr "СиÑтема"
+#: ../tui/newt/nmt-newt-utils.c:375
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "Помилка редактора з кодом Ñтану %d"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3702
-msgid "Bond"
-msgstr "Прив’Ñзка"
+#: ../tui/newt/nmt-newt-utils.c:377
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "Помилка редактора з Ñигналом %d"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3887
-msgid "Bridge"
-msgstr "МіÑток"
+#: ../tui/newt/nmt-newt-utils.c:381
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Ðе вдалоÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ прочитати файл: %s"
-#: ../test/nm-online.c:111
+#: ../tui/nm-editor-utils.c:160
#, c-format
-msgid "\rConnecting"
-msgstr "\rÐ’ÑтановлюєтьÑÑ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
+msgid "Ethernet connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ethernet %d"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr "Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° з’єднаннÑ, у Ñекундах (типовим Ñ” 30)"
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Wi-Fi %d"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою мобільної радіомережі %d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DSL %d"
+
+#: ../tui/nmt-device-entry.c:391
+msgid "Select..."
+msgstr "Вибрати…"
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Додати"
+
+#: ../tui/nmt-edit-connection-list.c:132 ../tui/nmt-page-ip4.c:175
+#: ../tui/nmt-page-ip6.c:173 ../tui/nmt-page-team-port.c:110
+#: ../tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "Змінити..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:467
+msgid "Delete"
+msgstr "Вилучити"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "Ðе вдалоÑÑ Ñтворити редактор Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» типу «%s»."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Ðе вдалоÑÑ Ñтворити редактор Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»."
+
+#: ../tui/nmt-editor.c:95
+#| msgid "Edit connection"
+msgid "Edit Connection"
+msgstr "Редагувати з’єднаннÑ"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби зберегти Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ нове з’єднаннÑ: %s"
+
+#: ../tui/nmt-editor.c:228 ../tui/nmt-password-dialog.c:172
+#: ../tui/nmt-route-editor.c:128 ../tui/nmtui-edit.c:192
+#: ../tui/nmtui-edit.c:466 ../tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "СкаÑувати"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(типово)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "байтів"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Циклічний"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Ðктивне резервуваннÑ"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "ТранÑлÑціÑ"
+
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Ðдаптивне ÑƒÑ€Ñ–Ð²Ð½Ð¾Ð²Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° передаваннÑм (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Ðдаптивне ÑƒÑ€Ñ–Ð²Ð½Ð¾Ð²Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (рекомендоване)"
+
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "Підлеглі"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "Режим"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "ОÑновний"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "СпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° зв’Ñзком"
+
+#: ../tui/nmt-page-bond.c:389 ../tui/nmt-page-bond.c:396
+#: ../tui/nmt-page-bond.c:403 ../tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "мÑ"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "ЧаÑтота оновленнÑ"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Затримка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð²â€™Ñзку"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Затримка Ñ€Ð¾Ð·Ñ–Ñ€Ð²Ð°Ð½Ð½Ñ Ð·Ð²â€™Ñзку"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "Цілі ARP"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "ПОРТ МІСТКÐ"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "Пріоритет"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "ВартіÑÑ‚ÑŒ маршруту"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Режим початкової зони (hairpin)"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "МІСТОК"
+
+#: ../tui/nmt-page-bridge.c:96 ../tui/nmt-page-bridge.c:121
+#: ../tui/nmt-page-bridge.c:131 ../tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "Ñекунд"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "Ð§Ð°Ñ Ð·Ð°ÑтаріваннÑ"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "Увімкнути STP (протокол розподілу за деревом)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Затримка переÑпрÑмуваннÑ"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Ð§Ð°Ñ Ð½Ð° вітаннÑ"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "МакÑ. вік"
+
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "Клонована MAC-адреÑа"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Данограма"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "З'єднано"
+
+#: ../tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "Режим передаваннÑ"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Вимкнено"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Ðвтоматично"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Link-Local"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Вручну"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Спільний"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "ÐÐЛÐШТУВÐÐÐЯ IPv4"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(Ðемає нетипових маршрутів)"
+
+#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "%d нетипове правило"
+msgstr[1] "%d нетипових правила"
+msgstr[2] "%d нетипових правил"
+msgstr[3] "Одне нетипове правило"
+
+#: ../tui/nmt-page-ip4.c:144 ../tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "ÐдреÑи"
+
+#: ../tui/nmt-page-ip4.c:150 ../tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "Шлюз"
+
+#: ../tui/nmt-page-ip4.c:156 ../tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "Сервери DNS"
+
+#: ../tui/nmt-page-ip4.c:162 ../tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "Домени пошуку"
+
+#: ../tui/nmt-page-ip4.c:177 ../tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "Маршрути"
+
+#: ../tui/nmt-page-ip4.c:179 ../tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "Ðіколи не викориÑтовувати цю мережу Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ñ— маршрутизації"
+
+#: ../tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ðµ адреÑÑƒÐ²Ð°Ð½Ð½Ñ IPv4"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ігнорувати"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Ðвтоматично (лише DHCP)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "ÐÐЛÐШТУВÐÐÐЯ IPv6"
+
+#: ../tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ðµ адреÑÑƒÐ²Ð°Ð½Ð½Ñ IPv6"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "Сховати"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "Показати"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "Ðазва профілю"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "ПриÑтрій"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "З’єднуватиÑÑŒ автоматично"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "ДоÑтупне уÑім кориÑтувачам"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "ПОРТ КОМÐÐДИ"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ JSON"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "КОМÐÐДÐ"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "БатьківÑький"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "Ід. VLAN"
+
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../tui/nmt-page-wifi.c:69
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Клієнт"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "Точка доÑтупу"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Спеціальна мережа"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Ðвтоматично"
+
+#. 802.11a Wi-Fi network
+#: ../tui/nmt-page-wifi.c:78
+msgid "A (5 GHz)"
+msgstr "A (5 ГГц)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../tui/nmt-page-wifi.c:80
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2,4 ГГц)"
+
+#: ../tui/nmt-page-wifi.c:85
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Ðемає"
+
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA/WPA2 Personal"
+
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA/WPA2 Enterprise"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "40/128-бітовий ключ WEP (шіÑтнадцÑтковий або ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "128-бітовий пароль WEP"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "Динамічна WEP (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (типово)"
+
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "Відкрита ÑиÑтема"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "Відкритий ключ"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "Канал"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "ЗахиÑÑ‚"
+
+#: ../tui/nmt-page-wifi.c:274 ../tui/nmt-page-wifi.c:305
+#: ../tui/nmt-page-wifi.c:335 ../tui/nmt-secret-agent.c:214
+#: ../tui/nmt-secret-agent.c:251 ../tui/nmt-secret-agent.c:281
+#: ../tui/nmt-secret-agent.c:314 ../tui/nmt-secret-agent.c:380
+#: ../tui/nmt-secret-agent.c:393 ../tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "Пароль"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(Підтримки wpa-enterprise ще не передбачено...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "Ключ"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "Ð†Ð½Ð´ÐµÐºÑ WEP"
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "РозпізнаваннÑ"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Підтримки dynamic-wep ще не передбачено...)"
+
+#. TTLS and PEAP are actually much more complicated, but this complication
+#. * is not visible here since we only care about phase2 authentication
+#. * (and don't even care of which one)
+#.
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "КориÑтувач"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Запитувати про цей пароль щоразу"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Показати фразу паролÑ"
+
+#: ../tui/nmt-route-table.c:226
+msgid "Destination"
+msgstr "ПризначеннÑ"
+
+#: ../tui/nmt-route-table.c:226
+msgid "Prefix"
+msgstr "ПрефікÑ"
+
+#: ../tui/nmt-route-table.c:235
+msgid "Next Hop"
+msgstr "ÐаÑтупне переÑиланнÑ"
+
+#: ../tui/nmt-route-table.c:243
+msgid "Metric"
+msgstr "Метрика"
+
+#: ../tui/nmt-route-table.c:263
+msgid "No custom routes are defined."
+msgstr "Ðетипових маршрутів не визначено."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "Профіль"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "Пароль закритого ключа"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "Служба"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "Ð”Ð»Ñ Ð´Ð¾Ñтупу до бездротової мережі Ñлід пройти розпізнаваннÑ"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
msgstr ""
-"Ðегайно завершити роботу, Ñкщо NetworkManager не запущено або виконуєтьÑÑ "
-"Ñпроба з’єднаннÑ"
+"Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до бездротової мережі потрібні паролі або ключі "
+"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»."
-#: ../test/nm-online.c:144
-msgid "Don't print anything"
-msgstr "Ðічого не виводити"
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ñ€Ð¾Ñ‚Ð¾Ð²Ð¾Ñ— мережі 802.1X"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "Очікувати на уÑпішне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñƒ NetworkManager."
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Ðазва мережі"
-#: ../test/nm-online.c:168 ../test/nm-online.c:177
-msgid "Invalid option. Please use --help to see a list of valid options."
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ DSL"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "Потрібен PIN-код"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
msgstr ""
-"Ðекоректний параметр. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ "
-"параметром --help."
+"Ð”Ð»Ñ ÐºÐ¾Ñ€Ð¸ÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ñтроєм мобільної широкоÑмугової мережі Ñлід вказати PIN-"
+"код"
+
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../tui/nmt-secret-agent.c:376 ../tui/nmt-secret-agent.c:389
+#: ../tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "Пароль до мобільної широкоÑмугової мережі"
+
+#: ../tui/nmt-secret-agent.c:377 ../tui/nmt-secret-agent.c:390
+#: ../tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "Ð”Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· «%s» Ñлід вказати пароль."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "Виберіть тип підлеглого з’єднаннÑ, Ñке ви хочете додати."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Додати…"
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Вилучити"
+
+#: ../tui/nmtui-connect.c:94
+msgid "Activation failed"
+msgstr "Ðевдала Ñпроба активації"
+
+#: ../tui/nmtui-connect.c:142
+msgid "Connecting..."
+msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ..."
+
+#: ../tui/nmtui-connect.c:172 ../tui/nmtui-connect.c:195
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти з’єднаннÑ: %s"
+
+#: ../tui/nmtui-connect.c:259 ../tui/nmtui-connect.c:308
+msgid "Activate"
+msgstr "Ðктивізувати"
+
+#: ../tui/nmtui-connect.c:261
+msgid "Deactivate"
+msgstr "Вимкнути"
+
+#: ../tui/nmtui-connect.c:313 ../tui/nmtui-edit.c:95 ../tui/nmtui.c:115
+msgid "Quit"
+msgstr "Вийти"
+
+#: ../tui/nmtui-connect.c:336
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» не Ñ–Ñнує"
+
+#: ../tui/nmtui-connect.c:338
+msgid "Connection is already active"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñ” активним"
+
+#: ../tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "Створити"
+
+#: ../tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "Виберіть тип з’єднаннÑ, Ñке Ñлід Ñтворити."
+
+#: ../tui/nmtui-edit.c:350
+msgid ""
+"If you are creating a VPN, and the VPN connection you wish to create does "
+"not appear in the list, you may not have the correct VPN plugin installed."
+msgstr ""
+"Якщо ви Ñтворюєте VPN Ñ– пункту Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN, Ñке ви хочете Ñтворити, немає "
+"у ÑпиÑку, ймовірно, додаток VPN не вÑтановлено або вÑтановлено неналежним "
+"чином."
+
+#: ../tui/nmtui-edit.c:386 ../tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "Ðове з’єднаннÑ"
+
+#: ../tui/nmtui-edit.c:439
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
+
+#: ../tui/nmtui-edit.c:468
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Ви Ñправді хочете вилучити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»?"
+
+#: ../tui/nmtui-edit.c:482
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Ð’Ñтановити назву вузла"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Ðазва вузла"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Ð’Ñтановити назву вузла «%s»"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити назву вузла: %s"
+
+#: ../tui/nmtui.c:60 ../tui/nmtui.c:63
+msgid "connection"
+msgstr "з’єднаннÑ"
+
+#: ../tui/nmtui.c:61
+msgid "Edit a connection"
+msgstr "Змінити Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
+
+#: ../tui/nmtui.c:64
+msgid "Activate a connection"
+msgstr "ЗадіÑти з’єднаннÑ"
+
+#: ../tui/nmtui.c:66
+msgid "new hostname"
+msgstr "нова назва вузла"
+
+#: ../tui/nmtui.c:67
+msgid "Set system hostname"
+msgstr "Ð’Ñтановити назву вузла ÑиÑтеми"
+
+#: ../tui/nmtui.c:90
+msgid "NetworkManager TUI"
+msgstr "КонÑольний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾ NetworkManager"
+
+#: ../tui/nmtui.c:98
+msgid "Please select an option"
+msgstr "Будь лаÑка, виберіть варіант"
+
+#: ../tui/nmtui.c:159
+msgid "Usage"
+msgstr "КориÑтуваннÑ"
+
+#: ../tui/nmtui.c:241
+msgid "Could not parse arguments"
+msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ аргументи"
+
+#: ../tui/nmtui.c:251
+msgid "NetworkManager is not running."
+msgstr "NetworkManager не запущено."
+
+#~ msgid "invalid IPv4 route '%s'"
+#~ msgstr "некоректний маршрут IPv4, «%s»"
+
+#~ msgid "invalid prefix '%s'; <0-32> allowed"
+#~ msgstr ""
+#~ "некоректний префікÑ, «%s»; можна викориÑтовувати префікÑи лише у "
+#~ "діапазоні <0-32>"
+
+#~ msgid "invalid IPv6 route '%s'"
+#~ msgstr "некоректний маршрут IPv6, «%s»"
+
+#~ msgid "invalid prefix '%s'; <0-128> allowed"
+#~ msgstr ""
+#~ "некоректний префікÑ, «%s»; можна викориÑтовувати префікÑи лише у "
+#~ "діапазоні <0-128>"
+
+#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%s» передбачено 3 додаткових аргументи.\n"
+
+#~ msgid "Do you want to provide them? (yes/no) [yes] "
+#~ msgstr "Хочете вказати назву? (yes — так/no — ні) [типово yes] "
+
+#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+#~ msgstr ""
+#~ "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «InfiniBand» передбачено 5 додаткових аргументів.\n"
+
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "Режим Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ (datagram або connected) [типово datagram]: "
+
+#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «WiMax» передбачено один додатковий аргумент.\n"
+
+#~ msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «PPPoE» передбачено 4 додаткових аргументи.\n"
+
+#~ msgid ""
+#~ "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+#~ msgstr ""
+#~ "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «mobile broadband» передбачено 2 додаткових аргументи.\n"
+
+#~ msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+#~ msgstr ""
+#~ "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «bluetooth» передбачено один додатковий аргумент.\n"
+
+#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "Тип bluetooth (panu, dun-gsm або dun-cdma) [типово panu]: "
+
+#~ msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «VLAN» передбачено 4 додаткових аргументів.\n"
+
+#~ msgid "There are optional arguments for 'bond' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «bond» передбачено додаткові аргументи.\n"
+
+#~ msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+#~ msgstr ""
+#~ "Режим ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° прив’ÑзуваннÑм (miimon або arp) [типово miimon]: "
+
+#~ msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «bridge» передбачено 6 додаткових аргументи.\n"
+
+#~ msgid "Error: 'stp': '%s'.\n"
+#~ msgstr "Помилка: «stp»: «%s».\n"
+
+#~ msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+#~ msgstr ""
+#~ "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «bridge-slave» передбачено 3 додаткових аргументи.\n"
+
+#~ msgid "Hairpin (yes/no) [yes]: "
+#~ msgstr ""
+#~ "ÐŸÐ¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ початкової зони (hairpin) (yes — так/no — ні) [типово yes]: "
+
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "Помилка: «hairpin»: «%s».\n"
+
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «VPN» передбачено один додатковий аргумент.\n"
+
+#~ msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+#~ msgstr "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «OLPC-Mesh» передбачено 2 додаткових аргументи.\n"
+
+#~ msgid "Error: '%s' setting not present\n"
+#~ msgstr "Помилка: немає параметра «%s»\n"
+
+#~ msgid ""
+#~ ">>> Command-line editing is not available. Consider installing a line "
+#~ "editing library to enable the feature. <<<\n"
+#~ "Supported libraries are:\n"
+#~ " - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+#~ "readline/rltop.html\n"
+#~ " - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+#~ msgstr ""
+#~ ">>> Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ командному Ñ€Ñдку недоÑтупне. Вам варто вÑтановити "
+#~ "бібліотеку редагуваннÑ, щоб мати змогу ÑкориÑтатиÑÑ Ñ†Ñ–Ñ”ÑŽ можливіÑÑ‚ÑŽ. <<<\n"
+#~ "Підтримувані бібліотеки:\n"
+#~ " - GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+#~ "readline/rltop.html\n"
+#~ " - NetBSD Editline (libedit) http://www.thrysoee.dk/editline/\n"
+
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr ""
+#~ "«%s» Ñ” некоректним (мало бути <IP призначеннÑ>/prefix <наÑтупне IP> "
+#~ "[метрика])"
+
+#~ msgid ""
+#~ "Usage: nmcli connection show { ARGUMENTS | help }\n"
+#~ "\n"
+#~ "ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+#~ "\n"
+#~ "Show connections which are currently used by a device to connect to a "
+#~ "network.\n"
+#~ "Without a parameter, all active connections are listed. When <ID> is "
+#~ "provided,\n"
+#~ "the connection details are displayed instead.\n"
+#~ "\n"
+#~ "ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+#~ "\n"
+#~ "Show in-memory and on-disk connections, some of which may also be active "
+#~ "if\n"
+#~ "a device is using that connection profile. Without a parameter, all "
+#~ "profiles\n"
+#~ "are listed. When <ID> is provided, the profile details are displayed "
+#~ "instead.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "КориÑтуваннÑ: nmcli connection show { ÐРГУМЕÐТИ | help }\n"
+#~ "\n"
+#~ "ÐРГУМЕÐТИ := active [[id | uuid | path | apath] <ідентифікатор>]\n"
+#~ "\n"
+#~ "Показати ÑпиÑок з’єднань, Ñкі зараз викориÑтовуютьÑÑ Ð¿Ñ€Ð¸Ñтроєм Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ "
+#~ "у мережі.\n"
+#~ "Без параметра буде показано уÑÑ– активні з’єднаннÑ. Якщо вказано параметр "
+#~ "<ідентифікатор>,\n"
+#~ "буде показано дані щодо з’єднаннÑ.\n"
+#~ "\n"
+#~ "ÐРГУМЕÐТИ := configured [[id | uuid | path] <ідентифікатор>]\n"
+#~ "\n"
+#~ "Показати ÑпиÑок з’єднань у пам’ÑÑ‚Ñ– та на диÑку. ДеÑкі з цих з’єднань "
+#~ "можуть також бути активними,\n"
+#~ "Ñкщо приÑтроєм викориÑтовуєтьÑÑ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸Ð¹ профіль з’єднаннÑ. Без "
+#~ "параметра буде показано ÑпиÑок\n"
+#~ "уÑÑ–Ñ… профілів. Якщо вказано параметр <ідентифікатор>, буде показано дані "
+#~ "щодо профілю.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: nmcli connection modify { ARGUMENTS | help }\n"
+#~ "\n"
+#~ "ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+#~ "[<value>]\n"
+#~ "\n"
+#~ "Modify a single property in the connection profile.\n"
+#~ "The profile is identified by its name, UUID or D-Bus path.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "КориÑтуваннÑ: nmcli connection modify { ÐРГУМЕÐТИ | help }\n"
+#~ "\n"
+#~ "ÐРГУМЕÐТИ := [id | uuid | path] <ідентифікатор> <назва параметра>.<назва "
+#~ "влаÑтивоÑÑ‚Ñ–> [<значеннÑ>]\n"
+#~ "\n"
+#~ "Змінити окрему влаÑтивіÑÑ‚ÑŒ у профілі з’єднаннÑ.\n"
+#~ "Профіль можна вказати за назвою, UUID або шлÑхом D-Bus.\n"
+#~ "\n"
+
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "Помилка: «list configured»: %s"
+
+#~ msgid "List of configured connections"
+#~ msgstr "СпиÑок налаштованих з’єднань"
+
+#~ msgid "Error: 'show configured': %s"
+#~ msgstr "Помилка: «show configured»: %s"
+
+#~ msgid "Error: 'list active': %s"
+#~ msgstr "Помилка: «list active»: %s"
+
+#~ msgid "List of active connections"
+#~ msgstr "СпиÑок активних з’єднань"
+
+#~ msgid "Error: 'show active': %s"
+#~ msgstr "Помилка: «show active»: %s"
+
+#~ msgid "Error: 'master': '%s' is not valid UUID nor interface."
+#~ msgstr "Помилка: «master»: «%s» не Ñ” коректним UUID Ñ– не Ñ” інтерфейÑом."
+
+#~ msgid ""
+#~ "save :: save the connection\n"
+#~ "\n"
+#~ "Sends the connection to NetworkManager that will save it.\n"
+#~ msgstr ""
+#~ "save :: зберегти з’єднаннÑ\n"
+#~ "\n"
+#~ "ÐадÑилає дані Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ NetworkManager Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ.\n"
+
+#~ msgid ""
+#~ "remove [<index>|<option>] :: delete the value\n"
+#~ "\n"
+#~ "Removes the property value (sets it to default).\n"
+#~ msgstr ""
+#~ "remove [<індекÑ>|<параметр>] :: вилучити значеннÑ\n"
+#~ "\n"
+#~ "Вилучає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– (вÑтановлює типове значеннÑ).\n"
+
+#~ msgid ""
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr ""
+#~ "Помилка: разом з «connection show» мало бути вказано команду «configured» "
+#~ "або «active»."
+
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr ""
+#~ "Ðекоректний параметр. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, "
+#~ "ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --help.\n"
+
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "під Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° дані з Ñокета ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
+
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ netlink: %s"
+
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr ""
+#~ "не вдалоÑÑ Ð²Ñтановити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· netlink Ð´Ð»Ñ ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° Ñтаном "
+#~ "з’єднаннÑ: %s"
+
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr ""
+#~ "не вдалоÑÑ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ інÑтрумент netlink Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтраційних даних: "
+#~ "%s"
+
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr ""
+#~ "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити у пам’ÑÑ‚Ñ– інÑтрумент netlink Ð´Ð»Ñ ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° "
+#~ "Ñтаном з’єднаннÑ: %s"
+
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "не вдалоÑÑ Ð´Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ÑÑ Ð´Ð¾ групи netlink: %s"
+
+#~ msgid "IP"
+#~ msgstr "IP"
+
+#~ msgid "Error: 'show configured': %s; allowed fields: %s"
+#~ msgstr "Помилка: «show configured»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: 'list active': %s; allowed fields: %s"
+#~ msgstr "Помилка: «list active»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: 'show active': %s; allowed fields: %s"
+#~ msgstr "Помилка: «show active»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: 'device show': %s; allowed fields: %s"
+#~ msgstr "Помилка: «device show»: %s; дозволені полÑ: %s"
+
+#~ msgid "not connected"
+#~ msgstr "не з’єднано"
+
+#~ msgid "Error: 'device status': %s; allowed fields: %s"
+#~ msgstr "Помилка: «device status»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: 'device wifi': %s; allowed fields: %s"
+#~ msgstr "Помилка: «device wifi»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: 'device wimax': %s; allowed fields: %s"
+#~ msgstr "Помилка: «device wimax»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: %s (allowed fields: %s)"
+#~ msgstr "Помилка: %s (дозволені полÑ: %s)"
+
+#~ msgid "Error: 'general permissions': %s; allowed fields: %s"
+#~ msgstr "Помилка: «general permissions»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: 'general logging': %s; allowed fields: %s"
+#~ msgstr "Помилка: «general logging»: %s; дозволені полÑ: %s"
+
+#~ msgid "invalid field '%s'"
+#~ msgstr "некоректне поле «%s»"
+
+#~ msgid "Error: No suitable device found: %s."
+#~ msgstr "Помилка: не знайдено відповідних приÑтроїв: %s."
+
+#~ msgid "Error: No suitable device found."
+#~ msgstr "Помилка: не знайдено відповідних приÑтроїв."
+
+#~ msgid "Encrypted: "
+#~ msgstr "Зашифровано: "
+
+#~ msgid "WPA "
+#~ msgstr "WPA "
+
+#~ msgid "WPA2 "
+#~ msgstr "WPA2 "
+
+#~ msgid "Infrastructure"
+#~ msgstr "ІнфраÑтруктура"
+
+#~ msgid "NET-ENABLED"
+#~ msgstr "NET-ENABLED"
+
+#~ msgid "WIFI-HARDWARE"
+#~ msgstr "ОБЛÐДÐÐÐÐЯ WIFI"
+
+#~ msgid "WWAN-HARDWARE"
+#~ msgstr "ОБЛÐДÐÐÐÐЯ WWAN"
+
+#~ msgid "WIMAX-HARDWARE"
+#~ msgstr "ОБЛÐДÐÐÐÐЯ WIMAX"
+
+#~ msgid "Error: Couldn't connect to system bus: %s"
+#~ msgstr ""
+#~ "Помилка: не вдалоÑÑ Ð²Ñтановити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· ÑиÑтемним каналом обміну "
+#~ "даними: %s"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy."
+#~ msgstr "Помилка: не вдалоÑÑ Ñтворити прокÑÑ–-об’єкт D-Bus."
+
+#~ msgid "Error in sleep: %s"
+#~ msgstr "Помилка у затримці: %s"
+
+#~ msgid ""
+#~ "Usage: nmcli nm { COMMAND | help }\n"
+#~ "\n"
+#~ " COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
+#~ "wimax }\n"
+#~ "\n"
+#~ " COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+#~ "\n"
+#~ " status\n"
+#~ " permissions\n"
+#~ " enable [true|false]\n"
+#~ " sleep [true|false]\n"
+#~ " wifi [on|off]\n"
+#~ " wwan [on|off]\n"
+#~ " wimax [on|off]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "КориÑтуваннÑ: nmcli nm { КОМÐÐДР| help }\n"
+#~ "\n"
+#~ " КОМÐÐДР:= { status | permissions | enable | sleep | wifi | wwan | "
+#~ "wimax }\n"
+#~ "\n"
+#~ " КОМÐÐДР:= { status | permissions | enable | sleep | wifi | wwan }\n"
+#~ "\n"
+#~ " status\n"
+#~ " permissions\n"
+#~ " enable [true|false]\n"
+#~ " sleep [true|false]\n"
+#~ " wifi [on|off]\n"
+#~ " wwan [on|off]\n"
+#~ " wimax [on|off]\n"
+#~ "\n"
+
+#~ msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr ""
+#~ "Помилка: некоректний параметр «enable»: «%s»; мало бути «true» або "
+#~ "«false»."
+
+#~ msgid "Error: Sleeping status is not exported by NetworkManager."
+#~ msgstr "Помилка: Ñтан приÑиплÑÐ½Ð½Ñ Ð½Ðµ екÑпортовано NetworkManager."
+
+#~ msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr ""
+#~ "Помилка: некоректний параметр «sleep»: «%s»; мало бути «true» або «false»."
+
+#~ msgid "WiFi enabled"
+#~ msgstr "WiFi увімкнено"
+
+#~ msgid "WWAN enabled"
+#~ msgstr "WWAN увімкнено"
+
+#~ msgid "Error: invalid 'wwan' parameter: '%s'."
+#~ msgstr "Помилка: некоректний параметр «wwan»: «%s»."
+
+#~ msgid "WiMAX enabled"
+#~ msgstr "WiMAX увімкнено"
+
+#~ msgid "Error: invalid 'wimax' parameter: '%s'."
+#~ msgstr "Помилка: некоректний параметр «wimax»: «%s»."
+
+#~ msgid "Caught signal %d, shutting down..."
+#~ msgstr "Отримано Ñигнал %d, Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸â€¦"
+
+#~ msgid "setting '%s' is required"
+#~ msgstr "Ñлід визначити параметр «%s»"
+
+#~ msgid "'%s' setting is required for the connection when the property is set"
+#~ msgstr ""
+#~ "Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· цією вÑтановленою влаÑтивіÑÑ‚ÑŽ потрібен "
+#~ "параметр «%s»"
+
+#~ msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#~ msgstr ""
+#~ "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити у пам’ÑÑ‚Ñ– кеш з’єднань netlink Ð´Ð»Ñ ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° "
+#~ "Ñтаном з’єднань: %s"
+
+#~ msgid "error updating link cache: %s"
+#~ msgstr "помилка під Ñ‡Ð°Ñ Ñпроби Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐµÑˆÑƒ з’єднаннÑ: %s"
+
+#~ msgid "Waits for a successful connection in NetworkManager."
+#~ msgstr "Очікувати на уÑпішне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñƒ NetworkManager."
+
+#~ msgid "Error: no valid parameter specified."
+#~ msgstr "Помилка: не вказано коректних параметрів."
+
+#~ msgid "Error: Can't find out if NetworkManager is running: %s."
+#~ msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸, чи працює NetworkManager: %s."
+
+#~ msgid "Error: id or uuid has to be specified."
+#~ msgstr "Помилка: мало бути вказано id або uuid."
+
+#~ msgid "Warning: Connection not active\n"
+#~ msgstr "Помилка: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” активним\n"
+
+#~ msgid "Error: could not connect to D-Bus."
+#~ msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· D-Bus."
+
+#~ msgid "Error: Device '%s' is not a WiFi device."
+#~ msgstr "Помилка: приÑтрій «%s» не Ñ” приÑтроєм WiFi."
+
+#~ msgid "Error: 'nm status': %s; allowed fields: %s"
+#~ msgstr "Помилка: «nm status»: %s; дозволені полÑ: %s"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+#~ msgstr ""
+#~ "Помилка: не вдалоÑÑ Ñтворити прокÑÑ–-об’єкт D-Bus Ð´Ð»Ñ org.freedesktop.DBus"
+
+#~ msgid "Error: NameHasOwner request failed: %s"
+#~ msgstr "Помилка: невдала Ñпроба запиту NameHasOwner: %s"
+
+#~ msgid ""
+#~ "Log domains separated by ',': any combination of\n"
+#~ " [NONE,HW,RFKILL,ETHER,"
+#~ "WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,"
+#~ "AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,"
+#~ "CORE,DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL,ADSL]"
+#~ msgstr ""
+#~ "ОблаÑÑ‚Ñ– Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, відокремлені комами, довільна ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð°Ñ†Ñ–Ñ Ñ‚Ð°ÐºÐ¸Ñ… "
+#~ "значень:\n"
+#~ " NONE,HW,RFKILL,ETHER,WIFI, BT,"
+#~ "MB,DHCP4,DHCP6,PPP,\n"
+#~ " WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,"
+#~ "VPN,SHARING,SUPPLICANT,\n"
+#~ " AGENTS,SETTINGS,SUSPEND,CORE,"
+#~ "DEVICE,OLPC,WIMAX,\n"
+#~ " INFINIBAND,FIREWALL,ADSL]"
+
+#~ msgid "Not enough memory to store PEM file data."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… файла PEM."
+
+#~ msgid "Not enough memory to store private key data."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… закритого ключа."
+
+#~ msgid "Not enough memory to store certificate data."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ñертифіката."
+
+#~ msgid "Not enough memory to store the IV."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð’Ð†."
+
+#~ msgid "Not enough memory to decrypt private key."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð´ÐµÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа."
+
+#~ msgid "Not enough memory to store decrypted private key."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ закритого ключа."
+
+#~ msgid "Not enough memory for decrypted key buffer."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð° розшифрованого ключа."
+
+#~ msgid "Could not allocate memory for encrypting."
+#~ msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ пам’ÑÑ‚Ñ–."
+
+#~ msgid "Not enough memory to make encryption key."
+#~ msgstr "ÐедоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° шифруваннÑ."
+
+#~ msgid "Could not allocate memory for writing IV to PEM file."
+#~ msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу ВІ до файла PEM."
+#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
+#~ msgstr ""
+#~ "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу зашифрованого ключа до "
+#~ "файла PEM."
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 5f4b64f4c..742e0844f 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -708,8 +708,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:394
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:403
msgid "Encrypted: "
diff --git a/po/zh_TW.po b/po/zh_TW.po
index d6e530fdf..7d5e1fe31 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -698,8 +698,8 @@ msgstr "%u MHz"
#: ../cli/src/devices.c:350
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+msgid "%u Mbit/s"
+msgstr "%u Mbit/s"
#: ../cli/src/devices.c:359
msgid "Encrypted: "
diff --git a/policy/Makefile.in b/policy/Makefile.in
index 3e70edba4..68fe00f3c 100644
--- a/policy/Makefile.in
+++ b/policy/Makefile.in
@@ -82,7 +82,8 @@ subdir = policy
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(srcdir)/org.freedesktop.NetworkManager.policy.in.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -175,12 +176,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -205,7 +209,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -250,12 +253,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -272,6 +279,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -299,11 +308,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -318,6 +332,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -380,6 +395,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -390,6 +406,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
polkit_policydir = $(datadir)/polkit-1/actions
dist_polkit_policy_in_in_files = \
org.freedesktop.NetworkManager.policy.in.in
diff --git a/policy/org.freedesktop.NetworkManager.policy.in.in b/policy/org.freedesktop.NetworkManager.policy.in.in
index ea3777a47..cb229990c 100644
--- a/policy/org.freedesktop.NetworkManager.policy.in.in
+++ b/policy/org.freedesktop.NetworkManager.policy.in.in
@@ -85,7 +85,8 @@
<_description>Modify personal network connections</_description>
<_message>System policy prevents modification of personal network settings</_message>
<defaults>
- <allow_inactive>no</allow_inactive>
+ <allow_any>auth_self_keep</allow_any>
+ <allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
@@ -94,7 +95,8 @@
<_description>Modify network connections for all users</_description>
<_message>System policy prevents modification of network settings for all users</_message>
<defaults>
- <allow_inactive>no</allow_inactive>
+ <allow_any>auth_admin_keep</allow_any>
+ <allow_inactive>@NM_MODIFY_SYSTEM_POLICY@</allow_inactive>
<allow_active>@NM_MODIFY_SYSTEM_POLICY@</allow_active>
</defaults>
</action>
@@ -103,7 +105,8 @@
<_description>Modify persistent system hostname</_description>
<_message>System policy prevents modification of the persistent system hostname</_message>
<defaults>
- <allow_inactive>no</allow_inactive>
+ <allow_any>auth_admin_keep</allow_any>
+ <allow_inactive>auth_admin_keep</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
</defaults>
</action>
diff --git a/src/Makefile.am b/src/Makefile.am
index 3ea6241ca..2929e18c0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,115 +1,46 @@
-SUBDIRS= \
- generated \
- logging \
- posix-signals \
- dns-manager \
- vpn-manager \
- dhcp-manager \
- ip6-manager \
- supplicant-manager \
- ppp-manager \
- dnsmasq-manager \
- modem-manager \
- bluez-manager \
- firewall-manager \
- wifi \
- settings
+include $(GLIB_MAKEFILE)
-if WITH_WIMAX
-SUBDIRS += wimax
-endif
-
-SUBDIRS += . tests
-
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/src/dns-manager \
- -I${top_srcdir}/src/vpn-manager \
- -I${top_srcdir}/src/dhcp-manager \
- -I${top_srcdir}/src/ip6-manager \
- -I${top_srcdir}/src/supplicant-manager \
- -I${top_srcdir}/src/dnsmasq-manager \
- -I${top_srcdir}/src/modem-manager \
- -I$(top_srcdir)/src/bluez-manager \
- -I$(top_srcdir)/src/firewall-manager \
- -I$(top_srcdir)/src/settings \
- -I$(top_srcdir)/src/wifi \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/callouts
-
-###########################################
-# Test libraries
-###########################################
-
-noinst_LTLIBRARIES = \
- libtest-dhcp.la \
- libtest-policy-hosts.la \
- libtest-wifi-ap-utils.la
-
-###########################################
-# DHCP test library
-###########################################
-
-libtest_dhcp_la_SOURCES = \
- nm-ip4-config.c \
- nm-ip6-config.c \
- nm-hostname-provider.c \
- nm-dbus-manager.c
+@GNOME_CODE_COVERAGE_RULES@
-libtest_dhcp_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(AM_CPPFLAGS)
+SUBDIRS = \
+ . \
+ devices/adsl \
+ devices/wwan \
+ devices/bluetooth \
+ devices/wifi \
+ dhcp-manager \
+ ppp-manager \
+ settings/plugins
-libtest_dhcp_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(LIBNL_LIBS)
-
-###########################################
-# Hosts policy test library
-###########################################
-
-libtest_policy_hosts_la_SOURCES = \
- nm-policy-hosts.c \
- nm-policy-hosts.h
-
-libtest_policy_hosts_la_CPPFLAGS = \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS)
-
-libtest_policy_hosts_la_LIBADD = \
- ${top_builddir}/src/logging/libnm-logging.la \
- $(GLIB_LIBS)
-
-
-###########################################
-# Wifi ap utils
-###########################################
-
-libtest_wifi_ap_utils_la_SOURCES = \
- nm-wifi-ap-utils.c \
- nm-wifi-ap-utils.h
+if WITH_WIMAX
+SUBDIRS += devices/wimax
+endif
-libtest_wifi_ap_utils_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS)
+if ENABLE_TESTS
+SUBDIRS += \
+ config/tests \
+ dhcp-manager/tests \
+ dnsmasq-manager/tests \
+ platform \
+ rdisc \
+ settings/tests \
+ supplicant-manager/tests \
+ tests
+endif
-libtest_wifi_ap_utils_la_LIBADD = \
- ${top_builddir}/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I${top_srcdir}/libgsystem \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/callouts \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE
+# add each subdirectory that contains a libNM source file. $(sort) is being used
+# primarily for its side effect of removing duplicates.
+AM_CPPFLAGS += $(foreach d,$(sort $(dir $(libNetworkManager_la_SOURCES))),-I$(top_srcdir)/src/$d)
###########################################
# NetworkManager
@@ -118,227 +49,314 @@ libtest_wifi_ap_utils_la_LIBADD = \
sbin_PROGRAMS = NetworkManager
NetworkManager_SOURCES = \
- nm-types.h \
- nm-call-store.c \
- nm-call-store.h \
- nm-device.c \
- nm-device.h \
- nm-device-private.h \
- nm-device-ethernet.c \
- nm-device-ethernet.h \
- nm-device-adsl.c \
- nm-device-adsl.h \
- nm-device-wifi.c \
- nm-device-wifi.h \
- nm-device-wired.c \
- nm-device-wired.h \
- nm-device-olpc-mesh.c \
- nm-device-olpc-mesh.h \
- nm-device-bt.c \
- nm-device-bt.h \
- nm-device-modem.h \
- nm-device-modem.c \
- nm-device-infiniband.c \
- nm-device-infiniband.h \
- nm-device-bond.c \
- nm-device-bond.h \
- nm-device-bridge.c \
- nm-device-bridge.h \
- nm-device-vlan.c \
- nm-device-vlan.h \
- nm-wifi-ap.c \
- nm-wifi-ap.h \
- nm-wifi-ap-utils.c \
- nm-wifi-ap-utils.h \
- nm-dbus-manager.h \
- nm-dbus-manager.c \
- nm-udev-manager.c \
- nm-udev-manager.h \
- nm-device-factory.h \
- nm-hostname-provider.c \
- nm-hostname-provider.h \
- nm-ip4-config.c \
- nm-ip4-config.h \
- nm-ip6-config.c \
- nm-ip6-config.h \
- nm-active-connection.h \
- nm-active-connection.c \
- nm-config.h \
- nm-config.c \
- main.c \
- nm-policy.c \
- nm-policy.h \
- nm-policy-hosts.c \
- nm-policy-hosts.h \
- nm-policy-hostname.c \
- nm-policy-hostname.h \
- NetworkManagerUtils.c \
- NetworkManagerUtils.h \
- nm-system.c \
- nm-system.h \
- nm-manager.c \
- nm-manager.h \
- nm-manager-auth.c \
- nm-manager-auth.h \
- nm-netlink-monitor.c \
- nm-netlink-monitor.h \
- nm-netlink-utils.c \
- nm-netlink-utils.h \
- nm-netlink-compat.h \
- nm-netlink-compat.c \
- nm-activation-request.c \
- nm-activation-request.h \
- nm-properties-changed-signal.c \
- nm-properties-changed-signal.h \
- nm-dhcp4-config.c \
- nm-dhcp4-config.h \
- nm-dhcp6-config.c \
- nm-dhcp6-config.h \
- nm-rfkill.h \
- nm-session-monitor.h \
- nm-session-utils.c \
- nm-session-utils.h \
- nm-sleep-monitor.h \
- nm-connection-provider.h \
- nm-connection-provider.c \
- nm-dispatcher.c \
- nm-dispatcher.h \
- nm-connectivity.c \
- nm-connectivity.h
+ main.c
+
+NetworkManager_LDADD = libNetworkManager.la $(top_builddir)/libgsystem.la $(LIBNDP_LIBS)
+
+noinst_LTLIBRARIES = libNetworkManager.la
+
+nm_sources = \
+ config/nm-config.c \
+ config/nm-config.h \
+ config/nm-config-device.c \
+ config/nm-config-device.h \
+ \
+ devices/nm-device.c \
+ devices/nm-device.h \
+ devices/nm-device-bond.c \
+ devices/nm-device-bond.h \
+ devices/nm-device-bridge.c \
+ devices/nm-device-bridge.h \
+ devices/nm-device-ethernet.c \
+ devices/nm-device-ethernet.h \
+ devices/nm-device-factory.c \
+ devices/nm-device-factory.h \
+ devices/nm-device-generic.c \
+ devices/nm-device-generic.h \
+ devices/nm-device-gre.c \
+ devices/nm-device-gre.h \
+ devices/nm-device-infiniband.c \
+ devices/nm-device-infiniband.h \
+ devices/nm-device-macvlan.c \
+ devices/nm-device-macvlan.h \
+ devices/nm-device-private.h \
+ devices/nm-device-team.c \
+ devices/nm-device-team.h \
+ devices/nm-device-tun.c \
+ devices/nm-device-tun.h \
+ devices/nm-device-veth.c \
+ devices/nm-device-veth.h \
+ devices/nm-device-vlan.c \
+ devices/nm-device-vlan.h \
+ devices/nm-device-vxlan.c \
+ devices/nm-device-vxlan.h \
+ \
+ dhcp-manager/nm-dhcp-client.c \
+ dhcp-manager/nm-dhcp-client.h \
+ dhcp-manager/nm-dhcp-dhclient.c \
+ dhcp-manager/nm-dhcp-dhclient.h \
+ dhcp-manager/nm-dhcp-dhclient-utils.c \
+ dhcp-manager/nm-dhcp-dhclient-utils.h \
+ dhcp-manager/nm-dhcp-dhcpcd.c \
+ dhcp-manager/nm-dhcp-dhcpcd.h \
+ dhcp-manager/nm-dhcp-manager.c \
+ dhcp-manager/nm-dhcp-manager.h \
+ \
+ dns-manager/nm-dns-dnsmasq.c \
+ dns-manager/nm-dns-dnsmasq.h \
+ dns-manager/nm-dns-unbound.c \
+ dns-manager/nm-dns-unbound.h \
+ dns-manager/nm-dns-manager.c \
+ dns-manager/nm-dns-manager.h \
+ dns-manager/nm-dns-plugin.c \
+ dns-manager/nm-dns-plugin.h \
+ dns-manager/nm-dns-utils.c \
+ dns-manager/nm-dns-utils.h \
+ \
+ dnsmasq-manager/nm-dnsmasq-manager.c \
+ dnsmasq-manager/nm-dnsmasq-manager.h \
+ dnsmasq-manager/nm-dnsmasq-utils.c \
+ dnsmasq-manager/nm-dnsmasq-utils.h \
+ \
+ firewall-manager/nm-firewall-manager.c \
+ firewall-manager/nm-firewall-manager.h \
+ \
+ logging/nm-logging.c \
+ logging/nm-logging.h \
+ \
+ platform/nm-fake-platform.c \
+ platform/nm-fake-platform.h \
+ platform/nm-linux-platform.c \
+ platform/nm-linux-platform.h \
+ platform/nm-platform.c \
+ platform/nm-platform.h \
+ platform/wifi/wifi-utils-nl80211.c \
+ platform/wifi/wifi-utils-nl80211.h \
+ platform/wifi/wifi-utils-private.h \
+ platform/wifi/wifi-utils.c \
+ platform/wifi/wifi-utils.h \
+ \
+ rdisc/nm-fake-rdisc.c \
+ rdisc/nm-fake-rdisc.h \
+ rdisc/nm-lndp-rdisc.c \
+ rdisc/nm-lndp-rdisc.h \
+ rdisc/nm-rdisc.c \
+ rdisc/nm-rdisc.h \
+ \
+ posix-signals/nm-posix-signals.c \
+ posix-signals/nm-posix-signals.h \
+ \
+ ppp-manager/nm-ppp-manager.c \
+ ppp-manager/nm-ppp-manager.h \
+ ppp-manager/nm-ppp-status.h \
+ \
+ settings/nm-agent-manager.c \
+ settings/nm-agent-manager.h \
+ settings/nm-inotify-helper.c \
+ settings/nm-inotify-helper.h \
+ settings/nm-secret-agent.c \
+ settings/nm-secret-agent.h \
+ settings/nm-settings-connection.c \
+ settings/nm-settings-connection.h \
+ settings/nm-settings-error.c \
+ settings/nm-settings-error.h \
+ settings/nm-settings-utils.c \
+ settings/nm-settings-utils.h \
+ settings/nm-settings.c \
+ settings/nm-settings.h \
+ settings/nm-system-config-interface.c \
+ settings/nm-system-config-interface.h \
+ \
+ settings/plugins/keyfile/common.h \
+ settings/plugins/keyfile/errors.c \
+ settings/plugins/keyfile/nm-keyfile-connection.c \
+ settings/plugins/keyfile/nm-keyfile-connection.h \
+ settings/plugins/keyfile/plugin.c \
+ settings/plugins/keyfile/plugin.h \
+ settings/plugins/keyfile/reader.c \
+ settings/plugins/keyfile/reader.h \
+ settings/plugins/keyfile/utils.c \
+ settings/plugins/keyfile/utils.h \
+ settings/plugins/keyfile/writer.c \
+ settings/plugins/keyfile/writer.h \
+ \
+ supplicant-manager/nm-supplicant-config.c \
+ supplicant-manager/nm-supplicant-config.h \
+ supplicant-manager/nm-supplicant-interface.c \
+ supplicant-manager/nm-supplicant-interface.h \
+ supplicant-manager/nm-supplicant-manager.c \
+ supplicant-manager/nm-supplicant-manager.h \
+ supplicant-manager/nm-supplicant-settings-verify.c \
+ supplicant-manager/nm-supplicant-settings-verify.h \
+ supplicant-manager/nm-supplicant-types.h \
+ supplicant-manager/nm-call-store.c \
+ supplicant-manager/nm-call-store.h \
+ \
+ vpn-manager/nm-vpn-connection.c \
+ vpn-manager/nm-vpn-connection.h \
+ vpn-manager/nm-vpn-manager.c \
+ vpn-manager/nm-vpn-manager.h \
+ vpn-manager/nm-vpn-service.c \
+ vpn-manager/nm-vpn-service.h \
+ \
+ nm-activation-request.c \
+ nm-activation-request.h \
+ nm-active-connection.c \
+ nm-active-connection.h \
+ nm-connection-provider.c \
+ nm-connection-provider.h \
+ nm-connectivity.c \
+ nm-connectivity.h \
+ nm-dbus-manager.c \
+ nm-dbus-manager.h \
+ nm-dcb.c \
+ nm-dcb.h \
+ nm-dhcp4-config.c \
+ nm-dhcp4-config.h \
+ nm-dhcp6-config.c \
+ nm-dhcp6-config.h \
+ nm-dispatcher.c \
+ nm-dispatcher.h \
+ nm-enum-types.c \
+ nm-enum-types.h \
+ nm-ip4-config.c \
+ nm-ip4-config.h \
+ nm-ip6-config.c \
+ nm-ip6-config.h \
+ nm-manager-auth.c \
+ nm-manager-auth.h \
+ nm-auth-subject.c \
+ nm-auth-subject.h \
+ nm-manager.c \
+ nm-manager.h \
+ nm-policy.c \
+ nm-policy.h \
+ nm-properties-changed-signal.c \
+ nm-properties-changed-signal.h \
+ nm-rfkill-manager.c \
+ nm-rfkill-manager.h \
+ nm-session-monitor.h \
+ nm-session-utils.c \
+ nm-session-utils.h \
+ nm-sleep-monitor.h \
+ nm-types.h \
+ NetworkManagerUtils.c \
+ NetworkManagerUtils.h
if SESSION_TRACKING_SYSTEMD
-NetworkManager_SOURCES += nm-session-monitor-systemd.c
+nm_sources += nm-session-monitor-systemd.c
else
if SESSION_TRACKING_CK
-NetworkManager_SOURCES += nm-session-monitor-ck.c
+nm_sources += nm-session-monitor-ck.c
else
-NetworkManager_SOURCES += nm-session-monitor-null.c
+nm_sources += nm-session-monitor-null.c
endif
endif
if SUSPEND_RESUME_SYSTEMD
-NetworkManager_SOURCES += nm-sleep-monitor-systemd.c
+nm_sources += nm-sleep-monitor-systemd.c
else
# UPower suspend/resume used whenever systemd is not enabled
-NetworkManager_SOURCES += nm-sleep-monitor-upower.c
+nm_sources += nm-sleep-monitor-upower.c
endif
-nm-access-point-glue.h: $(top_srcdir)/introspection/nm-access-point.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_access_point --mode=glib-server --output=$@ $<
-
-nm-manager-glue.h: $(top_srcdir)/introspection/nm-manager.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_manager --mode=glib-server --output=$@ $<
-
-nm-device-interface-glue.h: $(top_srcdir)/introspection/nm-device.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_interface --mode=glib-server --output=$@ $<
-
-nm-device-ethernet-glue.h: $(top_srcdir)/introspection/nm-device-ethernet.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_ethernet --mode=glib-server --output=$@ $<
-
-nm-device-infiniband-glue.h: $(top_srcdir)/introspection/nm-device-infiniband.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_infiniband --mode=glib-server --output=$@ $<
-
-nm-device-adsl-glue.h: $(top_srcdir)/introspection/nm-device-adsl.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_adsl --mode=glib-server --output=$@ $<
-
-nm-device-wifi-glue.h: $(top_srcdir)/introspection/nm-device-wifi.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_wifi --mode=glib-server --output=$@ $<
-
-nm-device-bt-glue.h: $(top_srcdir)/introspection/nm-device-bt.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bt --mode=glib-server --output=$@ $<
-
-nm-device-olpc-mesh-glue.h: $(top_srcdir)/introspection/nm-device-olpc-mesh.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_olpc_mesh --mode=glib-server --output=$@ $<
-
-nm-device-bond-glue.h: $(top_srcdir)/introspection/nm-device-bond.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bond --mode=glib-server --output=$@ $<
-
-nm-device-bridge-glue.h: $(top_srcdir)/introspection/nm-device-bridge.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bridge --mode=glib-server --output=$@ $<
-
-nm-device-vlan-glue.h: $(top_srcdir)/introspection/nm-device-vlan.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_vlan --mode=glib-server --output=$@ $<
-
-nm-ip4-config-glue.h: $(top_srcdir)/introspection/nm-ip4-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip4_config --mode=glib-server --output=$@ $<
+if WITH_WEXT
+nm_sources += \
+ platform/wifi/wifi-utils-wext.c \
+ platform/wifi/wifi-utils-wext.h
+endif
-nm-ip6-config-glue.h: $(top_srcdir)/introspection/nm-ip6-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip6_config --mode=glib-server --output=$@ $<
-nm-active-connection-glue.h: $(top_srcdir)/introspection/nm-active-connection.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_active_connection --mode=glib-server --output=$@ $<
+GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_enum_types_sources = $(nm_sources)
-nm-dhcp4-config-glue.h: $(top_srcdir)/introspection/nm-dhcp4-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp4_config --mode=glib-server --output=$@ $<
+if WITH_WIMAX
+nm_enum_types_sources += devices/wimax/nm-device-wimax.h
+AM_CPPFLAGS += -I$(top_srcdir)/src/devices/wimax
+endif
-nm-dhcp6-config-glue.h: $(top_srcdir)/introspection/nm-dhcp6-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-server --output=$@ $<
+BUILT_SOURCES = $(GLIB_GENERATED)
-nm-device-modem-glue.h: $(top_srcdir)/introspection/nm-device-modem.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_modem --mode=glib-server --output=$@ $<
-BUILT_SOURCES = \
+glue_sources = \
nm-access-point-glue.h \
- nm-manager-glue.h \
- nm-device-interface-glue.h \
- nm-device-ethernet-glue.h \
- nm-device-infiniband-glue.h \
+ nm-active-connection-glue.h \
+ nm-agent-manager-glue.h \
nm-device-bond-glue.h \
nm-device-bridge-glue.h \
+ nm-device-ethernet-glue.h \
+ nm-device-generic-glue.h \
+ nm-device-glue.h \
+ nm-device-gre-glue.h \
+ nm-device-infiniband-glue.h \
+ nm-device-macvlan-glue.h \
+ nm-device-team-glue.h \
+ nm-device-tun-glue.h \
+ nm-device-veth-glue.h \
nm-device-vlan-glue.h \
- nm-device-adsl-glue.h \
- nm-device-wifi-glue.h \
- nm-device-olpc-mesh-glue.h \
- nm-device-bt-glue.h \
- nm-device-modem-glue.h \
+ nm-device-vxlan-glue.h \
+ nm-dhcp4-config-glue.h \
+ nm-dhcp6-config-glue.h \
nm-ip4-config-glue.h \
nm-ip6-config-glue.h \
- nm-active-connection-glue.h \
- nm-dhcp4-config-glue.h \
- nm-dhcp6-config-glue.h
+ nm-manager-glue.h \
+ nm-ppp-manager-glue.h \
+ nm-settings-connection-glue.h \
+ nm-settings-glue.h \
+ nm-vpn-connection-glue.h
-NetworkManager_CPPFLAGS = \
+BUILT_SOURCES += $(glue_sources)
+
+%-glue.h: $(top_srcdir)/introspection/%.xml
+ $(AM_V_GEN) dbus-binding-tool --prefix=$(subst -,_,$(subst -glue.h,,$@)) --mode=glib-server --output=$@ $<
+
+
+AM_CPPFLAGS += \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
$(GUDEV_CFLAGS) \
$(LIBNL_CFLAGS) \
+ $(LIBNDP_CFLAGS) \
+ $(LIBSOUP_CFLAGS) \
$(POLKIT_CFLAGS) \
$(SYSTEMD_LOGIN_CFLAGS) \
- $(LIBSOUP_CFLAGS) \
- $(AM_CPPFLAGS) \
+ \
-DBINDIR=\"$(bindir)\" \
- -DSBINDIR=\"$(sbindir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
-DDATADIR=\"$(datadir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DLIBEXECDIR=\"$(libexecdir)\" \
-DLOCALSTATEDIR=\"$(localstatedir)\" \
+ -DSBINDIR=\"$(sbindir)\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DRUNDIR=\"$(rundir)\" \
+ \
+ -DNMCONFDIR=\"$(nmconfdir)\" \
-DNMLOCALEDIR=\"$(datadir)/locale\" \
-DNMPLUGINDIR=\"$(pkglibdir)\" \
- -DNMCONFDIR=\"$(nmconfdir)\" \
-DNMRUNDIR=\"$(nmrundir)\" \
-DNMSTATEDIR=\"$(nmstatedir)\" \
- -DARP_DEBUG
+ \
+ -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
+ -DDHCPCD_PATH=\"$(DHCPCD_PATH)\" \
+ -DPPPD_PLUGIN_DIR=\"$(PPPD_PLUGIN_DIR)\" \
+ \
+ $(NULL)
if SESSION_TRACKING_CK
-NetworkManager_CPPFLAGS += -DCKDB_PATH=\"${CKDB_PATH}\"
+AM_CPPFLAGS += -DCKDB_PATH=\"${CKDB_PATH}\"
endif
-NetworkManager_LDADD = \
- ./generated/libnm-generated.la \
- ./logging/libnm-logging.la \
- ./posix-signals/libnm-posix-signals.la \
- ./dns-manager/libdns-manager.la \
- ./vpn-manager/libvpn-manager.la \
- ./dhcp-manager/libdhcp-manager.la \
- ./ip6-manager/libip6-manager.la \
- ./supplicant-manager/libsupplicant-manager.la \
- ./dnsmasq-manager/libdnsmasq-manager.la \
- ./ppp-manager/libppp-manager.la \
- ./modem-manager/libmodem-manager.la \
- ./bluez-manager/libbluez-manager.la \
- ./wifi/libwifi-utils.la \
- ./firewall-manager/libfirewall-manager.la \
- ./settings/libsettings.la \
+if WITH_TEAMDCTL
+AM_CPPFLAGS += ${LIBTEAMDCTL_CFLAGS}
+endif
+
+libNetworkManager_la_SOURCES = \
+ $(nm_sources) \
+ $(glue_sources)
+
+libNetworkManager_la_LIBADD = \
+ $(top_builddir)/libgsystem.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(DBUS_LIBS) \
$(GLIB_LIBS) \
@@ -346,9 +364,16 @@ NetworkManager_LDADD = \
$(LIBNL_LIBS) \
$(POLKIT_LIBS) \
$(SYSTEMD_LOGIN_LIBS) \
- $(LIBSOUP_LIBS) \
- $(LIBM) \
- $(LIBDL)
+ $(LIBDL) \
+ $(LIBM)
+
+if WITH_CONCHECK
+libNetworkManager_la_LIBADD += $(LIBSOUP_LIBS)
+endif
+
+if WITH_TEAMDCTL
+libNetworkManager_la_LIBADD += $(LIBTEAMDCTL_LIBS)
+endif
NetworkManager_LDFLAGS = -rdynamic
@@ -368,6 +393,7 @@ install-data-hook:
CLEANFILES = \
$(BUILT_SOURCES) \
- nm-enum-types.c \
- nm-enum-types.h
+ settings/*-glue.h \
+ devices/*-glue.h \
+ devices/*/*-glue.h
diff --git a/src/Makefile.in b/src/Makefile.in
index 474ceb380..6aa8aa0a1 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -80,20 +80,40 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@WITH_WIMAX_TRUE@am__append_1 = wimax
+@WITH_WIMAX_TRUE@am__append_1 = devices/wimax
+@ENABLE_TESTS_TRUE@am__append_2 = \
+@ENABLE_TESTS_TRUE@ config/tests \
+@ENABLE_TESTS_TRUE@ dhcp-manager/tests \
+@ENABLE_TESTS_TRUE@ dnsmasq-manager/tests \
+@ENABLE_TESTS_TRUE@ platform \
+@ENABLE_TESTS_TRUE@ rdisc \
+@ENABLE_TESTS_TRUE@ settings/tests \
+@ENABLE_TESTS_TRUE@ supplicant-manager/tests \
+@ENABLE_TESTS_TRUE@ tests
+
sbin_PROGRAMS = NetworkManager$(EXEEXT)
-@SESSION_TRACKING_SYSTEMD_TRUE@am__append_2 = nm-session-monitor-systemd.c
-@SESSION_TRACKING_CK_TRUE@@SESSION_TRACKING_SYSTEMD_FALSE@am__append_3 = nm-session-monitor-ck.c
-@SESSION_TRACKING_CK_FALSE@@SESSION_TRACKING_SYSTEMD_FALSE@am__append_4 = nm-session-monitor-null.c
-@SUSPEND_RESUME_SYSTEMD_TRUE@am__append_5 = nm-sleep-monitor-systemd.c
+@SESSION_TRACKING_SYSTEMD_TRUE@am__append_3 = nm-session-monitor-systemd.c
+@SESSION_TRACKING_CK_TRUE@@SESSION_TRACKING_SYSTEMD_FALSE@am__append_4 = nm-session-monitor-ck.c
+@SESSION_TRACKING_CK_FALSE@@SESSION_TRACKING_SYSTEMD_FALSE@am__append_5 = nm-session-monitor-null.c
+@SUSPEND_RESUME_SYSTEMD_TRUE@am__append_6 = nm-sleep-monitor-systemd.c
# UPower suspend/resume used whenever systemd is not enabled
-@SUSPEND_RESUME_SYSTEMD_FALSE@am__append_6 = nm-sleep-monitor-upower.c
-@SESSION_TRACKING_CK_TRUE@am__append_7 = -DCKDB_PATH=\"${CKDB_PATH}\"
+@SUSPEND_RESUME_SYSTEMD_FALSE@am__append_7 = nm-sleep-monitor-upower.c
+@WITH_WEXT_TRUE@am__append_8 = \
+@WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.c \
+@WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.h
+
+@WITH_WIMAX_TRUE@am__append_9 = devices/wimax/nm-device-wimax.h
+@WITH_WIMAX_TRUE@am__append_10 = -I$(top_srcdir)/src/devices/wimax
+@SESSION_TRACKING_CK_TRUE@am__append_11 = -DCKDB_PATH=\"${CKDB_PATH}\"
+@WITH_TEAMDCTL_TRUE@am__append_12 = ${LIBTEAMDCTL_CFLAGS}
+@WITH_CONCHECK_TRUE@am__append_13 = $(LIBSOUP_LIBS)
+@WITH_TEAMDCTL_TRUE@am__append_14 = $(LIBTEAMDCTL_LIBS)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -113,134 +133,183 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libtest_dhcp_la_DEPENDENCIES = \
- $(top_builddir)/src/generated/libnm-generated.la \
+@WITH_CONCHECK_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+@WITH_TEAMDCTL_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+libNetworkManager_la_DEPENDENCIES = $(top_builddir)/libgsystem.la \
$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libtest_dhcp_la_OBJECTS = libtest_dhcp_la-nm-ip4-config.lo \
- libtest_dhcp_la-nm-ip6-config.lo \
- libtest_dhcp_la-nm-hostname-provider.lo \
- libtest_dhcp_la-nm-dbus-manager.lo
-libtest_dhcp_la_OBJECTS = $(am_libtest_dhcp_la_OBJECTS)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+ $(am__DEPENDENCIES_3)
+am__libNetworkManager_la_SOURCES_DIST = config/nm-config.c \
+ config/nm-config.h config/nm-config-device.c \
+ config/nm-config-device.h devices/nm-device.c \
+ devices/nm-device.h devices/nm-device-bond.c \
+ devices/nm-device-bond.h devices/nm-device-bridge.c \
+ devices/nm-device-bridge.h devices/nm-device-ethernet.c \
+ devices/nm-device-ethernet.h devices/nm-device-factory.c \
+ devices/nm-device-factory.h devices/nm-device-generic.c \
+ devices/nm-device-generic.h devices/nm-device-gre.c \
+ devices/nm-device-gre.h devices/nm-device-infiniband.c \
+ devices/nm-device-infiniband.h devices/nm-device-macvlan.c \
+ devices/nm-device-macvlan.h devices/nm-device-private.h \
+ devices/nm-device-team.c devices/nm-device-team.h \
+ devices/nm-device-tun.c devices/nm-device-tun.h \
+ devices/nm-device-veth.c devices/nm-device-veth.h \
+ devices/nm-device-vlan.c devices/nm-device-vlan.h \
+ devices/nm-device-vxlan.c devices/nm-device-vxlan.h \
+ dhcp-manager/nm-dhcp-client.c dhcp-manager/nm-dhcp-client.h \
+ dhcp-manager/nm-dhcp-dhclient.c \
+ dhcp-manager/nm-dhcp-dhclient.h \
+ dhcp-manager/nm-dhcp-dhclient-utils.c \
+ dhcp-manager/nm-dhcp-dhclient-utils.h \
+ dhcp-manager/nm-dhcp-dhcpcd.c dhcp-manager/nm-dhcp-dhcpcd.h \
+ dhcp-manager/nm-dhcp-manager.c dhcp-manager/nm-dhcp-manager.h \
+ dns-manager/nm-dns-dnsmasq.c dns-manager/nm-dns-dnsmasq.h \
+ dns-manager/nm-dns-unbound.c dns-manager/nm-dns-unbound.h \
+ dns-manager/nm-dns-manager.c dns-manager/nm-dns-manager.h \
+ dns-manager/nm-dns-plugin.c dns-manager/nm-dns-plugin.h \
+ dns-manager/nm-dns-utils.c dns-manager/nm-dns-utils.h \
+ dnsmasq-manager/nm-dnsmasq-manager.c \
+ dnsmasq-manager/nm-dnsmasq-manager.h \
+ dnsmasq-manager/nm-dnsmasq-utils.c \
+ dnsmasq-manager/nm-dnsmasq-utils.h \
+ firewall-manager/nm-firewall-manager.c \
+ firewall-manager/nm-firewall-manager.h logging/nm-logging.c \
+ logging/nm-logging.h platform/nm-fake-platform.c \
+ platform/nm-fake-platform.h platform/nm-linux-platform.c \
+ platform/nm-linux-platform.h platform/nm-platform.c \
+ platform/nm-platform.h platform/wifi/wifi-utils-nl80211.c \
+ platform/wifi/wifi-utils-nl80211.h \
+ platform/wifi/wifi-utils-private.h platform/wifi/wifi-utils.c \
+ platform/wifi/wifi-utils.h rdisc/nm-fake-rdisc.c \
+ rdisc/nm-fake-rdisc.h rdisc/nm-lndp-rdisc.c \
+ rdisc/nm-lndp-rdisc.h rdisc/nm-rdisc.c rdisc/nm-rdisc.h \
+ posix-signals/nm-posix-signals.c \
+ posix-signals/nm-posix-signals.h ppp-manager/nm-ppp-manager.c \
+ ppp-manager/nm-ppp-manager.h ppp-manager/nm-ppp-status.h \
+ settings/nm-agent-manager.c settings/nm-agent-manager.h \
+ settings/nm-inotify-helper.c settings/nm-inotify-helper.h \
+ settings/nm-secret-agent.c settings/nm-secret-agent.h \
+ settings/nm-settings-connection.c \
+ settings/nm-settings-connection.h settings/nm-settings-error.c \
+ settings/nm-settings-error.h settings/nm-settings-utils.c \
+ settings/nm-settings-utils.h settings/nm-settings.c \
+ settings/nm-settings.h settings/nm-system-config-interface.c \
+ settings/nm-system-config-interface.h \
+ settings/plugins/keyfile/common.h \
+ settings/plugins/keyfile/errors.c \
+ settings/plugins/keyfile/nm-keyfile-connection.c \
+ settings/plugins/keyfile/nm-keyfile-connection.h \
+ settings/plugins/keyfile/plugin.c \
+ settings/plugins/keyfile/plugin.h \
+ settings/plugins/keyfile/reader.c \
+ settings/plugins/keyfile/reader.h \
+ settings/plugins/keyfile/utils.c \
+ settings/plugins/keyfile/utils.h \
+ settings/plugins/keyfile/writer.c \
+ settings/plugins/keyfile/writer.h \
+ supplicant-manager/nm-supplicant-config.c \
+ supplicant-manager/nm-supplicant-config.h \
+ supplicant-manager/nm-supplicant-interface.c \
+ supplicant-manager/nm-supplicant-interface.h \
+ supplicant-manager/nm-supplicant-manager.c \
+ supplicant-manager/nm-supplicant-manager.h \
+ supplicant-manager/nm-supplicant-settings-verify.c \
+ supplicant-manager/nm-supplicant-settings-verify.h \
+ supplicant-manager/nm-supplicant-types.h \
+ supplicant-manager/nm-call-store.c \
+ supplicant-manager/nm-call-store.h \
+ vpn-manager/nm-vpn-connection.c \
+ vpn-manager/nm-vpn-connection.h vpn-manager/nm-vpn-manager.c \
+ vpn-manager/nm-vpn-manager.h vpn-manager/nm-vpn-service.c \
+ vpn-manager/nm-vpn-service.h nm-activation-request.c \
+ nm-activation-request.h nm-active-connection.c \
+ nm-active-connection.h nm-connection-provider.c \
+ nm-connection-provider.h nm-connectivity.c nm-connectivity.h \
+ nm-dbus-manager.c nm-dbus-manager.h nm-dcb.c nm-dcb.h \
+ nm-dhcp4-config.c nm-dhcp4-config.h nm-dhcp6-config.c \
+ nm-dhcp6-config.h nm-dispatcher.c nm-dispatcher.h \
+ nm-enum-types.c nm-enum-types.h nm-ip4-config.c \
+ nm-ip4-config.h nm-ip6-config.c nm-ip6-config.h \
+ nm-manager-auth.c nm-manager-auth.h nm-auth-subject.c \
+ nm-auth-subject.h nm-manager.c nm-manager.h nm-policy.c \
+ nm-policy.h nm-properties-changed-signal.c \
+ nm-properties-changed-signal.h nm-rfkill-manager.c \
+ nm-rfkill-manager.h nm-session-monitor.h nm-session-utils.c \
+ nm-session-utils.h nm-sleep-monitor.h nm-types.h \
+ NetworkManagerUtils.c NetworkManagerUtils.h \
+ nm-session-monitor-systemd.c nm-session-monitor-ck.c \
+ nm-session-monitor-null.c nm-sleep-monitor-systemd.c \
+ nm-sleep-monitor-upower.c platform/wifi/wifi-utils-wext.c \
+ platform/wifi/wifi-utils-wext.h nm-access-point-glue.h \
+ nm-active-connection-glue.h nm-agent-manager-glue.h \
+ nm-device-bond-glue.h nm-device-bridge-glue.h \
+ nm-device-ethernet-glue.h nm-device-generic-glue.h \
+ nm-device-glue.h nm-device-gre-glue.h \
+ nm-device-infiniband-glue.h nm-device-macvlan-glue.h \
+ nm-device-team-glue.h nm-device-tun-glue.h \
+ nm-device-veth-glue.h nm-device-vlan-glue.h \
+ nm-device-vxlan-glue.h nm-dhcp4-config-glue.h \
+ nm-dhcp6-config-glue.h nm-ip4-config-glue.h \
+ nm-ip6-config-glue.h nm-manager-glue.h nm-ppp-manager-glue.h \
+ nm-settings-connection-glue.h nm-settings-glue.h \
+ nm-vpn-connection-glue.h
+@SESSION_TRACKING_SYSTEMD_TRUE@am__objects_1 = \
+@SESSION_TRACKING_SYSTEMD_TRUE@ nm-session-monitor-systemd.lo
+@SESSION_TRACKING_CK_TRUE@@SESSION_TRACKING_SYSTEMD_FALSE@am__objects_2 = nm-session-monitor-ck.lo
+@SESSION_TRACKING_CK_FALSE@@SESSION_TRACKING_SYSTEMD_FALSE@am__objects_3 = nm-session-monitor-null.lo
+@SUSPEND_RESUME_SYSTEMD_TRUE@am__objects_4 = \
+@SUSPEND_RESUME_SYSTEMD_TRUE@ nm-sleep-monitor-systemd.lo
+@SUSPEND_RESUME_SYSTEMD_FALSE@am__objects_5 = \
+@SUSPEND_RESUME_SYSTEMD_FALSE@ nm-sleep-monitor-upower.lo
+@WITH_WEXT_TRUE@am__objects_6 = wifi-utils-wext.lo
+am__objects_7 = nm-config.lo nm-config-device.lo nm-device.lo \
+ nm-device-bond.lo nm-device-bridge.lo nm-device-ethernet.lo \
+ nm-device-factory.lo nm-device-generic.lo nm-device-gre.lo \
+ nm-device-infiniband.lo nm-device-macvlan.lo nm-device-team.lo \
+ nm-device-tun.lo nm-device-veth.lo nm-device-vlan.lo \
+ nm-device-vxlan.lo nm-dhcp-client.lo nm-dhcp-dhclient.lo \
+ nm-dhcp-dhclient-utils.lo nm-dhcp-dhcpcd.lo nm-dhcp-manager.lo \
+ nm-dns-dnsmasq.lo nm-dns-unbound.lo nm-dns-manager.lo \
+ nm-dns-plugin.lo nm-dns-utils.lo nm-dnsmasq-manager.lo \
+ nm-dnsmasq-utils.lo nm-firewall-manager.lo nm-logging.lo \
+ nm-fake-platform.lo nm-linux-platform.lo nm-platform.lo \
+ wifi-utils-nl80211.lo wifi-utils.lo nm-fake-rdisc.lo \
+ nm-lndp-rdisc.lo nm-rdisc.lo nm-posix-signals.lo \
+ nm-ppp-manager.lo nm-agent-manager.lo nm-inotify-helper.lo \
+ nm-secret-agent.lo nm-settings-connection.lo \
+ nm-settings-error.lo nm-settings-utils.lo nm-settings.lo \
+ nm-system-config-interface.lo errors.lo \
+ nm-keyfile-connection.lo plugin.lo reader.lo utils.lo \
+ writer.lo nm-supplicant-config.lo nm-supplicant-interface.lo \
+ nm-supplicant-manager.lo nm-supplicant-settings-verify.lo \
+ nm-call-store.lo nm-vpn-connection.lo nm-vpn-manager.lo \
+ nm-vpn-service.lo nm-activation-request.lo \
+ nm-active-connection.lo nm-connection-provider.lo \
+ nm-connectivity.lo nm-dbus-manager.lo nm-dcb.lo \
+ nm-dhcp4-config.lo nm-dhcp6-config.lo nm-dispatcher.lo \
+ nm-enum-types.lo nm-ip4-config.lo nm-ip6-config.lo \
+ nm-manager-auth.lo nm-auth-subject.lo nm-manager.lo \
+ nm-policy.lo nm-properties-changed-signal.lo \
+ nm-rfkill-manager.lo nm-session-utils.lo \
+ NetworkManagerUtils.lo $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6)
+am__objects_8 =
+am_libNetworkManager_la_OBJECTS = $(am__objects_7) $(am__objects_8)
+libNetworkManager_la_OBJECTS = $(am_libNetworkManager_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-libtest_policy_hosts_la_DEPENDENCIES = \
- ${top_builddir}/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1)
-am_libtest_policy_hosts_la_OBJECTS = \
- libtest_policy_hosts_la-nm-policy-hosts.lo
-libtest_policy_hosts_la_OBJECTS = \
- $(am_libtest_policy_hosts_la_OBJECTS)
-libtest_wifi_ap_utils_la_DEPENDENCIES = \
- ${top_builddir}/libnm-util/libnm-util.la $(am__DEPENDENCIES_1)
-am_libtest_wifi_ap_utils_la_OBJECTS = \
- libtest_wifi_ap_utils_la-nm-wifi-ap-utils.lo
-libtest_wifi_ap_utils_la_OBJECTS = \
- $(am_libtest_wifi_ap_utils_la_OBJECTS)
am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(dbusservicedir)"
PROGRAMS = $(sbin_PROGRAMS)
-am__NetworkManager_SOURCES_DIST = nm-types.h nm-call-store.c \
- nm-call-store.h nm-device.c nm-device.h nm-device-private.h \
- nm-device-ethernet.c nm-device-ethernet.h nm-device-adsl.c \
- nm-device-adsl.h nm-device-wifi.c nm-device-wifi.h \
- nm-device-wired.c nm-device-wired.h nm-device-olpc-mesh.c \
- nm-device-olpc-mesh.h nm-device-bt.c nm-device-bt.h \
- nm-device-modem.h nm-device-modem.c nm-device-infiniband.c \
- nm-device-infiniband.h nm-device-bond.c nm-device-bond.h \
- nm-device-bridge.c nm-device-bridge.h nm-device-vlan.c \
- nm-device-vlan.h nm-wifi-ap.c nm-wifi-ap.h nm-wifi-ap-utils.c \
- nm-wifi-ap-utils.h nm-dbus-manager.h nm-dbus-manager.c \
- nm-udev-manager.c nm-udev-manager.h nm-device-factory.h \
- nm-hostname-provider.c nm-hostname-provider.h nm-ip4-config.c \
- nm-ip4-config.h nm-ip6-config.c nm-ip6-config.h \
- nm-active-connection.h nm-active-connection.c nm-config.h \
- nm-config.c main.c nm-policy.c nm-policy.h nm-policy-hosts.c \
- nm-policy-hosts.h nm-policy-hostname.c nm-policy-hostname.h \
- NetworkManagerUtils.c NetworkManagerUtils.h nm-system.c \
- nm-system.h nm-manager.c nm-manager.h nm-manager-auth.c \
- nm-manager-auth.h nm-netlink-monitor.c nm-netlink-monitor.h \
- nm-netlink-utils.c nm-netlink-utils.h nm-netlink-compat.h \
- nm-netlink-compat.c nm-activation-request.c \
- nm-activation-request.h nm-properties-changed-signal.c \
- nm-properties-changed-signal.h nm-dhcp4-config.c \
- nm-dhcp4-config.h nm-dhcp6-config.c nm-dhcp6-config.h \
- nm-rfkill.h nm-session-monitor.h nm-session-utils.c \
- nm-session-utils.h nm-sleep-monitor.h nm-connection-provider.h \
- nm-connection-provider.c nm-dispatcher.c nm-dispatcher.h \
- nm-connectivity.c nm-connectivity.h \
- nm-session-monitor-systemd.c nm-session-monitor-ck.c \
- nm-session-monitor-null.c nm-sleep-monitor-systemd.c \
- nm-sleep-monitor-upower.c
-@SESSION_TRACKING_SYSTEMD_TRUE@am__objects_1 = NetworkManager-nm-session-monitor-systemd.$(OBJEXT)
-@SESSION_TRACKING_CK_TRUE@@SESSION_TRACKING_SYSTEMD_FALSE@am__objects_2 = NetworkManager-nm-session-monitor-ck.$(OBJEXT)
-@SESSION_TRACKING_CK_FALSE@@SESSION_TRACKING_SYSTEMD_FALSE@am__objects_3 = NetworkManager-nm-session-monitor-null.$(OBJEXT)
-@SUSPEND_RESUME_SYSTEMD_TRUE@am__objects_4 = NetworkManager-nm-sleep-monitor-systemd.$(OBJEXT)
-@SUSPEND_RESUME_SYSTEMD_FALSE@am__objects_5 = NetworkManager-nm-sleep-monitor-upower.$(OBJEXT)
-am_NetworkManager_OBJECTS = NetworkManager-nm-call-store.$(OBJEXT) \
- NetworkManager-nm-device.$(OBJEXT) \
- NetworkManager-nm-device-ethernet.$(OBJEXT) \
- NetworkManager-nm-device-adsl.$(OBJEXT) \
- NetworkManager-nm-device-wifi.$(OBJEXT) \
- NetworkManager-nm-device-wired.$(OBJEXT) \
- NetworkManager-nm-device-olpc-mesh.$(OBJEXT) \
- NetworkManager-nm-device-bt.$(OBJEXT) \
- NetworkManager-nm-device-modem.$(OBJEXT) \
- NetworkManager-nm-device-infiniband.$(OBJEXT) \
- NetworkManager-nm-device-bond.$(OBJEXT) \
- NetworkManager-nm-device-bridge.$(OBJEXT) \
- NetworkManager-nm-device-vlan.$(OBJEXT) \
- NetworkManager-nm-wifi-ap.$(OBJEXT) \
- NetworkManager-nm-wifi-ap-utils.$(OBJEXT) \
- NetworkManager-nm-dbus-manager.$(OBJEXT) \
- NetworkManager-nm-udev-manager.$(OBJEXT) \
- NetworkManager-nm-hostname-provider.$(OBJEXT) \
- NetworkManager-nm-ip4-config.$(OBJEXT) \
- NetworkManager-nm-ip6-config.$(OBJEXT) \
- NetworkManager-nm-active-connection.$(OBJEXT) \
- NetworkManager-nm-config.$(OBJEXT) \
- NetworkManager-main.$(OBJEXT) \
- NetworkManager-nm-policy.$(OBJEXT) \
- NetworkManager-nm-policy-hosts.$(OBJEXT) \
- NetworkManager-nm-policy-hostname.$(OBJEXT) \
- NetworkManager-NetworkManagerUtils.$(OBJEXT) \
- NetworkManager-nm-system.$(OBJEXT) \
- NetworkManager-nm-manager.$(OBJEXT) \
- NetworkManager-nm-manager-auth.$(OBJEXT) \
- NetworkManager-nm-netlink-monitor.$(OBJEXT) \
- NetworkManager-nm-netlink-utils.$(OBJEXT) \
- NetworkManager-nm-netlink-compat.$(OBJEXT) \
- NetworkManager-nm-activation-request.$(OBJEXT) \
- NetworkManager-nm-properties-changed-signal.$(OBJEXT) \
- NetworkManager-nm-dhcp4-config.$(OBJEXT) \
- NetworkManager-nm-dhcp6-config.$(OBJEXT) \
- NetworkManager-nm-session-utils.$(OBJEXT) \
- NetworkManager-nm-connection-provider.$(OBJEXT) \
- NetworkManager-nm-dispatcher.$(OBJEXT) \
- NetworkManager-nm-connectivity.$(OBJEXT) $(am__objects_1) \
- $(am__objects_2) $(am__objects_3) $(am__objects_4) \
- $(am__objects_5)
+am_NetworkManager_OBJECTS = main.$(OBJEXT)
NetworkManager_OBJECTS = $(am_NetworkManager_OBJECTS)
-NetworkManager_DEPENDENCIES = ./generated/libnm-generated.la \
- ./logging/libnm-logging.la \
- ./posix-signals/libnm-posix-signals.la \
- ./dns-manager/libdns-manager.la \
- ./vpn-manager/libvpn-manager.la \
- ./dhcp-manager/libdhcp-manager.la \
- ./ip6-manager/libip6-manager.la \
- ./supplicant-manager/libsupplicant-manager.la \
- ./dnsmasq-manager/libdnsmasq-manager.la \
- ./ppp-manager/libppp-manager.la \
- ./modem-manager/libmodem-manager.la \
- ./bluez-manager/libbluez-manager.la ./wifi/libwifi-utils.la \
- ./firewall-manager/libfirewall-manager.la \
- ./settings/libsettings.la \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+NetworkManager_DEPENDENCIES = libNetworkManager.la \
+ $(top_builddir)/libgsystem.la $(am__DEPENDENCIES_1)
NetworkManager_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(NetworkManager_LDFLAGS) $(LDFLAGS) -o \
@@ -279,13 +348,9 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libtest_dhcp_la_SOURCES) \
- $(libtest_policy_hosts_la_SOURCES) \
- $(libtest_wifi_ap_utils_la_SOURCES) $(NetworkManager_SOURCES)
-DIST_SOURCES = $(libtest_dhcp_la_SOURCES) \
- $(libtest_policy_hosts_la_SOURCES) \
- $(libtest_wifi_ap_utils_la_SOURCES) \
- $(am__NetworkManager_SOURCES_DIST)
+SOURCES = $(libNetworkManager_la_SOURCES) $(NetworkManager_SOURCES)
+DIST_SOURCES = $(am__libNetworkManager_la_SOURCES_DIST) \
+ $(NetworkManager_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -354,10 +419,11 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = generated logging posix-signals dns-manager vpn-manager \
- dhcp-manager ip6-manager supplicant-manager ppp-manager \
- dnsmasq-manager modem-manager bluez-manager firewall-manager \
- wifi settings wimax . tests
+DIST_SUBDIRS = . devices/adsl devices/wwan devices/bluetooth \
+ devices/wifi dhcp-manager ppp-manager settings/plugins \
+ devices/wimax config/tests dhcp-manager/tests \
+ dnsmasq-manager/tests platform rdisc settings/tests \
+ supplicant-manager/tests tests
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -409,12 +475,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -439,7 +508,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -484,12 +552,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -506,6 +578,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -533,11 +607,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -552,6 +631,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -614,6 +694,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -624,187 +705,180 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-SUBDIRS = generated logging posix-signals dns-manager vpn-manager \
- dhcp-manager ip6-manager supplicant-manager ppp-manager \
- dnsmasq-manager modem-manager bluez-manager firewall-manager \
- wifi settings $(am__append_1) . tests
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/src/dns-manager \
- -I${top_srcdir}/src/vpn-manager \
- -I${top_srcdir}/src/dhcp-manager \
- -I${top_srcdir}/src/ip6-manager \
- -I${top_srcdir}/src/supplicant-manager \
- -I${top_srcdir}/src/dnsmasq-manager \
- -I${top_srcdir}/src/modem-manager \
- -I$(top_srcdir)/src/bluez-manager \
- -I$(top_srcdir)/src/firewall-manager \
- -I$(top_srcdir)/src/settings \
- -I$(top_srcdir)/src/wifi \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/callouts
-
-
-###########################################
-# Test libraries
-###########################################
-noinst_LTLIBRARIES = \
- libtest-dhcp.la \
- libtest-policy-hosts.la \
- libtest-wifi-ap-utils.la
-
-
-###########################################
-# DHCP test library
-###########################################
-libtest_dhcp_la_SOURCES = \
- nm-ip4-config.c \
- nm-ip6-config.c \
- nm-hostname-provider.c \
- nm-dbus-manager.c
-
-libtest_dhcp_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(AM_CPPFLAGS)
-
-libtest_dhcp_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(LIBNL_LIBS)
-
-
-###########################################
-# Hosts policy test library
-###########################################
-libtest_policy_hosts_la_SOURCES = \
- nm-policy-hosts.c \
- nm-policy-hosts.h
-
-libtest_policy_hosts_la_CPPFLAGS = \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS)
-
-libtest_policy_hosts_la_LIBADD = \
- ${top_builddir}/src/logging/libnm-logging.la \
- $(GLIB_LIBS)
-
-
-###########################################
-# Wifi ap utils
-###########################################
-libtest_wifi_ap_utils_la_SOURCES = \
- nm-wifi-ap-utils.c \
- nm-wifi-ap-utils.h
-
-libtest_wifi_ap_utils_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS)
-
-libtest_wifi_ap_utils_la_LIBADD = \
- ${top_builddir}/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
-
-NetworkManager_SOURCES = nm-types.h nm-call-store.c nm-call-store.h \
- nm-device.c nm-device.h nm-device-private.h \
- nm-device-ethernet.c nm-device-ethernet.h nm-device-adsl.c \
- nm-device-adsl.h nm-device-wifi.c nm-device-wifi.h \
- nm-device-wired.c nm-device-wired.h nm-device-olpc-mesh.c \
- nm-device-olpc-mesh.h nm-device-bt.c nm-device-bt.h \
- nm-device-modem.h nm-device-modem.c nm-device-infiniband.c \
- nm-device-infiniband.h nm-device-bond.c nm-device-bond.h \
- nm-device-bridge.c nm-device-bridge.h nm-device-vlan.c \
- nm-device-vlan.h nm-wifi-ap.c nm-wifi-ap.h nm-wifi-ap-utils.c \
- nm-wifi-ap-utils.h nm-dbus-manager.h nm-dbus-manager.c \
- nm-udev-manager.c nm-udev-manager.h nm-device-factory.h \
- nm-hostname-provider.c nm-hostname-provider.h nm-ip4-config.c \
+with_valgrind = @with_valgrind@
+SUBDIRS = . devices/adsl devices/wwan devices/bluetooth devices/wifi \
+ dhcp-manager ppp-manager settings/plugins $(am__append_1) \
+ $(am__append_2)
+
+# add each subdirectory that contains a libNM source file. $(sort) is being used
+# primarily for its side effect of removing duplicates.
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include \
+ -I${top_srcdir}/libgsystem -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util -I$(top_srcdir)/callouts \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(foreach \
+ d,$(sort $(dir \
+ $(libNetworkManager_la_SOURCES))),-I$(top_srcdir)/src/$d) \
+ $(am__append_10) $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(GUDEV_CFLAGS) \
+ $(LIBNL_CFLAGS) $(LIBNDP_CFLAGS) $(LIBSOUP_CFLAGS) \
+ $(POLKIT_CFLAGS) $(SYSTEMD_LOGIN_CFLAGS) \
+ -DBINDIR=\"$(bindir)\" -DDATADIR=\"$(datadir)\" \
+ -DLIBEXECDIR=\"$(libexecdir)\" \
+ -DLOCALSTATEDIR=\"$(localstatedir)\" -DSBINDIR=\"$(sbindir)\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" -DRUNDIR=\"$(rundir)\" \
+ -DNMCONFDIR=\"$(nmconfdir)\" \
+ -DNMLOCALEDIR=\"$(datadir)/locale\" \
+ -DNMPLUGINDIR=\"$(pkglibdir)\" -DNMRUNDIR=\"$(nmrundir)\" \
+ -DNMSTATEDIR=\"$(nmstatedir)\" \
+ -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
+ -DDHCPCD_PATH=\"$(DHCPCD_PATH)\" \
+ -DPPPD_PLUGIN_DIR=\"$(PPPD_PLUGIN_DIR)\" $(NULL) \
+ $(am__append_11) $(am__append_12)
+NetworkManager_SOURCES = \
+ main.c
+
+NetworkManager_LDADD = libNetworkManager.la $(top_builddir)/libgsystem.la $(LIBNDP_LIBS)
+noinst_LTLIBRARIES = libNetworkManager.la
+nm_sources = config/nm-config.c config/nm-config.h \
+ config/nm-config-device.c config/nm-config-device.h \
+ devices/nm-device.c devices/nm-device.h \
+ devices/nm-device-bond.c devices/nm-device-bond.h \
+ devices/nm-device-bridge.c devices/nm-device-bridge.h \
+ devices/nm-device-ethernet.c devices/nm-device-ethernet.h \
+ devices/nm-device-factory.c devices/nm-device-factory.h \
+ devices/nm-device-generic.c devices/nm-device-generic.h \
+ devices/nm-device-gre.c devices/nm-device-gre.h \
+ devices/nm-device-infiniband.c devices/nm-device-infiniband.h \
+ devices/nm-device-macvlan.c devices/nm-device-macvlan.h \
+ devices/nm-device-private.h devices/nm-device-team.c \
+ devices/nm-device-team.h devices/nm-device-tun.c \
+ devices/nm-device-tun.h devices/nm-device-veth.c \
+ devices/nm-device-veth.h devices/nm-device-vlan.c \
+ devices/nm-device-vlan.h devices/nm-device-vxlan.c \
+ devices/nm-device-vxlan.h dhcp-manager/nm-dhcp-client.c \
+ dhcp-manager/nm-dhcp-client.h dhcp-manager/nm-dhcp-dhclient.c \
+ dhcp-manager/nm-dhcp-dhclient.h \
+ dhcp-manager/nm-dhcp-dhclient-utils.c \
+ dhcp-manager/nm-dhcp-dhclient-utils.h \
+ dhcp-manager/nm-dhcp-dhcpcd.c dhcp-manager/nm-dhcp-dhcpcd.h \
+ dhcp-manager/nm-dhcp-manager.c dhcp-manager/nm-dhcp-manager.h \
+ dns-manager/nm-dns-dnsmasq.c dns-manager/nm-dns-dnsmasq.h \
+ dns-manager/nm-dns-unbound.c dns-manager/nm-dns-unbound.h \
+ dns-manager/nm-dns-manager.c dns-manager/nm-dns-manager.h \
+ dns-manager/nm-dns-plugin.c dns-manager/nm-dns-plugin.h \
+ dns-manager/nm-dns-utils.c dns-manager/nm-dns-utils.h \
+ dnsmasq-manager/nm-dnsmasq-manager.c \
+ dnsmasq-manager/nm-dnsmasq-manager.h \
+ dnsmasq-manager/nm-dnsmasq-utils.c \
+ dnsmasq-manager/nm-dnsmasq-utils.h \
+ firewall-manager/nm-firewall-manager.c \
+ firewall-manager/nm-firewall-manager.h logging/nm-logging.c \
+ logging/nm-logging.h platform/nm-fake-platform.c \
+ platform/nm-fake-platform.h platform/nm-linux-platform.c \
+ platform/nm-linux-platform.h platform/nm-platform.c \
+ platform/nm-platform.h platform/wifi/wifi-utils-nl80211.c \
+ platform/wifi/wifi-utils-nl80211.h \
+ platform/wifi/wifi-utils-private.h platform/wifi/wifi-utils.c \
+ platform/wifi/wifi-utils.h rdisc/nm-fake-rdisc.c \
+ rdisc/nm-fake-rdisc.h rdisc/nm-lndp-rdisc.c \
+ rdisc/nm-lndp-rdisc.h rdisc/nm-rdisc.c rdisc/nm-rdisc.h \
+ posix-signals/nm-posix-signals.c \
+ posix-signals/nm-posix-signals.h ppp-manager/nm-ppp-manager.c \
+ ppp-manager/nm-ppp-manager.h ppp-manager/nm-ppp-status.h \
+ settings/nm-agent-manager.c settings/nm-agent-manager.h \
+ settings/nm-inotify-helper.c settings/nm-inotify-helper.h \
+ settings/nm-secret-agent.c settings/nm-secret-agent.h \
+ settings/nm-settings-connection.c \
+ settings/nm-settings-connection.h settings/nm-settings-error.c \
+ settings/nm-settings-error.h settings/nm-settings-utils.c \
+ settings/nm-settings-utils.h settings/nm-settings.c \
+ settings/nm-settings.h settings/nm-system-config-interface.c \
+ settings/nm-system-config-interface.h \
+ settings/plugins/keyfile/common.h \
+ settings/plugins/keyfile/errors.c \
+ settings/plugins/keyfile/nm-keyfile-connection.c \
+ settings/plugins/keyfile/nm-keyfile-connection.h \
+ settings/plugins/keyfile/plugin.c \
+ settings/plugins/keyfile/plugin.h \
+ settings/plugins/keyfile/reader.c \
+ settings/plugins/keyfile/reader.h \
+ settings/plugins/keyfile/utils.c \
+ settings/plugins/keyfile/utils.h \
+ settings/plugins/keyfile/writer.c \
+ settings/plugins/keyfile/writer.h \
+ supplicant-manager/nm-supplicant-config.c \
+ supplicant-manager/nm-supplicant-config.h \
+ supplicant-manager/nm-supplicant-interface.c \
+ supplicant-manager/nm-supplicant-interface.h \
+ supplicant-manager/nm-supplicant-manager.c \
+ supplicant-manager/nm-supplicant-manager.h \
+ supplicant-manager/nm-supplicant-settings-verify.c \
+ supplicant-manager/nm-supplicant-settings-verify.h \
+ supplicant-manager/nm-supplicant-types.h \
+ supplicant-manager/nm-call-store.c \
+ supplicant-manager/nm-call-store.h \
+ vpn-manager/nm-vpn-connection.c \
+ vpn-manager/nm-vpn-connection.h vpn-manager/nm-vpn-manager.c \
+ vpn-manager/nm-vpn-manager.h vpn-manager/nm-vpn-service.c \
+ vpn-manager/nm-vpn-service.h nm-activation-request.c \
+ nm-activation-request.h nm-active-connection.c \
+ nm-active-connection.h nm-connection-provider.c \
+ nm-connection-provider.h nm-connectivity.c nm-connectivity.h \
+ nm-dbus-manager.c nm-dbus-manager.h nm-dcb.c nm-dcb.h \
+ nm-dhcp4-config.c nm-dhcp4-config.h nm-dhcp6-config.c \
+ nm-dhcp6-config.h nm-dispatcher.c nm-dispatcher.h \
+ nm-enum-types.c nm-enum-types.h nm-ip4-config.c \
nm-ip4-config.h nm-ip6-config.c nm-ip6-config.h \
- nm-active-connection.h nm-active-connection.c nm-config.h \
- nm-config.c main.c nm-policy.c nm-policy.h nm-policy-hosts.c \
- nm-policy-hosts.h nm-policy-hostname.c nm-policy-hostname.h \
- NetworkManagerUtils.c NetworkManagerUtils.h nm-system.c \
- nm-system.h nm-manager.c nm-manager.h nm-manager-auth.c \
- nm-manager-auth.h nm-netlink-monitor.c nm-netlink-monitor.h \
- nm-netlink-utils.c nm-netlink-utils.h nm-netlink-compat.h \
- nm-netlink-compat.c nm-activation-request.c \
- nm-activation-request.h nm-properties-changed-signal.c \
- nm-properties-changed-signal.h nm-dhcp4-config.c \
- nm-dhcp4-config.h nm-dhcp6-config.c nm-dhcp6-config.h \
- nm-rfkill.h nm-session-monitor.h nm-session-utils.c \
- nm-session-utils.h nm-sleep-monitor.h nm-connection-provider.h \
- nm-connection-provider.c nm-dispatcher.c nm-dispatcher.h \
- nm-connectivity.c nm-connectivity.h $(am__append_2) \
- $(am__append_3) $(am__append_4) $(am__append_5) \
- $(am__append_6)
-BUILT_SOURCES = \
+ nm-manager-auth.c nm-manager-auth.h nm-auth-subject.c \
+ nm-auth-subject.h nm-manager.c nm-manager.h nm-policy.c \
+ nm-policy.h nm-properties-changed-signal.c \
+ nm-properties-changed-signal.h nm-rfkill-manager.c \
+ nm-rfkill-manager.h nm-session-monitor.h nm-session-utils.c \
+ nm-session-utils.h nm-sleep-monitor.h nm-types.h \
+ NetworkManagerUtils.c NetworkManagerUtils.h $(am__append_3) \
+ $(am__append_4) $(am__append_5) $(am__append_6) \
+ $(am__append_7) $(am__append_8)
+GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_enum_types_sources = $(nm_sources) $(am__append_9)
+BUILT_SOURCES = $(GLIB_GENERATED) $(glue_sources)
+glue_sources = \
nm-access-point-glue.h \
- nm-manager-glue.h \
- nm-device-interface-glue.h \
- nm-device-ethernet-glue.h \
- nm-device-infiniband-glue.h \
+ nm-active-connection-glue.h \
+ nm-agent-manager-glue.h \
nm-device-bond-glue.h \
nm-device-bridge-glue.h \
+ nm-device-ethernet-glue.h \
+ nm-device-generic-glue.h \
+ nm-device-glue.h \
+ nm-device-gre-glue.h \
+ nm-device-infiniband-glue.h \
+ nm-device-macvlan-glue.h \
+ nm-device-team-glue.h \
+ nm-device-tun-glue.h \
+ nm-device-veth-glue.h \
nm-device-vlan-glue.h \
- nm-device-adsl-glue.h \
- nm-device-wifi-glue.h \
- nm-device-olpc-mesh-glue.h \
- nm-device-bt-glue.h \
- nm-device-modem-glue.h \
+ nm-device-vxlan-glue.h \
+ nm-dhcp4-config-glue.h \
+ nm-dhcp6-config-glue.h \
nm-ip4-config-glue.h \
nm-ip6-config-glue.h \
- nm-active-connection-glue.h \
- nm-dhcp4-config-glue.h \
- nm-dhcp6-config-glue.h
-
-NetworkManager_CPPFLAGS = $(DBUS_CFLAGS) $(GLIB_CFLAGS) \
- $(GUDEV_CFLAGS) $(LIBNL_CFLAGS) $(POLKIT_CFLAGS) \
- $(SYSTEMD_LOGIN_CFLAGS) $(LIBSOUP_CFLAGS) $(AM_CPPFLAGS) \
- -DBINDIR=\"$(bindir)\" -DSBINDIR=\"$(sbindir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" -DDATADIR=\"$(datadir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLOCALSTATEDIR=\"$(localstatedir)\" \
- -DNMLOCALEDIR=\"$(datadir)/locale\" \
- -DNMPLUGINDIR=\"$(pkglibdir)\" -DNMCONFDIR=\"$(nmconfdir)\" \
- -DNMRUNDIR=\"$(nmrundir)\" -DNMSTATEDIR=\"$(nmstatedir)\" \
- -DARP_DEBUG $(am__append_7)
-NetworkManager_LDADD = \
- ./generated/libnm-generated.la \
- ./logging/libnm-logging.la \
- ./posix-signals/libnm-posix-signals.la \
- ./dns-manager/libdns-manager.la \
- ./vpn-manager/libvpn-manager.la \
- ./dhcp-manager/libdhcp-manager.la \
- ./ip6-manager/libip6-manager.la \
- ./supplicant-manager/libsupplicant-manager.la \
- ./dnsmasq-manager/libdnsmasq-manager.la \
- ./ppp-manager/libppp-manager.la \
- ./modem-manager/libmodem-manager.la \
- ./bluez-manager/libbluez-manager.la \
- ./wifi/libwifi-utils.la \
- ./firewall-manager/libfirewall-manager.la \
- ./settings/libsettings.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS) \
- $(GUDEV_LIBS) \
- $(LIBNL_LIBS) \
- $(POLKIT_LIBS) \
- $(SYSTEMD_LOGIN_LIBS) \
- $(LIBSOUP_LIBS) \
- $(LIBM) \
- $(LIBDL)
-
+ nm-manager-glue.h \
+ nm-ppp-manager-glue.h \
+ nm-settings-connection-glue.h \
+ nm-settings-glue.h \
+ nm-vpn-connection-glue.h
+
+libNetworkManager_la_SOURCES = \
+ $(nm_sources) \
+ $(glue_sources)
+
+libNetworkManager_la_LIBADD = $(top_builddir)/libgsystem.la \
+ $(top_builddir)/libnm-util/libnm-util.la $(DBUS_LIBS) \
+ $(GLIB_LIBS) $(GUDEV_LIBS) $(LIBNL_LIBS) $(POLKIT_LIBS) \
+ $(SYSTEMD_LOGIN_LIBS) $(LIBDL) $(LIBM) $(am__append_13) \
+ $(am__append_14)
NetworkManager_LDFLAGS = -rdynamic
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = org.freedesktop.NetworkManager.conf
@@ -816,8 +890,9 @@ rundir = $(localstatedir)/run/NetworkManager
statedir = $(localstatedir)/lib/NetworkManager
CLEANFILES = \
$(BUILT_SOURCES) \
- nm-enum-types.c \
- nm-enum-types.h
+ settings/*-glue.h \
+ devices/*-glue.h \
+ devices/*/*-glue.h
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -866,14 +941,8 @@ clean-noinstLTLIBRARIES:
rm -f $${locs}; \
}
-libtest-dhcp.la: $(libtest_dhcp_la_OBJECTS) $(libtest_dhcp_la_DEPENDENCIES) $(EXTRA_libtest_dhcp_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libtest_dhcp_la_OBJECTS) $(libtest_dhcp_la_LIBADD) $(LIBS)
-
-libtest-policy-hosts.la: $(libtest_policy_hosts_la_OBJECTS) $(libtest_policy_hosts_la_DEPENDENCIES) $(EXTRA_libtest_policy_hosts_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libtest_policy_hosts_la_OBJECTS) $(libtest_policy_hosts_la_LIBADD) $(LIBS)
-
-libtest-wifi-ap-utils.la: $(libtest_wifi_ap_utils_la_OBJECTS) $(libtest_wifi_ap_utils_la_DEPENDENCIES) $(EXTRA_libtest_wifi_ap_utils_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libtest_wifi_ap_utils_la_OBJECTS) $(libtest_wifi_ap_utils_la_LIBADD) $(LIBS)
+libNetworkManager.la: $(libNetworkManager_la_OBJECTS) $(libNetworkManager_la_DEPENDENCIES) $(EXTRA_libNetworkManager_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libNetworkManager_la_OBJECTS) $(libNetworkManager_la_LIBADD) $(LIBS)
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
@@ -934,58 +1003,95 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-NetworkManagerUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-main.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-activation-request.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-active-connection.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-call-store.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-config.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-connection-provider.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-connectivity.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-dbus-manager.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-adsl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-bond.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-bridge.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-bt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-ethernet.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-infiniband.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-modem.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-olpc-mesh.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-vlan.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-wifi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-wired.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-dhcp4-config.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-dhcp6-config.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-dispatcher.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-hostname-provider.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-ip4-config.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-ip6-config.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-manager-auth.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-manager.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-compat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-monitor.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-utils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy-hostname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy-hosts.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-properties-changed-signal.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-session-monitor-ck.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-session-monitor-null.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-session-monitor-systemd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-session-utils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-sleep-monitor-systemd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-sleep-monitor-upower.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-system.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-udev-manager.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-wifi-ap-utils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-wifi-ap.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_dhcp_la-nm-dbus-manager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_dhcp_la-nm-hostname-provider.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_dhcp_la-nm-ip4-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_dhcp_la-nm-ip6-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_policy_hosts_la-nm-policy-hosts.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest_wifi_ap_utils_la-nm-wifi-ap-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManagerUtils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-activation-request.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-active-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-agent-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-auth-subject.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-call-store.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-config-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-connection-provider.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-connectivity.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dbus-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dcb.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-bond.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-bridge.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-ethernet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-factory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-generic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-gre.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-infiniband.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-macvlan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-team.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-tun.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-veth.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-vlan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-vxlan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-dhclient-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-dhclient.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-dhcpcd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp4-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp6-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dispatcher.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-dnsmasq.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-unbound.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dnsmasq-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dnsmasq-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-fake-platform.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-fake-rdisc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-firewall-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-inotify-helper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ip4-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ip6-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-keyfile-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-linux-platform.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-lndp-rdisc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-logging.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-manager-auth.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-platform.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-policy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-posix-signals.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ppp-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-properties-changed-signal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-rdisc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-rfkill-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-secret-agent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-session-monitor-ck.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-session-monitor-null.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-session-monitor-systemd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-session-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings-error.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-sleep-monitor-systemd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-sleep-monitor-upower.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-supplicant-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-supplicant-interface.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-supplicant-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-supplicant-settings-verify.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-system-config-interface.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-vpn-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-vpn-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-vpn-service.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wifi-utils-nl80211.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wifi-utils-wext.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wifi-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writer.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -1008,691 +1114,446 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libtest_dhcp_la-nm-ip4-config.lo: nm-ip4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_dhcp_la-nm-ip4-config.lo -MD -MP -MF $(DEPDIR)/libtest_dhcp_la-nm-ip4-config.Tpo -c -o libtest_dhcp_la-nm-ip4-config.lo `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_dhcp_la-nm-ip4-config.Tpo $(DEPDIR)/libtest_dhcp_la-nm-ip4-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip4-config.c' object='libtest_dhcp_la-nm-ip4-config.lo' libtool=yes @AMDEPBACKSLASH@
+nm-config.lo: config/nm-config.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-config.lo -MD -MP -MF $(DEPDIR)/nm-config.Tpo -c -o nm-config.lo `test -f 'config/nm-config.c' || echo '$(srcdir)/'`config/nm-config.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-config.Tpo $(DEPDIR)/nm-config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='config/nm-config.c' object='nm-config.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_dhcp_la-nm-ip4-config.lo `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-config.lo `test -f 'config/nm-config.c' || echo '$(srcdir)/'`config/nm-config.c
-libtest_dhcp_la-nm-ip6-config.lo: nm-ip6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_dhcp_la-nm-ip6-config.lo -MD -MP -MF $(DEPDIR)/libtest_dhcp_la-nm-ip6-config.Tpo -c -o libtest_dhcp_la-nm-ip6-config.lo `test -f 'nm-ip6-config.c' || echo '$(srcdir)/'`nm-ip6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_dhcp_la-nm-ip6-config.Tpo $(DEPDIR)/libtest_dhcp_la-nm-ip6-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip6-config.c' object='libtest_dhcp_la-nm-ip6-config.lo' libtool=yes @AMDEPBACKSLASH@
+nm-config-device.lo: config/nm-config-device.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-config-device.lo -MD -MP -MF $(DEPDIR)/nm-config-device.Tpo -c -o nm-config-device.lo `test -f 'config/nm-config-device.c' || echo '$(srcdir)/'`config/nm-config-device.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-config-device.Tpo $(DEPDIR)/nm-config-device.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='config/nm-config-device.c' object='nm-config-device.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_dhcp_la-nm-ip6-config.lo `test -f 'nm-ip6-config.c' || echo '$(srcdir)/'`nm-ip6-config.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-config-device.lo `test -f 'config/nm-config-device.c' || echo '$(srcdir)/'`config/nm-config-device.c
-libtest_dhcp_la-nm-hostname-provider.lo: nm-hostname-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_dhcp_la-nm-hostname-provider.lo -MD -MP -MF $(DEPDIR)/libtest_dhcp_la-nm-hostname-provider.Tpo -c -o libtest_dhcp_la-nm-hostname-provider.lo `test -f 'nm-hostname-provider.c' || echo '$(srcdir)/'`nm-hostname-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_dhcp_la-nm-hostname-provider.Tpo $(DEPDIR)/libtest_dhcp_la-nm-hostname-provider.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-hostname-provider.c' object='libtest_dhcp_la-nm-hostname-provider.lo' libtool=yes @AMDEPBACKSLASH@
+nm-device.lo: devices/nm-device.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device.lo -MD -MP -MF $(DEPDIR)/nm-device.Tpo -c -o nm-device.lo `test -f 'devices/nm-device.c' || echo '$(srcdir)/'`devices/nm-device.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device.Tpo $(DEPDIR)/nm-device.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device.c' object='nm-device.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_dhcp_la-nm-hostname-provider.lo `test -f 'nm-hostname-provider.c' || echo '$(srcdir)/'`nm-hostname-provider.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device.lo `test -f 'devices/nm-device.c' || echo '$(srcdir)/'`devices/nm-device.c
-libtest_dhcp_la-nm-dbus-manager.lo: nm-dbus-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_dhcp_la-nm-dbus-manager.lo -MD -MP -MF $(DEPDIR)/libtest_dhcp_la-nm-dbus-manager.Tpo -c -o libtest_dhcp_la-nm-dbus-manager.lo `test -f 'nm-dbus-manager.c' || echo '$(srcdir)/'`nm-dbus-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_dhcp_la-nm-dbus-manager.Tpo $(DEPDIR)/libtest_dhcp_la-nm-dbus-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dbus-manager.c' object='libtest_dhcp_la-nm-dbus-manager.lo' libtool=yes @AMDEPBACKSLASH@
+nm-device-bond.lo: devices/nm-device-bond.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-bond.lo -MD -MP -MF $(DEPDIR)/nm-device-bond.Tpo -c -o nm-device-bond.lo `test -f 'devices/nm-device-bond.c' || echo '$(srcdir)/'`devices/nm-device-bond.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-bond.Tpo $(DEPDIR)/nm-device-bond.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-bond.c' object='nm-device-bond.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_dhcp_la-nm-dbus-manager.lo `test -f 'nm-dbus-manager.c' || echo '$(srcdir)/'`nm-dbus-manager.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-bond.lo `test -f 'devices/nm-device-bond.c' || echo '$(srcdir)/'`devices/nm-device-bond.c
-libtest_policy_hosts_la-nm-policy-hosts.lo: nm-policy-hosts.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_policy_hosts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_policy_hosts_la-nm-policy-hosts.lo -MD -MP -MF $(DEPDIR)/libtest_policy_hosts_la-nm-policy-hosts.Tpo -c -o libtest_policy_hosts_la-nm-policy-hosts.lo `test -f 'nm-policy-hosts.c' || echo '$(srcdir)/'`nm-policy-hosts.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_policy_hosts_la-nm-policy-hosts.Tpo $(DEPDIR)/libtest_policy_hosts_la-nm-policy-hosts.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-policy-hosts.c' object='libtest_policy_hosts_la-nm-policy-hosts.lo' libtool=yes @AMDEPBACKSLASH@
+nm-device-bridge.lo: devices/nm-device-bridge.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-bridge.lo -MD -MP -MF $(DEPDIR)/nm-device-bridge.Tpo -c -o nm-device-bridge.lo `test -f 'devices/nm-device-bridge.c' || echo '$(srcdir)/'`devices/nm-device-bridge.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-bridge.Tpo $(DEPDIR)/nm-device-bridge.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-bridge.c' object='nm-device-bridge.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_policy_hosts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_policy_hosts_la-nm-policy-hosts.lo `test -f 'nm-policy-hosts.c' || echo '$(srcdir)/'`nm-policy-hosts.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-bridge.lo `test -f 'devices/nm-device-bridge.c' || echo '$(srcdir)/'`devices/nm-device-bridge.c
-libtest_wifi_ap_utils_la-nm-wifi-ap-utils.lo: nm-wifi-ap-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_wifi_ap_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_wifi_ap_utils_la-nm-wifi-ap-utils.lo -MD -MP -MF $(DEPDIR)/libtest_wifi_ap_utils_la-nm-wifi-ap-utils.Tpo -c -o libtest_wifi_ap_utils_la-nm-wifi-ap-utils.lo `test -f 'nm-wifi-ap-utils.c' || echo '$(srcdir)/'`nm-wifi-ap-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_wifi_ap_utils_la-nm-wifi-ap-utils.Tpo $(DEPDIR)/libtest_wifi_ap_utils_la-nm-wifi-ap-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wifi-ap-utils.c' object='libtest_wifi_ap_utils_la-nm-wifi-ap-utils.lo' libtool=yes @AMDEPBACKSLASH@
+nm-device-ethernet.lo: devices/nm-device-ethernet.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-ethernet.lo -MD -MP -MF $(DEPDIR)/nm-device-ethernet.Tpo -c -o nm-device-ethernet.lo `test -f 'devices/nm-device-ethernet.c' || echo '$(srcdir)/'`devices/nm-device-ethernet.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-ethernet.Tpo $(DEPDIR)/nm-device-ethernet.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-ethernet.c' object='nm-device-ethernet.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtest_wifi_ap_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtest_wifi_ap_utils_la-nm-wifi-ap-utils.lo `test -f 'nm-wifi-ap-utils.c' || echo '$(srcdir)/'`nm-wifi-ap-utils.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-ethernet.lo `test -f 'devices/nm-device-ethernet.c' || echo '$(srcdir)/'`devices/nm-device-ethernet.c
-NetworkManager-nm-call-store.o: nm-call-store.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-call-store.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-call-store.Tpo -c -o NetworkManager-nm-call-store.o `test -f 'nm-call-store.c' || echo '$(srcdir)/'`nm-call-store.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-call-store.Tpo $(DEPDIR)/NetworkManager-nm-call-store.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-call-store.c' object='NetworkManager-nm-call-store.o' libtool=no @AMDEPBACKSLASH@
+nm-device-factory.lo: devices/nm-device-factory.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-factory.lo -MD -MP -MF $(DEPDIR)/nm-device-factory.Tpo -c -o nm-device-factory.lo `test -f 'devices/nm-device-factory.c' || echo '$(srcdir)/'`devices/nm-device-factory.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-factory.Tpo $(DEPDIR)/nm-device-factory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-factory.c' object='nm-device-factory.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-call-store.o `test -f 'nm-call-store.c' || echo '$(srcdir)/'`nm-call-store.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-factory.lo `test -f 'devices/nm-device-factory.c' || echo '$(srcdir)/'`devices/nm-device-factory.c
-NetworkManager-nm-call-store.obj: nm-call-store.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-call-store.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-call-store.Tpo -c -o NetworkManager-nm-call-store.obj `if test -f 'nm-call-store.c'; then $(CYGPATH_W) 'nm-call-store.c'; else $(CYGPATH_W) '$(srcdir)/nm-call-store.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-call-store.Tpo $(DEPDIR)/NetworkManager-nm-call-store.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-call-store.c' object='NetworkManager-nm-call-store.obj' libtool=no @AMDEPBACKSLASH@
+nm-device-generic.lo: devices/nm-device-generic.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-generic.lo -MD -MP -MF $(DEPDIR)/nm-device-generic.Tpo -c -o nm-device-generic.lo `test -f 'devices/nm-device-generic.c' || echo '$(srcdir)/'`devices/nm-device-generic.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-generic.Tpo $(DEPDIR)/nm-device-generic.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-generic.c' object='nm-device-generic.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-call-store.obj `if test -f 'nm-call-store.c'; then $(CYGPATH_W) 'nm-call-store.c'; else $(CYGPATH_W) '$(srcdir)/nm-call-store.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-generic.lo `test -f 'devices/nm-device-generic.c' || echo '$(srcdir)/'`devices/nm-device-generic.c
-NetworkManager-nm-device.o: nm-device.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device.Tpo -c -o NetworkManager-nm-device.o `test -f 'nm-device.c' || echo '$(srcdir)/'`nm-device.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device.Tpo $(DEPDIR)/NetworkManager-nm-device.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device.c' object='NetworkManager-nm-device.o' libtool=no @AMDEPBACKSLASH@
+nm-device-gre.lo: devices/nm-device-gre.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-gre.lo -MD -MP -MF $(DEPDIR)/nm-device-gre.Tpo -c -o nm-device-gre.lo `test -f 'devices/nm-device-gre.c' || echo '$(srcdir)/'`devices/nm-device-gre.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-gre.Tpo $(DEPDIR)/nm-device-gre.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-gre.c' object='nm-device-gre.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device.o `test -f 'nm-device.c' || echo '$(srcdir)/'`nm-device.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-gre.lo `test -f 'devices/nm-device-gre.c' || echo '$(srcdir)/'`devices/nm-device-gre.c
-NetworkManager-nm-device.obj: nm-device.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device.Tpo -c -o NetworkManager-nm-device.obj `if test -f 'nm-device.c'; then $(CYGPATH_W) 'nm-device.c'; else $(CYGPATH_W) '$(srcdir)/nm-device.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device.Tpo $(DEPDIR)/NetworkManager-nm-device.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device.c' object='NetworkManager-nm-device.obj' libtool=no @AMDEPBACKSLASH@
+nm-device-infiniband.lo: devices/nm-device-infiniband.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-infiniband.lo -MD -MP -MF $(DEPDIR)/nm-device-infiniband.Tpo -c -o nm-device-infiniband.lo `test -f 'devices/nm-device-infiniband.c' || echo '$(srcdir)/'`devices/nm-device-infiniband.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-infiniband.Tpo $(DEPDIR)/nm-device-infiniband.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-infiniband.c' object='nm-device-infiniband.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device.obj `if test -f 'nm-device.c'; then $(CYGPATH_W) 'nm-device.c'; else $(CYGPATH_W) '$(srcdir)/nm-device.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-infiniband.lo `test -f 'devices/nm-device-infiniband.c' || echo '$(srcdir)/'`devices/nm-device-infiniband.c
-NetworkManager-nm-device-ethernet.o: nm-device-ethernet.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-ethernet.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-ethernet.Tpo -c -o NetworkManager-nm-device-ethernet.o `test -f 'nm-device-ethernet.c' || echo '$(srcdir)/'`nm-device-ethernet.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-ethernet.Tpo $(DEPDIR)/NetworkManager-nm-device-ethernet.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-ethernet.c' object='NetworkManager-nm-device-ethernet.o' libtool=no @AMDEPBACKSLASH@
+nm-device-macvlan.lo: devices/nm-device-macvlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-macvlan.lo -MD -MP -MF $(DEPDIR)/nm-device-macvlan.Tpo -c -o nm-device-macvlan.lo `test -f 'devices/nm-device-macvlan.c' || echo '$(srcdir)/'`devices/nm-device-macvlan.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-macvlan.Tpo $(DEPDIR)/nm-device-macvlan.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-macvlan.c' object='nm-device-macvlan.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-ethernet.o `test -f 'nm-device-ethernet.c' || echo '$(srcdir)/'`nm-device-ethernet.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-macvlan.lo `test -f 'devices/nm-device-macvlan.c' || echo '$(srcdir)/'`devices/nm-device-macvlan.c
-NetworkManager-nm-device-ethernet.obj: nm-device-ethernet.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-ethernet.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-ethernet.Tpo -c -o NetworkManager-nm-device-ethernet.obj `if test -f 'nm-device-ethernet.c'; then $(CYGPATH_W) 'nm-device-ethernet.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-ethernet.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-ethernet.Tpo $(DEPDIR)/NetworkManager-nm-device-ethernet.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-ethernet.c' object='NetworkManager-nm-device-ethernet.obj' libtool=no @AMDEPBACKSLASH@
+nm-device-team.lo: devices/nm-device-team.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-team.lo -MD -MP -MF $(DEPDIR)/nm-device-team.Tpo -c -o nm-device-team.lo `test -f 'devices/nm-device-team.c' || echo '$(srcdir)/'`devices/nm-device-team.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-team.Tpo $(DEPDIR)/nm-device-team.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-team.c' object='nm-device-team.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-ethernet.obj `if test -f 'nm-device-ethernet.c'; then $(CYGPATH_W) 'nm-device-ethernet.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-ethernet.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-team.lo `test -f 'devices/nm-device-team.c' || echo '$(srcdir)/'`devices/nm-device-team.c
-NetworkManager-nm-device-adsl.o: nm-device-adsl.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-adsl.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-adsl.Tpo -c -o NetworkManager-nm-device-adsl.o `test -f 'nm-device-adsl.c' || echo '$(srcdir)/'`nm-device-adsl.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-adsl.Tpo $(DEPDIR)/NetworkManager-nm-device-adsl.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-adsl.c' object='NetworkManager-nm-device-adsl.o' libtool=no @AMDEPBACKSLASH@
+nm-device-tun.lo: devices/nm-device-tun.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-tun.lo -MD -MP -MF $(DEPDIR)/nm-device-tun.Tpo -c -o nm-device-tun.lo `test -f 'devices/nm-device-tun.c' || echo '$(srcdir)/'`devices/nm-device-tun.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-tun.Tpo $(DEPDIR)/nm-device-tun.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-tun.c' object='nm-device-tun.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-adsl.o `test -f 'nm-device-adsl.c' || echo '$(srcdir)/'`nm-device-adsl.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-tun.lo `test -f 'devices/nm-device-tun.c' || echo '$(srcdir)/'`devices/nm-device-tun.c
-NetworkManager-nm-device-adsl.obj: nm-device-adsl.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-adsl.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-adsl.Tpo -c -o NetworkManager-nm-device-adsl.obj `if test -f 'nm-device-adsl.c'; then $(CYGPATH_W) 'nm-device-adsl.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-adsl.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-adsl.Tpo $(DEPDIR)/NetworkManager-nm-device-adsl.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-adsl.c' object='NetworkManager-nm-device-adsl.obj' libtool=no @AMDEPBACKSLASH@
+nm-device-veth.lo: devices/nm-device-veth.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-veth.lo -MD -MP -MF $(DEPDIR)/nm-device-veth.Tpo -c -o nm-device-veth.lo `test -f 'devices/nm-device-veth.c' || echo '$(srcdir)/'`devices/nm-device-veth.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-veth.Tpo $(DEPDIR)/nm-device-veth.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-veth.c' object='nm-device-veth.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-adsl.obj `if test -f 'nm-device-adsl.c'; then $(CYGPATH_W) 'nm-device-adsl.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-adsl.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-veth.lo `test -f 'devices/nm-device-veth.c' || echo '$(srcdir)/'`devices/nm-device-veth.c
-NetworkManager-nm-device-wifi.o: nm-device-wifi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-wifi.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-wifi.Tpo -c -o NetworkManager-nm-device-wifi.o `test -f 'nm-device-wifi.c' || echo '$(srcdir)/'`nm-device-wifi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-wifi.Tpo $(DEPDIR)/NetworkManager-nm-device-wifi.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-wifi.c' object='NetworkManager-nm-device-wifi.o' libtool=no @AMDEPBACKSLASH@
+nm-device-vlan.lo: devices/nm-device-vlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-vlan.lo -MD -MP -MF $(DEPDIR)/nm-device-vlan.Tpo -c -o nm-device-vlan.lo `test -f 'devices/nm-device-vlan.c' || echo '$(srcdir)/'`devices/nm-device-vlan.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-vlan.Tpo $(DEPDIR)/nm-device-vlan.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-vlan.c' object='nm-device-vlan.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-wifi.o `test -f 'nm-device-wifi.c' || echo '$(srcdir)/'`nm-device-wifi.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-vlan.lo `test -f 'devices/nm-device-vlan.c' || echo '$(srcdir)/'`devices/nm-device-vlan.c
-NetworkManager-nm-device-wifi.obj: nm-device-wifi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-wifi.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-wifi.Tpo -c -o NetworkManager-nm-device-wifi.obj `if test -f 'nm-device-wifi.c'; then $(CYGPATH_W) 'nm-device-wifi.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-wifi.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-wifi.Tpo $(DEPDIR)/NetworkManager-nm-device-wifi.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-wifi.c' object='NetworkManager-nm-device-wifi.obj' libtool=no @AMDEPBACKSLASH@
+nm-device-vxlan.lo: devices/nm-device-vxlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-vxlan.lo -MD -MP -MF $(DEPDIR)/nm-device-vxlan.Tpo -c -o nm-device-vxlan.lo `test -f 'devices/nm-device-vxlan.c' || echo '$(srcdir)/'`devices/nm-device-vxlan.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-vxlan.Tpo $(DEPDIR)/nm-device-vxlan.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-vxlan.c' object='nm-device-vxlan.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-wifi.obj `if test -f 'nm-device-wifi.c'; then $(CYGPATH_W) 'nm-device-wifi.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-wifi.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-vxlan.lo `test -f 'devices/nm-device-vxlan.c' || echo '$(srcdir)/'`devices/nm-device-vxlan.c
-NetworkManager-nm-device-wired.o: nm-device-wired.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-wired.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-wired.Tpo -c -o NetworkManager-nm-device-wired.o `test -f 'nm-device-wired.c' || echo '$(srcdir)/'`nm-device-wired.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-wired.Tpo $(DEPDIR)/NetworkManager-nm-device-wired.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-wired.c' object='NetworkManager-nm-device-wired.o' libtool=no @AMDEPBACKSLASH@
+nm-dhcp-client.lo: dhcp-manager/nm-dhcp-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-client.lo -MD -MP -MF $(DEPDIR)/nm-dhcp-client.Tpo -c -o nm-dhcp-client.lo `test -f 'dhcp-manager/nm-dhcp-client.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-client.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-client.Tpo $(DEPDIR)/nm-dhcp-client.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-client.c' object='nm-dhcp-client.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-wired.o `test -f 'nm-device-wired.c' || echo '$(srcdir)/'`nm-device-wired.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-client.lo `test -f 'dhcp-manager/nm-dhcp-client.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-client.c
-NetworkManager-nm-device-wired.obj: nm-device-wired.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-wired.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-wired.Tpo -c -o NetworkManager-nm-device-wired.obj `if test -f 'nm-device-wired.c'; then $(CYGPATH_W) 'nm-device-wired.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-wired.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-wired.Tpo $(DEPDIR)/NetworkManager-nm-device-wired.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-wired.c' object='NetworkManager-nm-device-wired.obj' libtool=no @AMDEPBACKSLASH@
+nm-dhcp-dhclient.lo: dhcp-manager/nm-dhcp-dhclient.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient.lo -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient.Tpo -c -o nm-dhcp-dhclient.lo `test -f 'dhcp-manager/nm-dhcp-dhclient.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhclient.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-dhclient.Tpo $(DEPDIR)/nm-dhcp-dhclient.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhclient.c' object='nm-dhcp-dhclient.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-wired.obj `if test -f 'nm-device-wired.c'; then $(CYGPATH_W) 'nm-device-wired.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-wired.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-dhclient.lo `test -f 'dhcp-manager/nm-dhcp-dhclient.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhclient.c
-NetworkManager-nm-device-olpc-mesh.o: nm-device-olpc-mesh.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-olpc-mesh.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-olpc-mesh.Tpo -c -o NetworkManager-nm-device-olpc-mesh.o `test -f 'nm-device-olpc-mesh.c' || echo '$(srcdir)/'`nm-device-olpc-mesh.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-olpc-mesh.Tpo $(DEPDIR)/NetworkManager-nm-device-olpc-mesh.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-olpc-mesh.c' object='NetworkManager-nm-device-olpc-mesh.o' libtool=no @AMDEPBACKSLASH@
+nm-dhcp-dhclient-utils.lo: dhcp-manager/nm-dhcp-dhclient-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient-utils.lo -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo -c -o nm-dhcp-dhclient-utils.lo `test -f 'dhcp-manager/nm-dhcp-dhclient-utils.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhclient-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo $(DEPDIR)/nm-dhcp-dhclient-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhclient-utils.c' object='nm-dhcp-dhclient-utils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-olpc-mesh.o `test -f 'nm-device-olpc-mesh.c' || echo '$(srcdir)/'`nm-device-olpc-mesh.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-dhclient-utils.lo `test -f 'dhcp-manager/nm-dhcp-dhclient-utils.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhclient-utils.c
-NetworkManager-nm-device-olpc-mesh.obj: nm-device-olpc-mesh.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-olpc-mesh.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-olpc-mesh.Tpo -c -o NetworkManager-nm-device-olpc-mesh.obj `if test -f 'nm-device-olpc-mesh.c'; then $(CYGPATH_W) 'nm-device-olpc-mesh.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-olpc-mesh.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-olpc-mesh.Tpo $(DEPDIR)/NetworkManager-nm-device-olpc-mesh.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-olpc-mesh.c' object='NetworkManager-nm-device-olpc-mesh.obj' libtool=no @AMDEPBACKSLASH@
+nm-dhcp-dhcpcd.lo: dhcp-manager/nm-dhcp-dhcpcd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhcpcd.lo -MD -MP -MF $(DEPDIR)/nm-dhcp-dhcpcd.Tpo -c -o nm-dhcp-dhcpcd.lo `test -f 'dhcp-manager/nm-dhcp-dhcpcd.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhcpcd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-dhcpcd.Tpo $(DEPDIR)/nm-dhcp-dhcpcd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhcpcd.c' object='nm-dhcp-dhcpcd.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-olpc-mesh.obj `if test -f 'nm-device-olpc-mesh.c'; then $(CYGPATH_W) 'nm-device-olpc-mesh.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-olpc-mesh.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-dhcpcd.lo `test -f 'dhcp-manager/nm-dhcp-dhcpcd.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhcpcd.c
-NetworkManager-nm-device-bt.o: nm-device-bt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-bt.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-bt.Tpo -c -o NetworkManager-nm-device-bt.o `test -f 'nm-device-bt.c' || echo '$(srcdir)/'`nm-device-bt.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-bt.Tpo $(DEPDIR)/NetworkManager-nm-device-bt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bt.c' object='NetworkManager-nm-device-bt.o' libtool=no @AMDEPBACKSLASH@
+nm-dhcp-manager.lo: dhcp-manager/nm-dhcp-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-manager.lo -MD -MP -MF $(DEPDIR)/nm-dhcp-manager.Tpo -c -o nm-dhcp-manager.lo `test -f 'dhcp-manager/nm-dhcp-manager.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-manager.Tpo $(DEPDIR)/nm-dhcp-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-manager.c' object='nm-dhcp-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-bt.o `test -f 'nm-device-bt.c' || echo '$(srcdir)/'`nm-device-bt.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-manager.lo `test -f 'dhcp-manager/nm-dhcp-manager.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-manager.c
-NetworkManager-nm-device-bt.obj: nm-device-bt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-bt.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-bt.Tpo -c -o NetworkManager-nm-device-bt.obj `if test -f 'nm-device-bt.c'; then $(CYGPATH_W) 'nm-device-bt.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-bt.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-bt.Tpo $(DEPDIR)/NetworkManager-nm-device-bt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bt.c' object='NetworkManager-nm-device-bt.obj' libtool=no @AMDEPBACKSLASH@
+nm-dns-dnsmasq.lo: dns-manager/nm-dns-dnsmasq.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dns-dnsmasq.lo -MD -MP -MF $(DEPDIR)/nm-dns-dnsmasq.Tpo -c -o nm-dns-dnsmasq.lo `test -f 'dns-manager/nm-dns-dnsmasq.c' || echo '$(srcdir)/'`dns-manager/nm-dns-dnsmasq.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dns-dnsmasq.Tpo $(DEPDIR)/nm-dns-dnsmasq.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dns-manager/nm-dns-dnsmasq.c' object='nm-dns-dnsmasq.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-bt.obj `if test -f 'nm-device-bt.c'; then $(CYGPATH_W) 'nm-device-bt.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-bt.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dns-dnsmasq.lo `test -f 'dns-manager/nm-dns-dnsmasq.c' || echo '$(srcdir)/'`dns-manager/nm-dns-dnsmasq.c
-NetworkManager-nm-device-modem.o: nm-device-modem.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-modem.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-modem.Tpo -c -o NetworkManager-nm-device-modem.o `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-modem.Tpo $(DEPDIR)/NetworkManager-nm-device-modem.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-modem.c' object='NetworkManager-nm-device-modem.o' libtool=no @AMDEPBACKSLASH@
+nm-dns-unbound.lo: dns-manager/nm-dns-unbound.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dns-unbound.lo -MD -MP -MF $(DEPDIR)/nm-dns-unbound.Tpo -c -o nm-dns-unbound.lo `test -f 'dns-manager/nm-dns-unbound.c' || echo '$(srcdir)/'`dns-manager/nm-dns-unbound.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dns-unbound.Tpo $(DEPDIR)/nm-dns-unbound.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dns-manager/nm-dns-unbound.c' object='nm-dns-unbound.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-modem.o `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dns-unbound.lo `test -f 'dns-manager/nm-dns-unbound.c' || echo '$(srcdir)/'`dns-manager/nm-dns-unbound.c
-NetworkManager-nm-device-modem.obj: nm-device-modem.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-modem.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-modem.Tpo -c -o NetworkManager-nm-device-modem.obj `if test -f 'nm-device-modem.c'; then $(CYGPATH_W) 'nm-device-modem.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-modem.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-modem.Tpo $(DEPDIR)/NetworkManager-nm-device-modem.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-modem.c' object='NetworkManager-nm-device-modem.obj' libtool=no @AMDEPBACKSLASH@
+nm-dns-manager.lo: dns-manager/nm-dns-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dns-manager.lo -MD -MP -MF $(DEPDIR)/nm-dns-manager.Tpo -c -o nm-dns-manager.lo `test -f 'dns-manager/nm-dns-manager.c' || echo '$(srcdir)/'`dns-manager/nm-dns-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dns-manager.Tpo $(DEPDIR)/nm-dns-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dns-manager/nm-dns-manager.c' object='nm-dns-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-modem.obj `if test -f 'nm-device-modem.c'; then $(CYGPATH_W) 'nm-device-modem.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-modem.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dns-manager.lo `test -f 'dns-manager/nm-dns-manager.c' || echo '$(srcdir)/'`dns-manager/nm-dns-manager.c
-NetworkManager-nm-device-infiniband.o: nm-device-infiniband.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-infiniband.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-infiniband.Tpo -c -o NetworkManager-nm-device-infiniband.o `test -f 'nm-device-infiniband.c' || echo '$(srcdir)/'`nm-device-infiniband.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-infiniband.Tpo $(DEPDIR)/NetworkManager-nm-device-infiniband.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-infiniband.c' object='NetworkManager-nm-device-infiniband.o' libtool=no @AMDEPBACKSLASH@
+nm-dns-plugin.lo: dns-manager/nm-dns-plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dns-plugin.lo -MD -MP -MF $(DEPDIR)/nm-dns-plugin.Tpo -c -o nm-dns-plugin.lo `test -f 'dns-manager/nm-dns-plugin.c' || echo '$(srcdir)/'`dns-manager/nm-dns-plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dns-plugin.Tpo $(DEPDIR)/nm-dns-plugin.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dns-manager/nm-dns-plugin.c' object='nm-dns-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-infiniband.o `test -f 'nm-device-infiniband.c' || echo '$(srcdir)/'`nm-device-infiniband.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dns-plugin.lo `test -f 'dns-manager/nm-dns-plugin.c' || echo '$(srcdir)/'`dns-manager/nm-dns-plugin.c
-NetworkManager-nm-device-infiniband.obj: nm-device-infiniband.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-infiniband.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-infiniband.Tpo -c -o NetworkManager-nm-device-infiniband.obj `if test -f 'nm-device-infiniband.c'; then $(CYGPATH_W) 'nm-device-infiniband.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-infiniband.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-infiniband.Tpo $(DEPDIR)/NetworkManager-nm-device-infiniband.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-infiniband.c' object='NetworkManager-nm-device-infiniband.obj' libtool=no @AMDEPBACKSLASH@
+nm-dns-utils.lo: dns-manager/nm-dns-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dns-utils.lo -MD -MP -MF $(DEPDIR)/nm-dns-utils.Tpo -c -o nm-dns-utils.lo `test -f 'dns-manager/nm-dns-utils.c' || echo '$(srcdir)/'`dns-manager/nm-dns-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dns-utils.Tpo $(DEPDIR)/nm-dns-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dns-manager/nm-dns-utils.c' object='nm-dns-utils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-infiniband.obj `if test -f 'nm-device-infiniband.c'; then $(CYGPATH_W) 'nm-device-infiniband.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-infiniband.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dns-utils.lo `test -f 'dns-manager/nm-dns-utils.c' || echo '$(srcdir)/'`dns-manager/nm-dns-utils.c
-NetworkManager-nm-device-bond.o: nm-device-bond.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-bond.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-bond.Tpo -c -o NetworkManager-nm-device-bond.o `test -f 'nm-device-bond.c' || echo '$(srcdir)/'`nm-device-bond.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-bond.Tpo $(DEPDIR)/NetworkManager-nm-device-bond.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bond.c' object='NetworkManager-nm-device-bond.o' libtool=no @AMDEPBACKSLASH@
+nm-dnsmasq-manager.lo: dnsmasq-manager/nm-dnsmasq-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dnsmasq-manager.lo -MD -MP -MF $(DEPDIR)/nm-dnsmasq-manager.Tpo -c -o nm-dnsmasq-manager.lo `test -f 'dnsmasq-manager/nm-dnsmasq-manager.c' || echo '$(srcdir)/'`dnsmasq-manager/nm-dnsmasq-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dnsmasq-manager.Tpo $(DEPDIR)/nm-dnsmasq-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dnsmasq-manager/nm-dnsmasq-manager.c' object='nm-dnsmasq-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-bond.o `test -f 'nm-device-bond.c' || echo '$(srcdir)/'`nm-device-bond.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dnsmasq-manager.lo `test -f 'dnsmasq-manager/nm-dnsmasq-manager.c' || echo '$(srcdir)/'`dnsmasq-manager/nm-dnsmasq-manager.c
-NetworkManager-nm-device-bond.obj: nm-device-bond.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-bond.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-bond.Tpo -c -o NetworkManager-nm-device-bond.obj `if test -f 'nm-device-bond.c'; then $(CYGPATH_W) 'nm-device-bond.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-bond.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-bond.Tpo $(DEPDIR)/NetworkManager-nm-device-bond.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bond.c' object='NetworkManager-nm-device-bond.obj' libtool=no @AMDEPBACKSLASH@
+nm-dnsmasq-utils.lo: dnsmasq-manager/nm-dnsmasq-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dnsmasq-utils.lo -MD -MP -MF $(DEPDIR)/nm-dnsmasq-utils.Tpo -c -o nm-dnsmasq-utils.lo `test -f 'dnsmasq-manager/nm-dnsmasq-utils.c' || echo '$(srcdir)/'`dnsmasq-manager/nm-dnsmasq-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dnsmasq-utils.Tpo $(DEPDIR)/nm-dnsmasq-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dnsmasq-manager/nm-dnsmasq-utils.c' object='nm-dnsmasq-utils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-bond.obj `if test -f 'nm-device-bond.c'; then $(CYGPATH_W) 'nm-device-bond.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-bond.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dnsmasq-utils.lo `test -f 'dnsmasq-manager/nm-dnsmasq-utils.c' || echo '$(srcdir)/'`dnsmasq-manager/nm-dnsmasq-utils.c
-NetworkManager-nm-device-bridge.o: nm-device-bridge.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-bridge.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-bridge.Tpo -c -o NetworkManager-nm-device-bridge.o `test -f 'nm-device-bridge.c' || echo '$(srcdir)/'`nm-device-bridge.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-bridge.Tpo $(DEPDIR)/NetworkManager-nm-device-bridge.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bridge.c' object='NetworkManager-nm-device-bridge.o' libtool=no @AMDEPBACKSLASH@
+nm-firewall-manager.lo: firewall-manager/nm-firewall-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-firewall-manager.lo -MD -MP -MF $(DEPDIR)/nm-firewall-manager.Tpo -c -o nm-firewall-manager.lo `test -f 'firewall-manager/nm-firewall-manager.c' || echo '$(srcdir)/'`firewall-manager/nm-firewall-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-firewall-manager.Tpo $(DEPDIR)/nm-firewall-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='firewall-manager/nm-firewall-manager.c' object='nm-firewall-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-bridge.o `test -f 'nm-device-bridge.c' || echo '$(srcdir)/'`nm-device-bridge.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-firewall-manager.lo `test -f 'firewall-manager/nm-firewall-manager.c' || echo '$(srcdir)/'`firewall-manager/nm-firewall-manager.c
-NetworkManager-nm-device-bridge.obj: nm-device-bridge.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-bridge.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-bridge.Tpo -c -o NetworkManager-nm-device-bridge.obj `if test -f 'nm-device-bridge.c'; then $(CYGPATH_W) 'nm-device-bridge.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-bridge.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-bridge.Tpo $(DEPDIR)/NetworkManager-nm-device-bridge.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bridge.c' object='NetworkManager-nm-device-bridge.obj' libtool=no @AMDEPBACKSLASH@
+nm-logging.lo: logging/nm-logging.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-logging.lo -MD -MP -MF $(DEPDIR)/nm-logging.Tpo -c -o nm-logging.lo `test -f 'logging/nm-logging.c' || echo '$(srcdir)/'`logging/nm-logging.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-logging.Tpo $(DEPDIR)/nm-logging.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging/nm-logging.c' object='nm-logging.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-bridge.obj `if test -f 'nm-device-bridge.c'; then $(CYGPATH_W) 'nm-device-bridge.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-bridge.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-logging.lo `test -f 'logging/nm-logging.c' || echo '$(srcdir)/'`logging/nm-logging.c
-NetworkManager-nm-device-vlan.o: nm-device-vlan.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-vlan.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-vlan.Tpo -c -o NetworkManager-nm-device-vlan.o `test -f 'nm-device-vlan.c' || echo '$(srcdir)/'`nm-device-vlan.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-vlan.Tpo $(DEPDIR)/NetworkManager-nm-device-vlan.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-vlan.c' object='NetworkManager-nm-device-vlan.o' libtool=no @AMDEPBACKSLASH@
+nm-fake-platform.lo: platform/nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-fake-platform.lo -MD -MP -MF $(DEPDIR)/nm-fake-platform.Tpo -c -o nm-fake-platform.lo `test -f 'platform/nm-fake-platform.c' || echo '$(srcdir)/'`platform/nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-fake-platform.Tpo $(DEPDIR)/nm-fake-platform.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='platform/nm-fake-platform.c' object='nm-fake-platform.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-vlan.o `test -f 'nm-device-vlan.c' || echo '$(srcdir)/'`nm-device-vlan.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-fake-platform.lo `test -f 'platform/nm-fake-platform.c' || echo '$(srcdir)/'`platform/nm-fake-platform.c
-NetworkManager-nm-device-vlan.obj: nm-device-vlan.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-device-vlan.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-device-vlan.Tpo -c -o NetworkManager-nm-device-vlan.obj `if test -f 'nm-device-vlan.c'; then $(CYGPATH_W) 'nm-device-vlan.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-vlan.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-device-vlan.Tpo $(DEPDIR)/NetworkManager-nm-device-vlan.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-vlan.c' object='NetworkManager-nm-device-vlan.obj' libtool=no @AMDEPBACKSLASH@
+nm-linux-platform.lo: platform/nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-linux-platform.lo -MD -MP -MF $(DEPDIR)/nm-linux-platform.Tpo -c -o nm-linux-platform.lo `test -f 'platform/nm-linux-platform.c' || echo '$(srcdir)/'`platform/nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-linux-platform.Tpo $(DEPDIR)/nm-linux-platform.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='platform/nm-linux-platform.c' object='nm-linux-platform.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-device-vlan.obj `if test -f 'nm-device-vlan.c'; then $(CYGPATH_W) 'nm-device-vlan.c'; else $(CYGPATH_W) '$(srcdir)/nm-device-vlan.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-linux-platform.lo `test -f 'platform/nm-linux-platform.c' || echo '$(srcdir)/'`platform/nm-linux-platform.c
-NetworkManager-nm-wifi-ap.o: nm-wifi-ap.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-wifi-ap.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-wifi-ap.Tpo -c -o NetworkManager-nm-wifi-ap.o `test -f 'nm-wifi-ap.c' || echo '$(srcdir)/'`nm-wifi-ap.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-wifi-ap.Tpo $(DEPDIR)/NetworkManager-nm-wifi-ap.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wifi-ap.c' object='NetworkManager-nm-wifi-ap.o' libtool=no @AMDEPBACKSLASH@
+nm-platform.lo: platform/nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-platform.lo -MD -MP -MF $(DEPDIR)/nm-platform.Tpo -c -o nm-platform.lo `test -f 'platform/nm-platform.c' || echo '$(srcdir)/'`platform/nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-platform.Tpo $(DEPDIR)/nm-platform.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='platform/nm-platform.c' object='nm-platform.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-wifi-ap.o `test -f 'nm-wifi-ap.c' || echo '$(srcdir)/'`nm-wifi-ap.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-platform.lo `test -f 'platform/nm-platform.c' || echo '$(srcdir)/'`platform/nm-platform.c
-NetworkManager-nm-wifi-ap.obj: nm-wifi-ap.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-wifi-ap.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-wifi-ap.Tpo -c -o NetworkManager-nm-wifi-ap.obj `if test -f 'nm-wifi-ap.c'; then $(CYGPATH_W) 'nm-wifi-ap.c'; else $(CYGPATH_W) '$(srcdir)/nm-wifi-ap.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-wifi-ap.Tpo $(DEPDIR)/NetworkManager-nm-wifi-ap.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wifi-ap.c' object='NetworkManager-nm-wifi-ap.obj' libtool=no @AMDEPBACKSLASH@
+wifi-utils-nl80211.lo: platform/wifi/wifi-utils-nl80211.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT wifi-utils-nl80211.lo -MD -MP -MF $(DEPDIR)/wifi-utils-nl80211.Tpo -c -o wifi-utils-nl80211.lo `test -f 'platform/wifi/wifi-utils-nl80211.c' || echo '$(srcdir)/'`platform/wifi/wifi-utils-nl80211.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wifi-utils-nl80211.Tpo $(DEPDIR)/wifi-utils-nl80211.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='platform/wifi/wifi-utils-nl80211.c' object='wifi-utils-nl80211.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-wifi-ap.obj `if test -f 'nm-wifi-ap.c'; then $(CYGPATH_W) 'nm-wifi-ap.c'; else $(CYGPATH_W) '$(srcdir)/nm-wifi-ap.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o wifi-utils-nl80211.lo `test -f 'platform/wifi/wifi-utils-nl80211.c' || echo '$(srcdir)/'`platform/wifi/wifi-utils-nl80211.c
-NetworkManager-nm-wifi-ap-utils.o: nm-wifi-ap-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-wifi-ap-utils.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-wifi-ap-utils.Tpo -c -o NetworkManager-nm-wifi-ap-utils.o `test -f 'nm-wifi-ap-utils.c' || echo '$(srcdir)/'`nm-wifi-ap-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-wifi-ap-utils.Tpo $(DEPDIR)/NetworkManager-nm-wifi-ap-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wifi-ap-utils.c' object='NetworkManager-nm-wifi-ap-utils.o' libtool=no @AMDEPBACKSLASH@
+wifi-utils.lo: platform/wifi/wifi-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT wifi-utils.lo -MD -MP -MF $(DEPDIR)/wifi-utils.Tpo -c -o wifi-utils.lo `test -f 'platform/wifi/wifi-utils.c' || echo '$(srcdir)/'`platform/wifi/wifi-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wifi-utils.Tpo $(DEPDIR)/wifi-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='platform/wifi/wifi-utils.c' object='wifi-utils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-wifi-ap-utils.o `test -f 'nm-wifi-ap-utils.c' || echo '$(srcdir)/'`nm-wifi-ap-utils.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o wifi-utils.lo `test -f 'platform/wifi/wifi-utils.c' || echo '$(srcdir)/'`platform/wifi/wifi-utils.c
-NetworkManager-nm-wifi-ap-utils.obj: nm-wifi-ap-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-wifi-ap-utils.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-wifi-ap-utils.Tpo -c -o NetworkManager-nm-wifi-ap-utils.obj `if test -f 'nm-wifi-ap-utils.c'; then $(CYGPATH_W) 'nm-wifi-ap-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-wifi-ap-utils.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-wifi-ap-utils.Tpo $(DEPDIR)/NetworkManager-nm-wifi-ap-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wifi-ap-utils.c' object='NetworkManager-nm-wifi-ap-utils.obj' libtool=no @AMDEPBACKSLASH@
+nm-fake-rdisc.lo: rdisc/nm-fake-rdisc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-fake-rdisc.lo -MD -MP -MF $(DEPDIR)/nm-fake-rdisc.Tpo -c -o nm-fake-rdisc.lo `test -f 'rdisc/nm-fake-rdisc.c' || echo '$(srcdir)/'`rdisc/nm-fake-rdisc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-fake-rdisc.Tpo $(DEPDIR)/nm-fake-rdisc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rdisc/nm-fake-rdisc.c' object='nm-fake-rdisc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-wifi-ap-utils.obj `if test -f 'nm-wifi-ap-utils.c'; then $(CYGPATH_W) 'nm-wifi-ap-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-wifi-ap-utils.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-fake-rdisc.lo `test -f 'rdisc/nm-fake-rdisc.c' || echo '$(srcdir)/'`rdisc/nm-fake-rdisc.c
-NetworkManager-nm-dbus-manager.o: nm-dbus-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dbus-manager.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dbus-manager.Tpo -c -o NetworkManager-nm-dbus-manager.o `test -f 'nm-dbus-manager.c' || echo '$(srcdir)/'`nm-dbus-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dbus-manager.Tpo $(DEPDIR)/NetworkManager-nm-dbus-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dbus-manager.c' object='NetworkManager-nm-dbus-manager.o' libtool=no @AMDEPBACKSLASH@
+nm-lndp-rdisc.lo: rdisc/nm-lndp-rdisc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-lndp-rdisc.lo -MD -MP -MF $(DEPDIR)/nm-lndp-rdisc.Tpo -c -o nm-lndp-rdisc.lo `test -f 'rdisc/nm-lndp-rdisc.c' || echo '$(srcdir)/'`rdisc/nm-lndp-rdisc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-lndp-rdisc.Tpo $(DEPDIR)/nm-lndp-rdisc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rdisc/nm-lndp-rdisc.c' object='nm-lndp-rdisc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dbus-manager.o `test -f 'nm-dbus-manager.c' || echo '$(srcdir)/'`nm-dbus-manager.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-lndp-rdisc.lo `test -f 'rdisc/nm-lndp-rdisc.c' || echo '$(srcdir)/'`rdisc/nm-lndp-rdisc.c
-NetworkManager-nm-dbus-manager.obj: nm-dbus-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dbus-manager.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dbus-manager.Tpo -c -o NetworkManager-nm-dbus-manager.obj `if test -f 'nm-dbus-manager.c'; then $(CYGPATH_W) 'nm-dbus-manager.c'; else $(CYGPATH_W) '$(srcdir)/nm-dbus-manager.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dbus-manager.Tpo $(DEPDIR)/NetworkManager-nm-dbus-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dbus-manager.c' object='NetworkManager-nm-dbus-manager.obj' libtool=no @AMDEPBACKSLASH@
+nm-rdisc.lo: rdisc/nm-rdisc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-rdisc.lo -MD -MP -MF $(DEPDIR)/nm-rdisc.Tpo -c -o nm-rdisc.lo `test -f 'rdisc/nm-rdisc.c' || echo '$(srcdir)/'`rdisc/nm-rdisc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-rdisc.Tpo $(DEPDIR)/nm-rdisc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rdisc/nm-rdisc.c' object='nm-rdisc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dbus-manager.obj `if test -f 'nm-dbus-manager.c'; then $(CYGPATH_W) 'nm-dbus-manager.c'; else $(CYGPATH_W) '$(srcdir)/nm-dbus-manager.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-rdisc.lo `test -f 'rdisc/nm-rdisc.c' || echo '$(srcdir)/'`rdisc/nm-rdisc.c
-NetworkManager-nm-udev-manager.o: nm-udev-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-udev-manager.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-udev-manager.Tpo -c -o NetworkManager-nm-udev-manager.o `test -f 'nm-udev-manager.c' || echo '$(srcdir)/'`nm-udev-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-udev-manager.Tpo $(DEPDIR)/NetworkManager-nm-udev-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-udev-manager.c' object='NetworkManager-nm-udev-manager.o' libtool=no @AMDEPBACKSLASH@
+nm-posix-signals.lo: posix-signals/nm-posix-signals.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-posix-signals.lo -MD -MP -MF $(DEPDIR)/nm-posix-signals.Tpo -c -o nm-posix-signals.lo `test -f 'posix-signals/nm-posix-signals.c' || echo '$(srcdir)/'`posix-signals/nm-posix-signals.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-posix-signals.Tpo $(DEPDIR)/nm-posix-signals.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='posix-signals/nm-posix-signals.c' object='nm-posix-signals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-udev-manager.o `test -f 'nm-udev-manager.c' || echo '$(srcdir)/'`nm-udev-manager.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-posix-signals.lo `test -f 'posix-signals/nm-posix-signals.c' || echo '$(srcdir)/'`posix-signals/nm-posix-signals.c
-NetworkManager-nm-udev-manager.obj: nm-udev-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-udev-manager.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-udev-manager.Tpo -c -o NetworkManager-nm-udev-manager.obj `if test -f 'nm-udev-manager.c'; then $(CYGPATH_W) 'nm-udev-manager.c'; else $(CYGPATH_W) '$(srcdir)/nm-udev-manager.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-udev-manager.Tpo $(DEPDIR)/NetworkManager-nm-udev-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-udev-manager.c' object='NetworkManager-nm-udev-manager.obj' libtool=no @AMDEPBACKSLASH@
+nm-ppp-manager.lo: ppp-manager/nm-ppp-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-ppp-manager.lo -MD -MP -MF $(DEPDIR)/nm-ppp-manager.Tpo -c -o nm-ppp-manager.lo `test -f 'ppp-manager/nm-ppp-manager.c' || echo '$(srcdir)/'`ppp-manager/nm-ppp-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-ppp-manager.Tpo $(DEPDIR)/nm-ppp-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ppp-manager/nm-ppp-manager.c' object='nm-ppp-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-udev-manager.obj `if test -f 'nm-udev-manager.c'; then $(CYGPATH_W) 'nm-udev-manager.c'; else $(CYGPATH_W) '$(srcdir)/nm-udev-manager.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-ppp-manager.lo `test -f 'ppp-manager/nm-ppp-manager.c' || echo '$(srcdir)/'`ppp-manager/nm-ppp-manager.c
-NetworkManager-nm-hostname-provider.o: nm-hostname-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-hostname-provider.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-hostname-provider.Tpo -c -o NetworkManager-nm-hostname-provider.o `test -f 'nm-hostname-provider.c' || echo '$(srcdir)/'`nm-hostname-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-hostname-provider.Tpo $(DEPDIR)/NetworkManager-nm-hostname-provider.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-hostname-provider.c' object='NetworkManager-nm-hostname-provider.o' libtool=no @AMDEPBACKSLASH@
+nm-agent-manager.lo: settings/nm-agent-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-agent-manager.lo -MD -MP -MF $(DEPDIR)/nm-agent-manager.Tpo -c -o nm-agent-manager.lo `test -f 'settings/nm-agent-manager.c' || echo '$(srcdir)/'`settings/nm-agent-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-agent-manager.Tpo $(DEPDIR)/nm-agent-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-agent-manager.c' object='nm-agent-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-hostname-provider.o `test -f 'nm-hostname-provider.c' || echo '$(srcdir)/'`nm-hostname-provider.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-agent-manager.lo `test -f 'settings/nm-agent-manager.c' || echo '$(srcdir)/'`settings/nm-agent-manager.c
-NetworkManager-nm-hostname-provider.obj: nm-hostname-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-hostname-provider.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-hostname-provider.Tpo -c -o NetworkManager-nm-hostname-provider.obj `if test -f 'nm-hostname-provider.c'; then $(CYGPATH_W) 'nm-hostname-provider.c'; else $(CYGPATH_W) '$(srcdir)/nm-hostname-provider.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-hostname-provider.Tpo $(DEPDIR)/NetworkManager-nm-hostname-provider.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-hostname-provider.c' object='NetworkManager-nm-hostname-provider.obj' libtool=no @AMDEPBACKSLASH@
+nm-inotify-helper.lo: settings/nm-inotify-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-inotify-helper.lo -MD -MP -MF $(DEPDIR)/nm-inotify-helper.Tpo -c -o nm-inotify-helper.lo `test -f 'settings/nm-inotify-helper.c' || echo '$(srcdir)/'`settings/nm-inotify-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-inotify-helper.Tpo $(DEPDIR)/nm-inotify-helper.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-inotify-helper.c' object='nm-inotify-helper.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-hostname-provider.obj `if test -f 'nm-hostname-provider.c'; then $(CYGPATH_W) 'nm-hostname-provider.c'; else $(CYGPATH_W) '$(srcdir)/nm-hostname-provider.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-inotify-helper.lo `test -f 'settings/nm-inotify-helper.c' || echo '$(srcdir)/'`settings/nm-inotify-helper.c
-NetworkManager-nm-ip4-config.o: nm-ip4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-ip4-config.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-ip4-config.Tpo -c -o NetworkManager-nm-ip4-config.o `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-ip4-config.Tpo $(DEPDIR)/NetworkManager-nm-ip4-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip4-config.c' object='NetworkManager-nm-ip4-config.o' libtool=no @AMDEPBACKSLASH@
+nm-secret-agent.lo: settings/nm-secret-agent.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-secret-agent.lo -MD -MP -MF $(DEPDIR)/nm-secret-agent.Tpo -c -o nm-secret-agent.lo `test -f 'settings/nm-secret-agent.c' || echo '$(srcdir)/'`settings/nm-secret-agent.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-secret-agent.Tpo $(DEPDIR)/nm-secret-agent.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-secret-agent.c' object='nm-secret-agent.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-ip4-config.o `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-secret-agent.lo `test -f 'settings/nm-secret-agent.c' || echo '$(srcdir)/'`settings/nm-secret-agent.c
-NetworkManager-nm-ip4-config.obj: nm-ip4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-ip4-config.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-ip4-config.Tpo -c -o NetworkManager-nm-ip4-config.obj `if test -f 'nm-ip4-config.c'; then $(CYGPATH_W) 'nm-ip4-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-ip4-config.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-ip4-config.Tpo $(DEPDIR)/NetworkManager-nm-ip4-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip4-config.c' object='NetworkManager-nm-ip4-config.obj' libtool=no @AMDEPBACKSLASH@
+nm-settings-connection.lo: settings/nm-settings-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-settings-connection.lo -MD -MP -MF $(DEPDIR)/nm-settings-connection.Tpo -c -o nm-settings-connection.lo `test -f 'settings/nm-settings-connection.c' || echo '$(srcdir)/'`settings/nm-settings-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-settings-connection.Tpo $(DEPDIR)/nm-settings-connection.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-settings-connection.c' object='nm-settings-connection.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-ip4-config.obj `if test -f 'nm-ip4-config.c'; then $(CYGPATH_W) 'nm-ip4-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-ip4-config.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-settings-connection.lo `test -f 'settings/nm-settings-connection.c' || echo '$(srcdir)/'`settings/nm-settings-connection.c
-NetworkManager-nm-ip6-config.o: nm-ip6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-ip6-config.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-ip6-config.Tpo -c -o NetworkManager-nm-ip6-config.o `test -f 'nm-ip6-config.c' || echo '$(srcdir)/'`nm-ip6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-ip6-config.Tpo $(DEPDIR)/NetworkManager-nm-ip6-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip6-config.c' object='NetworkManager-nm-ip6-config.o' libtool=no @AMDEPBACKSLASH@
+nm-settings-error.lo: settings/nm-settings-error.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-settings-error.lo -MD -MP -MF $(DEPDIR)/nm-settings-error.Tpo -c -o nm-settings-error.lo `test -f 'settings/nm-settings-error.c' || echo '$(srcdir)/'`settings/nm-settings-error.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-settings-error.Tpo $(DEPDIR)/nm-settings-error.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-settings-error.c' object='nm-settings-error.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-ip6-config.o `test -f 'nm-ip6-config.c' || echo '$(srcdir)/'`nm-ip6-config.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-settings-error.lo `test -f 'settings/nm-settings-error.c' || echo '$(srcdir)/'`settings/nm-settings-error.c
-NetworkManager-nm-ip6-config.obj: nm-ip6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-ip6-config.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-ip6-config.Tpo -c -o NetworkManager-nm-ip6-config.obj `if test -f 'nm-ip6-config.c'; then $(CYGPATH_W) 'nm-ip6-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-ip6-config.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-ip6-config.Tpo $(DEPDIR)/NetworkManager-nm-ip6-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip6-config.c' object='NetworkManager-nm-ip6-config.obj' libtool=no @AMDEPBACKSLASH@
+nm-settings-utils.lo: settings/nm-settings-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-settings-utils.lo -MD -MP -MF $(DEPDIR)/nm-settings-utils.Tpo -c -o nm-settings-utils.lo `test -f 'settings/nm-settings-utils.c' || echo '$(srcdir)/'`settings/nm-settings-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-settings-utils.Tpo $(DEPDIR)/nm-settings-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-settings-utils.c' object='nm-settings-utils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-ip6-config.obj `if test -f 'nm-ip6-config.c'; then $(CYGPATH_W) 'nm-ip6-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-ip6-config.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-settings-utils.lo `test -f 'settings/nm-settings-utils.c' || echo '$(srcdir)/'`settings/nm-settings-utils.c
-NetworkManager-nm-active-connection.o: nm-active-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-active-connection.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-active-connection.Tpo -c -o NetworkManager-nm-active-connection.o `test -f 'nm-active-connection.c' || echo '$(srcdir)/'`nm-active-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-active-connection.Tpo $(DEPDIR)/NetworkManager-nm-active-connection.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-active-connection.c' object='NetworkManager-nm-active-connection.o' libtool=no @AMDEPBACKSLASH@
+nm-settings.lo: settings/nm-settings.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-settings.lo -MD -MP -MF $(DEPDIR)/nm-settings.Tpo -c -o nm-settings.lo `test -f 'settings/nm-settings.c' || echo '$(srcdir)/'`settings/nm-settings.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-settings.Tpo $(DEPDIR)/nm-settings.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-settings.c' object='nm-settings.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-active-connection.o `test -f 'nm-active-connection.c' || echo '$(srcdir)/'`nm-active-connection.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-settings.lo `test -f 'settings/nm-settings.c' || echo '$(srcdir)/'`settings/nm-settings.c
-NetworkManager-nm-active-connection.obj: nm-active-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-active-connection.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-active-connection.Tpo -c -o NetworkManager-nm-active-connection.obj `if test -f 'nm-active-connection.c'; then $(CYGPATH_W) 'nm-active-connection.c'; else $(CYGPATH_W) '$(srcdir)/nm-active-connection.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-active-connection.Tpo $(DEPDIR)/NetworkManager-nm-active-connection.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-active-connection.c' object='NetworkManager-nm-active-connection.obj' libtool=no @AMDEPBACKSLASH@
+nm-system-config-interface.lo: settings/nm-system-config-interface.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-system-config-interface.lo -MD -MP -MF $(DEPDIR)/nm-system-config-interface.Tpo -c -o nm-system-config-interface.lo `test -f 'settings/nm-system-config-interface.c' || echo '$(srcdir)/'`settings/nm-system-config-interface.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-system-config-interface.Tpo $(DEPDIR)/nm-system-config-interface.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/nm-system-config-interface.c' object='nm-system-config-interface.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-active-connection.obj `if test -f 'nm-active-connection.c'; then $(CYGPATH_W) 'nm-active-connection.c'; else $(CYGPATH_W) '$(srcdir)/nm-active-connection.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-system-config-interface.lo `test -f 'settings/nm-system-config-interface.c' || echo '$(srcdir)/'`settings/nm-system-config-interface.c
-NetworkManager-nm-config.o: nm-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-config.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-config.Tpo -c -o NetworkManager-nm-config.o `test -f 'nm-config.c' || echo '$(srcdir)/'`nm-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-config.Tpo $(DEPDIR)/NetworkManager-nm-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-config.c' object='NetworkManager-nm-config.o' libtool=no @AMDEPBACKSLASH@
+errors.lo: settings/plugins/keyfile/errors.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT errors.lo -MD -MP -MF $(DEPDIR)/errors.Tpo -c -o errors.lo `test -f 'settings/plugins/keyfile/errors.c' || echo '$(srcdir)/'`settings/plugins/keyfile/errors.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/errors.Tpo $(DEPDIR)/errors.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/plugins/keyfile/errors.c' object='errors.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-config.o `test -f 'nm-config.c' || echo '$(srcdir)/'`nm-config.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o errors.lo `test -f 'settings/plugins/keyfile/errors.c' || echo '$(srcdir)/'`settings/plugins/keyfile/errors.c
-NetworkManager-nm-config.obj: nm-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-config.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-config.Tpo -c -o NetworkManager-nm-config.obj `if test -f 'nm-config.c'; then $(CYGPATH_W) 'nm-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-config.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-config.Tpo $(DEPDIR)/NetworkManager-nm-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-config.c' object='NetworkManager-nm-config.obj' libtool=no @AMDEPBACKSLASH@
+nm-keyfile-connection.lo: settings/plugins/keyfile/nm-keyfile-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-keyfile-connection.lo -MD -MP -MF $(DEPDIR)/nm-keyfile-connection.Tpo -c -o nm-keyfile-connection.lo `test -f 'settings/plugins/keyfile/nm-keyfile-connection.c' || echo '$(srcdir)/'`settings/plugins/keyfile/nm-keyfile-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-keyfile-connection.Tpo $(DEPDIR)/nm-keyfile-connection.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/plugins/keyfile/nm-keyfile-connection.c' object='nm-keyfile-connection.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-config.obj `if test -f 'nm-config.c'; then $(CYGPATH_W) 'nm-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-config.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-keyfile-connection.lo `test -f 'settings/plugins/keyfile/nm-keyfile-connection.c' || echo '$(srcdir)/'`settings/plugins/keyfile/nm-keyfile-connection.c
-NetworkManager-main.o: main.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-main.o -MD -MP -MF $(DEPDIR)/NetworkManager-main.Tpo -c -o NetworkManager-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-main.Tpo $(DEPDIR)/NetworkManager-main.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='NetworkManager-main.o' libtool=no @AMDEPBACKSLASH@
+plugin.lo: settings/plugins/keyfile/plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT plugin.lo -MD -MP -MF $(DEPDIR)/plugin.Tpo -c -o plugin.lo `test -f 'settings/plugins/keyfile/plugin.c' || echo '$(srcdir)/'`settings/plugins/keyfile/plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/plugin.Tpo $(DEPDIR)/plugin.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/plugins/keyfile/plugin.c' object='plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o plugin.lo `test -f 'settings/plugins/keyfile/plugin.c' || echo '$(srcdir)/'`settings/plugins/keyfile/plugin.c
-NetworkManager-main.obj: main.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-main.obj -MD -MP -MF $(DEPDIR)/NetworkManager-main.Tpo -c -o NetworkManager-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-main.Tpo $(DEPDIR)/NetworkManager-main.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='NetworkManager-main.obj' libtool=no @AMDEPBACKSLASH@
+reader.lo: settings/plugins/keyfile/reader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reader.lo -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.lo `test -f 'settings/plugins/keyfile/reader.c' || echo '$(srcdir)/'`settings/plugins/keyfile/reader.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/plugins/keyfile/reader.c' object='reader.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reader.lo `test -f 'settings/plugins/keyfile/reader.c' || echo '$(srcdir)/'`settings/plugins/keyfile/reader.c
-NetworkManager-nm-policy.o: nm-policy.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-policy.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-policy.Tpo -c -o NetworkManager-nm-policy.o `test -f 'nm-policy.c' || echo '$(srcdir)/'`nm-policy.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-policy.Tpo $(DEPDIR)/NetworkManager-nm-policy.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-policy.c' object='NetworkManager-nm-policy.o' libtool=no @AMDEPBACKSLASH@
+utils.lo: settings/plugins/keyfile/utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utils.lo -MD -MP -MF $(DEPDIR)/utils.Tpo -c -o utils.lo `test -f 'settings/plugins/keyfile/utils.c' || echo '$(srcdir)/'`settings/plugins/keyfile/utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/utils.Tpo $(DEPDIR)/utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/plugins/keyfile/utils.c' object='utils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-policy.o `test -f 'nm-policy.c' || echo '$(srcdir)/'`nm-policy.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.lo `test -f 'settings/plugins/keyfile/utils.c' || echo '$(srcdir)/'`settings/plugins/keyfile/utils.c
-NetworkManager-nm-policy.obj: nm-policy.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-policy.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-policy.Tpo -c -o NetworkManager-nm-policy.obj `if test -f 'nm-policy.c'; then $(CYGPATH_W) 'nm-policy.c'; else $(CYGPATH_W) '$(srcdir)/nm-policy.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-policy.Tpo $(DEPDIR)/NetworkManager-nm-policy.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-policy.c' object='NetworkManager-nm-policy.obj' libtool=no @AMDEPBACKSLASH@
+writer.lo: settings/plugins/keyfile/writer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT writer.lo -MD -MP -MF $(DEPDIR)/writer.Tpo -c -o writer.lo `test -f 'settings/plugins/keyfile/writer.c' || echo '$(srcdir)/'`settings/plugins/keyfile/writer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/writer.Tpo $(DEPDIR)/writer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='settings/plugins/keyfile/writer.c' object='writer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-policy.obj `if test -f 'nm-policy.c'; then $(CYGPATH_W) 'nm-policy.c'; else $(CYGPATH_W) '$(srcdir)/nm-policy.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o writer.lo `test -f 'settings/plugins/keyfile/writer.c' || echo '$(srcdir)/'`settings/plugins/keyfile/writer.c
-NetworkManager-nm-policy-hosts.o: nm-policy-hosts.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-policy-hosts.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-policy-hosts.Tpo -c -o NetworkManager-nm-policy-hosts.o `test -f 'nm-policy-hosts.c' || echo '$(srcdir)/'`nm-policy-hosts.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-policy-hosts.Tpo $(DEPDIR)/NetworkManager-nm-policy-hosts.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-policy-hosts.c' object='NetworkManager-nm-policy-hosts.o' libtool=no @AMDEPBACKSLASH@
+nm-supplicant-config.lo: supplicant-manager/nm-supplicant-config.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-supplicant-config.lo -MD -MP -MF $(DEPDIR)/nm-supplicant-config.Tpo -c -o nm-supplicant-config.lo `test -f 'supplicant-manager/nm-supplicant-config.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-config.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-supplicant-config.Tpo $(DEPDIR)/nm-supplicant-config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='supplicant-manager/nm-supplicant-config.c' object='nm-supplicant-config.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-policy-hosts.o `test -f 'nm-policy-hosts.c' || echo '$(srcdir)/'`nm-policy-hosts.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-supplicant-config.lo `test -f 'supplicant-manager/nm-supplicant-config.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-config.c
-NetworkManager-nm-policy-hosts.obj: nm-policy-hosts.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-policy-hosts.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-policy-hosts.Tpo -c -o NetworkManager-nm-policy-hosts.obj `if test -f 'nm-policy-hosts.c'; then $(CYGPATH_W) 'nm-policy-hosts.c'; else $(CYGPATH_W) '$(srcdir)/nm-policy-hosts.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-policy-hosts.Tpo $(DEPDIR)/NetworkManager-nm-policy-hosts.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-policy-hosts.c' object='NetworkManager-nm-policy-hosts.obj' libtool=no @AMDEPBACKSLASH@
+nm-supplicant-interface.lo: supplicant-manager/nm-supplicant-interface.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-supplicant-interface.lo -MD -MP -MF $(DEPDIR)/nm-supplicant-interface.Tpo -c -o nm-supplicant-interface.lo `test -f 'supplicant-manager/nm-supplicant-interface.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-interface.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-supplicant-interface.Tpo $(DEPDIR)/nm-supplicant-interface.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='supplicant-manager/nm-supplicant-interface.c' object='nm-supplicant-interface.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-policy-hosts.obj `if test -f 'nm-policy-hosts.c'; then $(CYGPATH_W) 'nm-policy-hosts.c'; else $(CYGPATH_W) '$(srcdir)/nm-policy-hosts.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-supplicant-interface.lo `test -f 'supplicant-manager/nm-supplicant-interface.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-interface.c
-NetworkManager-nm-policy-hostname.o: nm-policy-hostname.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-policy-hostname.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-policy-hostname.Tpo -c -o NetworkManager-nm-policy-hostname.o `test -f 'nm-policy-hostname.c' || echo '$(srcdir)/'`nm-policy-hostname.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-policy-hostname.Tpo $(DEPDIR)/NetworkManager-nm-policy-hostname.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-policy-hostname.c' object='NetworkManager-nm-policy-hostname.o' libtool=no @AMDEPBACKSLASH@
+nm-supplicant-manager.lo: supplicant-manager/nm-supplicant-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-supplicant-manager.lo -MD -MP -MF $(DEPDIR)/nm-supplicant-manager.Tpo -c -o nm-supplicant-manager.lo `test -f 'supplicant-manager/nm-supplicant-manager.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-supplicant-manager.Tpo $(DEPDIR)/nm-supplicant-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='supplicant-manager/nm-supplicant-manager.c' object='nm-supplicant-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-policy-hostname.o `test -f 'nm-policy-hostname.c' || echo '$(srcdir)/'`nm-policy-hostname.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-supplicant-manager.lo `test -f 'supplicant-manager/nm-supplicant-manager.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-manager.c
-NetworkManager-nm-policy-hostname.obj: nm-policy-hostname.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-policy-hostname.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-policy-hostname.Tpo -c -o NetworkManager-nm-policy-hostname.obj `if test -f 'nm-policy-hostname.c'; then $(CYGPATH_W) 'nm-policy-hostname.c'; else $(CYGPATH_W) '$(srcdir)/nm-policy-hostname.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-policy-hostname.Tpo $(DEPDIR)/NetworkManager-nm-policy-hostname.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-policy-hostname.c' object='NetworkManager-nm-policy-hostname.obj' libtool=no @AMDEPBACKSLASH@
+nm-supplicant-settings-verify.lo: supplicant-manager/nm-supplicant-settings-verify.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-supplicant-settings-verify.lo -MD -MP -MF $(DEPDIR)/nm-supplicant-settings-verify.Tpo -c -o nm-supplicant-settings-verify.lo `test -f 'supplicant-manager/nm-supplicant-settings-verify.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-settings-verify.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-supplicant-settings-verify.Tpo $(DEPDIR)/nm-supplicant-settings-verify.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='supplicant-manager/nm-supplicant-settings-verify.c' object='nm-supplicant-settings-verify.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-policy-hostname.obj `if test -f 'nm-policy-hostname.c'; then $(CYGPATH_W) 'nm-policy-hostname.c'; else $(CYGPATH_W) '$(srcdir)/nm-policy-hostname.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-supplicant-settings-verify.lo `test -f 'supplicant-manager/nm-supplicant-settings-verify.c' || echo '$(srcdir)/'`supplicant-manager/nm-supplicant-settings-verify.c
-NetworkManager-NetworkManagerUtils.o: NetworkManagerUtils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-NetworkManagerUtils.o -MD -MP -MF $(DEPDIR)/NetworkManager-NetworkManagerUtils.Tpo -c -o NetworkManager-NetworkManagerUtils.o `test -f 'NetworkManagerUtils.c' || echo '$(srcdir)/'`NetworkManagerUtils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-NetworkManagerUtils.Tpo $(DEPDIR)/NetworkManager-NetworkManagerUtils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='NetworkManagerUtils.c' object='NetworkManager-NetworkManagerUtils.o' libtool=no @AMDEPBACKSLASH@
+nm-call-store.lo: supplicant-manager/nm-call-store.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-call-store.lo -MD -MP -MF $(DEPDIR)/nm-call-store.Tpo -c -o nm-call-store.lo `test -f 'supplicant-manager/nm-call-store.c' || echo '$(srcdir)/'`supplicant-manager/nm-call-store.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-call-store.Tpo $(DEPDIR)/nm-call-store.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='supplicant-manager/nm-call-store.c' object='nm-call-store.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-NetworkManagerUtils.o `test -f 'NetworkManagerUtils.c' || echo '$(srcdir)/'`NetworkManagerUtils.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-call-store.lo `test -f 'supplicant-manager/nm-call-store.c' || echo '$(srcdir)/'`supplicant-manager/nm-call-store.c
-NetworkManager-NetworkManagerUtils.obj: NetworkManagerUtils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-NetworkManagerUtils.obj -MD -MP -MF $(DEPDIR)/NetworkManager-NetworkManagerUtils.Tpo -c -o NetworkManager-NetworkManagerUtils.obj `if test -f 'NetworkManagerUtils.c'; then $(CYGPATH_W) 'NetworkManagerUtils.c'; else $(CYGPATH_W) '$(srcdir)/NetworkManagerUtils.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-NetworkManagerUtils.Tpo $(DEPDIR)/NetworkManager-NetworkManagerUtils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='NetworkManagerUtils.c' object='NetworkManager-NetworkManagerUtils.obj' libtool=no @AMDEPBACKSLASH@
+nm-vpn-connection.lo: vpn-manager/nm-vpn-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-vpn-connection.lo -MD -MP -MF $(DEPDIR)/nm-vpn-connection.Tpo -c -o nm-vpn-connection.lo `test -f 'vpn-manager/nm-vpn-connection.c' || echo '$(srcdir)/'`vpn-manager/nm-vpn-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-vpn-connection.Tpo $(DEPDIR)/nm-vpn-connection.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vpn-manager/nm-vpn-connection.c' object='nm-vpn-connection.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-NetworkManagerUtils.obj `if test -f 'NetworkManagerUtils.c'; then $(CYGPATH_W) 'NetworkManagerUtils.c'; else $(CYGPATH_W) '$(srcdir)/NetworkManagerUtils.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-vpn-connection.lo `test -f 'vpn-manager/nm-vpn-connection.c' || echo '$(srcdir)/'`vpn-manager/nm-vpn-connection.c
-NetworkManager-nm-system.o: nm-system.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-system.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-system.Tpo -c -o NetworkManager-nm-system.o `test -f 'nm-system.c' || echo '$(srcdir)/'`nm-system.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-system.Tpo $(DEPDIR)/NetworkManager-nm-system.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-system.c' object='NetworkManager-nm-system.o' libtool=no @AMDEPBACKSLASH@
+nm-vpn-manager.lo: vpn-manager/nm-vpn-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-vpn-manager.lo -MD -MP -MF $(DEPDIR)/nm-vpn-manager.Tpo -c -o nm-vpn-manager.lo `test -f 'vpn-manager/nm-vpn-manager.c' || echo '$(srcdir)/'`vpn-manager/nm-vpn-manager.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-vpn-manager.Tpo $(DEPDIR)/nm-vpn-manager.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vpn-manager/nm-vpn-manager.c' object='nm-vpn-manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-system.o `test -f 'nm-system.c' || echo '$(srcdir)/'`nm-system.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-vpn-manager.lo `test -f 'vpn-manager/nm-vpn-manager.c' || echo '$(srcdir)/'`vpn-manager/nm-vpn-manager.c
-NetworkManager-nm-system.obj: nm-system.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-system.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-system.Tpo -c -o NetworkManager-nm-system.obj `if test -f 'nm-system.c'; then $(CYGPATH_W) 'nm-system.c'; else $(CYGPATH_W) '$(srcdir)/nm-system.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-system.Tpo $(DEPDIR)/NetworkManager-nm-system.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-system.c' object='NetworkManager-nm-system.obj' libtool=no @AMDEPBACKSLASH@
+nm-vpn-service.lo: vpn-manager/nm-vpn-service.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-vpn-service.lo -MD -MP -MF $(DEPDIR)/nm-vpn-service.Tpo -c -o nm-vpn-service.lo `test -f 'vpn-manager/nm-vpn-service.c' || echo '$(srcdir)/'`vpn-manager/nm-vpn-service.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-vpn-service.Tpo $(DEPDIR)/nm-vpn-service.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vpn-manager/nm-vpn-service.c' object='nm-vpn-service.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-system.obj `if test -f 'nm-system.c'; then $(CYGPATH_W) 'nm-system.c'; else $(CYGPATH_W) '$(srcdir)/nm-system.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-vpn-service.lo `test -f 'vpn-manager/nm-vpn-service.c' || echo '$(srcdir)/'`vpn-manager/nm-vpn-service.c
-NetworkManager-nm-manager.o: nm-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-manager.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-manager.Tpo -c -o NetworkManager-nm-manager.o `test -f 'nm-manager.c' || echo '$(srcdir)/'`nm-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-manager.Tpo $(DEPDIR)/NetworkManager-nm-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-manager.c' object='NetworkManager-nm-manager.o' libtool=no @AMDEPBACKSLASH@
+wifi-utils-wext.lo: platform/wifi/wifi-utils-wext.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT wifi-utils-wext.lo -MD -MP -MF $(DEPDIR)/wifi-utils-wext.Tpo -c -o wifi-utils-wext.lo `test -f 'platform/wifi/wifi-utils-wext.c' || echo '$(srcdir)/'`platform/wifi/wifi-utils-wext.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wifi-utils-wext.Tpo $(DEPDIR)/wifi-utils-wext.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='platform/wifi/wifi-utils-wext.c' object='wifi-utils-wext.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-manager.o `test -f 'nm-manager.c' || echo '$(srcdir)/'`nm-manager.c
-
-NetworkManager-nm-manager.obj: nm-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-manager.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-manager.Tpo -c -o NetworkManager-nm-manager.obj `if test -f 'nm-manager.c'; then $(CYGPATH_W) 'nm-manager.c'; else $(CYGPATH_W) '$(srcdir)/nm-manager.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-manager.Tpo $(DEPDIR)/NetworkManager-nm-manager.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-manager.c' object='NetworkManager-nm-manager.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-manager.obj `if test -f 'nm-manager.c'; then $(CYGPATH_W) 'nm-manager.c'; else $(CYGPATH_W) '$(srcdir)/nm-manager.c'; fi`
-
-NetworkManager-nm-manager-auth.o: nm-manager-auth.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-manager-auth.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-manager-auth.Tpo -c -o NetworkManager-nm-manager-auth.o `test -f 'nm-manager-auth.c' || echo '$(srcdir)/'`nm-manager-auth.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-manager-auth.Tpo $(DEPDIR)/NetworkManager-nm-manager-auth.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-manager-auth.c' object='NetworkManager-nm-manager-auth.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-manager-auth.o `test -f 'nm-manager-auth.c' || echo '$(srcdir)/'`nm-manager-auth.c
-
-NetworkManager-nm-manager-auth.obj: nm-manager-auth.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-manager-auth.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-manager-auth.Tpo -c -o NetworkManager-nm-manager-auth.obj `if test -f 'nm-manager-auth.c'; then $(CYGPATH_W) 'nm-manager-auth.c'; else $(CYGPATH_W) '$(srcdir)/nm-manager-auth.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-manager-auth.Tpo $(DEPDIR)/NetworkManager-nm-manager-auth.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-manager-auth.c' object='NetworkManager-nm-manager-auth.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-manager-auth.obj `if test -f 'nm-manager-auth.c'; then $(CYGPATH_W) 'nm-manager-auth.c'; else $(CYGPATH_W) '$(srcdir)/nm-manager-auth.c'; fi`
-
-NetworkManager-nm-netlink-monitor.o: nm-netlink-monitor.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-monitor.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-monitor.Tpo -c -o NetworkManager-nm-netlink-monitor.o `test -f 'nm-netlink-monitor.c' || echo '$(srcdir)/'`nm-netlink-monitor.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-monitor.Tpo $(DEPDIR)/NetworkManager-nm-netlink-monitor.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-netlink-monitor.c' object='NetworkManager-nm-netlink-monitor.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-monitor.o `test -f 'nm-netlink-monitor.c' || echo '$(srcdir)/'`nm-netlink-monitor.c
-
-NetworkManager-nm-netlink-monitor.obj: nm-netlink-monitor.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-monitor.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-monitor.Tpo -c -o NetworkManager-nm-netlink-monitor.obj `if test -f 'nm-netlink-monitor.c'; then $(CYGPATH_W) 'nm-netlink-monitor.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-monitor.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-monitor.Tpo $(DEPDIR)/NetworkManager-nm-netlink-monitor.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-netlink-monitor.c' object='NetworkManager-nm-netlink-monitor.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-monitor.obj `if test -f 'nm-netlink-monitor.c'; then $(CYGPATH_W) 'nm-netlink-monitor.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-monitor.c'; fi`
-
-NetworkManager-nm-netlink-utils.o: nm-netlink-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-utils.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo -c -o NetworkManager-nm-netlink-utils.o `test -f 'nm-netlink-utils.c' || echo '$(srcdir)/'`nm-netlink-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo $(DEPDIR)/NetworkManager-nm-netlink-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-netlink-utils.c' object='NetworkManager-nm-netlink-utils.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-utils.o `test -f 'nm-netlink-utils.c' || echo '$(srcdir)/'`nm-netlink-utils.c
-
-NetworkManager-nm-netlink-utils.obj: nm-netlink-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-utils.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo -c -o NetworkManager-nm-netlink-utils.obj `if test -f 'nm-netlink-utils.c'; then $(CYGPATH_W) 'nm-netlink-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-utils.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo $(DEPDIR)/NetworkManager-nm-netlink-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-netlink-utils.c' object='NetworkManager-nm-netlink-utils.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-utils.obj `if test -f 'nm-netlink-utils.c'; then $(CYGPATH_W) 'nm-netlink-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-utils.c'; fi`
-
-NetworkManager-nm-netlink-compat.o: nm-netlink-compat.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-compat.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo -c -o NetworkManager-nm-netlink-compat.o `test -f 'nm-netlink-compat.c' || echo '$(srcdir)/'`nm-netlink-compat.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo $(DEPDIR)/NetworkManager-nm-netlink-compat.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-netlink-compat.c' object='NetworkManager-nm-netlink-compat.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-compat.o `test -f 'nm-netlink-compat.c' || echo '$(srcdir)/'`nm-netlink-compat.c
-
-NetworkManager-nm-netlink-compat.obj: nm-netlink-compat.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-compat.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo -c -o NetworkManager-nm-netlink-compat.obj `if test -f 'nm-netlink-compat.c'; then $(CYGPATH_W) 'nm-netlink-compat.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-compat.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo $(DEPDIR)/NetworkManager-nm-netlink-compat.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-netlink-compat.c' object='NetworkManager-nm-netlink-compat.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-compat.obj `if test -f 'nm-netlink-compat.c'; then $(CYGPATH_W) 'nm-netlink-compat.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-compat.c'; fi`
-
-NetworkManager-nm-activation-request.o: nm-activation-request.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-activation-request.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-activation-request.Tpo -c -o NetworkManager-nm-activation-request.o `test -f 'nm-activation-request.c' || echo '$(srcdir)/'`nm-activation-request.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-activation-request.Tpo $(DEPDIR)/NetworkManager-nm-activation-request.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-activation-request.c' object='NetworkManager-nm-activation-request.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-activation-request.o `test -f 'nm-activation-request.c' || echo '$(srcdir)/'`nm-activation-request.c
-
-NetworkManager-nm-activation-request.obj: nm-activation-request.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-activation-request.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-activation-request.Tpo -c -o NetworkManager-nm-activation-request.obj `if test -f 'nm-activation-request.c'; then $(CYGPATH_W) 'nm-activation-request.c'; else $(CYGPATH_W) '$(srcdir)/nm-activation-request.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-activation-request.Tpo $(DEPDIR)/NetworkManager-nm-activation-request.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-activation-request.c' object='NetworkManager-nm-activation-request.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-activation-request.obj `if test -f 'nm-activation-request.c'; then $(CYGPATH_W) 'nm-activation-request.c'; else $(CYGPATH_W) '$(srcdir)/nm-activation-request.c'; fi`
-
-NetworkManager-nm-properties-changed-signal.o: nm-properties-changed-signal.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-properties-changed-signal.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-properties-changed-signal.Tpo -c -o NetworkManager-nm-properties-changed-signal.o `test -f 'nm-properties-changed-signal.c' || echo '$(srcdir)/'`nm-properties-changed-signal.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-properties-changed-signal.Tpo $(DEPDIR)/NetworkManager-nm-properties-changed-signal.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-properties-changed-signal.c' object='NetworkManager-nm-properties-changed-signal.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-properties-changed-signal.o `test -f 'nm-properties-changed-signal.c' || echo '$(srcdir)/'`nm-properties-changed-signal.c
-
-NetworkManager-nm-properties-changed-signal.obj: nm-properties-changed-signal.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-properties-changed-signal.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-properties-changed-signal.Tpo -c -o NetworkManager-nm-properties-changed-signal.obj `if test -f 'nm-properties-changed-signal.c'; then $(CYGPATH_W) 'nm-properties-changed-signal.c'; else $(CYGPATH_W) '$(srcdir)/nm-properties-changed-signal.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-properties-changed-signal.Tpo $(DEPDIR)/NetworkManager-nm-properties-changed-signal.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-properties-changed-signal.c' object='NetworkManager-nm-properties-changed-signal.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-properties-changed-signal.obj `if test -f 'nm-properties-changed-signal.c'; then $(CYGPATH_W) 'nm-properties-changed-signal.c'; else $(CYGPATH_W) '$(srcdir)/nm-properties-changed-signal.c'; fi`
-
-NetworkManager-nm-dhcp4-config.o: nm-dhcp4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dhcp4-config.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dhcp4-config.Tpo -c -o NetworkManager-nm-dhcp4-config.o `test -f 'nm-dhcp4-config.c' || echo '$(srcdir)/'`nm-dhcp4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dhcp4-config.Tpo $(DEPDIR)/NetworkManager-nm-dhcp4-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp4-config.c' object='NetworkManager-nm-dhcp4-config.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dhcp4-config.o `test -f 'nm-dhcp4-config.c' || echo '$(srcdir)/'`nm-dhcp4-config.c
-
-NetworkManager-nm-dhcp4-config.obj: nm-dhcp4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dhcp4-config.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dhcp4-config.Tpo -c -o NetworkManager-nm-dhcp4-config.obj `if test -f 'nm-dhcp4-config.c'; then $(CYGPATH_W) 'nm-dhcp4-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp4-config.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dhcp4-config.Tpo $(DEPDIR)/NetworkManager-nm-dhcp4-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp4-config.c' object='NetworkManager-nm-dhcp4-config.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dhcp4-config.obj `if test -f 'nm-dhcp4-config.c'; then $(CYGPATH_W) 'nm-dhcp4-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp4-config.c'; fi`
-
-NetworkManager-nm-dhcp6-config.o: nm-dhcp6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dhcp6-config.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dhcp6-config.Tpo -c -o NetworkManager-nm-dhcp6-config.o `test -f 'nm-dhcp6-config.c' || echo '$(srcdir)/'`nm-dhcp6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dhcp6-config.Tpo $(DEPDIR)/NetworkManager-nm-dhcp6-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp6-config.c' object='NetworkManager-nm-dhcp6-config.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dhcp6-config.o `test -f 'nm-dhcp6-config.c' || echo '$(srcdir)/'`nm-dhcp6-config.c
-
-NetworkManager-nm-dhcp6-config.obj: nm-dhcp6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dhcp6-config.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dhcp6-config.Tpo -c -o NetworkManager-nm-dhcp6-config.obj `if test -f 'nm-dhcp6-config.c'; then $(CYGPATH_W) 'nm-dhcp6-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp6-config.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dhcp6-config.Tpo $(DEPDIR)/NetworkManager-nm-dhcp6-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp6-config.c' object='NetworkManager-nm-dhcp6-config.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dhcp6-config.obj `if test -f 'nm-dhcp6-config.c'; then $(CYGPATH_W) 'nm-dhcp6-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp6-config.c'; fi`
-
-NetworkManager-nm-session-utils.o: nm-session-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-utils.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-utils.Tpo -c -o NetworkManager-nm-session-utils.o `test -f 'nm-session-utils.c' || echo '$(srcdir)/'`nm-session-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-utils.Tpo $(DEPDIR)/NetworkManager-nm-session-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-utils.c' object='NetworkManager-nm-session-utils.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-utils.o `test -f 'nm-session-utils.c' || echo '$(srcdir)/'`nm-session-utils.c
-
-NetworkManager-nm-session-utils.obj: nm-session-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-utils.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-utils.Tpo -c -o NetworkManager-nm-session-utils.obj `if test -f 'nm-session-utils.c'; then $(CYGPATH_W) 'nm-session-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-utils.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-utils.Tpo $(DEPDIR)/NetworkManager-nm-session-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-utils.c' object='NetworkManager-nm-session-utils.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-utils.obj `if test -f 'nm-session-utils.c'; then $(CYGPATH_W) 'nm-session-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-utils.c'; fi`
-
-NetworkManager-nm-connection-provider.o: nm-connection-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-connection-provider.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-connection-provider.Tpo -c -o NetworkManager-nm-connection-provider.o `test -f 'nm-connection-provider.c' || echo '$(srcdir)/'`nm-connection-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-connection-provider.Tpo $(DEPDIR)/NetworkManager-nm-connection-provider.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-connection-provider.c' object='NetworkManager-nm-connection-provider.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-connection-provider.o `test -f 'nm-connection-provider.c' || echo '$(srcdir)/'`nm-connection-provider.c
-
-NetworkManager-nm-connection-provider.obj: nm-connection-provider.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-connection-provider.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-connection-provider.Tpo -c -o NetworkManager-nm-connection-provider.obj `if test -f 'nm-connection-provider.c'; then $(CYGPATH_W) 'nm-connection-provider.c'; else $(CYGPATH_W) '$(srcdir)/nm-connection-provider.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-connection-provider.Tpo $(DEPDIR)/NetworkManager-nm-connection-provider.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-connection-provider.c' object='NetworkManager-nm-connection-provider.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-connection-provider.obj `if test -f 'nm-connection-provider.c'; then $(CYGPATH_W) 'nm-connection-provider.c'; else $(CYGPATH_W) '$(srcdir)/nm-connection-provider.c'; fi`
-
-NetworkManager-nm-dispatcher.o: nm-dispatcher.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dispatcher.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dispatcher.Tpo -c -o NetworkManager-nm-dispatcher.o `test -f 'nm-dispatcher.c' || echo '$(srcdir)/'`nm-dispatcher.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dispatcher.Tpo $(DEPDIR)/NetworkManager-nm-dispatcher.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dispatcher.c' object='NetworkManager-nm-dispatcher.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dispatcher.o `test -f 'nm-dispatcher.c' || echo '$(srcdir)/'`nm-dispatcher.c
-
-NetworkManager-nm-dispatcher.obj: nm-dispatcher.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-dispatcher.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-dispatcher.Tpo -c -o NetworkManager-nm-dispatcher.obj `if test -f 'nm-dispatcher.c'; then $(CYGPATH_W) 'nm-dispatcher.c'; else $(CYGPATH_W) '$(srcdir)/nm-dispatcher.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-dispatcher.Tpo $(DEPDIR)/NetworkManager-nm-dispatcher.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dispatcher.c' object='NetworkManager-nm-dispatcher.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-dispatcher.obj `if test -f 'nm-dispatcher.c'; then $(CYGPATH_W) 'nm-dispatcher.c'; else $(CYGPATH_W) '$(srcdir)/nm-dispatcher.c'; fi`
-
-NetworkManager-nm-connectivity.o: nm-connectivity.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-connectivity.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-connectivity.Tpo -c -o NetworkManager-nm-connectivity.o `test -f 'nm-connectivity.c' || echo '$(srcdir)/'`nm-connectivity.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-connectivity.Tpo $(DEPDIR)/NetworkManager-nm-connectivity.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-connectivity.c' object='NetworkManager-nm-connectivity.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-connectivity.o `test -f 'nm-connectivity.c' || echo '$(srcdir)/'`nm-connectivity.c
-
-NetworkManager-nm-connectivity.obj: nm-connectivity.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-connectivity.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-connectivity.Tpo -c -o NetworkManager-nm-connectivity.obj `if test -f 'nm-connectivity.c'; then $(CYGPATH_W) 'nm-connectivity.c'; else $(CYGPATH_W) '$(srcdir)/nm-connectivity.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-connectivity.Tpo $(DEPDIR)/NetworkManager-nm-connectivity.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-connectivity.c' object='NetworkManager-nm-connectivity.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-connectivity.obj `if test -f 'nm-connectivity.c'; then $(CYGPATH_W) 'nm-connectivity.c'; else $(CYGPATH_W) '$(srcdir)/nm-connectivity.c'; fi`
-
-NetworkManager-nm-session-monitor-systemd.o: nm-session-monitor-systemd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-monitor-systemd.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-monitor-systemd.Tpo -c -o NetworkManager-nm-session-monitor-systemd.o `test -f 'nm-session-monitor-systemd.c' || echo '$(srcdir)/'`nm-session-monitor-systemd.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-monitor-systemd.Tpo $(DEPDIR)/NetworkManager-nm-session-monitor-systemd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-monitor-systemd.c' object='NetworkManager-nm-session-monitor-systemd.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-monitor-systemd.o `test -f 'nm-session-monitor-systemd.c' || echo '$(srcdir)/'`nm-session-monitor-systemd.c
-
-NetworkManager-nm-session-monitor-systemd.obj: nm-session-monitor-systemd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-monitor-systemd.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-monitor-systemd.Tpo -c -o NetworkManager-nm-session-monitor-systemd.obj `if test -f 'nm-session-monitor-systemd.c'; then $(CYGPATH_W) 'nm-session-monitor-systemd.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-monitor-systemd.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-monitor-systemd.Tpo $(DEPDIR)/NetworkManager-nm-session-monitor-systemd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-monitor-systemd.c' object='NetworkManager-nm-session-monitor-systemd.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-monitor-systemd.obj `if test -f 'nm-session-monitor-systemd.c'; then $(CYGPATH_W) 'nm-session-monitor-systemd.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-monitor-systemd.c'; fi`
-
-NetworkManager-nm-session-monitor-ck.o: nm-session-monitor-ck.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-monitor-ck.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-monitor-ck.Tpo -c -o NetworkManager-nm-session-monitor-ck.o `test -f 'nm-session-monitor-ck.c' || echo '$(srcdir)/'`nm-session-monitor-ck.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-monitor-ck.Tpo $(DEPDIR)/NetworkManager-nm-session-monitor-ck.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-monitor-ck.c' object='NetworkManager-nm-session-monitor-ck.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-monitor-ck.o `test -f 'nm-session-monitor-ck.c' || echo '$(srcdir)/'`nm-session-monitor-ck.c
-
-NetworkManager-nm-session-monitor-ck.obj: nm-session-monitor-ck.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-monitor-ck.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-monitor-ck.Tpo -c -o NetworkManager-nm-session-monitor-ck.obj `if test -f 'nm-session-monitor-ck.c'; then $(CYGPATH_W) 'nm-session-monitor-ck.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-monitor-ck.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-monitor-ck.Tpo $(DEPDIR)/NetworkManager-nm-session-monitor-ck.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-monitor-ck.c' object='NetworkManager-nm-session-monitor-ck.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-monitor-ck.obj `if test -f 'nm-session-monitor-ck.c'; then $(CYGPATH_W) 'nm-session-monitor-ck.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-monitor-ck.c'; fi`
-
-NetworkManager-nm-session-monitor-null.o: nm-session-monitor-null.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-monitor-null.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-monitor-null.Tpo -c -o NetworkManager-nm-session-monitor-null.o `test -f 'nm-session-monitor-null.c' || echo '$(srcdir)/'`nm-session-monitor-null.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-monitor-null.Tpo $(DEPDIR)/NetworkManager-nm-session-monitor-null.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-monitor-null.c' object='NetworkManager-nm-session-monitor-null.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-monitor-null.o `test -f 'nm-session-monitor-null.c' || echo '$(srcdir)/'`nm-session-monitor-null.c
-
-NetworkManager-nm-session-monitor-null.obj: nm-session-monitor-null.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-session-monitor-null.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-session-monitor-null.Tpo -c -o NetworkManager-nm-session-monitor-null.obj `if test -f 'nm-session-monitor-null.c'; then $(CYGPATH_W) 'nm-session-monitor-null.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-monitor-null.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-session-monitor-null.Tpo $(DEPDIR)/NetworkManager-nm-session-monitor-null.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-session-monitor-null.c' object='NetworkManager-nm-session-monitor-null.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-session-monitor-null.obj `if test -f 'nm-session-monitor-null.c'; then $(CYGPATH_W) 'nm-session-monitor-null.c'; else $(CYGPATH_W) '$(srcdir)/nm-session-monitor-null.c'; fi`
-
-NetworkManager-nm-sleep-monitor-systemd.o: nm-sleep-monitor-systemd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-sleep-monitor-systemd.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-sleep-monitor-systemd.Tpo -c -o NetworkManager-nm-sleep-monitor-systemd.o `test -f 'nm-sleep-monitor-systemd.c' || echo '$(srcdir)/'`nm-sleep-monitor-systemd.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-sleep-monitor-systemd.Tpo $(DEPDIR)/NetworkManager-nm-sleep-monitor-systemd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-sleep-monitor-systemd.c' object='NetworkManager-nm-sleep-monitor-systemd.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-sleep-monitor-systemd.o `test -f 'nm-sleep-monitor-systemd.c' || echo '$(srcdir)/'`nm-sleep-monitor-systemd.c
-
-NetworkManager-nm-sleep-monitor-systemd.obj: nm-sleep-monitor-systemd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-sleep-monitor-systemd.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-sleep-monitor-systemd.Tpo -c -o NetworkManager-nm-sleep-monitor-systemd.obj `if test -f 'nm-sleep-monitor-systemd.c'; then $(CYGPATH_W) 'nm-sleep-monitor-systemd.c'; else $(CYGPATH_W) '$(srcdir)/nm-sleep-monitor-systemd.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-sleep-monitor-systemd.Tpo $(DEPDIR)/NetworkManager-nm-sleep-monitor-systemd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-sleep-monitor-systemd.c' object='NetworkManager-nm-sleep-monitor-systemd.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-sleep-monitor-systemd.obj `if test -f 'nm-sleep-monitor-systemd.c'; then $(CYGPATH_W) 'nm-sleep-monitor-systemd.c'; else $(CYGPATH_W) '$(srcdir)/nm-sleep-monitor-systemd.c'; fi`
-
-NetworkManager-nm-sleep-monitor-upower.o: nm-sleep-monitor-upower.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-sleep-monitor-upower.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-sleep-monitor-upower.Tpo -c -o NetworkManager-nm-sleep-monitor-upower.o `test -f 'nm-sleep-monitor-upower.c' || echo '$(srcdir)/'`nm-sleep-monitor-upower.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-sleep-monitor-upower.Tpo $(DEPDIR)/NetworkManager-nm-sleep-monitor-upower.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-sleep-monitor-upower.c' object='NetworkManager-nm-sleep-monitor-upower.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-sleep-monitor-upower.o `test -f 'nm-sleep-monitor-upower.c' || echo '$(srcdir)/'`nm-sleep-monitor-upower.c
-
-NetworkManager-nm-sleep-monitor-upower.obj: nm-sleep-monitor-upower.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-sleep-monitor-upower.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-sleep-monitor-upower.Tpo -c -o NetworkManager-nm-sleep-monitor-upower.obj `if test -f 'nm-sleep-monitor-upower.c'; then $(CYGPATH_W) 'nm-sleep-monitor-upower.c'; else $(CYGPATH_W) '$(srcdir)/nm-sleep-monitor-upower.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-sleep-monitor-upower.Tpo $(DEPDIR)/NetworkManager-nm-sleep-monitor-upower.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-sleep-monitor-upower.c' object='NetworkManager-nm-sleep-monitor-upower.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-sleep-monitor-upower.obj `if test -f 'nm-sleep-monitor-upower.c'; then $(CYGPATH_W) 'nm-sleep-monitor-upower.c'; else $(CYGPATH_W) '$(srcdir)/nm-sleep-monitor-upower.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o wifi-utils-wext.lo `test -f 'platform/wifi/wifi-utils-wext.c' || echo '$(srcdir)/'`platform/wifi/wifi-utils-wext.c
mostlyclean-libtool:
-rm -f *.lo
@@ -2009,60 +1870,12 @@ uninstall-am: uninstall-dbusserviceDATA uninstall-sbinPROGRAMS
tags tags-am uninstall uninstall-am uninstall-dbusserviceDATA \
uninstall-sbinPROGRAMS
+include $(GLIB_MAKEFILE)
-nm-access-point-glue.h: $(top_srcdir)/introspection/nm-access-point.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_access_point --mode=glib-server --output=$@ $<
-
-nm-manager-glue.h: $(top_srcdir)/introspection/nm-manager.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_manager --mode=glib-server --output=$@ $<
-
-nm-device-interface-glue.h: $(top_srcdir)/introspection/nm-device.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_interface --mode=glib-server --output=$@ $<
-
-nm-device-ethernet-glue.h: $(top_srcdir)/introspection/nm-device-ethernet.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_ethernet --mode=glib-server --output=$@ $<
-
-nm-device-infiniband-glue.h: $(top_srcdir)/introspection/nm-device-infiniband.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_infiniband --mode=glib-server --output=$@ $<
-
-nm-device-adsl-glue.h: $(top_srcdir)/introspection/nm-device-adsl.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_adsl --mode=glib-server --output=$@ $<
-
-nm-device-wifi-glue.h: $(top_srcdir)/introspection/nm-device-wifi.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_wifi --mode=glib-server --output=$@ $<
-
-nm-device-bt-glue.h: $(top_srcdir)/introspection/nm-device-bt.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bt --mode=glib-server --output=$@ $<
-
-nm-device-olpc-mesh-glue.h: $(top_srcdir)/introspection/nm-device-olpc-mesh.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_olpc_mesh --mode=glib-server --output=$@ $<
-
-nm-device-bond-glue.h: $(top_srcdir)/introspection/nm-device-bond.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bond --mode=glib-server --output=$@ $<
-
-nm-device-bridge-glue.h: $(top_srcdir)/introspection/nm-device-bridge.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bridge --mode=glib-server --output=$@ $<
-
-nm-device-vlan-glue.h: $(top_srcdir)/introspection/nm-device-vlan.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_vlan --mode=glib-server --output=$@ $<
-
-nm-ip4-config-glue.h: $(top_srcdir)/introspection/nm-ip4-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip4_config --mode=glib-server --output=$@ $<
-
-nm-ip6-config-glue.h: $(top_srcdir)/introspection/nm-ip6-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip6_config --mode=glib-server --output=$@ $<
-
-nm-active-connection-glue.h: $(top_srcdir)/introspection/nm-active-connection.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_active_connection --mode=glib-server --output=$@ $<
-
-nm-dhcp4-config-glue.h: $(top_srcdir)/introspection/nm-dhcp4-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp4_config --mode=glib-server --output=$@ $<
-
-nm-dhcp6-config-glue.h: $(top_srcdir)/introspection/nm-dhcp6-config.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-server --output=$@ $<
+@GNOME_CODE_COVERAGE_RULES@
-nm-device-modem-glue.h: $(top_srcdir)/introspection/nm-device-modem.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_modem --mode=glib-server --output=$@ $<
+%-glue.h: $(top_srcdir)/introspection/%.xml
+ $(AM_V_GEN) dbus-binding-tool --prefix=$(subst -,_,$(subst -glue.h,,$@)) --mode=glib-server --output=$@ $<
install-data-hook:
$(mkinstalldirs) -m 0700 $(DESTDIR)$(rundir)
$(mkinstalldirs) -m 0700 $(DESTDIR)$(statedir)
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 2f369d684..0aaa344f9 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -25,6 +25,7 @@
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
+#include <resolv.h>
#include "NetworkManagerUtils.h"
#include "nm-utils.h"
@@ -74,6 +75,50 @@ nm_ethernet_address_is_valid (const struct ether_addr *test_addr)
}
+/* nm_utils_ip4_address_clear_host_address:
+ * @addr: source ip6 address
+ * @plen: prefix length of network
+ *
+ * returns: the input address, with the host address set to 0.
+ */
+in_addr_t
+nm_utils_ip4_address_clear_host_address (in_addr_t addr, guint8 plen)
+{
+ return addr & nm_utils_ip4_prefix_to_netmask (plen);
+}
+
+/* nm_utils_ip6_address_clear_host_address:
+ * @dst: destination output buffer, will contain the network part of the @src address
+ * @src: source ip6 address
+ * @plen: prefix length of network
+ *
+ * Note: this function is self assignment save, to update @src inplace, set both
+ * @dst and @src to the same destination.
+ */
+void
+nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_addr *src, guint8 plen)
+{
+ g_return_if_fail (plen <= 128);
+ g_return_if_fail (src);
+ g_return_if_fail (dst);
+
+ if (plen < 128) {
+ guint nbytes = plen / 8;
+ guint nbits = plen % 8;
+
+ if (nbytes && dst != src)
+ memcpy (dst, src, nbytes);
+ if (nbits) {
+ dst->s6_addr[nbytes] = (src->s6_addr[nbytes] & (0xFF << (8 - nbits)));
+ nbytes++;
+ }
+ if (nbytes <= 15)
+ memset (&dst->s6_addr[nbytes], 0, 16 - nbytes);
+ } else if (src != dst)
+ *dst = *src;
+}
+
+
int
nm_spawn_process (const char *args)
{
@@ -99,240 +144,45 @@ nm_spawn_process (const char *args)
return status;
}
-void
-nm_utils_merge_ip4_config (NMIP4Config *ip4_config, NMSettingIP4Config *setting)
-{
- int i, j;
- gboolean setting_never_default;
-
- if (!setting)
- return; /* Defaults are just fine */
-
- if (nm_setting_ip4_config_get_ignore_auto_dns (setting)) {
- nm_ip4_config_reset_nameservers (ip4_config);
- nm_ip4_config_reset_domains (ip4_config);
- nm_ip4_config_reset_searches (ip4_config);
- }
-
- if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
- nm_ip4_config_reset_routes (ip4_config);
-
- for (i = 0; i < nm_setting_ip4_config_get_num_dns (setting); i++) {
- guint32 ns;
- gboolean found = FALSE;
-
- /* Avoid dupes */
- ns = nm_setting_ip4_config_get_dns (setting, i);
- for (j = 0; j < nm_ip4_config_get_num_nameservers (ip4_config); j++) {
- if (nm_ip4_config_get_nameserver (ip4_config, j) == ns) {
- found = TRUE;
- break;
- }
- }
-
- if (!found)
- nm_ip4_config_add_nameserver (ip4_config, ns);
- }
-
- /* DNS search domains */
- for (i = 0; i < nm_setting_ip4_config_get_num_dns_searches (setting); i++) {
- const char *search = nm_setting_ip4_config_get_dns_search (setting, i);
- gboolean found = FALSE;
-
- /* Avoid dupes */
- for (j = 0; j < nm_ip4_config_get_num_searches (ip4_config); j++) {
- if (!strcmp (search, nm_ip4_config_get_search (ip4_config, j))) {
- found = TRUE;
- break;
- }
- }
-
- if (!found)
- nm_ip4_config_add_search (ip4_config, search);
- }
-
- /* IPv4 addresses */
- for (i = 0; i < nm_setting_ip4_config_get_num_addresses (setting); i++) {
- NMIP4Address *setting_addr = nm_setting_ip4_config_get_address (setting, i);
- guint32 num;
-
- num = nm_ip4_config_get_num_addresses (ip4_config);
- for (j = 0; j < num; j++) {
- NMIP4Address *cfg_addr = nm_ip4_config_get_address (ip4_config, j);
-
- /* Dupe, override with user-specified address */
- if (nm_ip4_address_get_address (cfg_addr) == nm_ip4_address_get_address (setting_addr)) {
- nm_ip4_config_replace_address (ip4_config, j, setting_addr);
- break;
- }
- }
-
- if (j == num)
- nm_ip4_config_add_address (ip4_config, setting_addr);
- }
-
- /* IPv4 routes */
- for (i = 0; i < nm_setting_ip4_config_get_num_routes (setting); i++) {
- NMIP4Route *setting_route = nm_setting_ip4_config_get_route (setting, i);
- guint32 num;
-
- num = nm_ip4_config_get_num_routes (ip4_config);
- for (j = 0; j < num; j++) {
- NMIP4Route *cfg_route = nm_ip4_config_get_route (ip4_config, j);
-
- /* Dupe, override with user-specified route */
- if ( (nm_ip4_route_get_dest (cfg_route) == nm_ip4_route_get_dest (setting_route))
- && (nm_ip4_route_get_prefix (cfg_route) == nm_ip4_route_get_prefix (setting_route))
- && (nm_ip4_route_get_next_hop (cfg_route) == nm_ip4_route_get_next_hop (setting_route))) {
- nm_ip4_config_replace_route (ip4_config, j, setting_route);
- break;
- }
- }
-
- if (j == num)
- nm_ip4_config_add_route (ip4_config, setting_route);
- }
-
- setting_never_default = nm_setting_ip4_config_get_never_default (setting);
-
- if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
- nm_ip4_config_set_never_default (ip4_config, setting_never_default);
- else {
- if (setting_never_default)
- nm_ip4_config_set_never_default (ip4_config, TRUE);
- }
-}
-
-static inline gboolean
-ip6_addresses_equal (const struct in6_addr *a, const struct in6_addr *b)
-{
- return memcmp (a, b, sizeof (struct in6_addr)) == 0;
-}
-
-/* This is exactly identical to nm_utils_merge_ip4_config, with s/4/6/,
- * except that we can't compare addresses with ==.
- */
-void
-nm_utils_merge_ip6_config (NMIP6Config *ip6_config, NMSettingIP6Config *setting)
+gboolean
+nm_match_spec_string (const GSList *specs, const char *match)
{
- int i, j;
-
- if (!setting)
- return; /* Defaults are just fine */
-
- if (nm_setting_ip6_config_get_ignore_auto_dns (setting)) {
- nm_ip6_config_reset_nameservers (ip6_config);
- nm_ip6_config_reset_domains (ip6_config);
- nm_ip6_config_reset_searches (ip6_config);
- }
-
- if (nm_setting_ip6_config_get_ignore_auto_routes (setting))
- nm_ip6_config_reset_routes (ip6_config);
-
- for (i = 0; i < nm_setting_ip6_config_get_num_dns (setting); i++) {
- const struct in6_addr *ns;
- gboolean found = FALSE;
-
- /* Avoid dupes */
- ns = nm_setting_ip6_config_get_dns (setting, i);
- for (j = 0; j < nm_ip6_config_get_num_nameservers (ip6_config); j++) {
- if (ip6_addresses_equal (nm_ip6_config_get_nameserver (ip6_config, j), ns)) {
- found = TRUE;
- break;
- }
- }
-
- if (!found)
- nm_ip6_config_add_nameserver (ip6_config, ns);
- }
-
- /* DNS search domains */
- for (i = 0; i < nm_setting_ip6_config_get_num_dns_searches (setting); i++) {
- const char *search = nm_setting_ip6_config_get_dns_search (setting, i);
- gboolean found = FALSE;
-
- /* Avoid dupes */
- for (j = 0; j < nm_ip6_config_get_num_searches (ip6_config); j++) {
- if (!strcmp (search, nm_ip6_config_get_search (ip6_config, j))) {
- found = TRUE;
- break;
- }
- }
-
- if (!found)
- nm_ip6_config_add_search (ip6_config, search);
- }
-
- /* IPv6 addresses */
- for (i = 0; i < nm_setting_ip6_config_get_num_addresses (setting); i++) {
- NMIP6Address *setting_addr = nm_setting_ip6_config_get_address (setting, i);
- guint32 num;
-
- num = nm_ip6_config_get_num_addresses (ip6_config);
- for (j = 0; j < num; j++) {
- NMIP6Address *cfg_addr = nm_ip6_config_get_address (ip6_config, j);
-
- /* Dupe, override with user-specified address */
- if (ip6_addresses_equal (nm_ip6_address_get_address (cfg_addr), nm_ip6_address_get_address (setting_addr))) {
- nm_ip6_config_replace_address (ip6_config, j, setting_addr);
- break;
- }
- }
-
- if (j == num)
- nm_ip6_config_add_address (ip6_config, setting_addr);
- }
-
- /* IPv6 routes */
- for (i = 0; i < nm_setting_ip6_config_get_num_routes (setting); i++) {
- NMIP6Route *setting_route = nm_setting_ip6_config_get_route (setting, i);
- guint32 num;
-
- num = nm_ip6_config_get_num_routes (ip6_config);
- for (j = 0; j < num; j++) {
- NMIP6Route *cfg_route = nm_ip6_config_get_route (ip6_config, j);
-
- /* Dupe, override with user-specified route */
- if ( ip6_addresses_equal (nm_ip6_route_get_dest (cfg_route), nm_ip6_route_get_dest (setting_route))
- && (nm_ip6_route_get_prefix (cfg_route) == nm_ip6_route_get_prefix (setting_route))
- && ip6_addresses_equal (nm_ip6_route_get_next_hop (cfg_route), nm_ip6_route_get_next_hop (setting_route))) {
- nm_ip6_config_replace_route (ip6_config, j, setting_route);
- break;
- }
- }
+ const GSList *iter;
- if (j == num)
- nm_ip6_config_add_route (ip6_config, setting_route);
+ for (iter = specs; iter; iter = g_slist_next (iter)) {
+ if (!g_ascii_strcasecmp ((const char *) iter->data, match))
+ return TRUE;
}
- if (nm_setting_ip6_config_get_never_default (setting))
- nm_ip6_config_set_never_default (ip6_config, TRUE);
+ return FALSE;
}
gboolean
nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr)
{
- const GSList *iter;
- char *hwaddr_match, *p;
+ char *hwaddr_match;
+ gboolean matched;
g_return_val_if_fail (hwaddr != NULL, FALSE);
- p = hwaddr_match = g_strdup_printf ("mac:%s", hwaddr);
+ hwaddr_match = g_strdup_printf ("mac:%s", hwaddr);
+ matched = nm_match_spec_string (specs, hwaddr_match);
+ g_free (hwaddr_match);
+ return matched;
+}
- while (*p) {
- *p = g_ascii_tolower (*p);
- p++;
- }
+gboolean
+nm_match_spec_interface_name (const GSList *specs, const char *interface_name)
+{
+ char *iface_match;
+ gboolean matched;
- for (iter = specs; iter; iter = g_slist_next (iter)) {
- if (!strcmp ((const char *) iter->data, hwaddr_match)) {
- g_free (hwaddr_match);
- return TRUE;
- }
- }
+ g_return_val_if_fail (interface_name != NULL, FALSE);
- g_free (hwaddr_match);
- return FALSE;
+ iface_match = g_strdup_printf ("interface-name:%s", interface_name);
+ matched = nm_match_spec_string (specs, iface_match);
+ g_free (iface_match);
+ return matched;
}
#define BUFSIZE 10
@@ -435,20 +285,16 @@ nm_utils_get_shared_wifi_permission (NMConnection *connection)
{
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
const char *method = NULL;
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
-
- if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) != 0)
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) != 0)
return NULL; /* Not shared */
s_wifi = nm_connection_get_setting_wireless (connection);
if (s_wifi) {
s_wsec = nm_connection_get_setting_wireless_security (connection);
- if (nm_setting_wireless_get_security (s_wifi) || s_wsec)
+ if (s_wsec)
return NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED;
else
return NM_AUTH_PERMISSION_WIFI_SHARE_OPEN;
@@ -553,116 +399,6 @@ value_hash_add_object_property (GHashTable *hash,
value_hash_add (hash, key, value);
}
-/**
- * nm_utils_do_sysctl:
- * @path: path to write @value to
- * @value: value to write to @path
- *
- * Writes @value to the file at @path, trying 3 times on failure.
- *
- * Returns: %TRUE on success. On failure, returns %FALSE and sets errno.
- */
-gboolean
-nm_utils_do_sysctl (const char *path, const char *value)
-{
- int fd, len, nwrote, tries, saved_errno = 0;
- char *actual;
-
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (value != NULL, FALSE);
-
- fd = open (path, O_WRONLY | O_TRUNC);
- if (fd == -1) {
- saved_errno = errno;
- nm_log_warn (LOGD_CORE, "sysctl: failed to open '%s': (%d) %s",
- path, saved_errno, strerror (saved_errno));
- errno = saved_errno;
- return FALSE;
- }
-
- nm_log_dbg (LOGD_CORE, "sysctl: setting '%s' to '%s'", path, value);
-
- /* Most sysfs and sysctl options don't care about a trailing CR, while some
- * (like infiniband) do. So always add the CR. Also, neither sysfs nor
- * sysctl support partial writes so the CR must be added to the string we're
- * about to write.
- */
- actual = g_strdup_printf ("%s\n", value);
-
- /* Try to write the entire value three times if a partial write occurs */
- len = strlen (actual);
- for (tries = 0, nwrote = 0; tries < 3 && nwrote != len; tries++) {
- errno = 0;
- nwrote = write (fd, actual, len);
- if (nwrote == -1) {
- if (errno == EINTR)
- continue;
- saved_errno = errno;
- break;
- }
- }
- g_free (actual);
- close (fd);
-
- if (nwrote != len && saved_errno != EEXIST) {
- nm_log_warn (LOGD_CORE, "sysctl: failed to set '%s' to '%s': (%d) %s",
- path, value, saved_errno, strerror (saved_errno));
- }
-
- errno = saved_errno;
- return (nwrote == len);
-}
-
-gboolean
-nm_utils_get_proc_sys_net_value (const char *path,
- const char *iface,
- gint32 *out_value)
-{
- GError *error = NULL;
- char *contents = NULL;
- gboolean success = FALSE;
- long int tmp;
-
- if (!g_file_get_contents (path, &contents, NULL, &error)) {
- nm_log_dbg (LOGD_DEVICE, "(%s): error reading %s: (%d) %s",
- iface, path,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- } else {
- errno = 0;
- tmp = strtol (contents, NULL, 10);
- if (errno == 0) {
- *out_value = (gint32) tmp;
- success = TRUE;
- }
- g_free (contents);
- }
-
- return success;
-}
-
-gboolean
-nm_utils_get_proc_sys_net_value_with_bounds (const char *path,
- const char *iface,
- gint32 *out_value,
- gint32 valid_min,
- gint32 valid_max)
-{
- gboolean result;
- gint32 val;
-
- result = nm_utils_get_proc_sys_net_value (path, iface, &val);
-
- if (result) {
- if (val >= valid_min && val <= valid_max)
- *out_value = val;
- else
- result = FALSE;
- }
-
- return result;
-}
static char *
get_new_connection_name (const GSList *existing,
@@ -718,6 +454,113 @@ get_new_connection_name (const GSList *existing,
}
void
+nm_utils_normalize_connection (NMConnection *connection,
+ gboolean default_enable_ipv6)
+{
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
+ const char *default_ip4_method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
+ const char *default_ip6_method =
+ default_enable_ipv6 ? NM_SETTING_IP6_CONFIG_METHOD_AUTO : NM_SETTING_IP6_CONFIG_METHOD_IGNORE;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ NMSetting *setting;
+ const char *method;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+
+ if (nm_setting_connection_get_master (s_con)) {
+ /* Slave connections don't have IP configuration. */
+
+ if (s_ip4) {
+ method = nm_setting_ip4_config_get_method (s_ip4);
+ if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) != 0) {
+ nm_log_warn (LOGD_SETTINGS, "ignoring IP4 config on slave '%s'",
+ nm_connection_get_id (connection));
+ }
+ nm_connection_remove_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ s_ip4 = NULL;
+ }
+
+ if (s_ip6) {
+ method = nm_setting_ip6_config_get_method (s_ip6);
+ if (g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) != 0) {
+ nm_log_warn (LOGD_SETTINGS, "ignoring IP6 config on slave '%s'",
+ nm_connection_get_id (connection));
+ }
+ nm_connection_remove_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ s_ip6 = NULL;
+ }
+ } else {
+ /* Ensure all non-slave connections have IP4 and IP6 settings objects. If no
+ * IP6 setting was specified, then assume that means IP6 config is allowed
+ * to fail. But if no IP4 setting was specified, assume the caller was just
+ * being lazy.
+ */
+ if (!s_ip4) {
+ setting = nm_setting_ip4_config_new ();
+ nm_connection_add_setting (connection, setting);
+
+ g_object_set (setting,
+ NM_SETTING_IP4_CONFIG_METHOD, default_ip4_method,
+ NULL);
+ }
+ if (!s_ip6) {
+ setting = nm_setting_ip6_config_new ();
+ nm_connection_add_setting (connection, setting);
+
+ g_object_set (setting,
+ NM_SETTING_IP6_CONFIG_METHOD, default_ip6_method,
+ NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+ }
+ }
+}
+
+const char *
+nm_utils_get_ip_config_method (NMConnection *connection,
+ GType ip_setting_type)
+{
+ NMSettingConnection *s_con;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ const char *method;
+
+ s_con = nm_connection_get_setting_connection (connection);
+
+ if (ip_setting_type == NM_TYPE_SETTING_IP4_CONFIG) {
+ g_return_val_if_fail (s_con != NULL, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+
+ if (nm_setting_connection_get_master (s_con))
+ return NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
+ else {
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_return_val_if_fail (s_ip4 != NULL, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+ method = nm_setting_ip4_config_get_method (s_ip4);
+ g_return_val_if_fail (method != NULL, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+
+ return method;
+ }
+
+ } else if (ip_setting_type == NM_TYPE_SETTING_IP6_CONFIG) {
+ g_return_val_if_fail (s_con != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
+
+ if (nm_setting_connection_get_master (s_con))
+ return NM_SETTING_IP6_CONFIG_METHOD_IGNORE;
+ else {
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_return_val_if_fail (s_ip6 != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
+ method = nm_setting_ip6_config_get_method (s_ip6);
+ g_return_val_if_fail (method != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
+
+ return method;
+ }
+
+ } else
+ g_assert_not_reached ();
+}
+
+void
nm_utils_complete_generic (NMConnection *connection,
const char *ctype,
const GSList *existing,
@@ -726,9 +569,6 @@ nm_utils_complete_generic (NMConnection *connection,
gboolean default_enable_ipv6)
{
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
- const char *method;
char *id, *uuid;
s_con = nm_connection_get_setting_connection (connection);
@@ -751,37 +591,622 @@ nm_utils_complete_generic (NMConnection *connection,
g_free (id);
}
- /* Add an 'auto' IPv4 connection if present */
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (!s_ip4) {
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+ /* Normalize */
+ nm_utils_normalize_connection (connection, default_enable_ipv6);
+}
+
+char *
+nm_utils_new_vlan_name (const char *parent_iface, guint32 vlan_id)
+{
+ /* Basically VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD */
+ return g_strdup_printf ("%s.%d", parent_iface, vlan_id);
+}
+
+/**
+ * nm_utils_read_resolv_conf_nameservers():
+ * @rc_contents: contents of a resolv.conf; or %NULL to read /etc/resolv.conf
+ *
+ * Reads all nameservers out of @rc_contents or /etc/resolv.conf and returns
+ * them.
+ *
+ * Returns: a #GPtrArray of 'char *' elements of each nameserver line from
+ * @contents or resolv.conf
+ */
+GPtrArray *
+nm_utils_read_resolv_conf_nameservers (const char *rc_contents)
+{
+ GPtrArray *nameservers = NULL;
+ char *contents = NULL;
+ char **lines, **iter;
+ char *p;
+
+ if (rc_contents)
+ contents = g_strdup (rc_contents);
+ else {
+ if (!g_file_get_contents (_PATH_RESCONF, &contents, NULL, NULL))
+ return NULL;
}
- method = nm_setting_ip4_config_get_method (s_ip4);
- if (!method) {
- g_object_set (G_OBJECT (s_ip4),
- NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
- NULL);
+
+ nameservers = g_ptr_array_new_full (3, g_free);
+
+ lines = g_strsplit_set (contents, "\r\n", -1);
+ for (iter = lines; *iter; iter++) {
+ if (!g_str_has_prefix (*iter, "nameserver"))
+ continue;
+ p = *iter + strlen ("nameserver");
+ if (!g_ascii_isspace (*p++))
+ continue;
+ /* Skip intermediate whitespace */
+ while (g_ascii_isspace (*p))
+ p++;
+ g_strchomp (p);
+
+ g_ptr_array_add (nameservers, g_strdup (p));
}
+ g_strfreev (lines);
+ g_free (contents);
- /* Add an 'auto' IPv6 setting if allowed and not preset */
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
- if (!s_ip6 && default_enable_ipv6) {
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+ return nameservers;
+}
+
+static GHashTable *
+check_property_in_hash (GHashTable *hash,
+ const char *s_name,
+ const char *p_name)
+{
+ GHashTable *props;
+
+ props = g_hash_table_lookup (hash, s_name);
+ if ( !props
+ || !g_hash_table_lookup (props, p_name)) {
+ return NULL;
}
- if (s_ip6 && !nm_setting_ip6_config_get_method (s_ip6)) {
- g_object_set (G_OBJECT (s_ip6),
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
- NULL);
+ return props;
+}
+
+static void
+remove_from_hash (GHashTable *s_hash,
+ GHashTable *p_hash,
+ const char *s_name,
+ const char *p_name)
+{
+ g_hash_table_remove (p_hash, p_name);
+ if (g_hash_table_size (p_hash) == 0)
+ g_hash_table_remove (s_hash, s_name);
+}
+
+static gboolean
+check_ip6_method (NMConnection *orig,
+ NMConnection *candidate,
+ GHashTable *settings)
+{
+ GHashTable *props;
+ const char *orig_ip6_method, *candidate_ip6_method;
+ NMSettingIP6Config *candidate_ip6;
+ gboolean allow = FALSE;
+
+ props = check_property_in_hash (settings,
+ NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP6_CONFIG_METHOD);
+ if (!props)
+ return TRUE;
+
+ /* If the generated connection is 'link-local' and the candidate is both 'auto'
+ * and may-fail=TRUE, then the candidate is OK to use. may-fail is included
+ * in the decision because if the candidate is 'auto' but may-fail=FALSE, then
+ * the connection could not possibly have been previously activated on the
+ * device if the device has no non-link-local IPv6 address.
+ */
+ orig_ip6_method = nm_utils_get_ip_config_method (orig, NM_TYPE_SETTING_IP6_CONFIG);
+ candidate_ip6_method = nm_utils_get_ip_config_method (candidate, NM_TYPE_SETTING_IP6_CONFIG);
+ candidate_ip6 = nm_connection_get_setting_ip6_config (candidate);
+
+ if ( strcmp (orig_ip6_method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0
+ && strcmp (candidate_ip6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0
+ && (!candidate_ip6 || nm_setting_ip6_config_get_may_fail (candidate_ip6))) {
+ allow = TRUE;
}
+
+ /* If the generated connection method is 'link-local' or 'auto' and the candidate
+ * method is 'ignore' we can take the connection, because NM didn't simply take care
+ * of IPv6.
+ */
+ if ( ( strcmp (orig_ip6_method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0
+ || strcmp (orig_ip6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0)
+ && strcmp (candidate_ip6_method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0) {
+ allow = TRUE;
+ }
+
+ if (allow) {
+ remove_from_hash (settings, props,
+ NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP6_CONFIG_METHOD);
+ }
+ return allow;
}
-char *
-nm_utils_new_vlan_name (const char *parent_iface, guint32 vlan_id)
+static gboolean
+check_ip4_method (NMConnection *orig,
+ NMConnection *candidate,
+ GHashTable *settings,
+ gboolean device_has_carrier)
{
- /* Basically VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD */
- return g_strdup_printf ("%s.%d", parent_iface, vlan_id);
+ GHashTable *props;
+ const char *orig_ip4_method, *candidate_ip4_method;
+ NMSettingIP4Config *candidate_ip4;
+
+ props = check_property_in_hash (settings,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_METHOD);
+ if (!props)
+ return TRUE;
+
+ /* If the generated connection is 'disabled' (device had no IP addresses)
+ * but it has no carrier, that most likely means that IP addressing could
+ * not complete and thus no IP addresses were assigned. In that case, allow
+ * matching to the "auto" method.
+ */
+ orig_ip4_method = nm_utils_get_ip_config_method (orig, NM_TYPE_SETTING_IP4_CONFIG);
+ candidate_ip4_method = nm_utils_get_ip_config_method (candidate, NM_TYPE_SETTING_IP4_CONFIG);
+ candidate_ip4 = nm_connection_get_setting_ip4_config (candidate);
+
+ if ( strcmp (orig_ip4_method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0
+ && strcmp (candidate_ip4_method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0
+ && (!candidate_ip4 || nm_setting_ip4_config_get_may_fail (candidate_ip4))
+ && (device_has_carrier == FALSE)) {
+ remove_from_hash (settings, props,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_METHOD);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+check_connection_interface_name (NMConnection *orig,
+ NMConnection *candidate,
+ GHashTable *settings)
+{
+ GHashTable *props;
+ const char *orig_ifname, *cand_ifname;
+ NMSettingConnection *s_con_orig, *s_con_cand;
+
+ props = check_property_in_hash (settings,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME);
+ if (!props)
+ return TRUE;
+
+ /* If one of the interface names is NULL, we accept that connection */
+ s_con_orig = nm_connection_get_setting_connection (orig);
+ s_con_cand = nm_connection_get_setting_connection (candidate);
+ orig_ifname = nm_setting_connection_get_interface_name (s_con_orig);
+ cand_ifname = nm_setting_connection_get_interface_name (s_con_cand);
+
+ if (!orig_ifname || !cand_ifname) {
+ remove_from_hash (settings, props,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+check_connection_mac_address (NMConnection *orig,
+ NMConnection *candidate,
+ GHashTable *settings)
+{
+ GHashTable *props;
+ const GByteArray *orig_mac = NULL, *cand_mac = NULL;
+ NMSettingWired *s_wired_orig, *s_wired_cand;
+
+ props = check_property_in_hash (settings,
+ NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_MAC_ADDRESS);
+ if (!props)
+ return TRUE;
+
+ /* If one of the MAC addresses is NULL, we accept that connection */
+ s_wired_orig = nm_connection_get_setting_wired (orig);
+ if (s_wired_orig)
+ orig_mac = nm_setting_wired_get_mac_address (s_wired_orig);
+
+ s_wired_cand = nm_connection_get_setting_wired (candidate);
+ if (s_wired_cand)
+ cand_mac = nm_setting_wired_get_mac_address (s_wired_cand);
+
+ if (!orig_mac || !cand_mac) {
+ remove_from_hash (settings, props,
+ NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_MAC_ADDRESS);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static NMConnection *
+check_possible_match (NMConnection *orig,
+ NMConnection *candidate,
+ GHashTable *settings,
+ gboolean device_has_carrier)
+{
+ g_return_val_if_fail (settings != NULL, NULL);
+
+ if (!check_ip6_method (orig, candidate, settings))
+ return NULL;
+
+ if (!check_ip4_method (orig, candidate, settings, device_has_carrier))
+ return NULL;
+
+ if (!check_connection_interface_name (orig, candidate, settings))
+ return NULL;
+
+ if (!check_connection_mac_address (orig, candidate, settings))
+ return NULL;
+
+ if (g_hash_table_size (settings) == 0)
+ return candidate;
+ else
+ return NULL;
+}
+
+/**
+ * nm_utils_match_connection:
+ * @connections: a (optionally pre-sorted) list of connections from which to
+ * find a matching connection to @original based on "inferrable" properties
+ * @original: the #NMConnection to find a match for from @connections
+ * @device_has_carrier: pass %TRUE if the device that generated @original has
+ * a carrier, %FALSE if not
+ * @match_filter_func: a function to check whether each connection from @connections
+ * should be considered for matching. This function should return %TRUE if the
+ * connection should be considered, %FALSE if the connection should be ignored
+ * @match_compat_data: data pointer passed to @match_filter_func
+ *
+ * Checks each connection from @connections until a matching connection is found
+ * considering only setting properties marked with %NM_SETTING_PARAM_INFERRABLE
+ * and checking a few other characteristics like IPv6 method. If the caller
+ * desires some priority order of the connections, @connections should be
+ * sorted before calling this function.
+ *
+ * Returns: the best #NMConnection matching @original, or %NULL if no connection
+ * matches well enough.
+ */
+NMConnection *
+nm_utils_match_connection (GSList *connections,
+ NMConnection *original,
+ gboolean device_has_carrier,
+ NMUtilsMatchFilterFunc match_filter_func,
+ gpointer match_filter_data)
+{
+ NMConnection *best_match = NULL;
+ GSList *iter;
+
+ for (iter = connections; iter; iter = iter->next) {
+ NMConnection *candidate = NM_CONNECTION (iter->data);
+ GHashTable *diffs = NULL;
+
+ if (match_filter_func) {
+ if (!match_filter_func (candidate, match_filter_data))
+ continue;
+ }
+
+ if (!nm_connection_diff (original, candidate, NM_SETTING_COMPARE_FLAG_INFERRABLE, &diffs)) {
+ if (!best_match)
+ best_match = check_possible_match (original, candidate, diffs, device_has_carrier);
+
+ if (!best_match && nm_logging_enabled (LOGL_DEBUG, LOGD_CORE)) {
+ GString *diff_string;
+ GHashTableIter s_iter, p_iter;
+ gpointer setting_name, setting;
+ gpointer property_name, value;
+
+ diff_string = g_string_new (NULL);
+ g_hash_table_iter_init (&s_iter, diffs);
+ while (g_hash_table_iter_next (&s_iter, &setting_name, &setting)) {
+ g_hash_table_iter_init (&p_iter, setting);
+ while (g_hash_table_iter_next (&p_iter, &property_name, &value)) {
+ if (diff_string->len)
+ g_string_append (diff_string, ", ");
+ g_string_append_printf (diff_string, "%s.%s",
+ (char *) setting_name,
+ (char *) property_name);
+ }
+ }
+
+ nm_log_dbg (LOGD_CORE, "Connection '%s' differs from candidate '%s' in %s",
+ nm_connection_get_id (original),
+ nm_connection_get_id (candidate),
+ diff_string->str);
+ g_string_free (diff_string, TRUE);
+ }
+
+ g_hash_table_unref (diffs);
+ continue;
+ }
+
+ /* Exact match */
+ return candidate;
+ }
+
+ /* Best match (if any) */
+ return best_match;
+}
+
+/* nm_utils_ascii_str_to_int64:
+ *
+ * A wrapper for g_ascii_strtoll, that checks whether the whole string
+ * can be successfully converted to a number and is within a given
+ * range. On any error, @fallback will be returned and %errno will be set
+ * to a non-zero value. On success, %errno will be set to zero, check %errno
+ * for errors. Any trailing or leading (ascii) white space is ignored and the
+ * functions is locale independent.
+ *
+ * The function is guaranteed to return a value between @min and @max
+ * (inclusive) or @fallback. Also, the parsing is rather strict, it does
+ * not allow for any unrecognized characters, except leading and trailing
+ * white space.
+ **/
+gint64
+nm_utils_ascii_str_to_int64 (const char *str, guint base, gint64 min, gint64 max, gint64 fallback)
+{
+ gint64 v;
+ size_t len;
+ char buf[64], *s, *str_free = NULL;
+
+ if (str) {
+ while (g_ascii_isspace (str[0]))
+ str++;
+ }
+ if (!str || !str[0]) {
+ errno = EINVAL;
+ return fallback;
+ }
+
+ len = strlen (str);
+ if (g_ascii_isspace (str[--len])) {
+ /* backward search the first non-ws character.
+ * We already know that str[0] is non-ws. */
+ while (g_ascii_isspace (str[--len]))
+ ;
+
+ /* str[len] is now the last non-ws character... */
+ len++;
+
+ if (len >= sizeof (buf))
+ s = str_free = g_malloc (len + 1);
+ else
+ s = buf;
+
+ memcpy (s, str, len);
+ s[len] = 0;
+
+ /*
+ g_assert (len > 0 && len < strlen (str) && len == strlen (s));
+ g_assert (!g_ascii_isspace (str[len-1]) && g_ascii_isspace (str[len]));
+ g_assert (strncmp (str, s, len) == 0);
+ */
+
+ str = s;
+ }
+
+ errno = 0;
+ v = g_ascii_strtoll (str, &s, base);
+
+ if (errno != 0)
+ v = fallback;
+ else if (s[0] != 0) {
+ errno = EINVAL;
+ v = fallback;
+ } else if (v > max || v < min) {
+ errno = ERANGE;
+ v = fallback;
+ }
+
+ if (G_UNLIKELY (str_free))
+ g_free (str_free);
+ return v;
+}
+
+
+static gint64 monotonic_timestamp_offset_sec;
+
+static void
+monotonic_timestamp_get (struct timespec *tp)
+{
+ static gboolean initialized = FALSE;
+ int err;
+
+ err = clock_gettime (CLOCK_BOOTTIME, tp);
+
+ g_assert (err == 0); (void)err;
+ g_assert (tp->tv_nsec >= 0 && tp->tv_nsec < NM_UTILS_NS_PER_SECOND);
+
+ if (G_LIKELY (initialized))
+ return;
+
+ /* Calculate an offset for the time stamp.
+ *
+ * We always want positive values, because then we can initialize
+ * a timestamp with 0 and be sure, that it will be less then any
+ * value nm_utils_get_monotonic_timestamp_*() might return.
+ * For this to be true also for nm_utils_get_monotonic_timestamp_s() at
+ * early boot, we have to shift the timestamp to start counting at
+ * least from 1 second onward.
+ *
+ * Another advantage of shifting is, that this way we make use of the whole 31 bit
+ * range of signed int, before the time stamp for nm_utils_get_monotonic_timestamp_s()
+ * wraps (~68 years).
+ **/
+ monotonic_timestamp_offset_sec = (- ((gint64) tp->tv_sec)) + 1;
+ initialized = TRUE;
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_CORE)) {
+ time_t now = time (NULL);
+ struct tm tm;
+ char s[255];
+
+ strftime (s, sizeof (s), "%Y-%m-%d %H:%M:%S", localtime_r (&now, &tm));
+ nm_log_dbg (LOGD_CORE, "monotonic timestamp started counting 1.%09ld seconds ago with "
+ "an offset of %lld.0 seconds to CLOCK_BOOTTIME (local time is %s)",
+ tp->tv_nsec, (long long) -monotonic_timestamp_offset_sec, s);
+ }
+}
+
+/**
+ * nm_utils_get_monotonic_timestamp_ns:
+ *
+ * Returns: a monotonically increasing time stamp in nanoseconds,
+ * starting at an unspecified offset. See clock_gettime(), %CLOCK_BOOTTIME.
+ *
+ * The returned value will start counting at an undefined point
+ * in the past and will always be positive.
+ *
+ * All the nm_utils_get_monotonic_timestamp_*s functions return the same
+ * timestamp but in different scales (nsec, usec, msec, sec).
+ **/
+gint64
+nm_utils_get_monotonic_timestamp_ns (void)
+{
+ struct timespec tp;
+
+ monotonic_timestamp_get (&tp);
+
+ /* Although the result will always be positive, we return a signed
+ * integer, which makes it easier to calculate time differences (when
+ * you want to subtract signed values).
+ **/
+ return (((gint64) tp.tv_sec) + monotonic_timestamp_offset_sec) * NM_UTILS_NS_PER_SECOND +
+ tp.tv_nsec;
+}
+
+/**
+ * nm_utils_get_monotonic_timestamp_us:
+ *
+ * Returns: a monotonically increasing time stamp in microseconds,
+ * starting at an unspecified offset. See clock_gettime(), %CLOCK_BOOTTIME.
+ *
+ * The returned value will start counting at an undefined point
+ * in the past and will always be positive.
+ *
+ * All the nm_utils_get_monotonic_timestamp_*s functions return the same
+ * timestamp but in different scales (nsec, usec, msec, sec).
+ **/
+gint64
+nm_utils_get_monotonic_timestamp_us (void)
+{
+ struct timespec tp;
+
+ monotonic_timestamp_get (&tp);
+
+ /* Although the result will always be positive, we return a signed
+ * integer, which makes it easier to calculate time differences (when
+ * you want to subtract signed values).
+ **/
+ return (((gint64) tp.tv_sec) + monotonic_timestamp_offset_sec) * ((gint64) G_USEC_PER_SEC) +
+ (tp.tv_nsec / (NM_UTILS_NS_PER_SECOND/G_USEC_PER_SEC));
+}
+
+/**
+ * nm_utils_get_monotonic_timestamp_ms:
+ *
+ * Returns: a monotonically increasing time stamp in milliseconds,
+ * starting at an unspecified offset. See clock_gettime(), %CLOCK_BOOTTIME.
+ *
+ * The returned value will start counting at an undefined point
+ * in the past and will always be positive.
+ *
+ * All the nm_utils_get_monotonic_timestamp_*s functions return the same
+ * timestamp but in different scales (nsec, usec, msec, sec).
+ **/
+gint64
+nm_utils_get_monotonic_timestamp_ms (void)
+{
+ struct timespec tp;
+
+ monotonic_timestamp_get (&tp);
+
+ /* Although the result will always be positive, we return a signed
+ * integer, which makes it easier to calculate time differences (when
+ * you want to subtract signed values).
+ **/
+ return (((gint64) tp.tv_sec) + monotonic_timestamp_offset_sec) * ((gint64) 1000) +
+ (tp.tv_nsec / (NM_UTILS_NS_PER_SECOND/1000));
+}
+
+/**
+ * nm_utils_get_monotonic_timestamp_s:
+ *
+ * Returns: nm_utils_get_monotonic_timestamp_ms() in seconds (throwing
+ * away sub second parts). The returned value will always be positive.
+ *
+ * This value wraps after roughly 68 years which should be fine for any
+ * practical purpose.
+ *
+ * All the nm_utils_get_monotonic_timestamp_*s functions return the same
+ * timestamp but in different scales (nsec, usec, msec, sec).
+ **/
+gint32
+nm_utils_get_monotonic_timestamp_s (void)
+{
+ struct timespec tp;
+
+ monotonic_timestamp_get (&tp);
+ return (((gint64) tp.tv_sec) + monotonic_timestamp_offset_sec);
+}
+
+
+/**
+ * nm_utils_ip6_property_path:
+ * @ifname: an interface name
+ * @property: a property name
+ *
+ * Returns the path to IPv6 property @property on @ifname. Note that
+ * this uses a static buffer.
+ */
+const char *
+nm_utils_ip6_property_path (const char *ifname, const char *property)
+{
+#define IPV6_PROPERTY_DIR "/proc/sys/net/ipv6/conf/"
+ static char path[sizeof (IPV6_PROPERTY_DIR) + IFNAMSIZ + 32];
+ int len;
+
+ ifname = ASSERT_VALID_PATH_COMPONENT (ifname);
+ property = ASSERT_VALID_PATH_COMPONENT (property);
+
+ len = g_snprintf (path, sizeof (path), IPV6_PROPERTY_DIR "%s/%s",
+ ifname, property);
+ g_assert (len < sizeof (path) - 1);
+
+ return path;
+}
+
+const char *
+ASSERT_VALID_PATH_COMPONENT (const char *name)
+{
+ const char *n;
+
+ if (name == NULL || name[0] == '\0')
+ goto fail;
+
+ if (name[0] == '.') {
+ if (name[1] == '\0')
+ goto fail;
+ if (name[1] == '.' && name[2] == '\0')
+ goto fail;
+ }
+ n = name;
+ do {
+ if (*n == '/')
+ goto fail;
+ } while (*(++n) != '\0');
+
+ return name;
+fail:
+ if (name)
+ nm_log_err (LOGD_CORE, "Failed asserting path component: NULL");
+ else
+ nm_log_err (LOGD_CORE, "Failed asserting path component: \"%s\"", name);
+ g_error ("FATAL: Failed asserting path component: %s", name ? name : "(null)");
}
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index 057ad283f..a09a30e23 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -31,16 +31,22 @@
#include "nm-ip6-config.h"
#include "nm-setting-ip6-config.h"
#include "nm-connection.h"
+#include "nm-setting-private.h"
gboolean nm_ethernet_address_is_valid (const struct ether_addr *test_addr);
+in_addr_t nm_utils_ip4_address_clear_host_address (in_addr_t addr, guint8 plen);
+void nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_addr *src, guint8 plen);
+
int nm_spawn_process (const char *args);
-void nm_utils_merge_ip4_config (NMIP4Config *ip4_config, NMSettingIP4Config *setting);
-void nm_utils_merge_ip6_config (NMIP6Config *ip6_config, NMSettingIP6Config *setting);
+/* macro to return strlen() of a compile time string. */
+#define STRLEN(str) ( sizeof ("" str) - 1 )
+gboolean nm_match_spec_string (const GSList *specs, const char *string);
gboolean nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr);
gboolean nm_match_spec_s390_subchannels (const GSList *specs, const char *subchannels);
+gboolean nm_match_spec_interface_name (const GSList *specs, const char *interface_name);
const char *nm_utils_get_shared_wifi_permission (NMConnection *connection);
@@ -71,17 +77,10 @@ void value_hash_add_object_property (GHashTable *hash,
const char *prop,
GType val_type);
-gboolean nm_utils_do_sysctl (const char *path, const char *value);
-
-gboolean nm_utils_get_proc_sys_net_value (const char *path,
- const char *iface,
- gint32 *out_value);
-
-gboolean nm_utils_get_proc_sys_net_value_with_bounds (const char *path,
- const char *iface,
- gint32 *out_value,
- gint32 valid_min,
- gint32 valid_max);
+void nm_utils_normalize_connection (NMConnection *connection,
+ gboolean default_enable_ipv6);
+const char *nm_utils_get_ip_config_method (NMConnection *connection,
+ GType ip_setting_type);
void nm_utils_complete_generic (NMConnection *connection,
const char *ctype,
@@ -92,4 +91,25 @@ void nm_utils_complete_generic (NMConnection *connection,
char *nm_utils_new_vlan_name (const char *parent_iface, guint32 vlan_id);
+GPtrArray *nm_utils_read_resolv_conf_nameservers (const char *rc_contents);
+
+typedef gboolean (NMUtilsMatchFilterFunc) (NMConnection *connection, gpointer user_data);
+
+NMConnection *nm_utils_match_connection (GSList *connections,
+ NMConnection *original,
+ gboolean device_has_carrier,
+ NMUtilsMatchFilterFunc match_filter_func,
+ gpointer match_filter_data);
+
+gint64 nm_utils_ascii_str_to_int64 (const char *str, guint base, gint64 min, gint64 max, gint64 fallback);
+
+#define NM_UTILS_NS_PER_SECOND ((gint64) 1000000000)
+gint64 nm_utils_get_monotonic_timestamp_ns (void);
+gint64 nm_utils_get_monotonic_timestamp_us (void);
+gint64 nm_utils_get_monotonic_timestamp_ms (void);
+gint32 nm_utils_get_monotonic_timestamp_s (void);
+
+const char *ASSERT_VALID_PATH_COMPONENT (const char *name) G_GNUC_WARN_UNUSED_RESULT;
+const char *nm_utils_ip6_property_path (const char *ifname, const char *property);
+
#endif /* NETWORK_MANAGER_UTILS_H */
diff --git a/src/bluez-manager/Makefile.am b/src/bluez-manager/Makefile.am
deleted file mode 100644
index fb836abf6..000000000
--- a/src/bluez-manager/Makefile.am
+++ /dev/null
@@ -1,44 +0,0 @@
-noinst_LTLIBRARIES = libbluez-manager.la
-
-libbluez_manager_la_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(BLUEZ_CFLAGS) \
- -DBINDIR=\"$(bindir)\" \
- -DDATADIR=\"$(datadir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DLOCALSTATEDIR=\"$(localstatedir)\"
-
-libbluez_manager_la_SOURCES = \
- nm-bluez-common.h \
- nm-bluez-device.c \
- nm-bluez-device.h \
- nm-bluez-manager.h
-
-if WITH_BLUEZ4
-libbluez_manager_la_SOURCES += \
- nm-bluez4-adapter.h \
- nm-bluez4-adapter.c \
- nm-bluez4-manager.c
-else
-libbluez_manager_la_SOURCES += \
- nm-bluez-manager.c
-endif
-
-libbluez_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS) \
- $(BLUEZ_LIBS)
-
diff --git a/src/bluez-manager/nm-bluez-manager.h b/src/bluez-manager/nm-bluez-manager.h
deleted file mode 100644
index 95e319c5e..000000000
--- a/src/bluez-manager/nm-bluez-manager.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
- */
-
-#ifndef NM_BLUEZ_MANAGER_H
-#define NM_BLUEZ_MANAGER_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include <config.h>
-#include "nm-connection-provider.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_BLUEZ_MANAGER (nm_bluez_manager_get_type ())
-#define NM_BLUEZ_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ_MANAGER, NMBluezManager))
-#define NM_BLUEZ_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerClass))
-#define NM_IS_BLUEZ_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_BLUEZ_MANAGER))
-#define NM_IS_BLUEZ_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ_MANAGER))
-#define NM_BLUEZ_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerClass))
-
-#define NM_BLUEZ_MANAGER_BDADDR_ADDED "bdaddr-added"
-#define NM_BLUEZ_MANAGER_BDADDR_REMOVED "bdaddr-removed"
-
-typedef struct {
- GObject parent;
-} NMBluezManager;
-
-typedef struct {
- GObjectClass parent;
-
- /* Virtual functions */
- void (*bdaddr_added) (NMBluezManager *manager,
- const char *bdaddr,
- const char *name,
- const char *object_path,
- guint uuids);
-
- void (*bdaddr_removed) (NMBluezManager *manager,
- const char *bdaddr,
- const char *object_path);
-} NMBluezManagerClass;
-
-GType nm_bluez_manager_get_type (void);
-
-NMBluezManager *nm_bluez_manager_get (NMConnectionProvider *provider);
-
-void nm_bluez_manager_query_devices (NMBluezManager *manager);
-
-#endif /* NM_BLUEZ_MANAGER_H */
-
diff --git a/src/bluez-manager/nm-bluez4-adapter.h b/src/bluez-manager/nm-bluez4-adapter.h
deleted file mode 100644
index 8e53b40d1..000000000
--- a/src/bluez-manager/nm-bluez4-adapter.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
- */
-
-#ifndef NM_BLUEZ_ADAPTER_H
-#define NM_BLUEZ_ADAPTER_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include "nm-bluez-device.h"
-#include "nm-connection-provider.h"
-
-#define NM_TYPE_BLUEZ_ADAPTER (nm_bluez_adapter_get_type ())
-#define NM_BLUEZ_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ_ADAPTER, NMBluezAdapter))
-#define NM_BLUEZ_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_BLUEZ_ADAPTER, NMBluezAdapterClass))
-#define NM_IS_BLUEZ_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_BLUEZ_ADAPTER))
-#define NM_IS_BLUEZ_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ_ADAPTER))
-#define NM_BLUEZ_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ_ADAPTER, NMBluezAdapterClass))
-
-#define NM_BLUEZ_ADAPTER_PATH "path"
-#define NM_BLUEZ_ADAPTER_ADDRESS "address"
-
-typedef struct {
- GObject parent;
-} NMBluezAdapter;
-
-typedef struct {
- GObjectClass parent;
-
- /* virtual functions */
- void (*initialized) (NMBluezAdapter *self, gboolean success);
-
- void (*device_added) (NMBluezAdapter *self, NMBluezDevice *device);
-
- void (*device_removed) (NMBluezAdapter *self, NMBluezDevice *device);
-} NMBluezAdapterClass;
-
-GType nm_bluez_adapter_get_type (void);
-
-NMBluezAdapter *nm_bluez_adapter_new (const char *path,
- NMConnectionProvider *provider);
-
-const char *nm_bluez_adapter_get_path (NMBluezAdapter *self);
-
-const char *nm_bluez_adapter_get_address (NMBluezAdapter *self);
-
-gboolean nm_bluez_adapter_get_initialized (NMBluezAdapter *self);
-
-GSList *nm_bluez_adapter_get_devices (NMBluezAdapter *self);
-
-#endif /* NM_BLUEZ_ADAPTER_H */
-
diff --git a/src/config/nm-config-device.c b/src/config/nm-config-device.c
new file mode 100644
index 000000000..6914f033a
--- /dev/null
+++ b/src/config/nm-config-device.c
@@ -0,0 +1,82 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-config-device.h"
+
+#include <net/if_arp.h>
+
+#include <nm-utils.h>
+
+G_DEFINE_INTERFACE (NMConfigDevice, nm_config_device, G_TYPE_OBJECT)
+
+static void
+nm_config_device_default_init (NMConfigDeviceInterface *iface)
+{
+}
+
+gboolean
+nm_config_device_spec_match_list (NMConfigDevice *self, const char **config_specs)
+{
+ GSList *specs = NULL;
+ gboolean match;
+ char buf[NM_UTILS_HWADDR_LEN_MAX + 1], *tmp;
+ int i;
+
+ g_return_val_if_fail (NM_IS_CONFIG_DEVICE (self), FALSE);
+
+ if (!config_specs)
+ return FALSE;
+
+ /* For compatibility, we allow an untagged MAC address, and for convenience,
+ * we allow untagged interface names as well.
+ */
+ for (i = 0; config_specs[i]; i++) {
+ if (g_strcmp0 (config_specs[i], "*") == 0)
+ specs = g_slist_prepend (specs, g_strdup (config_specs[i]));
+ else if (nm_utils_iface_valid_name (config_specs[i]))
+ specs = g_slist_prepend (specs, g_strdup_printf ("interface-name:%s", config_specs[i]));
+ else if ( nm_utils_hwaddr_aton (config_specs[i], ARPHRD_ETHER, buf)
+ || nm_utils_hwaddr_aton (config_specs[i], ARPHRD_INFINIBAND, buf)) {
+ tmp = g_ascii_strdown (config_specs[i], -1);
+ specs = g_slist_prepend (specs, g_strdup_printf ("mac:%s", tmp));
+ g_free (tmp);
+ } else
+ specs = g_slist_prepend (specs, g_strdup (config_specs[i]));
+ }
+
+ specs = g_slist_reverse (specs);
+
+ match = NM_CONFIG_DEVICE_GET_INTERFACE (self)->spec_match_list (self, specs);
+
+ g_slist_free_full (specs, g_free);
+ return match;
+}
+
+char *
+nm_config_device_get_hwaddr (NMConfigDevice *self)
+{
+ const guint8 *bytes;
+ guint len = 0;
+
+ bytes = NM_CONFIG_DEVICE_GET_INTERFACE (self)->get_hw_address (self, &len);
+ return nm_utils_hwaddr_ntoa_len (bytes, len);
+}
diff --git a/src/config/nm-config-device.h b/src/config/nm-config-device.h
new file mode 100644
index 000000000..8b5409a02
--- /dev/null
+++ b/src/config/nm-config-device.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_CONFIG_DEVICE_H
+#define NM_CONFIG_DEVICE_H
+
+#include <glib-object.h>
+
+#define NM_TYPE_CONFIG_DEVICE (nm_config_device_get_type ())
+#define NM_CONFIG_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONFIG_DEVICE, NMConfigDevice))
+#define NM_IS_CONFIG_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CONFIG_DEVICE))
+#define NM_CONFIG_DEVICE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_CONFIG_DEVICE, NMConfigDeviceInterface))
+
+typedef struct _NMConfigDevice NMConfigDevice;
+typedef struct _NMConfigDeviceInterface NMConfigDeviceInterface;
+
+struct _NMConfigDeviceInterface {
+ GTypeInterface g_iface;
+
+ /* Methods */
+ gboolean (*spec_match_list) (NMConfigDevice *device, const GSList *specs);
+ const guint8 * (* get_hw_address) (NMConfigDevice *device, guint *out_len);
+};
+
+GType nm_config_device_get_type (void);
+
+gboolean nm_config_device_spec_match_list (NMConfigDevice *device, const char **config_specs);
+char *nm_config_device_get_hwaddr (NMConfigDevice *device);
+
+#endif /* NM_CONFIG_DEVICE_H */
diff --git a/src/config/nm-config.c b/src/config/nm-config.c
new file mode 100644
index 000000000..f6688b75d
--- /dev/null
+++ b/src/config/nm-config.c
@@ -0,0 +1,604 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright (C) 2013 Thomas Bechtold <thomasbechtold@jpberlin.de>
+ */
+
+#include <config.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "nm-config.h"
+#include "nm-logging.h"
+#include "nm-utils.h"
+#include "nm-glib-compat.h"
+
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+
+#define NM_DEFAULT_SYSTEM_CONF_FILE NMCONFDIR "/NetworkManager.conf"
+#define NM_DEFAULT_SYSTEM_CONF_DIR NMCONFDIR "/conf.d"
+#define NM_OLD_SYSTEM_CONF_FILE NMCONFDIR "/nm-system-settings.conf"
+#define NM_NO_AUTO_DEFAULT_STATE_FILE NMSTATEDIR "/no-auto-default.state"
+
+typedef struct {
+ char *nm_conf_path;
+ char *config_dir;
+ char *config_description;
+ char *no_auto_default_file;
+ GKeyFile *keyfile;
+
+ char **plugins;
+ gboolean monitor_connection_files;
+ char *dhcp_client;
+ char *dns_mode;
+
+ char *log_level;
+ char *log_domains;
+
+ char *debug;
+
+ char *connectivity_uri;
+ gint connectivity_interval;
+ char *connectivity_response;
+
+ char **no_auto_default;
+ char **ignore_carrier;
+} NMConfigPrivate;
+
+static NMConfig *singleton = NULL;
+
+G_DEFINE_TYPE (NMConfig, nm_config, G_TYPE_OBJECT)
+
+#define NM_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CONFIG, NMConfigPrivate))
+
+/************************************************************************/
+
+const char *
+nm_config_get_path (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->nm_conf_path;
+}
+
+const char *
+nm_config_get_description (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->config_description;
+}
+
+const char **
+nm_config_get_plugins (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return (const char **) NM_CONFIG_GET_PRIVATE (config)->plugins;
+}
+
+gboolean
+nm_config_get_monitor_connection_files (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, FALSE);
+
+ return NM_CONFIG_GET_PRIVATE (config)->monitor_connection_files;
+}
+
+const char *
+nm_config_get_dhcp_client (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->dhcp_client;
+}
+
+const char *
+nm_config_get_dns_mode (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->dns_mode;
+}
+
+const char *
+nm_config_get_log_level (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->log_level;
+}
+
+const char *
+nm_config_get_log_domains (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->log_domains;
+}
+
+const char *
+nm_config_get_debug (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->debug;
+}
+
+const char *
+nm_config_get_connectivity_uri (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->connectivity_uri;
+}
+
+const guint
+nm_config_get_connectivity_interval (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, 0);
+
+ /* We store interval as signed internally to track whether it's
+ * set or not, but report as unsigned to callers.
+ */
+ return MAX (NM_CONFIG_GET_PRIVATE (config)->connectivity_interval, 0);
+}
+
+const char *
+nm_config_get_connectivity_response (NMConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ return NM_CONFIG_GET_PRIVATE (config)->connectivity_response;
+}
+
+char *
+nm_config_get_value (NMConfig *config, const char *group, const char *key, GError **error)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+
+ return g_key_file_get_string (priv->keyfile, group, key, error);
+}
+
+gboolean
+nm_config_get_ignore_carrier (NMConfig *config, NMConfigDevice *device)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+
+ return nm_config_device_spec_match_list (device, (const char **) priv->ignore_carrier);
+}
+
+/************************************************************************/
+
+static void
+merge_no_auto_default_state (NMConfig *config)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+ GPtrArray *updated;
+ char **list;
+ int i, j;
+ char *data;
+
+ /* If the config already matches everything, we don't need to do anything else. */
+ if (priv->no_auto_default && !g_strcmp0 (priv->no_auto_default[0], "*"))
+ return;
+
+ updated = g_ptr_array_new ();
+ if (priv->no_auto_default) {
+ for (i = 0; priv->no_auto_default[i]; i++)
+ g_ptr_array_add (updated, priv->no_auto_default[i]);
+ g_free (priv->no_auto_default);
+ }
+
+ if (g_file_get_contents (priv->no_auto_default_file, &data, NULL, NULL)) {
+ list = g_strsplit (data, "\n", -1);
+ for (i = 0; list[i]; i++) {
+ if (!*list[i])
+ continue;
+ for (j = 0; j < updated->len; j++) {
+ if (!strcmp (list[i], updated->pdata[j]))
+ break;
+ }
+ if (j == updated->len)
+ g_ptr_array_add (updated, list[i]);
+ }
+ g_free (list);
+ g_free (data);
+ }
+
+ g_ptr_array_add (updated, NULL);
+ priv->no_auto_default = (char **) g_ptr_array_free (updated, FALSE);
+}
+
+gboolean
+nm_config_get_ethernet_can_auto_default (NMConfig *config, NMConfigDevice *device)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+
+ return !nm_config_device_spec_match_list (device, (const char **) priv->no_auto_default);
+}
+
+void
+nm_config_set_ethernet_no_auto_default (NMConfig *config, NMConfigDevice *device)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+ char *current;
+ GString *updated;
+ GError *error = NULL;
+
+ if (!nm_config_get_ethernet_can_auto_default (config, device))
+ return;
+
+ updated = g_string_new (NULL);
+ if (g_file_get_contents (priv->no_auto_default_file, &current, NULL, NULL)) {
+ g_string_append (updated, current);
+ g_free (current);
+ if (updated->str[updated->len - 1] != '\n')
+ g_string_append_c (updated, '\n');
+ }
+
+ g_string_append (updated, nm_config_device_get_hwaddr (device));
+ g_string_append_c (updated, '\n');
+
+ if (!g_file_set_contents (priv->no_auto_default_file, updated->str, updated->len, &error)) {
+ nm_log_warn (LOGD_SETTINGS, "Could not update no-auto-default.state file: %s",
+ error->message);
+ g_error_free (error);
+ }
+
+ g_string_free (updated, TRUE);
+
+ merge_no_auto_default_state (config);
+}
+
+/************************************************************************/
+
+static char *cli_config_path;
+static char *cli_config_dir;
+static char *cli_no_auto_default_file;
+static char *cli_plugins;
+static char *cli_connectivity_uri;
+static int cli_connectivity_interval = -1;
+static char *cli_connectivity_response;
+
+static GOptionEntry config_options[] = {
+ { "config", 0, 0, G_OPTION_ARG_FILENAME, &cli_config_path, N_("Config file location"), N_("/path/to/config.file") },
+ { "config-dir", 0, 0, G_OPTION_ARG_FILENAME, &cli_config_dir, N_("Config directory location"), N_("/path/to/config/dir") },
+ { "no-auto-default", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &cli_no_auto_default_file, "no-auto-default.state location", NULL },
+ { "plugins", 0, 0, G_OPTION_ARG_STRING, &cli_plugins, N_("List of plugins separated by ','"), N_("plugin1,plugin2") },
+
+ /* These three are hidden for now, and should eventually just go away. */
+ { "connectivity-uri", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli_connectivity_uri, N_("An http(s) address for checking internet connectivity"), "http://example.com" },
+ { "connectivity-interval", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &cli_connectivity_interval, N_("The interval between connectivity checks (in seconds)"), "60" },
+ { "connectivity-response", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli_connectivity_response, N_("The expected start of the response"), N_("Bingo!") },
+ {NULL}
+};
+GOptionEntry *
+nm_config_get_options (void)
+{
+ return config_options;
+}
+
+/************************************************************************/
+
+static gboolean
+read_config (NMConfig *config, const char *path, GError **error)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+ GKeyFile *kf;
+ char **groups, **keys;
+ gsize ngroups, nkeys;
+ int g, k;
+
+ if (g_file_test (path, G_FILE_TEST_EXISTS) == FALSE) {
+ g_set_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND, "file %s not found", path);
+ return FALSE;
+ }
+
+ nm_log_dbg (LOGD_SETTINGS, "Reading config file '%s'", path);
+
+ kf = g_key_file_new ();
+ g_key_file_set_list_separator (kf, ',');
+ if (!g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, error)) {
+ g_key_file_free (kf);
+ return FALSE;
+ }
+
+ /* Override the current settings with the new ones */
+ groups = g_key_file_get_groups (kf, &ngroups);
+ for (g = 0; groups[g]; g++) {
+ keys = g_key_file_get_keys (kf, groups[g], &nkeys, NULL);
+ if (!keys)
+ continue;
+ for (k = 0; keys[k]; k++) {
+ int len = strlen (keys[k]);
+ if (keys[k][len - 1] == '+') {
+ char *base_key = g_strndup (keys[k], len - 1);
+ const char *old_val = g_key_file_get_value (priv->keyfile, groups[g], base_key, NULL);
+ const char *new_val = g_key_file_get_value (kf, groups[g], keys[k], NULL);
+
+ if (old_val && *old_val) {
+ char *combined = g_strconcat (old_val, ",", new_val, NULL);
+
+ g_key_file_set_value (priv->keyfile, groups[g], base_key, combined);
+ g_free (combined);
+ } else
+ g_key_file_set_value (priv->keyfile, groups[g], base_key, new_val);
+
+ g_free (base_key);
+ continue;
+ }
+
+ g_key_file_set_value (priv->keyfile, groups[g], keys[k],
+ g_key_file_get_value (kf, groups[g], keys[k], NULL));
+ }
+ }
+ g_key_file_free (kf);
+
+ return TRUE;
+}
+
+static gboolean
+find_base_config (NMConfig *config, GError **error)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+ GError *my_error = NULL;
+
+ /* Try a user-specified config file first */
+ if (cli_config_path) {
+ /* Bad user-specific config file path is a hard error */
+ if (read_config (config, cli_config_path, error)) {
+ priv->nm_conf_path = g_strdup (cli_config_path);
+ return TRUE;
+ } else
+ return FALSE;
+ }
+
+ /* Even though we prefer NetworkManager.conf, we need to check the
+ * old nm-system-settings.conf first to preserve compat with older
+ * setups. In package managed systems dropping a NetworkManager.conf
+ * onto the system would make NM use it instead of nm-system-settings.conf,
+ * changing behavior during an upgrade. We don't want that.
+ */
+
+ /* Try deprecated nm-system-settings.conf first */
+ if (read_config (config, NM_OLD_SYSTEM_CONF_FILE, &my_error)) {
+ priv->nm_conf_path = g_strdup (NM_OLD_SYSTEM_CONF_FILE);
+ return TRUE;
+ }
+
+ if (!g_error_matches (my_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
+ g_warning ("Default config file %s invalid: %s\n",
+ NM_OLD_SYSTEM_CONF_FILE,
+ my_error->message);
+ }
+ g_clear_error (&my_error);
+
+ /* Try the standard config file location next */
+ if (read_config (config, NM_DEFAULT_SYSTEM_CONF_FILE, &my_error)) {
+ priv->nm_conf_path = g_strdup (NM_DEFAULT_SYSTEM_CONF_FILE);
+ return TRUE;
+ }
+
+ if (!g_error_matches (my_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
+ g_warning ("Default config file %s invalid: %s\n",
+ NM_DEFAULT_SYSTEM_CONF_FILE,
+ my_error->message);
+ g_propagate_error (error, my_error);
+ return FALSE;
+ }
+
+ /* If for some reason no config file exists, use the default
+ * config file path.
+ */
+ priv->nm_conf_path = g_strdup (NM_DEFAULT_SYSTEM_CONF_FILE);
+ g_warning ("No config file found or given; using %s\n",
+ NM_DEFAULT_SYSTEM_CONF_FILE);
+ return TRUE;
+}
+
+/************************************************************************/
+
+NMConfig *
+nm_config_get (void)
+{
+ g_assert (singleton);
+ return singleton;
+}
+
+static int
+sort_asciibetically (gconstpointer a, gconstpointer b)
+{
+ const char *s1 = *(const char **)a;
+ const char *s2 = *(const char **)b;
+
+ return strcmp (s1, s2);
+}
+
+/* call this function only once! */
+NMConfig *
+nm_config_new (GError **error)
+{
+ NMConfigPrivate *priv = NULL;
+ GFile *dir;
+ GFileEnumerator *direnum;
+ GFileInfo *info;
+ GPtrArray *confs;
+ const char *name;
+ char *value;
+ int i;
+ GString *config_description;
+
+ g_assert (!singleton);
+ singleton = NM_CONFIG (g_object_new (NM_TYPE_CONFIG, NULL));
+ priv = NM_CONFIG_GET_PRIVATE (singleton);
+
+ /* First read the base config file */
+ if (!find_base_config (singleton, error)) {
+ g_object_unref (singleton);
+ singleton = NULL;
+ return NULL;
+ }
+
+ /* Now read the overrides in the config dir */
+ if (cli_config_dir)
+ priv->config_dir = g_strdup (cli_config_dir);
+ else
+ priv->config_dir = g_strdup (NM_DEFAULT_SYSTEM_CONF_DIR);
+
+ confs = g_ptr_array_new_with_free_func (g_free);
+ config_description = g_string_new (priv->nm_conf_path);
+ dir = g_file_new_for_path (priv->config_dir);
+ direnum = g_file_enumerate_children (dir, G_FILE_ATTRIBUTE_STANDARD_NAME, 0, NULL, NULL);
+ if (direnum) {
+ while ((info = g_file_enumerator_next_file (direnum, NULL, NULL))) {
+ name = g_file_info_get_name (info);
+ if (g_str_has_suffix (name, ".conf")) {
+ g_ptr_array_add (confs, g_build_filename (priv->config_dir, name, NULL));
+ if (confs->len == 1)
+ g_string_append (config_description, " and conf.d: ");
+ else
+ g_string_append (config_description, ", ");
+ g_string_append (config_description, name);
+ }
+ g_object_unref (info);
+ }
+ g_object_unref (direnum);
+ }
+ g_object_unref (dir);
+
+ g_ptr_array_sort (confs, sort_asciibetically);
+ priv->config_description = g_string_free (config_description, FALSE);
+ for (i = 0; i < confs->len; i++) {
+ if (!read_config (singleton, confs->pdata[i], error)) {
+ g_object_unref (singleton);
+ singleton = NULL;
+ break;
+ }
+ }
+ g_ptr_array_unref (confs);
+ if (!singleton)
+ return FALSE;
+
+ /* Handle no-auto-default key and state file */
+ priv->no_auto_default = g_key_file_get_string_list (priv->keyfile, "main", "no-auto-default", NULL, NULL);
+ if (cli_no_auto_default_file)
+ priv->no_auto_default_file = g_strdup (cli_no_auto_default_file);
+ else
+ priv->no_auto_default_file = g_strdup (NM_NO_AUTO_DEFAULT_STATE_FILE);
+ merge_no_auto_default_state (singleton);
+
+ /* Now let command-line options override the config files, and fill in priv. */
+ if (cli_plugins && cli_plugins[0])
+ g_key_file_set_value (priv->keyfile, "main", "plugins", cli_plugins);
+ priv->plugins = g_key_file_get_string_list (priv->keyfile, "main", "plugins", NULL, NULL);
+
+ value = g_key_file_get_value (priv->keyfile, "main", "monitor-connection-files", NULL);
+ if (value) {
+ if (!strcmp (value, "true") || !strcmp (value, "yes") || !strcmp (value, "on"))
+ priv->monitor_connection_files = TRUE;
+ else if (!strcmp (value, "false") || !strcmp (value, "no") || !strcmp (value, "off"))
+ priv->monitor_connection_files = FALSE;
+ else {
+ g_warning ("Unrecognized value for main.monitor-connection-files: %s. Assuming 'false'", value);
+ priv->monitor_connection_files = FALSE;
+ }
+ g_free (value);
+ } else
+ priv->monitor_connection_files = FALSE;
+
+ priv->dhcp_client = g_key_file_get_value (priv->keyfile, "main", "dhcp", NULL);
+ priv->dns_mode = g_key_file_get_value (priv->keyfile, "main", "dns", NULL);
+
+ priv->log_level = g_key_file_get_value (priv->keyfile, "logging", "level", NULL);
+ priv->log_domains = g_key_file_get_value (priv->keyfile, "logging", "domains", NULL);
+
+ priv->debug = g_key_file_get_value (priv->keyfile, "main", "debug", NULL);
+
+ if (cli_connectivity_uri && cli_connectivity_uri[0])
+ g_key_file_set_value (priv->keyfile, "connectivity", "uri", cli_connectivity_uri);
+ priv->connectivity_uri = g_key_file_get_value (priv->keyfile, "connectivity", "uri", NULL);
+
+ if (cli_connectivity_interval >= 0)
+ g_key_file_set_integer (priv->keyfile, "connectivity", "interval", cli_connectivity_interval);
+ priv->connectivity_interval = g_key_file_get_integer (priv->keyfile, "connectivity", "interval", NULL);
+
+ if (cli_connectivity_response && cli_connectivity_response[0])
+ g_key_file_set_value (priv->keyfile, "connectivity", "response", cli_connectivity_response);
+ priv->connectivity_response = g_key_file_get_value (priv->keyfile, "connectivity", "response", NULL);
+
+ priv->ignore_carrier = g_key_file_get_string_list (priv->keyfile, "main", "ignore-carrier", NULL, NULL);
+
+ return singleton;
+}
+
+static void
+nm_config_init (NMConfig *config)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+
+ priv->keyfile = g_key_file_new ();
+ g_key_file_set_list_separator (priv->keyfile, ',');
+
+ priv->connectivity_interval = -1;
+}
+
+static void
+finalize (GObject *gobject)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (gobject);
+
+ g_free (priv->nm_conf_path);
+ g_free (priv->config_dir);
+ g_free (priv->config_description);
+ g_free (priv->no_auto_default_file);
+ g_clear_pointer (&priv->keyfile, g_key_file_unref);
+ g_strfreev (priv->plugins);
+ g_free (priv->dhcp_client);
+ g_free (priv->dns_mode);
+ g_free (priv->log_level);
+ g_free (priv->log_domains);
+ g_free (priv->debug);
+ g_free (priv->connectivity_uri);
+ g_free (priv->connectivity_response);
+ g_strfreev (priv->no_auto_default);
+ g_strfreev (priv->ignore_carrier);
+
+ singleton = NULL;
+
+ g_clear_pointer (&cli_config_path, g_free);
+ g_clear_pointer (&cli_config_dir, g_free);
+ g_clear_pointer (&cli_no_auto_default_file, g_free);
+ g_clear_pointer (&cli_plugins, g_free);
+ g_clear_pointer (&cli_connectivity_uri, g_free);
+ g_clear_pointer (&cli_connectivity_response, g_free);
+
+ G_OBJECT_CLASS (nm_config_parent_class)->finalize (gobject);
+}
+
+
+static void
+nm_config_class_init (NMConfigClass *config_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (config_class);
+
+ g_type_class_add_private (config_class, sizeof (NMConfigPrivate));
+ object_class->finalize = finalize;
+}
+
diff --git a/src/config/nm-config.h b/src/config/nm-config.h
new file mode 100644
index 000000000..2e335c716
--- /dev/null
+++ b/src/config/nm-config.h
@@ -0,0 +1,78 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright (C) 2013 Thomas Bechtold <thomasbechtold@jpberlin.de>
+ */
+
+#ifndef NM_CONFIG_H
+#define NM_CONFIG_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "nm-config-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_CONFIG (nm_config_get_type ())
+#define NM_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONFIG, NMConfig))
+#define NM_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CONFIG, NMConfigClass))
+#define NM_IS_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CONFIG))
+#define NM_IS_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CONFIG))
+#define NM_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CONFIG, NMConfigClass))
+
+typedef struct {
+ GObject parent;
+} NMConfig;
+
+typedef struct {
+ GObjectClass parent;
+} NMConfigClass;
+
+GType nm_config_get_type (void);
+
+NMConfig *nm_config_get (void);
+
+const char *nm_config_get_path (NMConfig *config);
+const char *nm_config_get_description (NMConfig *config);
+const char **nm_config_get_plugins (NMConfig *config);
+gboolean nm_config_get_monitor_connection_files (NMConfig *config);
+const char *nm_config_get_dhcp_client (NMConfig *config);
+const char *nm_config_get_dns_mode (NMConfig *config);
+const char *nm_config_get_log_level (NMConfig *config);
+const char *nm_config_get_log_domains (NMConfig *config);
+const char *nm_config_get_debug (NMConfig *config);
+const char *nm_config_get_connectivity_uri (NMConfig *config);
+const guint nm_config_get_connectivity_interval (NMConfig *config);
+const char *nm_config_get_connectivity_response (NMConfig *config);
+
+gboolean nm_config_get_ethernet_can_auto_default (NMConfig *config, NMConfigDevice *device);
+void nm_config_set_ethernet_no_auto_default (NMConfig *config, NMConfigDevice *device);
+
+gboolean nm_config_get_ignore_carrier (NMConfig *config, NMConfigDevice *device);
+
+char *nm_config_get_value (NMConfig *config, const char *group, const char *key, GError **error);
+
+/* for main.c only */
+GOptionEntry *nm_config_get_options (void);
+NMConfig *nm_config_new (GError **error);
+
+G_END_DECLS
+
+#endif /* NM_CONFIG_H */
+
diff --git a/src/config/tests/Makefile.am b/src/config/tests/Makefile.am
new file mode 100644
index 000000000..6e64812b4
--- /dev/null
+++ b/src/config/tests/Makefile.am
@@ -0,0 +1,30 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src/config \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ -DSRCDIR=\""$(srcdir)"\"
+
+noinst_PROGRAMS = \
+ test-config
+
+test_config_SOURCES = \
+ nm-test-device.c \
+ nm-test-device.h \
+ test-config.c
+
+test_config_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+TESTS = test-config
+
+EXTRA_DIST = \
+ NetworkManager.conf \
+ bad.conf \
+ conf.d/00-overrides.conf \
+ conf.d/10-more.conf \
+ conf.d/90-last.conf
diff --git a/src/posix-signals/Makefile.in b/src/config/tests/Makefile.in
index e824a1382..4ac0ce153 100644
--- a/src/posix-signals/Makefile.in
+++ b/src/config/tests/Makefile.in
@@ -78,11 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/posix-signals
+noinst_PROGRAMS = test-config$(EXEEXT)
+TESTS = test-config$(EXEEXT)
+subdir = src/config/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,12 +103,11 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libnm_posix_signals_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_libnm_posix_signals_la_OBJECTS = \
- libnm_posix_signals_la-nm-posix-signals.lo
-libnm_posix_signals_la_OBJECTS = $(am_libnm_posix_signals_la_OBJECTS)
+PROGRAMS = $(noinst_PROGRAMS)
+am_test_config_OBJECTS = nm-test-device.$(OBJEXT) \
+ test-config.$(OBJEXT)
+test_config_OBJECTS = $(am_test_config_OBJECTS)
+test_config_DEPENDENCIES = $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -144,8 +146,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libnm_posix_signals_la_SOURCES)
-DIST_SOURCES = $(libnm_posix_signals_la_SOURCES)
+SOURCES = $(test_config_SOURCES)
+DIST_SOURCES = $(test_config_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -170,6 +172,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -196,12 +220,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -226,7 +253,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -271,12 +297,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -293,6 +323,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -320,11 +352,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -339,6 +376,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -401,6 +439,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -411,18 +450,32 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libnm-posix-signals.la
-libnm_posix_signals_la_SOURCES = \
- nm-posix-signals.c \
- nm-posix-signals.h
-
-libnm_posix_signals_la_CPPFLAGS = \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src/config \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- -DLIBEXECDIR=\"$(libexecdir)\"
+ -DSRCDIR=\""$(srcdir)"\"
+
+test_config_SOURCES = \
+ nm-test-device.c \
+ nm-test-device.h \
+ test-config.c
+
+test_config_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
-libnm_posix_signals_la_LIBADD = \
- -ldl \
- $(GLIB_LIBS)
+EXTRA_DIST = \
+ NetworkManager.conf \
+ bad.conf \
+ conf.d/00-overrides.conf \
+ conf.d/10-more.conf \
+ conf.d/90-last.conf
all: all-am
@@ -437,9 +490,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/posix-signals/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/config/tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/posix-signals/Makefile
+ $(AUTOMAKE) --gnu src/config/tests/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -459,19 +512,18 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
-libnm-posix-signals.la: $(libnm_posix_signals_la_OBJECTS) $(libnm_posix_signals_la_DEPENDENCIES) $(EXTRA_libnm_posix_signals_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libnm_posix_signals_la_OBJECTS) $(libnm_posix_signals_la_LIBADD) $(LIBS)
+test-config$(EXEEXT): $(test_config_OBJECTS) $(test_config_DEPENDENCIES) $(EXTRA_test_config_DEPENDENCIES)
+ @rm -f test-config$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_config_OBJECTS) $(test_config_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -479,7 +531,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_posix_signals_la-nm-posix-signals.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-test-device.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-config.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -502,13 +555,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_posix_signals_la-nm-posix-signals.lo: nm-posix-signals.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_posix_signals_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_posix_signals_la-nm-posix-signals.lo -MD -MP -MF $(DEPDIR)/libnm_posix_signals_la-nm-posix-signals.Tpo -c -o libnm_posix_signals_la-nm-posix-signals.lo `test -f 'nm-posix-signals.c' || echo '$(srcdir)/'`nm-posix-signals.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_posix_signals_la-nm-posix-signals.Tpo $(DEPDIR)/libnm_posix_signals_la-nm-posix-signals.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-posix-signals.c' object='libnm_posix_signals_la-nm-posix-signals.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_posix_signals_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_posix_signals_la-nm-posix-signals.lo `test -f 'nm-posix-signals.c' || echo '$(srcdir)/'`nm-posix-signals.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -567,6 +613,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -598,8 +737,9 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
@@ -633,7 +773,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
@@ -702,11 +842,11 @@ ps-am:
uninstall-am:
-.MAKE: install-am install-strip
+.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
diff --git a/src/config/tests/NetworkManager.conf b/src/config/tests/NetworkManager.conf
new file mode 100644
index 000000000..401ba48a7
--- /dev/null
+++ b/src/config/tests/NetworkManager.conf
@@ -0,0 +1,15 @@
+[main]
+dhcp=dhclient
+plugins=foo,bar,baz
+no-auto-default=11:11:11:11:11:11
+
+[logging]
+level=INFO
+
+[connectivity]
+uri=http://example.com
+interval=100
+response=Hello
+
+[extra-section]
+extra-key=some value
diff --git a/src/config/tests/bad.conf b/src/config/tests/bad.conf
new file mode 100644
index 000000000..20d6a67a1
--- /dev/null
+++ b/src/config/tests/bad.conf
@@ -0,0 +1 @@
+This is not a keyfile.
diff --git a/src/config/tests/conf.d/00-overrides.conf b/src/config/tests/conf.d/00-overrides.conf
new file mode 100644
index 000000000..0aa19d484
--- /dev/null
+++ b/src/config/tests/conf.d/00-overrides.conf
@@ -0,0 +1,11 @@
+[main]
+dhcp=dhcpcd
+
+[logging]
+domains=PLATFORM,DNS,WIFI
+
+[order]
+a=0
+b=0
+c=0
+
diff --git a/src/config/tests/conf.d/10-more.conf b/src/config/tests/conf.d/10-more.conf
new file mode 100644
index 000000000..b1424a4bc
--- /dev/null
+++ b/src/config/tests/conf.d/10-more.conf
@@ -0,0 +1,11 @@
+[main]
+extra=hello
+new+=something
+
+[connectivity]
+uri=http://example.net
+
+[order]
+a=10
+b=10
+
diff --git a/src/config/tests/conf.d/90-last.conf b/src/config/tests/conf.d/90-last.conf
new file mode 100644
index 000000000..dc1de394f
--- /dev/null
+++ b/src/config/tests/conf.d/90-last.conf
@@ -0,0 +1,5 @@
+[main]
+plugins+=one,two
+
+[order]
+a=90
diff --git a/src/config/tests/nm-test-device.c b/src/config/tests/nm-test-device.c
new file mode 100644
index 000000000..b671f2558
--- /dev/null
+++ b/src/config/tests/nm-test-device.c
@@ -0,0 +1,101 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <netinet/ether.h>
+
+#include "nm-test-device.h"
+#include "nm-config-device.h"
+#include "nm-utils.h"
+
+static void nm_test_device_config_device_interface_init (NMConfigDeviceInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (NMTestDevice, nm_test_device, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_CONFIG_DEVICE, nm_test_device_config_device_interface_init))
+
+static void
+nm_test_device_init (NMTestDevice *self)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMTestDevice *self = NM_TEST_DEVICE (object);
+
+ g_free (self->hwaddr);
+ g_free (self->hwaddr_bytes);
+
+ G_OBJECT_CLASS (nm_test_device_parent_class)->finalize (object);
+}
+
+static void
+nm_test_device_class_init (NMTestDeviceClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = finalize;
+}
+
+static gboolean
+spec_match_list (NMConfigDevice *device, const GSList *specs)
+{
+ NMTestDevice *self = NM_TEST_DEVICE (device);
+ const GSList *iter;
+ const char *spec;
+
+ for (iter = specs; iter; iter = iter->next) {
+ spec = iter->data;
+ if (g_str_has_prefix (spec, "mac:") && !strcmp (spec + 4, self->hwaddr))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static const guint8 *
+get_hw_address (NMConfigDevice *device, guint *out_len)
+{
+ NMTestDevice *self = NM_TEST_DEVICE (device);
+
+ if (out_len)
+ *out_len = ETH_ALEN;
+ return self->hwaddr_bytes;
+}
+
+static void
+nm_test_device_config_device_interface_init (NMConfigDeviceInterface *iface)
+{
+ iface->spec_match_list = spec_match_list;
+ iface->get_hw_address = get_hw_address;
+}
+
+NMTestDevice *
+nm_test_device_new (const char *hwaddr)
+{
+ NMTestDevice *self = g_object_new (NM_TYPE_TEST_DEVICE, NULL);
+
+ self->hwaddr = g_strdup (hwaddr);
+ self->hwaddr_bytes = g_malloc (ETH_ALEN);
+ nm_utils_hwaddr_aton (hwaddr, ARPHRD_ETHER, self->hwaddr_bytes);
+
+ return self;
+}
diff --git a/src/config/tests/nm-test-device.h b/src/config/tests/nm-test-device.h
new file mode 100644
index 000000000..ad63bf5fd
--- /dev/null
+++ b/src/config/tests/nm-test-device.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_TEST_DEVICE_H
+#define NM_TEST_DEVICE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_TEST_DEVICE (nm_test_device_get_type ())
+#define NM_TEST_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_TEST_DEVICE, NMTestDevice))
+#define NM_TEST_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_TEST_DEVICE, NMTestDeviceClass))
+#define NM_IS_TEST_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_TEST_DEVICE))
+#define NM_IS_TEST_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_TEST_DEVICE))
+#define NM_TEST_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_TEST_DEVICE, NMTestDeviceClass))
+
+typedef struct {
+ GObject parent;
+
+ char *hwaddr;
+ guint8 *hwaddr_bytes;
+} NMTestDevice;
+
+typedef struct {
+ GObjectClass parent;
+} NMTestDeviceClass;
+
+GType nm_test_device_get_type (void);
+
+NMTestDevice *nm_test_device_new (const char *hwaddr);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_H */
diff --git a/src/config/tests/test-config.c b/src/config/tests/test-config.c
new file mode 100644
index 000000000..fb6baacca
--- /dev/null
+++ b/src/config/tests/test-config.c
@@ -0,0 +1,305 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <unistd.h>
+
+#include <glib.h>
+
+#include <nm-config.h>
+#include "nm-test-device.h"
+
+static void
+setup_config (const char *config_file, const char *config_dir, ...)
+{
+ va_list ap;
+ GPtrArray *args;
+ char **argv, *arg;
+ int argc;
+ GOptionContext *context;
+ gboolean success;
+
+ args = g_ptr_array_new ();
+ g_ptr_array_add (args, "test-config");
+ g_ptr_array_add (args, "--config");
+ g_ptr_array_add (args, (char *)config_file);
+ g_ptr_array_add (args, "--config-dir");
+ g_ptr_array_add (args, (char *)config_dir);
+
+ va_start (ap, config_dir);
+ while ((arg = va_arg (ap, char *)))
+ g_ptr_array_add (args, arg);
+ va_end (ap);
+
+ argv = (char **)args->pdata;
+ argc = args->len;
+
+ context = g_option_context_new (NULL);
+ g_option_context_add_main_entries (context, nm_config_get_options (), NULL);
+ success = g_option_context_parse (context, &argc, &argv, NULL);
+ g_option_context_free (context);
+
+ if (!success)
+ g_printerr ("Invalid options.\n");
+
+ g_ptr_array_free (args, TRUE);
+}
+
+static void
+test_config_simple (void)
+{
+ NMConfig *config;
+ GError *error = NULL;
+ const char **plugins;
+ char *value;
+
+ setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir", NULL);
+ config = nm_config_new (&error);
+ g_assert_no_error (error);
+
+ g_assert_cmpstr (nm_config_get_path (config), ==, SRCDIR "/NetworkManager.conf");
+ g_assert_cmpstr (nm_config_get_dhcp_client (config), ==, "dhclient");
+ g_assert_cmpstr (nm_config_get_log_level (config), ==, "INFO");
+ g_assert_cmpint (nm_config_get_connectivity_interval (config), ==, 100);
+
+ plugins = nm_config_get_plugins (config);
+ g_assert_cmpint (g_strv_length ((char **)plugins), ==, 3);
+ g_assert_cmpstr (plugins[0], ==, "foo");
+ g_assert_cmpstr (plugins[1], ==, "bar");
+ g_assert_cmpstr (plugins[2], ==, "baz");
+
+ value = nm_config_get_value (config, "extra-section", "extra-key", NULL);
+ g_assert_cmpstr (value, ==, "some value");
+ g_free (value);
+
+ value = nm_config_get_value (config, "extra-section", "no-key", &error);
+ g_assert (!value);
+ g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND);
+ g_clear_error (&error);
+
+ value = nm_config_get_value (config, "no-section", "no-key", &error);
+ g_assert (!value);
+ g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND);
+ g_clear_error (&error);
+
+ g_object_unref (config);
+}
+
+static void
+test_config_non_existent (void)
+{
+ NMConfig *config;
+ GError *error = NULL;
+
+ setup_config (SRCDIR "/no-such-file", "/no/such/dir", NULL);
+ config = nm_config_new (&error);
+ g_assert (!config);
+ g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND);
+}
+
+static void
+test_config_parse_error (void)
+{
+ NMConfig *config;
+ GError *error = NULL;
+
+ setup_config (SRCDIR "/bad.conf", "/no/such/dir", NULL);
+ config = nm_config_new (&error);
+ g_assert (!config);
+ g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE);
+}
+
+static void
+test_config_override (void)
+{
+ NMConfig *config;
+ GError *error = NULL;
+ const char **plugins;
+
+ setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir",
+ "--plugins", "alpha,beta,gamma,delta",
+ "--connectivity-interval", "12",
+ NULL);
+ config = nm_config_new (&error);
+ g_assert_no_error (error);
+
+ g_assert_cmpstr (nm_config_get_path (config), ==, SRCDIR "/NetworkManager.conf");
+ g_assert_cmpstr (nm_config_get_dhcp_client (config), ==, "dhclient");
+ g_assert_cmpstr (nm_config_get_log_level (config), ==, "INFO");
+ g_assert_cmpint (nm_config_get_connectivity_interval (config), ==, 12);
+
+ plugins = nm_config_get_plugins (config);
+ g_assert_cmpint (g_strv_length ((char **)plugins), ==, 4);
+ g_assert_cmpstr (plugins[0], ==, "alpha");
+ g_assert_cmpstr (plugins[1], ==, "beta");
+ g_assert_cmpstr (plugins[2], ==, "gamma");
+ g_assert_cmpstr (plugins[3], ==, "delta");
+
+ g_object_unref (config);
+}
+
+static void
+test_config_no_auto_default (void)
+{
+ NMConfig *config;
+ GError *error = NULL;
+ int fd, nwrote;
+ char *state_file;
+ NMTestDevice *dev1, *dev2, *dev3, *dev4;
+
+ fd = g_file_open_tmp (NULL, &state_file, &error);
+ g_assert_no_error (error);
+
+ nwrote = write (fd, "22:22:22:22:22:22\n", 18);
+ g_assert_cmpint (nwrote, ==, 18);
+ nwrote = write (fd, "44:44:44:44:44:44\n", 18);
+ g_assert_cmpint (nwrote, ==, 18);
+ close (fd);
+
+ setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir",
+ "--no-auto-default", state_file,
+ NULL);
+ config = nm_config_new (&error);
+ g_assert_no_error (error);
+
+ dev1 = nm_test_device_new ("11:11:11:11:11:11");
+ dev2 = nm_test_device_new ("22:22:22:22:22:22");
+ dev3 = nm_test_device_new ("33:33:33:33:33:33");
+ dev4 = nm_test_device_new ("44:44:44:44:44:44");
+
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev1)));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev2)));
+ g_assert (nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev3)));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev4)));
+
+ nm_config_set_ethernet_no_auto_default (config, NM_CONFIG_DEVICE (dev3));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev3)));
+
+ g_object_unref (config);
+
+ setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir",
+ "--no-auto-default", state_file,
+ NULL);
+ config = nm_config_new (&error);
+ g_assert_no_error (error);
+
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev1)));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev2)));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev3)));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, NM_CONFIG_DEVICE (dev4)));
+
+ g_object_unref (config);
+
+ g_object_unref (dev1);
+ g_object_unref (dev2);
+ g_object_unref (dev3);
+ g_object_unref (dev4);
+
+ unlink (state_file);
+ g_free (state_file);
+}
+
+static void
+test_config_confdir (void)
+{
+ NMConfig *config;
+ GError *error = NULL;
+ const char **plugins;
+ char *value;
+
+ setup_config (SRCDIR "/NetworkManager.conf", SRCDIR "/conf.d", NULL);
+ config = nm_config_new (&error);
+ g_assert_no_error (error);
+
+ g_assert_cmpstr (nm_config_get_path (config), ==, SRCDIR "/NetworkManager.conf");
+ g_assert_cmpstr (nm_config_get_dhcp_client (config), ==, "dhcpcd");
+ g_assert_cmpstr (nm_config_get_log_level (config), ==, "INFO");
+ g_assert_cmpstr (nm_config_get_log_domains (config), ==, "PLATFORM,DNS,WIFI");
+ g_assert_cmpstr (nm_config_get_connectivity_uri (config), ==, "http://example.net");
+ g_assert_cmpint (nm_config_get_connectivity_interval (config), ==, 100);
+
+ plugins = nm_config_get_plugins (config);
+ g_assert_cmpint (g_strv_length ((char **)plugins), ==, 5);
+ g_assert_cmpstr (plugins[0], ==, "foo");
+ g_assert_cmpstr (plugins[1], ==, "bar");
+ g_assert_cmpstr (plugins[2], ==, "baz");
+ g_assert_cmpstr (plugins[3], ==, "one");
+ g_assert_cmpstr (plugins[4], ==, "two");
+
+ value = nm_config_get_value (config, "main", "extra", NULL);
+ g_assert_cmpstr (value, ==, "hello");
+ g_free (value);
+
+ value = nm_config_get_value (config, "main", "new", NULL);
+ g_assert_cmpstr (value, ==, "something"); /* not ",something" */
+ g_free (value);
+
+ value = nm_config_get_value (config, "order", "a", NULL);
+ g_assert_cmpstr (value, ==, "90");
+ g_free (value);
+ value = nm_config_get_value (config, "order", "b", NULL);
+ g_assert_cmpstr (value, ==, "10");
+ g_free (value);
+ value = nm_config_get_value (config, "order", "c", NULL);
+ g_assert_cmpstr (value, ==, "0");
+ g_free (value);
+
+ g_object_unref (config);
+}
+
+static void
+test_config_confdir_parse_error (void)
+{
+ NMConfig *config;
+ GError *error = NULL;
+
+ /* Using SRCDIR as the conf dir will pick up bad.conf */
+ setup_config (SRCDIR "/NetworkManager.conf", SRCDIR, NULL);
+ config = nm_config_new (&error);
+ g_assert (!config);
+ g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE);
+}
+
+int
+main (int argc, char **argv)
+{
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/config/simple", test_config_simple);
+ g_test_add_func ("/config/non-existent", test_config_non_existent);
+ g_test_add_func ("/config/parse-error", test_config_parse_error);
+ g_test_add_func ("/config/no-auto-default", test_config_no_auto_default);
+ g_test_add_func ("/config/confdir", test_config_confdir);
+ g_test_add_func ("/config/confdir-parse-error", test_config_confdir_parse_error);
+
+ /* This one has to come last, because it leaves its values in
+ * nm-config.c's global variables, and there's no way to reset
+ * those to NULL.
+ */
+ g_test_add_func ("/config/override", test_config_override);
+
+ return g_test_run ();
+}
+
diff --git a/src/devices/adsl/Makefile.am b/src/devices/adsl/Makefile.am
new file mode 100644
index 000000000..0430f47d0
--- /dev/null
+++ b/src/devices/adsl/Makefile.am
@@ -0,0 +1,63 @@
+include $(GLIB_MAKEFILE)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/ppp-manager \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-adsl"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
+GLIB_GENERATED = nm-adsl-enum-types.h nm-adsl-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_adsl_enum_types_sources = $(srcdir)/nm-device-adsl.h
+
+nm-device-adsl-glue.h: $(top_srcdir)/introspection/nm-device-adsl.xml
+ dbus-binding-tool --prefix=nm_device_adsl --mode=glib-server --output=$@ $<
+
+BUILT_SOURCES = $(GLIB_GENERATED) nm-device-adsl-glue.h
+
+pkglib_LTLIBRARIES = libnm-device-plugin-adsl.la
+
+SYMBOL_VIS_FILE=$(srcdir)/exports.ver
+
+libnm_device_plugin_adsl_la_SOURCES = \
+ nm-atm-manager.c \
+ nm-atm-manager.h \
+ nm-device-adsl.c \
+ nm-device-adsl.h \
+ \
+ $(BUILT_SOURCES)
+
+libnm_device_plugin_adsl_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_adsl_la_LIBADD = \
+ $(DBUS_LIBS) \
+ $(GUDEV_LIBS)
+
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+
+if ENABLE_TESTS
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-adsl.so $(SYMBOL_VIS_FILE)
+
+endif
+
diff --git a/src/generated/Makefile.in b/src/devices/adsl/Makefile.in
index 350bf7f70..708a45d2c 100644
--- a/src/generated/Makefile.in
+++ b/src/devices/adsl/Makefile.in
@@ -78,14 +78,12 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@WITH_WIMAX_TRUE@am__append_1 = $(top_srcdir)/src/wimax/*.[ch]
-@WITH_WIMAX_TRUE@am__append_2 = -I$(top_srcdir)/src/wimax
-@WITH_MODEM_MANAGER_1_TRUE@am__append_3 = $(MM_GLIB_CFLAGS)
-subdir = src/generated
+subdir = src/devices/adsl
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -103,16 +101,52 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libnm_generated_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_libnm_generated_la_OBJECTS = libnm_generated_la-nm-enum-types.lo \
- libnm_generated_la-nm-marshal.lo
-libnm_generated_la_OBJECTS = $(am_libnm_generated_la_OBJECTS)
+libnm_device_plugin_adsl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am__objects_1 = nm-adsl-enum-types.lo
+am__objects_2 = $(am__objects_1)
+am_libnm_device_plugin_adsl_la_OBJECTS = nm-atm-manager.lo \
+ nm-device-adsl.lo $(am__objects_2)
+libnm_device_plugin_adsl_la_OBJECTS = \
+ $(am_libnm_device_plugin_adsl_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+libnm_device_plugin_adsl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libnm_device_plugin_adsl_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -147,8 +181,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libnm_generated_la_SOURCES)
-DIST_SOURCES = $(libnm_generated_la_SOURCES)
+SOURCES = $(libnm_device_plugin_adsl_la_SOURCES)
+DIST_SOURCES = $(libnm_device_plugin_adsl_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -199,12 +233,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -229,7 +266,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -274,12 +310,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -296,6 +336,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -323,11 +365,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -342,6 +389,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -404,6 +452,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -414,67 +463,51 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libnm-generated.la
-libnm_generated_la_SOURCES = \
- nm-enum-types.c \
- nm-enum-types.h \
- nm-marshal.c \
- nm-marshal.h
-
-nm_daemon_all_sources = $(top_srcdir)/src/*.[ch] \
- $(top_srcdir)/src/logging/*.[ch] \
- $(top_srcdir)/src/dns-manager/*.[ch] \
- $(top_srcdir)/src/vpn-manager/*.[ch] \
- $(top_srcdir)/src/dhcp-manager/*.[ch] \
- $(top_srcdir)/src/ip6-manager/*.[ch] \
- $(top_srcdir)/src/supplicant-manager/*.[ch] \
- $(top_srcdir)/src/ppp-manager/*.[ch] \
- $(top_srcdir)/src/dnsmasq-manager/*.[ch] \
- $(top_srcdir)/src/modem-manager/*.[ch] \
- $(top_srcdir)/src/bluez-manager/*.[ch] \
- $(top_srcdir)/src/firewall-manager/*.[ch] \
- $(top_srcdir)/src/settings/*.[ch] $(am__append_1)
-nm_daemon_sources_no_bindings = \
- $(filter-out %-glue.h %-bindings.h, $(wildcard $(nm_daemon_all_sources)))
-
-# Don't include ModemManager1-specific headers if we're not compiling with
-# ModemManager1 support.
-@WITH_MODEM_MANAGER_1_FALSE@nm_daemon_sources = \
-@WITH_MODEM_MANAGER_1_FALSE@ $(filter-out $(top_srcdir)/src/modem-manager/nm-modem-broadband.h, $(wildcard $(nm_daemon_sources_no_bindings)))
-
-
-# We filter out this file, which doesn't have any enum, and which clashes
-# with ModemManager1-defined symbols
-@WITH_MODEM_MANAGER_1_TRUE@nm_daemon_sources = \
-@WITH_MODEM_MANAGER_1_TRUE@ $(filter-out $(top_srcdir)/src/modem-manager/nm-modem-types.h, $(wildcard $(nm_daemon_sources_no_bindings)))
-
-GLIB_GENERATED = nm-enum-types.h nm-enum-types.c nm-marshal.h \
- nm-marshal.c
-nm_enum_types_sources = $(nm_daemon_sources)
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/ppp-manager \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-adsl"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
+GLIB_GENERATED = nm-adsl-enum-types.h nm-adsl-enum-types.c
GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
-nm_marshal_sources = $(nm_daemon_sources)
-libnm_generated_la_CPPFLAGS = -I${top_srcdir}/include \
- -I${top_builddir}/include -I${top_srcdir}/src \
- -I${top_srcdir}/src/logging -I${top_srcdir}/src/dns-manager \
- -I${top_srcdir}/src/vpn-manager \
- -I${top_srcdir}/src/dhcp-manager \
- -I${top_srcdir}/src/ip6-manager \
- -I${top_srcdir}/src/supplicant-manager \
- -I${top_srcdir}/src/ppp-manager \
- -I${top_srcdir}/src/dnsmasq-manager \
- -I${top_srcdir}/src/modem-manager \
- -I$(top_srcdir)/src/bluez-manager \
- -I$(top_srcdir)/src/firewall-manager \
- -I$(top_srcdir)/src/settings -I$(top_srcdir)/src/wifi \
- -I$(top_srcdir)/libnm-util $(DBUS_CFLAGS) $(GLIB_CFLAGS) \
- $(GUDEV_CFLAGS) $(LIBNL_CFLAGS) $(POLKIT_CFLAGS) \
- $(SYSTEMD_LOGIN_CFLAGS) $(IWMX_SDK_CFLAGS) $(am__append_2) \
- $(am__append_3)
-libnm_generated_la_LIBADD = \
- $(GLIB_LIBS)
-
-BUILT_SOURCES = $(GLIB_GENERATED)
+nm_adsl_enum_types_sources = $(srcdir)/nm-device-adsl.h
+BUILT_SOURCES = $(GLIB_GENERATED) nm-device-adsl-glue.h
+pkglib_LTLIBRARIES = libnm-device-plugin-adsl.la
+SYMBOL_VIS_FILE = $(srcdir)/exports.ver
+libnm_device_plugin_adsl_la_SOURCES = \
+ nm-atm-manager.c \
+ nm-atm-manager.h \
+ nm-device-adsl.c \
+ nm-device-adsl.h \
+ \
+ $(BUILT_SOURCES)
+
+libnm_device_plugin_adsl_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_adsl_la_LIBADD = \
+ $(DBUS_LIBS) \
+ $(GUDEV_LIBS)
+
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -489,9 +522,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/generated/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/devices/adsl/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/generated/Makefile
+ $(AUTOMAKE) --gnu src/devices/adsl/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -511,9 +544,33 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+ }
+
+uninstall-pkglibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+ done
+
+clean-pkglibLTLIBRARIES:
+ -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+ @list='$(pkglib_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
@@ -522,8 +579,8 @@ clean-noinstLTLIBRARIES:
rm -f $${locs}; \
}
-libnm-generated.la: $(libnm_generated_la_OBJECTS) $(libnm_generated_la_DEPENDENCIES) $(EXTRA_libnm_generated_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libnm_generated_la_OBJECTS) $(libnm_generated_la_LIBADD) $(LIBS)
+libnm-device-plugin-adsl.la: $(libnm_device_plugin_adsl_la_OBJECTS) $(libnm_device_plugin_adsl_la_DEPENDENCIES) $(EXTRA_libnm_device_plugin_adsl_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_device_plugin_adsl_la_LINK) -rpath $(pkglibdir) $(libnm_device_plugin_adsl_la_OBJECTS) $(libnm_device_plugin_adsl_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -531,8 +588,9 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_generated_la-nm-enum-types.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_generated_la-nm-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-adsl-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-atm-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-adsl.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -555,20 +613,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_generated_la-nm-enum-types.lo: nm-enum-types.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_generated_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_generated_la-nm-enum-types.lo -MD -MP -MF $(DEPDIR)/libnm_generated_la-nm-enum-types.Tpo -c -o libnm_generated_la-nm-enum-types.lo `test -f 'nm-enum-types.c' || echo '$(srcdir)/'`nm-enum-types.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_generated_la-nm-enum-types.Tpo $(DEPDIR)/libnm_generated_la-nm-enum-types.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-enum-types.c' object='libnm_generated_la-nm-enum-types.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_generated_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_generated_la-nm-enum-types.lo `test -f 'nm-enum-types.c' || echo '$(srcdir)/'`nm-enum-types.c
-
-libnm_generated_la-nm-marshal.lo: nm-marshal.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_generated_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_generated_la-nm-marshal.lo -MD -MP -MF $(DEPDIR)/libnm_generated_la-nm-marshal.Tpo -c -o libnm_generated_la-nm-marshal.lo `test -f 'nm-marshal.c' || echo '$(srcdir)/'`nm-marshal.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_generated_la-nm-marshal.Tpo $(DEPDIR)/libnm_generated_la-nm-marshal.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-marshal.c' object='libnm_generated_la-nm-marshal.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_generated_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_generated_la-nm-marshal.lo `test -f 'nm-marshal.c' || echo '$(srcdir)/'`nm-marshal.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -657,11 +701,16 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
+ for dir in "$(DESTDIR)$(pkglibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
@@ -685,6 +734,7 @@ install-strip:
mostlyclean-generic:
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -696,7 +746,7 @@ maintainer-clean-generic:
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -723,7 +773,7 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am:
+install-exec-am: install-pkglibLTLIBRARIES
install-html: install-html-am
@@ -763,25 +813,34 @@ ps: ps-am
ps-am:
-uninstall-am:
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+ clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-pkglibLTLIBRARIES install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-pkglibLTLIBRARIES
-.MAKE: all check install install-am install-strip
+include $(GLIB_MAKEFILE)
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am
+@GNOME_CODE_COVERAGE_RULES@
-include $(GLIB_MAKEFILE)
+nm-device-adsl-glue.h: $(top_srcdir)/introspection/nm-device-adsl.xml
+ dbus-binding-tool --prefix=nm_device_adsl --mode=glib-server --output=$@ $<
+
+@ENABLE_TESTS_TRUE@check-local:
+@ENABLE_TESTS_TRUE@ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-adsl.so $(SYMBOL_VIS_FILE)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/devices/adsl/exports.ver b/src/devices/adsl/exports.ver
new file mode 100644
index 000000000..d2c451244
--- /dev/null
+++ b/src/devices/adsl/exports.ver
@@ -0,0 +1,7 @@
+{
+global:
+ nm_device_factory_create;
+ nm_device_factory_get_device_type;
+local:
+ *;
+};
diff --git a/src/devices/adsl/nm-adsl-enum-types.c b/src/devices/adsl/nm-adsl-enum-types.c
new file mode 100644
index 000000000..085653317
--- /dev/null
+++ b/src/devices/adsl/nm-adsl-enum-types.c
@@ -0,0 +1,12 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#include "nm-adsl-enum-types.h"
+
+#include "nm-device-adsl.h"
+
+
+
+
diff --git a/src/devices/adsl/nm-adsl-enum-types.h b/src/devices/adsl/nm-adsl-enum-types.h
new file mode 100644
index 000000000..88e1fe840
--- /dev/null
+++ b/src/devices/adsl/nm-adsl-enum-types.h
@@ -0,0 +1,17 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#ifndef __NM_ADSL_ENUM_TYPES_H__
+#define __NM_ADSL_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+G_END_DECLS
+
+#endif /* __NM_ADSL_ENUM_TYPES_H__ */
+
+
+
diff --git a/src/devices/adsl/nm-atm-manager.c b/src/devices/adsl/nm-atm-manager.c
new file mode 100644
index 000000000..e8db3596d
--- /dev/null
+++ b/src/devices/adsl/nm-atm-manager.c
@@ -0,0 +1,266 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2009 - 2013 Red Hat, Inc.
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <gudev/gudev.h>
+#include <gmodule.h>
+
+#include "nm-atm-manager.h"
+#include "nm-device-adsl.h"
+#include "nm-device-factory.h"
+#include "nm-logging.h"
+
+typedef struct {
+ GUdevClient *client;
+ GSList *devices;
+ guint start_id;
+} NMAtmManagerPrivate;
+
+#define NM_ATM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ATM_MANAGER, NMAtmManagerPrivate))
+
+static GType nm_atm_manager_get_type (void);
+
+static void device_factory_interface_init (NMDeviceFactory *factory_iface);
+
+G_DEFINE_TYPE_EXTENDED (NMAtmManager, nm_atm_manager, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
+
+/**************************************************************************/
+
+#define PLUGIN_TYPE NM_DEVICE_TYPE_ADSL
+
+G_MODULE_EXPORT NMDeviceFactory *
+nm_device_factory_create (GError **error)
+{
+ return (NMDeviceFactory *) g_object_new (NM_TYPE_ATM_MANAGER, NULL);
+}
+
+G_MODULE_EXPORT NMDeviceType
+nm_device_factory_get_device_type (void)
+{
+ return PLUGIN_TYPE;
+}
+
+/************************************************************************/
+
+static gboolean
+dev_get_attrs (GUdevDevice *udev_device,
+ const char **out_path,
+ char **out_driver)
+{
+ GUdevDevice *parent = NULL;
+ const char *driver, *path;
+
+ g_return_val_if_fail (udev_device != NULL, FALSE);
+ g_return_val_if_fail (out_path != NULL, FALSE);
+ g_return_val_if_fail (out_driver != NULL, FALSE);
+
+ path = g_udev_device_get_sysfs_path (udev_device);
+ if (!path) {
+ nm_log_warn (LOGD_HW, "couldn't determine device path; ignoring...");
+ return FALSE;
+ }
+
+ driver = g_udev_device_get_driver (udev_device);
+ if (!driver) {
+ /* Try the parent */
+ parent = g_udev_device_get_parent (udev_device);
+ if (parent)
+ driver = g_udev_device_get_driver (parent);
+ }
+
+ *out_path = path;
+ *out_driver = g_strdup (driver);
+
+ g_clear_object (&parent);
+ return TRUE;
+}
+
+static void
+device_destroyed (gpointer user_data, GObject *dead)
+{
+ NMAtmManager *self = NM_ATM_MANAGER (user_data);
+ NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
+
+ priv->devices = g_slist_remove (priv->devices, dead);
+}
+
+static void
+adsl_add (NMAtmManager *self, GUdevDevice *udev_device)
+{
+ NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
+ const char *ifname, *sysfs_path = NULL;
+ char *driver = NULL;
+ NMDevice *device;
+
+ g_return_if_fail (udev_device != NULL);
+
+ ifname = g_udev_device_get_name (udev_device);
+ if (!ifname) {
+ nm_log_warn (LOGD_HW, "failed to get device's interface name");
+ return;
+ }
+
+ nm_log_dbg (LOGD_HW, "(%s): found ATM device", ifname);
+
+ if (dev_get_attrs (udev_device, &sysfs_path, &driver)) {
+ g_assert (sysfs_path);
+
+ device = nm_device_adsl_new (sysfs_path, ifname, driver);
+ g_assert (device);
+
+ priv->devices = g_slist_prepend (priv->devices, device);
+ g_object_weak_ref (G_OBJECT (device), device_destroyed, self);
+
+ g_signal_emit_by_name (self, NM_DEVICE_FACTORY_DEVICE_ADDED, device);
+ g_object_unref (device);
+
+ g_free (driver);
+ }
+}
+
+static void
+adsl_remove (NMAtmManager *self, GUdevDevice *udev_device)
+{
+ NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
+ const char *iface = g_udev_device_get_name (udev_device);
+ GSList *iter;
+
+ nm_log_dbg (LOGD_HW, "(%s): removing ATM device", iface);
+
+ for (iter = priv->devices; iter; iter = iter->next) {
+ NMDevice *device = iter->data;
+
+ /* Match 'iface' not 'ip_iface' to the ATM device instead of the
+ * NAS bridge interface or PPPoE interface.
+ */
+ if (g_strcmp0 (nm_device_get_iface (device), iface) != 0)
+ continue;
+
+ g_object_weak_unref (G_OBJECT (iter->data), device_destroyed, self);
+ priv->devices = g_slist_remove (priv->devices, device);
+ g_signal_emit_by_name (device, NM_DEVICE_REMOVED);
+ break;
+ }
+}
+
+static gboolean
+query_devices (NMAtmManager *self)
+{
+ NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
+ GUdevEnumerator *enumerator;
+ GList *devices, *iter;
+
+ enumerator = g_udev_enumerator_new (priv->client);
+ g_udev_enumerator_add_match_subsystem (enumerator, "atm");
+ g_udev_enumerator_add_match_is_initialized (enumerator);
+ devices = g_udev_enumerator_execute (enumerator);
+ for (iter = devices; iter; iter = g_list_next (iter)) {
+ adsl_add (self, G_UDEV_DEVICE (iter->data));
+ g_object_unref (G_UDEV_DEVICE (iter->data));
+ }
+ g_list_free (devices);
+ g_object_unref (enumerator);
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+handle_uevent (GUdevClient *client,
+ const char *action,
+ GUdevDevice *device,
+ gpointer user_data)
+{
+ NMAtmManager *self = NM_ATM_MANAGER (user_data);
+ const char *subsys;
+ const char *ifindex;
+ guint64 seqnum;
+
+ g_return_if_fail (action != NULL);
+
+ /* A bit paranoid */
+ subsys = g_udev_device_get_subsystem (device);
+ g_return_if_fail (!g_strcmp0 (subsys, "atm"));
+
+ ifindex = g_udev_device_get_property (device, "IFINDEX");
+ seqnum = g_udev_device_get_seqnum (device);
+ nm_log_dbg (LOGD_HW, "UDEV event: action '%s' subsys '%s' device '%s' (%s); seqnum=%" G_GUINT64_FORMAT,
+ action, subsys, g_udev_device_get_name (device), ifindex ? ifindex : "unknown", seqnum);
+
+ if (!strcmp (action, "add"))
+ adsl_add (self, device);
+ else if (!strcmp (action, "remove"))
+ adsl_remove (self, device);
+}
+
+/*********************************************************************/
+
+static void
+nm_atm_manager_init (NMAtmManager *self)
+{
+ NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
+ const char *subsys[] = { "atm", NULL };
+
+ priv->client = g_udev_client_new (subsys);
+ g_signal_connect (priv->client, "uevent", G_CALLBACK (handle_uevent), self);
+
+ priv->start_id = g_idle_add ((GSourceFunc) query_devices, self);
+}
+
+static void
+device_factory_interface_init (NMDeviceFactory *factory_iface)
+{
+}
+
+static void
+dispose (GObject *object)
+{
+ NMAtmManager *self = NM_ATM_MANAGER (object);
+ NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+
+ if (priv->client)
+ g_signal_handlers_disconnect_by_func (priv->client, handle_uevent, self);
+ g_clear_object (&priv->client);
+
+ if (priv->start_id) {
+ g_source_remove (priv->start_id);
+ priv->start_id = 0;
+ }
+
+ for (iter = priv->devices; iter; iter = iter->next)
+ g_object_weak_unref (G_OBJECT (iter->data), device_destroyed, self);
+ g_clear_pointer (&priv->devices, g_slist_free);
+
+ G_OBJECT_CLASS (nm_atm_manager_parent_class)->dispose (object);
+}
+
+static void
+nm_atm_manager_class_init (NMAtmManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMAtmManagerPrivate));
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+}
diff --git a/src/nm-rfkill.h b/src/devices/adsl/nm-atm-manager.h
index d3cd77744..005252207 100644
--- a/src/nm-rfkill.h
+++ b/src/devices/adsl/nm-atm-manager.h
@@ -16,30 +16,27 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
*/
-#ifndef NM_RFKILL_H
-#define NM_RFKILL_H
-
-typedef enum {
- RFKILL_UNBLOCKED = 0,
- RFKILL_SOFT_BLOCKED = 1,
- RFKILL_HARD_BLOCKED = 2
-} RfKillState;
-
-typedef enum {
- RFKILL_TYPE_WLAN = 0,
- RFKILL_TYPE_WWAN = 1,
- RFKILL_TYPE_WIMAX = 2,
-
- /* UNKNOWN and MAX should always be 1 more than
- * the last rfkill type since RFKILL_TYPE_MAX is
- * used as an array size.
- */
- RFKILL_TYPE_UNKNOWN = 3, /* KEEP LAST */
- RFKILL_TYPE_MAX = RFKILL_TYPE_UNKNOWN
-} RfKillType;
-
-#endif /* NM_RFKILL_H */
+#ifndef NM_ATM_MANAGER_H
+#define NM_ATM_MANAGER_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_ATM_MANAGER (nm_atm_manager_get_type ())
+#define NM_ATM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ATM_MANAGER, NMAtmManager))
+
+typedef struct {
+ GObject parent;
+} NMAtmManager;
+
+typedef struct {
+ GObjectClass parent;
+} NMAtmManagerClass;
+
+#endif /* NM_ATM_MANAGER_H */
diff --git a/src/devices/adsl/nm-device-adsl-glue.h b/src/devices/adsl/nm-device-adsl-glue.h
new file mode 100644
index 000000000..3a1b9108c
--- /dev/null
+++ b/src/devices/adsl/nm-device-adsl-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_adsl_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_adsl_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_adsl_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_adsl_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_adsl_object_info = { 1,
+ dbus_glib_nm_device_adsl_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Adsl\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Adsl\0Carrier\0carrier\0read\0\0"
+};
+
diff --git a/src/nm-device-adsl.c b/src/devices/adsl/nm-device-adsl.c
index db678d9f2..0c35bb7ad 100644
--- a/src/nm-device-adsl.c
+++ b/src/devices/adsl/nm-device-adsl.c
@@ -36,12 +36,11 @@
#include "nm-device-adsl.h"
#include "nm-device-private.h"
-#include "nm-properties-changed-signal.h"
#include "NetworkManagerUtils.h"
#include "nm-logging.h"
#include "nm-enum-types.h"
-#include "nm-system.h"
-#include "nm-netlink-monitor.h"
+#include "nm-dbus-manager.h"
+#include "nm-platform.h"
#include "ppp-manager/nm-ppp-manager.h"
#include "nm-setting-adsl.h"
@@ -52,29 +51,13 @@ G_DEFINE_TYPE (NMDeviceAdsl, nm_device_adsl, NM_TYPE_DEVICE)
#define NM_DEVICE_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_ADSL, NMDeviceAdslPrivate))
-#define NM_ADSL_ERROR (nm_adsl_error_quark ())
-
-static GQuark
-nm_adsl_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-adsl-error");
- return quark;
-}
-
/**********************************************/
typedef struct {
gboolean disposed;
- gboolean carrier;
guint carrier_poll_id;
int atm_index;
- /* Watch for 'nas' interfaces going away */
- NMNetlinkMonitor *monitor;
- guint netlink_id;
-
/* PPP */
NMPPPManager *ppp_manager;
@@ -82,91 +65,36 @@ typedef struct {
int brfd;
int nas_ifindex;
char * nas_ifname;
- guint8 nas_hw_addr[ETH_ALEN];
} NMDeviceAdslPrivate;
-enum {
- PROPERTIES_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- PROP_0,
- PROP_CARRIER,
-
- LAST_PROP
-};
-
/**************************************************************/
static guint32
get_generic_capabilities (NMDevice *dev)
{
- guint32 caps = NM_DEVICE_CAP_NM_SUPPORTED;
- caps |= NM_DEVICE_CAP_CARRIER_DETECT;
- return caps;
+ return (NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_NONSTANDARD_CARRIER);
}
static gboolean
-can_interrupt_activation (NMDevice *dev)
-{
- NMDeviceAdsl *self = NM_DEVICE_ADSL (dev);
- gboolean interrupt = FALSE;
-
- /* Devices that support carrier detect can interrupt activation
- * if the link becomes inactive.
- */
- if (NM_DEVICE_ADSL_GET_PRIVATE (self)->carrier == FALSE)
- interrupt = TRUE;
-
- return interrupt;
-}
-
-static gboolean
-is_available (NMDevice *dev)
-{
- NMDeviceAdsl *self = NM_DEVICE_ADSL (dev);
-
- /* Can't do anything if there isn't a carrier */
- if (!NM_DEVICE_ADSL_GET_PRIVATE (self)->carrier)
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMSettingAdsl *s_adsl;
const char *protocol;
- if (!nm_connection_is_type (connection, NM_SETTING_ADSL_SETTING_NAME)) {
- g_set_error (error,
- NM_ADSL_ERROR, NM_ADSL_ERROR_CONNECTION_NOT_ADSL,
- "The connection was not an ADSL connection.");
+ if (!NM_DEVICE_CLASS (nm_device_adsl_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_ADSL_SETTING_NAME))
return FALSE;
- }
s_adsl = nm_connection_get_setting_adsl (connection);
- if (!s_adsl) {
- g_set_error (error,
- NM_ADSL_ERROR, NM_ADSL_ERROR_CONNECTION_INVALID,
- "The connection was not a valid ADSL connection.");
+ if (!s_adsl)
return FALSE;
- }
/* FIXME: we don't yet support IPoATM */
protocol = nm_setting_adsl_get_protocol (s_adsl);
- if (g_strcmp0 (protocol, NM_SETTING_ADSL_PROTOCOL_IPOATM) == 0) {
- g_set_error (error,
- NM_ADSL_ERROR, NM_ADSL_ERROR_CONNECTION_INVALID,
- "IPoATM connections are not yet supported.");
+ if (g_strcmp0 (protocol, NM_SETTING_ADSL_PROTOCOL_IPOATM) == 0)
return FALSE;
- }
return TRUE;
}
@@ -199,51 +127,24 @@ complete_connection (NMDevice *device,
return TRUE;
}
-static NMConnection *
-get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
-{
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
-
- if (!nm_connection_is_type (connection, NM_SETTING_ADSL_SETTING_NAME))
- continue;
-
- if (nm_connection_get_setting_adsl (connection))
- return connection;
- }
- return NULL;
-}
-
/**************************************************************/
static void
set_nas_iface (NMDeviceAdsl *self, int idx, const char *name)
{
NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
- gsize addrlen;
g_return_if_fail (name != NULL);
g_warn_if_fail (priv->nas_ifindex <= 0);
- if (idx > 0)
- priv->nas_ifindex = idx;
- else
- priv->nas_ifindex = nm_netlink_iface_to_index (name);
+ priv->nas_ifindex = idx > 0 ? idx : nm_platform_link_get_ifindex (name);
g_warn_if_fail (priv->nas_ifindex > 0);
g_warn_if_fail (priv->nas_ifname == NULL);
priv->nas_ifname = g_strdup (name);
/* Update NAS interface's MAC address */
- addrlen = nm_device_read_hwaddr (NM_DEVICE (self),
- priv->nas_hw_addr,
- sizeof (priv->nas_hw_addr),
- NULL);
- g_warn_if_fail (addrlen == sizeof (priv->nas_hw_addr));
+ nm_device_update_hw_address (NM_DEVICE (self));
}
static gboolean
@@ -277,7 +178,7 @@ br2684_create_iface (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
*/
while (num < 10000) {
memset (&ni.ifname, 0, sizeof (ni.ifname));
- snprintf (ni.ifname, sizeof (ni.ifname), "nas%d", num);
+ g_snprintf (ni.ifname, sizeof (ni.ifname), "nas%d", num);
err = ioctl (fd, ATM_NEWBACKENDIF, &ni);
if (err == 0) {
@@ -391,27 +292,21 @@ error:
}
static void
-netlink_notification (NMNetlinkMonitor *monitor,
- struct nl_msg *msg,
- gpointer user_data)
+link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformSignalChangeType change_type, NMPlatformReason reason, NMDeviceAdsl *device_adsl)
{
- NMDeviceAdsl *self = NM_DEVICE_ADSL (user_data);
- NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
- NMDevice *device = NM_DEVICE (user_data);
- struct nlmsghdr *hdr = nlmsg_hdr (msg);
- const char *iface = nm_device_get_iface (device);
-
- /* This only gets called for PPPoE connections and "nas" interfaces */
-
- if ((hdr->nlmsg_type == RTM_DELLINK) && (priv->nas_ifindex >= 0)) {
- struct ifinfomsg *ifi = nlmsg_data (hdr);
-
- if (ifi->ifi_index == priv->nas_ifindex) {
- /* NAS device went away for some reason; kill the connection */
- nm_log_dbg (LOGD_ADSL, "(%s): NAS interface disappeared", iface);
- nm_device_state_changed (device,
- NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_BR2684_FAILED);
+ if (change_type == NM_PLATFORM_SIGNAL_REMOVED) {
+ NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device_adsl);
+ NMDevice *device = NM_DEVICE (device_adsl);
+
+ /* This only gets called for PPPoE connections and "nas" interfaces */
+
+ if (priv->nas_ifindex >= 0 && ifindex == priv->nas_ifindex) {
+ /* NAS device went away for some reason; kill the connection */
+ nm_log_dbg (LOGD_ADSL, "(%s): NAS interface disappeared",
+ nm_device_get_iface (device));
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_BR2684_FAILED);
}
}
}
@@ -449,14 +344,14 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *out_reason)
}
/* Watch for the 'nas' interface going away */
- priv->netlink_id = g_signal_connect (priv->monitor, "notification",
- G_CALLBACK (netlink_notification),
- self);
+ g_signal_connect (nm_platform_get (), NM_PLATFORM_SIGNAL_LINK_CHANGED,
+ G_CALLBACK (link_changed_cb),
+ self);
nm_log_dbg (LOGD_ADSL, "(%s): ATM setup successful", nm_device_get_iface (device));
/* otherwise we're good for stage3 */
- nm_system_iface_set_up (priv->nas_ifindex, TRUE, NULL);
+ nm_platform_link_set_up (priv->nas_ifindex);
ret = NM_ACT_STAGE_RETURN_SUCCESS;
} else if (g_strcmp0 (protocol, NM_SETTING_ADSL_PROTOCOL_PPPOA) == 0) {
@@ -527,7 +422,7 @@ act_stage3_ip4_config_start (NMDevice *device,
s_adsl = nm_connection_get_setting_adsl (connection);
g_assert (s_adsl);
- /* PPPoE uses the NAS inteface, not the ATM interface */
+ /* PPPoE uses the NAS interface, not the ATM interface */
if (g_strcmp0 (nm_setting_adsl_get_protocol (s_adsl), NM_SETTING_ADSL_PROTOCOL_PPPOE) == 0) {
g_assert (priv->nas_ifname);
ppp_iface = priv->nas_ifname;
@@ -572,10 +467,7 @@ deactivate (NMDevice *device)
priv->ppp_manager = NULL;
}
- if (priv->netlink_id) {
- g_signal_handler_disconnect (priv->monitor, priv->netlink_id);
- priv->netlink_id = 0;
- }
+ g_signal_handlers_disconnect_by_func (nm_platform_get (), G_CALLBACK (link_changed_cb), device);
if (priv->brfd >= 0) {
close (priv->brfd);
@@ -590,79 +482,38 @@ deactivate (NMDevice *device)
priv->nas_ifindex = -1;
g_free (priv->nas_ifname);
priv->nas_ifname = NULL;
- memset (priv->nas_hw_addr, 0, sizeof (priv->nas_hw_addr));
+
+ /* Poke NMDevice to notice that our hw_address is no longer valid */
+ nm_device_update_hw_address (NM_DEVICE (self));
}
/**************************************************************/
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
+static guint
+get_hw_address_length (NMDevice *device, gboolean *out_permanent)
{
NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device);
- *out_len = priv->nas_ifname ? sizeof (priv->nas_hw_addr) : 0;
- return priv->nas_hw_addr;
-}
-
-static void
-set_carrier (NMDeviceAdsl *self, const gboolean carrier)
-{
- NMDeviceAdslPrivate *priv;
- NMDeviceState state;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
-
- if (priv->carrier == carrier)
- return;
-
- priv->carrier = carrier;
- g_object_notify (G_OBJECT (self), NM_DEVICE_ADSL_CARRIER);
-
- state = nm_device_get_state (NM_DEVICE (self));
- nm_log_info (LOGD_HW, "(%s): carrier now %s (device state %d)",
- nm_device_get_iface (NM_DEVICE (self)),
- carrier ? "ON" : "OFF",
- state);
-
- if (state == NM_DEVICE_STATE_UNAVAILABLE) {
- if (priv->carrier)
- nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_CARRIER);
- } else if (state >= NM_DEVICE_STATE_DISCONNECTED) {
- if (!priv->carrier)
- nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_UNAVAILABLE, NM_DEVICE_STATE_REASON_CARRIER);
- }
+ return priv->nas_ifname ? ETH_ALEN : 0;
}
static gboolean
carrier_update_cb (gpointer user_data)
{
NMDeviceAdsl *self = NM_DEVICE_ADSL (user_data);
- GError *error = NULL;
- gboolean carrier = FALSE;
- char *path, *contents;
+ int carrier;
+ char *path;
const char *iface;
- gboolean success;
iface = nm_device_get_iface (NM_DEVICE (self));
- path = g_strdup_printf ("/sys/class/atm/%s/carrier", iface);
- success = g_file_get_contents (path, &contents, NULL, &error);
+ path = g_strdup_printf ("/sys/class/atm/%s/carrier",
+ ASSERT_VALID_PATH_COMPONENT (iface));
+ carrier = (int) nm_platform_sysctl_get_int_checked (path, 10, 0, 1, -1);
g_free (path);
- if (!success) {
- nm_log_dbg (LOGD_ADSL, "error reading %s: (%d) %s",
- path,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- return TRUE;
- }
-
- carrier = (gboolean) atoi (contents);
- g_free (contents);
- set_carrier (self, carrier);
+ if (carrier != -1)
+ nm_device_set_carrier (NM_DEVICE (self), carrier);
return TRUE;
}
@@ -685,16 +536,16 @@ nm_device_adsl_new (const char *udi,
}
static int
-get_atm_index (const char *iface, GError **error)
+get_atm_index (const char *iface)
{
- char *path, *contents;
- int idx = -1;
+ char *path;
+ int idx;
- path = g_strdup_printf ("/sys/class/atm/%s/atmindex", iface);
- if (g_file_get_contents (path, &contents, NULL, error))
- idx = atoi (contents);
+ path = g_strdup_printf ("/sys/class/atm/%s/atmindex",
+ ASSERT_VALID_PATH_COMPONENT (iface));
+ idx = (int) nm_platform_sysctl_get_int_checked (path, 10, 0, G_MAXINT, -1);
g_free (path);
- g_free (contents);
+
return idx;
}
@@ -705,7 +556,6 @@ constructor (GType type,
{
GObject *object;
NMDeviceAdslPrivate *priv;
- GError *error = NULL;
object = G_OBJECT_CLASS (nm_device_adsl_parent_class)->constructor (type,
n_construct_params,
@@ -715,12 +565,10 @@ constructor (GType type,
priv = NM_DEVICE_ADSL_GET_PRIVATE (object);
- priv->atm_index = get_atm_index (nm_device_get_iface (NM_DEVICE (object)), &error);
+ priv->atm_index = get_atm_index (nm_device_get_iface (NM_DEVICE (object)));
if (priv->atm_index < 0) {
- nm_log_dbg (LOGD_ADSL, "error reading ATM device index: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
+ nm_log_err (LOGD_ADSL, "(%s): error reading ATM device index",
+ nm_device_get_iface (NM_DEVICE (object)));
g_object_unref (object);
return NULL;
} else {
@@ -752,16 +600,7 @@ dispose (GObject *object)
priv->carrier_poll_id = 0;
}
- if (priv->netlink_id) {
- g_source_remove (priv->netlink_id);
- priv->netlink_id = 0;
- }
-
- if (priv->monitor) {
- nm_netlink_monitor_unsubscribe (priv->monitor, RTNLGRP_LINK);
- g_object_unref (priv->monitor);
- priv->monitor = NULL;
- }
+ g_signal_handlers_disconnect_by_func (nm_platform_get (), G_CALLBACK (link_changed_cb), self);
g_free (priv->nas_ifname);
priv->nas_ifname = NULL;
@@ -770,40 +609,8 @@ dispose (GObject *object)
}
static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- NMDeviceAdsl *self = NM_DEVICE_ADSL (object);
- NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE(self);
-
- switch (prop_id) {
- case PROP_CARRIER:
- g_value_set_boolean (value, priv->carrier);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
nm_device_adsl_init (NMDeviceAdsl *self)
{
- NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
-
- priv->monitor = nm_netlink_monitor_get ();
- nm_netlink_monitor_subscribe (priv->monitor, RTNLGRP_LINK, NULL);
}
static void
@@ -816,36 +623,18 @@ nm_device_adsl_class_init (NMDeviceAdslClass *klass)
object_class->constructor = constructor;
object_class->dispose = dispose;
- object_class->get_property = get_property;
- object_class->set_property = set_property;
parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->can_interrupt_activation = can_interrupt_activation;
- parent_class->is_available = is_available;
parent_class->check_connection_compatible = check_connection_compatible;
- parent_class->get_best_auto_connection = get_best_auto_connection;
parent_class->complete_connection = complete_connection;
- parent_class->get_hw_address = get_hw_address;
+ parent_class->get_hw_address_length = get_hw_address_length;
parent_class->act_stage2_config = act_stage2_config;
parent_class->act_stage3_ip4_config_start = act_stage3_ip4_config_start;
parent_class->deactivate = deactivate;
- /* properties */
- g_object_class_install_property
- (object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_ADSL_CARRIER,
- "Carrier",
- "Carrier",
- FALSE,
- G_PARAM_READABLE));
-
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceAdslClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_adsl_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_adsl_object_info);
}
diff --git a/src/nm-device-adsl.h b/src/devices/adsl/nm-device-adsl.h
index 7ecb4350a..bbd0e63f0 100644
--- a/src/nm-device-adsl.h
+++ b/src/devices/adsl/nm-device-adsl.h
@@ -36,14 +36,6 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_ADSL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_ADSL))
#define NM_DEVICE_ADSL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_ADSL, NMDeviceAdslClass))
-typedef enum {
- NM_ADSL_ERROR_CONNECTION_NOT_ADSL = 0, /*< nick=ConnectionNotAdsl >*/
- NM_ADSL_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_ADSL_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMAdslError;
-
-#define NM_DEVICE_ADSL_CARRIER "carrier"
-
typedef struct {
NMDevice parent;
} NMDeviceAdsl;
@@ -51,8 +43,6 @@ typedef struct {
typedef struct {
NMDeviceClass parent;
- /* Signals */
- void (*properties_changed) (NMDeviceAdsl *device, GHashTable *properties);
} NMDeviceAdslClass;
GType nm_device_adsl_get_type (void);
diff --git a/src/devices/bluetooth/Makefile.am b/src/devices/bluetooth/Makefile.am
new file mode 100644
index 000000000..639a1ad7a
--- /dev/null
+++ b/src/devices/bluetooth/Makefile.am
@@ -0,0 +1,74 @@
+include $(GLIB_MAKEFILE)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/devices/wwan \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-bluetooth"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
+GLIB_GENERATED = nm-bt-enum-types.h nm-bt-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_bt_enum_types_sources = $(srcdir)/nm-device-bt.h
+
+nm-device-bt-glue.h: $(top_srcdir)/introspection/nm-device-bt.xml
+ dbus-binding-tool --prefix=nm_device_bt --mode=glib-server --output=$@ $<
+
+BUILT_SOURCES = $(GLIB_GENERATED) nm-device-bt-glue.h
+
+pkglib_LTLIBRARIES = libnm-device-plugin-bluetooth.la
+
+SYMBOL_VIS_FILE=$(srcdir)/exports.ver
+
+libnm_device_plugin_bluetooth_la_SOURCES = \
+ nm-bluez-manager.c \
+ nm-bluez-manager.h \
+ nm-bluez-common.h \
+ nm-bluez-device.c \
+ nm-bluez-device.h \
+ nm-bluez4-adapter.c \
+ nm-bluez4-adapter.h \
+ nm-bluez4-manager.c \
+ nm-bluez4-manager.h \
+ nm-bluez5-manager.c \
+ nm-bluez5-manager.h \
+ \
+ nm-device-bt.c \
+ nm-device-bt.h \
+ \
+ $(BUILT_SOURCES)
+
+libnm_device_plugin_bluetooth_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_bluetooth_la_LIBADD = \
+ $(top_builddir)/src/devices/wwan/libnm-wwan.la \
+ $(DBUS_LIBS) \
+ $(GUDEV_LIBS)
+
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+
+if ENABLE_TESTS
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-bluetooth.so $(SYMBOL_VIS_FILE)
+
+endif
+
diff --git a/src/dns-manager/Makefile.in b/src/devices/bluetooth/Makefile.in
index a6116fb55..3145c52da 100644
--- a/src/dns-manager/Makefile.in
+++ b/src/devices/bluetooth/Makefile.in
@@ -78,11 +78,12 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/dns-manager
+subdir = src/devices/bluetooth
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,22 +101,54 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libdns_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_libdns_manager_la_OBJECTS = libdns_manager_la-nm-dns-manager.lo \
- libdns_manager_la-nm-dns-plugin.lo \
- libdns_manager_la-nm-dns-dnsmasq.lo \
- libdns_manager_la-nm-dns-utils.lo
-libdns_manager_la_OBJECTS = $(am_libdns_manager_la_OBJECTS)
+libnm_device_plugin_bluetooth_la_DEPENDENCIES = \
+ $(top_builddir)/src/devices/wwan/libnm-wwan.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__objects_1 = nm-bt-enum-types.lo
+am__objects_2 = $(am__objects_1)
+am_libnm_device_plugin_bluetooth_la_OBJECTS = nm-bluez-manager.lo \
+ nm-bluez-device.lo nm-bluez4-adapter.lo nm-bluez4-manager.lo \
+ nm-bluez5-manager.lo nm-device-bt.lo $(am__objects_2)
+libnm_device_plugin_bluetooth_la_OBJECTS = \
+ $(am_libnm_device_plugin_bluetooth_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+libnm_device_plugin_bluetooth_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) \
+ $(libnm_device_plugin_bluetooth_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -150,8 +183,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libdns_manager_la_SOURCES)
-DIST_SOURCES = $(libdns_manager_la_SOURCES)
+SOURCES = $(libnm_device_plugin_bluetooth_la_SOURCES)
+DIST_SOURCES = $(libnm_device_plugin_bluetooth_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -202,12 +235,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -232,7 +268,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -277,12 +312,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -299,6 +338,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -326,11 +367,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -345,6 +391,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -407,6 +454,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -417,41 +465,64 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libdns-manager.la
-libdns_manager_la_CPPFLAGS = \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
-I${top_srcdir}/src \
- -I${top_srcdir}/include \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/devices/wwan \
-I${top_builddir}/include \
- $(LIBNL_CFLAGS) \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-bluetooth"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DLOCALSTATEDIR=\"$(localstatedir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DNMCONFDIR=\"$(nmconfdir)\" \
- -DNMRUNDIR=\"$(nmrundir)\"
-
-libdns_manager_la_SOURCES = \
- nm-dns-manager.h \
- nm-dns-manager.c \
- nm-dns-plugin.h \
- nm-dns-plugin.c \
- nm-dns-dnsmasq.h \
- nm-dns-dnsmasq.c \
- nm-dns-utils.h \
- nm-dns-utils.c
-
-libdns_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(LIBNL_LIBS) \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
+GLIB_GENERATED = nm-bt-enum-types.h nm-bt-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_bt_enum_types_sources = $(srcdir)/nm-device-bt.h
+BUILT_SOURCES = $(GLIB_GENERATED) nm-device-bt-glue.h
+pkglib_LTLIBRARIES = libnm-device-plugin-bluetooth.la
+SYMBOL_VIS_FILE = $(srcdir)/exports.ver
+libnm_device_plugin_bluetooth_la_SOURCES = \
+ nm-bluez-manager.c \
+ nm-bluez-manager.h \
+ nm-bluez-common.h \
+ nm-bluez-device.c \
+ nm-bluez-device.h \
+ nm-bluez4-adapter.c \
+ nm-bluez4-adapter.h \
+ nm-bluez4-manager.c \
+ nm-bluez4-manager.h \
+ nm-bluez5-manager.c \
+ nm-bluez5-manager.h \
+ \
+ nm-device-bt.c \
+ nm-device-bt.h \
+ \
+ $(BUILT_SOURCES)
+
+libnm_device_plugin_bluetooth_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_bluetooth_la_LIBADD = \
+ $(top_builddir)/src/devices/wwan/libnm-wwan.la \
$(DBUS_LIBS) \
- $(GLIB_LIBS)
+ $(GUDEV_LIBS)
-all: all-am
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -464,9 +535,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/dns-manager/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/devices/bluetooth/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/dns-manager/Makefile
+ $(AUTOMAKE) --gnu src/devices/bluetooth/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -486,9 +557,33 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+ }
+
+uninstall-pkglibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+ done
+
+clean-pkglibLTLIBRARIES:
+ -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+ @list='$(pkglib_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
@@ -497,8 +592,8 @@ clean-noinstLTLIBRARIES:
rm -f $${locs}; \
}
-libdns-manager.la: $(libdns_manager_la_OBJECTS) $(libdns_manager_la_DEPENDENCIES) $(EXTRA_libdns_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libdns_manager_la_OBJECTS) $(libdns_manager_la_LIBADD) $(LIBS)
+libnm-device-plugin-bluetooth.la: $(libnm_device_plugin_bluetooth_la_OBJECTS) $(libnm_device_plugin_bluetooth_la_DEPENDENCIES) $(EXTRA_libnm_device_plugin_bluetooth_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_device_plugin_bluetooth_la_LINK) -rpath $(pkglibdir) $(libnm_device_plugin_bluetooth_la_OBJECTS) $(libnm_device_plugin_bluetooth_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -506,10 +601,13 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdns_manager_la-nm-dns-dnsmasq.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdns_manager_la-nm-dns-manager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdns_manager_la-nm-dns-plugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdns_manager_la-nm-dns-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-bluez-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-bluez-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-bluez4-adapter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-bluez4-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-bluez5-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-bt-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-bt.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -532,34 +630,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libdns_manager_la-nm-dns-manager.lo: nm-dns-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdns_manager_la-nm-dns-manager.lo -MD -MP -MF $(DEPDIR)/libdns_manager_la-nm-dns-manager.Tpo -c -o libdns_manager_la-nm-dns-manager.lo `test -f 'nm-dns-manager.c' || echo '$(srcdir)/'`nm-dns-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdns_manager_la-nm-dns-manager.Tpo $(DEPDIR)/libdns_manager_la-nm-dns-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dns-manager.c' object='libdns_manager_la-nm-dns-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdns_manager_la-nm-dns-manager.lo `test -f 'nm-dns-manager.c' || echo '$(srcdir)/'`nm-dns-manager.c
-
-libdns_manager_la-nm-dns-plugin.lo: nm-dns-plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdns_manager_la-nm-dns-plugin.lo -MD -MP -MF $(DEPDIR)/libdns_manager_la-nm-dns-plugin.Tpo -c -o libdns_manager_la-nm-dns-plugin.lo `test -f 'nm-dns-plugin.c' || echo '$(srcdir)/'`nm-dns-plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdns_manager_la-nm-dns-plugin.Tpo $(DEPDIR)/libdns_manager_la-nm-dns-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dns-plugin.c' object='libdns_manager_la-nm-dns-plugin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdns_manager_la-nm-dns-plugin.lo `test -f 'nm-dns-plugin.c' || echo '$(srcdir)/'`nm-dns-plugin.c
-
-libdns_manager_la-nm-dns-dnsmasq.lo: nm-dns-dnsmasq.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdns_manager_la-nm-dns-dnsmasq.lo -MD -MP -MF $(DEPDIR)/libdns_manager_la-nm-dns-dnsmasq.Tpo -c -o libdns_manager_la-nm-dns-dnsmasq.lo `test -f 'nm-dns-dnsmasq.c' || echo '$(srcdir)/'`nm-dns-dnsmasq.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdns_manager_la-nm-dns-dnsmasq.Tpo $(DEPDIR)/libdns_manager_la-nm-dns-dnsmasq.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dns-dnsmasq.c' object='libdns_manager_la-nm-dns-dnsmasq.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdns_manager_la-nm-dns-dnsmasq.lo `test -f 'nm-dns-dnsmasq.c' || echo '$(srcdir)/'`nm-dns-dnsmasq.c
-
-libdns_manager_la-nm-dns-utils.lo: nm-dns-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdns_manager_la-nm-dns-utils.lo -MD -MP -MF $(DEPDIR)/libdns_manager_la-nm-dns-utils.Tpo -c -o libdns_manager_la-nm-dns-utils.lo `test -f 'nm-dns-utils.c' || echo '$(srcdir)/'`nm-dns-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdns_manager_la-nm-dns-utils.Tpo $(DEPDIR)/libdns_manager_la-nm-dns-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dns-utils.c' object='libdns_manager_la-nm-dns-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdns_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdns_manager_la-nm-dns-utils.lo `test -f 'nm-dns-utils.c' || echo '$(srcdir)/'`nm-dns-utils.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -648,11 +718,18 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
-check: check-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
-install: install-am
+ for dir in "$(DESTDIR)$(pkglibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -674,6 +751,7 @@ install-strip:
mostlyclean-generic:
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -682,9 +760,10 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -711,7 +790,7 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am:
+install-exec-am: install-pkglibLTLIBRARIES
install-html: install-html-am
@@ -751,24 +830,34 @@ ps: ps-am
ps-am:
-uninstall-am:
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+ clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-pkglibLTLIBRARIES install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-pkglibLTLIBRARIES
+
+include $(GLIB_MAKEFILE)
-.MAKE: install-am install-strip
+@GNOME_CODE_COVERAGE_RULES@
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am
+nm-device-bt-glue.h: $(top_srcdir)/introspection/nm-device-bt.xml
+ dbus-binding-tool --prefix=nm_device_bt --mode=glib-server --output=$@ $<
+@ENABLE_TESTS_TRUE@check-local:
+@ENABLE_TESTS_TRUE@ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-bluetooth.so $(SYMBOL_VIS_FILE)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/devices/bluetooth/exports.ver b/src/devices/bluetooth/exports.ver
new file mode 100644
index 000000000..d2c451244
--- /dev/null
+++ b/src/devices/bluetooth/exports.ver
@@ -0,0 +1,7 @@
+{
+global:
+ nm_device_factory_create;
+ nm_device_factory_get_device_type;
+local:
+ *;
+};
diff --git a/src/bluez-manager/nm-bluez-common.h b/src/devices/bluetooth/nm-bluez-common.h
index ecc4d7094..f80cfc2e3 100644
--- a/src/bluez-manager/nm-bluez-common.h
+++ b/src/devices/bluetooth/nm-bluez-common.h
@@ -31,21 +31,15 @@
#define BLUEZ_MANAGER_PATH "/"
#define OBJECT_MANAGER_INTERFACE "org.freedesktop.DBus.ObjectManager"
-#if ! WITH_BLUEZ4
-
-#define BLUEZ_ADAPTER_INTERFACE "org.bluez.Adapter1"
-#define BLUEZ_DEVICE_INTERFACE "org.bluez.Device1"
-#define BLUEZ_NETWORK_INTERFACE "org.bluez.Network1"
-
-#else
-
-#define BLUEZ_MANAGER_INTERFACE "org.bluez.Manager"
-#define BLUEZ_ADAPTER_INTERFACE "org.bluez.Adapter"
-#define BLUEZ_DEVICE_INTERFACE "org.bluez.Device"
-#define BLUEZ_SERIAL_INTERFACE "org.bluez.Serial"
-#define BLUEZ_NETWORK_INTERFACE "org.bluez.Network"
-
-#endif /* WITH_BLUEZ */
+#define BLUEZ5_ADAPTER_INTERFACE "org.bluez.Adapter1"
+#define BLUEZ5_DEVICE_INTERFACE "org.bluez.Device1"
+#define BLUEZ5_NETWORK_INTERFACE "org.bluez.Network1"
+
+#define BLUEZ4_MANAGER_INTERFACE "org.bluez.Manager"
+#define BLUEZ4_ADAPTER_INTERFACE "org.bluez.Adapter"
+#define BLUEZ4_DEVICE_INTERFACE "org.bluez.Device"
+#define BLUEZ4_SERIAL_INTERFACE "org.bluez.Serial"
+#define BLUEZ4_NETWORK_INTERFACE "org.bluez.Network"
#endif /* NM_BLUEZ_COMMON_H */
diff --git a/src/bluez-manager/nm-bluez-device.c b/src/devices/bluetooth/nm-bluez-device.c
index ed5e345d2..4c448a376 100644
--- a/src/bluez-manager/nm-bluez-device.c
+++ b/src/devices/bluetooth/nm-bluez-device.c
@@ -30,14 +30,10 @@
#include "nm-setting-bluetooth.h"
#include "nm-bluez-common.h"
-#if WITH_BLUEZ4
-#include "nm-dbus-manager.h"
-#include "nm-dbus-glib-types.h"
-#endif
#include "nm-bluez-device.h"
#include "nm-logging.h"
-#include "nm-marshal.h"
#include "nm-utils.h"
+#include "nm-settings-connection.h"
G_DEFINE_TYPE (NMBluezDevice, nm_bluez_device, G_TYPE_OBJECT)
@@ -47,13 +43,13 @@ G_DEFINE_TYPE (NMBluezDevice, nm_bluez_device, G_TYPE_OBJECT)
typedef struct {
char *path;
GDBusConnection *dbus_connection;
-#if ! WITH_BLUEZ4
- GDBusProxy *proxy5;
- GDBusProxy *adapter;
+
+ GDBusProxy *proxy;
+
+ GDBusProxy *adapter5;
gboolean adapter_powered;
-#else
- DBusGProxy *proxy4;
-#endif
+
+ int bluez_version;
gboolean initialized;
gboolean usable;
@@ -63,7 +59,6 @@ typedef struct {
guint8 bin_address[ETH_ALEN];
char *name;
guint32 capabilities;
- gint rssi;
gboolean connected;
char *bt_iface;
@@ -72,6 +67,7 @@ typedef struct {
GSList *connections;
NMConnection *pan_connection;
+ NMConnection *pan_connection_original;
gboolean pan_connection_no_autocreate;
} NMBluezDevicePrivate;
@@ -82,7 +78,6 @@ enum {
PROP_ADDRESS,
PROP_NAME,
PROP_CAPABILITIES,
- PROP_RSSI,
PROP_USABLE,
PROP_CONNECTED,
@@ -92,6 +87,7 @@ enum {
/* Signals */
enum {
INITIALIZED,
+ REMOVED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -102,6 +98,11 @@ static void cp_connection_added (NMConnectionProvider *provider,
static gboolean connection_compatible (NMBluezDevice *self, NMConnection *connection);
+#define VARIANT_IS_OF_TYPE_BOOLEAN(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_BOOLEAN) ))
+#define VARIANT_IS_OF_TYPE_STRING(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING) ))
+#define VARIANT_IS_OF_TYPE_OBJECT_PATH(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_OBJECT_PATH) ))
+#define VARIANT_IS_OF_TYPE_STRING_ARRAY(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING_ARRAY) ))
+
/***********************************************************/
const char *
@@ -152,14 +153,6 @@ nm_bluez_device_get_capabilities (NMBluezDevice *self)
return NM_BLUEZ_DEVICE_GET_PRIVATE (self)->capabilities;
}
-gint
-nm_bluez_device_get_rssi (NMBluezDevice *self)
-{
- g_return_val_if_fail (NM_IS_BLUEZ_DEVICE (self), 0);
-
- return NM_BLUEZ_DEVICE_GET_PRIVATE (self)->rssi;
-}
-
gboolean
nm_bluez_device_get_connected (NMBluezDevice *self)
{
@@ -188,11 +181,6 @@ pan_connection_check_create (NMBluezDevice *self)
return;
}
- if (!nm_connection_provider_has_connections_loaded (priv->provider)) {
- /* do not try to create any connections until the connection provider is ready. */
- return;
- }
-
/* Only try once to create a connection. If it does not succeed, we do not try again. Also,
* if the connection gets deleted later, do not create another one for this device. */
priv->pan_connection_no_autocreate = TRUE;
@@ -244,24 +232,27 @@ pan_connection_check_create (NMBluezDevice *self)
* which then already finds the suitable connection in priv->connections. This is confusing,
* so block the signal. check_emit_usable will succeed after this function call returns. */
g_signal_handlers_block_by_func (priv->provider, cp_connection_added, self);
- added = nm_connection_provider_add_connection (priv->provider, connection, &error);
+ added = nm_connection_provider_add_connection (priv->provider, connection, FALSE, &error);
g_signal_handlers_unblock_by_func (priv->provider, cp_connection_added, self);
if (added) {
g_assert (!g_slist_find (priv->connections, added));
g_assert (connection_compatible (self, added));
+ g_assert (nm_connection_compare (added, connection, NM_SETTING_COMPARE_FLAG_EXACT));
priv->connections = g_slist_prepend (priv->connections, g_object_ref (added));
priv->pan_connection = added;
- nm_log_dbg (LOGD_SETTINGS, "added new Bluetooth connection for NAP device '%s': '%s' (%s)", priv->path, id, uuid);
+ priv->pan_connection_original = connection;
+ nm_log_dbg (LOGD_BT, "bluez[%s] added new Bluetooth connection for NAP device: '%s' (%s)", priv->path, id, uuid);
} else {
- nm_log_warn (LOGD_SETTINGS, "couldn't add new Bluetooth connection for NAP device '%s': '%s' (%s): %d / %s",
+ nm_log_warn (LOGD_BT, "bluez[%s] couldn't add new Bluetooth connection for NAP device: '%s' (%s): %d / %s",
priv->path, id, uuid, error ? error->code : -1,
(error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
+
+ g_object_unref (connection);
}
- g_object_unref (connection);
g_free (id);
g_free (uuid);
}
@@ -273,16 +264,12 @@ check_emit_usable (NMBluezDevice *self)
gboolean new_usable;
/* only expect the supported capabilities set. */
- g_assert ((priv->capabilities & ~( NM_BT_CAPABILITY_NAP
-#if WITH_BLUEZ4
- | NM_BT_CAPABILITY_DUN
-#endif
- )) == NM_BT_CAPABILITY_NONE);
+ g_assert (priv->bluez_version != 4 || ((priv->capabilities & ~(NM_BT_CAPABILITY_NAP | NM_BT_CAPABILITY_DUN)) == NM_BT_CAPABILITY_NONE ));
+ g_assert (priv->bluez_version != 5 || ((priv->capabilities & ~(NM_BT_CAPABILITY_NAP )) == NM_BT_CAPABILITY_NONE ));
new_usable = (priv->initialized && priv->capabilities && priv->name &&
-#if ! WITH_BLUEZ4
- priv->adapter && priv->adapter_powered &&
-#endif
+ ((priv->bluez_version == 4) ||
+ (priv->bluez_version == 5 && priv->adapter5 && priv->adapter_powered) ) &&
priv->dbus_connection && priv->address);
if (!new_usable)
@@ -377,6 +364,7 @@ cp_connection_removed (NMConnectionProvider *provider,
priv->connections = g_slist_remove (priv->connections, connection);
if (priv->pan_connection == connection) {
priv->pan_connection = NULL;
+ g_clear_object (&priv->pan_connection_original);
}
g_object_unref (connection);
check_emit_usable (self);
@@ -395,13 +383,14 @@ cp_connection_updated (NMConnectionProvider *provider,
}
static void
-cp_connections_loaded (NMConnectionProvider *provider, NMBluezDevice *self)
+load_connections (NMBluezDevice *self)
{
+ NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
const GSList *connections, *iter;
- connections = nm_connection_provider_get_connections (provider);
+ connections = nm_connection_provider_get_connections (priv->provider);
for (iter = connections; iter; iter = g_slist_next (iter))
- cp_connection_added (provider, NM_CONNECTION (iter->data), self);
+ cp_connection_added (priv->provider, NM_CONNECTION (iter->data), self);
}
/***********************************************************/
@@ -417,10 +406,13 @@ bluez_disconnect_cb (GDBusConnection *dbus_connection,
variant = g_dbus_connection_call_finish (dbus_connection, res, &error);
if (!variant) {
- nm_log_warn (LOGD_BT, "%s: failed to disconnect: %s", priv->address, error->message);
+ if (!strstr (error->message, "org.bluez.Error.NotConnected"))
+ nm_log_warn (LOGD_BT, "bluez[%s]: failed to disconnect: %s", priv->path, error->message);
g_error_free (error);
} else
g_variant_unref (variant);
+
+ g_object_unref (NM_BLUEZ_DEVICE (user_data));
}
void
@@ -428,16 +420,14 @@ nm_bluez_device_disconnect (NMBluezDevice *self)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
GVariant *args = NULL;
- const char *dbus_iface = BLUEZ_NETWORK_INTERFACE;
+ const char *dbus_iface;
g_return_if_fail (priv->dbus_connection);
-#if ! WITH_BLUEZ4
- g_return_if_fail (priv->connection_bt_type == NM_BT_CAPABILITY_NAP);
-#else
- g_return_if_fail (priv->connection_bt_type == NM_BT_CAPABILITY_NAP || priv->connection_bt_type == NM_BT_CAPABILITY_DUN);
-
- if (priv->connection_bt_type == NM_BT_CAPABILITY_DUN) {
+ if (priv->bluez_version == 5) {
+ g_return_if_fail (priv->connection_bt_type == NM_BT_CAPABILITY_NAP);
+ dbus_iface = BLUEZ5_NETWORK_INTERFACE;
+ } else if (priv->bluez_version == 4 && priv->connection_bt_type == NM_BT_CAPABILITY_DUN) {
/* Can't pass a NULL interface name through dbus to bluez, so just
* ignore the disconnect if the interface isn't known.
*/
@@ -445,9 +435,11 @@ nm_bluez_device_disconnect (NMBluezDevice *self)
return;
args = g_variant_new ("(s)", priv->bt_iface),
- dbus_iface = BLUEZ_SERIAL_INTERFACE;
+ dbus_iface = BLUEZ4_SERIAL_INTERFACE;
+ } else {
+ g_return_if_fail (priv->bluez_version == 4 && priv->connection_bt_type == NM_BT_CAPABILITY_NAP);
+ dbus_iface = BLUEZ4_NETWORK_INTERFACE;
}
-#endif
g_dbus_connection_call (priv->dbus_connection,
BLUEZ_SERVICE,
@@ -460,7 +452,7 @@ nm_bluez_device_disconnect (NMBluezDevice *self)
10000,
NULL,
(GAsyncReadyCallback) bluez_disconnect_cb,
- self);
+ g_object_ref (self));
priv->connection_bt_type = NM_BT_CAPABILITY_NONE;
}
@@ -505,20 +497,21 @@ nm_bluez_device_connect_async (NMBluezDevice *self,
{
GSimpleAsyncResult *simple;
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- const char *dbus_iface = BLUEZ_NETWORK_INTERFACE;
+ const char *dbus_iface;
const char *connect_type = BLUETOOTH_CONNECT_NAP;
g_return_if_fail (priv->capabilities & connection_bt_type & (NM_BT_CAPABILITY_DUN | NM_BT_CAPABILITY_NAP));
-#if ! WITH_BLUEZ4
- g_return_if_fail (connection_bt_type == NM_BT_CAPABILITY_NAP);
-#else
- g_return_if_fail (connection_bt_type == NM_BT_CAPABILITY_NAP || connection_bt_type == NM_BT_CAPABILITY_DUN);
- if (connection_bt_type == NM_BT_CAPABILITY_DUN) {
- dbus_iface = BLUEZ_SERIAL_INTERFACE;
+ if (priv->bluez_version == 5) {
+ g_return_if_fail (connection_bt_type == NM_BT_CAPABILITY_NAP);
+ dbus_iface = BLUEZ5_NETWORK_INTERFACE;
+ } else if (priv->bluez_version == 4 && connection_bt_type == NM_BT_CAPABILITY_DUN) {
+ dbus_iface = BLUEZ4_SERIAL_INTERFACE;
connect_type = BLUETOOTH_CONNECT_DUN;
+ } else {
+ g_return_if_fail (priv->bluez_version == 4 && connection_bt_type == NM_BT_CAPABILITY_NAP);
+ dbus_iface = BLUEZ4_NETWORK_INTERFACE;
}
-#endif
simple = g_simple_async_result_new (G_OBJECT (self),
callback,
@@ -566,7 +559,7 @@ nm_bluez_device_connect_finish (NMBluezDevice *self,
/***********************************************************/
static guint32
-convert_uuids_to_capabilities (const char **strings)
+convert_uuids_to_capabilities (const char **strings, int bluez_version)
{
const char **iter;
guint32 capabilities = 0;
@@ -577,11 +570,10 @@ convert_uuids_to_capabilities (const char **strings)
parts = g_strsplit (*iter, "-", -1);
if (parts && parts[0]) {
switch (g_ascii_strtoull (parts[0], NULL, 16)) {
-#if WITH_BLUEZ4
case 0x1103:
- capabilities |= NM_BT_CAPABILITY_DUN;
+ if (bluez_version == 4)
+ capabilities |= NM_BT_CAPABILITY_DUN;
break;
-#endif
case 0x1116:
capabilities |= NM_BT_CAPABILITY_NAP;
break;
@@ -596,26 +588,25 @@ convert_uuids_to_capabilities (const char **strings)
}
static void
-_set_property_capabilities (NMBluezDevice *self, const char **uuids, gboolean notify)
+_set_property_capabilities (NMBluezDevice *self, const char **uuids)
{
guint32 uint_val;
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- uint_val = convert_uuids_to_capabilities (uuids);
+ uint_val = convert_uuids_to_capabilities (uuids, priv->bluez_version);
if (priv->capabilities != uint_val) {
if (priv->capabilities) {
/* changing (relevant) capabilities is not supported and ignored -- except setting initially */
- nm_log_warn (LOGD_BT, "ignore change of capabilities for Bluetooth device %s from %u to %u",
+ nm_log_warn (LOGD_BT, "bluez[%s] ignore change of capabilities for Bluetooth device from %u to %u",
priv->path, priv->capabilities, uint_val);
return;
}
- nm_log_dbg (LOGD_BT, "set capabilities for Bluetooth device %s: %s%s%s", priv->path,
+ nm_log_dbg (LOGD_BT, "bluez[%s] set capabilities for Bluetooth device: %s%s%s", priv->path,
uint_val & NM_BT_CAPABILITY_NAP ? "NAP" : "",
((uint_val & NM_BT_CAPABILITY_DUN) && (uint_val &NM_BT_CAPABILITY_NAP)) ? " | " : "",
uint_val & NM_BT_CAPABILITY_DUN ? "DUN" : "");
priv->capabilities = uint_val;
- if (notify)
- g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CAPABILITIES);
+ g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CAPABILITIES);
}
}
@@ -635,34 +626,90 @@ _set_property_address (NMBluezDevice *self, const char *addr)
return;
if (!addr) {
- nm_log_warn (LOGD_BT, "[%s] cannot reset address from '%s' to NULL", priv->path, priv->address);
+ nm_log_warn (LOGD_BT, "bluez[%s] cannot reset address from '%s' to NULL", priv->path, priv->address);
return;
}
if (priv->address != NULL) {
- nm_log_warn (LOGD_BT, "[%s] cannot reset address from '%s' to '%s'", priv->path, priv->address, addr);
+ nm_log_warn (LOGD_BT, "bluez[%s] cannot reset address from '%s' to '%s'", priv->path, priv->address, addr);
return;
}
tmp = ether_aton (addr);
if (!tmp) {
if (priv->address)
- nm_log_warn (LOGD_BT, "[%s] cannot reset address from '%s' to '%s' (invalid value)", priv->path, priv->address, addr);
+ nm_log_warn (LOGD_BT, "bluez[%s] cannot reset address from '%s' to '%s' (invalid value)", priv->path, priv->address, addr);
else
- nm_log_warn (LOGD_BT, "[%s] cannot reset address from NULL to '%s' (invalid value)", priv->path, addr);
+ nm_log_warn (LOGD_BT, "bluez[%s] cannot reset address from NULL to '%s' (invalid value)", priv->path, addr);
return;
}
memcpy (priv->bin_address, tmp->ether_addr_octet, ETH_ALEN);
priv->address = g_strdup (addr);
- return;
+ g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_ADDRESS);
+}
+
+static void
+_take_variant_property_address (NMBluezDevice *self, GVariant *v)
+{
+ _set_property_address (self, VARIANT_IS_OF_TYPE_STRING (v) ? g_variant_get_string (v, NULL) : NULL);
+ if (v)
+ g_variant_unref (v);
+}
+
+static void
+_take_variant_property_name (NMBluezDevice *self, GVariant *v)
+{
+ NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
+ const char *str;
+
+ if (VARIANT_IS_OF_TYPE_STRING (v)) {
+ str = g_variant_get_string (v, NULL);
+ if (g_strcmp0 (priv->name, str)) {
+ g_free (priv->name);
+ priv->name = g_strdup (str);
+ g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_NAME);
+ }
+ }
+ if (v)
+ g_variant_unref (v);
+}
+
+static void
+_take_variant_property_uuids (NMBluezDevice *self, GVariant *v)
+{
+ if (VARIANT_IS_OF_TYPE_STRING_ARRAY (v)) {
+ const char **uuids = g_variant_get_strv (v, NULL);
+
+ _set_property_capabilities (self, uuids);
+ g_free (uuids);
+ }
+ if (v)
+ g_variant_unref (v);
}
-#if ! WITH_BLUEZ4
static void
-adapter_properties_changed (GDBusProxy *proxy5,
- GVariant *changed_properties,
- GStrv invalidated_properties,
- gpointer user_data)
+_take_variant_property_connected (NMBluezDevice *self, GVariant *v)
+{
+ NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
+
+ if (VARIANT_IS_OF_TYPE_BOOLEAN (v)) {
+ gboolean connected = g_variant_get_boolean (v);
+
+ if (priv->connected != connected) {
+ priv->connected = connected;
+ g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CONNECTED);
+ }
+ }
+ if (v)
+ g_variant_unref (v);
+}
+
+
+static void
+adapter5_on_properties_changed (GDBusProxy *proxy,
+ GVariant *changed_properties,
+ GStrv invalidated_properties,
+ gpointer user_data)
{
NMBluezDevice *self = NM_BLUEZ_DEVICE (user_data);
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
@@ -672,7 +719,7 @@ adapter_properties_changed (GDBusProxy *proxy5,
g_variant_iter_init (&i, changed_properties);
while (g_variant_iter_next (&i, "{&sv}", &property, &v)) {
- if (!strcmp (property, "Powered")) {
+ if (!strcmp (property, "Powered") && VARIANT_IS_OF_TYPE_BOOLEAN (v)) {
gboolean powered = g_variant_get_boolean (v);
if (priv->adapter_powered != powered)
priv->adapter_powered = powered;
@@ -684,24 +731,24 @@ adapter_properties_changed (GDBusProxy *proxy5,
}
static void
-on_adapter_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
+adapter5_on_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
GError *error;
GVariant *v;
- priv->adapter = g_dbus_proxy_new_for_bus_finish (res, &error);
- if (!priv->adapter) {
- nm_log_warn (LOGD_BT, "failed to acquire adapter proxy: %s.", error->message);
+ priv->adapter5 = g_dbus_proxy_new_for_bus_finish (res, &error);
+ if (!priv->adapter5) {
+ nm_log_warn (LOGD_BT, "bluez[%s] failed to acquire adapter proxy: %s.", priv->path, error->message);
g_clear_error (&error);
g_signal_emit (self, signals[INITIALIZED], 0, FALSE);
} else {
- g_signal_connect (priv->adapter, "g-properties-changed",
- G_CALLBACK (adapter_properties_changed), self);
+ g_signal_connect (priv->adapter5, "g-properties-changed",
+ G_CALLBACK (adapter5_on_properties_changed), self);
/* Check adapter's powered state */
- v = g_dbus_proxy_get_cached_property (priv->adapter, "Powered");
- priv->adapter_powered = v ? g_variant_get_boolean (v) : FALSE;
+ v = g_dbus_proxy_get_cached_property (priv->adapter5, "Powered");
+ priv->adapter_powered = VARIANT_IS_OF_TYPE_BOOLEAN (v) ? g_variant_get_boolean (v) : FALSE;
if (v)
g_variant_unref (v);
@@ -715,232 +762,179 @@ on_adapter_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
}
static void
-properties_changed (GDBusProxy *proxy5,
- GVariant *changed_properties,
- GStrv invalidated_properties,
- gpointer user_data)
+_take_one_variant_property (NMBluezDevice *self, const char *property, GVariant *v)
+{
+ if (v) {
+ if (!g_strcmp0 (property, "Address"))
+ _take_variant_property_address (self, v);
+ else if (!g_strcmp0 (property, "Connected"))
+ _take_variant_property_connected (self, v);
+ else if (!g_strcmp0 (property, "Name"))
+ _take_variant_property_name (self, v);
+ else if (!g_strcmp0 (property, "UUIDs"))
+ _take_variant_property_uuids (self, v);
+ else
+ g_variant_unref (v);
+ }
+}
+
+static void
+_set_properties (NMBluezDevice *self, GVariant *properties)
{
- NMBluezDevice *self = NM_BLUEZ_DEVICE (user_data);
- NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
GVariantIter i;
const char *property;
- const char *str;
GVariant *v;
- gint int_val;
- const char **strv;
g_object_freeze_notify (G_OBJECT (self));
- g_variant_iter_init (&i, changed_properties);
- while (g_variant_iter_next (&i, "{&sv}", &property, &v)) {
- if (!strcmp (property, "Name")) {
- str = g_variant_get_string (v, NULL);
- if (g_strcmp0 (priv->name, str)) {
- g_free (priv->name);
- priv->name = g_strdup (str);
- g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_NAME);
- }
- } else if (!strcmp (property, "RSSI")) {
- int_val = g_variant_get_int16 (v);
- if (priv->rssi != int_val) {
- priv->rssi = int_val;
- g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_RSSI);
- }
- } else if (!strcmp (property, "UUIDs")) {
- strv = g_variant_get_strv (v, NULL);
- _set_property_capabilities (self, strv, TRUE);
- g_free (strv);
- } else if (!strcmp (property, "Connected")) {
- gboolean connected = g_variant_get_boolean (v);
- if (priv->connected != connected) {
- priv->connected = connected;
- g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CONNECTED);
- }
- }
- g_variant_unref (v);
- }
+ g_variant_iter_init (&i, properties);
+ while (g_variant_iter_next (&i, "{&sv}", &property, &v))
+ _take_one_variant_property (self, property, v);
g_object_thaw_notify (G_OBJECT (self));
-
- check_emit_usable (self);
}
-#else
+
static void
-property_changed (DBusGProxy *proxy4,
- const char *property,
- GValue *value,
- gpointer user_data)
+properties_changed (GDBusProxy *proxy,
+ GVariant *changed_properties,
+ GStrv invalidated_properties,
+ gpointer user_data)
{
NMBluezDevice *self = NM_BLUEZ_DEVICE (user_data);
- NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- const char *str;
- gint int_val;
-
- g_object_freeze_notify (G_OBJECT (self));
- {
- if (!strcmp (property, "Name")) {
- str = g_value_get_string (value);
- if ( (!priv->name && str)
- || (priv->name && !str)
- || (priv->name && str && strcmp (priv->name, str))) {
- g_free (priv->name);
- priv->name = g_strdup (str);
- g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_NAME);
- }
- } else if (!strcmp (property, "RSSI")) {
- int_val = g_value_get_int (value);
- if (priv->rssi != int_val) {
- priv->rssi = int_val;
- g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_RSSI);
- }
- } else if (!strcmp (property, "UUIDs")) {
- _set_property_capabilities (self, (const char **) g_value_get_boxed (value), TRUE);
- } else if (!strcmp (property, "Connected")) {
- gboolean connected = g_value_get_boolean (value);
- if (priv->connected != connected) {
- priv->connected = connected;
- g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CONNECTED);
- }
- }
- }
- g_object_thaw_notify (G_OBJECT (self));
+ _set_properties (self, changed_properties);
check_emit_usable (self);
}
-#endif
-#if ! WITH_BLUEZ4
static void
-query_properties (NMBluezDevice *self)
+bluez4_property_changed (GDBusProxy *proxy,
+ const char *sender,
+ const char *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
{
- NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- GVariant *v;
- const char **uuids;
-
- v = g_dbus_proxy_get_cached_property (priv->proxy5, "Address");
- _set_property_address (self, v ? g_variant_get_string (v, NULL) : NULL);
- if (v)
- g_variant_unref (v);
-
- v = g_dbus_proxy_get_cached_property (priv->proxy5, "Name");
- priv->name = v ? g_variant_dup_string (v, NULL) : NULL;
- if (v)
- g_variant_unref (v);
+ NMBluezDevice *self = NM_BLUEZ_DEVICE (user_data);
- v = g_dbus_proxy_get_cached_property (priv->proxy5, "RSSI");
- priv->rssi = v ? g_variant_get_int16 (v) : 0;
- if (v)
- g_variant_unref (v);
+ if (g_strcmp0 (signal_name, "PropertyChanged") == 0) {
+ const char *property = NULL;
+ GVariant *v = NULL;
- v = g_dbus_proxy_get_cached_property (priv->proxy5, "UUIDs");
- if (v) {
- uuids = g_variant_get_strv (v, NULL);
- _set_property_capabilities (self, uuids, FALSE);
- g_variant_unref (v);
- } else
- priv->capabilities = NM_BT_CAPABILITY_NONE;
-
- v = g_dbus_proxy_get_cached_property (priv->proxy5, "Adapter");
- if (v) {
- g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_NONE,
- NULL,
- BLUEZ_SERVICE,
- g_variant_get_string (v, NULL),
- BLUEZ_ADAPTER_INTERFACE,
- NULL,
- (GAsyncReadyCallback) on_adapter_acquired,
- g_object_ref (self));
- g_variant_unref (v);
+ g_variant_get (parameters, "(&sv)", &property, &v);
+ _take_one_variant_property (self, property, v);
+ check_emit_usable (self);
}
-
- /* Check if any connections match this device */
- cp_connections_loaded (priv->provider, self);
}
-#else
+
static void
-get_properties_cb (DBusGProxy *proxy4, DBusGProxyCall *call, gpointer user_data)
+get_properties_cb_4 (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
NMBluezDevice *self = NM_BLUEZ_DEVICE (user_data);
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- GHashTable *properties = NULL;
GError *err = NULL;
- GValue *value;
+ GVariant *v_properties, *v_dict;
+ GVariantType *v_type;
- if (!dbus_g_proxy_end_call (proxy4, call, &err,
- DBUS_TYPE_G_MAP_OF_VARIANT, &properties,
- G_TYPE_INVALID)) {
- nm_log_warn (LOGD_BT, "bluez error getting device properties: %s",
- err && err->message ? err->message : "(unknown)");
+ v_properties = g_dbus_proxy_call_finish (priv->proxy, res, &err);
+ if (!v_properties) {
+ nm_log_warn (LOGD_BT, "bluez[%s] error getting device properties: %s",
+ priv->path, err && err->message ? err->message : "(unknown)");
g_error_free (err);
g_signal_emit (self, signals[INITIALIZED], 0, FALSE);
- return;
+ goto END;
}
- value = g_hash_table_lookup (properties, "Address");
- _set_property_address (self, value ? g_value_get_string (value) : NULL);
-
- value = g_hash_table_lookup (properties, "Name");
- priv->name = value ? g_value_dup_string (value) : NULL;
-
- value = g_hash_table_lookup (properties, "RSSI");
- priv->rssi = value ? g_value_get_int (value) : 0;
-
- value = g_hash_table_lookup (properties, "UUIDs");
- if (value) {
- _set_property_capabilities (self, (const char **) g_value_get_boxed (value), FALSE);
- } else
- priv->capabilities = NM_BT_CAPABILITY_NONE;
+ v_type = g_variant_type_new ("(a{sv})");
+ if (g_variant_is_of_type (v_properties, v_type)) {
+ v_dict = g_variant_get_child_value (v_properties, 0);
+ _set_properties (self, v_dict);
+ g_variant_unref (v_dict);
+ } else {
+ nm_log_warn (LOGD_BT, "bluez[%s] GetProperties returns unexpected result of type %s", priv->path, g_variant_get_type_string (v_properties));
+ }
+ g_variant_type_free (v_type);
- g_hash_table_unref (properties);
+ g_variant_unref (v_properties);
/* Check if any connections match this device */
- cp_connections_loaded (priv->provider, self);
+ load_connections (self);
priv->initialized = TRUE;
g_signal_emit (self, signals[INITIALIZED], 0, TRUE);
+
check_emit_usable (self);
+
+END:
+ g_object_unref (self);
}
static void
query_properties (NMBluezDevice *self)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- DBusGProxyCall *call;
-
- call = dbus_g_proxy_begin_call (priv->proxy4, "GetProperties",
- get_properties_cb,
- self,
- NULL, G_TYPE_INVALID);
- if (!call) {
- nm_log_warn (LOGD_BT, "failed to request Bluetooth device properties for %s.",
- priv->path);
+ GVariant *v;
+
+ switch (priv->bluez_version) {
+ case 4:
+ g_dbus_proxy_call (priv->proxy, "GetProperties", NULL, G_DBUS_CALL_FLAGS_NO_AUTO_START, 3000,
+ NULL, get_properties_cb_4, g_object_ref (self));
+ break;
+ case 5:
+ g_object_freeze_notify (G_OBJECT (self));
+ _take_variant_property_address (self, g_dbus_proxy_get_cached_property (priv->proxy, "Address"));
+ _take_variant_property_connected (self, g_dbus_proxy_get_cached_property (priv->proxy, "Connected"));
+ _take_variant_property_name (self, g_dbus_proxy_get_cached_property (priv->proxy, "Name"));
+ _take_variant_property_uuids (self, g_dbus_proxy_get_cached_property (priv->proxy, "UUIDs"));
+ g_object_thaw_notify (G_OBJECT (self));
+
+ v = g_dbus_proxy_get_cached_property (priv->proxy, "Adapter");
+ if (VARIANT_IS_OF_TYPE_OBJECT_PATH (v)) {
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ BLUEZ_SERVICE,
+ g_variant_get_string (v, NULL),
+ BLUEZ5_ADAPTER_INTERFACE,
+ NULL,
+ (GAsyncReadyCallback) adapter5_on_acquired,
+ g_object_ref (self));
+ g_variant_unref (v);
+ } else {
+ /* If the Adapter property is unset at this point, we won't try to acquire the adapter later on
+ * and the device stays unusable. This should not happen, but if it does, log a debug message. */
+ nm_log_dbg (LOGD_BT, "bluez[%s] device has no adapter property and cannot be used.", priv->path);
+ }
+
+ /* Check if any connections match this device */
+ load_connections (self);
+
+ break;
}
}
-#endif
-
-#if ! WITH_BLUEZ4
static void
on_proxy_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- GError *error;
+ GError *error = NULL;
- priv->proxy5 = g_dbus_proxy_new_for_bus_finish (res, &error);
+ priv->proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
- if (!priv->proxy5) {
- nm_log_warn (LOGD_BT, "failed to acquire device proxy: %s.", error->message);
+ if (!priv->proxy) {
+ nm_log_warn (LOGD_BT, "bluez[%s] failed to acquire device proxy: %s.", priv->path, error->message);
g_clear_error (&error);
g_signal_emit (self, signals[INITIALIZED], 0, FALSE);
} else {
- g_signal_connect (priv->proxy5, "g-properties-changed",
+ g_signal_connect (priv->proxy, "g-properties-changed",
G_CALLBACK (properties_changed), self);
+ if (priv->bluez_version == 4) {
+ /* Watch for custom Bluez4 PropertyChanged signals */
+ g_signal_connect (priv->proxy, "g-signal",
+ G_CALLBACK (bluez4_property_changed), self);
+ }
query_properties (self);
}
g_object_unref (self);
}
-#endif
static void
on_bus_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
@@ -951,29 +945,27 @@ on_bus_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
priv->dbus_connection = g_bus_get_finish (res, &error);
if (!priv->dbus_connection) {
- nm_log_warn (LOGD_BT, "failed to acquire bus connection: %s.", error->message);
+ nm_log_warn (LOGD_BT, "bluez[%s] failed to acquire bus connection: %s.", priv->path, error->message);
g_clear_error (&error);
g_signal_emit (self, signals[INITIALIZED], 0, FALSE);
- return;
- }
+ } else
+ check_emit_usable (self);
- check_emit_usable (self);
+ g_object_unref (self);
}
/********************************************************************/
NMBluezDevice *
-nm_bluez_device_new (const char *path, NMConnectionProvider *provider)
+nm_bluez_device_new (const char *path, NMConnectionProvider *provider, int bluez_version)
{
NMBluezDevice *self;
NMBluezDevicePrivate *priv;
-#if WITH_BLUEZ4
- NMDBusManager *dbus_mgr;
- DBusGConnection *connection;
-#endif
+ const char *interface_name = NULL;
g_return_val_if_fail (path != NULL, NULL);
g_return_val_if_fail (provider != NULL, NULL);
+ g_return_val_if_fail (bluez_version == 4 || bluez_version == 5, NULL);
self = (NMBluezDevice *) g_object_new (NM_TYPE_BLUEZ_DEVICE,
NM_BLUEZ_DEVICE_PATH, path,
@@ -981,8 +973,12 @@ nm_bluez_device_new (const char *path, NMConnectionProvider *provider)
if (!self)
return NULL;
+ nm_log_dbg (LOGD_BT, "bluez[%s] create NMBluezDevice", path);
+
priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
+ priv->bluez_version = bluez_version;
+
priv->provider = provider;
g_signal_connect (priv->provider,
@@ -1000,48 +996,29 @@ nm_bluez_device_new (const char *path, NMConnectionProvider *provider)
G_CALLBACK (cp_connection_updated),
self);
- g_signal_connect (priv->provider,
- NM_CP_SIGNAL_CONNECTIONS_LOADED,
- G_CALLBACK (cp_connections_loaded),
- self);
-
g_bus_get (G_BUS_TYPE_SYSTEM,
NULL,
(GAsyncReadyCallback) on_bus_acquired,
- self);
+ g_object_ref (self));
+
+ switch (priv->bluez_version) {
+ case 4:
+ interface_name = BLUEZ4_DEVICE_INTERFACE;
+ break;
+ case 5:
+ interface_name = BLUEZ5_DEVICE_INTERFACE;
+ break;
+ }
-#if ! WITH_BLUEZ4
- g_object_ref (self);
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE,
NULL,
BLUEZ_SERVICE,
priv->path,
- BLUEZ_DEVICE_INTERFACE,
+ interface_name,
NULL,
(GAsyncReadyCallback) on_proxy_acquired,
- self);
-#else
- dbus_mgr = nm_dbus_manager_get ();
- connection = nm_dbus_manager_get_connection (dbus_mgr);
-
- priv->proxy4 = dbus_g_proxy_new_for_name (connection,
- BLUEZ_SERVICE,
- priv->path,
- BLUEZ_DEVICE_INTERFACE);
- g_object_unref (dbus_mgr);
-
- dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_BOXED,
- G_TYPE_NONE,
- G_TYPE_STRING, G_TYPE_VALUE,
- G_TYPE_INVALID);
- dbus_g_proxy_add_signal (priv->proxy4, "PropertyChanged",
- G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->proxy4, "PropertyChanged",
- G_CALLBACK (property_changed), self, NULL);
-
- query_properties (self);
-#endif
+ g_object_ref (self));
return self;
}
@@ -1055,22 +1032,37 @@ dispose (GObject *object)
{
NMBluezDevice *self = NM_BLUEZ_DEVICE (object);
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
+ NMConnection *to_delete = NULL;
- g_slist_foreach (priv->connections, (GFunc) g_object_unref, NULL);
- g_slist_free (priv->connections);
- priv->connections = NULL;
+ if (priv->pan_connection) {
+ /* Check whether we want to remove the created connection. If so, we take a reference
+ * and delete it at the end of dispose(). */
+ if ( nm_settings_connection_get_unsaved (NM_SETTINGS_CONNECTION (priv->pan_connection))
+ && nm_connection_compare (priv->pan_connection, priv->pan_connection_original, NM_SETTING_COMPARE_FLAG_EXACT))
+ to_delete = g_object_ref (priv->pan_connection);
+
+ priv->pan_connection = NULL;
+ g_clear_object (&priv->pan_connection_original);
+ }
g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_added, self);
g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_removed, self);
g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_updated, self);
- g_signal_handlers_disconnect_by_func (priv->provider, cp_connections_loaded, self);
-#if ! WITH_BLUEZ4
- g_clear_object (&priv->adapter);
-#endif
+ g_slist_free_full (priv->connections, g_object_unref);
+ priv->connections = NULL;
+
+ g_clear_object (&priv->adapter5);
g_clear_object (&priv->dbus_connection);
G_OBJECT_CLASS (nm_bluez_device_parent_class)->dispose (object);
+
+ if (to_delete) {
+ nm_log_dbg (LOGD_BT, "bluez[%s] removing Bluetooth connection for NAP device: '%s' (%s)", priv->path,
+ nm_connection_get_id (to_delete), nm_connection_get_uuid (to_delete));
+ nm_settings_connection_delete (NM_SETTINGS_CONNECTION (to_delete), NULL, NULL);
+ g_object_unref (to_delete);
+ }
}
static void
@@ -1078,15 +1070,16 @@ finalize (GObject *object)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (object);
+ nm_log_dbg (LOGD_BT, "bluez[%s]: finalize NMBluezDevice", priv->path);
+
g_free (priv->path);
g_free (priv->address);
g_free (priv->name);
g_free (priv->bt_iface);
-#if ! WITH_BLUEZ4
- g_object_unref (priv->proxy5);
-#else
- g_object_unref (priv->proxy4);
-#endif
+
+ if (priv->proxy)
+ g_signal_handlers_disconnect_by_data (priv->proxy, object);
+ g_clear_object (&priv->proxy);
G_OBJECT_CLASS (nm_bluez_device_parent_class)->finalize (object);
}
@@ -1110,9 +1103,6 @@ get_property (GObject *object, guint prop_id,
case PROP_CAPABILITIES:
g_value_set_uint (value, priv->capabilities);
break;
- case PROP_RSSI:
- g_value_set_int (value, priv->rssi);
- break;
case PROP_USABLE:
g_value_set_boolean (value, priv->usable);
break;
@@ -1189,14 +1179,6 @@ nm_bluez_device_class_init (NMBluezDeviceClass *config_class)
G_PARAM_READABLE));
g_object_class_install_property
- (object_class, PROP_RSSI,
- g_param_spec_int (NM_BLUEZ_DEVICE_RSSI,
- "RSSI",
- "RSSI",
- G_MININT, G_MAXINT, 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property
(object_class, PROP_USABLE,
g_param_spec_boolean (NM_BLUEZ_DEVICE_USABLE,
"Usable",
@@ -1219,5 +1201,12 @@ nm_bluez_device_class_init (NMBluezDeviceClass *config_class)
G_STRUCT_OFFSET (NMBluezDeviceClass, initialized),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals[REMOVED] = g_signal_new (NM_BLUEZ_DEVICE_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMBluezDeviceClass, removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
}
diff --git a/src/bluez-manager/nm-bluez-device.h b/src/devices/bluetooth/nm-bluez-device.h
index 11add3890..0bf7d898b 100644
--- a/src/bluez-manager/nm-bluez-device.h
+++ b/src/devices/bluetooth/nm-bluez-device.h
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
+ * Copyright (C) 2009 - 2014 Red Hat, Inc.
*/
#ifndef NM_BLUEZ_DEVICE_H
@@ -36,14 +36,17 @@
#define NM_IS_BLUEZ_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ_DEVICE))
#define NM_BLUEZ_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ_DEVICE, NMBluezDeviceClass))
+/* Properties */
#define NM_BLUEZ_DEVICE_PATH "path"
#define NM_BLUEZ_DEVICE_ADDRESS "address"
#define NM_BLUEZ_DEVICE_NAME "name"
#define NM_BLUEZ_DEVICE_CAPABILITIES "capabilities"
-#define NM_BLUEZ_DEVICE_RSSI "rssi"
#define NM_BLUEZ_DEVICE_USABLE "usable"
#define NM_BLUEZ_DEVICE_CONNECTED "connected"
+/* Signals */
+#define NM_BLUEZ_DEVICE_REMOVED "removed"
+
typedef struct {
GObject parent;
} NMBluezDevice;
@@ -54,12 +57,12 @@ typedef struct {
/* virtual functions */
void (*initialized) (NMBluezDevice *self, gboolean success);
- void (*invalid) (NMBluezDevice *self);
+ void (*removed) (NMBluezDevice *self);
} NMBluezDeviceClass;
GType nm_bluez_device_get_type (void);
-NMBluezDevice *nm_bluez_device_new (const char *path, NMConnectionProvider *provider);
+NMBluezDevice *nm_bluez_device_new (const char *path, NMConnectionProvider *provider, int bluez_version);
const char *nm_bluez_device_get_path (NMBluezDevice *self);
@@ -75,8 +78,6 @@ guint32 nm_bluez_device_get_class (NMBluezDevice *self);
guint32 nm_bluez_device_get_capabilities (NMBluezDevice *self);
-gint nm_bluez_device_get_rssi (NMBluezDevice *self);
-
gboolean nm_bluez_device_get_connected (NMBluezDevice *self);
void
diff --git a/src/devices/bluetooth/nm-bluez-manager.c b/src/devices/bluetooth/nm-bluez-manager.c
new file mode 100644
index 000000000..04ffb0a47
--- /dev/null
+++ b/src/devices/bluetooth/nm-bluez-manager.c
@@ -0,0 +1,428 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 - 2014 Red Hat, Inc.
+ */
+
+#include <signal.h>
+#include <string.h>
+#include <stdlib.h>
+#include <gmodule.h>
+#include <gio/gio.h>
+
+#include "nm-logging.h"
+#include "nm-bluez-manager.h"
+#include "nm-device-factory.h"
+#include "nm-bluez4-manager.h"
+#include "nm-bluez5-manager.h"
+#include "nm-bluez-device.h"
+#include "nm-bluez-common.h"
+#include "nm-connection-provider.h"
+#include "nm-device-bt.h"
+
+#include "nm-dbus-manager.h"
+
+typedef struct {
+ int bluez_version;
+
+ NMConnectionProvider *provider;
+ NMBluez4Manager *manager4;
+ NMBluez5Manager *manager5;
+
+ guint watch_name_id;
+
+ GDBusProxy *introspect_proxy;
+ GCancellable *async_cancellable;
+} NMBluezManagerPrivate;
+
+#define NM_BLUEZ_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerPrivate))
+
+static GType nm_bluez_manager_get_type (void);
+
+static void device_factory_interface_init (NMDeviceFactory *factory_iface);
+
+G_DEFINE_TYPE_EXTENDED (NMBluezManager, nm_bluez_manager, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
+
+static void check_bluez_and_try_setup (NMBluezManager *self);
+
+/**************************************************************************/
+
+#define PLUGIN_TYPE NM_DEVICE_TYPE_BT
+
+G_MODULE_EXPORT NMDeviceFactory *
+nm_device_factory_create (GError **error)
+{
+ return (NMDeviceFactory *) g_object_new (NM_TYPE_BLUEZ_MANAGER, NULL);
+}
+
+G_MODULE_EXPORT NMDeviceType
+nm_device_factory_get_device_type (void)
+{
+ return PLUGIN_TYPE;
+}
+
+/************************************************************************/
+
+struct AsyncData {
+ NMBluezManager *self;
+ GCancellable *async_cancellable;
+};
+
+static struct AsyncData *
+async_data_pack (NMBluezManager *self)
+{
+ struct AsyncData *data = g_new (struct AsyncData, 1);
+
+ data->self = self;
+ data->async_cancellable = g_object_ref (NM_BLUEZ_MANAGER_GET_PRIVATE (self)->async_cancellable);
+ return data;
+}
+
+static NMBluezManager *
+async_data_unpack (struct AsyncData *async_data)
+{
+ NMBluezManager *self = g_cancellable_is_cancelled (async_data->async_cancellable)
+ ? NULL : async_data->self;
+
+ g_object_unref (async_data->async_cancellable);
+ g_free (async_data);
+ return self;
+}
+
+
+/**
+ * Cancel any current attempt to detect the version and cleanup
+ * the related fields.
+ **/
+static void
+cleanup_checking (NMBluezManager *self, gboolean do_unwatch_name)
+{
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ if (priv->async_cancellable) {
+ g_cancellable_cancel (priv->async_cancellable);
+ g_clear_object (&priv->async_cancellable);
+ }
+
+ g_clear_object (&priv->introspect_proxy);
+
+ if (do_unwatch_name && priv->watch_name_id) {
+ g_bus_unwatch_name (priv->watch_name_id);
+ priv->watch_name_id = 0;
+ }
+}
+
+
+static void
+manager_bdaddr_added_cb (NMBluez4Manager *bluez_mgr,
+ NMBluezDevice *bt_device,
+ const char *bdaddr,
+ const char *name,
+ const char *object_path,
+ guint32 capabilities,
+ gpointer user_data)
+{
+ NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
+ NMDevice *device;
+ gboolean has_dun = (capabilities & NM_BT_CAPABILITY_DUN);
+ gboolean has_nap = (capabilities & NM_BT_CAPABILITY_NAP);
+
+ g_return_if_fail (bdaddr != NULL);
+ g_return_if_fail (name != NULL);
+ g_return_if_fail (object_path != NULL);
+ g_return_if_fail (capabilities != NM_BT_CAPABILITY_NONE);
+ g_return_if_fail (NM_IS_BLUEZ_DEVICE (bt_device));
+
+ device = nm_device_bt_new (bt_device, object_path, bdaddr, name, capabilities);
+ if (!device)
+ return;
+
+ nm_log_info (LOGD_BT, "BT device %s (%s) added (%s%s%s)",
+ name,
+ bdaddr,
+ has_dun ? "DUN" : "",
+ has_dun && has_nap ? " " : "",
+ has_nap ? "NAP" : "");
+ g_signal_emit_by_name (self, NM_DEVICE_FACTORY_DEVICE_ADDED, device);
+ g_object_unref (device);
+}
+
+static void
+setup_version_number (NMBluezManager *self, int bluez_version)
+{
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (!priv->bluez_version);
+
+ nm_log_info (LOGD_BT, "use BlueZ version %d", bluez_version);
+
+ priv->bluez_version = bluez_version;
+
+ /* Just detected the version. Cleanup the ongoing checking/detection. */
+ cleanup_checking (self, TRUE);
+}
+
+static void
+setup_bluez4 (NMBluezManager *self)
+{
+ NMBluez4Manager *manager;
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (!priv->manager4 && !priv->manager5 && !priv->bluez_version);
+
+ setup_version_number (self, 4);
+ priv->manager4 = manager = nm_bluez4_manager_new (priv->provider);
+
+ g_signal_connect (manager,
+ NM_BLUEZ_MANAGER_BDADDR_ADDED,
+ G_CALLBACK (manager_bdaddr_added_cb),
+ self);
+
+ nm_bluez4_manager_query_devices (manager);
+}
+
+static void
+setup_bluez5 (NMBluezManager *self)
+{
+ NMBluez5Manager *manager;
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (!priv->manager4 && !priv->manager5 && !priv->bluez_version);
+
+ setup_version_number (self, 5);
+ priv->manager5 = manager = nm_bluez5_manager_new (priv->provider);
+
+ g_signal_connect (manager,
+ NM_BLUEZ_MANAGER_BDADDR_ADDED,
+ G_CALLBACK (manager_bdaddr_added_cb),
+ self);
+
+ nm_bluez5_manager_query_devices (manager);
+}
+
+
+static void
+watch_name_on_appeared (GDBusConnection *connection,
+ const gchar *name,
+ const gchar *name_owner,
+ gpointer user_data)
+{
+ check_bluez_and_try_setup (NM_BLUEZ_MANAGER (user_data));
+}
+
+
+static void
+check_bluez_and_try_setup_final_step (NMBluezManager *self, int bluez_version, const char *reason)
+{
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (!priv->bluez_version);
+
+ switch (bluez_version) {
+ case 4:
+ setup_bluez4 (self);
+ break;
+ case 5:
+ setup_bluez5 (self);
+ break;
+ default:
+ nm_log_dbg (LOGD_BT, "detecting BlueZ version failed: %s", reason);
+
+ /* cancel current attempts to detect the version. */
+ cleanup_checking (self, FALSE);
+ if (!priv->watch_name_id) {
+ priv->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
+ BLUEZ_SERVICE,
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ watch_name_on_appeared,
+ NULL,
+ self,
+ NULL);
+ }
+ break;
+ }
+}
+
+static void
+check_bluez_and_try_setup_do_introspect (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ NMBluezManager *self = async_data_unpack (user_data);
+ NMBluezManagerPrivate *priv;
+ GError *error = NULL;
+ GVariant *result;
+ const char *xml_data;
+ int bluez_version = 0;
+ const char *reason = NULL;
+
+ if (!self)
+ return;
+
+ priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (priv->introspect_proxy);
+ g_return_if_fail (!g_cancellable_is_cancelled (priv->async_cancellable));
+ g_return_if_fail (!priv->bluez_version);
+
+ g_clear_object (&priv->async_cancellable);
+
+ result = g_dbus_proxy_call_finish (priv->introspect_proxy, res, &error);
+
+ if (!result) {
+ char *reason2 = g_strdup_printf ("introspect failed with %s", error->message);
+ check_bluez_and_try_setup_final_step (self, 0, reason2);
+ g_error_free (error);
+ g_free (reason2);
+ return;
+ }
+
+ g_variant_get (result, "(&s)", &xml_data);
+
+ /* might not be the best approach to detect the version, but it's good enough in practice. */
+ if (strstr (xml_data, "org.freedesktop.DBus.ObjectManager"))
+ bluez_version = 5;
+ else if (strstr (xml_data, BLUEZ4_MANAGER_INTERFACE))
+ bluez_version = 4;
+ else
+ reason = "unexpected introspect result";
+
+ g_variant_unref (result);
+
+ check_bluez_and_try_setup_final_step (self, bluez_version, reason);
+}
+
+static void
+check_bluez_and_try_setup_on_new_proxy (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ NMBluezManager *self = async_data_unpack (user_data);
+ NMBluezManagerPrivate *priv;
+ GError *error = NULL;
+
+ if (!self)
+ return;
+
+ priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (!priv->introspect_proxy);
+ g_return_if_fail (!g_cancellable_is_cancelled (priv->async_cancellable));
+ g_return_if_fail (!priv->bluez_version);
+
+ priv->introspect_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+
+ if (!priv->introspect_proxy) {
+ char *reason = g_strdup_printf ("bluez error creating dbus proxy: %s", error->message);
+ check_bluez_and_try_setup_final_step (self, 0, reason);
+ g_error_free (error);
+ g_free (reason);
+ return;
+ }
+
+ g_dbus_proxy_call (priv->introspect_proxy,
+ "Introspect",
+ NULL,
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ priv->async_cancellable,
+ check_bluez_and_try_setup_do_introspect,
+ async_data_pack (self));
+}
+
+static void
+check_bluez_and_try_setup (NMBluezManager *self)
+{
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (!priv->bluez_version);
+
+ /* there should be no ongoing detection. Anyway, cleanup_checking. */
+ cleanup_checking (self, FALSE);
+
+ priv->async_cancellable = g_cancellable_new ();
+
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
+ NULL,
+ BLUEZ_SERVICE,
+ "/",
+ DBUS_INTERFACE_INTROSPECTABLE,
+ priv->async_cancellable,
+ check_bluez_and_try_setup_on_new_proxy,
+ async_data_pack (self));
+}
+
+/*********************************************************************/
+
+static void
+dispose (GObject *object)
+{
+ NMBluezManager *self = NM_BLUEZ_MANAGER (object);
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ if (priv->manager4) {
+ g_signal_handlers_disconnect_by_func (priv->manager4, manager_bdaddr_added_cb, self);
+ g_clear_object (&priv->manager4);
+ }
+ if (priv->manager5) {
+ g_signal_handlers_disconnect_by_func (priv->manager5, manager_bdaddr_added_cb, self);
+ g_clear_object (&priv->manager5);
+ }
+
+ cleanup_checking (self, TRUE);
+
+ priv->bluez_version = 0;
+}
+
+static void
+constructed (GObject *object)
+{
+ NMBluezManager *self = NM_BLUEZ_MANAGER (object);
+
+ G_OBJECT_CLASS (nm_bluez_manager_parent_class)->constructed (object);
+
+ check_bluez_and_try_setup (self);
+}
+
+static void
+nm_bluez_manager_init (NMBluezManager *self)
+{
+ NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+
+ priv->provider = nm_connection_provider_get ();
+ g_assert (priv->provider);
+}
+
+static void
+device_factory_interface_init (NMDeviceFactory *factory_iface)
+{
+}
+
+static void
+nm_bluez_manager_class_init (NMBluezManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMBluezManagerPrivate));
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+ object_class->constructed = constructed;
+}
+
diff --git a/src/devices/bluetooth/nm-bluez-manager.h b/src/devices/bluetooth/nm-bluez-manager.h
new file mode 100644
index 000000000..68d6dbe5e
--- /dev/null
+++ b/src/devices/bluetooth/nm-bluez-manager.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ */
+
+#ifndef NM_BLUEZ_MANAGER_H
+#define NM_BLUEZ_MANAGER_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_BLUEZ_MANAGER (nm_bluez_manager_get_type ())
+#define NM_BLUEZ_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ_MANAGER, NMBluezManager))
+
+#define NM_BLUEZ_MANAGER_BDADDR_ADDED "bdaddr-added"
+
+typedef struct {
+ GObject parent;
+} NMBluezManager;
+
+typedef struct {
+ GObjectClass parent;
+} NMBluezManagerClass;
+
+#endif /* NM_BLUEZ_MANAGER_H */
+
diff --git a/src/bluez-manager/nm-bluez4-adapter.c b/src/devices/bluetooth/nm-bluez4-adapter.c
index 817df73d5..ad1786f02 100644
--- a/src/bluez-manager/nm-bluez4-adapter.c
+++ b/src/devices/bluetooth/nm-bluez4-adapter.c
@@ -30,9 +30,9 @@
#include "nm-logging.h"
-G_DEFINE_TYPE (NMBluezAdapter, nm_bluez_adapter, G_TYPE_OBJECT)
+G_DEFINE_TYPE (NMBluez4Adapter, nm_bluez4_adapter, G_TYPE_OBJECT)
-#define NM_BLUEZ_ADAPTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ_ADAPTER, NMBluezAdapterPrivate))
+#define NM_BLUEZ4_ADAPTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ4_ADAPTER, NMBluez4AdapterPrivate))
typedef struct {
char *path;
@@ -44,7 +44,7 @@ typedef struct {
/* Cached for devices */
NMConnectionProvider *provider;
-} NMBluezAdapterPrivate;
+} NMBluez4AdapterPrivate;
enum {
@@ -64,38 +64,40 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
+static void device_do_remove (NMBluez4Adapter *self, NMBluezDevice *device);
+
const char *
-nm_bluez_adapter_get_path (NMBluezAdapter *self)
+nm_bluez4_adapter_get_path (NMBluez4Adapter *self)
{
- g_return_val_if_fail (NM_IS_BLUEZ_ADAPTER (self), NULL);
+ g_return_val_if_fail (NM_IS_BLUEZ4_ADAPTER (self), NULL);
- return NM_BLUEZ_ADAPTER_GET_PRIVATE (self)->path;
+ return NM_BLUEZ4_ADAPTER_GET_PRIVATE (self)->path;
}
const char *
-nm_bluez_adapter_get_address (NMBluezAdapter *self)
+nm_bluez4_adapter_get_address (NMBluez4Adapter *self)
{
- g_return_val_if_fail (NM_IS_BLUEZ_ADAPTER (self), NULL);
+ g_return_val_if_fail (NM_IS_BLUEZ4_ADAPTER (self), NULL);
- return NM_BLUEZ_ADAPTER_GET_PRIVATE (self)->address;
+ return NM_BLUEZ4_ADAPTER_GET_PRIVATE (self)->address;
}
gboolean
-nm_bluez_adapter_get_initialized (NMBluezAdapter *self)
+nm_bluez4_adapter_get_initialized (NMBluez4Adapter *self)
{
- g_return_val_if_fail (NM_IS_BLUEZ_ADAPTER (self), FALSE);
+ g_return_val_if_fail (NM_IS_BLUEZ4_ADAPTER (self), FALSE);
- return NM_BLUEZ_ADAPTER_GET_PRIVATE (self)->initialized;
+ return NM_BLUEZ4_ADAPTER_GET_PRIVATE (self)->initialized;
}
GSList *
-nm_bluez_adapter_get_devices (NMBluezAdapter *self)
+nm_bluez4_adapter_get_devices (NMBluez4Adapter *self)
{
GSList *devices = NULL;
GHashTableIter iter;
NMBluezDevice *device;
- g_hash_table_iter_init (&iter, NM_BLUEZ_ADAPTER_GET_PRIVATE (self)->devices);
+ g_hash_table_iter_init (&iter, NM_BLUEZ4_ADAPTER_GET_PRIVATE (self)->devices);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &device)) {
if (nm_bluez_device_get_usable (device))
devices = g_slist_append (devices, device);
@@ -104,45 +106,63 @@ nm_bluez_adapter_get_devices (NMBluezAdapter *self)
}
static void
-device_usable (NMBluezDevice *device, GParamSpec *pspec, gpointer user_data)
+emit_device_removed (NMBluez4Adapter *self, NMBluezDevice *device)
{
- NMBluezAdapter *self = NM_BLUEZ_ADAPTER (user_data);
- gboolean usable = nm_bluez_device_get_usable (device);
+ nm_log_dbg (LOGD_BT, "(%s): bluez device now unusable",
+ nm_bluez_device_get_path (device));
+ g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
+}
- nm_log_dbg (LOGD_BT, "(%s): bluez device now %s",
- nm_bluez_device_get_path (device),
- usable ? "usable" : "unusable");
+static void
+device_usable (NMBluezDevice *device, GParamSpec *pspec, gpointer user_data)
+{
+ NMBluez4Adapter *self = NM_BLUEZ4_ADAPTER (user_data);
- if (usable) {
- nm_log_dbg (LOGD_BT, "(%s): bluez device address %s",
- nm_bluez_device_get_path (device),
- nm_bluez_device_get_address (device));
+ if (nm_bluez_device_get_usable (device)) {
+ nm_log_dbg (LOGD_BT, "(%s): bluez device now usable (device address is %s)",
+ nm_bluez_device_get_path (device),
+ nm_bluez_device_get_address (device));
g_signal_emit (self, signals[DEVICE_ADDED], 0, device);
} else
- g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
+ emit_device_removed (self, device);
}
static void
device_initialized (NMBluezDevice *device, gboolean success, gpointer user_data)
{
- NMBluezAdapter *self = NM_BLUEZ_ADAPTER (user_data);
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
+ NMBluez4Adapter *self = NM_BLUEZ4_ADAPTER (user_data);
nm_log_dbg (LOGD_BT, "(%s): bluez device %s",
nm_bluez_device_get_path (device),
success ? "initialized" : "failed to initialize");
if (!success)
- g_hash_table_remove (priv->devices, nm_bluez_device_get_path (device));
+ device_do_remove (self, device);
+}
+
+static void
+device_do_remove (NMBluez4Adapter *self, NMBluezDevice *device)
+{
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
+
+ if (g_hash_table_remove (priv->devices, nm_bluez_device_get_path (device))) {
+ g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_initialized), self);
+ g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_usable), self);
+
+ if (nm_bluez_device_get_usable (device))
+ emit_device_removed (self, device);
+
+ g_object_unref (device);
+ }
}
static void
device_created (DBusGProxy *proxy, const char *path, gpointer user_data)
{
- NMBluezAdapter *self = NM_BLUEZ_ADAPTER (user_data);
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
+ NMBluez4Adapter *self = NM_BLUEZ4_ADAPTER (user_data);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
NMBluezDevice *device;
- device = nm_bluez_device_new (path, priv->provider);
+ device = nm_bluez_device_new (path, priv->provider, 4);
g_signal_connect (device, "initialized", G_CALLBACK (device_initialized), self);
g_signal_connect (device, "notify::usable", G_CALLBACK (device_usable), self);
g_hash_table_insert (priv->devices, (gpointer) nm_bluez_device_get_path (device), device);
@@ -153,27 +173,23 @@ device_created (DBusGProxy *proxy, const char *path, gpointer user_data)
static void
device_removed (DBusGProxy *proxy, const char *path, gpointer user_data)
{
- NMBluezAdapter *self = NM_BLUEZ_ADAPTER (user_data);
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
+ NMBluez4Adapter *self = NM_BLUEZ4_ADAPTER (user_data);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
NMBluezDevice *device;
nm_log_dbg (LOGD_BT, "(%s): bluez device removed", path);
device = g_hash_table_lookup (priv->devices, path);
- if (device) {
- g_object_ref (device);
- g_hash_table_remove (priv->devices, nm_bluez_device_get_path (device));
- g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
- g_object_unref (device);
- }
+ if (device)
+ device_do_remove (self, device);
}
static void
get_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
{
- NMBluezAdapter *self = NM_BLUEZ_ADAPTER (user_data);
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
+ NMBluez4Adapter *self = NM_BLUEZ4_ADAPTER (user_data);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
GHashTable *properties = NULL;
GError *err = NULL;
GValue *value;
@@ -207,9 +223,9 @@ done:
}
static void
-query_properties (NMBluezAdapter *self)
+query_properties (NMBluez4Adapter *self)
{
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
DBusGProxyCall *call;
call = dbus_g_proxy_begin_call (priv->proxy, "GetProperties",
@@ -224,32 +240,29 @@ query_properties (NMBluezAdapter *self)
/***********************************************************/
-NMBluezAdapter *
-nm_bluez_adapter_new (const char *path, NMConnectionProvider *provider)
+NMBluez4Adapter *
+nm_bluez4_adapter_new (const char *path, NMConnectionProvider *provider)
{
- NMBluezAdapter *self;
- NMBluezAdapterPrivate *priv;
- NMDBusManager *dbus_mgr;
+ NMBluez4Adapter *self;
+ NMBluez4AdapterPrivate *priv;
DBusGConnection *connection;
- self = (NMBluezAdapter *) g_object_new (NM_TYPE_BLUEZ_ADAPTER,
- NM_BLUEZ_ADAPTER_PATH, path,
- NULL);
+ self = (NMBluez4Adapter *) g_object_new (NM_TYPE_BLUEZ4_ADAPTER,
+ NM_BLUEZ4_ADAPTER_PATH, path,
+ NULL);
if (!self)
return NULL;
- priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
+ priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
priv->provider = provider;
- dbus_mgr = nm_dbus_manager_get ();
- connection = nm_dbus_manager_get_connection (dbus_mgr);
+ connection = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
priv->proxy = dbus_g_proxy_new_for_name (connection,
BLUEZ_SERVICE,
priv->path,
- BLUEZ_ADAPTER_INTERFACE);
- g_object_unref (dbus_mgr);
+ BLUEZ4_ADAPTER_INTERFACE);
dbus_g_proxy_add_signal (priv->proxy, "DeviceCreated",
DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
@@ -266,48 +279,51 @@ nm_bluez_adapter_new (const char *path, NMConnectionProvider *provider)
}
static void
-nm_bluez_adapter_init (NMBluezAdapter *self)
+nm_bluez4_adapter_init (NMBluez4Adapter *self)
{
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL, g_object_unref);
+ NULL, NULL);
+}
+
+static gboolean
+_find_all (gpointer key, gpointer value, gpointer user_data)
+{
+ return TRUE;
}
static void
dispose (GObject *object)
{
- NMBluezAdapter *self = NM_BLUEZ_ADAPTER (object);
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (self);
- GHashTableIter iter;
+ NMBluez4Adapter *self = NM_BLUEZ4_ADAPTER (object);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
NMBluezDevice *device;
- g_hash_table_iter_init (&iter, priv->devices);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &device))
- g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
- g_hash_table_remove_all (priv->devices);
+ while ((device = g_hash_table_find (priv->devices, _find_all, NULL)))
+ device_do_remove (self, device);
- G_OBJECT_CLASS (nm_bluez_adapter_parent_class)->dispose (object);
+ G_OBJECT_CLASS (nm_bluez4_adapter_parent_class)->dispose (object);
}
static void
finalize (GObject *object)
{
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (object);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (object);
g_hash_table_destroy (priv->devices);
g_free (priv->address);
g_free (priv->path);
g_object_unref (priv->proxy);
- G_OBJECT_CLASS (nm_bluez_adapter_parent_class)->finalize (object);
+ G_OBJECT_CLASS (nm_bluez4_adapter_parent_class)->finalize (object);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (object);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (object);
switch (prop_id) {
case PROP_PATH:
@@ -326,7 +342,7 @@ static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
- NMBluezAdapterPrivate *priv = NM_BLUEZ_ADAPTER_GET_PRIVATE (object);
+ NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (object);
switch (prop_id) {
case PROP_PATH:
@@ -340,11 +356,11 @@ set_property (GObject *object, guint prop_id,
}
static void
-nm_bluez_adapter_class_init (NMBluezAdapterClass *config_class)
+nm_bluez4_adapter_class_init (NMBluez4AdapterClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
- g_type_class_add_private (config_class, sizeof (NMBluezAdapterPrivate));
+ g_type_class_add_private (config_class, sizeof (NMBluez4AdapterPrivate));
/* virtual methods */
object_class->get_property = get_property;
@@ -355,7 +371,7 @@ nm_bluez_adapter_class_init (NMBluezAdapterClass *config_class)
/* Properties */
g_object_class_install_property
(object_class, PROP_PATH,
- g_param_spec_string (NM_BLUEZ_ADAPTER_PATH,
+ g_param_spec_string (NM_BLUEZ4_ADAPTER_PATH,
"DBus Path",
"DBus Path",
NULL,
@@ -363,7 +379,7 @@ nm_bluez_adapter_class_init (NMBluezAdapterClass *config_class)
g_object_class_install_property
(object_class, PROP_ADDRESS,
- g_param_spec_string (NM_BLUEZ_ADAPTER_ADDRESS,
+ g_param_spec_string (NM_BLUEZ4_ADAPTER_ADDRESS,
"Address",
"Address",
NULL,
@@ -373,7 +389,7 @@ nm_bluez_adapter_class_init (NMBluezAdapterClass *config_class)
signals[INITIALIZED] = g_signal_new ("initialized",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMBluezAdapterClass, initialized),
+ G_STRUCT_OFFSET (NMBluez4AdapterClass, initialized),
NULL, NULL,
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
@@ -381,7 +397,7 @@ nm_bluez_adapter_class_init (NMBluezAdapterClass *config_class)
signals[DEVICE_ADDED] = g_signal_new ("device-added",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMBluezAdapterClass, device_added),
+ G_STRUCT_OFFSET (NMBluez4AdapterClass, device_added),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
@@ -389,7 +405,7 @@ nm_bluez_adapter_class_init (NMBluezAdapterClass *config_class)
signals[DEVICE_REMOVED] = g_signal_new ("device-removed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMBluezAdapterClass, device_removed),
+ G_STRUCT_OFFSET (NMBluez4AdapterClass, device_removed),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
diff --git a/src/devices/bluetooth/nm-bluez4-adapter.h b/src/devices/bluetooth/nm-bluez4-adapter.h
new file mode 100644
index 000000000..454ca557e
--- /dev/null
+++ b/src/devices/bluetooth/nm-bluez4-adapter.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2009 - 2012 Red Hat, Inc.
+ */
+
+#ifndef NM_BLUEZ4_ADAPTER_H
+#define NM_BLUEZ4_ADAPTER_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "nm-bluez-device.h"
+#include "nm-connection-provider.h"
+
+#define NM_TYPE_BLUEZ4_ADAPTER (nm_bluez4_adapter_get_type ())
+#define NM_BLUEZ4_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ4_ADAPTER, NMBluez4Adapter))
+#define NM_BLUEZ4_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_BLUEZ4_ADAPTER, NMBluez4AdapterClass))
+#define NM_IS_BLUEZ4_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_BLUEZ4_ADAPTER))
+#define NM_IS_BLUEZ4_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ4_ADAPTER))
+#define NM_BLUEZ4_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ4_ADAPTER, NMBluez4AdapterClass))
+
+#define NM_BLUEZ4_ADAPTER_PATH "path"
+#define NM_BLUEZ4_ADAPTER_ADDRESS "address"
+
+typedef struct {
+ GObject parent;
+} NMBluez4Adapter;
+
+typedef struct {
+ GObjectClass parent;
+
+ /* virtual functions */
+ void (*initialized) (NMBluez4Adapter *self, gboolean success);
+
+ void (*device_added) (NMBluez4Adapter *self, NMBluezDevice *device);
+
+ void (*device_removed) (NMBluez4Adapter *self, NMBluezDevice *device);
+} NMBluez4AdapterClass;
+
+GType nm_bluez4_adapter_get_type (void);
+
+NMBluez4Adapter *nm_bluez4_adapter_new (const char *path,
+ NMConnectionProvider *provider);
+
+const char *nm_bluez4_adapter_get_path (NMBluez4Adapter *self);
+
+const char *nm_bluez4_adapter_get_address (NMBluez4Adapter *self);
+
+gboolean nm_bluez4_adapter_get_initialized (NMBluez4Adapter *self);
+
+GSList *nm_bluez4_adapter_get_devices (NMBluez4Adapter *self);
+
+#endif /* NM_BLUEZ4_ADAPTER_H */
+
diff --git a/src/bluez-manager/nm-bluez4-manager.c b/src/devices/bluetooth/nm-bluez4-manager.c
index bd1d251ac..2660cbd92 100644
--- a/src/bluez-manager/nm-bluez4-manager.c
+++ b/src/devices/bluetooth/nm-bluez4-manager.c
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
#include <signal.h>
@@ -26,8 +26,8 @@
#include "nm-logging.h"
#include "nm-dbus-glib-types.h"
-#include "nm-marshal.h"
#include "nm-bluez-manager.h"
+#include "nm-bluez4-manager.h"
#include "nm-bluez4-adapter.h"
#include "nm-dbus-manager.h"
#include "nm-bluez-common.h"
@@ -41,17 +41,15 @@ typedef struct {
DBusGProxy *proxy;
- NMBluezAdapter *adapter;
-} NMBluezManagerPrivate;
+ NMBluez4Adapter *adapter;
+} NMBluez4ManagerPrivate;
-#define NM_BLUEZ_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerPrivate))
+#define NM_BLUEZ4_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ4_MANAGER, NMBluez4ManagerPrivate))
-G_DEFINE_TYPE (NMBluezManager, nm_bluez_manager, G_TYPE_OBJECT)
+G_DEFINE_TYPE (NMBluez4Manager, nm_bluez4_manager, G_TYPE_OBJECT)
enum {
BDADDR_ADDED,
- BDADDR_REMOVED,
-
LAST_SIGNAL
};
@@ -59,7 +57,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
static void
-emit_bdaddr_added (NMBluezManager *self, NMBluezDevice *device)
+emit_bdaddr_added (NMBluez4Manager *self, NMBluezDevice *device)
{
g_signal_emit (self, signals[BDADDR_ADDED], 0,
device,
@@ -70,46 +68,43 @@ emit_bdaddr_added (NMBluezManager *self, NMBluezDevice *device)
}
void
-nm_bluez_manager_query_devices (NMBluezManager *self)
+nm_bluez4_manager_query_devices (NMBluez4Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
GSList *devices, *iter;
if (!priv->adapter)
return;
- devices = nm_bluez_adapter_get_devices (priv->adapter);
+ devices = nm_bluez4_adapter_get_devices (priv->adapter);
for (iter = devices; iter; iter = g_slist_next (iter))
emit_bdaddr_added (self, NM_BLUEZ_DEVICE (iter->data));
g_slist_free (devices);
}
static void
-device_added (NMBluezAdapter *adapter, NMBluezDevice *device, gpointer user_data)
+device_added (NMBluez4Adapter *adapter, NMBluezDevice *device, gpointer user_data)
{
- emit_bdaddr_added (NM_BLUEZ_MANAGER (user_data), device);
+ emit_bdaddr_added (NM_BLUEZ4_MANAGER (user_data), device);
}
static void
-device_removed (NMBluezAdapter *adapter, NMBluezDevice *device, gpointer user_data)
+device_removed (NMBluez4Adapter *adapter, NMBluezDevice *device, gpointer user_data)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
-
- g_signal_emit (self, signals[BDADDR_REMOVED], 0,
- nm_bluez_device_get_address (device),
- nm_bluez_device_get_path (device));
+ /* Re-emit the signal on the device for now; flatten this later */
+ g_signal_emit_by_name (device, NM_BLUEZ_DEVICE_REMOVED);
}
static void
-adapter_initialized (NMBluezAdapter *adapter, gboolean success, gpointer user_data)
+adapter_initialized (NMBluez4Adapter *adapter, gboolean success, gpointer user_data)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4Manager *self = NM_BLUEZ4_MANAGER (user_data);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
if (success) {
GSList *devices, *iter;
- devices = nm_bluez_adapter_get_devices (adapter);
+ devices = nm_bluez4_adapter_get_devices (adapter);
for (iter = devices; iter; iter = g_slist_next (iter))
emit_bdaddr_added (self, NM_BLUEZ_DEVICE (iter->data));
g_slist_free (devices);
@@ -123,22 +118,17 @@ adapter_initialized (NMBluezAdapter *adapter, gboolean success, gpointer user_da
}
static void
-adapter_removed (DBusGProxy *proxy, const char *path, NMBluezManager *self)
+adapter_removed (DBusGProxy *proxy, const char *path, NMBluez4Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
- if (priv->adapter && !strcmp (path, nm_bluez_adapter_get_path (priv->adapter))) {
- if (nm_bluez_adapter_get_initialized (priv->adapter)) {
+ if (priv->adapter && !strcmp (path, nm_bluez4_adapter_get_path (priv->adapter))) {
+ if (nm_bluez4_adapter_get_initialized (priv->adapter)) {
GSList *devices, *iter;
- devices = nm_bluez_adapter_get_devices (priv->adapter);
- for (iter = devices; iter; iter = g_slist_next (iter)) {
- NMBluezDevice *device = NM_BLUEZ_DEVICE (iter->data);
-
- g_signal_emit (self, signals[BDADDR_REMOVED], 0,
- nm_bluez_device_get_address (device),
- nm_bluez_device_get_path (device));
- }
+ devices = nm_bluez4_adapter_get_devices (priv->adapter);
+ for (iter = devices; iter; iter = g_slist_next (iter))
+ g_signal_emit_by_name (NM_BLUEZ_DEVICE (iter->data), NM_BLUEZ_DEVICE_REMOVED);
g_slist_free (devices);
}
@@ -148,13 +138,13 @@ adapter_removed (DBusGProxy *proxy, const char *path, NMBluezManager *self)
}
static void
-default_adapter_changed (DBusGProxy *proxy, const char *path, NMBluezManager *self)
+default_adapter_changed (DBusGProxy *proxy, const char *path, NMBluez4Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
const char *cur_path = NULL;
if (priv->adapter)
- cur_path = nm_bluez_adapter_get_path (priv->adapter);
+ cur_path = nm_bluez4_adapter_get_path (priv->adapter);
if (cur_path) {
if (!path || strcmp (path, cur_path)) {
@@ -168,7 +158,7 @@ default_adapter_changed (DBusGProxy *proxy, const char *path, NMBluezManager *se
/* Add the new default adapter */
if (path) {
- priv->adapter = nm_bluez_adapter_new (path, priv->provider);
+ priv->adapter = nm_bluez4_adapter_new (path, priv->provider);
g_signal_connect (priv->adapter, "initialized", G_CALLBACK (adapter_initialized), self);
}
}
@@ -176,8 +166,8 @@ default_adapter_changed (DBusGProxy *proxy, const char *path, NMBluezManager *se
static void
default_adapter_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4Manager *self = NM_BLUEZ4_MANAGER (user_data);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
const char *default_adapter = NULL;
GError *err = NULL;
@@ -199,9 +189,9 @@ default_adapter_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
}
static void
-query_default_adapter (NMBluezManager *self)
+query_default_adapter (NMBluez4Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
DBusGProxyCall *call;
call = dbus_g_proxy_begin_call (priv->proxy, "DefaultAdapter",
@@ -213,9 +203,9 @@ query_default_adapter (NMBluezManager *self)
}
static void
-bluez_connect (NMBluezManager *self)
+bluez_connect (NMBluez4Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
DBusGConnection *connection;
g_return_if_fail (priv->proxy == NULL);
@@ -227,7 +217,7 @@ bluez_connect (NMBluezManager *self)
priv->proxy = dbus_g_proxy_new_for_name (connection,
BLUEZ_SERVICE,
BLUEZ_MANAGER_PATH,
- BLUEZ_MANAGER_INTERFACE);
+ BLUEZ4_MANAGER_INTERFACE);
dbus_g_proxy_add_signal (priv->proxy, "AdapterRemoved",
DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
@@ -249,8 +239,8 @@ name_owner_changed_cb (NMDBusManager *dbus_mgr,
const char *new_owner,
gpointer user_data)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4Manager *self = NM_BLUEZ4_MANAGER (user_data);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
gboolean old_owner_good = (old_owner && strlen (old_owner));
gboolean new_owner_good = (new_owner && strlen (new_owner));
@@ -270,9 +260,9 @@ name_owner_changed_cb (NMDBusManager *dbus_mgr,
}
static void
-bluez_cleanup (NMBluezManager *self, gboolean do_signal)
+bluez_cleanup (NMBluez4Manager *self, gboolean do_signal)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
if (priv->proxy) {
g_object_unref (priv->proxy);
@@ -290,7 +280,7 @@ dbus_connection_changed_cb (NMDBusManager *dbus_mgr,
DBusGConnection *connection,
gpointer user_data)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
+ NMBluez4Manager *self = NM_BLUEZ4_MANAGER (user_data);
if (!connection)
bluez_cleanup (self, TRUE);
@@ -300,27 +290,20 @@ dbus_connection_changed_cb (NMDBusManager *dbus_mgr,
/****************************************************************/
-NMBluezManager *
-nm_bluez_manager_get (NMConnectionProvider *provider)
+NMBluez4Manager *
+nm_bluez4_manager_new (NMConnectionProvider *provider)
{
- static NMBluezManager *singleton = NULL;
-
- if (singleton)
- return g_object_ref (singleton);
-
- singleton = (NMBluezManager *) g_object_new (NM_TYPE_BLUEZ_MANAGER, NULL);
- g_assert (singleton);
+ NMBluez4Manager *instance;
- /* Cache the connection provider for NMBluezAdapter objects */
- NM_BLUEZ_MANAGER_GET_PRIVATE (singleton)->provider = provider;
-
- return singleton;
+ instance = g_object_new (NM_TYPE_BLUEZ4_MANAGER, NULL);
+ NM_BLUEZ4_MANAGER_GET_PRIVATE (instance)->provider = provider;
+ return instance;
}
static void
-nm_bluez_manager_init (NMBluezManager *self)
+nm_bluez4_manager_init (NMBluez4Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
priv->dbus_mgr = nm_dbus_manager_get ();
g_assert (priv->dbus_mgr);
@@ -341,26 +324,26 @@ nm_bluez_manager_init (NMBluezManager *self)
static void
dispose (GObject *object)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (object);
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez4Manager *self = NM_BLUEZ4_MANAGER (object);
+ NMBluez4ManagerPrivate *priv = NM_BLUEZ4_MANAGER_GET_PRIVATE (self);
bluez_cleanup (self, FALSE);
if (priv->dbus_mgr) {
g_signal_handlers_disconnect_by_func (priv->dbus_mgr, name_owner_changed_cb, self);
g_signal_handlers_disconnect_by_func (priv->dbus_mgr, dbus_connection_changed_cb, self);
- g_object_unref (priv->dbus_mgr);
+ priv->dbus_mgr = NULL;
}
- G_OBJECT_CLASS (nm_bluez_manager_parent_class)->dispose (object);
+ G_OBJECT_CLASS (nm_bluez4_manager_parent_class)->dispose (object);
}
static void
-nm_bluez_manager_class_init (NMBluezManagerClass *klass)
+nm_bluez4_manager_class_init (NMBluez4ManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (NMBluezManagerPrivate));
+ g_type_class_add_private (klass, sizeof (NMBluez4ManagerPrivate));
/* virtual methods */
object_class->dispose = dispose;
@@ -370,17 +353,9 @@ nm_bluez_manager_class_init (NMBluezManagerClass *klass)
g_signal_new (NM_BLUEZ_MANAGER_BDADDR_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMBluezManagerClass, bdaddr_added),
+ G_STRUCT_OFFSET (NMBluez4ManagerClass, bdaddr_added),
NULL, NULL, NULL,
G_TYPE_NONE, 5, G_TYPE_OBJECT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
-
- signals[BDADDR_REMOVED] =
- g_signal_new (NM_BLUEZ_MANAGER_BDADDR_REMOVED,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMBluezManagerClass, bdaddr_removed),
- NULL, NULL, NULL,
- G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
}
diff --git a/src/devices/bluetooth/nm-bluez4-manager.h b/src/devices/bluetooth/nm-bluez4-manager.h
new file mode 100644
index 000000000..19b1c65a1
--- /dev/null
+++ b/src/devices/bluetooth/nm-bluez4-manager.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_BLUEZ4_MANAGER_H
+#define NM_BLUEZ4_MANAGER_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <config.h>
+#include "nm-connection-provider.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_BLUEZ4_MANAGER (nm_bluez4_manager_get_type ())
+#define NM_BLUEZ4_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ4_MANAGER, NMBluez4Manager))
+#define NM_BLUEZ4_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_BLUEZ4_MANAGER, NMBluez4ManagerClass))
+#define NM_IS_BLUEZ4_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_BLUEZ4_MANAGER))
+#define NM_IS_BLUEZ4_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ4_MANAGER))
+#define NM_BLUEZ4_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ4_MANAGER, NMBluez4ManagerClass))
+
+typedef struct {
+ GObject parent;
+} NMBluez4Manager;
+
+typedef struct {
+ GObjectClass parent;
+
+ /* Signals */
+ void (*bdaddr_added) (NMBluez4Manager *manager,
+ const char *bdaddr,
+ const char *name,
+ const char *object_path,
+ guint uuids);
+} NMBluez4ManagerClass;
+
+GType nm_bluez4_manager_get_type (void);
+
+NMBluez4Manager *nm_bluez4_manager_new (NMConnectionProvider *provider);
+
+void nm_bluez4_manager_query_devices (NMBluez4Manager *manager);
+
+#endif /* NM_BLUEZ4_MANAGER_H */
+
diff --git a/src/bluez-manager/nm-bluez-manager.c b/src/devices/bluetooth/nm-bluez5-manager.c
index 3801d5ee3..63006b3ab 100644
--- a/src/bluez-manager/nm-bluez-manager.c
+++ b/src/devices/bluetooth/nm-bluez5-manager.c
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
* Copyright (C) 2013 Intel Corporation.
*/
@@ -27,6 +27,7 @@
#include "nm-logging.h"
#include "nm-bluez-manager.h"
+#include "nm-bluez5-manager.h"
#include "nm-bluez-device.h"
#include "nm-bluez-common.h"
@@ -41,26 +42,24 @@ typedef struct {
GDBusProxy *proxy;
GHashTable *devices;
-} NMBluezManagerPrivate;
+} NMBluez5ManagerPrivate;
-#define NM_BLUEZ_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerPrivate))
+#define NM_BLUEZ5_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ5_MANAGER, NMBluez5ManagerPrivate))
-G_DEFINE_TYPE (NMBluezManager, nm_bluez_manager, G_TYPE_OBJECT)
+G_DEFINE_TYPE (NMBluez5Manager, nm_bluez5_manager, G_TYPE_OBJECT)
enum {
BDADDR_ADDED,
- BDADDR_REMOVED,
-
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
-static void device_initialized (NMBluezDevice *device, gboolean success, NMBluezManager *self);
-static void device_usable (NMBluezDevice *device, GParamSpec *pspec, NMBluezManager *self);
+static void device_initialized (NMBluezDevice *device, gboolean success, NMBluez5Manager *self);
+static void device_usable (NMBluezDevice *device, GParamSpec *pspec, NMBluez5Manager *self);
static void
-emit_bdaddr_added (NMBluezManager *self, NMBluezDevice *device)
+emit_bdaddr_added (NMBluez5Manager *self, NMBluezDevice *device)
{
g_signal_emit (self, signals[BDADDR_ADDED], 0,
device,
@@ -71,9 +70,9 @@ emit_bdaddr_added (NMBluezManager *self, NMBluezDevice *device)
}
void
-nm_bluez_manager_query_devices (NMBluezManager *self)
+nm_bluez5_manager_query_devices (NMBluez5Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
NMBluezDevice *device;
GHashTableIter iter;
@@ -85,23 +84,20 @@ nm_bluez_manager_query_devices (NMBluezManager *self)
}
static void
-remove_device (NMBluezManager *self, NMBluezDevice *device)
+remove_device (NMBluez5Manager *self, NMBluezDevice *device)
{
- if (nm_bluez_device_get_usable (device)) {
- g_signal_emit (self, signals[BDADDR_REMOVED], 0,
- nm_bluez_device_get_address (device),
- nm_bluez_device_get_path (device));
- }
g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_initialized), self);
g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_usable), self);
+ if (nm_bluez_device_get_usable (device))
+ g_signal_emit_by_name (device, NM_BLUEZ_DEVICE_REMOVED);
}
static void
-remove_all_devices (NMBluezManager *self)
+remove_all_devices (NMBluez5Manager *self)
{
GHashTableIter iter;
NMBluezDevice *device;
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
g_hash_table_iter_init (&iter, priv->devices);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &device)) {
@@ -112,7 +108,7 @@ remove_all_devices (NMBluezManager *self)
}
static void
-device_usable (NMBluezDevice *device, GParamSpec *pspec, NMBluezManager *self)
+device_usable (NMBluezDevice *device, GParamSpec *pspec, NMBluez5Manager *self)
{
gboolean usable = nm_bluez_device_get_usable (device);
@@ -126,15 +122,13 @@ device_usable (NMBluezDevice *device, GParamSpec *pspec, NMBluezManager *self)
nm_bluez_device_get_address (device));
emit_bdaddr_added (self, device);
} else
- g_signal_emit (self, signals[BDADDR_REMOVED], 0,
- nm_bluez_device_get_address (device),
- nm_bluez_device_get_path (device));
+ g_signal_emit_by_name (device, NM_BLUEZ_DEVICE_REMOVED);
}
static void
-device_initialized (NMBluezDevice *device, gboolean success, NMBluezManager *self)
+device_initialized (NMBluezDevice *device, gboolean success, NMBluez5Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
nm_log_dbg (LOGD_BT, "(%s): bluez device %s",
nm_bluez_device_get_path (device),
@@ -144,12 +138,12 @@ device_initialized (NMBluezDevice *device, gboolean success, NMBluezManager *sel
}
static void
-device_added (GDBusProxy *proxy, const gchar *path, NMBluezManager *self)
+device_added (GDBusProxy *proxy, const gchar *path, NMBluez5Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
NMBluezDevice *device;
- device = nm_bluez_device_new (path, priv->provider);
+ device = nm_bluez_device_new (path, priv->provider, 5);
g_signal_connect (device, "initialized", G_CALLBACK (device_initialized), self);
g_signal_connect (device, "notify::usable", G_CALLBACK (device_usable), self);
g_hash_table_insert (priv->devices, (gpointer) nm_bluez_device_get_path (device), device);
@@ -158,9 +152,9 @@ device_added (GDBusProxy *proxy, const gchar *path, NMBluezManager *self)
}
static void
-device_removed (GDBusProxy *proxy, const gchar *path, NMBluezManager *self)
+device_removed (GDBusProxy *proxy, const gchar *path, NMBluez5Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
NMBluezDevice *device;
nm_log_dbg (LOGD_BT, "(%s): bluez device removed", path);
@@ -168,7 +162,7 @@ device_removed (GDBusProxy *proxy, const gchar *path, NMBluezManager *self)
device = g_hash_table_lookup (priv->devices, path);
if (device) {
g_hash_table_steal (priv->devices, nm_bluez_device_get_path (device));
- remove_device (NM_BLUEZ_MANAGER (self), device);
+ remove_device (NM_BLUEZ5_MANAGER (self), device);
g_object_unref (device);
}
}
@@ -178,7 +172,7 @@ object_manager_g_signal (GDBusProxy *proxy,
gchar *sender_name,
gchar *signal_name,
GVariant *parameters,
- NMBluezManager *self)
+ NMBluez5Manager *self)
{
GVariant *variant;
const gchar *path;
@@ -192,7 +186,7 @@ object_manager_g_signal (GDBusProxy *proxy,
ifaces = g_variant_get_strv (variant, &length);
for (i = 0; i < length; i++) {
- if (!strcmp (ifaces[i], BLUEZ_DEVICE_INTERFACE)) {
+ if (!strcmp (ifaces[i], BLUEZ5_DEVICE_INTERFACE)) {
device_removed (proxy, path, self);
break;
}
@@ -203,7 +197,7 @@ object_manager_g_signal (GDBusProxy *proxy,
} else if (!strcmp (signal_name, "InterfacesAdded")) {
g_variant_get (parameters, "(&o*)", &path, &variant);
- if (g_variant_lookup_value (variant, BLUEZ_DEVICE_INTERFACE,
+ if (g_variant_lookup_value (variant, BLUEZ5_DEVICE_INTERFACE,
G_VARIANT_TYPE_DICTIONARY))
device_added (proxy, path, self);
}
@@ -212,7 +206,7 @@ object_manager_g_signal (GDBusProxy *proxy,
static void
get_managed_objects_cb (GDBusProxy *proxy,
GAsyncResult *res,
- NMBluezManager *self)
+ NMBluez5Manager *self)
{
GVariant *variant, *ifaces;
GVariantIter i;
@@ -222,14 +216,18 @@ get_managed_objects_cb (GDBusProxy *proxy,
variant = g_dbus_proxy_call_finish (proxy, res, &error);
if (!variant) {
- nm_log_warn (LOGD_BT, "Couldn't get managed objects: %s",
- error && error->message ? error->message : "(unknown)");
+ if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD))
+ nm_log_warn (LOGD_BT, "Couldn't get managed objects: not running Bluez5?");
+ else {
+ nm_log_warn (LOGD_BT, "Couldn't get managed objects: %s",
+ error && error->message ? error->message : "(unknown)");
+ }
g_clear_error (&error);
return;
}
g_variant_iter_init (&i, g_variant_get_child_value (variant, 0));
while ((g_variant_iter_next (&i, "{&o*}", &path, &ifaces))) {
- if (g_variant_lookup_value (ifaces, BLUEZ_DEVICE_INTERFACE,
+ if (g_variant_lookup_value (ifaces, BLUEZ5_DEVICE_INTERFACE,
G_VARIANT_TYPE_DICTIONARY)) {
device_added (proxy, path, self);
}
@@ -241,9 +239,9 @@ get_managed_objects_cb (GDBusProxy *proxy,
static void
on_proxy_acquired (GObject *object,
GAsyncResult *res,
- NMBluezManager *self)
+ NMBluez5Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
priv->proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
@@ -269,9 +267,9 @@ on_proxy_acquired (GObject *object,
}
static void
-bluez_connect (NMBluezManager *self)
+bluez_connect (NMBluez5Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
g_return_if_fail (priv->proxy == NULL);
@@ -293,8 +291,8 @@ name_owner_changed_cb (NMDBusManager *dbus_mgr,
const char *new_owner,
gpointer user_data)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5Manager *self = NM_BLUEZ5_MANAGER (user_data);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
gboolean old_owner_good = (old_owner && strlen (old_owner));
gboolean new_owner_good = (new_owner && strlen (new_owner));
@@ -309,9 +307,9 @@ name_owner_changed_cb (NMDBusManager *dbus_mgr,
}
static void
-bluez_cleanup (NMBluezManager *self, gboolean do_signal)
+bluez_cleanup (NMBluez5Manager *self, gboolean do_signal)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
if (priv->proxy) {
g_object_unref (priv->proxy);
@@ -329,7 +327,7 @@ dbus_connection_changed_cb (NMDBusManager *dbus_mgr,
DBusGConnection *connection,
gpointer user_data)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (user_data);
+ NMBluez5Manager *self = NM_BLUEZ5_MANAGER (user_data);
if (!connection)
bluez_cleanup (self, TRUE);
@@ -339,27 +337,20 @@ dbus_connection_changed_cb (NMDBusManager *dbus_mgr,
/****************************************************************/
-NMBluezManager *
-nm_bluez_manager_get (NMConnectionProvider *provider)
+NMBluez5Manager *
+nm_bluez5_manager_new (NMConnectionProvider *provider)
{
- static NMBluezManager *singleton = NULL;
-
- if (singleton)
- return g_object_ref (singleton);
-
- singleton = (NMBluezManager *) g_object_new (NM_TYPE_BLUEZ_MANAGER, NULL);
- g_assert (singleton);
+ NMBluez5Manager *instance = NULL;
- /* Cache the connection provider for NMBluezAdapter objects */
- NM_BLUEZ_MANAGER_GET_PRIVATE (singleton)->provider = provider;
-
- return singleton;
+ instance = g_object_new (NM_TYPE_BLUEZ5_MANAGER, NULL);
+ NM_BLUEZ5_MANAGER_GET_PRIVATE (instance)->provider = provider;
+ return instance;
}
static void
-nm_bluez_manager_init (NMBluezManager *self)
+nm_bluez5_manager_init (NMBluez5Manager *self)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
priv->dbus_mgr = nm_dbus_manager_get ();
g_assert (priv->dbus_mgr);
@@ -383,8 +374,8 @@ nm_bluez_manager_init (NMBluezManager *self)
static void
dispose (GObject *object)
{
- NMBluezManager *self = NM_BLUEZ_MANAGER (object);
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
+ NMBluez5Manager *self = NM_BLUEZ5_MANAGER (object);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
bluez_cleanup (self, FALSE);
@@ -394,25 +385,25 @@ dispose (GObject *object)
priv->dbus_mgr = NULL;
}
- G_OBJECT_CLASS (nm_bluez_manager_parent_class)->dispose (object);
+ G_OBJECT_CLASS (nm_bluez5_manager_parent_class)->dispose (object);
}
static void
finalize (GObject *object)
{
- NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (object);
+ NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (object);
g_hash_table_destroy (priv->devices);
- G_OBJECT_CLASS (nm_bluez_manager_parent_class)->finalize (object);
+ G_OBJECT_CLASS (nm_bluez5_manager_parent_class)->finalize (object);
}
static void
-nm_bluez_manager_class_init (NMBluezManagerClass *klass)
+nm_bluez5_manager_class_init (NMBluez5ManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (NMBluezManagerPrivate));
+ g_type_class_add_private (klass, sizeof (NMBluez5ManagerPrivate));
/* virtual methods */
object_class->dispose = dispose;
@@ -423,16 +414,8 @@ nm_bluez_manager_class_init (NMBluezManagerClass *klass)
g_signal_new (NM_BLUEZ_MANAGER_BDADDR_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMBluezManagerClass, bdaddr_added),
+ G_STRUCT_OFFSET (NMBluez5ManagerClass, bdaddr_added),
NULL, NULL, NULL,
G_TYPE_NONE, 5, G_TYPE_OBJECT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
-
- signals[BDADDR_REMOVED] =
- g_signal_new (NM_BLUEZ_MANAGER_BDADDR_REMOVED,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMBluezManagerClass, bdaddr_removed),
- NULL, NULL, NULL,
- G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
}
diff --git a/src/devices/bluetooth/nm-bluez5-manager.h b/src/devices/bluetooth/nm-bluez5-manager.h
new file mode 100644
index 000000000..79f347bce
--- /dev/null
+++ b/src/devices/bluetooth/nm-bluez5-manager.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_BLUEZ5_MANAGER_H
+#define NM_BLUEZ5_MANAGER_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <config.h>
+#include "nm-connection-provider.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_BLUEZ5_MANAGER (nm_bluez5_manager_get_type ())
+#define NM_BLUEZ5_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ5_MANAGER, NMBluez5Manager))
+#define NM_BLUEZ5_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_BLUEZ5_MANAGER, NMBluez5ManagerClass))
+#define NM_IS_BLUEZ5_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_BLUEZ5_MANAGER))
+#define NM_IS_BLUEZ5_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ5_MANAGER))
+#define NM_BLUEZ5_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ5_MANAGER, NMBluez5ManagerClass))
+
+typedef struct {
+ GObject parent;
+} NMBluez5Manager;
+
+typedef struct {
+ GObjectClass parent;
+
+ /* Signals */
+ void (*bdaddr_added) (NMBluez5Manager *manager,
+ const char *bdaddr,
+ const char *name,
+ const char *object_path,
+ guint uuids);
+} NMBluez5ManagerClass;
+
+GType nm_bluez5_manager_get_type (void);
+
+NMBluez5Manager *nm_bluez5_manager_new (NMConnectionProvider *provider);
+
+void nm_bluez5_manager_query_devices (NMBluez5Manager *manager);
+
+#endif /* NM_BLUEZ5_MANAGER_H */
+
diff --git a/src/devices/bluetooth/nm-bt-enum-types.c b/src/devices/bluetooth/nm-bt-enum-types.c
new file mode 100644
index 000000000..2595caeb7
--- /dev/null
+++ b/src/devices/bluetooth/nm-bt-enum-types.c
@@ -0,0 +1,32 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#include "nm-bt-enum-types.h"
+
+#include "nm-device-bt.h"
+
+GType
+nm_bt_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_BT_ERROR_CONNECTION_NOT_BT, "NM_BT_ERROR_CONNECTION_NOT_BT", "ConnectionNotBt" },
+ { NM_BT_ERROR_CONNECTION_INVALID, "NM_BT_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_BT_ERROR_CONNECTION_INCOMPATIBLE, "NM_BT_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMBtError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+
+
diff --git a/src/devices/bluetooth/nm-bt-enum-types.h b/src/devices/bluetooth/nm-bt-enum-types.h
new file mode 100644
index 000000000..af887929b
--- /dev/null
+++ b/src/devices/bluetooth/nm-bt-enum-types.h
@@ -0,0 +1,19 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#ifndef __NM_BT_ENUM_TYPES_H__
+#define __NM_BT_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+GType nm_bt_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_BT_ERROR (nm_bt_error_get_type ())
+G_END_DECLS
+
+#endif /* __NM_BT_ENUM_TYPES_H__ */
+
+
+
diff --git a/src/devices/bluetooth/nm-device-bt-glue.h b/src/devices/bluetooth/nm-device-bt-glue.h
new file mode 100644
index 000000000..b6f851b25
--- /dev/null
+++ b/src/devices/bluetooth/nm-device-bt-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_bt_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_bt_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_bt_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_bt_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_bt_object_info = { 1,
+ dbus_glib_nm_device_bt_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Bluetooth\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Bluetooth\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Bluetooth\0Name\0name\0read\0org.freedesktop.NetworkManager.Device.Bluetooth\0BtCapabilities\0bt_capabilities\0read\0\0"
+};
+
diff --git a/src/nm-device-bt.c b/src/devices/bluetooth/nm-device-bt.c
index e0aa46785..0bd2f17d1 100644
--- a/src/nm-device-bt.c
+++ b/src/devices/bluetooth/nm-device-bt.c
@@ -35,9 +35,7 @@
#include "nm-device-bt.h"
#include "nm-device-private.h"
#include "nm-logging.h"
-#include "nm-marshal.h"
#include "ppp-manager/nm-ppp-manager.h"
-#include "nm-properties-changed-signal.h"
#include "nm-setting-connection.h"
#include "nm-setting-bluetooth.h"
#include "nm-setting-cdma.h"
@@ -46,7 +44,7 @@
#include "nm-setting-ppp.h"
#include "nm-device-bt-glue.h"
#include "NetworkManagerUtils.h"
-#include "nm-enum-types.h"
+#include "nm-bt-enum-types.h"
#include "nm-utils.h"
#define MM_OLD_DBUS_SERVICE "org.freedesktop.ModemManager"
@@ -65,8 +63,7 @@ typedef struct {
NMBluezDevice *bt_device;
- guint8 hw_addr[ETH_ALEN]; /* binary representation of bdaddr */
- char *bdaddr;
+ guint8 bdaddr[ETH_ALEN];
char *name;
guint32 capabilities;
@@ -82,7 +79,6 @@ typedef struct {
enum {
PROP_0,
- PROP_HW_ADDRESS,
PROP_BT_NAME,
PROP_BT_CAPABILITIES,
PROP_BT_DEVICE,
@@ -92,7 +88,6 @@ enum {
enum {
PPP_STATS,
- PROPERTIES_CHANGED,
LAST_SIGNAL
};
@@ -112,12 +107,20 @@ nm_bt_error_quark (void)
guint32 nm_device_bt_get_capabilities (NMDeviceBt *self)
{
- g_return_val_if_fail (self != NULL, NM_BT_CAPABILITY_NONE);
g_return_val_if_fail (NM_IS_DEVICE_BT (self), NM_BT_CAPABILITY_NONE);
return NM_DEVICE_BT_GET_PRIVATE (self)->capabilities;
}
+static guint
+get_hw_address_length (NMDevice *device, gboolean *out_permanent)
+{
+ /* HW address is the Bluetooth HW address of the remote device */
+ if (out_permanent)
+ *out_permanent = TRUE; /* the bdaddr of the remote device will never change */
+ return ETH_ALEN;
+}
+
static guint32
get_connection_bt_type (NMConnection *connection)
{
@@ -139,92 +142,65 @@ get_connection_bt_type (NMConnection *connection)
return NM_BT_CAPABILITY_NONE;
}
-static NMConnection *
-get_best_auto_connection (NMDevice *device,
- GSList *connections,
- char **specific_object)
+static gboolean
+can_auto_connect (NMDevice *device,
+ NMConnection *connection,
+ char **specific_object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- guint32 bt_type;
-
- if (!nm_connection_is_type (connection, NM_SETTING_BLUETOOTH_SETTING_NAME))
- continue;
+ guint32 bt_type;
- bt_type = get_connection_bt_type (connection);
- if (!(bt_type & priv->capabilities))
- continue;
+ if (!NM_DEVICE_CLASS (nm_device_bt_parent_class)->can_auto_connect (device, connection, specific_object))
+ return FALSE;
- /* Can't auto-activate a DUN connection without ModemManager */
- if (bt_type == NM_BT_CAPABILITY_DUN && priv->mm_running == FALSE)
- continue;
+ /* Can't auto-activate a DUN connection without ModemManager */
+ bt_type = get_connection_bt_type (connection);
+ if (bt_type == NM_BT_CAPABILITY_DUN && priv->mm_running == FALSE)
+ return FALSE;
- return connection;
- }
- return NULL;
+ return TRUE;
}
static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMSettingConnection *s_con;
NMSettingBluetooth *s_bt;
const GByteArray *array;
- char *str;
- int addr_match = FALSE;
guint32 bt_type;
+ if (!NM_DEVICE_CLASS (nm_device_bt_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
- if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_BLUETOOTH_SETTING_NAME)) {
- g_set_error (error,
- NM_BT_ERROR, NM_BT_ERROR_CONNECTION_NOT_BT,
- "The connection was not a Bluetooth connection.");
+ if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_BLUETOOTH_SETTING_NAME))
return FALSE;
- }
s_bt = nm_connection_get_setting_bluetooth (connection);
- if (!s_bt) {
- g_set_error (error,
- NM_BT_ERROR, NM_BT_ERROR_CONNECTION_INVALID,
- "The connection was not a valid Bluetooth connection.");
+ if (!s_bt)
return FALSE;
- }
- array = nm_setting_bluetooth_get_bdaddr (s_bt);
- if (!array || (array->len != ETH_ALEN)) {
- g_set_error (error,
- NM_BT_ERROR, NM_BT_ERROR_CONNECTION_INVALID,
- "The connection did not contain a valid Bluetooth address.");
+ bt_type = get_connection_bt_type (connection);
+ if (!(bt_type & priv->capabilities))
return FALSE;
- }
- bt_type = get_connection_bt_type (connection);
- if (!(bt_type & priv->capabilities)) {
- g_set_error (error,
- NM_BT_ERROR, NM_BT_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection was not compatible with the device's capabilities.");
+ array = nm_setting_bluetooth_get_bdaddr (s_bt);
+ if (!array || (array->len != ETH_ALEN))
return FALSE;
- }
- str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- array->data[0], array->data[1], array->data[2],
- array->data[3], array->data[4], array->data[5]);
- addr_match = !strcmp (priv->bdaddr, str);
- g_free (str);
+ if (memcmp (priv->bdaddr, array->data, ETH_ALEN) != 0)
+ return FALSE;
- return addr_match;
+ return TRUE;
}
static gboolean
-check_connection_available (NMDevice *device, NMConnection *connection)
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
guint32 bt_type;
@@ -250,7 +226,6 @@ complete_connection (NMDevice *device,
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMSettingBluetooth *s_bt;
const GByteArray *setting_bdaddr;
- struct ether_addr *devaddr = ether_aton (priv->bdaddr);
const char *ctype;
gboolean is_dun = FALSE, is_pan = FALSE;
NMSettingGsm *s_gsm;
@@ -358,7 +333,7 @@ complete_connection (NMDevice *device,
setting_bdaddr = nm_setting_bluetooth_get_bdaddr (s_bt);
if (setting_bdaddr) {
/* Make sure the setting BT Address (if any) matches the device's */
- if (memcmp (setting_bdaddr->data, devaddr->ether_addr_octet, ETH_ALEN)) {
+ if (memcmp (setting_bdaddr->data, priv->bdaddr, ETH_ALEN)) {
g_set_error_literal (error,
NM_SETTING_BLUETOOTH_ERROR,
NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
@@ -370,9 +345,9 @@ complete_connection (NMDevice *device,
const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
/* Lock the connection to this device by default */
- if (memcmp (devaddr->ether_addr_octet, null_mac, ETH_ALEN)) {
+ if (memcmp (priv->bdaddr, null_mac, ETH_ALEN)) {
bdaddr = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (bdaddr, devaddr->ether_addr_octet, ETH_ALEN);
+ g_byte_array_append (bdaddr, priv->bdaddr, ETH_ALEN);
g_object_set (G_OBJECT (s_bt), NM_SETTING_BLUETOOTH_BDADDR, bdaddr, NULL);
g_byte_array_free (bdaddr, TRUE);
}
@@ -381,57 +356,6 @@ complete_connection (NMDevice *device,
return TRUE;
}
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- return NM_DEVICE_CAP_NM_SUPPORTED;
-}
-
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
-
- *out_len = sizeof (priv->hw_addr);
- return priv->hw_addr;
-}
-
-static gboolean
-hwaddr_matches (NMDevice *device,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr)
-{
- NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
- NMSettingBluetooth *s_bt;
- const GByteArray *mac = NULL;
- gboolean matches = FALSE;
- GByteArray *devmac;
-
- s_bt = nm_connection_get_setting_bluetooth (connection);
- if (s_bt)
- mac = nm_setting_bluetooth_get_bdaddr (s_bt);
-
- if (mac) {
- devmac = nm_utils_hwaddr_atoba (priv->bdaddr, ARPHRD_ETHER);
- g_return_val_if_fail (devmac != NULL, FALSE);
- g_return_val_if_fail (devmac->len == mac->len, FALSE);
-
- if (other_hwaddr) {
- g_return_val_if_fail (other_hwaddr_len == devmac->len, FALSE);
- matches = (memcmp (mac->data, other_hwaddr, mac->len) == 0) ? TRUE : FALSE;
- } else
- matches = (memcmp (mac->data, devmac->data, mac->len) == 0) ? TRUE : FALSE;
-
- g_byte_array_free (devmac, TRUE);
- return matches;
- } else if (fail_if_no_hwaddr == FALSE)
- return TRUE;
-
- return FALSE;
-}
-
/*****************************************************************************/
/* IP method PPP */
@@ -475,7 +399,15 @@ ppp_failed (NMModem *modem, NMDeviceStateReason reason, gpointer user_data)
static void
modem_auth_requested (NMModem *modem, gpointer user_data)
{
- nm_device_state_changed (NM_DEVICE (user_data),
+ NMDevice *device = NM_DEVICE (user_data);
+
+ /* Auth requests (PIN, PAP/CHAP passwords, etc) only get handled
+ * during activation.
+ */
+ if (!nm_device_is_activating (device))
+ return;
+
+ nm_device_state_changed (device,
NM_DEVICE_STATE_NEED_AUTH,
NM_DEVICE_STATE_REASON_NONE);
}
@@ -531,8 +463,19 @@ modem_prepare_result (NMModem *modem,
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, stage2_reason);
break;
}
- } else
+ } else {
+ if (reason == NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT) {
+ /* If the connect failed because the SIM PIN was wrong don't allow
+ * the device to be auto-activated anymore, which would risk locking
+ * the SIM if the incorrect PIN continues to be used.
+ */
+ g_object_set (G_OBJECT (device), NM_DEVICE_AUTOCONNECT, FALSE, NULL);
+ nm_log_info (LOGD_MB, "(%s): disabling autoconnect due to failed SIM PIN",
+ nm_device_get_iface (device));
+ }
+
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
+ }
}
static void
@@ -604,24 +547,82 @@ modem_stage1 (NMDeviceBt *self, NMModem *modem, NMDeviceStateReason *reason)
/*****************************************************************************/
-gboolean
-nm_device_bt_modem_added (NMDeviceBt *self,
- NMModem *modem,
- const char *driver)
+static void
+modem_cleanup (NMDeviceBt *self)
+{
+ NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (self);
+
+ if (priv->modem) {
+ g_signal_handlers_disconnect_matched (priv->modem, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
+ g_clear_object (&priv->modem);
+ }
+}
+
+static void
+modem_state_cb (NMModem *modem,
+ NMModemState new_state,
+ NMModemState old_state,
+ gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceState dev_state = nm_device_get_state (device);
+
+ if (new_state <= NM_MODEM_STATE_DISABLING && old_state > NM_MODEM_STATE_DISABLING) {
+ /* Will be called whenever something external to NM disables the
+ * modem directly through ModemManager.
+ */
+ if (nm_device_is_activating (device) || dev_state == NM_DEVICE_STATE_ACTIVATED) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
+ return;
+ }
+ }
+
+ if (new_state < NM_MODEM_STATE_CONNECTING &&
+ old_state >= NM_MODEM_STATE_CONNECTING &&
+ dev_state >= NM_DEVICE_STATE_NEED_AUTH &&
+ dev_state <= NM_DEVICE_STATE_ACTIVATED) {
+ /* Fail the device if the modem disconnects unexpectedly while the
+ * device is activating/activated. */
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER);
+ return;
+ }
+}
+
+static void
+modem_removed_cb (NMModem *modem, gpointer user_data)
{
- NMDeviceBtPrivate *priv;
+ NMDeviceBt *self = NM_DEVICE_BT (user_data);
+ NMDeviceState state;
+
+ /* Fail the device if the modem was removed while active */
+ state = nm_device_get_state (NM_DEVICE (self));
+ if ( state == NM_DEVICE_STATE_ACTIVATED
+ || nm_device_is_activating (NM_DEVICE (self))) {
+ nm_device_state_changed (NM_DEVICE (self),
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_BT_FAILED);
+ } else
+ modem_cleanup (self);
+}
+
+static gboolean
+component_added (NMDevice *device, GObject *component)
+{
+ NMDeviceBt *self = NM_DEVICE_BT (device);
+ NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (self);
+ NMModem *modem;
const gchar *modem_data_port;
const gchar *modem_control_port;
char *base;
NMDeviceState state;
NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE_BT (self), FALSE);
- g_return_val_if_fail (modem != NULL, FALSE);
- g_return_val_if_fail (NM_IS_MODEM (modem), FALSE);
+ if (!NM_IS_MODEM (component))
+ return FALSE;
+ modem = NM_MODEM (component);
- priv = NM_DEVICE_BT_GET_PRIVATE (self);
modem_data_port = nm_modem_get_data_port (modem);
modem_control_port = nm_modem_get_control_port (modem);
g_return_val_if_fail (modem_data_port != NULL || modem_control_port != NULL, FALSE);
@@ -660,7 +661,7 @@ nm_device_bt_modem_added (NMDeviceBt *self,
if (priv->modem) {
g_warn_if_reached ();
- g_object_unref (priv->modem);
+ modem_cleanup (self);
}
priv->modem = g_object_ref (modem);
@@ -670,6 +671,8 @@ nm_device_bt_modem_added (NMDeviceBt *self,
g_signal_connect (modem, NM_MODEM_IP4_CONFIG_RESULT, G_CALLBACK (modem_ip4_config_result), self);
g_signal_connect (modem, NM_MODEM_AUTH_REQUESTED, G_CALLBACK (modem_auth_requested), self);
g_signal_connect (modem, NM_MODEM_AUTH_RESULT, G_CALLBACK (modem_auth_result), self);
+ g_signal_connect (modem, NM_MODEM_STATE_CHANGED, G_CALLBACK (modem_state_cb), self);
+ g_signal_connect (modem, NM_MODEM_REMOVED, G_CALLBACK (modem_removed_cb), self);
/* In the old ModemManager the data port is known from the very beginning;
* while in the new ModemManager the data port is set afterwards when the bearer gets
@@ -685,37 +688,6 @@ nm_device_bt_modem_added (NMDeviceBt *self,
return TRUE;
}
-gboolean
-nm_device_bt_modem_removed (NMDeviceBt *self, NMModem *modem)
-{
- NMDeviceBtPrivate *priv;
- NMDeviceState state;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE_BT (self), FALSE);
- g_return_val_if_fail (modem != NULL, FALSE);
- g_return_val_if_fail (NM_IS_MODEM (modem), FALSE);
-
- priv = NM_DEVICE_BT_GET_PRIVATE (self);
-
- if (modem != priv->modem)
- return FALSE;
-
- /* Fail the device if the modem was removed while active */
- state = nm_device_get_state (NM_DEVICE (self));
- if ( state == NM_DEVICE_STATE_ACTIVATED
- || nm_device_is_activating (NM_DEVICE (self))) {
- nm_device_state_changed (NM_DEVICE (self),
- NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_BT_FAILED);
- } else {
- g_object_unref (priv->modem);
- priv->modem = NULL;
- }
-
- return TRUE;
-}
-
static gboolean
modem_find_timeout (gpointer user_data)
{
@@ -953,8 +925,7 @@ deactivate (NMDevice *device)
NM_DEVICE_STATE_DISCONNECTED,
NM_DEVICE_STATE_ACTIVATED,
NM_DEVICE_STATE_REASON_USER_REQUESTED);
- g_object_unref (priv->modem);
- priv->modem = NULL;
+ modem_cleanup (NM_DEVICE_BT (device));
}
}
@@ -975,6 +946,12 @@ deactivate (NMDevice *device)
NM_DEVICE_CLASS (nm_device_bt_parent_class)->deactivate (device);
}
+static void
+bluez_device_removed (NMBluezDevice *bdev, gpointer user_data)
+{
+ g_signal_emit_by_name (NM_DEVICE_BT (user_data), NM_DEVICE_REMOVED);
+}
+
/*****************************************************************************/
static gboolean
@@ -1084,8 +1061,7 @@ nm_device_bt_new (NMBluezDevice *bt_device,
const char *udi,
const char *bdaddr,
const char *name,
- guint32 capabilities,
- gboolean managed)
+ guint32 capabilities)
{
g_return_val_if_fail (udi != NULL, NULL);
g_return_val_if_fail (bdaddr != NULL, NULL);
@@ -1097,11 +1073,10 @@ nm_device_bt_new (NMBluezDevice *bt_device,
NM_DEVICE_UDI, udi,
NM_DEVICE_IFACE, bdaddr,
NM_DEVICE_DRIVER, "bluez",
- NM_DEVICE_BT_HW_ADDRESS, bdaddr,
+ NM_DEVICE_HW_ADDRESS, bdaddr,
NM_DEVICE_BT_DEVICE, bt_device,
NM_DEVICE_BT_NAME, name,
NM_DEVICE_BT_CAPABILITIES, capabilities,
- NM_DEVICE_MANAGED, managed,
NM_DEVICE_TYPE_DESC, "Bluetooth",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BT,
NULL);
@@ -1130,18 +1105,32 @@ nm_device_bt_init (NMDeviceBt *self)
}
static void
+constructed (GObject *object)
+{
+ NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
+ const guint8 *my_hwaddr;
+ guint my_hwaddr_len = 0;
+
+ G_OBJECT_CLASS (nm_device_bt_parent_class)->constructed (object);
+
+ my_hwaddr = nm_device_get_hw_address (NM_DEVICE (object), &my_hwaddr_len);
+ g_assert (my_hwaddr);
+ g_assert_cmpint (my_hwaddr_len, ==, ETH_ALEN);
+ memcpy (priv->bdaddr, my_hwaddr, ETH_ALEN);
+
+ /* Watch for BT device property changes */
+ g_signal_connect (priv->bt_device, "notify::" NM_BLUEZ_DEVICE_CONNECTED,
+ G_CALLBACK (bluez_connected_changed),
+ object);
+}
+
+static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_HW_ADDRESS:
- /* Construct only */
- priv->bdaddr = g_ascii_strup (g_value_get_string (value), -1);
- if (!nm_utils_hwaddr_aton (priv->bdaddr, ARPHRD_ETHER, &priv->hw_addr))
- nm_log_err (LOGD_HW, "Failed to convert BT address '%s'", priv->bdaddr);
- break;
case PROP_BT_NAME:
/* Construct only */
priv->name = g_value_dup_string (value);
@@ -1153,11 +1142,7 @@ set_property (GObject *object, guint prop_id,
case PROP_BT_DEVICE:
/* Construct only */
priv->bt_device = g_value_dup_object (value);
-
- /* Watch for BT device property changes */
- g_signal_connect (priv->bt_device, "notify::" NM_BLUEZ_DEVICE_CONNECTED,
- G_CALLBACK (bluez_connected_changed),
- object);
+ g_signal_connect (priv->bt_device, "removed", G_CALLBACK (bluez_device_removed), object);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1172,9 +1157,6 @@ get_property (GObject *object, guint prop_id,
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_HW_ADDRESS:
- g_value_set_string (value, priv->bdaddr);
- break;
case PROP_BT_NAME:
g_value_set_string (value, priv->name);
break;
@@ -1200,17 +1182,15 @@ dispose (GObject *object)
priv->timeout_id = 0;
}
- g_signal_handlers_disconnect_by_func (priv->bt_device,
- G_CALLBACK (bluez_connected_changed),
- object);
+ g_signal_handlers_disconnect_matched (priv->bt_device, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, object);
if (priv->dbus_mgr && priv->mm_watch_id) {
g_signal_handler_disconnect (priv->dbus_mgr, priv->mm_watch_id);
priv->mm_watch_id = 0;
}
- g_clear_object (&priv->dbus_mgr);
+ priv->dbus_mgr = NULL;
- g_clear_object (&priv->modem);
+ modem_cleanup (NM_DEVICE_BT (object));
g_clear_object (&priv->bt_device);
G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object);
@@ -1222,7 +1202,6 @@ finalize (GObject *object)
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
g_free (priv->rfcomm_iface);
- g_free (priv->bdaddr);
g_free (priv->name);
G_OBJECT_CLASS (nm_device_bt_parent_class)->finalize (object);
@@ -1236,13 +1215,14 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
g_type_class_add_private (object_class, sizeof (NMDeviceBtPrivate));
+ object_class->constructed = constructed;
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
object_class->finalize = finalize;
- device_class->get_best_auto_connection = get_best_auto_connection;
- device_class->get_generic_capabilities = get_generic_capabilities;
+ device_class->get_hw_address_length = get_hw_address_length;
+ device_class->can_auto_connect = can_auto_connect;
device_class->deactivate = deactivate;
device_class->act_stage2_config = act_stage2_config;
device_class->act_stage3_ip4_config_start = act_stage3_ip4_config_start;
@@ -1250,22 +1230,13 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
device_class->check_connection_compatible = check_connection_compatible;
device_class->check_connection_available = check_connection_available;
device_class->complete_connection = complete_connection;
- device_class->hwaddr_matches = hwaddr_matches;
- device_class->get_hw_address = get_hw_address;
device_class->is_available = is_available;
+ device_class->component_added = component_added;
device_class->state_changed = device_state_changed;
/* Properties */
g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_BT_HW_ADDRESS,
- "Bluetooth address",
- "Bluetooth address",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
(object_class, PROP_BT_NAME,
g_param_spec_string (NM_DEVICE_BT_NAME,
"Bluetooth device name",
@@ -1287,7 +1258,7 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
"NMBluezDevice object for the Device",
"NMBluezDevice object for the Device",
NM_TYPE_BLUEZ_DEVICE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/* Signals */
signals[PPP_STATS] =
@@ -1295,17 +1266,13 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceBtClass, ppp_stats),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceBtClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_bt_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_bt_object_info);
dbus_g_error_domain_register (NM_BT_ERROR, NULL, NM_TYPE_BT_ERROR);
}
diff --git a/src/nm-device-bt.h b/src/devices/bluetooth/nm-device-bt.h
index 82d4bfa79..83732bc09 100644
--- a/src/nm-device-bt.h
+++ b/src/devices/bluetooth/nm-device-bt.h
@@ -40,7 +40,6 @@ typedef enum {
NM_BT_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMBtError;
-#define NM_DEVICE_BT_HW_ADDRESS "hw-address"
#define NM_DEVICE_BT_NAME "name"
#define NM_DEVICE_BT_CAPABILITIES "bt-capabilities"
#define NM_DEVICE_BT_DEVICE "bt-device"
@@ -54,7 +53,6 @@ typedef struct {
/* Signals */
void (*ppp_stats) (NMDeviceBt *device, guint32 in_bytes, guint32 out_bytes);
- void (*properties_changed) (NMDeviceBt *device, GHashTable *properties);
} NMDeviceBtClass;
GType nm_device_bt_get_type (void);
@@ -63,8 +61,7 @@ NMDevice *nm_device_bt_new (NMBluezDevice *bt_device,
const char *udi,
const char *bdaddr,
const char *name,
- guint32 capabilities,
- gboolean managed);
+ guint32 capabilities);
guint32 nm_device_bt_get_capabilities (NMDeviceBt *device);
@@ -72,8 +69,6 @@ gboolean nm_device_bt_modem_added (NMDeviceBt *device,
NMModem *modem,
const char *driver);
-gboolean nm_device_bt_modem_removed (NMDeviceBt *device, NMModem *modem);
-
G_END_DECLS
#endif /* NM_DEVICE_BT_H */
diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c
new file mode 100644
index 000000000..6f8caeb40
--- /dev/null
+++ b/src/devices/nm-device-bond.c
@@ -0,0 +1,612 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2011 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <netinet/ether.h>
+#include <errno.h>
+#include <stdlib.h>
+
+#include "gsystem-local-alloc.h"
+#include "nm-device-bond.h"
+#include "nm-logging.h"
+#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
+#include "nm-device-private.h"
+#include "nm-platform.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-dbus-manager.h"
+#include "nm-enum-types.h"
+
+#include "nm-device-bond-glue.h"
+
+
+G_DEFINE_TYPE (NMDeviceBond, nm_device_bond, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BOND, NMDeviceBondPrivate))
+
+#define NM_BOND_ERROR (nm_bond_error_quark ())
+
+typedef struct {
+ int dummy;
+} NMDeviceBondPrivate;
+
+enum {
+ PROP_0,
+ PROP_SLAVES,
+
+ LAST_PROP
+};
+
+/******************************************************************/
+
+static GQuark
+nm_bond_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-bond-error");
+ return quark;
+}
+
+/******************************************************************/
+
+static guint32
+get_generic_capabilities (NMDevice *dev)
+{
+ return NM_DEVICE_CAP_CARRIER_DETECT;
+}
+
+static gboolean
+is_available (NMDevice *dev)
+{
+ if (NM_DEVICE_GET_CLASS (dev)->is_up)
+ return NM_DEVICE_GET_CLASS (dev)->is_up (dev);
+ return FALSE;
+}
+
+static gboolean
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
+{
+ /* Connections are always available because the carrier state is determined
+ * by the slave carrier states, not the bonds's state.
+ */
+ return TRUE;
+}
+
+static gboolean
+check_connection_compatible (NMDevice *device, NMConnection *connection)
+{
+ const char *iface;
+ NMSettingBond *s_bond;
+
+ if (!NM_DEVICE_CLASS (nm_device_bond_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
+ s_bond = nm_connection_get_setting_bond (connection);
+ if (!s_bond || !nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME))
+ return FALSE;
+
+ /* Bond connections must specify the virtual interface name */
+ iface = nm_connection_get_virtual_iface_name (connection);
+ if (!iface || strcmp (nm_device_get_iface (device), iface))
+ return FALSE;
+
+ /* FIXME: match bond properties like mode, etc? */
+
+ return TRUE;
+}
+
+static gboolean
+complete_connection (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object,
+ const GSList *existing_connections,
+ GError **error)
+{
+ NMSettingBond *s_bond, *tmp;
+ guint32 i = 0;
+ char *name;
+ const GSList *iter;
+ gboolean found;
+
+ nm_utils_complete_generic (connection,
+ NM_SETTING_BOND_SETTING_NAME,
+ existing_connections,
+ _("Bond connection %d"),
+ NULL,
+ TRUE);
+
+ s_bond = nm_connection_get_setting_bond (connection);
+ if (!s_bond) {
+ s_bond = (NMSettingBond *) nm_setting_bond_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_bond));
+ }
+
+ /* Grab the first name that doesn't exist in either our connections
+ * or a device on the system.
+ */
+ while (i < 500 && !nm_setting_bond_get_interface_name (s_bond)) {
+ name = g_strdup_printf ("bond%u", i);
+ /* check interface names */
+ if (!nm_platform_link_exists (name)) {
+ /* check existing bond connections */
+ for (iter = existing_connections, found = FALSE; iter; iter = g_slist_next (iter)) {
+ NMConnection *candidate = iter->data;
+
+ tmp = nm_connection_get_setting_bond (candidate);
+ if (tmp && nm_connection_is_type (candidate, NM_SETTING_BOND_SETTING_NAME)) {
+ if (g_strcmp0 (nm_setting_bond_get_interface_name (tmp), name) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+
+ if (!found)
+ g_object_set (G_OBJECT (s_bond), NM_SETTING_BOND_INTERFACE_NAME, name, NULL);
+ }
+
+ g_free (name);
+ i++;
+ }
+
+ return TRUE;
+}
+
+/******************************************************************/
+
+static gboolean
+set_bond_attr (NMDevice *device, const char *attr, const char *value)
+{
+ gboolean ret;
+ int ifindex = nm_device_get_ifindex (device);
+
+ ret = nm_platform_master_set_option (ifindex, attr, value);
+ if (!ret) {
+ nm_log_warn (LOGD_HW, "(%s): failed to set bonding attribute "
+ "'%s' to '%s'", nm_device_get_ip_iface (device), attr, value);
+ }
+ return ret;
+}
+
+/* Ignore certain bond options if they are zero (off/disabled) */
+static gboolean
+ignore_if_zero (const char *option, const char *value)
+{
+ if (strcmp (option, "arp_interval") &&
+ strcmp (option, "miimon") &&
+ strcmp (option, "downdelay") &&
+ strcmp (option, "updelay"))
+ return FALSE;
+
+ return g_strcmp0 (value, "0") == 0 ? TRUE : FALSE;
+}
+
+static void
+update_connection (NMDevice *device, NMConnection *connection)
+{
+ NMSettingBond *s_bond = nm_connection_get_setting_bond (connection);
+ const char *ifname = nm_device_get_iface (device);
+ int ifindex = nm_device_get_ifindex (device);
+ const char **options;
+
+ if (!s_bond) {
+ s_bond = (NMSettingBond *) nm_setting_bond_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_bond);
+ g_object_set (s_bond, NM_SETTING_BOND_INTERFACE_NAME, ifname, NULL);
+ }
+
+ /* Read bond options from sysfs and update the Bond setting to match */
+ options = nm_setting_bond_get_valid_options (s_bond);
+ while (options && *options) {
+ gs_free char *value = nm_platform_master_get_option (ifindex, *options);
+ const char *defvalue = nm_setting_bond_get_option_default (s_bond, *options);
+
+ if (value && !ignore_if_zero (*options, value) && (g_strcmp0 (value, defvalue) != 0)) {
+ /* Replace " " with "," for arp_ip_targets from the kernel */
+ if (strcmp (*options, "arp_ip_target") == 0) {
+ char *p = value;
+
+ while (p && *p) {
+ if (*p == ' ')
+ *p = ',';
+ p++;
+ }
+ }
+
+ nm_setting_bond_add_option (s_bond, *options, value);
+ }
+ options++;
+ }
+}
+
+static void
+set_arp_targets (NMDevice *device,
+ const char *value,
+ const char *delim,
+ const char *prefix)
+{
+ char **items, **iter, *tmp;
+
+ if (!value || !*value)
+ return;
+
+ items = g_strsplit_set (value, delim, 0);
+ for (iter = items; iter && *iter; iter++) {
+ if (*iter[0]) {
+ tmp = g_strdup_printf ("%s%s", prefix, *iter);
+ set_bond_attr (device, "arp_ip_target", tmp);
+ g_free (tmp);
+ }
+ }
+ g_strfreev (items);
+}
+
+static void
+set_simple_option (NMDevice *device,
+ const char *attr,
+ NMSettingBond *s_bond,
+ const char *opt)
+{
+ const char *value;
+
+ value = nm_setting_bond_get_option_by_name (s_bond, opt);
+ if (!value)
+ value = nm_setting_bond_get_option_default (s_bond, opt);
+ set_bond_attr (device, attr, value);
+}
+
+static NMActStageReturn
+apply_bonding_config (NMDevice *device)
+{
+ NMConnection *connection;
+ NMSettingBond *s_bond;
+ int ifindex = nm_device_get_ifindex (device);
+ const char *mode, *value;
+ char *contents;
+ gboolean set_arp_interval = TRUE;
+
+ /* Option restrictions:
+ *
+ * arp_interval conflicts miimon > 0
+ * arp_interval conflicts [ alb, tlb ]
+ * arp_validate needs [ active-backup ]
+ * downdelay needs miimon
+ * updelay needs miimon
+ * primary needs [ active-backup, tlb, alb ]
+ *
+ * clearing miimon requires that arp_interval be 0, but clearing
+ * arp_interval doesn't require miimon to be 0
+ */
+
+ connection = nm_device_get_connection (device);
+ g_assert (connection);
+ s_bond = nm_connection_get_setting_bond (connection);
+ g_assert (s_bond);
+
+ mode = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MODE);
+ if (mode == NULL)
+ mode = "balance-rr";
+
+ value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON);
+ if (value && atoi (value)) {
+ /* clear arp interval */
+ set_bond_attr (device, "arp_interval", "0");
+ set_arp_interval = FALSE;
+
+ set_bond_attr (device, "miimon", value);
+ set_simple_option (device, "updelay", s_bond, NM_SETTING_BOND_OPTION_UPDELAY);
+ set_simple_option (device, "downdelay", s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY);
+ } else if (!value) {
+ /* If not given, and arp_interval is not given, default to 100 */
+ long int val_int;
+ char *end;
+
+ value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ errno = 0;
+ val_int = strtol (value ? value : "0", &end, 10);
+ if (!value || (val_int == 0 && errno == 0 && *end == '\0'))
+ set_bond_attr (device, "miimon", "100");
+ }
+
+ /* The stuff after 'mode' requires the given mode or doesn't care */
+ set_bond_attr (device, "mode", mode);
+
+ /* arp_interval not compatible with ALB, TLB */
+ if (g_strcmp0 (mode, "balance-alb") == 0 || g_strcmp0 (mode, "balance-tlb") == 0)
+ set_arp_interval = FALSE;
+
+ if (set_arp_interval) {
+ set_simple_option (device, "arp_interval", s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+
+ /* Just let miimon get cleared automatically; even setting miimon to
+ * 0 (disabled) clears arp_interval.
+ */
+ }
+
+ value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_VALIDATE);
+ /* arp_validate > 0 only valid in active-backup mode */
+ if ( value
+ && g_strcmp0 (value, "0") != 0
+ && g_strcmp0 (value, "none") != 0
+ && g_strcmp0 (mode, "active-backup") == 0)
+ set_bond_attr (device, "arp_validate", value);
+ else
+ set_bond_attr (device, "arp_validate", "0");
+
+ if ( g_strcmp0 (mode, "active-backup") == 0
+ || g_strcmp0 (mode, "balance-alb") == 0
+ || g_strcmp0 (mode, "balance-tlb") == 0) {
+ value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_PRIMARY);
+ set_bond_attr (device, "primary", value ? value : "");
+ }
+
+ /* Clear ARP targets */
+ contents = nm_platform_master_get_option (ifindex, "arp_ip_target");
+ set_arp_targets (device, contents, " \n", "-");
+ g_free (contents);
+
+ /* Add new ARP targets */
+ value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ set_arp_targets (device, value, ",", "+");
+
+ set_simple_option (device, "primary_reselect", s_bond, NM_SETTING_BOND_OPTION_PRIMARY_RESELECT);
+ set_simple_option (device, "fail_over_mac", s_bond, NM_SETTING_BOND_OPTION_FAIL_OVER_MAC);
+ set_simple_option (device, "use_carrier", s_bond, NM_SETTING_BOND_OPTION_USE_CARRIER);
+ set_simple_option (device, "ad_select", s_bond, NM_SETTING_BOND_OPTION_AD_SELECT);
+ set_simple_option (device, "xmit_hash_policy", s_bond, NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY);
+ set_simple_option (device, "resend_igmp", s_bond, NM_SETTING_BOND_OPTION_RESEND_IGMP);
+
+ return NM_ACT_STAGE_RETURN_SUCCESS;
+}
+
+
+static NMActStageReturn
+act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
+{
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
+ gboolean no_firmware = FALSE;
+
+ g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ ret = NM_DEVICE_CLASS (nm_device_bond_parent_class)->act_stage1_prepare (dev, reason);
+ if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
+ return ret;
+
+ /* Interface must be down to set bond options */
+ nm_device_take_down (dev, TRUE);
+ ret = apply_bonding_config (dev);
+ nm_device_bring_up (dev, TRUE, &no_firmware);
+
+ return ret;
+}
+
+static gboolean
+enslave_slave (NMDevice *device,
+ NMDevice *slave,
+ NMConnection *connection,
+ gboolean configure)
+{
+ gboolean success = TRUE, no_firmware = FALSE;
+ const char *iface = nm_device_get_ip_iface (device);
+ const char *slave_iface = nm_device_get_ip_iface (slave);
+
+ nm_device_master_check_slave_physical_port (device, slave, LOGD_BOND);
+
+ if (configure) {
+ nm_device_take_down (slave, TRUE);
+ success = nm_platform_link_enslave (nm_device_get_ip_ifindex (device),
+ nm_device_get_ip_ifindex (slave));
+ nm_device_bring_up (slave, TRUE, &no_firmware);
+
+ if (!success)
+ return FALSE;
+
+ nm_log_info (LOGD_BOND, "(%s): enslaved bond slave %s", iface, slave_iface);
+ } else
+ nm_log_info (LOGD_BOND, "(%s): bond slave %s was enslaved", iface, slave_iface);
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_BOND_SLAVES);
+ return TRUE;
+}
+
+static gboolean
+release_slave (NMDevice *device,
+ NMDevice *slave,
+ gboolean configure)
+{
+ gboolean success = TRUE, no_firmware = FALSE;
+
+ if (configure) {
+ success = nm_platform_link_release (nm_device_get_ip_ifindex (device),
+ nm_device_get_ip_ifindex (slave));
+
+ if (success) {
+ nm_log_info (LOGD_BOND, "(%s): released bond slave %s",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ } else {
+ nm_log_warn (LOGD_BOND, "(%s): failed to release bond slave %s",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ }
+ } else {
+ nm_log_info (LOGD_BOND, "(%s): bond slave %s was released",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ }
+
+ if (success)
+ g_object_notify (G_OBJECT (device), NM_DEVICE_BOND_SLAVES);
+
+ if (configure) {
+ /* Kernel bonding code "closes" the slave when releasing it, (which clears
+ * IFF_UP), so we must bring it back up here to ensure carrier changes and
+ * other state is noticed by the now-released slave.
+ */
+ if (!nm_device_bring_up (slave, TRUE, &no_firmware)) {
+ nm_log_warn (LOGD_BOND, "(%s): released bond slave could not be brought up.",
+ nm_device_get_iface (slave));
+ }
+ }
+
+ return success;
+}
+
+/******************************************************************/
+
+NMDevice *
+nm_device_bond_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BOND,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_DRIVER, "bonding",
+ NM_DEVICE_TYPE_DESC, "Bond",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BOND,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+}
+
+NMDevice *
+nm_device_bond_new_for_connection (NMConnection *connection)
+{
+ const char *iface;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+
+ iface = nm_connection_get_virtual_iface_name (connection);
+ g_return_val_if_fail (iface != NULL, NULL);
+
+ if ( !nm_platform_bond_add (iface)
+ && nm_platform_get_error () != NM_PLATFORM_ERROR_EXISTS) {
+ nm_log_warn (LOGD_DEVICE | LOGD_BOND, "(%s): failed to create bonding master interface for '%s': %s",
+ iface, nm_connection_get_id (connection),
+ nm_platform_get_error_msg ());
+ return NULL;
+ }
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BOND,
+ NM_DEVICE_IFACE, iface,
+ NM_DEVICE_DRIVER, "bonding",
+ NM_DEVICE_TYPE_DESC, "Bond",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BOND,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+}
+
+static void
+constructed (GObject *object)
+{
+ G_OBJECT_CLASS (nm_device_bond_parent_class)->constructed (object);
+
+ nm_log_dbg (LOGD_HW | LOGD_BOND, "(%s): kernel ifindex %d",
+ nm_device_get_iface (NM_DEVICE (object)),
+ nm_device_get_ifindex (NM_DEVICE (object)));
+}
+
+static void
+nm_device_bond_init (NMDeviceBond * self)
+{
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ GPtrArray *slaves;
+ GSList *list, *iter;
+
+ switch (prop_id) {
+ break;
+ case PROP_SLAVES:
+ slaves = g_ptr_array_new ();
+ list = nm_device_master_get_slaves (NM_DEVICE (object));
+ for (iter = list; iter; iter = iter->next)
+ g_ptr_array_add (slaves, g_strdup (nm_device_get_path (NM_DEVICE (iter->data))));
+ g_slist_free (list);
+ g_value_take_boxed (value, slaves);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_bond_class_init (NMDeviceBondClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMDeviceBondPrivate));
+
+ parent_class->connection_type = NM_SETTING_BOND_SETTING_NAME;
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
+ parent_class->get_generic_capabilities = get_generic_capabilities;
+ parent_class->is_available = is_available;
+ parent_class->check_connection_compatible = check_connection_compatible;
+ parent_class->check_connection_available = check_connection_available;
+ parent_class->complete_connection = complete_connection;
+
+ parent_class->update_connection = update_connection;
+
+ parent_class->act_stage1_prepare = act_stage1_prepare;
+ parent_class->enslave_slave = enslave_slave;
+ parent_class->release_slave = release_slave;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_SLAVES,
+ g_param_spec_boxed (NM_DEVICE_BOND_SLAVES,
+ "Slaves",
+ "Slaves",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_bond_object_info);
+
+ dbus_g_error_domain_register (NM_BOND_ERROR, NULL, NM_TYPE_BOND_ERROR);
+}
diff --git a/src/nm-device-bond.h b/src/devices/nm-device-bond.h
index eeca56061..f4683ad85 100644
--- a/src/nm-device-bond.h
+++ b/src/devices/nm-device-bond.h
@@ -23,7 +23,7 @@
#include <glib-object.h>
-#include "nm-device-wired.h"
+#include "nm-device.h"
G_BEGIN_DECLS
@@ -40,26 +40,22 @@ typedef enum {
NM_BOND_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMBondError;
-#define NM_DEVICE_BOND_HW_ADDRESS "hw-address"
-#define NM_DEVICE_BOND_CARRIER "carrier"
#define NM_DEVICE_BOND_SLAVES "slaves"
typedef struct {
- NMDeviceWired parent;
+ NMDevice parent;
} NMDeviceBond;
typedef struct {
- NMDeviceWiredClass parent;
+ NMDeviceClass parent;
- /* Signals */
- void (*properties_changed) (NMDeviceBond *device, GHashTable *properties);
} NMDeviceBondClass;
GType nm_device_bond_get_type (void);
-NMDevice *nm_device_bond_new (const char *udi,
- const char *iface);
+NMDevice *nm_device_bond_new (NMPlatformLink *platform_device);
+NMDevice *nm_device_bond_new_for_connection (NMConnection *connection);
G_END_DECLS
diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c
new file mode 100644
index 000000000..edc41838f
--- /dev/null
+++ b/src/devices/nm-device-bridge.c
@@ -0,0 +1,588 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2011 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <netinet/ether.h>
+#include <stdlib.h>
+
+#include "gsystem-local-alloc.h"
+#include "nm-device-bridge.h"
+#include "nm-logging.h"
+#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
+#include "nm-device-private.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-dbus-manager.h"
+#include "nm-enum-types.h"
+#include "nm-platform.h"
+
+#include "nm-device-bridge-glue.h"
+
+
+G_DEFINE_TYPE (NMDeviceBridge, nm_device_bridge, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgePrivate))
+
+#define NM_BRIDGE_ERROR (nm_bridge_error_quark ())
+
+typedef struct {
+ int dummy;
+} NMDeviceBridgePrivate;
+
+enum {
+ PROP_0,
+ PROP_SLAVES,
+
+ LAST_PROP
+};
+
+/******************************************************************/
+
+static GQuark
+nm_bridge_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-bridge-error");
+ return quark;
+}
+
+/******************************************************************/
+
+static guint32
+get_generic_capabilities (NMDevice *dev)
+{
+ return NM_DEVICE_CAP_CARRIER_DETECT;
+}
+
+static gboolean
+is_available (NMDevice *dev)
+{
+ if (NM_DEVICE_GET_CLASS (dev)->is_up)
+ return NM_DEVICE_GET_CLASS (dev)->is_up (dev);
+ return FALSE;
+}
+
+static gboolean
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
+{
+ /* Connections are always available because the carrier state is determined
+ * by the bridge port carrier states, not the bridge's state.
+ */
+ return TRUE;
+}
+
+static gboolean
+check_connection_compatible (NMDevice *device, NMConnection *connection)
+{
+ const char *iface;
+ NMSettingBridge *s_bridge;
+ const GByteArray *mac_address;
+
+ if (!NM_DEVICE_CLASS (nm_device_bridge_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
+ s_bridge = nm_connection_get_setting_bridge (connection);
+ if (!s_bridge || !nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
+ return FALSE;
+
+ /* Bridge connections must specify the virtual interface name */
+ iface = nm_connection_get_virtual_iface_name (connection);
+ if (!iface || strcmp (nm_device_get_iface (device), iface))
+ return FALSE;
+
+ mac_address = nm_setting_bridge_get_mac_address (s_bridge);
+ if (mac_address) {
+ guint hw_len;
+ const guint8 *hw_addr;
+
+ hw_addr = nm_device_get_hw_address (device, &hw_len);
+ if ( !hw_addr
+ || hw_len != mac_address->len
+ || memcmp (mac_address->data, hw_addr, hw_len) != 0)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+complete_connection (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object,
+ const GSList *existing_connections,
+ GError **error)
+{
+ NMSettingBridge *s_bridge, *tmp;
+ guint32 i = 0;
+ char *name;
+ const GSList *iter;
+ gboolean found;
+
+ nm_utils_complete_generic (connection,
+ NM_SETTING_BRIDGE_SETTING_NAME,
+ existing_connections,
+ _("Bridge connection %d"),
+ NULL,
+ TRUE);
+
+ s_bridge = nm_connection_get_setting_bridge (connection);
+ if (!s_bridge) {
+ s_bridge = (NMSettingBridge *) nm_setting_bridge_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_bridge));
+ }
+
+ /* Grab the first name that doesn't exist in either our connections
+ * or a device on the system.
+ */
+ while (i < 500 && !nm_setting_bridge_get_interface_name (s_bridge)) {
+ name = g_strdup_printf ("br%u", i);
+ /* check interface names */
+ if (!nm_platform_link_exists (name)) {
+ /* check existing bridge connections */
+ for (iter = existing_connections, found = FALSE; iter; iter = g_slist_next (iter)) {
+ NMConnection *candidate = iter->data;
+
+ tmp = nm_connection_get_setting_bridge (candidate);
+ if (tmp && nm_connection_is_type (candidate, NM_SETTING_BRIDGE_SETTING_NAME)) {
+ if (g_strcmp0 (nm_setting_bridge_get_interface_name (tmp), name) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+
+ if (!found)
+ g_object_set (G_OBJECT (s_bridge), NM_SETTING_BRIDGE_INTERFACE_NAME, name, NULL);
+ }
+
+ g_free (name);
+ i++;
+ }
+
+ return TRUE;
+}
+
+/******************************************************************/
+
+typedef struct {
+ const char *name;
+ const char *sysname;
+ gboolean default_if_zero;
+ gboolean user_hz_compensate;
+} Option;
+
+static const Option master_options[] = {
+ { NM_SETTING_BRIDGE_STP, "stp_state", FALSE, FALSE },
+ { NM_SETTING_BRIDGE_PRIORITY, "priority", TRUE, FALSE },
+ { NM_SETTING_BRIDGE_FORWARD_DELAY, "forward_delay", TRUE, TRUE },
+ { NM_SETTING_BRIDGE_HELLO_TIME, "hello_time", TRUE, TRUE },
+ { NM_SETTING_BRIDGE_MAX_AGE, "max_age", TRUE, TRUE },
+ { NM_SETTING_BRIDGE_AGEING_TIME, "ageing_time", TRUE, TRUE },
+ { NULL, NULL }
+};
+
+static const Option slave_options[] = {
+ { NM_SETTING_BRIDGE_PORT_PRIORITY, "priority", TRUE, FALSE },
+ { NM_SETTING_BRIDGE_PORT_PATH_COST, "path_cost", TRUE, FALSE },
+ { NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, "hairpin_mode", FALSE, FALSE },
+ { NULL, NULL }
+};
+
+static void
+commit_option (NMDevice *device, NMSetting *setting, const Option *option, gboolean slave)
+{
+ int ifindex = nm_device_get_ifindex (device);
+ GParamSpec *pspec;
+ GValue val = G_VALUE_INIT;
+ guint32 uval = 0;
+ gs_free char *value = NULL;
+
+ g_assert (setting);
+
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), option->name);
+ g_assert (pspec);
+
+ /* Get the property's value */
+ g_value_init (&val, G_PARAM_SPEC_VALUE_TYPE (pspec));
+ g_object_get_property ((GObject *) setting, option->name, &val);
+ if (G_VALUE_HOLDS_BOOLEAN (&val))
+ uval = g_value_get_boolean (&val) ? 1 : 0;
+ else if (G_VALUE_HOLDS_UINT (&val)) {
+ uval = g_value_get_uint (&val);
+
+ /* zero means "unspecified" for some NM properties but isn't in the
+ * allowed kernel range, so reset the property to the default value.
+ */
+ if (option->default_if_zero && uval == 0) {
+ g_value_unset (&val);
+ g_value_init (&val, G_PARAM_SPEC_VALUE_TYPE (pspec));
+ g_param_value_set_default (pspec, &val);
+ uval = g_value_get_uint (&val);
+ }
+
+ /* Linux kernel bridge interfaces use 'centiseconds' for time-based values.
+ * In reality it's not centiseconds, but depends on HZ and USER_HZ, which
+ * is almost always works out to be a multiplier of 100, so we can assume
+ * centiseconds. See clock_t_to_jiffies().
+ */
+ if (option->user_hz_compensate)
+ uval *= 100;
+ } else
+ g_assert_not_reached ();
+ g_value_unset (&val);
+
+ value = g_strdup_printf ("%u", uval);
+ if (slave)
+ nm_platform_slave_set_option (ifindex, option->sysname, value);
+ else
+ nm_platform_master_set_option (ifindex, option->sysname, value);
+}
+
+static void
+commit_master_options (NMDevice *device, NMSettingBridge *setting)
+{
+ const Option *option;
+ NMSetting *s = NM_SETTING (setting);
+
+ for (option = master_options; option->name; option++)
+ commit_option (device, s, option, FALSE);
+}
+
+static void
+commit_slave_options (NMDevice *device, NMSettingBridgePort *setting)
+{
+ const Option *option;
+ NMSetting *s, *s_clear = NULL;
+
+ if (setting)
+ s = NM_SETTING (setting);
+ else
+ s = s_clear = nm_setting_bridge_port_new ();
+
+ for (option = slave_options; option->name; option++)
+ commit_option (device, s, option, TRUE);
+
+ g_clear_object (&s_clear);
+}
+
+static void
+update_connection (NMDevice *device, NMConnection *connection)
+{
+ NMSettingBridge *s_bridge = nm_connection_get_setting_bridge (connection);
+ const char *ifname = nm_device_get_iface (device);
+ int ifindex = nm_device_get_ifindex (device);
+ const Option *option;
+
+ if (!s_bridge) {
+ s_bridge = (NMSettingBridge *) nm_setting_bridge_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_bridge);
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_INTERFACE_NAME, ifname, NULL);
+ }
+
+ for (option = master_options; option->name; option++) {
+ gs_free char *str = nm_platform_master_get_option (ifindex, option->sysname);
+ int value;
+
+ if (str) {
+ value = strtol (str, NULL, 10);
+
+ /* See comments in set_sysfs_uint() about centiseconds. */
+ if (option->user_hz_compensate)
+ value /= 100;
+
+ g_object_set (s_bridge, option->name, value, NULL);
+ } else {
+ nm_log_warn (LOGD_BRIDGE, "(%s): failed to read bridge setting '%s'",
+ nm_device_get_iface (device), option->sysname);
+ }
+ }
+}
+
+/**
+ * nm_bridge_update_slave_connection:
+ * @slave: the slave #NMDevice, is *not* necessarily a bridge interface
+ * @connection: the #NMConnection to update with the bridge port settings
+ *
+ * Reads bridge port configuration and updates @connection with those
+ * properties.
+ *
+ * Returns: %TRUE if the port configuration was read and @connection updated,
+ * %FALSE if not.
+ */
+gboolean
+nm_bridge_update_slave_connection (NMDevice *slave, NMConnection *connection)
+{
+ NMSettingBridgePort *s_port;
+ int ifindex = nm_device_get_ifindex (slave);
+ const Option *option;
+
+ g_return_val_if_fail (NM_IS_DEVICE (slave), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+
+ s_port = nm_connection_get_setting_bridge_port (connection);
+ if (!s_port) {
+ s_port = (NMSettingBridgePort *) nm_setting_bridge_port_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_port));
+ }
+
+ for (option = slave_options; option->name; option++) {
+ gs_free char *str = nm_platform_slave_get_option (ifindex, option->sysname);
+ int value;
+
+ if (str) {
+ value = strtol (str, NULL, 10);
+
+ /* See comments in set_sysfs_uint() about centiseconds. */
+ if (option->user_hz_compensate)
+ value /= 100;
+
+ g_object_set (s_port, option->name, value, NULL);
+ } else {
+ nm_log_warn (LOGD_BRIDGE, "(%s): failed to read bridge port setting '%s'",
+ nm_device_get_iface (slave), option->sysname);
+ }
+ }
+
+ return TRUE;
+}
+
+static NMActStageReturn
+act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
+{
+ NMActStageReturn ret;
+ NMConnection *connection = nm_device_get_connection (device);
+
+ g_assert (connection);
+
+ ret = NM_DEVICE_CLASS (nm_device_bridge_parent_class)->act_stage1_prepare (device, reason);
+ if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
+ return ret;
+
+ commit_master_options (device, nm_connection_get_setting_bridge (connection));
+
+ return NM_ACT_STAGE_RETURN_SUCCESS;
+}
+
+static gboolean
+enslave_slave (NMDevice *device,
+ NMDevice *slave,
+ NMConnection *connection,
+ gboolean configure)
+{
+ if (configure) {
+ if (!nm_platform_link_enslave (nm_device_get_ip_ifindex (device), nm_device_get_ip_ifindex (slave)))
+ return FALSE;
+
+ commit_slave_options (slave, nm_connection_get_setting_bridge_port (connection));
+
+ nm_log_info (LOGD_BRIDGE, "(%s): attached bridge port %s",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ } else {
+ nm_log_info (LOGD_BRIDGE, "(%s): bridge port %s was attached",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ }
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_BRIDGE_SLAVES);
+
+ return TRUE;
+}
+
+static gboolean
+release_slave (NMDevice *device,
+ NMDevice *slave,
+ gboolean configure)
+{
+ gboolean success = TRUE;
+
+ if (configure) {
+ success = nm_platform_link_release (nm_device_get_ip_ifindex (device),
+ nm_device_get_ip_ifindex (slave));
+
+ if (success) {
+ nm_log_info (LOGD_BRIDGE, "(%s): detached bridge port %s",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ } else {
+ nm_log_warn (LOGD_BRIDGE, "(%s): failed to detach bridge port %s",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ }
+ } else {
+ nm_log_info (LOGD_BRIDGE, "(%s): bridge port %s was detached",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ }
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_BRIDGE_SLAVES);
+ return success;
+}
+
+/******************************************************************/
+
+NMDevice *
+nm_device_bridge_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BRIDGE,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_DRIVER, "bridge",
+ NM_DEVICE_TYPE_DESC, "Bridge",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BRIDGE,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+}
+
+NMDevice *
+nm_device_bridge_new_for_connection (NMConnection *connection)
+{
+ const char *iface;
+ NMSettingBridge *s_bridge;
+ const GByteArray *mac_address;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+
+ iface = nm_connection_get_virtual_iface_name (connection);
+ g_return_val_if_fail (iface != NULL, NULL);
+
+ s_bridge = nm_connection_get_setting_bridge (connection);
+ g_return_val_if_fail (s_bridge, NULL);
+
+ mac_address = nm_setting_bridge_get_mac_address (s_bridge);
+
+ if ( !nm_platform_bridge_add (iface,
+ mac_address ? mac_address->data : NULL,
+ mac_address ? mac_address->len : 0)
+ && nm_platform_get_error () != NM_PLATFORM_ERROR_EXISTS) {
+ nm_log_warn (LOGD_DEVICE | LOGD_BRIDGE, "(%s): failed to create bridge master interface for '%s': %s",
+ iface, nm_connection_get_id (connection),
+ nm_platform_get_error_msg ());
+ return NULL;
+ }
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BRIDGE,
+ NM_DEVICE_IFACE, iface,
+ NM_DEVICE_DRIVER, "bridge",
+ NM_DEVICE_TYPE_DESC, "Bridge",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BRIDGE,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+}
+
+static void
+constructed (GObject *object)
+{
+ G_OBJECT_CLASS (nm_device_bridge_parent_class)->constructed (object);
+
+ nm_log_dbg (LOGD_HW | LOGD_BRIDGE, "(%s): kernel ifindex %d",
+ nm_device_get_iface (NM_DEVICE (object)),
+ nm_device_get_ifindex (NM_DEVICE (object)));
+}
+
+static void
+nm_device_bridge_init (NMDeviceBridge * self)
+{
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ GPtrArray *slaves;
+ GSList *list, *iter;
+
+ switch (prop_id) {
+ break;
+ case PROP_SLAVES:
+ slaves = g_ptr_array_new ();
+ list = nm_device_master_get_slaves (NM_DEVICE (object));
+ for (iter = list; iter; iter = iter->next)
+ g_ptr_array_add (slaves, g_strdup (nm_device_get_path (NM_DEVICE (iter->data))));
+ g_slist_free (list);
+ g_value_take_boxed (value, slaves);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMDeviceBridgePrivate));
+
+ parent_class->connection_type = NM_SETTING_BRIDGE_SETTING_NAME;
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
+ parent_class->get_generic_capabilities = get_generic_capabilities;
+ parent_class->is_available = is_available;
+ parent_class->check_connection_compatible = check_connection_compatible;
+ parent_class->check_connection_available = check_connection_available;
+ parent_class->complete_connection = complete_connection;
+
+ parent_class->update_connection = update_connection;
+
+ parent_class->act_stage1_prepare = act_stage1_prepare;
+ parent_class->enslave_slave = enslave_slave;
+ parent_class->release_slave = release_slave;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_SLAVES,
+ g_param_spec_boxed (NM_DEVICE_BRIDGE_SLAVES,
+ "Slaves",
+ "Slaves",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_bridge_object_info);
+
+ dbus_g_error_domain_register (NM_BRIDGE_ERROR, NULL, NM_TYPE_BRIDGE_ERROR);
+}
diff --git a/src/nm-device-bridge.h b/src/devices/nm-device-bridge.h
index bf0ed01e8..4194f5a41 100644
--- a/src/nm-device-bridge.h
+++ b/src/devices/nm-device-bridge.h
@@ -23,7 +23,7 @@
#include <glib-object.h>
-#include "nm-device-wired.h"
+#include "nm-device.h"
G_BEGIN_DECLS
@@ -40,26 +40,24 @@ typedef enum {
NM_BRIDGE_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMBridgeError;
-#define NM_DEVICE_BRIDGE_HW_ADDRESS "hw-address"
-#define NM_DEVICE_BRIDGE_CARRIER "carrier"
#define NM_DEVICE_BRIDGE_SLAVES "slaves"
typedef struct {
- NMDeviceWired parent;
+ NMDevice parent;
} NMDeviceBridge;
typedef struct {
- NMDeviceWiredClass parent;
+ NMDeviceClass parent;
- /* Signals */
- void (*properties_changed) (NMDeviceBridge *device, GHashTable *properties);
} NMDeviceBridgeClass;
GType nm_device_bridge_get_type (void);
-NMDevice *nm_device_bridge_new (const char *udi,
- const char *iface);
+NMDevice *nm_device_bridge_new (NMPlatformLink *platform_device);
+NMDevice *nm_device_bridge_new_for_connection (NMConnection *connection);
+
+gboolean nm_bridge_update_slave_connection (NMDevice *slave, NMConnection *connection);
G_END_DECLS
diff --git a/src/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c
index 758245199..f4a90c747 100644
--- a/src/nm-device-ethernet.c
+++ b/src/devices/nm-device-ethernet.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2012 Red Hat, Inc.
+ * Copyright (C) 2005 - 2014 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -27,6 +27,7 @@
#include <stdlib.h>
#include <linux/sockios.h>
#include <linux/ethtool.h>
+#include <linux/version.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <linux/if.h>
@@ -43,7 +44,6 @@
#include "nm-supplicant-manager.h"
#include "nm-supplicant-interface.h"
#include "nm-supplicant-config.h"
-#include "nm-system.h"
#include "nm-setting-connection.h"
#include "nm-setting-wired.h"
#include "nm-setting-8021x.h"
@@ -51,22 +51,28 @@
#include "nm-setting-bond.h"
#include "ppp-manager/nm-ppp-manager.h"
#include "nm-logging.h"
-#include "nm-properties-changed-signal.h"
#include "nm-utils.h"
#include "nm-enum-types.h"
-#include "nm-netlink-monitor.h"
+#include "nm-dbus-manager.h"
+#include "nm-platform.h"
+#include "nm-dcb.h"
+#include "nm-settings-connection.h"
#include "nm-device-ethernet-glue.h"
-G_DEFINE_TYPE (NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE_WIRED)
+G_DEFINE_TYPE (NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE)
#define NM_DEVICE_ETHERNET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetPrivate))
#define WIRED_SECRETS_TRIES "wired-secrets-tries"
+#define PPPOE_RECONNECT_DELAY 7
+
#define NM_ETHERNET_ERROR (nm_ethernet_error_quark ())
+static NMSetting *device_get_setting (NMDevice *device, GType setting_type);
+
typedef struct Supplicant {
NMSupplicantManager *mgr;
NMSupplicantInterface *iface;
@@ -80,11 +86,26 @@ typedef struct Supplicant {
guint con_timeout_id;
} Supplicant;
+typedef enum {
+ DCB_WAIT_UNKNOWN = 0,
+ /* Ensure carrier is up before enabling DCB */
+ DCB_WAIT_CARRIER_PREENABLE_UP,
+ /* Wait for carrier down when device starts enabling */
+ DCB_WAIT_CARRIER_PRECONFIG_DOWN,
+ /* Wait for carrier up when device has finished enabling */
+ DCB_WAIT_CARRIER_PRECONFIG_UP,
+ /* Wait carrier down when device starts configuring */
+ DCB_WAIT_CARRIER_POSTCONFIG_DOWN,
+ /* Wait carrier up when device has finished configuring */
+ DCB_WAIT_CARRIER_POSTCONFIG_UP,
+} DcbWait;
+
typedef struct {
- guint8 hw_addr[ETH_ALEN]; /* Current MAC address */
guint8 perm_hw_addr[ETH_ALEN]; /* Permanent MAC address */
guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */
+ guint32 speed;
+
Supplicant supplicant;
guint supplicant_timeout_id;
@@ -93,34 +114,30 @@ typedef struct {
char * subchan2;
char * subchan3;
char * subchannels; /* Composite used for checking unmanaged specs */
+ char * s390_nettype;
+ GHashTable * s390_options;
/* PPPoE */
NMPPPManager *ppp_manager;
NMIP4Config *pending_ip4_config;
-} NMDeviceEthernetPrivate;
-
-enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
+ gint32 last_pppoe_time;
+ guint pppoe_wait_id;
-static guint signals[LAST_SIGNAL] = { 0 };
+ /* DCB */
+ DcbWait dcb_wait;
+ guint dcb_timeout_id;
+ guint dcb_carrier_id;
+} NMDeviceEthernetPrivate;
enum {
PROP_0,
- PROP_HW_ADDRESS,
PROP_PERM_HW_ADDRESS,
PROP_SPEED,
- PROP_CARRIER,
LAST_PROP
};
-static gboolean supports_mii_carrier_detect (NMDeviceEthernet *dev);
-static gboolean supports_ethtool_carrier_detect (NMDeviceEthernet *dev);
-
static GQuark
nm_ethernet_error_quark (void)
{
@@ -130,6 +147,22 @@ nm_ethernet_error_quark (void)
return quark;
}
+static char *
+get_link_basename (const char *parent_path, const char *name, GError **error)
+{
+ char *link_dest, *path;
+ char *result = NULL;
+
+ path = g_strdup_printf ("%s/%s", parent_path, name);
+ link_dest = g_file_read_link (path, error);
+ if (link_dest) {
+ result = g_path_get_basename (link_dest);
+ g_free (link_dest);
+ }
+ g_free (path);
+ return result;
+}
+
static void
_update_s390_subchannels (NMDeviceEthernet *self)
{
@@ -177,34 +210,33 @@ _update_s390_subchannels (NMDeviceEthernet *self)
goto out;
}
- /* FIXME: we probably care about ordering here to ensure that we map
- * cdev0 -> subchan1, cdev1 -> subchan2, etc.
- */
while ((item = g_dir_read_name (dir))) {
- char buf[50];
- char *cdev_path;
-
- if (strncmp (item, "cdev", 4))
- continue; /* Not a subchannel link */
-
- cdev_path = g_strdup_printf ("%s/%s", parent_path, item);
-
- memset (buf, 0, sizeof (buf));
- errno = 0;
- if (readlink (cdev_path, &buf[0], sizeof (buf) - 1) >= 0) {
- if (!priv->subchan1)
- priv->subchan1 = g_path_get_basename (buf);
- else if (!priv->subchan2)
- priv->subchan2 = g_path_get_basename (buf);
- else if (!priv->subchan3)
- priv->subchan3 = g_path_get_basename (buf);
- } else {
- nm_log_warn (LOGD_DEVICE | LOGD_HW,
- "(%s): failed to read cdev link '%s': %d",
- iface, cdev_path, errno);
+ if (!strcmp (item, "cdev0")) {
+ priv->subchan1 = get_link_basename (parent_path, "cdev0", &error);
+ } else if (!strcmp (item, "cdev1")) {
+ priv->subchan2 = get_link_basename (parent_path, "cdev1", &error);
+ } else if (!strcmp (item, "cdev2")) {
+ priv->subchan3 = get_link_basename (parent_path, "cdev2", &error);
+ } else if (!strcmp (item, "driver")) {
+ priv->s390_nettype = get_link_basename (parent_path, "driver", &error);
+ } else if ( !strcmp (item, "layer2")
+ || !strcmp (item, "portname")
+ || !strcmp (item, "portno")) {
+ char *path, *value;
+ path = g_strdup_printf ("%s/%s", parent_path, item);
+ value = nm_platform_sysctl_get (path);
+ if (value && *value)
+ g_hash_table_insert (priv->s390_options, g_strdup (item), g_strdup (value));
+ else
+ nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): error reading %s", iface, path);
+ g_free (path);
+ g_free (value);
}
- g_free (cdev_path);
- };
+ if (error) {
+ nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): %s", iface, error->message);
+ g_clear_error (&error);
+ }
+ }
g_dir_close (dir);
@@ -235,29 +267,26 @@ out:
static GObject*
constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
{
GObject *object;
- NMDeviceEthernetPrivate *priv;
NMDevice *self;
- int itype;
+ int ifindex;
object = G_OBJECT_CLASS (nm_device_ethernet_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (object) {
self = NM_DEVICE (object);
- priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ ifindex = nm_device_get_ifindex (self);
- // FIXME: Convert this into a no-export property so type can be specified
- // when the device is created.
- itype = nm_system_get_iface_type (nm_device_get_ifindex (self), nm_device_get_iface (self));
- g_assert (itype == NM_IFACE_TYPE_UNSPEC);
+ g_assert ( nm_platform_link_get_type (ifindex) == NM_LINK_TYPE_ETHERNET
+ || nm_platform_link_get_type (ifindex) == NM_LINK_TYPE_VETH);
nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): kernel ifindex %d",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)));
+ nm_device_get_iface (NM_DEVICE (self)),
+ nm_device_get_ifindex (NM_DEVICE (self)));
/* s390 stuff */
_update_s390_subchannels (NM_DEVICE_ETHERNET (self));
@@ -286,133 +315,32 @@ device_state_changed (NMDevice *device,
NMDeviceState old_state,
NMDeviceStateReason reason)
{
- switch (new_state) {
- case NM_DEVICE_STATE_ACTIVATED:
- case NM_DEVICE_STATE_FAILED:
- case NM_DEVICE_STATE_DISCONNECTED:
+ if ( new_state == NM_DEVICE_STATE_ACTIVATED
+ || new_state == NM_DEVICE_STATE_FAILED
+ || new_state == NM_DEVICE_STATE_DISCONNECTED)
clear_secrets_tries (device);
- break;
- default:
- break;
- }
-}
-
-static void
-nm_device_ethernet_init (NMDeviceEthernet * self)
-{
-}
-
-static gboolean
-is_up (NMDevice *device)
-{
- if (!NM_DEVICE_ETHERNET_GET_PRIVATE (device)->supplicant.mgr)
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-bring_up (NMDevice *dev)
-{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (dev);
-
- priv->supplicant.mgr = nm_supplicant_manager_get ();
-
- return priv->supplicant.mgr ? TRUE : FALSE;
}
static void
-take_down (NMDevice *dev)
+nm_device_ethernet_init (NMDeviceEthernet *self)
{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (dev);
-
- if (priv->supplicant.mgr) {
- g_object_unref (priv->supplicant.mgr);
- priv->supplicant.mgr = NULL;
- }
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ priv->s390_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
}
NMDevice *
-nm_device_ethernet_new (const char *udi,
- const char *iface,
- const char *driver)
+nm_device_ethernet_new (NMPlatformLink *platform_device)
{
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
- g_return_val_if_fail (driver != NULL, NULL);
+ g_return_val_if_fail (platform_device != NULL, NULL);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_ETHERNET,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, driver,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
NM_DEVICE_TYPE_DESC, "Ethernet",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_ETHERNET,
NULL);
}
static void
-update_hw_address (NMDevice *dev)
-{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (dev);
- gsize addrlen;
- gboolean changed = FALSE;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- g_return_if_fail (addrlen == ETH_ALEN);
- if (changed)
- g_object_notify (G_OBJECT (dev), NM_DEVICE_ETHERNET_HW_ADDRESS);
- }
-}
-
-static gboolean
-_set_hw_addr (NMDeviceEthernet *self, const guint8 *addr, const char *detail)
-{
- NMDevice *dev = NM_DEVICE (self);
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- const char *iface;
- char *mac_str = NULL;
- gboolean success = FALSE;
-
- g_return_val_if_fail (addr != NULL, FALSE);
-
- iface = nm_device_get_iface (dev);
-
- /* Do nothing if current MAC is same */
- if (!memcmp (priv->hw_addr, addr, ETH_ALEN)) {
- nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): no MAC address change needed", iface);
- return TRUE;
- }
-
- mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
-
- /* Can't change MAC address while device is up */
- nm_device_hw_take_down (dev, FALSE);
-
- success = nm_system_iface_set_mac (nm_device_get_ip_ifindex (dev), (struct ether_addr *) addr);
- if (success) {
- /* MAC address succesfully changed; update the current MAC to match */
- update_hw_address (dev);
- if (memcmp (priv->hw_addr, addr, ETH_ALEN) == 0) {
- nm_log_info (LOGD_DEVICE | LOGD_ETHER, "(%s): %s MAC address to %s",
- iface, detail, mac_str);
- } else {
- nm_log_warn (LOGD_DEVICE | LOGD_ETHER, "(%s): new MAC address %s "
- "not successfully set",
- iface, mac_str);
- }
- } else {
- nm_log_warn (LOGD_DEVICE | LOGD_ETHER, "(%s): failed to %s MAC address to %s",
- iface, detail, mac_str);
- }
- nm_device_hw_bring_up (dev, FALSE, NULL);
- g_free (mac_str);
-
- return success;
-}
-
-static void
update_permanent_hw_address (NMDevice *dev)
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
@@ -420,6 +348,7 @@ update_permanent_hw_address (NMDevice *dev)
struct ifreq req;
struct ethtool_perm_addr *epaddr = NULL;
int fd, ret;
+ const guint8 *mac;
fd = socket (PF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
@@ -442,7 +371,11 @@ update_permanent_hw_address (NMDevice *dev)
nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): unable to read permanent MAC address (error %d)",
nm_device_get_iface (dev), errno);
/* Fall back to current address */
- memcpy (epaddr->data, priv->hw_addr, ETH_ALEN);
+ mac = nm_device_get_hw_address (dev, NULL);
+ if (mac)
+ memcpy (epaddr->data, mac, ETH_ALEN);
+ else
+ memset (epaddr->data, 0, ETH_ALEN);
}
if (memcmp (&priv->perm_hw_addr, epaddr->data, ETH_ALEN)) {
@@ -459,56 +392,34 @@ update_initial_hw_address (NMDevice *dev)
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- gsize addrlen;
- char *mac_str = NULL;
+ char *mac_str;
+ const guint8 *mac;
/* This sets initial MAC address from current MAC address. It should only
* be called from NMDevice constructor() to really get the initial address.
*/
- addrlen = nm_device_read_hwaddr (dev,
- priv->initial_hw_addr,
- sizeof (priv->initial_hw_addr),
- NULL);
- if (addrlen)
- g_return_if_fail (addrlen == ETH_ALEN);
-
- mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- priv->initial_hw_addr[0],
- priv->initial_hw_addr[1],
- priv->initial_hw_addr[2],
- priv->initial_hw_addr[3],
- priv->initial_hw_addr[4],
- priv->initial_hw_addr[5]);
+ mac = nm_device_get_hw_address (dev, NULL);
+ if (mac)
+ memcpy (priv->initial_hw_addr, mac, ETH_ALEN);
+ mac_str = nm_utils_hwaddr_ntoa (priv->initial_hw_addr, ARPHRD_ETHER);
nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): read initial MAC address %s",
nm_device_get_iface (dev), mac_str);
-
g_free (mac_str);
}
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- *out_len = ETH_ALEN;
- return NM_DEVICE_ETHERNET_GET_PRIVATE (device)->hw_addr;
-}
-
static guint32
get_generic_capabilities (NMDevice *dev)
{
- NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
- guint32 caps = NM_DEVICE_CAP_NONE;
-
- /* cipsec devices are also explicitly unsupported at this time */
- if (strstr (nm_device_get_iface (dev), "cipsec"))
+ if (nm_platform_link_supports_carrier_detect (nm_device_get_ifindex (dev)))
+ return NM_DEVICE_CAP_CARRIER_DETECT;
+ else {
+ nm_log_info (LOGD_HW,
+ "(%s): driver '%s' does not support carrier detection.",
+ nm_device_get_iface (dev),
+ nm_device_get_driver (dev));
return NM_DEVICE_CAP_NONE;
-
- if (supports_ethtool_carrier_detect (self) || supports_mii_carrier_detect (self))
- caps |= NM_DEVICE_CAP_CARRIER_DETECT;
-
- caps |= NM_DEVICE_CAP_NM_SUPPORTED;
-
- return caps;
+ }
}
static gboolean
@@ -545,53 +456,36 @@ match_subchans (NMDeviceEthernet *self, NMSettingWired *s_wired, gboolean *try_m
}
static gboolean
-match_ethernet_connection (NMDevice *device, NMConnection *connection,
- gboolean check_blacklist, GError **error)
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMSettingWired *s_wired;
+ if (!NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
s_wired = nm_connection_get_setting_wired (connection);
if (nm_connection_is_type (connection, NM_SETTING_PPPOE_SETTING_NAME)) {
/* NOP */
} else if (nm_connection_is_type (connection, NM_SETTING_WIRED_SETTING_NAME)) {
- if (!s_wired) {
- g_set_error (error,
- NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_INVALID,
- "The connection was not a valid wired connection.");
+ if (!s_wired)
return FALSE;
- }
- } else {
- g_set_error (error,
- NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_NOT_WIRED,
- "The connection was not a wired, bond, or PPPoE connection.");
+ } else
return FALSE;
- }
if (s_wired) {
const GByteArray *mac;
gboolean try_mac = TRUE;
const GSList *mac_blacklist, *mac_blacklist_iter;
- if (!match_subchans (self, s_wired, &try_mac)) {
- g_set_error (error,
- NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection's s390 subchannels did not match this device.");
+ if (!match_subchans (self, s_wired, &try_mac))
return FALSE;
- }
mac = nm_setting_wired_get_mac_address (s_wired);
- if (try_mac && mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN)) {
- g_set_error (error,
- NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection's MAC address did not match this device.");
+ if (try_mac && mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN))
return FALSE;
- }
-
- if (!check_blacklist)
- return TRUE;
/* Check for MAC address blacklist */
mac_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired);
@@ -603,36 +497,15 @@ match_ethernet_connection (NMDevice *device, NMConnection *connection,
g_warn_if_reached ();
return FALSE;
}
- if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0) {
- g_set_error (error,
- NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection's MAC address (%s) is blacklisted in %s.",
- (char *) mac_blacklist_iter->data, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+
+ if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0)
return FALSE;
- }
}
}
return TRUE;
}
-static NMConnection *
-get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
-{
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
-
- if (match_ethernet_connection (dev, connection, TRUE, NULL))
- return connection;
- }
-
- return NULL;
-}
-
/* FIXME: Move it to nm-device.c and then get rid of all foo_device_get_setting() all around.
It's here now to keep the patch short. */
static NMSetting *
@@ -801,8 +674,6 @@ build_supplicant_config (NMDeviceEthernet *self)
con_uuid = nm_connection_get_uuid (connection);
config = nm_supplicant_config_new ();
- if (!config)
- return NULL;
security = nm_connection_get_setting_802_1x (connection);
if (!nm_supplicant_config_add_setting_8021x (config, security, con_uuid, TRUE)) {
@@ -957,10 +828,7 @@ handle_auth_or_fail (NMDeviceEthernet *self,
if (setting_name) {
NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
- /* If the caller doesn't necessarily want completely new secrets,
- * only ask for new secrets after the first failure.
- */
- if (new_secrets || tries)
+ if (new_secrets)
flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
nm_act_request_get_secrets (req, setting_name, flags, NULL, wired_secrets_cb, self);
@@ -979,13 +847,18 @@ supplicant_connection_timeout_cb (gpointer user_data)
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMDevice *device = NM_DEVICE (self);
NMActRequest *req;
+ NMConnection *connection;
const char *iface;
+ guint64 timestamp = 0;
+ gboolean new_secrets = TRUE;
priv->supplicant.con_timeout_id = 0;
iface = nm_device_get_iface (device);
- /* Authentication failed, encryption key is probably bad */
+ /* Authentication failed; either driver problems, the encryption key is
+ * wrong, the passwords or certificates were wrong or the Ethernet switch's
+ * port is not configured for 802.1x. */
nm_log_warn (LOGD_DEVICE | LOGD_ETHER,
"Activation (%s/wired): association took too long.", iface);
@@ -993,7 +866,17 @@ supplicant_connection_timeout_cb (gpointer user_data)
req = nm_device_get_act_request (device);
g_assert (req);
- if (handle_auth_or_fail (self, req, TRUE) == NM_ACT_STAGE_RETURN_POSTPONE) {
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+
+ /* Ask for new secrets only if we've never activated this connection
+ * before. If we've connected before, don't bother the user with dialogs,
+ * just retry or fail, and if we never connect the user can fix the
+ * password somewhere else. */
+ if (nm_settings_connection_get_timestamp (NM_SETTINGS_CONNECTION (connection), &timestamp))
+ new_secrets = !timestamp;
+
+ if (handle_auth_or_fail (self, req, new_secrets) == NM_ACT_STAGE_RETURN_POSTPONE) {
nm_log_info (LOGD_DEVICE | LOGD_ETHER,
"Activation (%s/wired): asking for new secrets", iface);
} else
@@ -1038,10 +921,24 @@ supplicant_interface_init (NMDeviceEthernet *self)
return TRUE;
}
+static gboolean
+pppoe_reconnect_delay (gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+
+ priv->pppoe_wait_id = 0;
+ nm_log_info (LOGD_DEVICE, "(%s) PPPoE reconnect delay complete, resuming connection...",
+ nm_device_get_iface (device));
+ nm_device_activate_schedule_stage2_device_config (device);
+ return FALSE;
+}
+
static NMActStageReturn
act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMActRequest *req;
NMSettingWired *s_wired;
const GByteArray *cloned_mac;
@@ -1059,7 +956,27 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
/* Set device MAC address if the connection wants to change it */
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
if (cloned_mac && (cloned_mac->len == ETH_ALEN))
- _set_hw_addr (self, (const guint8 *) cloned_mac->data, "set");
+ nm_device_set_hw_addr (dev, cloned_mac->data, "set", LOGD_ETHER);
+ }
+
+ /* If we're re-activating a PPPoE connection a short while after
+ * a previous PPPoE connection was torn down, wait a bit to allow the
+ * remote side to handle the disconnection. Otherwise the peer may
+ * get confused and fail to negotiate the new connection. (rh #1023503)
+ */
+ if (priv->last_pppoe_time) {
+ gint32 delay = nm_utils_get_monotonic_timestamp_s () - priv->last_pppoe_time;
+
+ if (delay < PPPOE_RECONNECT_DELAY && device_get_setting (dev, NM_TYPE_SETTING_PPPOE)) {
+ nm_log_info (LOGD_DEVICE, "(%s) delaying PPPoE reconnect for %d seconds to ensure peer is ready...",
+ nm_device_get_iface (dev), delay);
+ g_assert (!priv->pppoe_wait_id);
+ priv->pppoe_wait_id = g_timeout_add_seconds (delay,
+ pppoe_reconnect_delay,
+ self);
+ ret = NM_ACT_STAGE_RETURN_POSTPONE;
+ } else
+ priv->last_pppoe_time = 0;
}
}
@@ -1069,6 +986,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
static NMActStageReturn
nm_8021x_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason)
{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMConnection *connection;
NMSetting8021x *security;
const char *setting_name;
@@ -1084,6 +1002,9 @@ nm_8021x_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason)
return ret;
}
+ if (!priv->supplicant.mgr)
+ priv->supplicant.mgr = nm_supplicant_manager_get ();
+
iface = nm_device_get_iface (NM_DEVICE (self));
/* If we need secrets, get them */
@@ -1189,18 +1110,217 @@ pppoe_stage3_ip4_config_start (NMDeviceEthernet *self, NMDeviceStateReason *reas
return ret;
}
+/****************************************************************/
+
+static void
+dcb_timeout_cleanup (NMDevice *device)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+
+ if (priv->dcb_timeout_id) {
+ g_source_remove (priv->dcb_timeout_id);
+ priv->dcb_timeout_id = 0;
+ }
+}
+
+static void
+dcb_carrier_cleanup (NMDevice *device)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+
+ if (priv->dcb_carrier_id) {
+ g_signal_handler_disconnect (device, priv->dcb_carrier_id);
+ priv->dcb_carrier_id = 0;
+ }
+}
+
+static void dcb_state (NMDevice *device, gboolean timeout);
+
+static gboolean
+dcb_carrier_timeout (gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+
+ g_return_val_if_fail (nm_device_get_state (device) == NM_DEVICE_STATE_CONFIG, G_SOURCE_REMOVE);
+
+ priv->dcb_timeout_id = 0;
+ if (priv->dcb_wait != DCB_WAIT_CARRIER_POSTCONFIG_DOWN) {
+ nm_log_warn (LOGD_DCB,
+ "(%s): DCB: timed out waiting for carrier (step %d)",
+ nm_device_get_iface (device),
+ priv->dcb_wait);
+ }
+ dcb_state (device, TRUE);
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
+dcb_configure (NMDevice *device)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ NMSettingDcb *s_dcb;
+ const char *iface = nm_device_get_iface (device);
+ GError *error = NULL;
+
+ dcb_timeout_cleanup (device);
+
+ s_dcb = (NMSettingDcb *) device_get_setting (device, NM_TYPE_SETTING_DCB);
+ g_assert (s_dcb);
+ if (!nm_dcb_setup (iface, s_dcb, &error)) {
+ nm_log_warn (LOGD_DCB,
+ "Activation (%s/wired) failed to enable DCB/FCoE: %s",
+ iface, error->message);
+ g_clear_error (&error);
+ return FALSE;
+ }
+
+ /* Pause again just in case the device takes the carrier down when
+ * setting specific DCB attributes.
+ */
+ nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (postconfig down)", iface);
+ priv->dcb_wait = DCB_WAIT_CARRIER_POSTCONFIG_DOWN;
+ priv->dcb_timeout_id = g_timeout_add_seconds (3, dcb_carrier_timeout, device);
+ return TRUE;
+}
+
+static gboolean
+dcb_enable (NMDevice *device)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ const char *iface = nm_device_get_iface (device);
+ GError *error = NULL;
+
+ dcb_timeout_cleanup (device);
+ if (!nm_dcb_enable (iface, TRUE, &error)) {
+ nm_log_warn (LOGD_DCB,
+ "Activation (%s/wired) failed to enable DCB/FCoE: %s",
+ iface, error->message);
+ g_clear_error (&error);
+ return FALSE;
+ }
+
+ /* Pause for 3 seconds after enabling DCB to let the card reconfigure
+ * itself. Drivers will often re-initialize internal settings which
+ * takes the carrier down for 2 or more seconds. During this time,
+ * lldpad will refuse to do anything else with the card since the carrier
+ * is down. But NM might get the carrier-down signal long after calling
+ * "dcbtool dcb on", so we have to first wait for the carrier to go down.
+ */
+ nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (preconfig down)", iface);
+ priv->dcb_wait = DCB_WAIT_CARRIER_PRECONFIG_DOWN;
+ priv->dcb_timeout_id = g_timeout_add_seconds (3, dcb_carrier_timeout, device);
+ return TRUE;
+}
+
+static void
+dcb_state (NMDevice *device, gboolean timeout)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ const char *iface = nm_device_get_iface (device);
+ gboolean carrier;
+
+ g_return_if_fail (nm_device_get_state (device) == NM_DEVICE_STATE_CONFIG);
+
+
+ carrier = nm_platform_link_is_connected (nm_device_get_ifindex (device));
+ nm_log_dbg (LOGD_DCB, "(%s): dcb_state() wait %d carrier %d timeout %d", iface, priv->dcb_wait, carrier, timeout);
+
+ switch (priv->dcb_wait) {
+ case DCB_WAIT_CARRIER_PREENABLE_UP:
+ if (timeout || carrier) {
+ nm_log_dbg (LOGD_DCB, "(%s): dcb_state() enabling DCB", iface);
+ dcb_timeout_cleanup (device);
+ if (!dcb_enable (device)) {
+ dcb_carrier_cleanup (device);
+ nm_device_state_changed (device,
+ NM_ACT_STAGE_RETURN_FAILURE,
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED);
+ }
+ }
+ break;
+ case DCB_WAIT_CARRIER_PRECONFIG_DOWN:
+ dcb_timeout_cleanup (device);
+ priv->dcb_wait = DCB_WAIT_CARRIER_PRECONFIG_UP;
+
+ if (!carrier) {
+ /* Wait for the carrier to come back up */
+ nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (preconfig up)", iface);
+ priv->dcb_timeout_id = g_timeout_add_seconds (5, dcb_carrier_timeout, device);
+ break;
+ }
+ nm_log_dbg (LOGD_DCB, "(%s): dcb_state() preconfig down falling through", iface);
+ /* carrier never went down? fall through */
+ case DCB_WAIT_CARRIER_PRECONFIG_UP:
+ if (timeout || carrier) {
+ nm_log_dbg (LOGD_DCB, "(%s): dcb_state() preconfig up configuring DCB", iface);
+ dcb_timeout_cleanup (device);
+ if (!dcb_configure (device)) {
+ dcb_carrier_cleanup (device);
+ nm_device_state_changed (device,
+ NM_ACT_STAGE_RETURN_FAILURE,
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED);
+ }
+ }
+ break;
+ case DCB_WAIT_CARRIER_POSTCONFIG_DOWN:
+ dcb_timeout_cleanup (device);
+ priv->dcb_wait = DCB_WAIT_CARRIER_POSTCONFIG_UP;
+
+ if (!carrier) {
+ /* Wait for the carrier to come back up */
+ nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (postconfig up)", iface);
+ priv->dcb_timeout_id = g_timeout_add_seconds (5, dcb_carrier_timeout, device);
+ break;
+ }
+ nm_log_dbg (LOGD_DCB, "(%s): dcb_state() postconfig down falling through", iface);
+ /* carrier never went down? fall through */
+ case DCB_WAIT_CARRIER_POSTCONFIG_UP:
+ if (timeout || carrier) {
+ nm_log_dbg (LOGD_DCB, "(%s): dcb_state() postconfig up starting IP", iface);
+ dcb_timeout_cleanup (device);
+ dcb_carrier_cleanup (device);
+ priv->dcb_wait = DCB_WAIT_UNKNOWN;
+ nm_device_activate_schedule_stage3_ip_config_start (device);
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+dcb_carrier_changed (NMDevice *device, GParamSpec *pspec, gpointer unused)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+
+ g_return_if_fail (nm_device_get_state (device) == NM_DEVICE_STATE_CONFIG);
+
+ if (priv->dcb_timeout_id) {
+ nm_log_dbg (LOGD_DCB, "(%s): carrier_changed() calling dcb_state()", nm_device_get_iface (device));
+ dcb_state (device, FALSE);
+ }
+}
+
+/****************************************************************/
+
static NMActStageReturn
act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
NMSettingConnection *s_con;
const char *connection_type;
NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
+ NMSettingDcb *s_dcb;
g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
s_con = NM_SETTING_CONNECTION (device_get_setting (device, NM_TYPE_SETTING_CONNECTION));
g_assert (s_con);
+ dcb_timeout_cleanup (device);
+ dcb_carrier_cleanup (device);
+
/* 802.1x has to run before any IP configuration since the 802.1x auth
* process opens the port up for normal traffic.
*/
@@ -1209,8 +1329,36 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
NMSetting8021x *security;
security = (NMSetting8021x *) device_get_setting (device, NM_TYPE_SETTING_802_1X);
- if (security)
- ret = nm_8021x_stage2_config (NM_DEVICE_ETHERNET (device), reason);
+ if (security) {
+ /* FIXME: for now 802.1x is mutually exclusive with DCB */
+ return nm_8021x_stage2_config (NM_DEVICE_ETHERNET (device), reason);
+ }
+ }
+
+ /* DCB and FCoE setup */
+ s_dcb = (NMSettingDcb *) device_get_setting (device, NM_TYPE_SETTING_DCB);
+ if (s_dcb) {
+ /* lldpad really really wants the carrier to be up */
+ if (nm_platform_link_is_connected (nm_device_get_ifindex (device))) {
+ if (!dcb_enable (device)) {
+ *reason = NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+ } else {
+ nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (preenable up)",
+ nm_device_get_iface (device));
+ priv->dcb_wait = DCB_WAIT_CARRIER_PREENABLE_UP;
+ priv->dcb_timeout_id = g_timeout_add_seconds (4, dcb_carrier_timeout, device);
+ }
+
+ /* Watch carrier independently of NMDeviceClass::carrier_changed so
+ * we get instant notifications of disconnection that aren't deferred.
+ */
+ priv->dcb_carrier_id = g_signal_connect (device,
+ "notify::" NM_DEVICE_CARRIER,
+ G_CALLBACK (dcb_carrier_changed),
+ NULL);
+ ret = NM_ACT_STAGE_RETURN_POSTPONE;
}
return ret;
@@ -1263,10 +1411,17 @@ deactivate (NMDevice *device)
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
/* Clear wired secrets tries when deactivating */
clear_secrets_tries (device);
+ if (priv->pppoe_wait_id) {
+ g_source_remove (priv->pppoe_wait_id);
+ priv->pppoe_wait_id = 0;
+ }
+
if (priv->pending_ip4_config) {
g_object_unref (priv->pending_ip4_config);
priv->pending_ip4_config = NULL;
@@ -1279,16 +1434,27 @@ deactivate (NMDevice *device)
supplicant_interface_release (self);
- /* Reset MAC address back to initial address */
- _set_hw_addr (self, priv->initial_hw_addr, "reset");
-}
+ priv->dcb_wait = DCB_WAIT_UNKNOWN;
+ dcb_timeout_cleanup (device);
+ dcb_carrier_cleanup (device);
-static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
-{
- return match_ethernet_connection (device, connection, TRUE, error);
+ /* Tear down DCB/FCoE if it was enabled */
+ s_dcb = (NMSettingDcb *) device_get_setting (device, NM_TYPE_SETTING_DCB);
+ if (s_dcb) {
+ if (!nm_dcb_cleanup (nm_device_get_iface (device), &error)) {
+ nm_log_warn (LOGD_DEVICE | LOGD_HW,
+ "(%s) failed to disable DCB/FCoE: %s",
+ nm_device_get_iface (device), error->message);
+ g_clear_error (&error);
+ }
+ }
+
+ /* Set last PPPoE connection time */
+ if (device_get_setting (device, NM_TYPE_SETTING_PPPOE))
+ NM_DEVICE_ETHERNET_GET_PRIVATE (device)->last_pppoe_time = nm_utils_get_monotonic_timestamp_s ();
+
+ /* Reset MAC address back to initial address */
+ nm_device_set_hw_addr (device, priv->initial_hw_addr, "reset", LOGD_ETHER);
}
static gboolean
@@ -1357,81 +1523,127 @@ static gboolean
spec_match_list (NMDevice *device, const GSList *specs)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
- char *hwaddr;
- gboolean matched;
-
- hwaddr = nm_utils_hwaddr_ntoa (&priv->perm_hw_addr, ARPHRD_ETHER);
- matched = nm_match_spec_hwaddr (specs, hwaddr);
- g_free (hwaddr);
- if (!matched && priv->subchannels)
- matched = nm_match_spec_s390_subchannels (specs, priv->subchannels);
+ if (priv->subchannels && nm_match_spec_s390_subchannels (specs, priv->subchannels))
+ return TRUE;
- return matched;
+ return NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->spec_match_list (device, specs);
}
-static NMConnection *
-connection_match_config (NMDevice *self, const GSList *connections)
+static void
+update_connection (NMDevice *device, NMConnection *connection)
{
- const GSList *iter;
- GSList *ether_matches;
- NMConnection *match;
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ NMSettingWired *s_wired = nm_connection_get_setting_wired (connection);
+ guint maclen;
+ const guint8 *mac = nm_device_get_hw_address (device, &maclen);
+ static const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
+ const char *mac_prop = NM_SETTING_WIRED_MAC_ADDRESS;
+ GByteArray *array;
+ GHashTableIter iter;
+ gpointer key, value;
+
+ if (!s_wired) {
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_wired);
+ }
- /* First narrow @connections down to those that match in their
- * NMSettingWired configuration.
+ /* If the device reports a permanent address, use that for the MAC address
+ * and the current MAC, if different, is the cloned MAC.
*/
- ether_matches = NULL;
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
+ if (memcmp (priv->perm_hw_addr, null_mac, ETH_ALEN)) {
+ array = g_byte_array_sized_new (ETH_ALEN);
+ g_byte_array_append (array, priv->perm_hw_addr, ETH_ALEN);
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, array, NULL);
+ g_byte_array_unref (array);
+
+ mac_prop = NULL;
+ if (mac && memcmp (priv->perm_hw_addr, mac, ETH_ALEN))
+ mac_prop = NM_SETTING_WIRED_CLONED_MAC_ADDRESS;
+ }
- /* Can't assume 802.1x or PPPoE connections; they have too much state
- * that's impossible to get on-the-fly from PPPoE or the supplicant.
- */
- if ( nm_connection_get_setting_802_1x (candidate)
- || nm_connection_get_setting_pppoe (candidate))
- continue;
+ if (mac_prop && mac && maclen == ETH_ALEN) {
+ array = g_byte_array_sized_new (ETH_ALEN);
+ g_byte_array_append (array, (guint8 *) mac, maclen);
+ g_object_set (s_wired, mac_prop, array, NULL);
+ g_byte_array_unref (array);
+ }
- if (!match_ethernet_connection (self, candidate, FALSE, NULL))
- continue;
+ /* We don't set the MTU as we don't know whether it was set explicitly */
- ether_matches = g_slist_prepend (ether_matches, candidate);
+ /* s390 */
+ if (priv->subchannels) {
+ GPtrArray *subchan_arr = g_ptr_array_sized_new (3);
+ if (priv->subchan1)
+ g_ptr_array_add (subchan_arr, priv->subchan1);
+ if (priv->subchan2)
+ g_ptr_array_add (subchan_arr, priv->subchan2);
+ if (priv->subchan3)
+ g_ptr_array_add (subchan_arr, priv->subchan3);
+ g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, subchan_arr, NULL);
+ g_ptr_array_free (subchan_arr, TRUE);
+ }
+ if (priv->s390_nettype)
+ g_object_set (s_wired, NM_SETTING_WIRED_S390_NETTYPE, priv->s390_nettype, NULL);
+ g_hash_table_iter_init (&iter, priv->s390_options);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ nm_setting_wired_add_s390_option (s_wired, (const char *) key, (const char *) value);
}
- /* Now pass those to the super method, which will check IP config */
- ether_matches = g_slist_reverse (ether_matches);
- match = NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->connection_match_config (self, ether_matches);
- g_slist_free (ether_matches);
-
- return match;
}
-static gboolean
-hwaddr_matches (NMDevice *device,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr)
+static void
+get_link_speed (NMDevice *device)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
- NMSettingWired *s_wired;
- const GByteArray *mac = NULL;
+ struct ifreq ifr;
+ struct ethtool_cmd edata = {
+ .cmd = ETHTOOL_GSET,
+ };
+ guint32 speed;
+ int fd;
- s_wired = nm_connection_get_setting_wired (connection);
- if (s_wired)
- mac = nm_setting_wired_get_mac_address (s_wired);
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ nm_log_warn (LOGD_HW | LOGD_ETHER, "couldn't open ethtool control socket.");
+ return;
+ }
- if (mac) {
- g_return_val_if_fail (mac->len == ETH_ALEN, FALSE);
- if (other_hwaddr) {
- g_return_val_if_fail (other_hwaddr_len == ETH_ALEN, FALSE);
- if (memcmp (mac->data, other_hwaddr, mac->len) == 0)
- return TRUE;
- } else if (memcmp (mac->data, priv->hw_addr, mac->len) == 0)
- return TRUE;
- } else if (fail_if_no_hwaddr == FALSE)
- return TRUE;
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strncpy (ifr.ifr_name, nm_device_get_iface (device), IFNAMSIZ);
+ ifr.ifr_data = (char *) &edata;
- return FALSE;
+ if (ioctl (fd, SIOCETHTOOL, &ifr) < 0) {
+ close (fd);
+ return;
+ }
+ close (fd);
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+ speed = edata.speed;
+#else
+ speed = ethtool_cmd_speed (&edata);
+#endif
+ if (speed == G_MAXUINT16 || speed == G_MAXUINT32)
+ speed = 0;
+
+ if (priv->speed == speed)
+ return;
+
+ priv->speed = speed;
+ g_object_notify (G_OBJECT (device), "speed");
+
+ nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): speed is now %d Mb/s",
+ nm_device_get_iface (device), speed);
+}
+
+static void
+carrier_changed (NMDevice *device, gboolean carrier)
+{
+ if (carrier)
+ get_link_speed (device);
+
+ NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->carrier_changed (device, carrier);
}
static void
@@ -1440,12 +1652,32 @@ dispose (GObject *object)
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (object);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ if (priv->pppoe_wait_id) {
+ g_source_remove (priv->pppoe_wait_id);
+ priv->pppoe_wait_id = 0;
+ }
+
+ dcb_timeout_cleanup (NM_DEVICE (self));
+ dcb_carrier_cleanup (NM_DEVICE (self));
+
+ G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (object);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+
+ g_clear_object (&priv->supplicant.mgr);
g_free (priv->subchan1);
g_free (priv->subchan2);
g_free (priv->subchan3);
g_free (priv->subchannels);
+ g_free (priv->s390_nettype);
+ g_hash_table_destroy (priv->s390_options);
- G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object);
+ G_OBJECT_CLASS (nm_device_ethernet_parent_class)->finalize (object);
}
static void
@@ -1456,17 +1688,11 @@ get_property (GObject *object, guint prop_id,
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
switch (prop_id) {
- case PROP_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (priv->hw_addr, ARPHRD_ETHER));
- break;
case PROP_PERM_HW_ADDRESS:
g_value_take_string (value, nm_utils_hwaddr_ntoa (&priv->perm_hw_addr, ARPHRD_ETHER));
break;
case PROP_SPEED:
- g_value_set_uint (value, nm_device_wired_get_speed (NM_DEVICE_WIRED (self)));
- break;
- case PROP_CARRIER:
- g_value_set_boolean (value, nm_device_wired_get_carrier (NM_DEVICE_WIRED (self)));
+ g_value_set_uint (value, priv->speed);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1493,21 +1719,18 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
g_type_class_add_private (object_class, sizeof (NMDeviceEthernetPrivate));
+ parent_class->connection_type = NM_SETTING_WIRED_SETTING_NAME;
+
/* virtual methods */
object_class->constructor = constructor;
object_class->dispose = dispose;
+ object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->is_up = is_up;
- parent_class->bring_up = bring_up;
- parent_class->take_down = take_down;
- parent_class->update_hw_address = update_hw_address;
- parent_class->get_hw_address = get_hw_address;
parent_class->update_permanent_hw_address = update_permanent_hw_address;
parent_class->update_initial_hw_address = update_initial_hw_address;
- parent_class->get_best_auto_connection = get_best_auto_connection;
parent_class->check_connection_compatible = check_connection_compatible;
parent_class->complete_connection = complete_connection;
@@ -1517,21 +1740,13 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
parent_class->ip4_config_pre_commit = ip4_config_pre_commit;
parent_class->deactivate = deactivate;
parent_class->spec_match_list = spec_match_list;
- parent_class->connection_match_config = connection_match_config;
- parent_class->hwaddr_matches = hwaddr_matches;
+ parent_class->update_connection = update_connection;
+ parent_class->carrier_changed = carrier_changed;
parent_class->state_changed = device_state_changed;
/* properties */
g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_ETHERNET_HW_ADDRESS,
- "Active MAC Address",
- "Currently set hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property
(object_class, PROP_PERM_HW_ADDRESS,
g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS,
"Permanent MAC Address",
@@ -1547,129 +1762,9 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
0, G_MAXUINT32, 0,
G_PARAM_READABLE));
- g_object_class_install_property
- (object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_ETHERNET_CARRIER,
- "Carrier",
- "Carrier",
- FALSE,
- G_PARAM_READABLE));
-
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceEthernetClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_ethernet_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_ethernet_object_info);
dbus_g_error_domain_register (NM_ETHERNET_ERROR, NULL, NM_TYPE_ETHERNET_ERROR);
}
-
-
-/**************************************/
-/* Ethtool capability detection */
-/**************************************/
-
-static gboolean
-supports_ethtool_carrier_detect (NMDeviceEthernet *self)
-{
- int fd;
- struct ifreq ifr;
- gboolean supports_ethtool = FALSE;
- struct ethtool_cmd edata;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- nm_log_err (LOGD_HW, "couldn't open control socket.");
- return FALSE;
- }
-
- memset (&ifr, 0, sizeof (struct ifreq));
- strncpy (ifr.ifr_name, nm_device_get_iface (NM_DEVICE (self)), IFNAMSIZ);
-
- edata.cmd = ETHTOOL_GLINK;
- ifr.ifr_data = (char *) &edata;
-
- errno = 0;
- if (ioctl (fd, SIOCETHTOOL, &ifr) < 0) {
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "SIOCETHTOOL failed: %d", errno);
- goto out;
- }
-
- supports_ethtool = TRUE;
-
-out:
- close (fd);
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "ethtool %s supported",
- supports_ethtool ? "is" : "not");
- return supports_ethtool;
-}
-
-
-/**************************************/
-/* MII capability detection */
-/**************************************/
-#define _LINUX_IF_H
-#include <linux/mii.h>
-#undef _LINUX_IF_H
-
-static int
-mdio_read (NMDeviceEthernet *self, int fd, struct ifreq *ifr, int location)
-{
- struct mii_ioctl_data *mii;
- int val = -1;
-
- g_return_val_if_fail (fd >= 0, -1);
- g_return_val_if_fail (ifr != NULL, -1);
-
- mii = (struct mii_ioctl_data *) &ifr->ifr_ifru;
- mii->reg_num = location;
-
- errno = 0;
- if (ioctl (fd, SIOCGMIIREG, ifr) == 0) {
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "SIOCGMIIREG result 0x%X", mii->val_out);
- val = mii->val_out;
- } else {
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "SIOCGMIIREG failed: %d", errno);
- }
-
- return val;
-}
-
-static gboolean
-supports_mii_carrier_detect (NMDeviceEthernet *self)
-{
- int fd, bmsr;
- struct ifreq ifr;
- gboolean supports_mii = FALSE;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- nm_log_err (LOGD_HW, "couldn't open control socket.");
- return FALSE;
- }
-
- memset (&ifr, 0, sizeof (struct ifreq));
- strncpy (ifr.ifr_name, nm_device_get_iface (NM_DEVICE (self)), IFNAMSIZ);
-
- errno = 0;
- if (ioctl (fd, SIOCGMIIPHY, &ifr) < 0) {
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "SIOCGMIIPHY failed: %d", errno);
- goto out;
- }
-
- /* If we can read the BMSR register, we assume that the card supports MII link detection */
- bmsr = mdio_read (self, fd, &ifr, MII_BMSR);
- supports_mii = (bmsr != -1) ? TRUE : FALSE;
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "MII %s supported",
- supports_mii ? "is" : "not");
-
-out:
- close (fd);
- return supports_mii;
-}
diff --git a/src/nm-device-ethernet.h b/src/devices/nm-device-ethernet.h
index deb0fecad..bcaf270a0 100644
--- a/src/nm-device-ethernet.h
+++ b/src/devices/nm-device-ethernet.h
@@ -24,7 +24,7 @@
#include <glib-object.h>
-#include "nm-device-wired.h"
+#include "nm-device.h"
G_BEGIN_DECLS
@@ -42,29 +42,23 @@ typedef enum
NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMEthernetError;
-#define NM_DEVICE_ETHERNET_HW_ADDRESS "hw-address"
#define NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_ETHERNET_SPEED "speed"
-#define NM_DEVICE_ETHERNET_CARRIER "carrier"
typedef struct {
- NMDeviceWired parent;
+ NMDevice parent;
} NMDeviceEthernet;
typedef struct {
- NMDeviceWiredClass parent;
+ NMDeviceClass parent;
- /* Signals */
- void (*properties_changed) (NMDeviceEthernet *device, GHashTable *properties);
} NMDeviceEthernetClass;
GType nm_device_ethernet_get_type (void);
-NMDevice *nm_device_ethernet_new (const char *udi,
- const char *iface,
- const char *driver);
+NMDevice *nm_device_ethernet_new (NMPlatformLink *platform_device);
G_END_DECLS
diff --git a/src/devices/nm-device-factory.c b/src/devices/nm-device-factory.c
new file mode 100644
index 000000000..fc4d1c248
--- /dev/null
+++ b/src/devices/nm-device-factory.c
@@ -0,0 +1,106 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ */
+
+#include "nm-device-factory.h"
+
+enum {
+ DEVICE_ADDED,
+ COMPONENT_ADDED,
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+gboolean
+nm_device_factory_emit_component_added (NMDeviceFactory *factory, GObject *component)
+{
+ gboolean consumed = FALSE;
+
+ g_signal_emit (factory, signals[COMPONENT_ADDED], 0, component, &consumed);
+ return consumed;
+}
+
+static void
+interface_init (gpointer g_iface)
+{
+ GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
+ static gboolean initialized = FALSE;
+
+ if (G_LIKELY (initialized))
+ return;
+
+ /* Signals */
+ signals[DEVICE_ADDED] = g_signal_new (NM_DEVICE_FACTORY_DEVICE_ADDED,
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceFactory, device_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, NM_TYPE_DEVICE);
+
+ signals[COMPONENT_ADDED] = g_signal_new (NM_DEVICE_FACTORY_COMPONENT_ADDED,
+ iface_type,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMDeviceFactory, component_added),
+ g_signal_accumulator_true_handled, NULL, NULL,
+ G_TYPE_BOOLEAN, 1, G_TYPE_OBJECT);
+
+ initialized = TRUE;
+}
+
+GType
+nm_device_factory_get_type (void)
+{
+ static GType device_factory_type = 0;
+
+ if (!device_factory_type) {
+ const GTypeInfo device_factory_info = {
+ sizeof (NMDeviceFactory), /* class_size */
+ interface_init, /* base_init */
+ NULL, /* base_finalize */
+ NULL,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ 0,
+ 0, /* n_preallocs */
+ NULL
+ };
+
+ device_factory_type = g_type_register_static (G_TYPE_INTERFACE,
+ "NMDeviceFactory",
+ &device_factory_info,
+ 0);
+ g_type_interface_add_prerequisite (device_factory_type, G_TYPE_OBJECT);
+ }
+
+ return device_factory_type;
+}
+
+NMDevice *
+nm_device_factory_new_link (NMDeviceFactory *factory,
+ NMPlatformLink *plink,
+ GError **error)
+{
+ g_return_val_if_fail (factory != NULL, NULL);
+ g_return_val_if_fail (plink != NULL, NULL);
+
+ if (NM_DEVICE_FACTORY_GET_INTERFACE (factory)->new_link)
+ return NM_DEVICE_FACTORY_GET_INTERFACE (factory)->new_link (factory, plink, error);
+ return NULL;
+}
+
diff --git a/src/devices/nm-device-factory.h b/src/devices/nm-device-factory.h
new file mode 100644
index 000000000..f0e3dc197
--- /dev/null
+++ b/src/devices/nm-device-factory.h
@@ -0,0 +1,136 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_FACTORY_H
+#define NM_DEVICE_FACTORY_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "NetworkManager.h"
+#include "nm-platform.h"
+#include "nm-device.h"
+
+/* WARNING: this file is private API between NetworkManager and its internal
+ * device plugins. Its API can change at any time and is not guaranteed to be
+ * stable. NM and device plugins are distributed together and this API is
+ * not meant to enable third-party plugins.
+ */
+
+typedef struct _NMDeviceFactory NMDeviceFactory;
+
+/**
+ * nm_device_factory_create:
+ * @error: an error if creation of the factory failed, or %NULL
+ *
+ * Creates a #GObject that implements the #NMDeviceFactory interface. This
+ * function must not emit any signals or perform any actions that would cause
+ * devices or components to be created immediately. Instead these should be
+ * deferred to an idle handler.
+ *
+ * Returns: the #GObject implementing #NMDeviceFactory or %NULL
+ */
+NMDeviceFactory *nm_device_factory_create (GError **error);
+
+/* Should match nm_device_factory_create() */
+typedef NMDeviceFactory * (*NMDeviceFactoryCreateFunc) (GError **error);
+
+/**
+ * nm_device_factory_get_device_type:
+ *
+ * Returns: the #NMDeviceType that this plugin creates
+ */
+NMDeviceType nm_device_factory_get_device_type (void);
+
+/* Should match nm_device_factory_get_device_type() */
+typedef NMDeviceType (*NMDeviceFactoryDeviceTypeFunc) (void);
+
+/********************************************************************/
+
+#define NM_TYPE_DEVICE_FACTORY (nm_device_factory_get_type ())
+#define NM_DEVICE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_FACTORY, NMDeviceFactory))
+#define NM_IS_DEVICE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_FACTORY))
+#define NM_DEVICE_FACTORY_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_DEVICE_FACTORY, NMDeviceFactory))
+
+/* signals */
+#define NM_DEVICE_FACTORY_COMPONENT_ADDED "component-added"
+#define NM_DEVICE_FACTORY_DEVICE_ADDED "device-added"
+
+struct _NMDeviceFactory {
+ GTypeInterface g_iface;
+
+ /**
+ * new_link:
+ * @factory: the #NMDeviceFactory
+ * @link: the new link
+ * @error: error if the link could be claimed but an error occurred
+ *
+ * The NetworkManager core was notified of a new link which the plugin
+ * may want to claim and create a #NMDevice subclass for. If the link
+ * represents a device the factory is capable of claiming, but the device
+ * could not be created, %NULL should be returned and @error should be set.
+ * %NULL should always be returned and @error should never be set if the
+ * factory cannot create devices for the type which @link represents.
+ *
+ * Returns: the #NMDevice if the link was claimed and created, %NULL if not
+ */
+ NMDevice * (*new_link) (NMDeviceFactory *factory,
+ NMPlatformLink *plink,
+ GError **error);
+
+ /* Signals */
+
+ /**
+ * device_added:
+ * @factory: the #NMDeviceFactory
+ * @device: the new #NMDevice subclass
+ *
+ * The factory emits this signal if it finds a new device by itself.
+ */
+ void (*device_added) (NMDeviceFactory *factory, NMDevice *device);
+
+ /**
+ * component_added:
+ * @factory: the #NMDeviceFactory
+ * @component: a new component which existing devices may wish to claim
+ *
+ * The factory emits this signal when it finds a new component. For example,
+ * the WWAN factory may indicate that a new modem is available, which an
+ * existing Bluetooth device may wish to claim. If no device claims the
+ * component, the plugin is allowed to create a new #NMDevice instance for
+ * that component and emit the "device-added" signal.
+ *
+ * Returns: %TRUE if the component was claimed by a device, %FALSE if not
+ */
+ gboolean (*component_added) (NMDeviceFactory *factory, GObject *component);
+};
+
+GType nm_device_factory_get_type (void);
+
+NMDevice * nm_device_factory_new_link (NMDeviceFactory *factory,
+ NMPlatformLink *plink,
+ GError **error);
+
+/* For use by implementations */
+gboolean nm_device_factory_emit_component_added (NMDeviceFactory *factory,
+ GObject *component);
+
+#endif /* NM_DEVICE_FACTORY_H */
+
diff --git a/src/devices/nm-device-generic.c b/src/devices/nm-device-generic.c
new file mode 100644
index 000000000..5261c1333
--- /dev/null
+++ b/src/devices/nm-device-generic.c
@@ -0,0 +1,217 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-device-generic.h"
+#include "nm-device-private.h"
+#include "nm-enum-types.h"
+#include "nm-platform.h"
+#include "nm-utils.h"
+#include "nm-glib-compat.h"
+#include "nm-dbus-manager.h"
+
+#include "nm-device-generic-glue.h"
+
+G_DEFINE_TYPE (NMDeviceGeneric, nm_device_generic, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericPrivate))
+
+typedef struct {
+ char *type_description;
+} NMDeviceGenericPrivate;
+
+enum {
+ PROP_0,
+ PROP_TYPE_DESCRIPTION,
+
+ LAST_PROP
+};
+
+#define NM_DEVICE_GENERIC_ERROR (nm_device_generic_error_quark ())
+
+static GQuark
+nm_device_generic_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-device-generic-error");
+ return quark;
+}
+
+/**************************************************************/
+
+static guint32
+get_generic_capabilities (NMDevice *dev)
+{
+ if (nm_platform_link_supports_carrier_detect (nm_device_get_ifindex (dev)))
+ return NM_DEVICE_CAP_CARRIER_DETECT;
+ else
+ return NM_DEVICE_CAP_NONE;
+}
+
+static gboolean
+check_connection_compatible (NMDevice *device, NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+
+ if (!NM_DEVICE_CLASS (nm_device_generic_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_GENERIC_SETTING_NAME))
+ return FALSE;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ if (!nm_setting_connection_get_interface_name (s_con))
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+update_connection (NMDevice *device, NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+
+ if (!nm_connection_get_setting_generic (connection))
+ nm_connection_add_setting (connection, nm_setting_generic_new ());
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_INTERFACE_NAME, nm_device_get_iface (device),
+ NULL);
+}
+
+/**************************************************************/
+
+NMDevice *
+nm_device_generic_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_GENERIC,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_TYPE_DESC, "Generic",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NULL);
+}
+
+static void
+nm_device_generic_init (NMDeviceGeneric *self)
+{
+ nm_device_set_initial_unmanaged_flag (NM_DEVICE (self), NM_UNMANAGED_DEFAULT, TRUE);
+}
+
+static void
+constructed (GObject *object)
+{
+ NMDeviceGeneric *self = NM_DEVICE_GENERIC (object);
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (self);
+
+ if (!priv->type_description) {
+ int ifindex = nm_device_get_ip_ifindex (NM_DEVICE (self));
+
+ if (ifindex != 0)
+ priv->type_description = g_strdup (nm_platform_link_get_type_name (ifindex));
+ }
+
+ G_OBJECT_CLASS (nm_device_generic_parent_class)->constructed (object);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceGeneric *self = NM_DEVICE_GENERIC (object);
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (self);
+
+ g_clear_pointer (&priv->type_description, g_free);
+
+ G_OBJECT_CLASS (nm_device_generic_parent_class)->dispose (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDeviceGeneric *self = NM_DEVICE_GENERIC (object);
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (self);
+
+ switch (prop_id) {
+ case PROP_TYPE_DESCRIPTION:
+ g_value_set_string (value, priv->type_description);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMDeviceGeneric *self = NM_DEVICE_GENERIC (object);
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (self);
+
+ switch (prop_id) {
+ case PROP_TYPE_DESCRIPTION:
+ priv->type_description = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_generic_class_init (NMDeviceGenericClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceGenericPrivate));
+
+ parent_class->connection_type = NM_SETTING_GENERIC_SETTING_NAME;
+
+ object_class->constructed = constructed;
+ object_class->dispose = dispose;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
+ parent_class->get_generic_capabilities = get_generic_capabilities;
+ parent_class->check_connection_compatible = check_connection_compatible;
+ parent_class->update_connection = update_connection;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_TYPE_DESCRIPTION,
+ g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION,
+ "Type Description",
+ "Type description",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_generic_object_info);
+
+ dbus_g_error_domain_register (NM_DEVICE_GENERIC_ERROR, NULL, NM_TYPE_DEVICE_GENERIC_ERROR);
+}
diff --git a/src/devices/nm-device-generic.h b/src/devices/nm-device-generic.h
new file mode 100644
index 000000000..e7b7090b1
--- /dev/null
+++ b/src/devices/nm-device-generic.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_GENERIC_H
+#define NM_DEVICE_GENERIC_H
+
+#include <glib-object.h>
+
+#include "nm-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_GENERIC (nm_device_generic_get_type ())
+#define NM_DEVICE_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_GENERIC, NMDeviceGeneric))
+#define NM_DEVICE_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericClass))
+#define NM_IS_DEVICE_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_GENERIC))
+#define NM_IS_DEVICE_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_GENERIC))
+#define NM_DEVICE_GENERIC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericClass))
+
+typedef enum
+{
+ NM_DEVICE_GENERIC_ERROR_CONNECTION_NOT_GENERIC = 0, /*< nick=ConnectionNotGeneric >*/
+ NM_DEVICE_GENERIC_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
+ NM_DEVICE_GENERIC_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
+} NMDeviceGenericError;
+
+#define NM_DEVICE_GENERIC_TYPE_DESCRIPTION "type-description"
+
+typedef struct {
+ NMDevice parent;
+} NMDeviceGeneric;
+
+typedef struct {
+ NMDeviceClass parent;
+
+} NMDeviceGenericClass;
+
+GType nm_device_generic_get_type (void);
+
+NMDevice *nm_device_generic_new (NMPlatformLink *platform_device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_GENERIC_H */
diff --git a/src/devices/nm-device-gre.c b/src/devices/nm-device-gre.c
new file mode 100644
index 000000000..0412e9931
--- /dev/null
+++ b/src/devices/nm-device-gre.c
@@ -0,0 +1,278 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-device-gre.h"
+#include "nm-device-private.h"
+#include "nm-dbus-manager.h"
+#include "nm-logging.h"
+#include "nm-manager.h"
+#include "nm-platform.h"
+
+#include "nm-device-gre-glue.h"
+
+G_DEFINE_TYPE (NMDeviceGre, nm_device_gre, NM_TYPE_DEVICE_GENERIC)
+
+#define NM_DEVICE_GRE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_GRE, NMDeviceGrePrivate))
+
+typedef struct {
+ NMPlatformGreProperties props;
+} NMDeviceGrePrivate;
+
+enum {
+ PROP_0,
+ PROP_PARENT,
+ PROP_INPUT_FLAGS,
+ PROP_OUTPUT_FLAGS,
+ PROP_INPUT_KEY,
+ PROP_OUTPUT_KEY,
+ PROP_LOCAL,
+ PROP_REMOTE,
+ PROP_TTL,
+ PROP_TOS,
+ PROP_PATH_MTU_DISCOVERY,
+
+ LAST_PROP
+};
+
+/**************************************************************/
+
+static void
+update_properties (NMDevice *device)
+{
+ NMDeviceGrePrivate *priv = NM_DEVICE_GRE_GET_PRIVATE (device);
+ GObject *object = G_OBJECT (device);
+ NMPlatformGreProperties props;
+
+ if (!nm_platform_gre_get_properties (nm_device_get_ifindex (device), &props)) {
+ nm_log_warn (LOGD_HW, "(%s): could not read gre properties",
+ nm_device_get_iface (device));
+ return;
+ }
+
+ g_object_freeze_notify (object);
+
+ if (priv->props.parent_ifindex != props.parent_ifindex)
+ g_object_notify (object, NM_DEVICE_GRE_PARENT);
+ if (priv->props.input_flags != props.input_flags)
+ g_object_notify (object, NM_DEVICE_GRE_INPUT_FLAGS);
+ if (priv->props.output_flags != props.output_flags)
+ g_object_notify (object, NM_DEVICE_GRE_OUTPUT_FLAGS);
+ if (priv->props.input_key != props.input_key)
+ g_object_notify (object, NM_DEVICE_GRE_INPUT_KEY);
+ if (priv->props.output_key != props.output_key)
+ g_object_notify (object, NM_DEVICE_GRE_OUTPUT_KEY);
+ if (priv->props.local != props.local)
+ g_object_notify (object, NM_DEVICE_GRE_LOCAL);
+ if (priv->props.remote != props.remote)
+ g_object_notify (object, NM_DEVICE_GRE_REMOTE);
+ if (priv->props.ttl != props.ttl)
+ g_object_notify (object, NM_DEVICE_GRE_TTL);
+ if (priv->props.tos != props.tos)
+ g_object_notify (object, NM_DEVICE_GRE_TOS);
+ if (priv->props.path_mtu_discovery != props.path_mtu_discovery)
+ g_object_notify (object, NM_DEVICE_GRE_PATH_MTU_DISCOVERY);
+
+ memcpy (&priv->props, &props, sizeof (NMPlatformGreProperties));
+
+ g_object_thaw_notify (object);
+}
+
+static void
+link_changed (NMDevice *device, NMPlatformLink *info)
+{
+ NM_DEVICE_CLASS (nm_device_gre_parent_class)->link_changed (device, info);
+ update_properties (device);
+}
+
+/**************************************************************/
+
+NMDevice *
+nm_device_gre_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_GRE,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_TYPE_DESC, "Gre",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NULL);
+}
+
+static void
+nm_device_gre_init (NMDeviceGre *self)
+{
+}
+
+static void
+constructed (GObject *object)
+{
+ update_properties (NM_DEVICE (object));
+
+ G_OBJECT_CLASS (nm_device_gre_parent_class)->constructed (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDeviceGrePrivate *priv = NM_DEVICE_GRE_GET_PRIVATE (object);
+ char buf[INET_ADDRSTRLEN];
+ NMDevice *parent;
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ parent = nm_manager_get_device_by_ifindex (nm_manager_get (), priv->props.parent_ifindex);
+ g_value_set_boxed (value, parent ? nm_device_get_path (parent) : "/");
+ break;
+ case PROP_INPUT_FLAGS:
+ g_value_set_uint (value, priv->props.input_flags);
+ break;
+ case PROP_OUTPUT_FLAGS:
+ g_value_set_uint (value, priv->props.output_flags);
+ break;
+ case PROP_INPUT_KEY:
+ g_value_set_uint (value, priv->props.input_key);
+ break;
+ case PROP_OUTPUT_KEY:
+ g_value_set_uint (value, priv->props.output_key);
+ break;
+ case PROP_LOCAL:
+ g_value_set_string (value, inet_ntop (AF_INET, &priv->props.local, buf, sizeof (buf)));
+ break;
+ case PROP_REMOTE:
+ g_value_set_string (value, inet_ntop (AF_INET, &priv->props.remote, buf, sizeof (buf)));
+ break;
+ case PROP_TTL:
+ g_value_set_uchar (value, priv->props.ttl);
+ break;
+ case PROP_TOS:
+ g_value_set_uchar (value, priv->props.tos);
+ break;
+ case PROP_PATH_MTU_DISCOVERY:
+ g_value_set_boolean (value, priv->props.path_mtu_discovery);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_gre_class_init (NMDeviceGreClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceGrePrivate));
+
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+
+ device_class->link_changed = link_changed;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_boxed (NM_DEVICE_GRE_PARENT,
+ "Parent",
+ "Parent device",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_INPUT_FLAGS,
+ g_param_spec_uint (NM_DEVICE_GRE_INPUT_FLAGS,
+ "Input flags",
+ "Input flags",
+ 0, G_MAXUINT16, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_OUTPUT_FLAGS,
+ g_param_spec_uint (NM_DEVICE_GRE_OUTPUT_FLAGS,
+ "Output flags",
+ "Output flags",
+ 0, G_MAXUINT16, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_INPUT_KEY,
+ g_param_spec_uint (NM_DEVICE_GRE_INPUT_KEY,
+ "Input key",
+ "Input key",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_OUTPUT_KEY,
+ g_param_spec_uint (NM_DEVICE_GRE_OUTPUT_KEY,
+ "Output key",
+ "Output key",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_LOCAL,
+ g_param_spec_string (NM_DEVICE_GRE_LOCAL,
+ "Local",
+ "Local",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_REMOTE,
+ g_param_spec_string (NM_DEVICE_GRE_REMOTE,
+ "Remote",
+ "Remote",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_TTL,
+ g_param_spec_uchar (NM_DEVICE_GRE_TTL,
+ "TTL",
+ "TTL",
+ 0, 255, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_TOS,
+ g_param_spec_uchar (NM_DEVICE_GRE_TOS,
+ "ToS",
+ "ToS",
+ 0, 255, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_PATH_MTU_DISCOVERY,
+ g_param_spec_boolean (NM_DEVICE_GRE_PATH_MTU_DISCOVERY,
+ "Path MTU Discovery",
+ "Path MTU Discovery",
+ FALSE,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_gre_object_info);
+}
diff --git a/src/devices/nm-device-gre.h b/src/devices/nm-device-gre.h
new file mode 100644
index 000000000..610b38050
--- /dev/null
+++ b/src/devices/nm-device-gre.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_GRE_H
+#define NM_DEVICE_GRE_H
+
+#include <glib-object.h>
+
+#include "nm-device-generic.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_GRE (nm_device_gre_get_type ())
+#define NM_DEVICE_GRE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_GRE, NMDeviceGre))
+#define NM_DEVICE_GRE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_GRE, NMDeviceGreClass))
+#define NM_IS_DEVICE_GRE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_GRE))
+#define NM_IS_DEVICE_GRE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_GRE))
+#define NM_DEVICE_GRE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_GRE, NMDeviceGreClass))
+
+#define NM_DEVICE_GRE_PARENT "parent"
+#define NM_DEVICE_GRE_INPUT_FLAGS "input-flags"
+#define NM_DEVICE_GRE_OUTPUT_FLAGS "output-flags"
+#define NM_DEVICE_GRE_INPUT_KEY "input-key"
+#define NM_DEVICE_GRE_OUTPUT_KEY "output-key"
+#define NM_DEVICE_GRE_LOCAL "local"
+#define NM_DEVICE_GRE_REMOTE "remote"
+#define NM_DEVICE_GRE_TTL "ttl"
+#define NM_DEVICE_GRE_TOS "tos"
+#define NM_DEVICE_GRE_PATH_MTU_DISCOVERY "path-mtu-discovery"
+
+typedef struct {
+ NMDeviceGeneric parent;
+} NMDeviceGre;
+
+typedef struct {
+ NMDeviceGenericClass parent;
+
+} NMDeviceGreClass;
+
+GType nm_device_gre_get_type (void);
+
+NMDevice *nm_device_gre_new (NMPlatformLink *platform_device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_GRE_H */
diff --git a/src/nm-device-infiniband.c b/src/devices/nm-device-infiniband.c
index c7dcf19c8..8ec79157f 100644
--- a/src/nm-device-infiniband.c
+++ b/src/devices/nm-device-infiniband.c
@@ -28,37 +28,27 @@
#include "nm-device-infiniband.h"
#include "nm-logging.h"
-#include "nm-properties-changed-signal.h"
#include "nm-utils.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
#include "nm-enum-types.h"
+#include "nm-dbus-manager.h"
#include "nm-device-infiniband-glue.h"
-G_DEFINE_TYPE (NMDeviceInfiniband, nm_device_infiniband, NM_TYPE_DEVICE_WIRED)
+G_DEFINE_TYPE (NMDeviceInfiniband, nm_device_infiniband, NM_TYPE_DEVICE)
#define NM_DEVICE_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandPrivate))
#define NM_INFINIBAND_ERROR (nm_infiniband_error_quark ())
typedef struct {
- guint8 hw_addr[INFINIBAND_ALEN];
+ int dummy;
} NMDeviceInfinibandPrivate;
enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
PROP_0,
- PROP_HW_ADDRESS,
- PROP_CARRIER,
LAST_PROP
};
@@ -78,22 +68,19 @@ constructor (GType type,
GObjectConstructParam *construct_params)
{
GObject *object;
- NMDeviceInfinibandPrivate *priv;
NMDevice *self;
object = G_OBJECT_CLASS (nm_device_infiniband_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
+ n_construct_params,
+ construct_params);
if (!object)
return NULL;
self = NM_DEVICE (object);
- priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (self);
nm_log_dbg (LOGD_HW | LOGD_INFINIBAND, "(%s): kernel ifindex %d",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)));
-
+ nm_device_get_iface (self),
+ nm_device_get_ifindex (self));
return object;
}
@@ -103,86 +90,61 @@ nm_device_infiniband_init (NMDeviceInfiniband * self)
}
NMDevice *
-nm_device_infiniband_new (const char *udi,
- const char *iface,
- const char *driver)
+nm_device_infiniband_new (NMPlatformLink *platform_device)
{
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
- g_return_val_if_fail (driver != NULL, NULL);
+ g_return_val_if_fail (platform_device != NULL, NULL);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_INFINIBAND,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, driver,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
NM_DEVICE_TYPE_DESC, "InfiniBand",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_INFINIBAND,
NULL);
}
-static void
-update_hw_address (NMDevice *dev)
+NMDevice *
+nm_device_infiniband_new_partition (NMConnection *connection,
+ NMDevice *parent)
{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (dev);
- gsize addrlen;
- gboolean changed = FALSE;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- g_return_if_fail (addrlen == INFINIBAND_ALEN);
- if (changed)
- g_object_notify (G_OBJECT (dev), NM_DEVICE_INFINIBAND_HW_ADDRESS);
+ NMSettingInfiniband *s_infiniband;
+ int p_key, parent_ifindex;
+ const char *iface;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+ g_return_val_if_fail (NM_IS_DEVICE_INFINIBAND (parent), NULL);
+
+ iface = nm_connection_get_virtual_iface_name (connection);
+ g_return_val_if_fail (iface != NULL, NULL);
+
+ parent_ifindex = nm_device_get_ifindex (parent);
+ s_infiniband = nm_connection_get_setting_infiniband (connection);
+ p_key = nm_setting_infiniband_get_p_key (s_infiniband);
+
+ if ( !nm_platform_infiniband_partition_add (parent_ifindex, p_key)
+ && nm_platform_get_error () != NM_PLATFORM_ERROR_EXISTS) {
+ nm_log_warn (LOGD_DEVICE | LOGD_INFINIBAND, "(%s): failed to add InfiniBand P_Key interface for '%s': %s",
+ iface, nm_connection_get_id (connection),
+ nm_platform_get_error_msg ());
+ return NULL;
}
-}
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- *out_len = INFINIBAND_ALEN;
- return NM_DEVICE_INFINIBAND_GET_PRIVATE (device)->hw_addr;
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_INFINIBAND,
+ NM_DEVICE_IFACE, iface,
+ NM_DEVICE_DRIVER, nm_device_get_driver (parent),
+ NM_DEVICE_TYPE_DESC, "InfiniBand",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_INFINIBAND,
+ NULL);
}
static guint32
get_generic_capabilities (NMDevice *dev)
{
- return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_NM_SUPPORTED;
-}
-
-static NMConnection *
-get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
-{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (dev);
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- NMSettingInfiniband *s_infiniband;
-
- if (!nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME))
- continue;
-
- s_infiniband = nm_connection_get_setting_infiniband (connection);
- if (!s_infiniband)
- continue;
-
- if (s_infiniband) {
- const GByteArray *mac;
-
- mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- if (mac && memcmp (mac->data, priv->hw_addr, INFINIBAND_ALEN))
- continue;
- }
-
- return connection;
- }
- return NULL;
+ return NM_DEVICE_CAP_CARRIER_DETECT;
}
static NMActStageReturn
act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
{
+ NMActStageReturn ret;
NMActRequest *req;
NMConnection *connection;
NMSettingInfiniband *s_infiniband;
@@ -192,6 +154,10 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+ ret = NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->act_stage1_prepare (dev, reason);
+ if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
+ return ret;
+
req = nm_device_get_act_request (dev);
g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
@@ -202,7 +168,8 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
transport_mode = nm_setting_infiniband_get_transport_mode (s_infiniband);
- mode_path = g_strdup_printf ("/sys/class/net/%s/mode", nm_device_get_iface (dev));
+ mode_path = g_strdup_printf ("/sys/class/net/%s/mode",
+ ASSERT_VALID_PATH_COMPONENT (nm_device_get_iface (dev)));
if (!g_file_test (mode_path, G_FILE_TEST_EXISTS)) {
g_free (mode_path);
@@ -214,7 +181,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
}
}
- ok = nm_utils_do_sysctl (mode_path, transport_mode);
+ ok = nm_platform_sysctl_set (mode_path, transport_mode);
g_free (mode_path);
if (!ok) {
@@ -222,7 +189,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
return NM_ACT_STAGE_RETURN_FAILURE;
}
- return NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->act_stage1_prepare (dev, reason);
+ return NM_ACT_STAGE_RETURN_SUCCESS;
}
static void
@@ -244,39 +211,28 @@ ip4_config_pre_commit (NMDevice *self, NMIP4Config *config)
}
static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (device);
NMSettingInfiniband *s_infiniband;
const GByteArray *mac;
- if (!nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
- g_set_error (error,
- NM_INFINIBAND_ERROR,
- NM_INFINIBAND_ERROR_CONNECTION_NOT_INFINIBAND,
- "The connection was not an InfiniBand connection.");
+ if (!NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME))
return FALSE;
- }
s_infiniband = nm_connection_get_setting_infiniband (connection);
- if (!s_infiniband) {
- g_set_error (error,
- NM_INFINIBAND_ERROR, NM_INFINIBAND_ERROR_CONNECTION_INVALID,
- "The connection was not a valid infiniband connection.");
+ if (!s_infiniband)
return FALSE;
- }
if (s_infiniband) {
mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- if (mac && memcmp (mac->data, priv->hw_addr, INFINIBAND_ALEN)) {
- g_set_error (error,
- NM_INFINIBAND_ERROR,
- NM_INFINIBAND_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection's MAC address did not match this device.");
+ /* We only compare the last 8 bytes */
+ if (mac && memcmp (mac->data + INFINIBAND_ALEN - 8,
+ nm_device_get_hw_address (device, NULL) + INFINIBAND_ALEN - 8,
+ 8))
return FALSE;
- }
}
return TRUE;
@@ -289,9 +245,9 @@ complete_connection (NMDevice *device,
const GSList *existing_connections,
GError **error)
{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (device);
NMSettingInfiniband *s_infiniband;
const GByteArray *setting_mac;
+ const guint8 *hw_address;
nm_utils_complete_generic (connection,
NM_SETTING_INFINIBAND_SETTING_NAME,
@@ -307,9 +263,10 @@ complete_connection (NMDevice *device,
}
setting_mac = nm_setting_infiniband_get_mac_address (s_infiniband);
+ hw_address = nm_device_get_hw_address (device, NULL);
if (setting_mac) {
/* Make sure the setting MAC (if any) matches the device's MAC */
- if (memcmp (setting_mac->data, priv->hw_addr, INFINIBAND_ALEN)) {
+ if (memcmp (setting_mac->data, hw_address, INFINIBAND_ALEN)) {
g_set_error_literal (error,
NM_SETTING_INFINIBAND_ERROR,
NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
@@ -320,8 +277,8 @@ complete_connection (NMDevice *device,
GByteArray *mac;
/* Lock the connection to this device by default */
- mac = g_byte_array_sized_new (sizeof (priv->hw_addr));
- g_byte_array_append (mac, priv->hw_addr, sizeof (priv->hw_addr));
+ mac = g_byte_array_sized_new (INFINIBAND_ALEN);
+ g_byte_array_append (mac, hw_address, INFINIBAND_ALEN);
g_object_set (G_OBJECT (s_infiniband), NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL);
g_byte_array_free (mac, TRUE);
}
@@ -332,95 +289,72 @@ complete_connection (NMDevice *device,
return TRUE;
}
-static gboolean
-spec_match_list (NMDevice *device, const GSList *specs)
-{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (device);
- char *hwaddr;
- gboolean matched;
-
- hwaddr = nm_utils_hwaddr_ntoa (priv->hw_addr, ARPHRD_INFINIBAND);
- matched = nm_match_spec_hwaddr (specs, hwaddr);
- g_free (hwaddr);
-
- return matched;
-}
-
-static gboolean
-infiniband_match_config (NMDevice *self, NMConnection *connection)
+static void
+update_connection (NMDevice *device, NMConnection *connection)
{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (self);
- NMSettingInfiniband *s_infiniband;
- const GByteArray *s_mac;
+ NMSettingInfiniband *s_infiniband = nm_connection_get_setting_infiniband (connection);
+ guint maclen;
+ gconstpointer mac = nm_device_get_hw_address (device, &maclen);
+ static const guint8 null_mac[INFINIBAND_ALEN] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ GByteArray *array;
+ char *mode_path, *contents = NULL;
+ const char *transport_mode = "datagram";
- s_infiniband = nm_connection_get_setting_infiniband (connection);
- if (!s_infiniband)
- return FALSE;
+ if (!s_infiniband) {
+ s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_infiniband);
+ }
- /* MAC address check */
- s_mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- if (s_mac && memcmp (s_mac->data, priv->hw_addr, INFINIBAND_ALEN))
- return FALSE;
+ if (mac && (maclen == INFINIBAND_ALEN) && (memcmp (mac, null_mac, maclen) != 0)) {
+ array = g_byte_array_sized_new (maclen);
+ g_byte_array_append (array, (guint8 *) mac, maclen);
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, array, NULL);
+ g_byte_array_unref (array);
+ }
- return TRUE;
+ mode_path = g_strdup_printf ("/sys/class/net/%s/mode",
+ ASSERT_VALID_PATH_COMPONENT (nm_device_get_iface (device)));
+ contents = nm_platform_sysctl_get (mode_path);
+ g_free (mode_path);
+ if (contents) {
+ if (strstr (contents, "datagram"))
+ transport_mode = "datagram";
+ else if (strstr (contents, "connected"))
+ transport_mode = "connected";
+ g_free (contents);
+ }
+ g_object_set (G_OBJECT (s_infiniband), NM_SETTING_INFINIBAND_TRANSPORT_MODE, transport_mode, NULL);
}
-static NMConnection *
-connection_match_config (NMDevice *self, const GSList *connections)
+static gboolean
+spec_match_list (NMDevice *device, const GSList *specs)
{
+ char *hwaddr_str, *spec_str;
const GSList *iter;
- GSList *infiniband_matches;
- NMConnection *match;
-
- /* First narrow @connections down to those that match in their
- * NMSettingInfiniband configuration.
- */
- infiniband_matches = NULL;
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
-
- if (!nm_connection_is_type (candidate, NM_SETTING_INFINIBAND_SETTING_NAME))
- continue;
- if (!infiniband_match_config (self, candidate))
- continue;
- infiniband_matches = g_slist_prepend (infiniband_matches, candidate);
- }
+ if (NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->spec_match_list (device, specs))
+ return TRUE;
- /* Now pass those to the super method, which will check IP config */
- infiniband_matches = g_slist_reverse (infiniband_matches);
- match = NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->connection_match_config (self, infiniband_matches);
- g_slist_free (infiniband_matches);
+ hwaddr_str = nm_utils_hwaddr_ntoa (nm_device_get_hw_address (device, NULL),
+ ARPHRD_INFINIBAND);
- return match;
-}
+ /* InfiniBand hardware address matches only need to match the last
+ * 8 bytes. In string format, that means we skip the first 36
+ * characters of hwaddr_str, and the first 40 of the spec (to skip
+ * "mac:" too).
+ */
+ for (iter = specs; iter; iter = g_slist_next (iter)) {
+ spec_str = iter->data;
-static gboolean
-hwaddr_matches (NMDevice *device,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr)
-{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (device);
- NMSettingInfiniband *s_ib;
- const GByteArray *mac = NULL;
-
- s_ib = nm_connection_get_setting_infiniband (connection);
- if (s_ib)
- mac = nm_setting_infiniband_get_mac_address (s_ib);
-
- if (mac) {
- g_return_val_if_fail (mac->len == INFINIBAND_ALEN, FALSE);
- if (other_hwaddr) {
- g_return_val_if_fail (other_hwaddr_len == INFINIBAND_ALEN, FALSE);
- if (memcmp (mac->data, other_hwaddr, mac->len) == 0)
- return TRUE;
- } else if (memcmp (mac->data, priv->hw_addr, mac->len) == 0)
+ if ( !g_ascii_strncasecmp (spec_str, "mac:", 4)
+ && strlen (spec_str) > 40
+ && !g_ascii_strcasecmp (spec_str + 40, hwaddr_str + 36)) {
+ g_free (hwaddr_str);
return TRUE;
- } else if (fail_if_no_hwaddr == FALSE)
- return TRUE;
+ }
+ }
+ g_free (hwaddr_str);
return FALSE;
}
@@ -428,15 +362,7 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
-
switch (prop_id) {
- case PROP_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (priv->hw_addr, ARPHRD_INFINIBAND));
- break;
- case PROP_CARRIER:
- g_value_set_boolean (value, nm_device_wired_get_carrier (NM_DEVICE_WIRED (object)));
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -468,42 +394,19 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *klass)
object_class->set_property = set_property;
parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->update_hw_address = update_hw_address;
- parent_class->get_hw_address = get_hw_address;
- parent_class->get_best_auto_connection = get_best_auto_connection;
parent_class->check_connection_compatible = check_connection_compatible;
parent_class->complete_connection = complete_connection;
+ parent_class->update_connection = update_connection;
+ parent_class->spec_match_list = spec_match_list;
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->ip4_config_pre_commit = ip4_config_pre_commit;
- parent_class->spec_match_list = spec_match_list;
- parent_class->connection_match_config = connection_match_config;
- parent_class->hwaddr_matches = hwaddr_matches;
/* properties */
- g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_INFINIBAND_HW_ADDRESS,
- "Active MAC Address",
- "Currently set hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_INFINIBAND_CARRIER,
- "Carrier",
- "Carrier",
- FALSE,
- G_PARAM_READABLE));
-
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceInfinibandClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_infiniband_object_info);
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_infiniband_object_info);
dbus_g_error_domain_register (NM_INFINIBAND_ERROR, NULL, NM_TYPE_INFINIBAND_ERROR);
}
diff --git a/src/nm-device-infiniband.h b/src/devices/nm-device-infiniband.h
index fe88c9013..45dc1ab6a 100644
--- a/src/nm-device-infiniband.h
+++ b/src/devices/nm-device-infiniband.h
@@ -23,7 +23,7 @@
#include <glib-object.h>
-#include "nm-device-wired.h"
+#include "nm-device.h"
G_BEGIN_DECLS
@@ -40,26 +40,21 @@ typedef enum {
NM_INFINIBAND_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMInfinibandError;
-#define NM_DEVICE_INFINIBAND_HW_ADDRESS "hw-address"
-#define NM_DEVICE_INFINIBAND_CARRIER "carrier"
-
typedef struct {
- NMDeviceWired parent;
+ NMDevice parent;
} NMDeviceInfiniband;
typedef struct {
- NMDeviceWiredClass parent;
+ NMDeviceClass parent;
- /* Signals */
- void (*properties_changed) (NMDeviceInfiniband *device, GHashTable *properties);
} NMDeviceInfinibandClass;
GType nm_device_infiniband_get_type (void);
-NMDevice *nm_device_infiniband_new (const char *udi,
- const char *iface,
- const char *driver);
+NMDevice *nm_device_infiniband_new (NMPlatformLink *platform_device);
+NMDevice *nm_device_infiniband_new_partition (NMConnection *connection,
+ NMDevice *parent);
G_END_DECLS
diff --git a/src/devices/nm-device-macvlan.c b/src/devices/nm-device-macvlan.c
new file mode 100644
index 000000000..22848fe78
--- /dev/null
+++ b/src/devices/nm-device-macvlan.c
@@ -0,0 +1,181 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-device-macvlan.h"
+#include "nm-device-private.h"
+#include "nm-dbus-manager.h"
+#include "nm-logging.h"
+#include "nm-manager.h"
+#include "nm-platform.h"
+
+#include "nm-device-macvlan-glue.h"
+
+G_DEFINE_TYPE (NMDeviceMacvlan, nm_device_macvlan, NM_TYPE_DEVICE_GENERIC)
+
+#define NM_DEVICE_MACVLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MACVLAN, NMDeviceMacvlanPrivate))
+
+typedef struct {
+ NMPlatformMacvlanProperties props;
+} NMDeviceMacvlanPrivate;
+
+enum {
+ PROP_0,
+ PROP_PARENT,
+ PROP_MODE,
+ PROP_NO_PROMISC,
+
+ LAST_PROP
+};
+
+/**************************************************************/
+
+/**************************************************************/
+
+static void
+update_properties (NMDevice *device)
+{
+ NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (device);
+ GObject *object = G_OBJECT (device);
+ NMPlatformMacvlanProperties props;
+
+ if (!nm_platform_macvlan_get_properties (nm_device_get_ifindex (device), &props)) {
+ nm_log_warn (LOGD_HW, "(%s): could not read macvlan properties",
+ nm_device_get_iface (device));
+ return;
+ }
+
+ g_object_freeze_notify (object);
+
+ if (priv->props.parent_ifindex != props.parent_ifindex)
+ g_object_notify (object, NM_DEVICE_MACVLAN_PARENT);
+ if (g_strcmp0 (priv->props.mode, props.mode) != 0)
+ g_object_notify (object, NM_DEVICE_MACVLAN_MODE);
+ if (priv->props.no_promisc != props.no_promisc)
+ g_object_notify (object, NM_DEVICE_MACVLAN_NO_PROMISC);
+
+ memcpy (&priv->props, &props, sizeof (NMPlatformMacvlanProperties));
+
+ g_object_thaw_notify (object);
+}
+
+static void
+link_changed (NMDevice *device, NMPlatformLink *info)
+{
+ NM_DEVICE_CLASS (nm_device_macvlan_parent_class)->link_changed (device, info);
+ update_properties (device);
+}
+
+/**************************************************************/
+
+NMDevice *
+nm_device_macvlan_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_MACVLAN,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_TYPE_DESC, "Macvlan",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NULL);
+}
+
+static void
+nm_device_macvlan_init (NMDeviceMacvlan *self)
+{
+}
+
+static void
+constructed (GObject *object)
+{
+ update_properties (NM_DEVICE (object));
+
+ G_OBJECT_CLASS (nm_device_macvlan_parent_class)->constructed (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (object);
+ NMDevice *parent;
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ parent = nm_manager_get_device_by_ifindex (nm_manager_get (), priv->props.parent_ifindex);
+ g_value_set_boxed (value, parent ? nm_device_get_path (parent) : "/");
+ break;
+ case PROP_MODE:
+ g_value_set_string (value, priv->props.mode);
+ break;
+ case PROP_NO_PROMISC:
+ g_value_set_boolean (value, priv->props.no_promisc);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_macvlan_class_init (NMDeviceMacvlanClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceMacvlanPrivate));
+
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+
+ device_class->link_changed = link_changed;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_boxed (NM_DEVICE_MACVLAN_PARENT,
+ "Parent",
+ "Parent device",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_MODE,
+ g_param_spec_string (NM_DEVICE_MACVLAN_MODE,
+ "Mode",
+ "Mode: 'private', 'vepa', 'bridge', or 'passthru'",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_NO_PROMISC,
+ g_param_spec_boolean (NM_DEVICE_MACVLAN_NO_PROMISC,
+ "No-promisc",
+ "No promiscuous mode",
+ FALSE,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_macvlan_object_info);
+}
diff --git a/src/devices/nm-device-macvlan.h b/src/devices/nm-device-macvlan.h
new file mode 100644
index 000000000..348ed2f96
--- /dev/null
+++ b/src/devices/nm-device-macvlan.h
@@ -0,0 +1,56 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_MACVLAN_H
+#define NM_DEVICE_MACVLAN_H
+
+#include <glib-object.h>
+
+#include "nm-device-generic.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_MACVLAN (nm_device_macvlan_get_type ())
+#define NM_DEVICE_MACVLAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_MACVLAN, NMDeviceMacvlan))
+#define NM_DEVICE_MACVLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_MACVLAN, NMDeviceMacvlanClass))
+#define NM_IS_DEVICE_MACVLAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_MACVLAN))
+#define NM_IS_DEVICE_MACVLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_MACVLAN))
+#define NM_DEVICE_MACVLAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_MACVLAN, NMDeviceMacvlanClass))
+
+#define NM_DEVICE_MACVLAN_PARENT "parent"
+#define NM_DEVICE_MACVLAN_MODE "mode"
+#define NM_DEVICE_MACVLAN_NO_PROMISC "no-promisc"
+
+typedef struct {
+ NMDeviceGeneric parent;
+} NMDeviceMacvlan;
+
+typedef struct {
+ NMDeviceGenericClass parent;
+
+} NMDeviceMacvlanClass;
+
+GType nm_device_macvlan_get_type (void);
+
+NMDevice *nm_device_macvlan_new (NMPlatformLink *platform_device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_MACVLAN_H */
diff --git a/src/nm-device-private.h b/src/devices/nm-device-private.h
index 8edae6602..24bb0b336 100644
--- a/src/nm-device-private.h
+++ b/src/devices/nm-device-private.h
@@ -26,6 +26,8 @@
/* This file should only be used by subclasses of NMDevice */
+#define NM_DEVICE_PLATFORM_DEVICE "platform-device"
+
enum NMActStageReturn {
NM_ACT_STAGE_RETURN_FAILURE = 0,
NM_ACT_STAGE_RETURN_SUCCESS, /* Activation stage done */
@@ -34,6 +36,10 @@ enum NMActStageReturn {
NM_ACT_STAGE_RETURN_STOP /* Activation stage done; nothing to do */
};
+#define NM_DEVICE_CAP_NONSTANDARD_CARRIER 0x80000000
+
+#define NM_DEVICE_CAP_INTERNAL_MASK 0x80000000
+
void nm_device_set_ip_iface (NMDevice *self, const char *iface);
void nm_device_activate_schedule_stage3_ip_config_start (NMDevice *device);
@@ -42,26 +48,25 @@ gboolean nm_device_activate_stage3_ip4_start (NMDevice *self);
gboolean nm_device_activate_stage3_ip6_start (NMDevice *self);
-gboolean nm_device_hw_bring_up (NMDevice *self, gboolean wait, gboolean *no_firmware);
+gboolean nm_device_bring_up (NMDevice *self, gboolean wait, gboolean *no_firmware);
-void nm_device_hw_take_down (NMDevice *self, gboolean block);
+void nm_device_take_down (NMDevice *self, gboolean block);
-gsize nm_device_read_hwaddr (NMDevice *dev, guint8 *out_buf, gsize buf_len, gboolean *out_changed);
+gboolean nm_device_update_hw_address (NMDevice *self);
+gboolean nm_device_set_hw_addr (NMDevice *device, const guint8 *addr,
+ const char *detail, guint64 hw_log_domain);
gboolean nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6);
void nm_device_set_firmware_missing (NMDevice *self, gboolean missing);
-guint32 nm_device_get_capabilities (NMDevice *dev);
-guint32 nm_device_get_type_capabilities (NMDevice *dev);
-
void nm_device_activate_schedule_stage1_device_prepare (NMDevice *device);
void nm_device_activate_schedule_stage2_device_config (NMDevice *device);
void nm_device_activate_schedule_ip4_config_result(NMDevice *device, NMIP4Config *config);
void nm_device_activate_schedule_ip4_config_timeout (NMDevice *device);
-void nm_device_activate_schedule_ip6_config_result (NMDevice *device, NMIP6Config *config);
+void nm_device_activate_schedule_ip6_config_result (NMDevice *device);
void nm_device_activate_schedule_ip6_config_timeout (NMDevice *device);
gboolean nm_device_activate_ip4_state_in_conf (NMDevice *device);
@@ -74,10 +79,7 @@ void nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout);
void nm_device_set_dhcp_anycast_address (NMDevice *device, guint8 *addr);
gboolean nm_device_dhcp4_renew (NMDevice *device, gboolean release);
-
-gboolean nm_device_match_ip_config (NMDevice *device, NMConnection *connection);
-
-NMConnectionProvider *nm_device_get_connection_provider (NMDevice *device);
+gboolean nm_device_dhcp6_renew (NMDevice *device, gboolean release);
void nm_device_recheck_available_connections (NMDevice *device);
@@ -89,4 +91,12 @@ gboolean nm_device_get_enslaved (NMDevice *device);
NMDevice *nm_device_master_get_slave_by_ifindex (NMDevice *dev, int ifindex);
+void nm_device_master_check_slave_physical_port (NMDevice *dev, NMDevice *slave,
+ guint64 log_domain);
+
+void nm_device_set_carrier (NMDevice *device, gboolean carrier);
+
+void nm_device_emit_recheck_auto_activate (NMDevice *device);
+void nm_device_queue_recheck_assume (NMDevice *device);
+
#endif /* NM_DEVICE_PRIVATE_H */
diff --git a/src/devices/nm-device-team.c b/src/devices/nm-device-team.c
new file mode 100644
index 000000000..f3b25e3b1
--- /dev/null
+++ b/src/devices/nm-device-team.c
@@ -0,0 +1,894 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <netinet/ether.h>
+#if WITH_TEAMDCTL
+#include <teamdctl.h>
+#endif
+#include <stdlib.h>
+
+#include "nm-device-team.h"
+#include "nm-logging.h"
+#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
+#include "nm-device-private.h"
+#include "nm-platform.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-dbus-manager.h"
+#include "nm-enum-types.h"
+#include "nm-posix-signals.h"
+
+#include "nm-device-team-glue.h"
+
+
+G_DEFINE_TYPE (NMDeviceTeam, nm_device_team, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_TEAM, NMDeviceTeamPrivate))
+
+#define NM_TEAM_ERROR (nm_team_error_quark ())
+
+static gboolean teamd_start (NMDevice *dev, NMSettingTeam *s_team);
+
+typedef struct {
+#if WITH_TEAMDCTL
+ struct teamdctl *tdc;
+#endif
+ GPid teamd_pid;
+ guint teamd_process_watch;
+ guint teamd_timeout;
+ guint teamd_dbus_watch;
+} NMDeviceTeamPrivate;
+
+enum {
+ PROP_0,
+ PROP_SLAVES,
+
+ LAST_PROP
+};
+
+/******************************************************************/
+
+static GQuark
+nm_team_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-team-error");
+ return quark;
+}
+
+/******************************************************************/
+
+static guint32
+get_generic_capabilities (NMDevice *dev)
+{
+ return NM_DEVICE_CAP_CARRIER_DETECT;
+}
+
+static gboolean
+is_available (NMDevice *dev)
+{
+ if (NM_DEVICE_GET_CLASS (dev)->is_up)
+ return NM_DEVICE_GET_CLASS (dev)->is_up (dev);
+ return FALSE;
+}
+
+static gboolean
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
+{
+ /* Connections are always available because the carrier state is determined
+ * by the team port carrier states, not the team's state.
+ */
+ return TRUE;
+}
+
+static gboolean
+check_connection_compatible (NMDevice *device, NMConnection *connection)
+{
+ const char *iface;
+ NMSettingTeam *s_team;
+
+ if (!NM_DEVICE_CLASS (nm_device_team_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
+ s_team = nm_connection_get_setting_team (connection);
+ if (!s_team || !nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME))
+ return FALSE;
+
+ /* Team connections must specify the virtual interface name */
+ iface = nm_connection_get_virtual_iface_name (connection);
+ if (!iface || strcmp (nm_device_get_iface (device), iface))
+ return FALSE;
+
+ /* FIXME: match team properties like mode, etc? */
+
+ return TRUE;
+}
+
+static gboolean
+complete_connection (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object,
+ const GSList *existing_connections,
+ GError **error)
+{
+ NMSettingTeam *s_team, *tmp;
+ guint32 i = 0;
+ char *name;
+ const GSList *iter;
+ gboolean found;
+
+ nm_utils_complete_generic (connection,
+ NM_SETTING_TEAM_SETTING_NAME,
+ existing_connections,
+ _("Team connection %d"),
+ NULL,
+ TRUE);
+
+ s_team = nm_connection_get_setting_team (connection);
+ if (!s_team) {
+ s_team = (NMSettingTeam *) nm_setting_team_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_team));
+ }
+
+ /* Grab the first name that doesn't exist in either our connections
+ * or a device on the system.
+ */
+ while (i < 500 && !nm_setting_team_get_interface_name (s_team)) {
+ name = g_strdup_printf ("team%u", i);
+ /* check interface names */
+ if (!nm_platform_link_exists (name)) {
+ /* check existing team connections */
+ for (iter = existing_connections, found = FALSE; iter; iter = g_slist_next (iter)) {
+ NMConnection *candidate = iter->data;
+
+ tmp = nm_connection_get_setting_team (candidate);
+ if (tmp && nm_connection_is_type (candidate, NM_SETTING_TEAM_SETTING_NAME)) {
+ if (g_strcmp0 (nm_setting_team_get_interface_name (tmp), name) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+
+ if (!found)
+ g_object_set (G_OBJECT (s_team), NM_SETTING_TEAM_INTERFACE_NAME, name, NULL);
+ }
+
+ g_free (name);
+ i++;
+ }
+
+ return TRUE;
+}
+
+#if WITH_TEAMDCTL
+static gboolean
+ensure_teamd_connection (NMDevice *self)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
+ int err;
+
+ if (priv->tdc)
+ return TRUE;
+
+ priv->tdc = teamdctl_alloc ();
+ g_assert (priv->tdc);
+ err = teamdctl_connect (priv->tdc, nm_device_get_iface (self), NULL, NULL);
+ if (err != 0) {
+ nm_log_err (LOGD_TEAM, "(%s): failed to connect to teamd (err=%d)",
+ nm_device_get_iface (self), err);
+ teamdctl_free (priv->tdc);
+ priv->tdc = NULL;
+ }
+
+ return !!priv->tdc;
+}
+#endif
+
+static void
+update_connection (NMDevice *device, NMConnection *connection)
+{
+ NMSettingTeam *s_team = nm_connection_get_setting_team (connection);
+ const char *iface = nm_device_get_iface (device);
+
+ if (!s_team) {
+ s_team = (NMSettingTeam *) nm_setting_team_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_team);
+ g_object_set (G_OBJECT (s_team), NM_SETTING_TEAM_INTERFACE_NAME, iface, NULL);
+ }
+ g_object_set (G_OBJECT (s_team), NM_SETTING_TEAM_CONFIG, NULL, NULL);
+
+#if WITH_TEAMDCTL
+ teamd_start (device, s_team);
+ if (NM_DEVICE_TEAM_GET_PRIVATE (device)->teamd_pid > 0 && ensure_teamd_connection (device)) {
+ const char *config = NULL;
+ int err;
+
+ err = teamdctl_config_get_raw_direct (NM_DEVICE_TEAM_GET_PRIVATE (device)->tdc,
+ (char **)&config);
+ if (err == 0)
+ g_object_set (G_OBJECT (s_team), NM_SETTING_TEAM_CONFIG, config, NULL);
+ else
+ nm_log_err (LOGD_TEAM, "(%s): failed to read teamd config (err=%d)", iface, err);
+ }
+#endif
+}
+
+/******************************************************************/
+
+gboolean
+nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection)
+{
+ NMSettingTeamPort *s_port;
+ const char *iface = nm_device_get_iface (slave);
+ char *port_config = NULL;
+ gboolean with_teamdctl = FALSE;
+ int err = 0;
+#if WITH_TEAMDCTL
+ const char *master_iface;
+ int master_ifindex;
+ struct teamdctl *tdc;
+ const char *team_port_config = NULL;
+#endif
+
+ g_return_val_if_fail (NM_IS_DEVICE (slave), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+
+#if WITH_TEAMDCTL
+ master_ifindex = nm_platform_link_get_master (nm_device_get_ifindex (slave));
+ g_assert (master_ifindex > 0);
+ master_iface = nm_platform_link_get_name (master_ifindex);
+ g_assert (master_iface);
+
+ tdc = teamdctl_alloc ();
+ g_assert (tdc);
+ err = teamdctl_connect (tdc, master_iface, NULL, NULL);
+ if (err) {
+ nm_log_err (LOGD_TEAM, "(%s): failed to connect to teamd for master %s (err=%d)",
+ iface, master_iface, err);
+ teamdctl_free (tdc);
+ return FALSE;
+ }
+ err = teamdctl_port_config_get_raw_direct (tdc, iface, (char **)&team_port_config);
+ port_config = g_strdup (team_port_config);
+ teamdctl_free (tdc);
+ with_teamdctl = TRUE;
+#endif
+
+ s_port = nm_connection_get_setting_team_port (connection);
+ if (!s_port) {
+ s_port = (NMSettingTeamPort *) nm_setting_team_port_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_port));
+ }
+
+ g_object_set (G_OBJECT (s_port), NM_SETTING_TEAM_PORT_CONFIG, port_config, NULL);
+ g_free (port_config);
+
+ if (!with_teamdctl || err != 0) {
+ if (!with_teamdctl)
+ nm_log_err (LOGD_TEAM, "(%s): failed to read teamd port configuration "
+ " (compiled without libteamdctl support)", iface);
+ else
+ nm_log_err (LOGD_TEAM, "(%s): failed to read teamd port configuration (err=%d)",
+ iface, err);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/******************************************************************/
+
+static gboolean
+ensure_killed (gpointer data)
+{
+ int pid = GPOINTER_TO_INT (data);
+
+ if (kill (pid, 0) == 0)
+ kill (pid, SIGKILL);
+
+ /* ensure the child is reaped */
+ nm_log_dbg (LOGD_TEAM, "waiting for teamd pid %d to exit", pid);
+ waitpid (pid, NULL, 0);
+ nm_log_dbg (LOGD_TEAM, "teamd pid %d cleaned up", pid);
+
+ return FALSE;
+}
+
+static void
+service_kill (int pid)
+{
+ if (kill (pid, SIGTERM) == 0)
+ g_timeout_add_seconds (2, ensure_killed, GINT_TO_POINTER (pid));
+ else {
+ kill (pid, SIGKILL);
+
+ /* ensure the child is reaped */
+ nm_log_dbg (LOGD_TEAM, "waiting for teamd pid %d to exit", pid);
+ waitpid (pid, NULL, 0);
+ nm_log_dbg (LOGD_TEAM, "teamd pid %d cleaned up", pid);
+ }
+}
+
+static void
+teamd_timeout_remove (NMDevice *dev)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+
+ if (priv->teamd_timeout) {
+ g_source_remove (priv->teamd_timeout);
+ priv->teamd_timeout = 0;
+ }
+}
+
+static void
+teamd_cleanup (NMDevice *dev, gboolean device_state_failed)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+
+ if (priv->teamd_dbus_watch) {
+ g_bus_unwatch_name (priv->teamd_dbus_watch);
+ priv->teamd_dbus_watch = 0;
+ }
+
+ if (priv->teamd_process_watch) {
+ g_source_remove (priv->teamd_process_watch);
+ priv->teamd_process_watch = 0;
+ }
+
+ if (priv->teamd_pid > 0) {
+ service_kill (priv->teamd_pid);
+ priv->teamd_pid = 0;
+ }
+
+#if WITH_TEAMDCTL
+ if (priv->tdc) {
+ teamdctl_disconnect (priv->tdc);
+ teamdctl_free (priv->tdc);
+ priv->tdc = NULL;
+ }
+#endif
+
+ teamd_timeout_remove (dev);
+
+ if (device_state_failed) {
+ if (nm_device_is_activating (dev) ||
+ (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED))
+ nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED);
+ }
+}
+
+static gboolean
+teamd_timeout_cb (gpointer user_data)
+{
+ NMDevice *dev = NM_DEVICE (user_data);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+
+ g_return_val_if_fail (priv->teamd_timeout, FALSE);
+
+ nm_log_info (LOGD_TEAM, "(%s): teamd timed out.", nm_device_get_iface (dev));
+ teamd_cleanup (dev, TRUE);
+
+ return FALSE;
+}
+
+static void
+teamd_dbus_appeared (GDBusConnection *connection,
+ const gchar *name,
+ const gchar *name_owner,
+ gpointer user_data)
+{
+ NMDevice *dev = NM_DEVICE (user_data);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+
+ g_return_if_fail (priv->teamd_dbus_watch);
+
+ nm_log_info (LOGD_TEAM, "(%s): teamd appeared on D-Bus", nm_device_get_iface (dev));
+ teamd_timeout_remove (dev);
+#if WITH_TEAMDCTL
+ if (!ensure_teamd_connection (dev)) {
+ nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED);
+ return;
+ }
+#endif
+ nm_device_activate_schedule_stage2_device_config (dev);
+}
+
+static void
+teamd_dbus_vanished (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ NMDevice *dev = NM_DEVICE (user_data);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+
+ g_return_if_fail (priv->teamd_dbus_watch);
+
+ if (priv->teamd_timeout) {
+ /* g_bus_watch_name will always raise an initial signal, to indicate whether the
+ * name exists/not exists initially. Do not take this as a failure, until the
+ * startup timeout is over.
+ *
+ * Note that g_bus_watch_name is guaranteed to alternate vanished/appeared signals,
+ * so we won't hit this condition again (because the next signal is either 'appeared'
+ * or 'timeout'). */
+ nm_log_dbg (LOGD_TEAM, "(%s): teamd vanished from D-Bus (ignored)", nm_device_get_iface (dev));
+ return;
+ }
+
+ nm_log_info (LOGD_TEAM, "(%s): teamd vanished from D-Bus", nm_device_get_iface (dev));
+ teamd_cleanup (dev, TRUE);
+}
+
+static void
+teamd_process_watch_cb (GPid pid, gint status, gpointer user_data)
+{
+ NMDevice *dev = NM_DEVICE (user_data);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+
+ g_return_if_fail (priv->teamd_process_watch);
+
+ nm_log_info (LOGD_TEAM, "(%s): teamd died", nm_device_get_iface (dev));
+ priv->teamd_process_watch = 0;
+ priv->teamd_pid = 0;
+ teamd_cleanup (dev, TRUE);
+}
+
+static void
+teamd_child_setup (gpointer user_data G_GNUC_UNUSED)
+{
+ /* We are in the child process at this point.
+ * Give child it's own program group for signal
+ * separation.
+ */
+ pid_t pid = getpid ();
+ setpgid (pid, pid);
+
+ /*
+ * We blocked signals in main(). We need to restore original signal
+ * mask for avahi-autoipd here so that it can receive signals.
+ */
+ nm_unblock_posix_signals (NULL);
+}
+
+static gboolean
+teamd_start (NMDevice *dev, NMSettingTeam *s_team)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+ const char *iface = nm_device_get_ip_iface (dev);
+ char *tmp_str;
+ const char *config;
+ const char **teamd_binary = NULL;
+ static const char *teamd_paths[] = {
+ "/usr/bin/teamd",
+ "/usr/local/bin/teamd",
+ NULL
+ };
+ GPtrArray *argv;
+ GError *error = NULL;
+ gboolean ret;
+ int status;
+
+ if (priv->teamd_dbus_watch ||
+ priv->teamd_process_watch ||
+ priv->teamd_pid > 0 ||
+#if WITH_TEAMDCTL
+ priv->tdc ||
+#endif
+ priv->teamd_timeout)
+ {
+ /* Just return if teamd_start() was already called */
+ return TRUE;
+ }
+
+ teamd_binary = teamd_paths;
+ while (*teamd_binary != NULL) {
+ if (g_file_test (*teamd_binary, G_FILE_TEST_EXISTS))
+ break;
+ teamd_binary++;
+ }
+
+ if (!*teamd_binary) {
+ nm_log_warn (LOGD_TEAM,
+ "Activation (%s) failed to start teamd: teamd binary not found",
+ iface);
+ return FALSE;
+ }
+
+ /* Kill teamd for same named device first if it is there */
+ argv = g_ptr_array_new ();
+ g_ptr_array_add (argv, (gpointer) *teamd_binary);
+ g_ptr_array_add (argv, (gpointer) "-k");
+ g_ptr_array_add (argv, (gpointer) "-t");
+ g_ptr_array_add (argv, (gpointer) iface);
+ g_ptr_array_add (argv, NULL);
+
+ tmp_str = g_strjoinv (" ", (gchar **) argv->pdata);
+ nm_log_dbg (LOGD_TEAM, "running: %s", tmp_str);
+ g_free (tmp_str);
+
+ ret = g_spawn_sync ("/", (char **) argv->pdata, NULL, 0, nm_unblock_posix_signals, NULL, NULL, NULL, &status, &error);
+ g_ptr_array_free (argv, TRUE);
+
+ /* Start teamd now */
+ argv = g_ptr_array_new ();
+ g_ptr_array_add (argv, (gpointer) *teamd_binary);
+ g_ptr_array_add (argv, (gpointer) "-o");
+ g_ptr_array_add (argv, (gpointer) "-n");
+ g_ptr_array_add (argv, (gpointer) "-U");
+ g_ptr_array_add (argv, (gpointer) "-D");
+ g_ptr_array_add (argv, (gpointer) "-t");
+ g_ptr_array_add (argv, (gpointer) iface);
+
+ config = nm_setting_team_get_config(s_team);
+ if (config) {
+ g_ptr_array_add (argv, (gpointer) "-c");
+ g_ptr_array_add (argv, (gpointer) config);
+ }
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_TEAM))
+ g_ptr_array_add (argv, (gpointer) "-gg");
+ g_ptr_array_add (argv, NULL);
+
+ tmp_str = g_strjoinv (" ", (gchar **) argv->pdata);
+ nm_log_dbg (LOGD_TEAM, "running: %s", tmp_str);
+ g_free (tmp_str);
+
+ /* Start a timeout for teamd to appear at D-Bus */
+ priv->teamd_timeout = g_timeout_add_seconds (5, teamd_timeout_cb, dev);
+
+ /* Register D-Bus name watcher */
+ tmp_str = g_strdup_printf ("org.libteam.teamd.%s", iface);
+ priv->teamd_dbus_watch = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
+ tmp_str,
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ teamd_dbus_appeared,
+ teamd_dbus_vanished,
+ dev,
+ NULL);
+ g_free (tmp_str);
+
+ ret = g_spawn_async ("/", (char **) argv->pdata, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
+ &teamd_child_setup, NULL, &priv->teamd_pid, &error);
+ g_ptr_array_free (argv, TRUE);
+ if (!ret) {
+ nm_log_warn (LOGD_TEAM,
+ "Activation (%s) failed to start teamd: %s",
+ iface, error->message);
+ g_clear_error (&error);
+ teamd_cleanup (dev, FALSE);
+ return FALSE;
+ }
+
+ /* Monitor the child process so we know when it dies */
+ priv->teamd_process_watch = g_child_watch_add (priv->teamd_pid,
+ teamd_process_watch_cb,
+ dev);
+
+ nm_log_info (LOGD_TEAM,
+ "Activation (%s) started teamd...", iface);
+ return TRUE;
+}
+
+static void
+teamd_stop (NMDevice *dev)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+
+ if (priv->teamd_pid > 0) {
+ nm_log_info (LOGD_TEAM, "Deactivation (%s) stopping teamd...",
+ nm_device_get_ip_iface (dev));
+ } else {
+ nm_log_dbg (LOGD_TEAM, "Deactivation (%s) stopping teamd (not started)...",
+ nm_device_get_ip_iface (dev));
+ }
+ teamd_cleanup (dev, FALSE);
+}
+
+static NMActStageReturn
+act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
+{
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
+ NMConnection *connection;
+ NMSettingTeam *s_team;
+
+ g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ ret = NM_DEVICE_CLASS (nm_device_team_parent_class)->act_stage1_prepare (dev, reason);
+ if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
+ connection = nm_device_get_connection (dev);
+ g_assert (connection);
+ s_team = nm_connection_get_setting_team (connection);
+ g_assert (s_team);
+ if (teamd_start (dev, s_team))
+ ret = NM_ACT_STAGE_RETURN_POSTPONE;
+ else
+ ret = NM_ACT_STAGE_RETURN_FAILURE;
+ }
+ return ret;
+}
+
+static void
+deactivate (NMDevice *dev)
+{
+ teamd_stop (dev);
+}
+
+static gboolean
+enslave_slave (NMDevice *device,
+ NMDevice *slave,
+ NMConnection *connection,
+ gboolean configure)
+{
+#if WITH_TEAMDCTL
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
+#endif
+ gboolean success = TRUE, no_firmware = FALSE;
+ const char *iface = nm_device_get_ip_iface (device);
+ const char *slave_iface = nm_device_get_ip_iface (slave);
+ NMSettingTeamPort *s_team_port;
+
+ nm_device_master_check_slave_physical_port (device, slave, LOGD_TEAM);
+
+ if (configure) {
+ nm_device_take_down (slave, TRUE);
+
+ s_team_port = nm_connection_get_setting_team_port (connection);
+ if (s_team_port) {
+ const char *config = nm_setting_team_port_get_config (s_team_port);
+
+ if (config) {
+#if WITH_TEAMDCTL
+ if (!priv->tdc) {
+ nm_log_warn (LOGD_TEAM, "(%s): enslaved team port %s config not changed, not connected to teamd",
+ iface, slave_iface);
+ } else {
+ int err;
+ char *sanitized_config;
+
+ sanitized_config = g_strdelimit (g_strdup (config), "\r\n", ' ');
+ err = teamdctl_port_config_update_raw (priv->tdc, slave_iface, sanitized_config);
+ g_free (sanitized_config);
+ if (err != 0) {
+ nm_log_err (LOGD_TEAM, "(%s): failed to update config for port %s (err=%d)",
+ iface, slave_iface, err);
+ return FALSE;
+ }
+ }
+#else
+ nm_log_warn (LOGD_TEAM, "(%s): enslaved team port %s config not changed due to lack of Teamd control support",
+ iface, slave_iface);
+#endif
+ }
+ }
+ success = nm_platform_link_enslave (nm_device_get_ip_ifindex (device),
+ nm_device_get_ip_ifindex (slave));
+ nm_device_bring_up (slave, TRUE, &no_firmware);
+
+ if (!success)
+ return FALSE;
+
+ nm_log_info (LOGD_TEAM, "(%s): enslaved team port %s", iface, slave_iface);
+ } else
+ nm_log_info (LOGD_TEAM, "(%s): team port %s was enslaved", iface, slave_iface);
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_TEAM_SLAVES);
+
+ return TRUE;
+}
+
+static gboolean
+release_slave (NMDevice *device,
+ NMDevice *slave,
+ gboolean configure)
+{
+ gboolean success = TRUE, no_firmware = FALSE;
+
+ if (configure) {
+ success = nm_platform_link_release (nm_device_get_ip_ifindex (device),
+ nm_device_get_ip_ifindex (slave));
+
+ if (success) {
+ nm_log_info (LOGD_TEAM, "(%s): released team port %s",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ } else {
+ nm_log_warn (LOGD_TEAM, "(%s): failed to release team port %s",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ }
+ } else {
+ nm_log_info (LOGD_TEAM, "(%s): team port %s was released",
+ nm_device_get_ip_iface (device),
+ nm_device_get_ip_iface (slave));
+ }
+
+ if (success)
+ g_object_notify (G_OBJECT (device), NM_DEVICE_TEAM_SLAVES);
+
+ if (configure) {
+ /* Kernel team code "closes" the port when releasing it, (which clears
+ * IFF_UP), so we must bring it back up here to ensure carrier changes and
+ * other state is noticed by the now-released port.
+ */
+ if (!nm_device_bring_up (slave, TRUE, &no_firmware)) {
+ nm_log_warn (LOGD_TEAM, "(%s): released team port could not be brought up.",
+ nm_device_get_iface (slave));
+ }
+ }
+
+ return success;
+}
+
+/******************************************************************/
+
+NMDevice *
+nm_device_team_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_TEAM,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_DRIVER, "team",
+ NM_DEVICE_TYPE_DESC, "Team",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_TEAM,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+}
+
+NMDevice *
+nm_device_team_new_for_connection (NMConnection *connection)
+{
+ const char *iface;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+
+ iface = nm_connection_get_virtual_iface_name (connection);
+ g_return_val_if_fail (iface != NULL, NULL);
+
+ if ( !nm_platform_team_add (iface)
+ && nm_platform_get_error () != NM_PLATFORM_ERROR_EXISTS) {
+ nm_log_warn (LOGD_DEVICE | LOGD_TEAM, "(%s): failed to create team master interface for '%s': %s",
+ iface, nm_connection_get_id (connection),
+ nm_platform_get_error_msg ());
+ return NULL;
+ }
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_TEAM,
+ NM_DEVICE_IFACE, iface,
+ NM_DEVICE_DRIVER, "team",
+ NM_DEVICE_TYPE_DESC, "Team",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_TEAM,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+}
+
+static void
+constructed (GObject *object)
+{
+ G_OBJECT_CLASS (nm_device_team_parent_class)->constructed (object);
+
+ nm_log_dbg (LOGD_HW | LOGD_TEAM, "(%s): kernel ifindex %d",
+ nm_device_get_iface (NM_DEVICE (object)),
+ nm_device_get_ifindex (NM_DEVICE (object)));
+}
+
+static void
+nm_device_team_init (NMDeviceTeam * self)
+{
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ GPtrArray *slaves;
+ GSList *list, *iter;
+
+ switch (prop_id) {
+ break;
+ case PROP_SLAVES:
+ slaves = g_ptr_array_new ();
+ list = nm_device_master_get_slaves (NM_DEVICE (object));
+ for (iter = list; iter; iter = iter->next)
+ g_ptr_array_add (slaves, g_strdup (nm_device_get_path (NM_DEVICE (iter->data))));
+ g_slist_free (list);
+ g_value_take_boxed (value, slaves);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ teamd_cleanup (NM_DEVICE (object), FALSE);
+
+ G_OBJECT_CLASS (nm_device_team_parent_class)->dispose (object);
+}
+
+static void
+nm_device_team_class_init (NMDeviceTeamClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMDeviceTeamPrivate));
+
+ parent_class->connection_type = NM_SETTING_TEAM_SETTING_NAME;
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->dispose = dispose;
+
+ parent_class->get_generic_capabilities = get_generic_capabilities;
+ parent_class->is_available = is_available;
+ parent_class->check_connection_compatible = check_connection_compatible;
+ parent_class->check_connection_available = check_connection_available;
+ parent_class->complete_connection = complete_connection;
+ parent_class->update_connection = update_connection;
+
+ parent_class->act_stage1_prepare = act_stage1_prepare;
+ parent_class->deactivate = deactivate;
+ parent_class->enslave_slave = enslave_slave;
+ parent_class->release_slave = release_slave;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_SLAVES,
+ g_param_spec_boxed (NM_DEVICE_TEAM_SLAVES,
+ "Slaves",
+ "Slaves",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_team_object_info);
+
+ dbus_g_error_domain_register (NM_TEAM_ERROR, NULL, NM_TYPE_TEAM_ERROR);
+}
diff --git a/src/devices/nm-device-team.h b/src/devices/nm-device-team.h
new file mode 100644
index 000000000..fe1275c6b
--- /dev/null
+++ b/src/devices/nm-device-team.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef NM_DEVICE_TEAM_H
+#define NM_DEVICE_TEAM_H
+
+#include <glib-object.h>
+
+#include "nm-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_TEAM (nm_device_team_get_type ())
+#define NM_DEVICE_TEAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_TEAM, NMDeviceTeam))
+#define NM_DEVICE_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_TEAM, NMDeviceTeamClass))
+#define NM_IS_DEVICE_TEAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_TEAM))
+#define NM_IS_DEVICE_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_TEAM))
+#define NM_DEVICE_TEAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_TEAM, NMDeviceTeamClass))
+
+typedef enum {
+ NM_TEAM_ERROR_CONNECTION_NOT_TEAM = 0, /*< nick=ConnectionNotTeam >*/
+ NM_TEAM_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
+ NM_TEAM_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
+} NMTeamError;
+
+#define NM_DEVICE_TEAM_SLAVES "slaves"
+
+typedef struct {
+ NMDevice parent;
+} NMDeviceTeam;
+
+typedef struct {
+ NMDeviceClass parent;
+
+} NMDeviceTeamClass;
+
+
+GType nm_device_team_get_type (void);
+
+NMDevice *nm_device_team_new (NMPlatformLink *platform_device);
+NMDevice *nm_device_team_new_for_connection (NMConnection *connection);
+
+gboolean nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_TEAM_H */
diff --git a/src/devices/nm-device-tun.c b/src/devices/nm-device-tun.c
new file mode 100644
index 000000000..d52228f99
--- /dev/null
+++ b/src/devices/nm-device-tun.c
@@ -0,0 +1,294 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "nm-device-tun.h"
+#include "nm-device-private.h"
+#include "nm-dbus-manager.h"
+#include "nm-logging.h"
+#include "nm-platform.h"
+
+#include "nm-device-tun-glue.h"
+
+G_DEFINE_TYPE (NMDeviceTun, nm_device_tun, NM_TYPE_DEVICE_GENERIC)
+
+#define NM_DEVICE_TUN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_TUN, NMDeviceTunPrivate))
+
+typedef struct {
+ NMPlatformTunProperties props;
+ const char *mode;
+ guint delay_tun_get_properties_id;
+} NMDeviceTunPrivate;
+
+enum {
+ PROP_0,
+ PROP_OWNER,
+ PROP_GROUP,
+ PROP_FLAGS,
+ PROP_MODE,
+ PROP_NO_PI,
+ PROP_VNET_HDR,
+ PROP_MULTI_QUEUE,
+
+ LAST_PROP
+};
+
+static void
+reload_tun_properties (NMDeviceTun *device)
+{
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (device);
+ GObject *object = G_OBJECT (device);
+ NMPlatformTunProperties props;
+
+ if (!nm_platform_tun_get_properties (nm_device_get_ifindex (NM_DEVICE (device)), &props)) {
+ nm_log_warn (LOGD_HW, "(%s): could not read tun properties",
+ nm_device_get_iface (NM_DEVICE (device)));
+ return;
+ }
+
+ g_object_freeze_notify (object);
+
+ if (priv->props.owner != props.owner)
+ g_object_notify (object, NM_DEVICE_TUN_OWNER);
+ if (priv->props.group != props.group)
+ g_object_notify (object, NM_DEVICE_TUN_GROUP);
+ if (priv->props.no_pi != props.no_pi)
+ g_object_notify (object, NM_DEVICE_TUN_NO_PI);
+ if (priv->props.vnet_hdr != props.vnet_hdr)
+ g_object_notify (object, NM_DEVICE_TUN_VNET_HDR);
+ if (priv->props.multi_queue != props.multi_queue)
+ g_object_notify (object, NM_DEVICE_TUN_MULTI_QUEUE);
+
+ memcpy (&priv->props, &props, sizeof (NMPlatformTunProperties));
+
+ g_object_thaw_notify (object);
+}
+
+static void
+link_changed (NMDevice *device, NMPlatformLink *info)
+{
+ NM_DEVICE_CLASS (nm_device_tun_parent_class)->link_changed (device, info);
+
+ reload_tun_properties (NM_DEVICE_TUN (device));
+}
+
+static gboolean
+delay_tun_get_properties_cb (gpointer user_data)
+{
+ NMDeviceTun *self = user_data;
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (self);
+
+ priv->delay_tun_get_properties_id = 0;
+
+ reload_tun_properties (self);
+
+ return G_SOURCE_REMOVE;
+}
+
+/**************************************************************/
+
+NMDevice *
+nm_device_tun_new (NMPlatformLink *platform_device)
+{
+ const char *mode = NULL;
+
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ if (platform_device->type == NM_LINK_TYPE_TUN)
+ mode = "tun";
+ else if (platform_device->type == NM_LINK_TYPE_TAP)
+ mode = "tap";
+ g_return_val_if_fail (mode != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_TUN,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_TYPE_DESC, "Tun",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NM_DEVICE_TUN_MODE, mode,
+ NULL);
+}
+
+static void
+nm_device_tun_init (NMDeviceTun *self)
+{
+}
+
+static void
+constructed (GObject *object)
+{
+ gboolean properties_read;
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (object);
+
+ properties_read = nm_platform_tun_get_properties (nm_device_get_ifindex (NM_DEVICE (object)), &priv->props);
+
+ G_OBJECT_CLASS (nm_device_tun_parent_class)->constructed (object);
+
+ if (!properties_read) {
+ /* Error reading the tun properties. Maybe this was due to a race. Try again a bit later. */
+ nm_log_dbg (LOGD_HW, "(%s): could not read tun properties (retry)",
+ nm_device_get_iface (NM_DEVICE (object)));
+ priv->delay_tun_get_properties_id = g_timeout_add_seconds (1, delay_tun_get_properties_cb, object);
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (object);
+
+ if (priv->delay_tun_get_properties_id) {
+ g_source_remove (priv->delay_tun_get_properties_id);
+ priv->delay_tun_get_properties_id = 0;
+ }
+
+ G_OBJECT_CLASS (nm_device_tun_parent_class)->dispose (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDeviceTun *self = NM_DEVICE_TUN (object);
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (self);
+
+ switch (prop_id) {
+ case PROP_OWNER:
+ g_value_set_uint (value, priv->props.owner);
+ break;
+ case PROP_GROUP:
+ g_value_set_uint (value, priv->props.group);
+ break;
+ case PROP_MODE:
+ g_value_set_string (value, priv->mode);
+ break;
+ case PROP_NO_PI:
+ g_value_set_boolean (value, priv->props.no_pi);
+ break;
+ case PROP_VNET_HDR:
+ g_value_set_boolean (value, priv->props.vnet_hdr);
+ break;
+ case PROP_MULTI_QUEUE:
+ g_value_set_boolean (value, priv->props.multi_queue);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMDeviceTun *self = NM_DEVICE_TUN (object);
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (self);
+ const char *str;
+
+ switch (prop_id) {
+ case PROP_MODE:
+ /* construct-only */
+ str = g_value_get_string (value);
+
+ /* mode is G_PARAM_STATIC_STRINGS */
+ if (g_strcmp0 (str, "tun") == 0)
+ priv->mode = "tun";
+ else if (g_strcmp0 (str, "tap") == 0)
+ priv->mode = "tap";
+ else
+ g_return_if_fail (FALSE);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_tun_class_init (NMDeviceTunClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceTunPrivate));
+
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->dispose = dispose;
+
+ device_class->link_changed = link_changed;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_OWNER,
+ g_param_spec_int64 (NM_DEVICE_TUN_OWNER,
+ "Owner",
+ "Owner",
+ -1, G_MAXUINT32, -1,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_GROUP,
+ g_param_spec_int64 (NM_DEVICE_TUN_GROUP,
+ "Group",
+ "Group",
+ -1, G_MAXUINT32, -1,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_MODE,
+ g_param_spec_string (NM_DEVICE_TUN_MODE,
+ "Mode",
+ "Mode",
+ "tun",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_NO_PI,
+ g_param_spec_boolean (NM_DEVICE_TUN_NO_PI,
+ "No Protocol Info",
+ "No Protocol Info",
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_VNET_HDR,
+ g_param_spec_boolean (NM_DEVICE_TUN_VNET_HDR,
+ "Virtio networking header",
+ "Virtio networking header",
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_MULTI_QUEUE,
+ g_param_spec_boolean (NM_DEVICE_TUN_MULTI_QUEUE,
+ "Multi-queue",
+ "Multi-queue",
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_tun_object_info);
+}
diff --git a/src/devices/nm-device-tun.h b/src/devices/nm-device-tun.h
new file mode 100644
index 000000000..cfcf4d7be
--- /dev/null
+++ b/src/devices/nm-device-tun.h
@@ -0,0 +1,59 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_TUN_H
+#define NM_DEVICE_TUN_H
+
+#include <glib-object.h>
+
+#include "nm-device-generic.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_TUN (nm_device_tun_get_type ())
+#define NM_DEVICE_TUN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_TUN, NMDeviceTun))
+#define NM_DEVICE_TUN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_TUN, NMDeviceTunClass))
+#define NM_IS_DEVICE_TUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_TUN))
+#define NM_IS_DEVICE_TUN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_TUN))
+#define NM_DEVICE_TUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_TUN, NMDeviceTunClass))
+
+#define NM_DEVICE_TUN_OWNER "owner"
+#define NM_DEVICE_TUN_GROUP "group"
+#define NM_DEVICE_TUN_MODE "mode"
+#define NM_DEVICE_TUN_NO_PI "no-pi"
+#define NM_DEVICE_TUN_VNET_HDR "vnet-hdr"
+#define NM_DEVICE_TUN_MULTI_QUEUE "multi-queue"
+
+typedef struct {
+ NMDeviceGeneric parent;
+} NMDeviceTun;
+
+typedef struct {
+ NMDeviceGenericClass parent;
+
+} NMDeviceTunClass;
+
+GType nm_device_tun_get_type (void);
+
+NMDevice *nm_device_tun_new (NMPlatformLink *platform_device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_TUN_H */
diff --git a/src/devices/nm-device-veth.c b/src/devices/nm-device-veth.c
new file mode 100644
index 000000000..df1075238
--- /dev/null
+++ b/src/devices/nm-device-veth.c
@@ -0,0 +1,171 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <linux/sockios.h>
+#include <sys/ioctl.h>
+
+#include "nm-device-veth.h"
+#include "nm-device-private.h"
+#include "nm-logging.h"
+#include "nm-manager.h"
+#include "nm-platform.h"
+#include "nm-dbus-manager.h"
+
+#include "nm-device-veth-glue.h"
+
+G_DEFINE_TYPE (NMDeviceVeth, nm_device_veth, NM_TYPE_DEVICE_ETHERNET)
+
+#define NM_DEVICE_VETH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VETH, NMDeviceVethPrivate))
+
+typedef struct {
+ NMDevice *peer;
+ gboolean ever_had_peer;
+} NMDeviceVethPrivate;
+
+enum {
+ PROP_0,
+ PROP_PEER,
+
+ LAST_PROP
+};
+
+/**************************************************************/
+
+static void
+set_peer (NMDeviceVeth *self, NMDevice *peer)
+{
+ NMDeviceVethPrivate *priv = NM_DEVICE_VETH_GET_PRIVATE (self);
+
+ if (!priv->peer) {
+ priv->ever_had_peer = TRUE;
+ priv->peer = peer;
+ g_object_add_weak_pointer (G_OBJECT (peer), (gpointer *) &priv->peer);
+
+ g_object_notify (G_OBJECT (self), NM_DEVICE_VETH_PEER);
+ }
+}
+
+static NMDevice *
+get_peer (NMDeviceVeth *self)
+{
+ NMDeviceVethPrivate *priv = NM_DEVICE_VETH_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (self), *peer = NULL;
+ NMPlatformVethProperties props;
+
+ if (priv->ever_had_peer)
+ return priv->peer;
+
+ if (!nm_platform_veth_get_properties (nm_device_get_ifindex (device), &props)) {
+ nm_log_warn (LOGD_HW, "(%s): could not read veth properties",
+ nm_device_get_iface (device));
+ return NULL;
+ }
+
+ peer = nm_manager_get_device_by_ifindex (nm_manager_get (), props.peer);
+ if (peer && NM_IS_DEVICE_VETH (peer)) {
+ set_peer (self, peer);
+ set_peer (NM_DEVICE_VETH (peer), device);
+ }
+
+ return priv->peer;
+}
+
+
+/**************************************************************/
+
+NMDevice *
+nm_device_veth_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_VETH,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_TYPE_DESC, "Veth",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_ETHERNET,
+ NULL);
+}
+
+static void
+nm_device_veth_init (NMDeviceVeth *self)
+{
+ nm_device_set_initial_unmanaged_flag (NM_DEVICE (self), NM_UNMANAGED_DEFAULT, TRUE);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceVeth *self = NM_DEVICE_VETH (object);
+ NMDeviceVethPrivate *priv = NM_DEVICE_VETH_GET_PRIVATE (self);
+
+ if (priv->peer) {
+ g_object_remove_weak_pointer (G_OBJECT (priv->peer), (gpointer *) &priv->peer);
+ priv->peer = NULL;
+ }
+
+ G_OBJECT_CLASS (nm_device_veth_parent_class)->dispose (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDeviceVeth *self = NM_DEVICE_VETH (object);
+ NMDevice *peer;
+
+ switch (prop_id) {
+ case PROP_PEER:
+ peer = get_peer (self);
+ g_value_set_boxed (value, peer ? nm_device_get_path (peer) : "/");
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_veth_class_init (NMDeviceVethClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceVethPrivate));
+
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_PEER,
+ g_param_spec_boxed (NM_DEVICE_VETH_PEER,
+ "Peer",
+ "Peer device",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_veth_object_info);
+}
diff --git a/src/devices/nm-device-veth.h b/src/devices/nm-device-veth.h
new file mode 100644
index 000000000..bc8fedffd
--- /dev/null
+++ b/src/devices/nm-device-veth.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_VETH_H
+#define NM_DEVICE_VETH_H
+
+#include <glib-object.h>
+
+#include "nm-device-ethernet.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_VETH (nm_device_veth_get_type ())
+#define NM_DEVICE_VETH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_VETH, NMDeviceVeth))
+#define NM_DEVICE_VETH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_VETH, NMDeviceVethClass))
+#define NM_IS_DEVICE_VETH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_VETH))
+#define NM_IS_DEVICE_VETH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_VETH))
+#define NM_DEVICE_VETH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_VETH, NMDeviceVethClass))
+
+#define NM_DEVICE_VETH_PEER "peer"
+
+typedef struct {
+ NMDeviceEthernet parent;
+} NMDeviceVeth;
+
+typedef struct {
+ NMDeviceEthernetClass parent;
+
+} NMDeviceVethClass;
+
+GType nm_device_veth_get_type (void);
+
+NMDevice *nm_device_veth_new (NMPlatformLink *platform_device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_VETH_H */
diff --git a/src/devices/nm-device-vlan.c b/src/devices/nm-device-vlan.c
new file mode 100644
index 000000000..348be3528
--- /dev/null
+++ b/src/devices/nm-device-vlan.c
@@ -0,0 +1,659 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2011 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <sys/socket.h>
+#include <linux/if.h>
+#include <netinet/ether.h>
+
+#include "nm-device-vlan.h"
+#include "nm-manager.h"
+#include "nm-logging.h"
+#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
+#include "nm-device-private.h"
+#include "nm-enum-types.h"
+#include "nm-dbus-manager.h"
+#include "nm-platform.h"
+#include "nm-utils.h"
+
+#include "nm-device-vlan-glue.h"
+
+
+G_DEFINE_TYPE (NMDeviceVlan, nm_device_vlan, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VLAN, NMDeviceVlanPrivate))
+
+#define NM_VLAN_ERROR (nm_vlan_error_quark ())
+
+typedef struct {
+ guint8 initial_hw_addr[ETH_ALEN];
+
+ gboolean disposed;
+ gboolean invalid;
+
+ NMDevice *parent;
+ guint parent_state_id;
+
+ int vlan_id;
+} NMDeviceVlanPrivate;
+
+enum {
+ PROP_0,
+ PROP_PARENT,
+ PROP_VLAN_ID,
+
+ LAST_PROP
+};
+
+/******************************************************************/
+
+static GQuark
+nm_vlan_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-vlan-error");
+ return quark;
+}
+
+/******************************************************************/
+
+static void
+update_initial_hw_address (NMDevice *dev)
+{
+ NMDeviceVlan *self = NM_DEVICE_VLAN (dev);
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
+ char *mac_str;
+
+ memcpy (priv->initial_hw_addr, nm_device_get_hw_address (dev, NULL), ETH_ALEN);
+
+ mac_str = nm_utils_hwaddr_ntoa (priv->initial_hw_addr, ARPHRD_ETHER);
+ nm_log_dbg (LOGD_DEVICE | LOGD_VLAN, "(%s): read initial MAC address %s",
+ nm_device_get_iface (dev), mac_str);
+ g_free (mac_str);
+}
+
+static guint32
+get_generic_capabilities (NMDevice *dev)
+{
+ /* We assume VLAN interfaces always support carrier detect */
+ return NM_DEVICE_CAP_CARRIER_DETECT;
+}
+
+static gboolean
+bring_up (NMDevice *dev, gboolean *no_firmware)
+{
+ gboolean success = FALSE;
+ guint i = 20;
+
+ while (i-- > 0 && !success) {
+ success = NM_DEVICE_CLASS (nm_device_vlan_parent_class)->bring_up (dev, no_firmware);
+ g_usleep (50);
+ }
+
+ return success;
+}
+
+/******************************************************************/
+
+static gboolean
+match_parent (NMDeviceVlan *self, const char *parent)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
+
+ g_return_val_if_fail (parent != NULL, FALSE);
+
+ if (nm_utils_is_uuid (parent)) {
+ NMActRequest *parent_req;
+ NMConnection *parent_connection;
+
+ /* If the parent is a UUID, the connection matches if our parent
+ * device has that connection activated.
+ */
+
+ parent_req = nm_device_get_act_request (priv->parent);
+ if (!parent_req)
+ return FALSE;
+
+ parent_connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (parent_req));
+ if (!parent_connection)
+ return FALSE;
+
+ if (g_strcmp0 (parent, nm_connection_get_uuid (parent_connection)) != 0)
+ return FALSE;
+ } else {
+ /* interface name */
+ if (g_strcmp0 (parent, nm_device_get_ip_iface (priv->parent)) != 0)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+match_hwaddr (NMDevice *device, NMConnection *connection, gboolean fail_if_no_hwaddr)
+{
+ NMSettingWired *s_wired;
+ const GByteArray *mac;
+ const guint8 *device_mac;
+ guint device_mac_len;
+
+ s_wired = nm_connection_get_setting_wired (connection);
+ if (!s_wired)
+ return !fail_if_no_hwaddr;
+
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ if (!mac)
+ return !fail_if_no_hwaddr;
+
+ device_mac = nm_device_get_hw_address (device, &device_mac_len);
+
+ return ( mac->len == device_mac_len
+ && memcmp (mac->data, device_mac, device_mac_len) == 0);
+}
+
+static gboolean
+check_connection_compatible (NMDevice *device, NMConnection *connection)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
+ NMSettingVlan *s_vlan;
+ const char *parent, *iface = NULL;
+
+ if (!NM_DEVICE_CLASS (nm_device_vlan_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ if (!s_vlan)
+ return FALSE;
+
+ if (nm_setting_vlan_get_id (s_vlan) != priv->vlan_id)
+ return FALSE;
+
+ /* Check parent interface; could be an interface name or a UUID */
+ parent = nm_setting_vlan_get_parent (s_vlan);
+ if (parent) {
+ if (!match_parent (NM_DEVICE_VLAN (device), parent))
+ return FALSE;
+ } else {
+ /* Parent could be a MAC address in an NMSettingWired */
+ if (!match_hwaddr (device, connection, TRUE))
+ return FALSE;
+ }
+
+ /* Ensure the interface name matches. If not specified we assume a match
+ * since both the parent interface and the VLAN ID matched by the time we
+ * get here.
+ */
+ iface = nm_connection_get_virtual_iface_name (connection);
+ if (iface) {
+ if (g_strcmp0 (nm_device_get_ip_iface (device), iface) != 0)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+complete_connection (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object,
+ const GSList *existing_connections,
+ GError **error)
+{
+ NMSettingVlan *s_vlan;
+
+ nm_utils_complete_generic (connection,
+ NM_SETTING_VLAN_SETTING_NAME,
+ existing_connections,
+ _("VLAN connection %d"),
+ NULL,
+ TRUE);
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ if (!s_vlan) {
+ g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
+ "A 'vlan' setting is required.");
+ return FALSE;
+ }
+
+ /* If there's no VLAN interface, no parent, and no hardware address in the
+ * settings, then there's not enough information to complete the setting.
+ */
+ if ( !nm_setting_vlan_get_parent (s_vlan)
+ && !match_hwaddr (device, connection, TRUE)) {
+ g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
+ "The 'vlan' setting had no interface name, parent, or hardware address.");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void parent_state_changed (NMDevice *parent, NMDeviceState new_state,
+ NMDeviceState old_state,
+ NMDeviceStateReason reason,
+ gpointer user_data);
+
+static void
+nm_device_vlan_set_parent (NMDeviceVlan *device, NMDevice *parent)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
+
+ if (priv->parent_state_id) {
+ g_signal_handler_disconnect (priv->parent, priv->parent_state_id);
+ priv->parent_state_id = 0;
+ }
+ g_clear_object (&priv->parent);
+
+ if (parent) {
+ priv->parent = g_object_ref (parent);
+ priv->parent_state_id = g_signal_connect (priv->parent,
+ "state-changed",
+ G_CALLBACK (parent_state_changed),
+ device);
+ }
+ g_object_notify (G_OBJECT (device), NM_DEVICE_VLAN_PARENT);
+}
+
+static void
+update_connection (NMDevice *device, NMConnection *connection)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
+ NMSettingVlan *s_vlan = nm_connection_get_setting_vlan (connection);
+ int ifindex = nm_device_get_ifindex (device);
+ int parent_ifindex = -1, vlan_id = -1;
+ NMDevice *parent;
+ const char *setting_parent, *new_parent;
+
+ if (!s_vlan) {
+ s_vlan = (NMSettingVlan *) nm_setting_vlan_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_vlan);
+ g_object_set (s_vlan, NM_SETTING_VLAN_INTERFACE_NAME, nm_device_get_iface (device), NULL);
+ }
+
+ if (!nm_platform_vlan_get_info (ifindex, &parent_ifindex, &vlan_id)) {
+ nm_log_warn (LOGD_VLAN, "(%s): failed to get VLAN interface info while updating connection.",
+ nm_device_get_iface (device));
+ return;
+ }
+
+ if (priv->vlan_id != vlan_id) {
+ priv->vlan_id = vlan_id;
+ g_object_notify (G_OBJECT (device), NM_DEVICE_VLAN_ID);
+ }
+
+ if (vlan_id != nm_setting_vlan_get_id (s_vlan))
+ g_object_set (s_vlan, NM_SETTING_VLAN_ID, priv->vlan_id, NULL);
+
+ parent = nm_manager_get_device_by_ifindex (nm_manager_get (), parent_ifindex);
+ g_assert (parent);
+ if (priv->parent != parent)
+ nm_device_vlan_set_parent (NM_DEVICE_VLAN (device), parent);
+
+ /* Update parent in the connection; default to parent's interface name */
+ new_parent = nm_device_get_iface (parent);
+ setting_parent = nm_setting_vlan_get_parent (s_vlan);
+ if (setting_parent && nm_utils_is_uuid (setting_parent)) {
+ NMConnection *parent_connection;
+
+ /* Don't change a parent specified by UUID if it's still valid */
+ parent_connection = nm_connection_provider_get_connection_by_uuid (nm_connection_provider_get (), setting_parent);
+ if (parent_connection && nm_device_check_connection_compatible (parent, parent_connection))
+ new_parent = NULL;
+ }
+ if (new_parent)
+ g_object_set (s_vlan, NM_SETTING_VLAN_PARENT, new_parent, NULL);
+}
+
+static NMActStageReturn
+act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
+{
+ NMActRequest *req;
+ NMConnection *connection;
+ NMSettingVlan *s_vlan;
+ NMSettingWired *s_wired;
+ const GByteArray *cloned_mac;
+ NMActStageReturn ret;
+
+ g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ ret = NM_DEVICE_CLASS (nm_device_vlan_parent_class)->act_stage1_prepare (dev, reason);
+ if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
+ return ret;
+
+ req = nm_device_get_act_request (dev);
+ g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ connection = nm_act_request_get_connection (req);
+ g_return_val_if_fail (connection != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ s_wired = nm_connection_get_setting_wired (connection);
+ if (s_wired) {
+ /* Set device MAC address if the connection wants to change it */
+ cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
+ if (cloned_mac && (cloned_mac->len == ETH_ALEN))
+ nm_device_set_hw_addr (dev, (const guint8 *) cloned_mac->data, "set", LOGD_VLAN);
+ }
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ if (s_vlan) {
+ int ifindex = nm_device_get_ifindex (dev);
+ int num, i;
+ guint32 from, to;
+
+ num = nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_INGRESS_MAP);
+ for (i = 0; i < num; i++) {
+ if (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_INGRESS_MAP, i, &from, &to))
+ nm_platform_vlan_set_ingress_map (ifindex, from, to);
+ }
+ num = nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_EGRESS_MAP);
+ for (i = 0; i < num; i++) {
+ if (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, i, &from, &to))
+ nm_platform_vlan_set_egress_map (ifindex, from, to);
+ }
+ }
+
+ return ret;
+}
+
+static void
+ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
+{
+ NMConnection *connection;
+ NMSettingWired *s_wired;
+ guint32 mtu;
+
+ connection = nm_device_get_connection (device);
+ g_assert (connection);
+
+ s_wired = nm_connection_get_setting_wired (connection);
+ if (s_wired) {
+ mtu = nm_setting_wired_get_mtu (s_wired);
+ if (mtu)
+ nm_ip4_config_set_mtu (config, mtu);
+ }
+}
+
+static void
+deactivate (NMDevice *device)
+{
+ NMDeviceVlan *self = NM_DEVICE_VLAN (device);
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
+
+ /* Reset MAC address back to initial address */
+ nm_device_set_hw_addr (device, priv->initial_hw_addr, "reset", LOGD_VLAN);
+}
+
+/******************************************************************/
+
+static void
+parent_state_changed (NMDevice *parent,
+ NMDeviceState new_state,
+ NMDeviceState old_state,
+ NMDeviceStateReason reason,
+ gpointer user_data)
+{
+ NMDeviceVlan *self = NM_DEVICE_VLAN (user_data);
+
+ /* We'll react to our own carrier state notifications. Ignore the parent's. */
+ if (reason == NM_DEVICE_STATE_REASON_CARRIER)
+ return;
+
+ if (new_state < NM_DEVICE_STATE_DISCONNECTED) {
+ /* If the parent becomes unavailable or unmanaged so does the VLAN */
+ nm_device_state_changed (NM_DEVICE (self), new_state, reason);
+ } else if ( new_state == NM_DEVICE_STATE_DISCONNECTED
+ && old_state < NM_DEVICE_STATE_DISCONNECTED) {
+ /* Mark VLAN interface as available/disconnected when the parent
+ * becomes available as a result of becoming initialized.
+ */
+ nm_device_state_changed (NM_DEVICE (self), new_state, reason);
+ }
+}
+
+/******************************************************************/
+
+NMDevice *
+nm_device_vlan_new (NMPlatformLink *platform_device, NMDevice *parent)
+{
+ NMDevice *device;
+
+ g_return_val_if_fail (platform_device != NULL, NULL);
+ g_return_val_if_fail (NM_IS_DEVICE (parent), NULL);
+
+ device = (NMDevice *) g_object_new (NM_TYPE_DEVICE_VLAN,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_VLAN_PARENT, parent,
+ NM_DEVICE_DRIVER, "8021q",
+ NM_DEVICE_TYPE_DESC, "VLAN",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_VLAN,
+ NULL);
+ if (NM_DEVICE_VLAN_GET_PRIVATE (device)->invalid) {
+ g_object_unref (device);
+ device = NULL;
+ }
+
+ return device;
+}
+
+NMDevice *
+nm_device_vlan_new_for_connection (NMConnection *connection, NMDevice *parent)
+{
+ NMDevice *device;
+ NMSettingVlan *s_vlan;
+ char *iface;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+ g_return_val_if_fail (NM_IS_DEVICE (parent), NULL);
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ g_return_val_if_fail (s_vlan != NULL, NULL);
+
+ iface = g_strdup (nm_connection_get_virtual_iface_name (connection));
+ if (!iface) {
+ iface = nm_utils_new_vlan_name (nm_device_get_ip_iface (parent),
+ nm_setting_vlan_get_id (s_vlan));
+ }
+
+ if ( !nm_platform_vlan_add (iface,
+ nm_device_get_ifindex (parent),
+ nm_setting_vlan_get_id (s_vlan),
+ nm_setting_vlan_get_flags (s_vlan))
+ && nm_platform_get_error () != NM_PLATFORM_ERROR_EXISTS) {
+ nm_log_warn (LOGD_DEVICE | LOGD_VLAN, "(%s): failed to add VLAN interface for '%s'",
+ iface, nm_connection_get_id (connection));
+ g_free (iface);
+ return NULL;
+ }
+
+ device = (NMDevice *) g_object_new (NM_TYPE_DEVICE_VLAN,
+ NM_DEVICE_IFACE, iface,
+ NM_DEVICE_VLAN_PARENT, parent,
+ NM_DEVICE_DRIVER, "8021q",
+ NM_DEVICE_TYPE_DESC, "VLAN",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_VLAN,
+ NULL);
+ g_free (iface);
+ if (NM_DEVICE_VLAN_GET_PRIVATE (device)->invalid) {
+ g_object_unref (device);
+ device = NULL;
+ }
+
+ return device;
+}
+
+static void
+nm_device_vlan_init (NMDeviceVlan * self)
+{
+}
+
+static void
+constructed (GObject *object)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
+ NMDevice *device = NM_DEVICE (object);
+ const char *iface = nm_device_get_iface (device);
+ int ifindex = nm_device_get_ifindex (device);
+ int parent_ifindex = -1, itype;
+ int vlan_id;
+
+ if (G_OBJECT_CLASS (nm_device_vlan_parent_class)->constructed)
+ G_OBJECT_CLASS (nm_device_vlan_parent_class)->constructed (object);
+
+ if (!priv->parent) {
+ nm_log_err (LOGD_VLAN, "(%s): no parent specified.", iface);
+ priv->invalid = TRUE;
+ return;
+ }
+
+ itype = nm_platform_link_get_type (ifindex);
+ if (itype != NM_LINK_TYPE_VLAN) {
+ nm_log_err (LOGD_VLAN, "(%s): failed to get VLAN interface type.", iface);
+ priv->invalid = TRUE;
+ return;
+ }
+
+ if (!nm_platform_vlan_get_info (ifindex, &parent_ifindex, &vlan_id)) {
+ nm_log_warn (LOGD_VLAN, "(%s): failed to get VLAN interface info.", iface);
+ priv->invalid = TRUE;
+ return;
+ }
+
+ if ( parent_ifindex < 0
+ || parent_ifindex != nm_device_get_ip_ifindex (priv->parent)
+ || vlan_id < 0) {
+ nm_log_warn (LOGD_VLAN, "(%s): VLAN parent ifindex (%d) or VLAN ID (%d) invalid.",
+ iface, parent_ifindex, priv->vlan_id);
+ priv->invalid = TRUE;
+ return;
+ }
+
+ priv->vlan_id = vlan_id;
+ nm_log_dbg (LOGD_HW | LOGD_VLAN, "(%s): kernel ifindex %d", iface, ifindex);
+ nm_log_info (LOGD_HW | LOGD_VLAN, "(%s): VLAN ID %d with parent %s",
+ iface, priv->vlan_id, nm_device_get_iface (priv->parent));
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_VLAN_ID:
+ g_value_set_uint (value, priv->vlan_id);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ nm_device_vlan_set_parent (NM_DEVICE_VLAN (object), g_value_get_object (value));
+ break;
+ case PROP_VLAN_ID:
+ priv->vlan_id = g_value_get_uint (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceVlan *self = NM_DEVICE_VLAN (object);
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
+
+ if (priv->disposed) {
+ G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
+ return;
+ }
+ priv->disposed = TRUE;
+
+ nm_device_vlan_set_parent (self, NULL);
+
+ G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
+}
+
+static void
+nm_device_vlan_class_init (NMDeviceVlanClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
+
+ parent_class->connection_type = NM_SETTING_VLAN_SETTING_NAME;
+
+ g_type_class_add_private (object_class, sizeof (NMDeviceVlanPrivate));
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->dispose = dispose;
+
+ parent_class->update_initial_hw_address = update_initial_hw_address;
+ parent_class->get_generic_capabilities = get_generic_capabilities;
+ parent_class->bring_up = bring_up;
+ parent_class->act_stage1_prepare = act_stage1_prepare;
+ parent_class->ip4_config_pre_commit = ip4_config_pre_commit;
+ parent_class->deactivate = deactivate;
+
+ parent_class->check_connection_compatible = check_connection_compatible;
+ parent_class->complete_connection = complete_connection;
+ parent_class->update_connection = update_connection;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_object (NM_DEVICE_VLAN_PARENT,
+ "Parent",
+ "Parent",
+ NM_TYPE_DEVICE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property
+ (object_class, PROP_VLAN_ID,
+ g_param_spec_uint (NM_DEVICE_VLAN_ID,
+ "VLAN ID",
+ "VLAN ID",
+ 0, 4095, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_vlan_object_info);
+
+ dbus_g_error_domain_register (NM_VLAN_ERROR, NULL, NM_TYPE_VLAN_ERROR);
+}
diff --git a/src/nm-device-vlan.h b/src/devices/nm-device-vlan.h
index 7c5fa24c9..0f2ac70d5 100644
--- a/src/nm-device-vlan.h
+++ b/src/devices/nm-device-vlan.h
@@ -23,7 +23,7 @@
#include <glib-object.h>
-#include "nm-device-wired.h"
+#include "nm-device.h"
G_BEGIN_DECLS
@@ -40,8 +40,7 @@ typedef enum {
NM_VLAN_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMVlanError;
-#define NM_DEVICE_VLAN_HW_ADDRESS "hw-address"
-#define NM_DEVICE_VLAN_CARRIER "carrier"
+#define NM_DEVICE_VLAN_PARENT "parent"
#define NM_DEVICE_VLAN_ID "vlan-id"
typedef struct {
@@ -51,16 +50,15 @@ typedef struct {
typedef struct {
NMDeviceClass parent;
- /* Signals */
- void (*properties_changed) (NMDeviceVlan *device, GHashTable *properties);
} NMDeviceVlanClass;
GType nm_device_vlan_get_type (void);
-NMDevice *nm_device_vlan_new (const char *udi,
- const char *iface,
- NMDevice *parent);
+NMDevice *nm_device_vlan_new (NMPlatformLink *platform_link,
+ NMDevice *parent);
+NMDevice *nm_device_vlan_new_for_connection (NMConnection *connection,
+ NMDevice *parent);
G_END_DECLS
diff --git a/src/devices/nm-device-vxlan.c b/src/devices/nm-device-vxlan.c
new file mode 100644
index 000000000..0be57106e
--- /dev/null
+++ b/src/devices/nm-device-vxlan.c
@@ -0,0 +1,372 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013, 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-device-vxlan.h"
+#include "nm-device-private.h"
+#include "nm-dbus-manager.h"
+#include "nm-logging.h"
+#include "nm-manager.h"
+#include "nm-platform.h"
+#include "nm-utils.h"
+
+#include "nm-device-vxlan-glue.h"
+
+G_DEFINE_TYPE (NMDeviceVxlan, nm_device_vxlan, NM_TYPE_DEVICE_GENERIC)
+
+#define NM_DEVICE_VXLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VXLAN, NMDeviceVxlanPrivate))
+
+typedef struct {
+ NMPlatformVxlanProperties props;
+} NMDeviceVxlanPrivate;
+
+enum {
+ PROP_0,
+ PROP_PARENT,
+ PROP_ID,
+ PROP_GROUP,
+ PROP_LOCAL,
+ PROP_TOS,
+ PROP_TTL,
+ PROP_LEARNING,
+ PROP_AGEING,
+ PROP_LIMIT,
+ PROP_DST_PORT,
+ PROP_SRC_PORT_MIN,
+ PROP_SRC_PORT_MAX,
+ PROP_PROXY,
+ PROP_RSC,
+ PROP_L2MISS,
+ PROP_L3MISS,
+
+ LAST_PROP
+};
+
+/**************************************************************/
+
+static void
+update_properties (NMDevice *device)
+{
+ NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (device);
+ GObject *object = G_OBJECT (device);
+ NMPlatformVxlanProperties props;
+
+ if (!nm_platform_vxlan_get_properties (nm_device_get_ifindex (device), &props)) {
+ nm_log_warn (LOGD_HW, "(%s): could not read vxlan properties",
+ nm_device_get_iface (device));
+ return;
+ }
+
+ g_object_freeze_notify (object);
+
+ if (priv->props.parent_ifindex != props.parent_ifindex)
+ g_object_notify (object, NM_DEVICE_VXLAN_PARENT);
+ if (priv->props.id != props.id)
+ g_object_notify (object, NM_DEVICE_VXLAN_ID);
+ if (priv->props.group != props.group)
+ g_object_notify (object, NM_DEVICE_VXLAN_GROUP);
+ if (priv->props.local != props.local)
+ g_object_notify (object, NM_DEVICE_VXLAN_LOCAL);
+ if (memcmp (&priv->props.group6, &props.group6, sizeof (props.group6)) != 0)
+ g_object_notify (object, NM_DEVICE_VXLAN_GROUP);
+ if (memcmp (&priv->props.local6, &props.local6, sizeof (props.local6)) != 0)
+ g_object_notify (object, NM_DEVICE_VXLAN_LOCAL);
+ if (priv->props.tos != props.tos)
+ g_object_notify (object, NM_DEVICE_VXLAN_TOS);
+ if (priv->props.ttl != props.ttl)
+ g_object_notify (object, NM_DEVICE_VXLAN_TTL);
+ if (priv->props.learning != props.learning)
+ g_object_notify (object, NM_DEVICE_VXLAN_LEARNING);
+ if (priv->props.ageing != props.ageing)
+ g_object_notify (object, NM_DEVICE_VXLAN_AGEING);
+ if (priv->props.limit != props.limit)
+ g_object_notify (object, NM_DEVICE_VXLAN_LIMIT);
+ if (priv->props.dst_port != props.dst_port)
+ g_object_notify (object, NM_DEVICE_VXLAN_DST_PORT);
+ if (priv->props.src_port_min != props.src_port_min)
+ g_object_notify (object, NM_DEVICE_VXLAN_SRC_PORT_MIN);
+ if (priv->props.src_port_max != props.src_port_max)
+ g_object_notify (object, NM_DEVICE_VXLAN_SRC_PORT_MAX);
+ if (priv->props.proxy != props.proxy)
+ g_object_notify (object, NM_DEVICE_VXLAN_PROXY);
+ if (priv->props.rsc != props.rsc)
+ g_object_notify (object, NM_DEVICE_VXLAN_RSC);
+ if (priv->props.l2miss != props.l2miss)
+ g_object_notify (object, NM_DEVICE_VXLAN_L2MISS);
+ if (priv->props.l3miss != props.l3miss)
+ g_object_notify (object, NM_DEVICE_VXLAN_L3MISS);
+
+ memcpy (&priv->props, &props, sizeof (NMPlatformVxlanProperties));
+
+ g_object_thaw_notify (object);
+}
+
+static void
+link_changed (NMDevice *device, NMPlatformLink *info)
+{
+ NM_DEVICE_CLASS (nm_device_vxlan_parent_class)->link_changed (device, info);
+ update_properties (device);
+}
+
+/**************************************************************/
+
+NMDevice *
+nm_device_vxlan_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_VXLAN,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_TYPE_DESC, "Vxlan",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NULL);
+}
+
+static void
+nm_device_vxlan_init (NMDeviceVxlan *self)
+{
+}
+
+static void
+constructed (GObject *object)
+{
+ update_properties (NM_DEVICE (object));
+
+ G_OBJECT_CLASS (nm_device_vxlan_parent_class)->constructed (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (object);
+ NMDevice *parent;
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ parent = nm_manager_get_device_by_ifindex (nm_manager_get (), priv->props.parent_ifindex);
+ g_value_set_boxed (value, parent ? nm_device_get_path (parent) : "/");
+ break;
+ case PROP_ID:
+ g_value_set_uint (value, priv->props.id);
+ break;
+ case PROP_GROUP:
+ if (priv->props.group)
+ g_value_set_string (value, nm_utils_inet4_ntop (priv->props.group, NULL));
+ else if (!IN6_IS_ADDR_UNSPECIFIED (&priv->props.group6))
+ g_value_set_string (value, nm_utils_inet6_ntop (&priv->props.group6, NULL));
+ break;
+ case PROP_LOCAL:
+ if (priv->props.local)
+ g_value_set_string (value, nm_utils_inet4_ntop (priv->props.local, NULL));
+ else if (!IN6_IS_ADDR_UNSPECIFIED (&priv->props.local6))
+ g_value_set_string (value, nm_utils_inet6_ntop (&priv->props.local6, NULL));
+ break;
+ case PROP_TOS:
+ g_value_set_uchar (value, priv->props.tos);
+ break;
+ case PROP_TTL:
+ g_value_set_uchar (value, priv->props.ttl);
+ break;
+ case PROP_LEARNING:
+ g_value_set_boolean (value, priv->props.learning);
+ break;
+ case PROP_AGEING:
+ g_value_set_uint (value, priv->props.ageing);
+ break;
+ case PROP_LIMIT:
+ g_value_set_uint (value, priv->props.limit);
+ break;
+ case PROP_DST_PORT:
+ g_value_set_uint (value, priv->props.dst_port);
+ break;
+ case PROP_SRC_PORT_MIN:
+ g_value_set_uint (value, priv->props.src_port_min);
+ break;
+ case PROP_SRC_PORT_MAX:
+ g_value_set_uint (value, priv->props.src_port_max);
+ break;
+ case PROP_PROXY:
+ g_value_set_uint (value, priv->props.proxy);
+ break;
+ case PROP_RSC:
+ g_value_set_boolean (value, priv->props.rsc);
+ break;
+ case PROP_L2MISS:
+ g_value_set_boolean (value, priv->props.l2miss);
+ break;
+ case PROP_L3MISS:
+ g_value_set_boolean (value, priv->props.l3miss);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_vxlan_class_init (NMDeviceVxlanClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceVxlanPrivate));
+
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+
+ device_class->link_changed = link_changed;
+
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_boxed (NM_DEVICE_VXLAN_PARENT,
+ "Parent",
+ "Parent device",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_ID,
+ g_param_spec_uint (NM_DEVICE_VXLAN_ID,
+ "Id",
+ "Id",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_GROUP,
+ g_param_spec_string (NM_DEVICE_VXLAN_GROUP,
+ "Group",
+ "Group",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_LOCAL,
+ g_param_spec_string (NM_DEVICE_VXLAN_LOCAL,
+ "Local",
+ "Local",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_TOS,
+ g_param_spec_uchar (NM_DEVICE_VXLAN_TOS,
+ "ToS",
+ "ToS",
+ 0, 255, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_TTL,
+ g_param_spec_uchar (NM_DEVICE_VXLAN_TTL,
+ "TTL",
+ "TTL",
+ 0, 255, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_LEARNING,
+ g_param_spec_boolean (NM_DEVICE_VXLAN_LEARNING,
+ "Learning",
+ "Learning",
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_AGEING,
+ g_param_spec_uint (NM_DEVICE_VXLAN_AGEING,
+ "Ageing",
+ "Ageing",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_LIMIT,
+ g_param_spec_uint (NM_DEVICE_VXLAN_LIMIT,
+ "Limit",
+ "Limit",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_DST_PORT,
+ g_param_spec_uint (NM_DEVICE_VXLAN_DST_PORT,
+ "Destination port",
+ "Destination port",
+ 0, 65535, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_SRC_PORT_MIN,
+ g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MIN,
+ "Source port min",
+ "Minimum source port",
+ 0, 65535, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_SRC_PORT_MAX,
+ g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MAX,
+ "Source port max",
+ "Maximum source port",
+ 0, 65535, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_PROXY,
+ g_param_spec_boolean (NM_DEVICE_VXLAN_PROXY,
+ "Proxy",
+ "Proxy",
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_RSC,
+ g_param_spec_boolean (NM_DEVICE_VXLAN_RSC,
+ "RSC",
+ "RSC",
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_L2MISS,
+ g_param_spec_boolean (NM_DEVICE_VXLAN_L2MISS,
+ "L2miss",
+ "L2miss",
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_L3MISS,
+ g_param_spec_boolean (NM_DEVICE_VXLAN_L3MISS,
+ "L3miss",
+ "L3miss",
+ FALSE,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_vxlan_object_info);
+}
diff --git a/src/devices/nm-device-vxlan.h b/src/devices/nm-device-vxlan.h
new file mode 100644
index 000000000..14b158ded
--- /dev/null
+++ b/src/devices/nm-device-vxlan.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2013, 2014 Red Hat, Inc.
+ */
+
+#ifndef NM_DEVICE_VXLAN_H
+#define NM_DEVICE_VXLAN_H
+
+#include <glib-object.h>
+
+#include "nm-device-generic.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_VXLAN (nm_device_vxlan_get_type ())
+#define NM_DEVICE_VXLAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_VXLAN, NMDeviceVxlan))
+#define NM_DEVICE_VXLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_VXLAN, NMDeviceVxlanClass))
+#define NM_IS_DEVICE_VXLAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_VXLAN))
+#define NM_IS_DEVICE_VXLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_VXLAN))
+#define NM_DEVICE_VXLAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_VXLAN, NMDeviceVxlanClass))
+
+#define NM_DEVICE_VXLAN_PARENT "parent"
+#define NM_DEVICE_VXLAN_ID "id"
+#define NM_DEVICE_VXLAN_GROUP "group"
+#define NM_DEVICE_VXLAN_LOCAL "local"
+#define NM_DEVICE_VXLAN_TOS "tos"
+#define NM_DEVICE_VXLAN_TTL "ttl"
+#define NM_DEVICE_VXLAN_LEARNING "learning"
+#define NM_DEVICE_VXLAN_AGEING "ageing"
+#define NM_DEVICE_VXLAN_LIMIT "limit"
+#define NM_DEVICE_VXLAN_DST_PORT "dst-port"
+#define NM_DEVICE_VXLAN_SRC_PORT_MIN "src-port-min"
+#define NM_DEVICE_VXLAN_SRC_PORT_MAX "src-port-max"
+#define NM_DEVICE_VXLAN_PROXY "proxy"
+#define NM_DEVICE_VXLAN_RSC "rsc"
+#define NM_DEVICE_VXLAN_L2MISS "l2miss"
+#define NM_DEVICE_VXLAN_L3MISS "l3miss"
+
+typedef struct {
+ NMDeviceGeneric parent;
+} NMDeviceVxlan;
+
+typedef struct {
+ NMDeviceGenericClass parent;
+
+} NMDeviceVxlanClass;
+
+GType nm_device_vxlan_get_type (void);
+
+NMDevice *nm_device_vxlan_new (NMPlatformLink *platform_device);
+
+G_END_DECLS
+
+#endif /* NM_DEVICE_VXLAN_H */
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
new file mode 100644
index 000000000..4788a604d
--- /dev/null
+++ b/src/devices/nm-device.c
@@ -0,0 +1,7966 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2005 - 2013 Red Hat, Inc.
+ * Copyright (C) 2006 - 2008 Novell, Inc.
+ */
+
+#include <config.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <dbus/dbus.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <linux/sockios.h>
+#include <linux/ethtool.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <linux/if.h>
+#include <netlink/route/addr.h>
+
+#include "libgsystem.h"
+#include "nm-glib-compat.h"
+#include "nm-device.h"
+#include "nm-device-private.h"
+#include "NetworkManagerUtils.h"
+#include "nm-manager.h"
+#include "nm-platform.h"
+#include "nm-rdisc.h"
+#include "nm-lndp-rdisc.h"
+#include "nm-dhcp-manager.h"
+#include "nm-dbus-manager.h"
+#include "nm-utils.h"
+#include "nm-logging.h"
+#include "nm-setting-ip4-config.h"
+#include "nm-setting-ip6-config.h"
+#include "nm-setting-connection.h"
+#include "nm-dnsmasq-manager.h"
+#include "nm-dhcp4-config.h"
+#include "nm-rfkill-manager.h"
+#include "nm-firewall-manager.h"
+#include "nm-properties-changed-signal.h"
+#include "nm-enum-types.h"
+#include "nm-settings-connection.h"
+#include "nm-connection-provider.h"
+#include "nm-posix-signals.h"
+#include "nm-manager-auth.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-dispatcher.h"
+#include "nm-config-device.h"
+#include "nm-config.h"
+#include "nm-dns-manager.h"
+
+#include "nm-device-bridge.h"
+#include "nm-device-bond.h"
+#include "nm-device-team.h"
+
+static void impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context);
+
+#include "nm-device-glue.h"
+
+static void nm_device_config_device_interface_init (NMConfigDeviceInterface *iface);
+
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMDevice, nm_device, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_CONFIG_DEVICE, nm_device_config_device_interface_init))
+
+#define NM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE, NMDevicePrivate))
+
+enum {
+ STATE_CHANGED,
+ AUTOCONNECT_ALLOWED,
+ AUTH_REQUEST,
+ IP4_CONFIG_CHANGED,
+ IP6_CONFIG_CHANGED,
+ REMOVED,
+ RECHECK_AUTO_ACTIVATE,
+ RECHECK_ASSUME,
+ LAST_SIGNAL,
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+enum {
+ PROP_0,
+ PROP_PLATFORM_DEVICE,
+ PROP_UDI,
+ PROP_IFACE,
+ PROP_IP_IFACE,
+ PROP_DRIVER,
+ PROP_DRIVER_VERSION,
+ PROP_FIRMWARE_VERSION,
+ PROP_CAPABILITIES,
+ PROP_CARRIER,
+ PROP_MTU,
+ PROP_IP4_ADDRESS,
+ PROP_IP4_CONFIG,
+ PROP_DHCP4_CONFIG,
+ PROP_IP6_CONFIG,
+ PROP_DHCP6_CONFIG,
+ PROP_STATE,
+ PROP_STATE_REASON,
+ PROP_ACTIVE_CONNECTION,
+ PROP_DEVICE_TYPE,
+ PROP_MANAGED,
+ PROP_AUTOCONNECT,
+ PROP_FIRMWARE_MISSING,
+ PROP_TYPE_DESC,
+ PROP_RFKILL_TYPE,
+ PROP_IFINDEX,
+ PROP_AVAILABLE_CONNECTIONS,
+ PROP_PHYSICAL_PORT_ID,
+ PROP_IS_MASTER,
+ PROP_MASTER,
+ PROP_HW_ADDRESS,
+ PROP_HAS_PENDING_ACTION,
+ LAST_PROP
+};
+
+/***********************************************************/
+
+#define PENDING_ACTION_DHCP4 "dhcp4"
+#define PENDING_ACTION_DHCP6 "dhcp6"
+#define PENDING_ACTION_AUTOCONF6 "autoconf6"
+
+typedef enum {
+ IP_NONE = 0,
+ IP_WAIT,
+ IP_CONF,
+ IP_DONE,
+ IP_FAIL
+} IpState;
+
+typedef struct {
+ NMDeviceState state;
+ NMDeviceStateReason reason;
+ guint id;
+} QueuedState;
+
+typedef struct {
+ NMDevice *slave;
+ gboolean enslaved;
+ gboolean configure;
+ guint watch_id;
+} SlaveInfo;
+
+typedef struct {
+ guint log_domain;
+ guint timeout;
+ guint watch;
+ GPid pid;
+} PingInfo;
+
+typedef struct {
+ NMDevice *device;
+ guint idle_add_id;
+ int ifindex;
+} DeleteOnDeactivateData;
+
+typedef struct {
+ gboolean in_state_changed;
+
+ NMDeviceState state;
+ NMDeviceStateReason state_reason;
+ QueuedState queued_state;
+ guint queued_ip_config_id;
+ GSList *pending_actions;
+
+ char * udi;
+ char * path;
+ char * iface; /* may change, could be renamed by user */
+ int ifindex;
+ gboolean is_software;
+ char * ip_iface;
+ int ip_ifindex;
+ NMDeviceType type;
+ char * type_desc;
+ guint32 capabilities;
+ char * driver;
+ char * driver_version;
+ char * firmware_version;
+ RfKillType rfkill_type;
+ gboolean firmware_missing;
+ GHashTable * available_connections;
+ guint8 hw_addr[NM_UTILS_HWADDR_LEN_MAX];
+ guint hw_addr_len;
+ char * physical_port_id;
+
+ NMUnmanagedFlags unmanaged_flags;
+ gboolean is_nm_owned; /* whether the device is a device owned and created by NM */
+ DeleteOnDeactivateData *delete_on_deactivate_data; /* data for scheduled cleanup when deleting link (g_idle_add) */
+
+ guint32 ip4_address;
+
+ NMActRequest * queued_act_request;
+ NMActRequest * act_request;
+ guint act_source_id;
+ gpointer act_source_func;
+ guint act_source6_id;
+ gpointer act_source6_func;
+ guint recheck_assume_id;
+ struct {
+ guint call_id;
+ NMDeviceState post_state;
+ NMDeviceStateReason post_state_reason;
+ } dispatcher;
+
+ /* Link stuff */
+ guint link_connected_id;
+ guint link_disconnected_id;
+ guint carrier_defer_id;
+ gboolean carrier;
+ guint carrier_wait_id;
+ gboolean ignore_carrier;
+ guint32 mtu;
+
+ /* Generic DHCP stuff */
+ guint32 dhcp_timeout;
+ GByteArray * dhcp_anycast_address;
+
+ /* IP4 configuration info */
+ NMIP4Config * ip4_config; /* Combined config from VPN, settings, and device */
+ IpState ip4_state;
+ NMIP4Config * dev_ip4_config; /* Config from DHCP, PPP, LLv4, etc */
+ NMIP4Config * ext_ip4_config; /* Stuff added outside NM */
+
+ /* DHCPv4 tracking */
+ NMDHCPClient * dhcp4_client;
+ gulong dhcp4_state_sigid;
+ gulong dhcp4_timeout_sigid;
+ NMDHCP4Config * dhcp4_config;
+ NMIP4Config * vpn4_config; /* routes added by a VPN which uses this device */
+
+ guint arp_round2_id;
+ PingInfo gw_ping;
+
+ /* dnsmasq stuff for shared connections */
+ NMDnsMasqManager *dnsmasq_manager;
+ gulong dnsmasq_state_id;
+
+ /* Firewall Manager */
+ NMFirewallManager *fw_manager;
+ DBusGProxyCall *fw_call;
+
+ /* avahi-autoipd stuff */
+ GPid aipd_pid;
+ guint aipd_watch;
+ guint aipd_timeout;
+
+ /* IP6 configuration info */
+ NMIP6Config * ip6_config;
+ IpState ip6_state;
+ NMIP6Config * vpn6_config; /* routes added by a VPN which uses this device */
+ NMIP6Config * ext_ip6_config; /* Stuff added outside NM */
+
+ NMRDisc * rdisc;
+ gulong rdisc_config_changed_sigid;
+ NMSettingIP6ConfigPrivacy rdisc_use_tempaddr;
+ /* IP6 config from autoconf */
+ NMIP6Config * ac_ip6_config;
+
+ guint linklocal6_timeout_id;
+
+ GHashTable * ip6_saved_properties;
+
+ NMDHCPClient * dhcp6_client;
+ NMRDiscDHCPLevel dhcp6_mode;
+ gulong dhcp6_state_sigid;
+ gulong dhcp6_timeout_sigid;
+ NMDHCP6Config * dhcp6_config;
+ /* IP6 config from DHCP */
+ NMIP6Config * dhcp6_ip6_config;
+
+ /* allow autoconnect feature */
+ gboolean autoconnect;
+
+ /* master interface for bridge/bond/team slave */
+ NMDevice * master;
+ gboolean enslaved;
+ guint master_ready_id;
+
+ /* slave management */
+ gboolean is_master;
+ GSList * slaves; /* list of SlaveInfo */
+
+ NMConnectionProvider *con_provider;
+} NMDevicePrivate;
+
+static gboolean nm_device_set_ip4_config (NMDevice *dev,
+ NMIP4Config *config,
+ gboolean commit,
+ NMDeviceStateReason *reason);
+static gboolean ip4_config_merge_and_apply (NMDevice *self,
+ NMIP4Config *config,
+ gboolean commit,
+ NMDeviceStateReason *out_reason);
+
+static gboolean nm_device_set_ip6_config (NMDevice *dev,
+ NMIP6Config *config,
+ gboolean commit,
+ NMDeviceStateReason *reason);
+
+static gboolean nm_device_master_add_slave (NMDevice *dev, NMDevice *slave, gboolean configure);
+static void nm_device_slave_notify_enslave (NMDevice *dev, gboolean success);
+static void nm_device_slave_notify_release (NMDevice *dev, NMDeviceStateReason reason);
+
+static void addrconf6_start_with_link_ready (NMDevice *self);
+
+static gboolean nm_device_get_default_unmanaged (NMDevice *device);
+
+static void _set_state_full (NMDevice *device,
+ NMDeviceState state,
+ NMDeviceStateReason reason,
+ gboolean quitting);
+
+/***********************************************************/
+
+static GQuark
+nm_device_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-device-error");
+ return quark;
+}
+
+#define NM_DEVICE_ERROR (nm_device_error_quark ())
+
+/***********************************************************/
+
+#define QUEUED_PREFIX "queued state change to "
+
+static const char *state_table[] = {
+ [NM_DEVICE_STATE_UNKNOWN] = QUEUED_PREFIX "unknown",
+ [NM_DEVICE_STATE_UNMANAGED] = QUEUED_PREFIX "unmanaged",
+ [NM_DEVICE_STATE_UNAVAILABLE] = QUEUED_PREFIX "unavailable",
+ [NM_DEVICE_STATE_DISCONNECTED] = QUEUED_PREFIX "disconnected",
+ [NM_DEVICE_STATE_PREPARE] = QUEUED_PREFIX "prepare",
+ [NM_DEVICE_STATE_CONFIG] = QUEUED_PREFIX "config",
+ [NM_DEVICE_STATE_NEED_AUTH] = QUEUED_PREFIX "need-auth",
+ [NM_DEVICE_STATE_IP_CONFIG] = QUEUED_PREFIX "ip-config",
+ [NM_DEVICE_STATE_IP_CHECK] = QUEUED_PREFIX "ip-check",
+ [NM_DEVICE_STATE_SECONDARIES] = QUEUED_PREFIX "secondaries",
+ [NM_DEVICE_STATE_ACTIVATED] = QUEUED_PREFIX "activated",
+ [NM_DEVICE_STATE_DEACTIVATING] = QUEUED_PREFIX "deactivating",
+ [NM_DEVICE_STATE_FAILED] = QUEUED_PREFIX "failed",
+};
+
+static const char *
+queued_state_to_string (NMDeviceState state)
+{
+ if (state >= 0 && state < G_N_ELEMENTS (state_table))
+ return state_table[state];
+ return state_table[NM_DEVICE_STATE_UNKNOWN];
+}
+
+static const char *
+state_to_string (NMDeviceState state)
+{
+ return queued_state_to_string (state) + strlen (QUEUED_PREFIX);
+}
+
+static const char *reason_table[] = {
+ [NM_DEVICE_STATE_REASON_NONE] = "none",
+ [NM_DEVICE_STATE_REASON_NOW_MANAGED] = "managed",
+ [NM_DEVICE_STATE_REASON_NOW_UNMANAGED] = "unmanaged",
+ [NM_DEVICE_STATE_REASON_CONFIG_FAILED] = "config-failed",
+ [NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE] = "ip-config-unavailable",
+ [NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED] = "ip-config-expired",
+ [NM_DEVICE_STATE_REASON_NO_SECRETS] = "no-secrets",
+ [NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT] = "supplicant-disconnect",
+ [NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED] = "supplicant-config-failed",
+ [NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED] = "supplicant-failed",
+ [NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT] = "supplicant-timeout",
+ [NM_DEVICE_STATE_REASON_PPP_START_FAILED] = "ppp-start-failed",
+ [NM_DEVICE_STATE_REASON_PPP_DISCONNECT] = "ppp-disconnect",
+ [NM_DEVICE_STATE_REASON_PPP_FAILED] = "ppp-failed",
+ [NM_DEVICE_STATE_REASON_DHCP_START_FAILED] = "dhcp-start-failed",
+ [NM_DEVICE_STATE_REASON_DHCP_ERROR] = "dhcp-error",
+ [NM_DEVICE_STATE_REASON_DHCP_FAILED] = "dhcp-failed",
+ [NM_DEVICE_STATE_REASON_SHARED_START_FAILED] = "sharing-start-failed",
+ [NM_DEVICE_STATE_REASON_SHARED_FAILED] = "sharing-failed",
+ [NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED] = "autoip-start-failed",
+ [NM_DEVICE_STATE_REASON_AUTOIP_ERROR] = "autoip-error",
+ [NM_DEVICE_STATE_REASON_AUTOIP_FAILED] = "autoip-failed",
+ [NM_DEVICE_STATE_REASON_MODEM_BUSY] = "modem-busy",
+ [NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE] = "modem-no-dialtone",
+ [NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER] = "modem-no-carrier",
+ [NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT] = "modem-dial-timeout",
+ [NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED] = "modem-dial-failed",
+ [NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED] = "modem-init-failed",
+ [NM_DEVICE_STATE_REASON_GSM_APN_FAILED] = "gsm-apn-failed",
+ [NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING] = "gsm-registration-idle",
+ [NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED] = "gsm-registration-denied",
+ [NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT] = "gsm-registration-timeout",
+ [NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED] = "gsm-registration-failed",
+ [NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED] = "gsm-pin-check-failed",
+ [NM_DEVICE_STATE_REASON_FIRMWARE_MISSING] = "firmware-missing",
+ [NM_DEVICE_STATE_REASON_REMOVED] = "removed",
+ [NM_DEVICE_STATE_REASON_SLEEPING] = "sleeping",
+ [NM_DEVICE_STATE_REASON_CONNECTION_REMOVED] = "connection-removed",
+ [NM_DEVICE_STATE_REASON_USER_REQUESTED] = "user-requested",
+ [NM_DEVICE_STATE_REASON_CARRIER] = "carrier-changed",
+ [NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED] = "connection-assumed",
+ [NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE] = "supplicant-available",
+ [NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND] = "modem-not-found",
+ [NM_DEVICE_STATE_REASON_BT_FAILED] = "bluetooth-failed",
+ [NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED] = "gsm-sim-not-inserted",
+ [NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED] = "gsm-sim-pin-required",
+ [NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED] = "gsm-sim-puk-required",
+ [NM_DEVICE_STATE_REASON_GSM_SIM_WRONG] = "gsm-sim-wrong",
+ [NM_DEVICE_STATE_REASON_INFINIBAND_MODE] = "infiniband-mode",
+ [NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED] = "dependency-failed",
+ [NM_DEVICE_STATE_REASON_BR2684_FAILED] = "br2684-bridge-failed",
+ [NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE] = "modem-manager-unavailable",
+ [NM_DEVICE_STATE_REASON_SSID_NOT_FOUND] = "ssid-not-found",
+ [NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED] = "secondary-connection-failed",
+ [NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED] = "dcb-fcoe-failed",
+ [NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED] = "teamd-control-failed",
+ [NM_DEVICE_STATE_REASON_MODEM_FAILED] = "modem-failed",
+ [NM_DEVICE_STATE_REASON_MODEM_AVAILABLE] = "modem-available",
+ [NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT] = "sim-pin-incorrect",
+};
+
+static const char *
+reason_to_string (NMDeviceStateReason reason)
+{
+ if (reason >= 0 && reason < G_N_ELEMENTS (reason_table))
+ return reason_table[reason];
+ return reason_table[NM_DEVICE_STATE_REASON_UNKNOWN];
+}
+
+/***********************************************************/
+
+static inline gboolean
+nm_device_ipv6_sysctl_set (NMDevice *self, const char *property, const char *value)
+{
+ return nm_platform_sysctl_set (nm_utils_ip6_property_path (nm_device_get_ip_iface (self), property), value);
+}
+
+static gboolean
+device_has_capability (NMDevice *device, NMDeviceCapabilities caps)
+{
+ return !!(NM_DEVICE_GET_PRIVATE (device)->capabilities & caps);
+}
+
+/***********************************************************/
+
+void
+nm_device_dbus_export (NMDevice *device)
+{
+ static guint32 devcount = 0;
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ g_return_if_fail (priv->path == NULL);
+
+ priv->path = g_strdup_printf ("/org/freedesktop/NetworkManager/Devices/%d", devcount++);
+ nm_log_info (LOGD_DEVICE, "(%s): exported as %s", priv->iface, priv->path);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->path, device);
+}
+
+const char *
+nm_device_get_path (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->path;
+}
+
+const char *
+nm_device_get_udi (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->udi;
+}
+
+const char *
+nm_device_get_iface (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->iface;
+}
+
+int
+nm_device_get_ifindex (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, 0);
+
+ return NM_DEVICE_GET_PRIVATE (self)->ifindex;
+}
+
+gboolean
+nm_device_is_software (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ return priv->is_software;
+}
+
+const char *
+nm_device_get_ip_iface (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (self != NULL, NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ /* If it's not set, default to iface */
+ return priv->ip_iface ? priv->ip_iface : priv->iface;
+}
+
+int
+nm_device_get_ip_ifindex (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (self != NULL, 0);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ /* If it's not set, default to iface */
+ return priv->ip_iface ? priv->ip_ifindex : priv->ifindex;
+}
+
+void
+nm_device_set_ip_iface (NMDevice *self, const char *iface)
+{
+ NMDevicePrivate *priv;
+ char *old_ip_iface;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ if (!g_strcmp0 (iface, priv->ip_iface))
+ return;
+
+ old_ip_iface = priv->ip_iface;
+ priv->ip_ifindex = 0;
+
+ priv->ip_iface = g_strdup (iface);
+ if (priv->ip_iface) {
+ priv->ip_ifindex = nm_platform_link_get_ifindex (priv->ip_iface);
+ if (priv->ip_ifindex > 0) {
+ if (!nm_platform_link_is_up (priv->ip_ifindex))
+ nm_platform_link_set_up (priv->ip_ifindex);
+ } else {
+ /* Device IP interface must always be a kernel network interface */
+ nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", iface);
+ }
+ }
+
+ /* We don't care about any saved values from the old iface */
+ g_hash_table_remove_all (priv->ip6_saved_properties);
+
+ /* Emit change notification */
+ if (g_strcmp0 (old_ip_iface, priv->ip_iface))
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP_IFACE);
+ g_free (old_ip_iface);
+}
+
+const char *
+nm_device_get_driver (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->driver;
+}
+
+const char *
+nm_device_get_driver_version (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->driver_version;
+}
+
+NMDeviceType
+nm_device_get_device_type (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), NM_DEVICE_TYPE_UNKNOWN);
+
+ return NM_DEVICE_GET_PRIVATE (self)->type;
+}
+
+
+/**
+ * nm_device_get_priority():
+ * @dev: the #NMDevice
+ *
+ * Returns: the device's routing priority. Lower numbers means a "better"
+ * device, eg higher priority.
+ */
+int
+nm_device_get_priority (NMDevice *dev)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (dev), 100);
+
+ /* Device 'priority' is used for two things:
+ *
+ * a) two devices on the same IP subnet: the "better" (ie, lower number)
+ * device is the default outgoing device for that subnet
+ * b) default route: the "better" device gets the default route. This can
+ * always be modified by setting a connection to never-default=TRUE, in
+ * which case that device will never take the default route when
+ * it's using that connection.
+ */
+
+ switch (nm_device_get_device_type (dev)) {
+ case NM_DEVICE_TYPE_ETHERNET:
+ return 1;
+ case NM_DEVICE_TYPE_INFINIBAND:
+ return 2;
+ case NM_DEVICE_TYPE_ADSL:
+ return 3;
+ case NM_DEVICE_TYPE_WIMAX:
+ return 4;
+ case NM_DEVICE_TYPE_BOND:
+ return 5;
+ case NM_DEVICE_TYPE_TEAM:
+ return 6;
+ case NM_DEVICE_TYPE_VLAN:
+ return 7;
+ case NM_DEVICE_TYPE_MODEM:
+ return 8;
+ case NM_DEVICE_TYPE_BT:
+ return 9;
+ case NM_DEVICE_TYPE_WIFI:
+ return 10;
+ case NM_DEVICE_TYPE_OLPC_MESH:
+ return 11;
+ default:
+ return 20;
+ }
+}
+
+const char *
+nm_device_get_type_desc (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->type_desc;
+}
+
+gboolean
+nm_device_has_carrier (NMDevice *device)
+{
+ return NM_DEVICE_GET_PRIVATE (device)->carrier;
+}
+
+NMActRequest *
+nm_device_get_act_request (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->act_request;
+}
+
+NMConnection *
+nm_device_get_connection (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ return priv->act_request ? nm_act_request_get_connection (priv->act_request) : NULL;
+}
+
+RfKillType
+nm_device_get_rfkill_type (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ return NM_DEVICE_GET_PRIVATE (self)->rfkill_type;
+}
+
+static const char *
+nm_device_get_physical_port_id (NMDevice *device)
+{
+ return NM_DEVICE_GET_PRIVATE (device)->physical_port_id;
+}
+
+/***********************************************************/
+
+static gboolean
+nm_device_uses_generated_connection (NMDevice *self)
+{
+ NMConnection *connection;
+
+ connection = nm_device_get_connection (self);
+ if (!connection)
+ return FALSE;
+ return nm_settings_connection_get_nm_generated (NM_SETTINGS_CONNECTION (connection));
+}
+
+static SlaveInfo *
+find_slave_info (NMDevice *self, NMDevice *slave)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ SlaveInfo *info;
+ GSList *iter;
+
+ for (iter = priv->slaves; iter; iter = g_slist_next (iter)) {
+ info = iter->data;
+ if (info->slave == slave)
+ return info;
+ }
+ return NULL;
+}
+
+static void
+free_slave_info (SlaveInfo *info)
+{
+ g_signal_handler_disconnect (info->slave, info->watch_id);
+ g_clear_object (&info->slave);
+ memset (info, 0, sizeof (*info));
+ g_free (info);
+}
+
+/**
+ * nm_device_enslave_slave:
+ * @dev: the master device
+ * @slave: the slave device to enslave
+ * @connection: (allow-none): the slave device's connection
+ *
+ * If @dev is capable of enslaving other devices (ie it's a bridge, bond, team,
+ * etc) then this function enslaves @slave.
+ *
+ * Returns: %TRUE on success, %FALSE on failure or if this device cannot enslave
+ * other devices.
+ */
+static gboolean
+nm_device_enslave_slave (NMDevice *dev, NMDevice *slave, NMConnection *connection)
+{
+ SlaveInfo *info;
+ gboolean success = FALSE;
+ gboolean configure;
+
+ g_return_val_if_fail (dev != NULL, FALSE);
+ g_return_val_if_fail (slave != NULL, FALSE);
+ g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->enslave_slave != NULL, FALSE);
+
+ info = find_slave_info (dev, slave);
+ if (!info)
+ return FALSE;
+
+ if (info->enslaved)
+ success = TRUE;
+ else {
+ configure = (info->configure && connection != NULL);
+ if (configure)
+ g_return_val_if_fail (nm_device_get_state (slave) >= NM_DEVICE_STATE_DISCONNECTED, FALSE);
+
+ success = NM_DEVICE_GET_CLASS (dev)->enslave_slave (dev, slave, connection, configure);
+ info->enslaved = success;
+ }
+
+ nm_device_slave_notify_enslave (info->slave, success);
+
+ /* Ensure the device's hardware address is up-to-date; it often changes
+ * when slaves change.
+ */
+ nm_device_update_hw_address (dev);
+
+ /* Restart IP configuration if we're waiting for slaves. Do this
+ * after updating the hardware address as IP config may need the
+ * new address.
+ */
+ if (success) {
+ if (NM_DEVICE_GET_PRIVATE (dev)->ip4_state == IP_WAIT)
+ nm_device_activate_stage3_ip4_start (dev);
+
+ if (NM_DEVICE_GET_PRIVATE (dev)->ip6_state == IP_WAIT)
+ nm_device_activate_stage3_ip6_start (dev);
+ }
+
+ return success;
+}
+
+/**
+ * nm_device_release_one_slave:
+ * @dev: the master device
+ * @slave: the slave device to release
+ * @configure: whether @dev needs to actually release @slave
+ * @reason: the state change reason for the @slave
+ *
+ * If @dev is capable of enslaving other devices (ie it's a bridge, bond, team,
+ * etc) then this function releases the previously enslaved @slave and/or
+ * updates the state of @dev and @slave to reflect its release.
+ *
+ * Returns: %TRUE on success, %FALSE on failure, if this device cannot enslave
+ * other devices, or if @slave was never enslaved.
+ */
+static gboolean
+nm_device_release_one_slave (NMDevice *dev, NMDevice *slave, gboolean configure, NMDeviceStateReason reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ SlaveInfo *info;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (slave != NULL, FALSE);
+ g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->release_slave != NULL, FALSE);
+
+ info = find_slave_info (dev, slave);
+ if (!info)
+ return FALSE;
+ priv->slaves = g_slist_remove (priv->slaves, info);
+
+ if (info->enslaved) {
+ success = NM_DEVICE_GET_CLASS (dev)->release_slave (dev, slave, configure);
+ /* The release_slave() implementation logs success/failure (in the
+ * correct device-specific log domain), so we don't have to do anything.
+ */
+ }
+
+ if (!configure) {
+ g_warn_if_fail (reason == NM_DEVICE_STATE_REASON_NONE);
+ reason = NM_DEVICE_STATE_REASON_NONE;
+ } else if (reason == NM_DEVICE_STATE_REASON_NONE) {
+ g_warn_if_reached ();
+ reason = NM_DEVICE_STATE_REASON_UNKNOWN;
+ }
+ nm_device_slave_notify_release (info->slave, reason);
+
+ free_slave_info (info);
+
+ /* Ensure the device's hardware address is up-to-date; it often changes
+ * when slaves change.
+ */
+ nm_device_update_hw_address (dev);
+
+ return success;
+}
+
+static void
+carrier_changed (NMDevice *device, gboolean carrier)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (!nm_device_get_managed (device))
+ return;
+
+ nm_device_recheck_available_connections (device);
+
+ /* ignore-carrier devices ignore all carrier-down events */
+ if (priv->ignore_carrier && !carrier)
+ return;
+
+ if (priv->is_master) {
+ /* Bridge/bond/team carrier does not affect its own activation,
+ * but when carrier comes on, if there are slaves waiting,
+ * it will restart them.
+ */
+ if (!carrier)
+ return;
+
+ if (nm_device_activate_ip4_state_in_wait (device))
+ nm_device_activate_stage3_ip4_start (device);
+ if (nm_device_activate_ip6_state_in_wait (device))
+ nm_device_activate_stage3_ip6_start (device);
+
+ return;
+ } else if (nm_device_get_enslaved (device) && !carrier) {
+ /* Slaves don't deactivate when they lose carrier; for
+ * bonds/teams in particular that would be actively
+ * counterproductive.
+ */
+ return;
+ }
+
+ if (carrier) {
+ g_warn_if_fail (priv->state >= NM_DEVICE_STATE_UNAVAILABLE);
+
+ if (priv->state == NM_DEVICE_STATE_UNAVAILABLE) {
+ nm_device_queue_state (device, NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_CARRIER);
+ } else if (priv->state == NM_DEVICE_STATE_DISCONNECTED) {
+ /* If the device is already in DISCONNECTED state without a carrier
+ * (probably because it is tagged for carrier ignore) ensure that
+ * when the carrier appears, auto connections are rechecked for
+ * the device.
+ */
+ nm_device_emit_recheck_auto_activate (device);
+ }
+ } else {
+ if (priv->state == NM_DEVICE_STATE_UNAVAILABLE) {
+ if (nm_device_queued_state_peek (device) >= NM_DEVICE_STATE_DISCONNECTED)
+ nm_device_queued_state_clear (device);
+ } else if (priv->state >= NM_DEVICE_STATE_DISCONNECTED) {
+ nm_device_queue_state (device, NM_DEVICE_STATE_UNAVAILABLE,
+ NM_DEVICE_STATE_REASON_CARRIER);
+ }
+ }
+}
+
+#define LINK_DISCONNECT_DELAY 4
+
+static gboolean
+link_disconnect_action_cb (gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): link disconnected (calling deferred action) (id=%u)",
+ nm_device_get_iface (device), priv->carrier_defer_id);
+
+ priv->carrier_defer_id = 0;
+
+ nm_log_info (LOGD_DEVICE, "(%s): link disconnected (calling deferred action)",
+ nm_device_get_iface (device));
+
+ NM_DEVICE_GET_CLASS (device)->carrier_changed (device, FALSE);
+
+ return FALSE;
+}
+
+static void
+link_disconnect_action_cancel (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->carrier_defer_id) {
+ g_source_remove (priv->carrier_defer_id);
+ nm_log_dbg (LOGD_DEVICE, "(%s): link disconnected (canceling deferred action) (id=%u)",
+ nm_device_get_iface (self), priv->carrier_defer_id);
+ priv->carrier_defer_id = 0;
+ }
+}
+
+void
+nm_device_set_carrier (NMDevice *device, gboolean carrier)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDeviceClass *klass = NM_DEVICE_GET_CLASS (device);
+ NMDeviceState state = nm_device_get_state (device);
+ const char *iface = nm_device_get_iface (device);
+
+ if (priv->carrier == carrier)
+ return;
+
+ priv->carrier = carrier;
+ g_object_notify (G_OBJECT (device), NM_DEVICE_CARRIER);
+
+ if (priv->carrier) {
+ nm_log_info (LOGD_DEVICE, "(%s): link connected", iface);
+ link_disconnect_action_cancel (device);
+ klass->carrier_changed (device, TRUE);
+
+ if (priv->carrier_wait_id) {
+ g_source_remove (priv->carrier_wait_id);
+ priv->carrier_wait_id = 0;
+ nm_device_remove_pending_action (device, "carrier wait", TRUE);
+ }
+ } else if (state <= NM_DEVICE_STATE_DISCONNECTED) {
+ nm_log_info (LOGD_DEVICE, "(%s): link disconnected", iface);
+ klass->carrier_changed (device, FALSE);
+ } else {
+ nm_log_info (LOGD_DEVICE, "(%s): link disconnected (deferring action for %d seconds)",
+ iface, LINK_DISCONNECT_DELAY);
+ priv->carrier_defer_id = g_timeout_add_seconds (LINK_DISCONNECT_DELAY,
+ link_disconnect_action_cb, device);
+ nm_log_dbg (LOGD_DEVICE, "(%s): link disconnected (deferring action for %d seconds) (id=%u)",
+ iface, LINK_DISCONNECT_DELAY, priv->carrier_defer_id);
+ }
+}
+
+static void
+update_for_ip_ifname_change (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ g_hash_table_remove_all (priv->ip6_saved_properties);
+
+ if (priv->dhcp4_client) {
+ if (!nm_device_dhcp4_renew (device, FALSE)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_DHCP_FAILED);
+ return;
+ }
+ }
+ if (priv->dhcp6_client) {
+ if (!nm_device_dhcp6_renew (device, FALSE)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_DHCP_FAILED);
+ return;
+ }
+ }
+ if (priv->rdisc) {
+ /* FIXME: todo */
+ }
+ if (priv->dnsmasq_manager) {
+ /* FIXME: todo */
+ }
+}
+
+static void
+device_link_changed (NMDevice *device, NMPlatformLink *info)
+{
+ NMDeviceClass *klass = NM_DEVICE_GET_CLASS (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ gboolean ip_ifname_changed = FALSE;
+
+ if (info->udi && g_strcmp0 (info->udi, priv->udi)) {
+ /* Update UDI to what udev gives us */
+ g_free (priv->udi);
+ priv->udi = g_strdup (info->udi);
+ g_object_notify (G_OBJECT (device), NM_DEVICE_UDI);
+ }
+
+ /* Update MTU if it has changed. */
+ if (priv->mtu != info->mtu) {
+ priv->mtu = info->mtu;
+ g_object_notify (G_OBJECT (device), NM_DEVICE_MTU);
+ }
+
+ if (info->name[0] && strcmp (priv->iface, info->name) != 0) {
+ nm_log_info (LOGD_DEVICE, "(%s): interface index %d renamed iface from '%s' to '%s'",
+ priv->iface, priv->ifindex, priv->iface, info->name);
+ g_free (priv->iface);
+ priv->iface = g_strdup (info->name);
+
+ /* If the device has no explicit ip_iface, then changing iface changes ip_iface too. */
+ ip_ifname_changed = !priv->ip_iface;
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_IFACE);
+ if (ip_ifname_changed)
+ g_object_notify (G_OBJECT (device), NM_DEVICE_IP_IFACE);
+
+ /* Re-match available connections against the new interface name */
+ nm_device_recheck_available_connections (device);
+
+ /* Let any connections that use the new interface name have a chance
+ * to auto-activate on the device.
+ */
+ nm_device_emit_recheck_auto_activate (device);
+ }
+
+ /* Update slave status for external changes */
+ if (info->master && !priv->enslaved) {
+ NMDevice *master;
+
+ master = nm_manager_get_device_by_ifindex (nm_manager_get (), info->master);
+ if (master && NM_DEVICE_GET_CLASS (master)->enslave_slave) {
+ g_clear_object (&priv->master);
+ priv->master = g_object_ref (master);
+ nm_device_master_add_slave (master, device, FALSE);
+ nm_device_enslave_slave (master, device, NULL);
+ } else if (master) {
+ nm_log_info (LOGD_DEVICE, "(%s): enslaved to non-master-type device %s; ignoring",
+ nm_device_get_iface (device),
+ nm_device_get_iface (master));
+ } else {
+ nm_log_warn (LOGD_DEVICE, "(%s): enslaved to unknown device %d %s",
+ nm_device_get_iface (device),
+ info->master,
+ nm_platform_link_get_name (info->master));
+ }
+ } else if (priv->enslaved && !info->master)
+ nm_device_release_one_slave (priv->master, device, FALSE, NM_DEVICE_STATE_REASON_NONE);
+
+ if (klass->link_changed)
+ klass->link_changed (device, info);
+
+
+ /* Update DHCP, etc, if needed */
+ if (ip_ifname_changed)
+ update_for_ip_ifname_change (device);
+}
+
+static void
+device_ip_link_changed (NMDevice *device, NMPlatformLink *info)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (info->name[0] && g_strcmp0 (priv->ip_iface, info->name)) {
+ nm_log_info (LOGD_DEVICE, "(%s): interface index %d renamed ip_iface (%d) from '%s' to '%s'",
+ priv->iface, priv->ifindex, nm_device_get_ip_ifindex (device),
+ priv->ip_iface, info->name);
+ g_free (priv->ip_iface);
+ priv->ip_iface = g_strdup (info->name);
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_IP_IFACE);
+ update_for_ip_ifname_change (device);
+ }
+}
+
+static void
+link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformSignalChangeType change_type, NMPlatformReason reason, NMDevice *device)
+{
+ if (change_type != NM_PLATFORM_SIGNAL_CHANGED)
+ return;
+
+ /* We don't filter by 'reason' because we are interested in *all* link
+ * changes. For example a call to nm_platform_link_set_up() may result
+ * in an internal carrier change (i.e. we ask the kernel to set IFF_UP
+ * and it results in also setting IFF_LOWER_UP.
+ */
+
+ if (ifindex == nm_device_get_ifindex (device))
+ device_link_changed (device, info);
+ else if (ifindex == nm_device_get_ip_ifindex (device))
+ device_ip_link_changed (device, info);
+}
+
+static void
+link_changed (NMDevice *device, NMPlatformLink *info)
+{
+ /* Update carrier from link event if applicable. */
+ if ( device_has_capability (device, NM_DEVICE_CAP_CARRIER_DETECT)
+ && !device_has_capability (device, NM_DEVICE_CAP_NONSTANDARD_CARRIER))
+ nm_device_set_carrier (device, info->connected);
+}
+
+/**
+ * nm_device_notify_component_added():
+ * @device: the #NMDevice
+ * @component: the component being added by a plugin
+ *
+ * Called by the manager to notify the device that a new component has
+ * been found. The device implementation should return %TRUE if it
+ * wishes to claim the component, or %FALSE if it cannot.
+ *
+ * Returns: %TRUE to claim the component, %FALSE if the component cannot be
+ * claimed.
+ */
+gboolean
+nm_device_notify_component_added (NMDevice *device, GObject *component)
+{
+ if (NM_DEVICE_GET_CLASS (device)->component_added)
+ return NM_DEVICE_GET_CLASS (device)->component_added (device, component);
+ return FALSE;
+}
+
+/**
+ * nm_device_owns_iface():
+ * @device: the #NMDevice
+ * @iface: an interface name
+ *
+ * Called by the manager to ask if the device or any of its components owns
+ * @iface. For example, a WWAN implementation would return %TRUE for an
+ * ethernet interface name that was owned by the WWAN device's modem component,
+ * because that ethernet interface is controlled by the WWAN device and cannot
+ * be used independently of the WWAN device.
+ *
+ * Returns: %TRUE if @device or it's components owns the interface name,
+ * %FALSE if not
+ */
+gboolean
+nm_device_owns_iface (NMDevice *device, const char *iface)
+{
+ if (NM_DEVICE_GET_CLASS (device)->owns_iface)
+ return NM_DEVICE_GET_CLASS (device)->owns_iface (device, iface);
+ return FALSE;
+}
+
+static void
+slave_state_changed (NMDevice *slave,
+ NMDeviceState slave_new_state,
+ NMDeviceState slave_old_state,
+ NMDeviceStateReason reason,
+ NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ gboolean release = FALSE;
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): slave %s state change %d (%s) -> %d (%s)",
+ nm_device_get_iface (self),
+ nm_device_get_iface (slave),
+ slave_old_state,
+ state_to_string (slave_old_state),
+ slave_new_state,
+ state_to_string (slave_new_state));
+
+ /* Don't try to enslave slaves until the master is ready */
+ if (priv->state < NM_DEVICE_STATE_CONFIG)
+ return;
+
+ if (slave_new_state == NM_DEVICE_STATE_IP_CONFIG)
+ nm_device_enslave_slave (self, slave, nm_device_get_connection (slave));
+ else if (slave_new_state > NM_DEVICE_STATE_ACTIVATED)
+ release = TRUE;
+ else if ( slave_new_state <= NM_DEVICE_STATE_DISCONNECTED
+ && slave_old_state > NM_DEVICE_STATE_DISCONNECTED) {
+ /* Catch failures due to unavailable or unmanaged */
+ release = TRUE;
+ }
+
+ if (release) {
+ nm_device_release_one_slave (self, slave, TRUE, reason);
+ /* Bridge/bond/team interfaces are left up until manually deactivated */
+ if (priv->slaves == NULL && priv->state == NM_DEVICE_STATE_ACTIVATED) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): last slave removed; remaining activated",
+ nm_device_get_iface (self));
+ }
+ }
+}
+
+/**
+ * nm_device_master_add_slave:
+ * @dev: the master device
+ * @slave: the slave device to enslave
+ * @configure: pass %TRUE if the slave should be configured by the master, or
+ * %FALSE if it is already configured outside NetworkManager
+ *
+ * If @dev is capable of enslaving other devices (ie it's a bridge, bond, team,
+ * etc) then this function adds @slave to the slave list for later enslavement.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
+ */
+static gboolean
+nm_device_master_add_slave (NMDevice *dev, NMDevice *slave, gboolean configure)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ SlaveInfo *info;
+
+ g_return_val_if_fail (dev != NULL, FALSE);
+ g_return_val_if_fail (slave != NULL, FALSE);
+ g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->enslave_slave != NULL, FALSE);
+
+ if (configure)
+ g_return_val_if_fail (nm_device_get_state (slave) >= NM_DEVICE_STATE_DISCONNECTED, FALSE);
+
+ if (!find_slave_info (dev, slave)) {
+ info = g_malloc0 (sizeof (SlaveInfo));
+ info->slave = g_object_ref (slave);
+ info->configure = configure;
+ info->watch_id = g_signal_connect (slave, "state-changed",
+ G_CALLBACK (slave_state_changed), dev);
+ priv->slaves = g_slist_append (priv->slaves, info);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * nm_device_master_get_slaves:
+ * @dev: the master device
+ *
+ * Returns: any slaves of which @device is the master. Caller owns returned list.
+ */
+GSList *
+nm_device_master_get_slaves (NMDevice *dev)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ GSList *slaves = NULL, *iter;
+
+ for (iter = priv->slaves; iter; iter = g_slist_next (iter))
+ slaves = g_slist_prepend (slaves, ((SlaveInfo *) iter->data)->slave);
+
+ return slaves;
+}
+
+/**
+ * nm_device_master_get_slave_by_ifindex:
+ * @dev: the master device
+ * @ifindex: the slave's interface index
+ *
+ * Returns: the slave with the given @ifindex of which @device is the master,
+ * or %NULL if no device with @ifindex is a slave of @device.
+ */
+NMDevice *
+nm_device_master_get_slave_by_ifindex (NMDevice *dev, int ifindex)
+{
+ GSList *iter;
+
+ for (iter = NM_DEVICE_GET_PRIVATE (dev)->slaves; iter; iter = g_slist_next (iter)) {
+ SlaveInfo *info = iter->data;
+
+ if (nm_device_get_ip_ifindex (info->slave) == ifindex)
+ return info->slave;
+ }
+ return NULL;
+}
+
+/**
+ * nm_device_master_check_slave_physical_port:
+ * @dev: the master device
+ * @slave: a slave device
+ * @log_domain: domain to log a warning in
+ *
+ * Checks if @dev already has a slave with the same #NMDevice:physical-port-id
+ * as @slave, and logs a warning if so.
+ */
+void
+nm_device_master_check_slave_physical_port (NMDevice *dev, NMDevice *slave,
+ guint64 log_domain)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ const char *slave_physical_port_id, *existing_physical_port_id;
+ SlaveInfo *info;
+ GSList *iter;
+
+ slave_physical_port_id = nm_device_get_physical_port_id (slave);
+ if (!slave_physical_port_id)
+ return;
+
+ for (iter = priv->slaves; iter; iter = iter->next) {
+ info = iter->data;
+ if (info->slave == slave)
+ continue;
+
+ existing_physical_port_id = nm_device_get_physical_port_id (info->slave);
+ if (!g_strcmp0 (slave_physical_port_id, existing_physical_port_id)) {
+ nm_log_warn (log_domain, "(%s): slave %s shares a physical port with existing slave %s",
+ nm_device_get_ip_iface (dev),
+ nm_device_get_ip_iface (slave),
+ nm_device_get_ip_iface (info->slave));
+ /* Since this function will get called for every slave, we only have
+ * to warn about the first match we find; if there are other matches
+ * later in the list, we will have already warned about them matching
+ * @existing earlier.
+ */
+ return;
+ }
+ }
+}
+
+/* release all slaves */
+static void
+nm_device_master_release_slaves (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDeviceStateReason reason;
+
+ /* Don't release the slaves if this connection doesn't belong to NM. */
+ if (nm_device_uses_generated_connection (self))
+ return;
+
+ reason = priv->state_reason;
+ if (priv->state == NM_DEVICE_STATE_FAILED)
+ reason = NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED;
+
+ while (priv->slaves) {
+ SlaveInfo *info = priv->slaves->data;
+
+ nm_device_release_one_slave (self, info->slave, TRUE, reason);
+ }
+}
+
+/**
+ * nm_device_get_master:
+ * @dev: the device
+ *
+ * If @dev has been enslaved by another device, this returns that
+ * device. Otherwise it returns %NULL. (In particular, note that if
+ * @dev is in the process of activating as a slave, but has not yet
+ * been enslaved by its master, this will return %NULL.)
+ *
+ * Returns: (transfer none): @dev's master, or %NULL
+ */
+NMDevice *
+nm_device_get_master (NMDevice *dev)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+
+ if (priv->enslaved)
+ return priv->master;
+ else
+ return NULL;
+}
+
+/**
+ * nm_device_slave_notify_enslave:
+ * @dev: the slave device
+ * @success: whether the enslaving operation succeeded
+ *
+ * Notifies a slave that either it has been enslaved, or else its master tried
+ * to enslave it and failed.
+ */
+static void
+nm_device_slave_notify_enslave (NMDevice *dev, gboolean success)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMConnection *connection = nm_device_get_connection (dev);
+ gboolean activating = (priv->state == NM_DEVICE_STATE_IP_CONFIG);
+
+ g_assert (priv->master);
+
+ if (!priv->enslaved) {
+ if (success) {
+ if (activating) {
+ nm_log_info (LOGD_DEVICE,
+ "Activation (%s) connection '%s' enslaved, continuing activation",
+ nm_device_get_iface (dev),
+ nm_connection_get_id (connection));
+ } else {
+ nm_log_info (LOGD_DEVICE,
+ "(%s): enslaved to %s",
+ nm_device_get_iface (dev),
+ nm_device_get_iface (priv->master));
+ }
+
+ priv->enslaved = TRUE;
+ g_object_notify (G_OBJECT (dev), NM_DEVICE_MASTER);
+ } else if (activating) {
+ nm_log_warn (LOGD_DEVICE,
+ "Activation (%s) connection '%s' could not be enslaved",
+ nm_device_get_iface (dev),
+ nm_connection_get_id (connection));
+ }
+ }
+
+ if (activating) {
+ priv->ip4_state = IP_DONE;
+ priv->ip6_state = IP_DONE;
+ nm_device_queue_state (dev,
+ success ? NM_DEVICE_STATE_SECONDARIES : NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_NONE);
+ } else
+ nm_device_queue_recheck_assume (dev);
+}
+
+/**
+ * nm_device_slave_notify_release:
+ * @dev: the slave device
+ * @reason: the reason associated with the state change
+ *
+ * Notifies a slave that it has been released, and why.
+ */
+static void
+nm_device_slave_notify_release (NMDevice *dev, NMDeviceStateReason reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMConnection *connection = nm_device_get_connection (dev);
+ NMDeviceState new_state;
+ const char *master_status;
+
+ if ( reason != NM_DEVICE_STATE_REASON_NONE
+ && priv->state > NM_DEVICE_STATE_DISCONNECTED
+ && priv->state <= NM_DEVICE_STATE_ACTIVATED) {
+ if (reason == NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED) {
+ new_state = NM_DEVICE_STATE_FAILED;
+ master_status = "failed";
+ } else if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED) {
+ new_state = NM_DEVICE_STATE_DEACTIVATING;
+ master_status = "deactivated by user request";
+ } else {
+ new_state = NM_DEVICE_STATE_DISCONNECTED;
+ master_status = "deactivated";
+ }
+
+ nm_log_dbg (LOGD_DEVICE,
+ "Activation (%s) connection '%s' master %s",
+ nm_device_get_iface (dev),
+ nm_connection_get_id (connection),
+ master_status);
+
+ nm_device_queue_state (dev, new_state, reason);
+ } else {
+ nm_log_info (LOGD_DEVICE,
+ "(%s): released from master %s",
+ nm_device_get_iface (dev),
+ nm_device_get_iface (priv->master));
+ }
+
+ if (priv->enslaved) {
+ priv->enslaved = FALSE;
+ g_object_notify (G_OBJECT (dev), NM_DEVICE_MASTER);
+ }
+}
+
+/**
+ * nm_device_get_enslaved:
+ * @device: the #NMDevice
+ *
+ * Returns: %TRUE if the device is enslaved to a master device (eg bridge or
+ * bond or team), %FALSE if not
+ */
+gboolean
+nm_device_get_enslaved (NMDevice *device)
+{
+ return NM_DEVICE_GET_PRIVATE (device)->enslaved;
+}
+
+static gboolean
+is_available (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ return priv->carrier || priv->ignore_carrier;
+}
+
+/**
+ * nm_device_is_available:
+ * @self: the #NMDevice
+ *
+ * Checks if @self would currently be capable of activating a
+ * connection. In particular, it checks that the device is ready (eg,
+ * is not missing firmware), that it has carrier (if necessary), and
+ * that any necessary external software (eg, ModemManager,
+ * wpa_supplicant) is available.
+ *
+ * @self can only be in a state higher than
+ * %NM_DEVICE_STATE_UNAVAILABLE when nm_device_is_available() returns
+ * %TRUE. (But note that it can still be %NM_DEVICE_STATE_UNMANAGED
+ * when it is available.)
+ *
+ * Returns: %TRUE or %FALSE
+ */
+gboolean
+nm_device_is_available (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->firmware_missing)
+ return FALSE;
+
+ return NM_DEVICE_GET_CLASS (self)->is_available (self);
+}
+
+gboolean
+nm_device_get_enabled (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ if (NM_DEVICE_GET_CLASS (self)->get_enabled)
+ return NM_DEVICE_GET_CLASS (self)->get_enabled (self);
+ return TRUE;
+}
+
+void
+nm_device_set_enabled (NMDevice *self, gboolean enabled)
+{
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ if (NM_DEVICE_GET_CLASS (self)->set_enabled)
+ NM_DEVICE_GET_CLASS (self)->set_enabled (self, enabled);
+}
+
+gboolean
+nm_device_get_autoconnect (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ return NM_DEVICE_GET_PRIVATE (device)->autoconnect;
+}
+
+static gboolean
+autoconnect_allowed_accumulator (GSignalInvocationHint *ihint,
+ GValue *return_accu,
+ const GValue *handler_return, gpointer data)
+{
+ if (!g_value_get_boolean (handler_return))
+ g_value_set_boolean (return_accu, FALSE);
+ return TRUE;
+}
+
+gboolean
+nm_device_autoconnect_allowed (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ GValue instance = G_VALUE_INIT;
+ GValue retval = G_VALUE_INIT;
+
+ g_value_init (&instance, G_TYPE_OBJECT);
+ g_value_set_object (&instance, self);
+
+ g_value_init (&retval, G_TYPE_BOOLEAN);
+ if (priv->autoconnect)
+ g_value_set_boolean (&retval, TRUE);
+ else
+ g_value_set_boolean (&retval, FALSE);
+
+ /* Use g_signal_emitv() rather than g_signal_emit() to avoid the return
+ * value being changed if no handlers are connected */
+ g_signal_emitv (&instance, signals[AUTOCONNECT_ALLOWED], 0, &retval);
+ g_value_unset (&instance);
+ return g_value_get_boolean (&retval);
+}
+
+static gboolean
+can_auto_connect (NMDevice *device,
+ NMConnection *connection,
+ char **specific_object)
+{
+ NMSettingConnection *s_con;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ if (!nm_setting_connection_get_autoconnect (s_con))
+ return FALSE;
+
+ return nm_device_connection_is_available (device, connection, FALSE);
+}
+
+static gboolean
+device_has_config (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ /* Check for IP configuration. */
+ if (priv->ip4_config && nm_ip4_config_get_num_addresses (priv->ip4_config))
+ return TRUE;
+ if (priv->ip6_config && nm_ip6_config_get_num_addresses (priv->ip6_config))
+ return TRUE;
+
+ /* The existence of a software device is good enough. */
+ if (nm_device_is_software (device))
+ return TRUE;
+
+ /* Slaves are also configured by definition */
+ if (nm_platform_link_get_master (priv->ifindex) > 0)
+ return TRUE;
+
+ return FALSE;
+}
+
+NMConnection *
+nm_device_generate_connection (NMDevice *device)
+{
+ NMDeviceClass *klass = NM_DEVICE_GET_CLASS (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ const char *ifname = nm_device_get_iface (device);
+ int ifindex = nm_device_get_ifindex (device);
+ NMConnection *connection;
+ NMSetting *s_con;
+ NMSetting *s_ip4;
+ NMSetting *s_ip6;
+ gs_free char *uuid = NULL;
+ gs_free char *name = NULL;
+ int master_ifindex = 0;
+ const char *ip4_method, *ip6_method;
+ GError *error = NULL;
+
+ /* If update_connection() is not implemented, just fail. */
+ if (!klass->update_connection)
+ return NULL;
+
+ /* Return NULL if device is unconfigured. */
+ if (!device_has_config (device)) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): device has no existing configuration", ifname);
+ return NULL;
+ }
+
+ if (ifindex)
+ master_ifindex = nm_platform_link_get_master (ifindex);
+ if (master_ifindex) {
+ NMDevice *master;
+
+ master = nm_manager_get_device_by_ifindex (nm_manager_get (), master_ifindex);
+ if (!master || !nm_device_get_act_request (master)) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): cannot generate connection for slave before its master (%s)",
+ ifname, nm_platform_link_get_name (master_ifindex));
+ return NULL;
+ }
+ }
+
+ connection = nm_connection_new ();
+ s_con = nm_setting_connection_new ();
+ uuid = nm_utils_uuid_generate ();
+ name = g_strdup_printf ("%s", ifname);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_ID, name,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, ifname,
+ NM_SETTING_CONNECTION_TIMESTAMP, (guint64) time (NULL),
+ NULL);
+ if (klass->connection_type)
+ g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, klass->connection_type, NULL);
+ nm_connection_add_setting (connection, s_con);
+
+ /* If the device is a slave, update various slave settings */
+ if (master_ifindex) {
+ const char *master_iface = nm_platform_link_get_name (master_ifindex);
+ const char *slave_type = NULL;
+ gboolean success = FALSE;
+
+ switch (nm_platform_link_get_type (master_ifindex)) {
+ case NM_LINK_TYPE_BRIDGE:
+ slave_type = NM_SETTING_BRIDGE_SETTING_NAME;
+ success = nm_bridge_update_slave_connection (device, connection);
+ break;
+ case NM_LINK_TYPE_BOND:
+ slave_type = NM_SETTING_BOND_SETTING_NAME;
+ success = TRUE;
+ break;
+ case NM_LINK_TYPE_TEAM:
+ slave_type = NM_SETTING_TEAM_SETTING_NAME;
+ success = nm_team_update_slave_connection (device, connection);
+ break;
+ default:
+ g_warn_if_reached ();
+ break;
+ }
+
+ if (!success)
+ nm_log_err (LOGD_DEVICE, "(%s): failed to read slave configuration", ifname);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_MASTER, master_iface,
+ NM_SETTING_CONNECTION_SLAVE_TYPE, slave_type,
+ NULL);
+ } else {
+ /* Only regular and master devices get IP configuration; slaves do not */
+ s_ip4 = nm_ip4_config_create_setting (priv->ip4_config);
+ nm_connection_add_setting (connection, s_ip4);
+
+ s_ip6 = nm_ip6_config_create_setting (priv->ip6_config);
+ nm_connection_add_setting (connection, s_ip6);
+ }
+
+ klass->update_connection (device, connection);
+
+ /* Check the connection in case of update_connection() bug. */
+ if (!nm_connection_verify (connection, &error)) {
+ nm_log_err (LOGD_DEVICE, "(%s): Generated connection does not verify: %s",
+ nm_device_get_iface (device), error->message);
+ g_clear_error (&error);
+ g_object_unref (connection);
+ return NULL;
+ }
+
+ /* Ignore the connection if it has no IP configuration,
+ * no slave configuration, and is not a master interface.
+ */
+ ip4_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ ip6_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if ( g_strcmp0 (ip4_method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0
+ && g_strcmp0 (ip6_method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0
+ && !nm_setting_connection_get_master (NM_SETTING_CONNECTION (s_con))) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): ignoring generated connection (no IP and not slave)", ifname);
+ g_object_unref (connection);
+ connection = NULL;
+ }
+
+ return connection;
+}
+
+/**
+ * nm_device_get_best_auto_connection:
+ * @dev: an #NMDevice
+ * @connections: (element-type #NMConnection): a list of connections
+ * @specific_object: (out) (transfer full): on output, the path of an
+ * object associated with the returned connection, to be passed to
+ * nm_manager_activate_connection(), or %NULL.
+ *
+ * Looks through @connections to see if there is a connection that can
+ * be auto-activated on @dev right now. This requires, at a minimum,
+ * that the connection be compatible with @dev, and that it have the
+ * #NMSettingConnection:autoconnect property set. Some devices impose
+ * additional requirements. (Eg, a Wi-Fi connection can only be
+ * activated if its SSID was seen in the last scan.)
+ *
+ * Returns: an auto-activatable #NMConnection, or %NULL if none are
+ * available.
+ */
+
+NMConnection *
+nm_device_get_best_auto_connection (NMDevice *dev,
+ GSList *connections,
+ char **specific_object)
+{
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_DEVICE (dev), NULL);
+ g_return_val_if_fail (specific_object != NULL, NULL);
+ g_return_val_if_fail (*specific_object == NULL, NULL);
+
+ for (iter = connections; iter; iter = iter->next) {
+ NMConnection *connection = NM_CONNECTION (iter->data);
+
+ if (NM_DEVICE_GET_CLASS (dev)->can_auto_connect (dev, connection, specific_object))
+ return connection;
+ }
+
+ return NULL;
+}
+
+gboolean
+nm_device_complete_connection (NMDevice *self,
+ NMConnection *connection,
+ const char *specific_object,
+ const GSList *existing_connections,
+ GError **error)
+{
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (connection != NULL, FALSE);
+
+ if (!NM_DEVICE_GET_CLASS (self)->complete_connection) {
+ g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_CONNECTION_INVALID,
+ "Device class %s had no complete_connection method",
+ G_OBJECT_TYPE_NAME (self));
+ return FALSE;
+ }
+
+ success = NM_DEVICE_GET_CLASS (self)->complete_connection (self,
+ connection,
+ specific_object,
+ existing_connections,
+ error);
+ if (success)
+ success = nm_connection_verify (connection, error);
+
+ return success;
+}
+
+static gboolean
+check_connection_compatible (NMDevice *device, NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+ const char *config_iface, *device_iface;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ config_iface = nm_setting_connection_get_interface_name (s_con);
+ device_iface = nm_device_get_iface (device);
+ if (config_iface && strcmp (config_iface, device_iface) != 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * nm_device_check_connection_compatible:
+ * @device: an #NMDevice
+ * @connection: an #NMConnection
+ *
+ * Checks if @connection could potentially be activated on @device.
+ * This means only that @device has the proper capabilities, and that
+ * @connection is not locked to some other device. It does not
+ * necessarily mean that @connection could be activated on @device
+ * right now. (Eg, it might refer to a Wi-Fi network that is not
+ * currently available.)
+ *
+ * Returns: #TRUE if @connection could potentially be activated on
+ * @device.
+ */
+gboolean
+nm_device_check_connection_compatible (NMDevice *device, NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+
+ return NM_DEVICE_GET_CLASS (device)->check_connection_compatible (device, connection);
+}
+
+static gboolean
+string_in_list (const char *str, const char **array, gsize array_len)
+{
+ gsize i;
+
+ for (i = 0; i < array_len; i++) {
+ if (strcmp (str, array[i]) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * nm_device_can_assume_connections:
+ * @device: #NMDevice instance
+ *
+ * This is a convenience function to determine whether connection assumption
+ * is available for this device.
+ *
+ * Returns: %TRUE if the device is capable of assuming connections, %FALSE if not
+ */
+static gboolean
+nm_device_can_assume_connections (NMDevice *device)
+{
+ return !!NM_DEVICE_GET_CLASS (device)->update_connection;
+}
+
+/**
+ * nm_device_can_assume_active_connection:
+ * @device: #NMDevice instance
+ *
+ * This is a convenience function to determine whether the device's active
+ * connection can be assumed if NetworkManager restarts. This method returns
+ * %TRUE if and only if the device can assume connections, and the device has
+ * an active connection, and that active connection can be assumed.
+ *
+ * Returns: %TRUE if the device's active connection can be assumed, or %FALSE
+ * if there is no active connection or the active connection cannot be
+ * assumed.
+ */
+gboolean
+nm_device_can_assume_active_connection (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMConnection *connection;
+ const char *method;
+ const char *assumable_ip6_methods[] = {
+ NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP6_CONFIG_METHOD_DHCP,
+ NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL,
+ NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ };
+ const char *assumable_ip4_methods[] = {
+ NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
+ NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ };
+
+ if (!nm_device_can_assume_connections (device))
+ return FALSE;
+
+ connection = nm_device_get_connection (device);
+ if (!connection)
+ return FALSE;
+
+ /* Can't assume connections that aren't yet configured
+ * FIXME: what about bridges/bonds waiting for slaves?
+ */
+ if (priv->state < NM_DEVICE_STATE_IP_CONFIG)
+ return FALSE;
+ if (priv->ip4_state != IP_DONE && priv->ip6_state != IP_DONE)
+ return FALSE;
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if (!string_in_list (method, assumable_ip6_methods, G_N_ELEMENTS (assumable_ip6_methods)))
+ return FALSE;
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if (!string_in_list (method, assumable_ip4_methods, G_N_ELEMENTS (assumable_ip4_methods)))
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
+nm_device_emit_recheck_assume (gpointer self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ priv->recheck_assume_id = 0;
+ if (!nm_device_get_act_request (self) && (priv->ip4_config || priv->ip6_config))
+ g_signal_emit (self, signals[RECHECK_ASSUME], 0);
+ return G_SOURCE_REMOVE;
+}
+
+void
+nm_device_queue_recheck_assume (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (nm_device_can_assume_connections (self) && !priv->recheck_assume_id)
+ priv->recheck_assume_id = g_idle_add (nm_device_emit_recheck_assume, self);
+}
+
+void
+nm_device_emit_recheck_auto_activate (NMDevice *self)
+{
+ g_signal_emit (self, signals[RECHECK_AUTO_ACTIVATE], 0);
+}
+
+static void
+dnsmasq_state_changed_cb (NMDnsMasqManager *manager, guint32 status, gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+
+ switch (status) {
+ case NM_DNSMASQ_STATUS_DEAD:
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SHARED_START_FAILED);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+activation_source_clear (NMDevice *self, gboolean remove_source, int family)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ guint *act_source_id;
+ gpointer *act_source_func;
+
+ if (family == AF_INET6) {
+ act_source_id = &priv->act_source6_id;
+ act_source_func = &priv->act_source6_func;
+ } else {
+ act_source_id = &priv->act_source_id;
+ act_source_func = &priv->act_source_func;
+ }
+
+ if (*act_source_id) {
+ if (remove_source)
+ g_source_remove (*act_source_id);
+ *act_source_id = 0;
+ *act_source_func = NULL;
+ }
+}
+
+static void
+activation_source_schedule (NMDevice *self, GSourceFunc func, int family)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ guint *act_source_id;
+ gpointer *act_source_func;
+
+ if (family == AF_INET6) {
+ act_source_id = &priv->act_source6_id;
+ act_source_func = &priv->act_source6_func;
+ } else {
+ act_source_id = &priv->act_source_id;
+ act_source_func = &priv->act_source_func;
+ }
+
+ if (*act_source_id) {
+ nm_log_err (LOGD_DEVICE, "activation stage already scheduled");
+ }
+
+ /* Don't bother rescheduling the same function that's about to
+ * run anyway. Fixes issues with crappy wireless drivers sending
+ * streams of associate events before NM has had a chance to process
+ * the first one.
+ */
+ if (!*act_source_id || (*act_source_func != func)) {
+ activation_source_clear (self, TRUE, family);
+ *act_source_id = g_idle_add (func, self);
+ *act_source_func = func;
+ }
+}
+
+gboolean
+nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6)
+{
+ NMConnection *connection;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+
+ g_return_val_if_fail (self != NULL, TRUE);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ /* Fail the connection if the failed IP method is required to complete */
+ if (ip6) {
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ if (!nm_setting_ip6_config_get_may_fail (s_ip6))
+ return TRUE;
+ } else {
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (!nm_setting_ip4_config_get_may_fail (s_ip4))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+master_ready_cb (NMActiveConnection *active,
+ GParamSpec *pspec,
+ NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActiveConnection *master;
+
+ g_assert (priv->state == NM_DEVICE_STATE_PREPARE);
+
+ /* Notify a master device that it has a new slave */
+ g_assert (nm_active_connection_get_master_ready (active));
+ master = nm_active_connection_get_master (active);
+
+ priv->master = g_object_ref (nm_active_connection_get_device (master));
+ nm_device_master_add_slave (priv->master,
+ self,
+ nm_active_connection_get_assumed (active) ? FALSE : TRUE);
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): master connection ready; master device %s",
+ nm_device_get_iface (self),
+ nm_device_get_iface (priv->master));
+
+ if (priv->master_ready_id) {
+ g_signal_handler_disconnect (active, priv->master_ready_id);
+ priv->master_ready_id = 0;
+ }
+
+ nm_device_activate_schedule_stage2_device_config (self);
+}
+
+static NMActStageReturn
+act_stage1_prepare (NMDevice *self, NMDeviceStateReason *reason)
+{
+ return NM_ACT_STAGE_RETURN_SUCCESS;
+}
+
+/*
+ * nm_device_activate_stage1_device_prepare
+ *
+ * Prepare for device activation
+ *
+ */
+static gboolean
+nm_device_activate_stage1_device_prepare (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *iface;
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+ NMActiveConnection *active = NM_ACTIVE_CONNECTION (priv->act_request);
+
+ /* Clear the activation source ID now that this stage has run */
+ activation_source_clear (self, FALSE, 0);
+
+ priv->ip4_state = priv->ip6_state = IP_NONE;
+
+ /* Notify the new ActiveConnection along with the state change */
+ g_object_notify (G_OBJECT (self), NM_DEVICE_ACTIVE_CONNECTION);
+
+ iface = nm_device_get_iface (self);
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 1 of 5 (Device Prepare) started...", iface);
+ nm_device_state_changed (self, NM_DEVICE_STATE_PREPARE, NM_DEVICE_STATE_REASON_NONE);
+
+ /* Assumed connections were already set up outside NetworkManager */
+ if (!nm_active_connection_get_assumed (active)) {
+ ret = NM_DEVICE_GET_CLASS (self)->act_stage1_prepare (self, &reason);
+ if (ret == NM_ACT_STAGE_RETURN_POSTPONE) {
+ goto out;
+ } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ goto out;
+ }
+ g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
+ }
+
+ if (nm_active_connection_get_master (active)) {
+ /* If the master connection is ready for slaves, attach ourselves */
+ if (nm_active_connection_get_master_ready (active))
+ master_ready_cb (active, NULL, self);
+ else {
+ nm_log_dbg (LOGD_DEVICE, "(%s): waiting for master connection to become ready",
+ nm_device_get_iface (self));
+
+ /* Attach a signal handler and wait for the master connection to begin activating */
+ g_assert (priv->master_ready_id == 0);
+ priv->master_ready_id = g_signal_connect (active,
+ "notify::" NM_ACTIVE_CONNECTION_INT_MASTER_READY,
+ (GCallback) master_ready_cb,
+ self);
+ /* Postpone */
+ }
+ } else
+ nm_device_activate_schedule_stage2_device_config (self);
+
+out:
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 1 of 5 (Device Prepare) complete.", iface);
+ return FALSE;
+}
+
+
+/*
+ * nm_device_activate_schedule_stage1_device_prepare
+ *
+ * Prepare a device for activation
+ *
+ */
+void
+nm_device_activate_schedule_stage1_device_prepare (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ g_return_if_fail (priv->act_request);
+
+ activation_source_schedule (self, nm_device_activate_stage1_device_prepare, 0);
+
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 1 of 5 (Device Prepare) scheduled...",
+ nm_device_get_iface (self));
+}
+
+static NMActStageReturn
+act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
+{
+ /* Nothing to do */
+ return NM_ACT_STAGE_RETURN_SUCCESS;
+}
+
+/*
+ * nm_device_activate_stage2_device_config
+ *
+ * Determine device parameters and set those on the device, ie
+ * for wireless devices, set SSID, keys, etc.
+ *
+ */
+static gboolean
+nm_device_activate_stage2_device_config (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *iface;
+ NMActStageReturn ret;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+ gboolean no_firmware = FALSE;
+ NMActiveConnection *active = NM_ACTIVE_CONNECTION (priv->act_request);
+ GSList *iter;
+
+ /* Clear the activation source ID now that this stage has run */
+ activation_source_clear (self, FALSE, 0);
+
+ iface = nm_device_get_iface (self);
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) starting...", iface);
+ nm_device_state_changed (self, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_REASON_NONE);
+
+ /* Assumed connections were already set up outside NetworkManager */
+ if (!nm_active_connection_get_assumed (active)) {
+ if (!nm_device_bring_up (self, FALSE, &no_firmware)) {
+ if (no_firmware)
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_FIRMWARE_MISSING);
+ else
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_CONFIG_FAILED);
+ goto out;
+ }
+
+ ret = NM_DEVICE_GET_CLASS (self)->act_stage2_config (self, &reason);
+ if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
+ goto out;
+ else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ goto out;
+ }
+ g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
+ }
+
+ /* If we have slaves that aren't yet enslaved, do that now */
+ for (iter = priv->slaves; iter; iter = g_slist_next (iter)) {
+ SlaveInfo *info = iter->data;
+ NMDeviceState slave_state = nm_device_get_state (info->slave);
+
+ if (slave_state == NM_DEVICE_STATE_IP_CONFIG)
+ nm_device_enslave_slave (self, info->slave, nm_device_get_connection (info->slave));
+ else if ( nm_device_uses_generated_connection (self)
+ && slave_state <= NM_DEVICE_STATE_DISCONNECTED)
+ nm_device_queue_recheck_assume (info->slave);
+ }
+
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) successful.", iface);
+
+ nm_device_activate_schedule_stage3_ip_config_start (self);
+
+out:
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) complete.", iface);
+ return FALSE;
+}
+
+
+/*
+ * nm_device_activate_schedule_stage2_device_config
+ *
+ * Schedule setup of the hardware device
+ *
+ */
+void
+nm_device_activate_schedule_stage2_device_config (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ g_return_if_fail (priv->act_request);
+
+ activation_source_schedule (self, nm_device_activate_stage2_device_config, 0);
+
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) scheduled...",
+ nm_device_get_iface (self));
+}
+
+/*********************************************/
+/* avahi-autoipd stuff */
+
+static void
+aipd_timeout_remove (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->aipd_timeout) {
+ g_source_remove (priv->aipd_timeout);
+ priv->aipd_timeout = 0;
+ }
+}
+
+static void
+aipd_cleanup (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->aipd_watch) {
+ g_source_remove (priv->aipd_watch);
+ priv->aipd_watch = 0;
+ }
+
+ if (priv->aipd_pid > 0) {
+ kill (priv->aipd_pid, SIGKILL);
+
+ /* ensure the child is reaped */
+ nm_log_dbg (LOGD_AUTOIP4, "waiting for avahi-autoipd pid %d to exit", priv->aipd_pid);
+ waitpid (priv->aipd_pid, NULL, 0);
+ nm_log_dbg (LOGD_AUTOIP4, "avahi-autoip pid %d cleaned up", priv->aipd_pid);
+
+ priv->aipd_pid = -1;
+ }
+
+ aipd_timeout_remove (self);
+}
+
+static NMIP4Config *
+aipd_get_ip4_config (NMDevice *self, guint32 lla)
+{
+ NMIP4Config *config = NULL;
+ NMPlatformIP4Address address;
+ NMPlatformIP4Route route;
+
+ config = nm_ip4_config_new ();
+ g_assert (config);
+
+ memset (&address, 0, sizeof (address));
+ address.address = lla;
+ address.plen = 16;
+ address.source = NM_PLATFORM_SOURCE_IP4LL;
+ nm_ip4_config_add_address (config, &address);
+
+ /* Add a multicast route for link-local connections: destination= 224.0.0.0, netmask=240.0.0.0 */
+ memset (&route, 0, sizeof (route));
+ route.network = htonl (0xE0000000L);
+ route.plen = 4;
+ route.source = NM_PLATFORM_SOURCE_IP4LL;
+ route.metric = nm_device_get_priority (self);
+ nm_ip4_config_add_route (config, &route);
+
+ return config;
+}
+
+#define IPV4LL_NETWORK (htonl (0xA9FE0000L))
+#define IPV4LL_NETMASK (htonl (0xFFFF0000L))
+
+void
+nm_device_handle_autoip4_event (NMDevice *self,
+ const char *event,
+ const char *address)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection = NULL;
+ const char *iface, *method;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+
+ g_return_if_fail (event != NULL);
+
+ if (priv->act_request == NULL)
+ return;
+
+ connection = nm_act_request_get_connection (priv->act_request);
+ g_assert (connection);
+
+ /* Ignore if the connection isn't an AutoIP connection */
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL) != 0)
+ return;
+
+ iface = nm_device_get_iface (self);
+
+ if (strcmp (event, "BIND") == 0) {
+ guint32 lla;
+ NMIP4Config *config;
+
+ if (inet_pton (AF_INET, address, &lla) <= 0) {
+ nm_log_err (LOGD_AUTOIP4, "(%s): invalid address %s received from avahi-autoipd.",
+ iface, address);
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_AUTOIP_ERROR);
+ return;
+ }
+
+ if ((lla & IPV4LL_NETMASK) != IPV4LL_NETWORK) {
+ nm_log_err (LOGD_AUTOIP4, "(%s): invalid address %s received from avahi-autoipd (not link-local).",
+ iface, address);
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_AUTOIP_ERROR);
+ return;
+ }
+
+ config = aipd_get_ip4_config (self, lla);
+ if (config == NULL) {
+ nm_log_err (LOGD_AUTOIP4, "failed to get autoip config");
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+ return;
+ }
+
+ if (priv->ip4_state == IP_CONF) {
+ aipd_timeout_remove (self);
+ nm_device_activate_schedule_ip4_config_result (self, config);
+ } else if (priv->ip4_state == IP_DONE) {
+ if (!ip4_config_merge_and_apply (self, config, TRUE, &reason)) {
+ nm_log_err (LOGD_AUTOIP4, "(%s): failed to update IP4 config for autoip change.",
+ nm_device_get_iface (self));
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ }
+ } else
+ g_assert_not_reached ();
+
+ g_object_unref (config);
+ } else {
+ nm_log_warn (LOGD_AUTOIP4, "(%s): autoip address %s no longer valid because '%s'.",
+ iface, address, event);
+
+ /* The address is gone; terminate the connection or fail activation */
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
+ }
+}
+
+static void
+aipd_watch_cb (GPid pid, gint status, gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDeviceState state;
+ const char *iface;
+
+ if (!priv->aipd_watch)
+ return;
+ priv->aipd_watch = 0;
+
+ iface = nm_device_get_iface (self);
+
+ if (WIFEXITED (status)) {
+ nm_log_dbg (LOGD_AUTOIP4, "(%s): avahi-autoipd exited with error code %d",
+ iface, WEXITSTATUS (status));
+ } else if (WIFSTOPPED (status)) {
+ nm_log_warn (LOGD_AUTOIP4, "(%s): avahi-autoipd stopped unexpectedly with signal %d",
+ iface, WSTOPSIG (status));
+ } else if (WIFSIGNALED (status)) {
+ nm_log_warn (LOGD_AUTOIP4, "(%s): avahi-autoipd died with signal %d",
+ iface, WTERMSIG (status));
+ } else {
+ nm_log_warn (LOGD_AUTOIP4, "(%s): avahi-autoipd died from an unknown cause", iface);
+ }
+
+ aipd_cleanup (self);
+
+ state = nm_device_get_state (self);
+ if (nm_device_is_activating (self) || (state == NM_DEVICE_STATE_ACTIVATED))
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_AUTOIP_FAILED);
+}
+
+static gboolean
+aipd_timeout_cb (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->aipd_timeout) {
+ nm_log_info (LOGD_AUTOIP4, "(%s): avahi-autoipd timed out.", nm_device_get_iface (self));
+ priv->aipd_timeout = 0;
+ aipd_cleanup (self);
+
+ if (priv->ip4_state == IP_CONF)
+ nm_device_activate_schedule_ip4_config_timeout (self);
+ }
+
+ return FALSE;
+}
+
+static void
+aipd_child_setup (gpointer user_data G_GNUC_UNUSED)
+{
+ /* We are in the child process at this point.
+ * Give child it's own program group for signal
+ * separation.
+ */
+ pid_t pid = getpid ();
+ setpgid (pid, pid);
+
+ /*
+ * We blocked signals in main(). We need to restore original signal
+ * mask for avahi-autoipd here so that it can receive signals.
+ */
+ nm_unblock_posix_signals (NULL);
+}
+
+/* default to installed helper, but can be modified for testing */
+const char *nm_device_autoipd_helper_path = LIBEXECDIR "/nm-avahi-autoipd.action";
+
+static NMActStageReturn
+aipd_start (NMDevice *self, NMDeviceStateReason *reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *iface = nm_device_get_iface (self);
+ char *argv[6], *cmdline;
+ const char **aipd_binary = NULL;
+ static const char *aipd_paths[] = {
+ "/usr/sbin/avahi-autoipd",
+ "/usr/local/sbin/avahi-autoipd",
+ NULL
+ };
+ int i = 0;
+ GError *error = NULL;
+
+ aipd_cleanup (self);
+
+ /* Find avahi-autoipd */
+ aipd_binary = aipd_paths;
+ while (*aipd_binary != NULL) {
+ if (g_file_test (*aipd_binary, G_FILE_TEST_EXISTS))
+ break;
+ aipd_binary++;
+ }
+
+ if (!*aipd_binary) {
+ nm_log_warn (LOGD_DEVICE | LOGD_AUTOIP4,
+ "Activation (%s) Stage 3 of 5 (IP Configure Start) failed"
+ " to start avahi-autoipd: not found", iface);
+ *reason = NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ argv[i++] = (char *) (*aipd_binary);
+ argv[i++] = "--script";
+ argv[i++] = (char *) nm_device_autoipd_helper_path;
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_AUTOIP4))
+ argv[i++] = "--debug";
+ argv[i++] = (char *) nm_device_get_ip_iface (self);
+ argv[i++] = NULL;
+
+ cmdline = g_strjoinv (" ", argv);
+ nm_log_dbg (LOGD_AUTOIP4, "running: %s", cmdline);
+ g_free (cmdline);
+
+ if (!g_spawn_async ("/", argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
+ &aipd_child_setup, NULL, &(priv->aipd_pid), &error)) {
+ nm_log_warn (LOGD_DEVICE | LOGD_AUTOIP4,
+ "Activation (%s) Stage 3 of 5 (IP Configure Start) failed"
+ " to start avahi-autoipd: %s",
+ iface,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ aipd_cleanup (self);
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ nm_log_info (LOGD_DEVICE | LOGD_AUTOIP4,
+ "Activation (%s) Stage 3 of 5 (IP Configure Start) started"
+ " avahi-autoipd...", iface);
+
+ /* Monitor the child process so we know when it dies */
+ priv->aipd_watch = g_child_watch_add (priv->aipd_pid, aipd_watch_cb, self);
+
+ /* Start a timeout to bound the address attempt */
+ priv->aipd_timeout = g_timeout_add_seconds (20, aipd_timeout_cb, self);
+
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
+
+/*********************************************/
+/* DHCPv4 stuff */
+
+static void
+dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->dhcp4_client) {
+ /* Stop any ongoing DHCP transaction on this device */
+ if (priv->dhcp4_state_sigid) {
+ g_signal_handler_disconnect (priv->dhcp4_client, priv->dhcp4_state_sigid);
+ priv->dhcp4_state_sigid = 0;
+ }
+
+ if (priv->dhcp4_timeout_sigid) {
+ g_signal_handler_disconnect (priv->dhcp4_client, priv->dhcp4_timeout_sigid);
+ priv->dhcp4_timeout_sigid = 0;
+ }
+
+ nm_device_remove_pending_action (self, PENDING_ACTION_DHCP4, FALSE);
+
+ if (stop)
+ nm_dhcp_client_stop (priv->dhcp4_client, release);
+
+ g_clear_object (&priv->dhcp4_client);
+ }
+
+ if (priv->dhcp4_config) {
+ g_clear_object (&priv->dhcp4_config);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP4_CONFIG);
+ }
+}
+
+static void
+dhcp4_add_option_cb (gpointer key, gpointer value, gpointer user_data)
+{
+ nm_dhcp4_config_add_option (NM_DHCP4_CONFIG (user_data),
+ (const char *) key,
+ (const char *) value);
+}
+
+static gboolean
+ip4_config_merge_and_apply (NMDevice *self,
+ NMIP4Config *config,
+ gboolean commit,
+ NMDeviceStateReason *out_reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ gboolean success;
+ NMIP4Config *composite;
+
+ /* Merge all the configs into the composite config */
+ if (config) {
+ g_clear_object (&priv->dev_ip4_config);
+ priv->dev_ip4_config = g_object_ref (config);
+ }
+
+ composite = nm_ip4_config_new ();
+ if (priv->dev_ip4_config)
+ nm_ip4_config_merge (composite, priv->dev_ip4_config);
+ if (priv->vpn4_config)
+ nm_ip4_config_merge (composite, priv->vpn4_config);
+ if (priv->ext_ip4_config)
+ nm_ip4_config_merge (composite, priv->ext_ip4_config);
+
+ /* Merge user overrides into the composite config */
+ connection = nm_device_get_connection (self);
+ if (connection) {
+ nm_ip4_config_merge_setting (composite,
+ nm_connection_get_setting_ip4_config (connection),
+ nm_device_get_priority (self));
+ }
+
+ /* Allow setting MTU etc */
+ if (commit) {
+ if (NM_DEVICE_GET_CLASS (self)->ip4_config_pre_commit)
+ NM_DEVICE_GET_CLASS (self)->ip4_config_pre_commit (self, composite);
+ }
+
+ success = nm_device_set_ip4_config (self, composite, commit, out_reason);
+ g_object_unref (composite);
+ return success;
+}
+
+static void
+dhcp4_lease_change (NMDevice *self, NMIP4Config *config)
+{
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+
+ g_return_if_fail (config != NULL);
+
+ if (!ip4_config_merge_and_apply (self, config, TRUE, &reason)) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to update IPv4 config for DHCP change.",
+ nm_device_get_ip_iface (self));
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ } else {
+ /* Notify dispatcher scripts of new DHCP4 config */
+ nm_dispatcher_call (DISPATCHER_ACTION_DHCP4_CHANGE,
+ nm_device_get_connection (self),
+ self,
+ NULL,
+ NULL,
+ NULL);
+ }
+}
+
+static void
+dhcp4_fail (NMDevice *device, gboolean timeout)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ nm_dhcp4_config_reset (priv->dhcp4_config);
+
+ if (timeout || (priv->ip4_state == IP_CONF))
+ nm_device_activate_schedule_ip4_config_timeout (device);
+ else if (priv->ip4_state == IP_FAIL)
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
+}
+
+static void
+dhcp4_state_changed (NMDHCPClient *client,
+ NMDHCPState state,
+ gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMIP4Config *config;
+
+ g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == FALSE);
+
+ nm_log_dbg (LOGD_DHCP4, "(%s): new DHCPv4 client state %d",
+ nm_device_get_iface (device), state);
+
+ switch (state) {
+ case DHC_BOUND4: /* lease obtained */
+ case DHC_RENEW4: /* lease renewed */
+ case DHC_REBOOT: /* have valid lease, but now obtained a different one */
+ case DHC_REBIND4: /* new, different lease */
+ config = nm_dhcp_client_get_ip4_config (priv->dhcp4_client, FALSE);
+ if (!config) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to get IPv4 config in response to DHCP event.",
+ nm_device_get_ip_iface (device));
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+ break;
+ }
+
+ /* Update the DHCP4 config object with new DHCP options */
+ nm_dhcp4_config_reset (priv->dhcp4_config);
+ nm_dhcp_client_foreach_option (priv->dhcp4_client,
+ dhcp4_add_option_cb,
+ priv->dhcp4_config);
+ g_object_notify (G_OBJECT (device), NM_DEVICE_DHCP4_CONFIG);
+
+ if (priv->ip4_state == IP_CONF)
+ nm_device_activate_schedule_ip4_config_result (device, config);
+ else if (priv->ip4_state == IP_DONE)
+ dhcp4_lease_change (device, config);
+ g_object_unref (config);
+
+ break;
+ case DHC_TIMEOUT: /* timed out contacting DHCP server */
+ dhcp4_fail (device, TRUE);
+ break;
+ case DHC_END: /* dhclient exited normally */
+ case DHC_FAIL: /* all attempts to contact server timed out, sleeping */
+ case DHC_ABEND: /* dhclient exited abnormally */
+ /* dhclient quit and can't get/renew a lease; so kill the connection */
+ dhcp4_fail (device, FALSE);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+dhcp4_timeout (NMDHCPClient *client, gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+
+ g_return_if_fail (nm_device_get_act_request (device) != NULL);
+ g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == FALSE);
+
+ nm_dhcp_client_stop (client, FALSE);
+ dhcp4_fail (device, TRUE);
+}
+
+static NMActStageReturn
+dhcp4_start (NMDevice *self,
+ NMConnection *connection,
+ NMDeviceStateReason *reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMSettingIP4Config *s_ip4;
+ GByteArray *tmp = NULL;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+
+ /* Clear old exported DHCP options */
+ if (priv->dhcp4_config)
+ g_object_unref (priv->dhcp4_config);
+ priv->dhcp4_config = nm_dhcp4_config_new ();
+
+ if (priv->hw_addr_len) {
+ tmp = g_byte_array_sized_new (priv->hw_addr_len);
+ g_byte_array_append (tmp, priv->hw_addr, priv->hw_addr_len);
+ }
+
+ /* Begin DHCP on the interface */
+ g_warn_if_fail (priv->dhcp4_client == NULL);
+ priv->dhcp4_client = nm_dhcp_manager_start_ip4 (nm_dhcp_manager_get (),
+ nm_device_get_ip_iface (self),
+ tmp,
+ nm_connection_get_uuid (connection),
+ nm_device_get_priority (self),
+ s_ip4,
+ priv->dhcp_timeout,
+ priv->dhcp_anycast_address);
+
+ if (tmp)
+ g_byte_array_free (tmp, TRUE);
+
+ if (!priv->dhcp4_client) {
+ *reason = NM_DEVICE_STATE_REASON_DHCP_START_FAILED;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ priv->dhcp4_state_sigid = g_signal_connect (priv->dhcp4_client,
+ NM_DHCP_CLIENT_SIGNAL_STATE_CHANGED,
+ G_CALLBACK (dhcp4_state_changed),
+ self);
+ priv->dhcp4_timeout_sigid = g_signal_connect (priv->dhcp4_client,
+ NM_DHCP_CLIENT_SIGNAL_TIMEOUT,
+ G_CALLBACK (dhcp4_timeout),
+ self);
+
+ nm_device_add_pending_action (self, PENDING_ACTION_DHCP4, TRUE);
+
+ /* DHCP devices will be notified by the DHCP manager when stuff happens */
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
+
+gboolean
+nm_device_dhcp4_renew (NMDevice *self, gboolean release)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActStageReturn ret;
+ NMDeviceStateReason reason;
+ NMConnection *connection;
+
+ g_return_val_if_fail (priv->dhcp4_client != NULL, FALSE);
+
+ nm_log_info (LOGD_DHCP4, "(%s): DHCPv4 lease renewal requested",
+ nm_device_get_iface (self));
+
+ /* Terminate old DHCP instance and release the old lease */
+ dhcp4_cleanup (self, TRUE, release);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ /* Start DHCP again on the interface */
+ ret = dhcp4_start (self, connection, &reason);
+
+ return (ret != NM_ACT_STAGE_RETURN_FAILURE);
+}
+
+/*********************************************/
+
+static GHashTable *shared_ips = NULL;
+
+static void
+release_shared_ip (gpointer data)
+{
+ g_hash_table_remove (shared_ips, data);
+}
+
+static gboolean
+reserve_shared_ip (NMSettingIP4Config *s_ip4, NMPlatformIP4Address *address)
+{
+ if (G_UNLIKELY (shared_ips == NULL))
+ shared_ips = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+ memset (address, 0, sizeof (*address));
+
+ if (s_ip4 && nm_setting_ip4_config_get_num_addresses (s_ip4)) {
+ /* Use the first user-supplied address */
+ NMIP4Address *user = nm_setting_ip4_config_get_address (s_ip4, 0);
+
+ g_assert (user);
+ address->address = nm_ip4_address_get_address (user);
+ address->plen = nm_ip4_address_get_prefix (user);
+ } else {
+ /* Find an unused address in the 10.42.x.x range */
+ guint32 start = (guint32) ntohl (0x0a2a0001); /* 10.42.0.1 */
+ guint32 count = 0;
+
+ while (g_hash_table_lookup (shared_ips, GUINT_TO_POINTER (start + count))) {
+ count += ntohl (0x100);
+ if (count > ntohl (0xFE00)) {
+ nm_log_err (LOGD_SHARING, "ran out of shared IP addresses!");
+ return FALSE;
+ }
+ }
+ address->address = start + count;
+ address->plen = 24;
+
+ g_hash_table_insert (shared_ips,
+ GUINT_TO_POINTER (address->address),
+ GUINT_TO_POINTER (TRUE));
+ }
+
+ return TRUE;
+}
+
+static NMIP4Config *
+shared4_new_config (NMDevice *self, NMConnection *connection, NMDeviceStateReason *reason)
+{
+ NMIP4Config *config = NULL;
+ NMPlatformIP4Address address;
+
+ g_return_val_if_fail (self != NULL, NULL);
+
+ if (!reserve_shared_ip (nm_connection_get_setting_ip4_config (connection), &address)) {
+ *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
+ return NULL;
+ }
+
+ config = nm_ip4_config_new ();
+ address.source = NM_PLATFORM_SOURCE_SHARED;
+ nm_ip4_config_add_address (config, &address);
+
+ /* Remove the address lock when the object gets disposed */
+ g_object_set_data_full (G_OBJECT (config), "shared-ip",
+ GUINT_TO_POINTER (address.address),
+ release_shared_ip);
+
+ return config;
+}
+
+/*********************************************/
+
+static gboolean
+have_any_ready_slaves (NMDevice *device, const GSList *slaves)
+{
+ const GSList *iter;
+
+ /* Any enslaved slave is "ready" in the generic case as it's
+ * at least >= NM_DEVCIE_STATE_IP_CONFIG and has had Layer 2
+ * properties set up.
+ */
+ for (iter = slaves; iter; iter = g_slist_next (iter)) {
+ if (nm_device_get_enslaved (iter->data))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+ip4_requires_slaves (NMConnection *connection)
+{
+ const char *method;
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ return strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0;
+}
+
+static NMActStageReturn
+act_stage3_ip4_config_start (NMDevice *self,
+ NMIP4Config **out_config,
+ NMDeviceStateReason *reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
+ const char *method;
+ GSList *slaves;
+ gboolean ready_slaves;
+
+ g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if (priv->master)
+ g_assert_cmpstr (method, ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+
+ if ( strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) != 0
+ && priv->is_master
+ && !priv->carrier) {
+ nm_log_info (LOGD_IP4 | LOGD_DEVICE,
+ "(%s): IPv4 config waiting until carrier is on",
+ nm_device_get_ip_iface (self));
+ return NM_ACT_STAGE_RETURN_WAIT;
+ }
+
+ if (priv->is_master && ip4_requires_slaves (connection)) {
+ /* If the master has no ready slaves, and depends on slaves for
+ * a successful IPv4 attempt, then postpone IPv4 addressing.
+ */
+ slaves = nm_device_master_get_slaves (self);
+ ready_slaves = NM_DEVICE_GET_CLASS (self)->have_any_ready_slaves (self, slaves);
+ g_slist_free (slaves);
+
+ if (ready_slaves == FALSE) {
+ nm_log_info (LOGD_DEVICE | LOGD_IP4,
+ "(%s): IPv4 config waiting until slaves are ready",
+ nm_device_get_ip_iface (self));
+ return NM_ACT_STAGE_RETURN_WAIT;
+ }
+ }
+
+ /* Start IPv4 addressing based on the method requested */
+ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0)
+ ret = dhcp4_start (self, connection, reason);
+ else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL) == 0)
+ ret = aipd_start (self, reason);
+ else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0) {
+ /* Use only IPv4 config from the connection data */
+ *out_config = nm_ip4_config_new ();
+ g_assert (*out_config);
+ ret = NM_ACT_STAGE_RETURN_SUCCESS;
+ } else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) == 0) {
+ *out_config = shared4_new_config (self, connection, reason);
+ if (*out_config) {
+ priv->dnsmasq_manager = nm_dnsmasq_manager_new (nm_device_get_ip_iface (self));
+ ret = NM_ACT_STAGE_RETURN_SUCCESS;
+ } else
+ ret = NM_ACT_STAGE_RETURN_FAILURE;
+ } else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0) {
+ /* Nothing to do... */
+ ret = NM_ACT_STAGE_RETURN_STOP;
+ } else {
+ nm_log_warn (LOGD_IP4, "(%s): unhandled IPv4 config method '%s'; will fail",
+ nm_device_get_ip_iface (self), method);
+ }
+
+ return ret;
+}
+
+/*********************************************/
+/* DHCPv6 stuff */
+
+static void
+dhcp6_cleanup (NMDevice *self, gboolean stop, gboolean release)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ priv->dhcp6_mode = NM_RDISC_DHCP_LEVEL_NONE;
+ g_clear_object (&priv->dhcp6_ip6_config);
+
+ if (priv->dhcp6_client) {
+ if (priv->dhcp6_state_sigid) {
+ g_signal_handler_disconnect (priv->dhcp6_client, priv->dhcp6_state_sigid);
+ priv->dhcp6_state_sigid = 0;
+ }
+
+ if (priv->dhcp6_timeout_sigid) {
+ g_signal_handler_disconnect (priv->dhcp6_client, priv->dhcp6_timeout_sigid);
+ priv->dhcp6_timeout_sigid = 0;
+ }
+
+ nm_device_remove_pending_action (self, PENDING_ACTION_DHCP6, FALSE);
+
+ if (stop)
+ nm_dhcp_client_stop (priv->dhcp6_client, release);
+
+ g_clear_object (&priv->dhcp6_client);
+ }
+
+ if (priv->dhcp6_config) {
+ g_clear_object (&priv->dhcp6_config);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP6_CONFIG);
+ }
+}
+
+static void
+dhcp6_add_option_cb (gpointer key, gpointer value, gpointer user_data)
+{
+ nm_dhcp6_config_add_option (NM_DHCP6_CONFIG (user_data),
+ (const char *) key,
+ (const char *) value);
+}
+
+static gboolean
+ip6_config_merge_and_apply (NMDevice *self,
+ gboolean commit,
+ NMDeviceStateReason *out_reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ gboolean success;
+ NMIP6Config *composite;
+
+ /* If no config was passed in, create a new one */
+ composite = nm_ip6_config_new ();
+ g_assert (composite);
+
+ /* Merge all the IP configs into the composite config */
+ if (priv->ac_ip6_config)
+ nm_ip6_config_merge (composite, priv->ac_ip6_config);
+ if (priv->dhcp6_ip6_config)
+ nm_ip6_config_merge (composite, priv->dhcp6_ip6_config);
+ if (priv->vpn6_config)
+ nm_ip6_config_merge (composite, priv->vpn6_config);
+ if (priv->ext_ip6_config)
+ nm_ip6_config_merge (composite, priv->ext_ip6_config);
+
+ /* Merge user overrides into the composite config */
+ connection = nm_device_get_connection (self);
+ if (connection) {
+ nm_ip6_config_merge_setting (composite,
+ nm_connection_get_setting_ip6_config (connection),
+ nm_device_get_priority (self));
+ }
+
+ nm_ip6_config_addresses_sort (composite,
+ priv->rdisc ? priv->rdisc_use_tempaddr : NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
+
+ success = nm_device_set_ip6_config (self, composite, commit, out_reason);
+ g_object_unref (composite);
+ return success;
+}
+
+static void
+dhcp6_lease_change (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMConnection *connection;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+
+ if (priv->dhcp6_ip6_config == NULL) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to get DHCPv6 config for rebind",
+ nm_device_get_ip_iface (device));
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
+ return;
+ }
+
+ g_assert (priv->dhcp6_client); /* sanity check */
+
+ connection = nm_device_get_connection (device);
+ g_assert (connection);
+
+ /* Apply the updated config */
+ if (ip6_config_merge_and_apply (device, TRUE, &reason) == FALSE) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to update IPv6 config in response to DHCP event.",
+ nm_device_get_ip_iface (device));
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
+ } else {
+ /* Notify dispatcher scripts of new DHCPv6 config */
+ nm_dispatcher_call (DISPATCHER_ACTION_DHCP6_CHANGE, connection, device, NULL, NULL, NULL);
+ }
+}
+
+static void
+dhcp6_fail (NMDevice *device, gboolean timeout)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ nm_dhcp6_config_reset (priv->dhcp6_config);
+
+ if (timeout || (priv->ip6_state == IP_CONF))
+ nm_device_activate_schedule_ip6_config_timeout (device);
+ else if (priv->ip6_state == IP_FAIL)
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
+}
+
+static void
+dhcp6_state_changed (NMDHCPClient *client,
+ NMDHCPState state,
+ gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == TRUE);
+
+ nm_log_dbg (LOGD_DHCP6, "(%s): new DHCPv6 client state %d",
+ nm_device_get_iface (device), state);
+
+ switch (state) {
+ case DHC_BOUND6:
+ case DHC_RENEW6: /* lease renewed */
+ case DHC_REBOOT: /* have valid lease, but now obtained a different one */
+ case DHC_REBIND6: /* new, different lease */
+ g_clear_object (&priv->dhcp6_ip6_config);
+ priv->dhcp6_ip6_config = nm_dhcp_client_get_ip6_config (priv->dhcp6_client, FALSE);
+
+ /* Update the DHCP6 config object with new DHCP options */
+ nm_dhcp6_config_reset (priv->dhcp6_config);
+ if (priv->dhcp6_ip6_config) {
+ nm_dhcp_client_foreach_option (priv->dhcp6_client,
+ dhcp6_add_option_cb,
+ priv->dhcp6_config);
+ }
+ g_object_notify (G_OBJECT (device), NM_DEVICE_DHCP6_CONFIG);
+
+ if (priv->ip6_state == IP_CONF) {
+ if (priv->dhcp6_ip6_config == NULL) {
+ /* FIXME: Initial DHCP failed; should we fail IPv6 entirely then? */
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_DHCP_FAILED);
+ break;
+ }
+ nm_device_activate_schedule_ip6_config_result (device);
+ } else if (priv->ip6_state == IP_DONE)
+ dhcp6_lease_change (device);
+ break;
+ case DHC_TIMEOUT: /* timed out contacting DHCP server */
+ dhcp6_fail (device, TRUE);
+ break;
+ case DHC_END: /* dhclient exited normally */
+ /* In IPv6 info-only mode, the client doesn't handle leases so it
+ * may exit right after getting a response from the server. That's
+ * normal. In that case we just ignore the exit.
+ */
+ if (priv->dhcp6_mode == NM_RDISC_DHCP_LEVEL_OTHERCONF)
+ break;
+ /* Otherwise, fall through */
+ case DHC_FAIL: /* all attempts to contact server timed out, sleeping */
+ case DHC_ABEND: /* dhclient exited abnormally */
+ /* dhclient quit and can't get/renew a lease; so kill the connection */
+ dhcp6_fail (device, FALSE);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+dhcp6_timeout (NMDHCPClient *client, gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ g_return_if_fail (nm_device_get_act_request (device) != NULL);
+ g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == TRUE);
+
+ nm_dhcp_client_stop (client, FALSE);
+ if (priv->dhcp6_mode == NM_RDISC_DHCP_LEVEL_MANAGED)
+ dhcp6_fail (device, TRUE);
+ else {
+ /* not a hard failure; just live with the RA info */
+ nm_dhcp6_config_reset (priv->dhcp6_config);
+ if (priv->dhcp6_ip6_config)
+ g_object_unref (priv->dhcp6_ip6_config);
+ priv->dhcp6_ip6_config = NULL;
+
+ if (priv->ip6_state == IP_CONF)
+ nm_device_activate_schedule_ip6_config_result (device);
+ }
+}
+
+static NMActStageReturn
+dhcp6_start (NMDevice *self,
+ NMConnection *connection,
+ guint32 dhcp_opt,
+ NMDeviceStateReason *reason)
+{
+ NMSettingIP6Config *s_ip6;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
+ GByteArray *tmp = NULL;
+
+ if (!connection) {
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+ }
+
+ /* Begin a DHCP transaction on the interface */
+
+ /* Clear old exported DHCP options */
+ if (priv->dhcp6_config)
+ g_object_unref (priv->dhcp6_config);
+ priv->dhcp6_config = nm_dhcp6_config_new ();
+
+ g_warn_if_fail (priv->dhcp6_ip6_config == NULL);
+ if (priv->dhcp6_ip6_config) {
+ g_object_unref (priv->dhcp6_ip6_config);
+ priv->dhcp6_ip6_config = NULL;
+ }
+
+ if (priv->hw_addr_len) {
+ tmp = g_byte_array_sized_new (priv->hw_addr_len);
+ g_byte_array_append (tmp, priv->hw_addr, priv->hw_addr_len);
+ }
+
+ priv->dhcp6_client = nm_dhcp_manager_start_ip6 (nm_dhcp_manager_get (),
+ nm_device_get_ip_iface (self),
+ tmp,
+ nm_connection_get_uuid (connection),
+ nm_device_get_priority (self),
+ nm_connection_get_setting_ip6_config (connection),
+ priv->dhcp_timeout,
+ priv->dhcp_anycast_address,
+ (dhcp_opt == NM_RDISC_DHCP_LEVEL_OTHERCONF) ? TRUE : FALSE);
+ if (tmp)
+ g_byte_array_free (tmp, TRUE);
+
+ if (priv->dhcp6_client) {
+ priv->dhcp6_state_sigid = g_signal_connect (priv->dhcp6_client,
+ NM_DHCP_CLIENT_SIGNAL_STATE_CHANGED,
+ G_CALLBACK (dhcp6_state_changed),
+ self);
+ priv->dhcp6_timeout_sigid = g_signal_connect (priv->dhcp6_client,
+ NM_DHCP_CLIENT_SIGNAL_TIMEOUT,
+ G_CALLBACK (dhcp6_timeout),
+ self);
+
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ if (!nm_setting_ip6_config_get_may_fail (s_ip6) ||
+ !strcmp (nm_setting_ip6_config_get_method (s_ip6), NM_SETTING_IP6_CONFIG_METHOD_DHCP))
+ nm_device_add_pending_action (self, PENDING_ACTION_DHCP6, TRUE);
+
+ /* DHCP devices will be notified by the DHCP manager when stuff happens */
+ ret = NM_ACT_STAGE_RETURN_POSTPONE;
+ } else {
+ *reason = NM_DEVICE_STATE_REASON_DHCP_START_FAILED;
+ ret = NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ return ret;
+}
+
+gboolean
+nm_device_dhcp6_renew (NMDevice *self, gboolean release)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActStageReturn ret;
+ NMDeviceStateReason reason;
+ NMConnection *connection;
+
+ g_return_val_if_fail (priv->dhcp6_client != NULL, FALSE);
+
+ nm_log_info (LOGD_DHCP6, "(%s): DHCPv6 lease renewal requested",
+ nm_device_get_iface (self));
+
+ /* Terminate old DHCP instance and release the old lease */
+ dhcp6_cleanup (self, TRUE, release);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ /* Start DHCP again on the interface */
+ ret = dhcp6_start (self, connection, priv->dhcp6_mode, &reason);
+
+ return (ret != NM_ACT_STAGE_RETURN_FAILURE);
+}
+
+/******************************************/
+
+static gboolean
+linklocal6_config_is_ready (const NMIP6Config *ip6_config)
+{
+ int i;
+
+ if (!ip6_config)
+ return FALSE;
+
+ for (i = 0; i < nm_ip6_config_get_num_addresses (ip6_config); i++) {
+ const NMPlatformIP6Address *addr = nm_ip6_config_get_address (ip6_config, i);
+
+ if (IN6_IS_ADDR_LINKLOCAL (&addr->address) &&
+ !(addr->flags & IFA_F_TENTATIVE))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+linklocal6_cleanup (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->linklocal6_timeout_id) {
+ g_source_remove (priv->linklocal6_timeout_id);
+ priv->linklocal6_timeout_id = 0;
+ }
+}
+
+static gboolean
+linklocal6_timeout_cb (gpointer user_data)
+{
+ NMDevice *self = user_data;
+
+ linklocal6_cleanup (self);
+
+ nm_log_dbg (LOGD_DEVICE, "[%s] linklocal6: waiting for link-local addresses failed due to timeout",
+ nm_device_get_iface (self));
+
+ nm_device_activate_schedule_ip6_config_timeout (self);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+linklocal6_complete (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ const char *method;
+
+ g_assert (priv->linklocal6_timeout_id);
+ g_assert (linklocal6_config_is_ready (priv->ip6_config));
+
+ linklocal6_cleanup (self);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+
+ nm_log_dbg (LOGD_DEVICE, "[%s] linklocal6: waiting for link-local addresses successful, continue with method %s",
+ nm_device_get_iface (self), method);
+
+ if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0)
+ addrconf6_start_with_link_ready (self);
+ else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0)
+ nm_device_activate_schedule_ip6_config_result (self);
+ else
+ g_return_if_fail (FALSE);
+}
+
+static NMActStageReturn
+linklocal6_start (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ const char *method;
+
+ linklocal6_cleanup (self);
+
+ if (linklocal6_config_is_ready (priv->ip6_config))
+ return NM_ACT_STAGE_RETURN_SUCCESS;
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ nm_log_dbg (LOGD_DEVICE, "[%s] linklocal6: starting IPv6 with method '%s', but the device has no link-local addresses configured. Wait.",
+ nm_device_get_iface (self), method);
+
+ priv->linklocal6_timeout_id = g_timeout_add_seconds (5, linklocal6_timeout_cb, self);
+
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
+
+/******************************************/
+
+static void
+print_support_extended_ifa_flags (NMSettingIP6ConfigPrivacy use_tempaddr)
+{
+ static gint8 warn = 0;
+ static gint8 s_libnl = -1, s_kernel;
+
+ if (warn >= 2)
+ return;
+
+ if (s_libnl == -1) {
+ s_libnl = !!nm_platform_check_support_libnl_extended_ifa_flags ();
+ s_kernel = !!nm_platform_check_support_kernel_extended_ifa_flags ();
+
+ if (s_libnl && s_kernel) {
+ nm_log_dbg (LOGD_IP6, "kernel and libnl support extended IFA_FLAGS (needed by NM for IPv6 private addresses)");
+ warn = 2;
+ return;
+ }
+ }
+
+ if ( use_tempaddr != NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR
+ && use_tempaddr != NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR) {
+ if (warn == 0) {
+ nm_log_dbg (LOGD_IP6, "%s%s%s %s not support extended IFA_FLAGS (needed by NM for IPv6 private addresses)",
+ !s_kernel ? "kernel" : "",
+ !s_kernel && !s_libnl ? " and " : "",
+ !s_libnl ? "libnl" : "",
+ !s_kernel && !s_libnl ? "do" : "does");
+ warn = 1;
+ }
+ return;
+ }
+
+ if (!s_libnl && !s_kernel) {
+ nm_log_warn (LOGD_IP6, "libnl and the kernel do not support extended IFA_FLAGS needed by NM for "
+ "IPv6 private addresses. This feature is not available");
+ } else if (!s_libnl) {
+ nm_log_warn (LOGD_IP6, "libnl does not support extended IFA_FLAGS needed by NM for "
+ "IPv6 private addresses. This feature is not available");
+ } else if (!s_kernel) {
+ nm_log_warn (LOGD_IP6, "The kernel does not support extended IFA_FLAGS needed by NM for "
+ "IPv6 private addresses. This feature is not available");
+ }
+
+ warn = 2;
+}
+
+static void
+rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMConnection *connection;
+ int i;
+ NMDeviceStateReason reason;
+ static int system_support = -1;
+ guint ifa_flags = 0x00;
+
+ if (system_support == -1) {
+ /*
+ * Check, if both libnl and the kernel are recent enough,
+ * to help user space handling RA. If it's not supported,
+ * we have no ipv6-privacy and must add autoconf addresses
+ * as /128. The reason for the /128 is to prevent the kernel
+ * from adding a prefix route for this address.
+ **/
+ system_support = nm_platform_check_support_libnl_extended_ifa_flags () &&
+ nm_platform_check_support_kernel_extended_ifa_flags ();
+ }
+
+ if (system_support)
+ ifa_flags = IFA_F_NOPREFIXROUTE;
+ if (priv->rdisc_use_tempaddr == NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR
+ || priv->rdisc_use_tempaddr == NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR)
+ {
+ /* without system_support, this flag will be ignored. Still set it, doesn't seem to do any harm. */
+ ifa_flags |= IFA_F_MANAGETEMPADDR;
+ }
+
+ g_return_if_fail (priv->act_request);
+ connection = nm_device_get_connection (device);
+ g_assert (connection);
+
+ if (!priv->ac_ip6_config)
+ priv->ac_ip6_config = nm_ip6_config_new ();
+
+ if (changed & NM_RDISC_CONFIG_GATEWAYS) {
+ /* Use the first gateway as ordered in router discovery cache. */
+ if (rdisc->gateways->len) {
+ NMRDiscGateway *gateway = &g_array_index (rdisc->gateways, NMRDiscGateway, 0);
+
+ nm_ip6_config_set_gateway (priv->ac_ip6_config, &gateway->address);
+ } else
+ nm_ip6_config_set_gateway (priv->ac_ip6_config, NULL);
+ }
+
+ if (changed & NM_RDISC_CONFIG_ADDRESSES) {
+ /* Rebuild address list from router discovery cache. */
+ nm_ip6_config_reset_addresses (priv->ac_ip6_config);
+
+ /* rdisc->addresses contains at most max_addresses entries.
+ * This is different from what the kernel does, which
+ * also counts static and temporary addresses when checking
+ * max_addresses.
+ **/
+ for (i = 0; i < rdisc->addresses->len; i++) {
+ NMRDiscAddress *discovered_address = &g_array_index (rdisc->addresses, NMRDiscAddress, i);
+ NMPlatformIP6Address address;
+
+ memset (&address, 0, sizeof (address));
+ address.address = discovered_address->address;
+ address.plen = system_support ? 64 : 128;
+ address.timestamp = discovered_address->timestamp;
+ address.lifetime = discovered_address->lifetime;
+ address.preferred = discovered_address->preferred;
+ if (address.preferred > address.lifetime)
+ address.preferred = address.lifetime;
+ address.source = NM_PLATFORM_SOURCE_RDISC;
+ address.flags = ifa_flags;
+
+ nm_ip6_config_add_address (priv->ac_ip6_config, &address);
+ }
+ }
+
+ if (changed & NM_RDISC_CONFIG_ROUTES) {
+ /* Rebuild route list from router discovery cache. */
+ nm_ip6_config_reset_routes (priv->ac_ip6_config);
+
+ for (i = 0; i < rdisc->routes->len; i++) {
+ NMRDiscRoute *discovered_route = &g_array_index (rdisc->routes, NMRDiscRoute, i);
+ NMPlatformIP6Route route;
+
+ /* Only accept non-default routes. The router has no idea what the
+ * local configuration or user preferences are, so sending routes
+ * with a prefix length of 0 is quite rude and thus ignored.
+ */
+ if (discovered_route->plen > 0) {
+ memset (&route, 0, sizeof (route));
+ route.network = discovered_route->network;
+ route.plen = discovered_route->plen;
+ route.gateway = discovered_route->gateway;
+ route.source = NM_PLATFORM_SOURCE_RDISC;
+ route.metric = nm_device_get_priority (device);
+
+ nm_ip6_config_add_route (priv->ac_ip6_config, &route);
+ }
+ }
+ }
+
+ if (changed & NM_RDISC_CONFIG_DNS_SERVERS) {
+ /* Rebuild DNS server list from router discovery cache. */
+ nm_ip6_config_reset_nameservers (priv->ac_ip6_config);
+
+ for (i = 0; i < rdisc->dns_servers->len; i++) {
+ NMRDiscDNSServer *discovered_server = &g_array_index (rdisc->dns_servers, NMRDiscDNSServer, i);
+
+ nm_ip6_config_add_nameserver (priv->ac_ip6_config, &discovered_server->address);
+ }
+ }
+
+ if (changed & NM_RDISC_CONFIG_DNS_DOMAINS) {
+ /* Rebuild domain list from router discovery cache. */
+ nm_ip6_config_reset_domains (priv->ac_ip6_config);
+
+ for (i = 0; i < rdisc->dns_domains->len; i++) {
+ NMRDiscDNSDomain *discovered_domain = &g_array_index (rdisc->dns_domains, NMRDiscDNSDomain, i);
+
+ nm_ip6_config_add_domain (priv->ac_ip6_config, discovered_domain->domain);
+ }
+ }
+
+ if (changed & NM_RDISC_CONFIG_DHCP_LEVEL) {
+ dhcp6_cleanup (device, TRUE, TRUE);
+
+ priv->dhcp6_mode = rdisc->dhcp_level;
+
+ switch (priv->dhcp6_mode) {
+ case NM_RDISC_DHCP_LEVEL_NONE:
+ break;
+ default:
+ nm_log_info (LOGD_DEVICE | LOGD_DHCP6,
+ "Activation (%s) Stage 3 of 5 (IP Configure Start) starting DHCPv6"
+ " as requested by IPv6 router...",
+ priv->iface);
+ switch (dhcp6_start (device, connection, priv->dhcp6_mode, &reason)) {
+ case NM_ACT_STAGE_RETURN_SUCCESS:
+ g_warn_if_reached ();
+ break;
+ case NM_ACT_STAGE_RETURN_POSTPONE:
+ return;
+ default:
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
+ return;
+ }
+ }
+ }
+
+ if (changed & NM_RDISC_CONFIG_HOP_LIMIT) {
+ char val[16];
+
+ g_snprintf (val, sizeof (val), "%d", rdisc->hop_limit);
+ nm_device_ipv6_sysctl_set (device, "hop_limit", val);
+ }
+
+ nm_device_activate_schedule_ip6_config_result (device);
+}
+
+static gboolean
+addrconf6_start (NMDevice *self, NMSettingIP6ConfigPrivacy use_tempaddr)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ NMActStageReturn ret;
+ const char *ip_iface = nm_device_get_ip_iface (self);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ g_warn_if_fail (priv->ac_ip6_config == NULL);
+ if (priv->ac_ip6_config) {
+ g_object_unref (priv->ac_ip6_config);
+ priv->ac_ip6_config = NULL;
+ }
+
+ priv->rdisc = nm_lndp_rdisc_new (nm_device_get_ip_ifindex (self), ip_iface);
+ if (!priv->rdisc) {
+ nm_log_err (LOGD_IP6, "(%s): failed to start router discovery.", ip_iface);
+ return FALSE;
+ }
+
+ priv->rdisc_use_tempaddr = use_tempaddr;
+ print_support_extended_ifa_flags (use_tempaddr);
+
+ if (!nm_setting_ip6_config_get_may_fail (nm_connection_get_setting_ip6_config (connection)))
+ nm_device_add_pending_action (self, PENDING_ACTION_AUTOCONF6, TRUE);
+
+ /* ensure link local is ready... */
+ ret = linklocal6_start (self);
+ if (ret == NM_ACT_STAGE_RETURN_SUCCESS)
+ addrconf6_start_with_link_ready (self);
+ else
+ g_return_val_if_fail (ret == NM_ACT_STAGE_RETURN_POSTPONE, TRUE);
+
+ return TRUE;
+}
+
+static void
+addrconf6_start_with_link_ready (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ g_assert (priv->rdisc);
+
+ /* FIXME: what if interface has no lladdr, like PPP? */
+ if (priv->hw_addr_len)
+ nm_rdisc_set_lladdr (priv->rdisc, (const char *) priv->hw_addr, priv->hw_addr_len);
+
+ nm_device_ipv6_sysctl_set (self, "accept_ra", "1");
+ nm_device_ipv6_sysctl_set (self, "accept_ra_defrtr", "0");
+ nm_device_ipv6_sysctl_set (self, "accept_ra_pinfo", "0");
+ nm_device_ipv6_sysctl_set (self, "accept_ra_rtr_pref", "0");
+
+ priv->rdisc_config_changed_sigid = g_signal_connect (priv->rdisc, NM_RDISC_CONFIG_CHANGED,
+ G_CALLBACK (rdisc_config_changed), self);
+
+ nm_rdisc_start (priv->rdisc);
+}
+
+static void
+addrconf6_cleanup (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->rdisc_config_changed_sigid) {
+ g_signal_handler_disconnect (priv->rdisc,
+ priv->rdisc_config_changed_sigid);
+ priv->rdisc_config_changed_sigid = 0;
+ }
+
+ nm_device_remove_pending_action (self, PENDING_ACTION_AUTOCONF6, FALSE);
+
+ g_clear_object (&priv->ac_ip6_config);
+ g_clear_object (&priv->rdisc);
+}
+
+/******************************************/
+
+static const char *ip6_properties_to_save[] = {
+ "accept_ra",
+ "accept_ra_defrtr",
+ "accept_ra_pinfo",
+ "accept_ra_rtr_pref",
+ "disable_ipv6",
+ "hop_limit",
+ "use_tempaddr",
+};
+
+static void
+save_ip6_properties (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *ifname = nm_device_get_ip_iface (self);
+ char *value;
+ int i;
+
+ g_hash_table_remove_all (priv->ip6_saved_properties);
+
+ for (i = 0; i < G_N_ELEMENTS (ip6_properties_to_save); i++) {
+ value = nm_platform_sysctl_get (nm_utils_ip6_property_path (ifname, ip6_properties_to_save[i]));
+ if (value) {
+ g_hash_table_insert (priv->ip6_saved_properties,
+ (char *) ip6_properties_to_save[i],
+ value);
+ }
+ }
+}
+
+static void
+restore_ip6_properties (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ GHashTableIter iter;
+ gpointer key, value;
+
+ g_hash_table_iter_init (&iter, priv->ip6_saved_properties);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ nm_device_ipv6_sysctl_set (self, key, value);
+}
+
+static NMSettingIP6ConfigPrivacy
+use_tempaddr_clamp (NMSettingIP6ConfigPrivacy use_tempaddr)
+{
+ switch (use_tempaddr) {
+ case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED:
+ case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR:
+ case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR:
+ return use_tempaddr;
+ default:
+ return NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
+ }
+}
+
+/* Get net.ipv6.conf.default.use_tempaddr value from /etc/sysctl.conf or
+ * /lib/sysctl.d/sysctl.conf
+ */
+static NMSettingIP6ConfigPrivacy
+ip6_use_tempaddr (void)
+{
+ char *contents = NULL;
+ const char *group_name = "[forged_group]\n";
+ char *sysctl_data = NULL;
+ GKeyFile *keyfile;
+ GError *error = NULL;
+ gint tmp;
+ NMSettingIP6ConfigPrivacy ret = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
+
+ /* Read file contents to a string. */
+ if (!g_file_get_contents ("/etc/sysctl.conf", &contents, NULL, NULL))
+ if (!g_file_get_contents ("/lib/sysctl.d/sysctl.conf", &contents, NULL, NULL))
+ return NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
+
+ /* Prepend a group so that we can use GKeyFile parser. */
+ sysctl_data = g_strdup_printf ("%s%s", group_name, contents);
+
+ keyfile = g_key_file_new ();
+ if (!g_key_file_load_from_data (keyfile, sysctl_data, -1, G_KEY_FILE_NONE, NULL))
+ goto done;
+
+ tmp = g_key_file_get_integer (keyfile, "forged_group", "net.ipv6.conf.default.use_tempaddr", &error);
+ if (error == NULL)
+ ret = use_tempaddr_clamp (tmp);
+
+done:
+ g_free (contents);
+ g_free (sysctl_data);
+ g_clear_error (&error);
+ g_key_file_free (keyfile);
+
+ return ret;
+}
+
+static gboolean
+ip6_requires_slaves (NMConnection *connection)
+{
+ const char *method;
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+
+ /* SLAAC, DHCP, and Link-Local depend on connectivity (and thus slaves)
+ * to complete addressing. SLAAC and DHCP obviously need a peer to
+ * provide a prefix, while Link-Local must perform DAD on the local link.
+ */
+ return strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0
+ || strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0
+ || strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0;
+}
+
+static NMActStageReturn
+act_stage3_ip6_config_start (NMDevice *self,
+ NMIP6Config **out_config,
+ NMDeviceStateReason *reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *ip_iface;
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
+ NMConnection *connection;
+ const char *method;
+ NMSettingIP6ConfigPrivacy ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
+ const char *ip6_privacy_str = "0\n";
+ GSList *slaves;
+ gboolean ready_slaves;
+
+ g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ ip_iface = nm_device_get_ip_iface (self);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if (priv->master)
+ g_assert_cmpstr (method, ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+
+ if ( strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) != 0
+ && priv->is_master
+ && !priv->carrier) {
+ nm_log_info (LOGD_IP6 | LOGD_DEVICE,
+ "(%s): IPv6 config waiting until carrier is on", ip_iface);
+ return NM_ACT_STAGE_RETURN_WAIT;
+ }
+
+ if (priv->is_master && ip6_requires_slaves (connection)) {
+ /* If the master has no ready slaves, and depends on slaves for
+ * a successful IPv6 attempt, then postpone IPv6 addressing.
+ */
+ slaves = nm_device_master_get_slaves (self);
+ ready_slaves = NM_DEVICE_GET_CLASS (self)->have_any_ready_slaves (self, slaves);
+ g_slist_free (slaves);
+
+ if (ready_slaves == FALSE) {
+ nm_log_info (LOGD_DEVICE | LOGD_IP6,
+ "(%s): IPv6 config waiting until slaves are ready",
+ ip_iface);
+ return NM_ACT_STAGE_RETURN_WAIT;
+ }
+ }
+
+ priv->dhcp6_mode = NM_RDISC_DHCP_LEVEL_NONE;
+
+ if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0) {
+ if (!priv->master)
+ restore_ip6_properties (self);
+ return NM_ACT_STAGE_RETURN_STOP;
+ }
+
+ /* Re-enable IPv6 on the interface */
+ nm_device_ipv6_sysctl_set (self, "disable_ipv6", "0");
+
+ /* Enable/disable IPv6 Privacy Extensions.
+ * If a global value is configured by sysadmin (e.g. /etc/sysctl.conf),
+ * use that value instead of per-connection value.
+ */
+ ip6_privacy = ip6_use_tempaddr ();
+ if (ip6_privacy == NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN) {
+ NMSettingIP6Config *s_ip6 = nm_connection_get_setting_ip6_config (connection);
+
+ if (s_ip6)
+ ip6_privacy = nm_setting_ip6_config_get_ip6_privacy (s_ip6);
+ }
+ ip6_privacy = use_tempaddr_clamp (ip6_privacy);
+
+ if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0) {
+ if (!addrconf6_start (self, ip6_privacy)) {
+ /* IPv6 might be disabled; allow IPv4 to proceed */
+ ret = NM_ACT_STAGE_RETURN_STOP;
+ } else
+ ret = NM_ACT_STAGE_RETURN_POSTPONE;
+ } else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0) {
+ ret = linklocal6_start (self);
+ if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
+ /* New blank config; LL address is already in priv->ext_ip6_config */
+ *out_config = nm_ip6_config_new ();
+ g_assert (*out_config);
+ }
+ } else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0) {
+ priv->dhcp6_mode = NM_RDISC_DHCP_LEVEL_MANAGED;
+ ret = dhcp6_start (self, connection, priv->dhcp6_mode, reason);
+ } else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0) {
+ /* New blank config */
+ *out_config = nm_ip6_config_new ();
+ g_assert (*out_config);
+
+ ret = NM_ACT_STAGE_RETURN_SUCCESS;
+ } else {
+ nm_log_warn (LOGD_IP6, "(%s): unhandled IPv6 config method '%s'; will fail",
+ nm_device_get_ip_iface (self), method);
+ }
+
+ /* Other methods (shared) aren't implemented yet */
+
+ switch (ip6_privacy) {
+ case NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN:
+ case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED:
+ ip6_privacy_str = "0";
+ break;
+ case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR:
+ ip6_privacy_str = "1";
+ break;
+ case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR:
+ ip6_privacy_str = "2";
+ break;
+ }
+ nm_device_ipv6_sysctl_set (self, "use_tempaddr", ip6_privacy_str);
+
+ return ret;
+}
+
+/**
+ * nm_device_activate_stage3_ip4_start:
+ * @self: the device
+ *
+ * Try starting IPv4 configuration.
+ */
+gboolean
+nm_device_activate_stage3_ip4_start (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActStageReturn ret;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+ NMIP4Config *ip4_config = NULL;
+
+ g_assert (priv->ip4_state == IP_WAIT);
+
+ priv->ip4_state = IP_CONF;
+ ret = NM_DEVICE_GET_CLASS (self)->act_stage3_ip4_config_start (self, &ip4_config, &reason);
+ if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
+ g_assert (ip4_config);
+ nm_device_activate_schedule_ip4_config_result (self, ip4_config);
+ g_object_unref (ip4_config);
+ } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ return FALSE;
+ } else if (ret == NM_ACT_STAGE_RETURN_STOP) {
+ /* Early finish */
+ priv->ip4_state = IP_FAIL;
+ } else if (ret == NM_ACT_STAGE_RETURN_WAIT) {
+ /* Wait for something to try IP config again */
+ priv->ip4_state = IP_WAIT;
+ } else
+ g_assert (ret == NM_ACT_STAGE_RETURN_POSTPONE);
+
+ return TRUE;
+}
+
+/**
+ * nm_device_activate_stage3_ip6_start:
+ * @self: the device
+ *
+ * Try starting IPv6 configuration.
+ */
+gboolean
+nm_device_activate_stage3_ip6_start (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActStageReturn ret;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+ NMIP6Config *ip6_config = NULL;
+
+ g_assert (priv->ip6_state == IP_WAIT);
+
+ priv->ip6_state = IP_CONF;
+ ret = NM_DEVICE_GET_CLASS (self)->act_stage3_ip6_config_start (self, &ip6_config, &reason);
+ if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
+ g_assert (ip6_config);
+ /* Here we get a static IPv6 config, like for Shared where it's
+ * autogenerated or from modems where it comes from ModemManager.
+ */
+ g_warn_if_fail (priv->ac_ip6_config == NULL);
+ priv->ac_ip6_config = ip6_config;
+ nm_device_activate_schedule_ip6_config_result (self);
+ } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ return FALSE;
+ } else if (ret == NM_ACT_STAGE_RETURN_STOP) {
+ /* Early finish */
+ priv->ip6_state = IP_FAIL;
+ } else if (ret == NM_ACT_STAGE_RETURN_WAIT) {
+ /* Wait for something to try IP config again */
+ priv->ip6_state = IP_WAIT;
+ } else
+ g_assert (ret == NM_ACT_STAGE_RETURN_POSTPONE);
+
+ return TRUE;
+}
+
+/*
+ * nm_device_activate_stage3_ip_config_start
+ *
+ * Begin automatic/manual IP configuration
+ *
+ */
+static gboolean
+nm_device_activate_stage3_ip_config_start (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *iface;
+ NMActiveConnection *master;
+ NMDevice *master_device;
+
+ /* Clear the activation source ID now that this stage has run */
+ activation_source_clear (self, FALSE, 0);
+
+ priv->ip4_state = priv->ip6_state = IP_WAIT;
+
+ iface = nm_device_get_iface (self);
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 3 of 5 (IP Configure Start) started...", iface);
+ nm_device_state_changed (self, NM_DEVICE_STATE_IP_CONFIG, NM_DEVICE_STATE_REASON_NONE);
+
+ /* Device should be up before we can do anything with it */
+ if (!nm_platform_link_is_up (nm_device_get_ip_ifindex (self))) {
+ nm_log_warn (LOGD_DEVICE, "(%s): interface %s not up for IP configuration",
+ iface, nm_device_get_ip_iface (self));
+ }
+
+ /* If the device is a slave, then we don't do any IP configuration but we
+ * use the IP config stage to indicate to the master we're ready for
+ * enslavement. If the master is already activating, it will have tried to
+ * enslave us when we changed state to IP_CONFIG, causing us to queue a
+ * transition to SECONDARIES (or FAILED if the enslavement failed), with
+ * our IP states set to IP_DONE either way. If the master isn't yet
+ * activating, then they'll still be in IP_WAIT. Either way, we bail out
+ * of IP config here.
+ */
+ master = nm_active_connection_get_master (NM_ACTIVE_CONNECTION (priv->act_request));
+ if (master) {
+ master_device = nm_active_connection_get_device (master);
+ if (priv->ip4_state == IP_WAIT && priv->ip6_state == IP_WAIT) {
+ nm_log_info (LOGD_DEVICE, "Activation (%s) connection '%s' waiting on master '%s'",
+ nm_device_get_iface (self),
+ nm_connection_get_id (nm_device_get_connection (self)),
+ master_device ? nm_device_get_iface (master_device) : "(unknown)");
+ }
+ goto out;
+ }
+
+ /* IPv4 */
+ if (!nm_device_activate_stage3_ip4_start (self))
+ goto out;
+
+ /* IPv6 */
+ if (!nm_device_activate_stage3_ip6_start (self))
+ goto out;
+
+ if (priv->ip4_state == IP_FAIL && priv->ip6_state == IP_FAIL) {
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+ }
+
+out:
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 3 of 5 (IP Configure Start) complete.", iface);
+ return FALSE;
+}
+
+
+static void
+fw_change_zone_cb (GError *error, gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ priv->fw_call = NULL;
+
+ if (error) {
+ /* FIXME: fail the device activation? */
+ }
+
+ activation_source_schedule (self, nm_device_activate_stage3_ip_config_start, 0);
+
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 3 of 5 (IP Configure Start) scheduled.",
+ nm_device_get_iface (self));
+}
+
+/*
+ * nm_device_activate_schedule_stage3_ip_config_start
+ *
+ * Schedule IP configuration start
+ */
+void
+nm_device_activate_schedule_stage3_ip_config_start (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+ NMConnection *connection;
+ NMSettingConnection *s_con = NULL;
+ const char *zone;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ g_return_if_fail (priv->act_request);
+
+ /* Add the interface to the specified firewall zone */
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+ s_con = nm_connection_get_setting_connection (connection);
+
+ zone = nm_setting_connection_get_zone (s_con);
+ nm_log_dbg (LOGD_DEVICE, "Activation (%s) setting firewall zone '%s'",
+ nm_device_get_iface (self), zone ? zone : "default");
+ priv->fw_call = nm_firewall_manager_add_or_change_zone (priv->fw_manager,
+ nm_device_get_ip_iface (self),
+ zone,
+ FALSE,
+ fw_change_zone_cb,
+ self);
+}
+
+static NMActStageReturn
+act_stage4_ip4_config_timeout (NMDevice *self, NMDeviceStateReason *reason)
+{
+ if (nm_device_ip_config_should_fail (self, FALSE)) {
+ *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+ return NM_ACT_STAGE_RETURN_SUCCESS;
+}
+
+
+/*
+ * nm_device_activate_stage4_ip4_config_timeout
+ *
+ * Time out on retrieving the IPv4 config.
+ *
+ */
+static gboolean
+nm_device_activate_ip4_config_timeout (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *iface;
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+
+ /* Clear the activation source ID now that this stage has run */
+ activation_source_clear (self, FALSE, AF_INET);
+
+ iface = nm_device_get_iface (self);
+ nm_log_info (LOGD_DEVICE | LOGD_IP4,
+ "Activation (%s) Stage 4 of 5 (IPv4 Configure Timeout) started...",
+ iface);
+
+ ret = NM_DEVICE_GET_CLASS (self)->act_stage4_ip4_config_timeout (self, &reason);
+ if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
+ goto out;
+ else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ goto out;
+ }
+ g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
+
+ priv->ip4_state = IP_FAIL;
+
+ /* If IPv4 failed and IPv6 failed, the activation fails */
+ if (priv->ip6_state == IP_FAIL)
+ nm_device_state_changed (self,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+
+out:
+ nm_log_info (LOGD_DEVICE | LOGD_IP4,
+ "Activation (%s) Stage 4 of 5 (IPv4 Configure Timeout) complete.",
+ iface);
+ return FALSE;
+}
+
+
+/*
+ * nm_device_activate_schedule_ip4_config_timeout
+ *
+ * Deal with a timeout of the IPv4 configuration
+ *
+ */
+void
+nm_device_activate_schedule_ip4_config_timeout (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ g_return_if_fail (priv->act_request);
+
+ activation_source_schedule (self, nm_device_activate_ip4_config_timeout, AF_INET);
+
+ nm_log_info (LOGD_DEVICE | LOGD_IP4,
+ "Activation (%s) Stage 4 of 5 (IPv4 Configure Timeout) scheduled...",
+ nm_device_get_iface (self));
+}
+
+
+static NMActStageReturn
+act_stage4_ip6_config_timeout (NMDevice *self, NMDeviceStateReason *reason)
+{
+ if (nm_device_ip_config_should_fail (self, TRUE)) {
+ *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ return NM_ACT_STAGE_RETURN_SUCCESS;
+}
+
+
+/*
+ * nm_device_activate_ip6_config_timeout
+ *
+ * Time out on retrieving the IPv6 config.
+ *
+ */
+static gboolean
+nm_device_activate_ip6_config_timeout (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *iface;
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+
+ /* Clear the activation source ID now that this stage has run */
+ activation_source_clear (self, FALSE, AF_INET6);
+
+ iface = nm_device_get_iface (self);
+ nm_log_info (LOGD_DEVICE | LOGD_IP6,
+ "Activation (%s) Stage 4 of 5 (IPv6 Configure Timeout) started...",
+ iface);
+
+ ret = NM_DEVICE_GET_CLASS (self)->act_stage4_ip6_config_timeout (self, &reason);
+ if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
+ goto out;
+ else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ goto out;
+ }
+ g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
+
+ priv->ip6_state = IP_FAIL;
+
+ /* If IPv6 failed and IPv4 failed, the activation fails */
+ if (priv->ip4_state == IP_FAIL)
+ nm_device_state_changed (self,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+
+out:
+ nm_log_info (LOGD_DEVICE | LOGD_IP6,
+ "Activation (%s) Stage 4 of 5 (IPv6 Configure Timeout) complete.",
+ iface);
+ return FALSE;
+}
+
+
+/*
+ * nm_device_activate_schedule_ip6_config_timeout
+ *
+ * Deal with a timeout of the IPv6 configuration
+ *
+ */
+void
+nm_device_activate_schedule_ip6_config_timeout (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ g_return_if_fail (priv->act_request);
+
+ activation_source_schedule (self, nm_device_activate_ip6_config_timeout, AF_INET6);
+
+ nm_log_info (LOGD_DEVICE | LOGD_IP6,
+ "Activation (%s) Stage 4 of 5 (IPv6 Configure Timeout) scheduled...",
+ nm_device_get_iface (self));
+}
+
+static void
+share_child_setup (gpointer user_data G_GNUC_UNUSED)
+{
+ /* We are in the child process at this point */
+ pid_t pid = getpid ();
+ setpgid (pid, pid);
+
+ nm_unblock_posix_signals (NULL);
+}
+
+static gboolean
+share_init (void)
+{
+ int status;
+ char *modules[] = { "ip_tables", "iptable_nat", "nf_nat_ftp", "nf_nat_irc",
+ "nf_nat_sip", "nf_nat_tftp", "nf_nat_pptp", "nf_nat_h323",
+ NULL };
+ char **iter;
+
+ if (!nm_platform_sysctl_set ("/proc/sys/net/ipv4/ip_forward", "1")) {
+ nm_log_err (LOGD_SHARING, "Error starting IP forwarding: (%d) %s",
+ errno, strerror (errno));
+ return FALSE;
+ }
+
+ if (!nm_platform_sysctl_set ("/proc/sys/net/ipv4/ip_dynaddr", "1")) {
+ nm_log_err (LOGD_SHARING, "error starting IP forwarding: (%d) %s",
+ errno, strerror (errno));
+ }
+
+ for (iter = modules; *iter; iter++) {
+ char *argv[3] = { "/sbin/modprobe", *iter, NULL };
+ char *envp[1] = { NULL };
+ GError *error = NULL;
+
+ if (!g_spawn_sync ("/", argv, envp, G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
+ share_child_setup, NULL, NULL, NULL, &status, &error)) {
+ nm_log_err (LOGD_SHARING, "error loading NAT module %s: (%d) %s",
+ *iter, error ? error->code : 0,
+ (error && error->message) ? error->message : "unknown");
+ if (error)
+ g_error_free (error);
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+add_share_rule (NMActRequest *req, const char *table, const char *fmt, ...)
+{
+ va_list args;
+ char *cmd;
+
+ va_start (args, fmt);
+ cmd = g_strdup_vprintf (fmt, args);
+ va_end (args);
+
+ nm_act_request_add_share_rule (req, table, cmd);
+ g_free (cmd);
+}
+
+static gboolean
+start_sharing (NMDevice *self, NMIP4Config *config)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActRequest *req;
+ GError *error = NULL;
+ char str_addr[INET_ADDRSTRLEN + 1];
+ char str_mask[INET_ADDRSTRLEN + 1];
+ guint32 netmask, network;
+ const NMPlatformIP4Address *ip4_addr;
+ const char *ip_iface;
+
+ g_return_val_if_fail (config != NULL, FALSE);
+
+ ip_iface = nm_device_get_ip_iface (self);
+
+ ip4_addr = nm_ip4_config_get_address (config, 0);
+ if (!ip4_addr || !ip4_addr->address)
+ return FALSE;
+
+ netmask = nm_utils_ip4_prefix_to_netmask (ip4_addr->plen);
+ if (!inet_ntop (AF_INET, &netmask, str_mask, sizeof (str_mask)))
+ return FALSE;
+
+ network = ip4_addr->address & netmask;
+ if (!inet_ntop (AF_INET, &network, str_addr, sizeof (str_addr)))
+ return FALSE;
+
+ if (!share_init ())
+ return FALSE;
+
+ req = nm_device_get_act_request (self);
+ g_assert (req);
+
+ add_share_rule (req, "filter", "INPUT --in-interface %s --protocol tcp --destination-port 53 --jump ACCEPT", ip_iface);
+ add_share_rule (req, "filter", "INPUT --in-interface %s --protocol udp --destination-port 53 --jump ACCEPT", ip_iface);
+ add_share_rule (req, "filter", "INPUT --in-interface %s --protocol tcp --destination-port 67 --jump ACCEPT", ip_iface);
+ add_share_rule (req, "filter", "INPUT --in-interface %s --protocol udp --destination-port 67 --jump ACCEPT", ip_iface);
+ add_share_rule (req, "filter", "FORWARD --in-interface %s --jump REJECT", ip_iface);
+ add_share_rule (req, "filter", "FORWARD --out-interface %s --jump REJECT", ip_iface);
+ add_share_rule (req, "filter", "FORWARD --in-interface %s --out-interface %s --jump ACCEPT", ip_iface, ip_iface);
+ add_share_rule (req, "filter", "FORWARD --source %s/%s --in-interface %s --jump ACCEPT", str_addr, str_mask, ip_iface);
+ add_share_rule (req, "filter", "FORWARD --destination %s/%s --out-interface %s --match state --state ESTABLISHED,RELATED --jump ACCEPT", str_addr, str_mask, ip_iface);
+ add_share_rule (req, "nat", "POSTROUTING --source %s/%s ! --destination %s/%s --jump MASQUERADE", str_addr, str_mask, str_addr, str_mask);
+
+ nm_act_request_set_shared (req, TRUE);
+
+ if (!nm_dnsmasq_manager_start (priv->dnsmasq_manager, config, &error)) {
+ nm_log_err (LOGD_SHARING, "(%s/%s): failed to start dnsmasq: %s",
+ nm_device_get_iface (self), ip_iface,
+ (error && error->message) ? error->message : "(unknown)");
+ g_error_free (error);
+ nm_act_request_set_shared (req, FALSE);
+ return FALSE;
+ }
+
+ priv->dnsmasq_state_id = g_signal_connect (priv->dnsmasq_manager, "state-changed",
+ G_CALLBACK (dnsmasq_state_changed_cb),
+ self);
+ return TRUE;
+}
+
+static void
+send_arps (NMDevice *self, const char *mode_arg)
+{
+ const char *argv[] = { "/sbin/arping", mode_arg, "-q", "-I", nm_device_get_ip_iface (self), "-c", "1", NULL, NULL };
+ int ip_arg = G_N_ELEMENTS (argv) - 2;
+ NMConnection *connection;
+ NMSettingIP4Config *s_ip4;
+ int i, num;
+ NMIP4Address *addr;
+ guint32 ipaddr;
+ GError *error = NULL;
+
+ connection = nm_device_get_connection (self);
+ if (!connection)
+ return;
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (!s_ip4)
+ return;
+ num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+
+ for (i = 0; i < num; i++) {
+ addr = nm_setting_ip4_config_get_address (s_ip4, i);
+ ipaddr = nm_ip4_address_get_address (addr);
+ argv[ip_arg] = (char *) nm_utils_inet4_ntop (ipaddr, NULL);
+
+ nm_log_dbg (LOGD_DEVICE | LOGD_IP4,
+ "Running arping %s -I %s %s",
+ mode_arg, nm_device_get_iface (self), argv[ip_arg]);
+ g_spawn_async (NULL, (char **) argv, NULL,
+ G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
+ nm_unblock_posix_signals,
+ NULL, NULL, &error);
+ if (error) {
+ nm_log_warn (LOGD_DEVICE | LOGD_IP4,
+ "Could not send ARP for local address %s: %s",
+ argv[ip_arg], error->message);
+ g_clear_error (&error);
+ }
+ }
+}
+
+static gboolean
+arp_announce_round2 (gpointer self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ priv->arp_round2_id = 0;
+
+ if ( priv->state >= NM_DEVICE_STATE_IP_CONFIG
+ && priv->state <= NM_DEVICE_STATE_ACTIVATED)
+ send_arps (self, "-U");
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+arp_cleanup (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->arp_round2_id) {
+ g_source_remove (priv->arp_round2_id);
+ priv->arp_round2_id = 0;
+ }
+}
+
+static void
+arp_announce (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ NMSettingIP4Config *s_ip4;
+ int num;
+
+ arp_cleanup (self);
+
+ /* We only care about manually-configured addresses; DHCP- and autoip-configured
+ * ones should already have been seen on the network at this point.
+ */
+ connection = nm_device_get_connection (self);
+ if (!connection)
+ return;
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (!s_ip4)
+ return;
+ num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ if (num == 0)
+ return;
+
+ send_arps (self, "-A");
+ priv->arp_round2_id = g_timeout_add_seconds (2, arp_announce_round2, self);
+}
+
+static gboolean
+nm_device_activate_ip4_config_commit (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMActRequest *req;
+ const char *iface, *method;
+ NMConnection *connection;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+
+ /* Clear the activation source ID now that this stage has run */
+ activation_source_clear (self, FALSE, AF_INET);
+
+ iface = nm_device_get_iface (self);
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 5 of 5 (IPv4 Commit) started...",
+ iface);
+
+ req = nm_device_get_act_request (self);
+ g_assert (req);
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+
+ /* Device should be up before we can do anything with it */
+ if (!nm_platform_link_is_up (nm_device_get_ip_ifindex (self))) {
+ nm_log_warn (LOGD_DEVICE, "(%s): interface %s not up for IP configuration",
+ iface, nm_device_get_ip_iface (self));
+ }
+
+ /* NULL to use the existing priv->dev_ip4_config */
+ if (!ip4_config_merge_and_apply (self, NULL, TRUE, &reason)) {
+ nm_log_info (LOGD_DEVICE | LOGD_IP4,
+ "Activation (%s) Stage 5 of 5 (IPv4 Commit) failed",
+ iface);
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ goto out;
+ }
+
+ /* Start IPv4 sharing if we need it */
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+
+ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) == 0) {
+ if (!start_sharing (self, priv->ip4_config)) {
+ nm_log_warn (LOGD_SHARING, "Activation (%s) Stage 5 of 5 (IPv4 Commit) start sharing failed.", iface);
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SHARED_START_FAILED);
+ goto out;
+ }
+ }
+
+ /* If IPv4 wasn't the first to complete, and DHCP was used, then ensure
+ * dispatcher scripts get the DHCP lease information.
+ */
+ if ( priv->dhcp4_client
+ && nm_device_activate_ip4_state_in_conf (self)
+ && (nm_device_get_state (self) > NM_DEVICE_STATE_IP_CONFIG)) {
+ /* Notify dispatcher scripts of new DHCP4 config */
+ nm_dispatcher_call (DISPATCHER_ACTION_DHCP4_CHANGE,
+ nm_device_get_connection (self),
+ self,
+ NULL,
+ NULL,
+ NULL);
+ }
+
+ arp_announce (self);
+
+ /* Enter the IP_CHECK state if this is the first method to complete */
+ priv->ip4_state = IP_DONE;
+
+ nm_device_remove_pending_action (self, PENDING_ACTION_DHCP4, FALSE);
+
+ if (nm_device_get_state (self) == NM_DEVICE_STATE_IP_CONFIG)
+ nm_device_state_changed (self, NM_DEVICE_STATE_IP_CHECK, NM_DEVICE_STATE_REASON_NONE);
+
+out:
+ nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 5 of 5 (IPv4 Commit) complete.",
+ iface);
+
+ return FALSE;
+}
+
+void
+nm_device_activate_schedule_ip4_config_result (NMDevice *self, NMIP4Config *config)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+ g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ g_clear_object (&priv->dev_ip4_config);
+ priv->dev_ip4_config = g_object_ref (config);
+
+ activation_source_schedule (self, nm_device_activate_ip4_config_commit, AF_INET);
+
+ nm_log_info (LOGD_DEVICE | LOGD_IP4,
+ "Activation (%s) Stage 5 of 5 (IPv4 Configure Commit) scheduled...",
+ nm_device_get_iface (self));
+}
+
+gboolean
+nm_device_activate_ip4_state_in_conf (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ return NM_DEVICE_GET_PRIVATE (self)->ip4_state == IP_CONF;
+}
+
+gboolean
+nm_device_activate_ip4_state_in_wait (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ return NM_DEVICE_GET_PRIVATE (self)->ip4_state == IP_WAIT;
+}
+
+static gboolean
+nm_device_activate_ip6_config_commit (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ guint level = (priv->ip6_state == IP_DONE) ? LOGL_DEBUG : LOGL_INFO;
+ NMActRequest *req;
+ const char *iface;
+ NMConnection *connection;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+
+ /* Clear the activation source ID now that this stage has run */
+ activation_source_clear (self, FALSE, AF_INET6);
+
+ iface = nm_device_get_iface (self);
+ nm_log (LOGD_DEVICE, level, "Activation (%s) Stage 5 of 5 (IPv6 Commit) started...", iface);
+
+ req = nm_device_get_act_request (self);
+ g_assert (req);
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+
+ /* Device should be up before we can do anything with it */
+ g_warn_if_fail (nm_platform_link_is_up (nm_device_get_ip_ifindex (self)));
+
+ /* Allow setting MTU etc */
+ if (NM_DEVICE_GET_CLASS (self)->ip6_config_pre_commit)
+ NM_DEVICE_GET_CLASS (self)->ip6_config_pre_commit (self);
+
+ if (ip6_config_merge_and_apply (self, TRUE, &reason)) {
+ /* If IPv6 wasn't the first IP to complete, and DHCP was used,
+ * then ensure dispatcher scripts get the DHCP lease information.
+ */
+ if ( priv->dhcp6_client
+ && nm_device_activate_ip6_state_in_conf (self)
+ && (nm_device_get_state (self) > NM_DEVICE_STATE_IP_CONFIG)) {
+ /* Notify dispatcher scripts of new DHCP6 config */
+ nm_dispatcher_call (DISPATCHER_ACTION_DHCP6_CHANGE,
+ nm_device_get_connection (self),
+ self,
+ NULL,
+ NULL,
+ NULL);
+ }
+
+ /* Enter the IP_CHECK state if this is the first method to complete */
+ priv->ip6_state = IP_DONE;
+
+ nm_device_remove_pending_action (self, PENDING_ACTION_DHCP6, FALSE);
+ nm_device_remove_pending_action (self, PENDING_ACTION_AUTOCONF6, FALSE);
+
+ if (nm_device_get_state (self) == NM_DEVICE_STATE_IP_CONFIG)
+ nm_device_state_changed (self, NM_DEVICE_STATE_IP_CHECK, NM_DEVICE_STATE_REASON_NONE);
+ } else {
+ nm_log_warn (LOGD_DEVICE | LOGD_IP6,
+ "Activation (%s) Stage 5 of 5 (IPv6 Commit) failed",
+ iface);
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
+ }
+
+ nm_log (LOGD_DEVICE, level, "Activation (%s) Stage 5 of 5 (IPv6 Commit) complete.", iface);
+
+ return FALSE;
+}
+
+void
+nm_device_activate_schedule_ip6_config_result (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ guint level = (priv->ip6_state == IP_DONE) ? LOGL_DEBUG : LOGL_INFO;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ activation_source_schedule (self, nm_device_activate_ip6_config_commit, AF_INET6);
+
+ nm_log (LOGD_DEVICE | LOGD_IP6, level,
+ "Activation (%s) Stage 5 of 5 (IPv6 Commit) scheduled...",
+ nm_device_get_iface (self));
+}
+
+gboolean
+nm_device_activate_ip6_state_in_conf (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ return NM_DEVICE_GET_PRIVATE (self)->ip6_state == IP_CONF;
+}
+
+gboolean
+nm_device_activate_ip6_state_in_wait (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ return NM_DEVICE_GET_PRIVATE (self)->ip6_state == IP_WAIT;
+}
+
+static void
+clear_act_request (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (!priv->act_request)
+ return;
+
+ nm_active_connection_set_default (NM_ACTIVE_CONNECTION (priv->act_request), FALSE);
+
+ if (priv->master_ready_id) {
+ g_signal_handler_disconnect (priv->act_request, priv->master_ready_id);
+ priv->master_ready_id = 0;
+ }
+
+ g_clear_object (&priv->act_request);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_ACTIVE_CONNECTION);
+}
+
+static void
+dnsmasq_cleanup (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (!priv->dnsmasq_manager)
+ return;
+
+ if (priv->dnsmasq_state_id) {
+ g_signal_handler_disconnect (priv->dnsmasq_manager, priv->dnsmasq_state_id);
+ priv->dnsmasq_state_id = 0;
+ }
+
+ nm_dnsmasq_manager_stop (priv->dnsmasq_manager);
+ g_object_unref (priv->dnsmasq_manager);
+ priv->dnsmasq_manager = NULL;
+}
+
+static void
+_update_ip4_address (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ struct ifreq req;
+ guint32 new_address;
+ int fd;
+
+ g_return_if_fail (self != NULL);
+
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ nm_log_err (LOGD_IP4, "couldn't open control socket.");
+ return;
+ }
+
+ memset (&req, 0, sizeof (struct ifreq));
+ strncpy (req.ifr_name, nm_device_get_ip_iface (self), IFNAMSIZ);
+ if (ioctl (fd, SIOCGIFADDR, &req) == 0) {
+ new_address = ((struct sockaddr_in *)(&req.ifr_addr))->sin_addr.s_addr;
+ if (new_address != priv->ip4_address)
+ priv->ip4_address = new_address;
+ }
+ close (fd);
+}
+
+gboolean
+nm_device_get_is_nm_owned (NMDevice *device)
+{
+ return NM_DEVICE_GET_PRIVATE (device)->is_nm_owned;
+}
+
+void
+nm_device_set_nm_owned (NMDevice *device)
+{
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ NM_DEVICE_GET_PRIVATE (device)->is_nm_owned = TRUE;
+}
+
+/*
+ * delete_on_deactivate_link_delete
+ *
+ * Function will be queued with g_idle_add to call
+ * nm_platform_link_delete for the underlying resources
+ * of the device.
+ */
+static gboolean
+delete_on_deactivate_link_delete (gpointer user_data)
+{
+ DeleteOnDeactivateData *data = user_data;
+
+ if (data->device) {
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (data->device);
+
+ g_object_remove_weak_pointer (G_OBJECT (data->device), (void **) &data->device);
+ priv->delete_on_deactivate_data = NULL;
+ }
+
+ nm_log_dbg (LOGD_DEVICE, "delete_on_deactivate: cleanup and delete virtual link #%d (id=%u)",
+ data->ifindex, data->idle_add_id);
+ nm_platform_link_delete (data->ifindex);
+ g_free (data);
+ return FALSE;
+}
+
+static void
+delete_on_deactivate_unschedule (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->delete_on_deactivate_data) {
+ DeleteOnDeactivateData *data = priv->delete_on_deactivate_data;
+
+ priv->delete_on_deactivate_data = NULL;
+
+ g_source_remove (data->idle_add_id);
+ g_object_remove_weak_pointer (G_OBJECT (self), (void **) &data->device);
+ nm_log_dbg (LOGD_DEVICE, "delete_on_deactivate: cancel cleanup and delete virtual link #%d (id=%u)",
+ data->ifindex, data->idle_add_id);
+ g_free (data);
+ }
+}
+
+static void
+delete_on_deactivate_check_and_schedule (NMDevice *self, int ifindex)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ DeleteOnDeactivateData *data;
+
+ if (ifindex <= 0)
+ return;
+ if (!priv->is_nm_owned)
+ return;
+ if (!nm_device_is_software (self))
+ return;
+ if (nm_device_get_state (self) == NM_DEVICE_STATE_UNMANAGED)
+ return;
+ if (nm_device_get_state (self) == NM_DEVICE_STATE_UNAVAILABLE)
+ return;
+ delete_on_deactivate_unschedule (self); /* always cancel and reschedule */
+
+ data = g_new (DeleteOnDeactivateData, 1);
+ g_object_add_weak_pointer (G_OBJECT (self), (void **) &data->device);
+ data->device = self;
+ data->ifindex = ifindex;
+ data->idle_add_id = g_idle_add (delete_on_deactivate_link_delete, data);
+ priv->delete_on_deactivate_data = data;
+
+ nm_log_dbg (LOGD_DEVICE, "delete_on_deactivate: schedule cleanup and delete virtual link #%d for [%s] (id=%u)",
+ ifindex, nm_device_get_iface (self), data->idle_add_id);
+}
+
+static void
+disconnect_cb (NMDevice *device,
+ DBusGMethodInvocation *context,
+ GError *error,
+ gpointer user_data)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ GError *local = NULL;
+
+ if (error) {
+ dbus_g_method_return_error (context, error);
+ return;
+ }
+
+ /* Authorized */
+ if (priv->state <= NM_DEVICE_STATE_DISCONNECTED) {
+ local = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_NOT_ACTIVE,
+ "Device is not active");
+ dbus_g_method_return_error (context, local);
+ g_error_free (local);
+ } else {
+ priv->autoconnect = FALSE;
+
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_DEACTIVATING,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
+ dbus_g_method_return (context);
+ }
+}
+
+static void
+impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ if (NM_DEVICE_GET_PRIVATE (device)->act_request == NULL) {
+ error = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_NOT_ACTIVE,
+ "This device is not active");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ connection = nm_device_get_connection (device);
+ g_assert (connection);
+
+ /* Ask the manager to authenticate this request for us */
+ g_signal_emit (device, signals[AUTH_REQUEST], 0,
+ context,
+ connection,
+ NM_AUTH_PERMISSION_NETWORK_CONTROL,
+ TRUE,
+ disconnect_cb,
+ NULL);
+}
+
+static void
+_device_activate (NMDevice *self, NMActRequest *req)
+{
+ NMDevicePrivate *priv;
+ NMConnection *connection;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+ g_return_if_fail (NM_IS_ACT_REQUEST (req));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+
+ nm_log_info (LOGD_DEVICE, "Activation (%s) starting connection '%s'",
+ nm_device_get_iface (self),
+ nm_connection_get_id (connection));
+
+ delete_on_deactivate_unschedule (self);
+
+ /* Move default unmanaged devices to DISCONNECTED state here */
+ if (nm_device_get_default_unmanaged (self) && priv->state == NM_DEVICE_STATE_UNMANAGED) {
+ nm_device_state_changed (self,
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_NOW_MANAGED);
+ }
+
+ /* note: don't notify D-Bus of the new AC here, but do it later when
+ * changing state to PREPARE so that the two properties change together.
+ */
+ priv->act_request = g_object_ref (req);
+
+ nm_device_activate_schedule_stage1_device_prepare (self);
+}
+
+void
+nm_device_queue_activation (NMDevice *self, NMActRequest *req)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (!priv->act_request) {
+ /* Just activate immediately */
+ _device_activate (self, req);
+ return;
+ }
+
+ /* supercede any already-queued request */
+ g_clear_object (&priv->queued_act_request);
+ priv->queued_act_request = g_object_ref (req);
+
+ /* Deactivate existing activation request first */
+ nm_log_info (LOGD_DEVICE, "(%s): disconnecting for new activation request.",
+ nm_device_get_iface (self));
+ nm_device_state_changed (self,
+ NM_DEVICE_STATE_DEACTIVATING,
+ NM_DEVICE_STATE_REASON_NONE);
+}
+
+/*
+ * nm_device_is_activating
+ *
+ * Return whether or not the device is currently activating itself.
+ *
+ */
+gboolean
+nm_device_is_activating (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDeviceState state;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ state = nm_device_get_state (device);
+ if (state >= NM_DEVICE_STATE_PREPARE && state <= NM_DEVICE_STATE_SECONDARIES)
+ return TRUE;
+
+ /* There's a small race between the time when stage 1 is scheduled
+ * and when the device actually sets STATE_PREPARE when the activation
+ * handler is actually run. If there's an activation handler scheduled
+ * we're activating anyway.
+ */
+ return priv->act_source_id ? TRUE : FALSE;
+}
+
+/* IP Configuration stuff */
+
+NMDHCP4Config *
+nm_device_get_dhcp4_config (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->dhcp4_config;
+}
+
+NMIP4Config *
+nm_device_get_ip4_config (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->ip4_config;
+}
+
+
+static gboolean
+nm_device_set_ip4_config (NMDevice *self,
+ NMIP4Config *new_config,
+ gboolean commit,
+ NMDeviceStateReason *reason)
+{
+ NMDevicePrivate *priv;
+ const char *ip_iface;
+ NMIP4Config *old_config = NULL;
+ gboolean has_changes = FALSE;
+ gboolean success = TRUE;
+ NMDeviceStateReason reason_local = NM_DEVICE_STATE_REASON_NONE;
+ int ip_ifindex;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ ip_iface = nm_device_get_ip_iface (self);
+ ip_ifindex = nm_device_get_ip_ifindex (self);
+
+ old_config = priv->ip4_config;
+
+ /* Always commit to nm-platform to update lifetimes */
+ if (commit && new_config) {
+ success = nm_ip4_config_commit (new_config, ip_ifindex);
+ if (!success)
+ reason_local = NM_DEVICE_STATE_REASON_CONFIG_FAILED;
+ }
+
+ if (new_config) {
+ if (old_config) {
+ /* has_changes is set only on relevant changes, because when the configuration changes,
+ * this causes a re-read and reset. This should only happen for relevant changes */
+ nm_ip4_config_replace (old_config, new_config, &has_changes);
+ if (has_changes) {
+ nm_log_dbg (LOGD_IP4, "(%s): update IP4Config instance (%s)",
+ ip_iface, nm_ip4_config_get_dbus_path (old_config));
+ }
+ } else {
+ has_changes = TRUE;
+ priv->ip4_config = g_object_ref (new_config);
+
+ if (success && !nm_ip4_config_get_dbus_path (new_config)) {
+ /* Export over D-Bus */
+ nm_ip4_config_export (new_config);
+ }
+
+ nm_log_dbg (LOGD_IP4, "(%s): set IP4Config instance (%s)",
+ ip_iface, nm_ip4_config_get_dbus_path (new_config));
+ }
+ } else if (old_config) {
+ has_changes = TRUE;
+ priv->ip4_config = NULL;
+ nm_log_dbg (LOGD_IP4, "(%s): clear IP4Config instance (%s)",
+ ip_iface, nm_ip4_config_get_dbus_path (old_config));
+ /* Device config is invalid if combined config is invalid */
+ g_clear_object (&priv->dev_ip4_config);
+ }
+
+ if (has_changes) {
+ _update_ip4_address (self);
+
+ if (old_config != priv->ip4_config)
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP4_CONFIG);
+ g_signal_emit (self, signals[IP4_CONFIG_CHANGED], 0, priv->ip4_config, old_config);
+
+ if (old_config != priv->ip4_config && old_config)
+ g_object_unref (old_config);
+
+ if (nm_device_uses_generated_connection (self)) {
+ NMConnection *connection = nm_device_get_connection (self);
+ NMSetting *s_ip4;
+
+ g_object_freeze_notify (G_OBJECT (connection));
+ nm_connection_remove_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ s_ip4 = nm_ip4_config_create_setting (priv->ip4_config);
+ nm_connection_add_setting (connection, s_ip4);
+ g_object_thaw_notify (G_OBJECT (connection));
+ }
+
+ nm_device_queue_recheck_assume (self);
+ }
+
+ if (reason)
+ *reason = reason_local;
+
+ return success;
+}
+
+void
+nm_device_set_vpn4_config (NMDevice *device, NMIP4Config *config)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (priv->vpn4_config == config)
+ return;
+
+ g_clear_object (&priv->vpn4_config);
+ if (config)
+ priv->vpn4_config = g_object_ref (config);
+
+ /* NULL to use existing configs */
+ if (!ip4_config_merge_and_apply (device, NULL, TRUE, NULL)) {
+ nm_log_warn (LOGD_IP4, "(%s): failed to set VPN routes for device",
+ nm_device_get_ip_iface (device));
+ }
+}
+
+static gboolean
+nm_device_set_ip6_config (NMDevice *self,
+ NMIP6Config *new_config,
+ gboolean commit,
+ NMDeviceStateReason *reason)
+{
+ NMDevicePrivate *priv;
+ const char *ip_iface;
+ NMIP6Config *old_config = NULL;
+ gboolean has_changes = FALSE;
+ gboolean success = TRUE;
+ NMDeviceStateReason reason_local = NM_DEVICE_STATE_REASON_NONE;
+ int ip_ifindex;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ ip_iface = nm_device_get_ip_iface (self);
+ ip_ifindex = nm_device_get_ip_ifindex (self);
+
+ old_config = priv->ip6_config;
+
+ /* Always commit to nm-platform to update lifetimes */
+ if (commit && new_config) {
+ success = nm_ip6_config_commit (new_config, ip_ifindex);
+ if (!success)
+ reason_local = NM_DEVICE_STATE_REASON_CONFIG_FAILED;
+ }
+
+ if (new_config) {
+ if (old_config) {
+ /* has_changes is set only on relevant changes, because when the configuration changes,
+ * this causes a re-read and reset. This should only happen for relevant changes */
+ nm_ip6_config_replace (old_config, new_config, &has_changes);
+ if (has_changes) {
+ nm_log_dbg (LOGD_IP6, "(%s): update IP6Config instance (%s)",
+ ip_iface, nm_ip6_config_get_dbus_path (old_config));
+ }
+ } else {
+ has_changes = TRUE;
+ priv->ip6_config = g_object_ref (new_config);
+
+ if (success && !nm_ip6_config_get_dbus_path (new_config)) {
+ /* Export over D-Bus */
+ nm_ip6_config_export (new_config);
+ }
+
+ nm_log_dbg (LOGD_IP4, "(%s): set IP6Config instance (%s)",
+ ip_iface, nm_ip6_config_get_dbus_path (new_config));
+ }
+ } else if (old_config) {
+ has_changes = TRUE;
+ priv->ip6_config = NULL;
+ nm_log_dbg (LOGD_IP6, "(%s): clear IP6Config instance (%s)",
+ ip_iface, nm_ip6_config_get_dbus_path (old_config));
+ }
+
+ if (has_changes) {
+ if (old_config != priv->ip6_config)
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP6_CONFIG);
+ g_signal_emit (self, signals[IP6_CONFIG_CHANGED], 0, priv->ip6_config, old_config);
+
+ if (old_config != priv->ip6_config && old_config)
+ g_object_unref (old_config);
+
+ if (nm_device_uses_generated_connection (self)) {
+ NMConnection *connection = nm_device_get_connection (self);
+ NMSetting *s_ip6;
+
+ g_object_freeze_notify (G_OBJECT (connection));
+ nm_connection_remove_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ s_ip6 = nm_ip6_config_create_setting (priv->ip6_config);
+ nm_connection_add_setting (connection, s_ip6);
+ g_object_thaw_notify (G_OBJECT (connection));
+ }
+
+ nm_device_queue_recheck_assume (self);
+ }
+
+ if (reason)
+ *reason = reason_local;
+
+ return success;
+}
+
+void
+nm_device_set_vpn6_config (NMDevice *device, NMIP6Config *config)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (priv->vpn6_config == config)
+ return;
+
+ g_clear_object (&priv->vpn6_config);
+ if (config)
+ priv->vpn6_config = g_object_ref (config);
+
+ /* NULL to use existing configs */
+ if (!ip6_config_merge_and_apply (device, TRUE, NULL)) {
+ nm_log_warn (LOGD_IP6, "(%s): failed to set VPN routes for device",
+ nm_device_get_ip_iface (device));
+ }
+}
+
+NMDHCP6Config *
+nm_device_get_dhcp6_config (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->dhcp6_config;
+}
+
+NMIP6Config *
+nm_device_get_ip6_config (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->ip6_config;
+}
+
+/****************************************************************/
+
+static void
+dispatcher_cleanup (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->dispatcher.call_id) {
+ nm_dispatcher_call_cancel (priv->dispatcher.call_id);
+ priv->dispatcher.call_id = 0;
+ priv->dispatcher.post_state = NM_DEVICE_STATE_UNKNOWN;
+ priv->dispatcher.post_state_reason = NM_DEVICE_STATE_REASON_NONE;
+ }
+}
+
+static void
+dispatcher_complete_proceed_state (guint call_id, gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ g_return_if_fail (call_id == priv->dispatcher.call_id);
+
+ priv->dispatcher.call_id = 0;
+ nm_device_queue_state (self, priv->dispatcher.post_state,
+ priv->dispatcher.post_state_reason);
+ priv->dispatcher.post_state = NM_DEVICE_STATE_UNKNOWN;
+ priv->dispatcher.post_state_reason = NM_DEVICE_STATE_REASON_NONE;
+}
+
+/****************************************************************/
+
+static void
+ip_check_pre_up (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->dispatcher.call_id != 0) {
+ g_warn_if_reached ();
+ dispatcher_cleanup (self);
+ }
+
+ priv->dispatcher.post_state = NM_DEVICE_STATE_SECONDARIES;
+ priv->dispatcher.post_state_reason = NM_DEVICE_STATE_REASON_NONE;
+ if (!nm_dispatcher_call (DISPATCHER_ACTION_PRE_UP,
+ nm_device_get_connection (self),
+ self,
+ dispatcher_complete_proceed_state,
+ self,
+ &priv->dispatcher.call_id)) {
+ /* Just proceed on errors */
+ dispatcher_complete_proceed_state (0, self);
+ }
+}
+
+static void
+ip_check_gw_ping_cleanup (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->gw_ping.watch) {
+ g_source_remove (priv->gw_ping.watch);
+ priv->gw_ping.watch = 0;
+ }
+ if (priv->gw_ping.timeout) {
+ g_source_remove (priv->gw_ping.timeout);
+ priv->gw_ping.timeout = 0;
+ }
+
+ if (priv->gw_ping.pid) {
+ guint count = 20;
+ int status;
+
+ kill (priv->gw_ping.pid, SIGKILL);
+ do {
+ if (waitpid (priv->gw_ping.pid, &status, WNOHANG) != 0)
+ break;
+ g_usleep (G_USEC_PER_SEC / 20);
+ } while (count--);
+
+ priv->gw_ping.pid = 0;
+ }
+}
+
+static void
+ip_check_ping_watch_cb (GPid pid, gint status, gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *iface;
+ guint log_domain = priv->gw_ping.log_domain;
+
+ if (!priv->gw_ping.watch)
+ return;
+ priv->gw_ping.watch = 0;
+ priv->gw_ping.pid = 0;
+
+ iface = nm_device_get_iface (self);
+
+ if (WIFEXITED (status)) {
+ if (WEXITSTATUS (status) == 0)
+ nm_log_dbg (log_domain, "(%s): gateway ping succeeded", iface);
+ else {
+ nm_log_warn (log_domain, "(%s): gateway ping failed with error code %d",
+ iface, WEXITSTATUS (status));
+ }
+ } else
+ nm_log_warn (log_domain, "(%s): ping stopped unexpectedly with status %d", iface, status);
+
+ /* We've got connectivity, proceed to pre_up */
+ ip_check_gw_ping_cleanup (self);
+ ip_check_pre_up (self);
+}
+
+static gboolean
+ip_check_ping_timeout_cb (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ priv->gw_ping.timeout = 0;
+
+ nm_log_warn (priv->gw_ping.log_domain, "(%s): gateway ping timed out",
+ nm_device_get_iface (self));
+
+ ip_check_gw_ping_cleanup (self);
+ ip_check_pre_up (self);
+ return FALSE;
+}
+
+static gboolean
+spawn_ping (NMDevice *self,
+ guint log_domain,
+ const char *binary,
+ const char *address,
+ guint timeout)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *args[] = { binary, "-I", nm_device_get_ip_iface (self), "-c", "1", "-w", NULL, address, NULL };
+ GError *error = NULL;
+ char *str_timeout, *cmd;
+ gboolean success;
+
+ g_return_val_if_fail (priv->gw_ping.watch == 0, FALSE);
+ g_return_val_if_fail (priv->gw_ping.timeout == 0, FALSE);
+
+ args[6] = str_timeout = g_strdup_printf ("%u", timeout);
+
+ if (nm_logging_enabled (LOGL_DEBUG, log_domain)) {
+ cmd = g_strjoinv (" ", (gchar **) args);
+ nm_log_dbg (log_domain, "(%s): running '%s'",
+ nm_device_get_iface (self),
+ cmd);
+ g_free (cmd);
+ }
+
+ success = g_spawn_async ("/",
+ (gchar **) args,
+ NULL,
+ G_SPAWN_DO_NOT_REAP_CHILD,
+ nm_unblock_posix_signals,
+ NULL,
+ &priv->gw_ping.pid,
+ &error);
+ if (success) {
+ priv->gw_ping.log_domain = log_domain;
+ priv->gw_ping.watch = g_child_watch_add (priv->gw_ping.pid, ip_check_ping_watch_cb, self);
+ priv->gw_ping.timeout = g_timeout_add_seconds (timeout + 1, ip_check_ping_timeout_cb, self);
+ } else {
+ nm_log_warn (log_domain, "could not spawn %s: %s", binary, error->message);
+ g_clear_error (&error);
+ }
+
+ g_free (str_timeout);
+ return success;
+}
+
+static void
+nm_device_start_ip_check (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ guint timeout = 0;
+ const char *ping_binary = NULL;
+ char buf[INET6_ADDRSTRLEN] = { 0 };
+ guint log_domain = LOGD_IP4;
+
+ /* Shouldn't be any active ping here, since IP_CHECK happens after the
+ * first IP method completes. Any subsequently completing IP method doesn't
+ * get checked.
+ */
+ g_assert (!priv->gw_ping.watch);
+ g_assert (!priv->gw_ping.timeout);
+ g_assert (!priv->gw_ping.pid);
+ g_assert (priv->ip4_state == IP_DONE || priv->ip6_state == IP_DONE);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ timeout = nm_setting_connection_get_gateway_ping_timeout (s_con);
+
+ if (timeout) {
+ if (priv->ip4_state == IP_DONE) {
+ guint gw = 0;
+
+ ping_binary = "/usr/bin/ping";
+ log_domain = LOGD_IP4;
+
+ gw = nm_ip4_config_get_gateway (priv->ip4_config);
+ if (gw && !inet_ntop (AF_INET, &gw, buf, sizeof (buf)))
+ buf[0] = '\0';
+ } else if (priv->ip6_config && priv->ip6_state == IP_DONE) {
+ const struct in6_addr *gw = NULL;
+
+ ping_binary = "/usr/bin/ping6";
+ log_domain = LOGD_IP6;
+
+ gw = nm_ip6_config_get_gateway (priv->ip6_config);
+ if (gw && !inet_ntop (AF_INET6, gw, buf, sizeof (buf)))
+ buf[0] = '\0';
+ }
+ }
+
+ if (buf[0])
+ spawn_ping (self, log_domain, ping_binary, buf, timeout);
+
+ /* If no ping was started, just advance to pre_up */
+ if (!priv->gw_ping.pid)
+ ip_check_pre_up (self);
+}
+
+/****************************************************************/
+
+static gboolean
+carrier_wait_timeout (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+
+ NM_DEVICE_GET_PRIVATE (self)->carrier_wait_id = 0;
+ nm_device_remove_pending_action (self, "carrier wait", TRUE);
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
+nm_device_is_up (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ if (NM_DEVICE_GET_CLASS (self)->is_up)
+ return NM_DEVICE_GET_CLASS (self)->is_up (self);
+
+ return TRUE;
+}
+
+static gboolean
+is_up (NMDevice *device)
+{
+ int ifindex = nm_device_get_ip_ifindex (device);
+
+ return ifindex > 0 ? nm_platform_link_is_up (ifindex) : TRUE;
+}
+
+gboolean
+nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ gboolean device_is_up = FALSE;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ nm_log_dbg (LOGD_HW, "(%s): bringing up device.", nm_device_get_iface (self));
+
+ if (NM_DEVICE_GET_CLASS (self)->bring_up) {
+ if (!NM_DEVICE_GET_CLASS (self)->bring_up (self, no_firmware))
+ return FALSE;
+ }
+
+ device_is_up = nm_device_is_up (self);
+ if (block && !device_is_up) {
+ int ifindex = nm_device_get_ip_ifindex (self);
+ gint64 wait_until = nm_utils_get_monotonic_timestamp_us () + 10000 /* microseconds */;
+
+ do {
+ g_usleep (200);
+ if (!nm_platform_link_refresh (ifindex))
+ return FALSE;
+ device_is_up = nm_device_is_up (self);
+ } while (!device_is_up && nm_utils_get_monotonic_timestamp_us () < wait_until);
+ }
+
+ if (!device_is_up) {
+ if (block)
+ nm_log_warn (LOGD_HW, "(%s): device not up after timeout!", nm_device_get_iface (self));
+ else
+ nm_log_dbg (LOGD_HW, "(%s): device not up immediately", nm_device_get_iface (self));
+ return FALSE;
+ }
+
+ /* Devices that support carrier detect must be IFF_UP to report carrier
+ * changes; so after setting the device IFF_UP we must suppress startup
+ * complete (via a pending action) until either the carrier turns on, or
+ * a timeout is reached.
+ */
+ if (device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT)) {
+ if (priv->carrier_wait_id) {
+ g_source_remove (priv->carrier_wait_id);
+ nm_device_remove_pending_action (self, "carrier wait", TRUE);
+ }
+ priv->carrier_wait_id = g_timeout_add_seconds (5, carrier_wait_timeout, self);
+ nm_device_add_pending_action (self, "carrier wait", TRUE);
+ }
+
+ /* Can only get HW address of some devices when they are up */
+ nm_device_update_hw_address (self);
+
+ _update_ip4_address (self);
+ return TRUE;
+}
+
+static void
+check_carrier (NMDevice *device)
+{
+ int ifindex = nm_device_get_ip_ifindex (device);
+
+ if (!device_has_capability (device, NM_DEVICE_CAP_NONSTANDARD_CARRIER))
+ nm_device_set_carrier (device, nm_platform_link_is_connected (ifindex));
+}
+
+static gboolean
+bring_up (NMDevice *device, gboolean *no_firmware)
+{
+ int ifindex = nm_device_get_ip_ifindex (device);
+ gboolean result;
+
+ if (ifindex <= 0) {
+ if (no_firmware)
+ *no_firmware = FALSE;
+ return TRUE;
+ }
+
+ result = nm_platform_link_set_up (ifindex);
+ if (no_firmware)
+ *no_firmware = nm_platform_get_error () == NM_PLATFORM_ERROR_NO_FIRMWARE;
+
+ /* Store carrier immediately. */
+ if (result && device_has_capability (device, NM_DEVICE_CAP_CARRIER_DETECT))
+ check_carrier (device);
+
+ return result;
+}
+
+void
+nm_device_take_down (NMDevice *self, gboolean block)
+{
+ gboolean device_is_up;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ nm_log_dbg (LOGD_HW, "(%s): taking down device.", nm_device_get_iface (self));
+
+ if (NM_DEVICE_GET_CLASS (self)->take_down) {
+ if (!NM_DEVICE_GET_CLASS (self)->take_down (self))
+ return;
+ }
+
+ device_is_up = nm_device_is_up (self);
+ if (block && device_is_up) {
+ int ifindex = nm_device_get_ip_ifindex (self);
+ gint64 wait_until = nm_utils_get_monotonic_timestamp_us () + 10000 /* microseconds */;
+
+ do {
+ g_usleep (200);
+ if (!nm_platform_link_refresh (ifindex))
+ return;
+ device_is_up = nm_device_is_up (self);
+ } while (device_is_up && nm_utils_get_monotonic_timestamp_us () < wait_until);
+ }
+
+ if (device_is_up) {
+ if (block)
+ nm_log_warn (LOGD_HW, "(%s): device not down after timeout!", nm_device_get_iface (self));
+ else
+ nm_log_dbg (LOGD_HW, "(%s): device not down immediately", nm_device_get_iface (self));
+ }
+}
+
+static gboolean
+take_down (NMDevice *device)
+{
+ int ifindex = nm_device_get_ip_ifindex (device);
+
+ if (ifindex > 0)
+ return nm_platform_link_set_down (ifindex);
+
+ /* devices without ifindex are always up. */
+ nm_log_dbg (LOGD_HW, "(%s): cannot take down device without ifindex", nm_device_get_iface (device));
+ return FALSE;
+}
+
+void
+nm_device_set_firmware_missing (NMDevice *self, gboolean new_missing)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ if (priv->firmware_missing != new_missing) {
+ priv->firmware_missing = new_missing;
+ g_object_notify (G_OBJECT (self), NM_DEVICE_FIRMWARE_MISSING);
+ }
+}
+
+gboolean
+nm_device_get_firmware_missing (NMDevice *self)
+{
+ return NM_DEVICE_GET_PRIVATE (self)->firmware_missing;
+}
+
+static NMIP4Config *
+find_ip4_lease_config (NMDevice *device,
+ NMConnection *connection,
+ NMIP4Config *ext_ip4_config)
+{
+ const char *ip_iface = nm_device_get_ip_iface (device);
+ GSList *leases, *liter;
+ NMIP4Config *found = NULL;
+
+ g_return_val_if_fail (NM_IS_IP4_CONFIG (ext_ip4_config), NULL);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ leases = nm_dhcp_manager_get_lease_ip_configs (nm_dhcp_manager_get (),
+ ip_iface,
+ nm_connection_get_uuid (connection),
+ FALSE);
+ for (liter = leases; liter && !found; liter = liter->next) {
+ NMIP4Config *lease_config = liter->data;
+ const NMPlatformIP4Address *address = nm_ip4_config_get_address (lease_config, 0);
+ guint32 gateway = nm_ip4_config_get_gateway (lease_config);
+
+ g_assert (address);
+ if (!nm_ip4_config_address_exists (ext_ip4_config, address))
+ continue;
+ if (gateway != nm_ip4_config_get_gateway (ext_ip4_config))
+ continue;
+ found = g_object_ref (lease_config);
+ }
+
+ g_slist_free_full (leases, g_object_unref);
+ return found;
+}
+
+static void
+capture_lease_config (NMDevice *device,
+ NMIP4Config *ext_ip4_config,
+ NMIP4Config **out_ip4_config,
+ NMIP6Config *ext_ip6_config,
+ NMIP6Config **out_ip6_config)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ const GSList *connections, *citer;
+ guint i;
+ gboolean dhcp_used = FALSE;
+
+ /* Ensure at least one address on the device has a non-infinite lifetime,
+ * otherwise DHCP cannot possibly be active on the device right now.
+ */
+ if (ext_ip4_config && out_ip4_config) {
+ for (i = 0; i < nm_ip4_config_get_num_addresses (ext_ip4_config); i++) {
+ const NMPlatformIP4Address *addr = nm_ip4_config_get_address (ext_ip4_config, i);
+
+ if (addr->lifetime != NM_PLATFORM_LIFETIME_PERMANENT) {
+ dhcp_used = TRUE;
+ break;
+ }
+ }
+ } else if (ext_ip6_config && out_ip6_config) {
+ for (i = 0; i < nm_ip6_config_get_num_addresses (ext_ip6_config); i++) {
+ const NMPlatformIP6Address *addr = nm_ip6_config_get_address (ext_ip6_config, i);
+
+ if (addr->lifetime != NM_PLATFORM_LIFETIME_PERMANENT) {
+ dhcp_used = TRUE;
+ break;
+ }
+ }
+ } else {
+ g_return_if_fail ( (ext_ip6_config && out_ip6_config)
+ || (ext_ip4_config && out_ip4_config));
+ }
+
+ if (!dhcp_used)
+ return;
+
+ connections = nm_connection_provider_get_connections (priv->con_provider);
+ for (citer = connections; citer; citer = citer->next) {
+ NMConnection *candidate = citer->data;
+ const char *method;
+
+ if (!nm_device_check_connection_compatible (device, candidate))
+ continue;
+
+ /* IPv4 leases */
+ method = nm_utils_get_ip_config_method (candidate, NM_TYPE_SETTING_IP4_CONFIG);
+ if (out_ip4_config && strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0) {
+ *out_ip4_config = find_ip4_lease_config (device, candidate, ext_ip4_config);
+ if (*out_ip4_config)
+ return;
+ }
+
+ /* IPv6 leases */
+ method = nm_utils_get_ip_config_method (candidate, NM_TYPE_SETTING_IP6_CONFIG);
+ if (out_ip6_config && strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0) {
+ /* FIXME: implement find_ip6_lease_config() */
+ }
+ }
+}
+
+static void
+update_ip_config (NMDevice *self, gboolean initial)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ int ifindex;
+ gboolean linklocal6_just_completed = FALSE;
+ gboolean capture_resolv_conf;
+ NMDnsManagerResolvConfMode resolv_conf_mode;
+
+ ifindex = nm_device_get_ip_ifindex (self);
+ if (!ifindex)
+ return;
+
+ resolv_conf_mode = nm_dns_manager_get_resolv_conf_mode (nm_dns_manager_get ());
+ capture_resolv_conf = initial && (resolv_conf_mode == NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT);
+
+ /* IPv4 */
+ g_clear_object (&priv->ext_ip4_config);
+ priv->ext_ip4_config = nm_ip4_config_capture (ifindex, capture_resolv_conf);
+
+ if (priv->ext_ip4_config) {
+ if (initial) {
+ g_clear_object (&priv->dev_ip4_config);
+ capture_lease_config (self, priv->ext_ip4_config, &priv->dev_ip4_config, NULL, NULL);
+ }
+ if (priv->dev_ip4_config)
+ nm_ip4_config_subtract (priv->ext_ip4_config, priv->dev_ip4_config);
+ if (priv->vpn4_config)
+ nm_ip4_config_subtract (priv->ext_ip4_config, priv->vpn4_config);
+
+ ip4_config_merge_and_apply (self, NULL, FALSE, NULL);
+ }
+
+ /* IPv6 */
+ g_clear_object (&priv->ext_ip6_config);
+ priv->ext_ip6_config = nm_ip6_config_capture (ifindex, capture_resolv_conf, NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
+ if (priv->ext_ip6_config) {
+
+ /* Check this before modifying ext_ip6_config */
+ linklocal6_just_completed = priv->linklocal6_timeout_id &&
+ linklocal6_config_is_ready (priv->ext_ip6_config);
+
+ if (priv->ac_ip6_config)
+ nm_ip6_config_subtract (priv->ext_ip6_config, priv->ac_ip6_config);
+ if (priv->dhcp6_ip6_config)
+ nm_ip6_config_subtract (priv->ext_ip6_config, priv->dhcp6_ip6_config);
+ if (priv->vpn6_config)
+ nm_ip6_config_subtract (priv->ext_ip6_config, priv->vpn6_config);
+
+ ip6_config_merge_and_apply (self, FALSE, NULL);
+ }
+
+ if (linklocal6_just_completed) {
+ /* linklocal6 is ready now, do the state transition... we are also
+ * invoked as g_idle_add, so no problems with reentrance doing it now.
+ */
+ linklocal6_complete (self);
+ }
+}
+
+void
+nm_device_capture_initial_config (NMDevice *dev)
+{
+ update_ip_config (dev, TRUE);
+}
+
+static gboolean
+queued_ip_config_change (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ /* Wait for any queued state changes */
+ if (priv->queued_state.id)
+ return TRUE;
+
+ priv->queued_ip_config_id = 0;
+ update_ip_config (self, FALSE);
+ return FALSE;
+}
+
+static void
+device_ip_changed (NMPlatform *platform, int ifindex, gpointer platform_object, NMPlatformSignalChangeType change_type, NMPlatformReason reason, gpointer user_data)
+{
+ NMDevice *self = user_data;
+
+ if (nm_device_get_ip_ifindex (self) == ifindex) {
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (!priv->queued_ip_config_id)
+ priv->queued_ip_config_id = g_idle_add (queued_ip_config_change, self);
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): queued IP config change",
+ nm_device_get_iface (self));
+ }
+}
+
+static void
+nm_device_queued_ip_config_change_clear (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->queued_ip_config_id) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): clearing queued IP config change",
+ nm_device_get_iface (self));
+ g_source_remove (priv->queued_ip_config_id);
+ priv->queued_ip_config_id = 0;
+ }
+}
+
+/**
+ * nm_device_get_managed():
+ * @device: the #NMDevice
+ *
+ * Returns: %TRUE if the device is managed
+ */
+gboolean
+nm_device_get_managed (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+ gboolean managed;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+
+ /* Return the composite of all managed flags. However, if the device
+ * is a default-unmanaged device, and would be managed except for the
+ * default-unmanaged flag (eg, only NM_UNMANAGED_DEFAULT is set) then
+ * the device is managed whenever it's not in the UNMANAGED state.
+ */
+ managed = !(priv->unmanaged_flags & ~NM_UNMANAGED_DEFAULT);
+ if (managed && (priv->unmanaged_flags & NM_UNMANAGED_DEFAULT))
+ managed = (priv->state > NM_DEVICE_STATE_UNMANAGED);
+
+ return managed;
+}
+
+/**
+ * nm_device_get_unmanaged_flag():
+ * @device: the #NMDevice
+ *
+ * Returns: %TRUE if the device is unmanaged for @flag.
+ */
+gboolean
+nm_device_get_unmanaged_flag (NMDevice *device, NMUnmanagedFlags flag)
+{
+ return NM_DEVICE_GET_PRIVATE (device)->unmanaged_flags & flag;
+}
+
+/**
+ * nm_device_get_default_unmanaged():
+ * @device: the #NMDevice
+ *
+ * Returns: %TRUE if the device is by default unmanaged
+ */
+static gboolean
+nm_device_get_default_unmanaged (NMDevice *device)
+{
+ return nm_device_get_unmanaged_flag (device, NM_UNMANAGED_DEFAULT);
+}
+
+void
+nm_device_set_unmanaged (NMDevice *device,
+ NMUnmanagedFlags flag,
+ gboolean unmanaged,
+ NMDeviceStateReason reason)
+{
+ NMDevicePrivate *priv;
+ gboolean was_managed, now_managed;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (flag <= NM_UNMANAGED_LAST);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+
+ was_managed = nm_device_get_managed (device);
+ if (unmanaged)
+ priv->unmanaged_flags |= flag;
+ else
+ priv->unmanaged_flags &= ~flag;
+ now_managed = nm_device_get_managed (device);
+
+ if (was_managed != now_managed) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): now %s",
+ nm_device_get_iface (device),
+ unmanaged ? "unmanaged" : "managed");
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_MANAGED);
+
+ if (unmanaged)
+ nm_device_state_changed (device, NM_DEVICE_STATE_UNMANAGED, reason);
+ else
+ nm_device_state_changed (device, NM_DEVICE_STATE_UNAVAILABLE, reason);
+ }
+}
+
+void
+nm_device_set_unmanaged_quitting (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ /* It's OK to block here because we're quitting */
+ if (nm_device_is_activating (device) || priv->state == NM_DEVICE_STATE_ACTIVATED)
+ _set_state_full (device, NM_DEVICE_STATE_DEACTIVATING, NM_DEVICE_STATE_REASON_REMOVED, TRUE);
+
+ nm_device_set_unmanaged (device,
+ NM_UNMANAGED_INTERNAL,
+ TRUE,
+ NM_DEVICE_STATE_REASON_REMOVED);
+}
+
+/**
+ * nm_device_set_initial_unmanaged_flag():
+ * @device: the #NMDevice
+ * @flag: an #NMUnmanagedFlag
+ * @unmanaged: %TRUE or %FALSE to set or clear @flag
+ *
+ * Like nm_device_set_unmanaged() but must be set before the device is exported
+ * and does not trigger state changes. Should only be used when initializing
+ * a device.
+ */
+void
+nm_device_set_initial_unmanaged_flag (NMDevice *device,
+ NMUnmanagedFlags flag,
+ gboolean unmanaged)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (flag <= NM_UNMANAGED_LAST);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ g_return_if_fail (priv->path == NULL);
+
+ if (unmanaged)
+ priv->unmanaged_flags |= flag;
+ else
+ priv->unmanaged_flags &= ~flag;
+}
+
+void
+nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout)
+{
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ NM_DEVICE_GET_PRIVATE (device)->dhcp_timeout = timeout;
+}
+
+void
+nm_device_set_dhcp_anycast_address (NMDevice *device, guint8 *addr)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+
+ if (priv->dhcp_anycast_address) {
+ g_byte_array_free (priv->dhcp_anycast_address, TRUE);
+ priv->dhcp_anycast_address = NULL;
+ }
+
+ if (addr) {
+ priv->dhcp_anycast_address = g_byte_array_sized_new (ETH_ALEN);
+ g_byte_array_append (priv->dhcp_anycast_address, addr, ETH_ALEN);
+ }
+}
+
+/**
+ * nm_device_connection_is_available():
+ * @device: the #NMDevice
+ * @connection: the #NMConnection to check for availability
+ * @allow_device_override: set to %TRUE to let the device do specific checks
+ *
+ * Check if @connection is available to be activated on @device. Normally this
+ * only checks if the connection is in @device's AvailableConnections property.
+ * If @allow_device_override is %TRUE then the device is asked to do specific
+ * checks that may bypass the AvailableConnections property.
+ *
+ * Returns: %TRUE if @connection can be activated on @device
+ */
+gboolean
+nm_device_connection_is_available (NMDevice *device,
+ NMConnection *connection,
+ gboolean allow_device_override)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ gboolean available = FALSE;
+
+ if (nm_device_get_default_unmanaged (device) && (priv->state == NM_DEVICE_STATE_UNMANAGED)) {
+ /* default-unmanaged devices in UNMANAGED state have no available connections
+ * so we must manually check whether the connection is available here.
+ */
+ if ( nm_device_check_connection_compatible (device, connection)
+ && NM_DEVICE_GET_CLASS (device)->check_connection_available (device, connection, NULL))
+ return TRUE;
+ }
+
+ available = !!g_hash_table_lookup (priv->available_connections, connection);
+ if (!available && allow_device_override) {
+ /* FIXME: hack for hidden WiFi becuase clients didn't consistently
+ * set the 'hidden' property to indicate hidden SSID networks. If
+ * activating but the network isn't available let the device recheck
+ * availability.
+ */
+ if ( nm_device_check_connection_compatible (device, connection)
+ && NM_DEVICE_GET_CLASS (device)->check_connection_available_wifi_hidden)
+ available = NM_DEVICE_GET_CLASS (device)->check_connection_available_wifi_hidden (device, connection);
+ }
+
+ return available;
+}
+
+static void
+_signal_available_connections_changed (NMDevice *device)
+{
+ g_object_notify (G_OBJECT (device), NM_DEVICE_AVAILABLE_CONNECTIONS);
+}
+
+static void
+_clear_available_connections (NMDevice *device, gboolean do_signal)
+{
+ g_hash_table_remove_all (NM_DEVICE_GET_PRIVATE (device)->available_connections);
+ if (do_signal == TRUE)
+ _signal_available_connections_changed (device);
+}
+
+static gboolean
+_try_add_available_connection (NMDevice *self, NMConnection *connection)
+{
+ if (nm_device_get_state (self) < NM_DEVICE_STATE_DISCONNECTED)
+ return FALSE;
+
+ if (nm_device_check_connection_compatible (self, connection)) {
+ if (NM_DEVICE_GET_CLASS (self)->check_connection_available (self, connection, NULL)) {
+ g_hash_table_insert (NM_DEVICE_GET_PRIVATE (self)->available_connections,
+ g_object_ref (connection),
+ GUINT_TO_POINTER (1));
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static gboolean
+_del_available_connection (NMDevice *device, NMConnection *connection)
+{
+ return g_hash_table_remove (NM_DEVICE_GET_PRIVATE (device)->available_connections, connection);
+}
+
+static gboolean
+connection_requires_carrier (NMConnection *connection)
+{
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ const char *method;
+ gboolean ip4_carrier_wanted = FALSE, ip6_carrier_wanted = FALSE;
+ gboolean ip4_used = FALSE, ip6_used = FALSE;
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if ( strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) != 0
+ && strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) != 0) {
+ ip4_carrier_wanted = TRUE;
+
+ /* If IPv4 wants a carrier and cannot fail, the whole connection
+ * requires a carrier regardless of the IPv6 method.
+ */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (s_ip4 && !nm_setting_ip4_config_get_may_fail (s_ip4))
+ return TRUE;
+ }
+ ip4_used = (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) != 0);
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if ( strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) != 0
+ && strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) != 0) {
+ ip6_carrier_wanted = TRUE;
+
+ /* If IPv6 wants a carrier and cannot fail, the whole connection
+ * requires a carrier regardless of the IPv4 method.
+ */
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ if (s_ip6 && !nm_setting_ip6_config_get_may_fail (s_ip6))
+ return TRUE;
+ }
+ ip6_used = (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) != 0);
+
+ /* If an IP version wants a carrier and and the other IP version isn't
+ * used, the connection requires carrier since it will just fail without one.
+ */
+ if (ip4_carrier_wanted && !ip6_used)
+ return TRUE;
+ if (ip6_carrier_wanted && !ip4_used)
+ return TRUE;
+
+ /* If both want a carrier, the whole connection wants a carrier */
+ return ip4_carrier_wanted && ip6_carrier_wanted;
+}
+
+static gboolean
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
+{
+ /* Connections which require a network connection are not available when
+ * the device has no carrier, even with ignore-carrer=TRUE.
+ */
+ if (NM_DEVICE_GET_PRIVATE (device)->carrier == FALSE)
+ return connection_requires_carrier (connection) ? FALSE : TRUE;
+
+ return TRUE;
+}
+
+void
+nm_device_recheck_available_connections (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+ const GSList *connections, *iter;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ priv = NM_DEVICE_GET_PRIVATE(device);
+
+ if (priv->con_provider) {
+ _clear_available_connections (device, FALSE);
+
+ connections = nm_connection_provider_get_connections (priv->con_provider);
+ for (iter = connections; iter; iter = g_slist_next (iter))
+ _try_add_available_connection (device, NM_CONNECTION (iter->data));
+
+ _signal_available_connections_changed (device);
+ }
+}
+
+/**
+ * nm_device_get_available_connections:
+ * @device: the #NMDevice
+ * @specific_object: a specific object path if any
+ *
+ * Returns a list of connections available to activate on the device, taking
+ * into account any device-specific details given by @specific_object (like
+ * WiFi access point path).
+ *
+ * Returns: caller-owned #GPtrArray of #NMConnections
+ */
+GPtrArray *
+nm_device_get_available_connections (NMDevice *device, const char *specific_object)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ GHashTableIter iter;
+ guint num_available;
+ NMConnection *connection = NULL;
+ GPtrArray *array = NULL;
+
+ num_available = g_hash_table_size (priv->available_connections);
+ if (num_available > 0) {
+ array = g_ptr_array_sized_new (num_available);
+ g_hash_table_iter_init (&iter, priv->available_connections);
+ while (g_hash_table_iter_next (&iter, (gpointer) &connection, NULL)) {
+ /* If a specific object is given, only include connections that are
+ * compatible with it.
+ */
+ if ( !specific_object
+ || NM_DEVICE_GET_CLASS (device)->check_connection_available (device, connection, specific_object))
+ g_ptr_array_add (array, connection);
+ }
+ }
+ return array;
+}
+
+static void
+cp_connection_added (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data)
+{
+ if (_try_add_available_connection (NM_DEVICE (user_data), connection))
+ _signal_available_connections_changed (NM_DEVICE (user_data));
+}
+
+static void
+cp_connection_removed (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data)
+{
+ if (_del_available_connection (NM_DEVICE (user_data), connection))
+ _signal_available_connections_changed (NM_DEVICE (user_data));
+}
+
+static void
+cp_connection_updated (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data)
+{
+ gboolean added, deleted;
+
+ /* FIXME: don't remove it from the hash if it's just going to get re-added */
+ deleted = _del_available_connection (NM_DEVICE (user_data), connection);
+ added = _try_add_available_connection (NM_DEVICE (user_data), connection);
+
+ /* Only signal if the connection was removed OR added, but not both */
+ if (added != deleted)
+ _signal_available_connections_changed (NM_DEVICE (user_data));
+}
+
+gboolean
+nm_device_supports_vlans (NMDevice *device)
+{
+ return nm_platform_link_supports_vlans (nm_device_get_ifindex (device));
+}
+
+/**
+ * nm_device_add_pending_action():
+ * @device: the #NMDevice to add the pending action to
+ * @action: a static string that identifies the action
+ * @assert_not_yet_pending: if %TRUE, assert that the @action is currently not yet pending.
+ * Otherwise, ignore duplicate scheduling of the same action silently.
+ *
+ * Adds a pending action to the device.
+ *
+ * Returns: %TRUE if the action was added (and not already added before). %FALSE
+ * if the same action is already scheduled. In the latter case, the action was not scheduled
+ * a second time.
+ */
+gboolean
+nm_device_add_pending_action (NMDevice *device, const char *action, gboolean assert_not_yet_pending)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ GSList *iter;
+ guint count = 0;
+
+ g_return_val_if_fail (action, FALSE);
+
+ /* Check if the action is already pending. Cannot add duplicate actions */
+ for (iter = priv->pending_actions; iter; iter = iter->next) {
+ if (!strcmp (action, iter->data)) {
+ if (assert_not_yet_pending) {
+ nm_log_warn (LOGD_DEVICE, "(%s): add_pending_action (%d): '%s' already pending",
+ nm_device_get_iface (device),
+ count + g_slist_length (iter),
+ action);
+ g_return_val_if_reached (FALSE);
+ } else {
+ nm_log_dbg (LOGD_DEVICE, "(%s): add_pending_action (%d): '%s' already pending (expected)",
+ nm_device_get_iface (device),
+ count + g_slist_length (iter),
+ action);
+ }
+ return FALSE;
+ }
+ count++;
+ }
+
+ priv->pending_actions = g_slist_append (priv->pending_actions, g_strdup (action));
+ count++;
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): add_pending_action (%d): '%s'",
+ nm_device_get_iface (device),
+ count,
+ action);
+
+ if (count == 1)
+ g_object_notify (G_OBJECT (device), NM_DEVICE_HAS_PENDING_ACTION);
+
+ return TRUE;
+}
+
+/**
+ * nm_device_remove_pending_action():
+ * @device: the #NMDevice to remove the pending action from
+ * @action: a static string that identifies the action
+ * @assert_is_pending: if %TRUE, assert that the @action is pending.
+ * If %FALSE, don't do anything if the current action is not pending and
+ * return %FALSE.
+ *
+ * Removes a pending action previously added by nm_device_add_pending_action().
+ *
+ * Returns: whether the @action was pending and is now removed.
+ */
+gboolean
+nm_device_remove_pending_action (NMDevice *device, const char *action, gboolean assert_is_pending)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ GSList *iter;
+ guint count = 0;
+
+ g_return_val_if_fail (action, FALSE);
+
+ for (iter = priv->pending_actions; iter; iter = iter->next) {
+ if (!strcmp (action, iter->data)) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): remove_pending_action (%d): '%s'",
+ nm_device_get_iface (device),
+ count + g_slist_length (iter->next), /* length excluding 'iter' */
+ action);
+ g_free (iter->data);
+ priv->pending_actions = g_slist_delete_link (priv->pending_actions, iter);
+ if (priv->pending_actions == NULL)
+ g_object_notify (G_OBJECT (device), NM_DEVICE_HAS_PENDING_ACTION);
+ return TRUE;
+ }
+ count++;
+ }
+
+ if (assert_is_pending) {
+ nm_log_warn (LOGD_DEVICE, "(%s): remove_pending_action (%d): '%s' not pending",
+ nm_device_get_iface (device),
+ count,
+ action);
+ g_return_val_if_reached (FALSE);
+ } else {
+ nm_log_dbg (LOGD_DEVICE, "(%s): remove_pending_action (%d): '%s' not pending (expected)",
+ nm_device_get_iface (device),
+ count,
+ action);
+ }
+ return FALSE;
+}
+
+gboolean
+nm_device_has_pending_action (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ return !!priv->pending_actions;
+}
+
+/***********************************************************/
+
+static void
+_cleanup_generic_pre (NMDevice *self, gboolean deconfigure)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ /* Clean up when device was deactivated during call to firewall */
+ if (priv->fw_manager) {
+ NMConnection *connection;
+
+ if (priv->fw_call) {
+ nm_firewall_manager_cancel_call (priv->fw_manager, priv->fw_call);
+ priv->fw_call = NULL;
+ }
+
+ connection = nm_device_get_connection (self);
+ if (deconfigure && connection) {
+ nm_firewall_manager_remove_from_zone (priv->fw_manager,
+ nm_device_get_ip_iface (self),
+ NULL);
+ }
+ }
+
+ ip_check_gw_ping_cleanup (self);
+
+ /* Break the activation chain */
+ activation_source_clear (self, TRUE, AF_INET);
+ activation_source_clear (self, TRUE, AF_INET6);
+
+ /* Clear any queued transitions */
+ nm_device_queued_state_clear (self);
+ nm_device_queued_ip_config_change_clear (self);
+
+ priv->ip4_state = priv->ip6_state = IP_NONE;
+
+ dhcp4_cleanup (self, deconfigure, FALSE);
+ arp_cleanup (self);
+ dhcp6_cleanup (self, deconfigure, FALSE);
+ linklocal6_cleanup (self);
+ addrconf6_cleanup (self);
+ dnsmasq_cleanup (self);
+ aipd_cleanup (self);
+}
+
+static void
+_cleanup_generic_post (NMDevice *self, gboolean deconfigure)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
+
+ /* Clean up IP configs; this does not actually deconfigure the
+ * interface; the caller must flush routes and addresses explicitly.
+ */
+ nm_device_set_ip4_config (self, NULL, TRUE, &ignored);
+ nm_device_set_ip6_config (self, NULL, TRUE, &ignored);
+ g_clear_object (&priv->dev_ip4_config);
+ g_clear_object (&priv->ext_ip4_config);
+ g_clear_object (&priv->vpn4_config);
+ g_clear_object (&priv->ip4_config);
+ g_clear_object (&priv->ac_ip6_config);
+ g_clear_object (&priv->ext_ip6_config);
+ g_clear_object (&priv->vpn6_config);
+ g_clear_object (&priv->ip6_config);
+
+ clear_act_request (self);
+
+ /* Clear legacy IPv4 address property */
+ if (priv->ip4_address) {
+ priv->ip4_address = 0;
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP4_ADDRESS);
+ }
+
+ if (deconfigure) {
+ /* Check if the device was deactivated, and if so, delete_link.
+ * Don't call delete_link synchronously because we are currently
+ * handling a state change -- which is not reentrant. */
+ delete_on_deactivate_check_and_schedule (self, nm_device_get_ip_ifindex (self));
+ }
+
+ /* ip_iface should be cleared after flushing all routes and addreses, since
+ * those are identified by ip_iface, not by iface (which might be a tty
+ * or ATM device).
+ */
+ nm_device_set_ip_iface (self, NULL);
+}
+
+/*
+ * nm_device_cleanup
+ *
+ * Remove a device's routing table entries and IP addresses.
+ *
+ */
+static void
+nm_device_cleanup (NMDevice *self, NMDeviceStateReason reason)
+{
+ NMDevicePrivate *priv;
+ int ifindex;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ if (reason == NM_DEVICE_STATE_REASON_NOW_MANAGED) {
+ nm_log_info (LOGD_DEVICE, "(%s): preparing device",
+ nm_device_get_iface (self));
+ } else {
+ nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason '%s') [%d]",
+ nm_device_get_iface (self), reason_to_string (reason), reason);
+ }
+
+ /* Save whether or not we tried IPv6 for later */
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ _cleanup_generic_pre (self, TRUE);
+
+ /* Turn off kernel IPv6 */
+ nm_device_ipv6_sysctl_set (self, "disable_ipv6", "1");
+ nm_device_ipv6_sysctl_set (self, "accept_ra", "0");
+ nm_device_ipv6_sysctl_set (self, "use_tempaddr", "0");
+
+ /* Call device type-specific deactivation */
+ if (NM_DEVICE_GET_CLASS (self)->deactivate)
+ NM_DEVICE_GET_CLASS (self)->deactivate (self);
+
+ /* master: release slaves */
+ nm_device_master_release_slaves (self);
+
+ /* slave: mark no longer enslaved */
+ g_clear_object (&priv->master);
+ priv->enslaved = FALSE;
+ g_object_notify (G_OBJECT (self), NM_DEVICE_MASTER);
+
+ /* Take out any entries in the routing table and any IP address the device had. */
+ ifindex = nm_device_get_ip_ifindex (self);
+ if (ifindex > 0) {
+ nm_platform_route_flush (ifindex);
+ nm_platform_address_flush (ifindex);
+ }
+
+ _cleanup_generic_post (self, TRUE);
+}
+
+/***********************************************************/
+
+static gboolean
+ip_config_valid (NMDeviceState state)
+{
+ return (state == NM_DEVICE_STATE_UNMANAGED) ||
+ (state >= NM_DEVICE_STATE_IP_CHECK &&
+ state <= NM_DEVICE_STATE_DEACTIVATING);
+}
+
+static void
+notify_ip_properties (NMDevice *device)
+{
+ g_object_notify (G_OBJECT (device), NM_DEVICE_IP_IFACE);
+ g_object_notify (G_OBJECT (device), NM_DEVICE_IP4_CONFIG);
+ g_object_notify (G_OBJECT (device), NM_DEVICE_DHCP4_CONFIG);
+ g_object_notify (G_OBJECT (device), NM_DEVICE_IP6_CONFIG);
+ g_object_notify (G_OBJECT (device), NM_DEVICE_DHCP6_CONFIG);
+}
+
+static void
+_set_state_full (NMDevice *device,
+ NMDeviceState state,
+ NMDeviceStateReason reason,
+ gboolean quitting)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDeviceState old_state;
+ NMActRequest *req;
+ gboolean no_firmware = FALSE;
+ NMConnection *connection;
+
+ /* Track re-entry */
+ g_warn_if_fail (priv->in_state_changed == FALSE);
+ priv->in_state_changed = TRUE;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ /* Do nothing if state isn't changing, but as a special case allow
+ * re-setting UNAVAILABLE if the device is missing firmware so that we
+ * can retry device initialization.
+ */
+ if ( (priv->state == state)
+ && !(state == NM_DEVICE_STATE_UNAVAILABLE && priv->firmware_missing)) {
+ priv->in_state_changed = FALSE;
+ return;
+ }
+
+ old_state = priv->state;
+ priv->state = state;
+ priv->state_reason = reason;
+
+ nm_log_info (LOGD_DEVICE, "(%s): device state change: %s -> %s (reason '%s') [%d %d %d]",
+ nm_device_get_iface (device),
+ state_to_string (old_state),
+ state_to_string (state),
+ reason_to_string (reason),
+ old_state,
+ state,
+ reason);
+
+ /* Clear any queued transitions */
+ nm_device_queued_state_clear (device);
+
+ dispatcher_cleanup (device);
+
+ /* Cache the activation request for the dispatcher */
+ req = priv->act_request ? g_object_ref (priv->act_request) : NULL;
+
+ if (state <= NM_DEVICE_STATE_UNAVAILABLE) {
+ _clear_available_connections (device, TRUE);
+ g_clear_object (&priv->queued_act_request);
+ }
+
+ /* Update the available connections list when a device first becomes available */
+ if ( state >= NM_DEVICE_STATE_DISCONNECTED
+ && old_state < NM_DEVICE_STATE_DISCONNECTED)
+ nm_device_recheck_available_connections (device);
+
+ /* Handle the new state here; but anything that could trigger
+ * another state change should be done below.
+ */
+ switch (state) {
+ case NM_DEVICE_STATE_UNMANAGED:
+ nm_device_set_firmware_missing (device, FALSE);
+ if (old_state > NM_DEVICE_STATE_UNMANAGED) {
+ /* Clean up if the device is now unmanaged but was activated */
+ if (nm_device_get_act_request (device))
+ nm_device_cleanup (device, reason);
+ nm_device_take_down (device, TRUE);
+ restore_ip6_properties (device);
+ }
+ break;
+ case NM_DEVICE_STATE_UNAVAILABLE:
+ if (old_state == NM_DEVICE_STATE_UNMANAGED) {
+ save_ip6_properties (device);
+ if (reason != NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED) {
+ nm_device_ipv6_sysctl_set (device, "disable_ipv6", "1");
+ nm_device_ipv6_sysctl_set (device, "accept_ra_defrtr", "0");
+ nm_device_ipv6_sysctl_set (device, "accept_ra_pinfo", "0");
+ nm_device_ipv6_sysctl_set (device, "accept_ra_rtr_pref", "0");
+ nm_device_ipv6_sysctl_set (device, "use_tempaddr", "0");
+ }
+ }
+
+ if (old_state == NM_DEVICE_STATE_UNMANAGED || priv->firmware_missing) {
+ if (!nm_device_bring_up (device, TRUE, &no_firmware) && no_firmware)
+ nm_log_warn (LOGD_HW, "(%s): firmware may be missing.", nm_device_get_iface (device));
+ nm_device_set_firmware_missing (device, no_firmware ? TRUE : FALSE);
+ }
+ /* Ensure the device gets deactivated in response to stuff like
+ * carrier changes or rfkill. But don't deactivate devices that are
+ * about to assume a connection since that defeats the purpose of
+ * assuming the device's existing connection.
+ *
+ * Note that we "deactivate" the device even when coming from
+ * UNMANAGED, to ensure that it's in a clean state.
+ */
+ if (reason != NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED)
+ nm_device_cleanup (device, reason);
+ break;
+ case NM_DEVICE_STATE_DISCONNECTED:
+ if (old_state > NM_DEVICE_STATE_UNAVAILABLE)
+ nm_device_cleanup (device, reason);
+ break;
+ default:
+ break;
+ }
+
+ /* Reset autoconnect flag when the device is activating or connected. */
+ if ( state >= NM_DEVICE_STATE_PREPARE
+ && state <= NM_DEVICE_STATE_ACTIVATED)
+ priv->autoconnect = TRUE;
+
+ g_object_notify (G_OBJECT (device), NM_DEVICE_STATE);
+ g_object_notify (G_OBJECT (device), NM_DEVICE_STATE_REASON);
+ g_signal_emit_by_name (device, "state-changed", state, old_state, reason);
+
+ /* Post-process the event after internal notification */
+
+ switch (state) {
+ case NM_DEVICE_STATE_UNAVAILABLE:
+ /* If the device can activate now (ie, it's got a carrier, the supplicant
+ * is active, or whatever) schedule a delayed transition to DISCONNECTED
+ * to get things rolling. The device can't transition immediately because
+ * we can't change states again from the state handler for a variety of
+ * reasons.
+ */
+ if (nm_device_is_available (device)) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): device is available, will transition to DISCONNECTED",
+ nm_device_get_iface (device));
+ nm_device_queue_state (device, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_NONE);
+ } else {
+ if (old_state == NM_DEVICE_STATE_UNMANAGED) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): device not yet available for transition to DISCONNECTED",
+ nm_device_get_iface (device));
+ } else if ( old_state > NM_DEVICE_STATE_UNAVAILABLE
+ && nm_device_get_default_unmanaged (device))
+ nm_device_queue_state (device, NM_DEVICE_STATE_UNMANAGED, NM_DEVICE_STATE_REASON_NONE);
+ }
+ break;
+ case NM_DEVICE_STATE_DEACTIVATING:
+ if (quitting) {
+ nm_dispatcher_call_sync (DISPATCHER_ACTION_PRE_DOWN,
+ nm_act_request_get_connection (req),
+ device);
+ } else {
+ priv->dispatcher.post_state = NM_DEVICE_STATE_DISCONNECTED;
+ priv->dispatcher.post_state_reason = reason;
+ if (!nm_dispatcher_call (DISPATCHER_ACTION_PRE_DOWN,
+ nm_act_request_get_connection (req),
+ device,
+ dispatcher_complete_proceed_state,
+ device,
+ &priv->dispatcher.call_id)) {
+ /* Just proceed on errors */
+ dispatcher_complete_proceed_state (0, device);
+ }
+ }
+ break;
+ case NM_DEVICE_STATE_DISCONNECTED:
+ if (priv->queued_act_request) {
+ NMActRequest *queued_req;
+
+ queued_req = priv->queued_act_request;
+ priv->queued_act_request = NULL;
+ _device_activate (device, queued_req);
+ g_object_unref (queued_req);
+ } else if ( old_state > NM_DEVICE_STATE_DISCONNECTED
+ && nm_device_get_default_unmanaged (device))
+ nm_device_queue_state (device, NM_DEVICE_STATE_UNMANAGED, NM_DEVICE_STATE_REASON_NONE);
+ break;
+ case NM_DEVICE_STATE_ACTIVATED:
+ nm_log_info (LOGD_DEVICE, "Activation (%s) successful, device activated.",
+ nm_device_get_iface (device));
+ nm_dispatcher_call (DISPATCHER_ACTION_UP, nm_act_request_get_connection (req), device, NULL, NULL, NULL);
+ break;
+ case NM_DEVICE_STATE_FAILED:
+ connection = nm_device_get_connection (device);
+ nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
+ "Activation (%s) failed for connection '%s'",
+ nm_device_get_iface (device),
+ connection ? nm_connection_get_id (connection) : "<unknown>");
+
+ /* Notify any slaves of the unexpected failure */
+ nm_device_master_release_slaves (device);
+
+ /* If the connection doesn't yet have a timestamp, set it to zero so that
+ * we can distinguish between connections we've tried to activate and have
+ * failed (zero timestamp), connections that succeeded (non-zero timestamp),
+ * and those we haven't tried yet (no timestamp).
+ */
+ if (connection && !nm_settings_connection_get_timestamp (NM_SETTINGS_CONNECTION (connection), NULL)) {
+ nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (connection),
+ (guint64) 0,
+ TRUE);
+ }
+
+ /* Schedule the transition to DISCONNECTED. The device can't transition
+ * immediately because we can't change states again from the state
+ * handler for a variety of reasons.
+ */
+ nm_device_queue_state (device, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_NONE);
+ break;
+ case NM_DEVICE_STATE_IP_CHECK:
+ nm_device_start_ip_check (device);
+
+ /* IP-related properties are only valid when the device has IP configuration;
+ * now that it does, ensure their change notifications are emitted.
+ */
+ notify_ip_properties (device);
+ break;
+ case NM_DEVICE_STATE_SECONDARIES:
+ ip_check_gw_ping_cleanup (device);
+ nm_log_dbg (LOGD_DEVICE, "(%s): device entered SECONDARIES state",
+ nm_device_get_iface (device));
+ break;
+ default:
+ break;
+ }
+
+ if (state > NM_DEVICE_STATE_DISCONNECTED)
+ delete_on_deactivate_unschedule (device);
+
+ if ( (old_state == NM_DEVICE_STATE_ACTIVATED || old_state == NM_DEVICE_STATE_DEACTIVATING)
+ && (state != NM_DEVICE_STATE_DEACTIVATING)) {
+ if (quitting)
+ nm_dispatcher_call_sync (DISPATCHER_ACTION_DOWN, nm_act_request_get_connection (req), device);
+ else
+ nm_dispatcher_call (DISPATCHER_ACTION_DOWN, nm_act_request_get_connection (req), device, NULL, NULL, NULL);
+ }
+
+ /* IP-related properties are only valid when the device has IP configuration.
+ * If it no longer does, ensure their change notifications are emitted.
+ */
+ if (ip_config_valid (old_state) && !ip_config_valid (state))
+ notify_ip_properties (device);
+
+ /* Dispose of the cached activation request */
+ if (req)
+ g_object_unref (req);
+
+ priv->in_state_changed = FALSE;
+}
+
+void
+nm_device_state_changed (NMDevice *device,
+ NMDeviceState state,
+ NMDeviceStateReason reason)
+{
+ _set_state_full (device, state, reason, FALSE);
+}
+
+static gboolean
+queued_set_state (gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDeviceState new_state;
+ NMDeviceStateReason new_reason;
+
+ if (priv->queued_state.id) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): running queued state change to %s (id %d)",
+ nm_device_get_iface (self),
+ state_to_string (priv->queued_state.state),
+ priv->queued_state.id);
+
+ /* Clear queued state struct before triggering state change, since
+ * the state change may queue another state.
+ */
+ priv->queued_state.id = 0;
+ new_state = priv->queued_state.state;
+ new_reason = priv->queued_state.reason;
+ nm_device_queued_state_clear (self);
+
+ nm_device_state_changed (self, new_state, new_reason);
+ nm_device_remove_pending_action (self, queued_state_to_string (new_state), TRUE);
+ } else {
+ g_warn_if_fail (priv->queued_state.state == NM_DEVICE_STATE_UNKNOWN);
+ g_warn_if_fail (priv->queued_state.reason == NM_DEVICE_STATE_REASON_NONE);
+ }
+ return FALSE;
+}
+
+void
+nm_device_queue_state (NMDevice *self,
+ NMDeviceState state,
+ NMDeviceStateReason reason)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->queued_state.id && priv->queued_state.state == state)
+ return;
+
+ /* Add pending action for the new state before clearing the queued states, so
+ * that we don't accidently pop all pending states and reach 'startup complete' */
+ nm_device_add_pending_action (self, queued_state_to_string (state), TRUE);
+
+ /* We should only ever have one delayed state transition at a time */
+ if (priv->queued_state.id) {
+ nm_log_warn (LOGD_DEVICE, "(%s): overwriting previously queued state change to %s (%s)",
+ nm_device_get_iface (self),
+ state_to_string (priv->queued_state.state),
+ reason_to_string (priv->queued_state.reason));
+ nm_device_queued_state_clear (self);
+ }
+
+ priv->queued_state.state = state;
+ priv->queued_state.reason = reason;
+ priv->queued_state.id = g_idle_add (queued_set_state, self);
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): queued state change to %s due to %s (id %d)",
+ nm_device_get_iface (self), state_to_string (state), reason_to_string (reason),
+ priv->queued_state.id);
+}
+
+NMDeviceState
+nm_device_queued_state_peek (NMDevice *self)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), NM_DEVICE_STATE_UNKNOWN);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ return priv->queued_state.id ? priv->queued_state.state : NM_DEVICE_STATE_UNKNOWN;
+}
+
+void
+nm_device_queued_state_clear (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->queued_state.id) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): clearing queued state transition (id %d)",
+ nm_device_get_iface (self), priv->queued_state.id);
+ g_source_remove (priv->queued_state.id);
+ nm_device_remove_pending_action (self, queued_state_to_string (priv->queued_state.state), TRUE);
+ }
+ memset (&priv->queued_state, 0, sizeof (priv->queued_state));
+}
+
+NMDeviceState
+nm_device_get_state (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NM_DEVICE_STATE_UNKNOWN);
+
+ return NM_DEVICE_GET_PRIVATE (device)->state;
+}
+
+/***********************************************************/
+/* NMConfigDevice interface related stuff */
+
+static guint
+nm_device_get_hw_address_length (NMDevice *dev, gboolean *out_permanent)
+{
+ return NM_DEVICE_GET_CLASS (dev)->get_hw_address_length (dev, out_permanent);
+}
+
+const guint8 *
+nm_device_get_hw_address (NMDevice *dev, guint *out_len)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (dev), NULL);
+ priv = NM_DEVICE_GET_PRIVATE (dev);
+
+ if (out_len)
+ *out_len = priv->hw_addr_len;
+
+ if (priv->hw_addr_len == 0)
+ return NULL;
+ else
+ return priv->hw_addr;
+}
+
+gboolean
+nm_device_update_hw_address (NMDevice *dev)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ gboolean changed = FALSE, permanent = FALSE;
+
+ priv->hw_addr_len = nm_device_get_hw_address_length (dev, &permanent);
+
+ /* If the address can't be changed, don't bother trying */
+ if (permanent)
+ return FALSE;
+
+ if (priv->hw_addr_len) {
+ int ifindex = nm_device_get_ip_ifindex (dev);
+ gsize addrlen;
+ const guint8 *binaddr;
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ binaddr = nm_platform_link_get_address (ifindex, &addrlen);
+
+ if (addrlen != priv->hw_addr_len) {
+ nm_log_err (LOGD_HW | LOGD_DEVICE,
+ "(%s): hardware address is wrong length (got %zd, expected %d)",
+ nm_device_get_iface (dev), addrlen, priv->hw_addr_len);
+ } else {
+ changed = !!memcmp (priv->hw_addr, binaddr, addrlen);
+ if (changed) {
+ char *addrstr = nm_utils_hwaddr_ntoa_len (binaddr, priv->hw_addr_len);
+
+ memcpy (priv->hw_addr, binaddr, addrlen);
+ nm_log_dbg (LOGD_HW | LOGD_DEVICE,
+ "(%s): hardware address is %s",
+ nm_device_get_iface (dev), addrstr);
+ g_free (addrstr);
+ g_object_notify (G_OBJECT (dev), NM_DEVICE_HW_ADDRESS);
+ }
+ }
+ } else {
+ int i;
+
+ /* hw_addr_len is now 0; see if hw_addr was already empty */
+ for (i = 0; i < sizeof (priv->hw_addr) && !changed; i++) {
+ if (priv->hw_addr[i])
+ changed = TRUE;
+ }
+ if (changed) {
+ memset (priv->hw_addr, 0, sizeof (priv->hw_addr));
+ nm_log_dbg (LOGD_HW | LOGD_DEVICE,
+ "(%s): previous hardware address is no longer valid",
+ nm_device_get_iface (dev));
+ g_object_notify (G_OBJECT (dev), NM_DEVICE_HW_ADDRESS);
+ }
+ }
+
+ return changed;
+}
+
+gboolean
+nm_device_set_hw_addr (NMDevice *device, const guint8 *addr,
+ const char *detail, guint64 hw_log_domain)
+{
+ const char *iface;
+ char *mac_str = NULL;
+ gboolean success = FALSE;
+ guint len;
+ const guint8 *cur_addr = nm_device_get_hw_address (device, &len);
+
+ g_return_val_if_fail (addr != NULL, FALSE);
+
+ iface = nm_device_get_iface (device);
+
+ /* Do nothing if current MAC is same */
+ if (cur_addr && !memcmp (cur_addr, addr, len)) {
+ nm_log_dbg (LOGD_DEVICE | hw_log_domain, "(%s): no MAC address change needed", iface);
+ return TRUE;
+ }
+
+ mac_str = nm_utils_hwaddr_ntoa_len (addr, len);
+
+ /* Can't change MAC address while device is up */
+ nm_device_take_down (device, FALSE);
+
+ success = nm_platform_link_set_address (nm_device_get_ip_ifindex (device), addr, len);
+ if (success) {
+ /* MAC address succesfully changed; update the current MAC to match */
+ nm_device_update_hw_address (device);
+ cur_addr = nm_device_get_hw_address (device, NULL);
+ if (memcmp (cur_addr, addr, len) == 0) {
+ nm_log_info (LOGD_DEVICE | hw_log_domain, "(%s): %s MAC address to %s",
+ iface, detail, mac_str);
+ } else {
+ nm_log_warn (LOGD_DEVICE | hw_log_domain, "(%s): new MAC address %s "
+ "not successfully set",
+ iface, mac_str);
+ success = FALSE;
+ }
+ } else {
+ nm_log_warn (LOGD_DEVICE | hw_log_domain, "(%s): failed to %s MAC address to %s",
+ iface, detail, mac_str);
+ }
+ nm_device_bring_up (device, TRUE, NULL);
+ g_free (mac_str);
+
+ return success;
+}
+
+/**
+ * nm_device_spec_match_list:
+ * @device: an #NMDevice
+ * @specs: (element-type utf8): a list of device specs
+ *
+ * Checks if @device matches any of the specifications in @specs. The
+ * currently-supported spec types are:
+ *
+ * "mac:00:11:22:33:44:55" - matches a device with the given
+ * hardware address
+ *
+ * "interface-name:foo0" - matches a device with the given
+ * interface name
+ *
+ * "s390-subchannels:00.11.22" - matches a device with the given
+ * z/VM / s390 subchannels.
+ *
+ * "*" - matches any device
+ *
+ * Returns: #TRUE if @device matches one of the specs in @specs
+ */
+gboolean
+nm_device_spec_match_list (NMDevice *device, const GSList *specs)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ if (!specs)
+ return FALSE;
+
+ return NM_DEVICE_GET_CLASS (device)->spec_match_list (device, specs);
+}
+
+static gboolean
+spec_match_list (NMDevice *device, const GSList *specs)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ char *hwaddr_str;
+ gboolean matched = FALSE;
+
+ if (nm_match_spec_string (specs, "*"))
+ return TRUE;
+
+ if (priv->hw_addr_len) {
+ hwaddr_str = nm_utils_hwaddr_ntoa_len (priv->hw_addr, priv->hw_addr_len);
+ matched = nm_match_spec_hwaddr (specs, hwaddr_str);
+ g_free (hwaddr_str);
+ }
+
+ if (!matched)
+ matched = nm_match_spec_interface_name (specs, nm_device_get_iface (device));
+
+ return matched;
+}
+
+static guint
+get_hw_address_length (NMDevice *dev, gboolean *out_permanent)
+{
+ size_t len;
+
+ if (nm_platform_link_get_address (nm_device_get_ip_ifindex (dev), &len))
+ return len;
+ else
+ return 0;
+}
+
+/***********************************************************/
+
+#define DEFAULT_AUTOCONNECT TRUE
+
+static void
+nm_device_init (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ priv->type = NM_DEVICE_TYPE_UNKNOWN;
+ priv->capabilities = NM_DEVICE_CAP_NM_SUPPORTED;
+ priv->state = NM_DEVICE_STATE_UNMANAGED;
+ priv->state_reason = NM_DEVICE_STATE_REASON_NONE;
+ priv->dhcp_timeout = 0;
+ priv->rfkill_type = RFKILL_TYPE_UNKNOWN;
+ priv->autoconnect = DEFAULT_AUTOCONNECT;
+ priv->unmanaged_flags = NM_UNMANAGED_INTERNAL;
+ priv->available_connections = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL);
+ priv->ip6_saved_properties = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
+}
+
+static void
+nm_device_config_device_interface_init (NMConfigDeviceInterface *iface)
+{
+ iface->spec_match_list = (gboolean (*) (NMConfigDevice *, const GSList *)) nm_device_spec_match_list;
+ iface->get_hw_address = (const guint8 * (*) (NMConfigDevice *, guint *)) nm_device_get_hw_address;
+}
+
+/*
+ * Get driver info from SIOCETHTOOL ioctl() for 'iface'
+ * Returns driver and firmware versions to 'driver_version and' 'firmware_version'
+ */
+static gboolean
+device_get_driver_info (const char *iface, char **driver_version, char **firmware_version)
+{
+ struct ethtool_drvinfo drvinfo;
+ struct ifreq req;
+ int fd;
+
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ nm_log_warn (LOGD_HW, "couldn't open control socket.");
+ return FALSE;
+ }
+
+ /* Get driver and firmware version info */
+ memset (&drvinfo, 0, sizeof (drvinfo));
+ memset (&req, 0, sizeof (struct ifreq));
+ strncpy (req.ifr_name, iface, IFNAMSIZ);
+ drvinfo.cmd = ETHTOOL_GDRVINFO;
+ req.ifr_data = &drvinfo;
+
+ errno = 0;
+ if (ioctl (fd, SIOCETHTOOL, &req) < 0) {
+ nm_log_dbg (LOGD_HW, "SIOCETHTOOL ioctl() failed: cmd=ETHTOOL_GDRVINFO, iface=%s, errno=%d",
+ iface, errno);
+ close (fd);
+ return FALSE;
+ }
+ if (driver_version)
+ *driver_version = g_strdup (drvinfo.version);
+ if (firmware_version)
+ *firmware_version = g_strdup (drvinfo.fw_version);
+
+ close (fd);
+ return TRUE;
+}
+
+static GObject*
+constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ NMDevice *dev;
+ NMDevicePrivate *priv;
+ NMPlatform *platform;
+ static guint32 id = 0;
+
+ object = G_OBJECT_CLASS (nm_device_parent_class)->constructor (type,
+ n_construct_params,
+ construct_params);
+ if (!object)
+ return NULL;
+
+ dev = NM_DEVICE (object);
+ priv = NM_DEVICE_GET_PRIVATE (dev);
+
+ if (!priv->iface) {
+ nm_log_err (LOGD_DEVICE, "No device interface provided, ignoring");
+ goto error;
+ }
+
+ if (!priv->udi) {
+ /* Use a placeholder UDI until we get a real one */
+ priv->udi = g_strdup_printf ("/virtual/device/placeholder/%d", id++);
+ }
+
+ if (NM_DEVICE_GET_CLASS (dev)->get_generic_capabilities)
+ priv->capabilities |= NM_DEVICE_GET_CLASS (dev)->get_generic_capabilities (dev);
+
+ priv->fw_manager = nm_firewall_manager_get ();
+
+ device_get_driver_info (priv->iface, &priv->driver_version, &priv->firmware_version);
+
+ /* Watch for external IP config changes */
+ platform = nm_platform_get ();
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, G_CALLBACK (device_ip_changed), dev);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, G_CALLBACK (device_ip_changed), dev);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, G_CALLBACK (device_ip_changed), dev);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, G_CALLBACK (device_ip_changed), dev);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_LINK_CHANGED, G_CALLBACK (link_changed_cb), dev);
+
+ return object;
+
+error:
+ g_object_unref (dev);
+ return NULL;
+}
+
+static void
+constructed (GObject *object)
+{
+ NMDevice *dev = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+
+ nm_device_update_hw_address (dev);
+
+ if (NM_DEVICE_GET_CLASS (dev)->update_permanent_hw_address)
+ NM_DEVICE_GET_CLASS (dev)->update_permanent_hw_address (dev);
+
+ if (NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address)
+ NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address (dev);
+
+ /* Have to call update_initial_hw_address() before calling get_ignore_carrier() */
+ if (device_has_capability (dev, NM_DEVICE_CAP_CARRIER_DETECT)) {
+ priv->ignore_carrier = nm_config_get_ignore_carrier (nm_config_get (), NM_CONFIG_DEVICE (dev));
+
+ check_carrier (dev);
+ nm_log_info (LOGD_HW,
+ "(%s): carrier is %s%s",
+ nm_device_get_iface (NM_DEVICE (dev)),
+ priv->carrier ? "ON" : "OFF",
+ priv->ignore_carrier ? " (but ignored)" : "");
+ } else {
+ /* Fake online link when carrier detection is not available. */
+ priv->carrier = TRUE;
+ }
+
+ if (priv->ifindex > 0) {
+ priv->is_software = nm_platform_link_is_software (priv->ifindex);
+ priv->physical_port_id = nm_platform_link_get_physical_port_id (priv->ifindex);
+ }
+
+ if (priv->ifindex > 0)
+ priv->mtu = nm_platform_link_get_mtu (priv->ifindex);
+
+ priv->con_provider = nm_connection_provider_get ();
+ g_assert (priv->con_provider);
+ g_signal_connect (priv->con_provider,
+ NM_CP_SIGNAL_CONNECTION_ADDED,
+ G_CALLBACK (cp_connection_added),
+ dev);
+
+ g_signal_connect (priv->con_provider,
+ NM_CP_SIGNAL_CONNECTION_REMOVED,
+ G_CALLBACK (cp_connection_removed),
+ dev);
+
+ g_signal_connect (priv->con_provider,
+ NM_CP_SIGNAL_CONNECTION_UPDATED,
+ G_CALLBACK (cp_connection_updated),
+ dev);
+
+ G_OBJECT_CLASS (nm_device_parent_class)->constructed (object);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDevice *self = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMPlatform *platform;
+
+ dispatcher_cleanup (self);
+
+ _cleanup_generic_pre (self, FALSE);
+
+ g_warn_if_fail (priv->slaves == NULL);
+ g_assert (priv->master_ready_id == 0);
+
+ _cleanup_generic_post (self, FALSE);
+
+ g_clear_pointer (&priv->ip6_saved_properties, g_hash_table_unref);
+
+ if (priv->recheck_assume_id) {
+ g_source_remove (priv->recheck_assume_id);
+ priv->recheck_assume_id = 0;
+ }
+
+ link_disconnect_action_cancel (self);
+
+ if (priv->con_provider) {
+ g_signal_handlers_disconnect_by_func (priv->con_provider, cp_connection_added, self);
+ g_signal_handlers_disconnect_by_func (priv->con_provider, cp_connection_removed, self);
+ g_signal_handlers_disconnect_by_func (priv->con_provider, cp_connection_updated, self);
+ priv->con_provider = NULL;
+ }
+
+ g_hash_table_unref (priv->available_connections);
+ priv->available_connections = NULL;
+
+ if (priv->carrier_wait_id) {
+ g_source_remove (priv->carrier_wait_id);
+ priv->carrier_wait_id = 0;
+ }
+
+ g_clear_object (&priv->queued_act_request);
+
+ platform = nm_platform_get ();
+ g_signal_handlers_disconnect_by_func (platform, G_CALLBACK (device_ip_changed), self);
+ g_signal_handlers_disconnect_by_func (platform, G_CALLBACK (link_changed_cb), self);
+
+ g_clear_object (&priv->fw_manager);
+
+ G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDevice *self = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ g_slist_free_full (priv->pending_actions, g_free);
+ g_clear_pointer (&priv->physical_port_id, g_free);
+ g_free (priv->udi);
+ g_free (priv->path);
+ g_free (priv->iface);
+ g_free (priv->ip_iface);
+ g_free (priv->driver);
+ g_free (priv->driver_version);
+ g_free (priv->firmware_version);
+ g_free (priv->type_desc);
+ if (priv->dhcp_anycast_address)
+ g_byte_array_free (priv->dhcp_anycast_address, TRUE);
+
+ G_OBJECT_CLASS (nm_device_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
+ NMPlatformLink *platform_device;
+ const char *hw_addr;
+
+ switch (prop_id) {
+ case PROP_PLATFORM_DEVICE:
+ platform_device = g_value_get_pointer (value);
+ if (platform_device) {
+ g_free (priv->udi);
+ priv->udi = g_strdup (platform_device->udi);
+ g_free (priv->iface);
+ priv->iface = g_strdup (platform_device->name);
+ priv->ifindex = platform_device->ifindex;
+ g_free (priv->driver);
+ priv->driver = g_strdup (platform_device->driver);
+ }
+ break;
+ case PROP_UDI:
+ if (g_value_get_string (value)) {
+ g_free (priv->udi);
+ priv->udi = g_value_dup_string (value);
+ }
+ break;
+ case PROP_IFACE:
+ if (g_value_get_string (value)) {
+ g_free (priv->iface);
+ priv->ifindex = 0;
+ priv->iface = g_value_dup_string (value);
+
+ /* Only look up the ifindex if it appears to be an actual kernel
+ * interface name. eg Bluetooth devices won't have one until we know
+ * the IP interface.
+ */
+ if (priv->iface && !strchr (priv->iface, ':')) {
+ priv->ifindex = nm_platform_link_get_ifindex (priv->iface);
+ if (priv->ifindex <= 0)
+ nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", priv->iface);
+ }
+ }
+ break;
+ case PROP_DRIVER:
+ if (g_value_get_string (value)) {
+ g_free (priv->driver);
+ priv->driver = g_value_dup_string (value);
+ }
+ break;
+ case PROP_DRIVER_VERSION:
+ g_free (priv->driver_version);
+ priv->driver_version = g_strdup (g_value_get_string (value));
+ break;
+ case PROP_FIRMWARE_VERSION:
+ g_free (priv->firmware_version);
+ priv->firmware_version = g_strdup (g_value_get_string (value));
+ break;
+ case PROP_MTU:
+ priv->mtu = g_value_get_uint (value);
+ break;
+ case PROP_IP4_ADDRESS:
+ priv->ip4_address = g_value_get_uint (value);
+ break;
+ case PROP_AUTOCONNECT:
+ priv->autoconnect = g_value_get_boolean (value);
+ break;
+ case PROP_FIRMWARE_MISSING:
+ priv->firmware_missing = g_value_get_boolean (value);
+ break;
+ case PROP_DEVICE_TYPE:
+ g_return_if_fail (priv->type == NM_DEVICE_TYPE_UNKNOWN);
+ priv->type = g_value_get_uint (value);
+ break;
+ case PROP_TYPE_DESC:
+ g_free (priv->type_desc);
+ priv->type_desc = g_value_dup_string (value);
+ break;
+ case PROP_RFKILL_TYPE:
+ priv->rfkill_type = g_value_get_uint (value);
+ break;
+ case PROP_IS_MASTER:
+ priv->is_master = g_value_get_boolean (value);
+ break;
+ case PROP_HW_ADDRESS:
+ priv->hw_addr_len = nm_device_get_hw_address_length (NM_DEVICE (object), NULL);
+
+ hw_addr = g_value_get_string (value);
+ if (!hw_addr)
+ break;
+ if (priv->hw_addr_len == 0) {
+ g_warn_if_fail (*hw_addr == '\0');
+ break;
+ }
+
+ if (!nm_utils_hwaddr_aton_len (hw_addr, priv->hw_addr, priv->hw_addr_len)) {
+ g_warning ("Could not parse hw-address '%s'", hw_addr);
+ memset (priv->hw_addr, 0, sizeof (priv->hw_addr));
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+#define DBUS_TYPE_STATE_REASON_STRUCT (dbus_g_type_get_struct ("GValueArray", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID))
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDevice *self = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *ac_path = NULL;
+ GPtrArray *array;
+ GHashTableIter iter;
+ NMConnection *connection;
+
+ switch (prop_id) {
+ case PROP_UDI:
+ g_value_set_string (value, priv->udi);
+ break;
+ case PROP_IFACE:
+ g_value_set_string (value, priv->iface);
+ break;
+ case PROP_IP_IFACE:
+ if (ip_config_valid (priv->state))
+ g_value_set_string (value, nm_device_get_ip_iface (self));
+ else
+ g_value_set_string (value, NULL);
+ break;
+ case PROP_IFINDEX:
+ g_value_set_int (value, priv->ifindex);
+ break;
+ case PROP_DRIVER:
+ g_value_set_string (value, priv->driver);
+ break;
+ case PROP_DRIVER_VERSION:
+ g_value_set_string (value, priv->driver_version);
+ break;
+ case PROP_FIRMWARE_VERSION:
+ g_value_set_string (value, priv->firmware_version);
+ break;
+ case PROP_CAPABILITIES:
+ g_value_set_uint (value, (priv->capabilities & ~NM_DEVICE_CAP_INTERNAL_MASK));
+ break;
+ case PROP_IP4_ADDRESS:
+ g_value_set_uint (value, priv->ip4_address);
+ break;
+ case PROP_CARRIER:
+ g_value_set_boolean (value, priv->carrier);
+ break;
+ case PROP_MTU:
+ g_value_set_uint (value, priv->mtu);
+ break;
+ case PROP_IP4_CONFIG:
+ if (ip_config_valid (priv->state) && priv->ip4_config)
+ g_value_set_boxed (value, nm_ip4_config_get_dbus_path (priv->ip4_config));
+ else
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_DHCP4_CONFIG:
+ if (ip_config_valid (priv->state) && priv->dhcp4_config)
+ g_value_set_boxed (value, nm_dhcp4_config_get_dbus_path (priv->dhcp4_config));
+ else
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_IP6_CONFIG:
+ if (ip_config_valid (priv->state) && priv->ip6_config)
+ g_value_set_boxed (value, nm_ip6_config_get_dbus_path (priv->ip6_config));
+ else
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_DHCP6_CONFIG:
+ if (ip_config_valid (priv->state) && priv->dhcp6_config)
+ g_value_set_boxed (value, nm_dhcp6_config_get_dbus_path (priv->dhcp6_config));
+ else
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_STATE:
+ g_value_set_uint (value, priv->state);
+ break;
+ case PROP_STATE_REASON:
+ g_value_take_boxed (value, dbus_g_type_specialized_construct (DBUS_TYPE_STATE_REASON_STRUCT));
+ dbus_g_type_struct_set (value, 0, priv->state, 1, priv->state_reason, G_MAXUINT);
+ break;
+ case PROP_ACTIVE_CONNECTION:
+ if (priv->act_request)
+ ac_path = nm_active_connection_get_path (NM_ACTIVE_CONNECTION (priv->act_request));
+ g_value_set_boxed (value, ac_path ? ac_path : "/");
+ break;
+ case PROP_DEVICE_TYPE:
+ g_value_set_uint (value, priv->type);
+ break;
+ case PROP_MANAGED:
+ g_value_set_boolean (value, nm_device_get_managed (self));
+ break;
+ case PROP_AUTOCONNECT:
+ g_value_set_boolean (value, priv->autoconnect);
+ break;
+ case PROP_FIRMWARE_MISSING:
+ g_value_set_boolean (value, priv->firmware_missing);
+ break;
+ case PROP_TYPE_DESC:
+ g_value_set_string (value, priv->type_desc);
+ break;
+ case PROP_RFKILL_TYPE:
+ g_value_set_uint (value, priv->rfkill_type);
+ break;
+ case PROP_AVAILABLE_CONNECTIONS:
+ array = g_ptr_array_sized_new (g_hash_table_size (priv->available_connections));
+ g_hash_table_iter_init (&iter, priv->available_connections);
+ while (g_hash_table_iter_next (&iter, (gpointer) &connection, NULL))
+ g_ptr_array_add (array, g_strdup (nm_connection_get_path (connection)));
+ g_value_take_boxed (value, array);
+ break;
+ case PROP_PHYSICAL_PORT_ID:
+ g_value_set_string (value, priv->physical_port_id);
+ break;
+ case PROP_IS_MASTER:
+ g_value_set_boolean (value, priv->is_master);
+ break;
+ case PROP_MASTER:
+ g_value_set_object (value, priv->master);
+ break;
+ case PROP_HW_ADDRESS:
+ if (priv->hw_addr_len)
+ g_value_take_string (value, nm_utils_hwaddr_ntoa_len (priv->hw_addr, priv->hw_addr_len));
+ else
+ g_value_set_string (value, NULL);
+ break;
+ case PROP_HAS_PENDING_ACTION:
+ g_value_set_boolean (value, nm_device_has_pending_action (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_class_init (NMDeviceClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMDevicePrivate));
+
+ /* Virtual methods */
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->constructor = constructor;
+ object_class->constructed = constructed;
+
+ klass->link_changed = link_changed;
+
+ klass->is_available = is_available;
+ klass->act_stage1_prepare = act_stage1_prepare;
+ klass->act_stage2_config = act_stage2_config;
+ klass->act_stage3_ip4_config_start = act_stage3_ip4_config_start;
+ klass->act_stage3_ip6_config_start = act_stage3_ip6_config_start;
+ klass->act_stage4_ip4_config_timeout = act_stage4_ip4_config_timeout;
+ klass->act_stage4_ip6_config_timeout = act_stage4_ip6_config_timeout;
+ klass->have_any_ready_slaves = have_any_ready_slaves;
+
+ klass->spec_match_list = spec_match_list;
+ klass->can_auto_connect = can_auto_connect;
+ klass->check_connection_compatible = check_connection_compatible;
+ klass->check_connection_available = check_connection_available;
+ klass->is_up = is_up;
+ klass->bring_up = bring_up;
+ klass->take_down = take_down;
+ klass->carrier_changed = carrier_changed;
+ klass->get_hw_address_length = get_hw_address_length;
+
+ /* Properties */
+ g_object_class_install_property
+ (object_class, PROP_PLATFORM_DEVICE,
+ g_param_spec_pointer (NM_DEVICE_PLATFORM_DEVICE,
+ "Platform Device",
+ "NMPlatform device object",
+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_UDI,
+ g_param_spec_string (NM_DEVICE_UDI,
+ "UDI",
+ "Unique Device Identifier",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property
+ (object_class, PROP_IFACE,
+ g_param_spec_string (NM_DEVICE_IFACE,
+ "Interface",
+ "Interface",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_IP_IFACE,
+ g_param_spec_string (NM_DEVICE_IP_IFACE,
+ "IP Interface",
+ "IP Interface",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_DRIVER,
+ g_param_spec_string (NM_DEVICE_DRIVER,
+ "Driver",
+ "Driver",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_DRIVER_VERSION,
+ g_param_spec_string (NM_DEVICE_DRIVER_VERSION,
+ "Driver Version",
+ "Driver Version",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_FIRMWARE_VERSION,
+ g_param_spec_string (NM_DEVICE_FIRMWARE_VERSION,
+ "Firmware Version",
+ "Firmware Version",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_CAPABILITIES,
+ g_param_spec_uint (NM_DEVICE_CAPABILITIES,
+ "Capabilities",
+ "Capabilities",
+ 0, G_MAXUINT32, NM_DEVICE_CAP_NONE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_CARRIER,
+ "Carrier",
+ "Carrier",
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_MTU,
+ g_param_spec_uint (NM_DEVICE_MTU,
+ "MTU",
+ "MTU",
+ 0, G_MAXUINT32, 1500,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_IP4_ADDRESS,
+ g_param_spec_uint (NM_DEVICE_IP4_ADDRESS,
+ "IP4 address",
+ "IP4 address",
+ 0, G_MAXUINT32, 0, /* FIXME */
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property
+ (object_class, PROP_IP4_CONFIG,
+ g_param_spec_boxed (NM_DEVICE_IP4_CONFIG,
+ "IP4 Config",
+ "IP4 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property
+ (object_class, PROP_DHCP4_CONFIG,
+ g_param_spec_boxed (NM_DEVICE_DHCP4_CONFIG,
+ "DHCP4 Config",
+ "DHCP4 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property
+ (object_class, PROP_IP6_CONFIG,
+ g_param_spec_boxed (NM_DEVICE_IP6_CONFIG,
+ "IP6 Config",
+ "IP6 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property
+ (object_class, PROP_DHCP6_CONFIG,
+ g_param_spec_boxed (NM_DEVICE_DHCP6_CONFIG,
+ "DHCP6 Config",
+ "DHCP6 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property
+ (object_class, PROP_STATE,
+ g_param_spec_uint (NM_DEVICE_STATE,
+ "State",
+ "State",
+ 0, G_MAXUINT32, NM_DEVICE_STATE_UNKNOWN,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_STATE_REASON,
+ g_param_spec_boxed (NM_DEVICE_STATE_REASON,
+ "StateReason",
+ "StateReason",
+ DBUS_TYPE_STATE_REASON_STRUCT,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CONNECTION,
+ g_param_spec_boxed (NM_DEVICE_ACTIVE_CONNECTION,
+ "ActiveConnection",
+ "ActiveConnection",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_DEVICE_TYPE,
+ g_param_spec_uint (NM_DEVICE_DEVICE_TYPE,
+ "DeviceType",
+ "DeviceType",
+ 0, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_MANAGED,
+ g_param_spec_boolean (NM_DEVICE_MANAGED,
+ "Managed",
+ "Managed",
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_AUTOCONNECT,
+ g_param_spec_boolean (NM_DEVICE_AUTOCONNECT,
+ "Autoconnect",
+ "Autoconnect",
+ DEFAULT_AUTOCONNECT,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property
+ (object_class, PROP_FIRMWARE_MISSING,
+ g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING,
+ "FirmwareMissing",
+ "Firmware missing",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_TYPE_DESC,
+ g_param_spec_string (NM_DEVICE_TYPE_DESC,
+ "Type Description",
+ "Device type description",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_RFKILL_TYPE,
+ g_param_spec_uint (NM_DEVICE_RFKILL_TYPE,
+ "Rfkill Type",
+ "Type of rfkill switch (if any) supported by this device",
+ RFKILL_TYPE_WLAN,
+ RFKILL_TYPE_MAX,
+ RFKILL_TYPE_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_IFINDEX,
+ g_param_spec_int (NM_DEVICE_IFINDEX,
+ "Ifindex",
+ "Ifindex",
+ 0, G_MAXINT, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_AVAILABLE_CONNECTIONS,
+ g_param_spec_boxed (NM_DEVICE_AVAILABLE_CONNECTIONS,
+ "AvailableConnections",
+ "AvailableConnections",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_PHYSICAL_PORT_ID,
+ g_param_spec_string (NM_DEVICE_PHYSICAL_PORT_ID,
+ "PhysicalPortId",
+ "PhysicalPortId",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_IS_MASTER,
+ g_param_spec_boolean (NM_DEVICE_IS_MASTER,
+ "IsMaster",
+ "IsMaster",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_MASTER,
+ g_param_spec_object (NM_DEVICE_MASTER,
+ "Master",
+ "Master",
+ NM_TYPE_DEVICE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_HW_ADDRESS,
+ "Hardware Address",
+ "Hardware address",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_HAS_PENDING_ACTION,
+ g_param_spec_boolean (NM_DEVICE_HAS_PENDING_ACTION,
+ "Has pending action",
+ "Has pending action",
+ FALSE,
+ G_PARAM_READABLE));
+
+ /* Signals */
+ signals[STATE_CHANGED] =
+ g_signal_new ("state-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMDeviceClass, state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 3,
+ G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+
+ signals[AUTOCONNECT_ALLOWED] =
+ g_signal_new ("autoconnect-allowed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ autoconnect_allowed_accumulator, NULL, NULL,
+ G_TYPE_BOOLEAN, 0);
+
+ signals[AUTH_REQUEST] =
+ g_signal_new (NM_DEVICE_AUTH_REQUEST,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ /* dbus-glib context, connection, permission, allow_interaction, callback, user_data */
+ G_TYPE_NONE, 6, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER, G_TYPE_POINTER);
+
+ signals[IP4_CONFIG_CHANGED] =
+ g_signal_new (NM_DEVICE_IP4_CONFIG_CHANGED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_OBJECT);
+
+ signals[IP6_CONFIG_CHANGED] =
+ g_signal_new (NM_DEVICE_IP6_CONFIG_CHANGED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_OBJECT);
+
+ signals[REMOVED] =
+ g_signal_new (NM_DEVICE_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ signals[RECHECK_AUTO_ACTIVATE] =
+ g_signal_new (NM_DEVICE_RECHECK_AUTO_ACTIVATE,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ signals[RECHECK_ASSUME] =
+ g_signal_new (NM_DEVICE_RECHECK_ASSUME,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_object_info);
+
+ dbus_g_error_domain_register (NM_DEVICE_ERROR, NULL, NM_TYPE_DEVICE_ERROR);
+}
+
diff --git a/src/nm-device.h b/src/devices/nm-device.h
index 87e428f59..f74486e6f 100644
--- a/src/nm-device.h
+++ b/src/devices/nm-device.h
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2012 Red Hat, Inc.
+ * Copyright (C) 2005 - 2013 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -34,8 +34,9 @@
#include "nm-dhcp4-config.h"
#include "nm-dhcp6-config.h"
#include "nm-connection.h"
-#include "nm-rfkill.h"
+#include "nm-rfkill-manager.h"
#include "nm-connection-provider.h"
+#include "nm-platform.h"
/* Properties */
#define NM_DEVICE_UDI "udi"
@@ -45,6 +46,7 @@
#define NM_DEVICE_DRIVER_VERSION "driver-version"
#define NM_DEVICE_FIRMWARE_VERSION "firmware-version"
#define NM_DEVICE_CAPABILITIES "capabilities"
+#define NM_DEVICE_CARRIER "carrier"
#define NM_DEVICE_IP4_ADDRESS "ip4-address"
#define NM_DEVICE_IP4_CONFIG "ip4-config"
#define NM_DEVICE_DHCP4_CONFIG "dhcp4-config"
@@ -57,16 +59,24 @@
#define NM_DEVICE_MANAGED "managed"
#define NM_DEVICE_AUTOCONNECT "autoconnect"
#define NM_DEVICE_FIRMWARE_MISSING "firmware-missing"
+#define NM_DEVICE_AVAILABLE_CONNECTIONS "available-connections"
+#define NM_DEVICE_PHYSICAL_PORT_ID "physical-port-id"
+#define NM_DEVICE_MTU "mtu"
#define NM_DEVICE_TYPE_DESC "type-desc" /* Internal only */
#define NM_DEVICE_RFKILL_TYPE "rfkill-type" /* Internal only */
#define NM_DEVICE_IFINDEX "ifindex" /* Internal only */
#define NM_DEVICE_IS_MASTER "is-master" /* Internal only */
-#define NM_DEVICE_AVAILABLE_CONNECTIONS "available-connections"
+#define NM_DEVICE_MASTER "master" /* Internal only */
+#define NM_DEVICE_HW_ADDRESS "hw-address" /* Internal only */
+#define NM_DEVICE_HAS_PENDING_ACTION "has-pending-action" /* Internal only */
/* Internal signals */
-#define NM_DEVICE_AUTH_REQUEST "auth-request"
-#define NM_DEVICE_IP4_CONFIG_CHANGED "ip4-config-changed"
-#define NM_DEVICE_IP6_CONFIG_CHANGED "ip6-config-changed"
+#define NM_DEVICE_AUTH_REQUEST "auth-request"
+#define NM_DEVICE_IP4_CONFIG_CHANGED "ip4-config-changed"
+#define NM_DEVICE_IP6_CONFIG_CHANGED "ip6-config-changed"
+#define NM_DEVICE_REMOVED "removed"
+#define NM_DEVICE_RECHECK_AUTO_ACTIVATE "recheck-auto-activate"
+#define NM_DEVICE_RECHECK_ASSUME "recheck-assume"
G_BEGIN_DECLS
@@ -93,29 +103,28 @@ struct _NMDevice {
typedef struct {
GObjectClass parent;
+ const char *connection_type;
+
void (*state_changed) (NMDevice *device,
NMDeviceState new_state,
NMDeviceState old_state,
NMDeviceStateReason reason);
- /* Hardware state, ie IFF_UP */
- gboolean (*hw_is_up) (NMDevice *self);
- gboolean (*hw_bring_up) (NMDevice *self, gboolean *no_firmware);
- void (*hw_take_down) (NMDevice *self);
+ void (* link_changed) (NMDevice *self, NMPlatformLink *info);
- /* Additional stuff required to operate the device, like a
- * connection to the supplicant, Bluez, etc
- */
- gboolean (*is_up) (NMDevice *self);
- gboolean (*bring_up) (NMDevice *self);
- void (*take_down) (NMDevice *self);
+ /* Hardware state (IFF_UP) */
+ gboolean (*is_up) (NMDevice *self);
+ gboolean (*bring_up) (NMDevice *self, gboolean *no_firmware);
+ gboolean (*take_down) (NMDevice *self);
+
+ /* Carrier state (IFF_LOWER_UP) */
+ void (*carrier_changed) (NMDevice *, gboolean carrier);
void (* update_hw_address) (NMDevice *self);
void (* update_permanent_hw_address) (NMDevice *self);
void (* update_initial_hw_address) (NMDevice *self);
- const guint8 * (* get_hw_address) (NMDevice *self, guint *out_len);
+ guint (* get_hw_address_length) (NMDevice *self, gboolean *out_permanent);
- guint32 (* get_type_capabilities) (NMDevice *self);
guint32 (* get_generic_capabilities) (NMDevice *self);
gboolean (* is_available) (NMDevice *self);
@@ -124,24 +133,32 @@ typedef struct {
void (* set_enabled) (NMDevice *self, gboolean enabled);
- NMConnection * (* get_best_auto_connection) (NMDevice *self,
- GSList *connections,
- char **specific_object);
+ gboolean (* can_auto_connect) (NMDevice *self,
+ NMConnection *connection,
+ char **specific_object);
/* Checks whether the connection is compatible with the device using
* only the devices type and characteristics. Does not use any live
* network information like WiFi/WiMAX scan lists etc.
*/
- gboolean (* check_connection_compatible) (NMDevice *self,
- NMConnection *connection,
- GError **error);
+ gboolean (* check_connection_compatible) (NMDevice *self, NMConnection *connection);
/* Checks whether the connection is likely available to be activated,
- * including any live network information like scan lists. Returns
- * TRUE if the connection is available; FALSE if not.
+ * including any live network information like scan lists. The connection
+ * is checked against the object defined by @specific_object, if given.
+ * Returns TRUE if the connection is available; FALSE if not.
*/
gboolean (* check_connection_available) (NMDevice *self,
- NMConnection *connection);
+ NMConnection *connection,
+ const char *specific_object);
+
+ /* Same as check_connection_available() but called if the connection
+ * is not present in the activating-connections array during activation,
+ * to give the device a chance to allow/deny the activation. This is a
+ * hack only meant for hidden WiFi networks.
+ */
+ gboolean (* check_connection_available_wifi_hidden) (NMDevice *self,
+ NMConnection *connection);
gboolean (* complete_connection) (NMDevice *self,
NMConnection *connection,
@@ -166,31 +183,30 @@ typedef struct {
/* Called right before IP config is set; use for setting MTU etc */
void (* ip4_config_pre_commit) (NMDevice *self, NMIP4Config *config);
- void (* ip6_config_pre_commit) (NMDevice *self, NMIP6Config *config);
+ void (* ip6_config_pre_commit) (NMDevice *self);
void (* deactivate) (NMDevice *self);
- gboolean (* can_interrupt_activation) (NMDevice *self);
-
gboolean (* spec_match_list) (NMDevice *self, const GSList *specs);
- NMConnection * (* connection_match_config) (NMDevice *self, const GSList *connections);
-
- gboolean (* hwaddr_matches) (NMDevice *self,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr);
+ /* Update the connection with currently configured L2 settings */
+ void (* update_connection) (NMDevice *device, NMConnection *connection);
gboolean (* enslave_slave) (NMDevice *self,
NMDevice *slave,
- NMConnection *connection);
+ NMConnection *connection,
+ gboolean configure);
gboolean (* release_slave) (NMDevice *self,
- NMDevice *slave);
+ NMDevice *slave,
+ gboolean configure);
gboolean (* have_any_ready_slaves) (NMDevice *self,
const GSList *slaves);
+
+ gboolean (* component_added) (NMDevice *self, GObject *component);
+
+ gboolean (* owns_iface) (NMDevice *self, const char *iface);
} NMDeviceClass;
@@ -202,16 +218,16 @@ typedef void (*NMDeviceAuthRequestFunc) (NMDevice *device,
GType nm_device_get_type (void);
const char * nm_device_get_path (NMDevice *dev);
-void nm_device_set_path (NMDevice *dev, const char *path);
+void nm_device_dbus_export (NMDevice *device);
const char * nm_device_get_udi (NMDevice *dev);
const char * nm_device_get_iface (NMDevice *dev);
int nm_device_get_ifindex (NMDevice *dev);
+gboolean nm_device_is_software (NMDevice *dev);
const char * nm_device_get_ip_iface (NMDevice *dev);
int nm_device_get_ip_ifindex(NMDevice *dev);
const char * nm_device_get_driver (NMDevice *dev);
const char * nm_device_get_driver_version (NMDevice *dev);
-const char * nm_device_get_firmware_version (NMDevice *dev);
const char * nm_device_get_type_desc (NMDevice *dev);
NMDeviceType nm_device_get_device_type (NMDevice *dev);
@@ -223,22 +239,26 @@ NMDHCP4Config * nm_device_get_dhcp4_config (NMDevice *dev);
NMDHCP6Config * nm_device_get_dhcp6_config (NMDevice *dev);
NMIP4Config * nm_device_get_ip4_config (NMDevice *dev);
+void nm_device_set_vpn4_config (NMDevice *dev, NMIP4Config *config);
+
NMIP6Config * nm_device_get_ip6_config (NMDevice *dev);
+void nm_device_set_vpn6_config (NMDevice *dev, NMIP6Config *config);
+
+void nm_device_capture_initial_config (NMDevice *dev);
/* Master */
-gboolean nm_device_master_add_slave (NMDevice *dev, NMDevice *slave);
GSList * nm_device_master_get_slaves (NMDevice *dev);
-gboolean nm_device_is_master (NMDevice *dev);
/* Slave */
-void nm_device_slave_notify_enslaved (NMDevice *dev,
- gboolean enslaved,
- gboolean master_failed);
+NMDevice * nm_device_get_master (NMDevice *dev);
NMActRequest * nm_device_get_act_request (NMDevice *dev);
NMConnection * nm_device_get_connection (NMDevice *dev);
-gboolean nm_device_is_available (NMDevice *dev);
+gboolean nm_device_is_available (NMDevice *dev);
+gboolean nm_device_has_carrier (NMDevice *dev);
+
+NMConnection * nm_device_generate_connection (NMDevice *device);
NMConnection * nm_device_get_best_auto_connection (NMDevice *dev,
GSList *connections,
@@ -250,25 +270,13 @@ gboolean nm_device_complete_connection (NMDevice *device,
const GSList *existing_connection,
GError **error);
-gboolean nm_device_check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error);
-
-gboolean nm_device_can_assume_connections (NMDevice *device);
+gboolean nm_device_check_connection_compatible (NMDevice *device, NMConnection *connection);
-NMConnection * nm_device_connection_match_config (NMDevice *device,
- const GSList *connections);
-
-gboolean nm_device_hwaddr_matches (NMDevice *device,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr);
+gboolean nm_device_can_assume_active_connection (NMDevice *device);
gboolean nm_device_spec_match_list (NMDevice *device, const GSList *specs);
gboolean nm_device_is_activating (NMDevice *dev);
-gboolean nm_device_can_interrupt_activation (NMDevice *self);
gboolean nm_device_autoconnect_allowed (NMDevice *self);
NMDeviceState nm_device_get_state (NMDevice *device);
@@ -279,10 +287,38 @@ void nm_device_set_enabled (NMDevice *device, gboolean enabled);
RfKillType nm_device_get_rfkill_type (NMDevice *device);
+/**
+ * NMUnmanagedFlags:
+ * @NM_UNMANAGED_NONE: placeholder value
+ * @NM_UNMANAGED_DEFAULT: %TRUE when unmanaged by default (ie, Generic devices)
+ * @NM_UNMANAGED_INTERNAL: %TRUE when unmanaged by internal decision (ie,
+ * because NM is sleeping or not managed for some other reason)
+ * @NM_UNMANAGED_USER: %TRUE when unmanaged by user decision (via unmanaged-specs)
+ */
+typedef enum {
+ NM_UNMANAGED_NONE = 0x00,
+ NM_UNMANAGED_DEFAULT = 0x01,
+ NM_UNMANAGED_INTERNAL = 0x02,
+ NM_UNMANAGED_USER = 0x04,
+
+ /* Boundary value */
+ __NM_UNMANAGED_LAST,
+ NM_UNMANAGED_LAST = __NM_UNMANAGED_LAST - 1,
+} NMUnmanagedFlags;
+
gboolean nm_device_get_managed (NMDevice *device);
-void nm_device_set_managed (NMDevice *device,
- gboolean managed,
- NMDeviceStateReason reason);
+gboolean nm_device_get_unmanaged_flag (NMDevice *device, NMUnmanagedFlags flag);
+void nm_device_set_unmanaged (NMDevice *device,
+ NMUnmanagedFlags flag,
+ gboolean unmanaged,
+ NMDeviceStateReason reason);
+void nm_device_set_unmanaged_quitting (NMDevice *device);
+void nm_device_set_initial_unmanaged_flag (NMDevice *device,
+ NMUnmanagedFlags flag,
+ gboolean unmanaged);
+
+gboolean nm_device_get_is_nm_owned (NMDevice *device);
+void nm_device_set_nm_owned (NMDevice *device);
gboolean nm_device_get_autoconnect (NMDevice *device);
@@ -300,12 +336,28 @@ void nm_device_queue_state (NMDevice *self,
gboolean nm_device_get_firmware_missing (NMDevice *self);
-void nm_device_activate (NMDevice *device, NMActRequest *req);
-
-void nm_device_set_connection_provider (NMDevice *device, NMConnectionProvider *provider);
+void nm_device_queue_activation (NMDevice *device, NMActRequest *req);
gboolean nm_device_supports_vlans (NMDevice *device);
+gboolean nm_device_add_pending_action (NMDevice *device, const char *action, gboolean assert_not_yet_pending);
+gboolean nm_device_remove_pending_action (NMDevice *device, const char *action, gboolean assert_is_pending);
+gboolean nm_device_has_pending_action (NMDevice *device);
+
+GPtrArray *nm_device_get_available_connections (NMDevice *device,
+ const char *specific_object);
+
+gboolean nm_device_connection_is_available (NMDevice *device,
+ NMConnection *connection,
+ gboolean allow_device_override);
+
+gboolean nm_device_notify_component_added (NMDevice *device, GObject *component);
+
+gboolean nm_device_owns_iface (NMDevice *device, const char *iface);
+
G_END_DECLS
+/* For testing only */
+extern const char* nm_device_autoipd_helper_path;
+
#endif /* NM_DEVICE_H */
diff --git a/src/devices/wifi/Makefile.am b/src/devices/wifi/Makefile.am
new file mode 100644
index 000000000..5f3ce286b
--- /dev/null
+++ b/src/devices/wifi/Makefile.am
@@ -0,0 +1,78 @@
+include $(GLIB_MAKEFILE)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+SUBDIRS=. tests
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/supplicant-manager \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
+GLIB_GENERATED = nm-wifi-enum-types.h nm-wifi-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_wifi_enum_types_sources = \
+ $(srcdir)/nm-device-wifi.h \
+ $(srcdir)/nm-wifi-ap.h \
+ $(srcdir)/nm-device-olpc-mesh.h
+
+glue_sources = \
+ nm-device-wifi-glue.h \
+ nm-device-olpc-mesh-glue.h
+
+%-glue.h: $(top_srcdir)/introspection/%.xml
+ $(AM_V_GEN) dbus-binding-tool --prefix=$(subst -,_,$(subst -glue.h,,$@)) --mode=glib-server --output=$@ $<
+
+BUILT_SOURCES = $(GLIB_GENERATED) $(glue_sources)
+
+pkglib_LTLIBRARIES = libnm-device-plugin-wifi.la
+
+libnm_device_plugin_wifi_la_SOURCES = \
+ nm-wifi-factory.c \
+ nm-device-wifi.c \
+ nm-device-wifi.h \
+ nm-wifi-ap.c \
+ nm-wifi-ap.h \
+ nm-wifi-ap-utils.c \
+ nm-wifi-ap-utils.h \
+ nm-device-olpc-mesh.c \
+ nm-device-olpc-mesh.h \
+ \
+ $(BUILT_SOURCES)
+
+SYMBOL_VIS_FILE=$(srcdir)/exports.ver
+
+libnm_device_plugin_wifi_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_wifi_la_LIBADD = \
+ $(DBUS_LIBS) \
+ $(GUDEV_LIBS)
+
+CLEANFILES = $(BUILT_SOURCES)
+
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+
+if ENABLE_TESTS
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-wifi.so $(SYMBOL_VIS_FILE)
+
+endif
+
diff --git a/src/supplicant-manager/Makefile.in b/src/devices/wifi/Makefile.in
index 6a46202a7..cbf6826be 100644
--- a/src/supplicant-manager/Makefile.in
+++ b/src/devices/wifi/Makefile.in
@@ -78,11 +78,12 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/supplicant-manager
+subdir = src/devices/wifi
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,22 +101,54 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libsupplicant_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libsupplicant_manager_la_OBJECTS = \
- libsupplicant_manager_la-nm-supplicant-manager.lo \
- libsupplicant_manager_la-nm-supplicant-config.lo \
- libsupplicant_manager_la-nm-supplicant-interface.lo \
- libsupplicant_manager_la-nm-supplicant-settings-verify.lo
-libsupplicant_manager_la_OBJECTS = \
- $(am_libsupplicant_manager_la_OBJECTS)
+libnm_device_plugin_wifi_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am__objects_1 = nm-wifi-enum-types.lo
+am__objects_2 =
+am__objects_3 = $(am__objects_1) $(am__objects_2)
+am_libnm_device_plugin_wifi_la_OBJECTS = nm-wifi-factory.lo \
+ nm-device-wifi.lo nm-wifi-ap.lo nm-wifi-ap-utils.lo \
+ nm-device-olpc-mesh.lo $(am__objects_3)
+libnm_device_plugin_wifi_la_OBJECTS = \
+ $(am_libnm_device_plugin_wifi_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+libnm_device_plugin_wifi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libnm_device_plugin_wifi_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -150,8 +183,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libsupplicant_manager_la_SOURCES)
-DIST_SOURCES = $(libsupplicant_manager_la_SOURCES)
+SOURCES = $(libnm_device_plugin_wifi_la_SOURCES)
+DIST_SOURCES = $(libnm_device_plugin_wifi_la_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -244,12 +277,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -274,7 +310,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -319,12 +354,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -341,6 +380,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -368,11 +409,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -387,6 +433,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -449,6 +496,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -459,39 +507,67 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
-noinst_LTLIBRARIES = libsupplicant-manager.la
-libsupplicant_manager_la_CPPFLAGS = \
+AM_CPPFLAGS = \
-I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
+ -I${top_builddir}/src \
-I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/supplicant-manager \
-I${top_builddir}/include \
-I${top_srcdir}/include \
-I${top_builddir}/libnm-util \
-I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNM_PKGDATADIR=\"$(pkgdatadir)\" \
- -DNM_LOCALSTATEDIR=\"$(localstatedir)\"
-
-libsupplicant_manager_la_SOURCES = \
- nm-supplicant-types.h \
- nm-supplicant-manager.h \
- nm-supplicant-manager.c \
- nm-supplicant-config.h \
- nm-supplicant-config.c \
- nm-supplicant-interface.c \
- nm-supplicant-interface.h \
- nm-supplicant-settings-verify.h \
- nm-supplicant-settings-verify.c
-
-libsupplicant_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
+GLIB_GENERATED = nm-wifi-enum-types.h nm-wifi-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_wifi_enum_types_sources = \
+ $(srcdir)/nm-device-wifi.h \
+ $(srcdir)/nm-wifi-ap.h \
+ $(srcdir)/nm-device-olpc-mesh.h
+
+glue_sources = \
+ nm-device-wifi-glue.h \
+ nm-device-olpc-mesh-glue.h
+
+BUILT_SOURCES = $(GLIB_GENERATED) $(glue_sources)
+pkglib_LTLIBRARIES = libnm-device-plugin-wifi.la
+libnm_device_plugin_wifi_la_SOURCES = \
+ nm-wifi-factory.c \
+ nm-device-wifi.c \
+ nm-device-wifi.h \
+ nm-wifi-ap.c \
+ nm-wifi-ap.h \
+ nm-wifi-ap-utils.c \
+ nm-wifi-ap-utils.h \
+ nm-device-olpc-mesh.c \
+ nm-device-olpc-mesh.h \
+ \
+ $(BUILT_SOURCES)
+
+SYMBOL_VIS_FILE = $(srcdir)/exports.ver
+libnm_device_plugin_wifi_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_wifi_la_LIBADD = \
$(DBUS_LIBS) \
- $(GLIB_LIBS)
+ $(GUDEV_LIBS)
-all: all-recursive
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -504,9 +580,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/supplicant-manager/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/devices/wifi/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/supplicant-manager/Makefile
+ $(AUTOMAKE) --gnu src/devices/wifi/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -526,9 +602,33 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+ }
+
+uninstall-pkglibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+ done
+
+clean-pkglibLTLIBRARIES:
+ -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+ @list='$(pkglib_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
@@ -537,8 +637,8 @@ clean-noinstLTLIBRARIES:
rm -f $${locs}; \
}
-libsupplicant-manager.la: $(libsupplicant_manager_la_OBJECTS) $(libsupplicant_manager_la_DEPENDENCIES) $(EXTRA_libsupplicant_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libsupplicant_manager_la_OBJECTS) $(libsupplicant_manager_la_LIBADD) $(LIBS)
+libnm-device-plugin-wifi.la: $(libnm_device_plugin_wifi_la_OBJECTS) $(libnm_device_plugin_wifi_la_DEPENDENCIES) $(EXTRA_libnm_device_plugin_wifi_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_device_plugin_wifi_la_LINK) -rpath $(pkglibdir) $(libnm_device_plugin_wifi_la_OBJECTS) $(libnm_device_plugin_wifi_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -546,10 +646,12 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsupplicant_manager_la-nm-supplicant-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsupplicant_manager_la-nm-supplicant-interface.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsupplicant_manager_la-nm-supplicant-manager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsupplicant_manager_la-nm-supplicant-settings-verify.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-olpc-mesh.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-wifi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wifi-ap-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wifi-ap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wifi-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wifi-factory.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -572,34 +674,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libsupplicant_manager_la-nm-supplicant-manager.lo: nm-supplicant-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsupplicant_manager_la-nm-supplicant-manager.lo -MD -MP -MF $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-manager.Tpo -c -o libsupplicant_manager_la-nm-supplicant-manager.lo `test -f 'nm-supplicant-manager.c' || echo '$(srcdir)/'`nm-supplicant-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-manager.Tpo $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-supplicant-manager.c' object='libsupplicant_manager_la-nm-supplicant-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsupplicant_manager_la-nm-supplicant-manager.lo `test -f 'nm-supplicant-manager.c' || echo '$(srcdir)/'`nm-supplicant-manager.c
-
-libsupplicant_manager_la-nm-supplicant-config.lo: nm-supplicant-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsupplicant_manager_la-nm-supplicant-config.lo -MD -MP -MF $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-config.Tpo -c -o libsupplicant_manager_la-nm-supplicant-config.lo `test -f 'nm-supplicant-config.c' || echo '$(srcdir)/'`nm-supplicant-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-config.Tpo $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-supplicant-config.c' object='libsupplicant_manager_la-nm-supplicant-config.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsupplicant_manager_la-nm-supplicant-config.lo `test -f 'nm-supplicant-config.c' || echo '$(srcdir)/'`nm-supplicant-config.c
-
-libsupplicant_manager_la-nm-supplicant-interface.lo: nm-supplicant-interface.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsupplicant_manager_la-nm-supplicant-interface.lo -MD -MP -MF $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-interface.Tpo -c -o libsupplicant_manager_la-nm-supplicant-interface.lo `test -f 'nm-supplicant-interface.c' || echo '$(srcdir)/'`nm-supplicant-interface.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-interface.Tpo $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-interface.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-supplicant-interface.c' object='libsupplicant_manager_la-nm-supplicant-interface.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsupplicant_manager_la-nm-supplicant-interface.lo `test -f 'nm-supplicant-interface.c' || echo '$(srcdir)/'`nm-supplicant-interface.c
-
-libsupplicant_manager_la-nm-supplicant-settings-verify.lo: nm-supplicant-settings-verify.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsupplicant_manager_la-nm-supplicant-settings-verify.lo -MD -MP -MF $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-settings-verify.Tpo -c -o libsupplicant_manager_la-nm-supplicant-settings-verify.lo `test -f 'nm-supplicant-settings-verify.c' || echo '$(srcdir)/'`nm-supplicant-settings-verify.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-settings-verify.Tpo $(DEPDIR)/libsupplicant_manager_la-nm-supplicant-settings-verify.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-supplicant-settings-verify.c' object='libsupplicant_manager_la-nm-supplicant-settings-verify.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsupplicant_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsupplicant_manager_la-nm-supplicant-settings-verify.lo `test -f 'nm-supplicant-settings-verify.c' || echo '$(srcdir)/'`nm-supplicant-settings-verify.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -760,12 +834,19 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
-check: check-recursive
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
all-am: Makefile $(LTLIBRARIES)
installdirs: installdirs-recursive
installdirs-am:
-install: install-recursive
+ for dir in "$(DESTDIR)$(pkglibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
@@ -787,6 +868,7 @@ install-strip:
mostlyclean-generic:
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -795,9 +877,10 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-recursive
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
mostlyclean-am
distclean: distclean-recursive
@@ -824,7 +907,7 @@ install-dvi: install-dvi-recursive
install-dvi-am:
-install-exec-am:
+install-exec-am: install-pkglibLTLIBRARIES
install-html: install-html-recursive
@@ -864,25 +947,36 @@ ps: ps-recursive
ps-am:
-uninstall-am:
+uninstall-am: uninstall-pkglibLTLIBRARIES
-.MAKE: $(am__recursive_targets) install-am install-strip
+.MAKE: $(am__recursive_targets) all check check-am install install-am \
+ install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am clean clean-generic clean-libtool \
- clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+ check-am check-local clean clean-generic clean-libtool \
+ clean-pkglibLTLIBRARIES cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- installdirs-am maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
- uninstall-am
+ install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am \
+ uninstall-pkglibLTLIBRARIES
+
+include $(GLIB_MAKEFILE)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+%-glue.h: $(top_srcdir)/introspection/%.xml
+ $(AM_V_GEN) dbus-binding-tool --prefix=$(subst -,_,$(subst -glue.h,,$@)) --mode=glib-server --output=$@ $<
+@ENABLE_TESTS_TRUE@check-local:
+@ENABLE_TESTS_TRUE@ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-wifi.so $(SYMBOL_VIS_FILE)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/devices/wifi/exports.ver b/src/devices/wifi/exports.ver
new file mode 100644
index 000000000..d2c451244
--- /dev/null
+++ b/src/devices/wifi/exports.ver
@@ -0,0 +1,7 @@
+{
+global:
+ nm_device_factory_create;
+ nm_device_factory_get_device_type;
+local:
+ *;
+};
diff --git a/src/devices/wifi/nm-device-olpc-mesh-glue.h b/src/devices/wifi/nm-device-olpc-mesh-glue.h
new file mode 100644
index 000000000..04b5e83f3
--- /dev/null
+++ b/src/devices/wifi/nm-device-olpc-mesh-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_olpc_mesh_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_olpc_mesh_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_olpc_mesh_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_olpc_mesh_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_olpc_mesh_object_info = { 1,
+ dbus_glib_nm_device_olpc_mesh_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.OlpcMesh\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.OlpcMesh\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.OlpcMesh\0Companion\0companion\0read\0org.freedesktop.NetworkManager.Device.OlpcMesh\0ActiveChannel\0active_channel\0read\0\0"
+};
+
diff --git a/src/nm-device-olpc-mesh.c b/src/devices/wifi/nm-device-olpc-mesh.c
index 1417736fb..85214a700 100644
--- a/src/nm-device-olpc-mesh.c
+++ b/src/devices/wifi/nm-device-olpc-mesh.c
@@ -19,7 +19,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2005 - 2011 Red Hat, Inc.
+ * (C) Copyright 2005 - 2014 Red Hat, Inc.
* (C) Copyright 2008 Collabora Ltd.
* (C) Copyright 2009 One Laptop per Child
*/
@@ -48,16 +48,12 @@
#include "nm-logging.h"
#include "NetworkManagerUtils.h"
#include "nm-activation-request.h"
-#include "nm-properties-changed-signal.h"
#include "nm-setting-connection.h"
#include "nm-setting-olpc-mesh.h"
-#include "nm-system.h"
#include "nm-manager.h"
#include "nm-enum-types.h"
-#include "wifi-utils.h"
-#if HAVE_WEXT
-#include "wifi-utils-wext.h"
-#endif
+#include "nm-dbus-manager.h"
+#include "nm-wifi-enum-types.h"
/* This is a bug; but we can't really change API now... */
#include "NetworkManagerVPN.h"
@@ -69,51 +65,20 @@ G_DEFINE_TYPE (NMDeviceOlpcMesh, nm_device_olpc_mesh, NM_TYPE_DEVICE)
#define NM_DEVICE_OLPC_MESH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMeshPrivate))
-
enum {
PROP_0,
- PROP_HW_ADDRESS,
PROP_COMPANION,
PROP_ACTIVE_CHANNEL,
LAST_PROP
};
-enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-#define NM_OLPC_MESH_ERROR (nm_olpc_mesh_error_quark ())
-
-
-struct _NMDeviceOlpcMeshPrivate
-{
- gboolean dispose_has_run;
-
- guint8 hw_addr[ETH_ALEN];
-
- GByteArray * ssid;
-
- WifiData * wifi_data;
-
- gboolean up;
-
- NMDevice * companion;
- gboolean stage1_waiting;
- guint device_added_id;
- guint device_removed_id;
- guint cmp_state_changed_id;
- guint cmp_scanning_id;
- guint cmp_scanning_allowed_id;
- guint cmp_autoconnect_allowed_id;
+struct _NMDeviceOlpcMeshPrivate {
+ NMDevice *companion;
+ gboolean stage1_waiting;
};
-static void state_changed (NMDevice *device, NMDeviceState new_state,
- NMDeviceState old_state, NMDeviceStateReason reason);
+/*******************************************************************/
static GQuark
nm_olpc_mesh_error_quark (void)
@@ -124,134 +89,40 @@ nm_olpc_mesh_error_quark (void)
return quark;
}
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- return NM_DEVICE_CAP_NM_SUPPORTED;
-}
-
-static void
-nm_device_olpc_mesh_init (NMDeviceOlpcMesh * self)
-{
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
-
- priv->dispose_has_run = FALSE;
- priv->companion = NULL;
- priv->stage1_waiting = FALSE;
-
- memset (&priv->hw_addr, 0, sizeof (priv->hw_addr));
-}
-
-static GObject*
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GObjectClass *klass;
- NMDeviceOlpcMesh *self;
- NMDeviceOlpcMeshPrivate *priv;
-
- klass = G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class);
- object = klass->constructor (type, n_construct_params, construct_params);
- if (!object)
- return NULL;
-
- self = NM_DEVICE_OLPC_MESH (object);
- priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
-
- nm_log_dbg (LOGD_HW | LOGD_OLPC_MESH, "(%s): kernel ifindex %d",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)));
-
- /*
- * The kernel driver now uses nl80211, but we force use of WEXT because
- * the cfg80211 interactions are not quite ready to support access to
- * mesh control through nl80211 just yet.
- */
-#if HAVE_WEXT
- priv->wifi_data = wifi_wext_init (nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)),
- FALSE);
-#endif
- if (priv->wifi_data == NULL) {
- nm_log_warn (LOGD_HW | LOGD_OLPC_MESH, "(%s): failed to initialize WiFi driver",
- nm_device_get_iface (NM_DEVICE (self)));
- g_object_unref (object);
- return NULL;
- }
-
- /* shorter timeout for mesh connectivity */
- nm_device_set_dhcp_timeout (NM_DEVICE (self), 20);
- return object;
-}
-
-static gboolean
-is_up (NMDevice *device)
-{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (device);
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
-
- return priv->up;
-}
-
-static gboolean
-bring_up (NMDevice *dev)
-{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (dev);
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
-
- priv->up = TRUE;
- return TRUE;
-}
-
-static void
-device_cleanup (NMDeviceOlpcMesh *self)
-{
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
-
- if (priv->ssid) {
- g_byte_array_free (priv->ssid, TRUE);
- priv->ssid = NULL;
- }
- priv->up = FALSE;
-}
+#define NM_OLPC_MESH_ERROR (nm_olpc_mesh_error_quark ())
-static void
-take_down (NMDevice *dev)
-{
- device_cleanup (NM_DEVICE_OLPC_MESH (dev));
-}
+/*******************************************************************/
static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMSettingConnection *s_con;
NMSettingOlpcMesh *s_mesh;
+ if (!NM_DEVICE_CLASS (nm_device_olpc_mesh_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
- if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_OLPC_MESH_SETTING_NAME)) {
- g_set_error (error,
- NM_OLPC_MESH_ERROR, NM_OLPC_MESH_ERROR_CONNECTION_NOT_MESH,
- "The connection was not a Mesh connection.");
+ if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_OLPC_MESH_SETTING_NAME))
return FALSE;
- }
s_mesh = nm_connection_get_setting_olpc_mesh (connection);
- if (!s_mesh) {
- g_set_error (error,
- NM_OLPC_MESH_ERROR, NM_OLPC_MESH_ERROR_CONNECTION_INVALID,
- "The connection was not a valid Mesh connection.");
+ if (!s_mesh)
return FALSE;
- }
return TRUE;
}
+static gboolean
+can_auto_connect (NMDevice *device,
+ NMConnection *connection,
+ char **specific_object)
+{
+ return FALSE;
+}
+
#define DEFAULT_SSID "olpc-mesh"
static gboolean
@@ -299,47 +170,27 @@ complete_connection (NMDevice *device,
/****************************************************************************/
-static void
-update_hw_address (NMDevice *dev)
-{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (dev);
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
- gsize addrlen;
- gboolean changed = FALSE;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- g_return_if_fail (addrlen == ETH_ALEN);
- if (changed)
- g_object_notify (G_OBJECT (dev), NM_DEVICE_OLPC_MESH_HW_ADDRESS);
- }
-}
-
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (device);
-
- *out_len = sizeof (priv->hw_addr);
- return priv->hw_addr;
-}
-
static NMActStageReturn
act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
{
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (dev);
+ NMActStageReturn ret;
gboolean scanning;
+ ret = NM_DEVICE_CLASS (nm_device_olpc_mesh_parent_class)->act_stage1_prepare (dev, reason);
+ if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
+ return ret;
+
/* disconnect companion device, if it is connected */
if (nm_device_get_act_request (NM_DEVICE (priv->companion))) {
- nm_log_info (LOGD_OLPC_MESH, "(%s): disconnecting companion device %s",
+ nm_log_info (LOGD_OLPC, "(%s): disconnecting companion device %s",
nm_device_get_iface (dev),
nm_device_get_iface (priv->companion));
/* FIXME: VPN stuff here is a bug; but we can't really change API now... */
nm_device_state_changed (NM_DEVICE (priv->companion),
NM_DEVICE_STATE_DISCONNECTED,
NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED);
- nm_log_info (LOGD_OLPC_MESH, "(%s): companion %s disconnected",
+ nm_log_info (LOGD_OLPC, "(%s): companion %s disconnected",
nm_device_get_iface (dev),
nm_device_get_iface (priv->companion));
}
@@ -358,10 +209,10 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
static void
_mesh_set_channel (NMDeviceOlpcMesh *self, guint32 channel)
{
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (self));
- if (wifi_utils_get_mesh_channel (priv->wifi_data) != channel) {
- if (wifi_utils_set_mesh_channel (priv->wifi_data, channel))
+ if (nm_platform_mesh_get_channel (ifindex) != channel) {
+ if (nm_platform_mesh_set_channel (ifindex, channel))
g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL);
}
}
@@ -370,7 +221,6 @@ static NMActStageReturn
act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
{
NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (dev);
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
NMConnection *connection;
NMSettingOlpcMesh *s_mesh;
guint32 channel;
@@ -386,7 +236,8 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
channel = nm_setting_olpc_mesh_get_channel (s_mesh);
if (channel != 0)
_mesh_set_channel (self, channel);
- wifi_utils_set_mesh_ssid (priv->wifi_data, nm_setting_olpc_mesh_get_ssid (s_mesh));
+ nm_platform_mesh_set_ssid (nm_device_get_ifindex (dev),
+ nm_setting_olpc_mesh_get_ssid (s_mesh));
anycast_addr_array = nm_setting_olpc_mesh_get_dhcp_anycast_address (s_mesh);
if (anycast_addr_array)
@@ -396,165 +247,32 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
return NM_ACT_STAGE_RETURN_SUCCESS;
}
-static void
-companion_cleanup (NMDeviceOlpcMesh *self)
+static gboolean
+is_available (NMDevice *dev)
{
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
-
- if (priv->companion == NULL)
- return;
-
- if (priv->cmp_state_changed_id) {
- g_signal_handler_disconnect (priv->companion, priv->cmp_state_changed_id);
- priv->cmp_state_changed_id = 0;
- }
-
- if (priv->cmp_scanning_id) {
- g_signal_handler_disconnect (priv->companion, priv->cmp_scanning_id);
- priv->cmp_scanning_id = 0;
- }
-
- if (priv->cmp_scanning_allowed_id) {
- g_signal_handler_disconnect (priv->companion, priv->cmp_scanning_allowed_id);
- priv->cmp_scanning_allowed_id = 0;
- }
+ NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (dev);
- if (priv->cmp_autoconnect_allowed_id) {
- g_signal_handler_disconnect (priv->companion, priv->cmp_autoconnect_allowed_id);
- priv->cmp_autoconnect_allowed_id = 0;
+ if (!NM_DEVICE_OLPC_MESH_GET_PRIVATE (self)->companion) {
+ nm_log_dbg (LOGD_WIFI, "(%s): not available because companion not found",
+ nm_device_get_iface (dev));
+ return FALSE;
}
- priv->companion = NULL;
- g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_COMPANION);
+ return TRUE;
}
-static void
-dispose (GObject *object)
-{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (object);
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
- NMManager *manager;
-
- if (priv->dispose_has_run) {
- G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object);
- return;
- }
- priv->dispose_has_run = TRUE;
-
- if (priv->wifi_data)
- wifi_utils_deinit (priv->wifi_data);
-
- device_cleanup (self);
- companion_cleanup (self);
-
- manager = nm_manager_get ();
- if (priv->device_added_id)
- g_signal_handler_disconnect (manager, priv->device_added_id);
- if (priv->device_removed_id)
- g_signal_handler_disconnect (manager, priv->device_removed_id);
- g_object_unref (manager);
-
- G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object);
-}
+/*******************************************************************/
static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
+companion_cleanup (NMDeviceOlpcMesh *self)
{
- NMDeviceOlpcMesh *device = NM_DEVICE_OLPC_MESH (object);
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (device);
-
- switch (prop_id) {
- case PROP_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (priv->hw_addr, ARPHRD_ETHER));
- break;
- case PROP_COMPANION:
- if (priv->companion)
- g_value_set_boxed (value, nm_device_get_path (priv->companion));
- else
- g_value_set_boxed (value, "/");
- break;
- case PROP_ACTIVE_CHANNEL:
- g_value_set_uint (value, wifi_utils_get_mesh_channel (priv->wifi_data));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
+ if (priv->companion) {
+ g_signal_handlers_disconnect_by_data (priv->companion, self);
+ g_clear_object (&priv->companion);
}
-}
-
-static void
-nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMDeviceOlpcMeshPrivate));
-
- object_class->constructor = constructor;
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->dispose = dispose;
-
- parent_class->get_type_capabilities = NULL;
- parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->is_up = is_up;
- parent_class->bring_up = bring_up;
- parent_class->take_down = take_down;
- parent_class->update_hw_address = update_hw_address;
- parent_class->get_hw_address = get_hw_address;
- parent_class->check_connection_compatible = check_connection_compatible;
- parent_class->complete_connection = complete_connection;
-
- parent_class->act_stage1_prepare = act_stage1_prepare;
- parent_class->act_stage2_config = act_stage2_config;
-
- parent_class->state_changed = state_changed;
-
- /* Properties */
- g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_OLPC_MESH_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_COMPANION,
- g_param_spec_boxed (NM_DEVICE_OLPC_MESH_COMPANION,
- "Companion device",
- "Companion device object path",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_ACTIVE_CHANNEL,
- g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL,
- "Active channel",
- "Active channel",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
-
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceOlpcMeshClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass), &dbus_glib_nm_device_olpc_mesh_object_info);
-
- dbus_g_error_domain_register (NM_OLPC_MESH_ERROR, NULL,
- NM_TYPE_OLPC_MESH_ERROR);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_COMPANION);
}
static void
@@ -592,7 +310,7 @@ companion_state_changed_cb (NMDeviceWifi *companion,
|| state > NM_DEVICE_STATE_ACTIVATED)
return;
- nm_log_dbg (LOGD_OLPC_MESH, "(%s): disconnecting mesh due to companion connectivity",
+ nm_log_dbg (LOGD_OLPC, "(%s): disconnecting mesh due to companion connectivity",
nm_device_get_iface (NM_DEVICE (self)));
/* FIXME: VPN stuff here is a bug; but we can't really change API now... */
nm_device_state_changed (NM_DEVICE (self),
@@ -622,50 +340,39 @@ companion_autoconnect_allowed_cb (NMDeviceWifi *companion, gpointer user_data)
}
static gboolean
-is_companion (NMDeviceOlpcMesh *self, NMDevice *other)
+check_companion (NMDeviceOlpcMesh *self, NMDevice *other)
{
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
- const guint8 *their_addr;
- guint their_addr_len = 0;
- NMManager *manager;
+ const guint8 *my_addr, *their_addr;
+ guint their_addr_len;
if (!NM_IS_DEVICE_WIFI (other))
return FALSE;
+ my_addr = nm_device_get_hw_address (NM_DEVICE (self), NULL);
their_addr = nm_device_get_hw_address (other, &their_addr_len);
if ( (their_addr_len != ETH_ALEN)
- || (memcmp (priv->hw_addr, their_addr, ETH_ALEN) != 0))
+ || (memcmp (my_addr, their_addr, ETH_ALEN) != 0))
return FALSE;
- priv->companion = other;
+ g_assert (priv->companion == NULL);
+ priv->companion = g_object_ref (other);
- /* When we've found the companion, stop listening for other devices */
- manager = nm_manager_get ();
- if (priv->device_added_id) {
- g_signal_handler_disconnect (manager, priv->device_added_id);
- priv->device_added_id = 0;
- }
- g_object_unref (manager);
-
- nm_device_state_changed (NM_DEVICE (self),
- NM_DEVICE_STATE_DISCONNECTED,
- NM_DEVICE_STATE_REASON_NONE);
-
- nm_log_info (LOGD_OLPC_MESH, "(%s): found companion WiFi device %s",
+ nm_log_info (LOGD_OLPC, "(%s): found companion WiFi device %s",
nm_device_get_iface (NM_DEVICE (self)),
nm_device_get_iface (other));
- priv->cmp_state_changed_id = g_signal_connect (G_OBJECT (other), "state-changed",
- G_CALLBACK (companion_state_changed_cb), self);
+ g_signal_connect (G_OBJECT (other), "state-changed",
+ G_CALLBACK (companion_state_changed_cb), self);
- priv->cmp_scanning_id = g_signal_connect (G_OBJECT (other), "notify::scanning",
- G_CALLBACK (companion_notify_cb), self);
+ g_signal_connect (G_OBJECT (other), "notify::scanning",
+ G_CALLBACK (companion_notify_cb), self);
- priv->cmp_scanning_allowed_id = g_signal_connect (G_OBJECT (other), "scanning-allowed",
- G_CALLBACK (companion_scan_allowed_cb), self);
+ g_signal_connect (G_OBJECT (other), "scanning-allowed",
+ G_CALLBACK (companion_scan_allowed_cb), self);
- priv->cmp_autoconnect_allowed_id = g_signal_connect (G_OBJECT (other), "autoconnect-allowed",
- G_CALLBACK (companion_autoconnect_allowed_cb), self);
+ g_signal_connect (G_OBJECT (other), "autoconnect-allowed",
+ G_CALLBACK (companion_autoconnect_allowed_cb), self);
g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_COMPANION);
@@ -676,8 +383,14 @@ static void
device_added_cb (NMManager *manager, NMDevice *other, gpointer user_data)
{
NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (user_data);
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
- is_companion (self, other);
+ if (!priv->companion && check_companion (self, other)) {
+ nm_device_state_changed (NM_DEVICE (self),
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_NONE);
+ nm_device_remove_pending_action (NM_DEVICE (self), "waiting for companion", TRUE);
+ }
}
static void
@@ -689,85 +402,184 @@ device_removed_cb (NMManager *manager, NMDevice *other, gpointer user_data)
companion_cleanup (self);
}
-static gboolean
-check_companion_cb (gpointer user_data)
+static void
+find_companion (NMDeviceOlpcMesh *self)
{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (user_data);
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
- NMManager *manager;
- GSList *list;
+ const GSList *list;
- if (priv->companion != NULL) {
- nm_device_state_changed (NM_DEVICE (user_data),
- NM_DEVICE_STATE_DISCONNECTED,
- NM_DEVICE_STATE_REASON_NONE);
- return FALSE;
+ if (priv->companion)
+ return;
+
+ nm_device_add_pending_action (NM_DEVICE (self), "waiting for companion", TRUE);
+
+ /* Try to find the companion if it's already known to the NMManager */
+ for (list = nm_manager_get_devices (nm_manager_get ()); list ; list = g_slist_next (list)) {
+ if (check_companion (self, NM_DEVICE (list->data))) {
+ nm_device_queue_state (NM_DEVICE (self),
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_NONE);
+ nm_device_remove_pending_action (NM_DEVICE (self), "waiting for companion", TRUE);
+ break;
+ }
}
+}
- if (priv->device_added_id != 0)
- return FALSE;
+static void
+state_changed (NMDevice *device,
+ NMDeviceState new_state,
+ NMDeviceState old_state,
+ NMDeviceStateReason reason)
+{
+ if (new_state == NM_DEVICE_STATE_UNAVAILABLE)
+ find_companion (NM_DEVICE_OLPC_MESH (device));
+}
- manager = nm_manager_get ();
+/*******************************************************************/
- priv->device_added_id = g_signal_connect (manager, "device-added",
- G_CALLBACK (device_added_cb), self);
- if (!priv->device_removed_id) {
- priv->device_removed_id = g_signal_connect (manager, "device-removed",
- G_CALLBACK (device_removed_cb), self);
- }
+NMDevice *
+nm_device_olpc_mesh_new (NMPlatformLink *platform_device)
+{
+ g_return_val_if_fail (platform_device != NULL, NULL);
- /* Try to find the companion if it's already known to the NMManager */
- for (list = nm_manager_get_devices (manager); list ; list = g_slist_next (list)) {
- if (is_companion (self, NM_DEVICE (list->data)))
- break;
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_OLPC_MESH,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
+ NM_DEVICE_TYPE_DESC, "802.11 OLPC Mesh",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_OLPC_MESH,
+ NULL);
+}
+
+static void
+nm_device_olpc_mesh_init (NMDeviceOlpcMesh * self)
+{
+}
+
+static GObject*
+constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GObjectClass *klass;
+ NMDeviceOlpcMesh *self;
+ NMDeviceWifiCapabilities caps;
+
+ klass = G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class);
+ object = klass->constructor (type, n_construct_params, construct_params);
+ if (!object)
+ return NULL;
+
+ self = NM_DEVICE_OLPC_MESH (object);
+
+ nm_log_dbg (LOGD_HW | LOGD_OLPC, "(%s): kernel ifindex %d",
+ nm_device_get_iface (NM_DEVICE (self)),
+ nm_device_get_ifindex (NM_DEVICE (self)));
+
+ if (!nm_platform_wifi_get_capabilities (nm_device_get_ifindex (NM_DEVICE (self)), &caps)) {
+ nm_log_warn (LOGD_HW | LOGD_OLPC, "(%s): failed to initialize WiFi driver",
+ nm_device_get_iface (NM_DEVICE (self)));
+ g_object_unref (object);
+ return NULL;
}
- g_object_unref (manager);
+ g_signal_connect (nm_manager_get (), "device-added", G_CALLBACK (device_added_cb), self);
+ g_signal_connect (nm_manager_get (), "device-removed", G_CALLBACK (device_removed_cb), self);
- return FALSE;
+ /* shorter timeout for mesh connectivity */
+ nm_device_set_dhcp_timeout (NM_DEVICE (self), 20);
+ return object;
}
static void
-state_changed (NMDevice *device, NMDeviceState new_state,
- NMDeviceState old_state, NMDeviceStateReason reason)
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (device);
+ NMDeviceOlpcMesh *device = NM_DEVICE_OLPC_MESH (object);
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (device);
- switch (new_state) {
- case NM_DEVICE_STATE_UNMANAGED:
- break;
- case NM_DEVICE_STATE_UNAVAILABLE:
- /* If transitioning to UNAVAILABLE and the companion device is known then
- * transition to DISCONNECTED otherwise wait for our companion.
- */
- g_idle_add (check_companion_cb, self);
- break;
- case NM_DEVICE_STATE_ACTIVATED:
+ switch (prop_id) {
+ case PROP_COMPANION:
+ if (priv->companion)
+ g_value_set_boxed (value, nm_device_get_path (priv->companion));
+ else
+ g_value_set_boxed (value, "/");
break;
- case NM_DEVICE_STATE_FAILED:
+ case PROP_ACTIVE_CHANNEL:
+ g_value_set_uint (value, nm_platform_mesh_get_channel (nm_device_get_ifindex (NM_DEVICE (device))));
break;
- case NM_DEVICE_STATE_DISCONNECTED:
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
+static void
+dispose (GObject *object)
+{
+ NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (object);
-NMDevice *
-nm_device_olpc_mesh_new (const char *udi,
- const char *iface,
- const char *driver)
+ companion_cleanup (self);
+ g_signal_handlers_disconnect_by_func (nm_manager_get (), G_CALLBACK (device_added_cb), self);
+ g_signal_handlers_disconnect_by_func (nm_manager_get (), G_CALLBACK (device_removed_cb), self);
+
+ G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object);
+}
+
+static void
+nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *klass)
{
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
- g_return_val_if_fail (driver != NULL, NULL);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
- return (NMDevice *) g_object_new (NM_TYPE_DEVICE_OLPC_MESH,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, driver,
- NM_DEVICE_TYPE_DESC, "802.11 OLPC Mesh",
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_OLPC_MESH,
- NULL);
+ g_type_class_add_private (object_class, sizeof (NMDeviceOlpcMeshPrivate));
+
+ object_class->constructor = constructor;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->dispose = dispose;
+
+ parent_class->check_connection_compatible = check_connection_compatible;
+ parent_class->can_auto_connect = can_auto_connect;
+ parent_class->complete_connection = complete_connection;
+
+ parent_class->is_available = is_available;
+ parent_class->act_stage1_prepare = act_stage1_prepare;
+ parent_class->act_stage2_config = act_stage2_config;
+
+ parent_class->state_changed = state_changed;
+
+ /* Properties */
+ g_object_class_install_property
+ (object_class, PROP_COMPANION,
+ g_param_spec_boxed (NM_DEVICE_OLPC_MESH_COMPANION,
+ "Companion device",
+ "Companion device object path",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CHANNEL,
+ g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL,
+ "Active channel",
+ "Active channel",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_olpc_mesh_object_info);
+
+ dbus_g_error_domain_register (NM_OLPC_MESH_ERROR, NULL, NM_TYPE_OLPC_MESH_ERROR);
}
+
diff --git a/src/nm-device-olpc-mesh.h b/src/devices/wifi/nm-device-olpc-mesh.h
index 9d42ecfaf..c25dd8e53 100644
--- a/src/nm-device-olpc-mesh.h
+++ b/src/devices/wifi/nm-device-olpc-mesh.h
@@ -49,7 +49,6 @@ typedef enum
NM_OLPC_MESH_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMOlpcMeshError;
-#define NM_DEVICE_OLPC_MESH_HW_ADDRESS "hw-address"
#define NM_DEVICE_OLPC_MESH_COMPANION "companion"
#define NM_DEVICE_OLPC_MESH_BITRATE "bitrate"
#define NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL "active-channel"
@@ -71,17 +70,12 @@ struct _NMDeviceOlpcMeshClass
{
NMDeviceClass parent;
- /* Signals */
- void (*properties_changed) (NMDeviceOlpcMesh *device,
- GHashTable *properties);
};
GType nm_device_olpc_mesh_get_type (void);
-NMDevice *nm_device_olpc_mesh_new (const char *udi,
- const char *iface,
- const char *driver);
+NMDevice *nm_device_olpc_mesh_new (NMPlatformLink *platform_device);
G_END_DECLS
diff --git a/src/devices/wifi/nm-device-wifi-glue.h b/src/devices/wifi/nm-device-wifi-glue.h
new file mode 100644
index 000000000..3d0f63db7
--- /dev/null
+++ b/src/devices/wifi/nm-device-wifi-glue.h
@@ -0,0 +1,167 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_wifi_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_wifi_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* BOOLEAN:POINTER,POINTER */
+extern void dbus_glib_marshal_nm_device_wifi_BOOLEAN__POINTER_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_device_wifi_BOOLEAN__POINTER_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__POINTER_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_BOOLEAN__POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_pointer (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+/* NONE:BOXED,POINTER */
+extern void dbus_glib_marshal_nm_device_wifi_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_device_wifi_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__BOXED_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__BOXED_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_boxed (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_device_wifi_NONE__BOXED_POINTER dbus_glib_marshal_nm_device_wifi_VOID__BOXED_POINTER
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_wifi_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_wifi_methods[] = {
+ { (GCallback) impl_device_get_access_points, dbus_glib_marshal_nm_device_wifi_BOOLEAN__POINTER_POINTER, 0 },
+ { (GCallback) impl_device_get_all_access_points, dbus_glib_marshal_nm_device_wifi_BOOLEAN__POINTER_POINTER, 89 },
+ { (GCallback) impl_device_request_scan, dbus_glib_marshal_nm_device_wifi_NONE__BOXED_POINTER, 181 },
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_wifi_object_info = { 1,
+ dbus_glib_nm_device_wifi_methods,
+ 3,
+"org.freedesktop.NetworkManager.Device.Wireless\0GetAccessPoints\0S\0access_points\0O\0F\0N\0ao\0\0org.freedesktop.NetworkManager.Device.Wireless\0GetAllAccessPoints\0S\0access_points\0O\0F\0N\0ao\0\0org.freedesktop.NetworkManager.Device.Wireless\0RequestScan\0A\0options\0I\0a{sv}\0\0\0",
+"org.freedesktop.NetworkManager.Device.Wireless\0PropertiesChanged\0org.freedesktop.NetworkManager.Device.Wireless\0AccessPointAdded\0org.freedesktop.NetworkManager.Device.Wireless\0AccessPointRemoved\0\0",
+"org.freedesktop.NetworkManager.Device.Wireless\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Wireless\0PermHwAddress\0perm_hw_address\0read\0org.freedesktop.NetworkManager.Device.Wireless\0Mode\0mode\0read\0org.freedesktop.NetworkManager.Device.Wireless\0Bitrate\0bitrate\0read\0org.freedesktop.NetworkManager.Device.Wireless\0AccessPoints\0access_points\0read\0org.freedesktop.NetworkManager.Device.Wireless\0ActiveAccessPoint\0active_access_point\0read\0org.freedesktop.NetworkManager.Device.Wireless\0WirelessCapabilities\0wireless_capabilities\0read\0\0"
+};
+
diff --git a/src/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c
index 8ca527807..95173cf47 100644
--- a/src/nm-device-wifi.c
+++ b/src/devices/wifi/nm-device-wifi.c
@@ -33,38 +33,43 @@
#include <linux/ethtool.h>
#include <sys/ioctl.h>
#include <netinet/ether.h>
-#include <net/if.h>
#include <errno.h>
#include "nm-glib-compat.h"
+#include "nm-dbus-manager.h"
#include "nm-device.h"
#include "nm-device-wifi.h"
#include "nm-device-private.h"
#include "nm-utils.h"
#include "nm-logging.h"
-#include "nm-marshal.h"
#include "NetworkManagerUtils.h"
#include "nm-activation-request.h"
#include "nm-supplicant-manager.h"
#include "nm-supplicant-interface.h"
#include "nm-supplicant-config.h"
-#include "nm-properties-changed-signal.h"
#include "nm-setting-connection.h"
#include "nm-setting-wireless.h"
#include "nm-setting-wireless-security.h"
#include "nm-setting-8021x.h"
#include "nm-setting-ip4-config.h"
#include "nm-setting-ip6-config.h"
-#include "nm-system.h"
+#include "nm-platform.h"
#include "nm-manager-auth.h"
#include "nm-settings-connection.h"
#include "nm-enum-types.h"
-#include "wifi-utils.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-wifi-enum-types.h"
+#include "nm-connection-provider.h"
+
static gboolean impl_device_get_access_points (NMDeviceWifi *device,
GPtrArray **aps,
GError **err);
+static gboolean impl_device_get_all_access_points (NMDeviceWifi *device,
+ GPtrArray **aps,
+ GError **err);
+
static void impl_device_request_scan (NMDeviceWifi *device,
GHashTable *options,
DBusGMethodInvocation *context);
@@ -86,14 +91,13 @@ G_DEFINE_TYPE (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE)
enum {
PROP_0,
- PROP_HW_ADDRESS,
PROP_PERM_HW_ADDRESS,
PROP_MODE,
PROP_BITRATE,
+ PROP_ACCESS_POINTS,
PROP_ACTIVE_ACCESS_POINT,
PROP_CAPABILITIES,
PROP_SCANNING,
- PROP_IPW_RFKILL_STATE,
LAST_PROP
};
@@ -101,8 +105,6 @@ enum {
enum {
ACCESS_POINT_ADDED,
ACCESS_POINT_REMOVED,
- HIDDEN_AP_FOUND,
- PROPERTIES_CHANGED,
SCANNING_ALLOWED,
LAST_SIGNAL
@@ -110,46 +112,29 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
-#define SUP_SIG_ID_LEN 6
-
-typedef struct Supplicant {
- NMSupplicantManager *mgr;
- NMSupplicantInterface *iface;
-
- guint sig_ids[SUP_SIG_ID_LEN];
- guint iface_error_id;
-
- /* Timeouts and idles */
- guint iface_con_error_cb_id;
- guint con_timeout_id;
-} Supplicant;
-
struct _NMDeviceWifiPrivate {
gboolean disposed;
- guint8 hw_addr[ETH_ALEN]; /* Currently set MAC address */
guint8 perm_hw_addr[ETH_ALEN]; /* Permanent MAC address */
guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */
- /* Legacy rfkill for ipw2x00; will be fixed with 2.6.33 kernel */
- char * ipw_rfkill_path;
- guint ipw_rfkill_id;
- RfKillState ipw_rfkill_state;
-
gint8 invalid_strength_counter;
GSList * ap_list;
NMAccessPoint * current_ap;
guint32 rate;
gboolean enabled; /* rfkilled or not */
-
- time_t scheduled_scan_time;
+
+ gint32 scheduled_scan_time;
guint8 scan_interval; /* seconds */
guint pending_scan_id;
guint scanlist_cull_id;
+ gboolean requested_scan;
+
+ NMSupplicantManager *sup_mgr;
+ NMSupplicantInterface *sup_iface;
+ guint sup_timeout_id; /* supplicant association timeout */
- Supplicant supplicant;
- WifiData * wifi_data;
gboolean ssid_found;
NM80211Mode mode;
@@ -169,8 +154,6 @@ static void cancel_pending_scan (NMDeviceWifi *self);
static void cleanup_association_attempt (NMDeviceWifi * self,
gboolean disconnect);
-static void remove_supplicant_timeouts (NMDeviceWifi *self);
-
static void supplicant_iface_state_cb (NMSupplicantInterface *iface,
guint32 new_state,
guint32 old_state,
@@ -203,7 +186,9 @@ static void schedule_scanlist_cull (NMDeviceWifi *self);
static gboolean request_wireless_scan (gpointer user_data);
-static void update_hw_address (NMDevice *dev);
+static void remove_access_point (NMDeviceWifi *device, NMAccessPoint *ap);
+
+static void remove_supplicant_interface_error_handler (NMDeviceWifi *self);
/*****************************************************************/
@@ -220,72 +205,6 @@ nm_wifi_error_quark (void)
/*****************************************************************/
-/* IPW rfkill handling (until 2.6.33) */
-RfKillState
-nm_device_wifi_get_ipw_rfkill_state (NMDeviceWifi *self)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- char *contents = NULL;
- RfKillState state = RFKILL_UNBLOCKED;
- const char *str_state = NULL;
-
- if ( priv->ipw_rfkill_path
- && g_file_get_contents (priv->ipw_rfkill_path, &contents, NULL, NULL)) {
- contents = g_strstrip (contents);
-
- /* 0 - RF kill not enabled
- * 1 - SW based RF kill active (sysfs)
- * 2 - HW based RF kill active
- * 3 - Both HW and SW baed RF kill active
- */
- switch (contents[0]) {
- case '1':
- state = RFKILL_SOFT_BLOCKED;
- str_state = "soft-blocked";
- break;
- case '2':
- case '3':
- state = RFKILL_HARD_BLOCKED;
- str_state = "hard-blocked";
- break;
- case '0':
- str_state = "unblocked";
- default:
- break;
- }
- g_free (contents);
-
- nm_log_dbg (LOGD_RFKILL, "(%s): ipw rfkill state '%s'",
- nm_device_get_iface (NM_DEVICE (self)),
- str_state ? str_state : "(unknown)");
- }
-
- return state;
-}
-
-static gboolean
-ipw_rfkill_state_work (gpointer user_data)
-{
- NMDeviceWifi *self = NM_DEVICE_WIFI (user_data);
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- RfKillState old_state;
-
- old_state = priv->ipw_rfkill_state;
- priv->ipw_rfkill_state = nm_device_wifi_get_ipw_rfkill_state (self);
- if (priv->ipw_rfkill_state != old_state)
- g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_IPW_RFKILL_STATE);
-
- return TRUE;
-}
-
-/*****************************************************************/
-
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- return NM_DEVICE_CAP_NM_SUPPORTED;
-}
-
static GObject*
constructor (GType type,
guint n_construct_params,
@@ -308,16 +227,13 @@ constructor (GType type,
nm_device_get_iface (NM_DEVICE (self)),
nm_device_get_ifindex (NM_DEVICE (self)));
- priv->wifi_data = wifi_utils_init (nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)),
- TRUE);
- if (priv->wifi_data == NULL) {
+ if (!nm_platform_wifi_get_capabilities (nm_device_get_ifindex (NM_DEVICE (self)),
+ &priv->capabilities)) {
nm_log_warn (LOGD_HW | LOGD_WIFI, "(%s): failed to initialize WiFi driver",
nm_device_get_iface (NM_DEVICE (self)));
g_object_unref (object);
return NULL;
}
- priv->capabilities = wifi_utils_get_caps (priv->wifi_data);
if (priv->capabilities & NM_WIFI_DEVICE_CAP_AP) {
nm_log_info (LOGD_HW | LOGD_WIFI, "(%s): driver supports Access Point (AP) mode",
@@ -325,24 +241,8 @@ constructor (GType type,
}
/* Connect to the supplicant manager */
- priv->supplicant.mgr = nm_supplicant_manager_get ();
- g_assert (priv->supplicant.mgr);
-
- /* The ipw2x00 drivers don't integrate with the kernel rfkill subsystem until
- * 2.6.33. Thus all our nice libgudev magic is useless. So we get to poll.
- *
- * FIXME: when 2.6.33 comes lands, we can do some sysfs parkour to figure out
- * if we need to poll or not by matching /sys/class/net/ethX/device to one
- * of the /sys/class/rfkill/rfkillX/device links. If there's a match, we
- * don't have to poll.
- */
- priv->ipw_rfkill_path = g_strdup_printf ("/sys/class/net/%s/device/rf_kill",
- nm_device_get_iface (NM_DEVICE (self)));
- if (!g_file_test (priv->ipw_rfkill_path, G_FILE_TEST_IS_REGULAR)) {
- g_free (priv->ipw_rfkill_path);
- priv->ipw_rfkill_path = NULL;
- }
- priv->ipw_rfkill_state = nm_device_wifi_get_ipw_rfkill_state (self);
+ priv->sup_mgr = nm_supplicant_manager_get ();
+ g_assert (priv->sup_mgr);
return object;
}
@@ -351,86 +251,55 @@ static gboolean
supplicant_interface_acquire (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- guint id, i = 0;
g_return_val_if_fail (self != NULL, FALSE);
/* interface already acquired? */
- g_return_val_if_fail (priv->supplicant.iface == NULL, TRUE);
+ g_return_val_if_fail (priv->sup_iface == NULL, TRUE);
- priv->supplicant.iface = nm_supplicant_manager_iface_get (priv->supplicant.mgr,
- nm_device_get_iface (NM_DEVICE (self)),
- TRUE);
- if (priv->supplicant.iface == NULL) {
+ priv->sup_iface = nm_supplicant_manager_iface_get (priv->sup_mgr,
+ nm_device_get_iface (NM_DEVICE (self)),
+ TRUE);
+ if (priv->sup_iface == NULL) {
nm_log_err (LOGD_WIFI, "Couldn't initialize supplicant interface for %s.",
nm_device_get_iface (NM_DEVICE (self)));
return FALSE;
}
- memset (priv->supplicant.sig_ids, 0, sizeof (priv->supplicant.sig_ids));
-
- id = g_signal_connect (priv->supplicant.iface,
- NM_SUPPLICANT_INTERFACE_STATE,
- G_CALLBACK (supplicant_iface_state_cb),
- self);
- priv->supplicant.sig_ids[i++] = id;
-
- id = g_signal_connect (priv->supplicant.iface,
- NM_SUPPLICANT_INTERFACE_NEW_BSS,
- G_CALLBACK (supplicant_iface_new_bss_cb),
- self);
- priv->supplicant.sig_ids[i++] = id;
-
- id = g_signal_connect (priv->supplicant.iface,
- NM_SUPPLICANT_INTERFACE_BSS_UPDATED,
- G_CALLBACK (supplicant_iface_bss_updated_cb),
- self);
- priv->supplicant.sig_ids[i++] = id;
-
- id = g_signal_connect (priv->supplicant.iface,
- NM_SUPPLICANT_INTERFACE_BSS_REMOVED,
- G_CALLBACK (supplicant_iface_bss_removed_cb),
- self);
- priv->supplicant.sig_ids[i++] = id;
-
- id = g_signal_connect (priv->supplicant.iface,
- NM_SUPPLICANT_INTERFACE_SCAN_DONE,
- G_CALLBACK (supplicant_iface_scan_done_cb),
- self);
- priv->supplicant.sig_ids[i++] = id;
-
- id = g_signal_connect (priv->supplicant.iface,
- "notify::scanning",
- G_CALLBACK (supplicant_iface_notify_scanning_cb),
- self);
- priv->supplicant.sig_ids[i++] = id;
+ if (nm_supplicant_interface_get_state (priv->sup_iface) < NM_SUPPLICANT_INTERFACE_STATE_READY)
+ nm_device_add_pending_action (NM_DEVICE (self), "waiting for supplicant", TRUE);
+
+ g_signal_connect (priv->sup_iface,
+ NM_SUPPLICANT_INTERFACE_STATE,
+ G_CALLBACK (supplicant_iface_state_cb),
+ self);
+ g_signal_connect (priv->sup_iface,
+ NM_SUPPLICANT_INTERFACE_NEW_BSS,
+ G_CALLBACK (supplicant_iface_new_bss_cb),
+ self);
+ g_signal_connect (priv->sup_iface,
+ NM_SUPPLICANT_INTERFACE_BSS_UPDATED,
+ G_CALLBACK (supplicant_iface_bss_updated_cb),
+ self);
+ g_signal_connect (priv->sup_iface,
+ NM_SUPPLICANT_INTERFACE_BSS_REMOVED,
+ G_CALLBACK (supplicant_iface_bss_removed_cb),
+ self);
+ g_signal_connect (priv->sup_iface,
+ NM_SUPPLICANT_INTERFACE_SCAN_DONE,
+ G_CALLBACK (supplicant_iface_scan_done_cb),
+ self);
+ g_signal_connect (priv->sup_iface,
+ "notify::scanning",
+ G_CALLBACK (supplicant_iface_notify_scanning_cb),
+ self);
return TRUE;
}
static void
-remove_supplicant_interface_error_handler (NMDeviceWifi *self)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- if (!priv->supplicant.iface)
- return;
-
- if (priv->supplicant.iface_error_id > 0) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_error_id);
- priv->supplicant.iface_error_id = 0;
- }
-
- if (priv->supplicant.iface_con_error_cb_id > 0) {
- g_source_remove (priv->supplicant.iface_con_error_cb_id);
- priv->supplicant.iface_con_error_cb_id = 0;
- }
-}
-
-static void
supplicant_interface_release (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv;
- guint i;
g_return_if_fail (self != NULL);
@@ -444,26 +313,22 @@ supplicant_interface_release (NMDeviceWifi *self)
nm_device_get_iface (NM_DEVICE (self)),
priv->scan_interval);
- remove_supplicant_interface_error_handler (self);
-
- /* Clear supplicant interface signal handlers */
- for (i = 0; i < SUP_SIG_ID_LEN; i++) {
- if (priv->supplicant.sig_ids[i] > 0)
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.sig_ids[i]);
- }
- memset (priv->supplicant.sig_ids, 0, sizeof (priv->supplicant.sig_ids));
-
if (priv->scanlist_cull_id) {
g_source_remove (priv->scanlist_cull_id);
priv->scanlist_cull_id = 0;
}
- if (priv->supplicant.iface) {
+ if (priv->sup_iface) {
+ remove_supplicant_interface_error_handler (self);
+
+ /* Clear supplicant interface signal handlers */
+ g_signal_handlers_disconnect_by_data (priv->sup_iface, self);
+
/* Tell the supplicant to disconnect from the current AP */
- nm_supplicant_interface_disconnect (priv->supplicant.iface);
+ nm_supplicant_interface_disconnect (priv->sup_iface);
- nm_supplicant_manager_iface_release (priv->supplicant.mgr, priv->supplicant.iface);
- priv->supplicant.iface = NULL;
+ nm_supplicant_manager_iface_release (priv->sup_mgr, priv->sup_iface);
+ priv->sup_iface = NULL;
}
}
@@ -473,6 +338,9 @@ get_ap_by_path (NMDeviceWifi *self, const char *path)
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
GSList *iter;
+ if (!path)
+ return NULL;
+
for (iter = priv->ap_list; iter; iter = g_slist_next (iter)) {
if (g_strcmp0 (path, nm_ap_get_dbus_path (NM_AP (iter->data))) == 0)
return NM_AP (iter->data);
@@ -486,7 +354,10 @@ get_ap_by_supplicant_path (NMDeviceWifi *self, const char *path)
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
GSList *iter;
- for (iter = priv->ap_list; iter && path; iter = g_slist_next (iter)) {
+ if (!path)
+ return NULL;
+
+ for (iter = priv->ap_list; iter; iter = g_slist_next (iter)) {
if (g_strcmp0 (path, nm_ap_get_supplicant_path (NM_AP (iter->data))) == 0)
return NM_AP (iter->data);
}
@@ -494,12 +365,13 @@ get_ap_by_supplicant_path (NMDeviceWifi *self, const char *path)
}
static NMAccessPoint *
-get_active_ap (NMDeviceWifi *self,
- NMAccessPoint *ignore_ap,
- gboolean match_hidden)
+find_active_ap (NMDeviceWifi *self,
+ NMAccessPoint *ignore_ap,
+ gboolean match_hidden)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
const char *iface = nm_device_get_iface (NM_DEVICE (self));
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (self));
struct ether_addr bssid;
GByteArray *ssid;
GSList *iter;
@@ -510,7 +382,7 @@ get_active_ap (NMDeviceWifi *self,
NM80211Mode devmode;
guint32 devfreq;
- wifi_utils_get_bssid (priv->wifi_data, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, &bssid);
nm_log_dbg (LOGD_WIFI, "(%s): active BSSID: %02x:%02x:%02x:%02x:%02x:%02x",
iface,
bssid.ether_addr_octet[0], bssid.ether_addr_octet[1],
@@ -520,15 +392,15 @@ get_active_ap (NMDeviceWifi *self,
if (!nm_ethernet_address_is_valid (&bssid))
return NULL;
- ssid = wifi_utils_get_ssid (priv->wifi_data);
+ ssid = nm_platform_wifi_get_ssid (ifindex);
nm_log_dbg (LOGD_WIFI, "(%s): active SSID: %s%s%s",
iface,
ssid ? "'" : "",
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
ssid ? "'" : "");
- devmode = wifi_utils_get_mode (priv->wifi_data);
- devfreq = wifi_utils_get_freq (priv->wifi_data);
+ devmode = nm_platform_wifi_get_mode (ifindex);
+ devfreq = nm_platform_wifi_get_frequency (ifindex);
/* When matching hidden APs, do a second pass that ignores the SSID check,
* because NM might not yet know the SSID of the hidden AP in the scan list
@@ -553,7 +425,7 @@ get_active_ap (NMDeviceWifi *self,
ap_bssid->ether_addr_octet[2], ap_bssid->ether_addr_octet[3],
ap_bssid->ether_addr_octet[4], ap_bssid->ether_addr_octet[5]);
- if (ignore_ap && (ap == ignore_ap)) {
+ if (ap == ignore_ap) {
nm_log_dbg (LOGD_WIFI, " ignored");
continue;
}
@@ -622,6 +494,7 @@ get_active_ap (NMDeviceWifi *self,
ap_bssid->ether_addr_octet[4], ap_bssid->ether_addr_octet[5]);
active_ap = match_nofreq;
+ goto done;
}
nm_log_dbg (LOGD_WIFI, " No matching AP found.");
@@ -635,11 +508,10 @@ done:
static void
update_seen_bssids_cache (NMDeviceWifi *self, NMAccessPoint *ap)
{
- NMActRequest *req;
NMConnection *connection;
g_return_if_fail (NM_IS_DEVICE_WIFI (self));
-
+
if (ap == NULL)
return;
@@ -648,9 +520,8 @@ update_seen_bssids_cache (NMDeviceWifi *self, NMAccessPoint *ap)
return;
if (nm_device_get_state (NM_DEVICE (self)) == NM_DEVICE_STATE_ACTIVATED) {
- req = nm_device_get_act_request (NM_DEVICE (self));
- if (req) {
- connection = nm_act_request_get_connection (req);
+ connection = nm_device_get_connection (NM_DEVICE (self));
+ if (connection) {
nm_settings_connection_add_seen_bssid (NM_SETTINGS_CONNECTION (connection),
nm_ap_get_address (ap));
}
@@ -658,10 +529,9 @@ update_seen_bssids_cache (NMDeviceWifi *self, NMAccessPoint *ap)
}
static void
-set_active_ap (NMDeviceWifi *self, NMAccessPoint *new_ap)
+set_current_ap (NMDeviceWifi *self, NMAccessPoint *new_ap, gboolean recheck_available_connections, gboolean force_remove_old_ap)
{
NMDeviceWifiPrivate *priv;
- char *old_path = NULL;
NMAccessPoint *old_ap;
g_return_if_fail (NM_IS_DEVICE_WIFI (self));
@@ -669,10 +539,8 @@ set_active_ap (NMDeviceWifi *self, NMAccessPoint *new_ap)
priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
old_ap = priv->current_ap;
- if (old_ap) {
- old_path = g_strdup (nm_ap_get_dbus_path (old_ap));
- priv->current_ap = NULL;
- }
+ if (old_ap == new_ap)
+ return;
if (new_ap) {
priv->current_ap = g_object_ref (new_ap);
@@ -686,29 +554,31 @@ set_active_ap (NMDeviceWifi *self, NMAccessPoint *new_ap)
/* Update seen BSSIDs cache */
update_seen_bssids_cache (self, priv->current_ap);
- }
+ } else
+ priv->current_ap = NULL;
- /* Unref old AP here to ensure object lives if new_ap == old_ap */
- if (old_ap)
- g_object_unref (old_ap);
+ if (old_ap) {
+ NM80211Mode mode = nm_ap_get_mode (old_ap);
- /* Only notify if it's really changed */
- if ( (!old_path && new_ap)
- || (old_path && !new_ap)
- || (old_path && new_ap && strcmp (old_path, nm_ap_get_dbus_path (new_ap))))
- g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT);
+ if (force_remove_old_ap || mode == NM_802_11_MODE_ADHOC || mode == NM_802_11_MODE_AP || nm_ap_get_fake (old_ap)) {
+ remove_access_point (self, old_ap);
+ if (recheck_available_connections)
+ nm_device_recheck_available_connections (NM_DEVICE (self));
+ }
+ g_object_unref (old_ap);
+ }
- g_free (old_path);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT);
}
-/* Called both as a GSourceFunc and standalone */
-static gboolean
-periodic_update (gpointer user_data)
+static void
+periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (user_data);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (self));
NMAccessPoint *new_ap;
- guint32 new_rate, percent;
+ guint32 new_rate;
+ int percent;
NMDeviceState state;
guint32 supplicant_state;
@@ -717,26 +587,26 @@ periodic_update (gpointer user_data)
*/
state = nm_device_get_state (NM_DEVICE (self));
if (state != NM_DEVICE_STATE_ACTIVATED)
- return TRUE;
+ return;
/* Only update current AP if we're actually talking to something, otherwise
* assume the old one (if any) is still valid until we're told otherwise or
* the connection fails.
*/
- supplicant_state = nm_supplicant_interface_get_state (priv->supplicant.iface);
+ supplicant_state = nm_supplicant_interface_get_state (priv->sup_iface);
if ( supplicant_state < NM_SUPPLICANT_INTERFACE_STATE_AUTHENTICATING
|| supplicant_state > NM_SUPPLICANT_INTERFACE_STATE_COMPLETED
- || nm_supplicant_interface_get_scanning (priv->supplicant.iface))
- return TRUE;
+ || nm_supplicant_interface_get_scanning (priv->sup_iface))
+ return;
/* In AP mode we currently have nothing to do. */
if (priv->mode == NM_802_11_MODE_AP)
- return TRUE;
+ return;
/* In IBSS mode, most newer firmware/drivers do "BSS coalescing" where
* multiple IBSS stations using the same SSID will eventually switch to
* using the same BSSID to avoid network segmentation. When this happens,
- * the card's reported BSSID will change, but the the new BSS may not
+ * the card's reported BSSID will change, but the new BSS may not
* be in the scan list, since scanning isn't done in ad-hoc mode for
* various reasons. So pull the BSSID from the card and update the
* current AP with it, if the current AP is adhoc.
@@ -744,7 +614,7 @@ periodic_update (gpointer user_data)
if (priv->current_ap && (nm_ap_get_mode (priv->current_ap) == NM_802_11_MODE_ADHOC)) {
struct ether_addr bssid = { {0x0, 0x0, 0x0, 0x0, 0x0, 0x0} };
- wifi_utils_get_bssid (priv->wifi_data, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, &bssid);
/* 0x02 means "locally administered" and should be OR-ed into
* the first byte of IBSS BSSIDs.
*/
@@ -753,19 +623,19 @@ periodic_update (gpointer user_data)
nm_ap_set_address (priv->current_ap, &bssid);
}
- new_ap = get_active_ap (self, NULL, FALSE);
+ new_ap = find_active_ap (self, ignore_ap, FALSE);
if (new_ap) {
/* Try to smooth out the strength. Atmel cards, for example, will give no strength
* one second and normal strength the next.
*/
- percent = wifi_utils_get_qual (priv->wifi_data);
+ percent = nm_platform_wifi_get_quality (ifindex);
if (percent >= 0 || ++priv->invalid_strength_counter > 3) {
nm_ap_set_strength (new_ap, (gint8) percent);
priv->invalid_strength_counter = 0;
}
}
- if ((new_ap || priv->current_ap) && (new_ap != priv->current_ap)) {
+ if (new_ap != priv->current_ap) {
const struct ether_addr *new_bssid = NULL;
const GByteArray *new_ssid = NULL;
const struct ether_addr *old_bssid = NULL;
@@ -793,98 +663,59 @@ periodic_update (gpointer user_data)
g_free (old_addr);
g_free (new_addr);
- set_active_ap (self, new_ap);
+ set_current_ap (self, new_ap, TRUE, FALSE);
}
- new_rate = wifi_utils_get_rate (priv->wifi_data);
+ new_rate = nm_platform_wifi_get_rate (ifindex);
if (new_rate != priv->rate) {
priv->rate = new_rate;
g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_BITRATE);
}
-
- return TRUE;
}
static gboolean
-hw_bring_up (NMDevice *device, gboolean *no_firmware)
+periodic_update_cb (gpointer user_data)
{
- if (!NM_DEVICE_WIFI_GET_PRIVATE (device)->enabled)
- return FALSE;
-
- return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->hw_bring_up (device, no_firmware);
+ periodic_update (NM_DEVICE_WIFI (user_data), NULL);
+ return TRUE;
}
static gboolean
-is_up (NMDevice *device)
+bring_up (NMDevice *device, gboolean *no_firmware)
{
- if (!NM_DEVICE_WIFI_GET_PRIVATE (device)->periodic_source_id)
+ if (!NM_DEVICE_WIFI_GET_PRIVATE (device)->enabled)
return FALSE;
- return TRUE;
+ return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->bring_up (device, no_firmware);
}
-static gboolean
-bring_up (NMDevice *dev)
-{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- priv->periodic_source_id = g_timeout_add_seconds (6, periodic_update, self);
- return TRUE;
+static void
+emit_ap_added_removed (NMDeviceWifi *self,
+ guint signum,
+ NMAccessPoint *ap,
+ gboolean recheck_available_connections)
+{
+ g_signal_emit (self, signals[signum], 0, ap);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_ACCESS_POINTS);
+ nm_device_emit_recheck_auto_activate (NM_DEVICE (self));
+ if (recheck_available_connections)
+ nm_device_recheck_available_connections (NM_DEVICE (self));
}
-static gboolean
-_set_hw_addr (NMDeviceWifi *self, const guint8 *addr, const char *detail)
+static void
+remove_access_point (NMDeviceWifi *device,
+ NMAccessPoint *ap)
{
- NMDevice *dev = NM_DEVICE (self);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- const char *iface;
- char *mac_str = NULL;
- gboolean success = FALSE;
-
- g_return_val_if_fail (addr != NULL, FALSE);
-
- iface = nm_device_get_iface (dev);
-
- mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
-
- /* Do nothing if current MAC is same */
- if (!memcmp (&priv->hw_addr, addr, ETH_ALEN)) {
- nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): no MAC address change needed", iface);
- g_free (mac_str);
- return TRUE;
- }
- /* Can't change MAC address while device is up */
- nm_device_hw_take_down (dev, FALSE);
-
- success = nm_system_iface_set_mac (nm_device_get_ip_ifindex (dev), (struct ether_addr *) addr);
- if (success) {
- /* MAC address succesfully changed; update the current MAC to match */
- update_hw_address (dev);
- nm_log_info (LOGD_DEVICE | LOGD_ETHER, "(%s): %s MAC address to %s",
- iface, detail, mac_str);
- } else {
- nm_log_warn (LOGD_DEVICE | LOGD_ETHER, "(%s): failed to %s MAC address to %s",
- iface, detail, mac_str);
- }
- hw_bring_up (dev, NULL);
- g_free (mac_str);
-
- return success;
-}
-
-static void
-remove_access_point (NMDeviceWifi *device, NMAccessPoint *ap)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
+ g_return_if_fail (ap);
+ g_return_if_fail (ap != priv->current_ap);
+ g_return_if_fail (g_slist_find (priv->ap_list, ap));
- g_signal_emit (device, signals[ACCESS_POINT_REMOVED], 0, ap);
priv->ap_list = g_slist_remove (priv->ap_list, ap);
+ emit_ap_added_removed (self, ACCESS_POINT_REMOVED, ap, FALSE);
g_object_unref (ap);
-
- nm_device_recheck_available_connections (NM_DEVICE (device));
}
static void
@@ -892,29 +723,14 @@ remove_all_aps (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- /* Remove outdated APs */
- while (g_slist_length (priv->ap_list)) {
- NMAccessPoint *ap = NM_AP (priv->ap_list->data);
- remove_access_point (self, ap);
- }
- g_slist_free (priv->ap_list);
- priv->ap_list = NULL;
-}
+ if (priv->ap_list) {
+ set_current_ap (self, NULL, FALSE, FALSE);
-static void
-take_down (NMDevice *dev)
-{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ while (priv->ap_list)
+ remove_access_point (self, NM_AP (priv->ap_list->data));
- if (priv->periodic_source_id) {
- g_source_remove (priv->periodic_source_id);
- priv->periodic_source_id = 0;
+ nm_device_recheck_available_connections (NM_DEVICE (self));
}
-
- cleanup_association_attempt (self, TRUE);
- set_active_ap (self, NULL);
- remove_all_aps (self);
}
static void
@@ -922,45 +738,45 @@ deactivate (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- NMAccessPoint *orig_ap = nm_device_wifi_get_activation_ap (self);
- NMActRequest *req;
+ int ifindex = nm_device_get_ifindex (dev);
NMConnection *connection;
NM80211Mode old_mode = priv->mode;
- req = nm_device_get_act_request (dev);
- if (req) {
- connection = nm_act_request_get_connection (req);
+ connection = nm_device_get_connection (dev);
+ if (connection) {
/* Clear wireless secrets tries when deactivating */
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, NULL);
}
+ if (priv->periodic_source_id) {
+ g_source_remove (priv->periodic_source_id);
+ priv->periodic_source_id = 0;
+ }
+
cleanup_association_attempt (self, TRUE);
- set_active_ap (self, NULL);
priv->rate = 0;
/* If the AP is 'fake', i.e. it wasn't actually found from
* a scan but the user tried to connect to it manually (maybe it
* was non-broadcasting or something) get rid of it, because 'fake'
- * APs should only live for as long as we're connected to them. Fixes
- * a bug where user-created Ad-Hoc APs are never removed from the scan
- * list, because scanning is disabled while in Ad-Hoc mode (for stability),
- * and thus the AP culling never happens. (bgo #569241)
- */
- if (orig_ap && nm_ap_get_fake (orig_ap)) {
- remove_access_point (self, orig_ap);
- }
+ * APs should only live for as long as we're connected to them.
+ **/
+ set_current_ap (self, NULL, TRUE, FALSE);
+
+ /* Clear any critical protocol notification in the Wi-Fi stack */
+ nm_platform_wifi_indicate_addressing_running (ifindex, FALSE);
/* Reset MAC address back to initial address */
- _set_hw_addr (self, priv->initial_hw_addr, "reset");
+ nm_device_set_hw_addr (dev, priv->initial_hw_addr, "reset", LOGD_WIFI);
/* Ensure we're in infrastructure mode after deactivation; some devices
* (usually older ones) don't scan well in adhoc mode.
*/
- if (wifi_utils_get_mode (priv->wifi_data) != NM_802_11_MODE_INFRA) {
- nm_device_hw_take_down (NM_DEVICE (self), TRUE);
- wifi_utils_set_mode (priv->wifi_data, NM_802_11_MODE_INFRA);
- nm_device_hw_bring_up (NM_DEVICE (self), TRUE, NULL);
+ if (nm_platform_wifi_get_mode (ifindex) != NM_802_11_MODE_INFRA) {
+ nm_device_take_down (NM_DEVICE (self), TRUE);
+ nm_platform_wifi_set_mode (ifindex, NM_802_11_MODE_INFRA);
+ nm_device_bring_up (NM_DEVICE (self), TRUE, NULL);
}
if (priv->mode != NM_802_11_MODE_INFRA) {
@@ -1006,9 +822,7 @@ is_adhoc_wpa (NMConnection *connection)
}
static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
@@ -1018,32 +832,22 @@ check_connection_compatible (NMDevice *device,
const GSList *mac_blacklist, *mac_blacklist_iter;
const char *mode;
+ if (!NM_DEVICE_CLASS (nm_device_wifi_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
- if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_WIRELESS_SETTING_NAME)) {
- g_set_error (error,
- NM_WIFI_ERROR, NM_WIFI_ERROR_CONNECTION_NOT_WIRELESS,
- "The connection was not a WiFi connection.");
+ if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_WIRELESS_SETTING_NAME))
return FALSE;
- }
s_wireless = nm_connection_get_setting_wireless (connection);
- if (!s_wireless) {
- g_set_error (error,
- NM_WIFI_ERROR, NM_WIFI_ERROR_CONNECTION_INVALID,
- "The connection was not a valid WiFi connection.");
+ if (!s_wireless)
return FALSE;
- }
-
mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN)) {
- g_set_error (error,
- NM_WIFI_ERROR, NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection's MAC address did not match this device.");
+ if (mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN))
return FALSE;
- }
/* Check for MAC address blacklist */
mac_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless);
@@ -1055,55 +859,26 @@ check_connection_compatible (NMDevice *device,
g_warn_if_reached ();
continue;
}
- if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0) {
- g_set_error (error,
- NM_WIFI_ERROR, NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection's MAC address (%s) is blacklisted in %s.",
- (char *) mac_blacklist_iter->data, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+
+ if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0)
return FALSE;
- }
}
- if (is_adhoc_wpa (connection)) {
- g_set_error_literal (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE,
- "WPA Ad-Hoc disabled due to kernel bugs");
+ if (is_adhoc_wpa (connection))
return FALSE;
- }
/* Early exit if supplicant or device doesn't support requested mode */
mode = nm_setting_wireless_get_mode (s_wireless);
if (g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_ADHOC) == 0) {
- if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_ADHOC)) {
- g_set_error_literal (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_ADHOC_MODE_UNSUPPORTED,
- "Ad-Hoc mode is not supported by this device.");
+ if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_ADHOC))
return FALSE;
- }
} else if (g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_AP) == 0) {
- if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_AP)) {
- g_set_error_literal (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_AP_MODE_UNSUPPORTED,
- "Access Point (AP) mode is not supported by this device.");
+ if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_AP))
return FALSE;
- }
- if (priv->supplicant.iface) {
- switch (nm_supplicant_interface_get_ap_support (priv->supplicant.iface)) {
- case AP_SUPPORT_NO:
- g_set_error_literal (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_AP_MODE_UNSUPPORTED,
- "Access Point (AP) mode is not supported by the supplicant.");
+ if (priv->sup_iface) {
+ if (nm_supplicant_interface_get_ap_support (priv->sup_iface) == AP_SUPPORT_NO)
return FALSE;
- case AP_SUPPORT_YES:
- case AP_SUPPORT_UNKNOWN:
- default:
- break;
- }
}
}
@@ -1116,7 +891,10 @@ check_connection_compatible (NMDevice *device,
static gboolean
-check_connection_available (NMDevice *device, NMConnection *connection)
+_internal_check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object,
+ gboolean ignore_ap_list)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
NMSettingWireless *s_wifi;
@@ -1124,16 +902,25 @@ check_connection_available (NMDevice *device, NMConnection *connection)
GSList *ap_iter = NULL;
s_wifi = nm_connection_get_setting_wireless (connection);
+ g_return_val_if_fail (s_wifi, FALSE);
+
+ if (specific_object) {
+ NMAccessPoint *ap;
+
+ ap = get_ap_by_path (NM_DEVICE_WIFI (device), specific_object);
+ return ap ? nm_ap_check_compatible (ap, connection) : FALSE;
+ }
/* Ad-Hoc and AP connections are always available because they may be
* started at any time.
*/
mode = nm_setting_wireless_get_mode (s_wifi);
- if (g_strcmp0 (mode, "adhoc") == 0 || g_strcmp0 (mode, "ap") == 0)
+ if ( g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_ADHOC) == 0
+ || g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_AP) == 0)
return TRUE;
/* Hidden SSIDs obviously don't always appear in the scan list either */
- if (nm_setting_wireless_get_hidden (s_wifi))
+ if (nm_setting_wireless_get_hidden (s_wifi) || ignore_ap_list)
return TRUE;
/* check if its visible */
@@ -1145,6 +932,24 @@ check_connection_available (NMDevice *device, NMConnection *connection)
return FALSE;
}
+static gboolean
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
+{
+ return _internal_check_connection_available (device, connection, specific_object, FALSE);
+}
+
+/* FIXME: remove this function when we require the 'hidden' property to be
+ * set before a hidden connection can be activated.
+ */
+static gboolean
+check_connection_available_wifi_hidden (NMDevice *device,
+ NMConnection *connection)
+{
+ return _internal_check_connection_available (device, connection, NULL, TRUE);
+}
+
/*
* List of manufacturer default SSIDs that are often unchanged by users.
*
@@ -1198,6 +1003,7 @@ complete_connection (NMDevice *device,
NMAccessPoint *ap = NULL;
const GByteArray *ssid = NULL;
GSList *iter;
+ gboolean hidden = FALSE;
s_wifi = nm_connection_get_setting_wireless (connection);
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -1247,6 +1053,8 @@ complete_connection (NMDevice *device,
g_slist_free (settings);
if (!valid)
return FALSE;
+
+ hidden = TRUE;
}
} else {
ap = get_ap_by_path (self, specific_object);
@@ -1324,6 +1132,9 @@ complete_connection (NMDevice *device,
g_free (str_ssid);
g_free (format);
+ if (hidden)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_HIDDEN, TRUE, NULL);
+
setting_mac = nm_setting_wireless_get_mac_address (s_wifi);
if (setting_mac) {
/* Make sure the setting MAC (if any) matches the device's permanent MAC */
@@ -1367,7 +1178,7 @@ is_available (NMDevice *dev)
return FALSE;
}
- sup_iface = priv->supplicant.iface;
+ sup_iface = priv->sup_iface;
if (!sup_iface) {
nm_log_dbg (LOGD_WIFI, "(%s): not available because supplicant not running",
nm_device_get_iface (dev));
@@ -1385,83 +1196,45 @@ is_available (NMDevice *dev)
return TRUE;
}
-static NMConnection *
-get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
+static gboolean
+can_auto_connect (NMDevice *dev,
+ NMConnection *connection,
+ char **specific_object)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- GSList *iter, *ap_iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- NMSettingWireless *s_wireless;
- const GByteArray *mac;
- const GSList *mac_blacklist, *mac_blacklist_iter;
- gboolean mac_blacklist_found = FALSE;
- NMSettingIP4Config *s_ip4;
- const char *method = NULL;
- guint64 timestamp = 0;
+ GSList *ap_iter;
+ const char *method = NULL;
+ guint64 timestamp = 0;
- if (!nm_connection_is_type (connection, NM_SETTING_WIRELESS_SETTING_NAME))
- continue;
-
- /* Don't autoconnect to networks that have been tried at least once
- * but haven't been successful, since these are often accidental choices
- * from the menu and the user may not know the password.
- */
- if (nm_settings_connection_get_timestamp (NM_SETTINGS_CONNECTION (connection), &timestamp)) {
- if (timestamp == 0)
- continue;
- }
-
- s_wireless = nm_connection_get_setting_wireless (connection);
- if (!s_wireless)
- continue;
-
- mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN))
- continue;
-
- /* Check for MAC address blacklist */
- mac_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless);
- for (mac_blacklist_iter = mac_blacklist; mac_blacklist_iter;
- mac_blacklist_iter = g_slist_next (mac_blacklist_iter)) {
- struct ether_addr addr;
-
- if (!ether_aton_r (mac_blacklist_iter->data, &addr)) {
- g_warn_if_reached ();
- continue;
- }
- if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0) {
- mac_blacklist_found = TRUE;
- break;
- }
- }
- /* Found device MAC address in the blacklist - do not use this connection */
- if (mac_blacklist_found)
- continue;
+ if (!NM_DEVICE_CLASS (nm_device_wifi_parent_class)->can_auto_connect (dev, connection, specific_object))
+ return FALSE;
- /* Use the connection if it's a shared connection */
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
+ /* Don't autoconnect to networks that have been tried at least once
+ * but haven't been successful, since these are often accidental choices
+ * from the menu and the user may not know the password.
+ */
+ if (nm_settings_connection_get_timestamp (NM_SETTINGS_CONNECTION (connection), &timestamp)) {
+ if (timestamp == 0)
+ return FALSE;
+ }
- if (s_ip4 && !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
- return connection;
+ /* Use the connection if it's a shared connection */
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
+ return TRUE;
- for (ap_iter = priv->ap_list; ap_iter; ap_iter = g_slist_next (ap_iter)) {
- NMAccessPoint *ap = NM_AP (ap_iter->data);
+ for (ap_iter = priv->ap_list; ap_iter; ap_iter = g_slist_next (ap_iter)) {
+ NMAccessPoint *ap = NM_AP (ap_iter->data);
- if (nm_ap_check_compatible (ap, connection)) {
- /* All good; connection is usable */
- *specific_object = (char *) nm_ap_get_dbus_path (ap);
- return connection;
- }
+ if (nm_ap_check_compatible (ap, connection)) {
+ /* All good; connection is usable */
+ *specific_object = (char *) nm_ap_get_dbus_path (ap);
+ return TRUE;
}
}
- return NULL;
+
+ return FALSE;
}
static void
@@ -1490,9 +1263,8 @@ impl_device_get_access_points (NMDeviceWifi *self,
GSList *elt;
*aps = g_ptr_array_new ();
-
for (elt = priv->ap_list; elt; elt = g_slist_next (elt)) {
- NMAccessPoint * ap = NM_AP (elt->data);
+ NMAccessPoint *ap = NM_AP (elt->data);
if (nm_ap_get_ssid (ap))
g_ptr_array_add (*aps, g_strdup (nm_ap_get_dbus_path (ap)));
@@ -1500,6 +1272,20 @@ impl_device_get_access_points (NMDeviceWifi *self,
return TRUE;
}
+static gboolean
+impl_device_get_all_access_points (NMDeviceWifi *self,
+ GPtrArray **aps,
+ GError **err)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ GSList *elt;
+
+ *aps = g_ptr_array_new ();
+ for (elt = priv->ap_list; elt; elt = g_slist_next (elt))
+ g_ptr_array_add (*aps, g_strdup (nm_ap_get_dbus_path (NM_AP (elt->data))));
+ return TRUE;
+}
+
static void
request_scan_cb (NMDevice *device,
DBusGMethodInvocation *context,
@@ -1507,21 +1293,25 @@ request_scan_cb (NMDevice *device,
gpointer user_data)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (device);
+ GError *local = NULL;
if (error) {
dbus_g_method_return_error (context, error);
- g_clear_error (&error);
- } else if (!check_scanning_allowed (self)) {
- error = g_error_new_literal (NM_WIFI_ERROR,
+ return;
+ }
+
+ if (!check_scanning_allowed (self)) {
+ local = g_error_new_literal (NM_WIFI_ERROR,
NM_WIFI_ERROR_SCAN_NOT_ALLOWED,
"Scanning not allowed at this time");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- } else {
- cancel_pending_scan (self);
- request_wireless_scan (self);
- dbus_g_method_return (context);
+ dbus_g_method_return_error (context, local);
+ g_error_free (local);
+ return;
}
+
+ cancel_pending_scan (self);
+ request_wireless_scan (self);
+ dbus_g_method_return (context);
}
static void
@@ -1531,11 +1321,11 @@ impl_device_request_scan (NMDeviceWifi *self,
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
NMDevice *device = NM_DEVICE (self);
- time_t last_scan;
+ gint32 last_scan;
GError *error;
if ( !priv->enabled
- || !priv->supplicant.iface
+ || !priv->sup_iface
|| nm_device_get_state (device) < NM_DEVICE_STATE_DISCONNECTED
|| nm_device_is_activating (device)) {
error = g_error_new_literal (NM_WIFI_ERROR,
@@ -1544,15 +1334,15 @@ impl_device_request_scan (NMDeviceWifi *self,
goto error;
}
- if (nm_supplicant_interface_get_scanning (priv->supplicant.iface)) {
+ if (nm_supplicant_interface_get_scanning (priv->sup_iface)) {
error = g_error_new_literal (NM_WIFI_ERROR,
NM_WIFI_ERROR_SCAN_NOT_ALLOWED,
"Scanning not allowed while already scanning");
goto error;
}
- last_scan = nm_supplicant_interface_get_last_scan_time (priv->supplicant.iface);
- if ((time (NULL) - last_scan) < 10) {
+ last_scan = nm_supplicant_interface_get_last_scan_time (priv->sup_iface);
+ if (last_scan && (nm_utils_get_monotonic_timestamp_s () - last_scan) < 10) {
error = g_error_new_literal (NM_WIFI_ERROR,
NM_WIFI_ERROR_SCAN_NOT_ALLOWED,
"Scanning not allowed immediately following previous scan");
@@ -1563,6 +1353,7 @@ impl_device_request_scan (NMDeviceWifi *self,
g_signal_emit_by_name (device,
NM_DEVICE_AUTH_REQUEST,
context,
+ NULL,
NM_AUTH_PERMISSION_NETWORK_CONTROL,
TRUE,
request_scan_cb,
@@ -1579,9 +1370,9 @@ scanning_allowed (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
guint32 sup_state;
- NMActRequest *req;
+ NMConnection *connection;
- g_return_val_if_fail (priv->supplicant.iface != NULL, FALSE);
+ g_return_val_if_fail (priv->sup_iface != NULL, FALSE);
/* Scanning not done in AP mode */
if (priv->mode == NM_802_11_MODE_AP)
@@ -1610,29 +1401,24 @@ scanning_allowed (NMDeviceWifi *self)
}
/* Don't scan if the supplicant is busy */
- sup_state = nm_supplicant_interface_get_state (priv->supplicant.iface);
+ sup_state = nm_supplicant_interface_get_state (priv->sup_iface);
if ( sup_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING
|| sup_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED
|| sup_state == NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE
|| sup_state == NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE
- || nm_supplicant_interface_get_scanning (priv->supplicant.iface))
+ || nm_supplicant_interface_get_scanning (priv->sup_iface))
return FALSE;
- req = nm_device_get_act_request (NM_DEVICE (self));
- if (req) {
- NMConnection *connection;
- NMSettingIP4Config *s_ip4;
+ connection = nm_device_get_connection (NM_DEVICE (self));
+ if (connection) {
NMSettingWireless *s_wifi;
const char *ip4_method = NULL;
const GByteArray *bssid;
/* Don't scan when a shared connection is active; it makes drivers mad */
- connection = nm_act_request_get_connection (req);
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- ip4_method = nm_setting_ip4_config_get_method (s_ip4);
+ ip4_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
- if (s_ip4 && !strcmp (ip4_method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
+ if (!strcmp (ip4_method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
return FALSE;
/* Don't scan when the connection is locked to a specifc AP, since
@@ -1663,8 +1449,8 @@ scanning_allowed_accumulator (GSignalInvocationHint *ihint,
static gboolean
check_scanning_allowed (NMDeviceWifi *self)
{
- GValue instance = { 0, };
- GValue retval = { 0, };
+ GValue instance = G_VALUE_INIT;
+ GValue retval = G_VALUE_INIT;
g_value_init (&instance, G_TYPE_OBJECT);
g_value_take_object (&instance, self);
@@ -1694,8 +1480,7 @@ static GPtrArray *
build_hidden_probe_list (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- guint max_scan_ssids = nm_supplicant_interface_get_max_scan_ssids (priv->supplicant.iface);
- NMConnectionProvider *provider = nm_device_get_connection_provider (NM_DEVICE (self));
+ guint max_scan_ssids = nm_supplicant_interface_get_max_scan_ssids (priv->sup_iface);
GSList *connections, *iter;
GPtrArray *ssids = NULL;
static GByteArray *nullssid = NULL;
@@ -1708,7 +1493,7 @@ build_hidden_probe_list (NMDeviceWifi *self)
if (G_UNLIKELY (nullssid == NULL))
nullssid = g_byte_array_new ();
- connections = nm_connection_provider_get_best_connections (provider,
+ connections = nm_connection_provider_get_best_connections (nm_connection_provider_get (),
max_scan_ssids - 1,
NM_SETTING_WIRELESS_SETTING_NAME,
NULL,
@@ -1743,13 +1528,18 @@ request_wireless_scan (gpointer user_data)
gboolean backoff = FALSE;
GPtrArray *ssids = NULL;
+ if (priv->requested_scan) {
+ /* There's already a scan in progress */
+ return FALSE;
+ }
+
if (check_scanning_allowed (self)) {
nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scanning requested",
nm_device_get_iface (NM_DEVICE (self)));
ssids = build_hidden_probe_list (self);
- if (nm_logging_level_enabled (LOGL_DEBUG)) {
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_WIFI_SCAN)) {
if (ssids) {
guint i;
char *foo;
@@ -1767,9 +1557,11 @@ request_wireless_scan (gpointer user_data)
}
}
- if (nm_supplicant_interface_request_scan (priv->supplicant.iface, ssids)) {
+ if (nm_supplicant_interface_request_scan (priv->sup_iface, ssids)) {
/* success */
backoff = TRUE;
+ priv->requested_scan = TRUE;
+ nm_device_add_pending_action (NM_DEVICE (self), "scan", TRUE);
}
if (ssids) {
@@ -1797,7 +1589,7 @@ static void
schedule_scan (NMDeviceWifi *self, gboolean backoff)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- time_t now = time (NULL);
+ gint32 now = nm_utils_get_monotonic_timestamp_s ();
/* Cancel the pending scan if it would happen later than (now + the scan_interval) */
if (priv->pending_scan_id) {
@@ -1855,6 +1647,8 @@ supplicant_iface_scan_done_cb (NMSupplicantInterface *iface,
gboolean success,
NMDeviceWifi *self)
{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+
nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scan %s",
nm_device_get_iface (NM_DEVICE (self)),
success ? "successful" : "failed");
@@ -1865,14 +1659,46 @@ supplicant_iface_scan_done_cb (NMSupplicantInterface *iface,
* happens when there are new BSSes.
*/
schedule_scanlist_cull (self);
-}
+ if (priv->requested_scan) {
+ priv->requested_scan = FALSE;
+ nm_device_remove_pending_action (NM_DEVICE (self), "scan", TRUE);
+ }
+}
/****************************************************************************
* WPA Supplicant control stuff
*
*/
+static void
+try_fill_ssid_for_hidden_ap (NMAccessPoint *ap)
+{
+ const struct ether_addr *bssid;
+ const GSList *connections, *iter;
+
+ g_return_if_fail (nm_ap_get_ssid (ap) == NULL);
+
+ bssid = nm_ap_get_address (ap);
+ g_assert (bssid);
+
+ /* Look for this AP's BSSID in the seen-bssids list of a connection,
+ * and if a match is found, copy over the SSID */
+ connections = nm_connection_provider_get_connections (nm_connection_provider_get ());
+ for (iter = connections; iter; iter = g_slist_next (iter)) {
+ NMConnection *connection = NM_CONNECTION (iter->data);
+ NMSettingWireless *s_wifi;
+
+ s_wifi = nm_connection_get_setting_wireless (connection);
+ if (s_wifi) {
+ if (nm_settings_connection_has_seen_bssid (NM_SETTINGS_CONNECTION (connection), bssid)) {
+ nm_ap_set_ssid (ap, nm_setting_wireless_get_ssid (s_wifi));
+ break;
+ }
+ }
+ }
+}
+
#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
#define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5]
@@ -1897,14 +1723,13 @@ merge_scanned_ap (NMDeviceWifi *self,
const GByteArray *ssid;
const struct ether_addr *bssid;
gboolean strict_match = TRUE;
- NMAccessPoint *current_ap = NULL;
/* Let the manager try to fill in the SSID from seen-bssids lists */
bssid = nm_ap_get_address (merge_ap);
ssid = nm_ap_get_ssid (merge_ap);
if (!ssid || nm_utils_is_empty_ssid (ssid->data, ssid->len)) {
- /* Let the manager try to fill the AP's SSID from the database */
- g_signal_emit (self, signals[HIDDEN_AP_FOUND], 0, merge_ap);
+ /* Try to fill the SSID from the AP database */
+ try_fill_ssid_for_hidden_ap (merge_ap);
ssid = nm_ap_get_ssid (merge_ap);
if (ssid && (nm_utils_is_empty_ssid (ssid->data, ssid->len) == FALSE)) {
@@ -1928,8 +1753,7 @@ merge_scanned_ap (NMDeviceWifi *self,
* constructed from the NMConnection of the activation request, they won't
* always be the same as the capabilities of the real AP from the scan.
*/
- current_ap = nm_device_wifi_get_activation_ap (self);
- if (current_ap && nm_ap_get_fake (current_ap))
+ if (priv->current_ap && nm_ap_get_fake (priv->current_ap))
strict_match = FALSE;
found_ap = get_ap_by_supplicant_path (self, nm_ap_get_supplicant_path (merge_ap));
@@ -1968,8 +1792,7 @@ merge_scanned_ap (NMDeviceWifi *self,
g_object_ref (merge_ap);
priv->ap_list = g_slist_prepend (priv->ap_list, merge_ap);
nm_ap_export_to_dbus (merge_ap);
- g_signal_emit (self, signals[ACCESS_POINT_ADDED], 0, merge_ap);
- nm_device_recheck_available_connections (NM_DEVICE (self));
+ emit_ap_added_removed (self, ACCESS_POINT_ADDED, merge_ap, TRUE);
}
}
@@ -1979,7 +1802,7 @@ static gboolean
cull_scan_list (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- time_t now = time (NULL);
+ gint32 now = nm_utils_get_monotonic_timestamp_s ();
GSList *outdated_list = NULL;
GSList *elt;
guint32 removed = 0, total = 0;
@@ -1995,10 +1818,12 @@ cull_scan_list (NMDeviceWifi *self)
for (elt = priv->ap_list; elt; elt = g_slist_next (elt), total++) {
NMAccessPoint *ap = elt->data;
const guint prune_interval_s = SCAN_INTERVAL_MAX * 3;
+ gint32 last_seen;
/* Don't cull the associated AP or manually created APs */
- if (ap == priv->current_ap || nm_ap_get_fake (ap))
+ if (ap == priv->current_ap)
continue;
+ g_assert (!nm_ap_get_fake (ap)); /* only the current_ap can be fake */
/* Don't cull APs still known to the supplicant. Since the supplicant
* doesn't yet emit property updates for "last seen" we have to rely
@@ -2011,8 +1836,9 @@ cull_scan_list (NMDeviceWifi *self)
&& g_object_get_data (G_OBJECT (ap), WPAS_REMOVED_TAG) == NULL)
continue;
- if (nm_ap_get_last_seen (ap) + prune_interval_s < now)
- outdated_list = g_slist_append (outdated_list, ap);
+ last_seen = nm_ap_get_last_seen (ap);
+ if (!last_seen || last_seen + prune_interval_s < now)
+ outdated_list = g_slist_prepend (outdated_list, ap);
}
/* Remove outdated APs */
@@ -2117,7 +1943,7 @@ supplicant_iface_bss_updated_cb (NMSupplicantInterface *iface,
/* Update the AP's last-seen property */
ap = get_ap_by_supplicant_path (self, object_path);
if (ap)
- nm_ap_set_last_seen (ap, (guint32) time (NULL));
+ nm_ap_set_last_seen (ap, nm_utils_get_monotonic_timestamp_s ());
/* Remove outdated access points */
schedule_scanlist_cull (self);
@@ -2138,6 +1964,21 @@ supplicant_iface_bss_removed_cb (NMSupplicantInterface *iface,
g_object_set_data (G_OBJECT (ap), WPAS_REMOVED_TAG, GUINT_TO_POINTER (TRUE));
}
+static void
+remove_supplicant_timeouts (NMDeviceWifi *self)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+
+ if (priv->sup_timeout_id) {
+ g_source_remove (priv->sup_timeout_id);
+ priv->sup_timeout_id = 0;
+ }
+
+ if (priv->link_timeout_id) {
+ g_source_remove (priv->link_timeout_id);
+ priv->link_timeout_id = 0;
+ }
+}
static void
cleanup_association_attempt (NMDeviceWifi *self, gboolean disconnect)
@@ -2146,8 +1987,8 @@ cleanup_association_attempt (NMDeviceWifi *self, gboolean disconnect)
remove_supplicant_interface_error_handler (self);
remove_supplicant_timeouts (self);
- if (disconnect && priv->supplicant.iface)
- nm_supplicant_interface_disconnect (priv->supplicant.iface);
+ if (disconnect && priv->sup_iface)
+ nm_supplicant_interface_disconnect (priv->sup_iface);
}
static void
@@ -2172,21 +2013,6 @@ wifi_secrets_cb (NMActRequest *req,
nm_device_activate_schedule_stage1_device_prepare (dev);
}
-static void
-remove_link_timeout (NMDeviceWifi *self)
-{
- NMDeviceWifiPrivate *priv;
-
- g_return_if_fail (self != NULL);
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- if (priv->link_timeout_id) {
- g_source_remove (priv->link_timeout_id);
- priv->link_timeout_id = 0;
- }
-}
-
-
/*
* link_timeout_cb
*
@@ -2199,7 +2025,6 @@ link_timeout_cb (gpointer user_data)
NMDevice *dev = NM_DEVICE (user_data);
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- NMAccessPoint *ap;
nm_log_warn (LOGD_WIFI, "(%s): link timed out.", nm_device_get_iface (dev));
@@ -2217,16 +2042,8 @@ link_timeout_cb (gpointer user_data)
* Remove it from the list and if it's actually still present, it'll be
* found in the next scan.
*/
- if (priv->ssid_found == FALSE) {
- if (priv->current_ap) {
- ap = priv->current_ap;
- priv->current_ap = NULL;
- } else
- ap = nm_device_wifi_get_activation_ap (self);
-
- if (ap)
- remove_access_point (self, ap);
- }
+ if (priv->ssid_found == FALSE && priv->current_ap)
+ set_current_ap (self, NULL, TRUE, TRUE);
nm_device_state_changed (dev,
NM_DEVICE_STATE_FAILED,
@@ -2412,6 +2229,9 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
/* Request a scan to get latest results */
cancel_pending_scan (self);
request_wireless_scan (self);
+
+ if (old_state < NM_SUPPLICANT_INTERFACE_STATE_READY)
+ nm_device_remove_pending_action (device, "waiting for supplicant", TRUE);
break;
case NM_SUPPLICANT_INTERFACE_STATE_COMPLETED:
remove_supplicant_interface_error_handler (self);
@@ -2421,8 +2241,18 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
* schedule the next activation stage.
*/
if (devstate == NM_DEVICE_STATE_CONFIG) {
- NMAccessPoint *ap = nm_device_wifi_get_activation_ap (self);
- const GByteArray *ssid = ap ? nm_ap_get_ssid (ap) : NULL;
+ NMConnection *connection;
+ NMSettingWireless *s_wifi;
+ const GByteArray *ssid;
+
+ connection = nm_device_get_connection (NM_DEVICE (self));
+ g_return_if_fail (connection);
+
+ s_wifi = nm_connection_get_setting_wireless (connection);
+ g_return_if_fail (s_wifi);
+
+ ssid = nm_setting_wireless_get_ssid (s_wifi);
+ g_return_if_fail (ssid);
nm_log_info (LOGD_DEVICE | LOGD_WIFI,
"Activation (%s/wireless) Stage 2 of 5 (Device Configure) "
@@ -2433,7 +2263,7 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)");
nm_device_activate_schedule_stage3_ip_config_start (device);
} else if (devstate == NM_DEVICE_STATE_ACTIVATED)
- periodic_update (self);
+ periodic_update (self, NULL);
break;
case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED:
if ((devstate == NM_DEVICE_STATE_ACTIVATED) || nm_device_is_activating (device)) {
@@ -2462,6 +2292,9 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
case NM_SUPPLICANT_INTERFACE_STATE_DOWN:
cleanup_association_attempt (self, FALSE);
+ if (old_state < NM_SUPPLICANT_INTERFACE_STATE_READY)
+ nm_device_remove_pending_action (device, "waiting for supplicant", TRUE);
+
/* If the device is already in UNAVAILABLE state then the state change
* is a NOP and the interface won't be re-acquired in the device state
* change handler. So ensure we have a new one here so that we're
@@ -2484,74 +2317,34 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
g_object_notify (G_OBJECT (self), "scanning");
}
-struct iface_con_error_cb_data {
- NMDeviceWifi *self;
- char *name;
- char *message;
-};
-
-static gboolean
-supplicant_iface_connection_error_cb_handler (gpointer user_data)
+static void
+supplicant_iface_connection_error_cb (NMSupplicantInterface *iface,
+ const char *name,
+ const char *message,
+ NMDeviceWifi *self)
{
- NMDeviceWifi *self;
- NMDeviceWifiPrivate *priv;
- struct iface_con_error_cb_data * cb_data = (struct iface_con_error_cb_data *) user_data;
-
- g_return_val_if_fail (cb_data != NULL, FALSE);
-
- self = cb_data->self;
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- if (!nm_device_is_activating (NM_DEVICE (self)))
- goto out;
-
- nm_log_info (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): association request to the supplicant "
- "failed: %s - %s",
- nm_device_get_iface (NM_DEVICE (self)),
- cb_data->name,
- cb_data->message);
+ NMDevice *device = NM_DEVICE (self);
- cleanup_association_attempt (self, TRUE);
- nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
+ if (nm_device_is_activating (device)) {
+ nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
+ "Activation (%s/wireless): supplicant association failed: %s - %s",
+ nm_device_get_iface (device), name, message);
-out:
- priv->supplicant.iface_con_error_cb_id = 0;
- g_free (cb_data->name);
- g_free (cb_data->message);
- g_slice_free (struct iface_con_error_cb_data, cb_data);
- return FALSE;
+ cleanup_association_attempt (self, TRUE);
+ nm_device_queue_state (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
+ }
}
-
static void
-supplicant_iface_connection_error_cb (NMSupplicantInterface * iface,
- const char * name,
- const char * message,
- NMDeviceWifi * self)
+remove_supplicant_interface_error_handler (NMDeviceWifi *self)
{
- NMDeviceWifiPrivate *priv;
- struct iface_con_error_cb_data *cb_data;
- guint id;
-
- g_return_if_fail (self != NULL);
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- cb_data = g_slice_new0 (struct iface_con_error_cb_data);
- if (cb_data == NULL) {
- nm_log_err (LOGD_WIFI, "Not enough memory to process supplicant connection error.");
- return;
+ if (priv->sup_iface) {
+ g_signal_handlers_disconnect_by_func (priv->sup_iface,
+ supplicant_iface_connection_error_cb,
+ self);
}
-
- cb_data->self = self;
- cb_data->name = g_strdup (name);
- cb_data->message = g_strdup (message);
-
- if (priv->supplicant.iface_con_error_cb_id)
- g_source_remove (priv->supplicant.iface_con_error_cb_id);
-
- id = g_idle_add (supplicant_iface_connection_error_cb_handler, cb_data);
- priv->supplicant.iface_con_error_cb_id = id;
}
static void
@@ -2572,22 +2365,7 @@ supplicant_iface_notify_scanning_cb (NMSupplicantInterface *iface,
/* Run a quick update of current AP when coming out of a scan */
state = nm_device_get_state (NM_DEVICE (self));
if (!scanning && state == NM_DEVICE_STATE_ACTIVATED)
- periodic_update (self);
-}
-
-static void
-remove_supplicant_connection_timeout (NMDeviceWifi *self)
-{
- NMDeviceWifiPrivate *priv;
-
- g_return_if_fail (self != NULL);
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- /* Remove any pending timeouts on the request */
- if (priv->supplicant.con_timeout_id) {
- g_source_remove (priv->supplicant.con_timeout_id);
- priv->supplicant.con_timeout_id = 0;
- }
+ periodic_update (self, NULL);
}
static NMActStageReturn
@@ -2633,29 +2411,6 @@ handle_auth_or_fail (NMDeviceWifi *self,
return ret;
}
-static gboolean
-is_encrypted (NMAccessPoint *ap, NMConnection *connection)
-{
- NM80211ApFlags flags;
- NM80211ApSecurityFlags wpa_flags, rsn_flags;
-
- g_return_val_if_fail (ap != NULL, FALSE);
- g_return_val_if_fail (connection != NULL, FALSE);
-
- flags = nm_ap_get_flags (ap);
- wpa_flags = nm_ap_get_wpa_flags (ap);
- rsn_flags = nm_ap_get_rsn_flags (ap);
-
- if (flags & NM_802_11_AP_FLAGS_PRIVACY)
- return TRUE;
- if (wpa_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X))
- return TRUE;
- if (rsn_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X))
- return TRUE;
-
- return FALSE;
-}
-
/*
* supplicant_connection_timeout_cb
*
@@ -2668,7 +2423,6 @@ supplicant_connection_timeout_cb (gpointer user_data)
NMDevice *dev = NM_DEVICE (user_data);
NMDeviceWifi *self = NM_DEVICE_WIFI (user_data);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- NMAccessPoint *ap;
NMActRequest *req;
NMConnection *connection;
@@ -2706,9 +2460,8 @@ supplicant_connection_timeout_cb (gpointer user_data)
}
g_assert (priv->mode == NM_802_11_MODE_INFRA);
- ap = nm_device_wifi_get_activation_ap (self);
- if (priv->ssid_found && ap && is_encrypted (ap, connection)) {
+ if (priv->ssid_found && nm_connection_get_setting_wireless_security (connection)) {
guint64 timestamp = 0;
gboolean new_secrets = TRUE;
@@ -2748,44 +2501,10 @@ supplicant_connection_timeout_cb (gpointer user_data)
return FALSE;
}
-
-static gboolean
-start_supplicant_connection_timeout (NMDeviceWifi *self)
-{
- NMDeviceWifiPrivate *priv;
- guint id;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- /* Set up a timeout on the connection attempt to fail it after 25 seconds */
- id = g_timeout_add_seconds (25, supplicant_connection_timeout_cb, self);
- if (id == 0) {
- nm_log_err (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): couldn't start supplicant "
- "timeout timer.",
- nm_device_get_iface (NM_DEVICE (self)));
- return FALSE;
- }
- priv->supplicant.con_timeout_id = id;
- return TRUE;
-}
-
-
-static void
-remove_supplicant_timeouts (NMDeviceWifi *self)
-{
- g_return_if_fail (self != NULL);
-
- remove_supplicant_connection_timeout (self);
- remove_link_timeout (self);
-}
-
static NMSupplicantConfig *
build_supplicant_config (NMDeviceWifi *self,
NMConnection *connection,
- NMAccessPoint *ap)
+ guint32 fixed_freq)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
NMSupplicantConfig *config = NULL;
@@ -2803,15 +2522,13 @@ build_supplicant_config (NMDeviceWifi *self,
/* Warn if AP mode may not be supported */
if ( g_strcmp0 (nm_setting_wireless_get_mode (s_wireless), NM_SETTING_WIRELESS_MODE_AP) == 0
- && nm_supplicant_interface_get_ap_support (priv->supplicant.iface) == AP_SUPPORT_UNKNOWN) {
+ && nm_supplicant_interface_get_ap_support (priv->sup_iface) == AP_SUPPORT_UNKNOWN) {
nm_log_warn (LOGD_WIFI, "Supplicant may not support AP mode; connection may time out.");
}
if (!nm_supplicant_config_add_setting_wireless (config,
s_wireless,
- nm_ap_get_broadcast (ap),
- nm_ap_get_freq (ap),
- wifi_utils_can_scan_ssid (priv->wifi_data))) {
+ fixed_freq)) {
nm_log_err (LOGD_WIFI, "Couldn't add 802-11-wireless setting to supplicant config.");
goto error;
}
@@ -2848,21 +2565,6 @@ error:
/****************************************************************************/
static void
-update_hw_address (NMDevice *dev)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (dev);
- gsize addrlen;
- gboolean changed = FALSE;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- g_return_if_fail (addrlen == ETH_ALEN);
- if (changed)
- g_object_notify (G_OBJECT (dev), NM_DEVICE_WIFI_HW_ADDRESS);
- }
-}
-
-static void
update_permanent_hw_address (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
@@ -2892,7 +2594,7 @@ update_permanent_hw_address (NMDevice *dev)
nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): unable to read permanent MAC address (error %d)",
nm_device_get_iface (dev), errno);
/* Fall back to current address */
- memcpy (epaddr->data, &priv->hw_addr, ETH_ALEN);
+ memcpy (epaddr->data, nm_device_get_hw_address (dev, NULL), ETH_ALEN);
}
if (memcmp (&priv->perm_hw_addr, epaddr->data, ETH_ALEN)) {
@@ -2909,42 +2611,25 @@ update_initial_hw_address (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- char *mac_str = NULL;
- guint8 *addr = priv->initial_hw_addr;
- guint8 zero[ETH_ALEN] = {0,0,0,0,0,0};
+ char *mac_str;
/* This sets initial MAC address from current MAC address. It should only
* be called from NMDevice constructor() to really get the initial address.
*/
- if (!memcmp (&priv->hw_addr, &zero, ETH_ALEN))
- update_hw_address (dev);
-
- if (memcmp (&priv->initial_hw_addr, &priv->hw_addr, ETH_ALEN))
- memcpy (&priv->initial_hw_addr, &priv->hw_addr, ETH_ALEN);
-
- mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ memcpy (priv->initial_hw_addr, nm_device_get_hw_address (dev, NULL), ETH_ALEN);
+ mac_str = nm_utils_hwaddr_ntoa (priv->initial_hw_addr, ARPHRD_ETHER);
nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): read initial MAC address %s",
nm_device_get_iface (dev), mac_str);
-
g_free (mac_str);
}
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
-
- *out_len = ETH_ALEN;
- return priv->hw_addr;
-}
-
static NMActStageReturn
act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ NMActStageReturn ret;
NMAccessPoint *ap = NULL;
NMActRequest *req;
NMConnection *connection;
@@ -2952,6 +2637,11 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
const GByteArray *cloned_mac;
GSList *iter;
const char *mode;
+ const char *ap_path;
+
+ ret = NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage1_prepare (dev, reason);
+ if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
+ return ret;
req = nm_device_get_act_request (NM_DEVICE (self));
g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
@@ -2963,11 +2653,11 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
g_assert (s_wireless);
mode = nm_setting_wireless_get_mode (s_wireless);
- if (g_strcmp0 (mode, "infra") == 0)
+ if (g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_INFRA) == 0)
priv->mode = NM_802_11_MODE_INFRA;
- else if (g_strcmp0 (mode, "adhoc") == 0)
+ else if (g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_ADHOC) == 0)
priv->mode = NM_802_11_MODE_ADHOC;
- else if (g_strcmp0 (mode, "ap") == 0) {
+ else if (g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_AP) == 0) {
priv->mode = NM_802_11_MODE_AP;
/* Scanning not done in AP mode; clear the scan list */
@@ -2988,11 +2678,13 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
/* Set spoof MAC to the interface */
cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
if (cloned_mac && (cloned_mac->len == ETH_ALEN))
- _set_hw_addr (self, (const guint8 *) cloned_mac->data, "set");
+ nm_device_set_hw_addr (dev, (const guint8 *) cloned_mac->data, "set", LOGD_WIFI);
/* AP mode never uses a specific object or existing scanned AP */
if (priv->mode != NM_802_11_MODE_AP) {
- ap = nm_device_wifi_get_activation_ap (self);
+
+ ap_path = nm_active_connection_get_specific_object (NM_ACTIVE_CONNECTION (req));
+ ap = ap_path ? get_ap_by_path (self, ap_path) : NULL;
if (ap)
goto done;
@@ -3007,31 +2699,36 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
}
}
+ if (ap) {
+ nm_active_connection_set_specific_object (NM_ACTIVE_CONNECTION (req), nm_ap_get_dbus_path (ap));
+ goto done;
+ }
+
/* If the user is trying to connect to an AP that NM doesn't yet know about
* (hidden network or something) or starting a Hotspot, create an fake AP
* from the security settings in the connection. This "fake" AP gets used
* until the real one is found in the scan list (Ad-Hoc or Hidden), or until
* the device is deactivated (Hotspot).
*/
- if (!ap) {
- ap = nm_ap_new_fake_from_connection (connection);
- g_return_val_if_fail (ap != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
- if (nm_ap_get_mode (ap) == NM_802_11_MODE_INFRA)
- nm_ap_set_broadcast (ap, FALSE);
- else if (nm_ap_is_hotspot (ap))
- nm_ap_set_address (ap, (const struct ether_addr *) &priv->hw_addr);
-
- priv->ap_list = g_slist_prepend (priv->ap_list, ap);
- nm_ap_export_to_dbus (ap);
- g_signal_emit (self, signals[ACCESS_POINT_ADDED], 0, ap);
- nm_device_recheck_available_connections (NM_DEVICE (self));
- }
-
+ ap = nm_ap_new_fake_from_connection (connection);
+ g_return_val_if_fail (ap != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ if (nm_ap_get_mode (ap) == NM_802_11_MODE_INFRA)
+ nm_ap_set_broadcast (ap, FALSE);
+ else if (nm_ap_is_hotspot (ap))
+ nm_ap_set_address (ap, (const struct ether_addr *) nm_device_get_hw_address (dev, NULL));
+
+ priv->ap_list = g_slist_prepend (priv->ap_list, ap);
+ nm_ap_export_to_dbus (ap);
+ g_object_freeze_notify (G_OBJECT (self));
+ set_current_ap (self, ap, FALSE, FALSE);
+ emit_ap_added_removed (self, ACCESS_POINT_ADDED, ap, TRUE);
+ g_object_thaw_notify (G_OBJECT (self));
nm_active_connection_set_specific_object (NM_ACTIVE_CONNECTION (req), nm_ap_get_dbus_path (ap));
+ return NM_ACT_STAGE_RETURN_SUCCESS;
done:
- set_active_ap (self, ap);
+ set_current_ap (self, ap, TRUE, FALSE);
return NM_ACT_STAGE_RETURN_SUCCESS;
}
@@ -3040,7 +2737,6 @@ ensure_hotspot_frequency (NMDeviceWifi *self,
NMSettingWireless *s_wifi,
NMAccessPoint *ap)
{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
const char *band = nm_setting_wireless_get_band (s_wifi);
const guint32 a_freqs[] = { 5180, 5200, 5220, 5745, 5765, 5785, 5805, 0 };
const guint32 bg_freqs[] = { 2412, 2437, 2462, 2472, 0 };
@@ -3052,9 +2748,9 @@ ensure_hotspot_frequency (NMDeviceWifi *self,
return;
if (g_strcmp0 (band, "a") == 0)
- freq = wifi_utils_find_freq (priv->wifi_data, a_freqs);
+ freq = nm_platform_wifi_find_frequency (nm_device_get_ifindex (NM_DEVICE (self)), a_freqs);
else
- freq = wifi_utils_find_freq (priv->wifi_data, bg_freqs);
+ freq = nm_platform_wifi_find_frequency (nm_device_get_ifindex (NM_DEVICE (self)), bg_freqs);
if (!freq)
freq = (g_strcmp0 (band, "a") == 0) ? 5180 : 2462;
@@ -3070,7 +2766,6 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
const char *iface = nm_device_get_iface (dev);
NMSupplicantConfig *config = NULL;
- gulong id = 0;
NMActRequest *req;
NMAccessPoint *ap;
NMConnection *connection;
@@ -3084,10 +2779,9 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
req = nm_device_get_act_request (dev);
g_assert (req);
- ap = nm_device_wifi_get_activation_ap (self);
+ ap = priv->current_ap;
if (!ap) {
- nm_log_warn (LOGD_DEVICE | LOGD_WIFI, "act_stage2_config failed due to unexpected missing activation_ap. Abort");
- *reason = NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT;
+ *reason = NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED;
goto out;
}
@@ -3112,7 +2806,7 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
}
/* have secrets, or no secrets required */
- if (nm_setting_wireless_get_security (s_wireless)) {
+ if (nm_connection_get_setting_wireless_security (connection)) {
nm_log_info (LOGD_DEVICE | LOGD_WIFI,
"Activation (%s/wireless): connection '%s' has security"
", and secrets exist. No new secrets needed.",
@@ -3134,7 +2828,7 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
ensure_hotspot_frequency (self, s_wireless, ap);
/* Build up the supplicant configuration */
- config = build_supplicant_config (self, connection, ap);
+ config = build_supplicant_config (self, connection, nm_ap_get_freq (ap));
if (config == NULL) {
nm_log_err (LOGD_DEVICE | LOGD_WIFI,
"Activation (%s/wireless): couldn't build wireless configuration.",
@@ -3144,13 +2838,12 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
}
/* Hook up error signal handler to capture association errors */
- id = g_signal_connect (priv->supplicant.iface,
- NM_SUPPLICANT_INTERFACE_CONNECTION_ERROR,
- G_CALLBACK (supplicant_iface_connection_error_cb),
- self);
- priv->supplicant.iface_error_id = id;
+ g_signal_connect (priv->sup_iface,
+ NM_SUPPLICANT_INTERFACE_CONNECTION_ERROR,
+ G_CALLBACK (supplicant_iface_connection_error_cb),
+ self);
- if (!nm_supplicant_interface_set_config (priv->supplicant.iface, config)) {
+ if (!nm_supplicant_interface_set_config (priv->sup_iface, config)) {
nm_log_err (LOGD_DEVICE | LOGD_WIFI,
"Activation (%s/wireless): couldn't send wireless "
"configuration to the supplicant.", iface);
@@ -3158,10 +2851,11 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
goto out;
}
- if (!start_supplicant_connection_timeout (self)) {
- *reason = NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED;
- goto out;
- }
+ /* Set up a timeout on the association attempt to fail after 25 seconds */
+ priv->sup_timeout_id = g_timeout_add_seconds (25, supplicant_connection_timeout_cb, self);
+
+ if (!priv->periodic_source_id)
+ priv->periodic_source_id = g_timeout_add_seconds (6, periodic_update_cb, self);
/* We'll get stage3 started when the supplicant connects */
ret = NM_ACT_STAGE_RETURN_POSTPONE;
@@ -3179,6 +2873,51 @@ out:
return ret;
}
+static NMActStageReturn
+act_stage3_ip4_config_start (NMDevice *device,
+ NMIP4Config **out_config,
+ NMDeviceStateReason *reason)
+{
+ NMConnection *connection;
+ NMSettingIP4Config *s_ip4;
+ const char *method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
+
+ connection = nm_device_get_connection (device);
+ g_assert (connection);
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (s_ip4)
+ method = nm_setting_ip4_config_get_method (s_ip4);
+
+ /* Indicate that a critical protocol is about to start */
+ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0)
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (device), TRUE);
+
+ return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage3_ip4_config_start (device, out_config, reason);
+}
+
+static NMActStageReturn
+act_stage3_ip6_config_start (NMDevice *device,
+ NMIP6Config **out_config,
+ NMDeviceStateReason *reason)
+{
+ NMConnection *connection;
+ NMSettingIP6Config *s_ip6;
+ const char *method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
+
+ connection = nm_device_get_connection (device);
+ g_assert (connection);
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ if (s_ip6)
+ method = nm_setting_ip6_config_get_method (s_ip6);
+
+ /* Indicate that a critical protocol is about to start */
+ if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0 ||
+ strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0)
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (device), TRUE);
+
+ return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage3_ip6_config_start (device, out_config, reason);
+}
+
static void
ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
{
@@ -3198,32 +2937,26 @@ ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
}
static gboolean
-is_static_wep (NMAccessPoint *ap, NMConnection *connection)
+is_static_wep (NMConnection *connection)
{
- NM80211ApFlags flags;
- NM80211ApSecurityFlags wpa_flags, rsn_flags;
NMSettingWirelessSecurity *s_wsec;
- const char *key_mgmt;
+ const char *str;
- g_return_val_if_fail (ap != NULL, FALSE);
g_return_val_if_fail (connection != NULL, FALSE);
- flags = nm_ap_get_flags (ap);
- wpa_flags = nm_ap_get_wpa_flags (ap);
- rsn_flags = nm_ap_get_rsn_flags (ap);
-
- if ( (flags & NM_802_11_AP_FLAGS_PRIVACY)
- && (wpa_flags == NM_802_11_AP_SEC_NONE)
- && (rsn_flags == NM_802_11_AP_SEC_NONE)) {
- s_wsec = nm_connection_get_setting_wireless_security (connection);
- if (s_wsec) {
- key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
- if (g_strcmp0 (key_mgmt, "none") == 0)
- return TRUE;
- }
- }
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ if (!s_wsec)
+ return FALSE;
- return FALSE;
+ str = nm_setting_wireless_security_get_key_mgmt (s_wsec);
+ if (g_strcmp0 (str, "none") != 0)
+ return FALSE;
+
+ str = nm_setting_wireless_security_get_auth_alg (s_wsec);
+ if (g_strcmp0 (str, "leap") == 0)
+ return FALSE;
+
+ return TRUE;
}
static NMActStageReturn
@@ -3233,7 +2966,6 @@ handle_ip_config_timeout (NMDeviceWifi *self,
gboolean *chain_up,
NMDeviceStateReason *reason)
{
- NMAccessPoint *ap;
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
g_return_val_if_fail (connection != NULL, NM_ACT_STAGE_RETURN_FAILURE);
@@ -3243,8 +2975,6 @@ handle_ip_config_timeout (NMDeviceWifi *self,
return ret;
}
- ap = nm_device_wifi_get_activation_ap (self);
-
/* If IP configuration times out and it's a static WEP connection, that
* usually means the WEP key is wrong. WEP's Open System auth mode has
* no provision for figuring out if the WEP key is wrong, so you just have
@@ -3252,7 +2982,7 @@ handle_ip_config_timeout (NMDeviceWifi *self,
* types (open, WPA, 802.1x, etc) if the secrets/certs were wrong the
* connection would have failed before IP configuration.
*/
- if (ap && is_static_wep (ap, connection) && (may_fail == FALSE)) {
+ if (!may_fail && is_static_wep (connection)) {
/* Activation failed, we must have bad encryption key */
nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
"Activation (%s/wireless): could not get IP configuration for "
@@ -3289,8 +3019,7 @@ act_stage4_ip4_config_timeout (NMDevice *dev, NMDeviceStateReason *reason)
g_assert (connection);
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- may_fail = nm_setting_ip4_config_get_may_fail (s_ip4);
+ may_fail = nm_setting_ip4_config_get_may_fail (s_ip4);
ret = handle_ip_config_timeout (NM_DEVICE_WIFI (dev), connection, may_fail, &chain_up, reason);
if (chain_up)
@@ -3311,8 +3040,7 @@ act_stage4_ip6_config_timeout (NMDevice *dev, NMDeviceStateReason *reason)
g_assert (connection);
s_ip6 = nm_connection_get_setting_ip6_config (connection);
- if (s_ip6)
- may_fail = nm_setting_ip6_config_get_may_fail (s_ip6);
+ may_fail = nm_setting_ip6_config_get_may_fail (s_ip6);
ret = handle_ip_config_timeout (NM_DEVICE_WIFI (dev), connection, may_fail, &chain_up, reason);
if (chain_up)
@@ -3326,9 +3054,10 @@ activation_success_handler (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (dev);
NMAccessPoint *ap;
struct ether_addr bssid = { {0x0, 0x0, 0x0, 0x0, 0x0, 0x0} };
- NMAccessPoint *tmp_ap;
+ NMAccessPoint *tmp_ap = NULL;
NMActRequest *req;
NMConnection *connection;
@@ -3338,30 +3067,35 @@ activation_success_handler (NMDevice *dev)
connection = nm_act_request_get_connection (req);
g_assert (connection);
+ /* Clear any critical protocol notification in the wifi stack */
+ nm_platform_wifi_indicate_addressing_running (ifindex, FALSE);
+
/* Clear wireless secrets tries on success */
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, NULL);
- ap = nm_device_wifi_get_activation_ap (self);
+ ap = priv->current_ap;
/* If the AP isn't fake, it was found in the scan list and all its
* details are known.
*/
- if (!ap || !nm_ap_get_fake (ap))
+ if (!ap || !nm_ap_get_fake (ap)){
+ ap = NULL;
goto done;
+ }
/* If the activate AP was fake, it probably won't have a BSSID at all.
* But if activation was successful, the card will know the BSSID. Grab
* the BSSID off the card and fill in the BSSID of the activation AP.
*/
- wifi_utils_get_bssid (priv->wifi_data, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, &bssid);
if (!nm_ethernet_address_is_valid (nm_ap_get_address (ap)))
nm_ap_set_address (ap, &bssid);
if (!nm_ap_get_freq (ap))
- nm_ap_set_freq (ap, wifi_utils_get_freq (priv->wifi_data));
+ nm_ap_set_freq (ap, nm_platform_wifi_get_frequency (ifindex));
if (!nm_ap_get_max_bitrate (ap))
- nm_ap_set_max_bitrate (ap, wifi_utils_get_rate (priv->wifi_data));
+ nm_ap_set_max_bitrate (ap, nm_platform_wifi_get_rate (ifindex));
- tmp_ap = get_active_ap (self, ap, TRUE);
+ tmp_ap = find_active_ap (self, ap, TRUE);
if (tmp_ap) {
const GByteArray *ssid = nm_ap_get_ssid (tmp_ap);
@@ -3375,16 +3109,21 @@ activation_success_handler (NMDevice *dev)
nm_active_connection_set_specific_object (NM_ACTIVE_CONNECTION (req),
nm_ap_get_dbus_path (tmp_ap));
-
- priv->ap_list = g_slist_remove (priv->ap_list, ap);
- g_object_unref (ap);
}
done:
- periodic_update (self);
+ periodic_update (self, ap);
- /* Update seen BSSIDs cache with the connected AP */
- update_seen_bssids_cache (self, priv->current_ap);
+ /* ap might be already unrefed, because it was a fake_ap. But we don't touch it... */
+ if (tmp_ap && ap == priv->current_ap) {
+ /* Strange, we would expect periodic_update() to find a better AP
+ * then the fake one and reset it. Reset the fake current_ap to NULL
+ * now, which will remove the fake ap.
+ **/
+ set_current_ap (self, NULL, TRUE, FALSE);
+ }
+
+ /* No need to update seen BSSIDs cache, that is done by set_current_ap() already */
/* Reset scan interval to something reasonable */
priv->scan_interval = SCAN_INTERVAL_MIN + (SCAN_INTERVAL_STEP * 2);
@@ -3393,8 +3132,6 @@ done:
static void
activation_failure_handler (NMDevice *dev)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
- NMAccessPoint *ap;
NMConnection *connection;
connection = nm_device_get_connection (dev);
@@ -3403,77 +3140,8 @@ activation_failure_handler (NMDevice *dev)
/* Clear wireless secrets tries on failure */
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, NULL);
- if ((ap = nm_device_wifi_get_activation_ap (self))) {
- if (nm_ap_get_fake (ap)) {
- /* Fake APs are ones that don't show up in scans,
- * but which the user explicitly attempted to connect to.
- * However, if we fail on one of these, remove it from the
- * list because we don't have any scan or capability info
- * for it, and they are pretty much useless.
- */
- remove_access_point (self, ap);
- }
- }
-}
-
-static gboolean
-can_interrupt_activation (NMDevice *dev)
-{
- if (nm_device_get_state (dev) == NM_DEVICE_STATE_NEED_AUTH)
- return TRUE;
-
- return FALSE;
-}
-
-
-static guint32
-get_type_capabilities (NMDevice *dev)
-{
- return NM_DEVICE_WIFI_GET_PRIVATE (dev)->capabilities;
-}
-
-
-static gboolean
-spec_match_list (NMDevice *device, const GSList *specs)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
- char *hwaddr;
- gboolean matched;
-
- hwaddr = nm_utils_hwaddr_ntoa (&priv->perm_hw_addr, ARPHRD_ETHER);
- matched = nm_match_spec_hwaddr (specs, hwaddr);
- g_free (hwaddr);
-
- return matched;
-}
-
-static gboolean
-hwaddr_matches (NMDevice *device,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
- NMSettingWireless *s_wifi;
- const GByteArray *mac = NULL;
-
- s_wifi = nm_connection_get_setting_wireless (connection);
- if (s_wifi)
- mac = nm_setting_wireless_get_mac_address (s_wifi);
-
- if (mac) {
- g_return_val_if_fail (mac->len == ETH_ALEN, FALSE);
- if (other_hwaddr) {
- g_return_val_if_fail (other_hwaddr_len == ETH_ALEN, FALSE);
- if (memcmp (mac->data, other_hwaddr, mac->len) == 0)
- return TRUE;
- } else if (memcmp (mac->data, priv->hw_addr, mac->len) == 0)
- return TRUE;
- } else if (fail_if_no_hwaddr == FALSE)
- return TRUE;
-
- return FALSE;
+ /* Clear any critical protocol notification in the wifi stack */
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (dev), FALSE);
}
static void
@@ -3490,21 +3158,16 @@ device_state_changed (NMDevice *device,
/* Clean up the supplicant interface because in these states the
* device cannot be used.
*/
- if (priv->supplicant.iface)
+ if (priv->sup_iface)
supplicant_interface_release (self);
- }
- /* Start or stop the rfkill poll worker for ipw cards */
- if (priv->ipw_rfkill_path) {
- if (new_state > NM_DEVICE_STATE_UNMANAGED) {
- if (!priv->ipw_rfkill_id)
- priv->ipw_rfkill_id = g_timeout_add_seconds (3, ipw_rfkill_state_work, self);
- } else if (new_state <= NM_DEVICE_STATE_UNMANAGED) {
- if (priv->ipw_rfkill_id) {
- g_source_remove (priv->ipw_rfkill_id);
- priv->ipw_rfkill_id = 0;
- }
+ if (priv->periodic_source_id) {
+ g_source_remove (priv->periodic_source_id);
+ priv->periodic_source_id = 0;
}
+
+ cleanup_association_attempt (self, TRUE);
+ remove_all_aps (self);
}
switch (new_state) {
@@ -3517,14 +3180,18 @@ device_state_changed (NMDevice *device,
* the device is now ready to use.
*/
if (priv->enabled && (nm_device_get_firmware_missing (device) == FALSE)) {
- if (!priv->supplicant.iface)
+ if (!priv->sup_iface)
supplicant_interface_acquire (self);
}
clear_aps = TRUE;
break;
case NM_DEVICE_STATE_NEED_AUTH:
- if (priv->supplicant.iface)
- nm_supplicant_interface_disconnect (priv->supplicant.iface);
+ if (priv->sup_iface)
+ nm_supplicant_interface_disconnect (priv->sup_iface);
+ break;
+ case NM_DEVICE_STATE_IP_CHECK:
+ /* Clear any critical protocol notification in the wifi stack */
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (device), FALSE);
break;
case NM_DEVICE_STATE_ACTIVATED:
activation_success_handler (device);
@@ -3546,23 +3213,6 @@ device_state_changed (NMDevice *device,
remove_all_aps (self);
}
-NMAccessPoint *
-nm_device_wifi_get_activation_ap (NMDeviceWifi *self)
-{
- NMActRequest *req;
- const char *ap_path;
-
- g_return_val_if_fail (NM_IS_DEVICE_WIFI (self), NULL);
-
- req = nm_device_get_act_request (NM_DEVICE (self));
- if (!req)
- return NULL;
-
- ap_path = nm_active_connection_get_specific_object (NM_ACTIVE_CONNECTION (req));
-
- return ap_path ? get_ap_by_path (self, ap_path) : NULL;
-}
-
static void
set_enabled (NMDevice *device, gboolean enabled)
{
@@ -3593,7 +3243,7 @@ set_enabled (NMDevice *device, gboolean enabled)
if (state != NM_DEVICE_STATE_UNAVAILABLE)
nm_log_warn (LOGD_CORE, "not in expected unavailable state!");
- if (!nm_device_hw_bring_up (NM_DEVICE (self), TRUE, &no_firmware)) {
+ if (!nm_device_bring_up (NM_DEVICE (self), TRUE, &no_firmware)) {
nm_log_dbg (LOGD_WIFI, "(%s): enable blocked by failure to bring device up",
nm_device_get_iface (NM_DEVICE (device)));
@@ -3607,7 +3257,7 @@ set_enabled (NMDevice *device, gboolean enabled)
}
/* Re-initialize the supplicant interface and wait for it to be ready */
- if (priv->supplicant.iface)
+ if (priv->sup_iface)
supplicant_interface_release (self);
supplicant_interface_acquire (self);
@@ -3617,25 +3267,19 @@ set_enabled (NMDevice *device, gboolean enabled)
nm_device_state_changed (NM_DEVICE (self),
NM_DEVICE_STATE_UNAVAILABLE,
NM_DEVICE_STATE_REASON_NONE);
- nm_device_hw_take_down (NM_DEVICE (self), TRUE);
+ nm_device_take_down (NM_DEVICE (self), TRUE);
}
}
/********************************************************************/
NMDevice *
-nm_device_wifi_new (const char *udi,
- const char *iface,
- const char *driver)
+nm_device_wifi_new (NMPlatformLink *platform_device)
{
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
- g_return_val_if_fail (driver != NULL, NULL);
+ g_return_val_if_fail (platform_device != NULL, NULL);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_WIFI,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, driver,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
NM_DEVICE_TYPE_DESC, "802.11 WiFi",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_WIFI,
NM_DEVICE_RFKILL_TYPE, RFKILL_TYPE_WLAN,
@@ -3669,23 +3313,10 @@ dispose (GObject *object)
cleanup_association_attempt (self, TRUE);
supplicant_interface_release (self);
- if (priv->supplicant.mgr) {
- g_object_unref (priv->supplicant.mgr);
- priv->supplicant.mgr = NULL;
- }
+ g_clear_object (&priv->sup_mgr);
- set_active_ap (self, NULL);
remove_all_aps (self);
- if (priv->wifi_data)
- wifi_utils_deinit (priv->wifi_data);
-
- g_free (priv->ipw_rfkill_path);
- if (priv->ipw_rfkill_id) {
- g_source_remove (priv->ipw_rfkill_id);
- priv->ipw_rfkill_id = 0;
- }
-
G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object);
}
@@ -3695,11 +3326,10 @@ get_property (GObject *object, guint prop_id,
{
NMDeviceWifi *device = NM_DEVICE_WIFI (object);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
+ GPtrArray *array;
+ GSList *iter;
switch (prop_id) {
- case PROP_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (&priv->hw_addr, ARPHRD_ETHER));
- break;
case PROP_PERM_HW_ADDRESS:
g_value_take_string (value, nm_utils_hwaddr_ntoa (&priv->perm_hw_addr, ARPHRD_ETHER));
break;
@@ -3712,6 +3342,12 @@ get_property (GObject *object, guint prop_id,
case PROP_CAPABILITIES:
g_value_set_uint (value, priv->capabilities);
break;
+ case PROP_ACCESS_POINTS:
+ array = g_ptr_array_sized_new (4);
+ for (iter = priv->ap_list; iter; iter = g_slist_next (iter))
+ g_ptr_array_add (array, g_strdup (nm_ap_get_dbus_path (NM_AP (iter->data))));
+ g_value_take_boxed (value, array);
+ break;
case PROP_ACTIVE_ACCESS_POINT:
if (priv->current_ap)
g_value_set_boxed (value, nm_ap_get_dbus_path (priv->current_ap));
@@ -3719,10 +3355,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_boxed (value, "/");
break;
case PROP_SCANNING:
- g_value_set_boolean (value, nm_supplicant_interface_get_scanning (priv->supplicant.iface));
- break;
- case PROP_IPW_RFKILL_STATE:
- g_value_set_uint (value, nm_device_wifi_get_ipw_rfkill_state (device));
+ g_value_set_boolean (value, nm_supplicant_interface_get_scanning (priv->sup_iface));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -3734,13 +3367,7 @@ static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
-
switch (prop_id) {
- case PROP_IPW_RFKILL_STATE:
- /* construct only */
- priv->ipw_rfkill_state = g_value_get_uint (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -3761,45 +3388,31 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
object_class->set_property = set_property;
object_class->dispose = dispose;
- parent_class->get_type_capabilities = get_type_capabilities;
- parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->hw_bring_up = hw_bring_up;
- parent_class->is_up = is_up;
parent_class->bring_up = bring_up;
- parent_class->take_down = take_down;
- parent_class->update_hw_address = update_hw_address;
- parent_class->get_hw_address = get_hw_address;
parent_class->update_permanent_hw_address = update_permanent_hw_address;
parent_class->update_initial_hw_address = update_initial_hw_address;
- parent_class->get_best_auto_connection = get_best_auto_connection;
+ parent_class->can_auto_connect = can_auto_connect;
parent_class->is_available = is_available;
parent_class->check_connection_compatible = check_connection_compatible;
parent_class->check_connection_available = check_connection_available;
+ parent_class->check_connection_available_wifi_hidden = check_connection_available_wifi_hidden;
parent_class->complete_connection = complete_connection;
parent_class->set_enabled = set_enabled;
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->act_stage2_config = act_stage2_config;
parent_class->ip4_config_pre_commit = ip4_config_pre_commit;
+ parent_class->act_stage3_ip4_config_start = act_stage3_ip4_config_start;
+ parent_class->act_stage3_ip6_config_start = act_stage3_ip6_config_start;
parent_class->act_stage4_ip4_config_timeout = act_stage4_ip4_config_timeout;
parent_class->act_stage4_ip6_config_timeout = act_stage4_ip6_config_timeout;
parent_class->deactivate = deactivate;
- parent_class->can_interrupt_activation = can_interrupt_activation;
- parent_class->spec_match_list = spec_match_list;
- parent_class->hwaddr_matches = hwaddr_matches;
parent_class->state_changed = device_state_changed;
klass->scanning_allowed = scanning_allowed;
/* Properties */
- g_object_class_install_property (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_WIFI_HW_ADDRESS,
- "Active MAC Address",
- "Currently set hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
g_object_class_install_property (object_class, PROP_PERM_HW_ADDRESS,
g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS,
"Permanent MAC Address",
@@ -3823,6 +3436,14 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
0, G_MAXUINT32, 0,
G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_ACCESS_POINTS,
+ g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS,
+ "Access points",
+ "Access points",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
+
g_object_class_install_property (object_class, PROP_ACTIVE_ACCESS_POINT,
g_param_spec_boxed (NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT,
"Active access point",
@@ -3842,14 +3463,7 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
"Scanning",
"Scanning",
FALSE,
- G_PARAM_READABLE | NM_PROPERTY_PARAM_NO_EXPORT));
-
- g_object_class_install_property (object_class, PROP_IPW_RFKILL_STATE,
- g_param_spec_uint (NM_DEVICE_WIFI_IPW_RFKILL_STATE,
- "IpwRfkillState",
- "ipw rf-kill state",
- RFKILL_UNBLOCKED, RFKILL_HARD_BLOCKED, RFKILL_UNBLOCKED,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
+ G_PARAM_READABLE));
/* Signals */
signals[ACCESS_POINT_ADDED] =
@@ -3857,8 +3471,7 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1,
G_TYPE_OBJECT);
@@ -3867,35 +3480,21 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0,
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
-
- signals[HIDDEN_AP_FOUND] =
- g_signal_new ("hidden-ap-found",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMDeviceWifiClass, hidden_ap_found),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1,
G_TYPE_OBJECT);
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceWifiClass, properties_changed));
-
signals[SCANNING_ALLOWED] =
g_signal_new ("scanning-allowed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMDeviceWifiClass, scanning_allowed),
- scanning_allowed_accumulator, NULL,
- _nm_marshal_BOOLEAN__VOID,
+ scanning_allowed_accumulator, NULL, NULL,
G_TYPE_BOOLEAN, 0);
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass), &dbus_glib_nm_device_wifi_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_wifi_object_info);
dbus_g_error_domain_register (NM_WIFI_ERROR, NULL, NM_TYPE_WIFI_ERROR);
}
diff --git a/src/nm-device-wifi.h b/src/devices/wifi/nm-device-wifi.h
index 368d0b800..f0a1beacd 100644
--- a/src/nm-device-wifi.h
+++ b/src/devices/wifi/nm-device-wifi.h
@@ -26,7 +26,6 @@
#include <dbus/dbus.h>
#include <net/ethernet.h>
-#include "nm-rfkill.h"
#include "nm-device.h"
#include "nm-wifi-ap.h"
@@ -51,14 +50,13 @@ typedef enum {
NM_WIFI_ERROR_ADHOC_MODE_UNSUPPORTED, /*< nick=AdhocModeUnsupported >*/
} NMWifiError;
-#define NM_DEVICE_WIFI_HW_ADDRESS "hw-address"
#define NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_WIFI_MODE "mode"
#define NM_DEVICE_WIFI_BITRATE "bitrate"
+#define NM_DEVICE_WIFI_ACCESS_POINTS "access-points"
#define NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT "active-access-point"
#define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities"
#define NM_DEVICE_WIFI_SCANNING "scanning"
-#define NM_DEVICE_WIFI_IPW_RFKILL_STATE "ipw-rfkill-state"
#ifndef NM_DEVICE_WIFI_DEFINED
#define NM_DEVICE_WIFI_DEFINED
@@ -83,21 +81,13 @@ struct _NMDeviceWifiClass
/* Signals */
void (*access_point_added) (NMDeviceWifi *device, NMAccessPoint *ap);
void (*access_point_removed) (NMDeviceWifi *device, NMAccessPoint *ap);
- void (*hidden_ap_found) (NMDeviceWifi *device, NMAccessPoint *ap);
- void (*properties_changed) (NMDeviceWifi *device, GHashTable *properties);
gboolean (*scanning_allowed) (NMDeviceWifi *device);
};
GType nm_device_wifi_get_type (void);
-NMDevice *nm_device_wifi_new (const char *udi,
- const char *iface,
- const char *driver);
-
-NMAccessPoint * nm_device_wifi_get_activation_ap (NMDeviceWifi *self);
-
-RfKillState nm_device_wifi_get_ipw_rfkill_state (NMDeviceWifi *self);
+NMDevice *nm_device_wifi_new (NMPlatformLink *platform_device);
G_END_DECLS
diff --git a/src/nm-wifi-ap-utils.c b/src/devices/wifi/nm-wifi-ap-utils.c
index 29aa52a4d..9b03cbd45 100644
--- a/src/nm-wifi-ap-utils.c
+++ b/src/devices/wifi/nm-wifi-ap-utils.c
@@ -156,7 +156,7 @@ verify_no_wpa (NMSettingWirelessSecurity *s_wsec,
const char *pw;
pw = nm_setting_wireless_security_get_pairwise (s_wsec, i);
- if (strcmp (pw, "wep40") && strcmp (pw, "wep104")) {
+ if (!strcmp (pw, "tkip") || !strcmp (pw, "ccmp")) {
g_set_error (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
@@ -302,7 +302,7 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
/* Ad-Hoc WPA requires 'wpa' proto, 'none' pairwise, and 'tkip' group */
n = nm_setting_wireless_security_get_num_protos (s_wsec);
tmp = (n > 0) ? nm_setting_wireless_security_get_proto (s_wsec, 0) : NULL;
- if (n > 1 || strcmp (tmp, "wpa")) {
+ if (n > 1 || !tmp || strcmp (tmp, "wpa")) {
g_set_error_literal (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
@@ -312,7 +312,7 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
n = nm_setting_wireless_security_get_num_pairwise (s_wsec);
tmp = (n > 0) ? nm_setting_wireless_security_get_pairwise (s_wsec, 0) : NULL;
- if (n > 1 || strcmp (tmp, "none")) {
+ if (n > 1 || g_strcmp0 (tmp, "none")) {
g_set_error_literal (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
@@ -322,7 +322,7 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
n = nm_setting_wireless_security_get_num_groups (s_wsec);
tmp = (n > 0) ? nm_setting_wireless_security_get_group (s_wsec, 0) : NULL;
- if (n > 1 || strcmp (tmp, "tkip")) {
+ if (n > 1 || !tmp || strcmp (tmp, "tkip")) {
g_set_error_literal (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
@@ -547,7 +547,7 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
&& (ap_wpa_flags == NM_802_11_AP_SEC_NONE)
&& (ap_rsn_flags == NM_802_11_AP_SEC_NONE)) {
/* Make sure the connection doesn't specify security */
- if (nm_setting_wireless_get_security (s_wifi) || s_wsec || s_8021x) {
+ if (s_wsec || s_8021x) {
g_set_error_literal (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
@@ -558,9 +558,6 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
}
/* Everything else requires security */
- g_object_set (G_OBJECT (s_wifi),
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
- NULL);
if (!s_wsec) {
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
@@ -613,10 +610,6 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
NULL);
- nm_setting_wireless_security_add_pairwise (s_wsec, "wep40");
- nm_setting_wireless_security_add_pairwise (s_wsec, "wep104");
- nm_setting_wireless_security_add_group (s_wsec, "wep40");
- nm_setting_wireless_security_add_group (s_wsec, "wep104");
if (s_8021x) {
/* Dynamic WEP requires a valid 802.1x setting since we can't
diff --git a/src/nm-wifi-ap-utils.h b/src/devices/wifi/nm-wifi-ap-utils.h
index 992b839d5..992b839d5 100644
--- a/src/nm-wifi-ap-utils.h
+++ b/src/devices/wifi/nm-wifi-ap-utils.h
diff --git a/src/nm-wifi-ap.c b/src/devices/wifi/nm-wifi-ap.c
index e6db69209..363be2e32 100644
--- a/src/nm-wifi-ap.c
+++ b/src/devices/wifi/nm-wifi-ap.c
@@ -30,7 +30,6 @@
#include "nm-logging.h"
#include "nm-dbus-manager.h"
-#include "nm-properties-changed-signal.h"
#include "nm-setting-wireless.h"
#include "nm-glib-compat.h"
@@ -60,7 +59,7 @@ typedef struct
gboolean fake; /* Whether or not the AP is from a scan */
gboolean hotspot; /* Whether the AP is a local device's hotspot network */
gboolean broadcast; /* Whether or not the AP is broadcasting (hidden) */
- glong last_seen; /* Last time the AP was seen in a scan in seconds */
+ gint32 last_seen; /* Timestamp when the AP was seen lastly (obtained via nm_utils_get_monotonic_timestamp_s()) */
} NMAccessPointPrivate;
#define NM_AP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AP, NMAccessPointPrivate))
@@ -68,14 +67,6 @@ typedef struct
G_DEFINE_TYPE (NMAccessPoint, nm_ap, G_TYPE_OBJECT)
enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
PROP_0,
PROP_FLAGS,
PROP_WPA_FLAGS,
@@ -304,21 +295,15 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
G_MININT8, G_MAXINT8, 0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMAccessPointClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (ap_class),
- &dbus_glib_nm_access_point_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (ap_class),
+ &dbus_glib_nm_access_point_object_info);
}
void
nm_ap_export_to_dbus (NMAccessPoint *ap)
{
NMAccessPointPrivate *priv;
- NMDBusManager *mgr;
- DBusGConnection *g_connection;
static guint32 counter = 0;
g_return_if_fail (NM_IS_AP (ap));
@@ -330,16 +315,8 @@ nm_ap_export_to_dbus (NMAccessPoint *ap)
return;
}
- mgr = nm_dbus_manager_get ();
- g_assert (mgr);
-
- g_connection = nm_dbus_manager_get_connection (mgr);
- g_assert (g_connection);
-
priv->dbus_path = g_strdup_printf (NM_DBUS_PATH_ACCESS_POINT "/%d", counter++);
- dbus_g_connection_register_g_object (g_connection, priv->dbus_path, G_OBJECT (ap));
-
- g_object_unref (mgr);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->dbus_path, ap);
}
/*
@@ -359,10 +336,6 @@ pair_to_flags (const char *str)
{
g_return_val_if_fail (str != NULL, NM_802_11_AP_SEC_NONE);
- if (strcmp (str, "wep40") == 0)
- return NM_802_11_AP_SEC_PAIR_WEP40;
- if (strcmp (str, "wep104") == 0)
- return NM_802_11_AP_SEC_PAIR_WEP104;
if (strcmp (str, "tkip") == 0)
return NM_802_11_AP_SEC_PAIR_TKIP;
if (strcmp (str, "ccmp") == 0)
@@ -531,7 +504,7 @@ nm_ap_new_from_properties (const char *supplicant_path, GHashTable *properties)
return NULL;
}
- nm_ap_set_last_seen (ap, (guint32) time (NULL));
+ nm_ap_set_last_seen (ap, nm_utils_get_monotonic_timestamp_s ());
if (!nm_ap_get_ssid (ap))
nm_ap_set_broadcast (ap, FALSE);
@@ -756,7 +729,6 @@ nm_ap_dump (NMAccessPoint *ap, const char *prefix)
{
NMAccessPointPrivate *priv;
- g_return_if_fail (ap != NULL);
g_return_if_fail (NM_IS_AP (ap));
priv = NM_AP_GET_PRIVATE (ap);
@@ -773,7 +745,7 @@ nm_ap_dump (NMAccessPoint *ap, const char *prefix)
nm_log_dbg (LOGD_WIFI_SCAN, " quality %d", priv->strength);
nm_log_dbg (LOGD_WIFI_SCAN, " frequency %d", priv->freq);
nm_log_dbg (LOGD_WIFI_SCAN, " max rate %d", priv->max_bitrate);
- nm_log_dbg (LOGD_WIFI_SCAN, " last-seen %ld", priv->last_seen);
+ nm_log_dbg (LOGD_WIFI_SCAN, " last-seen %d", (int) priv->last_seen);
}
const char *
@@ -822,7 +794,7 @@ nm_ap_set_ssid (NMAccessPoint *ap, const GByteArray * ssid)
priv = NM_AP_GET_PRIVATE (ap);
- if ((ssid == priv->ssid) && ssid == NULL)
+ if (ssid == priv->ssid)
return;
/* same SSID */
@@ -1051,7 +1023,7 @@ nm_ap_set_freq (NMAccessPoint *ap,
/*
- * Get/set functions for max bitrate
+ * Get/set functions for max bitrate (in kbit/s)
*
*/
guint32 nm_ap_get_max_bitrate (NMAccessPoint *ap)
@@ -1123,14 +1095,16 @@ void nm_ap_set_broadcast (NMAccessPoint *ap, gboolean broadcast)
* APs older than a certain date are dropped from the list.
*
*/
-glong nm_ap_get_last_seen (const NMAccessPoint *ap)
+gint32
+nm_ap_get_last_seen (const NMAccessPoint *ap)
{
g_return_val_if_fail (NM_IS_AP (ap), FALSE);
return NM_AP_GET_PRIVATE (ap)->last_seen;
}
-void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen)
+void
+nm_ap_set_last_seen (NMAccessPoint *ap, gint32 last_seen)
{
g_return_if_fail (NM_IS_AP (ap));
diff --git a/src/nm-wifi-ap.h b/src/devices/wifi/nm-wifi-ap.h
index a1a0da920..f51fa078e 100644
--- a/src/nm-wifi-ap.h
+++ b/src/devices/wifi/nm-wifi-ap.h
@@ -51,8 +51,6 @@ typedef struct {
typedef struct {
GObjectClass parent;
- /* Signals */
- void (*properties_changed) (NMAccessPoint *ap, GHashTable *properties);
} NMAccessPointClass;
GType nm_ap_get_type (void);
@@ -103,8 +101,8 @@ void nm_ap_set_fake (NMAccessPoint *ap, gboolean fake);
gboolean nm_ap_get_broadcast (NMAccessPoint *ap);
void nm_ap_set_broadcast (NMAccessPoint *ap, gboolean broadcast);
-glong nm_ap_get_last_seen (const NMAccessPoint *ap);
-void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen);
+gint32 nm_ap_get_last_seen (const NMAccessPoint *ap);
+void nm_ap_set_last_seen (NMAccessPoint *ap, gint32 last_seen);
gboolean nm_ap_check_compatible (NMAccessPoint *self,
NMConnection *connection);
diff --git a/src/devices/wifi/nm-wifi-enum-types.c b/src/devices/wifi/nm-wifi-enum-types.c
new file mode 100644
index 000000000..e914cfd68
--- /dev/null
+++ b/src/devices/wifi/nm-wifi-enum-types.c
@@ -0,0 +1,58 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#include "nm-wifi-enum-types.h"
+
+#include "nm-device-wifi.h"
+#include "nm-wifi-ap.h"
+#include "nm-device-olpc-mesh.h"
+
+GType
+nm_wifi_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_WIFI_ERROR_CONNECTION_NOT_WIRELESS, "NM_WIFI_ERROR_CONNECTION_NOT_WIRELESS", "ConnectionNotWireless" },
+ { NM_WIFI_ERROR_CONNECTION_INVALID, "NM_WIFI_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE, "NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_WIFI_ERROR_ACCESS_POINT_NOT_FOUND, "NM_WIFI_ERROR_ACCESS_POINT_NOT_FOUND", "AccessPointNotFound" },
+ { NM_WIFI_ERROR_SCAN_NOT_ALLOWED, "NM_WIFI_ERROR_SCAN_NOT_ALLOWED", "ScanNotAllowed" },
+ { NM_WIFI_ERROR_AP_MODE_UNSUPPORTED, "NM_WIFI_ERROR_AP_MODE_UNSUPPORTED", "ApModeUnsupported" },
+ { NM_WIFI_ERROR_ADHOC_MODE_UNSUPPORTED, "NM_WIFI_ERROR_ADHOC_MODE_UNSUPPORTED", "AdhocModeUnsupported" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMWifiError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_olpc_mesh_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_OLPC_MESH_ERROR_CONNECTION_NOT_MESH, "NM_OLPC_MESH_ERROR_CONNECTION_NOT_MESH", "ConnectionNotMesh" },
+ { NM_OLPC_MESH_ERROR_CONNECTION_INVALID, "NM_OLPC_MESH_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_OLPC_MESH_ERROR_CONNECTION_INCOMPATIBLE, "NM_OLPC_MESH_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMOlpcMeshError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+
+
diff --git a/src/devices/wifi/nm-wifi-enum-types.h b/src/devices/wifi/nm-wifi-enum-types.h
new file mode 100644
index 000000000..d4dca5bf9
--- /dev/null
+++ b/src/devices/wifi/nm-wifi-enum-types.h
@@ -0,0 +1,21 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#ifndef __NM_WIFI_ENUM_TYPES_H__
+#define __NM_WIFI_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+GType nm_wifi_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_WIFI_ERROR (nm_wifi_error_get_type ())
+GType nm_olpc_mesh_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_OLPC_MESH_ERROR (nm_olpc_mesh_error_get_type ())
+G_END_DECLS
+
+#endif /* __NM_WIFI_ENUM_TYPES_H__ */
+
+
+
diff --git a/src/devices/wifi/nm-wifi-factory.c b/src/devices/wifi/nm-wifi-factory.c
new file mode 100644
index 000000000..02ad93f46
--- /dev/null
+++ b/src/devices/wifi/nm-wifi-factory.c
@@ -0,0 +1,89 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2011 - 2014 Red Hat, Inc.
+ */
+
+#include <gmodule.h>
+
+#include "nm-device-factory.h"
+#include "nm-device-wifi.h"
+#include "nm-device-olpc-mesh.h"
+#include "nm-settings-connection.h"
+
+#define NM_TYPE_WIFI_FACTORY (nm_wifi_factory_get_type ())
+#define NM_WIFI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIFI_FACTORY, NMWifiFactory))
+
+typedef struct {
+ GObject parent;
+} NMWifiFactory;
+
+typedef struct {
+ GObjectClass parent;
+} NMWifiFactoryClass;
+
+static GType nm_wifi_factory_get_type (void);
+
+static void device_factory_interface_init (NMDeviceFactory *factory_iface);
+
+G_DEFINE_TYPE_EXTENDED (NMWifiFactory, nm_wifi_factory, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
+
+/**************************************************************************/
+
+#define PLUGIN_TYPE NM_DEVICE_TYPE_WIFI
+
+G_MODULE_EXPORT NMDeviceFactory *
+nm_device_factory_create (GError **error)
+{
+ return (NMDeviceFactory *) g_object_new (NM_TYPE_WIFI_FACTORY, NULL);
+}
+
+G_MODULE_EXPORT NMDeviceType
+nm_device_factory_get_device_type (void)
+{
+ return PLUGIN_TYPE;
+}
+
+/**************************************************************************/
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_WIFI)
+ return nm_device_wifi_new (plink);
+ else if (plink->type == NM_LINK_TYPE_OLPC_MESH)
+ return nm_device_olpc_mesh_new (plink);
+ return NULL;
+}
+
+static void
+device_factory_interface_init (NMDeviceFactory *factory_iface)
+{
+ factory_iface->new_link = new_link;
+}
+
+static void
+nm_wifi_factory_init (NMWifiFactory *self)
+{
+}
+
+static void
+nm_wifi_factory_class_init (NMWifiFactoryClass *wf_class)
+{
+}
+
diff --git a/src/devices/wifi/tests/Makefile.am b/src/devices/wifi/tests/Makefile.am
new file mode 100644
index 000000000..2667c5f12
--- /dev/null
+++ b/src/devices/wifi/tests/Makefile.am
@@ -0,0 +1,28 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src/platform \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/devices/wifi \
+ -I$(top_builddir)/src \
+ -DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+noinst_PROGRAMS = test-wifi-ap-utils
+
+test_wifi_ap_utils_SOURCES = \
+ test-wifi-ap-utils.c \
+ $(srcdir)/../nm-wifi-ap.c \
+ $(srcdir)/../nm-wifi-ap.h \
+ $(srcdir)/../nm-wifi-ap-utils.c \
+ $(srcdir)/../nm-wifi-ap-utils.h
+
+test_wifi_ap_utils_LDADD = $(top_builddir)/src/libNetworkManager.la
+
+TESTS = test-wifi-ap-utils
+
diff --git a/src/bluez-manager/Makefile.in b/src/devices/wifi/tests/Makefile.in
index f72768a60..c0e75eedf 100644
--- a/src/bluez-manager/Makefile.in
+++ b/src/devices/wifi/tests/Makefile.in
@@ -78,19 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@WITH_BLUEZ4_TRUE@am__append_1 = \
-@WITH_BLUEZ4_TRUE@ nm-bluez4-adapter.h \
-@WITH_BLUEZ4_TRUE@ nm-bluez4-adapter.c \
-@WITH_BLUEZ4_TRUE@ nm-bluez4-manager.c
-
-@WITH_BLUEZ4_FALSE@am__append_2 = \
-@WITH_BLUEZ4_FALSE@ nm-bluez-manager.c
-
-subdir = src/bluez-manager
+noinst_PROGRAMS = test-wifi-ap-utils$(EXEEXT)
+TESTS = test-wifi-ap-utils$(EXEEXT)
+subdir = src/devices/wifi/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -108,25 +103,12 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libbluez_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__libbluez_manager_la_SOURCES_DIST = nm-bluez-common.h \
- nm-bluez-device.c nm-bluez-device.h nm-bluez-manager.h \
- nm-bluez4-adapter.h nm-bluez4-adapter.c nm-bluez4-manager.c \
- nm-bluez-manager.c
-@WITH_BLUEZ4_TRUE@am__objects_1 = \
-@WITH_BLUEZ4_TRUE@ libbluez_manager_la-nm-bluez4-adapter.lo \
-@WITH_BLUEZ4_TRUE@ libbluez_manager_la-nm-bluez4-manager.lo
-@WITH_BLUEZ4_FALSE@am__objects_2 = \
-@WITH_BLUEZ4_FALSE@ libbluez_manager_la-nm-bluez-manager.lo
-am_libbluez_manager_la_OBJECTS = \
- libbluez_manager_la-nm-bluez-device.lo $(am__objects_1) \
- $(am__objects_2)
-libbluez_manager_la_OBJECTS = $(am_libbluez_manager_la_OBJECTS)
+PROGRAMS = $(noinst_PROGRAMS)
+am_test_wifi_ap_utils_OBJECTS = test-wifi-ap-utils.$(OBJEXT) \
+ nm-wifi-ap.$(OBJEXT) nm-wifi-ap-utils.$(OBJEXT)
+test_wifi_ap_utils_OBJECTS = $(am_test_wifi_ap_utils_OBJECTS)
+test_wifi_ap_utils_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -165,8 +147,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libbluez_manager_la_SOURCES)
-DIST_SOURCES = $(am__libbluez_manager_la_SOURCES_DIST)
+SOURCES = $(test_wifi_ap_utils_SOURCES)
+DIST_SOURCES = $(test_wifi_ap_utils_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -191,6 +173,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -217,12 +221,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -247,7 +254,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -292,12 +298,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -314,6 +324,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -341,11 +353,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -360,6 +377,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -422,6 +440,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -432,36 +451,30 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libbluez-manager.la
-libbluez_manager_la_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- $(DBUS_CFLAGS) \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src/platform \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/devices/wifi \
+ -I$(top_builddir)/src \
+ -DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(BLUEZ_CFLAGS) \
- -DBINDIR=\"$(bindir)\" \
- -DDATADIR=\"$(datadir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DLOCALSTATEDIR=\"$(localstatedir)\"
-
-libbluez_manager_la_SOURCES = nm-bluez-common.h nm-bluez-device.c \
- nm-bluez-device.h nm-bluez-manager.h $(am__append_1) \
- $(am__append_2)
-libbluez_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS) \
- $(BLUEZ_LIBS)
+ $(DBUS_CFLAGS)
+
+test_wifi_ap_utils_SOURCES = \
+ test-wifi-ap-utils.c \
+ $(srcdir)/../nm-wifi-ap.c \
+ $(srcdir)/../nm-wifi-ap.h \
+ $(srcdir)/../nm-wifi-ap-utils.c \
+ $(srcdir)/../nm-wifi-ap-utils.h
+test_wifi_ap_utils_LDADD = $(top_builddir)/src/libNetworkManager.la
all: all-am
.SUFFIXES:
@@ -475,9 +488,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/bluez-manager/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/devices/wifi/tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/bluez-manager/Makefile
+ $(AUTOMAKE) --gnu src/devices/wifi/tests/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -497,19 +510,18 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
-libbluez-manager.la: $(libbluez_manager_la_OBJECTS) $(libbluez_manager_la_DEPENDENCIES) $(EXTRA_libbluez_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libbluez_manager_la_OBJECTS) $(libbluez_manager_la_LIBADD) $(LIBS)
+test-wifi-ap-utils$(EXEEXT): $(test_wifi_ap_utils_OBJECTS) $(test_wifi_ap_utils_DEPENDENCIES) $(EXTRA_test_wifi_ap_utils_DEPENDENCIES)
+ @rm -f test-wifi-ap-utils$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_wifi_ap_utils_OBJECTS) $(test_wifi_ap_utils_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -517,10 +529,9 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbluez_manager_la-nm-bluez-device.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbluez_manager_la-nm-bluez-manager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbluez_manager_la-nm-bluez4-adapter.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbluez_manager_la-nm-bluez4-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wifi-ap-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wifi-ap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wifi-ap-utils.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -543,33 +554,33 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libbluez_manager_la-nm-bluez-device.lo: nm-bluez-device.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libbluez_manager_la-nm-bluez-device.lo -MD -MP -MF $(DEPDIR)/libbluez_manager_la-nm-bluez-device.Tpo -c -o libbluez_manager_la-nm-bluez-device.lo `test -f 'nm-bluez-device.c' || echo '$(srcdir)/'`nm-bluez-device.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbluez_manager_la-nm-bluez-device.Tpo $(DEPDIR)/libbluez_manager_la-nm-bluez-device.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-bluez-device.c' object='libbluez_manager_la-nm-bluez-device.lo' libtool=yes @AMDEPBACKSLASH@
+nm-wifi-ap.o: $(srcdir)/../nm-wifi-ap.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-wifi-ap.o -MD -MP -MF $(DEPDIR)/nm-wifi-ap.Tpo -c -o nm-wifi-ap.o `test -f '$(srcdir)/../nm-wifi-ap.c' || echo '$(srcdir)/'`$(srcdir)/../nm-wifi-ap.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-wifi-ap.Tpo $(DEPDIR)/nm-wifi-ap.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../nm-wifi-ap.c' object='nm-wifi-ap.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libbluez_manager_la-nm-bluez-device.lo `test -f 'nm-bluez-device.c' || echo '$(srcdir)/'`nm-bluez-device.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-wifi-ap.o `test -f '$(srcdir)/../nm-wifi-ap.c' || echo '$(srcdir)/'`$(srcdir)/../nm-wifi-ap.c
-libbluez_manager_la-nm-bluez4-adapter.lo: nm-bluez4-adapter.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libbluez_manager_la-nm-bluez4-adapter.lo -MD -MP -MF $(DEPDIR)/libbluez_manager_la-nm-bluez4-adapter.Tpo -c -o libbluez_manager_la-nm-bluez4-adapter.lo `test -f 'nm-bluez4-adapter.c' || echo '$(srcdir)/'`nm-bluez4-adapter.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbluez_manager_la-nm-bluez4-adapter.Tpo $(DEPDIR)/libbluez_manager_la-nm-bluez4-adapter.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-bluez4-adapter.c' object='libbluez_manager_la-nm-bluez4-adapter.lo' libtool=yes @AMDEPBACKSLASH@
+nm-wifi-ap.obj: $(srcdir)/../nm-wifi-ap.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-wifi-ap.obj -MD -MP -MF $(DEPDIR)/nm-wifi-ap.Tpo -c -o nm-wifi-ap.obj `if test -f '$(srcdir)/../nm-wifi-ap.c'; then $(CYGPATH_W) '$(srcdir)/../nm-wifi-ap.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../nm-wifi-ap.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-wifi-ap.Tpo $(DEPDIR)/nm-wifi-ap.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../nm-wifi-ap.c' object='nm-wifi-ap.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libbluez_manager_la-nm-bluez4-adapter.lo `test -f 'nm-bluez4-adapter.c' || echo '$(srcdir)/'`nm-bluez4-adapter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-wifi-ap.obj `if test -f '$(srcdir)/../nm-wifi-ap.c'; then $(CYGPATH_W) '$(srcdir)/../nm-wifi-ap.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../nm-wifi-ap.c'; fi`
-libbluez_manager_la-nm-bluez4-manager.lo: nm-bluez4-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libbluez_manager_la-nm-bluez4-manager.lo -MD -MP -MF $(DEPDIR)/libbluez_manager_la-nm-bluez4-manager.Tpo -c -o libbluez_manager_la-nm-bluez4-manager.lo `test -f 'nm-bluez4-manager.c' || echo '$(srcdir)/'`nm-bluez4-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbluez_manager_la-nm-bluez4-manager.Tpo $(DEPDIR)/libbluez_manager_la-nm-bluez4-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-bluez4-manager.c' object='libbluez_manager_la-nm-bluez4-manager.lo' libtool=yes @AMDEPBACKSLASH@
+nm-wifi-ap-utils.o: $(srcdir)/../nm-wifi-ap-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-wifi-ap-utils.o -MD -MP -MF $(DEPDIR)/nm-wifi-ap-utils.Tpo -c -o nm-wifi-ap-utils.o `test -f '$(srcdir)/../nm-wifi-ap-utils.c' || echo '$(srcdir)/'`$(srcdir)/../nm-wifi-ap-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-wifi-ap-utils.Tpo $(DEPDIR)/nm-wifi-ap-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../nm-wifi-ap-utils.c' object='nm-wifi-ap-utils.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libbluez_manager_la-nm-bluez4-manager.lo `test -f 'nm-bluez4-manager.c' || echo '$(srcdir)/'`nm-bluez4-manager.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-wifi-ap-utils.o `test -f '$(srcdir)/../nm-wifi-ap-utils.c' || echo '$(srcdir)/'`$(srcdir)/../nm-wifi-ap-utils.c
-libbluez_manager_la-nm-bluez-manager.lo: nm-bluez-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libbluez_manager_la-nm-bluez-manager.lo -MD -MP -MF $(DEPDIR)/libbluez_manager_la-nm-bluez-manager.Tpo -c -o libbluez_manager_la-nm-bluez-manager.lo `test -f 'nm-bluez-manager.c' || echo '$(srcdir)/'`nm-bluez-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbluez_manager_la-nm-bluez-manager.Tpo $(DEPDIR)/libbluez_manager_la-nm-bluez-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-bluez-manager.c' object='libbluez_manager_la-nm-bluez-manager.lo' libtool=yes @AMDEPBACKSLASH@
+nm-wifi-ap-utils.obj: $(srcdir)/../nm-wifi-ap-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-wifi-ap-utils.obj -MD -MP -MF $(DEPDIR)/nm-wifi-ap-utils.Tpo -c -o nm-wifi-ap-utils.obj `if test -f '$(srcdir)/../nm-wifi-ap-utils.c'; then $(CYGPATH_W) '$(srcdir)/../nm-wifi-ap-utils.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../nm-wifi-ap-utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-wifi-ap-utils.Tpo $(DEPDIR)/nm-wifi-ap-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../nm-wifi-ap-utils.c' object='nm-wifi-ap-utils.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbluez_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libbluez_manager_la-nm-bluez-manager.lo `test -f 'nm-bluez-manager.c' || echo '$(srcdir)/'`nm-bluez-manager.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-wifi-ap-utils.obj `if test -f '$(srcdir)/../nm-wifi-ap-utils.c'; then $(CYGPATH_W) '$(srcdir)/../nm-wifi-ap-utils.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../nm-wifi-ap-utils.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
@@ -629,6 +640,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -660,8 +764,9 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
@@ -695,7 +800,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
@@ -764,11 +869,11 @@ ps-am:
uninstall-am:
-.MAKE: install-am install-strip
+.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
diff --git a/src/tests/test-wifi-ap-utils.c b/src/devices/wifi/tests/test-wifi-ap-utils.c
index faa023fc7..36d58f2a8 100644
--- a/src/tests/test-wifi-ap-utils.c
+++ b/src/devices/wifi/tests/test-wifi-ap-utils.c
@@ -218,8 +218,7 @@ fill_8021x (NMConnection *connection, const KeyData items[])
static NMConnection *
create_basic (const char *ssid,
const guint8 *bssid,
- NM80211Mode mode,
- gboolean set_security)
+ NM80211Mode mode)
{
NMConnection *connection;
NMSettingWireless *s_wifi = NULL;
@@ -251,9 +250,6 @@ create_basic (const char *ssid,
else
g_assert_not_reached ();
- if (set_security)
- g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NULL);
-
return connection;
}
@@ -274,7 +270,7 @@ test_lock_bssid (void)
NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE,
TRUE,
src, &error);
- expected = create_basic (ssid, bssid, NM_802_11_MODE_INFRA, FALSE);
+ expected = create_basic (ssid, bssid, NM_802_11_MODE_INFRA);
COMPARE (src, expected, success, error, 0, 0);
g_object_unref (src);
@@ -302,7 +298,7 @@ test_open_ap_empty_connection (void)
NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE,
FALSE,
src, &error);
- expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA, FALSE);
+ expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA);
COMPARE (src, expected, success, error, 0, 0);
g_object_unref (src);
@@ -312,7 +308,7 @@ test_open_ap_empty_connection (void)
/*******************************************/
static void
-test_open_ap_leap_connection_1 (gboolean add_wifi)
+test_open_ap_leap_connection_1 (gconstpointer add_wifi)
{
NMConnection *src;
const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
@@ -374,7 +370,7 @@ test_open_ap_leap_connection_2 (void)
/*******************************************/
static void
-test_open_ap_wep_connection (gboolean add_wifi)
+test_open_ap_wep_connection (gconstpointer add_wifi)
{
NMConnection *src;
const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
@@ -422,7 +418,6 @@ test_ap_wpa_psk_connection_base (const char *key_mgmt,
const KeyData exp_wifi[] = {
{ NM_SETTING_WIRELESS_SSID, ssid, 0 },
{ NM_SETTING_WIRELESS_MODE, "infrastructure", 0 },
- { NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, 0 },
{ NULL } };
const KeyData both_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, key_mgmt, 0 },
@@ -660,8 +655,10 @@ error_code_for_idx (guint32 idx, guint num)
}
static void
-test_ap_wpa_eap_connection_1 (guint32 idx)
+test_ap_wpa_eap_connection_1 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
+
test_ap_wpa_eap_connection_base (NULL, NULL,
flags_for_idx (idx),
wpa_flags_for_idx (idx),
@@ -672,8 +669,10 @@ test_ap_wpa_eap_connection_1 (guint32 idx)
}
static void
-test_ap_wpa_eap_connection_2 (guint idx)
+test_ap_wpa_eap_connection_2 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
+
test_ap_wpa_eap_connection_base (NULL, NULL,
flags_for_idx (idx),
wpa_flags_for_idx (idx),
@@ -684,8 +683,10 @@ test_ap_wpa_eap_connection_2 (guint idx)
}
static void
-test_ap_wpa_eap_connection_3 (guint idx)
+test_ap_wpa_eap_connection_3 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
+
test_ap_wpa_eap_connection_base (NULL, "open",
flags_for_idx (idx),
wpa_flags_for_idx (idx),
@@ -696,8 +697,10 @@ test_ap_wpa_eap_connection_3 (guint idx)
}
static void
-test_ap_wpa_eap_connection_4 (guint idx)
+test_ap_wpa_eap_connection_4 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
+
test_ap_wpa_eap_connection_base (NULL, "shared",
flags_for_idx (idx),
wpa_flags_for_idx (idx),
@@ -708,8 +711,10 @@ test_ap_wpa_eap_connection_4 (guint idx)
}
static void
-test_ap_wpa_eap_connection_5 (guint idx)
+test_ap_wpa_eap_connection_5 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
+
test_ap_wpa_eap_connection_base ("wpa-eap", "open",
flags_for_idx (idx),
wpa_flags_for_idx (idx),
@@ -745,7 +750,7 @@ test_priv_ap_empty_connection (void)
src, &error);
/* Static WEP connection expected */
- expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA, TRUE);
+ expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA);
fill_wsec (expected, exp_wsec);
COMPARE (src, expected, success, error, 0, 0);
@@ -756,7 +761,7 @@ test_priv_ap_empty_connection (void)
/*******************************************/
static void
-test_priv_ap_leap_connection_1 (gboolean add_wifi)
+test_priv_ap_leap_connection_1 (gconstpointer add_wifi)
{
NMConnection *src, *expected;
const char *ssid = "blahblah";
@@ -792,7 +797,7 @@ test_priv_ap_leap_connection_1 (gboolean add_wifi)
* there's no way to determine from the AP's beacon whether it's static WEP,
* dynamic WEP, or LEAP.
*/
- expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA, TRUE);
+ expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA);
fill_wsec (expected, exp_wsec);
COMPARE (src, expected, success, error, 0, 0);
@@ -852,10 +857,6 @@ test_priv_ap_dynamic_wep_1 (void)
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
- { NM_SETTING_WIRELESS_SECURITY_PAIRWISE, "wep40", 0 },
- { NM_SETTING_WIRELESS_SECURITY_PAIRWISE, "wep104", 0 },
- { NM_SETTING_WIRELESS_SECURITY_GROUP, "wep40", 0 },
- { NM_SETTING_WIRELESS_SECURITY_GROUP, "wep104", 0 },
{ NULL } };
gboolean success;
GError *error = NULL;
@@ -876,7 +877,7 @@ test_priv_ap_dynamic_wep_1 (void)
src, &error);
/* We expect a completed Dynamic WEP connection */
- expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA, TRUE);
+ expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA);
fill_wsec (expected, exp_wsec);
fill_8021x (expected, both_8021x);
COMPARE (src, expected, success, error, 0, 0);
@@ -903,10 +904,6 @@ test_priv_ap_dynamic_wep_2 (void)
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
- { NM_SETTING_WIRELESS_SECURITY_PAIRWISE, "wep40", 0 },
- { NM_SETTING_WIRELESS_SECURITY_PAIRWISE, "wep104", 0 },
- { NM_SETTING_WIRELESS_SECURITY_GROUP, "wep40", 0 },
- { NM_SETTING_WIRELESS_SECURITY_GROUP, "wep104", 0 },
{ NULL } };
gboolean success;
GError *error = NULL;
@@ -927,7 +924,7 @@ test_priv_ap_dynamic_wep_2 (void)
src, &error);
/* We expect a completed Dynamic WEP connection */
- expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA, TRUE);
+ expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA);
fill_wsec (expected, exp_wsec);
fill_8021x (expected, both_8021x);
COMPARE (src, expected, success, error, 0, 0);
@@ -1050,8 +1047,9 @@ test_priv_ap_wpa_psk_connection_5 (void)
/*******************************************/
static void
-test_wpa_ap_empty_connection (guint idx)
+test_wpa_ap_empty_connection (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *src, *expected;
const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
const char *ssid = "blahblah";
@@ -1075,7 +1073,7 @@ test_wpa_ap_empty_connection (guint idx)
FALSE, src, &error);
/* WPA connection expected */
- expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA, TRUE);
+ expected = create_basic (ssid, NULL, NM_802_11_MODE_INFRA);
fill_wsec (expected, exp_wsec);
COMPARE (src, expected, success, error, 0, 0);
@@ -1086,8 +1084,9 @@ test_wpa_ap_empty_connection (guint idx)
/*******************************************/
static void
-test_wpa_ap_leap_connection_1 (guint idx)
+test_wpa_ap_leap_connection_1 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *src;
const char *ssid = "blahblah";
const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
@@ -1121,8 +1120,9 @@ test_wpa_ap_leap_connection_1 (guint idx)
/*******************************************/
static void
-test_wpa_ap_leap_connection_2 (guint idx)
+test_wpa_ap_leap_connection_2 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *src;
const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
const KeyData src_wsec[] = {
@@ -1154,8 +1154,9 @@ test_wpa_ap_leap_connection_2 (guint idx)
/*******************************************/
static void
-test_wpa_ap_dynamic_wep_connection (guint idx)
+test_wpa_ap_dynamic_wep_connection (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *src;
const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
const KeyData src_wsec[] = {
@@ -1186,8 +1187,9 @@ test_wpa_ap_dynamic_wep_connection (guint idx)
/*******************************************/
static void
-test_wpa_ap_wpa_psk_connection_1 (guint idx)
+test_wpa_ap_wpa_psk_connection_1 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *expected;
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", 0 },
@@ -1205,8 +1207,9 @@ test_wpa_ap_wpa_psk_connection_1 (guint idx)
}
static void
-test_wpa_ap_wpa_psk_connection_2 (guint idx)
+test_wpa_ap_wpa_psk_connection_2 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *expected;
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", 0 },
@@ -1224,8 +1227,9 @@ test_wpa_ap_wpa_psk_connection_2 (guint idx)
}
static void
-test_wpa_ap_wpa_psk_connection_3 (guint idx)
+test_wpa_ap_wpa_psk_connection_3 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *expected;
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", 0 },
@@ -1243,8 +1247,9 @@ test_wpa_ap_wpa_psk_connection_3 (guint idx)
}
static void
-test_wpa_ap_wpa_psk_connection_4 (guint idx)
+test_wpa_ap_wpa_psk_connection_4 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
test_ap_wpa_psk_connection_base (NULL, "shared",
NM_802_11_AP_FLAGS_PRIVACY,
wpa_flags_for_idx (idx),
@@ -1253,8 +1258,9 @@ test_wpa_ap_wpa_psk_connection_4 (guint idx)
}
static void
-test_wpa_ap_wpa_psk_connection_5 (guint idx)
+test_wpa_ap_wpa_psk_connection_5 (gconstpointer data)
{
+ guint idx = GPOINTER_TO_UINT (data);
NMConnection *expected;
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", 0 },
@@ -1324,117 +1330,216 @@ test_strength_wext (void)
/*******************************************/
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
-
-#define TESTCASE(t, d) g_test_create_case (#t, 0, (gconstpointer) d, NULL, (TCFunc) t, NULL)
-
-int main (int argc, char **argv)
+int
+main (int argc, char **argv)
{
- GTestSuite *suite;
gsize i;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
- g_test_init (&argc, &argv, NULL);
+#endif
- suite = g_test_get_root ();
+ g_test_init (&argc, &argv, NULL);
- g_test_suite_add (suite, TESTCASE (test_lock_bssid, NULL));
+ g_test_add_func ("/wifi/lock_bssid",
+ test_lock_bssid);
/* Open AP tests; make sure that connections to be completed that have
* various security-related settings already set cause the completion
* to fail.
*/
- g_test_suite_add (suite, TESTCASE (test_open_ap_empty_connection, NULL));
- g_test_suite_add (suite, TESTCASE (test_open_ap_leap_connection_1, TRUE));
- g_test_suite_add (suite, TESTCASE (test_open_ap_leap_connection_1, FALSE));
- g_test_suite_add (suite, TESTCASE (test_open_ap_leap_connection_2, NULL));
- g_test_suite_add (suite, TESTCASE (test_open_ap_wep_connection, TRUE));
- g_test_suite_add (suite, TESTCASE (test_open_ap_wep_connection, FALSE));
-
- g_test_suite_add (suite, TESTCASE (test_open_ap_wpa_psk_connection_1, NULL));
- g_test_suite_add (suite, TESTCASE (test_open_ap_wpa_psk_connection_2, NULL));
- g_test_suite_add (suite, TESTCASE (test_open_ap_wpa_psk_connection_3, NULL));
- g_test_suite_add (suite, TESTCASE (test_open_ap_wpa_psk_connection_4, NULL));
- g_test_suite_add (suite, TESTCASE (test_open_ap_wpa_psk_connection_5, NULL));
-
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_1, IDX_OPEN));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_2, IDX_OPEN));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_3, IDX_OPEN));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_4, IDX_OPEN));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_5, IDX_OPEN));
+ g_test_add_func ("/wifi/open_ap/empty_connection",
+ test_open_ap_empty_connection);
+ g_test_add_data_func ("/wifi/open_ap/leap_connection/1",
+ (gconstpointer) TRUE,
+ test_open_ap_leap_connection_1);
+ g_test_add_data_func ("/wifi/open_ap/leap_connection/1_no_add_wifi",
+ (gconstpointer) FALSE,
+ test_open_ap_leap_connection_1);
+ g_test_add_func ("/wifi/open_ap/leap_connection/2",
+ test_open_ap_leap_connection_2);
+ g_test_add_data_func ("/wifi/open_ap/wep_connection",
+ (gconstpointer) TRUE,
+ test_open_ap_wep_connection);
+ g_test_add_data_func ("/wifi/open_ap/wep_connection",
+ (gconstpointer) FALSE,
+ test_open_ap_wep_connection);
+
+ g_test_add_func ("/wifi/open_ap/wpa_psk_connection/1",
+ test_open_ap_wpa_psk_connection_1);
+ g_test_add_func ("/wifi/open_ap/wpa_psk_connection/2",
+ test_open_ap_wpa_psk_connection_2);
+ g_test_add_func ("/wifi/open_ap/wpa_psk_connection/3",
+ test_open_ap_wpa_psk_connection_3);
+ g_test_add_func ("/wifi/open_ap/wpa_psk_connection/4",
+ test_open_ap_wpa_psk_connection_4);
+ g_test_add_func ("/wifi/open_ap/wpa_psk_connection/5",
+ test_open_ap_wpa_psk_connection_5);
+
+ g_test_add_data_func ("/wifi/open_ap/wpa_eap_connection/1",
+ (gconstpointer) IDX_OPEN,
+ test_ap_wpa_eap_connection_1);
+ g_test_add_data_func ("/wifi/open_ap/wpa_eap_connection/2",
+ (gconstpointer) IDX_OPEN,
+ test_ap_wpa_eap_connection_2);
+ g_test_add_data_func ("/wifi/open_ap/wpa_eap_connection/3",
+ (gconstpointer) IDX_OPEN,
+ test_ap_wpa_eap_connection_3);
+ g_test_add_data_func ("/wifi/open_ap/wpa_eap_connection/4",
+ (gconstpointer) IDX_OPEN,
+ test_ap_wpa_eap_connection_4);
+ g_test_add_data_func ("/wifi/open_ap/wpa_eap_connection/5",
+ (gconstpointer) IDX_OPEN,
+ test_ap_wpa_eap_connection_5);
/* WEP AP tests */
- g_test_suite_add (suite, TESTCASE (test_priv_ap_empty_connection, NULL));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_leap_connection_1, FALSE));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_leap_connection_2, FALSE));
-
- g_test_suite_add (suite, TESTCASE (test_priv_ap_dynamic_wep_1, NULL));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_dynamic_wep_2, NULL));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_dynamic_wep_3, NULL));
-
- g_test_suite_add (suite, TESTCASE (test_priv_ap_wpa_psk_connection_1, NULL));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_wpa_psk_connection_2, NULL));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_wpa_psk_connection_3, NULL));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_wpa_psk_connection_4, NULL));
- g_test_suite_add (suite, TESTCASE (test_priv_ap_wpa_psk_connection_5, NULL));
-
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_1, IDX_PRIV));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_2, IDX_PRIV));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_3, IDX_PRIV));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_4, IDX_PRIV));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_5, IDX_PRIV));
+ g_test_add_func ("/wifi/priv_ap/empty_connection",
+ test_priv_ap_empty_connection);
+ g_test_add_data_func ("/wifi/priv_ap/leap_connection/1",
+ (gconstpointer) FALSE,
+ test_priv_ap_leap_connection_1);
+ g_test_add_func ("/wifi/priv_ap/leap_connection/2",
+ test_priv_ap_leap_connection_2);
+
+ g_test_add_func ("/wifi/priv_ap/dynamic_wep/1",
+ test_priv_ap_dynamic_wep_1);
+ g_test_add_func ("/wifi/priv_ap/dynamic_wep/2",
+ test_priv_ap_dynamic_wep_2);
+ g_test_add_func ("/wifi/priv_ap/dynamic_wep/3",
+ test_priv_ap_dynamic_wep_3);
+
+ g_test_add_func ("/wifi/priv_ap/wpa_psk_connection/1",
+ test_priv_ap_wpa_psk_connection_1);
+ g_test_add_func ("/wifi/priv_ap/wpa_psk_connection/2",
+ test_priv_ap_wpa_psk_connection_2);
+ g_test_add_func ("/wifi/priv_ap/wpa_psk_connection/3",
+ test_priv_ap_wpa_psk_connection_3);
+ g_test_add_func ("/wifi/priv_ap/wpa_psk_connection/4",
+ test_priv_ap_wpa_psk_connection_4);
+ g_test_add_func ("/wifi/priv_ap/wpa_psk_connection/5",
+ test_priv_ap_wpa_psk_connection_5);
+
+ g_test_add_data_func ("/wifi/priv_ap/wpa_eap_connection/1",
+ (gconstpointer) IDX_PRIV,
+ test_ap_wpa_eap_connection_1);
+ g_test_add_data_func ("/wifi/priv_ap/wpa_eap_connection/2",
+ (gconstpointer) IDX_PRIV,
+ test_ap_wpa_eap_connection_2);
+ g_test_add_data_func ("/wifi/priv_ap/wpa_eap_connection/3",
+ (gconstpointer) IDX_PRIV,
+ test_ap_wpa_eap_connection_3);
+ g_test_add_data_func ("/wifi/priv_ap/wpa_eap_connection/4",
+ (gconstpointer) IDX_PRIV,
+ test_ap_wpa_eap_connection_4);
+ g_test_add_data_func ("/wifi/priv_ap/wpa_eap_connection/5",
+ (gconstpointer) IDX_PRIV,
+ test_ap_wpa_eap_connection_5);
/* WPA-PSK tests */
for (i = IDX_WPA_PSK_PTKIP_GTKIP; i <= IDX_WPA_RSN_PSK_PCCMP_GCCMP; i++) {
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_empty_connection, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_leap_connection_1, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_leap_connection_2, i));
-
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_dynamic_wep_connection, i));
-
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_1, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_2, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_3, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_4, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_5, i));
-
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_1, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_2, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_3, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_4, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_5, i));
+ g_test_add_data_func ("/wifi/wpa_psk/empty_connection",
+ (gconstpointer) i,
+ test_wpa_ap_empty_connection);
+ g_test_add_data_func ("/wifi/wpa_psk/leap_connection/1",
+ (gconstpointer) i,
+ test_wpa_ap_leap_connection_1);
+ g_test_add_data_func ("/wifi/wpa_psk/leap_connection/2",
+ (gconstpointer) i,
+ test_wpa_ap_leap_connection_2);
+
+ g_test_add_data_func ("/wifi/wpa_psk/dynamic_wep_connection",
+ (gconstpointer) i,
+ test_wpa_ap_dynamic_wep_connection);
+
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_psk_connection/1",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_1);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_psk_connection/2",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_2);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_psk_connection/3",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_3);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_psk_connection/4",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_4);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_psk_connection/5",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_5);
+
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_eap_connection/1",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_1);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_eap_connection/2",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_2);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_eap_connection/3",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_3);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_eap_connection/4",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_4);
+ g_test_add_data_func ("/wifi/wpa_psk/wpa_eap_connection/5",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_5);
}
/* RSN-PSK tests */
for (i = IDX_WPA_RSN_PSK_PTKIP_PCCMP_GTKIP; i <= IDX_RSN_PSK_PTKIP_PCCMP_GTKIP; i++) {
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_empty_connection, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_leap_connection_1, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_leap_connection_2, i));
-
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_dynamic_wep_connection, i));
-
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_1, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_2, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_3, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_4, i));
- g_test_suite_add (suite, TESTCASE (test_wpa_ap_wpa_psk_connection_5, i));
-
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_1, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_2, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_3, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_4, i));
- g_test_suite_add (suite, TESTCASE (test_ap_wpa_eap_connection_5, i));
+ g_test_add_data_func ("/wifi/rsn_psk/empty_connection",
+ (gconstpointer) i,
+ test_wpa_ap_empty_connection);
+ g_test_add_data_func ("/wifi/rsn_psk/leap_connection/1",
+ (gconstpointer) i,
+ test_wpa_ap_leap_connection_1);
+ g_test_add_data_func ("/wifi/rsn_psk/leap_connection/2",
+ (gconstpointer) i,
+ test_wpa_ap_leap_connection_2);
+
+ g_test_add_data_func ("/wifi/rsn_psk/dynamic_wep_connection",
+ (gconstpointer) i,
+ test_wpa_ap_dynamic_wep_connection);
+
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_psk_connection/1",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_1);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_psk_connection/2",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_2);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_psk_connection/3",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_3);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_psk_connection/4",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_4);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_psk_connection/5",
+ (gconstpointer) i,
+ test_wpa_ap_wpa_psk_connection_5);
+
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_eap_connection/1",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_1);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_eap_connection/2",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_2);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_eap_connection/3",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_3);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_eap_connection/4",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_4);
+ g_test_add_data_func ("/wifi/rsn_psk/wpa_eap_connection/5",
+ (gconstpointer) i,
+ test_ap_wpa_eap_connection_5);
}
/* Scanned signal strength conversion tests */
- g_test_suite_add (suite, TESTCASE (test_strength_dbm, NULL));
- g_test_suite_add (suite, TESTCASE (test_strength_percent, NULL));
- g_test_suite_add (suite, TESTCASE (test_strength_wext, NULL));
+ g_test_add_func ("/wifi/strength/dbm",
+ test_strength_dbm);
+ g_test_add_func ("/wifi/strength/percent",
+ test_strength_percent);
+ g_test_add_func ("/wifi/strength/wext",
+ test_strength_wext);
return g_test_run ();
}
-
diff --git a/src/wimax/Makefile.am b/src/devices/wimax/Makefile.am
index 55c7046b4..def8bf62b 100644
--- a/src/wimax/Makefile.am
+++ b/src/devices/wimax/Makefile.am
@@ -1,5 +1,25 @@
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/platform \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-wimax"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(IWMX_SDK_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
pkglib_LTLIBRARIES = libnm-device-plugin-wimax.la
+SYMBOL_VIS_FILE=$(srcdir)/exports.ver
+
libnm_device_plugin_wimax_la_SOURCES = \
nm-wimax-factory.c \
nm-device-wimax.c \
@@ -12,26 +32,14 @@ libnm_device_plugin_wimax_la_SOURCES = \
iwmxsdk.c \
iwmxsdk.h
-libnm_device_plugin_wimax_la_CPPFLAGS = \
- -I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- $(DBUS_CFLAGS) \
- $(IWMX_SDK_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
+libnm_device_plugin_wimax_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
-libnm_device_plugin_wimax_la_LDFLAGS = -module -avoid-version
libnm_device_plugin_wimax_la_LIBADD = \
$(DBUS_LIBS) \
$(IWMX_SDK_LIBS) \
- $(GUDEV_LIBS) \
- $(top_builddir)/src/generated/libnm-generated.la
+ $(GUDEV_LIBS)
nm-wimax-nsp-glue.h: $(top_srcdir)/introspection/nm-wimax-nsp.xml
dbus-binding-tool --prefix=nm_wimax_nsp --mode=glib-server --output=$@ $<
@@ -44,3 +52,12 @@ BUILT_SOURCES = \
nm-device-wimax-glue.h
CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+
+if ENABLE_TESTS
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-wimax.so $(SYMBOL_VIS_FILE)
+
+endif
+
diff --git a/src/vpn-manager/Makefile.in b/src/devices/wimax/Makefile.in
index 94e33078f..ba16d2771 100644
--- a/src/vpn-manager/Makefile.in
+++ b/src/devices/wimax/Makefile.in
@@ -78,11 +78,12 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/vpn-manager
+subdir = src/devices/wimax
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,22 +101,50 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libvpn_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
+libnm_device_plugin_wimax_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libvpn_manager_la_OBJECTS = libvpn_manager_la-nm-vpn-manager.lo \
- libvpn_manager_la-nm-vpn-service.lo \
- libvpn_manager_la-nm-vpn-connection.lo
-libvpn_manager_la_OBJECTS = $(am_libvpn_manager_la_OBJECTS)
+am_libnm_device_plugin_wimax_la_OBJECTS = nm-wimax-factory.lo \
+ nm-device-wimax.lo nm-wimax-nsp.lo nm-wimax-util.lo iwmxsdk.lo
+libnm_device_plugin_wimax_la_OBJECTS = \
+ $(am_libnm_device_plugin_wimax_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+libnm_device_plugin_wimax_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libnm_device_plugin_wimax_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -150,8 +179,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libvpn_manager_la_SOURCES)
-DIST_SOURCES = $(libvpn_manager_la_SOURCES)
+SOURCES = $(libnm_device_plugin_wimax_la_SOURCES)
+DIST_SOURCES = $(libnm_device_plugin_wimax_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -202,12 +231,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -232,7 +264,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -277,12 +308,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -299,6 +334,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -326,11 +363,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -345,6 +387,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -407,6 +450,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -417,46 +461,54 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libvpn-manager.la
-libvpn_manager_la_SOURCES = \
- nm-vpn-manager.c \
- nm-vpn-manager.h \
- nm-vpn-service.c \
- nm-vpn-service.h \
- nm-vpn-connection.c \
- nm-vpn-connection.h
-
-libvpn_manager_la_CPPFLAGS = \
- -I${top_srcdir} \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/platform \
-I${top_builddir}/include \
-I${top_srcdir}/include \
-I${top_builddir}/libnm-util \
-I${top_srcdir}/libnm-util \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/src \
- -I${top_srcdir}/src/dns-manager \
- $(LIBNL_CFLAGS) \
+ -DG_LOG_DOMAIN=\""NetworkManager-wimax"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DVPN_NAME_FILES_DIR=\""$(sysconfdir)/NetworkManager/VPN"\"
-
-libvpn_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(LIBNL_LIBS) \
+ $(POLKIT_CFLAGS) \
+ $(IWMX_SDK_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(GUDEV_CFLAGS)
+
+pkglib_LTLIBRARIES = libnm-device-plugin-wimax.la
+SYMBOL_VIS_FILE = $(srcdir)/exports.ver
+libnm_device_plugin_wimax_la_SOURCES = \
+ nm-wimax-factory.c \
+ nm-device-wimax.c \
+ nm-device-wimax.h \
+ nm-wimax-nsp.c \
+ nm-wimax-nsp.h \
+ nm-wimax-types.h \
+ nm-wimax-util.c \
+ nm-wimax-util.h \
+ iwmxsdk.c \
+ iwmxsdk.h
+
+libnm_device_plugin_wimax_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_wimax_la_LIBADD = \
$(DBUS_LIBS) \
- $(GLIB_LIBS)
+ $(IWMX_SDK_LIBS) \
+ $(GUDEV_LIBS)
BUILT_SOURCES = \
- nm-vpn-connection-glue.h \
- nm-vpn-plugin-bindings.h
+ nm-wimax-nsp-glue.h \
+ nm-device-wimax-glue.h
CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -471,9 +523,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vpn-manager/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/devices/wimax/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/vpn-manager/Makefile
+ $(AUTOMAKE) --gnu src/devices/wimax/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -493,9 +545,33 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+ }
+
+uninstall-pkglibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+ done
+
+clean-pkglibLTLIBRARIES:
+ -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+ @list='$(pkglib_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
@@ -504,8 +580,8 @@ clean-noinstLTLIBRARIES:
rm -f $${locs}; \
}
-libvpn-manager.la: $(libvpn_manager_la_OBJECTS) $(libvpn_manager_la_DEPENDENCIES) $(EXTRA_libvpn_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libvpn_manager_la_OBJECTS) $(libvpn_manager_la_LIBADD) $(LIBS)
+libnm-device-plugin-wimax.la: $(libnm_device_plugin_wimax_la_OBJECTS) $(libnm_device_plugin_wimax_la_DEPENDENCIES) $(EXTRA_libnm_device_plugin_wimax_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_device_plugin_wimax_la_LINK) -rpath $(pkglibdir) $(libnm_device_plugin_wimax_la_OBJECTS) $(libnm_device_plugin_wimax_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -513,9 +589,11 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvpn_manager_la-nm-vpn-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvpn_manager_la-nm-vpn-manager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvpn_manager_la-nm-vpn-service.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iwmxsdk.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-wimax.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wimax-factory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wimax-nsp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wimax-util.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -538,27 +616,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libvpn_manager_la-nm-vpn-manager.lo: nm-vpn-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvpn_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libvpn_manager_la-nm-vpn-manager.lo -MD -MP -MF $(DEPDIR)/libvpn_manager_la-nm-vpn-manager.Tpo -c -o libvpn_manager_la-nm-vpn-manager.lo `test -f 'nm-vpn-manager.c' || echo '$(srcdir)/'`nm-vpn-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvpn_manager_la-nm-vpn-manager.Tpo $(DEPDIR)/libvpn_manager_la-nm-vpn-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-vpn-manager.c' object='libvpn_manager_la-nm-vpn-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvpn_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libvpn_manager_la-nm-vpn-manager.lo `test -f 'nm-vpn-manager.c' || echo '$(srcdir)/'`nm-vpn-manager.c
-
-libvpn_manager_la-nm-vpn-service.lo: nm-vpn-service.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvpn_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libvpn_manager_la-nm-vpn-service.lo -MD -MP -MF $(DEPDIR)/libvpn_manager_la-nm-vpn-service.Tpo -c -o libvpn_manager_la-nm-vpn-service.lo `test -f 'nm-vpn-service.c' || echo '$(srcdir)/'`nm-vpn-service.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvpn_manager_la-nm-vpn-service.Tpo $(DEPDIR)/libvpn_manager_la-nm-vpn-service.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-vpn-service.c' object='libvpn_manager_la-nm-vpn-service.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvpn_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libvpn_manager_la-nm-vpn-service.lo `test -f 'nm-vpn-service.c' || echo '$(srcdir)/'`nm-vpn-service.c
-
-libvpn_manager_la-nm-vpn-connection.lo: nm-vpn-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvpn_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libvpn_manager_la-nm-vpn-connection.lo -MD -MP -MF $(DEPDIR)/libvpn_manager_la-nm-vpn-connection.Tpo -c -o libvpn_manager_la-nm-vpn-connection.lo `test -f 'nm-vpn-connection.c' || echo '$(srcdir)/'`nm-vpn-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvpn_manager_la-nm-vpn-connection.Tpo $(DEPDIR)/libvpn_manager_la-nm-vpn-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-vpn-connection.c' object='libvpn_manager_la-nm-vpn-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvpn_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libvpn_manager_la-nm-vpn-connection.lo `test -f 'nm-vpn-connection.c' || echo '$(srcdir)/'`nm-vpn-connection.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -647,11 +704,16 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
+ for dir in "$(DESTDIR)$(pkglibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
@@ -687,7 +749,7 @@ maintainer-clean-generic:
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -714,7 +776,7 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am:
+install-exec-am: install-pkglibLTLIBRARIES
install-html: install-html-am
@@ -754,30 +816,34 @@ ps: ps-am
ps-am:
-uninstall-am:
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: all check check-am install install-am install-strip
-.MAKE: all check install install-am install-strip
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+ clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-pkglibLTLIBRARIES install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-pkglibLTLIBRARIES
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am
+nm-wimax-nsp-glue.h: $(top_srcdir)/introspection/nm-wimax-nsp.xml
+ dbus-binding-tool --prefix=nm_wimax_nsp --mode=glib-server --output=$@ $<
-nm-vpn-connection-glue.h: $(top_srcdir)/introspection/nm-vpn-connection.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-server --output=$@ $<
+nm-device-wimax-glue.h: $(top_srcdir)/introspection/nm-device-wimax.xml
+ dbus-binding-tool --prefix=nm_device_wimax --mode=glib-server --output=$@ $<
-nm-vpn-plugin-bindings.h: $(top_srcdir)/introspection/nm-vpn-plugin.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-client --output=$@ $<
+@ENABLE_TESTS_TRUE@check-local:
+@ENABLE_TESTS_TRUE@ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-wimax.so $(SYMBOL_VIS_FILE)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/devices/wimax/exports.ver b/src/devices/wimax/exports.ver
new file mode 100644
index 000000000..d2c451244
--- /dev/null
+++ b/src/devices/wimax/exports.ver
@@ -0,0 +1,7 @@
+{
+global:
+ nm_device_factory_create;
+ nm_device_factory_get_device_type;
+local:
+ *;
+};
diff --git a/src/wimax/iwmxsdk.c b/src/devices/wimax/iwmxsdk.c
index 9c3a78bb8..d1ef7b683 100644
--- a/src/wimax/iwmxsdk.c
+++ b/src/devices/wimax/iwmxsdk.c
@@ -40,7 +40,7 @@
#include "iwmxsdk.h"
static WIMAX_API_DEVICE_ID g_api;
-static GStaticMutex add_remove_mutex = G_STATIC_MUTEX_INIT;
+static GMutex add_remove_mutex;
/* Misc utilities */
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
@@ -132,7 +132,7 @@ typedef struct {
void *user_data;
} NewSdkCallback;
-GStaticMutex new_callbacks_mutex = G_STATIC_MUTEX_INIT;
+static GMutex new_callbacks_mutex;
static GSList *new_callbacks = NULL;
void iwmx_sdk_new_callback_register(WimaxNewWmxsdkFunc callback, void *user_data)
@@ -144,9 +144,9 @@ void iwmx_sdk_new_callback_register(WimaxNewWmxsdkFunc callback, void *user_data
cb->callback = callback;
cb->user_data = user_data;
- g_static_mutex_lock (&new_callbacks_mutex);
+ g_mutex_lock (&new_callbacks_mutex);
new_callbacks = g_slist_append (new_callbacks, cb);
- g_static_mutex_unlock (&new_callbacks_mutex);
+ g_mutex_unlock (&new_callbacks_mutex);
}
void iwmx_sdk_new_callback_unregister(WimaxNewWmxsdkFunc callback, void *user_data)
@@ -154,7 +154,7 @@ void iwmx_sdk_new_callback_unregister(WimaxNewWmxsdkFunc callback, void *user_da
GSList *iter;
NewSdkCallback *found = NULL;
- g_static_mutex_lock (&new_callbacks_mutex);
+ g_mutex_lock (&new_callbacks_mutex);
for (iter = new_callbacks; iter; iter = g_slist_next (iter)) {
NewSdkCallback *cb = iter->data;
@@ -168,20 +168,20 @@ void iwmx_sdk_new_callback_unregister(WimaxNewWmxsdkFunc callback, void *user_da
new_callbacks = g_slist_remove (new_callbacks, found);
g_free (found);
}
- g_static_mutex_unlock (&new_callbacks_mutex);
+ g_mutex_unlock (&new_callbacks_mutex);
}
static void iwmx_sdk_call_new_callbacks(struct wmxsdk *wmxsdk)
{
GSList *iter;
- g_static_mutex_lock (&new_callbacks_mutex);
+ g_mutex_lock (&new_callbacks_mutex);
for (iter = new_callbacks; iter; iter = g_slist_next (iter)) {
NewSdkCallback *cb = iter->data;
cb->callback (wmxsdk, cb->user_data);
}
- g_static_mutex_unlock (&new_callbacks_mutex);
+ g_mutex_unlock (&new_callbacks_mutex);
}
/****************************************************************/
@@ -760,9 +760,9 @@ WIMAX_API_DEVICE_STATUS iwmxsdk_status_get(struct wmxsdk *wmxsdk)
{
WIMAX_API_DEVICE_STATUS status;
- g_mutex_lock(wmxsdk->status_mutex);
+ g_mutex_lock(&wmxsdk->status_mutex);
status = wmxsdk->status;
- g_mutex_unlock(wmxsdk->status_mutex);
+ g_mutex_unlock(&wmxsdk->status_mutex);
return status;
}
@@ -821,7 +821,7 @@ int iwmx_sdk_connect(struct wmxsdk *wmxsdk, const char *nsp_name)
WIMAX_API_DEVICE_STATUS dev_status;
char sdk_name[MAX_SIZE_OF_NSP_NAME];
- g_mutex_lock(wmxsdk->connect_mutex);
+ g_mutex_lock(&wmxsdk->connect_mutex);
/* Guess what the current radio state is; if it is ON
* already, don't redo it. */
dev_status = iwmxsdk_status_get(wmxsdk);
@@ -874,7 +874,7 @@ int iwmx_sdk_connect(struct wmxsdk *wmxsdk, const char *nsp_name)
error_cant_do:
error_get_status:
- g_mutex_unlock(wmxsdk->connect_mutex);
+ g_mutex_unlock(&wmxsdk->connect_mutex);
return result;
}
@@ -924,7 +924,7 @@ int iwmx_sdk_disconnect(struct wmxsdk *wmxsdk)
UINT32 errstr_size = sizeof(errstr);
WIMAX_API_DEVICE_STATUS dev_status;
- g_mutex_lock(wmxsdk->connect_mutex);
+ g_mutex_lock(&wmxsdk->connect_mutex);
/* Guess what the current radio state is; if it is ON
* already, don't redo it. */
dev_status = iwmx_sdk_get_device_status(wmxsdk);
@@ -964,7 +964,7 @@ int iwmx_sdk_disconnect(struct wmxsdk *wmxsdk)
result = -EINPROGRESS;
error_cant_do:
error_get_status:
- g_mutex_unlock(wmxsdk->connect_mutex);
+ g_mutex_unlock(&wmxsdk->connect_mutex);
return result;
}
@@ -1024,10 +1024,10 @@ static void __iwmx_sdk_state_change_cb(WIMAX_API_DEVICE_ID *device_id,
status, iwmx_sdk_dev_status_to_str (status),
reason, iwmx_sdk_reason_to_str (reason));
- g_mutex_lock(wmxsdk->status_mutex);
+ g_mutex_lock(&wmxsdk->status_mutex);
old_status = wmxsdk->status;
wmxsdk->status = status;
- g_mutex_unlock(wmxsdk->status_mutex);
+ g_mutex_unlock(&wmxsdk->status_mutex);
_schedule_state_change(wmxsdk, status, old_status, reason, pi);
}
@@ -1044,9 +1044,9 @@ static void __iwmx_sdk_scan_common_cb(WIMAX_API_DEVICE_ID *device_id,
{
struct wmxsdk *wmxsdk = deviceid_to_wmxsdk(device_id);
- g_static_mutex_lock(&wmxsdk->network_mutex);
+ g_mutex_lock(&wmxsdk->network_mutex);
_schedule_scan_result(wmxsdk, nsp_list, nsp_list_size);
- g_static_mutex_unlock(&wmxsdk->network_mutex);
+ g_mutex_unlock(&wmxsdk->network_mutex);
}
/*
@@ -1210,9 +1210,9 @@ static int iwmx_sdk_setup(struct wmxsdk *wmxsdk)
if ((int) status < 0)
status = WIMAX_API_DEVICE_STATUS_UnInitialized;
- g_mutex_lock(wmxsdk->status_mutex);
+ g_mutex_lock(&wmxsdk->status_mutex);
wmxsdk->status = status;
- g_mutex_unlock(wmxsdk->status_mutex);
+ g_mutex_unlock(&wmxsdk->status_mutex);
_schedule_state_change(wmxsdk,
status,
@@ -1286,14 +1286,12 @@ static struct wmxsdk *wmxsdk_new(void)
memset(wmxsdk, 0, sizeof(*wmxsdk));
wmxsdk->refcount = 1;
- g_static_mutex_init(&wmxsdk->network_mutex);
+ g_mutex_init(&wmxsdk->network_mutex);
wmxsdk->status = WIMAX_API_DEVICE_STATUS_UnInitialized;
- wmxsdk->status_mutex = g_mutex_new();
- g_assert(wmxsdk->status_mutex);
+ g_mutex_init(&wmxsdk->status_mutex);
- wmxsdk->connect_mutex = g_mutex_new();
- g_assert(wmxsdk->connect_mutex);
+ g_mutex_init(&wmxsdk->connect_mutex);
}
return wmxsdk;
}
@@ -1307,8 +1305,8 @@ struct wmxsdk *wmxsdk_ref(struct wmxsdk *wmxsdk)
void wmxsdk_unref(struct wmxsdk *wmxsdk)
{
if (g_atomic_int_dec_and_test(&wmxsdk->refcount)) {
- g_mutex_free(wmxsdk->status_mutex);
- g_mutex_free(wmxsdk->connect_mutex);
+ g_mutex_clear(&wmxsdk->status_mutex);
+ g_mutex_clear(&wmxsdk->connect_mutex);
memset(wmxsdk, 0, sizeof(*wmxsdk));
free(wmxsdk);
}
@@ -1394,7 +1392,7 @@ static void iwmx_sdk_addremove_cb(WIMAX_API_DEVICE_ID *devid,
char errstr[512];
UINT32 errstr_size = sizeof(errstr);
- g_static_mutex_lock(&add_remove_mutex);
+ g_mutex_lock(&add_remove_mutex);
nm_log_dbg(LOGD_WIMAX, "cb: handle %u index #%u is %d", devid->sdkHandle,
devid->deviceIndex, presence);
@@ -1432,13 +1430,14 @@ static void iwmx_sdk_addremove_cb(WIMAX_API_DEVICE_ID *devid,
iwmx_sdk_dev_add(devid->deviceIndex, dev->deviceIndex, dev->deviceName);
} else {
/* Remove the device from our internal list */
- cnt = deviceid_to_index(devid);
- if (cnt >= 0)
- iwmx_sdk_dev_rm(cnt);
+ int idx = deviceid_to_index(devid);
+
+ if (idx >= 0)
+ iwmx_sdk_dev_rm(idx);
}
out:
- g_static_mutex_unlock(&add_remove_mutex);
+ g_mutex_unlock(&add_remove_mutex);
}
/*
diff --git a/src/wimax/iwmxsdk.h b/src/devices/wimax/iwmxsdk.h
index 1888b7096..785ca8c2f 100644
--- a/src/wimax/iwmxsdk.h
+++ b/src/devices/wimax/iwmxsdk.h
@@ -64,13 +64,13 @@ struct wmxsdk {
WimaxRemovedFunc removed_cb;
void *callback_data;
- GStaticMutex network_mutex;
+ GMutex network_mutex;
WIMAX_API_DEVICE_STATUS status;
WIMAX_API_MEDIA_STATUS media_status;
- GMutex *status_mutex;
+ GMutex status_mutex;
- GMutex *connect_mutex;
+ GMutex connect_mutex;
char name[100];
char ifname[16];
diff --git a/src/wimax/nm-device-wimax.c b/src/devices/wimax/nm-device-wimax.c
index 3e2e2833b..1bdda4899 100644
--- a/src/wimax/nm-device-wimax.c
+++ b/src/devices/wimax/nm-device-wimax.c
@@ -19,6 +19,7 @@
* Copyright (C) 2009 Novell, Inc.
*/
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
@@ -34,16 +35,16 @@
#include "nm-wimax-util.h"
#include "nm-logging.h"
#include "nm-device-private.h"
-#include "nm-system.h"
#include "NetworkManagerUtils.h"
-#include "nm-properties-changed-signal.h"
+#include "nm-dbus-manager.h"
#include "nm-connection.h"
#include "nm-setting-connection.h"
#include "nm-setting-wimax.h"
#include "nm-utils.h"
-#include "nm-rfkill.h"
+#include "nm-rfkill-manager.h"
#include "iwmxsdk.h"
#include "nm-enum-types.h"
+#include "nm-dbus-glib-types.h"
static gboolean impl_device_get_nsp_list (NMDeviceWimax *device, GPtrArray **list, GError **error);
@@ -53,7 +54,7 @@ G_DEFINE_TYPE (NMDeviceWimax, nm_device_wimax, NM_TYPE_DEVICE)
enum {
PROP_0,
- PROP_HW_ADDRESS,
+ PROP_NSPS,
PROP_ACTIVE_NSP,
PROP_CENTER_FREQ,
PROP_RSSI,
@@ -67,7 +68,6 @@ enum {
enum {
NSP_ADDED,
NSP_REMOVED,
- PROPERTIES_CHANGED,
LAST_SIGNAL
};
@@ -87,7 +87,6 @@ typedef struct {
gboolean enabled;
gboolean wimaxd_enabled;
- guint8 hw_addr[ETH_ALEN];
guint activation_timeout_id;
/* Track whether stage1 (Prepare) is completed yet or not */
@@ -124,60 +123,15 @@ nm_wimax_error_quark (void)
/***********************************************************/
-guint32
-nm_device_wimax_get_center_frequency (NMDeviceWimax *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
- return NM_DEVICE_WIMAX_GET_PRIVATE (self)->center_freq;
-}
-
-gint
-nm_device_wimax_get_rssi (NMDeviceWimax *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
- return NM_DEVICE_WIMAX_GET_PRIVATE (self)->rssi;
-}
-
-gint
-nm_device_wimax_get_cinr (NMDeviceWimax *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
- return NM_DEVICE_WIMAX_GET_PRIVATE (self)->cinr;
-}
-
-gint
-nm_device_wimax_get_tx_power (NMDeviceWimax *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
- return NM_DEVICE_WIMAX_GET_PRIVATE (self)->tx_power;
-}
-
-const char *
-nm_device_wimax_get_bsid (NMDeviceWimax *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), NULL);
-
- return NM_DEVICE_WIMAX_GET_PRIVATE (self)->bsid;
-}
-
static gboolean
impl_device_get_nsp_list (NMDeviceWimax *self, GPtrArray **nsps, GError **error)
{
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
GSList *iter;
- *nsps = g_ptr_array_sized_new (g_slist_length (priv->nsp_list));
- for (iter = priv->nsp_list; iter; iter = iter->next) {
- const char *path;
-
- path = nm_wimax_nsp_get_dbus_path (NM_WIMAX_NSP (iter->data));
- if (path)
- g_ptr_array_add (*nsps, g_strdup (path));
- }
+ *nsps = g_ptr_array_sized_new (4);
+ for (iter = priv->nsp_list; iter; iter = iter->next)
+ g_ptr_array_add (*nsps, g_strdup (nm_wimax_nsp_get_dbus_path (NM_WIMAX_NSP (iter->data))));
return TRUE;
}
@@ -208,14 +162,6 @@ set_current_nsp (NMDeviceWimax *self, NMWimaxNsp *new_nsp)
g_object_unref (old_nsp);
}
-NMWimaxNsp *
-nm_device_wimax_get_active_nsp (NMDeviceWimax *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), NULL);
-
- return NM_DEVICE_WIMAX_GET_PRIVATE (self)->current_nsp;
-}
-
static gboolean
activation_timed_out (gpointer data)
{
@@ -228,24 +174,34 @@ activation_timed_out (gpointer data)
}
static void
+emit_nsp_added_removed (NMDeviceWimax *self,
+ guint signum,
+ NMWimaxNsp *nsp,
+ gboolean recheck_available_connections)
+{
+ g_signal_emit (self, signals[signum], 0, nsp);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_WIMAX_NSPS);
+ nm_device_emit_recheck_auto_activate (NM_DEVICE (self));
+ if (recheck_available_connections)
+ nm_device_recheck_available_connections (NM_DEVICE (self));
+}
+
+static void
remove_all_nsps (NMDeviceWimax *self)
{
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
set_current_nsp (self, NULL);
- while (g_slist_length (priv->nsp_list)) {
+ while (priv->nsp_list) {
NMWimaxNsp *nsp = NM_WIMAX_NSP (priv->nsp_list->data);
priv->nsp_list = g_slist_remove (priv->nsp_list, nsp);
- g_signal_emit (self, signals[NSP_REMOVED], 0, nsp);
+ emit_nsp_added_removed (self, NSP_REMOVED, nsp, FALSE);
g_object_unref (nsp);
}
nm_device_recheck_available_connections (NM_DEVICE (self));
-
- g_slist_free (priv->nsp_list);
- priv->nsp_list = NULL;
}
static NMWimaxNsp *
@@ -254,6 +210,8 @@ get_nsp_by_name (NMDeviceWimax *self, const char *name)
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
GSList *iter;
+ g_return_val_if_fail (name, NULL);
+
for (iter = priv->nsp_list; iter; iter = iter->next) {
NMWimaxNsp *nsp = NM_WIMAX_NSP (iter->data);
@@ -264,6 +222,24 @@ get_nsp_by_name (NMDeviceWimax *self, const char *name)
return NULL;
}
+static NMWimaxNsp *
+get_nsp_by_path (NMDeviceWimax *self, const char *path)
+{
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
+ GSList *iter;
+
+ g_return_val_if_fail (path, NULL);
+
+ for (iter = priv->nsp_list; iter; iter = iter->next) {
+ NMWimaxNsp *nsp = NM_WIMAX_NSP (iter->data);
+
+ if (!strcmp (nm_wimax_nsp_get_dbus_path (nsp), path))
+ return nsp;
+ }
+
+ return NULL;
+}
+
static gboolean
update_availability (NMDeviceWimax *self, gboolean old_available)
{
@@ -334,126 +310,48 @@ set_enabled (NMDevice *device, gboolean enabled)
/* NMDevice methods */
-static void
-take_down (NMDevice *device)
-{
- NMDeviceWimax *self = NM_DEVICE_WIMAX (device);
-
- set_current_nsp (self, NULL);
- remove_all_nsps (self);
-}
-
-static gboolean
-hw_bring_up (NMDevice *dev, gboolean *no_firmware)
-{
- NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (dev);
-
- if (!priv->enabled || !priv->wimaxd_enabled)
- return FALSE;
-
- return NM_DEVICE_GET_CLASS (dev)->hw_bring_up (dev, no_firmware);
-}
-
-static void
-update_hw_address (NMDevice *dev)
-{
- NMDeviceWimax *self = NM_DEVICE_WIMAX (dev);
- NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
- gboolean changed = FALSE;
- gsize addrlen;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- g_return_if_fail (addrlen == ETH_ALEN);
- if (changed)
- g_object_notify (G_OBJECT (self), NM_DEVICE_WIMAX_HW_ADDRESS);
- }
-}
-
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (device);
-
- *out_len = sizeof (priv->hw_addr);
- return priv->hw_addr;
-}
-
-static gboolean
-hwaddr_matches (NMDevice *device,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr)
-{
- NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (device);
- NMSettingWimax *s_wimax;
- const GByteArray *mac = NULL;
-
- s_wimax = nm_connection_get_setting_wimax (connection);
- if (s_wimax)
- mac = nm_setting_wimax_get_mac_address (s_wimax);
-
- if (mac) {
- g_return_val_if_fail (mac->len == ETH_ALEN, FALSE);
- if (other_hwaddr) {
- g_return_val_if_fail (other_hwaddr_len == ETH_ALEN, FALSE);
- if (memcmp (mac->data, other_hwaddr, mac->len) == 0)
- return TRUE;
- } else if (memcmp (mac->data, priv->hw_addr, mac->len) == 0)
- return TRUE;
- } else if (fail_if_no_hwaddr == FALSE)
- return TRUE;
-
- return FALSE;
-}
-
static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
- NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (device);
NMSettingConnection *s_con;
NMSettingWimax *s_wimax;
const char *connection_type;
const GByteArray *mac;
+ if (!NM_DEVICE_CLASS (nm_device_wimax_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
+
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
connection_type = nm_setting_connection_get_connection_type (s_con);
- if (strcmp (connection_type, NM_SETTING_WIMAX_SETTING_NAME)) {
- g_set_error (error,
- NM_WIMAX_ERROR, NM_WIMAX_ERROR_CONNECTION_NOT_WIMAX,
- "The connection was not a WiMAX connection.");
+ if (strcmp (connection_type, NM_SETTING_WIMAX_SETTING_NAME))
return FALSE;
- }
s_wimax = nm_connection_get_setting_wimax (connection);
- if (!s_wimax) {
- g_set_error (error,
- NM_WIMAX_ERROR, NM_WIMAX_ERROR_CONNECTION_INVALID,
- "The connection was not a valid WiMAX connection.");
+ if (!s_wimax)
return FALSE;
- }
mac = nm_setting_wimax_get_mac_address (s_wimax);
- if (mac && memcmp (mac->data, &priv->hw_addr, ETH_ALEN)) {
- g_set_error (error,
- NM_WIMAX_ERROR, NM_WIMAX_ERROR_CONNECTION_INCOMPATIBLE,
- "The connection's MAC address did not match this device.");
+ if (mac && memcmp (mac->data, nm_device_get_hw_address (device, NULL), ETH_ALEN))
return FALSE;
- }
return TRUE;
}
static gboolean
-check_connection_available (NMDevice *device, NMConnection *connection)
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
{
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (device);
const GSList *ns_iter = NULL;
+ NMWimaxNsp *nsp;
+
+ if (specific_object) {
+ nsp = get_nsp_by_path (NM_DEVICE_WIMAX (device), specific_object);
+ return nsp ? nm_wimax_nsp_check_compatible (nsp, connection) : FALSE;
+ }
/* Ensure the connection applies to an NSP in the scan list */
for (ns_iter = priv->nsp_list; ns_iter; ns_iter = ns_iter->next) {
@@ -475,6 +373,7 @@ complete_connection (NMDevice *device,
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
NMSettingWimax *s_wimax;
const GByteArray *setting_mac;
+ const guint8 *hw_address;
char *format;
const char *nsp_name = NULL;
NMWimaxNsp *nsp = NULL;
@@ -551,9 +450,10 @@ complete_connection (NMDevice *device,
g_object_set (G_OBJECT (s_wimax), NM_SETTING_WIMAX_NETWORK_NAME, nsp_name, NULL);
setting_mac = nm_setting_wimax_get_mac_address (s_wimax);
+ hw_address = nm_device_get_hw_address (device, NULL);
if (setting_mac) {
/* Make sure the setting MAC (if any) matches the device's permanent MAC */
- if (memcmp (setting_mac->data, &priv->hw_addr, ETH_ALEN)) {
+ if (memcmp (setting_mac->data, hw_address, ETH_ALEN)) {
g_set_error (error,
NM_SETTING_WIMAX_ERROR,
NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
@@ -565,9 +465,9 @@ complete_connection (NMDevice *device,
const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
/* Lock the connection to this device by default */
- if (memcmp (&priv->hw_addr, null_mac, ETH_ALEN)) {
+ if (memcmp (hw_address, null_mac, ETH_ALEN)) {
mac = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (mac, priv->hw_addr, ETH_ALEN);
+ g_byte_array_append (mac, hw_address, ETH_ALEN);
g_object_set (G_OBJECT (s_wimax), NM_SETTING_WIMAX_MAC_ADDRESS, mac, NULL);
g_byte_array_free (mac, TRUE);
}
@@ -576,56 +476,27 @@ complete_connection (NMDevice *device,
return TRUE;
}
-static NMConnection *
-get_best_auto_connection (NMDevice *device,
- GSList *connections,
- char **specific_object)
+static gboolean
+can_auto_connect (NMDevice *device,
+ NMConnection *connection,
+ char **specific_object)
{
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (device);
GSList *iter;
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- NMSettingConnection *s_con;
- NMSettingWimax *s_wimax;
- const char *connection_type;
- const GByteArray *mac;
-
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
-
- if (!nm_setting_connection_get_autoconnect (s_con))
- continue;
-
- connection_type = nm_setting_connection_get_connection_type (s_con);
- if (strcmp (connection_type, NM_SETTING_WIMAX_SETTING_NAME))
- continue;
-
- s_wimax = nm_connection_get_setting_wimax (connection);
- if (!s_wimax)
- continue;
-
- mac = nm_setting_wimax_get_mac_address (s_wimax);
- if (mac && memcmp (mac->data, priv->hw_addr, ETH_ALEN))
- continue;
+ if (!NM_DEVICE_CLASS (nm_device_wimax_parent_class)->can_auto_connect (device, connection, specific_object))
+ return FALSE;
- for (iter = priv->nsp_list; iter; iter = iter->next) {
- NMWimaxNsp *nsp = NM_WIMAX_NSP (iter->data);
+ for (iter = priv->nsp_list; iter; iter = iter->next) {
+ NMWimaxNsp *nsp = NM_WIMAX_NSP (iter->data);
- if (nm_wimax_nsp_check_compatible (nsp, connection)) {
- *specific_object = (char *) nm_wimax_nsp_get_dbus_path (nsp);
- return connection;
- }
+ if (nm_wimax_nsp_check_compatible (nsp, connection)) {
+ *specific_object = (char *) nm_wimax_nsp_get_dbus_path (nsp);
+ return TRUE;
}
}
- return NULL;
-}
-
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- return NM_DEVICE_CAP_NM_SUPPORTED;
+ return FALSE;
}
static gboolean
@@ -1050,7 +921,7 @@ remove_outdated_nsps (NMDeviceWimax *self,
for (iter = to_remove; iter; iter = iter->next) {
NMWimaxNsp *nsp = NM_WIMAX_NSP (iter->data);
- g_signal_emit (self, signals[NSP_REMOVED], 0, nsp);
+ emit_nsp_added_removed (self, NSP_REMOVED, nsp, FALSE);
priv->nsp_list = g_slist_remove (priv->nsp_list, nsp);
g_object_unref (nsp);
}
@@ -1104,8 +975,7 @@ wmx_scan_result_cb (struct wmxsdk *wmxsdk,
if (new_nsp) {
priv->nsp_list = g_slist_append (priv->nsp_list, nsp);
nm_wimax_nsp_export_to_dbus (nsp);
- g_signal_emit (self, signals[NSP_ADDED], 0, nsp);
- nm_device_recheck_available_connections (NM_DEVICE (self));
+ emit_nsp_added_removed (self, NSP_ADDED, nsp, TRUE);
}
}
}
@@ -1177,10 +1047,7 @@ set_link_status (NMDeviceWimax *self, WIMAX_API_LINK_STATUS_INFO_EX *link_status
conv_rssi = sdk_rssi_to_dbm (link_status->RSSI);
conv_cinr = sdk_cinr_to_db (link_status->CINR);
conv_tx_pow = sdk_tx_pow_to_dbm (link_status->txPWR);
- new_bsid = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- link_status->bsId[0], link_status->bsId[1],
- link_status->bsId[2], link_status->bsId[3],
- link_status->bsId[4], link_status->bsId[5]);
+ new_bsid = nm_utils_hwaddr_ntoa_len (link_status->bsId, 6);
}
if (priv->center_freq != center_freq) {
@@ -1341,20 +1208,14 @@ wmx_new_sdk_cb (struct wmxsdk *sdk, void *user_data)
/*************************************************************************/
NMDevice *
-nm_device_wimax_new (const char *udi,
- const char *iface,
- const char *driver)
+nm_device_wimax_new (NMPlatformLink *platform_device)
{
NMDevice *device;
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
- g_return_val_if_fail (driver != NULL, NULL);
+ g_return_val_if_fail (platform_device != NULL, NULL);
device = (NMDevice *) g_object_new (NM_TYPE_DEVICE_WIMAX,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, driver,
+ NM_DEVICE_PLATFORM_DEVICE, platform_device,
NM_DEVICE_TYPE_DESC, "WiMAX",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_WIMAX,
NM_DEVICE_RFKILL_TYPE, RFKILL_TYPE_WIMAX,
@@ -1365,7 +1226,7 @@ nm_device_wimax_new (const char *udi,
nm_wimax_util_sdk_ref ();
/* See if the SDK already knows about this interface */
- sdk = iwmx_sdk_get_wmxsdk_for_iface (iface);
+ sdk = iwmx_sdk_get_wmxsdk_for_iface (platform_device->name);
if (sdk)
wmx_new_sdk_cb (sdk, device);
@@ -1401,10 +1262,15 @@ get_property (GObject *object, guint prop_id,
{
NMDeviceWimax *self = NM_DEVICE_WIMAX (object);
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
+ GPtrArray *array;
+ GSList *iter;
switch (prop_id) {
- case PROP_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (priv->hw_addr, ARPHRD_ETHER));
+ case PROP_NSPS:
+ array = g_ptr_array_sized_new (4);
+ for (iter = priv->nsp_list; iter; iter = g_slist_next (iter))
+ g_ptr_array_add (array, g_strdup (nm_wimax_nsp_get_dbus_path (NM_WIMAX_NSP (iter->data))));
+ g_value_take_boxed (value, array);
break;
case PROP_ACTIVE_NSP:
if (priv->current_nsp)
@@ -1460,8 +1326,7 @@ dispose (GObject *object)
set_current_nsp (self, NULL);
- g_slist_foreach (priv->nsp_list, (GFunc) g_object_unref, NULL);
- g_slist_free (priv->nsp_list);
+ g_slist_free_full (priv->nsp_list, g_object_unref);
iwmx_sdk_new_callback_unregister (wmx_new_sdk_cb, self);
nm_wimax_util_sdk_unref ();
@@ -1483,32 +1348,26 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *klass)
object_class->get_property = get_property;
object_class->dispose = dispose;
- device_class->take_down = take_down;
- device_class->hw_bring_up = hw_bring_up;
- device_class->update_hw_address = update_hw_address;
- device_class->get_hw_address = get_hw_address;
device_class->check_connection_compatible = check_connection_compatible;
device_class->check_connection_available = check_connection_available;
device_class->complete_connection = complete_connection;
- device_class->get_best_auto_connection = get_best_auto_connection;
- device_class->get_generic_capabilities = get_generic_capabilities;
+ device_class->can_auto_connect = can_auto_connect;
device_class->is_available = is_available;
device_class->act_stage1_prepare = act_stage1_prepare;
device_class->act_stage2_config = act_stage2_config;
device_class->deactivate = deactivate;
device_class->set_enabled = set_enabled;
- device_class->hwaddr_matches = hwaddr_matches;
device_class->state_changed = device_state_changed;
/* Properties */
g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_WIMAX_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
- NULL,
- G_PARAM_READABLE));
+ (object_class, PROP_NSPS,
+ g_param_spec_boxed (NM_DEVICE_WIMAX_NSPS,
+ "Network access points",
+ "Network access points",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_ACTIVE_NSP,
g_param_spec_boxed (NM_DEVICE_WIMAX_ACTIVE_NSP,
@@ -1578,12 +1437,9 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *klass)
G_TYPE_NONE, 1,
G_TYPE_OBJECT);
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class, G_STRUCT_OFFSET (NMDeviceWimaxClass, properties_changed));
-
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_wimax_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_device_wimax_object_info);
dbus_g_error_domain_register (NM_WIMAX_ERROR, NULL, NM_TYPE_WIMAX_ERROR);
}
diff --git a/src/wimax/nm-device-wimax.h b/src/devices/wimax/nm-device-wimax.h
index c43c5dd2d..8b252ee16 100644
--- a/src/wimax/nm-device-wimax.h
+++ b/src/devices/wimax/nm-device-wimax.h
@@ -43,7 +43,7 @@ typedef enum
NM_WIMAX_ERROR_NSP_NOT_FOUND, /*< nick=NspNotFound >*/
} NMWimaxError;
-#define NM_DEVICE_WIMAX_HW_ADDRESS "hw-address"
+#define NM_DEVICE_WIMAX_NSPS "nsps"
#define NM_DEVICE_WIMAX_ACTIVE_NSP "active-nsp"
#define NM_DEVICE_WIMAX_CENTER_FREQUENCY "center-frequency"
#define NM_DEVICE_WIMAX_RSSI "rssi"
@@ -66,21 +66,7 @@ typedef struct {
GType nm_device_wimax_get_type (void);
-NMDevice *nm_device_wimax_new (const char *udi,
- const char *iface,
- const char *driver);
-
-NMWimaxNsp *nm_device_wimax_get_active_nsp (NMDeviceWimax *self);
-
-guint nm_device_wimax_get_center_frequency (NMDeviceWimax *self);
-
-gint nm_device_wimax_get_rssi (NMDeviceWimax *self);
-
-gint nm_device_wimax_get_cinr (NMDeviceWimax *self);
-
-gint nm_device_wimax_get_tx_power (NMDeviceWimax *self);
-
-const char *nm_device_wimax_get_bsid (NMDeviceWimax *self);
+NMDevice *nm_device_wimax_new (NMPlatformLink *platform_device);
G_END_DECLS
diff --git a/src/devices/wimax/nm-wimax-factory.c b/src/devices/wimax/nm-wimax-factory.c
new file mode 100644
index 000000000..ca962e686
--- /dev/null
+++ b/src/devices/wimax/nm-wimax-factory.c
@@ -0,0 +1,89 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2011 - 2014 Red Hat, Inc.
+ */
+
+#include <gmodule.h>
+
+#include "nm-device-factory.h"
+#include "nm-device-wimax.h"
+
+#define NM_TYPE_WIMAX_FACTORY (nm_wimax_factory_get_type ())
+#define NM_WIMAX_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_WIMAX_FACTORY, NMWimaxFactory))
+
+typedef struct {
+ GObject parent;
+} NMWimaxFactory;
+
+typedef struct {
+ GObjectClass parent;
+} NMWimaxFactoryClass;
+
+static GType nm_wimax_factory_get_type (void);
+
+static void device_factory_interface_init (NMDeviceFactory *factory_iface);
+
+G_DEFINE_TYPE_EXTENDED (NMWimaxFactory, nm_wimax_factory, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
+
+/**************************************************************************/
+
+#define PLUGIN_TYPE NM_DEVICE_TYPE_WIMAX
+
+G_MODULE_EXPORT NMDeviceFactory *
+nm_device_factory_create (GError **error)
+{
+ return (NMDeviceFactory *) g_object_new (NM_TYPE_WIMAX_FACTORY, NULL);
+}
+
+G_MODULE_EXPORT NMDeviceType
+nm_device_factory_get_device_type (void)
+{
+ return PLUGIN_TYPE;
+}
+
+/**************************************************************************/
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ /* FIXME: check udev 'DEVTYPE' instead; but since we only support Intel
+ * WiMAX devices for now this is appropriate.
+ */
+ if (g_strcmp0 (plink->driver, "i2400m_usb") != 0)
+ return NULL; /* unsupported */
+
+ return (NMDevice *) nm_device_wimax_new (plink);
+}
+
+static void
+device_factory_interface_init (NMDeviceFactory *factory_iface)
+{
+ factory_iface->new_link = new_link;
+}
+
+static void
+nm_wimax_factory_init (NMWimaxFactory *factory)
+{
+}
+
+static void
+nm_wimax_factory_class_init (NMWimaxFactoryClass *wf_class)
+{
+}
+
diff --git a/src/wimax/nm-wimax-nsp.c b/src/devices/wimax/nm-wimax-nsp.c
index e3939b70f..efe3b0587 100644
--- a/src/wimax/nm-wimax-nsp.c
+++ b/src/devices/wimax/nm-wimax-nsp.c
@@ -23,21 +23,12 @@
#include "NetworkManager.h"
#include "nm-dbus-manager.h"
#include "nm-setting-wimax.h"
-#include "nm-properties-changed-signal.h"
#include "nm-wimax-nsp-glue.h"
#include "nm-utils.h"
G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, G_TYPE_OBJECT)
enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
PROP_0,
PROP_NAME,
@@ -95,8 +86,6 @@ void
nm_wimax_nsp_export_to_dbus (NMWimaxNsp *self)
{
NMWimaxNspPrivate *priv;
- NMDBusManager *mgr;
- DBusGConnection *g_connection;
static guint32 counter = 0;
g_return_if_fail (NM_IS_WIMAX_NSP (self));
@@ -105,16 +94,8 @@ nm_wimax_nsp_export_to_dbus (NMWimaxNsp *self)
g_return_if_fail (priv->dbus_path == NULL);
- mgr = nm_dbus_manager_get ();
- g_assert (mgr);
-
- g_connection = nm_dbus_manager_get_connection (mgr);
- g_assert (g_connection);
-
priv->dbus_path = g_strdup_printf (NM_DBUS_PATH_WIMAX_NSP "/%d", counter++);
- dbus_g_connection_register_g_object (g_connection, priv->dbus_path, G_OBJECT (self));
-
- g_object_unref (mgr);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->dbus_path, self);
}
const char *
@@ -255,11 +236,7 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *klass)
NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN,
G_PARAM_READWRITE));
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMWimaxNspClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_wimax_nsp_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_wimax_nsp_object_info);
}
diff --git a/src/wimax/nm-wimax-nsp.h b/src/devices/wimax/nm-wimax-nsp.h
index a74b68a79..a74b68a79 100644
--- a/src/wimax/nm-wimax-nsp.h
+++ b/src/devices/wimax/nm-wimax-nsp.h
diff --git a/src/wimax/nm-wimax-types.h b/src/devices/wimax/nm-wimax-types.h
index 8c807fd8a..8c807fd8a 100644
--- a/src/wimax/nm-wimax-types.h
+++ b/src/devices/wimax/nm-wimax-types.h
diff --git a/src/wimax/nm-wimax-util.c b/src/devices/wimax/nm-wimax-util.c
index bca25a1db..bca25a1db 100644
--- a/src/wimax/nm-wimax-util.c
+++ b/src/devices/wimax/nm-wimax-util.c
diff --git a/src/wimax/nm-wimax-util.h b/src/devices/wimax/nm-wimax-util.h
index 71f5aa29d..71f5aa29d 100644
--- a/src/wimax/nm-wimax-util.h
+++ b/src/devices/wimax/nm-wimax-util.h
diff --git a/src/devices/wwan/Makefile.am b/src/devices/wwan/Makefile.am
new file mode 100644
index 000000000..988f46792
--- /dev/null
+++ b/src/devices/wwan/Makefile.am
@@ -0,0 +1,95 @@
+include $(GLIB_MAKEFILE)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-wwan"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(MM_GLIB_CFLAGS)
+
+BUILT_SOURCES = $(null)
+
+pkglib_LTLIBRARIES = libnm-wwan.la libnm-device-plugin-wwan.la
+
+###########################################################
+
+GLIB_GENERATED = nm-modem-enum-types.h nm-modem-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_modem_enum_types_sources = $(srcdir)/nm-modem.h
+
+BUILT_SOURCES += $(GLIB_GENERATED)
+
+libnm_wwan_la_SOURCES = \
+ nm-modem-old.c \
+ nm-modem-old.h \
+ nm-modem-old-types.h \
+ nm-modem-manager.c \
+ nm-modem-manager.h \
+ nm-modem.c \
+ nm-modem.h \
+ \
+ $(GLIB_GENERATED)
+
+if WITH_MODEM_MANAGER_1
+libnm_wwan_la_SOURCES += \
+ nm-modem-broadband.c \
+ nm-modem-broadband.h
+endif
+
+WWAN_SYMBOL_VIS_FILE=$(srcdir)/wwan-exports.ver
+
+libnm_wwan_la_LDFLAGS = \
+ -avoid-version \
+ -Wl,--version-script=$(WWAN_SYMBOL_VIS_FILE)
+libnm_wwan_la_LIBADD = $(DBUS_LIBS) $(MM_GLIB_LIBS)
+
+###########################################################
+
+nm-device-modem-glue.h: $(top_srcdir)/introspection/nm-device-modem.xml
+ dbus-binding-tool --prefix=nm_device_modem --mode=glib-server --output=$@ $<
+
+BUILT_SOURCES += nm-device-modem-glue.h
+
+SYMBOL_VIS_FILE=$(srcdir)/exports.ver
+
+libnm_device_plugin_wwan_la_SOURCES = \
+ nm-wwan-factory.c \
+ nm-wwan-factory.h \
+ nm-device-modem.c \
+ nm-device-modem.h \
+ nm-device-modem-glue.h
+
+libnm_device_plugin_wwan_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_wwan_la_LIBADD = \
+ libnm-wwan.la \
+ $(DBUS_LIBS)
+
+###########################################################
+
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE) $(WWAN_SYMBOL_VIS_FILE)
+
+if ENABLE_TESTS
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-wwan.so $(SYMBOL_VIS_FILE)
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-wwan.so $(WWAN_SYMBOL_VIS_FILE)
+
+endif
+
diff --git a/src/wimax/Makefile.in b/src/devices/wwan/Makefile.in
index 5210414d5..ae33d1c87 100644
--- a/src/wimax/Makefile.in
+++ b/src/devices/wwan/Makefile.in
@@ -78,11 +78,16 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/wimax
+@WITH_MODEM_MANAGER_1_TRUE@am__append_1 = \
+@WITH_MODEM_MANAGER_1_TRUE@ nm-modem-broadband.c \
+@WITH_MODEM_MANAGER_1_TRUE@ nm-modem-broadband.h
+
+subdir = src/devices/wwan
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/build-aux/depcomp
+ $(top_srcdir)/build-aux/depcomp README
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -130,25 +135,35 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(pkglibdir)"
LTLIBRARIES = $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libnm_device_plugin_wimax_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(top_builddir)/src/generated/libnm-generated.la
-am_libnm_device_plugin_wimax_la_OBJECTS = \
- libnm_device_plugin_wimax_la-nm-wimax-factory.lo \
- libnm_device_plugin_wimax_la-nm-device-wimax.lo \
- libnm_device_plugin_wimax_la-nm-wimax-nsp.lo \
- libnm_device_plugin_wimax_la-nm-wimax-util.lo \
- libnm_device_plugin_wimax_la-iwmxsdk.lo
-libnm_device_plugin_wimax_la_OBJECTS = \
- $(am_libnm_device_plugin_wimax_la_OBJECTS)
+libnm_device_plugin_wwan_la_DEPENDENCIES = libnm-wwan.la \
+ $(am__DEPENDENCIES_1)
+am_libnm_device_plugin_wwan_la_OBJECTS = nm-wwan-factory.lo \
+ nm-device-modem.lo
+libnm_device_plugin_wwan_la_OBJECTS = \
+ $(am_libnm_device_plugin_wwan_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-libnm_device_plugin_wimax_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+libnm_device_plugin_wwan_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(AM_CFLAGS) $(CFLAGS) $(libnm_device_plugin_wimax_la_LDFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS) $(libnm_device_plugin_wwan_la_LDFLAGS) \
$(LDFLAGS) -o $@
+libnm_wwan_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am__libnm_wwan_la_SOURCES_DIST = nm-modem-old.c nm-modem-old.h \
+ nm-modem-old-types.h nm-modem-manager.c nm-modem-manager.h \
+ nm-modem.c nm-modem.h nm-modem-enum-types.h \
+ nm-modem-enum-types.c nm-modem-broadband.c \
+ nm-modem-broadband.h
+am__objects_1 = nm-modem-enum-types.lo
+@WITH_MODEM_MANAGER_1_TRUE@am__objects_2 = nm-modem-broadband.lo
+am_libnm_wwan_la_OBJECTS = nm-modem-old.lo nm-modem-manager.lo \
+ nm-modem.lo $(am__objects_1) $(am__objects_2)
+libnm_wwan_la_OBJECTS = $(am_libnm_wwan_la_OBJECTS)
+libnm_wwan_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libnm_wwan_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -183,8 +198,10 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libnm_device_plugin_wimax_la_SOURCES)
-DIST_SOURCES = $(libnm_device_plugin_wimax_la_SOURCES)
+SOURCES = $(libnm_device_plugin_wwan_la_SOURCES) \
+ $(libnm_wwan_la_SOURCES)
+DIST_SOURCES = $(libnm_device_plugin_wwan_la_SOURCES) \
+ $(am__libnm_wwan_la_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -235,12 +252,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -265,7 +285,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -310,12 +329,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -332,6 +355,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -359,11 +384,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -378,6 +408,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -440,6 +471,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -450,45 +482,61 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-pkglib_LTLIBRARIES = libnm-device-plugin-wimax.la
-libnm_device_plugin_wimax_la_SOURCES = \
- nm-wimax-factory.c \
- nm-device-wimax.c \
- nm-device-wimax.h \
- nm-wimax-nsp.c \
- nm-wimax-nsp.h \
- nm-wimax-types.h \
- nm-wimax-util.c \
- nm-wimax-util.h \
- iwmxsdk.c \
- iwmxsdk.h
-
-libnm_device_plugin_wimax_la_CPPFLAGS = \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
-I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
+ -I${top_builddir}/src \
-I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform \
-I${top_builddir}/include \
-I${top_srcdir}/include \
-I${top_builddir}/libnm-util \
-I${top_srcdir}/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-wwan"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(IWMX_SDK_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
-
-libnm_device_plugin_wimax_la_LDFLAGS = -module -avoid-version
-libnm_device_plugin_wimax_la_LIBADD = \
- $(DBUS_LIBS) \
- $(IWMX_SDK_LIBS) \
- $(GUDEV_LIBS) \
- $(top_builddir)/src/generated/libnm-generated.la
-
-BUILT_SOURCES = \
- nm-wimax-nsp-glue.h \
- nm-device-wimax-glue.h
-
+ $(POLKIT_CFLAGS) \
+ $(MM_GLIB_CFLAGS)
+
+BUILT_SOURCES = $(null) $(GLIB_GENERATED) nm-device-modem-glue.h
+pkglib_LTLIBRARIES = libnm-wwan.la libnm-device-plugin-wwan.la
+
+###########################################################
+GLIB_GENERATED = nm-modem-enum-types.h nm-modem-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_modem_enum_types_sources = $(srcdir)/nm-modem.h
+libnm_wwan_la_SOURCES = nm-modem-old.c nm-modem-old.h \
+ nm-modem-old-types.h nm-modem-manager.c nm-modem-manager.h \
+ nm-modem.c nm-modem.h $(GLIB_GENERATED) $(am__append_1)
+WWAN_SYMBOL_VIS_FILE = $(srcdir)/wwan-exports.ver
+libnm_wwan_la_LDFLAGS = \
+ -avoid-version \
+ -Wl,--version-script=$(WWAN_SYMBOL_VIS_FILE)
+
+libnm_wwan_la_LIBADD = $(DBUS_LIBS) $(MM_GLIB_LIBS)
+SYMBOL_VIS_FILE = $(srcdir)/exports.ver
+libnm_device_plugin_wwan_la_SOURCES = \
+ nm-wwan-factory.c \
+ nm-wwan-factory.h \
+ nm-device-modem.c \
+ nm-device-modem.h \
+ nm-device-modem-glue.h
+
+libnm_device_plugin_wwan_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_wwan_la_LIBADD = \
+ libnm-wwan.la \
+ $(DBUS_LIBS)
+
+
+###########################################################
CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE) $(WWAN_SYMBOL_VIS_FILE)
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -503,9 +551,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/wimax/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/devices/wwan/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/wimax/Makefile
+ $(AUTOMAKE) --gnu src/devices/wwan/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -560,8 +608,11 @@ clean-pkglibLTLIBRARIES:
rm -f $${locs}; \
}
-libnm-device-plugin-wimax.la: $(libnm_device_plugin_wimax_la_OBJECTS) $(libnm_device_plugin_wimax_la_DEPENDENCIES) $(EXTRA_libnm_device_plugin_wimax_la_DEPENDENCIES)
- $(AM_V_CCLD)$(libnm_device_plugin_wimax_la_LINK) -rpath $(pkglibdir) $(libnm_device_plugin_wimax_la_OBJECTS) $(libnm_device_plugin_wimax_la_LIBADD) $(LIBS)
+libnm-device-plugin-wwan.la: $(libnm_device_plugin_wwan_la_OBJECTS) $(libnm_device_plugin_wwan_la_DEPENDENCIES) $(EXTRA_libnm_device_plugin_wwan_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_device_plugin_wwan_la_LINK) -rpath $(pkglibdir) $(libnm_device_plugin_wwan_la_OBJECTS) $(libnm_device_plugin_wwan_la_LIBADD) $(LIBS)
+
+libnm-wwan.la: $(libnm_wwan_la_OBJECTS) $(libnm_wwan_la_DEPENDENCIES) $(EXTRA_libnm_wwan_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_wwan_la_LINK) -rpath $(pkglibdir) $(libnm_wwan_la_OBJECTS) $(libnm_wwan_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -569,11 +620,13 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_device_plugin_wimax_la-iwmxsdk.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_device_plugin_wimax_la-nm-device-wimax.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-factory.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-nsp.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-modem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-modem-broadband.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-modem-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-modem-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-modem-old.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-modem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wwan-factory.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -596,41 +649,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_device_plugin_wimax_la-nm-wimax-factory.lo: nm-wimax-factory.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_device_plugin_wimax_la-nm-wimax-factory.lo -MD -MP -MF $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-factory.Tpo -c -o libnm_device_plugin_wimax_la-nm-wimax-factory.lo `test -f 'nm-wimax-factory.c' || echo '$(srcdir)/'`nm-wimax-factory.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-factory.Tpo $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-factory.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wimax-factory.c' object='libnm_device_plugin_wimax_la-nm-wimax-factory.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_device_plugin_wimax_la-nm-wimax-factory.lo `test -f 'nm-wimax-factory.c' || echo '$(srcdir)/'`nm-wimax-factory.c
-
-libnm_device_plugin_wimax_la-nm-device-wimax.lo: nm-device-wimax.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_device_plugin_wimax_la-nm-device-wimax.lo -MD -MP -MF $(DEPDIR)/libnm_device_plugin_wimax_la-nm-device-wimax.Tpo -c -o libnm_device_plugin_wimax_la-nm-device-wimax.lo `test -f 'nm-device-wimax.c' || echo '$(srcdir)/'`nm-device-wimax.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_device_plugin_wimax_la-nm-device-wimax.Tpo $(DEPDIR)/libnm_device_plugin_wimax_la-nm-device-wimax.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-wimax.c' object='libnm_device_plugin_wimax_la-nm-device-wimax.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_device_plugin_wimax_la-nm-device-wimax.lo `test -f 'nm-device-wimax.c' || echo '$(srcdir)/'`nm-device-wimax.c
-
-libnm_device_plugin_wimax_la-nm-wimax-nsp.lo: nm-wimax-nsp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_device_plugin_wimax_la-nm-wimax-nsp.lo -MD -MP -MF $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-nsp.Tpo -c -o libnm_device_plugin_wimax_la-nm-wimax-nsp.lo `test -f 'nm-wimax-nsp.c' || echo '$(srcdir)/'`nm-wimax-nsp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-nsp.Tpo $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-nsp.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wimax-nsp.c' object='libnm_device_plugin_wimax_la-nm-wimax-nsp.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_device_plugin_wimax_la-nm-wimax-nsp.lo `test -f 'nm-wimax-nsp.c' || echo '$(srcdir)/'`nm-wimax-nsp.c
-
-libnm_device_plugin_wimax_la-nm-wimax-util.lo: nm-wimax-util.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_device_plugin_wimax_la-nm-wimax-util.lo -MD -MP -MF $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-util.Tpo -c -o libnm_device_plugin_wimax_la-nm-wimax-util.lo `test -f 'nm-wimax-util.c' || echo '$(srcdir)/'`nm-wimax-util.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-util.Tpo $(DEPDIR)/libnm_device_plugin_wimax_la-nm-wimax-util.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wimax-util.c' object='libnm_device_plugin_wimax_la-nm-wimax-util.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_device_plugin_wimax_la-nm-wimax-util.lo `test -f 'nm-wimax-util.c' || echo '$(srcdir)/'`nm-wimax-util.c
-
-libnm_device_plugin_wimax_la-iwmxsdk.lo: iwmxsdk.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_device_plugin_wimax_la-iwmxsdk.lo -MD -MP -MF $(DEPDIR)/libnm_device_plugin_wimax_la-iwmxsdk.Tpo -c -o libnm_device_plugin_wimax_la-iwmxsdk.lo `test -f 'iwmxsdk.c' || echo '$(srcdir)/'`iwmxsdk.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_device_plugin_wimax_la-iwmxsdk.Tpo $(DEPDIR)/libnm_device_plugin_wimax_la-iwmxsdk.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iwmxsdk.c' object='libnm_device_plugin_wimax_la-iwmxsdk.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_device_plugin_wimax_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_device_plugin_wimax_la-iwmxsdk.lo `test -f 'iwmxsdk.c' || echo '$(srcdir)/'`iwmxsdk.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -719,7 +737,9 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
@@ -831,29 +851,35 @@ ps-am:
uninstall-am: uninstall-pkglibLTLIBRARIES
-.MAKE: all check install install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-pkglibLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-pkglibLTLIBRARIES install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
- pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
- uninstall-pkglibLTLIBRARIES
-
-
-nm-wimax-nsp-glue.h: $(top_srcdir)/introspection/nm-wimax-nsp.xml
- dbus-binding-tool --prefix=nm_wimax_nsp --mode=glib-server --output=$@ $<
-
-nm-device-wimax-glue.h: $(top_srcdir)/introspection/nm-device-wimax.xml
- dbus-binding-tool --prefix=nm_device_wimax --mode=glib-server --output=$@ $<
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+ clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-pkglibLTLIBRARIES install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-pkglibLTLIBRARIES
+
+include $(GLIB_MAKEFILE)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+###########################################################
+
+nm-device-modem-glue.h: $(top_srcdir)/introspection/nm-device-modem.xml
+ dbus-binding-tool --prefix=nm_device_modem --mode=glib-server --output=$@ $<
+
+@ENABLE_TESTS_TRUE@check-local:
+@ENABLE_TESTS_TRUE@ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-wwan.so $(SYMBOL_VIS_FILE)
+@ENABLE_TESTS_TRUE@ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-wwan.so $(WWAN_SYMBOL_VIS_FILE)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/modem-manager/README b/src/devices/wwan/README
index c9f0f5f1e..4661c0428 100644
--- a/src/modem-manager/README
+++ b/src/devices/wwan/README
@@ -12,7 +12,7 @@ Common source
* nm-modem-manager.[h|c]:
Defines the `NMModemManager' object, which takes care of listening to
- signals from the DBus inteface notifying about added or removed modems.
+ signals from the DBus interface notifying about added or removed modems.
It also takes care of creating proper `NMModem' objects from the
information retrieved from the DBus interface.
@@ -29,10 +29,10 @@ ModemManager 0.7 integration
ModemManager 0.4/0.5/0.6 integration
********************************************************************************
- * nm-modem-types.h:
+ * nm-modem-old-types.h:
Defines helper types to use with the (old) ModemManager DBus API.
- * nm-modem-generic.[h|c]:
+ * nm-modem-old.[h|c]:
Defines the `NMModemGeneric' object. All modem objects based on the old
ModemManager interface are subclasses of this one.
diff --git a/src/devices/wwan/exports.ver b/src/devices/wwan/exports.ver
new file mode 100644
index 000000000..d2c451244
--- /dev/null
+++ b/src/devices/wwan/exports.ver
@@ -0,0 +1,7 @@
+{
+global:
+ nm_device_factory_create;
+ nm_device_factory_get_device_type;
+local:
+ *;
+};
diff --git a/src/devices/wwan/nm-device-modem-glue.h b/src/devices/wwan/nm-device-modem-glue.h
new file mode 100644
index 000000000..21271491e
--- /dev/null
+++ b/src/devices/wwan/nm-device-modem-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_modem_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_modem_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_modem_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_modem_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_modem_object_info = { 1,
+ dbus_glib_nm_device_modem_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Modem\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Modem\0ModemCapabilities\0modem_capabilities\0read\0org.freedesktop.NetworkManager.Device.Modem\0CurrentCapabilities\0current_capabilities\0read\0\0"
+};
+
diff --git a/src/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c
index 24d9cefbf..678f77950 100644
--- a/src/nm-device-modem.c
+++ b/src/devices/wwan/nm-device-modem.c
@@ -24,14 +24,12 @@
#include "nm-device-modem.h"
#include "nm-modem.h"
-#include "nm-modem-cdma.h"
-#include "nm-modem-gsm.h"
+#include "nm-modem-old.h"
#include "nm-device-private.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-rfkill.h"
-#include "nm-marshal.h"
+#include "nm-rfkill-manager.h"
#include "nm-logging.h"
-#include "nm-system.h"
+#include "nm-dbus-manager.h"
+#include "nm-settings-connection.h"
#if WITH_MODEM_MANAGER_1
#include "nm-modem-broadband.h"
@@ -47,6 +45,7 @@ typedef struct {
NMModem *modem;
NMDeviceModemCapabilities caps;
NMDeviceModemCapabilities current_caps;
+ gboolean rf_enabled;
} NMDeviceModemPrivate;
enum {
@@ -56,15 +55,6 @@ enum {
PROP_CURRENT_CAPABILITIES,
};
-enum {
- PROPERTIES_CHANGED,
- ENABLE_CHANGED,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static void set_enabled (NMDevice *device, gboolean enabled);
-
/*****************************************************************************/
static void
@@ -109,14 +99,33 @@ modem_prepare_result (NMModem *modem,
if (success)
nm_device_activate_schedule_stage2_device_config (device);
- else
+ else {
+ if (reason == NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT) {
+ /* If the connect failed because the SIM PIN was wrong don't allow
+ * the device to be auto-activated anymore, which would risk locking
+ * the SIM if the incorrect PIN continues to be used.
+ */
+ g_object_set (G_OBJECT (device), NM_DEVICE_AUTOCONNECT, FALSE, NULL);
+ nm_log_info (LOGD_MB, "(%s): disabling autoconnect due to failed SIM PIN",
+ nm_device_get_iface (device));
+ }
+
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
+ }
}
static void
modem_auth_requested (NMModem *modem, gpointer user_data)
{
- nm_device_state_changed (NM_DEVICE (user_data),
+ NMDevice *device = NM_DEVICE (user_data);
+
+ /* Auth requests (PIN, PAP/CHAP passwords, etc) only get handled
+ * during activation.
+ */
+ if (!nm_device_is_activating (device))
+ return;
+
+ nm_device_state_changed (device,
NM_DEVICE_STATE_NEED_AUTH,
NM_DEVICE_STATE_REASON_NONE);
}
@@ -168,38 +177,77 @@ data_port_changed_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data)
}
static void
-modem_enabled_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data)
+modem_state_cb (NMModem *modem,
+ NMModemState new_state,
+ NMModemState old_state,
+ gpointer user_data)
{
- NMDeviceModem *self = NM_DEVICE_MODEM (user_data);
- NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
+ NMDeviceState dev_state = nm_device_get_state (device);
+
+ if (new_state <= NM_MODEM_STATE_DISABLING &&
+ old_state > NM_MODEM_STATE_DISABLING &&
+ priv->rf_enabled) {
+ /* Called when the ModemManager modem enabled state is changed externally
+ * to NetworkManager (eg something using MM's D-Bus API directly).
+ */
+ if (nm_device_is_activating (device) || dev_state == NM_DEVICE_STATE_ACTIVATED) {
+ /* user-initiated action, hence DISCONNECTED not FAILED */
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
+ return;
+ }
+ }
+
+ if (new_state < NM_MODEM_STATE_CONNECTING &&
+ old_state >= NM_MODEM_STATE_CONNECTING &&
+ dev_state >= NM_DEVICE_STATE_NEED_AUTH &&
+ dev_state <= NM_DEVICE_STATE_ACTIVATED) {
+ /* Fail the device if the modem disconnects unexpectedly while the
+ * device is activating/activated. */
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER);
+ return;
+ }
+
+ if (new_state > NM_MODEM_STATE_LOCKED && old_state == NM_MODEM_STATE_LOCKED) {
+ /* If the modem is now unlocked, enable/disable it according to the
+ * device's enabled/disabled state.
+ */
+ nm_modem_set_mm_enabled (priv->modem, priv->rf_enabled);
+ }
- set_enabled (NM_DEVICE (self), nm_modem_get_mm_enabled (priv->modem));
+ if ((dev_state >= NM_DEVICE_STATE_DISCONNECTED) && !nm_device_is_available (device)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNAVAILABLE,
+ NM_DEVICE_STATE_REASON_MODEM_FAILED);
+ return;
+ }
- g_signal_emit (G_OBJECT (self), signals[ENABLE_CHANGED], 0);
+ if ((dev_state == NM_DEVICE_STATE_UNAVAILABLE) && nm_device_is_available (device)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_MODEM_AVAILABLE);
+ return;
+ }
}
static void
-modem_connected_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data)
+modem_removed_cb (NMModem *modem, gpointer user_data)
{
- NMDeviceModem *self = NM_DEVICE_MODEM (user_data);
- NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
-
- if ( nm_device_get_state (NM_DEVICE (self)) == NM_DEVICE_STATE_ACTIVATED
- && !nm_modem_get_mm_connected (priv->modem)) {
- /* Fail the device if the modem disconnects unexpectedly */
- nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER);
- }
+ g_signal_emit_by_name (NM_DEVICE (user_data), NM_DEVICE_REMOVED);
}
/*****************************************************************************/
-NMModem *
-nm_device_modem_get_modem (NMDeviceModem *self)
+static gboolean
+owns_iface (NMDevice *device, const char *iface)
{
- g_return_val_if_fail (self != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NULL);
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
- return NM_DEVICE_MODEM_GET_PRIVATE (self)->modem;
+ g_assert (priv->modem);
+ return nm_modem_owns_port (priv->modem, iface);
}
/*****************************************************************************/
@@ -210,36 +258,82 @@ device_state_changed (NMDevice *device,
NMDeviceState old_state,
NMDeviceStateReason reason)
{
- nm_modem_device_state_changed (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem,
- new_state,
- old_state,
- reason);
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
+ NMConnection *connection = nm_device_get_connection (device);
+
+ g_assert (priv->modem);
+
+ if (new_state == NM_DEVICE_STATE_UNAVAILABLE &&
+ old_state < NM_DEVICE_STATE_UNAVAILABLE) {
+ /* Log initial modem state */
+ nm_log_info (LOGD_MB, "(%s): modem state '%s'",
+ nm_device_get_iface (device),
+ nm_modem_state_to_string (nm_modem_get_state (priv->modem)));
+ }
+
+ nm_modem_device_state_changed (priv->modem, new_state, old_state, reason);
+
+ switch (reason) {
+ case NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED:
+ case NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING:
+ case NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED:
+ case NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED:
+ case NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED:
+ case NM_DEVICE_STATE_REASON_GSM_SIM_WRONG:
+ case NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT:
+ case NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED:
+ case NM_DEVICE_STATE_REASON_GSM_APN_FAILED:
+ /* Block autoconnect of the just-failed connection for situations
+ * where a retry attempt would just fail again.
+ */
+ if (connection)
+ nm_settings_connection_set_autoconnect_blocked_reason (NM_SETTINGS_CONNECTION (connection), reason);
+ break;
+ default:
+ break;
+ }
}
-static guint32
-get_generic_capabilities (NMDevice *device)
+static guint
+get_hw_address_length (NMDevice *device, gboolean *out_permanent)
{
- return NM_DEVICE_CAP_NM_SUPPORTED;
+ return 0;
}
-static NMConnection *
-get_best_auto_connection (NMDevice *device,
- GSList *connections,
- char **specific_object)
+static gboolean
+check_connection_compatible (NMDevice *device, NMConnection *connection)
{
- NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
+ if (!NM_DEVICE_CLASS (nm_device_modem_parent_class)->check_connection_compatible (device, connection))
+ return FALSE;
- return nm_modem_get_best_auto_connection (priv->modem, connections, specific_object);
+ return nm_modem_check_connection_compatible (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, connection);
}
static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
+check_connection_available (NMDevice *device,
+ NMConnection *connection,
+ const char *specific_object)
{
- NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
+ NMDeviceModem *self = NM_DEVICE_MODEM (device);
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
+ NMModemState state;
+
+ if (!priv->rf_enabled || !priv->modem)
+ return FALSE;
- return nm_modem_check_connection_compatible (priv->modem, connection, error);
+ state = nm_modem_get_state (priv->modem);
+ if (state <= NM_MODEM_STATE_INITIALIZING)
+ return FALSE;
+
+ if (state == NM_MODEM_STATE_LOCKED) {
+ NMSettingGsm *s_gsm = nm_connection_get_setting_gsm (connection);
+
+ /* Can't use a connection without a PIN if the modem is locked */
+ if (!s_gsm || !nm_setting_gsm_get_pin (s_gsm))
+ return FALSE;
+ }
+
+ return TRUE;
}
static gboolean
@@ -263,8 +357,13 @@ deactivate (NMDevice *device)
static NMActStageReturn
act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
{
+ NMActStageReturn ret;
NMActRequest *req;
+ ret = NM_DEVICE_CLASS (nm_device_modem_parent_class)->act_stage1_prepare (device, reason);
+ if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
+ return ret;
+
req = nm_device_get_act_request (device);
g_assert (req);
@@ -315,7 +414,10 @@ act_stage3_ip6_config_start (NMDevice *device,
static gboolean
get_enabled (NMDevice *device)
{
- return nm_modem_get_mm_enabled (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem);
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
+ NMModemState modem_state = nm_modem_get_state (priv->modem);
+
+ return priv->rf_enabled && (modem_state >= NM_MODEM_STATE_LOCKED);
}
static void
@@ -323,72 +425,81 @@ set_enabled (NMDevice *device, gboolean enabled)
{
NMDeviceModem *self = NM_DEVICE_MODEM (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
- NMDeviceState state;
+
+ /* Called only by the Manager in response to rfkill switch changes or
+ * global user WWAN enable/disable preference changes.
+ */
+ priv->rf_enabled = enabled;
if (priv->modem) {
+ /* Sync the ModemManager modem enabled/disabled with rfkill/user preference */
nm_modem_set_mm_enabled (priv->modem, enabled);
+ }
- if (enabled == FALSE) {
- state = nm_device_get_state (device);
- if (nm_device_is_activating (device) || state == NM_DEVICE_STATE_ACTIVATED) {
- /* user-initiated action, hence DISCONNECTED not FAILED */
- nm_device_state_changed (device,
- NM_DEVICE_STATE_DISCONNECTED,
- NM_DEVICE_STATE_REASON_USER_REQUESTED);
- }
- }
+ if (enabled == FALSE) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNAVAILABLE,
+ NM_DEVICE_STATE_REASON_NONE);
+ }
+}
+
+static gboolean
+is_available (NMDevice *dev)
+{
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (dev);
+ NMModemState modem_state;
+
+ if (!priv->rf_enabled) {
+ nm_log_dbg (LOGD_MB, "(%s): not available because WWAN airplane mode is on",
+ nm_device_get_iface (dev));
+ return FALSE;
}
+
+ g_assert (priv->modem);
+ modem_state = nm_modem_get_state (priv->modem);
+ if (modem_state <= NM_MODEM_STATE_INITIALIZING) {
+ nm_log_dbg (LOGD_MB, "(%s): not available because modem is not ready (%s)",
+ nm_device_get_iface (dev),
+ nm_modem_state_to_string (modem_state));
+ return FALSE;
+ }
+
+ return TRUE;
}
/*****************************************************************************/
NMDevice *
-nm_device_modem_new (NMModem *modem, const char *driver)
+nm_device_modem_new (NMModem *modem)
{
NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE;
NMDeviceModemCapabilities current_caps = NM_DEVICE_MODEM_CAPABILITY_NONE;
- const gchar *type_desc = NULL;
- const gchar *ip_iface = NULL;
+ NMDevice *device;
+ const char *data_port;
- g_return_val_if_fail (modem != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM (modem), NULL);
- g_return_val_if_fail (driver != NULL, NULL);
-
- if (NM_IS_MODEM_CDMA (modem)) {
- caps = NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO;
- current_caps = caps;
- type_desc = "CDMA/EVDO";
- ip_iface = nm_modem_get_data_port (modem);
- } else if (NM_IS_MODEM_GSM (modem)) {
- caps = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS;
- current_caps = caps;
- type_desc = "GSM/UMTS";
- ip_iface = nm_modem_get_data_port (modem);
- }
-#if WITH_MODEM_MANAGER_1
- else if (NM_IS_MODEM_BROADBAND (modem)) {
- nm_modem_broadband_get_capabilities (NM_MODEM_BROADBAND (modem), &caps, &current_caps);
- type_desc = "Broadband";
- /* data port not yet known in broadband modems */
- }
-#endif
- else {
- nm_log_warn (LOGD_MB, "unhandled modem type %s", G_OBJECT_TYPE_NAME (modem));
- return NULL;
- }
- return (NMDevice *) g_object_new (NM_TYPE_DEVICE_MODEM,
- NM_DEVICE_UDI, nm_modem_get_path (modem),
- NM_DEVICE_IFACE, nm_modem_get_uid (modem),
- NM_DEVICE_IP_IFACE, ip_iface,
- NM_DEVICE_DRIVER, driver,
- NM_DEVICE_TYPE_DESC, type_desc,
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_MODEM,
- NM_DEVICE_RFKILL_TYPE, RFKILL_TYPE_WWAN,
- NM_DEVICE_MODEM_MODEM, modem,
- NM_DEVICE_MODEM_CAPABILITIES, caps,
- NM_DEVICE_MODEM_CURRENT_CAPABILITIES, caps,
- NULL);
+ /* Load capabilities */
+ nm_modem_get_capabilities (modem, &caps, &current_caps);
+
+ device = (NMDevice *) g_object_new (NM_TYPE_DEVICE_MODEM,
+ NM_DEVICE_UDI, nm_modem_get_path (modem),
+ NM_DEVICE_IFACE, nm_modem_get_uid (modem),
+ NM_DEVICE_DRIVER, nm_modem_get_driver (modem),
+ NM_DEVICE_TYPE_DESC, "Broadband",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_MODEM,
+ NM_DEVICE_RFKILL_TYPE, RFKILL_TYPE_WWAN,
+ NM_DEVICE_MODEM_MODEM, modem,
+ NM_DEVICE_MODEM_CAPABILITIES, caps,
+ NM_DEVICE_MODEM_CURRENT_CAPABILITIES, current_caps,
+ NULL);
+
+ /* If the data port is known, set it as the IP interface immediately */
+ data_port = nm_modem_get_data_port (modem);
+ if (data_port)
+ nm_device_set_ip_iface (device, data_port);
+
+ return device;
}
static void
@@ -410,8 +521,8 @@ set_modem (NMDeviceModem *self, NMModem *modem)
g_signal_connect (modem, NM_MODEM_IP4_CONFIG_RESULT, G_CALLBACK (modem_ip4_config_result), self);
g_signal_connect (modem, NM_MODEM_AUTH_REQUESTED, G_CALLBACK (modem_auth_requested), self);
g_signal_connect (modem, NM_MODEM_AUTH_RESULT, G_CALLBACK (modem_auth_result), self);
- g_signal_connect (modem, "notify::" NM_MODEM_ENABLED, G_CALLBACK (modem_enabled_cb), self);
- g_signal_connect (modem, "notify::" NM_MODEM_CONNECTED, G_CALLBACK (modem_connected_cb), self);
+ g_signal_connect (modem, NM_MODEM_STATE_CHANGED, G_CALLBACK (modem_state_cb), self);
+ g_signal_connect (modem, NM_MODEM_REMOVED, G_CALLBACK (modem_removed_cb), self);
/* In the old ModemManager the data port is known from the very beginning;
* while in the new ModemManager the data port is set afterwards when the bearer gets
@@ -465,14 +576,15 @@ get_property (GObject *object, guint prop_id,
}
static void
-finalize (GObject *object)
+dispose (GObject *object)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
- g_object_unref (priv->modem);
- priv->modem = NULL;
+ if (priv->modem)
+ g_signal_handlers_disconnect_by_data (priv->modem, NM_DEVICE_MODEM (object));
+ g_clear_object (&priv->modem);
- G_OBJECT_CLASS (nm_device_modem_parent_class)->finalize (object);
+ G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
}
static void
@@ -484,13 +596,13 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
g_type_class_add_private (object_class, sizeof (NMDeviceModemPrivate));
/* Virtual methods */
- object_class->finalize = finalize;
+ object_class->dispose = dispose;
object_class->get_property = get_property;
object_class->set_property = set_property;
- device_class->get_generic_capabilities = get_generic_capabilities;
- device_class->get_best_auto_connection = get_best_auto_connection;
+ device_class->get_hw_address_length = get_hw_address_length;
device_class->check_connection_compatible = check_connection_compatible;
+ device_class->check_connection_available = check_connection_available;
device_class->complete_connection = complete_connection;
device_class->deactivate = deactivate;
device_class->act_stage1_prepare = act_stage1_prepare;
@@ -500,6 +612,8 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
device_class->ip4_config_pre_commit = ip4_config_pre_commit;
device_class->get_enabled = get_enabled;
device_class->set_enabled = set_enabled;
+ device_class->owns_iface = owns_iface;
+ device_class->is_available = is_available;
device_class->state_changed = device_state_changed;
@@ -510,7 +624,7 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
"Modem",
"Modem",
NM_TYPE_MODEM,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_CAPABILITIES,
g_param_spec_uint (NM_DEVICE_MODEM_CAPABILITIES,
@@ -526,19 +640,7 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceModemClass, properties_changed));
-
- signals[ENABLE_CHANGED] =
- g_signal_new (NM_DEVICE_MODEM_ENABLE_CHANGED,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (mclass),
- &dbus_glib_nm_device_modem_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (mclass),
+ &dbus_glib_nm_device_modem_object_info);
}
diff --git a/src/nm-device-modem.h b/src/devices/wwan/nm-device-modem.h
index 85c626a36..ee6b2988c 100644
--- a/src/nm-device-modem.h
+++ b/src/devices/wwan/nm-device-modem.h
@@ -38,8 +38,6 @@
#define NM_DEVICE_MODEM_CAPABILITIES "modem-capabilities"
#define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities"
-#define NM_DEVICE_MODEM_ENABLE_CHANGED "enable-changed"
-
typedef struct {
NMDevice parent;
} NMDeviceModem;
@@ -47,14 +45,10 @@ typedef struct {
typedef struct {
NMDeviceClass parent;
- void (*properties_changed) (NMDeviceModem *self, GHashTable *properties);
} NMDeviceModemClass;
GType nm_device_modem_get_type (void);
-NMDevice *nm_device_modem_new (NMModem *modem, const char *driver);
-
-/* Private for subclases */
-NMModem *nm_device_modem_get_modem (NMDeviceModem *self);
+NMDevice *nm_device_modem_new (NMModem *modem);
#endif /* NM_DEVICE_MODEM_H */
diff --git a/src/modem-manager/nm-modem-broadband.c b/src/devices/wwan/nm-modem-broadband.c
index febab8a47..807b89243 100644
--- a/src/modem-manager/nm-modem-broadband.c
+++ b/src/devices/wwan/nm-modem-broadband.c
@@ -22,7 +22,6 @@
#include <string.h>
#include <libmm-glib.h>
#include "nm-modem-broadband.h"
-#include "nm-system.h"
#include "nm-setting-connection.h"
#include "nm-logging.h"
#include "NetworkManagerUtils.h"
@@ -62,22 +61,13 @@ enum {
/*****************************************************************************/
-#define NM_MODEM_BROADBAND_ERROR (nm_modem_broadband_error_quark ())
-
-static GQuark
-nm_modem_broadband_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-modem-broadband-error");
- return quark;
-}
-
static NMDeviceStateReason
translate_mm_error (GError *error)
{
NMDeviceStateReason reason;
+ g_return_val_if_fail (error != NULL, NM_DEVICE_STATE_REASON_UNKNOWN);
+
if (g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_CARRIER))
reason = NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER;
else if (g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_DIALTONE))
@@ -100,6 +90,8 @@ translate_mm_error (GError *error)
reason = NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED;
else if (g_error_matches (error, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_SIM_WRONG))
reason = NM_DEVICE_STATE_REASON_GSM_SIM_WRONG;
+ else if (g_error_matches (error, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_INCORRECT_PASSWORD))
+ reason = NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT;
else {
/* unable to map the ModemManager error to a NM_DEVICE_STATE_REASON */
nm_log_dbg (LOGD_MB, "unmapped error detected: '%s'", error->message);
@@ -111,11 +103,12 @@ translate_mm_error (GError *error)
/*****************************************************************************/
-void
-nm_modem_broadband_get_capabilities (NMModemBroadband *self,
- NMDeviceModemCapabilities *modem_caps,
- NMDeviceModemCapabilities *current_caps)
+static void
+get_capabilities (NMModem *_self,
+ NMDeviceModemCapabilities *modem_caps,
+ NMDeviceModemCapabilities *current_caps)
{
+ NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
MMModemCapability all_supported = MM_MODEM_CAPABILITY_NONE;
MMModemCapability *supported;
guint n_supported;
@@ -135,6 +128,20 @@ nm_modem_broadband_get_capabilities (NMModemBroadband *self,
*current_caps = (NMDeviceModemCapabilities) mm_modem_get_current_capabilities (self->priv->modem_iface);
}
+static gboolean
+owns_port (NMModem *_self, const char *iface)
+{
+ NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
+ const MMModemPortInfo *ports = NULL;
+ guint n_ports = 0, i;
+ gboolean owns = FALSE;
+
+ mm_modem_peek_ports (self->priv->modem_iface, &ports, &n_ports);
+ for (i = 0; i < n_ports && !owns; i++)
+ owns = (g_strcmp0 (iface, ports[i].name) == 0);
+ return owns;
+}
+
/*****************************************************************************/
static void
@@ -201,8 +208,8 @@ connect_ready (MMModemSimple *simple_iface,
ip_method = MM_MODEM_IP_METHOD_DHCP;
break;
default:
- error = g_error_new (NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INVALID,
+ error = g_error_new (NM_MODEM_ERROR,
+ NM_MODEM_ERROR_CONNECTION_INVALID,
"invalid IP config");
nm_log_warn (LOGD_MB, "(%s) failed to connect modem: %s",
nm_modem_get_uid (NM_MODEM (self)),
@@ -307,98 +314,42 @@ create_gsm_connect_properties (NMConnection *connection)
static NMActStageReturn
act_stage1_prepare (NMModem *_self,
- NMActRequest *req,
- GPtrArray **out_hints,
- const char **out_setting_name,
+ NMConnection *connection,
NMDeviceStateReason *reason)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
- NMConnection *connection;
-
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- *out_setting_name = nm_connection_need_secrets (connection, out_hints);
- if (!*out_setting_name) {
- MMModemCapability caps;
+ MMModemCapability caps;
- caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
-
- g_clear_object (&self->priv->connect_properties);
-
- if (MODEM_CAPS_3GPP (caps))
- self->priv->connect_properties = create_gsm_connect_properties (connection);
- else if (MODEM_CAPS_3GPP2 (caps))
- self->priv->connect_properties = create_cdma_connect_properties (connection);
- else {
- nm_log_warn (LOGD_MB, "(%s) not a mobile broadband modem",
- nm_modem_get_uid (NM_MODEM (self)));
- return NM_ACT_STAGE_RETURN_FAILURE;
- }
-
- if (!self->priv->simple_iface)
- self->priv->simple_iface = mm_object_get_modem_simple (self->priv->modem_object);
+ g_clear_object (&self->priv->connect_properties);
- g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (self->priv->simple_iface), MODEM_CONNECT_TIMEOUT_SECS * 1000);
- mm_modem_simple_connect (self->priv->simple_iface,
- self->priv->connect_properties,
- NULL,
- (GAsyncReadyCallback)connect_ready,
- g_object_ref (self));
- } else {
- /* NMModem will handle requesting secrets... */
+ caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
+ if (MODEM_CAPS_3GPP (caps))
+ self->priv->connect_properties = create_gsm_connect_properties (connection);
+ else if (MODEM_CAPS_3GPP2 (caps))
+ self->priv->connect_properties = create_cdma_connect_properties (connection);
+ else {
+ nm_log_warn (LOGD_MB, "(%s) not a mobile broadband modem",
+ nm_modem_get_uid (NM_MODEM (self)));
+ return NM_ACT_STAGE_RETURN_FAILURE;
}
- return NM_ACT_STAGE_RETURN_POSTPONE;
-}
-
-/*****************************************************************************/
-
-static NMConnection *
-get_best_auto_connection (NMModem *_self,
- GSList *connections,
- char **specific_object)
-{
- NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
- MMModemCapability modem_caps;
- GSList *iter;
-
- modem_caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- NMSettingConnection *s_con;
-
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
-
- if (!nm_setting_connection_get_autoconnect (s_con))
- continue;
-
- /* If GSM settings given and our modem is 3GPP, those are the best ones */
- if ( g_str_equal (nm_setting_connection_get_connection_type (s_con),
- NM_SETTING_GSM_SETTING_NAME)
- && MODEM_CAPS_3GPP (modem_caps))
- return connection;
+ if (!self->priv->simple_iface)
+ self->priv->simple_iface = mm_object_get_modem_simple (self->priv->modem_object);
- /* If CDMA settings given and our modem is 3GPP2, return those */
- if ( g_str_equal (nm_setting_connection_get_connection_type (s_con),
- NM_SETTING_CDMA_SETTING_NAME)
- && MODEM_CAPS_3GPP2 (modem_caps))
- return connection;
+ g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (self->priv->simple_iface), MODEM_CONNECT_TIMEOUT_SECS * 1000);
+ mm_modem_simple_connect (self->priv->simple_iface,
+ self->priv->connect_properties,
+ NULL,
+ (GAsyncReadyCallback)connect_ready,
+ g_object_ref (self));
- /* continue */
- }
-
- return NULL;
+ return NM_ACT_STAGE_RETURN_POSTPONE;
}
/*****************************************************************************/
static gboolean
-check_connection_compatible (NMModem *_self,
- NMConnection *connection,
- GError **error)
+check_connection_compatible (NMModem *_self, NMConnection *connection)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
MMModemCapability modem_caps;
@@ -412,22 +363,12 @@ check_connection_compatible (NMModem *_self,
NMSettingGsm *s_gsm;
if (!g_str_equal (nm_setting_connection_get_connection_type (s_con),
- NM_SETTING_GSM_SETTING_NAME)) {
- g_set_error (error,
- NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_GSM,
- "The connection was not a 3GPP connection.");
+ NM_SETTING_GSM_SETTING_NAME))
return FALSE;
- }
s_gsm = nm_connection_get_setting_gsm (connection);
- if (!s_gsm) {
- g_set_error (error,
- NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INVALID,
- "The connection was not a valid 3GPP connection.");
+ if (!s_gsm)
return FALSE;
- }
return TRUE;
}
@@ -436,30 +377,16 @@ check_connection_compatible (NMModem *_self,
NMSettingCdma *s_cdma;
if (!g_str_equal (nm_setting_connection_get_connection_type (s_con),
- NM_SETTING_CDMA_SETTING_NAME)) {
- g_set_error (error,
- NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_CDMA,
- "The connection was not a 3GPP2 connection.");
+ NM_SETTING_CDMA_SETTING_NAME))
return FALSE;
- }
s_cdma = nm_connection_get_setting_cdma (connection);
- if (!s_cdma) {
- g_set_error (error,
- NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INVALID,
- "The connection was not a valid 3GPP2 connection.");
+ if (!s_cdma)
return FALSE;
- }
return TRUE;
}
- g_set_error (error,
- NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INCOMPATIBLE,
- "Device is not a mobile broadband modem");
return FALSE;
}
@@ -538,8 +465,8 @@ complete_connection (NMModem *_self,
}
g_set_error (error,
- NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INCOMPATIBLE,
+ NM_MODEM_ERROR,
+ NM_MODEM_ERROR_CONNECTION_INCOMPATIBLE,
"Device is not a mobile broadband modem");
return FALSE;
}
@@ -577,35 +504,25 @@ get_user_pass (NMModem *modem,
}
/*****************************************************************************/
-
-static const char *
-get_setting_name (NMModem *_self)
-{
- NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
- MMModemCapability modem_caps;
-
- modem_caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
- if (MODEM_CAPS_3GPP (modem_caps))
- return NM_SETTING_GSM_SETTING_NAME;
-
- if (MODEM_CAPS_3GPP2 (modem_caps))
- return NM_SETTING_CDMA_SETTING_NAME;
-
- return "unknown";
-}
-
-/*****************************************************************************/
/* Query/Update enabled state */
static void
-update_mm_enabled (NMModem *self,
- gboolean new_enabled)
+set_power_state_low_ready (MMModem *modem,
+ GAsyncResult *result,
+ NMModemBroadband *self)
{
- if (nm_modem_get_mm_enabled (self) != new_enabled) {
- g_object_set (self,
- NM_MODEM_ENABLED, new_enabled,
- NULL);
+ GError *error = NULL;
+
+ if (!mm_modem_set_power_state_finish (modem, result, &error)) {
+ /* Log but ignore errors; not all modems support low power state */
+ nm_log_dbg (LOGD_MB, "(%s) failed to set modem low power state: %s",
+ nm_modem_get_uid (NM_MODEM (self)),
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
+
+ /* Balance refcount */
+ g_object_unref (self);
}
static void
@@ -615,14 +532,20 @@ modem_disable_ready (MMModem *modem_iface,
{
GError *error = NULL;
- if (!mm_modem_disable_finish (modem_iface, res, &error)) {
+ if (mm_modem_disable_finish (modem_iface, res, &error)) {
+ /* Once disabled, move to low-power mode */
+ mm_modem_set_power_state (modem_iface,
+ MM_MODEM_POWER_STATE_LOW,
+ NULL,
+ (GAsyncReadyCallback) set_power_state_low_ready,
+ g_object_ref (self));
+ } else {
nm_log_warn (LOGD_MB, "(%s) failed to disable modem: %s",
nm_modem_get_uid (NM_MODEM (self)),
error && error->message ? error->message : "(unknown)");
+ nm_modem_set_prev_state (NM_MODEM (self), "disable failed");
g_clear_error (&error);
- } else
- /* Update enabled/disabled state again */
- update_mm_enabled (NM_MODEM (self), FALSE);
+ }
/* Balance refcount */
g_object_unref (self);
@@ -639,9 +562,9 @@ modem_enable_ready (MMModem *modem_iface,
nm_log_warn (LOGD_MB, "(%s) failed to enable modem: %s",
nm_modem_get_uid (NM_MODEM (self)),
error && error->message ? error->message : "(unknown)");
+ nm_modem_set_prev_state (NM_MODEM (self), "enable failed");
g_clear_error (&error);
- } else
- update_mm_enabled (NM_MODEM (self), TRUE);
+ }
/* Balance refcount */
g_object_unref (self);
@@ -654,14 +577,6 @@ set_mm_enabled (NMModem *_self,
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
if (enabled) {
- /* Don't even try to enable if we're known to be already locked */
- if (mm_modem_get_state (self->priv->modem_iface) == MM_MODEM_STATE_LOCKED) {
- nm_log_warn (LOGD_MB, "(%s) cannot enable modem: locked",
- nm_modem_get_uid (NM_MODEM (self)));
- g_signal_emit_by_name (self, NM_MODEM_AUTH_REQUESTED, 0);
- return;
- }
-
mm_modem_enable (self->priv->modem_iface,
NULL, /* cancellable */
(GAsyncReadyCallback)modem_enable_ready,
@@ -671,9 +586,6 @@ set_mm_enabled (NMModem *_self,
NULL, /* cancellable */
(GAsyncReadyCallback)modem_disable_ready,
g_object_ref (self));
-
- /* When disabling don't say we're enabled */
- update_mm_enabled (NM_MODEM (self), enabled);
}
}
@@ -684,14 +596,16 @@ static gboolean
ip_string_to_network_address (const gchar *str,
guint32 *out)
{
- struct in_addr addr;
+ guint32 addr = 0;
+ gboolean success = FALSE;
- /* IP address */
- if (inet_pton (AF_INET, str, &addr) <= 0)
- return FALSE;
+ if (!str || inet_pton (AF_INET, str, &addr) != 1)
+ addr = 0;
+ else
+ success = TRUE;
- *out = (guint32)addr.s_addr;
- return TRUE;
+ *out = (guint32)addr;
+ return success;
}
static gboolean
@@ -700,11 +614,12 @@ static_stage3_done (NMModemBroadband *self)
GError *error = NULL;
NMIP4Config *config = NULL;
const gchar *address_string;
+ const gchar *gw_string;
guint32 address_network;
- NMIP4Address *addr;
+ guint32 gw;
+ NMPlatformIP4Address address;
const gchar **dns;
guint i;
- guint prefix;
g_assert (self->priv->ipv4_config);
@@ -714,25 +629,32 @@ static_stage3_done (NMModemBroadband *self)
/* Fully fail if invalid IP address retrieved */
address_string = mm_bearer_ip_config_get_address (self->priv->ipv4_config);
if (!ip_string_to_network_address (address_string, &address_network)) {
- error = g_error_new (NM_MODEM_BROADBAND_ERROR,
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INVALID,
+ error = g_error_new (NM_MODEM_ERROR,
+ NM_MODEM_ERROR_CONNECTION_INVALID,
"(%s) retrieving IP4 configuration failed: invalid address given '%s'",
nm_modem_get_uid (NM_MODEM (self)),
address_string);
goto out;
}
+ /* Missing gateway not a hard failure */
+ gw_string = mm_bearer_ip_config_get_gateway (self->priv->ipv4_config);
+ ip_string_to_network_address (gw_string, &gw);
+
config = nm_ip4_config_new ();
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, address_network);
- prefix = mm_bearer_ip_config_get_prefix (self->priv->ipv4_config);
- if (prefix > 0)
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_config_take_address (config, addr);
- nm_log_info (LOGD_MB, " address %s/%d",
- mm_bearer_ip_config_get_address (self->priv->ipv4_config),
- mm_bearer_ip_config_get_prefix (self->priv->ipv4_config));
+ memset (&address, 0, sizeof (address));
+ address.address = address_network;
+ address.plen = mm_bearer_ip_config_get_prefix (self->priv->ipv4_config);
+ address.source = NM_PLATFORM_SOURCE_WWAN;
+ nm_ip4_config_add_address (config, &address);
+
+ nm_log_info (LOGD_MB, " address %s/%d", address_string, address.plen);
+
+ if (gw) {
+ nm_ip4_config_set_gateway (config, gw);
+ nm_log_info (LOGD_MB, " gateway %s", gw_string);
+ }
/* DNS servers */
dns = mm_bearer_ip_config_get_dns (self->priv->ipv4_config);
@@ -839,6 +761,29 @@ deactivate (NMModem *_self, NMDevice *device)
/*****************************************************************************/
+#define MAP_STATE(name) case MM_MODEM_STATE_##name: return NM_MODEM_STATE_##name;
+
+static NMModemState
+mm_state_to_nm (MMModemState mm_state)
+{
+ switch (mm_state) {
+ MAP_STATE(UNKNOWN)
+ MAP_STATE(FAILED)
+ MAP_STATE(INITIALIZING)
+ MAP_STATE(LOCKED)
+ MAP_STATE(DISABLED)
+ MAP_STATE(DISABLING)
+ MAP_STATE(ENABLING)
+ MAP_STATE(ENABLED)
+ MAP_STATE(SEARCHING)
+ MAP_STATE(REGISTERED)
+ MAP_STATE(DISCONNECTING)
+ MAP_STATE(CONNECTING)
+ MAP_STATE(CONNECTED)
+ }
+ return NM_MODEM_STATE_UNKNOWN;
+}
+
static void
modem_state_changed (MMModem *modem,
MMModemState old_state,
@@ -846,37 +791,28 @@ modem_state_changed (MMModem *modem,
MMModemStateChangeReason reason,
NMModemBroadband *self)
{
- gboolean old;
- gboolean new;
- nm_log_info (LOGD_MB, "(%s) modem state changed, '%s' --> '%s' (reason: %s)\n",
- nm_modem_get_uid (NM_MODEM (self)),
- mm_modem_state_get_string (old_state),
- mm_modem_state_get_string (new_state),
- mm_modem_state_change_reason_get_string (reason));
-
- old = nm_modem_get_mm_enabled (NM_MODEM (self));
- new = (mm_modem_get_state (self->priv->modem_iface) >= MM_MODEM_STATE_ENABLED);
- if (old != new)
- g_object_set (self,
- NM_MODEM_ENABLED, new,
- NULL);
+ /* After the SIM is unlocked MM1 will move the device to INITIALIZING which
+ * is an unavailable state. That makes state handling confusing here, so
+ * suppress this state change and let the modem move from LOCKED to DISABLED.
+ */
+ if (new_state == MM_MODEM_STATE_INITIALIZING && old_state == MM_MODEM_STATE_LOCKED)
+ return;
- old = nm_modem_get_mm_connected (NM_MODEM (self));
- new = (mm_modem_get_state (self->priv->modem_iface) >= MM_MODEM_STATE_CONNECTED);
- if (old != new)
- g_object_set (self,
- NM_MODEM_CONNECTED, new,
- NULL);
+ nm_modem_set_state (NM_MODEM (self),
+ mm_state_to_nm (new_state),
+ mm_modem_state_change_reason_get_string (reason));
}
/*****************************************************************************/
NMModem *
-nm_modem_broadband_new (GObject *object)
+nm_modem_broadband_new (GObject *object, GError **error)
{
+ NMModem *modem;
MMObject *modem_object;
MMModem *modem_iface;
+ gchar *drivers;
g_return_val_if_fail (MM_IS_OBJECT (object), NULL);
modem_object = MM_OBJECT (object);
@@ -886,22 +822,60 @@ nm_modem_broadband_new (GObject *object)
g_return_val_if_fail (!!modem_iface, NULL);
g_return_val_if_fail (!!mm_modem_get_primary_port (modem_iface), NULL);
- /* If the modem is in 'FAILED' state we cannot do anything with it.
- * This happens when a severe error happened when trying to initialize it,
- * like missing SIM. */
- if (mm_modem_get_state (modem_iface) == MM_MODEM_STATE_FAILED) {
- nm_log_warn (LOGD_MB, "(%s): unusable modem detected",
- mm_modem_get_primary_port (modem_iface));
- return NULL;
+ /* Build a single string with all drivers listed */
+ drivers = g_strjoinv (", ", (gchar **)mm_modem_get_drivers (modem_iface));
+
+ modem = g_object_new (NM_TYPE_MODEM_BROADBAND,
+ NM_MODEM_PATH, mm_object_get_path (modem_object),
+ NM_MODEM_UID, mm_modem_get_primary_port (modem_iface),
+ NM_MODEM_CONTROL_PORT, mm_modem_get_primary_port (modem_iface),
+ NM_MODEM_DATA_PORT, NULL, /* We don't know it until bearer created */
+ NM_MODEM_STATE, mm_state_to_nm (mm_modem_get_state (modem_iface)),
+ NM_MODEM_DEVICE_ID, mm_modem_get_device_identifier (modem_iface),
+ NM_MODEM_BROADBAND_MODEM, modem_object,
+ NM_MODEM_DRIVER, drivers,
+ NULL);
+ g_free (drivers);
+ return modem;
+}
+
+static void
+get_sim_ready (MMModem *modem,
+ GAsyncResult *res,
+ NMModemBroadband *self)
+{
+ GError *error = NULL;
+ MMSim *new_sim;
+
+ new_sim = mm_modem_get_sim_finish (modem, res, &error);
+ if (new_sim) {
+ g_object_set (G_OBJECT (self),
+ NM_MODEM_SIM_ID, mm_sim_get_identifier (new_sim),
+ NULL);
+ g_object_unref (new_sim);
+ } else {
+ nm_log_warn (LOGD_MB, "(%s) failed to retrieve SIM object: %s",
+ nm_modem_get_uid (NM_MODEM (self)),
+ error && error->message ? error->message : "(unknown)");
}
+ g_clear_error (&error);
+ g_object_unref (self);
+}
+
+static void
+sim_changed (MMModem *modem, GParamSpec *pspec, gpointer user_data)
+{
+ NMModemBroadband *self = NM_MODEM_BROADBAND (user_data);
+
+ g_return_if_fail (modem == self->priv->modem_iface);
- return (NMModem *) g_object_new (NM_TYPE_MODEM_BROADBAND,
- NM_MODEM_PATH, mm_object_get_path (modem_object),
- NM_MODEM_UID, mm_modem_get_primary_port (modem_iface),
- NM_MODEM_CONTROL_PORT, mm_modem_get_primary_port (modem_iface),
- NM_MODEM_DATA_PORT, NULL, /* We don't know it until bearer created */
- NM_MODEM_BROADBAND_MODEM, modem_object,
- NULL);
+ if (mm_modem_get_sim_path (self->priv->modem_iface)) {
+ mm_modem_get_sim (self->priv->modem_iface,
+ NULL, /* cancellable */
+ (GAsyncReadyCallback) get_sim_ready,
+ g_object_ref (self));
+ } else
+ g_object_set (G_OBJECT (self), NM_MODEM_SIM_ID, NULL, NULL);
}
static void
@@ -927,14 +901,14 @@ set_property (GObject *object,
self->priv->modem_iface = mm_object_get_modem (self->priv->modem_object);
g_assert (self->priv->modem_iface != NULL);
g_signal_connect (self->priv->modem_iface,
- "state-changed",
- G_CALLBACK (modem_state_changed),
- self);
-
- g_object_set (object,
- NM_MODEM_ENABLED, (mm_modem_get_state (self->priv->modem_iface) >= MM_MODEM_STATE_ENABLED),
- NM_MODEM_CONNECTED, (mm_modem_get_state (self->priv->modem_iface) >= MM_MODEM_STATE_CONNECTED),
- NULL);
+ "state-changed",
+ G_CALLBACK (modem_state_changed),
+ self);
+ g_signal_connect (self->priv->modem_iface,
+ "notify::sim",
+ G_CALLBACK (sim_changed),
+ self);
+ sim_changed (self->priv->modem_iface, NULL, self);
/* Note: don't grab the Simple iface here; the Modem interface is the
* only one assumed to be always valid and available */
@@ -991,16 +965,16 @@ nm_modem_broadband_class_init (NMModemBroadbandClass *klass)
object_class->get_property = get_property;
object_class->set_property = set_property;
+ modem_class->get_capabilities = get_capabilities;
modem_class->static_stage3_ip4_config_start = static_stage3_ip4_config_start;
modem_class->disconnect = disconnect;
modem_class->deactivate = deactivate;
modem_class->set_mm_enabled = set_mm_enabled;
modem_class->get_user_pass = get_user_pass;
- modem_class->get_setting_name = get_setting_name;
- modem_class->get_best_auto_connection = get_best_auto_connection;
modem_class->check_connection_compatible = check_connection_compatible;
modem_class->complete_connection = complete_connection;
modem_class->act_stage1_prepare = act_stage1_prepare;
+ modem_class->owns_port = owns_port;
/* Properties */
g_object_class_install_property
diff --git a/src/modem-manager/nm-modem-broadband.h b/src/devices/wwan/nm-modem-broadband.h
index 005c38535..e12ca68ca 100644
--- a/src/modem-manager/nm-modem-broadband.h
+++ b/src/devices/wwan/nm-modem-broadband.h
@@ -40,13 +40,6 @@ typedef struct _NMModemBroadband NMModemBroadband;
typedef struct _NMModemBroadbandClass NMModemBroadbandClass;
typedef struct _NMModemBroadbandPrivate NMModemBroadbandPrivate;
-typedef enum {
- NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_GSM, /*< nick=ConnectionNotGsm >*/
- NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_CDMA, /*< nick=ConnectionNotCdma >*/
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_MODEM_BROADBAND_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMModemBroadbandError;
-
struct _NMModemBroadband {
NMModem parent;
NMModemBroadbandPrivate *priv;
@@ -58,11 +51,7 @@ struct _NMModemBroadbandClass {
GType nm_modem_broadband_get_type (void);
-NMModem *nm_modem_broadband_new (GObject *object);
-
-void nm_modem_broadband_get_capabilities (NMModemBroadband *self,
- NMDeviceModemCapabilities *modem_caps,
- NMDeviceModemCapabilities *current_caps);
+NMModem *nm_modem_broadband_new (GObject *object, GError **error);
G_END_DECLS
diff --git a/src/devices/wwan/nm-modem-enum-types.c b/src/devices/wwan/nm-modem-enum-types.c
new file mode 100644
index 000000000..cf59ba2b9
--- /dev/null
+++ b/src/devices/wwan/nm-modem-enum-types.c
@@ -0,0 +1,64 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#include "nm-modem-enum-types.h"
+
+#include "nm-modem.h"
+
+GType
+nm_modem_error_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_MODEM_ERROR_CONNECTION_NOT_GSM, "NM_MODEM_ERROR_CONNECTION_NOT_GSM", "ConnectionNotGsm" },
+ { NM_MODEM_ERROR_CONNECTION_NOT_CDMA, "NM_MODEM_ERROR_CONNECTION_NOT_CDMA", "ConnectionNotCdma" },
+ { NM_MODEM_ERROR_CONNECTION_INVALID, "NM_MODEM_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_MODEM_ERROR_CONNECTION_INCOMPATIBLE, "NM_MODEM_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_MODEM_ERROR_INITIALIZATION_FAILED, "NM_MODEM_ERROR_INITIALIZATION_FAILED", "InitializationFailed" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMModemError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_modem_state_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GEnumValue values[] = {
+ { NM_MODEM_STATE_UNKNOWN, "NM_MODEM_STATE_UNKNOWN", "unknown" },
+ { NM_MODEM_STATE_FAILED, "NM_MODEM_STATE_FAILED", "failed" },
+ { NM_MODEM_STATE_INITIALIZING, "NM_MODEM_STATE_INITIALIZING", "initializing" },
+ { NM_MODEM_STATE_LOCKED, "NM_MODEM_STATE_LOCKED", "locked" },
+ { NM_MODEM_STATE_DISABLED, "NM_MODEM_STATE_DISABLED", "disabled" },
+ { NM_MODEM_STATE_DISABLING, "NM_MODEM_STATE_DISABLING", "disabling" },
+ { NM_MODEM_STATE_ENABLING, "NM_MODEM_STATE_ENABLING", "enabling" },
+ { NM_MODEM_STATE_ENABLED, "NM_MODEM_STATE_ENABLED", "enabled" },
+ { NM_MODEM_STATE_SEARCHING, "NM_MODEM_STATE_SEARCHING", "searching" },
+ { NM_MODEM_STATE_REGISTERED, "NM_MODEM_STATE_REGISTERED", "registered" },
+ { NM_MODEM_STATE_DISCONNECTING, "NM_MODEM_STATE_DISCONNECTING", "disconnecting" },
+ { NM_MODEM_STATE_CONNECTING, "NM_MODEM_STATE_CONNECTING", "connecting" },
+ { NM_MODEM_STATE_CONNECTED, "NM_MODEM_STATE_CONNECTED", "connected" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMModemState"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+
+
diff --git a/src/devices/wwan/nm-modem-enum-types.h b/src/devices/wwan/nm-modem-enum-types.h
new file mode 100644
index 000000000..81ccd8d2f
--- /dev/null
+++ b/src/devices/wwan/nm-modem-enum-types.h
@@ -0,0 +1,21 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#ifndef __NM_MODEM_ENUM_TYPES_H__
+#define __NM_MODEM_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+GType nm_modem_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_MODEM_ERROR (nm_modem_error_get_type ())
+GType nm_modem_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_MODEM_STATE (nm_modem_state_get_type ())
+G_END_DECLS
+
+#endif /* __NM_MODEM_ENUM_TYPES_H__ */
+
+
+
diff --git a/src/modem-manager/nm-modem-manager.c b/src/devices/wwan/nm-modem-manager.c
index 7b566ca48..c48117004 100644
--- a/src/modem-manager/nm-modem-manager.c
+++ b/src/devices/wwan/nm-modem-manager.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2009 - 2010 Red Hat, Inc.
+ * Copyright (C) 2009 - 2014 Red Hat, Inc.
* Copyright (C) 2009 Novell, Inc.
* Copyright (C) 2009 Canonical Ltd.
*/
@@ -25,11 +25,9 @@
#include "nm-modem-manager.h"
#include "nm-logging.h"
#include "nm-modem.h"
-#include "nm-modem-gsm.h"
-#include "nm-modem-cdma.h"
+#include "nm-modem-old.h"
#include "nm-dbus-manager.h"
-#include "nm-modem-types.h"
-#include "nm-marshal.h"
+#include "nm-modem-old-types.h"
#include "nm-dbus-glib-types.h"
#if WITH_MODEM_MANAGER_1
@@ -65,26 +63,26 @@ struct _NMModemManagerPrivate {
enum {
MODEM_ADDED,
- MODEM_REMOVED,
-
- LAST_SIGNAL
+ LAST_SIGNAL,
};
-
static guint signals[LAST_SIGNAL] = { 0 };
+/************************************************************************/
-NMModemManager *
-nm_modem_manager_get (void)
+static void
+handle_new_modem (NMModemManager *self, NMModem *modem)
{
- static NMModemManager *singleton = NULL;
+ const char *path;
- if (!singleton)
- singleton = NM_MODEM_MANAGER (g_object_new (NM_TYPE_MODEM_MANAGER, NULL));
- else
- g_object_ref (singleton);
+ path = nm_modem_get_path (modem);
+ if (g_hash_table_lookup (self->priv->modems, path)) {
+ g_warn_if_reached ();
+ return;
+ }
- g_assert (singleton);
- return singleton;
+ /* Track the new modem */
+ g_hash_table_insert (self->priv->modems, g_strdup (path), modem);
+ g_signal_emit (self, signals[MODEM_ADDED], 0, modem);
}
/************************************************************************/
@@ -104,127 +102,46 @@ clear_modem_manager_support (NMModemManager *self)
}
}
-static gboolean
-get_modem_properties (DBusGConnection *connection,
- const char *path,
- char **device,
- char **data_device,
- char **driver,
- guint32 *type,
- guint32 *ip_method,
- guint32 *ip_timeout,
- NMModemState *state)
-{
- DBusGProxy *proxy;
- GError *err = NULL;
- GHashTable *props = NULL;
- GHashTableIter iter;
- const char *prop;
- GValue *value;
-
- proxy = dbus_g_proxy_new_for_name (connection,
- MM_OLD_DBUS_SERVICE,
- path,
- "org.freedesktop.DBus.Properties");
-
- if (!dbus_g_proxy_call_with_timeout (proxy, "GetAll", 15000, &err,
- G_TYPE_STRING, MM_OLD_DBUS_INTERFACE_MODEM,
- G_TYPE_INVALID,
- DBUS_TYPE_G_MAP_OF_VARIANT, &props,
- G_TYPE_INVALID)) {
- nm_log_warn (LOGD_MB, "could not get modem properties: %s %s",
- err ? dbus_g_error_get_name (err) : "(none)",
- err ? err->message : "(unknown)");
- g_clear_error (&err);
- goto out;
- }
-
- if (!props) {
- nm_log_warn (LOGD_MB, "no modem properties found");
- goto out;
- }
-
- g_hash_table_iter_init (&iter, props);
- while (g_hash_table_iter_next (&iter, (gpointer) &prop, (gpointer) &value)) {
- if (g_strcmp0 (prop, "Type") == 0)
- *type = g_value_get_uint (value);
- else if (g_strcmp0 (prop, "MasterDevice") == 0)
- *device = g_value_dup_string (value);
- else if (g_strcmp0 (prop, "IpMethod") == 0)
- *ip_method = g_value_get_uint (value);
- else if (g_strcmp0 (prop, "Device") == 0)
- *data_device = g_value_dup_string (value);
- else if (g_strcmp0 (prop, "Driver") == 0)
- *driver = g_value_dup_string (value);
- else if (g_strcmp0 (prop, "IpTimeout") == 0)
- *ip_timeout = g_value_get_uint (value);
- else if (g_strcmp0 (prop, "State") == 0)
- *state = g_value_get_uint (value);
- }
- g_hash_table_unref (props);
-
- out:
- g_object_unref (proxy);
-
- return *data_device && *driver;
-}
-
static void
create_modem (NMModemManager *self, const char *path)
{
+ DBusGProxy *proxy;
+ GError *error = NULL;
NMModem *modem = NULL;
- char *data_device = NULL, *driver = NULL, *master_device = NULL;
- uint modem_type = MM_MODEM_TYPE_UNKNOWN;
- uint ip_method = MM_MODEM_IP_METHOD_PPP;
- uint ip_timeout = 0;
- NMModemState state = NM_MODEM_STATE_UNKNOWN;
+ GHashTable *properties;
if (g_hash_table_lookup (self->priv->modems, path)) {
nm_log_warn (LOGD_MB, "modem with path %s already exists, ignoring", path);
return;
}
- if (!get_modem_properties (nm_dbus_manager_get_connection (self->priv->dbus_mgr),
- path, &master_device, &data_device, &driver,
- &modem_type, &ip_method, &ip_timeout, &state))
- return;
-
- if (modem_type == MM_MODEM_TYPE_UNKNOWN) {
- nm_log_warn (LOGD_MB, "modem with path %s has unknown type, ignoring", path);
- return;
- }
-
- if (!master_device || !strlen (master_device)) {
- nm_log_warn (LOGD_MB, "modem with path %s has unknown device, ignoring", path);
- return;
- }
-
- if (!driver || !strlen (driver)) {
- nm_log_warn (LOGD_MB, "modem with path %s has unknown driver, ignoring", path);
- return;
- }
-
- if (!data_device || !strlen (data_device)) {
- nm_log_warn (LOGD_MB, "modem with path %s has unknown data device, ignoring", path);
- return;
- }
-
- if (modem_type == MM_MODEM_TYPE_GSM)
- modem = nm_modem_gsm_new (path, data_device, ip_method, state);
- else if (modem_type == MM_MODEM_TYPE_CDMA)
- modem = nm_modem_cdma_new (path, data_device, ip_method, state);
- else
- nm_log_warn (LOGD_MB, "unknown modem type '%d'", modem_type);
-
- g_free (data_device);
-
- if (modem) {
- g_object_set (G_OBJECT (modem), NM_MODEM_IP_TIMEOUT, ip_timeout, NULL);
- g_hash_table_insert (self->priv->modems, g_strdup (path), modem);
- g_signal_emit (self, signals[MODEM_ADDED], 0, modem, driver);
+ proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (self->priv->dbus_mgr),
+ MM_OLD_DBUS_SERVICE,
+ path,
+ DBUS_INTERFACE_PROPERTIES);
+ g_assert (proxy);
+ if (dbus_g_proxy_call_with_timeout (proxy, "GetAll", 15000, &error,
+ G_TYPE_STRING, MM_OLD_DBUS_INTERFACE_MODEM,
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_MAP_OF_VARIANT, &properties,
+ G_TYPE_INVALID)) {
+ /* Success, create the modem */
+ modem = nm_modem_old_new (path, properties, &error);
+ if (modem)
+ handle_new_modem (self, modem);
+ else {
+ nm_log_warn (LOGD_MB, "failed to create modem: %s",
+ error ? error->message : "(unknown)");
+ }
+ g_hash_table_destroy (properties);
+ } else {
+ nm_log_warn (LOGD_MB, "could not get modem properties: %s %s",
+ error ? dbus_g_error_get_name (error) : "(none)",
+ error ? error->message : "(unknown)");
}
- g_free (driver);
+ g_object_unref (proxy);
+ g_clear_error (&error);
}
static void
@@ -241,7 +158,7 @@ modem_removed (DBusGProxy *proxy, const char *path, gpointer user_data)
modem = (NMModem *) g_hash_table_lookup (self->priv->modems, path);
if (modem) {
- g_signal_emit (self, signals[MODEM_REMOVED], 0, modem);
+ nm_modem_emit_removed (modem);
g_hash_table_remove (self->priv->modems, path);
}
}
@@ -269,23 +186,22 @@ poke_modem_cb (gpointer user_data)
NMModemManager *self = NM_MODEM_MANAGER (user_data);
DBusGConnection *g_connection;
DBusGProxy *proxy;
- DBusGProxyCall *call;
g_connection = nm_dbus_manager_get_connection (self->priv->dbus_mgr);
proxy = dbus_g_proxy_new_for_name (g_connection,
- MM_OLD_DBUS_SERVICE,
- MM_OLD_DBUS_PATH,
- MM_OLD_DBUS_INTERFACE);
+ MM_OLD_DBUS_SERVICE,
+ MM_OLD_DBUS_PATH,
+ MM_OLD_DBUS_INTERFACE);
nm_log_dbg (LOGD_MB, "Requesting to (re)launch modem-manager...");
- call = dbus_g_proxy_begin_call_with_timeout (proxy,
- "EnumerateDevices",
- mm_poke_cb,
- NULL,
- NULL,
- 5000,
- G_TYPE_INVALID);
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ "EnumerateDevices",
+ mm_poke_cb,
+ NULL,
+ NULL,
+ 5000,
+ G_TYPE_INVALID);
return TRUE;
}
@@ -357,8 +273,7 @@ modem_manager_appeared (NMModemManager *self, gboolean enumerate_devices)
static gboolean
remove_one_modem (gpointer key, gpointer value, gpointer user_data)
{
- g_signal_emit (user_data, signals[MODEM_REMOVED], 0, value);
-
+ nm_modem_emit_removed (NM_MODEM (value));
return TRUE;
}
@@ -458,9 +373,9 @@ modem_object_added (MMManager *modem_manager,
NMModemManager *self)
{
const gchar *path;
- gchar *drivers;
MMModem *modem_iface;
NMModem *modem;
+ GError *error = NULL;
/* Ensure we don't have the same modem already */
path = mm_object_get_path (modem_object);
@@ -483,17 +398,14 @@ modem_object_added (MMManager *modem_manager,
}
/* Create a new modem object */
- modem = nm_modem_broadband_new (G_OBJECT (modem_object));
- if (!modem)
- return;
-
- /* Build a single string with all drivers listed */
- drivers = g_strjoinv (", ", (gchar **)mm_modem_get_drivers (modem_iface));
-
- /* Keep track of the new modem and notify about it */
- g_hash_table_insert (self->priv->modems, g_strdup (path), modem);
- g_signal_emit (self, signals[MODEM_ADDED], 0, modem, drivers);
- g_free (drivers);
+ modem = nm_modem_broadband_new (G_OBJECT (modem_object), &error);
+ if (modem)
+ handle_new_modem (self, modem);
+ else {
+ nm_log_warn (LOGD_MB, "failed to create modem: %s",
+ error ? error->message : "(unknown)");
+ }
+ g_clear_error (&error);
}
static void
@@ -509,7 +421,7 @@ modem_object_removed (MMManager *manager,
if (!modem)
return;
- g_signal_emit (self, signals[MODEM_REMOVED], 0, modem);
+ nm_modem_emit_removed (modem);
g_hash_table_remove (self->priv->modems, path);
}
@@ -820,10 +732,7 @@ dispose (GObject *object)
g_hash_table_destroy (self->priv->modems);
}
- if (self->priv->dbus_mgr) {
- g_object_unref (self->priv->dbus_mgr);
- self->priv->dbus_mgr = NULL;
- }
+ self->priv->dbus_mgr = NULL;
/* Chain up to the parent class */
G_OBJECT_CLASS (nm_modem_manager_parent_class)->dispose (object);
@@ -838,22 +747,11 @@ nm_modem_manager_class_init (NMModemManagerClass *klass)
object_class->dispose = dispose;
- /* signals */
signals[MODEM_ADDED] =
- g_signal_new ("modem-added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMModemManagerClass, modem_added),
- NULL, NULL,
- _nm_marshal_VOID__OBJECT_STRING,
- G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_STRING);
-
- signals[MODEM_REMOVED] =
- g_signal_new ("modem-removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMModemManagerClass, modem_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, G_TYPE_OBJECT);
+ g_signal_new (NM_MODEM_MANAGER_MODEM_ADDED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMModemManagerClass, modem_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, NM_TYPE_MODEM);
}
diff --git a/src/modem-manager/nm-modem-manager.h b/src/devices/wwan/nm-modem-manager.h
index 0c2b243b9..3082bdb39 100644
--- a/src/modem-manager/nm-modem-manager.h
+++ b/src/devices/wwan/nm-modem-manager.h
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2009 Red Hat, Inc.
+ * Copyright (C) 2009 - 2014 Red Hat, Inc.
* Copyright (C) 2009 Novell, Inc.
* Copyright (C) 2009 Canonical Ltd.
*/
@@ -26,33 +26,24 @@
#include <glib-object.h>
#include "nm-modem.h"
-#define NM_TYPE_MODEM_MANAGER (nm_modem_manager_get_type ())
-#define NM_MODEM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_MANAGER, NMModemManager))
-#define NM_MODEM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MODEM_MANAGER, NMModemManagerClass))
-#define NM_IS_MODEM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_MODEM_MANAGER))
-#define NM_IS_MODEM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM_MANAGER))
-#define NM_MODEM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM_MANAGER, NMModemManagerClass))
+#define NM_TYPE_MODEM_MANAGER (nm_modem_manager_get_type ())
+#define NM_MODEM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_MANAGER, NMModemManager))
+
+#define NM_MODEM_MANAGER_MODEM_ADDED "modem-added"
-typedef struct _NMModemManager NMModemManager;
-typedef struct _NMModemManagerClass NMModemManagerClass;
typedef struct _NMModemManagerPrivate NMModemManagerPrivate;
-struct _NMModemManager {
+typedef struct {
GObject parent;
NMModemManagerPrivate *priv;
-};
+} NMModemManager;
-struct _NMModemManagerClass {
+typedef struct {
GObjectClass parent;
- /* Signals */
- void (*modem_added) (NMModemManager *manager, NMModem *modem, const char *driver);
-
- void (*modem_removed) (NMModemManager *manager, NMModem *modem);
-};
+ void (*modem_added) (NMModemManager *self, NMModem *modem);
+} NMModemManagerClass;
GType nm_modem_manager_get_type (void);
-NMModemManager *nm_modem_manager_get (void);
-
#endif /* NM_MODEM_MANAGER_H */
diff --git a/src/devices/wwan/nm-modem-old-types.h b/src/devices/wwan/nm-modem-old-types.h
new file mode 100644
index 000000000..84065a684
--- /dev/null
+++ b/src/devices/wwan/nm-modem-old-types.h
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2009 Novell, Inc.
+ */
+
+#ifndef NM_MODEM_OLD_TYPES_H
+#define NM_MODEM_OLD_TYPES_H
+
+#define MM_OLD_DBUS_SERVICE "org.freedesktop.ModemManager"
+#define MM_OLD_DBUS_PATH "/org/freedesktop/ModemManager"
+#define MM_OLD_DBUS_INTERFACE "org.freedesktop.ModemManager"
+#define MM_OLD_DBUS_INTERFACE_MODEM "org.freedesktop.ModemManager.Modem"
+#define MM_OLD_DBUS_INTERFACE_MODEM_SIMPLE "org.freedesktop.ModemManager.Modem.Simple"
+#define MM_OLD_DBUS_INTERFACE_MODEM_CDMA "org.freedesktop.ModemManager.Modem.Cdma"
+#define MM_OLD_DBUS_INTERFACE_MODEM_GSM_CARD "org.freedesktop.ModemManager.Modem.Gsm.Card"
+#define MM_OLD_DBUS_INTERFACE_MODEM_GSM_NETWORK "org.freedesktop.ModemManager.Modem.Gsm.Network"
+
+#define MM_OLD_MODEM_TYPE_UNKNOWN 0
+#define MM_OLD_MODEM_TYPE_GSM 1
+#define MM_OLD_MODEM_TYPE_CDMA 2
+
+/* Errors */
+
+#define MM_OLD_MODEM_CONNECT_ERROR_NO_CARRIER MM_OLD_DBUS_INTERFACE_MODEM ".NoCarrier"
+#define MM_OLD_MODEM_CONNECT_ERROR_NO_DIALTONE MM_OLD_DBUS_INTERFACE_MODEM ".NoDialtone"
+#define MM_OLD_MODEM_CONNECT_ERROR_BUSY MM_OLD_DBUS_INTERFACE_MODEM ".Busy"
+#define MM_OLD_MODEM_CONNECT_ERROR_NO_ANSWER MM_OLD_DBUS_INTERFACE_MODEM ".NoAnswer"
+
+#define MM_OLD_MODEM_ERROR "org.freedesktop.ModemManager.Modem.Gsm"
+
+#define MM_OLD_MODEM_ERROR_NETWORK_NOT_ALLOWED MM_OLD_MODEM_ERROR ".NetworkNotAllowed"
+#define MM_OLD_MODEM_ERROR_NETWORK_TIMEOUT MM_OLD_MODEM_ERROR ".NetworkTimeout"
+#define MM_OLD_MODEM_ERROR_NO_NETWORK MM_OLD_MODEM_ERROR ".NoNetwork"
+#define MM_OLD_MODEM_ERROR_SIM_NOT_INSERTED MM_OLD_MODEM_ERROR ".SimNotInserted"
+#define MM_OLD_MODEM_ERROR_SIM_PIN MM_OLD_MODEM_ERROR ".SimPinRequired"
+#define MM_OLD_MODEM_ERROR_SIM_PUK MM_OLD_MODEM_ERROR ".SimPukRequired"
+#define MM_OLD_MODEM_ERROR_SIM_WRONG MM_OLD_MODEM_ERROR ".SimWrong"
+#define MM_OLD_MODEM_ERROR_WRONG_PASSWORD MM_OLD_MODEM_ERROR ".IncorrectPassword"
+
+typedef enum {
+ MM_OLD_MODEM_STATE_UNKNOWN = 0,
+ MM_OLD_MODEM_STATE_DISABLED = 10,
+ MM_OLD_MODEM_STATE_DISABLING = 20,
+ MM_OLD_MODEM_STATE_ENABLING = 30,
+ MM_OLD_MODEM_STATE_ENABLED = 40,
+ MM_OLD_MODEM_STATE_SEARCHING = 50,
+ MM_OLD_MODEM_STATE_REGISTERED = 60,
+ MM_OLD_MODEM_STATE_DISCONNECTING = 70,
+ MM_OLD_MODEM_STATE_CONNECTING = 80,
+ MM_OLD_MODEM_STATE_CONNECTED = 90,
+
+ MM_OLD_MODEM_STATE_LAST = MM_OLD_MODEM_STATE_CONNECTED
+} MMOldModemState;
+
+#endif /* NM_MODEM_OLD_TYPES_H */
diff --git a/src/devices/wwan/nm-modem-old.c b/src/devices/wwan/nm-modem-old.c
new file mode 100644
index 000000000..ce1a382e1
--- /dev/null
+++ b/src/devices/wwan/nm-modem-old.c
@@ -0,0 +1,1139 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2009 - 2013 Red Hat, Inc.
+ * Copyright (C) 2009 Novell, Inc.
+ */
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "nm-modem-old.h"
+#include "nm-dbus-manager.h"
+#include "nm-setting-connection.h"
+#include "nm-properties-changed-signal.h"
+#include "nm-modem-old-types.h"
+#include "nm-logging.h"
+#include "NetworkManagerUtils.h"
+#include "nm-device-private.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
+
+G_DEFINE_TYPE (NMModemOld, nm_modem_old, NM_TYPE_MODEM)
+
+#define NM_MODEM_OLD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MODEM_OLD, NMModemOldPrivate))
+
+typedef struct {
+ DBusGProxy *proxy;
+ DBusGProxy *props_proxy;
+
+ MMOldModemState state;
+ NMDeviceModemCapabilities caps;
+ char *unlock_required;
+
+ DBusGProxyCall *call;
+ GHashTable *connect_properties;
+
+ guint32 pin_tries;
+ guint enable_delay_id;
+} NMModemOldPrivate;
+
+#define CAPS_3GPP (NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS | NM_DEVICE_MODEM_CAPABILITY_LTE)
+
+/*****************************************************************************/
+
+typedef enum {
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_ANY = 0,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_GPRS,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_EDGE,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_UMTS,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSDPA,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_PREFERRED,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_PREFERRED,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_ONLY,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_ONLY,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSUPA,
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSPA,
+
+ MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_LAST = MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSPA
+} MMModemDeprecatedMode;
+
+typedef enum {
+ MM_MODEM_GSM_ALLOWED_MODE_ANY = 0,
+ MM_MODEM_GSM_ALLOWED_MODE_2G_PREFERRED = 1,
+ MM_MODEM_GSM_ALLOWED_MODE_3G_PREFERRED = 2,
+ MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY = 3,
+ MM_MODEM_GSM_ALLOWED_MODE_3G_ONLY = 4,
+ MM_MODEM_GSM_ALLOWED_MODE_4G_PREFERRED = 5,
+ MM_MODEM_GSM_ALLOWED_MODE_4G_ONLY = 6,
+
+ MM_MODEM_GSM_ALLOWED_MODE_LAST = MM_MODEM_GSM_ALLOWED_MODE_4G_ONLY
+} MMModemGsmAllowedMode;
+
+typedef enum {
+ MM_MODEM_GSM_ALLOWED_AUTH_UNKNOWN = 0x0000,
+ /* bits 0..4 order match Ericsson device bitmap */
+ MM_MODEM_GSM_ALLOWED_AUTH_NONE = 0x0001,
+ MM_MODEM_GSM_ALLOWED_AUTH_PAP = 0x0002,
+ MM_MODEM_GSM_ALLOWED_AUTH_CHAP = 0x0004,
+ MM_MODEM_GSM_ALLOWED_AUTH_MSCHAP = 0x0008,
+ MM_MODEM_GSM_ALLOWED_AUTH_MSCHAPV2 = 0x0010,
+ MM_MODEM_GSM_ALLOWED_AUTH_EAP = 0x0020,
+
+ MM_MODEM_GSM_ALLOWED_AUTH_LAST = MM_MODEM_GSM_ALLOWED_AUTH_EAP
+} MMModemGsmAllowedAuth;
+
+static NMDeviceStateReason
+translate_mm_error (GError *error)
+{
+ NMDeviceStateReason reason;
+
+ if (dbus_g_error_has_name (error, MM_OLD_MODEM_CONNECT_ERROR_NO_CARRIER))
+ reason = NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_CONNECT_ERROR_NO_DIALTONE))
+ reason = NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_CONNECT_ERROR_BUSY))
+ reason = NM_DEVICE_STATE_REASON_MODEM_BUSY;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_CONNECT_ERROR_NO_ANSWER))
+ reason = NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_NETWORK_NOT_ALLOWED))
+ reason = NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_NETWORK_TIMEOUT))
+ reason = NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_NO_NETWORK))
+ reason = NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_SIM_NOT_INSERTED))
+ reason = NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_SIM_PIN))
+ reason = NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_SIM_PUK))
+ reason = NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_SIM_WRONG))
+ reason = NM_DEVICE_STATE_REASON_GSM_SIM_WRONG;
+ else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_WRONG_PASSWORD))
+ reason = NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT;
+ else {
+ /* unable to map the ModemManager error to a NM_DEVICE_STATE_REASON */
+ nm_log_dbg (LOGD_MB, "unmapped dbus error detected: '%s'", dbus_g_error_get_name (error));
+ reason = NM_DEVICE_STATE_REASON_UNKNOWN;
+ }
+
+ /* FIXME: We have only GSM error messages here, and we have no idea which
+ activation state failed. Reasons like:
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED,
+ NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED,
+ NM_DEVICE_STATE_REASON_GSM_APN_FAILED,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED,
+ NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED
+ are not used.
+ */
+ return reason;
+}
+
+#define MAP_STATE(name) case MM_OLD_MODEM_STATE_##name: return NM_MODEM_STATE_##name;
+
+static NMModemState
+mm_state_to_nm (MMOldModemState mm_state, const char *unlock_required)
+{
+ if (unlock_required && *unlock_required)
+ return NM_MODEM_STATE_LOCKED;
+
+ switch (mm_state) {
+ MAP_STATE(UNKNOWN)
+ MAP_STATE(DISABLED)
+ MAP_STATE(DISABLING)
+ MAP_STATE(ENABLING)
+ MAP_STATE(ENABLED)
+ MAP_STATE(SEARCHING)
+ MAP_STATE(REGISTERED)
+ MAP_STATE(DISCONNECTING)
+ MAP_STATE(CONNECTING)
+ MAP_STATE(CONNECTED)
+ }
+ return NM_MODEM_STATE_UNKNOWN;
+};
+
+/*****************************************************************************/
+
+static DBusGProxy *
+nm_modem_old_get_proxy (NMModemOld *self, const char *interface)
+{
+
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ const char *current_iface;
+
+ g_return_val_if_fail (NM_IS_MODEM_OLD (self), NULL);
+
+ /* Default to the default interface. */
+ if (interface == NULL)
+ interface = MM_OLD_DBUS_INTERFACE_MODEM;
+
+ if (interface && !strcmp (interface, DBUS_INTERFACE_PROPERTIES))
+ return priv->props_proxy;
+
+ current_iface = dbus_g_proxy_get_interface (priv->proxy);
+ if (!current_iface || strcmp (current_iface, interface))
+ dbus_g_proxy_set_interface (priv->proxy, interface);
+
+ return priv->proxy;
+}
+
+/*****************************************************************************/
+/* Query/Update enabled state */
+
+static void
+set_mm_enabled_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+{
+ GError *error = NULL;
+
+ if (!dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)) {
+ nm_log_warn (LOGD_MB, "failed to enable/disable modem: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ nm_modem_set_prev_state (NM_MODEM (user_data), "enable/disable failed");
+ }
+ /* Wait for the state change signal to indicate enabled state changed */
+}
+
+static void
+set_mm_enabled (NMModem *self, gboolean enabled)
+{
+ dbus_g_proxy_begin_call (nm_modem_old_get_proxy (NM_MODEM_OLD (self), MM_OLD_DBUS_INTERFACE_MODEM),
+ "Enable", set_mm_enabled_done,
+ g_object_ref (self), g_object_unref,
+ G_TYPE_BOOLEAN, enabled,
+ G_TYPE_INVALID);
+}
+
+/*****************************************************************************/
+
+static void
+ask_for_pin (NMModemOld *self, gboolean always_ask)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ guint32 tries = 0;
+
+ g_return_if_fail (NM_IS_MODEM_OLD (self));
+
+ if (!always_ask)
+ tries = priv->pin_tries++;
+
+ nm_modem_get_secrets (NM_MODEM (self),
+ NM_SETTING_GSM_SETTING_NAME,
+ (tries || always_ask) ? TRUE : FALSE,
+ NM_SETTING_GSM_PIN);
+}
+
+static void
+stage1_prepare_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
+{
+ NMModemOld *self = NM_MODEM_OLD (user_data);
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ GError *error = NULL;
+ gboolean asked = FALSE;
+
+ priv->call = NULL;
+
+ if (priv->connect_properties) {
+ g_hash_table_destroy (priv->connect_properties);
+ priv->connect_properties = NULL;
+ }
+
+ if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID))
+ g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, TRUE, NM_DEVICE_STATE_REASON_NONE);
+ else {
+ if (priv->caps & CAPS_3GPP) {
+ if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_SIM_PIN)) {
+ ask_for_pin (self, FALSE);
+ asked = TRUE;
+ } else if (dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_SIM_WRONG)) {
+ ask_for_pin (self, TRUE);
+ asked = TRUE;
+ }
+ }
+
+ if (!asked) {
+ nm_log_warn (LOGD_MB, "Mobile connection failed: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, translate_mm_error (error));
+ }
+ g_error_free (error);
+ }
+}
+
+static void
+do_connect (NMModemOld *self)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ DBusGProxy *proxy;
+
+ proxy = nm_modem_old_get_proxy (NM_MODEM_OLD (self), MM_OLD_DBUS_INTERFACE_MODEM_SIMPLE);
+ priv->call = dbus_g_proxy_begin_call_with_timeout (proxy,
+ "Connect", stage1_prepare_done,
+ self, NULL, 120000,
+ DBUS_TYPE_G_MAP_OF_VARIANT, priv->connect_properties,
+ G_TYPE_INVALID);
+}
+
+static void stage1_enable_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data);
+
+/* do_enable() is used as a GSourceFunc, hence the gboolean return */
+static gboolean
+do_enable (NMModemOld *self)
+{
+ DBusGProxy *proxy;
+
+ g_return_val_if_fail (NM_IS_MODEM_OLD (self), FALSE);
+
+ NM_MODEM_OLD_GET_PRIVATE (self)->enable_delay_id = 0;
+ proxy = nm_modem_old_get_proxy (NM_MODEM_OLD (self), MM_OLD_DBUS_INTERFACE_MODEM);
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ "Enable", stage1_enable_done,
+ self, NULL, 20000,
+ G_TYPE_BOOLEAN, TRUE,
+ G_TYPE_INVALID);
+ return FALSE;
+}
+
+static void
+stage1_pin_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+{
+ NMModemOld *self = NM_MODEM_OLD (user_data);
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ NMDeviceStateReason reason;
+ GError *error = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)) {
+ /* Success; try to enable the modem again. Wait a few seconds to ensure
+ * that ModemManager is ready for the enable right after the unlock.
+ */
+ if (priv->enable_delay_id == 0)
+ priv->enable_delay_id = g_timeout_add_seconds (4, (GSourceFunc) do_enable, self);
+ } else {
+ nm_log_warn (LOGD_MB, "GSM PIN unlock failed: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+
+ /* try to translate the error reason */
+ reason = translate_mm_error (error);
+ if (reason == NM_DEVICE_STATE_REASON_UNKNOWN)
+ reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
+
+ g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, reason);
+ g_error_free (error);
+ }
+}
+
+static void
+handle_enable_pin_required (NMModemOld *self)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ const char *pin = NULL;
+ GValue *value;
+ DBusGProxy *proxy;
+
+ g_assert (priv->caps & CAPS_3GPP);
+
+ /* See if we have a PIN already */
+ value = g_hash_table_lookup (priv->connect_properties, "pin");
+ if (value && G_VALUE_HOLDS_STRING (value))
+ pin = g_value_get_string (value);
+
+ /* If we do, send it */
+ if (pin) {
+ proxy = nm_modem_old_get_proxy (NM_MODEM_OLD (self), MM_OLD_DBUS_INTERFACE_MODEM_GSM_CARD);
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ "SendPin", stage1_pin_done,
+ self, NULL, 10000,
+ G_TYPE_STRING, pin,
+ G_TYPE_INVALID);
+ } else
+ ask_for_pin (self, FALSE);
+}
+
+static void
+stage1_enable_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+{
+ NMModemOld *self = NM_MODEM_OLD (user_data);
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ NMDeviceStateReason reason;
+ GError *error = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID))
+ do_connect (self);
+ else {
+ if ((priv->caps & CAPS_3GPP) && dbus_g_error_has_name (error, MM_OLD_MODEM_ERROR_SIM_PIN))
+ handle_enable_pin_required (self);
+ else {
+ nm_log_warn (LOGD_MB, "Modem enable failed: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+
+ /* try to translate the error reason */
+ reason = translate_mm_error (error);
+ if (reason == NM_DEVICE_STATE_REASON_UNKNOWN)
+ reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
+ g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, reason);
+ }
+
+ g_error_free (error);
+ }
+}
+
+static GHashTable *
+create_connect_properties (NMConnection *connection)
+{
+ NMSettingCdma *s_cdma;
+ NMSettingGsm *s_gsm;
+ NMSettingPPP *s_ppp;
+ GHashTable *properties;
+ const char *str;
+
+ properties = value_hash_create ();
+
+ s_cdma = nm_connection_get_setting_cdma (connection);
+ if (s_cdma) {
+ str = nm_setting_cdma_get_number (s_cdma);
+ if (str)
+ value_hash_add_str (properties, "number", str);
+ return properties;
+ }
+
+ s_gsm = nm_connection_get_setting_gsm (connection);
+ if (s_gsm) {
+ str = nm_setting_gsm_get_number (s_gsm);
+ if (str)
+ value_hash_add_str (properties, "number", str);
+
+ str = nm_setting_gsm_get_apn (s_gsm);
+ if (str)
+ value_hash_add_str (properties, "apn", str);
+
+ str = nm_setting_gsm_get_network_id (s_gsm);
+ if (str)
+ value_hash_add_str (properties, "network_id", str);
+
+ str = nm_setting_gsm_get_pin (s_gsm);
+ if (str)
+ value_hash_add_str (properties, "pin", str);
+
+ str = nm_setting_gsm_get_username (s_gsm);
+ if (str)
+ value_hash_add_str (properties, "username", str);
+
+ str = nm_setting_gsm_get_password (s_gsm);
+ if (str)
+ value_hash_add_str (properties, "password", str);
+
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ /* Add both old and new preferred modes */
+ switch (nm_setting_gsm_get_network_type (s_gsm)) {
+ case NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA:
+ value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_ONLY);
+ value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_3G_ONLY);
+ break;
+ case NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE:
+ value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_ONLY);
+ value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY);
+ break;
+ case NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA:
+ value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_PREFERRED);
+ value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_3G_PREFERRED);
+ break;
+ case NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE:
+ value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_PREFERRED);
+ value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_2G_PREFERRED);
+ break;
+ case NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G:
+ /* deprecated modes not extended for 4G, so no need to set them here */
+ value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_4G_PREFERRED);
+ break;
+ case NM_SETTING_GSM_NETWORK_TYPE_4G:
+ /* deprecated modes not extended for 4G, so no need to set them here */
+ value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_4G_ONLY);
+ break;
+ default:
+ value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_ANY);
+ value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_ANY);
+ break;
+ }
+G_GNUC_END_IGNORE_DEPRECATIONS
+
+ /* Roaming */
+ if (nm_setting_gsm_get_home_only (s_gsm))
+ value_hash_add_bool (properties, "home_only", TRUE);
+
+ /* For IpMethod == STATIC or DHCP */
+ s_ppp = nm_connection_get_setting_ppp (connection);
+ if (s_ppp) {
+ guint32 auth = MM_MODEM_GSM_ALLOWED_AUTH_UNKNOWN;
+
+ if (nm_setting_ppp_get_noauth (s_ppp))
+ auth |= MM_MODEM_GSM_ALLOWED_AUTH_NONE;
+ if (!nm_setting_ppp_get_refuse_pap (s_ppp))
+ auth |= MM_MODEM_GSM_ALLOWED_AUTH_PAP;
+ if (!nm_setting_ppp_get_refuse_chap (s_ppp))
+ auth |= MM_MODEM_GSM_ALLOWED_AUTH_CHAP;
+ if (!nm_setting_ppp_get_refuse_mschap (s_ppp))
+ auth |= MM_MODEM_GSM_ALLOWED_AUTH_MSCHAP;
+ if (!nm_setting_ppp_get_refuse_mschapv2 (s_ppp))
+ auth |= MM_MODEM_GSM_ALLOWED_AUTH_MSCHAPV2;
+ if (!nm_setting_ppp_get_refuse_eap (s_ppp))
+ auth |= MM_MODEM_GSM_ALLOWED_AUTH_EAP;
+
+ if (auth != MM_MODEM_GSM_ALLOWED_AUTH_UNKNOWN)
+ value_hash_add_uint (properties, "allowed_auth", auth);
+ }
+
+ return properties;
+ }
+
+ g_hash_table_destroy (properties);
+ return NULL;
+}
+
+static NMActStageReturn
+act_stage1_prepare (NMModem *modem,
+ NMConnection *connection,
+ NMDeviceStateReason *reason)
+{
+ NMModemOld *self = NM_MODEM_OLD (modem);
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+
+ if (priv->connect_properties)
+ g_hash_table_destroy (priv->connect_properties);
+ priv->connect_properties = create_connect_properties (connection);
+
+ if (nm_modem_get_state (modem) >= NM_MODEM_STATE_ENABLING)
+ do_connect (self);
+ else
+ do_enable (self);
+
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
+
+/*****************************************************************************/
+/* IP method static */
+
+static char addr_to_string_buf[INET6_ADDRSTRLEN + 1];
+
+static const char *
+ip_address_to_string (guint32 numeric)
+{
+ guint32 temp_addr;
+
+ memset (&addr_to_string_buf, '\0', sizeof (addr_to_string_buf));
+ temp_addr = numeric;
+
+ if (inet_ntop (AF_INET, &temp_addr, addr_to_string_buf, INET_ADDRSTRLEN)) {
+ return addr_to_string_buf;
+ } else {
+ nm_log_warn (LOGD_VPN, "error converting IP4 address 0x%X",
+ ntohl (temp_addr));
+ return NULL;
+ }
+}
+
+static void
+static_stage3_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
+{
+ NMModemOld *self = NM_MODEM_OLD (user_data);
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ GValueArray *ret_array = NULL;
+ GError *error = NULL;
+ NMIP4Config *config = NULL;
+
+ priv->call = NULL;
+
+ /* Returned value array is (uuuu): [IP, DNS1, DNS2, DNS3], all in
+ * network byte order.
+ */
+ if (dbus_g_proxy_end_call (proxy, call, &error,
+ G_TYPE_VALUE_ARRAY, &ret_array,
+ G_TYPE_INVALID)) {
+ NMPlatformIP4Address address;
+ int i;
+
+ config = nm_ip4_config_new ();
+ memset (&address, 0, sizeof (address));
+
+ nm_log_info (LOGD_MB, "(%s): IPv4 static configuration:",
+ nm_modem_get_uid (NM_MODEM (self)));
+
+ /* IP address */
+ address.address = g_value_get_uint (g_value_array_get_nth (ret_array, 0));
+ address.plen = 32;
+ address.source = NM_PLATFORM_SOURCE_WWAN;
+ nm_ip4_config_add_address (config, &address);
+
+ nm_log_info (LOGD_MB, " address %s/%d",
+ ip_address_to_string (address.address),
+ address.plen);
+
+ /* DNS servers */
+ for (i = 1; i < ret_array->n_values; i++) {
+ GValue *value = g_value_array_get_nth (ret_array, i);
+ guint32 tmp = g_value_get_uint (value);
+
+ if (tmp > 0) {
+ nm_ip4_config_add_nameserver (config, tmp);
+ nm_log_info (LOGD_MB, " DNS %s", ip_address_to_string (tmp));
+ }
+ }
+ g_value_array_free (ret_array);
+ }
+
+ g_signal_emit_by_name (self, NM_MODEM_IP4_CONFIG_RESULT, config, error);
+ g_clear_error (&error);
+}
+
+static NMActStageReturn
+static_stage3_ip4_config_start (NMModem *self,
+ NMActRequest *req,
+ NMDeviceStateReason *reason)
+{
+ NMModemOldPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_MODEM (self), NM_ACT_STAGE_RETURN_FAILURE);
+ g_return_val_if_fail (NM_IS_ACT_REQUEST (req), NM_ACT_STAGE_RETURN_FAILURE);
+ g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ priv = NM_MODEM_OLD_GET_PRIVATE (self);
+
+ priv->call = dbus_g_proxy_begin_call (nm_modem_old_get_proxy (NM_MODEM_OLD (self),
+ MM_OLD_DBUS_INTERFACE_MODEM),
+ "GetIP4Config", static_stage3_done,
+ self, NULL,
+ G_TYPE_INVALID);
+
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
+
+/*****************************************************************************/
+
+static void
+disconnect_done (DBusGProxy *proxy,
+ DBusGProxyCall *call_id,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ gboolean warn = GPOINTER_TO_UINT (user_data);
+
+ if (!dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID) && warn) {
+ nm_log_info (LOGD_MB, "disconnect failed: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ }
+}
+
+static void
+disconnect (NMModem *self,
+ gboolean warn)
+{
+ dbus_g_proxy_begin_call (nm_modem_old_get_proxy (NM_MODEM_OLD (self),
+ MM_OLD_DBUS_INTERFACE_MODEM),
+ "Disconnect",
+ disconnect_done,
+ GUINT_TO_POINTER (warn),
+ NULL,
+ G_TYPE_INVALID);
+}
+
+/*****************************************************************************/
+
+static void
+deactivate (NMModem *self, NMDevice *device)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+
+ priv->pin_tries = 0;
+
+ if (priv->call) {
+ dbus_g_proxy_cancel_call (priv->proxy, priv->call);
+ priv->call = NULL;
+ }
+
+ if (priv->enable_delay_id) {
+ g_source_remove (priv->enable_delay_id);
+ priv->enable_delay_id = 0;
+ }
+
+ /* Chain up parent */
+ NM_MODEM_CLASS (nm_modem_old_parent_class)->deactivate (self, device);
+}
+
+/*****************************************************************************/
+
+static void
+modem_properties_changed (DBusGProxy *proxy,
+ const char *interface,
+ GHashTable *props,
+ gpointer user_data)
+{
+ NMModemOld *self = NM_MODEM_OLD (user_data);
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (self);
+ GValue *value;
+ gboolean update_state = FALSE;
+
+ if (strcmp (interface, MM_OLD_DBUS_INTERFACE_MODEM) &&
+ strcmp (interface, MM_OLD_DBUS_INTERFACE_MODEM_GSM_CARD))
+ return;
+
+ value = g_hash_table_lookup (props, "IpMethod");
+ if (value && G_VALUE_HOLDS_UINT (value)) {
+ g_object_set (self,
+ NM_MODEM_IP_METHOD, g_value_get_uint (value),
+ NULL);
+ }
+
+ value = g_hash_table_lookup (props, "SimIdentifier");
+ if (value && G_VALUE_HOLDS_STRING (value)) {
+ const char *sim_id = g_value_get_string (value);
+
+ g_object_set (self,
+ NM_MODEM_SIM_ID, (sim_id && *sim_id) ? sim_id : NULL,
+ NULL);
+ }
+
+ value = g_hash_table_lookup (props, "UnlockRequired");
+ if (value && G_VALUE_HOLDS_STRING (value)) {
+ g_free (priv->unlock_required);
+ priv->unlock_required = g_value_dup_string (value);
+ update_state = TRUE;
+ }
+
+ value = g_hash_table_lookup (props, "State");
+ if (value && G_VALUE_HOLDS_UINT (value)) {
+ priv->state = g_value_get_uint (value);
+ update_state = TRUE;
+ }
+
+ if (update_state) {
+ nm_modem_set_state (NM_MODEM (self),
+ mm_state_to_nm (priv->state, priv->unlock_required),
+ NULL);
+ }
+}
+
+/*****************************************************************************/
+
+static gboolean
+check_connection_compatible (NMModem *modem, NMConnection *connection)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (modem);
+ NMSettingConnection *s_con;
+ gboolean valid_cdma = FALSE, valid_gsm = FALSE;
+ const char *ctype;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ ctype = nm_setting_connection_get_connection_type (s_con);
+ g_assert (ctype);
+
+ /* Check for valid CDMA first */
+ if (strcmp (ctype, NM_SETTING_CDMA_SETTING_NAME) == 0)
+ valid_cdma = !!nm_connection_get_setting_cdma (connection);
+
+ if (strcmp (ctype, NM_SETTING_GSM_SETTING_NAME) == 0)
+ valid_gsm = !!nm_connection_get_setting_gsm (connection);
+
+ /* Validate CDMA */
+ if (priv->caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) {
+ if (valid_cdma)
+ return TRUE;
+
+ /* If the modem is only CDMA and the connection is not CDMA, error */
+ if ((priv->caps ^ NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) == 0)
+ return FALSE;
+ }
+
+ /* Validate 3GPP */
+ if (priv->caps & CAPS_3GPP)
+ return valid_gsm;
+
+ return FALSE;
+}
+
+/*****************************************************************************/
+
+static void
+complete_ppp_setting (NMConnection *connection)
+{
+ NMSettingPPP *s_ppp;
+
+ s_ppp = nm_connection_get_setting_ppp (connection);
+ if (!s_ppp) {
+ s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
+ g_object_set (G_OBJECT (s_ppp),
+ NM_SETTING_PPP_LCP_ECHO_FAILURE, 5,
+ NM_SETTING_PPP_LCP_ECHO_INTERVAL, 30,
+ NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_ppp));
+ }
+}
+
+static gboolean
+complete_connection_3gpp (NMConnection *connection,
+ const GSList *existing_connections,
+ GError **error)
+{
+ NMSettingGsm *s_gsm;
+
+ s_gsm = nm_connection_get_setting_gsm (connection);
+ if (!s_gsm || !nm_setting_gsm_get_apn (s_gsm)) {
+ /* Need an APN at least */
+ g_set_error_literal (error,
+ NM_SETTING_GSM_ERROR,
+ NM_SETTING_GSM_ERROR_MISSING_PROPERTY,
+ NM_SETTING_GSM_APN);
+ return FALSE;
+ }
+
+ if (!nm_setting_gsm_get_number (s_gsm))
+ g_object_set (G_OBJECT (s_gsm), NM_SETTING_GSM_NUMBER, "*99#", NULL);
+
+ complete_ppp_setting (connection);
+
+ nm_utils_complete_generic (connection,
+ NM_SETTING_GSM_SETTING_NAME,
+ existing_connections,
+ _("GSM connection %d"),
+ NULL,
+ FALSE); /* No IPv6 yet by default */
+ return TRUE;
+}
+
+static gboolean
+complete_connection_cdma (NMConnection *connection,
+ const GSList *existing_connections,
+ GError **error)
+{
+ NMSettingCdma *s_cdma;
+
+ s_cdma = nm_connection_get_setting_cdma (connection);
+ if (!s_cdma) {
+ s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_cdma));
+ }
+
+ if (!nm_setting_cdma_get_number (s_cdma))
+ g_object_set (G_OBJECT (s_cdma), NM_SETTING_CDMA_NUMBER, "#777", NULL);
+
+ complete_ppp_setting (connection);
+
+ nm_utils_complete_generic (connection,
+ NM_SETTING_CDMA_SETTING_NAME,
+ existing_connections,
+ _("CDMA connection %d"),
+ NULL,
+ FALSE); /* No IPv6 yet by default */
+ return TRUE;
+}
+
+static gboolean
+complete_connection (NMModem *modem,
+ NMConnection *connection,
+ const GSList *existing_connections,
+ GError **error)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (modem);
+
+ /* If the modem has LTE, complete as 3GPP */
+ if (priv->caps & NM_DEVICE_MODEM_CAPABILITY_LTE)
+ return complete_connection_3gpp (connection, existing_connections, error);
+
+ /* Otherwise, prefer CDMA on the theory that if the modem has CDMA/EVDO
+ * that's most likely what the user will be using.
+ */
+ if (priv->caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
+ return complete_connection_cdma (connection, existing_connections, error);
+
+ if (priv->caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
+ return complete_connection_3gpp (connection, existing_connections, error);
+
+ g_set_error_literal (error, NM_MODEM_ERROR, NM_MODEM_ERROR_CONNECTION_INCOMPATIBLE,
+ "Modem had no WWAN capabilities.");
+ return FALSE;
+}
+
+/*****************************************************************************/
+
+static gboolean
+get_user_pass (NMModem *modem,
+ NMConnection *connection,
+ const char **user,
+ const char **pass)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (modem);
+ NMSettingCdma *s_cdma;
+ NMSettingGsm *s_gsm;
+
+ if (priv->caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) {
+ s_cdma = nm_connection_get_setting_cdma (connection);
+ if (s_cdma) {
+ if (user)
+ *user = nm_setting_cdma_get_username (s_cdma);
+ if (pass)
+ *pass = nm_setting_cdma_get_password (s_cdma);
+ return TRUE;
+ }
+ }
+
+ /* Fall back to GSM; will be used for CDMA devices on LTE networks too */
+ s_gsm = nm_connection_get_setting_gsm (connection);
+ if (s_gsm) {
+ if (user)
+ *user = nm_setting_gsm_get_username (s_gsm);
+ if (pass)
+ *pass = nm_setting_gsm_get_password (s_gsm);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/*****************************************************************************/
+
+static void
+get_capabilities (NMModem *_self,
+ NMDeviceModemCapabilities *modem_caps,
+ NMDeviceModemCapabilities *current_caps)
+{
+ NMModemOld *self = NM_MODEM_OLD (_self);
+
+ *current_caps = *modem_caps = NM_MODEM_OLD_GET_PRIVATE (self)->caps;
+}
+
+/*****************************************************************************/
+
+NMModem *
+nm_modem_old_new (const char *path, GHashTable *properties, GError **error)
+{
+ NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE;
+ NMModemOld *self;
+ GHashTableIter iter;
+ const char *prop;
+ GValue *value;
+ const char *data_device = NULL;
+ const char *driver = NULL;
+ const char *master_device = NULL;
+ const char *unlock_required = NULL;
+ const char *device_id = NULL;
+ guint32 modem_type = MM_OLD_MODEM_TYPE_UNKNOWN;
+ guint32 ip_method = MM_MODEM_IP_METHOD_PPP;
+ guint32 ip_timeout = 0;
+ MMOldModemState state = MM_OLD_MODEM_STATE_UNKNOWN;
+
+ g_return_val_if_fail (path != NULL, NULL);
+ g_return_val_if_fail (properties != NULL, NULL);
+
+ g_hash_table_iter_init (&iter, properties);
+ while (g_hash_table_iter_next (&iter, (gpointer) &prop, (gpointer) &value)) {
+ if (g_strcmp0 (prop, "Type") == 0)
+ modem_type = g_value_get_uint (value);
+ else if (g_strcmp0 (prop, "MasterDevice") == 0)
+ master_device = g_value_get_string (value);
+ else if (g_strcmp0 (prop, "IpMethod") == 0)
+ ip_method = g_value_get_uint (value);
+ else if (g_strcmp0 (prop, "Device") == 0)
+ data_device = g_value_get_string (value);
+ else if (g_strcmp0 (prop, "Driver") == 0)
+ driver = g_value_get_string (value);
+ else if (g_strcmp0 (prop, "IpTimeout") == 0)
+ ip_timeout = g_value_get_uint (value);
+ else if (g_strcmp0 (prop, "State") == 0)
+ state = g_value_get_uint (value);
+ else if (g_strcmp0 (prop, "UnlockRequired") == 0)
+ unlock_required = g_value_get_string (value);
+ else if (g_strcmp0 (prop, "DeviceIdentifier") == 0)
+ device_id = g_value_get_string (value);
+ }
+
+ if (modem_type == MM_OLD_MODEM_TYPE_UNKNOWN) {
+ g_set_error (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED,
+ "Unhandled modem type %d", modem_type);
+ return NULL;
+ }
+
+ if (!master_device || !strlen (master_device)) {
+ g_set_error_literal (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED,
+ "Failed to retrieve modem master device.");
+ return NULL;
+ }
+
+ if (!driver || !strlen (driver)) {
+ g_set_error_literal (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED,
+ "Failed to retrieve modem driver.");
+ return NULL;
+ }
+
+ if (!data_device || !strlen (data_device)) {
+ g_set_error_literal (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED,
+ "Failed to retrieve modem data device.");
+ return NULL;
+ }
+
+ self = (NMModemOld *) g_object_new (NM_TYPE_MODEM_OLD,
+ NM_MODEM_PATH, path,
+ NM_MODEM_DRIVER, driver,
+ NM_MODEM_UID, data_device,
+ NM_MODEM_CONTROL_PORT, NULL,
+ NM_MODEM_DATA_PORT, data_device,
+ NM_MODEM_IP_METHOD, ip_method,
+ NM_MODEM_IP_TIMEOUT, ip_timeout,
+ NM_MODEM_DEVICE_ID, device_id,
+ NM_MODEM_STATE, mm_state_to_nm (state, unlock_required),
+ NULL);
+ if (self) {
+ if (modem_type == MM_OLD_MODEM_TYPE_CDMA)
+ caps |= NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO;
+ if (modem_type == MM_OLD_MODEM_TYPE_GSM)
+ caps |= NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS;
+
+ NM_MODEM_OLD_GET_PRIVATE (self)->caps = caps;
+ NM_MODEM_OLD_GET_PRIVATE (self)->state = state;
+ NM_MODEM_OLD_GET_PRIVATE (self)->unlock_required = g_strdup (unlock_required);
+ }
+
+ return (NMModem *) self;
+}
+
+static void
+nm_modem_old_init (NMModemOld *self)
+{
+}
+
+static void
+get_sim_id_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+{
+ NMModemOld *self = NM_MODEM_OLD (user_data);
+ GValue value = G_VALUE_INIT;
+
+ if (dbus_g_proxy_end_call (proxy, call_id, NULL, G_TYPE_VALUE, &value, G_TYPE_INVALID)) {
+ if (G_VALUE_HOLDS_STRING (&value)) {
+ const char *sim_id = g_value_get_string (&value);
+
+ if (sim_id && *sim_id)
+ g_object_set (G_OBJECT (self), NM_MODEM_SIM_ID, sim_id, NULL);
+ }
+ g_value_unset (&value);
+ }
+}
+
+static GObject*
+constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ NMModemOldPrivate *priv;
+ DBusGConnection *bus;
+
+ object = G_OBJECT_CLASS (nm_modem_old_parent_class)->constructor (type, n_construct_params, construct_params);
+ if (!object)
+ return NULL;
+
+ priv = NM_MODEM_OLD_GET_PRIVATE (object);
+
+ bus = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
+ priv->proxy = dbus_g_proxy_new_for_name (bus,
+ MM_OLD_DBUS_SERVICE,
+ nm_modem_get_path (NM_MODEM (object)),
+ MM_OLD_DBUS_INTERFACE_MODEM);
+
+ priv->props_proxy = dbus_g_proxy_new_for_name (bus,
+ MM_OLD_DBUS_SERVICE,
+ nm_modem_get_path (NM_MODEM (object)),
+ DBUS_INTERFACE_PROPERTIES);
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->props_proxy, "MmPropertiesChanged",
+ G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->props_proxy, "MmPropertiesChanged",
+ G_CALLBACK (modem_properties_changed),
+ object,
+ NULL);
+
+ /* Request the SIM ID */
+ dbus_g_proxy_begin_call (priv->props_proxy,
+ "Get",
+ get_sim_id_done,
+ g_object_ref (object), g_object_unref,
+ G_TYPE_STRING, MM_OLD_DBUS_INTERFACE_MODEM_GSM_CARD,
+ G_TYPE_STRING, "SimIdentifier",
+ G_TYPE_INVALID);
+
+ return object;
+}
+
+static void
+dispose (GObject *object)
+{
+ NMModemOldPrivate *priv = NM_MODEM_OLD_GET_PRIVATE (object);
+
+ if (priv->proxy) {
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
+ }
+
+ if (priv->props_proxy) {
+ g_object_unref (priv->props_proxy);
+ priv->props_proxy = NULL;
+ }
+
+ if (priv->connect_properties) {
+ g_hash_table_destroy (priv->connect_properties);
+ priv->connect_properties = NULL;
+ }
+
+ if (priv->enable_delay_id) {
+ g_source_remove (priv->enable_delay_id);
+ priv->enable_delay_id = 0;
+ }
+
+ g_free (priv->unlock_required);
+ priv->unlock_required = NULL;
+
+ G_OBJECT_CLASS (nm_modem_old_parent_class)->dispose (object);
+}
+
+static void
+nm_modem_old_class_init (NMModemOldClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMModemClass *modem_class = NM_MODEM_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMModemOldPrivate));
+
+ /* Virtual methods */
+ object_class->constructor = constructor;
+ object_class->dispose = dispose;
+
+ modem_class->get_capabilities = get_capabilities;
+ modem_class->get_user_pass = get_user_pass;
+ modem_class->complete_connection = complete_connection;
+ modem_class->check_connection_compatible = check_connection_compatible;
+ modem_class->act_stage1_prepare = act_stage1_prepare;
+ modem_class->static_stage3_ip4_config_start = static_stage3_ip4_config_start;
+ modem_class->disconnect = disconnect;
+ modem_class->deactivate = deactivate;
+ modem_class->set_mm_enabled = set_mm_enabled;
+}
diff --git a/src/devices/wwan/nm-modem-old.h b/src/devices/wwan/nm-modem-old.h
new file mode 100644
index 000000000..65e3db2d1
--- /dev/null
+++ b/src/devices/wwan/nm-modem-old.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2009 - 2011 Red Hat, Inc.
+ * Copyright (C) 2009 Novell, Inc.
+ */
+
+#ifndef NM_MODEM_OLD_H
+#define NM_MODEM_OLD_H
+
+#include <dbus/dbus-glib.h>
+#include <glib-object.h>
+#include "nm-modem.h"
+#include "nm-modem-old-types.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_MODEM_OLD (nm_modem_old_get_type ())
+#define NM_MODEM_OLD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_OLD, NMModemOld))
+#define NM_MODEM_OLD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MODEM_OLD, NMModemOldClass))
+#define NM_IS_MODEM_OLD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_MODEM_OLD))
+#define NM_IS_MODEM_OLD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM_OLD))
+#define NM_MODEM_OLD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM_OLD, NMModemOldClass))
+
+typedef struct {
+ NMModem parent;
+} NMModemOld;
+
+typedef struct {
+ NMModemClass parent;
+} NMModemOldClass;
+
+GType nm_modem_old_get_type (void);
+
+NMModem *nm_modem_old_new (const char *path, GHashTable *properties, GError **error);
+
+G_END_DECLS
+
+#endif /* NM_MODEM_OLD_H */
diff --git a/src/modem-manager/nm-modem.c b/src/devices/wwan/nm-modem.c
index 34aeccf43..fd3b4a369 100644
--- a/src/modem-manager/nm-modem.c
+++ b/src/devices/wwan/nm-modem.c
@@ -15,22 +15,21 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2009 - 2011 Red Hat, Inc.
+ * Copyright (C) 2009 - 2014 Red Hat, Inc.
* Copyright (C) 2009 Novell, Inc.
*/
#include <string.h>
#include "nm-modem.h"
-#include "nm-system.h"
+#include "nm-platform.h"
#include "nm-dbus-manager.h"
#include "nm-setting-connection.h"
-#include "nm-marshal.h"
#include "nm-properties-changed-signal.h"
-#include "nm-modem-types.h"
#include "nm-logging.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
#include "nm-dbus-glib-types.h"
+#include "nm-modem-enum-types.h"
G_DEFINE_TYPE (NMModem, nm_modem, G_TYPE_OBJECT)
@@ -42,10 +41,12 @@ enum {
PROP_DATA_PORT,
PROP_PATH,
PROP_UID,
+ PROP_DRIVER,
PROP_IP_METHOD,
PROP_IP_TIMEOUT,
- PROP_ENABLED,
- PROP_CONNECTED,
+ PROP_STATE,
+ PROP_DEVICE_ID,
+ PROP_SIM_ID,
LAST_PROP
};
@@ -53,10 +54,15 @@ enum {
typedef struct {
char *uid;
char *path;
+ char *driver;
char *control_port;
char *data_port;
char *ppp_iface;
guint32 ip_method;
+ NMModemState state;
+ NMModemState prev_state; /* revert to this state if enable/disable fails */
+ char *device_id;
+ char *sim_id;
NMPPPManager *ppp_manager;
@@ -64,9 +70,7 @@ typedef struct {
guint32 secrets_tries;
guint32 secrets_id;
- gboolean mm_enabled;
guint32 mm_ip_timeout;
- gboolean mm_connected;
/* PPP stats */
guint32 in_bytes;
@@ -80,37 +84,138 @@ enum {
IP4_CONFIG_RESULT,
AUTH_REQUESTED,
AUTH_RESULT,
+ REMOVED,
+ STATE_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
+
/*****************************************************************************/
-/* Get/Set enabled/connected */
-gboolean
-nm_modem_get_mm_enabled (NMModem *self)
+GQuark
+nm_modem_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-modem-error");
+ return quark;
+}
+
+/*****************************************************************************/
+/* State/enabled/connected */
+
+static const char *state_table[] = {
+ [NM_MODEM_STATE_UNKNOWN] = "unknown",
+ [NM_MODEM_STATE_FAILED] = "failed",
+ [NM_MODEM_STATE_INITIALIZING] = "initializing",
+ [NM_MODEM_STATE_LOCKED] = "locked",
+ [NM_MODEM_STATE_DISABLED] = "disabled",
+ [NM_MODEM_STATE_DISABLING] = "disabling",
+ [NM_MODEM_STATE_ENABLING] = "enabling",
+ [NM_MODEM_STATE_ENABLED] = "enabled",
+ [NM_MODEM_STATE_SEARCHING] = "searching",
+ [NM_MODEM_STATE_REGISTERED] = "registered",
+ [NM_MODEM_STATE_DISCONNECTING] = "disconnecting",
+ [NM_MODEM_STATE_CONNECTING] = "connecting",
+ [NM_MODEM_STATE_CONNECTED] = "connected",
+};
+
+const char *
+nm_modem_state_to_string (NMModemState state)
{
- return NM_MODEM_GET_PRIVATE (self)->mm_enabled;
+ if (state >= 0 && state < G_N_ELEMENTS (state_table))
+ return state_table[state];
+ return NULL;
+}
+
+NMModemState
+nm_modem_get_state (NMModem *self)
+{
+ return NM_MODEM_GET_PRIVATE (self)->state;
+}
+
+void
+nm_modem_set_state (NMModem *self,
+ NMModemState new_state,
+ const char *reason)
+{
+ NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
+ NMModemState old_state = priv->state;
+
+ priv->prev_state = NM_MODEM_STATE_UNKNOWN;
+
+ if (new_state != old_state) {
+ nm_log_info (LOGD_MB, "(%s): modem state changed, '%s' --> '%s' (reason: %s)\n",
+ nm_modem_get_uid (self),
+ nm_modem_state_to_string (old_state),
+ nm_modem_state_to_string (new_state),
+ reason ? reason : "none");
+
+ priv->state = new_state;
+ g_object_notify (G_OBJECT (self), NM_MODEM_STATE);
+ g_signal_emit (self, signals[STATE_CHANGED], 0, new_state, old_state, reason);
+ }
+}
+
+void
+nm_modem_set_prev_state (NMModem *self, const char *reason)
+{
+ NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
+
+ /* Reset modem to previous state if the state hasn't already changed */
+ if (priv->prev_state != NM_MODEM_STATE_UNKNOWN)
+ nm_modem_set_state (self, priv->prev_state, reason);
}
void
nm_modem_set_mm_enabled (NMModem *self,
gboolean enabled)
{
- NMModemPrivate *priv;
+ NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
+ NMModemState prev_state = priv->state;
- priv = NM_MODEM_GET_PRIVATE (self);
+ if (enabled && priv->state >= NM_MODEM_STATE_ENABLING) {
+ nm_log_dbg (LOGD_MB, "(%s) cannot enable modem: already enabled",
+ nm_modem_get_uid (self));
+ return;
+ }
+ if (!enabled && priv->state <= NM_MODEM_STATE_DISABLING) {
+ nm_log_dbg (LOGD_MB, "(%s) cannot disable modem: already disabled",
+ nm_modem_get_uid (self));
+ return;
+ }
+
+ if (priv->state <= NM_MODEM_STATE_INITIALIZING) {
+ nm_log_dbg (LOGD_MB, "(%s) cannot enable/disable modem: initializing or failed",
+ nm_modem_get_uid (self));
+ return;
+ } else if (priv->state == NM_MODEM_STATE_LOCKED) {
+ /* Don't try to enable if the modem is locked since that will fail */
+ nm_log_warn (LOGD_MB, "(%s) cannot enable/disable modem: locked",
+ nm_modem_get_uid (self));
+
+ /* Try to unlock the modem if it's being enabled */
+ if (enabled)
+ g_signal_emit_by_name (self, NM_MODEM_AUTH_REQUESTED, 0);
+ return;
+ }
+
+ NM_MODEM_GET_CLASS (self)->set_mm_enabled (self, enabled);
- if (priv->mm_enabled != enabled)
- NM_MODEM_GET_CLASS (self)->set_mm_enabled (self, enabled);
+ /* Pre-empt the state change signal */
+ nm_modem_set_state (self,
+ enabled ? NM_MODEM_STATE_ENABLING : NM_MODEM_STATE_DISABLING,
+ "user preference");
+ priv->prev_state = prev_state;
}
-gboolean
-nm_modem_get_mm_connected (NMModem *self)
+void
+nm_modem_emit_removed (NMModem *self)
{
- return NM_MODEM_GET_PRIVATE (self)->mm_connected;
+ g_signal_emit (self, signals[REMOVED], 0);
}
/*****************************************************************************/
@@ -218,9 +323,7 @@ ppp_stage3_ip4_config_start (NMModem *self,
NMActStageReturn ret;
guint ip_timeout = 20;
- g_return_val_if_fail (self != NULL, NM_ACT_STAGE_RETURN_FAILURE);
g_return_val_if_fail (NM_IS_MODEM (self), NM_ACT_STAGE_RETURN_FAILURE);
- g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
g_return_val_if_fail (NM_IS_ACT_REQUEST (req), NM_ACT_STAGE_RETURN_FAILURE);
g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
@@ -281,11 +384,8 @@ nm_modem_stage3_ip4_config_start (NMModem *self,
NMActRequest *req;
NMActStageReturn ret;
- g_return_val_if_fail (self != NULL, NM_ACT_STAGE_RETURN_FAILURE);
g_return_val_if_fail (NM_IS_MODEM (self), NM_ACT_STAGE_RETURN_FAILURE);
- g_return_val_if_fail (device != NULL, NM_ACT_STAGE_RETURN_FAILURE);
g_return_val_if_fail (NM_IS_DEVICE (device), NM_ACT_STAGE_RETURN_FAILURE);
- g_return_val_if_fail (device_class != NULL, NM_ACT_STAGE_RETURN_FAILURE);
g_return_val_if_fail (NM_IS_DEVICE_CLASS (device_class), NM_ACT_STAGE_RETURN_FAILURE);
g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
@@ -325,11 +425,11 @@ nm_modem_ip4_pre_commit (NMModem *modem,
*/
if ( priv->ip_method == MM_MODEM_IP_METHOD_STATIC
|| priv->ip_method == MM_MODEM_IP_METHOD_DHCP) {
- NMIP4Address *addr = nm_ip4_config_get_address (config, 0);
+ const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, 0);
- g_assert (addr);
- if (nm_ip4_address_get_prefix (addr) == 32)
- nm_system_iface_set_arp (nm_device_get_ip_ifindex (device), FALSE);
+ g_assert (address);
+ if (address->plen == 32)
+ nm_platform_link_set_noarp (nm_device_get_ip_ifindex (device));
}
}
@@ -408,9 +508,7 @@ nm_modem_get_secrets (NMModem *self,
static NMActStageReturn
act_stage1_prepare (NMModem *modem,
- NMActRequest *req,
- GPtrArray **out_hints,
- const char **out_setting_name,
+ NMConnection *connection,
NMDeviceStateReason *reason)
{
*reason = NM_DEVICE_STATE_REASON_UNKNOWN;
@@ -427,37 +525,43 @@ nm_modem_act_stage1_prepare (NMModem *self,
GPtrArray *hints = NULL;
const char *setting_name = NULL;
NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
+ NMConnection *connection;
if (priv->act_request)
g_object_unref (priv->act_request);
priv->act_request = g_object_ref (req);
- ret = NM_MODEM_GET_CLASS (self)->act_stage1_prepare (self,
- req,
- &hints,
- &setting_name,
- reason);
- if ((ret == NM_ACT_STAGE_RETURN_POSTPONE) && setting_name) {
- if (priv->secrets_tries++)
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
-
- priv->secrets_id = nm_act_request_get_secrets (req,
- setting_name,
- flags,
- hints ? g_ptr_array_index (hints, 0) : NULL,
- modem_secrets_cb,
- self);
- if (priv->secrets_id)
- g_signal_emit (self, signals[AUTH_REQUESTED], 0);
- else {
- *reason = NM_DEVICE_STATE_REASON_NO_SECRETS;
- ret = NM_ACT_STAGE_RETURN_FAILURE;
- }
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
- if (hints)
- g_ptr_array_free (hints, TRUE);
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ if (!setting_name) {
+ /* Ready to connect */
+ g_assert (!hints);
+ return NM_MODEM_GET_CLASS (self)->act_stage1_prepare (self, connection, reason);
}
+ /* Secrets required... */
+ if (priv->secrets_tries++)
+ flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
+
+ priv->secrets_id = nm_act_request_get_secrets (req,
+ setting_name,
+ flags,
+ hints ? g_ptr_array_index (hints, 0) : NULL,
+ modem_secrets_cb,
+ self);
+ if (priv->secrets_id) {
+ g_signal_emit (self, signals[AUTH_REQUESTED], 0);
+ ret = NM_ACT_STAGE_RETURN_POSTPONE;
+ } else {
+ *reason = NM_DEVICE_STATE_REASON_NO_SECRETS;
+ ret = NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ if (hints)
+ g_ptr_array_free (hints, TRUE);
+
return ret;
}
@@ -480,25 +584,11 @@ nm_modem_act_stage2_config (NMModem *self,
/*****************************************************************************/
-NMConnection *
-nm_modem_get_best_auto_connection (NMModem *self,
- GSList *connections,
- char **specific_object)
-{
- if (NM_MODEM_GET_CLASS (self)->get_best_auto_connection)
- return NM_MODEM_GET_CLASS (self)->get_best_auto_connection (self, connections, specific_object);
- return NULL;
-}
-
-/*****************************************************************************/
-
gboolean
-nm_modem_check_connection_compatible (NMModem *self,
- NMConnection *connection,
- GError **error)
+nm_modem_check_connection_compatible (NMModem *self, NMConnection *connection)
{
if (NM_MODEM_GET_CLASS (self)->check_connection_compatible)
- return NM_MODEM_GET_CLASS (self)->check_connection_compatible (self, connection, error);
+ return NM_MODEM_GET_CLASS (self)->check_connection_compatible (self, connection);
return FALSE;
}
@@ -523,9 +613,7 @@ deactivate (NMModem *self, NMDevice *device)
NMModemPrivate *priv;
int ifindex;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_MODEM (self));
- g_return_if_fail (device != NULL);
g_return_if_fail (NM_IS_DEVICE (device));
priv = NM_MODEM_GET_PRIVATE (self);
@@ -552,10 +640,9 @@ deactivate (NMModem *self, NMDevice *device)
case MM_MODEM_IP_METHOD_DHCP:
ifindex = nm_device_get_ip_ifindex (device);
if (ifindex > 0) {
- /* FIXME: use AF_UNSPEC here when we have IPv6 support */
- nm_system_iface_flush_routes (ifindex, AF_INET);
- nm_system_iface_flush_addresses (ifindex, AF_UNSPEC);
- nm_system_iface_set_up (ifindex, FALSE, NULL);
+ nm_platform_route_flush (ifindex);
+ nm_platform_address_flush (ifindex);
+ nm_platform_link_set_down (ifindex);
}
break;
default:
@@ -586,30 +673,23 @@ nm_modem_device_state_changed (NMModem *self,
gboolean was_connected = FALSE, warn = TRUE;
NMModemPrivate *priv;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_MODEM (self));
- if (old_state >= NM_DEVICE_STATE_PREPARE && old_state <= NM_DEVICE_STATE_ACTIVATED)
+ if (old_state >= NM_DEVICE_STATE_PREPARE && old_state <= NM_DEVICE_STATE_DEACTIVATING)
was_connected = TRUE;
priv = NM_MODEM_GET_PRIVATE (self);
/* Make sure we don't leave the serial device open */
switch (new_state) {
- case NM_DEVICE_STATE_NEED_AUTH:
- if (priv->ppp_manager)
- break;
- /* else fall through */
case NM_DEVICE_STATE_UNMANAGED:
case NM_DEVICE_STATE_UNAVAILABLE:
- case NM_DEVICE_STATE_FAILED:
case NM_DEVICE_STATE_DISCONNECTED:
- if (new_state != NM_DEVICE_STATE_NEED_AUTH) {
- if (priv->act_request) {
- cancel_get_secrets (self);
- g_object_unref (priv->act_request);
- priv->act_request = NULL;
- }
+ case NM_DEVICE_STATE_FAILED:
+ if (priv->act_request) {
+ cancel_get_secrets (self);
+ g_object_unref (priv->act_request);
+ priv->act_request = NULL;
}
if (was_connected) {
@@ -629,7 +709,6 @@ nm_modem_device_state_changed (NMModem *self,
const char *
nm_modem_get_uid (NMModem *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM (self), NULL);
return NM_MODEM_GET_PRIVATE (self)->uid;
@@ -638,16 +717,22 @@ nm_modem_get_uid (NMModem *self)
const char *
nm_modem_get_path (NMModem *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM (self), NULL);
return NM_MODEM_GET_PRIVATE (self)->path;
}
const char *
+nm_modem_get_driver (NMModem *self)
+{
+ g_return_val_if_fail (NM_IS_MODEM (self), NULL);
+
+ return NM_MODEM_GET_PRIVATE (self)->driver;
+}
+
+const char *
nm_modem_get_control_port (NMModem *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM (self), NULL);
return NM_MODEM_GET_PRIVATE (self)->control_port;
@@ -656,7 +741,6 @@ nm_modem_get_control_port (NMModem *self)
const char *
nm_modem_get_data_port (NMModem *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_MODEM (self), NULL);
/* The ppp_iface takes precedence over the data interface when PPP is used,
@@ -667,6 +751,39 @@ nm_modem_get_data_port (NMModem *self)
NM_MODEM_GET_PRIVATE (self)->ppp_iface : NM_MODEM_GET_PRIVATE (self)->data_port;
}
+gboolean
+nm_modem_owns_port (NMModem *self, const char *iface)
+{
+ NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
+
+ g_return_val_if_fail (iface != NULL, FALSE);
+
+ if (NM_MODEM_GET_CLASS (self)->owns_port)
+ return NM_MODEM_GET_CLASS (self)->owns_port (self, iface);
+
+ /* Fall back to data/control ports */
+ if (priv->ppp_iface && (strcmp (priv->ppp_iface, iface) == 0))
+ return TRUE;
+ if (priv->data_port && (strcmp (priv->data_port, iface) == 0))
+ return TRUE;
+ if (priv->control_port && (strcmp (priv->control_port, iface) == 0))
+ return TRUE;
+
+ return FALSE;
+}
+
+/*****************************************************************************/
+
+void
+nm_modem_get_capabilities (NMModem *self,
+ NMDeviceModemCapabilities *modem_caps,
+ NMDeviceModemCapabilities *current_caps)
+{
+ g_return_if_fail (NM_IS_MODEM (self));
+
+ NM_MODEM_GET_CLASS (self)->get_capabilities (self, modem_caps, current_caps);
+}
+
/*****************************************************************************/
static void
@@ -717,6 +834,9 @@ get_property (GObject *object, guint prop_id,
case PROP_PATH:
g_value_set_string (value, priv->path);
break;
+ case PROP_DRIVER:
+ g_value_set_string (value, priv->driver);
+ break;
case PROP_CONTROL_PORT:
g_value_set_string (value, priv->control_port);
break;
@@ -732,11 +852,14 @@ get_property (GObject *object, guint prop_id,
case PROP_IP_TIMEOUT:
g_value_set_uint (value, priv->mm_ip_timeout);
break;
- case PROP_ENABLED:
- g_value_set_boolean (value, priv->mm_enabled);
+ case PROP_STATE:
+ g_value_set_enum (value, priv->state);
+ break;
+ case PROP_DEVICE_ID:
+ g_value_set_string (value, priv->device_id);
break;
- case PROP_CONNECTED:
- g_value_set_boolean (value, priv->mm_connected);
+ case PROP_SIM_ID:
+ g_value_set_string (value, priv->sim_id);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -755,6 +878,10 @@ set_property (GObject *object, guint prop_id,
/* Construct only */
priv->path = g_value_dup_string (value);
break;
+ case PROP_DRIVER:
+ /* Construct only */
+ priv->driver = g_value_dup_string (value);
+ break;
case PROP_CONTROL_PORT:
priv->control_port = g_value_dup_string (value);
break;
@@ -771,11 +898,16 @@ set_property (GObject *object, guint prop_id,
case PROP_IP_TIMEOUT:
priv->mm_ip_timeout = g_value_get_uint (value);
break;
- case PROP_ENABLED:
- priv->mm_enabled = g_value_get_boolean (value);
+ case PROP_STATE:
+ priv->state = g_value_get_enum (value);
+ break;
+ case PROP_DEVICE_ID:
+ /* construct only */
+ priv->device_id = g_value_dup_string (value);
break;
- case PROP_CONNECTED:
- priv->mm_connected = g_value_get_boolean (value);
+ case PROP_SIM_ID:
+ g_free (priv->sim_id);
+ priv->sim_id = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -803,8 +935,11 @@ finalize (GObject *object)
g_free (priv->uid);
g_free (priv->path);
+ g_free (priv->driver);
g_free (priv->control_port);
g_free (priv->data_port);
+ g_free (priv->device_id);
+ g_free (priv->sim_id);
G_OBJECT_CLASS (nm_modem_parent_class)->finalize (object);
}
@@ -845,6 +980,14 @@ nm_modem_class_init (NMModemClass *klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
+ (object_class, PROP_DRIVER,
+ g_param_spec_string (NM_MODEM_DRIVER,
+ "Driver",
+ "Driver",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
(object_class, PROP_CONTROL_PORT,
g_param_spec_string (NM_MODEM_CONTROL_PORT,
"Control port",
@@ -879,20 +1022,29 @@ nm_modem_class_init (NMModemClass *klass)
G_PARAM_READWRITE));
g_object_class_install_property
- (object_class, PROP_ENABLED,
- g_param_spec_boolean (NM_MODEM_ENABLED,
- "Enabled",
- "Enabled",
- TRUE,
- G_PARAM_READWRITE));
+ (object_class, PROP_STATE,
+ g_param_spec_enum (NM_MODEM_STATE,
+ "State",
+ "State",
+ NM_TYPE_MODEM_STATE,
+ NM_MODEM_STATE_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
- (object_class, PROP_CONNECTED,
- g_param_spec_boolean (NM_MODEM_CONNECTED,
- "Connected",
- "Connected",
- TRUE,
- G_PARAM_READWRITE));
+ (object_class, PROP_DEVICE_ID,
+ g_param_spec_string (NM_MODEM_DEVICE_ID,
+ "DeviceId",
+ "Device ID",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_SIM_ID,
+ g_param_spec_string (NM_MODEM_SIM_ID,
+ "SimId",
+ "Sim ID",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/* Signals */
@@ -901,8 +1053,7 @@ nm_modem_class_init (NMModemClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, ppp_stats),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
@@ -911,8 +1062,7 @@ nm_modem_class_init (NMModemClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, ppp_failed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals[IP4_CONFIG_RESULT] =
@@ -920,8 +1070,7 @@ nm_modem_class_init (NMModemClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, ip4_config_result),
- NULL, NULL,
- _nm_marshal_VOID__OBJECT_POINTER,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_POINTER);
signals[PREPARE_RESULT] =
@@ -929,8 +1078,7 @@ nm_modem_class_init (NMModemClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, prepare_result),
- NULL, NULL,
- _nm_marshal_VOID__BOOLEAN_UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_BOOLEAN, G_TYPE_UINT);
signals[AUTH_REQUESTED] =
@@ -938,8 +1086,7 @@ nm_modem_class_init (NMModemClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, auth_requested),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[AUTH_RESULT] =
@@ -947,7 +1094,26 @@ nm_modem_class_init (NMModemClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, auth_result),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+ signals[REMOVED] =
+ g_signal_new (NM_MODEM_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMModemClass, removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ signals[STATE_CHANGED] =
+ g_signal_new (NM_MODEM_STATE_CHANGED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMModemClass, state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2, NM_TYPE_MODEM_STATE, NM_TYPE_MODEM_STATE);
+
+ dbus_g_error_domain_register (NM_MODEM_ERROR,
+ NM_DBUS_INTERFACE_DEVICE_MODEM,
+ NM_TYPE_MODEM_ERROR);
}
diff --git a/src/modem-manager/nm-modem.h b/src/devices/wwan/nm-modem.h
index d01aaf2cb..c992cf721 100644
--- a/src/modem-manager/nm-modem.h
+++ b/src/devices/wwan/nm-modem.h
@@ -36,26 +36,60 @@ G_BEGIN_DECLS
#define NM_IS_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM))
#define NM_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM, NMModemClass))
+/* Properties */
#define NM_MODEM_UID "uid"
#define NM_MODEM_PATH "path"
+#define NM_MODEM_DRIVER "driver"
#define NM_MODEM_CONTROL_PORT "control-port"
#define NM_MODEM_DATA_PORT "data-port"
#define NM_MODEM_IP_METHOD "ip-method"
#define NM_MODEM_IP_TIMEOUT "ip-timeout"
-#define NM_MODEM_ENABLED "enabled"
-#define NM_MODEM_CONNECTED "connected"
+#define NM_MODEM_STATE "state"
+#define NM_MODEM_DEVICE_ID "device-id"
+#define NM_MODEM_SIM_ID "sim-id"
+/* Signals */
#define NM_MODEM_PPP_STATS "ppp-stats"
#define NM_MODEM_PPP_FAILED "ppp-failed"
#define NM_MODEM_PREPARE_RESULT "prepare-result"
#define NM_MODEM_IP4_CONFIG_RESULT "ip4-config-result"
#define NM_MODEM_AUTH_REQUESTED "auth-requested"
#define NM_MODEM_AUTH_RESULT "auth-result"
+#define NM_MODEM_REMOVED "removed"
+#define NM_MODEM_STATE_CHANGED "state-changed"
#define MM_MODEM_IP_METHOD_PPP 0
#define MM_MODEM_IP_METHOD_STATIC 1
#define MM_MODEM_IP_METHOD_DHCP 2
+typedef enum {
+ NM_MODEM_ERROR_CONNECTION_NOT_GSM, /*< nick=ConnectionNotGsm >*/
+ NM_MODEM_ERROR_CONNECTION_NOT_CDMA, /*< nick=ConnectionNotCdma >*/
+ NM_MODEM_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
+ NM_MODEM_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
+ NM_MODEM_ERROR_INITIALIZATION_FAILED, /*< nick=InitializationFailed >*/
+} NMModemError;
+
+typedef enum { /*< underscore_name=nm_modem_state >*/
+ NM_MODEM_STATE_UNKNOWN = 0,
+ NM_MODEM_STATE_FAILED = 1,
+ NM_MODEM_STATE_INITIALIZING = 2,
+ NM_MODEM_STATE_LOCKED = 3,
+ NM_MODEM_STATE_DISABLED = 4,
+ NM_MODEM_STATE_DISABLING = 5,
+ NM_MODEM_STATE_ENABLING = 6,
+ NM_MODEM_STATE_ENABLED = 7,
+ NM_MODEM_STATE_SEARCHING = 8,
+ NM_MODEM_STATE_REGISTERED = 9,
+ NM_MODEM_STATE_DISCONNECTING = 10,
+ NM_MODEM_STATE_CONNECTING = 11,
+ NM_MODEM_STATE_CONNECTED = 12,
+} NMModemState;
+
+#define NM_MODEM_ERROR (nm_modem_error_quark ())
+GQuark nm_modem_error_quark (void);
+
+
typedef struct {
GObject parent;
} NMModem;
@@ -63,30 +97,25 @@ typedef struct {
typedef struct {
GObjectClass parent;
+ void (*get_capabilities) (NMModem *self,
+ NMDeviceModemCapabilities *modem_caps,
+ NMDeviceModemCapabilities *current_caps);
+
gboolean (*get_user_pass) (NMModem *modem,
NMConnection *connection,
const char **user,
const char **pass);
- const char * (*get_setting_name) (NMModem *modem);
-
gboolean (*check_connection_compatible) (NMModem *modem,
- NMConnection *connection,
- GError **error);
+ NMConnection *connection);
gboolean (*complete_connection) (NMModem *modem,
NMConnection *connection,
const GSList *existing_connections,
GError **error);
- NMConnection * (*get_best_auto_connection) (NMModem *modem,
- GSList *connections,
- char **specific_object);
-
NMActStageReturn (*act_stage1_prepare) (NMModem *modem,
- NMActRequest *req,
- GPtrArray **out_hints,
- const char **out_setting_name,
+ NMConnection *connection,
NMDeviceStateReason *reason);
NMActStageReturn (*static_stage3_ip4_config_start) (NMModem *self,
@@ -99,6 +128,8 @@ typedef struct {
void (*deactivate) (NMModem *self, NMDevice *device);
+ gboolean (*owns_port) (NMModem *self, const char *iface);
+
/* Signals */
void (*ppp_stats) (NMModem *self, guint32 in_bytes, guint32 out_bytes);
void (*ppp_failed) (NMModem *self, NMDeviceStateReason reason);
@@ -108,6 +139,12 @@ typedef struct {
void (*auth_requested) (NMModem *self);
void (*auth_result) (NMModem *self, GError *error);
+
+ void (*state_changed) (NMModem *self,
+ NMModemState new_state,
+ NMModemState old_state);
+
+ void (*removed) (NMModem *self);
} NMModemClass;
GType nm_modem_get_type (void);
@@ -116,14 +153,15 @@ const char *nm_modem_get_path (NMModem *modem);
const char *nm_modem_get_uid (NMModem *modem);
const char *nm_modem_get_control_port (NMModem *modem);
const char *nm_modem_get_data_port (NMModem *modem);
+const char *nm_modem_get_driver (NMModem *modem);
-NMConnection *nm_modem_get_best_auto_connection (NMModem *self,
- GSList *connections,
- char **specific_object);
+gboolean nm_modem_owns_port (NMModem *modem, const char *iface);
-gboolean nm_modem_check_connection_compatible (NMModem *self,
- NMConnection *connection,
- GError **error);
+void nm_modem_get_capabilities (NMModem *self,
+ NMDeviceModemCapabilities *modem_caps,
+ NMDeviceModemCapabilities *current_caps);
+
+gboolean nm_modem_check_connection_compatible (NMModem *self, NMConnection *connection);
gboolean nm_modem_complete_connection (NMModem *self,
NMConnection *connection,
@@ -162,11 +200,17 @@ void nm_modem_device_state_changed (NMModem *modem,
NMDeviceState old_state,
NMDeviceStateReason reason);
-gboolean nm_modem_get_mm_enabled (NMModem *self);
-
void nm_modem_set_mm_enabled (NMModem *self, gboolean enabled);
-gboolean nm_modem_get_mm_connected (NMModem *self);
+NMModemState nm_modem_get_state (NMModem *self);
+void nm_modem_set_state (NMModem *self,
+ NMModemState new_state,
+ const char *reason);
+void nm_modem_set_prev_state (NMModem *self, const char *reason);
+const char * nm_modem_state_to_string (NMModemState state);
+
+/* For the modem-manager only */
+void nm_modem_emit_removed (NMModem *self);
G_END_DECLS
diff --git a/src/devices/wwan/nm-wwan-factory.c b/src/devices/wwan/nm-wwan-factory.c
new file mode 100644
index 000000000..b1e2307e6
--- /dev/null
+++ b/src/devices/wwan/nm-wwan-factory.c
@@ -0,0 +1,136 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <gmodule.h>
+
+#include "config.h"
+#include "nm-device-factory.h"
+#include "nm-wwan-factory.h"
+#include "nm-modem-manager.h"
+#include "nm-device-modem.h"
+#include "nm-logging.h"
+
+static GType nm_wwan_factory_get_type (void);
+
+static void device_factory_interface_init (NMDeviceFactory *factory_iface);
+
+G_DEFINE_TYPE_EXTENDED (NMWwanFactory, nm_wwan_factory, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
+
+#define NM_WWAN_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WWAN_FACTORY, NMWwanFactoryPrivate))
+
+typedef struct {
+ NMModemManager *mm;
+} NMWwanFactoryPrivate;
+
+/************************************************************************/
+
+#define PLUGIN_TYPE NM_DEVICE_TYPE_MODEM
+
+G_MODULE_EXPORT NMDeviceFactory *
+nm_device_factory_create (GError **error)
+{
+ return (NMDeviceFactory *) g_object_new (NM_TYPE_WWAN_FACTORY, NULL);
+}
+
+G_MODULE_EXPORT NMDeviceType
+nm_device_factory_get_device_type (void)
+{
+ return PLUGIN_TYPE;
+}
+
+/************************************************************************/
+
+static void
+modem_added_cb (NMModemManager *manager,
+ NMModem *modem,
+ gpointer user_data)
+{
+ NMWwanFactory *self = NM_WWAN_FACTORY (user_data);
+ NMDevice *device;
+ const char *driver, *port;
+
+ /* Do nothing if the modem was consumed by some other plugin */
+ if (nm_device_factory_emit_component_added (NM_DEVICE_FACTORY (self), G_OBJECT (modem)))
+ return;
+
+ driver = nm_modem_get_driver (modem);
+
+ /* If it was a Bluetooth modem and no bluetooth device claimed it, ignore
+ * it. The rfcomm port (and thus the modem) gets created automatically
+ * by the Bluetooth code during the connection process.
+ */
+ if (driver && strstr (driver, "bluetooth")) {
+ port = nm_modem_get_data_port (modem);
+ if (!port)
+ port = nm_modem_get_control_port (modem);
+ nm_log_info (LOGD_MB, "ignoring modem '%s' (no associated Bluetooth device)", port);
+ return;
+ }
+
+ /* Make the new modem device */
+ device = nm_device_modem_new (modem);
+ g_assert (device);
+ g_signal_emit_by_name (self, NM_DEVICE_FACTORY_DEVICE_ADDED, device);
+ g_object_unref (device);
+}
+
+static void
+nm_wwan_factory_init (NMWwanFactory *self)
+{
+ NMWwanFactoryPrivate *priv = NM_WWAN_FACTORY_GET_PRIVATE (self);
+
+ priv->mm = g_object_new (NM_TYPE_MODEM_MANAGER, NULL);
+ g_assert (priv->mm);
+ g_signal_connect (priv->mm,
+ NM_MODEM_MANAGER_MODEM_ADDED,
+ G_CALLBACK (modem_added_cb),
+ self);
+}
+
+static void
+device_factory_interface_init (NMDeviceFactory *factory_iface)
+{
+}
+
+static void
+dispose (GObject *object)
+{
+ NMWwanFactory *self = NM_WWAN_FACTORY (object);
+ NMWwanFactoryPrivate *priv = NM_WWAN_FACTORY_GET_PRIVATE (self);
+
+ if (priv->mm)
+ g_signal_handlers_disconnect_by_func (priv->mm, modem_added_cb, self);
+ g_clear_object (&priv->mm);
+
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (nm_wwan_factory_parent_class)->dispose (object);
+}
+
+static void
+nm_wwan_factory_class_init (NMWwanFactoryClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMWwanFactoryPrivate));
+
+ object_class->dispose = dispose;
+}
diff --git a/src/nm-netlink-compat.h b/src/devices/wwan/nm-wwan-factory.h
index a844e9f28..b7aee01f1 100644
--- a/src/nm-netlink-compat.h
+++ b/src/devices/wwan/nm-wwan-factory.h
@@ -15,20 +15,23 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Caixa Magica Software.
- * Copyright (C) 2011 - 2012 Red Hat, Inc.
+ * Copyright (C) 2014 Red Hat, Inc.
*/
-#ifndef NM_NETLINK_COMPAT_H
-#define NM_NETLINK_COMPAT_H
+#ifndef NM_WWAN_FACTORY_H
+#define NM_WWAN_FACTORY_H
-#include <netlink/route/route.h>
+#include <glib-object.h>
-/* libnl-1 API compatibility for libnl-3 */
-int rtnl_route_get_oif(struct rtnl_route *);
-int rtnl_route_set_oif(struct rtnl_route *, int);
-int rtnl_route_set_gateway(struct rtnl_route *, struct nl_addr *);
-int rtnl_route_get_dst_len(struct rtnl_route *);
-struct nl_addr * rtnl_route_get_gateway(struct rtnl_route *);
+#define NM_TYPE_WWAN_FACTORY (nm_wwan_factory_get_type ())
+#define NM_WWAN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WWAN_FACTORY, NMWwanFactory))
-#endif /* NM_NETLINK_COMPAT_H */
+typedef struct {
+ GObject parent;
+} NMWwanFactory;
+
+typedef struct {
+ GObjectClass parent;
+} NMWwanFactoryClass;
+
+#endif /* NM_WWAN_FACTORY_H */
diff --git a/src/devices/wwan/wwan-exports.ver b/src/devices/wwan/wwan-exports.ver
new file mode 100644
index 000000000..dc505d176
--- /dev/null
+++ b/src/devices/wwan/wwan-exports.ver
@@ -0,0 +1,28 @@
+{
+global:
+ nm_modem_act_stage1_prepare;
+ nm_modem_act_stage2_config;
+ nm_modem_check_connection_compatible;
+ nm_modem_complete_connection;
+ nm_modem_deactivate;
+ nm_modem_device_state_changed;
+ nm_modem_error_quark;
+ nm_modem_get_capabilities;
+ nm_modem_get_control_port;
+ nm_modem_get_data_port;
+ nm_modem_get_driver;
+ nm_modem_get_path;
+ nm_modem_get_secrets;
+ nm_modem_get_state;
+ nm_modem_get_type;
+ nm_modem_get_uid;
+ nm_modem_ip4_pre_commit;
+ nm_modem_manager_get_type;
+ nm_modem_owns_port;
+ nm_modem_set_mm_enabled;
+ nm_modem_stage3_ip4_config_start;
+ nm_modem_stage3_ip6_config_start;
+ nm_modem_state_to_string;
+local:
+ *;
+};
diff --git a/src/dhcp-manager/Makefile.am b/src/dhcp-manager/Makefile.am
index f32a21678..63eac9d56 100644
--- a/src/dhcp-manager/Makefile.am
+++ b/src/dhcp-manager/Makefile.am
@@ -1,71 +1,23 @@
-SUBDIRS = . tests
+libexec_PROGRAMS = nm-dhcp-helper
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -DRUNDIR=\"$(rundir)\"
+nm_dhcp_helper_SOURCES = nm-dhcp-helper.c
-noinst_LTLIBRARIES = libdhcp-manager.la libdhcp-dhclient.la
-
-################## dhclient ##################
-
-libdhcp_dhclient_la_SOURCES = \
- nm-dhcp-dhclient-utils.h \
- nm-dhcp-dhclient-utils.c \
- nm-dhcp-dhclient.h \
- nm-dhcp-dhclient.c
-
-libdhcp_dhclient_la_CPPFLAGS = \
+nm_dhcp_helper_CPPFLAGS = \
$(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DLOCALSTATEDIR=\"$(localstatedir)\" \
- -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
- -DNMSTATEDIR=\"$(nmstatedir)\" \
- -DNMCONFDIR=\"$(nmconfdir)\"
+ -DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DNMRUNDIR=\"$(nmrundir)\"
-libdhcp_dhclient_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
+nm_dhcp_helper_LDADD = $(DBUS_LIBS)
-################## main lib ##################
-libdhcp_manager_la_SOURCES = \
- nm-dhcp-client.c \
- nm-dhcp-client.h \
- nm-dhcp-manager.c \
- nm-dhcp-manager.h \
- nm-dhcp-dhcpcd.h \
- nm-dhcp-dhcpcd.c
+# FIXME: remove when dbus-glib >= 0.100 is required
+dhcp_helper_conf = nm-dhcp-helper.conf
-libdhcp_manager_la_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DLOCALSTATEDIR=\"$(localstatedir)\" \
- -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
- -DDHCPCD_PATH=\"$(DHCPCD_PATH)\" \
- -DNMSTATEDIR=\"$(nmstatedir)\"
+if !HAVE_DBUS_GLIB_100
+dbusservicedir = $(DBUS_SYS_DIR)
+dbusservice_DATA = $(dhcp_helper_conf)
+endif
-libdhcp_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(builddir)/libdhcp-dhclient.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
+EXTRA_DIST = $(dhcp_helper_conf)
diff --git a/src/dhcp-manager/Makefile.in b/src/dhcp-manager/Makefile.in
index db4b0c91f..5495b12fd 100644
--- a/src/dhcp-manager/Makefile.in
+++ b/src/dhcp-manager/Makefile.in
@@ -14,6 +14,7 @@
@SET_MAKE@
+
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
@@ -78,11 +79,13 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
+libexec_PROGRAMS = nm-dhcp-helper$(EXEEXT)
subdir = src/dhcp-manager
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,30 +103,17 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(libexecdir)" \
+ "$(DESTDIR)$(dbusservicedir)"
+PROGRAMS = $(libexec_PROGRAMS)
+am_nm_dhcp_helper_OBJECTS = nm_dhcp_helper-nm-dhcp-helper.$(OBJEXT)
+nm_dhcp_helper_OBJECTS = $(am_nm_dhcp_helper_OBJECTS)
am__DEPENDENCIES_1 =
-libdhcp_dhclient_la_DEPENDENCIES = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_libdhcp_dhclient_la_OBJECTS = \
- libdhcp_dhclient_la-nm-dhcp-dhclient-utils.lo \
- libdhcp_dhclient_la-nm-dhcp-dhclient.lo
-libdhcp_dhclient_la_OBJECTS = $(am_libdhcp_dhclient_la_OBJECTS)
+nm_dhcp_helper_DEPENDENCIES = $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-libdhcp_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(builddir)/libdhcp-dhclient.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_libdhcp_manager_la_OBJECTS = libdhcp_manager_la-nm-dhcp-client.lo \
- libdhcp_manager_la-nm-dhcp-manager.lo \
- libdhcp_manager_la-nm-dhcp-dhcpcd.lo
-libdhcp_manager_la_OBJECTS = $(am_libdhcp_manager_la_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -158,30 +148,41 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libdhcp_dhclient_la_SOURCES) $(libdhcp_manager_la_SOURCES)
-DIST_SOURCES = $(libdhcp_dhclient_la_SOURCES) \
- $(libdhcp_manager_la_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
- ctags-recursive dvi-recursive html-recursive info-recursive \
- install-data-recursive install-dvi-recursive \
- install-exec-recursive install-html-recursive \
- install-info-recursive install-pdf-recursive \
- install-ps-recursive install-recursive installcheck-recursive \
- installdirs-recursive pdf-recursive ps-recursive \
- tags-recursive uninstall-recursive
+SOURCES = $(nm_dhcp_helper_SOURCES)
+DIST_SOURCES = $(nm_dhcp_helper_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
- distclean-recursive maintainer-clean-recursive
-am__recursive_targets = \
- $(RECURSIVE_TARGETS) \
- $(RECURSIVE_CLEAN_TARGETS) \
- $(am__extra_recursive_targets)
-AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
- distdir
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+DATA = $(dbusservice_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -201,33 +202,7 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
@@ -253,12 +228,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -283,7 +261,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -328,12 +305,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -350,6 +331,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -377,11 +360,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -396,6 +384,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -458,6 +447,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -468,76 +458,22 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-SUBDIRS = . tests
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -DRUNDIR=\"$(rundir)\"
-
-noinst_LTLIBRARIES = libdhcp-manager.la libdhcp-dhclient.la
-
-################## dhclient ##################
-libdhcp_dhclient_la_SOURCES = \
- nm-dhcp-dhclient-utils.h \
- nm-dhcp-dhclient-utils.c \
- nm-dhcp-dhclient.h \
- nm-dhcp-dhclient.c
-
-libdhcp_dhclient_la_CPPFLAGS = \
+with_valgrind = @with_valgrind@
+nm_dhcp_helper_SOURCES = nm-dhcp-helper.c
+nm_dhcp_helper_CPPFLAGS = \
$(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DLOCALSTATEDIR=\"$(localstatedir)\" \
- -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
- -DNMSTATEDIR=\"$(nmstatedir)\" \
- -DNMCONFDIR=\"$(nmconfdir)\"
-
-libdhcp_dhclient_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-
-################## main lib ##################
-libdhcp_manager_la_SOURCES = \
- nm-dhcp-client.c \
- nm-dhcp-client.h \
- nm-dhcp-manager.c \
- nm-dhcp-manager.h \
- nm-dhcp-dhcpcd.h \
- nm-dhcp-dhcpcd.c
-
-libdhcp_manager_la_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(AM_CPPFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DLOCALSTATEDIR=\"$(localstatedir)\" \
- -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
- -DDHCPCD_PATH=\"$(DHCPCD_PATH)\" \
- -DNMSTATEDIR=\"$(nmstatedir)\"
-
-libdhcp_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(builddir)/libdhcp-dhclient.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-all: all-recursive
+ -DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DNMRUNDIR=\"$(nmrundir)\"
+
+nm_dhcp_helper_LDADD = $(DBUS_LIBS)
+
+# FIXME: remove when dbus-glib >= 0.100 is required
+dhcp_helper_conf = nm-dhcp-helper.conf
+@HAVE_DBUS_GLIB_100_FALSE@dbusservicedir = $(DBUS_SYS_DIR)
+@HAVE_DBUS_GLIB_100_FALSE@dbusservice_DATA = $(dhcp_helper_conf)
+EXTRA_DIST = $(dhcp_helper_conf)
+all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -571,23 +507,59 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-libdhcp-dhclient.la: $(libdhcp_dhclient_la_OBJECTS) $(libdhcp_dhclient_la_DEPENDENCIES) $(EXTRA_libdhcp_dhclient_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libdhcp_dhclient_la_OBJECTS) $(libdhcp_dhclient_la_LIBADD) $(LIBS)
-
-libdhcp-manager.la: $(libdhcp_manager_la_OBJECTS) $(libdhcp_manager_la_DEPENDENCIES) $(EXTRA_libdhcp_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libdhcp_manager_la_OBJECTS) $(libdhcp_manager_la_LIBADD) $(LIBS)
+install-libexecPROGRAMS: $(libexec_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-libexecPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
+
+clean-libexecPROGRAMS:
+ @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+nm-dhcp-helper$(EXEEXT): $(nm_dhcp_helper_OBJECTS) $(nm_dhcp_helper_DEPENDENCIES) $(EXTRA_nm_dhcp_helper_DEPENDENCIES)
+ @rm -f nm-dhcp-helper$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(nm_dhcp_helper_OBJECTS) $(nm_dhcp_helper_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -595,11 +567,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient-utils.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdhcp_manager_la-nm-dhcp-client.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdhcp_manager_la-nm-dhcp-dhcpcd.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdhcp_manager_la-nm-dhcp-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm_dhcp_helper-nm-dhcp-helper.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -622,102 +590,55 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libdhcp_dhclient_la-nm-dhcp-dhclient-utils.lo: nm-dhcp-dhclient-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_dhclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdhcp_dhclient_la-nm-dhcp-dhclient-utils.lo -MD -MP -MF $(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient-utils.Tpo -c -o libdhcp_dhclient_la-nm-dhcp-dhclient-utils.lo `test -f 'nm-dhcp-dhclient-utils.c' || echo '$(srcdir)/'`nm-dhcp-dhclient-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient-utils.Tpo $(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-dhclient-utils.c' object='libdhcp_dhclient_la-nm-dhcp-dhclient-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_dhclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdhcp_dhclient_la-nm-dhcp-dhclient-utils.lo `test -f 'nm-dhcp-dhclient-utils.c' || echo '$(srcdir)/'`nm-dhcp-dhclient-utils.c
-
-libdhcp_dhclient_la-nm-dhcp-dhclient.lo: nm-dhcp-dhclient.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_dhclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdhcp_dhclient_la-nm-dhcp-dhclient.lo -MD -MP -MF $(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient.Tpo -c -o libdhcp_dhclient_la-nm-dhcp-dhclient.lo `test -f 'nm-dhcp-dhclient.c' || echo '$(srcdir)/'`nm-dhcp-dhclient.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient.Tpo $(DEPDIR)/libdhcp_dhclient_la-nm-dhcp-dhclient.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-dhclient.c' object='libdhcp_dhclient_la-nm-dhcp-dhclient.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_dhclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdhcp_dhclient_la-nm-dhcp-dhclient.lo `test -f 'nm-dhcp-dhclient.c' || echo '$(srcdir)/'`nm-dhcp-dhclient.c
-
-libdhcp_manager_la-nm-dhcp-client.lo: nm-dhcp-client.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdhcp_manager_la-nm-dhcp-client.lo -MD -MP -MF $(DEPDIR)/libdhcp_manager_la-nm-dhcp-client.Tpo -c -o libdhcp_manager_la-nm-dhcp-client.lo `test -f 'nm-dhcp-client.c' || echo '$(srcdir)/'`nm-dhcp-client.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdhcp_manager_la-nm-dhcp-client.Tpo $(DEPDIR)/libdhcp_manager_la-nm-dhcp-client.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-client.c' object='libdhcp_manager_la-nm-dhcp-client.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdhcp_manager_la-nm-dhcp-client.lo `test -f 'nm-dhcp-client.c' || echo '$(srcdir)/'`nm-dhcp-client.c
-
-libdhcp_manager_la-nm-dhcp-manager.lo: nm-dhcp-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdhcp_manager_la-nm-dhcp-manager.lo -MD -MP -MF $(DEPDIR)/libdhcp_manager_la-nm-dhcp-manager.Tpo -c -o libdhcp_manager_la-nm-dhcp-manager.lo `test -f 'nm-dhcp-manager.c' || echo '$(srcdir)/'`nm-dhcp-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdhcp_manager_la-nm-dhcp-manager.Tpo $(DEPDIR)/libdhcp_manager_la-nm-dhcp-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-manager.c' object='libdhcp_manager_la-nm-dhcp-manager.lo' libtool=yes @AMDEPBACKSLASH@
+nm_dhcp_helper-nm-dhcp-helper.o: nm-dhcp-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_helper_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dhcp_helper-nm-dhcp-helper.o -MD -MP -MF $(DEPDIR)/nm_dhcp_helper-nm-dhcp-helper.Tpo -c -o nm_dhcp_helper-nm-dhcp-helper.o `test -f 'nm-dhcp-helper.c' || echo '$(srcdir)/'`nm-dhcp-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dhcp_helper-nm-dhcp-helper.Tpo $(DEPDIR)/nm_dhcp_helper-nm-dhcp-helper.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-helper.c' object='nm_dhcp_helper-nm-dhcp-helper.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdhcp_manager_la-nm-dhcp-manager.lo `test -f 'nm-dhcp-manager.c' || echo '$(srcdir)/'`nm-dhcp-manager.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_helper_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dhcp_helper-nm-dhcp-helper.o `test -f 'nm-dhcp-helper.c' || echo '$(srcdir)/'`nm-dhcp-helper.c
-libdhcp_manager_la-nm-dhcp-dhcpcd.lo: nm-dhcp-dhcpcd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdhcp_manager_la-nm-dhcp-dhcpcd.lo -MD -MP -MF $(DEPDIR)/libdhcp_manager_la-nm-dhcp-dhcpcd.Tpo -c -o libdhcp_manager_la-nm-dhcp-dhcpcd.lo `test -f 'nm-dhcp-dhcpcd.c' || echo '$(srcdir)/'`nm-dhcp-dhcpcd.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdhcp_manager_la-nm-dhcp-dhcpcd.Tpo $(DEPDIR)/libdhcp_manager_la-nm-dhcp-dhcpcd.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-dhcpcd.c' object='libdhcp_manager_la-nm-dhcp-dhcpcd.lo' libtool=yes @AMDEPBACKSLASH@
+nm_dhcp_helper-nm-dhcp-helper.obj: nm-dhcp-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_helper_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_dhcp_helper-nm-dhcp-helper.obj -MD -MP -MF $(DEPDIR)/nm_dhcp_helper-nm-dhcp-helper.Tpo -c -o nm_dhcp_helper-nm-dhcp-helper.obj `if test -f 'nm-dhcp-helper.c'; then $(CYGPATH_W) 'nm-dhcp-helper.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp-helper.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_dhcp_helper-nm-dhcp-helper.Tpo $(DEPDIR)/nm_dhcp_helper-nm-dhcp-helper.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp-helper.c' object='nm_dhcp_helper-nm-dhcp-helper.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdhcp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdhcp_manager_la-nm-dhcp-dhcpcd.lo `test -f 'nm-dhcp-dhcpcd.c' || echo '$(srcdir)/'`nm-dhcp-dhcpcd.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_dhcp_helper_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_dhcp_helper-nm-dhcp-helper.obj `if test -f 'nm-dhcp-helper.c'; then $(CYGPATH_W) 'nm-dhcp-helper.c'; else $(CYGPATH_W) '$(srcdir)/nm-dhcp-helper.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-# (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(am__recursive_targets):
- @fail=; \
- if $(am__make_keepgoing); then \
- failcom='fail=yes'; \
- else \
- failcom='exit 1'; \
+install-dbusserviceDATA: $(dbusservice_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dbusservice_DATA)'; test -n "$(dbusservicedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dbusservicedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dbusservicedir)" || exit 1; \
fi; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbusservicedir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbusservicedir)" || exit $$?; \
+ done
+
+uninstall-dbusserviceDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dbusservice_DATA)'; test -n "$(dbusservicedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(dbusservicedir)'; $(am__uninstall_files_from_dir)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-recursive
+tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
@@ -730,7 +651,7 @@ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$$unique; \
fi; \
fi
-ctags: ctags-recursive
+ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
@@ -743,7 +664,7 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-recursive
+cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
@@ -792,45 +713,22 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- $(am__make_dryrun) \
- || test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
check-am: all-am
-check: check-recursive
-all-am: Makefile $(LTLIBRARIES)
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+check: check-am
+all-am: Makefile $(PROGRAMS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(dbusservicedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-recursive
+installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -852,93 +750,94 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
+clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \
mostlyclean-am
-distclean: distclean-recursive
+distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
-dvi: dvi-recursive
+dvi: dvi-am
dvi-am:
-html: html-recursive
+html: html-am
html-am:
-info: info-recursive
+info: info-am
info-am:
-install-data-am:
+install-data-am: install-dbusserviceDATA
-install-dvi: install-dvi-recursive
+install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am:
+install-exec-am: install-libexecPROGRAMS
-install-html: install-html-recursive
+install-html: install-html-am
install-html-am:
-install-info: install-info-recursive
+install-info: install-info-am
install-info-am:
install-man:
-install-pdf: install-pdf-recursive
+install-pdf: install-pdf-am
install-pdf-am:
-install-ps: install-ps-recursive
+install-ps: install-ps-am
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-recursive
+maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-recursive
+mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
-pdf: pdf-recursive
+pdf: pdf-am
pdf-am:
-ps: ps-recursive
+ps: ps-am
ps-am:
-uninstall-am:
+uninstall-am: uninstall-dbusserviceDATA uninstall-libexecPROGRAMS
-.MAKE: $(am__recursive_targets) install-am install-strip
+.MAKE: install-am install-strip
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am clean clean-generic clean-libtool \
- clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
- distclean-compile distclean-generic distclean-libtool \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+ clean-libexecPROGRAMS clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dbusserviceDATA install-dvi \
install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- installdirs-am maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
- uninstall-am
+ install-html-am install-info install-info-am \
+ install-libexecPROGRAMS install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-dbusserviceDATA \
+ uninstall-libexecPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index 980fcab87..03c11c74d 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -28,6 +28,7 @@
#include <stdlib.h>
#include <uuid/uuid.h>
+#include "NetworkManagerUtils.h"
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-dbus-glib-types.h"
@@ -38,6 +39,7 @@ typedef struct {
GByteArray * hwaddr;
gboolean ipv6;
char * uuid;
+ guint priority;
guint32 timeout;
GByteArray * duid;
@@ -57,9 +59,9 @@ typedef struct {
G_DEFINE_TYPE_EXTENDED (NMDHCPClient, nm_dhcp_client, G_TYPE_OBJECT, G_TYPE_FLAG_ABSTRACT, {})
enum {
- STATE_CHANGED,
- TIMEOUT,
- REMOVE,
+ SIGNAL_STATE_CHANGED,
+ SIGNAL_TIMEOUT,
+ SIGNAL_REMOVE,
LAST_SIGNAL
};
@@ -71,6 +73,7 @@ enum {
PROP_HWADDR,
PROP_IPV6,
PROP_UUID,
+ PROP_PRIORITY,
PROP_TIMEOUT,
LAST_PROP
};
@@ -80,7 +83,6 @@ enum {
GPid
nm_dhcp_client_get_pid (NMDHCPClient *self)
{
- g_return_val_if_fail (self != NULL, -1);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), -1);
return NM_DHCP_CLIENT_GET_PRIVATE (self)->pid;
@@ -89,7 +91,6 @@ nm_dhcp_client_get_pid (NMDHCPClient *self)
const char *
nm_dhcp_client_get_iface (NMDHCPClient *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
return NM_DHCP_CLIENT_GET_PRIVATE (self)->iface;
@@ -98,7 +99,6 @@ nm_dhcp_client_get_iface (NMDHCPClient *self)
gboolean
nm_dhcp_client_get_ipv6 (NMDHCPClient *self)
{
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
return NM_DHCP_CLIENT_GET_PRIVATE (self)->ipv6;
@@ -107,7 +107,6 @@ nm_dhcp_client_get_ipv6 (NMDHCPClient *self)
const char *
nm_dhcp_client_get_uuid (NMDHCPClient *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
return NM_DHCP_CLIENT_GET_PRIVATE (self)->uuid;
@@ -138,9 +137,9 @@ watch_cleanup (NMDHCPClient *self)
}
void
-nm_dhcp_client_stop_pid (GPid pid, const char *iface, guint timeout_secs)
+nm_dhcp_client_stop_pid (GPid pid, const char *iface)
{
- int i = (timeout_secs ? timeout_secs : 3) * 5; /* default 3 seconds */
+ int i = 5; /* roughly 0.5 seconds */
g_return_if_fail (pid > 0);
@@ -167,7 +166,7 @@ nm_dhcp_client_stop_pid (GPid pid, const char *iface, guint timeout_secs)
break;
}
}
- g_usleep (G_USEC_PER_SEC / 5);
+ g_usleep (G_USEC_PER_SEC / 10);
}
if (i <= 0) {
@@ -188,7 +187,6 @@ stop (NMDHCPClient *self, gboolean release, const GByteArray *duid)
{
NMDHCPClientPrivate *priv;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_DHCP_CLIENT (self));
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
@@ -197,7 +195,7 @@ stop (NMDHCPClient *self, gboolean release, const GByteArray *duid)
/* Clean up the watch handler since we're explicitly killing the daemon */
watch_cleanup (self);
- nm_dhcp_client_stop_pid (priv->pid, priv->iface, 0);
+ nm_dhcp_client_stop_pid (priv->pid, priv->iface);
priv->info_only = FALSE;
}
@@ -213,7 +211,7 @@ daemon_timeout (gpointer user_data)
} else {
nm_log_warn (LOGD_DHCP4, "(%s): DHCPv4 request timed out.", priv->iface);
}
- g_signal_emit (G_OBJECT (self), signals[TIMEOUT], 0);
+ g_signal_emit (G_OBJECT (self), signals[SIGNAL_TIMEOUT], 0);
return FALSE;
}
@@ -223,7 +221,7 @@ signal_remove (gpointer user_data)
NMDHCPClient *self = NM_DHCP_CLIENT (user_data);
NM_DHCP_CLIENT_GET_PRIVATE (self)->remove_id = 0;
- g_signal_emit (G_OBJECT (self), signals[REMOVE], 0);
+ g_signal_emit (G_OBJECT (self), signals[SIGNAL_REMOVE], 0);
return FALSE;
}
@@ -238,12 +236,12 @@ dhcp_client_set_state (NMDHCPClient *self,
priv->state = state;
if (emit_state)
- g_signal_emit (G_OBJECT (self), signals[STATE_CHANGED], 0, priv->state);
+ g_signal_emit (G_OBJECT (self), signals[SIGNAL_STATE_CHANGED], 0, priv->state);
if (state == DHC_END || state == DHC_ABEND) {
/* Start the remove signal timer */
if (remove_now) {
- g_signal_emit (G_OBJECT (self), signals[REMOVE], 0);
+ g_signal_emit (G_OBJECT (self), signals[SIGNAL_REMOVE], 0);
} else {
if (!priv->remove_id)
priv->remove_id = g_timeout_add_seconds (5, signal_remove, self);
@@ -299,13 +297,12 @@ start_monitor (NMDHCPClient *self)
gboolean
nm_dhcp_client_start_ip4 (NMDHCPClient *self,
- NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
NMDHCPClientPrivate *priv;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
@@ -316,7 +313,7 @@ nm_dhcp_client_start_ip4 (NMDHCPClient *self,
nm_log_info (LOGD_DHCP, "Activation (%s) Beginning DHCPv4 transaction (timeout in %d seconds)",
priv->iface, priv->timeout);
- priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip4_start (self, s_ip4, dhcp_anycast_addr, hostname);
+ priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip4_start (self, dhcp_client_id, dhcp_anycast_addr, hostname);
if (priv->pid)
start_monitor (self);
@@ -334,7 +331,7 @@ machine_id_parse (const char *in, uuid_t uu)
g_return_val_if_fail (in != NULL, FALSE);
g_return_val_if_fail (strlen (in) == 32, FALSE);
- for (i = 0; i < 32; i++, cp++) {
+ for (i = 0; i < 32; i++) {
if (!g_ascii_isxdigit (in[i]))
return FALSE;
}
@@ -437,7 +434,7 @@ get_duid (NMDHCPClient *self)
duid = generate_duid_from_machine_id ();
g_assert (duid);
- if (nm_logging_level_enabled (LOGL_DEBUG)) {
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_DHCP6)) {
escaped = escape_duid (duid);
nm_log_dbg (LOGD_DHCP6, "Generated DUID %s", escaped);
g_free (escaped);
@@ -454,15 +451,13 @@ get_duid (NMDHCPClient *self)
gboolean
nm_dhcp_client_start_ip6 (NMDHCPClient *self,
- NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only)
{
NMDHCPClientPrivate *priv;
char *escaped;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
@@ -476,7 +471,7 @@ nm_dhcp_client_start_ip6 (NMDHCPClient *self,
if (!priv->duid)
priv->duid = NM_DHCP_CLIENT_GET_CLASS (self)->get_duid (self);
- if (nm_logging_level_enabled (LOGL_DEBUG)) {
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_DHCP)) {
escaped = escape_duid (priv->duid);
nm_log_dbg (LOGD_DHCP, "(%s): DHCPv6 DUID is '%s'", priv->iface, escaped);
g_free (escaped);
@@ -488,7 +483,6 @@ nm_dhcp_client_start_ip6 (NMDHCPClient *self,
priv->iface, priv->timeout);
priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip6_start (self,
- s_ip6,
dhcp_anycast_addr,
hostname,
info_only,
@@ -524,11 +518,13 @@ nm_dhcp_client_stop_existing (const char *pid_file, const char *binary_name)
exe = proc_contents;
if (!strcmp (exe, binary_name))
- nm_dhcp_client_stop_pid ((GPid) tmp, NULL, 0);
+ nm_dhcp_client_stop_pid ((GPid) tmp, NULL);
}
}
- remove (pid_file);
+ if (remove (pid_file) == -1)
+ nm_log_dbg (LOGD_DHCP, "Could not remove dhcp pid file \"%s\": %d (%s)", pid_file, errno, g_strerror (errno));
+
g_free (proc_path);
g_free (pid_contents);
g_free (proc_contents);
@@ -539,7 +535,6 @@ nm_dhcp_client_stop (NMDHCPClient *self, gboolean release)
{
NMDHCPClientPrivate *priv;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_DHCP_CLIENT (self));
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
@@ -582,63 +577,54 @@ state_is_bound (guint32 state)
return FALSE;
}
-typedef struct {
- NMDHCPState state;
- const char *name;
-} DhcState;
-
-#define STATE_TABLE_SIZE (sizeof (state_table) / sizeof (state_table[0]))
-
-static DhcState state_table[] = {
- { DHC_NBI, "nbi" },
- { DHC_PREINIT, "preinit" },
- { DHC_PREINIT6,"preinit6" },
- { DHC_BOUND4, "bound" },
- { DHC_BOUND6, "bound6" },
- { DHC_IPV4LL, "ipv4ll" },
- { DHC_RENEW4, "renew" },
- { DHC_RENEW6, "renew6" },
- { DHC_REBOOT, "reboot" },
- { DHC_REBIND4, "rebind" },
- { DHC_REBIND6, "rebind6" },
- { DHC_STOP, "stop" },
- { DHC_STOP6, "stop6" },
- { DHC_MEDIUM, "medium" },
- { DHC_TIMEOUT, "timeout" },
- { DHC_FAIL, "fail" },
- { DHC_EXPIRE, "expire" },
- { DHC_EXPIRE6, "expire6" },
- { DHC_RELEASE, "release" },
- { DHC_RELEASE6,"release6" },
- { DHC_START, "start" },
- { DHC_ABEND, "abend" },
- { DHC_END, "end" },
- { DHC_DEPREF6, "depref6" },
+static const char *state_table[] = {
+ [DHC_NBI] = "nbi",
+ [DHC_PREINIT] = "preinit",
+ [DHC_PREINIT6] = "preinit6",
+ [DHC_BOUND4] = "bound",
+ [DHC_BOUND6] = "bound6",
+ [DHC_IPV4LL] = "ipv4ll",
+ [DHC_RENEW4] = "renew",
+ [DHC_RENEW6] = "renew6",
+ [DHC_REBOOT] = "reboot",
+ [DHC_REBIND4] = "rebind",
+ [DHC_REBIND6] = "rebind6",
+ [DHC_DEPREF6] = "depref6",
+ [DHC_STOP] = "stop",
+ [DHC_STOP6] = "stop6",
+ [DHC_MEDIUM] = "medium",
+ [DHC_TIMEOUT] = "timeout",
+ [DHC_FAIL] = "fail",
+ [DHC_EXPIRE] = "expire",
+ [DHC_EXPIRE6] = "expire6",
+ [DHC_RELEASE] = "release",
+ [DHC_RELEASE6] = "release6",
+ [DHC_START] = "start",
+ [DHC_ABEND] = "abend",
+ [DHC_END] = "end",
};
-static inline const char *
-state_to_string (guint32 state)
+static const char *
+state_to_string (NMDHCPState state)
{
- int i;
-
- for (i = 0; i < STATE_TABLE_SIZE; i++) {
- if (state == state_table[i].state)
- return state_table[i].name;
- }
-
+ if (state >= 0 && state < G_N_ELEMENTS (state_table))
+ return state_table[state];
return NULL;
}
-static inline NMDHCPState
+static NMDHCPState
string_to_state (const char *name)
{
int i;
- for (i = 0; i < STATE_TABLE_SIZE; i++) {
- if (!strcasecmp (name, state_table[i].name))
- return state_table[i].state;
- }
+ if (name) {
+ for (i = 0; i < G_N_ELEMENTS (state_table); i++) {
+ const char *n = state_table[i];
+ if (n && !strcasecmp (name, n))
+ return i;
+ }
+ }
return 255;
}
@@ -705,7 +691,6 @@ nm_dhcp_client_new_options (NMDHCPClient *self,
guint32 old_state;
guint32 new_state;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_DHCP_CLIENT (self));
g_return_if_fail (options != NULL);
g_return_if_fail (reason != NULL);
@@ -766,7 +751,6 @@ nm_dhcp_client_foreach_option (NMDHCPClient *self,
GHashTableIter iter;
gpointer iterkey, itervalue;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
g_return_val_if_fail (func != NULL, FALSE);
@@ -813,10 +797,12 @@ nm_dhcp_client_foreach_option (NMDHCPClient *self,
/********************************************/
static gboolean
-ip4_process_dhcpcd_rfc3442_routes (const char *str,
+ip4_process_dhcpcd_rfc3442_routes (NMDHCPClient *self,
+ const char *str,
NMIP4Config *ip4_config,
guint32 *gwaddr)
{
+ NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
char **routes, **r;
gboolean have_routes = FALSE;
@@ -831,10 +817,9 @@ ip4_process_dhcpcd_rfc3442_routes (const char *str,
for (r = routes; *r; r += 2) {
char *slash;
- NMIP4Route *route;
+ NMPlatformIP4Route route;
int rt_cidr = 32;
- struct in_addr rt_addr;
- struct in_addr rt_route;
+ guint32 rt_addr, rt_route;
slash = strchr(*r, '/');
if (slash) {
@@ -856,17 +841,18 @@ ip4_process_dhcpcd_rfc3442_routes (const char *str,
}
have_routes = TRUE;
- if (rt_cidr == 0 && rt_addr.s_addr == 0) {
+ if (rt_cidr == 0 && rt_addr == 0) {
/* FIXME: how to handle multiple routers? */
- *gwaddr = rt_route.s_addr;
+ *gwaddr = rt_route;
} else {
- route = nm_ip4_route_new ();
- nm_ip4_route_set_dest (route, (guint32) rt_addr.s_addr);
- nm_ip4_route_set_prefix (route, rt_cidr);
- nm_ip4_route_set_next_hop (route, (guint32) rt_route.s_addr);
-
- nm_ip4_config_take_route (ip4_config, route);
nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s", *r, rt_cidr, *(r + 1));
+ memset (&route, 0, sizeof (route));
+ route.network = rt_addr;
+ route.plen = rt_cidr;
+ route.gateway = rt_route;
+ route.source = NM_PLATFORM_SOURCE_DHCP;
+ route.metric = priv->priority;
+ nm_ip4_config_add_route (ip4_config, &route);
}
}
@@ -876,14 +862,15 @@ out:
}
static const char **
-process_dhclient_rfc3442_route (const char **octets, NMIP4Route **out_route)
+process_dhclient_rfc3442_route (const char **octets, NMPlatformIP4Route *route, gboolean *success)
{
const char **o = octets;
int addr_len = 0, i = 0;
long int tmp;
- NMIP4Route *route;
char *next_hop;
- struct in_addr tmp_addr;
+ guint32 tmp_addr;
+
+ *success = FALSE;
if (!*o)
return o; /* no prefix */
@@ -892,8 +879,8 @@ process_dhclient_rfc3442_route (const char **octets, NMIP4Route **out_route)
if (tmp < 0 || tmp > 32) /* 32 == max IP4 prefix length */
return o;
- route = nm_ip4_route_new ();
- nm_ip4_route_set_prefix (route, (guint32) tmp);
+ memset (route, 0, sizeof (*route));
+ route->plen = tmp;
o++;
if (tmp > 0)
@@ -915,8 +902,8 @@ process_dhclient_rfc3442_route (const char **octets, NMIP4Route **out_route)
g_free (str_addr);
goto error;
}
- tmp_addr.s_addr &= nm_utils_ip4_prefix_to_netmask ((guint32) tmp);
- nm_ip4_route_set_dest (route, tmp_addr.s_addr);
+ tmp_addr &= nm_utils_ip4_prefix_to_netmask ((guint32) tmp);
+ route->network = tmp_addr;
}
/* Handle next hop */
@@ -925,25 +912,27 @@ process_dhclient_rfc3442_route (const char **octets, NMIP4Route **out_route)
g_free (next_hop);
goto error;
}
- nm_ip4_route_set_next_hop (route, tmp_addr.s_addr);
+ route->gateway = tmp_addr;
g_free (next_hop);
- *out_route = route;
+ *success = TRUE;
return o + 4; /* advance to past the next hop */
error:
- nm_ip4_route_unref (route);
return o;
}
static gboolean
-ip4_process_dhclient_rfc3442_routes (const char *str,
+ip4_process_dhclient_rfc3442_routes (NMDHCPClient *self,
+ const char *str,
NMIP4Config *ip4_config,
guint32 *gwaddr)
{
+ NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
char **octets, **o;
gboolean have_routes = FALSE;
- NMIP4Route *route = NULL;
+ NMPlatformIP4Route route;
+ gboolean success;
o = octets = g_strsplit_set (str, " .", 0);
if (g_strv_length (octets) < 5) {
@@ -952,32 +941,28 @@ ip4_process_dhclient_rfc3442_routes (const char *str,
}
while (*o) {
- route = NULL;
- o = (char **) process_dhclient_rfc3442_route ((const char **) o, &route);
- if (!route) {
+ memset (&route, 0, sizeof (route));
+ o = (char **) process_dhclient_rfc3442_route ((const char **) o, &route, &success);
+ if (!success) {
nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes");
break;
}
have_routes = TRUE;
- if (nm_ip4_route_get_prefix (route) == 0) {
+ if (!route.plen) {
/* gateway passed as classless static route */
- *gwaddr = nm_ip4_route_get_next_hop (route);
- nm_ip4_route_unref (route);
+ *gwaddr = route.gateway;
} else {
- char addr[INET_ADDRSTRLEN + 1];
- char nh[INET_ADDRSTRLEN + 1];
- struct in_addr tmp;
+ char addr[INET_ADDRSTRLEN];
/* normal route */
- nm_ip4_config_take_route (ip4_config, route);
+ route.source = NM_PLATFORM_SOURCE_DHCP;
+ route.metric = priv->priority;
+ nm_ip4_config_add_route (ip4_config, &route);
- tmp.s_addr = nm_ip4_route_get_dest (route);
- inet_ntop (AF_INET, &tmp, addr, sizeof (addr));
- tmp.s_addr = nm_ip4_route_get_next_hop (route);
- inet_ntop (AF_INET, &tmp, nh, sizeof (nh));
nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s",
- addr, nm_ip4_route_get_prefix (route), nh);
+ nm_utils_inet4_ntop (route.network, addr), route.plen,
+ nm_utils_inet4_ntop (route.gateway, NULL));
}
}
@@ -987,7 +972,8 @@ out:
}
static gboolean
-ip4_process_classless_routes (GHashTable *options,
+ip4_process_classless_routes (NMDHCPClient *self,
+ GHashTable *options,
NMIP4Config *ip4_config,
guint32 *gwaddr)
{
@@ -1043,15 +1029,16 @@ ip4_process_classless_routes (GHashTable *options,
if (strchr (str, '/')) {
/* dhcpcd format */
- return ip4_process_dhcpcd_rfc3442_routes (str, ip4_config, gwaddr);
+ return ip4_process_dhcpcd_rfc3442_routes (self, str, ip4_config, gwaddr);
}
- return ip4_process_dhclient_rfc3442_routes (str, ip4_config, gwaddr);
+ return ip4_process_dhclient_rfc3442_routes (self, str, ip4_config, gwaddr);
}
static void
-process_classful_routes (GHashTable *options, NMIP4Config *ip4_config)
+process_classful_routes (NMDHCPClient *self, GHashTable *options, NMIP4Config *ip4_config)
{
+ NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
const char *str;
char **searches, **s;
@@ -1066,9 +1053,8 @@ process_classful_routes (GHashTable *options, NMIP4Config *ip4_config)
}
for (s = searches; *s; s += 2) {
- NMIP4Route *route;
- struct in_addr rt_addr;
- struct in_addr rt_route;
+ NMPlatformIP4Route route;
+ guint32 rt_addr, rt_route;
if (inet_pton (AF_INET, *s, &rt_addr) <= 0) {
nm_log_warn (LOGD_DHCP, "DHCP provided invalid static route address: '%s'", *s);
@@ -1079,15 +1065,26 @@ process_classful_routes (GHashTable *options, NMIP4Config *ip4_config)
continue;
}
- // FIXME: ensure the IP addresse and route are sane
-
- route = nm_ip4_route_new ();
- nm_ip4_route_set_dest (route, (guint32) rt_addr.s_addr);
- nm_ip4_route_set_prefix (route, 32); /* 255.255.255.255 */
- nm_ip4_route_set_next_hop (route, (guint32) rt_route.s_addr);
+ // FIXME: ensure the IP address and route are sane
+
+ memset (&route, 0, sizeof (route));
+ route.network = rt_addr;
+ /* RFC 2132, updated by RFC 3442:
+ The Static Routes option (option 33) does not provide a subnet mask
+ for each route - it is assumed that the subnet mask is implicit in
+ whatever network number is specified in each route entry */
+ route.plen = nm_utils_ip4_get_default_prefix (rt_addr);
+ if (rt_addr & ~nm_utils_ip4_prefix_to_netmask (route.plen)) {
+ /* RFC 943: target not "this network"; using host routing */
+ route.plen = 32;
+ }
+ route.gateway = rt_route;
+ route.source = NM_PLATFORM_SOURCE_DHCP;
+ route.metric = priv->priority;
- nm_ip4_config_take_route (ip4_config, route);
- nm_log_info (LOGD_DHCP, " static route %s gw %s", *s, *(s + 1));
+ nm_ip4_config_add_route (ip4_config, &route);
+ nm_log_info (LOGD_DHCP, " static route %s",
+ nm_platform_ip4_route_to_string (&route));
}
out:
@@ -1145,59 +1142,47 @@ ip4_options_to_config (NMDHCPClient *self)
{
NMDHCPClientPrivate *priv;
NMIP4Config *ip4_config = NULL;
- struct in_addr tmp_addr;
- NMIP4Address *addr = NULL;
+ guint32 tmp_addr;
+ NMPlatformIP4Address address;
char *str = NULL;
- guint32 gwaddr = 0, prefix = 0;
+ guint32 gwaddr = 0, plen = 0;
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
g_return_val_if_fail (priv->options != NULL, NULL);
ip4_config = nm_ip4_config_new ();
- if (!ip4_config) {
- nm_log_warn (LOGD_DHCP4, "(%s): couldn't allocate memory for an IP4Config!", priv->iface);
- return NULL;
- }
-
- addr = nm_ip4_address_new ();
- if (!addr) {
- nm_log_warn (LOGD_DHCP4, "(%s): couldn't allocate memory for an IP4 Address!", priv->iface);
- goto error;
- }
+ memset (&address, 0, sizeof (address));
+ address.timestamp = nm_utils_get_monotonic_timestamp_s ();
str = g_hash_table_lookup (priv->options, "new_ip_address");
if (str && (inet_pton (AF_INET, str, &tmp_addr) > 0)) {
- nm_ip4_address_set_address (addr, tmp_addr.s_addr);
+ address.address = tmp_addr;
nm_log_info (LOGD_DHCP4, " address %s", str);
} else
goto error;
str = g_hash_table_lookup (priv->options, "new_subnet_mask");
if (str && (inet_pton (AF_INET, str, &tmp_addr) > 0)) {
- prefix = nm_utils_ip4_netmask_to_prefix (tmp_addr.s_addr);
- nm_log_info (LOGD_DHCP4, " prefix %d (%s)", prefix, str);
+ plen = nm_utils_ip4_netmask_to_prefix (tmp_addr);
+ nm_log_info (LOGD_DHCP4, " plen %d (%s)", plen, str);
} else {
/* Get default netmask for the IP according to appropriate class. */
- prefix = nm_utils_ip4_get_default_prefix (nm_ip4_address_get_address (addr));
- nm_log_info (LOGD_DHCP4, " prefix %d (default)", prefix);
+ plen = nm_utils_ip4_get_default_prefix (address.address);
+ nm_log_info (LOGD_DHCP4, " plen %d (default)", plen);
}
- nm_ip4_address_set_prefix (addr, prefix);
+ address.plen = plen;
/* Routes: if the server returns classless static routes, we MUST ignore
* the 'static_routes' option.
*/
- if (!ip4_process_classless_routes (priv->options, ip4_config, &gwaddr))
- process_classful_routes (priv->options, ip4_config);
+ if (!ip4_process_classless_routes (self, priv->options, ip4_config, &gwaddr))
+ process_classful_routes (self, priv->options, ip4_config);
if (gwaddr) {
- char buf[INET_ADDRSTRLEN + 1];
-
- inet_ntop (AF_INET, &gwaddr, buf, sizeof (buf));
- nm_log_info (LOGD_DHCP4, " gateway %s", buf);
- nm_ip4_address_set_gateway (addr, gwaddr);
+ nm_log_info (LOGD_DHCP4, " gateway %s", nm_utils_inet4_ntop (gwaddr, NULL));
+ nm_ip4_config_set_gateway (ip4_config, gwaddr);
} else {
/* If the gateway wasn't provided as a classless static route with a
* subnet length of 0, try to find it using the old-style 'routers' option.
@@ -1209,8 +1194,8 @@ ip4_options_to_config (NMDHCPClient *self)
for (s = routers; *s; s++) {
/* FIXME: how to handle multiple routers? */
- if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
- nm_ip4_address_set_gateway (addr, tmp_addr.s_addr);
+ if (inet_pton (AF_INET, *s, &gwaddr) > 0) {
+ nm_ip4_config_set_gateway (ip4_config, gwaddr);
nm_log_info (LOGD_DHCP4, " gateway %s", *s);
break;
} else
@@ -1220,8 +1205,51 @@ ip4_options_to_config (NMDHCPClient *self)
}
}
- nm_ip4_config_take_address (ip4_config, addr);
- addr = NULL;
+ /*
+ * RFC 2132, section 9.7
+ * DHCP clients use the contents of the 'server identifier' field
+ * as the destination address for any DHCP messages unicast to
+ * the DHCP server.
+ *
+ * Some ISP's provide leases from central servers that are on
+ * different subnets that the address offered. If the host
+ * does not configure the interface as the default route, the
+ * dhcp server may not be reachable via unicast, and a host
+ * specific route is needed.
+ **/
+ str = g_hash_table_lookup (priv->options, "new_dhcp_server_identifier");
+ if (str) {
+ if (inet_pton (AF_INET, str, &tmp_addr) > 0) {
+ NMPlatformIP4Route route;
+ guint32 mask = nm_utils_ip4_prefix_to_netmask (address.plen);
+
+ nm_log_info (LOGD_DHCP4, " server identifier %s", str);
+ if ((tmp_addr & mask) != (address.address & mask)) {
+ /* DHCP server not on assigned subnet, route needed */
+ memset (&route, 0, sizeof (route));
+ route.network = tmp_addr;
+ route.plen = 32;
+ /* this will be a device route if gwaddr is 0 */
+ route.gateway = gwaddr;
+ route.source = NM_PLATFORM_SOURCE_DHCP;
+ route.metric = priv->priority;
+ nm_ip4_config_add_route (ip4_config, &route);
+ nm_log_dbg (LOGD_IP, "adding route for server identifier: %s",
+ nm_platform_ip4_route_to_string (&route));
+ }
+ }
+ else
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid server identifier '%s'", str);
+ }
+
+ str = g_hash_table_lookup (priv->options, "new_dhcp_lease_time");
+ if (str) {
+ address.lifetime = address.preferred = strtoul (str, NULL, 10);
+ nm_log_info (LOGD_DHCP4, " lease time %d", address.lifetime);
+ }
+
+ address.source = NM_PLATFORM_SOURCE_DHCP;
+ nm_ip4_config_add_address (ip4_config, &address);
str = g_hash_table_lookup (priv->options, "new_host_name");
if (str)
@@ -1234,7 +1262,7 @@ ip4_options_to_config (NMDHCPClient *self)
for (s = searches; *s; s++) {
if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
- nm_ip4_config_add_nameserver (ip4_config, tmp_addr.s_addr);
+ nm_ip4_config_add_nameserver (ip4_config, tmp_addr);
nm_log_info (LOGD_DHCP4, " nameserver '%s'", *s);
} else
nm_log_warn (LOGD_DHCP4, "ignoring invalid nameserver '%s'", *s);
@@ -1265,7 +1293,7 @@ ip4_options_to_config (NMDHCPClient *self)
for (s = searches; *s; s++) {
if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
- nm_ip4_config_add_wins (ip4_config, tmp_addr.s_addr);
+ nm_ip4_config_add_wins (ip4_config, tmp_addr);
nm_log_info (LOGD_DHCP4, " wins '%s'", *s);
} else
nm_log_warn (LOGD_DHCP4, "ignoring invalid WINS server '%s'", *s);
@@ -1299,7 +1327,7 @@ ip4_options_to_config (NMDHCPClient *self)
for (s = searches; *s; s++) {
if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
- nm_ip4_config_add_nis_server (ip4_config, tmp_addr.s_addr);
+ nm_ip4_config_add_nis_server (ip4_config, tmp_addr);
nm_log_info (LOGD_DHCP4, " nis '%s'", *s);
} else
nm_log_warn (LOGD_DHCP4, "ignoring invalid NIS server '%s'", *s);
@@ -1310,8 +1338,6 @@ ip4_options_to_config (NMDHCPClient *self)
return ip4_config;
error:
- if (addr)
- nm_ip4_address_unref (addr);
g_object_unref (ip4_config);
return NULL;
}
@@ -1321,7 +1347,6 @@ nm_dhcp_client_get_ip4_config (NMDHCPClient *self, gboolean test)
{
NMDHCPClientPrivate *priv;
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
@@ -1354,14 +1379,17 @@ ip6_options_to_config (NMDHCPClient *self)
NMDHCPClientPrivate *priv;
NMIP6Config *ip6_config = NULL;
struct in6_addr tmp_addr;
- NMIP6Address *addr = NULL;
+ NMPlatformIP6Address address;
char *str = NULL;
GHashTableIter iter;
gpointer key, value;
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
+ memset (&address, 0, sizeof (address));
+ address.plen = 128;
+ address.timestamp = nm_utils_get_monotonic_timestamp_s ();
+
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
g_return_val_if_fail (priv->options != NULL, NULL);
@@ -1372,9 +1400,17 @@ ip6_options_to_config (NMDHCPClient *self)
}
ip6_config = nm_ip6_config_new ();
- if (!ip6_config) {
- nm_log_warn (LOGD_DHCP6, "(%s): couldn't allocate memory for an IP6Config!", priv->iface);
- return NULL;
+
+ str = g_hash_table_lookup (priv->options, "new_max_life");
+ if (str) {
+ address.lifetime = strtoul (str, NULL, 10);
+ nm_log_info (LOGD_DHCP6, " valid_lft %d", address.lifetime);
+ }
+
+ str = g_hash_table_lookup (priv->options, "new_preferred_life");
+ if (str) {
+ address.preferred = strtoul (str, NULL, 10);
+ nm_log_info (LOGD_DHCP6, " preferred_lft %d", address.preferred);
}
str = g_hash_table_lookup (priv->options, "new_ip6_address");
@@ -1385,14 +1421,10 @@ ip6_options_to_config (NMDHCPClient *self)
goto error;
}
- addr = nm_ip6_address_new ();
- g_assert (addr);
- nm_ip6_address_set_address (addr, &tmp_addr);
- /* DHCPv6 IA_NA assignments are single address only */
- nm_ip6_address_set_prefix (addr, 128);
- nm_log_info (LOGD_DHCP6, " address %s/128", str);
-
- nm_ip6_config_take_address (ip6_config, addr);
+ address.address = tmp_addr;
+ address.source = NM_PLATFORM_SOURCE_DHCP;
+ nm_ip6_config_add_address (ip6_config, &address);
+ nm_log_info (LOGD_DHCP6, " address %s", str);
} else if (priv->info_only == FALSE) {
/* No address in Managed mode is a hard error */
goto error;
@@ -1433,7 +1465,6 @@ nm_dhcp_client_get_ip6_config (NMDHCPClient *self, gboolean test)
{
NMDHCPClientPrivate *priv;
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
@@ -1481,6 +1512,9 @@ get_property (GObject *object, guint prop_id,
case PROP_UUID:
g_value_set_string (value, priv->uuid);
break;
+ case PROP_PRIORITY:
+ g_value_set_uint (value, priv->priority);
+ break;
case PROP_TIMEOUT:
g_value_set_uint (value, priv->timeout);
break;
@@ -1513,6 +1547,10 @@ set_property (GObject *object, guint prop_id,
/* construct-only */
priv->uuid = g_value_dup_string (value);
break;
+ case PROP_PRIORITY:
+ /* construct-only */
+ priv->priority = g_value_get_uint (value);
+ break;
case PROP_TIMEOUT:
priv->timeout = g_value_get_uint (value);
break;
@@ -1605,6 +1643,14 @@ nm_dhcp_client_class_init (NMDHCPClientClass *client_class)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
+ (object_class, PROP_PRIORITY,
+ g_param_spec_uint (NM_DHCP_CLIENT_PRIORITY,
+ "priority",
+ "Priority",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
(object_class, PROP_TIMEOUT,
g_param_spec_uint (NM_DHCP_CLIENT_TIMEOUT,
"timeout",
@@ -1613,8 +1659,8 @@ nm_dhcp_client_class_init (NMDHCPClientClass *client_class)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/* signals */
- signals[STATE_CHANGED] =
- g_signal_new ("state-changed",
+ signals[SIGNAL_STATE_CHANGED] =
+ g_signal_new (NM_DHCP_CLIENT_SIGNAL_STATE_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDHCPClientClass, state_changed),
@@ -1622,8 +1668,8 @@ nm_dhcp_client_class_init (NMDHCPClientClass *client_class)
g_cclosure_marshal_VOID__UINT,
G_TYPE_NONE, 1, G_TYPE_UINT);
- signals[TIMEOUT] =
- g_signal_new ("timeout",
+ signals[SIGNAL_TIMEOUT] =
+ g_signal_new (NM_DHCP_CLIENT_SIGNAL_TIMEOUT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDHCPClientClass, timeout),
@@ -1631,8 +1677,8 @@ nm_dhcp_client_class_init (NMDHCPClientClass *client_class)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- signals[REMOVE] =
- g_signal_new ("remove",
+ signals[SIGNAL_REMOVE] =
+ g_signal_new (NM_DHCP_CLIENT_SIGNAL_REMOVE,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDHCPClientClass, remove),
diff --git a/src/dhcp-manager/nm-dhcp-client.h b/src/dhcp-manager/nm-dhcp-client.h
index 930ec1a5e..ad18926af 100644
--- a/src/dhcp-manager/nm-dhcp-client.h
+++ b/src/dhcp-manager/nm-dhcp-client.h
@@ -38,8 +38,13 @@
#define NM_DHCP_CLIENT_HWADDR "hwaddr"
#define NM_DHCP_CLIENT_IPV6 "ipv6"
#define NM_DHCP_CLIENT_UUID "uuid"
+#define NM_DHCP_CLIENT_PRIORITY "priority"
#define NM_DHCP_CLIENT_TIMEOUT "timeout"
+#define NM_DHCP_CLIENT_SIGNAL_TIMEOUT "timeout"
+#define NM_DHCP_CLIENT_SIGNAL_STATE_CHANGED "state-changed"
+#define NM_DHCP_CLIENT_SIGNAL_REMOVE "remove"
+
typedef enum {
DHC_NBI = 0, /* no broadcast interfaces found */
DHC_PREINIT, /* configuration started */
@@ -78,13 +83,12 @@ typedef struct {
/* Methods */
GPid (*ip4_start) (NMDHCPClient *self,
- NMSettingIP4Config *s_ip4,
- guint8 *anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *anycast_addr,
const char *hostname);
GPid (*ip6_start) (NMDHCPClient *self,
- NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ GByteArray *anycast_addr,
const char *hostname,
gboolean info_only,
const GByteArray *duid);
@@ -121,13 +125,12 @@ gboolean nm_dhcp_client_get_ipv6 (NMDHCPClient *self);
const char *nm_dhcp_client_get_uuid (NMDHCPClient *self);
gboolean nm_dhcp_client_start_ip4 (NMDHCPClient *self,
- NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *dhcp_anycast_addr,
const char *hostname);
gboolean nm_dhcp_client_start_ip6 (NMDHCPClient *self,
- NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only);
@@ -148,7 +151,7 @@ NMIP6Config *nm_dhcp_client_get_ip6_config (NMDHCPClient *self, gboolean test)
/* Backend helpers */
void nm_dhcp_client_stop_existing (const char *pid_file, const char *binary_name);
-void nm_dhcp_client_stop_pid (GPid pid, const char *iface, guint timeout_secs);
+void nm_dhcp_client_stop_pid (GPid pid, const char *iface);
#endif /* NM_DHCP_CLIENT_H */
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
index db4bf7e8b..8527e6c0f 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
@@ -25,6 +25,9 @@
#include <ctype.h>
#include "nm-dhcp-dhclient-utils.h"
+#include "nm-ip4-config.h"
+#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
#define CLIENTID_TAG "send dhcp-client-identifier"
#define CLIENTID_FORMAT CLIENTID_TAG " \"%s\"; # added by NetworkManager"
@@ -68,33 +71,32 @@ add_hostname (GString *str, const char *format, const char *hostname)
}
static void
-add_ip4_config (GString *str, NMSettingIP4Config *s_ip4, const char *hostname)
+add_ip4_config (GString *str, const char *dhcp_client_id, const char *hostname)
{
- if (s_ip4) {
- const char *tmp;
-
- tmp = nm_setting_ip4_config_get_dhcp_client_id (s_ip4);
- if (tmp) {
- gboolean is_octets = TRUE;
- const char *p = tmp;
-
- while (*p) {
- if (!g_ascii_isxdigit (*p) && (*p != ':')) {
- is_octets = FALSE;
- break;
- }
- p++;
+ if (dhcp_client_id) {
+ gboolean is_octets = TRUE;
+ int i = 0;
+
+ while (dhcp_client_id[i]) {
+ if ((i % 3) != 2 && !g_ascii_isxdigit (dhcp_client_id[i])) {
+ is_octets = FALSE;
+ break;
}
-
- /* If the client ID is just hex digits and : then don't use quotes,
- * because dhclient expects either a quoted ASCII string, or a byte
- * array formated as hex octets separated by :
- */
- if (is_octets)
- g_string_append_printf (str, CLIENTID_FORMAT_OCTETS "\n", tmp);
- else
- g_string_append_printf (str, CLIENTID_FORMAT "\n", tmp);
+ if ((i % 3) == 2 && dhcp_client_id[i] != ':') {
+ is_octets = FALSE;
+ break;
+ }
+ i++;
}
+
+ /* If the client ID is just hex digits and : then don't use quotes,
+ * because dhclient expects either a quoted ASCII string, or a byte
+ * array formated as hex octets separated by :
+ */
+ if (is_octets)
+ g_string_append_printf (str, CLIENTID_FORMAT_OCTETS "\n", dhcp_client_id);
+ else
+ g_string_append_printf (str, CLIENTID_FORMAT "\n", dhcp_client_id);
}
add_hostname (str, HOSTNAME4_FORMAT "\n", hostname);
@@ -113,7 +115,7 @@ add_ip4_config (GString *str, NMSettingIP4Config *s_ip4, const char *hostname)
}
static void
-add_ip6_config (GString *str, NMSettingIP6Config *s_ip6, const char *hostname)
+add_ip6_config (GString *str, const char *hostname)
{
add_hostname (str, HOSTNAME6_FORMAT "\n", hostname);
g_string_append (str,
@@ -125,9 +127,8 @@ add_ip6_config (GString *str, NMSettingIP6Config *s_ip6, const char *hostname)
char *
nm_dhcp_dhclient_create_config (const char *interface,
gboolean is_ip6,
- NMSettingIP4Config *s_ip4,
- NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *anycast_addr,
const char *hostname,
const char *orig_path,
const char *orig_contents)
@@ -155,9 +156,7 @@ nm_dhcp_dhclient_create_config (const char *interface,
/* Override config file "dhcp-client-id" and use one from the
* connection.
*/
- if ( s_ip4
- && nm_setting_ip4_config_get_dhcp_client_id (s_ip4)
- && !strncmp (p, CLIENTID_TAG, strlen (CLIENTID_TAG)))
+ if (dhcp_client_id && !strncmp (p, CLIENTID_TAG, strlen (CLIENTID_TAG)))
continue;
/* Override config file hostname and use one from the connection */
@@ -222,13 +221,13 @@ nm_dhcp_dhclient_create_config (const char *interface,
g_string_append_c (new_contents, '\n');
if (is_ip6) {
- add_ip6_config (new_contents, s_ip6, hostname);
+ add_ip6_config (new_contents, hostname);
add_also_request (alsoreq, "dhcp6.name-servers");
add_also_request (alsoreq, "dhcp6.domain-search");
add_also_request (alsoreq, "dhcp6.client-id");
add_also_request (alsoreq, "dhcp6.server-id");
} else {
- add_ip4_config (new_contents, s_ip4, hostname);
+ add_ip4_config (new_contents, dhcp_client_id, hostname);
add_also_request (alsoreq, "rfc3442-classless-static-routes");
add_also_request (alsoreq, "ms-classless-static-routes");
add_also_request (alsoreq, "static-routes");
@@ -247,17 +246,22 @@ nm_dhcp_dhclient_create_config (const char *interface,
g_string_append_c (new_contents, '\n');
- if (anycast_addr) {
+ if (anycast_addr && anycast_addr->len == 6) {
+ const guint8 *p_anycast_addr = anycast_addr->data;
+
g_string_append_printf (new_contents, "interface \"%s\" {\n"
" initial-interval 1; \n"
" anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n"
"}\n",
interface,
- anycast_addr[0], anycast_addr[1],
- anycast_addr[2], anycast_addr[3],
- anycast_addr[4], anycast_addr[5]);
+ p_anycast_addr[0], p_anycast_addr[1],
+ p_anycast_addr[2], p_anycast_addr[3],
+ p_anycast_addr[4], p_anycast_addr[5]);
}
+ /* Finally, assert that anycast_addr was unset or a 48 bit mac address. */
+ g_return_val_if_fail (!anycast_addr || anycast_addr->len == 6, g_string_free (new_contents, FALSE));
+
return g_string_free (new_contents, FALSE);
}
@@ -423,3 +427,238 @@ nm_dhcp_dhclient_save_duid (const char *leasefile,
return success;
}
+static void
+add_lease_option (GHashTable *hash, char *line)
+{
+ char *spc;
+ size_t len;
+
+ /* Find the space after "option" */
+ spc = strchr (line, ' ');
+ if (!spc)
+ return;
+
+ /* Find the option tag's data, which is after the second space */
+ if (g_str_has_prefix (line, "option ")) {
+ while (g_ascii_isspace (*spc))
+ spc++;
+ spc = strchr (spc + 1, ' ');
+ if (!spc)
+ return;
+ }
+
+ /* Split the line at the space */
+ *spc = '\0';
+ spc++;
+
+ /* Kill the ';' at the end of the line, if any */
+ len = strlen (spc);
+ if (*(spc + len - 1) == ';')
+ *(spc + len - 1) = '\0';
+
+ /* Strip leading quote */
+ while (g_ascii_isspace (*spc))
+ spc++;
+ if (*spc == '"')
+ spc++;
+
+ /* Strip trailing quote */
+ len = strlen (spc);
+ if (len > 0 && spc[len - 1] == '"')
+ spc[len - 1] = '\0';
+
+ if (spc[0])
+ g_hash_table_insert (hash, g_strdup (line), g_strdup (spc));
+}
+
+#define LEASE_INVALID G_MININT64
+static GTimeSpan
+lease_validity_span (const char *str_expire, GDateTime *now)
+{
+ GDateTime *expire = NULL;
+ struct tm expire_tm;
+ GTimeSpan span;
+
+ g_return_val_if_fail (now != NULL, LEASE_INVALID);
+ g_return_val_if_fail (str_expire != NULL, LEASE_INVALID);
+
+ /* Skip initial number (day of week?) */
+ if (!isdigit (*str_expire++))
+ return LEASE_INVALID;
+ if (!isspace (*str_expire++))
+ return LEASE_INVALID;
+ /* Read lease expiration (in UTC) */
+ if (!strptime (str_expire, "%t%Y/%m/%d %H:%M:%S", &expire_tm))
+ return LEASE_INVALID;
+
+ expire = g_date_time_new_utc (expire_tm.tm_year + 1900,
+ expire_tm.tm_mon + 1,
+ expire_tm.tm_mday,
+ expire_tm.tm_hour,
+ expire_tm.tm_min,
+ expire_tm.tm_sec);
+ if (!expire)
+ return LEASE_INVALID;
+
+ span = g_date_time_difference (expire, now);
+ g_date_time_unref (expire);
+
+ /* GDateTime only supports a range of less then 10000 years, so span can
+ * not overflow or be equal to LEASE_INVALID */
+ return span;
+}
+
+/**
+ * nm_dhcp_dhclient_read_lease_ip_configs:
+ * @iface: the interface name to match leases with
+ * @contents: the contents of a dhclient leasefile
+ * @ipv6: whether to read IPv4 or IPv6 leases
+ * @now: the current UTC date/time; pass %NULL to automatically use current
+ * UTC time. Testcases may need a different value for 'now'
+ *
+ * Reads dhclient leases from @contents and parses them into either
+ * #NMIP4Config or #NMIP6Config objects depending on the value of @ipv6.
+ *
+ * Returns: a #GSList of #NMIP4Config objects (if @ipv6 is %FALSE) or a list of
+ * #NMIP6Config objects (if @ipv6 is %TRUE) containing the lease data.
+ */
+GSList *
+nm_dhcp_dhclient_read_lease_ip_configs (const char *iface,
+ const char *contents,
+ gboolean ipv6,
+ GDateTime *now)
+{
+ GSList *parsed = NULL, *iter, *leases = NULL;
+ char **line, **split = NULL;
+ GHashTable *hash = NULL;
+ gint32 now_monotonic_ts;
+
+ g_return_val_if_fail (contents != NULL, NULL);
+
+ split = g_strsplit_set (contents, "\n\r", -1);
+ if (!split)
+ return NULL;
+
+ for (line = split; line && *line; line++) {
+ *line = g_strstrip (*line);
+
+ if (*line[0] == '#') {
+ /* Comment */
+ } else if (!strcmp (*line, "}")) {
+ /* Lease ends */
+ parsed = g_slist_append (parsed, hash);
+ hash = NULL;
+ } else if (!strcmp (*line, "lease {")) {
+ /* Beginning of a new lease */
+ if (hash) {
+ /* Ignore malformed lease that doesn't end before new one starts */
+ g_hash_table_destroy (hash);
+ }
+
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ } else if (hash && strlen (*line))
+ add_lease_option (hash, *line);
+ }
+ g_strfreev (split);
+
+ /* Check if the last lease in the file was properly ended */
+ if (hash) {
+ /* Ignore malformed lease that doesn't end before new one starts */
+ g_hash_table_destroy (hash);
+ hash = NULL;
+ }
+
+ if (now)
+ g_date_time_ref (now);
+ else
+ now = g_date_time_new_now_utc ();
+ now_monotonic_ts = nm_utils_get_monotonic_timestamp_s ();
+
+ for (iter = parsed; iter; iter = g_slist_next (iter)) {
+ NMIP4Config *ip4;
+ NMPlatformIP4Address address;
+ const char *value;
+ GTimeSpan expiry;
+ guint32 tmp, gw = 0;
+
+ hash = iter->data;
+
+ /* Make sure this lease is for the interface we want */
+ value = g_hash_table_lookup (hash, "interface");
+ if (!value || strcmp (value, iface))
+ continue;
+
+ value = g_hash_table_lookup (hash, "expire");
+ if (!value)
+ continue;
+ expiry = lease_validity_span (value, now);
+ if (expiry == LEASE_INVALID)
+ continue;
+
+ /* scale expiry to seconds (and CLAMP into the range of guint32) */
+ expiry = CLAMP (expiry / G_TIME_SPAN_SECOND, 0, NM_PLATFORM_LIFETIME_PERMANENT-1);
+ if (expiry <= 0) {
+ /* the address is already expired. Don't even add it. */
+ continue;
+ }
+
+ memset (&address, 0, sizeof (address));
+
+ /* IP4 address */
+ value = g_hash_table_lookup (hash, "fixed-address");
+ if (!value)
+ continue;
+ if (!inet_pton (AF_INET, value, &address.address))
+ continue;
+
+ /* Gateway */
+ value = g_hash_table_lookup (hash, "option routers");
+ if (!value)
+ continue;
+ if (!inet_pton (AF_INET, value, &gw))
+ continue;
+
+ /* Netmask */
+ value = g_hash_table_lookup (hash, "option subnet-mask");
+ if (value && inet_pton (AF_INET, value, &tmp))
+ address.plen = nm_utils_ip4_netmask_to_prefix (tmp);
+
+ /* Get default netmask for the IP according to appropriate class. */
+ if (!address.plen)
+ address.plen = nm_utils_ip4_get_default_prefix (address.address);
+
+ address.timestamp = now_monotonic_ts;
+ address.lifetime = address.preferred = expiry;
+ address.source = NM_PLATFORM_SOURCE_DHCP;
+
+ ip4 = nm_ip4_config_new ();
+ nm_ip4_config_add_address (ip4, &address);
+ nm_ip4_config_set_gateway (ip4, gw);
+
+ value = g_hash_table_lookup (hash, "option domain-name-servers");
+ if (value) {
+ char **dns, **dns_iter;
+
+ dns = g_strsplit_set (value, ",", -1);
+ for (dns_iter = dns; dns_iter && *dns_iter; dns_iter++) {
+ if (inet_pton (AF_INET, *dns_iter, &tmp))
+ nm_ip4_config_add_nameserver (ip4, tmp);
+ }
+ if (dns)
+ g_strfreev (dns);
+ }
+
+ value = g_hash_table_lookup (hash, "option domain-name");
+ if (value && value[0])
+ nm_ip4_config_add_domain (ip4, value);
+
+ /* FIXME: static routes */
+
+ leases = g_slist_append (leases, ip4);
+ }
+
+ g_date_time_unref (now);
+ g_slist_free_full (parsed, (GDestroyNotify) g_hash_table_destroy);
+ return leases;
+}
+
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.h b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
index 95cb05680..e8d91b314 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.h
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
@@ -27,9 +27,8 @@
char *nm_dhcp_dhclient_create_config (const char *interface,
gboolean is_ip6,
- NMSettingIP4Config *s_ip4,
- NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *anycast_addr,
const char *hostname,
const char *orig_path,
const char *orig_contents);
@@ -44,5 +43,10 @@ gboolean nm_dhcp_dhclient_save_duid (const char *leasefile,
const char *escaped_duid,
GError **error);
+GSList *nm_dhcp_dhclient_read_lease_ip_configs (const char *iface,
+ const char *contents,
+ gboolean ipv6,
+ GDateTime *now);
+
#endif /* NM_DHCP_DHCLIENT_UTILS_H */
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
index 9a42f0e48..4232ee0cc 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient.c
@@ -32,6 +32,7 @@
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <ctype.h>
#include <config.h>
@@ -39,14 +40,13 @@
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-dhcp-dhclient-utils.h"
+#include "nm-dhcp-manager.h"
#include "nm-posix-signals.h"
G_DEFINE_TYPE (NMDHCPDhclient, nm_dhcp_dhclient, NM_TYPE_DHCP_CLIENT)
#define NM_DHCP_DHCLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_DHCLIENT, NMDHCPDhclientPrivate))
-#define ACTION_SCRIPT_PATH LIBEXECDIR "/nm-dhcp-client.action"
-
typedef struct {
const char *path;
char *conf_file;
@@ -136,223 +136,37 @@ get_dhclient_leasefile (const char *iface,
return NULL;
}
-static void
-add_lease_option (GHashTable *hash, char *line)
-{
- char *spc;
-
- spc = strchr (line, ' ');
- if (!spc) {
- nm_log_warn (LOGD_DHCP, "DHCP lease file line '%s' did not contain a space", line);
- return;
- }
-
- /* If it's an 'option' line, split at second space */
- if (g_str_has_prefix (line, "option ")) {
- spc = strchr (spc + 1, ' ');
- if (!spc) {
- nm_log_warn (LOGD_DHCP, "DHCP lease file option line '%s' did not contain a second space",
- line);
- return;
- }
- }
-
- /* Split the line at the space */
- *spc = '\0';
- spc++;
-
- /* Kill the ';' at the end of the line, if any */
- if (*(spc + strlen (spc) - 1) == ';')
- *(spc + strlen (spc) - 1) = '\0';
-
- /* Treat 'interface' specially */
- if (g_str_has_prefix (line, "interface")) {
- if (*(spc) == '"')
- spc++; /* Jump past the " */
- if (*(spc + strlen (spc) - 1) == '"')
- *(spc + strlen (spc) - 1) = '\0'; /* Kill trailing " */
- }
-
- g_hash_table_insert (hash, g_strdup (line), g_strdup (spc));
-}
-
GSList *
-nm_dhcp_dhclient_get_lease_config (const char *iface, const char *uuid, gboolean ipv6)
+nm_dhcp_dhclient_get_lease_ip_configs (const char *iface,
+ const char *uuid,
+ gboolean ipv6)
{
- GSList *parsed = NULL, *iter, *leases = NULL;
char *contents = NULL;
char *leasefile;
- char **line, **split = NULL;
- GHashTable *hash = NULL;
-
- /* IPv6 not supported */
- if (ipv6)
- return NULL;
+ GSList *leases = NULL;
leasefile = get_dhclient_leasefile (iface, uuid, FALSE, NULL);
if (!leasefile)
return NULL;
- if (!g_file_test (leasefile, G_FILE_TEST_EXISTS))
- goto out;
-
- if (!g_file_get_contents (leasefile, &contents, NULL, NULL))
- goto out;
+ if ( g_file_test (leasefile, G_FILE_TEST_EXISTS)
+ && g_file_get_contents (leasefile, &contents, NULL, NULL)
+ && contents
+ && contents[0])
+ leases = nm_dhcp_dhclient_read_lease_ip_configs (iface, contents, ipv6, NULL);
- split = g_strsplit_set (contents, "\n\r", -1);
+ g_free (leasefile);
g_free (contents);
- if (!split)
- goto out;
-
- for (line = split; line && *line; line++) {
- *line = g_strstrip (*line);
-
- if (!strcmp (*line, "}")) {
- /* Lease ends */
- parsed = g_slist_append (parsed, hash);
- hash = NULL;
- } else if (!strcmp (*line, "lease {")) {
- /* Beginning of a new lease */
- if (hash) {
- nm_log_warn (LOGD_DHCP, "DHCP lease file %s malformed; new lease started "
- "without ending previous lease",
- leasefile);
- g_hash_table_destroy (hash);
- }
-
- hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- } else if (strlen (*line))
- add_lease_option (hash, *line);
- }
- g_strfreev (split);
-
- /* Check if the last lease in the file was properly ended */
- if (hash) {
- nm_log_warn (LOGD_DHCP, "DHCP lease file %s malformed; new lease started "
- "without ending previous lease",
- leasefile);
- g_hash_table_destroy (hash);
- hash = NULL;
- }
-
- for (iter = parsed; iter; iter = g_slist_next (iter)) {
- NMIP4Config *ip4;
- NMIP4Address *addr;
- const char *data;
- struct in_addr tmp;
- guint32 prefix;
- struct tm expire;
-
- hash = iter->data;
-
- /* Make sure this lease is for the interface we want */
- data = g_hash_table_lookup (hash, "interface");
- if (!data || strcmp (data, iface))
- continue;
-
- data = g_hash_table_lookup (hash, "expire");
- if (data) {
- time_t now_tt;
- struct tm *now;
-
- /* Read lease expiration (in UTC) */
- if (!strptime (data, "%w %Y/%m/%d %H:%M:%S", &expire)) {
- nm_log_warn (LOGD_DHCP, "couldn't parse DHCP lease file expire time '%s'",
- data);
- continue;
- }
-
- now_tt = time (NULL);
- now = gmtime(&now_tt);
-
- /* Ignore this lease if it's already expired */
- if (expire.tm_year < now->tm_year)
- continue;
- else if (expire.tm_year == now->tm_year) {
- if (expire.tm_mon < now->tm_mon)
- continue;
- else if (expire.tm_mon == now->tm_mon) {
- if (expire.tm_mday < now->tm_mday)
- continue;
- else if (expire.tm_mday == now->tm_mday) {
- if (expire.tm_hour < now->tm_hour)
- continue;
- else if (expire.tm_hour == now->tm_hour) {
- if (expire.tm_min < now->tm_min)
- continue;
- else if (expire.tm_min == now->tm_min) {
- if (expire.tm_sec <= now->tm_sec)
- continue;
- }
- }
- }
- }
- }
- /* If we get this far, the lease hasn't expired */
- }
- data = g_hash_table_lookup (hash, "fixed-address");
- if (!data)
- continue;
-
- ip4 = nm_ip4_config_new ();
- addr = nm_ip4_address_new ();
-
- /* IP4 address */
- if (!inet_pton (AF_INET, data, &tmp)) {
- nm_log_warn (LOGD_DHCP, "couldn't parse DHCP lease file IP4 address '%s'", data);
- goto error;
- }
- nm_ip4_address_set_address (addr, tmp.s_addr);
-
- /* Netmask */
- data = g_hash_table_lookup (hash, "option subnet-mask");
- if (data) {
- if (!inet_pton (AF_INET, data, &tmp)) {
- nm_log_warn (LOGD_DHCP, "couldn't parse DHCP lease file IP4 subnet mask '%s'", data);
- goto error;
- }
- prefix = nm_utils_ip4_netmask_to_prefix (tmp.s_addr);
- } else {
- /* Get default netmask for the IP according to appropriate class. */
- prefix = nm_utils_ip4_get_default_prefix (nm_ip4_address_get_address (addr));
- }
- nm_ip4_address_set_prefix (addr, prefix);
-
- /* Gateway */
- data = g_hash_table_lookup (hash, "option routers");
- if (data) {
- if (!inet_pton (AF_INET, data, &tmp)) {
- nm_log_warn (LOGD_DHCP, "couldn't parse DHCP lease file IP4 gateway '%s'", data);
- goto error;
- }
- nm_ip4_address_set_gateway (addr, tmp.s_addr);
- }
-
- nm_ip4_config_take_address (ip4, addr);
- leases = g_slist_append (leases, ip4);
- continue;
-
- error:
- nm_ip4_address_unref (addr);
- g_object_unref (ip4);
- }
-
-out:
- g_slist_free_full (parsed, (GDestroyNotify) g_hash_table_destroy);
- g_free (leasefile);
return leases;
}
-
-
static gboolean
merge_dhclient_config (const char *iface,
const char *conf_file,
gboolean is_ip6,
- NMSettingIP4Config *s_ip4,
- NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *anycast_addr,
const char *hostname,
const char *orig_path,
GError **error)
@@ -363,7 +177,7 @@ merge_dhclient_config (const char *iface,
g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (conf_file != NULL, FALSE);
- if (g_file_test (orig_path, G_FILE_TEST_EXISTS)) {
+ if (orig_path && g_file_test (orig_path, G_FILE_TEST_EXISTS)) {
GError *read_error = NULL;
if (!g_file_get_contents (orig_path, &orig, NULL, &read_error)) {
@@ -373,7 +187,7 @@ merge_dhclient_config (const char *iface,
}
}
- new = nm_dhcp_dhclient_create_config (iface, is_ip6, s_ip4, s_ip6, anycast_addr, hostname, orig_path, orig);
+ new = nm_dhcp_dhclient_create_config (iface, is_ip6, dhcp_client_id, anycast_addr, hostname, orig_path, orig);
g_assert (new);
success = g_file_set_contents (conf_file, new, -1, error);
g_free (new);
@@ -383,7 +197,7 @@ merge_dhclient_config (const char *iface,
}
static char *
-get_dhclient_config (const char * iface, const char *uuid, gboolean ipv6)
+find_existing_config (const char *iface, const char *uuid, gboolean ipv6)
{
char *path;
@@ -393,17 +207,20 @@ get_dhclient_config (const char * iface, const char *uuid, gboolean ipv6)
*/
if (uuid) {
path = g_strdup_printf (NMCONFDIR "/dhclient%s-%s.conf", ipv6 ? "6" : "", uuid);
+ nm_log_dbg (ipv6 ? LOGD_DHCP6 : LOGD_DHCP4, "(%s) looking for existing config %s", iface, path);
if (g_file_test (path, G_FILE_TEST_EXISTS))
return path;
g_free (path);
}
path = g_strdup_printf (NMCONFDIR "/dhclient%s-%s.conf", ipv6 ? "6" : "", iface);
+ nm_log_dbg (ipv6 ? LOGD_DHCP6 : LOGD_DHCP4, "(%s) looking for existing config %s", iface, path);
if (g_file_test (path, G_FILE_TEST_EXISTS))
return path;
g_free (path);
path = g_strdup_printf (NMCONFDIR "/dhclient%s.conf", ipv6 ? "6" : "");
+ nm_log_dbg (ipv6 ? LOGD_DHCP6 : LOGD_DHCP4, "(%s) looking for existing config %s", iface, path);
if (g_file_test (path, G_FILE_TEST_EXISTS))
return path;
g_free (path);
@@ -417,21 +234,25 @@ get_dhclient_config (const char * iface, const char *uuid, gboolean ipv6)
* (including Fedora) don't even provide a default configuration file.
*/
path = g_strdup_printf (SYSCONFDIR "/dhcp/dhclient%s-%s.conf", ipv6 ? "6" : "", iface);
+ nm_log_dbg (ipv6 ? LOGD_DHCP6 : LOGD_DHCP4, "(%s) looking for existing config %s", iface, path);
if (g_file_test (path, G_FILE_TEST_EXISTS))
return path;
g_free (path);
path = g_strdup_printf (SYSCONFDIR "/dhclient%s-%s.conf", ipv6 ? "6" : "", iface);
+ nm_log_dbg (ipv6 ? LOGD_DHCP6 : LOGD_DHCP4, "(%s) looking for existing config %s", iface, path);
if (g_file_test (path, G_FILE_TEST_EXISTS))
return path;
g_free (path);
path = g_strdup_printf (SYSCONFDIR "/dhcp/dhclient%s.conf", ipv6 ? "6" : "");
+ nm_log_dbg (ipv6 ? LOGD_DHCP6 : LOGD_DHCP4, "(%s) looking for existing config %s", iface, path);
if (g_file_test (path, G_FILE_TEST_EXISTS))
return path;
g_free (path);
path = g_strdup_printf (SYSCONFDIR "/dhclient%s.conf", ipv6 ? "6" : "");
+ nm_log_dbg (ipv6 ? LOGD_DHCP6 : LOGD_DHCP4, "(%s) looking for existing config %s", iface, path);
if (g_file_test (path, G_FILE_TEST_EXISTS))
return path;
g_free (path);
@@ -449,9 +270,9 @@ get_dhclient_config (const char * iface, const char *uuid, gboolean ipv6)
static char *
create_dhclient_config (const char *iface,
gboolean is_ip6,
- NMSettingIP4Config *s_ip4,
- NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ const char *uuid,
+ const char *dhcp_client_id,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
char *orig = NULL, *new = NULL;
@@ -461,11 +282,23 @@ create_dhclient_config (const char *iface,
g_return_val_if_fail (iface != NULL, NULL);
new = g_strdup_printf (NMSTATEDIR "/dhclient%s-%s.conf", is_ip6 ? "6" : "", iface);
+ nm_log_dbg (is_ip6 ? LOGD_DHCP6 : LOGD_DHCP4,
+ "(%s): creating composite dhclient config %s",
+ iface, new);
+
+ orig = find_existing_config (iface, uuid, is_ip6);
+ if (orig) {
+ nm_log_dbg (is_ip6 ? LOGD_DHCP6 : LOGD_DHCP4,
+ "(%s): merging existing dhclient config %s",
+ iface, orig);
+ } else {
+ nm_log_dbg (is_ip6 ? LOGD_DHCP6 : LOGD_DHCP4,
+ "(%s): no existing dhclient configuration to merge",
+ iface);
+ }
- /* TODO: also support UUID */
- orig = get_dhclient_config (iface, NULL, is_ip6);
error = NULL;
- success = merge_dhclient_config (iface, new, is_ip6, s_ip4, s_ip6, dhcp_anycast_addr, hostname, orig, &error);
+ success = merge_dhclient_config (iface, new, is_ip6, dhcp_client_id, dhcp_anycast_addr, hostname, orig, &error);
if (!success) {
nm_log_warn (LOGD_DHCP, "(%s): error creating dhclient%s configuration: %s",
iface, is_ip6 ? "6" : "", error->message);
@@ -523,10 +356,6 @@ dhclient_start (NMDHCPClient *client,
pid_file = g_strdup_printf (LOCALSTATEDIR "/run/dhclient%s-%s.pid",
ipv6 ? "6" : "",
iface);
- if (!pid_file) {
- nm_log_warn (log_domain, "(%s): not enough memory for dhcpcd options.", iface);
- return -1;
- }
/* Kill any existing dhclient from the pidfile */
binary_name = g_path_get_basename (priv->path);
@@ -593,7 +422,7 @@ dhclient_start (NMDHCPClient *client,
g_ptr_array_add (argv, (gpointer) mode_opt);
}
g_ptr_array_add (argv, (gpointer) "-sf"); /* Set script file */
- g_ptr_array_add (argv, (gpointer) ACTION_SCRIPT_PATH );
+ g_ptr_array_add (argv, (gpointer) nm_dhcp_helper_path);
if (pid_file) {
g_ptr_array_add (argv, (gpointer) "-pf"); /* Set pid file */
@@ -644,16 +473,17 @@ dhclient_start (NMDHCPClient *client,
static GPid
ip4_start (NMDHCPClient *client,
- NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
- const char *iface;
+ const char *iface, *uuid;
iface = nm_dhcp_client_get_iface (client);
+ uuid = nm_dhcp_client_get_uuid (client);
- priv->conf_file = create_dhclient_config (iface, FALSE, s_ip4, NULL, dhcp_anycast_addr, hostname);
+ priv->conf_file = create_dhclient_config (iface, FALSE, uuid, dhcp_client_id, dhcp_anycast_addr, hostname);
if (!priv->conf_file) {
nm_log_warn (LOGD_DHCP4, "(%s): error creating dhclient configuration file.", iface);
return -1;
@@ -664,18 +494,18 @@ ip4_start (NMDHCPClient *client,
static GPid
ip6_start (NMDHCPClient *client,
- NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only,
const GByteArray *duid)
{
NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
- const char *iface;
+ const char *iface, *uuid;
iface = nm_dhcp_client_get_iface (client);
+ uuid = nm_dhcp_client_get_uuid (client);
- priv->conf_file = create_dhclient_config (iface, TRUE, NULL, s_ip6, dhcp_anycast_addr, hostname);
+ priv->conf_file = create_dhclient_config (iface, TRUE, uuid, NULL, dhcp_anycast_addr, hostname);
if (!priv->conf_file) {
nm_log_warn (LOGD_DHCP6, "(%s): error creating dhclient6 configuration file.", iface);
return -1;
@@ -693,9 +523,11 @@ stop (NMDHCPClient *client, gboolean release, const GByteArray *duid)
NM_DHCP_CLIENT_CLASS (nm_dhcp_dhclient_parent_class)->stop (client, release, duid);
if (priv->conf_file)
- remove (priv->conf_file);
+ if (remove (priv->conf_file) == -1)
+ nm_log_dbg (LOGD_DHCP, "Could not remove dhcp config file \"%s\": %d (%s)", priv->conf_file, errno, g_strerror (errno));
if (priv->pid_file) {
- remove (priv->pid_file);
+ if (remove (priv->pid_file) == -1)
+ nm_log_dbg (LOGD_DHCP, "Could not remove dhcp pid file \"%s\": %d (%s)", priv->pid_file, errno, g_strerror (errno));
g_free (priv->pid_file);
priv->pid_file = NULL;
}
@@ -706,7 +538,7 @@ stop (NMDHCPClient *client, gboolean release, const GByteArray *duid)
rpid = dhclient_start (client, NULL, duid, TRUE);
if (rpid > 0) {
/* Wait a few seconds for the release to happen */
- nm_dhcp_client_stop_pid (rpid, nm_dhcp_client_get_iface (client), 5);
+ nm_dhcp_client_stop_pid (rpid, nm_dhcp_client_get_iface (client));
}
}
}
@@ -727,13 +559,13 @@ get_duid (NMDHCPClient *client)
if (leasefile) {
nm_log_dbg (LOGD_DHCP, "Looking for DHCPv6 DUID in '%s'.", leasefile);
duid = nm_dhcp_dhclient_read_duid (leasefile, &error);
- g_free (leasefile);
if (error) {
nm_log_warn (LOGD_DHCP, "Failed to read leasefile '%s': (%d) %s",
leasefile, error->code, error->message);
g_clear_error (&error);
}
+ g_free (leasefile);
}
if (!duid && priv->def_leasefile) {
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.h b/src/dhcp-manager/nm-dhcp-dhclient.h
index 89039189d..20219a63e 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.h
+++ b/src/dhcp-manager/nm-dhcp-dhclient.h
@@ -41,7 +41,9 @@ typedef struct {
GType nm_dhcp_dhclient_get_type (void);
-GSList *nm_dhcp_dhclient_get_lease_config (const char *iface, const char *uuid, gboolean ipv6);
+GSList *nm_dhcp_dhclient_get_lease_ip_configs (const char *iface,
+ const char *uuid,
+ gboolean ipv6);
const char *nm_dhcp_dhclient_get_path (const char *try_first);
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index f978cccca..acfbee269 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -34,6 +34,7 @@
#include <arpa/inet.h>
#include "nm-dhcp-dhcpcd.h"
+#include "nm-dhcp-manager.h"
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-posix-signals.h"
@@ -42,8 +43,6 @@ G_DEFINE_TYPE (NMDHCPDhcpcd, nm_dhcp_dhcpcd, NM_TYPE_DHCP_CLIENT)
#define NM_DHCP_DHCPCD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_DHCPCD, NMDHCPDhcpcdPrivate))
-#define ACTION_SCRIPT_PATH LIBEXECDIR "/nm-dhcp-client.action"
-
typedef struct {
const char *path;
char *pid_file;
@@ -73,12 +72,6 @@ nm_dhcp_dhcpcd_get_path (const char *try_first)
return *path;
}
-GSList *
-nm_dhcp_dhcpcd_get_lease_config (const char *iface, const char *uuid, gboolean ipv6)
-{
- return NULL;
-}
-
static void
dhcpcd_child_setup (gpointer user_data G_GNUC_UNUSED)
{
@@ -95,8 +88,8 @@ dhcpcd_child_setup (gpointer user_data G_GNUC_UNUSED)
static GPid
ip4_start (NMDHCPClient *client,
- NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ const char *dhcp_client_id,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
@@ -104,21 +97,16 @@ ip4_start (NMDHCPClient *client,
GPid pid = -1;
GError *error = NULL;
char *pid_contents = NULL, *binary_name, *cmd_str;
- const char *iface, *uuid;
+ const char *iface;
g_return_val_if_fail (priv->pid_file == NULL, -1);
iface = nm_dhcp_client_get_iface (client);
- uuid = nm_dhcp_client_get_uuid (client);
/* dhcpcd does not allow custom pidfiles; the pidfile is always
* RUNDIR "dhcpcd-<ifname>.pid".
*/
priv->pid_file = g_strdup_printf (RUNDIR "/dhcpcd-%s.pid", iface);
- if (!priv->pid_file) {
- nm_log_warn (LOGD_DHCP4, "(%s): not enough memory for dhcpcd options.", iface);
- return -1;
- }
if (!g_file_test (priv->path, G_FILE_TEST_EXISTS)) {
nm_log_warn (LOGD_DHCP4, "%s does not exist.", priv->path);
@@ -142,7 +130,7 @@ ip4_start (NMDHCPClient *client,
g_ptr_array_add (argv, (gpointer) "-G"); /* Let NM handle routing */
g_ptr_array_add (argv, (gpointer) "-c"); /* Set script file */
- g_ptr_array_add (argv, (gpointer) ACTION_SCRIPT_PATH );
+ g_ptr_array_add (argv, (gpointer) nm_dhcp_helper_path);
#ifdef DHCPCD_SUPPORTS_IPV6
/* IPv4-only for now. NetworkManager knows better than dhcpcd when to
@@ -179,8 +167,7 @@ ip4_start (NMDHCPClient *client,
static GPid
ip6_start (NMDHCPClient *client,
- NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only,
const GByteArray *duid)
@@ -197,8 +184,10 @@ stop (NMDHCPClient *client, gboolean release, const GByteArray *duid)
/* Chain up to parent */
NM_DHCP_CLIENT_CLASS (nm_dhcp_dhcpcd_parent_class)->stop (client, release, duid);
- if (priv->pid_file)
- remove (priv->pid_file);
+ if (priv->pid_file) {
+ if (remove (priv->pid_file) == -1)
+ nm_log_dbg (LOGD_DHCP, "Could not remove dhcp pid file \"%s\": %d (%s)", priv->pid_file, errno, g_strerror (errno));
+ }
/* FIXME: implement release... */
}
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.h b/src/dhcp-manager/nm-dhcp-dhcpcd.h
index c90dcb74d..fb6b0628f 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.h
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.h
@@ -41,8 +41,6 @@ typedef struct {
GType nm_dhcp_dhcpcd_get_type (void);
-GSList *nm_dhcp_dhcpcd_get_lease_config (const char *iface, const char *uuid, gboolean ipv6);
-
const char *nm_dhcp_dhcpcd_get_path (const char *try_first);
#endif /* NM_DHCP_DHCPCD_H */
diff --git a/callouts/nm-dhcp-client-action.c b/src/dhcp-manager/nm-dhcp-helper.c
index 2553a61a2..4ddfafe17 100644
--- a/callouts/nm-dhcp-client-action.c
+++ b/src/dhcp-manager/nm-dhcp-helper.c
@@ -15,12 +15,11 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
/* for environ */
#define _GNU_SOURCE
-#include <config.h>
#include <stdio.h>
#include <unistd.h>
@@ -28,150 +27,147 @@
#include <string.h>
#include <signal.h>
+#include <config.h>
+
#include <dbus/dbus.h>
-#define NM_DHCP_CLIENT_DBUS_SERVICE "org.freedesktop.nm_dhcp_client"
#define NM_DHCP_CLIENT_DBUS_IFACE "org.freedesktop.nm_dhcp_client"
/**
- * Start a dict in a dbus message. Should be paired with a call to
- * {@link wpa_dbus_dict_close_write}.
+ * _dbus_dict_open_write:
+ * @iter: A valid dbus message iterator
+ * @iter_dict: on return, a dict iterator to pass to further dict functions
*
- * @param iter A valid dbus message iterator
- * @param iter_dict (out) A dict iterator to pass to further dict functions
- * @return TRUE on success, FALSE on failure
+ * Start a dict in a dbus message. Should be paired with a call to
+ * _dbus_dict_close_write().
*
+ * Returns: %TRUE on success, %FALSE on failure
*/
-static dbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter,
- DBusMessageIter *iter_dict)
+static dbus_bool_t
+_dbus_dict_open_write (DBusMessageIter *iter, DBusMessageIter *iter_dict)
{
- dbus_bool_t result;
-
if (!iter || !iter_dict)
return FALSE;
- result = dbus_message_iter_open_container(
- iter,
- DBUS_TYPE_ARRAY,
- DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_VARIANT_AS_STRING
- DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
- iter_dict);
- return result;
+ return dbus_message_iter_open_container (iter,
+ DBUS_TYPE_ARRAY,
+ DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
+ DBUS_TYPE_STRING_AS_STRING
+ DBUS_TYPE_VARIANT_AS_STRING
+ DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
+ iter_dict);
}
/**
- * End a dict element in a dbus message. Should be paired with
- * a call to {@link wpa_dbus_dict_open_write}.
+ * _dbus_dict_close_write:
+ * @iter: valid dbus message iterator, same as passed to _dbus_dict_open_write()
+ * @iter_dict: a dbus dict iterator returned from _dbus_dict_open_write()
*
- * @param iter valid dbus message iterator, same as passed to
- * wpa_dbus_dict_open_write()
- * @param iter_dict a dbus dict iterator returned from
- * {@link wpa_dbus_dict_open_write}
- * @return TRUE on success, FALSE on failure
+ * End a dict element in a dbus message. Should be paired with a call to
+ * _dbus_dict_open_write().
*
+ * Returns: %TRUE on success, %FALSE on failure
*/
-static dbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter,
- DBusMessageIter *iter_dict)
+static dbus_bool_t
+_dbus_dict_close_write (DBusMessageIter *iter, DBusMessageIter *iter_dict)
{
if (!iter || !iter_dict)
return FALSE;
- return dbus_message_iter_close_container(iter, iter_dict);
+ return dbus_message_iter_close_container (iter, iter_dict);
}
-static dbus_bool_t _wpa_dbus_add_dict_entry_start(
- DBusMessageIter *iter_dict, DBusMessageIter *iter_dict_entry,
- const char *key, const int value_type)
+static dbus_bool_t
+_dbus_add_dict_entry_start (DBusMessageIter *iter_dict,
+ DBusMessageIter *iter_dict_entry,
+ const char *key,
+ const int value_type)
{
- if (!dbus_message_iter_open_container(iter_dict,
- DBUS_TYPE_DICT_ENTRY, NULL,
- iter_dict_entry))
+ if (!dbus_message_iter_open_container (iter_dict, DBUS_TYPE_DICT_ENTRY, NULL, iter_dict_entry))
return FALSE;
- if (!dbus_message_iter_append_basic(iter_dict_entry, DBUS_TYPE_STRING,
- &key))
+ if (!dbus_message_iter_append_basic (iter_dict_entry, DBUS_TYPE_STRING, &key))
return FALSE;
return TRUE;
}
-static dbus_bool_t _wpa_dbus_add_dict_entry_end(
- DBusMessageIter *iter_dict, DBusMessageIter *iter_dict_entry,
- DBusMessageIter *iter_dict_val)
+static dbus_bool_t
+_dbus_add_dict_entry_end (DBusMessageIter *iter_dict,
+ DBusMessageIter *iter_dict_entry,
+ DBusMessageIter *iter_dict_val)
{
- if (!dbus_message_iter_close_container(iter_dict_entry, iter_dict_val))
+ if (!dbus_message_iter_close_container (iter_dict_entry, iter_dict_val))
return FALSE;
- if (!dbus_message_iter_close_container(iter_dict, iter_dict_entry))
+ if (!dbus_message_iter_close_container (iter_dict, iter_dict_entry))
return FALSE;
return TRUE;
}
-static dbus_bool_t _wpa_dbus_add_dict_entry_byte_array(
- DBusMessageIter *iter_dict, const char *key,
- const char *value, const dbus_uint32_t value_len)
+static dbus_bool_t
+_dbus_add_dict_entry_byte_array (DBusMessageIter *iter_dict,
+ const char *key,
+ const char *value,
+ const dbus_uint32_t value_len)
{
DBusMessageIter iter_dict_entry, iter_dict_val, iter_array;
dbus_uint32_t i;
- if (!_wpa_dbus_add_dict_entry_start(iter_dict, &iter_dict_entry,
- key, DBUS_TYPE_ARRAY))
+ if (!_dbus_add_dict_entry_start (iter_dict, &iter_dict_entry, key, DBUS_TYPE_ARRAY))
return FALSE;
- if (!dbus_message_iter_open_container(&iter_dict_entry,
- DBUS_TYPE_VARIANT,
- DBUS_TYPE_ARRAY_AS_STRING
- DBUS_TYPE_BYTE_AS_STRING,
- &iter_dict_val))
+ if (!dbus_message_iter_open_container (&iter_dict_entry,
+ DBUS_TYPE_VARIANT,
+ DBUS_TYPE_ARRAY_AS_STRING
+ DBUS_TYPE_BYTE_AS_STRING,
+ &iter_dict_val))
return FALSE;
- if (!dbus_message_iter_open_container(&iter_dict_val, DBUS_TYPE_ARRAY,
- DBUS_TYPE_BYTE_AS_STRING,
- &iter_array))
+ if (!dbus_message_iter_open_container (&iter_dict_val,
+ DBUS_TYPE_ARRAY,
+ DBUS_TYPE_BYTE_AS_STRING,
+ &iter_array))
return FALSE;
for (i = 0; i < value_len; i++) {
- if (!dbus_message_iter_append_basic(&iter_array,
- DBUS_TYPE_BYTE,
- &(value[i])))
+ if (!dbus_message_iter_append_basic (&iter_array, DBUS_TYPE_BYTE, &(value[i])))
return FALSE;
}
- if (!dbus_message_iter_close_container(&iter_dict_val, &iter_array))
+ if (!dbus_message_iter_close_container (&iter_dict_val, &iter_array))
return FALSE;
- if (!_wpa_dbus_add_dict_entry_end(iter_dict, &iter_dict_entry,
- &iter_dict_val))
+ if (!_dbus_add_dict_entry_end (iter_dict, &iter_dict_entry, &iter_dict_val))
return FALSE;
return TRUE;
}
/**
+ * _dbus_dict_append_byte_array:
+ * @iter_dict: A valid %DBusMessageIter returned from _dbus_dict_open_write()
+ * @key: The key of the dict item
+ * @value: The byte array
+ * @value_len: The length of the byte array, in bytes
+ *
* Add a byte array entry to the dict.
*
- * @param iter_dict A valid DBusMessageIter returned from
- * {@link wpa_dbus_dict_open_write}
- * @param key The key of the dict item
- * @param value The byte array
- * @param value_len The length of the byte array, in bytes
- * @return TRUE on success, FALSE on failure
+ * Returns: %TRUE on success, %FALSE on failure
*
*/
-static dbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict,
- const char *key,
- const char *value,
- const dbus_uint32_t value_len)
+static dbus_bool_t
+_dbus_dict_append_byte_array (DBusMessageIter *iter_dict,
+ const char *key,
+ const char *value,
+ const dbus_uint32_t value_len)
{
if (!key)
return FALSE;
if (!value && (value_len != 0))
return FALSE;
- return _wpa_dbus_add_dict_entry_byte_array(iter_dict, key, value,
- value_len);
+ return _dbus_add_dict_entry_byte_array (iter_dict, key, value, value_len);
}
@@ -185,7 +181,7 @@ build_message (DBusMessage * message)
DBusMessageIter iter, iter_dict;
dbus_message_iter_init_append (message, &iter);
- if (!wpa_dbus_dict_open_write (&iter, &iter_dict))
+ if (!_dbus_dict_open_write (&iter, &iter_dict))
goto out;
/* List environment and format for dbus dict */
@@ -211,7 +207,7 @@ build_message (DBusMessage * message)
* no character encoding guarantees with DHCP, and D-Bus requires
* strings to be UTF-8.
*/
- if (!wpa_dbus_dict_append_byte_array (&iter_dict,
+ if (!_dbus_dict_append_byte_array (&iter_dict,
name,
val ? val : "\0",
val ? strlen (val) : 1)) {
@@ -222,7 +218,7 @@ build_message (DBusMessage * message)
free (name);
}
- if (!wpa_dbus_dict_close_write (&iter, &iter_dict))
+ if (!_dbus_dict_close_write (&iter, &iter_dict))
goto out;
success = TRUE;
@@ -231,8 +227,9 @@ out:
return success;
}
+#if !HAVE_DBUS_GLIB_100
static DBusConnection *
-dbus_init (void)
+shared_connection_init (void)
{
DBusConnection * connection;
DBusError error;
@@ -250,10 +247,8 @@ dbus_init (void)
goto error;
}
- dbus_connection_set_exit_on_disconnect (connection, FALSE);
-
dbus_error_init (&error);
- ret = dbus_bus_request_name (connection, NM_DHCP_CLIENT_DBUS_SERVICE, 0, &error);
+ ret = dbus_bus_request_name (connection, "org.freedesktop.nm_dhcp_client", 0, &error);
if (dbus_error_is_set (&error)) {
fprintf (stderr, "Error: Could not acquire the NM DHCP client service. "
"Message: (%s) %s\n",
@@ -278,6 +273,7 @@ error:
dbus_connection_unref (connection);
return NULL;
}
+#endif
static void
fatal_error (void)
@@ -298,14 +294,27 @@ fatal_error (void)
int
main (int argc, char *argv[])
{
- DBusConnection * connection;
- DBusMessage * message;
+ DBusConnection *connection;
+ DBusMessage *message;
dbus_bool_t result;
+ DBusError error;
- /* Get a connection to the system bus */
- connection = dbus_init ();
- if (connection == NULL)
- fatal_error ();
+ dbus_connection_set_change_sigpipe (TRUE);
+
+ dbus_error_init (&error);
+ connection = dbus_connection_open_private ("unix:path=" NMRUNDIR "/private-dhcp", &error);
+ if (!connection) {
+#if !HAVE_DBUS_GLIB_100
+ connection = shared_connection_init ();
+#endif
+ if (!connection) {
+ fprintf (stderr, "Error: could not connect to NetworkManager DBus socket: (%s) %s\n",
+ error.name, error.message);
+ dbus_error_free (&error);
+ fatal_error ();
+ }
+ }
+ dbus_connection_set_exit_on_disconnect (connection, FALSE);
message = dbus_message_new_signal ("/", NM_DHCP_CLIENT_DBUS_IFACE, "Event");
if (message == NULL) {
diff --git a/callouts/nm-dhcp-client.conf b/src/dhcp-manager/nm-dhcp-helper.conf
index 0aeae6032..0aeae6032 100644
--- a/callouts/nm-dhcp-client.conf
+++ b/src/dhcp-manager/nm-dhcp-helper.conf
diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c
index d40eb48d1..ab6966cbb 100644
--- a/src/dhcp-manager/nm-dhcp-manager.c
+++ b/src/dhcp-manager/nm-dhcp-manager.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2010 Red Hat, Inc.
+ * Copyright (C) 2005 - 2013 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*
*/
@@ -37,12 +37,12 @@
#include "nm-dhcp-manager.h"
#include "nm-dhcp-dhclient.h"
#include "nm-dhcp-dhcpcd.h"
-#include "nm-marshal.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
-#include "nm-hostname-provider.h"
+#include "nm-config.h"
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
+#include "NetworkManagerUtils.h"
GQuark
nm_dhcp_manager_error_quark (void)
@@ -55,23 +55,30 @@ nm_dhcp_manager_error_quark (void)
return ret;
}
-#define NM_DHCP_CLIENT_DBUS_SERVICE "org.freedesktop.nm_dhcp_client"
#define NM_DHCP_CLIENT_DBUS_IFACE "org.freedesktop.nm_dhcp_client"
#define DHCP_TIMEOUT 45 /* default DHCP timeout, in seconds */
-static NMDHCPManager *singleton = NULL;
+#define PRIV_SOCK_PATH NMRUNDIR "/private-dhcp"
+#define PRIV_SOCK_TAG "dhcp"
+
+/* default to installed helper, but can be modified for testing */
+const char *nm_dhcp_helper_path = LIBEXECDIR "/nm-dhcp-helper";
typedef GSList * (*GetLeaseConfigFunc) (const char *iface, const char *uuid, gboolean ipv6);
typedef struct {
GType client_type;
- GetLeaseConfigFunc get_lease_config_func;
+ GetLeaseConfigFunc get_lease_ip_configs_func;
NMDBusManager * dbus_mgr;
+ guint new_conn_id;
+ guint dis_conn_id;
+ GHashTable * proxies;
+
GHashTable * clients;
DBusGProxy * proxy;
- NMHostnameProvider *hostname_provider;
+ char * default_hostname;
} NMDHCPManagerPrivate;
@@ -119,7 +126,6 @@ get_client_for_pid (NMDHCPManager *manager, GPid pid)
GHashTableIter iter;
gpointer value;
- g_return_val_if_fail (manager != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_MANAGER (manager), NULL);
priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
@@ -144,7 +150,6 @@ get_client_for_iface (NMDHCPManager *manager,
GHashTableIter iter;
gpointer value;
- g_return_val_if_fail (manager != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_MANAGER (manager), NULL);
g_return_val_if_fail (iface, NULL);
@@ -186,50 +191,46 @@ nm_dhcp_manager_handle_event (DBusGProxy *proxy,
GHashTable *options,
gpointer user_data)
{
- NMDHCPManager *manager;
- NMDHCPManagerPrivate *priv;
+ NMDHCPManager *manager = NM_DHCP_MANAGER (user_data);
NMDHCPClient *client;
char *iface = NULL;
char *pid_str = NULL;
char *reason = NULL;
- unsigned long temp;
-
- manager = NM_DHCP_MANAGER (user_data);
- priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
+ long pid;
iface = get_option (options, "interface");
if (iface == NULL) {
- nm_log_warn (LOGD_DHCP, "DHCP event didn't have associated interface.");
+ nm_log_warn (LOGD_DHCP, "DHCP event: didn't have associated interface.");
goto out;
}
pid_str = get_option (options, "pid");
- if (pid_str == NULL) {
- nm_log_warn (LOGD_DHCP, "DHCP event didn't have associated PID.");
- goto out;
- }
-
- temp = strtoul (pid_str, NULL, 10);
- if ((temp == ULONG_MAX) && (errno == ERANGE)) {
- nm_log_warn (LOGD_DHCP, "couldn't convert PID");
+ pid = nm_utils_ascii_str_to_int64 (pid_str, 10, 0, LONG_MAX, -1);
+ if (pid == -1 || pid != (GPid)pid) {
+ nm_log_warn (LOGD_DHCP, "DHCP event: couldn't convert PID '%s' to an integer", pid_str ? pid_str : "(null)");
goto out;
}
- client = get_client_for_pid (manager, (GPid) temp);
+ reason = get_option (options, "reason");
+ client = get_client_for_pid (manager, (GPid) pid);
if (client == NULL) {
- nm_log_warn (LOGD_DHCP, "(pid %ld) unhandled DHCP event for interface %s", temp, iface);
+ if (reason && g_ascii_strcasecmp (reason, "RELEASE") == 0) {
+ /* This happens regularly, when the dhcp client gets killed and we receive its last message.
+ * Don't log a warning in this case. */
+ nm_log_dbg (LOGD_DHCP, "(pid %ld) unhandled RELEASE DHCP event for interface %s", pid, iface);
+ } else
+ nm_log_warn (LOGD_DHCP, "(pid %ld) unhandled DHCP event for interface %s", pid, iface);
goto out;
}
if (strcmp (iface, nm_dhcp_client_get_iface (client))) {
nm_log_warn (LOGD_DHCP, "(pid %ld) received DHCP event from unexpected interface '%s' (expected '%s')",
- temp, iface, nm_dhcp_client_get_iface (client));
+ pid, iface, nm_dhcp_client_get_iface (client));
goto out;
}
- reason = get_option (options, "reason");
if (reason == NULL) {
- nm_log_warn (LOGD_DHCP, "(pid %ld) DHCP event didn't have a reason", temp);
+ nm_log_warn (LOGD_DHCP, "(pid %ld) DHCP event didn't have a reason", pid);
goto out;
}
@@ -241,6 +242,48 @@ out:
g_free (reason);
}
+#if HAVE_DBUS_GLIB_100
+static void
+new_connection_cb (NMDBusManager *mgr,
+ DBusGConnection *connection,
+ NMDHCPManager *self)
+{
+ NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+ DBusGProxy *proxy;
+
+ /* Create a new proxy for the client */
+ proxy = dbus_g_proxy_new_for_peer (connection, "/", NM_DHCP_CLIENT_DBUS_IFACE);
+ dbus_g_proxy_add_signal (proxy,
+ "Event",
+ DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (proxy,
+ "Event",
+ G_CALLBACK (nm_dhcp_manager_handle_event),
+ self,
+ NULL);
+ g_hash_table_insert (priv->proxies, connection, proxy);
+}
+
+static void
+dis_connection_cb (NMDBusManager *mgr,
+ DBusGConnection *connection,
+ NMDHCPManager *self)
+{
+ NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+ DBusGProxy *proxy;
+
+ proxy = g_hash_table_lookup (priv->proxies, connection);
+ if (proxy) {
+ dbus_g_proxy_disconnect_signal (proxy,
+ "Event",
+ G_CALLBACK (nm_dhcp_manager_handle_event),
+ self);
+ g_hash_table_remove (priv->proxies, connection);
+ }
+}
+#endif
+
static GType
get_client_type (const char *client, GError **error)
{
@@ -250,8 +293,10 @@ get_client_type (const char *client, GError **error)
/* If a client was disabled at build-time, its *_PATH define will be
* an empty string.
*/
+ /* coverity[array_null] */
if (DHCLIENT_PATH && strlen (DHCLIENT_PATH))
dhclient_path = nm_dhcp_dhclient_get_path (DHCLIENT_PATH);
+ /* coverity[array_null] */
if (DHCPCD_PATH && strlen (DHCPCD_PATH))
dhcpcd_path = nm_dhcp_dhcpcd_get_path (DHCPCD_PATH);
@@ -264,7 +309,7 @@ get_client_type (const char *client, GError **error)
g_set_error_literal (error,
NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
_("no usable DHCP client could be found."));
- return 0;
+ return G_TYPE_INVALID;
}
}
@@ -273,7 +318,7 @@ get_client_type (const char *client, GError **error)
g_set_error_literal (error,
NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
_("'dhclient' could be found."));
- return 0;
+ return G_TYPE_INVALID;
}
return NM_TYPE_DHCP_DHCLIENT;
}
@@ -283,7 +328,7 @@ get_client_type (const char *client, GError **error)
g_set_error_literal (error,
NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
_("'dhcpcd' could be found."));
- return 0;
+ return G_TYPE_INVALID;
}
return NM_TYPE_DHCP_DHCPCD;
}
@@ -291,54 +336,7 @@ get_client_type (const char *client, GError **error)
g_set_error (error,
NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
_("unsupported DHCP client '%s'"), client);
- return 0;
-}
-
-NMDHCPManager *
-nm_dhcp_manager_new (const char *client, GError **error)
-{
- NMDHCPManagerPrivate *priv;
- DBusGConnection *g_connection;
-
- g_warn_if_fail (singleton == NULL);
-
- singleton = g_object_new (NM_TYPE_DHCP_MANAGER, NULL);
- priv = NM_DHCP_MANAGER_GET_PRIVATE (singleton);
-
- /* Client-specific setup */
- priv->client_type = get_client_type (client, error);
- if (priv->client_type == NM_TYPE_DHCP_DHCLIENT)
- priv->get_lease_config_func = nm_dhcp_dhclient_get_lease_config;
- else if (priv->client_type == NM_TYPE_DHCP_DHCPCD)
- priv->get_lease_config_func = nm_dhcp_dhcpcd_get_lease_config;
- else {
- nm_log_warn (LOGD_DHCP, "No usable DHCP client found! DHCP configurations will fail.");
- }
-
- priv->clients = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL,
- (GDestroyNotify) g_object_unref);
- g_assert (priv->clients);
-
- priv->dbus_mgr = nm_dbus_manager_get ();
- g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
- priv->proxy = dbus_g_proxy_new_for_name (g_connection,
- NM_DHCP_CLIENT_DBUS_SERVICE,
- "/",
- NM_DHCP_CLIENT_DBUS_IFACE);
- g_assert (priv->proxy);
-
- dbus_g_proxy_add_signal (priv->proxy,
- "Event",
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (priv->proxy, "Event",
- G_CALLBACK (nm_dhcp_manager_handle_event),
- singleton,
- NULL);
-
- return singleton;
+ return G_TYPE_INVALID;
}
#define REMOVE_ID_TAG "remove-id"
@@ -372,10 +370,10 @@ add_client (NMDHCPManager *self, NMDHCPClient *client)
NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
guint id;
- id = g_signal_connect_swapped (client, "remove", G_CALLBACK (remove_client), self);
+ id = g_signal_connect_swapped (client, NM_DHCP_CLIENT_SIGNAL_REMOVE, G_CALLBACK (remove_client), self);
g_object_set_data (G_OBJECT (client), REMOVE_ID_TAG, GUINT_TO_POINTER (id));
- id = g_signal_connect_swapped (client, "timeout", G_CALLBACK (remove_client), self);
+ id = g_signal_connect_swapped (client, NM_DHCP_CLIENT_SIGNAL_TIMEOUT, G_CALLBACK (remove_client), self);
g_object_set_data (G_OBJECT (client), TIMEOUT_ID_TAG, GUINT_TO_POINTER (id));
g_hash_table_insert (priv->clients, client, g_object_ref (client));
@@ -386,11 +384,11 @@ client_start (NMDHCPManager *self,
const char *iface,
const GByteArray *hwaddr,
const char *uuid,
+ guint priority,
gboolean ipv6,
- NMSettingIP4Config *s_ip4,
- NMSettingIP6Config *s_ip6,
+ const char *dhcp_client_id,
guint32 timeout,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only)
{
@@ -421,15 +419,16 @@ client_start (NMDHCPManager *self,
NM_DHCP_CLIENT_HWADDR, hwaddr,
NM_DHCP_CLIENT_IPV6, ipv6,
NM_DHCP_CLIENT_UUID, uuid,
+ NM_DHCP_CLIENT_PRIORITY, priority,
NM_DHCP_CLIENT_TIMEOUT, timeout ? timeout : DHCP_TIMEOUT,
NULL);
g_return_val_if_fail (client != NULL, NULL);
add_client (self, client);
if (ipv6)
- success = nm_dhcp_client_start_ip6 (client, s_ip6, dhcp_anycast_addr, hostname, info_only);
+ success = nm_dhcp_client_start_ip6 (client, dhcp_anycast_addr, hostname, info_only);
else
- success = nm_dhcp_client_start_ip4 (client, s_ip4, dhcp_anycast_addr, hostname);
+ success = nm_dhcp_client_start_ip4 (client, dhcp_client_id, dhcp_anycast_addr, hostname);
if (!success) {
remove_client (self, client);
@@ -440,54 +439,42 @@ client_start (NMDHCPManager *self,
return client;
}
+static const char *
+get_send_hostname (NMDHCPManager *self, const char *setting_hostname)
+{
+ NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+
+ /* Always prefer the explicit dhcp-send-hostname if given */
+ return setting_hostname ? setting_hostname : priv->default_hostname;
+}
+
/* Caller owns a reference to the NMDHCPClient on return */
NMDHCPClient *
nm_dhcp_manager_start_ip4 (NMDHCPManager *self,
const char *iface,
const GByteArray *hwaddr,
const char *uuid,
+ guint priority,
NMSettingIP4Config *s_ip4,
guint32 timeout,
- guint8 *dhcp_anycast_addr)
+ GByteArray *dhcp_anycast_addr)
{
- NMDHCPManagerPrivate *priv;
- const char *hostname = NULL;
- gboolean send_hostname = TRUE;
+ const char *hostname = NULL, *method;
+ gboolean send_hostname;
g_return_val_if_fail (self, NULL);
g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
- priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
-
- if (s_ip4) {
- const char *method = nm_setting_ip4_config_get_method (s_ip4);
-
- if (method) {
- /* Method must be 'auto' */
- g_return_val_if_fail (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0, NULL);
- }
-
- send_hostname = nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4);
- if (send_hostname)
- hostname = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
- }
+ method = nm_setting_ip4_config_get_method (s_ip4);
+ g_return_val_if_fail (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0, NULL);
- if (send_hostname) {
- /* If we're supposed to send the hostname to the DHCP server but
- * the user didn't specify one, then use the hostname from the
- * hostname provider if there is one, otherwise use the persistent
- * hostname.
- */
- if (!hostname && priv->hostname_provider) {
- hostname = nm_hostname_provider_get_hostname (priv->hostname_provider);
- if ( hostname
- && (!strcmp (hostname, "localhost.localdomain") ||
- !strcmp (hostname, "localhost6.localdomain6")))
- hostname = NULL;
- }
- }
+ send_hostname = nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4);
+ if (send_hostname)
+ hostname = get_send_hostname (self, nm_setting_ip4_config_get_dhcp_hostname (s_ip4));
- return client_start (self, iface, hwaddr, uuid, FALSE, s_ip4, NULL, timeout, dhcp_anycast_addr, hostname, FALSE);
+ return client_start (self, iface, hwaddr, uuid, priority, FALSE,
+ nm_setting_ip4_config_get_dhcp_client_id (s_ip4),
+ timeout, dhcp_anycast_addr, hostname, FALSE);
}
/* Caller owns a reference to the NMDHCPClient on return */
@@ -496,63 +483,42 @@ nm_dhcp_manager_start_ip6 (NMDHCPManager *self,
const char *iface,
const GByteArray *hwaddr,
const char *uuid,
+ guint priority,
NMSettingIP6Config *s_ip6,
guint32 timeout,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
gboolean info_only)
{
- NMDHCPManagerPrivate *priv;
- const char *hostname = NULL;
+ const char *hostname;
- g_return_val_if_fail (self, NULL);
g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
- priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
-
- if (s_ip6)
- hostname = nm_setting_ip6_config_get_dhcp_hostname (s_ip6);
- if (!hostname && priv->hostname_provider) {
- hostname = nm_hostname_provider_get_hostname (priv->hostname_provider);
- if ( g_strcmp0 (hostname, "localhost.localdomain") == 0
- || g_strcmp0 (hostname, "localhost6.localdomain6") == 0)
- hostname = NULL;
- }
-
- return client_start (self, iface, hwaddr, uuid, TRUE, NULL, s_ip6, timeout, dhcp_anycast_addr, hostname, info_only);
-}
+ hostname = get_send_hostname (self, nm_setting_ip6_config_get_dhcp_hostname (s_ip6));
-static void
-hostname_provider_destroyed (gpointer data, GObject *destroyed_object)
-{
- NM_DHCP_MANAGER_GET_PRIVATE (data)->hostname_provider = NULL;
+ return client_start (self, iface, hwaddr, uuid, priority, TRUE,
+ NULL, timeout, dhcp_anycast_addr, hostname, info_only);
}
void
-nm_dhcp_manager_set_hostname_provider (NMDHCPManager *manager,
- NMHostnameProvider *provider)
+nm_dhcp_manager_set_default_hostname (NMDHCPManager *manager, const char *hostname)
{
- NMDHCPManagerPrivate *priv;
-
- g_return_if_fail (NM_IS_DHCP_MANAGER (manager));
+ NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
- priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
+ g_clear_pointer (&priv->default_hostname, g_free);
- if (priv->hostname_provider) {
- g_object_weak_unref (G_OBJECT (priv->hostname_provider), hostname_provider_destroyed, manager);
- priv->hostname_provider = NULL;
- }
+ /* Never send 'localhost'-type names to the DHCP server */
+ if (g_strcmp0 (hostname, "localhost.localdomain") == 0 ||
+ g_strcmp0 (hostname, "localhost6.localdomain6") == 0)
+ return;
- if (provider) {
- priv->hostname_provider = provider;
- g_object_weak_ref (G_OBJECT (provider), hostname_provider_destroyed, manager);
- }
+ priv->default_hostname = g_strdup (hostname);
}
GSList *
-nm_dhcp_manager_get_lease_config (NMDHCPManager *self,
- const char *iface,
- const char *uuid,
- gboolean ipv6)
+nm_dhcp_manager_get_lease_ip_configs (NMDHCPManager *self,
+ const char *iface,
+ const char *uuid,
+ gboolean ipv6)
{
NMDHCPManagerPrivate *priv;
@@ -562,10 +528,8 @@ nm_dhcp_manager_get_lease_config (NMDHCPManager *self,
priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
- if (priv->get_lease_config_func)
- return priv->get_lease_config_func (iface, uuid, ipv6);
-
- nm_log_warn (LOGD_DHCP, "Cannot get a DHCP lease config (no usable DHCP client was found!)");
+ if (priv->get_lease_ip_configs_func)
+ return priv->get_lease_ip_configs_func (iface, uuid, ipv6);
return NULL;
}
@@ -603,13 +567,70 @@ nm_dhcp_manager_test_ip4_options_to_config (const char *dhcp_client,
NMDHCPManager *
nm_dhcp_manager_get (void)
{
- g_warn_if_fail (singleton != NULL);
- return g_object_ref (singleton);
+ static NMDHCPManager *singleton = NULL;
+
+ if (G_UNLIKELY (singleton == NULL))
+ singleton = g_object_new (NM_TYPE_DHCP_MANAGER, NULL);
+ g_assert (singleton);
+ return singleton;
}
static void
-nm_dhcp_manager_init (NMDHCPManager *manager)
+nm_dhcp_manager_init (NMDHCPManager *self)
{
+ NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+ const char *client;
+ GError *error = NULL;
+#if !HAVE_DBUS_GLIB_100
+ DBusGConnection *g_connection;
+#endif
+
+ /* Maps DBusGConnection :: DBusGProxy */
+ priv->proxies = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref);
+
+ /* Client-specific setup */
+ client = nm_config_get_dhcp_client (nm_config_get ());
+ priv->client_type = get_client_type (client, &error);
+
+ if (priv->client_type == NM_TYPE_DHCP_DHCLIENT)
+ priv->get_lease_ip_configs_func = nm_dhcp_dhclient_get_lease_ip_configs;
+ else if (priv->client_type == G_TYPE_INVALID) {
+ nm_log_warn (LOGD_DHCP, "No usable DHCP client found (%s)! DHCP configurations will fail.",
+ error->message);
+ }
+ g_clear_error (&error);
+
+ priv->clients = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ NULL,
+ (GDestroyNotify) g_object_unref);
+ g_assert (priv->clients);
+
+ priv->dbus_mgr = nm_dbus_manager_get ();
+
+#if HAVE_DBUS_GLIB_100
+ /* Register the socket our DHCP clients will return lease info on */
+ nm_dbus_manager_private_server_register (priv->dbus_mgr, PRIV_SOCK_PATH, PRIV_SOCK_TAG);
+ priv->new_conn_id = g_signal_connect (priv->dbus_mgr,
+ NM_DBUS_MANAGER_PRIVATE_CONNECTION_NEW "::" PRIV_SOCK_TAG,
+ (GCallback) new_connection_cb,
+ self);
+ priv->dis_conn_id = g_signal_connect (priv->dbus_mgr,
+ NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED "::" PRIV_SOCK_TAG,
+ (GCallback) dis_connection_cb,
+ self);
+#else
+ g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ priv->proxy = dbus_g_proxy_new_for_name (g_connection,
+ "org.freedesktop.nm_dhcp_client",
+ "/",
+ NM_DHCP_CLIENT_DBUS_IFACE);
+ g_assert (priv->proxy);
+ dbus_g_proxy_add_signal (priv->proxy, "Event", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->proxy, "Event",
+ G_CALLBACK (nm_dhcp_manager_handle_event),
+ self,
+ NULL);
+#endif
}
static void
@@ -625,6 +646,23 @@ dispose (GObject *object)
g_list_free (values);
}
+ if (priv->new_conn_id) {
+ g_signal_handler_disconnect (priv->dbus_mgr, priv->new_conn_id);
+ priv->new_conn_id = 0;
+ }
+ if (priv->dis_conn_id) {
+ g_signal_handler_disconnect (priv->dbus_mgr, priv->dis_conn_id);
+ priv->dis_conn_id = 0;
+ }
+ priv->dbus_mgr = NULL;
+
+ if (priv->proxies) {
+ g_hash_table_destroy (priv->proxies);
+ priv->proxies = NULL;
+ }
+ if (priv->proxy)
+ g_object_unref (priv->proxy);
+
G_OBJECT_CLASS (nm_dhcp_manager_parent_class)->dispose (object);
}
@@ -633,17 +671,10 @@ finalize (GObject *object)
{
NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (object);
- if (priv->hostname_provider) {
- g_object_weak_unref (G_OBJECT (priv->hostname_provider), hostname_provider_destroyed, object);
- priv->hostname_provider = NULL;
- }
+ g_free (priv->default_hostname);
if (priv->clients)
g_hash_table_destroy (priv->clients);
- if (priv->proxy)
- g_object_unref (priv->proxy);
- if (priv->dbus_mgr)
- g_object_unref (priv->dbus_mgr);
G_OBJECT_CLASS (nm_dhcp_manager_parent_class)->finalize (object);
}
@@ -659,4 +690,3 @@ nm_dhcp_manager_class_init (NMDHCPManagerClass *manager_class)
object_class->finalize = finalize;
object_class->dispose = dispose;
}
-
diff --git a/src/dhcp-manager/nm-dhcp-manager.h b/src/dhcp-manager/nm-dhcp-manager.h
index a29a33fdb..efdd43788 100644
--- a/src/dhcp-manager/nm-dhcp-manager.h
+++ b/src/dhcp-manager/nm-dhcp-manager.h
@@ -31,7 +31,6 @@
#include "nm-dhcp-client.h"
#include "nm-ip4-config.h"
#include "nm-dhcp4-config.h"
-#include "nm-hostname-provider.h"
typedef enum {
NM_DHCP_MANAGER_ERROR_BAD_CLIENT = 0, /*< nick=BadClient >*/
@@ -60,32 +59,34 @@ typedef struct {
GType nm_dhcp_manager_get_type (void);
-NMDHCPManager *nm_dhcp_manager_get (void);
+NMDHCPManager *nm_dhcp_manager_get (void);
-void nm_dhcp_manager_set_hostname_provider(NMDHCPManager *manager,
- NMHostnameProvider *provider);
+void nm_dhcp_manager_set_default_hostname (NMDHCPManager *manager,
+ const char *hostname);
NMDHCPClient * nm_dhcp_manager_start_ip4 (NMDHCPManager *manager,
const char *iface,
const GByteArray *hwaddr,
const char *uuid,
+ guint priority,
NMSettingIP4Config *s_ip4,
guint32 timeout,
- guint8 *dhcp_anycast_addr);
+ GByteArray *dhcp_anycast_addr);
NMDHCPClient * nm_dhcp_manager_start_ip6 (NMDHCPManager *manager,
const char *iface,
const GByteArray *hwaddr,
const char *uuid,
+ guint priority,
NMSettingIP6Config *s_ip6,
guint32 timeout,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
gboolean info_only);
-GSList * nm_dhcp_manager_get_lease_config (NMDHCPManager *self,
- const char *iface,
- const char *uuid,
- gboolean ipv6);
+GSList * nm_dhcp_manager_get_lease_ip_configs (NMDHCPManager *self,
+ const char *iface,
+ const char *uuid,
+ gboolean ipv6);
/* For testing only */
NMIP4Config *nm_dhcp_manager_test_ip4_options_to_config (const char *dhcp_client,
@@ -93,7 +94,6 @@ NMIP4Config *nm_dhcp_manager_test_ip4_options_to_config (const char *dhcp_client
GHashTable *options,
const char *reason);
-/* Only for main.c */
-NMDHCPManager *nm_dhcp_manager_new (const char *client, GError **error);
+extern const char* nm_dhcp_helper_path;
#endif /* NM_DHCP_MANAGER_H */
diff --git a/src/dhcp-manager/tests/Makefile.am b/src/dhcp-manager/tests/Makefile.am
index bf859fe71..6ef828d57 100644
--- a/src/dhcp-manager/tests/Makefile.am
+++ b/src/dhcp-manager/tests/Makefile.am
@@ -1,12 +1,15 @@
-if ENABLE_TESTS
-
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I${top_srcdir}/libnm-util \
-I${top_builddir}/libnm-util \
-I$(top_srcdir)/src/dhcp-manager \
- $(GLIB_CFLAGS)
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/platform \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ -DTESTDIR="\"$(abs_srcdir)\""
noinst_PROGRAMS = test-dhcp-dhclient
@@ -15,22 +18,16 @@ noinst_PROGRAMS = test-dhcp-dhclient
test_dhcp_dhclient_SOURCES = \
test-dhcp-dhclient.c
-test_dhcp_dhclient_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DTESTDIR="\"$(abs_srcdir)\""
-
test_dhcp_dhclient_LDADD = \
- -ldl \
- $(top_builddir)/src/dhcp-manager/libdhcp-dhclient.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
-
-check-local: test-dhcp-dhclient
- $(abs_builddir)/test-dhcp-dhclient
+ $(top_builddir)/src/libNetworkManager.la
-endif
+TESTS = test-dhcp-dhclient
EXTRA_DIST = \
test-dhclient-duid.leases \
- test-dhclient-commented-duid.leases
+ test-dhclient-commented-duid.leases \
+ leases/basic.leases \
+ leases/malformed1.leases \
+ leases/malformed2.leases \
+ leases/malformed3.leases
diff --git a/src/dhcp-manager/tests/Makefile.in b/src/dhcp-manager/tests/Makefile.in
index afcee2c06..d445838f0 100644
--- a/src/dhcp-manager/tests/Makefile.in
+++ b/src/dhcp-manager/tests/Makefile.in
@@ -78,12 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-dhcp-dhclient$(EXEEXT)
+noinst_PROGRAMS = test-dhcp-dhclient$(EXEEXT)
+TESTS = test-dhcp-dhclient$(EXEEXT)
subdir = src/dhcp-manager/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,13 +104,10 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_dhcp_dhclient_SOURCES_DIST = test-dhcp-dhclient.c
-@ENABLE_TESTS_TRUE@am_test_dhcp_dhclient_OBJECTS = test_dhcp_dhclient-test-dhcp-dhclient.$(OBJEXT)
+am_test_dhcp_dhclient_OBJECTS = test-dhcp-dhclient.$(OBJEXT)
test_dhcp_dhclient_OBJECTS = $(am_test_dhcp_dhclient_OBJECTS)
-am__DEPENDENCIES_1 =
-@ENABLE_TESTS_TRUE@test_dhcp_dhclient_DEPENDENCIES = $(top_builddir)/src/dhcp-manager/libdhcp-dhclient.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+test_dhcp_dhclient_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -148,7 +147,7 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(test_dhcp_dhclient_SOURCES)
-DIST_SOURCES = $(am__test_dhcp_dhclient_SOURCES_DIST)
+DIST_SOURCES = $(test_dhcp_dhclient_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -173,6 +172,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -199,12 +220,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -229,7 +253,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -274,12 +297,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -296,6 +323,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -323,11 +352,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -342,6 +376,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -404,6 +439,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -414,32 +450,35 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
-@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
-@ENABLE_TESTS_TRUE@ -I${top_srcdir}/libnm-util \
-@ENABLE_TESTS_TRUE@ -I${top_builddir}/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/dhcp-manager \
-@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS)
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I${top_srcdir}/libnm-util \
+ -I${top_builddir}/libnm-util \
+ -I$(top_srcdir)/src/dhcp-manager \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/platform \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ -DTESTDIR="\"$(abs_srcdir)\""
####### policy /etc/hosts test #######
-@ENABLE_TESTS_TRUE@test_dhcp_dhclient_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-dhcp-dhclient.c
-
-@ENABLE_TESTS_TRUE@test_dhcp_dhclient_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ $(AM_CPPFLAGS) \
-@ENABLE_TESTS_TRUE@ -DTESTDIR="\"$(abs_srcdir)\""
+test_dhcp_dhclient_SOURCES = \
+ test-dhcp-dhclient.c
-@ENABLE_TESTS_TRUE@test_dhcp_dhclient_LDADD = \
-@ENABLE_TESTS_TRUE@ -ldl \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/dhcp-manager/libdhcp-dhclient.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(GLIB_LIBS)
+test_dhcp_dhclient_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
EXTRA_DIST = \
test-dhclient-duid.leases \
- test-dhclient-commented-duid.leases
+ test-dhclient-commented-duid.leases \
+ leases/basic.leases \
+ leases/malformed1.leases \
+ leases/malformed2.leases \
+ leases/malformed3.leases
all: all-am
@@ -495,7 +534,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dhcp_dhclient-test-dhcp-dhclient.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dhcp-dhclient.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -518,20 +557,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-test_dhcp_dhclient-test-dhcp-dhclient.o: test-dhcp-dhclient.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dhcp_dhclient_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_dhcp_dhclient-test-dhcp-dhclient.o -MD -MP -MF $(DEPDIR)/test_dhcp_dhclient-test-dhcp-dhclient.Tpo -c -o test_dhcp_dhclient-test-dhcp-dhclient.o `test -f 'test-dhcp-dhclient.c' || echo '$(srcdir)/'`test-dhcp-dhclient.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_dhcp_dhclient-test-dhcp-dhclient.Tpo $(DEPDIR)/test_dhcp_dhclient-test-dhcp-dhclient.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-dhcp-dhclient.c' object='test_dhcp_dhclient-test-dhcp-dhclient.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dhcp_dhclient_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_dhcp_dhclient-test-dhcp-dhclient.o `test -f 'test-dhcp-dhclient.c' || echo '$(srcdir)/'`test-dhcp-dhclient.c
-
-test_dhcp_dhclient-test-dhcp-dhclient.obj: test-dhcp-dhclient.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dhcp_dhclient_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_dhcp_dhclient-test-dhcp-dhclient.obj -MD -MP -MF $(DEPDIR)/test_dhcp_dhclient-test-dhcp-dhclient.Tpo -c -o test_dhcp_dhclient-test-dhcp-dhclient.obj `if test -f 'test-dhcp-dhclient.c'; then $(CYGPATH_W) 'test-dhcp-dhclient.c'; else $(CYGPATH_W) '$(srcdir)/test-dhcp-dhclient.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_dhcp_dhclient-test-dhcp-dhclient.Tpo $(DEPDIR)/test_dhcp_dhclient-test-dhcp-dhclient.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-dhcp-dhclient.c' object='test_dhcp_dhclient-test-dhcp-dhclient.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dhcp_dhclient_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_dhcp_dhclient-test-dhcp-dhclient.obj `if test -f 'test-dhcp-dhclient.c'; then $(CYGPATH_W) 'test-dhcp-dhclient.c'; else $(CYGPATH_W) '$(srcdir)/test-dhcp-dhclient.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
@@ -590,6 +615,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -620,9 +738,8 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
@@ -729,7 +846,7 @@ uninstall-am:
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
@@ -744,9 +861,6 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-@ENABLE_TESTS_TRUE@check-local: test-dhcp-dhclient
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-dhcp-dhclient
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/dhcp-manager/tests/leases/basic.leases b/src/dhcp-manager/tests/leases/basic.leases
new file mode 100644
index 000000000..703d92479
--- /dev/null
+++ b/src/dhcp-manager/tests/leases/basic.leases
@@ -0,0 +1,31 @@
+lease {
+ interface "wlan0";
+ fixed-address 192.168.1.180;
+ option subnet-mask 255.255.255.0;
+ option routers 192.168.1.1;
+ option dhcp-lease-time 600;
+ option dhcp-message-type 5;
+ option domain-name-servers 192.168.1.1;
+ option dhcp-server-identifier 192.168.1.1;
+ option broadcast-address 192.168.1.255;
+ renew 5 2013/11/01 19:56:15;
+ rebind 5 2013/11/01 20:00:44;
+ expire 5 2013/11/01 20:01:59;
+}
+lease {
+ interface "wlan0";
+ fixed-address 10.77.52.141;
+ option subnet-mask 255.0.0.0;
+ option dhcp-lease-time 1200;
+ option routers 10.77.52.254;
+ option dhcp-message-type 5;
+ option dhcp-server-identifier 10.77.52.254;
+ option domain-name-servers 8.8.8.8,8.8.4.4;
+ option dhcp-renewal-time 600;
+ option dhcp-rebinding-time 1050;
+ option domain-name "morriesguest.local";
+ renew 5 2013/11/01 20:01:08;
+ rebind 5 2013/11/01 20:05:00;
+ expire 5 2013/11/01 20:06:15;
+}
+
diff --git a/src/dhcp-manager/tests/leases/malformed1.leases b/src/dhcp-manager/tests/leases/malformed1.leases
new file mode 100644
index 000000000..401d982ad
--- /dev/null
+++ b/src/dhcp-manager/tests/leases/malformed1.leases
@@ -0,0 +1,15 @@
+# missing fixed-address option
+lease {
+ interface "wlan0";
+ option subnet-mask 255.255.255.0;
+ option routers 192.168.1.1;
+ option dhcp-lease-time 600;
+ option dhcp-message-type 5;
+ option domain-name-servers 192.168.1.1;
+ option dhcp-server-identifier 192.168.1.1;
+ option broadcast-address 192.168.1.255;
+ renew 5 2013/11/01 19:56:15;
+ rebind 5 2013/11/01 20:00:44;
+ expire 5 2013/11/01 20:01:59;
+}
+
diff --git a/src/dhcp-manager/tests/leases/malformed2.leases b/src/dhcp-manager/tests/leases/malformed2.leases
new file mode 100644
index 000000000..adf5f6dec
--- /dev/null
+++ b/src/dhcp-manager/tests/leases/malformed2.leases
@@ -0,0 +1,15 @@
+# missing routers option
+lease {
+ interface "wlan0";
+ fixed-address 192.168.1.180;
+ option subnet-mask 255.255.255.0;
+ option dhcp-lease-time 600;
+ option dhcp-message-type 5;
+ option domain-name-servers 192.168.1.1;
+ option dhcp-server-identifier 192.168.1.1;
+ option broadcast-address 192.168.1.255;
+ renew 5 2013/11/01 19:56:15;
+ rebind 5 2013/11/01 20:00:44;
+ expire 5 2013/11/01 20:01:59;
+}
+
diff --git a/src/dhcp-manager/tests/leases/malformed3.leases b/src/dhcp-manager/tests/leases/malformed3.leases
new file mode 100644
index 000000000..a2afc8b6c
--- /dev/null
+++ b/src/dhcp-manager/tests/leases/malformed3.leases
@@ -0,0 +1,15 @@
+# missing expire time
+lease {
+ interface "wlan0";
+ fixed-address 192.168.1.180;
+ option subnet-mask 255.255.255.0;
+ option routers 192.168.1.1;
+ option dhcp-lease-time 600;
+ option dhcp-message-type 5;
+ option domain-name-servers 192.168.1.1;
+ option dhcp-server-identifier 192.168.1.1;
+ option broadcast-address 192.168.1.255;
+ renew 5 2013/11/01 19:56:15;
+ rebind 5 2013/11/01 20:00:44;
+}
+
diff --git a/src/dhcp-manager/tests/test-dhcp-dhclient.c b/src/dhcp-manager/tests/test-dhcp-dhclient.c
index 3f34c6e07..1ab182a7c 100644
--- a/src/dhcp-manager/tests/test-dhcp-dhclient.c
+++ b/src/dhcp-manager/tests/test-dhcp-dhclient.c
@@ -24,6 +24,7 @@
#include "nm-dhcp-dhclient-utils.h"
#include "nm-utils.h"
+#include "nm-ip4-config.h"
#define DEBUG 0
@@ -33,18 +34,13 @@ test_config (const char *orig,
const char *hostname,
const char *dhcp_client_id,
const char *iface,
- guint8 *anycast_addr)
+ GByteArray *anycast_addr)
{
- NMSettingIP4Config *s_ip4;
char *new;
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, dhcp_client_id, NULL);
-
new = nm_dhcp_dhclient_create_config (iface,
FALSE,
- s_ip4,
- NULL,
+ dhcp_client_id,
anycast_addr,
hostname,
"/path/to/dhclient.conf",
@@ -127,6 +123,62 @@ test_override_client_id (void)
/*******************************************/
+static const char *quote_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "\n"
+ "send dhcp-client-identifier \"1234\"; # added by NetworkManager\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_quote_client_id (void)
+{
+ test_config (NULL, quote_client_id_expected,
+ NULL,
+ "1234",
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *ascii_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "\n"
+ "send dhcp-client-identifier \"qb:cd:ef:12:34:56\"; # added by NetworkManager\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_ascii_client_id (void)
+{
+ test_config (NULL, ascii_client_id_expected,
+ NULL,
+ "qb:cd:ef:12:34:56",
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
static const char *override_hostname_orig = \
"send host-name \"foobar\";\n";
@@ -398,37 +450,164 @@ test_write_existing_commented_duid (void)
/*******************************************/
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
+static void
+test_read_lease_ip4_config_basic (void)
+{
+ GError *error = NULL;
+ char *contents = NULL;
+ gboolean success;
+ const char *path = TESTDIR "/leases/basic.leases";
+ GSList *leases;
+ GDateTime *now;
+ NMIP4Config *config;
+ const NMPlatformIP4Address *addr;
+ guint32 expected_addr;
+
+ success = g_file_get_contents (path, &contents, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success);
-#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
+ /* Date from before the least expiration */
+ now = g_date_time_new_utc (2013, 11, 1, 19, 55, 32);
+ leases = nm_dhcp_dhclient_read_lease_ip_configs ("wlan0", contents, FALSE, now);
+ g_assert_cmpint (g_slist_length (leases), ==, 2);
+
+ /* IP4Config #1 */
+ config = g_slist_nth_data (leases, 0);
+ g_assert (NM_IS_IP4_CONFIG (config));
+
+ /* Address */
+ g_assert_cmpint (nm_ip4_config_get_num_addresses (config), ==, 1);
+ g_assert (inet_aton ("192.168.1.180", (struct in_addr *) &expected_addr));
+ addr = nm_ip4_config_get_address (config, 0);
+ g_assert_cmpint (addr->address, ==, expected_addr);
+ g_assert_cmpint (addr->plen, ==, 24);
+
+ /* Gateway */
+ g_assert (inet_aton ("192.168.1.1", (struct in_addr *) &expected_addr));
+ g_assert_cmpint (nm_ip4_config_get_gateway (config), ==, expected_addr);
+
+ /* DNS */
+ g_assert_cmpint (nm_ip4_config_get_num_nameservers (config), ==, 1);
+ g_assert (inet_aton ("192.168.1.1", (struct in_addr *) &expected_addr));
+ g_assert_cmpint (nm_ip4_config_get_nameserver (config, 0), ==, expected_addr);
+
+ g_assert_cmpint (nm_ip4_config_get_num_domains (config), ==, 0);
+
+ /* IP4Config #2 */
+ config = g_slist_nth_data (leases, 1);
+ g_assert (NM_IS_IP4_CONFIG (config));
+
+ /* Address */
+ g_assert_cmpint (nm_ip4_config_get_num_addresses (config), ==, 1);
+ g_assert (inet_aton ("10.77.52.141", (struct in_addr *) &expected_addr));
+ addr = nm_ip4_config_get_address (config, 0);
+ g_assert_cmpint (addr->address, ==, expected_addr);
+ g_assert_cmpint (addr->plen, ==, 8);
+
+ /* Gateway */
+ g_assert (inet_aton ("10.77.52.254", (struct in_addr *) &expected_addr));
+ g_assert_cmpint (nm_ip4_config_get_gateway (config), ==, expected_addr);
+
+ /* DNS */
+ g_assert_cmpint (nm_ip4_config_get_num_nameservers (config), ==, 2);
+ g_assert (inet_aton ("8.8.8.8", (struct in_addr *) &expected_addr));
+ g_assert_cmpint (nm_ip4_config_get_nameserver (config, 0), ==, expected_addr);
+ g_assert (inet_aton ("8.8.4.4", (struct in_addr *) &expected_addr));
+ g_assert_cmpint (nm_ip4_config_get_nameserver (config, 1), ==, expected_addr);
+
+ /* Domains */
+ g_assert_cmpint (nm_ip4_config_get_num_domains (config), ==, 1);
+ g_assert_cmpstr (nm_ip4_config_get_domain (config, 0), ==, "morriesguest.local");
+
+ g_slist_free_full (leases, g_object_unref);
+ g_date_time_unref (now);
+ g_free (contents);
+}
-int main (int argc, char **argv)
+static void
+test_read_lease_ip4_config_expired (void)
{
- GTestSuite *suite;
+ GError *error = NULL;
+ char *contents = NULL;
+ gboolean success;
+ const char *path = TESTDIR "/leases/basic.leases";
+ GSList *leases;
+ GDateTime *now;
- g_test_init (&argc, &argv, NULL);
+ success = g_file_get_contents (path, &contents, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success);
- g_type_init ();
+ /* Date from *after* the lease expiration */
+ now = g_date_time_new_utc (2013, 12, 1, 19, 55, 32);
+ leases = nm_dhcp_dhclient_read_lease_ip_configs ("wlan0", contents, FALSE, now);
+ g_assert (leases == NULL);
+
+ g_date_time_unref (now);
+ g_free (contents);
+}
+
+static void
+test_read_lease_ip4_config_expect_failure (gconstpointer user_data)
+{
+ GError *error = NULL;
+ char *contents = NULL;
+ gboolean success;
+ GSList *leases;
+ GDateTime *now;
+
+ success = g_file_get_contents ((const char *) user_data, &contents, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Date from before the least expiration */
+ now = g_date_time_new_utc (2013, 11, 1, 1, 1, 1);
+ leases = nm_dhcp_dhclient_read_lease_ip_configs ("wlan0", contents, FALSE, now);
+ g_assert (leases == NULL);
- suite = g_test_get_root ();
+ g_date_time_unref (now);
+ g_free (contents);
+}
- g_test_suite_add (suite, TESTCASE (test_orig_missing, NULL));
- g_test_suite_add (suite, TESTCASE (test_override_client_id, NULL));
- g_test_suite_add (suite, TESTCASE (test_override_hostname, NULL));
- g_test_suite_add (suite, TESTCASE (test_existing_alsoreq, NULL));
- g_test_suite_add (suite, TESTCASE (test_existing_multiline_alsoreq, NULL));
- g_test_suite_add (suite, TESTCASE (test_duids, NULL));
+/*******************************************/
- g_test_suite_add (suite, TESTCASE (test_read_duid_from_leasefile, NULL));
- g_test_suite_add (suite, TESTCASE (test_read_commented_duid_from_leasefile, NULL));
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
- g_test_suite_add (suite, TESTCASE (test_write_duid, NULL));
- g_test_suite_add (suite, TESTCASE (test_write_existing_duid, NULL));
- g_test_suite_add (suite, TESTCASE (test_write_existing_commented_duid, NULL));
+ g_test_add_func ("/dhcp/dhclient/orig_missing", test_orig_missing);
+ g_test_add_func ("/dhcp/dhclient/override_client_id", test_override_client_id);
+ g_test_add_func ("/dhcp/dhclient/quote_client_id", test_quote_client_id);
+ g_test_add_func ("/dhcp/dhclient/ascii_client_id", test_ascii_client_id);
+ g_test_add_func ("/dhcp/dhclient/override_hostname", test_override_hostname);
+ g_test_add_func ("/dhcp/dhclient/existing_alsoreq", test_existing_alsoreq);
+ g_test_add_func ("/dhcp/dhclient/existing_multiline_alsoreq", test_existing_multiline_alsoreq);
+ g_test_add_func ("/dhcp/dhclient/duids", test_duids);
+
+ g_test_add_func ("/dhcp/dhclient/read_duid_from_leasefile", test_read_duid_from_leasefile);
+ g_test_add_func ("/dhcp/dhclient/read_commented_duid_from_leasefile", test_read_commented_duid_from_leasefile);
+
+ g_test_add_func ("/dhcp/dhclient/write_duid", test_write_duid);
+ g_test_add_func ("/dhcp/dhclient/write_existing_duid", test_write_existing_duid);
+ g_test_add_func ("/dhcp/dhclient/write_existing_commented_duid", test_write_existing_commented_duid);
+
+ g_test_add_func ("/dhcp/dhclient/leases/ip4-config/basic", test_read_lease_ip4_config_basic);
+ g_test_add_func ("/dhcp/dhclient/leases/ip4-config/expired", test_read_lease_ip4_config_expired);
+ g_test_add_data_func ("/dhcp/dhclient/leases/ip4-config/missing-address",
+ TESTDIR "/leases/malformed1.leases",
+ test_read_lease_ip4_config_expect_failure);
+ g_test_add_data_func ("/dhcp/dhclient/leases/ip4-config/missing-gateway",
+ TESTDIR "/leases/malformed2.leases",
+ test_read_lease_ip4_config_expect_failure);
+ g_test_add_data_func ("/dhcp/dhclient/leases/ip4-config/missing-expire",
+ TESTDIR "/leases/malformed3.leases",
+ test_read_lease_ip4_config_expect_failure);
return g_test_run ();
}
diff --git a/src/dns-manager/Makefile.am b/src/dns-manager/Makefile.am
deleted file mode 100644
index 4aa20c721..000000000
--- a/src/dns-manager/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-noinst_LTLIBRARIES = libdns-manager.la
-
-libdns_manager_la_CPPFLAGS = \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/src \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- $(LIBNL_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DLOCALSTATEDIR=\"$(localstatedir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DNMCONFDIR=\"$(nmconfdir)\" \
- -DNMRUNDIR=\"$(nmrundir)\"
-
-libdns_manager_la_SOURCES = \
- nm-dns-manager.h \
- nm-dns-manager.c \
- nm-dns-plugin.h \
- nm-dns-plugin.c \
- nm-dns-dnsmasq.h \
- nm-dns-dnsmasq.c \
- nm-dns-utils.h \
- nm-dns-utils.c
-
-libdns_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(LIBNL_LIBS) \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
index 1f6e5868d..8367693da 100644
--- a/src/dns-manager/nm-dns-dnsmasq.c
+++ b/src/dns-manager/nm-dns-dnsmasq.c
@@ -30,6 +30,7 @@
#include <glib/gi18n.h>
#include "nm-dns-dnsmasq.h"
+#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
@@ -72,7 +73,7 @@ find_dnsmasq (void)
static gboolean
add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split)
{
- char buf[INET_ADDRSTRLEN + 1];
+ char buf[INET_ADDRSTRLEN];
in_addr_t addr;
int nnameservers, i_nameserver, n, i;
gboolean added = FALSE;
@@ -87,9 +88,7 @@ add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split)
for (i_nameserver = 0; i_nameserver < nnameservers; i_nameserver++) {
addr = nm_ip4_config_get_nameserver (ip4, i_nameserver);
- memset (&buf[0], 0, sizeof (buf));
- if (!inet_ntop (AF_INET, &addr, buf, sizeof (buf)))
- return FALSE;
+ nm_utils_inet4_ntop (addr, buf);
/* searches are preferred over domains */
n = nm_ip4_config_get_num_searches (ip4);
@@ -127,59 +126,34 @@ add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split)
/* If no searches or domains, just add the namservers */
if (!added) {
for (i = 0; i < nnameservers; i++) {
- memset (&buf[0], 0, sizeof (buf));
addr = nm_ip4_config_get_nameserver (ip4, i);
- if (inet_ntop (AF_INET, &addr, buf, sizeof (buf)))
- g_string_append_printf (str, "server=%s\n", buf);
+ g_string_append_printf (str, "server=%s\n", nm_utils_inet4_ntop (addr, NULL));
}
}
return TRUE;
}
-#define IP6_ADDR_BUFLEN (INET6_ADDRSTRLEN + 50)
-
static char *
ip6_addr_to_string (const struct in6_addr *addr, const char *iface)
{
- char *buf, *p;
-
- /* allocate enough space for the address + interface name */
- buf = g_malloc0 (IP6_ADDR_BUFLEN + 1);
+ char *buf;
- /* inet_ntop is probably supposed to do this for us, but it doesn't */
if (IN6_IS_ADDR_V4MAPPED (addr)) {
- if (!inet_ntop (AF_INET, &(addr->s6_addr32[3]), buf, IP6_ADDR_BUFLEN))
- goto error;
- return buf;
- }
-
- if (!inet_ntop (AF_INET6, addr, buf, IP6_ADDR_BUFLEN))
- goto error;
-
- /* In the case of addr being a link-local address, inet_ntop can either
- * return an address with scope identifier already in place (like
- * fe80::202:b3ff:fe8d:7aaf%wlan0) or it returns an address without
- * scope identifier at all (like fe80::202:b3ff:fe8d:7aaf)
- */
- p = strchr (buf, '%');
- if (p) {
- /* If we got a scope identifier, we need to replace the '%'
- * with '@', since dnsmasq supports '%' in server= addresses
+ /* inet_ntop is probably supposed to do this for us, but it doesn't */
+ buf = g_malloc (INET_ADDRSTRLEN);
+ nm_utils_inet4_ntop (addr->s6_addr32[3], buf);
+ } else if (!iface || !iface[0] || !IN6_IS_ADDR_LINKLOCAL (addr)) {
+ buf = g_malloc (INET6_ADDRSTRLEN);
+ nm_utils_inet6_ntop (addr, buf);
+ } else {
+ /* If we got a scope identifier, we need use '%' instead of
+ * '@', since dnsmasq supports '%' in server= addresses
* only since version 2.58 and up
*/
- *p = '@';
- } else if (IN6_IS_ADDR_LINKLOCAL (addr)) {
- /* If we got no scope identifier at all append the interface name */
- strncat (buf, "@", IP6_ADDR_BUFLEN - strlen (buf));
- strncat (buf, iface, IP6_ADDR_BUFLEN - strlen (buf));
+ buf = g_strconcat (nm_utils_inet6_ntop (addr, NULL), "@", iface, NULL);
}
-
return buf;
-
-error:
- g_free (buf);
- return NULL;
}
static gboolean
@@ -203,8 +177,6 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split)
for (i_nameserver = 0; i_nameserver < nnameservers; i_nameserver++) {
addr = nm_ip6_config_get_nameserver (ip6, i_nameserver);
buf = ip6_addr_to_string (addr, iface);
- if (!buf)
- return FALSE;
/* searches are preferred over domains */
n = nm_ip6_config_get_num_searches (ip6);
@@ -225,9 +197,9 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split)
added = TRUE;
}
}
- }
- g_free (buf);
+ g_free (buf);
+ }
}
/* If no searches or domains, just add the namservers */
@@ -386,12 +358,6 @@ child_quit (NMDnsPlugin *plugin, gint status)
/****************************************************************/
static gboolean
-init (NMDnsPlugin *plugin)
-{
- return TRUE;
-}
-
-static gboolean
is_caching (NMDnsPlugin *plugin)
{
return TRUE;
@@ -405,10 +371,10 @@ get_name (NMDnsPlugin *plugin)
/****************************************************************/
-NMDnsDnsmasq *
+NMDnsPlugin *
nm_dns_dnsmasq_new (void)
{
- return (NMDnsDnsmasq *) g_object_new (NM_TYPE_DNS_DNSMASQ, NULL);
+ return g_object_new (NM_TYPE_DNS_DNSMASQ, NULL);
}
static void
@@ -434,7 +400,6 @@ nm_dns_dnsmasq_class_init (NMDnsDnsmasqClass *dns_class)
object_class->dispose = dispose;
- plugin_class->init = init;
plugin_class->child_quit = child_quit;
plugin_class->is_caching = is_caching;
plugin_class->update = update;
diff --git a/src/dns-manager/nm-dns-dnsmasq.h b/src/dns-manager/nm-dns-dnsmasq.h
index 01ec57913..70933c0f1 100644
--- a/src/dns-manager/nm-dns-dnsmasq.h
+++ b/src/dns-manager/nm-dns-dnsmasq.h
@@ -41,7 +41,7 @@ typedef struct {
GType nm_dns_dnsmasq_get_type (void);
-NMDnsDnsmasq *nm_dns_dnsmasq_new (void);
+NMDnsPlugin *nm_dns_dnsmasq_new (void);
#endif /* NM_DNS_DNSMASQ_H */
diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c
index fb426637f..466aa9a84 100644
--- a/src/dns-manager/nm-dns-manager.c
+++ b/src/dns-manager/nm-dns-manager.c
@@ -23,17 +23,16 @@
#include "config.h"
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
#include <errno.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <sys/wait.h>
+#include <fcntl.h>
+#include <resolv.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
#include <unistd.h>
-#include <glib.h>
+#include <linux/fs.h>
+
+#include <glib.h>
#include <glib/gi18n.h>
#include "nm-dns-manager.h"
@@ -42,15 +41,27 @@
#include "nm-logging.h"
#include "NetworkManagerUtils.h"
#include "nm-posix-signals.h"
+#include "nm-config.h"
#include "nm-dns-plugin.h"
#include "nm-dns-dnsmasq.h"
+#include "nm-dns-unbound.h"
+
+#if HAVE_LIBSOUP
+#include <libsoup/soup.h>
-#ifndef RESOLV_CONF
-#define RESOLV_CONF "/etc/resolv.conf"
+#ifdef SOUP_CHECK_VERSION
+#if SOUP_CHECK_VERSION (2, 40, 0)
+#define DOMAIN_IS_VALID(domain) (*(domain) && !soup_tld_domain_is_public_suffix (domain))
+#endif
+#endif
#endif
-G_DEFINE_TYPE(NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
+#ifndef DOMAIN_IS_VALID
+#define DOMAIN_IS_VALID(domain) (*(domain))
+#endif
+
+G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
#define NM_DNS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_DNS_MANAGER, \
@@ -59,8 +70,6 @@ G_DEFINE_TYPE(NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
#define HASH_LEN 20
typedef struct {
- gboolean disposed;
-
NMIP4Config *ip4_vpn_config;
NMIP4Config *ip4_device_config;
NMIP6Config *ip6_vpn_config;
@@ -72,7 +81,8 @@ typedef struct {
guint8 hash[HASH_LEN]; /* SHA1 hash of current DNS config */
guint8 prev_hash[HASH_LEN]; /* Hash when begin_updates() was called */
- GSList *plugins;
+ NMDnsManagerResolvConfMode resolv_conf_mode;
+ NMDnsPlugin *plugin;
gboolean dns_touched;
} NMDnsManagerPrivate;
@@ -88,7 +98,6 @@ static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
GPtrArray *nameservers;
- const char *domain;
GPtrArray *searches;
const char *nis_domain;
GPtrArray *nis_servers;
@@ -121,10 +130,10 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
num = nm_ip4_config_get_num_nameservers (src);
for (i = 0; i < num; i++) {
- struct in_addr addr;
+ guint32 addr;
char buf[INET_ADDRSTRLEN];
- addr.s_addr = nm_ip4_config_get_nameserver (src, i);
+ addr = nm_ip4_config_get_nameserver (src, i);
if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
add_string_item (rc->nameservers, buf);
}
@@ -134,22 +143,28 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
const char *domain;
domain = nm_ip4_config_get_domain (src, i);
- if (!rc->domain)
- rc->domain = domain;
+ if (!DOMAIN_IS_VALID (domain))
+ continue;
add_string_item (rc->searches, domain);
}
num = nm_ip4_config_get_num_searches (src);
- for (i = 0; i < num; i++)
- add_string_item (rc->searches, nm_ip4_config_get_search (src, i));
+ for (i = 0; i < num; i++) {
+ const char *search;
+
+ search = nm_ip4_config_get_search (src, i);
+ if (!DOMAIN_IS_VALID (search))
+ continue;
+ add_string_item (rc->searches, search);
+ }
/* NIS stuff */
num = nm_ip4_config_get_num_nis_servers (src);
for (i = 0; i < num; i++) {
- struct in_addr addr;
+ guint32 addr;
char buf[INET_ADDRSTRLEN];
- addr.s_addr = nm_ip4_config_get_nis_server (src, i);
+ addr = nm_ip4_config_get_nis_server (src, i);
if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
add_string_item (rc->nis_servers, buf);
}
@@ -168,7 +183,6 @@ merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src)
const char *iface;
iface = g_object_get_data (G_OBJECT (src), IP_CONFIG_IFACE_TAG);
- g_assert (iface);
num = nm_ip6_config_get_num_nameservers (src);
for (i = 0; i < num; i++) {
@@ -184,7 +198,7 @@ merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src)
add_string_item (rc->nameservers, buf);
} else {
if (inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN) > 0) {
- if (IN6_IS_ADDR_LINKLOCAL (addr) && strchr (buf, '%') == NULL) {
+ if (iface && IN6_IS_ADDR_LINKLOCAL (addr)) {
tmp = g_strdup_printf ("%s%%%s", buf, iface);
add_string_item (rc->nameservers, tmp);
g_free (tmp);
@@ -199,14 +213,20 @@ merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src)
const char *domain;
domain = nm_ip6_config_get_domain (src, i);
- if (!rc->domain)
- rc->domain = domain;
+ if (!DOMAIN_IS_VALID (domain))
+ continue;
add_string_item (rc->searches, domain);
}
num = nm_ip6_config_get_num_searches (src);
- for (i = 0; i < num; i++)
- add_string_item (rc->searches, nm_ip6_config_get_search (src, i));
+ for (i = 0; i < num; i++) {
+ const char *search;
+
+ search = nm_ip6_config_get_search (src, i);
+ if (!DOMAIN_IS_VALID (search))
+ continue;
+ add_string_item (rc->searches, search);
+ }
}
@@ -264,8 +284,7 @@ write_to_netconfig (gint fd, const char *key, const char *value)
}
static gboolean
-dispatch_netconfig (const char *domain,
- char **searches,
+dispatch_netconfig (char **searches,
char **nameservers,
const char *nis_domain,
char **nis_servers,
@@ -288,12 +307,6 @@ dispatch_netconfig (const char *domain,
if (searches) {
str = g_strjoinv (" ", searches);
- if (domain) {
- tmp = g_strconcat (domain, " ", str, NULL);
- g_free (str);
- str = tmp;
- }
-
write_to_netconfig (fd, "DNSSEARCH", str);
g_free (str);
}
@@ -333,12 +346,11 @@ dispatch_netconfig (const char *domain,
static gboolean
-write_resolv_conf (FILE *f, const char *domain,
+write_resolv_conf (FILE *f,
char **searches,
char **nameservers,
GError **error)
{
- char *domain_str = NULL;
char *searches_str = NULL;
char *nameservers_str = NULL;
int i;
@@ -349,14 +361,11 @@ write_resolv_conf (FILE *f, const char *domain,
g_set_error (error,
NM_DNS_MANAGER_ERROR,
NM_DNS_MANAGER_ERROR_SYSTEM,
- "Could not write " RESOLV_CONF ": %s\n",
+ "Could not write " _PATH_RESCONF ": %s\n",
g_strerror (errno));
return FALSE;
}
- if (domain)
- domain_str = g_strconcat ("domain ", domain, "\n", NULL);
-
if (searches) {
char *tmp_str;
@@ -387,13 +396,11 @@ write_resolv_conf (FILE *f, const char *domain,
nameservers_str = g_string_free (str, FALSE);
- if (fprintf (f, "%s%s%s",
- domain_str ? domain_str : "",
+ if (fprintf (f, "%s%s",
searches_str ? searches_str : "",
strlen (nameservers_str) ? nameservers_str : "") != -1)
retval = TRUE;
- g_free (domain_str);
g_free (searches_str);
g_free (nameservers_str);
@@ -402,8 +409,7 @@ write_resolv_conf (FILE *f, const char *domain,
#ifdef RESOLVCONF_PATH
static gboolean
-dispatch_resolvconf (const char *domain,
- char **searches,
+dispatch_resolvconf (char **searches,
char **nameservers,
GError **error)
{
@@ -414,7 +420,7 @@ dispatch_resolvconf (const char *domain,
if (! g_file_test (RESOLVCONF_PATH, G_FILE_TEST_IS_EXECUTABLE))
return FALSE;
- if (domain || searches || nameservers) {
+ if (searches || nameservers) {
cmd = g_strconcat (RESOLVCONF_PATH, " -a ", "NetworkManager", NULL);
nm_log_info (LOGD_DNS, "Writing DNS information to %s", RESOLVCONF_PATH);
if ((f = popen (cmd, "w")) == NULL)
@@ -425,7 +431,7 @@ dispatch_resolvconf (const char *domain,
RESOLVCONF_PATH,
g_strerror (errno));
else {
- retval = write_resolv_conf (f, domain, searches, nameservers, error);
+ retval = write_resolv_conf (f, searches, nameservers, error);
retval &= (pclose (f) == 0);
}
} else {
@@ -442,8 +448,7 @@ dispatch_resolvconf (const char *domain,
#endif
static gboolean
-update_resolv_conf (const char *domain,
- char **searches,
+update_resolv_conf (char **searches,
char **nameservers,
GError **error)
{
@@ -457,9 +462,9 @@ update_resolv_conf (const char *domain,
g_return_val_if_fail (error != NULL, FALSE);
/* Find the real path of resolv.conf; it could be a symlink to something */
- resolv_conf_realpath = realpath (RESOLV_CONF, NULL);
+ resolv_conf_realpath = realpath (_PATH_RESCONF, NULL);
if (!resolv_conf_realpath)
- resolv_conf_realpath = strdup (RESOLV_CONF);
+ resolv_conf_realpath = strdup (_PATH_RESCONF);
/* Build up the real path for the temp resolv.conf that we're about to
* write out.
@@ -474,24 +479,24 @@ update_resolv_conf (const char *domain,
if ((f = fopen (tmp_resolv_conf_realpath, "w")) == NULL) {
do_rename = 0;
old_errno = errno;
- if ((f = fopen (RESOLV_CONF, "w")) == NULL) {
+ if ((f = fopen (_PATH_RESCONF, "w")) == NULL) {
g_set_error (error,
NM_DNS_MANAGER_ERROR,
NM_DNS_MANAGER_ERROR_SYSTEM,
"Could not open %s: %s\nCould not open %s: %s\n",
tmp_resolv_conf_realpath,
g_strerror (old_errno),
- RESOLV_CONF,
+ _PATH_RESCONF,
g_strerror (errno));
goto out;
}
/* Update tmp_resolv_conf_realpath so the error message on fclose()
* failure will be correct.
*/
- strcpy (tmp_resolv_conf_realpath, RESOLV_CONF);
+ strcpy (tmp_resolv_conf_realpath, _PATH_RESCONF);
}
- write_resolv_conf (f, domain, searches, nameservers, error);
+ write_resolv_conf (f, searches, nameservers, error);
if (fclose (f) < 0) {
if (*error == NULL) {
@@ -515,7 +520,7 @@ update_resolv_conf (const char *domain,
g_set_error (error,
NM_DNS_MANAGER_ERROR,
NM_DNS_MANAGER_ERROR_SYSTEM,
- "Could not replace " RESOLV_CONF ": %s\n",
+ "Could not replace " _PATH_RESCONF ": %s\n",
g_strerror (errno));
}
}
@@ -573,7 +578,6 @@ update_dns (NMDnsManager *self,
NMDnsManagerPrivate *priv;
NMResolvConfData rc;
GSList *iter, *vpn_configs = NULL, *dev_configs = NULL, *other_configs = NULL;
- const char *domain = NULL;
const char *nis_domain = NULL;
char **searches = NULL;
char **nameservers = NULL;
@@ -586,6 +590,9 @@ update_dns (NMDnsManager *self,
priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+ if (priv->resolv_conf_mode == NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED)
+ return TRUE;
+
priv->dns_touched = TRUE;
nm_log_dbg (LOGD_DNS, "updating resolv.conf");
@@ -594,7 +601,6 @@ update_dns (NMDnsManager *self,
compute_hash (self, priv->hash);
rc.nameservers = g_ptr_array_new ();
- rc.domain = NULL;
rc.searches = g_ptr_array_new ();
rc.nis_domain = NULL;
rc.nis_servers = g_ptr_array_new ();
@@ -628,22 +634,25 @@ update_dns (NMDnsManager *self,
g_assert_not_reached ();
}
- /* Add the current domain name (from the hostname) to the searches list;
- * see rh #600407. The bug report is that when the hostname is set to
- * something like 'dcbw.foobar.com' (ie an FQDN) that pinging 'dcbw' doesn't
- * work because the resolver doesn't have anything to append to 'dcbw' when
- * looking it up.
+ /* If the hostname is a FQDN ("dcbw.example.com"), then add the domain part of it
+ * ("example.com") to the searches list, to ensure that we can still resolve its
+ * non-FQ form ("dcbw") too. (Also, if there are no other search domains specified,
+ * this makes a good default.) However, if the hostname is the top level of a domain
+ * (eg, "example.com"), then use the hostname itself as the search (since the user is
+ * unlikely to want "com" as a search domain).
*/
if (priv->hostname) {
- const char *hostsearch = strchr (priv->hostname, '.');
-
- /* +1 to get rid of the dot */
- if (hostsearch && strlen (hostsearch + 1))
- add_string_item (rc.searches, hostsearch + 1);
+ const char *hostdomain = strchr (priv->hostname, '.');
+
+ if (hostdomain) {
+ hostdomain++;
+ if (DOMAIN_IS_VALID (hostdomain))
+ add_string_item (rc.searches, hostdomain);
+ else if (DOMAIN_IS_VALID (priv->hostname))
+ add_string_item (rc.searches, priv->hostname);
+ }
}
- domain = rc.domain;
-
/* Per 'man resolv.conf', the search list is limited to 6 domains
* totalling 256 characters.
*/
@@ -697,15 +706,15 @@ update_dns (NMDnsManager *self,
}
/* Let any plugins do their thing first */
- for (iter = priv->plugins; iter; iter = g_slist_next (iter)) {
- NMDnsPlugin *plugin = NM_DNS_PLUGIN (iter->data);
+ if (priv->plugin) {
+ NMDnsPlugin *plugin = priv->plugin;
const char *plugin_name = nm_dns_plugin_get_name (plugin);
if (nm_dns_plugin_is_caching (plugin)) {
if (no_caching) {
nm_log_dbg (LOGD_DNS, "DNS: plugin %s ignored (caching disabled)",
plugin_name);
- continue;
+ goto skip;
}
caching = TRUE;
}
@@ -723,7 +732,11 @@ update_dns (NMDnsManager *self,
*/
caching = FALSE;
}
+
+ skip:
+ ;
}
+
g_slist_free (vpn_configs);
g_slist_free (dev_configs);
g_slist_free (other_configs);
@@ -740,18 +753,18 @@ update_dns (NMDnsManager *self,
}
#ifdef RESOLVCONF_PATH
- success = dispatch_resolvconf (domain, searches, nameservers, error);
+ success = dispatch_resolvconf (searches, nameservers, error);
#endif
#ifdef NETCONFIG_PATH
if (success == FALSE) {
- success = dispatch_netconfig (domain, searches, nameservers,
+ success = dispatch_netconfig (searches, nameservers,
nis_domain, nis_servers, error);
}
#endif
if (success == FALSE)
- success = update_resolv_conf (domain, searches, nameservers, error);
+ success = update_resolv_conf (searches, nameservers, error);
/* signal that resolv.conf was changed */
if (success)
@@ -796,7 +809,6 @@ nm_dns_manager_add_ip4_config (NMDnsManager *mgr,
GError *error = NULL;
g_return_val_if_fail (mgr != NULL, FALSE);
- g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (config != NULL, FALSE);
priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
@@ -874,7 +886,6 @@ nm_dns_manager_add_ip6_config (NMDnsManager *mgr,
GError *error = NULL;
g_return_val_if_fail (mgr != NULL, FALSE);
- g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (config != NULL, FALSE);
priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
@@ -943,8 +954,17 @@ nm_dns_manager_remove_ip6_config (NMDnsManager *mgr, NMIP6Config *config)
}
void
+nm_dns_manager_set_initial_hostname (NMDnsManager *mgr,
+ const char *hostname)
+{
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
+
+ priv->hostname = g_strdup (hostname);
+}
+
+void
nm_dns_manager_set_hostname (NMDnsManager *mgr,
- const char *hostname)
+ const char *hostname)
{
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
GError *error = NULL;
@@ -966,10 +986,6 @@ nm_dns_manager_set_hostname (NMDnsManager *mgr,
g_free (priv->hostname);
priv->hostname = g_strdup (filtered);
- /* Passing the last interface here is completely bogus, but SUSE's netconfig
- * wants one. But hostname changes are system-wide and *not* tied to a
- * specific interface, so netconfig can't really handle this. Fake it.
- */
if (!priv->updates_queue && !update_dns (mgr, FALSE, &error)) {
nm_log_warn (LOGD_DNS, "could not commit DNS changes: (%d) %s",
error ? error->code : -1,
@@ -978,6 +994,12 @@ nm_dns_manager_set_hostname (NMDnsManager *mgr,
}
}
+NMDnsManagerResolvConfMode
+nm_dns_manager_get_resolv_conf_mode (NMDnsManager *mgr)
+{
+ return NM_DNS_MANAGER_GET_PRIVATE (mgr)->resolv_conf_mode;
+}
+
void
nm_dns_manager_begin_updates (NMDnsManager *mgr, const char *func)
{
@@ -1030,62 +1052,17 @@ nm_dns_manager_end_updates (NMDnsManager *mgr, const char *func)
memset (priv->prev_hash, 0, sizeof (priv->prev_hash));
}
-static void
-load_plugins (NMDnsManager *self, const char **plugins)
-{
- NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
- NMDnsPlugin *plugin;
- const char **iter;
- gboolean have_caching = FALSE;
-
- if (plugins && *plugins) {
- /* Create each configured plugin */
- for (iter = plugins; iter && *iter; iter++) {
- if (!strcasecmp (*iter, "dnsmasq"))
- plugin = NM_DNS_PLUGIN (nm_dns_dnsmasq_new ());
- else {
- nm_log_warn (LOGD_DNS, "Unknown DNS plugin '%s'", *iter);\
- continue;
- }
- g_assert (plugin);
-
- /* Only one caching DNS plugin is allowed */
- if (nm_dns_plugin_is_caching (plugin)) {
- if (have_caching) {
- nm_log_warn (LOGD_DNS,
- "Ignoring plugin %s; only one caching DNS "
- "plugin is allowed.",
- *iter);
- g_object_unref (plugin);
- continue;
- }
- have_caching = TRUE;
- }
-
- nm_log_info (LOGD_DNS, "DNS: loaded plugin %s", nm_dns_plugin_get_name (plugin));
- priv->plugins = g_slist_append (priv->plugins, plugin);
- g_signal_connect (plugin, NM_DNS_PLUGIN_FAILED,
- G_CALLBACK (plugin_failed),
- self);
- }
- } else {
- /* Create default plugins */
- }
-}
-
/******************************************************************/
NMDnsManager *
-nm_dns_manager_get (const char **plugins)
+nm_dns_manager_get (void)
{
static NMDnsManager * singleton = NULL;
if (!singleton) {
singleton = NM_DNS_MANAGER (g_object_new (NM_TYPE_DNS_MANAGER, NULL));
g_assert (singleton);
- load_plugins (singleton, plugins);
- } else
- g_object_ref (singleton);
+ }
return singleton;
}
@@ -1101,10 +1078,56 @@ nm_dns_manager_error_quark (void)
}
static void
+init_resolv_conf_mode (NMDnsManager *self)
+{
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+ const char *mode;
+ int fd, flags;
+
+ fd = open (_PATH_RESCONF, O_RDONLY);
+ if (fd != -1) {
+ if (ioctl (fd, FS_IOC_GETFLAGS, &flags) == -1)
+ flags = 0;
+ close (fd);
+
+ if (flags & FS_IMMUTABLE_FL) {
+ nm_log_info (LOGD_DNS, "DNS: " _PATH_RESCONF " is immutable; not managing");
+ priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED;
+ return;
+ }
+ }
+
+ mode = nm_config_get_dns_mode (nm_config_get ());
+ if (!g_strcmp0 (mode, "none")) {
+ priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED;
+ nm_log_info (LOGD_DNS, "DNS: not managing " _PATH_RESCONF);
+ } else if (!g_strcmp0 (mode, "dnsmasq")) {
+ priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_PROXY;
+ priv->plugin = nm_dns_dnsmasq_new ();
+ } else if (!g_strcmp0 (mode, "unbound")) {
+ priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_PROXY;
+ priv->plugin = nm_dns_unbound_new ();
+ } else {
+ priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT;
+ if (mode && g_strcmp0 (mode, "default") != 0)
+ nm_log_warn (LOGD_DNS, "Unknown DNS mode '%s'", mode);
+ }
+}
+
+static void
nm_dns_manager_init (NMDnsManager *self)
{
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+
/* Set the initial hash */
compute_hash (self, NM_DNS_MANAGER_GET_PRIVATE (self)->hash);
+
+ init_resolv_conf_mode (self);
+
+ if (priv->plugin) {
+ nm_log_info (LOGD_DNS, "DNS: loaded plugin %s", nm_dns_plugin_get_name (priv->plugin));
+ g_signal_connect (priv->plugin, NM_DNS_PLUGIN_FAILED, G_CALLBACK (plugin_failed), self);
+ }
}
static void
@@ -1114,30 +1137,24 @@ dispose (GObject *object)
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
- if (priv->disposed == FALSE) {
- priv->disposed = TRUE;
-
- g_slist_foreach (priv->plugins, (GFunc) g_object_unref, NULL);
- g_slist_free (priv->plugins);
- priv->plugins = NULL;
-
- /* If we're quitting leave a valid resolv.conf in place, not one
- * pointing to 127.0.0.1 if any plugins were active. Thus update
- * DNS after disposing of all plugins. But if we haven't done any
- * DNS updates yet, there's no reason to touch resolv.conf on shutdown.
- */
- if (priv->dns_touched && !update_dns (self, TRUE, &error)) {
- nm_log_warn (LOGD_DNS, "could not commit DNS changes on shutdown: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- }
+ g_clear_object (&priv->plugin);
- g_slist_foreach (priv->configs, (GFunc) g_object_unref, NULL);
- g_slist_free (priv->configs);
- priv->configs = NULL;
+ /* If we're quitting, leave a valid resolv.conf in place, not one
+ * pointing to 127.0.0.1 if any plugins were active. Thus update
+ * DNS after disposing of all plugins. But if we haven't done any
+ * DNS updates yet, there's no reason to touch resolv.conf on shutdown.
+ */
+ if (priv->dns_touched && !update_dns (self, TRUE, &error)) {
+ nm_log_warn (LOGD_DNS, "could not commit DNS changes on shutdown: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ priv->dns_touched = FALSE;
}
+ g_slist_free_full (priv->configs, g_object_unref);
+ priv->configs = NULL;
+
G_OBJECT_CLASS (nm_dns_manager_parent_class)->dispose (object);
}
diff --git a/src/dns-manager/nm-dns-manager.h b/src/dns-manager/nm-dns-manager.h
index 0fd4c198b..b2bf2467c 100644
--- a/src/dns-manager/nm-dns-manager.h
+++ b/src/dns-manager/nm-dns-manager.h
@@ -67,7 +67,7 @@ typedef struct {
GType nm_dns_manager_get_type (void);
-NMDnsManager * nm_dns_manager_get (const char **plugins);
+NMDnsManager * nm_dns_manager_get (void);
/* Allow changes to be batched together */
void nm_dns_manager_begin_updates (NMDnsManager *mgr, const char *func);
@@ -87,8 +87,30 @@ gboolean nm_dns_manager_add_ip6_config (NMDnsManager *mgr,
gboolean nm_dns_manager_remove_ip6_config (NMDnsManager *mgr, NMIP6Config *config);
-void nm_dns_manager_set_hostname (NMDnsManager *mgr,
- const char *hostname);
+void nm_dns_manager_set_initial_hostname (NMDnsManager *mgr,
+ const char *hostname);
+void nm_dns_manager_set_hostname (NMDnsManager *mgr,
+ const char *hostname);
+
+/**
+ * NMDnsManagerResolvConfMode:
+ * @NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED: NM is not managing resolv.conf
+ * @NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT: NM is managing resolv.conf by
+ * adding and removing "nameserver" lines corresponding to the currently
+ * active connections
+ * @NM_DNS_MANAGER_RESOLV_CONF_PROXY: NM is managing resolv.conf by
+ * pointing it to some other service (eg, dnsmasq) that knows the
+ * nameservers corresponding to the currently active connections.
+ *
+ * NMDnsManager's behavior toward /etc/resolv.conf.
+ */
+typedef enum {
+ NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED,
+ NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT,
+ NM_DNS_MANAGER_RESOLV_CONF_PROXY
+} NMDnsManagerResolvConfMode;
+
+NMDnsManagerResolvConfMode nm_dns_manager_get_resolv_conf_mode (NMDnsManager *mgr);
G_END_DECLS
diff --git a/src/dns-manager/nm-dns-plugin.h b/src/dns-manager/nm-dns-plugin.h
index 2a66557be..41a12a58e 100644
--- a/src/dns-manager/nm-dns-plugin.h
+++ b/src/dns-manager/nm-dns-plugin.h
@@ -42,7 +42,6 @@ typedef struct {
GObjectClass parent;
/* Methods */
- gboolean (*init) (NMDnsPlugin *self);
/* Called when DNS information is changed. 'vpn_configs' is a list of
* NMIP4Config or NMIP6Config objects from VPN connections, while
diff --git a/src/dns-manager/nm-dns-unbound.c b/src/dns-manager/nm-dns-unbound.c
new file mode 100644
index 000000000..137fd20b0
--- /dev/null
+++ b/src/dns-manager/nm-dns-unbound.c
@@ -0,0 +1,79 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ * Author: Pavel Å imerda <psimerda@redhat.com>
+ */
+#include "nm-dns-unbound.h"
+#include "NetworkManagerUtils.h"
+
+G_DEFINE_TYPE (NMDnsUnbound, nm_dns_unbound, NM_TYPE_DNS_PLUGIN)
+
+/*******************************************/
+
+static gboolean
+update (NMDnsPlugin *plugin,
+ const GSList *vpn_configs,
+ const GSList *dev_configs,
+ const GSList *other_configs,
+ const char *hostname)
+{
+ /* TODO: We currently call a script installed with the dnssec-trigger
+ * package that queries all information itself. Later, the dependency
+ * on that package will be optional and the only hard dependency will
+ * be unbound.
+ *
+ * Unbound configuration should be later handled by this plugin directly,
+ * without calling custom scripts. The dnssec-trigger functionality
+ * may be eventually merged into NetworkManager.
+ */
+ return nm_spawn_process ("/usr/libexec/dnssec-trigger-script --async --update") == 0;
+}
+
+static gboolean
+is_caching (NMDnsPlugin *plugin)
+{
+ return TRUE;
+}
+
+static const char *
+get_name (NMDnsPlugin *plugin)
+{
+ return "unbound";
+}
+
+/****************************************************************/
+
+NMDnsPlugin *
+nm_dns_unbound_new (void)
+{
+ return g_object_new (NM_TYPE_DNS_UNBOUND, NULL);
+}
+
+static void
+nm_dns_unbound_init (NMDnsUnbound *unbound)
+{
+}
+
+static void
+nm_dns_unbound_class_init (NMDnsUnboundClass *klass)
+{
+ NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS (klass);
+
+ plugin_class->update = update;
+ plugin_class->is_caching = is_caching;
+ plugin_class->get_name = get_name;
+}
diff --git a/src/dns-manager/nm-dns-unbound.h b/src/dns-manager/nm-dns-unbound.h
new file mode 100644
index 000000000..2aaae7dd4
--- /dev/null
+++ b/src/dns-manager/nm-dns-unbound.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ */
+#ifndef NM_DNS_UNBOUND_H
+#define NM_DNS_UNBOUND_H
+
+#include <glib-object.h>
+
+#include "nm-dns-plugin.h"
+
+#define NM_TYPE_DNS_UNBOUND (nm_dns_unbound_get_type ())
+#define NM_DNS_UNBOUND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DNS_UNBOUND, NMDnsUnbound))
+#define NM_DNS_UNBOUND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DNS_UNBOUND, NMDnsUnboundClass))
+#define NM_IS_DNS_UNBOUND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DNS_UNBOUND))
+#define NM_IS_DNS_UNBOUND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DNS_UNBOUND))
+#define NM_DNS_UNBOUND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DNS_UNBOUND, NMDnsUnboundClass))
+
+typedef struct {
+ NMDnsPlugin parent;
+} NMDnsUnbound;
+
+typedef struct {
+ NMDnsPluginClass parent;
+} NMDnsUnboundClass;
+
+GType nm_dns_unbound_get_type (void);
+
+NMDnsPlugin *nm_dns_unbound_new (void);
+
+#endif /* NM_DNS_UNBOUND_H */
diff --git a/src/dns-manager/nm-dns-utils.c b/src/dns-manager/nm-dns-utils.c
index 615adfd15..3e564ace3 100644
--- a/src/dns-manager/nm-dns-utils.c
+++ b/src/dns-manager/nm-dns-utils.c
@@ -46,7 +46,10 @@ add_ip4_to_rdns_array (guint32 ip, GPtrArray *domains) /* network byte order */
else if (defprefix == 24)
str = g_strdup_printf ("%u.%u.%u.in-addr.arpa", p[2] & 0xFF, p[1] & 0xFF, p[0] & 0xFF);
- g_return_if_fail (str != NULL);
+ if (!str) {
+ g_return_if_fail (str != NULL);
+ return;
+ }
/* Suppress duplicates */
for (i = 0; i < domains->len; i++) {
@@ -79,15 +82,15 @@ nm_dns_utils_get_ip4_rdns_domains (NMIP4Config *ip4)
*/
for (i = 0; i < nm_ip4_config_get_num_addresses (ip4); i++) {
- NMIP4Address *addr = nm_ip4_config_get_address (ip4, i);
+ const NMPlatformIP4Address *address = nm_ip4_config_get_address (ip4, i);
- add_ip4_to_rdns_array (nm_ip4_address_get_address (addr), domains);
+ add_ip4_to_rdns_array (address->address, domains);
}
for (i = 0; i < nm_ip4_config_get_num_routes (ip4); i++) {
- NMIP4Route *route = nm_ip4_config_get_route (ip4, i);
+ const NMPlatformIP4Route *route = nm_ip4_config_get_route (ip4, i);
- add_ip4_to_rdns_array (nm_ip4_route_get_dest (route), domains);
+ add_ip4_to_rdns_array (route->network, domains);
}
/* Terminating NULL so we can use g_strfreev() to free it */
diff --git a/src/dnsmasq-manager/Makefile.am b/src/dnsmasq-manager/Makefile.am
deleted file mode 100644
index 42706cc27..000000000
--- a/src/dnsmasq-manager/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-noinst_LTLIBRARIES = libdnsmasq-manager.la
-
-libdnsmasq_manager_la_CPPFLAGS = \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/src \
- -I${top_srcdir}/include \
- $(GLIB_CFLAGS) \
- -DLOCALSTATEDIR=\"$(localstatedir)\"
-
-libdnsmasq_manager_la_SOURCES = \
- nm-dnsmasq-manager.h \
- nm-dnsmasq-manager.c
-
-libdnsmasq_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(GLIB_LIBS)
diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.c b/src/dnsmasq-manager/nm-dnsmasq-manager.c
index 083fb5339..21bbd23a5 100644
--- a/src/dnsmasq-manager/nm-dnsmasq-manager.c
+++ b/src/dnsmasq-manager/nm-dnsmasq-manager.c
@@ -28,9 +28,11 @@
#include <stdlib.h>
#include "nm-dnsmasq-manager.h"
+#include "nm-dnsmasq-utils.h"
#include "nm-logging.h"
#include "nm-glib-compat.h"
#include "nm-posix-signals.h"
+#include "nm-utils.h"
typedef struct {
char *iface;
@@ -53,6 +55,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
typedef enum {
NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND,
+ NM_DNSMASQ_MANAGER_ERROR_INVALID_IP_RANGE,
} NMDnsMasqManagerError;
GQuark
@@ -112,8 +115,6 @@ nm_dnsmasq_manager_new (const char *iface)
NMDnsMasqManagerPrivate *priv;
manager = (NMDnsMasqManager *) g_object_new (NM_TYPE_DNSMASQ_MANAGER, NULL);
- if (!manager)
- return NULL;
priv = NM_DNSMASQ_MANAGER_GET_PRIVATE (manager);
priv->iface = g_strdup (iface);
@@ -251,10 +252,11 @@ create_dm_cmd_line (const char *iface,
const char *dm_binary;
NMCmdLine *cmd;
GString *s;
- NMIP4Address *tmp;
- struct in_addr addr;
- char buf[INET_ADDRSTRLEN + 15];
- char localaddr[INET_ADDRSTRLEN + 1];
+ const NMPlatformIP4Address *tmp;
+ char first[INET_ADDRSTRLEN];
+ char last[INET_ADDRSTRLEN];
+ char localaddr[INET_ADDRSTRLEN];
+ char *error_desc = NULL;
dm_binary = nm_find_dnsmasq ();
if (!dm_binary) {
@@ -296,48 +298,23 @@ create_dm_cmd_line (const char *iface,
nm_cmd_line_add_string (cmd, "--strict-order");
s = g_string_new ("--listen-address=");
- addr.s_addr = nm_ip4_address_get_address (tmp);
- if (!inet_ntop (AF_INET, &addr, &localaddr[0], INET_ADDRSTRLEN)) {
- char *err_msg = g_strdup_printf ("error converting IP4 address 0x%X",
- ntohl (addr.s_addr));
- g_set_error_literal (error, NM_DNSMASQ_MANAGER_ERROR, NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND, err_msg);
- nm_log_warn (LOGD_SHARING, "%s", err_msg);
- g_free (err_msg);
- goto error;
- }
+ nm_utils_inet4_ntop (tmp->address, localaddr);
g_string_append (s, localaddr);
nm_cmd_line_add_string (cmd, s->str);
g_string_free (s, TRUE);
- s = g_string_new ("--dhcp-range=");
-
- /* Add start of address range */
- addr.s_addr = nm_ip4_address_get_address (tmp) + htonl (9);
- if (!inet_ntop (AF_INET, &addr, &buf[0], INET_ADDRSTRLEN)) {
- char *err_msg = g_strdup_printf ("error converting IP4 address 0x%X",
- ntohl (addr.s_addr));
- g_set_error_literal (error, NM_DNSMASQ_MANAGER_ERROR, NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND, err_msg);
- nm_log_warn (LOGD_SHARING, "%s", err_msg);
- g_free (err_msg);
- goto error;
- }
- g_string_append (s, buf);
-
- g_string_append_c (s, ',');
-
- /* Add end of address range */
- addr.s_addr = nm_ip4_address_get_address (tmp) + htonl (99);
- if (!inet_ntop (AF_INET, &addr, &buf[0], INET_ADDRSTRLEN)) {
- char *err_msg = g_strdup_printf ("error converting IP4 address 0x%X",
- ntohl (addr.s_addr));
- g_set_error_literal (error, NM_DNSMASQ_MANAGER_ERROR, NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND, err_msg);
- nm_log_warn (LOGD_SHARING, "%s", err_msg);
- g_free (err_msg);
+ if (!nm_dnsmasq_utils_get_range (tmp, first, last, &error_desc)) {
+ g_set_error_literal (error,
+ NM_DNSMASQ_MANAGER_ERROR,
+ NM_DNSMASQ_MANAGER_ERROR_INVALID_IP_RANGE,
+ error_desc);
+ nm_log_warn (LOGD_SHARING, "Failed to find DHCP address ranges: %s", error_desc);
+ g_free (error_desc);
goto error;
}
- g_string_append (s, buf);
- g_string_append (s, ",60m");
+ s = g_string_new ("--dhcp-range=");
+ g_string_append_printf (s, "%s,%s,60m", first, last);
nm_cmd_line_add_string (cmd, s->str);
g_string_free (s, TRUE);
diff --git a/src/dnsmasq-manager/nm-dnsmasq-utils.c b/src/dnsmasq-manager/nm-dnsmasq-utils.c
new file mode 100644
index 000000000..7036b4093
--- /dev/null
+++ b/src/dnsmasq-manager/nm-dnsmasq-utils.c
@@ -0,0 +1,77 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#include <config.h>
+#include <string.h>
+#include <arpa/inet.h>
+
+#include "nm-dnsmasq-utils.h"
+#include "nm-platform.h"
+#include "nm-utils.h"
+
+gboolean
+nm_dnsmasq_utils_get_range (const NMPlatformIP4Address *addr,
+ char *out_first,
+ char *out_last,
+ char **out_error_desc)
+{
+ guint32 host = addr->address;
+ guint32 prefix = addr->plen;
+ guint32 netmask = nm_utils_ip4_prefix_to_netmask (prefix);
+ guint32 first, last, reserved;
+
+ g_return_val_if_fail (out_first != NULL, FALSE);
+ g_return_val_if_fail (out_last != NULL, FALSE);
+
+ if (prefix > 30) {
+ if (out_error_desc)
+ *out_error_desc = g_strdup_printf ("Address prefix %d is too small for DHCP.", prefix);
+ return FALSE;
+ }
+
+ /* Find the first available address *after* the local machine's IP */
+ first = (host & netmask) + htonl (1);
+
+ /* Shortcut: allow a max of 253 addresses; the - htonl(1) here is to assure
+ * that we don't set 'last' to the broadcast address of the network. */
+ if (prefix < 24)
+ last = (host | ~nm_utils_ip4_prefix_to_netmask (24)) - htonl (1);
+ else
+ last = (host | ~netmask) - htonl(1);
+
+ /* Figure out which range (either above the host address or below it)
+ * has more addresses. Reserve some addresses for static IPs.
+ */
+ if (ntohl (host) - ntohl (first) > ntohl (last) - ntohl (host)) {
+ /* Range below the host's IP address */
+ reserved = (guint32) ((ntohl (host) - ntohl (first)) / 10);
+ last = host - htonl (MIN (reserved, 8)) - htonl (1);
+ } else {
+ /* Range above host's IP address */
+ reserved = (guint32) ((ntohl (last) - ntohl (host)) / 10);
+ first = host + htonl (MIN (reserved, 8)) + htonl (1);
+ }
+
+ nm_utils_inet4_ntop (first, out_first);
+ nm_utils_inet4_ntop (last, out_last);
+
+ return TRUE;
+}
+
diff --git a/include/nm-test-helpers.h b/src/dnsmasq-manager/nm-dnsmasq-utils.h
index 91286b583..4534c6ef2 100644
--- a/include/nm-test-helpers.h
+++ b/src/dnsmasq-manager/nm-dnsmasq-utils.h
@@ -1,7 +1,6 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
- * Dan Williams <dcbw@redhat.com>
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -16,33 +15,18 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2008 Red Hat, Inc.
+ * Copyright (C) 2013 Red Hat, Inc.
*/
-#ifndef NM_TEST_HELPERS_H
-#define NM_TEST_HELPERS_H
-
-#include <stdio.h>
-#include <unistd.h>
-
-static void
-FAIL(const char *test_name, const char *fmt, ...)
-{
- va_list args;
- char buf[500];
-
- snprintf (buf, 500, "FAIL: (%s) %s\n", test_name, fmt);
-
- va_start (args, fmt);
- vfprintf (stderr, buf, args);
- va_end (args);
- _exit (1);
-}
+#ifndef NM_DNSMASQ_UTILS_H
+#define NM_DNSMASQ_UTILS_H
-#define ASSERT(x, test_name, fmt, ...) \
- if (!(x)) { \
- FAIL (test_name, fmt, ## __VA_ARGS__); \
- }
+#include <glib.h>
+#include "nm-platform.h"
-#endif /* NM_TEST_HELPERS_H */
+gboolean nm_dnsmasq_utils_get_range (const NMPlatformIP4Address *addr,
+ char *out_first,
+ char *out_last,
+ char **out_error_desc);
+#endif /* NM_DNSMASQ_UTILS_H */
diff --git a/src/dnsmasq-manager/tests/Makefile.am b/src/dnsmasq-manager/tests/Makefile.am
new file mode 100644
index 000000000..9c7f4ab5c
--- /dev/null
+++ b/src/dnsmasq-manager/tests/Makefile.am
@@ -0,0 +1,23 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I${top_srcdir}/libnm-util \
+ -I${top_builddir}/libnm-util \
+ -I$(top_srcdir)/src/dnsmasq-manager \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/platform \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ -DTESTDIR="\"$(abs_srcdir)\""
+
+noinst_PROGRAMS = test-dnsmasq-utils
+
+test_dnsmasq_utils_SOURCES = \
+ test-dnsmasq-utils.c
+
+test_dnsmasq_utils_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+TESTS = test-dnsmasq-utils
+
diff --git a/src/ip6-manager/Makefile.in b/src/dnsmasq-manager/tests/Makefile.in
index 61a758267..52301e3d9 100644
--- a/src/ip6-manager/Makefile.in
+++ b/src/dnsmasq-manager/tests/Makefile.in
@@ -78,11 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/ip6-manager
+noinst_PROGRAMS = test-dnsmasq-utils$(EXEEXT)
+TESTS = test-dnsmasq-utils$(EXEEXT)
+subdir = src/dnsmasq-manager/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,15 +103,11 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libip6_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_libip6_manager_la_OBJECTS = libip6_manager_la-nm-ip6-manager.lo
-libip6_manager_la_OBJECTS = $(am_libip6_manager_la_OBJECTS)
+PROGRAMS = $(noinst_PROGRAMS)
+am_test_dnsmasq_utils_OBJECTS = test-dnsmasq-utils.$(OBJEXT)
+test_dnsmasq_utils_OBJECTS = $(am_test_dnsmasq_utils_OBJECTS)
+test_dnsmasq_utils_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -147,8 +146,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libip6_manager_la_SOURCES)
-DIST_SOURCES = $(libip6_manager_la_SOURCES)
+SOURCES = $(test_dnsmasq_utils_SOURCES)
+DIST_SOURCES = $(test_dnsmasq_utils_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -173,6 +172,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -199,12 +220,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -229,7 +253,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -274,12 +297,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -296,6 +323,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -323,11 +352,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -342,6 +376,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -404,6 +439,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -414,31 +450,25 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libip6-manager.la
-libip6_manager_la_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
-I${top_srcdir}/libnm-util \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src \
- $(LIBNL_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS)
-
-libip6_manager_la_SOURCES = \
- nm-ip6-manager.c \
- nm-ip6-manager.h
-
-libip6_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(LIBNL_LIBS) \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
+ -I${top_builddir}/libnm-util \
+ -I$(top_srcdir)/src/dnsmasq-manager \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/platform \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ -DTESTDIR="\"$(abs_srcdir)\""
+
+test_dnsmasq_utils_SOURCES = \
+ test-dnsmasq-utils.c
+
+test_dnsmasq_utils_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
all: all-am
@@ -453,9 +483,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ip6-manager/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/dnsmasq-manager/tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/ip6-manager/Makefile
+ $(AUTOMAKE) --gnu src/dnsmasq-manager/tests/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -475,19 +505,18 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
-libip6-manager.la: $(libip6_manager_la_OBJECTS) $(libip6_manager_la_DEPENDENCIES) $(EXTRA_libip6_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libip6_manager_la_OBJECTS) $(libip6_manager_la_LIBADD) $(LIBS)
+test-dnsmasq-utils$(EXEEXT): $(test_dnsmasq_utils_OBJECTS) $(test_dnsmasq_utils_DEPENDENCIES) $(EXTRA_test_dnsmasq_utils_DEPENDENCIES)
+ @rm -f test-dnsmasq-utils$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_dnsmasq_utils_OBJECTS) $(test_dnsmasq_utils_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -495,7 +524,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libip6_manager_la-nm-ip6-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dnsmasq-utils.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -518,13 +547,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libip6_manager_la-nm-ip6-manager.lo: nm-ip6-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libip6_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libip6_manager_la-nm-ip6-manager.lo -MD -MP -MF $(DEPDIR)/libip6_manager_la-nm-ip6-manager.Tpo -c -o libip6_manager_la-nm-ip6-manager.lo `test -f 'nm-ip6-manager.c' || echo '$(srcdir)/'`nm-ip6-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libip6_manager_la-nm-ip6-manager.Tpo $(DEPDIR)/libip6_manager_la-nm-ip6-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip6-manager.c' object='libip6_manager_la-nm-ip6-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libip6_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libip6_manager_la-nm-ip6-manager.lo `test -f 'nm-ip6-manager.c' || echo '$(srcdir)/'`nm-ip6-manager.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -583,6 +605,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -614,8 +729,9 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
@@ -649,7 +765,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
@@ -718,11 +834,11 @@ ps-am:
uninstall-am:
-.MAKE: install-am install-strip
+.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
diff --git a/src/dnsmasq-manager/tests/test-dnsmasq-utils.c b/src/dnsmasq-manager/tests/test-dnsmasq-utils.c
new file mode 100644
index 000000000..07dbc0f72
--- /dev/null
+++ b/src/dnsmasq-manager/tests/test-dnsmasq-utils.c
@@ -0,0 +1,115 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <arpa/inet.h>
+
+#include "nm-dnsmasq-utils.h"
+
+static guint32
+addr_to_num (const char *addr)
+{
+ guint n;
+
+ g_assert (inet_pton (AF_INET, addr, (void *) &n) == 1);
+ return n;
+}
+
+static void
+test_address_ranges (void)
+{
+ NMPlatformIP4Address addr;
+ char first[INET_ADDRSTRLEN];
+ char last[INET_ADDRSTRLEN];
+ char *error_desc = NULL;
+
+ addr.address = addr_to_num ("192.168.0.1");
+ addr.plen = 24;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc));
+ g_assert (error_desc == NULL);
+ g_assert_cmpstr (first, ==, "192.168.0.10");
+ g_assert_cmpstr (last, ==, "192.168.0.254");
+
+ addr.address = addr_to_num ("192.168.0.99");
+ addr.plen = 24;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc));
+ g_assert (error_desc == NULL);
+ g_assert_cmpstr (first, ==, "192.168.0.108");
+ g_assert_cmpstr (last, ==, "192.168.0.254");
+
+ addr.address = addr_to_num ("192.168.0.254");
+ addr.plen = 24;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc));
+ g_assert (error_desc == NULL);
+ g_assert_cmpstr (first, ==, "192.168.0.1");
+ g_assert_cmpstr (last, ==, "192.168.0.245");
+
+ /* Smaller networks */
+ addr.address = addr_to_num ("1.2.3.1");
+ addr.plen = 30;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc));
+ g_assert (error_desc == NULL);
+ g_assert_cmpstr (first, ==, "1.2.3.2");
+ g_assert_cmpstr (last, ==, "1.2.3.2");
+
+ addr.address = addr_to_num ("1.2.3.1");
+ addr.plen = 29;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc));
+ g_assert (error_desc == NULL);
+ g_assert_cmpstr (first, ==, "1.2.3.2");
+ g_assert_cmpstr (last, ==, "1.2.3.6");
+
+ addr.address = addr_to_num ("1.2.3.1");
+ addr.plen = 28;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc));
+ g_assert (error_desc == NULL);
+ g_assert_cmpstr (first, ==, "1.2.3.3");
+ g_assert_cmpstr (last, ==, "1.2.3.14");
+
+ addr.address = addr_to_num ("1.2.3.1");
+ addr.plen = 26;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc));
+ g_assert (error_desc == NULL);
+ g_assert_cmpstr (first, ==, "1.2.3.8");
+ g_assert_cmpstr (last, ==, "1.2.3.62");
+
+ addr.address = addr_to_num ("1.2.3.1");
+ addr.plen = 31;
+ g_assert (nm_dnsmasq_utils_get_range (&addr, first, last, &error_desc) == FALSE);
+ g_assert (error_desc);
+ g_free (error_desc);
+}
+
+/*******************************************/
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_add_func ("/dnsmasq-manager/address-ranges", test_address_ranges);
+
+ return g_test_run ();
+}
+
diff --git a/src/firewall-manager/Makefile.am b/src/firewall-manager/Makefile.am
deleted file mode 100644
index 15bde51ab..000000000
--- a/src/firewall-manager/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-noinst_LTLIBRARIES = libfirewall-manager.la
-
-libfirewall_manager_la_CPPFLAGS = \
- -I${top_srcdir}/src \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/include \
- -I${top_srcdir}/libnm-util \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNM_PKGDATADIR=\"$(pkgdatadir)\" \
- -DNM_LOCALSTATEDIR=\"$(localstatedir)\"
-
-libfirewall_manager_la_SOURCES = \
- nm-firewall-manager.h \
- nm-firewall-manager.c
-
-libfirewall_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
diff --git a/src/firewall-manager/nm-firewall-manager.c b/src/firewall-manager/nm-firewall-manager.c
index cdb2f3fa3..c99372a1d 100644
--- a/src/firewall-manager/nm-firewall-manager.c
+++ b/src/firewall-manager/nm-firewall-manager.c
@@ -44,7 +44,6 @@ typedef struct {
guint name_owner_id;
DBusGProxy * proxy;
gboolean running;
- gboolean disposed;
} NMFirewallManagerPrivate;
enum {
@@ -61,16 +60,40 @@ typedef struct {
char *iface;
FwAddToZoneFunc callback;
gpointer user_data;
+ guint id;
+ gboolean completed;
} CBInfo;
static void
cb_info_free (CBInfo *info)
{
g_return_if_fail (info != NULL);
+
+ if (!info->completed)
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone call cancelled [%u]", info->iface, info->id);
+
g_free (info->iface);
g_free (info);
}
+static CBInfo *
+_cb_info_create (const char *iface, FwAddToZoneFunc callback, gpointer user_data)
+{
+ static guint id;
+ CBInfo *info;
+
+ info = g_malloc (sizeof (CBInfo));
+ if (++id == 0)
+ ++id;
+ info->id = id;
+ info->iface = g_strdup (iface);
+ info->completed = FALSE;
+ info->callback = callback;
+ info->user_data = user_data;
+
+ return info;
+}
+
static void
add_or_change_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
@@ -83,16 +106,20 @@ add_or_change_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data
G_TYPE_INVALID)) {
g_assert (error);
if (g_strcmp0 (error->message, "ZONE_ALREADY_SET") != 0) {
- nm_log_warn (LOGD_FIREWALL, "(%s) firewall zone add/change failed: (%d) %s",
- info->iface, error->code, error->message);
+ nm_log_warn (LOGD_FIREWALL, "(%s) firewall zone add/change failed [%u]: (%d) %s",
+ info->iface, info->id, error->code, error->message);
} else {
- nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone add/change failed: (%d) %s",
- info->iface, error->code, error->message);
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone add/change failed [%u]: (%d) %s",
+ info->iface, info->id, error->code, error->message);
}
+ } else {
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone add/change succeeded [%u]",
+ info->iface, info->id);
}
info->callback (error, info->user_data);
+ info->completed = TRUE;
g_free (zone);
g_clear_error (&error);
}
@@ -114,13 +141,10 @@ nm_firewall_manager_add_or_change_zone (NMFirewallManager *self,
return NULL;
}
- info = g_malloc0 (sizeof (*info));
- info->iface = g_strdup (iface);
- info->callback = callback;
- info->user_data = user_data;
+ info = _cb_info_create (iface, callback, user_data);
- nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone %s -> %s%s%s", iface, add ? "add" : "change",
- zone?"\"":"", zone ? zone : "default", zone?"\"":"");
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone %s -> %s%s%s [%u]", iface, add ? "add" : "change",
+ zone?"\"":"", zone ? zone : "default", zone?"\"":"", info->id);
return dbus_g_proxy_begin_call_with_timeout (priv->proxy,
add ? "addInterface" : "changeZone",
add_or_change_cb,
@@ -145,11 +169,18 @@ remove_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
g_assert (error);
/* ignore UNKNOWN_INTERFACE errors */
if (error->message && !strstr (error->message, "UNKNOWN_INTERFACE")) {
- nm_log_warn (LOGD_FIREWALL, "(%s) firewall zone remove failed: (%d) %s",
- info->iface, error->code, error->message);
+ nm_log_warn (LOGD_FIREWALL, "(%s) firewall zone remove failed [%u]: (%d) %s",
+ info->iface, info->id, error->code, error->message);
+ } else {
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone remove failed [%u]: (%d) %s",
+ info->iface, info->id, error->code, error->message);
}
+ } else {
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone remove succeeded [%u]",
+ info->iface, info->id);
}
+ info->completed = TRUE;
g_free (zone);
g_clear_error (&error);
}
@@ -167,10 +198,10 @@ nm_firewall_manager_remove_from_zone (NMFirewallManager *self,
return NULL;
}
- info = g_malloc0 (sizeof (*info));
- info->iface = g_strdup (iface);
+ info = _cb_info_create (iface, NULL, NULL);
- nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone remove -> %s", iface, zone );
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone remove -> %s%s%s [%u]", iface,
+ zone?"\"":"", zone ? zone : "*", zone?"\"":"", info->id);
return dbus_g_proxy_begin_call_with_timeout (priv->proxy,
"removeInterface",
remove_cb,
@@ -184,7 +215,6 @@ nm_firewall_manager_remove_from_zone (NMFirewallManager *self,
void nm_firewall_manager_cancel_call (NMFirewallManager *self, gpointer call)
{
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_FIREWALL_MANAGER (self));
dbus_g_proxy_cancel_call (NM_FIREWALL_MANAGER_GET_PRIVATE (self)->proxy,
(DBusGProxyCall *) call);
@@ -248,7 +278,7 @@ nm_firewall_manager_init (NMFirewallManager * self)
NMFirewallManagerPrivate *priv = NM_FIREWALL_MANAGER_GET_PRIVATE (self);
DBusGConnection *bus;
- priv->dbus_mgr = nm_dbus_manager_get ();
+ priv->dbus_mgr = g_object_ref (nm_dbus_manager_get ());
priv->name_owner_id = g_signal_connect (priv->dbus_mgr,
NM_DBUS_MANAGER_NAME_OWNER_CHANGED,
G_CALLBACK (name_owner_changed),
@@ -287,20 +317,14 @@ dispose (GObject *object)
{
NMFirewallManagerPrivate *priv = NM_FIREWALL_MANAGER_GET_PRIVATE (object);
- if (priv->disposed)
- goto out;
- priv->disposed = TRUE;
-
if (priv->dbus_mgr) {
- if (priv->name_owner_id)
- g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id);
- g_object_unref (G_OBJECT (priv->dbus_mgr));
+ g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id);
+ priv->name_owner_id = 0;
+ g_clear_object (&priv->dbus_mgr);
}
- if (priv->proxy)
- g_object_unref (priv->proxy);
+ g_clear_object (&priv->proxy);
-out:
/* Chain up to the parent class */
G_OBJECT_CLASS (nm_firewall_manager_parent_class)->dispose (object);
}
diff --git a/src/generated/Makefile.am b/src/generated/Makefile.am
deleted file mode 100644
index b313e4542..000000000
--- a/src/generated/Makefile.am
+++ /dev/null
@@ -1,91 +0,0 @@
-include $(GLIB_MAKEFILE)
-
-noinst_LTLIBRARIES = libnm-generated.la
-
-libnm_generated_la_SOURCES = \
- nm-enum-types.c \
- nm-enum-types.h \
- nm-marshal.c \
- nm-marshal.h
-
-nm_daemon_all_sources = \
- $(top_srcdir)/src/*.[ch] \
- $(top_srcdir)/src/logging/*.[ch] \
- $(top_srcdir)/src/dns-manager/*.[ch] \
- $(top_srcdir)/src/vpn-manager/*.[ch] \
- $(top_srcdir)/src/dhcp-manager/*.[ch] \
- $(top_srcdir)/src/ip6-manager/*.[ch] \
- $(top_srcdir)/src/supplicant-manager/*.[ch] \
- $(top_srcdir)/src/ppp-manager/*.[ch] \
- $(top_srcdir)/src/dnsmasq-manager/*.[ch] \
- $(top_srcdir)/src/modem-manager/*.[ch] \
- $(top_srcdir)/src/bluez-manager/*.[ch] \
- $(top_srcdir)/src/firewall-manager/*.[ch] \
- $(top_srcdir)/src/settings/*.[ch]
-
-if WITH_WIMAX
-nm_daemon_all_sources += $(top_srcdir)/src/wimax/*.[ch]
-endif
-
-nm_daemon_sources_no_bindings = \
- $(filter-out %-glue.h %-bindings.h, $(wildcard $(nm_daemon_all_sources)))
-
-if WITH_MODEM_MANAGER_1
-# We filter out this file, which doesn't have any enum, and which clashes
-# with ModemManager1-defined symbols
-nm_daemon_sources = \
- $(filter-out $(top_srcdir)/src/modem-manager/nm-modem-types.h, $(wildcard $(nm_daemon_sources_no_bindings)))
-else
-# Don't include ModemManager1-specific headers if we're not compiling with
-# ModemManager1 support.
-nm_daemon_sources = \
- $(filter-out $(top_srcdir)/src/modem-manager/nm-modem-broadband.h, $(wildcard $(nm_daemon_sources_no_bindings)))
-endif
-
-GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
-nm_enum_types_sources = $(nm_daemon_sources)
-GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
-GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
-
-GLIB_GENERATED += nm-marshal.h nm-marshal.c
-nm_marshal_sources = $(nm_daemon_sources)
-
-libnm_generated_la_CPPFLAGS = \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/src \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/dns-manager \
- -I${top_srcdir}/src/vpn-manager \
- -I${top_srcdir}/src/dhcp-manager \
- -I${top_srcdir}/src/ip6-manager \
- -I${top_srcdir}/src/supplicant-manager \
- -I${top_srcdir}/src/ppp-manager \
- -I${top_srcdir}/src/dnsmasq-manager \
- -I${top_srcdir}/src/modem-manager \
- -I$(top_srcdir)/src/bluez-manager \
- -I$(top_srcdir)/src/firewall-manager \
- -I$(top_srcdir)/src/settings \
- -I$(top_srcdir)/src/wifi \
- -I$(top_srcdir)/libnm-util \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(GUDEV_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(SYSTEMD_LOGIN_CFLAGS) \
- $(IWMX_SDK_CFLAGS)
-
-if WITH_WIMAX
-libnm_generated_la_CPPFLAGS += -I$(top_srcdir)/src/wimax
-endif
-
-if WITH_MODEM_MANAGER_1
-libnm_generated_la_CPPFLAGS += $(MM_GLIB_CFLAGS)
-endif
-
-libnm_generated_la_LIBADD = \
- $(GLIB_LIBS)
-
-BUILT_SOURCES = $(GLIB_GENERATED)
-
diff --git a/src/generated/nm-marshal.c b/src/generated/nm-marshal.c
deleted file mode 100644
index c7180f1b4..000000000
--- a/src/generated/nm-marshal.c
+++ /dev/null
@@ -1,744 +0,0 @@
-#include "nm-marshal.h"
-
-#include <glib-object.h>
-
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_schar (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* BOOLEAN:VOID (nm-marshal.list:1) */
-void
-_nm_marshal_BOOLEAN__VOID (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef gboolean (*GMarshalFunc_BOOLEAN__VOID) (gpointer data1,
- gpointer data2);
- register GMarshalFunc_BOOLEAN__VOID callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
- gboolean v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 1);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_BOOLEAN__VOID) (marshal_data ? marshal_data : cc->callback);
-
- v_return = callback (data1,
- data2);
-
- g_value_set_boolean (return_value, v_return);
-}
-
-/* VOID:BOOLEAN,UINT (nm-marshal.list:2) */
-void
-_nm_marshal_VOID__BOOLEAN_UINT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__BOOLEAN_UINT) (gpointer data1,
- gboolean arg_1,
- guint arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__BOOLEAN_UINT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__BOOLEAN_UINT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_boolean (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- data2);
-}
-
-/* VOID:INT,UINT,BOOLEAN (nm-marshal.list:3) */
-void
-_nm_marshal_VOID__INT_UINT_BOOLEAN (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__INT_UINT_BOOLEAN) (gpointer data1,
- gint arg_1,
- guint arg_2,
- gboolean arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__INT_UINT_BOOLEAN callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__INT_UINT_BOOLEAN) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_int (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- g_marshal_value_peek_boolean (param_values + 3),
- data2);
-}
-
-/* VOID:OBJECT,OBJECT (nm-marshal.list:4) */
-void
-_nm_marshal_VOID__OBJECT_OBJECT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__OBJECT_OBJECT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_object (param_values + 1),
- g_marshal_value_peek_object (param_values + 2),
- data2);
-}
-
-/* VOID:OBJECT,POINTER (nm-marshal.list:5) */
-void
-_nm_marshal_VOID__OBJECT_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__OBJECT_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__OBJECT_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__OBJECT_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_object (param_values + 1),
- g_marshal_value_peek_pointer (param_values + 2),
- data2);
-}
-
-/* VOID:OBJECT,STRING (nm-marshal.list:6) */
-void
-_nm_marshal_VOID__OBJECT_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__OBJECT_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__OBJECT_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__OBJECT_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_object (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- data2);
-}
-
-/* VOID:POINTER (nm-marshal.list:7) */
-
-/* VOID:POINTER,POINTER,POINTER,POINTER,INT (nm-marshal.list:8) */
-void
-_nm_marshal_VOID__POINTER_POINTER_POINTER_POINTER_INT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__POINTER_POINTER_POINTER_POINTER_INT) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer arg_4,
- gint arg_5,
- gpointer data2);
- register GMarshalFunc_VOID__POINTER_POINTER_POINTER_POINTER_INT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 6);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__POINTER_POINTER_POINTER_POINTER_INT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_pointer (param_values + 1),
- g_marshal_value_peek_pointer (param_values + 2),
- g_marshal_value_peek_pointer (param_values + 3),
- g_marshal_value_peek_pointer (param_values + 4),
- g_marshal_value_peek_int (param_values + 5),
- data2);
-}
-
-/* VOID:POINTER,POINTER,STRING,BOOLEAN,POINTER,POINTER (nm-marshal.list:9) */
-void
-_nm_marshal_VOID__POINTER_POINTER_STRING_BOOLEAN_POINTER_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__POINTER_POINTER_STRING_BOOLEAN_POINTER_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gboolean arg_4,
- gpointer arg_5,
- gpointer arg_6,
- gpointer data2);
- register GMarshalFunc_VOID__POINTER_POINTER_STRING_BOOLEAN_POINTER_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 7);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__POINTER_POINTER_STRING_BOOLEAN_POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_pointer (param_values + 1),
- g_marshal_value_peek_pointer (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- g_marshal_value_peek_boolean (param_values + 4),
- g_marshal_value_peek_pointer (param_values + 5),
- g_marshal_value_peek_pointer (param_values + 6),
- data2);
-}
-
-/* VOID:POINTER,STRING (nm-marshal.list:10) */
-void
-_nm_marshal_VOID__POINTER_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__POINTER_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__POINTER_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__POINTER_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_pointer (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- data2);
-}
-
-/* VOID:STRING,BOXED (nm-marshal.list:11) */
-void
-_nm_marshal_VOID__STRING_BOXED (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_BOXED) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_BOXED callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_BOXED) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_boxed (param_values + 2),
- data2);
-}
-
-/* VOID:STRING,BOXED,BOXED (nm-marshal.list:12) */
-void
-_nm_marshal_VOID__STRING_BOXED_BOXED (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_BOXED_BOXED) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_BOXED_BOXED callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_BOXED_BOXED) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_boxed (param_values + 2),
- g_marshal_value_peek_boxed (param_values + 3),
- data2);
-}
-
-/* VOID:STRING,OBJECT (nm-marshal.list:13) */
-void
-_nm_marshal_VOID__STRING_OBJECT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_OBJECT) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_OBJECT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_OBJECT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_object (param_values + 2),
- data2);
-}
-
-/* VOID:STRING,POINTER (nm-marshal.list:14) */
-void
-_nm_marshal_VOID__STRING_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_pointer (param_values + 2),
- data2);
-}
-
-/* VOID:STRING,STRING (nm-marshal.list:15) */
-void
-_nm_marshal_VOID__STRING_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- data2);
-}
-
-/* VOID:STRING,STRING,STRING (nm-marshal.list:16) */
-void
-_nm_marshal_VOID__STRING_STRING_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_STRING_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- data2);
-}
-
-/* VOID:UINT,UINT (nm-marshal.list:17) */
-void
-_nm_marshal_VOID__UINT_UINT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
- guint arg_1,
- guint arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__UINT_UINT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_uint (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- data2);
-}
-
-/* VOID:UINT,UINT,INT (nm-marshal.list:18) */
-void
-_nm_marshal_VOID__UINT_UINT_INT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__UINT_UINT_INT) (gpointer data1,
- guint arg_1,
- guint arg_2,
- gint arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__UINT_UINT_INT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__UINT_UINT_INT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_uint (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- g_marshal_value_peek_int (param_values + 3),
- data2);
-}
-
-/* VOID:UINT,UINT,UINT (nm-marshal.list:19) */
-void
-_nm_marshal_VOID__UINT_UINT_UINT (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__UINT_UINT_UINT) (gpointer data1,
- guint arg_1,
- guint arg_2,
- guint arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__UINT_UINT_UINT callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__UINT_UINT_UINT) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_uint (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- g_marshal_value_peek_uint (param_values + 3),
- data2);
-}
-
diff --git a/src/generated/nm-marshal.h b/src/generated/nm-marshal.h
deleted file mode 100644
index a940d9f1f..000000000
--- a/src/generated/nm-marshal.h
+++ /dev/null
@@ -1,159 +0,0 @@
-
-#ifndef ___nm_marshal_MARSHAL_H__
-#define ___nm_marshal_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/* BOOLEAN:VOID (nm-marshal.list:1) */
-extern void _nm_marshal_BOOLEAN__VOID (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:BOOLEAN,UINT (nm-marshal.list:2) */
-extern void _nm_marshal_VOID__BOOLEAN_UINT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:INT,UINT,BOOLEAN (nm-marshal.list:3) */
-extern void _nm_marshal_VOID__INT_UINT_BOOLEAN (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:OBJECT,OBJECT (nm-marshal.list:4) */
-extern void _nm_marshal_VOID__OBJECT_OBJECT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:OBJECT,POINTER (nm-marshal.list:5) */
-extern void _nm_marshal_VOID__OBJECT_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:OBJECT,STRING (nm-marshal.list:6) */
-extern void _nm_marshal_VOID__OBJECT_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:POINTER (nm-marshal.list:7) */
-#define _nm_marshal_VOID__POINTER g_cclosure_marshal_VOID__POINTER
-
-/* VOID:POINTER,POINTER,POINTER,POINTER,INT (nm-marshal.list:8) */
-extern void _nm_marshal_VOID__POINTER_POINTER_POINTER_POINTER_INT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:POINTER,POINTER,STRING,BOOLEAN,POINTER,POINTER (nm-marshal.list:9) */
-extern void _nm_marshal_VOID__POINTER_POINTER_STRING_BOOLEAN_POINTER_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:POINTER,STRING (nm-marshal.list:10) */
-extern void _nm_marshal_VOID__POINTER_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,BOXED (nm-marshal.list:11) */
-extern void _nm_marshal_VOID__STRING_BOXED (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,BOXED,BOXED (nm-marshal.list:12) */
-extern void _nm_marshal_VOID__STRING_BOXED_BOXED (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,OBJECT (nm-marshal.list:13) */
-extern void _nm_marshal_VOID__STRING_OBJECT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,POINTER (nm-marshal.list:14) */
-extern void _nm_marshal_VOID__STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,STRING (nm-marshal.list:15) */
-extern void _nm_marshal_VOID__STRING_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,STRING,STRING (nm-marshal.list:16) */
-extern void _nm_marshal_VOID__STRING_STRING_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:UINT,UINT (nm-marshal.list:17) */
-extern void _nm_marshal_VOID__UINT_UINT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:UINT,UINT,INT (nm-marshal.list:18) */
-extern void _nm_marshal_VOID__UINT_UINT_INT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:UINT,UINT,UINT (nm-marshal.list:19) */
-extern void _nm_marshal_VOID__UINT_UINT_UINT (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-G_END_DECLS
-
-#endif /* ___nm_marshal_MARSHAL_H__ */
-
diff --git a/src/ip6-manager/Makefile.am b/src/ip6-manager/Makefile.am
deleted file mode 100644
index 25f57497a..000000000
--- a/src/ip6-manager/Makefile.am
+++ /dev/null
@@ -1,27 +0,0 @@
-noinst_LTLIBRARIES = libip6-manager.la
-
-libip6_manager_la_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src \
- $(LIBNL_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS)
-
-libip6_manager_la_SOURCES = \
- nm-ip6-manager.c \
- nm-ip6-manager.h
-
-libip6_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(LIBNL_LIBS) \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
diff --git a/src/ip6-manager/nm-ip6-manager.c b/src/ip6-manager/nm-ip6-manager.c
deleted file mode 100644
index 340867dd6..000000000
--- a/src/ip6-manager/nm-ip6-manager.c
+++ /dev/null
@@ -1,1747 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* nm-ip6-manager.c - Handle IPv6 address configuration for NetworkManager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2010 Red Hat, Inc.
- */
-
-#define _GNU_SOURCE /* for struct in6_pktinfo */
-
-#include <errno.h>
-#include <unistd.h>
-#include <netinet/icmp6.h>
-#include <netinet/in.h>
-
-#include <netlink/route/addr.h>
-#include <netlink/route/rtnl.h>
-#include <netlink/route/route.h>
-
-#include "nm-ip6-manager.h"
-#include "nm-netlink-monitor.h"
-#include "nm-netlink-utils.h"
-#include "nm-netlink-compat.h"
-#include "NetworkManagerUtils.h"
-#include "nm-marshal.h"
-#include "nm-logging.h"
-#include "nm-utils.h"
-
-/* Pre-DHCP addrconf timeout, in seconds */
-#define NM_IP6_TIMEOUT 20
-
-/* FIXME? Stolen from the kernel sources */
-#define IF_RA_OTHERCONF 0x80
-#define IF_RA_MANAGED 0x40
-#define IF_RA_RCVD 0x20
-#define IF_RS_SENT 0x10
-
-typedef struct {
- NMNetlinkMonitor *monitor;
- GHashTable *devices;
-
- struct nl_sock *nlh;
- struct nl_cache *addr_cache, *route_cache;
-
- guint netlink_id;
-} NMIP6ManagerPrivate;
-
-#define NM_IP6_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP6_MANAGER, NMIP6ManagerPrivate))
-
-G_DEFINE_TYPE (NMIP6Manager, nm_ip6_manager, G_TYPE_OBJECT)
-
-enum {
- ADDRCONF_COMPLETE,
- CONFIG_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-typedef enum {
- NM_IP6_DEVICE_UNCONFIGURED,
- NM_IP6_DEVICE_GOT_LINK_LOCAL,
- NM_IP6_DEVICE_GOT_ROUTER_ADVERTISEMENT,
- NM_IP6_DEVICE_GOT_ADDRESS,
- NM_IP6_DEVICE_TIMED_OUT
-} NMIP6DeviceState;
-
-typedef struct {
- struct in6_addr addr;
- time_t expires;
-} NMIP6RDNSS;
-
-typedef struct {
- char domain[256];
- time_t expires;
-} NMIP6DNSSL;
-
-/******************************************************************/
-
-typedef struct {
- NMIP6Manager *manager;
- char *iface;
- int ifindex;
- /* +7 since this field is used directly by stuff that expects
- * padding to multiples of 8 bytes.
- */
- guint8 hwaddr[NM_UTILS_HWADDR_LEN_MAX + 7];
- guint hwaddr_len;
-
- gboolean has_linklocal;
- gboolean has_nonlinklocal;
- guint dhcp_opts;
-
- char *disable_ip6_path;
- gboolean disable_ip6_save_valid;
- gint32 disable_ip6_save;
-
- guint finish_addrconf_id;
- guint config_changed_id;
-
- NMIP6DeviceState state;
- NMIP6DeviceState target_state;
- gboolean addrconf_complete;
-
- GArray *rdnss_servers;
- guint rdnss_timeout_id;
- guint32 rdnss_timeout;
-
- GArray *dnssl_domains;
- guint dnssl_timeout_id;
- guint32 dnssl_timeout;
-
- time_t last_solicitation;
-
- guint ip6flags_poll_id;
-
- guint32 ra_flags;
-} NMIP6Device;
-
-static void
-clear_config_changed (NMIP6Device *device)
-{
- if (device->config_changed_id)
- g_source_remove (device->config_changed_id);
- device->config_changed_id = 0;
-}
-
-static void
-nm_ip6_device_destroy (NMIP6Device *device)
-{
- g_return_if_fail (device != NULL);
-
- /* reset the saved IPv6 value */
- if (device->disable_ip6_save_valid) {
- nm_utils_do_sysctl (device->disable_ip6_path,
- device->disable_ip6_save ? "1" : "0");
- }
-
- if (device->finish_addrconf_id)
- g_source_remove (device->finish_addrconf_id);
-
- clear_config_changed (device);
-
- g_free (device->iface);
- if (device->rdnss_servers)
- g_array_free (device->rdnss_servers, TRUE);
- if (device->rdnss_timeout_id)
- g_source_remove (device->rdnss_timeout_id);
- if (device->dnssl_domains)
- g_array_free (device->dnssl_domains, TRUE);
- if (device->dnssl_timeout_id)
- g_source_remove (device->dnssl_timeout_id);
- if (device->ip6flags_poll_id)
- g_source_remove (device->ip6flags_poll_id);
-
- g_slice_free (NMIP6Device, device);
-}
-
-static NMIP6Device *
-nm_ip6_device_new (NMIP6Manager *manager,
- int ifindex,
- const guint8 *hwaddr,
- guint hwaddr_len)
-{
- NMIP6ManagerPrivate *priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
- NMIP6Device *device;
-
- g_return_val_if_fail (ifindex > 0, NULL);
- g_return_val_if_fail (hwaddr != NULL, NULL);
- g_return_val_if_fail (hwaddr_len > 0, NULL);
- g_return_val_if_fail (hwaddr_len <= NM_UTILS_HWADDR_LEN_MAX, NULL);
-
- device = g_slice_new0 (NMIP6Device);
- if (!device) {
- nm_log_err (LOGD_IP6, "(%d): out of memory creating IP6 addrconf object.",
- ifindex);
- return NULL;
- }
-
- device->ifindex = ifindex;
- device->iface = nm_netlink_index_to_iface (ifindex);
- if (!device->iface) {
- nm_log_err (LOGD_IP6, "(%d): could not find interface name from index.",
- ifindex);
- goto error;
- }
-
- memcpy (device->hwaddr, hwaddr, hwaddr_len);
- device->hwaddr_len = hwaddr_len;
-
- device->manager = manager;
-
- device->rdnss_servers = g_array_new (FALSE, FALSE, sizeof (NMIP6RDNSS));
-
- device->dnssl_domains = g_array_new (FALSE, FALSE, sizeof (NMIP6DNSSL));
-
- g_hash_table_replace (priv->devices, GINT_TO_POINTER (device->ifindex), device);
-
- /* and the original value of IPv6 enable/disable */
- device->disable_ip6_path = g_strdup_printf ("/proc/sys/net/ipv6/conf/%s/disable_ipv6",
- device->iface);
- g_assert (device->disable_ip6_path);
- device->disable_ip6_save_valid = nm_utils_get_proc_sys_net_value_with_bounds (device->disable_ip6_path,
- device->iface,
- &device->disable_ip6_save,
- 0, 1);
-
- return device;
-
-error:
- nm_ip6_device_destroy (device);
- return NULL;
-}
-
-static NMIP6Device *
-nm_ip6_manager_get_device (NMIP6Manager *manager, int ifindex)
-{
- NMIP6ManagerPrivate *priv;
-
- g_return_val_if_fail (manager != NULL, NULL);
- g_return_val_if_fail (NM_IS_IP6_MANAGER (manager), NULL);
-
- priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
- return g_hash_table_lookup (priv->devices, GINT_TO_POINTER (ifindex));
-}
-
-static void
-device_send_router_solicitation (NMIP6Device *device, const char *why)
-{
- int sock, hops;
- struct sockaddr_in6 sin6;
- struct nd_router_solicit rs;
- struct nd_opt_hdr lladdr_hdr;
- static const guint8 local_routers_addr[] =
- { 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };
- struct msghdr mhdr;
- struct iovec iov[3];
- struct cmsghdr *cmsg;
- struct in6_pktinfo *ipi;
- guint8 cmsgbuf[128];
- int cmsglen = 0;
- time_t now;
-
- now = time (NULL);
- if (device->last_solicitation > now - 5)
- return;
- device->last_solicitation = now;
-
- nm_log_dbg (LOGD_IP6, "(%s): %s: sending router solicitation",
- device->iface, why);
-
- sock = socket (AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
- if (sock < 0) {
- nm_log_dbg (LOGD_IP6, "(%s): could not create ICMPv6 socket: %s",
- device->iface, g_strerror (errno));
- return;
- }
-
- hops = 255;
- if ( setsockopt (sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof (hops)) == -1
- || setsockopt (sock, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &hops, sizeof (hops)) == -1) {
- nm_log_dbg (LOGD_IP6, "(%s): could not set hop limit on ICMPv6 socket: %s",
- device->iface, g_strerror (errno));
- close (sock);
- return;
- }
-
- /* Use the "all link-local routers" multicast address */
- memset (&sin6, 0, sizeof (sin6));
- memcpy (&sin6.sin6_addr, local_routers_addr, sizeof (sin6.sin6_addr));
- mhdr.msg_name = &sin6;
- mhdr.msg_namelen = sizeof (sin6);
-
- /* Build the router solicitation */
- mhdr.msg_iov = iov;
- memset (&rs, 0, sizeof (rs));
- rs.nd_rs_type = ND_ROUTER_SOLICIT;
- iov[0].iov_len = sizeof (rs);
- iov[0].iov_base = &rs;
-
- if (device->hwaddr_len > 0) {
- memset (&lladdr_hdr, 0, sizeof (lladdr_hdr));
- lladdr_hdr.nd_opt_type = ND_OPT_SOURCE_LINKADDR;
- lladdr_hdr.nd_opt_len = (sizeof (lladdr_hdr) + device->hwaddr_len + 7) % 8;
- iov[1].iov_len = sizeof (lladdr_hdr);
- iov[1].iov_base = &lladdr_hdr;
-
- iov[2].iov_len = (lladdr_hdr.nd_opt_len * 8) - 2;
- iov[2].iov_base = device->hwaddr;
-
- mhdr.msg_iovlen = 3;
- } else
- mhdr.msg_iovlen = 1;
-
- /* Force this to go on the right device */
- memset (cmsgbuf, 0, sizeof (cmsgbuf));
- cmsg = (struct cmsghdr *) cmsgbuf;
- cmsglen = CMSG_SPACE (sizeof (*ipi));
- cmsg->cmsg_len = CMSG_LEN (sizeof (*ipi));
- cmsg->cmsg_level = SOL_IPV6;
- cmsg->cmsg_type = IPV6_PKTINFO;
- ipi = (struct in6_pktinfo *) CMSG_DATA (cmsg);
- ipi->ipi6_ifindex = device->ifindex;
-
- mhdr.msg_control = cmsg;
- mhdr.msg_controllen = cmsglen;
-
- if (sendmsg (sock, &mhdr, 0) == -1) {
- nm_log_dbg (LOGD_IP6, "(%s): could not send router solicitation: %s",
- device->iface, g_strerror (errno));
- }
-
- close (sock);
-}
-
-static char *
-device_get_iface (NMIP6Device *device)
-{
- return device ? device->iface : "unknown";
-}
-
-static const char *
-state_to_string (NMIP6DeviceState state)
-{
- switch (state) {
- case NM_IP6_DEVICE_UNCONFIGURED:
- return "unconfigured";
- case NM_IP6_DEVICE_GOT_LINK_LOCAL:
- return "got-link-local";
- case NM_IP6_DEVICE_GOT_ROUTER_ADVERTISEMENT:
- return "got-ra";
- case NM_IP6_DEVICE_GOT_ADDRESS:
- return "got-address";
- case NM_IP6_DEVICE_TIMED_OUT:
- return "timed-out";
- default:
- return "unknown";
- }
-}
-
-static gboolean
-device_set_state (NMIP6Device *device, NMIP6DeviceState state)
-{
- NMIP6DeviceState old_state;
-
- g_return_val_if_fail (device != NULL, FALSE);
-
- if (state == device->state)
- return FALSE;
-
- old_state = device->state;
- device->state = state;
- nm_log_dbg (LOGD_IP6, "(%s) IP6 device state: %s -> %s",
- device_get_iface (device),
- state_to_string (old_state),
- state_to_string (state));
- return TRUE;
-}
-
-static char *
-ra_flags_to_string (guint32 ra_flags)
-{
- GString *s = g_string_sized_new (20);
-
- g_string_append (s, " (");
- if (ra_flags & IF_RS_SENT)
- g_string_append_c (s, 'S');
-
- if (ra_flags & IF_RA_RCVD)
- g_string_append_c (s, 'R');
-
- if (ra_flags & IF_RA_MANAGED)
- g_string_append_c (s, 'M');
-
- if (ra_flags & IF_RA_OTHERCONF)
- g_string_append_c (s, 'O');
-
- g_string_append_c (s, ')');
- return g_string_free (s, FALSE);
-}
-
-static gboolean
-device_set_ra_flags (NMIP6Device *device, guint ra_flags)
-{
- guint old_ra_flags;
- gchar *ra_flags_str, *old_ra_flags_str;
-
- g_return_val_if_fail (device != NULL, FALSE);
-
- if (ra_flags == device->ra_flags)
- return FALSE;
-
- old_ra_flags = device->ra_flags;
- device->ra_flags = ra_flags;
-
- if (nm_logging_level_enabled (LOGL_DEBUG)) {
- ra_flags_str = ra_flags_to_string (ra_flags);
- old_ra_flags_str = ra_flags_to_string (old_ra_flags);
- nm_log_dbg (LOGD_IP6, "(%s) IP6 device ra_flags: 0x%08x %s -> 0x%08x %s",
- device_get_iface (device),
- old_ra_flags, old_ra_flags_str,
- ra_flags, ra_flags_str);
- g_free (ra_flags_str);
- g_free (old_ra_flags_str);
- }
-
- return TRUE;
-}
-
-/******************************************************************/
-
-typedef struct {
- NMIP6Device *device;
- gboolean success;
-} CallbackInfo;
-
-static gboolean
-finish_addrconf (gpointer user_data)
-{
- CallbackInfo *info = user_data;
- NMIP6Device *device = info->device;
- NMIP6Manager *manager = device->manager;
- int ifindex;
-
- device->finish_addrconf_id = 0;
- device->addrconf_complete = TRUE;
- ifindex = device->ifindex;
-
- /* We're done, stop polling IPv6 flags */
- if (device->ip6flags_poll_id) {
- g_source_remove (device->ip6flags_poll_id);
- device->ip6flags_poll_id = 0;
- }
-
- /* And tell listeners that addrconf is complete */
- if (info->success) {
- g_signal_emit (manager, signals[ADDRCONF_COMPLETE], 0,
- ifindex, device->dhcp_opts, TRUE);
- } else {
- nm_log_info (LOGD_IP6, "(%s): IP6 addrconf timed out or failed.",
- device->iface);
-
- nm_ip6_manager_cancel_addrconf (manager, ifindex);
- g_signal_emit (manager, signals[ADDRCONF_COMPLETE], 0,
- ifindex, IP6_DHCP_OPT_NONE, FALSE);
- }
-
- return FALSE;
-}
-
-static gboolean
-emit_config_changed (gpointer user_data)
-{
- CallbackInfo *info = user_data;
- NMIP6Device *device = info->device;
- NMIP6Manager *manager = device->manager;
-
- device->config_changed_id = 0;
- g_signal_emit (manager, signals[CONFIG_CHANGED], 0,
- device->ifindex,
- device->dhcp_opts,
- info->success);
- return FALSE;
-}
-
-static void set_rdnss_timeout (NMIP6Device *device);
-
-static gboolean
-rdnss_expired (gpointer user_data)
-{
- NMIP6Device *device = user_data;
- CallbackInfo info = { device, FALSE };
-
- nm_log_dbg (LOGD_IP6, "(%s): IPv6 RDNSS information expired", device->iface);
-
- set_rdnss_timeout (device);
- clear_config_changed (device);
- emit_config_changed (&info);
- return FALSE;
-}
-
-static gboolean
-rdnss_needs_refresh (gpointer user_data)
-{
- NMIP6Device *device = user_data;
- gchar *msg;
-
- msg = g_strdup_printf ("IPv6 RDNSS due to expire in %d seconds",
- device->rdnss_timeout);
- device_send_router_solicitation (device, msg);
- g_free (msg);
-
- set_rdnss_timeout (device);
-
- return FALSE;
-}
-
-static void
-set_rdnss_timeout (NMIP6Device *device)
-{
- time_t expires = 0, now = time (NULL);
- NMIP6RDNSS *rdnss;
- int i;
-
- if (device->rdnss_timeout_id) {
- g_source_remove (device->rdnss_timeout_id);
- device->rdnss_timeout_id = 0;
- }
-
- /* Find the soonest expiration time. */
- for (i = 0; i < device->rdnss_servers->len; i++) {
- rdnss = &g_array_index (device->rdnss_servers, NMIP6RDNSS, i);
- if (rdnss->expires == 0)
- continue;
-
- /* If the entry has already expired, remove it; the "+ 1" is
- * because g_timeout_add_seconds() might fudge the timing a
- * bit.
- */
- if (rdnss->expires <= now + 1) {
- char buf[INET6_ADDRSTRLEN + 1];
-
- if (inet_ntop (AF_INET6, &(rdnss->addr), buf, sizeof (buf)) > 0) {
- nm_log_dbg (LOGD_IP6, "(%s): removing expired RA-provided nameserver %s",
- device->iface, buf);
- }
- g_array_remove_index (device->rdnss_servers, i--);
- continue;
- }
-
- if (!expires || rdnss->expires < expires)
- expires = rdnss->expires;
- }
-
- if (expires) {
- gchar *msg;
-
- device->rdnss_timeout = MIN (expires - now, G_MAXUINT32 - 1);
-
- if (device->rdnss_timeout <= 5) {
- msg = g_strdup_printf ("IPv6 RDNSS about to expire in %d seconds",
- device->rdnss_timeout);
- device_send_router_solicitation (device, msg);
- g_free (msg);
- device->rdnss_timeout_id = g_timeout_add_seconds (device->rdnss_timeout,
- rdnss_expired,
- device);
- } else {
- device->rdnss_timeout_id = g_timeout_add_seconds (device->rdnss_timeout / 2,
- rdnss_needs_refresh,
- device);
- }
- }
-}
-
-static void set_dnssl_timeout (NMIP6Device *device);
-
-static gboolean
-dnssl_expired (gpointer user_data)
-{
- NMIP6Device *device = user_data;
- CallbackInfo info = { device, FALSE };
-
- nm_log_dbg (LOGD_IP6, "(%s): IPv6 DNSSL information expired", device->iface);
-
- set_dnssl_timeout (device);
- clear_config_changed (device);
- emit_config_changed (&info);
- return FALSE;
-}
-
-static gboolean
-dnssl_needs_refresh (gpointer user_data)
-{
- NMIP6Device *device = user_data;
- gchar *msg;
-
- msg = g_strdup_printf ("IPv6 DNSSL due to expire in %d seconds",
- device->dnssl_timeout);
- device_send_router_solicitation (device, msg);
- g_free (msg);
-
- set_dnssl_timeout (device);
-
- return FALSE;
-}
-
-static void
-set_dnssl_timeout (NMIP6Device *device)
-{
- time_t expires = 0, now = time (NULL);
- NMIP6DNSSL *dnssl;
- int i;
-
- if (device->dnssl_timeout_id) {
- g_source_remove (device->dnssl_timeout_id);
- device->dnssl_timeout_id = 0;
- }
-
- /* Find the soonest expiration time. */
- for (i = 0; i < device->dnssl_domains->len; i++) {
- dnssl = &g_array_index (device->dnssl_domains, NMIP6DNSSL, i);
- if (dnssl->expires == 0)
- continue;
-
- /* If the entry has already expired, remove it; the "+ 1" is
- * because g_timeout_add_seconds() might fudge the timing a
- * bit.
- */
- if (dnssl->expires <= now + 1) {
- nm_log_dbg (LOGD_IP6, "(%s): removing expired RA-provided domain %s",
- device->iface, dnssl->domain);
- g_array_remove_index (device->dnssl_domains, i--);
- continue;
- }
-
- if (!expires || dnssl->expires < expires)
- expires = dnssl->expires;
- }
-
- if (expires) {
- gchar *msg;
-
- device->dnssl_timeout = MIN (expires - now, G_MAXUINT32 - 1);
-
- if (device->dnssl_timeout <= 5) {
- msg = g_strdup_printf ("IPv6 DNSSL about to expire in %d seconds",
- device->dnssl_timeout);
- device_send_router_solicitation (device, msg);
- g_free (msg);
- device->dnssl_timeout_id = g_timeout_add_seconds (device->dnssl_timeout,
- dnssl_expired,
- device);
- } else {
- device->dnssl_timeout_id = g_timeout_add_seconds (device->dnssl_timeout / 2,
- dnssl_needs_refresh,
- device);
- }
- }
-}
-
-static CallbackInfo *
-callback_info_new (NMIP6Device *device, gboolean success)
-{
- CallbackInfo *info;
-
- info = g_malloc0 (sizeof (CallbackInfo));
- info->device = device;
- info->success = success;
- return info;
-}
-
-static void
-check_addresses (NMIP6Device *device)
-{
- NMIP6Manager *manager = device->manager;
- NMIP6ManagerPrivate *priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
- struct rtnl_addr *rtnladdr;
- struct nl_addr *nladdr;
- struct in6_addr *addr;
-
- /* Reset address information */
- device->has_linklocal = FALSE;
- device->has_nonlinklocal = FALSE;
-
- /* Look for any IPv6 addresses the kernel may have set for the device */
- for (rtnladdr = (struct rtnl_addr *) nl_cache_get_first (priv->addr_cache);
- rtnladdr;
- rtnladdr = (struct rtnl_addr *) nl_cache_get_next ((struct nl_object *) rtnladdr)) {
- char buf[INET6_ADDRSTRLEN];
-
- if (rtnl_addr_get_ifindex (rtnladdr) != device->ifindex)
- continue;
-
- nladdr = rtnl_addr_get_local (rtnladdr);
- if (!nladdr || nl_addr_get_family (nladdr) != AF_INET6)
- continue;
-
- addr = nl_addr_get_binary_addr (nladdr);
-
- if (inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN) > 0) {
- nm_log_dbg (LOGD_IP6, "(%s): netlink address: %s/%d",
- device->iface, buf,
- rtnl_addr_get_prefixlen (rtnladdr));
- }
-
- if (IN6_IS_ADDR_LINKLOCAL (addr)) {
- if (device->state == NM_IP6_DEVICE_UNCONFIGURED)
- device_set_state (device, NM_IP6_DEVICE_GOT_LINK_LOCAL);
- device->has_linklocal = TRUE;
- } else {
- if (device->state == NM_IP6_DEVICE_GOT_ROUTER_ADVERTISEMENT)
- device_set_state (device, NM_IP6_DEVICE_GOT_ADDRESS);
- device->has_nonlinklocal = TRUE;
- }
- }
-
- /* There might be a LL address hanging around on the interface from
- * before in the initial run, but if it goes away later, make sure we
- * regress from GOT_LINK_LOCAL back to UNCONFIGURED.
- */
- if ((device->state == NM_IP6_DEVICE_GOT_LINK_LOCAL) && !device->has_linklocal)
- device_set_state (device, NM_IP6_DEVICE_UNCONFIGURED);
-
- nm_log_dbg (LOGD_IP6, "(%s): addresses checked (state %s)",
- device->iface, state_to_string (device->state));
-}
-
-static void
-check_ra_flags (NMIP6Device *device)
-{
- device->dhcp_opts = IP6_DHCP_OPT_NONE;
-
- /* We only care about router advertisements if we want a real IPv6 address */
- if ( (device->target_state == NM_IP6_DEVICE_GOT_ADDRESS)
- && (device->ra_flags & IF_RA_RCVD)) {
-
- if (device->state < NM_IP6_DEVICE_GOT_ROUTER_ADVERTISEMENT)
- device_set_state (device, NM_IP6_DEVICE_GOT_ROUTER_ADVERTISEMENT);
-
- if (device->ra_flags & IF_RA_MANAGED) {
- device->dhcp_opts = IP6_DHCP_OPT_MANAGED;
- nm_log_dbg (LOGD_IP6, "router advertisement deferred to DHCPv6");
- } else if (device->ra_flags & IF_RA_OTHERCONF) {
- device->dhcp_opts = IP6_DHCP_OPT_OTHERCONF;
- nm_log_dbg (LOGD_IP6, "router advertisement requests parallel DHCPv6");
- }
- }
- nm_log_dbg (LOGD_IP6, "(%s): router advertisement checked (state %s)",
- device->iface, state_to_string (device->state));
-}
-
-static void
-check_addrconf_complete (NMIP6Device *device)
-{
- CallbackInfo *info;
-
- if (!device->addrconf_complete) {
- /* Managed mode (ie DHCP only) short-circuits automatic addrconf, so
- * we don't bother waiting for the device's target state to be reached
- * when the RA requests managed mode.
- */
- if ( (device->state >= device->target_state)
- || (device->dhcp_opts == IP6_DHCP_OPT_MANAGED)) {
- /* device->finish_addrconf_id may currently be a timeout
- * rather than an idle, so we remove the existing source.
- */
- if (device->finish_addrconf_id)
- g_source_remove (device->finish_addrconf_id);
-
- nm_log_dbg (LOGD_IP6, "(%s): reached target state or Managed-mode requested (state '%s') (dhcp opts 0x%X)",
- device->iface, state_to_string (device->state),
- device->dhcp_opts);
-
- info = callback_info_new (device, TRUE);
- device->finish_addrconf_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
- finish_addrconf,
- info,
- (GDestroyNotify) g_free);
- }
- } else {
- if (!device->config_changed_id) {
- gboolean success = TRUE;
-
- /* If for some reason an RA-provided address disappeared, we need
- * to make sure we fail the connection as it's no longer valid.
- */
- if ( (device->state == NM_IP6_DEVICE_GOT_ADDRESS)
- && (device->target_state == NM_IP6_DEVICE_GOT_ADDRESS)
- && !device->has_nonlinklocal) {
- nm_log_dbg (LOGD_IP6, "(%s): RA-provided address no longer found",
- device->iface);
- success = FALSE;
- }
-
- info = callback_info_new (device, success);
- device->config_changed_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
- emit_config_changed,
- info,
- (GDestroyNotify) g_free);
- }
- }
-
- nm_log_dbg (LOGD_IP6, "(%s): dhcp_opts checked (state %s)",
- device->iface, state_to_string (device->state));
-}
-
-static void
-nm_ip6_device_sync_from_netlink (NMIP6Device *device)
-{
- nm_log_dbg (LOGD_IP6, "(%s): syncing with netlink (ra_flags 0x%X) (state/target '%s'/'%s')",
- device->iface, device->ra_flags,
- state_to_string (device->state),
- state_to_string (device->target_state));
-
- check_ra_flags (device);
- check_addresses (device);
- check_addrconf_complete (device);
-}
-
-static void
-ref_object (struct nl_object *obj, void *data)
-{
- struct nl_object **out = data;
-
- nl_object_get (obj);
- *out = obj;
-}
-
-static void
-dump_address_change (NMIP6Device *device, struct nlmsghdr *hdr, struct rtnl_addr *rtnladdr)
-{
- char *event;
- struct nl_addr *addr;
- char addr_str[40] = "none";
-
- event = hdr->nlmsg_type == RTM_NEWADDR ? "new" : "lost";
- addr = rtnl_addr_get_local (rtnladdr);
- if (addr)
- nl_addr2str (addr, addr_str, 40);
-
- nm_log_dbg (LOGD_IP6, "(%s) %s address: %s", device_get_iface (device), event, addr_str);
-}
-
-static void
-dump_route_change (NMIP6Device *device, struct nlmsghdr *hdr, struct rtnl_route *rtnlroute)
-{
- char *event;
- struct nl_addr *dst;
- char dst_str[40] = "none";
- struct nl_addr *gateway;
- char gateway_str[40] = "none";
-
- event = hdr->nlmsg_type == RTM_NEWROUTE ? "new" : "lost";
- dst = rtnl_route_get_dst (rtnlroute);
- gateway = rtnl_route_get_gateway (rtnlroute);
- if (dst)
- nl_addr2str (dst, dst_str, 40);
- if (gateway)
- nl_addr2str (gateway, gateway_str, 40);
-
- nm_log_dbg (LOGD_IP6, "(%s) %s route: %s via %s",device_get_iface (device), event, dst_str, gateway_str);
-}
-
-static NMIP6Device *
-process_address_change (NMIP6Manager *manager, struct nl_msg *msg)
-{
- NMIP6ManagerPrivate *priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
- NMIP6Device *device;
- struct nlmsghdr *hdr;
- struct rtnl_addr *rtnladdr;
- int old_size;
-
- hdr = nlmsg_hdr (msg);
- rtnladdr = NULL;
- nl_msg_parse (msg, ref_object, &rtnladdr);
- if (!rtnladdr) {
- nm_log_dbg (LOGD_IP6, "error processing netlink new/del address message");
- return NULL;
- }
-
- device = nm_ip6_manager_get_device (manager, rtnl_addr_get_ifindex (rtnladdr));
-
- old_size = nl_cache_nitems (priv->addr_cache);
- nl_cache_include (priv->addr_cache, (struct nl_object *)rtnladdr, NULL, NULL);
-
- /* The kernel will re-notify us of automatically-added addresses
- * every time it gets another router advertisement. We only want
- * to notify higher levels if we actually changed something.
- */
- nm_log_dbg (LOGD_IP6, "(%s): address cache size: %d -> %d:",
- device_get_iface (device), old_size, nl_cache_nitems (priv->addr_cache));
- dump_address_change (device, hdr, rtnladdr);
- rtnl_addr_put (rtnladdr);
- if (nl_cache_nitems (priv->addr_cache) == old_size)
- return NULL;
-
- return device;
-}
-
-static NMIP6Device *
-process_route_change (NMIP6Manager *manager, struct nl_msg *msg)
-{
- NMIP6ManagerPrivate *priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
- NMIP6Device *device;
- struct nlmsghdr *hdr;
- struct rtnl_route *rtnlroute;
- int old_size;
-
- hdr = nlmsg_hdr (msg);
- rtnlroute = NULL;
- nl_msg_parse (msg, ref_object, &rtnlroute);
- if (!rtnlroute) {
- nm_log_dbg (LOGD_IP6, "error processing netlink new/del route message");
- return NULL;
- }
-
- /* Cached/cloned routes are created by the kernel for specific operations
- * and aren't part of the interface's permanent routing configuration.
- */
- if (rtnl_route_get_flags (rtnlroute) & RTM_F_CLONED) {
- rtnl_route_put (rtnlroute);
- return NULL;
- }
-
- device = nm_ip6_manager_get_device (manager, rtnl_route_get_oif (rtnlroute));
-
- old_size = nl_cache_nitems (priv->route_cache);
- nl_cache_include (priv->route_cache, (struct nl_object *)rtnlroute, NULL, NULL);
-
- /* As above in process_address_change */
- nm_log_dbg (LOGD_IP6, "(%s): route cache size: %d -> %d:",
- device_get_iface (device), old_size, nl_cache_nitems (priv->route_cache));
- dump_route_change (device, hdr, rtnlroute);
- rtnl_route_put (rtnlroute);
- if (nl_cache_nitems (priv->route_cache) == old_size)
- return NULL;
-
- return device;
-}
-
-/* RDNSS parsing code based on rdnssd, Copyright 2007 Pierre Ynard,
- * Rémi Denis-Courmont. GPLv2/3
- */
-
-#define ND_OPT_RDNSS 25
-#define ND_OPT_DNSSL 31
-
-struct nd_opt_rdnss {
- uint8_t nd_opt_rdnss_type;
- uint8_t nd_opt_rdnss_len;
- uint16_t nd_opt_rdnss_reserved1;
- uint32_t nd_opt_rdnss_lifetime;
- /* followed by one or more IPv6 addresses */
-} __attribute__ ((packed));
-
-struct nd_opt_dnssl {
- uint8_t nd_opt_dnssl_type;
- uint8_t nd_opt_dnssl_len;
- uint16_t nd_opt_dnssl_reserved1;
- uint32_t nd_opt_dnssl_lifetime;
- /* followed by one or more suffixes */
-} __attribute__ ((packed));
-
-static gboolean
-process_nduseropt_rdnss (NMIP6Device *device, struct nd_opt_hdr *opt)
-{
- size_t opt_len;
- struct nd_opt_rdnss *rdnss_opt;
- time_t now = time (NULL);
- struct in6_addr *addr;
- GArray *new_servers;
- NMIP6RDNSS server, *cur_server;
- gboolean changed = FALSE;
- guint i;
-
- opt_len = opt->nd_opt_len;
-
- if (opt_len < 3 || (opt_len & 1) == 0)
- return FALSE;
-
- rdnss_opt = (struct nd_opt_rdnss *) opt;
-
- new_servers = g_array_new (FALSE, FALSE, sizeof (NMIP6RDNSS));
-
- /* Pad the DNS server expiry somewhat to give a bit of slack in cases
- * where one RA gets lost or something (which can happen on unreliable
- * links like WiFi where certain types of frames are not retransmitted).
- * Note that 0 has special meaning and is therefore not adjusted.
- */
- server.expires = ntohl (rdnss_opt->nd_opt_rdnss_lifetime);
- if (server.expires > 0)
- if (server.expires < 7200)
- server.expires = 7200;
- server.expires += now;
-
- for (addr = (struct in6_addr *) (rdnss_opt + 1); opt_len >= 2; addr++, opt_len -= 2) {
- char buf[INET6_ADDRSTRLEN + 1];
-
- if (!inet_ntop (AF_INET6, addr, buf, sizeof (buf))) {
- nm_log_warn (LOGD_IP6, "(%s): received invalid RA-provided nameserver", device->iface);
- continue;
- }
-
- /* Update the cached timeout if we already saw this server */
- for (i = 0; i < device->rdnss_servers->len; i++) {
- cur_server = &(g_array_index (device->rdnss_servers, NMIP6RDNSS, i));
-
- if (!IN6_ARE_ADDR_EQUAL (addr, &cur_server->addr))
- continue;
-
- cur_server->expires = server.expires;
-
- if (server.expires > 0) {
- nm_log_dbg (LOGD_IP6, "(%s): refreshing RA-provided nameserver %s (expires in %ld seconds)",
- device->iface, buf,
- server.expires - now);
- break;
- }
-
- nm_log_dbg (LOGD_IP6, "(%s): removing RA-provided nameserver %s on router request",
- device->iface, buf);
-
- g_array_remove_index (device->rdnss_servers, i);
- changed = TRUE;
- break;
- }
-
- if (server.expires == 0)
- continue;
- if (i < device->rdnss_servers->len)
- continue;
-
- nm_log_dbg (LOGD_IP6, "(%s): found RA-provided nameserver %s (expires in %ld seconds)",
- device->iface, buf, server.expires - now);
-
- server.addr = *addr;
- g_array_append_val (new_servers, server);
- }
-
- /* New servers must be added in the order they are listed in the
- * RA option and before any existing servers.
- *
- * Note: This is the place to remove servers if we want to cap the
- * number of resolvers. The RFC states that the one to expire
- * first of the existing servers should be removed.
- */
- if (new_servers->len) {
- g_array_prepend_vals (device->rdnss_servers,
- new_servers->data, new_servers->len);
- changed = TRUE;
- }
-
- g_array_free (new_servers, TRUE);
-
- /* Timeouts may have changed even if IPs didn't */
- set_rdnss_timeout (device);
-
- return changed;
-}
-
-static const char *
-parse_dnssl_domain (const unsigned char *buffer, size_t maxlen)
-{
- static char domain[256];
- size_t label_len;
-
- domain[0] = '\0';
-
- while (maxlen > 0) {
- label_len = *buffer;
- buffer++;
- maxlen--;
-
- if (label_len == 0)
- return domain;
-
- if (label_len > maxlen)
- return NULL;
- if ((sizeof (domain) - strlen (domain)) < (label_len + 2))
- return NULL;
-
- if (domain[0] != '\0')
- strcat (domain, ".");
- strncat (domain, (const char *)buffer, label_len);
- buffer += label_len;
- maxlen -= label_len;
- }
-
- return NULL;
-}
-
-static gboolean
-process_nduseropt_dnssl (NMIP6Device *device, struct nd_opt_hdr *opt)
-{
- size_t opt_len;
- struct nd_opt_dnssl *dnssl_opt;
- unsigned char *opt_ptr;
- time_t now = time (NULL);
- GArray *new_domains;
- NMIP6DNSSL domain, *cur_domain;
- gboolean changed;
- guint i;
-
- opt_len = opt->nd_opt_len;
-
- if (opt_len < 2)
- return FALSE;
-
- dnssl_opt = (struct nd_opt_dnssl *) opt;
-
- opt_ptr = (unsigned char *)(dnssl_opt + 1);
- opt_len = (opt_len - 1) * 8; /* prefer bytes for later handling */
-
- new_domains = g_array_new (FALSE, FALSE, sizeof (NMIP6DNSSL));
-
- changed = FALSE;
-
- /* Pad the DNS server expiry somewhat to give a bit of slack in cases
- * where one RA gets lost or something (which can happen on unreliable
- * links like wifi where certain types of frames are not retransmitted).
- * Note that 0 has special meaning and is therefore not adjusted.
- */
- domain.expires = ntohl (dnssl_opt->nd_opt_dnssl_lifetime);
- if (domain.expires > 0)
- if (domain.expires < 7200)
- domain.expires = 7200;
- domain.expires += now;
-
- while (opt_len) {
- const char *domain_str;
-
- domain_str = parse_dnssl_domain (opt_ptr, opt_len);
- if (domain_str == NULL) {
- nm_log_dbg (LOGD_IP6, "(%s): invalid DNSSL option, parsing aborted",
- device->iface);
- break;
- }
-
- /* The DNSSL encoding of domains happen to occupy the same size
- * as the length of the resulting string, including terminating
- * null. */
- opt_ptr += strlen (domain_str) + 1;
- opt_len -= strlen (domain_str) + 1;
-
- /* Ignore empty domains. They're probably just padding... */
- if (domain_str[0] == '\0')
- continue;
-
- /* Update cached domain information if we've seen this domain before */
- for (i = 0; i < device->dnssl_domains->len; i++) {
- cur_domain = &(g_array_index (device->dnssl_domains, NMIP6DNSSL, i));
-
- if (strcmp (domain_str, cur_domain->domain) != 0)
- continue;
-
- cur_domain->expires = domain.expires;
-
- if (domain.expires > 0) {
- nm_log_dbg (LOGD_IP6, "(%s): refreshing RA-provided domain %s (expires in %ld seconds)",
- device->iface, domain_str,
- domain.expires - now);
- break;
- }
-
- nm_log_dbg (LOGD_IP6, "(%s): removing RA-provided domain %s on router request",
- device->iface, domain_str);
-
- g_array_remove_index (device->dnssl_domains, i);
- changed = TRUE;
- break;
- }
-
- if (domain.expires == 0)
- continue;
- if (i < device->dnssl_domains->len)
- continue;
-
- nm_log_dbg (LOGD_IP6, "(%s): found RA-provided domain %s (expires in %ld seconds)",
- device->iface, domain_str, domain.expires - now);
-
- g_assert (strlen (domain_str) < sizeof (domain.domain));
- strcpy (domain.domain, domain_str);
- g_array_append_val (new_domains, domain);
- }
-
- /* New domains must be added in the order they are listed in the
- * RA option and before any existing domains.
- *
- * Note: This is the place to remove domains if we want to cap the
- * number of domains. The RFC states that the one to expire
- * first of the existing domains should be removed.
- */
- if (new_domains->len) {
- g_array_prepend_vals (device->dnssl_domains,
- new_domains->data, new_domains->len);
- changed = TRUE;
- }
-
- g_array_free (new_domains, TRUE);
-
- /* Timeouts may have changed even if domains didn't */
- set_dnssl_timeout (device);
-
- return changed;
-}
-
-static NMIP6Device *
-process_nduseropt (NMIP6Manager *manager, struct nl_msg *msg)
-{
- NMIP6Device *device;
- struct nduseroptmsg *ndmsg;
- struct nd_opt_hdr *opt;
- guint opts_len;
- gboolean changed = FALSE;
-
- nm_log_dbg (LOGD_IP6, "processing netlink nduseropt message");
-
- ndmsg = (struct nduseroptmsg *) NLMSG_DATA (nlmsg_hdr (msg));
-
- if (!nlmsg_valid_hdr (nlmsg_hdr (msg), sizeof (*ndmsg)) ||
- nlmsg_datalen (nlmsg_hdr (msg)) <
- (ndmsg->nduseropt_opts_len + sizeof (*ndmsg))) {
- nm_log_dbg (LOGD_IP6, "ignoring invalid nduseropt message");
- return NULL;
- }
-
- if (ndmsg->nduseropt_family != AF_INET6 ||
- ndmsg->nduseropt_icmp_type != ND_ROUTER_ADVERT ||
- ndmsg->nduseropt_icmp_code != 0) {
- nm_log_dbg (LOGD_IP6, "ignoring non-Router Advertisement message");
- return NULL;
- }
-
- device = nm_ip6_manager_get_device (manager, ndmsg->nduseropt_ifindex);
- if (!device) {
- nm_log_dbg (LOGD_IP6, "ignoring message for unknown device");
- return NULL;
- }
-
- opt = (struct nd_opt_hdr *) (ndmsg + 1);
- opts_len = ndmsg->nduseropt_opts_len;
-
- while (opts_len >= sizeof (struct nd_opt_hdr)) {
- size_t nd_opt_len = opt->nd_opt_len;
-
- if (nd_opt_len == 0 || opts_len < (nd_opt_len << 3))
- break;
-
- switch (opt->nd_opt_type) {
- case ND_OPT_RDNSS:
- changed = process_nduseropt_rdnss (device, opt);
- break;
- case ND_OPT_DNSSL:
- changed = process_nduseropt_dnssl (device, opt);
- break;
- }
-
- opts_len -= opt->nd_opt_len << 3;
- opt = (struct nd_opt_hdr *) ((uint8_t *) opt + (opt->nd_opt_len << 3));
- }
-
- if (changed)
- return device;
- else
- return NULL;
-}
-
-static struct nla_policy link_policy[IFLA_MAX + 1] = {
- [IFLA_PROTINFO] = { .type = NLA_NESTED },
-};
-
-static struct nla_policy link_prot_policy[IFLA_INET6_MAX + 1] = {
- [IFLA_INET6_FLAGS] = { .type = NLA_U32 },
-};
-
-static NMIP6Device *
-process_newlink (NMIP6Manager *manager, struct nl_msg *msg)
-{
- struct nlmsghdr *hdr = nlmsg_hdr (msg);
- struct ifinfomsg *ifi;
- NMIP6Device *device;
- struct nlattr *tb[IFLA_MAX + 1];
- struct nlattr *pi[IFLA_INET6_MAX + 1];
- int err;
-
- /* FIXME: we have to do this manually for now since libnl doesn't yet
- * support the IFLA_PROTINFO attribute of NEWLINK messages. When it does,
- * we can get rid of this function and just grab IFLA_PROTINFO from
- * nm_ip6_device_sync_from_netlink(), then get the IFLA_INET6_FLAGS out of
- * the PROTINFO.
- */
- err = nlmsg_parse (hdr, sizeof (*ifi), tb, IFLA_MAX, link_policy);
- if (err < 0) {
- nm_log_dbg (LOGD_IP6, "ignoring invalid newlink netlink message "
- "while parsing PROTINFO attribute");
- return NULL;
- }
-
- ifi = nlmsg_data (hdr);
- if (ifi->ifi_family != AF_INET6) {
- nm_log_dbg (LOGD_IP6, "ignoring netlink message family %d", ifi->ifi_family);
- return NULL;
- }
-
- device = nm_ip6_manager_get_device (manager, ifi->ifi_index);
- if (!device || device->addrconf_complete) {
- nm_log_dbg (LOGD_IP6, "(%s): ignoring unknown or completed device",
- device ? device->iface : "(none)");
- return NULL;
- }
-
- if (!tb[IFLA_PROTINFO]) {
- nm_log_dbg (LOGD_IP6, "(%s): message had no PROTINFO attribute", device->iface);
- return NULL;
- }
-
- err = nla_parse_nested (pi, IFLA_INET6_MAX, tb[IFLA_PROTINFO], link_prot_policy);
- if (err < 0) {
- nm_log_dbg (LOGD_IP6, "(%s): error parsing PROTINFO flags", device->iface);
- return NULL;
- }
- if (!pi[IFLA_INET6_FLAGS]) {
- nm_log_dbg (LOGD_IP6, "(%s): message had no PROTINFO flags", device->iface);
- return NULL;
- }
-
- device_set_ra_flags (device, nla_get_u32 (pi[IFLA_INET6_FLAGS]));
-
- return device;
-}
-
-static void
-netlink_notification (NMNetlinkMonitor *monitor, struct nl_msg *msg, gpointer user_data)
-{
- NMIP6Manager *manager = (NMIP6Manager *) user_data;
- NMIP6Device *device;
- struct nlmsghdr *hdr;
-
- hdr = nlmsg_hdr (msg);
- nm_log_dbg (LOGD_HW, "netlink event type %d", hdr->nlmsg_type);
- switch (hdr->nlmsg_type) {
- case RTM_NEWADDR:
- case RTM_DELADDR:
- device = process_address_change (manager, msg);
- break;
- case RTM_NEWROUTE:
- case RTM_DELROUTE:
- device = process_route_change (manager, msg);
- break;
- case RTM_NEWNDUSEROPT:
- device = process_nduseropt (manager, msg);
- break;
- case RTM_NEWLINK:
- device = process_newlink (manager, msg);
- break;
- default:
- return;
- }
-
- if (device) {
- nm_ip6_device_sync_from_netlink (device);
- }
-}
-
-gboolean
-nm_ip6_manager_prepare_interface (NMIP6Manager *manager,
- int ifindex,
- const guint8 *hwaddr,
- guint hwaddr_len,
- NMSettingIP6Config *s_ip6,
- const char *accept_ra_path)
-{
- NMIP6ManagerPrivate *priv;
- NMIP6Device *device;
- const char *method = NULL;
-
- g_return_val_if_fail (NM_IS_IP6_MANAGER (manager), FALSE);
- g_return_val_if_fail (ifindex > 0, FALSE);
- g_return_val_if_fail (hwaddr != NULL, FALSE);
- g_return_val_if_fail (hwaddr_len > 0, FALSE);
- g_return_val_if_fail (hwaddr_len <= NM_UTILS_HWADDR_LEN_MAX, FALSE);
-
- priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
-
- device = nm_ip6_device_new (manager, ifindex, hwaddr, hwaddr_len);
- g_return_val_if_fail (device != NULL, FALSE);
- g_return_val_if_fail ( strchr (device->iface, '/') == NULL
- && strcmp (device->iface, "all") != 0
- && strcmp (device->iface, "default") != 0,
- FALSE);
-
- if (s_ip6)
- method = nm_setting_ip6_config_get_method (s_ip6);
- if (!method)
- method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
-
- /* Establish target state and turn router advertisement acceptance on or off */
- if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)) {
- device->target_state = NM_IP6_DEVICE_GOT_LINK_LOCAL;
- nm_utils_do_sysctl (accept_ra_path, "0");
- } else {
- device->target_state = NM_IP6_DEVICE_GOT_ADDRESS;
- nm_utils_do_sysctl (accept_ra_path, "2");
- }
-
- return TRUE;
-}
-
-static gboolean
-poll_ip6_flags (gpointer user_data)
-{
- nm_netlink_monitor_request_ip6_info (NM_NETLINK_MONITOR (user_data), NULL);
- return TRUE;
-}
-
-#define FIRST_ROUTE(m) ((struct rtnl_route *) nl_cache_get_first (m))
-#define NEXT_ROUTE(m) ((struct rtnl_route *) nl_cache_get_next ((struct nl_object *) m))
-
-#define FIRST_ADDR(m) ((struct rtnl_addr *) nl_cache_get_first (m))
-#define NEXT_ADDR(m) ((struct rtnl_addr *) nl_cache_get_next ((struct nl_object *) m))
-
-static void
-wait_for_no_addresses (NMIP6Manager *self, NMIP6Device *device)
-{
- NMIP6ManagerPrivate *priv = NM_IP6_MANAGER_GET_PRIVATE (self);
- guint64 now, end;
- gboolean has_addrs = TRUE;
-
- now = end = g_get_real_time ();
- end += (G_USEC_PER_SEC * 3);
-
- while (has_addrs && now < end) {
- struct rtnl_addr *rtnladdr;
- struct nl_addr *nladdr;
-
- nl_cache_refill (priv->nlh, priv->addr_cache);
- for (has_addrs = FALSE, rtnladdr = FIRST_ADDR (priv->addr_cache);
- rtnladdr;
- rtnladdr = NEXT_ADDR (rtnladdr)) {
-
- nladdr = rtnl_addr_get_local (rtnladdr);
- if ( rtnl_addr_get_ifindex (rtnladdr) == device->ifindex
- && nladdr
- && nl_addr_get_family (nladdr) == AF_INET6) {
- /* Still IPv6 addresses on the interface */
- has_addrs = TRUE;
- nm_log_dbg (LOGD_IP6, "(%s) waiting for cleared IPv6 addresses", device->iface);
- g_usleep (100);
- now = g_get_real_time ();
- break;
- }
- }
- }
-}
-
-void
-nm_ip6_manager_begin_addrconf (NMIP6Manager *manager, int ifindex)
-{
- NMIP6ManagerPrivate *priv;
- NMIP6Device *device;
- CallbackInfo *info;
-
- g_return_if_fail (NM_IS_IP6_MANAGER (manager));
- g_return_if_fail (ifindex > 0);
-
- priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
-
- device = (NMIP6Device *) g_hash_table_lookup (priv->devices, GINT_TO_POINTER (ifindex));
- g_return_if_fail (device != NULL);
-
- nm_log_info (LOGD_IP6, "Activation (%s) Beginning IP6 addrconf.", device->iface);
-
- device->addrconf_complete = FALSE;
- device->ra_flags = 0;
-
- /* Set up a timeout on the transaction to kill it after the timeout */
- info = callback_info_new (device, FALSE);
- device->finish_addrconf_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
- NM_IP6_TIMEOUT,
- finish_addrconf,
- info,
- (GDestroyNotify) g_free);
-
- /* Bounce IPv6 on the interface to ensure the kernel will start looking for
- * new RAs; there doesn't seem to be a better way to do this right now.
- */
- if (device->target_state >= NM_IP6_DEVICE_GOT_ADDRESS) {
- nm_utils_do_sysctl (device->disable_ip6_path, "1");
- /* Wait until all existing IPv6 addresses have been removed from the link,
- * to ensure they don't confuse our IPv6 addressing state machine.
- */
- wait_for_no_addresses (manager, device);
- nm_utils_do_sysctl (device->disable_ip6_path, "0");
- }
-
- device->ip6flags_poll_id = g_timeout_add_seconds (1, poll_ip6_flags, priv->monitor);
-
- /* Kick off the initial IPv6 flags request */
- nm_netlink_monitor_request_ip6_info (priv->monitor, NULL);
-
- /* Sync flags, etc, from netlink; this will also notice if the
- * device is already fully configured and schedule the
- * ADDRCONF_COMPLETE signal in that case.
- */
- nm_ip6_device_sync_from_netlink (device);
-}
-
-void
-nm_ip6_manager_cancel_addrconf (NMIP6Manager *manager, int ifindex)
-{
- g_return_if_fail (NM_IS_IP6_MANAGER (manager));
- g_return_if_fail (ifindex > 0);
-
- g_hash_table_remove (NM_IP6_MANAGER_GET_PRIVATE (manager)->devices,
- GINT_TO_POINTER (ifindex));
-}
-
-NMIP6Config *
-nm_ip6_manager_get_ip6_config (NMIP6Manager *manager, int ifindex)
-{
- NMIP6ManagerPrivate *priv;
- NMIP6Device *device;
- NMIP6Config *config;
- struct rtnl_addr *rtnladdr;
- struct nl_addr *nladdr;
- struct in6_addr *addr;
- NMIP6Address *ip6addr;
- struct rtnl_route *rtnlroute;
- struct nl_addr *nldest, *nlgateway;
- const struct in6_addr *dest, *gateway;
- uint32_t metric;
- NMIP6Route *ip6route;
- int i;
-
- g_return_val_if_fail (NM_IS_IP6_MANAGER (manager), NULL);
- g_return_val_if_fail (ifindex > 0, NULL);
-
- priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
-
- device = (NMIP6Device *) g_hash_table_lookup (priv->devices,
- GINT_TO_POINTER (ifindex));
- if (!device) {
- nm_log_warn (LOGD_IP6, "(%d): addrconf not started.", ifindex);
- return NULL;
- }
-
- config = nm_ip6_config_new ();
- if (!config) {
- nm_log_err (LOGD_IP6, "(%s): out of memory creating IP6 config object.",
- device->iface);
- return NULL;
- }
-
- /* Make sure we refill the route and address caches, otherwise we won't get
- * up-to-date information here since the netlink route/addr change messages
- * may be lagging a bit.
- */
- nl_cache_refill (priv->nlh, priv->route_cache);
- nl_cache_refill (priv->nlh, priv->addr_cache);
-
- /* Add routes */
- for (rtnlroute = FIRST_ROUTE (priv->route_cache); rtnlroute; rtnlroute = NEXT_ROUTE (rtnlroute)) {
- /* Make sure it's an IPv6 route for this device */
- if (rtnl_route_get_oif (rtnlroute) != device->ifindex)
- continue;
- if (rtnl_route_get_family (rtnlroute) != AF_INET6)
- continue;
-
- /* And ignore cache/cloned routes as they aren't part of the interface's
- * permanent routing configuration.
- */
- if (rtnl_route_get_flags (rtnlroute) & RTM_F_CLONED)
- continue;
-
- nldest = rtnl_route_get_dst (rtnlroute);
- if (!nldest || nl_addr_get_family (nldest) != AF_INET6)
- continue;
- dest = nl_addr_get_binary_addr (nldest);
-
- nlgateway = rtnl_route_get_gateway (rtnlroute);
- if (!nlgateway || nl_addr_get_family (nlgateway) != AF_INET6)
- continue;
- gateway = nl_addr_get_binary_addr (nlgateway);
-
- if (rtnl_route_get_dst_len (rtnlroute) == 0) {
- /* Default gateway route; cache the router's address for later */
- if (!nm_ip6_config_get_gateway (config))
- nm_ip6_config_set_gateway (config, gateway);
- continue;
- }
-
- /* Also ignore link-local routes where the destination and gateway are
- * the same, which apparently get added by the kernel but return -EINVAL
- * when we try to add them via netlink.
- */
- if (gateway && IN6_ARE_ADDR_EQUAL (dest, gateway))
- continue;
-
- ip6route = nm_ip6_route_new ();
- nm_ip6_route_set_dest (ip6route, dest);
- nm_ip6_route_set_prefix (ip6route, rtnl_route_get_dst_len (rtnlroute));
- nm_ip6_route_set_next_hop (ip6route, gateway);
- rtnl_route_get_metric(rtnlroute, 1, &metric);
- if (metric != UINT_MAX)
- nm_ip6_route_set_metric (ip6route, metric);
- nm_ip6_config_take_route (config, ip6route);
- }
-
- /* Add addresses */
- for (rtnladdr = FIRST_ADDR (priv->addr_cache); rtnladdr; rtnladdr = NEXT_ADDR (rtnladdr)) {
- if (rtnl_addr_get_ifindex (rtnladdr) != device->ifindex)
- continue;
-
- nladdr = rtnl_addr_get_local (rtnladdr);
- if (!nladdr || nl_addr_get_family (nladdr) != AF_INET6)
- continue;
-
- addr = nl_addr_get_binary_addr (nladdr);
- ip6addr = nm_ip6_address_new ();
- nm_ip6_address_set_prefix (ip6addr, rtnl_addr_get_prefixlen (rtnladdr));
- nm_ip6_address_set_address (ip6addr, addr);
- nm_ip6_config_take_address (config, ip6addr);
- gateway = nm_ip6_config_get_gateway (config);
- if (gateway)
- nm_ip6_address_set_gateway (ip6addr, gateway);
- }
-
- /* Add DNS servers */
- if (device->rdnss_servers) {
- NMIP6RDNSS *rdnss = (NMIP6RDNSS *)(device->rdnss_servers->data);
-
- for (i = 0; i < device->rdnss_servers->len; i++)
- nm_ip6_config_add_nameserver (config, &rdnss[i].addr);
- }
-
- /* Add DNS domains */
- if (device->dnssl_domains) {
- NMIP6DNSSL *dnssl = (NMIP6DNSSL *)(device->dnssl_domains->data);
-
- for (i = 0; i < device->dnssl_domains->len; i++)
- nm_ip6_config_add_domain (config, dnssl[i].domain);
- }
-
- return config;
-}
-
-/******************************************************************/
-
-static NMIP6Manager *
-nm_ip6_manager_new (void)
-{
- NMIP6Manager *manager;
- NMIP6ManagerPrivate *priv;
-
- manager = g_object_new (NM_TYPE_IP6_MANAGER, NULL);
- priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
-
- if (!priv->devices) {
- nm_log_err (LOGD_IP6, "not enough memory to initialize IP6 manager tables");
- g_object_unref (manager);
- manager = NULL;
- }
-
- return manager;
-}
-
-static NMIP6Manager *singleton = NULL;
-
-NMIP6Manager *
-nm_ip6_manager_get (void)
-{
- if (!singleton) {
- singleton = nm_ip6_manager_new ();
- g_assert (singleton);
- } else
- g_object_ref (singleton);
-
- return singleton;
-}
-
-static void
-nm_ip6_manager_init (NMIP6Manager *manager)
-{
- NMIP6ManagerPrivate *priv = NM_IP6_MANAGER_GET_PRIVATE (manager);
-
- priv->devices = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL,
- (GDestroyNotify) nm_ip6_device_destroy);
-
- priv->monitor = nm_netlink_monitor_get ();
- nm_netlink_monitor_subscribe (priv->monitor, RTNLGRP_IPV6_IFADDR, NULL);
- nm_netlink_monitor_subscribe (priv->monitor, RTNLGRP_IPV6_PREFIX, NULL);
- nm_netlink_monitor_subscribe (priv->monitor, RTNLGRP_IPV6_ROUTE, NULL);
- nm_netlink_monitor_subscribe (priv->monitor, RTNLGRP_ND_USEROPT, NULL);
- nm_netlink_monitor_subscribe (priv->monitor, RTNLGRP_LINK, NULL);
-
- priv->netlink_id = g_signal_connect (priv->monitor, "notification",
- G_CALLBACK (netlink_notification), manager);
-
- priv->nlh = nm_netlink_get_default_handle ();
- rtnl_addr_alloc_cache (priv->nlh, &priv->addr_cache);
- g_warn_if_fail (priv->addr_cache != NULL);
- rtnl_route_alloc_cache (priv->nlh, NETLINK_ROUTE, NL_AUTO_PROVIDE, &priv->route_cache);
- g_warn_if_fail (priv->route_cache != NULL);
-}
-
-static void
-finalize (GObject *object)
-{
- NMIP6ManagerPrivate *priv = NM_IP6_MANAGER_GET_PRIVATE (object);
-
- g_signal_handler_disconnect (priv->monitor, priv->netlink_id);
-
- g_hash_table_destroy (priv->devices);
- g_object_unref (priv->monitor);
- nl_cache_free (priv->addr_cache);
- nl_cache_free (priv->route_cache);
-
- singleton = NULL;
-
- G_OBJECT_CLASS (nm_ip6_manager_parent_class)->finalize (object);
-}
-
-static void
-nm_ip6_manager_class_init (NMIP6ManagerClass *manager_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (manager_class);
-
- g_type_class_add_private (manager_class, sizeof (NMIP6ManagerPrivate));
-
- /* virtual methods */
- object_class->finalize = finalize;
-
- /* signals */
- signals[ADDRCONF_COMPLETE] =
- g_signal_new ("addrconf-complete",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMIP6ManagerClass, addrconf_complete),
- NULL, NULL,
- _nm_marshal_VOID__INT_UINT_BOOLEAN,
- G_TYPE_NONE, 3, G_TYPE_INT, G_TYPE_UINT, G_TYPE_BOOLEAN);
-
- signals[CONFIG_CHANGED] =
- g_signal_new ("config-changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMIP6ManagerClass, config_changed),
- NULL, NULL,
- _nm_marshal_VOID__INT_UINT_BOOLEAN,
- G_TYPE_NONE, 3, G_TYPE_INT, G_TYPE_UINT, G_TYPE_BOOLEAN);
-}
-
diff --git a/src/ip6-manager/nm-ip6-manager.h b/src/ip6-manager/nm-ip6-manager.h
deleted file mode 100644
index 886399f7b..000000000
--- a/src/ip6-manager/nm-ip6-manager.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* nm-ip6-manager.c - Handle IPv6 address configuration for NetworkManager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2010 Red Hat, Inc.
- */
-
-#ifndef NM_IP6_MANAGER_H
-#define NM_IP6_MANAGER_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include <nm-setting-ip6-config.h>
-
-#include "nm-ip6-config.h"
-
-#define NM_TYPE_IP6_MANAGER (nm_ip6_manager_get_type ())
-#define NM_IP6_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP6_MANAGER, NMIP6Manager))
-#define NM_IP6_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP6_MANAGER, NMIP6ManagerClass))
-#define NM_IS_IP6_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IP6_MANAGER))
-#define NM_IS_IP6_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IP6_MANAGER))
-#define NM_IP6_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP6_MANAGER, NMIP6ManagerClass))
-
-enum {
- IP6_DHCP_OPT_NONE = 0,
- IP6_DHCP_OPT_OTHERCONF,
- IP6_DHCP_OPT_MANAGED
-};
-
-typedef struct {
- GObject parent;
-} NMIP6Manager;
-
-typedef struct {
- GObjectClass parent;
-
- /* Signals */
-
- /* addrconf_complete is emitted only during initial configuration to indicate
- * that the initial configuration is complete.
- */
- void (*addrconf_complete) (NMIP6Manager *manager,
- guint32 ifindex,
- guint dhcp_opts,
- gboolean success);
-
- /* config_changed gets emitted only *after* initial configuration is
- * complete; it's like DHCP renew and indicates that the existing config
- * of the interface has changed.
- */
- void (*config_changed) (NMIP6Manager *manager,
- guint32 ifindex,
- guint dhcp_opts,
- gboolean success);
-} NMIP6ManagerClass;
-
-GType nm_ip6_manager_get_type (void);
-
-NMIP6Manager *nm_ip6_manager_get (void);
-gboolean nm_ip6_manager_prepare_interface (NMIP6Manager *manager,
- int ifindex,
- const guint8 *hwaddr,
- guint hwaddr_len,
- NMSettingIP6Config *s_ip6,
- const char *accept_ra_path);
-void nm_ip6_manager_begin_addrconf (NMIP6Manager *manager,
- int ifindex);
-void nm_ip6_manager_cancel_addrconf (NMIP6Manager *manager,
- int ifindex);
-
-NMIP6Config * nm_ip6_manager_get_ip6_config (NMIP6Manager *manager,
- int ifindex);
-
-#endif /* NM_IP6_MANAGER_H */
diff --git a/src/logging/Makefile.am b/src/logging/Makefile.am
deleted file mode 100644
index e8fe60ee7..000000000
--- a/src/logging/Makefile.am
+++ /dev/null
@@ -1,14 +0,0 @@
-noinst_LTLIBRARIES = libnm-logging.la
-
-libnm_logging_la_SOURCES = \
- nm-logging.c \
- nm-logging.h
-
-libnm_logging_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
-libnm_logging_la_LIBADD = \
- -ldl \
- $(GLIB_LIBS)
-
diff --git a/src/logging/nm-logging.c b/src/logging/nm-logging.c
index 79d47f135..1577f6ec7 100644
--- a/src/logging/nm-logging.c
+++ b/src/logging/nm-logging.c
@@ -36,31 +36,40 @@
#include "nm-logging.h"
+static void
+nm_log_handler (const gchar *log_domain,
+ GLogLevelFlags level,
+ const gchar *message,
+ gpointer ignored);
+
#define LOGD_ALL \
(LOGD_PLATFORM | LOGD_RFKILL | LOGD_ETHER | LOGD_WIFI | LOGD_BT | LOGD_MB | \
LOGD_DHCP4 | LOGD_DHCP6 | LOGD_PPP | LOGD_WIFI_SCAN | LOGD_IP4 | \
LOGD_IP6 | LOGD_AUTOIP4 | LOGD_DNS | LOGD_VPN | LOGD_SHARING | \
LOGD_SUPPLICANT | LOGD_AGENTS | LOGD_SETTINGS | LOGD_SUSPEND | \
- LOGD_CORE | LOGD_DEVICE | LOGD_OLPC_MESH | LOGD_WIMAX | \
+ LOGD_CORE | LOGD_DEVICE | LOGD_OLPC | LOGD_WIMAX | \
LOGD_INFINIBAND | LOGD_FIREWALL | LOGD_ADSL | LOGD_BOND | \
- LOGD_VLAN | LOGD_BRIDGE | LOGD_CONCHECK)
+ LOGD_VLAN | LOGD_BRIDGE | LOGD_DBUS_PROPS | LOGD_TEAM | LOGD_CONCHECK | \
+ LOGD_DCB | LOGD_DISPATCH)
-#define LOGD_DEFAULT (LOGD_ALL & ~LOGD_WIFI_SCAN)
+#define LOGD_DEFAULT (LOGD_ALL & ~(LOGD_WIFI_SCAN | LOGD_DBUS_PROPS))
-static guint32 log_level = LOGL_INFO | LOGL_WARN | LOGL_ERR;
-static guint32 log_domains = LOGD_DEFAULT;
+static guint32 log_level = LOGL_INFO;
+static char *log_domains;
+static guint64 logging[LOGL_MAX];
+static gboolean logging_set_up;
+static gboolean syslog_opened;
typedef struct {
- guint32 num;
+ guint64 num;
const char *name;
} LogDesc;
-static const LogDesc level_descs[] = {
- { LOGL_ERR, "ERR" },
- { LOGL_WARN | LOGL_ERR, "WARN" },
- { LOGL_INFO | LOGL_WARN | LOGL_ERR, "INFO" },
- { LOGL_DEBUG | LOGL_INFO | LOGL_WARN | LOGL_ERR, "DEBUG" },
- { 0, NULL }
+static const char *level_names[LOGL_MAX] = {
+ [LOGL_DEBUG] = "DEBUG",
+ [LOGL_INFO] = "INFO",
+ [LOGL_WARN] = "WARN",
+ [LOGL_ERR] = "ERR",
};
static const LogDesc domain_descs[] = {
@@ -87,7 +96,7 @@ static const LogDesc domain_descs[] = {
{ LOGD_SUSPEND, "SUSPEND" },
{ LOGD_CORE, "CORE" },
{ LOGD_DEVICE, "DEVICE" },
- { LOGD_OLPC_MESH, "OLPC" },
+ { LOGD_OLPC, "OLPC" },
{ LOGD_WIMAX, "WIMAX" },
{ LOGD_INFINIBAND,"INFINIBAND" },
{ LOGD_FIREWALL, "FIREWALL" },
@@ -95,7 +104,11 @@ static const LogDesc domain_descs[] = {
{ LOGD_BOND, "BOND" },
{ LOGD_VLAN, "VLAN" },
{ LOGD_BRIDGE, "BRIDGE" },
+ { LOGD_DBUS_PROPS,"DBUS_PROPS" },
+ { LOGD_TEAM, "TEAM" },
{ LOGD_CONCHECK, "CONCHECK" },
+ { LOGD_DCB, "DCB" },
+ { LOGD_DISPATCH, "DISPATCH" },
{ 0, NULL }
};
@@ -119,95 +132,157 @@ nm_logging_error_quark (void)
/************************************************************************/
+static gboolean
+match_log_level (const char *level,
+ guint32 *out_level,
+ GError **error)
+{
+ int i;
+
+ for (i = 0; i < LOGL_MAX; i++) {
+ if (!g_ascii_strcasecmp (level_names[i], level)) {
+ *out_level = i;
+ return TRUE;
+ }
+ }
+
+ g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_LEVEL,
+ _("Unknown log level '%s'"), level);
+ return FALSE;
+}
+
gboolean
-nm_logging_setup (const char *level, const char *domains, GError **error)
+nm_logging_setup (const char *level,
+ const char *domains,
+ char **bad_domains,
+ GError **error)
{
+ GString *unrecognized = NULL;
+ guint64 new_logging[LOGL_MAX];
+ guint32 new_log_level = log_level;
char **tmp, **iter;
- guint32 new_domains = 0;
+ int i;
- /* levels */
- if (level && strlen (level)) {
- gboolean found = FALSE;
- const LogDesc *diter;
+ logging_set_up = TRUE;
- for (diter = &level_descs[0]; diter->name; diter++) {
- if (!strcasecmp (diter->name, level)) {
- log_level = diter->num;
- found = TRUE;
- break;
- }
- }
+ for (i = 0; i < LOGL_MAX; i++)
+ new_logging[i] = 0;
- if (!found) {
- g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_LEVEL,
- _("Unknown log level '%s'"), level);
+ /* levels */
+ if (level && *level) {
+ if (!match_log_level (level, &new_log_level, error))
return FALSE;
- }
}
/* domains */
- if (domains && strlen (domains)) {
- tmp = g_strsplit_set (domains, ", ", 0);
- for (iter = tmp; iter && *iter; iter++) {
- const LogDesc *diter;
- gboolean found = FALSE;
-
- if (!strlen (*iter))
- continue;
+ if (!domains || !*domains)
+ domains = log_domains ? log_domains : "DEFAULT";
+ tmp = g_strsplit_set (domains, ", ", 0);
+ for (iter = tmp; iter && *iter; iter++) {
+ const LogDesc *diter;
+ guint32 domain_log_level;
+ guint64 bits;
+ char *p;
+
+ if (!strlen (*iter))
+ continue;
+
+ p = strchr (*iter, ':');
+ if (p) {
+ *p = '\0';
+ if (!match_log_level (p + 1, &domain_log_level, error)) {
+ g_strfreev (tmp);
+ return FALSE;
+ }
+ } else
+ domain_log_level = new_log_level;
+
+ bits = 0;
+
+ /* Check for combined domains */
+ if (!g_ascii_strcasecmp (*iter, LOGD_ALL_STRING))
+ bits = LOGD_ALL;
+ else if (!g_ascii_strcasecmp (*iter, LOGD_DEFAULT_STRING))
+ bits = LOGD_DEFAULT;
+ else if (!g_ascii_strcasecmp (*iter, LOGD_DHCP_STRING))
+ bits = LOGD_DHCP;
+ else if (!g_ascii_strcasecmp (*iter, LOGD_IP_STRING))
+ bits = LOGD_IP;
+
+ /* Check for compatibility domains */
+ else if (!g_ascii_strcasecmp (*iter, "HW"))
+ bits = LOGD_PLATFORM;
+
+ else {
for (diter = &domain_descs[0]; diter->name; diter++) {
- if (!strcasecmp (diter->name, *iter)) {
- new_domains |= diter->num;
- found = TRUE;
+ if (!g_ascii_strcasecmp (diter->name, *iter)) {
+ bits = diter->num;
break;
}
}
+ }
- /* Check for combined domains */
- if (!strcasecmp (*iter, LOGD_ALL_STRING)) {
- new_domains = LOGD_ALL;
- found = TRUE;
- } else if (!strcasecmp (*iter, LOGD_DEFAULT_STRING)) {
- new_domains = LOGD_DEFAULT;
- found = TRUE;
- } else if (!strcasecmp (*iter, LOGD_DHCP_STRING)) {
- new_domains |= LOGD_DHCP;
- found = TRUE;
- } else if (!strcasecmp (*iter, LOGD_IP_STRING)) {
- new_domains |= LOGD_IP;
- found = TRUE;
- }
-
- /* Check for compatibility domains */
- if (!strcasecmp (*iter, "HW")) {
- new_domains |= LOGD_PLATFORM;
- found = TRUE;
- }
-
- if (!found) {
+ if (!bits) {
+ if (!bad_domains) {
g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_DOMAIN,
_("Unknown log domain '%s'"), *iter);
return FALSE;
}
+
+ if (unrecognized)
+ g_string_append (unrecognized, ", ");
+ else
+ unrecognized = g_string_new (NULL);
+ g_string_append (unrecognized, *iter);
+ continue;
}
- g_strfreev (tmp);
- log_domains = new_domains;
+
+ for (i = 0; i < domain_log_level; i++)
+ new_logging[i] &= ~bits;
+ for (i = domain_log_level; i < LOGL_MAX; i++)
+ new_logging[i] |= bits;
+ }
+ g_strfreev (tmp);
+
+ if (log_domains != (char *)domains) {
+ g_free (log_domains);
+ log_domains = g_strdup (domains);
}
+ log_level = new_log_level;
+ for (i = 0; i < LOGL_MAX; i++)
+ logging[i] = new_logging[i];
+
+ if (unrecognized)
+ *bad_domains = g_string_free (unrecognized, FALSE);
+
return TRUE;
}
-const char *
+char *
nm_logging_level_to_string (void)
{
- const LogDesc *diter;
+ return g_strdup (level_names[log_level]);
+}
+
+const char *
+nm_logging_all_levels_to_string (void)
+{
+ static GString *str;
+
+ if (G_UNLIKELY (!str)) {
+ int i;
- for (diter = &level_descs[0]; diter->name; diter++) {
- if (diter->num == log_level)
- return diter->name;
+ str = g_string_new (NULL);
+ for (i = 0; i < LOGL_MAX; i++) {
+ if (str->len)
+ g_string_append_c (str, ',');
+ g_string_append (str, level_names[i]);
+ }
}
- g_warn_if_reached ();
- return "";
+
+ return str->str;
}
char *
@@ -215,61 +290,135 @@ nm_logging_domains_to_string (void)
{
const LogDesc *diter;
GString *str;
+ int i;
+
+ /* We don't just return g_strdup (log_domains) because we want to expand
+ * "DEFAULT" and "ALL".
+ */
str = g_string_sized_new (75);
for (diter = &domain_descs[0]; diter->name; diter++) {
- if (diter->num & log_domains) {
- if (str->len)
- g_string_append_c (str, ',');
- g_string_append (str, diter->name);
+ /* If it's set for any lower level, it will also be set for LOGL_ERR */
+ if (!(diter->num & logging[LOGL_ERR]))
+ continue;
+
+ if (str->len)
+ g_string_append_c (str, ',');
+ g_string_append (str, diter->name);
+
+ /* Check if it's logging at a lower level than the default. */
+ for (i = 0; i < log_level; i++) {
+ if (diter->num & logging[i]) {
+ g_string_append_printf (str, ":%s", level_names[i]);
+ break;
+ }
+ }
+ /* Check if it's logging at a higher level than the default. */
+ if (!(diter->num & logging[log_level])) {
+ for (i = log_level + 1; i < LOGL_MAX; i++) {
+ if (diter->num & logging[i]) {
+ g_string_append_printf (str, ":%s", level_names[i]);
+ break;
+ }
+ }
}
}
return g_string_free (str, FALSE);
}
-gboolean
-nm_logging_level_enabled (guint32 level)
+const char *
+nm_logging_all_domains_to_string (void)
{
- return !!(log_level & level);
+ static GString *str;
+
+ if (G_UNLIKELY (!str)) {
+ const LogDesc *diter;
+
+ str = g_string_new (LOGD_DEFAULT_STRING);
+ for (diter = &domain_descs[0]; diter->name; diter++) {
+ g_string_append_c (str, ',');
+ g_string_append (str, diter->name);
+ if (diter->num == LOGD_DHCP6)
+ g_string_append (str, "," LOGD_DHCP_STRING);
+ else if (diter->num == LOGD_IP6)
+ g_string_append (str, "," LOGD_IP_STRING);
+ }
+ g_string_append (str, "," LOGD_ALL_STRING);
+ }
+
+ return str->str;
}
gboolean
-nm_logging_domain_enabled (guint32 domain)
+nm_logging_enabled (guint32 level, guint64 domain)
{
- return !!(log_domains & domain);
+ g_return_val_if_fail (level < LOGL_MAX, FALSE);
+
+ return !!(logging[level] & domain);
}
void
_nm_log (const char *loc,
const char *func,
- guint32 domain,
+ guint64 domain,
guint32 level,
const char *fmt,
...)
{
va_list args;
char *msg;
+ char *fullmsg = NULL;
GTimeVal tv;
+ int syslog_level = LOG_INFO;
+ int g_log_level = G_LOG_LEVEL_INFO;
- if (!(log_level & level) || !(log_domains & domain))
+ g_return_if_fail (level < LOGL_MAX);
+
+ if (G_UNLIKELY (!logging_set_up))
+ nm_logging_setup ("INFO", "DEFAULT", NULL, NULL);
+
+ if (!(logging[level] & domain))
return;
va_start (args, fmt);
msg = g_strdup_vprintf (fmt, args);
va_end (args);
- if ((log_level & LOGL_DEBUG) && (level == LOGL_DEBUG)) {
+ switch (level) {
+ case LOGL_DEBUG:
g_get_current_time (&tv);
- syslog (LOG_INFO, "<debug> [%ld.%ld] [%s] %s(): %s", tv.tv_sec, tv.tv_usec, loc, func, msg);
- } else if ((log_level & LOGL_INFO) && (level == LOGL_INFO))
- syslog (LOG_INFO, "<info> %s", msg);
- else if ((log_level & LOGL_WARN) && (level == LOGL_WARN))
- syslog (LOG_WARNING, "<warn> %s", msg);
- else if ((log_level & LOGL_ERR) && (level == LOGL_ERR)) {
+ syslog_level = LOG_INFO;
+ g_log_level = G_LOG_LEVEL_DEBUG;
+ fullmsg = g_strdup_printf ("<debug> [%ld.%06ld] [%s] %s(): %s", tv.tv_sec, tv.tv_usec, loc, func, msg);
+ break;
+ case LOGL_INFO:
+ syslog_level = LOG_INFO;
+ g_log_level = G_LOG_LEVEL_MESSAGE;
+ fullmsg = g_strconcat ("<info> ", msg, NULL);
+ break;
+ case LOGL_WARN:
+ syslog_level = LOG_WARNING;
+ g_log_level = G_LOG_LEVEL_WARNING;
+ fullmsg = g_strconcat ("<warn> ", msg, NULL);
+ break;
+ case LOGL_ERR:
+ syslog_level = LOG_ERR;
+ /* g_log_level is still WARNING, because ERROR is fatal */
+ g_log_level = G_LOG_LEVEL_WARNING;
g_get_current_time (&tv);
- syslog (LOG_ERR, "<error> [%ld.%ld] [%s] %s(): %s", tv.tv_sec, tv.tv_usec, loc, func, msg);
+ fullmsg = g_strdup_printf ("<error> [%ld.%06ld] [%s] %s(): %s", tv.tv_sec, tv.tv_usec, loc, func, msg);
+ break;
+ default:
+ g_assert_not_reached ();
}
+
+ if (syslog_opened)
+ syslog (syslog_level, "%s", fullmsg);
+ else
+ g_log (G_LOG_DOMAIN, g_log_level, "%s", fullmsg);
+
g_free (msg);
+ g_free (fullmsg);
}
/************************************************************************/
@@ -282,7 +431,7 @@ nm_log_handler (const gchar *log_domain,
{
int syslog_priority;
- switch (level) {
+ switch (level & G_LOG_LEVEL_MASK) {
case G_LOG_LEVEL_ERROR:
syslog_priority = LOG_CRIT;
break;
@@ -308,21 +457,26 @@ nm_log_handler (const gchar *log_domain,
}
void
-nm_logging_start (gboolean become_daemon)
+nm_logging_syslog_openlog (gboolean debug)
{
- if (become_daemon)
- openlog (G_LOG_DOMAIN, LOG_PID, LOG_DAEMON);
- else
+ if (debug)
openlog (G_LOG_DOMAIN, LOG_CONS | LOG_PERROR | LOG_PID, LOG_USER);
+ else
+ openlog (G_LOG_DOMAIN, LOG_PID, LOG_DAEMON);
- g_log_set_handler (G_LOG_DOMAIN,
- G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
- nm_log_handler,
- NULL);
+ if (!syslog_opened) {
+ syslog_opened = TRUE;
+
+ g_log_set_handler (G_LOG_DOMAIN,
+ G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
+ nm_log_handler,
+ NULL);
+ }
}
void
-nm_logging_shutdown (void)
+nm_logging_syslog_closelog (void)
{
- closelog ();
+ if (syslog_opened)
+ closelog ();
}
diff --git a/src/logging/nm-logging.h b/src/logging/nm-logging.h
index 97b4110d5..a53f93a55 100644
--- a/src/logging/nm-logging.h
+++ b/src/logging/nm-logging.h
@@ -22,43 +22,51 @@
#ifndef NM_LOGGING_H
#define NM_LOGGING_H
+#ifdef __NM_TEST_UTILS_H__
+#error nm-test-utils.h must be included as last header
+#endif
+
#include <glib.h>
#include <glib-object.h>
/* Log domains */
enum {
- LOGD_NONE = 0x00000000,
- LOGD_PLATFORM = 0x00000001, /* Platform services */
- LOGD_RFKILL = 0x00000002,
- LOGD_ETHER = 0x00000004,
- LOGD_WIFI = 0x00000008,
- LOGD_BT = 0x00000010,
- LOGD_MB = 0x00000020, /* mobile broadband */
- LOGD_DHCP4 = 0x00000040,
- LOGD_DHCP6 = 0x00000080,
- LOGD_PPP = 0x00000100,
- LOGD_WIFI_SCAN = 0x00000200,
- LOGD_IP4 = 0x00000400,
- LOGD_IP6 = 0x00000800,
- LOGD_AUTOIP4 = 0x00001000,
- LOGD_DNS = 0x00002000,
- LOGD_VPN = 0x00004000,
- LOGD_SHARING = 0x00008000, /* Connection sharing/dnsmasq */
- LOGD_SUPPLICANT = 0x00010000, /* WiFi and 802.1x */
- LOGD_AGENTS = 0x00020000, /* Secret agents */
- LOGD_SETTINGS = 0x00040000, /* Settings */
- LOGD_SUSPEND = 0x00080000, /* Suspend/Resume */
- LOGD_CORE = 0x00100000, /* Core daemon and policy stuff */
- LOGD_DEVICE = 0x00200000, /* Device state and activation */
- LOGD_OLPC_MESH = 0x00400000,
- LOGD_WIMAX = 0x00800000,
- LOGD_INFINIBAND = 0x01000000,
- LOGD_FIREWALL = 0x02000000,
- LOGD_ADSL = 0x04000000,
- LOGD_BOND = 0x08000000,
- LOGD_VLAN = 0x10000000,
- LOGD_BRIDGE = 0x20000000,
- LOGD_CONCHECK = 0x40000000
+ LOGD_NONE = 0LL,
+ LOGD_PLATFORM = (1LL << 1), /* Platform services */
+ LOGD_RFKILL = (1LL << 2),
+ LOGD_ETHER = (1LL << 3),
+ LOGD_WIFI = (1LL << 4),
+ LOGD_BT = (1LL << 5),
+ LOGD_MB = (1LL << 6), /* mobile broadband */
+ LOGD_DHCP4 = (1LL << 7),
+ LOGD_DHCP6 = (1LL << 8),
+ LOGD_PPP = (1LL << 9),
+ LOGD_WIFI_SCAN = (1LL << 10),
+ LOGD_IP4 = (1LL << 11),
+ LOGD_IP6 = (1LL << 12),
+ LOGD_AUTOIP4 = (1LL << 13),
+ LOGD_DNS = (1LL << 14),
+ LOGD_VPN = (1LL << 15),
+ LOGD_SHARING = (1LL << 16), /* Connection sharing/dnsmasq */
+ LOGD_SUPPLICANT = (1LL << 17), /* WiFi and 802.1x */
+ LOGD_AGENTS = (1LL << 18), /* Secret agents */
+ LOGD_SETTINGS = (1LL << 19), /* Settings */
+ LOGD_SUSPEND = (1LL << 20), /* Suspend/Resume */
+ LOGD_CORE = (1LL << 21), /* Core daemon and policy stuff */
+ LOGD_DEVICE = (1LL << 22), /* Device state and activation */
+ LOGD_OLPC = (1LL << 23),
+ LOGD_WIMAX = (1LL << 24),
+ LOGD_INFINIBAND = (1LL << 25),
+ LOGD_FIREWALL = (1LL << 26),
+ LOGD_ADSL = (1LL << 27),
+ LOGD_BOND = (1LL << 28),
+ LOGD_VLAN = (1LL << 29),
+ LOGD_BRIDGE = (1LL << 30),
+ LOGD_DBUS_PROPS = (1LL << 31),
+ LOGD_TEAM = (1LL << 32),
+ LOGD_CONCHECK = (1LL << 33),
+ LOGD_DCB = (1LL << 34), /* Data Center Bridging */
+ LOGD_DISPATCH = (1LL << 35),
};
#define LOGD_DHCP (LOGD_DHCP4 | LOGD_DHCP6)
@@ -67,10 +75,12 @@ enum {
/* Log levels */
enum {
- LOGL_ERR = 0x00000001,
- LOGL_WARN = 0x00000002,
- LOGL_INFO = 0x00000004,
- LOGL_DEBUG = 0x00000008
+ LOGL_DEBUG,
+ LOGL_INFO,
+ LOGL_WARN,
+ LOGL_ERR,
+
+ LOGL_MAX
};
typedef enum {
@@ -99,15 +109,17 @@ GQuark nm_logging_error_quark (void);
void _nm_log (const char *loc,
const char *func,
- guint32 domain,
+ guint64 domain,
guint32 level,
const char *fmt,
...) __attribute__((__format__ (__printf__, 5, 6)));
-const char *nm_logging_level_to_string (void);
+char *nm_logging_level_to_string (void);
char *nm_logging_domains_to_string (void);
-gboolean nm_logging_level_enabled (guint32 level);
-gboolean nm_logging_domain_enabled (guint32 domain);
+gboolean nm_logging_enabled (guint32 level, guint64 domain);
+
+const char *nm_logging_all_levels_to_string (void);
+const char *nm_logging_all_domains_to_string (void);
/* Undefine the nm-utils.h logging stuff to ensure errors */
#undef nm_get_timestamp
@@ -120,8 +132,11 @@ gboolean nm_logging_domain_enabled (guint32 domain);
#undef nm_error
#undef nm_error_str
-gboolean nm_logging_setup (const char *level, const char *domains, GError **error);
-void nm_logging_start (gboolean become_daemon);
-void nm_logging_shutdown (void);
+gboolean nm_logging_setup (const char *level,
+ const char *domains,
+ char **bad_domains,
+ GError **error);
+void nm_logging_syslog_openlog (gboolean debug);
+void nm_logging_syslog_closelog (void);
#endif /* NM_LOGGING_H */
diff --git a/src/main.c b/src/main.c
index eb829a7b3..0ba65b0b8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -37,23 +37,24 @@
#include <glib/gi18n.h>
#include <gmodule.h>
#include <string.h>
+#include <sys/resource.h>
+#include "libgsystem.h"
#include "NetworkManager.h"
#include "NetworkManagerUtils.h"
#include "nm-manager.h"
+#include "nm-linux-platform.h"
#include "nm-dns-manager.h"
#include "nm-dbus-manager.h"
#include "nm-supplicant-manager.h"
#include "nm-dhcp-manager.h"
#include "nm-firewall-manager.h"
-#include "nm-hostname-provider.h"
-#include "nm-netlink-monitor.h"
#include "nm-vpn-manager.h"
#include "nm-logging.h"
-#include "nm-policy-hosts.h"
#include "nm-config.h"
#include "nm-posix-signals.h"
-#include "nm-system.h"
+#include "nm-session-monitor.h"
+#include "nm-dispatcher.h"
#if !defined(NM_DIST_VERSION)
# define NM_DIST_VERSION VERSION
@@ -65,7 +66,6 @@
/*
* Globals
*/
-static NMManager *manager = NULL;
static GMainLoop *main_loop = NULL;
static gboolean quit_early = FALSE;
static sigset_t signal_set;
@@ -154,7 +154,7 @@ write_pidfile (const char *pidfile)
return FALSE;
}
- snprintf (pid, sizeof (pid), "%d", getpid ());
+ g_snprintf (pid, sizeof (pid), "%d", getpid ());
if (write (fd, pid, strlen (pid)) < 0)
fprintf (stderr, _("Writing to %s failed: %s\n"), pidfile, strerror (errno));
else
@@ -233,12 +233,6 @@ parse_state_file (const char *filename,
g_return_val_if_fail (wimax_enabled != NULL, FALSE);
state_file = g_key_file_new ();
- if (!state_file) {
- g_set_error (error, NM_CONFIG_ERROR, NM_CONFIG_ERROR_NO_MEMORY,
- "Not enough memory to load state file %s.", filename);
- return FALSE;
- }
-
g_key_file_set_list_separator (state_file, ',');
if (!g_key_file_load_from_file (state_file, filename, G_KEY_FILE_KEEP_COMMENTS, &tmp_error)) {
gboolean ret = FALSE;
@@ -299,6 +293,37 @@ parse_state_file (const char *filename,
return TRUE;
}
+static void
+_init_nm_debug (const char *debug)
+{
+ const guint D_RLIMIT_CORE = 1;
+ GDebugKey keys[] = {
+ { "RLIMIT_CORE", D_RLIMIT_CORE },
+ };
+ guint flags = 0;
+ const char *env = getenv ("NM_DEBUG");
+
+ if (env && strcasecmp (env, "help") != 0) {
+ /* g_parse_debug_string() prints options to stderr if the variable
+ * is set to "help". Don't allow that. */
+ flags = g_parse_debug_string (env, keys, G_N_ELEMENTS (keys));
+ }
+
+ if (debug && strcasecmp (debug, "help") != 0)
+ flags |= g_parse_debug_string (debug, keys, G_N_ELEMENTS (keys));
+
+ if (flags & D_RLIMIT_CORE) {
+ /* only enable this, if explicitly requested, because it might
+ * expose sensitive data. */
+
+ struct rlimit limit = {
+ .rlim_cur = RLIM_INFINITY,
+ .rlim_max = RLIM_INFINITY,
+ };
+ setrlimit (RLIMIT_CORE, &limit);
+ }
+}
+
/*
* main
*
@@ -307,49 +332,42 @@ int
main (int argc, char *argv[])
{
GOptionContext *opt_ctx = NULL;
- gboolean become_daemon = FALSE;
+ char *opt_log_level = NULL;
+ char *opt_log_domains = NULL;
+ gboolean become_daemon = TRUE, run_from_build_dir = FALSE;
+ gboolean debug = FALSE;
gboolean g_fatal_warnings = FALSE;
- char *pidfile = NULL, *state_file = NULL;
- char *config_path = NULL, *plugins = NULL;
- char *log_level = NULL, *log_domains = NULL;
- char *connectivity_uri = NULL;
- gint connectivity_interval = -1;
- char *connectivity_response = NULL;
+ gs_free char *pidfile = NULL;
+ gs_free char *state_file = NULL;
gboolean wifi_enabled = TRUE, net_enabled = TRUE, wwan_enabled = TRUE, wimax_enabled = TRUE;
gboolean success, show_version = FALSE;
- NMVPNManager *vpn_manager = NULL;
- NMDnsManager *dns_mgr = NULL;
- NMDBusManager *dbus_mgr = NULL;
- NMSupplicantManager *sup_mgr = NULL;
- NMDHCPManager *dhcp_mgr = NULL;
- NMFirewallManager *fw_mgr = NULL;
- NMSettings *settings = NULL;
- NMConfig *config;
- NMNetlinkMonitor *monitor = NULL;
+ int i;
+ NMManager *manager = NULL;
+ gs_unref_object NMVPNManager *vpn_manager = NULL;
+ gs_unref_object NMDnsManager *dns_mgr = NULL;
+ gs_unref_object NMDBusManager *dbus_mgr = NULL;
+ gs_unref_object NMSupplicantManager *sup_mgr = NULL;
+ gs_unref_object NMDHCPManager *dhcp_mgr = NULL;
+ gs_unref_object NMFirewallManager *fw_mgr = NULL;
+ gs_unref_object NMSettings *settings = NULL;
+ gs_unref_object NMConfig *config = NULL;
+ gs_unref_object NMSessionMonitor *session_monitor = NULL;
GError *error = NULL;
gboolean wrote_pidfile = FALSE;
+ char *bad_domains = NULL;
GOptionEntry options[] = {
- { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Print NetworkManager version and exit"), NULL },
- { "no-daemon", 0, 0, G_OPTION_ARG_NONE, &become_daemon, N_("Don't become a daemon"), NULL },
+ { "version", 'V', 0, G_OPTION_ARG_NONE, &show_version, N_("Print NetworkManager version and exit"), NULL },
+ { "no-daemon", 'n', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &become_daemon, N_("Don't become a daemon"), NULL },
+ { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug, N_("Don't become a daemon, and log to stderr"), NULL },
+ { "log-level", 0, 0, G_OPTION_ARG_STRING, &opt_log_level, N_("Log level: one of [%s]"), "INFO" },
+ { "log-domains", 0, 0, G_OPTION_ARG_STRING, &opt_log_domains,
+ N_("Log domains separated by ',': any combination of [%s]"),
+ "PLATFORM,RFKILL,WIFI" },
{ "g-fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &g_fatal_warnings, N_("Make all warnings fatal"), NULL },
- { "pid-file", 0, 0, G_OPTION_ARG_FILENAME, &pidfile, N_("Specify the location of a PID file"), N_("filename") },
+ { "pid-file", 'p', 0, G_OPTION_ARG_FILENAME, &pidfile, N_("Specify the location of a PID file"), N_("filename") },
{ "state-file", 0, 0, G_OPTION_ARG_FILENAME, &state_file, N_("State file location"), N_("/path/to/state.file") },
- { "config", 0, 0, G_OPTION_ARG_FILENAME, &config_path, N_("Config file location"), N_("/path/to/config.file") },
- { "plugins", 0, 0, G_OPTION_ARG_STRING, &plugins, N_("List of plugins separated by ','"), N_("plugin1,plugin2") },
- /* Translators: Do not translate the values in the square brackets */
- { "log-level", 0, 0, G_OPTION_ARG_STRING, &log_level, N_("Log level: one of [ERR, WARN, INFO, DEBUG]"), "INFO" },
- { "log-domains", 0, 0, G_OPTION_ARG_STRING, &log_domains,
- /* Translators: Do not translate the values in the square brackets */
- N_("Log domains separated by ',': any combination of\n"
- " [NONE,HW,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,\n"
- " WIFI_SCAN,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,\n"
- " AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,WIMAX,\n"
- " INFINIBAND,FIREWALL,ADSL]"),
- "HW,RFKILL,WIFI" },
- { "connectivity-uri", 0, 0, G_OPTION_ARG_STRING, &connectivity_uri, _("An http(s) address for checking internet connectivity"), "http://example.com" },
- { "connectivity-interval", 0, 0, G_OPTION_ARG_INT, &connectivity_interval, _("The interval between connectivity checks (in seconds)"), "60" },
- { "connectivity-response", 0, 0, G_OPTION_ARG_STRING, &connectivity_response, _("The expected start of the response"), N_("Bingo!") },
+ { "run-from-build-dir", 0, 0, G_OPTION_ARG_NONE, &run_from_build_dir, "Run from build directory", NULL },
{NULL}
};
@@ -366,11 +384,6 @@ main (int argc, char *argv[])
*/
umask (022);
- if (!g_module_supported ()) {
- fprintf (stderr, _("GModules are not supported on your platform!\n"));
- exit (1);
- }
-
/* Set locale to be able to use environment variables */
setlocale (LC_ALL, "");
@@ -378,12 +391,33 @@ main (int argc, char *argv[])
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
+ if (!g_module_supported ()) {
+ fprintf (stderr, _("GModules are not supported on your platform!\n"));
+ exit (1);
+ }
+
+ if (getuid () != 0) {
+ fprintf (stderr, _("You must be root to run NetworkManager!\n"));
+ exit (1);
+ }
+
+ for (i = 0; options[i].long_name; i++) {
+ if (!strcmp (options[i].long_name, "log-level")) {
+ options[i].description = g_strdup_printf (options[i].description,
+ nm_logging_all_levels_to_string ());
+ } else if (!strcmp (options[i].long_name, "log-domains")) {
+ options[i].description = g_strdup_printf (options[i].description,
+ nm_logging_all_domains_to_string ());
+ }
+ }
+
/* Parse options */
opt_ctx = g_option_context_new (NULL);
g_option_context_set_translation_domain (opt_ctx, GETTEXT_PACKAGE);
g_option_context_set_ignore_unknown_options (opt_ctx, FALSE);
g_option_context_set_help_enabled (opt_ctx, TRUE);
g_option_context_add_main_entries (opt_ctx, options, NULL);
+ g_option_context_add_main_entries (opt_ctx, nm_config_get_options (), NULL);
g_option_context_set_summary (opt_ctx,
_("NetworkManager monitors all network connections and automatically\nchooses the best connection to use. It also allows the user to\nspecify wireless access points which wireless cards in the computer\nshould associate with."));
@@ -403,11 +437,44 @@ main (int argc, char *argv[])
exit (0);
}
- if (getuid () != 0) {
- fprintf (stderr, _("You must be root to run NetworkManager!\n"));
+ if (!nm_logging_setup (opt_log_level,
+ opt_log_domains,
+ &bad_domains,
+ &error)) {
+ fprintf (stderr,
+ _("%s. Please use --help to see a list of valid options.\n"),
+ error->message);
exit (1);
+ } else if (bad_domains) {
+ fprintf (stderr,
+ _("Ignoring unrecognized log domain(s) '%s' passed on command line.\n"),
+ bad_domains);
+ g_clear_pointer (&bad_domains, g_free);
}
+ /* When running from the build directory, determine our build directory
+ * base and set helper paths in the build tree */
+ if (run_from_build_dir) {
+ char *path, *slash;
+ int g;
+
+ /* exe is <basedir>/src/.libs/lt-NetworkManager, so chop off
+ * the last three components */
+ path = realpath ("/proc/self/exe", NULL);
+ g_assert (path != NULL);
+ for (g = 0; g < 3; ++g) {
+ slash = strrchr (path, '/');
+ g_assert (slash != NULL);
+ *slash = '\0';
+ }
+
+ /* don't free these strings, we need them for the entire
+ * process lifetime */
+ nm_dhcp_helper_path = g_strdup_printf ("%s/src/dhcp-manager/nm-dhcp-helper", path);
+ nm_device_autoipd_helper_path = g_strdup_printf ("%s/callouts/nm-avahi-autoipd.action", path);
+
+ g_free (path);
+ }
/* Setup runtime directory */
if (g_mkdir_with_parents (NMRUNDIR, 0755) != 0) {
@@ -429,8 +496,7 @@ main (int argc, char *argv[])
exit (1);
/* Read the config file and CLI overrides */
- config = nm_config_new (config_path, plugins, log_level, log_domains,
- connectivity_uri, connectivity_interval, connectivity_response, &error);
+ config = nm_config_new (&error);
if (config == NULL) {
fprintf (stderr, _("Failed to read configuration: (%d) %s\n"),
error ? error->code : -1,
@@ -438,14 +504,23 @@ main (int argc, char *argv[])
exit (1);
}
- /* Logging setup */
- if (!nm_logging_setup (nm_config_get_log_level (config),
- nm_config_get_log_domains (config),
- &error)) {
- fprintf (stderr,
- _("%s. Please use --help to see a list of valid options.\n"),
- error->message);
- exit (1);
+ /* Initialize logging from config file *only* if not explicitly
+ * specified by commandline.
+ */
+ if (opt_log_level == NULL && opt_log_domains == NULL) {
+ if (!nm_logging_setup (nm_config_get_log_level (config),
+ nm_config_get_log_domains (config),
+ &bad_domains,
+ &error)) {
+ fprintf (stderr, _("Error in configuration file: %s.\n"),
+ error->message);
+ exit (1);
+ } else if (bad_domains) {
+ fprintf (stderr,
+ _("Ignoring unrecognized log domain(s) '%s' from config files.\n"),
+ bad_domains);
+ g_clear_pointer (&bad_domains, g_free);
+ }
}
/* Parse the state file */
@@ -458,11 +533,7 @@ main (int argc, char *argv[])
}
g_clear_error (&error);
- /* Tricky: become_daemon is FALSE by default, so unless it's TRUE because
- * of a CLI option, it'll become TRUE after this
- */
- become_daemon = !become_daemon;
- if (become_daemon) {
+ if (become_daemon && !debug) {
if (daemon (0, 0) < 0) {
int saved_errno;
@@ -476,6 +547,8 @@ main (int argc, char *argv[])
wrote_pidfile = TRUE;
}
+ _init_nm_debug (nm_config_get_debug (config));
+
/* Set up unix signal handling - before creating threads, but after daemonizing! */
if (!setup_signals ())
exit (1);
@@ -488,31 +561,23 @@ main (int argc, char *argv[])
g_log_set_always_fatal (fatal_mask);
}
+ nm_logging_syslog_openlog (debug);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
-/*
- * Threading is always enabled starting from GLib 2.31.0.
- * See also http://developer.gnome.org/glib/2.31/glib-Deprecated-Thread-APIs.html.
- */
-#if !GLIB_CHECK_VERSION (2,31,0)
- if (!g_thread_supported ())
- g_thread_init (NULL);
- dbus_g_thread_init ();
-#else
dbus_threads_init_default ();
-#endif
/* Ensure that non-exported properties don't leak out, and that the
* introspection 'access' permissions are respected.
*/
dbus_glib_global_set_disable_legacy_property_access ();
- nm_logging_start (become_daemon);
-
nm_log_info (LOGD_CORE, "NetworkManager (version " NM_DIST_VERSION ") is starting...");
success = FALSE;
- nm_log_info (LOGD_CORE, "Read config file %s", nm_config_get_path (config));
+ nm_log_info (LOGD_CORE, "Read config: %s", nm_config_get_description (config));
nm_log_info (LOGD_CORE, "WEXT support is %s",
#if HAVE_WEXT
"enabled"
@@ -523,27 +588,26 @@ main (int argc, char *argv[])
main_loop = g_main_loop_new (NULL, FALSE);
- /* Create netlink monitor object */
- monitor = nm_netlink_monitor_get ();
+ /* Set up platform interaction layer */
+ nm_linux_platform_setup ();
/* Initialize our DBus service & connection */
dbus_mgr = nm_dbus_manager_get ();
+ g_assert (dbus_mgr != NULL);
vpn_manager = nm_vpn_manager_get ();
- if (!vpn_manager) {
- nm_log_err (LOGD_CORE, "failed to start the VPN manager.");
- goto done;
- }
+ g_assert (vpn_manager != NULL);
- dns_mgr = nm_dns_manager_get (nm_config_get_dns_plugins (config));
- if (!dns_mgr) {
- nm_log_err (LOGD_CORE, "failed to start the DNS manager.");
- goto done;
- }
+ dns_mgr = nm_dns_manager_get ();
+ g_assert (dns_mgr != NULL);
+
+ /* Initialize DHCP manager */
+ dhcp_mgr = nm_dhcp_manager_get ();
+ g_assert (dhcp_mgr != NULL);
+
+ nm_dispatcher_init ();
- settings = nm_settings_new (nm_config_get_path (config),
- nm_config_get_plugins (config),
- &error);
+ settings = nm_settings_new (&error);
if (!settings) {
nm_log_err (LOGD_CORE, "failed to initialize settings storage: %s",
error && error->message ? error->message : "(unknown)");
@@ -556,9 +620,6 @@ main (int argc, char *argv[])
wifi_enabled,
wwan_enabled,
wimax_enabled,
- nm_config_get_connectivity_uri (config),
- nm_config_get_connectivity_interval (config),
- nm_config_get_connectivity_response (config),
&error);
if (manager == NULL) {
nm_log_err (LOGD_CORE, "failed to initialize the network manager: %s",
@@ -568,36 +629,31 @@ main (int argc, char *argv[])
/* Initialize the supplicant manager */
sup_mgr = nm_supplicant_manager_get ();
- if (!sup_mgr) {
- nm_log_err (LOGD_CORE, "failed to initialize the supplicant manager.");
- goto done;
- }
-
- /* Initialize DHCP manager */
- dhcp_mgr = nm_dhcp_manager_new (nm_config_get_dhcp_client (config), &error);
- if (!dhcp_mgr) {
- nm_log_err (LOGD_CORE, "failed to start the DHCP manager: %s.", error->message);
- goto done;
- }
-
- nm_dhcp_manager_set_hostname_provider (dhcp_mgr, NM_HOSTNAME_PROVIDER (manager));
+ g_assert (sup_mgr != NULL);
/* Initialize Firewall manager */
fw_mgr = nm_firewall_manager_get ();
- if (!fw_mgr) {
- nm_log_err (LOGD_CORE, "failed to start the Firewall manager: %s.", error->message);
- goto done;
- }
+ g_assert (fw_mgr != NULL);
- /* Start our DBus service */
- if (!nm_dbus_manager_start_service (dbus_mgr)) {
- nm_log_err (LOGD_CORE, "failed to start the dbus service.");
+ /* Initialize session monitor */
+ session_monitor = nm_session_monitor_get ();
+ g_assert (session_monitor != NULL);
+
+ if (!nm_dbus_manager_get_connection (dbus_mgr)) {
+#if HAVE_DBUS_GLIB_100
+ nm_log_warn (LOGD_CORE, "Failed to connect to D-Bus; only private bus is available");
+#else
+ nm_log_err (LOGD_CORE, "Failed to connect to D-Bus, exiting...");
goto done;
+#endif
+ } else {
+ /* Start our DBus service */
+ if (!nm_dbus_manager_start_service (dbus_mgr)) {
+ nm_log_err (LOGD_CORE, "failed to start the dbus service.");
+ goto done;
+ }
}
- /* Clean leftover "# Added by NetworkManager" entries from /etc/hosts */
- nm_policy_hosts_clean_etc_hosts ();
-
nm_manager_start (manager);
/* Make sure the loopback interface is up. If interface is down, we bring
@@ -611,7 +667,7 @@ main (int argc, char *argv[])
* physical interfaces.
*/
nm_log_dbg (LOGD_CORE, "setting up local loopback");
- nm_system_iface_set_up (nm_netlink_iface_to_index ("lo"), TRUE, NULL);
+ nm_platform_link_set_up (nm_platform_link_get_ifindex ("lo"));
success = TRUE;
@@ -622,47 +678,13 @@ main (int argc, char *argv[])
g_main_loop_run (main_loop);
done:
- if (manager)
- g_object_unref (manager);
-
- if (settings)
- g_object_unref (settings);
-
- if (vpn_manager)
- g_object_unref (vpn_manager);
-
- if (dns_mgr)
- g_object_unref (dns_mgr);
+ g_clear_object (&manager);
- if (dhcp_mgr)
- g_object_unref (dhcp_mgr);
-
- if (sup_mgr)
- g_object_unref (sup_mgr);
-
- if (fw_mgr)
- g_object_unref (fw_mgr);
-
- if (dbus_mgr)
- g_object_unref (dbus_mgr);
-
- nm_logging_shutdown ();
+ nm_logging_syslog_closelog ();
if (pidfile && wrote_pidfile)
unlink (pidfile);
- nm_config_free (config);
-
- /* Free options */
- g_free (pidfile);
- g_free (state_file);
- g_free (config_path);
- g_free (plugins);
- g_free (log_level);
- g_free (log_domains);
- g_free (connectivity_uri);
- g_free (connectivity_response);
-
nm_log_info (LOGD_CORE, "exiting (%s)", success ? "success" : "error");
exit (success ? 0 : 1);
}
diff --git a/src/modem-manager/Makefile.am b/src/modem-manager/Makefile.am
deleted file mode 100644
index 012d26eaf..000000000
--- a/src/modem-manager/Makefile.am
+++ /dev/null
@@ -1,43 +0,0 @@
-include $(GLIB_MAKEFILE)
-
-noinst_LTLIBRARIES = libmodem-manager.la
-
-libmodem_manager_la_CPPFLAGS = \
- -I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- $(LIBNL_CFLAGS) \
- $(DBUS_CFLAGS)
-
-libmodem_manager_la_SOURCES = \
- nm-modem.c \
- nm-modem.h \
- nm-modem-generic.c \
- nm-modem-generic.h \
- nm-modem-cdma.c \
- nm-modem-cdma.h \
- nm-modem-gsm.c \
- nm-modem-gsm.h \
- nm-modem-manager.h \
- nm-modem-manager.c \
- nm-modem-types.h
-
-libmodem_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(LIBNL_LIBS) \
- $(DBUS_LIBS)
-
-# Support for the new ModemManager1 interface
-if WITH_MODEM_MANAGER_1
-libmodem_manager_la_SOURCES += \
- nm-modem-broadband.h \
- nm-modem-broadband.c
-libmodem_manager_la_CPPFLAGS += $(MM_GLIB_CFLAGS)
-libmodem_manager_la_LIBADD += $(MM_GLIB_LIBS)
-endif
diff --git a/src/modem-manager/Makefile.in b/src/modem-manager/Makefile.in
deleted file mode 100644
index d945f9c9f..000000000
--- a/src/modem-manager/Makefile.in
+++ /dev/null
@@ -1,789 +0,0 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
- case $${target_option-} in \
- ?) ;; \
- *) echo "am__make_running_with_option: internal error: invalid" \
- "target option '$${target_option-}' specified" >&2; \
- exit 1;; \
- esac; \
- has_opt=no; \
- sane_makeflags=$$MAKEFLAGS; \
- if $(am__is_gnu_make); then \
- sane_makeflags=$$MFLAGS; \
- else \
- case $$MAKEFLAGS in \
- *\\[\ \ ]*) \
- bs=\\; \
- sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
- | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
- esac; \
- fi; \
- skip_next=no; \
- strip_trailopt () \
- { \
- flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
- }; \
- for flg in $$sane_makeflags; do \
- test $$skip_next = yes && { skip_next=no; continue; }; \
- case $$flg in \
- *=*|--*) continue;; \
- -*I) strip_trailopt 'I'; skip_next=yes;; \
- -*I?*) strip_trailopt 'I';; \
- -*O) strip_trailopt 'O'; skip_next=yes;; \
- -*O?*) strip_trailopt 'O';; \
- -*l) strip_trailopt 'l'; skip_next=yes;; \
- -*l?*) strip_trailopt 'l';; \
- -[dEDm]) skip_next=yes;; \
- -[JT]) skip_next=yes;; \
- esac; \
- case $$flg in \
- *$$target_option*) has_opt=yes; break;; \
- esac; \
- done; \
- test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-
-# Support for the new ModemManager1 interface
-@WITH_MODEM_MANAGER_1_TRUE@am__append_1 = \
-@WITH_MODEM_MANAGER_1_TRUE@ nm-modem-broadband.h \
-@WITH_MODEM_MANAGER_1_TRUE@ nm-modem-broadband.c
-
-@WITH_MODEM_MANAGER_1_TRUE@am__append_2 = $(MM_GLIB_CFLAGS)
-@WITH_MODEM_MANAGER_1_TRUE@am__append_3 = $(MM_GLIB_LIBS)
-subdir = src/modem-manager
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/build-aux/depcomp README
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
- $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gnome-code-coverage.m4 \
- $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
- $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
- $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
- $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
- $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
- $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
- $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
- $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
- $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-@WITH_MODEM_MANAGER_1_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-libmodem_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_2)
-am__libmodem_manager_la_SOURCES_DIST = nm-modem.c nm-modem.h \
- nm-modem-generic.c nm-modem-generic.h nm-modem-cdma.c \
- nm-modem-cdma.h nm-modem-gsm.c nm-modem-gsm.h \
- nm-modem-manager.h nm-modem-manager.c nm-modem-types.h \
- nm-modem-broadband.h nm-modem-broadband.c
-@WITH_MODEM_MANAGER_1_TRUE@am__objects_1 = libmodem_manager_la-nm-modem-broadband.lo
-am_libmodem_manager_la_OBJECTS = libmodem_manager_la-nm-modem.lo \
- libmodem_manager_la-nm-modem-generic.lo \
- libmodem_manager_la-nm-modem-cdma.lo \
- libmodem_manager_la-nm-modem-gsm.lo \
- libmodem_manager_la-nm-modem-manager.lo $(am__objects_1)
-libmodem_manager_la_OBJECTS = $(am_libmodem_manager_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo " GEN " $@;
-am__v_GEN_1 =
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 =
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo " CCLD " $@;
-am__v_CCLD_1 =
-SOURCES = $(libmodem_manager_la_SOURCES)
-DIST_SOURCES = $(am__libmodem_manager_la_SOURCES_DIST)
-am__can_run_installinfo = \
- case $$AM_UPDATE_INFO_DIR in \
- n|no|NO) false;; \
- *) (install-info --version) >/dev/null 2>&1;; \
- esac
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates. Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
- BEGIN { nonempty = 0; } \
- { items[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique. This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
- list='$(am__tagged_files)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CKDB_PATH = @CKDB_PATH@
-CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
-CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
-CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DBUS_CFLAGS = @DBUS_CFLAGS@
-DBUS_LIBS = @DBUS_LIBS@
-DBUS_SYS_DIR = @DBUS_SYS_DIR@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DHCLIENT_PATH = @DHCLIENT_PATH@
-DHCPCD_PATH = @DHCPCD_PATH@
-DLLTOOL = @DLLTOOL@
-DNSMASQ_PATH = @DNSMASQ_PATH@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GENHTML = @GENHTML@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MAKEFILE = @GLIB_MAKEFILE@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
-GNUTLS_LIBS = @GNUTLS_LIBS@
-GREP = @GREP@
-GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
-GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
-GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
-GTKDOC_MKPDF = @GTKDOC_MKPDF@
-GTKDOC_REBASE = @GTKDOC_REBASE@
-GUDEV_CFLAGS = @GUDEV_CFLAGS@
-GUDEV_LIBS = @GUDEV_LIBS@
-HTML_DIR = @HTML_DIR@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
-INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
-INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
-INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
-INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
-INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
-INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
-INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
-INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
-INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
-INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
-IPTABLES_PATH = @IPTABLES_PATH@
-IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
-IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
-KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
-LCOV = @LCOV@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBDL = @LIBDL@
-LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
-LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
-LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
-LIBM = @LIBM@
-LIBNL_CFLAGS = @LIBNL_CFLAGS@
-LIBNL_LIBS = @LIBNL_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
-LIBSOUP_LIBS = @LIBSOUP_LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@
-MM_GLIB_LIBS = @MM_GLIB_LIBS@
-MOC = @MOC@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
-NM_MICRO_VERSION = @NM_MICRO_VERSION@
-NM_MINOR_VERSION = @NM_MINOR_VERSION@
-NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@
-NM_VERSION = @NM_VERSION@
-NSS_CFLAGS = @NSS_CFLAGS@
-NSS_LIBS = @NSS_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POLKIT_CFLAGS = @POLKIT_CFLAGS@
-POLKIT_LIBS = @POLKIT_LIBS@
-POSUB = @POSUB@
-PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
-QT_CFLAGS = @QT_CFLAGS@
-QT_LIBS = @QT_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-SYSTEMD_200_CFLAGS = @SYSTEMD_200_CFLAGS@
-SYSTEMD_200_LIBS = @SYSTEMD_200_LIBS@
-SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@
-SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@
-SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@
-SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@
-SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
-UDEV_BASE_DIR = @UDEV_BASE_DIR@
-USE_NLS = @USE_NLS@
-UUID_CFLAGS = @UUID_CFLAGS@
-UUID_LIBS = @UUID_LIBS@
-VAPIGEN = @VAPIGEN@
-VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
-VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-intltool__v_merge_options_ = @intltool__v_merge_options_@
-intltool__v_merge_options_0 = @intltool__v_merge_options_0@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-nmbinary = @nmbinary@
-nmconfdir = @nmconfdir@
-nmdatadir = @nmdatadir@
-nmrundir = @nmrundir@
-nmstatedir = @nmstatedir@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-systemdsystemunitdir = @systemdsystemunitdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-with_dhclient = @with_dhclient@
-with_dhcpcd = @with_dhcpcd@
-with_netconfig = @with_netconfig@
-with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libmodem-manager.la
-libmodem_manager_la_CPPFLAGS = -I${top_srcdir}/src \
- -I${top_builddir}/src/generated -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging -I${top_builddir}/include \
- -I${top_srcdir}/include -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util $(LIBNL_CFLAGS) $(DBUS_CFLAGS) \
- $(am__append_2)
-libmodem_manager_la_SOURCES = nm-modem.c nm-modem.h nm-modem-generic.c \
- nm-modem-generic.h nm-modem-cdma.c nm-modem-cdma.h \
- nm-modem-gsm.c nm-modem-gsm.h nm-modem-manager.h \
- nm-modem-manager.c nm-modem-types.h $(am__append_1)
-libmodem_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la $(LIBNL_LIBS) \
- $(DBUS_LIBS) $(am__append_3)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modem-manager/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/modem-manager/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-libmodem-manager.la: $(libmodem_manager_la_OBJECTS) $(libmodem_manager_la_DEPENDENCIES) $(EXTRA_libmodem_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libmodem_manager_la_OBJECTS) $(libmodem_manager_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmodem_manager_la-nm-modem-broadband.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmodem_manager_la-nm-modem-cdma.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmodem_manager_la-nm-modem-generic.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmodem_manager_la-nm-modem-gsm.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmodem_manager_la-nm-modem-manager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmodem_manager_la-nm-modem.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-libmodem_manager_la-nm-modem.lo: nm-modem.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmodem_manager_la-nm-modem.lo -MD -MP -MF $(DEPDIR)/libmodem_manager_la-nm-modem.Tpo -c -o libmodem_manager_la-nm-modem.lo `test -f 'nm-modem.c' || echo '$(srcdir)/'`nm-modem.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmodem_manager_la-nm-modem.Tpo $(DEPDIR)/libmodem_manager_la-nm-modem.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-modem.c' object='libmodem_manager_la-nm-modem.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmodem_manager_la-nm-modem.lo `test -f 'nm-modem.c' || echo '$(srcdir)/'`nm-modem.c
-
-libmodem_manager_la-nm-modem-generic.lo: nm-modem-generic.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmodem_manager_la-nm-modem-generic.lo -MD -MP -MF $(DEPDIR)/libmodem_manager_la-nm-modem-generic.Tpo -c -o libmodem_manager_la-nm-modem-generic.lo `test -f 'nm-modem-generic.c' || echo '$(srcdir)/'`nm-modem-generic.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmodem_manager_la-nm-modem-generic.Tpo $(DEPDIR)/libmodem_manager_la-nm-modem-generic.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-modem-generic.c' object='libmodem_manager_la-nm-modem-generic.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmodem_manager_la-nm-modem-generic.lo `test -f 'nm-modem-generic.c' || echo '$(srcdir)/'`nm-modem-generic.c
-
-libmodem_manager_la-nm-modem-cdma.lo: nm-modem-cdma.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmodem_manager_la-nm-modem-cdma.lo -MD -MP -MF $(DEPDIR)/libmodem_manager_la-nm-modem-cdma.Tpo -c -o libmodem_manager_la-nm-modem-cdma.lo `test -f 'nm-modem-cdma.c' || echo '$(srcdir)/'`nm-modem-cdma.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmodem_manager_la-nm-modem-cdma.Tpo $(DEPDIR)/libmodem_manager_la-nm-modem-cdma.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-modem-cdma.c' object='libmodem_manager_la-nm-modem-cdma.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmodem_manager_la-nm-modem-cdma.lo `test -f 'nm-modem-cdma.c' || echo '$(srcdir)/'`nm-modem-cdma.c
-
-libmodem_manager_la-nm-modem-gsm.lo: nm-modem-gsm.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmodem_manager_la-nm-modem-gsm.lo -MD -MP -MF $(DEPDIR)/libmodem_manager_la-nm-modem-gsm.Tpo -c -o libmodem_manager_la-nm-modem-gsm.lo `test -f 'nm-modem-gsm.c' || echo '$(srcdir)/'`nm-modem-gsm.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmodem_manager_la-nm-modem-gsm.Tpo $(DEPDIR)/libmodem_manager_la-nm-modem-gsm.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-modem-gsm.c' object='libmodem_manager_la-nm-modem-gsm.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmodem_manager_la-nm-modem-gsm.lo `test -f 'nm-modem-gsm.c' || echo '$(srcdir)/'`nm-modem-gsm.c
-
-libmodem_manager_la-nm-modem-manager.lo: nm-modem-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmodem_manager_la-nm-modem-manager.lo -MD -MP -MF $(DEPDIR)/libmodem_manager_la-nm-modem-manager.Tpo -c -o libmodem_manager_la-nm-modem-manager.lo `test -f 'nm-modem-manager.c' || echo '$(srcdir)/'`nm-modem-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmodem_manager_la-nm-modem-manager.Tpo $(DEPDIR)/libmodem_manager_la-nm-modem-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-modem-manager.c' object='libmodem_manager_la-nm-modem-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmodem_manager_la-nm-modem-manager.lo `test -f 'nm-modem-manager.c' || echo '$(srcdir)/'`nm-modem-manager.c
-
-libmodem_manager_la-nm-modem-broadband.lo: nm-modem-broadband.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmodem_manager_la-nm-modem-broadband.lo -MD -MP -MF $(DEPDIR)/libmodem_manager_la-nm-modem-broadband.Tpo -c -o libmodem_manager_la-nm-modem-broadband.lo `test -f 'nm-modem-broadband.c' || echo '$(srcdir)/'`nm-modem-broadband.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmodem_manager_la-nm-modem-broadband.Tpo $(DEPDIR)/libmodem_manager_la-nm-modem-broadband.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-modem-broadband.c' object='libmodem_manager_la-nm-modem-broadband.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmodem_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmodem_manager_la-nm-modem-broadband.lo `test -f 'nm-modem-broadband.c' || echo '$(srcdir)/'`nm-modem-broadband.c
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-ID: $(am__tagged_files)
- $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- set x; \
- here=`pwd`; \
- $(am__define_uniq_tagged_files); \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- $(am__define_uniq_tagged_files); \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
- list='$(am__tagged_files)'; \
- case "$(srcdir)" in \
- [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
- *) sdir=$(subdir)/$(srcdir) ;; \
- esac; \
- for i in $$list; do \
- if test -f "$$i"; then \
- echo "$(subdir)/$$i"; \
- else \
- echo "$$sdir/$$i"; \
- fi; \
- done >> $(top_builddir)/cscope.files
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- if test -z '$(STRIP)'; then \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- install; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
- fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am
-
-include $(GLIB_MAKEFILE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/modem-manager/nm-modem-cdma.c b/src/modem-manager/nm-modem-cdma.c
deleted file mode 100644
index 6bed8c2a4..000000000
--- a/src/modem-manager/nm-modem-cdma.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <glib/gi18n.h>
-
-#include "nm-dbus-glib-types.h"
-#include "nm-modem-cdma.h"
-#include "nm-modem-types.h"
-#include "nm-enum-types.h"
-#include "nm-device.h"
-#include "nm-device-private.h"
-#include "nm-dbus-manager.h"
-#include "nm-setting-connection.h"
-#include "nm-setting-cdma.h"
-#include "nm-setting-ppp.h"
-#include "NetworkManagerUtils.h"
-#include "nm-logging.h"
-
-G_DEFINE_TYPE (NMModemCdma, nm_modem_cdma, NM_TYPE_MODEM_GENERIC)
-
-#define NM_MODEM_CDMA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MODEM_CDMA, NMModemCdmaPrivate))
-
-typedef struct {
- DBusGProxyCall *call;
-
- GHashTable *connect_properties;
-} NMModemCdmaPrivate;
-
-
-#define NM_CDMA_ERROR (nm_cdma_error_quark ())
-
-static GQuark
-nm_cdma_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-cdma-error");
- return quark;
-}
-
-
-NMModem *
-nm_modem_cdma_new (const char *path,
- const char *data_device,
- guint32 ip_method,
- NMModemState state)
-{
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (data_device != NULL, NULL);
-
- return (NMModem *) g_object_new (NM_TYPE_MODEM_CDMA,
- NM_MODEM_PATH, path,
- NM_MODEM_UID, data_device,
- NM_MODEM_CONTROL_PORT, NULL,
- NM_MODEM_DATA_PORT, data_device,
- NM_MODEM_IP_METHOD, ip_method,
- NM_MODEM_CONNECTED, (state == NM_MODEM_STATE_CONNECTED),
- NULL);
-}
-
-static void
-stage1_prepare_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
-{
- NMModemCdma *self = NM_MODEM_CDMA (user_data);
- NMModemCdmaPrivate *priv = NM_MODEM_CDMA_GET_PRIVATE (self);
- GError *error = NULL;
-
- priv->call = NULL;
-
- if (priv->connect_properties) {
- g_hash_table_destroy (priv->connect_properties);
- priv->connect_properties = NULL;
- }
-
- if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID))
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, TRUE, NM_DEVICE_STATE_REASON_NONE);
- else {
- nm_log_warn (LOGD_MB, "CDMA connection failed: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_error_free (error);
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, NM_DEVICE_STATE_REASON_NONE);
- }
-}
-
-static void
-do_connect (NMModemCdma *self)
-{
- NMModemCdmaPrivate *priv = NM_MODEM_CDMA_GET_PRIVATE (self);
- DBusGProxy *proxy;
-
- proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self), MM_OLD_DBUS_INTERFACE_MODEM_SIMPLE);
- priv->call = dbus_g_proxy_begin_call_with_timeout (proxy,
- "Connect", stage1_prepare_done,
- self, NULL, 120000,
- DBUS_TYPE_G_MAP_OF_VARIANT, priv->connect_properties,
- G_TYPE_INVALID);
-}
-
-static void
-stage1_enable_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
-{
- NMModemCdma *self = NM_MODEM_CDMA (user_data);
- GError *error = NULL;
-
- if (dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID))
- do_connect (self);
- else {
- nm_log_warn (LOGD_MB, "CDMA modem enable failed: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_error_free (error);
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED);
- }
-}
-
-static GHashTable *
-create_connect_properties (NMConnection *connection)
-{
- NMSettingCdma *setting;
- GHashTable *properties;
- const char *str;
-
- setting = nm_connection_get_setting_cdma (connection);
- properties = value_hash_create ();
-
- str = nm_setting_cdma_get_number (setting);
- if (str)
- value_hash_add_str (properties, "number", str);
-
- return properties;
-}
-
-static NMActStageReturn
-act_stage1_prepare (NMModem *modem,
- NMActRequest *req,
- GPtrArray **out_hints,
- const char **out_setting_name,
- NMDeviceStateReason *reason)
-{
- NMModemCdma *self = NM_MODEM_CDMA (modem);
- NMModemCdmaPrivate *priv = NM_MODEM_CDMA_GET_PRIVATE (self);
- NMConnection *connection;
-
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- *out_setting_name = nm_connection_need_secrets (connection, out_hints);
- if (!*out_setting_name) {
- gboolean enabled = nm_modem_get_mm_enabled (modem);
- DBusGProxy *proxy;
-
- if (priv->connect_properties)
- g_hash_table_destroy (priv->connect_properties);
- priv->connect_properties = create_connect_properties (connection);
-
- if (enabled)
- do_connect (self);
- else {
- proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (modem), MM_OLD_DBUS_INTERFACE_MODEM);
- dbus_g_proxy_begin_call_with_timeout (proxy,
- "Enable", stage1_enable_done,
- modem, NULL, 20000,
- G_TYPE_BOOLEAN, TRUE,
- G_TYPE_INVALID);
- }
- } else {
- /* NMModem will handle requesting secrets... */
- }
-
- return NM_ACT_STAGE_RETURN_POSTPONE;
-}
-
-static NMConnection *
-get_best_auto_connection (NMModem *modem,
- GSList *connections,
- char **specific_object)
-{
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
-
- if (nm_connection_is_type (connection, NM_SETTING_CDMA_SETTING_NAME))
- return connection;
- }
- return NULL;
-}
-
-static gboolean
-check_connection_compatible (NMModem *modem,
- NMConnection *connection,
- GError **error)
-{
- NMSettingConnection *s_con;
- NMSettingCdma *s_cdma;
-
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
-
- if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_CDMA_SETTING_NAME)) {
- g_set_error (error,
- NM_CDMA_ERROR, NM_CDMA_ERROR_CONNECTION_NOT_CDMA,
- "The connection was not a CDMA connection.");
- return FALSE;
- }
-
- s_cdma = nm_connection_get_setting_cdma (connection);
- if (!s_cdma) {
- g_set_error (error,
- NM_CDMA_ERROR, NM_CDMA_ERROR_CONNECTION_INVALID,
- "The connection was not a valid CDMA connection.");
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-complete_connection (NMModem *modem,
- NMConnection *connection,
- const GSList *existing_connections,
- GError **error)
-{
- NMSettingCdma *s_cdma;
- NMSettingPPP *s_ppp;
-
- s_cdma = nm_connection_get_setting_cdma (connection);
- if (!s_cdma) {
- s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
- nm_connection_add_setting (connection, NM_SETTING (s_cdma));
- }
-
- if (!nm_setting_cdma_get_number (s_cdma))
- g_object_set (G_OBJECT (s_cdma), NM_SETTING_CDMA_NUMBER, "#777", NULL);
-
- s_ppp = nm_connection_get_setting_ppp (connection);
- if (!s_ppp) {
- s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
- g_object_set (G_OBJECT (s_ppp),
- NM_SETTING_PPP_LCP_ECHO_FAILURE, 5,
- NM_SETTING_PPP_LCP_ECHO_INTERVAL, 30,
- NULL);
- nm_connection_add_setting (connection, NM_SETTING (s_ppp));
- }
-
- nm_utils_complete_generic (connection,
- NM_SETTING_CDMA_SETTING_NAME,
- existing_connections,
- _("CDMA connection %d"),
- NULL,
- FALSE); /* No IPv6 yet by default */
-
- return TRUE;
-}
-
-static gboolean
-get_user_pass (NMModem *modem,
- NMConnection *connection,
- const char **user,
- const char **pass)
-{
- NMSettingCdma *s_cdma;
-
- s_cdma = nm_connection_get_setting_cdma (connection);
- if (!s_cdma)
- return FALSE;
-
- if (user)
- *user = nm_setting_cdma_get_username (s_cdma);
- if (pass)
- *pass = nm_setting_cdma_get_password (s_cdma);
-
- return TRUE;
-}
-
-static const char *
-get_setting_name (NMModem *modem)
-{
- return NM_SETTING_CDMA_SETTING_NAME;
-}
-
-static void
-deactivate (NMModem *modem, NMDevice *device)
-{
- NMModemCdmaPrivate *priv = NM_MODEM_CDMA_GET_PRIVATE (modem);
-
- if (priv->call) {
- DBusGProxy *proxy;
-
- proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (modem), MM_OLD_DBUS_INTERFACE_MODEM_SIMPLE);
- dbus_g_proxy_cancel_call (proxy, priv->call);
- priv->call = NULL;
- }
-
- NM_MODEM_CLASS (nm_modem_cdma_parent_class)->deactivate (modem, device);
-}
-
-/*****************************************************************************/
-
-static void
-nm_modem_cdma_init (NMModemCdma *self)
-{
-}
-
-static void
-dispose (GObject *object)
-{
- NMModemCdma *self = NM_MODEM_CDMA (object);
- NMModemCdmaPrivate *priv = NM_MODEM_CDMA_GET_PRIVATE (self);
-
- if (priv->connect_properties)
- g_hash_table_destroy (priv->connect_properties);
-
- G_OBJECT_CLASS (nm_modem_cdma_parent_class)->dispose (object);
-}
-
-static void
-nm_modem_cdma_class_init (NMModemCdmaClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMModemClass *modem_class = NM_MODEM_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMModemCdmaPrivate));
-
- /* Virtual methods */
- object_class->dispose = dispose;
- modem_class->get_user_pass = get_user_pass;
- modem_class->get_setting_name = get_setting_name;
- modem_class->get_best_auto_connection = get_best_auto_connection;
- modem_class->check_connection_compatible = check_connection_compatible;
- modem_class->complete_connection = complete_connection;
- modem_class->act_stage1_prepare = act_stage1_prepare;
- modem_class->deactivate = deactivate;
-
- dbus_g_error_domain_register (NM_CDMA_ERROR, NULL, NM_TYPE_CDMA_ERROR);
-}
diff --git a/src/modem-manager/nm-modem-cdma.h b/src/modem-manager/nm-modem-cdma.h
deleted file mode 100644
index ab1b48749..000000000
--- a/src/modem-manager/nm-modem-cdma.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#ifndef NM_MODEM_CDMA_H
-#define NM_MODEM_CDMA_H
-
-#include <nm-modem-generic.h>
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_MODEM_CDMA (nm_modem_cdma_get_type ())
-#define NM_MODEM_CDMA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_CDMA, NMModemCdma))
-#define NM_MODEM_CDMA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MODEM_CDMA, NMModemCdmaClass))
-#define NM_IS_MODEM_CDMA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_MODEM_CDMA))
-#define NM_IS_MODEM_CDMA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM_CDMA))
-#define NM_MODEM_CDMA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM_CDMA, NMModemCdmaClass))
-
-typedef enum {
- NM_CDMA_ERROR_CONNECTION_NOT_CDMA = 0, /*< nick=ConnectionNotCdma >*/
- NM_CDMA_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_CDMA_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMCdmaError;
-
-typedef struct {
- NMModemGeneric parent;
-} NMModemCdma;
-
-typedef struct {
- NMModemGenericClass parent;
-} NMModemCdmaClass;
-
-GType nm_modem_cdma_get_type (void);
-
-NMModem *nm_modem_cdma_new (const char *path,
- const char *data_device,
- guint32 ip_method,
- NMModemState state);
-
-G_END_DECLS
-
-#endif /* NM_MODEM_CDMA_H */
diff --git a/src/modem-manager/nm-modem-generic.c b/src/modem-manager/nm-modem-generic.c
deleted file mode 100644
index f4e7a52fc..000000000
--- a/src/modem-manager/nm-modem-generic.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#include <string.h>
-#include "nm-modem-generic.h"
-#include "nm-system.h"
-#include "nm-dbus-manager.h"
-#include "nm-setting-connection.h"
-#include "nm-marshal.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-modem-types.h"
-#include "nm-logging.h"
-#include "NetworkManagerUtils.h"
-#include "nm-device-private.h"
-#include "nm-dbus-glib-types.h"
-
-G_DEFINE_TYPE (NMModemGeneric, nm_modem_generic, NM_TYPE_MODEM)
-
-#define NM_MODEM_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MODEM_GENERIC, NMModemGenericPrivate))
-
-typedef struct {
- NMDBusManager *dbus_mgr;
- DBusGProxy *proxy;
- DBusGProxy *props_proxy;
-
- DBusGProxyCall *call;
-
- NMModemState state;
-} NMModemGenericPrivate;
-
-/*****************************************************************************/
-
-DBusGProxy *
-nm_modem_generic_get_proxy (NMModemGeneric *self,
- const char *interface)
-{
-
- NMModemGenericPrivate *priv = NM_MODEM_GENERIC_GET_PRIVATE (self);
- const char *current_iface;
-
- g_return_val_if_fail (NM_IS_MODEM_GENERIC (self), NULL);
-
- /* Default to the default interface. */
- if (interface == NULL)
- interface = MM_OLD_DBUS_INTERFACE_MODEM;
-
- if (interface && !strcmp (interface, DBUS_INTERFACE_PROPERTIES))
- return priv->props_proxy;
-
- current_iface = dbus_g_proxy_get_interface (priv->proxy);
- if (!current_iface || strcmp (current_iface, interface))
- dbus_g_proxy_set_interface (priv->proxy, interface);
-
- return priv->proxy;
-}
-
-/*****************************************************************************/
-/* Query/Update enabled state */
-
-static void
-update_mm_enabled (NMModem *self,
- gboolean new_enabled)
-{
- if (nm_modem_get_mm_enabled (self) != new_enabled) {
- g_object_set (self,
- NM_MODEM_ENABLED, new_enabled,
- NULL);
- }
-}
-
-static void
-get_mm_enabled_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
-{
- NMModem *self = NM_MODEM (user_data);
- GError *error = NULL;
- GValue value = { 0, };
-
- if (!dbus_g_proxy_end_call (proxy, call_id, &error,
- G_TYPE_VALUE, &value,
- G_TYPE_INVALID)) {
- nm_log_warn (LOGD_MB, "failed get modem enabled state: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- return;
- }
-
- if (G_VALUE_HOLDS_BOOLEAN (&value)) {
- update_mm_enabled (self, g_value_get_boolean (&value));
- } else
- nm_log_warn (LOGD_MB, "failed get modem enabled state: unexpected reply type");
-
- g_value_unset (&value);
-}
-
-static void
-query_mm_enabled (NMModemGeneric *self)
-{
- dbus_g_proxy_begin_call (NM_MODEM_GENERIC_GET_PRIVATE (self)->props_proxy,
- "Get", get_mm_enabled_done,
- self, NULL,
- G_TYPE_STRING, MM_OLD_DBUS_INTERFACE_MODEM,
- G_TYPE_STRING, "Enabled",
- G_TYPE_INVALID);
-}
-
-static void
-set_mm_enabled_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
-{
- GError *error = NULL;
-
- if (!dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)) {
- nm_log_warn (LOGD_MB, "failed to enable/disable modem: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- }
-
- /* Update enabled/disabled state again */
- query_mm_enabled (NM_MODEM_GENERIC (user_data));
-}
-
-static void
-set_mm_enabled (NMModem *self, gboolean enabled)
-{
- /* FIXME: For now this just toggles the ModemManager enabled state. In the
- * future we want to tie this into rfkill state instead so that the user can
- * toggle rfkill status of the WWAN modem.
- */
- dbus_g_proxy_begin_call (nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self),
- MM_OLD_DBUS_INTERFACE_MODEM),
- "Enable", set_mm_enabled_done,
- self, NULL,
- G_TYPE_BOOLEAN, enabled,
- G_TYPE_INVALID);
- /* If we are disabling the modem, stop saying that it's enabled. */
- if (!enabled)
- update_mm_enabled (self, enabled);
-}
-
-/*****************************************************************************/
-/* IP method static */
-
-static char addr_to_string_buf[INET6_ADDRSTRLEN + 1];
-
-static const char *
-ip_address_to_string (guint32 numeric)
-{
- struct in_addr temp_addr;
-
- memset (&addr_to_string_buf, '\0', sizeof (addr_to_string_buf));
- temp_addr.s_addr = numeric;
-
- if (inet_ntop (AF_INET, &temp_addr, addr_to_string_buf, INET_ADDRSTRLEN)) {
- return addr_to_string_buf;
- } else {
- nm_log_warn (LOGD_VPN, "error converting IP4 address 0x%X",
- ntohl (temp_addr.s_addr));
- return NULL;
- }
-}
-
-static void
-static_stage3_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
-{
- NMModemGeneric *self = NM_MODEM_GENERIC (user_data);
- NMModemGenericPrivate *priv = NM_MODEM_GENERIC_GET_PRIVATE (self);
- GValueArray *ret_array = NULL;
- GError *error = NULL;
- NMIP4Config *config = NULL;
-
- priv->call = NULL;
-
- /* Returned value array is (uuuu): [IP, DNS1, DNS2, DNS3], all in
- * network byte order.
- */
- if (dbus_g_proxy_end_call (proxy, call, &error,
- G_TYPE_VALUE_ARRAY, &ret_array,
- G_TYPE_INVALID)) {
- NMIP4Address *addr;
- int i;
-
- config = nm_ip4_config_new ();
-
- addr = nm_ip4_address_new ();
-
- nm_log_info (LOGD_MB, "(%s): IPv4 static configuration:",
- nm_modem_get_uid (NM_MODEM (self)));
-
- /* IP address */
- nm_ip4_address_set_address (addr, g_value_get_uint (g_value_array_get_nth (ret_array, 0)));
- nm_ip4_address_set_prefix (addr, 32);
- nm_ip4_config_take_address (config, addr);
-
- nm_log_info (LOGD_MB, " address %s/%d",
- ip_address_to_string (nm_ip4_address_get_address (addr)),
- nm_ip4_address_get_prefix (addr));
-
- /* DNS servers */
- for (i = 1; i < ret_array->n_values; i++) {
- GValue *value = g_value_array_get_nth (ret_array, i);
- guint32 tmp = g_value_get_uint (value);
-
- if (tmp > 0) {
- nm_ip4_config_add_nameserver (config, tmp);
- nm_log_info (LOGD_MB, " DNS %s", ip_address_to_string (tmp));
- }
- }
- g_value_array_free (ret_array);
- }
-
- g_signal_emit_by_name (self, NM_MODEM_IP4_CONFIG_RESULT, config, error);
- g_clear_error (&error);
-}
-
-static NMActStageReturn
-static_stage3_ip4_config_start (NMModem *self,
- NMActRequest *req,
- NMDeviceStateReason *reason)
-{
- NMModemGenericPrivate *priv;
-
- g_return_val_if_fail (self != NULL, NM_ACT_STAGE_RETURN_FAILURE);
- g_return_val_if_fail (NM_IS_MODEM (self), NM_ACT_STAGE_RETURN_FAILURE);
- g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
- g_return_val_if_fail (NM_IS_ACT_REQUEST (req), NM_ACT_STAGE_RETURN_FAILURE);
- g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
- priv = NM_MODEM_GENERIC_GET_PRIVATE (self);
-
- priv->call = dbus_g_proxy_begin_call (nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self),
- MM_OLD_DBUS_INTERFACE_MODEM),
- "GetIP4Config", static_stage3_done,
- self, NULL,
- G_TYPE_INVALID);
-
- return NM_ACT_STAGE_RETURN_POSTPONE;
-}
-
-/*****************************************************************************/
-
-static void
-disconnect_done (DBusGProxy *proxy,
- DBusGProxyCall *call_id,
- gpointer user_data)
-{
- GError *error = NULL;
- gboolean warn = GPOINTER_TO_UINT (user_data);
-
- if (!dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID) && warn) {
- nm_log_info (LOGD_MB, "disconnect failed: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- }
-}
-
-static void
-disconnect (NMModem *self,
- gboolean warn)
-{
- dbus_g_proxy_begin_call (nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self),
- MM_OLD_DBUS_INTERFACE_MODEM),
- "Disconnect",
- disconnect_done,
- GUINT_TO_POINTER (warn),
- NULL,
- G_TYPE_INVALID);
-}
-
-/*****************************************************************************/
-
-static void
-deactivate (NMModem *self, NMDevice *device)
-{
- NMModemGenericPrivate *priv;
-
- g_assert (NM_IS_MODEM_GENERIC (self));
- g_assert (NM_IS_DEVICE (device));
-
- priv = NM_MODEM_GENERIC_GET_PRIVATE (self);
-
- if (priv->call) {
- dbus_g_proxy_cancel_call (priv->proxy, priv->call);
- priv->call = NULL;
- }
-
- /* Chain up parent's */
- NM_MODEM_CLASS (nm_modem_generic_parent_class)->deactivate (self, device);
-}
-
-/*****************************************************************************/
-
-static void
-modem_properties_changed (DBusGProxy *proxy,
- const char *interface,
- GHashTable *props,
- gpointer user_data)
-{
- NMModemGeneric *self = NM_MODEM_GENERIC (user_data);
- NMModemGenericPrivate *priv = NM_MODEM_GENERIC_GET_PRIVATE (self);
- GValue *value;
- NMModemState new_state;
-
- if (strcmp (interface, MM_OLD_DBUS_INTERFACE_MODEM))
- return;
-
- value = g_hash_table_lookup (props, "Enabled");
- if (value && G_VALUE_HOLDS_BOOLEAN (value)) {
- g_object_set (self,
- NM_MODEM_ENABLED, g_value_get_boolean (value),
- NULL);
- }
-
- value = g_hash_table_lookup (props, "IpMethod");
- if (value && G_VALUE_HOLDS_UINT (value)) {
- g_object_set (self,
- NM_MODEM_IP_METHOD, g_value_get_uint (value),
- NULL);
- }
-
- value = g_hash_table_lookup (props, "State");
- if (value && G_VALUE_HOLDS_UINT (value)) {
- new_state = g_value_get_uint (value);
- if (new_state != priv->state) {
- if (new_state == NM_MODEM_STATE_CONNECTED)
- g_object_set (self,
- NM_MODEM_CONNECTED, TRUE,
- NULL);
- else if (priv->state == NM_MODEM_STATE_CONNECTED)
- g_object_set (self,
- NM_MODEM_CONNECTED, FALSE,
- NULL);
- priv->state = new_state;
- }
- }
-}
-
-/*****************************************************************************/
-
-static void
-nm_modem_generic_init (NMModemGeneric *self)
-{
- NMModemGenericPrivate *priv = NM_MODEM_GENERIC_GET_PRIVATE (self);
-
- priv->dbus_mgr = nm_dbus_manager_get ();
-}
-
-static GObject*
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- NMModemGenericPrivate *priv;
- DBusGConnection *bus;
-
- object = G_OBJECT_CLASS (nm_modem_generic_parent_class)->constructor (type, n_construct_params, construct_params);
- if (!object)
- return NULL;
-
- priv = NM_MODEM_GENERIC_GET_PRIVATE (object);
-
- bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
- priv->proxy = dbus_g_proxy_new_for_name (bus,
- MM_OLD_DBUS_SERVICE,
- nm_modem_get_path (NM_MODEM (object)),
- MM_OLD_DBUS_INTERFACE_MODEM);
-
- priv->props_proxy = dbus_g_proxy_new_for_name (bus,
- MM_OLD_DBUS_SERVICE,
- nm_modem_get_path (NM_MODEM (object)),
- DBUS_INTERFACE_PROPERTIES);
- dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_BOXED,
- G_TYPE_NONE,
- G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
- dbus_g_proxy_add_signal (priv->props_proxy, "MmPropertiesChanged",
- G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->props_proxy, "MmPropertiesChanged",
- G_CALLBACK (modem_properties_changed),
- object,
- NULL);
-
- query_mm_enabled (NM_MODEM_GENERIC (object));
-
- return object;
-}
-
-static void
-dispose (GObject *object)
-{
- NMModemGenericPrivate *priv = NM_MODEM_GENERIC_GET_PRIVATE (object);
-
- if (priv->proxy) {
- g_object_unref (priv->proxy);
- priv->proxy = NULL;
- }
-
- if (priv->props_proxy) {
- g_object_unref (priv->props_proxy);
- priv->props_proxy = NULL;
- }
-
- if (priv->dbus_mgr) {
- g_object_unref (priv->dbus_mgr);
- priv->dbus_mgr = NULL;
- }
-
- G_OBJECT_CLASS (nm_modem_generic_parent_class)->dispose (object);
-}
-
-static void
-nm_modem_generic_class_init (NMModemGenericClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMModemClass *modem_class = NM_MODEM_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMModemGenericPrivate));
-
- /* Virtual methods */
- object_class->constructor = constructor;
- object_class->dispose = dispose;
-
- modem_class->static_stage3_ip4_config_start = static_stage3_ip4_config_start;
- modem_class->disconnect = disconnect;
- modem_class->deactivate = deactivate;
- modem_class->set_mm_enabled = set_mm_enabled;
-}
diff --git a/src/modem-manager/nm-modem-generic.h b/src/modem-manager/nm-modem-generic.h
deleted file mode 100644
index 59866a1e6..000000000
--- a/src/modem-manager/nm-modem-generic.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#ifndef NM_MODEM_GENERIC_H
-#define NM_MODEM_GENERIC_H
-
-#include <dbus/dbus-glib.h>
-#include <glib-object.h>
-#include "nm-modem.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_MODEM_GENERIC (nm_modem_generic_get_type ())
-#define NM_MODEM_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_GENERIC, NMModemGeneric))
-#define NM_MODEM_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MODEM_GENERIC, NMModemGenericClass))
-#define NM_IS_MODEM_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_MODEM_GENERIC))
-#define NM_IS_MODEM_GENERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM_GENERIC))
-#define NM_MODEM_GENERIC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM_GENERIC, NMModemGenericClass))
-
-typedef enum {
- NM_MODEM_STATE_UNKNOWN = 0,
- NM_MODEM_STATE_DISABLED = 10,
- NM_MODEM_STATE_DISABLING = 20,
- NM_MODEM_STATE_ENABLING = 30,
- NM_MODEM_STATE_ENABLED = 40,
- NM_MODEM_STATE_SEARCHING = 50,
- NM_MODEM_STATE_REGISTERED = 60,
- NM_MODEM_STATE_DISCONNECTING = 70,
- NM_MODEM_STATE_CONNECTING = 80,
- NM_MODEM_STATE_CONNECTED = 90,
-
- NM_MODEM_STATE_LAST = NM_MODEM_STATE_CONNECTED
-} NMModemState;
-
-typedef struct {
- NMModem parent;
-} NMModemGeneric;
-
-typedef struct {
- NMModemClass parent;
-} NMModemGenericClass;
-
-GType nm_modem_generic_get_type (void);
-
-/* Protected */
-DBusGProxy *nm_modem_generic_get_proxy (NMModemGeneric *modem,
- const gchar *interface);
-
-G_END_DECLS
-
-#endif /* NM_MODEM_GENERIC_H */
diff --git a/src/modem-manager/nm-modem-gsm.c b/src/modem-manager/nm-modem-gsm.c
deleted file mode 100644
index be793db9c..000000000
--- a/src/modem-manager/nm-modem-gsm.c
+++ /dev/null
@@ -1,644 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <glib/gi18n.h>
-
-#include "nm-dbus-glib-types.h"
-#include "nm-modem-gsm.h"
-#include "nm-device.h"
-#include "nm-device-private.h"
-#include "nm-setting-connection.h"
-#include "nm-setting-gsm.h"
-#include "nm-setting-ppp.h"
-#include "nm-modem-types.h"
-#include "nm-enum-types.h"
-#include "nm-logging.h"
-#include "NetworkManagerUtils.h"
-
-typedef enum {
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_ANY = 0,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_GPRS,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_EDGE,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_UMTS,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSDPA,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_PREFERRED,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_PREFERRED,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_ONLY,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_ONLY,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSUPA,
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSPA,
-
- MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_LAST = MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSPA
-} MMModemDeprecatedMode;
-
-typedef enum {
- MM_MODEM_GSM_ALLOWED_MODE_ANY = 0,
- MM_MODEM_GSM_ALLOWED_MODE_2G_PREFERRED = 1,
- MM_MODEM_GSM_ALLOWED_MODE_3G_PREFERRED = 2,
- MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY = 3,
- MM_MODEM_GSM_ALLOWED_MODE_3G_ONLY = 4,
- MM_MODEM_GSM_ALLOWED_MODE_4G_PREFERRED = 5,
- MM_MODEM_GSM_ALLOWED_MODE_4G_ONLY = 6,
-
- MM_MODEM_GSM_ALLOWED_MODE_LAST = MM_MODEM_GSM_ALLOWED_MODE_4G_ONLY
-} MMModemGsmAllowedMode;
-
-typedef enum {
- MM_MODEM_GSM_ALLOWED_AUTH_UNKNOWN = 0x0000,
- /* bits 0..4 order match Ericsson device bitmap */
- MM_MODEM_GSM_ALLOWED_AUTH_NONE = 0x0001,
- MM_MODEM_GSM_ALLOWED_AUTH_PAP = 0x0002,
- MM_MODEM_GSM_ALLOWED_AUTH_CHAP = 0x0004,
- MM_MODEM_GSM_ALLOWED_AUTH_MSCHAP = 0x0008,
- MM_MODEM_GSM_ALLOWED_AUTH_MSCHAPV2 = 0x0010,
- MM_MODEM_GSM_ALLOWED_AUTH_EAP = 0x0020,
-
- MM_MODEM_GSM_ALLOWED_AUTH_LAST = MM_MODEM_GSM_ALLOWED_AUTH_EAP
-} MMModemGsmAllowedAuth;
-
-G_DEFINE_TYPE (NMModemGsm, nm_modem_gsm, NM_TYPE_MODEM_GENERIC)
-
-#define NM_MODEM_GSM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MODEM_GSM, NMModemGsmPrivate))
-
-typedef struct {
- DBusGProxyCall *call;
-
- GHashTable *connect_properties;
- guint32 pin_tries;
-
- guint enable_delay_id;
-} NMModemGsmPrivate;
-
-
-#define NM_GSM_ERROR (nm_gsm_error_quark ())
-
-static GQuark
-nm_gsm_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-gsm-error");
- return quark;
-}
-
-NMModem *
-nm_modem_gsm_new (const char *path,
- const char *data_device,
- guint32 ip_method,
- NMModemState state)
-{
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (data_device != NULL, NULL);
-
- return (NMModem *) g_object_new (NM_TYPE_MODEM_GSM,
- NM_MODEM_PATH, path,
- NM_MODEM_UID, data_device,
- NM_MODEM_CONTROL_PORT, NULL,
- NM_MODEM_DATA_PORT, data_device,
- NM_MODEM_IP_METHOD, ip_method,
- NM_MODEM_CONNECTED, (state == NM_MODEM_STATE_CONNECTED),
- NULL);
-}
-
-static NMDeviceStateReason
-translate_mm_error (GError *error)
-{
- NMDeviceStateReason reason;
-
- if (dbus_g_error_has_name (error, MM_MODEM_CONNECT_ERROR_NO_CARRIER))
- reason = NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER;
- else if (dbus_g_error_has_name (error, MM_MODEM_CONNECT_ERROR_NO_DIALTONE))
- reason = NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE;
- else if (dbus_g_error_has_name (error, MM_MODEM_CONNECT_ERROR_BUSY))
- reason = NM_DEVICE_STATE_REASON_MODEM_BUSY;
- else if (dbus_g_error_has_name (error, MM_MODEM_CONNECT_ERROR_NO_ANSWER))
- reason = NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT;
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_NETWORK_NOT_ALLOWED))
- reason = NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED;
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_NETWORK_TIMEOUT))
- reason = NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT;
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_NO_NETWORK))
- reason = NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING;
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_NOT_INSERTED))
- reason = NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED;
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_PIN))
- reason = NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED;
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_PUK))
- reason = NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED;
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_WRONG))
- reason = NM_DEVICE_STATE_REASON_GSM_SIM_WRONG;
- else {
- /* unable to map the ModemManager error to a NM_DEVICE_STATE_REASON */
- nm_log_dbg (LOGD_MB, "unmapped dbus error detected: '%s'", dbus_g_error_get_name (error));
- reason = NM_DEVICE_STATE_REASON_UNKNOWN;
- }
-
- /* FIXME: We have only GSM error messages here, and we have no idea which
- activation state failed. Reasons like:
- NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED,
- NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED,
- NM_DEVICE_STATE_REASON_GSM_APN_FAILED,
- NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED,
- NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED
- are not used.
- */
- return reason;
-}
-
-static void
-ask_for_pin (NMModemGsm *self, gboolean always_ask)
-{
- NMModemGsmPrivate *priv;
- guint32 tries = 0;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_MODEM_GSM (self));
-
- priv = NM_MODEM_GSM_GET_PRIVATE (self);
-
- if (!always_ask)
- tries = priv->pin_tries++;
-
- nm_modem_get_secrets (NM_MODEM (self),
- NM_SETTING_GSM_SETTING_NAME,
- (tries || always_ask) ? TRUE : FALSE,
- NM_SETTING_GSM_PIN);
-}
-
-static void
-stage1_prepare_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
-{
- NMModemGsm *self = NM_MODEM_GSM (user_data);
- NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self);
- GError *error = NULL;
-
- priv->call = NULL;
-
- if (priv->connect_properties) {
- g_hash_table_destroy (priv->connect_properties);
- priv->connect_properties = NULL;
- }
-
- if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID))
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, TRUE, NM_DEVICE_STATE_REASON_NONE);
- else {
- if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_PIN))
- ask_for_pin (self, FALSE);
- else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_WRONG))
- ask_for_pin (self, TRUE);
- else {
- nm_log_warn (LOGD_MB, "GSM connection failed: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
-
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, translate_mm_error (error));
- }
-
- g_error_free (error);
- }
-}
-
-static void
-do_connect (NMModemGsm *self)
-{
- NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self);
- DBusGProxy *proxy;
-
- proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self), MM_OLD_DBUS_INTERFACE_MODEM_SIMPLE);
- priv->call = dbus_g_proxy_begin_call_with_timeout (proxy,
- "Connect", stage1_prepare_done,
- self, NULL, 120000,
- DBUS_TYPE_G_MAP_OF_VARIANT, priv->connect_properties,
- G_TYPE_INVALID);
-}
-
-static void stage1_enable_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data);
-
-/* do_enable() is used as a GSourceFunc, hence the gboolean return */
-static gboolean
-do_enable (NMModemGsm *self)
-{
- DBusGProxy *proxy;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_MODEM_GSM (self), FALSE);
-
- NM_MODEM_GSM_GET_PRIVATE (self)->enable_delay_id = 0;
- proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self), MM_OLD_DBUS_INTERFACE_MODEM);
- dbus_g_proxy_begin_call_with_timeout (proxy,
- "Enable", stage1_enable_done,
- self, NULL, 20000,
- G_TYPE_BOOLEAN, TRUE,
- G_TYPE_INVALID);
- return FALSE;
-}
-
-static void
-stage1_pin_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
-{
- NMModemGsm *self = NM_MODEM_GSM (user_data);
- NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self);
- NMDeviceStateReason reason;
- GError *error = NULL;
-
- if (dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)) {
- /* Success; try to enable the modem again. Wait a few seconds to ensure
- * that ModemManager is ready for the enable right after the unlock.
- */
- if (priv->enable_delay_id == 0)
- priv->enable_delay_id = g_timeout_add_seconds (4, (GSourceFunc) do_enable, self);
- } else {
- nm_log_warn (LOGD_MB, "GSM PIN unlock failed: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
-
- /* try to translate the error reason */
- reason = translate_mm_error (error);
- if (reason == NM_DEVICE_STATE_REASON_UNKNOWN)
- reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
-
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, reason);
- g_error_free (error);
- }
-}
-
-static void
-handle_enable_pin_required (NMModemGsm *self)
-{
- NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self);
- const char *pin = NULL;
- GValue *value;
- DBusGProxy *proxy;
-
- /* See if we have a PIN already */
- value = g_hash_table_lookup (priv->connect_properties, "pin");
- if (value && G_VALUE_HOLDS_STRING (value))
- pin = g_value_get_string (value);
-
- /* If we do, send it */
- if (pin) {
- proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self), MM_OLD_DBUS_INTERFACE_MODEM_GSM_CARD);
- dbus_g_proxy_begin_call_with_timeout (proxy,
- "SendPin", stage1_pin_done,
- self, NULL, 10000,
- G_TYPE_STRING, pin,
- G_TYPE_INVALID);
- } else
- ask_for_pin (self, FALSE);
-}
-
-static void
-stage1_enable_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
-{
- NMModemGsm *self = NM_MODEM_GSM (user_data);
- NMDeviceStateReason reason;
- GError *error = NULL;
-
- if (dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID))
- do_connect (self);
- else {
- nm_log_warn (LOGD_MB, "GSM modem enable failed: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
-
- if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_PIN))
- handle_enable_pin_required (self);
- else {
- /* try to translate the error reason */
- reason = translate_mm_error (error);
- if (reason == NM_DEVICE_STATE_REASON_UNKNOWN)
- reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, reason);
- }
-
- g_error_free (error);
- }
-}
-
-
-static GHashTable *
-create_connect_properties (NMConnection *connection)
-{
- NMSettingGsm *setting;
- NMSettingPPP *s_ppp;
- GHashTable *properties;
- const char *str;
-
- setting = nm_connection_get_setting_gsm (connection);
- properties = value_hash_create ();
-
- str = nm_setting_gsm_get_number (setting);
- if (str)
- value_hash_add_str (properties, "number", str);
-
- str = nm_setting_gsm_get_apn (setting);
- if (str)
- value_hash_add_str (properties, "apn", str);
-
- str = nm_setting_gsm_get_network_id (setting);
- if (str)
- value_hash_add_str (properties, "network_id", str);
-
- str = nm_setting_gsm_get_pin (setting);
- if (str)
- value_hash_add_str (properties, "pin", str);
-
- str = nm_setting_gsm_get_username (setting);
- if (str)
- value_hash_add_str (properties, "username", str);
-
- str = nm_setting_gsm_get_password (setting);
- if (str)
- value_hash_add_str (properties, "password", str);
-
- /* Add both old and new preferred modes */
- switch (nm_setting_gsm_get_network_type (setting)) {
- case NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA:
- value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_ONLY);
- value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_3G_ONLY);
- break;
- case NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE:
- value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_ONLY);
- value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY);
- break;
- case NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA:
- value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_3G_PREFERRED);
- value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_3G_PREFERRED);
- break;
- case NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE:
- value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_2G_PREFERRED);
- value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_2G_PREFERRED);
- break;
- case NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G:
- /* deprecated modes not extended for 4G, so no need to set them here */
- value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_4G_PREFERRED);
- break;
- case NM_SETTING_GSM_NETWORK_TYPE_4G:
- /* deprecated modes not extended for 4G, so no need to set them here */
- value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_4G_ONLY);
- break;
- default:
- value_hash_add_uint (properties, "network_mode", MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_ANY);
- value_hash_add_uint (properties, "allowed_mode", MM_MODEM_GSM_ALLOWED_MODE_ANY);
- break;
- }
-
- /* Roaming */
- if (nm_setting_gsm_get_home_only (setting))
- value_hash_add_bool (properties, "home_only", TRUE);
-
- /* For IpMethod == STATIC or DHCP */
- s_ppp = nm_connection_get_setting_ppp (connection);
- if (s_ppp) {
- guint32 auth = MM_MODEM_GSM_ALLOWED_AUTH_UNKNOWN;
-
- if (nm_setting_ppp_get_noauth (s_ppp))
- auth |= MM_MODEM_GSM_ALLOWED_AUTH_NONE;
- if (!nm_setting_ppp_get_refuse_pap (s_ppp))
- auth |= MM_MODEM_GSM_ALLOWED_AUTH_PAP;
- if (!nm_setting_ppp_get_refuse_chap (s_ppp))
- auth |= MM_MODEM_GSM_ALLOWED_AUTH_CHAP;
- if (!nm_setting_ppp_get_refuse_mschap (s_ppp))
- auth |= MM_MODEM_GSM_ALLOWED_AUTH_MSCHAP;
- if (!nm_setting_ppp_get_refuse_mschapv2 (s_ppp))
- auth |= MM_MODEM_GSM_ALLOWED_AUTH_MSCHAPV2;
- if (!nm_setting_ppp_get_refuse_eap (s_ppp))
- auth |= MM_MODEM_GSM_ALLOWED_AUTH_EAP;
-
- if (auth != MM_MODEM_GSM_ALLOWED_AUTH_UNKNOWN)
- value_hash_add_uint (properties, "allowed_auth", auth);
- }
-
- return properties;
-}
-
-static NMActStageReturn
-act_stage1_prepare (NMModem *modem,
- NMActRequest *req,
- GPtrArray **out_hints,
- const char **out_setting_name,
- NMDeviceStateReason *reason)
-{
- NMModemGsm *self = NM_MODEM_GSM (modem);
- NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self);
- NMConnection *connection;
-
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- *out_setting_name = nm_connection_need_secrets (connection, out_hints);
- if (!*out_setting_name) {
- gboolean enabled = nm_modem_get_mm_enabled (modem);
-
- if (priv->connect_properties)
- g_hash_table_destroy (priv->connect_properties);
- priv->connect_properties = create_connect_properties (connection);
-
- if (enabled)
- do_connect (self);
- else
- do_enable (self);
- } else {
- /* NMModem will handle requesting secrets... */
- }
-
- return NM_ACT_STAGE_RETURN_POSTPONE;
-}
-
-static NMConnection *
-get_best_auto_connection (NMModem *modem,
- GSList *connections,
- char **specific_object)
-{
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
-
- if (nm_connection_is_type (connection, NM_SETTING_GSM_SETTING_NAME))
- return connection;
- }
- return NULL;
-}
-
-static gboolean
-check_connection_compatible (NMModem *modem,
- NMConnection *connection,
- GError **error)
-{
- NMSettingConnection *s_con;
- NMSettingGsm *s_gsm;
-
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
-
- if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_GSM_SETTING_NAME)) {
- g_set_error (error,
- NM_GSM_ERROR, NM_GSM_ERROR_CONNECTION_NOT_GSM,
- "The connection was not a GSM connection.");
- return FALSE;
- }
-
- s_gsm = nm_connection_get_setting_gsm (connection);
- if (!s_gsm) {
- g_set_error (error,
- NM_GSM_ERROR, NM_GSM_ERROR_CONNECTION_INVALID,
- "The connection was not a valid GSM connection.");
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-complete_connection (NMModem *modem,
- NMConnection *connection,
- const GSList *existing_connections,
- GError **error)
-{
- NMSettingGsm *s_gsm;
- NMSettingPPP *s_ppp;
-
- s_gsm = nm_connection_get_setting_gsm (connection);
- if (!s_gsm || !nm_setting_gsm_get_apn (s_gsm)) {
- /* Need an APN at least */
- g_set_error_literal (error,
- NM_SETTING_GSM_ERROR,
- NM_SETTING_GSM_ERROR_MISSING_PROPERTY,
- NM_SETTING_GSM_APN);
- return FALSE;
- }
-
- if (!nm_setting_gsm_get_number (s_gsm))
- g_object_set (G_OBJECT (s_gsm), NM_SETTING_GSM_NUMBER, "*99#", NULL);
-
- s_ppp = nm_connection_get_setting_ppp (connection);
- if (!s_ppp) {
- s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
- g_object_set (G_OBJECT (s_ppp),
- NM_SETTING_PPP_LCP_ECHO_FAILURE, 5,
- NM_SETTING_PPP_LCP_ECHO_INTERVAL, 30,
- NULL);
- nm_connection_add_setting (connection, NM_SETTING (s_ppp));
- }
-
- nm_utils_complete_generic (connection,
- NM_SETTING_GSM_SETTING_NAME,
- existing_connections,
- _("GSM connection %d"),
- NULL,
- FALSE); /* No IPv6 yet by default */
-
- return TRUE;
-}
-
-static gboolean
-get_user_pass (NMModem *modem,
- NMConnection *connection,
- const char **user,
- const char **pass)
-{
- NMSettingGsm *s_gsm;
-
- s_gsm = nm_connection_get_setting_gsm (connection);
- if (!s_gsm)
- return FALSE;
-
- if (user)
- *user = nm_setting_gsm_get_username (s_gsm);
- if (pass)
- *pass = nm_setting_gsm_get_password (s_gsm);
-
- return TRUE;
-}
-
-static const char *
-get_setting_name (NMModem *modem)
-{
- return NM_SETTING_GSM_SETTING_NAME;
-}
-
-static void
-deactivate (NMModem *modem, NMDevice *device)
-{
- NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (modem);
-
- if (priv->call) {
- DBusGProxy *proxy;
-
- proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (modem), MM_OLD_DBUS_INTERFACE_MODEM_SIMPLE);
- dbus_g_proxy_cancel_call (proxy, priv->call);
- priv->call = NULL;
- }
-
- priv->pin_tries = 0;
-
- if (priv->enable_delay_id)
- g_source_remove (priv->enable_delay_id);
-
- NM_MODEM_CLASS (nm_modem_gsm_parent_class)->deactivate (modem, device);
-}
-
-
-/*****************************************************************************/
-
-static void
-nm_modem_gsm_init (NMModemGsm *self)
-{
-}
-
-static void
-dispose (GObject *object)
-{
- NMModemGsm *self = NM_MODEM_GSM (object);
- NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self);
-
- if (priv->connect_properties)
- g_hash_table_destroy (priv->connect_properties);
- if (priv->enable_delay_id)
- g_source_remove (priv->enable_delay_id);
-
- G_OBJECT_CLASS (nm_modem_gsm_parent_class)->dispose (object);
-}
-
-static void
-nm_modem_gsm_class_init (NMModemGsmClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMModemClass *modem_class = NM_MODEM_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMModemGsmPrivate));
-
- /* Virtual methods */
- object_class->dispose = dispose;
- modem_class->get_user_pass = get_user_pass;
- modem_class->get_setting_name = get_setting_name;
- modem_class->get_best_auto_connection = get_best_auto_connection;
- modem_class->check_connection_compatible = check_connection_compatible;
- modem_class->complete_connection = complete_connection;
- modem_class->act_stage1_prepare = act_stage1_prepare;
- modem_class->deactivate = deactivate;
-
- dbus_g_error_domain_register (NM_GSM_ERROR, NULL, NM_TYPE_GSM_ERROR);
-}
diff --git a/src/modem-manager/nm-modem-gsm.h b/src/modem-manager/nm-modem-gsm.h
deleted file mode 100644
index b0f78b0a4..000000000
--- a/src/modem-manager/nm-modem-gsm.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#ifndef NM_MODEM_GSM_H
-#define NM_MODEM_GSM_H
-
-#include <nm-modem-generic.h>
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_MODEM_GSM (nm_modem_gsm_get_type ())
-#define NM_MODEM_GSM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_GSM, NMModemGsm))
-#define NM_MODEM_GSM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MODEM_GSM, NMModemGsmClass))
-#define NM_IS_MODEM_GSM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_MODEM_GSM))
-#define NM_IS_MODEM_GSM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM_GSM))
-#define NM_MODEM_GSM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM_GSM, NMModemGsmClass))
-
-typedef enum {
- NM_GSM_ERROR_CONNECTION_NOT_GSM = 0, /*< nick=ConnectionNotGsm >*/
- NM_GSM_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_GSM_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMGsmError;
-
-typedef struct {
- NMModemGeneric parent;
-} NMModemGsm;
-
-typedef struct {
- NMModemGenericClass parent;
-} NMModemGsmClass;
-
-GType nm_modem_gsm_get_type (void);
-
-NMModem *nm_modem_gsm_new (const char *path,
- const char *data_device,
- guint32 ip_method,
- NMModemState state);
-
-G_END_DECLS
-
-#endif /* NM_MODEM_GSM_H */
diff --git a/src/modem-manager/nm-modem-types.h b/src/modem-manager/nm-modem-types.h
deleted file mode 100644
index 9fc8deed1..000000000
--- a/src/modem-manager/nm-modem-types.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#ifndef NM_MODEM_TYPES_H
-#define NM_MODEM_TYPES_H
-
-#define MM_OLD_DBUS_SERVICE "org.freedesktop.ModemManager"
-#define MM_OLD_DBUS_PATH "/org/freedesktop/ModemManager"
-#define MM_OLD_DBUS_INTERFACE "org.freedesktop.ModemManager"
-#define MM_OLD_DBUS_INTERFACE_MODEM "org.freedesktop.ModemManager.Modem"
-#define MM_OLD_DBUS_INTERFACE_MODEM_SIMPLE "org.freedesktop.ModemManager.Modem.Simple"
-#define MM_OLD_DBUS_INTERFACE_MODEM_CDMA "org.freedesktop.ModemManager.Modem.Cdma"
-#define MM_OLD_DBUS_INTERFACE_MODEM_GSM_CARD "org.freedesktop.ModemManager.Modem.Gsm.Card"
-#define MM_OLD_DBUS_INTERFACE_MODEM_GSM_NETWORK "org.freedesktop.ModemManager.Modem.Gsm.Network"
-
-#define MM_MODEM_TYPE_UNKNOWN 0
-#define MM_MODEM_TYPE_GSM 1
-#define MM_MODEM_TYPE_CDMA 2
-
-/* Errors */
-
-#define MM_SERIAL_OPEN_FAILED MM_OLD_DBUS_INTERFACE_MODEM ".SerialOpenFailed"
-#define MM_SERIAL_SEND_FAILED MM_OLD_DBUS_INTERFACE_MODEM ".SerialSendFailed"
-#define MM_SERIAL_RESPONSE_TIMEOUT MM_OLD_DBUS_INTERFACE_MODEM ".SerialResponseTimeout"
-
-#define MM_MODEM_ERROR_GENERAL MM_OLD_DBUS_INTERFACE_MODEM ".General"
-#define MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED MM_OLD_DBUS_INTERFACE_MODEM ".OperationNotSupported"
-
-#define MM_MODEM_CONNECT_ERROR_NO_CARRIER MM_OLD_DBUS_INTERFACE_MODEM ".NoCarrier"
-#define MM_MODEM_CONNECT_ERROR_NO_DIALTONE MM_OLD_DBUS_INTERFACE_MODEM ".NoDialtone"
-#define MM_MODEM_CONNECT_ERROR_BUSY MM_OLD_DBUS_INTERFACE_MODEM ".Busy"
-#define MM_MODEM_CONNECT_ERROR_NO_ANSWER MM_OLD_DBUS_INTERFACE_MODEM ".NoAnswer"
-
-#define MM_MODEM_ERROR "org.freedesktop.ModemManager.Modem.Gsm"
-
-#define MM_MODEM_ERROR_PHONE_FAILURE MM_MODEM_ERROR ".PhoneFailure"
-#define MM_MODEM_ERROR_NO_CONNECTION MM_MODEM_ERROR ".NoConnection"
-#define MM_MODEM_ERROR_LINK_RESERVED MM_MODEM_ERROR ".LinkReserved"
-#define MM_MODEM_ERROR_NOT_ALLOWED MM_MODEM_ERROR ".OperationNotAllowed"
-#define MM_MODEM_ERROR_NOT_SUPPORTED MM_MODEM_ERROR ".OperationNotSupported"
-#define MM_MODEM_ERROR_PH_SIM_PIN MM_MODEM_ERROR ".PhSimPinRequired"
-#define MM_MODEM_ERROR_PH_FSIM_PIN MM_MODEM_ERROR ".PhFSimPinRequired"
-#define MM_MODEM_ERROR_PH_FSIM_PUK MM_MODEM_ERROR ".PhFPukRequired"
-#define MM_MODEM_ERROR_SIM_NOT_INSERTED MM_MODEM_ERROR ".SimNotInserted"
-#define MM_MODEM_ERROR_SIM_PIN MM_MODEM_ERROR ".SimPinRequired"
-#define MM_MODEM_ERROR_SIM_PUK MM_MODEM_ERROR ".SimPukRequired"
-#define MM_MODEM_ERROR_SIM_FAILURE MM_MODEM_ERROR ".SimFailure"
-#define MM_MODEM_ERROR_SIM_BUSY MM_MODEM_ERROR ".SimBusy"
-#define MM_MODEM_ERROR_SIM_WRONG MM_MODEM_ERROR ".SimWrong"
-#define MM_MODEM_ERROR_WRONG_PASSWORD MM_MODEM_ERROR ".IncorrectPassword"
-#define MM_MODEM_ERROR_SIM_PIN2 MM_MODEM_ERROR ".SimPin2Required"
-#define MM_MODEM_ERROR_SIM_PUK2 MM_MODEM_ERROR ".SimPuk2Required"
-#define MM_MODEM_ERROR_MEMORY_FULL MM_MODEM_ERROR ".MemoryFull"
-#define MM_MODEM_ERROR_INVALID_INDEX MM_MODEM_ERROR ".InvalidIndex"
-#define MM_MODEM_ERROR_NOT_FOUND MM_MODEM_ERROR ".NotFound"
-#define MM_MODEM_ERROR_MEMORY_FAILURE MM_MODEM_ERROR ".MemoryFailure"
-#define MM_MODEM_ERROR_TEXT_TOO_LONG MM_MODEM_ERROR ".TextTooLong"
-#define MM_MODEM_ERROR_INVALID_CHARS MM_MODEM_ERROR ".InvalidChars"
-#define MM_MODEM_ERROR_DIAL_STRING_TOO_LONG MM_MODEM_ERROR ".DialStringTooLong"
-#define MM_MODEM_ERROR_DIAL_STRING_INVALID MM_MODEM_ERROR ".InvalidDialString"
-#define MM_MODEM_ERROR_NO_NETWORK MM_MODEM_ERROR ".NoNetwork"
-#define MM_MODEM_ERROR_NETWORK_TIMEOUT MM_MODEM_ERROR ".NetworkTimeout"
-#define MM_MODEM_ERROR_NETWORK_NOT_ALLOWED MM_MODEM_ERROR ".NetworkNotAllowed"
-#define MM_MODEM_ERROR_NETWORK_PIN MM_MODEM_ERROR ".NetworkPinRequired"
-#define MM_MODEM_ERROR_NETWORK_PUK MM_MODEM_ERROR ".NetworkPukRequired"
-#define MM_MODEM_ERROR_NETWORK_SUBSET_PIN MM_MODEM_ERROR ".NetworkSubsetPinRequired"
-#define MM_MODEM_ERROR_NETWORK_SUBSET_PUK MM_MODEM_ERROR ".NetworkSubsetPukRequired"
-#define MM_MODEM_ERROR_SERVICE_PIN MM_MODEM_ERROR ".ServicePinRequired"
-#define MM_MODEM_ERROR_SERVICE_PUK MM_MODEM_ERROR ".ServicePukRequired"
-#define MM_MODEM_ERROR_CORP_PIN MM_MODEM_ERROR ".CorporatePinRequired"
-#define MM_MODEM_ERROR_CORP_PUK MM_MODEM_ERROR ".CorporatePukRequired"
-#define MM_MODEM_ERROR_HIDDEN_KEY MM_MODEM_ERROR ".HiddenKeyRequired"
-#define MM_MODEM_ERROR_EAP_NOT_SUPPORTED MM_MODEM_ERROR ".EapMethodNotSupported"
-#define MM_MODEM_ERROR_INCORRECT_PARAMS MM_MODEM_ERROR ".IncorrectParams"
-#define MM_MODEM_ERROR_UNKNOWN MM_MODEM_ERROR ".Unknown"
-#define MM_MODEM_ERROR_GPRS_ILLEGAL_MS MM_MODEM_ERROR ".GprsIllegalMs"
-#define MM_MODEM_ERROR_GPRS_ILLEGAL_ME MM_MODEM_ERROR ".GprsIllegalMe"
-#define MM_MODEM_ERROR_GPRS_SERVICE_NOT_ALLOWED MM_MODEM_ERROR ".GprsServiceNotAllowed"
-#define MM_MODEM_ERROR_GPRS_PLMN_NOT_ALLOWED MM_MODEM_ERROR ".GprsPlmnNotAllowed"
-#define MM_MODEM_ERROR_GPRS_LOCATION_NOT_ALLOWED MM_MODEM_ERROR ".GprsLocationNotAllowed"
-#define MM_MODEM_ERROR_GPRS_ROAMING_NOT_ALLOWED MM_MODEM_ERROR ".GprsRoamingNotAllowed"
-#define MM_MODEM_ERROR_GPRS_OPTION_NOT_SUPPORTED MM_MODEM_ERROR ".GprsOptionNotSupported"
-#define MM_MODEM_ERROR_GPRS_NOT_SUBSCRIBED MM_MODEM_ERROR ".GprsNotSubscribed"
-#define MM_MODEM_ERROR_GPRS_OUT_OF_ORDER MM_MODEM_ERROR ".GprsOutOfOrder"
-#define MM_MODEM_ERROR_GPRS_PDP_AUTH_FAILURE MM_MODEM_ERROR ".GprsPdpAuthFailure"
-#define MM_MODEM_ERROR_GPRS_UNKNOWN MM_MODEM_ERROR ".GprsUnspecified"
-#define MM_MODEM_ERROR_GPRS_INVALID_CLASS MM_MODEM_ERROR ".GprsInvalidClass"
-
-#endif /* NM_MODEM_TYPES_H */
diff --git a/src/nm-access-point-glue.h b/src/nm-access-point-glue.h
new file mode 100644
index 000000000..ad4d59164
--- /dev/null
+++ b/src/nm-access-point-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_access_point_MARSHAL_H__
+#define __dbus_glib_marshal_nm_access_point_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_access_point_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_access_point_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_access_point_object_info = { 1,
+ dbus_glib_nm_access_point_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.AccessPoint\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.AccessPoint\0Flags\0flags\0read\0org.freedesktop.NetworkManager.AccessPoint\0WpaFlags\0wpa_flags\0read\0org.freedesktop.NetworkManager.AccessPoint\0RsnFlags\0rsn_flags\0read\0org.freedesktop.NetworkManager.AccessPoint\0Ssid\0ssid\0read\0org.freedesktop.NetworkManager.AccessPoint\0Frequency\0frequency\0read\0org.freedesktop.NetworkManager.AccessPoint\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.AccessPoint\0Mode\0mode\0read\0org.freedesktop.NetworkManager.AccessPoint\0MaxBitrate\0max_bitrate\0read\0org.freedesktop.NetworkManager.AccessPoint\0Strength\0strength\0read\0\0"
+};
+
diff --git a/src/nm-activation-request.c b/src/nm-activation-request.c
index e17f2a7e8..9f9ee0f94 100644
--- a/src/nm-activation-request.c
+++ b/src/nm-activation-request.c
@@ -27,6 +27,8 @@
#include <unistd.h>
#include <dbus/dbus-glib.h>
+#include "libgsystem.h"
+
#include "nm-activation-request.h"
#include "nm-logging.h"
#include "nm-setting-wireless-security.h"
@@ -49,15 +51,21 @@ typedef struct {
} ShareRule;
typedef struct {
- NMConnection *connection;
- NMDevice *device;
- guint device_state_id;
- char *dbus_sender;
GSList *secrets_calls;
gboolean shared;
GSList *share_rules;
} NMActRequestPrivate;
+enum {
+ PROP_0,
+ PROP_IP4_CONFIG,
+ PROP_DHCP4_CONFIG,
+ PROP_IP6_CONFIG,
+ PROP_DHCP6_CONFIG,
+
+ LAST_PROP
+};
+
/*******************************************************************/
NMConnection *
@@ -68,14 +76,6 @@ nm_act_request_get_connection (NMActRequest *req)
return nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (req));
}
-const char *
-nm_act_request_get_dbus_sender (NMActRequest *req)
-{
- g_return_val_if_fail (NM_IS_ACT_REQUEST (req), NULL);
-
- return NM_ACT_REQUEST_GET_PRIVATE (req)->dbus_sender;
-}
-
/*******************************************************************/
typedef struct {
@@ -115,7 +115,7 @@ nm_act_request_get_secrets (NMActRequest *self,
GetSecretsInfo *info;
guint32 call_id;
NMConnection *connection;
- gboolean user_requested;
+ const char *hints[2] = { hint, NULL };
g_return_val_if_fail (self, 0);
g_return_val_if_fail (NM_IS_ACT_REQUEST (self), 0);
@@ -127,17 +127,15 @@ nm_act_request_get_secrets (NMActRequest *self,
info->callback = callback;
info->callback_data = callback_data;
- user_requested = nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self));
- if (user_requested)
+ if (nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self)))
flags |= NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED;
connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (self));
call_id = nm_settings_connection_get_secrets (NM_SETTINGS_CONNECTION (connection),
- user_requested,
- nm_active_connection_get_user_uid (NM_ACTIVE_CONNECTION (self)),
+ nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (self)),
setting_name,
flags,
- hint,
+ hints,
get_secrets_cb,
info,
NULL);
@@ -154,6 +152,7 @@ void
nm_act_request_cancel_secrets (NMActRequest *self, guint32 call_id)
{
NMActRequestPrivate *priv;
+ NMConnection *connection;
GSList *iter;
g_return_if_fail (self);
@@ -162,6 +161,7 @@ nm_act_request_cancel_secrets (NMActRequest *self, guint32 call_id)
priv = NM_ACT_REQUEST_GET_PRIVATE (self);
+ connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (self));
for (iter = priv->secrets_calls; iter; iter = g_slist_next (iter)) {
GetSecretsInfo *info = iter->data;
@@ -170,7 +170,7 @@ nm_act_request_cancel_secrets (NMActRequest *self, guint32 call_id)
priv->secrets_calls = g_slist_remove_link (priv->secrets_calls, iter);
g_slist_free (iter);
- nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (priv->connection), call_id);
+ nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (connection), call_id);
g_free (info);
break;
}
@@ -226,8 +226,8 @@ nm_act_request_set_shared (NMActRequest *req, gboolean shared)
for (iter = list; iter; iter = g_slist_next (iter)) {
ShareRule *rule = (ShareRule *) iter->data;
char *envp[1] = { NULL };
- char **argv;
- char *cmd;
+ gs_strfreev char **argv = NULL;
+ gs_free char *cmd = NULL;
cmd = g_strdup_printf ("%s --table %s %s %s",
IPTABLES_PATH,
@@ -254,9 +254,6 @@ nm_act_request_set_shared (NMActRequest *req, gboolean shared)
WEXITSTATUS (status));
}
}
- g_free (cmd);
- if (argv)
- g_strfreev (argv);
}
g_slist_free (list);
@@ -295,13 +292,47 @@ nm_act_request_add_share_rule (NMActRequest *req,
/********************************************************************/
static void
-device_state_changed (NMDevice *device, GParamSpec *pspec, NMActRequest *self)
+device_notify (GObject *object,
+ GParamSpec *pspec,
+ gpointer self)
{
- NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (self);
+ g_object_notify (self, pspec->name);
+}
+
+static void
+device_state_changed (NMActiveConnection *active,
+ NMDevice *device,
+ NMDeviceState new_state,
+ NMDeviceState old_state)
+{
+ NMActiveConnectionState cur_ac_state = nm_active_connection_get_state (active);
NMActiveConnectionState ac_state = NM_ACTIVE_CONNECTION_STATE_UNKNOWN;
+ /* Decide which device state changes to handle when this active connection
+ * is not the device's current request. Two cases here: (a) the AC is
+ * pending and not yet active, and (b) the AC was active but the device is
+ * entering DISCONNECTED state (which clears the device's current AC before
+ * emitting the state change signal).
+ */
+ if (NM_ACTIVE_CONNECTION (nm_device_get_act_request (device)) != active) {
+ /* Some other request is activating; this one must be pending */
+ if (new_state >= NM_DEVICE_STATE_PREPARE)
+ return;
+ else if (new_state == NM_DEVICE_STATE_DISCONNECTED) {
+ /* This request hasn't started activating yet; the device is
+ * disconnecting and cleaning up a previous activation request.
+ */
+ if (cur_ac_state < NM_ACTIVE_CONNECTION_STATE_ACTIVATING)
+ return;
+
+ /* Catch device disconnections after this request has been active */
+ }
+
+ /* All states < DISCONNECTED are fatal and handled */
+ }
+
/* Set NMActiveConnection state based on the device's state */
- switch (nm_device_get_state (device)) {
+ switch (new_state) {
case NM_DEVICE_STATE_PREPARE:
case NM_DEVICE_STATE_CONFIG:
case NM_DEVICE_STATE_NEED_AUTH:
@@ -312,6 +343,15 @@ device_state_changed (NMDevice *device, GParamSpec *pspec, NMActRequest *self)
break;
case NM_DEVICE_STATE_ACTIVATED:
ac_state = NM_ACTIVE_CONNECTION_STATE_ACTIVATED;
+
+ g_signal_connect (device, "notify::" NM_DEVICE_IP4_CONFIG,
+ G_CALLBACK (device_notify), active);
+ g_signal_connect (device, "notify::" NM_DEVICE_DHCP4_CONFIG,
+ G_CALLBACK (device_notify), active);
+ g_signal_connect (device, "notify::" NM_DEVICE_IP6_CONFIG,
+ G_CALLBACK (device_notify), active);
+ g_signal_connect (device, "notify::" NM_DEVICE_DHCP6_CONFIG,
+ G_CALLBACK (device_notify), active);
break;
case NM_DEVICE_STATE_DEACTIVATING:
ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATING;
@@ -322,12 +362,7 @@ device_state_changed (NMDevice *device, GParamSpec *pspec, NMActRequest *self)
case NM_DEVICE_STATE_UNAVAILABLE:
ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATED;
- /* No longer need to pay attention to device state */
- if (priv->device && priv->device_state_id) {
- g_signal_handler_disconnect (priv->device, priv->device_state_id);
- priv->device_state_id = 0;
- }
- g_clear_object (&priv->device);
+ g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_notify), active);
break;
default:
break;
@@ -335,11 +370,33 @@ device_state_changed (NMDevice *device, GParamSpec *pspec, NMActRequest *self)
if ( ac_state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
|| ac_state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) {
- nm_active_connection_set_default (NM_ACTIVE_CONNECTION (self), FALSE);
- nm_active_connection_set_default6 (NM_ACTIVE_CONNECTION (self), FALSE);
+ nm_active_connection_set_default (active, FALSE);
+ nm_active_connection_set_default6 (active, FALSE);
}
- nm_active_connection_set_state (NM_ACTIVE_CONNECTION (self), ac_state);
+ nm_active_connection_set_state (active, ac_state);
+}
+
+static void
+master_failed (NMActiveConnection *self)
+{
+ NMDevice *device;
+ NMDeviceState device_state;
+
+ /* If the connection has an active device, fail it */
+ device = nm_active_connection_get_device (self);
+ if (device) {
+ device_state = nm_device_get_state (device);
+ if (nm_device_is_activating (device) || (device_state == NM_DEVICE_STATE_ACTIVATED)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED);
+ return;
+ }
+ }
+
+ /* If no device, or the device wasn't active, just move to deactivated state */
+ nm_active_connection_set_state (self, NM_ACTIVE_CONNECTION_STATE_DEACTIVATED);
}
/********************************************************************/
@@ -350,52 +407,31 @@ device_state_changed (NMDevice *device, GParamSpec *pspec, NMActRequest *self)
* @connection: the connection to activate @device with
* @specific_object: the object path of the specific object (ie, WiFi access point,
* etc) that will be used to activate @connection and @device
- * @user_requested: pass %TRUE if the activation was requested via D-Bus,
- * otherwise %FALSE if requested internally by NM (ie, autoconnect)
- * @user_uid: if @user_requested is %TRUE, the Unix UID of the user that requested
- * @dbus_sender: if @user_requested is %TRUE, the D-BUS sender that requested
- * the activation
- * @assumed: pass %TRUE if the activation should "assume" (ie, taking over) an
- * existing connection made before this instance of NM started
- * @device: the device/interface to configure according to @connection
- * @master: if the activation depends on another device (ie, bond or bridge
- * master to which this device will be enslaved) pass the #NMDevice that this
- * activation request be enslaved to
+ * @subject: the #NMAuthSubject representing the requestor of the activation
+ * @device: the device/interface to configure according to @connection; or %NULL
+ * if the connection describes a software device which will be created during
+ * connection activation
*
- * Begins activation of @device using the given @connection and other details.
+ * Creates a new device-based activation request.
*
* Returns: the new activation request on success, %NULL on error.
*/
NMActRequest *
nm_act_request_new (NMConnection *connection,
const char *specific_object,
- gboolean user_requested,
- gulong user_uid,
- const char *dbus_sender,
- gboolean assumed,
- NMDevice *device,
- NMDevice *master)
+ NMAuthSubject *subject,
+ NMDevice *device)
{
- GObject *object;
-
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
- g_return_val_if_fail (NM_DEVICE (device), NULL);
-
- object = g_object_new (NM_TYPE_ACT_REQUEST,
- NM_ACTIVE_CONNECTION_INT_CONNECTION, connection,
- NM_ACTIVE_CONNECTION_INT_DEVICE, device,
- NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, specific_object,
- NM_ACTIVE_CONNECTION_INT_USER_REQUESTED, user_requested,
- NM_ACTIVE_CONNECTION_INT_USER_UID, user_uid,
- NM_ACTIVE_CONNECTION_INT_ASSUMED, assumed,
- NM_ACTIVE_CONNECTION_INT_MASTER, master,
- NULL);
- if (object) {
- nm_active_connection_export (NM_ACTIVE_CONNECTION (object));
- NM_ACT_REQUEST_GET_PRIVATE (object)->dbus_sender = g_strdup (dbus_sender);
- }
-
- return (NMActRequest *) object;
+ g_return_val_if_fail (!device || NM_IS_DEVICE (device), NULL);
+ g_return_val_if_fail (NM_IS_AUTH_SUBJECT (subject), NULL);
+
+ return (NMActRequest *) g_object_new (NM_TYPE_ACT_REQUEST,
+ NM_ACTIVE_CONNECTION_INT_CONNECTION, connection,
+ NM_ACTIVE_CONNECTION_INT_DEVICE, device,
+ NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, specific_object,
+ NM_ACTIVE_CONNECTION_INT_SUBJECT, subject,
+ NULL);
}
static void
@@ -404,38 +440,12 @@ nm_act_request_init (NMActRequest *req)
}
static void
-constructed (GObject *object)
-{
- NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (object);
- NMConnection *connection;
- NMDevice *device;
-
- G_OBJECT_CLASS (nm_act_request_parent_class)->constructed (object);
-
- connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (object));
- priv->connection = g_object_ref (connection);
-
- device = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (object));
- if (device) {
- priv->device = g_object_ref (device);
- priv->device_state_id = g_signal_connect (priv->device,
- "notify::" NM_DEVICE_STATE,
- G_CALLBACK (device_state_changed),
- NM_ACT_REQUEST (object));
- }
-}
-
-static void
dispose (GObject *object)
{
NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (object);
+ NMConnection *connection;
GSList *iter;
- if (priv->device && priv->device_state_id) {
- g_signal_handler_disconnect (priv->device, priv->device_state_id);
- priv->device_state_id = 0;
- }
-
/* Clear any share rules */
if (priv->share_rules) {
nm_act_request_set_shared (NM_ACT_REQUEST (object), FALSE);
@@ -443,34 +453,72 @@ dispose (GObject *object)
}
/* Kill any in-progress secrets requests */
- for (iter = priv->secrets_calls; iter; iter = g_slist_next (iter)) {
+ connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (object));
+ for (iter = priv->secrets_calls; connection && iter; iter = g_slist_next (iter)) {
GetSecretsInfo *info = iter->data;
- g_assert (priv->connection);
- nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (priv->connection), info->call_id);
+ nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (connection), info->call_id);
g_free (info);
}
g_slist_free (priv->secrets_calls);
priv->secrets_calls = NULL;
- g_free (priv->dbus_sender);
- priv->dbus_sender = NULL;
+ G_OBJECT_CLASS (nm_act_request_parent_class)->dispose (object);
+}
- g_clear_object (&priv->device);
- g_clear_object (&priv->connection);
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMDevice *device;
- G_OBJECT_CLASS (nm_act_request_parent_class)->dispose (object);
+ device = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (object));
+ if (!device) {
+ g_value_set_boxed (value, "/");
+ return;
+ }
+
+ switch (prop_id) {
+ case PROP_IP4_CONFIG:
+ g_object_get_property (G_OBJECT (device), NM_DEVICE_IP4_CONFIG, value);
+ break;
+ case PROP_DHCP4_CONFIG:
+ g_object_get_property (G_OBJECT (device), NM_DEVICE_DHCP4_CONFIG, value);
+ break;
+ case PROP_IP6_CONFIG:
+ g_object_get_property (G_OBJECT (device), NM_DEVICE_IP6_CONFIG, value);
+ break;
+ case PROP_DHCP6_CONFIG:
+ g_object_get_property (G_OBJECT (device), NM_DEVICE_DHCP6_CONFIG, value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
static void
nm_act_request_class_init (NMActRequestClass *req_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (req_class);
+ NMActiveConnectionClass *active_class = NM_ACTIVE_CONNECTION_CLASS (req_class);
g_type_class_add_private (req_class, sizeof (NMActRequestPrivate));
/* virtual methods */
- object_class->constructed = constructed;
object_class->dispose = dispose;
+ object_class->get_property = get_property;
+ active_class->master_failed = master_failed;
+ active_class->device_state_changed = device_state_changed;
+
+ /* properties */
+ g_object_class_override_property (object_class, PROP_IP4_CONFIG,
+ NM_ACTIVE_CONNECTION_IP4_CONFIG);
+ g_object_class_override_property (object_class, PROP_DHCP4_CONFIG,
+ NM_ACTIVE_CONNECTION_DHCP4_CONFIG);
+ g_object_class_override_property (object_class, PROP_IP6_CONFIG,
+ NM_ACTIVE_CONNECTION_IP6_CONFIG);
+ g_object_class_override_property (object_class, PROP_DHCP6_CONFIG,
+ NM_ACTIVE_CONNECTION_DHCP6_CONFIG);
}
diff --git a/src/nm-activation-request.h b/src/nm-activation-request.h
index 159710949..87ea41f91 100644
--- a/src/nm-activation-request.h
+++ b/src/nm-activation-request.h
@@ -42,27 +42,17 @@ typedef struct {
typedef struct {
NMActiveConnectionClass parent;
- /* Signals */
- void (*properties_changed) (NMActRequest *req, GHashTable *properties);
} NMActRequestClass;
GType nm_act_request_get_type (void);
NMActRequest *nm_act_request_new (NMConnection *connection,
const char *specific_object,
- gboolean user_requested,
- gulong user_uid,
- const char *dbus_sender,
- gboolean assumed,
- NMDevice *device,
- NMDevice *master);
+ NMAuthSubject *subject,
+ NMDevice *device);
NMConnection *nm_act_request_get_connection (NMActRequest *req);
-gulong nm_act_request_get_user_uid (NMActRequest *req);
-
-const char *nm_act_request_get_dbus_sender (NMActRequest *req);
-
gboolean nm_act_request_get_shared (NMActRequest *req);
void nm_act_request_set_shared (NMActRequest *req, gboolean shared);
diff --git a/src/nm-active-connection-glue.h b/src/nm-active-connection-glue.h
new file mode 100644
index 000000000..9076e1861
--- /dev/null
+++ b/src/nm-active-connection-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_active_connection_MARSHAL_H__
+#define __dbus_glib_marshal_nm_active_connection_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_active_connection_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_active_connection_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_active_connection_object_info = { 1,
+ dbus_glib_nm_active_connection_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Connection.Active\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Connection.Active\0Connection\0connection\0read\0org.freedesktop.NetworkManager.Connection.Active\0SpecificObject\0specific_object\0read\0org.freedesktop.NetworkManager.Connection.Active\0Id\0id\0read\0org.freedesktop.NetworkManager.Connection.Active\0Uuid\0uuid\0read\0org.freedesktop.NetworkManager.Connection.Active\0Type\0type\0read\0org.freedesktop.NetworkManager.Connection.Active\0Devices\0devices\0read\0org.freedesktop.NetworkManager.Connection.Active\0State\0state\0read\0org.freedesktop.NetworkManager.Connection.Active\0Default\0default\0read\0org.freedesktop.NetworkManager.Connection.Active\0Ip4Config\0ip4_config\0read\0org.freedesktop.NetworkManager.Connection.Active\0Dhcp4Config\0dhcp4_config\0read\0org.freedesktop.NetworkManager.Connection.Active\0Default6\0default6\0read\0org.freedesktop.NetworkManager.Connection.Active\0Ip6Config\0ip6_config\0read\0org.freedesktop.NetworkManager.Connection.Active\0Dhcp6Config\0dhcp6_config\0read\0org.freedesktop.NetworkManager.Connection.Active\0Vpn\0vpn\0read\0org.freedesktop.NetworkManager.Connection.Active\0Master\0master\0read\0\0"
+};
+
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c
index 6e3a5da63..172aa6141 100644
--- a/src/nm-active-connection.c
+++ b/src/nm-active-connection.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2012 Red Hat, Inc.
+ * Copyright (C) 2008 - 2014 Red Hat, Inc.
*/
#include <glib.h>
@@ -25,9 +25,10 @@
#include "nm-logging.h"
#include "nm-dbus-glib-types.h"
#include "nm-dbus-manager.h"
-#include "nm-properties-changed-signal.h"
#include "nm-device.h"
#include "nm-settings-connection.h"
+#include "nm-manager-auth.h"
+#include "NetworkManagerUtils.h"
#include "nm-active-connection-glue.h"
@@ -44,47 +45,76 @@ typedef struct {
char *specific_object;
NMDevice *device;
+ char *pending_activation_id;
+
gboolean is_default;
gboolean is_default6;
NMActiveConnectionState state;
gboolean vpn;
- gboolean user_requested;
- gulong user_uid;
+ NMAuthSubject *subject;
+ NMActiveConnection *master;
+ gboolean master_ready;
+
gboolean assumed;
- NMDevice *master;
+
+ NMAuthChain *chain;
+ const char *wifi_shared_permission;
+ NMActiveConnectionAuthResultFunc result_func;
+ gpointer user_data1;
+ gpointer user_data2;
} NMActiveConnectionPrivate;
enum {
PROP_0,
PROP_CONNECTION,
+ PROP_ID,
PROP_UUID,
+ PROP_TYPE,
PROP_SPECIFIC_OBJECT,
PROP_DEVICES,
PROP_STATE,
PROP_DEFAULT,
+ PROP_IP4_CONFIG,
+ PROP_DHCP4_CONFIG,
PROP_DEFAULT6,
+ PROP_IP6_CONFIG,
+ PROP_DHCP6_CONFIG,
PROP_VPN,
PROP_MASTER,
PROP_INT_CONNECTION,
PROP_INT_DEVICE,
- PROP_INT_USER_REQUESTED,
- PROP_INT_USER_UID,
- PROP_INT_ASSUMED,
+ PROP_INT_SUBJECT,
PROP_INT_MASTER,
+ PROP_INT_MASTER_READY,
LAST_PROP
};
-enum {
- PROPERTIES_CHANGED,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
+static void check_master_ready (NMActiveConnection *self);
+static void _device_cleanup (NMActiveConnection *self);
/****************************************************************/
+static const char *
+state_to_string (NMActiveConnectionState state)
+{
+ switch (state) {
+ case NM_ACTIVE_CONNECTION_STATE_UNKNOWN:
+ return "unknown";
+ case NM_ACTIVE_CONNECTION_STATE_ACTIVATING:
+ return "activating";
+ case NM_ACTIVE_CONNECTION_STATE_ACTIVATED:
+ return "activated";
+ case NM_ACTIVE_CONNECTION_STATE_DEACTIVATING:
+ return "deactivating";
+ case NM_ACTIVE_CONNECTION_STATE_DEACTIVATED:
+ return "deactivated";
+ }
+ return "(none)";
+}
+
NMActiveConnectionState
nm_active_connection_get_state (NMActiveConnection *self)
{
@@ -109,33 +139,79 @@ nm_active_connection_set_state (NMActiveConnection *self,
priv->state = new_state;
g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_STATE);
+ check_master_ready (self);
+
if ( new_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED
|| old_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (priv->connection),
(guint64) time (NULL), TRUE);
}
+ if (priv->device) {
+ if ( old_state < NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ && new_state >= NM_ACTIVE_CONNECTION_STATE_ACTIVATED &&
+ priv->pending_activation_id)
+ {
+ nm_device_remove_pending_action (priv->device, priv->pending_activation_id, TRUE);
+ g_clear_pointer (&priv->pending_activation_id, g_free);
+ }
+ }
+
+ if ( new_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ || old_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP4_CONFIG);
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DHCP4_CONFIG);
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP6_CONFIG);
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DHCP6_CONFIG);
+ }
+
if (priv->state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) {
- /* Device is no longer relevant when deactivated */
- g_clear_object (&priv->device);
+ /* Device is no longer relevant when deactivated. So remove it and
+ * emit property change notification so clients re-read the value,
+ * which will be NULL due to conditions in get_property().
+ */
+ _device_cleanup (self);
g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DEVICES);
}
}
const char *
-nm_active_connection_get_name (NMActiveConnection *self)
+nm_active_connection_get_id (NMActiveConnection *self)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL);
return nm_connection_get_id (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->connection);
}
+const char *
+nm_active_connection_get_uuid (NMActiveConnection *self)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL);
+
+ return nm_connection_get_uuid (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->connection);
+}
+
NMConnection *
nm_active_connection_get_connection (NMActiveConnection *self)
{
return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->connection;
}
+void
+nm_active_connection_set_connection (NMActiveConnection *self,
+ NMConnection *connection)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+
+ /* Can't change connection after the ActiveConnection is exported over D-Bus */
+ g_return_if_fail (priv->path == NULL);
+ g_return_if_fail (priv->connection == NULL || !NM_IS_SETTINGS_CONNECTION (priv->connection));
+
+ if (priv->connection)
+ g_object_unref (priv->connection);
+ priv->connection = g_object_ref (connection);
+}
+
const char *
nm_active_connection_get_path (NMActiveConnection *self)
{
@@ -154,6 +230,11 @@ nm_active_connection_set_specific_object (NMActiveConnection *self,
{
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+ /* Nothing that calls this function should be using paths from D-Bus,
+ * where NM uses "/" to mean NULL.
+ */
+ g_assert (g_strcmp0 (specific_object, "/") != 0);
+
if (g_strcmp0 (priv->specific_object, specific_object) == 0)
return;
@@ -212,14 +293,20 @@ void
nm_active_connection_export (NMActiveConnection *self)
{
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
- NMDBusManager *dbus_mgr;
static guint32 counter = 0;
+ g_assert (priv->device || priv->vpn);
+
priv->path = g_strdup_printf (NM_DBUS_PATH "/ActiveConnection/%d", counter++);
- dbus_mgr = nm_dbus_manager_get ();
- dbus_g_connection_register_g_object (nm_dbus_manager_get_connection (dbus_mgr),
- priv->path, G_OBJECT (self));
- g_object_unref (dbus_mgr);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->path, self);
+}
+
+NMAuthSubject *
+nm_active_connection_get_subject (NMActiveConnection *self)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->subject;
}
gboolean
@@ -227,34 +314,98 @@ nm_active_connection_get_user_requested (NMActiveConnection *self)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE);
- return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->user_requested;
+ return !nm_auth_subject_get_internal (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->subject);
}
-gulong
-nm_active_connection_get_user_uid (NMActiveConnection *self)
+NMDevice *
+nm_active_connection_get_device (NMActiveConnection *self)
{
- g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), G_MAXULONG);
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL);
- return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->user_uid;
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->device;
}
-gboolean
-nm_active_connection_get_assumed (NMActiveConnection *self)
+static void
+device_state_changed (NMDevice *device,
+ NMDeviceState new_state,
+ NMDeviceState old_state,
+ NMDeviceStateReason reason,
+ gpointer user_data)
{
- g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE);
+ NMActiveConnection *self = NM_ACTIVE_CONNECTION (user_data);
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
- return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->assumed;
+ /* When already deactivated or before activation, device state changes are useless */
+ if (priv->state >= NM_ACTIVE_CONNECTION_STATE_DEACTIVATED)
+ return;
+ if (old_state < NM_DEVICE_STATE_DISCONNECTED)
+ return;
+
+ /* Let subclasses handle the state change */
+ if (NM_ACTIVE_CONNECTION_GET_CLASS (self)->device_state_changed)
+ NM_ACTIVE_CONNECTION_GET_CLASS (self)->device_state_changed (self, device, new_state, old_state);
}
-NMDevice *
-nm_active_connection_get_device (NMActiveConnection *self)
+static void
+device_master_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
{
- g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL);
+ NMDevice *device = NM_DEVICE (object);
+ NMActiveConnection *self = NM_ACTIVE_CONNECTION (user_data);
+ NMActiveConnection *master;
+ NMActiveConnectionState master_state;
- return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->device;
+ if (NM_ACTIVE_CONNECTION (nm_device_get_act_request (device)) != self)
+ return;
+ if (!nm_device_get_master (device))
+ return;
+ g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_master_changed), self);
+
+ master = nm_active_connection_get_master (self);
+ g_assert (master);
+
+ master_state = nm_active_connection_get_state (master);
+ if (master_state >= NM_ACTIVE_CONNECTION_STATE_DEACTIVATING) {
+ /* Master failed before attaching the slave */
+ if (NM_ACTIVE_CONNECTION_GET_CLASS (self)->master_failed)
+ NM_ACTIVE_CONNECTION_GET_CLASS (self)->master_failed (self);
+ }
}
-NMDevice *
+gboolean
+nm_active_connection_set_device (NMActiveConnection *self, NMDevice *device)
+{
+ NMActiveConnectionPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE);
+ g_return_val_if_fail (!device || NM_IS_DEVICE (device), FALSE);
+
+ priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+
+ if (device) {
+ g_return_val_if_fail (priv->device == NULL, FALSE);
+
+ /* Device obviously can't be its own master */
+ g_return_val_if_fail (!priv->master || device != nm_active_connection_get_device (priv->master), FALSE);
+
+ priv->device = g_object_ref (device);
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_INT_DEVICE);
+
+ g_signal_connect (device, "state-changed",
+ G_CALLBACK (device_state_changed), self);
+ g_signal_connect (device, "notify::master",
+ G_CALLBACK (device_master_changed), self);
+
+ if (!priv->assumed) {
+ priv->pending_activation_id = g_strdup_printf ("activation::%p", (void *)self);
+ nm_device_add_pending_action (device, priv->pending_activation_id, TRUE);
+ }
+ }
+ return TRUE;
+}
+
+NMActiveConnection *
nm_active_connection_get_master (NMActiveConnection *self)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL);
@@ -262,6 +413,247 @@ nm_active_connection_get_master (NMActiveConnection *self)
return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->master;
}
+/**
+ * nm_active_connection_get_master_ready:
+ * @self: the #NMActiveConnection
+ *
+ * Returns: %TRUE if the connection has a master connection, and that
+ * master connection is ready to accept slaves. Otherwise %FALSE.
+ */
+gboolean
+nm_active_connection_get_master_ready (NMActiveConnection *self)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->master_ready;
+}
+
+static void
+check_master_ready (NMActiveConnection *self)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+ NMActiveConnectionState master_state = NM_ACTIVE_CONNECTION_STATE_UNKNOWN;
+
+ if (priv->state != NM_ACTIVE_CONNECTION_STATE_ACTIVATING) {
+ nm_log_dbg (LOGD_DEVICE, "(%p): not signalling master-ready (not activating)", self);
+ return;
+ }
+ if (!priv->master) {
+ nm_log_dbg (LOGD_DEVICE, "(%p): not signalling master-ready (no master)", self);
+ return;
+ }
+ if (priv->master_ready) {
+ nm_log_dbg (LOGD_DEVICE, "(%p): not signalling master-ready (already signaled)", self);
+ return;
+ }
+
+ /* ActiveConnetions don't enter the ACTIVATING state until they have a
+ * NMDevice in PREPARE or higher states, so the master active connection's
+ * device will be ready to accept slaves when the master is in ACTIVATING
+ * or higher states.
+ */
+ master_state = nm_active_connection_get_state (priv->master);
+ nm_log_dbg (LOGD_DEVICE, "(%p): master ActiveConnection [%p] state now '%s' (%d)",
+ self, priv->master, state_to_string (master_state), master_state);
+
+ if ( master_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING
+ || master_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ nm_log_dbg (LOGD_DEVICE, "(%p): signalling master-ready", self);
+
+ priv->master_ready = TRUE;
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_INT_MASTER_READY);
+
+ /* Also notify clients to recheck the exported 'master' property to
+ * ensure that if the master connection was created without a device
+ * that we notify clients when the master device is known.
+ */
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_MASTER);
+ }
+}
+
+static void
+master_state_cb (NMActiveConnection *master,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMActiveConnection *self = NM_ACTIVE_CONNECTION (user_data);
+ NMActiveConnectionState master_state = nm_active_connection_get_state (master);
+
+ check_master_ready (self);
+
+ nm_log_dbg (LOGD_DEVICE, "(%p): master ActiveConnection [%p] state now '%s' (%d)",
+ self, master, state_to_string (master_state), master_state);
+
+ if (master_state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATING &&
+ nm_active_connection_get_device (master) == NULL) {
+ /* Master failed without ever creating its device */
+ if (NM_ACTIVE_CONNECTION_GET_CLASS (self)->master_failed)
+ NM_ACTIVE_CONNECTION_GET_CLASS (self)->master_failed (self);
+ }
+}
+
+/**
+ * nm_active_connection_set_master:
+ * @self: the #NMActiveConnection
+ * @master: if the activation depends on another device (ie, bond or bridge
+ * master to which this device will be enslaved) pass the #NMActiveConnection
+ * that this activation request is a child of
+ *
+ * Sets the master active connection of @self.
+ */
+void
+nm_active_connection_set_master (NMActiveConnection *self, NMActiveConnection *master)
+{
+ NMActiveConnectionPrivate *priv;
+
+ g_return_if_fail (NM_IS_ACTIVE_CONNECTION (self));
+ g_return_if_fail (NM_IS_ACTIVE_CONNECTION (master));
+
+ priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+
+ /* Master is write-once, and must be set before exporting the object */
+ g_return_if_fail (priv->master == NULL);
+ g_return_if_fail (priv->path == NULL);
+ if (priv->device) {
+ /* Note, the master ActiveConnection may not yet have a device */
+ g_return_if_fail (priv->device != nm_active_connection_get_device (master));
+ }
+
+ nm_log_dbg (LOGD_DEVICE, "(%p): master ActiveConnection is [%p] %s",
+ self, master, nm_active_connection_get_id (master));
+
+ priv->master = g_object_ref (master);
+ g_signal_connect (priv->master,
+ "notify::" NM_ACTIVE_CONNECTION_STATE,
+ (GCallback) master_state_cb,
+ self);
+
+ check_master_ready (self);
+}
+
+void
+nm_active_connection_set_assumed (NMActiveConnection *self, gboolean assumed)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+
+ g_return_if_fail (priv->assumed == FALSE);
+ priv->assumed = assumed;
+
+ if (priv->pending_activation_id) {
+ nm_device_remove_pending_action (priv->device, priv->pending_activation_id, TRUE);
+ g_clear_pointer (&priv->pending_activation_id, g_free);
+ }
+}
+
+gboolean
+nm_active_connection_get_assumed (NMActiveConnection *self)
+{
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->assumed;
+}
+
+/****************************************************************/
+
+static void
+auth_done (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *unused,
+ gpointer user_data)
+{
+ NMActiveConnection *self = NM_ACTIVE_CONNECTION (user_data);
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+ NMAuthCallResult result;
+
+ g_assert (priv->chain == chain);
+ g_assert (priv->result_func != NULL);
+
+ /* Must stay alive over the callback */
+ g_object_ref (self);
+
+ if (error) {
+ priv->result_func (self, FALSE, error->message, priv->user_data1, priv->user_data2);
+ goto done;
+ }
+
+ /* Caller has had a chance to obtain authorization, so we only need to
+ * check for 'yes' here.
+ */
+ result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL);
+ if (result != NM_AUTH_CALL_RESULT_YES) {
+ priv->result_func (self,
+ FALSE,
+ "Not authorized to control networking.",
+ priv->user_data1,
+ priv->user_data2);
+ goto done;
+ }
+
+ if (priv->wifi_shared_permission) {
+ result = nm_auth_chain_get_result (chain, priv->wifi_shared_permission);
+ if (result != NM_AUTH_CALL_RESULT_YES) {
+ priv->result_func (self,
+ FALSE,
+ "Not authorized to share connections via wifi.",
+ priv->user_data1,
+ priv->user_data2);
+ goto done;
+ }
+ }
+
+ /* Otherwise authorized and available to activate */
+ priv->result_func (self, TRUE, NULL, priv->user_data1, priv->user_data2);
+
+done:
+ nm_auth_chain_unref (chain);
+ priv->chain = NULL;
+ priv->result_func = NULL;
+ priv->user_data1 = NULL;
+ priv->user_data2 = NULL;
+
+ g_object_unref (self);
+}
+
+/**
+ * nm_active_connection_authorize:
+ * @self: the #NMActiveConnection
+ * @result_func: function to be called on success or error
+ * @user_data1: pointer passed to @result_func
+ * @user_data2: additional pointer passed to @result_func
+ *
+ * Checks whether the subject that initiated the active connection (read from
+ * the #NMActiveConnection::subject property) is authorized to complete this
+ * activation request.
+ */
+void
+nm_active_connection_authorize (NMActiveConnection *self,
+ NMActiveConnectionAuthResultFunc result_func,
+ gpointer user_data1,
+ gpointer user_data2)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+ const char *wifi_permission = NULL;
+
+ g_return_if_fail (result_func != NULL);
+ g_return_if_fail (priv->chain == NULL);
+
+ priv->chain = nm_auth_chain_new_subject (priv->subject, NULL, auth_done, self);
+ g_assert (priv->chain);
+
+ /* Check that the subject is allowed to use networking at all */
+ nm_auth_chain_add_call (priv->chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
+
+ /* Shared wifi connections require special permissions too */
+ wifi_permission = nm_utils_get_shared_wifi_permission (priv->connection);
+ if (wifi_permission) {
+ priv->wifi_shared_permission = wifi_permission;
+ nm_auth_chain_add_call (priv->chain, wifi_permission, TRUE);
+ }
+
+ /* Wait for authorization */
+ priv->result_func = result_func;
+ priv->user_data1 = user_data1;
+ priv->user_data2 = user_data2;
+}
+
/****************************************************************/
static void
@@ -270,10 +662,18 @@ nm_active_connection_init (NMActiveConnection *self)
}
static void
+constructed (GObject *object)
+{
+ G_OBJECT_CLASS (nm_active_connection_parent_class)->constructed (object);
+ g_assert (NM_ACTIVE_CONNECTION_GET_PRIVATE (object)->subject);
+}
+
+static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
+ const char *tmp;
switch (prop_id) {
case PROP_INT_CONNECTION:
@@ -281,28 +681,19 @@ set_property (GObject *object, guint prop_id,
priv->connection = g_value_dup_object (value);
break;
case PROP_INT_DEVICE:
- g_warn_if_fail (priv->device == NULL);
- priv->device = g_value_dup_object (value);
- if (priv->device)
- g_warn_if_fail (priv->device != priv->master);
+ nm_active_connection_set_device (NM_ACTIVE_CONNECTION (object), g_value_get_object (value));
break;
- case PROP_INT_USER_REQUESTED:
- priv->user_requested = g_value_get_boolean (value);
- break;
- case PROP_INT_USER_UID:
- priv->user_uid = g_value_get_ulong (value);
- break;
- case PROP_INT_ASSUMED:
- priv->assumed = g_value_get_boolean (value);
+ case PROP_INT_SUBJECT:
+ priv->subject = g_value_dup_object (value);
break;
case PROP_INT_MASTER:
- g_warn_if_fail (priv->master == NULL);
- priv->master = g_value_dup_object (value);
- if (priv->master)
- g_warn_if_fail (priv->master != priv->device);
+ nm_active_connection_set_master (NM_ACTIVE_CONNECTION (object), g_value_get_object (value));
break;
case PROP_SPECIFIC_OBJECT:
- priv->specific_object = g_value_dup_boxed (value);
+ tmp = g_value_get_boxed (value);
+ /* NM uses "/" to mean NULL */
+ if (g_strcmp0 (tmp, "/") != 0)
+ priv->specific_object = g_value_dup_boxed (value);
break;
case PROP_DEFAULT:
priv->is_default = g_value_get_boolean (value);
@@ -327,20 +718,27 @@ get_property (GObject *object, guint prop_id,
{
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
GPtrArray *devices;
+ NMDevice *master_device = NULL;
switch (prop_id) {
case PROP_CONNECTION:
g_value_set_boxed (value, nm_connection_get_path (priv->connection));
break;
+ case PROP_ID:
+ g_value_set_string (value, nm_connection_get_id (priv->connection));
+ break;
case PROP_UUID:
g_value_set_string (value, nm_connection_get_uuid (priv->connection));
break;
+ case PROP_TYPE:
+ g_value_set_string (value, nm_connection_get_connection_type (priv->connection));
+ break;
case PROP_SPECIFIC_OBJECT:
g_value_set_boxed (value, priv->specific_object ? priv->specific_object : "/");
break;
case PROP_DEVICES:
devices = g_ptr_array_sized_new (1);
- if (priv->device)
+ if (priv->device && priv->state < NM_ACTIVE_CONNECTION_STATE_DEACTIVATED)
g_ptr_array_add (devices, g_strdup (nm_device_get_path (priv->device)));
g_value_take_boxed (value, devices);
break;
@@ -350,14 +748,35 @@ get_property (GObject *object, guint prop_id,
case PROP_DEFAULT:
g_value_set_boolean (value, priv->is_default);
break;
+ case PROP_IP4_CONFIG:
+ /* The IP and DHCP config properties may be overridden by a subclass */
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_DHCP4_CONFIG:
+ g_value_set_boxed (value, "/");
+ break;
case PROP_DEFAULT6:
g_value_set_boolean (value, priv->is_default6);
break;
+ case PROP_IP6_CONFIG:
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_DHCP6_CONFIG:
+ g_value_set_boxed (value, "/");
+ break;
case PROP_VPN:
g_value_set_boolean (value, priv->vpn);
break;
case PROP_MASTER:
- g_value_set_boxed (value, priv->master ? nm_device_get_path (priv->master) : "/");
+ if (priv->master)
+ master_device = nm_active_connection_get_device (priv->master);
+ g_value_set_boxed (value, master_device ? nm_device_get_path (master_device) : "/");
+ break;
+ case PROP_INT_SUBJECT:
+ g_value_set_object (value, priv->subject);
+ break;
+ case PROP_INT_MASTER_READY:
+ g_value_set_boolean (value, priv->master_ready);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -366,9 +785,33 @@ get_property (GObject *object, guint prop_id,
}
static void
+_device_cleanup (NMActiveConnection *self)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+
+ if (priv->device) {
+ g_signal_handlers_disconnect_by_func (priv->device, G_CALLBACK (device_state_changed), self);
+ g_signal_handlers_disconnect_by_func (priv->device, G_CALLBACK (device_master_changed), self);
+ }
+
+ if (priv->pending_activation_id) {
+ nm_device_remove_pending_action (priv->device, priv->pending_activation_id, TRUE);
+ g_clear_pointer (&priv->pending_activation_id, g_free);
+ }
+
+ g_clear_object (&priv->device);
+}
+
+static void
dispose (GObject *object)
{
- NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
+ NMActiveConnection *self = NM_ACTIVE_CONNECTION (object);
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+
+ if (priv->chain) {
+ nm_auth_chain_unref (priv->chain);
+ priv->chain = NULL;
+ }
g_free (priv->path);
priv->path = NULL;
@@ -376,22 +819,31 @@ dispose (GObject *object)
priv->specific_object = NULL;
g_clear_object (&priv->connection);
- g_clear_object (&priv->device);
+
+ _device_cleanup (self);
+
+ if (priv->master) {
+ g_signal_handlers_disconnect_by_func (priv->master,
+ (GCallback) master_state_cb,
+ self);
+ }
g_clear_object (&priv->master);
+ g_clear_object (&priv->subject);
G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object);
}
static void
-nm_active_connection_class_init (NMActiveConnectionClass *vpn_class)
+nm_active_connection_class_init (NMActiveConnectionClass *ac_class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (vpn_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (ac_class);
- g_type_class_add_private (vpn_class, sizeof (NMActiveConnectionPrivate));
+ g_type_class_add_private (ac_class, sizeof (NMActiveConnectionPrivate));
/* virtual methods */
object_class->get_property = get_property;
object_class->set_property = set_property;
+ object_class->constructed = constructed;
object_class->dispose = dispose;
/* D-Bus exported properties */
@@ -402,6 +854,13 @@ nm_active_connection_class_init (NMActiveConnectionClass *vpn_class)
DBUS_TYPE_G_OBJECT_PATH,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_ID,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_ID,
+ "Connection ID",
+ "Connection ID",
+ NULL,
+ G_PARAM_READABLE));
+
g_object_class_install_property (object_class, PROP_UUID,
g_param_spec_string (NM_ACTIVE_CONNECTION_UUID,
"Connection UUID",
@@ -409,6 +868,13 @@ nm_active_connection_class_init (NMActiveConnectionClass *vpn_class)
NULL,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_TYPE,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE,
+ "Connection Type",
+ "Connection Type",
+ NULL,
+ G_PARAM_READABLE));
+
g_object_class_install_property (object_class, PROP_SPECIFIC_OBJECT,
g_param_spec_boxed (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT,
"Specific object",
@@ -439,6 +905,20 @@ nm_active_connection_class_init (NMActiveConnectionClass *vpn_class)
FALSE,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_IP4_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_IP4_CONFIG,
+ "IP4 Config",
+ "IP4 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class, PROP_DHCP4_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_DHCP4_CONFIG,
+ "DHCP4 Config",
+ "DHCP4 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
g_object_class_install_property (object_class, PROP_DEFAULT6,
g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT6,
"Default6",
@@ -446,6 +926,20 @@ nm_active_connection_class_init (NMActiveConnectionClass *vpn_class)
FALSE,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_IP6_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_IP6_CONFIG,
+ "IP6 Config",
+ "IP6 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class, PROP_DHCP6_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_DHCP6_CONFIG,
+ "DHCP6 Config",
+ "DHCP6 Config",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
g_object_class_install_property (object_class, PROP_VPN,
g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN,
"VPN",
@@ -466,49 +960,37 @@ nm_active_connection_class_init (NMActiveConnectionClass *vpn_class)
"Internal Connection",
"Internal connection",
NM_TYPE_CONNECTION,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_INT_DEVICE,
g_param_spec_object (NM_ACTIVE_CONNECTION_INT_DEVICE,
"Internal device",
"Internal device",
NM_TYPE_DEVICE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
+ G_PARAM_READWRITE));
- g_object_class_install_property (object_class, PROP_INT_USER_REQUESTED,
- g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_USER_REQUESTED,
- "User requested",
- "User requested",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
-
- g_object_class_install_property (object_class, PROP_INT_USER_UID,
- g_param_spec_ulong (NM_ACTIVE_CONNECTION_INT_USER_UID,
- "User UID",
- "User UID (if user requested)",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
-
- g_object_class_install_property (object_class, PROP_INT_ASSUMED,
- g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_ASSUMED,
- "Assumed",
- "Assumed",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
+ g_object_class_install_property (object_class, PROP_INT_SUBJECT,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_INT_SUBJECT,
+ "Subject",
+ "Subject",
+ NM_TYPE_AUTH_SUBJECT,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_INT_MASTER,
g_param_spec_object (NM_ACTIVE_CONNECTION_INT_MASTER,
- "Internal master device",
- "Internal device",
- NM_TYPE_DEVICE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
-
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMActiveConnectionClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (vpn_class),
- &dbus_glib_nm_active_connection_object_info);
+ "Internal master active connection",
+ "Internal active connection",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_INT_MASTER_READY,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_MASTER_READY,
+ "Internal master active connection ready for slaves",
+ "Internal active connection ready",
+ FALSE, G_PARAM_READABLE));
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (ac_class),
+ &dbus_glib_nm_active_connection_object_info);
}
diff --git a/src/nm-active-connection.h b/src/nm-active-connection.h
index 2f17c5834..0d96c8723 100644
--- a/src/nm-active-connection.h
+++ b/src/nm-active-connection.h
@@ -24,6 +24,7 @@
#include <glib-object.h>
#include "nm-types.h"
#include "nm-connection.h"
+#include "nm-auth-subject.h"
#define NM_TYPE_ACTIVE_CONNECTION (nm_active_connection_get_type ())
#define NM_ACTIVE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnection))
@@ -34,23 +35,27 @@
/* D-Bus Exported Properties */
#define NM_ACTIVE_CONNECTION_CONNECTION "connection"
+#define NM_ACTIVE_CONNECTION_ID "id"
#define NM_ACTIVE_CONNECTION_UUID "uuid"
+#define NM_ACTIVE_CONNECTION_TYPE "type"
#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT "specific-object"
#define NM_ACTIVE_CONNECTION_DEVICES "devices"
#define NM_ACTIVE_CONNECTION_STATE "state"
#define NM_ACTIVE_CONNECTION_DEFAULT "default"
+#define NM_ACTIVE_CONNECTION_IP4_CONFIG "ip4-config"
+#define NM_ACTIVE_CONNECTION_DHCP4_CONFIG "dhcp4-config"
#define NM_ACTIVE_CONNECTION_DEFAULT6 "default6"
+#define NM_ACTIVE_CONNECTION_IP6_CONFIG "ip6-config"
+#define NM_ACTIVE_CONNECTION_DHCP6_CONFIG "dhcp6-config"
#define NM_ACTIVE_CONNECTION_VPN "vpn"
#define NM_ACTIVE_CONNECTION_MASTER "master"
-/* Internal non-exported construct-time properties */
+/* Internal non-exported properties */
#define NM_ACTIVE_CONNECTION_INT_CONNECTION "int-connection"
#define NM_ACTIVE_CONNECTION_INT_DEVICE "int-device"
-#define NM_ACTIVE_CONNECTION_INT_USER_REQUESTED "int-user-requested"
-#define NM_ACTIVE_CONNECTION_INT_USER_UID "int-user-uid"
-#define NM_ACTIVE_CONNECTION_INT_ASSUMED "int-assumed"
+#define NM_ACTIVE_CONNECTION_INT_SUBJECT "int-subject"
#define NM_ACTIVE_CONNECTION_INT_MASTER "int-master"
-
+#define NM_ACTIVE_CONNECTION_INT_MASTER_READY "int-master-ready"
typedef struct {
GObject parent;
@@ -59,16 +64,41 @@ typedef struct {
typedef struct {
GObjectClass parent;
- /* Signals */
- void (*properties_changed) (NMActiveConnection *active, GHashTable *properties);
+ /* re-emits device state changes as a convenience for subclasses for
+ * device states >= DISCONNECTED.
+ */
+ void (*device_state_changed) (NMActiveConnection *connection,
+ NMDevice *device,
+ NMDeviceState new_state,
+ NMDeviceState old_state);
+ void (*master_failed) (NMActiveConnection *connection);
} NMActiveConnectionClass;
GType nm_active_connection_get_type (void);
+typedef void (*NMActiveConnectionAuthResultFunc) (NMActiveConnection *self,
+ gboolean success,
+ const char *error_desc,
+ gpointer user_data1,
+ gpointer user_data2);
+
+void nm_active_connection_authorize (NMActiveConnection *self,
+ NMActiveConnectionAuthResultFunc result_func,
+ gpointer user_data1,
+ gpointer user_data2);
+
void nm_active_connection_export (NMActiveConnection *self);
NMConnection *nm_active_connection_get_connection (NMActiveConnection *self);
-const char * nm_active_connection_get_name (NMActiveConnection *self);
+
+void nm_active_connection_set_connection (NMActiveConnection *self,
+ NMConnection *connection);
+
+const char * nm_active_connection_get_id (NMActiveConnection *self);
+
+const char * nm_active_connection_get_uuid (NMActiveConnection *self);
+
+const char * nm_active_connection_get_connection_type (NMActiveConnection *self);
const char * nm_active_connection_get_path (NMActiveConnection *self);
@@ -94,12 +124,22 @@ void nm_active_connection_set_state (NMActiveConnection *self,
NMDevice * nm_active_connection_get_device (NMActiveConnection *self);
+gboolean nm_active_connection_set_device (NMActiveConnection *self, NMDevice *device);
+
+NMAuthSubject *nm_active_connection_get_subject (NMActiveConnection *self);
+
gboolean nm_active_connection_get_user_requested (NMActiveConnection *self);
-gulong nm_active_connection_get_user_uid (NMActiveConnection *self);
+NMActiveConnection *nm_active_connection_get_master (NMActiveConnection *self);
-gboolean nm_active_connection_get_assumed (NMActiveConnection *self);
+gboolean nm_active_connection_get_master_ready (NMActiveConnection *self);
-NMDevice * nm_active_connection_get_master (NMActiveConnection *self);
+void nm_active_connection_set_master (NMActiveConnection *self,
+ NMActiveConnection *master);
+
+void nm_active_connection_set_assumed (NMActiveConnection *self,
+ gboolean assumed);
+
+gboolean nm_active_connection_get_assumed (NMActiveConnection *self);
#endif /* NM_ACTIVE_CONNECTION_H */
diff --git a/src/nm-agent-manager-glue.h b/src/nm-agent-manager-glue.h
new file mode 100644
index 000000000..6e884c8ad
--- /dev/null
+++ b/src/nm-agent-manager-glue.h
@@ -0,0 +1,170 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_agent_manager_MARSHAL_H__
+#define __dbus_glib_marshal_nm_agent_manager_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:POINTER */
+#define dbus_glib_marshal_nm_agent_manager_VOID__POINTER g_cclosure_marshal_VOID__POINTER
+#define dbus_glib_marshal_nm_agent_manager_NONE__POINTER dbus_glib_marshal_nm_agent_manager_VOID__POINTER
+
+/* NONE:STRING,UINT,POINTER */
+extern void dbus_glib_marshal_nm_agent_manager_VOID__STRING_UINT_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_agent_manager_VOID__STRING_UINT_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__STRING_UINT_POINTER) (gpointer data1,
+ gpointer arg_1,
+ guint arg_2,
+ gpointer arg_3,
+ gpointer data2);
+ register GMarshalFunc_VOID__STRING_UINT_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 4);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__STRING_UINT_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_uint (param_values + 2),
+ g_marshal_value_peek_pointer (param_values + 3),
+ data2);
+}
+#define dbus_glib_marshal_nm_agent_manager_NONE__STRING_UINT_POINTER dbus_glib_marshal_nm_agent_manager_VOID__STRING_UINT_POINTER
+
+/* NONE:STRING,POINTER */
+extern void dbus_glib_marshal_nm_agent_manager_VOID__STRING_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_agent_manager_VOID__STRING_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__STRING_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__STRING_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_agent_manager_NONE__STRING_POINTER dbus_glib_marshal_nm_agent_manager_VOID__STRING_POINTER
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_agent_manager_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_agent_manager_methods[] = {
+ { (GCallback) impl_agent_manager_register, dbus_glib_marshal_nm_agent_manager_NONE__STRING_POINTER, 0 },
+ { (GCallback) impl_agent_manager_register_with_capabilities, dbus_glib_marshal_nm_agent_manager_NONE__STRING_UINT_POINTER, 71 },
+ { (GCallback) impl_agent_manager_unregister, dbus_glib_marshal_nm_agent_manager_NONE__POINTER, 175 },
+};
+
+const DBusGObjectInfo dbus_glib_nm_agent_manager_object_info = { 1,
+ dbus_glib_nm_agent_manager_methods,
+ 3,
+"org.freedesktop.NetworkManager.AgentManager\0Register\0A\0identifier\0I\0s\0\0org.freedesktop.NetworkManager.AgentManager\0RegisterWithCapabilities\0A\0identifier\0I\0s\0capabilities\0I\0u\0\0org.freedesktop.NetworkManager.AgentManager\0Unregister\0A\0\0\0",
+"\0",
+"\0"
+};
+
diff --git a/src/nm-auth-subject.c b/src/nm-auth-subject.c
new file mode 100644
index 000000000..e770af49e
--- /dev/null
+++ b/src/nm-auth-subject.c
@@ -0,0 +1,216 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nm-auth-subject
+ * @short_description: Encapsulates authentication information about a requestor
+ *
+ * #NMAuthSubject encpasulates identifying information about an entity that
+ * makes requests, like process identifier and user UID.
+ */
+
+#include <config.h>
+#include <glib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#if WITH_POLKIT
+#include <polkit/polkit.h>
+#endif
+
+#include "nm-auth-subject.h"
+#include "nm-dbus-manager.h"
+
+G_DEFINE_TYPE (NMAuthSubject, nm_auth_subject, G_TYPE_OBJECT)
+
+#define NM_AUTH_SUBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AUTH_SUBJECT, NMAuthSubjectPrivate))
+
+typedef struct {
+ gulong pid;
+ gulong uid;
+ char *dbus_sender;
+
+#if WITH_POLKIT
+ PolkitSubject *pk_subject;
+#endif
+} NMAuthSubjectPrivate;
+
+static NMAuthSubject *
+_new_common (DBusGMethodInvocation *context,
+ DBusConnection *connection,
+ DBusMessage *message,
+ gboolean internal)
+{
+ NMAuthSubject *subject;
+ NMAuthSubjectPrivate *priv;
+ NMDBusManager *dbus_mgr;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (context || (connection && message) || internal, NULL);
+ if (internal)
+ g_return_val_if_fail (context == NULL && connection == NULL && message == NULL, NULL);
+
+ subject = NM_AUTH_SUBJECT (g_object_new (NM_TYPE_AUTH_SUBJECT, NULL));
+ priv = NM_AUTH_SUBJECT_GET_PRIVATE (subject);
+
+ dbus_mgr = nm_dbus_manager_get ();
+
+ if (internal) {
+ priv->uid = 0;
+ priv->pid = 0;
+ return subject;
+ }
+
+ if (context) {
+ success = nm_dbus_manager_get_caller_info (dbus_mgr,
+ context,
+ &priv->dbus_sender,
+ &priv->uid,
+ &priv->pid);
+ } else if (message) {
+ success = nm_dbus_manager_get_caller_info_from_message (dbus_mgr,
+ connection,
+ message,
+ &priv->dbus_sender,
+ &priv->uid,
+ &priv->pid);
+ } else
+ g_assert_not_reached ();
+
+ if (!success) {
+ g_object_unref (subject);
+ return NULL;
+ }
+
+ g_assert (priv->dbus_sender);
+ g_assert_cmpuint (priv->pid, !=, 0);
+
+#if WITH_POLKIT
+ /* FIXME: should we use polkit_unix_session_new() to store the session ID
+ * of a short-lived process, so that the process can exit but we can still
+ * ask that user for authorization?
+ */
+ priv->pk_subject = polkit_unix_process_new_for_owner (priv->pid, 0, priv->uid);
+ if (!priv->pk_subject)
+ return NULL;
+#endif
+
+ return subject;
+}
+
+
+NMAuthSubject *
+nm_auth_subject_new_from_context (DBusGMethodInvocation *context)
+{
+ return _new_common (context, NULL, NULL, FALSE);
+}
+
+NMAuthSubject *
+nm_auth_subject_new_from_message (DBusConnection *connection,
+ DBusMessage *message)
+{
+ return _new_common (NULL, connection, message, FALSE);
+}
+
+/**
+ * nm_auth_subject_new_internal():
+ *
+ * Creates a new auth subject representing the NetworkManager process itself.
+ *
+ * Returns: the new #NMAuthSubject
+ */
+NMAuthSubject *
+nm_auth_subject_new_internal (void)
+{
+ return _new_common (NULL, NULL, NULL, TRUE);
+}
+
+/**************************************************************/
+
+gulong
+nm_auth_subject_get_uid (NMAuthSubject *subject)
+{
+ return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->uid;
+}
+
+gulong
+nm_auth_subject_get_pid (NMAuthSubject *subject)
+{
+ return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->pid;
+}
+
+const char *
+nm_auth_subject_get_dbus_sender (NMAuthSubject *subject)
+{
+ return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->dbus_sender;
+}
+
+gboolean
+nm_auth_subject_get_internal (NMAuthSubject *subject)
+{
+ /* internal requests will have no dbus sender */
+ return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->dbus_sender ? FALSE : TRUE;
+}
+
+#if WITH_POLKIT
+PolkitSubject *
+nm_auth_subject_get_polkit_subject (NMAuthSubject *subject)
+{
+ return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->pk_subject;
+}
+#endif
+
+/******************************************************************/
+
+static void
+nm_auth_subject_init (NMAuthSubject *self)
+{
+ NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (self);
+
+ priv->pid = G_MAXULONG;
+ priv->uid = G_MAXULONG;
+}
+
+static void
+finalize (GObject *object)
+{
+ NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object);
+
+ g_free (priv->dbus_sender);
+
+#if WITH_POLKIT
+ if (priv->pk_subject)
+ g_object_unref (priv->pk_subject);
+#endif
+
+ G_OBJECT_CLASS (nm_auth_subject_parent_class)->finalize (object);
+}
+
+static void
+nm_auth_subject_class_init (NMAuthSubjectClass *config_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (config_class);
+
+ g_type_class_add_private (config_class, sizeof (NMAuthSubjectPrivate));
+
+ /* virtual methods */
+ object_class->finalize = finalize;
+}
diff --git a/src/nm-auth-subject.h b/src/nm-auth-subject.h
new file mode 100644
index 000000000..063598902
--- /dev/null
+++ b/src/nm-auth-subject.h
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_AUTH_SUBJECT_H
+#define NM_AUTH_SUBJECT_H
+
+#include <config.h>
+#include <glib.h>
+#include <glib-object.h>
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+
+#if WITH_POLKIT
+#include <polkit/polkit.h>
+#endif
+
+#define NM_TYPE_AUTH_SUBJECT (nm_auth_subject_get_type ())
+#define NM_AUTH_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_AUTH_SUBJECT, NMAuthSubject))
+#define NM_AUTH_SUBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_AUTH_SUBJECT, NMAuthSubjectClass))
+#define NM_IS_AUTH_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_AUTH_SUBJECT))
+#define NM_IS_AUTH_SUBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_AUTH_SUBJECT))
+#define NM_AUTH_SUBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_AUTH_SUBJECT, NMAuthSubjectClass))
+
+typedef struct {
+ GObject parent;
+} NMAuthSubject;
+
+typedef struct {
+ GObjectClass parent;
+
+} NMAuthSubjectClass;
+
+GType nm_auth_subject_get_type (void);
+
+NMAuthSubject *nm_auth_subject_new_from_context (DBusGMethodInvocation *context);
+
+NMAuthSubject *nm_auth_subject_new_from_message (DBusConnection *connection, DBusMessage *message);
+
+NMAuthSubject *nm_auth_subject_new_internal (void);
+
+gulong nm_auth_subject_get_uid (NMAuthSubject *subject);
+
+gulong nm_auth_subject_get_pid (NMAuthSubject *subject);
+
+const char *nm_auth_subject_get_dbus_sender (NMAuthSubject *subject);
+
+gboolean nm_auth_subject_get_internal (NMAuthSubject *subject);
+
+#if WITH_POLKIT
+PolkitSubject *nm_auth_subject_get_polkit_subject (NMAuthSubject *subject);
+#endif
+
+#endif /* NM_AUTH_SUBJECT_H */
diff --git a/src/nm-call-store.c b/src/nm-call-store.c
deleted file mode 100644
index df400d0ff..000000000
--- a/src/nm-call-store.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2007 Novell, Inc.
- * Copyright (C) 2010 Red Hat, Inc.
- */
-
-#include "nm-call-store.h"
-#include "nm-logging.h"
-
-NMCallStore *
-nm_call_store_new (void)
-{
- return g_hash_table_new_full (NULL, NULL, NULL,
- (GDestroyNotify) g_hash_table_destroy);
-}
-
-static void
-object_destroyed_cb (gpointer data, GObject *object)
-{
- g_hash_table_remove ((NMCallStore *) data, object);
-}
-
-void
-nm_call_store_add (NMCallStore *store,
- GObject *object,
- gpointer *call_id)
-{
- GHashTable *call_ids_hash;
-
- g_return_if_fail (store != NULL);
- g_return_if_fail (object != NULL);
- g_return_if_fail (call_id != NULL);
-
- call_ids_hash = g_hash_table_lookup (store, object);
- if (!call_ids_hash) {
- call_ids_hash = g_hash_table_new (NULL, NULL);
- g_hash_table_insert (store, object, call_ids_hash);
- g_object_weak_ref (object, object_destroyed_cb, store);
- }
-
- g_hash_table_insert (call_ids_hash, call_id, NULL);
-}
-
-void
-nm_call_store_remove (NMCallStore *store,
- GObject *object,
- gpointer call_id)
-{
- GHashTable *call_ids_hash;
-
- g_return_if_fail (store != NULL);
- g_return_if_fail (object != NULL);
- g_return_if_fail (call_id != NULL);
-
- call_ids_hash = g_hash_table_lookup (store, object);
- if (!call_ids_hash) {
- nm_log_warn (LOGD_CORE, "Trying to remove a non-existant call id.");
- return;
- }
-
- if (!g_hash_table_remove (call_ids_hash, call_id))
- nm_log_warn (LOGD_CORE, "Trying to remove a non-existant call id.");
-
- if (g_hash_table_size (call_ids_hash) == 0) {
- g_hash_table_remove (store, object);
- g_object_weak_unref (object, object_destroyed_cb, store);
- }
-}
-
-typedef struct {
- GObject *object;
- gint count;
- NMCallStoreFunc callback;
- gpointer user_data;
-} StoreForeachInfo;
-
-static void
-call_callback (gpointer call_id, gpointer user_data)
-{
- StoreForeachInfo *info = (StoreForeachInfo *) user_data;
-
- if (info->count >= 0) {
- if (info->callback (info->object, call_id, info->user_data))
- info->count++;
- else
- info->count = -1;
- }
-}
-
-static void
-prepend_id (gpointer key, gpointer value, gpointer user_data)
-{
- GSList **list = (GSList **) user_data;
-
- *list = g_slist_prepend (*list, key);
-}
-
-static GSList *
-get_call_ids (GHashTable *hash)
-{
- GSList *ids = NULL;
-
- g_hash_table_foreach (hash, prepend_id, &ids);
-
- return ids;
-}
-
-static void
-call_all_callbacks (gpointer key, gpointer value, gpointer user_data)
-{
- StoreForeachInfo *info = (StoreForeachInfo *) user_data;
- GSList *ids;
-
- info->object = G_OBJECT (key);
-
- /* Create a copy of the hash keys (call_ids) so that the callback is
- free to modify the store */
- ids = get_call_ids ((GHashTable *) value);
- g_slist_foreach (ids, call_callback, info);
- g_slist_free (ids);
-}
-
-static void
-duplicate_hash (gpointer key, gpointer value, gpointer user_data)
-{
- g_hash_table_insert ((GHashTable *) user_data, key, value);
-}
-
-int
-nm_call_store_foreach (NMCallStore *store,
- GObject *object,
- NMCallStoreFunc callback,
- gpointer user_data)
-{
- StoreForeachInfo info;
-
- g_return_val_if_fail (store != NULL, -1);
- g_return_val_if_fail (callback != NULL, -1);
-
- info.object = object;
- info.count = 0;
- info.callback = callback;
- info.user_data = user_data;
-
- if (object) {
- GHashTable *call_ids_hash;
- GSList *ids;
-
- call_ids_hash = g_hash_table_lookup (store, object);
- if (!call_ids_hash) {
- nm_log_warn (LOGD_CORE, "Object not in store");
- return -1;
- }
-
- /* Create a copy of the hash keys (call_ids) so that the callback is
- free to modify the store */
- ids = get_call_ids (call_ids_hash);
- g_slist_foreach (ids, call_callback, &info);
- g_slist_free (ids);
- } else {
- GHashTable *copy;
-
- /* Create a copy of the main store so that callbacks can modify it */
- copy = g_hash_table_new (NULL, NULL);
- g_hash_table_foreach (store, duplicate_hash, copy);
- g_hash_table_foreach (copy, call_all_callbacks, &info);
- g_hash_table_destroy (copy);
- }
-
- return info.count;
-}
-
-static void
-remove_weakref (gpointer key, gpointer value, gpointer user_data)
-{
- g_object_weak_unref (G_OBJECT (key), object_destroyed_cb, user_data);
-}
-
-void
-nm_call_store_clear (NMCallStore *store)
-{
- g_return_if_fail (store);
-
- g_hash_table_foreach (store, remove_weakref, store);
- g_hash_table_remove_all (store);
-}
-
-void
-nm_call_store_destroy (NMCallStore *store)
-{
- g_return_if_fail (store);
-
- g_hash_table_destroy (store);
-}
diff --git a/src/nm-config.c b/src/nm-config.c
deleted file mode 100644
index 6e801d353..000000000
--- a/src/nm-config.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "nm-config.h"
-
-#define NM_DEFAULT_SYSTEM_CONF_FILE NMCONFDIR "/NetworkManager.conf"
-#define NM_OLD_SYSTEM_CONF_FILE NMCONFDIR "/nm-system-settings.conf"
-
-struct NMConfig {
- char *path;
- char **plugins;
- char *dhcp_client;
- char **dns_plugins;
- char *log_level;
- char *log_domains;
- char *connectivity_uri;
- guint connectivity_interval;
- char *connectivity_response;
-};
-
-/************************************************************************/
-
-GQuark
-nm_config_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-config-error");
- return quark;
-}
-
-/************************************************************************/
-
-const char *
-nm_config_get_path (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return config->path;
-}
-
-const char **
-nm_config_get_plugins (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return (const char **) config->plugins;
-}
-
-const char *
-nm_config_get_dhcp_client (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return config->dhcp_client;
-}
-
-const char **
-nm_config_get_dns_plugins (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return (const char **) config->dns_plugins;
-}
-
-const char *
-nm_config_get_log_level (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return config->log_level;
-}
-
-const char *
-nm_config_get_log_domains (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return config->log_domains;
-}
-
-const char *
-nm_config_get_connectivity_uri (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return config->connectivity_uri;
-}
-
-const guint
-nm_config_get_connectivity_interval (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, 0);
-
- return config->connectivity_interval;
-}
-
-const char *
-nm_config_get_connectivity_response (NMConfig *config)
-{
- g_return_val_if_fail (config != NULL, NULL);
-
- return config->connectivity_response;
-}
-
-
-/************************************************************************/
-
-static gboolean
-fill_from_file (NMConfig *config,
- const char *path,
- const char *cli_plugins,
- const char *cli_log_level,
- const char *cli_log_domains,
- const char *cli_connectivity_uri,
- const gint cli_connectivity_interval,
- const char *cli_connectivity_response,
- GError **error)
-{
- GKeyFile *kf;
- gboolean success = FALSE;
-
- if (g_file_test (path, G_FILE_TEST_EXISTS) == FALSE) {
- g_set_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND, "file %s not found", path);
- return FALSE;
- }
-
- kf = g_key_file_new ();
- if (!kf) {
- g_set_error (error, NM_CONFIG_ERROR, NM_CONFIG_ERROR_NO_MEMORY,
- "Not enough memory to load config file %s", path);
- return FALSE;
- }
-
- g_key_file_set_list_separator (kf, ',');
- if (g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, error)) {
- config->path = g_strdup (path);
-
- /* CLI provided options override config file options */
- if (cli_plugins && strlen (cli_plugins))
- config->plugins = g_strsplit_set (cli_plugins, ",", 0);
- else
- config->plugins = g_key_file_get_string_list (kf, "main", "plugins", NULL, NULL);
-
- config->dhcp_client = g_key_file_get_value (kf, "main", "dhcp", NULL);
- config->dns_plugins = g_key_file_get_string_list (kf, "main", "dns", NULL, NULL);
-
- if (cli_log_level && strlen (cli_log_level))
- config->log_level = g_strdup (cli_log_level);
- else
- config->log_level = g_key_file_get_value (kf, "logging", "level", NULL);
-
- if (cli_log_domains && strlen (cli_log_domains))
- config->log_domains = g_strdup (cli_log_domains);
- else
- config->log_domains = g_key_file_get_value (kf, "logging", "domains", NULL);
-
- if (cli_connectivity_uri && strlen (cli_connectivity_uri))
- config->connectivity_uri = g_strdup (cli_connectivity_uri);
- else
- config->connectivity_uri = g_key_file_get_value (kf, "connectivity", "uri", NULL);
-
- if (cli_connectivity_interval >= 0)
- config->connectivity_interval = cli_connectivity_interval;
- else
- config->connectivity_interval = g_key_file_get_integer (kf, "connectivity", "interval", NULL);
-
- if (cli_connectivity_response && strlen (cli_connectivity_response))
- config->connectivity_response = g_strdup (cli_connectivity_response);
- else
- config->connectivity_response = g_key_file_get_value (kf, "connectivity", "response", NULL);
-
- success = TRUE;
- }
-
- g_key_file_free (kf);
- return success;
-}
-
-NMConfig *
-nm_config_new (const char *cli_config_path,
- const char *cli_plugins,
- const char *cli_log_level,
- const char *cli_log_domains,
- const char *cli_connectivity_uri,
- const gint cli_connectivity_interval,
- const char *cli_connectivity_response,
- GError **error)
-{
- NMConfig *config;
- GError *local = NULL;
-
- config = g_malloc0 (sizeof (*config));
-
- if (cli_config_path) {
- /* Bad user-specific config file path is a hard error */
- if (!fill_from_file (config, cli_config_path, cli_plugins, cli_log_level, cli_log_domains,
- cli_connectivity_uri, cli_connectivity_interval, cli_connectivity_response,
- error)) {
- nm_config_free (config);
- return NULL;
- }
- return config;
- }
-
- /* Even though we prefer NetworkManager.conf, we need to check the
- * old nm-system-settings.conf first to preserve compat with older
- * setups. In package managed systems dropping a NetworkManager.conf
- * onto the system would make NM use it instead of nm-system-settings.conf,
- * changing behavior during an upgrade. We don't want that.
- */
-
- /* Try deprecated nm-system-settings.conf first */
- if (fill_from_file (config, NM_OLD_SYSTEM_CONF_FILE, cli_plugins, cli_log_level, cli_log_domains,
- cli_connectivity_uri, cli_connectivity_interval, cli_connectivity_response,
- &local))
- return config;
-
- if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND) == FALSE) {
- fprintf (stderr, "Default config file %s invalid: (%d) %s\n",
- NM_OLD_SYSTEM_CONF_FILE,
- local ? local->code : -1,
- (local && local->message) ? local->message : "unknown");
- }
- g_clear_error (&local);
-
- /* Try the standard config file location next */
- if (fill_from_file (config, NM_DEFAULT_SYSTEM_CONF_FILE, cli_plugins, cli_log_level, cli_log_domains,
- cli_connectivity_uri, cli_connectivity_interval, cli_connectivity_response,
- &local))
- return config;
-
- if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND) == FALSE) {
- fprintf (stderr, "Default config file %s invalid: (%d) %s\n",
- NM_DEFAULT_SYSTEM_CONF_FILE,
- local ? local->code : -1,
- (local && local->message) ? local->message : "unknown");
- g_propagate_error (error, local);
- nm_config_free (config);
- return NULL;
- }
-
- /* If for some reason no config file exists, and NM wasn't given on on
- * the command line, just use the default config file path.
- */
- if (config->path == NULL) {
- config->path = g_strdup (NM_DEFAULT_SYSTEM_CONF_FILE);
- fprintf (stderr, "No config file found or given; using %s\n",
- NM_DEFAULT_SYSTEM_CONF_FILE);
- }
-
- /* ignore error if config file not found */
- g_clear_error (&local);
- return config;
-}
-
-void
-nm_config_free (NMConfig *config)
-{
- g_return_if_fail (config != NULL);
-
- g_free (config->path);
- g_strfreev (config->plugins);
- g_free (config->dhcp_client);
- g_strfreev (config->dns_plugins);
- g_free (config->log_level);
- g_free (config->log_domains);
- g_free (config->connectivity_uri);
- g_free (config->connectivity_response);
- memset (config, 0, sizeof (*config));
- g_free (config);
-}
-
diff --git a/src/nm-config.h b/src/nm-config.h
deleted file mode 100644
index 6c4206c13..000000000
--- a/src/nm-config.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#ifndef NM_CONFIG_H
-#define NM_CONFIG_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-typedef struct NMConfig NMConfig;
-
-typedef enum {
- NM_CONFIG_ERROR_NO_MEMORY = 0, /*< nick=NoMemory >*/
-} NMConfigError;
-
-#define NM_CONFIG_ERROR (nm_config_error_quark ())
-GQuark nm_config_error_quark (void);
-
-
-NMConfig *nm_config_new (const char *cli_config_path,
- const char *cli_plugins,
- const char *cli_log_level,
- const char *cli_log_domains,
- const char *cli_connectivity_check_uri,
- const gint connectivity_check_interval,
- const char *cli_connectivity_check_response,
- GError **error);
-
-const char *nm_config_get_path (NMConfig *config);
-const char **nm_config_get_plugins (NMConfig *config);
-const char *nm_config_get_dhcp_client (NMConfig *config);
-const char **nm_config_get_dns_plugins (NMConfig *config);
-const char *nm_config_get_log_level (NMConfig *config);
-const char *nm_config_get_log_domains (NMConfig *config);
-const char *nm_config_get_connectivity_uri (NMConfig *config);
-const guint nm_config_get_connectivity_interval (NMConfig *config);
-const char *nm_config_get_connectivity_response (NMConfig *config);
-
-void nm_config_free (NMConfig *config);
-
-#endif /* NM_CONFIG_H */
-
diff --git a/src/nm-connection-provider.c b/src/nm-connection-provider.c
index 1c4b9a063..f6ee7454d 100644
--- a/src/nm-connection-provider.c
+++ b/src/nm-connection-provider.c
@@ -14,6 +14,7 @@
*/
#include "nm-connection-provider.h"
+#include "nm-utils.h"
GSList *
nm_connection_provider_get_best_connections (NMConnectionProvider *self,
@@ -40,24 +41,49 @@ nm_connection_provider_get_connections (NMConnectionProvider *self)
return NULL;
}
-gboolean
-nm_connection_provider_has_connections_loaded (NMConnectionProvider *self)
-{
- g_return_val_if_fail (NM_IS_CONNECTION_PROVIDER (self), FALSE);
-
- g_assert (NM_CONNECTION_PROVIDER_GET_INTERFACE (self)->has_connections_loaded);
- return NM_CONNECTION_PROVIDER_GET_INTERFACE (self)->has_connections_loaded (self);
-}
-
+/**
+ * nm_connection_provider_add_connection:
+ * @self: the #NMConnectionProvider
+ * @connection: the source connection to create a new #NMSettingsConnection from
+ * @save_to_disk: %TRUE to save the connection to disk immediately, %FALSE to
+ * not save to disk
+ * @error: on return, a location to store any errors that may occur
+ *
+ * Creates a new #NMSettingsConnection for the given source @connection.
+ * The plugin owns the returned object and the caller must reference the object
+ * to continue using it.
+ *
+ * Returns: the new #NMSettingsConnection or %NULL
+ */
NMConnection *
nm_connection_provider_add_connection (NMConnectionProvider *self,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error)
{
g_return_val_if_fail (NM_IS_CONNECTION_PROVIDER (self), NULL);
g_assert (NM_CONNECTION_PROVIDER_GET_INTERFACE (self)->add_connection);
- return NM_CONNECTION_PROVIDER_GET_INTERFACE (self)->add_connection (self, connection, error);
+ return NM_CONNECTION_PROVIDER_GET_INTERFACE (self)->add_connection (self, connection, save_to_disk, error);
+}
+
+/**
+ * nm_connection_provider_get_connection_by_uuid:
+ * @self: the #NMConnectionProvider
+ * @uuid: the UUID to search for
+ *
+ * Returns: the connection with the given @uuid, or %NULL
+ */
+NMConnection *
+nm_connection_provider_get_connection_by_uuid (NMConnectionProvider *self,
+ const char *uuid)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION_PROVIDER (self), NULL);
+ g_return_val_if_fail (uuid != NULL, NULL);
+ g_return_val_if_fail (nm_utils_is_uuid (uuid), NULL);
+
+ g_assert (NM_CONNECTION_PROVIDER_GET_INTERFACE (self)->get_connection_by_uuid);
+ return NM_CONNECTION_PROVIDER_GET_INTERFACE (self)->get_connection_by_uuid (self, uuid);
}
/*****************************************************************************/
@@ -96,14 +122,6 @@ nm_connection_provider_init (gpointer g_iface)
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
-
- g_signal_new (NM_CP_SIGNAL_CONNECTIONS_LOADED,
- iface_type,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMConnectionProvider, connections_loaded),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
}
GType
diff --git a/src/nm-connection-provider.h b/src/nm-connection-provider.h
index 1502545b2..5093d0553 100644
--- a/src/nm-connection-provider.h
+++ b/src/nm-connection-provider.h
@@ -29,7 +29,6 @@ typedef struct _NMConnectionProvider NMConnectionProvider;
#define NM_CP_SIGNAL_CONNECTION_ADDED "cp-connection-added"
#define NM_CP_SIGNAL_CONNECTION_UPDATED "cp-connection-updated"
#define NM_CP_SIGNAL_CONNECTION_REMOVED "cp-connection-removed"
-#define NM_CP_SIGNAL_CONNECTIONS_LOADED "cp-connections-loaded"
/**
@@ -58,12 +57,14 @@ struct _NMConnectionProvider {
const GSList * (*get_connections) (NMConnectionProvider *self);
- gboolean (*has_connections_loaded) (NMConnectionProvider *self);
-
NMConnection * (*add_connection) (NMConnectionProvider *self,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error);
+ NMConnection * (*get_connection_by_uuid) (NMConnectionProvider *self,
+ const char *uuid);
+
/* Signals */
void (*connection_added) (NMConnectionProvider *self, NMConnection *connection);
@@ -71,12 +72,18 @@ struct _NMConnectionProvider {
void (*connection_removed) (NMConnectionProvider *self, NMConnection *connection);
- void (*connections_loaded) (NMConnectionProvider *self);
};
GType nm_connection_provider_get_type (void);
/**
+ * nm_connection_provider_get:
+ *
+ * Returns: the global #NMConnectionProvider
+ */
+NMConnectionProvider *nm_connection_provider_get (void);
+
+/**
* nm_connection_provider_get_best_connections:
* @self: the #NMConnectionProvider
* @max_requested: if non-zero, the maximum number of connections to return
@@ -110,28 +117,20 @@ GSList *nm_connection_provider_get_best_connections (NMConnectionProvider *self,
const GSList *nm_connection_provider_get_connections (NMConnectionProvider *self);
/**
- * nm_connection_provider_has_connections_loaded:
- * @self: the #NMConnectionProvider
- *
- * Returns: TRUE or FALSE indicating whether the connections of the provider are already
- * loaded. If they are not yet loaded, the provider will not emit the signals
- * NM_CP_SIGNAL_CONNECTION_ADDED, NM_CP_SIGNAL_CONNECTION_UPDATED and
- * NM_CP_SIGNAL_CONNECTION_REMOVED until NM_CP_SIGNAL_CONNECTIONS_LOADED gets
- * emited.
- */
-gboolean nm_connection_provider_has_connections_loaded (NMConnectionProvider *self);
-
-
-/**
* nm_connection_provider_add_connection:
* @self: the #NMConnectionProvider
* @connection: the connection to be added
+ * @save_to_disk: whether to store the connection on disk
* @error: returns any error if adding fails
*
* returns: a newly added #NMConnection.
*/
NMConnection *nm_connection_provider_add_connection (NMConnectionProvider *self,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error);
+NMConnection *nm_connection_provider_get_connection_by_uuid (NMConnectionProvider *self,
+ const char *uuid);
+
#endif /* NM_CONNECTION_PROVIDER_H */
diff --git a/src/nm-connectivity.c b/src/nm-connectivity.c
index 7e3bed997..5c6a43f63 100644
--- a/src/nm-connectivity.c
+++ b/src/nm-connectivity.c
@@ -28,7 +28,7 @@
#include "nm-connectivity.h"
#include "nm-logging.h"
-#include "nm-manager.h"
+#include "nm-config.h"
G_DEFINE_TYPE (NMConnectivity, nm_connectivity, G_TYPE_OBJECT)
@@ -238,15 +238,18 @@ nm_connectivity_check_finish (NMConnectivity *self,
NMConnectivity *
-nm_connectivity_new (const gchar *check_uri,
- guint check_interval,
- const gchar *check_response)
+nm_connectivity_new (void)
{
NMConnectivity *self;
+ NMConfig *config;
+ const char *check_response;
+
+ config = nm_config_get ();
+ check_response = nm_config_get_connectivity_response (config);
self = g_object_new (NM_TYPE_CONNECTIVITY,
- NM_CONNECTIVITY_URI, check_uri,
- NM_CONNECTIVITY_INTERVAL, check_interval,
+ NM_CONNECTIVITY_URI, nm_config_get_connectivity_uri (config),
+ NM_CONNECTIVITY_INTERVAL, nm_config_get_connectivity_interval (config),
NM_CONNECTIVITY_RESPONSE, check_response ? check_response : DEFAULT_RESPONSE,
NULL);
g_return_val_if_fail (self != NULL, NULL);
diff --git a/src/nm-connectivity.h b/src/nm-connectivity.h
index 98a008843..04d0f2a30 100644
--- a/src/nm-connectivity.h
+++ b/src/nm-connectivity.h
@@ -50,9 +50,7 @@ typedef struct {
GType nm_connectivity_get_type (void);
-NMConnectivity *nm_connectivity_new (const gchar *check_uri,
- guint check_interval,
- const gchar *check_response);
+NMConnectivity *nm_connectivity_new (void);
void nm_connectivity_set_online (NMConnectivity *self,
gboolean online);
diff --git a/src/nm-dbus-manager.c b/src/nm-dbus-manager.c
index 8552f559e..f9269b615 100644
--- a/src/nm-dbus-manager.c
+++ b/src/nm-dbus-manager.c
@@ -15,15 +15,20 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2006 - 2010 Red Hat, Inc.
+ * Copyright (C) 2006 - 2013 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
#include "config.h"
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <errno.h>
+
#include "NetworkManager.h"
#include "nm-dbus-manager.h"
-#include "nm-marshal.h"
#include "nm-glib-compat.h"
+#include "nm-properties-changed-signal.h"
#include <dbus/dbus.h>
#include <dbus/dbus-glib.h>
@@ -31,9 +36,14 @@
#include <string.h>
#include "nm-logging.h"
+#define PRIV_SOCK_PATH NMRUNDIR "/private"
+#define PRIV_SOCK_TAG "private"
+
enum {
DBUS_CONNECTION_CHANGED = 0,
NAME_OWNER_CHANGED,
+ PRIVATE_CONNECTION_NEW,
+ PRIVATE_CONNECTION_DISCONNECTED,
NUMBER_OF_SIGNALS
};
@@ -45,11 +55,17 @@ G_DEFINE_TYPE(NMDBusManager, nm_dbus_manager, G_TYPE_OBJECT)
NM_TYPE_DBUS_MANAGER, \
NMDBusManagerPrivate))
+typedef struct _PrivateServer PrivateServer;
+
typedef struct {
DBusConnection *connection;
DBusGConnection *g_connection;
+ GHashTable *exported;
gboolean started;
+ GSList *private_servers;
+ PrivateServer *priv_server;
+
DBusGProxy *proxy;
guint proxy_destroy_id;
@@ -59,35 +75,462 @@ typedef struct {
static gboolean nm_dbus_manager_init_bus (NMDBusManager *self);
static void nm_dbus_manager_cleanup (NMDBusManager *self, gboolean dispose);
static void start_reconnection_timeout (NMDBusManager *self);
+static void object_destroyed (NMDBusManager *self, gpointer object);
NMDBusManager *
nm_dbus_manager_get (void)
{
static NMDBusManager *singleton = NULL;
+ static gsize once = 0;
- if (!singleton) {
- singleton = NM_DBUS_MANAGER (g_object_new (NM_TYPE_DBUS_MANAGER, NULL));
+ if (g_once_init_enter (&once)) {
+ singleton = (NMDBusManager *) g_object_new (NM_TYPE_DBUS_MANAGER, NULL);
+ g_assert (singleton);
if (!nm_dbus_manager_init_bus (singleton))
start_reconnection_timeout (singleton);
+ g_once_init_leave (&once, 1);
+ }
+ return singleton;
+}
+
+/**************************************************************/
+
+struct _PrivateServer {
+ char *tag;
+ GQuark detail;
+ char *address;
+ DBusServer *server;
+ GHashTable *connections;
+ NMDBusManager *manager;
+};
+
+static DBusHandlerResult
+private_server_message_filter (DBusConnection *conn,
+ DBusMessage *message,
+ void *data)
+{
+ PrivateServer *s = data;
+
+ /* Clean up after the connection */
+ if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
+ nm_log_dbg (LOGD_CORE, "(%s) closed connection %p on private socket.",
+ s->tag, conn);
+
+ /* Emit this for the manager */
+ g_signal_emit (s->manager,
+ signals[PRIVATE_CONNECTION_DISCONNECTED],
+ s->detail,
+ dbus_connection_get_g_connection (conn));
+
+ g_hash_table_remove (s->connections, conn);
+
+ /* Let dbus-glib process the message too */
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static dbus_bool_t
+allow_only_root (DBusConnection *connection, unsigned long uid, void *data)
+{
+ return uid == 0;
+}
+
+static void
+private_server_new_connection (DBusServer *server,
+ DBusConnection *conn,
+ gpointer user_data)
+{
+ PrivateServer *s = user_data;
+ static guint32 counter = 0;
+ char *sender;
+
+ if (!dbus_connection_add_filter (conn, private_server_message_filter, s, NULL)) {
+ dbus_connection_close (conn);
+ return;
+ }
+ dbus_connection_set_unix_user_function (conn, allow_only_root, NULL, NULL);
+ dbus_connection_setup_with_g_main (conn, NULL);
+
+ /* Fake a sender since private connections don't have one */
+ sender = g_strdup_printf ("x:y:%d", counter++);
+ g_hash_table_insert (s->connections, dbus_connection_ref (conn), sender);
+
+ nm_log_dbg (LOGD_CORE, "(%s) accepted connection %p on private socket.", s->tag, conn);
+
+ /* Emit this for the manager */
+ g_signal_emit (s->manager,
+ signals[PRIVATE_CONNECTION_NEW],
+ s->detail,
+ dbus_connection_get_g_connection (conn));
+}
+
+static void
+private_server_dbus_connection_destroy (DBusConnection *conn)
+{
+ if (dbus_connection_get_is_connected (conn))
+ dbus_connection_close (conn);
+ dbus_connection_unref (conn);
+}
+
+static PrivateServer *
+private_server_new (const char *path,
+ const char *tag,
+ NMDBusManager *manager)
+{
+ PrivateServer *s;
+ DBusServer *server;
+ DBusError error;
+ char *address;
+
+ unlink (path);
+ address = g_strdup_printf ("unix:path=%s", path);
+
+ nm_log_dbg (LOGD_CORE, "(%s) creating private socket %s.", tag, address);
+
+ dbus_error_init (&error);
+ server = dbus_server_listen (address, &error);
+ if (!server) {
+ nm_log_warn (LOGD_CORE, "(%s) failed to set up private socket %s: %s",
+ tag, address, error.message);
+ dbus_error_free (&error);
+ return NULL;
+ }
+
+ s = g_malloc0 (sizeof (*s));
+ s->address = address;
+ s->server = server;
+ dbus_server_setup_with_g_main (s->server, NULL);
+ dbus_server_set_new_connection_function (s->server, private_server_new_connection, s, NULL);
+
+ s->connections = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ (GDestroyNotify) private_server_dbus_connection_destroy,
+ g_free);
+ s->manager = manager;
+ s->tag = g_strdup (tag);
+ s->detail = g_quark_from_string (s->tag);
+
+ return s;
+}
+
+static void
+private_server_free (gpointer ptr)
+{
+ PrivateServer *s = ptr;
+
+ unlink (s->address);
+ g_free (s->address);
+ g_free (s->tag);
+ g_hash_table_destroy (s->connections);
+ dbus_server_unref (s->server);
+ memset (s, 0, sizeof (*s));
+ g_free (s);
+}
+
+void
+nm_dbus_manager_private_server_register (NMDBusManager *self,
+ const char *path,
+ const char *tag)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ PrivateServer *s;
+ GSList *iter;
+
+#if !HAVE_DBUS_GLIB_100
+ g_assert_not_reached ();
+#endif
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (path != NULL);
+ g_return_if_fail (tag != NULL);
+
+ /* Only one instance per tag; but don't warn */
+ for (iter = priv->private_servers; iter; iter = g_slist_next (iter)) {
+ s = iter->data;
+ if (g_strcmp0 (tag, s->tag) == 0)
+ return;
+ }
+
+ s = private_server_new (path, tag, self);
+ if (s)
+ priv->private_servers = g_slist_append (priv->private_servers, s);
+}
+
+static const char *
+private_server_get_connection_owner (PrivateServer *s, DBusGConnection *connection)
+{
+ g_return_val_if_fail (s != NULL, NULL);
+ g_return_val_if_fail (connection != NULL, NULL);
+
+ return g_hash_table_lookup (s->connections, dbus_g_connection_get_connection (connection));
+}
+
+/**************************************************************/
+
+static gboolean
+_bus_get_unix_pid (NMDBusManager *self,
+ const char *sender,
+ gulong *out_pid,
+ GError **error)
+{
+ guint32 unix_pid = G_MAXUINT32;
+
+ if (!dbus_g_proxy_call_with_timeout (NM_DBUS_MANAGER_GET_PRIVATE (self)->proxy,
+ "GetConnectionUnixProcessID", 2000, error,
+ G_TYPE_STRING, sender,
+ G_TYPE_INVALID,
+ G_TYPE_UINT, &unix_pid,
+ G_TYPE_INVALID)) {
+ return FALSE;
+ }
+
+ *out_pid = (gulong) unix_pid;
+ return TRUE;
+}
+
+/**
+ * _get_caller_info_from_context():
+ *
+ * Given a dbus-glib method invocation, or a DBusConnection + DBusMessage,
+ * return the sender and the UID of the sender.
+ */
+static gboolean
+_get_caller_info (NMDBusManager *self,
+ DBusGMethodInvocation *context,
+ DBusConnection *connection,
+ DBusMessage *message,
+ char **out_sender,
+ gulong *out_uid,
+ gulong *out_pid)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ DBusGConnection *gconn;
+ char *sender;
+ const char *priv_sender;
+ DBusError error;
+ GSList *iter;
+
+ if (context) {
+ gconn = dbus_g_method_invocation_get_g_connection (context);
+ g_assert (gconn);
+ connection = dbus_g_connection_get_connection (gconn);
+
+ /* only bus connections will have a sender */
+ sender = dbus_g_method_get_sender (context);
} else {
- g_object_ref (singleton);
+ g_assert (message);
+ sender = g_strdup (dbus_message_get_sender (message));
+ }
+ g_assert (connection);
+
+ if (!sender) {
+ /* Might be a private connection, for which we fake a sender */
+ for (iter = priv->private_servers; iter; iter = g_slist_next (iter)) {
+ PrivateServer *s = iter->data;
+
+ priv_sender = g_hash_table_lookup (s->connections, connection);
+ if (priv_sender) {
+ if (out_uid)
+ *out_uid = 0;
+ if (out_sender)
+ *out_sender = g_strdup (priv_sender);
+ if (out_pid) {
+ if (!dbus_connection_get_unix_process_id (connection, out_pid))
+ *out_pid = G_MAXULONG;
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
}
- g_assert (singleton);
- return singleton;
+ /* Bus connections always have a sender */
+ g_assert (sender);
+ if (out_uid) {
+ dbus_error_init (&error);
+ *out_uid = dbus_bus_get_unix_user (connection, sender, &error);
+ if (dbus_error_is_set (&error)) {
+ dbus_error_free (&error);
+ *out_uid = G_MAXULONG;
+ g_free (sender);
+ return FALSE;
+ }
+ }
+
+ if (out_pid) {
+ if (!_bus_get_unix_pid (self, sender, out_pid, NULL)) {
+ *out_pid = G_MAXULONG;
+ g_free (sender);
+ return FALSE;
+ }
+ }
+
+ if (out_sender)
+ *out_sender = g_strdup (sender);
+
+ g_free (sender);
+ return TRUE;
+}
+
+gboolean
+nm_dbus_manager_get_caller_info (NMDBusManager *self,
+ DBusGMethodInvocation *context,
+ char **out_sender,
+ gulong *out_uid,
+ gulong *out_pid)
+{
+ return _get_caller_info (self, context, NULL, NULL, out_sender, out_uid, out_pid);
+}
+
+gboolean
+nm_dbus_manager_get_caller_info_from_message (NMDBusManager *self,
+ DBusConnection *connection,
+ DBusMessage *message,
+ char **out_sender,
+ gulong *out_uid,
+ gulong *out_pid)
+{
+ return _get_caller_info (self, NULL, connection, message, out_sender, out_uid, out_pid);
}
+gboolean
+nm_dbus_manager_get_unix_user (NMDBusManager *self,
+ const char *sender,
+ gulong *out_uid)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+ DBusError error;
+
+ g_return_val_if_fail (sender != NULL, FALSE);
+ g_return_val_if_fail (out_uid != NULL, FALSE);
+
+ /* Check if it's a private connection sender, which we fake */
+ for (iter = priv->private_servers; iter; iter = g_slist_next (iter)) {
+ PrivateServer *s = iter->data;
+ GHashTableIter hiter;
+ const char *priv_sender;
+
+ g_hash_table_iter_init (&hiter, s->connections);
+ while (g_hash_table_iter_next (&hiter, NULL, (gpointer) &priv_sender)) {
+ if (g_strcmp0 (sender, priv_sender) == 0) {
+ *out_uid = 0;
+ return TRUE;
+ }
+ }
+ }
+
+ /* Otherwise, a bus connection */
+ dbus_error_init (&error);
+ *out_uid = dbus_bus_get_unix_user (priv->connection, sender, &error);
+ if (dbus_error_is_set (&error)) {
+ nm_log_warn (LOGD_CORE, "Failed to get unix user for dbus sender '%s': %s",
+ sender, error.message);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**************************************************************/
+
+#if HAVE_DBUS_GLIB_100
+static void
+private_connection_new (NMDBusManager *self, DBusGConnection *connection)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ GObject *object;
+ const char *path;
+
+ /* Register all exported objects on this private connection */
+ g_hash_table_iter_init (&iter, priv->exported);
+ while (g_hash_table_iter_next (&iter, (gpointer) &object, (gpointer) &path)) {
+ dbus_g_connection_register_g_object (connection, path, object);
+ nm_log_dbg (LOGD_CORE, "(%s) registered %p (%s) at '%s' on private socket.",
+ PRIV_SOCK_TAG, object, G_OBJECT_TYPE_NAME (object), path);
+ }
+}
+
+static void
+private_connection_disconnected (NMDBusManager *self, DBusGConnection *connection)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ const char *owner;
+
+ owner = private_server_get_connection_owner (priv->priv_server, connection);
+ g_assert (owner);
+
+ /* Fake a NameOwnerChanged to let listerners know this owner has quit */
+ g_signal_emit (G_OBJECT (self), signals[NAME_OWNER_CHANGED],
+ 0, owner, owner, NULL);
+}
+
+static void
+private_server_setup (NMDBusManager *self)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+
+ /* Skip this step if this is just a test program */
+ if (g_test_initialized ())
+ return;
+
+ /* Set up our main private DBus socket */
+ if (mkdir (NMRUNDIR, 0700) == -1) {
+ if (errno != EEXIST)
+ nm_log_warn (LOGD_CORE, "Error creating directory \"%s\": %d (%s)", NMRUNDIR, errno, g_strerror (errno));
+ }
+ priv->priv_server = private_server_new (PRIV_SOCK_PATH, PRIV_SOCK_TAG, self);
+ if (priv->priv_server) {
+ priv->private_servers = g_slist_append (priv->private_servers, priv->priv_server);
+
+ g_signal_connect (self,
+ NM_DBUS_MANAGER_PRIVATE_CONNECTION_NEW "::" PRIV_SOCK_TAG,
+ (GCallback) private_connection_new,
+ NULL);
+ g_signal_connect (self,
+ NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED "::" PRIV_SOCK_TAG,
+ (GCallback) private_connection_disconnected,
+ NULL);
+ }
+}
+#endif /* HAVE_DBUS_GLIB_100 */
+
static void
nm_dbus_manager_init (NMDBusManager *self)
{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+
+ priv->exported = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
+
+#if HAVE_DBUS_GLIB_100
+ private_server_setup (self);
+#endif
}
static void
nm_dbus_manager_dispose (GObject *object)
{
- NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (object);
+ NMDBusManager *self = NM_DBUS_MANAGER (object);
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ GObject *exported;
- nm_dbus_manager_cleanup (NM_DBUS_MANAGER (object), TRUE);
+ if (priv->exported) {
+ g_hash_table_iter_init (&iter, priv->exported);
+ while (g_hash_table_iter_next (&iter, (gpointer) &exported, NULL))
+ g_object_weak_unref (exported, (GWeakNotify) object_destroyed, self);
+
+ g_hash_table_destroy (priv->exported);
+ priv->exported = NULL;
+ }
+
+ g_slist_free_full (priv->private_servers, private_server_free);
+ priv->private_servers = NULL;
+ priv->priv_server = NULL;
+
+ nm_dbus_manager_cleanup (self, TRUE);
if (priv->reconnect_id) {
g_source_remove (priv->reconnect_id);
@@ -102,6 +545,8 @@ nm_dbus_manager_class_init (NMDBusManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ g_type_class_add_private (klass, sizeof (NMDBusManagerPrivate));
+
object_class->dispose = nm_dbus_manager_dispose;
signals[DBUS_CONNECTION_CHANGED] =
@@ -109,7 +554,7 @@ nm_dbus_manager_class_init (NMDBusManagerClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMDBusManagerClass, dbus_connection_changed),
- NULL, NULL, _nm_marshal_VOID__POINTER,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
signals[NAME_OWNER_CHANGED] =
@@ -117,10 +562,24 @@ nm_dbus_manager_class_init (NMDBusManagerClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMDBusManagerClass, name_owner_changed),
- NULL, NULL, _nm_marshal_VOID__STRING_STRING_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
- g_type_class_add_private (klass, sizeof (NMDBusManagerPrivate));
+ signals[PRIVATE_CONNECTION_NEW] =
+ g_signal_new (NM_DBUS_MANAGER_PRIVATE_CONNECTION_NEW,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ G_STRUCT_OFFSET (NMDBusManagerClass, private_connection_new),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+ signals[PRIVATE_CONNECTION_DISCONNECTED] =
+ g_signal_new (NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ G_STRUCT_OFFSET (NMDBusManagerClass, private_connection_disconnected),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
}
@@ -195,6 +654,9 @@ nm_dbus_manager_get_name_owner (NMDBusManager *self,
if (error)
g_return_val_if_fail (*error == NULL, NULL);
+ if (!NM_DBUS_MANAGER_GET_PRIVATE (self)->proxy)
+ return NULL;
+
if (!dbus_g_proxy_call_with_timeout (NM_DBUS_MANAGER_GET_PRIVATE (self)->proxy,
"GetNameOwner", 2000, error,
G_TYPE_STRING, name,
@@ -217,6 +679,9 @@ nm_dbus_manager_name_has_owner (NMDBusManager *self,
g_return_val_if_fail (NM_IS_DBUS_MANAGER (self), FALSE);
g_return_val_if_fail (name != NULL, FALSE);
+ if (!NM_DBUS_MANAGER_GET_PRIVATE (self)->proxy)
+ return FALSE;
+
if (!dbus_g_proxy_call (NM_DBUS_MANAGER_GET_PRIVATE (self)->proxy,
"NameHasOwner", &err,
G_TYPE_STRING, name,
@@ -262,7 +727,6 @@ static gboolean
nm_dbus_manager_init_bus (NMDBusManager *self)
{
NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
- GError *err = NULL;
if (priv->connection) {
nm_log_warn (LOGD_CORE, "DBus Manager already has a valid connection.");
@@ -271,12 +735,14 @@ nm_dbus_manager_init_bus (NMDBusManager *self)
dbus_connection_set_change_sigpipe (TRUE);
- priv->g_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
+ priv->g_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
if (!priv->g_connection) {
- nm_log_err (LOGD_CORE, "Could not get the system bus. Make sure "
- "the message bus daemon is running! Message: %s",
- err->message);
- g_error_free (err);
+ /* Log with 'info' severity; there won't be a bus daemon in minimal
+ * environments (eg, initrd) where we only want to use the private
+ * socket.
+ */
+ nm_log_info (LOGD_CORE, "Could not connect to the system bus; only the "
+ "private D-Bus socket will be available.");
return FALSE;
}
@@ -321,6 +787,10 @@ nm_dbus_manager_start_service (NMDBusManager *self)
return FALSE;
}
+ /* Pointless to request a name when we aren't connected to the bus */
+ if (!priv->proxy)
+ return FALSE;
+
if (!dbus_g_proxy_call (priv->proxy, "RequestName", &err,
G_TYPE_STRING, NM_DBUS_SERVICE,
G_TYPE_UINT, DBUS_NAME_FLAG_DO_NOT_QUEUE,
@@ -358,3 +828,149 @@ nm_dbus_manager_get_connection (NMDBusManager *self)
return NM_DBUS_MANAGER_GET_PRIVATE (self)->g_connection;
}
+
+static void
+object_destroyed (NMDBusManager *self, gpointer object)
+{
+ g_hash_table_remove (NM_DBUS_MANAGER_GET_PRIVATE (self)->exported, object);
+}
+
+void
+nm_dbus_manager_register_exported_type (NMDBusManager *self,
+ GType object_type,
+ const DBusGObjectInfo *info)
+{
+ const char *properties_info, *dbus_name, *gobject_name, *tmp_access;
+
+ dbus_g_object_type_install_info (object_type, info);
+ if (!info->exported_properties)
+ return;
+
+ properties_info = info->exported_properties;
+ while (*properties_info) {
+ /* The format is: "interface\0DBusPropertyName\0gobject_property_name\0access\0" */
+ dbus_name = strchr (properties_info, '\0') + 1;
+ gobject_name = strchr (dbus_name, '\0') + 1;
+ tmp_access = strchr (gobject_name, '\0') + 1;
+ properties_info = strchr (tmp_access, '\0') + 1;
+
+ /* Note that nm-properties-changed-signal takes advantage of the
+ * fact that @dbus_name and @gobject_name are static data that won't
+ * ever be freed.
+ */
+ nm_properties_changed_signal_add_property (object_type, dbus_name, gobject_name);
+ }
+}
+
+void
+nm_dbus_manager_register_object (NMDBusManager *self,
+ const char *path,
+ gpointer object)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ DBusConnection *connection;
+
+ g_assert (G_IS_OBJECT (object));
+
+ g_warn_if_fail (g_hash_table_lookup (priv->exported, object) == NULL);
+ g_hash_table_insert (priv->exported, G_OBJECT (object), g_strdup (path));
+
+ if (priv->g_connection)
+ dbus_g_connection_register_g_object (priv->g_connection, path, G_OBJECT (object));
+
+ if (priv->priv_server) {
+ g_hash_table_iter_init (&iter, priv->priv_server->connections);
+ while (g_hash_table_iter_next (&iter, (gpointer) &connection, NULL)) {
+ dbus_g_connection_register_g_object (dbus_connection_get_g_connection (connection),
+ path,
+ G_OBJECT (object));
+ }
+ }
+
+ g_object_weak_ref (G_OBJECT (object), (GWeakNotify) object_destroyed, self);
+}
+
+void
+nm_dbus_manager_unregister_object (NMDBusManager *self, gpointer object)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ DBusConnection *connection;
+
+ g_assert (G_IS_OBJECT (object));
+
+ g_hash_table_remove (NM_DBUS_MANAGER_GET_PRIVATE (self)->exported, G_OBJECT (object));
+ g_object_weak_unref (G_OBJECT (object), (GWeakNotify) object_destroyed, self);
+
+ if (priv->g_connection)
+ dbus_g_connection_unregister_g_object (priv->g_connection, G_OBJECT (object));
+
+ if (priv->priv_server) {
+ g_hash_table_iter_init (&iter, priv->priv_server->connections);
+ while (g_hash_table_iter_next (&iter, (gpointer) &connection, NULL)) {
+ dbus_g_connection_unregister_g_object (dbus_connection_get_g_connection (connection),
+ G_OBJECT (object));
+ }
+ }
+}
+
+/**
+ * nm_dbus_manager_new_proxy:
+ * @self: the #NMDBusManager
+ * @context: the method call context this proxy should be created
+ * @name: any name on the message bus
+ * @path: name of the object instance to call methods on
+ * @iface: name of the interface to call methods on
+ *
+ * Creates a new proxy for a name on a given bus. Since the process which
+ * called the D-Bus method could be coming from a private connection or the
+ * system bus connection, differnet proxies must be created for each case. This
+ * function abstracts that.
+ *
+ * Returns: a #DBusGProxy capable of calling D-Bus methods of the calling process
+ */
+DBusGProxy *
+nm_dbus_manager_new_proxy (NMDBusManager *self,
+ DBusGMethodInvocation *context,
+ const char *name,
+ const char *path,
+ const char *iface)
+{
+ NMDBusManagerPrivate *priv = NM_DBUS_MANAGER_GET_PRIVATE (self);
+ DBusGConnection *connection;
+ GSList *iter;
+ const char *owner;
+
+ connection = dbus_g_method_invocation_get_g_connection (context);
+ g_assert (connection);
+
+ /* Might be a private connection, for which we fake a sender */
+ for (iter = priv->private_servers; iter; iter = g_slist_next (iter)) {
+ PrivateServer *s = iter->data;
+
+ owner = private_server_get_connection_owner (s, connection);
+ if (owner) {
+ g_assert_cmpstr (owner, ==, name);
+ return dbus_g_proxy_new_for_peer (connection, path, iface);
+ }
+ }
+
+ return dbus_g_proxy_new_for_name (connection, name, path, iface);
+}
+
+#if !HAVE_DBUS_GLIB_GMI_GET_CONNECTION
+struct _HACKDBusGMethodInvocation {
+ DBusGConnection *connection;
+ /* ... */
+};
+
+DBusGConnection *
+dbus_g_method_invocation_get_g_connection (DBusGMethodInvocation *context)
+{
+ /* Evil hack; this method exists in dbus-glib >= 101, but if we don't
+ * have that, emulate it.
+ */
+ return ((struct _HACKDBusGMethodInvocation *) context)->connection;
+}
+#endif /* HAVE_DBUS_GLIB_GMI_GET_CONNECTION */
diff --git a/src/nm-dbus-manager.h b/src/nm-dbus-manager.h
index 83ffa9667..7895a2037 100644
--- a/src/nm-dbus-manager.h
+++ b/src/nm-dbus-manager.h
@@ -22,6 +22,7 @@
#ifndef __NM_DBUS_MANAGER_H__
#define __NM_DBUS_MANAGER_H__
+#include <config.h>
#include <glib-object.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib.h>
@@ -39,8 +40,10 @@ typedef gboolean (* NMDBusSignalHandlerFunc) (DBusConnection * connection,
#define NM_IS_DBUS_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NM_TYPE_DBUS_MANAGER))
#define NM_DBUS_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NM_TYPE_DBUS_MANAGER, NMDBusManagerClass))
-#define NM_DBUS_MANAGER_DBUS_CONNECTION_CHANGED "dbus-connection-changed"
-#define NM_DBUS_MANAGER_NAME_OWNER_CHANGED "name-owner-changed"
+#define NM_DBUS_MANAGER_DBUS_CONNECTION_CHANGED "dbus-connection-changed"
+#define NM_DBUS_MANAGER_NAME_OWNER_CHANGED "name-owner-changed"
+#define NM_DBUS_MANAGER_PRIVATE_CONNECTION_NEW "private-connection-new"
+#define NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED "private-connection-disconnected"
typedef struct {
GObject parent;
@@ -57,6 +60,12 @@ typedef struct {
const char *name,
const char *old_owner,
const char *new_owner);
+
+ void (*private_connection_new) (NMDBusManager *mgr,
+ DBusGConnection *connection);
+
+ void (*private_connection_disconnected) (NMDBusManager *mgr,
+ DBusGConnection *connection);
} NMDBusManagerClass;
GType nm_dbus_manager_get_type (void);
@@ -75,6 +84,47 @@ gboolean nm_dbus_manager_name_has_owner (NMDBusManager *self,
DBusConnection * nm_dbus_manager_get_dbus_connection (NMDBusManager *self);
DBusGConnection * nm_dbus_manager_get_connection (NMDBusManager *self);
+gboolean nm_dbus_manager_get_caller_info (NMDBusManager *self,
+ DBusGMethodInvocation *context,
+ char **out_sender,
+ gulong *out_uid,
+ gulong *out_pid);
+
+gboolean nm_dbus_manager_get_unix_user (NMDBusManager *self,
+ const char *sender,
+ gulong *out_uid);
+
+gboolean nm_dbus_manager_get_caller_info_from_message (NMDBusManager *self,
+ DBusConnection *connection,
+ DBusMessage *message,
+ char **out_sender,
+ gulong *out_uid,
+ gulong *out_pid);
+
+void nm_dbus_manager_register_exported_type (NMDBusManager *self,
+ GType object_type,
+ const DBusGObjectInfo *info);
+
+void nm_dbus_manager_register_object (NMDBusManager *self,
+ const char *path,
+ gpointer object);
+
+void nm_dbus_manager_unregister_object (NMDBusManager *self, gpointer object);
+
+void nm_dbus_manager_private_server_register (NMDBusManager *self,
+ const char *path,
+ const char *tag);
+
+DBusGProxy *nm_dbus_manager_new_proxy (NMDBusManager *self,
+ DBusGMethodInvocation *context,
+ const char *name,
+ const char *path,
+ const char *iface);
+
+#if !HAVE_DBUS_GLIB_GMI_GET_CONNECTION
+DBusGConnection *dbus_g_method_invocation_get_g_connection (DBusGMethodInvocation *context);
+#endif
+
G_END_DECLS
#endif /* __NM_DBUS_MANAGER_H__ */
diff --git a/src/nm-dcb.c b/src/nm-dcb.c
new file mode 100644
index 000000000..3bdbf7d5e
--- /dev/null
+++ b/src/nm-dcb.c
@@ -0,0 +1,426 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#include <config.h>
+#include <sys/wait.h>
+#include <string.h>
+
+#include <glib.h>
+#include "nm-dcb.h"
+#include "nm-platform.h"
+#include "NetworkManagerUtils.h"
+#include "nm-posix-signals.h"
+#include "nm-logging.h"
+
+GQuark
+nm_dcb_error_quark (void)
+{
+ static GQuark ret = 0;
+
+ if (ret == 0)
+ ret = g_quark_from_static_string ("nm-dcb-error");
+ return ret;
+}
+
+static const char *helper_names[] = { "dcbtool", "fcoeadm" };
+
+gboolean
+do_helper (const char *iface,
+ guint which,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error,
+ const char *fmt,
+ ...)
+{
+ char **argv = NULL, **split = NULL, *cmdline, *errmsg = NULL;
+ gboolean success = FALSE;
+ guint i, u;
+ va_list args;
+
+ g_return_val_if_fail (fmt != NULL, FALSE);
+
+ va_start (args, fmt);
+ cmdline = g_strdup_vprintf (fmt, args);
+ va_end (args);
+
+ split = g_strsplit_set (cmdline, " ", 0);
+ if (!split) {
+ g_set_error (error, NM_DCB_ERROR, NM_DCB_ERROR_INTERNAL,
+ "failure parsing %s command line", helper_names[which]);
+ goto out;
+ }
+
+ /* Allocate space for path, custom arg, interface name, arguments, and NULL */
+ i = u = 0;
+ argv = g_new0 (char *, g_strv_length (split) + 4);
+ argv[i++] = NULL; /* Placeholder for dcbtool path */
+ if (which == DCBTOOL) {
+ argv[i++] = "sc";
+ argv[i++] = (char *) iface;
+ }
+ while (u < g_strv_length (split))
+ argv[i++] = split[u++];
+ argv[i++] = NULL;
+ success = run_func (argv, which, user_data, error);
+ if (!success && error)
+ g_assert (*error);
+
+out:
+ if (split)
+ g_strfreev (split);
+ g_free (argv);
+ g_free (cmdline);
+ g_free (errmsg);
+ return success;
+}
+
+gboolean
+_dcb_enable (const char *iface,
+ gboolean enable,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error)
+{
+ if (enable)
+ return do_helper (iface, DCBTOOL, run_func, user_data, error, "dcb on");
+ else
+ return do_helper (iface, DCBTOOL, run_func, user_data, error, "dcb off");
+}
+
+#define SET_FLAGS(f, tag) \
+G_STMT_START { \
+ if (!do_helper (iface, DCBTOOL, run_func, user_data, error, tag " e:%c a:%c w:%c", \
+ f & NM_SETTING_DCB_FLAG_ENABLE ? '1' : '0', \
+ f & NM_SETTING_DCB_FLAG_ADVERTISE ? '1' : '0', \
+ f & NM_SETTING_DCB_FLAG_WILLING ? '1' : '0')) \
+ return FALSE; \
+} G_STMT_END
+
+#define SET_APP(f, s, tag) \
+G_STMT_START { \
+ gint prio = nm_setting_dcb_get_app_##tag##_priority (s); \
+ \
+ SET_FLAGS (f, "app:" #tag); \
+ if ((f & NM_SETTING_DCB_FLAG_ENABLE) && (prio >= 0)) { \
+ if (!do_helper (iface, DCBTOOL, run_func, user_data, error, "app:" #tag " appcfg:%02x", (1 << prio))) \
+ return FALSE; \
+ } \
+} G_STMT_END
+
+gboolean
+_dcb_setup (const char *iface,
+ NMSettingDcb *s_dcb,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error)
+{
+ NMSettingDcbFlags flags;
+ guint i;
+
+ g_assert (s_dcb);
+
+ /* FCoE */
+ flags = nm_setting_dcb_get_app_fcoe_flags (s_dcb);
+ SET_APP (flags, s_dcb, fcoe);
+
+ /* iSCSI */
+ flags = nm_setting_dcb_get_app_iscsi_flags (s_dcb);
+ SET_APP (flags, s_dcb, iscsi);
+
+ /* FIP */
+ flags = nm_setting_dcb_get_app_fip_flags (s_dcb);
+ SET_APP (flags, s_dcb, fip);
+
+ /* Priority Flow Control */
+ flags = nm_setting_dcb_get_priority_flow_control_flags (s_dcb);
+ SET_FLAGS (flags, "pfc");
+ if (flags & NM_SETTING_DCB_FLAG_ENABLE) {
+ char buf[10];
+
+ for (i = 0; i < 8; i++)
+ buf[i] = nm_setting_dcb_get_priority_flow_control (s_dcb, i) ? '1' : '0';
+ buf[i] = 0;
+ if (!do_helper (iface, DCBTOOL, run_func, user_data, error, "pfc pfcup:%s", buf))
+ return FALSE;
+ }
+
+ /* Priority Groups */
+ flags = nm_setting_dcb_get_priority_group_flags (s_dcb);
+ if (flags & NM_SETTING_DCB_FLAG_ENABLE) {
+ GString *s;
+ gboolean success;
+ guint id;
+
+ s = g_string_sized_new (150);
+
+ g_string_append_printf (s, "pg e:1 a:%c w:%c",
+ flags & NM_SETTING_DCB_FLAG_ADVERTISE ? '1' : '0',
+ flags & NM_SETTING_DCB_FLAG_WILLING ? '1' : '0');
+
+ /* Priority Groups */
+ g_string_append (s, " pgid:");
+ for (i = 0; i < 8; i++) {
+ id = nm_setting_dcb_get_priority_group_id (s_dcb, i);
+ g_assert (id < 8 || id == 15);
+ g_string_append_c (s, (id < 8) ? ('0' + id) : 'f');
+ }
+
+ /* Priority Group Bandwidth */
+ g_string_append_printf (s, " pgpct:%u,%u,%u,%u,%u,%u,%u,%u",
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 0),
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 1),
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 2),
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 3),
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 4),
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 5),
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 6),
+ nm_setting_dcb_get_priority_group_bandwidth (s_dcb, 7));
+
+ /* Priority Bandwidth */
+ g_string_append_printf (s, " uppct:%u,%u,%u,%u,%u,%u,%u,%u",
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 0),
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 1),
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 2),
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 3),
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 4),
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 5),
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 6),
+ nm_setting_dcb_get_priority_bandwidth (s_dcb, 7));
+
+ /* Strict Bandwidth */
+ g_string_append (s, " strict:");
+ for (i = 0; i < 8; i++)
+ g_string_append_c (s, nm_setting_dcb_get_priority_strict_bandwidth (s_dcb, i) ? '1' : '0');
+
+ /* Priority Traffic Class */
+ g_string_append (s, " up2tc:");
+ for (i = 0; i < 8; i++) {
+ id = nm_setting_dcb_get_priority_traffic_class (s_dcb, i);
+ g_assert (id < 8);
+ g_string_append_c (s, '0' + id);
+ }
+
+ success = do_helper (iface, DCBTOOL, run_func, user_data, error, "%s", s->str);
+ g_string_free (s, TRUE);
+ if (!success)
+ return FALSE;
+ } else {
+ /* Ignore disable failure since lldpad <= 0.9.46 does not support disabling
+ * priority groups without specifying an entire PG config.
+ */
+ (void) do_helper (iface, DCBTOOL, run_func, user_data, error, "pg e:0");
+ }
+
+ return TRUE;
+}
+
+gboolean
+_dcb_cleanup (const char *iface,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error)
+{
+ const char *cmds[] = {
+ "app:fcoe e:0",
+ "app:iscsi e:0",
+ "app:fip e:0",
+ "pfc e:0",
+ "pg e:0",
+ NULL
+ };
+ const char **iter = cmds;
+ gboolean success = TRUE;
+
+ /* Turn everything off and return first error we get (if any) */
+ while (iter && *iter) {
+ if (!do_helper (iface, DCBTOOL, run_func, user_data, success ? error : NULL, "%s", *iter))
+ success = FALSE;
+ iter++;
+ }
+
+ if (!_dcb_enable (iface, FALSE, run_func, user_data, success ? error : NULL))
+ success = FALSE;
+
+ return success;
+}
+
+gboolean
+_fcoe_setup (const char *iface,
+ NMSettingDcb *s_dcb,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error)
+{
+ NMSettingDcbFlags flags;
+
+ g_assert (s_dcb);
+
+ flags = nm_setting_dcb_get_app_fcoe_flags (s_dcb);
+ if (flags & NM_SETTING_DCB_FLAG_ENABLE) {
+ const char *mode = nm_setting_dcb_get_app_fcoe_mode (s_dcb);
+
+ if (!do_helper (NULL, FCOEADM, run_func, user_data, error, "-m %s -c %s", mode, iface))
+ return FALSE;
+ } else {
+ if (!do_helper (NULL, FCOEADM, run_func, user_data, error, "-d %s", iface))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+_fcoe_cleanup (const char *iface,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error)
+{
+ return do_helper (NULL, FCOEADM, run_func, user_data, error, "-d %s", iface);
+}
+
+
+static const char *dcbpaths[] = {
+ "/sbin/dcbtool",
+ "/usr/sbin/dcbtool",
+ "/usr/local/sbin/dcbtool",
+ NULL
+};
+static const char *fcoepaths[] = {
+ "/sbin/fcoeadm",
+ "/usr/sbin/fcoeadm",
+ "/usr/local/sbin/fcoeadm",
+ NULL
+};
+
+
+static gboolean
+run_helper (char **argv, guint which, gpointer user_data, GError **error)
+{
+ static const char *helper_path[2] = { NULL, NULL };
+ int exit_status = 0;
+ gboolean success;
+ char *errmsg = NULL, *outmsg = NULL;
+ const char **iter;
+ char *cmdline;
+
+ if (G_UNLIKELY (helper_path[which] == NULL)) {
+ iter = (which == DCBTOOL) ? dcbpaths : fcoepaths;
+ while (*iter) {
+ if (g_file_test (*iter, G_FILE_TEST_EXISTS))
+ helper_path[which] = *iter;
+ iter++;
+ }
+ if (!helper_path[which]) {
+ g_set_error (error, NM_DCB_ERROR, NM_DCB_ERROR_HELPER_NOT_FOUND,
+ "%s not found",
+ which == DCBTOOL ? "dcbtool" : "fcoadm");
+ return FALSE;
+ }
+ }
+
+ argv[0] = (char *) helper_path[which];
+ cmdline = g_strjoinv (" ", argv);
+ nm_log_dbg (LOGD_DCB, "%s", cmdline);
+
+ success = g_spawn_sync ("/", argv, NULL, 0 /*G_SPAWN_DEFAULT*/,
+ nm_unblock_posix_signals, NULL,
+ &outmsg, &errmsg, &exit_status, error);
+ /* Log any stderr output */
+ if (success && WIFEXITED (exit_status) && WEXITSTATUS (exit_status) && (errmsg || outmsg)) {
+ gboolean ignore_error = FALSE;
+
+ /* Ignore fcoeadm "success" errors like when FCoE is already set up */
+ if (errmsg && strstr (errmsg, "Connection already created"))
+ ignore_error = TRUE;
+
+ if (ignore_error == FALSE) {
+ nm_log_warn (LOGD_DCB, "'%s' failed: '%s'",
+ cmdline, (errmsg && strlen (errmsg)) ? errmsg : outmsg);
+ g_set_error (error, NM_DCB_ERROR, NM_DCB_ERROR_HELPER_FAILED,
+ "Failed to run '%s'", cmdline);
+ success = FALSE;
+ }
+ }
+ g_free (outmsg);
+ g_free (errmsg);
+
+ g_free (cmdline);
+ return success;
+}
+
+gboolean
+nm_dcb_enable (const char *iface, gboolean enable, GError **error)
+{
+ return _dcb_enable (iface, enable, run_helper, GUINT_TO_POINTER (DCBTOOL), error);
+}
+
+gboolean
+nm_dcb_setup (const char *iface, NMSettingDcb *s_dcb, GError **error)
+{
+ gboolean success;
+
+ success = _dcb_setup (iface, s_dcb, run_helper, GUINT_TO_POINTER (DCBTOOL), error);
+ if (success)
+ success = _fcoe_setup (iface, s_dcb, run_helper, GUINT_TO_POINTER (FCOEADM), error);
+
+ return success;
+}
+
+static void
+carrier_wait (const char *iface, guint secs, gboolean up)
+{
+ int ifindex, count = secs * 10;
+
+ g_return_if_fail (iface != NULL);
+
+ ifindex = nm_platform_link_get_ifindex (iface);
+ if (ifindex > 0) {
+ /* To work around driver quirks and lldpad handling of carrier status,
+ * we must wait a short period of time to see if the carrier goes
+ * down, and then wait for the carrier to come back up again. Otherwise
+ * subsequent lldpad calls may fail with "Device not found, link down
+ * or DCB not enabled" errors.
+ */
+ nm_log_dbg (LOGD_DCB, "(%s): cleanup waiting for carrier %s",
+ iface, up ? "up" : "down");
+ g_usleep (G_USEC_PER_SEC / 4);
+ while (nm_platform_link_is_connected (ifindex) != up && count-- > 0) {
+ g_usleep (G_USEC_PER_SEC / 10);
+ nm_platform_link_refresh (ifindex);
+ }
+ }
+}
+
+gboolean
+nm_dcb_cleanup (const char *iface, GError **error)
+{
+ /* Ignore FCoE cleanup errors */
+ _fcoe_cleanup (iface, run_helper, GUINT_TO_POINTER (FCOEADM), NULL);
+
+ /* Must pause a bit to wait for carrier-up since disabling FCoE may
+ * cause the device to take the link down, making lldpad return errors.
+ */
+ carrier_wait (iface, 2, FALSE);
+ carrier_wait (iface, 4, TRUE);
+
+ return _dcb_cleanup (iface, run_helper, GUINT_TO_POINTER (DCBTOOL), error);
+}
+
diff --git a/src/nm-dcb.h b/src/nm-dcb.h
new file mode 100644
index 000000000..bfe5cedff
--- /dev/null
+++ b/src/nm-dcb.h
@@ -0,0 +1,100 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_DCB_H
+#define NM_DCB_H
+
+#include <glib.h>
+#include "nm-setting-dcb.h"
+
+/**
+ * NMDcbError:
+ * @NM_DCB_ERROR_UNKNOWN: unknown or unclassified error
+ * @NM_DCB_ERROR_INTERNAL: a internal programmer error
+ * @NM_DCB_ERROR_BAD_CONFIG: configuration was invalid
+ * @NM_DCB_ERROR_HELPER_NOT_FOUND: the required helper program was not found
+ * @NM_DCB_ERROR_HELPER_FAILED: the helper program failed
+ *
+ * NOTE: these errors are internal-use only and should never be used with D-Bus.
+ **/
+typedef enum {
+ NM_DCB_ERROR_UNKNOWN = 0,
+ NM_DCB_ERROR_INTERNAL,
+ NM_DCB_ERROR_BAD_CONFIG,
+ NM_DCB_ERROR_HELPER_NOT_FOUND,
+ NM_DCB_ERROR_HELPER_FAILED,
+} NMDcbError;
+
+#define NM_DCB_ERROR (nm_dcb_error_quark ())
+GQuark nm_dcb_error_quark (void);
+#define NM_TYPE_DCB_ERROR (nm_dcb_error_get_type ())
+GType nm_dcb_error_get_type (void);
+
+
+gboolean nm_dcb_enable (const char *iface, gboolean enable, GError **error);
+gboolean nm_dcb_setup (const char *iface, NMSettingDcb *s_dcb, GError **error);
+gboolean nm_dcb_cleanup (const char *iface, GError **error);
+
+/* For testcases only! */
+typedef gboolean (*DcbFunc) (char **argv,
+ guint which,
+ gpointer user_data,
+ GError **error);
+
+#define DCBTOOL 0
+#define FCOEADM 1
+
+gboolean do_helper (const char *iface,
+ guint which,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error,
+ const char *fmt,
+ ...) G_GNUC_PRINTF(6, 7);
+
+gboolean _dcb_enable (const char *iface,
+ gboolean enable,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error);
+
+gboolean _dcb_setup (const char *iface,
+ NMSettingDcb *s_dcb,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error);
+
+gboolean _dcb_cleanup (const char *iface,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error);
+
+gboolean _fcoe_setup (const char *iface,
+ NMSettingDcb *s_dcb,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error);
+
+gboolean _fcoe_cleanup (const char *iface,
+ DcbFunc run_func,
+ gpointer user_data,
+ GError **error);
+
+#endif /* NM_DCB_H */
diff --git a/src/nm-device-bond-glue.h b/src/nm-device-bond-glue.h
new file mode 100644
index 000000000..6a2f57021
--- /dev/null
+++ b/src/nm-device-bond-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_bond_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_bond_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_bond_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_bond_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_bond_object_info = { 1,
+ dbus_glib_nm_device_bond_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Bond\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Bond\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Bond\0Carrier\0carrier\0read\0org.freedesktop.NetworkManager.Device.Bond\0Slaves\0slaves\0read\0\0"
+};
+
diff --git a/src/nm-device-bond.c b/src/nm-device-bond.c
deleted file mode 100644
index 7f47a3a62..000000000
--- a/src/nm-device-bond.c
+++ /dev/null
@@ -1,526 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright 2011 - 2012 Red Hat, Inc.
- */
-
-#include "config.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <netinet/ether.h>
-
-#include "nm-device-bond.h"
-#include "nm-logging.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-utils.h"
-#include "NetworkManagerUtils.h"
-#include "nm-device-private.h"
-#include "nm-netlink-monitor.h"
-#include "nm-dbus-glib-types.h"
-#include "nm-enum-types.h"
-#include "nm-system.h"
-
-#include "nm-device-bond-glue.h"
-
-
-G_DEFINE_TYPE (NMDeviceBond, nm_device_bond, NM_TYPE_DEVICE_WIRED)
-
-#define NM_DEVICE_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BOND, NMDeviceBondPrivate))
-
-#define NM_BOND_ERROR (nm_bond_error_quark ())
-
-typedef struct {
- guint8 hw_addr[NM_UTILS_HWADDR_LEN_MAX];
- gsize hw_addr_len;
-} NMDeviceBondPrivate;
-
-enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- PROP_0,
- PROP_HW_ADDRESS,
- PROP_CARRIER,
- PROP_SLAVES,
-
- LAST_PROP
-};
-
-/******************************************************************/
-
-static GQuark
-nm_bond_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-bond-error");
- return quark;
-}
-
-/******************************************************************/
-
-static void
-carrier_action (NMDeviceWired *self, NMDeviceState state, gboolean carrier)
-{
- /* Carrier can't be used to signal availability of the bond master because
- * the bond's carrier follows the slaves' carriers. So carrier gets
- * ignored when determining whether or not the device can be activated.
- *
- * Second, just because all slaves have been removed or have lost carrier
- * does not mean the master should be deactivated. This could be due to
- * user addition/removal of slaves, and is also normal operation with some
- * failover modes.
- *
- * For these reasons, carrier changes are effectively ignored by overriding
- * the parent class' carrier handling and doing nothing.
- */
-}
-
-static void
-update_hw_address (NMDevice *dev)
-{
- NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (dev);
- gsize addrlen;
- gboolean changed = FALSE;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- priv->hw_addr_len = addrlen;
- if (changed)
- g_object_notify (G_OBJECT (dev), NM_DEVICE_BOND_HW_ADDRESS);
- }
-}
-
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- *out_len = NM_DEVICE_BOND_GET_PRIVATE (device)->hw_addr_len;
- return NM_DEVICE_BOND_GET_PRIVATE (device)->hw_addr;
-}
-
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_NM_SUPPORTED;
-}
-
-static gboolean
-is_available (NMDevice *dev)
-{
- if (NM_DEVICE_GET_CLASS (dev)->hw_is_up)
- return NM_DEVICE_GET_CLASS (dev)->hw_is_up (dev);
- return FALSE;
-}
-
-static gboolean
-match_bond_connection (NMDevice *device, NMConnection *connection, GError **error)
-{
- const char *iface;
- NMSettingBond *s_bond;
-
- s_bond = nm_connection_get_setting_bond (connection);
- if (!s_bond || !nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)) {
- g_set_error (error, NM_BOND_ERROR, NM_BOND_ERROR_CONNECTION_NOT_BOND,
- "The connection was not a bond connection.");
- return FALSE;
- }
-
- /* Bond connections must specify the virtual interface name */
- iface = nm_connection_get_virtual_iface_name (connection);
- if (!iface || strcmp (nm_device_get_iface (device), iface)) {
- g_set_error (error, NM_BOND_ERROR, NM_BOND_ERROR_CONNECTION_NOT_BOND,
- "The bond connection virtual interface name did not match.");
- return FALSE;
- }
-
- /* FIXME: match bond properties like mode, etc? */
-
- return TRUE;
-}
-
-static NMConnection *
-get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
-{
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
-
- if (match_bond_connection (dev, connection, NULL))
- return connection;
- }
- return NULL;
-}
-
-static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
-{
- return match_bond_connection (device, connection, error);
-}
-
-static gboolean
-complete_connection (NMDevice *device,
- NMConnection *connection,
- const char *specific_object,
- const GSList *existing_connections,
- GError **error)
-{
- NMSettingBond *s_bond, *tmp;
- guint32 i = 0;
- char *name;
- const GSList *iter;
- gboolean found;
-
- nm_utils_complete_generic (connection,
- NM_SETTING_BOND_SETTING_NAME,
- existing_connections,
- _("Bond connection %d"),
- NULL,
- TRUE);
-
- s_bond = nm_connection_get_setting_bond (connection);
- if (!s_bond) {
- s_bond = (NMSettingBond *) nm_setting_bond_new ();
- nm_connection_add_setting (connection, NM_SETTING (s_bond));
- }
-
- /* Grab the first name that doesn't exist in either our connections
- * or a device on the system.
- */
- while (i < 500 && !nm_setting_bond_get_interface_name (s_bond)) {
- name = g_strdup_printf ("bond%u", i);
- /* check interface names */
- if (nm_netlink_iface_to_index (name) < 0) {
- /* check existing bond connections */
- for (iter = existing_connections, found = FALSE; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = iter->data;
-
- tmp = nm_connection_get_setting_bond (candidate);
- if (tmp && nm_connection_is_type (candidate, NM_SETTING_BOND_SETTING_NAME)) {
- if (g_strcmp0 (nm_setting_bond_get_interface_name (tmp), name) == 0) {
- found = TRUE;
- break;
- }
- }
- }
-
- if (!found)
- g_object_set (G_OBJECT (s_bond), NM_SETTING_BOND_INTERFACE_NAME, name, NULL);
- }
-
- g_free (name);
- i++;
- }
-
- return TRUE;
-}
-
-static gboolean
-spec_match_list (NMDevice *device, const GSList *specs)
-{
- NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (device);
- char *hwaddr;
- gboolean matched;
-
- hwaddr = nm_utils_hwaddr_ntoa (priv->hw_addr, nm_utils_hwaddr_type (priv->hw_addr_len));
- matched = nm_match_spec_hwaddr (specs, hwaddr);
- g_free (hwaddr);
-
- return matched;
-}
-
-static gboolean
-bond_match_config (NMDevice *self, NMConnection *connection)
-{
- NMSettingBond *s_bond;
- const char *ifname;
-
- s_bond = nm_connection_get_setting_bond (connection);
- if (!s_bond)
- return FALSE;
-
- /* Interface name */
- ifname = nm_setting_bond_get_interface_name (s_bond);
- if (g_strcmp0 (ifname, nm_device_get_ip_iface (self)) != 0)
- return FALSE;
-
- return TRUE;
-}
-
-static NMConnection *
-connection_match_config (NMDevice *self, const GSList *connections)
-{
- const GSList *iter;
- GSList *bond_matches;
- NMConnection *match;
-
- /* First narrow @connections down to those that match in their
- * NMSettingBond configuration.
- */
- bond_matches = NULL;
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
-
- if (!nm_connection_is_type (candidate, NM_SETTING_BOND_SETTING_NAME))
- continue;
- if (!bond_match_config (self, candidate))
- continue;
-
- bond_matches = g_slist_prepend (bond_matches, candidate);
- }
-
- /* Now pass those to the super method, which will check IP config */
- bond_matches = g_slist_reverse (bond_matches);
- match = NM_DEVICE_CLASS (nm_device_bond_parent_class)->connection_match_config (self, bond_matches);
- g_slist_free (bond_matches);
-
- return match;
-}
-
-/******************************************************************/
-
-static NMActStageReturn
-act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
-{
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
- NMConnection *connection;
- NMSettingBond *s_bond;
- gboolean no_firmware = FALSE;
-
- g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
- ret = NM_DEVICE_CLASS (nm_device_bond_parent_class)->act_stage1_prepare (dev, reason);
- if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
- connection = nm_device_get_connection (dev);
- g_assert (connection);
- s_bond = nm_connection_get_setting_bond (connection);
- g_assert (s_bond);
-
- /* Interface must be down to set bond options */
- nm_device_hw_take_down (dev, TRUE);
-
- if (!nm_system_apply_bonding_config (nm_device_get_ip_iface (dev), s_bond))
- ret = NM_ACT_STAGE_RETURN_FAILURE;
-
- nm_device_hw_bring_up (dev, TRUE, &no_firmware);
- }
- return ret;
-}
-
-static gboolean
-enslave_slave (NMDevice *device, NMDevice *slave, NMConnection *connection)
-{
- gboolean success, no_firmware = FALSE;
- const char *iface = nm_device_get_ip_iface (device);
- const char *slave_iface = nm_device_get_ip_iface (slave);
-
- nm_device_hw_take_down (slave, TRUE);
-
- success = nm_system_bond_enslave (nm_device_get_ip_ifindex (device),
- iface,
- nm_device_get_ip_ifindex (slave),
- slave_iface);
-
- nm_device_hw_bring_up (slave, TRUE, &no_firmware);
-
- if (success) {
- nm_log_info (LOGD_BOND, "(%s): enslaved bond slave %s", iface, slave_iface);
- g_object_notify (G_OBJECT (device), "slaves");
- }
-
- return success;
-}
-
-static gboolean
-release_slave (NMDevice *device, NMDevice *slave)
-{
- gboolean success, no_firmware = FALSE;
-
- success = nm_system_bond_release (nm_device_get_ip_ifindex (device),
- nm_device_get_ip_iface (device),
- nm_device_get_ip_ifindex (slave),
- nm_device_get_ip_iface (slave));
- nm_log_info (LOGD_BOND, "(%s): released bond slave %s (success %d)",
- nm_device_get_ip_iface (device),
- nm_device_get_ip_iface (slave),
- success);
- g_object_notify (G_OBJECT (device), "slaves");
-
- /* Kernel bonding code "closes" the slave when releasing it, (which clears
- * IFF_UP), so we must bring it back up here to ensure carrier changes and
- * other state is noticed by the now-released slave.
- */
- if (!nm_device_hw_bring_up (slave, TRUE, &no_firmware)) {
- nm_log_warn (LOGD_BOND, "(%s): released bond slave could not be brought up.",
- nm_device_get_iface (slave));
- }
-
- return success;
-}
-
-/******************************************************************/
-
-NMDevice *
-nm_device_bond_new (const char *udi, const char *iface)
-{
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
-
- return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BOND,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, "bonding",
- NM_DEVICE_TYPE_DESC, "Bond",
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BOND,
- NM_DEVICE_IS_MASTER, TRUE,
- NULL);
-}
-
-static void
-constructed (GObject *object)
-{
- G_OBJECT_CLASS (nm_device_bond_parent_class)->constructed (object);
-
- nm_log_dbg (LOGD_HW | LOGD_BOND, "(%s): kernel ifindex %d",
- nm_device_get_iface (NM_DEVICE (object)),
- nm_device_get_ifindex (NM_DEVICE (object)));
-}
-
-static void
-nm_device_bond_init (NMDeviceBond * self)
-{
-}
-
-static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
- GPtrArray *slaves;
- GSList *list, *iter;
- char *hwaddr;
-
- switch (prop_id) {
- case PROP_HW_ADDRESS:
- hwaddr = nm_utils_hwaddr_ntoa (priv->hw_addr, nm_utils_hwaddr_type (priv->hw_addr_len));
- g_value_take_string (value, hwaddr);
- break;
- case PROP_CARRIER:
- g_value_set_boolean (value, nm_device_wired_get_carrier (NM_DEVICE_WIRED (object)));
- break;
- case PROP_SLAVES:
- slaves = g_ptr_array_new ();
- list = nm_device_master_get_slaves (NM_DEVICE (object));
- for (iter = list; iter; iter = iter->next)
- g_ptr_array_add (slaves, g_strdup (nm_device_get_path (NM_DEVICE (iter->data))));
- g_slist_free (list);
- g_value_take_boxed (value, slaves);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-nm_device_bond_class_init (NMDeviceBondClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
- NMDeviceWiredClass *wired_class = NM_DEVICE_WIRED_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMDeviceBondPrivate));
-
- /* virtual methods */
- object_class->constructed = constructed;
- object_class->get_property = get_property;
- object_class->set_property = set_property;
-
- parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->update_hw_address = update_hw_address;
- parent_class->get_hw_address = get_hw_address;
- parent_class->is_available = is_available;
- parent_class->get_best_auto_connection = get_best_auto_connection;
- parent_class->check_connection_compatible = check_connection_compatible;
- parent_class->complete_connection = complete_connection;
-
- parent_class->spec_match_list = spec_match_list;
- parent_class->connection_match_config = connection_match_config;
-
- parent_class->act_stage1_prepare = act_stage1_prepare;
- parent_class->enslave_slave = enslave_slave;
- parent_class->release_slave = release_slave;
-
- wired_class->carrier_action = carrier_action;
-
- /* properties */
- g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_BOND_HW_ADDRESS,
- "Active MAC Address",
- "Currently set hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_BOND_CARRIER,
- "Carrier",
- "Carrier",
- FALSE,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_BOND_SLAVES,
- "Slaves",
- "Slaves",
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
-
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceBondClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_bond_object_info);
-
- dbus_g_error_domain_register (NM_BOND_ERROR, NULL, NM_TYPE_BOND_ERROR);
-}
diff --git a/src/nm-device-bridge-glue.h b/src/nm-device-bridge-glue.h
new file mode 100644
index 000000000..63b86954a
--- /dev/null
+++ b/src/nm-device-bridge-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_bridge_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_bridge_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_bridge_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_bridge_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_bridge_object_info = { 1,
+ dbus_glib_nm_device_bridge_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Bridge\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Bridge\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Bridge\0Carrier\0carrier\0read\0org.freedesktop.NetworkManager.Device.Bridge\0Slaves\0slaves\0read\0\0"
+};
+
diff --git a/src/nm-device-bridge.c b/src/nm-device-bridge.c
deleted file mode 100644
index 39275c8b4..000000000
--- a/src/nm-device-bridge.c
+++ /dev/null
@@ -1,579 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright 2011 - 2012 Red Hat, Inc.
- */
-
-#include "config.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <netinet/ether.h>
-
-#include "nm-device-bridge.h"
-#include "nm-logging.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-utils.h"
-#include "NetworkManagerUtils.h"
-#include "nm-device-private.h"
-#include "nm-netlink-monitor.h"
-#include "nm-dbus-glib-types.h"
-#include "nm-enum-types.h"
-#include "nm-system.h"
-
-#include "nm-device-bridge-glue.h"
-
-
-G_DEFINE_TYPE (NMDeviceBridge, nm_device_bridge, NM_TYPE_DEVICE_WIRED)
-
-#define NM_DEVICE_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgePrivate))
-
-#define NM_BRIDGE_ERROR (nm_bridge_error_quark ())
-
-typedef struct {
- guint8 hw_addr[NM_UTILS_HWADDR_LEN_MAX];
- gsize hw_addr_len;
-} NMDeviceBridgePrivate;
-
-enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- PROP_0,
- PROP_HW_ADDRESS,
- PROP_CARRIER,
- PROP_SLAVES,
-
- LAST_PROP
-};
-
-/******************************************************************/
-
-static GQuark
-nm_bridge_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-bridge-error");
- return quark;
-}
-
-/******************************************************************/
-
-static void
-carrier_action (NMDeviceWired *self, NMDeviceState state, gboolean carrier)
-{
- /* Bridge carrier state follows IFF_UP with no ports, and port carrier
- * states when ports are added. Thus carrier isn't useful when deciding
- * to auto-activate the bridge master. Also, like bond masters, when the
- * carrier state changes due to slave changes, we shouldn't deactivate the
- * bridge since the user may be reconfiguring ports.
- *
- * For these reasons, carrier changes are effectively ignored by overriding
- * the parent class' carrier handling and doing nothing.
- */
-}
-
-static void
-update_hw_address (NMDevice *dev)
-{
- NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (dev);
- gsize addrlen;
- gboolean changed = FALSE;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- priv->hw_addr_len = addrlen;
- if (changed)
- g_object_notify (G_OBJECT (dev), NM_DEVICE_BRIDGE_HW_ADDRESS);
- }
-}
-
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- *out_len = NM_DEVICE_BRIDGE_GET_PRIVATE (device)->hw_addr_len;
- return NM_DEVICE_BRIDGE_GET_PRIVATE (device)->hw_addr;
-}
-
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_NM_SUPPORTED;
-}
-
-static gboolean
-is_available (NMDevice *dev)
-{
- if (NM_DEVICE_GET_CLASS (dev)->hw_is_up)
- return NM_DEVICE_GET_CLASS (dev)->hw_is_up (dev);
- return FALSE;
-}
-
-static gboolean
-match_bridge_connection (NMDevice *device, NMConnection *connection, GError **error)
-{
- const char *iface;
- NMSettingBridge *s_bridge;
-
- s_bridge = nm_connection_get_setting_bridge (connection);
- if (!s_bridge || !nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME)) {
- g_set_error (error, NM_BRIDGE_ERROR, NM_BRIDGE_ERROR_CONNECTION_NOT_BRIDGE,
- "The connection was not a bridge connection.");
- return FALSE;
- }
-
- /* Bridge connections must specify the virtual interface name */
- iface = nm_connection_get_virtual_iface_name (connection);
- if (!iface || strcmp (nm_device_get_iface (device), iface)) {
- g_set_error (error, NM_BRIDGE_ERROR, NM_BRIDGE_ERROR_CONNECTION_INVALID,
- "The bridge connection virtual interface name did not match.");
- return FALSE;
- }
-
- return TRUE;
-}
-
-static NMConnection *
-get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
-{
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- NMSettingConnection *s_con;
-
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
- if ( nm_setting_connection_get_autoconnect (s_con)
- && match_bridge_connection (dev, connection, NULL))
- return connection;
- }
- return NULL;
-}
-
-static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
-{
- return match_bridge_connection (device, connection, error);
-}
-
-static gboolean
-complete_connection (NMDevice *device,
- NMConnection *connection,
- const char *specific_object,
- const GSList *existing_connections,
- GError **error)
-{
- NMSettingBridge *s_bridge, *tmp;
- guint32 i = 0;
- char *name;
- const GSList *iter;
- gboolean found;
-
- nm_utils_complete_generic (connection,
- NM_SETTING_BRIDGE_SETTING_NAME,
- existing_connections,
- _("Bridge connection %d"),
- NULL,
- TRUE);
-
- s_bridge = nm_connection_get_setting_bridge (connection);
- if (!s_bridge) {
- s_bridge = (NMSettingBridge *) nm_setting_bridge_new ();
- nm_connection_add_setting (connection, NM_SETTING (s_bridge));
- }
-
- /* Grab the first name that doesn't exist in either our connections
- * or a device on the system.
- */
- while (i < 500 && !nm_setting_bridge_get_interface_name (s_bridge)) {
- name = g_strdup_printf ("br%u", i);
- /* check interface names */
- if (nm_netlink_iface_to_index (name) < 0) {
- /* check existing bridge connections */
- for (iter = existing_connections, found = FALSE; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = iter->data;
-
- tmp = nm_connection_get_setting_bridge (candidate);
- if (tmp && nm_connection_is_type (candidate, NM_SETTING_BRIDGE_SETTING_NAME)) {
- if (g_strcmp0 (nm_setting_bridge_get_interface_name (tmp), name) == 0) {
- found = TRUE;
- break;
- }
- }
- }
-
- if (!found)
- g_object_set (G_OBJECT (s_bridge), NM_SETTING_BRIDGE_INTERFACE_NAME, name, NULL);
- }
-
- g_free (name);
- i++;
- }
-
- return TRUE;
-}
-
-static gboolean
-spec_match_list (NMDevice *device, const GSList *specs)
-{
- NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (device);
- char *hwaddr;
- gboolean matched;
-
- hwaddr = nm_utils_hwaddr_ntoa (priv->hw_addr, nm_utils_hwaddr_type (priv->hw_addr_len));
- matched = nm_match_spec_hwaddr (specs, hwaddr);
- g_free (hwaddr);
-
- return matched;
-}
-
-static gboolean
-bridge_match_config (NMDevice *self, NMConnection *connection)
-{
- NMSettingBridge *s_bridge;
- const char *ifname;
-
- s_bridge = nm_connection_get_setting_bridge (connection);
- if (!s_bridge)
- return FALSE;
-
- /* Interface name */
- ifname = nm_setting_bridge_get_interface_name (s_bridge);
- if (g_strcmp0 (ifname, nm_device_get_ip_iface (self)) != 0)
- return FALSE;
-
- return TRUE;
-}
-
-static NMConnection *
-connection_match_config (NMDevice *self, const GSList *connections)
-{
- const GSList *iter;
- GSList *bridge_matches;
- NMConnection *match;
-
- /* First narrow @connections down to those that match in their
- * NMSettingBridge configuration.
- */
- bridge_matches = NULL;
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
-
- if (!nm_connection_is_type (candidate, NM_SETTING_BRIDGE_SETTING_NAME))
- continue;
- if (!bridge_match_config (self, candidate))
- continue;
-
- bridge_matches = g_slist_prepend (bridge_matches, candidate);
- }
-
- /* Now pass those to the super method, which will check IP config */
- bridge_matches = g_slist_reverse (bridge_matches);
- match = NM_DEVICE_CLASS (nm_device_bridge_parent_class)->connection_match_config (self, bridge_matches);
- g_slist_free (bridge_matches);
-
- return match;
-}
-
-/******************************************************************/
-
-static void
-set_sysfs_uint (const char *iface,
- GObject *obj,
- const char *obj_prop,
- const char *dir,
- const char *sysfs_prop,
- gboolean default_if_zero,
- gboolean user_hz_compensate)
-{
- char *path, *s;
- GParamSpec *pspec;
- GValue val = { 0 };
- guint32 uval = 0;
-
- pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (obj), obj_prop);
- g_return_if_fail (pspec != NULL);
-
- /* Get the property's value */
- g_value_init (&val, G_PARAM_SPEC_VALUE_TYPE (pspec));
- g_object_get_property (obj, obj_prop, &val);
- if (G_VALUE_HOLDS_BOOLEAN (&val))
- uval = g_value_get_boolean (&val) ? 1 : 0;
- else if (G_VALUE_HOLDS_UINT (&val)) {
- uval = g_value_get_uint (&val);
-
- /* zero means "unspecified" for some NM properties but isn't in the
- * allowed kernel range, so reset the property to the default value.
- */
- if (default_if_zero && uval == 0) {
- g_value_unset (&val);
- g_value_init (&val, G_PARAM_SPEC_VALUE_TYPE (pspec));
- g_param_value_set_default (pspec, &val);
- uval = g_value_get_uint (&val);
- }
- } else
- g_assert_not_reached ();
-
- g_value_unset (&val);
-
- /* Linux kernel bridge interfaces use 'centiseconds' for time-based values.
- * In reality it's not centiseconds, but depends on HZ and USER_HZ, which
- * is almost always works out to be a multiplier of 100, so we can assume
- * centiseconds. See clock_t_to_jiffies().
- */
- if (user_hz_compensate)
- uval *= 100;
-
- path = g_strdup_printf ("/sys/class/net/%s/%s/%s", iface, dir, sysfs_prop);
- s = g_strdup_printf ("%u", uval);
- /* FIXME: how should failure be handled? */
- nm_utils_do_sysctl (path, s);
- g_free (path);
- g_free (s);
-}
-
-static NMActStageReturn
-act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
-{
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
- NMConnection *connection;
- NMSettingBridge *s_bridge;
- const char *iface;
-
- g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
- ret = NM_DEVICE_CLASS (nm_device_bridge_parent_class)->act_stage1_prepare (dev, reason);
- if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
- connection = nm_device_get_connection (dev);
- g_assert (connection);
-
- s_bridge = nm_connection_get_setting_bridge (connection);
- g_assert (s_bridge);
-
- iface = nm_device_get_ip_iface (dev);
- g_assert (iface);
-
- set_sysfs_uint (iface, G_OBJECT (s_bridge), NM_SETTING_BRIDGE_STP, "bridge", "stp_state", FALSE, FALSE);
- set_sysfs_uint (iface, G_OBJECT (s_bridge), NM_SETTING_BRIDGE_PRIORITY, "bridge", "priority", TRUE, FALSE);
- set_sysfs_uint (iface, G_OBJECT (s_bridge), NM_SETTING_BRIDGE_FORWARD_DELAY, "bridge", "forward_delay", TRUE, TRUE);
- set_sysfs_uint (iface, G_OBJECT (s_bridge), NM_SETTING_BRIDGE_HELLO_TIME, "bridge", "hello_time", TRUE, TRUE);
- set_sysfs_uint (iface, G_OBJECT (s_bridge), NM_SETTING_BRIDGE_MAX_AGE, "bridge", "max_age", TRUE, TRUE);
- set_sysfs_uint (iface, G_OBJECT (s_bridge), NM_SETTING_BRIDGE_AGEING_TIME, "bridge", "ageing_time", TRUE, TRUE);
- }
- return ret;
-}
-
-static gboolean
-enslave_slave (NMDevice *device, NMDevice *slave, NMConnection *connection)
-{
- gboolean success;
- NMSettingBridgePort *s_port;
- const char *iface = nm_device_get_ip_iface (device);
- const char *slave_iface = nm_device_get_ip_iface (slave);
-
- success = nm_system_bridge_attach (nm_device_get_ip_ifindex (device),
- iface,
- nm_device_get_ip_ifindex (slave),
- slave_iface);
- if (!success)
- return FALSE;
-
- /* Set port properties */
- s_port = nm_connection_get_setting_bridge_port (connection);
- if (s_port) {
- set_sysfs_uint (slave_iface, G_OBJECT (s_port), NM_SETTING_BRIDGE_PORT_PRIORITY, "brport", "priority", TRUE, FALSE);
- set_sysfs_uint (slave_iface, G_OBJECT (s_port), NM_SETTING_BRIDGE_PORT_PATH_COST, "brport", "path_cost", TRUE, FALSE);
- set_sysfs_uint (slave_iface, G_OBJECT (s_port), NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, "brport", "hairpin_mode", FALSE, FALSE);
- }
-
- nm_log_info (LOGD_BRIDGE, "(%s): attached bridge port %s", iface, slave_iface);
-
- g_object_notify (G_OBJECT (device), NM_DEVICE_BRIDGE_SLAVES);
-
- return TRUE;
-}
-
-static gboolean
-release_slave (NMDevice *device, NMDevice *slave)
-{
- gboolean success;
-
- success = nm_system_bridge_detach (nm_device_get_ip_ifindex (device),
- nm_device_get_ip_iface (device),
- nm_device_get_ip_ifindex (slave),
- nm_device_get_ip_iface (slave));
- nm_log_info (LOGD_BRIDGE, "(%s): detached bridge port %s (success %d)",
- nm_device_get_ip_iface (device),
- nm_device_get_ip_iface (slave),
- success);
- g_object_notify (G_OBJECT (device), NM_DEVICE_BRIDGE_SLAVES);
- return success;
-}
-
-/******************************************************************/
-
-NMDevice *
-nm_device_bridge_new (const char *udi, const char *iface)
-{
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
-
- return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BRIDGE,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, "bridge",
- NM_DEVICE_TYPE_DESC, "Bridge",
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BRIDGE,
- NM_DEVICE_IS_MASTER, TRUE,
- NULL);
-}
-
-static void
-constructed (GObject *object)
-{
- G_OBJECT_CLASS (nm_device_bridge_parent_class)->constructed (object);
-
- nm_log_dbg (LOGD_HW | LOGD_BRIDGE, "(%s): kernel ifindex %d",
- nm_device_get_iface (NM_DEVICE (object)),
- nm_device_get_ifindex (NM_DEVICE (object)));
-}
-
-static void
-nm_device_bridge_init (NMDeviceBridge * self)
-{
-}
-
-static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object);
- GPtrArray *slaves;
- GSList *list, *iter;
- char *hwaddr;
-
- switch (prop_id) {
- case PROP_HW_ADDRESS:
- hwaddr = nm_utils_hwaddr_ntoa (priv->hw_addr, nm_utils_hwaddr_type (priv->hw_addr_len));
- g_value_take_string (value, hwaddr);
- break;
- case PROP_CARRIER:
- g_value_set_boolean (value, nm_device_wired_get_carrier (NM_DEVICE_WIRED (object)));
- break;
- case PROP_SLAVES:
- slaves = g_ptr_array_new ();
- list = nm_device_master_get_slaves (NM_DEVICE (object));
- for (iter = list; iter; iter = iter->next)
- g_ptr_array_add (slaves, g_strdup (nm_device_get_path (NM_DEVICE (iter->data))));
- g_slist_free (list);
- g_value_take_boxed (value, slaves);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
- NMDeviceWiredClass *wired_class = NM_DEVICE_WIRED_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMDeviceBridgePrivate));
-
- /* virtual methods */
- object_class->constructed = constructed;
- object_class->get_property = get_property;
- object_class->set_property = set_property;
-
- parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->update_hw_address = update_hw_address;
- parent_class->get_hw_address = get_hw_address;
- parent_class->is_available = is_available;
- parent_class->get_best_auto_connection = get_best_auto_connection;
- parent_class->check_connection_compatible = check_connection_compatible;
- parent_class->complete_connection = complete_connection;
-
- parent_class->spec_match_list = spec_match_list;
- parent_class->connection_match_config = connection_match_config;
-
- parent_class->act_stage1_prepare = act_stage1_prepare;
- parent_class->enslave_slave = enslave_slave;
- parent_class->release_slave = release_slave;
-
- wired_class->carrier_action = carrier_action;
-
- /* properties */
- g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_BRIDGE_HW_ADDRESS,
- "Active MAC Address",
- "Currently set hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_BRIDGE_CARRIER,
- "Carrier",
- "Carrier",
- FALSE,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_BRIDGE_SLAVES,
- "Slaves",
- "Slaves",
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
-
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceBridgeClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_bridge_object_info);
-
- dbus_g_error_domain_register (NM_BRIDGE_ERROR, NULL, NM_TYPE_BRIDGE_ERROR);
-}
diff --git a/src/nm-device-ethernet-glue.h b/src/nm-device-ethernet-glue.h
new file mode 100644
index 000000000..81630086a
--- /dev/null
+++ b/src/nm-device-ethernet-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_ethernet_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_ethernet_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_ethernet_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_ethernet_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_ethernet_object_info = { 1,
+ dbus_glib_nm_device_ethernet_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Wired\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Wired\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Wired\0PermHwAddress\0perm_hw_address\0read\0org.freedesktop.NetworkManager.Device.Wired\0Speed\0speed\0read\0org.freedesktop.NetworkManager.Device.Wired\0Carrier\0carrier\0read\0\0"
+};
+
diff --git a/src/nm-device-factory.h b/src/nm-device-factory.h
deleted file mode 100644
index 8a4f44672..000000000
--- a/src/nm-device-factory.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
- */
-
-#ifndef NM_DEVICE_FACTORY_H
-#define NM_DEVICE_FACTORY_H
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gudev/gudev.h>
-
-#include "NetworkManager.h"
-
-/* WARNING: this file is private API between NetworkManager and its internal
- * device plugins. Its API can change at any time and is not guaranteed to be
- * stable. NM and device plugins are distributed together and this API is
- * not meant to enable third-party plugins.
- */
-
-/**
- * nm_device_factory_create_device:
- * @device: GUdev device object representing the device
- * @devpath: sysfs path of the device
- * @ifname: interface name of the device
- * @driver: driver of the device
- * @error: error for failure information
- *
- * Creates a #NMDevice subclass if the given information represents a device
- * the factory is capable of creating. If the information does represent a
- * device the factory is capable of creating, but the device could not be
- * created, %NULL should be returned and @error should be set. If the
- * factory is not capable of creating a device with the given information
- * (ie, the factory creates Ethernet devices but the information represents
- * a WiFi device) it should return %NULL and leave @error untouched.
- *
- * Returns: the device object (a subclass of #NMDevice) or %NULL
- */
-GObject *nm_device_factory_create_device (GUdevDevice *device,
- const char *devpath,
- const char *ifname,
- const char *driver,
- GError **error);
-
-/* Should match nm_device_factory() */
-typedef GObject * (*NMDeviceFactoryCreateFunc) (GUdevDevice *device,
- const char *devpath,
- const char *ifname,
- const char *driver,
- GError **error);
-
-/**
- * nm_device_factory_get_priority:
- *
- * Returns the priority of this plugin. Higher numbers mean a higher priority.
- *
- * Returns: plugin priority
- */
-guint32 nm_device_factory_get_priority (void);
-
-typedef guint32 (*NMDeviceFactoryPriorityFunc) (void);
-
-/**
- * nm_device_factory_get_type:
- *
- * Returns the type of device this factory can create. Only one factory for
- * each type of device is allowed.
- *
- * Returns: the %NMDeviceType
- */
-NMDeviceType nm_device_factory_get_type (void);
-
-typedef NMDeviceType (*NMDeviceFactoryTypeFunc) (void);
-
-#endif /* NM_DEVICE_FACTORY_H */
-
diff --git a/src/nm-device-generic-glue.h b/src/nm-device-generic-glue.h
new file mode 100644
index 000000000..472ade14f
--- /dev/null
+++ b/src/nm-device-generic-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_generic_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_generic_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_generic_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_generic_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_generic_object_info = { 1,
+ dbus_glib_nm_device_generic_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Generic\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Generic\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Generic\0TypeDescription\0type_description\0read\0\0"
+};
+
diff --git a/src/nm-device-glue.h b/src/nm-device-glue.h
new file mode 100644
index 000000000..55b7c5585
--- /dev/null
+++ b/src/nm-device-glue.h
@@ -0,0 +1,78 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:POINTER */
+#define dbus_glib_marshal_nm_device_VOID__POINTER g_cclosure_marshal_VOID__POINTER
+#define dbus_glib_marshal_nm_device_NONE__POINTER dbus_glib_marshal_nm_device_VOID__POINTER
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_methods[] = {
+ { (GCallback) impl_device_disconnect, dbus_glib_marshal_nm_device_NONE__POINTER, 0 },
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_object_info = { 1,
+ dbus_glib_nm_device_methods,
+ 1,
+"org.freedesktop.NetworkManager.Device\0Disconnect\0A\0\0\0",
+"org.freedesktop.NetworkManager.Device\0StateChanged\0\0",
+"org.freedesktop.NetworkManager.Device\0Udi\0udi\0read\0org.freedesktop.NetworkManager.Device\0Interface\0interface\0read\0org.freedesktop.NetworkManager.Device\0IpInterface\0ip_interface\0read\0org.freedesktop.NetworkManager.Device\0Driver\0driver\0read\0org.freedesktop.NetworkManager.Device\0DriverVersion\0driver_version\0read\0org.freedesktop.NetworkManager.Device\0FirmwareVersion\0firmware_version\0read\0org.freedesktop.NetworkManager.Device\0Capabilities\0capabilities\0read\0org.freedesktop.NetworkManager.Device\0Ip4Address\0ip4_address\0read\0org.freedesktop.NetworkManager.Device\0State\0state\0read\0org.freedesktop.NetworkManager.Device\0StateReason\0state_reason\0read\0org.freedesktop.NetworkManager.Device\0ActiveConnection\0active_connection\0read\0org.freedesktop.NetworkManager.Device\0Ip4Config\0ip4_config\0read\0org.freedesktop.NetworkManager.Device\0Dhcp4Config\0dhcp4_config\0read\0org.freedesktop.NetworkManager.Device\0Ip6Config\0ip6_config\0read\0org.freedesktop.NetworkManager.Device\0Dhcp6Config\0dhcp6_config\0read\0org.freedesktop.NetworkManager.Device\0Managed\0managed\0read\0org.freedesktop.NetworkManager.Device\0Autoconnect\0autoconnect\0readwrite\0org.freedesktop.NetworkManager.Device\0FirmwareMissing\0firmware_missing\0read\0org.freedesktop.NetworkManager.Device\0DeviceType\0device_type\0read\0org.freedesktop.NetworkManager.Device\0AvailableConnections\0available_connections\0read\0org.freedesktop.NetworkManager.Device\0PhysicalPortId\0physical_port_id\0read\0org.freedesktop.NetworkManager.Device\0Mtu\0mtu\0read\0\0"
+};
+
diff --git a/src/nm-device-gre-glue.h b/src/nm-device-gre-glue.h
new file mode 100644
index 000000000..1347170d3
--- /dev/null
+++ b/src/nm-device-gre-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_gre_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_gre_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_gre_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_gre_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_gre_object_info = { 1,
+ dbus_glib_nm_device_gre_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Gre\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Gre\0Parent\0parent\0read\0org.freedesktop.NetworkManager.Device.Gre\0InputFlags\0input_flags\0read\0org.freedesktop.NetworkManager.Device.Gre\0OutputFlags\0output_flags\0read\0org.freedesktop.NetworkManager.Device.Gre\0InputKey\0input_key\0read\0org.freedesktop.NetworkManager.Device.Gre\0OutputKey\0output_key\0read\0org.freedesktop.NetworkManager.Device.Gre\0Local\0local\0read\0org.freedesktop.NetworkManager.Device.Gre\0Remote\0remote\0read\0org.freedesktop.NetworkManager.Device.Gre\0Ttl\0ttl\0read\0org.freedesktop.NetworkManager.Device.Gre\0Tos\0tos\0read\0org.freedesktop.NetworkManager.Device.Gre\0PathMtuDiscovery\0path_mtu_discovery\0read\0\0"
+};
+
diff --git a/src/nm-device-infiniband-glue.h b/src/nm-device-infiniband-glue.h
new file mode 100644
index 000000000..a762f57cb
--- /dev/null
+++ b/src/nm-device-infiniband-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_infiniband_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_infiniband_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_infiniband_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_infiniband_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_infiniband_object_info = { 1,
+ dbus_glib_nm_device_infiniband_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Infiniband\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Infiniband\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Infiniband\0Carrier\0carrier\0read\0\0"
+};
+
diff --git a/src/nm-device-macvlan-glue.h b/src/nm-device-macvlan-glue.h
new file mode 100644
index 000000000..18f5d602e
--- /dev/null
+++ b/src/nm-device-macvlan-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_macvlan_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_macvlan_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_macvlan_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_macvlan_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_macvlan_object_info = { 1,
+ dbus_glib_nm_device_macvlan_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Macvlan\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Macvlan\0Parent\0parent\0read\0org.freedesktop.NetworkManager.Device.Macvlan\0Mode\0mode\0read\0org.freedesktop.NetworkManager.Device.Macvlan\0NoPromisc\0no_promisc\0read\0\0"
+};
+
diff --git a/src/nm-device-team-glue.h b/src/nm-device-team-glue.h
new file mode 100644
index 000000000..405975c80
--- /dev/null
+++ b/src/nm-device-team-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_team_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_team_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_team_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_team_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_team_object_info = { 1,
+ dbus_glib_nm_device_team_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Team\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Team\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Team\0Carrier\0carrier\0read\0org.freedesktop.NetworkManager.Device.Team\0Slaves\0slaves\0read\0\0"
+};
+
diff --git a/src/nm-device-tun-glue.h b/src/nm-device-tun-glue.h
new file mode 100644
index 000000000..96cea85b5
--- /dev/null
+++ b/src/nm-device-tun-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_tun_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_tun_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_tun_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_tun_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_tun_object_info = { 1,
+ dbus_glib_nm_device_tun_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Tun\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Tun\0Owner\0owner\0read\0org.freedesktop.NetworkManager.Device.Tun\0Group\0group\0read\0org.freedesktop.NetworkManager.Device.Tun\0Mode\0mode\0read\0org.freedesktop.NetworkManager.Device.Tun\0NoPi\0no_pi\0read\0org.freedesktop.NetworkManager.Device.Tun\0VnetHdr\0vnet_hdr\0read\0org.freedesktop.NetworkManager.Device.Tun\0MultiQueue\0multi_queue\0read\0\0"
+};
+
diff --git a/src/nm-device-veth-glue.h b/src/nm-device-veth-glue.h
new file mode 100644
index 000000000..f411964e2
--- /dev/null
+++ b/src/nm-device-veth-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_veth_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_veth_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_veth_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_veth_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_veth_object_info = { 1,
+ dbus_glib_nm_device_veth_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Veth\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Veth\0Peer\0peer\0read\0\0"
+};
+
diff --git a/src/nm-device-vlan-glue.h b/src/nm-device-vlan-glue.h
new file mode 100644
index 000000000..c9e51d542
--- /dev/null
+++ b/src/nm-device-vlan-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_vlan_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_vlan_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_vlan_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_vlan_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_vlan_object_info = { 1,
+ dbus_glib_nm_device_vlan_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Vlan\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Vlan\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Vlan\0Carrier\0carrier\0read\0org.freedesktop.NetworkManager.Device.Vlan\0VlanId\0vlan_id\0read\0\0"
+};
+
diff --git a/src/nm-device-vlan.c b/src/nm-device-vlan.c
deleted file mode 100644
index d8e1f3c1d..000000000
--- a/src/nm-device-vlan.c
+++ /dev/null
@@ -1,777 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright 2011 - 2012 Red Hat, Inc.
- */
-
-#include "config.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <sys/socket.h>
-#include <linux/if.h>
-#include <netinet/ether.h>
-
-#include "nm-device-vlan.h"
-#include "nm-logging.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-utils.h"
-#include "NetworkManagerUtils.h"
-#include "nm-device-private.h"
-#include "nm-netlink-monitor.h"
-#include "nm-enum-types.h"
-#include "nm-system.h"
-
-#include "nm-device-vlan-glue.h"
-
-
-G_DEFINE_TYPE (NMDeviceVlan, nm_device_vlan, NM_TYPE_DEVICE)
-
-#define NM_DEVICE_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VLAN, NMDeviceVlanPrivate))
-
-#define NM_VLAN_ERROR (nm_vlan_error_quark ())
-
-typedef struct {
- gboolean disposed;
-
- NMDevice *parent;
- guint parent_state_id;
-
- guint vlan_id;
-
- guint8 hw_addr[NM_UTILS_HWADDR_LEN_MAX];
- guint hw_addr_len;
-
- gboolean carrier;
- NMNetlinkMonitor *monitor;
- gulong link_connected_id;
- gulong link_disconnected_id;
- guint carrier_action_defer_id;
-} NMDeviceVlanPrivate;
-
-enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- PROP_0,
- PROP_HW_ADDRESS,
- PROP_CARRIER,
- PROP_VLAN_ID,
-
- LAST_PROP
-};
-
-static void
-set_carrier (NMDeviceVlan *self,
- const gboolean carrier,
- const gboolean defer_action);
-
-/******************************************************************/
-
-static GQuark
-nm_vlan_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-vlan-error");
- return quark;
-}
-
-/******************************************************************/
-
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- /* We assume VLAN interfaces always support carrier detect */
- return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_NM_SUPPORTED;
-}
-
-static gboolean
-get_carrier_sync (NMDeviceVlan *self)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
- GError *error = NULL;
- guint32 ifflags = 0;
-
- /* Get initial link state */
- if (!nm_netlink_monitor_get_flags_sync (priv->monitor,
- nm_device_get_ip_ifindex (NM_DEVICE (self)),
- &ifflags,
- &error)) {
- nm_log_warn (LOGD_HW | LOGD_VLAN,
- "(%s): couldn't get carrier state: (%d) %s",
- nm_device_get_ip_iface (NM_DEVICE (self)),
- error ? error->code : -1,
- (error && error->message) ? error->message : "unknown");
- g_clear_error (&error);
- }
-
- return !!(ifflags & IFF_LOWER_UP);
-}
-
-static gboolean
-hw_bring_up (NMDevice *dev, gboolean *no_firmware)
-{
- gboolean success = FALSE, carrier;
- guint i = 20;
-
- while (i-- > 0 && !success) {
- success = NM_DEVICE_CLASS (nm_device_vlan_parent_class)->hw_bring_up (dev, no_firmware);
- g_usleep (50);
- }
-
- if (success) {
- /* Block a bit to make sure the carrier comes on; it's delayed a bit
- * after setting the interface up.
- */
- i = 20;
- while (i-- > 0) {
- carrier = get_carrier_sync (NM_DEVICE_VLAN (dev));
- set_carrier (NM_DEVICE_VLAN (dev), carrier, carrier ? FALSE : TRUE);
- if (carrier)
- break;
- g_usleep (100);
- }
- }
- return success;
-}
-
-static void
-update_hw_address (NMDevice *dev)
-{
- NMDeviceVlan *self = NM_DEVICE_VLAN (dev);
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
- gsize addrlen;
- gboolean changed = FALSE;
-
- addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
- if (addrlen) {
- priv->hw_addr_len = addrlen;
- if (changed)
- g_object_notify (G_OBJECT (self), NM_DEVICE_VLAN_HW_ADDRESS);
- }
-}
-
-static const guint8 *
-get_hw_address (NMDevice *device, guint *out_len)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
-
- *out_len = priv->hw_addr_len;
- return priv->hw_addr;
-}
-
-static gboolean
-can_interrupt_activation (NMDevice *dev)
-{
- /* Can interrupt activation if the carrier drops while activating */
- return NM_DEVICE_VLAN_GET_PRIVATE (dev)->carrier ? FALSE : TRUE;
-}
-
-static gboolean
-is_available (NMDevice *dev)
-{
- return NM_DEVICE_VLAN_GET_PRIVATE (dev)->carrier ? TRUE : FALSE;
-}
-
-/******************************************************************/
-
-static gboolean
-match_parent (NMDeviceVlan *self, const char *parent, GError **error)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
-
- g_return_val_if_fail (parent != NULL, FALSE);
-
- if (nm_utils_is_uuid (parent)) {
- NMActRequest *parent_req;
- NMConnection *parent_connection;
-
- /* If the parent is a UUID, the connection matches if our parent
- * device has that connection activated.
- */
-
- parent_req = nm_device_get_act_request (priv->parent);
- if (!parent_req) {
- g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "Parent interface not active; could not match UUID");
- return FALSE;
- }
-
- parent_connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (parent_req));
- if (!parent_connection) {
- g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "Parent interface had no connection; could not match UUID");
- return FALSE;
- }
- if (g_strcmp0 (parent, nm_connection_get_uuid (parent_connection)) != 0) {
- g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "Parent interface UUID did not match connection UUID");
- return FALSE;
- }
- } else {
- /* interface name */
- if (g_strcmp0 (parent, nm_device_get_ip_iface (priv->parent)) != 0) {
- g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "Parent interface name did not match connection");
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static gboolean
-match_vlan_connection (NMDeviceVlan *self, NMConnection *connection, GError **error)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
- NMSettingVlan *s_vlan;
- const char *parent, *iface = NULL;
-
- s_vlan = nm_connection_get_setting_vlan (connection);
- if (!s_vlan) {
- g_set_error (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "The connection was not a VLAN connection.");
- return FALSE;
- }
-
- if (nm_setting_vlan_get_id (s_vlan) != priv->vlan_id) {
- g_set_error (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "The connection's VLAN ID did not match the device's VLAN ID.");
- return FALSE;
- }
-
- /* Check parent interface; could be an interface name or a UUID */
- parent = nm_setting_vlan_get_parent (s_vlan);
- if (parent) {
- if (!match_parent (self, parent, error))
- return FALSE;
- } else {
- /* Parent could be a MAC address in a hardware-specific setting */
- if (!nm_device_hwaddr_matches (priv->parent, connection, NULL, 0, TRUE)) {
- g_set_error (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "Failed to match the VLAN parent interface via hardware address.");
- return FALSE;
- }
- }
-
- /* Ensure the interface name matches. If not specified we assume a match
- * since both the parent interface and the VLAN ID matched by the time we
- * get here.
- */
- iface = nm_connection_get_virtual_iface_name (connection);
- if (iface) {
- if (g_strcmp0 (nm_device_get_ip_iface (NM_DEVICE (self)), iface) != 0) {
- g_set_error (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "The VLAN connection virtual interface name did not match.");
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static NMConnection *
-get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
-{
- GSList *iter;
-
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
-
- if (match_vlan_connection (NM_DEVICE_VLAN (dev), connection, NULL))
- return connection;
- }
- return NULL;
-}
-
-static gboolean
-check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
-{
- return match_vlan_connection (NM_DEVICE_VLAN (device), connection, error);
-}
-
-static gboolean
-complete_connection (NMDevice *device,
- NMConnection *connection,
- const char *specific_object,
- const GSList *existing_connections,
- GError **error)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
- NMSettingVlan *s_vlan;
-
- nm_utils_complete_generic (connection,
- NM_SETTING_VLAN_SETTING_NAME,
- existing_connections,
- _("VLAN connection %d"),
- NULL,
- TRUE);
-
- s_vlan = nm_connection_get_setting_vlan (connection);
- if (!s_vlan) {
- g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "A 'vlan' setting is required.");
- return FALSE;
- }
-
- /* If there's no VLAN interface, no parent, and no hardware address in the
- * settings, then there's not enough information to complete the setting.
- */
- if (!nm_setting_vlan_get_parent (s_vlan)) {
- if (!nm_device_hwaddr_matches (priv->parent, connection, NULL, 0, TRUE)) {
- /* FIXME: put priv->hw_addr into the connection in the appropriate
- * hardware-specific setting.
- */
- g_set_error_literal (error, NM_VLAN_ERROR, NM_VLAN_ERROR_CONNECTION_INVALID,
- "The 'vlan' setting had no interface name, parent, or hardware address.");
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static gboolean
-spec_match_list (NMDevice *device, const GSList *specs)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
- char *hwaddr;
- gboolean matched;
- int itype = nm_utils_hwaddr_type (priv->hw_addr_len);
-
- hwaddr = nm_utils_hwaddr_ntoa (priv->hw_addr, itype);
- matched = nm_match_spec_hwaddr (specs, hwaddr);
- g_free (hwaddr);
-
- return matched;
-}
-
-static gboolean
-vlan_match_config (NMDevice *device, NMConnection *connection)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
- NMSettingVlan *s_vlan;
- const char *ifname, *parent;
- gboolean fail_if_no_hwaddr = FALSE;
-
- s_vlan = nm_connection_get_setting_vlan (connection);
- if (!s_vlan)
- return FALSE;
-
- /* Interface name */
- ifname = nm_setting_vlan_get_interface_name (s_vlan);
- if (g_strcmp0 (ifname, nm_device_get_ip_iface (device)) != 0)
- return FALSE;
-
- if (nm_setting_vlan_get_id (s_vlan) != priv->vlan_id)
- return FALSE;
-
- parent = nm_setting_vlan_get_parent (s_vlan);
- if (parent) {
- if (!match_parent (NM_DEVICE_VLAN (device), parent, NULL))
- return FALSE;
- } else {
- /* If there's no parent and no interface name given, then the only way
- * we have to identify the VLAN interface the connection matches is
- * a hardware-specific setting's hardware address property, so we want
- * to fail the match below if we there is none.
- */
- if (ifname == NULL)
- fail_if_no_hwaddr = TRUE;
- }
-
- /* MAC address check; we ask the parent to check our own MAC address,
- * because only the parent knows what kind of NMSetting the MAC
- * address will be in. The VLAN device shouldn't have to know what kind
- * of interface the parent is.
- */
- if (!nm_device_hwaddr_matches (priv->parent, connection, priv->hw_addr, priv->hw_addr_len, fail_if_no_hwaddr))
- return FALSE;
-
- return TRUE;
-}
-
-static NMConnection *
-connection_match_config (NMDevice *self, const GSList *connections)
-{
- const GSList *iter;
-
- /* First narrow @connections down to those that match in their
- * NMSettingVlan configuration.
- */
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *candidate = iter->data;
-
- if (!nm_connection_is_type (candidate, NM_SETTING_VLAN_SETTING_NAME))
- continue;
- if (!vlan_match_config (self, candidate))
- continue;
- if (!nm_device_match_ip_config (self, candidate))
- continue;
-
- return candidate;
- }
- return NULL;
-}
-
-/******************************************************************/
-
-static void
-carrier_action_defer_clear (NMDeviceVlan *self)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
-
- if (priv->carrier_action_defer_id) {
- g_source_remove (priv->carrier_action_defer_id);
- priv->carrier_action_defer_id = 0;
- }
-}
-
-static gboolean
-carrier_action_defer_cb (gpointer user_data)
-{
- NMDeviceVlan *self = NM_DEVICE_VLAN (user_data);
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
- NMDeviceState state;
-
- priv->carrier_action_defer_id = 0;
-
- state = nm_device_get_state (NM_DEVICE (self));
- if (state == NM_DEVICE_STATE_UNAVAILABLE) {
- if (priv->carrier)
- nm_device_queue_state (NM_DEVICE (self), NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_CARRIER);
- } else if (state >= NM_DEVICE_STATE_DISCONNECTED) {
- if (!priv->carrier)
- nm_device_queue_state (NM_DEVICE (self), NM_DEVICE_STATE_UNAVAILABLE, NM_DEVICE_STATE_REASON_CARRIER);
- }
- return FALSE;
-}
-
-static void
-set_carrier (NMDeviceVlan *self,
- const gboolean carrier,
- const gboolean defer_action)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
- NMDeviceState state;
-
- if (priv->carrier == carrier)
- return;
-
- /* Clear any previous deferred action */
- carrier_action_defer_clear (self);
-
- priv->carrier = carrier;
- g_object_notify (G_OBJECT (self), NM_DEVICE_VLAN_CARRIER);
-
- state = nm_device_get_state (NM_DEVICE (self));
- nm_log_info (LOGD_HW | LOGD_VLAN,
- "(%s): carrier now %s (device state %d%s)",
- nm_device_get_iface (NM_DEVICE (self)),
- carrier ? "ON" : "OFF",
- state,
- defer_action ? ", deferring action for 4 seconds" : "");
-
- if (defer_action)
- priv->carrier_action_defer_id = g_timeout_add_seconds (4, carrier_action_defer_cb, self);
- else
- carrier_action_defer_cb (self);
-}
-
-static void
-carrier_on (NMNetlinkMonitor *monitor, int idx, NMDevice *device)
-{
- /* Make sure signal is for us */
- if (idx == nm_device_get_ifindex (device))
- set_carrier (NM_DEVICE_VLAN (device), TRUE, FALSE);
-}
-
-static void
-carrier_off (NMNetlinkMonitor *monitor, int idx, NMDevice *device)
-{
- NMDeviceState state;
- gboolean defer = FALSE;
-
- /* Make sure signal is for us */
- if (idx == nm_device_get_ifindex (device)) {
- /* Defer carrier-off event actions while connected by a few seconds
- * so that tripping over a cable, power-cycling a switch, or breaking
- * off the RJ45 locking tab isn't so catastrophic.
- */
- state = nm_device_get_state (device);
- if (state > NM_DEVICE_STATE_DISCONNECTED)
- defer = TRUE;
-
- set_carrier (NM_DEVICE_VLAN (device), FALSE, defer);
- }
-}
-
-static void
-carrier_watch_init (NMDeviceVlan *self)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
-
- priv->monitor = nm_netlink_monitor_get ();
- priv->link_connected_id = g_signal_connect (priv->monitor, "carrier-on",
- G_CALLBACK (carrier_on),
- self);
- priv->link_disconnected_id = g_signal_connect (priv->monitor, "carrier-off",
- G_CALLBACK (carrier_off),
- self);
-
- priv->carrier = get_carrier_sync (NM_DEVICE_VLAN (self));
-
- nm_log_info (LOGD_HW | LOGD_VLAN, "(%s): carrier is %s",
- nm_device_get_iface (NM_DEVICE (self)),
- priv->carrier ? "ON" : "OFF");
-
- /* Request link state again just in case an error occurred getting the
- * initial link state.
- */
- nm_netlink_monitor_request_status (priv->monitor);
-}
-
-/******************************************************************/
-
-static void
-parent_state_changed (NMDevice *parent,
- NMDeviceState new_state,
- NMDeviceState old_state,
- NMDeviceStateReason reason,
- gpointer user_data)
-{
- NMDeviceVlan *self = NM_DEVICE_VLAN (user_data);
-
- if (new_state < NM_DEVICE_STATE_DISCONNECTED) {
- /* If the parent becomes unavailable or unmanaged so does the VLAN */
- nm_device_state_changed (NM_DEVICE (self), new_state, reason);
- } else if ( new_state == NM_DEVICE_STATE_DISCONNECTED
- && old_state < NM_DEVICE_STATE_DISCONNECTED) {
- /* Mark VLAN interface as available/disconnected when the parent
- * becomes available as a result of carrier changes or becoming
- * initialized.
- */
- nm_device_state_changed (NM_DEVICE (self), new_state, reason);
- }
-}
-
-/******************************************************************/
-
-NMDevice *
-nm_device_vlan_new (const char *udi, const char *iface, NMDevice *parent)
-{
- NMDevice *device;
-
- g_return_val_if_fail (udi != NULL, NULL);
- g_return_val_if_fail (iface != NULL, NULL);
- g_return_val_if_fail (parent != NULL, NULL);
-
- device = (NMDevice *) g_object_new (NM_TYPE_DEVICE_VLAN,
- NM_DEVICE_UDI, udi,
- NM_DEVICE_IFACE, iface,
- NM_DEVICE_DRIVER, "8021q",
- NM_DEVICE_TYPE_DESC, "VLAN",
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_VLAN,
- NULL);
- if (device) {
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
- int ifindex = nm_device_get_ifindex (device);
- int parent_ifindex = -1, itype;
- int vlan_id;
-
- itype = nm_system_get_iface_type (ifindex, iface);
- if (itype != NM_IFACE_TYPE_VLAN) {
- nm_log_err (LOGD_VLAN, "(%s): failed to get VLAN interface type.", iface);
- g_object_unref (device);
- return NULL;
- }
-
- if (!nm_system_get_iface_vlan_info (ifindex, &parent_ifindex, &vlan_id)) {
- nm_log_warn (LOGD_VLAN, "(%s): failed to get VLAN interface info.", iface);
- g_object_unref (device);
- return NULL;
- }
-
- if ( parent_ifindex < 0
- || parent_ifindex != nm_device_get_ip_ifindex (parent)
- || vlan_id < 0) {
- nm_log_warn (LOGD_VLAN, "(%s): VLAN parent ifindex (%d) or VLAN ID (%d) invalid.",
- iface, parent_ifindex, priv->vlan_id);
- g_object_unref (device);
- return NULL;
- }
-
- priv->vlan_id = vlan_id;
- priv->parent = g_object_ref (parent);
- priv->parent_state_id = g_signal_connect (priv->parent,
- "state-changed",
- G_CALLBACK (parent_state_changed),
- device);
-
- carrier_watch_init (NM_DEVICE_VLAN (device));
-
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): kernel ifindex %d", iface, ifindex);
- nm_log_info (LOGD_HW | LOGD_ETHER, "(%s): VLAN ID %d with parent %s",
- iface, priv->vlan_id, nm_device_get_iface (parent));
- }
-
- return device;
-}
-
-static void
-nm_device_vlan_init (NMDeviceVlan * self)
-{
-}
-
-static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
- char *hwaddr;
-
- switch (prop_id) {
- case PROP_HW_ADDRESS:
- hwaddr = nm_utils_hwaddr_ntoa (priv->hw_addr, nm_utils_hwaddr_type (priv->hw_addr_len));
- g_value_take_string (value, hwaddr);
- break;
- case PROP_CARRIER:
- g_value_set_boolean (value, priv->carrier);
- break;
- case PROP_VLAN_ID:
- g_value_set_uint (value, priv->vlan_id);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
-
- switch (prop_id) {
- case PROP_VLAN_ID:
- priv->vlan_id = g_value_get_uint (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-dispose (GObject *object)
-{
- NMDeviceVlan *self = NM_DEVICE_VLAN (object);
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
-
- if (priv->disposed) {
- G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
- return;
- }
- priv->disposed = TRUE;
-
- if (priv->link_connected_id)
- g_signal_handler_disconnect (priv->monitor, priv->link_connected_id);
- if (priv->link_disconnected_id)
- g_signal_handler_disconnect (priv->monitor, priv->link_disconnected_id);
- carrier_action_defer_clear (self);
-
- g_object_unref (priv->monitor);
-
- g_signal_handler_disconnect (priv->parent, priv->parent_state_id);
- g_object_unref (priv->parent);
-
- G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
-}
-
-static void
-nm_device_vlan_class_init (NMDeviceVlanClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMDeviceVlanPrivate));
-
- /* virtual methods */
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->dispose = dispose;
-
- parent_class->get_generic_capabilities = get_generic_capabilities;
- parent_class->update_hw_address = update_hw_address;
- parent_class->get_hw_address = get_hw_address;
- parent_class->hw_bring_up = hw_bring_up;
- parent_class->can_interrupt_activation = can_interrupt_activation;
- parent_class->is_available = is_available;
-
- parent_class->get_best_auto_connection = get_best_auto_connection;
- parent_class->check_connection_compatible = check_connection_compatible;
- parent_class->complete_connection = complete_connection;
- parent_class->spec_match_list = spec_match_list;
- parent_class->connection_match_config = connection_match_config;
-
- /* properties */
- g_object_class_install_property
- (object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_VLAN_HW_ADDRESS,
- "Active MAC Address",
- "Currently set hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_VLAN_CARRIER,
- "Carrier",
- "Carrier",
- FALSE,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_VLAN_ID,
- g_param_spec_uint (NM_DEVICE_VLAN_ID,
- "VLAN ID",
- "VLAN ID",
- 0, 4095, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDeviceVlanClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_vlan_object_info);
-
- dbus_g_error_domain_register (NM_VLAN_ERROR, NULL, NM_TYPE_VLAN_ERROR);
-}
diff --git a/src/nm-device-vxlan-glue.h b/src/nm-device-vxlan-glue.h
new file mode 100644
index 000000000..988dbd327
--- /dev/null
+++ b/src/nm-device-vxlan-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_device_vxlan_MARSHAL_H__
+#define __dbus_glib_marshal_nm_device_vxlan_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_device_vxlan_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_device_vxlan_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_device_vxlan_object_info = { 1,
+ dbus_glib_nm_device_vxlan_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.Device.Vxlan\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Device.Vxlan\0Parent\0parent\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Id\0id\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Group\0group\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Local\0local\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Tos\0tos\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Ttl\0ttl\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Learning\0learning\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Ageing\0ageing\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Limit\0limit\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0DstPort\0dst_port\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0SrcPortMin\0src_port_min\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0SrcPortMax\0src_port_max\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Proxy\0proxy\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0Rsc\0rsc\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0L2miss\0l2miss\0read\0org.freedesktop.NetworkManager.Device.Vxlan\0L3miss\0l3miss\0read\0\0"
+};
+
diff --git a/src/nm-device-wired.c b/src/nm-device-wired.c
deleted file mode 100644
index 5baf5f876..000000000
--- a/src/nm-device-wired.c
+++ /dev/null
@@ -1,564 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2005 - 2012 Red Hat, Inc.
- * Copyright (C) 2006 - 2008 Novell, Inc.
- */
-
-#include "config.h"
-#include <glib.h>
-#include <sys/socket.h>
-#include <linux/if.h>
-#include <linux/if_infiniband.h>
-#include <netinet/ether.h>
-#include <linux/sockios.h>
-#include <linux/version.h>
-#include <linux/ethtool.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-
-#include "nm-device-wired.h"
-#include "nm-device-private.h"
-#include "nm-dhcp-manager.h"
-#include "nm-logging.h"
-#include "nm-netlink-monitor.h"
-#include "nm-netlink-utils.h"
-#include "nm-system.h"
-#include "nm-utils.h"
-#include "NetworkManagerUtils.h"
-
-
-G_DEFINE_TYPE (NMDeviceWired, nm_device_wired, NM_TYPE_DEVICE)
-
-#define NM_DEVICE_WIRED_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_WIRED, NMDeviceWiredPrivate))
-
-#define NM_DEVICE_WIRED_LOG_LEVEL(dev) ((nm_device_get_device_type (dev) == NM_DEVICE_TYPE_INFINIBAND) ? LOGD_INFINIBAND : LOGD_ETHER)
-
-typedef struct {
- gboolean carrier;
- guint32 speed;
-
- NMNetlinkMonitor * monitor;
- gulong link_connected_id;
- gulong link_disconnected_id;
- guint carrier_action_defer_id;
-
-} NMDeviceWiredPrivate;
-
-
-/* Returns speed in Mb/s */
-static guint32
-ethtool_get_speed (NMDeviceWired *self)
-{
- int fd;
- struct ifreq ifr;
- struct ethtool_cmd edata = {
- .cmd = ETHTOOL_GSET,
- };
- guint32 speed = 0;
-
- g_return_val_if_fail (self != NULL, 0);
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- nm_log_warn (LOGD_HW, "couldn't open control socket.");
- return 0;
- }
-
- memset (&ifr, 0, sizeof (struct ifreq));
- strncpy (ifr.ifr_name, nm_device_get_iface (NM_DEVICE (self)), IFNAMSIZ);
- ifr.ifr_data = (char *) &edata;
-
- if (ioctl (fd, SIOCETHTOOL, &ifr) < 0)
- goto out;
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
- speed = edata.speed;
-#else
- speed = ethtool_cmd_speed (&edata);
-#endif
-
- if (speed == G_MAXUINT16 || speed == G_MAXUINT32)
- speed = 0;
-
-out:
- close (fd);
- return speed;
-}
-
-static void
-set_speed (NMDeviceWired *self, const guint32 speed)
-{
- NMDeviceWiredPrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_WIRED_GET_PRIVATE (self);
- if (priv->speed == speed)
- return;
-
- priv->speed = speed;
- g_object_notify (G_OBJECT (self), "speed");
-
- nm_log_dbg (LOGD_HW | NM_DEVICE_WIRED_LOG_LEVEL (NM_DEVICE (self)),
- "(%s): speed is now %d Mb/s",
- nm_device_get_iface (NM_DEVICE (self)),
- speed);
-}
-
-static void
-carrier_action_defer_clear (NMDeviceWired *self)
-{
- NMDeviceWiredPrivate *priv = NM_DEVICE_WIRED_GET_PRIVATE (self);
-
- if (priv->carrier_action_defer_id) {
- g_source_remove (priv->carrier_action_defer_id);
- priv->carrier_action_defer_id = 0;
- }
-}
-
-static void
-carrier_action (NMDeviceWired *self, NMDeviceState state, gboolean carrier)
-{
- NMDevice *device = NM_DEVICE (self);
-
- if (state == NM_DEVICE_STATE_UNAVAILABLE) {
- if (carrier)
- nm_device_queue_state (device, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_CARRIER);
- else {
- /* clear any queued state changes if they wouldn't be valid when the
- * carrier is off.
- */
- if (nm_device_queued_state_peek (device) >= NM_DEVICE_STATE_DISCONNECTED)
- nm_device_queued_state_clear (device);
- }
- } else if (state >= NM_DEVICE_STATE_DISCONNECTED) {
- if (!carrier && !nm_device_get_enslaved (device))
- nm_device_queue_state (device, NM_DEVICE_STATE_UNAVAILABLE, NM_DEVICE_STATE_REASON_CARRIER);
- }
-}
-
-static gboolean
-carrier_action_defer_cb (gpointer user_data)
-{
- NMDeviceWired *self = NM_DEVICE_WIRED (user_data);
- NMDeviceWiredPrivate *priv = NM_DEVICE_WIRED_GET_PRIVATE (self);
-
- priv->carrier_action_defer_id = 0;
- NM_DEVICE_WIRED_GET_CLASS (self)->carrier_action (self,
- nm_device_get_state (NM_DEVICE (self)),
- priv->carrier);
- return FALSE;
-}
-
-static void
-set_carrier (NMDeviceWired *self,
- const gboolean carrier,
- const gboolean defer_action)
-{
- NMDeviceWiredPrivate *priv = NM_DEVICE_WIRED_GET_PRIVATE (self);
- NMDevice *device = NM_DEVICE (self);
- NMDeviceState state;
- guint32 caps;
-
- if (priv->carrier == carrier)
- return;
-
- /* Clear any previous deferred action */
- carrier_action_defer_clear (self);
-
- /* Warn if we try to set carrier down on a device that
- * doesn't support carrier detect. These devices assume
- * the carrier is always up.
- */
- caps = nm_device_get_capabilities (device);
- g_return_if_fail (caps & NM_DEVICE_CAP_CARRIER_DETECT);
-
- priv->carrier = carrier;
-
- state = nm_device_get_state (device);
- if (state >= NM_DEVICE_STATE_UNAVAILABLE) {
- nm_log_info (LOGD_HW | NM_DEVICE_WIRED_LOG_LEVEL (device),
- "(%s): carrier now %s (device state %d%s)",
- nm_device_get_iface (device),
- carrier ? "ON" : "OFF",
- state,
- defer_action ? ", deferring action for 4 seconds" : "");
- }
-
- g_object_notify (G_OBJECT (self), "carrier");
-
- /* Retry IP configuration for master devices now that the carrier is on */
- if (nm_device_is_master (device) && priv->carrier) {
- if (nm_device_activate_ip4_state_in_wait (device))
- nm_device_activate_stage3_ip4_start (device);
-
- if (nm_device_activate_ip6_state_in_wait (device))
- nm_device_activate_stage3_ip6_start (device);
- }
-
- if (defer_action)
- priv->carrier_action_defer_id = g_timeout_add_seconds (4, carrier_action_defer_cb, self);
- else
- carrier_action_defer_cb (self);
-}
-
-static void
-carrier_on (NMNetlinkMonitor *monitor,
- int idx,
- gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (user_data);
- NMDeviceWired *self = NM_DEVICE_WIRED (device);
- guint32 caps;
-
- /* Make sure signal is for us */
- if (idx == nm_device_get_ifindex (device)) {
- caps = nm_device_get_capabilities (device);
- g_return_if_fail (caps & NM_DEVICE_CAP_CARRIER_DETECT);
-
- set_carrier (self, TRUE, FALSE);
- set_speed (self, ethtool_get_speed (self));
- }
-}
-
-static void
-carrier_off (NMNetlinkMonitor *monitor,
- int idx,
- gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (user_data);
- NMDeviceWired *self = NM_DEVICE_WIRED (device);
- guint32 caps;
-
- /* Make sure signal is for us */
- if (idx == nm_device_get_ifindex (device)) {
- NMDeviceState state;
- gboolean defer = FALSE;
-
- caps = nm_device_get_capabilities (device);
- g_return_if_fail (caps & NM_DEVICE_CAP_CARRIER_DETECT);
-
- /* Defer carrier-off event actions while connected by a few seconds
- * so that tripping over a cable, power-cycling a switch, or breaking
- * off the RJ45 locking tab isn't so catastrophic.
- */
- state = nm_device_get_state (device);
- if (state > NM_DEVICE_STATE_DISCONNECTED)
- defer = TRUE;
-
- set_carrier (self, FALSE, defer);
- }
-}
-
-static gboolean
-get_carrier_sync (NMDeviceWired *self)
-{
- NMDeviceWiredPrivate *priv = NM_DEVICE_WIRED_GET_PRIVATE (self);
- GError *error = NULL;
- guint32 ifflags = 0;
-
- /* Get initial link state */
- if (!nm_netlink_monitor_get_flags_sync (priv->monitor,
- nm_device_get_ip_ifindex (NM_DEVICE (self)),
- &ifflags,
- &error)) {
- nm_log_warn (LOGD_HW | NM_DEVICE_WIRED_LOG_LEVEL (NM_DEVICE (self)),
- "(%s): couldn't get carrier state: (%d) %s",
- nm_device_get_ip_iface (NM_DEVICE (self)),
- error ? error->code : -1,
- (error && error->message) ? error->message : "unknown");
- g_clear_error (&error);
- }
-
- return !!(ifflags & IFF_LOWER_UP);
-}
-
-static GObject*
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- NMDeviceWiredPrivate *priv;
- NMDevice *self;
- guint32 caps;
-
- object = G_OBJECT_CLASS (nm_device_wired_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
- if (!object)
- return NULL;
-
- self = NM_DEVICE (object);
- priv = NM_DEVICE_WIRED_GET_PRIVATE (self);
-
- nm_log_dbg (LOGD_HW | NM_DEVICE_WIRED_LOG_LEVEL (NM_DEVICE (self)),
- "(%s): kernel ifindex %d",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)));
-
- caps = nm_device_get_capabilities (self);
- if (caps & NM_DEVICE_CAP_CARRIER_DETECT) {
- /* Only listen to netlink for cards that support carrier detect */
- priv->monitor = nm_netlink_monitor_get ();
-
- priv->link_connected_id = g_signal_connect (priv->monitor, "carrier-on",
- G_CALLBACK (carrier_on),
- self);
- priv->link_disconnected_id = g_signal_connect (priv->monitor, "carrier-off",
- G_CALLBACK (carrier_off),
- self);
-
- priv->carrier = get_carrier_sync (NM_DEVICE_WIRED (self));
-
- nm_log_info (LOGD_HW | NM_DEVICE_WIRED_LOG_LEVEL (NM_DEVICE (self)),
- "(%s): carrier is %s",
- nm_device_get_iface (NM_DEVICE (self)),
- priv->carrier ? "ON" : "OFF");
-
- /* Request link state again just in case an error occurred getting the
- * initial link state.
- */
- nm_netlink_monitor_request_status (priv->monitor);
- } else {
- nm_log_info (LOGD_HW | NM_DEVICE_WIRED_LOG_LEVEL (NM_DEVICE (self)),
- "(%s): driver '%s' does not support carrier detection.",
- nm_device_get_iface (self),
- nm_device_get_driver (self));
- priv->carrier = TRUE;
- }
-
- return object;
-}
-
-static void
-nm_device_wired_init (NMDeviceWired * self)
-{
-}
-
-static gboolean
-hw_bring_up (NMDevice *dev, gboolean *no_firmware)
-{
- gboolean result, carrier;
- guint32 caps;
-
- result = NM_DEVICE_CLASS(nm_device_wired_parent_class)->hw_bring_up (dev, no_firmware);
- if (result) {
- caps = nm_device_get_capabilities (dev);
- if (caps & NM_DEVICE_CAP_CARRIER_DETECT) {
- carrier = get_carrier_sync (NM_DEVICE_WIRED (dev));
- set_carrier (NM_DEVICE_WIRED (dev), carrier, carrier ? FALSE : TRUE);
- }
- }
- return result;
-}
-
-static gboolean
-can_interrupt_activation (NMDevice *dev)
-{
- NMDeviceWired *self = NM_DEVICE_WIRED (dev);
- gboolean interrupt = FALSE;
-
- /* Devices that support carrier detect can interrupt activation
- * if the link becomes inactive.
- */
- if (nm_device_get_capabilities (dev) & NM_DEVICE_CAP_CARRIER_DETECT) {
- if (NM_DEVICE_WIRED_GET_PRIVATE (self)->carrier == FALSE)
- interrupt = TRUE;
- }
- return interrupt;
-}
-
-static gboolean
-is_available (NMDevice *dev)
-{
- NMDeviceWired *self = NM_DEVICE_WIRED (dev);
-
- /* Can't do anything if there isn't a carrier */
- if (!NM_DEVICE_WIRED_GET_PRIVATE (self)->carrier)
- return FALSE;
-
- return TRUE;
-}
-
-static NMConnection *
-connection_match_config (NMDevice *self, const GSList *connections)
-{
- const GSList *iter;
-
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
-
- if (!nm_device_match_ip_config (self, candidate))
- continue;
-
- return candidate;
- }
-
- return NULL;
-}
-
-static NMActStageReturn
-act_stage3_ip4_config_start (NMDevice *device,
- NMIP4Config **out_config,
- NMDeviceStateReason *reason)
-{
- NMConnection *connection;
- NMSettingIP4Config *s_ip4;
- const char *method = NULL;
- gboolean is_manual = FALSE;
-
- connection = nm_device_get_connection (device);
- if (connection) {
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
-
- if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0)
- is_manual = TRUE;
- }
-
- if ( !is_manual
- && nm_device_is_master (device)
- && !nm_device_wired_get_carrier (NM_DEVICE_WIRED (device))) {
- nm_log_info (LOGD_IP4 | NM_DEVICE_WIRED_LOG_LEVEL (device),
- "(%s): IPv4 config waiting until carrier is on",
- nm_device_get_ip_iface (device));
- return NM_ACT_STAGE_RETURN_WAIT;
- }
-
- return NM_DEVICE_CLASS (nm_device_wired_parent_class)->act_stage3_ip4_config_start (device, out_config, reason);
-}
-
-static NMActStageReturn
-act_stage3_ip6_config_start (NMDevice *device,
- NMIP6Config **out_config,
- NMDeviceStateReason *reason)
-{
- NMConnection *connection;
- NMSettingIP6Config *s_ip6;
- const char *method = NULL;
- gboolean is_manual = FALSE;
-
- connection = nm_device_get_connection (device);
- if (connection) {
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
- if (s_ip6)
- method = nm_setting_ip6_config_get_method (s_ip6);
-
- if (g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0)
- is_manual = TRUE;
- }
-
- if ( !is_manual
- && nm_device_is_master (device)
- && !nm_device_wired_get_carrier (NM_DEVICE_WIRED (device))) {
- nm_log_info (LOGD_IP6 | NM_DEVICE_WIRED_LOG_LEVEL (device),
- "(%s): IPv6 config waiting until carrier is on",
- nm_device_get_ip_iface (device));
- return NM_ACT_STAGE_RETURN_WAIT;
- }
-
- return NM_DEVICE_CLASS (nm_device_wired_parent_class)->act_stage3_ip6_config_start (device, out_config, reason);
-}
-
-static void
-dispose (GObject *object)
-{
- NMDeviceWired *self = NM_DEVICE_WIRED (object);
- NMDeviceWiredPrivate *priv = NM_DEVICE_WIRED_GET_PRIVATE (self);
-
- if (priv->link_connected_id) {
- g_signal_handler_disconnect (priv->monitor, priv->link_connected_id);
- priv->link_connected_id = 0;
- }
- if (priv->link_disconnected_id) {
- g_signal_handler_disconnect (priv->monitor, priv->link_disconnected_id);
- priv->link_disconnected_id = 0;
- }
-
- carrier_action_defer_clear (self);
-
- if (priv->monitor) {
- g_object_unref (priv->monitor);
- priv->monitor = NULL;
- }
-
- G_OBJECT_CLASS (nm_device_wired_parent_class)->dispose (object);
-}
-
-static void
-nm_device_wired_class_init (NMDeviceWiredClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
- NMDeviceWiredClass *wired_class = NM_DEVICE_WIRED_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMDeviceWiredPrivate));
-
- /* virtual methods */
- object_class->constructor = constructor;
- object_class->dispose = dispose;
-
- parent_class->hw_bring_up = hw_bring_up;
- parent_class->can_interrupt_activation = can_interrupt_activation;
- parent_class->is_available = is_available;
- parent_class->connection_match_config = connection_match_config;
- parent_class->act_stage3_ip4_config_start = act_stage3_ip4_config_start;
- parent_class->act_stage3_ip6_config_start = act_stage3_ip6_config_start;
-
- wired_class->carrier_action = carrier_action;
-}
-
-/**
- * nm_device_wired_get_carrier:
- * @dev: an #NMDeviceWired
- *
- * Get @dev's carrier status
- *
- * Return value: @dev's carrier
- */
-gboolean
-nm_device_wired_get_carrier (NMDeviceWired *dev)
-{
- NMDeviceWiredPrivate *priv;
-
- g_return_val_if_fail (dev != NULL, FALSE);
-
- priv = NM_DEVICE_WIRED_GET_PRIVATE (dev);
- return priv->carrier;
-}
-
-/**
- * nm_device_wired_get_speed:
- * @dev: an #NMDeviceWired
- *
- * Get @dev's speed
- *
- * Return value: @dev's speed in Mb/s
- */
-guint32
-nm_device_wired_get_speed (NMDeviceWired *dev)
-{
- NMDeviceWiredPrivate *priv;
-
- g_return_val_if_fail (dev != NULL, 0);
-
- priv = NM_DEVICE_WIRED_GET_PRIVATE (dev);
- return priv->speed;
-}
diff --git a/src/nm-device-wired.h b/src/nm-device-wired.h
deleted file mode 100644
index a80843521..000000000
--- a/src/nm-device-wired.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2005 - 2012 Red Hat, Inc.
- * Copyright (C) 2006 - 2008 Novell, Inc.
- */
-
-#ifndef NM_DEVICE_WIRED_H
-#define NM_DEVICE_WIRED_H
-
-#include <glib-object.h>
-
-#include "nm-device.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_DEVICE_WIRED (nm_device_wired_get_type ())
-#define NM_DEVICE_WIRED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_WIRED, NMDeviceWired))
-#define NM_DEVICE_WIRED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_WIRED, NMDeviceWiredClass))
-#define NM_IS_DEVICE_WIRED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_WIRED))
-#define NM_IS_DEVICE_WIRED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_WIRED))
-#define NM_DEVICE_WIRED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIRED, NMDeviceWiredClass))
-
-typedef struct {
- NMDevice parent;
-} NMDeviceWired;
-
-typedef struct {
- NMDeviceClass parent;
-
- void (*carrier_action) (NMDeviceWired *self,
- NMDeviceState state,
- gboolean carrier);
-} NMDeviceWiredClass;
-
-GType nm_device_wired_get_type (void);
-
-gboolean nm_device_wired_get_carrier (NMDeviceWired *dev);
-guint32 nm_device_wired_get_speed (NMDeviceWired *dev);
-
-G_END_DECLS
-
-#endif /* NM_DEVICE_WIRED_H */
diff --git a/src/nm-device.c b/src/nm-device.c
deleted file mode 100644
index a07ef3387..000000000
--- a/src/nm-device.c
+++ /dev/null
@@ -1,5706 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2005 - 2012 Red Hat, Inc.
- * Copyright (C) 2006 - 2008 Novell, Inc.
- */
-
-#include <config.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <dbus/dbus.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <linux/sockios.h>
-#include <linux/ethtool.h>
-#include <sys/ioctl.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <arpa/inet.h>
-#include <fcntl.h>
-#include <linux/if.h>
-
-#include "nm-glib-compat.h"
-#include "nm-device.h"
-#include "nm-device-private.h"
-#include "nm-device-ethernet.h"
-#include "NetworkManagerUtils.h"
-#include "nm-system.h"
-#include "nm-dhcp-manager.h"
-#include "nm-dbus-manager.h"
-#include "nm-utils.h"
-#include "nm-logging.h"
-#include "nm-netlink-monitor.h"
-#include "nm-netlink-utils.h"
-#include "nm-netlink-compat.h"
-#include "nm-setting-ip4-config.h"
-#include "nm-setting-ip6-config.h"
-#include "nm-setting-connection.h"
-#include "nm-dnsmasq-manager.h"
-#include "nm-dhcp4-config.h"
-#include "nm-ip6-manager.h"
-#include "nm-marshal.h"
-#include "nm-rfkill.h"
-#include "nm-firewall-manager.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-enum-types.h"
-#include "nm-settings-connection.h"
-#include "nm-connection-provider.h"
-#include "nm-posix-signals.h"
-#include "nm-manager-auth.h"
-#include "nm-dbus-glib-types.h"
-#include "nm-dispatcher.h"
-
-static void impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context);
-
-#include "nm-device-interface-glue.h"
-
-#define PENDING_IP4_CONFIG "pending-ip4-config"
-#define PENDING_IP6_CONFIG "pending-ip6-config"
-
-#define DBUS_G_TYPE_UINT_STRUCT (dbus_g_type_get_struct ("GValueArray", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID))
-
-/***********************************************************/
-#define NM_DEVICE_ERROR (nm_device_error_quark ())
-
-static GQuark
-nm_device_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-device-error");
- return quark;
-}
-
-/***********************************************************/
-
-enum {
- STATE_CHANGED,
- AUTOCONNECT_ALLOWED,
- AUTH_REQUEST,
- IP4_CONFIG_CHANGED,
- IP6_CONFIG_CHANGED,
- LAST_SIGNAL,
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- PROP_0,
- PROP_UDI,
- PROP_IFACE,
- PROP_IP_IFACE,
- PROP_DRIVER,
- PROP_DRIVER_VERSION,
- PROP_FIRMWARE_VERSION,
- PROP_CAPABILITIES,
- PROP_IP4_ADDRESS,
- PROP_IP4_CONFIG,
- PROP_DHCP4_CONFIG,
- PROP_IP6_CONFIG,
- PROP_DHCP6_CONFIG,
- PROP_STATE,
- PROP_STATE_REASON,
- PROP_ACTIVE_CONNECTION,
- PROP_DEVICE_TYPE,
- PROP_MANAGED,
- PROP_AUTOCONNECT,
- PROP_FIRMWARE_MISSING,
- PROP_TYPE_DESC,
- PROP_RFKILL_TYPE,
- PROP_IFINDEX,
- PROP_AVAILABLE_CONNECTIONS,
- PROP_IS_MASTER,
- LAST_PROP
-};
-
-#define DEFAULT_AUTOCONNECT TRUE
-
-/***********************************************************/
-
-G_DEFINE_ABSTRACT_TYPE (NMDevice, nm_device, G_TYPE_OBJECT)
-
-#define NM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE, NMDevicePrivate))
-
-typedef enum {
- IP_NONE = 0,
- IP_WAIT,
- IP_CONF,
- IP_DONE
-} IpState;
-
-typedef struct {
- NMDeviceState state;
- NMDeviceStateReason reason;
- guint id;
-} QueuedState;
-
-typedef struct {
- NMDevice *slave;
- gboolean enslaved;
- guint watch_id;
-} SlaveInfo;
-
-typedef struct {
- gboolean disposed;
- gboolean initialized;
-
- NMDeviceState state;
- NMDeviceStateReason state_reason;
- QueuedState queued_state;
-
- char * udi;
- char * path;
- char * iface; /* may change, could be renamed by user */
- int ifindex;
- char * ip_iface;
- int ip_ifindex;
- NMDeviceType type;
- char * type_desc;
- guint32 capabilities;
- char * driver;
- char * driver_version;
- char * firmware_version;
- gboolean managed; /* whether managed by NM or not */
- RfKillType rfkill_type;
- gboolean firmware_missing;
- GHashTable * available_connections;
-
- guint32 ip4_address;
-
- NMActRequest * act_request;
- guint act_source_id;
- gpointer act_source_func;
- guint act_source6_id;
- gpointer act_source6_func;
- gulong secrets_updated_id;
- gulong secrets_failed_id;
-
- /* Generic DHCP stuff */
- NMDHCPManager * dhcp_manager;
- guint32 dhcp_timeout;
- GByteArray * dhcp_anycast_address;
-
- /* IP4 configuration info */
- NMIP4Config * ip4_config; /* Config from DHCP, PPP, or system config files */
- IpState ip4_state;
- NMDHCPClient * dhcp4_client;
- gulong dhcp4_state_sigid;
- gulong dhcp4_timeout_sigid;
- NMDHCP4Config * dhcp4_config;
-
- /* dnsmasq stuff for shared connections */
- NMDnsMasqManager *dnsmasq_manager;
- gulong dnsmasq_state_id;
-
- /* Firewall Manager */
- NMFirewallManager *fw_manager;
- DBusGProxyCall *fw_call;
-
- /* avahi-autoipd stuff */
- GPid aipd_pid;
- guint aipd_watch;
- guint aipd_timeout;
-
- /* IP6 configuration info */
- NMIP6Config * ip6_config;
- IpState ip6_state;
-
- NMIP6Manager * ip6_manager;
- gulong ip6_addrconf_sigid;
- gulong ip6_config_changed_sigid;
- gboolean ip6_waiting_for_config;
- /* IP6 config from autoconf */
- NMIP6Config * ac_ip6_config;
-
- char * ip6_accept_ra_path;
- gint32 ip6_accept_ra_save;
-
- /* IPv6 privacy extensions (RFC4941) */
- char * ip6_privacy_tempaddr_path;
- gint32 ip6_privacy_tempaddr_save;
-
- NMDHCPClient * dhcp6_client;
- guint32 dhcp6_mode;
- gulong dhcp6_state_sigid;
- gulong dhcp6_timeout_sigid;
- NMDHCP6Config * dhcp6_config;
- /* IP6 config from DHCP */
- NMIP6Config * dhcp6_ip6_config;
-
- /* allow autoconnect feature */
- gboolean autoconnect;
-
- /* master interface for bridge/bond slave */
- NMDevice * master;
- gboolean enslaved;
-
- /* slave management */
- gboolean is_master;
- GSList * slaves; /* list of SlaveInfo */
-
- NMConnectionProvider *con_provider;
-
- /* connection provider signals for available connections property */
- guint cp_added_id;
- guint cp_loaded_id;
- guint cp_removed_id;
- guint cp_updated_id;
-} NMDevicePrivate;
-
-static void nm_device_take_down (NMDevice *dev, gboolean wait, NMDeviceStateReason reason);
-
-static gboolean nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware);
-static gboolean nm_device_is_up (NMDevice *self);
-
-static gboolean nm_device_set_ip4_config (NMDevice *dev,
- NMIP4Config *config,
- gboolean assumed,
- NMDeviceStateReason *reason);
-static gboolean nm_device_set_ip6_config (NMDevice *dev,
- NMIP6Config *config,
- NMDeviceStateReason *reason);
-
-static gboolean nm_device_activate_ip6_config_commit (gpointer user_data);
-
-static gboolean check_connection_available (NMDevice *device, NMConnection *connection);
-
-static void _clear_available_connections (NMDevice *device, gboolean do_signal);
-
-static void dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release);
-
-static const char *reason_to_string (NMDeviceStateReason reason);
-
-static void cp_connection_added (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data);
-static void cp_connections_loaded (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data);
-static void cp_connection_removed (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data);
-static void cp_connection_updated (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data);
-
-static const char *state_to_string (NMDeviceState state);
-
-static void
-nm_device_init (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- priv->type = NM_DEVICE_TYPE_UNKNOWN;
- priv->capabilities = NM_DEVICE_CAP_NONE;
- priv->state = NM_DEVICE_STATE_UNMANAGED;
- priv->state_reason = NM_DEVICE_STATE_REASON_NONE;
- priv->dhcp_timeout = 0;
- priv->rfkill_type = RFKILL_TYPE_UNKNOWN;
- priv->autoconnect = DEFAULT_AUTOCONNECT;
- priv->available_connections = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL);
-}
-
-static void
-update_accept_ra_save (NMDevice *self)
-{
- NMDevicePrivate *priv;
- const char *ip_iface;
- char *new_path;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- ip_iface = nm_device_get_ip_iface (self);
-
- new_path = g_strdup_printf ("/proc/sys/net/ipv6/conf/%s/accept_ra", ip_iface);
- g_assert (new_path);
-
- if (priv->ip6_accept_ra_path) {
- /* If the IP iface is different from before, use the new value */
- if (!strcmp (new_path, priv->ip6_accept_ra_path)) {
- g_free (new_path);
- return;
- }
- g_free (priv->ip6_accept_ra_path);
- }
-
- /* Grab the original value of "accept_ra" so we can restore it when NM exits */
- priv->ip6_accept_ra_path = new_path;
- if (!nm_utils_get_proc_sys_net_value_with_bounds (priv->ip6_accept_ra_path,
- ip_iface,
- &priv->ip6_accept_ra_save,
- 0, 2)) {
- g_free (priv->ip6_accept_ra_path);
- priv->ip6_accept_ra_path = NULL;
- }
-}
-
-static void
-update_ip6_privacy_save (NMDevice *self)
-{
- NMDevicePrivate *priv;
- const char *ip_iface;
- char *new_path;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- ip_iface = nm_device_get_ip_iface (self);
-
- new_path = g_strdup_printf ("/proc/sys/net/ipv6/conf/%s/use_tempaddr", ip_iface);
- g_assert (new_path);
-
- if (priv->ip6_privacy_tempaddr_path) {
- /* If the IP iface is different from before, use the new value */
- if (!strcmp (new_path, priv->ip6_privacy_tempaddr_path)) {
- g_free (new_path);
- return;
- }
- g_free (priv->ip6_privacy_tempaddr_path);
- }
-
- /* Grab the original value of "use_tempaddr" so we can restore it when NM exits */
- priv->ip6_privacy_tempaddr_path = new_path;
- if (!nm_utils_get_proc_sys_net_value (priv->ip6_privacy_tempaddr_path,
- ip_iface,
- &priv->ip6_privacy_tempaddr_save)) {
- g_free (priv->ip6_privacy_tempaddr_path);
- priv->ip6_privacy_tempaddr_path = NULL;
- }
-}
-
-/*
- * Get driver info from SIOCETHTOOL ioctl() for 'iface'
- * Returns driver and firmware versions to 'driver_version and' 'firmware_version'
- */
-static gboolean
-device_get_driver_info (const char *iface, char **driver_version, char **firmware_version)
-{
- struct ethtool_drvinfo drvinfo;
- struct ifreq req;
- int fd;
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- nm_log_warn (LOGD_HW, "couldn't open control socket.");
- return FALSE;
- }
-
- /* Get driver and firmware version info */
- memset (&drvinfo, 0, sizeof (drvinfo));
- memset (&req, 0, sizeof (struct ifreq));
- strncpy (req.ifr_name, iface, IFNAMSIZ);
- drvinfo.cmd = ETHTOOL_GDRVINFO;
- req.ifr_data = &drvinfo;
-
- errno = 0;
- if (ioctl (fd, SIOCETHTOOL, &req) < 0) {
- nm_log_dbg (LOGD_HW, "SIOCETHTOOL ioctl() failed: cmd=ETHTOOL_GDRVINFO, iface=%s, errno=%d",
- iface, errno);
- close (fd);
- return FALSE;
- }
- if (driver_version)
- *driver_version = g_strdup (drvinfo.version);
- if (firmware_version)
- *firmware_version = g_strdup (drvinfo.fw_version);
-
- close (fd);
- return TRUE;
-}
-
-static GObject*
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- NMDevice *dev;
- NMDevicePrivate *priv;
-
- object = G_OBJECT_CLASS (nm_device_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
- if (!object)
- return NULL;
-
- dev = NM_DEVICE (object);
- priv = NM_DEVICE_GET_PRIVATE (dev);
-
- if (!priv->udi) {
- nm_log_err (LOGD_DEVICE, "No device udi provided, ignoring");
- goto error;
- }
-
- if (!priv->iface) {
- nm_log_err (LOGD_DEVICE, "No device interface provided, ignoring");
- goto error;
- }
-
- priv->capabilities |= NM_DEVICE_GET_CLASS (dev)->get_generic_capabilities (dev);
- if (!(priv->capabilities & NM_DEVICE_CAP_NM_SUPPORTED)) {
- nm_log_warn (LOGD_DEVICE, "(%s): Device unsupported, ignoring.", priv->iface);
- goto error;
- }
-
- priv->dhcp_manager = nm_dhcp_manager_get ();
-
- priv->fw_manager = nm_firewall_manager_get ();
-
- device_get_driver_info (priv->iface, &priv->driver_version, &priv->firmware_version);
-
- update_accept_ra_save (dev);
- update_ip6_privacy_save (dev);
-
- priv->initialized = TRUE;
- return object;
-
-error:
- g_object_unref (dev);
- return NULL;
-}
-
-static void
-constructed (GObject *object)
-{
- NMDevice *dev = NM_DEVICE (object);
-
- if (NM_DEVICE_GET_CLASS (dev)->update_hw_address)
- NM_DEVICE_GET_CLASS (dev)->update_hw_address (dev);
-
- if (NM_DEVICE_GET_CLASS (dev)->update_permanent_hw_address)
- NM_DEVICE_GET_CLASS (dev)->update_permanent_hw_address (dev);
-
- if (NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address)
- NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address (dev);
-
- if (G_OBJECT_CLASS (nm_device_parent_class)->constructed)
- G_OBJECT_CLASS (nm_device_parent_class)->constructed (object);
-}
-
-static gboolean
-nm_device_hw_is_up (NMDevice *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
-
- if (NM_DEVICE_GET_CLASS (self)->hw_is_up)
- return NM_DEVICE_GET_CLASS (self)->hw_is_up (self);
-
- return TRUE;
-}
-
-static gboolean
-hw_is_up (NMDevice *device)
-{
- int ifindex = nm_device_get_ip_ifindex (device);
-
- return ifindex > 0 ? nm_system_iface_is_up (ifindex) : TRUE;
-}
-
-static guint32
-get_generic_capabilities (NMDevice *dev)
-{
- return 0;
-}
-
-void
-nm_device_set_path (NMDevice *self, const char *path)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (self != NULL);
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->path == NULL);
-
- priv->path = g_strdup (path);
-}
-
-const char *
-nm_device_get_path (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->path;
-}
-
-const char *
-nm_device_get_udi (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->udi;
-}
-
-/*
- * Get/set functions for iface
- */
-const char *
-nm_device_get_iface (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->iface;
-}
-
-int
-nm_device_get_ifindex (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, 0);
-
- return NM_DEVICE_GET_PRIVATE (self)->ifindex;
-}
-
-const char *
-nm_device_get_ip_iface (NMDevice *self)
-{
- NMDevicePrivate *priv;
-
- g_return_val_if_fail (self != NULL, NULL);
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- /* If it's not set, default to iface */
- return priv->ip_iface ? priv->ip_iface : priv->iface;
-}
-
-int
-nm_device_get_ip_ifindex (NMDevice *self)
-{
- NMDevicePrivate *priv;
-
- g_return_val_if_fail (self != NULL, 0);
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- /* If it's not set, default to iface */
- return priv->ip_iface ? priv->ip_ifindex : priv->ifindex;
-}
-
-void
-nm_device_set_ip_iface (NMDevice *self, const char *iface)
-{
- NMDevicePrivate *priv;
- char *old_ip_iface;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- old_ip_iface = priv->ip_iface;
- priv->ip_ifindex = 0;
-
- priv->ip_iface = g_strdup (iface);
- if (priv->ip_iface) {
- priv->ip_ifindex = nm_netlink_iface_to_index (priv->ip_iface);
- if (priv->ip_ifindex <= 0) {
- /* Device IP interface must always be a kernel network interface */
- nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", iface);
- }
- }
-
- /* Emit change notification */
- if (g_strcmp0 (old_ip_iface, priv->ip_iface))
- g_object_notify (G_OBJECT (self), NM_DEVICE_IP_IFACE);
- g_free (old_ip_iface);
-}
-
-const guint8 *
-nm_device_get_hw_address (NMDevice *dev, guint *out_len)
-{
- g_return_val_if_fail (dev != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (dev), NULL);
- g_return_val_if_fail (out_len != NULL, NULL);
- g_return_val_if_fail (*out_len == 0, NULL);
-
- if (NM_DEVICE_GET_CLASS (dev)->get_hw_address)
- return NM_DEVICE_GET_CLASS (dev)->get_hw_address (dev, out_len);
- return NULL;
-}
-
-/*
- * Get/set functions for driver
- */
-const char *
-nm_device_get_driver (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->driver;
-}
-
-const char *
-nm_device_get_driver_version (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->driver_version;
-}
-
-const char *
-nm_device_get_firmware_version (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->firmware_version;
-}
-
-
-/*
- * Get/set functions for type
- */
-NMDeviceType
-nm_device_get_device_type (NMDevice *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE (self), NM_DEVICE_TYPE_UNKNOWN);
-
- return NM_DEVICE_GET_PRIVATE (self)->type;
-}
-
-
-/**
- * nm_device_get_priority():
- * @dev: the #NMDevice
- *
- * Returns: the device's routing priority. Lower numbers means a "better"
- * device, eg higher priority.
- */
-int
-nm_device_get_priority (NMDevice *dev)
-{
- g_return_val_if_fail (NM_IS_DEVICE (dev), 100);
-
- /* Device 'priority' is used for two things:
- *
- * a) two devices on the same IP subnet: the "better" (ie, lower number)
- * device is the default outgoing device for that subnet
- * b) default route: the "better" device gets the default route. This can
- * always be modified by setting a connection to never-default=TRUE, in
- * which case that device will never take the default route when
- * it's using that connection.
- */
-
- switch (nm_device_get_device_type (dev)) {
- case NM_DEVICE_TYPE_ETHERNET:
- return 1;
- case NM_DEVICE_TYPE_INFINIBAND:
- return 2;
- case NM_DEVICE_TYPE_ADSL:
- return 3;
- case NM_DEVICE_TYPE_WIMAX:
- return 4;
- case NM_DEVICE_TYPE_BOND:
- return 5;
- case NM_DEVICE_TYPE_VLAN:
- return 6;
- case NM_DEVICE_TYPE_MODEM:
- return 7;
- case NM_DEVICE_TYPE_BT:
- return 8;
- case NM_DEVICE_TYPE_WIFI:
- return 9;
- case NM_DEVICE_TYPE_OLPC_MESH:
- return 10;
- default:
- return 20;
- }
-}
-
-
-/*
- * Accessor for capabilities
- */
-guint32
-nm_device_get_capabilities (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NM_DEVICE_CAP_NONE);
-
- return NM_DEVICE_GET_PRIVATE (self)->capabilities;
-}
-
-/*
- * Accessor for type-specific capabilities
- */
-guint32
-nm_device_get_type_capabilities (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NM_DEVICE_CAP_NONE);
-
- return NM_DEVICE_GET_CLASS (self)->get_type_capabilities (self);
-}
-
-static guint32
-get_type_capabilities (NMDevice *self)
-{
- return NM_DEVICE_CAP_NONE;
-}
-
-
-const char *
-nm_device_get_type_desc (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->type_desc;
-}
-
-void
-nm_device_set_connection_provider (NMDevice *device,
- NMConnectionProvider *provider)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (device != NULL);
- g_return_if_fail (provider != NULL);
- g_return_if_fail (NM_IS_CONNECTION_PROVIDER (provider));
-
- priv = NM_DEVICE_GET_PRIVATE (device);
- g_return_if_fail (priv->con_provider == NULL);
-
- priv->con_provider = provider;
- priv->cp_added_id = g_signal_connect (priv->con_provider,
- NM_CP_SIGNAL_CONNECTION_ADDED,
- G_CALLBACK (cp_connection_added),
- device);
-
- priv->cp_loaded_id = g_signal_connect (priv->con_provider,
- NM_CP_SIGNAL_CONNECTIONS_LOADED,
- G_CALLBACK (cp_connections_loaded),
- device);
-
- priv->cp_removed_id = g_signal_connect (priv->con_provider,
- NM_CP_SIGNAL_CONNECTION_REMOVED,
- G_CALLBACK (cp_connection_removed),
- device);
-
- priv->cp_updated_id = g_signal_connect (priv->con_provider,
- NM_CP_SIGNAL_CONNECTION_UPDATED,
- G_CALLBACK (cp_connection_updated),
- device);
-}
-
-NMConnectionProvider *
-nm_device_get_connection_provider (NMDevice *device)
-{
- g_return_val_if_fail (device != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (device)->con_provider;
-}
-
-static SlaveInfo *
-find_slave_info (NMDevice *self, NMDevice *slave)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- SlaveInfo *info;
- GSList *iter;
-
- for (iter = priv->slaves; iter; iter = g_slist_next (iter)) {
- info = iter->data;
- if (info->slave == slave)
- return info;
- }
- return NULL;
-}
-
-static void
-free_slave_info (SlaveInfo *info)
-{
- g_signal_handler_disconnect (info->slave, info->watch_id);
- g_clear_object (&info->slave);
- memset (info, 0, sizeof (*info));
- g_free (info);
-}
-
-/**
- * nm_device_enslave_slave:
- * @dev: the master device
- * @slave: the slave device to enslave
- * @connection: the slave device's connection
- *
- * If @dev is capable of enslaving other devices (ie it's a bridge, bond, etc)
- * then this function enslaves @slave.
- *
- * Returns: %TRUE on success, %FALSE on failure or if this device cannot enslave
- * other devices.
- */
-static gboolean
-nm_device_enslave_slave (NMDevice *dev, NMDevice *slave, NMConnection *connection)
-{
- SlaveInfo *info;
- gboolean success = FALSE;
-
- g_return_val_if_fail (dev != NULL, FALSE);
- g_return_val_if_fail (slave != NULL, FALSE);
- g_return_val_if_fail (nm_device_get_state (slave) >= NM_DEVICE_STATE_DISCONNECTED, FALSE);
- g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->enslave_slave != NULL, FALSE);
-
- info = find_slave_info (dev, slave);
- if (!info)
- return FALSE;
-
- g_warn_if_fail (info->enslaved == FALSE);
- success = NM_DEVICE_GET_CLASS (dev)->enslave_slave (dev, slave, connection);
- if (success) {
- info->enslaved = TRUE;
- nm_device_slave_notify_enslaved (info->slave, TRUE, FALSE);
- }
-
- /* Ensure the device's hardware address is up-to-date; it often changes
- * when slaves change.
- */
- if (NM_DEVICE_GET_CLASS (dev)->update_hw_address)
- NM_DEVICE_GET_CLASS (dev)->update_hw_address (dev);
-
- /* Restart IP configuration if we're waiting for slaves. Do this
- * after updating the hardware address as IP config may need the
- * new address.
- */
- if (success) {
- if (NM_DEVICE_GET_PRIVATE (dev)->ip4_state == IP_WAIT)
- nm_device_activate_stage3_ip4_start (dev);
-
- if (NM_DEVICE_GET_PRIVATE (dev)->ip6_state == IP_WAIT)
- nm_device_activate_stage3_ip6_start (dev);
- }
-
- return success;
-}
-
-/**
- * nm_device_release_one_slave:
- * @dev: the master device
- * @slave: the slave device to release
- * @failed: %TRUE if the release was unexpected, ie the master failed
- *
- * If @dev is capable of enslaving other devices (ie it's a bridge, bond, etc)
- * then this function releases the previously enslaved @slave.
- *
- * Returns: %TRUE on success, %FALSE on failure, if this device cannot enslave
- * other devices, or if @slave was never enslaved.
- */
-static gboolean
-nm_device_release_one_slave (NMDevice *dev, NMDevice *slave, gboolean failed)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
- SlaveInfo *info;
- gboolean success = FALSE;
-
- g_return_val_if_fail (slave != NULL, FALSE);
- g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->release_slave != NULL, FALSE);
-
- info = find_slave_info (dev, slave);
- if (!info)
- return FALSE;
-
- if (info->enslaved) {
- success = NM_DEVICE_GET_CLASS (dev)->release_slave (dev, slave);
- g_warn_if_fail (success);
- }
- nm_device_slave_notify_enslaved (info->slave, FALSE, failed);
-
- priv->slaves = g_slist_remove (priv->slaves, info);
- free_slave_info (info);
-
- /* Ensure the device's hardware address is up-to-date; it often changes
- * when slaves change.
- */
- if (NM_DEVICE_GET_CLASS (dev)->update_hw_address)
- NM_DEVICE_GET_CLASS (dev)->update_hw_address (dev);
-
- return success;
-}
-
-static void
-slave_state_changed (NMDevice *slave,
- NMDeviceState slave_new_state,
- NMDeviceState slave_old_state,
- NMDeviceStateReason reason,
- NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- gboolean release = FALSE;
-
- nm_log_dbg (LOGD_DEVICE, "(%s): slave %s state change %d (%s) -> %d (%s)",
- nm_device_get_iface (self),
- nm_device_get_iface (slave),
- slave_old_state,
- state_to_string (slave_old_state),
- slave_new_state,
- state_to_string (slave_new_state));
-
- g_assert (priv->state > NM_DEVICE_STATE_DISCONNECTED);
- g_assert (priv->state <= NM_DEVICE_STATE_ACTIVATED);
-
- /* Don't try to enslave slaves until the master is ready */
- if (priv->state < NM_DEVICE_STATE_CONFIG)
- return;
-
- if (slave_new_state == NM_DEVICE_STATE_IP_CONFIG)
- nm_device_enslave_slave (self, slave, nm_device_get_connection (slave));
- else if (slave_new_state > NM_DEVICE_STATE_ACTIVATED)
- release = TRUE;
- else if ( slave_new_state <= NM_DEVICE_STATE_DISCONNECTED
- && slave_old_state > NM_DEVICE_STATE_DISCONNECTED) {
- /* Catch failures due to unavailable or unmanaged */
- release = TRUE;
- }
-
- if (release) {
- nm_device_release_one_slave (self, slave, FALSE);
- /* Bridge/bond interfaces are left up until manually deactivated */
- if (priv->slaves == NULL && priv->state == NM_DEVICE_STATE_ACTIVATED) {
- nm_log_dbg (LOGD_DEVICE, "(%s): last slave removed; remaining activated",
- nm_device_get_iface (self));
- }
- }
-}
-
-/**
- * nm_device_master_add_slave:
- * @dev: the master device
- * @slave: the slave device to enslave
- *
- * If @dev is capable of enslaving other devices (ie it's a bridge, bond, etc)
- * then this function adds @slave to the slave list for later enslavement.
- *
- * Returns: %TRUE on success, %FALSE on failure
- */
-gboolean
-nm_device_master_add_slave (NMDevice *dev, NMDevice *slave)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
- SlaveInfo *info;
-
- g_return_val_if_fail (dev != NULL, FALSE);
- g_return_val_if_fail (slave != NULL, FALSE);
- g_return_val_if_fail (nm_device_get_state (slave) >= NM_DEVICE_STATE_DISCONNECTED, FALSE);
- g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->enslave_slave != NULL, FALSE);
-
- if (!find_slave_info (dev, slave)) {
- info = g_malloc0 (sizeof (SlaveInfo));
- info->slave = g_object_ref (slave);
- info->watch_id = g_signal_connect (slave, "state-changed",
- G_CALLBACK (slave_state_changed), dev);
- priv->slaves = g_slist_prepend (priv->slaves, info);
- }
-
- return TRUE;
-}
-
-
-/**
- * nm_device_master_get_slaves:
- * @dev: the master device
- *
- * Returns: any slaves of which @device is the master. Caller owns returned list.
- */
-GSList *
-nm_device_master_get_slaves (NMDevice *dev)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
- GSList *slaves = NULL, *iter;
-
- for (iter = priv->slaves; iter; iter = g_slist_next (iter))
- slaves = g_slist_prepend (slaves, ((SlaveInfo *) iter->data)->slave);
-
- return slaves;
-}
-
-/**
- * nm_device_master_get_slave_by_ifindex:
- * @dev: the master device
- * @ifindex: the slave's interface index
- *
- * Returns: the slave with the given @ifindex of which @device is the master,
- * or %NULL if no device with @ifinidex is a slave of @device.
- */
-NMDevice *
-nm_device_master_get_slave_by_ifindex (NMDevice *dev, int ifindex)
-{
- GSList *iter;
-
- for (iter = NM_DEVICE_GET_PRIVATE (dev)->slaves; iter; iter = g_slist_next (iter)) {
- SlaveInfo *info = iter->data;
-
- if (nm_device_get_ip_ifindex (info->slave) == ifindex)
- return info->slave;
- }
- return NULL;
-}
-
-/**
- * nm_device_is_master:
- * @dev: the device
- *
- * Returns: whether @dev can enslave other devices (eg, bridge or bond)
- */
-gboolean
-nm_device_is_master (NMDevice *dev)
-{
- return NM_DEVICE_GET_PRIVATE (dev)->is_master;
-}
-
-/* release all slaves */
-static void
-nm_device_master_release_slaves (NMDevice *self, gboolean failed)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- while (priv->slaves) {
- SlaveInfo *info = priv->slaves->data;
-
- nm_device_release_one_slave (self, info->slave, failed);
- }
-}
-
-
-/**
- * nm_device_slave_notify_enslaved:
- * @dev: the slave device
- * @enslaved: %TRUE if the device is now enslaved, %FALSE if released
- * @master_failed: if released, indicates whether the release was unexpected,
- * ie the master device failed.
- *
- * Notifies a slave that it has been enslaved or released. If released, provides
- * information on whether the release was expected or not, and thus whether the
- * slave should fail it's activation or gracefully deactivate.
- */
-void
-nm_device_slave_notify_enslaved (NMDevice *dev,
- gboolean enslaved,
- gboolean master_failed)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
- NMConnection *connection = nm_device_get_connection (dev);
-
- if (enslaved) {
- g_assert (priv->master);
- g_warn_if_fail (priv->enslaved == FALSE);
- g_warn_if_fail (priv->state == NM_DEVICE_STATE_IP_CONFIG);
-
- nm_log_info (LOGD_DEVICE,
- "Activation (%s) connection '%s' enslaved, continuing activation",
- nm_device_get_iface (dev),
- nm_connection_get_id (connection));
-
- /* Now that we're enslaved, proceed with activation. Remember, slaves
- * don't have any IP configuration, so they skip directly to SECONDARIES.
- */
- priv->enslaved = TRUE;
- priv->ip4_state = IP_DONE;
- priv->ip6_state = IP_DONE;
- nm_device_queue_state (dev, NM_DEVICE_STATE_SECONDARIES, NM_DEVICE_STATE_REASON_NONE);
- } else {
- NMDeviceState new_state = NM_DEVICE_STATE_DISCONNECTED;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- if ( priv->state > NM_DEVICE_STATE_DISCONNECTED
- && priv->state <= NM_DEVICE_STATE_ACTIVATED) {
- if (master_failed) {
- new_state = NM_DEVICE_STATE_FAILED;
- reason = NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED;
-
- nm_log_warn (LOGD_DEVICE,
- "Activation (%s) connection '%s' master failed",
- nm_device_get_iface (dev),
- nm_connection_get_id (connection));
- } else {
- nm_log_dbg (LOGD_DEVICE,
- "Activation (%s) connection '%s' master deactivated",
- nm_device_get_iface (dev),
- nm_connection_get_id (connection));
- }
-
- nm_device_queue_state (dev, new_state, reason);
- }
- }
-}
-
-/**
- * nm_device_get_enslaved:
- * @device: the #NMDevice
- *
- * Returns: %TRUE if the device is enslaved to a master device (eg bridge or
- * bond), %FALSE if not
- */
-gboolean
-nm_device_get_enslaved (NMDevice *device)
-{
- return NM_DEVICE_GET_PRIVATE (device)->enslaved;
-}
-
-/*
- * nm_device_get_act_request
- *
- * Return the devices activation request, if any.
- *
- */
-NMActRequest *
-nm_device_get_act_request (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->act_request;
-}
-
-NMConnection *
-nm_device_get_connection (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- return priv->act_request ? nm_act_request_get_connection (priv->act_request) : NULL;
-}
-
-gboolean
-nm_device_is_available (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->firmware_missing)
- return FALSE;
-
- if (NM_DEVICE_GET_CLASS (self)->is_available)
- return NM_DEVICE_GET_CLASS (self)->is_available (self);
- return TRUE;
-}
-
-gboolean
-nm_device_get_enabled (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
-
- if (NM_DEVICE_GET_CLASS (self)->get_enabled)
- return NM_DEVICE_GET_CLASS (self)->get_enabled (self);
- return TRUE;
-}
-
-void
-nm_device_set_enabled (NMDevice *self, gboolean enabled)
-{
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_DEVICE (self));
-
- if (NM_DEVICE_GET_CLASS (self)->set_enabled)
- NM_DEVICE_GET_CLASS (self)->set_enabled (self, enabled);
-}
-
-RfKillType
-nm_device_get_rfkill_type (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
-
- return NM_DEVICE_GET_PRIVATE (self)->rfkill_type;
-}
-
-static gboolean
-autoconnect_allowed_accumulator (GSignalInvocationHint *ihint,
- GValue *return_accu,
- const GValue *handler_return, gpointer data)
-{
- if (!g_value_get_boolean (handler_return))
- g_value_set_boolean (return_accu, FALSE);
- return TRUE;
-}
-
-gboolean
-nm_device_autoconnect_allowed (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- GValue instance = { 0, };
- GValue retval = { 0, };
-
- g_value_init (&instance, G_TYPE_OBJECT);
- g_value_take_object (&instance, self);
-
- g_value_init (&retval, G_TYPE_BOOLEAN);
- if (priv->autoconnect)
- g_value_set_boolean (&retval, TRUE);
- else
- g_value_set_boolean (&retval, FALSE);
-
- /* Use g_signal_emitv() rather than g_signal_emit() to avoid the return
- * value being changed if no handlers are connected */
- g_signal_emitv (&instance, signals[AUTOCONNECT_ALLOWED], 0, &retval);
- return g_value_get_boolean (&retval);
-}
-
-NMConnection *
-nm_device_get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object)
-{
- guint32 caps;
- GSList *iter, *available_conns;
- NMConnection *best_connection;
-
- g_return_val_if_fail (NM_IS_DEVICE (dev), NULL);
- g_return_val_if_fail (specific_object != NULL, NULL);
- g_return_val_if_fail (*specific_object == NULL, NULL);
-
- caps = nm_device_get_capabilities (dev);
- /* Don't use devices that SUCK */
- if (!(caps & NM_DEVICE_CAP_NM_SUPPORTED))
- return NULL;
-
- if (!NM_DEVICE_GET_CLASS (dev)->get_best_auto_connection)
- return NULL;
-
- available_conns = NULL;
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- NMSettingConnection *s_con;
-
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
- if (nm_setting_connection_get_autoconnect (s_con))
- available_conns = g_slist_prepend (available_conns, connection);
- }
-
- if (!available_conns)
- return NULL;
-
- best_connection = NM_DEVICE_GET_CLASS (dev)->get_best_auto_connection (dev, available_conns, specific_object);
-
- g_slist_free (available_conns);
- return best_connection;
-}
-
-gboolean
-nm_device_complete_connection (NMDevice *self,
- NMConnection *connection,
- const char *specific_object,
- const GSList *existing_connections,
- GError **error)
-{
- gboolean success = FALSE;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (connection != NULL, FALSE);
-
- if (!NM_DEVICE_GET_CLASS (self)->complete_connection) {
- g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_CONNECTION_INVALID,
- "Device class %s had no complete_connection method",
- G_OBJECT_TYPE_NAME (self));
- return FALSE;
- }
-
- success = NM_DEVICE_GET_CLASS (self)->complete_connection (self,
- connection,
- specific_object,
- existing_connections,
- error);
- if (success)
- success = nm_connection_verify (connection, error);
-
- return success;
-}
-
-gboolean
-nm_device_check_connection_compatible (NMDevice *device,
- NMConnection *connection,
- GError **error)
-{
- g_return_val_if_fail (device != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
- g_return_val_if_fail (connection != NULL, FALSE);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
-
- if (NM_DEVICE_GET_CLASS (device)->check_connection_compatible)
- return NM_DEVICE_GET_CLASS (device)->check_connection_compatible (device, connection, error);
- return TRUE;
-}
-
-gboolean
-nm_device_can_assume_connections (NMDevice *device)
-{
- g_return_val_if_fail (device != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
-
- return !!NM_DEVICE_GET_CLASS (device)->connection_match_config;
-}
-
-static void
-dnsmasq_state_changed_cb (NMDnsMasqManager *manager, guint32 status, gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
-
- switch (status) {
- case NM_DNSMASQ_STATUS_DEAD:
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SHARED_START_FAILED);
- break;
- default:
- break;
- }
-}
-
-static void
-activation_source_clear (NMDevice *self, gboolean remove_source, int family)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- guint *act_source_id;
- gpointer *act_source_func;
-
- if (family == AF_INET6) {
- act_source_id = &priv->act_source6_id;
- act_source_func = &priv->act_source6_func;
- } else {
- act_source_id = &priv->act_source_id;
- act_source_func = &priv->act_source_func;
- }
-
- if (*act_source_id) {
- if (remove_source)
- g_source_remove (*act_source_id);
- *act_source_id = 0;
- *act_source_func = NULL;
- }
-}
-
-static void
-activation_source_schedule (NMDevice *self, GSourceFunc func, int family)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- guint *act_source_id;
- gpointer *act_source_func;
-
- if (family == AF_INET6) {
- act_source_id = &priv->act_source6_id;
- act_source_func = &priv->act_source6_func;
- } else {
- act_source_id = &priv->act_source_id;
- act_source_func = &priv->act_source_func;
- }
-
- if (*act_source_id) {
- nm_log_err (LOGD_DEVICE, "activation stage already scheduled");
- }
-
- /* Don't bother rescheduling the same function that's about to
- * run anyway. Fixes issues with crappy wireless drivers sending
- * streams of associate events before NM has had a chance to process
- * the first one.
- */
- if (!*act_source_id || (*act_source_func != func)) {
- activation_source_clear (self, TRUE, family);
- *act_source_id = g_idle_add (func, self);
- *act_source_func = func;
- }
-}
-
-gboolean
-nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6)
-{
- NMConnection *connection;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
-
- g_return_val_if_fail (self != NULL, TRUE);
-
- connection = nm_device_get_connection (self);
- g_assert (connection);
-
- /* Fail the connection if the failed IP method is required to complete */
- if (ip6) {
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
- if (s_ip6 && !nm_setting_ip6_config_get_may_fail (s_ip6))
- return TRUE;
- } else {
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4 && !nm_setting_ip4_config_get_may_fail (s_ip4))
- return TRUE;
- }
-
- return FALSE;
-}
-
-static NMActStageReturn
-act_stage1_prepare (NMDevice *self, NMDeviceStateReason *reason)
-{
- return NM_ACT_STAGE_RETURN_SUCCESS;
-}
-
-/*
- * nm_device_activate_stage1_device_prepare
- *
- * Prepare for device activation
- *
- */
-static gboolean
-nm_device_activate_stage1_device_prepare (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- const char *iface;
- NMActStageReturn ret;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- /* Clear the activation source ID now that this stage has run */
- activation_source_clear (self, FALSE, 0);
-
- priv->ip4_state = priv->ip6_state = IP_NONE;
-
- iface = nm_device_get_iface (self);
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 1 of 5 (Device Prepare) started...", iface);
- nm_device_state_changed (self, NM_DEVICE_STATE_PREPARE, NM_DEVICE_STATE_REASON_NONE);
-
- ret = NM_DEVICE_GET_CLASS (self)->act_stage1_prepare (self, &reason);
- if (ret == NM_ACT_STAGE_RETURN_POSTPONE) {
- goto out;
- } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- goto out;
- }
- g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
-
- nm_device_activate_schedule_stage2_device_config (self);
-
-out:
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 1 of 5 (Device Prepare) complete.", iface);
- return FALSE;
-}
-
-
-/*
- * nm_device_activate_schedule_stage1_device_prepare
- *
- * Prepare a device for activation
- *
- */
-void
-nm_device_activate_schedule_stage1_device_prepare (NMDevice *self)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->act_request);
-
- activation_source_schedule (self, nm_device_activate_stage1_device_prepare, 0);
-
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 1 of 5 (Device Prepare) scheduled...",
- nm_device_get_iface (self));
-}
-
-static NMActStageReturn
-act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
- GSList *iter;
-
- /* If we have slaves that aren't yet enslaved, do that now */
- for (iter = priv->slaves; iter; iter = g_slist_next (iter)) {
- SlaveInfo *info = iter->data;
-
- if (nm_device_get_state (info->slave) == NM_DEVICE_STATE_IP_CONFIG)
- nm_device_enslave_slave (dev, info->slave, nm_device_get_connection (info->slave));
- }
-
- /* Nothing to do */
- return NM_ACT_STAGE_RETURN_SUCCESS;
-}
-
-/*
- * nm_device_activate_stage2_device_config
- *
- * Determine device parameters and set those on the device, ie
- * for wireless devices, set SSID, keys, etc.
- *
- */
-static gboolean
-nm_device_activate_stage2_device_config (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- const char * iface;
- NMActStageReturn ret;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
- gboolean no_firmware = FALSE;
-
- /* Clear the activation source ID now that this stage has run */
- activation_source_clear (self, FALSE, 0);
-
- iface = nm_device_get_iface (self);
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) starting...", iface);
- nm_device_state_changed (self, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_REASON_NONE);
-
- if (!nm_device_bring_up (self, FALSE, &no_firmware)) {
- if (no_firmware)
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_FIRMWARE_MISSING);
- else
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_CONFIG_FAILED);
- goto out;
- }
-
- ret = NM_DEVICE_GET_CLASS (self)->act_stage2_config (self, &reason);
- if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
- goto out;
- else if (ret == NM_ACT_STAGE_RETURN_FAILURE)
- {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- goto out;
- }
- g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
-
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) successful.", iface);
-
- nm_device_activate_schedule_stage3_ip_config_start (self);
-
-out:
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) complete.", iface);
- return FALSE;
-}
-
-
-/*
- * nm_device_activate_schedule_stage2_device_config
- *
- * Schedule setup of the hardware device
- *
- */
-void
-nm_device_activate_schedule_stage2_device_config (NMDevice *self)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->act_request);
-
- activation_source_schedule (self, nm_device_activate_stage2_device_config, 0);
-
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 2 of 5 (Device Configure) scheduled...",
- nm_device_get_iface (self));
-}
-
-/*********************************************/
-/* avahi-autoipd stuff */
-
-static void
-aipd_timeout_remove (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->aipd_timeout) {
- g_source_remove (priv->aipd_timeout);
- priv->aipd_timeout = 0;
- }
-}
-
-static void
-aipd_cleanup (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->aipd_watch) {
- g_source_remove (priv->aipd_watch);
- priv->aipd_watch = 0;
- }
-
- if (priv->aipd_pid > 0) {
- kill (priv->aipd_pid, SIGKILL);
-
- /* ensure the child is reaped */
- nm_log_dbg (LOGD_AUTOIP4, "waiting for avahi-autoipd pid %d to exit", priv->aipd_pid);
- waitpid (priv->aipd_pid, NULL, 0);
- nm_log_dbg (LOGD_AUTOIP4, "avahi-autoip pid %d cleaned up", priv->aipd_pid);
-
- priv->aipd_pid = -1;
- }
-
- aipd_timeout_remove (self);
-}
-
-static NMIP4Config *
-aipd_get_ip4_config (NMDevice *self, struct in_addr lla)
-{
- NMIP4Config *config = NULL;
- NMIP4Address *addr;
- NMIP4Route *route;
-
- config = nm_ip4_config_new ();
- g_assert (config);
-
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, (guint32) lla.s_addr);
- nm_ip4_address_set_prefix (addr, 16);
- nm_ip4_config_take_address (config, addr);
-
- /* Add a multicast route for link-local connections: destination= 224.0.0.0, netmask=240.0.0.0 */
- route = nm_ip4_route_new ();
- nm_ip4_route_set_dest (route, (guint32) htonl (0xE0000000L));
- nm_ip4_route_set_prefix (route, 4);
- nm_ip4_route_set_next_hop (route, (guint32) 0);
- nm_ip4_route_set_metric (route, 0);
- nm_ip4_config_take_route (config, route);
-
- return config;
-}
-
-static void
-autoip_changed (NMDevice *self,
- NMIP4Config *config,
- NMSettingIP4Config *s_ip4)
-{
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- nm_utils_merge_ip4_config (config, s_ip4);
- if (!nm_device_set_ip4_config (self, config, FALSE, &reason)) {
- nm_log_err (LOGD_AUTOIP4, "(%s): failed to update IP4 config in response to autoip event.",
- nm_device_get_iface (self));
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- }
-}
-
-#define IPV4LL_NETWORK (htonl (0xA9FE0000L))
-#define IPV4LL_NETMASK (htonl (0xFFFF0000L))
-
-void
-nm_device_handle_autoip4_event (NMDevice *self,
- const char *event,
- const char *address)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMConnection *connection = NULL;
- NMSettingIP4Config *s_ip4 = NULL;
- const char *iface, *method = NULL;
-
- g_return_if_fail (event != NULL);
-
- if (priv->act_request == NULL)
- return;
-
- connection = nm_act_request_get_connection (priv->act_request);
- g_assert (connection);
-
- /* Ignore if the connection isn't an AutoIP connection */
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
-
- if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL) != 0)
- return;
-
- iface = nm_device_get_iface (self);
-
- if (strcmp (event, "BIND") == 0) {
- struct in_addr lla;
- NMIP4Config *config;
-
- if (inet_pton (AF_INET, address, &lla) <= 0) {
- nm_log_err (LOGD_AUTOIP4, "(%s): invalid address %s received from avahi-autoipd.",
- iface, address);
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_AUTOIP_ERROR);
- return;
- }
-
- if ((lla.s_addr & IPV4LL_NETMASK) != IPV4LL_NETWORK) {
- nm_log_err (LOGD_AUTOIP4, "(%s): invalid address %s received from avahi-autoipd (not link-local).",
- iface, address);
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_AUTOIP_ERROR);
- return;
- }
-
- config = aipd_get_ip4_config (self, lla);
- if (config == NULL) {
- nm_log_err (LOGD_AUTOIP4, "failed to get autoip config");
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
- return;
- }
-
- if (priv->ip4_state == IP_CONF) {
- aipd_timeout_remove (self);
- nm_device_activate_schedule_ip4_config_result (self, config);
- } else if (priv->ip4_state == IP_DONE) {
- autoip_changed (self, config, s_ip4);
- } else
- g_assert_not_reached ();
-
- g_object_unref (config);
- } else {
- nm_log_warn (LOGD_AUTOIP4, "(%s): autoip address %s no longer valid because '%s'.",
- iface, address, event);
-
- /* The address is gone; terminate the connection or fail activation */
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
- }
-}
-
-static void
-aipd_watch_cb (GPid pid, gint status, gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMDeviceState state;
- const char *iface;
-
- if (!priv->aipd_watch)
- return;
- priv->aipd_watch = 0;
-
- iface = nm_device_get_iface (self);
-
- if (WIFEXITED (status)) {
- nm_log_dbg (LOGD_AUTOIP4, "(%s): avahi-autoipd exited with error code %d",
- iface, WEXITSTATUS (status));
- } else if (WIFSTOPPED (status)) {
- nm_log_warn (LOGD_AUTOIP4, "(%s): avahi-autoipd stopped unexpectedly with signal %d",
- iface, WSTOPSIG (status));
- } else if (WIFSIGNALED (status)) {
- nm_log_warn (LOGD_AUTOIP4, "(%s): avahi-autoipd died with signal %d",
- iface, WTERMSIG (status));
- } else {
- nm_log_warn (LOGD_AUTOIP4, "(%s): avahi-autoipd died from an unknown cause", iface);
- }
-
- aipd_cleanup (self);
-
- state = nm_device_get_state (self);
- if (nm_device_is_activating (self) || (state == NM_DEVICE_STATE_ACTIVATED))
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_AUTOIP_FAILED);
-}
-
-static gboolean
-aipd_timeout_cb (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->aipd_timeout) {
- nm_log_info (LOGD_AUTOIP4, "(%s): avahi-autoipd timed out.", nm_device_get_iface (self));
- priv->aipd_timeout = 0;
- aipd_cleanup (self);
-
- if (priv->ip4_state == IP_CONF)
- nm_device_activate_schedule_ip4_config_timeout (self);
- }
-
- return FALSE;
-}
-
-static void
-aipd_child_setup (gpointer user_data G_GNUC_UNUSED)
-{
- /* We are in the child process at this point.
- * Give child it's own program group for signal
- * separation.
- */
- pid_t pid = getpid ();
- setpgid (pid, pid);
-
- /*
- * We blocked signals in main(). We need to restore original signal
- * mask for avahi-autoipd here so that it can receive signals.
- */
- nm_unblock_posix_signals (NULL);
-}
-
-static NMActStageReturn
-aipd_start (NMDevice *self, NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- const char *iface = nm_device_get_iface (self);
- char *argv[6], *cmdline;
- const char **aipd_binary = NULL;
- static const char *aipd_paths[] = {
- "/usr/sbin/avahi-autoipd",
- "/usr/local/sbin/avahi-autoipd",
- NULL
- };
- int i = 0;
- GError *error = NULL;
-
- aipd_cleanup (self);
-
- /* Find avahi-autoipd */
- aipd_binary = aipd_paths;
- while (*aipd_binary != NULL) {
- if (g_file_test (*aipd_binary, G_FILE_TEST_EXISTS))
- break;
- aipd_binary++;
- }
-
- if (!*aipd_binary) {
- nm_log_warn (LOGD_DEVICE | LOGD_AUTOIP4,
- "Activation (%s) Stage 3 of 5 (IP Configure Start) failed"
- " to start avahi-autoipd: not found", iface);
- *reason = NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED;
- return NM_ACT_STAGE_RETURN_FAILURE;
- }
-
- argv[i++] = (char *) (*aipd_binary);
- argv[i++] = "--script";
- argv[i++] = LIBEXECDIR "/nm-avahi-autoipd.action";
- if (nm_logging_level_enabled (LOGL_DEBUG))
- argv[i++] = "--debug";
- argv[i++] = (char *) nm_device_get_ip_iface (self);
- argv[i++] = NULL;
-
- cmdline = g_strjoinv (" ", argv);
- nm_log_dbg (LOGD_AUTOIP4, "running: %s", cmdline);
- g_free (cmdline);
-
- if (!g_spawn_async ("/", argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
- &aipd_child_setup, NULL, &(priv->aipd_pid), &error)) {
- nm_log_warn (LOGD_DEVICE | LOGD_AUTOIP4,
- "Activation (%s) Stage 3 of 5 (IP Configure Start) failed"
- " to start avahi-autoipd: %s",
- iface,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- aipd_cleanup (self);
- return NM_ACT_STAGE_RETURN_FAILURE;
- }
-
- nm_log_info (LOGD_DEVICE | LOGD_AUTOIP4,
- "Activation (%s) Stage 3 of 5 (IP Configure Start) started"
- " avahi-autoipd...", iface);
-
- /* Monitor the child process so we know when it dies */
- priv->aipd_watch = g_child_watch_add (priv->aipd_pid, aipd_watch_cb, self);
-
- /* Start a timeout to bound the address attempt */
- priv->aipd_timeout = g_timeout_add_seconds (20, aipd_timeout_cb, self);
-
- return NM_ACT_STAGE_RETURN_POSTPONE;
-}
-
-/*********************************************/
-/* DHCPv4 stuff */
-
-static void
-dhcp4_add_option_cb (gpointer key, gpointer value, gpointer user_data)
-{
- nm_dhcp4_config_add_option (NM_DHCP4_CONFIG (user_data),
- (const char *) key,
- (const char *) value);
-}
-
-static void
-dhcp4_lease_change (NMDevice *device, NMIP4Config *config)
-{
- NMConnection *connection;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- if (config == NULL) {
- nm_log_warn (LOGD_DHCP4, "(%s): failed to get DHCPv4 config for rebind",
- nm_device_get_ip_iface (device));
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
- return;
- }
-
- connection = nm_device_get_connection (device);
- g_assert (connection);
-
- /* Merge with user overrides */
- nm_utils_merge_ip4_config (config, nm_connection_get_setting_ip4_config (connection));
-
- if (!nm_device_set_ip4_config (device, config, FALSE, &reason)) {
- nm_log_warn (LOGD_DHCP4, "(%s): failed to update IPv4 config in response to DHCP event.",
- nm_device_get_ip_iface (device));
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
- return;
- }
-
- /* Notify dispatcher scripts of new DHCP4 config */
- nm_dispatcher_call (DISPATCHER_ACTION_DHCP4_CHANGE, connection, device, NULL, NULL);
-}
-
-static void
-dhcp4_fail (NMDevice *device, gboolean timeout)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
-
- nm_dhcp4_config_reset (priv->dhcp4_config);
-
- if (timeout || (priv->ip4_state == IP_CONF))
- nm_device_activate_schedule_ip4_config_timeout (device);
- else if (priv->ip4_state == IP_DONE)
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
-}
-
-static void
-dhcp4_state_changed (NMDHCPClient *client,
- NMDHCPState state,
- gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- NMDeviceState dev_state;
- NMIP4Config *config;
-
- g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == FALSE);
-
- nm_log_dbg (LOGD_DHCP4, "(%s): new DHCPv4 client state %d",
- nm_device_get_iface (device), state);
-
- dev_state = nm_device_get_state (device);
-
- switch (state) {
- case DHC_BOUND4: /* lease obtained */
- case DHC_RENEW4: /* lease renewed */
- case DHC_REBOOT: /* have valid lease, but now obtained a different one */
- case DHC_REBIND4: /* new, different lease */
- config = nm_dhcp_client_get_ip4_config (priv->dhcp4_client, FALSE);
-
- /* Update the DHCP4 config object with new DHCP options */
- nm_dhcp4_config_reset (priv->dhcp4_config);
- if (config) {
- nm_dhcp_client_foreach_option (priv->dhcp4_client,
- dhcp4_add_option_cb,
- priv->dhcp4_config);
- }
- g_object_notify (G_OBJECT (device), NM_DEVICE_DHCP4_CONFIG);
-
- if (priv->ip4_state == IP_CONF)
- nm_device_activate_schedule_ip4_config_result (device, config);
- else if (priv->ip4_state == IP_DONE)
- dhcp4_lease_change (device, config);
-
- if (config)
- g_object_unref (config);
- break;
- case DHC_TIMEOUT: /* timed out contacting DHCP server */
- dhcp4_fail (device, TRUE);
- break;
- case DHC_END: /* dhclient exited normally */
- case DHC_FAIL: /* all attempts to contact server timed out, sleeping */
- case DHC_ABEND: /* dhclient exited abnormally */
- /* dhclient quit and can't get/renew a lease; so kill the connection */
- dhcp4_fail (device, FALSE);
- break;
- default:
- break;
- }
-}
-
-static void
-dhcp4_timeout (NMDHCPClient *client, gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (user_data);
-
- g_return_if_fail (nm_device_get_act_request (device) != NULL);
- g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == FALSE);
-
- nm_dhcp_client_stop (client, FALSE);
- dhcp4_fail (device, TRUE);
-}
-
-static NMActStageReturn
-dhcp4_start (NMDevice *self,
- NMConnection *connection,
- NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMSettingIP4Config *s_ip4;
- guint8 *anycast = NULL;
- GByteArray *tmp = NULL;
- guint hwaddr_len = 0;
- const guint8 *hwaddr;
-
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
-
- if (priv->dhcp_anycast_address)
- anycast = priv->dhcp_anycast_address->data;
-
- /* Clear old exported DHCP options */
- if (priv->dhcp4_config)
- g_object_unref (priv->dhcp4_config);
- priv->dhcp4_config = nm_dhcp4_config_new ();
-
- hwaddr = nm_device_get_hw_address (self, &hwaddr_len);
- if (hwaddr) {
- tmp = g_byte_array_sized_new (hwaddr_len);
- g_byte_array_append (tmp, hwaddr, hwaddr_len);
- }
-
- /* Begin DHCP on the interface */
- g_warn_if_fail (priv->dhcp4_client == NULL);
- priv->dhcp4_client = nm_dhcp_manager_start_ip4 (priv->dhcp_manager,
- nm_device_get_ip_iface (self),
- tmp,
- nm_connection_get_uuid (connection),
- s_ip4,
- priv->dhcp_timeout,
- anycast);
-
- if (tmp)
- g_byte_array_free (tmp, TRUE);
-
- if (!priv->dhcp4_client) {
- *reason = NM_DEVICE_STATE_REASON_DHCP_START_FAILED;
- return NM_ACT_STAGE_RETURN_FAILURE;
- }
-
- priv->dhcp4_state_sigid = g_signal_connect (priv->dhcp4_client,
- "state-changed",
- G_CALLBACK (dhcp4_state_changed),
- self);
- priv->dhcp4_timeout_sigid = g_signal_connect (priv->dhcp4_client,
- "timeout",
- G_CALLBACK (dhcp4_timeout),
- self);
-
- /* DHCP devices will be notified by the DHCP manager when stuff happens */
- return NM_ACT_STAGE_RETURN_POSTPONE;
-}
-
-gboolean
-nm_device_dhcp4_renew (NMDevice *self, gboolean release)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActStageReturn ret;
- NMDeviceStateReason reason;
- NMConnection *connection;
-
- g_return_val_if_fail (priv->dhcp4_client != NULL, FALSE);
-
- nm_log_info (LOGD_DHCP4, "(%s): DHCPv4 lease renewal requested",
- nm_device_get_iface (self));
-
- /* Terminate old DHCP instance and release the old lease */
- dhcp4_cleanup (self, TRUE, release);
-
- connection = nm_device_get_connection (self);
- g_assert (connection);
-
- /* Start DHCP again on the interface */
- ret = dhcp4_start (self, connection, &reason);
-
- return (ret != NM_ACT_STAGE_RETURN_FAILURE);
-}
-
-/*********************************************/
-
-static GHashTable *shared_ips = NULL;
-
-static void
-release_shared_ip (gpointer data)
-{
- g_hash_table_remove (shared_ips, data);
-}
-
-static guint32
-reserve_shared_ip (void)
-{
- guint32 start = (guint32) ntohl (0x0a2a0001); /* 10.42.0.1 */
- guint32 count = 0;
-
- while (g_hash_table_lookup (shared_ips, GUINT_TO_POINTER (start + count))) {
- count += ntohl (0x100);
- if (count > ntohl (0xFE00)) {
- nm_log_err (LOGD_SHARING, "ran out of shared IP addresses!");
- return 0;
- }
- }
-
- g_hash_table_insert (shared_ips, GUINT_TO_POINTER (start + count), GUINT_TO_POINTER (TRUE));
- return start + count;
-}
-
-static NMIP4Config *
-shared4_new_config (NMDevice *self, NMDeviceStateReason *reason)
-{
- NMIP4Config *config = NULL;
- NMIP4Address *addr;
- guint32 tmp_addr;
-
- g_return_val_if_fail (self != NULL, NULL);
-
- if (G_UNLIKELY (shared_ips == NULL))
- shared_ips = g_hash_table_new (g_direct_hash, g_direct_equal);
-
- tmp_addr = reserve_shared_ip ();
- if (!tmp_addr) {
- *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
- return NULL;
- }
-
- config = nm_ip4_config_new ();
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, tmp_addr);
- nm_ip4_address_set_prefix (addr, 24);
- nm_ip4_config_take_address (config, addr);
-
- /* Remove the address lock when the object gets disposed */
- g_object_set_data_full (G_OBJECT (config), "shared-ip",
- GUINT_TO_POINTER (tmp_addr), release_shared_ip);
-
- return config;
-}
-
-/*********************************************/
-
-static gboolean
-have_any_ready_slaves (NMDevice *device, const GSList *slaves)
-{
- const GSList *iter;
-
- /* Any enslaved slave is "ready" in the generic case as it's
- * at least >= NM_DEVCIE_STATE_IP_CONFIG and has had Layer 2
- * properties set up.
- */
- for (iter = slaves; iter; iter = g_slist_next (iter)) {
- if (nm_device_get_enslaved (iter->data))
- return TRUE;
- }
- return FALSE;
-}
-
-static gboolean
-ip4_requires_slaves (NMConnection *connection)
-{
- NMSettingIP4Config *s_ip4;
- const char *method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
-
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
-
- return g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0;
-}
-
-static NMActStageReturn
-act_stage3_ip4_config_start (NMDevice *self,
- NMIP4Config **out_config,
- NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMConnection *connection;
- NMSettingIP4Config *s_ip4;
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- const char *method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
- GSList *slaves;
- gboolean ready_slaves;
-
- g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
- connection = nm_device_get_connection (self);
- g_assert (connection);
-
- if (priv->is_master && ip4_requires_slaves (connection)) {
- /* If the master has no ready slaves, and depends on slaves for
- * a successful IPv4 attempt, then postpone IPv4 addressing.
- */
- slaves = nm_device_master_get_slaves (self);
- ready_slaves = NM_DEVICE_GET_CLASS (self)->have_any_ready_slaves (self, slaves);
- g_slist_free (slaves);
-
- if (ready_slaves == FALSE) {
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "(%s): IPv4 config waiting until slaves are ready",
- nm_device_get_ip_iface (self));
- return NM_ACT_STAGE_RETURN_WAIT;
- }
- }
-
- /* If we did not receive IP4 configuration information, default to DHCP.
- * Slaves, on the other hand, never have any IP configuration themselves,
- * since the master handles all of that.
- */
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (priv->master) /* eg, device is a slave */
- method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
- else if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
- else
- method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
-
- /* Start IPv4 addressing based on the method requested */
- if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0)
- ret = dhcp4_start (self, connection, reason);
- else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL) == 0)
- ret = aipd_start (self, reason);
- else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0) {
- /* Use only IPv4 config from the connection data */
- *out_config = nm_ip4_config_new ();
- g_assert (*out_config);
- ret = NM_ACT_STAGE_RETURN_SUCCESS;
- } else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) == 0) {
- *out_config = shared4_new_config (self, reason);
- if (*out_config) {
- priv->dnsmasq_manager = nm_dnsmasq_manager_new (nm_device_get_ip_iface (self));
- ret = NM_ACT_STAGE_RETURN_SUCCESS;
- } else
- ret = NM_ACT_STAGE_RETURN_FAILURE;
- } else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0) {
- /* Nothing to do... */
- ret = NM_ACT_STAGE_RETURN_STOP;
- } else {
- nm_log_warn (LOGD_IP4, "(%s): unhandled IPv4 config method '%s'; will fail",
- nm_device_get_ip_iface (self), method);
- }
-
- return ret;
-}
-
-/*********************************************/
-/* DHCPv6 stuff */
-
-static void
-dhcp6_add_option_cb (gpointer key, gpointer value, gpointer user_data)
-{
- nm_dhcp6_config_add_option (NM_DHCP6_CONFIG (user_data),
- (const char *) key,
- (const char *) value);
-}
-
-static void
-merge_ip6_configs (NMIP6Config *dst, NMIP6Config *src)
-{
- guint32 i;
-
- g_return_if_fail (src != NULL);
- g_return_if_fail (dst != NULL);
-
- /* addresses */
- for (i = 0; i < nm_ip6_config_get_num_addresses (src); i++)
- nm_ip6_config_add_address (dst, nm_ip6_config_get_address (src, i));
-
- /* ptp address; only replace if src doesn't have one */
- if (!nm_ip6_config_get_ptp_address (dst))
- nm_ip6_config_set_ptp_address (dst, nm_ip6_config_get_ptp_address (src));
-
- /* nameservers */
- for (i = 0; i < nm_ip6_config_get_num_nameservers (src); i++)
- nm_ip6_config_add_nameserver (dst, nm_ip6_config_get_nameserver (src, i));
-
- /* default gateway */
- if (!nm_ip6_config_get_gateway (dst))
- nm_ip6_config_set_gateway (dst, nm_ip6_config_get_gateway (src));
-
- /* routes */
- for (i = 0; i < nm_ip6_config_get_num_routes (src); i++)
- nm_ip6_config_add_route (dst, nm_ip6_config_get_route (src, i));
-
- /* domains */
- for (i = 0; i < nm_ip6_config_get_num_domains (src); i++)
- nm_ip6_config_add_domain (dst, nm_ip6_config_get_domain (src, i));
-
- /* dns searches */
- for (i = 0; i < nm_ip6_config_get_num_searches (src); i++)
- nm_ip6_config_add_search (dst, nm_ip6_config_get_search (src, i));
-
- if (!nm_ip6_config_get_mss (dst))
- nm_ip6_config_set_mss (dst, nm_ip6_config_get_mss (src));
-}
-
-static gboolean
-ip6_config_merge_and_apply (NMDevice *self,
- NMIP6Config *src_config,
- NMDeviceStateReason *out_reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMConnection *connection;
- gboolean success;
- NMIP6Config *composite;
-
- connection = nm_device_get_connection (self);
- g_assert (connection);
-
- /* If no config was passed in, create a new one */
- composite = nm_ip6_config_new ();
- g_assert (composite);
-
- /* Merge in the given config first, if any */
- if (src_config)
- merge_ip6_configs (composite, src_config);
-
- /* Merge RA and DHCPv6 configs into the composite config */
- if (priv->ac_ip6_config && (src_config != priv->ac_ip6_config))
- merge_ip6_configs (composite, priv->ac_ip6_config);
- if (priv->dhcp6_ip6_config && (src_config != priv->dhcp6_ip6_config))
- merge_ip6_configs (composite, priv->dhcp6_ip6_config);
-
- /* Merge user overrides into the composite config */
- nm_utils_merge_ip6_config (composite, nm_connection_get_setting_ip6_config (connection));
-
- success = nm_device_set_ip6_config (self, composite, out_reason);
- g_object_unref (composite);
- return success;
-}
-
-static void
-dhcp6_lease_change (NMDevice *device)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- NMConnection *connection;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- if (priv->dhcp6_ip6_config == NULL) {
- nm_log_warn (LOGD_DHCP6, "(%s): failed to get DHCPv6 config for rebind",
- nm_device_get_ip_iface (device));
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
- return;
- }
-
- g_assert (priv->dhcp6_client); /* sanity check */
-
- connection = nm_device_get_connection (device);
- g_assert (connection);
-
- /* Apply the updated config */
- if (ip6_config_merge_and_apply (device, NULL, &reason) == FALSE) {
- nm_log_warn (LOGD_DHCP6, "(%s): failed to update IPv6 config in response to DHCP event.",
- nm_device_get_ip_iface (device));
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
- } else {
- /* Notify dispatcher scripts of new DHCPv6 config */
- nm_dispatcher_call (DISPATCHER_ACTION_DHCP6_CHANGE, connection, device, NULL, NULL);
- }
-}
-
-static void
-dhcp6_fail (NMDevice *device, gboolean timeout)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
-
- nm_dhcp6_config_reset (priv->dhcp6_config);
-
- if (timeout || (priv->ip6_state == IP_CONF))
- nm_device_activate_schedule_ip6_config_timeout (device);
- else if (priv->ip6_state == IP_DONE)
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
-}
-
-static void
-dhcp6_state_changed (NMDHCPClient *client,
- NMDHCPState state,
- gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- NMDeviceState dev_state;
-
- g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == TRUE);
-
- nm_log_dbg (LOGD_DHCP6, "(%s): new DHCPv6 client state %d",
- nm_device_get_iface (device), state);
-
- dev_state = nm_device_get_state (device);
-
- switch (state) {
- case DHC_BOUND6:
- case DHC_RENEW6: /* lease renewed */
- case DHC_REBOOT: /* have valid lease, but now obtained a different one */
- case DHC_REBIND6: /* new, different lease */
- if (priv->dhcp6_ip6_config)
- g_object_unref (priv->dhcp6_ip6_config);
- priv->dhcp6_ip6_config = nm_dhcp_client_get_ip6_config (priv->dhcp6_client, FALSE);
-
- /* Update the DHCP6 config object with new DHCP options */
- nm_dhcp6_config_reset (priv->dhcp6_config);
- if (priv->dhcp6_ip6_config) {
- nm_dhcp_client_foreach_option (priv->dhcp6_client,
- dhcp6_add_option_cb,
- priv->dhcp6_config);
- }
- g_object_notify (G_OBJECT (device), NM_DEVICE_DHCP6_CONFIG);
-
- if (priv->ip6_state == IP_CONF)
- nm_device_activate_schedule_ip6_config_result (device, priv->dhcp6_ip6_config);
- else if (priv->ip6_state == IP_DONE)
- dhcp6_lease_change (device);
- break;
- case DHC_TIMEOUT: /* timed out contacting DHCP server */
- dhcp6_fail (device, TRUE);
- break;
- case DHC_END: /* dhclient exited normally */
- /* In IPv6 info-only mode, the client doesn't handle leases so it
- * may exit right after getting a response from the server. That's
- * normal. In that case we just ignore the exit.
- */
- if (priv->dhcp6_mode == IP6_DHCP_OPT_OTHERCONF)
- break;
- /* Otherwise, fall through */
- case DHC_FAIL: /* all attempts to contact server timed out, sleeping */
- case DHC_ABEND: /* dhclient exited abnormally */
- /* dhclient quit and can't get/renew a lease; so kill the connection */
- dhcp6_fail (device, FALSE);
- break;
- default:
- break;
- }
-}
-
-static void
-dhcp6_timeout (NMDHCPClient *client, gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (user_data);
-
- g_return_if_fail (nm_device_get_act_request (device) != NULL);
- g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == TRUE);
-
- nm_dhcp_client_stop (client, FALSE);
- dhcp6_fail (device, TRUE);
-}
-
-static NMActStageReturn
-dhcp6_start (NMDevice *self,
- NMConnection *connection,
- guint32 dhcp_opt,
- NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- guint8 *anycast = NULL;
- GByteArray *tmp = NULL;
- guint hwaddr_len = 0;
- const guint8 *hwaddr;
-
- if (!connection) {
- connection = nm_device_get_connection (self);
- g_assert (connection);
- }
-
- /* Begin a DHCP transaction on the interface */
-
- if (priv->dhcp_anycast_address)
- anycast = priv->dhcp_anycast_address->data;
-
- /* Clear old exported DHCP options */
- if (priv->dhcp6_config)
- g_object_unref (priv->dhcp6_config);
- priv->dhcp6_config = nm_dhcp6_config_new ();
-
- g_warn_if_fail (priv->dhcp6_ip6_config == NULL);
- if (priv->dhcp6_ip6_config) {
- g_object_unref (priv->dhcp6_ip6_config);
- priv->dhcp6_ip6_config = NULL;
- }
-
- hwaddr = nm_device_get_hw_address (self, &hwaddr_len);
- if (hwaddr) {
- tmp = g_byte_array_sized_new (hwaddr_len);
- g_byte_array_append (tmp, hwaddr, hwaddr_len);
- }
-
- priv->dhcp6_client = nm_dhcp_manager_start_ip6 (priv->dhcp_manager,
- nm_device_get_ip_iface (self),
- tmp,
- nm_connection_get_uuid (connection),
- nm_connection_get_setting_ip6_config (connection),
- priv->dhcp_timeout,
- anycast,
- (dhcp_opt == IP6_DHCP_OPT_OTHERCONF) ? TRUE : FALSE);
- if (tmp)
- g_byte_array_free (tmp, TRUE);
-
- if (priv->dhcp6_client) {
- priv->dhcp6_state_sigid = g_signal_connect (priv->dhcp6_client,
- "state-changed",
- G_CALLBACK (dhcp6_state_changed),
- self);
- priv->dhcp6_timeout_sigid = g_signal_connect (priv->dhcp6_client,
- "timeout",
- G_CALLBACK (dhcp6_timeout),
- self);
-
- /* DHCP devices will be notified by the DHCP manager when stuff happens */
- ret = NM_ACT_STAGE_RETURN_POSTPONE;
- } else {
- *reason = NM_DEVICE_STATE_REASON_DHCP_START_FAILED;
- ret = NM_ACT_STAGE_RETURN_FAILURE;
- }
-
- return ret;
-}
-
-/******************************************/
-
-static void
-ip6_addrconf_complete (NMIP6Manager *ip6_manager,
- int ifindex,
- guint dhcp_opts,
- gboolean success,
- gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMConnection *connection;
- NMActStageReturn ret;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- if (ifindex != nm_device_get_ip_ifindex (self))
- return;
- g_return_if_fail (priv->act_request != NULL);
- connection = nm_device_get_connection (self);
- g_assert (connection);
-
- if (!priv->ip6_waiting_for_config)
- return;
-
- priv->ip6_waiting_for_config = FALSE;
-
- if (!success) {
- nm_device_activate_schedule_ip6_config_timeout (self);
- return;
- }
-
- priv->dhcp6_mode = dhcp_opts;
-
- /* If addrconf is all that's required, we're done */
- if (priv->dhcp6_mode == IP6_DHCP_OPT_NONE) {
- priv->ac_ip6_config = nm_ip6_manager_get_ip6_config (ip6_manager, ifindex);
- nm_device_activate_schedule_ip6_config_result (self, priv->ac_ip6_config);
- return;
- }
-
- /* If the router said to use DHCP for managed or otherconf, do it */
-
- /* Don't re-start DHCPv6 if it's already in progress */
- if (priv->ip6_state != IP_CONF)
- return;
-
- nm_log_info (LOGD_DEVICE | LOGD_DHCP6,
- "Activation (%s) Stage 3 of 5 (IP Configure Start) starting DHCPv6"
- " as requested by IPv6 router...",
- priv->iface);
-
- ret = dhcp6_start (self, connection, priv->dhcp6_mode, &reason);
- switch (ret) {
- case NM_ACT_STAGE_RETURN_SUCCESS:
- /* Shouldn't get this, but handle it anyway */
- g_warn_if_reached ();
- priv->ac_ip6_config = nm_ip6_manager_get_ip6_config (ip6_manager, ifindex);
- nm_device_activate_schedule_ip6_config_result (self, priv->ac_ip6_config);
- break;
- case NM_ACT_STAGE_RETURN_POSTPONE:
- /* Cache acquired autoconf config and wait for DHCPv6 to complete */
- priv->ac_ip6_config = nm_ip6_manager_get_ip6_config (ip6_manager, ifindex);
- break;
- default:
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- break;
- }
-}
-
-static void
-ip6_config_changed (NMIP6Manager *ip6_manager,
- int ifindex,
- guint dhcp_opts,
- gboolean success,
- gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- if (ifindex != nm_device_get_ip_ifindex (self))
- return;
- g_return_if_fail (priv->act_request != NULL);
-
- /* If autoconf failed and IPv6 previously succeeded, fail */
- if (!success && (priv->ip6_state == IP_DONE)) {
- nm_device_state_changed (self,
- NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
- return;
- }
-
- /* FIXME: re-run DHCPv6 here to get any new nameservers or whatever */
-
- if (priv->ac_ip6_config)
- g_object_unref (priv->ac_ip6_config);
- priv->ac_ip6_config = nm_ip6_manager_get_ip6_config (ip6_manager, ifindex);
-
- if (ip6_config_merge_and_apply (self, NULL, &reason) == FALSE) {
- nm_log_warn (LOGD_DHCP6, "(%s): failed to update IPv6 config in response to Router Advertisement.",
- nm_device_get_ip_iface (self));
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- }
-}
-
-static gboolean
-addrconf6_start (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMConnection *connection;
- gboolean success;
- const guint8 *hwaddr;
- guint hwaddr_len = 0;
-
- connection = nm_device_get_connection (self);
- g_assert (connection);
-
- g_warn_if_fail (priv->ac_ip6_config == NULL);
- if (priv->ac_ip6_config) {
- g_object_unref (priv->ac_ip6_config);
- priv->ac_ip6_config = NULL;
- }
-
- if (!priv->ip6_manager) {
- priv->ip6_manager = nm_ip6_manager_get ();
- priv->ip6_addrconf_sigid = g_signal_connect (priv->ip6_manager,
- "addrconf-complete",
- G_CALLBACK (ip6_addrconf_complete),
- self);
- priv->ip6_config_changed_sigid = g_signal_connect (priv->ip6_manager,
- "config-changed",
- G_CALLBACK (ip6_config_changed),
- self);
- }
-
- hwaddr = nm_device_get_hw_address (self, &hwaddr_len);
- g_warn_if_fail (hwaddr != NULL);
- success = nm_ip6_manager_prepare_interface (priv->ip6_manager,
- nm_device_get_ip_ifindex (self),
- hwaddr,
- hwaddr_len,
- nm_connection_get_setting_ip6_config (connection),
- priv->ip6_accept_ra_path);
- if (success) {
- priv->ip6_waiting_for_config = TRUE;
- nm_ip6_manager_begin_addrconf (priv->ip6_manager, nm_device_get_ip_ifindex (self));
- }
-
- return success;
-}
-
-static void
-addrconf6_cleanup (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->ac_ip6_config) {
- g_object_unref (priv->ac_ip6_config);
- priv->ac_ip6_config = NULL;
- }
-
- if (!priv->ip6_manager)
- return;
-
- if (priv->ip6_addrconf_sigid) {
- g_signal_handler_disconnect (priv->ip6_manager,
- priv->ip6_addrconf_sigid);
- priv->ip6_addrconf_sigid = 0;
- }
- if (priv->ip6_config_changed_sigid) {
- g_signal_handler_disconnect (priv->ip6_manager,
- priv->ip6_config_changed_sigid);
- priv->ip6_config_changed_sigid = 0;
- }
-
- nm_ip6_manager_cancel_addrconf (priv->ip6_manager, nm_device_get_ip_ifindex (self));
- g_object_unref (priv->ip6_manager);
- priv->ip6_manager = NULL;
-}
-
-/******************************************/
-
-/* Get net.ipv6.conf.default.use_tempaddr value from /etc/sysctl.conf or
- * /lib/sysctl.d/sysctl.conf
- */
-static int
-ip6_use_tempaddr (void)
-{
- char *contents = NULL;
- gsize len = 0;
- const char *group_name = "[forged_group]\n";
- char *sysctl_data = NULL;
- GKeyFile *keyfile;
- GError *error = NULL;
- int tmp, ret = -1;
-
- /* Read file contents to a string. */
- if (!g_file_get_contents ("/etc/sysctl.conf", &contents, &len, NULL))
- if (!g_file_get_contents ("/lib/sysctl.d/sysctl.conf", &contents, &len, NULL))
- return -1;
-
- /* Prepend a group so that we can use GKeyFile parser. */
- sysctl_data = g_strdup_printf ("%s%s", group_name, contents);
-
- keyfile = g_key_file_new ();
- if (keyfile == NULL)
- goto done;
-
- if (!g_key_file_load_from_data (keyfile, sysctl_data, len + strlen (group_name), G_KEY_FILE_NONE, NULL))
- goto done;
-
- tmp = g_key_file_get_integer (keyfile, "forged_group", "net.ipv6.conf.default.use_tempaddr", &error);
- if (error == NULL)
- ret = tmp;
-
-done:
- g_free (contents);
- g_free (sysctl_data);
- g_clear_error (&error);
- g_key_file_free (keyfile);
-
- return ret;
-}
-
-static gboolean
-ip6_requires_slaves (NMConnection *connection)
-{
- NMSettingIP6Config *s_ip6;
- const char *method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
-
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
- if (s_ip6)
- method = nm_setting_ip6_config_get_method (s_ip6);
-
- /* SLAAC, DHCP, and Link-Local depend on connectivity (and thus slaves)
- * to complete addressing. SLAAC and DHCP obviously need a peer to
- * provide a prefix, while Link-Local must perform DAD on the local link.
- */
- return g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0
- || g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0
- || g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0;
-}
-
-static NMActStageReturn
-act_stage3_ip6_config_start (NMDevice *self,
- NMIP6Config **out_config,
- NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- const char *ip_iface;
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- NMConnection *connection;
- NMSettingIP6Config *s_ip6;
- const char *method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
- int conf_use_tempaddr;
- NMSettingIP6ConfigPrivacy ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
- const char *ip6_privacy_str = "0\n";
- GSList *slaves;
- gboolean ready_slaves;
-
- g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
- connection = nm_device_get_connection (self);
- g_assert (connection);
-
- ip_iface = nm_device_get_ip_iface (self);
-
- if (priv->is_master && ip6_requires_slaves (connection)) {
- /* If the master has no ready slaves, and depends on slaves for
- * a successful IPv6 attempt, then postpone IPv6 addressing.
- */
- slaves = nm_device_master_get_slaves (self);
- ready_slaves = NM_DEVICE_GET_CLASS (self)->have_any_ready_slaves (self, slaves);
- g_slist_free (slaves);
-
- if (ready_slaves == FALSE) {
- nm_log_info (LOGD_DEVICE | LOGD_IP6,
- "(%s): IPv6 config waiting until slaves are ready",
- ip_iface);
- return NM_ACT_STAGE_RETURN_WAIT;
- }
- }
-
- update_accept_ra_save (self);
- update_ip6_privacy_save (self);
-
- priv->dhcp6_mode = IP6_DHCP_OPT_NONE;
-
- /* If we did not receive IP6 configuration information, default to AUTO.
- * Slaves, on the other hand, never have any IP configuration themselves,
- * since the master handles all of that.
- */
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
- if (priv->master) /* eg, device is a slave */
- method = NM_SETTING_IP6_CONFIG_METHOD_IGNORE;
- else if (s_ip6)
- method = nm_setting_ip6_config_get_method (s_ip6);
- else
- method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
-
- if ( strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0
- || strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0) {
- if (!addrconf6_start (self)) {
- *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
- ret = NM_ACT_STAGE_RETURN_FAILURE;
- } else
- ret = NM_ACT_STAGE_RETURN_POSTPONE;
- } else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0) {
- /* Router advertisements shouldn't be used in pure DHCP mode */
- if (priv->ip6_accept_ra_path)
- nm_utils_do_sysctl (priv->ip6_accept_ra_path, "0");
-
- priv->dhcp6_mode = IP6_DHCP_OPT_MANAGED;
- ret = dhcp6_start (self, connection, priv->dhcp6_mode, reason);
- } else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0) {
- /* reset the saved RA value when ipv6 is ignored */
- if (priv->ip6_accept_ra_path) {
- nm_utils_do_sysctl (priv->ip6_accept_ra_path,
- priv->ip6_accept_ra_save ? "1" : "0");
- }
- ret = NM_ACT_STAGE_RETURN_STOP;
- } else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0) {
- /* New blank config */
- *out_config = nm_ip6_config_new ();
- g_assert (*out_config);
-
- /* Router advertisements shouldn't be used in manual mode */
- if (priv->ip6_accept_ra_path)
- nm_utils_do_sysctl (priv->ip6_accept_ra_path, "0");
- ret = NM_ACT_STAGE_RETURN_SUCCESS;
- } else {
- nm_log_warn (LOGD_IP6, "(%s): unhandled IPv6 config method '%s'; will fail",
- nm_device_get_ip_iface (self), method);
- }
-
- /* Other methods (shared) aren't implemented yet */
-
- /* Enable/disable IPv6 Privacy Extensions.
- * If a global value is configured by sysadmin (e.g. /etc/sysctl.conf),
- * use that value instead of per-connection value.
- */
- conf_use_tempaddr = ip6_use_tempaddr ();
- if (conf_use_tempaddr >= 0)
- ip6_privacy = conf_use_tempaddr;
- else if (s_ip6)
- ip6_privacy = nm_setting_ip6_config_get_ip6_privacy (s_ip6);
- ip6_privacy = CLAMP (ip6_privacy, NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
-
- switch (ip6_privacy) {
- case NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN:
- case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED:
- ip6_privacy_str = "0";
- break;
- case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR:
- ip6_privacy_str = "1";
- break;
- case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR:
- ip6_privacy_str = "2";
- break;
- }
- if (priv->ip6_privacy_tempaddr_path)
- nm_utils_do_sysctl (priv->ip6_privacy_tempaddr_path, ip6_privacy_str);
-
- return ret;
-}
-
-/**
- * nm_device_activate_stage3_ip4_start:
- * @self: the device
- *
- * Try starting IPv4 configuration.
- */
-gboolean
-nm_device_activate_stage3_ip4_start (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActStageReturn ret;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
- NMIP4Config *ip4_config = NULL;
-
- g_assert (priv->ip4_state == IP_WAIT);
-
- priv->ip4_state = IP_CONF;
- ret = NM_DEVICE_GET_CLASS (self)->act_stage3_ip4_config_start (self, &ip4_config, &reason);
- if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
- g_assert (ip4_config);
- nm_device_activate_schedule_ip4_config_result (self, ip4_config);
- g_object_unref (ip4_config);
- } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- return FALSE;
- } else if (ret == NM_ACT_STAGE_RETURN_STOP) {
- /* Early finish */
- priv->ip4_state = IP_DONE;
- } else if (ret == NM_ACT_STAGE_RETURN_WAIT) {
- /* Wait for something to try IP config again */
- priv->ip4_state = IP_WAIT;
- } else
- g_assert (ret == NM_ACT_STAGE_RETURN_POSTPONE);
-
- return TRUE;
-}
-
-/**
- * nm_device_activate_stage3_ip6_start:
- * @self: the device
- *
- * Try starting IPv6 configuration.
- */
-gboolean
-nm_device_activate_stage3_ip6_start (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActStageReturn ret;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
- NMIP6Config *ip6_config = NULL;
-
- g_assert (priv->ip6_state == IP_WAIT);
-
- priv->ip6_state = IP_CONF;
- ret = NM_DEVICE_GET_CLASS (self)->act_stage3_ip6_config_start (self, &ip6_config, &reason);
- if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
- g_assert (ip6_config);
- nm_device_activate_schedule_ip6_config_result (self, ip6_config);
- g_object_unref (ip6_config);
- } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- return FALSE;
- } else if (ret == NM_ACT_STAGE_RETURN_STOP) {
- /* Early finish */
- priv->ip6_state = IP_DONE;
- } else if (ret == NM_ACT_STAGE_RETURN_WAIT) {
- /* Wait for something to try IP config again */
- priv->ip6_state = IP_WAIT;
- } else
- g_assert (ret == NM_ACT_STAGE_RETURN_POSTPONE);
-
- return TRUE;
-}
-
-/*
- * nm_device_activate_stage3_ip_config_start
- *
- * Begin automatic/manual IP configuration
- *
- */
-static gboolean
-nm_device_activate_stage3_ip_config_start (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- const char *iface;
- int ifindex;
- NMDevice *master;
-
- /* Clear the activation source ID now that this stage has run */
- activation_source_clear (self, FALSE, 0);
-
- iface = nm_device_get_iface (self);
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 3 of 5 (IP Configure Start) started...", iface);
- nm_device_state_changed (self, NM_DEVICE_STATE_IP_CONFIG, NM_DEVICE_STATE_REASON_NONE);
-
- /* Make sure the interface is up before trying to do anything with it */
- ifindex = nm_device_get_ip_ifindex (self);
- if ((ifindex > 0) && (nm_system_iface_is_up (ifindex) == FALSE))
- nm_system_iface_set_up (ifindex, TRUE, NULL);
-
- priv->ip4_state = priv->ip6_state = IP_WAIT;
-
- /* If the device is a slave, then we don't do any IP configuration but we
- * use the IP config stage to indicate to the master we're ready for
- * enslavement. Either the master has already enslaved us, in which case
- * our state transition to SECONDARIES is already queued courtesy of
- * nm_device_slave_notify_enslaved(), or the master is still activating,
- * in which case we postpone activation here until the master enslaves us,
- * which calls nm_device_slave_notify_enslaved().
- */
- master = nm_active_connection_get_master (NM_ACTIVE_CONNECTION (priv->act_request));
- if (master) {
- if (priv->enslaved == FALSE) {
- nm_log_info (LOGD_DEVICE, "Activation (%s) connection '%s' waiting on master '%s'",
- nm_device_get_iface (self),
- nm_connection_get_id (nm_device_get_connection (self)),
- nm_device_get_iface (master));
- }
- goto out;
- }
-
- /* IPv4 */
- if (!nm_device_activate_stage3_ip4_start (self))
- goto out;
-
- /* IPv6 */
- if (!nm_device_activate_stage3_ip6_start (self))
- goto out;
-
-out:
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 3 of 5 (IP Configure Start) complete.", iface);
- return FALSE;
-}
-
-
-static void
-fw_add_to_zone_cb (GError *error, gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- priv->fw_call = NULL;
-
- if (error) {
- /* FIXME: fail the device activation? */
- }
-
- activation_source_schedule (self, nm_device_activate_stage3_ip_config_start, 0);
-
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 3 of 5 (IP Configure Start) scheduled.",
- nm_device_get_iface (self));
-}
-
-/*
- * nm_device_activate_schedule_stage3_ip_config_start
- *
- * Schedule IP configuration start
- */
-void
-nm_device_activate_schedule_stage3_ip_config_start (NMDevice *self)
-{
- NMDevicePrivate *priv;
- NMConnection *connection;
- NMSettingConnection *s_con = NULL;
- NMDeviceState state;
- const char *zone;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->act_request);
-
- state = nm_device_get_state (self);
- if (nm_active_connection_get_assumed (NM_ACTIVE_CONNECTION (priv->act_request)) == FALSE)
- g_warn_if_fail (state >= NM_DEVICE_STATE_PREPARE && state <= NM_DEVICE_STATE_NEED_AUTH);
-
- /* Add the interface to the specified firewall zone */
- connection = nm_device_get_connection (self);
- g_assert (connection);
- s_con = nm_connection_get_setting_connection (connection);
-
- zone = nm_setting_connection_get_zone (s_con);
- nm_log_dbg (LOGD_DEVICE, "Activation (%s) setting firewall zone '%s'",
- nm_device_get_iface (self), zone ? zone : "default");
- priv->fw_call = nm_firewall_manager_add_or_change_zone (priv->fw_manager,
- nm_device_get_ip_iface (self),
- zone,
- TRUE,
- fw_add_to_zone_cb,
- self);
-}
-
-static NMActStageReturn
-act_stage4_ip4_config_timeout (NMDevice *self, NMDeviceStateReason *reason)
-{
- if (nm_device_ip_config_should_fail (self, FALSE)) {
- *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
- return NM_ACT_STAGE_RETURN_FAILURE;
- }
- return NM_ACT_STAGE_RETURN_SUCCESS;
-}
-
-
-/*
- * nm_device_activate_stage4_ip4_config_timeout
- *
- * Time out on retrieving the IPv4 config.
- *
- */
-static gboolean
-nm_device_activate_ip4_config_timeout (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- const char *iface;
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- /* Clear the activation source ID now that this stage has run */
- activation_source_clear (self, FALSE, AF_INET);
-
- iface = nm_device_get_iface (self);
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "Activation (%s) Stage 4 of 5 (IPv4 Configure Timeout) started...",
- iface);
-
- ret = NM_DEVICE_GET_CLASS (self)->act_stage4_ip4_config_timeout (self, &reason);
- if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
- goto out;
- else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- goto out;
- }
- g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
-
- priv->ip4_state = IP_DONE;
-
- /* If IPv4 failed and IPv6 failed, the activation fails */
- if ((priv->ip6_state == IP_DONE) && (priv->ip6_config == NULL)) {
- nm_device_state_changed (self,
- NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
- }
-
-out:
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "Activation (%s) Stage 4 of 5 (IPv4 Configure Timeout) complete.",
- iface);
- return FALSE;
-}
-
-
-/*
- * nm_device_activate_schedule_ip4_config_timeout
- *
- * Deal with a timeout of the IPv4 configuration
- *
- */
-void
-nm_device_activate_schedule_ip4_config_timeout (NMDevice *self)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->act_request);
-
- activation_source_schedule (self, nm_device_activate_ip4_config_timeout, AF_INET);
-
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "Activation (%s) Stage 4 of 5 (IPv4 Configure Timeout) scheduled...",
- nm_device_get_iface (self));
-}
-
-
-static NMActStageReturn
-act_stage4_ip6_config_timeout (NMDevice *self, NMDeviceStateReason *reason)
-{
- if (nm_device_ip_config_should_fail (self, TRUE)) {
- *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
- return NM_ACT_STAGE_RETURN_FAILURE;
- }
-
- return NM_ACT_STAGE_RETURN_SUCCESS;
-}
-
-
-/*
- * nm_device_activate_ip6_config_timeout
- *
- * Time out on retrieving the IPv6 config.
- *
- */
-static gboolean
-nm_device_activate_ip6_config_timeout (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- const char *iface;
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
-
- /* Clear the activation source ID now that this stage has run */
- activation_source_clear (self, FALSE, AF_INET6);
-
- iface = nm_device_get_iface (self);
- nm_log_info (LOGD_DEVICE | LOGD_IP6,
- "Activation (%s) Stage 4 of 5 (IPv6 Configure Timeout) started...",
- iface);
-
- ret = NM_DEVICE_GET_CLASS (self)->act_stage4_ip6_config_timeout (self, &reason);
- if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
- goto out;
- else if (ret == NM_ACT_STAGE_RETURN_FAILURE) {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- goto out;
- }
- g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
-
- priv->ip6_state = IP_DONE;
-
- /* If IPv6 failed and IPv4 failed, the activation fails */
- if ((priv->ip4_state == IP_DONE) && (priv->ip4_config == NULL)) {
- nm_device_state_changed (self,
- NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
- }
-
-out:
- nm_log_info (LOGD_DEVICE | LOGD_IP6,
- "Activation (%s) Stage 4 of 5 (IPv6 Configure Timeout) complete.",
- iface);
- return FALSE;
-}
-
-
-/*
- * nm_device_activate_schedule_ip6_config_timeout
- *
- * Deal with a timeout of the IPv6 configuration
- *
- */
-void
-nm_device_activate_schedule_ip6_config_timeout (NMDevice *self)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->act_request);
-
- activation_source_schedule (self, nm_device_activate_ip6_config_timeout, AF_INET6);
-
- nm_log_info (LOGD_DEVICE | LOGD_IP6,
- "Activation (%s) Stage 4 of 5 (IPv6 Configure Timeout) scheduled...",
- nm_device_get_iface (self));
-}
-
-static void
-share_child_setup (gpointer user_data G_GNUC_UNUSED)
-{
- /* We are in the child process at this point */
- pid_t pid = getpid ();
- setpgid (pid, pid);
-
- nm_unblock_posix_signals (NULL);
-}
-
-static gboolean
-share_init (void)
-{
- int status;
- char *modules[] = { "ip_tables", "iptable_nat", "nf_nat_ftp", "nf_nat_irc",
- "nf_nat_sip", "nf_nat_tftp", "nf_nat_pptp", "nf_nat_h323",
- NULL };
- char **iter;
-
- if (!nm_utils_do_sysctl ("/proc/sys/net/ipv4/ip_forward", "1")) {
- nm_log_err (LOGD_SHARING, "Error starting IP forwarding: (%d) %s",
- errno, strerror (errno));
- return FALSE;
- }
-
- if (!nm_utils_do_sysctl ("/proc/sys/net/ipv4/ip_dynaddr", "1")) {
- nm_log_err (LOGD_SHARING, "error starting IP forwarding: (%d) %s",
- errno, strerror (errno));
- }
-
- for (iter = modules; *iter; iter++) {
- char *argv[3] = { "/sbin/modprobe", *iter, NULL };
- char *envp[1] = { NULL };
- GError *error = NULL;
-
- if (!g_spawn_sync ("/", argv, envp, G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
- share_child_setup, NULL, NULL, NULL, &status, &error)) {
- nm_log_err (LOGD_SHARING, "error loading NAT module %s: (%d) %s",
- *iter, error ? error->code : 0,
- (error && error->message) ? error->message : "unknown");
- if (error)
- g_error_free (error);
- }
- }
-
- return TRUE;
-}
-
-static void
-add_share_rule (NMActRequest *req, const char *table, const char *fmt, ...)
-{
- va_list args;
- char *cmd;
-
- va_start (args, fmt);
- cmd = g_strdup_vprintf (fmt, args);
- va_end (args);
-
- nm_act_request_add_share_rule (req, table, cmd);
- g_free (cmd);
-}
-
-static gboolean
-start_sharing (NMDevice *self, NMIP4Config *config)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActRequest *req;
- GError *error = NULL;
- char str_addr[INET_ADDRSTRLEN + 1];
- char str_mask[INET_ADDRSTRLEN + 1];
- guint32 netmask, network;
- NMIP4Address *ip4_addr;
- const char *ip_iface;
-
- g_return_val_if_fail (config != NULL, FALSE);
-
- ip_iface = nm_device_get_ip_iface (self);
-
- ip4_addr = nm_ip4_config_get_address (config, 0);
- if (!ip4_addr || !nm_ip4_address_get_address (ip4_addr))
- return FALSE;
-
- netmask = nm_utils_ip4_prefix_to_netmask (nm_ip4_address_get_prefix (ip4_addr));
- if (!inet_ntop (AF_INET, &netmask, str_mask, sizeof (str_mask)))
- return FALSE;
-
- network = nm_ip4_address_get_address (ip4_addr) & netmask;
- if (!inet_ntop (AF_INET, &network, str_addr, sizeof (str_addr)))
- return FALSE;
-
- if (!share_init ())
- return FALSE;
-
- req = nm_device_get_act_request (self);
- g_assert (req);
-
- add_share_rule (req, "filter", "INPUT --in-interface %s --protocol tcp --destination-port 53 --jump ACCEPT", ip_iface);
- add_share_rule (req, "filter", "INPUT --in-interface %s --protocol udp --destination-port 53 --jump ACCEPT", ip_iface);
- add_share_rule (req, "filter", "INPUT --in-interface %s --protocol tcp --destination-port 67 --jump ACCEPT", ip_iface);
- add_share_rule (req, "filter", "INPUT --in-interface %s --protocol udp --destination-port 67 --jump ACCEPT", ip_iface);
- add_share_rule (req, "filter", "FORWARD --in-interface %s --jump REJECT", ip_iface);
- add_share_rule (req, "filter", "FORWARD --out-interface %s --jump REJECT", ip_iface);
- add_share_rule (req, "filter", "FORWARD --in-interface %s --out-interface %s --jump ACCEPT", ip_iface, ip_iface);
- add_share_rule (req, "filter", "FORWARD --source %s/%s --in-interface %s --jump ACCEPT", str_addr, str_mask, ip_iface);
- add_share_rule (req, "filter", "FORWARD --destination %s/%s --out-interface %s --match state --state ESTABLISHED,RELATED --jump ACCEPT", str_addr, str_mask, ip_iface);
- add_share_rule (req, "nat", "POSTROUTING --source %s/%s ! --destination %s/%s --jump MASQUERADE", str_addr, str_mask, str_addr, str_mask);
-
- nm_act_request_set_shared (req, TRUE);
-
- if (!nm_dnsmasq_manager_start (priv->dnsmasq_manager, config, &error)) {
- nm_log_err (LOGD_SHARING, "(%s/%s): failed to start dnsmasq: %s",
- nm_device_get_iface (self), ip_iface,
- (error && error->message) ? error->message : "(unknown)");
- g_error_free (error);
- nm_act_request_set_shared (req, FALSE);
- return FALSE;
- }
-
- priv->dnsmasq_state_id = g_signal_connect (priv->dnsmasq_manager, "state-changed",
- G_CALLBACK (dnsmasq_state_changed_cb),
- self);
- return TRUE;
-}
-
-static gboolean
-nm_device_activate_ip4_config_commit (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActRequest *req;
- NMIP4Config *config = NULL;
- const char *iface, *method = NULL;
- NMConnection *connection;
- NMSettingIP4Config *s_ip4;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
- gboolean assumed;
- int ifindex;
-
- /* Clear the activation source ID now that this stage has run */
- activation_source_clear (self, FALSE, AF_INET);
-
- iface = nm_device_get_iface (self);
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 5 of 5 (IPv4 Commit) started...",
- iface);
-
- req = nm_device_get_act_request (self);
- g_assert (req);
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- config = g_object_get_data (G_OBJECT (req), PENDING_IP4_CONFIG);
- g_assert (config);
-
- /* Make sure the interface is up again just because */
- ifindex = nm_device_get_ip_ifindex (self);
- if ((ifindex > 0) && (nm_system_iface_is_up (ifindex) == FALSE))
- nm_system_iface_set_up (ifindex, TRUE, NULL);
-
- /* Allow setting MTU etc */
- if (NM_DEVICE_GET_CLASS (self)->ip4_config_pre_commit)
- NM_DEVICE_GET_CLASS (self)->ip4_config_pre_commit (self, config);
-
- /* Merge with user overrides */
- nm_utils_merge_ip4_config (config, nm_connection_get_setting_ip4_config (connection));
-
- assumed = nm_active_connection_get_assumed (NM_ACTIVE_CONNECTION (priv->act_request));
- if (!nm_device_set_ip4_config (self, config, assumed, &reason)) {
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "Activation (%s) Stage 5 of 5 (IPv4 Commit) failed",
- iface);
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- goto out;
- }
-
- /* Start IPv4 sharing if we need it */
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
-
- if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) == 0) {
- if (!start_sharing (self, config)) {
- nm_log_warn (LOGD_SHARING, "Activation (%s) Stage 5 of 5 (IPv4 Commit) start sharing failed.", iface);
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SHARED_START_FAILED);
- goto out;
- }
- }
-
- /* Enter the SECONDARIES state if this is the first method to complete */
- priv->ip4_state = IP_DONE;
- if (nm_device_get_state (self) == NM_DEVICE_STATE_IP_CONFIG)
- nm_device_state_changed (self, NM_DEVICE_STATE_SECONDARIES, NM_DEVICE_STATE_REASON_NONE);
-
-out:
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 5 of 5 (IPv4 Commit) complete.",
- iface);
-
- /* Balance IP config creation; nm_device_set_ip4_config() takes a reference */
- g_object_set_data (G_OBJECT (req), PENDING_IP4_CONFIG, NULL);
-
- return FALSE;
-}
-
-void
-nm_device_activate_schedule_ip4_config_result (NMDevice *self, NMIP4Config *config)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->act_request);
-
- if (config == NULL) {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
- return;
- }
-
- g_object_set_data_full (G_OBJECT (priv->act_request),
- PENDING_IP4_CONFIG,
- g_object_ref (config),
- g_object_unref);
-
- activation_source_schedule (self, nm_device_activate_ip4_config_commit, AF_INET);
-
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "Activation (%s) Stage 5 of 5 (IPv4 Configure Commit) scheduled...",
- nm_device_get_iface (self));
-}
-
-gboolean
-nm_device_activate_ip4_state_in_conf (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, FALSE);
- return NM_DEVICE_GET_PRIVATE (self)->ip4_state == IP_CONF;
-}
-
-gboolean
-nm_device_activate_ip4_state_in_wait (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, FALSE);
- return NM_DEVICE_GET_PRIVATE (self)->ip4_state == IP_WAIT;
-}
-
-static gboolean
-nm_device_activate_ip6_config_commit (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActRequest *req;
- NMIP6Config *config = NULL;
- const char *iface;
- NMConnection *connection;
- NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
- int ifindex;
-
- /* Clear the activation source ID now that this stage has run */
- activation_source_clear (self, FALSE, AF_INET6);
-
- iface = nm_device_get_iface (self);
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 5 of 5 (IPv6 Commit) started...",
- iface);
-
- req = nm_device_get_act_request (self);
- g_assert (req);
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- config = g_object_get_data (G_OBJECT (req), PENDING_IP6_CONFIG);
- g_assert (config);
-
- /* Make sure the interface is up again just because */
- ifindex = nm_device_get_ip_ifindex (self);
- if ((ifindex > 0) && (nm_system_iface_is_up (ifindex) == FALSE))
- nm_system_iface_set_up (ifindex, TRUE, NULL);
-
- /* Allow setting MTU etc */
- if (NM_DEVICE_GET_CLASS (self)->ip6_config_pre_commit)
- NM_DEVICE_GET_CLASS (self)->ip6_config_pre_commit (self, config);
-
- if (ip6_config_merge_and_apply (self, config, &reason)) {
- /* Enter the SECONDARIES state if this is the first method to complete */
- priv->ip6_state = IP_DONE;
- if (nm_device_get_state (self) == NM_DEVICE_STATE_IP_CONFIG)
- nm_device_state_changed (self, NM_DEVICE_STATE_SECONDARIES, NM_DEVICE_STATE_REASON_NONE);
- } else {
- nm_log_info (LOGD_DEVICE | LOGD_IP6,
- "Activation (%s) Stage 5 of 5 (IPv6 Commit) failed",
- iface);
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
- }
-
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 5 of 5 (IPv6 Commit) complete.",
- iface);
-
- /* Balance IP config creation; nm_device_set_ip6_config() takes a reference */
- g_object_set_data (G_OBJECT (req), PENDING_IP6_CONFIG, NULL);
-
- return FALSE;
-}
-
-void
-nm_device_activate_schedule_ip6_config_result (NMDevice *self, NMIP6Config *config)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- g_return_if_fail (priv->act_request);
-
- if (config == NULL) {
- nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
- return;
- }
-
- /* Save the pending config */
- g_object_set_data_full (G_OBJECT (priv->act_request),
- PENDING_IP6_CONFIG,
- g_object_ref (config),
- g_object_unref);
-
- activation_source_schedule (self, nm_device_activate_ip6_config_commit, AF_INET6);
-
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "Activation (%s) Stage 5 of 5 (IPv6 Commit) scheduled...",
- nm_device_get_iface (self));
-}
-
-gboolean
-nm_device_activate_ip6_state_in_conf (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, FALSE);
- return NM_DEVICE_GET_PRIVATE (self)->ip6_state == IP_CONF;
-}
-
-gboolean
-nm_device_activate_ip6_state_in_wait (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, FALSE);
- return NM_DEVICE_GET_PRIVATE (self)->ip6_state == IP_WAIT;
-}
-
-static void
-clear_act_request (NMDevice *self)
-{
- NMDevicePrivate * priv;
-
- g_return_if_fail (self != NULL);
-
- priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (!priv->act_request)
- return;
-
- if (priv->secrets_updated_id) {
- g_signal_handler_disconnect (priv->act_request,
- priv->secrets_updated_id);
- priv->secrets_updated_id = 0;
- }
-
- if (priv->secrets_failed_id) {
- g_signal_handler_disconnect (priv->act_request,
- priv->secrets_failed_id);
- priv->secrets_failed_id = 0;
- }
-
- nm_active_connection_set_default (NM_ACTIVE_CONNECTION (priv->act_request), FALSE);
-
- g_clear_object (&priv->act_request);
- g_object_notify (G_OBJECT (self), NM_DEVICE_ACTIVE_CONNECTION);
-}
-
-static void
-dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->dhcp4_config) {
- g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP4_CONFIG);
- g_object_unref (priv->dhcp4_config);
- priv->dhcp4_config = NULL;
- }
-
- if (priv->dhcp4_client) {
- /* Stop any ongoing DHCP transaction on this device */
- if (priv->dhcp4_state_sigid) {
- g_signal_handler_disconnect (priv->dhcp4_client, priv->dhcp4_state_sigid);
- priv->dhcp4_state_sigid = 0;
- }
-
- if (priv->dhcp4_timeout_sigid) {
- g_signal_handler_disconnect (priv->dhcp4_client, priv->dhcp4_timeout_sigid);
- priv->dhcp4_timeout_sigid = 0;
- }
-
- if (stop)
- nm_dhcp_client_stop (priv->dhcp4_client, release);
-
- g_object_unref (priv->dhcp4_client);
- priv->dhcp4_client = NULL;
- }
-}
-
-static void
-dhcp6_cleanup (NMDevice *self, gboolean stop, gboolean release)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- priv->dhcp6_mode = IP6_DHCP_OPT_NONE;
-
- if (priv->dhcp6_ip6_config) {
- g_object_unref (priv->dhcp6_ip6_config);
- priv->dhcp6_ip6_config = NULL;
- }
-
- if (priv->dhcp6_config) {
- g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP6_CONFIG);
- g_object_unref (priv->dhcp6_config);
- priv->dhcp6_config = NULL;
- }
-
- if (priv->dhcp6_client) {
- if (priv->dhcp6_state_sigid) {
- g_signal_handler_disconnect (priv->dhcp6_client, priv->dhcp6_state_sigid);
- priv->dhcp6_state_sigid = 0;
- }
-
- if (priv->dhcp6_timeout_sigid) {
- g_signal_handler_disconnect (priv->dhcp6_client, priv->dhcp6_timeout_sigid);
- priv->dhcp6_timeout_sigid = 0;
- }
-
- if (stop)
- nm_dhcp_client_stop (priv->dhcp6_client, release);
-
- g_object_unref (priv->dhcp6_client);
- priv->dhcp6_client = NULL;
- }
-}
-
-static void
-dnsmasq_cleanup (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (!priv->dnsmasq_manager)
- return;
-
- if (priv->dnsmasq_state_id) {
- g_signal_handler_disconnect (priv->dnsmasq_manager, priv->dnsmasq_state_id);
- priv->dnsmasq_state_id = 0;
- }
-
- nm_dnsmasq_manager_stop (priv->dnsmasq_manager);
- g_object_unref (priv->dnsmasq_manager);
- priv->dnsmasq_manager = NULL;
-}
-
-static void
-_update_ip4_address (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- struct ifreq req;
- guint32 new_address;
- int fd;
-
- g_return_if_fail (self != NULL);
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- nm_log_err (LOGD_IP4, "couldn't open control socket.");
- return;
- }
-
- memset (&req, 0, sizeof (struct ifreq));
- strncpy (req.ifr_name, nm_device_get_ip_iface (self), IFNAMSIZ);
- if (ioctl (fd, SIOCGIFADDR, &req) == 0) {
- new_address = ((struct sockaddr_in *)(&req.ifr_addr))->sin_addr.s_addr;
- if (new_address != priv->ip4_address)
- priv->ip4_address = new_address;
- }
- close (fd);
-}
-
-/*
- * nm_device_deactivate
- *
- * Remove a device's routing table entries and IP address.
- *
- */
-static void
-nm_device_deactivate (NMDevice *self, NMDeviceStateReason reason)
-{
- NMDevicePrivate *priv;
- NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
- NMConnection *connection = NULL;
- NMSettingConnection *s_con = NULL;
- gboolean tried_ipv6 = FALSE;
- int ifindex, family;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_DEVICE (self));
-
- nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason '%s') [%d]",
- nm_device_get_iface (self), reason_to_string (reason), reason);
-
- /* Save whether or not we tried IPv6 for later */
- priv = NM_DEVICE_GET_PRIVATE (self);
- if (priv->ip6_manager || priv->ip6_config)
- tried_ipv6 = TRUE;
-
- /* Clean up when device was deactivated during call to firewall */
- if (priv->fw_call) {
- nm_firewall_manager_cancel_call (priv->fw_manager, priv->fw_call);
- priv->fw_call = NULL;
- }
-
- if (priv->act_request)
- connection = nm_act_request_get_connection (priv->act_request);
- if (connection) {
- s_con = nm_connection_get_setting_connection (connection);
- nm_firewall_manager_remove_from_zone (priv->fw_manager,
- nm_device_get_ip_iface (self),
- nm_setting_connection_get_zone (s_con));
- }
-
- /* Break the activation chain */
- activation_source_clear (self, TRUE, AF_INET);
- activation_source_clear (self, TRUE, AF_INET6);
-
- /* Clear any queued transitions */
- nm_device_queued_state_clear (self);
-
- priv->ip4_state = priv->ip6_state = IP_NONE;
-
- dhcp4_cleanup (self, TRUE, FALSE);
- dhcp6_cleanup (self, TRUE, FALSE);
- addrconf6_cleanup (self);
- dnsmasq_cleanup (self);
- aipd_cleanup (self);
-
- /* Turn off router advertisements until they are needed */
- if (priv->ip6_accept_ra_path)
- nm_utils_do_sysctl (priv->ip6_accept_ra_path, "0");
-
- /* Turn off IPv6 privacy extensions */
- if (priv->ip6_privacy_tempaddr_path)
- nm_utils_do_sysctl (priv->ip6_privacy_tempaddr_path, "0");
-
- /* Call device type-specific deactivation */
- if (NM_DEVICE_GET_CLASS (self)->deactivate)
- NM_DEVICE_GET_CLASS (self)->deactivate (self);
-
- /* master: release slaves */
- nm_device_master_release_slaves (self, FALSE);
-
- /* slave: mark no longer enslaved */
- g_clear_object (&priv->master);
- priv->enslaved = FALSE;
-
- /* Tear down an existing activation request */
- clear_act_request (self);
-
- /* Take out any entries in the routing table and any IP address the device had. */
- ifindex = nm_device_get_ip_ifindex (self);
- family = tried_ipv6 ? AF_UNSPEC : AF_INET;
- if (ifindex > 0) {
- nm_system_iface_flush_routes (ifindex, family);
- nm_system_iface_flush_addresses (ifindex, family);
- }
-
- /* Clean up nameservers and addresses */
- nm_device_set_ip4_config (self, NULL, FALSE, &ignored);
- nm_device_set_ip6_config (self, NULL, &ignored);
-
- /* Clear legacy IPv4 address property */
- priv->ip4_address = 0;
- g_object_notify (G_OBJECT (self), NM_DEVICE_IP4_ADDRESS);
-
- /* Only clear ip_iface after flushing all routes and addreses, since
- * those are identified by ip_iface, not by iface (which might be a tty
- * or ATM device).
- */
- nm_device_set_ip_iface (self, NULL);
-}
-
-static void
-disconnect_cb (NMDevice *device,
- DBusGMethodInvocation *context,
- GError *error,
- gpointer user_data)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- GError *local = NULL;
-
- if (error)
- dbus_g_method_return_error (context, error);
- else {
- /* Authorized */
- if (priv->state <= NM_DEVICE_STATE_DISCONNECTED) {
- local = g_error_new_literal (NM_DEVICE_ERROR,
- NM_DEVICE_ERROR_NOT_ACTIVE,
- "Device is not active");
- dbus_g_method_return_error (context, local);
- g_error_free (local);
- } else {
- priv->autoconnect = FALSE;
- nm_device_state_changed (device,
- NM_DEVICE_STATE_DISCONNECTED,
- NM_DEVICE_STATE_REASON_USER_REQUESTED);
- dbus_g_method_return (context);
- }
- }
-}
-
-static void
-impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context)
-{
- NMConnection *connection;
- GError *error = NULL;
-
- if (NM_DEVICE_GET_PRIVATE (device)->act_request == NULL) {
- error = g_error_new_literal (NM_DEVICE_ERROR,
- NM_DEVICE_ERROR_NOT_ACTIVE,
- "This device is not active");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
- }
-
- connection = nm_device_get_connection (device);
- g_assert (connection);
-
- /* Ask the manager to authenticate this request for us */
- g_signal_emit (device, signals[AUTH_REQUEST], 0,
- context,
- connection,
- NM_AUTH_PERMISSION_NETWORK_CONTROL,
- TRUE,
- disconnect_cb,
- NULL);
-}
-
-void
-nm_device_activate (NMDevice *self, NMActRequest *req)
-{
- NMDevicePrivate *priv;
- NMConnection *connection;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_DEVICE (self));
- g_return_if_fail (req != NULL);
- g_return_if_fail (NM_IS_ACT_REQUEST (req));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
-
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- nm_log_info (LOGD_DEVICE, "Activation (%s) starting connection '%s'",
- nm_device_get_iface (self),
- nm_connection_get_id (connection));
-
- g_warn_if_fail (priv->state == NM_DEVICE_STATE_DISCONNECTED);
-
- priv->act_request = g_object_ref (req);
- g_object_notify (G_OBJECT (self), NM_DEVICE_ACTIVE_CONNECTION);
-
- if (nm_active_connection_get_assumed (NM_ACTIVE_CONNECTION (req))) {
- /* If it's an assumed connection, let the device subclass short-circuit
- * the normal connection process and just copy its IP configs from the
- * interface.
- */
- nm_device_state_changed (self, NM_DEVICE_STATE_IP_CONFIG, NM_DEVICE_STATE_REASON_NONE);
- nm_device_activate_schedule_stage3_ip_config_start (self);
- } else {
- NMDevice *master;
-
- /* HACK: update the state a bit early to avoid a race between the
- * scheduled stage1 handler and nm_policy_device_change_check() thinking
- * that the activation request isn't deferred because the deferred bit
- * gets cleared a bit too early, when the connection becomes valid.
- */
- nm_device_state_changed (self, NM_DEVICE_STATE_PREPARE, NM_DEVICE_STATE_REASON_NONE);
-
- /* Handle any dependencies this connection might have */
- master = nm_active_connection_get_master (NM_ACTIVE_CONNECTION (req));
- if (master) {
- /* Master should at least already be activating */
- g_assert (nm_device_get_state (master) > NM_DEVICE_STATE_DISCONNECTED);
-
- g_assert (priv->master == NULL);
- priv->master = g_object_ref (master);
- nm_device_master_add_slave (master, self);
- }
-
- nm_device_activate_schedule_stage1_device_prepare (self);
- }
-}
-
-/*
- * nm_device_is_activating
- *
- * Return whether or not the device is currently activating itself.
- *
- */
-gboolean
-nm_device_is_activating (NMDevice *device)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- NMDeviceState state;
-
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
-
- state = nm_device_get_state (device);
- if (state >= NM_DEVICE_STATE_PREPARE && state <= NM_DEVICE_STATE_SECONDARIES)
- return TRUE;
-
- /* There's a small race between the time when stage 1 is scheduled
- * and when the device actually sets STATE_PREPARE when the activation
- * handler is actually run. If there's an activation handler scheduled
- * we're activating anyway.
- */
- return priv->act_source_id ? TRUE : FALSE;
-}
-
-
-gboolean
-nm_device_can_interrupt_activation (NMDevice *self)
-{
- gboolean interrupt = FALSE;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- if (NM_DEVICE_GET_CLASS (self)->can_interrupt_activation)
- interrupt = NM_DEVICE_GET_CLASS (self)->can_interrupt_activation (self);
- return interrupt;
-}
-
-/* IP Configuration stuff */
-
-NMDHCP4Config *
-nm_device_get_dhcp4_config (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->dhcp4_config;
-}
-
-NMIP4Config *
-nm_device_get_ip4_config (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->ip4_config;
-}
-
-
-static gboolean
-nm_device_set_ip4_config (NMDevice *self,
- NMIP4Config *new_config,
- gboolean assumed,
- NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv;
- const char *ip_iface;
- NMIP4Config *old_config = NULL;
- gboolean success = TRUE;
- NMIP4ConfigCompareFlags diff = NM_IP4_COMPARE_FLAG_ALL;
- int ip_ifindex;
-
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
- g_return_val_if_fail (reason != NULL, FALSE);
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- ip_iface = nm_device_get_ip_iface (self);
- ip_ifindex = nm_device_get_ip_ifindex (self);
-
- old_config = priv->ip4_config;
-
- if (new_config && old_config) {
- diff = nm_ip4_config_diff (new_config, old_config);
- if (diff == NM_IP4_COMPARE_FLAG_NONE)
- return TRUE; /* no actual change */
- } else if (!new_config && !old_config)
- return TRUE;
-
- priv->ip4_config = NULL;
-
- if (new_config) {
- priv->ip4_config = g_object_ref (new_config);
-
- /* Don't touch the device's actual IP config if the connection is
- * assumed when NM starts.
- */
- if (!assumed)
- success = nm_system_apply_ip4_config (ip_ifindex, new_config, nm_device_get_priority (self), diff);
-
- if (success || assumed) {
- /* Export over D-Bus */
- if (!nm_ip4_config_get_dbus_path (new_config))
- nm_ip4_config_export (new_config);
- _update_ip4_address (self);
- }
-
- if (!success && reason)
- *reason = NM_DEVICE_STATE_REASON_CONFIG_FAILED;
- }
-
- g_object_notify (G_OBJECT (self), NM_DEVICE_IP4_CONFIG);
- g_signal_emit (self, signals[IP4_CONFIG_CHANGED], 0, priv->ip4_config, old_config);
-
- if (old_config)
- g_object_unref (old_config);
-
- return success;
-}
-
-static gboolean
-nm_device_set_ip6_config (NMDevice *self,
- NMIP6Config *new_config,
- NMDeviceStateReason *reason)
-{
- NMDevicePrivate *priv;
- const char *ip_iface;
- NMIP6Config *old_config = NULL;
- gboolean success = TRUE;
- NMIP6ConfigCompareFlags diff = NM_IP6_COMPARE_FLAG_ALL;
- int ip_ifindex;
-
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
- g_return_val_if_fail (reason != NULL, FALSE);
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- ip_iface = nm_device_get_ip_iface (self);
- ip_ifindex = nm_device_get_ip_ifindex (self);
-
- old_config = priv->ip6_config;
-
- if (new_config && old_config) {
- diff = nm_ip6_config_diff (new_config, old_config);
- if (diff == NM_IP6_COMPARE_FLAG_NONE)
- return TRUE; /* no actual change */
- } else if (!new_config && !old_config)
- return TRUE;
-
- priv->ip6_config = NULL;
-
- if (new_config) {
- priv->ip6_config = g_object_ref (new_config);
-
- success = nm_system_apply_ip6_config (ip_ifindex, new_config, nm_device_get_priority (self), diff);
-
- if (success) {
- /* Export over D-Bus */
- if (!nm_ip6_config_get_dbus_path (new_config))
- nm_ip6_config_export (new_config);
- }
-
- if (!success && reason)
- *reason = NM_DEVICE_STATE_REASON_CONFIG_FAILED;
- }
-
- g_object_notify (G_OBJECT (self), NM_DEVICE_IP6_CONFIG);
- g_signal_emit (self, signals[IP6_CONFIG_CHANGED], 0, priv->ip6_config, old_config);
-
- if (old_config)
- g_object_unref (old_config);
-
- return success;
-}
-
-NMDHCP6Config *
-nm_device_get_dhcp6_config (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->dhcp6_config;
-}
-
-NMIP6Config *
-nm_device_get_ip6_config (NMDevice *self)
-{
- g_return_val_if_fail (self != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
-
- return NM_DEVICE_GET_PRIVATE (self)->ip6_config;
-}
-
-static gboolean
-nm_device_is_up (NMDevice *self)
-{
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
-
- if (NM_DEVICE_GET_CLASS (self)->is_up)
- return NM_DEVICE_GET_CLASS (self)->is_up (self);
-
- return TRUE;
-}
-
-gboolean
-nm_device_hw_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
-{
- gboolean success;
- guint32 tries = 0;
-
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
-
- if (nm_device_hw_is_up (self))
- goto out;
-
- nm_log_info (LOGD_HW, "(%s): bringing up device.", nm_device_get_iface (self));
-
- if (NM_DEVICE_GET_CLASS (self)->hw_bring_up) {
- success = NM_DEVICE_GET_CLASS (self)->hw_bring_up (self, no_firmware);
- if (!success)
- return FALSE;
- }
-
- /* Wait for the device to come up if requested */
- while (block && !nm_device_hw_is_up (self) && (tries++ < 50))
- g_usleep (200);
-
- if (!nm_device_hw_is_up (self)) {
- nm_log_warn (LOGD_HW, "(%s): device not up after timeout!", nm_device_get_iface (self));
- return FALSE;
- }
-
-out:
- /* Can only get HW address of some devices when they are up */
- if (NM_DEVICE_GET_CLASS (self)->update_hw_address)
- NM_DEVICE_GET_CLASS (self)->update_hw_address (self);
-
- _update_ip4_address (self);
- return TRUE;
-}
-
-static gboolean
-hw_bring_up (NMDevice *device, gboolean *no_firmware)
-{
- int ifindex = nm_device_get_ip_ifindex (device);
-
- return ifindex > 0 ? nm_system_iface_set_up (ifindex, TRUE, no_firmware) : TRUE;
-}
-
-void
-nm_device_hw_take_down (NMDevice *self, gboolean block)
-{
- guint32 tries = 0;
-
- g_return_if_fail (NM_IS_DEVICE (self));
-
- if (!nm_device_hw_is_up (self))
- return;
-
- nm_log_info (LOGD_HW, "(%s): taking down device.", nm_device_get_iface (self));
-
- if (NM_DEVICE_GET_CLASS (self)->hw_take_down)
- NM_DEVICE_GET_CLASS (self)->hw_take_down (self);
-
- /* Wait for the device to come up if requested */
- while (block && nm_device_hw_is_up (self) && (tries++ < 50))
- g_usleep (200);
-}
-
-static void
-hw_take_down (NMDevice *device)
-{
- int ifindex = nm_device_get_ip_ifindex (device);
-
- if (ifindex > 0)
- nm_system_iface_set_up (ifindex, FALSE, NULL);
-}
-
-static gboolean
-nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
-{
- gboolean success = FALSE;
-
- g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
-
- if (!nm_device_hw_bring_up (self, block, no_firmware))
- return FALSE;
-
- if (nm_device_is_up (self))
- return TRUE;
-
- nm_log_info (LOGD_HW, "(%s): preparing device.", nm_device_get_iface (self));
-
- if (NM_DEVICE_GET_CLASS (self)->bring_up)
- success = NM_DEVICE_GET_CLASS (self)->bring_up (self);
-
- return success;
-}
-
-static void
-nm_device_take_down (NMDevice *self, gboolean block, NMDeviceStateReason reason)
-{
- g_return_if_fail (NM_IS_DEVICE (self));
-
- if (nm_device_get_act_request (self))
- nm_device_deactivate (self, reason);
-
- if (nm_device_is_up (self)) {
- nm_log_info (LOGD_HW, "(%s): cleaning up...", nm_device_get_iface (self));
-
- if (NM_DEVICE_GET_CLASS (self)->take_down)
- NM_DEVICE_GET_CLASS (self)->take_down (self);
- }
-
- nm_device_hw_take_down (self, block);
-}
-
-static void
-dispose (GObject *object)
-{
- NMDevice *self = NM_DEVICE (object);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- gboolean take_down = TRUE;
-
- if (priv->disposed || !priv->initialized)
- goto out;
-
- priv->disposed = TRUE;
-
- /* Don't down can-assume-connection capable devices that are activated with
- * a connection that can be assumed.
- */
- if (nm_device_can_assume_connections (self) && (priv->state == NM_DEVICE_STATE_ACTIVATED)) {
- NMConnection *connection;
- NMSettingIP4Config *s_ip4 = NULL;
- const char *method = NULL;
-
- connection = nm_device_get_connection (self);
- if (connection) {
- /* Only static or DHCP IPv4 connections can be left up.
- * All IPv6 connections can be left up, so we don't have
- * to check that.
- */
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
- if ( !method
- || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)
- || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)
- || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED))
- take_down = FALSE;
- }
- }
-
- /* Clear any queued transitions */
- nm_device_queued_state_clear (self);
-
- /* Clean up and stop DHCP */
- dhcp4_cleanup (self, take_down, FALSE);
- dhcp6_cleanup (self, take_down, FALSE);
- addrconf6_cleanup (self);
- dnsmasq_cleanup (self);
-
- g_warn_if_fail (priv->slaves == NULL);
-
- /* Take the device itself down and clear its IPv4 configuration */
- if (priv->managed && take_down) {
- NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
-
- nm_device_take_down (self, FALSE, NM_DEVICE_STATE_REASON_REMOVED);
- nm_device_set_ip4_config (self, NULL, FALSE, &ignored);
- }
-
- /* reset the saved RA value */
- if ( priv->ip6_accept_ra_path
- && g_file_test (priv->ip6_accept_ra_path, G_FILE_TEST_EXISTS)) {
- nm_utils_do_sysctl (priv->ip6_accept_ra_path,
- priv->ip6_accept_ra_save ? "1" : "0");
- }
- g_free (priv->ip6_accept_ra_path);
-
- /* reset the saved use_tempaddr value */
- if ( priv->ip6_privacy_tempaddr_path
- && g_file_test (priv->ip6_privacy_tempaddr_path, G_FILE_TEST_EXISTS)) {
- char tmp[16];
-
- snprintf (tmp, sizeof (tmp), "%d", priv->ip6_privacy_tempaddr_save);
- nm_utils_do_sysctl (priv->ip6_privacy_tempaddr_path, tmp);
- }
- g_free (priv->ip6_privacy_tempaddr_path);
-
- if (priv->cp_added_id) {
- g_signal_handler_disconnect (priv->con_provider, priv->cp_added_id);
- priv->cp_added_id = 0;
- }
-
- if (priv->cp_loaded_id) {
- g_signal_handler_disconnect (priv->con_provider, priv->cp_loaded_id);
- priv->cp_loaded_id = 0;
- }
-
- if (priv->cp_removed_id) {
- g_signal_handler_disconnect (priv->con_provider, priv->cp_removed_id);
- priv->cp_removed_id = 0;
- }
-
- if (priv->cp_updated_id) {
- g_signal_handler_disconnect (priv->con_provider, priv->cp_updated_id);
- priv->cp_updated_id = 0;
- }
-
- g_hash_table_unref (priv->available_connections);
-
- activation_source_clear (self, TRUE, AF_INET);
- activation_source_clear (self, TRUE, AF_INET6);
-
- clear_act_request (self);
-
-out:
- G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
-}
-
-static void
-finalize (GObject *object)
-{
- NMDevice *self = NM_DEVICE (object);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->dhcp_manager)
- g_object_unref (priv->dhcp_manager);
-
- if (priv->fw_manager)
- g_object_unref (priv->fw_manager);
-
- g_free (priv->udi);
- g_free (priv->path);
- g_free (priv->iface);
- g_free (priv->ip_iface);
- g_free (priv->driver);
- g_free (priv->driver_version);
- g_free (priv->firmware_version);
- g_free (priv->type_desc);
- if (priv->dhcp_anycast_address)
- g_byte_array_free (priv->dhcp_anycast_address, TRUE);
-
- G_OBJECT_CLASS (nm_device_parent_class)->finalize (object);
-}
-
-
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
-
- switch (prop_id) {
- case PROP_UDI:
- /* Only virtual interfaces can set UDI post-construction */
- if (priv->initialized)
- g_return_if_fail (nm_system_get_iface_type (priv->ifindex, NULL) != NM_IFACE_TYPE_UNSPEC);
-
- g_free (priv->udi);
- priv->udi = g_strdup (g_value_get_string (value));
- break;
- case PROP_IFACE:
- g_free (priv->iface);
- priv->ifindex = 0;
- priv->iface = g_value_dup_string (value);
-
- /* Only look up the ifindex if it appears to be an actual kernel
- * interface name. eg Bluetooth devices won't have one until we know
- * the IP interface.
- */
- if (priv->iface && !strchr (priv->iface, ':')) {
- priv->ifindex = nm_netlink_iface_to_index (priv->iface);
- if (priv->ifindex <= 0)
- nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", priv->iface);
- }
- break;
- case PROP_IP_IFACE:
- break;
- case PROP_DRIVER:
- g_free (priv->driver);
- priv->driver = g_strdup (g_value_get_string (value));
- break;
- case PROP_DRIVER_VERSION:
- g_free (priv->driver_version);
- priv->driver_version = g_strdup (g_value_get_string (value));
- break;
- case PROP_FIRMWARE_VERSION:
- g_free (priv->firmware_version);
- priv->firmware_version = g_strdup (g_value_get_string (value));
- break;
- case PROP_CAPABILITIES:
- priv->capabilities = g_value_get_uint (value);
- break;
- case PROP_IP4_ADDRESS:
- priv->ip4_address = g_value_get_uint (value);
- break;
- case PROP_MANAGED:
- priv->managed = g_value_get_boolean (value);
- break;
- case PROP_AUTOCONNECT:
- priv->autoconnect = g_value_get_boolean (value);
- break;
- case PROP_FIRMWARE_MISSING:
- priv->firmware_missing = g_value_get_boolean (value);
- break;
- case PROP_DEVICE_TYPE:
- g_return_if_fail (priv->type == NM_DEVICE_TYPE_UNKNOWN);
- priv->type = g_value_get_uint (value);
- break;
- case PROP_TYPE_DESC:
- g_free (priv->type_desc);
- priv->type_desc = g_value_dup_string (value);
- break;
- case PROP_RFKILL_TYPE:
- priv->rfkill_type = g_value_get_uint (value);
- break;
- case PROP_IS_MASTER:
- priv->is_master = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-_is_connected (NMDeviceState state)
-{
- return (state >= NM_DEVICE_STATE_IP_CONFIG && state <= NM_DEVICE_STATE_DEACTIVATING);
-}
-
-static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- NMDevice *self = NM_DEVICE (object);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMDeviceState state;
- const char *ac_path = NULL;
- GPtrArray *array;
- GHashTableIter iter;
- NMConnection *connection;
-
- state = nm_device_get_state (self);
-
- switch (prop_id) {
- case PROP_UDI:
- g_value_set_string (value, priv->udi);
- break;
- case PROP_IFACE:
- g_value_set_string (value, priv->iface);
- break;
- case PROP_IP_IFACE:
- if (_is_connected (state))
- g_value_set_string (value, nm_device_get_ip_iface (self));
- else
- g_value_set_string (value, NULL);
- break;
- case PROP_IFINDEX:
- g_value_set_int (value, priv->ifindex);
- break;
- case PROP_DRIVER:
- g_value_set_string (value, priv->driver);
- break;
- case PROP_DRIVER_VERSION:
- g_value_set_string (value, priv->driver_version);
- break;
- case PROP_FIRMWARE_VERSION:
- g_value_set_string (value, priv->firmware_version);
- break;
- case PROP_CAPABILITIES:
- g_value_set_uint (value, priv->capabilities);
- break;
- case PROP_IP4_ADDRESS:
- g_value_set_uint (value, priv->ip4_address);
- break;
- case PROP_IP4_CONFIG:
- if (_is_connected (state) && priv->ip4_config)
- g_value_set_boxed (value, nm_ip4_config_get_dbus_path (priv->ip4_config));
- else
- g_value_set_boxed (value, "/");
- break;
- case PROP_DHCP4_CONFIG:
- if (_is_connected (state) && priv->dhcp4_client)
- g_value_set_boxed (value, nm_dhcp4_config_get_dbus_path (priv->dhcp4_config));
- else
- g_value_set_boxed (value, "/");
- break;
- case PROP_IP6_CONFIG:
- if (_is_connected (state) && priv->ip6_config)
- g_value_set_boxed (value, nm_ip6_config_get_dbus_path (priv->ip6_config));
- else
- g_value_set_boxed (value, "/");
- break;
- case PROP_DHCP6_CONFIG:
- if (_is_connected (state) && priv->dhcp6_client)
- g_value_set_boxed (value, nm_dhcp6_config_get_dbus_path (priv->dhcp6_config));
- else
- g_value_set_boxed (value, "/");
- break;
- case PROP_STATE:
- g_value_set_uint (value, priv->state);
- break;
- case PROP_STATE_REASON:
- g_value_take_boxed (value, dbus_g_type_specialized_construct (DBUS_G_TYPE_UINT_STRUCT));
- dbus_g_type_struct_set (value,
- 0, priv->state,
- 1, priv->state_reason,
- G_MAXUINT);
- break;
- case PROP_ACTIVE_CONNECTION:
- if (priv->act_request)
- ac_path = nm_active_connection_get_path (NM_ACTIVE_CONNECTION (priv->act_request));
- g_value_set_boxed (value, ac_path ? ac_path : "/");
- break;
- case PROP_DEVICE_TYPE:
- g_value_set_uint (value, priv->type);
- break;
- case PROP_MANAGED:
- g_value_set_boolean (value, priv->managed);
- break;
- case PROP_AUTOCONNECT:
- g_value_set_boolean (value, priv->autoconnect);
- break;
- case PROP_FIRMWARE_MISSING:
- g_value_set_boolean (value, priv->firmware_missing);
- break;
- case PROP_TYPE_DESC:
- g_value_set_string (value, priv->type_desc);
- break;
- case PROP_RFKILL_TYPE:
- g_value_set_uint (value, priv->rfkill_type);
- break;
- case PROP_AVAILABLE_CONNECTIONS:
- array = g_ptr_array_sized_new (g_hash_table_size (priv->available_connections));
- g_hash_table_iter_init (&iter, priv->available_connections);
- while (g_hash_table_iter_next (&iter, (gpointer) &connection, NULL))
- g_ptr_array_add (array, g_strdup (nm_connection_get_path (connection)));
- g_value_take_boxed (value, array);
- break;
- case PROP_IS_MASTER:
- g_value_set_boolean (value, priv->is_master);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-
-static void
-nm_device_class_init (NMDeviceClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMDevicePrivate));
-
- /* Virtual methods */
- object_class->dispose = dispose;
- object_class->finalize = finalize;
- object_class->set_property = set_property;
- object_class->get_property = get_property;
- object_class->constructor = constructor;
- object_class->constructed = constructed;
-
- klass->get_type_capabilities = get_type_capabilities;
- klass->get_generic_capabilities = get_generic_capabilities;
- klass->act_stage1_prepare = act_stage1_prepare;
- klass->act_stage2_config = act_stage2_config;
- klass->act_stage3_ip4_config_start = act_stage3_ip4_config_start;
- klass->act_stage3_ip6_config_start = act_stage3_ip6_config_start;
- klass->act_stage4_ip4_config_timeout = act_stage4_ip4_config_timeout;
- klass->act_stage4_ip6_config_timeout = act_stage4_ip6_config_timeout;
- klass->have_any_ready_slaves = have_any_ready_slaves;
-
- klass->check_connection_available = check_connection_available;
- klass->hw_is_up = hw_is_up;
- klass->hw_bring_up = hw_bring_up;
- klass->hw_take_down = hw_take_down;
-
- /* Properties */
- g_object_class_install_property
- (object_class, PROP_UDI,
- g_param_spec_string (NM_DEVICE_UDI,
- "UDI",
- "Unique Device Identifier",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
- g_object_class_install_property
- (object_class, PROP_IFACE,
- g_param_spec_string (NM_DEVICE_IFACE,
- "Interface",
- "Interface",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_IP_IFACE,
- g_param_spec_string (NM_DEVICE_IP_IFACE,
- "IP Interface",
- "IP Interface",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_DRIVER,
- g_param_spec_string (NM_DEVICE_DRIVER,
- "Driver",
- "Driver",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_DRIVER_VERSION,
- g_param_spec_string (NM_DEVICE_DRIVER_VERSION,
- "Driver Version",
- "Driver Version",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_FIRMWARE_VERSION,
- g_param_spec_string (NM_DEVICE_FIRMWARE_VERSION,
- "Firmware Version",
- "Firmware Version",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_CAPABILITIES,
- "Capabilities",
- "Capabilities",
- 0, G_MAXUINT32, NM_DEVICE_CAP_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_IP4_ADDRESS,
- g_param_spec_uint (NM_DEVICE_IP4_ADDRESS,
- "IP4 address",
- "IP4 address",
- 0, G_MAXUINT32, 0, /* FIXME */
- G_PARAM_READWRITE));
-
- g_object_class_install_property
- (object_class, PROP_IP4_CONFIG,
- g_param_spec_boxed (NM_DEVICE_IP4_CONFIG,
- "IP4 Config",
- "IP4 Config",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
-
- g_object_class_install_property
- (object_class, PROP_DHCP4_CONFIG,
- g_param_spec_boxed (NM_DEVICE_DHCP4_CONFIG,
- "DHCP4 Config",
- "DHCP4 Config",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
-
- g_object_class_install_property
- (object_class, PROP_IP6_CONFIG,
- g_param_spec_boxed (NM_DEVICE_IP6_CONFIG,
- "IP6 Config",
- "IP6 Config",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
-
- g_object_class_install_property
- (object_class, PROP_DHCP6_CONFIG,
- g_param_spec_boxed (NM_DEVICE_DHCP6_CONFIG,
- "DHCP6 Config",
- "DHCP6 Config",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
-
- g_object_class_install_property
- (object_class, PROP_STATE,
- g_param_spec_uint (NM_DEVICE_STATE,
- "State",
- "State",
- 0, G_MAXUINT32, NM_DEVICE_STATE_UNKNOWN,
- G_PARAM_READABLE));
- g_object_class_install_property
- (object_class, PROP_STATE_REASON,
- g_param_spec_boxed (NM_DEVICE_STATE_REASON,
- "StateReason",
- "StateReason",
- DBUS_G_TYPE_UINT_STRUCT,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_ACTIVE_CONNECTION,
- g_param_spec_boxed (NM_DEVICE_ACTIVE_CONNECTION,
- "ActiveConnection",
- "ActiveConnection",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_DEVICE_TYPE,
- g_param_spec_uint (NM_DEVICE_DEVICE_TYPE,
- "DeviceType",
- "DeviceType",
- 0, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
-
- g_object_class_install_property
- (object_class, PROP_MANAGED,
- g_param_spec_boolean (NM_DEVICE_MANAGED,
- "Managed",
- "Managed",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_AUTOCONNECT,
- g_param_spec_boolean (NM_DEVICE_AUTOCONNECT,
- "Autoconnect",
- "Autoconnect",
- DEFAULT_AUTOCONNECT,
- G_PARAM_READWRITE));
-
- g_object_class_install_property
- (object_class, PROP_FIRMWARE_MISSING,
- g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING,
- "FirmwareMissing",
- "Firmware missing",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property
- (object_class, PROP_TYPE_DESC,
- g_param_spec_string (NM_DEVICE_TYPE_DESC,
- "Type Description",
- "Device type description",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
-
- g_object_class_install_property
- (object_class, PROP_RFKILL_TYPE,
- g_param_spec_uint (NM_DEVICE_RFKILL_TYPE,
- "Rfkill Type",
- "Type of rfkill switch (if any) supported by this device",
- RFKILL_TYPE_WLAN,
- RFKILL_TYPE_MAX,
- RFKILL_TYPE_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
-
- g_object_class_install_property
- (object_class, PROP_IFINDEX,
- g_param_spec_int (NM_DEVICE_IFINDEX,
- "Ifindex",
- "Ifindex",
- 0, G_MAXINT, 0,
- G_PARAM_READABLE | NM_PROPERTY_PARAM_NO_EXPORT));
-
- g_object_class_install_property
- (object_class, PROP_AVAILABLE_CONNECTIONS,
- g_param_spec_boxed (NM_DEVICE_AVAILABLE_CONNECTIONS,
- "AvailableConnections",
- "AvailableConnections",
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
-
- g_object_class_install_property
- (object_class, PROP_IS_MASTER,
- g_param_spec_boolean (NM_DEVICE_IS_MASTER,
- "IsMaster",
- "IsMaster",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT));
-
- /* Signals */
- signals[STATE_CHANGED] =
- g_signal_new ("state-changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMDeviceClass, state_changed),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT_UINT,
- G_TYPE_NONE, 3,
- G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
-
- signals[AUTOCONNECT_ALLOWED] =
- g_signal_new ("autoconnect-allowed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- autoconnect_allowed_accumulator, NULL,
- _nm_marshal_BOOLEAN__VOID,
- G_TYPE_BOOLEAN, 0);
-
- signals[AUTH_REQUEST] =
- g_signal_new (NM_DEVICE_AUTH_REQUEST,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- /* dbus-glib context, connection, permission, allow_interaction, callback, user_data */
- _nm_marshal_VOID__POINTER_POINTER_STRING_BOOLEAN_POINTER_POINTER,
- G_TYPE_NONE, 6, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER, G_TYPE_POINTER);
-
- signals[IP4_CONFIG_CHANGED] =
- g_signal_new (NM_DEVICE_IP4_CONFIG_CHANGED,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- _nm_marshal_VOID__OBJECT_OBJECT,
- G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_OBJECT);
-
- signals[IP6_CONFIG_CHANGED] =
- g_signal_new (NM_DEVICE_IP6_CONFIG_CHANGED,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- _nm_marshal_VOID__OBJECT_OBJECT,
- G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_OBJECT);
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
- &dbus_glib_nm_device_interface_object_info);
-
- dbus_g_error_domain_register (NM_DEVICE_ERROR, NULL, NM_TYPE_DEVICE_ERROR);
-}
-
-void
-nm_device_set_firmware_missing (NMDevice *self, gboolean new_missing)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
- if (priv->firmware_missing != new_missing) {
- priv->firmware_missing = new_missing;
- g_object_notify (G_OBJECT (self), NM_DEVICE_FIRMWARE_MISSING);
- }
-}
-
-gboolean
-nm_device_get_firmware_missing (NMDevice *self)
-{
- return NM_DEVICE_GET_PRIVATE (self)->firmware_missing;
-}
-
-static const char *
-state_to_string (NMDeviceState state)
-{
- switch (state) {
- case NM_DEVICE_STATE_UNMANAGED:
- return "unmanaged";
- case NM_DEVICE_STATE_UNAVAILABLE:
- return "unavailable";
- case NM_DEVICE_STATE_DISCONNECTED:
- return "disconnected";
- case NM_DEVICE_STATE_PREPARE:
- return "prepare";
- case NM_DEVICE_STATE_CONFIG:
- return "config";
- case NM_DEVICE_STATE_NEED_AUTH:
- return "need-auth";
- case NM_DEVICE_STATE_IP_CONFIG:
- return "ip-config";
- case NM_DEVICE_STATE_IP_CHECK:
- return "ip-check";
- case NM_DEVICE_STATE_SECONDARIES:
- return "secondaries";
- case NM_DEVICE_STATE_ACTIVATED:
- return "activated";
- case NM_DEVICE_STATE_DEACTIVATING:
- return "deactivating";
- case NM_DEVICE_STATE_FAILED:
- return "failed";
- default:
- break;
- }
- return "unknown";
-}
-
-static const char *
-reason_to_string (NMDeviceStateReason reason)
-{
- switch (reason) {
- case NM_DEVICE_STATE_REASON_NONE:
- return "none";
- case NM_DEVICE_STATE_REASON_NOW_MANAGED:
- return "managed";
- case NM_DEVICE_STATE_REASON_NOW_UNMANAGED:
- return "unmanaged";
- case NM_DEVICE_STATE_REASON_CONFIG_FAILED:
- return "config-failed";
- case NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE:
- return "ip-config-unavailable";
- case NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED:
- return "ip-config-expired";
- case NM_DEVICE_STATE_REASON_NO_SECRETS:
- return "no-secrets";
- case NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT:
- return "supplicant-disconnect";
- case NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED:
- return "supplicant-config-failed";
- case NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED:
- return "supplicant-failed";
- case NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT:
- return "supplicant-timeout";
- case NM_DEVICE_STATE_REASON_PPP_START_FAILED:
- return "ppp-start-failed";
- case NM_DEVICE_STATE_REASON_PPP_DISCONNECT:
- return "ppp-disconnect";
- case NM_DEVICE_STATE_REASON_PPP_FAILED:
- return "ppp-failed";
- case NM_DEVICE_STATE_REASON_DHCP_START_FAILED:
- return "dhcp-start-failed";
- case NM_DEVICE_STATE_REASON_DHCP_ERROR:
- return "dhcp-error";
- case NM_DEVICE_STATE_REASON_DHCP_FAILED:
- return "dhcp-failed";
- case NM_DEVICE_STATE_REASON_SHARED_START_FAILED:
- return "sharing-start-failed";
- case NM_DEVICE_STATE_REASON_SHARED_FAILED:
- return "sharing-failed";
- case NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED:
- return "autoip-start-failed";
- case NM_DEVICE_STATE_REASON_AUTOIP_ERROR:
- return "autoip-error";
- case NM_DEVICE_STATE_REASON_AUTOIP_FAILED:
- return "autoip-failed";
- case NM_DEVICE_STATE_REASON_MODEM_BUSY:
- return "modem-busy";
- case NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE:
- return "modem-no-dialtone";
- case NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER:
- return "modem-no-carrier";
- case NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT:
- return "modem-dial-timeout";
- case NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED:
- return "modem-dial-failed";
- case NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED:
- return "modem-init-failed";
- case NM_DEVICE_STATE_REASON_GSM_APN_FAILED:
- return "gsm-apn-failed";
- case NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING:
- return "gsm-registration-idle";
- case NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED:
- return "gsm-registration-denied";
- case NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT:
- return "gsm-registration-timeout";
- case NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED:
- return "gsm-registration-failed";
- case NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED:
- return "gsm-pin-check-failed";
- case NM_DEVICE_STATE_REASON_FIRMWARE_MISSING:
- return "firmware-missing";
- case NM_DEVICE_STATE_REASON_REMOVED:
- return "removed";
- case NM_DEVICE_STATE_REASON_SLEEPING:
- return "sleeping";
- case NM_DEVICE_STATE_REASON_CONNECTION_REMOVED:
- return "connection-removed";
- case NM_DEVICE_STATE_REASON_USER_REQUESTED:
- return "user-requested";
- case NM_DEVICE_STATE_REASON_CARRIER:
- return "carrier-changed";
- case NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED:
- return "connection-assumed";
- case NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE:
- return "supplicant-available";
- case NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND:
- return "modem-not-found";
- case NM_DEVICE_STATE_REASON_BT_FAILED:
- return "bluetooth-failed";
- case NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED:
- return "gsm-sim-not-inserted";
- case NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED:
- return "gsm-sim-pin-required";
- case NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED:
- return "gsm-sim-puk-required";
- case NM_DEVICE_STATE_REASON_GSM_SIM_WRONG:
- return "gsm-sim-wrong";
- case NM_DEVICE_STATE_REASON_INFINIBAND_MODE:
- return "infiniband-mode";
- case NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED:
- return "dependency-failed";
- case NM_DEVICE_STATE_REASON_BR2684_FAILED:
- return "br2684-bridge-failed";
- case NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE:
- return "modem-manager-unavailable";
- case NM_DEVICE_STATE_REASON_SSID_NOT_FOUND:
- return "SSID not found";
- case NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED:
- return "secondary-connection-failed";
- default:
- break;
- }
- return "unknown";
-}
-
-void
-nm_device_state_changed (NMDevice *device,
- NMDeviceState state,
- NMDeviceStateReason reason)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- NMDeviceState old_state;
- NMActRequest *req;
- gboolean no_firmware = FALSE;
- NMConnection *connection;
-
- /* Track re-entry */
- static gboolean in_state_changed = FALSE;
-
- g_warn_if_fail (in_state_changed == FALSE);
- in_state_changed = TRUE;
-
- g_return_if_fail (NM_IS_DEVICE (device));
-
- /* Do nothing if state isn't changing, but as a special case allow
- * re-setting UNAVAILABLE if the device is missing firmware so that we
- * can retry device initialization.
- */
- if ( (priv->state == state)
- && !(state == NM_DEVICE_STATE_UNAVAILABLE && priv->firmware_missing)) {
- in_state_changed = FALSE;
- return;
- }
-
- old_state = priv->state;
- priv->state = state;
- priv->state_reason = reason;
-
- nm_log_info (LOGD_DEVICE, "(%s): device state change: %s -> %s (reason '%s') [%d %d %d]",
- nm_device_get_iface (device),
- state_to_string (old_state),
- state_to_string (state),
- reason_to_string (reason),
- old_state,
- state,
- reason);
-
- /* Clear any queued transitions */
- nm_device_queued_state_clear (device);
-
- /* Cache the activation request for the dispatcher */
- req = priv->act_request ? g_object_ref (priv->act_request) : NULL;
-
- if (state <= NM_DEVICE_STATE_UNAVAILABLE)
- _clear_available_connections (device, TRUE);
-
- /* Update the available connections list when a device first becomes available */
- if ( state >= NM_DEVICE_STATE_DISCONNECTED
- && old_state < NM_DEVICE_STATE_DISCONNECTED)
- nm_device_recheck_available_connections (device);
-
- /* Handle the new state here; but anything that could trigger
- * another state change should be done below.
- */
- switch (state) {
- case NM_DEVICE_STATE_UNMANAGED:
- nm_device_set_firmware_missing (device, FALSE);
- if (old_state > NM_DEVICE_STATE_UNMANAGED)
- nm_device_take_down (device, TRUE, reason);
- break;
- case NM_DEVICE_STATE_UNAVAILABLE:
- if (old_state == NM_DEVICE_STATE_UNMANAGED || priv->firmware_missing) {
- if (!nm_device_bring_up (device, TRUE, &no_firmware) && no_firmware)
- nm_log_warn (LOGD_HW, "(%s): firmware may be missing.", nm_device_get_iface (device));
- nm_device_set_firmware_missing (device, no_firmware ? TRUE : FALSE);
- }
- /* Ensure the device gets deactivated in response to stuff like
- * carrier changes or rfkill. But don't deactivate devices that are
- * about to assume a connection since that defeats the purpose of
- * assuming the device's existing connection.
- */
- if (reason != NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED)
- nm_device_deactivate (device, reason);
- break;
- case NM_DEVICE_STATE_DISCONNECTED:
- if (old_state != NM_DEVICE_STATE_UNAVAILABLE)
- nm_device_deactivate (device, reason);
- break;
- default:
- priv->autoconnect = TRUE;
- break;
- }
-
- g_object_notify (G_OBJECT (device), NM_DEVICE_STATE);
- g_object_notify (G_OBJECT (device), NM_DEVICE_STATE_REASON);
- g_signal_emit_by_name (device, "state-changed", state, old_state, reason);
-
- /* Post-process the event after internal notification */
-
- switch (state) {
- case NM_DEVICE_STATE_UNAVAILABLE:
- /* If the device can activate now (ie, it's got a carrier, the supplicant
- * is active, or whatever) schedule a delayed transition to DISCONNECTED
- * to get things rolling. The device can't transition immediately because
- * we can't change states again from the state handler for a variety of
- * reasons.
- */
- if (nm_device_is_available (device)) {
- nm_log_dbg (LOGD_DEVICE, "(%s): device is available, will transition to DISCONNECTED",
- nm_device_get_iface (device));
- nm_device_queue_state (device, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_NONE);
- } else {
- nm_log_dbg (LOGD_DEVICE, "(%s): device not yet available for transition to DISCONNECTED",
- nm_device_get_iface (device));
- }
- break;
- case NM_DEVICE_STATE_ACTIVATED:
- nm_log_info (LOGD_DEVICE, "Activation (%s) successful, device activated.",
- nm_device_get_iface (device));
- nm_dispatcher_call (DISPATCHER_ACTION_UP, nm_act_request_get_connection (req), device, NULL, NULL);
- break;
- case NM_DEVICE_STATE_FAILED:
- connection = nm_device_get_connection (device);
- nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s) failed for connection '%s'",
- nm_device_get_iface (device),
- connection ? nm_connection_get_id (connection) : "<unknown>");
-
- /* Notify any slaves of the unexpected failure */
- nm_device_master_release_slaves (device, TRUE);
-
- /* If the connection doesn't yet have a timestamp, set it to zero so that
- * we can distinguish between connections we've tried to activate and have
- * failed (zero timestamp), connections that succeeded (non-zero timestamp),
- * and those we haven't tried yet (no timestamp).
- */
- if (connection && !nm_settings_connection_get_timestamp (NM_SETTINGS_CONNECTION (connection), NULL)) {
- nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (connection),
- (guint64) 0,
- TRUE);
- }
-
- /* Schedule the transition to DISCONNECTED. The device can't transition
- * immediately because we can't change states again from the state
- * handler for a variety of reasons.
- */
- nm_device_queue_state (device, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_NONE);
- break;
- case NM_DEVICE_STATE_SECONDARIES:
- nm_log_dbg (LOGD_DEVICE, "(%s): device entered SECONDARIES state",
- nm_device_get_iface (device));
- break;
- default:
- break;
- }
-
- if (old_state == NM_DEVICE_STATE_ACTIVATED)
- nm_dispatcher_call (DISPATCHER_ACTION_DOWN, nm_act_request_get_connection (req), device, NULL, NULL);
-
- /* Dispose of the cached activation request */
- if (req)
- g_object_unref (req);
-
- in_state_changed = FALSE;
-}
-
-static gboolean
-queued_set_state (gpointer user_data)
-{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMDeviceState new_state;
- NMDeviceStateReason new_reason;
-
- if (priv->queued_state.id) {
- nm_log_dbg (LOGD_DEVICE, "(%s): running queued state change to %s (id %d)",
- nm_device_get_iface (self),
- state_to_string (priv->queued_state.state),
- priv->queued_state.id);
-
- /* Clear queued state struct before triggering state change, since
- * the state change may queue another state.
- */
- priv->queued_state.id = 0;
- new_state = priv->queued_state.state;
- new_reason = priv->queued_state.reason;
- nm_device_queued_state_clear (self);
-
- nm_device_state_changed (self, new_state, new_reason);
- } else {
- g_warn_if_fail (priv->queued_state.state == NM_DEVICE_STATE_UNKNOWN);
- g_warn_if_fail (priv->queued_state.reason == NM_DEVICE_STATE_REASON_NONE);
- }
- return FALSE;
-}
-
-void
-nm_device_queue_state (NMDevice *self,
- NMDeviceState state,
- NMDeviceStateReason reason)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_DEVICE (self));
-
- priv = NM_DEVICE_GET_PRIVATE (self);
-
- /* We should only ever have one delayed state transition at a time */
- if (priv->queued_state.id) {
- g_warn_if_fail (priv->queued_state.id == 0);
- nm_device_queued_state_clear (self);
- }
-
- priv->queued_state.state = state;
- priv->queued_state.reason = reason;
- priv->queued_state.id = g_idle_add (queued_set_state, self);
-
- nm_log_dbg (LOGD_DEVICE, "(%s): queued state change to %s (id %d)",
- nm_device_get_iface (self), state_to_string (state),
- priv->queued_state.id);
-}
-
-NMDeviceState
-nm_device_queued_state_peek (NMDevice *self)
-{
- NMDevicePrivate *priv;
-
- g_return_val_if_fail (self != NULL, NM_DEVICE_STATE_UNKNOWN);
- g_return_val_if_fail (NM_IS_DEVICE (self), NM_DEVICE_STATE_UNKNOWN);
-
- priv = NM_DEVICE_GET_PRIVATE (self);
-
- return priv->queued_state.id ? priv->queued_state.state : NM_DEVICE_STATE_UNKNOWN;
-}
-
-void
-nm_device_queued_state_clear (NMDevice *self)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->queued_state.id) {
- nm_log_dbg (LOGD_DEVICE, "(%s): clearing queued state transition (id %d)",
- nm_device_get_iface (self), priv->queued_state.id);
- g_source_remove (priv->queued_state.id);
- }
- memset (&priv->queued_state, 0, sizeof (priv->queued_state));
-}
-
-NMDeviceState
-nm_device_get_state (NMDevice *device)
-{
- g_return_val_if_fail (NM_IS_DEVICE (device), NM_DEVICE_STATE_UNKNOWN);
-
- return NM_DEVICE_GET_PRIVATE (device)->state;
-}
-
-gboolean
-nm_device_get_managed (NMDevice *device)
-{
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
-
- return NM_DEVICE_GET_PRIVATE (device)->managed;
-}
-
-void
-nm_device_set_managed (NMDevice *device,
- gboolean managed,
- NMDeviceStateReason reason)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (device));
-
- priv = NM_DEVICE_GET_PRIVATE (device);
- if (priv->managed == managed)
- return;
-
- priv->managed = managed;
- nm_log_dbg (LOGD_DEVICE, "(%s): now %s",
- nm_device_get_iface (device),
- managed ? "managed" : "unmanaged");
-
- g_object_notify (G_OBJECT (device), NM_DEVICE_MANAGED);
-
- /* If now managed, jump to unavailable */
- if (managed)
- nm_device_state_changed (device, NM_DEVICE_STATE_UNAVAILABLE, reason);
- else
- nm_device_state_changed (device, NM_DEVICE_STATE_UNMANAGED, reason);
-}
-
-gboolean
-nm_device_spec_match_list (NMDevice *device, const GSList *specs)
-{
- g_return_val_if_fail (device != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
-
- if (NM_DEVICE_GET_CLASS (device)->spec_match_list)
- return NM_DEVICE_GET_CLASS (device)->spec_match_list (device, specs);
- return FALSE;
-}
-
-static gboolean
-ip4_match_config (NMDevice *self, NMConnection *connection)
-{
- NMSettingIP4Config *s_ip4;
- int i, num;
- GSList *leases, *iter;
- NMDHCPManager *dhcp_mgr;
- const char *method;
-
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
-
- /* Get any saved leases that apply to this connection */
- dhcp_mgr = nm_dhcp_manager_get ();
- leases = nm_dhcp_manager_get_lease_config (dhcp_mgr,
- nm_device_get_iface (self),
- nm_connection_get_uuid (connection),
- FALSE);
- g_object_unref (dhcp_mgr);
-
- method = s_ip4 ? nm_setting_ip4_config_get_method (s_ip4) : NM_SETTING_IP4_CONFIG_METHOD_AUTO;
- if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
- gboolean found = FALSE;
-
- /* Find at least one lease's address on the device */
- for (iter = leases; iter; iter = g_slist_next (iter)) {
- NMIP4Config *ip4_config = iter->data;
- NMIP4Address *addr = nm_ip4_config_get_address (ip4_config, 0);
- struct in_addr tmp = { .s_addr = nm_ip4_address_get_address (addr) };
-
- if (addr && nm_netlink_find_address (nm_device_get_ip_ifindex (self),
- AF_INET,
- &tmp,
- nm_ip4_address_get_prefix (addr))) {
- found = TRUE; /* Yay, device has same address as a lease */
- break;
- }
- }
- g_slist_foreach (leases, (GFunc) g_object_unref, NULL);
- g_slist_free (leases);
- return found;
- } else {
- /* Maybe the connection used to be DHCP and there are stale leases; ignore them */
- g_slist_foreach (leases, (GFunc) g_object_unref, NULL);
- g_slist_free (leases);
- }
-
- if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
- // FIXME: Enforce no ipv4 addresses?
- return TRUE;
- }
-
- /* 'shared' and 'link-local' aren't supported methods because 'shared'
- * requires too much iptables and dnsmasq state to be reclaimed, and
- * avahi-autoipd isn't smart enough to allow the link-local address to be
- * determined at any point other than when it was first assigned.
- */
- if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL))
- return FALSE;
-
- /* Everything below for static addressing */
-
- /* Find all IP4 addresses of this connection on the device */
- if (s_ip4) {
- num = nm_setting_ip4_config_get_num_addresses (s_ip4);
- for (i = 0; i < num; i++) {
- NMIP4Address *addr = nm_setting_ip4_config_get_address (s_ip4, i);
- struct in_addr tmp = { .s_addr = nm_ip4_address_get_address (addr) };
-
- if (!nm_netlink_find_address (nm_device_get_ip_ifindex (self),
- AF_INET,
- &tmp,
- nm_ip4_address_get_prefix (addr)))
- return FALSE;
- }
- }
-
- /* Success; all the connection's static IP addresses are assigned to the device */
- return TRUE;
-}
-
-gboolean
-nm_device_match_ip_config (NMDevice *device, NMConnection *connection)
-{
- if (!ip4_match_config (device, connection))
- return FALSE;
-
- /* FIXME: match IPv6 config */
-
- return TRUE;
-}
-
-NMConnection *
-nm_device_connection_match_config (NMDevice *device, const GSList *connections)
-{
- g_return_val_if_fail (device != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
-
- if (NM_DEVICE_GET_CLASS (device)->connection_match_config)
- return NM_DEVICE_GET_CLASS (device)->connection_match_config (NM_DEVICE (device), connections);
- return NULL;
-}
-
-/**
- * nm_device_hwaddr_matches:
- * @device: the device to use when matching the hardware address
- * @connection: the connection which supplies the hardware address
- * @other_hwaddr: if given, use this address instead of the device's actual
- * hardware address
- * @other_hwaddr_len: length in bytes of @other_hwaddr
- * @fail_if_no_hwaddr: whether to fail the match if @connection does not contain
- * a hardware address
- *
- * Matches a the devices hardware address (or @other_hwaddr if given) against
- * the hardware-specific setting in @connection. Allows for device-agnostic
- * hardware address matching without having to know the internal details of
- * the connection and which settings are used by each device subclass.
- *
- * Returns: %TRUE if the @device 's hardware address or @other_hwaddr matches
- * a hardware address in a hardware-specific setting in @connection
- */
-gboolean
-nm_device_hwaddr_matches (NMDevice *device,
- NMConnection *connection,
- const guint8 *other_hwaddr,
- guint other_hwaddr_len,
- gboolean fail_if_no_hwaddr)
-{
- g_return_val_if_fail (device != NULL, FALSE);
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
- if (other_hwaddr)
- g_return_val_if_fail (other_hwaddr_len > 0, FALSE);
-
- if (NM_DEVICE_GET_CLASS (device)->hwaddr_matches) {
- return NM_DEVICE_GET_CLASS (device)->hwaddr_matches (device,
- connection,
- other_hwaddr,
- other_hwaddr_len,
- fail_if_no_hwaddr);
- }
- return FALSE;
-}
-
-void
-nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout)
-{
- g_return_if_fail (NM_IS_DEVICE (device));
-
- NM_DEVICE_GET_PRIVATE (device)->dhcp_timeout = timeout;
-}
-
-void
-nm_device_set_dhcp_anycast_address (NMDevice *device, guint8 *addr)
-{
- NMDevicePrivate *priv;
-
- g_return_if_fail (NM_IS_DEVICE (device));
-
- priv = NM_DEVICE_GET_PRIVATE (device);
-
- if (priv->dhcp_anycast_address) {
- g_byte_array_free (priv->dhcp_anycast_address, TRUE);
- priv->dhcp_anycast_address = NULL;
- }
-
- if (addr) {
- priv->dhcp_anycast_address = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (priv->dhcp_anycast_address, addr, ETH_ALEN);
- }
-}
-
-gboolean
-nm_device_get_autoconnect (NMDevice *device)
-{
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
-
- return NM_DEVICE_GET_PRIVATE (device)->autoconnect;
-}
-
-static void
-_signal_available_connections_changed (NMDevice *device)
-{
- g_object_notify (G_OBJECT (device), NM_DEVICE_AVAILABLE_CONNECTIONS);
-}
-
-static void
-_clear_available_connections (NMDevice *device, gboolean do_signal)
-{
- g_hash_table_remove_all (NM_DEVICE_GET_PRIVATE (device)->available_connections);
- if (do_signal == TRUE)
- _signal_available_connections_changed (device);
-}
-
-static gboolean
-_try_add_available_connection (NMDevice *self, NMConnection *connection)
-{
- if (nm_device_get_state (self) < NM_DEVICE_STATE_DISCONNECTED)
- return FALSE;
-
- if (nm_device_check_connection_compatible (self, connection, NULL)) {
- /* Let subclasses implement additional checks on the connection */
- if ( NM_DEVICE_GET_CLASS (self)->check_connection_available
- && NM_DEVICE_GET_CLASS (self)->check_connection_available (self, connection)) {
-
- g_hash_table_insert (NM_DEVICE_GET_PRIVATE (self)->available_connections,
- g_object_ref (connection),
- GUINT_TO_POINTER (1));
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static gboolean
-_del_available_connection (NMDevice *device, NMConnection *connection)
-{
- return g_hash_table_remove (NM_DEVICE_GET_PRIVATE (device)->available_connections, connection);
-}
-
-static gboolean
-check_connection_available (NMDevice *device, NMConnection *connection)
-{
- /* Default is to assume the connection is available unless a subclass
- * overrides this with more specific checks.
- */
- return TRUE;
-}
-
-void
-nm_device_recheck_available_connections (NMDevice *device)
-{
- NMDevicePrivate *priv;
- const GSList *connections, *iter;
-
- g_return_if_fail (device != NULL);
- g_return_if_fail (NM_IS_DEVICE (device));
-
- priv = NM_DEVICE_GET_PRIVATE(device);
-
- _clear_available_connections (device, FALSE);
-
- connections = nm_connection_provider_get_connections (priv->con_provider);
- for (iter = connections; iter; iter = g_slist_next (iter))
- _try_add_available_connection (device, NM_CONNECTION (iter->data));
-
- _signal_available_connections_changed (device);
-}
-
-static void
-cp_connection_added (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data)
-{
- if (_try_add_available_connection (NM_DEVICE (user_data), connection))
- _signal_available_connections_changed (NM_DEVICE (user_data));
-}
-
-static void
-cp_connections_loaded (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data)
-{
- const GSList *connections, *iter;
- gboolean added = FALSE;
-
- connections = nm_connection_provider_get_connections (cp);
- for (iter = connections; iter; iter = g_slist_next (iter))
- added |= _try_add_available_connection (NM_DEVICE (user_data), NM_CONNECTION (iter->data));
-
- if (added)
- _signal_available_connections_changed (NM_DEVICE (user_data));
-}
-
-static void
-cp_connection_removed (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data)
-{
- if (_del_available_connection (NM_DEVICE (user_data), connection))
- _signal_available_connections_changed (NM_DEVICE (user_data));
-}
-
-static void
-cp_connection_updated (NMConnectionProvider *cp, NMConnection *connection, gpointer user_data)
-{
- gboolean added, deleted;
-
- /* FIXME: don't remove it from the hash if it's just going to get re-added */
- deleted = _del_available_connection (NM_DEVICE (user_data), connection);
- added = _try_add_available_connection (NM_DEVICE (user_data), connection);
-
- /* Only signal if the connection was removed OR added, but not both */
- if (added != deleted)
- _signal_available_connections_changed (NM_DEVICE (user_data));
-}
-
-gboolean
-nm_device_supports_vlans (NMDevice *device)
-{
- /* At the moment, NM's VLAN code assumes all VLANs are over ethernet. */
- return NM_IS_DEVICE_ETHERNET (device);
-}
-
-/**
- * nm_device_read_hwaddr:
- * @dev: the device
- * @buf: an allocated buffer which on success holds the device's hardware
- * address
- * @buf_len: the size of @buf
- * @out_changed: on success, %TRUE if the contents of @buf are different from
- * the original contents of @buf when this function was called
- *
- * Reads the device's hardware address from the kernel and copies it into
- * @buf, returning the size of the data copied into @buf. On failure
- * @buf is not modified.
- *
- * Returns: the size of the hardware address in bytes on success, 0 on failure
- */
-gsize
-nm_device_read_hwaddr (NMDevice *dev,
- guint8 *buf,
- gsize buf_len,
- gboolean *out_changed)
-{
- struct rtnl_link *rtnl;
- struct nl_addr *addr;
- int idx;
- gsize addrlen = 0;
- const guint8 *binaddr;
-
- g_return_val_if_fail (dev != NULL, 0);
- g_return_val_if_fail (buf != NULL, 0);
- g_return_val_if_fail (buf_len > 0, 0);
-
- idx = nm_device_get_ip_ifindex (dev);
- g_return_val_if_fail (idx > 0, 0);
-
- rtnl = nm_netlink_index_to_rtnl_link (idx);
- if (!rtnl) {
- nm_log_err (LOGD_HW | LOGD_DEVICE,
- "(%s): failed to read hardware address (error %d)",
- nm_device_get_iface (dev), errno);
- return 0;
- }
-
- addr = rtnl_link_get_addr (rtnl);
- if (!addr) {
- nm_log_err (LOGD_HW | LOGD_DEVICE,
- "(%s): no hardware address?",
- nm_device_get_iface (dev));
- goto out;
- }
-
- addrlen = nl_addr_get_len (addr);
- if (addrlen > buf_len) {
- nm_log_err (LOGD_HW | LOGD_DEVICE,
- "(%s): hardware address is wrong length (got %zd max %zd)",
- nm_device_get_iface (dev), addrlen, buf_len);
- addrlen = 0;
- } else {
- binaddr = nl_addr_get_binary_addr (addr);
- if (out_changed)
- *out_changed = memcmp (buf, binaddr, addrlen) ? TRUE : FALSE;
- memcpy (buf, binaddr, addrlen);
- }
-
-out:
- rtnl_link_put (rtnl);
- return addrlen;
-}
diff --git a/src/nm-dhcp4-config-glue.h b/src/nm-dhcp4-config-glue.h
new file mode 100644
index 000000000..b08a611b2
--- /dev/null
+++ b/src/nm-dhcp4-config-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_dhcp4_config_MARSHAL_H__
+#define __dbus_glib_marshal_nm_dhcp4_config_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_dhcp4_config_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_dhcp4_config_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_dhcp4_config_object_info = { 1,
+ dbus_glib_nm_dhcp4_config_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.DHCP4Config\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.DHCP4Config\0Options\0options\0read\0\0"
+};
+
diff --git a/src/nm-dhcp4-config.c b/src/nm-dhcp4-config.c
index 567ba6875..a405aa870 100644
--- a/src/nm-dhcp4-config.c
+++ b/src/nm-dhcp4-config.c
@@ -26,7 +26,6 @@
#include "nm-dhcp4-config.h"
#include "nm-dhcp4-config-glue.h"
#include "nm-dbus-glib-types.h"
-#include "nm-properties-changed-signal.h"
#include "nm-utils.h"
@@ -47,14 +46,6 @@ enum {
LAST_PROP
};
-enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
NMDHCP4Config *
nm_dhcp4_config_new (void)
@@ -140,14 +131,9 @@ nm_dhcp4_config_init (NMDHCP4Config *self)
{
NMDHCP4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (self);
static guint32 counter = 0;
- DBusGConnection *connection;
- NMDBusManager *dbus_mgr;
- dbus_mgr = nm_dbus_manager_get ();
- connection = nm_dbus_manager_get_connection (dbus_mgr);
priv->dbus_path = g_strdup_printf (NM_DBUS_PATH "/DHCP4Config/%d", counter++);
- dbus_g_connection_register_g_object (connection, priv->dbus_path, G_OBJECT (self));
- g_object_unref (dbus_mgr);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->dbus_path, self);
priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, nm_gvalue_destroy);
}
@@ -199,11 +185,7 @@ nm_dhcp4_config_class_init (NMDHCP4ConfigClass *config_class)
DBUS_TYPE_G_MAP_OF_VARIANT,
G_PARAM_READABLE));
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDHCP4ConfigClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (config_class),
- &dbus_glib_nm_dhcp4_config_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (config_class),
+ &dbus_glib_nm_dhcp4_config_object_info);
}
diff --git a/src/nm-dhcp4-config.h b/src/nm-dhcp4-config.h
index c5d78db9e..6eb9ee575 100644
--- a/src/nm-dhcp4-config.h
+++ b/src/nm-dhcp4-config.h
@@ -38,8 +38,6 @@ typedef struct {
typedef struct {
GObjectClass parent;
- /* Signals */
- void (*properties_changed) (NMDHCP4Config *config, GHashTable *properties);
} NMDHCP4ConfigClass;
#define NM_DHCP4_CONFIG_OPTIONS "options"
diff --git a/src/nm-dhcp6-config-glue.h b/src/nm-dhcp6-config-glue.h
new file mode 100644
index 000000000..9bfee43da
--- /dev/null
+++ b/src/nm-dhcp6-config-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_dhcp6_config_MARSHAL_H__
+#define __dbus_glib_marshal_nm_dhcp6_config_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_dhcp6_config_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_dhcp6_config_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_dhcp6_config_object_info = { 1,
+ dbus_glib_nm_dhcp6_config_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.DHCP6Config\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.DHCP6Config\0Options\0options\0read\0\0"
+};
+
diff --git a/src/nm-dhcp6-config.c b/src/nm-dhcp6-config.c
index 885e5f840..c50b8fdde 100644
--- a/src/nm-dhcp6-config.c
+++ b/src/nm-dhcp6-config.c
@@ -26,7 +26,6 @@
#include "nm-dhcp6-config.h"
#include "nm-dhcp6-config-glue.h"
#include "nm-dbus-glib-types.h"
-#include "nm-properties-changed-signal.h"
#include "nm-utils.h"
@@ -47,14 +46,6 @@ enum {
LAST_PROP
};
-enum {
- PROPERTIES_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
NMDHCP6Config *
nm_dhcp6_config_new (void)
@@ -140,14 +131,9 @@ nm_dhcp6_config_init (NMDHCP6Config *self)
{
NMDHCP6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (self);
static guint32 counter = 0;
- DBusGConnection *connection;
- NMDBusManager *dbus_mgr;
- dbus_mgr = nm_dbus_manager_get ();
- connection = nm_dbus_manager_get_connection (dbus_mgr);
priv->dbus_path = g_strdup_printf (NM_DBUS_PATH "/DHCP6Config/%d", counter++);
- dbus_g_connection_register_g_object (connection, priv->dbus_path, G_OBJECT (self));
- g_object_unref (dbus_mgr);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->dbus_path, self);
priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, nm_gvalue_destroy);
}
@@ -199,11 +185,7 @@ nm_dhcp6_config_class_init (NMDHCP6ConfigClass *config_class)
DBUS_TYPE_G_MAP_OF_VARIANT,
G_PARAM_READABLE));
- /* Signals */
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMDHCP6ConfigClass, properties_changed));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (config_class),
- &dbus_glib_nm_dhcp6_config_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (config_class),
+ &dbus_glib_nm_dhcp6_config_object_info);
}
diff --git a/src/nm-dhcp6-config.h b/src/nm-dhcp6-config.h
index ef742ac4a..2af656078 100644
--- a/src/nm-dhcp6-config.h
+++ b/src/nm-dhcp6-config.h
@@ -38,8 +38,6 @@ typedef struct {
typedef struct {
GObjectClass parent;
- /* Signals */
- void (*properties_changed) (NMDHCP6Config *config, GHashTable *properties);
} NMDHCP6ConfigClass;
#define NM_DHCP6_CONFIG_OPTIONS "options"
diff --git a/src/nm-dispatcher.c b/src/nm-dispatcher.c
index 12cd0f0ae..f955822b4 100644
--- a/src/nm-dispatcher.c
+++ b/src/nm-dispatcher.c
@@ -20,17 +20,58 @@
*/
#include <glib.h>
+#include <gio/gio.h>
#include <string.h>
+#include <errno.h>
#include "nm-dispatcher.h"
-#include "nm-dispatcher-action.h"
+#include "nm-dispatcher-api.h"
#include "NetworkManagerUtils.h"
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
#include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
-static GSList *requests = NULL;
+#define CALL_TIMEOUT (1000 * 60 * 10) /* 10 minutes for all scripts */
+
+static GHashTable *requests = NULL;
+
+typedef struct {
+ GFileMonitor *monitor;
+ const char *const description;
+ const char *const dir;
+ const guint16 dir_len;
+ char has_scripts;
+} Monitor;
+
+enum {
+ MONITOR_INDEX_DEFAULT,
+ MONITOR_INDEX_PRE_UP,
+ MONITOR_INDEX_PRE_DOWN,
+};
+
+static Monitor monitors[3] = {
+#define MONITORS_INIT_SET(INDEX, USE, SCRIPT_DIR) [INDEX] = { .dir_len = STRLEN (SCRIPT_DIR), .dir = SCRIPT_DIR, .description = ("" USE), .has_scripts = TRUE }
+ MONITORS_INIT_SET (MONITOR_INDEX_DEFAULT, "default", NMD_SCRIPT_DIR_DEFAULT),
+ MONITORS_INIT_SET (MONITOR_INDEX_PRE_UP, "pre-up", NMD_SCRIPT_DIR_PRE_UP),
+ MONITORS_INIT_SET (MONITOR_INDEX_PRE_DOWN, "pre-down", NMD_SCRIPT_DIR_PRE_DOWN),
+};
+
+static const Monitor*
+_get_monitor_by_action (DispatcherAction action)
+{
+ switch (action) {
+ case DISPATCHER_ACTION_PRE_UP:
+ case DISPATCHER_ACTION_VPN_PRE_UP:
+ return &monitors[MONITOR_INDEX_PRE_UP];
+ case DISPATCHER_ACTION_PRE_DOWN:
+ case DISPATCHER_ACTION_VPN_PRE_DOWN:
+ return &monitors[MONITOR_INDEX_PRE_DOWN];
+ default:
+ return &monitors[MONITOR_INDEX_DEFAULT];
+ }
+}
static void
dump_object_to_props (GObject *object, GHashTable *hash)
@@ -131,19 +172,38 @@ fill_vpn_props (NMIP4Config *ip4_config,
}
typedef struct {
+ DispatcherAction action;
+ guint request_id;
DispatcherFunc callback;
gpointer user_data;
- NMDBusManager *dbus_mgr;
+ guint idle_id;
} DispatchInfo;
static void
dispatcher_info_free (DispatchInfo *info)
{
- requests = g_slist_remove (requests, info);
- g_object_unref (info->dbus_mgr);
+ if (info->idle_id)
+ g_source_remove (info->idle_id);
g_free (info);
}
+static void
+_ensure_requests (void)
+{
+ if (G_UNLIKELY (requests == NULL)) {
+ requests = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ NULL,
+ (GDestroyNotify) dispatcher_info_free);
+ }
+}
+
+static void
+dispatcher_info_cleanup (DispatchInfo *info)
+{
+ g_hash_table_remove (requests, GUINT_TO_POINTER (info->request_id));
+}
+
static const char *
dispatch_result_to_string (DispatchResult result)
{
@@ -162,98 +222,178 @@ dispatch_result_to_string (DispatchResult result)
g_assert_not_reached ();
}
+static gboolean
+validate_element (guint request_id, GValue *val, GType expected_type, guint idx, guint eltnum)
+{
+ if (G_VALUE_TYPE (val) != expected_type) {
+ nm_log_dbg (LOGD_DISPATCH, "(%u) result %d element %d invalid type %s",
+ request_id, idx, eltnum, G_VALUE_TYPE_NAME (val));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void
+dispatcher_results_process (guint request_id, DispatcherAction action, GPtrArray *results)
+{
+ guint i;
+ const Monitor *monitor = _get_monitor_by_action (action);
+
+ g_return_if_fail (results != NULL);
+
+ if (results->len == 0) {
+ nm_log_dbg (LOGD_DISPATCH, "(%u) succeeded but no scripts invoked",
+ request_id);
+ return;
+ }
+
+ for (i = 0; i < results->len; i++) {
+ GValueArray *item = g_ptr_array_index (results, i);
+ GValue *tmp;
+ const char *script, *err;
+ DispatchResult result;
+ const char *script_validation_msg = "";
+
+ if (item->n_values != 3) {
+ nm_log_dbg (LOGD_DISPATCH, "(%u) unexpected number of items in "
+ "dispatcher result (got %d, expected 3)",
+ request_id, item->n_values);
+ continue;
+ }
+
+ /* Script */
+ tmp = g_value_array_get_nth (item, 0);
+ if (!validate_element (request_id, tmp, G_TYPE_STRING, i, 0))
+ continue;
+ script = g_value_get_string (tmp);
+ if (!script) {
+ script_validation_msg = " (path is NULL)";
+ script = "(unknown)";
+ } else if (!strncmp (script, monitor->dir, monitor->dir_len) /* check: prefixed by script directory */
+ && script[monitor->dir_len] == '/' && script[monitor->dir_len+1] /* check: with additional "/?" */
+ && !strchr (&script[monitor->dir_len+1], '/')) { /* check: and no further '/' */
+ /* we expect the script to lie inside monitor->dir. If it does,
+ * strip the directory name. Otherwise show the full path and a warning. */
+ script += monitor->dir_len + 1;
+ } else
+ script_validation_msg = " (unexpected path)";
+
+
+ /* Result */
+ tmp = g_value_array_get_nth (item, 1);
+ if (!validate_element (request_id, tmp, G_TYPE_UINT, i, 1))
+ continue;
+ result = g_value_get_uint (tmp);
+
+ /* Error */
+ tmp = g_value_array_get_nth (item, 2);
+ if (!validate_element (request_id, tmp, G_TYPE_STRING, i, 2))
+ continue;
+ err = g_value_get_string (tmp);
+
+
+ if (result == DISPATCH_RESULT_SUCCESS) {
+ nm_log_dbg (LOGD_DISPATCH, "(%u) %s succeeded%s",
+ request_id,
+ script, script_validation_msg);
+ } else {
+ nm_log_warn (LOGD_DISPATCH, "(%u) %s failed (%s): %s%s",
+ request_id,
+ script,
+ dispatch_result_to_string (result),
+ err ? err : "", script_validation_msg);
+ }
+ }
+}
+
+static void
+free_results (GPtrArray *results)
+{
+ g_return_if_fail (results != NULL);
+ g_ptr_array_foreach (results, (GFunc) g_value_array_free, NULL);
+ g_ptr_array_free (results, TRUE);
+}
+
static void
dispatcher_done_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
{
DispatchInfo *info = user_data;
GError *error = NULL;
GPtrArray *results = NULL;
- guint i;
if (dbus_g_proxy_end_call (proxy, call, &error,
DISPATCHER_TYPE_RESULT_ARRAY, &results,
G_TYPE_INVALID)) {
- for (i = 0; results && (i < results->len); i++) {
- GValueArray *item = g_ptr_array_index (results, i);
- GValue *tmp;
- const char *script, *err;
- DispatchResult result;
-
- if ( (G_VALUE_TYPE (g_value_array_get_nth (item, 0)) == G_TYPE_STRING)
- && (G_VALUE_TYPE (g_value_array_get_nth (item, 1)) == G_TYPE_UINT)
- && (G_VALUE_TYPE (g_value_array_get_nth (item, 2)) == G_TYPE_STRING)) {
- /* result */
- tmp = g_value_array_get_nth (item, 1);
- result = g_value_get_uint (tmp);
- if (result != DISPATCH_RESULT_SUCCESS) {
- /* script */
- tmp = g_value_array_get_nth (item, 0);
- script = g_value_get_string (tmp);
-
- /* error */
- tmp = g_value_array_get_nth (item, 2);
- err = g_value_get_string (tmp);
-
- nm_log_warn (LOGD_CORE, "Dispatcher script %s: %s",
- dispatch_result_to_string (result), err);
- }
- } else
- nm_log_dbg (LOGD_CORE, "Dispatcher result element %d invalid type", i);
-
- g_value_array_free (item);
- }
- g_ptr_array_free (results, TRUE);
+ dispatcher_results_process (info->request_id, info->action, results);
+ free_results (results);
} else {
g_assert (error);
- nm_log_warn (LOGD_CORE, "Dispatcher failed: (%d) %s", error->code, error->message);
+
+ if (!g_error_matches (error, DBUS_GERROR, DBUS_GERROR_REMOTE_EXCEPTION)) {
+ nm_log_warn (LOGD_DISPATCH, "(%u) failed to call dispatcher scripts: (%s:%d) %s",
+ info->request_id, g_quark_to_string (error->domain),
+ error->code, error->message);
+ } else if (!dbus_g_error_has_name (error, "org.freedesktop.systemd1.LoadFailed")) {
+ nm_log_warn (LOGD_DISPATCH, "(%u) failed to call dispatcher scripts: (%s) %s",
+ info->request_id, dbus_g_error_get_name (error), error->message);
+ } else {
+ nm_log_dbg (LOGD_DISPATCH, "(%u) failed to call dispatcher scripts: (%s) %s",
+ info->request_id, dbus_g_error_get_name (error), error->message);
+ }
}
if (info->callback)
- info->callback (info, info->user_data);
+ info->callback (info->request_id, info->user_data);
g_clear_error (&error);
g_object_unref (proxy);
}
+static const char *action_table[] = {
+ [DISPATCHER_ACTION_HOSTNAME] = NMD_ACTION_HOSTNAME,
+ [DISPATCHER_ACTION_PRE_UP] = NMD_ACTION_PRE_UP,
+ [DISPATCHER_ACTION_UP] = NMD_ACTION_UP,
+ [DISPATCHER_ACTION_PRE_DOWN] = NMD_ACTION_PRE_DOWN,
+ [DISPATCHER_ACTION_DOWN] = NMD_ACTION_DOWN,
+ [DISPATCHER_ACTION_VPN_PRE_UP] = NMD_ACTION_VPN_PRE_UP,
+ [DISPATCHER_ACTION_VPN_UP] = NMD_ACTION_VPN_UP,
+ [DISPATCHER_ACTION_VPN_PRE_DOWN] = NMD_ACTION_VPN_PRE_DOWN,
+ [DISPATCHER_ACTION_VPN_DOWN] = NMD_ACTION_VPN_DOWN,
+ [DISPATCHER_ACTION_DHCP4_CHANGE] = NMD_ACTION_DHCP4_CHANGE,
+ [DISPATCHER_ACTION_DHCP6_CHANGE] = NMD_ACTION_DHCP6_CHANGE,
+};
+
static const char *
action_to_string (DispatcherAction action)
{
- switch (action) {
- case DISPATCHER_ACTION_HOSTNAME:
- return "hostname";
- case DISPATCHER_ACTION_UP:
- return "up";
- case DISPATCHER_ACTION_PRE_DOWN:
- return "pre-down";
- case DISPATCHER_ACTION_DOWN:
- return "down";
- case DISPATCHER_ACTION_VPN_UP:
- return "vpn-up";
- case DISPATCHER_ACTION_VPN_PRE_DOWN:
- return "vpn-pre-down";
- case DISPATCHER_ACTION_VPN_DOWN:
- return "vpn-down";
- case DISPATCHER_ACTION_DHCP4_CHANGE:
- return "dhcp4-change";
- case DISPATCHER_ACTION_DHCP6_CHANGE:
- return "dhcp6-change";
- default:
- break;
- }
- g_assert_not_reached ();
+ g_assert (action >= 0 && action < G_N_ELEMENTS (action_table));
+ return action_table[action];
+}
+
+static gboolean
+dispatcher_idle_cb (gpointer user_data)
+{
+ DispatchInfo *info = user_data;
+
+ info->idle_id = 0;
+ if (info->callback)
+ info->callback (info->request_id, info->user_data);
+ dispatcher_info_cleanup (info);
+ return G_SOURCE_REMOVE;
}
-static gconstpointer
+static gboolean
_dispatcher_call (DispatcherAction action,
+ gboolean blocking,
NMConnection *connection,
NMDevice *device,
const char *vpn_iface,
NMIP4Config *vpn_ip4_config,
NMIP6Config *vpn_ip6_config,
DispatcherFunc callback,
- gpointer user_data)
+ gpointer user_data,
+ guint *out_call_id)
{
- NMDBusManager *dbus_mgr;
DBusGProxy *proxy;
DBusGConnection *g_connection;
GHashTable *connection_hash;
@@ -265,26 +405,66 @@ _dispatcher_call (DispatcherAction action,
GHashTable *device_dhcp6_props;
GHashTable *vpn_ip4_props;
GHashTable *vpn_ip6_props;
- DBusGProxyCall *call;
- DispatchInfo *info;
+ DispatchInfo *info = NULL;
+ gboolean success = FALSE;
+ GError *error = NULL;
+ static guint request_counter = 0;
+ guint reqid = ++request_counter;
+
+ /* Wrapping protection */
+ if (G_UNLIKELY (!reqid))
+ reqid = ++request_counter;
+
+ g_assert (!blocking || (!callback && !user_data));
+
+ _ensure_requests ();
/* All actions except 'hostname' require a device */
- if (action != DISPATCHER_ACTION_HOSTNAME)
- g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+ if (action == DISPATCHER_ACTION_HOSTNAME) {
+ nm_log_dbg (LOGD_DISPATCH, "(%u) dispatching action '%s'%s",
+ reqid, action_to_string (action),
+ blocking
+ ? " (blocking)"
+ : (callback ? " (with callback)" : ""));
+ } else {
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ nm_log_dbg (LOGD_DISPATCH, "(%u) (%s) dispatching action '%s'%s",
+ reqid,
+ vpn_iface ? vpn_iface : nm_device_get_iface (device),
+ action_to_string (action),
+ blocking
+ ? " (blocking)"
+ : (callback ? " (with callback)" : ""));
+ }
+
/* VPN actions require at least an IPv4 config (for now) */
if (action == DISPATCHER_ACTION_VPN_UP)
- g_return_val_if_fail (vpn_ip4_config != NULL, NULL);
+ g_return_val_if_fail (vpn_ip4_config != NULL, FALSE);
+
+ if (!_get_monitor_by_action(action)->has_scripts) {
+ if (blocking == FALSE && (out_call_id || callback)) {
+ info = g_malloc0 (sizeof (*info));
+ info->action = action;
+ info->request_id = reqid;
+ info->callback = callback;
+ info->user_data = user_data;
+ info->idle_id = g_idle_add (dispatcher_idle_cb, info);
+ nm_log_dbg (LOGD_DISPATCH, "(%u) simulate request; no scripts in %s", reqid, _get_monitor_by_action(action)->dir);
+ } else
+ nm_log_dbg (LOGD_DISPATCH, "(%u) ignoring request; no scripts in %s", reqid, _get_monitor_by_action(action)->dir);
+ success = TRUE;
+ goto done;
+ }
- dbus_mgr = nm_dbus_manager_get ();
- g_connection = nm_dbus_manager_get_connection (dbus_mgr);
+ g_connection = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
proxy = dbus_g_proxy_new_for_name (g_connection,
NM_DISPATCHER_DBUS_SERVICE,
NM_DISPATCHER_DBUS_PATH,
NM_DISPATCHER_DBUS_IFACE);
if (!proxy) {
- nm_log_err (LOGD_CORE, "could not get dispatcher proxy!");
- g_object_unref (dbus_mgr);
- return NULL;
+ nm_log_err (LOGD_DISPATCH, "(%u) could not get dispatcher proxy!", reqid);
+ return FALSE;
}
if (connection) {
@@ -315,33 +495,66 @@ _dispatcher_call (DispatcherAction action,
device_ip6_props,
device_dhcp4_props,
device_dhcp6_props);
- if (vpn_iface)
+ if (vpn_ip4_config || vpn_ip6_config)
fill_vpn_props (vpn_ip4_config, vpn_ip6_config, vpn_ip4_props, vpn_ip6_props);
}
- info = g_malloc0 (sizeof (*info));
- info->callback = callback;
- info->user_data = user_data;
- info->dbus_mgr = dbus_mgr;
-
/* Send the action to the dispatcher */
- call = dbus_g_proxy_begin_call_with_timeout (proxy, "Action",
- dispatcher_done_cb,
- info,
- (GDestroyNotify) dispatcher_info_free,
- 15000,
- G_TYPE_STRING, action_to_string (action),
- DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, connection_hash,
- DBUS_TYPE_G_MAP_OF_VARIANT, connection_props,
- DBUS_TYPE_G_MAP_OF_VARIANT, device_props,
- DBUS_TYPE_G_MAP_OF_VARIANT, device_ip4_props,
- DBUS_TYPE_G_MAP_OF_VARIANT, device_ip6_props,
- DBUS_TYPE_G_MAP_OF_VARIANT, device_dhcp4_props,
- DBUS_TYPE_G_MAP_OF_VARIANT, device_dhcp6_props,
- G_TYPE_STRING, vpn_iface ? vpn_iface : "",
- DBUS_TYPE_G_MAP_OF_VARIANT, vpn_ip4_props,
- DBUS_TYPE_G_MAP_OF_VARIANT, vpn_ip6_props,
- G_TYPE_INVALID);
+ if (blocking) {
+ GPtrArray *results = NULL;
+
+ success = dbus_g_proxy_call_with_timeout (proxy, "Action",
+ CALL_TIMEOUT,
+ &error,
+ G_TYPE_STRING, action_to_string (action),
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, connection_hash,
+ DBUS_TYPE_G_MAP_OF_VARIANT, connection_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_ip4_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_ip6_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_dhcp4_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_dhcp6_props,
+ G_TYPE_STRING, vpn_iface ? vpn_iface : "",
+ DBUS_TYPE_G_MAP_OF_VARIANT, vpn_ip4_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, vpn_ip6_props,
+ G_TYPE_BOOLEAN, nm_logging_enabled (LOGL_DEBUG, LOGD_DISPATCH),
+ G_TYPE_INVALID,
+ DISPATCHER_TYPE_RESULT_ARRAY, &results,
+ G_TYPE_INVALID);
+ if (success) {
+ dispatcher_results_process (reqid, action, results);
+ free_results (results);
+ } else {
+ nm_log_warn (LOGD_DISPATCH, "(%u) failed: (%d) %s", reqid, error->code, error->message);
+ g_error_free (error);
+ }
+ } else {
+ info = g_malloc0 (sizeof (*info));
+ info->action = action;
+ info->request_id = reqid;
+ info->callback = callback;
+ info->user_data = user_data;
+ dbus_g_proxy_begin_call_with_timeout (proxy, "Action",
+ dispatcher_done_cb,
+ info,
+ (GDestroyNotify) dispatcher_info_cleanup,
+ CALL_TIMEOUT,
+ G_TYPE_STRING, action_to_string (action),
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, connection_hash,
+ DBUS_TYPE_G_MAP_OF_VARIANT, connection_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_ip4_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_ip6_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_dhcp4_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, device_dhcp6_props,
+ G_TYPE_STRING, vpn_iface ? vpn_iface : "",
+ DBUS_TYPE_G_MAP_OF_VARIANT, vpn_ip4_props,
+ DBUS_TYPE_G_MAP_OF_VARIANT, vpn_ip6_props,
+ G_TYPE_BOOLEAN, nm_logging_enabled (LOGL_DEBUG, LOGD_DISPATCH),
+ G_TYPE_INVALID);
+ success = TRUE;
+ }
+
g_hash_table_destroy (connection_hash);
g_hash_table_destroy (connection_props);
g_hash_table_destroy (device_props);
@@ -352,45 +565,205 @@ _dispatcher_call (DispatcherAction action,
g_hash_table_destroy (vpn_ip4_props);
g_hash_table_destroy (vpn_ip6_props);
- /* Track the request in case of cancelation */
- requests = g_slist_append (requests, info);
+done:
+ if (success && info) {
+ /* Track the request in case of cancelation */
+ g_hash_table_insert (requests, GUINT_TO_POINTER (info->request_id), info);
+ if (out_call_id)
+ *out_call_id = info->request_id;
+ } else if (out_call_id)
+ *out_call_id = 0;
- return info;
+ return success;
}
-gconstpointer
+/**
+ * nm_dispatcher_call:
+ * @action: the %DispatcherAction
+ * @connection: the #NMConnection the action applies to
+ * @device: the #NMDevice the action applies to
+ * @callback: a caller-supplied callback to execute when done
+ * @user_data: caller-supplied pointer passed to @callback
+ * @out_call_id: on success, a call identifier which can be passed to
+ * nm_dispatcher_call_cancel()
+ *
+ * This method always invokes the dispatcher action asynchronously. To ignore
+ * the result, pass %NULL to @callback.
+ *
+ * Returns: %TRUE if the action was dispatched, %FALSE on failure
+ */
+gboolean
nm_dispatcher_call (DispatcherAction action,
NMConnection *connection,
NMDevice *device,
DispatcherFunc callback,
- gpointer user_data)
+ gpointer user_data,
+ guint *out_call_id)
+{
+ return _dispatcher_call (action, FALSE, connection, device, NULL, NULL,
+ NULL, callback, user_data, out_call_id);
+}
+
+/**
+ * nm_dispatcher_call_sync():
+ * @action: the %DispatcherAction
+ * @connection: the #NMConnection the action applies to
+ * @device: the #NMDevice the action applies to
+ *
+ * This method always invokes the dispatcher action synchronously and it may
+ * take a long time to return.
+ *
+ * Returns: %TRUE if the action was dispatched, %FALSE on failure
+ */
+gboolean
+nm_dispatcher_call_sync (DispatcherAction action,
+ NMConnection *connection,
+ NMDevice *device)
{
- return _dispatcher_call (action, connection, device, NULL, NULL, NULL, callback, user_data);
+ return _dispatcher_call (action, TRUE, connection, device, NULL, NULL,
+ NULL, NULL, NULL, NULL);
}
-gconstpointer
+/**
+ * nm_dispatcher_call_vpn():
+ * @action: the %DispatcherAction
+ * @connection: the #NMConnection the action applies to
+ * @parent_device: the parent #NMDevice of the VPN connection
+ * @vpn_iface: the IP interface of the VPN tunnel, if any
+ * @vpn_ip4_config: the #NMIP4Config of the VPN connection
+ * @vpn_ip6_config: the #NMIP6Config of the VPN connection
+ * @callback: a caller-supplied callback to execute when done
+ * @user_data: caller-supplied pointer passed to @callback
+ * @out_call_id: on success, a call identifier which can be passed to
+ * nm_dispatcher_call_cancel()
+ *
+ * This method always invokes the dispatcher action asynchronously. To ignore
+ * the result, pass %NULL to @callback.
+ *
+ * Returns: %TRUE if the action was dispatched, %FALSE on failure
+ */
+gboolean
nm_dispatcher_call_vpn (DispatcherAction action,
NMConnection *connection,
- NMDevice *device,
+ NMDevice *parent_device,
const char *vpn_iface,
NMIP4Config *vpn_ip4_config,
NMIP6Config *vpn_ip6_config,
DispatcherFunc callback,
- gpointer user_data)
+ gpointer user_data,
+ guint *out_call_id)
{
- return _dispatcher_call (action, connection, device, vpn_iface, vpn_ip4_config, vpn_ip6_config, callback, user_data);
+ return _dispatcher_call (action, FALSE, connection, parent_device, vpn_iface,
+ vpn_ip4_config, vpn_ip6_config, callback, user_data, out_call_id);
+}
+
+/**
+ * nm_dispatcher_call_vpn_sync():
+ * @action: the %DispatcherAction
+ * @connection: the #NMConnection the action applies to
+ * @parent_device: the parent #NMDevice of the VPN connection
+ * @vpn_iface: the IP interface of the VPN tunnel, if any
+ * @vpn_ip4_config: the #NMIP4Config of the VPN connection
+ * @vpn_ip6_config: the #NMIP6Config of the VPN connection
+ *
+ * This method always invokes the dispatcher action synchronously and it may
+ * take a long time to return.
+ *
+ * Returns: %TRUE if the action was dispatched, %FALSE on failure
+ */
+gboolean
+nm_dispatcher_call_vpn_sync (DispatcherAction action,
+ NMConnection *connection,
+ NMDevice *parent_device,
+ const char *vpn_iface,
+ NMIP4Config *vpn_ip4_config,
+ NMIP6Config *vpn_ip6_config)
+{
+ return _dispatcher_call (action, TRUE, connection, parent_device, vpn_iface,
+ vpn_ip4_config, vpn_ip6_config, NULL, NULL, NULL);
}
void
-nm_dispatcher_call_cancel (gconstpointer call)
+nm_dispatcher_call_cancel (guint call_id)
{
- /* 'call' is really a DispatchInfo pointer, just opaque to callers.
- * Look it up in our requests list, but don't access it directly before
- * we've made sure it's a valid request,since it may have long since been
- * freed. Canceling just means the callback doesn't get called, so set
- * the DispatcherInfo's callback to NULL.
+ DispatchInfo *info;
+
+ _ensure_requests ();
+
+ /* Canceling just means the callback doesn't get called, so set the
+ * DispatcherInfo's callback to NULL.
*/
- if (g_slist_find (requests, call))
- ((DispatchInfo *) call)->callback = NULL;
+ info = g_hash_table_lookup (requests, GUINT_TO_POINTER (call_id));
+ g_return_if_fail (info);
+
+ if (info && info->callback) {
+ nm_log_dbg (LOGD_DISPATCH, "(%u) cancelling dispatcher callback action",
+ call_id);
+ info->callback = NULL;
+ }
+}
+
+static void
+dispatcher_dir_changed (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ Monitor *item)
+{
+ const char *name;
+ char *full_name;
+ GDir *dir;
+ GError *error = NULL;
+
+ dir = g_dir_open (item->dir, 0, &error);
+ if (dir) {
+ int errsv = 0;
+
+ item->has_scripts = FALSE;
+ errno = 0;
+ while (!item->has_scripts
+ && (name = g_dir_read_name (dir))) {
+ full_name = g_build_filename (item->dir, name, NULL);
+ item->has_scripts = g_file_test (full_name, G_FILE_TEST_IS_EXECUTABLE);
+ g_free (full_name);
+ }
+ errsv = errno;
+ g_dir_close (dir);
+ if (item->has_scripts)
+ nm_log_dbg (LOGD_DISPATCH, "dispatcher: %s script directory '%s' has scripts", item->description, item->dir);
+ else if (errsv == 0)
+ nm_log_dbg (LOGD_DISPATCH, "dispatcher: %s script directory '%s' has no scripts", item->description, item->dir);
+ else {
+ nm_log_dbg (LOGD_DISPATCH, "dispatcher: %s script directory '%s' error reading (%s)", item->description, item->dir, strerror (errsv));
+ item->has_scripts = TRUE;
+ }
+ } else {
+ if (g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) {
+ nm_log_dbg (LOGD_DISPATCH, "dispatcher: %s script directory '%s' does not exist", item->description, item->dir);
+ item->has_scripts = FALSE;
+ } else {
+ nm_log_dbg (LOGD_DISPATCH, "dispatcher: %s script directory '%s' error (%s)", item->description, item->dir, error->message);
+ item->has_scripts = TRUE;
+ }
+ g_error_free (error);
+ }
+
+}
+
+void
+nm_dispatcher_init (void)
+{
+ GFile *file;
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (monitors); i++) {
+ file = g_file_new_for_path (monitors[i].dir);
+ monitors[i].monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
+ if (monitors[i].monitor) {
+ g_signal_connect (monitors[i].monitor, "changed", G_CALLBACK (dispatcher_dir_changed), &monitors[i]);
+ dispatcher_dir_changed (monitors[i].monitor, file, NULL, 0, &monitors[i]);
+ }
+ g_object_unref (file);
+ }
}
diff --git a/src/nm-dispatcher.h b/src/nm-dispatcher.h
index 05a6c8751..464f6310c 100644
--- a/src/nm-dispatcher.h
+++ b/src/nm-dispatcher.h
@@ -32,9 +32,11 @@
typedef enum {
DISPATCHER_ACTION_HOSTNAME,
+ DISPATCHER_ACTION_PRE_UP,
DISPATCHER_ACTION_UP,
DISPATCHER_ACTION_PRE_DOWN,
DISPATCHER_ACTION_DOWN,
+ DISPATCHER_ACTION_VPN_PRE_UP,
DISPATCHER_ACTION_VPN_UP,
DISPATCHER_ACTION_VPN_PRE_DOWN,
DISPATCHER_ACTION_VPN_DOWN,
@@ -42,23 +44,38 @@ typedef enum {
DISPATCHER_ACTION_DHCP6_CHANGE
} DispatcherAction;
-typedef void (*DispatcherFunc) (gconstpointer call, gpointer user_data);
+typedef void (*DispatcherFunc) (guint call_id, gpointer user_data);
-gconstpointer nm_dispatcher_call (DispatcherAction action,
+gboolean nm_dispatcher_call (DispatcherAction action,
+ NMConnection *connection,
+ NMDevice *device,
+ DispatcherFunc callback,
+ gpointer user_data,
+ guint *out_call_id);
+
+gboolean nm_dispatcher_call_sync (DispatcherAction action,
NMConnection *connection,
- NMDevice *device,
- DispatcherFunc callback,
- gpointer user_data);
+ NMDevice *device);
+
+gboolean nm_dispatcher_call_vpn (DispatcherAction action,
+ NMConnection *connection,
+ NMDevice *parent_device,
+ const char *vpn_iface,
+ NMIP4Config *vpn_ip4_config,
+ NMIP6Config *vpn_ip6_config,
+ DispatcherFunc callback,
+ gpointer user_data,
+ guint *out_call_id);
-gconstpointer nm_dispatcher_call_vpn (DispatcherAction action,
+gboolean nm_dispatcher_call_vpn_sync (DispatcherAction action,
NMConnection *connection,
- NMDevice *device,
+ NMDevice *parent_device,
const char *vpn_iface,
NMIP4Config *vpn_ip4_config,
- NMIP6Config *vpn_ip6_config,
- DispatcherFunc callback,
- gpointer user_data);
+ NMIP6Config *vpn_ip6_config);
+
+void nm_dispatcher_call_cancel (guint call_id);
-void nm_dispatcher_call_cancel (gconstpointer call);
+void nm_dispatcher_init (void);
#endif /* NM_DISPATCHER_H */
diff --git a/src/generated/nm-enum-types.c b/src/nm-enum-types.c
index 9bb95806e..95d64a8b6 100644
--- a/src/generated/nm-enum-types.c
+++ b/src/nm-enum-types.c
@@ -5,136 +5,135 @@
#include "nm-enum-types.h"
-#include "nm-active-connection.h"
-#include "nm-wifi-ap.h"
-#include "nm-device-bt.h"
-#include "nm-device-infiniband.h"
-#include "nm-device-bond.h"
-#include "nm-device-wired.h"
-#include "nm-dhcp6-config.h"
-#include "nm-session-utils.h"
-#include "nm-netlink-compat.h"
-#include "nm-session-monitor.h"
-#include "nm-connection-provider.h"
-#include "nm-device-ethernet.h"
-#include "nm-call-store.h"
#include "nm-config.h"
-#include "nm-policy-hosts.h"
-#include "nm-rfkill.h"
-#include "nm-dispatcher.h"
-#include "nm-ip4-config.h"
-#include "nm-manager.h"
-#include "nm-device-modem.h"
-#include "nm-activation-request.h"
-#include "nm-wifi-ap-utils.h"
-#include "nm-dbus-manager.h"
-#include "nm-policy-hostname.h"
+#include "nm-config-device.h"
#include "nm-device.h"
-#include "nm-types.h"
-#include "nm-ip6-config.h"
-#include "nm-system.h"
-#include "nm-policy.h"
-#include "nm-manager-auth.h"
+#include "nm-device-bond.h"
#include "nm-device-bridge.h"
-#include "nm-device-wifi.h"
+#include "nm-device-ethernet.h"
+#include "nm-device-factory.h"
+#include "nm-device-generic.h"
+#include "nm-device-gre.h"
+#include "nm-device-infiniband.h"
+#include "nm-device-macvlan.h"
#include "nm-device-private.h"
-#include "nm-netlink-utils.h"
-#include "nm-dhcp4-config.h"
-#include "nm-udev-manager.h"
-#include "nm-connectivity.h"
+#include "nm-device-team.h"
+#include "nm-device-tun.h"
+#include "nm-device-veth.h"
#include "nm-device-vlan.h"
-#include "nm-netlink-monitor.h"
-#include "nm-device-olpc-mesh.h"
-#include "nm-hostname-provider.h"
-#include "nm-sleep-monitor.h"
-#include "nm-device-factory.h"
-#include "NetworkManagerUtils.h"
-#include "nm-device-adsl.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-logging.h"
-#include "nm-dns-utils.h"
-#include "nm-dns-plugin.h"
-#include "nm-dns-manager.h"
-#include "nm-dns-dnsmasq.h"
-#include "nm-vpn-manager.h"
-#include "nm-vpn-service.h"
-#include "nm-vpn-connection.h"
-#include "nm-dhcp-dhcpcd.h"
-#include "nm-dhcp-dhclient.h"
+#include "nm-device-vxlan.h"
#include "nm-dhcp-client.h"
+#include "nm-dhcp-dhclient.h"
#include "nm-dhcp-dhclient-utils.h"
+#include "nm-dhcp-dhcpcd.h"
#include "nm-dhcp-manager.h"
-#include "nm-ip6-manager.h"
-#include "nm-supplicant-types.h"
-#include "nm-supplicant-config.h"
-#include "nm-supplicant-settings-verify.h"
-#include "nm-supplicant-manager.h"
-#include "nm-supplicant-interface.h"
-#include "nm-ppp-status.h"
-#include "nm-ppp-manager.h"
-#include "nm-pppd-plugin.h"
+#include "nm-dns-dnsmasq.h"
+#include "nm-dns-unbound.h"
+#include "nm-dns-manager.h"
+#include "nm-dns-plugin.h"
+#include "nm-dns-utils.h"
#include "nm-dnsmasq-manager.h"
-#include "nm-modem.h"
-#include "nm-modem-generic.h"
-#include "nm-modem-cdma.h"
-#include "nm-modem-broadband.h"
-#include "nm-modem-gsm.h"
-#include "nm-modem-manager.h"
-#include "nm-bluez-device.h"
-#include "nm-bluez-manager.h"
-#include "nm-bluez-common.h"
-#include "nm-bluez4-adapter.h"
+#include "nm-dnsmasq-utils.h"
#include "nm-firewall-manager.h"
-#include "nm-settings-connection.h"
-#include "nm-settings.h"
-#include "nm-default-wired-connection.h"
-#include "nm-system-config-interface.h"
-#include "nm-settings-utils.h"
-#include "nm-settings-error.h"
+#include "nm-logging.h"
+#include "nm-fake-platform.h"
+#include "nm-linux-platform.h"
+#include "nm-platform.h"
+#include "wifi-utils-nl80211.h"
+#include "wifi-utils-private.h"
+#include "wifi-utils.h"
+#include "nm-fake-rdisc.h"
+#include "nm-lndp-rdisc.h"
+#include "nm-rdisc.h"
+#include "nm-posix-signals.h"
+#include "nm-ppp-manager.h"
+#include "nm-ppp-status.h"
#include "nm-agent-manager.h"
#include "nm-inotify-helper.h"
#include "nm-secret-agent.h"
-#include "nm-device-wimax.h"
-#include "iwmxsdk.h"
-#include "nm-wimax-types.h"
-#include "nm-wimax-util.h"
-#include "nm-wimax-nsp.h"
+#include "nm-settings-connection.h"
+#include "nm-settings-error.h"
+#include "nm-settings-utils.h"
+#include "nm-settings.h"
+#include "nm-system-config-interface.h"
+#include "common.h"
+#include "nm-keyfile-connection.h"
+#include "plugin.h"
+#include "reader.h"
+#include "utils.h"
+#include "writer.h"
+#include "nm-supplicant-config.h"
+#include "nm-supplicant-interface.h"
+#include "nm-supplicant-manager.h"
+#include "nm-supplicant-settings-verify.h"
+#include "nm-supplicant-types.h"
+#include "nm-call-store.h"
+#include "nm-vpn-connection.h"
+#include "nm-vpn-manager.h"
+#include "nm-vpn-service.h"
+#include "nm-activation-request.h"
+#include "nm-active-connection.h"
+#include "nm-connection-provider.h"
+#include "nm-connectivity.h"
+#include "nm-dbus-manager.h"
+#include "nm-dcb.h"
+#include "nm-dhcp4-config.h"
+#include "nm-dhcp6-config.h"
+#include "nm-dispatcher.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+#include "nm-manager-auth.h"
+#include "nm-auth-subject.h"
+#include "nm-manager.h"
+#include "nm-policy.h"
+#include "nm-properties-changed-signal.h"
+#include "nm-rfkill-manager.h"
+#include "nm-session-monitor.h"
+#include "nm-session-utils.h"
+#include "nm-sleep-monitor.h"
+#include "nm-types.h"
+#include "NetworkManagerUtils.h"
+#include "wifi-utils-wext.h"
+#include "nm-device-wimax.h"
GType
-nm_bt_error_get_type (void)
+nm_device_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_BT_ERROR_CONNECTION_NOT_BT, "NM_BT_ERROR_CONNECTION_NOT_BT", "ConnectionNotBt" },
- { NM_BT_ERROR_CONNECTION_INVALID, "NM_BT_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_BT_ERROR_CONNECTION_INCOMPATIBLE, "NM_BT_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_DEVICE_ERROR_CONNECTION_ACTIVATING, "NM_DEVICE_ERROR_CONNECTION_ACTIVATING", "ConnectionActivating" },
+ { NM_DEVICE_ERROR_CONNECTION_INVALID, "NM_DEVICE_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_DEVICE_ERROR_NOT_ACTIVE, "NM_DEVICE_ERROR_NOT_ACTIVE", "NotActive" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMBtError"), values);
+ g_enum_register_static (g_intern_static_string ("NMDeviceError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_infiniband_error_get_type (void)
+nm_unmanaged_flags_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_INFINIBAND_ERROR_CONNECTION_NOT_INFINIBAND, "NM_INFINIBAND_ERROR_CONNECTION_NOT_INFINIBAND", "ConnectionNotInfiniband" },
- { NM_INFINIBAND_ERROR_CONNECTION_INVALID, "NM_INFINIBAND_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_INFINIBAND_ERROR_CONNECTION_INCOMPATIBLE, "NM_INFINIBAND_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_UNMANAGED_NONE, "NM_UNMANAGED_NONE", "nm-unmanaged-none" },
+ { NM_UNMANAGED_DEFAULT, "NM_UNMANAGED_DEFAULT", "nm-unmanaged-default" },
+ { NM_UNMANAGED_INTERNAL, "NM_UNMANAGED_INTERNAL", "nm-unmanaged-internal" },
+ { NM_UNMANAGED_USER, "NM_UNMANAGED_USER", "nm-unmanaged-user" },
+ { __NM_UNMANAGED_LAST, "__NM_UNMANAGED_LAST", "--nm-unmanaged-last" },
+ { NM_UNMANAGED_LAST, "NM_UNMANAGED_LAST", "nm-unmanaged-last" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMInfinibandError"), values);
+ g_enum_register_static (g_intern_static_string ("NMUnmanagedFlags"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -161,21 +160,20 @@ nm_bond_error_get_type (void)
return g_define_type_id__volatile;
}
GType
-nm_session_monitor_error_get_type (void)
+nm_bridge_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_SESSION_MONITOR_ERROR_IO_ERROR, "NM_SESSION_MONITOR_ERROR_IO_ERROR", "IOError" },
- { NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE, "NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE", "MalformedDatabase" },
- { NM_SESSION_MONITOR_ERROR_UNKNOWN_USER, "NM_SESSION_MONITOR_ERROR_UNKNOWN_USER", "UnknownUser" },
- { NM_SESSION_MONITOR_ERROR_NO_DATABASE, "NM_SESSION_MONITOR_ERROR_NO_DATABASE", "NoDatabase" },
+ { NM_BRIDGE_ERROR_CONNECTION_NOT_BRIDGE, "NM_BRIDGE_ERROR_CONNECTION_NOT_BRIDGE", "ConnectionNotBridge" },
+ { NM_BRIDGE_ERROR_CONNECTION_INVALID, "NM_BRIDGE_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_BRIDGE_ERROR_CONNECTION_INCOMPATIBLE, "NM_BRIDGE_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMSessionMonitorError"), values);
+ g_enum_register_static (g_intern_static_string ("NMBridgeError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -202,830 +200,838 @@ nm_ethernet_error_get_type (void)
return g_define_type_id__volatile;
}
GType
-nm_config_error_get_type (void)
+nm_device_generic_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_CONFIG_ERROR_NO_MEMORY, "NM_CONFIG_ERROR_NO_MEMORY", "NoMemory" },
+ { NM_DEVICE_GENERIC_ERROR_CONNECTION_NOT_GENERIC, "NM_DEVICE_GENERIC_ERROR_CONNECTION_NOT_GENERIC", "ConnectionNotGeneric" },
+ { NM_DEVICE_GENERIC_ERROR_CONNECTION_INVALID, "NM_DEVICE_GENERIC_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_DEVICE_GENERIC_ERROR_CONNECTION_INCOMPATIBLE, "NM_DEVICE_GENERIC_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMConfigError"), values);
+ g_enum_register_static (g_intern_static_string ("NMDeviceGenericError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_rf_kill_state_get_type (void)
+nm_infiniband_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { RFKILL_UNBLOCKED, "RFKILL_UNBLOCKED", "unblocked" },
- { RFKILL_SOFT_BLOCKED, "RFKILL_SOFT_BLOCKED", "soft-blocked" },
- { RFKILL_HARD_BLOCKED, "RFKILL_HARD_BLOCKED", "hard-blocked" },
+ { NM_INFINIBAND_ERROR_CONNECTION_NOT_INFINIBAND, "NM_INFINIBAND_ERROR_CONNECTION_NOT_INFINIBAND", "ConnectionNotInfiniband" },
+ { NM_INFINIBAND_ERROR_CONNECTION_INVALID, "NM_INFINIBAND_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_INFINIBAND_ERROR_CONNECTION_INCOMPATIBLE, "NM_INFINIBAND_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("RfKillState"), values);
+ g_enum_register_static (g_intern_static_string ("NMInfinibandError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_rf_kill_type_get_type (void)
+nm_team_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { RFKILL_TYPE_WLAN, "RFKILL_TYPE_WLAN", "wlan" },
- { RFKILL_TYPE_WWAN, "RFKILL_TYPE_WWAN", "wwan" },
- { RFKILL_TYPE_WIMAX, "RFKILL_TYPE_WIMAX", "wimax" },
- { RFKILL_TYPE_UNKNOWN, "RFKILL_TYPE_UNKNOWN", "unknown" },
- { RFKILL_TYPE_MAX, "RFKILL_TYPE_MAX", "max" },
+ { NM_TEAM_ERROR_CONNECTION_NOT_TEAM, "NM_TEAM_ERROR_CONNECTION_NOT_TEAM", "ConnectionNotTeam" },
+ { NM_TEAM_ERROR_CONNECTION_INVALID, "NM_TEAM_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_TEAM_ERROR_CONNECTION_INCOMPATIBLE, "NM_TEAM_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("RfKillType"), values);
+ g_enum_register_static (g_intern_static_string ("NMTeamError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_dispatcher_action_get_type (void)
+nm_vlan_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { DISPATCHER_ACTION_HOSTNAME, "DISPATCHER_ACTION_HOSTNAME", "hostname" },
- { DISPATCHER_ACTION_UP, "DISPATCHER_ACTION_UP", "up" },
- { DISPATCHER_ACTION_PRE_DOWN, "DISPATCHER_ACTION_PRE_DOWN", "pre-down" },
- { DISPATCHER_ACTION_DOWN, "DISPATCHER_ACTION_DOWN", "down" },
- { DISPATCHER_ACTION_VPN_UP, "DISPATCHER_ACTION_VPN_UP", "vpn-up" },
- { DISPATCHER_ACTION_VPN_PRE_DOWN, "DISPATCHER_ACTION_VPN_PRE_DOWN", "vpn-pre-down" },
- { DISPATCHER_ACTION_VPN_DOWN, "DISPATCHER_ACTION_VPN_DOWN", "vpn-down" },
- { DISPATCHER_ACTION_DHCP4_CHANGE, "DISPATCHER_ACTION_DHCP4_CHANGE", "dhcp4-change" },
- { DISPATCHER_ACTION_DHCP6_CHANGE, "DISPATCHER_ACTION_DHCP6_CHANGE", "dhcp6-change" },
+ { NM_VLAN_ERROR_CONNECTION_NOT_VLAN, "NM_VLAN_ERROR_CONNECTION_NOT_VLAN", "ConnectionNotVlan" },
+ { NM_VLAN_ERROR_CONNECTION_INVALID, "NM_VLAN_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_VLAN_ERROR_CONNECTION_INCOMPATIBLE, "NM_VLAN_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("DispatcherAction"), values);
+ g_enum_register_static (g_intern_static_string ("NMVlanError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_ip4_config_compare_flags_get_type (void)
+nm_dhcp_state_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_IP4_COMPARE_FLAG_NONE, "NM_IP4_COMPARE_FLAG_NONE", "none" },
- { NM_IP4_COMPARE_FLAG_ADDRESSES, "NM_IP4_COMPARE_FLAG_ADDRESSES", "addresses" },
- { NM_IP4_COMPARE_FLAG_PTP_ADDRESS, "NM_IP4_COMPARE_FLAG_PTP_ADDRESS", "ptp-address" },
- { NM_IP4_COMPARE_FLAG_NAMESERVERS, "NM_IP4_COMPARE_FLAG_NAMESERVERS", "nameservers" },
- { NM_IP4_COMPARE_FLAG_ROUTES, "NM_IP4_COMPARE_FLAG_ROUTES", "routes" },
- { NM_IP4_COMPARE_FLAG_DOMAINS, "NM_IP4_COMPARE_FLAG_DOMAINS", "domains" },
- { NM_IP4_COMPARE_FLAG_SEARCHES, "NM_IP4_COMPARE_FLAG_SEARCHES", "searches" },
- { NM_IP4_COMPARE_FLAG_MTU, "NM_IP4_COMPARE_FLAG_MTU", "mtu" },
- { NM_IP4_COMPARE_FLAG_MSS, "NM_IP4_COMPARE_FLAG_MSS", "mss" },
- { NM_IP4_COMPARE_FLAG_WINS_SERVERS, "NM_IP4_COMPARE_FLAG_WINS_SERVERS", "wins-servers" },
- { NM_IP4_COMPARE_FLAG_NIS_SERVERS, "NM_IP4_COMPARE_FLAG_NIS_SERVERS", "nis-servers" },
- { NM_IP4_COMPARE_FLAG_NIS_DOMAIN, "NM_IP4_COMPARE_FLAG_NIS_DOMAIN", "nis-domain" },
- { NM_IP4_COMPARE_FLAG_ALL, "NM_IP4_COMPARE_FLAG_ALL", "all" },
+ { DHC_NBI, "DHC_NBI", "nbi" },
+ { DHC_PREINIT, "DHC_PREINIT", "preinit" },
+ { DHC_PREINIT6, "DHC_PREINIT6", "preinit6" },
+ { DHC_BOUND4, "DHC_BOUND4", "bound4" },
+ { DHC_BOUND6, "DHC_BOUND6", "bound6" },
+ { DHC_IPV4LL, "DHC_IPV4LL", "ipv4ll" },
+ { DHC_RENEW4, "DHC_RENEW4", "renew4" },
+ { DHC_RENEW6, "DHC_RENEW6", "renew6" },
+ { DHC_REBOOT, "DHC_REBOOT", "reboot" },
+ { DHC_REBIND4, "DHC_REBIND4", "rebind4" },
+ { DHC_REBIND6, "DHC_REBIND6", "rebind6" },
+ { DHC_DEPREF6, "DHC_DEPREF6", "depref6" },
+ { DHC_STOP, "DHC_STOP", "stop" },
+ { DHC_STOP6, "DHC_STOP6", "stop6" },
+ { DHC_MEDIUM, "DHC_MEDIUM", "medium" },
+ { DHC_TIMEOUT, "DHC_TIMEOUT", "timeout" },
+ { DHC_FAIL, "DHC_FAIL", "fail" },
+ { DHC_EXPIRE, "DHC_EXPIRE", "expire" },
+ { DHC_EXPIRE6, "DHC_EXPIRE6", "expire6" },
+ { DHC_RELEASE, "DHC_RELEASE", "release" },
+ { DHC_RELEASE6, "DHC_RELEASE6", "release6" },
+ { DHC_START, "DHC_START", "start" },
+ { DHC_ABEND, "DHC_ABEND", "abend" },
+ { DHC_END, "DHC_END", "end" },
+ { DHC_END_OPTIONS, "DHC_END_OPTIONS", "end-options" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMIP4ConfigCompareFlags"), values);
+ g_enum_register_static (g_intern_static_string ("NMDHCPState"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_manager_error_get_type (void)
+nm_dhcp_manager_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_MANAGER_ERROR_UNKNOWN_CONNECTION, "NM_MANAGER_ERROR_UNKNOWN_CONNECTION", "UnknownConnection" },
- { NM_MANAGER_ERROR_UNKNOWN_DEVICE, "NM_MANAGER_ERROR_UNKNOWN_DEVICE", "UnknownDevice" },
- { NM_MANAGER_ERROR_UNMANAGED_DEVICE, "NM_MANAGER_ERROR_UNMANAGED_DEVICE", "UnmanagedDevice" },
- { NM_MANAGER_ERROR_SYSTEM_CONNECTION, "NM_MANAGER_ERROR_SYSTEM_CONNECTION", "SystemConnection" },
- { NM_MANAGER_ERROR_PERMISSION_DENIED, "NM_MANAGER_ERROR_PERMISSION_DENIED", "PermissionDenied" },
- { NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, "NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE", "ConnectionNotActive" },
- { NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE, "NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE", "AlreadyAsleepOrAwake" },
- { NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, "NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED", "AlreadyEnabledOrDisabled" },
- { NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE, "NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE", "UnsupportedConnectionType" },
- { NM_MANAGER_ERROR_DEPENDENCY_FAILED, "NM_MANAGER_ERROR_DEPENDENCY_FAILED", "DependencyFailed" },
- { NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED, "NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED", "AutoconnectNotAllowed" },
+ { NM_DHCP_MANAGER_ERROR_BAD_CLIENT, "NM_DHCP_MANAGER_ERROR_BAD_CLIENT", "BadClient" },
+ { NM_DHCP_MANAGER_ERROR_INTERNAL, "NM_DHCP_MANAGER_ERROR_INTERNAL", "InternalError" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMManagerError"), values);
+ g_enum_register_static (g_intern_static_string ("NMDHCPManagerError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_device_error_get_type (void)
+nm_dns_manager_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_DEVICE_ERROR_CONNECTION_ACTIVATING, "NM_DEVICE_ERROR_CONNECTION_ACTIVATING", "ConnectionActivating" },
- { NM_DEVICE_ERROR_CONNECTION_INVALID, "NM_DEVICE_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_DEVICE_ERROR_NOT_ACTIVE, "NM_DEVICE_ERROR_NOT_ACTIVE", "NotActive" },
+ { NM_DNS_MANAGER_ERROR_SYSTEM, "NM_DNS_MANAGER_ERROR_SYSTEM", "system" },
+ { NM_DNS_MANAGER_ERROR_INVALID_NAMESERVER, "NM_DNS_MANAGER_ERROR_INVALID_NAMESERVER", "invalid-nameserver" },
+ { NM_DNS_MANAGER_ERROR_INVALID_HOST, "NM_DNS_MANAGER_ERROR_INVALID_HOST", "invalid-host" },
+ { NM_DNS_MANAGER_ERROR_INVALID_ID, "NM_DNS_MANAGER_ERROR_INVALID_ID", "invalid-id" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMDeviceError"), values);
+ g_enum_register_static (g_intern_static_string ("NMDnsManagerError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_ip6_config_compare_flags_get_type (void)
+nm_dns_ip_config_type_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_IP6_COMPARE_FLAG_NONE, "NM_IP6_COMPARE_FLAG_NONE", "none" },
- { NM_IP6_COMPARE_FLAG_ADDRESSES, "NM_IP6_COMPARE_FLAG_ADDRESSES", "addresses" },
- { NM_IP6_COMPARE_FLAG_PTP_ADDRESS, "NM_IP6_COMPARE_FLAG_PTP_ADDRESS", "ptp-address" },
- { NM_IP6_COMPARE_FLAG_NAMESERVERS, "NM_IP6_COMPARE_FLAG_NAMESERVERS", "nameservers" },
- { NM_IP6_COMPARE_FLAG_ROUTES, "NM_IP6_COMPARE_FLAG_ROUTES", "routes" },
- { NM_IP6_COMPARE_FLAG_DOMAINS, "NM_IP6_COMPARE_FLAG_DOMAINS", "domains" },
- { NM_IP6_COMPARE_FLAG_SEARCHES, "NM_IP6_COMPARE_FLAG_SEARCHES", "searches" },
- { NM_IP6_COMPARE_FLAG_MSS, "NM_IP6_COMPARE_FLAG_MSS", "mss" },
- { NM_IP6_COMPARE_FLAG_ALL, "NM_IP6_COMPARE_FLAG_ALL", "all" },
+ { NM_DNS_IP_CONFIG_TYPE_DEFAULT, "NM_DNS_IP_CONFIG_TYPE_DEFAULT", "default" },
+ { NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE, "NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE", "best-device" },
+ { NM_DNS_IP_CONFIG_TYPE_VPN, "NM_DNS_IP_CONFIG_TYPE_VPN", "vpn" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMIP6ConfigCompareFlags"), values);
+ g_enum_register_static (g_intern_static_string ("NMDnsIPConfigType"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_auth_call_result_get_type (void)
+nm_dns_manager_resolv_conf_mode_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_AUTH_CALL_RESULT_UNKNOWN, "NM_AUTH_CALL_RESULT_UNKNOWN", "unknown" },
- { NM_AUTH_CALL_RESULT_YES, "NM_AUTH_CALL_RESULT_YES", "yes" },
- { NM_AUTH_CALL_RESULT_AUTH, "NM_AUTH_CALL_RESULT_AUTH", "auth" },
- { NM_AUTH_CALL_RESULT_NO, "NM_AUTH_CALL_RESULT_NO", "no" },
+ { NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED, "NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED", "unmanaged" },
+ { NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT, "NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT", "explicit" },
+ { NM_DNS_MANAGER_RESOLV_CONF_PROXY, "NM_DNS_MANAGER_RESOLV_CONF_PROXY", "proxy" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMAuthCallResult"), values);
+ g_enum_register_static (g_intern_static_string ("NMDnsManagerResolvConfMode"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_bridge_error_get_type (void)
+nm_dns_masq_status_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_BRIDGE_ERROR_CONNECTION_NOT_BRIDGE, "NM_BRIDGE_ERROR_CONNECTION_NOT_BRIDGE", "ConnectionNotBridge" },
- { NM_BRIDGE_ERROR_CONNECTION_INVALID, "NM_BRIDGE_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_BRIDGE_ERROR_CONNECTION_INCOMPATIBLE, "NM_BRIDGE_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_DNSMASQ_STATUS_UNKNOWN, "NM_DNSMASQ_STATUS_UNKNOWN", "unknown" },
+ { NM_DNSMASQ_STATUS_DEAD, "NM_DNSMASQ_STATUS_DEAD", "dead" },
+ { NM_DNSMASQ_STATUS_RUNNING, "NM_DNSMASQ_STATUS_RUNNING", "running" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMBridgeError"), values);
+ g_enum_register_static (g_intern_static_string ("NMDnsMasqStatus"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_wifi_error_get_type (void)
+nm_logging_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_WIFI_ERROR_CONNECTION_NOT_WIRELESS, "NM_WIFI_ERROR_CONNECTION_NOT_WIRELESS", "ConnectionNotWireless" },
- { NM_WIFI_ERROR_CONNECTION_INVALID, "NM_WIFI_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE, "NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
- { NM_WIFI_ERROR_ACCESS_POINT_NOT_FOUND, "NM_WIFI_ERROR_ACCESS_POINT_NOT_FOUND", "AccessPointNotFound" },
- { NM_WIFI_ERROR_SCAN_NOT_ALLOWED, "NM_WIFI_ERROR_SCAN_NOT_ALLOWED", "ScanNotAllowed" },
- { NM_WIFI_ERROR_AP_MODE_UNSUPPORTED, "NM_WIFI_ERROR_AP_MODE_UNSUPPORTED", "ApModeUnsupported" },
- { NM_WIFI_ERROR_ADHOC_MODE_UNSUPPORTED, "NM_WIFI_ERROR_ADHOC_MODE_UNSUPPORTED", "AdhocModeUnsupported" },
+ { NM_LOGGING_ERROR_UNKNOWN_LEVEL, "NM_LOGGING_ERROR_UNKNOWN_LEVEL", "UnknownLevel" },
+ { NM_LOGGING_ERROR_UNKNOWN_DOMAIN, "NM_LOGGING_ERROR_UNKNOWN_DOMAIN", "UnknownDomain" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMWifiError"), values);
+ g_enum_register_static (g_intern_static_string ("NMLoggingError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_nm_nl_prop_get_type (void)
+nm_platform_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NMNL_PROP_INVALID, "NMNL_PROP_INVALID", "invalid" },
- { NMNL_PROP_PROT, "NMNL_PROP_PROT", "prot" },
- { NMNL_PROP_SCOPE, "NMNL_PROP_SCOPE", "scope" },
- { NMNL_PROP_TABLE, "NMNL_PROP_TABLE", "table" },
- { NMNL_PROP_PRIO, "NMNL_PROP_PRIO", "prio" },
+ { NM_PLATFORM_ERROR_NONE, "NM_PLATFORM_ERROR_NONE", "none" },
+ { NM_PLATFORM_ERROR_NOT_FOUND, "NM_PLATFORM_ERROR_NOT_FOUND", "not-found" },
+ { NM_PLATFORM_ERROR_EXISTS, "NM_PLATFORM_ERROR_EXISTS", "exists" },
+ { NM_PLATFORM_ERROR_WRONG_TYPE, "NM_PLATFORM_ERROR_WRONG_TYPE", "wrong-type" },
+ { NM_PLATFORM_ERROR_NOT_SLAVE, "NM_PLATFORM_ERROR_NOT_SLAVE", "not-slave" },
+ { NM_PLATFORM_ERROR_NO_FIRMWARE, "NM_PLATFORM_ERROR_NO_FIRMWARE", "no-firmware" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NmNlProp"), values);
+ g_enum_register_static (g_intern_static_string ("NMPlatformError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_vlan_error_get_type (void)
+nm_platform_reason_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_VLAN_ERROR_CONNECTION_NOT_VLAN, "NM_VLAN_ERROR_CONNECTION_NOT_VLAN", "ConnectionNotVlan" },
- { NM_VLAN_ERROR_CONNECTION_INVALID, "NM_VLAN_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_VLAN_ERROR_CONNECTION_INCOMPATIBLE, "NM_VLAN_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_PLATFORM_REASON_NONE, "NM_PLATFORM_REASON_NONE", "none" },
+ { NM_PLATFORM_REASON_INTERNAL, "NM_PLATFORM_REASON_INTERNAL", "internal" },
+ { NM_PLATFORM_REASON_EXTERNAL, "NM_PLATFORM_REASON_EXTERNAL", "external" },
+ { NM_PLATFORM_REASON_CACHE_CHECK, "NM_PLATFORM_REASON_CACHE_CHECK", "cache-check" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMVlanError"), values);
+ g_enum_register_static (g_intern_static_string ("NMPlatformReason"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_netlink_monitor_error_get_type (void)
+nm_link_type_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_NETLINK_MONITOR_ERROR_GENERIC, "NM_NETLINK_MONITOR_ERROR_GENERIC", "generic" },
- { NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE, "NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE", "netlink-alloc-handle" },
- { NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT, "NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT", "netlink-connect" },
- { NM_NETLINK_MONITOR_ERROR_NETLINK_JOIN_GROUP, "NM_NETLINK_MONITOR_ERROR_NETLINK_JOIN_GROUP", "netlink-join-group" },
- { NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_LINK_CACHE, "NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_LINK_CACHE", "netlink-alloc-link-cache" },
- { NM_NETLINK_MONITOR_ERROR_PROCESSING_MESSAGE, "NM_NETLINK_MONITOR_ERROR_PROCESSING_MESSAGE", "processing-message" },
- { NM_NETLINK_MONITOR_ERROR_BAD_ALLOC, "NM_NETLINK_MONITOR_ERROR_BAD_ALLOC", "bad-alloc" },
- { NM_NETLINK_MONITOR_ERROR_WAITING_FOR_SOCKET_DATA, "NM_NETLINK_MONITOR_ERROR_WAITING_FOR_SOCKET_DATA", "waiting-for-socket-data" },
- { NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE, "NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE", "link-cache-update" },
+ { NM_LINK_TYPE_NONE, "NM_LINK_TYPE_NONE", "none" },
+ { NM_LINK_TYPE_UNKNOWN, "NM_LINK_TYPE_UNKNOWN", "unknown" },
+ { NM_LINK_TYPE_ETHERNET, "NM_LINK_TYPE_ETHERNET", "ethernet" },
+ { NM_LINK_TYPE_INFINIBAND, "NM_LINK_TYPE_INFINIBAND", "infiniband" },
+ { NM_LINK_TYPE_OLPC_MESH, "NM_LINK_TYPE_OLPC_MESH", "olpc-mesh" },
+ { NM_LINK_TYPE_WIFI, "NM_LINK_TYPE_WIFI", "wifi" },
+ { NM_LINK_TYPE_WWAN_ETHERNET, "NM_LINK_TYPE_WWAN_ETHERNET", "wwan-ethernet" },
+ { NM_LINK_TYPE_WIMAX, "NM_LINK_TYPE_WIMAX", "wimax" },
+ { NM_LINK_TYPE_DUMMY, "NM_LINK_TYPE_DUMMY", "dummy" },
+ { NM_LINK_TYPE_GRE, "NM_LINK_TYPE_GRE", "gre" },
+ { NM_LINK_TYPE_GRETAP, "NM_LINK_TYPE_GRETAP", "gretap" },
+ { NM_LINK_TYPE_IFB, "NM_LINK_TYPE_IFB", "ifb" },
+ { NM_LINK_TYPE_LOOPBACK, "NM_LINK_TYPE_LOOPBACK", "loopback" },
+ { NM_LINK_TYPE_MACVLAN, "NM_LINK_TYPE_MACVLAN", "macvlan" },
+ { NM_LINK_TYPE_MACVTAP, "NM_LINK_TYPE_MACVTAP", "macvtap" },
+ { NM_LINK_TYPE_OPENVSWITCH, "NM_LINK_TYPE_OPENVSWITCH", "openvswitch" },
+ { NM_LINK_TYPE_TAP, "NM_LINK_TYPE_TAP", "tap" },
+ { NM_LINK_TYPE_TUN, "NM_LINK_TYPE_TUN", "tun" },
+ { NM_LINK_TYPE_VETH, "NM_LINK_TYPE_VETH", "veth" },
+ { NM_LINK_TYPE_VLAN, "NM_LINK_TYPE_VLAN", "vlan" },
+ { NM_LINK_TYPE_VXLAN, "NM_LINK_TYPE_VXLAN", "vxlan" },
+ { NM_LINK_TYPE_BRIDGE, "NM_LINK_TYPE_BRIDGE", "bridge" },
+ { NM_LINK_TYPE_BOND, "NM_LINK_TYPE_BOND", "bond" },
+ { NM_LINK_TYPE_TEAM, "NM_LINK_TYPE_TEAM", "team" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMNetlinkMonitorError"), values);
+ g_enum_register_static (g_intern_static_string ("NMLinkType"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_olpc_mesh_error_get_type (void)
+nm_platform_signal_change_type_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_OLPC_MESH_ERROR_CONNECTION_NOT_MESH, "NM_OLPC_MESH_ERROR_CONNECTION_NOT_MESH", "ConnectionNotMesh" },
- { NM_OLPC_MESH_ERROR_CONNECTION_INVALID, "NM_OLPC_MESH_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_OLPC_MESH_ERROR_CONNECTION_INCOMPATIBLE, "NM_OLPC_MESH_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_PLATFORM_SIGNAL_ADDED, "NM_PLATFORM_SIGNAL_ADDED", "added" },
+ { NM_PLATFORM_SIGNAL_CHANGED, "NM_PLATFORM_SIGNAL_CHANGED", "changed" },
+ { NM_PLATFORM_SIGNAL_REMOVED, "NM_PLATFORM_SIGNAL_REMOVED", "removed" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMOlpcMeshError"), values);
+ g_enum_register_static (g_intern_static_string ("NMPlatformSignalChangeType"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_adsl_error_get_type (void)
+nm_platform_source_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_ADSL_ERROR_CONNECTION_NOT_ADSL, "NM_ADSL_ERROR_CONNECTION_NOT_ADSL", "ConnectionNotAdsl" },
- { NM_ADSL_ERROR_CONNECTION_INVALID, "NM_ADSL_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_ADSL_ERROR_CONNECTION_INCOMPATIBLE, "NM_ADSL_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_PLATFORM_SOURCE_UNKNOWN, "NM_PLATFORM_SOURCE_UNKNOWN", "unknown" },
+ { NM_PLATFORM_SOURCE_KERNEL, "NM_PLATFORM_SOURCE_KERNEL", "kernel" },
+ { NM_PLATFORM_SOURCE_SHARED, "NM_PLATFORM_SOURCE_SHARED", "shared" },
+ { NM_PLATFORM_SOURCE_IP4LL, "NM_PLATFORM_SOURCE_IP4LL", "ip4ll" },
+ { NM_PLATFORM_SOURCE_PPP, "NM_PLATFORM_SOURCE_PPP", "ppp" },
+ { NM_PLATFORM_SOURCE_WWAN, "NM_PLATFORM_SOURCE_WWAN", "wwan" },
+ { NM_PLATFORM_SOURCE_VPN, "NM_PLATFORM_SOURCE_VPN", "vpn" },
+ { NM_PLATFORM_SOURCE_DHCP, "NM_PLATFORM_SOURCE_DHCP", "dhcp" },
+ { NM_PLATFORM_SOURCE_RDISC, "NM_PLATFORM_SOURCE_RDISC", "rdisc" },
+ { NM_PLATFORM_SOURCE_USER, "NM_PLATFORM_SOURCE_USER", "user" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMAdslError"), values);
+ g_enum_register_static (g_intern_static_string ("NMPlatformSource"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_logging_error_get_type (void)
+nm_rdisc_dhcp_level_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_LOGGING_ERROR_UNKNOWN_LEVEL, "NM_LOGGING_ERROR_UNKNOWN_LEVEL", "UnknownLevel" },
- { NM_LOGGING_ERROR_UNKNOWN_DOMAIN, "NM_LOGGING_ERROR_UNKNOWN_DOMAIN", "UnknownDomain" },
+ { NM_RDISC_DHCP_LEVEL_UNKNOWN, "NM_RDISC_DHCP_LEVEL_UNKNOWN", "unknown" },
+ { NM_RDISC_DHCP_LEVEL_NONE, "NM_RDISC_DHCP_LEVEL_NONE", "none" },
+ { NM_RDISC_DHCP_LEVEL_OTHERCONF, "NM_RDISC_DHCP_LEVEL_OTHERCONF", "otherconf" },
+ { NM_RDISC_DHCP_LEVEL_MANAGED, "NM_RDISC_DHCP_LEVEL_MANAGED", "managed" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMLoggingError"), values);
+ g_enum_register_static (g_intern_static_string ("NMRDiscDHCPLevel"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_dns_manager_error_get_type (void)
+nm_rdisc_preference_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_DNS_MANAGER_ERROR_SYSTEM, "NM_DNS_MANAGER_ERROR_SYSTEM", "system" },
- { NM_DNS_MANAGER_ERROR_INVALID_NAMESERVER, "NM_DNS_MANAGER_ERROR_INVALID_NAMESERVER", "invalid-nameserver" },
- { NM_DNS_MANAGER_ERROR_INVALID_HOST, "NM_DNS_MANAGER_ERROR_INVALID_HOST", "invalid-host" },
- { NM_DNS_MANAGER_ERROR_INVALID_ID, "NM_DNS_MANAGER_ERROR_INVALID_ID", "invalid-id" },
+ { NM_RDISC_PREFERENCE_INVALID, "NM_RDISC_PREFERENCE_INVALID", "invalid" },
+ { NM_RDISC_PREFERENCE_LOW, "NM_RDISC_PREFERENCE_LOW", "low" },
+ { NM_RDISC_PREFERENCE_MEDIUM, "NM_RDISC_PREFERENCE_MEDIUM", "medium" },
+ { NM_RDISC_PREFERENCE_HIGH, "NM_RDISC_PREFERENCE_HIGH", "high" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMDnsManagerError"), values);
+ g_enum_register_static (g_intern_static_string ("NMRDiscPreference"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_dns_ip_config_type_get_type (void)
+nm_rdisc_config_map_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
- static const GEnumValue values[] = {
- { NM_DNS_IP_CONFIG_TYPE_DEFAULT, "NM_DNS_IP_CONFIG_TYPE_DEFAULT", "default" },
- { NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE, "NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE", "best-device" },
- { NM_DNS_IP_CONFIG_TYPE_VPN, "NM_DNS_IP_CONFIG_TYPE_VPN", "vpn" },
+ static const GFlagsValue values[] = {
+ { NM_RDISC_CONFIG_DHCP_LEVEL, "NM_RDISC_CONFIG_DHCP_LEVEL", "dhcp-level" },
+ { NM_RDISC_CONFIG_GATEWAYS, "NM_RDISC_CONFIG_GATEWAYS", "gateways" },
+ { NM_RDISC_CONFIG_ADDRESSES, "NM_RDISC_CONFIG_ADDRESSES", "addresses" },
+ { NM_RDISC_CONFIG_ROUTES, "NM_RDISC_CONFIG_ROUTES", "routes" },
+ { NM_RDISC_CONFIG_DNS_SERVERS, "NM_RDISC_CONFIG_DNS_SERVERS", "dns-servers" },
+ { NM_RDISC_CONFIG_DNS_DOMAINS, "NM_RDISC_CONFIG_DNS_DOMAINS", "dns-domains" },
+ { NM_RDISC_CONFIG_HOP_LIMIT, "NM_RDISC_CONFIG_HOP_LIMIT", "hop-limit" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMDnsIPConfigType"), values);
+ g_flags_register_static (g_intern_static_string ("NMRDiscConfigMap"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_vpn_manager_error_get_type (void)
+nm_ppp_status_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE, "NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE", "BaseDeviceNotActive" },
- { NM_VPN_MANAGER_ERROR_CONNECTION_INVALID, "NM_VPN_MANAGER_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_VPN_MANAGER_ERROR_SERVICE_INVALID, "NM_VPN_MANAGER_ERROR_SERVICE_INVALID", "ServiceInvalid" },
- { NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED, "NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED", "ServiceStartFailed" },
+ { NM_PPP_STATUS_UNKNOWN, "NM_PPP_STATUS_UNKNOWN", "unknown" },
+ { NM_PPP_STATUS_DEAD, "NM_PPP_STATUS_DEAD", "dead" },
+ { NM_PPP_STATUS_INITIALIZE, "NM_PPP_STATUS_INITIALIZE", "initialize" },
+ { NM_PPP_STATUS_SERIALCONN, "NM_PPP_STATUS_SERIALCONN", "serialconn" },
+ { NM_PPP_STATUS_DORMANT, "NM_PPP_STATUS_DORMANT", "dormant" },
+ { NM_PPP_STATUS_ESTABLISH, "NM_PPP_STATUS_ESTABLISH", "establish" },
+ { NM_PPP_STATUS_AUTHENTICATE, "NM_PPP_STATUS_AUTHENTICATE", "authenticate" },
+ { NM_PPP_STATUS_CALLBACK, "NM_PPP_STATUS_CALLBACK", "callback" },
+ { NM_PPP_STATUS_NETWORK, "NM_PPP_STATUS_NETWORK", "network" },
+ { NM_PPP_STATUS_RUNNING, "NM_PPP_STATUS_RUNNING", "running" },
+ { NM_PPP_STATUS_TERMINATE, "NM_PPP_STATUS_TERMINATE", "terminate" },
+ { NM_PPP_STATUS_DISCONNECT, "NM_PPP_STATUS_DISCONNECT", "disconnect" },
+ { NM_PPP_STATUS_HOLDOFF, "NM_PPP_STATUS_HOLDOFF", "holdoff" },
+ { NM_PPP_STATUS_MASTER, "NM_PPP_STATUS_MASTER", "master" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMVPNManagerError"), values);
+ g_enum_register_static (g_intern_static_string ("NMPPPStatus"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_dhcp_state_get_type (void)
+nm_agent_manager_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { DHC_NBI, "DHC_NBI", "nbi" },
- { DHC_PREINIT, "DHC_PREINIT", "preinit" },
- { DHC_PREINIT6, "DHC_PREINIT6", "preinit6" },
- { DHC_BOUND4, "DHC_BOUND4", "bound4" },
- { DHC_BOUND6, "DHC_BOUND6", "bound6" },
- { DHC_IPV4LL, "DHC_IPV4LL", "ipv4ll" },
- { DHC_RENEW4, "DHC_RENEW4", "renew4" },
- { DHC_RENEW6, "DHC_RENEW6", "renew6" },
- { DHC_REBOOT, "DHC_REBOOT", "reboot" },
- { DHC_REBIND4, "DHC_REBIND4", "rebind4" },
- { DHC_REBIND6, "DHC_REBIND6", "rebind6" },
- { DHC_DEPREF6, "DHC_DEPREF6", "depref6" },
- { DHC_STOP, "DHC_STOP", "stop" },
- { DHC_STOP6, "DHC_STOP6", "stop6" },
- { DHC_MEDIUM, "DHC_MEDIUM", "medium" },
- { DHC_TIMEOUT, "DHC_TIMEOUT", "timeout" },
- { DHC_FAIL, "DHC_FAIL", "fail" },
- { DHC_EXPIRE, "DHC_EXPIRE", "expire" },
- { DHC_EXPIRE6, "DHC_EXPIRE6", "expire6" },
- { DHC_RELEASE, "DHC_RELEASE", "release" },
- { DHC_RELEASE6, "DHC_RELEASE6", "release6" },
- { DHC_START, "DHC_START", "start" },
- { DHC_ABEND, "DHC_ABEND", "abend" },
- { DHC_END, "DHC_END", "end" },
- { DHC_END_OPTIONS, "DHC_END_OPTIONS", "end-options" },
+ { NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN, "NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN", "SenderUnknown" },
+ { NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED, "NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED", "PermissionDenied" },
+ { NM_AGENT_MANAGER_ERROR_SESSION_NOT_FOUND, "NM_AGENT_MANAGER_ERROR_SESSION_NOT_FOUND", "SessionNotFound" },
+ { NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER, "NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER", "InvalidIdentifier" },
+ { NM_AGENT_MANAGER_ERROR_NOT_REGISTERED, "NM_AGENT_MANAGER_ERROR_NOT_REGISTERED", "NotRegistered" },
+ { NM_AGENT_MANAGER_ERROR_INTERNAL_ERROR, "NM_AGENT_MANAGER_ERROR_INTERNAL_ERROR", "InternalError" },
+ { NM_AGENT_MANAGER_ERROR_NO_SECRETS, "NM_AGENT_MANAGER_ERROR_NO_SECRETS", "NoSecrets" },
+ { NM_AGENT_MANAGER_ERROR_USER_CANCELED, "NM_AGENT_MANAGER_ERROR_USER_CANCELED", "UserCanceled" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMDHCPState"), values);
+ g_enum_register_static (g_intern_static_string ("NMAgentManagerError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_dhcp_manager_error_get_type (void)
+nm_secret_agent_capabilities_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_DHCP_MANAGER_ERROR_BAD_CLIENT, "NM_DHCP_MANAGER_ERROR_BAD_CLIENT", "BadClient" },
- { NM_DHCP_MANAGER_ERROR_INTERNAL, "NM_DHCP_MANAGER_ERROR_INTERNAL", "InternalError" },
+ { NM_SECRET_AGENT_CAPABILITY_NONE, "NM_SECRET_AGENT_CAPABILITY_NONE", "none" },
+ { NM_SECRET_AGENT_CAPABILITY_VPN_HINTS, "NM_SECRET_AGENT_CAPABILITY_VPN_HINTS", "vpn-hints" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMDHCPManagerError"), values);
+ g_enum_register_static (g_intern_static_string ("NMSecretAgentCapabilities"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_opt_type_get_type (void)
+nm_settings_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { TYPE_INVALID, "TYPE_INVALID", "invalid" },
- { TYPE_INT, "TYPE_INT", "int" },
- { TYPE_BYTES, "TYPE_BYTES", "bytes" },
- { TYPE_UTF8, "TYPE_UTF8", "utf8" },
- { TYPE_KEYWORD, "TYPE_KEYWORD", "keyword" },
- { TYPE_STRING, "TYPE_STRING", "string" },
+ { NM_SETTINGS_ERROR_GENERAL, "NM_SETTINGS_ERROR_GENERAL", "GeneralError" },
+ { NM_SETTINGS_ERROR_INVALID_CONNECTION, "NM_SETTINGS_ERROR_INVALID_CONNECTION", "InvalidConnection" },
+ { NM_SETTINGS_ERROR_READ_ONLY_CONNECTION, "NM_SETTINGS_ERROR_READ_ONLY_CONNECTION", "ReadOnlyConnection" },
+ { NM_SETTINGS_ERROR_INTERNAL_ERROR, "NM_SETTINGS_ERROR_INTERNAL_ERROR", "InternalError" },
+ { NM_SETTINGS_ERROR_SECRETS_UNAVAILABLE, "NM_SETTINGS_ERROR_SECRETS_UNAVAILABLE", "SecretsUnavailable" },
+ { NM_SETTINGS_ERROR_SECRETS_REQUEST_CANCELED, "NM_SETTINGS_ERROR_SECRETS_REQUEST_CANCELED", "SecretsRequestCanceled" },
+ { NM_SETTINGS_ERROR_PERMISSION_DENIED, "NM_SETTINGS_ERROR_PERMISSION_DENIED", "PermissionDenied" },
+ { NM_SETTINGS_ERROR_INVALID_SETTING, "NM_SETTINGS_ERROR_INVALID_SETTING", "InvalidSetting" },
+ { NM_SETTINGS_ERROR_ADD_NOT_SUPPORTED, "NM_SETTINGS_ERROR_ADD_NOT_SUPPORTED", "AddNotSupported" },
+ { NM_SETTINGS_ERROR_UPDATE_NOT_SUPPORTED, "NM_SETTINGS_ERROR_UPDATE_NOT_SUPPORTED", "UpdateNotSupported" },
+ { NM_SETTINGS_ERROR_DELETE_NOT_SUPPORTED, "NM_SETTINGS_ERROR_DELETE_NOT_SUPPORTED", "DeleteNotSupported" },
+ { NM_SETTINGS_ERROR_ADD_FAILED, "NM_SETTINGS_ERROR_ADD_FAILED", "AddFailed" },
+ { NM_SETTINGS_ERROR_SAVE_HOSTNAME_NOT_SUPPORTED, "NM_SETTINGS_ERROR_SAVE_HOSTNAME_NOT_SUPPORTED", "SaveHostnameNotSupported" },
+ { NM_SETTINGS_ERROR_SAVE_HOSTNAME_FAILED, "NM_SETTINGS_ERROR_SAVE_HOSTNAME_FAILED", "SaveHostnameFailed" },
+ { NM_SETTINGS_ERROR_HOSTNAME_INVALID, "NM_SETTINGS_ERROR_HOSTNAME_INVALID", "HostnameInvalid" },
+ { NM_SETTINGS_ERROR_UUID_EXISTS, "NM_SETTINGS_ERROR_UUID_EXISTS", "UuidExists" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("OptType"), values);
+ g_enum_register_static (g_intern_static_string ("NMSettingsError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_ap_support_get_type (void)
+nm_system_config_interface_capabilities_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { AP_SUPPORT_UNKNOWN, "AP_SUPPORT_UNKNOWN", "unknown" },
- { AP_SUPPORT_NO, "AP_SUPPORT_NO", "no" },
- { AP_SUPPORT_YES, "AP_SUPPORT_YES", "yes" },
+ { NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE, "NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE", "none" },
+ { NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS, "NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS", "modify-connections" },
+ { NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME, "NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME", "modify-hostname" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("ApSupport"), values);
+ g_enum_register_static (g_intern_static_string ("NMSystemConfigInterfaceCapabilities"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_ppp_status_get_type (void)
+nm_system_config_interface_prop_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_PPP_STATUS_UNKNOWN, "NM_PPP_STATUS_UNKNOWN", "unknown" },
- { NM_PPP_STATUS_DEAD, "NM_PPP_STATUS_DEAD", "dead" },
- { NM_PPP_STATUS_INITIALIZE, "NM_PPP_STATUS_INITIALIZE", "initialize" },
- { NM_PPP_STATUS_SERIALCONN, "NM_PPP_STATUS_SERIALCONN", "serialconn" },
- { NM_PPP_STATUS_DORMANT, "NM_PPP_STATUS_DORMANT", "dormant" },
- { NM_PPP_STATUS_ESTABLISH, "NM_PPP_STATUS_ESTABLISH", "establish" },
- { NM_PPP_STATUS_AUTHENTICATE, "NM_PPP_STATUS_AUTHENTICATE", "authenticate" },
- { NM_PPP_STATUS_CALLBACK, "NM_PPP_STATUS_CALLBACK", "callback" },
- { NM_PPP_STATUS_NETWORK, "NM_PPP_STATUS_NETWORK", "network" },
- { NM_PPP_STATUS_RUNNING, "NM_PPP_STATUS_RUNNING", "running" },
- { NM_PPP_STATUS_TERMINATE, "NM_PPP_STATUS_TERMINATE", "terminate" },
- { NM_PPP_STATUS_DISCONNECT, "NM_PPP_STATUS_DISCONNECT", "disconnect" },
- { NM_PPP_STATUS_HOLDOFF, "NM_PPP_STATUS_HOLDOFF", "holdoff" },
- { NM_PPP_STATUS_MASTER, "NM_PPP_STATUS_MASTER", "master" },
+ { NM_SYSTEM_CONFIG_INTERFACE_PROP_FIRST, "NM_SYSTEM_CONFIG_INTERFACE_PROP_FIRST", "first" },
+ { NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME, "NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME", "name" },
+ { NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO, "NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO", "info" },
+ { NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES, "NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES", "capabilities" },
+ { NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME, "NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME", "hostname" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMPPPStatus"), values);
+ g_enum_register_static (g_intern_static_string ("NMSystemConfigInterfaceProp"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_dns_masq_status_get_type (void)
+nm_ap_support_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_DNSMASQ_STATUS_UNKNOWN, "NM_DNSMASQ_STATUS_UNKNOWN", "unknown" },
- { NM_DNSMASQ_STATUS_DEAD, "NM_DNSMASQ_STATUS_DEAD", "dead" },
- { NM_DNSMASQ_STATUS_RUNNING, "NM_DNSMASQ_STATUS_RUNNING", "running" },
+ { AP_SUPPORT_UNKNOWN, "AP_SUPPORT_UNKNOWN", "unknown" },
+ { AP_SUPPORT_NO, "AP_SUPPORT_NO", "no" },
+ { AP_SUPPORT_YES, "AP_SUPPORT_YES", "yes" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMDnsMasqStatus"), values);
+ g_enum_register_static (g_intern_static_string ("ApSupport"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_modem_state_get_type (void)
+nm_opt_type_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_MODEM_STATE_UNKNOWN, "NM_MODEM_STATE_UNKNOWN", "unknown" },
- { NM_MODEM_STATE_DISABLED, "NM_MODEM_STATE_DISABLED", "disabled" },
- { NM_MODEM_STATE_DISABLING, "NM_MODEM_STATE_DISABLING", "disabling" },
- { NM_MODEM_STATE_ENABLING, "NM_MODEM_STATE_ENABLING", "enabling" },
- { NM_MODEM_STATE_ENABLED, "NM_MODEM_STATE_ENABLED", "enabled" },
- { NM_MODEM_STATE_SEARCHING, "NM_MODEM_STATE_SEARCHING", "searching" },
- { NM_MODEM_STATE_REGISTERED, "NM_MODEM_STATE_REGISTERED", "registered" },
- { NM_MODEM_STATE_DISCONNECTING, "NM_MODEM_STATE_DISCONNECTING", "disconnecting" },
- { NM_MODEM_STATE_CONNECTING, "NM_MODEM_STATE_CONNECTING", "connecting" },
- { NM_MODEM_STATE_CONNECTED, "NM_MODEM_STATE_CONNECTED", "connected" },
- { NM_MODEM_STATE_LAST, "NM_MODEM_STATE_LAST", "last" },
+ { TYPE_INVALID, "TYPE_INVALID", "invalid" },
+ { TYPE_INT, "TYPE_INT", "int" },
+ { TYPE_BYTES, "TYPE_BYTES", "bytes" },
+ { TYPE_UTF8, "TYPE_UTF8", "utf8" },
+ { TYPE_KEYWORD, "TYPE_KEYWORD", "keyword" },
+ { TYPE_STRING, "TYPE_STRING", "string" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMModemState"), values);
+ g_enum_register_static (g_intern_static_string ("OptType"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_cdma_error_get_type (void)
+nm_vpn_manager_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_CDMA_ERROR_CONNECTION_NOT_CDMA, "NM_CDMA_ERROR_CONNECTION_NOT_CDMA", "ConnectionNotCdma" },
- { NM_CDMA_ERROR_CONNECTION_INVALID, "NM_CDMA_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_CDMA_ERROR_CONNECTION_INCOMPATIBLE, "NM_CDMA_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE, "NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE", "BaseDeviceNotActive" },
+ { NM_VPN_MANAGER_ERROR_CONNECTION_INVALID, "NM_VPN_MANAGER_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_VPN_MANAGER_ERROR_SERVICE_INVALID, "NM_VPN_MANAGER_ERROR_SERVICE_INVALID", "ServiceInvalid" },
+ { NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED, "NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED", "ServiceStartFailed" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMCdmaError"), values);
+ g_enum_register_static (g_intern_static_string ("NMVPNManagerError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_modem_broadband_error_get_type (void)
+nm_dcb_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_GSM, "NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_GSM", "ConnectionNotGsm" },
- { NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_CDMA, "NM_MODEM_BROADBAND_ERROR_CONNECTION_NOT_CDMA", "ConnectionNotCdma" },
- { NM_MODEM_BROADBAND_ERROR_CONNECTION_INVALID, "NM_MODEM_BROADBAND_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_MODEM_BROADBAND_ERROR_CONNECTION_INCOMPATIBLE, "NM_MODEM_BROADBAND_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_DCB_ERROR_UNKNOWN, "NM_DCB_ERROR_UNKNOWN", "unknown" },
+ { NM_DCB_ERROR_INTERNAL, "NM_DCB_ERROR_INTERNAL", "internal" },
+ { NM_DCB_ERROR_BAD_CONFIG, "NM_DCB_ERROR_BAD_CONFIG", "bad-config" },
+ { NM_DCB_ERROR_HELPER_NOT_FOUND, "NM_DCB_ERROR_HELPER_NOT_FOUND", "helper-not-found" },
+ { NM_DCB_ERROR_HELPER_FAILED, "NM_DCB_ERROR_HELPER_FAILED", "helper-failed" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMModemBroadbandError"), values);
+ g_enum_register_static (g_intern_static_string ("NMDcbError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_gsm_error_get_type (void)
+nm_dispatcher_action_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_GSM_ERROR_CONNECTION_NOT_GSM, "NM_GSM_ERROR_CONNECTION_NOT_GSM", "ConnectionNotGsm" },
- { NM_GSM_ERROR_CONNECTION_INVALID, "NM_GSM_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_GSM_ERROR_CONNECTION_INCOMPATIBLE, "NM_GSM_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { DISPATCHER_ACTION_HOSTNAME, "DISPATCHER_ACTION_HOSTNAME", "hostname" },
+ { DISPATCHER_ACTION_PRE_UP, "DISPATCHER_ACTION_PRE_UP", "pre-up" },
+ { DISPATCHER_ACTION_UP, "DISPATCHER_ACTION_UP", "up" },
+ { DISPATCHER_ACTION_PRE_DOWN, "DISPATCHER_ACTION_PRE_DOWN", "pre-down" },
+ { DISPATCHER_ACTION_DOWN, "DISPATCHER_ACTION_DOWN", "down" },
+ { DISPATCHER_ACTION_VPN_PRE_UP, "DISPATCHER_ACTION_VPN_PRE_UP", "vpn-pre-up" },
+ { DISPATCHER_ACTION_VPN_UP, "DISPATCHER_ACTION_VPN_UP", "vpn-up" },
+ { DISPATCHER_ACTION_VPN_PRE_DOWN, "DISPATCHER_ACTION_VPN_PRE_DOWN", "vpn-pre-down" },
+ { DISPATCHER_ACTION_VPN_DOWN, "DISPATCHER_ACTION_VPN_DOWN", "vpn-down" },
+ { DISPATCHER_ACTION_DHCP4_CHANGE, "DISPATCHER_ACTION_DHCP4_CHANGE", "dhcp4-change" },
+ { DISPATCHER_ACTION_DHCP6_CHANGE, "DISPATCHER_ACTION_DHCP6_CHANGE", "dhcp6-change" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMGsmError"), values);
+ g_enum_register_static (g_intern_static_string ("DispatcherAction"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_system_config_interface_capabilities_get_type (void)
+nm_auth_call_result_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE, "NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE", "none" },
- { NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS, "NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS", "modify-connections" },
- { NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME, "NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME", "modify-hostname" },
+ { NM_AUTH_CALL_RESULT_UNKNOWN, "NM_AUTH_CALL_RESULT_UNKNOWN", "unknown" },
+ { NM_AUTH_CALL_RESULT_YES, "NM_AUTH_CALL_RESULT_YES", "yes" },
+ { NM_AUTH_CALL_RESULT_AUTH, "NM_AUTH_CALL_RESULT_AUTH", "auth" },
+ { NM_AUTH_CALL_RESULT_NO, "NM_AUTH_CALL_RESULT_NO", "no" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMSystemConfigInterfaceCapabilities"), values);
+ g_enum_register_static (g_intern_static_string ("NMAuthCallResult"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_system_config_interface_prop_get_type (void)
+nm_manager_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_SYSTEM_CONFIG_INTERFACE_PROP_FIRST, "NM_SYSTEM_CONFIG_INTERFACE_PROP_FIRST", "first" },
- { NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME, "NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME", "name" },
- { NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO, "NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO", "info" },
- { NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES, "NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES", "capabilities" },
- { NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME, "NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME", "hostname" },
+ { NM_MANAGER_ERROR_UNKNOWN_CONNECTION, "NM_MANAGER_ERROR_UNKNOWN_CONNECTION", "UnknownConnection" },
+ { NM_MANAGER_ERROR_UNKNOWN_DEVICE, "NM_MANAGER_ERROR_UNKNOWN_DEVICE", "UnknownDevice" },
+ { NM_MANAGER_ERROR_UNMANAGED_DEVICE, "NM_MANAGER_ERROR_UNMANAGED_DEVICE", "UnmanagedDevice" },
+ { NM_MANAGER_ERROR_SYSTEM_CONNECTION, "NM_MANAGER_ERROR_SYSTEM_CONNECTION", "SystemConnection" },
+ { NM_MANAGER_ERROR_PERMISSION_DENIED, "NM_MANAGER_ERROR_PERMISSION_DENIED", "PermissionDenied" },
+ { NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, "NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE", "ConnectionNotActive" },
+ { NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE, "NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE", "AlreadyAsleepOrAwake" },
+ { NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, "NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED", "AlreadyEnabledOrDisabled" },
+ { NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE, "NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE", "UnsupportedConnectionType" },
+ { NM_MANAGER_ERROR_DEPENDENCY_FAILED, "NM_MANAGER_ERROR_DEPENDENCY_FAILED", "DependencyFailed" },
+ { NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED, "NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED", "AutoconnectNotAllowed" },
+ { NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE, "NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE", "ConnectionAlreadyActive" },
+ { NM_MANAGER_ERROR_INTERNAL, "NM_MANAGER_ERROR_INTERNAL", "Internal" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMSystemConfigInterfaceProp"), values);
+ g_enum_register_static (g_intern_static_string ("NMManagerError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_settings_error_get_type (void)
+nm_rf_kill_state_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_SETTINGS_ERROR_GENERAL, "NM_SETTINGS_ERROR_GENERAL", "GeneralError" },
- { NM_SETTINGS_ERROR_INVALID_CONNECTION, "NM_SETTINGS_ERROR_INVALID_CONNECTION", "InvalidConnection" },
- { NM_SETTINGS_ERROR_READ_ONLY_CONNECTION, "NM_SETTINGS_ERROR_READ_ONLY_CONNECTION", "ReadOnlyConnection" },
- { NM_SETTINGS_ERROR_INTERNAL_ERROR, "NM_SETTINGS_ERROR_INTERNAL_ERROR", "InternalError" },
- { NM_SETTINGS_ERROR_SECRETS_UNAVAILABLE, "NM_SETTINGS_ERROR_SECRETS_UNAVAILABLE", "SecretsUnavailable" },
- { NM_SETTINGS_ERROR_SECRETS_REQUEST_CANCELED, "NM_SETTINGS_ERROR_SECRETS_REQUEST_CANCELED", "SecretsRequestCanceled" },
- { NM_SETTINGS_ERROR_PERMISSION_DENIED, "NM_SETTINGS_ERROR_PERMISSION_DENIED", "PermissionDenied" },
- { NM_SETTINGS_ERROR_INVALID_SETTING, "NM_SETTINGS_ERROR_INVALID_SETTING", "InvalidSetting" },
- { NM_SETTINGS_ERROR_NOT_PRIVILEGED, "NM_SETTINGS_ERROR_NOT_PRIVILEGED", "NotPrivileged" },
- { NM_SETTINGS_ERROR_ADD_NOT_SUPPORTED, "NM_SETTINGS_ERROR_ADD_NOT_SUPPORTED", "AddNotSupported" },
- { NM_SETTINGS_ERROR_UPDATE_NOT_SUPPORTED, "NM_SETTINGS_ERROR_UPDATE_NOT_SUPPORTED", "UpdateNotSupported" },
- { NM_SETTINGS_ERROR_DELETE_NOT_SUPPORTED, "NM_SETTINGS_ERROR_DELETE_NOT_SUPPORTED", "DeleteNotSupported" },
- { NM_SETTINGS_ERROR_ADD_FAILED, "NM_SETTINGS_ERROR_ADD_FAILED", "AddFailed" },
- { NM_SETTINGS_ERROR_SAVE_HOSTNAME_NOT_SUPPORTED, "NM_SETTINGS_ERROR_SAVE_HOSTNAME_NOT_SUPPORTED", "SaveHostnameNotSupported" },
- { NM_SETTINGS_ERROR_SAVE_HOSTNAME_FAILED, "NM_SETTINGS_ERROR_SAVE_HOSTNAME_FAILED", "SaveHostnameFailed" },
- { NM_SETTINGS_ERROR_HOSTNAME_INVALID, "NM_SETTINGS_ERROR_HOSTNAME_INVALID", "HostnameInvalid" },
- { NM_SETTINGS_ERROR_UUID_EXISTS, "NM_SETTINGS_ERROR_UUID_EXISTS", "UuidExists" },
+ { RFKILL_UNBLOCKED, "RFKILL_UNBLOCKED", "unblocked" },
+ { RFKILL_SOFT_BLOCKED, "RFKILL_SOFT_BLOCKED", "soft-blocked" },
+ { RFKILL_HARD_BLOCKED, "RFKILL_HARD_BLOCKED", "hard-blocked" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMSettingsError"), values);
+ g_enum_register_static (g_intern_static_string ("RfKillState"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_agent_manager_error_get_type (void)
+nm_rf_kill_type_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN, "NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN", "SenderUnknown" },
- { NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED, "NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED", "PermissionDenied" },
- { NM_AGENT_MANAGER_ERROR_SESSION_NOT_FOUND, "NM_AGENT_MANAGER_ERROR_SESSION_NOT_FOUND", "SessionNotFound" },
- { NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER, "NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER", "InvalidIdentifier" },
- { NM_AGENT_MANAGER_ERROR_NOT_REGISTERED, "NM_AGENT_MANAGER_ERROR_NOT_REGISTERED", "NotRegistered" },
- { NM_AGENT_MANAGER_ERROR_INTERNAL_ERROR, "NM_AGENT_MANAGER_ERROR_INTERNAL_ERROR", "InternalError" },
- { NM_AGENT_MANAGER_ERROR_NO_SECRETS, "NM_AGENT_MANAGER_ERROR_NO_SECRETS", "NoSecrets" },
+ { RFKILL_TYPE_WLAN, "RFKILL_TYPE_WLAN", "wlan" },
+ { RFKILL_TYPE_WWAN, "RFKILL_TYPE_WWAN", "wwan" },
+ { RFKILL_TYPE_WIMAX, "RFKILL_TYPE_WIMAX", "wimax" },
+ { RFKILL_TYPE_UNKNOWN, "RFKILL_TYPE_UNKNOWN", "unknown" },
+ { RFKILL_TYPE_MAX, "RFKILL_TYPE_MAX", "max" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMAgentManagerError"), values);
+ g_enum_register_static (g_intern_static_string ("RfKillType"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_wimax_error_get_type (void)
+nm_session_monitor_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_WIMAX_ERROR_CONNECTION_NOT_WIMAX, "NM_WIMAX_ERROR_CONNECTION_NOT_WIMAX", "ConnectionNotWimax" },
- { NM_WIMAX_ERROR_CONNECTION_INVALID, "NM_WIMAX_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_WIMAX_ERROR_CONNECTION_INCOMPATIBLE, "NM_WIMAX_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
- { NM_WIMAX_ERROR_NSP_NOT_FOUND, "NM_WIMAX_ERROR_NSP_NOT_FOUND", "NspNotFound" },
+ { NM_SESSION_MONITOR_ERROR_IO_ERROR, "NM_SESSION_MONITOR_ERROR_IO_ERROR", "IOError" },
+ { NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE, "NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE", "MalformedDatabase" },
+ { NM_SESSION_MONITOR_ERROR_UNKNOWN_USER, "NM_SESSION_MONITOR_ERROR_UNKNOWN_USER", "UnknownUser" },
+ { NM_SESSION_MONITOR_ERROR_NO_DATABASE, "NM_SESSION_MONITOR_ERROR_NO_DATABASE", "NoDatabase" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMWimaxError"), values);
+ g_enum_register_static (g_intern_static_string ("NMSessionMonitorError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
GType
-nm_wimax_nsp_network_type_get_type (void)
+nm_wimax_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const GEnumValue values[] = {
- { NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN, "NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN", "unknown" },
- { NM_WIMAX_NSP_NETWORK_TYPE_HOME, "NM_WIMAX_NSP_NETWORK_TYPE_HOME", "home" },
- { NM_WIMAX_NSP_NETWORK_TYPE_PARTNER, "NM_WIMAX_NSP_NETWORK_TYPE_PARTNER", "partner" },
- { NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER, "NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER", "roaming-partner" },
+ { NM_WIMAX_ERROR_CONNECTION_NOT_WIMAX, "NM_WIMAX_ERROR_CONNECTION_NOT_WIMAX", "ConnectionNotWimax" },
+ { NM_WIMAX_ERROR_CONNECTION_INVALID, "NM_WIMAX_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
+ { NM_WIMAX_ERROR_CONNECTION_INCOMPATIBLE, "NM_WIMAX_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
+ { NM_WIMAX_ERROR_NSP_NOT_FOUND, "NM_WIMAX_ERROR_NSP_NOT_FOUND", "NspNotFound" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMWimaxNspNetworkType"), values);
+ g_enum_register_static (g_intern_static_string ("NMWimaxError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
diff --git a/src/generated/nm-enum-types.h b/src/nm-enum-types.h
index e0703b200..2bf6c7346 100644
--- a/src/generated/nm-enum-types.h
+++ b/src/nm-enum-types.h
@@ -9,88 +9,88 @@
#include <glib-object.h>
G_BEGIN_DECLS
-GType nm_bt_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_BT_ERROR (nm_bt_error_get_type ())
-GType nm_infiniband_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_INFINIBAND_ERROR (nm_infiniband_error_get_type ())
-GType nm_bond_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_BOND_ERROR (nm_bond_error_get_type ())
-GType nm_session_monitor_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SESSION_MONITOR_ERROR (nm_session_monitor_error_get_type ())
-GType nm_ethernet_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_ETHERNET_ERROR (nm_ethernet_error_get_type ())
-GType nm_config_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_CONFIG_ERROR (nm_config_error_get_type ())
-GType nm_rf_kill_state_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_RF_KILL_STATE (nm_rf_kill_state_get_type ())
-GType nm_rf_kill_type_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_RF_KILL_TYPE (nm_rf_kill_type_get_type ())
-GType nm_dispatcher_action_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_DISPATCHER_ACTION (nm_dispatcher_action_get_type ())
-GType nm_ip4_config_compare_flags_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_IP4_CONFIG_COMPARE_FLAGS (nm_ip4_config_compare_flags_get_type ())
-GType nm_manager_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_MANAGER_ERROR (nm_manager_error_get_type ())
GType nm_device_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DEVICE_ERROR (nm_device_error_get_type ())
-GType nm_ip6_config_compare_flags_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_IP6_CONFIG_COMPARE_FLAGS (nm_ip6_config_compare_flags_get_type ())
-GType nm_auth_call_result_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_AUTH_CALL_RESULT (nm_auth_call_result_get_type ())
+GType nm_unmanaged_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_UNMANAGED_FLAGS (nm_unmanaged_flags_get_type ())
+GType nm_bond_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_BOND_ERROR (nm_bond_error_get_type ())
GType nm_bridge_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_BRIDGE_ERROR (nm_bridge_error_get_type ())
-GType nm_wifi_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_WIFI_ERROR (nm_wifi_error_get_type ())
-GType nm_nm_nl_prop_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_NM_NL_PROP (nm_nm_nl_prop_get_type ())
+GType nm_ethernet_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_ETHERNET_ERROR (nm_ethernet_error_get_type ())
+GType nm_device_generic_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_GENERIC_ERROR (nm_device_generic_error_get_type ())
+GType nm_infiniband_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_INFINIBAND_ERROR (nm_infiniband_error_get_type ())
+GType nm_team_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_TEAM_ERROR (nm_team_error_get_type ())
GType nm_vlan_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_VLAN_ERROR (nm_vlan_error_get_type ())
-GType nm_netlink_monitor_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_NETLINK_MONITOR_ERROR (nm_netlink_monitor_error_get_type ())
-GType nm_olpc_mesh_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_OLPC_MESH_ERROR (nm_olpc_mesh_error_get_type ())
-GType nm_adsl_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_ADSL_ERROR (nm_adsl_error_get_type ())
-GType nm_logging_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_LOGGING_ERROR (nm_logging_error_get_type ())
-GType nm_dns_manager_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_DNS_MANAGER_ERROR (nm_dns_manager_error_get_type ())
-GType nm_dns_ip_config_type_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_DNS_IP_CONFIG_TYPE (nm_dns_ip_config_type_get_type ())
-GType nm_vpn_manager_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_VPN_MANAGER_ERROR (nm_vpn_manager_error_get_type ())
GType nm_dhcp_state_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DHCP_STATE (nm_dhcp_state_get_type ())
GType nm_dhcp_manager_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DHCP_MANAGER_ERROR (nm_dhcp_manager_error_get_type ())
-GType nm_opt_type_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_OPT_TYPE (nm_opt_type_get_type ())
-GType nm_ap_support_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_AP_SUPPORT (nm_ap_support_get_type ())
-GType nm_ppp_status_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_PPP_STATUS (nm_ppp_status_get_type ())
+GType nm_dns_manager_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DNS_MANAGER_ERROR (nm_dns_manager_error_get_type ())
+GType nm_dns_ip_config_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DNS_IP_CONFIG_TYPE (nm_dns_ip_config_type_get_type ())
+GType nm_dns_manager_resolv_conf_mode_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DNS_MANAGER_RESOLV_CONF_MODE (nm_dns_manager_resolv_conf_mode_get_type ())
GType nm_dns_masq_status_get_type (void) G_GNUC_CONST;
#define NM_TYPE_DNS_MASQ_STATUS (nm_dns_masq_status_get_type ())
-GType nm_modem_state_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_MODEM_STATE (nm_modem_state_get_type ())
-GType nm_cdma_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_CDMA_ERROR (nm_cdma_error_get_type ())
-GType nm_modem_broadband_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_MODEM_BROADBAND_ERROR (nm_modem_broadband_error_get_type ())
-GType nm_gsm_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_GSM_ERROR (nm_gsm_error_get_type ())
+GType nm_logging_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_LOGGING_ERROR (nm_logging_error_get_type ())
+GType nm_platform_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_PLATFORM_ERROR (nm_platform_error_get_type ())
+GType nm_platform_reason_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_PLATFORM_REASON (nm_platform_reason_get_type ())
+GType nm_link_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_LINK_TYPE (nm_link_type_get_type ())
+GType nm_platform_signal_change_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_PLATFORM_SIGNAL_CHANGE_TYPE (nm_platform_signal_change_type_get_type ())
+GType nm_platform_source_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_PLATFORM_SOURCE (nm_platform_source_get_type ())
+GType nm_rdisc_dhcp_level_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_RDISC_DHCP_LEVEL (nm_rdisc_dhcp_level_get_type ())
+GType nm_rdisc_preference_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_RDISC_PREFERENCE (nm_rdisc_preference_get_type ())
+GType nm_rdisc_config_map_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_RDISC_CONFIG_MAP (nm_rdisc_config_map_get_type ())
+GType nm_ppp_status_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_PPP_STATUS (nm_ppp_status_get_type ())
+GType nm_agent_manager_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_AGENT_MANAGER_ERROR (nm_agent_manager_error_get_type ())
+GType nm_secret_agent_capabilities_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SECRET_AGENT_CAPABILITIES (nm_secret_agent_capabilities_get_type ())
+GType nm_settings_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTINGS_ERROR (nm_settings_error_get_type ())
GType nm_system_config_interface_capabilities_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SYSTEM_CONFIG_INTERFACE_CAPABILITIES (nm_system_config_interface_capabilities_get_type ())
GType nm_system_config_interface_prop_get_type (void) G_GNUC_CONST;
#define NM_TYPE_SYSTEM_CONFIG_INTERFACE_PROP (nm_system_config_interface_prop_get_type ())
-GType nm_settings_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTINGS_ERROR (nm_settings_error_get_type ())
-GType nm_agent_manager_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_AGENT_MANAGER_ERROR (nm_agent_manager_error_get_type ())
+GType nm_ap_support_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_AP_SUPPORT (nm_ap_support_get_type ())
+GType nm_opt_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_OPT_TYPE (nm_opt_type_get_type ())
+GType nm_vpn_manager_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VPN_MANAGER_ERROR (nm_vpn_manager_error_get_type ())
+GType nm_dcb_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DCB_ERROR (nm_dcb_error_get_type ())
+GType nm_dispatcher_action_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DISPATCHER_ACTION (nm_dispatcher_action_get_type ())
+GType nm_auth_call_result_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_AUTH_CALL_RESULT (nm_auth_call_result_get_type ())
+GType nm_manager_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_MANAGER_ERROR (nm_manager_error_get_type ())
+GType nm_rf_kill_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_RF_KILL_STATE (nm_rf_kill_state_get_type ())
+GType nm_rf_kill_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_RF_KILL_TYPE (nm_rf_kill_type_get_type ())
+GType nm_session_monitor_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SESSION_MONITOR_ERROR (nm_session_monitor_error_get_type ())
GType nm_wimax_error_get_type (void) G_GNUC_CONST;
#define NM_TYPE_WIMAX_ERROR (nm_wimax_error_get_type ())
-GType nm_wimax_nsp_network_type_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_WIMAX_NSP_NETWORK_TYPE (nm_wimax_nsp_network_type_get_type ())
G_END_DECLS
#endif /* __NM_ENUM_TYPES_H__ */
diff --git a/src/nm-hostname-provider.c b/src/nm-hostname-provider.c
deleted file mode 100644
index 1cd1ca6cb..000000000
--- a/src/nm-hostname-provider.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#include "nm-hostname-provider.h"
-
-const char *
-nm_hostname_provider_get_hostname (NMHostnameProvider *self)
-{
- g_return_val_if_fail (NM_IS_HOSTNAME_PROVIDER (self), NULL);
-
- return NM_HOSTNAME_PROVIDER_GET_INTERFACE (self)->get_hostname (self);
-}
-
-GType
-nm_hostname_provider_get_type (void)
-{
- static GType type = 0;
-
- if (!G_UNLIKELY (type)) {
- const GTypeInfo type_info = {
- sizeof (NMHostnameProvider), /* class_size */
- NULL, /* base_init */
- NULL, /* base_finalize */
- NULL,
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0, /* n_preallocs */
- NULL
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE, "NMHostnameProvider", &type_info, 0);
- g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
- }
-
- return type;
-}
diff --git a/src/nm-hostname-provider.h b/src/nm-hostname-provider.h
deleted file mode 100644
index 7fe5c0062..000000000
--- a/src/nm-hostname-provider.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#ifndef NM_HOSTNAME_PROVIDER_H
-#define NM_HOSTNAME_PROVIDER_H
-
-#include <glib-object.h>
-
-#define NM_TYPE_HOSTNAME_PROVIDER (nm_hostname_provider_get_type ())
-#define NM_HOSTNAME_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_HOSTNAME_PROVIDER, NMHostnameProvider))
-#define NM_IS_HOSTNAME_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_HOSTNAME_PROVIDER))
-#define NM_HOSTNAME_PROVIDER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_HOSTNAME_PROVIDER, NMHostnameProvider))
-
-typedef struct _NMHostnameProvider NMHostnameProvider;
-
-struct _NMHostnameProvider {
- GTypeInterface g_iface;
-
- /* Methods */
- const char *(*get_hostname) (NMHostnameProvider *self);
-};
-
-GType nm_hostname_provider_get_type (void);
-
-const char *nm_hostname_provider_get_hostname (NMHostnameProvider *self);
-
-#endif /* NM_HOSTNAME_PROVIDER_H */
diff --git a/src/nm-ip4-config-glue.h b/src/nm-ip4-config-glue.h
new file mode 100644
index 000000000..738dff922
--- /dev/null
+++ b/src/nm-ip4-config-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_ip4_config_MARSHAL_H__
+#define __dbus_glib_marshal_nm_ip4_config_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_ip4_config_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_ip4_config_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_ip4_config_object_info = { 1,
+ dbus_glib_nm_ip4_config_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.IP4Config\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.IP4Config\0Gateway\0gateway\0read\0org.freedesktop.NetworkManager.IP4Config\0Addresses\0addresses\0read\0org.freedesktop.NetworkManager.IP4Config\0Routes\0routes\0read\0org.freedesktop.NetworkManager.IP4Config\0Nameservers\0nameservers\0read\0org.freedesktop.NetworkManager.IP4Config\0Domains\0domains\0read\0org.freedesktop.NetworkManager.IP4Config\0Searches\0searches\0read\0org.freedesktop.NetworkManager.IP4Config\0WinsServers\0wins_servers\0read\0\0"
+};
+
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index 0722981e4..e27c0436f 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -1,5 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
+/* NetworkManager
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,27 +15,22 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2008 Red Hat, Inc.
+ * Copyright (C) 2005 - 2014 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#include <glib.h>
-#include <stdio.h>
#include <string.h>
-#include "nm-ip4-config.h"
-#include "nm-dbus-manager.h"
-#include "NetworkManager.h"
-#include "NetworkManagerUtils.h"
-#include "nm-setting-ip4-config.h"
-#include "nm-utils.h"
-#include <netlink/route/addr.h>
-#include <netlink/utils.h>
-#include <netinet/in.h>
+#include "nm-ip4-config.h"
-#include "nm-ip4-config-glue.h"
+#include "libgsystem.h"
+#include "nm-platform.h"
+#include "nm-utils.h"
+#include "nm-dbus-manager.h"
#include "nm-dbus-glib-types.h"
-
+#include "nm-ip4-config-glue.h"
+#include "NetworkManagerUtils.h"
+#include "nm-utils-private.h"
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, G_TYPE_OBJECT)
@@ -44,51 +39,38 @@ G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, G_TYPE_OBJECT)
typedef struct {
char *path;
- GSList *addresses;
- guint32 ptp_address;
-
- guint32 mtu; /* Maximum Transmission Unit of the interface */
- guint32 mss; /* Maximum Segment Size of the route */
-
+ gboolean never_default;
+ guint32 gateway;
+ GArray *addresses;
+ GArray *routes;
GArray *nameservers;
GPtrArray *domains;
GPtrArray *searches;
-
- GArray *wins;
-
+ guint32 mss;
GArray *nis;
- char * nis_domain;
-
- GSList *routes;
-
- gboolean never_default;
+ char *nis_domain;
+ GArray *wins;
+ guint32 mtu;
} NMIP4ConfigPrivate;
+/* internal guint32 are assigned to gobject properties of type uint. Ensure, that uint is large enough */
+G_STATIC_ASSERT (sizeof (uint) >= sizeof (guint32));
+G_STATIC_ASSERT (G_MAXUINT >= 0xFFFFFFFF);
enum {
PROP_0,
+ PROP_GATEWAY,
PROP_ADDRESSES,
+ PROP_ROUTES,
PROP_NAMESERVERS,
PROP_DOMAINS,
- PROP_ROUTES,
+ PROP_SEARCHES,
PROP_WINS_SERVERS,
LAST_PROP
};
-
-
-static struct nl_addr *
-nm_utils_ip4_addr_to_nl_addr (guint32 ip4_addr)
-{
- struct nl_addr * nla = NULL;
-
- if (!(nla = nl_addr_alloc (sizeof (in_addr_t))))
- return NULL;
- nl_addr_set_family (nla, AF_INET);
- nl_addr_set_binary_addr (nla, &ip4_addr, sizeof (guint32));
-
- return nla;
-}
+static GParamSpec *obj_properties[LAST_PROP] = { NULL, };
+#define _NOTIFY(config, prop) G_STMT_START { g_object_notify_by_pspec (G_OBJECT (config), obj_properties[prop]); } G_STMT_END
NMIP4Config *
@@ -97,722 +79,1447 @@ nm_ip4_config_new (void)
return (NMIP4Config *) g_object_new (NM_TYPE_IP4_CONFIG, NULL);
}
+
void
nm_ip4_config_export (NMIP4Config *config)
{
- NMIP4ConfigPrivate *priv;
- NMDBusManager *dbus_mgr;
- DBusGConnection *connection;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
static guint32 counter = 0;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
-
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- g_return_if_fail (priv->path == NULL);
-
- dbus_mgr = nm_dbus_manager_get ();
- connection = nm_dbus_manager_get_connection (dbus_mgr);
- priv->path = g_strdup_printf (NM_DBUS_PATH "/IP4Config/%d", counter++);
-
- dbus_g_connection_register_g_object (connection, priv->path, G_OBJECT (config));
- g_object_unref (dbus_mgr);
+ if (!priv->path) {
+ priv->path = g_strdup_printf (NM_DBUS_PATH "/IP4Config/%d", counter++);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->path, config);
+ }
}
const char *
-nm_ip4_config_get_dbus_path (NMIP4Config *config)
+nm_ip4_config_get_dbus_path (const NMIP4Config *config)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return NM_IP4_CONFIG_GET_PRIVATE (config)->path;
+ return priv->path;
}
-void
-nm_ip4_config_take_address (NMIP4Config *config, NMIP4Address *address)
+static gboolean
+same_prefix (guint32 address1, guint32 address2, int plen)
{
- NMIP4ConfigPrivate *priv;
+ guint32 masked1 = ntohl (address1) >> (32 - plen);
+ guint32 masked2 = ntohl (address2) >> (32 - plen);
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (address != NULL);
-
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- priv->addresses = g_slist_append (priv->addresses, address);
+ return masked1 == masked2;
}
-void
-nm_ip4_config_add_address (NMIP4Config *config,
- NMIP4Address *address)
+/******************************************************************/
+
+/**
+ * nm_ip4_config_capture_resolv_conf():
+ * @nameservers: array of guint32
+ * @rc_contents: the contents of a resolv.conf or %NULL to read /etc/resolv.conf
+ *
+ * Reads all resolv.conf IPv4 nameservers and adds them to @nameservers.
+ *
+ * Returns: %TRUE if nameservers were added, %FALSE if @nameservers is unchanged
+ */
+gboolean
+nm_ip4_config_capture_resolv_conf (GArray *nameservers,
+ const char *rc_contents)
{
- NMIP4ConfigPrivate *priv;
- GSList *iter;
+ GPtrArray *read_ns;
+ guint i, j;
+ gboolean changed = FALSE;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (address != NULL);
+ g_return_val_if_fail (nameservers != NULL, FALSE);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
- if (nm_ip4_address_compare ((NMIP4Address *) iter->data, address))
- return;
- }
+ read_ns = nm_utils_read_resolv_conf_nameservers (rc_contents);
+ if (!read_ns)
+ return FALSE;
- priv->addresses = g_slist_append (priv->addresses, nm_ip4_address_dup (address));
-}
+ for (i = 0; i < read_ns->len; i++) {
+ const char *s = g_ptr_array_index (read_ns, i);
+ guint32 ns = 0;
-void
-nm_ip4_config_replace_address (NMIP4Config *config,
- guint i,
- NMIP4Address *new_address)
-{
- NMIP4ConfigPrivate *priv;
- GSList *old;
+ if (!inet_pton (AF_INET, s, (void *) &ns) || !ns)
+ continue;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ /* Ignore duplicates */
+ for (j = 0; j < nameservers->len; j++) {
+ if (g_array_index (nameservers, guint32, j) == ns)
+ break;
+ }
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- old = g_slist_nth (priv->addresses, i);
- g_return_if_fail (old != NULL);
- nm_ip4_address_unref ((NMIP4Address *) old->data);
+ if (j == nameservers->len) {
+ g_array_append_val (nameservers, ns);
+ changed = TRUE;
+ }
+ }
- old->data = nm_ip4_address_dup (new_address);
+ g_ptr_array_unref (read_ns);
+ return changed;
}
-NMIP4Address *nm_ip4_config_get_address (NMIP4Config *config, guint i)
+static gboolean
+addresses_are_duplicate (const NMPlatformIP4Address *a, const NMPlatformIP4Address *b, gboolean consider_plen)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
-
- return (NMIP4Address *) g_slist_nth_data (NM_IP4_CONFIG_GET_PRIVATE (config)->addresses, i);
+ return a->address == b->address && (!consider_plen || a->plen == b->plen);
}
-guint32 nm_ip4_config_get_num_addresses (NMIP4Config *config)
+static gboolean
+routes_are_duplicate (const NMPlatformIP4Route *a, const NMPlatformIP4Route *b, gboolean consider_gateway_and_metric)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
-
- return g_slist_length (NM_IP4_CONFIG_GET_PRIVATE (config)->addresses);
+ return a->network == b->network && a->plen == b->plen &&
+ (!consider_gateway_and_metric || (a->gateway == b->gateway && a->metric == b->metric));
}
-guint32 nm_ip4_config_get_ptp_address (NMIP4Config *config)
+NMIP4Config *
+nm_ip4_config_capture (int ifindex, gboolean capture_resolv_conf)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ NMIP4Config *config;
+ NMIP4ConfigPrivate *priv;
+ guint i;
+ guint lowest_metric = G_MAXUINT;
+ guint32 old_gateway = 0;
+ gboolean has_gateway = FALSE;
- return NM_IP4_CONFIG_GET_PRIVATE (config)->ptp_address;
-}
+ /* Slaves have no IP configuration */
+ if (nm_platform_link_get_master (ifindex) > 0)
+ return NULL;
-void nm_ip4_config_set_ptp_address (NMIP4Config *config, guint32 ptp_addr)
-{
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ config = nm_ip4_config_new ();
+ priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ g_array_unref (priv->addresses);
+ g_array_unref (priv->routes);
+
+ priv->addresses = nm_platform_ip4_address_get_all (ifindex);
+ priv->routes = nm_platform_ip4_route_get_all (ifindex, TRUE);
+
+ /* Extract gateway from default route */
+ old_gateway = priv->gateway;
+ for (i = 0; i < priv->routes->len; i++) {
+ const NMPlatformIP4Route *route = &g_array_index (priv->routes, NMPlatformIP4Route, i);
+
+ if (route->network == 0) {
+ if (route->metric < lowest_metric) {
+ priv->gateway = route->gateway;
+ lowest_metric = route->metric;
+ }
+ has_gateway = TRUE;
+ /* Remove the default route from the list */
+ g_array_remove_index (priv->routes, i);
+ i--;
+ }
+ }
+
+ /* If there is a host route to the gateway, ignore that route. It is
+ * automatically added by NetworkManager when needed.
+ */
+ if (has_gateway) {
+ for (i = 0; i < priv->routes->len; i++) {
+ const NMPlatformIP4Route *route = &g_array_index (priv->routes, NMPlatformIP4Route, i);
+
+ if ( (route->plen == 32)
+ && (route->network == priv->gateway)
+ && (route->gateway == 0)) {
+ g_array_remove_index (priv->routes, i);
+ i--;
+ }
+ }
+ }
- NM_IP4_CONFIG_GET_PRIVATE (config)->ptp_address = ptp_addr;
+ /* If the interface has the default route, and has IPv4 addresses, capture
+ * nameservers from /etc/resolv.conf.
+ */
+ if (priv->addresses->len && has_gateway && capture_resolv_conf) {
+ if (nm_ip4_config_capture_resolv_conf (priv->nameservers, NULL))
+ _NOTIFY (config, PROP_NAMESERVERS);
+ }
+
+ /* actually, nobody should be connected to the signal, just to be sure, notify */
+ _NOTIFY (config, PROP_ADDRESSES);
+ _NOTIFY (config, PROP_ROUTES);
+ if (priv->gateway != old_gateway)
+ _NOTIFY (config, PROP_GATEWAY);
+
+ return config;
}
-void nm_ip4_config_add_nameserver (NMIP4Config *config, guint32 nameserver)
+gboolean
+nm_ip4_config_commit (const NMIP4Config *config, int ifindex)
{
- NMIP4ConfigPrivate *priv;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ int mtu = nm_ip4_config_get_mtu (config);
int i;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (nameserver > 0);
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (config != NULL, FALSE);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->nameservers->len; i++) {
- guint32 s = g_array_index (priv->nameservers, guint32, i);
+ /* Addresses */
+ nm_platform_ip4_address_sync (ifindex, priv->addresses);
- /* No dupes */
- if (nameserver == s)
- return;
+ /* Routes */
+ {
+ int count = nm_ip4_config_get_num_routes (config);
+ GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP4Route), count);
+ NMPlatformIP4Route route;
+ gboolean success;
+
+ for (i = 0; i < count; i++) {
+ memcpy (&route, nm_ip4_config_get_route (config, i), sizeof (route));
+
+ /* Don't add the route if it's more specific than one of the subnets
+ * the device already has an IP address on.
+ */
+ if ( route.gateway == 0
+ && nm_ip4_config_destination_is_direct (config, route.network, route.plen))
+ continue;
+
+ /* Don't add the default route if the connection
+ * is never supposed to be the default connection.
+ */
+ if (nm_ip4_config_get_never_default (config) && route.network == 0)
+ continue;
+
+ g_array_append_val (routes, route);
+ }
+
+ success = nm_platform_ip4_route_sync (ifindex, routes);
+ g_array_unref (routes);
+ if (!success)
+ return FALSE;
}
- g_array_append_val (priv->nameservers, nameserver);
+ /* MTU */
+ if (mtu && mtu != nm_platform_link_get_mtu (ifindex))
+ nm_platform_link_set_mtu (ifindex, mtu);
+
+ return TRUE;
}
-guint32 nm_ip4_config_get_nameserver (NMIP4Config *config, guint i)
+void
+nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, int default_route_metric)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ guint naddresses, nroutes, nnameservers, nsearches;
+ int i;
- return g_array_index (NM_IP4_CONFIG_GET_PRIVATE (config)->nameservers, guint32, i);
-}
+ if (!setting)
+ return;
-guint32 nm_ip4_config_get_num_nameservers (NMIP4Config *config)
-{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ g_object_freeze_notify (G_OBJECT (config));
- return NM_IP4_CONFIG_GET_PRIVATE (config)->nameservers->len;
-}
+ naddresses = nm_setting_ip4_config_get_num_addresses (setting);
+ nroutes = nm_setting_ip4_config_get_num_routes (setting);
+ nnameservers = nm_setting_ip4_config_get_num_dns (setting);
+ nsearches = nm_setting_ip4_config_get_num_dns_searches (setting);
-void nm_ip4_config_reset_nameservers (NMIP4Config *config)
-{
- NMIP4ConfigPrivate *priv;
+ /* Gateway */
+ if (nm_setting_ip4_config_get_never_default (setting))
+ nm_ip4_config_set_never_default (config, TRUE);
+ else if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
+ nm_ip4_config_set_never_default (config, FALSE);
+ for (i = 0; i < naddresses; i++) {
+ guint32 gateway = nm_ip4_address_get_gateway (nm_setting_ip4_config_get_address (setting, i));
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ if (gateway) {
+ nm_ip4_config_set_gateway (config, gateway);
+ break;
+ }
+ }
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (priv->nameservers->len)
- g_array_remove_range (priv->nameservers, 0, priv->nameservers->len);
+ /* Addresses */
+ for (i = 0; i < naddresses; i++) {
+ NMIP4Address *s_addr = nm_setting_ip4_config_get_address (setting, i);
+ const char *label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (setting, i));
+ NMPlatformIP4Address address;
+
+ memset (&address, 0, sizeof (address));
+ address.address = nm_ip4_address_get_address (s_addr);
+ address.plen = nm_ip4_address_get_prefix (s_addr);
+ address.lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
+ address.preferred = NM_PLATFORM_LIFETIME_PERMANENT;
+ address.source = NM_PLATFORM_SOURCE_USER;
+ if (label)
+ g_strlcpy (address.label, label, sizeof (address.label));
+
+ nm_ip4_config_add_address (config, &address);
+ }
+
+ /* Routes */
+ if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
+ nm_ip4_config_reset_routes (config);
+ for (i = 0; i < nroutes; i++) {
+ NMIP4Route *s_route = nm_setting_ip4_config_get_route (setting, i);
+ NMPlatformIP4Route route;
+
+ memset (&route, 0, sizeof (route));
+ route.network = nm_ip4_route_get_dest (s_route);
+ route.plen = nm_ip4_route_get_prefix (s_route);
+ route.gateway = nm_ip4_route_get_next_hop (s_route);
+ route.metric = nm_ip4_route_get_metric (s_route);
+ if (!route.metric)
+ route.metric = default_route_metric;
+ route.source = NM_PLATFORM_SOURCE_USER;
+
+ nm_ip4_config_add_route (config, &route);
+ }
+
+ /* DNS */
+ if (nm_setting_ip4_config_get_ignore_auto_dns (setting)) {
+ nm_ip4_config_reset_nameservers (config);
+ nm_ip4_config_reset_domains (config);
+ nm_ip4_config_reset_searches (config);
+ }
+ for (i = 0; i < nnameservers; i++)
+ nm_ip4_config_add_nameserver (config, nm_setting_ip4_config_get_dns (setting, i));
+ for (i = 0; i < nsearches; i++)
+ nm_ip4_config_add_search (config, nm_setting_ip4_config_get_dns_search (setting, i));
+
+ g_object_thaw_notify (G_OBJECT (config));
}
-void nm_ip4_config_add_wins (NMIP4Config *config, guint32 wins)
+NMSetting *
+nm_ip4_config_create_setting (const NMIP4Config *config)
{
- NMIP4ConfigPrivate *priv;
+ NMSettingIP4Config *s_ip4;
+ guint32 gateway;
+ guint naddresses, nroutes, nnameservers, nsearches;
+ const char *method = NULL;
int i;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (wins > 0);
+ s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->wins->len; i++) {
- guint32 s = g_array_index (priv->wins, guint32, i);
+ if (!config) {
+ g_object_set (s_ip4,
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
+ NULL);
+ return NM_SETTING (s_ip4);
+ }
- /* No dupes */
- if (wins == s)
- return;
+ gateway = nm_ip4_config_get_gateway (config);
+ naddresses = nm_ip4_config_get_num_addresses (config);
+ nroutes = nm_ip4_config_get_num_routes (config);
+ nnameservers = nm_ip4_config_get_num_nameservers (config);
+ nsearches = nm_ip4_config_get_num_searches (config);
+
+ /* Addresses */
+ for (i = 0; i < naddresses; i++) {
+ const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
+ NMIP4Address *s_addr;
+
+ /* Detect dynamic address */
+ if (address->lifetime != NM_PLATFORM_LIFETIME_PERMANENT) {
+ method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
+ continue;
+ }
+
+ /* Static address found. */
+ if (!method)
+ method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
+
+ s_addr = nm_ip4_address_new ();
+
+ nm_ip4_address_set_address (s_addr, address->address);
+ nm_ip4_address_set_prefix (s_addr, address->plen);
+ /* For backwards compatibility, attach the gateway to an address if it's
+ * in the same subnet.
+ */
+ if (same_prefix (address->address, gateway, address->plen))
+ nm_ip4_address_set_gateway (s_addr, gateway);
+
+ if (*address->label)
+ NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_add_address_with_label (s_ip4, s_addr, address->label));
+ else
+ nm_setting_ip4_config_add_address (s_ip4, s_addr);
+ nm_ip4_address_unref (s_addr);
}
- g_array_append_val (priv->wins, wins);
-}
+ /* Use 'disabled' if the method wasn't previously set */
+ if (!method)
+ method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
+ g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, method, NULL);
-guint32 nm_ip4_config_get_wins (NMIP4Config *config, guint i)
-{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ /* Routes */
+ for (i = 0; i < nroutes; i++) {
+ const NMPlatformIP4Route *route = nm_ip4_config_get_route (config, i);
+ NMIP4Route *s_route;
- return g_array_index (NM_IP4_CONFIG_GET_PRIVATE (config)->wins, guint32, i);
-}
+ /* Ignore default route. */
+ if (!route->plen)
+ continue;
-guint32 nm_ip4_config_get_num_wins (NMIP4Config *config)
-{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ /* Ignore routes provided by external sources */
+ if (route->source != NM_PLATFORM_SOURCE_USER)
+ continue;
- return NM_IP4_CONFIG_GET_PRIVATE (config)->wins->len;
-}
+ s_route = nm_ip4_route_new ();
+ nm_ip4_route_set_dest (s_route, route->network);
+ nm_ip4_route_set_prefix (s_route, route->plen);
+ nm_ip4_route_set_next_hop (s_route, route->gateway);
+ nm_ip4_route_set_metric (s_route, route->metric);
-void nm_ip4_config_reset_wins (NMIP4Config *config)
-{
- NMIP4ConfigPrivate *priv;
+ nm_setting_ip4_config_add_route (s_ip4, s_route);
+ nm_ip4_route_unref (s_route);
+ }
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ /* DNS */
+ for (i = 0; i < nnameservers; i++) {
+ guint32 nameserver = nm_ip4_config_get_nameserver (config, i);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (priv->wins->len)
- g_array_remove_range (priv->wins, 0, priv->wins->len);
+ nm_setting_ip4_config_add_dns (s_ip4, nameserver);
+ }
+ for (i = 0; i < nsearches; i++) {
+ const char *search = nm_ip4_config_get_search (config, i);
+
+ nm_setting_ip4_config_add_dns_search (s_ip4, search);
+ }
+
+ return NM_SETTING (s_ip4);
}
+/******************************************************************/
+
void
-nm_ip4_config_take_route (NMIP4Config *config, NMIP4Route *route)
+nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
{
- NMIP4ConfigPrivate *priv;
+ guint32 i;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (route != NULL);
+ g_return_if_fail (src != NULL);
+ g_return_if_fail (dst != NULL);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- priv->routes = g_slist_append (priv->routes, route);
+ g_object_freeze_notify (G_OBJECT (dst));
+
+ /* addresses */
+ for (i = 0; i < nm_ip4_config_get_num_addresses (src); i++)
+ nm_ip4_config_add_address (dst, nm_ip4_config_get_address (src, i));
+
+ /* nameservers */
+ for (i = 0; i < nm_ip4_config_get_num_nameservers (src); i++)
+ nm_ip4_config_add_nameserver (dst, nm_ip4_config_get_nameserver (src, i));
+
+ /* default gateway */
+ if (!nm_ip4_config_get_gateway (dst))
+ nm_ip4_config_set_gateway (dst, nm_ip4_config_get_gateway (src));
+
+ /* routes */
+ for (i = 0; i < nm_ip4_config_get_num_routes (src); i++)
+ nm_ip4_config_add_route (dst, nm_ip4_config_get_route (src, i));
+
+ /* domains */
+ for (i = 0; i < nm_ip4_config_get_num_domains (src); i++)
+ nm_ip4_config_add_domain (dst, nm_ip4_config_get_domain (src, i));
+
+ /* dns searches */
+ for (i = 0; i < nm_ip4_config_get_num_searches (src); i++)
+ nm_ip4_config_add_search (dst, nm_ip4_config_get_search (src, i));
+
+ /* MSS */
+ if (!nm_ip4_config_get_mss (dst))
+ nm_ip4_config_set_mss (dst, nm_ip4_config_get_mss (src));
+
+ /* MTU */
+ if (!nm_ip4_config_get_mtu (dst))
+ nm_ip4_config_set_mtu (dst, nm_ip4_config_get_mtu (src));
+
+ /* NIS */
+ for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++)
+ nm_ip4_config_add_nis_server (dst, nm_ip4_config_get_nis_server (src, i));
+
+ if (nm_ip4_config_get_nis_domain (src))
+ nm_ip4_config_set_nis_domain (dst, nm_ip4_config_get_nis_domain (src));
+
+ /* WINS */
+ for (i = 0; i < nm_ip4_config_get_num_wins (src); i++)
+ nm_ip4_config_add_wins (dst, nm_ip4_config_get_wins (src, i));
+
+ g_object_thaw_notify (G_OBJECT (dst));
}
+/**
+ * nm_ip4_config_subtract:
+ * @dst: config from which to remove everything in @src
+ * @src: config to remove from @dst
+ *
+ * Removes everything in @src from @dst.
+ */
void
-nm_ip4_config_add_route (NMIP4Config *config, NMIP4Route *route)
+nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src)
{
- NMIP4ConfigPrivate *priv;
- GSList *iter;
+ guint32 i, j;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (route != NULL);
+ g_return_if_fail (src != NULL);
+ g_return_if_fail (dst != NULL);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
- if (nm_ip4_route_compare ((NMIP4Route *) iter->data, route))
- return;
+ g_object_freeze_notify (G_OBJECT (dst));
+
+ /* addresses */
+ for (i = 0; i < nm_ip4_config_get_num_addresses (src); i++) {
+ const NMPlatformIP4Address *src_addr = nm_ip4_config_get_address (src, i);
+
+ for (j = 0; j < nm_ip4_config_get_num_addresses (dst); j++) {
+ const NMPlatformIP4Address *dst_addr = nm_ip4_config_get_address (dst, j);
+
+ if (src_addr->address == dst_addr->address &&
+ src_addr->plen == dst_addr->plen) {
+ nm_ip4_config_del_address (dst, j);
+ break;
+ }
+ }
}
- priv->routes = g_slist_append (priv->routes, nm_ip4_route_dup (route));
-}
+ /* nameservers */
+ for (i = 0; i < nm_ip4_config_get_num_nameservers (src); i++) {
+ guint32 src_ns = nm_ip4_config_get_nameserver (src, i);
-void
-nm_ip4_config_replace_route (NMIP4Config *config,
- guint i,
- NMIP4Route *new_route)
-{
- NMIP4ConfigPrivate *priv;
- GSList *old;
+ for (j = 0; j < nm_ip4_config_get_num_nameservers (dst); j++) {
+ guint32 dst_ns = nm_ip4_config_get_nameserver (dst, j);
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ if (dst_ns == src_ns) {
+ nm_ip4_config_del_nameserver (dst, j);
+ break;
+ }
+ }
+ }
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- old = g_slist_nth (priv->routes, i);
- g_return_if_fail (old != NULL);
- nm_ip4_route_unref ((NMIP4Route *) old->data);
+ /* default gateway */
+ if (nm_ip4_config_get_gateway (src) == nm_ip4_config_get_gateway (dst))
+ nm_ip4_config_set_gateway (dst, 0);
- old->data = nm_ip4_route_dup (new_route);
-}
+ /* routes */
+ for (i = 0; i < nm_ip4_config_get_num_routes (src); i++) {
+ const NMPlatformIP4Route *src_route = nm_ip4_config_get_route (src, i);
-NMIP4Route *
-nm_ip4_config_get_route (NMIP4Config *config, guint i)
-{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+ for (j = 0; j < nm_ip4_config_get_num_routes (dst); j++) {
+ const NMPlatformIP4Route *dst_route = nm_ip4_config_get_route (dst, j);
+
+ if (src_route->network == dst_route->network && src_route->plen == dst_route->plen) {
+ nm_ip4_config_del_route (dst, j);
+ break;
+ }
+ }
+ }
+
+ /* domains */
+ for (i = 0; i < nm_ip4_config_get_num_domains (src); i++) {
+ const char *src_domain = nm_ip4_config_get_domain (src, i);
+
+ for (j = 0; j < nm_ip4_config_get_num_domains (dst); j++) {
+ const char *dst_domain = nm_ip4_config_get_domain (dst, j);
+
+ if (g_strcmp0 (src_domain, dst_domain) == 0) {
+ nm_ip4_config_del_domain (dst, j);
+ break;
+ }
+ }
+ }
+
+ /* dns searches */
+ for (i = 0; i < nm_ip4_config_get_num_searches (src); i++) {
+ const char *src_search = nm_ip4_config_get_search (src, i);
+
+ for (j = 0; j < nm_ip4_config_get_num_searches (dst); j++) {
+ const char *dst_search = nm_ip4_config_get_search (dst, j);
+
+ if (g_strcmp0 (src_search, dst_search) == 0) {
+ nm_ip4_config_del_search (dst, j);
+ break;
+ }
+ }
+ }
+
+ /* MSS */
+ if (nm_ip4_config_get_mss (src) == nm_ip4_config_get_mss (dst))
+ nm_ip4_config_set_mss (dst, 0);
+
+ /* MTU */
+ if (nm_ip4_config_get_mtu (src) == nm_ip4_config_get_mtu (dst))
+ nm_ip4_config_set_mtu (dst, 0);
+
+ /* NIS */
+ for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++) {
+ guint32 src_nis = nm_ip4_config_get_nis_server (src, i);
+
+ for (j = 0; j < nm_ip4_config_get_num_nis_servers (dst); j++) {
+ guint32 dst_nis = nm_ip4_config_get_nis_server (dst, j);
+
+ if (dst_nis == src_nis) {
+ nm_ip4_config_del_nis_server (dst, j);
+ break;
+ }
+ }
+ }
+
+ if (g_strcmp0 (nm_ip4_config_get_nis_domain (src), nm_ip4_config_get_nis_domain (dst)) == 0)
+ nm_ip4_config_set_nis_domain (dst, NULL);
+
+ /* WINS */
+ for (i = 0; i < nm_ip4_config_get_num_wins (src); i++) {
+ guint32 src_wins = nm_ip4_config_get_wins (src, i);
+
+ for (j = 0; j < nm_ip4_config_get_num_wins (dst); j++) {
+ guint32 dst_wins = nm_ip4_config_get_wins (dst, j);
+
+ if (dst_wins == src_wins) {
+ nm_ip4_config_del_wins (dst, j);
+ break;
+ }
+ }
+ }
- return (NMIP4Route *) g_slist_nth_data (NM_IP4_CONFIG_GET_PRIVATE (config)->routes, i);
+ g_object_thaw_notify (G_OBJECT (dst));
}
-guint32 nm_ip4_config_get_num_routes (NMIP4Config *config)
+
+/**
+ * nm_ip4_config_replace:
+ * @dst: config from which to remove everything in @src
+ * @src: config to remove from @dst
+ * @relevant_changes: return whether there are changes to the
+ * destination object that are relevant. This is equal to
+ * nm_ip4_config_equal() showing any difference.
+ *
+ * Replaces everything in @dst with @src so that the two configurations
+ * contain the same content -- with the exception of the dbus path.
+ *
+ * Returns: whether the @dst instance changed in any way (including minor changes,
+ * that are not signaled by the output parameter @relevant_changes).
+ */
+gboolean
+nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relevant_changes)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+#ifndef G_DISABLE_ASSERT
+ gboolean config_equal;
+#endif
+ gboolean has_minor_changes = FALSE, has_relevant_changes = FALSE, are_equal;
+ guint i, num;
+ NMIP4ConfigPrivate *dst_priv, *src_priv;
+ const NMPlatformIP4Address *dst_addr, *src_addr;
+ const NMPlatformIP4Route *dst_route, *src_route;
+
+ g_return_val_if_fail (src != NULL, FALSE);
+ g_return_val_if_fail (dst != NULL, FALSE);
+ g_return_val_if_fail (src != dst, FALSE);
+
+#ifndef G_DISABLE_ASSERT
+ config_equal = nm_ip4_config_equal (dst, src);
+#endif
+
+ dst_priv = NM_IP4_CONFIG_GET_PRIVATE (dst);
+ src_priv = NM_IP4_CONFIG_GET_PRIVATE (src);
+
+ g_object_freeze_notify (G_OBJECT (dst));
+
+ /* never_default */
+ if (src_priv->never_default != dst_priv->never_default) {
+ dst_priv->never_default = src_priv->never_default;
+ has_minor_changes = TRUE;
+ }
+
+ /* default gateway */
+ if (src_priv->gateway != dst_priv->gateway) {
+ nm_ip4_config_set_gateway (dst, src_priv->gateway);
+ has_relevant_changes = TRUE;
+ }
+
+ /* addresses */
+ num = nm_ip4_config_get_num_addresses (src);
+ are_equal = num == nm_ip4_config_get_num_addresses (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (nm_platform_ip4_address_cmp (src_addr = nm_ip4_config_get_address (src, i),
+ dst_addr = nm_ip4_config_get_address (dst, i))) {
+ are_equal = FALSE;
+ if (!addresses_are_duplicate (src_addr, dst_addr, TRUE)) {
+ has_relevant_changes = TRUE;
+ break;
+ }
+ }
+ }
+ } else
+ has_relevant_changes = TRUE;
+ if (!are_equal) {
+ nm_ip4_config_reset_addresses (dst);
+ for (i = 0; i < num; i++)
+ nm_ip4_config_add_address (dst, nm_ip4_config_get_address (src, i));
+ has_minor_changes = TRUE;
+ }
+
+ /* routes */
+ num = nm_ip4_config_get_num_routes (src);
+ are_equal = num == nm_ip4_config_get_num_routes (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (nm_platform_ip4_route_cmp (src_route = nm_ip4_config_get_route (src, i),
+ dst_route = nm_ip4_config_get_route (dst, i))) {
+ are_equal = FALSE;
+ if (!routes_are_duplicate (src_route, dst_route, TRUE)) {
+ has_relevant_changes = TRUE;
+ break;
+ }
+ }
+ }
+ } else
+ has_relevant_changes = TRUE;
+ if (!are_equal) {
+ nm_ip4_config_reset_routes (dst);
+ for (i = 0; i < num; i++)
+ nm_ip4_config_add_route (dst, nm_ip4_config_get_route (src, i));
+ has_minor_changes = TRUE;
+ }
+
+ /* nameservers */
+ num = nm_ip4_config_get_num_nameservers (src);
+ are_equal = num == nm_ip4_config_get_num_nameservers (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (nm_ip4_config_get_nameserver (src, i) != nm_ip4_config_get_nameserver (dst, i)) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip4_config_reset_nameservers (dst);
+ for (i = 0; i < num; i++)
+ nm_ip4_config_add_nameserver (dst, nm_ip4_config_get_nameserver (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* domains */
+ num = nm_ip4_config_get_num_domains (src);
+ are_equal = num == nm_ip4_config_get_num_domains (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (g_strcmp0 (nm_ip4_config_get_domain (src, i),
+ nm_ip4_config_get_domain (dst, i))) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip4_config_reset_domains (dst);
+ for (i = 0; i < num; i++)
+ nm_ip4_config_add_domain (dst, nm_ip4_config_get_domain (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* dns searches */
+ num = nm_ip4_config_get_num_searches (src);
+ are_equal = num == nm_ip4_config_get_num_searches (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (g_strcmp0 (nm_ip4_config_get_search (src, i),
+ nm_ip4_config_get_search (dst, i))) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip4_config_reset_searches (dst);
+ for (i = 0; i < num; i++)
+ nm_ip4_config_add_search (dst, nm_ip4_config_get_search (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* mss */
+ if (src_priv->mss != dst_priv->mss) {
+ nm_ip4_config_set_mss (dst, src_priv->mss);
+ has_minor_changes = TRUE;
+ }
+
+ /* nis */
+ num = nm_ip4_config_get_num_nis_servers (src);
+ are_equal = num == nm_ip4_config_get_num_nis_servers (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (nm_ip4_config_get_nis_server (src, i) != nm_ip4_config_get_nis_server (dst, i)) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip4_config_reset_nis_servers (dst);
+ for (i = 0; i < num; i++)
+ nm_ip4_config_add_nis_server (dst, nm_ip4_config_get_nis_server (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* nis_domain */
+ if (g_strcmp0 (src_priv->nis_domain, dst_priv->nis_domain)) {
+ nm_ip4_config_set_nis_domain (dst, src_priv->nis_domain);
+ has_relevant_changes = TRUE;
+ }
+
+ /* wins */
+ num = nm_ip4_config_get_num_wins (src);
+ are_equal = num == nm_ip4_config_get_num_wins (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (nm_ip4_config_get_wins (src, i) != nm_ip4_config_get_wins (dst, i)) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip4_config_reset_wins (dst);
+ for (i = 0; i < num; i++)
+ nm_ip4_config_add_wins (dst, nm_ip4_config_get_wins (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* mtu */
+ if (src_priv->mtu != dst_priv->mtu) {
+ nm_ip4_config_set_mtu (dst, src_priv->mtu);
+ has_minor_changes = TRUE;
+ }
+
+ /* config_equal does not compare *all* the fields, therefore, we might have has_minor_changes
+ * regardless of config_equal. But config_equal must correspond to has_relevant_changes. */
+ g_assert (config_equal == !has_relevant_changes);
- return g_slist_length (NM_IP4_CONFIG_GET_PRIVATE (config)->routes);
+ g_object_thaw_notify (G_OBJECT (dst));
+
+ if (relevant_changes)
+ *relevant_changes = has_relevant_changes;
+
+ return has_relevant_changes || has_minor_changes;
}
-void nm_ip4_config_reset_routes (NMIP4Config *config)
+void
+nm_ip4_config_dump (const NMIP4Config *config, const char *detail)
{
- NMIP4ConfigPrivate *priv;
+ guint32 i, tmp;
+ const char *str;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ g_return_if_fail (config != NULL);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- g_slist_foreach (priv->routes, (GFunc) g_free, NULL);
- priv->routes = NULL;
+ g_message ("--------- NMIP4Config %p (%s)", config, detail);
+
+ str = nm_ip4_config_get_dbus_path (config);
+ if (str)
+ g_message (" path: %s", str);
+
+ /* addresses */
+ for (i = 0; i < nm_ip4_config_get_num_addresses (config); i++)
+ g_message (" a: %s", nm_platform_ip4_address_to_string (nm_ip4_config_get_address (config, i)));
+
+ /* default gateway */
+ tmp = nm_ip4_config_get_gateway (config);
+ g_message (" gw: %s", nm_utils_inet4_ntop (tmp, NULL));
+
+ /* nameservers */
+ for (i = 0; i < nm_ip4_config_get_num_nameservers (config); i++) {
+ tmp = nm_ip4_config_get_nameserver (config, i);
+ g_message (" ns: %s", nm_utils_inet4_ntop (tmp, NULL));
+ }
+
+ /* routes */
+ for (i = 0; i < nm_ip4_config_get_num_routes (config); i++)
+ g_message (" rt: %s", nm_platform_ip4_route_to_string (nm_ip4_config_get_route (config, i)));
+
+ /* domains */
+ for (i = 0; i < nm_ip4_config_get_num_domains (config); i++)
+ g_message (" domain: %s", nm_ip4_config_get_domain (config, i));
+
+ /* dns searches */
+ for (i = 0; i < nm_ip4_config_get_num_searches (config); i++)
+ g_message (" search: %s", nm_ip4_config_get_search (config, i));
+
+ g_message (" mss: %u", nm_ip4_config_get_mss (config));
+ g_message (" mtu: %u", nm_ip4_config_get_mtu (config));
+
+ /* NIS */
+ for (i = 0; i < nm_ip4_config_get_num_nis_servers (config); i++) {
+ tmp = nm_ip4_config_get_nis_server (config, i);
+ g_message (" nis: %s", nm_utils_inet4_ntop (tmp, NULL));
+ }
+
+ g_message (" nisdmn: %s", nm_ip4_config_get_nis_domain (config));
+
+ /* WINS */
+ for (i = 0; i < nm_ip4_config_get_num_wins (config); i++) {
+ tmp = nm_ip4_config_get_wins (config, i);
+ g_message (" wins: %s", nm_utils_inet4_ntop (tmp, NULL));
+ }
+
+ g_message (" n-dflt: %d", nm_ip4_config_get_never_default (config));
}
-void nm_ip4_config_add_domain (NMIP4Config *config, const char *domain)
+gboolean
+nm_ip4_config_destination_is_direct (const NMIP4Config *config, guint32 network, int plen)
{
- NMIP4ConfigPrivate *priv;
+ guint naddresses = nm_ip4_config_get_num_addresses (config);
int i;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (domain != NULL);
- g_return_if_fail (strlen (domain) > 0);
-
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ for (i = 0; i < naddresses; i++) {
+ const NMPlatformIP4Address *item = nm_ip4_config_get_address (config, i);
- for (i = 0; i < priv->domains->len; i++) {
- if (!strcmp (g_ptr_array_index (priv->domains, i), domain))
- return;
+ if (item->plen <= plen && same_prefix (item->address, network, item->plen))
+ return TRUE;
}
- g_ptr_array_add (priv->domains, g_strdup (domain));
+ return FALSE;
}
-const char *nm_ip4_config_get_domain (NMIP4Config *config, guint i)
+/******************************************************************/
+
+void
+nm_ip4_config_set_never_default (NMIP4Config *config, gboolean never_default)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return (const char *) g_ptr_array_index (NM_IP4_CONFIG_GET_PRIVATE (config)->domains, i);
+ priv->never_default = !!never_default;
}
-guint32 nm_ip4_config_get_num_domains (NMIP4Config *config)
+gboolean
+nm_ip4_config_get_never_default (const NMIP4Config *config)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return NM_IP4_CONFIG_GET_PRIVATE (config)->domains->len;
+ return priv->never_default;
}
-void nm_ip4_config_reset_domains (NMIP4Config *config)
+void
+nm_ip4_config_set_gateway (NMIP4Config *config, guint32 gateway)
{
- NMIP4ConfigPrivate *priv;
- int i;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ if (priv->gateway != gateway) {
+ priv->gateway = gateway;
+ _NOTIFY (config, PROP_GATEWAY);
+ }
+}
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->domains->len; i++)
- g_free (g_ptr_array_index (priv->domains, i));
- g_ptr_array_free (priv->domains, TRUE);
- priv->domains = g_ptr_array_sized_new (3);
+guint32
+nm_ip4_config_get_gateway (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ return priv->gateway;
}
-void nm_ip4_config_add_search (NMIP4Config *config, const char *search)
+/******************************************************************/
+
+void
+nm_ip4_config_reset_addresses (NMIP4Config *config)
{
- NMIP4ConfigPrivate *priv;
- int i;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- g_return_if_fail (config != NULL);
- g_return_if_fail (search != NULL);
- g_return_if_fail (strlen (search) > 0);
+ if (priv->addresses->len != 0) {
+ g_array_set_size (priv->addresses, 0);
+ _NOTIFY (config, PROP_ADDRESSES);
+ }
+}
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+/**
+ * nm_ip4_config_add_address:
+ * @config: the #NMIP4Config
+ * @new: the new address to add to @config
+ *
+ * Adds the new address to @config. If an address with the same basic properties
+ * (address, prefix) already exists in @config, it is overwritten with the
+ * lifetime and preferred of @new. The source is also overwritten by the source
+ * from @new if that source is higher priority.
+ */
+void
+nm_ip4_config_add_address (NMIP4Config *config, const NMPlatformIP4Address *new)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ NMPlatformIP4Address item_old;
+ int i;
- for (i = 0; i < priv->searches->len; i++) {
- if (!strcmp (g_ptr_array_index (priv->searches, i), search))
- return;
+ g_return_if_fail (new != NULL);
+
+ for (i = 0; i < priv->addresses->len; i++ ) {
+ NMPlatformIP4Address *item = &g_array_index (priv->addresses, NMPlatformIP4Address, i);
+
+ if (addresses_are_duplicate (item, new, FALSE)) {
+ if (nm_platform_ip4_address_cmp (item, new) == 0)
+ return;
+
+ /* remember the old values. */
+ item_old = *item;
+ /* Copy over old item to get new lifetime, timestamp, preferred */
+ *item = *new;
+
+ /* But restore highest priority source */
+ item->source = MAX (item_old.source, new->source);
+
+ /* for addresses that we read from the kernel, we keep the timestamps as defined
+ * by the previous source (item_old). The reason is, that the other source configured the lifetimes
+ * with "what should be" and the kernel values are "what turned out after configuring it".
+ *
+ * For other sources, the longer lifetime wins. */
+ if ( (new->source == NM_PLATFORM_SOURCE_KERNEL && new->source != item_old.source)
+ || nm_platform_ip_address_cmp_expiry ((const NMPlatformIPAddress *) &item_old, (const NMPlatformIPAddress *) new) > 0) {
+ item->timestamp = item_old.timestamp;
+ item->lifetime = item_old.lifetime;
+ item->preferred = item_old.preferred;
+ }
+ if (nm_platform_ip4_address_cmp (&item_old, item) == 0)
+ return;
+ goto NOTIFY;
+ }
}
- g_ptr_array_add (priv->searches, g_strdup (search));
+ g_array_append_val (priv->addresses, *new);
+NOTIFY:
+ _NOTIFY (config, PROP_ADDRESSES);
}
-const char *nm_ip4_config_get_search (NMIP4Config *config, guint i)
+void
+nm_ip4_config_del_address (NMIP4Config *config, guint i)
{
- g_return_val_if_fail (config != NULL, NULL);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ g_return_if_fail (i < priv->addresses->len);
- return (const char *) g_ptr_array_index (NM_IP4_CONFIG_GET_PRIVATE (config)->searches, i);
+ g_array_remove_index (priv->addresses, i);
+ _NOTIFY (config, PROP_ADDRESSES);
}
-guint32 nm_ip4_config_get_num_searches (NMIP4Config *config)
+guint
+nm_ip4_config_get_num_addresses (const NMIP4Config *config)
{
- g_return_val_if_fail (config != NULL, 0);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return NM_IP4_CONFIG_GET_PRIVATE (config)->searches->len;
+ return priv->addresses->len;
}
-void nm_ip4_config_reset_searches (NMIP4Config *config)
+const NMPlatformIP4Address *
+nm_ip4_config_get_address (const NMIP4Config *config, guint i)
{
- NMIP4ConfigPrivate *priv;
- int i;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ return &g_array_index (priv->addresses, NMPlatformIP4Address, i);
+}
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->searches->len; i++)
- g_free (g_ptr_array_index (priv->searches, i));
- g_ptr_array_free (priv->searches, TRUE);
- priv->searches = g_ptr_array_sized_new (3);
+gboolean
+nm_ip4_config_address_exists (const NMIP4Config *config,
+ const NMPlatformIP4Address *needle)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ guint i;
+
+ for (i = 0; i < priv->addresses->len; i++) {
+ const NMPlatformIP4Address *haystack = &g_array_index (priv->addresses, NMPlatformIP4Address, i);
+
+ if (needle->address == haystack->address && needle->plen == haystack->plen)
+ return TRUE;
+ }
+ return FALSE;
}
-guint32 nm_ip4_config_get_mtu (NMIP4Config *config)
+/******************************************************************/
+
+void
+nm_ip4_config_reset_routes (NMIP4Config *config)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return NM_IP4_CONFIG_GET_PRIVATE (config)->mtu;
+ if (priv->routes->len != 0) {
+ g_array_set_size (priv->routes, 0);
+ _NOTIFY (config, PROP_ROUTES);
+ }
}
-void nm_ip4_config_set_mtu (NMIP4Config *config, guint32 mtu)
+/**
+ * nm_ip4_config_add_route:
+ * @config: the #NMIP4Config
+ * @new: the new route to add to @config
+ *
+ * Adds the new route to @config. If a route with the same basic properties
+ * (network, prefix) already exists in @config, it is overwritten including the
+ * gateway and metric of @new. The source is also overwritten by the source
+ * from @new if that source is higher priority.
+ */
+void
+nm_ip4_config_add_route (NMIP4Config *config, const NMPlatformIP4Route *new)
{
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ NMPlatformSource old_source;
+ int i;
+
+ g_return_if_fail (new != NULL);
+
+ for (i = 0; i < priv->routes->len; i++ ) {
+ NMPlatformIP4Route *item = &g_array_index (priv->routes, NMPlatformIP4Route, i);
- NM_IP4_CONFIG_GET_PRIVATE (config)->mtu = mtu;
+ if (routes_are_duplicate (item, new, FALSE)) {
+ if (nm_platform_ip4_route_cmp (item, new) == 0)
+ return;
+ old_source = item->source;
+ memcpy (item, new, sizeof (*item));
+ /* Restore highest priority source */
+ item->source = MAX (old_source, new->source);
+ goto NOTIFY;
+ }
+ }
+
+ g_array_append_val (priv->routes, *new);
+NOTIFY:
+ _NOTIFY (config, PROP_ROUTES);
}
-guint32 nm_ip4_config_get_mss (NMIP4Config *config)
+void
+nm_ip4_config_del_route (NMIP4Config *config, guint i)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ g_return_if_fail (i < priv->routes->len);
- return NM_IP4_CONFIG_GET_PRIVATE (config)->mss;
+ g_array_remove_index (priv->routes, i);
+ _NOTIFY (config, PROP_ROUTES);
}
-void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss)
+guint
+nm_ip4_config_get_num_routes (const NMIP4Config *config)
{
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- NM_IP4_CONFIG_GET_PRIVATE (config)->mss = mss;
+ return priv->routes->len;
}
-gboolean
-nm_ip4_config_get_never_default (NMIP4Config *config)
+const NMPlatformIP4Route *
+nm_ip4_config_get_route (const NMIP4Config *config, guint i)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), FALSE);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return NM_IP4_CONFIG_GET_PRIVATE (config)->never_default;
+ return &g_array_index (priv->routes, NMPlatformIP4Route, i);
}
+/******************************************************************/
+
void
-nm_ip4_config_set_never_default (NMIP4Config *config, gboolean never_default)
+nm_ip4_config_reset_nameservers (NMIP4Config *config)
{
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- NM_IP4_CONFIG_GET_PRIVATE (config)->never_default = never_default;
+ if (priv->nameservers->len != 0) {
+ g_array_set_size (priv->nameservers, 0);
+ _NOTIFY (config, PROP_NAMESERVERS);
+ }
}
-void nm_ip4_config_add_nis_server (NMIP4Config *config, guint32 nis)
+void
+nm_ip4_config_add_nameserver (NMIP4Config *config, guint32 new)
{
- NMIP4ConfigPrivate *priv;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
int i;
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
- g_return_if_fail (nis > 0);
-
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->nis->len; i++) {
- guint32 s = g_array_index (priv->nis, guint32, i);
+ g_return_if_fail (new != 0);
- /* No dupes */
- g_return_if_fail (nis != s);
- }
+ for (i = 0; i < priv->nameservers->len; i++)
+ if (new == g_array_index (priv->nameservers, guint32, i))
+ return;
- g_array_append_val (priv->nis, nis);
+ g_array_append_val (priv->nameservers, new);
+ _NOTIFY (config, PROP_NAMESERVERS);
}
-guint32 nm_ip4_config_get_nis_server (NMIP4Config *config, guint i)
+void
+nm_ip4_config_del_nameserver (NMIP4Config *config, guint i)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ g_return_if_fail (i < priv->nameservers->len);
- return g_array_index (NM_IP4_CONFIG_GET_PRIVATE (config)->nis, guint32, i);
+ g_array_remove_index (priv->nameservers, i);
+ _NOTIFY (config, PROP_NAMESERVERS);
}
-guint32 nm_ip4_config_get_num_nis_servers (NMIP4Config *config)
+guint32
+nm_ip4_config_get_num_nameservers (const NMIP4Config *config)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return NM_IP4_CONFIG_GET_PRIVATE (config)->nis->len;
+ return priv->nameservers->len;
}
-void nm_ip4_config_reset_nis_servers (NMIP4Config *config)
+guint32
+nm_ip4_config_get_nameserver (const NMIP4Config *config, guint i)
{
- NMIP4ConfigPrivate *priv;
-
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (priv->nis->len)
- g_array_remove_range (priv->nis, 0, priv->nis->len);
+ return g_array_index (priv->nameservers, guint32, i);
}
+/******************************************************************/
+
void
-nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain)
+nm_ip4_config_reset_domains (NMIP4Config *config)
{
- NMIP4ConfigPrivate *priv;
-
- g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- g_free (priv->nis_domain);
- priv->nis_domain = g_strdup (domain);
+ if (priv->domains->len != 0) {
+ g_ptr_array_set_size (priv->domains, 0);
+ _NOTIFY (config, PROP_DOMAINS);
+ }
}
-const char *
-nm_ip4_config_get_nis_domain (NMIP4Config *config)
+void
+nm_ip4_config_add_domain (NMIP4Config *config, const char *domain)
{
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ int i;
- return NM_IP4_CONFIG_GET_PRIVATE (config)->nis_domain;
-}
+ g_return_if_fail (domain != NULL);
+ g_return_if_fail (domain[0] != '\0');
-/* libnl convenience/conversion functions */
+ for (i = 0; i < priv->domains->len; i++)
+ if (!g_strcmp0 (g_ptr_array_index (priv->domains, i), domain))
+ return;
-static int ip4_addr_to_rtnl_local (guint32 ip4_address, struct rtnl_addr *addr)
+ g_ptr_array_add (priv->domains, g_strdup (domain));
+ _NOTIFY (config, PROP_DOMAINS);
+}
+
+void
+nm_ip4_config_del_domain (NMIP4Config *config, guint i)
{
- struct nl_addr * local = NULL;
- int err = 0;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ g_return_if_fail (i < priv->domains->len);
- g_return_val_if_fail (addr != NULL, -1);
+ g_ptr_array_remove_index (priv->domains, i);
+ _NOTIFY (config, PROP_DOMAINS);
+}
- local = nm_utils_ip4_addr_to_nl_addr (ip4_address);
- err = rtnl_addr_set_local (addr, local);
- nl_addr_put (local);
+guint32
+nm_ip4_config_get_num_domains (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return err;
+ return priv->domains->len;
}
-static int ip4_addr_to_rtnl_peer (guint32 ip4_address, struct rtnl_addr *addr)
+const char *
+nm_ip4_config_get_domain (const NMIP4Config *config, guint i)
{
- struct nl_addr * peer = NULL;
- int err = 0;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- g_return_val_if_fail (addr != NULL, -1);
+ return g_ptr_array_index (priv->domains, i);
+}
- peer = nm_utils_ip4_addr_to_nl_addr (ip4_address);
- err = rtnl_addr_set_peer (addr, peer);
- nl_addr_put (peer);
+/******************************************************************/
- return err;
+void
+nm_ip4_config_reset_searches (NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ if (priv->searches->len != 0) {
+ g_ptr_array_set_size (priv->searches, 0);
+ _NOTIFY (config, PROP_SEARCHES);
+ }
}
-static int ip4_addr_to_rtnl_broadcast (guint32 ip4_broadcast, struct rtnl_addr *addr)
+void
+nm_ip4_config_add_search (NMIP4Config *config, const char *new)
{
- struct nl_addr * local = NULL;
- int err = 0;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ int i;
- g_return_val_if_fail (addr != NULL, -1);
+ g_return_if_fail (new != NULL);
+ g_return_if_fail (new[0] != '\0');
- local = nm_utils_ip4_addr_to_nl_addr (ip4_broadcast);
- err = rtnl_addr_set_broadcast (addr, local);
- nl_addr_put (local);
+ for (i = 0; i < priv->searches->len; i++)
+ if (!g_strcmp0 (g_ptr_array_index (priv->searches, i), new))
+ return;
- return err;
+ g_ptr_array_add (priv->searches, g_strdup (new));
+ _NOTIFY (config, PROP_SEARCHES);
}
-
-struct rtnl_addr *
-nm_ip4_config_to_rtnl_addr (NMIP4Config *config, guint32 i, guint32 flags)
+void
+nm_ip4_config_del_search (NMIP4Config *config, guint i)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- NMIP4Address *config_addr;
- struct rtnl_addr *addr;
- gboolean success = TRUE;
- g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+ g_return_if_fail (i < priv->searches->len);
- config_addr = nm_ip4_config_get_address (config, i);
- g_return_val_if_fail (config_addr != NULL, NULL);
+ g_ptr_array_remove_index (priv->searches, i);
+ _NOTIFY (config, PROP_SEARCHES);
+}
- if (!(addr = rtnl_addr_alloc()))
- return NULL;
+guint32
+nm_ip4_config_get_num_searches (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (flags & NM_RTNL_ADDR_ADDR)
- success = (ip4_addr_to_rtnl_local (nm_ip4_address_get_address (config_addr), addr) >= 0);
+ return priv->searches->len;
+}
- if (flags & NM_RTNL_ADDR_PTP_ADDR)
- success = (ip4_addr_to_rtnl_peer (priv->ptp_address, addr) >= 0);
+const char *
+nm_ip4_config_get_search (const NMIP4Config *config, guint i)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (flags & NM_RTNL_ADDR_PREFIX)
- rtnl_addr_set_prefixlen (addr, nm_ip4_address_get_prefix (config_addr));
+ return g_ptr_array_index (priv->searches, i);
+}
- if (flags & NM_RTNL_ADDR_BROADCAST) {
- guint32 hostmask, network, bcast, netmask;
+/******************************************************************/
- netmask = nm_utils_ip4_prefix_to_netmask (nm_ip4_address_get_prefix (config_addr));
- network = ntohl (nm_ip4_address_get_address (config_addr)) & ntohl (netmask);
- hostmask = ~ntohl (netmask);
- bcast = htonl (network | hostmask);
+void
+nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- success = (ip4_addr_to_rtnl_broadcast (bcast, addr) >= 0);
- }
+ priv->mss = mss;
+}
- if (!success) {
- rtnl_addr_put (addr);
- addr = NULL;
- }
+guint32
+nm_ip4_config_get_mss (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return addr;
+ return priv->mss;
}
-static gboolean
-addr_slist_compare (GSList *a, GSList *b)
+/******************************************************************/
+
+void
+nm_ip4_config_reset_nis_servers (NMIP4Config *config)
{
- GSList *iter_a, *iter_b;
- gboolean found = FALSE;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (iter_a = a; iter_a; iter_a = g_slist_next (iter_a)) {
- NMIP4Address *addr_a = (NMIP4Address *) iter_a->data;
+ g_array_set_size (priv->nis, 0);
+}
- for (iter_b = b, found = FALSE; iter_b; iter_b = g_slist_next (iter_b)) {
- NMIP4Address *addr_b = (NMIP4Address *) iter_b->data;
+void
+nm_ip4_config_add_nis_server (NMIP4Config *config, guint32 nis)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ int i;
- if (nm_ip4_address_compare (addr_a, addr_b)) {
- found = TRUE;
- break;
- }
- }
+ for (i = 0; i < priv->nis->len; i++)
+ if (nis == g_array_index (priv->nis, guint32, i))
+ return;
- if (!found)
- return FALSE;
- }
- return TRUE;
+ g_array_append_val (priv->nis, nis);
}
-static gboolean
-route_slist_compare (GSList *a, GSList *b)
+void
+nm_ip4_config_del_nis_server (NMIP4Config *config, guint i)
{
- GSList *iter_a, *iter_b;
- gboolean found = FALSE;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (iter_a = a; iter_a; iter_a = g_slist_next (iter_a)) {
- NMIP4Route *route_a = (NMIP4Route *) iter_a->data;
+ g_return_if_fail (i < priv->nis->len);
- for (iter_b = b, found = FALSE; iter_b; iter_b = g_slist_next (iter_b)) {
- NMIP4Route *route_b = (NMIP4Route *) iter_b->data;
+ g_array_remove_index (priv->nis, i);
+}
- if (nm_ip4_route_compare (route_a, route_b)) {
- found = TRUE;
- break;
- }
- }
+guint32
+nm_ip4_config_get_num_nis_servers (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (!found)
- return FALSE;
- }
- return TRUE;
+ return priv->nis->len;
}
-static gboolean
-string_array_compare (GPtrArray *a, GPtrArray *b)
+guint32
+nm_ip4_config_get_nis_server (const NMIP4Config *config, guint i)
{
- int i, j;
- gboolean found = FALSE;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < a->len; i++) {
- for (j = 0, found = FALSE; j < b->len; j++) {
- const char *item_a = g_ptr_array_index (a, i);
- const char *item_b = g_ptr_array_index (b, j);
+ return g_array_index (priv->nis, guint32, i);
+}
- if ((!item_a && !item_b) || (item_a && item_b && !strcmp (item_a, item_b))) {
- found = TRUE;
- break;
- }
- }
+void
+nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (!found)
- return FALSE;
- }
- return TRUE;
+ g_free (priv->nis_domain);
+ priv->nis_domain = g_strdup (domain);
}
-static gboolean
-addr_array_compare (GArray *a, GArray *b)
+const char *
+nm_ip4_config_get_nis_domain (const NMIP4Config *config)
{
- int i, j;
- gboolean found = FALSE;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < a->len; i++) {
- for (j = 0, found = FALSE; j < b->len; j++) {
- if (g_array_index (a, guint32, i) == g_array_index (b, guint32, j)) {
- found = TRUE;
- break;
- }
- }
+ return priv->nis_domain;
+}
- if (!found)
- return FALSE;
+/******************************************************************/
+
+void
+nm_ip4_config_reset_wins (NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ if (priv->wins->len != 0) {
+ g_array_set_size (priv->wins, 0);
+ _NOTIFY (config, PROP_WINS_SERVERS);
}
- return TRUE;
}
-NMIP4ConfigCompareFlags
-nm_ip4_config_diff (NMIP4Config *a, NMIP4Config *b)
+void
+nm_ip4_config_add_wins (NMIP4Config *config, guint32 wins)
{
- NMIP4ConfigPrivate *a_priv;
- NMIP4ConfigPrivate *b_priv;
- NMIP4ConfigCompareFlags flags = NM_IP4_COMPARE_FLAG_NONE;
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ int i;
- if ((a && !b) || (b && !a))
- return NM_IP4_COMPARE_FLAG_ALL;
- if (!a && !b)
- return NM_IP4_COMPARE_FLAG_NONE;
+ g_return_if_fail (wins != 0);
- a_priv = NM_IP4_CONFIG_GET_PRIVATE (a);
- b_priv = NM_IP4_CONFIG_GET_PRIVATE (b);
+ for (i = 0; i < priv->wins->len; i++)
+ if (wins == g_array_index (priv->wins, guint32, i))
+ return;
- if ( !addr_slist_compare (a_priv->addresses, b_priv->addresses)
- || !addr_slist_compare (b_priv->addresses, a_priv->addresses))
- flags |= NM_IP4_COMPARE_FLAG_ADDRESSES;
+ g_array_append_val (priv->wins, wins);
+ _NOTIFY (config, PROP_WINS_SERVERS);
+}
- if (a_priv->ptp_address != b_priv->ptp_address)
- flags |= NM_IP4_COMPARE_FLAG_PTP_ADDRESS;
+void
+nm_ip4_config_del_wins (NMIP4Config *config, guint i)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if ( (a_priv->nameservers->len != b_priv->nameservers->len)
- || !addr_array_compare (a_priv->nameservers, b_priv->nameservers)
- || !addr_array_compare (b_priv->nameservers, a_priv->nameservers))
- flags |= NM_IP4_COMPARE_FLAG_NAMESERVERS;
+ g_return_if_fail (i < priv->wins->len);
- if ( (a_priv->wins->len != b_priv->wins->len)
- || !addr_array_compare (a_priv->wins, b_priv->wins)
- || !addr_array_compare (b_priv->wins, a_priv->wins))
- flags |= NM_IP4_COMPARE_FLAG_WINS_SERVERS;
+ g_array_remove_index (priv->wins, i);
+ _NOTIFY (config, PROP_WINS_SERVERS);
+}
- if ( (a_priv->nis->len != b_priv->nis->len)
- || !addr_array_compare (a_priv->nis, b_priv->nis)
- || !addr_array_compare (b_priv->nis, a_priv->nis))
- flags |= NM_IP4_COMPARE_FLAG_NIS_SERVERS;
+guint32
+nm_ip4_config_get_num_wins (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if ( (a_priv->nis_domain || b_priv->nis_domain)
- && (g_strcmp0 (a_priv->nis_domain, b_priv->nis_domain) != 0))
- flags |= NM_IP4_COMPARE_FLAG_NIS_DOMAIN;
+ return priv->wins->len;
+}
- if ( !route_slist_compare (a_priv->routes, b_priv->routes)
- || !route_slist_compare (b_priv->routes, a_priv->routes))
- flags |= NM_IP4_COMPARE_FLAG_ROUTES;
+guint32
+nm_ip4_config_get_wins (const NMIP4Config *config, guint i)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if ( (a_priv->domains->len != b_priv->domains->len)
- || !string_array_compare (a_priv->domains, b_priv->domains)
- || !string_array_compare (b_priv->domains, a_priv->domains))
- flags |= NM_IP4_COMPARE_FLAG_DOMAINS;
+ return g_array_index (priv->wins, guint32, i);
+}
- if ( (a_priv->searches->len != b_priv->searches->len)
- || !string_array_compare (a_priv->searches, b_priv->searches)
- || !string_array_compare (b_priv->searches, a_priv->searches))
- flags |= NM_IP4_COMPARE_FLAG_SEARCHES;
+/******************************************************************/
- if (a_priv->mtu != b_priv->mtu)
- flags |= NM_IP4_COMPARE_FLAG_MTU;
+void
+nm_ip4_config_set_mtu (NMIP4Config *config, guint32 mtu)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- if (a_priv->mss != b_priv->mss)
- flags |= NM_IP4_COMPARE_FLAG_MSS;
+ priv->mtu = mtu;
+}
+
+guint32
+nm_ip4_config_get_mtu (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- return flags;
+ return priv->mtu;
}
+/******************************************************************/
+
static inline void
hash_u32 (GChecksum *sum, guint32 n)
{
@@ -820,36 +1527,32 @@ hash_u32 (GChecksum *sum, guint32 n)
}
void
-nm_ip4_config_hash (NMIP4Config *config, GChecksum *sum, gboolean dns_only)
+nm_ip4_config_hash (const NMIP4Config *config, GChecksum *sum, gboolean dns_only)
{
- guint32 i, n;
+ guint32 i;
const char *s;
- g_return_if_fail (config != NULL);
- g_return_if_fail (sum != NULL);
+ g_return_if_fail (config);
+ g_return_if_fail (sum);
- if (dns_only == FALSE) {
- for (i = 0; i < nm_ip4_config_get_num_addresses (config); i++) {
- NMIP4Address *a = nm_ip4_config_get_address (config, i);
+ if (!dns_only) {
+ hash_u32 (sum, nm_ip4_config_get_gateway (config));
- hash_u32 (sum, nm_ip4_address_get_address (a));
- hash_u32 (sum, nm_ip4_address_get_prefix (a));
- hash_u32 (sum, nm_ip4_address_get_gateway (a));
+ for (i = 0; i < nm_ip4_config_get_num_addresses (config); i++) {
+ const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
+ hash_u32 (sum, address->address);
+ hash_u32 (sum, address->plen);
}
for (i = 0; i < nm_ip4_config_get_num_routes (config); i++) {
- NMIP4Route *r = nm_ip4_config_get_route (config, i);
+ const NMPlatformIP4Route *route = nm_ip4_config_get_route (config, i);
- hash_u32 (sum, nm_ip4_route_get_dest (r));
- hash_u32 (sum, nm_ip4_route_get_prefix (r));
- hash_u32 (sum, nm_ip4_route_get_next_hop (r));
- hash_u32 (sum, nm_ip4_route_get_metric (r));
+ hash_u32 (sum, route->network);
+ hash_u32 (sum, route->plen);
+ hash_u32 (sum, route->gateway);
+ hash_u32 (sum, route->metric);
}
- n = nm_ip4_config_get_ptp_address (config);
- if (n)
- hash_u32 (sum, n);
-
for (i = 0; i < nm_ip4_config_get_num_nis_servers (config); i++)
hash_u32 (sum, nm_ip4_config_get_nis_server (config, i));
@@ -875,16 +1578,60 @@ nm_ip4_config_hash (NMIP4Config *config, GChecksum *sum, gboolean dns_only)
}
}
+/**
+ * nm_ip4_config_equal:
+ * @a: first config to compare
+ * @b: second config to compare
+ *
+ * Compares two #NMIP4Configs for basic equality. This means that all
+ * attributes must exist in the same order in both configs (addresses, routes,
+ * domains, DNS servers, etc) but some attributes (address lifetimes, and address
+ * and route sources) are ignored.
+ *
+ * Returns: %TRUE if the configurations are basically equal to each other,
+ * %FALSE if not
+ */
+gboolean
+nm_ip4_config_equal (const NMIP4Config *a, const NMIP4Config *b)
+{
+ GChecksum *a_checksum = g_checksum_new (G_CHECKSUM_SHA1);
+ GChecksum *b_checksum = g_checksum_new (G_CHECKSUM_SHA1);
+ gsize a_len = g_checksum_type_get_length (G_CHECKSUM_SHA1);
+ gsize b_len = g_checksum_type_get_length (G_CHECKSUM_SHA1);
+ guchar a_data[a_len], b_data[b_len];
+ gboolean equal;
+
+ if (a)
+ nm_ip4_config_hash (a, a_checksum, FALSE);
+ if (b)
+ nm_ip4_config_hash (b, b_checksum, FALSE);
+
+ g_checksum_get_digest (a_checksum, a_data, &a_len);
+ g_checksum_get_digest (b_checksum, b_data, &b_len);
+
+ g_assert (a_len == b_len);
+ equal = !memcmp (a_data, b_data, a_len);
+
+ g_checksum_free (a_checksum);
+ g_checksum_free (b_checksum);
+
+ return equal;
+}
+
+/******************************************************************/
+
static void
nm_ip4_config_init (NMIP4Config *config)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- priv->nameservers = g_array_new (FALSE, TRUE, sizeof (guint32));
- priv->wins = g_array_new (FALSE, TRUE, sizeof (guint32));
- priv->domains = g_ptr_array_sized_new (3);
- priv->searches = g_ptr_array_sized_new (3);
+ priv->addresses = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Address));
+ priv->routes = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Route));
+ priv->nameservers = g_array_new (FALSE, FALSE, sizeof (guint32));
+ priv->domains = g_ptr_array_new_with_free_func (g_free);
+ priv->searches = g_ptr_array_new_with_free_func (g_free);
priv->nis = g_array_new (FALSE, TRUE, sizeof (guint32));
+ priv->wins = g_array_new (FALSE, TRUE, sizeof (guint32));
}
static void
@@ -892,14 +1639,14 @@ finalize (GObject *object)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (object);
- nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip4_address_unref);
- nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
- g_array_free (priv->wins, TRUE);
- g_array_free (priv->nameservers, TRUE);
- g_ptr_array_free (priv->domains, TRUE);
- g_ptr_array_free (priv->searches, TRUE);
- g_array_free (priv->nis, TRUE);
+ g_array_unref (priv->addresses);
+ g_array_unref (priv->routes);
+ g_array_unref (priv->nameservers);
+ g_ptr_array_unref (priv->domains);
+ g_ptr_array_unref (priv->searches);
+ g_array_unref (priv->nis);
g_free (priv->nis_domain);
+ g_array_unref (priv->wins);
G_OBJECT_CLASS (nm_ip4_config_parent_class)->finalize (object);
}
@@ -908,11 +1655,56 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
+ NMIP4Config *config = NM_IP4_CONFIG (object);
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (object);
switch (prop_id) {
+ case PROP_GATEWAY:
+ if (priv->gateway)
+ g_value_set_string (value, nm_utils_inet4_ntop (priv->gateway, NULL));
+ else
+ g_value_set_string (value, NULL);
+ break;
case PROP_ADDRESSES:
- nm_utils_ip4_addresses_to_gvalue (priv->addresses, value);
+ {
+ GPtrArray *addresses = g_ptr_array_new ();
+ int naddr = nm_ip4_config_get_num_addresses (config);
+ int i;
+
+ for (i = 0; i < naddr; i++) {
+ const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
+ GArray *array = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3);
+
+ g_array_append_val (array, address->address);
+ g_array_append_val (array, address->plen);
+ g_array_append_val (array, priv->gateway);
+
+ g_ptr_array_add (addresses, array);
+ }
+
+ g_value_take_boxed (value, addresses);
+ }
+ break;
+ case PROP_ROUTES:
+ {
+ GPtrArray *routes = g_ptr_array_new ();
+ guint nroutes = nm_ip4_config_get_num_routes (config);
+ int i;
+
+ for (i = 0; i < nroutes; i++) {
+ const NMPlatformIP4Route *route = nm_ip4_config_get_route (config, i);
+ GArray *array = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 4);
+
+ g_array_append_val (array, route->network);
+ g_array_append_val (array, route->plen);
+ g_array_append_val (array, route->gateway);
+ g_array_append_val (array, route->metric);
+
+ g_ptr_array_add (routes, array);
+ }
+
+ g_value_take_boxed (value, routes);
+ }
break;
case PROP_NAMESERVERS:
g_value_set_boxed (value, priv->nameservers);
@@ -920,8 +1712,8 @@ get_property (GObject *object, guint prop_id,
case PROP_DOMAINS:
g_value_set_boxed (value, priv->domains);
break;
- case PROP_ROUTES:
- nm_utils_ip4_routes_to_gvalue (priv->routes, value);
+ case PROP_SEARCHES:
+ g_value_set_boxed (value, priv->searches);
break;
case PROP_WINS_SERVERS:
g_value_set_boxed (value, priv->wins);
@@ -939,47 +1731,55 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
g_type_class_add_private (config_class, sizeof (NMIP4ConfigPrivate));
- /* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
- /* properties */
- g_object_class_install_property
- (object_class, PROP_ADDRESSES,
+ obj_properties[PROP_GATEWAY] =
+ g_param_spec_string (NM_IP4_CONFIG_GATEWAY,
+ "Gateway",
+ "IP4 gateway",
+ NULL,
+ G_PARAM_READABLE);
+ obj_properties[PROP_ADDRESSES] =
g_param_spec_boxed (NM_IP4_CONFIG_ADDRESSES,
- "Addresses",
- "IP4 addresses",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_PARAM_READABLE));
- g_object_class_install_property
- (object_class, PROP_NAMESERVERS,
+ "Addresses",
+ "IP4 addresses",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_PARAM_READABLE);
+ obj_properties[PROP_ROUTES] =
+ g_param_spec_boxed (NM_IP4_CONFIG_ROUTES,
+ "Routes",
+ "Routes",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_PARAM_READABLE);
+ obj_properties[PROP_NAMESERVERS] =
g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS,
- "Nameservers",
- "DNS list",
- DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READABLE));
- g_object_class_install_property
- (object_class, PROP_DOMAINS,
+ "Nameservers",
+ "DNS list",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READABLE);
+ obj_properties[PROP_DOMAINS] =
g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS,
- "Domains",
- "Domains",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE));
- g_object_class_install_property
- (object_class, PROP_ROUTES,
- g_param_spec_boxed (NM_IP4_CONFIG_ROUTES,
- "Routes",
- "Routes",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_PARAM_READABLE));
- g_object_class_install_property
- (object_class, PROP_WINS_SERVERS,
+ "Domains",
+ "Domains",
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_PARAM_READABLE);
+ obj_properties[PROP_SEARCHES] =
+ g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES,
+ "Searches",
+ "Searches",
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_PARAM_READABLE);
+ obj_properties[PROP_WINS_SERVERS] =
g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS,
- "WinsServers",
- "WINS server list",
- DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READABLE));
+ "WinsServers",
+ "WINS server list",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READABLE);
+
+ g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (config_class),
- &dbus_glib_nm_ip4_config_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (config_class),
+ &dbus_glib_nm_ip4_config_object_info);
}
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index 5433768cd..c9096bb38 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -1,5 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
+/* NetworkManager
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,23 +15,23 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008–2013 Red Hat, Inc.
*/
#ifndef NM_IP4_CONFIG_H
#define NM_IP4_CONFIG_H
-#include <glib.h>
#include <glib-object.h>
+#include "nm-platform.h"
#include "nm-setting-ip4-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))
-#define NM_IP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP4_CONFIG, NMIP4ConfigClass))
-#define NM_IS_IP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IP4_CONFIG))
+#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))
+#define NM_IS_IP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IP4_CONFIG))
#define NM_IS_IP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IP4_CONFIG))
-#define NM_IP4_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP4_CONFIG, NMIP4ConfigClass))
+#define NM_IP4_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP4_CONFIG, NMIP4ConfigClass))
typedef struct {
GObject parent;
@@ -41,104 +41,109 @@ typedef struct {
GObjectClass parent;
} NMIP4ConfigClass;
+#define NM_IP4_CONFIG_GATEWAY "gateway"
#define NM_IP4_CONFIG_ADDRESSES "addresses"
+#define NM_IP4_CONFIG_ROUTES "routes"
#define NM_IP4_CONFIG_NAMESERVERS "nameservers"
#define NM_IP4_CONFIG_DOMAINS "domains"
-#define NM_IP4_CONFIG_ROUTES "routes"
+#define NM_IP4_CONFIG_SEARCHES "searches"
#define NM_IP4_CONFIG_WINS_SERVERS "wins-servers"
GType nm_ip4_config_get_type (void);
-NMIP4Config * nm_ip4_config_new (void);
-void nm_ip4_config_export (NMIP4Config *config);
-const char * nm_ip4_config_get_dbus_path (NMIP4Config *config);
-
-void nm_ip4_config_take_address (NMIP4Config *config, NMIP4Address *address);
-void nm_ip4_config_add_address (NMIP4Config *config, NMIP4Address *address);
-void nm_ip4_config_replace_address (NMIP4Config *config, guint32 i, NMIP4Address *new_address);
-NMIP4Address *nm_ip4_config_get_address (NMIP4Config *config, guint32 i);
-guint32 nm_ip4_config_get_num_addresses (NMIP4Config *config);
-
-guint32 nm_ip4_config_get_ptp_address (NMIP4Config *config);
-void nm_ip4_config_set_ptp_address (NMIP4Config *config, guint32 ptp_addr);
-
-void nm_ip4_config_add_nameserver (NMIP4Config *config, guint32 nameserver);
-guint32 nm_ip4_config_get_nameserver (NMIP4Config *config, guint i);
-guint32 nm_ip4_config_get_num_nameservers (NMIP4Config *config);
-void nm_ip4_config_reset_nameservers (NMIP4Config *config);
-
-void nm_ip4_config_add_wins (NMIP4Config *config, guint32 wins);
-guint32 nm_ip4_config_get_wins (NMIP4Config *config, guint i);
-guint32 nm_ip4_config_get_num_wins (NMIP4Config *config);
-void nm_ip4_config_reset_wins (NMIP4Config *config);
-
-void nm_ip4_config_take_route (NMIP4Config *config, NMIP4Route *route);
-void nm_ip4_config_add_route (NMIP4Config *config, NMIP4Route *route);
-void nm_ip4_config_replace_route (NMIP4Config *config, guint32 i, NMIP4Route *new_route);
-NMIP4Route * nm_ip4_config_get_route (NMIP4Config *config, guint32 i);
-guint32 nm_ip4_config_get_num_routes (NMIP4Config *config);
-void nm_ip4_config_reset_routes (NMIP4Config *config);
-
-void nm_ip4_config_add_domain (NMIP4Config *config, const char *domain);
-const char * nm_ip4_config_get_domain (NMIP4Config *config, guint i);
-guint32 nm_ip4_config_get_num_domains (NMIP4Config *config);
-void nm_ip4_config_reset_domains (NMIP4Config *config);
-
-void nm_ip4_config_add_search (NMIP4Config *config, const char *search);
-const char * nm_ip4_config_get_search (NMIP4Config *config, guint i);
-guint32 nm_ip4_config_get_num_searches (NMIP4Config *config);
-void nm_ip4_config_reset_searches (NMIP4Config *config);
-
-guint32 nm_ip4_config_get_mtu (NMIP4Config *config);
-void nm_ip4_config_set_mtu (NMIP4Config *config, guint32 mtu);
-
-guint32 nm_ip4_config_get_mss (NMIP4Config *config);
-void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss);
-
-gboolean nm_ip4_config_get_never_default (NMIP4Config *config);
-void nm_ip4_config_set_never_default (NMIP4Config *config, gboolean never_default);
-
-void nm_ip4_config_add_nis_server (NMIP4Config *config, guint32 nis);
-guint32 nm_ip4_config_get_nis_server (NMIP4Config *config, guint i);
-guint32 nm_ip4_config_get_num_nis_servers (NMIP4Config *config);
-void nm_ip4_config_reset_nis_servers (NMIP4Config *config);
-
-void nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain);
-const char * nm_ip4_config_get_nis_domain (NMIP4Config *config);
-
-
-/* Flags for nm_ip4_config_to_rtnl_addr() */
-#define NM_RTNL_ADDR_NONE 0x0000
-#define NM_RTNL_ADDR_ADDR 0x0001
-#define NM_RTNL_ADDR_PTP_ADDR 0x0002
-#define NM_RTNL_ADDR_PREFIX 0x0004
-#define NM_RTNL_ADDR_BROADCAST 0x0008
-
-#define NM_RTNL_ADDR_DEFAULT (NM_RTNL_ADDR_ADDR | NM_RTNL_ADDR_PREFIX | NM_RTNL_ADDR_BROADCAST)
-#define NM_RTNL_ADDR_PTP_DEFAULT (NM_RTNL_ADDR_ADDR | NM_RTNL_ADDR_PREFIX | NM_RTNL_ADDR_PTP_ADDR)
-
-struct rtnl_addr *nm_ip4_config_to_rtnl_addr (NMIP4Config *config, guint32 i, guint32 flags);
-
-typedef enum {
- NM_IP4_COMPARE_FLAG_NONE = 0x00000000, /* match nothing, kinda pointless */
- NM_IP4_COMPARE_FLAG_ADDRESSES = 0x00000001,
- NM_IP4_COMPARE_FLAG_PTP_ADDRESS = 0x00000002,
- NM_IP4_COMPARE_FLAG_NAMESERVERS = 0x00000004,
- NM_IP4_COMPARE_FLAG_ROUTES = 0x00000008,
- NM_IP4_COMPARE_FLAG_DOMAINS = 0x00000010,
- NM_IP4_COMPARE_FLAG_SEARCHES = 0x00000020,
- NM_IP4_COMPARE_FLAG_MTU = 0x00000040,
- NM_IP4_COMPARE_FLAG_MSS = 0x00000080,
- NM_IP4_COMPARE_FLAG_WINS_SERVERS= 0x00000100,
- NM_IP4_COMPARE_FLAG_NIS_SERVERS = 0x00000200,
- NM_IP4_COMPARE_FLAG_NIS_DOMAIN = 0x00000400,
- NM_IP4_COMPARE_FLAG_ALL = 0xFFFFFFFF /* match everything */
-} NMIP4ConfigCompareFlags;
-
-/* Returns a bitfield representing how the two IP4 configs differ */
-NMIP4ConfigCompareFlags nm_ip4_config_diff (NMIP4Config *a, NMIP4Config *b);
-
-void nm_ip4_config_hash (NMIP4Config *config, GChecksum *sum, gboolean dns_only);
+NMIP4Config * nm_ip4_config_new (void);
+
+/* D-Bus integration */
+void nm_ip4_config_export (NMIP4Config *config);
+const char * nm_ip4_config_get_dbus_path (const NMIP4Config *config);
+
+/* Integration with nm-platform and nm-setting */
+NMIP4Config *nm_ip4_config_capture (int ifindex, gboolean capture_resolv_conf);
+gboolean nm_ip4_config_commit (const NMIP4Config *config, int ifindex);
+void nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, int default_route_metric);
+NMSetting *nm_ip4_config_create_setting (const NMIP4Config *config);
+
+/* Utility functions */
+void nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src);
+void nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src);
+gboolean nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relevant_changes);
+gboolean nm_ip4_config_destination_is_direct (const NMIP4Config *config, guint32 dest, int plen);
+void nm_ip4_config_dump (const NMIP4Config *config, const char *detail);
+
+/* Gateways */
+void nm_ip4_config_set_never_default (NMIP4Config *config, gboolean never_default);
+gboolean nm_ip4_config_get_never_default (const NMIP4Config *config);
+void nm_ip4_config_set_gateway (NMIP4Config *config, guint32 gateway);
+guint32 nm_ip4_config_get_gateway (const NMIP4Config *config);
+
+/* Addresses */
+void nm_ip4_config_reset_addresses (NMIP4Config *config);
+void nm_ip4_config_add_address (NMIP4Config *config, const NMPlatformIP4Address *address);
+void nm_ip4_config_del_address (NMIP4Config *config, guint i);
+guint nm_ip4_config_get_num_addresses (const NMIP4Config *config);
+const NMPlatformIP4Address *nm_ip4_config_get_address (const NMIP4Config *config, guint i);
+gboolean nm_ip4_config_address_exists (const NMIP4Config *config, const NMPlatformIP4Address *address);
+
+/* Routes */
+void nm_ip4_config_reset_routes (NMIP4Config *config);
+void nm_ip4_config_add_route (NMIP4Config *config, const NMPlatformIP4Route *route);
+void nm_ip4_config_del_route (NMIP4Config *config, guint i);
+guint32 nm_ip4_config_get_num_routes (const NMIP4Config *config);
+const NMPlatformIP4Route *nm_ip4_config_get_route (const NMIP4Config *config, guint32 i);
+
+/* Nameservers */
+void nm_ip4_config_reset_nameservers (NMIP4Config *config);
+void nm_ip4_config_add_nameserver (NMIP4Config *config, guint32 nameserver);
+void nm_ip4_config_del_nameserver (NMIP4Config *config, guint i);
+guint32 nm_ip4_config_get_num_nameservers (const NMIP4Config *config);
+guint32 nm_ip4_config_get_nameserver (const NMIP4Config *config, guint i);
+
+/* Domains */
+void nm_ip4_config_reset_domains (NMIP4Config *config);
+void nm_ip4_config_add_domain (NMIP4Config *config, const char *domain);
+void nm_ip4_config_del_domain (NMIP4Config *config, guint i);
+guint32 nm_ip4_config_get_num_domains (const NMIP4Config *config);
+const char * nm_ip4_config_get_domain (const NMIP4Config *config, guint i);
+
+/* Search lists */
+void nm_ip4_config_reset_searches (NMIP4Config *config);
+void nm_ip4_config_add_search (NMIP4Config *config, const char *search);
+void nm_ip4_config_del_search (NMIP4Config *config, guint i);
+guint32 nm_ip4_config_get_num_searches (const NMIP4Config *config);
+const char * nm_ip4_config_get_search (const NMIP4Config *config, guint i);
+
+/* MSS */
+void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss);
+guint32 nm_ip4_config_get_mss (const NMIP4Config *config);
+
+/* NIS */
+void nm_ip4_config_reset_nis_servers (NMIP4Config *config);
+void nm_ip4_config_add_nis_server (NMIP4Config *config, guint32 nis);
+void nm_ip4_config_del_nis_server (NMIP4Config *config, guint i);
+guint32 nm_ip4_config_get_num_nis_servers (const NMIP4Config *config);
+guint32 nm_ip4_config_get_nis_server (const NMIP4Config *config, guint i);
+void nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain);
+const char * nm_ip4_config_get_nis_domain (const NMIP4Config *config);
+
+/* WINS */
+void nm_ip4_config_reset_wins (NMIP4Config *config);
+void nm_ip4_config_add_wins (NMIP4Config *config, guint32 wins);
+void nm_ip4_config_del_wins (NMIP4Config *config, guint i);
+guint32 nm_ip4_config_get_num_wins (const NMIP4Config *config);
+guint32 nm_ip4_config_get_wins (const NMIP4Config *config, guint i);
+
+/* MTU */
+void nm_ip4_config_set_mtu (NMIP4Config *config, guint32 mtu);
+guint32 nm_ip4_config_get_mtu (const NMIP4Config *config);
+
+void nm_ip4_config_hash (const NMIP4Config *config, GChecksum *sum, gboolean dns_only);
+gboolean nm_ip4_config_equal (const NMIP4Config *a, const NMIP4Config *b);
+
+/******************************************************/
+/* Testing-only functions */
+
+gboolean nm_ip4_config_capture_resolv_conf (GArray *nameservers,
+ const char *rc_contents);
#endif /* NM_IP4_CONFIG_H */
diff --git a/src/nm-ip6-config-glue.h b/src/nm-ip6-config-glue.h
new file mode 100644
index 000000000..62fbe1c56
--- /dev/null
+++ b/src/nm-ip6-config-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_ip6_config_MARSHAL_H__
+#define __dbus_glib_marshal_nm_ip6_config_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_ip6_config_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_ip6_config_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_ip6_config_object_info = { 1,
+ dbus_glib_nm_ip6_config_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.IP6Config\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.IP6Config\0Gateway\0gateway\0read\0org.freedesktop.NetworkManager.IP6Config\0Addresses\0addresses\0read\0org.freedesktop.NetworkManager.IP6Config\0Routes\0routes\0read\0org.freedesktop.NetworkManager.IP6Config\0Nameservers\0nameservers\0read\0org.freedesktop.NetworkManager.IP6Config\0Domains\0domains\0read\0org.freedesktop.NetworkManager.IP6Config\0Searches\0searches\0read\0\0"
+};
+
diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c
index 511cbf469..aaf5e7016 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -15,27 +15,22 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2010 Red Hat, Inc.
+ * Copyright (C) 2005 - 2013 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#include <glib.h>
-#include <stdio.h>
#include <string.h>
-#include "nm-ip6-config.h"
-#include "nm-dbus-manager.h"
-#include "NetworkManager.h"
-#include "NetworkManagerUtils.h"
-#include "nm-setting-ip6-config.h"
-#include "nm-utils.h"
-#include <netlink/route/addr.h>
-#include <netlink/utils.h>
-#include <netinet/in.h>
+#include "nm-ip6-config.h"
-#include "nm-ip6-config-glue.h"
+#include "nm-glib-compat.h"
+#include "libgsystem.h"
+#include "nm-platform.h"
+#include "nm-utils.h"
+#include "nm-dbus-manager.h"
#include "nm-dbus-glib-types.h"
-
+#include "nm-ip6-config-glue.h"
+#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, G_TYPE_OBJECT)
@@ -44,48 +39,30 @@ G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, G_TYPE_OBJECT)
typedef struct {
char *path;
- GSList *addresses;
- struct in6_addr ptp_address;
-
- guint32 mss; /* Maximum Segment Size of the route */
-
+ gboolean never_default;
+ struct in6_addr gateway;
+ GArray *addresses;
+ GArray *routes;
GArray *nameservers;
GPtrArray *domains;
GPtrArray *searches;
-
- gboolean gateway_set;
- struct in6_addr gateway;
- GSList *routes;
-
- gboolean never_default;
+ guint32 mss;
} NMIP6ConfigPrivate;
enum {
PROP_0,
+ PROP_GATEWAY,
PROP_ADDRESSES,
+ PROP_ROUTES,
PROP_NAMESERVERS,
PROP_DOMAINS,
- PROP_ROUTES,
+ PROP_SEARCHES,
LAST_PROP
};
-
-
-static struct nl_addr *
-nm_utils_ip6_addr_to_nl_addr (const struct in6_addr *ip6_addr, guint prefix)
-{
- struct nl_addr * nla = NULL;
-
- if (!(nla = nl_addr_alloc (sizeof (struct in6_addr))))
- return NULL;
- nl_addr_set_family (nla, AF_INET6);
- nl_addr_set_binary_addr (nla, (struct in6_addr *)ip6_addr, sizeof (struct in6_addr));
- if (prefix)
- nl_addr_set_prefixlen (nla, prefix);
-
- return nla;
-}
+static GParamSpec *obj_properties[LAST_PROP] = { NULL, };
+#define _NOTIFY(config, prop) G_STMT_START { g_object_notify_by_pspec (G_OBJECT (config), obj_properties[prop]); } G_STMT_END
NMIP6Config *
@@ -97,586 +74,1316 @@ nm_ip6_config_new (void)
void
nm_ip6_config_export (NMIP6Config *config)
{
- NMIP6ConfigPrivate *priv;
- NMDBusManager *dbus_mgr;
- DBusGConnection *connection;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
static guint32 counter = 0;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
-
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- g_return_if_fail (priv->path == NULL);
-
- dbus_mgr = nm_dbus_manager_get ();
- connection = nm_dbus_manager_get_connection (dbus_mgr);
- priv->path = g_strdup_printf (NM_DBUS_PATH "/IP6Config/%d", counter++);
-
- dbus_g_connection_register_g_object (connection, priv->path, G_OBJECT (config));
- g_object_unref (dbus_mgr);
+ if (!priv->path) {
+ priv->path = g_strdup_printf (NM_DBUS_PATH "/IP6Config/%d", counter++);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->path, config);
+ }
}
const char *
-nm_ip6_config_get_dbus_path (NMIP6Config *config)
+nm_ip6_config_get_dbus_path (const NMIP6Config *config)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return NM_IP6_CONFIG_GET_PRIVATE (config)->path;
+ return priv->path;
}
-void
-nm_ip6_config_take_address (NMIP6Config *config, NMIP6Address *address)
+/******************************************************************/
+
+static gboolean
+same_prefix (const struct in6_addr *address1, const struct in6_addr *address2, int plen)
{
- NMIP6ConfigPrivate *priv;
+ const guint8 *bytes1 = (const guint8 *) address1;
+ const guint8 *bytes2 = (const guint8 *) address2;
+ int nbytes = plen / 8;
+ int nbits = plen % 8;
+ int masked1 = bytes1[nbytes] >> (8 - nbits);
+ int masked2 = bytes2[nbytes] >> (8 - nbits);
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
- g_return_if_fail (address != NULL);
+ if (nbytes && memcmp (bytes1, bytes2, nbytes))
+ return FALSE;
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- priv->addresses = g_slist_append (priv->addresses, address);
+ return masked1 == masked2;
}
-void
-nm_ip6_config_add_address (NMIP6Config *config,
- NMIP6Address *address)
+/******************************************************************/
+
+/**
+ * nm_ip6_config_capture_resolv_conf():
+ * @nameservers: array of struct in6_addr
+ * @rc_contents: the contents of a resolv.conf or %NULL to read /etc/resolv.conf
+ *
+ * Reads all resolv.conf IPv6 nameservers and adds them to @nameservers.
+ *
+ * Returns: %TRUE if nameservers were added, %FALSE if @nameservers is unchanged
+ */
+gboolean
+nm_ip6_config_capture_resolv_conf (GArray *nameservers,
+ const char *rc_contents)
{
- NMIP6ConfigPrivate *priv;
- GSList *iter;
+ GPtrArray *read_ns;
+ guint i, j;
+ gboolean changed = FALSE;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
- g_return_if_fail (address != NULL);
+ g_return_val_if_fail (nameservers != NULL, FALSE);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
- if (nm_ip6_address_compare ((NMIP6Address *) iter->data, address))
- return;
- }
+ read_ns = nm_utils_read_resolv_conf_nameservers (rc_contents);
+ if (!read_ns)
+ return FALSE;
- priv->addresses = g_slist_append (priv->addresses, nm_ip6_address_dup (address));
-}
+ for (i = 0; i < read_ns->len; i++) {
+ const char *s = g_ptr_array_index (read_ns, i);
+ struct in6_addr ns = IN6ADDR_ANY_INIT;
-void
-nm_ip6_config_replace_address (NMIP6Config *config,
- guint i,
- NMIP6Address *new_address)
-{
- NMIP6ConfigPrivate *priv;
- GSList *old;
+ if (!inet_pton (AF_INET6, s, (void *) &ns) || IN6_IS_ADDR_UNSPECIFIED (&ns))
+ continue;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ /* Ignore duplicates */
+ for (j = 0; j < nameservers->len; j++) {
+ struct in6_addr *t = &g_array_index (nameservers, struct in6_addr, j);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- old = g_slist_nth (priv->addresses, i);
- g_return_if_fail (old != NULL);
- nm_ip6_address_unref ((NMIP6Address *) old->data);
+ if (IN6_ARE_ADDR_EQUAL (t, &ns))
+ break;
+ }
+
+ if (j == nameservers->len) {
+ g_array_append_val (nameservers, ns);
+ changed = TRUE;
+ }
+ }
- old->data = nm_ip6_address_dup (new_address);
+ g_ptr_array_unref (read_ns);
+ return changed;
}
-NMIP6Address *nm_ip6_config_get_address (NMIP6Config *config, guint i)
+static gboolean
+addresses_are_duplicate (const NMPlatformIP6Address *a, const NMPlatformIP6Address *b, gboolean consider_plen)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
-
- return (NMIP6Address *) g_slist_nth_data (NM_IP6_CONFIG_GET_PRIVATE (config)->addresses, i);
+ return IN6_ARE_ADDR_EQUAL (&a->address, &b->address) && (!consider_plen || a->plen == b->plen);
}
-guint32 nm_ip6_config_get_num_addresses (NMIP6Config *config)
+static gboolean
+routes_are_duplicate (const NMPlatformIP6Route *a, const NMPlatformIP6Route *b, gboolean consider_gateway_and_metric)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+ return IN6_ARE_ADDR_EQUAL (&a->network, &b->network) && a->plen == b->plen &&
+ (!consider_gateway_and_metric || (IN6_ARE_ADDR_EQUAL (&a->gateway, &b->gateway) && a->metric == b->metric));
+}
- return g_slist_length (NM_IP6_CONFIG_GET_PRIVATE (config)->addresses);
+static gint
+_addresses_sort_cmp_get_prio (const struct in6_addr *addr)
+{
+ if (IN6_IS_ADDR_V4MAPPED (addr))
+ return 0;
+ if (IN6_IS_ADDR_V4COMPAT (addr))
+ return 1;
+ if (IN6_IS_ADDR_UNSPECIFIED (addr))
+ return 2;
+ if (IN6_IS_ADDR_LOOPBACK (addr))
+ return 3;
+ if (IN6_IS_ADDR_LINKLOCAL (addr))
+ return 4;
+ if (IN6_IS_ADDR_SITELOCAL (addr))
+ return 5;
+ return 6;
}
-const struct in6_addr *nm_ip6_config_get_ptp_address (NMIP6Config *config)
+static gint
+_addresses_sort_cmp (gconstpointer a, gconstpointer b, gpointer user_data)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+ gint p1, p2, c;
+ gboolean perm1, perm2, tent1, tent2;
+ gboolean ipv6_privacy1, ipv6_privacy2;
+ const NMPlatformIP6Address *a1 = a, *a2 = b;
+
+ /* tentative addresses are always sorted back... */
+ /* sort tentative addresses after non-tentative. */
+ tent1 = (a1->flags & IFA_F_TENTATIVE);
+ tent2 = (a2->flags & IFA_F_TENTATIVE);
+ if (tent1 != tent2)
+ return tent1 ? 1 : -1;
+
+ /* Sort by address type. For example link local will
+ * be sorted *after* site local or global. */
+ p1 = _addresses_sort_cmp_get_prio (&a1->address);
+ p2 = _addresses_sort_cmp_get_prio (&a2->address);
+ if (p1 != p2)
+ return p1 > p2 ? -1 : 1;
+
+ ipv6_privacy1 = !!(a1->flags & (IFA_F_MANAGETEMPADDR | IFA_F_TEMPORARY));
+ ipv6_privacy2 = !!(a2->flags & (IFA_F_MANAGETEMPADDR | IFA_F_TEMPORARY));
+ if (ipv6_privacy1 || ipv6_privacy2) {
+ gboolean prefer_temp = ((NMSettingIP6ConfigPrivacy) GPOINTER_TO_INT (user_data)) == NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR;
+ gboolean public1 = TRUE, public2 = TRUE;
+
+ if (ipv6_privacy1) {
+ if (a1->flags & IFA_F_TEMPORARY)
+ public1 = prefer_temp;
+ else
+ public1 = !prefer_temp;
+ }
+ if (ipv6_privacy2) {
+ if (a2->flags & IFA_F_TEMPORARY)
+ public2 = prefer_temp;
+ else
+ public2 = !prefer_temp;
+ }
+
+ if (public1 != public2)
+ return public1 ? -1 : 1;
+ }
+
+ /* Sort the addresses based on their source. */
+ if (a1->source != a2->source)
+ return a1->source > a2->source ? -1 : 1;
- return &NM_IP6_CONFIG_GET_PRIVATE (config)->ptp_address;
+ /* sort permanent addresses before non-permanent. */
+ perm1 = (a1->flags & IFA_F_PERMANENT);
+ perm2 = (a2->flags & IFA_F_PERMANENT);
+ if (perm1 != perm2)
+ return perm1 ? -1 : 1;
+
+ /* finally sort addresses lexically */
+ c = memcmp (&a1->address, &a2->address, sizeof (a2->address));
+ return c != 0 ? c : memcmp (a1, a2, sizeof (*a1));
}
-void nm_ip6_config_set_ptp_address (NMIP6Config *config, const struct in6_addr *ptp_addr)
+gboolean
+nm_ip6_config_addresses_sort (NMIP6Config *self, NMSettingIP6ConfigPrivacy use_temporary)
{
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ NMIP6ConfigPrivate *priv;
+ size_t data_len = 0;
+ char *data_pre = NULL;
+ gboolean changed;
+
+ g_return_val_if_fail (NM_IS_IP6_CONFIG (self), FALSE);
+
+ priv = NM_IP6_CONFIG_GET_PRIVATE (self);
+ if (priv->addresses->len > 1) {
+ data_len = priv->addresses->len * g_array_get_element_size (priv->addresses);
+ data_pre = g_new (char, data_len);
+ memcpy (data_pre, priv->addresses->data, data_len);
+
+ g_array_sort_with_data (priv->addresses, _addresses_sort_cmp, GINT_TO_POINTER (use_temporary));
+
+ changed = memcmp (data_pre, priv->addresses->data, data_len) != 0;
+ g_free (data_pre);
- NM_IP6_CONFIG_GET_PRIVATE (config)->ptp_address = *ptp_addr;
+ if (changed) {
+ _NOTIFY (self, PROP_ADDRESSES);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-void nm_ip6_config_add_nameserver (NMIP6Config *config, const struct in6_addr *nameserver)
+NMIP6Config *
+nm_ip6_config_capture (int ifindex, gboolean capture_resolv_conf, NMSettingIP6ConfigPrivacy use_temporary)
{
+ NMIP6Config *config;
NMIP6ConfigPrivate *priv;
- struct in6_addr *nameservers;
- int i;
-
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
- g_return_if_fail (nameserver != NULL);
+ guint i;
+ guint lowest_metric = G_MAXUINT;
+ struct in6_addr old_gateway = IN6ADDR_ANY_INIT;
+ gboolean has_gateway = FALSE;
+ gboolean notify_nameservers = FALSE;
+
+ /* Slaves have no IP configuration */
+ if (nm_platform_link_get_master (ifindex) > 0)
+ return NULL;
+ config = nm_ip6_config_new ();
priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- /* No dupes */
- nameservers = (struct in6_addr *)priv->nameservers->data;
- for (i = 0; i < priv->nameservers->len; i++) {
- if (IN6_ARE_ADDR_EQUAL (nameserver, &nameservers[i]))
- return;
+ g_array_unref (priv->addresses);
+ g_array_unref (priv->routes);
+
+ priv->addresses = nm_platform_ip6_address_get_all (ifindex);
+ priv->routes = nm_platform_ip6_route_get_all (ifindex, TRUE);
+
+ /* Extract gateway from default route */
+ old_gateway = priv->gateway;
+ for (i = 0; i < priv->routes->len; i++) {
+ const NMPlatformIP6Route *route = &g_array_index (priv->routes, NMPlatformIP6Route, i);
+
+ if (IN6_IS_ADDR_UNSPECIFIED (&route->network)) {
+ if (route->metric < lowest_metric) {
+ priv->gateway = route->gateway;
+ lowest_metric = route->metric;
+ }
+ has_gateway = TRUE;
+ /* Remove the default route from the list */
+ g_array_remove_index (priv->routes, i);
+ i--;
+ }
}
- g_array_append_val (priv->nameservers, *nameserver);
-}
+ /* If there is a host route to the gateway, ignore that route. It is
+ * automatically added by NetworkManager when needed.
+ */
+ if (has_gateway) {
+ for (i = 0; i < priv->routes->len; i++) {
+ const NMPlatformIP6Route *route = &g_array_index (priv->routes, NMPlatformIP6Route, i);
+
+ if ( route->plen == 128
+ && IN6_ARE_ADDR_EQUAL (&route->network, &priv->gateway)
+ && IN6_IS_ADDR_UNSPECIFIED (&route->gateway)) {
+ g_array_remove_index (priv->routes, i);
+ i--;
+ }
+ }
+ }
-const struct in6_addr *nm_ip6_config_get_nameserver (NMIP6Config *config, guint i)
-{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+ /* If the interface has the default route, and has IPv6 addresses, capture
+ * nameservers from /etc/resolv.conf.
+ */
+ if (priv->addresses->len && has_gateway && capture_resolv_conf)
+ notify_nameservers = nm_ip6_config_capture_resolv_conf (priv->nameservers, NULL);
- return &g_array_index (NM_IP6_CONFIG_GET_PRIVATE (config)->nameservers, struct in6_addr, i);
-}
+ g_array_sort_with_data (priv->addresses, _addresses_sort_cmp, GINT_TO_POINTER (use_temporary));
-guint32 nm_ip6_config_get_num_nameservers (NMIP6Config *config)
-{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+ /* actually, nobody should be connected to the signal, just to be sure, notify */
+ if (notify_nameservers)
+ _NOTIFY (config, PROP_NAMESERVERS);
+ _NOTIFY (config, PROP_ADDRESSES);
+ _NOTIFY (config, PROP_ROUTES);
+ if (!IN6_ARE_ADDR_EQUAL (&priv->gateway, &old_gateway))
+ _NOTIFY (config, PROP_GATEWAY);
- return NM_IP6_CONFIG_GET_PRIVATE (config)->nameservers->len;
+ return config;
}
-void nm_ip6_config_reset_nameservers (NMIP6Config *config)
+gboolean
+nm_ip6_config_commit (const NMIP6Config *config, int ifindex)
{
- NMIP6ConfigPrivate *priv;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ int i;
+ gboolean success;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (config != NULL, FALSE);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if (priv->nameservers->len)
- g_array_remove_range (priv->nameservers, 0, priv->nameservers->len);
+ /* Addresses */
+ nm_platform_ip6_address_sync (ifindex, priv->addresses);
+
+ /* Routes */
+ {
+ int count = nm_ip6_config_get_num_routes (config);
+ GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP6Route), count);
+ NMPlatformIP6Route route;
+
+ for (i = 0; i < count; i++) {
+ memcpy (&route, nm_ip6_config_get_route (config, i), sizeof (route));
+
+ /* Don't add the route if it's more specific than one of the subnets
+ * the device already has an IP address on.
+ */
+ if ( IN6_IS_ADDR_UNSPECIFIED (&route.gateway)
+ && nm_ip6_config_destination_is_direct (config, &route.network, route.plen))
+ continue;
+
+ /* Don't add the default route if the connection
+ * is never supposed to be the default connection.
+ */
+ if (nm_ip6_config_get_never_default (config) && IN6_IS_ADDR_UNSPECIFIED (&route.network))
+ continue;
+
+ g_array_append_val (routes, route);
+ }
+
+ success = nm_platform_ip6_route_sync (ifindex, routes);
+ g_array_unref (routes);
+ }
+
+ return success;
}
void
-nm_ip6_config_set_gateway (NMIP6Config *config, const struct in6_addr *gateway)
+nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting, int default_route_metric)
{
- NMIP6ConfigPrivate *priv;
+ guint naddresses, nroutes, nnameservers, nsearches;
+ int i;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ if (!setting)
+ return;
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if (gateway)
- memcpy (&priv->gateway, gateway, sizeof (priv->gateway));
- priv->gateway_set = !!gateway;
+ naddresses = nm_setting_ip6_config_get_num_addresses (setting);
+ nroutes = nm_setting_ip6_config_get_num_routes (setting);
+ nnameservers = nm_setting_ip6_config_get_num_dns (setting);
+ nsearches = nm_setting_ip6_config_get_num_dns_searches (setting);
+
+ g_object_freeze_notify (G_OBJECT (config));
+
+ /* Gateway */
+ if (nm_setting_ip6_config_get_never_default (setting))
+ nm_ip6_config_set_never_default (config, TRUE);
+ else if (nm_setting_ip6_config_get_ignore_auto_routes (setting))
+ nm_ip6_config_set_never_default (config, FALSE);
+ for (i = 0; i < naddresses; i++) {
+ const struct in6_addr *gateway = nm_ip6_address_get_gateway (nm_setting_ip6_config_get_address (setting, i));
+
+ if (gateway && !IN6_IS_ADDR_UNSPECIFIED (gateway)) {
+ nm_ip6_config_set_gateway (config, gateway);
+ break;
+ }
+ }
+
+ /* Addresses */
+ for (i = 0; i < naddresses; i++) {
+ NMIP6Address *s_addr = nm_setting_ip6_config_get_address (setting, i);
+ NMPlatformIP6Address address;
+
+ memset (&address, 0, sizeof (address));
+ address.address = *nm_ip6_address_get_address (s_addr);
+ address.plen = nm_ip6_address_get_prefix (s_addr);
+ address.lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
+ address.preferred = NM_PLATFORM_LIFETIME_PERMANENT;
+ address.source = NM_PLATFORM_SOURCE_USER;
+
+ nm_ip6_config_add_address (config, &address);
+ }
+
+ /* Routes */
+ if (nm_setting_ip6_config_get_ignore_auto_routes (setting))
+ nm_ip6_config_reset_routes (config);
+ for (i = 0; i < nroutes; i++) {
+ NMIP6Route *s_route = nm_setting_ip6_config_get_route (setting, i);
+ NMPlatformIP6Route route;
+
+ memset (&route, 0, sizeof (route));
+ route.network = *nm_ip6_route_get_dest (s_route);
+ route.plen = nm_ip6_route_get_prefix (s_route);
+ route.gateway = *nm_ip6_route_get_next_hop (s_route);
+ route.metric = nm_ip6_route_get_metric (s_route);
+ if (!route.metric)
+ route.metric = default_route_metric;
+ route.source = NM_PLATFORM_SOURCE_USER;
+
+ nm_ip6_config_add_route (config, &route);
+ }
+
+ /* DNS */
+ if (nm_setting_ip6_config_get_ignore_auto_dns (setting)) {
+ nm_ip6_config_reset_nameservers (config);
+ nm_ip6_config_reset_domains (config);
+ nm_ip6_config_reset_searches (config);
+ }
+ for (i = 0; i < nnameservers; i++)
+ nm_ip6_config_add_nameserver (config, nm_setting_ip6_config_get_dns (setting, i));
+ for (i = 0; i < nsearches; i++)
+ nm_ip6_config_add_search (config, nm_setting_ip6_config_get_dns_search (setting, i));
+
+ g_object_thaw_notify (G_OBJECT (config));
}
-const struct in6_addr *
-nm_ip6_config_get_gateway (NMIP6Config *config)
+NMSetting *
+nm_ip6_config_create_setting (const NMIP6Config *config)
{
- NMIP6ConfigPrivate *priv;
+ NMSettingIP6Config *s_ip6;
+ const struct in6_addr *gateway;
+ guint naddresses, nroutes, nnameservers, nsearches;
+ const char *method = NULL;
+ int i;
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+ s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return priv->gateway_set ? &priv->gateway : NULL;
+ if (!config) {
+ g_object_set (s_ip6,
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NULL);
+ return NM_SETTING (s_ip6);
+ }
+
+ gateway = nm_ip6_config_get_gateway (config);
+ naddresses = nm_ip6_config_get_num_addresses (config);
+ nroutes = nm_ip6_config_get_num_routes (config);
+ nnameservers = nm_ip6_config_get_num_nameservers (config);
+ nsearches = nm_ip6_config_get_num_searches (config);
+
+ /* Addresses */
+ for (i = 0; i < naddresses; i++) {
+ const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i);
+ NMIP6Address *s_addr;
+
+ /* Ignore link-local address. */
+ if (IN6_IS_ADDR_LINKLOCAL (&address->address)) {
+ if (!method)
+ method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL;
+ continue;
+ }
+
+ /* Detect dynamic address */
+ if (address->lifetime != NM_PLATFORM_LIFETIME_PERMANENT) {
+ method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
+ continue;
+ }
+
+ /* Static address found. */
+ if (!method || strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0)
+ method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
+
+ s_addr = nm_ip6_address_new ();
+
+ nm_ip6_address_set_address (s_addr, &address->address);
+ nm_ip6_address_set_prefix (s_addr, address->plen);
+ if (gateway)
+ nm_ip6_address_set_gateway (s_addr, gateway);
+
+ nm_setting_ip6_config_add_address (s_ip6, s_addr);
+ nm_ip6_address_unref (s_addr);
+ }
+
+ /* Use 'ignore' if the method wasn't previously set */
+ if (!method)
+ method = NM_SETTING_IP6_CONFIG_METHOD_IGNORE;
+ g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, method, NULL);
+
+ /* Routes */
+ for (i = 0; i < nroutes; i++) {
+ const NMPlatformIP6Route *route = nm_ip6_config_get_route (config, i);
+ NMIP6Route *s_route;
+
+ /* Ignore link-local route. */
+ if (IN6_IS_ADDR_LINKLOCAL (&route->network))
+ continue;
+
+ /* Ignore default route. */
+ if (!route->plen)
+ continue;
+
+ /* Ignore routes provided by external sources */
+ if (route->source != NM_PLATFORM_SOURCE_USER)
+ continue;
+
+ s_route = nm_ip6_route_new ();
+ nm_ip6_route_set_dest (s_route, &route->network);
+ nm_ip6_route_set_prefix (s_route, route->plen);
+ if (!IN6_IS_ADDR_UNSPECIFIED (&route->network))
+ nm_ip6_route_set_next_hop (s_route, &route->gateway);
+ nm_ip6_route_set_metric (s_route, route->metric);
+
+ nm_setting_ip6_config_add_route (s_ip6, s_route);
+ nm_ip6_route_unref (s_route);
+ }
+
+ /* DNS */
+ for (i = 0; i < nnameservers; i++) {
+ const struct in6_addr *nameserver = nm_ip6_config_get_nameserver (config, i);
+
+ nm_setting_ip6_config_add_dns (s_ip6, nameserver);
+ }
+ for (i = 0; i < nsearches; i++) {
+ const char *search = nm_ip6_config_get_search (config, i);
+
+ nm_setting_ip6_config_add_dns_search (s_ip6, search);
+ }
+
+ return NM_SETTING (s_ip6);
}
+/******************************************************************/
+
void
-nm_ip6_config_take_route (NMIP6Config *config, NMIP6Route *route)
+nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src)
{
- NMIP6ConfigPrivate *priv;
+ guint32 i;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
- g_return_if_fail (route != NULL);
+ g_return_if_fail (src != NULL);
+ g_return_if_fail (dst != NULL);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- priv->routes = g_slist_append (priv->routes, route);
+ g_object_freeze_notify (G_OBJECT (dst));
+
+ /* addresses */
+ for (i = 0; i < nm_ip6_config_get_num_addresses (src); i++)
+ nm_ip6_config_add_address (dst, nm_ip6_config_get_address (src, i));
+
+ /* nameservers */
+ for (i = 0; i < nm_ip6_config_get_num_nameservers (src); i++)
+ nm_ip6_config_add_nameserver (dst, nm_ip6_config_get_nameserver (src, i));
+
+ /* default gateway */
+ if (!nm_ip6_config_get_gateway (dst))
+ nm_ip6_config_set_gateway (dst, nm_ip6_config_get_gateway (src));
+
+ /* routes */
+ for (i = 0; i < nm_ip6_config_get_num_routes (src); i++)
+ nm_ip6_config_add_route (dst, nm_ip6_config_get_route (src, i));
+
+ /* domains */
+ for (i = 0; i < nm_ip6_config_get_num_domains (src); i++)
+ nm_ip6_config_add_domain (dst, nm_ip6_config_get_domain (src, i));
+
+ /* dns searches */
+ for (i = 0; i < nm_ip6_config_get_num_searches (src); i++)
+ nm_ip6_config_add_search (dst, nm_ip6_config_get_search (src, i));
+
+ if (!nm_ip6_config_get_mss (dst))
+ nm_ip6_config_set_mss (dst, nm_ip6_config_get_mss (src));
+
+ g_object_thaw_notify (G_OBJECT (dst));
}
-void
-nm_ip6_config_add_route (NMIP6Config *config, NMIP6Route *route)
+gboolean
+nm_ip6_config_destination_is_direct (const NMIP6Config *config, const struct in6_addr *network, int plen)
{
- NMIP6ConfigPrivate *priv;
- GSList *iter;
+ int num = nm_ip6_config_get_num_addresses (config);
+ int i;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
- g_return_if_fail (route != NULL);
+ for (i = 0; i < num; i++) {
+ const NMPlatformIP6Address *item = nm_ip6_config_get_address (config, i);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
- if (nm_ip6_route_compare ((NMIP6Route *) iter->data, route))
- return;
+ if (item->plen <= plen && same_prefix (&item->address, network, item->plen) &&
+ !(item->flags & IFA_F_NOPREFIXROUTE))
+ return TRUE;
}
- priv->routes = g_slist_append (priv->routes, nm_ip6_route_dup (route));
+ return FALSE;
}
+/**
+ * nm_ip6_config_subtract:
+ * @dst: config from which to remove everything in @src
+ * @src: config to remove from @dst
+ *
+ * Removes everything in @src from @dst.
+ */
void
-nm_ip6_config_replace_route (NMIP6Config *config,
- guint i,
- NMIP6Route *new_route)
+nm_ip6_config_subtract (NMIP6Config *dst, const NMIP6Config *src)
{
- NMIP6ConfigPrivate *priv;
- GSList *old;
+ guint32 i, j;
+ const struct in6_addr *dst_tmp, *src_tmp;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ g_return_if_fail (src != NULL);
+ g_return_if_fail (dst != NULL);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- old = g_slist_nth (priv->routes, i);
- g_return_if_fail (old != NULL);
- nm_ip6_route_unref ((NMIP6Route *) old->data);
+ g_object_freeze_notify (G_OBJECT (dst));
+
+ /* addresses */
+ for (i = 0; i < nm_ip6_config_get_num_addresses (src); i++) {
+ const NMPlatformIP6Address *src_addr = nm_ip6_config_get_address (src, i);
+
+ for (j = 0; j < nm_ip6_config_get_num_addresses (dst); j++) {
+ const NMPlatformIP6Address *dst_addr = nm_ip6_config_get_address (dst, j);
+
+ if (IN6_ARE_ADDR_EQUAL (&src_addr->address, &dst_addr->address)) {
+ nm_ip6_config_del_address (dst, j);
+ break;
+ }
+ }
+ }
+
+ /* nameservers */
+ for (i = 0; i < nm_ip6_config_get_num_nameservers (src); i++) {
+ const struct in6_addr *src_ns = nm_ip6_config_get_nameserver (src, i);
+
+ for (j = 0; j < nm_ip6_config_get_num_nameservers (dst); j++) {
+ const struct in6_addr *dst_ns = nm_ip6_config_get_nameserver (dst, j);
+
+ if (IN6_ARE_ADDR_EQUAL (src_ns, dst_ns)) {
+ nm_ip6_config_del_nameserver (dst, j);
+ break;
+ }
+ }
+ }
+
+ /* default gateway */
+ src_tmp = nm_ip6_config_get_gateway (src);
+ dst_tmp = nm_ip6_config_get_gateway (dst);
+ if (src_tmp && dst_tmp && IN6_ARE_ADDR_EQUAL (src_tmp, dst_tmp))
+ nm_ip6_config_set_gateway (dst, NULL);
+
+ /* routes */
+ for (i = 0; i < nm_ip6_config_get_num_routes (src); i++) {
+ const NMPlatformIP6Route *src_route = nm_ip6_config_get_route (src, i);
+
+ for (j = 0; j < nm_ip6_config_get_num_routes (dst); j++) {
+ const NMPlatformIP6Route *dst_route = nm_ip6_config_get_route (dst, j);
+
+ if (routes_are_duplicate (src_route, dst_route, FALSE)) {
+ nm_ip6_config_del_route (dst, j);
+ break;
+ }
+ }
+ }
+
+ /* domains */
+ for (i = 0; i < nm_ip6_config_get_num_domains (src); i++) {
+ const char *src_domain = nm_ip6_config_get_domain (src, i);
+
+ for (j = 0; j < nm_ip6_config_get_num_domains (dst); j++) {
+ const char *dst_domain = nm_ip6_config_get_domain (dst, j);
- old->data = nm_ip6_route_dup (new_route);
+ if (g_strcmp0 (src_domain, dst_domain) == 0) {
+ nm_ip6_config_del_domain (dst, j);
+ break;
+ }
+ }
+ }
+
+ /* dns searches */
+ for (i = 0; i < nm_ip6_config_get_num_searches (src); i++) {
+ const char *src_search = nm_ip6_config_get_search (src, i);
+
+ for (j = 0; j < nm_ip6_config_get_num_searches (dst); j++) {
+ const char *dst_search = nm_ip6_config_get_search (dst, j);
+
+ if (g_strcmp0 (src_search, dst_search) == 0) {
+ nm_ip6_config_del_search (dst, j);
+ break;
+ }
+ }
+ }
+
+ if (nm_ip6_config_get_mss (src) == nm_ip6_config_get_mss (dst))
+ nm_ip6_config_set_mss (dst, 0);
+
+ g_object_thaw_notify (G_OBJECT (dst));
}
-NMIP6Route *
-nm_ip6_config_get_route (NMIP6Config *config, guint i)
+/**
+ * nm_ip6_config_replace:
+ * @dst: config which will be replaced with everything in @src
+ * @src: config to copy over to @dst
+ * @relevant_changes: return whether there are changes to the
+ * destination object that are relevant. This is equal to
+ * nm_ip6_config_equal() showing any difference.
+ *
+ * Replaces everything in @dst with @src so that the two configurations
+ * contain the same content -- with the exception of the dbus path.
+ *
+ * Returns: whether the @dst instance changed in any way (including minor changes,
+ * that are not signaled by the output parameter @relevant_changes).
+ */
+gboolean
+nm_ip6_config_replace (NMIP6Config *dst, const NMIP6Config *src, gboolean *relevant_changes)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+#ifndef G_DISABLE_ASSERT
+ gboolean config_equal;
+#endif
+ gboolean has_minor_changes = FALSE, has_relevant_changes = FALSE, are_equal;
+ guint i, num;
+ NMIP6ConfigPrivate *dst_priv, *src_priv;
+ const NMPlatformIP6Address *dst_addr, *src_addr;
+ const NMPlatformIP6Route *dst_route, *src_route;
+
+ g_return_val_if_fail (src != NULL, FALSE);
+ g_return_val_if_fail (dst != NULL, FALSE);
+ g_return_val_if_fail (src != dst, FALSE);
+
+#ifndef G_DISABLE_ASSERT
+ config_equal = nm_ip6_config_equal (dst, src);
+#endif
+
+ dst_priv = NM_IP6_CONFIG_GET_PRIVATE (dst);
+ src_priv = NM_IP6_CONFIG_GET_PRIVATE (src);
+
+ g_object_freeze_notify (G_OBJECT (dst));
+
+ /* never_default */
+ if (src_priv->never_default != dst_priv->never_default) {
+ dst_priv->never_default = src_priv->never_default;
+ has_minor_changes = TRUE;
+ }
+
+ /* default gateway */
+ if (!IN6_ARE_ADDR_EQUAL (&src_priv->gateway, &dst_priv->gateway)) {
+ nm_ip6_config_set_gateway (dst, &src_priv->gateway);
+ has_relevant_changes = TRUE;
+ }
+
+ /* addresses */
+ num = nm_ip6_config_get_num_addresses (src);
+ are_equal = num == nm_ip6_config_get_num_addresses (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (nm_platform_ip6_address_cmp (src_addr = nm_ip6_config_get_address (src, i),
+ dst_addr = nm_ip6_config_get_address (dst, i))) {
+ are_equal = FALSE;
+ if (!addresses_are_duplicate (src_addr, dst_addr, TRUE)) {
+ has_relevant_changes = TRUE;
+ break;
+ }
+ }
+ }
+ } else
+ has_relevant_changes = TRUE;
+ if (!are_equal) {
+ nm_ip6_config_reset_addresses (dst);
+ for (i = 0; i < num; i++)
+ nm_ip6_config_add_address (dst, nm_ip6_config_get_address (src, i));
+ has_minor_changes = TRUE;
+ }
+
+ /* routes */
+ num = nm_ip6_config_get_num_routes (src);
+ are_equal = num == nm_ip6_config_get_num_routes (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (nm_platform_ip6_route_cmp (src_route = nm_ip6_config_get_route (src, i),
+ dst_route = nm_ip6_config_get_route (dst, i))) {
+ are_equal = FALSE;
+ if (!routes_are_duplicate (src_route, dst_route, TRUE)) {
+ has_relevant_changes = TRUE;
+ break;
+ }
+ }
+ }
+ } else
+ has_relevant_changes = TRUE;
+ if (!are_equal) {
+ nm_ip6_config_reset_routes (dst);
+ for (i = 0; i < num; i++)
+ nm_ip6_config_add_route (dst, nm_ip6_config_get_route (src, i));
+ has_minor_changes = TRUE;
+ }
- return (NMIP6Route *) g_slist_nth_data (NM_IP6_CONFIG_GET_PRIVATE (config)->routes, i);
+ /* nameservers */
+ num = nm_ip6_config_get_num_nameservers (src);
+ are_equal = num == nm_ip6_config_get_num_nameservers (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (!IN6_ARE_ADDR_EQUAL (nm_ip6_config_get_nameserver (src, i),
+ nm_ip6_config_get_nameserver (dst, i))) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip6_config_reset_nameservers (dst);
+ for (i = 0; i < num; i++)
+ nm_ip6_config_add_nameserver (dst, nm_ip6_config_get_nameserver (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* domains */
+ num = nm_ip6_config_get_num_domains (src);
+ are_equal = num == nm_ip6_config_get_num_domains (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (g_strcmp0 (nm_ip6_config_get_domain (src, i),
+ nm_ip6_config_get_domain (dst, i))) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip6_config_reset_domains (dst);
+ for (i = 0; i < num; i++)
+ nm_ip6_config_add_domain (dst, nm_ip6_config_get_domain (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* dns searches */
+ num = nm_ip6_config_get_num_searches (src);
+ are_equal = num == nm_ip6_config_get_num_searches (dst);
+ if (are_equal) {
+ for (i = 0; i < num; i++ ) {
+ if (g_strcmp0 (nm_ip6_config_get_search (src, i),
+ nm_ip6_config_get_search (dst, i))) {
+ are_equal = FALSE;
+ break;
+ }
+ }
+ }
+ if (!are_equal) {
+ nm_ip6_config_reset_searches (dst);
+ for (i = 0; i < num; i++)
+ nm_ip6_config_add_search (dst, nm_ip6_config_get_search (src, i));
+ has_relevant_changes = TRUE;
+ }
+
+ /* mss */
+ if (src_priv->mss != dst_priv->mss) {
+ nm_ip6_config_set_mss (dst, src_priv->mss);
+ has_minor_changes = TRUE;
+ }
+
+ /* config_equal does not compare *all* the fields, therefore, we might have has_minor_changes
+ * regardless of config_equal. But config_equal must correspond to has_relevant_changes. */
+ g_assert (config_equal == !has_relevant_changes);
+
+ g_object_thaw_notify (G_OBJECT (dst));
+
+ if (relevant_changes)
+ *relevant_changes = has_relevant_changes;
+
+ return has_relevant_changes || has_minor_changes;
}
-guint32 nm_ip6_config_get_num_routes (NMIP6Config *config)
+void
+nm_ip6_config_dump (const NMIP6Config *config, const char *detail)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+ const struct in6_addr *tmp;
+ guint32 i;
+ const char *str;
+
+ g_return_if_fail (config != NULL);
+
+ g_message ("--------- NMIP6Config %p (%s)", config, detail);
+
+ str = nm_ip6_config_get_dbus_path (config);
+ if (str)
+ g_message (" path: %s", str);
- return g_slist_length (NM_IP6_CONFIG_GET_PRIVATE (config)->routes);
+ /* addresses */
+ for (i = 0; i < nm_ip6_config_get_num_addresses (config); i++)
+ g_message (" a: %s", nm_platform_ip6_address_to_string (nm_ip6_config_get_address (config, i)));
+
+ /* default gateway */
+ tmp = nm_ip6_config_get_gateway (config);
+ if (tmp)
+ g_message (" gw: %s", nm_utils_inet6_ntop (tmp, NULL));
+
+ /* nameservers */
+ for (i = 0; i < nm_ip6_config_get_num_nameservers (config); i++) {
+ tmp = nm_ip6_config_get_nameserver (config, i);
+ g_message (" ns: %s", nm_utils_inet6_ntop (tmp, NULL));
+ }
+
+ /* routes */
+ for (i = 0; i < nm_ip6_config_get_num_routes (config); i++)
+ g_message (" rt: %s", nm_platform_ip6_route_to_string (nm_ip6_config_get_route (config, i)));
+
+ /* domains */
+ for (i = 0; i < nm_ip6_config_get_num_domains (config); i++)
+ g_message (" domain: %s", nm_ip6_config_get_domain (config, i));
+
+ /* dns searches */
+ for (i = 0; i < nm_ip6_config_get_num_searches (config); i++)
+ g_message (" search: %s", nm_ip6_config_get_search (config, i));
+
+ g_message (" mss: %u", nm_ip6_config_get_mss (config));
+ g_message (" n-dflt: %d", nm_ip6_config_get_never_default (config));
}
-void nm_ip6_config_reset_routes (NMIP6Config *config)
-{
- NMIP6ConfigPrivate *priv;
+/******************************************************************/
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+void
+nm_ip6_config_set_never_default (NMIP6Config *config, gboolean never_default)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- g_slist_foreach (priv->routes, (GFunc) g_free, NULL);
- priv->routes = NULL;
+ priv->never_default = !!never_default;
}
-void nm_ip6_config_add_domain (NMIP6Config *config, const char *domain)
+gboolean
+nm_ip6_config_get_never_default (const NMIP6Config *config)
{
- NMIP6ConfigPrivate *priv;
- int i;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
- g_return_if_fail (domain != NULL);
- g_return_if_fail (strlen (domain) > 0);
+ return priv->never_default;
+}
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+void
+nm_ip6_config_set_gateway (NMIP6Config *config, const struct in6_addr *gateway)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->domains->len; i++) {
- if (!strcmp (g_ptr_array_index (priv->domains, i), domain))
+ if (gateway) {
+ if (IN6_ARE_ADDR_EQUAL (&priv->gateway, gateway))
return;
+ priv->gateway = *gateway;
+ } else {
+ if (IN6_IS_ADDR_UNSPECIFIED (&priv->gateway))
+ return;
+ memset (&priv->gateway, 0, sizeof (priv->gateway));
}
-
- g_ptr_array_add (priv->domains, g_strdup (domain));
+ _NOTIFY (config, PROP_GATEWAY);
}
-const char *nm_ip6_config_get_domain (NMIP6Config *config, guint i)
+const struct in6_addr *
+nm_ip6_config_get_gateway (const NMIP6Config *config)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return (const char *) g_ptr_array_index (NM_IP6_CONFIG_GET_PRIVATE (config)->domains, i);
+ return IN6_IS_ADDR_UNSPECIFIED (&priv->gateway) ? NULL : &priv->gateway;
}
-guint32 nm_ip6_config_get_num_domains (NMIP6Config *config)
+/******************************************************************/
+
+void
+nm_ip6_config_reset_addresses (NMIP6Config *config)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return NM_IP6_CONFIG_GET_PRIVATE (config)->domains->len;
+ if (priv->addresses->len != 0) {
+ g_array_set_size (priv->addresses, 0);
+ _NOTIFY (config, PROP_ADDRESSES);
+ }
}
-void nm_ip6_config_reset_domains (NMIP6Config *config)
+/**
+ * nm_ip6_config_add_address:
+ * @config: the #NMIP6Config
+ * @new: the new address to add to @config
+ *
+ * Adds the new address to @config. If an address with the same basic properties
+ * (address, prefix) already exists in @config, it is overwritten with the
+ * lifetime and preferred of @new. The source is also overwritten by the source
+ * from @new if that source is higher priority.
+ */
+void
+nm_ip6_config_add_address (NMIP6Config *config, const NMPlatformIP6Address *new)
{
- NMIP6ConfigPrivate *priv;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ NMPlatformIP6Address item_old;
int i;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ g_return_if_fail (new != NULL);
+
+ for (i = 0; i < priv->addresses->len; i++ ) {
+ NMPlatformIP6Address *item = &g_array_index (priv->addresses, NMPlatformIP6Address, i);
+
+ if (IN6_ARE_ADDR_EQUAL (&item->address, &new->address)) {
+ if (nm_platform_ip6_address_cmp (item, new) == 0)
+ return;
+
+ /* remember the old values. */
+ item_old = *item;
+ /* Copy over old item to get new lifetime, timestamp, preferred */
+ *item = *new;
+
+ /* But restore highest priority source */
+ item->source = MAX (item_old.source, new->source);
+
+ /* for addresses that we read from the kernel, we keep the timestamps as defined
+ * by the previous source (item_old). The reason is, that the other source configured the lifetimes
+ * with "what should be" and the kernel values are "what turned out after configuring it".
+ *
+ * For other sources, the longer lifetime wins. */
+ if ( (new->source == NM_PLATFORM_SOURCE_KERNEL && new->source != item_old.source)
+ || nm_platform_ip_address_cmp_expiry ((const NMPlatformIPAddress *) &item_old, (const NMPlatformIPAddress *) new) > 0) {
+ item->timestamp = item_old.timestamp;
+ item->lifetime = item_old.lifetime;
+ item->preferred = item_old.preferred;
+ }
+ if (nm_platform_ip6_address_cmp (&item_old, item) == 0)
+ return;
+ goto NOTIFY;
+ }
+ }
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->domains->len; i++)
- g_free (g_ptr_array_index (priv->domains, i));
- g_ptr_array_free (priv->domains, TRUE);
- priv->domains = g_ptr_array_sized_new (3);
+ g_array_append_val (priv->addresses, *new);
+NOTIFY:
+ _NOTIFY (config, PROP_ADDRESSES);
}
-void nm_ip6_config_add_search (NMIP6Config *config, const char *search)
+void
+nm_ip6_config_del_address (NMIP6Config *config, guint i)
{
- NMIP6ConfigPrivate *priv;
- int i;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- g_return_if_fail (config != NULL);
- g_return_if_fail (search != NULL);
- g_return_if_fail (strlen (search) > 0);
+ g_return_if_fail (i < priv->addresses->len);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ g_array_remove_index (priv->addresses, i);
+ _NOTIFY (config, PROP_ADDRESSES);
+}
- for (i = 0; i < priv->searches->len; i++) {
- if (!strcmp (g_ptr_array_index (priv->searches, i), search))
- return;
- }
+guint
+nm_ip6_config_get_num_addresses (const NMIP6Config *config)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+
+ return priv->addresses->len;
+}
+
+const NMPlatformIP6Address *
+nm_ip6_config_get_address (const NMIP6Config *config, guint i)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- g_ptr_array_add (priv->searches, g_strdup (search));
+ return &g_array_index (priv->addresses, NMPlatformIP6Address, i);
}
-const char *nm_ip6_config_get_search (NMIP6Config *config, guint i)
+gboolean
+nm_ip6_config_address_exists (const NMIP6Config *config,
+ const NMPlatformIP6Address *needle)
{
- g_return_val_if_fail (config != NULL, NULL);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ guint i;
+
+ for (i = 0; i < priv->addresses->len; i++) {
+ const NMPlatformIP6Address *haystack = &g_array_index (priv->addresses, NMPlatformIP6Address, i);
- return (const char *) g_ptr_array_index (NM_IP6_CONFIG_GET_PRIVATE (config)->searches, i);
+ if ( IN6_ARE_ADDR_EQUAL (&needle->address, &haystack->address)
+ && needle->plen == haystack->plen)
+ return TRUE;
+ }
+ return FALSE;
}
-guint32 nm_ip6_config_get_num_searches (NMIP6Config *config)
+/******************************************************************/
+
+void
+nm_ip6_config_reset_routes (NMIP6Config *config)
{
- g_return_val_if_fail (config != NULL, 0);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return NM_IP6_CONFIG_GET_PRIVATE (config)->searches->len;
+ if (priv->routes->len != 0) {
+ g_array_set_size (priv->routes, 0);
+ _NOTIFY (config, PROP_ROUTES);
+ }
}
-void nm_ip6_config_reset_searches (NMIP6Config *config)
+/**
+ * nm_ip6_config_add_route:
+ * @config: the #NMIP6Config
+ * @new: the new route to add to @config
+ *
+ * Adds the new route to @config. If a route with the same basic properties
+ * (network, prefix) already exists in @config, it is overwritten including the
+ * gateway and metric of @new. The source is also overwritten by the source
+ * from @new if that source is higher priority.
+ */
+void
+nm_ip6_config_add_route (NMIP6Config *config, const NMPlatformIP6Route *new)
{
- NMIP6ConfigPrivate *priv;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ NMPlatformSource old_source;
int i;
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ g_return_if_fail (new != NULL);
- priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- for (i = 0; i < priv->searches->len; i++)
- g_free (g_ptr_array_index (priv->searches, i));
- g_ptr_array_free (priv->searches, TRUE);
- priv->searches = g_ptr_array_sized_new (3);
+ for (i = 0; i < priv->routes->len; i++ ) {
+ NMPlatformIP6Route *item = &g_array_index (priv->routes, NMPlatformIP6Route, i);
+
+ if (routes_are_duplicate (item, new, FALSE)) {
+ if (nm_platform_ip6_route_cmp (item, new) == 0)
+ return;
+ old_source = item->source;
+ *item = *new;
+ /* Restore highest priority source */
+ item->source = MAX (old_source, new->source);
+ goto NOTIFY;
+ }
+ }
+
+ g_array_append_val (priv->routes, *new);
+NOTIFY:
+ _NOTIFY (config, PROP_ROUTES);
}
-guint32 nm_ip6_config_get_mss (NMIP6Config *config)
+void
+nm_ip6_config_del_route (NMIP6Config *config, guint i)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return NM_IP6_CONFIG_GET_PRIVATE (config)->mss;
+ g_return_if_fail (i < priv->routes->len);
+
+ g_array_remove_index (priv->routes, i);
+ _NOTIFY (config, PROP_ROUTES);
}
-void nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss)
+guint
+nm_ip6_config_get_num_routes (const NMIP6Config *config)
{
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- NM_IP6_CONFIG_GET_PRIVATE (config)->mss = mss;
+ return priv->routes->len;
}
-gboolean
-nm_ip6_config_get_never_default (NMIP6Config *config)
+const NMPlatformIP6Route *
+nm_ip6_config_get_route (const NMIP6Config *config, guint i)
{
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), FALSE);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return NM_IP6_CONFIG_GET_PRIVATE (config)->never_default;
+ return &g_array_index (priv->routes, NMPlatformIP6Route, i);
}
+/******************************************************************/
+
void
-nm_ip6_config_set_never_default (NMIP6Config *config, gboolean never_default)
+nm_ip6_config_reset_nameservers (NMIP6Config *config)
{
- g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- NM_IP6_CONFIG_GET_PRIVATE (config)->never_default = never_default;
+ if (priv->nameservers->len != 0) {
+ g_array_set_size (priv->nameservers, 0);
+ _NOTIFY (config, PROP_NAMESERVERS);
+ }
}
-/* libnl convenience/conversion functions */
-
-static int ip6_addr_to_rtnl_local (const struct in6_addr *ip6_address,
- struct rtnl_addr *addr,
- guint prefix)
+void
+nm_ip6_config_add_nameserver (NMIP6Config *config, const struct in6_addr *new)
{
- struct nl_addr * local = NULL;
- int err = 0;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ int i;
- g_return_val_if_fail (addr != NULL, -1);
+ g_return_if_fail (new != NULL);
- local = nm_utils_ip6_addr_to_nl_addr (ip6_address, prefix);
- err = rtnl_addr_set_local (addr, local);
- nl_addr_put (local);
+ for (i = 0; i < priv->nameservers->len; i++)
+ if (IN6_ARE_ADDR_EQUAL (new, &g_array_index (priv->nameservers, struct in6_addr, i)))
+ return;
- return err;
+ g_array_append_val (priv->nameservers, *new);
+ _NOTIFY (config, PROP_NAMESERVERS);
}
-static int ip6_addr_to_rtnl_peer (const struct in6_addr *ip6_address, struct rtnl_addr *addr)
+void
+nm_ip6_config_del_nameserver (NMIP6Config *config, guint i)
{
- struct nl_addr * peer = NULL;
- int err = 0;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+
+ g_return_if_fail (i < priv->nameservers->len);
- g_return_val_if_fail (addr != NULL, -1);
+ g_array_remove_index (priv->nameservers, i);
+ _NOTIFY (config, PROP_NAMESERVERS);
+}
- peer = nm_utils_ip6_addr_to_nl_addr (ip6_address, 0);
- err = rtnl_addr_set_peer (addr, peer);
- nl_addr_put (peer);
+guint32
+nm_ip6_config_get_num_nameservers (const NMIP6Config *config)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return err;
+ return priv->nameservers->len;
}
-struct rtnl_addr *
-nm_ip6_config_to_rtnl_addr (NMIP6Config *config, guint32 i, guint32 flags)
+const struct in6_addr *
+nm_ip6_config_get_nameserver (const NMIP6Config *config, guint i)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- NMIP6Address *config_addr;
- struct rtnl_addr *addr;
- gboolean success = TRUE;
- g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+ return &g_array_index (priv->nameservers, struct in6_addr, i);
+}
- config_addr = nm_ip6_config_get_address (config, i);
- g_return_val_if_fail (config_addr != NULL, NULL);
+/******************************************************************/
- if (!(addr = rtnl_addr_alloc()))
- return NULL;
+void
+nm_ip6_config_reset_domains (NMIP6Config *config)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if (flags & NM_RTNL_ADDR_ADDR) {
- success = (ip6_addr_to_rtnl_local (nm_ip6_address_get_address (config_addr),
- addr,
- nm_ip6_address_get_prefix (config_addr)) >= 0);
+ if (priv->domains->len != 0) {
+ g_ptr_array_set_size (priv->domains, 0);
+ _NOTIFY (config, PROP_DOMAINS);
}
+}
- if (flags & NM_RTNL_ADDR_PTP_ADDR)
- success = (ip6_addr_to_rtnl_peer (&priv->ptp_address, addr) >= 0);
+void
+nm_ip6_config_add_domain (NMIP6Config *config, const char *domain)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ int i;
- if (flags & NM_RTNL_ADDR_PREFIX)
- rtnl_addr_set_prefixlen (addr, nm_ip6_address_get_prefix (config_addr));
+ g_return_if_fail (domain != NULL);
+ g_return_if_fail (domain[0] != '\0');
- if (!success) {
- rtnl_addr_put (addr);
- addr = NULL;
- }
+ for (i = 0; i < priv->domains->len; i++)
+ if (!g_strcmp0 (g_ptr_array_index (priv->domains, i), domain))
+ return;
- return addr;
+ g_ptr_array_add (priv->domains, g_strdup (domain));
+ _NOTIFY (config, PROP_DOMAINS);
}
-static gboolean
-addr_slist_compare (GSList *a, GSList *b)
+void
+nm_ip6_config_del_domain (NMIP6Config *config, guint i)
{
- GSList *iter_a, *iter_b;
- gboolean found = FALSE;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- for (iter_a = a; iter_a; iter_a = g_slist_next (iter_a)) {
- NMIP6Address *addr_a = (NMIP6Address *) iter_a->data;
+ g_return_if_fail (i < priv->domains->len);
- for (iter_b = b, found = FALSE; iter_b; iter_b = g_slist_next (iter_b)) {
- NMIP6Address *addr_b = (NMIP6Address *) iter_b->data;
+ g_ptr_array_remove_index (priv->domains, i);
+ _NOTIFY (config, PROP_DOMAINS);
+}
- if (nm_ip6_address_compare (addr_a, addr_b)) {
- found = TRUE;
- break;
- }
- }
+guint32
+nm_ip6_config_get_num_domains (const NMIP6Config *config)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if (!found)
- return FALSE;
- }
- return TRUE;
+ return priv->domains->len;
}
-static gboolean
-route_slist_compare (GSList *a, GSList *b)
+const char *
+nm_ip6_config_get_domain (const NMIP6Config *config, guint i)
{
- GSList *iter_a, *iter_b;
- gboolean found = FALSE;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- for (iter_a = a; iter_a; iter_a = g_slist_next (iter_a)) {
- NMIP6Route *route_a = (NMIP6Route *) iter_a->data;
+ return g_ptr_array_index (priv->domains, i);
+}
- for (iter_b = b, found = FALSE; iter_b; iter_b = g_slist_next (iter_b)) {
- NMIP6Route *route_b = (NMIP6Route *) iter_b->data;
+/******************************************************************/
- if (nm_ip6_route_compare (route_a, route_b)) {
- found = TRUE;
- break;
- }
- }
+void
+nm_ip6_config_reset_searches (NMIP6Config *config)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if (!found)
- return FALSE;
+ if (priv->searches->len != 0) {
+ g_ptr_array_set_size (priv->searches, 0);
+ _NOTIFY (config, PROP_SEARCHES);
}
- return TRUE;
}
-static gboolean
-string_array_compare (GPtrArray *a, GPtrArray *b)
+void
+nm_ip6_config_add_search (NMIP6Config *config, const char *new)
{
- int i, j;
- gboolean found = FALSE;
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ int i;
- for (i = 0; i < a->len; i++) {
- for (j = 0, found = FALSE; j < b->len; j++) {
- const char *item_a = g_ptr_array_index (a, i);
- const char *item_b = g_ptr_array_index (b, j);
+ g_return_if_fail (new != NULL);
+ g_return_if_fail (new[0] != '\0');
- if ((!item_a && !item_b) || (item_a && item_b && !strcmp (item_a, item_b))) {
- found = TRUE;
- break;
- }
- }
+ for (i = 0; i < priv->searches->len; i++)
+ if (!g_strcmp0 (g_ptr_array_index (priv->searches, i), new))
+ return;
- if (!found)
- return FALSE;
- }
- return TRUE;
+ g_ptr_array_add (priv->searches, g_strdup (new));
+ _NOTIFY (config, PROP_SEARCHES);
}
-static gboolean
-addr_array_compare (GArray *a, GArray *b)
-{
- struct in6_addr *addrs_a, *addrs_b;
- int i, j;
- gboolean found = FALSE;
-
- addrs_a = (struct in6_addr *)a->data;
- addrs_b = (struct in6_addr *)b->data;
- for (i = 0; i < a->len; i++) {
- for (j = 0, found = FALSE; j < b->len; j++) {
- if (IN6_ARE_ADDR_EQUAL (&addrs_a[i], &addrs_b[j])) {
- found = TRUE;
- break;
- }
- }
+void
+nm_ip6_config_del_search (NMIP6Config *config, guint i)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if (!found)
- return FALSE;
- }
- return TRUE;
+ g_return_if_fail (i < priv->searches->len);
+
+ g_ptr_array_remove_index (priv->searches, i);
+ _NOTIFY (config, PROP_SEARCHES);
}
-NMIP6ConfigCompareFlags
-nm_ip6_config_diff (NMIP6Config *a, NMIP6Config *b)
+guint32
+nm_ip6_config_get_num_searches (const NMIP6Config *config)
{
- NMIP6ConfigPrivate *a_priv;
- NMIP6ConfigPrivate *b_priv;
- NMIP6ConfigCompareFlags flags = NM_IP6_COMPARE_FLAG_NONE;
-
- if ((a && !b) || (b && !a))
- return NM_IP6_COMPARE_FLAG_ALL;
- if (!a && !b)
- return NM_IP6_COMPARE_FLAG_NONE;
-
- a_priv = NM_IP6_CONFIG_GET_PRIVATE (a);
- b_priv = NM_IP6_CONFIG_GET_PRIVATE (b);
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if ( !addr_slist_compare (a_priv->addresses, b_priv->addresses)
- || !addr_slist_compare (b_priv->addresses, a_priv->addresses))
- flags |= NM_IP6_COMPARE_FLAG_ADDRESSES;
+ return priv->searches->len;
+}
- if (memcmp (&a_priv->ptp_address, &b_priv->ptp_address, sizeof (struct in6_addr)) != 0)
- flags |= NM_IP6_COMPARE_FLAG_PTP_ADDRESS;
+const char *
+nm_ip6_config_get_search (const NMIP6Config *config, guint i)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if ( (a_priv->nameservers->len != b_priv->nameservers->len)
- || !addr_array_compare (a_priv->nameservers, b_priv->nameservers)
- || !addr_array_compare (b_priv->nameservers, a_priv->nameservers))
- flags |= NM_IP6_COMPARE_FLAG_NAMESERVERS;
+ return g_ptr_array_index (priv->searches, i);
+}
- if ( !route_slist_compare (a_priv->routes, b_priv->routes)
- || !route_slist_compare (b_priv->routes, a_priv->routes))
- flags |= NM_IP6_COMPARE_FLAG_ROUTES;
+/******************************************************************/
- if ( (a_priv->domains->len != b_priv->domains->len)
- || !string_array_compare (a_priv->domains, b_priv->domains)
- || !string_array_compare (b_priv->domains, a_priv->domains))
- flags |= NM_IP6_COMPARE_FLAG_DOMAINS;
+void
+nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- if ( (a_priv->searches->len != b_priv->searches->len)
- || !string_array_compare (a_priv->searches, b_priv->searches)
- || !string_array_compare (b_priv->searches, a_priv->searches))
- flags |= NM_IP6_COMPARE_FLAG_SEARCHES;
+ priv->mss = mss;
+}
- if (a_priv->mss != b_priv->mss)
- flags |= NM_IP6_COMPARE_FLAG_MSS;
+guint32
+nm_ip6_config_get_mss (const NMIP6Config *config)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- return flags;
+ return priv->mss;
}
+/******************************************************************/
+
static inline void
hash_u32 (GChecksum *sum, guint32 n)
{
@@ -686,40 +1393,39 @@ hash_u32 (GChecksum *sum, guint32 n)
static inline void
hash_in6addr (GChecksum *sum, const struct in6_addr *a)
{
- g_checksum_update (sum, (const guint8 *) a, sizeof (*a));
+ if (a)
+ g_checksum_update (sum, (const guint8 *) a, sizeof (*a));
+ else
+ g_checksum_update (sum, (const guint8 *) &in6addr_any, sizeof (in6addr_any));
}
void
-nm_ip6_config_hash (NMIP6Config *config, GChecksum *sum, gboolean dns_only)
+nm_ip6_config_hash (const NMIP6Config *config, GChecksum *sum, gboolean dns_only)
{
guint32 i;
- const struct in6_addr *in6a;
const char *s;
- g_return_if_fail (config != NULL);
- g_return_if_fail (sum != NULL);
+ g_return_if_fail (config);
+ g_return_if_fail (sum);
if (dns_only == FALSE) {
+ hash_in6addr (sum, nm_ip6_config_get_gateway (config));
+
for (i = 0; i < nm_ip6_config_get_num_addresses (config); i++) {
- NMIP6Address *a = nm_ip6_config_get_address (config, i);
+ const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i);
- hash_in6addr (sum, nm_ip6_address_get_address (a));
- hash_u32 (sum, nm_ip6_address_get_prefix (a));
- hash_in6addr (sum, nm_ip6_address_get_gateway (a));
+ hash_in6addr (sum, &address->address);
+ hash_u32 (sum, address->plen);
}
for (i = 0; i < nm_ip6_config_get_num_routes (config); i++) {
- NMIP6Route *r = nm_ip6_config_get_route (config, i);
+ const NMPlatformIP6Route *route = nm_ip6_config_get_route (config, i);
- hash_in6addr (sum, nm_ip6_route_get_dest (r));
- hash_u32 (sum, nm_ip6_route_get_prefix (r));
- hash_in6addr (sum, nm_ip6_route_get_next_hop (r));
- hash_u32 (sum, nm_ip6_route_get_metric (r));
+ hash_in6addr (sum, &route->network);
+ hash_u32 (sum, route->plen);
+ hash_in6addr (sum, &route->gateway);
+ hash_u32 (sum, route->metric);
}
-
- in6a = nm_ip6_config_get_ptp_address (config);
- if (in6a)
- hash_in6addr (sum, in6a);
}
for (i = 0; i < nm_ip6_config_get_num_nameservers (config); i++)
@@ -736,15 +1442,58 @@ nm_ip6_config_hash (NMIP6Config *config, GChecksum *sum, gboolean dns_only)
}
}
+/**
+ * nm_ip6_config_equal:
+ * @a: first config to compare
+ * @b: second config to compare
+ *
+ * Compares two #NMIP6Configs for basic equality. This means that all
+ * attributes must exist in the same order in both configs (addresses, routes,
+ * domains, DNS servers, etc) but some attributes (address lifetimes, and address
+ * and route sources) are ignored.
+ *
+ * Returns: %TRUE if the configurations are basically equal to each other,
+ * %FALSE if not
+ */
+gboolean
+nm_ip6_config_equal (const NMIP6Config *a, const NMIP6Config *b)
+{
+ GChecksum *a_checksum = g_checksum_new (G_CHECKSUM_SHA1);
+ GChecksum *b_checksum = g_checksum_new (G_CHECKSUM_SHA1);
+ gsize a_len = g_checksum_type_get_length (G_CHECKSUM_SHA1);
+ gsize b_len = g_checksum_type_get_length (G_CHECKSUM_SHA1);
+ guchar a_data[a_len], b_data[b_len];
+ gboolean equal;
+
+ if (a)
+ nm_ip6_config_hash (a, a_checksum, FALSE);
+ if (b)
+ nm_ip6_config_hash (b, b_checksum, FALSE);
+
+ g_checksum_get_digest (a_checksum, a_data, &a_len);
+ g_checksum_get_digest (b_checksum, b_data, &b_len);
+
+ g_assert (a_len == b_len);
+ equal = !memcmp (a_data, b_data, a_len);
+
+ g_checksum_free (a_checksum);
+ g_checksum_free (b_checksum);
+
+ return equal;
+}
+
+/******************************************************************/
+
static void
nm_ip6_config_init (NMIP6Config *config)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ priv->addresses = g_array_new (FALSE, TRUE, sizeof (NMPlatformIP6Address));
+ priv->routes = g_array_new (FALSE, TRUE, sizeof (NMPlatformIP6Route));
priv->nameservers = g_array_new (FALSE, TRUE, sizeof (struct in6_addr));
- priv->domains = g_ptr_array_sized_new (3);
- priv->searches = g_ptr_array_sized_new (3);
- priv->gateway_set = FALSE;
+ priv->domains = g_ptr_array_new_with_free_func (g_free);
+ priv->searches = g_ptr_array_new_with_free_func (g_free);
}
static void
@@ -752,11 +1501,11 @@ finalize (GObject *object)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (object);
- nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip6_address_unref);
- nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
- g_array_free (priv->nameservers, TRUE);
- g_ptr_array_free (priv->domains, TRUE);
- g_ptr_array_free (priv->searches, TRUE);
+ g_array_unref (priv->addresses);
+ g_array_unref (priv->routes);
+ g_array_unref (priv->nameservers);
+ g_ptr_array_unref (priv->domains);
+ g_ptr_array_unref (priv->searches);
G_OBJECT_CLASS (nm_ip6_config_parent_class)->finalize (object);
}
@@ -786,11 +1535,100 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
+ NMIP6Config *config = NM_IP6_CONFIG (object);
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (object);
switch (prop_id) {
+ case PROP_GATEWAY:
+ if (!IN6_IS_ADDR_UNSPECIFIED (&priv->gateway))
+ g_value_set_string (value, nm_utils_inet6_ntop (&priv->gateway, NULL));
+ else
+ g_value_set_string (value, NULL);
+ break;
case PROP_ADDRESSES:
- nm_utils_ip6_addresses_to_gvalue (priv->addresses, value);
+ {
+ GPtrArray *addresses = g_ptr_array_new ();
+ const struct in6_addr *gateway = nm_ip6_config_get_gateway (config);
+ int naddr = nm_ip6_config_get_num_addresses (config);
+ int i;
+
+ for (i = 0; i < naddr; i++) {
+ const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i);
+
+ GValueArray *array = g_value_array_new (3);
+ GValue element = G_VALUE_INIT;
+ GByteArray *ba;
+
+ /* IP address */
+ g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
+ ba = g_byte_array_new ();
+ g_byte_array_append (ba, (guint8 *) &address->address, 16);
+ g_value_take_boxed (&element, ba);
+ g_value_array_append (array, &element);
+ g_value_unset (&element);
+
+ /* Prefix */
+ g_value_init (&element, G_TYPE_UINT);
+ g_value_set_uint (&element, address->plen);
+ g_value_array_append (array, &element);
+ g_value_unset (&element);
+
+ /* Gateway */
+ g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
+ ba = g_byte_array_new ();
+ g_byte_array_append (ba, (guint8 *) (gateway ? gateway : &in6addr_any), sizeof (*gateway));
+ g_value_take_boxed (&element, ba);
+ g_value_array_append (array, &element);
+ g_value_unset (&element);
+
+ g_ptr_array_add (addresses, array);
+ }
+
+ g_value_take_boxed (value, addresses);
+ }
+ break;
+ case PROP_ROUTES:
+ {
+ GPtrArray *routes = g_ptr_array_new ();
+ int nroutes = nm_ip6_config_get_num_routes (config);
+ int i;
+
+ for (i = 0; i < nroutes; i++) {
+ const NMPlatformIP6Route *route = nm_ip6_config_get_route (config, i);
+
+ GValueArray *array = g_value_array_new (4);
+ GByteArray *ba;
+ GValue element = G_VALUE_INIT;
+
+ g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
+ ba = g_byte_array_new ();
+ g_byte_array_append (ba, (guint8 *) &route->network, sizeof (route->network));
+ g_value_take_boxed (&element, ba);
+ g_value_array_append (array, &element);
+ g_value_unset (&element);
+
+ g_value_init (&element, G_TYPE_UINT);
+ g_value_set_uint (&element, route->plen);
+ g_value_array_append (array, &element);
+ g_value_unset (&element);
+
+ g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
+ ba = g_byte_array_new ();
+ g_byte_array_append (ba, (guint8 *) &route->gateway, sizeof (route->gateway));
+ g_value_take_boxed (&element, ba);
+ g_value_array_append (array, &element);
+ g_value_unset (&element);
+
+ g_value_init (&element, G_TYPE_UINT);
+ g_value_set_uint (&element, route->metric);
+ g_value_array_append (array, &element);
+ g_value_unset (&element);
+
+ g_ptr_array_add (routes, array);
+ }
+
+ g_value_take_boxed (value, routes);
+ }
break;
case PROP_NAMESERVERS:
nameservers_to_gvalue (priv->nameservers, value);
@@ -798,8 +1636,8 @@ get_property (GObject *object, guint prop_id,
case PROP_DOMAINS:
g_value_set_boxed (value, priv->domains);
break;
- case PROP_ROUTES:
- nm_utils_ip6_routes_to_gvalue (priv->routes, value);
+ case PROP_SEARCHES:
+ g_value_set_boxed (value, priv->searches);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -819,34 +1657,46 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
object_class->finalize = finalize;
/* properties */
- g_object_class_install_property (object_class, PROP_ADDRESSES,
- g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES,
- "Addresses",
- "IP6 addresses",
- DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_NAMESERVERS,
- g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS,
- "Nameservers",
- "DNS list",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_DOMAINS,
- g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS,
- "Domains",
- "Domains",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_ROUTES,
- g_param_spec_boxed (NM_IP6_CONFIG_ROUTES,
- "Routes",
- "Routes",
- DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
- G_PARAM_READABLE));
-
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (config_class),
- &dbus_glib_nm_ip6_config_object_info);
+ obj_properties[PROP_GATEWAY] =
+ g_param_spec_string (NM_IP6_CONFIG_GATEWAY,
+ "Gateway",
+ "IP6 Gateway",
+ NULL,
+ G_PARAM_READABLE);
+ obj_properties[PROP_ADDRESSES] =
+ g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES,
+ "Addresses",
+ "IP6 addresses",
+ DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
+ G_PARAM_READABLE);
+ obj_properties[PROP_ROUTES] =
+ g_param_spec_boxed (NM_IP6_CONFIG_ROUTES,
+ "Routes",
+ "Routes",
+ DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
+ G_PARAM_READABLE);
+ obj_properties[PROP_NAMESERVERS] =
+ g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS,
+ "Nameservers",
+ "DNS list",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
+ G_PARAM_READABLE);
+ obj_properties[PROP_DOMAINS] =
+ g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS,
+ "Domains",
+ "Domains",
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_PARAM_READABLE);
+ obj_properties[PROP_SEARCHES] =
+ g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES,
+ "Searches",
+ "Searches",
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_PARAM_READABLE);
+
+ g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
+
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (config_class),
+ &dbus_glib_nm_ip6_config_object_info);
}
diff --git a/src/nm-ip6-config.h b/src/nm-ip6-config.h
index 158f54945..b7b9d83ec 100644
--- a/src/nm-ip6-config.h
+++ b/src/nm-ip6-config.h
@@ -1,5 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
+/* NetworkManager
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,23 +15,23 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008–2013 Red Hat, Inc.
*/
#ifndef NM_IP6_CONFIG_H
#define NM_IP6_CONFIG_H
-#include <glib.h>
#include <glib-object.h>
+#include "nm-platform.h"
#include "nm-setting-ip6-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))
-#define NM_IP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP6_CONFIG, NMIP6ConfigClass))
-#define NM_IS_IP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IP6_CONFIG))
+#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))
+#define NM_IS_IP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IP6_CONFIG))
#define NM_IS_IP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IP6_CONFIG))
-#define NM_IP6_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP6_CONFIG, NMIP6ConfigClass))
+#define NM_IP6_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP6_CONFIG, NMIP6ConfigClass))
typedef struct {
GObject parent;
@@ -41,85 +41,90 @@ typedef struct {
GObjectClass parent;
} NMIP6ConfigClass;
+#define NM_IP6_CONFIG_GATEWAY "gateway"
#define NM_IP6_CONFIG_ADDRESSES "addresses"
+#define NM_IP6_CONFIG_ROUTES "routes"
#define NM_IP6_CONFIG_NAMESERVERS "nameservers"
#define NM_IP6_CONFIG_DOMAINS "domains"
-#define NM_IP6_CONFIG_ROUTES "routes"
+#define NM_IP6_CONFIG_SEARCHES "searches"
GType nm_ip6_config_get_type (void);
-NMIP6Config * nm_ip6_config_new (void);
-void nm_ip6_config_export (NMIP6Config *config);
-const char * nm_ip6_config_get_dbus_path (NMIP6Config *config);
-
-void nm_ip6_config_take_address (NMIP6Config *config, NMIP6Address *address);
-void nm_ip6_config_add_address (NMIP6Config *config, NMIP6Address *address);
-void nm_ip6_config_replace_address (NMIP6Config *config, guint32 i, NMIP6Address *new_address);
-NMIP6Address *nm_ip6_config_get_address (NMIP6Config *config, guint32 i);
-guint32 nm_ip6_config_get_num_addresses (NMIP6Config *config);
-
-const struct in6_addr *nm_ip6_config_get_ptp_address (NMIP6Config *config);
-void nm_ip6_config_set_ptp_address (NMIP6Config *config, const struct in6_addr *ptp_addr);
-
-void nm_ip6_config_add_nameserver (NMIP6Config *config, const struct in6_addr *nameserver);
-const struct in6_addr *nm_ip6_config_get_nameserver (NMIP6Config *config, guint i);
-guint32 nm_ip6_config_get_num_nameservers (NMIP6Config *config);
-void nm_ip6_config_reset_nameservers (NMIP6Config *config);
-
-void nm_ip6_config_set_gateway (NMIP6Config *config, const struct in6_addr *gateway);
-const struct in6_addr *nm_ip6_config_get_gateway (NMIP6Config *config);
-
-void nm_ip6_config_take_route (NMIP6Config *config, NMIP6Route *route);
-void nm_ip6_config_add_route (NMIP6Config *config, NMIP6Route *route);
-void nm_ip6_config_replace_route (NMIP6Config *config, guint32 i, NMIP6Route *new_route);
-NMIP6Route * nm_ip6_config_get_route (NMIP6Config *config, guint32 i);
-guint32 nm_ip6_config_get_num_routes (NMIP6Config *config);
-void nm_ip6_config_reset_routes (NMIP6Config *config);
-
-void nm_ip6_config_add_domain (NMIP6Config *config, const char *domain);
-const char * nm_ip6_config_get_domain (NMIP6Config *config, guint i);
-guint32 nm_ip6_config_get_num_domains (NMIP6Config *config);
-void nm_ip6_config_reset_domains (NMIP6Config *config);
-
-void nm_ip6_config_add_search (NMIP6Config *config, const char *search);
-const char * nm_ip6_config_get_search (NMIP6Config *config, guint i);
-guint32 nm_ip6_config_get_num_searches (NMIP6Config *config);
-void nm_ip6_config_reset_searches (NMIP6Config *config);
-
-guint32 nm_ip6_config_get_mss (NMIP6Config *config);
-void nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss);
-
-gboolean nm_ip6_config_get_never_default (NMIP6Config *config);
-void nm_ip6_config_set_never_default (NMIP6Config *config, gboolean never_default);
-
-/* Flags for nm_ip6_config_to_rtnl_addr() */
-#define NM_RTNL_ADDR_NONE 0x0000
-#define NM_RTNL_ADDR_ADDR 0x0001
-#define NM_RTNL_ADDR_PTP_ADDR 0x0002
-#define NM_RTNL_ADDR_PREFIX 0x0004
-#define NM_RTNL_ADDR_BROADCAST 0x0008
-
-#define NM_RTNL_ADDR_DEFAULT (NM_RTNL_ADDR_ADDR | NM_RTNL_ADDR_PREFIX | NM_RTNL_ADDR_BROADCAST)
-#define NM_RTNL_ADDR_PTP_DEFAULT (NM_RTNL_ADDR_ADDR | NM_RTNL_ADDR_PREFIX | NM_RTNL_ADDR_PTP_ADDR)
-
-struct rtnl_addr *nm_ip6_config_to_rtnl_addr (NMIP6Config *config, guint32 i, guint32 flags);
-
-typedef enum {
- NM_IP6_COMPARE_FLAG_NONE = 0x00000000, /* match nothing, kinda pointless */
- NM_IP6_COMPARE_FLAG_ADDRESSES = 0x00000001,
- NM_IP6_COMPARE_FLAG_PTP_ADDRESS = 0x00000002,
- NM_IP6_COMPARE_FLAG_NAMESERVERS = 0x00000004,
- NM_IP6_COMPARE_FLAG_ROUTES = 0x00000008,
- NM_IP6_COMPARE_FLAG_DOMAINS = 0x00000010,
- NM_IP6_COMPARE_FLAG_SEARCHES = 0x00000020,
- NM_IP6_COMPARE_FLAG_MSS = 0x00000080,
- NM_IP6_COMPARE_FLAG_ALL = 0xFFFFFFFF /* match everything */
-} NMIP6ConfigCompareFlags;
-
-/* Returns a bitfield representing how the two IP6 configs differ */
-NMIP6ConfigCompareFlags nm_ip6_config_diff (NMIP6Config *a, NMIP6Config *b);
-
-void nm_ip6_config_hash (NMIP6Config *config, GChecksum *sum, gboolean dns_only);
+NMIP6Config * nm_ip6_config_new (void);
+
+/* D-Bus integration */
+void nm_ip6_config_export (NMIP6Config *config);
+const char * nm_ip6_config_get_dbus_path (const NMIP6Config *config);
+
+/* Integration with nm-platform and nm-setting */
+NMIP6Config *nm_ip6_config_capture (int ifindex, gboolean capture_resolv_conf, NMSettingIP6ConfigPrivacy use_temporary);
+gboolean nm_ip6_config_commit (const NMIP6Config *config, int ifindex);
+void nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting, int default_route_metric);
+NMSetting *nm_ip6_config_create_setting (const NMIP6Config *config);
+
+/* Utility functions */
+void nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src);
+void nm_ip6_config_subtract (NMIP6Config *dst, const NMIP6Config *src);
+gboolean nm_ip6_config_replace (NMIP6Config *dst, const NMIP6Config *src, gboolean *relevant_changes);
+int nm_ip6_config_destination_is_direct (const NMIP6Config *config, const struct in6_addr *dest, int plen);
+void nm_ip6_config_dump (const NMIP6Config *config, const char *detail);
+
+/* Gateways */
+void nm_ip6_config_set_never_default (NMIP6Config *config, gboolean never_default);
+gboolean nm_ip6_config_get_never_default (const NMIP6Config *config);
+void nm_ip6_config_set_gateway (NMIP6Config *config, const struct in6_addr *);
+const struct in6_addr *nm_ip6_config_get_gateway (const NMIP6Config *config);
+
+/* Addresses */
+void nm_ip6_config_reset_addresses (NMIP6Config *config);
+void nm_ip6_config_add_address (NMIP6Config *config, const NMPlatformIP6Address *address);
+void nm_ip6_config_del_address (NMIP6Config *config, guint i);
+guint nm_ip6_config_get_num_addresses (const NMIP6Config *config);
+const NMPlatformIP6Address *nm_ip6_config_get_address (const NMIP6Config *config, guint i);
+gboolean nm_ip6_config_address_exists (const NMIP6Config *config, const NMPlatformIP6Address *address);
+gboolean nm_ip6_config_addresses_sort (NMIP6Config *config, NMSettingIP6ConfigPrivacy use_temporary);
+
+
+/* Routes */
+void nm_ip6_config_reset_routes (NMIP6Config *config);
+void nm_ip6_config_add_route (NMIP6Config *config, const NMPlatformIP6Route *route);
+void nm_ip6_config_del_route (NMIP6Config *config, guint i);
+guint32 nm_ip6_config_get_num_routes (const NMIP6Config *config);
+const NMPlatformIP6Route *nm_ip6_config_get_route (const NMIP6Config *config, guint32 i);
+
+/* Nameservers */
+void nm_ip6_config_reset_nameservers (NMIP6Config *config);
+void nm_ip6_config_add_nameserver (NMIP6Config *config, const struct in6_addr *nameserver);
+void nm_ip6_config_del_nameserver (NMIP6Config *config, guint i);
+guint32 nm_ip6_config_get_num_nameservers (const NMIP6Config *config);
+const struct in6_addr *nm_ip6_config_get_nameserver (const NMIP6Config *config, guint i);
+
+/* Domains */
+void nm_ip6_config_reset_domains (NMIP6Config *config);
+void nm_ip6_config_add_domain (NMIP6Config *config, const char *domain);
+void nm_ip6_config_del_domain (NMIP6Config *config, guint i);
+guint32 nm_ip6_config_get_num_domains (const NMIP6Config *config);
+const char * nm_ip6_config_get_domain (const NMIP6Config *config, guint i);
+
+/* Search lists */
+void nm_ip6_config_reset_searches (NMIP6Config *config);
+void nm_ip6_config_add_search (NMIP6Config *config, const char *search);
+void nm_ip6_config_del_search (NMIP6Config *config, guint i);
+guint32 nm_ip6_config_get_num_searches (const NMIP6Config *config);
+const char * nm_ip6_config_get_search (const NMIP6Config *config, guint i);
+
+/* MSS */
+void nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss);
+guint32 nm_ip6_config_get_mss (const NMIP6Config *config);
+
+void nm_ip6_config_hash (const NMIP6Config *config, GChecksum *sum, gboolean dns_only);
+gboolean nm_ip6_config_equal (const NMIP6Config *a, const NMIP6Config *b);
+
+/******************************************************/
+/* Testing-only functions */
+
+gboolean nm_ip6_config_capture_resolv_conf (GArray *nameservers,
+ const char *rc_contents);
#endif /* NM_IP6_CONFIG_H */
diff --git a/src/nm-manager-auth.c b/src/nm-manager-auth.c
index 21192bdfb..7f8b31309 100644
--- a/src/nm-manager-auth.c
+++ b/src/nm-manager-auth.c
@@ -31,6 +31,7 @@
#include "nm-manager-auth.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
+#include "nm-auth-subject.h"
struct NMAuthChain {
guint32 refcount;
@@ -42,8 +43,12 @@ struct NMAuthChain {
DBusGMethodInvocation *context;
char *owner;
+ gulong user_uid;
+ NMAuthSubject *subject;
GError *error;
+ guint idle_id;
+
NMAuthChainResultFunc done_func;
gpointer user_data;
};
@@ -52,8 +57,7 @@ typedef struct {
NMAuthChain *chain;
GCancellable *cancellable;
char *permission;
- guint idle_id;
- gboolean disposed;
+ guint call_idle_id;
} AuthCall;
typedef struct {
@@ -72,93 +76,123 @@ free_data (gpointer data)
g_free (tmp);
}
+static gboolean
+auth_chain_finish (gpointer user_data)
+{
+ NMAuthChain *self = user_data;
+
+ self->idle_id = 0;
+
+ /* Ensure we say alive across the callback */
+ self->refcount++;
+ self->done_func (self, self->error, self->context, self->user_data);
+ nm_auth_chain_unref (self);
+ return FALSE;
+}
+
#if WITH_POLKIT
static PolkitAuthority *
-pk_authority_get (void)
+pk_authority_get (GError **error)
{
static PolkitAuthority *authority = NULL;
- GError *error = NULL;
- if (authority == NULL) {
- authority = polkit_authority_get_sync (NULL, &error);
- if (authority == NULL) {
- nm_log_err (LOGD_CORE, "Failed to initialize PolicyKit: (%d) %s",
- error ? error->code : -1,
- (error && error->message) ? error->message : "(unknown)");
- g_clear_error (&error);
- return NULL;
- }
- }
+ if (authority == NULL)
+ authority = polkit_authority_get_sync (NULL, error);
/* Yes, ref every time; we want to keep the object alive */
- return g_object_ref (authority);
+ g_warn_if_fail (authority);
+ return authority ? g_object_ref (authority) : NULL;
}
#endif
static NMAuthChain *
-_auth_chain_new (DBusGMethodInvocation *context,
- DBusGProxy *proxy,
- DBusMessage *message,
+_auth_chain_new (NMAuthSubject *subject,
const char *dbus_sender,
+ gulong user_uid,
+ DBusGMethodInvocation *context,
NMAuthChainResultFunc done_func,
gpointer user_data)
{
NMAuthChain *self;
- g_return_val_if_fail (context || proxy || message || dbus_sender, NULL);
+ g_return_val_if_fail (subject || user_uid == 0 || dbus_sender, NULL);
self = g_malloc0 (sizeof (NMAuthChain));
self->refcount = 1;
#if WITH_POLKIT
- self->authority = pk_authority_get ();
+ self->authority = pk_authority_get (&self->error);
#endif
self->data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_data);
self->done_func = done_func;
self->user_data = user_data;
self->context = context;
- if (proxy)
- self->owner = g_strdup (dbus_g_proxy_get_bus_name (proxy));
- else if (context)
- self->owner = dbus_g_method_get_sender (context);
- else if (message)
- self->owner = g_strdup (dbus_message_get_sender (message));
- else if (dbus_sender)
+ if (subject) {
+ self->user_uid = nm_auth_subject_get_uid (subject);
+ self->subject = g_object_ref (subject);
+ } else {
+ self->user_uid = user_uid;
self->owner = g_strdup (dbus_sender);
-
- if (!self->owner) {
- /* Need an owner */
- g_warn_if_fail (self->owner);
- nm_auth_chain_unref (self);
- self = NULL;
+ if (user_uid > 0 && !self->owner) {
+ /* Need an owner */
+ g_warn_if_fail (self->owner);
+ nm_auth_chain_unref (self);
+ self = NULL;
+ }
}
return self;
}
NMAuthChain *
-nm_auth_chain_new (DBusGMethodInvocation *context,
- DBusGProxy *proxy,
- NMAuthChainResultFunc done_func,
- gpointer user_data)
+nm_auth_chain_new_dbus_sender (const char *dbus_sender,
+ gulong user_uid,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data)
{
- return _auth_chain_new (context, proxy, NULL, NULL, done_func, user_data);
+ return _auth_chain_new (NULL, dbus_sender, user_uid, NULL, done_func, user_data);
}
+/* Creates the NMAuthSubject automatically */
NMAuthChain *
-nm_auth_chain_new_raw_message (DBusMessage *message,
- NMAuthChainResultFunc done_func,
- gpointer user_data)
+nm_auth_chain_new_context (DBusGMethodInvocation *context,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data)
{
- return _auth_chain_new (NULL, NULL, message, NULL, done_func, user_data);
+ NMAuthSubject *subject;
+ NMAuthChain *chain;
+
+ g_return_val_if_fail (context != NULL, NULL);
+
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject)
+ return NULL;
+
+ chain = nm_auth_chain_new_subject (subject,
+ context,
+ done_func,
+ user_data);
+ g_object_unref (subject);
+ return chain;
}
+/* Requires an NMAuthSubject */
NMAuthChain *
-nm_auth_chain_new_dbus_sender (const char *dbus_sender,
- NMAuthChainResultFunc done_func,
- gpointer user_data)
+nm_auth_chain_new_subject (NMAuthSubject *subject,
+ DBusGMethodInvocation *context,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data)
{
- return _auth_chain_new (NULL, NULL, NULL, dbus_sender, done_func, user_data);
+ NMAuthChain *chain;
+
+ g_return_val_if_fail (NM_IS_AUTH_SUBJECT (subject), NULL);
+ chain = _auth_chain_new (subject, NULL, G_MAXULONG, context, done_func, user_data);
+
+ /* Chains creation from a valid NMAuthSubject cannot fail since the
+ * subject already has all the necessary auth info.
+ */
+ g_assert (chain);
+ return chain;
}
gpointer
@@ -269,10 +303,8 @@ nm_auth_chain_check_done (NMAuthChain *self)
g_return_if_fail (self != NULL);
if (g_slist_length (self->calls) == 0) {
- /* Ensure we say alive across the callback */
- self->refcount++;
- self->done_func (self, self->error, self->context, self->user_data);
- nm_auth_chain_unref (self);
+ g_assert (self->idle_id == 0);
+ self->idle_id = g_idle_add (auth_chain_finish, self);
}
}
@@ -293,32 +325,15 @@ auth_call_new (NMAuthChain *chain, const char *permission)
call = g_malloc0 (sizeof (AuthCall));
call->chain = chain;
call->permission = g_strdup (permission);
- call->cancellable = g_cancellable_new ();
chain->calls = g_slist_append (chain->calls, call);
return call;
}
static void
-auth_call_cancel (AuthCall *call)
-{
- call->disposed = TRUE;
- g_cancellable_cancel (call->cancellable);
-}
-
-static void
auth_call_free (AuthCall *call)
{
- g_return_if_fail (call != NULL);
-
- call->disposed = TRUE;
g_free (call->permission);
- call->permission = NULL;
- call->chain = NULL;
- g_object_unref (call->cancellable);
- call->cancellable = NULL;
- if (call->idle_id)
- g_source_remove (call->idle_id);
- memset (call, 0, sizeof (*call));
+ g_clear_object (&call->cancellable);
g_free (call);
}
@@ -326,9 +341,6 @@ auth_call_free (AuthCall *call)
static gboolean
auth_call_complete (AuthCall *call)
{
- g_return_val_if_fail (call != NULL, FALSE);
-
- call->idle_id = 0;
nm_auth_chain_remove_call (call->chain, call);
nm_auth_chain_check_done (call->chain);
auth_call_free (call);
@@ -336,12 +348,20 @@ auth_call_complete (AuthCall *call)
}
static void
-auth_call_schedule_early_finish (AuthCall *call, GError *error)
+auth_call_cancel (gpointer user_data)
{
- if (!call->chain->error)
- call->chain->error = error;
- if (!call->idle_id)
- call->idle_id = g_idle_add ((GSourceFunc) auth_call_complete, call);
+ AuthCall *call = user_data;
+
+ if (call->cancellable) {
+ /* we don't free call immediately. Instead we cancel the async operation
+ * and set cancellable to NULL. pk_call_cb() will check for this and
+ * do the final cleanup. */
+ g_cancellable_cancel (call->cancellable);
+ g_clear_object (&call->cancellable);
+ } else {
+ g_source_remove (call->call_idle_id);
+ auth_call_free (call);
+ }
}
#if WITH_POLKIT
@@ -349,25 +369,26 @@ static void
pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data)
{
AuthCall *call = user_data;
- NMAuthChain *chain = call->chain;
PolkitAuthorizationResult *pk_result;
GError *error = NULL;
- /* If the call is already disposed do nothing */
- if (call->disposed) {
+ pk_result = polkit_authority_check_authorization_finish ((PolkitAuthority *) object, result, &error);
+
+ /* If the call is already canceled do nothing */
+ if (!call->cancellable) {
+ g_clear_error (&error);
+ g_clear_object (&pk_result);
auth_call_free (call);
return;
}
- pk_result = polkit_authority_check_authorization_finish (chain->authority, result, &error);
if (error) {
- if (!chain->error)
- chain->error = g_error_copy (error);
+ if (!call->chain->error)
+ call->chain->error = g_error_copy (error);
nm_log_warn (LOGD_CORE, "error requesting auth for %s: (%d) %s",
- call->permission,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
+ call->permission, error->code, error->message);
+ g_clear_error (&error);
} else {
guint call_result = NM_AUTH_CALL_RESULT_UNKNOWN;
@@ -380,48 +401,58 @@ pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data)
} else
call_result = NM_AUTH_CALL_RESULT_NO;
- nm_auth_chain_set_data (chain, call->permission, GUINT_TO_POINTER (call_result), NULL);
- }
-
- g_clear_error (&error);
- if (pk_result)
+ nm_auth_chain_set_data (call->chain, call->permission, GUINT_TO_POINTER (call_result), NULL);
g_object_unref (pk_result);
+ }
auth_call_complete (call);
}
-#endif
-gboolean
-nm_auth_chain_add_call (NMAuthChain *self,
- const char *permission,
- gboolean allow_interaction)
+static void
+auth_call_schedule_complete_with_error (AuthCall *call, const char *msg)
{
- AuthCall *call;
+ if (!call->chain->error)
+ call->chain->error = g_error_new_literal (DBUS_GERROR, DBUS_GERROR_FAILED, msg);
+ call->call_idle_id = g_idle_add ((GSourceFunc) auth_call_complete, call);
+}
-#if WITH_POLKIT
+static gboolean
+_add_call_polkit (NMAuthChain *self,
+ const char *permission,
+ gboolean allow_interaction)
+{
PolkitSubject *subject;
PolkitCheckAuthorizationFlags flags = POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE;
+ AuthCall *call;
g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (self->owner != NULL, FALSE);
+ g_return_val_if_fail (self->owner || self->subject, FALSE);
g_return_val_if_fail (permission != NULL, FALSE);
- subject = polkit_system_bus_name_new (self->owner);
- if (!subject)
- return FALSE;
-
call = auth_call_new (self, permission);
if (self->authority == NULL) {
/* No polkit, no authorization */
- auth_call_schedule_early_finish (call, g_error_new_literal (0, 0, "PolicyKit unavailable"));
- g_object_unref (subject);
+ auth_call_schedule_complete_with_error (call, "PolicyKit not running");
return FALSE;
}
+ if (self->subject) {
+ subject = g_object_ref (nm_auth_subject_get_polkit_subject (self->subject));
+ g_assert (subject);
+ } else {
+ g_assert (self->owner);
+ subject = polkit_system_bus_name_new (self->owner);
+ if (!subject) {
+ auth_call_schedule_complete_with_error (call, "Failed to create polkit subject");
+ return FALSE;
+ }
+ }
+
if (allow_interaction)
flags = POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION;
+ call->cancellable = g_cancellable_new ();
polkit_authority_check_authorization (self->authority,
subject,
permission,
@@ -431,40 +462,52 @@ nm_auth_chain_add_call (NMAuthChain *self,
pk_call_cb,
call);
g_object_unref (subject);
-#else
- /* -- NO POLKIT -- */
+ return TRUE;
+}
+#endif
+
+gboolean
+nm_auth_chain_add_call (NMAuthChain *self,
+ const char *permission,
+ gboolean allow_interaction)
+{
+ AuthCall *call;
g_return_val_if_fail (self != NULL, FALSE);
- /* When PolicyKit is disabled, everything is authorized */
- call = auth_call_new (self, permission);
- nm_auth_chain_set_data (self, permission, GUINT_TO_POINTER (NM_AUTH_CALL_RESULT_YES), NULL);
- auth_call_schedule_early_finish (call, NULL);
+#if WITH_POLKIT
+ /* Non-root always gets authenticated when using polkit */
+ if (self->user_uid > 0)
+ return _add_call_polkit (self, permission, allow_interaction);
#endif
+ /* Root user or non-polkit always gets the permission */
+ call = auth_call_new (self, permission);
+ nm_auth_chain_set_data (self, permission, GUINT_TO_POINTER (NM_AUTH_CALL_RESULT_YES), NULL);
+ call->call_idle_id = g_idle_add ((GSourceFunc) auth_call_complete, call);
return TRUE;
}
void
nm_auth_chain_unref (NMAuthChain *self)
{
- GSList *iter;
-
g_return_if_fail (self != NULL);
self->refcount--;
if (self->refcount > 0)
return;
+ if (self->idle_id)
+ g_source_remove (self->idle_id);
+
#if WITH_POLKIT
if (self->authority)
g_object_unref (self->authority);
#endif
g_free (self->owner);
+ g_object_unref (self->subject);
- for (iter = self->calls; iter; iter = g_slist_next (iter))
- auth_call_cancel ((AuthCall *) iter->data);
- g_slist_free (self->calls);
+ g_slist_free_full (self->calls, auth_call_cancel);
g_clear_error (&self->error);
g_hash_table_destroy (self->data);
@@ -476,59 +519,6 @@ nm_auth_chain_unref (NMAuthChain *self)
/************ utils **************/
gboolean
-nm_auth_get_caller_uid (DBusGMethodInvocation *context,
- NMDBusManager *dbus_mgr,
- gulong *out_uid,
- char **out_error_desc)
-{
- DBusConnection *connection;
- char *sender = NULL;
- gboolean success = FALSE;
- DBusError dbus_error;
-
- g_return_val_if_fail (context != NULL, FALSE);
- g_return_val_if_fail (out_uid != NULL, FALSE);
-
- if (!dbus_mgr) {
- dbus_mgr = nm_dbus_manager_get ();
- g_assert (dbus_mgr);
- } else
- g_object_ref (dbus_mgr);
-
- *out_uid = G_MAXULONG;
-
- sender = dbus_g_method_get_sender (context);
- if (!sender) {
- if (out_error_desc)
- *out_error_desc = g_strdup ("Could not determine D-Bus requestor");
- goto out;
- }
-
- connection = nm_dbus_manager_get_dbus_connection (dbus_mgr);
- if (!connection) {
- if (out_error_desc)
- *out_error_desc = g_strdup ("Could not get the D-Bus system bus");
- goto out;
- }
-
- dbus_error_init (&dbus_error);
- /* FIXME: do this async */
- *out_uid = dbus_bus_get_unix_user (connection, sender, &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
- if (out_error_desc)
- *out_error_desc = g_strdup_printf ("Could not determine the user ID of the requestor");
- dbus_error_free (&dbus_error);
- *out_uid = G_MAXULONG;
- } else
- success = TRUE;
-
-out:
- g_object_unref (dbus_mgr);
- g_free (sender);
- return success;
-}
-
-gboolean
nm_auth_uid_in_acl (NMConnection *connection,
NMSessionMonitor *smon,
gulong uid,
@@ -545,9 +535,6 @@ nm_auth_uid_in_acl (NMConnection *connection,
if (0 == uid)
return TRUE;
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
-
/* Reject the request if the request comes from no session at all */
if (!nm_session_monitor_uid_has_session (smon, uid, &user, &local)) {
if (out_error_desc) {
@@ -565,6 +552,14 @@ nm_auth_uid_in_acl (NMConnection *connection,
return FALSE;
}
+ s_con = nm_connection_get_setting_connection (connection);
+ if (!s_con) {
+ /* This can only happen when called from AddAndActivate, so we know
+ * the user will be authorized when the connection is completed.
+ */
+ return TRUE;
+ }
+
/* Match the username returned by the session check to a user in the ACL */
if (!nm_setting_connection_permissions_user_allowed (s_con, user)) {
if (out_error_desc)
@@ -608,7 +603,7 @@ nm_auth_changed_func_register (GDestroyNotify callback, gpointer callback_data)
gboolean found = FALSE;
#if WITH_POLKIT
- authority = pk_authority_get ();
+ authority = pk_authority_get (NULL);
if (!authority)
return;
diff --git a/src/nm-manager-auth.h b/src/nm-manager-auth.h
index 15317c718..43dd63987 100644
--- a/src/nm-manager-auth.h
+++ b/src/nm-manager-auth.h
@@ -27,6 +27,7 @@
#include <nm-connection.h>
#include "nm-dbus-manager.h"
#include "nm-session-monitor.h"
+#include "nm-auth-subject.h"
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
@@ -55,19 +56,20 @@ typedef void (*NMAuthChainResultFunc) (NMAuthChain *chain,
DBusGMethodInvocation *context,
gpointer user_data);
-NMAuthChain *nm_auth_chain_new (DBusGMethodInvocation *context,
- DBusGProxy *proxy,
- NMAuthChainResultFunc done_func,
- gpointer user_data);
-
-NMAuthChain *nm_auth_chain_new_raw_message (DBusMessage *message,
- NMAuthChainResultFunc done_func,
- gpointer user_data);
-
NMAuthChain *nm_auth_chain_new_dbus_sender (const char *dbus_sender,
+ gulong user_uid,
NMAuthChainResultFunc done_func,
gpointer user_data);
+NMAuthChain *nm_auth_chain_new_context (DBusGMethodInvocation *context,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data);
+
+NMAuthChain *nm_auth_chain_new_subject (NMAuthSubject *subject,
+ DBusGMethodInvocation *context,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data);
+
gpointer nm_auth_chain_get_data (NMAuthChain *chain, const char *tag);
gpointer nm_auth_chain_steal_data (NMAuthChain *chain, const char *tag);
@@ -92,12 +94,6 @@ gboolean nm_auth_chain_add_call (NMAuthChain *chain,
void nm_auth_chain_unref (NMAuthChain *chain);
-/* Utils */
-gboolean nm_auth_get_caller_uid (DBusGMethodInvocation *context,
- NMDBusManager *dbus_mgr,
- gulong *out_uid,
- char **out_error_desc);
-
/* Caller must free returned error description */
gboolean nm_auth_uid_in_acl (NMConnection *connection,
NMSessionMonitor *smon,
diff --git a/src/nm-manager-glue.h b/src/nm-manager-glue.h
new file mode 100644
index 000000000..1f365b0e7
--- /dev/null
+++ b/src/nm-manager-glue.h
@@ -0,0 +1,416 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_manager_MARSHAL_H__
+#define __dbus_glib_marshal_nm_manager_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:BOXED,POINTER */
+extern void dbus_glib_marshal_nm_manager_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_manager_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__BOXED_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__BOXED_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_boxed (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_manager_NONE__BOXED_POINTER dbus_glib_marshal_nm_manager_VOID__BOXED_POINTER
+
+/* NONE:BOOLEAN,POINTER */
+extern void dbus_glib_marshal_nm_manager_VOID__BOOLEAN_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_manager_VOID__BOOLEAN_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__BOOLEAN_POINTER) (gpointer data1,
+ gboolean arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__BOOLEAN_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__BOOLEAN_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_boolean (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_manager_NONE__BOOLEAN_POINTER dbus_glib_marshal_nm_manager_VOID__BOOLEAN_POINTER
+
+/* NONE:POINTER */
+#define dbus_glib_marshal_nm_manager_VOID__POINTER g_cclosure_marshal_VOID__POINTER
+#define dbus_glib_marshal_nm_manager_NONE__POINTER dbus_glib_marshal_nm_manager_VOID__POINTER
+
+/* NONE:BOXED,BOXED,BOXED,POINTER */
+extern void dbus_glib_marshal_nm_manager_VOID__BOXED_BOXED_BOXED_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_manager_VOID__BOXED_BOXED_BOXED_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__BOXED_BOXED_BOXED_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer arg_3,
+ gpointer arg_4,
+ gpointer data2);
+ register GMarshalFunc_VOID__BOXED_BOXED_BOXED_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 5);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__BOXED_BOXED_BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_boxed (param_values + 1),
+ g_marshal_value_peek_boxed (param_values + 2),
+ g_marshal_value_peek_boxed (param_values + 3),
+ g_marshal_value_peek_pointer (param_values + 4),
+ data2);
+}
+#define dbus_glib_marshal_nm_manager_NONE__BOXED_BOXED_BOXED_POINTER dbus_glib_marshal_nm_manager_VOID__BOXED_BOXED_BOXED_POINTER
+
+/* NONE:STRING,STRING,POINTER */
+extern void dbus_glib_marshal_nm_manager_VOID__STRING_STRING_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_manager_VOID__STRING_STRING_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__STRING_STRING_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer arg_3,
+ gpointer data2);
+ register GMarshalFunc_VOID__STRING_STRING_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 4);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_string (param_values + 2),
+ g_marshal_value_peek_pointer (param_values + 3),
+ data2);
+}
+#define dbus_glib_marshal_nm_manager_NONE__STRING_STRING_POINTER dbus_glib_marshal_nm_manager_VOID__STRING_STRING_POINTER
+
+/* BOOLEAN:STRING,POINTER,POINTER */
+extern void dbus_glib_marshal_nm_manager_BOOLEAN__STRING_POINTER_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_manager_BOOLEAN__STRING_POINTER_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_POINTER_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer arg_3,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__STRING_POINTER_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 4);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_BOOLEAN__STRING_POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ g_marshal_value_peek_pointer (param_values + 3),
+ data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:POINTER,POINTER */
+extern void dbus_glib_marshal_nm_manager_BOOLEAN__POINTER_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_manager_BOOLEAN__POINTER_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__POINTER_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_BOOLEAN__POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_pointer (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:POINTER,POINTER,POINTER */
+extern void dbus_glib_marshal_nm_manager_BOOLEAN__POINTER_POINTER_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_manager_BOOLEAN__POINTER_POINTER_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_POINTER_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer arg_3,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__POINTER_POINTER_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 4);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_BOOLEAN__POINTER_POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_pointer (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ g_marshal_value_peek_pointer (param_values + 3),
+ data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_manager_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_manager_methods[] = {
+ { (GCallback) impl_manager_get_devices, dbus_glib_marshal_nm_manager_BOOLEAN__POINTER_POINTER, 0 },
+ { (GCallback) impl_manager_get_device_by_ip_iface, dbus_glib_marshal_nm_manager_BOOLEAN__STRING_POINTER_POINTER, 62 },
+ { (GCallback) impl_manager_activate_connection, dbus_glib_marshal_nm_manager_NONE__BOXED_BOXED_BOXED_POINTER, 140 },
+ { (GCallback) impl_manager_add_and_activate_connection, dbus_glib_marshal_nm_manager_NONE__BOXED_BOXED_BOXED_POINTER, 265 },
+ { (GCallback) impl_manager_deactivate_connection, dbus_glib_marshal_nm_manager_NONE__BOXED_POINTER, 417 },
+ { (GCallback) impl_manager_sleep, dbus_glib_marshal_nm_manager_NONE__BOOLEAN_POINTER, 494 },
+ { (GCallback) impl_manager_enable, dbus_glib_marshal_nm_manager_NONE__BOOLEAN_POINTER, 544 },
+ { (GCallback) impl_manager_get_permissions, dbus_glib_marshal_nm_manager_NONE__POINTER, 596 },
+ { (GCallback) impl_manager_set_logging, dbus_glib_marshal_nm_manager_NONE__STRING_STRING_POINTER, 669 },
+ { (GCallback) impl_manager_get_logging, dbus_glib_marshal_nm_manager_BOOLEAN__POINTER_POINTER_POINTER, 736 },
+ { (GCallback) impl_manager_check_connectivity, dbus_glib_marshal_nm_manager_NONE__POINTER, 811 },
+ { (GCallback) impl_manager_get_state, dbus_glib_marshal_nm_manager_BOOLEAN__POINTER_POINTER, 884 },
+};
+
+const DBusGObjectInfo dbus_glib_nm_manager_object_info = { 1,
+ dbus_glib_nm_manager_methods,
+ 12,
+"org.freedesktop.NetworkManager\0GetDevices\0S\0devices\0O\0F\0N\0ao\0\0org.freedesktop.NetworkManager\0GetDeviceByIpIface\0S\0iface\0I\0s\0device\0O\0F\0N\0o\0\0org.freedesktop.NetworkManager\0ActivateConnection\0A\0connection\0I\0o\0device\0I\0o\0specific_object\0I\0o\0active_connection\0O\0F\0N\0o\0\0org.freedesktop.NetworkManager\0AddAndActivateConnection\0A\0connection\0I\0a{sa{sv}}\0device\0I\0o\0specific_object\0I\0o\0path\0O\0F\0N\0o\0active_connection\0O\0F\0N\0o\0\0org.freedesktop.NetworkManager\0DeactivateConnection\0A\0active_connection\0I\0o\0\0org.freedesktop.NetworkManager\0Sleep\0A\0sleep\0I\0b\0\0org.freedesktop.NetworkManager\0Enable\0A\0enable\0I\0b\0\0org.freedesktop.NetworkManager\0GetPermissions\0A\0permissions\0O\0F\0N\0a{ss}\0\0org.freedesktop.NetworkManager\0SetLogging\0A\0level\0I\0s\0domains\0I\0s\0\0org.freedesktop.NetworkManager\0GetLogging\0S\0level\0O\0F\0N\0s\0domains\0O\0F\0N\0s\0\0org.freedesktop.NetworkManager\0CheckConnectivity\0A\0connectivity\0O\0F\0N\0u\0\0org.freedesktop.NetworkManager\0state\0S\0state\0O\0F\0N\0u\0\0\0",
+"org.freedesktop.NetworkManager\0CheckPermissions\0org.freedesktop.NetworkManager\0StateChanged\0org.freedesktop.NetworkManager\0PropertiesChanged\0org.freedesktop.NetworkManager\0DeviceAdded\0org.freedesktop.NetworkManager\0DeviceRemoved\0\0",
+"org.freedesktop.NetworkManager\0Devices\0devices\0read\0org.freedesktop.NetworkManager\0NetworkingEnabled\0networking_enabled\0read\0org.freedesktop.NetworkManager\0WirelessEnabled\0wireless_enabled\0readwrite\0org.freedesktop.NetworkManager\0WirelessHardwareEnabled\0wireless_hardware_enabled\0read\0org.freedesktop.NetworkManager\0WwanEnabled\0wwan_enabled\0readwrite\0org.freedesktop.NetworkManager\0WwanHardwareEnabled\0wwan_hardware_enabled\0read\0org.freedesktop.NetworkManager\0WimaxEnabled\0wimax_enabled\0readwrite\0org.freedesktop.NetworkManager\0WimaxHardwareEnabled\0wimax_hardware_enabled\0read\0org.freedesktop.NetworkManager\0ActiveConnections\0active_connections\0read\0org.freedesktop.NetworkManager\0PrimaryConnection\0primary_connection\0read\0org.freedesktop.NetworkManager\0ActivatingConnection\0activating_connection\0read\0org.freedesktop.NetworkManager\0Startup\0startup\0read\0org.freedesktop.NetworkManager\0Version\0version\0read\0org.freedesktop.NetworkManager\0State\0state\0read\0org.freedesktop.NetworkManager\0Connectivity\0connectivity\0read\0\0"
+};
+
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 9037e649c..09a1985a7 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -21,6 +21,7 @@
#include <config.h>
+#include <stdlib.h>
#include <netinet/ether.h>
#include <fcntl.h>
#include <errno.h>
@@ -38,37 +39,32 @@
#include "nm-logging.h"
#include "nm-dbus-manager.h"
#include "nm-vpn-manager.h"
-#include "nm-modem-manager.h"
-#include "nm-device-bt.h"
#include "nm-device.h"
#include "nm-device-ethernet.h"
-#include "nm-device-wifi.h"
-#include "nm-device-olpc-mesh.h"
-#include "nm-device-modem.h"
#include "nm-device-infiniband.h"
#include "nm-device-bond.h"
+#include "nm-device-team.h"
#include "nm-device-bridge.h"
#include "nm-device-vlan.h"
-#include "nm-device-adsl.h"
-#include "nm-system.h"
-#include "nm-properties-changed-signal.h"
-#include "nm-setting-bluetooth.h"
+#include "nm-device-generic.h"
+#include "nm-device-veth.h"
+#include "nm-device-tun.h"
+#include "nm-device-macvlan.h"
+#include "nm-device-vxlan.h"
+#include "nm-device-gre.h"
#include "nm-setting-connection.h"
#include "nm-setting-wireless.h"
#include "nm-setting-vpn.h"
-#include "nm-marshal.h"
#include "nm-dbus-glib-types.h"
-#include "nm-udev-manager.h"
-#include "nm-hostname-provider.h"
-#include "nm-bluez-manager.h"
-#include "nm-bluez-common.h"
+#include "nm-platform.h"
+#include "nm-rfkill-manager.h"
+#include "nm-dhcp-manager.h"
#include "nm-settings.h"
#include "nm-settings-connection.h"
#include "nm-manager-auth.h"
#include "NetworkManagerUtils.h"
#include "nm-utils.h"
#include "nm-device-factory.h"
-#include "wifi-utils.h"
#include "nm-enum-types.h"
#include "nm-sleep-monitor.h"
#include "nm-connectivity.h"
@@ -118,10 +114,10 @@ static gboolean impl_manager_get_state (NMManager *manager,
guint32 *state,
GError **error);
-static gboolean impl_manager_set_logging (NMManager *manager,
- const char *level,
- const char *domains,
- GError **error);
+static void impl_manager_set_logging (NMManager *manager,
+ const char *level,
+ const char *domains,
+ DBusGMethodInvocation *context);
static void impl_manager_get_logging (NMManager *manager,
char **level,
@@ -132,67 +128,37 @@ static void impl_manager_check_connectivity (NMManager *manager,
#include "nm-manager-glue.h"
-static void bluez_manager_bdaddr_added_cb (NMBluezManager *bluez_mgr,
- NMBluezDevice *bt_device,
- const char *bdaddr,
- const char *name,
- const char *object_path,
- guint32 uuids,
- NMManager *manager);
-
-static void bluez_manager_bdaddr_removed_cb (NMBluezManager *bluez_mgr,
- const char *bdaddr,
- const char *object_path,
- gpointer user_data);
-
-static void add_device (NMManager *self, NMDevice *device);
-
-static void hostname_provider_init (NMHostnameProvider *provider_class);
-
-static NMActiveConnection *internal_activate_device (NMManager *manager,
- NMDevice *device,
- NMConnection *connection,
- const char *specific_object,
- gboolean user_requested,
- gulong sender_uid,
- const char *dbus_sender,
- gboolean assumed,
- NMActiveConnection *master,
- GError **error);
-
-static NMDevice *find_device_by_ip_iface (NMManager *self, const gchar *iface);
+static void add_device (NMManager *self, NMDevice *device, gboolean generate_con);
+static void remove_device (NMManager *self, NMDevice *device, gboolean quitting);
-static GSList * remove_one_device (NMManager *manager,
- GSList *list,
- NMDevice *device,
- gboolean quitting);
+static NMActiveConnection *_new_active_connection (NMManager *self,
+ NMConnection *connection,
+ const char *specific_object,
+ NMDevice *device,
+ NMAuthSubject *subject,
+ GError **error);
-static void rfkill_change_wifi (const char *desc, gboolean enabled);
+static void policy_activating_device_changed (GObject *object, GParamSpec *pspec, gpointer user_data);
-#define SSD_POKE_INTERVAL 120
-#define ORIGDEV_TAG "originating-device"
+static NMDevice *find_device_by_ip_iface (NMManager *self, const gchar *iface);
-typedef struct PendingActivation PendingActivation;
-typedef void (*PendingActivationFunc) (PendingActivation *pending,
- GError *error);
+static void rfkill_change (const char *desc, RfKillType rtype, gboolean enabled);
-struct PendingActivation {
- NMManager *manager;
+static gboolean find_master (NMManager *self,
+ NMConnection *connection,
+ NMDevice *device,
+ NMConnection **out_master_connection,
+ NMDevice **out_master_device,
+ NMActiveConnection **out_master_ac,
+ GError **error);
- DBusGMethodInvocation *context;
- PendingActivationFunc callback;
- NMAuthChain *chain;
- const char *wifi_shared_permission;
+static void nm_manager_update_state (NMManager *manager);
- char *connection_path;
- NMConnection *connection;
- char *specific_object_path;
- char *device_path;
-};
+#define SSD_POKE_INTERVAL 120
+#define ORIGDEV_TAG "originating-device"
typedef struct {
gboolean user_enabled;
- gboolean daemon_enabled;
gboolean sw_enabled;
gboolean hw_enabled;
RfKillType rtype;
@@ -200,8 +166,6 @@ typedef struct {
const char *key;
const char *prop;
const char *hw_prop;
- RfKillState (*other_enabled_func) (NMManager *);
- RfKillState (*daemon_enabled_func) (NMManager *);
} RadioState;
typedef struct {
@@ -216,13 +180,13 @@ typedef struct {
NMState state;
NMConnectivity *connectivity;
+ int ignore_link_added_cb;
+
NMPolicy *policy;
NMDBusManager *dbus_mgr;
- guint dbus_connection_changed_id;
- NMUdevManager *udev_mgr;
- NMBluezManager *bluez_mgr;
- NMSessionMonitor *session_monitor;
+ gboolean prop_filter_added;
+ NMRfkillManager *rfkill_mgr;
/* List of NMDeviceFactoryFunc pointers sorted in priority order */
GSList *factories;
@@ -236,10 +200,6 @@ typedef struct {
NMVPNManager *vpn_manager;
- NMModemManager *modem_manager;
- guint modem_added_id;
- guint modem_removed_id;
-
DBusGProxy *aipd_proxy;
NMSleepMonitor *sleep_monitor;
@@ -247,27 +207,21 @@ typedef struct {
/* Firmware dir monitor */
GFileMonitor *fw_monitor;
- guint fw_monitor_id;
guint fw_changed_id;
guint timestamp_update_id;
- GHashTable *nm_bridges;
-
- gboolean disposed;
+ gboolean startup;
} NMManagerPrivate;
#define NM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MANAGER, NMManagerPrivate))
-G_DEFINE_TYPE_EXTENDED (NMManager, nm_manager, G_TYPE_OBJECT, 0,
- G_IMPLEMENT_INTERFACE (NM_TYPE_HOSTNAME_PROVIDER,
- hostname_provider_init))
+G_DEFINE_TYPE (NMManager, nm_manager, G_TYPE_OBJECT)
enum {
DEVICE_ADDED,
DEVICE_REMOVED,
STATE_CHANGED,
- PROPERTIES_CHANGED,
CHECK_PERMISSIONS,
USER_PERMISSIONS_CHANGED,
ACTIVE_CONNECTION_ADDED,
@@ -282,6 +236,7 @@ enum {
PROP_0,
PROP_VERSION,
PROP_STATE,
+ PROP_STARTUP,
PROP_NETWORKING_ENABLED,
PROP_WIRELESS_ENABLED,
PROP_WIRELESS_HARDWARE_ENABLED,
@@ -293,6 +248,7 @@ enum {
PROP_CONNECTIVITY,
PROP_PRIMARY_CONNECTION,
PROP_ACTIVATING_CONNECTION,
+ PROP_DEVICES,
/* Not exported */
PROP_HOSTNAME,
@@ -320,13 +276,29 @@ nm_manager_error_quark (void)
static void active_connection_state_changed (NMActiveConnection *active,
GParamSpec *pspec,
NMManager *self);
+static void active_connection_default_changed (NMActiveConnection *active,
+ GParamSpec *pspec,
+ NMManager *self);
-static void
-active_connection_removed (NMManager *self, NMActiveConnection *active)
+/* Returns: whether to notify D-Bus of the removal or not */
+static gboolean
+active_connection_remove (NMManager *self, NMActiveConnection *active)
{
- g_signal_emit (self, signals[ACTIVE_CONNECTION_REMOVED], 0, active);
- g_signal_handlers_disconnect_by_func (active, active_connection_state_changed, self);
- g_object_unref (active);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ gboolean notify = !!nm_active_connection_get_path (active);
+ GSList *found;
+
+ /* FIXME: switch to a GList for faster removal */
+ found = g_slist_find (priv->active_connections, active);
+ if (found) {
+ priv->active_connections = g_slist_remove (priv->active_connections, active);
+ g_signal_emit (self, signals[ACTIVE_CONNECTION_REMOVED], 0, active);
+ g_signal_handlers_disconnect_by_func (active, active_connection_state_changed, self);
+ g_signal_handlers_disconnect_by_func (active, active_connection_default_changed, self);
+ g_object_unref (active);
+ }
+
+ return found && notify;
}
static gboolean
@@ -335,24 +307,21 @@ _active_connection_cleanup (gpointer user_data)
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GSList *iter;
- gboolean changed = FALSE;
priv->ac_cleanup_id = 0;
+ g_object_freeze_notify (G_OBJECT (self));
iter = priv->active_connections;
while (iter) {
NMActiveConnection *ac = iter->data;
iter = iter->next;
if (nm_active_connection_get_state (ac) == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) {
- priv->active_connections = g_slist_remove (priv->active_connections, ac);
- active_connection_removed (self, ac);
- changed = TRUE;
+ if (active_connection_remove (self, ac))
+ g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
}
}
-
- if (changed)
- g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
+ g_object_thaw_notify (G_OBJECT (self));
return FALSE;
}
@@ -375,8 +344,25 @@ active_connection_state_changed (NMActiveConnection *active,
if (!priv->ac_cleanup_id)
priv->ac_cleanup_id = g_idle_add (_active_connection_cleanup, self);
}
+
+ nm_manager_update_state (self);
+}
+
+static void
+active_connection_default_changed (NMActiveConnection *active,
+ GParamSpec *pspec,
+ NMManager *self)
+{
+ nm_manager_update_state (self);
}
+/**
+ * active_connection_add():
+ * @self: the #NMManager
+ * @active: the #NMActiveConnection to manage
+ *
+ * Begins to track and manage @active. Increases the refcount of @active.
+ */
static void
active_connection_add (NMManager *self, NMActiveConnection *active)
{
@@ -384,13 +370,27 @@ active_connection_add (NMManager *self, NMActiveConnection *active)
g_return_if_fail (g_slist_find (priv->active_connections, active) == FALSE);
- priv->active_connections = g_slist_prepend (priv->active_connections, active);
- g_signal_connect (active, "notify::" NM_ACTIVE_CONNECTION_STATE,
+ priv->active_connections = g_slist_prepend (priv->active_connections,
+ g_object_ref (active));
+
+ g_signal_connect (active,
+ "notify::" NM_ACTIVE_CONNECTION_STATE,
G_CALLBACK (active_connection_state_changed),
self);
+ g_signal_connect (active,
+ "notify::" NM_ACTIVE_CONNECTION_DEFAULT,
+ G_CALLBACK (active_connection_default_changed),
+ self);
+ g_signal_connect (active,
+ "notify::" NM_ACTIVE_CONNECTION_DEFAULT6,
+ G_CALLBACK (active_connection_default_changed),
+ self);
g_signal_emit (self, signals[ACTIVE_CONNECTION_ADDED], 0, active);
- g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
+
+ /* Only notify D-Bus if the active connection is actually exported */
+ if (nm_active_connection_get_path (active))
+ g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
}
const GSList *
@@ -400,6 +400,55 @@ nm_manager_get_active_connections (NMManager *manager)
}
static NMActiveConnection *
+find_ac_for_connection (NMManager *manager, NMConnection *connection)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ GSList *iter;
+ NMActiveConnection *ac;
+ NMConnection *ac_connection;
+ NMActiveConnectionState ac_state;
+ const char *uuid;
+
+ uuid = nm_connection_get_uuid (connection);
+ for (iter = priv->active_connections; iter; iter = iter->next) {
+ ac = iter->data;
+ ac_connection = nm_active_connection_get_connection (ac);
+ ac_state = nm_active_connection_get_state (ac);
+
+ if ( !strcmp (nm_connection_get_uuid (ac_connection), uuid)
+ && (ac_state < NM_ACTIVE_CONNECTION_STATE_DEACTIVATED))
+ return ac;
+ }
+
+ return NULL;
+}
+
+/* Filter out connections that are already active.
+ * nm_settings_get_connections() returns sorted list. We need to preserve the
+ * order so that we didn't change auto-activation order (recent timestamps
+ * are first).
+ * Caller is responsible for freeing the returned list with g_slist_free().
+ */
+GSList *
+nm_manager_get_activatable_connections (NMManager *manager)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ GSList *all_connections = nm_settings_get_connections (priv->settings);
+ GSList *connections = NULL, *iter;
+ NMConnection *connection;
+
+ for (iter = all_connections; iter; iter = iter->next) {
+ connection = iter->data;
+
+ if (!find_ac_for_connection (manager, connection))
+ connections = g_slist_prepend (connections, connection);
+ }
+
+ g_slist_free (all_connections);
+ return g_slist_reverse (connections);
+}
+
+static NMActiveConnection *
active_connection_get_by_path (NMManager *manager, const char *path)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
@@ -411,7 +460,7 @@ active_connection_get_by_path (NMManager *manager, const char *path)
for (iter = priv->active_connections; iter; iter = g_slist_next (iter)) {
NMActiveConnection *candidate = iter->data;
- if (strcmp (path, nm_active_connection_get_path (candidate)) == 0)
+ if (g_strcmp0 (path, nm_active_connection_get_path (candidate)) == 0)
return candidate;
}
return NULL;
@@ -465,6 +514,21 @@ nm_manager_get_device_by_master (NMManager *manager, const char *master, const c
return NULL;
}
+NMDevice *
+nm_manager_get_device_by_ifindex (NMManager *manager, int ifindex)
+{
+ GSList *iter;
+
+ for (iter = NM_MANAGER_GET_PRIVATE (manager)->devices; iter; iter = iter->next) {
+ NMDevice *device = NM_DEVICE (iter->data);
+
+ if (nm_device_get_ifindex (device) == ifindex)
+ return device;
+ }
+
+ return NULL;
+}
+
static gboolean
manager_sleeping (NMManager *self)
{
@@ -475,95 +539,41 @@ manager_sleeping (NMManager *self)
return FALSE;
}
-static void
-modem_added (NMModemManager *modem_manager,
- NMModem *modem,
- const char *driver,
- gpointer user_data)
+static const char *
+_nm_state_to_string (NMState state)
{
- NMManager *self = NM_MANAGER (user_data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- NMDevice *replace_device, *device = NULL;
- const char *modem_iface;
- GSList *iter;
-
- /* Don't rely only on the data port; use the control port if available */
- modem_iface = nm_modem_get_data_port (modem);
- if (!modem_iface)
- modem_iface = nm_modem_get_control_port (modem);
- g_return_if_fail (modem_iface);
-
- replace_device = find_device_by_ip_iface (NM_MANAGER (user_data), modem_iface);
- if (replace_device) {
- priv->devices = remove_one_device (NM_MANAGER (user_data),
- priv->devices,
- replace_device,
- FALSE);
- }
-
- /* Give Bluetooth DUN devices first chance to claim the modem */
- for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- if (nm_device_get_device_type (iter->data) == NM_DEVICE_TYPE_BT) {
- if (nm_device_bt_modem_added (NM_DEVICE_BT (iter->data), modem, driver))
- return;
- }
- }
-
- /* If it was a Bluetooth modem and no bluetooth device claimed it, ignore
- * it. The rfcomm port (and thus the modem) gets created automatically
- * by the Bluetooth code during the connection process.
- */
- if (driver && !strcmp (driver, "bluetooth")) {
- nm_log_info (LOGD_MB, "ignoring modem '%s' (no associated Bluetooth device)", modem_iface);
- return;
+ switch (state) {
+ case NM_STATE_ASLEEP:
+ return "ASLEEP";
+ case NM_STATE_DISCONNECTED:
+ return "DISCONNECTED";
+ case NM_STATE_DISCONNECTING:
+ return "DISCONNECTING";
+ case NM_STATE_CONNECTING:
+ return "CONNECTING";
+ case NM_STATE_CONNECTED_LOCAL:
+ return "CONNECTED_LOCAL";
+ case NM_STATE_CONNECTED_SITE:
+ return "CONNECTED_SITE";
+ case NM_STATE_CONNECTED_GLOBAL:
+ return "CONNECTED_GLOBAL";
+ case NM_STATE_UNKNOWN:
+ default:
+ return "UNKNOWN";
}
-
- /* Make the new modem device */
- device = nm_device_modem_new (modem, driver);
- if (device)
- add_device (self, device);
}
static void
set_state (NMManager *manager, NMState state)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- const char *state_str;
if (priv->state == state)
return;
priv->state = state;
- switch (state) {
- case NM_STATE_ASLEEP:
- state_str = "ASLEEP";
- break;
- case NM_STATE_DISCONNECTED:
- state_str = "DISCONNECTED";
- break;
- case NM_STATE_DISCONNECTING:
- state_str = "DISCONNECTING";
- break;
- case NM_STATE_CONNECTING:
- state_str = "CONNECTING";
- break;
- case NM_STATE_CONNECTED_LOCAL:
- state_str = "CONNECTED_LOCAL";
- break;
- case NM_STATE_CONNECTED_SITE:
- state_str = "CONNECTED_SITE";
- break;
- case NM_STATE_CONNECTED_GLOBAL:
- state_str = "CONNECTED_GLOBAL";
- break;
- case NM_STATE_UNKNOWN:
- default:
- state_str = "UNKNOWN";
- break;
- }
-
- nm_log_info (LOGD_CORE, "NetworkManager state is now %s", state_str);
+ nm_log_info (LOGD_CORE, "NetworkManager state is now %s", _nm_state_to_string (state));
g_object_notify (G_OBJECT (manager), NM_MANAGER_STATE);
g_signal_emit (manager, signals[STATE_CHANGED], 0, priv->state);
@@ -590,12 +600,59 @@ checked_connectivity (GObject *object, GAsyncResult *result, gpointer user_data)
g_object_unref (manager);
}
+static NMState
+find_best_device_state (NMManager *manager, gboolean *want_connectivity_check)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ NMState best_state = NM_STATE_DISCONNECTED;
+ GSList *iter;
+
+ for (iter = priv->active_connections; iter; iter = iter->next) {
+ NMActiveConnection *ac = NM_ACTIVE_CONNECTION (iter->data);
+ NMActiveConnectionState ac_state = nm_active_connection_get_state (ac);
+
+ switch (ac_state) {
+ case NM_ACTIVE_CONNECTION_STATE_ACTIVATED:
+ if ( nm_active_connection_get_default (ac)
+ || nm_active_connection_get_default6 (ac)) {
+ nm_connectivity_set_online (priv->connectivity, TRUE);
+ if (nm_connectivity_get_state (priv->connectivity) == NM_CONNECTIVITY_FULL) {
+ *want_connectivity_check = FALSE;
+ return NM_STATE_CONNECTED_GLOBAL;
+ }
+
+ best_state = NM_STATE_CONNECTING;
+ *want_connectivity_check = TRUE;
+ } else {
+ if (best_state < NM_STATE_CONNECTING)
+ best_state = NM_STATE_CONNECTED_LOCAL;
+ }
+ break;
+ case NM_ACTIVE_CONNECTION_STATE_ACTIVATING:
+ if (!nm_active_connection_get_assumed (ac)) {
+ if (best_state != NM_STATE_CONNECTED_GLOBAL)
+ best_state = NM_STATE_CONNECTING;
+ }
+ break;
+ case NM_ACTIVE_CONNECTION_STATE_DEACTIVATING:
+ if (!nm_active_connection_get_assumed (ac)) {
+ if (best_state < NM_STATE_DISCONNECTING)
+ best_state = NM_STATE_DISCONNECTING;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ return best_state;
+}
+
static void
nm_manager_update_state (NMManager *manager)
{
NMManagerPrivate *priv;
NMState new_state = NM_STATE_DISCONNECTED;
- GSList *iter;
gboolean want_connectivity_check = FALSE;
g_return_if_fail (NM_IS_MANAGER (manager));
@@ -604,30 +661,8 @@ nm_manager_update_state (NMManager *manager)
if (manager_sleeping (manager))
new_state = NM_STATE_ASLEEP;
- else {
- for (iter = priv->devices; iter; iter = iter->next) {
- NMDevice *dev = NM_DEVICE (iter->data);
- NMDeviceState state = nm_device_get_state (dev);
-
- if (state == NM_DEVICE_STATE_ACTIVATED) {
- nm_connectivity_set_online (priv->connectivity, TRUE);
- if (nm_connectivity_get_state (priv->connectivity) != NM_CONNECTIVITY_FULL) {
- new_state = NM_STATE_CONNECTING;
- want_connectivity_check = TRUE;
- } else {
- new_state = NM_STATE_CONNECTED_GLOBAL;
- break;
- }
- }
-
- if (nm_device_is_activating (dev))
- new_state = NM_STATE_CONNECTING;
- else if (new_state != NM_STATE_CONNECTING) {
- if (state == NM_DEVICE_STATE_DEACTIVATING)
- new_state = NM_STATE_DISCONNECTING;
- }
- }
- }
+ else
+ new_state = find_best_device_state (manager, &want_connectivity_check);
if (new_state == NM_STATE_CONNECTING && want_connectivity_check) {
nm_connectivity_check_async (priv->connectivity,
@@ -660,65 +695,99 @@ manager_device_state_changed (NMDevice *device,
default:
break;
}
+}
- nm_manager_update_state (self);
+static void device_has_pending_action_changed (NMDevice *device,
+ GParamSpec *pspec,
+ NMManager *self);
+
+static void
+check_if_startup_complete (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+
+ if (!priv->startup)
+ return;
+
+ for (iter = priv->devices; iter; iter = iter->next) {
+ NMDevice *dev = iter->data;
+
+ if (nm_device_has_pending_action (dev)) {
+ nm_log_dbg (LOGD_CORE, "check_if_startup_complete returns FALSE because of %s",
+ nm_device_get_iface (dev));
+ return;
+ }
+ }
+
+ nm_log_info (LOGD_CORE, "startup complete");
+
+ priv->startup = FALSE;
+ g_object_notify (G_OBJECT (self), "startup");
+
+ /* We don't have to watch notify::has-pending-action any more. */
+ for (iter = priv->devices; iter; iter = iter->next) {
+ NMDevice *dev = iter->data;
+
+ g_signal_handlers_disconnect_by_func (dev, G_CALLBACK (device_has_pending_action_changed), self);
+ }
+}
+
+static void
+device_has_pending_action_changed (NMDevice *device,
+ GParamSpec *pspec,
+ NMManager *self)
+{
+ check_if_startup_complete (self);
}
-/* Removes a device from a device list; returns the start of the new device list */
-static GSList *
-remove_one_device (NMManager *manager,
- GSList *list,
- NMDevice *device,
- gboolean quitting)
+static void
+remove_device (NMManager *manager, NMDevice *device, gboolean quitting)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
if (nm_device_get_managed (device)) {
- /* When quitting, we want to leave up interfaces & connections
- * that can be taken over again (ie, "assumed") when NM restarts
- * so that '/etc/init.d/NetworkManager restart' will not distrupt
- * networking for interfaces that support connection assumption.
- * All other devices get unmanaged when NM quits so that their
- * connections get torn down and the interface is deactivated.
- */
+ NMActRequest *req = nm_device_get_act_request (device);
+ gboolean unmanage = FALSE;
- if ( !nm_device_can_assume_connections (device)
- || (nm_device_get_state (device) != NM_DEVICE_STATE_ACTIVATED)
- || !quitting)
- nm_device_set_managed (device, FALSE, NM_DEVICE_STATE_REASON_REMOVED);
+ /* Leave activated interfaces up when quitting so their configuration
+ * can be taken over when NM restarts. This ensures connectivity while
+ * NM is stopped. Devices which do not support connection assumption
+ * cannot be left up.
+ */
+ if (!quitting) /* Forced removal; device already gone */
+ unmanage = TRUE;
+ else if (!nm_device_can_assume_active_connection (device))
+ unmanage = TRUE;
+ else if (!req)
+ unmanage = TRUE;
+
+ if (unmanage) {
+ if (quitting)
+ nm_device_set_unmanaged_quitting (device);
+ else
+ nm_device_set_unmanaged (device, NM_UNMANAGED_INTERNAL, TRUE, NM_DEVICE_STATE_REASON_REMOVED);
+ }
}
- g_signal_handlers_disconnect_by_func (device, manager_device_state_changed, manager);
+ g_signal_handlers_disconnect_matched (device, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, manager);
+
+ nm_settings_device_removed (priv->settings, device, quitting);
+ priv->devices = g_slist_remove (priv->devices, device);
- nm_settings_device_removed (priv->settings, device);
g_signal_emit (manager, signals[DEVICE_REMOVED], 0, device);
+ g_object_notify (G_OBJECT (manager), NM_MANAGER_DEVICES);
+
+ nm_dbus_manager_unregister_object (priv->dbus_mgr, device);
g_object_unref (device);
- return g_slist_remove (list, device);
+ check_if_startup_complete (manager);
}
static void
-modem_removed (NMModemManager *modem_manager,
- NMModem *modem,
- gpointer user_data)
+device_removed_cb (NMDevice *device, gpointer user_data)
{
- NMManager *self = NM_MANAGER (user_data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- NMDevice *found;
- GSList *iter;
-
- /* Give Bluetooth DUN devices first chance to handle the modem removal */
- for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- if (nm_device_get_device_type (iter->data) == NM_DEVICE_TYPE_BT) {
- if (nm_device_bt_modem_removed (NM_DEVICE_BT (iter->data), modem))
- return;
- }
- }
-
- /* Otherwise remove the standalone modem */
- found = nm_manager_get_device_by_udi (self, nm_modem_get_path (modem));
- if (found)
- priv->devices = remove_one_device (self, priv->devices, found, FALSE);
+ remove_device (NM_MANAGER (user_data), device, FALSE);
}
static void
@@ -760,18 +829,6 @@ aipd_handle_event (DBusGProxy *proxy,
nm_log_warn (LOGD_AUTOIP4, "(%s): unhandled avahi-autoipd event", iface);
}
-static const char *
-hostname_provider_get_hostname (NMHostnameProvider *provider)
-{
- return NM_MANAGER_GET_PRIVATE (provider)->hostname;
-}
-
-static void
-hostname_provider_init (NMHostnameProvider *provider_class)
-{
- provider_class->get_hostname = hostname_provider_get_hostname;
-}
-
NMState
nm_manager_get_state (NMManager *manager)
{
@@ -780,316 +837,54 @@ nm_manager_get_state (NMManager *manager)
return NM_MANAGER_GET_PRIVATE (manager)->state;
}
-static gboolean
-might_be_vpn (NMConnection *connection)
-{
- NMSettingConnection *s_con;
- const char *ctype = NULL;
-
- if (nm_connection_get_setting_vpn (connection))
- return TRUE;
-
- /* Make sure it's not a VPN, which we can't autocomplete yet */
- s_con = nm_connection_get_setting_connection (connection);
- if (s_con)
- ctype = nm_setting_connection_get_connection_type (s_con);
-
- return (g_strcmp0 (ctype, NM_SETTING_VPN_SETTING_NAME) == 0);
-}
-
-static gboolean
-try_complete_vpn (NMConnection *connection, GSList *existing, GError **error)
-{
- g_assert (might_be_vpn (connection) == TRUE);
-
- if (!nm_connection_get_setting_vpn (connection)) {
- g_set_error_literal (error,
- NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE,
- "VPN connections require a 'vpn' setting");
- return FALSE;
- }
-
- nm_utils_complete_generic (connection,
- NM_SETTING_VPN_SETTING_NAME,
- existing,
- _("VPN connection %d"),
- NULL,
- FALSE); /* No IPv6 by default for now */
-
- return TRUE;
-}
-
-static PendingActivation *
-pending_activation_new (NMManager *manager,
- DBusGMethodInvocation *context,
- const char *device_path,
- const char *connection_path,
- GHashTable *settings,
- const char *specific_object_path,
- PendingActivationFunc callback,
- GError **error)
-{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- PendingActivation *pending;
- NMDevice *device = NULL;
- NMConnection *connection = NULL;
- GSList *all_connections = NULL;
- gboolean success;
-
- g_return_val_if_fail (manager != NULL, NULL);
- g_return_val_if_fail (context != NULL, NULL);
- g_return_val_if_fail (device_path != NULL, NULL);
-
- /* A object path of "/" means NULL */
- if (g_strcmp0 (specific_object_path, "/") == 0)
- specific_object_path = NULL;
- if (g_strcmp0 (device_path, "/") == 0)
- device_path = NULL;
-
- /* Create the partial connection from the given settings */
- if (settings) {
- if (device_path)
- device = nm_manager_get_device_by_path (manager, device_path);
- if (!device) {
- g_set_error_literal (error,
- NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Device not found");
- return NULL;
- }
-
- connection = nm_connection_new ();
- nm_connection_replace_settings (connection, settings, NULL);
-
- all_connections = nm_settings_get_connections (priv->settings);
-
- if (might_be_vpn (connection)) {
- /* Try to fill the VPN's connection setting and name at least */
- success = try_complete_vpn (connection, all_connections, error);
- } else {
- /* Let each device subclass complete the connection */
- success = nm_device_complete_connection (device,
- connection,
- specific_object_path,
- all_connections,
- error);
- }
- g_slist_free (all_connections);
-
- if (success == FALSE) {
- g_object_unref (connection);
- return NULL;
- }
- }
-
- pending = g_slice_new0 (PendingActivation);
- pending->manager = manager;
- pending->context = context;
- pending->callback = callback;
-
- pending->connection_path = g_strdup (connection_path);
- pending->connection = connection;
-
- /* "/" is special-cased to NULL to get through D-Bus */
- if (specific_object_path && strcmp (specific_object_path, "/"))
- pending->specific_object_path = g_strdup (specific_object_path);
- if (device_path && strcmp (device_path, "/"))
- pending->device_path = g_strdup (device_path);
-
- return pending;
-}
-
-static void
-pending_auth_done (NMAuthChain *chain,
- GError *error,
- DBusGMethodInvocation *context,
- gpointer user_data)
-{
- PendingActivation *pending = user_data;
- NMAuthCallResult result;
- GError *tmp_error = NULL;
-
- /* Caller has had a chance to obtain authorization, so we only need to
- * check for 'yes' here.
- */
- result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
- if (result != NM_AUTH_CALL_RESULT_YES) {
- tmp_error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "Not authorized to control networking.");
- goto out;
- }
-
- if (pending->wifi_shared_permission) {
- result = nm_auth_chain_get_result (chain, pending->wifi_shared_permission);
- if (result != NM_AUTH_CALL_RESULT_YES) {
- tmp_error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "Not authorized to share connections via wifi.");
- goto out;
- }
- }
-
- /* Otherwise authorized and available to activate */
-
-out:
- pending->callback (pending, tmp_error);
- g_clear_error (&tmp_error);
-}
-
-static void
-pending_activation_check_authorized (PendingActivation *pending,
- NMDBusManager *dbus_mgr)
-{
- NMManagerPrivate *priv;
- char *error_desc = NULL;
- gulong sender_uid = G_MAXULONG;
- GError *error;
- const char *wifi_permission = NULL;
- NMConnection *connection;
-
- g_return_if_fail (pending != NULL);
- g_return_if_fail (dbus_mgr != NULL);
-
- priv = NM_MANAGER_GET_PRIVATE (pending->manager);
-
- if (!nm_auth_get_caller_uid (pending->context,
- dbus_mgr,
- &sender_uid,
- &error_desc)) {
- error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- error_desc);
- pending->callback (pending, error);
- g_error_free (error);
- g_free (error_desc);
- return;
- }
-
- /* Yay for root */
- if (0 == sender_uid) {
- pending->callback (pending, NULL);
- return;
- }
-
- /* By this point we have an auto-completed connection (for AddAndActivate)
- * or an existing connection (for Activate).
- */
- connection = pending->connection;
- if (!connection)
- connection = (NMConnection *) nm_settings_get_connection_by_path (priv->settings, pending->connection_path);
-
- if (!connection) {
- error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
- "Connection could not be found.");
- pending->callback (pending, error);
- g_error_free (error);
- return;
- }
-
- /* Ensure the subject has permissions for this connection */
- if (!nm_auth_uid_in_acl (connection,
- priv->session_monitor,
- sender_uid,
- &error_desc)) {
- error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- error_desc);
- pending->callback (pending, error);
- g_error_free (error);
- g_free (error_desc);
- return;
- }
-
- /* First check if the user is allowed to use networking at all, giving
- * the user a chance to authenticate to gain the permission.
- */
- pending->chain = nm_auth_chain_new (pending->context,
- NULL,
- pending_auth_done,
- pending);
- g_assert (pending->chain);
- nm_auth_chain_add_call (pending->chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
-
- /* Shared wifi connections require special permissions too */
- wifi_permission = nm_utils_get_shared_wifi_permission (connection);
- if (wifi_permission) {
- pending->wifi_shared_permission = wifi_permission;
- nm_auth_chain_add_call (pending->chain, wifi_permission, TRUE);
- }
-}
-
-static void
-pending_activation_destroy (PendingActivation *pending,
- GError *error,
- NMActiveConnection *ac)
-{
- g_return_if_fail (pending != NULL);
-
- if (error)
- dbus_g_method_return_error (pending->context, error);
- else if (ac) {
- if (pending->connection) {
- dbus_g_method_return (pending->context,
- pending->connection_path,
- nm_active_connection_get_path (ac));
- } else {
- dbus_g_method_return (pending->context,
- nm_active_connection_get_path (ac));
- }
- }
-
- g_free (pending->connection_path);
- g_free (pending->specific_object_path);
- g_free (pending->device_path);
- if (pending->connection)
- g_object_unref (pending->connection);
-
- if (pending->chain)
- nm_auth_chain_unref (pending->chain);
-
- memset (pending, 0, sizeof (PendingActivation));
- g_slice_free (PendingActivation, pending);
-}
-
/*******************************************************************/
/* Settings stuff via NMSettings */
/*******************************************************************/
static NMDevice *
-get_device_from_hwaddr (NMManager *self, NMConnection *connection)
+get_device_from_hwaddr (NMManager *self, const GByteArray *setting_mac)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ const guint8 *device_mac;
+ guint device_mac_len;
GSList *iter;
+ if (!setting_mac)
+ return NULL;
+
for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- if (nm_device_hwaddr_matches (NM_DEVICE (iter->data), connection, NULL, 0, TRUE))
- return iter->data;
+ NMDevice *device = iter->data;
+
+ device_mac = nm_device_get_hw_address (iter->data, &device_mac_len);
+ if ( setting_mac->len == device_mac_len
+ && memcmp (setting_mac->data, device_mac, device_mac_len) == 0)
+ return device;
}
return NULL;
}
-static NMDevice*
+static NMDevice *
find_vlan_parent (NMManager *self,
- NMConnection *connection,
- gboolean check_hwaddr)
+ NMConnection *connection)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMSettingVlan *s_vlan;
+ NMSettingWired *s_wired;
NMConnection *parent_connection;
const char *parent_iface;
NMDevice *parent = NULL;
+ const GByteArray *setting_mac;
GSList *iter;
- /* The 'parent' property could be either an interface name, a connection
- * UUID, or even given by the MAC address of the connection's ethernet
- * or WiFi setting.
+ /* The 'parent' property could be given by an interface name, a
+ * connection UUID, or the MAC address of an NMSettingWired.
*/
s_vlan = nm_connection_get_setting_vlan (connection);
g_return_val_if_fail (s_vlan != NULL, NULL);
+ s_wired = nm_connection_get_setting_wired (connection);
+ setting_mac = s_wired ? nm_setting_wired_get_mac_address (s_wired) : NULL;
+
parent_iface = nm_setting_vlan_get_parent (s_vlan);
if (parent_iface) {
parent = find_device_by_ip_iface (self, parent_iface);
@@ -1114,18 +909,37 @@ find_vlan_parent (NMManager *self,
}
/* Check the hardware address of the parent connection */
- if (check_hwaddr)
- return get_device_from_hwaddr (self, parent_connection);
+ return get_device_from_hwaddr (self, setting_mac);
}
return NULL;
}
}
/* Try the hardware address from the VLAN connection's hardware setting */
- if (check_hwaddr)
- return get_device_from_hwaddr (self, connection);
+ return get_device_from_hwaddr (self, setting_mac);
+}
- return NULL;
+static NMDevice *
+find_infiniband_parent (NMManager *self,
+ NMConnection *connection)
+{
+ NMSettingInfiniband *s_infiniband;
+ const char *parent_iface;
+ NMDevice *parent = NULL;
+ const GByteArray *setting_mac;
+
+ s_infiniband = nm_connection_get_setting_infiniband (connection);
+ g_return_val_if_fail (s_infiniband != NULL, NULL);
+
+ parent_iface = nm_setting_infiniband_get_parent (s_infiniband);
+ if (parent_iface) {
+ parent = find_device_by_ip_iface (self, parent_iface);
+ if (parent)
+ return parent;
+ }
+
+ setting_mac = nm_setting_infiniband_get_mac_address (s_infiniband);
+ return get_device_from_hwaddr (self, setting_mac);
}
/**
@@ -1146,7 +960,6 @@ get_virtual_iface_name (NMManager *self,
NMConnection *connection,
NMDevice **out_parent)
{
- char *vname = NULL;
NMDevice *parent = NULL;
if (out_parent)
@@ -1155,17 +968,21 @@ get_virtual_iface_name (NMManager *self,
if (nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME))
return g_strdup (nm_connection_get_virtual_iface_name (connection));
+ if (nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME))
+ return g_strdup (nm_connection_get_virtual_iface_name (connection));
+
if (nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
return g_strdup (nm_connection_get_virtual_iface_name (connection));
if (nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)) {
NMSettingVlan *s_vlan;
const char *ifname;
+ char *vname;
s_vlan = nm_connection_get_setting_vlan (connection);
g_return_val_if_fail (s_vlan != NULL, NULL);
- parent = find_vlan_parent (self, connection, TRUE);
+ parent = find_vlan_parent (self, connection);
if (parent) {
ifname = nm_connection_get_virtual_iface_name (connection);
@@ -1189,113 +1006,56 @@ get_virtual_iface_name (NMManager *self,
}
if (out_parent)
*out_parent = parent;
+ return vname;
}
}
- return vname;
+ if (nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ const char *ifname;
+ char *name;
+
+ parent = find_infiniband_parent (self, connection);
+ if (parent) {
+ ifname = nm_connection_get_virtual_iface_name (connection);
+ if (ifname)
+ name = g_strdup (ifname);
+ else {
+ NMSettingInfiniband *s_infiniband;
+ int p_key;
+
+ ifname = nm_device_get_iface (parent);
+ s_infiniband = nm_connection_get_setting_infiniband (connection);
+ p_key = nm_setting_infiniband_get_p_key (s_infiniband);
+ name = g_strdup_printf ("%s.%04x", ifname, p_key);
+ }
+ if (out_parent)
+ *out_parent = parent;
+ return name;
+ }
+ }
+
+ return NULL;
}
static gboolean
connection_needs_virtual_device (NMConnection *connection)
{
if ( nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME)
|| nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME)
|| nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME))
return TRUE;
- return FALSE;
-}
-
-static char *
-get_virtual_iface_placeholder_udi (void)
-{
- static guint32 id = 0;
-
- return g_strdup_printf ("/virtual/device/placeholder/%d", id++);
-}
-
-/***************************/
-
-/* FIXME: remove when we handle bridges non-destructively */
-
-#define NM_BRIDGE_FILE NMRUNDIR "/nm-bridges"
-
-static void
-read_nm_created_bridges (NMManager *self)
-{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- char *contents;
- char **lines, **iter;
- GTimeVal tv;
- glong ts;
-
- if (!g_file_get_contents (NM_BRIDGE_FILE, &contents, NULL, NULL))
- return;
-
- g_get_current_time (&tv);
-
- lines = g_strsplit_set (contents, "\n", 0);
- g_free (contents);
-
- for (iter = lines; iter && *iter; iter++) {
- if (g_str_has_prefix (*iter, "ts=")) {
- errno = 0;
- ts = strtol (*iter + 3, NULL, 10);
- /* allow 30 minutes time difference before we ignore the file */
- if (errno || ABS (tv.tv_sec - ts) > 1800)
- goto out;
- } else if (g_str_has_prefix (*iter, "iface="))
- g_hash_table_insert (priv->nm_bridges, g_strdup (*iter + 6), GUINT_TO_POINTER (1));
- }
-
-out:
- g_strfreev (lines);
- unlink (NM_BRIDGE_FILE);
-}
-
-static void
-write_nm_created_bridges (NMManager *self)
-{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- GString *br_list;
- GSList *iter;
- GError *error = NULL;
- GTimeVal tv;
- gboolean found = FALSE;
-
- /* write out nm-created bridges list */
- br_list = g_string_sized_new (50);
-
- /* Timestamp is first line */
- g_get_current_time (&tv);
- g_string_append_printf (br_list, "ts=%ld\n", tv.tv_sec);
-
- for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- NMDevice *device = iter->data;
+ if (nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ NMSettingInfiniband *s_infiniband;
- if (nm_device_get_device_type (device) == NM_DEVICE_TYPE_BRIDGE) {
- g_string_append_printf (br_list, "iface=%s\n", nm_device_get_iface (device));
- found = TRUE;
- }
+ s_infiniband = nm_connection_get_setting_infiniband (connection);
+ g_return_val_if_fail (s_infiniband != NULL, FALSE);
+ if (nm_setting_infiniband_get_p_key (s_infiniband) != -1)
+ return TRUE;
}
- if (found) {
- if (!g_file_set_contents (NM_BRIDGE_FILE, br_list->str, -1, &error)) {
- nm_log_warn (LOGD_BRIDGE, "Failed to write NetworkManager-created bridge list; "
- "on restart bridges may not be recognized. (%s)",
- error ? error->message : "unknown");
- g_clear_error (&error);
- }
- }
- g_string_free (br_list, TRUE);
-}
-
-static gboolean
-bridge_created_by_nm (NMManager *self, const char *iface)
-{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
-
- return (priv->nm_bridges && g_hash_table_lookup (priv->nm_bridges, iface));
+ return FALSE;
}
/***************************/
@@ -1315,7 +1075,7 @@ system_create_virtual_device (NMManager *self, NMConnection *connection)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GSList *iter;
- char *iface = NULL, *udi;
+ char *iface = NULL;
NMDevice *device = NULL, *parent = NULL;
iface = get_virtual_iface_name (self, connection, &parent);
@@ -1328,60 +1088,37 @@ system_create_virtual_device (NMManager *self, NMConnection *connection)
/* Make sure we didn't create a device for this connection already */
for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
NMDevice *candidate = iter->data;
- GError *error = NULL;
if ( g_strcmp0 (nm_device_get_iface (candidate), iface) == 0
- || nm_device_check_connection_compatible (candidate, connection, &error)) {
- g_clear_error (&error);
+ || nm_device_check_connection_compatible (candidate, connection))
goto out;
- }
- g_clear_error (&error);
}
- if (nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)) {
- if (!nm_system_add_bonding_master (iface)) {
- nm_log_warn (LOGD_DEVICE, "(%s): failed to add bonding master interface for '%s'",
- iface, nm_connection_get_id (connection));
- goto out;
- }
+ /* Block notification of link added since we're creating the device
+ * explicitly here, otherwise adding the platform/kernel device would
+ * create it before this function can do the rest of the setup.
+ */
+ priv->ignore_link_added_cb++;
- udi = get_virtual_iface_placeholder_udi ();
- device = nm_device_bond_new (udi, iface);
- g_free (udi);
+ if (nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)) {
+ device = nm_device_bond_new_for_connection (connection);
+ } else if (nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME)) {
+ device = nm_device_team_new_for_connection (connection);
} else if (nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME)) {
- gboolean exists = FALSE;
-
- if (!nm_system_create_bridge (iface, &exists)) {
- nm_log_warn (LOGD_DEVICE, "(%s): failed to add bridging interface for '%s'",
- iface, nm_connection_get_id (connection));
- goto out;
- }
-
- /* FIXME: remove when we handle bridges non-destructively */
- if (exists && !bridge_created_by_nm (self, iface)) {
- nm_log_warn (LOGD_DEVICE, "(%s): cannot use existing bridge for '%s'",
- iface, nm_connection_get_id (connection));
- goto out;
- }
-
- udi = get_virtual_iface_placeholder_udi ();
- device = nm_device_bridge_new (udi, iface);
- g_free (udi);
+ device = nm_device_bridge_new_for_connection (connection);
} else if (nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)) {
- g_return_val_if_fail (parent != NULL, FALSE);
+ device = nm_device_vlan_new_for_connection (connection, parent);
+ } else if (nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ device = nm_device_infiniband_new_partition (connection, parent);
+ }
- if (!nm_system_add_vlan_iface (connection, iface, nm_device_get_ip_ifindex (parent))) {
- nm_log_warn (LOGD_DEVICE, "(%s): failed to add VLAN interface for '%s'",
- iface, nm_connection_get_id (connection));
- goto out;
- }
- udi = get_virtual_iface_placeholder_udi ();
- device = nm_device_vlan_new (udi, iface, parent);
- g_free (udi);
+ if (device) {
+ nm_device_set_nm_owned (device);
+ add_device (self, device, FALSE);
+ g_object_unref (device);
}
- if (device)
- add_device (self, device);
+ priv->ignore_link_added_cb--;
out:
g_free (iface);
@@ -1399,14 +1136,11 @@ system_create_virtual_devices (NMManager *self)
connections = nm_settings_get_connections (priv->settings);
for (iter = connections; iter; iter = g_slist_next (iter)) {
NMConnection *connection = iter->data;
- NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
- if (connection_needs_virtual_device (connection)) {
- /* We only create a virtual interface if the connection can autoconnect */
- if (nm_setting_connection_get_autoconnect (s_con))
- system_create_virtual_device (self, connection);
- }
+ /* We only create a virtual interface if the connection can autoconnect */
+ if ( connection_needs_virtual_device (connection)
+ && nm_settings_connection_can_autoconnect (NM_SETTINGS_CONNECTION (connection)))
+ system_create_virtual_device (self, connection);
}
g_slist_free (connections);
}
@@ -1458,13 +1192,14 @@ system_unmanaged_devices_changed_cb (NMSettings *settings,
unmanaged_specs = nm_settings_get_unmanaged_specs (priv->settings);
for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
NMDevice *device = NM_DEVICE (iter->data);
- gboolean managed;
+ gboolean unmanaged;
- managed = !nm_device_spec_match_list (device, unmanaged_specs);
- nm_device_set_managed (device,
- managed,
- managed ? NM_DEVICE_STATE_REASON_NOW_MANAGED :
- NM_DEVICE_STATE_REASON_NOW_UNMANAGED);
+ unmanaged = nm_device_spec_match_list (device, unmanaged_specs);
+ nm_device_set_unmanaged (device,
+ NM_UNMANAGED_USER,
+ unmanaged,
+ unmanaged ? NM_DEVICE_STATE_REASON_NOW_UNMANAGED :
+ NM_DEVICE_STATE_REASON_NOW_MANAGED);
}
}
@@ -1487,6 +1222,8 @@ system_hostname_changed_cb (NMSettings *settings,
priv->hostname = (hostname && strlen (hostname)) ? g_strdup (hostname) : NULL;
g_object_notify (G_OBJECT (self), NM_MANAGER_HOSTNAME);
+ nm_dhcp_manager_set_default_hostname (nm_dhcp_manager_get (), priv->hostname);
+
g_free (hostname);
}
@@ -1517,8 +1254,6 @@ write_value_to_state_file (const char *filename,
FALSE);
key_file = g_key_file_new ();
- if (!key_file)
- return FALSE;
g_key_file_set_list_separator (key_file, ',');
g_key_file_load_from_file (key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
@@ -1550,11 +1285,8 @@ radio_enabled_for_rstate (RadioState *rstate, gboolean check_changeable)
gboolean enabled;
enabled = rstate->user_enabled && rstate->hw_enabled;
- if (check_changeable) {
+ if (check_changeable)
enabled &= rstate->sw_enabled;
- if (rstate->daemon_enabled_func)
- enabled &= rstate->daemon_enabled;
- }
return enabled;
}
@@ -1598,95 +1330,24 @@ manager_update_radio_enabled (NMManager *self,
}
static void
-manager_hidden_ap_found (NMDevice *device,
- NMAccessPoint *ap,
- gpointer user_data)
-{
- NMManager *manager = NM_MANAGER (user_data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- const struct ether_addr *bssid;
- GSList *iter;
- GSList *connections;
- gboolean done = FALSE;
-
- g_return_if_fail (nm_ap_get_ssid (ap) == NULL);
-
- bssid = nm_ap_get_address (ap);
- g_assert (bssid);
-
- /* Look for this AP's BSSID in the seen-bssids list of a connection,
- * and if a match is found, copy over the SSID */
- connections = nm_settings_get_connections (priv->settings);
- for (iter = connections; iter && !done; iter = g_slist_next (iter)) {
- NMConnection *connection = NM_CONNECTION (iter->data);
- NMSettingWireless *s_wifi;
-
- s_wifi = nm_connection_get_setting_wireless (connection);
- if (s_wifi) {
- if (nm_settings_connection_has_seen_bssid (NM_SETTINGS_CONNECTION (connection), bssid))
- nm_ap_set_ssid (ap, nm_setting_wireless_get_ssid (s_wifi));
- }
- }
- g_slist_free (connections);
-}
-
-static RfKillState
-nm_manager_get_ipw_rfkill_state (NMManager *self)
-{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- GSList *iter;
- RfKillState ipw_state = RFKILL_UNBLOCKED;
-
- for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- NMDevice *candidate = NM_DEVICE (iter->data);
- RfKillState candidate_state;
-
- if (nm_device_get_device_type (candidate) == NM_DEVICE_TYPE_WIFI) {
- candidate_state = nm_device_wifi_get_ipw_rfkill_state (NM_DEVICE_WIFI (candidate));
-
- if (candidate_state > ipw_state)
- ipw_state = candidate_state;
- }
- }
-
- return ipw_state;
-}
-
-static RfKillState
-nm_manager_get_modem_enabled_state (NMManager *self)
+update_rstate_from_rfkill (NMRfkillManager *rfkill_mgr, RadioState *rstate)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- GSList *iter;
- RfKillState wwan_state = RFKILL_UNBLOCKED;
-
- for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- NMDevice *candidate = NM_DEVICE (iter->data);
- RfKillState candidate_state = RFKILL_UNBLOCKED;
-
- if (nm_device_get_rfkill_type (candidate) == RFKILL_TYPE_WWAN) {
- if (!nm_device_get_enabled (candidate))
- candidate_state = RFKILL_SOFT_BLOCKED;
-
- if (candidate_state > wwan_state)
- wwan_state = candidate_state;
- }
- }
-
- return wwan_state;
-}
-
-static void
-update_rstate_from_rfkill (RadioState *rstate, RfKillState rfkill)
-{
- if (rfkill == RFKILL_UNBLOCKED) {
+ switch (nm_rfkill_manager_get_rfkill_state (rfkill_mgr, rstate->rtype)) {
+ case RFKILL_UNBLOCKED:
rstate->sw_enabled = TRUE;
rstate->hw_enabled = TRUE;
- } else if (rfkill == RFKILL_SOFT_BLOCKED) {
+ break;
+ case RFKILL_SOFT_BLOCKED:
rstate->sw_enabled = FALSE;
rstate->hw_enabled = TRUE;
- } else if (rfkill == RFKILL_HARD_BLOCKED) {
+ break;
+ case RFKILL_HARD_BLOCKED:
rstate->sw_enabled = FALSE;
rstate->hw_enabled = FALSE;
+ break;
+ default:
+ g_warn_if_reached ();
+ break;
}
}
@@ -1696,51 +1357,19 @@ manager_rfkill_update_one_type (NMManager *self,
RfKillType rtype)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- RfKillState udev_state = RFKILL_UNBLOCKED;
- RfKillState other_state = RFKILL_UNBLOCKED;
- RfKillState composite;
- gboolean old_enabled, new_enabled, old_rfkilled, new_rfkilled;
- gboolean old_hwe, old_daemon_enabled = FALSE;
+ gboolean old_enabled, new_enabled, old_rfkilled, new_rfkilled, old_hwe;
old_enabled = radio_enabled_for_rstate (rstate, TRUE);
old_rfkilled = rstate->hw_enabled && rstate->sw_enabled;
old_hwe = rstate->hw_enabled;
- udev_state = nm_udev_manager_get_rfkill_state (priv->udev_mgr, rtype);
-
- if (rstate->other_enabled_func)
- other_state = rstate->other_enabled_func (self);
-
- /* The composite state is the "worst" of either udev or other states */
- if (udev_state == RFKILL_HARD_BLOCKED || other_state == RFKILL_HARD_BLOCKED)
- composite = RFKILL_HARD_BLOCKED;
- else if (udev_state == RFKILL_SOFT_BLOCKED || other_state == RFKILL_SOFT_BLOCKED)
- composite = RFKILL_SOFT_BLOCKED;
- else
- composite = RFKILL_UNBLOCKED;
-
- update_rstate_from_rfkill (rstate, composite);
-
- /* If the device has a management daemon that can affect enabled state, check that now */
- if (rstate->daemon_enabled_func) {
- old_daemon_enabled = rstate->daemon_enabled;
- rstate->daemon_enabled = (rstate->daemon_enabled_func (self) == RFKILL_UNBLOCKED);
- if (old_daemon_enabled != rstate->daemon_enabled) {
- nm_log_info (LOGD_RFKILL, "%s now %s by management service",
- rstate->desc,
- rstate->daemon_enabled ? "enabled" : "disabled");
- }
- }
+ /* recheck kernel rfkill state */
+ update_rstate_from_rfkill (priv->rfkill_mgr, rstate);
/* Print out all states affecting device enablement */
if (rstate->desc) {
- if (rstate->daemon_enabled_func) {
- nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d daemon-enabled %d",
- rstate->desc, rstate->hw_enabled, rstate->sw_enabled, rstate->daemon_enabled);
- } else {
- nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d",
- rstate->desc, rstate->hw_enabled, rstate->sw_enabled);
- }
+ nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d",
+ rstate->desc, rstate->hw_enabled, rstate->sw_enabled);
}
/* Log new killswitch state */
@@ -1783,20 +1412,6 @@ nm_manager_rfkill_update (NMManager *self, RfKillType rtype)
}
static void
-manager_ipw_rfkill_state_changed (NMDeviceWifi *device,
- GParamSpec *pspec,
- gpointer user_data)
-{
- nm_manager_rfkill_update (NM_MANAGER (user_data), RFKILL_TYPE_WLAN);
-}
-
-static void
-manager_modem_enabled_changed (NMDevice *device, gpointer user_data)
-{
- nm_manager_rfkill_update (NM_MANAGER (user_data), RFKILL_TYPE_WWAN);
-}
-
-static void
device_auth_done_cb (NMAuthChain *chain,
GError *auth_error,
DBusGMethodInvocation *context,
@@ -1810,6 +1425,8 @@ device_auth_done_cb (NMAuthChain *chain,
const char *permission;
NMDeviceAuthRequestFunc callback;
+ g_assert (context);
+
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
permission = nm_auth_chain_get_data (chain, "requested-permission");
@@ -1819,7 +1436,8 @@ device_auth_done_cb (NMAuthChain *chain,
device = nm_auth_chain_get_data (chain, "device");
g_assert (device);
- result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, permission));
+ result = nm_auth_chain_get_result (chain, permission);
+
if (auth_error) {
/* translate the auth error into a manager permission denied error */
nm_log_dbg (LOGD_CORE, "%s request failed: %s", permission, auth_error->message);
@@ -1858,112 +1476,283 @@ device_auth_request_cb (NMDevice *device,
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
- gulong sender_uid = G_MAXULONG;
+ NMAuthSubject *subject = NULL;
char *error_desc = NULL;
NMAuthChain *chain;
- /* Get the caller's UID for the root check */
- if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &sender_uid, &error_desc)) {
+ /* Validate the caller */
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
- error_desc);
- callback (device, context, error, user_data);
- g_error_free (error);
- g_free (error_desc);
- return;
+ "Failed to get request UID.");
+ goto done;
}
/* Ensure the subject has permissions for this connection */
- if (!nm_auth_uid_in_acl (connection,
- priv->session_monitor,
- sender_uid,
- &error_desc)) {
+ if (connection && !nm_auth_uid_in_acl (connection,
+ nm_session_monitor_get (),
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
+ g_free (error_desc);
+ goto done;
+ }
+
+ /* Validate the request */
+ chain = nm_auth_chain_new_subject (subject, context, device_auth_done_cb, self);
+ if (!chain) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Unable to authenticate request.");
+ goto done;
+ }
+
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+ nm_auth_chain_set_data (chain, "device", g_object_ref (device), g_object_unref);
+ nm_auth_chain_set_data (chain, "requested-permission", g_strdup (permission), g_free);
+ nm_auth_chain_set_data (chain, "callback", callback, NULL);
+ nm_auth_chain_set_data (chain, "user-data", user_data, NULL);
+ nm_auth_chain_add_call (chain, permission, allow_interaction);
+
+done:
+ g_clear_object (&subject);
+ if (error)
callback (device, context, error, user_data);
+ g_clear_error (&error);
+}
+
+/* This should really be moved to gsystem. */
+#define free_slist __attribute__ ((cleanup(local_slist_free)))
+static void
+local_slist_free (void *loc)
+{
+ GSList **location = loc;
+
+ if (location)
+ g_slist_free (*location);
+}
+
+static gboolean
+match_connection_filter (NMConnection *connection, gpointer user_data)
+{
+ return nm_device_check_connection_compatible (NM_DEVICE (user_data), connection);
+}
+
+/**
+ * get_existing_connection:
+ * @manager: #NMManager instance
+ * @device: #NMDevice instance
+ *
+ * Returns: a #NMSettingsConnection to be assumed by the device, or %NULL if
+ * the device does not support assuming existing connections.
+ */
+static NMConnection *
+get_existing_connection (NMManager *manager, NMDevice *device)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ free_slist GSList *connections = nm_manager_get_activatable_connections (manager);
+ NMConnection *connection = NULL, *matched;
+ NMSettingsConnection *added = NULL;
+ GError *error = NULL;
+
+ nm_device_capture_initial_config (device);
+
+ /* The core of the API is nm_device_generate_connection() function and
+ * update_connection() virtual method and the convenient connection_type
+ * class attribute. Subclasses supporting the new API must have
+ * update_connection() implemented, otherwise nm_device_generate_connection()
+ * returns NULL.
+ */
+ connection = nm_device_generate_connection (device);
+ if (!connection)
+ return NULL;
+
+ /* Now we need to compare the generated connection to each configured
+ * connection. The comparison function is the heart of the connection
+ * assumption implementation and it must compare the connections very
+ * carefully to sort out various corner cases. Also, the comparison is
+ * not entirely symmetric.
+ *
+ * When no configured connection matches the generated connection, we keep
+ * the generated connection instead.
+ */
+ connections = g_slist_reverse (g_slist_sort (connections, nm_settings_sort_connections));
+ matched = nm_utils_match_connection (connections,
+ connection,
+ nm_device_has_carrier (device),
+ match_connection_filter,
+ device);
+ if (matched) {
+ nm_log_info (LOGD_DEVICE, "(%s): found matching connection '%s'",
+ nm_device_get_iface (device),
+ nm_connection_get_id (matched));
+ g_object_unref (connection);
+ return matched;
+ }
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): generated connection '%s'",
+ nm_device_get_iface (device),
+ nm_connection_get_id (connection));
+
+ added = nm_settings_add_connection (priv->settings, connection, FALSE, &error);
+ if (added)
+ nm_settings_connection_set_nm_generated (added);
+ else {
+ nm_log_warn (LOGD_SETTINGS, "(%s) Couldn't save generated connection '%s': %s",
+ nm_device_get_iface (device),
+ nm_connection_get_id (connection),
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
+ g_object_unref (connection);
+
+ return added ? NM_CONNECTION (added) : NULL;
+}
+
+static gboolean
+assume_connection (NMManager *self, NMDevice *device, NMConnection *connection)
+{
+ NMActiveConnection *active, *master_ac;
+ NMAuthSubject *subject;
+ GError *error = NULL;
+
+ nm_log_dbg (LOGD_DEVICE, "(%s): will attempt to assume connection",
+ nm_device_get_iface (device));
+
+ /* Move device to DISCONNECTED to activate the connection */
+ if (nm_device_get_state (device) == NM_DEVICE_STATE_UNAVAILABLE) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
+ }
+ g_return_val_if_fail (nm_device_get_state (device) >= NM_DEVICE_STATE_DISCONNECTED, FALSE);
+
+ subject = nm_auth_subject_new_internal ();
+ active = _new_active_connection (self, connection, NULL, device, subject, &error);
+ g_object_unref (subject);
+
+ if (!active) {
+ nm_log_warn (LOGD_DEVICE, "assumed connection %s failed to activate: (%d) %s",
+ nm_connection_get_path (connection),
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
g_error_free (error);
- g_free (error_desc);
+ return FALSE;
+ }
+
+ /* If the device is a slave or VLAN, find the master ActiveConnection */
+ master_ac = NULL;
+ if (find_master (self, connection, device, NULL, NULL, &master_ac, NULL) && master_ac)
+ nm_active_connection_set_master (active, master_ac);
+
+ nm_active_connection_set_assumed (active, TRUE);
+ nm_active_connection_export (active);
+ active_connection_add (self, active);
+ nm_device_queue_activation (device, NM_ACT_REQUEST (active));
+ g_object_unref (active);
+
+ return TRUE;
+}
+
+static void
+recheck_assume_connection (NMDevice *device, gpointer user_data)
+{
+ NMManager *self = user_data;
+ NMConnection *connection;
+ gboolean was_unmanaged = FALSE;
+
+ if (manager_sleeping (self))
+ return;
+ if (nm_device_get_unmanaged_flag (device, NM_UNMANAGED_USER))
+ return;
+
+ connection = get_existing_connection (self, device);
+ if (!connection) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): can't assume; no connection",
+ nm_device_get_iface (device));
return;
}
- /* Yay for root */
- if (0 == sender_uid)
- callback (device, context, NULL, user_data);
- else {
- /* Otherwise validate the non-root request */
- chain = nm_auth_chain_new (context, NULL, device_auth_done_cb, self);
- g_assert (chain);
- priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+ if (nm_device_get_state (device) == NM_DEVICE_STATE_UNMANAGED) {
+ was_unmanaged = TRUE;
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNAVAILABLE,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
+ }
- nm_auth_chain_set_data (chain, "device", g_object_ref (device), g_object_unref);
- nm_auth_chain_set_data (chain, "requested-permission", g_strdup (permission), g_free);
- nm_auth_chain_set_data (chain, "callback", callback, NULL);
- nm_auth_chain_set_data (chain, "user-data", user_data, NULL);
- nm_auth_chain_add_call (chain, permission, allow_interaction);
+ if (!assume_connection (self, device, connection)) {
+ if (was_unmanaged) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNAVAILABLE,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED);
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNMANAGED,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED);
+ }
}
}
+/**
+ * add_device:
+ * @self: the #NMManager
+ * @device: the #NMDevice to add
+ * @generate_con: %TRUE if existing connection (if any) should be assumed
+ *
+ * If successful, this function will increase the references count of @device.
+ * Callers should decrease the reference count.
+ */
static void
-add_device (NMManager *self, NMDevice *device)
+add_device (NMManager *self, NMDevice *device, gboolean generate_con)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
const char *iface, *driver, *type_desc;
- char *path;
- static guint32 devcount = 0;
const GSList *unmanaged_specs;
- NMConnection *existing = NULL;
- gboolean managed = FALSE, enabled = FALSE;
+ gboolean user_unmanaged, sleeping;
+ NMConnection *connection = NULL;
+ gboolean enabled = FALSE;
RfKillType rtype;
- NMDeviceType devtype;
+ GSList *iter, *remove = NULL;
- iface = nm_device_get_ip_iface (device);
- g_assert (iface);
-
- devtype = nm_device_get_device_type (device);
+ /* No duplicates */
+ if (nm_manager_get_device_by_udi (self, nm_device_get_udi (device)))
+ return;
- /* Ignore the device if we already know about it. But some modems will
- * provide pseudo-ethernet devices that NM has already claimed while
- * ModemManager is still detecting the modem's serial ports, so when the
- * MM modem object finally shows up it may have the same IP interface as the
- * ethernet interface we've already detected. In this case we skip the
- * check for an existing device with the same IP interface name and kill
- * the ethernet device later in favor of the modem device.
+ /* Remove existing devices owned by the new device; eg remove ethernet
+ * ports that are owned by a WWAN modem, since udev may announce them
+ * before the modem is fully discovered.
+ *
+ * FIXME: use parent/child device relationships instead of removing
+ * the child NMDevice entirely
*/
- if ((devtype != NM_DEVICE_TYPE_MODEM) && find_device_by_ip_iface (self, iface)) {
- g_object_unref (device);
- return;
+ for (iter = priv->devices; iter; iter = iter->next) {
+ iface = nm_device_get_ip_iface (iter->data);
+ if (nm_device_owns_iface (device, iface))
+ remove = g_slist_prepend (remove, iter->data);
}
+ for (iter = remove; iter; iter = iter->next)
+ remove_device (self, NM_DEVICE (iter->data), FALSE);
+ g_slist_free (remove);
- nm_device_set_connection_provider (device, NM_CONNECTION_PROVIDER (priv->settings));
-
- priv->devices = g_slist_append (priv->devices, device);
+ priv->devices = g_slist_append (priv->devices, g_object_ref (device));
g_signal_connect (device, "state-changed",
- G_CALLBACK (manager_device_state_changed),
- self);
+ G_CALLBACK (manager_device_state_changed),
+ self);
g_signal_connect (device, NM_DEVICE_AUTH_REQUEST,
G_CALLBACK (device_auth_request_cb),
self);
- if (devtype == NM_DEVICE_TYPE_WIFI) {
- /* Attach to the access-point-added signal so that the manager can fill
- * non-SSID-broadcasting APs with an SSID.
- */
- g_signal_connect (device, "hidden-ap-found",
- G_CALLBACK (manager_hidden_ap_found),
- self);
+ g_signal_connect (device, NM_DEVICE_REMOVED,
+ G_CALLBACK (device_removed_cb),
+ self);
- /* Hook up rfkill handling for ipw-based cards until they get converted
- * to use the kernel's rfkill subsystem in 2.6.33.
- */
- g_signal_connect (device, "notify::" NM_DEVICE_WIFI_IPW_RFKILL_STATE,
- G_CALLBACK (manager_ipw_rfkill_state_changed),
- self);
- } else if (devtype == NM_DEVICE_TYPE_MODEM) {
- g_signal_connect (device, NM_DEVICE_MODEM_ENABLE_CHANGED,
- G_CALLBACK (manager_modem_enabled_changed),
+ if (priv->startup) {
+ g_signal_connect (device, "notify::" NM_DEVICE_HAS_PENDING_ACTION,
+ G_CALLBACK (device_has_pending_action_changed),
self);
}
@@ -1978,6 +1767,9 @@ add_device (NMManager *self, NMDevice *device)
nm_device_set_enabled (device, enabled);
}
+ iface = nm_device_get_iface (device);
+ g_assert (iface);
+
type_desc = nm_device_get_type_desc (device);
g_assert (type_desc);
driver = nm_device_get_driver (device);
@@ -1986,121 +1778,47 @@ add_device (NMManager *self, NMDevice *device)
nm_log_info (LOGD_HW, "(%s): new %s device (driver: '%s' ifindex: %d)",
iface, type_desc, driver, nm_device_get_ifindex (device));
- path = g_strdup_printf ("/org/freedesktop/NetworkManager/Devices/%d", devcount++);
- nm_device_set_path (device, path);
- dbus_g_connection_register_g_object (nm_dbus_manager_get_connection (priv->dbus_mgr),
- path,
- G_OBJECT (device));
- nm_log_info (LOGD_CORE, "(%s): exported as %s", iface, path);
- g_free (path);
+ unmanaged_specs = nm_settings_get_unmanaged_specs (priv->settings);
+ user_unmanaged = nm_device_spec_match_list (device, unmanaged_specs);
+ nm_device_set_initial_unmanaged_flag (device, NM_UNMANAGED_USER, user_unmanaged);
- /* Check if we should assume the device's active connection by matching its
- * config with an existing system connection.
- */
- if (nm_device_can_assume_connections (device)) {
- GSList *connections = NULL;
+ sleeping = manager_sleeping (self);
+ nm_device_set_initial_unmanaged_flag (device, NM_UNMANAGED_INTERNAL, sleeping);
- connections = nm_settings_get_connections (priv->settings);
- existing = nm_device_connection_match_config (device, (const GSList *) connections);
- g_slist_free (connections);
+ nm_device_dbus_export (device);
- if (existing)
- nm_log_dbg (LOGD_DEVICE, "(%s): found existing device connection '%s'",
- nm_device_get_iface (device),
- nm_connection_get_id (existing));
- }
+ /* Don't generate a connection e.g. for devices NM just created, or
+ * for the loopback, or when we're sleeping. */
+ if (generate_con && !user_unmanaged && !sleeping)
+ connection = get_existing_connection (self, device);
- /* Start the device if it's supposed to be managed */
- unmanaged_specs = nm_settings_get_unmanaged_specs (priv->settings);
- if ( !manager_sleeping (self)
- && !nm_device_spec_match_list (device, unmanaged_specs)) {
- nm_device_set_managed (device,
- TRUE,
- existing ? NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED :
- NM_DEVICE_STATE_REASON_NOW_MANAGED);
- managed = TRUE;
+ /* Start the device if it's supposed to be managed. Note that this will
+ * manage default-unmanaged devices if they have a generated connection.
+ */
+ if (nm_device_get_managed (device) || connection) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNAVAILABLE,
+ connection ? NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED :
+ NM_DEVICE_STATE_REASON_NOW_MANAGED);
}
nm_settings_device_added (priv->settings, device);
g_signal_emit (self, signals[DEVICE_ADDED], 0, device);
+ g_object_notify (G_OBJECT (self), NM_MANAGER_DEVICES);
/* New devices might be master interfaces for virtual interfaces; so we may
* need to create new virtual interfaces now.
*/
system_create_virtual_devices (self);
- /* If the device has a connection it can assume, do that now */
- if (existing && managed && nm_device_is_available (device)) {
- NMActiveConnection *ac;
- GError *error = NULL;
-
- nm_log_dbg (LOGD_DEVICE, "(%s): will attempt to assume existing connection",
- nm_device_get_iface (device));
-
- ac = internal_activate_device (self, device, existing, NULL, FALSE, 0, NULL, TRUE, NULL, &error);
- if (!ac) {
- nm_log_warn (LOGD_DEVICE, "assumed connection %s failed to activate: (%d) %s",
- nm_connection_get_path (existing),
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_error_free (error);
- }
- }
-}
-
-static void
-bluez_manager_bdaddr_added_cb (NMBluezManager *bluez_mgr,
- NMBluezDevice *bt_device,
- const char *bdaddr,
- const char *name,
- const char *object_path,
- guint32 capabilities,
- NMManager *manager)
-{
- NMDevice *device;
- gboolean has_dun = (capabilities & NM_BT_CAPABILITY_DUN);
- gboolean has_nap = (capabilities & NM_BT_CAPABILITY_NAP);
-
- g_return_if_fail (bdaddr != NULL);
- g_return_if_fail (name != NULL);
- g_return_if_fail (object_path != NULL);
- g_return_if_fail (capabilities != NM_BT_CAPABILITY_NONE);
- g_return_if_fail (NM_IS_BLUEZ_DEVICE (bt_device));
-
- /* Make sure the device is not already in the device list */
- if (nm_manager_get_device_by_udi (manager, object_path))
- return;
-
- device = nm_device_bt_new (bt_device, object_path, bdaddr, name, capabilities, FALSE);
- if (device) {
- nm_log_info (LOGD_HW, "BT device %s (%s) added (%s%s%s)",
- name,
- bdaddr,
- has_dun ? "DUN" : "",
- has_dun && has_nap ? " " : "",
- has_nap ? "NAP" : "");
-
- add_device (manager, device);
- }
-}
-
-static void
-bluez_manager_bdaddr_removed_cb (NMBluezManager *bluez_mgr,
- const char *bdaddr,
- const char *object_path,
- gpointer user_data)
-{
- NMManager *self = NM_MANAGER (user_data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- NMDevice *device;
-
- g_return_if_fail (bdaddr != NULL);
- g_return_if_fail (object_path != NULL);
-
- device = nm_manager_get_device_by_udi (self, object_path);
- if (device) {
- nm_log_info (LOGD_HW, "BT device %s removed", bdaddr);
- priv->devices = remove_one_device (self, priv->devices, device, FALSE);
+ /* If the device has a connection it can assume, do that now. If it's a
+ * device that we might ever want to assume a connection on, then set that up.
+ */
+ if (connection)
+ assume_connection (self, device, connection);
+ if (generate_con) {
+ g_signal_connect (device, NM_DEVICE_RECHECK_ASSUME,
+ G_CALLBACK (recheck_assume_connection), self);
}
}
@@ -2134,25 +1852,33 @@ find_device_by_ifindex (NMManager *self, guint32 ifindex)
return NULL;
}
-#define PLUGIN_PREFIX "libnm-device-plugin-"
-
-typedef struct {
- NMDeviceType t;
- guint priority;
- NMDeviceFactoryCreateFunc create_func;
-} PluginInfo;
+static void
+factory_device_added_cb (NMDeviceFactory *factory,
+ NMDevice *device,
+ gpointer user_data)
+{
+ add_device (NM_MANAGER (user_data), device, FALSE);
+}
-static gint
-plugin_sort (PluginInfo *a, PluginInfo *b)
+static gboolean
+factory_component_added_cb (NMDeviceFactory *factory,
+ GObject *component,
+ gpointer user_data)
{
- /* Higher priority means sort earlier in the list (ie, return -1) */
- if (a->priority > b->priority)
- return -1;
- else if (a->priority < b->priority)
- return 1;
- return 0;
+ NMManager *self = NM_MANAGER (user_data);
+ GSList *iter;
+
+ for (iter = NM_MANAGER_GET_PRIVATE (self)->devices; iter; iter = iter->next) {
+ if (nm_device_notify_component_added (NM_DEVICE (iter->data), component))
+ return TRUE;
+ }
+ return FALSE;
}
+#define PLUGIN_PREFIX "libnm-device-plugin-"
+#define PLUGIN_PATH_TAG "NMManager-plugin-path"
+#define PLUGIN_TYPEFUNC_TAG "typefunc"
+
static void
load_device_factories (NMManager *self)
{
@@ -2161,7 +1887,7 @@ load_device_factories (NMManager *self)
GError *error = NULL;
const char *item;
char *path;
- GSList *list = NULL, *iter;
+ GSList *iter;
dir = g_dir_open (NMPLUGINDIR, 0, &error);
if (!dir) {
@@ -2174,14 +1900,16 @@ load_device_factories (NMManager *self)
while ((item = g_dir_read_name (dir))) {
GModule *plugin;
+ NMDeviceFactory *factory;
NMDeviceFactoryCreateFunc create_func;
- NMDeviceFactoryPriorityFunc priority_func;
- NMDeviceFactoryTypeFunc type_func;
- PluginInfo *info = NULL;
- NMDeviceType plugin_type;
+ NMDeviceFactoryDeviceTypeFunc type_func;
+ NMDeviceType dev_type;
+ const char *found = NULL;
if (!g_str_has_prefix (item, PLUGIN_PREFIX))
continue;
+ if (g_str_has_suffix (item, ".la"))
+ continue;
path = g_module_build_path (NMPLUGINDIR, item);
g_assert (path);
@@ -2193,158 +1921,92 @@ load_device_factories (NMManager *self)
continue;
}
- if (!g_module_symbol (plugin, "nm_device_factory_get_type", (gpointer) (&type_func))) {
- nm_log_warn (LOGD_HW, "(%s): failed to find device factory: %s", item, g_module_error ());
+ if (!g_module_symbol (plugin, "nm_device_factory_get_device_type", (gpointer) &type_func)) {
+ nm_log_warn (LOGD_HW, "(%s): failed to find device factory type: %s", item, g_module_error ());
g_module_close (plugin);
continue;
}
/* Make sure we don't double-load plugins */
- plugin_type = type_func ();
- for (iter = list; iter; iter = g_slist_next (iter)) {
- PluginInfo *candidate = iter->data;
+ dev_type = type_func ();
+ for (iter = priv->factories; iter; iter = iter->next) {
+ NMDeviceFactoryDeviceTypeFunc loaded_type_func;
- if (plugin_type == candidate->t) {
- info = candidate;
+ loaded_type_func = g_object_get_data (G_OBJECT (iter->data), PLUGIN_TYPEFUNC_TAG);
+ if (dev_type == loaded_type_func ()) {
+ found = g_object_get_data (G_OBJECT (iter->data), PLUGIN_PATH_TAG);
break;
}
}
- if (info) {
+ if (found) {
+ nm_log_warn (LOGD_HW, "Found multiple device plugins for same type: %s vs %s",
+ found, g_module_name (plugin));
g_module_close (plugin);
continue;
}
- if (!g_module_symbol (plugin, "nm_device_factory_create_device", (gpointer) (&create_func))) {
- nm_log_warn (LOGD_HW, "(%s): failed to find device creator: %s", item, g_module_error ());
+ if (!g_module_symbol (plugin, "nm_device_factory_create", (gpointer) &create_func)) {
+ nm_log_warn (LOGD_HW, "(%s): failed to find device factory creator: %s", item, g_module_error ());
g_module_close (plugin);
continue;
}
- info = g_malloc0 (sizeof (*info));
- info->create_func = create_func;
- info->t = plugin_type;
-
- /* Grab priority; higher number equals higher priority */
- if (g_module_symbol (plugin, "nm_device_factory_get_priority", (gpointer) (&priority_func)))
- info->priority = priority_func ();
- else {
- nm_log_dbg (LOGD_HW, "(%s): failed to find device factory priority func: %s",
- item, g_module_error ());
+ factory = create_func (&error);
+ if (!factory) {
+ nm_log_warn (LOGD_HW, "(%s): failed to initialize device factory: %s",
+ item, error ? error->message : "unknown");
+ g_clear_error (&error);
+ g_module_close (plugin);
+ continue;
}
+ g_clear_error (&error);
g_module_make_resident (plugin);
- list = g_slist_insert_sorted (list, info, (GCompareFunc) plugin_sort);
+ priv->factories = g_slist_prepend (priv->factories, factory);
- nm_log_info (LOGD_HW, "Loaded device factory: %s", g_module_name (plugin));
+ g_signal_connect (factory,
+ NM_DEVICE_FACTORY_DEVICE_ADDED,
+ G_CALLBACK (factory_device_added_cb),
+ self);
+ g_signal_connect (factory,
+ NM_DEVICE_FACTORY_COMPONENT_ADDED,
+ G_CALLBACK (factory_component_added_cb),
+ self);
+ g_object_set_data_full (G_OBJECT (factory), PLUGIN_PATH_TAG,
+ g_strdup (g_module_name (plugin)), g_free);
+ g_object_set_data (G_OBJECT (factory), PLUGIN_TYPEFUNC_TAG, type_func);
+
+ nm_log_info (LOGD_HW, "Loaded device plugin: %s", g_module_name (plugin));
};
g_dir_close (dir);
- /* Ditch the priority info and copy the factory functions to our private data */
- for (iter = list; iter; iter = g_slist_next (iter)) {
- PluginInfo *info = iter->data;
-
- priv->factories = g_slist_append (priv->factories, info->create_func);
- g_free (info);
- }
- g_slist_free (list);
-}
-
-static gboolean
-is_wireless (GUdevDevice *device)
-{
- const char *tmp;
-
- /* Check devtype, newer kernels (2.6.32+) have this */
- tmp = g_udev_device_get_property (device, "DEVTYPE");
- if (g_strcmp0 (tmp, "wlan") == 0)
- return TRUE;
-
- /* Otherwise hit up WEXT directly */
- return wifi_utils_is_wifi (g_udev_device_get_name (device),
- g_udev_device_get_sysfs_path (device));
-}
-
-static gboolean
-is_olpc_mesh (GUdevDevice *device)
-{
- const gchar *prop = g_udev_device_get_property (device, "ID_NM_OLPC_MESH");
- return (prop != NULL);
-}
-
-static gboolean
-is_infiniband (GUdevDevice *device)
-{
- gint etype = g_udev_device_get_sysfs_attr_as_int (device, "type");
- return etype == ARPHRD_INFINIBAND;
-}
-
-static gboolean
-is_bond (int ifindex)
-{
- return (nm_system_get_iface_type (ifindex, NULL) == NM_IFACE_TYPE_BOND);
-}
-
-static gboolean
-is_bridge (int ifindex)
-{
- return (nm_system_get_iface_type (ifindex, NULL) == NM_IFACE_TYPE_BRIDGE);
-}
-
-static gboolean
-is_vlan (int ifindex)
-{
- return (nm_system_get_iface_type (ifindex, NULL) == NM_IFACE_TYPE_VLAN);
-}
-
-static gboolean
-is_adsl (GUdevDevice *device)
-{
- return (g_strcmp0 (g_udev_device_get_subsystem (device), "atm") == 0);
+ priv->factories = g_slist_reverse (priv->factories);
}
static void
-udev_device_added_cb (NMUdevManager *udev_mgr,
- GUdevDevice *udev_device,
- const char *iface,
- const char *sysfs_path,
- const char *driver,
- int ifindex,
- gpointer user_data)
+platform_link_added (NMManager *self,
+ int ifindex,
+ NMPlatformLink *plink,
+ NMPlatformReason reason)
{
- NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMDevice *device = NULL;
GSList *iter;
GError *error = NULL;
- g_return_if_fail (udev_device != NULL);
- g_return_if_fail (iface != NULL);
- g_return_if_fail (sysfs_path != NULL);
- g_return_if_fail (driver != NULL);
+ g_return_if_fail (ifindex > 0);
- /* Most devices will have an ifindex here */
- if (ifindex > 0) {
- device = find_device_by_ifindex (self, ifindex);
- if (device) {
- /* If it's a virtual device we may need to update its UDI */
- if (nm_system_get_iface_type (ifindex, iface) != NM_IFACE_TYPE_UNSPEC)
- g_object_set (G_OBJECT (device), NM_DEVICE_UDI, sysfs_path, NULL);
- return;
- }
- } else {
- /* But ATM/ADSL devices don't */
- g_return_if_fail (is_adsl (udev_device));
- device = find_device_by_ip_iface (self, iface);
- if (device)
- return;
- }
+ if (priv->ignore_link_added_cb > 0)
+ return;
+
+ if (find_device_by_ifindex (self, ifindex))
+ return;
/* Try registered device factories */
- for (iter = priv->factories; iter; iter = g_slist_next (iter)) {
- NMDeviceFactoryCreateFunc create_func = iter->data;
+ for (iter = priv->factories; iter; iter = iter->next) {
+ NMDeviceFactory *factory = NM_DEVICE_FACTORY (iter->data);
- g_clear_error (&error);
- device = (NMDevice *) create_func (udev_device, sysfs_path, iface, driver, &error);
+ device = nm_device_factory_new_link (factory, plink, &error);
if (device && NM_IS_DEVICE (device)) {
g_assert_no_error (error);
break; /* success! */
@@ -2352,7 +2014,7 @@ udev_device_added_cb (NMUdevManager *udev_mgr,
if (error) {
nm_log_warn (LOGD_HW, "%s: factory failed to create device: (%d) %s",
- sysfs_path,
+ plink->udi,
error ? error->code : -1,
error ? error->message : "(unknown)");
g_clear_error (&error);
@@ -2360,102 +2022,128 @@ udev_device_added_cb (NMUdevManager *udev_mgr,
}
}
+ /* Ignore Bluetooth PAN interfaces; they are handled by their NMDeviceBt
+ * parent and don't get a separate interface.
+ */
+ if (!strncmp (plink->name, "bnep", STRLEN ("bnep")))
+ return;
+
if (device == NULL) {
- if (is_olpc_mesh (udev_device)) /* must be before is_wireless */
- device = nm_device_olpc_mesh_new (sysfs_path, iface, driver);
- else if (is_wireless (udev_device))
- device = nm_device_wifi_new (sysfs_path, iface, driver);
- else if (is_infiniband (udev_device))
- device = nm_device_infiniband_new (sysfs_path, iface, driver);
- else if (is_bond (ifindex))
- device = nm_device_bond_new (sysfs_path, iface);
- else if (is_bridge (ifindex)) {
-
- /* FIXME: always create device when we handle bridges non-destructively */
- if (bridge_created_by_nm (self, iface))
- device = nm_device_bridge_new (sysfs_path, iface);
- else
- nm_log_info (LOGD_BRIDGE, "(%s): ignoring bridge not created by NetworkManager", iface);
- } else if (is_vlan (ifindex)) {
- int parent_ifindex = -1;
- NMDevice *parent;
+ int parent_ifindex = -1;
+ NMDevice *parent;
+ switch (plink->type) {
+ case NM_LINK_TYPE_ETHERNET:
+ device = nm_device_ethernet_new (plink);
+ break;
+ case NM_LINK_TYPE_INFINIBAND:
+ device = nm_device_infiniband_new (plink);
+ break;
+ case NM_LINK_TYPE_BOND:
+ device = nm_device_bond_new (plink);
+ break;
+ case NM_LINK_TYPE_TEAM:
+ device = nm_device_team_new (plink);
+ break;
+ case NM_LINK_TYPE_BRIDGE:
+ device = nm_device_bridge_new (plink);
+ break;
+ case NM_LINK_TYPE_VLAN:
/* Have to find the parent device */
- if (nm_system_get_iface_vlan_info (ifindex, &parent_ifindex, NULL)) {
+ if (nm_platform_vlan_get_info (ifindex, &parent_ifindex, NULL)) {
parent = find_device_by_ifindex (self, parent_ifindex);
if (parent)
- device = nm_device_vlan_new (sysfs_path, iface, parent);
+ device = nm_device_vlan_new (plink, parent);
else {
/* If udev signaled the VLAN interface before it signaled
* the VLAN's parent at startup we may not know about the
* parent device yet. But we'll find it on the second pass
* from nm_manager_start().
*/
- nm_log_dbg (LOGD_HW, "(%s): VLAN parent interface unknown", iface);
+ nm_log_dbg (LOGD_HW, "(%s): VLAN parent interface unknown", plink->name);
}
} else
- nm_log_err (LOGD_HW, "(%s): failed to get VLAN parent ifindex", iface);
- } else if (is_adsl (udev_device))
- device = nm_device_adsl_new (sysfs_path, iface, driver);
- else
- device = nm_device_ethernet_new (sysfs_path, iface, driver);
+ nm_log_err (LOGD_HW, "(%s): failed to get VLAN parent ifindex", plink->name);
+ break;
+ case NM_LINK_TYPE_VETH:
+ device = nm_device_veth_new (plink);
+ break;
+ case NM_LINK_TYPE_TUN:
+ case NM_LINK_TYPE_TAP:
+ device = nm_device_tun_new (plink);
+ break;
+ case NM_LINK_TYPE_MACVLAN:
+ case NM_LINK_TYPE_MACVTAP:
+ device = nm_device_macvlan_new (plink);
+ break;
+ case NM_LINK_TYPE_VXLAN:
+ device = nm_device_vxlan_new (plink);
+ break;
+ case NM_LINK_TYPE_GRE:
+ case NM_LINK_TYPE_GRETAP:
+ device = nm_device_gre_new (plink);
+ break;
+
+ case NM_LINK_TYPE_WWAN_ETHERNET:
+ /* WWAN pseudo-ethernet interfaces are handled automatically by
+ * their NMDeviceModem and don't get a separate NMDevice object.
+ */
+ break;
+
+ case NM_LINK_TYPE_OLPC_MESH:
+ case NM_LINK_TYPE_WIFI:
+ case NM_LINK_TYPE_WIMAX:
+ nm_log_info (LOGD_HW, "(%s): '%s' plugin not available; creating generic device",
+ plink->name, plink->type_name);
+ /* fall through */
+ default:
+ device = nm_device_generic_new (plink);
+ break;
+ }
}
- if (device)
- add_device (self, device);
+ if (device) {
+ add_device (self, device, plink->type != NM_LINK_TYPE_LOOPBACK);
+ g_object_unref (device);
+ }
}
static void
-udev_device_removed_cb (NMUdevManager *manager,
- GUdevDevice *udev_device,
- gpointer user_data)
-{
- NMManager *self = NM_MANAGER (user_data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- NMDevice *device;
- guint32 ifindex;
-
- ifindex = g_udev_device_get_property_as_int (udev_device, "IFINDEX");
- device = find_device_by_ifindex (self, ifindex);
- if (!device) {
- GSList *iter;
- const char *iface = g_udev_device_get_name (udev_device);
-
- /* On removal we aren't always be able to read properties like IFINDEX
- * anymore, as they may have already been removed from sysfs. So we
- * have to fall back on device name (eg, interface name).
- *
- * Also, some devices (namely PPPoE (pppX), ADSL (nasX, pppX), and
- * mobile broadband (pppX, bnepX)) create a kernel netdevice for IP
- * communication (called the "IP interface" in NM) as part of the
- * connection process and thus the IP interface lifetime does not
- * correspond to the NMDevice lifetime. For these devices we must
- * ignore removal events for the IP interface name otherwise the
- * NMDevice would be removed. Hence the usage here of
- * nm_device_get_iface() rather than nm_device_get_ip_iface().
- */
- for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- if (g_strcmp0 (nm_device_get_iface (NM_DEVICE (iter->data)), iface) == 0) {
- device = iter->data;
- break;
- }
- }
- }
+platform_link_cb (NMPlatform *platform,
+ int ifindex,
+ NMPlatformLink *plink,
+ NMPlatformSignalChangeType change_type,
+ NMPlatformReason reason,
+ gpointer user_data)
+{
+ switch (change_type) {
+ case NM_PLATFORM_SIGNAL_ADDED:
+ platform_link_added (NM_MANAGER (user_data), ifindex, plink, reason);
+ break;
+ case NM_PLATFORM_SIGNAL_REMOVED: {
+ NMManager *self = NM_MANAGER (user_data);
+ NMDevice *device;
- if (device)
- priv->devices = remove_one_device (self, priv->devices, device, FALSE);
+ device = find_device_by_ifindex (self, ifindex);
+ if (device)
+ remove_device (self, device, FALSE);
+ break;
+ }
+ default:
+ break;
+ }
}
static void
-udev_manager_rfkill_changed_cb (NMUdevManager *udev_mgr,
- RfKillType rtype,
- RfKillState udev_state,
- gpointer user_data)
+rfkill_manager_rfkill_changed_cb (NMRfkillManager *rfkill_mgr,
+ RfKillType rtype,
+ RfKillState udev_state,
+ gpointer user_data)
{
nm_manager_rfkill_update (NM_MANAGER (user_data), rtype);
}
-GSList *
+const GSList *
nm_manager_get_devices (NMManager *manager)
{
g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
@@ -2503,54 +2191,18 @@ impl_manager_get_device_by_ip_iface (NMManager *self,
return path ? TRUE : FALSE;
}
-static NMActiveConnection *
-internal_activate_device (NMManager *manager,
- NMDevice *device,
- NMConnection *connection,
- const char *specific_object,
- gboolean user_requested,
- gulong sender_uid,
- const char *dbus_sender,
- gboolean assumed,
- NMActiveConnection *master,
- GError **error)
+static gboolean
+is_compatible_with_slave (NMConnection *master, NMConnection *slave)
{
- NMActRequest *req;
- NMDevice *master_device = NULL;
-
- g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
- g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-
- /* Ensure the requested connection is compatible with the device */
- if (!nm_device_check_connection_compatible (device, connection, error))
- return NULL;
-
- /* Tear down any existing connection */
- if (nm_device_get_act_request (device)) {
- nm_log_info (LOGD_DEVICE, "(%s): disconnecting for new activation request.",
- nm_device_get_iface (device));
- nm_device_state_changed (device,
- NM_DEVICE_STATE_DISCONNECTED,
- NM_DEVICE_STATE_REASON_NONE);
- }
+ NMSettingConnection *s_con;
- if (master)
- master_device = nm_active_connection_get_device (master);
+ g_return_val_if_fail (master, FALSE);
+ g_return_val_if_fail (slave, FALSE);
- req = nm_act_request_new (connection,
- specific_object,
- user_requested,
- sender_uid,
- dbus_sender,
- assumed,
- device,
- master_device);
- g_assert (req);
- active_connection_add (manager, NM_ACTIVE_CONNECTION (req));
- nm_device_activate (device, req);
+ s_con = nm_connection_get_setting_connection (slave);
+ g_assert (s_con);
- return NM_ACTIVE_CONNECTION (req);
+ return nm_connection_is_type (master, nm_setting_connection_get_slave_type (s_con));
}
/**
@@ -2562,14 +2214,35 @@ internal_activate_device (NMManager *manager,
* that master connection was found
* @out_master_device: on success, the master device of @connection if that
* master device was found
+ * @out_master_ac: on success, the master ActiveConnection of @connection if
+ * there already is one
+ * @error: the error, if an error occurred
+ *
+ * Given an #NMConnection, attempts to find its master. If @connection has
+ * no master, this will return %TRUE and @out_master_connection and
+ * @out_master_device will be untouched.
*
- * Given an #NMConnection, attempts to find its master connection and/or its
- * master device. This function may return a master connection, a master device,
- * or both. If only a connection is returned, that master connection is not
- * currently active on any device. If only a device is returned, that device
- * is not currently activated with any connection. If both are returned, then
- * the device is currently activated or activating with the returned master
- * connection.
+ * If @connection does have a master, then the outputs depend on what is in its
+ * #NMSettingConnection:master property:
+ *
+ * If "master" is the ifname of an existing #NMDevice, and that device has a
+ * compatible master connection activated or activating on it, then
+ * @out_master_device, @out_master_connection, and @out_master_ac will all be
+ * set. If the device exists and is idle, only @out_master_device will be set.
+ * If the device exists and has an incompatible connection on it, an error
+ * will be returned.
+ *
+ * If "master" is the ifname of a non-existent device, then @out_master_device
+ * will be %NULL, and @out_master_connection will be a connection whose
+ * activation would cause the creation of that device. @out_master_ac MAY be
+ * set in this case as well (if the connection has started activating, but has
+ * not yet created its device).
+ *
+ * If "master" is the UUID of a compatible master connection, then
+ * @out_master_connection will be the identified connection, and @out_master_device
+ * and/or @out_master_ac will be set if the connection is currently activating.
+ * (@out_master_device will not be set if the device exists but does not have
+ * @out_master_connection active/activating on it.)
*
* Returns: %TRUE if the master device and/or connection could be found or if
* the connection did not require a master, %FALSE otherwise
@@ -2579,7 +2252,9 @@ find_master (NMManager *self,
NMConnection *connection,
NMDevice *device,
NMConnection **out_master_connection,
- NMDevice **out_master_device)
+ NMDevice **out_master_device,
+ NMActiveConnection **out_master_ac,
+ GError **error)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMSettingConnection *s_con;
@@ -2598,9 +2273,20 @@ find_master (NMManager *self,
/* Try as an interface name first */
master_device = find_device_by_ip_iface (self, master);
if (master_device) {
- /* A device obviously can't be its own master */
- if (master_device == device)
+ if (master_device == device) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
+ "Device cannot be its own master");
return FALSE;
+ }
+
+ master_connection = nm_device_get_connection (master_device);
+ if (master_connection && !is_compatible_with_slave (master_connection, connection)) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
+ "The active connection on %s is not a valid master for '%s'",
+ nm_device_get_iface (master_device),
+ nm_connection_get_id (connection));
+ return FALSE;
+ }
} else {
/* Try master as a connection UUID */
master_connection = (NMConnection *) nm_settings_get_connection_by_uuid (priv->settings, master);
@@ -2623,14 +2309,15 @@ find_master (NMManager *self,
* virtual interfaces and see if one of their virtual interface
* names matches the master.
*/
- connections = nm_settings_get_connections (priv->settings);
+ connections = nm_manager_get_activatable_connections (self);
for (iter = connections; iter && !master_connection; iter = g_slist_next (iter)) {
NMConnection *candidate = iter->data;
char *vname;
if (connection_needs_virtual_device (candidate)) {
vname = get_virtual_iface_name (self, candidate, NULL);
- if (g_strcmp0 (master, vname) == 0)
+ if ( g_strcmp0 (master, vname) == 0
+ && is_compatible_with_slave (candidate, connection))
master_connection = candidate;
g_free (vname);
}
@@ -2643,46 +2330,49 @@ find_master (NMManager *self,
*out_master_connection = master_connection;
if (out_master_device)
*out_master_device = master_device;
+ if (out_master_ac && master_connection)
+ *out_master_ac = find_ac_for_connection (self, master_connection);
- return master_device || master_connection;
-}
-
-static gboolean
-is_compatible_with_slave (NMConnection *master, NMConnection *slave)
-{
- NMSettingConnection *s_con;
-
- g_return_val_if_fail (master, FALSE);
- g_return_val_if_fail (slave, FALSE);
-
- s_con = nm_connection_get_setting_connection (slave);
- g_assert (s_con);
-
- return nm_connection_is_type (master, nm_setting_connection_get_slave_type (s_con));
+ if (master_device || master_connection)
+ return TRUE;
+ else {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Master connection not found or invalid");
+ return FALSE;
+ }
}
/**
* ensure_master_active_connection:
- *
* @self: the #NMManager
- * @dbus_sender: if the request was initiated by a user via D-Bus, the
- * dbus sender name of the client that requested the activation; for auto
- * activated connections use %NULL
+ * @subject: the #NMAuthSubject representing the requestor of this activation
* @connection: the connection that should depend on @master_connection
* @device: the #NMDevice, if any, which will activate @connection
- * @master_connection: the master connection
- * @master_device: the master device
+ * @master_connection: the master connection, or %NULL
+ * @master_device: the master device, or %NULL
* @error: the error, if an error occurred
*
* Determines whether a given #NMConnection depends on another connection to
* be activated, and if so, finds that master connection or creates it.
*
+ * If @master_device and @master_connection are both set then @master_connection
+ * MUST already be activated or activating on @master_device, and the function will
+ * return the existing #NMActiveConnection.
+ *
+ * If only @master_device is set, and it has an #NMActiveConnection, then the
+ * function will return it if it is a compatible master, or an error if not. If it
+ * doesn't have an AC, then the function will create one if a compatible master
+ * connection exists, or return an error if not.
+ *
+ * If only @master_connection is set, then this will try to find or create a compatible
+ * #NMDevice, and either activate @master_connection on that device or return an error.
+ *
* Returns: the master #NMActiveConnection that the caller should depend on, or
* %NULL if an error occurred
*/
static NMActiveConnection *
ensure_master_active_connection (NMManager *self,
- const char *dbus_sender,
+ NMAuthSubject *subject,
NMConnection *connection,
NMDevice *device,
NMConnection *master_connection,
@@ -2701,20 +2391,29 @@ ensure_master_active_connection (NMManager *self,
* compatible connection. If it's already activating we can just proceed.
*/
if (master_device) {
+ NMConnection *device_connection = nm_device_get_connection (master_device);
+
/* If we're passed a connection and a device, we require that connection
* be already activated on the device, eg returned from find_master().
*/
- if (master_connection)
- g_assert (nm_device_get_connection (master_device) == master_connection);
+ g_assert (!master_connection || master_connection == device_connection);
+ if (device_connection && !is_compatible_with_slave (device_connection, connection)) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
+ "The active connection on %s is not a valid master for '%s'",
+ nm_device_get_iface (master_device),
+ nm_connection_get_id (connection));
+ return NULL;
+ }
master_state = nm_device_get_state (master_device);
if ( (master_state == NM_DEVICE_STATE_ACTIVATED)
|| nm_device_is_activating (master_device)) {
/* Device already using master_connection */
+ g_assert (device_connection);
return NM_ACTIVE_CONNECTION (nm_device_get_act_request (master_device));
}
- /* If the device is disconnected, find a compabile connection and
+ /* If the device is disconnected, find a compatible connection and
* activate it on the device.
*/
if (master_state == NM_DEVICE_STATE_DISCONNECTED) {
@@ -2723,20 +2422,22 @@ ensure_master_active_connection (NMManager *self,
g_assert (master_connection == NULL);
/* Find a compatible connection and activate this device using it */
- connections = nm_settings_get_connections (priv->settings);
+ connections = nm_manager_get_activatable_connections (self);
for (iter = connections; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = NM_CONNECTION (iter->data);
- /* Ensure eg bond slave and the candidate master is a bond master */
+ /* Ensure eg bond/team slave and the candidate master is a
+ * bond/team master
+ */
if (!is_compatible_with_slave (candidate, connection))
continue;
- if (nm_device_check_connection_compatible (master_device, candidate, NULL)) {
+ if (nm_device_connection_is_available (master_device, candidate, TRUE)) {
master_ac = nm_manager_activate_connection (self,
candidate,
NULL,
- nm_device_get_path (master_device),
- dbus_sender,
+ master_device,
+ subject,
error);
if (!master_ac)
g_prefix_error (error, "%s", "Master device activation failed: ");
@@ -2772,7 +2473,7 @@ ensure_master_active_connection (NMManager *self,
continue;
}
- if (!nm_device_check_connection_compatible (candidate, master_connection, NULL))
+ if (!nm_device_connection_is_available (candidate, master_connection, TRUE))
continue;
found_device = TRUE;
@@ -2783,8 +2484,8 @@ ensure_master_active_connection (NMManager *self,
master_ac = nm_manager_activate_connection (self,
master_connection,
NULL,
- nm_device_get_path (candidate),
- dbus_sender,
+ candidate,
+ subject,
error);
if (!master_ac)
g_prefix_error (error, "%s", "Master device activation failed: ");
@@ -2799,7 +2500,7 @@ ensure_master_active_connection (NMManager *self,
master_connection,
NULL,
NULL,
- dbus_sender,
+ subject,
error);
if (!master_ac)
g_prefix_error (error, "%s", "Master device activation failed: ");
@@ -2817,239 +2518,133 @@ ensure_master_active_connection (NMManager *self,
return NULL;
}
-static NMActiveConnection *
-activate_vpn_connection (NMManager *self,
- NMConnection *connection,
- const char *specific_object,
- gulong sender_uid,
- GError **error)
+static gboolean
+_internal_activate_vpn (NMManager *self, NMActiveConnection *active, GError **error)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- NMActiveConnection *parent = NULL, *ac;
- NMDevice *device = NULL;
- GSList *iter;
-
- if (specific_object) {
- /* Find the specifc connection the client requested we use */
- parent = active_connection_get_by_path (self, specific_object);
- if (!parent) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
- "Base connection for VPN connection not active.");
- return NULL;
- }
- } else {
- for (iter = priv->active_connections; iter; iter = g_slist_next (iter)) {
- NMActiveConnection *candidate = iter->data;
-
- if (nm_active_connection_get_default (candidate)) {
- parent = candidate;
- break;
- }
- }
- }
+ gboolean success;
- if (!parent) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
- "Could not find source connection.");
- return NULL;
- }
+ g_assert (NM_IS_VPN_CONNECTION (active));
- device = nm_active_connection_get_device (parent);
- if (!device) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Source connection had no active device.");
- return NULL;
+ success = nm_vpn_manager_activate_connection (NM_MANAGER_GET_PRIVATE (self)->vpn_manager,
+ NM_VPN_CONNECTION (active),
+ error);
+ if (success) {
+ nm_active_connection_export (active);
+ g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
}
-
- ac = nm_vpn_manager_activate_connection (priv->vpn_manager,
- connection,
- device,
- nm_active_connection_get_path (parent),
- TRUE,
- sender_uid,
- error);
- if (ac)
- active_connection_add (self, ac);
- return ac;
+ return success;
}
-NMActiveConnection *
-nm_manager_activate_connection (NMManager *manager,
- NMConnection *connection,
- const char *specific_object,
- const char *device_path,
- const char *dbus_sender,
- GError **error)
+static gboolean
+_internal_activate_device (NMManager *self, NMActiveConnection *active, GError **error)
{
- NMManagerPrivate *priv;
- NMDevice *device = NULL;
- gulong sender_uid = 0;
- DBusError dbus_error;
- NMDeviceState state;
- char *iface;
- NMDevice *master_device = NULL;
+ NMDevice *device, *master_device = NULL;
+ NMConnection *connection;
NMConnection *master_connection = NULL;
- NMConnection *existing_connection = NULL;
NMActiveConnection *master_ac = NULL;
- gboolean matched;
- char *error_desc = NULL;
- g_return_val_if_fail (manager != NULL, NULL);
- g_return_val_if_fail (connection != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail (*error == NULL, NULL);
+ g_return_val_if_fail (NM_IS_MANAGER (self), FALSE);
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (active), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- priv = NM_MANAGER_GET_PRIVATE (manager);
+ g_assert (NM_IS_VPN_CONNECTION (active) == FALSE);
- /* Get the UID of the user that originated the request, if any */
- if (dbus_sender) {
- dbus_error_init (&dbus_error);
- sender_uid = dbus_bus_get_unix_user (nm_dbus_manager_get_dbus_connection (priv->dbus_mgr),
- dbus_sender,
- &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
- g_set_error_literal (error,
- NM_MANAGER_ERROR, NM_MANAGER_ERROR_PERMISSION_DENIED,
- "Failed to get unix user for dbus sender");
- dbus_error_free (&dbus_error);
- return NULL;
+ connection = nm_active_connection_get_connection (active);
+ g_assert (connection);
+
+ device = nm_active_connection_get_device (active);
+ if (!device) {
+ if (!connection_needs_virtual_device (connection)) {
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
+
+ g_assert (s_con);
+ g_set_error (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Unsupported virtual interface type '%s'",
+ nm_setting_connection_get_connection_type (s_con));
+ return FALSE;
}
- /* Ensure the subject has permissions for this connection */
- if (!nm_auth_uid_in_acl (connection,
- priv->session_monitor,
- sender_uid,
- &error_desc)) {
+ device = system_create_virtual_device (self, connection);
+ if (!device) {
g_set_error_literal (error,
NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- error_desc);
- g_free (error_desc);
- return NULL;
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Failed to create virtual interface");
+ return FALSE;
}
- }
-
- /* VPN ? */
- if (nm_connection_is_type (connection, NM_SETTING_VPN_SETTING_NAME))
- return activate_vpn_connection (manager, connection, specific_object, sender_uid, error);
- /* Device-based connection */
- if (device_path) {
- device = nm_manager_get_device_by_path (manager, device_path);
- if (!device) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Device not found");
- return NULL;
+ if (!nm_active_connection_set_device (active, device)) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "The device could not be activated with this connection");
+ return FALSE;
}
- /* If it's a virtual interface make sure the device given by the
- * path matches the connection's interface details.
+ /* A newly created device, if allowed to be managed by NM, will be
+ * in the UNAVAILABLE state here. To ensure it can be activated
+ * immediately, we transition it to DISCONNECTED.
*/
- if (connection_needs_virtual_device (connection)) {
- iface = get_virtual_iface_name (manager, connection, NULL);
- if (!iface) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Failed to determine connection's virtual interface name");
- return NULL;
- }
-
- matched = g_str_equal (iface, nm_device_get_ip_iface (device));
- g_free (iface);
- if (!matched) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Device given by path did not match connection's virtual interface name");
- return NULL;
- }
+ if ( nm_device_is_available (device)
+ && (nm_device_get_state (device) == NM_DEVICE_STATE_UNAVAILABLE)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_REASON_NONE);
}
} else {
- /* Virtual connections (VLAN, bond, etc) may not specify a device
- * path because the device may not be created yet, or it be given
- * by the connection's properties instead. Find the device the
- * connection refers to, or create it if needed.
- */
- if (!connection_needs_virtual_device (connection)) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "This connection requires an existing device.");
- return NULL;
- }
-
- iface = get_virtual_iface_name (manager, connection, NULL);
- if (!iface) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Failed to determine connection's virtual interface name");
- return NULL;
- }
-
- device = find_device_by_ip_iface (manager, iface);
- g_free (iface);
- if (!device) {
- /* Create it */
- device = system_create_virtual_device (manager, connection);
- if (!device) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Failed to create virtual interface");
- return NULL;
- }
-
- /* A newly created device, if allowed to be managed by NM, will be
- * in the UNAVAILABLE state here. Since we want to use it right
- * away, we transition it immediately to DISCONNECTED.
- */
- if ( nm_device_is_available (device)
- && (nm_device_get_state (device) == NM_DEVICE_STATE_UNAVAILABLE)) {
- nm_device_state_changed (device,
- NM_DEVICE_STATE_DISCONNECTED,
- NM_DEVICE_STATE_REASON_NONE);
- }
- }
- }
+ NMConnection *existing_connection = NULL;
+ NMAuthSubject *subject;
+ char *error_desc = NULL;
- state = nm_device_get_state (device);
- if (state < NM_DEVICE_STATE_DISCONNECTED) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNMANAGED_DEVICE,
- "Device not managed by NetworkManager or unavailable");
- return NULL;
- }
-
- /* If this is an autoconnect request, but the device isn't allowing autoconnect
- * right now, we reject it.
- */
- if (!dbus_sender && !nm_device_autoconnect_allowed (device)) {
- g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED,
- "%s does not allow automatic connections at this time",
- nm_device_get_iface (device));
- return NULL;
- }
-
- if (dbus_sender) {
/* If the device is active and its connection is not visible to the
* user that's requesting this new activation, fail, since other users
* should not be allowed to implicitly deactivate private connections
* by activating a connection of their own.
*/
existing_connection = nm_device_get_connection (device);
+ subject = nm_active_connection_get_subject (active);
if (existing_connection &&
!nm_auth_uid_in_acl (existing_connection,
- priv->session_monitor,
- sender_uid,
- &error_desc)) {
+ nm_session_monitor_get (),
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
g_set_error (error,
- NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "Private connection already active on the device: %s",
- error_desc);
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Private connection already active on the device: %s",
+ error_desc);
g_free (error_desc);
return FALSE;
}
}
- /* Try to find the master connection/device if the connection has a dependency */
- if (!find_master (manager, connection, device, &master_connection, &master_device)) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Master connection not found or invalid");
- return NULL;
+ /* Final connection must be available on device */
+ if (!nm_device_connection_is_available (device, connection, TRUE)) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
+ "Connection '%s' is not available on the device %s at this time.",
+ nm_connection_get_id (connection), nm_device_get_iface (device));
+ return FALSE;
+ }
+
+ /* If this is an autoconnect request, but the device isn't allowing autoconnect
+ * right now, we reject it.
+ */
+ if (!nm_active_connection_get_user_requested (active) &&
+ !nm_device_autoconnect_allowed (device)) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED,
+ "%s does not allow automatic connections at this time",
+ nm_device_get_iface (device));
+ return FALSE;
}
+ /* Try to find the master connection/device if the connection has a dependency */
+ if (!find_master (self, connection, device,
+ &master_connection, &master_device, &master_ac,
+ error))
+ return FALSE;
+
/* Ensure there's a master active connection the new connection we're
* activating can depend on.
*/
@@ -3068,94 +2663,395 @@ nm_manager_activate_connection (NMManager *manager,
/* Ensure eg bond slave and the candidate master is a bond master */
if (master_connection && !is_compatible_with_slave (master_connection, connection)) {
g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
- "The master connection was not compatible");
- return NULL;
+ "The master connection was not compatible");
+ return FALSE;
}
- master_ac = ensure_master_active_connection (manager,
- dbus_sender,
- connection,
- device,
- master_connection,
- master_device,
- error);
if (!master_ac) {
- if (error)
- g_assert (*error);
- return NULL;
+ master_ac = ensure_master_active_connection (self,
+ nm_active_connection_get_subject (active),
+ connection,
+ device,
+ master_connection,
+ master_device,
+ error);
+ if (!master_ac) {
+ if (error)
+ g_assert (*error);
+ return FALSE;
+ }
}
+ nm_active_connection_set_master (active, master_ac);
nm_log_dbg (LOGD_CORE, "Activation of '%s' depends on active connection %s",
nm_connection_get_id (connection),
nm_active_connection_get_path (master_ac));
}
- return internal_activate_device (manager,
- device,
+ /* Export the new ActiveConnection to clients and start it on the device */
+ nm_active_connection_export (active);
+ g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
+ nm_device_queue_activation (device, NM_ACT_REQUEST (active));
+ return TRUE;
+}
+
+static gboolean
+_internal_activate_generic (NMManager *self, NMActiveConnection *active, GError **error)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ gboolean success = FALSE;
+
+ /* Ensure activation request is still valid, eg that its device hasn't gone
+ * away or that some other dependency has not failed.
+ */
+ if (nm_active_connection_get_state (active) >= NM_ACTIVE_CONNECTION_STATE_DEACTIVATING) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_DEPENDENCY_FAILED,
+ "Activation failed because dependencies failed.");
+ return FALSE;
+ }
+
+ if (NM_IS_VPN_CONNECTION (active))
+ success = _internal_activate_vpn (self, active, error);
+ else
+ success = _internal_activate_device (self, active, error);
+
+ if (success) {
+ /* Force an update of the Manager's activating-connection property.
+ * The device changes state before the AC gets exported, which causes
+ * the manager's 'activating-connection' property to be NULL since the
+ * AC only gets a D-Bus path when it's exported. So now that the AC
+ * is exported, make sure the manager's activating-connection property
+ * is up-to-date.
+ */
+ policy_activating_device_changed (G_OBJECT (priv->policy), NULL, self);
+ }
+
+ return success;
+}
+
+static NMActiveConnection *
+_new_vpn_active_connection (NMManager *self,
+ NMConnection *connection,
+ const char *specific_object,
+ NMAuthSubject *subject,
+ GError **error)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMActiveConnection *parent = NULL;
+ NMDevice *device = NULL;
+
+ if (specific_object) {
+ /* Find the specific connection the client requested we use */
+ parent = active_connection_get_by_path (self, specific_object);
+ if (!parent) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
+ "Base connection for VPN connection not active.");
+ return NULL;
+ }
+ } else
+ parent = priv->primary_connection;
+
+ if (!parent) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
+ "Could not find source connection.");
+ return NULL;
+ }
+
+ device = nm_active_connection_get_device (parent);
+ if (!device) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Source connection had no active device.");
+ return NULL;
+ }
+
+ return (NMActiveConnection *) nm_vpn_connection_new (connection,
+ device,
+ nm_active_connection_get_path (parent),
+ subject);
+}
+
+static NMActiveConnection *
+_new_active_connection (NMManager *self,
+ NMConnection *connection,
+ const char *specific_object,
+ NMDevice *device,
+ NMAuthSubject *subject,
+ GError **error)
+{
+ NMActiveConnection *existing_ac;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+ g_return_val_if_fail (NM_IS_AUTH_SUBJECT (subject), NULL);
+
+ /* Can't create new AC for already-active connection */
+ existing_ac = find_ac_for_connection (self, connection);
+ if (NM_IS_VPN_CONNECTION (existing_ac)) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE,
+ "Connection '%s' is already active",
+ nm_connection_get_id (connection));
+ return NULL;
+ }
+
+ if (existing_ac) {
+ NMDevice *existing_device = nm_active_connection_get_device (existing_ac);
+
+ if (existing_device != device) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE,
+ "Connection '%s' is already active on %s",
+ nm_connection_get_id (connection),
+ nm_device_get_iface (existing_device));
+ return NULL;
+ }
+ }
+
+ /* Normalize the specific object */
+ if (specific_object && g_strcmp0 (specific_object, "/") == 0)
+ specific_object = NULL;
+
+ if (nm_connection_is_type (connection, NM_SETTING_VPN_SETTING_NAME)) {
+ return _new_vpn_active_connection (self,
+ connection,
+ specific_object,
+ subject,
+ error);
+ }
+
+ return (NMActiveConnection *) nm_act_request_new (connection,
+ specific_object,
+ subject,
+ device);
+}
+
+static void
+_internal_activation_failed (NMManager *self,
+ NMActiveConnection *active,
+ const char *error_desc)
+{
+ nm_log_warn (LOGD_CORE, "Failed to activate '%s': %s",
+ nm_connection_get_id (nm_active_connection_get_connection (active)),
+ error_desc);
+
+ if (nm_active_connection_get_state (active) <= NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ nm_active_connection_set_state (active, NM_ACTIVE_CONNECTION_STATE_DEACTIVATING);
+ nm_active_connection_set_state (active, NM_ACTIVE_CONNECTION_STATE_DEACTIVATED);
+ }
+ active_connection_remove (self, active);
+}
+
+static void
+_internal_activation_auth_done (NMActiveConnection *active,
+ gboolean success,
+ const char *error_desc,
+ gpointer user_data1,
+ gpointer user_data2)
+{
+ NMManager *self = user_data1;
+ GError *error = NULL;
+
+ if (success) {
+ if (_internal_activate_generic (self, active, &error)) {
+ g_object_unref (active);
+ return;
+ }
+ }
+
+ g_assert (error_desc || error);
+ _internal_activation_failed (self, active, error_desc ? error_desc : error->message);
+ g_object_unref (active);
+ g_clear_error (&error);
+}
+
+/**
+ * nm_manager_activate_connection():
+ * @self: the #NMManager
+ * @connection: the #NMConnection to activate on @device
+ * @specific_object: the specific object path, if any, for the activation
+ * @device: the #NMDevice to activate @connection on
+ * @subject: the subject which requested activation
+ * @error: return location for an error
+ *
+ * Begins a new internally-initiated activation of @connection on @device.
+ * @subject should be the subject of the activation that triggered this
+ * one, or if this is an autoconnect request, a new internal subject.
+ * The returned #NMActiveConnection is owned by the Manager and should be
+ * referenced by the caller if the caller continues to use it.
+ *
+ * Returns: (transfer none): the new #NMActiveConnection that tracks
+ * activation of @connection on @device
+ */
+NMActiveConnection *
+nm_manager_activate_connection (NMManager *self,
+ NMConnection *connection,
+ const char *specific_object,
+ NMDevice *device,
+ NMAuthSubject *subject,
+ GError **error)
+{
+ NMActiveConnection *active;
+ char *error_desc = NULL;
+
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (connection != NULL, NULL);
+ g_return_val_if_fail (error != NULL, NULL);
+ g_return_val_if_fail (*error == NULL, NULL);
+
+ /* Ensure the subject has permissions for this connection */
+ if (!nm_auth_uid_in_acl (connection,
+ nm_session_monitor_get (),
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ g_free (error_desc);
+ return NULL;
+ }
+
+ active = _new_active_connection (self,
connection,
specific_object,
- dbus_sender ? TRUE : FALSE,
- dbus_sender ? sender_uid : 0,
- dbus_sender,
- FALSE,
- master_ac,
+ device,
+ subject,
error);
+ if (active) {
+ nm_active_connection_authorize (active, _internal_activation_auth_done, self, NULL);
+ active_connection_add (self, active);
+ }
+ return active;
}
-/*
- * TODO this function was created and named in the era of user settings, where
- * we could get activation requests for a connection before we got the settings
- * data of that connection. Now that user settings are gone, flatten or rename
- * it.
- */
-static void
-pending_activate (NMManager *self, PendingActivation *pending)
+static NMAuthSubject *
+validate_activation_request (NMManager *self,
+ DBusGMethodInvocation *context,
+ NMConnection *connection,
+ const char *device_path,
+ NMDevice **out_device,
+ gboolean *out_vpn,
+ GError **error)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- NMSettingsConnection *connection;
- NMActiveConnection *ac = NULL;
- GError *error = NULL;
- char *sender;
+ NMDevice *device = NULL;
+ gboolean vpn = FALSE;
+ NMAuthSubject *subject = NULL;
+ char *error_desc = NULL;
- /* Ok, we're authorized */
+ g_assert (connection);
+ g_assert (out_device);
+ g_assert (out_vpn);
- connection = nm_settings_get_connection_by_path (priv->settings, pending->connection_path);
- if (!connection) {
- error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
- "Connection could not be found.");
- goto out;
+ /* Validate the caller */
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Failed to get request UID.");
+ return NULL;
}
- sender = dbus_g_method_get_sender (pending->context);
- g_assert (sender);
- ac = nm_manager_activate_connection (self,
- NM_CONNECTION (connection),
- pending->specific_object_path,
- pending->device_path,
- sender,
- &error);
- g_free (sender);
+ /* Ensure the subject has permissions for this connection */
+ if (!nm_auth_uid_in_acl (connection,
+ nm_session_monitor_get (),
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ g_free (error_desc);
+ goto error;
+ }
- if (!ac) {
- nm_log_warn (LOGD_CORE, "connection %s failed to activate: (%d) %s",
- pending->connection_path,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
+ /* Check whether it's a VPN or not */
+ if ( nm_connection_get_setting_vpn (connection)
+ || nm_connection_is_type (connection, NM_SETTING_VPN_SETTING_NAME))
+ vpn = TRUE;
+
+ /* Normalize device path */
+ if (device_path && g_strcmp0 (device_path, "/") == 0)
+ device_path = NULL;
+
+ /* And validate it */
+ if (device_path) {
+ device = nm_manager_get_device_by_path (self, device_path);
+ if (!device) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Device not found");
+ goto error;
+ }
+ } else {
+ gboolean is_software = connection_needs_virtual_device (connection);
+
+ /* VPN and software-device connections don't need a device yet */
+ if (!vpn && !is_software) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "This connection requires an existing device.");
+ goto error;
+ }
+
+ if (is_software) {
+ /* Look for an existing device with the connection's interface name */
+ char *iface;
+
+ iface = get_virtual_iface_name (self, connection, NULL);
+ if (!iface) {
+ g_set_error_literal (error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Failed to determine connection's virtual interface name");
+ goto error;
+ }
+
+ device = find_device_by_ip_iface (self, iface);
+ g_free (iface);
+ }
}
-out:
- pending_activation_destroy (pending, error, ac);
- g_clear_error (&error);
+ *out_device = device;
+ *out_vpn = vpn;
+ return subject;
+
+error:
+ g_object_unref (subject);
+ return NULL;
}
+/***********************************************************************/
+
static void
-activation_auth_done (PendingActivation *pending, GError *error)
-{
- if (error)
- pending_activation_destroy (pending, error, NULL);
- else
- pending_activate (pending->manager, pending);
+_activation_auth_done (NMActiveConnection *active,
+ gboolean success,
+ const char *error_desc,
+ gpointer user_data1,
+ gpointer user_data2)
+{
+ NMManager *self = user_data1;
+ DBusGMethodInvocation *context = user_data2;
+ GError *error = NULL;
+
+ if (success) {
+ if (_internal_activate_generic (self, active, &error)) {
+ dbus_g_method_return (context, nm_active_connection_get_path (active));
+ g_object_unref (active);
+ return;
+ }
+ } else {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ }
+
+ g_assert (error);
+ dbus_g_method_return_error (context, error);
+ _internal_activation_failed (self, active, error->message);
+ g_object_unref (active);
+ g_error_free (error);
}
static void
@@ -3166,64 +3062,185 @@ impl_manager_activate_connection (NMManager *self,
DBusGMethodInvocation *context)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- PendingActivation *pending;
+ NMActiveConnection *active = NULL;
+ NMAuthSubject *subject = NULL;
+ NMConnection *connection;
+ NMDevice *device = NULL;
+ gboolean is_vpn = FALSE;
GError *error = NULL;
- /* Need to check the caller's permissions and stuff before we can
- * activate the connection.
+ /* Normalize object paths */
+ if (g_strcmp0 (connection_path, "/") == 0)
+ connection_path = NULL;
+ if (g_strcmp0 (specific_object_path, "/") == 0)
+ specific_object_path = NULL;
+ if (g_strcmp0 (device_path, "/") == 0)
+ device_path = NULL;
+
+ /* If the connection path is given and valid, that connection is activated.
+ * Otherwise the "best" connection for the device is chosen and activated,
+ * regardless of whether that connection is autoconnect-enabled or not
+ * (since this is an explicit request, not an auto-activation request).
*/
- pending = pending_activation_new (self,
- context,
- device_path,
- connection_path,
- NULL,
- specific_object_path,
- activation_auth_done,
- &error);
- if (pending)
- pending_activation_check_authorized (pending, priv->dbus_mgr);
- else {
- g_assert (error);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
+ if (!connection_path) {
+ GPtrArray *available;
+ guint64 best_timestamp = 0;
+ guint i;
+
+ /* If no connection is given, find a suitable connection for the given device path */
+ if (!device_path) {
+ error = g_error_new_literal (NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Only devices may be activated without a specifying a connection");
+ goto error;
+ }
+ device = nm_manager_get_device_by_path (self, device_path);
+ if (!device) {
+ error = g_error_new (NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Cannot activate unknown device %s", device_path);
+ goto error;
+ }
+
+ available = nm_device_get_available_connections (device, specific_object_path);
+ for (i = 0; available && i < available->len; i++) {
+ NMSettingsConnection *candidate = g_ptr_array_index (available, i);
+ guint64 candidate_timestamp = 0;
+
+ nm_settings_connection_get_timestamp (candidate, &candidate_timestamp);
+ if (!connection_path || (candidate_timestamp > best_timestamp)) {
+ connection_path = nm_connection_get_path (NM_CONNECTION (candidate));
+ best_timestamp = candidate_timestamp;
+ }
+ }
+
+ if (available)
+ g_ptr_array_free (available, TRUE);
+
+ if (!connection_path) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
+ "The device has no connections available.");
+ goto error;
+ }
+ }
+
+ g_assert (connection_path);
+ connection = (NMConnection *) nm_settings_get_connection_by_path (priv->settings, connection_path);
+ if (!connection) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
+ "Connection could not be found.");
+ goto error;
}
+
+ subject = validate_activation_request (self,
+ context,
+ connection,
+ device_path,
+ &device,
+ &is_vpn,
+ &error);
+ if (!subject)
+ goto error;
+
+ active = _new_active_connection (self,
+ connection,
+ specific_object_path,
+ device,
+ subject,
+ &error);
+ if (!active)
+ goto error;
+
+ nm_active_connection_authorize (active, _activation_auth_done, self, context);
+ active_connection_add (self, active);
+ g_clear_object (&subject);
+ return;
+
+error:
+ g_clear_object (&active);
+ g_clear_object (&subject);
+
+ g_assert (error);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
}
+/***********************************************************************/
+
+typedef struct {
+ NMManager *manager;
+ NMActiveConnection *active;
+} AddAndActivateInfo;
+
static void
activation_add_done (NMSettings *self,
- NMSettingsConnection *connection,
+ NMSettingsConnection *new_connection,
GError *error,
DBusGMethodInvocation *context,
gpointer user_data)
{
- PendingActivation *pending = user_data;
+ AddAndActivateInfo *info = user_data;
+ GError *local = NULL;
- if (error)
- pending_activation_destroy (pending, error, NULL);
- else {
- /* Save the new connection's D-Bus path */
- pending->connection_path = g_strdup (nm_connection_get_path (NM_CONNECTION (connection)));
+ if (!error) {
+ nm_active_connection_set_connection (info->active, NM_CONNECTION (new_connection));
- /* And activate it */
- pending_activate (pending->manager, pending);
+ if (_internal_activate_generic (info->manager, info->active, &local)) {
+ dbus_g_method_return (context,
+ nm_connection_get_path (NM_CONNECTION (new_connection)),
+ nm_active_connection_get_path (info->active));
+ goto done;
+ }
+ error = local;
}
+
+ g_assert (error);
+ _internal_activation_failed (info->manager, info->active, error->message);
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&local);
+
+done:
+ g_object_unref (info->active);
+ g_free (info);
}
static void
-add_and_activate_auth_done (PendingActivation *pending, GError *error)
+_add_and_activate_auth_done (NMActiveConnection *active,
+ gboolean success,
+ const char *error_desc,
+ gpointer user_data1,
+ gpointer user_data2)
{
- if (error)
- pending_activation_destroy (pending, error, NULL);
- else {
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (pending->manager);
+ NMManager *self = user_data1;
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ DBusGMethodInvocation *context = user_data2;
+ AddAndActivateInfo *info;
+ GError *error = NULL;
+
+ if (success) {
+ info = g_malloc0 (sizeof (*info));
+ info->manager = self;
+ info->active = g_object_ref (active);
/* Basic sender auth checks performed; try to add the connection */
- nm_settings_add_connection (priv->settings,
- pending->connection,
- pending->context,
- activation_add_done,
- pending);
+ nm_settings_add_connection_dbus (priv->settings,
+ nm_active_connection_get_connection (active),
+ TRUE,
+ context,
+ activation_add_done,
+ info);
+ } else {
+ active_connection_remove (self, active);
+
+ g_assert (error_desc);
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
}
+
+ g_object_unref (active);
}
static void
@@ -3234,29 +3251,105 @@ impl_manager_add_and_activate_connection (NMManager *self,
DBusGMethodInvocation *context)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- PendingActivation *pending;
+ NMConnection *connection = NULL;
+ GSList *all_connections = NULL;
+ NMActiveConnection *active = NULL;
+ NMAuthSubject *subject = NULL;
GError *error = NULL;
+ NMDevice *device = NULL;
+ gboolean vpn = FALSE;
- /* Need to check the caller's permissions and stuff before we can
- * activate the connection.
+ /* Normalize object paths */
+ if (g_strcmp0 (specific_object_path, "/") == 0)
+ specific_object_path = NULL;
+ if (g_strcmp0 (device_path, "/") == 0)
+ device_path = NULL;
+
+ /* Try to create a new connection with the given settings.
+ * We allow empty settings for AddAndActivateConnection(). In that case,
+ * the connection will be completed in nm_utils_complete_generic() or
+ * nm_device_complete_connection() below. Just make sure we don't expect
+ * specific data being in the connection till then (especially in
+ * validate_activation_request()).
*/
- pending = pending_activation_new (self,
- context,
- device_path,
- NULL,
- settings,
- specific_object_path,
- add_and_activate_auth_done,
- &error);
- if (pending)
- pending_activation_check_authorized (pending, priv->dbus_mgr);
- else {
- g_assert (error);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- }
+ connection = nm_connection_new ();
+ if (settings && g_hash_table_size (settings))
+ nm_connection_replace_settings (connection, settings, NULL);
+
+ subject = validate_activation_request (self,
+ context,
+ connection,
+ device_path,
+ &device,
+ &vpn,
+ &error);
+ if (!subject)
+ goto error;
+
+ /* AddAndActivate() requires a device to complete the connection with */
+ if (!device) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "This connection requires an existing device.");
+ goto error;
+ }
+
+ all_connections = nm_settings_get_connections (priv->settings);
+ if (vpn) {
+ /* Try to fill the VPN's connection setting and name at least */
+ if (!nm_connection_get_setting_vpn (connection)) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE,
+ "VPN connections require a 'vpn' setting");
+ goto error;
+ }
+
+ nm_utils_complete_generic (connection,
+ NM_SETTING_VPN_SETTING_NAME,
+ all_connections,
+ _("VPN connection %d"),
+ NULL,
+ FALSE); /* No IPv6 by default for now */
+ } else {
+ /* Let each device subclass complete the connection */
+ if (!nm_device_complete_connection (device,
+ connection,
+ specific_object_path,
+ all_connections,
+ &error))
+ goto error;
+ }
+ g_slist_free (all_connections);
+ all_connections = NULL;
+
+ active = _new_active_connection (self,
+ connection,
+ specific_object_path,
+ device,
+ subject,
+ &error);
+ if (!active)
+ goto error;
+
+ nm_active_connection_authorize (active, _add_and_activate_auth_done, self, context);
+ active_connection_add (self, active);
+ g_object_unref (connection);
+ g_object_unref (subject);
+ return;
+
+error:
+ g_clear_object (&connection);
+ g_slist_free (all_connections);
+ g_clear_object (&subject);
+ g_clear_object (&active);
+
+ g_assert (error);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
}
+/***********************************************************************/
+
gboolean
nm_manager_deactivate_connection (NMManager *manager,
const char *connection_path,
@@ -3286,9 +3379,8 @@ nm_manager_deactivate_connection (NMManager *manager,
"The VPN connection was not active.");
} else {
g_assert (NM_IS_ACT_REQUEST (active));
- /* FIXME: use DEACTIVATING state */
nm_device_state_changed (nm_active_connection_get_device (active),
- NM_DEVICE_STATE_DISCONNECTED,
+ NM_DEVICE_STATE_DEACTIVATING,
reason);
success = TRUE;
}
@@ -3309,11 +3401,13 @@ deactivate_net_auth_done_cb (NMAuthChain *chain,
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
NMAuthCallResult result;
- const char *active_path;
+
+ g_assert (context);
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
- result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
+ result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL);
+
if (auth_error) {
nm_log_dbg (LOGD_CORE, "Disconnect request failed: %s", auth_error->message);
error = g_error_new (NM_MANAGER_ERROR,
@@ -3326,9 +3420,8 @@ deactivate_net_auth_done_cb (NMAuthChain *chain,
"Not authorized to deactivate connections");
} else {
/* success; deactivation allowed */
- active_path = nm_auth_chain_get_data (chain, "path");
if (!nm_manager_deactivate_connection (self,
- active_path,
+ nm_auth_chain_get_data (chain, "path"),
NM_DEVICE_STATE_REASON_USER_REQUESTED,
&error))
g_assert (error);
@@ -3351,9 +3444,9 @@ impl_manager_deactivate_connection (NMManager *self,
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMConnection *connection = NULL;
GError *error = NULL;
+ NMAuthSubject *subject = NULL;
GSList *iter;
NMAuthChain *chain;
- gulong sender_uid = G_MAXULONG;
char *error_desc = NULL;
/* Find the connection by its object path */
@@ -3370,85 +3463,100 @@ impl_manager_deactivate_connection (NMManager *self,
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
"The connection was not active.");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
+ goto done;
}
- /* Need to check the caller's permissions and stuff before we can
- * deactivate the connection.
- */
- if (!nm_auth_get_caller_uid (context,
- priv->dbus_mgr,
- &sender_uid,
- &error_desc)) {
+ /* Validate the caller */
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
- error_desc);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- g_free (error_desc);
- return;
+ "Failed to get request UID.");
+ goto done;
}
/* Ensure the subject has permissions for this connection */
if (!nm_auth_uid_in_acl (connection,
- priv->session_monitor,
- sender_uid,
+ nm_session_monitor_get (),
+ nm_auth_subject_get_uid (subject),
&error_desc)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
g_free (error_desc);
- return;
+ goto done;
}
- /* Yay for root */
- if (0 == sender_uid) {
- if (!nm_manager_deactivate_connection (self,
- active_path,
- NM_DEVICE_STATE_REASON_USER_REQUESTED,
- &error)) {
- dbus_g_method_return_error (context, error);
- g_clear_error (&error);
- } else
- dbus_g_method_return (context);
-
- return;
+ /* Validate the user request */
+ chain = nm_auth_chain_new_subject (subject, context, deactivate_net_auth_done_cb, self);
+ if (!chain) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Unable to authenticate request.");
+ goto done;
}
- /* Otherwise validate the user request */
- chain = nm_auth_chain_new (context, NULL, deactivate_net_auth_done_cb, self);
- g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
-
nm_auth_chain_set_data (chain, "path", g_strdup (active_path), g_free);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
+
+done:
+ g_clear_object (&subject);
+ if (error)
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&error);
+}
+
+static gboolean
+device_is_wake_on_lan (NMDevice *device)
+{
+ return nm_platform_link_get_wake_on_lan (nm_device_get_ip_ifindex (device));
}
static void
-do_sleep_wake (NMManager *self)
+do_sleep_wake (NMManager *self, gboolean sleeping_changed)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- const GSList *unmanaged_specs;
+ gboolean suspending, waking_from_suspend;
GSList *iter;
+ suspending = sleeping_changed && priv->sleeping;
+ waking_from_suspend = sleeping_changed && !priv->sleeping;
+
if (manager_sleeping (self)) {
- nm_log_info (LOGD_SUSPEND, "sleeping or disabling...");
+ nm_log_info (LOGD_SUSPEND, suspending ? "sleeping..." : "disabling...");
- /* Just deactivate and down all devices from the device list,
- * to keep things fast the device list will get resynced when
- * the manager wakes up.
+ /* FIXME: are there still hardware devices that need to be disabled around
+ * suspend/resume?
*/
- for (iter = priv->devices; iter; iter = iter->next)
- nm_device_set_managed (NM_DEVICE (iter->data), FALSE, NM_DEVICE_STATE_REASON_SLEEPING);
+ for (iter = priv->devices; iter; iter = iter->next) {
+ NMDevice *device = iter->data;
+ /* FIXME: shouldn't we be unmanaging software devices if !suspending? */
+ if (nm_device_is_software (device))
+ continue;
+ /* Wake-on-LAN devices will be taken down post-suspend rather than pre- */
+ if (suspending && device_is_wake_on_lan (device))
+ continue;
+
+ nm_device_set_unmanaged (device, NM_UNMANAGED_INTERNAL, TRUE, NM_DEVICE_STATE_REASON_SLEEPING);
+ }
} else {
- nm_log_info (LOGD_SUSPEND, "waking up and re-enabling...");
+ nm_log_info (LOGD_SUSPEND, waking_from_suspend ? "waking up..." : "re-enabling...");
+
+ if (waking_from_suspend) {
+ /* Belatedly take down Wake-on-LAN devices; ideally we wouldn't have to do this
+ * but for now it's the only way to make sure we re-check their connectivity.
+ */
+ for (iter = priv->devices; iter; iter = iter->next) {
+ NMDevice *device = iter->data;
- unmanaged_specs = nm_settings_get_unmanaged_specs (priv->settings);
+ if (nm_device_is_software (device))
+ continue;
+ if (device_is_wake_on_lan (device))
+ nm_device_set_unmanaged (device, NM_UNMANAGED_INTERNAL, TRUE, NM_DEVICE_STATE_REASON_SLEEPING);
+ }
+ }
/* Ensure rfkill state is up-to-date since we don't respond to state
* changes during sleep.
@@ -3460,6 +3568,9 @@ do_sleep_wake (NMManager *self)
NMDevice *device = NM_DEVICE (iter->data);
guint i;
+ if (nm_device_is_software (device))
+ continue;
+
/* enable/disable wireless devices since that we don't respond
* to killswitch changes during sleep.
*/
@@ -3479,10 +3590,7 @@ do_sleep_wake (NMManager *self)
g_object_set (G_OBJECT (device), NM_DEVICE_AUTOCONNECT, TRUE, NULL);
- if (nm_device_spec_match_list (device, unmanaged_specs))
- nm_device_set_managed (device, FALSE, NM_DEVICE_STATE_REASON_NOW_UNMANAGED);
- else
- nm_device_set_managed (device, TRUE, NM_DEVICE_STATE_REASON_NOW_MANAGED);
+ nm_device_set_unmanaged (device, NM_UNMANAGED_INTERNAL, FALSE, NM_DEVICE_STATE_REASON_NOW_MANAGED);
}
}
@@ -3504,7 +3612,7 @@ _internal_sleep (NMManager *self, gboolean do_sleep)
priv->sleeping = do_sleep;
- do_sleep_wake (self);
+ do_sleep_wake (self, TRUE);
g_object_notify (G_OBJECT (self), NM_MANAGER_SLEEPING);
}
@@ -3524,7 +3632,7 @@ sleep_auth_done_cb (NMAuthChain *chain,
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
- result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_SLEEP_WAKE));
+ result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_SLEEP_WAKE);
if (error) {
nm_log_dbg (LOGD_SUSPEND, "Sleep/wake request failed: %s", error->message);
ret_error = g_error_new (NM_MANAGER_ERROR,
@@ -3559,7 +3667,6 @@ impl_manager_sleep (NMManager *self,
GError *error = NULL;
#if 0
NMAuthChain *chain;
- gulong sender_uid = G_MAXULONG;
const char *error_desc = NULL;
#endif
@@ -3589,28 +3696,18 @@ impl_manager_sleep (NMManager *self,
return;
#if 0
- if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &sender_uid, &error_desc)) {
+ chain = nm_auth_chain_new (context, sleep_auth_done_cb, self, &error_desc);
+ if (chain) {
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+ nm_auth_chain_set_data (chain, "sleep", GUINT_TO_POINTER (do_sleep), NULL);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, TRUE);
+ } else {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
dbus_g_method_return_error (context, error);
g_error_free (error);
- return;
}
-
- /* Root doesn't need PK authentication */
- if (0 == sender_uid) {
- _internal_sleep (self, do_sleep);
- dbus_g_method_return (context);
- return;
- }
-
- chain = nm_auth_chain_new (context, NULL, sleep_auth_done_cb, self);
- g_assert (chain);
- priv->auth_chains = g_slist_append (priv->auth_chains, chain);
-
- nm_auth_chain_set_data (chain, "sleep", GUINT_TO_POINTER (do_sleep), NULL);
- nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, TRUE);
#endif
}
@@ -3655,7 +3752,7 @@ _internal_enable (NMManager *self, gboolean enable)
priv->net_enabled = enable;
- do_sleep_wake (self);
+ do_sleep_wake (self, FALSE);
g_object_notify (G_OBJECT (self), NM_MANAGER_NETWORKING_ENABLED);
}
@@ -3668,27 +3765,25 @@ enable_net_done_cb (NMAuthChain *chain,
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- GError *ret_error;
+ GError *ret_error = NULL;
NMAuthCallResult result;
gboolean enable;
+ g_assert (context);
+
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
- result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK));
+ result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK);
if (error) {
nm_log_dbg (LOGD_CORE, "Enable request failed: %s", error->message);
ret_error = g_error_new (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
"Enable request failed: %s",
error->message);
- dbus_g_method_return_error (context, ret_error);
- g_error_free (ret_error);
} else if (result != NM_AUTH_CALL_RESULT_YES) {
ret_error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
"Not authorized to enable/disable networking");
- dbus_g_method_return_error (context, ret_error);
- g_error_free (ret_error);
} else {
/* Auth success */
enable = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "enable"));
@@ -3696,6 +3791,11 @@ enable_net_done_cb (NMAuthChain *chain,
dbus_g_method_return (context);
}
+ if (ret_error) {
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ }
+
nm_auth_chain_unref (chain);
}
@@ -3707,8 +3807,6 @@ impl_manager_enable (NMManager *self,
NMManagerPrivate *priv;
NMAuthChain *chain;
GError *error = NULL;
- gulong sender_uid = G_MAXULONG;
- char *error_desc = NULL;
g_return_if_fail (NM_IS_MANAGER (self));
@@ -3718,34 +3816,25 @@ impl_manager_enable (NMManager *self,
error = g_error_new (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED,
"Already %s", enable ? "enabled" : "disabled");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
+ goto done;
}
- if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &sender_uid, &error_desc)) {
+ chain = nm_auth_chain_new_context (context, enable_net_done_cb, self);
+ if (!chain) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
- error_desc);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- g_free (error_desc);
- return;
- }
-
- /* Root doesn't need PK authentication */
- if (0 == sender_uid) {
- _internal_enable (self, enable);
- dbus_g_method_return (context);
- return;
+ "Unable to authenticate request.");
+ goto done;
}
- chain = nm_auth_chain_new (context, NULL, enable_net_done_cb, self);
- g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
-
nm_auth_chain_set_data (chain, "enable", GUINT_TO_POINTER (enable), NULL);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, TRUE);
+
+done:
+ if (error)
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&error);
}
/* Permissions */
@@ -3755,7 +3844,7 @@ get_perm_add_result (NMAuthChain *chain, GHashTable *results, const char *permis
{
NMAuthCallResult result;
- result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, permission));
+ result = nm_auth_chain_get_result (chain, permission);
if (result == NM_AUTH_CALL_RESULT_YES)
g_hash_table_insert (results, (char *) permission, "yes");
else if (result == NM_AUTH_CALL_RESULT_NO)
@@ -3778,6 +3867,8 @@ get_permissions_done_cb (NMAuthChain *chain,
GError *ret_error;
GHashTable *results;
+ g_assert (context);
+
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
if (error) {
nm_log_dbg (LOGD_CORE, "Permissions request failed: %s", error->message);
@@ -3789,6 +3880,7 @@ get_permissions_done_cb (NMAuthChain *chain,
g_error_free (ret_error);
} else {
results = g_hash_table_new (g_str_hash, g_str_equal);
+
get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK);
get_perm_add_result (chain, results, NM_AUTH_PERMISSION_SLEEP_WAKE);
get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI);
@@ -3800,6 +3892,7 @@ get_permissions_done_cb (NMAuthChain *chain,
get_perm_add_result (chain, results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM);
get_perm_add_result (chain, results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN);
get_perm_add_result (chain, results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME);
+
dbus_g_method_return (context, results);
g_hash_table_destroy (results);
}
@@ -3813,11 +3906,19 @@ impl_manager_get_permissions (NMManager *self,
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMAuthChain *chain;
+ GError *error = NULL;
- chain = nm_auth_chain_new (context, NULL, get_permissions_done_cb, self);
- g_assert (chain);
- priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+ chain = nm_auth_chain_new_context (context, get_permissions_done_cb, self);
+ if (!chain) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Unable to authenticate request.");
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&error);
+ return;
+ }
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, FALSE);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, FALSE);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI, FALSE);
@@ -3839,22 +3940,46 @@ impl_manager_get_state (NMManager *manager, guint32 *state, GError **error)
return TRUE;
}
-static gboolean
+static void
impl_manager_set_logging (NMManager *manager,
const char *level,
const char *domains,
- GError **error)
+ DBusGMethodInvocation *context)
{
- if (nm_logging_setup (level, domains, error)) {
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ GError *error = NULL;
+ gulong caller_uid = G_MAXULONG;
+
+ if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr, context, NULL, &caller_uid, NULL)) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Failed to get request UID.");
+ goto done;
+ }
+
+ if (0 != caller_uid) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Permission denied");
+ goto done;
+ }
+
+ if (nm_logging_setup (level, domains, NULL, &error)) {
+ char *new_level = nm_logging_level_to_string ();
char *new_domains = nm_logging_domains_to_string ();
nm_log_info (LOGD_CORE, "logging: level '%s' domains '%s'",
- nm_logging_level_to_string (),
- new_domains);
+ new_level, new_domains);
+ g_free (new_level);
g_free (new_domains);
- return TRUE;
}
- return FALSE;
+
+done:
+ if (error) {
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ } else
+ dbus_g_method_return (context);
}
static void
@@ -3862,8 +3987,8 @@ impl_manager_get_logging (NMManager *manager,
char **level,
char **domains)
{
- *level = g_strdup (nm_logging_level_to_string ());
- *domains = g_strdup (nm_logging_domains_to_string ());
+ *level = nm_logging_level_to_string ();
+ *domains = nm_logging_domains_to_string ();
}
static void
@@ -3929,37 +4054,20 @@ impl_manager_check_connectivity (NMManager *manager,
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
NMAuthChain *chain;
- gulong sender_uid = G_MAXULONG;
- char *error_desc = NULL;
- GError *error;
+ GError *error = NULL;
- /* Need to check the caller's permissions and stuff first */
- if (!nm_auth_get_caller_uid (context,
- priv->dbus_mgr,
- &sender_uid,
- &error_desc)) {
+ /* Validate the request */
+ chain = nm_auth_chain_new_context (context, check_connectivity_auth_done_cb, manager);
+ if (!chain) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
- error_desc);
+ "Unable to authenticate request.");
dbus_g_method_return_error (context, error);
- g_error_free (error);
- g_free (error_desc);
- return;
- }
-
- /* Yay for root */
- if (0 == sender_uid) {
- nm_connectivity_check_async (priv->connectivity,
- connectivity_check_done,
- context);
+ g_clear_error (&error);
return;
}
- /* Validate the user request */
- chain = nm_auth_chain_new (context, NULL, check_connectivity_auth_done_cb, manager);
- g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
-
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
}
@@ -3972,14 +4080,13 @@ nm_manager_start (NMManager *self)
/* Set initial radio enabled/disabled state */
for (i = 0; i < RFKILL_TYPE_MAX; i++) {
RadioState *rstate = &priv->radio_states[i];
- RfKillState udev_state;
gboolean enabled;
if (!rstate->desc)
continue;
- udev_state = nm_udev_manager_get_rfkill_state (priv->udev_mgr, i);
- update_rstate_from_rfkill (rstate, udev_state);
+ /* recheck kernel rfkill state */
+ update_rstate_from_rfkill (priv->rfkill_mgr, rstate);
if (rstate->desc) {
nm_log_info (LOGD_RFKILL, "%s %s by radio killswitch; %s by state file",
@@ -3998,23 +4105,7 @@ nm_manager_start (NMManager *self)
system_unmanaged_devices_changed_cb (priv->settings, NULL, self);
system_hostname_changed_cb (priv->settings, NULL, self);
- /* FIXME: remove when we handle bridges non-destructively */
- /* Read a list of bridges NM managed when it last quit, and only
- * manage those bridges to avoid conflicts with external tools.
- */
- priv->nm_bridges = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- read_nm_created_bridges (self);
-
- nm_udev_manager_query_devices (priv->udev_mgr);
- nm_bluez_manager_query_devices (priv->bluez_mgr);
-
- /* Query devices again to ensure that we catch all virtual interfaces (like
- * VLANs) that require a parent. If during the first pass the VLAN
- * interface was detected first, the parent wouldn't exist yet and creating
- * the VLAN would fail. The second query ensures that we'll have a valid
- * parent for the VLAN during the second pass.
- */
- nm_udev_manager_query_devices (priv->udev_mgr);
+ nm_platform_query_devices ();
/*
* Connections added before the manager is started do not emit
@@ -4022,9 +4113,7 @@ nm_manager_start (NMManager *self)
*/
system_create_virtual_devices (self);
- /* FIXME: remove when we handle bridges non-destructively */
- g_hash_table_unref (priv->nm_bridges);
- priv->nm_bridges = NULL;
+ check_if_startup_complete (self);
}
static gboolean
@@ -4089,9 +4178,7 @@ firmware_dir_changed (GFileMonitor *monitor,
switch (event_type) {
case G_FILE_MONITOR_EVENT_CREATED:
case G_FILE_MONITOR_EVENT_CHANGED:
-#if GLIB_CHECK_VERSION(2,23,4)
case G_FILE_MONITOR_EVENT_MOVED:
-#endif
case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
if (!priv->fw_changed_id) {
@@ -4129,7 +4216,7 @@ policy_default_device_changed (GObject *object, GParamSpec *pspec, gpointer user
if (ac != priv->primary_connection) {
g_clear_object (&priv->primary_connection);
priv->primary_connection = ac ? g_object_ref (ac) : NULL;
- nm_log_dbg (LOGD_CORE, "PrimaryConnection now %s", ac ? nm_active_connection_get_name (ac) : "(none)");
+ nm_log_dbg (LOGD_CORE, "PrimaryConnection now %s", ac ? nm_active_connection_get_id (ac) : "(none)");
g_object_notify (G_OBJECT (self), NM_MANAGER_PRIMARY_CONNECTION);
}
}
@@ -4162,7 +4249,7 @@ policy_activating_device_changed (GObject *object, GParamSpec *pspec, gpointer u
if (ac != priv->activating_connection) {
g_clear_object (&priv->activating_connection);
priv->activating_connection = ac ? g_object_ref (ac) : NULL;
- nm_log_dbg (LOGD_CORE, "ActivatingConnection now %s", ac ? nm_active_connection_get_name (ac) : "(none)");
+ nm_log_dbg (LOGD_CORE, "ActivatingConnection now %s", ac ? nm_active_connection_get_id (ac) : "(none)");
g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVATING_CONNECTION);
}
}
@@ -4178,73 +4265,37 @@ prop_set_auth_done_cb (NMAuthChain *chain,
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- DBusGConnection *bus;
- DBusConnection *dbus_connection;
+ DBusConnection *connection;
NMAuthCallResult result;
- DBusMessage *reply = NULL, *request;
- GError *ret_error;
- const char *permission, *prop, *objpath;
+ DBusMessage *reply = NULL, *message;
+ const char *permission, *prop;
+ GObject *obj;
gboolean set_enabled = TRUE;
- gboolean is_device = FALSE;
- size_t objpath_len;
- size_t devpath_len;
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
- request = nm_auth_chain_get_data (chain, "message");
+ message = nm_auth_chain_get_data (chain, "message");
permission = nm_auth_chain_get_data (chain, "permission");
prop = nm_auth_chain_get_data (chain, "prop");
set_enabled = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "enabled"));
- objpath = nm_auth_chain_get_data (chain, "objectpath");
+ obj = nm_auth_chain_get_data (chain, "object");
- objpath_len = strlen (objpath);
- devpath_len = strlen (NM_DBUS_PATH "/Devices");
- if ( strncmp (objpath, NM_DBUS_PATH "/Devices", devpath_len) == 0
- && objpath_len > devpath_len)
- is_device = TRUE;
-
- if (error) {
- reply = dbus_message_new_error (request, is_device ? DEV_PERM_DENIED_ERROR : NM_PERM_DENIED_ERROR,
+ result = nm_auth_chain_get_result (chain, permission);
+ if (error || (result != NM_AUTH_CALL_RESULT_YES)) {
+ reply = dbus_message_new_error (message,
+ NM_IS_DEVICE (obj) ? DEV_PERM_DENIED_ERROR : NM_PERM_DENIED_ERROR,
"Not authorized to perform this operation");
} else {
- /* Caller has had a chance to obtain authorization, so we only need to
- * check for 'yes' here.
- */
- result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, permission));
- if (result != NM_AUTH_CALL_RESULT_YES) {
- reply = dbus_message_new_error (request, is_device ? DEV_PERM_DENIED_ERROR : NM_PERM_DENIED_ERROR,
- "Not authorized to perform this operation");
- } else {
- if (is_device) {
- /* Find the device */
- NMDevice *device = nm_manager_get_device_by_path (self, objpath);
- if (device) {
- g_object_set (device, prop, set_enabled, NULL);
- reply = dbus_message_new_method_return (request);
- }
- else {
- ret_error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Can't find device for this operation");
- dbus_g_method_return_error (context, ret_error);
- g_error_free (ret_error);
- }
- } else {
- g_object_set (self, prop, set_enabled, NULL);
- reply = dbus_message_new_method_return (request);
- }
- }
+ g_object_set (obj, prop, set_enabled, NULL);
+ reply = dbus_message_new_method_return (message);
}
- if (reply) {
- bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
- g_assert (bus);
- dbus_connection = dbus_g_connection_get_connection (bus);
- g_assert (dbus_connection);
+ g_assert (reply);
+ connection = nm_auth_chain_get_data (chain, "connection");
+ g_assert (connection);
+ dbus_connection_send (connection, reply, NULL);
+ dbus_message_unref (reply);
- dbus_connection_send (dbus_connection, reply, NULL);
- dbus_message_unref (reply);
- }
nm_auth_chain_unref (chain);
}
@@ -4259,14 +4310,12 @@ prop_filter (DBusConnection *connection,
DBusMessageIter sub;
const char *propiface = NULL;
const char *propname = NULL;
- const char *sender = NULL;
- const char *objpath = NULL;
const char *glib_propname = NULL, *permission = NULL;
- DBusError dbus_error;
- gulong uid = G_MAXULONG;
DBusMessage *reply = NULL;
gboolean set_enabled = FALSE;
+ NMAuthSubject *subject = NULL;
NMAuthChain *chain;
+ GObject *obj;
/* The sole purpose of this function is to validate property accesses
* on the NMManager object since dbus-glib doesn't yet give us this
@@ -4315,173 +4364,47 @@ prop_filter (DBusConnection *connection,
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
dbus_message_iter_get_basic (&sub, &set_enabled);
- sender = dbus_message_get_sender (message);
- if (!sender) {
+ /* Make sure the object exists */
+ obj = dbus_g_connection_lookup_g_object (dbus_connection_get_g_connection (connection),
+ dbus_message_get_path (message));
+ if (!obj) {
reply = dbus_message_new_error (message, NM_PERM_DENIED_ERROR,
- "Could not determine D-Bus requestor");
+ "Object does not exist");
goto out;
}
- objpath = dbus_message_get_path (message);
- if (!objpath) {
+ subject = nm_auth_subject_new_from_message (connection, message);
+ if (!subject) {
reply = dbus_message_new_error (message, NM_PERM_DENIED_ERROR,
- "Could not determine D-Bus object path");
+ "Could not determine request UID.");
goto out;
}
- dbus_error_init (&dbus_error);
- uid = dbus_bus_get_unix_user (connection, sender, &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
+ /* Validate the user request */
+ chain = nm_auth_chain_new_subject (subject, NULL, prop_set_auth_done_cb, self);
+ if (!chain) {
reply = dbus_message_new_error (message, NM_PERM_DENIED_ERROR,
- "Could not determine the user ID of the requestor");
- dbus_error_free (&dbus_error);
+ "Could not authenticate request.");
goto out;
}
- if (uid > 0) {
- /* Otherwise validate the user request */
- chain = nm_auth_chain_new_raw_message (message, prop_set_auth_done_cb, self);
- g_assert (chain);
- priv->auth_chains = g_slist_append (priv->auth_chains, chain);
- nm_auth_chain_set_data (chain, "prop", g_strdup (glib_propname), g_free);
- nm_auth_chain_set_data (chain, "permission", g_strdup (permission), g_free);
- nm_auth_chain_set_data (chain, "enabled", GUINT_TO_POINTER (set_enabled), NULL);
- nm_auth_chain_set_data (chain, "message", dbus_message_ref (message), (GDestroyNotify) dbus_message_unref);
- nm_auth_chain_set_data (chain, "objectpath", g_strdup (objpath), g_free);
- nm_auth_chain_add_call (chain, permission, TRUE);
- } else {
- /* Yay for root */
- g_object_set (self, glib_propname, set_enabled, NULL);
- reply = dbus_message_new_method_return (message);
- }
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+ nm_auth_chain_set_data (chain, "prop", g_strdup (glib_propname), g_free);
+ nm_auth_chain_set_data (chain, "permission", g_strdup (permission), g_free);
+ nm_auth_chain_set_data (chain, "enabled", GUINT_TO_POINTER (set_enabled), NULL);
+ nm_auth_chain_set_data (chain, "message", dbus_message_ref (message), (GDestroyNotify) dbus_message_unref);
+ nm_auth_chain_set_data (chain, "connection", dbus_connection_ref (connection), (GDestroyNotify) dbus_connection_unref);
+ nm_auth_chain_set_data (chain, "object", g_object_ref (obj), (GDestroyNotify) g_object_unref);
+ nm_auth_chain_add_call (chain, permission, TRUE);
out:
if (reply) {
dbus_connection_send (connection, reply, NULL);
dbus_message_unref (reply);
}
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static NMManager *singleton = NULL;
-
-NMManager *
-nm_manager_get (void)
-{
- g_assert (singleton);
- return g_object_ref (singleton);
-}
-
-NMManager *
-nm_manager_new (NMSettings *settings,
- const char *state_file,
- gboolean initial_net_enabled,
- gboolean initial_wifi_enabled,
- gboolean initial_wwan_enabled,
- gboolean initial_wimax_enabled,
- const gchar *connectivity_uri,
- gint connectivity_interval,
- const gchar *connectivity_response,
- GError **error)
-{
- NMManagerPrivate *priv;
- DBusGConnection *bus;
- DBusConnection *dbus_connection;
-
- g_assert (settings);
-
- /* Can only be called once */
- g_assert (singleton == NULL);
- singleton = (NMManager *) g_object_new (NM_TYPE_MANAGER, NULL);
- g_assert (singleton);
-
- priv = NM_MANAGER_GET_PRIVATE (singleton);
-
- priv->policy = nm_policy_new (singleton, settings);
- g_signal_connect (priv->policy, "notify::" NM_POLICY_DEFAULT_IP4_DEVICE,
- G_CALLBACK (policy_default_device_changed), singleton);
- g_signal_connect (priv->policy, "notify::" NM_POLICY_DEFAULT_IP6_DEVICE,
- G_CALLBACK (policy_default_device_changed), singleton);
- g_signal_connect (priv->policy, "notify::" NM_POLICY_ACTIVATING_IP4_DEVICE,
- G_CALLBACK (policy_activating_device_changed), singleton);
- g_signal_connect (priv->policy, "notify::" NM_POLICY_ACTIVATING_IP6_DEVICE,
- G_CALLBACK (policy_activating_device_changed), singleton);
-
- priv->connectivity = nm_connectivity_new (connectivity_uri, connectivity_interval, connectivity_response);
- g_signal_connect (priv->connectivity, "notify::" NM_CONNECTIVITY_STATE,
- G_CALLBACK (connectivity_changed), singleton);
-
- bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
- g_assert (bus);
- dbus_connection = dbus_g_connection_get_connection (bus);
- g_assert (dbus_connection);
-
- if (!dbus_connection_add_filter (dbus_connection, prop_filter, singleton, NULL)) {
- nm_log_err (LOGD_CORE, "failed to register DBus connection filter");
- g_object_unref (singleton);
- return NULL;
- }
-
- priv->settings = g_object_ref (settings);
-
- priv->state_file = g_strdup (state_file);
-
- priv->net_enabled = initial_net_enabled;
-
- priv->radio_states[RFKILL_TYPE_WLAN].user_enabled = initial_wifi_enabled;
- priv->radio_states[RFKILL_TYPE_WWAN].user_enabled = initial_wwan_enabled;
- priv->radio_states[RFKILL_TYPE_WIMAX].user_enabled = initial_wimax_enabled;
-
- g_signal_connect (priv->settings, "notify::" NM_SETTINGS_UNMANAGED_SPECS,
- G_CALLBACK (system_unmanaged_devices_changed_cb), singleton);
- g_signal_connect (priv->settings, "notify::" NM_SETTINGS_HOSTNAME,
- G_CALLBACK (system_hostname_changed_cb), singleton);
- g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
- G_CALLBACK (connection_added), singleton);
- g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,
- G_CALLBACK (connection_changed), singleton);
- g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
- G_CALLBACK (connection_removed), singleton);
- g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED,
- G_CALLBACK (connection_changed), singleton);
-
- dbus_g_connection_register_g_object (bus, NM_DBUS_PATH, G_OBJECT (singleton));
-
- priv->udev_mgr = nm_udev_manager_new ();
- g_signal_connect (priv->udev_mgr,
- "device-added",
- G_CALLBACK (udev_device_added_cb),
- singleton);
- g_signal_connect (priv->udev_mgr,
- "device-removed",
- G_CALLBACK (udev_device_removed_cb),
- singleton);
- g_signal_connect (priv->udev_mgr,
- "rfkill-changed",
- G_CALLBACK (udev_manager_rfkill_changed_cb),
- singleton);
-
- priv->bluez_mgr = nm_bluez_manager_get (NM_CONNECTION_PROVIDER (priv->settings));
-
- g_signal_connect (priv->bluez_mgr,
- NM_BLUEZ_MANAGER_BDADDR_ADDED,
- G_CALLBACK (bluez_manager_bdaddr_added_cb),
- singleton);
-
- g_signal_connect (priv->bluez_mgr,
- NM_BLUEZ_MANAGER_BDADDR_REMOVED,
- G_CALLBACK (bluez_manager_bdaddr_removed_cb),
- singleton);
-
- priv->session_monitor = nm_session_monitor_get ();
-
- /* Force kernel WiFi rfkill state to follow NM saved wifi state in case
- * the BIOS doesn't save rfkill state, and to be consistent with user
- * changes to the WirelessEnabled property which toggles kernel rfkill.
- */
- rfkill_change_wifi (priv->radio_states[RFKILL_TYPE_WLAN].desc, initial_wifi_enabled);
+ g_clear_object (&subject);
- return singleton;
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static void
@@ -4491,113 +4414,9 @@ authority_changed_cb (gpointer user_data)
g_signal_emit (NM_MANAGER (user_data), signals[CHECK_PERMISSIONS], 0);
}
-static void
-dispose (GObject *object)
-{
- NMManager *manager = NM_MANAGER (object);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- DBusGConnection *bus;
- DBusConnection *dbus_connection;
- GSList *iter;
-
- if (priv->disposed) {
- G_OBJECT_CLASS (nm_manager_parent_class)->dispose (object);
- return;
- }
- priv->disposed = TRUE;
-
- g_slist_foreach (priv->auth_chains, (GFunc) nm_auth_chain_unref, NULL);
- g_slist_free (priv->auth_chains);
-
- nm_auth_changed_func_unregister (authority_changed_cb, manager);
-
- /* FIXME: remove when we handle bridges non-destructively */
- write_nm_created_bridges (manager);
-
- /* Remove all devices */
- while (g_slist_length (priv->devices)) {
- priv->devices = remove_one_device (manager,
- priv->devices,
- NM_DEVICE (priv->devices->data),
- TRUE);
- }
-
- if (priv->ac_cleanup_id) {
- g_source_remove (priv->ac_cleanup_id);
- priv->ac_cleanup_id = 0;
- }
-
- for (iter = priv->active_connections; iter; iter = g_slist_next (iter))
- active_connection_removed (manager, NM_ACTIVE_CONNECTION (iter->data));
- g_slist_free (priv->active_connections);
- priv->active_connections = NULL;
- g_clear_object (&priv->primary_connection);
- g_clear_object (&priv->activating_connection);
-
- g_clear_object (&priv->connectivity);
-
- g_free (priv->hostname);
-
- g_signal_handlers_disconnect_by_func (priv->policy, G_CALLBACK (policy_default_device_changed), singleton);
- g_signal_handlers_disconnect_by_func (priv->policy, G_CALLBACK (policy_activating_device_changed), singleton);
- g_object_unref (priv->policy);
-
- g_object_unref (priv->settings);
- g_object_unref (priv->vpn_manager);
- g_object_unref (priv->session_monitor);
-
- if (priv->modem_added_id) {
- g_source_remove (priv->modem_added_id);
- priv->modem_added_id = 0;
- }
- if (priv->modem_removed_id) {
- g_source_remove (priv->modem_removed_id);
- priv->modem_removed_id = 0;
- }
- g_object_unref (priv->modem_manager);
-
- /* Unregister property filter */
- bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
- if (bus) {
- dbus_connection = dbus_g_connection_get_connection (bus);
- g_assert (dbus_connection);
- dbus_connection_remove_filter (dbus_connection, prop_filter, manager);
- }
- g_signal_handler_disconnect (priv->dbus_mgr, priv->dbus_connection_changed_id);
- g_object_unref (priv->dbus_mgr);
-
- if (priv->bluez_mgr)
- g_object_unref (priv->bluez_mgr);
-
- if (priv->aipd_proxy)
- g_object_unref (priv->aipd_proxy);
-
- if (priv->sleep_monitor)
- g_object_unref (priv->sleep_monitor);
-
- if (priv->fw_monitor) {
- if (priv->fw_monitor_id)
- g_signal_handler_disconnect (priv->fw_monitor, priv->fw_monitor_id);
-
- if (priv->fw_changed_id)
- g_source_remove (priv->fw_changed_id);
-
- g_file_monitor_cancel (priv->fw_monitor);
- g_object_unref (priv->fw_monitor);
- }
-
- g_slist_free (priv->factories);
-
- if (priv->timestamp_update_id) {
- g_source_remove (priv->timestamp_update_id);
- priv->timestamp_update_id = 0;
- }
-
- G_OBJECT_CLASS (nm_manager_parent_class)->dispose (object);
-}
-
#define KERN_RFKILL_OP_CHANGE_ALL 3
#define KERN_RFKILL_TYPE_WLAN 1
+#define KERN_RFKILL_TYPE_WWAN 5
struct rfkill_event {
__u32 idx;
__u8 type;
@@ -4606,18 +4425,19 @@ struct rfkill_event {
} __attribute__((packed));
static void
-rfkill_change_wifi (const char *desc, gboolean enabled)
+rfkill_change (const char *desc, RfKillType rtype, gboolean enabled)
{
int fd;
struct rfkill_event event;
ssize_t len;
+ g_return_if_fail (rtype == RFKILL_TYPE_WLAN || rtype == RFKILL_TYPE_WWAN);
+
errno = 0;
fd = open ("/dev/rfkill", O_RDWR);
if (fd < 0) {
if (errno == EACCES)
- nm_log_warn (LOGD_RFKILL, "(%s): failed to open killswitch device "
- "for WiFi radio control", desc);
+ nm_log_warn (LOGD_RFKILL, "(%s): failed to open killswitch device", desc);
return;
}
@@ -4630,7 +4450,16 @@ rfkill_change_wifi (const char *desc, gboolean enabled)
memset (&event, 0, sizeof (event));
event.op = KERN_RFKILL_OP_CHANGE_ALL;
- event.type = KERN_RFKILL_TYPE_WLAN;
+ switch (rtype) {
+ case RFKILL_TYPE_WLAN:
+ event.type = KERN_RFKILL_TYPE_WLAN;
+ break;
+ case RFKILL_TYPE_WWAN:
+ event.type = KERN_RFKILL_TYPE_WWAN;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
event.soft = enabled ? 0 : 1;
len = write (fd, &event, sizeof (event));
@@ -4657,6 +4486,10 @@ manager_radio_user_toggled (NMManager *self,
GError *error = NULL;
gboolean old_enabled, new_enabled;
+ /* Don't touch devices if asleep/networking disabled */
+ if (manager_sleeping (self))
+ return;
+
if (rstate->desc) {
nm_log_dbg (LOGD_RFKILL, "(%s): setting radio %s by user",
rstate->desc,
@@ -4690,114 +4523,11 @@ manager_radio_user_toggled (NMManager *self,
rstate->user_enabled = enabled;
new_enabled = radio_enabled_for_rstate (rstate, FALSE);
if (new_enabled != old_enabled) {
- manager_update_radio_enabled (self, rstate, new_enabled);
-
- /* For WiFi only (for now) set the actual kernel rfkill state */
- if (rstate->rtype == RFKILL_TYPE_WLAN)
- rfkill_change_wifi (rstate->desc, new_enabled);
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- NMManager *self = NM_MANAGER (object);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
-
- switch (prop_id) {
- case PROP_NETWORKING_ENABLED:
- /* Construct only for now */
- priv->net_enabled = g_value_get_boolean (value);
- break;
- case PROP_WIRELESS_ENABLED:
- manager_radio_user_toggled (NM_MANAGER (object),
- &priv->radio_states[RFKILL_TYPE_WLAN],
- g_value_get_boolean (value));
- break;
- case PROP_WWAN_ENABLED:
- manager_radio_user_toggled (NM_MANAGER (object),
- &priv->radio_states[RFKILL_TYPE_WWAN],
- g_value_get_boolean (value));
- break;
- case PROP_WIMAX_ENABLED:
- manager_radio_user_toggled (NM_MANAGER (object),
- &priv->radio_states[RFKILL_TYPE_WIMAX],
- g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
+ /* Try to change the kernel rfkill state */
+ if (rstate->rtype == RFKILL_TYPE_WLAN || rstate->rtype == RFKILL_TYPE_WWAN)
+ rfkill_change (rstate->desc, rstate->rtype, new_enabled);
-static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- NMManager *self = NM_MANAGER (object);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- GSList *iter;
- GPtrArray *active;
- const char *path;
-
- switch (prop_id) {
- case PROP_VERSION:
- g_value_set_string (value, VERSION);
- break;
- case PROP_STATE:
- nm_manager_update_state (self);
- g_value_set_uint (value, priv->state);
- break;
- case PROP_NETWORKING_ENABLED:
- g_value_set_boolean (value, priv->net_enabled);
- break;
- case PROP_WIRELESS_ENABLED:
- g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WLAN, TRUE));
- break;
- case PROP_WIRELESS_HARDWARE_ENABLED:
- g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WLAN].hw_enabled);
- break;
- case PROP_WWAN_ENABLED:
- g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WWAN, TRUE));
- break;
- case PROP_WWAN_HARDWARE_ENABLED:
- g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WWAN].hw_enabled);
- break;
- case PROP_WIMAX_ENABLED:
- g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WIMAX, TRUE));
- break;
- case PROP_WIMAX_HARDWARE_ENABLED:
- g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WIMAX].hw_enabled);
- break;
- case PROP_ACTIVE_CONNECTIONS:
- active = g_ptr_array_sized_new (3);
- for (iter = priv->active_connections; iter; iter = g_slist_next (iter)) {
- path = nm_active_connection_get_path (NM_ACTIVE_CONNECTION (iter->data));
- g_ptr_array_add (active, g_strdup (path));
- }
- g_value_take_boxed (value, active);
- break;
- case PROP_CONNECTIVITY:
- g_value_set_uint (value, nm_connectivity_get_state (priv->connectivity));
- break;
- case PROP_PRIMARY_CONNECTION:
- path = priv->primary_connection ? nm_active_connection_get_path (priv->primary_connection) : "/";
- g_value_set_boxed (value, path);
- break;
- case PROP_ACTIVATING_CONNECTION:
- path = priv->activating_connection ? nm_active_connection_get_path (priv->activating_connection) : "/";
- g_value_set_boxed (value, path);
- break;
- case PROP_HOSTNAME:
- g_value_set_string (value, priv->hostname);
- break;
- case PROP_SLEEPING:
- g_value_set_boolean (value, priv->sleeping);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
+ manager_update_radio_enabled (self, rstate, new_enabled);
}
}
@@ -4827,14 +4557,140 @@ dbus_connection_changed_cb (NMDBusManager *dbus_mgr,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
+ gboolean success = FALSE;
if (dbus_connection) {
/* Register property filter on new connection; there's no reason this
* should fail except out-of-memory or program error; if it does fail
* then there's no Manager property access control, which is bad.
*/
- g_assert (dbus_connection_add_filter (dbus_connection, prop_filter, self, NULL));
+ success = dbus_connection_add_filter (dbus_connection, prop_filter, self, NULL);
+ g_assert (success);
}
+ NM_MANAGER_GET_PRIVATE (self)->prop_filter_added = success;
+}
+
+/**********************************************************************/
+
+static NMManager *singleton = NULL;
+
+NMManager *
+nm_manager_get (void)
+{
+ g_assert (singleton);
+ return singleton;
+}
+
+NMConnectionProvider *
+nm_connection_provider_get (void)
+{
+ g_assert (singleton);
+ g_assert (NM_MANAGER_GET_PRIVATE (singleton)->settings);
+ return NM_CONNECTION_PROVIDER (NM_MANAGER_GET_PRIVATE (singleton)->settings);
+}
+
+NMManager *
+nm_manager_new (NMSettings *settings,
+ const char *state_file,
+ gboolean initial_net_enabled,
+ gboolean initial_wifi_enabled,
+ gboolean initial_wwan_enabled,
+ gboolean initial_wimax_enabled,
+ GError **error)
+{
+ NMManagerPrivate *priv;
+ DBusGConnection *bus;
+ DBusConnection *dbus_connection;
+
+ g_assert (settings);
+
+ /* Can only be called once */
+ g_assert (singleton == NULL);
+ singleton = (NMManager *) g_object_new (NM_TYPE_MANAGER, NULL);
+ g_assert (singleton);
+
+ priv = NM_MANAGER_GET_PRIVATE (singleton);
+
+ bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ if (!bus) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_INTERNAL,
+ "Failed to initialize D-Bus connection");
+ g_object_unref (singleton);
+ return NULL;
+ }
+
+ dbus_connection = dbus_g_connection_get_connection (bus);
+ g_assert (dbus_connection);
+
+ priv->policy = nm_policy_new (singleton, settings);
+ g_signal_connect (priv->policy, "notify::" NM_POLICY_DEFAULT_IP4_DEVICE,
+ G_CALLBACK (policy_default_device_changed), singleton);
+ g_signal_connect (priv->policy, "notify::" NM_POLICY_DEFAULT_IP6_DEVICE,
+ G_CALLBACK (policy_default_device_changed), singleton);
+ g_signal_connect (priv->policy, "notify::" NM_POLICY_ACTIVATING_IP4_DEVICE,
+ G_CALLBACK (policy_activating_device_changed), singleton);
+ g_signal_connect (priv->policy, "notify::" NM_POLICY_ACTIVATING_IP6_DEVICE,
+ G_CALLBACK (policy_activating_device_changed), singleton);
+
+ priv->connectivity = nm_connectivity_new ();
+ g_signal_connect (priv->connectivity, "notify::" NM_CONNECTIVITY_STATE,
+ G_CALLBACK (connectivity_changed), singleton);
+
+ if (!dbus_connection_add_filter (dbus_connection, prop_filter, singleton, NULL)) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_INTERNAL,
+ "Failed to register DBus connection filter");
+ g_object_unref (singleton);
+ return NULL;
+ }
+ priv->prop_filter_added = TRUE;
+
+ priv->settings = g_object_ref (settings);
+
+ priv->state_file = g_strdup (state_file);
+
+ priv->net_enabled = initial_net_enabled;
+
+ priv->radio_states[RFKILL_TYPE_WLAN].user_enabled = initial_wifi_enabled;
+ priv->radio_states[RFKILL_TYPE_WWAN].user_enabled = initial_wwan_enabled;
+ priv->radio_states[RFKILL_TYPE_WIMAX].user_enabled = initial_wimax_enabled;
+
+ g_signal_connect (priv->settings, "notify::" NM_SETTINGS_UNMANAGED_SPECS,
+ G_CALLBACK (system_unmanaged_devices_changed_cb), singleton);
+ g_signal_connect (priv->settings, "notify::" NM_SETTINGS_HOSTNAME,
+ G_CALLBACK (system_hostname_changed_cb), singleton);
+ g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
+ G_CALLBACK (connection_added), singleton);
+ g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,
+ G_CALLBACK (connection_changed), singleton);
+ g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed), singleton);
+ g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED,
+ G_CALLBACK (connection_changed), singleton);
+
+ nm_dbus_manager_register_object (priv->dbus_mgr, NM_DBUS_PATH, singleton);
+
+ g_signal_connect (nm_platform_get (),
+ NM_PLATFORM_SIGNAL_LINK_CHANGED,
+ G_CALLBACK (platform_link_cb),
+ singleton);
+
+ priv->rfkill_mgr = nm_rfkill_manager_new ();
+ g_signal_connect (priv->rfkill_mgr,
+ "rfkill-changed",
+ G_CALLBACK (rfkill_manager_rfkill_changed_cb),
+ singleton);
+
+ /* Force kernel WiFi/WWAN rfkill state to follow NM saved WiFi/WWAN state
+ * in case the BIOS doesn't save rfkill state, and to be consistent with user
+ * changes to the WirelessEnabled/WWANEnabled properties which toggle kernel
+ * rfkill.
+ */
+ rfkill_change (priv->radio_states[RFKILL_TYPE_WLAN].desc, RFKILL_TYPE_WLAN, initial_wifi_enabled);
+ rfkill_change (priv->radio_states[RFKILL_TYPE_WWAN].desc, RFKILL_TYPE_WWAN, initial_wwan_enabled);
+
+ load_device_factories (singleton);
+
+ return singleton;
}
static void
@@ -4853,7 +4709,6 @@ nm_manager_init (NMManager *manager)
priv->radio_states[RFKILL_TYPE_WLAN].prop = NM_MANAGER_WIRELESS_ENABLED;
priv->radio_states[RFKILL_TYPE_WLAN].hw_prop = NM_MANAGER_WIRELESS_HARDWARE_ENABLED;
priv->radio_states[RFKILL_TYPE_WLAN].desc = "WiFi";
- priv->radio_states[RFKILL_TYPE_WLAN].other_enabled_func = nm_manager_get_ipw_rfkill_state;
priv->radio_states[RFKILL_TYPE_WLAN].rtype = RFKILL_TYPE_WLAN;
priv->radio_states[RFKILL_TYPE_WWAN].user_enabled = TRUE;
@@ -4861,7 +4716,6 @@ nm_manager_init (NMManager *manager)
priv->radio_states[RFKILL_TYPE_WWAN].prop = NM_MANAGER_WWAN_ENABLED;
priv->radio_states[RFKILL_TYPE_WWAN].hw_prop = NM_MANAGER_WWAN_HARDWARE_ENABLED;
priv->radio_states[RFKILL_TYPE_WWAN].desc = "WWAN";
- priv->radio_states[RFKILL_TYPE_WWAN].daemon_enabled_func = nm_manager_get_modem_enabled_state;
priv->radio_states[RFKILL_TYPE_WWAN].rtype = RFKILL_TYPE_WWAN;
priv->radio_states[RFKILL_TYPE_WIMAX].user_enabled = TRUE;
@@ -4869,7 +4723,6 @@ nm_manager_init (NMManager *manager)
priv->radio_states[RFKILL_TYPE_WIMAX].prop = NM_MANAGER_WIMAX_ENABLED;
priv->radio_states[RFKILL_TYPE_WIMAX].hw_prop = NM_MANAGER_WIMAX_HARDWARE_ENABLED;
priv->radio_states[RFKILL_TYPE_WIMAX].desc = "WiMAX";
- priv->radio_states[RFKILL_TYPE_WIMAX].other_enabled_func = NULL;
priv->radio_states[RFKILL_TYPE_WIMAX].rtype = RFKILL_TYPE_WIMAX;
for (i = 0; i < RFKILL_TYPE_MAX; i++)
@@ -4877,18 +4730,13 @@ nm_manager_init (NMManager *manager)
priv->sleeping = FALSE;
priv->state = NM_STATE_DISCONNECTED;
+ priv->startup = TRUE;
priv->dbus_mgr = nm_dbus_manager_get ();
- priv->dbus_connection_changed_id = g_signal_connect (priv->dbus_mgr,
- NM_DBUS_MANAGER_DBUS_CONNECTION_CHANGED,
- G_CALLBACK (dbus_connection_changed_cb),
- manager);
-
- priv->modem_manager = nm_modem_manager_get ();
- priv->modem_added_id = g_signal_connect (priv->modem_manager, "modem-added",
- G_CALLBACK (modem_added), manager);
- priv->modem_removed_id = g_signal_connect (priv->modem_manager, "modem-removed",
- G_CALLBACK (modem_removed), manager);
+ g_signal_connect (priv->dbus_mgr,
+ NM_DBUS_MANAGER_DBUS_CONNECTION_CHANGED,
+ G_CALLBACK (dbus_connection_changed_cb),
+ manager);
priv->vpn_manager = nm_vpn_manager_get ();
@@ -4900,7 +4748,7 @@ nm_manager_init (NMManager *manager)
"/",
NM_AUTOIP_DBUS_IFACE);
if (priv->aipd_proxy) {
- dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_STRING_STRING,
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_INVALID);
@@ -4935,9 +4783,9 @@ nm_manager_init (NMManager *manager)
}
if (priv->fw_monitor) {
- priv->fw_monitor_id = g_signal_connect (priv->fw_monitor, "changed",
- G_CALLBACK (firmware_dir_changed),
- manager);
+ g_signal_connect (priv->fw_monitor, "changed",
+ G_CALLBACK (firmware_dir_changed),
+ manager);
nm_log_info (LOGD_CORE, "monitoring kernel firmware directory '%s'.",
KERNEL_FIRMWARE_DIR);
} else {
@@ -4945,13 +4793,214 @@ nm_manager_init (NMManager *manager)
KERNEL_FIRMWARE_DIR);
}
- load_device_factories (manager);
-
/* Update timestamps in active connections */
priv->timestamp_update_id = g_timeout_add_seconds (300, (GSourceFunc) periodic_update_active_connection_timestamps, manager);
}
static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMManager *self = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+ GPtrArray *array;
+ const char *path;
+
+ switch (prop_id) {
+ case PROP_VERSION:
+ g_value_set_string (value, VERSION);
+ break;
+ case PROP_STATE:
+ nm_manager_update_state (self);
+ g_value_set_uint (value, priv->state);
+ break;
+ case PROP_STARTUP:
+ g_value_set_boolean (value, priv->startup);
+ break;
+ case PROP_NETWORKING_ENABLED:
+ g_value_set_boolean (value, priv->net_enabled);
+ break;
+ case PROP_WIRELESS_ENABLED:
+ g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WLAN, TRUE));
+ break;
+ case PROP_WIRELESS_HARDWARE_ENABLED:
+ g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WLAN].hw_enabled);
+ break;
+ case PROP_WWAN_ENABLED:
+ g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WWAN, TRUE));
+ break;
+ case PROP_WWAN_HARDWARE_ENABLED:
+ g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WWAN].hw_enabled);
+ break;
+ case PROP_WIMAX_ENABLED:
+ g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WIMAX, TRUE));
+ break;
+ case PROP_WIMAX_HARDWARE_ENABLED:
+ g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WIMAX].hw_enabled);
+ break;
+ case PROP_ACTIVE_CONNECTIONS:
+ array = g_ptr_array_sized_new (3);
+ for (iter = priv->active_connections; iter; iter = g_slist_next (iter)) {
+ path = nm_active_connection_get_path (NM_ACTIVE_CONNECTION (iter->data));
+ if (path)
+ g_ptr_array_add (array, g_strdup (path));
+ }
+ g_value_take_boxed (value, array);
+ break;
+ case PROP_CONNECTIVITY:
+ g_value_set_uint (value, nm_connectivity_get_state (priv->connectivity));
+ break;
+ case PROP_PRIMARY_CONNECTION:
+ path = priv->primary_connection ? nm_active_connection_get_path (priv->primary_connection) : NULL;
+ g_value_set_boxed (value, path ? path : "/");
+ break;
+ case PROP_ACTIVATING_CONNECTION:
+ path = priv->activating_connection ? nm_active_connection_get_path (priv->activating_connection) : NULL;
+ g_value_set_boxed (value, path ? path : "/");
+ break;
+ case PROP_HOSTNAME:
+ g_value_set_string (value, priv->hostname);
+ break;
+ case PROP_SLEEPING:
+ g_value_set_boolean (value, priv->sleeping);
+ break;
+ case PROP_DEVICES:
+ array = g_ptr_array_sized_new (5);
+ for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
+ path = nm_device_get_path (NM_DEVICE (iter->data));
+ if (path)
+ g_ptr_array_add (array, g_strdup (path));
+ }
+ g_value_take_boxed (value, array);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMManager *self = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ switch (prop_id) {
+ case PROP_NETWORKING_ENABLED:
+ /* Construct only for now */
+ priv->net_enabled = g_value_get_boolean (value);
+ break;
+ case PROP_WIRELESS_ENABLED:
+ manager_radio_user_toggled (NM_MANAGER (object),
+ &priv->radio_states[RFKILL_TYPE_WLAN],
+ g_value_get_boolean (value));
+ break;
+ case PROP_WWAN_ENABLED:
+ manager_radio_user_toggled (NM_MANAGER (object),
+ &priv->radio_states[RFKILL_TYPE_WWAN],
+ g_value_get_boolean (value));
+ break;
+ case PROP_WIMAX_ENABLED:
+ manager_radio_user_toggled (NM_MANAGER (object),
+ &priv->radio_states[RFKILL_TYPE_WIMAX],
+ g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMManager *manager = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ DBusGConnection *bus;
+ DBusConnection *dbus_connection;
+ GSList *iter;
+
+ g_slist_free_full (priv->auth_chains, (GDestroyNotify) nm_auth_chain_unref);
+ priv->auth_chains = NULL;
+
+ nm_auth_changed_func_unregister (authority_changed_cb, manager);
+
+ /* Remove all devices */
+ while (priv->devices)
+ remove_device (manager, NM_DEVICE (priv->devices->data), TRUE);
+
+ if (priv->ac_cleanup_id) {
+ g_source_remove (priv->ac_cleanup_id);
+ priv->ac_cleanup_id = 0;
+ }
+
+ while (priv->active_connections)
+ active_connection_remove (manager, NM_ACTIVE_CONNECTION (priv->active_connections->data));
+ g_clear_pointer (&priv->active_connections, g_slist_free);
+ g_clear_object (&priv->primary_connection);
+ g_clear_object (&priv->activating_connection);
+
+ g_clear_object (&priv->connectivity);
+
+ g_free (priv->hostname);
+
+ if (priv->policy) {
+ g_signal_handlers_disconnect_by_func (priv->policy, policy_default_device_changed, manager);
+ g_signal_handlers_disconnect_by_func (priv->policy, policy_activating_device_changed, manager);
+ g_clear_object (&priv->policy);
+ }
+
+ g_clear_object (&priv->settings);
+ g_clear_object (&priv->vpn_manager);
+
+ /* Unregister property filter */
+ if (priv->dbus_mgr) {
+ bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ if (bus) {
+ dbus_connection = dbus_g_connection_get_connection (bus);
+ if (dbus_connection && priv->prop_filter_added) {
+ dbus_connection_remove_filter (dbus_connection, prop_filter, manager);
+ priv->prop_filter_added = FALSE;
+ }
+ }
+ g_signal_handlers_disconnect_by_func (priv->dbus_mgr, dbus_connection_changed_cb, manager);
+ priv->dbus_mgr = NULL;
+ }
+
+ g_clear_object (&priv->aipd_proxy);
+ g_clear_object (&priv->sleep_monitor);
+
+ if (priv->fw_monitor) {
+ g_signal_handlers_disconnect_by_func (priv->fw_monitor, firmware_dir_changed, manager);
+
+ if (priv->fw_changed_id) {
+ g_source_remove (priv->fw_changed_id);
+ priv->fw_changed_id = 0;
+ }
+
+ g_file_monitor_cancel (priv->fw_monitor);
+ g_clear_object (&priv->fw_monitor);
+ }
+
+ for (iter = priv->factories; iter; iter = iter->next) {
+ NMDeviceFactory *factory = iter->data;
+
+ g_signal_handlers_disconnect_matched (factory, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, manager);
+ g_object_unref (factory);
+ }
+ g_clear_pointer (&priv->factories, g_slist_free);
+
+ if (priv->timestamp_update_id) {
+ g_source_remove (priv->timestamp_update_id);
+ priv->timestamp_update_id = 0;
+ }
+
+ G_OBJECT_CLASS (nm_manager_parent_class)->dispose (object);
+}
+
+static void
nm_manager_class_init (NMManagerClass *manager_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (manager_class);
@@ -4981,6 +5030,14 @@ nm_manager_class_init (NMManagerClass *manager_class)
G_PARAM_READABLE));
g_object_class_install_property
+ (object_class, PROP_STARTUP,
+ g_param_spec_boolean (NM_MANAGER_STARTUP,
+ "Startup",
+ "Is NetworkManager still starting up",
+ TRUE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
(object_class, PROP_NETWORKING_ENABLED,
g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED,
"NetworkingEnabled",
@@ -5075,7 +5132,7 @@ nm_manager_class_init (NMManagerClass *manager_class)
"Hostname",
"Hostname",
NULL,
- G_PARAM_READABLE | NM_PROPERTY_PARAM_NO_EXPORT));
+ G_PARAM_READABLE));
/* Sleeping is not exported over D-Bus */
g_object_class_install_property
@@ -5084,7 +5141,15 @@ nm_manager_class_init (NMManagerClass *manager_class)
"Sleeping",
"Sleeping",
FALSE,
- G_PARAM_READABLE | NM_PROPERTY_PARAM_NO_EXPORT));
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_DEVICES,
+ g_param_spec_boxed (NM_MANAGER_DEVICES,
+ "Devices",
+ "Devices",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
/* signals */
signals[DEVICE_ADDED] =
@@ -5092,8 +5157,7 @@ nm_manager_class_init (NMManagerClass *manager_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMManagerClass, device_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
signals[DEVICE_REMOVED] =
@@ -5101,8 +5165,7 @@ nm_manager_class_init (NMManagerClass *manager_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMManagerClass, device_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
signals[STATE_CHANGED] =
@@ -5110,48 +5173,40 @@ nm_manager_class_init (NMManagerClass *manager_class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMManagerClass, state_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
- signals[PROPERTIES_CHANGED] =
- nm_properties_changed_signal_new (object_class,
- G_STRUCT_OFFSET (NMManagerClass, properties_changed));
-
signals[CHECK_PERMISSIONS] =
g_signal_new ("check-permissions",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[USER_PERMISSIONS_CHANGED] =
g_signal_new ("user-permissions-changed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[ACTIVE_CONNECTION_ADDED] =
g_signal_new (NM_MANAGER_ACTIVE_CONNECTION_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
signals[ACTIVE_CONNECTION_REMOVED] =
g_signal_new (NM_MANAGER_ACTIVE_CONNECTION_REMOVED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (manager_class),
- &dbus_glib_nm_manager_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (manager_class),
+ &dbus_glib_nm_manager_object_info);
dbus_g_error_domain_register (NM_MANAGER_ERROR, NULL, NM_TYPE_MANAGER_ERROR);
dbus_g_error_domain_register (NM_LOGGING_ERROR, "org.freedesktop.NetworkManager.Logging", NM_TYPE_LOGGING_ERROR);
diff --git a/src/nm-manager.h b/src/nm-manager.h
index 9884d0504..81eefc7b0 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -27,6 +27,7 @@
#include <dbus/dbus-glib.h>
#include "nm-device.h"
#include "nm-settings.h"
+#include "nm-auth-subject.h"
#define NM_TYPE_MANAGER (nm_manager_get_type ())
#define NM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MANAGER, NMManager))
@@ -47,10 +48,13 @@ typedef enum {
NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE, /*< nick=UnsupportedConnectionType >*/
NM_MANAGER_ERROR_DEPENDENCY_FAILED, /*< nick=DependencyFailed >*/
NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED, /*< nick=AutoconnectNotAllowed >*/
+ NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE, /*< nick=ConnectionAlreadyActive >*/
+ NM_MANAGER_ERROR_INTERNAL, /*< nick=Internal >*/
} NMManagerError;
#define NM_MANAGER_VERSION "version"
#define NM_MANAGER_STATE "state"
+#define NM_MANAGER_STARTUP "startup"
#define NM_MANAGER_NETWORKING_ENABLED "networking-enabled"
#define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
@@ -62,6 +66,7 @@ typedef enum {
#define NM_MANAGER_CONNECTIVITY "connectivity"
#define NM_MANAGER_PRIMARY_CONNECTION "primary-connection"
#define NM_MANAGER_ACTIVATING_CONNECTION "activating-connection"
+#define NM_MANAGER_DEVICES "devices"
/* Not exported */
#define NM_MANAGER_HOSTNAME "hostname"
@@ -83,7 +88,6 @@ typedef struct {
void (*device_added) (NMManager *manager, NMDevice *device);
void (*device_removed) (NMManager *manager, NMDevice *device);
void (*state_changed) (NMManager *manager, guint state);
- void (*properties_changed) (NMManager *manager, GHashTable *properties);
} NMManagerClass;
GType nm_manager_get_type (void);
@@ -95,9 +99,6 @@ NMManager *nm_manager_new (NMSettings *settings,
gboolean initial_wifi_enabled,
gboolean initial_wwan_enabled,
gboolean initial_wimax_enabled,
- const gchar *connectivity_uri,
- gint connectivity_interval,
- const gchar *connectivity_response,
GError **error);
NMManager *nm_manager_get (void);
@@ -105,20 +106,23 @@ NMManager *nm_manager_get (void);
void nm_manager_start (NMManager *manager);
const GSList *nm_manager_get_active_connections (NMManager *manager);
+GSList *nm_manager_get_activatable_connections (NMManager *manager);
/* Device handling */
-GSList *nm_manager_get_devices (NMManager *manager);
+const GSList *nm_manager_get_devices (NMManager *manager);
NMDevice *nm_manager_get_device_by_master (NMManager *manager,
- const char *master,
- const char *driver);
+ const char *master,
+ const char *driver);
+NMDevice *nm_manager_get_device_by_ifindex (NMManager *manager,
+ int ifindex);
NMActiveConnection *nm_manager_activate_connection (NMManager *manager,
NMConnection *connection,
const char *specific_object,
- const char *device_path,
- const char *dbus_sender, /* NULL if automatic */
+ NMDevice *device,
+ NMAuthSubject *subject,
GError **error);
gboolean nm_manager_deactivate_connection (NMManager *manager,
diff --git a/src/nm-netlink-compat.c b/src/nm-netlink-compat.c
deleted file mode 100644
index 9c90eabea..000000000
--- a/src/nm-netlink-compat.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Caixa Magica Software.
- */
-
-#include <glib.h>
-
-#include "nm-netlink-compat.h"
-
-static struct rtnl_nexthop *
-nm_netlink_get_nh (struct rtnl_route * route)
-{
- int hops;
-
- hops = rtnl_route_get_nnexthops (route);
- g_return_val_if_fail(hops > 0, NULL);
- return rtnl_route_nexthop_n (route, 0);
-}
-
-int
-rtnl_route_get_oif (struct rtnl_route * route)
-{
- struct rtnl_nexthop * nh;
-
- nh = nm_netlink_get_nh(route);
- g_return_val_if_fail(nh, -NLE_OBJ_NOTFOUND);
- return rtnl_route_nh_get_ifindex (nh);
-}
-
-int
-rtnl_route_set_oif (struct rtnl_route * route, int ifindex)
-{
- struct rtnl_nexthop * nh;
-
- nh = rtnl_route_nh_alloc();
- rtnl_route_nh_set_ifindex(nh, ifindex);
- rtnl_route_add_nexthop(route, nh);
- return 0;
-}
-
-struct nl_addr *
-rtnl_route_get_gateway (struct rtnl_route * route)
-{
- struct rtnl_nexthop * nh;
-
- nh = nm_netlink_get_nh(route);
- g_return_val_if_fail(nh, NULL);
- return rtnl_route_nh_get_gateway(nh);
-}
-
-int
-rtnl_route_set_gateway (struct rtnl_route * route, struct nl_addr * gw_addr)
-{
- struct rtnl_nexthop * nh;
-
- nh = nm_netlink_get_nh(route);
- g_return_val_if_fail(nh, -NLE_OBJ_NOTFOUND);
-
- rtnl_route_nh_set_gateway(nh, gw_addr);
- return 0;
-}
-
-int
-rtnl_route_get_dst_len(struct rtnl_route * rtnlroute)
-{
- struct nl_addr * dst;
-
- dst = rtnl_route_get_dst(rtnlroute);
- return nl_addr_get_prefixlen(dst);
-}
diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c
deleted file mode 100644
index ba8053e93..000000000
--- a/src/nm-netlink-monitor.c
+++ /dev/null
@@ -1,943 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2005 - 2010 Red Hat, Inc.
- * Copyright (C) 2005 - 2008 Novell, Inc.
- * Copyright (C) 2005 Ray Strode
- *
- * Some code borrowed from HAL:
- *
- * Copyright (C) 2003 David Zeuthen, <david@fubar.dk>
- * Copyright (C) 2004 Novell, Inc.
- */
-
-/* for struct ucred and LIBNL_NEEDS_ADDR_CACHING_WORKAROUND */
-#include <config.h>
-
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <linux/types.h>
-#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-#include <linux/if.h>
-#include <linux/unistd.h>
-#include <unistd.h>
-#include <netlink/netlink.h>
-#include <netlink/object.h>
-#include <netlink/route/addr.h>
-#include <netlink/route/rtnl.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include "nm-netlink-compat.h"
-#include "nm-netlink-monitor.h"
-#include "nm-logging.h"
-
-#define EVENT_CONDITIONS ((GIOCondition) (G_IO_IN | G_IO_PRI))
-#define ERROR_CONDITIONS ((GIOCondition) (G_IO_ERR | G_IO_NVAL))
-#define DISCONNECT_CONDITIONS ((GIOCondition) (G_IO_HUP))
-
-#define NM_NETLINK_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NM_TYPE_NETLINK_MONITOR, \
- NMNetlinkMonitorPrivate))
-
-typedef struct {
- /* Async event listener connection */
- struct nl_sock *nlh_event;
- GIOChannel * io_channel;
- guint event_id;
-
- /* Sync/blocking request/response connection */
- struct nl_sock *nlh_sync;
- struct nl_cache * link_cache;
-
- guint request_status_id;
-
- GHashTable *subscriptions;
-} NMNetlinkMonitorPrivate;
-
-enum {
- NOTIFICATION = 0,
- CARRIER_ON,
- CARRIER_OFF,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-G_DEFINE_TYPE (NMNetlinkMonitor, nm_netlink_monitor, G_TYPE_OBJECT);
-
-/****************************************************************/
-
-static gboolean
-detach_monitor (gpointer data)
-{
- nm_log_warn (LOGD_HW, "detaching netlink event monitor");
- nm_netlink_monitor_detach (NM_NETLINK_MONITOR (data));
- return FALSE;
-}
-
-static void
-log_error_limited (NMNetlinkMonitor *monitor, guint32 code, const char *fmt, ...)
-{
- static time_t rl_time = 0;
- static guint32 rl_code = 0;
- static guint32 rl_count = 0;
- va_list args;
- char *msg;
- time_t now;
-
- g_return_if_fail (monitor != NULL);
-
- now = time (NULL);
-
- if ((code != rl_code) || (now > rl_time + 10)) {
- va_start (args, fmt);
- msg = g_strdup_vprintf (fmt, args);
- va_end (args);
-
- nm_log_warn (LOGD_HW, "error monitoring device for netlink events: %s\n", msg);
- g_free (msg);
-
- rl_time = now;
- rl_code = code;
- rl_count = 0;
- }
-
- rl_count++;
- if (rl_count > 100) {
- /* Broken drivers will sometimes cause a flood of netlink errors.
- * rh #459205, novell #443429, lp #284507
- */
- nm_log_warn (LOGD_HW, "excessive netlink errors ocurred, disabling netlink monitor.");
- nm_log_warn (LOGD_HW, "link change events will not be processed.");
- g_idle_add_full (G_PRIORITY_HIGH, detach_monitor, monitor, NULL);
- }
-}
-
-/****************************************************************/
-
-static void
-link_msg_handler (struct nl_object *obj, void *arg)
-{
- NMNetlinkMonitor *self = NM_NETLINK_MONITOR (arg);
- struct rtnl_link *filter;
- struct rtnl_link *link_obj;
- guint flags;
- guint ifidx;
-
- filter = rtnl_link_alloc ();
- if (!filter) {
- log_error_limited (self, NM_NETLINK_MONITOR_ERROR_BAD_ALLOC,
- _("error processing netlink message: %s"),
- nl_geterror (ENOMEM));
- return;
- }
-
- /* Ensure it's a link object */
- if (nl_object_match_filter (obj, OBJ_CAST (filter)) == 0) {
- rtnl_link_put (filter);
- return;
- }
-
- link_obj = (struct rtnl_link *) obj;
- flags = rtnl_link_get_flags (link_obj);
- ifidx = rtnl_link_get_ifindex (link_obj);
-
- nm_log_dbg (LOGD_HW, "netlink link message: iface idx %d flags 0x%X", ifidx, flags);
-
- /* IFF_LOWER_UP is the indicator of carrier status since kernel commit
- * b00055aacdb172c05067612278ba27265fcd05ce in 2.6.17.
- */
- if (flags & IFF_LOWER_UP)
- g_signal_emit (self, signals[CARRIER_ON], 0, ifidx);
- else
- g_signal_emit (self, signals[CARRIER_OFF], 0, ifidx);
-
- rtnl_link_put (filter);
-}
-
-static int
-event_msg_recv (struct nl_msg *msg, void *arg)
-{
- struct nl_sock *nlh = arg;
- struct nlmsghdr *hdr = nlmsg_hdr (msg);
- struct ucred *creds = nlmsg_get_creds (msg);
- const struct sockaddr_nl *snl;
- guint32 local_port;
- gboolean accept_msg = FALSE;
-
- /* Only messages sent from the kernel */
- if (!creds || creds->uid != 0) {
- nm_log_dbg (LOGD_HW, "ignoring netlink message from UID %d",
- creds ? creds->uid : -1);
- return NL_SKIP;
- }
-
- snl = nlmsg_get_src (msg);
- g_assert (snl);
-
- /* Accept any messages from the kernel */
- if (hdr->nlmsg_pid == 0 || snl->nl_pid == 0)
- accept_msg = TRUE;
-
- /* And any multicast message directed to our netlink PID, since multicast
- * currently requires CAP_ADMIN to use.
- */
- local_port = nl_socket_get_local_port (nlh);
- if ((hdr->nlmsg_pid == local_port) && snl->nl_groups)
- accept_msg = TRUE;
-
- if (accept_msg == FALSE) {
- nm_log_dbg (LOGD_HW, "ignoring netlink message from PID %d (local PID %d, multicast %d)",
- hdr->nlmsg_pid,
- local_port,
- (hdr->nlmsg_flags & NLM_F_MULTI));
- return NL_SKIP;
- }
-
- return NL_OK;
-}
-
-static int
-event_msg_ready (struct nl_msg *msg, void *arg)
-{
- NMNetlinkMonitor *self = NM_NETLINK_MONITOR (arg);
-
- /* By the time the message gets here we've already checked the sender
- * and we're sure it's safe to parse this message.
- */
-
- /* Let clients handle generic messages */
- g_signal_emit (self, signals[NOTIFICATION], 0, msg);
-
- /* Parse carrier messages */
- nl_msg_parse (msg, &link_msg_handler, self);
-
- return NL_OK;
-}
-
-static gboolean
-event_handler (GIOChannel *channel,
- GIOCondition io_condition,
- gpointer user_data)
-{
- NMNetlinkMonitor *self = (NMNetlinkMonitor *) user_data;
- NMNetlinkMonitorPrivate *priv;
- int err;
-
- g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), TRUE);
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
- g_return_val_if_fail (priv->event_id > 0, TRUE);
-
- if (io_condition & ERROR_CONDITIONS) {
- const char *err_msg = _("error occurred while waiting for data on socket");
- int err_code = 0;
- socklen_t err_len = sizeof (err_code);
-
- /* Grab error information */
- if (getsockopt (g_io_channel_unix_get_fd (channel),
- SOL_SOCKET, SO_ERROR,
- (void *) &err_code, &err_len) == 0)
- err_msg = strerror (err_code);
-
- log_error_limited (self, NM_NETLINK_MONITOR_ERROR_WAITING_FOR_SOCKET_DATA, "%s", err_msg);
- return TRUE;
- } else if (io_condition & DISCONNECT_CONDITIONS)
- return FALSE;
-
- g_return_val_if_fail (!(io_condition & ~EVENT_CONDITIONS), FALSE);
-
- /* Process the netlink messages */
- err = nl_recvmsgs_default (priv->nlh_event);
- if (err < 0) {
- log_error_limited (self, NM_NETLINK_MONITOR_ERROR_PROCESSING_MESSAGE,
- _("error processing netlink message: %s"),
- nl_geterror (err));
- }
-
- return TRUE;
-}
-
-static gboolean
-nlh_setup (struct nl_sock *nlh,
- nl_recvmsg_msg_cb_t valid_func,
- gpointer cb_data,
- GError **error)
-{
- int err;
-
- nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, cb_data);
-
- if (valid_func)
- nl_socket_modify_cb (nlh, NL_CB_VALID, NL_CB_CUSTOM, valid_func, cb_data);
-
- err = nl_connect (nlh, NETLINK_ROUTE);
- if (err < 0) {
- g_set_error (error, NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT,
- _("unable to connect to netlink for monitoring link status: %s"),
- nl_geterror (err));
- return FALSE;
- }
-
- /* Enable unix socket peer credentials which we use for verifying that the
- * sender of the message is actually the kernel.
- */
- if (nl_socket_set_passcred (nlh, 1) < 0) {
- g_set_error (error, NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT,
- _("unable to enable netlink handle credential passing: %s"),
- nl_geterror (err));
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-event_connection_setup (NMNetlinkMonitor *self, GError **error)
-{
- NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
- GError *channel_error = NULL;
- GIOFlags channel_flags;
- int fd;
-
- g_return_val_if_fail (priv->io_channel == NULL, FALSE);
-
- /* Set up the event listener connection */
- priv->nlh_event = nl_socket_alloc ();
- if (!priv->nlh_event) {
- g_set_error (error, NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE,
- _("unable to allocate netlink handle for monitoring link status: %s"),
- nl_geterror (ENOMEM));
- goto error;
- }
-
- if (!nlh_setup (priv->nlh_event, event_msg_ready, self, error))
- goto error;
-
- nl_socket_disable_seq_check (priv->nlh_event);
-
- /* Subscribe to the LINK group for internal carrier signals */
- if (!nm_netlink_monitor_subscribe (self, RTNLGRP_LINK, error))
- goto error;
-
- fd = nl_socket_get_fd (priv->nlh_event);
- priv->io_channel = g_io_channel_unix_new (fd);
-
- g_io_channel_set_encoding (priv->io_channel, NULL, &channel_error);
- /* Encoding is NULL, so no conversion error can possibly occur */
- g_assert (channel_error == NULL);
-
- g_io_channel_set_close_on_unref (priv->io_channel, TRUE);
- channel_flags = g_io_channel_get_flags (priv->io_channel);
- channel_error = NULL;
- g_io_channel_set_flags (priv->io_channel,
- channel_flags | G_IO_FLAG_NONBLOCK,
- &channel_error);
- if (channel_error != NULL) {
- g_propagate_error (error, channel_error);
- goto error;
- }
-
- return TRUE;
-
-error:
- if (priv->io_channel)
- nm_netlink_monitor_close_connection (self);
-
- if (priv->nlh_event) {
- nl_socket_free (priv->nlh_event);
- priv->nlh_event = NULL;
- }
-
- return FALSE;
-}
-
-static gboolean
-sync_connection_setup (NMNetlinkMonitor *self, GError **error)
-{
- NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-#ifdef LIBNL_NEEDS_ADDR_CACHING_WORKAROUND
- struct nl_cache *addr_cache;
-#endif
- int err;
-
- /* Set up the event listener connection */
- priv->nlh_sync = nl_socket_alloc ();
- if (!priv->nlh_sync) {
- g_set_error (error, NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE,
- _("unable to allocate netlink handle for monitoring link status: %s"),
- nl_geterror (ENOMEM));
- goto error;
- }
-
- if (!nlh_setup (priv->nlh_sync, NULL, self, error))
- goto error;
-
-#ifdef LIBNL_NEEDS_ADDR_CACHING_WORKAROUND
- /* Work around apparent libnl bug; rtnl_addr requires that all
- * addresses have the "peer" attribute set in order to be compared
- * for equality, but this attribute is not normally set. As a
- * result, most addresses will not compare as equal even to
- * themselves, busting caching.
- */
- rtnl_addr_alloc_cache (priv->nlh_sync, &addr_cache);
- g_warn_if_fail (addr_cache != NULL);
- nl_cache_get_ops (addr_cache)->co_obj_ops->oo_id_attrs &= ~0x80;
- nl_cache_free (addr_cache);
-#endif
-
- err = rtnl_link_alloc_cache (priv->nlh_sync, AF_UNSPEC, &priv->link_cache);
- if (err < 0) {
- g_set_error (error, NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_LINK_CACHE,
- _("unable to allocate netlink link cache for monitoring link status: %s"),
- nl_geterror (err));
- goto error;
- }
- nl_cache_mngt_provide (priv->link_cache);
-
- return TRUE;
-
-error:
- if (priv->link_cache) {
- nl_cache_free (priv->link_cache);
- priv->link_cache = NULL;
- }
-
- if (priv->nlh_sync) {
- nl_socket_free (priv->nlh_sync);
- priv->nlh_sync = NULL;
- }
-
- return FALSE;
-}
-
-gboolean
-nm_netlink_monitor_open_connection (NMNetlinkMonitor *self, GError **error)
-{
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE);
-
- if (!event_connection_setup (self, error))
- return FALSE;
-
- if (!sync_connection_setup (self, error))
- return FALSE;
-
- return TRUE;
-}
-
-void
-nm_netlink_monitor_close_connection (NMNetlinkMonitor *self)
-{
- NMNetlinkMonitorPrivate *priv;
-
- g_return_if_fail (NM_IS_NETLINK_MONITOR (self));
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
- g_return_if_fail (priv->io_channel != NULL);
-
- if (priv->event_id)
- nm_netlink_monitor_detach (self);
-
- g_io_channel_shutdown (priv->io_channel,
- TRUE /* flush pending data */,
- NULL);
- g_io_channel_unref (priv->io_channel);
- priv->io_channel = NULL;
-}
-
-void
-nm_netlink_monitor_attach (NMNetlinkMonitor *self)
-{
- NMNetlinkMonitorPrivate *priv;
-
- g_return_if_fail (NM_IS_NETLINK_MONITOR (self));
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
- g_return_if_fail (priv->nlh_event != NULL);
- g_return_if_fail (priv->event_id == 0);
-
- priv->event_id = g_io_add_watch (priv->io_channel,
- (EVENT_CONDITIONS | ERROR_CONDITIONS | DISCONNECT_CONDITIONS),
- event_handler, self);
-}
-
-void
-nm_netlink_monitor_detach (NMNetlinkMonitor *self)
-{
- NMNetlinkMonitorPrivate *priv;
-
- g_return_if_fail (NM_IS_NETLINK_MONITOR (self));
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
- g_return_if_fail (priv->event_id > 0);
-
- g_source_remove (priv->event_id);
- priv->event_id = 0;
-}
-
-static int
-get_subs (NMNetlinkMonitor *self, int group)
-{
- NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- return GPOINTER_TO_INT (g_hash_table_lookup (priv->subscriptions,
- GINT_TO_POINTER (group)));
-}
-
-static void
-set_subs (NMNetlinkMonitor *self, int group, int new_subs)
-{
- NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- g_hash_table_insert (priv->subscriptions,
- GINT_TO_POINTER (group),
- GINT_TO_POINTER (new_subs));
-}
-
-gboolean
-nm_netlink_monitor_subscribe (NMNetlinkMonitor *self, int group, GError **error)
-{
- NMNetlinkMonitorPrivate *priv;
- int subs, err;
-
- g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE);
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- if (!priv->nlh_event) {
- if (!nm_netlink_monitor_open_connection (self, error))
- return FALSE;
- }
-
- subs = get_subs (self, group) + 1;
- if (subs == 1) {
- err = nl_socket_add_membership (priv->nlh_event, group);
- if (err < 0) {
- g_set_error (error, NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_NETLINK_JOIN_GROUP,
- _("unable to join netlink group: %s"),
- nl_geterror (err));
- return FALSE;
- }
- }
-
- /* Update # of subscriptions for this group */
- set_subs (self, group, subs);
-
- return TRUE;
-}
-
-void
-nm_netlink_monitor_unsubscribe (NMNetlinkMonitor *self, int group)
-{
- NMNetlinkMonitorPrivate *priv;
- int subs;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_NETLINK_MONITOR (self));
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
- g_return_if_fail (priv->nlh_event != NULL);
-
- subs = get_subs (self, group) - 1;
- if (subs == 0)
- nl_socket_drop_membership (priv->nlh_event, group);
-
- /* Update # of subscriptions for this group */
- set_subs (self, group, subs);
-}
-
-/***************************************************************/
-
-gboolean
-nm_netlink_monitor_request_ip6_info (NMNetlinkMonitor *self, GError **error)
-{
- NMNetlinkMonitorPrivate *priv;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE);
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- /* FIXME: nl_rtgen_request() gets the return value screwed up with
- * libnl-1.1; revisit this and return a proper error when we port to
- * a later libnl.
- */
- nl_rtgen_request (priv->nlh_event, RTM_GETLINK, AF_INET6, NLM_F_DUMP);
-
- return TRUE;
-}
-
-gboolean
-nm_netlink_monitor_request_bridge_info (NMNetlinkMonitor *self, GError **error)
-{
- NMNetlinkMonitorPrivate *priv;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE);
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- /* FIXME: nl_rtgen_request() gets the return value screwed up with
- * libnl-1.1; revisit this and return a proper error when we port to
- * a later libnl.
- */
- nl_rtgen_request (priv->nlh_event, RTM_GETLINK, AF_BRIDGE, NLM_F_DUMP);
-
- return TRUE;
-}
-
-static gboolean
-deferred_emit_carrier_state (gpointer user_data)
-{
- NMNetlinkMonitor *self = NM_NETLINK_MONITOR (user_data);
- NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
- int err;
-
- priv->request_status_id = 0;
-
- /* Update the link cache with latest state, and if there are no errors
- * emit the link states for all the interfaces in the cache.
- */
- err = nl_cache_refill (priv->nlh_sync, priv->link_cache);
- if (err < 0)
- nm_log_err (LOGD_HW, "error updating link cache: %s", nl_geterror (err));
- else
- nl_cache_foreach_filter (priv->link_cache, NULL, link_msg_handler, self);
-
- return FALSE;
-}
-
-void
-nm_netlink_monitor_request_status (NMNetlinkMonitor *self)
-{
- NMNetlinkMonitorPrivate *priv;
-
- g_return_if_fail (NM_IS_NETLINK_MONITOR (self));
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- /* Schedule the carrier state emission */
- if (!priv->request_status_id)
- priv->request_status_id = g_idle_add (deferred_emit_carrier_state, self);
-}
-
-typedef struct {
- NMNetlinkMonitor *self;
- struct rtnl_link *filter;
- GError *error;
- guint32 flags;
-} GetFlagsInfo;
-
-static void
-get_flags_sync_cb (struct nl_object *obj, void *arg)
-{
- GetFlagsInfo *info = arg;
-
- /* Ensure this cache item matches our filter */
- if (nl_object_match_filter (obj, OBJ_CAST (info->filter)) != 0)
- info->flags = rtnl_link_get_flags ((struct rtnl_link *) obj);
-}
-
-gboolean
-nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self,
- guint32 ifindex,
- guint32 *ifflags,
- GError **error)
-{
- NMNetlinkMonitorPrivate *priv;
- GetFlagsInfo info;
- struct rtnl_link *filter;
- int err;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE);
- g_return_val_if_fail (ifflags != NULL, FALSE);
-
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- /* Update the link cache with the latest information */
- err = nl_cache_refill (priv->nlh_sync, priv->link_cache);
- if (err < 0) {
- g_set_error (error,
- NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE,
- _("error updating link cache: %s"),
- nl_geterror (err));
- return FALSE;
- }
-
- /* HACK: Apparently to get it working we have to refill the cache twice;
- * otherwise some kernels (or maybe libnl?) only send a few of the
- * interfaces in the refill request.
- */
- if (nl_cache_refill (priv->nlh_sync, priv->link_cache)) {
- g_set_error (error,
- NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE,
- _("error updating link cache: %s"),
- nl_geterror (err));
- return FALSE;
- }
-
- /* Set up the filter */
- filter = rtnl_link_alloc ();
- if (!filter) {
- g_set_error (error,
- NM_NETLINK_MONITOR_ERROR,
- NM_NETLINK_MONITOR_ERROR_BAD_ALLOC,
- _("error processing netlink message: %s"),
- nl_geterror (err));
- return FALSE;
- }
- rtnl_link_set_ifindex (filter, ifindex);
-
- memset (&info, 0, sizeof (info));
- info.self = self;
- info.filter = filter;
- info.error = NULL;
- nl_cache_foreach_filter (priv->link_cache, NULL, get_flags_sync_cb, &info);
-
- rtnl_link_put (filter);
-
- if (info.error) {
- if (error)
- *error = info.error;
- else
- g_error_free (info.error);
- return FALSE;
- } else
- *ifflags = info.flags;
-
- return TRUE; /* success */
-}
-
-/***************************************************************/
-
-struct nl_sock *
-nm_netlink_get_default_handle (void)
-{
- NMNetlinkMonitor *self;
- struct nl_sock *nlh;
-
- self = nm_netlink_monitor_get ();
- nlh = NM_NETLINK_MONITOR_GET_PRIVATE (self)->nlh_sync;
- g_object_unref (self);
-
- return nlh;
-}
-
-int
-nm_netlink_iface_to_index (const char *iface)
-{
- NMNetlinkMonitor *self;
- NMNetlinkMonitorPrivate *priv;
- int idx;
-
- g_return_val_if_fail (iface != NULL, -1);
-
- self = nm_netlink_monitor_get ();
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- nl_cache_refill (priv->nlh_sync, priv->link_cache);
- idx = rtnl_link_name2i (priv->link_cache, iface);
- g_object_unref (self);
-
- return idx;
-}
-
-/**
- * nm_netlink_index_to_iface:
- * @idx: kernel interface index
- *
- * Returns: the device name corresponding to the kernel interface index; caller
- * owns returned value and must free it when it is no longer required
- **/
-#define MAX_IFACE_LEN 33
-char *
-nm_netlink_index_to_iface (int idx)
-{
- NMNetlinkMonitor *self;
- NMNetlinkMonitorPrivate *priv;
- char *buf = NULL;
-
- g_return_val_if_fail (idx >= 0, NULL);
-
- self = nm_netlink_monitor_get ();
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- buf = g_malloc0 (MAX_IFACE_LEN);
- g_assert (buf);
-
- nl_cache_refill (priv->nlh_sync, priv->link_cache);
- if (!rtnl_link_i2name (priv->link_cache, idx, buf, MAX_IFACE_LEN - 1)) {
- nm_log_warn (LOGD_HW, "(%d) failed to find interface name for index", idx);
- g_free (buf);
- buf = NULL;
- }
-
- g_object_unref (self);
- return buf;
-}
-
-struct rtnl_link *
-nm_netlink_index_to_rtnl_link (int idx)
-{
- NMNetlinkMonitor *self;
- NMNetlinkMonitorPrivate *priv;
- struct rtnl_link *ret = NULL;
-
- if (idx <= 0)
- return NULL;
-
- self = nm_netlink_monitor_get ();
- priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- nl_cache_refill (priv->nlh_sync, priv->link_cache);
- ret = rtnl_link_get (priv->link_cache, idx);
- g_object_unref (self);
-
- return ret;
-}
-
-/***************************************************************/
-
-NMNetlinkMonitor *
-nm_netlink_monitor_get (void)
-{
- static NMNetlinkMonitor *singleton = NULL;
- GError *error = NULL;
-
- if (!singleton) {
- singleton = (NMNetlinkMonitor *) g_object_new (NM_TYPE_NETLINK_MONITOR, NULL);
- g_return_val_if_fail (singleton != NULL, NULL);
-
- if (nm_netlink_monitor_open_connection (singleton, &error)) {
- nm_netlink_monitor_attach (singleton);
- /* Request initial status of cards */
- nm_netlink_monitor_request_status (singleton);
- } else {
- nm_log_warn (LOGD_HW, "Failed to connect to netlink: (%d) %s",
- error ? error->code : 0,
- (error && error->message) ? error->message : "(unknown)");
- g_clear_error (&error);
-
- g_object_unref (singleton);
- singleton = NULL;
- }
- } else
- g_object_ref (singleton);
-
- return singleton;
-}
-
-static void
-nm_netlink_monitor_init (NMNetlinkMonitor *self)
-{
- NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-
- priv->subscriptions = g_hash_table_new (g_direct_hash, g_direct_equal);
-}
-
-static void
-finalize (GObject *object)
-{
- NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (object);
-
- if (priv->request_status_id)
- g_source_remove (priv->request_status_id);
-
- if (priv->io_channel)
- nm_netlink_monitor_close_connection (NM_NETLINK_MONITOR (object));
-
- if (priv->link_cache) {
- nl_cache_free (priv->link_cache);
- priv->link_cache = NULL;
- }
-
- if (priv->nlh_event) {
- nl_socket_free (priv->nlh_event);
- priv->nlh_event = NULL;
- }
-
- if (priv->nlh_sync) {
- nl_socket_free (priv->nlh_sync);
- priv->nlh_sync = NULL;
- }
-
- g_hash_table_destroy (priv->subscriptions);
-
- G_OBJECT_CLASS (nm_netlink_monitor_parent_class)->finalize (object);
-}
-
-static void
-nm_netlink_monitor_class_init (NMNetlinkMonitorClass *monitor_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (monitor_class);
-
- g_type_class_add_private (monitor_class, sizeof (NMNetlinkMonitorPrivate));
-
- /* Virtual methods */
- object_class->finalize = finalize;
-
- /* Signals */
- signals[NOTIFICATION] =
- g_signal_new ("notification",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMNetlinkMonitorClass, notification),
- NULL, NULL, g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- signals[CARRIER_ON] =
- g_signal_new ("carrier-on",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMNetlinkMonitorClass, carrier_on),
- NULL, NULL, g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- signals[CARRIER_OFF] =
- g_signal_new ("carrier-off",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMNetlinkMonitorClass, carrier_off),
- NULL, NULL, g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-}
-
-GQuark
-nm_netlink_monitor_error_quark (void)
-{
- static GQuark error_quark = 0;
-
- if (G_UNLIKELY (error_quark == 0))
- error_quark = g_quark_from_static_string ("nm-netlink-monitor-error-quark");
- return error_quark;
-}
-
diff --git a/src/nm-netlink-monitor.h b/src/nm-netlink-monitor.h
deleted file mode 100644
index b9468fdc8..000000000
--- a/src/nm-netlink-monitor.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2005 - 2010 Red Hat, Inc.
- * Copyright (C) 2005 - 2008 Novell, Inc.
- * Copyright (C) 2005 Ray Strode
- */
-
-#ifndef NM_NETLINK_MONITOR_H
-#define NM_NETLINK_MONITOR_H
-
-#include <glib-object.h>
-#include <netlink/netlink.h>
-#include <netlink/route/link.h>
-
-#define NM_TYPE_NETLINK_MONITOR (nm_netlink_monitor_get_type ())
-#define NM_NETLINK_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_NETLINK_MONITOR, NMNetlinkMonitor))
-#define NM_NETLINK_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_NETLINK_MONITOR, NMNetlinkMonitorClass))
-#define NM_IS_NETLINK_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_NETLINK_MONITOR))
-#define NM_IS_NETLINK_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_NETLINK_MONITOR))
-#define NM_NETLINK_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_NETLINK_MONITOR, NMNetlinkMonitorClass))
-
-typedef enum {
- NM_NETLINK_MONITOR_ERROR_GENERIC = 0,
- NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE,
- NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT,
- NM_NETLINK_MONITOR_ERROR_NETLINK_JOIN_GROUP,
- NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_LINK_CACHE,
- NM_NETLINK_MONITOR_ERROR_PROCESSING_MESSAGE,
- NM_NETLINK_MONITOR_ERROR_BAD_ALLOC,
- NM_NETLINK_MONITOR_ERROR_WAITING_FOR_SOCKET_DATA,
- NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE
-} NMNetlinkMonitorError;
-
-typedef struct {
- GObject parent;
-} NMNetlinkMonitor;
-
-typedef struct {
- GObjectClass parent_class;
-
- /* Signals */
- void (*notification) (NMNetlinkMonitor *monitor, struct nl_msg *msg);
- void (*carrier_on) (NMNetlinkMonitor *monitor, int index);
- void (*carrier_off) (NMNetlinkMonitor *monitor, int index);
-} NMNetlinkMonitorClass;
-
-
-#define NM_NETLINK_MONITOR_ERROR (nm_netlink_monitor_error_quark ())
-GType nm_netlink_monitor_get_type (void) G_GNUC_CONST;
-GQuark nm_netlink_monitor_error_quark (void) G_GNUC_CONST;
-
-NMNetlinkMonitor *nm_netlink_monitor_get (void);
-
-gboolean nm_netlink_monitor_open_connection (NMNetlinkMonitor *monitor,
- GError **error);
-void nm_netlink_monitor_close_connection (NMNetlinkMonitor *monitor);
-void nm_netlink_monitor_attach (NMNetlinkMonitor *monitor);
-void nm_netlink_monitor_detach (NMNetlinkMonitor *monitor);
-
-gboolean nm_netlink_monitor_subscribe (NMNetlinkMonitor *monitor,
- int group,
- GError **error);
-void nm_netlink_monitor_unsubscribe (NMNetlinkMonitor *monitor,
- int group);
-
-gboolean nm_netlink_monitor_request_ip6_info (NMNetlinkMonitor *monitor,
- GError **error);
-
-gboolean nm_netlink_monitor_request_bridge_info (NMNetlinkMonitor *monitor,
- GError **error);
-
-void nm_netlink_monitor_request_status (NMNetlinkMonitor *monitor);
-
-gboolean nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *monitor,
- guint32 ifindex,
- guint32 *ifflags,
- GError **error);
-
-#include "nm-netlink-compat.h"
-
-/* Generic utility functions */
-int nm_netlink_iface_to_index (const char *iface);
-char * nm_netlink_index_to_iface (int idx);
-struct rtnl_link *nm_netlink_index_to_rtnl_link (int idx);
-struct nl_sock * nm_netlink_get_default_handle (void);
-
-#endif /* NM_NETLINK_MONITOR_H */
diff --git a/src/nm-netlink-utils.c b/src/nm-netlink-utils.c
deleted file mode 100644
index 0ec538975..000000000
--- a/src/nm-netlink-utils.c
+++ /dev/null
@@ -1,465 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#include "logging/nm-logging.h"
-#include "nm-netlink-utils.h"
-#include "nm-netlink-monitor.h"
-#include "nm-netlink-compat.h"
-
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <netlink/route/addr.h>
-
-typedef struct {
- int ifindex;
- int family;
- void *addr;
- int addrlen;
- int prefix;
- gboolean found;
-} FindAddrInfo;
-
-static void
-find_one_address (struct nl_object *object, void *user_data)
-{
- FindAddrInfo *info = user_data;
- struct rtnl_addr *addr = (struct rtnl_addr *) object;
- struct nl_addr *local;
- void *binaddr;
-
- if (info->found)
- return;
-
- if (rtnl_addr_get_ifindex (addr) != info->ifindex)
- return;
- if (rtnl_addr_get_family (addr) != info->family)
- return;
-
- if (rtnl_addr_get_prefixlen (addr) != info->prefix)
- return;
-
- local = rtnl_addr_get_local (addr);
- if (nl_addr_get_family (local) != info->family)
- return;
- if (nl_addr_get_len (local) != info->addrlen)
- return;
- binaddr = nl_addr_get_binary_addr (local);
- if (binaddr) {
- if (memcmp (binaddr, info->addr, info->addrlen) == 0)
- info->found = TRUE; /* Yay, found it */
- }
-}
-
-/**
- * nm_netlink_find_address:
- * @ifindex: interface index
- * @family: address family, either AF_INET or AF_INET6
- * @addr: binary address, either struct in_addr* or struct in6_addr*
- * @prefix: prefix length
- *
- * Searches for a matching address on the given interface.
- *
- * Returns: %TRUE if the given address was found on the interface, %FALSE if it
- * was not found or an error occurred.
- **/
-gboolean
-nm_netlink_find_address (int ifindex,
- int family,
- void *addr, /* struct in_addr or struct in6_addr */
- int prefix)
-{
- struct nl_sock *nlh = NULL;
- struct nl_cache *cache = NULL;
- FindAddrInfo info;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
- g_return_val_if_fail (family == AF_INET || family == AF_INET6, FALSE);
- g_return_val_if_fail (addr != NULL, FALSE);
- g_return_val_if_fail (prefix >= 0, FALSE);
-
- memset (&info, 0, sizeof (info));
- info.ifindex = ifindex;
- info.family = family;
- info.prefix = prefix;
- info.addr = addr;
- if (family == AF_INET)
- info.addrlen = sizeof (struct in_addr);
- else if (family == AF_INET6)
- info.addrlen = sizeof (struct in6_addr);
- else
- g_assert_not_reached ();
-
- nlh = nm_netlink_get_default_handle ();
- if (nlh) {
- rtnl_addr_alloc_cache(nlh, &cache);
- if (cache) {
- nl_cache_mngt_provide (cache);
- nl_cache_foreach (cache, find_one_address, &info);
- nl_cache_free (cache);
- }
- }
- return info.found;
-}
-
-struct rtnl_route *
-nm_netlink_route_new (int ifindex,
- int family,
- int mss,
- ...)
-{
- va_list var_args;
- struct rtnl_route *route;
- NmNlProp prop = NMNL_PROP_INVALID;
- int value;
-
- route = rtnl_route_alloc ();
- g_return_val_if_fail (route != NULL, NULL);
-
- if (ifindex > 0)
- rtnl_route_set_oif (route, ifindex);
- if (family != AF_UNSPEC)
- rtnl_route_set_family (route, family);
- if (mss > 0)
- rtnl_route_set_metric (route, RTAX_ADVMSS, mss);
-
- va_start (var_args, mss);
- prop = va_arg (var_args, NmNlProp);
- while (prop != NMNL_PROP_INVALID) {
- value = va_arg (var_args, int);
-
- if (prop == NMNL_PROP_PROT && value != RTPROT_UNSPEC)
- rtnl_route_set_protocol (route, value);
- else if (prop == NMNL_PROP_TABLE && value != RT_TABLE_UNSPEC)
- rtnl_route_set_table (route, value);
- else if (prop == NMNL_PROP_SCOPE && value != RT_SCOPE_NOWHERE)
- rtnl_route_set_scope (route, value);
- else if (prop == NMNL_PROP_PRIO && value > 0)
- rtnl_route_set_priority (route, value);
-
- prop = va_arg (var_args, NmNlProp);
- }
- va_end (var_args);
-
- return route;
-}
-
-/**
- * _route_add:
- * @route: the route to add
- * @family: address family, either %AF_INET or %AF_INET6
- * @dest: the route destination address, either a struct in_addr or a struct
- * in6_addr depending on @family
- * @dest_prefix: the CIDR prefix of @dest
- * @gateway: the gateway through which to reach @dest, if any; given as a
- * struct in_addr or struct in6_addr depending on @family
- * @flags: flags to pass to rtnl_route_add(), eg %NLM_F_REPLACE
- *
- * Returns: zero if succeeded or the netlink error otherwise.
- **/
-static int
-_route_add (struct rtnl_route *route,
- int family,
- const void *dest, /* in_addr or in6_addr */
- int dest_prefix,
- const void *gateway, /* in_addr or in6_addr */
- int flags)
-{
- struct nl_sock *sk;
- struct nl_addr *dest_addr, *gw_addr;
- void *tmp_addr;
- int addrlen, err, log;
-
- if (family == AF_INET) {
- addrlen = sizeof (struct in_addr);
- log = LOGD_IP4;
- } else if (family == AF_INET6) {
- addrlen = sizeof (struct in6_addr);
- log = LOGD_IP6;
- } else
- g_assert_not_reached ();
-
- sk = nm_netlink_get_default_handle ();
-
- /* Build up the destination address */
- if (dest) {
- /* Copy to preserve const */
- tmp_addr = g_malloc0 (addrlen);
- memcpy (tmp_addr, dest, addrlen);
-
- dest_addr = nl_addr_build (family, tmp_addr, addrlen);
- g_free (tmp_addr);
-
- g_return_val_if_fail (dest_addr != NULL, -NLE_INVAL);
- nl_addr_set_prefixlen (dest_addr, dest_prefix);
-
- rtnl_route_set_dst (route, dest_addr);
- nl_addr_put (dest_addr);
- }
-
- /* Build up the gateway address */
- if (gateway) {
- tmp_addr = g_malloc0 (addrlen);
- memcpy (tmp_addr, gateway, addrlen);
-
- gw_addr = nl_addr_build (family, tmp_addr, addrlen);
- g_free (tmp_addr);
-
- if (gw_addr) {
- nl_addr_set_prefixlen (gw_addr, 0);
- rtnl_route_set_gateway (route, gw_addr);
- rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE);
- nl_addr_put (gw_addr);
- } else
- nm_log_err (LOGD_DEVICE | log, "Invalid gateway");
- }
-
- err = rtnl_route_add (sk, route, flags);
-
- /* LIBNL Bug: Aliased ESRCH */
- if (err == -NLE_FAILURE)
- err = -NLE_OBJ_NOTFOUND;
-
- return err;
-}
-
-/**
- * nm_netlink_route4_add:
- * @route: the route to add
- * @dest: the route destination address in network byte order
- * @dest_prefix: the CIDR prefix of @dest
- * @gateway: the gateway through which to reach @dest, if any, in network byte order
- * @flags: flags to pass to rtnl_route_add(), eg %NLM_F_REPLACE
- *
- * Adds an IPv4 route with the given parameters.
- *
- * Returns: zero if succeeded or the netlink error otherwise.
- **/
-int
-nm_netlink_route4_add (struct rtnl_route *route,
- guint32 *dst,
- int prefix,
- guint32 *gw,
- int flags)
-{
- return _route_add (route, AF_INET, dst, prefix, gw, flags);
-}
-
-/**
- * nm_netlink_route6_add:
- * @route: the route to add
- * @dest: the route destination address
- * @dest_prefix: the CIDR prefix of @dest
- * @gateway: the gateway through which to reach @dest, if any
- * @flags: flags to pass to rtnl_route_add(), eg %NLM_F_REPLACE
- *
- * Adds an IPv6 route with the given parameters.
- *
- * Returns: zero if succeeded or the netlink error otherwise.
- **/
-int
-nm_netlink_route6_add (struct rtnl_route *route,
- const struct in6_addr *dst,
- int prefix,
- const struct in6_addr *gw,
- int flags)
-{
- return _route_add (route, AF_INET6, dst, prefix, gw, flags);
-}
-
-/**
- * nm_netlink_route_delete:
- * @route: the route to delete
- *
- * Returns: %TRUE if the request was successful, %FALSE if it failed
- **/
-gboolean
-nm_netlink_route_delete (struct rtnl_route *route)
-{
- struct nl_sock *nlh;
- int err = 0;
-
- g_return_val_if_fail (route != NULL, FALSE);
-
- nlh = nm_netlink_get_default_handle ();
- err = rtnl_route_delete (nlh, route, 0);
-
- if (err)
- nm_log_dbg (LOGD_IP4 | LOGD_IP6, "%s (%d)", nl_geterror(err), err);
-
- /* Workaround libnl BUG: ESRCH is aliased to generic NLE_FAILURE
- * See: http://git.kernel.org/?p=libs/netlink/libnl.git;a=commit;h=7e9d5f */
- if (err == -NLE_FAILURE)
- err = -NLE_OBJ_NOTFOUND;
-
- return (err && (err != -NLE_OBJ_NOTFOUND) && (err != -NLE_RANGE) ) ? FALSE : TRUE;
-}
-
-
-static void
-dump_route (struct rtnl_route *route)
-{
- char buf6[INET6_ADDRSTRLEN];
- char buf4[INET_ADDRSTRLEN];
- struct nl_addr *nl;
- struct in6_addr *addr6 = NULL;
- struct in_addr *addr4 = NULL;
- int prefixlen = 0;
- const char *sf = "UNSPEC";
- int family = rtnl_route_get_family (route);
- guint32 log_level = LOGD_IP4 | LOGD_IP6;
-
- memset (buf6, 0, sizeof (buf6));
- memset (buf4, 0, sizeof (buf4));
- nl = rtnl_route_get_dst (route);
- if (nl) {
- if (nl_addr_get_family (nl) == AF_INET) {
- addr4 = nl_addr_get_binary_addr (nl);
- if (addr4)
- inet_ntop (AF_INET, addr4, &buf4[0], sizeof (buf4));
- } else if (nl_addr_get_family (nl) == AF_INET6) {
- addr6 = nl_addr_get_binary_addr (nl);
- if (addr6)
- inet_ntop (AF_INET6, addr6, &buf6[0], sizeof (buf6));
- }
- prefixlen = nl_addr_get_prefixlen (nl);
- }
-
- if (family == AF_INET) {
- sf = "INET";
- log_level = LOGD_IP4;
- } else if (family == AF_INET6) {
- sf = "INET6";
- log_level = LOGD_IP6;
- }
-
- nm_log_dbg (log_level, " route idx %d family %s (%d) addr %s/%d",
- rtnl_route_get_oif (route),
- sf, family,
- strlen (buf4) ? buf4 : (strlen (buf6) ? buf6 : "<unknown>"),
- prefixlen);
-}
-
-
-typedef struct {
- int ifindex;
- int family;
- int scope;
- gboolean ignore_inet6_ll_mc;
- char *iface;
- NlRouteForeachFunc callback;
- gpointer user_data;
- struct rtnl_route *out_route;
-} ForeachRouteInfo;
-
-static void
-foreach_route_cb (struct nl_object *object, void *user_data)
-{
- ForeachRouteInfo *info = user_data;
- struct rtnl_route *route = (struct rtnl_route *) object;
- struct nl_addr *dst;
-
- if (info->out_route)
- return;
-
- if (nm_logging_level_enabled (LOGL_DEBUG))
- dump_route (route);
-
- if ( info->ifindex > 0
- && rtnl_route_get_oif (route) != info->ifindex)
- return;
-
- if ( info->scope != RT_SCOPE_UNIVERSE
- && rtnl_route_get_scope (route) != info->scope)
- return;
-
- if ( info->family != AF_UNSPEC
- && rtnl_route_get_family (route) != info->family)
- return;
-
- dst = rtnl_route_get_dst (route);
-
- /* Check for IPv6 LL and MC routes that might need to be ignored */
- if ( (info->family == AF_INET6 || info->family == AF_UNSPEC)
- && (rtnl_route_get_family (route) == AF_INET6)) {
- struct in6_addr *addr = NULL;
-
- if (dst)
- addr = nl_addr_get_binary_addr (dst);
- if (addr) {
- if ( IN6_IS_ADDR_LINKLOCAL (addr)
- || IN6_IS_ADDR_MC_LINKLOCAL (addr)
- || (IN6_IS_ADDR_MULTICAST (addr) && (nl_addr_get_prefixlen (dst) == 8)))
- return;
- }
- }
-
- info->out_route = info->callback (route, dst, info->iface, info->user_data);
- if (info->out_route) {
- /* Ref the route so it sticks around after the cache is cleared */
- rtnl_route_get (info->out_route);
- }
-}
-
-/**
- * nm_netlink_foreach_route:
- * @ifindex: the interface index to filter routes for
- * @family: the address family to filter routes for
- * @scope: route scope, eg RT_SCOPE_LINK
- * @ignore_inet6_ll_mc: if %TRUE ignore IPv6 link-local and multi-cast routes
- * @callback: function called when a route matches the filter
- * @user_data: data passed to @callback
- *
- * Filters each route in the routing table against the given @ifindex and
- * @family (if given) and calls @callback for each matching route.
- *
- * Returns: a route if @callback returned one; the caller must dispose of the
- * route using rtnl_route_put() when it is no longer required.
- **/
-struct rtnl_route *
-nm_netlink_foreach_route (int ifindex,
- int family,
- int scope,
- gboolean ignore_inet6_ll_mc,
- NlRouteForeachFunc callback,
- gpointer user_data)
-{
- struct nl_cache *cache;
- ForeachRouteInfo info;
-
- memset (&info, 0, sizeof (info));
- info.ifindex = ifindex;
- info.family = family;
- info.scope = scope;
- info.ignore_inet6_ll_mc = ignore_inet6_ll_mc;
- info.callback = callback;
- info.user_data = user_data;
- info.iface = nm_netlink_index_to_iface (ifindex);
-
- rtnl_route_alloc_cache (nm_netlink_get_default_handle (), family, 0, &cache);
- g_warn_if_fail (cache != NULL);
- if (cache) {
- nl_cache_foreach (cache, foreach_route_cb, &info);
- nl_cache_free (cache);
- }
- g_free (info.iface);
- return info.out_route;
-}
-
-
diff --git a/src/nm-netlink-utils.h b/src/nm-netlink-utils.h
deleted file mode 100644
index 1f7c67962..000000000
--- a/src/nm-netlink-utils.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#ifndef NM_NETLINK_UTILS_H
-#define NM_NETLINK_UTILS_H
-
-#include <netlink/route/route.h>
-
-gboolean nm_netlink_find_address (int ifindex,
- int family,
- void *addr, /* struct in_addr or struct in6_addr */
- int prefix_);
-
-typedef enum {
- NMNL_PROP_INVALID = 0,
- NMNL_PROP_PROT,
- NMNL_PROP_SCOPE,
- NMNL_PROP_TABLE,
- NMNL_PROP_PRIO,
-} NmNlProp;
-
-struct rtnl_route * nm_netlink_route_new (int ifindex,
- int family,
- int mss,
- ...) __attribute__((__sentinel__));
-
-int nm_netlink_route4_add (struct rtnl_route *route,
- guint32 *dst,
- int prefix,
- guint32 *gw,
- int flags);
-
-int nm_netlink_route6_add (struct rtnl_route *route,
- const struct in6_addr *dst,
- int prefix,
- const struct in6_addr *gw,
- int flags);
-
-gboolean nm_netlink_route_delete (struct rtnl_route *route);
-
-/**
- * NlRouteForeachFunc:
- * @route: the route being processed
- * @dst: the route's destination address
- * @iface: the interface name of the index passed to nm_netlink_foreach_route()
- * @in_family: the address family passed to nm_netlink_foreach_route()
- * @user_data: the user data pointer passed to nm_netlink_foreach_route()
- *
- * Returns: a route to return to the caller of nm_netlink_foreach_route() which
- * terminates routing table iteration, or NULL to continue iterating the
- * routing table.
- **/
-typedef struct rtnl_route * (*NlRouteForeachFunc) (struct rtnl_route *route,
- struct nl_addr *dst,
- const char *iface,
- gpointer user_data);
-
-struct rtnl_route * nm_netlink_foreach_route (int ifindex,
- int family,
- int scope,
- gboolean ignore_inet6_ll_mc,
- NlRouteForeachFunc callback,
- gpointer user_data);
-
-#endif /* NM_NETLINK_UTILS_H */
-
diff --git a/src/nm-policy-hostname.c b/src/nm-policy-hostname.c
deleted file mode 100644
index 0ea161585..000000000
--- a/src/nm-policy-hostname.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2004 - 2012 Red Hat, Inc.
- * Copyright (C) 2007 - 2008 Novell, Inc.
- */
-
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-
-#include <glib.h>
-
-#include "nm-logging.h"
-#include "nm-policy-hostname.h"
-
-/************************************************************************/
-
-struct HostnameThread {
- GThread *thread;
-
-#if GLIB_CHECK_VERSION (2,31,0)
- GMutex lock;
-#else
- GMutex *lock;
-#endif
- gboolean dead;
- int ret;
-
- struct sockaddr_in addr4;
- struct sockaddr_in6 addr6;
- struct sockaddr *addr;
- size_t addr_size;
- char hostname[NI_MAXHOST + 1];
-
- HostnameThreadCallback callback;
- gpointer user_data;
-};
-
-/*
- * GMutex API has changed:
- * http://developer.gnome.org/glib/2.31/glib-Threads.html#GMutex
- * http://developer.gnome.org/glib/2.31/glib-Deprecated-Thread-APIs.html
-*/
-#if GLIB_CHECK_VERSION (2,31,0)
-#define X_MUTEX_LOCK(mutex) g_mutex_lock (&(mutex))
-#define X_MUTEX_UNLOCK(mutex) g_mutex_unlock (&(mutex))
-#define X_MUTEX_INIT(mutex) g_mutex_init (&(mutex))
-#define X_MUTEX_CLEAR(mutex) g_mutex_clear (&(mutex))
-#define X_THREAD_CREATE(func,data) g_thread_try_new ("hostname-thread", func, data, NULL);
-#else
-#define X_MUTEX_LOCK(mutex) g_mutex_lock (mutex)
-#define X_MUTEX_UNLOCK(mutex) g_mutex_unlock (mutex)
-#define X_MUTEX_INIT(mutex) mutex = g_mutex_new ()
-#define X_MUTEX_CLEAR(mutex) g_mutex_free (mutex)
-#define X_THREAD_CREATE(func,data) g_thread_create (func, data, FALSE, NULL);
-#endif
-
-static gboolean
-hostname_thread_run_cb (gpointer user_data)
-{
- HostnameThread *ht = (HostnameThread *) user_data;
- const char *hostname = NULL;
-
- if (strlen (ht->hostname) && strcmp (ht->hostname, "."))
- hostname = ht->hostname;
-
- nm_log_dbg (LOGD_DNS, "(%p) calling address reverse-lookup result handler", ht);
- (*ht->callback) (ht, ht->ret, hostname, ht->user_data);
- return FALSE;
-}
-
-static gpointer
-hostname_thread_worker (gpointer data)
-{
- HostnameThread *ht = (HostnameThread *) data;
- int i;
-
- nm_log_dbg (LOGD_DNS, "(%p) starting address reverse-lookup", ht);
-
- X_MUTEX_LOCK (ht->lock);
- if (ht->dead) {
- X_MUTEX_UNLOCK (ht->lock);
- return (gpointer) NULL;
- }
- X_MUTEX_UNLOCK (ht->lock);
-
- ht->ret = getnameinfo (ht->addr, ht->addr_size, ht->hostname, NI_MAXHOST, NULL, 0, NI_NAMEREQD);
- if (ht->ret == 0) {
- nm_log_dbg (LOGD_DNS, "(%p) address reverse-lookup returned hostname '%s'",
- ht, ht->hostname);
- for (i = 0; i < strlen (ht->hostname); i++)
- ht->hostname[i] = g_ascii_tolower (ht->hostname[i]);
- } else {
- nm_log_dbg (LOGD_DNS, "(%p) address reverse-lookup failed: (%d) %s",
- ht, ht->ret, gai_strerror (ht->ret));
- }
-
- /* Don't track the idle handler ID because by the time the g_idle_add()
- * returns the ID, the handler may already have run and freed the
- * HostnameThread.
- */
- nm_log_dbg (LOGD_DNS, "(%p) scheduling address reverse-lookup result handler", ht);
- g_idle_add (hostname_thread_run_cb, ht);
- return (gpointer) TRUE;
-}
-
-void
-hostname_thread_free (HostnameThread *ht)
-{
- g_return_if_fail (ht != NULL);
-
- nm_log_dbg (LOGD_DNS, "(%p) freeing reverse-lookup thread", ht);
-
- X_MUTEX_CLEAR (ht->lock);
- memset (ht, 0, sizeof (HostnameThread));
- g_free (ht);
-}
-
-HostnameThread *
-hostname4_thread_new (guint32 ip4_addr,
- HostnameThreadCallback callback,
- gpointer user_data)
-{
- HostnameThread *ht;
- char buf[INET_ADDRSTRLEN + 1];
-
- ht = g_malloc0 (sizeof (HostnameThread));
- g_assert (ht);
-
- X_MUTEX_INIT (ht->lock);
- ht->callback = callback;
- ht->user_data = user_data;
-
- ht->addr4.sin_family = AF_INET;
- ht->addr4.sin_addr.s_addr = ip4_addr;
- ht->addr = (struct sockaddr *) &ht->addr4;
- ht->addr_size = sizeof (ht->addr4);
-
- ht->thread = X_THREAD_CREATE (hostname_thread_worker, ht);
- if (!ht->thread) {
- hostname_thread_free (ht);
- return NULL;
- }
-
- if (!inet_ntop (AF_INET, &ht->addr4.sin_addr, buf, sizeof (buf)))
- strcpy (buf, "(unknown)");
-
- nm_log_dbg (LOGD_DNS, "(%p) started IPv4 reverse-lookup thread for address '%s'",
- ht, buf);
-
- return ht;
-}
-
-HostnameThread *
-hostname6_thread_new (const struct in6_addr *ip6_addr,
- HostnameThreadCallback callback,
- gpointer user_data)
-{
- HostnameThread *ht;
- char buf[INET6_ADDRSTRLEN + 1];
-
- ht = g_malloc0 (sizeof (HostnameThread));
- g_assert (ht);
-
- X_MUTEX_INIT (ht->lock);
- ht->callback = callback;
- ht->user_data = user_data;
-
- ht->addr6.sin6_family = AF_INET6;
- ht->addr6.sin6_addr = *ip6_addr;
- ht->addr = (struct sockaddr *) &ht->addr6;
- ht->addr_size = sizeof (ht->addr6);
-
- ht->thread = X_THREAD_CREATE (hostname_thread_worker, ht);
- if (!ht->thread) {
- hostname_thread_free (ht);
- return NULL;
- }
-
- if (!inet_ntop (AF_INET, ip6_addr, buf, sizeof (buf)))
- strcpy (buf, "(unknown)");
-
- nm_log_dbg (LOGD_DNS, "(%p) started IPv6 reverse-lookup thread for address '%s'",
- ht, buf);
-
- return ht;
-}
-
-void
-hostname_thread_kill (HostnameThread *ht)
-{
- g_return_if_fail (ht != NULL);
-
- nm_log_dbg (LOGD_DNS, "(%p) stopping reverse-lookup thread", ht);
-
- X_MUTEX_LOCK (ht->lock);
- ht->dead = TRUE;
- X_MUTEX_UNLOCK (ht->lock);
-}
-
-gboolean
-hostname_thread_is_dead (HostnameThread *ht)
-{
- g_return_val_if_fail (ht != NULL, TRUE);
-
- return ht->dead;
-}
-
-/************************************************************************/
-
-#define FALLBACK_HOSTNAME4 "localhost.localdomain"
-
-gboolean
-nm_policy_set_system_hostname (const char *new_hostname, const char *msg)
-{
- char old_hostname[HOST_NAME_MAX + 1];
- const char *name;
- int ret;
-
- if (new_hostname)
- g_warn_if_fail (strlen (new_hostname));
-
- old_hostname[HOST_NAME_MAX] = '\0';
- errno = 0;
- ret = gethostname (old_hostname, HOST_NAME_MAX);
- if (ret != 0) {
- nm_log_warn (LOGD_DNS, "couldn't get the system hostname: (%d) %s",
- errno, strerror (errno));
- } else {
- /* Don't set the hostname if it isn't actually changing */
- if ( (new_hostname && !strcmp (old_hostname, new_hostname))
- || (!new_hostname && !strcmp (old_hostname, FALLBACK_HOSTNAME4)))
- return FALSE;
- }
-
- name = (new_hostname && strlen (new_hostname)) ? new_hostname : FALLBACK_HOSTNAME4;
-
- nm_log_info (LOGD_DNS, "Setting system hostname to '%s' (%s)", name, msg);
- ret = sethostname (name, strlen (name));
- if (ret != 0) {
- nm_log_warn (LOGD_DNS, "couldn't set the system hostname to '%s': (%d) %s",
- name, errno, strerror (errno));
- }
-
- return (ret == 0);
-}
-
diff --git a/src/nm-policy-hostname.h b/src/nm-policy-hostname.h
deleted file mode 100644
index e76713f16..000000000
--- a/src/nm-policy-hostname.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2004 - 2010 Red Hat, Inc.
- * Copyright (C) 2007 - 2008 Novell, Inc.
- */
-
-#ifndef NM_POLICY_HOSTNAME_H
-#define NM_POLICY_HOSTNAME_H
-
-#include <glib.h>
-
-gboolean nm_policy_set_system_hostname (const char *new_hostname, const char *msg);
-
-
-typedef struct HostnameThread HostnameThread;
-
-typedef void (*HostnameThreadCallback) (HostnameThread *ht,
- int error,
- const char *hostname,
- gpointer user_data);
-
-HostnameThread * hostname4_thread_new (guint32 ip4_addr,
- HostnameThreadCallback callback,
- gpointer user_data);
-
-HostnameThread * hostname6_thread_new (const struct in6_addr *ip6_addr,
- HostnameThreadCallback callback,
- gpointer user_data);
-
-void hostname_thread_free (HostnameThread *ht);
-
-gboolean hostname_thread_is_dead (HostnameThread *ht);
-
-void hostname_thread_kill (HostnameThread *ht);
-
-#endif /* NM_POLICY_HOSTNAME_H */
diff --git a/src/nm-policy-hosts.c b/src/nm-policy-hosts.c
deleted file mode 100644
index 3f3fb35c0..000000000
--- a/src/nm-policy-hosts.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2004 - 2010 Red Hat, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-
-#include "nm-policy-hosts.h"
-#include "nm-logging.h"
-
-#define ADDED_TAG "# Added by NetworkManager"
-
-GString *
-nm_policy_get_etc_hosts (const char *contents, gsize contents_len)
-{
- char **lines = NULL, **iter;
- GString *new_contents = NULL;
-
- if (contents_len == 0 || !strstr (contents, ADDED_TAG))
- return NULL;
-
- new_contents = g_string_sized_new (contents_len);
-
- /* Remove "# Added ..." lines */
- lines = g_strsplit_set (contents, "\n\r", -1);
- for (iter = lines; iter && *iter; iter++) {
- if (!strstr (*iter, ADDED_TAG)) {
- g_string_append (new_contents, *iter);
- g_string_append_c (new_contents, '\n');
- }
- }
- g_strfreev (lines);
-
- /* Remove last blank line at end of file, if one exists; this is
- * an artifact of how g_strsplit_set() works.
- */
- if ( (new_contents->len > 2)
- && (new_contents->str[new_contents->len - 1] == '\n'))
- g_string_truncate (new_contents, new_contents->len - 1);
-
- return new_contents;
-}
-
-/* remove any leftover "# Added by NetworkManager" lines */
-void
-nm_policy_hosts_clean_etc_hosts (void)
-{
- char *contents = NULL;
- gsize contents_len = 0;
- GError *error = NULL;
- GString *new;
-
- if (!g_file_get_contents (SYSCONFDIR "/hosts", &contents, &contents_len, &error)) {
- nm_log_dbg (LOGD_DNS, "couldn't read " SYSCONFDIR "/hosts: (%d) %s",
- error ? error->code : 0,
- (error && error->message) ? error->message : "(unknown)");
- g_clear_error (&error);
- return;
- }
-
- new = nm_policy_get_etc_hosts (contents, contents_len);
- g_free (contents);
-
- if (new && new->len) {
- nm_log_dbg (LOGD_DNS, "Cleaning leftovers from /etc/hosts");
-
- g_clear_error (&error);
- if (!g_file_set_contents (SYSCONFDIR "/hosts", new->str, -1, &error)) {
- nm_log_dbg (LOGD_DNS, "couldn't update " SYSCONFDIR "/hosts: (%d) %s",
- error ? error->code : 0,
- (error && error->message) ? error->message : "(unknown)");
- g_clear_error (&error);
- }
- }
-
- if (new)
- g_string_free (new, TRUE);
-}
-
diff --git a/src/nm-policy.c b/src/nm-policy.c
index f95caf938..d46aca04e 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -25,23 +25,24 @@
#include <errno.h>
#include <netdb.h>
+#include <gio/gio.h>
+
#include "nm-policy.h"
#include "NetworkManagerUtils.h"
-#include "nm-wifi-ap.h"
#include "nm-activation-request.h"
#include "nm-logging.h"
#include "nm-device.h"
#include "nm-dbus-manager.h"
#include "nm-setting-ip4-config.h"
#include "nm-setting-connection.h"
-#include "nm-system.h"
+#include "nm-platform.h"
#include "nm-dns-manager.h"
#include "nm-vpn-manager.h"
-#include "nm-policy-hostname.h"
#include "nm-manager-auth.h"
#include "nm-firewall-manager.h"
#include "nm-dispatcher.h"
#include "nm-utils.h"
+#include "nm-glib-compat.h"
typedef struct {
NMManager *manager;
@@ -61,9 +62,9 @@ typedef struct {
NMDevice *default_device4, *activating_device4;
NMDevice *default_device6, *activating_device6;
- HostnameThread *lookup;
- guint32 lookup_ipv4_addr; /* IPv4 for reverse lookup */
- struct in6_addr *lookup_ipv6_addr; /* IPv6 for reverse lookup */
+ GResolver *resolver;
+ GInetAddress *lookup_addr;
+ GCancellable *lookup_cancellable;
NMDnsManager *dns_manager;
gulong config_changed_id;
@@ -87,12 +88,6 @@ enum {
PROP_ACTIVATING_IP6_DEVICE
};
-#define RETRIES_TAG "autoconnect-retries"
-#define RETRIES_DEFAULT 4
-#define RESET_RETRIES_TIMESTAMP_TAG "reset-retries-timestamp-tag"
-#define RESET_RETRIES_TIMER 300
-#define FAILURE_REASON_TAG "failure-reason"
-
static void schedule_activate_all (NMPolicy *policy);
@@ -100,22 +95,18 @@ static NMDevice *
get_best_ip4_device (NMPolicy *self, gboolean fully_activated)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
- GSList *devices, *iter;
+ const GSList *iter;
NMDevice *best = NULL;
int best_prio = G_MAXINT;
- devices = nm_manager_get_devices (priv->manager);
- for (iter = devices; iter; iter = g_slist_next (iter)) {
+ for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
NMDevice *dev = NM_DEVICE (iter->data);
NMDeviceType devtype = nm_device_get_device_type (dev);
NMDeviceState state = nm_device_get_state (dev);
NMActRequest *req;
NMConnection *connection;
- NMIP4Config *ip4_config;
NMSettingIP4Config *s_ip4;
int prio;
- guint i;
- gboolean can_default = FALSE;
const char *method = NULL;
if ( state <= NM_DEVICE_STATE_DISCONNECTED
@@ -125,44 +116,38 @@ get_best_ip4_device (NMPolicy *self, gboolean fully_activated)
if (fully_activated && state < NM_DEVICE_STATE_SECONDARIES)
continue;
- ip4_config = nm_device_get_ip4_config (dev);
- if (ip4_config) {
- /* Make sure at least one of this device's IP addresses has a gateway */
- for (i = 0; i < nm_ip4_config_get_num_addresses (ip4_config); i++) {
- NMIP4Address *addr;
+ if (fully_activated) {
+ NMIP4Config *ip4_config;
- addr = nm_ip4_config_get_address (ip4_config, i);
- if (nm_ip4_address_get_gateway (addr)) {
- can_default = TRUE;
- break;
- }
- }
+ ip4_config = nm_device_get_ip4_config (dev);
+ if (!ip4_config)
+ continue;
- if (!can_default && (devtype != NM_DEVICE_TYPE_MODEM))
+ /* Make sure the device has a gateway */
+ if (!nm_ip4_config_get_gateway (ip4_config) && (devtype != NM_DEVICE_TYPE_MODEM))
continue;
/* 'never-default' devices can't ever be the default */
if (nm_ip4_config_get_never_default (ip4_config))
continue;
- } else if (fully_activated)
- continue;
+ }
req = nm_device_get_act_request (dev);
g_assert (req);
connection = nm_act_request_get_connection (req);
g_assert (connection);
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- if (s_ip4) {
- /* Never set the default route through an IPv4LL-addressed device */
- method = nm_setting_ip4_config_get_method (s_ip4);
- if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL))
- continue;
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ /* If IPv4 is disabled or link-local-only, it can't be the default */
+ if ( !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)
+ || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL))
+ continue;
- /* 'never-default' devices can't ever be the default */
- if (nm_setting_ip4_config_get_never_default (s_ip4))
- continue;
- }
+ /* 'never-default' devices can't ever be the default */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+ if (nm_setting_ip4_config_get_never_default (s_ip4))
+ continue;
prio = nm_device_get_priority (dev);
if ( prio < best_prio
@@ -194,22 +179,18 @@ static NMDevice *
get_best_ip6_device (NMPolicy *self, gboolean fully_activated)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
- GSList *devices, *iter;
+ const GSList *iter;
NMDevice *best = NULL;
int best_prio = G_MAXINT;
- devices = nm_manager_get_devices (priv->manager);
- for (iter = devices; iter; iter = g_slist_next (iter)) {
+ for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
NMDevice *dev = NM_DEVICE (iter->data);
NMDeviceType devtype = nm_device_get_device_type (dev);
NMDeviceState state = nm_device_get_state (dev);
NMActRequest *req;
NMConnection *connection;
- NMIP6Config *ip6_config;
NMSettingIP6Config *s_ip6;
int prio;
- guint i;
- gboolean can_default = FALSE;
const char *method = NULL;
if ( state <= NM_DEVICE_STATE_DISCONNECTED
@@ -219,40 +200,34 @@ get_best_ip6_device (NMPolicy *self, gboolean fully_activated)
if (fully_activated && state < NM_DEVICE_STATE_SECONDARIES)
continue;
- ip6_config = nm_device_get_ip6_config (dev);
- if (ip6_config) {
- for (i = 0; i < nm_ip6_config_get_num_addresses (ip6_config); i++) {
- NMIP6Address *addr;
+ if (fully_activated) {
+ NMIP6Config *ip6_config;
- addr = nm_ip6_config_get_address (ip6_config, i);
- if (nm_ip6_address_get_gateway (addr)) {
- can_default = TRUE;
- break;
- }
- }
+ ip6_config = nm_device_get_ip6_config (dev);
+ if (!ip6_config)
+ continue;
- if (!can_default && (devtype != NM_DEVICE_TYPE_MODEM))
+ if (!nm_ip6_config_get_gateway (ip6_config) && (devtype != NM_DEVICE_TYPE_MODEM))
continue;
if (nm_ip6_config_get_never_default (ip6_config))
continue;
- } else if (fully_activated)
- continue;
+ }
req = nm_device_get_act_request (dev);
g_assert (req);
connection = nm_act_request_get_connection (req);
g_assert (connection);
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
- if (s_ip6) {
- method = nm_setting_ip6_config_get_method (s_ip6);
- if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL))
- continue;
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
+ || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL))
+ continue;
- if (nm_setting_ip6_config_get_never_default (s_ip6))
- continue;
- }
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ if (nm_setting_ip6_config_get_never_default (s_ip6))
+ continue;
prio = nm_device_get_priority (dev);
if ( prio < best_prio
@@ -280,6 +255,43 @@ get_best_ip6_device (NMPolicy *self, gboolean fully_activated)
return best;
}
+#define FALLBACK_HOSTNAME4 "localhost.localdomain"
+
+static gboolean
+set_system_hostname (const char *new_hostname, const char *msg)
+{
+ char old_hostname[HOST_NAME_MAX + 1];
+ const char *name;
+ int ret;
+
+ if (new_hostname)
+ g_warn_if_fail (strlen (new_hostname));
+
+ old_hostname[HOST_NAME_MAX] = '\0';
+ errno = 0;
+ ret = gethostname (old_hostname, HOST_NAME_MAX);
+ if (ret != 0) {
+ nm_log_warn (LOGD_DNS, "couldn't get the system hostname: (%d) %s",
+ errno, strerror (errno));
+ } else {
+ /* Don't set the hostname if it isn't actually changing */
+ if ( (new_hostname && !strcmp (old_hostname, new_hostname))
+ || (!new_hostname && !strcmp (old_hostname, FALLBACK_HOSTNAME4)))
+ return FALSE;
+ }
+
+ name = (new_hostname && strlen (new_hostname)) ? new_hostname : FALLBACK_HOSTNAME4;
+
+ nm_log_info (LOGD_DNS, "Setting system hostname to '%s' (%s)", name, msg);
+ ret = sethostname (name, strlen (name));
+ if (ret != 0) {
+ nm_log_warn (LOGD_DNS, "couldn't set the system hostname to '%s': (%d) %s",
+ name, errno, strerror (errno));
+ }
+
+ return (ret == 0);
+}
+
static void
_set_hostname (NMPolicy *policy,
const char *new_hostname,
@@ -293,14 +305,11 @@ _set_hostname (NMPolicy *policy,
* there was no valid hostname to start with.
*/
- /* Clear lookup adresses if we have a hostname, so that we didn't
- * restart reverse lookup thread later.
+ /* Clear lookup adresses if we have a hostname, so that we don't
+ * restart the reverse lookup thread later.
*/
- if (new_hostname) {
- priv->lookup_ipv4_addr = 0;
- g_free (priv->lookup_ipv6_addr);
- priv->lookup_ipv6_addr = NULL;
- }
+ if (new_hostname)
+ g_clear_object (&priv->lookup_addr);
/* Don't change the hostname or update DNS this is the first time we're
* trying to change the hostname, and it's not actually changing.
@@ -322,32 +331,35 @@ _set_hostname (NMPolicy *policy,
nm_dns_manager_set_hostname (priv->dns_manager, priv->cur_hostname);
- if (nm_policy_set_system_hostname (priv->cur_hostname, msg))
- nm_dispatcher_call (DISPATCHER_ACTION_HOSTNAME, NULL, NULL, NULL, NULL);
+ if (set_system_hostname (priv->cur_hostname, msg))
+ nm_dispatcher_call (DISPATCHER_ACTION_HOSTNAME, NULL, NULL, NULL, NULL, NULL);
}
static void
-lookup_callback (HostnameThread *thread,
- int result,
- const char *hostname,
+lookup_callback (GObject *source,
+ GAsyncResult *result,
gpointer user_data)
{
NMPolicy *policy = (NMPolicy *) user_data;
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- char *msg;
-
- /* Update the hostname if the calling lookup thread is the in-progress one */
- if (!hostname_thread_is_dead (thread) && (thread == priv->lookup)) {
- priv->lookup = NULL;
- if (!hostname) {
- /* Fall back to localhost.localdomain */
- msg = g_strdup_printf ("address lookup failed: %d", result);
- _set_hostname (policy, NULL, msg);
- g_free (msg);
- } else
- _set_hostname (policy, hostname, "from address lookup");
+ const char *hostname;
+ GError *error = NULL;
+
+ hostname = g_resolver_lookup_by_address_finish (G_RESOLVER (source), result, &error);
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ /* Don't touch policy; it may have been freed already */
+ g_error_free (error);
+ return;
}
- hostname_thread_free (thread);
+
+ if (hostname)
+ _set_hostname (policy, hostname, "from address lookup");
+ else {
+ _set_hostname (policy, NULL, error->message);
+ g_error_free (error);
+ }
+
+ g_clear_object (&priv->lookup_cancellable);
}
static void
@@ -356,12 +368,14 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
char *configured_hostname = NULL;
const char *dhcp_hostname, *p;
+ NMIP4Config *ip4_config;
+ NMIP6Config *ip6_config;
g_return_if_fail (policy != NULL);
- if (priv->lookup) {
- hostname_thread_kill (priv->lookup);
- priv->lookup = NULL;
+ if (priv->lookup_cancellable) {
+ g_cancellable_cancel (priv->lookup_cancellable);
+ g_clear_object (&priv->lookup_cancellable);
}
/* Hostname precedence order:
@@ -446,51 +460,32 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
/* No configured hostname, no automatically determined hostname, and no
* bootup hostname. Start reverse DNS of the current IPv4 or IPv6 address.
*/
- if (best4) {
- NMIP4Config *ip4_config;
- NMIP4Address *addr4;
-
- ip4_config = nm_device_get_ip4_config (best4);
- if ( !ip4_config
- || (nm_ip4_config_get_num_nameservers (ip4_config) == 0)
- || (nm_ip4_config_get_num_addresses (ip4_config) == 0)) {
- /* No valid IP4 config (!!); fall back to localhost.localdomain */
- _set_hostname (policy, NULL, "no IPv4 config");
- return;
- }
+ ip4_config = best4 ? nm_device_get_ip4_config (best4) : NULL;
+ ip6_config = best6 ? nm_device_get_ip6_config (best6) : NULL;
- addr4 = nm_ip4_config_get_address (ip4_config, 0);
- g_assert (addr4); /* checked for > 1 address above */
+ if (ip4_config && nm_ip4_config_get_num_addresses (ip4_config) > 0) {
+ const NMPlatformIP4Address *addr4;
- /* Start the hostname lookup thread */
- priv->lookup_ipv4_addr = nm_ip4_address_get_address (addr4);
- priv->lookup = hostname4_thread_new (priv->lookup_ipv4_addr, lookup_callback, policy);
- } else if (best6) {
- NMIP6Config *ip6_config;
- NMIP6Address *addr6;
-
- ip6_config = nm_device_get_ip6_config (best6);
- if ( !ip6_config
- || (nm_ip6_config_get_num_nameservers (ip6_config) == 0)
- || (nm_ip6_config_get_num_addresses (ip6_config) == 0)) {
- /* No valid IP6 config (!!); fall back to localhost.localdomain */
- _set_hostname (policy, NULL, "no IPv6 config");
- return;
- }
+ addr4 = nm_ip4_config_get_address (ip4_config, 0);
+ priv->lookup_addr = g_inet_address_new_from_bytes ((guint8 *) &addr4->address,
+ G_SOCKET_FAMILY_IPV4);
+ } else if (ip6_config && nm_ip6_config_get_num_addresses (ip6_config) > 0) {
+ const NMPlatformIP6Address *addr6;
addr6 = nm_ip6_config_get_address (ip6_config, 0);
- g_assert (addr6); /* checked for > 1 address above */
-
- /* Start the hostname lookup thread */
- priv->lookup_ipv6_addr = g_malloc0 (sizeof (struct in6_addr));
- memcpy (priv->lookup_ipv6_addr, nm_ip6_address_get_address (addr6), sizeof (struct in6_addr));
- priv->lookup = hostname6_thread_new (priv->lookup_ipv6_addr, lookup_callback, policy);
+ priv->lookup_addr = g_inet_address_new_from_bytes ((guint8 *) &addr6->address,
+ G_SOCKET_FAMILY_IPV6);
+ } else {
+ /* No valid IP config; fall back to localhost.localdomain */
+ _set_hostname (policy, NULL, "no IP config");
+ return;
}
- if (!priv->lookup) {
- /* Fall back to 'localhost.localdomain' */
- _set_hostname (policy, NULL, "error starting hostname thread");
- }
+ priv->lookup_cancellable = g_cancellable_new ();
+ g_resolver_lookup_by_address_async (priv->resolver,
+ priv->lookup_addr,
+ priv->lookup_cancellable,
+ lookup_callback, policy);
}
static void
@@ -564,7 +559,7 @@ get_best_ip4_config (NMPolicy *policy,
/* Check the user's preference from the NMConnection */
s_ip4 = nm_connection_get_setting_ip4_config (tmp);
- if (s_ip4 && nm_setting_ip4_config_get_never_default (s_ip4))
+ if (nm_setting_ip4_config_get_never_default (s_ip4))
continue;
}
@@ -627,15 +622,14 @@ static void
update_ip4_routing (NMPolicy *policy, gboolean force_update)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- NMDevice *best = NULL, *parent, *default_device;
+ NMDevice *best = NULL, *default_device;
NMConnection *connection = NULL;
NMVPNConnection *vpn = NULL;
NMActiveConnection *best_ac = NULL;
- NMIP4Config *ip4_config = NULL, *parent_ip4;
+ NMIP4Config *ip4_config = NULL;
const char *ip_iface = NULL;
int ip_ifindex = -1;
- guint32 gw_addr = 0, parent_mss;
- guint32 i;
+ guint32 gw_addr = 0;
/* Note that we might have an IPv4 VPN tunneled over an IPv6-only device,
* so we can get (vpn != NULL && best == NULL).
@@ -656,35 +650,50 @@ update_ip4_routing (NMPolicy *policy, gboolean force_update)
if (!force_update && best && (best == priv->default_device4))
return;
- /* We set the default route to the first gateway we find. If we don't find
- * a gateway (WWAN, point-to-point, etc) then we just use 0.0.0.0
- */
- for (i = 0; i < nm_ip4_config_get_num_addresses (ip4_config); i++) {
- NMIP4Address *addr;
+ gw_addr = nm_ip4_config_get_gateway (ip4_config);
- addr = nm_ip4_config_get_address (ip4_config, i);
- if (nm_ip4_address_get_gateway (addr)) {
- gw_addr = nm_ip4_address_get_gateway (addr);
- break;
+ if (vpn) {
+ NMDevice *parent = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
+ int parent_ifindex = nm_device_get_ip_ifindex (parent);
+ NMIP4Config *parent_ip4 = nm_device_get_ip4_config (parent);
+ guint32 parent_mss = parent_ip4 ? nm_ip4_config_get_mss (parent_ip4) : 0;
+ in_addr_t int_gw = nm_vpn_connection_get_ip4_internal_gateway (vpn);
+ int mss = nm_ip4_config_get_mss (ip4_config);
+
+ /* If no VPN interface, use the parent interface */
+ if (ip_ifindex <= 0)
+ ip_ifindex = parent_ifindex;
+
+ if (!nm_platform_ip4_route_add (ip_ifindex, NM_PLATFORM_SOURCE_VPN,
+ 0, 0, int_gw,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss)) {
+ (void) nm_platform_ip4_route_add (parent_ifindex, NM_PLATFORM_SOURCE_VPN,
+ gw_addr, 32, 0,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, parent_mss);
+ if (!nm_platform_ip4_route_add (ip_ifindex, NM_PLATFORM_SOURCE_VPN,
+ 0, 0, int_gw,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss))
+ nm_log_err (LOGD_IP4 | LOGD_VPN, "Failed to set default route.");
}
- }
- if (vpn) {
- parent = nm_vpn_connection_get_parent_device (vpn);
- parent_ip4 = nm_device_get_ip4_config (parent);
- parent_mss = parent_ip4 ? nm_ip4_config_get_mss (parent_ip4) : 0;
-
- nm_system_replace_default_ip4_route_vpn (ip_ifindex,
- gw_addr,
- nm_vpn_connection_get_ip4_internal_gateway (vpn),
- nm_ip4_config_get_mss (ip4_config),
- nm_device_get_ip_ifindex (parent),
- parent_mss);
- default_device = parent;
+ default_device = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
} else {
- nm_system_replace_default_ip4_route (ip_ifindex,
- gw_addr,
- nm_ip4_config_get_mss (ip4_config));
+ int mss = nm_ip4_config_get_mss (ip4_config);
+
+ g_assert (ip_iface);
+ if (!nm_platform_ip4_route_add (ip_ifindex, NM_PLATFORM_SOURCE_USER,
+ 0, 0, gw_addr,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss)) {
+ (void) nm_platform_ip4_route_add (ip_ifindex, NM_PLATFORM_SOURCE_USER,
+ gw_addr, 32, 0,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss);
+ if (!nm_platform_ip4_route_add (ip_ifindex, NM_PLATFORM_SOURCE_USER,
+ 0, 0, gw_addr,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss)) {
+ nm_log_err (LOGD_IP4, "Failed to set default route.");
+ }
+ }
+
default_device = best;
}
@@ -748,7 +757,7 @@ get_best_ip6_config (NMPolicy *policy,
/* Check the user's preference from the NMConnection */
s_ip6 = nm_connection_get_setting_ip6_config (tmp);
- if (s_ip6 && nm_setting_ip6_config_get_never_default (s_ip6))
+ if (nm_setting_ip6_config_get_never_default (s_ip6))
continue;
}
@@ -811,15 +820,13 @@ static void
update_ip6_routing (NMPolicy *policy, gboolean force_update)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- NMDevice *best = NULL, *parent, *default_device6;
+ NMDevice *best = NULL, *default_device6;
NMConnection *connection = NULL;
NMVPNConnection *vpn = NULL;
NMActiveConnection *best_ac = NULL;
- NMIP6Config *ip6_config = NULL, *parent_ip6;
+ NMIP6Config *ip6_config = NULL;
const char *ip_iface = NULL;
int ip_ifindex = -1;
- guint32 parent_mss;
- guint32 i;
const struct in6_addr *gw_addr;
/* Note that we might have an IPv6 VPN tunneled over an IPv4-only device,
@@ -844,41 +851,54 @@ update_ip6_routing (NMPolicy *policy, gboolean force_update)
/* If no better gateway is found, use ::; not all configurations will
* have a gateway, especially WWAN/Point-to-Point connections.
*/
- gw_addr = &in6addr_any;
-
- /* Look for a gateway paired with one of the addresses */
- for (i = 0; i < nm_ip6_config_get_num_addresses (ip6_config); i++) {
- NMIP6Address *addr;
+ gw_addr = nm_ip6_config_get_gateway (ip6_config);
+ if (!gw_addr)
+ gw_addr = &in6addr_any;
- addr = nm_ip6_config_get_address (ip6_config, i);
- if (nm_ip6_address_get_gateway (addr)) {
- gw_addr = nm_ip6_address_get_gateway (addr);
- break;
+ if (vpn) {
+ NMDevice *parent = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
+ int parent_ifindex = nm_device_get_ip_ifindex (parent);
+ NMIP6Config *parent_ip6 = nm_device_get_ip6_config (parent);
+ guint32 parent_mss = parent_ip6 ? nm_ip6_config_get_mss (parent_ip6) : 0;
+ const struct in6_addr *int_gw = nm_vpn_connection_get_ip6_internal_gateway (vpn);
+ int mss = nm_ip6_config_get_mss (ip6_config);
+
+ if (!int_gw)
+ int_gw = &in6addr_any;
+
+ /* If no VPN interface, use the parent interface */
+ if (ip_ifindex <= 0)
+ ip_ifindex = parent_ifindex;
+
+ if (!nm_platform_ip6_route_add (ip_ifindex, NM_PLATFORM_SOURCE_VPN,
+ in6addr_any, 0, *int_gw,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss)) {
+ (void) nm_platform_ip6_route_add (parent_ifindex, NM_PLATFORM_SOURCE_VPN,
+ *gw_addr, 128, in6addr_any,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, parent_mss);
+ if (!nm_platform_ip6_route_add (ip_ifindex, NM_PLATFORM_SOURCE_VPN,
+ in6addr_any, 0, *int_gw,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss)) {
+ nm_log_err (LOGD_IP6 | LOGD_VPN, "Failed to set default route.");
+ }
}
- }
-
- /* If we don't find a paired gateway, try the generic IPv6 gateway */
- if ( IN6_IS_ADDR_UNSPECIFIED (gw_addr)
- && nm_ip6_config_get_gateway (ip6_config))
- gw_addr = nm_ip6_config_get_gateway (ip6_config);
- if (vpn) {
- parent = nm_vpn_connection_get_parent_device (vpn);
- parent_ip6 = nm_device_get_ip6_config (parent);
- parent_mss = parent_ip6 ? nm_ip6_config_get_mss (parent_ip6) : 0;
-
- nm_system_replace_default_ip6_route_vpn (ip_ifindex,
- gw_addr,
- nm_vpn_connection_get_ip6_internal_gateway (vpn),
- nm_ip6_config_get_mss (ip6_config),
- nm_device_get_ip_ifindex (parent),
- parent_mss);
- default_device6 = parent;
+ default_device6 = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
} else {
- if (gw_addr)
- nm_system_replace_default_ip6_route (ip_ifindex, gw_addr);
- else
- nm_log_dbg (LOGD_IP6, "missing default IPv6 gateway");
+ int mss = nm_ip6_config_get_mss (ip6_config);
+
+ if (!nm_platform_ip6_route_add (ip_ifindex, NM_PLATFORM_SOURCE_USER,
+ in6addr_any, 0, *gw_addr,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss)) {
+ (void) nm_platform_ip6_route_add (ip_ifindex, NM_PLATFORM_SOURCE_USER,
+ *gw_addr, 128, in6addr_any,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss);
+ if (!nm_platform_ip6_route_add (ip_ifindex, NM_PLATFORM_SOURCE_USER,
+ in6addr_any, 0, *gw_addr,
+ NM_PLATFORM_ROUTE_METRIC_DEFAULT, mss))
+ nm_log_err (LOGD_IP6, "Failed to set default route.");
+ }
+
default_device6 = best;
}
@@ -898,13 +918,11 @@ static void
update_routing_and_dns (NMPolicy *policy, gboolean force_update)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- NMDnsManager *mgr;
- mgr = nm_dns_manager_get (NULL);
- nm_dns_manager_begin_updates (mgr, __func__);
+ nm_dns_manager_begin_updates (priv->dns_manager, __func__);
- update_ip4_dns (policy, mgr);
- update_ip6_dns (policy, mgr);
+ update_ip4_dns (policy, priv->dns_manager);
+ update_ip6_dns (policy, priv->dns_manager);
update_ip4_routing (policy, force_update);
update_ip6_routing (policy, force_update);
@@ -912,8 +930,7 @@ update_routing_and_dns (NMPolicy *policy, gboolean force_update)
/* Update the system hostname */
update_system_hostname (policy, priv->default_device4, priv->default_device6);
- nm_dns_manager_end_updates (mgr, __func__);
- g_object_unref (mgr);
+ nm_dns_manager_end_updates (priv->dns_manager, __func__);
}
static void
@@ -940,33 +957,23 @@ check_activating_devices (NMPolicy *policy)
g_object_thaw_notify (object);
}
-static void
-set_connection_auto_retries (NMConnection *connection, guint retries)
-{
- /* add +1 so that the tag still exists if the # retries is 0 */
- g_object_set_data (G_OBJECT (connection), RETRIES_TAG, GUINT_TO_POINTER (retries + 1));
-}
-
-static guint32
-get_connection_auto_retries (NMConnection *connection)
-{
- /* subtract 1 to handle the +1 from set_connection_auto_retries() */
- return GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (connection), RETRIES_TAG)) - 1;
-}
-
typedef struct {
NMPolicy *policy;
NMDevice *device;
- guint id;
+ guint autoactivate_id;
} ActivateData;
static void
activate_data_free (ActivateData *data)
{
- if (data->id)
- g_source_remove (data->id);
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (data->policy);
+
+ nm_device_remove_pending_action (data->device, "autoactivate", TRUE);
+ priv->pending_activation_checks = g_slist_remove (priv->pending_activation_checks, data);
+
+ if (data->autoactivate_id)
+ g_source_remove (data->autoactivate_id);
g_object_unref (data->device);
- memset (data, 0, sizeof (*data));
g_free (data);
}
@@ -984,8 +991,7 @@ auto_activate_device (gpointer user_data)
policy = data->policy;
priv = NM_POLICY_GET_PRIVATE (policy);
- data->id = 0;
- priv->pending_activation_checks = g_slist_remove (priv->pending_activation_checks, data);
+ data->autoactivate_id = 0;
// FIXME: if a device is already activating (or activated) with a connection
// but another connection now overrides the current one for that device,
@@ -994,47 +1000,32 @@ auto_activate_device (gpointer user_data)
if (nm_device_get_act_request (data->device))
goto out;
- iter = connections = nm_settings_get_connections (priv->settings);
+ iter = connections = nm_manager_get_activatable_connections (priv->manager);
/* Remove connections that shouldn't be auto-activated */
while (iter) {
NMSettingsConnection *candidate = NM_SETTINGS_CONNECTION (iter->data);
- gboolean remove_it = FALSE;
- const char *permission;
/* Grab next item before we possibly delete the current item */
iter = g_slist_next (iter);
- /* Ignore connections that were tried too many times or are not visible
- * to any logged-in users. Also ignore shared wifi connections for
- * which no user has the shared wifi permission.
- */
- if ( get_connection_auto_retries (NM_CONNECTION (candidate)) == 0
- || nm_settings_connection_is_visible (candidate) == FALSE)
- remove_it = TRUE;
- else {
- permission = nm_utils_get_shared_wifi_permission (NM_CONNECTION (candidate));
- if (permission) {
- if (nm_settings_connection_check_permission (candidate, permission) == FALSE)
- remove_it = TRUE;
- }
- }
-
- if (remove_it)
+ if (!nm_settings_connection_can_autoconnect (candidate))
connections = g_slist_remove (connections, candidate);
}
best_connection = nm_device_get_best_auto_connection (data->device, connections, &specific_object);
if (best_connection) {
GError *error = NULL;
+ NMAuthSubject *subject;
nm_log_info (LOGD_DEVICE, "Auto-activating connection '%s'.",
nm_connection_get_id (best_connection));
+ subject = nm_auth_subject_new_internal ();
if (!nm_manager_activate_connection (priv->manager,
best_connection,
specific_object,
- nm_device_get_path (data->device),
- NULL,
+ data->device,
+ subject,
&error)) {
nm_log_info (LOGD_DEVICE, "Connection '%s' auto-activation failed: (%d) %s",
nm_connection_get_id (best_connection),
@@ -1042,28 +1033,14 @@ auto_activate_device (gpointer user_data)
error ? error->message : "(none)");
g_error_free (error);
}
+ g_object_unref (subject);
}
g_slist_free (connections);
out:
activate_data_free (data);
- return FALSE;
-}
-
-static ActivateData *
-activate_data_new (NMPolicy *policy, NMDevice *device, guint delay_seconds)
-{
- ActivateData *data;
-
- data = g_malloc0 (sizeof (ActivateData));
- data->policy = policy;
- data->device = g_object_ref (device);
- if (delay_seconds > 0)
- data->id = g_timeout_add_seconds (delay_seconds, auto_activate_device, data);
- else
- data->id = g_idle_add (auto_activate_device, data);
- return data;
+ return G_SOURCE_REMOVE;
}
static ActivateData *
@@ -1100,7 +1077,7 @@ static void
pending_secondary_data_free (PendingSecondaryData *data)
{
g_object_unref (data->device);
- nm_utils_slist_free (data->secondaries, g_free);
+ g_slist_free_full (data->secondaries, g_object_unref);
memset (data, 0, sizeof (*data));
g_free (data);
}
@@ -1111,51 +1088,50 @@ process_secondaries (NMPolicy *policy,
gboolean connected)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- NMDevice *device = NULL;
- const char *ac_path;
GSList *iter, *iter2;
- nm_log_dbg (LOGD_DEVICE, "Secondary connection '%s' %s; active path '%s'",
- nm_active_connection_get_name (active),
- connected ? "SUCCEEDED" : "FAILED",
- nm_active_connection_get_path (active));
-
- ac_path = nm_active_connection_get_path (active);
-
- if (NM_IS_VPN_CONNECTION (active))
- device = nm_vpn_connection_get_parent_device (NM_VPN_CONNECTION (active));
-
+ /* Loop through devices waiting for secondary connections to activate */
for (iter = priv->pending_secondaries; iter; iter = g_slist_next (iter)) {
PendingSecondaryData *secondary_data = (PendingSecondaryData *) iter->data;
NMDevice *item_device = secondary_data->device;
- if (!device || item_device == device) {
- for (iter2 = secondary_data->secondaries; iter2; iter2 = g_slist_next (iter2)) {
- char *list_ac_path = (char *) iter2->data;
-
- if (g_strcmp0 (ac_path, list_ac_path) == 0) {
- if (connected) {
- /* Secondary connection activated */
- secondary_data->secondaries = g_slist_remove (secondary_data->secondaries, list_ac_path);
- g_free (list_ac_path);
- if (!secondary_data->secondaries) {
- /* None secondary UUID remained -> remove the secondary data item */
- priv->pending_secondaries = g_slist_remove (priv->pending_secondaries, secondary_data);
- pending_secondary_data_free (secondary_data);
- nm_device_state_changed (item_device, NM_DEVICE_STATE_ACTIVATED, NM_DEVICE_STATE_REASON_NONE);
- return;
- }
- } else {
- /* Secondary connection failed -> do not watch other connections */
- priv->pending_secondaries = g_slist_remove (priv->pending_secondaries, secondary_data);
- pending_secondary_data_free (secondary_data);
- nm_device_state_changed (item_device, NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED);
- return;
- }
+ /* Look for 'active' in each device's secondary connections list */
+ for (iter2 = secondary_data->secondaries; iter2; iter2 = g_slist_next (iter2)) {
+ NMActiveConnection *secondary_active = NM_ACTIVE_CONNECTION (iter2->data);
+
+ if (active != secondary_active)
+ continue;
+
+ if (connected) {
+ nm_log_dbg (LOGD_DEVICE, "Secondary connection '%s' SUCCEEDED; active path '%s'",
+ nm_active_connection_get_id (active),
+ nm_active_connection_get_path (active));
+
+ /* Secondary connection activated */
+ secondary_data->secondaries = g_slist_remove (secondary_data->secondaries, secondary_active);
+ g_object_unref (secondary_active);
+ if (!secondary_data->secondaries) {
+ /* No secondary UUID remained -> remove the secondary data item */
+ priv->pending_secondaries = g_slist_remove (priv->pending_secondaries, secondary_data);
+ pending_secondary_data_free (secondary_data);
+ if (nm_device_get_state (item_device) == NM_DEVICE_STATE_SECONDARIES)
+ nm_device_state_changed (item_device, NM_DEVICE_STATE_ACTIVATED, NM_DEVICE_STATE_REASON_NONE);
+ break;
}
+ } else {
+ nm_log_dbg (LOGD_DEVICE, "Secondary connection '%s' FAILED; active path '%s'",
+ nm_active_connection_get_id (active),
+ nm_active_connection_get_path (active));
+
+ /* Secondary connection failed -> do not watch other connections */
+ priv->pending_secondaries = g_slist_remove (priv->pending_secondaries, secondary_data);
+ pending_secondary_data_free (secondary_data);
+ if ( nm_device_get_state (item_device) == NM_DEVICE_STATE_SECONDARIES
+ || nm_device_get_state (item_device) == NM_DEVICE_STATE_ACTIVATED)
+ nm_device_state_changed (item_device, NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED);
+ break;
}
- return;
}
}
}
@@ -1172,42 +1148,76 @@ hostname_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
}
static void
-reset_retries_all (NMSettings *settings, NMDevice *device)
+reset_autoconnect_all (NMPolicy *policy, NMDevice *device)
{
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
GSList *connections, *iter;
- GError *error = NULL;
- connections = nm_settings_get_connections (settings);
+ if (device) {
+ nm_log_dbg (LOGD_DEVICE, "Re-enabling autoconnect for all connections on %s",
+ nm_device_get_iface (device));
+ } else
+ nm_log_dbg (LOGD_DEVICE, "Re-enabling autoconnect for all connections");
+
+ connections = nm_settings_get_connections (priv->settings);
for (iter = connections; iter; iter = g_slist_next (iter)) {
- if (!device || nm_device_check_connection_compatible (device, iter->data, &error))
- set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT);
- g_clear_error (&error);
+ if (!device || nm_device_check_connection_compatible (device, iter->data)) {
+ nm_settings_connection_reset_autoconnect_retries (iter->data);
+ nm_settings_connection_set_autoconnect_blocked_reason (iter->data, NM_DEVICE_STATE_REASON_NONE);
+ }
}
g_slist_free (connections);
}
static void
-reset_retries_for_failed_secrets (NMSettings *settings)
+reset_autoconnect_for_failed_secrets (NMPolicy *policy)
{
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
GSList *connections, *iter;
- connections = nm_settings_get_connections (settings);
+ nm_log_dbg (LOGD_DEVICE, "Re-enabling autoconnect for all connections with failed secrets");
+
+ connections = nm_settings_get_connections (priv->settings);
for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMDeviceStateReason reason = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (iter->data), FAILURE_REASON_TAG));
+ NMSettingsConnection *connection = NM_SETTINGS_CONNECTION (iter->data);
- if (reason == NM_DEVICE_STATE_REASON_NO_SECRETS) {
- set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT);
- g_object_set_data (G_OBJECT (iter->data), FAILURE_REASON_TAG, GUINT_TO_POINTER (0));
+ if (nm_settings_connection_get_autoconnect_blocked_reason (connection) == NM_DEVICE_STATE_REASON_NO_SECRETS) {
+ nm_settings_connection_reset_autoconnect_retries (connection);
+ nm_settings_connection_set_autoconnect_blocked_reason (connection, NM_DEVICE_STATE_REASON_NONE);
}
}
g_slist_free (connections);
}
static void
+block_autoconnect_for_device (NMPolicy *policy, NMDevice *device)
+{
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
+ GSList *connections, *iter;
+
+ nm_log_dbg (LOGD_DEVICE, "Blocking autoconnect for all connections on %s",
+ nm_device_get_iface (device));
+
+ /* NMDevice keeps its own autoconnect-able-ness state; we only need to
+ * explicitly block connections for software devices, where the NMDevice
+ * might be destroyed and recreated later.
+ */
+ if (!nm_device_is_software (device))
+ return;
+
+ connections = nm_settings_get_connections (priv->settings);
+ for (iter = connections; iter; iter = g_slist_next (iter)) {
+ if (nm_device_check_connection_compatible (device, iter->data)) {
+ nm_settings_connection_set_autoconnect_blocked_reason (NM_SETTINGS_CONNECTION (iter->data),
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
+ }
+ }
+}
+
+static void
sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
{
NMPolicy *policy = user_data;
- NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
gboolean sleeping = FALSE, enabled = FALSE;
g_object_get (G_OBJECT (manager), NM_MANAGER_SLEEPING, &sleeping, NULL);
@@ -1215,34 +1225,52 @@ sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
/* Reset retries on all connections so they'll checked on wakeup */
if (sleeping || !enabled)
- reset_retries_all (priv->settings, NULL);
+ reset_autoconnect_all (policy, NULL);
}
static void
-schedule_activate_check (NMPolicy *policy, NMDevice *device, guint delay_seconds)
+schedule_activate_check (NMPolicy *policy, NMDevice *device)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
ActivateData *data;
- NMDeviceState state;
+ const GSList *active_connections, *iter;
if (nm_manager_get_state (priv->manager) == NM_STATE_ASLEEP)
return;
- state = nm_device_get_state (device);
- if (state < NM_DEVICE_STATE_DISCONNECTED)
- return;
-
if (!nm_device_get_enabled (device))
return;
if (!nm_device_autoconnect_allowed (device))
return;
- /* Schedule an auto-activation if there isn't one already for this device */
- if (find_pending_activation (priv->pending_activation_checks, device) == NULL) {
- data = activate_data_new (policy, device, delay_seconds);
- priv->pending_activation_checks = g_slist_append (priv->pending_activation_checks, data);
+ if (find_pending_activation (priv->pending_activation_checks, device))
+ return;
+
+ active_connections = nm_manager_get_active_connections (priv->manager);
+ for (iter = active_connections; iter; iter = iter->next) {
+ if (nm_active_connection_get_device (NM_ACTIVE_CONNECTION (iter->data)) == device)
+ return;
}
+
+ nm_device_add_pending_action (device, "autoactivate", TRUE);
+
+ data = g_malloc0 (sizeof (ActivateData));
+ data->policy = policy;
+ data->device = g_object_ref (device);
+ data->autoactivate_id = g_idle_add (auto_activate_device, data);
+ priv->pending_activation_checks = g_slist_append (priv->pending_activation_checks, data);
+}
+
+static void
+clear_pending_activate_check (NMPolicy *policy, NMDevice *device)
+{
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
+ ActivateData *data;
+
+ data = find_pending_activation (priv->pending_activation_checks, device);
+ if (data && data->autoactivate_id)
+ activate_data_free (data);
}
static gboolean
@@ -1251,31 +1279,32 @@ reset_connections_retries (gpointer user_data)
NMPolicy *policy = (NMPolicy *) user_data;
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
GSList *connections, *iter;
- time_t con_stamp, min_stamp, now;
+ gint32 con_stamp, min_stamp, now;
gboolean changed = FALSE;
priv->reset_retries_id = 0;
- min_stamp = now = time (NULL);
+ min_stamp = 0;
+ now = nm_utils_get_monotonic_timestamp_s ();
connections = nm_settings_get_connections (priv->settings);
for (iter = connections; iter; iter = g_slist_next (iter)) {
- con_stamp = GPOINTER_TO_SIZE (g_object_get_data (G_OBJECT (iter->data), RESET_RETRIES_TIMESTAMP_TAG));
+ NMSettingsConnection *connection = NM_SETTINGS_CONNECTION (iter->data);
+
+ con_stamp = nm_settings_connection_get_autoconnect_retry_time (connection);
if (con_stamp == 0)
continue;
- if (con_stamp + RESET_RETRIES_TIMER <= now) {
- set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT);
- g_object_set_data (G_OBJECT (iter->data), RESET_RETRIES_TIMESTAMP_TAG, GSIZE_TO_POINTER (0));
+
+ if (con_stamp <= now) {
+ nm_settings_connection_reset_autoconnect_retries (connection);
changed = TRUE;
- continue;
- }
- if (con_stamp < min_stamp)
+ } else if (min_stamp == 0 || min_stamp > con_stamp)
min_stamp = con_stamp;
}
g_slist_free (connections);
/* Schedule the handler again if there are some stamps left */
- if (min_stamp != now)
- priv->reset_retries_id = g_timeout_add_seconds (RESET_RETRIES_TIMER - (now - min_stamp), reset_connections_retries, policy);
+ if (min_stamp != 0)
+ priv->reset_retries_id = g_timeout_add_seconds (min_stamp - now, reset_connections_retries, policy);
/* If anything changed, try to activate the newly re-enabled connections */
if (changed)
@@ -1287,29 +1316,37 @@ reset_connections_retries (gpointer user_data)
static void schedule_activate_all (NMPolicy *policy);
static void
-activate_slave_connections (NMPolicy *policy, NMConnection *connection,
- NMDevice *device)
+activate_slave_connections (NMPolicy *policy, NMDevice *device)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- const char *master_device;
+ const char *master_device, *master_uuid = NULL;
GSList *connections, *iter;
+ NMActRequest *req;
master_device = nm_device_get_iface (device);
g_assert (master_device);
+ req = nm_device_get_act_request (device);
+ if (req)
+ master_uuid = nm_active_connection_get_uuid (NM_ACTIVE_CONNECTION (req));
+
connections = nm_settings_get_connections (priv->settings);
for (iter = connections; iter; iter = g_slist_next (iter)) {
NMConnection *slave;
NMSettingConnection *s_slave_con;
+ const char *slave_master;
slave = NM_CONNECTION (iter->data);
g_assert (slave);
s_slave_con = nm_connection_get_setting_connection (slave);
g_assert (s_slave_con);
+ slave_master = nm_setting_connection_get_master (s_slave_con);
+ if (!slave_master)
+ continue;
- if (!g_strcmp0 (nm_setting_connection_get_master (s_slave_con), master_device))
- set_connection_auto_retries (slave, RETRIES_DEFAULT);
+ if (!g_strcmp0 (slave_master, master_device) || !g_strcmp0 (slave_master, master_uuid))
+ nm_settings_connection_reset_autoconnect_retries (NM_SETTINGS_CONNECTION (slave));
}
g_slist_free (connections);
@@ -1337,46 +1374,52 @@ activate_secondary_connections (NMPolicy *policy,
for (i = 0; i < nm_setting_connection_get_num_secondaries (s_con); i++) {
const char *sec_uuid = nm_setting_connection_get_secondary (s_con, i);
+ NMActRequest *req;
settings_con = nm_settings_get_connection_by_uuid (priv->settings, sec_uuid);
- if (settings_con) {
- NMActRequest *req = nm_device_get_act_request (device);
- g_assert (req);
-
- nm_log_dbg (LOGD_DEVICE, "Activating secondary connection '%s (%s)' for base connection '%s (%s)'",
- nm_connection_get_id (NM_CONNECTION (settings_con)), sec_uuid,
- nm_connection_get_id (connection), nm_connection_get_uuid (connection));
- ac = nm_manager_activate_connection (priv->manager,
- NM_CONNECTION (settings_con),
- nm_active_connection_get_path (NM_ACTIVE_CONNECTION (req)),
- nm_device_get_path (device),
- nm_act_request_get_dbus_sender (req),
- &error);
- if (ac) {
- secondary_ac_list = g_slist_append (secondary_ac_list,
- g_strdup (nm_active_connection_get_path (ac)));
- } else {
- nm_log_warn (LOGD_DEVICE, "Secondary connection '%s' auto-activation failed: (%d) %s",
- sec_uuid,
- error ? error->code : 0,
- (error && error->message) ? error->message : "unknown");
- g_clear_error (&error);
- success = FALSE;
- break;
- }
- } else {
+ if (!settings_con) {
nm_log_warn (LOGD_DEVICE, "Secondary connection '%s' auto-activation failed: The connection doesn't exist.",
sec_uuid);
success = FALSE;
break;
}
+ if (!nm_connection_is_type (NM_CONNECTION (settings_con), NM_SETTING_VPN_SETTING_NAME)) {
+ nm_log_warn (LOGD_DEVICE, "Secondary connection '%s (%s)' auto-activation failed: The connection is not a VPN.",
+ nm_connection_get_id (NM_CONNECTION (settings_con)), sec_uuid);
+ success = FALSE;
+ break;
+ }
+
+ req = nm_device_get_act_request (device);
+ g_assert (req);
+
+ nm_log_dbg (LOGD_DEVICE, "Activating secondary connection '%s (%s)' for base connection '%s (%s)'",
+ nm_connection_get_id (NM_CONNECTION (settings_con)), sec_uuid,
+ nm_connection_get_id (connection), nm_connection_get_uuid (connection));
+ ac = nm_manager_activate_connection (priv->manager,
+ NM_CONNECTION (settings_con),
+ nm_active_connection_get_path (NM_ACTIVE_CONNECTION (req)),
+ device,
+ nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (req)),
+ &error);
+ if (ac)
+ secondary_ac_list = g_slist_append (secondary_ac_list, g_object_ref (ac));
+ else {
+ nm_log_warn (LOGD_DEVICE, "Secondary connection '%s (%s)' auto-activation failed: (%d) %s",
+ nm_connection_get_id (NM_CONNECTION (settings_con)), sec_uuid,
+ error ? error->code : 0,
+ (error && error->message) ? error->message : "unknown");
+ g_clear_error (&error);
+ success = FALSE;
+ break;
+ }
}
if (success && secondary_ac_list != NULL) {
secondary_data = pending_secondary_data_new (device, secondary_ac_list);
priv->pending_secondaries = g_slist_append (priv->pending_secondaries, secondary_data);
} else
- nm_utils_slist_free (secondary_ac_list, g_free);
+ g_slist_free_full (secondary_ac_list, g_object_unref);
return success;
}
@@ -1390,14 +1433,11 @@ device_state_changed (NMDevice *device,
{
NMPolicy *policy = (NMPolicy *) user_data;
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- NMConnection *connection = nm_device_get_connection (device);
+ NMSettingsConnection *connection = NM_SETTINGS_CONNECTION (nm_device_get_connection (device));
const char *ip_iface = nm_device_get_ip_iface (device);
NMIP4Config *ip4_config;
NMIP6Config *ip6_config;
- NMSettingConnection *s_con;
-
- if (connection)
- g_object_set_data (G_OBJECT (connection), FAILURE_REASON_TAG, GUINT_TO_POINTER (0));
+ NMSettingConnection *s_con = NULL;
switch (new_state) {
case NM_DEVICE_STATE_FAILED:
@@ -1407,47 +1447,42 @@ device_state_changed (NMDevice *device,
if ( connection
&& old_state >= NM_DEVICE_STATE_PREPARE
&& old_state <= NM_DEVICE_STATE_ACTIVATED) {
- guint32 tries = get_connection_auto_retries (connection);
+ guint32 tries = nm_settings_connection_get_autoconnect_retries (connection);
if (reason == NM_DEVICE_STATE_REASON_NO_SECRETS) {
- /* If the connection couldn't get the secrets it needed (ex because
- * the user canceled, or no secrets exist), there's no point in
- * automatically retrying because it's just going to fail anyway.
- */
- set_connection_auto_retries (connection, 0);
-
- /* Mark the connection as failed due to missing secrets so that we can reset
- * RETRIES_TAG and automatically re-try when an secret agent registers.
- */
- g_object_set_data (G_OBJECT (connection), FAILURE_REASON_TAG, GUINT_TO_POINTER (NM_DEVICE_STATE_REASON_NO_SECRETS));
+ nm_log_dbg (LOGD_DEVICE, "Connection '%s' now blocked from autoconnect due to no secrets",
+ nm_connection_get_id (NM_CONNECTION (connection)));
+
+ nm_settings_connection_set_autoconnect_blocked_reason (connection, NM_DEVICE_STATE_REASON_NO_SECRETS);
} else if (tries > 0) {
- /* Otherwise if it's a random failure, just decrease the number
- * of automatic retries so that the connection gets tried again
- * if it still has a retry count.
- */
- set_connection_auto_retries (connection, tries - 1);
+ nm_log_dbg (LOGD_DEVICE, "Connection '%s' failed to autoconnect; %d tries left",
+ nm_connection_get_id (NM_CONNECTION (connection)), tries);
+ nm_settings_connection_set_autoconnect_retries (connection, tries - 1);
}
- if (get_connection_auto_retries (connection) == 0) {
- nm_log_info (LOGD_DEVICE, "Marking connection '%s' invalid.", nm_connection_get_id (connection));
+ if (nm_settings_connection_get_autoconnect_retries (connection) == 0) {
+ nm_log_info (LOGD_DEVICE, "Disabling autoconnect for connection '%s'.",
+ nm_connection_get_id (NM_CONNECTION (connection)));
/* Schedule a handler to reset retries count */
- g_object_set_data (G_OBJECT (connection), RESET_RETRIES_TIMESTAMP_TAG, GSIZE_TO_POINTER ((gsize) time (NULL)));
- if (!priv->reset_retries_id)
- priv->reset_retries_id = g_timeout_add_seconds (RESET_RETRIES_TIMER, reset_connections_retries, policy);
+ if (!priv->reset_retries_id) {
+ gint32 retry_time = nm_settings_connection_get_autoconnect_retry_time (connection);
+
+ g_warn_if_fail (retry_time != 0);
+ priv->reset_retries_id = g_timeout_add_seconds (MAX (0, retry_time - nm_utils_get_monotonic_timestamp_s ()), reset_connections_retries, policy);
+ }
}
- nm_connection_clear_secrets (connection);
+ nm_connection_clear_secrets (NM_CONNECTION (connection));
}
- schedule_activate_check (policy, device, 3);
break;
case NM_DEVICE_STATE_ACTIVATED:
if (connection) {
/* Reset auto retries back to default since connection was successful */
- set_connection_auto_retries (connection, RETRIES_DEFAULT);
+ nm_settings_connection_reset_autoconnect_retries (connection);
/* And clear secrets so they will always be requested from the
* settings service when the next connection is made.
*/
- nm_connection_clear_secrets (connection);
+ nm_connection_clear_secrets (NM_CONNECTION (connection));
}
/* Add device's new IPv4 and IPv6 configs to DNS */
@@ -1470,32 +1505,55 @@ device_state_changed (NMDevice *device,
if (old_state > NM_DEVICE_STATE_DISCONNECTED)
update_routing_and_dns (policy, FALSE);
break;
+ case NM_DEVICE_STATE_DEACTIVATING:
+ if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED) {
+ if (!nm_device_get_autoconnect (device)) {
+ /* The device was disconnected; block all connections on it */
+ block_autoconnect_for_device (policy, device);
+ } else {
+ if (connection) {
+ /* The connection was deactivated, so block just this connection */
+ nm_log_dbg (LOGD_DEVICE, "Blocking autoconnect of connection '%s' by user request",
+ nm_connection_get_id (NM_CONNECTION (connection)));
+ nm_settings_connection_set_autoconnect_blocked_reason (connection,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
+ }
+ }
+ }
+ break;
case NM_DEVICE_STATE_DISCONNECTED:
- /* Reset RETRIES_TAG when carrier on. If cable was unplugged
- * and plugged again, we should try to reconnect */
+ /* Reset retry counts for a device's connections when carrier on; if cable
+ * was unplugged and plugged in again, we should try to reconnect.
+ */
if (reason == NM_DEVICE_STATE_REASON_CARRIER && old_state == NM_DEVICE_STATE_UNAVAILABLE)
- reset_retries_all (priv->settings, device);
+ reset_autoconnect_all (policy, device);
if (old_state > NM_DEVICE_STATE_DISCONNECTED)
update_routing_and_dns (policy, FALSE);
/* Device is now available for auto-activation */
- schedule_activate_check (policy, device, 0);
+ schedule_activate_check (policy, device);
break;
case NM_DEVICE_STATE_PREPARE:
/* Reset auto-connect retries of all slaves and schedule them for
* activation. */
- activate_slave_connections (policy, connection, device);
+ activate_slave_connections (policy, device);
+ break;
+ case NM_DEVICE_STATE_IP_CONFIG:
+ /* We must have secrets if we got here. */
+ if (connection)
+ nm_settings_connection_set_autoconnect_blocked_reason (connection, NM_DEVICE_STATE_REASON_NONE);
break;
case NM_DEVICE_STATE_SECONDARIES:
- s_con = nm_connection_get_setting_connection (connection);
+ if (connection)
+ s_con = nm_connection_get_setting_connection (NM_CONNECTION (connection));
if (s_con && nm_setting_connection_get_num_secondaries (s_con) > 0) {
/* Make routes and DNS up-to-date before activating dependent connections */
update_routing_and_dns (policy, FALSE);
/* Activate secondary (VPN) connections */
- if (!activate_secondary_connections (policy, connection, device))
+ if (!activate_secondary_connections (policy, NM_CONNECTION (connection), device))
nm_device_queue_state (device, NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED);
} else
@@ -1519,27 +1577,26 @@ device_ip4_config_changed (NMDevice *device,
NMPolicy *policy = user_data;
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
const char *ip_iface = nm_device_get_ip_iface (device);
- NMIP4ConfigCompareFlags diff = NM_IP4_COMPARE_FLAG_ALL;
nm_dns_manager_begin_updates (priv->dns_manager, __func__);
- /* Old configs get removed immediately */
- if (old_config)
- nm_dns_manager_remove_ip4_config (priv->dns_manager, old_config);
-
/* Ignore IP config changes while the device is activating, because we'll
* catch all the changes when the device moves to ACTIVATED state.
* Prevents unecessary changes to DNS information.
*/
if (!nm_device_is_activating (device)) {
- if (new_config)
- nm_dns_manager_add_ip4_config (priv->dns_manager, ip_iface, new_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
+ if (old_config != new_config) {
+ if (old_config)
+ nm_dns_manager_remove_ip4_config (priv->dns_manager, old_config);
+ if (new_config)
+ nm_dns_manager_add_ip4_config (priv->dns_manager, ip_iface, new_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
+ }
update_ip4_dns (policy, priv->dns_manager);
-
- /* Only change routing if something actually changed */
- diff = nm_ip4_config_diff (new_config, old_config);
- if (diff & (NM_IP4_COMPARE_FLAG_ADDRESSES | NM_IP4_COMPARE_FLAG_PTP_ADDRESS | NM_IP4_COMPARE_FLAG_ROUTES))
- update_ip4_routing (policy, TRUE);
+ update_ip4_routing (policy, TRUE);
+ } else {
+ /* Old configs get removed immediately */
+ if (old_config)
+ nm_dns_manager_remove_ip4_config (priv->dns_manager, old_config);
}
nm_dns_manager_end_updates (priv->dns_manager, __func__);
@@ -1554,27 +1611,26 @@ device_ip6_config_changed (NMDevice *device,
NMPolicy *policy = user_data;
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
const char *ip_iface = nm_device_get_ip_iface (device);
- NMIP4ConfigCompareFlags diff = NM_IP4_COMPARE_FLAG_ALL;
nm_dns_manager_begin_updates (priv->dns_manager, __func__);
- /* Old configs get removed immediately */
- if (old_config)
- nm_dns_manager_remove_ip6_config (priv->dns_manager, old_config);
-
/* Ignore IP config changes while the device is activating, because we'll
* catch all the changes when the device moves to ACTIVATED state.
* Prevents unecessary changes to DNS information.
*/
if (!nm_device_is_activating (device)) {
- if (new_config)
- nm_dns_manager_add_ip6_config (priv->dns_manager, ip_iface, new_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
+ if (old_config != new_config) {
+ if (old_config)
+ nm_dns_manager_remove_ip6_config (priv->dns_manager, old_config);
+ if (new_config)
+ nm_dns_manager_add_ip6_config (priv->dns_manager, ip_iface, new_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
+ }
update_ip6_dns (policy, priv->dns_manager);
-
- /* Only change routing if something actually changed */
- diff = nm_ip6_config_diff (new_config, old_config);
- if (diff & (NM_IP6_COMPARE_FLAG_ADDRESSES | NM_IP6_COMPARE_FLAG_PTP_ADDRESS | NM_IP6_COMPARE_FLAG_ROUTES))
- update_ip6_routing (policy, TRUE);
+ update_ip6_routing (policy, TRUE);
+ } else {
+ /* Old configs get removed immediately */
+ if (old_config)
+ nm_dns_manager_remove_ip6_config (priv->dns_manager, old_config);
}
nm_dns_manager_end_updates (priv->dns_manager, __func__);
@@ -1586,25 +1642,13 @@ device_autoconnect_changed (NMDevice *device,
gpointer user_data)
{
if (nm_device_get_autoconnect (device))
- schedule_activate_check ((NMPolicy *) user_data, device, 0);
+ schedule_activate_check ((NMPolicy *) user_data, device);
}
static void
-wireless_networks_changed (NMDevice *device, GObject *ap, gpointer user_data)
+device_recheck_auto_activate (NMDevice *device, gpointer user_data)
{
- schedule_activate_check ((NMPolicy *) user_data, device, 0);
-}
-
-static void
-nsps_changed (NMDevice *device, GObject *nsp, gpointer user_data)
-{
- schedule_activate_check ((NMPolicy *) user_data, device, 0);
-}
-
-static void
-modem_enabled_changed (NMDevice *device, gpointer user_data)
-{
- schedule_activate_check ((NMPolicy *) (user_data), device, 0);
+ schedule_activate_check (NM_POLICY (user_data), device);
}
typedef struct {
@@ -1613,14 +1657,21 @@ typedef struct {
} DeviceSignalId;
static void
-_connect_device_signal (NMPolicy *policy, NMDevice *device, const char *name, gpointer callback)
+_connect_device_signal (NMPolicy *policy,
+ NMDevice *device,
+ const char *name,
+ gpointer callback,
+ gboolean after)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
DeviceSignalId *data;
data = g_slice_new0 (DeviceSignalId);
g_assert (data);
- data->id = g_signal_connect (device, name, callback, policy);
+ if (after)
+ data->id = g_signal_connect_after (device, name, callback, policy);
+ else
+ data->id = g_signal_connect (device, name, callback, policy);
data->device = device;
priv->dev_ids = g_slist_prepend (priv->dev_ids, data);
}
@@ -1630,26 +1681,12 @@ device_added (NMManager *manager, NMDevice *device, gpointer user_data)
{
NMPolicy *policy = (NMPolicy *) user_data;
- _connect_device_signal (policy, device, "state-changed", device_state_changed);
- _connect_device_signal (policy, device, NM_DEVICE_IP4_CONFIG_CHANGED, device_ip4_config_changed);
- _connect_device_signal (policy, device, NM_DEVICE_IP6_CONFIG_CHANGED, device_ip6_config_changed);
- _connect_device_signal (policy, device, "notify::" NM_DEVICE_AUTOCONNECT, device_autoconnect_changed);
-
- switch (nm_device_get_device_type (device)) {
- case NM_DEVICE_TYPE_WIFI:
- _connect_device_signal (policy, device, "access-point-added", wireless_networks_changed);
- _connect_device_signal (policy, device, "access-point-removed", wireless_networks_changed);
- break;
- case NM_DEVICE_TYPE_WIMAX:
- _connect_device_signal (policy, device, "nsp-added", nsps_changed);
- _connect_device_signal (policy, device, "nsp-removed", nsps_changed);
- break;
- case NM_DEVICE_TYPE_MODEM:
- _connect_device_signal (policy, device, "enable-changed", modem_enabled_changed);
- break;
- default:
- break;
- }
+ /* Connect state-changed with _after, so that the handler is invoked after other handlers. */
+ _connect_device_signal (policy, device, "state-changed", device_state_changed, TRUE);
+ _connect_device_signal (policy, device, NM_DEVICE_IP4_CONFIG_CHANGED, device_ip4_config_changed, FALSE);
+ _connect_device_signal (policy, device, NM_DEVICE_IP6_CONFIG_CHANGED, device_ip6_config_changed, FALSE);
+ _connect_device_signal (policy, device, "notify::" NM_DEVICE_AUTOCONNECT, device_autoconnect_changed, FALSE);
+ _connect_device_signal (policy, device, NM_DEVICE_RECHECK_AUTO_ACTIVATE, device_recheck_auto_activate, FALSE);
}
static void
@@ -1657,15 +1694,10 @@ device_removed (NMManager *manager, NMDevice *device, gpointer user_data)
{
NMPolicy *policy = (NMPolicy *) user_data;
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- ActivateData *tmp;
GSList *iter;
/* Clear any idle callbacks for this device */
- tmp = find_pending_activation (priv->pending_activation_checks, device);
- if (tmp) {
- priv->pending_activation_checks = g_slist_remove (priv->pending_activation_checks, tmp);
- activate_data_free (tmp);
- }
+ clear_pending_activate_check (policy, device);
/* Clear any signal handlers for this device */
iter = priv->dev_ids;
@@ -1691,13 +1723,12 @@ device_removed (NMManager *manager, NMDevice *device, gpointer user_data)
static void
vpn_connection_activated (NMPolicy *policy, NMVPNConnection *vpn)
{
- NMDnsManager *mgr;
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
NMIP4Config *ip4_config;
NMIP6Config *ip6_config;
const char *ip_iface;
- mgr = nm_dns_manager_get (NULL);
- nm_dns_manager_begin_updates (mgr, __func__);
+ nm_dns_manager_begin_updates (priv->dns_manager, __func__);
ip_iface = nm_vpn_connection_get_ip_iface (vpn);
@@ -1705,81 +1736,58 @@ vpn_connection_activated (NMPolicy *policy, NMVPNConnection *vpn)
ip4_config = nm_vpn_connection_get_ip4_config (vpn);
if (ip4_config)
- nm_dns_manager_add_ip4_config (mgr, ip_iface, ip4_config, NM_DNS_IP_CONFIG_TYPE_VPN);
+ nm_dns_manager_add_ip4_config (priv->dns_manager, ip_iface, ip4_config, NM_DNS_IP_CONFIG_TYPE_VPN);
ip6_config = nm_vpn_connection_get_ip6_config (vpn);
if (ip6_config)
- nm_dns_manager_add_ip6_config (mgr, ip_iface, ip6_config, NM_DNS_IP_CONFIG_TYPE_VPN);
+ nm_dns_manager_add_ip6_config (priv->dns_manager, ip_iface, ip6_config, NM_DNS_IP_CONFIG_TYPE_VPN);
update_routing_and_dns (policy, TRUE);
- nm_dns_manager_end_updates (mgr, __func__);
-
- process_secondaries (policy, NM_ACTIVE_CONNECTION (vpn), TRUE);
+ nm_dns_manager_end_updates (priv->dns_manager, __func__);
}
static void
vpn_connection_deactivated (NMPolicy *policy, NMVPNConnection *vpn)
{
- NMDnsManager *mgr;
- NMIP4Config *ip4_config, *parent_ip4 = NULL;
- NMIP6Config *ip6_config, *parent_ip6 = NULL;
- const char *ip_iface;
- NMDevice *parent;
-
- mgr = nm_dns_manager_get (NULL);
- nm_dns_manager_begin_updates (mgr, __func__);
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
+ NMIP4Config *ip4_config;
+ NMIP6Config *ip6_config;
- ip_iface = nm_vpn_connection_get_ip_iface (vpn);
- parent = nm_vpn_connection_get_parent_device (vpn);
+ nm_dns_manager_begin_updates (priv->dns_manager, __func__);
ip4_config = nm_vpn_connection_get_ip4_config (vpn);
if (ip4_config) {
/* Remove the VPN connection's IP4 config from DNS */
- nm_dns_manager_remove_ip4_config (mgr, ip4_config);
-
- /* Re-apply routes and addresses of the VPN connection's parent interface,
- * which the VPN might have overridden.
- */
- if (parent) {
- parent_ip4 = nm_device_get_ip4_config (parent);
- if (parent_ip4) {
- if (!nm_system_apply_ip4_config (nm_device_get_ip_ifindex (parent),
- parent_ip4,
- nm_device_get_priority (parent),
- NM_IP4_COMPARE_FLAG_ADDRESSES | NM_IP4_COMPARE_FLAG_ROUTES)) {
- nm_log_err (LOGD_VPN, "failed to re-apply VPN parent device IPv4 addresses and routes.");
- }
- }
- }
+ nm_dns_manager_remove_ip4_config (priv->dns_manager, ip4_config);
}
ip6_config = nm_vpn_connection_get_ip6_config (vpn);
if (ip6_config) {
/* Remove the VPN connection's IP6 config from DNS */
- nm_dns_manager_remove_ip6_config (mgr, ip6_config);
-
- /* Re-apply routes and addresses of the VPN connection's parent interface,
- * which the VPN might have overridden.
- */
- if (parent) {
- parent_ip6 = nm_device_get_ip6_config (parent);
- if (parent_ip6) {
- if (!nm_system_apply_ip6_config (nm_device_get_ip_ifindex (parent),
- parent_ip6,
- nm_device_get_priority (parent),
- NM_IP6_COMPARE_FLAG_ADDRESSES | NM_IP6_COMPARE_FLAG_ROUTES)) {
- nm_log_err (LOGD_VPN, "failed to re-apply VPN parent device IPv6 addresses and routes.");
- }
- }
- }
+ nm_dns_manager_remove_ip6_config (priv->dns_manager, ip6_config);
}
update_routing_and_dns (policy, TRUE);
- nm_dns_manager_end_updates (mgr, __func__);
+ nm_dns_manager_end_updates (priv->dns_manager, __func__);
+}
- process_secondaries (policy, NM_ACTIVE_CONNECTION (vpn), FALSE);
+static void
+vpn_connection_state_changed (NMVPNConnection *vpn,
+ NMVPNConnectionState new_state,
+ NMVPNConnectionState old_state,
+ NMVPNConnectionStateReason reason,
+ NMPolicy *policy)
+{
+ if (new_state == NM_VPN_CONNECTION_STATE_ACTIVATED)
+ vpn_connection_activated (policy, vpn);
+ else if (new_state >= NM_VPN_CONNECTION_STATE_FAILED) {
+ /* Only clean up IP/DNS if the connection ever got past IP_CONFIG */
+ if (old_state >= NM_VPN_CONNECTION_STATE_IP_CONFIG_GET &&
+ old_state <= NM_VPN_CONNECTION_STATE_ACTIVATED)
+ vpn_connection_deactivated (policy, vpn);
+ }
}
static void
@@ -1787,18 +1795,12 @@ active_connection_state_changed (NMActiveConnection *active,
GParamSpec *pspec,
NMPolicy *policy)
{
- switch (nm_active_connection_get_state (active)) {
- case NM_ACTIVE_CONNECTION_STATE_ACTIVATED:
- if (NM_IS_VPN_CONNECTION (active))
- vpn_connection_activated (policy, NM_VPN_CONNECTION (active));
- break;
- case NM_ACTIVE_CONNECTION_STATE_DEACTIVATED:
- if (NM_IS_VPN_CONNECTION (active))
- vpn_connection_deactivated (policy, NM_VPN_CONNECTION (active));
- break;
- default:
- break;
- }
+ NMActiveConnectionState state = nm_active_connection_get_state (active);
+
+ if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED)
+ process_secondaries (policy, active, TRUE);
+ else if (state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED)
+ process_secondaries (policy, active, FALSE);
}
static void
@@ -1806,7 +1808,13 @@ active_connection_added (NMManager *manager,
NMActiveConnection *active,
gpointer user_data)
{
- NMPolicy *policy = (NMPolicy *) user_data;
+ NMPolicy *policy = NM_POLICY (user_data);
+
+ if (NM_IS_VPN_CONNECTION (active)) {
+ g_signal_connect (active, NM_VPN_CONNECTION_INTERNAL_STATE_CHANGED,
+ G_CALLBACK (vpn_connection_state_changed),
+ policy);
+ }
g_signal_connect (active, "notify::" NM_ACTIVE_CONNECTION_STATE,
G_CALLBACK (active_connection_state_changed),
@@ -1818,9 +1826,14 @@ active_connection_removed (NMManager *manager,
NMActiveConnection *active,
gpointer user_data)
{
+ NMPolicy *policy = NM_POLICY (user_data);
+
+ g_signal_handlers_disconnect_by_func (active,
+ vpn_connection_state_changed,
+ policy);
g_signal_handlers_disconnect_by_func (active,
active_connection_state_changed,
- (NMPolicy *) user_data);
+ policy);
}
/**************************************************************************/
@@ -1829,33 +1842,20 @@ static void
schedule_activate_all (NMPolicy *policy)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- GSList *iter, *devices;
+ const GSList *iter;
- devices = nm_manager_get_devices (priv->manager);
- for (iter = devices; iter; iter = g_slist_next (iter))
- schedule_activate_check (policy, NM_DEVICE (iter->data), 0);
+ for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter))
+ schedule_activate_check (policy, NM_DEVICE (iter->data));
}
static void
connection_added (NMSettings *settings,
- NMConnection *connection,
+ NMSettingsConnection *connection,
gpointer user_data)
{
- set_connection_auto_retries (connection, RETRIES_DEFAULT);
- schedule_activate_all ((NMPolicy *) user_data);
-}
-
-static void
-connections_loaded (NMSettings *settings, gpointer user_data)
-{
- // FIXME: "connections-loaded" signal is emmitted *before* we connect to it
- // in nm_policy_new(). So this function is never called. Currently we work around
- // that by calling reset_retries_all() in nm_policy_new()
-
- /* Initialize connections' auto-retries */
- reset_retries_all (settings, NULL);
+ NMPolicy *policy = NM_POLICY (user_data);
- schedule_activate_all ((NMPolicy *) user_data);
+ schedule_activate_all (policy);
}
static void
@@ -1875,11 +1875,10 @@ firewall_update_zone (NMPolicy *policy, NMConnection *connection)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
- GSList *iter, *devices;
+ const GSList *iter;
- devices = nm_manager_get_devices (priv->manager);
/* find dev with passed connection and change zone its interface belongs to */
- for (iter = devices; iter; iter = g_slist_next (iter)) {
+ for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
NMDevice *dev = NM_DEVICE (iter->data);
if ( (nm_device_get_connection (dev) == connection)
@@ -1902,20 +1901,22 @@ firewall_started (NMFirewallManager *manager,
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
NMConnection *connection;
NMSettingConnection *s_con;
- GSList *iter, *devices;
+ const GSList *iter;
- devices = nm_manager_get_devices (priv->manager);
/* add interface of each device to correct zone */
- for (iter = devices; iter; iter = g_slist_next (iter)) {
+ for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
NMDevice *dev = NM_DEVICE (iter->data);
connection = nm_device_get_connection (dev);
+ if (!connection)
+ continue;
+
s_con = nm_connection_get_setting_connection (connection);
if (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED) {
nm_firewall_manager_add_or_change_zone (priv->fw_manager,
nm_device_get_ip_iface (dev),
nm_setting_connection_get_zone (s_con),
- TRUE, /* add zone */
+ FALSE, /* still change zone */
add_or_change_zone_cb,
g_object_ref (dev));
}
@@ -1934,29 +1935,23 @@ dns_config_changed (NMDnsManager *dns_manager, gpointer user_data)
*/
/* Stop a lookup thread if any. */
- if (priv->lookup) {
- hostname_thread_kill (priv->lookup);
- priv->lookup = NULL;
+ if (priv->lookup_cancellable) {
+ g_cancellable_cancel (priv->lookup_cancellable);
+ g_clear_object (&priv->lookup_cancellable);
}
/* Re-start the hostname lookup thread if we don't have hostname yet. */
- if (priv->lookup_ipv4_addr) {
- char buf[INET_ADDRSTRLEN];
- struct in_addr addr = { .s_addr = priv->lookup_ipv4_addr };
-
- if (!inet_ntop (AF_INET, &addr, buf, sizeof (buf)))
- strcpy (buf, "(unknown)");
- nm_log_dbg (LOGD_DNS, "restarting IPv4 reverse-lookup thread for address %s'", buf);
-
- priv->lookup = hostname4_thread_new (priv->lookup_ipv4_addr, lookup_callback, policy);
- } else if (priv->lookup_ipv6_addr) {
- char buf[INET6_ADDRSTRLEN];
-
- if (!inet_ntop (AF_INET6, priv->lookup_ipv6_addr, buf, sizeof (buf)))
- strcpy (buf, "(unknown)");
- nm_log_dbg (LOGD_DNS, "restarting IPv6 reverse-lookup thread for address %s'", buf);
-
- priv->lookup = hostname6_thread_new (priv->lookup_ipv6_addr, lookup_callback, policy);
+ if (priv->lookup_addr) {
+ char *str = g_inet_address_to_string (priv->lookup_addr);
+
+ nm_log_dbg (LOGD_DNS, "restarting reverse-lookup thread for address %s", str);
+ g_free (str);
+
+ priv->lookup_cancellable = g_cancellable_new ();
+ g_resolver_lookup_by_address_async (priv->resolver,
+ priv->lookup_addr,
+ priv->lookup_cancellable,
+ lookup_callback, policy);
}
}
@@ -1969,13 +1964,19 @@ connection_updated (NMSettings *settings,
firewall_update_zone (policy, connection);
- /* Reset auto retries back to default since connection was updated */
- set_connection_auto_retries (connection, RETRIES_DEFAULT);
-
schedule_activate_all (policy);
}
static void
+connection_updated_by_user (NMSettings *settings,
+ NMSettingsConnection *connection,
+ gpointer user_data)
+{
+ /* Reset auto retries back to default since connection was updated */
+ nm_settings_connection_reset_autoconnect_retries (connection);
+}
+
+static void
_deactivate_if_active (NMManager *manager, NMConnection *connection)
{
const GSList *active, *iter;
@@ -2032,12 +2033,14 @@ secret_agent_registered (NMSettings *settings,
NMSecretAgent *agent,
gpointer user_data)
{
+ NMPolicy *policy = NM_POLICY (user_data);
+
/* The registered secret agent may provide some missing secrets. Thus we
* reset retries count here and schedule activation, so that the
* connections failed due to missing secrets may re-try auto-connection.
*/
- reset_retries_for_failed_secrets (settings);
- schedule_activate_all ((NMPolicy *) user_data);
+ reset_autoconnect_for_failed_secrets (policy);
+ schedule_activate_all (policy);
}
static void
@@ -2094,9 +2097,12 @@ nm_policy_new (NMManager *manager, NMSettings *settings)
G_CALLBACK (firewall_started), policy);
priv->fw_started_id = id;
- priv->dns_manager = nm_dns_manager_get (NULL);
+ priv->dns_manager = nm_dns_manager_get ();
+ nm_dns_manager_set_initial_hostname (priv->dns_manager, priv->orig_hostname);
priv->config_changed_id = g_signal_connect (priv->dns_manager, "config-changed",
- G_CALLBACK (dns_config_changed), policy);
+ G_CALLBACK (dns_config_changed), policy);
+
+ priv->resolver = g_resolver_get_default ();
_connect_manager_signal (policy, "state-changed", global_state_changed);
_connect_manager_signal (policy, "notify::" NM_MANAGER_HOSTNAME, hostname_changed);
@@ -2107,17 +2113,14 @@ nm_policy_new (NMManager *manager, NMSettings *settings)
_connect_manager_signal (policy, NM_MANAGER_ACTIVE_CONNECTION_ADDED, active_connection_added);
_connect_manager_signal (policy, NM_MANAGER_ACTIVE_CONNECTION_REMOVED, active_connection_removed);
- _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTIONS_LOADED, connections_loaded);
_connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_ADDED, connection_added);
_connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED, connection_updated);
+ _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER, connection_updated_by_user);
_connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, connection_removed);
_connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED,
connection_visibility_changed);
_connect_settings_signal (policy, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, secret_agent_registered);
- /* Initialize connections' auto-retries */
- reset_retries_all (priv->settings, NULL);
-
initialized = TRUE;
return policy;
}
@@ -2184,17 +2187,16 @@ dispose (GObject *object)
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
const GSList *connections, *iter;
- /* Tell any existing hostname lookup thread to die, it'll get cleaned up
- * by the lookup thread callback.
- */
- if (priv->lookup) {
- hostname_thread_kill (priv->lookup);
- priv->lookup = NULL;
+ /* Tell any existing hostname lookup thread to die. */
+ if (priv->lookup_cancellable) {
+ g_cancellable_cancel (priv->lookup_cancellable);
+ g_clear_object (&priv->lookup_cancellable);
}
- g_free (priv->lookup_ipv6_addr);
+ g_clear_object (&priv->lookup_addr);
+ g_clear_object (&priv->resolver);
- g_slist_free_full (priv->pending_activation_checks, (GDestroyNotify) activate_data_free);
- priv->pending_activation_checks = NULL;
+ while (priv->pending_activation_checks)
+ activate_data_free (priv->pending_activation_checks->data);
g_slist_free_full (priv->pending_secondaries, (GDestroyNotify) pending_secondary_data_free);
priv->pending_secondaries = NULL;
@@ -2207,19 +2209,16 @@ dispose (GObject *object)
if (priv->dns_manager) {
g_signal_handler_disconnect (priv->dns_manager, priv->config_changed_id);
- g_object_unref (priv->dns_manager);
priv->dns_manager = NULL;
}
for (iter = priv->manager_ids; iter; iter = g_slist_next (iter))
g_signal_handler_disconnect (priv->manager, GPOINTER_TO_UINT (iter->data));
- g_slist_free (priv->manager_ids);
- priv->manager_ids = NULL;
+ g_clear_pointer (&priv->manager_ids, g_slist_free);
for (iter = priv->settings_ids; iter; iter = g_slist_next (iter))
g_signal_handler_disconnect (priv->settings, GPOINTER_TO_UINT (iter->data));
- g_slist_free (priv->settings_ids);
- priv->settings_ids = NULL;
+ g_clear_pointer (&priv->settings_ids, g_slist_free);
for (iter = priv->dev_ids; iter; iter = g_slist_next (iter)) {
DeviceSignalId *data = iter->data;
@@ -2227,8 +2226,7 @@ dispose (GObject *object)
g_signal_handler_disconnect (data->device, data->id);
g_slice_free (DeviceSignalId, data);
}
- g_slist_free (priv->dev_ids);
- priv->dev_ids = NULL;
+ g_clear_pointer (&priv->dev_ids, g_slist_free);
/* The manager should have disposed of ActiveConnections already, which
* will have called active_connection_removed() and thus we don't need
@@ -2242,10 +2240,8 @@ dispose (GObject *object)
priv->reset_retries_id = 0;
}
- g_free (priv->orig_hostname);
- priv->orig_hostname = NULL;
- g_free (priv->cur_hostname);
- priv->cur_hostname = NULL;
+ g_clear_pointer (&priv->orig_hostname, g_free);
+ g_clear_pointer (&priv->cur_hostname, g_free);
g_clear_object (&priv->settings);
diff --git a/src/nm-ppp-manager-glue.h b/src/nm-ppp-manager-glue.h
new file mode 100644
index 000000000..4b215165e
--- /dev/null
+++ b/src/nm-ppp-manager-glue.h
@@ -0,0 +1,174 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_ppp_manager_MARSHAL_H__
+#define __dbus_glib_marshal_nm_ppp_manager_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:POINTER */
+#define dbus_glib_marshal_nm_ppp_manager_VOID__POINTER g_cclosure_marshal_VOID__POINTER
+#define dbus_glib_marshal_nm_ppp_manager_NONE__POINTER dbus_glib_marshal_nm_ppp_manager_VOID__POINTER
+
+/* BOOLEAN:UINT,POINTER */
+extern void dbus_glib_marshal_nm_ppp_manager_BOOLEAN__UINT_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_ppp_manager_BOOLEAN__UINT_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__UINT_POINTER) (gpointer data1,
+ guint arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__UINT_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_BOOLEAN__UINT_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_uint (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:BOXED,POINTER */
+extern void dbus_glib_marshal_nm_ppp_manager_BOOLEAN__BOXED_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_ppp_manager_BOOLEAN__BOXED_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__BOXED_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_BOOLEAN__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_boxed (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_ppp_manager_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_ppp_manager_methods[] = {
+ { (GCallback) impl_ppp_manager_need_secrets, dbus_glib_marshal_nm_ppp_manager_NONE__POINTER, 0 },
+ { (GCallback) impl_ppp_manager_set_ip4_config, dbus_glib_marshal_nm_ppp_manager_BOOLEAN__BOXED_POINTER, 84 },
+ { (GCallback) impl_ppp_manager_set_state, dbus_glib_marshal_nm_ppp_manager_BOOLEAN__UINT_POINTER, 150 },
+};
+
+const DBusGObjectInfo dbus_glib_nm_ppp_manager_object_info = { 1,
+ dbus_glib_nm_ppp_manager_methods,
+ 3,
+"org.freedesktop.NetworkManager.PPP\0NeedSecrets\0A\0username\0O\0F\0N\0s\0password\0O\0F\0N\0s\0\0org.freedesktop.NetworkManager.PPP\0SetIp4Config\0S\0config\0I\0a{sv}\0\0org.freedesktop.NetworkManager.PPP\0SetState\0S\0state\0I\0u\0\0\0",
+"\0",
+"\0"
+};
+
diff --git a/src/nm-properties-changed-signal.c b/src/nm-properties-changed-signal.c
index 871d1bb00..6e07c2570 100644
--- a/src/nm-properties-changed-signal.c
+++ b/src/nm-properties-changed-signal.c
@@ -23,19 +23,31 @@
#include <stdio.h>
#include <dbus/dbus-glib.h>
-#ifdef DEBUG
#include "nm-logging.h"
-#endif
#include "nm-properties-changed-signal.h"
#include "nm-dbus-glib-types.h"
-#define NM_DBUS_PROPERTY_CHANGED "NM_DBUS_PROPERTY_CHANGED"
+typedef struct {
+ GHashTable *exported_props;
+ guint signal_id;
+} NMPropertiesChangedClassInfo;
typedef struct {
GHashTable *hash;
- gulong signal_id;
+ guint signal_id;
guint idle_id;
-} PropertiesChangedInfo;
+} NMPropertiesChangedInfo;
+
+static GQuark
+nm_properties_changed_signal_quark (void)
+{
+ static GQuark q;
+
+ if (G_UNLIKELY (q == 0))
+ q = g_quark_from_static_string ("nm-properties-changed-signal");
+
+ return q;
+}
static void
destroy_value (gpointer data)
@@ -46,72 +58,57 @@ destroy_value (gpointer data)
g_slice_free (GValue, val);
}
-static PropertiesChangedInfo *
-properties_changed_info_new (void)
-{
- PropertiesChangedInfo *info;
-
- info = g_slice_new0 (PropertiesChangedInfo);
- info->hash = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- destroy_value);
- return info;
-}
-
static void
properties_changed_info_destroy (gpointer data)
{
- PropertiesChangedInfo *info = (PropertiesChangedInfo *) data;
+ NMPropertiesChangedInfo *info = data;
if (info->idle_id)
g_source_remove (info->idle_id);
g_hash_table_destroy (info->hash);
- g_slice_free (PropertiesChangedInfo, info);
+ g_slice_free (NMPropertiesChangedInfo, info);
}
-#ifdef DEBUG
static void
add_to_string (gpointer key, gpointer value, gpointer user_data)
{
- char *buf = (char *) user_data;
- GValue str_val = { 0, };
+ const char *name = (const char *) key;
+ GString *buf = user_data;
+ GValue str_val = G_VALUE_INIT;
g_value_init (&str_val, G_TYPE_STRING);
if (!g_value_transform ((GValue *) value, &str_val)) {
if (G_VALUE_HOLDS_OBJECT (value)) {
GObject *obj = g_value_get_object (value);
- if (g_value_get_object (value)) {
- sprintf (buf + strlen (buf), "{%s: %p (%s)}, ",
- (const char *) key, obj, G_OBJECT_TYPE_NAME (obj));
- } else {
- sprintf (buf + strlen (buf), "{%s: %p}, ", (const char *) key, obj);
- }
+ if (obj) {
+ g_string_append_printf (buf, "{%s: %p (%s)}, ", name, obj,
+ G_OBJECT_TYPE_NAME (obj));
+ } else
+ g_string_append_printf (buf, "{%s: %p}, ", name, obj);
} else
- sprintf (buf + strlen (buf), "{%s: <transform error>}, ", (const char *) key);
- } else {
- sprintf (buf + strlen (buf), "{%s: %s}, ", (const char *) key, g_value_get_string (&str_val));
- }
+ g_string_append_printf (buf, "{%s: <transform error>}, ", name);
+ } else
+ g_string_append_printf (buf, "{%s: %s}, ", name, g_value_get_string (&str_val));
g_value_unset (&str_val);
}
-#endif
static gboolean
properties_changed (gpointer data)
{
GObject *object = G_OBJECT (data);
- PropertiesChangedInfo *info = (PropertiesChangedInfo *) g_object_get_data (object, NM_DBUS_PROPERTY_CHANGED);
+ NMPropertiesChangedInfo *info = g_object_get_qdata (object, nm_properties_changed_signal_quark ());
g_assert (info);
-#ifdef DEBUG
- {
- char buf[2048] = { 0, };
- g_hash_table_foreach (info->hash, add_to_string, &buf);
- nm_log_dbg (LOGD_CORE, "%s -> %s", G_OBJECT_TYPE_NAME (object), buf);
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_DBUS_PROPS)) {
+ GString *buf = g_string_new (NULL);
+
+ g_hash_table_foreach (info->hash, add_to_string, buf);
+ nm_log_dbg (LOGD_DBUS_PROPS, "%s -> %s", G_OBJECT_TYPE_NAME (object), buf->str);
+ g_string_free (buf, TRUE);
}
-#endif
g_signal_emit (object, info->signal_id, 0, info->hash);
g_hash_table_remove_all (info->hash);
@@ -123,82 +120,122 @@ static void
idle_id_reset (gpointer data)
{
GObject *object = G_OBJECT (data);
- PropertiesChangedInfo *info = (PropertiesChangedInfo *) g_object_get_data (object, NM_DBUS_PROPERTY_CHANGED);
+ NMPropertiesChangedInfo *info = g_object_get_qdata (object, nm_properties_changed_signal_quark ());
/* info is unset when the object is being destroyed */
if (info)
info->idle_id = 0;
}
-static char*
-uscore_to_wincaps (const char *uscore)
-{
- const char *p;
- GString *str;
- gboolean last_was_uscore;
-
- last_was_uscore = TRUE;
-
- str = g_string_new (NULL);
- p = uscore;
- while (p && *p) {
- if (*p == '-' || *p == '_')
- last_was_uscore = TRUE;
- else {
- if (last_was_uscore) {
- g_string_append_c (str, g_ascii_toupper (*p));
- last_was_uscore = FALSE;
- } else
- g_string_append_c (str, *p);
- }
- ++p;
- }
-
- return g_string_free (str, FALSE);
-}
-
static void
notify (GObject *object, GParamSpec *pspec)
{
- PropertiesChangedInfo *info;
+ NMPropertiesChangedClassInfo *classinfo;
+ NMPropertiesChangedInfo *info;
+ const char *dbus_property_name = NULL;
GValue *value;
+ GType type;
- /* Ignore properties that shouldn't be exported */
- if (pspec->flags & NM_PROPERTY_PARAM_NO_EXPORT)
+ for (type = G_OBJECT_TYPE (object); type; type = g_type_parent (type)) {
+ classinfo = g_type_get_qdata (type, nm_properties_changed_signal_quark ());
+ if (!classinfo)
+ continue;
+
+ dbus_property_name = g_hash_table_lookup (classinfo->exported_props, pspec->name);
+ if (dbus_property_name)
+ break;
+ }
+ if (!dbus_property_name) {
+ nm_log_dbg (LOGD_DBUS_PROPS, "ignoring notification for prop %s on type %s",
+ pspec->name, G_OBJECT_TYPE_NAME (object));
return;
+ }
- info = (PropertiesChangedInfo *) g_object_get_data (object, NM_DBUS_PROPERTY_CHANGED);
+ info = g_object_get_qdata (object, nm_properties_changed_signal_quark ());
if (!info) {
- info = properties_changed_info_new ();
- g_object_set_data_full (object, NM_DBUS_PROPERTY_CHANGED, info, properties_changed_info_destroy);
- info->signal_id = g_signal_lookup ("properties-changed", G_OBJECT_TYPE (object));
- g_assert (info->signal_id);
+ info = g_slice_new0 (NMPropertiesChangedInfo);
+ info->hash = g_hash_table_new_full (g_str_hash, g_str_equal,
+ NULL, destroy_value);
+ info->signal_id = classinfo->signal_id;
+
+ g_object_set_qdata_full (object, nm_properties_changed_signal_quark (),
+ info, properties_changed_info_destroy);
}
value = g_slice_new0 (GValue);
g_value_init (value, pspec->value_type);
g_object_get_property (object, pspec->name, value);
- g_hash_table_insert (info->hash, uscore_to_wincaps (pspec->name), value);
+ g_hash_table_insert (info->hash, (char *) dbus_property_name, value);
if (!info->idle_id)
info->idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, properties_changed, object, idle_id_reset);
}
-guint
-nm_properties_changed_signal_new (GObjectClass *object_class,
- guint class_offset)
+static NMPropertiesChangedClassInfo *
+nm_properties_changed_signal_setup_type (GType type)
{
- guint id;
+ NMPropertiesChangedClassInfo *classinfo;
+ NMPropertiesChangedClassInfo *parent_classinfo = NULL;
+ GObjectClass *object_class;
+ GType parent;
+ classinfo = g_slice_new (NMPropertiesChangedClassInfo);
+ g_type_set_qdata (type, nm_properties_changed_signal_quark (), classinfo);
+
+ object_class = g_type_class_ref (type);
object_class->notify = notify;
+ g_type_class_unref (object_class);
+
+ classinfo->exported_props = g_hash_table_new (g_str_hash, g_str_equal);
+
+ /* See if we've already added the signal to a parent class. (We can't just use
+ * g_signal_lookup() here because it prints a warning if the signal doesn't exist!)
+ */
+ parent = g_type_parent (type);
+ while (parent) {
+ parent_classinfo = g_type_get_qdata (parent, nm_properties_changed_signal_quark ());
+ if (parent_classinfo)
+ break;
+ parent = g_type_parent (parent);
+ }
- id = g_signal_new ("properties-changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- class_offset,
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE, 1, DBUS_TYPE_G_MAP_OF_VARIANT);
+ if (parent_classinfo)
+ classinfo->signal_id = parent_classinfo->signal_id;
+ else {
+ classinfo->signal_id = g_signal_new ("properties-changed",
+ type,
+ G_SIGNAL_RUN_FIRST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE, 1, DBUS_TYPE_G_MAP_OF_VARIANT);
+ }
+
+ return classinfo;
+}
+
+void
+nm_properties_changed_signal_add_property (GType type,
+ const char *dbus_property_name,
+ const char *gobject_property_name)
+{
+ NMPropertiesChangedClassInfo *classinfo;
+ char *hyphen_name, *p;
+
+ classinfo = g_type_get_qdata (type, nm_properties_changed_signal_quark ());
+ if (!classinfo)
+ classinfo = nm_properties_changed_signal_setup_type (type);
- return id;
+ g_hash_table_insert (classinfo->exported_props,
+ (char *) gobject_property_name,
+ (char *) dbus_property_name);
+
+ hyphen_name = g_strdup (gobject_property_name);
+ for (p = hyphen_name; *p; p++) {
+ if (*p == '_')
+ *p = '-';
+ }
+ g_hash_table_insert (classinfo->exported_props,
+ hyphen_name,
+ (char *) dbus_property_name);
}
diff --git a/src/nm-properties-changed-signal.h b/src/nm-properties-changed-signal.h
index b87e34e18..97a3b2c02 100644
--- a/src/nm-properties-changed-signal.h
+++ b/src/nm-properties-changed-signal.h
@@ -24,9 +24,8 @@
#include <glib-object.h>
-#define NM_PROPERTY_PARAM_NO_EXPORT (1 << (0 + G_PARAM_USER_SHIFT))
-
-guint nm_properties_changed_signal_new (GObjectClass *object_class,
- guint class_offset);
+void nm_properties_changed_signal_add_property (GType type,
+ const char *dbus_property_name,
+ const char *gobject_property_name);
#endif /* _NM_PROPERTIES_CHANGED_SIGNAL_H_ */
diff --git a/src/nm-rfkill-manager.c b/src/nm-rfkill-manager.c
new file mode 100644
index 000000000..b02f85f54
--- /dev/null
+++ b/src/nm-rfkill-manager.c
@@ -0,0 +1,422 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2009 - 2013 Red Hat, Inc.
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <gudev/gudev.h>
+
+#include "nm-rfkill-manager.h"
+#include "nm-logging.h"
+
+typedef struct {
+ GUdevClient *client;
+
+ /* Authoritative rfkill state (RFKILL_* enum) */
+ RfKillState rfkill_states[RFKILL_TYPE_MAX];
+ GSList *killswitches;
+
+} NMRfkillManagerPrivate;
+
+#define NM_RFKILL_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_RFKILL_MANAGER, NMRfkillManagerPrivate))
+
+G_DEFINE_TYPE (NMRfkillManager, nm_rfkill_manager, G_TYPE_OBJECT)
+
+enum {
+ RFKILL_CHANGED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+
+typedef struct {
+ char *name;
+ guint64 seqnum;
+ char *path;
+ char *driver;
+ RfKillType rtype;
+ gint state;
+ gboolean platform;
+} Killswitch;
+
+RfKillState
+nm_rfkill_manager_get_rfkill_state (NMRfkillManager *self, RfKillType rtype)
+{
+ g_return_val_if_fail (self != NULL, RFKILL_UNBLOCKED);
+ g_return_val_if_fail (rtype < RFKILL_TYPE_MAX, RFKILL_UNBLOCKED);
+
+ return NM_RFKILL_MANAGER_GET_PRIVATE (self)->rfkill_states[rtype];
+}
+
+static const char *
+rfkill_type_to_desc (RfKillType rtype)
+{
+ if (rtype == 0)
+ return "WiFi";
+ else if (rtype == 1)
+ return "WWAN";
+ else if (rtype == 2)
+ return "WiMAX";
+ return "unknown";
+}
+
+static const char *
+rfkill_state_to_desc (RfKillState rstate)
+{
+ if (rstate == 0)
+ return "unblocked";
+ else if (rstate == 1)
+ return "soft-blocked";
+ else if (rstate == 2)
+ return "hard-blocked";
+ return "unknown";
+}
+
+static Killswitch *
+killswitch_new (GUdevDevice *device, RfKillType rtype)
+{
+ Killswitch *ks;
+ GUdevDevice *parent = NULL, *grandparent = NULL;
+ const char *driver, *subsys, *parent_subsys = NULL;
+
+ ks = g_malloc0 (sizeof (Killswitch));
+ ks->name = g_strdup (g_udev_device_get_name (device));
+ ks->seqnum = g_udev_device_get_seqnum (device);
+ ks->path = g_strdup (g_udev_device_get_sysfs_path (device));
+ ks->rtype = rtype;
+
+ driver = g_udev_device_get_property (device, "DRIVER");
+ subsys = g_udev_device_get_subsystem (device);
+
+ /* Check parent for various attributes */
+ parent = g_udev_device_get_parent (device);
+ if (parent) {
+ parent_subsys = g_udev_device_get_subsystem (parent);
+ if (!driver)
+ driver = g_udev_device_get_property (parent, "DRIVER");
+ if (!driver) {
+ /* Sigh; try the grandparent */
+ grandparent = g_udev_device_get_parent (parent);
+ if (grandparent)
+ driver = g_udev_device_get_property (grandparent, "DRIVER");
+ }
+ }
+
+ if (!driver)
+ driver = "(unknown)";
+ ks->driver = g_strdup (driver);
+
+ if ( g_strcmp0 (subsys, "platform") == 0
+ || g_strcmp0 (parent_subsys, "platform") == 0
+ || g_strcmp0 (subsys, "acpi") == 0
+ || g_strcmp0 (parent_subsys, "acpi") == 0)
+ ks->platform = TRUE;
+
+ if (grandparent)
+ g_object_unref (grandparent);
+ if (parent)
+ g_object_unref (parent);
+ return ks;
+}
+
+static void
+killswitch_destroy (Killswitch *ks)
+{
+ g_return_if_fail (ks != NULL);
+
+ g_free (ks->name);
+ g_free (ks->path);
+ g_free (ks->driver);
+ memset (ks, 0, sizeof (Killswitch));
+ g_free (ks);
+}
+
+NMRfkillManager *
+nm_rfkill_manager_new (void)
+{
+ return NM_RFKILL_MANAGER (g_object_new (NM_TYPE_RFKILL_MANAGER, NULL));
+}
+
+static RfKillState
+sysfs_state_to_nm_state (gint sysfs_state)
+{
+ switch (sysfs_state) {
+ case 0:
+ return RFKILL_SOFT_BLOCKED;
+ case 1:
+ return RFKILL_UNBLOCKED;
+ case 2:
+ return RFKILL_HARD_BLOCKED;
+ default:
+ nm_log_warn (LOGD_RFKILL, "unhandled rfkill state %d", sysfs_state);
+ break;
+ }
+ return RFKILL_UNBLOCKED;
+}
+
+static void
+recheck_killswitches (NMRfkillManager *self)
+{
+ NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+ RfKillState poll_states[RFKILL_TYPE_MAX];
+ RfKillState platform_states[RFKILL_TYPE_MAX];
+ gboolean platform_checked[RFKILL_TYPE_MAX];
+ int i;
+
+ /* Default state is unblocked */
+ for (i = 0; i < RFKILL_TYPE_MAX; i++) {
+ poll_states[i] = RFKILL_UNBLOCKED;
+ platform_states[i] = RFKILL_UNBLOCKED;
+ platform_checked[i] = FALSE;
+ }
+
+ /* Poll the states of all killswitches */
+ for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
+ Killswitch *ks = iter->data;
+ GUdevDevice *device;
+ RfKillState dev_state;
+ int sysfs_state;
+
+ device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name);
+ if (device) {
+ sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE");
+ dev_state = sysfs_state_to_nm_state (sysfs_state);
+
+ nm_log_dbg (LOGD_RFKILL, "%s rfkill%s switch %s state now %d/%u",
+ rfkill_type_to_desc (ks->rtype),
+ ks->platform ? " platform" : "",
+ ks->name,
+ sysfs_state,
+ dev_state);
+
+ if (ks->platform == FALSE) {
+ if (dev_state > poll_states[ks->rtype])
+ poll_states[ks->rtype] = dev_state;
+ } else {
+ platform_checked[ks->rtype] = TRUE;
+ if (dev_state > platform_states[ks->rtype])
+ platform_states[ks->rtype] = dev_state;
+ }
+ g_object_unref (device);
+ }
+ }
+
+ /* Log and emit change signal for final rfkill states */
+ for (i = 0; i < RFKILL_TYPE_MAX; i++) {
+ if (platform_checked[i] == TRUE) {
+ /* blocked platform switch state overrides device state, otherwise
+ * let the device state stand. (bgo #655773)
+ */
+ if (platform_states[i] != RFKILL_UNBLOCKED)
+ poll_states[i] = platform_states[i];
+ }
+
+ if (poll_states[i] != priv->rfkill_states[i]) {
+ nm_log_dbg (LOGD_RFKILL, "%s rfkill state now '%s'",
+ rfkill_type_to_desc (i),
+ rfkill_state_to_desc (poll_states[i]));
+
+ priv->rfkill_states[i] = poll_states[i];
+ g_signal_emit (self, signals[RFKILL_CHANGED], 0, i, priv->rfkill_states[i]);
+ }
+ }
+}
+
+static Killswitch *
+killswitch_find_by_name (NMRfkillManager *self, const char *name)
+{
+ NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+
+ g_return_val_if_fail (name != NULL, NULL);
+
+ for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
+ Killswitch *candidate = iter->data;
+
+ if (!strcmp (name, candidate->name))
+ return candidate;
+ }
+ return NULL;
+}
+
+static const RfKillType
+rfkill_type_to_enum (const char *str)
+{
+ g_return_val_if_fail (str != NULL, RFKILL_TYPE_UNKNOWN);
+
+ if (!strcmp (str, "wlan"))
+ return RFKILL_TYPE_WLAN;
+ else if (!strcmp (str, "wwan"))
+ return RFKILL_TYPE_WWAN;
+ else if (!strcmp (str, "wimax"))
+ return RFKILL_TYPE_WIMAX;
+
+ return RFKILL_TYPE_UNKNOWN;
+}
+
+static void
+add_one_killswitch (NMRfkillManager *self, GUdevDevice *device)
+{
+ NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self);
+ const char *str_type;
+ RfKillType rtype;
+ Killswitch *ks;
+
+ str_type = g_udev_device_get_property (device, "RFKILL_TYPE");
+ rtype = rfkill_type_to_enum (str_type);
+ if (rtype == RFKILL_TYPE_UNKNOWN)
+ return;
+
+ ks = killswitch_new (device, rtype);
+ priv->killswitches = g_slist_prepend (priv->killswitches, ks);
+
+ nm_log_info (LOGD_RFKILL, "%s: found %s radio killswitch (at %s) (%sdriver %s)",
+ ks->name,
+ rfkill_type_to_desc (rtype),
+ ks->path,
+ ks->platform ? "platform " : "",
+ ks->driver ? ks->driver : "<unknown>");
+}
+
+static void
+rfkill_add (NMRfkillManager *self, GUdevDevice *device)
+{
+ const char *name;
+
+ g_return_if_fail (device != NULL);
+ name = g_udev_device_get_name (device);
+ g_return_if_fail (name != NULL);
+
+ if (!killswitch_find_by_name (self, name))
+ add_one_killswitch (self, device);
+}
+
+static void
+rfkill_remove (NMRfkillManager *self,
+ GUdevDevice *device)
+{
+ NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+ const char *name;
+
+ g_return_if_fail (device != NULL);
+ name = g_udev_device_get_name (device);
+ g_return_if_fail (name != NULL);
+
+ for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
+ Killswitch *ks = iter->data;
+
+ if (!strcmp (ks->name, name)) {
+ nm_log_info (LOGD_RFKILL, "radio killswitch %s disappeared", ks->path);
+ priv->killswitches = g_slist_remove (priv->killswitches, ks);
+ killswitch_destroy (ks);
+ break;
+ }
+ }
+}
+
+static void
+handle_uevent (GUdevClient *client,
+ const char *action,
+ GUdevDevice *device,
+ gpointer user_data)
+{
+ NMRfkillManager *self = NM_RFKILL_MANAGER (user_data);
+ const char *subsys;
+
+ g_return_if_fail (action != NULL);
+
+ /* A bit paranoid */
+ subsys = g_udev_device_get_subsystem (device);
+ g_return_if_fail (!g_strcmp0 (subsys, "rfkill"));
+
+ nm_log_dbg (LOGD_HW, "udev rfkill event: action '%s' device '%s'",
+ action, g_udev_device_get_name (device));
+
+ if (!strcmp (action, "add"))
+ rfkill_add (self, device);
+ else if (!strcmp (action, "remove"))
+ rfkill_remove (self, device);
+
+ recheck_killswitches (self);
+}
+
+static void
+nm_rfkill_manager_init (NMRfkillManager *self)
+{
+ NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self);
+ const char *subsys[] = { "rfkill", NULL };
+ GList *switches, *iter;
+ guint32 i;
+
+ for (i = 0; i < RFKILL_TYPE_MAX; i++)
+ priv->rfkill_states[i] = RFKILL_UNBLOCKED;
+
+ priv->client = g_udev_client_new (subsys);
+ g_signal_connect (priv->client, "uevent", G_CALLBACK (handle_uevent), self);
+
+ switches = g_udev_client_query_by_subsystem (priv->client, "rfkill");
+ for (iter = switches; iter; iter = g_list_next (iter)) {
+ add_one_killswitch (self, G_UDEV_DEVICE (iter->data));
+ g_object_unref (G_UDEV_DEVICE (iter->data));
+ }
+ g_list_free (switches);
+
+ recheck_killswitches (self);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMRfkillManager *self = NM_RFKILL_MANAGER (object);
+ NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self);
+
+ g_clear_object (&priv->client);
+
+ if (priv->killswitches) {
+ g_slist_free_full (priv->killswitches, (GDestroyNotify) killswitch_destroy);
+ priv->killswitches = NULL;
+ }
+
+ G_OBJECT_CLASS (nm_rfkill_manager_parent_class)->dispose (object);
+}
+
+static void
+nm_rfkill_manager_class_init (NMRfkillManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMRfkillManagerPrivate));
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+
+ /* Signals */
+ signals[RFKILL_CHANGED] =
+ g_signal_new ("rfkill-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMRfkillManagerClass, rfkill_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+}
diff --git a/src/nm-rfkill-manager.h b/src/nm-rfkill-manager.h
new file mode 100644
index 000000000..b26261b83
--- /dev/null
+++ b/src/nm-rfkill-manager.h
@@ -0,0 +1,72 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
+ */
+
+#include <glib-object.h>
+
+#ifndef NM_RFKILL_MANAGER_H
+#define NM_RFKILL_MANAGER_H
+
+typedef enum {
+ RFKILL_UNBLOCKED = 0,
+ RFKILL_SOFT_BLOCKED = 1,
+ RFKILL_HARD_BLOCKED = 2
+} RfKillState;
+
+typedef enum {
+ RFKILL_TYPE_WLAN = 0,
+ RFKILL_TYPE_WWAN = 1,
+ RFKILL_TYPE_WIMAX = 2,
+
+ /* UNKNOWN and MAX should always be 1 more than
+ * the last rfkill type since RFKILL_TYPE_MAX is
+ * used as an array size.
+ */
+ RFKILL_TYPE_UNKNOWN = 3, /* KEEP LAST */
+ RFKILL_TYPE_MAX = RFKILL_TYPE_UNKNOWN
+} RfKillType;
+
+
+#define NM_TYPE_RFKILL_MANAGER (nm_rfkill_manager_get_type ())
+#define NM_RFKILL_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_RFKILL_MANAGER, NMRfkillManager))
+#define NM_RFKILL_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_RFKILL_MANAGER, NMRfkillManagerClass))
+#define NM_IS_RFKILL_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_RFKILL_MANAGER))
+#define NM_IS_RFKILL_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_RFKILL_MANAGER))
+#define NM_RFKILL_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_RFKILL_MANAGER, NMRfkillManagerClass))
+
+typedef struct {
+ GObject parent;
+} NMRfkillManager;
+
+typedef struct {
+ GObjectClass parent;
+
+ /* signals */
+ void (*rfkill_changed) (NMRfkillManager *manager, RfKillType rtype, RfKillState state);
+} NMRfkillManagerClass;
+
+GType nm_rfkill_manager_get_type (void);
+
+NMRfkillManager *nm_rfkill_manager_new (void);
+
+RfKillState nm_rfkill_manager_get_rfkill_state (NMRfkillManager *manager, RfKillType rtype);
+
+#endif /* NM_RFKILL_MANAGER_H */
+
diff --git a/src/nm-session-monitor-ck.c b/src/nm-session-monitor-ck.c
index 02e2d06ee..75e1c9272 100644
--- a/src/nm-session-monitor-ck.c
+++ b/src/nm-session-monitor-ck.c
@@ -354,10 +354,8 @@ nm_session_monitor_get (void)
{
static NMSessionMonitor *singleton = NULL;
- if (singleton)
- return g_object_ref (singleton);
-
- singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL));
+ if (!singleton)
+ singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL));
return singleton;
}
diff --git a/src/nm-session-monitor-null.c b/src/nm-session-monitor-null.c
index beabcf213..5d8ecaaf1 100644
--- a/src/nm-session-monitor-null.c
+++ b/src/nm-session-monitor-null.c
@@ -81,11 +81,8 @@ nm_session_monitor_get (void)
{
static NMSessionMonitor *singleton = NULL;
- if (singleton)
- return g_object_ref (singleton);
-
- singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL));
- g_assert (singleton);
+ if (!singleton)
+ singleton = g_object_new (NM_TYPE_SESSION_MONITOR, NULL);
return singleton;
}
diff --git a/src/nm-session-monitor-systemd.c b/src/nm-session-monitor-systemd.c
index f9fb075d1..f195c1e77 100644
--- a/src/nm-session-monitor-systemd.c
+++ b/src/nm-session-monitor-systemd.c
@@ -193,11 +193,8 @@ nm_session_monitor_get (void)
{
static NMSessionMonitor *singleton = NULL;
- if (singleton)
- return g_object_ref (singleton);
-
- singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL));
- g_assert (singleton);
+ if (!singleton)
+ singleton = g_object_new (NM_TYPE_SESSION_MONITOR, NULL);
return singleton;
}
@@ -237,18 +234,19 @@ nm_session_monitor_uid_has_session (NMSessionMonitor *monitor,
const char **out_user,
GError **error)
{
- int ret;
+ int num_sessions;
if (!nm_session_uid_to_user (uid, out_user, error))
return FALSE;
- ret = sd_uid_get_sessions (uid, FALSE, NULL) > 0;
- if (ret < 0) {
+ /* Get all sessions (including inactive ones) for the user */
+ num_sessions = sd_uid_get_sessions (uid, 0, NULL);
+ if (num_sessions < 0) {
nm_log_warn (LOGD_CORE, "Failed to get systemd sessions for uid %d: %d",
- uid, ret);
+ uid, num_sessions);
return FALSE;
}
- return ret > 0 ? TRUE : FALSE;
+ return num_sessions > 0;
}
gboolean
@@ -256,13 +254,14 @@ nm_session_monitor_uid_active (NMSessionMonitor *monitor,
uid_t uid,
GError **error)
{
- int ret;
+ int num_sessions;
- ret = sd_uid_get_sessions (uid, TRUE, NULL) > 0;
- if (ret < 0) {
+ /* Get active sessions for the user */
+ num_sessions = sd_uid_get_sessions (uid, 1, NULL);
+ if (num_sessions < 0) {
nm_log_warn (LOGD_CORE, "Failed to get active systemd sessions for uid %d: %d",
- uid, ret);
+ uid, num_sessions);
return FALSE;
}
- return ret > 0 ? TRUE : FALSE;
+ return num_sessions > 0;
}
diff --git a/src/nm-settings-connection-glue.h b/src/nm-settings-connection-glue.h
new file mode 100644
index 000000000..8cace5130
--- /dev/null
+++ b/src/nm-settings-connection-glue.h
@@ -0,0 +1,171 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_settings_connection_MARSHAL_H__
+#define __dbus_glib_marshal_nm_settings_connection_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:POINTER */
+#define dbus_glib_marshal_nm_settings_connection_VOID__POINTER g_cclosure_marshal_VOID__POINTER
+#define dbus_glib_marshal_nm_settings_connection_NONE__POINTER dbus_glib_marshal_nm_settings_connection_VOID__POINTER
+
+/* NONE:STRING,POINTER */
+extern void dbus_glib_marshal_nm_settings_connection_VOID__STRING_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_settings_connection_VOID__STRING_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__STRING_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__STRING_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_settings_connection_NONE__STRING_POINTER dbus_glib_marshal_nm_settings_connection_VOID__STRING_POINTER
+
+/* NONE:BOXED,POINTER */
+extern void dbus_glib_marshal_nm_settings_connection_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_settings_connection_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__BOXED_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__BOXED_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_boxed (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_settings_connection_NONE__BOXED_POINTER dbus_glib_marshal_nm_settings_connection_VOID__BOXED_POINTER
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_settings_connection_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_settings_connection_methods[] = {
+ { (GCallback) impl_settings_connection_update, dbus_glib_marshal_nm_settings_connection_NONE__BOXED_POINTER, 0 },
+ { (GCallback) impl_settings_connection_update_unsaved, dbus_glib_marshal_nm_settings_connection_NONE__BOXED_POINTER, 84 },
+ { (GCallback) impl_settings_connection_delete, dbus_glib_marshal_nm_settings_connection_NONE__POINTER, 175 },
+ { (GCallback) impl_settings_connection_get_settings, dbus_glib_marshal_nm_settings_connection_NONE__POINTER, 236 },
+ { (GCallback) impl_settings_connection_get_secrets, dbus_glib_marshal_nm_settings_connection_NONE__STRING_POINTER, 327 },
+ { (GCallback) impl_settings_connection_save, dbus_glib_marshal_nm_settings_connection_NONE__POINTER, 433 },
+};
+
+const DBusGObjectInfo dbus_glib_nm_settings_connection_object_info = { 1,
+ dbus_glib_nm_settings_connection_methods,
+ 6,
+"org.freedesktop.NetworkManager.Settings.Connection\0Update\0A\0properties\0I\0a{sa{sv}}\0\0org.freedesktop.NetworkManager.Settings.Connection\0UpdateUnsaved\0A\0properties\0I\0a{sa{sv}}\0\0org.freedesktop.NetworkManager.Settings.Connection\0Delete\0A\0\0org.freedesktop.NetworkManager.Settings.Connection\0GetSettings\0A\0settings\0O\0F\0N\0a{sa{sv}}\0\0org.freedesktop.NetworkManager.Settings.Connection\0GetSecrets\0A\0setting_name\0I\0s\0secrets\0O\0F\0N\0a{sa{sv}}\0\0org.freedesktop.NetworkManager.Settings.Connection\0Save\0A\0\0\0",
+"org.freedesktop.NetworkManager.Settings.Connection\0Updated\0org.freedesktop.NetworkManager.Settings.Connection\0Removed\0org.freedesktop.NetworkManager.Settings.Connection\0PropertiesChanged\0\0",
+"org.freedesktop.NetworkManager.Settings.Connection\0Unsaved\0unsaved\0read\0\0"
+};
+
diff --git a/src/nm-settings-glue.h b/src/nm-settings-glue.h
new file mode 100644
index 000000000..631f45303
--- /dev/null
+++ b/src/nm-settings-glue.h
@@ -0,0 +1,219 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_settings_MARSHAL_H__
+#define __dbus_glib_marshal_nm_settings_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:POINTER */
+#define dbus_glib_marshal_nm_settings_VOID__POINTER g_cclosure_marshal_VOID__POINTER
+#define dbus_glib_marshal_nm_settings_NONE__POINTER dbus_glib_marshal_nm_settings_VOID__POINTER
+
+/* BOOLEAN:POINTER,POINTER */
+extern void dbus_glib_marshal_nm_settings_BOOLEAN__POINTER_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_settings_BOOLEAN__POINTER_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__POINTER_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_BOOLEAN__POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_pointer (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+/* NONE:STRING,POINTER */
+extern void dbus_glib_marshal_nm_settings_VOID__STRING_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_settings_VOID__STRING_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__STRING_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__STRING_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_settings_NONE__STRING_POINTER dbus_glib_marshal_nm_settings_VOID__STRING_POINTER
+
+/* NONE:BOXED,POINTER */
+extern void dbus_glib_marshal_nm_settings_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+void
+dbus_glib_marshal_nm_settings_VOID__BOXED_POINTER (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__BOXED_POINTER) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__BOXED_POINTER callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_boxed (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ data2);
+}
+#define dbus_glib_marshal_nm_settings_NONE__BOXED_POINTER dbus_glib_marshal_nm_settings_VOID__BOXED_POINTER
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_settings_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_settings_methods[] = {
+ { (GCallback) impl_settings_list_connections, dbus_glib_marshal_nm_settings_BOOLEAN__POINTER_POINTER, 0 },
+ { (GCallback) impl_settings_get_connection_by_uuid, dbus_glib_marshal_nm_settings_NONE__STRING_POINTER, 80 },
+ { (GCallback) impl_settings_add_connection, dbus_glib_marshal_nm_settings_NONE__BOXED_POINTER, 171 },
+ { (GCallback) impl_settings_add_connection_unsaved, dbus_glib_marshal_nm_settings_NONE__BOXED_POINTER, 264 },
+ { (GCallback) impl_settings_load_connections, dbus_glib_marshal_nm_settings_NONE__BOXED_POINTER, 364 },
+ { (GCallback) impl_settings_reload_connections, dbus_glib_marshal_nm_settings_NONE__POINTER, 471 },
+ { (GCallback) impl_settings_save_hostname, dbus_glib_marshal_nm_settings_NONE__STRING_POINTER, 547 },
+};
+
+const DBusGObjectInfo dbus_glib_nm_settings_object_info = { 1,
+ dbus_glib_nm_settings_methods,
+ 7,
+"org.freedesktop.NetworkManager.Settings\0ListConnections\0S\0connections\0O\0F\0N\0ao\0\0org.freedesktop.NetworkManager.Settings\0GetConnectionByUuid\0A\0uuid\0I\0s\0connection\0O\0F\0N\0o\0\0org.freedesktop.NetworkManager.Settings\0AddConnection\0A\0connection\0I\0a{sa{sv}}\0path\0O\0F\0N\0o\0\0org.freedesktop.NetworkManager.Settings\0AddConnectionUnsaved\0A\0connection\0I\0a{sa{sv}}\0path\0O\0F\0N\0o\0\0org.freedesktop.NetworkManager.Settings\0LoadConnections\0A\0filenames\0I\0as\0status\0O\0F\0N\0b\0failures\0O\0F\0N\0as\0\0org.freedesktop.NetworkManager.Settings\0ReloadConnections\0A\0status\0O\0F\0N\0b\0\0org.freedesktop.NetworkManager.Settings\0SaveHostname\0A\0hostname\0I\0s\0\0\0",
+"org.freedesktop.NetworkManager.Settings\0PropertiesChanged\0org.freedesktop.NetworkManager.Settings\0NewConnection\0org.freedesktop.NetworkManager.Settings\0ConnectionRemoved\0\0",
+"org.freedesktop.NetworkManager.Settings\0Connections\0connections\0read\0org.freedesktop.NetworkManager.Settings\0Hostname\0hostname\0read\0org.freedesktop.NetworkManager.Settings\0CanModify\0can_modify\0read\0\0"
+};
+
diff --git a/src/nm-sleep-monitor-systemd.c b/src/nm-sleep-monitor-systemd.c
index 576cb1413..55134c486 100644
--- a/src/nm-sleep-monitor-systemd.c
+++ b/src/nm-sleep-monitor-systemd.c
@@ -23,6 +23,7 @@
#include <sys/stat.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <dbus/dbus-glib.h>
+#include <glib/gi18n.h>
#include <gio/gio.h>
#include <gio/gunixfdlist.h>
@@ -35,20 +36,11 @@
#define SD_PATH "/org/freedesktop/login1"
#define SD_INTERFACE "org.freedesktop.login1.Manager"
-/* Do we have GDBus (glib >= 2.26) and GUnixFDList (glib >= 2.30) support ? */
-#if GLIB_CHECK_VERSION(2,30,0)
-#define IS_GDBUS_UNIXFD_AVAILABLE 1
-#endif
-
struct _NMSleepMonitor {
GObject parent_instance;
-#if defined(IS_GDBUS_UNIXFD_AVAILABLE)
GDBusProxy *sd_proxy;
-#else
- DBusGProxy *sd_proxy;
-#endif
gint inhibit_fd;
};
@@ -83,8 +75,6 @@ drop_inhibitor (NMSleepMonitor *self)
return FALSE;
}
-#if defined(IS_GDBUS_UNIXFD_AVAILABLE)
-/* Great! We have GDBus (glib >= 2.26) and GUnixFDList (glib >= 2.30) */
static void
inhibit_done (GObject *source,
GAsyncResult *result,
@@ -122,8 +112,8 @@ take_inhibitor (NMSleepMonitor *self)
"Inhibit",
g_variant_new ("(ssss)",
"sleep",
- g_get_user_name (),
- "inhibited",
+ "NetworkManager",
+ _("NetworkManager needs to turn off networks"),
"delay"),
0,
G_MAXINT,
@@ -171,136 +161,6 @@ sleep_setup (NMSleepMonitor *self)
g_signal_connect (self->sd_proxy, "g-signal", G_CALLBACK (signal_cb), self);
}
-#else
-
-/* GDBus nor GUnixFDList available. We have to get by with dbus-glib and libdbus */
-static void
-inhibit_done (DBusPendingCall *pending,
- gpointer user_data)
-{
- NMSleepMonitor *self = user_data;
- DBusMessage *reply;
- DBusError error;
- int mtype;
-
- dbus_error_init (&error);
- reply = dbus_pending_call_steal_reply (pending);
- g_assert (reply);
-
- mtype = dbus_message_get_type (reply);
- switch (mtype) {
- case DBUS_MESSAGE_TYPE_ERROR:
- dbus_set_error_from_message (&error, reply);
- nm_log_warn (LOGD_SUSPEND, "Inhibit() failed: %s", error.message ? error.message : "unknown");
- break;
- case DBUS_MESSAGE_TYPE_METHOD_RETURN:
- if (!dbus_message_get_args (reply,
- &error,
- DBUS_TYPE_UNIX_FD, &self->inhibit_fd,
- DBUS_TYPE_INVALID)) {
- nm_log_warn (LOGD_SUSPEND, "Inhibit() reply parsing failed: %s",
- error.message ? error.message : "unknown");
- break;
- }
- nm_log_dbg (LOGD_SUSPEND, "Inhibitor fd is %d", self->inhibit_fd);
- break;
- default:
- nm_log_warn (LOGD_SUSPEND, "Invalid Inhibit() reply message type %d", mtype);
- break;
- }
-
- dbus_message_unref (reply);
- dbus_error_free (&error);
-}
-
-static void
-take_inhibitor (NMSleepMonitor *self)
-{
- NMDBusManager *dbus_mgr;
- DBusConnection *bus;
- DBusMessage *message = NULL;
- DBusPendingCall *pending = NULL;
- const char *arg_what = "sleep";
- const char *arg_who = g_get_user_name ();
- const char *arg_why = "inhibited";
- const char *arg_mode = "delay";
-
- g_assert (self->inhibit_fd == -1);
-
- nm_log_dbg (LOGD_SUSPEND, "Taking systemd sleep inhibitor");
-
- dbus_mgr = nm_dbus_manager_get ();
- bus = nm_dbus_manager_get_dbus_connection (dbus_mgr);
- g_assert (bus);
- g_object_unref (dbus_mgr);
-
- if (!(message = dbus_message_new_method_call (SD_NAME,
- SD_PATH,
- SD_INTERFACE,
- "Inhibit"))) {
- nm_log_warn (LOGD_SUSPEND, "Unable to call Inhibit()");
- return;
- }
- if (!dbus_message_append_args (message,
- DBUS_TYPE_STRING, &arg_what,
- DBUS_TYPE_STRING, &arg_who,
- DBUS_TYPE_STRING, &arg_why,
- DBUS_TYPE_STRING, &arg_mode,
- DBUS_TYPE_INVALID)) {
- nm_log_warn (LOGD_SUSPEND, "Unable to call Inhibit()");
- goto done;
- }
-
- if (!dbus_connection_send_with_reply (bus, message, &pending, -1))
- goto done;
-
- if (!dbus_pending_call_set_notify (pending, inhibit_done, self, NULL)) {
- dbus_pending_call_cancel (pending);
- dbus_pending_call_unref (pending);
- }
-
-done:
- if (message)
- dbus_message_unref (message);
-}
-
-static void
-signal_cb (DBusGProxy *proxy, gboolean about_to_suspend, gpointer data)
-{
- NMSleepMonitor *self = data;
-
- nm_log_dbg (LOGD_SUSPEND, "Received PrepareForSleep signal: %d", about_to_suspend);
-
- if (about_to_suspend) {
- g_signal_emit (self, signals[SLEEPING], 0);
- drop_inhibitor (self);
- } else {
- take_inhibitor (self);
- g_signal_emit (self, signals[RESUMING], 0);
- }
-}
-
-static void
-sleep_setup (NMSleepMonitor *self)
-{
- NMDBusManager *dbus_mgr;
- DBusGConnection *bus;
-
- dbus_mgr = nm_dbus_manager_get ();
- bus = nm_dbus_manager_get_connection (dbus_mgr);
- self->sd_proxy = dbus_g_proxy_new_for_name (bus, SD_NAME, SD_PATH, SD_INTERFACE);
- g_object_unref (dbus_mgr);
-
- if (self->sd_proxy) {
- dbus_g_proxy_add_signal (self->sd_proxy, "PrepareForSleep", G_TYPE_BOOLEAN, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (self->sd_proxy, "PrepareForSleep",
- G_CALLBACK (signal_cb),
- self, NULL);
- } else
- nm_log_warn (LOGD_SUSPEND, "could not initialize systemd-logind D-Bus proxy");
-}
-#endif /* IS_GDBUS_UNIXFD_AVAILABLE */
-
static void
nm_sleep_monitor_init (NMSleepMonitor *self)
{
diff --git a/src/nm-sleep-monitor-upower.c b/src/nm-sleep-monitor-upower.c
index 3c93f6637..58402abd4 100644
--- a/src/nm-sleep-monitor-upower.c
+++ b/src/nm-sleep-monitor-upower.c
@@ -21,7 +21,6 @@
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
-#include <dbus/dbus-glib-lowlevel.h>
#include <dbus/dbus-glib.h>
#include <gio/gio.h>
#include "nm-logging.h"
@@ -73,11 +72,9 @@ upower_resuming_cb (DBusGProxy *proxy, gpointer user_data)
static void
nm_sleep_monitor_init (NMSleepMonitor *self)
{
- NMDBusManager *dbus_mgr;
DBusGConnection *bus;
- dbus_mgr = nm_dbus_manager_get ();
- bus = nm_dbus_manager_get_connection (dbus_mgr);
+ bus = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
self->upower_proxy = dbus_g_proxy_new_for_name (bus,
UPOWER_DBUS_SERVICE,
"/org/freedesktop/UPower",
@@ -94,7 +91,6 @@ nm_sleep_monitor_init (NMSleepMonitor *self)
self, NULL);
} else
nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy");
- g_object_unref (dbus_mgr);
}
static void
diff --git a/src/nm-system.c b/src/nm-system.c
deleted file mode 100644
index 399834246..000000000
--- a/src/nm-system.c
+++ /dev/null
@@ -1,2603 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2004 - 2012 Red Hat, Inc.
- * Copyright (C) 2005 - 2008 Novell, Inc.
- * Copyright (C) 1996 - 1997 Yoichi Hariguchi <yoichi@fore.com>
- * Copyright (C) January, 1998 Sergei Viznyuk <sv@phystech.com>
- */
-
-#include <config.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <netinet/in.h>
-#include <net/route.h>
-#include <arpa/nameser.h>
-#include <arpa/inet.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <syslog.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <resolv.h>
-#include <netdb.h>
-#include <glib.h>
-#include <linux/if.h>
-#include <linux/sockios.h>
-#include <linux/if_bonding.h>
-#include <linux/if_vlan.h>
-#include <linux/if_bridge.h>
-
-#include "nm-system.h"
-#include "nm-device.h"
-#include "NetworkManagerUtils.h"
-#include "nm-utils.h"
-#include "nm-logging.h"
-#include "nm-netlink-monitor.h"
-#include "nm-netlink-utils.h"
-#include "nm-netlink-compat.h"
-
-#include <netlink/route/addr.h>
-#include <netlink/route/route.h>
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/route/link.h>
-#include <netlink/route/link/bonding.h>
-#include <netlink/route/link/vlan.h>
-
-#if !HAVE_VLAN_FLAG_LOOSE_BINDING
-/* Older kernels don't have this flag */
-#define VLAN_FLAG_LOOSE_BINDING 0x04
-#endif
-
-static void nm_system_device_set_priority (int ifindex,
- NMIP4Config *config,
- int priority);
-
-static gboolean
-ip4_dest_in_same_subnet (NMIP4Config *config, guint32 dest, guint32 dest_prefix)
-{
- int num;
- int i;
-
- num = nm_ip4_config_get_num_addresses (config);
- for (i = 0; i < num; i++) {
- NMIP4Address *addr = nm_ip4_config_get_address (config, i);
- guint32 prefix = nm_ip4_address_get_prefix (addr);
- guint32 address = nm_ip4_address_get_address (addr);
-
- if (prefix <= dest_prefix) {
- guint32 masked_addr = ntohl(address) >> (32 - prefix);
- guint32 masked_dest = ntohl(dest) >> (32 - prefix);
-
- if (masked_addr == masked_dest)
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static struct rtnl_route *
-nm_system_device_set_ip4_route (int ifindex,
- guint32 ip4_dest,
- guint32 ip4_prefix,
- guint32 ip4_gateway,
- guint32 metric,
- int mss)
-{
- struct nl_sock *nlh;
- struct rtnl_route *route;
- int err;
-
- g_return_val_if_fail (ifindex > 0, NULL);
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, NULL);
-
- route = nm_netlink_route_new (ifindex, AF_INET, mss,
- NMNL_PROP_PRIO, metric,
- NULL);
- g_return_val_if_fail (route != NULL, NULL);
-
- /* Add the route */
- err = nm_netlink_route4_add (route, &ip4_dest, ip4_prefix, &ip4_gateway, 0);
- if (err == -NLE_OBJ_NOTFOUND && ip4_gateway) {
- /* Gateway might be over a bridge; try adding a route to gateway first */
- struct rtnl_route *route2;
-
- route2 = nm_netlink_route_new (ifindex, AF_INET, mss, NULL);
- if (route2) {
- /* Add route to gateway over bridge */
- err = nm_netlink_route4_add (route2, &ip4_gateway, 32, NULL, 0);
- if (!err) {
- err = nm_netlink_route4_add (route, &ip4_dest, ip4_prefix, &ip4_gateway, 0);
- if (err)
- nm_netlink_route_delete (route2);
- }
- rtnl_route_put (route2);
- }
- }
-
- if (err) {
- char *iface = nm_netlink_index_to_iface (ifindex);
-
- nm_log_err (LOGD_DEVICE | LOGD_IP4,
- "(%s): failed to set IPv4 route: %s",
- iface ? iface : "unknown", nl_geterror (err));
- g_free (iface);
-
- rtnl_route_put (route);
- route = NULL;
- }
-
- return route;
-}
-
-static gboolean
-sync_addresses (int ifindex,
- int family,
- struct rtnl_addr **addrs,
- int num_addrs)
-{
- struct nl_sock *nlh;
- struct nl_cache *addr_cache = NULL;
- struct rtnl_addr *filter_addr = NULL, *match_addr;
- struct nl_object *match;
- struct nl_addr *nladdr;
- int i, err;
- guint32 log_domain = (family == AF_INET) ? LOGD_IP4 : LOGD_IP6;
- char buf[INET6_ADDRSTRLEN + 1];
- char *iface = NULL;
- gboolean success = FALSE;
-
- log_domain |= LOGD_DEVICE;
-
- nlh = nm_netlink_get_default_handle ();
- if (!nlh)
- return FALSE;
-
- err = rtnl_addr_alloc_cache (nlh, &addr_cache);
- if (err < 0)
- return FALSE;
-
- filter_addr = rtnl_addr_alloc ();
- if (!filter_addr)
- goto out;
-
- rtnl_addr_set_ifindex (filter_addr, ifindex);
- if (family)
- rtnl_addr_set_family (filter_addr, family);
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- goto out;
-
- nm_log_dbg (log_domain, "(%s): syncing addresses (family %d)", iface, family);
-
- /* Walk through the cache, comparing the addresses already on
- * the interface to the addresses in addrs.
- */
- for (match = nl_cache_get_first (addr_cache); match; match = nl_cache_get_next (match)) {
- gboolean buf_valid = FALSE;
- match_addr = (struct rtnl_addr *) match;
-
- /* Skip addresses not on our interface */
- if (!nl_object_match_filter (match, (struct nl_object *) filter_addr))
- continue;
-
- if (addrs) {
- for (i = 0; i < num_addrs; i++) {
- if (addrs[i] && nl_object_identical (match, (struct nl_object *) addrs[i]))
- break;
- }
-
- if (addrs[i]) {
- /* match == addrs[i], so remove it from addrs so we don't
- * try to add it to the interface again below.
- */
- rtnl_addr_put (addrs[i]);
- addrs[i] = NULL;
- continue;
- }
- }
-
- nladdr = rtnl_addr_get_local (match_addr);
-
- /* Don't delete IPv6 link-local addresses; they don't belong to NM */
- if (rtnl_addr_get_family (match_addr) == AF_INET6) {
- struct in6_addr *tmp;
-
- if (rtnl_addr_get_scope (match_addr) == RT_SCOPE_LINK) {
- nm_log_dbg (log_domain, "(%s): ignoring IPv6 link-local address", iface);
- continue;
- }
-
- tmp = nl_addr_get_binary_addr (nladdr);
- if (inet_ntop (AF_INET6, tmp, buf, sizeof (buf)))
- buf_valid = TRUE;
- } else if (rtnl_addr_get_family (match_addr) == AF_INET) {
- struct in_addr *tmp;
-
- tmp = nl_addr_get_binary_addr (nladdr);
- if (inet_ntop (AF_INET, tmp, buf, sizeof (buf)))
- buf_valid = TRUE;
- }
-
- if (buf_valid) {
- nm_log_dbg (log_domain, "(%s): removing address '%s/%d'",
- iface, buf, rtnl_addr_get_prefixlen (match_addr));
- }
-
- /* Otherwise, match_addr should be removed from the interface. */
- err = rtnl_addr_delete (nlh, match_addr, 0);
- if (err < 0) {
- nm_log_err (log_domain, "(%s): error %d returned from rtnl_addr_delete(): %s",
- iface, err, nl_geterror (err));
- }
- }
-
- /* Now add the remaining new addresses */
- for (i = 0; i < num_addrs; i++) {
- struct in6_addr *in6tmp;
- struct in_addr *in4tmp;
- gboolean buf_valid = FALSE;
-
- if (!addrs[i])
- continue;
-
- nladdr = rtnl_addr_get_local (addrs[i]);
- if (rtnl_addr_get_family (addrs[i]) == AF_INET6) {
- in6tmp = nl_addr_get_binary_addr (nladdr);
- if (inet_ntop (AF_INET6, in6tmp, buf, sizeof (buf)))
- buf_valid = TRUE;
- } else if (rtnl_addr_get_family (addrs[i]) == AF_INET) {
- in4tmp = nl_addr_get_binary_addr (nladdr);
- if (inet_ntop (AF_INET, in4tmp, buf, sizeof (buf)))
- buf_valid = TRUE;
- }
-
- if (buf_valid) {
- nm_log_dbg (log_domain, "(%s): adding address '%s/%d'",
- iface, buf, nl_addr_get_prefixlen (nladdr));
- }
-
- err = rtnl_addr_add (nlh, addrs[i], 0);
- if (err < 0 && (err != -NLE_EXIST)) {
- nm_log_err (log_domain,
- "(%s): error %d returned from rtnl_addr_add():\n%s",
- iface, err, nl_geterror (err));
- }
-
- rtnl_addr_put (addrs[i]);
- }
- g_free (addrs);
- success = TRUE;
-
-out:
- if (filter_addr)
- rtnl_addr_put (filter_addr);
- if (addr_cache)
- nl_cache_free (addr_cache);
- g_free (iface);
- return success;
-}
-
-static gboolean
-add_ip4_addresses (NMIP4Config *config, int ifindex)
-{
- char *iface;
- int num_addrs, i;
- guint32 flags = 0;
- gboolean did_gw = FALSE;
- struct rtnl_addr **addrs;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- return FALSE;
-
- num_addrs = nm_ip4_config_get_num_addresses (config);
- addrs = g_new0 (struct rtnl_addr *, num_addrs + 1);
-
- for (i = 0; i < num_addrs; i++) {
- NMIP4Address *addr;
-
- addr = nm_ip4_config_get_address (config, i);
- g_assert (addr);
-
- flags = NM_RTNL_ADDR_DEFAULT;
- if (nm_ip4_address_get_gateway (addr) && !did_gw) {
- if (nm_ip4_config_get_ptp_address (config))
- flags |= NM_RTNL_ADDR_PTP_ADDR;
- did_gw = TRUE;
- }
-
- addrs[i] = nm_ip4_config_to_rtnl_addr (config, i, flags);
- if (!addrs[i]) {
- nm_log_warn (LOGD_DEVICE | LOGD_IP4,
- "(%s): couldn't create rtnl address!",
- iface ? iface : "unknown");
- continue;
- }
- rtnl_addr_set_ifindex (addrs[i], ifindex);
- }
- g_free (iface);
-
- return sync_addresses (ifindex, AF_INET, addrs, num_addrs);
-}
-
-struct rtnl_route *
-nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, guint32 vpn_gw)
-{
- NMIP4Config *parent_config;
- guint32 parent_gw = 0, parent_prefix = 0, i;
- NMIP4Address *tmp;
- struct rtnl_route *route = NULL;
-
- g_return_val_if_fail (NM_IS_DEVICE (parent_device), NULL);
- g_return_val_if_fail (vpn_gw != 0, NULL);
-
- /* Set up a route to the VPN gateway's public IP address through the default
- * network device if the VPN gateway is on a different subnet.
- */
-
- parent_config = nm_device_get_ip4_config (parent_device);
- g_return_val_if_fail (parent_config != NULL, NULL);
-
- for (i = 0; i < nm_ip4_config_get_num_addresses (parent_config); i++) {
- tmp = nm_ip4_config_get_address (parent_config, i);
- if (nm_ip4_address_get_gateway (tmp)) {
- parent_gw = nm_ip4_address_get_gateway (tmp);
- parent_prefix = nm_ip4_address_get_prefix (tmp);
- break;
- }
- }
-
- if (!parent_gw)
- return NULL;
-
- /* If the VPN gateway is in the same subnet as one of the parent device's
- * IP addresses, don't add the host route to it, but a route through the
- * parent device.
- */
- if (ip4_dest_in_same_subnet (parent_config, vpn_gw, parent_prefix)) {
- route = nm_system_device_set_ip4_route (nm_device_get_ip_ifindex (parent_device),
- vpn_gw, 32, 0, 0, nm_ip4_config_get_mss (parent_config));
- } else {
- route = nm_system_device_set_ip4_route (nm_device_get_ip_ifindex (parent_device),
- vpn_gw, 32, parent_gw, 0, nm_ip4_config_get_mss (parent_config));
- }
-
- return route;
-}
-
-/*
- * nm_system_apply_ip4_config
- *
- * Set IPv4 configuration of the device from an NMIP4Config object.
- *
- */
-gboolean
-nm_system_apply_ip4_config (int ifindex,
- NMIP4Config *config,
- int priority,
- NMIP4ConfigCompareFlags flags)
-{
- int i;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
- g_return_val_if_fail (config != NULL, FALSE);
-
- if (flags & NM_IP4_COMPARE_FLAG_ADDRESSES) {
- if (!add_ip4_addresses (config, ifindex))
- return FALSE;
- sleep (1);
- }
-
- if (flags & NM_IP4_COMPARE_FLAG_ROUTES) {
- for (i = 0; i < nm_ip4_config_get_num_routes (config); i++) {
- NMIP4Route *route = nm_ip4_config_get_route (config, i);
- struct rtnl_route *tmp;
-
- /* Don't add the route if it's more specific than one of the subnets
- * the device already has an IP address on.
- */
- if (ip4_dest_in_same_subnet (config,
- nm_ip4_route_get_dest (route),
- nm_ip4_route_get_prefix (route)))
- continue;
-
- /* Don't add the route if it doesn't have a gateway and the connection
- * is never supposed to be the default connection.
- */
- if ( nm_ip4_config_get_never_default (config)
- && nm_ip4_route_get_dest (route) == 0)
- continue;
-
- tmp = nm_system_device_set_ip4_route (ifindex,
- nm_ip4_route_get_dest (route),
- nm_ip4_route_get_prefix (route),
- nm_ip4_route_get_next_hop (route),
- nm_ip4_route_get_metric (route),
- nm_ip4_config_get_mss (config));
- rtnl_route_put (tmp);
- }
- }
-
- if (flags & NM_IP4_COMPARE_FLAG_MTU) {
- if (nm_ip4_config_get_mtu (config))
- nm_system_iface_set_mtu (ifindex, nm_ip4_config_get_mtu (config));
- }
-
- if (priority > 0)
- nm_system_device_set_priority (ifindex, config, priority);
-
- return TRUE;
-}
-
-int
-nm_system_set_ip6_route (int ifindex,
- const struct in6_addr *ip6_dest,
- guint32 ip6_prefix,
- const struct in6_addr *ip6_gateway,
- guint32 metric,
- int mss,
- int protocol,
- int table,
- struct rtnl_route **out_route)
-{
- struct nl_sock *nlh;
- struct rtnl_route *route;
- int err = 0;
-
- g_return_val_if_fail (ifindex > 0, -1);
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, -1);
-
- route = nm_netlink_route_new (ifindex, AF_INET6, mss,
- NMNL_PROP_PROT, protocol,
- NMNL_PROP_PRIO, metric,
- NMNL_PROP_TABLE, table,
- NULL);
- g_return_val_if_fail (route != NULL, -1);
-
- /* Add the route */
- err = nm_netlink_route6_add (route, ip6_dest, ip6_prefix, ip6_gateway, 0);
- if (err == -NLE_OBJ_NOTFOUND && ip6_gateway) {
- /* Gateway might be over a bridge; try adding a route to gateway first */
- struct rtnl_route *route2;
-
- route2 = nm_netlink_route_new (ifindex, AF_INET6, mss, NULL);
- if (route2) {
- err = nm_netlink_route6_add (route, ip6_gateway, 128, NULL, 0);
- /* Add route to gateway over bridge */
- if (!err) {
- /* Try adding the route again */
- err = nm_netlink_route6_add (route, ip6_dest, ip6_prefix, ip6_gateway, 0);
- if (err)
- nm_netlink_route_delete (route2);
- }
- rtnl_route_put (route2);
- }
- }
-
- if (out_route)
- *out_route = route;
- else
- rtnl_route_put (route);
-
- return err;
-}
-
-static gboolean
-ip6_dest_in_same_subnet (NMIP6Config *config, const struct in6_addr *dest, guint32 dest_prefix)
-{
- int num;
- int i;
-
- num = nm_ip6_config_get_num_addresses (config);
- for (i = 0; i < num; i++) {
- NMIP6Address *addr = nm_ip6_config_get_address (config, i);
- guint32 prefix = nm_ip6_address_get_prefix (addr);
- const struct in6_addr *address = nm_ip6_address_get_address (addr);
-
- if (prefix <= dest_prefix) {
- const guint8 *maskbytes = (const guint8 *)address;
- const guint8 *addrbytes = (const guint8 *)dest;
- int nbytes, nbits;
-
- /* Copied from g_inet_address_mask_matches() */
- nbytes = prefix / 8;
- if (nbytes != 0 && memcmp (maskbytes, addrbytes, nbytes) != 0)
- continue;
-
- nbits = prefix % 8;
- if (nbits == 0)
- return TRUE;
-
- if (maskbytes[nbytes] == (addrbytes[nbytes] & (0xFF << (8 - nbits))))
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-struct rtnl_route *
-nm_system_add_ip6_vpn_gateway_route (NMDevice *parent_device,
- const struct in6_addr *vpn_gw)
-{
- NMIP6Config *parent_config;
- const struct in6_addr *parent_gw = NULL;
- guint32 parent_prefix = 0;
- int i, err;
- NMIP6Address *tmp;
- struct rtnl_route *route = NULL;
-
- g_return_val_if_fail (NM_IS_DEVICE (parent_device), NULL);
- g_return_val_if_fail (vpn_gw != NULL, NULL);
-
- /* This is all just the same as
- * nm_system_add_ip4_vpn_gateway_route(), except with an IPv6
- * address for the VPN gateway.
- */
-
- parent_config = nm_device_get_ip6_config (parent_device);
- g_return_val_if_fail (parent_config != NULL, NULL);
-
- for (i = 0; i < nm_ip6_config_get_num_addresses (parent_config); i++) {
- tmp = nm_ip6_config_get_address (parent_config, i);
- if (nm_ip6_address_get_gateway (tmp)) {
- parent_gw = nm_ip6_address_get_gateway (tmp);
- parent_prefix = nm_ip6_address_get_prefix (tmp);
- break;
- }
- }
-
- if (!parent_gw)
- return NULL;
-
- if (ip6_dest_in_same_subnet (parent_config, vpn_gw, parent_prefix)) {
- err = nm_system_set_ip6_route (nm_device_get_ip_ifindex (parent_device),
- vpn_gw, 128, NULL, 0,
- nm_ip6_config_get_mss (parent_config),
- RTPROT_UNSPEC, RT_TABLE_UNSPEC,
- &route);
- } else {
- err = nm_system_set_ip6_route (nm_device_get_ip_ifindex (parent_device),
- vpn_gw, 128, parent_gw, 0,
- nm_ip6_config_get_mss (parent_config),
- RTPROT_UNSPEC, RT_TABLE_UNSPEC,
- &route);
- }
-
- if (err) {
- nm_log_err (LOGD_DEVICE | LOGD_IP6,
- "(%s): failed to add IPv6 route to VPN gateway (%d)",
- nm_device_get_iface (parent_device), err);
- }
- return route;
-}
-
-static gboolean
-add_ip6_addresses (NMIP6Config *config, int ifindex)
-{
- char *iface;
- int num_addrs, i;
- struct rtnl_addr **addrs;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- return FALSE;
-
- num_addrs = nm_ip6_config_get_num_addresses (config);
- addrs = g_new0 (struct rtnl_addr *, num_addrs + 1);
-
- for (i = 0; i < num_addrs; i++) {
- NMIP6Address *addr;
-
- addr = nm_ip6_config_get_address (config, i);
- g_assert (addr);
-
- addrs[i] = nm_ip6_config_to_rtnl_addr (config, i, NM_RTNL_ADDR_DEFAULT);
- if (!addrs[i]) {
- nm_log_warn (LOGD_DEVICE | LOGD_IP6,
- "(%s): couldn't create rtnl address!",
- iface ? iface : "unknown");
- continue;
- }
- rtnl_addr_set_ifindex (addrs[i], ifindex);
- }
- g_free (iface);
-
- return sync_addresses (ifindex, AF_INET6, addrs, num_addrs);
-}
-
-/*
- * nm_system_apply_ip6_config
- *
- * Set IPv6 configuration of the device from an NMIP6Config object.
- *
- */
-gboolean
-nm_system_apply_ip6_config (int ifindex,
- NMIP6Config *config,
- int priority,
- NMIP6ConfigCompareFlags flags)
-{
- int i;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
- g_return_val_if_fail (config != NULL, FALSE);
-
- if (flags & NM_IP6_COMPARE_FLAG_ADDRESSES) {
- if (!add_ip6_addresses (config, ifindex))
- return FALSE;
- sleep (1); // FIXME?
- }
-
- if (flags & NM_IP6_COMPARE_FLAG_ROUTES) {
- char *iface = nm_netlink_index_to_iface (ifindex);
-
- for (i = 0; i < nm_ip6_config_get_num_routes (config); i++) {
- NMIP6Route *route = nm_ip6_config_get_route (config, i);
- int err;
-
- /* Don't add the route if it doesn't have a gateway and the connection
- * is never supposed to be the default connection.
- */
- if ( nm_ip6_config_get_never_default (config)
- && IN6_IS_ADDR_UNSPECIFIED (nm_ip6_route_get_dest (route)))
- continue;
-
- err = nm_system_set_ip6_route (ifindex,
- nm_ip6_route_get_dest (route),
- nm_ip6_route_get_prefix (route),
- nm_ip6_route_get_next_hop (route),
- nm_ip6_route_get_metric (route),
- nm_ip6_config_get_mss (config),
- RTPROT_UNSPEC,
- RT_TABLE_UNSPEC,
- NULL);
- if (err && (err != -NLE_EXIST)) {
- nm_log_err (LOGD_DEVICE | LOGD_IP6,
- "(%s): failed to set IPv6 route: %s",
- iface ? iface : "unknown",
- nl_geterror (err));
- }
- }
- g_free (iface);
- }
-
-// FIXME
-// if (priority > 0)
-// nm_system_device_set_priority (iface, config, priority);
-
- return TRUE;
-}
-
-/**
- * nm_system_iface_set_up:
- * @ifindex: interface index
- * @up: %TRUE to bring interface up, or %FALSE to take it down
- * @no_firmware: on return, %TRUE if the operation may have failed due to
- * missing firmware
- *
- * Bring the interface up or take it down.
- *
- * Returns: %TRUE on success, %FALSE on failure
- **/
-gboolean
-nm_system_iface_set_up (int ifindex,
- gboolean up,
- gboolean *no_firmware)
-{
- struct rtnl_link *request = NULL, *old = NULL;
- struct nl_sock *nlh;
- gboolean success = FALSE;
- int err;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
- if (no_firmware)
- g_return_val_if_fail (*no_firmware == FALSE, FALSE);
-
- if (!(request = rtnl_link_alloc ()))
- return FALSE;
-
- if (up)
- rtnl_link_set_flags (request, IFF_UP);
- else
- rtnl_link_unset_flags (request, IFF_UP);
-
- old = nm_netlink_index_to_rtnl_link (ifindex);
- if (old) {
- nlh = nm_netlink_get_default_handle ();
- if (nlh) {
- err = rtnl_link_change (nlh, old, request, 0);
- if (err == 0) {
- success = TRUE;
- } else {
- if ((err == -NLE_OBJ_NOTFOUND) && no_firmware && up)
- *no_firmware = TRUE;
- }
- }
- }
-
- rtnl_link_put (old);
- rtnl_link_put (request);
- return success;
-}
-
-guint32
-nm_system_iface_get_flags (int ifindex)
-{
- struct rtnl_link *l;
- guint32 flags;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
-
- l = nm_netlink_index_to_rtnl_link (ifindex);
- if (l == NULL) {
- char *iface = nm_netlink_index_to_iface (ifindex);
-
- g_warn_if_fail (iface != NULL);
- nm_log_err (LOGD_HW, "(%s): failed to get interface link object",
- iface ? iface : "unknown");
- g_free (iface);
- return FALSE;
- }
-
- flags = rtnl_link_get_flags (l);
- rtnl_link_put (l);
-
- return flags;
-}
-
-/**
- * nm_system_iface_is_up:
- * @ifindex: interface index
- *
- * Returns: %TRUE if the interface is up, %FALSE if it was down or the check
- * failed.
- **/
-gboolean
-nm_system_iface_is_up (int ifindex)
-{
- return nm_system_iface_get_flags (ifindex) & IFF_UP;
-}
-
-/**
- * nm_system_iface_set_mtu:
- * @ifindex: interface index
- * @mtu: the new MTU
- *
- * Returns: %TRUE if the request was successful, %FALSE if it failed
- **/
-gboolean
-nm_system_iface_set_mtu (int ifindex, guint32 mtu)
-{
- struct rtnl_link *old;
- struct rtnl_link *new;
- gboolean success = FALSE;
- struct nl_sock *nlh;
- int err;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
- g_return_val_if_fail (mtu > 0, FALSE);
-
- new = rtnl_link_alloc ();
- if (!new)
- return FALSE;
-
- old = nm_netlink_index_to_rtnl_link (ifindex);
- if (old) {
- rtnl_link_set_mtu (new, mtu);
- nlh = nm_netlink_get_default_handle ();
- if (nlh) {
- err = rtnl_link_change (nlh, old, new, 0);
- if (err == 0)
- success = TRUE;
- else {
- char *iface = nm_netlink_index_to_iface (ifindex);
-
- nm_log_warn (LOGD_HW, "(%s): failed to change interface MTU",
- iface ? iface : "unknown");
- g_free (iface);
- }
- }
- rtnl_link_put (old);
- }
- rtnl_link_put (new);
-
- return success;
-}
-
-/**
- * nm_system_iface_set_mac:
- * @ifindex: interface index
- * @mac: new MAC address
- *
- * Attempts to change the interface's MAC address to the requested value,
- * ie MAC spoofing or cloning.
- *
- * Returns: %TRUE if the request succeeded, %FALSE if it failed.
- **/
-gboolean
-nm_system_iface_set_mac (int ifindex, const struct ether_addr *mac)
-{
- struct rtnl_link *old, *new;
- gboolean success = FALSE;
- struct nl_sock *nlh;
- char *iface;
- struct nl_addr *addr = NULL;
- int err;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
- g_return_val_if_fail (mac != NULL, FALSE);
-
- new = rtnl_link_alloc ();
- if (!new)
- return FALSE;
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- goto out;
-
- old = nm_netlink_index_to_rtnl_link (ifindex);
- if (old) {
- addr = nl_addr_build (AF_LLC, (void *) mac, ETH_ALEN);
- if (!addr) {
- nm_log_err (LOGD_HW, "(%s): failed to allocate memory for MAC address change", iface);
- rtnl_link_put (old);
- rtnl_link_put (new);
- return FALSE;
- }
- rtnl_link_set_addr (new, addr);
- nl_addr_put (addr);
- nlh = nm_netlink_get_default_handle ();
- if (nlh) {
- err = rtnl_link_change (nlh, old, new, 0);
- if (err == 0)
- success = TRUE;
- else
- nm_log_warn (LOGD_HW, "(%s): failed to change interface MAC address", iface);
- }
- rtnl_link_put (old);
- }
-
-out:
- rtnl_link_put (new);
- g_free (iface);
- return success;
-}
-
-/**
- * nm_system_iface_set_arp:
- * @ifindex: interface index
- * @enable: %TRUE to enable ARP, or %FALSE to disable
- *
- * Sets a flag to indicate that ARP should or should not be used on the
- * interface. Point-to-point or IPv4 /32 interfaces often require that ARP
- * be disabled.
- *
- * Returns: %TRUE on success, %FALSE on failure
- **/
-gboolean
-nm_system_iface_set_arp (int ifindex, gboolean enable)
-{
- struct rtnl_link *request = NULL, *old = NULL;
- struct nl_sock *nlh;
- gboolean success = FALSE;
- int err;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
-
- if (!(request = rtnl_link_alloc ()))
- return FALSE;
-
- if (enable)
- rtnl_link_unset_flags (request, IFF_NOARP);
- else
- rtnl_link_set_flags (request, IFF_NOARP);
-
- old = nm_netlink_index_to_rtnl_link (ifindex);
- if (old) {
- nlh = nm_netlink_get_default_handle ();
- if (nlh) {
- err = rtnl_link_change (nlh, old, request, 0);
- if (err == 0)
- success = TRUE;
- }
- }
-
- rtnl_link_put (old);
- rtnl_link_put (request);
- return success;
-}
-
-static struct rtnl_route *
-add_ip4_route_to_gateway (int ifindex, guint32 gw, guint32 mss)
-{
- struct nl_sock *nlh;
- struct rtnl_route *route = NULL;
- int err;
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, NULL);
-
- /* Gateway might be over a bridge; try adding a route to gateway first */
- route = nm_netlink_route_new (ifindex, AF_INET, mss,
- NMNL_PROP_SCOPE, RT_SCOPE_LINK,
- NMNL_PROP_TABLE, RT_TABLE_MAIN,
- NULL);
- g_return_val_if_fail (route != NULL, NULL);
-
- /* Add direct route to the gateway */
- err = nm_netlink_route4_add (route, &gw, 32, NULL, 0);
- if (err) {
- char *iface = nm_netlink_index_to_iface (ifindex);
-
- nm_log_err (LOGD_DEVICE | LOGD_IP4,
- "(%s): failed to add IPv4 route to gateway (%d)",
- iface ? iface : "unknown", err);
- g_free (iface);
- goto error;
- }
-
- return route;
-
-error:
- rtnl_route_put (route);
- return NULL;
-}
-
-static int
-replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss)
-{
- struct rtnl_route *route = NULL;
- struct nl_sock *nlh;
- int err = -1;
- guint32 dst = 0;
-
- g_return_val_if_fail (ifindex > 0, -ENODEV);
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, -ENOMEM);
-
- route = nm_netlink_route_new (ifindex, AF_INET, mss,
- NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE,
- NMNL_PROP_TABLE, RT_TABLE_MAIN,
- NULL);
- g_return_val_if_fail (route != NULL, -ENOMEM);
-
- /* Add the new default route */
- err = nm_netlink_route4_add (route, &dst, 0, &gw, NLM_F_REPLACE);
- if (err == -NLE_EXIST)
- err = 0;
-
- rtnl_route_put (route);
- return err;
-}
-
-/*
- * nm_system_replace_default_ip4_route_vpn
- *
- * Replace default IPv4 route with one via the current device
- *
- */
-gboolean
-nm_system_replace_default_ip4_route_vpn (int ifindex,
- guint32 ext_gw,
- guint32 int_gw,
- guint32 mss,
- int parent_ifindex,
- guint32 parent_mss)
-{
- struct rtnl_route *gw_route = NULL;
- struct nl_sock *nlh;
- gboolean success = FALSE;
- int err;
- char *iface;
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, FALSE);
-
- err = replace_default_ip4_route (ifindex, int_gw, mss);
- if (err == 0)
- return TRUE;
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- goto out;
-
- if ((err != -NLE_OBJ_NOTFOUND) && (err != -NLE_FAILURE)) {
- nm_log_err (LOGD_DEVICE | LOGD_VPN | LOGD_IP4,
- "(%s): failed to set IPv4 default route: %d",
- iface, err);
- goto out;
- }
-
- /* Try adding a direct route to the gateway first */
- gw_route = add_ip4_route_to_gateway (parent_ifindex, ext_gw, parent_mss);
- if (!gw_route)
- goto out;
-
- /* Try adding the original route again */
- err = replace_default_ip4_route (ifindex, int_gw, mss);
- if (err != 0) {
- nm_netlink_route_delete (gw_route);
- nm_log_err (LOGD_DEVICE | LOGD_VPN | LOGD_IP4,
- "(%s): failed to set IPv4 default route (pass #2): %d",
- iface, err);
- } else
- success = TRUE;
-
-out:
- if (gw_route)
- rtnl_route_put (gw_route);
- g_free (iface);
- return success;
-}
-
-/*
- * nm_system_replace_default_ip4_route
- *
- * Replace default IPv4 route with one via the current device
- *
- */
-gboolean
-nm_system_replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss)
-{
- struct rtnl_route *gw_route = NULL;
- gboolean success = FALSE;
- char *iface;
- int err;
-
- err = replace_default_ip4_route (ifindex, gw, mss);
- if (err == 0)
- return TRUE;
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- goto out;
-
- if (err != -NLE_OBJ_NOTFOUND) {
- nm_log_err (LOGD_DEVICE | LOGD_IP4,
- "(%s): failed to set IPv4 default route: %d",
- iface, err);
- goto out;
- }
-
- /* Try adding a direct route to the gateway first */
- gw_route = add_ip4_route_to_gateway (ifindex, gw, mss);
- if (!gw_route)
- goto out;
-
- /* Try adding the original route again */
- err = replace_default_ip4_route (ifindex, gw, mss);
- if (err != 0) {
- nm_netlink_route_delete (gw_route);
- nm_log_err (LOGD_DEVICE | LOGD_IP4,
- "(%s): failed to set IPv4 default route (pass #2): %d",
- iface, err);
- } else
- success = TRUE;
-
-out:
- if (gw_route)
- rtnl_route_put (gw_route);
- g_free (iface);
- return success;
-}
-
-static struct rtnl_route *
-add_ip6_route_to_gateway (int ifindex, const struct in6_addr *gw, int mss)
-{
- struct nl_sock *nlh;
- struct rtnl_route *route = NULL;
- int err;
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, NULL);
-
- /* Gateway might be over a bridge; try adding a route to gateway first */
- route = nm_netlink_route_new (ifindex, AF_INET6, mss,
- NMNL_PROP_SCOPE, RT_SCOPE_LINK,
- NMNL_PROP_TABLE, RT_TABLE_MAIN,
- NULL);
- g_return_val_if_fail (route != NULL, NULL);
-
- /* Add direct route to the gateway */
- err = nm_netlink_route6_add (route, gw, 128, NULL, 0);
- if (err) {
- char *iface = nm_netlink_index_to_iface (ifindex);
-
- nm_log_err (LOGD_DEVICE | LOGD_IP6,
- "(%s): failed to add IPv6 route to gateway (%d)",
- iface ? iface : "unknown", err);
- g_free (iface);
-
- rtnl_route_put (route);
- route = NULL;
- }
-
- return route;
-}
-
-static int
-add_default_ip6_route (int ifindex, const struct in6_addr *gw, int mss)
-{
- struct rtnl_route *route = NULL;
- struct nl_sock *nlh;
- int err = -1;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, -ENOMEM);
-
- route = nm_netlink_route_new (ifindex, AF_INET6, mss,
- NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE,
- NMNL_PROP_TABLE, RT_TABLE_MAIN,
- NMNL_PROP_PRIO, 1,
- NULL);
- g_return_val_if_fail (route != NULL, -ENOMEM);
-
- /* Add the new default route */
- err = nm_netlink_route6_add (route, &in6addr_any, 0, gw, NLM_F_CREATE | NLM_F_REPLACE);
- if (err == -NLE_EXIST)
- err = 0;
-
- rtnl_route_put (route);
- return err;
-}
-
-static struct rtnl_route *
-find_static_default_routes (struct rtnl_route *route,
- struct nl_addr *dst,
- const char *iface,
- gpointer user_data)
-{
- GList **def_routes = user_data;
-
- if ( nl_addr_get_prefixlen (dst) == 0
- && rtnl_route_get_protocol (route) == RTPROT_STATIC) {
- rtnl_route_get (route);
- *def_routes = g_list_prepend (*def_routes, route);
- }
-
- return NULL;
-}
-
-static int
-replace_default_ip6_route (int ifindex, const struct in6_addr *gw, int mss)
-{
- GList *def_routes, *iter;
- struct rtnl_route *route;
- char *iface;
- char gw_str[INET6_ADDRSTRLEN + 1];
-
- g_return_val_if_fail (ifindex > 0, FALSE);
-
- if (nm_logging_level_enabled (LOGL_DEBUG)) {
- if (gw) {
- memset (gw_str, 0, sizeof (gw_str));
- if (inet_ntop (AF_INET6, gw, gw_str, sizeof (gw_str) - 1))
- nm_log_dbg (LOGD_IP6, "Setting IPv6 default route via %s", gw_str);
- } else {
- nm_log_dbg (LOGD_IP6, "Setting IPv6 default route via %s",
- nm_netlink_index_to_iface (ifindex));
- }
- }
-
- /* We can't just use NLM_F_REPLACE here like in the IPv4 case, because
- * the kernel doesn't like it if we replace the default routes it
- * creates. (See rh#785772.) So we delete any non-kernel default routes,
- * and then add a new default route of our own with a lower metric than
- * the kernel ones.
- */
- def_routes = NULL;
- nm_netlink_foreach_route (ifindex, AF_INET6, RT_SCOPE_UNIVERSE, TRUE,
- find_static_default_routes, &def_routes);
- for (iter = def_routes; iter; iter = iter->next) {
- route = iter->data;
- if (!nm_netlink_route_delete (route)) {
- iface = nm_netlink_index_to_iface (ifindex);
- nm_log_err (LOGD_DEVICE | LOGD_IP6,
- "(%s): failed to delete existing IPv6 default route",
- iface);
- g_free (iface);
- }
- rtnl_route_put (route);
- }
- g_list_free (def_routes);
-
- return add_default_ip6_route (ifindex, gw, mss);
-}
-
-/*
- * nm_system_replace_default_ip6_route
- *
- * Replace default IPv6 route with one via the given gateway
- *
- */
-gboolean
-nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
-{
- struct rtnl_route *gw_route = NULL;
- gboolean success = FALSE;
- char *iface;
- int err;
-
- err = replace_default_ip6_route (ifindex, gw, 0);
- if (err == 0 || err == -NLE_EXIST)
- return TRUE;
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- goto out;
-
- if (err != -NLE_OBJ_NOTFOUND) {
- nm_log_err (LOGD_DEVICE | LOGD_IP6,
- "(%s): failed to set IPv6 default route: %d",
- iface, err);
- goto out;
- }
-
- /* Try adding a direct route to the gateway first */
- gw_route = add_ip6_route_to_gateway (ifindex, gw, 0);
- if (!gw_route)
- goto out;
-
- /* Try adding the original route again */
- err = replace_default_ip6_route (ifindex, gw, 0);
- if (err != 0) {
- nm_netlink_route_delete (gw_route);
- nm_log_err (LOGD_DEVICE | LOGD_IP6,
- "(%s): failed to set IPv6 default route (pass #2): %d",
- iface, err);
- } else
- success = TRUE;
-
-out:
- if (gw_route)
- rtnl_route_put (gw_route);
- g_free (iface);
- return success;
-}
-
-gboolean
-nm_system_replace_default_ip6_route_vpn (int ifindex,
- const struct in6_addr *ext_gw,
- const struct in6_addr *int_gw,
- guint32 mss,
- int parent_ifindex,
- guint32 parent_mss)
-{
- struct rtnl_route *gw_route = NULL;
- struct nl_sock *nlh;
- gboolean success = FALSE;
- int err;
- char *iface;
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, FALSE);
-
- err = replace_default_ip6_route (ifindex, int_gw, mss);
- if (err == 0)
- return TRUE;
-
- iface = nm_netlink_index_to_iface (ifindex);
- if (!iface)
- goto out;
-
- if ((err != -NLE_OBJ_NOTFOUND) && (err != -NLE_FAILURE)) {
- nm_log_err (LOGD_DEVICE | LOGD_VPN | LOGD_IP6,
- "(%s): failed to set IPv6 default route: %d",
- iface, err);
- goto out;
- }
-
- /* Try adding a direct route to the gateway first */
- gw_route = add_ip6_route_to_gateway (parent_ifindex, ext_gw, parent_mss);
- if (!gw_route)
- goto out;
-
- /* Try adding the original route again */
- err = replace_default_ip6_route (ifindex, int_gw, mss);
- if (err != 0) {
- nm_netlink_route_delete (gw_route);
- nm_log_err (LOGD_DEVICE | LOGD_VPN | LOGD_IP6,
- "(%s): failed to set IPv6 default route (pass #2): %d",
- iface, err);
- } else
- success = TRUE;
-
-out:
- if (gw_route)
- rtnl_route_put (gw_route);
- g_free (iface);
- return success;
-}
-
-/*
- * nm_system_iface_flush_addresses
- *
- * Flush all network addresses associated with a network device
- *
- */
-gboolean
-nm_system_iface_flush_addresses (int ifindex, int family)
-{
- g_return_val_if_fail (ifindex > 0, FALSE);
- return sync_addresses (ifindex, family, NULL, 0);
-}
-
-
-static struct rtnl_route *
-delete_one_route (struct rtnl_route *route,
- struct nl_addr *dst,
- const char *iface,
- gpointer user_data)
-{
- guint32 log_level = GPOINTER_TO_UINT (user_data);
-
- nm_log_dbg (log_level, " deleting route");
- if (!nm_netlink_route_delete (route))
- nm_log_err (LOGD_DEVICE, "(%s): failed to delete route", iface);
-
- return NULL;
-}
-
-/**
- * nm_system_iface_flush_routes:
- * @ifindex: interface index
- * @family: address family, i.e. AF_INET, AF_INET6, or AF_UNSPEC
- *
- * Flush all network addresses associated with a network device.
- *
- * Returns: %TRUE on success, %FALSE on failure
- **/
-gboolean
-nm_system_iface_flush_routes (int ifindex, int family)
-{
- guint32 log_level = LOGD_IP4 | LOGD_IP6;
- const char *sf = "UNSPEC";
- char *iface;
-
- g_return_val_if_fail (ifindex > 0, FALSE);
-
- iface = nm_netlink_index_to_iface (ifindex);
- g_return_val_if_fail (iface != NULL, FALSE);
-
- if (family == AF_INET) {
- log_level = LOGD_IP4;
- sf = "INET";
- } else if (family == AF_INET6) {
- log_level = LOGD_IP6;
- sf = "INET6";
- }
- nm_log_dbg (log_level, "(%s): flushing routes ifindex %d family %s (%d)",
- iface, ifindex, sf, family);
-
- /* We don't want to flush IPv6 link-local routes that may exist on the
- * the interface since the LL address and routes should normally stay
- * assigned all the time.
- */
- nm_netlink_foreach_route (ifindex, family, RT_SCOPE_UNIVERSE, TRUE, delete_one_route, GUINT_TO_POINTER (log_level));
-
- g_free (iface);
- return TRUE;
-}
-
-static struct rtnl_route *
-find_route (struct rtnl_route *route,
- struct nl_addr *dst,
- const char *iface,
- gpointer user_data)
-{
- NMIP4Config *config = user_data;
- struct in_addr *dst_addr;
- int num;
- int i;
-
- if (dst && (nl_addr_get_family (dst) != AF_INET))
- return NULL;
-
- /* Find the first route that handles a subnet of at least one of the
- * device's IPv4 addresses.
- */
- dst_addr = nl_addr_get_binary_addr (dst);
- num = nm_ip4_config_get_num_addresses (config);
- for (i = 0; i < num; i++) {
- NMIP4Address *addr = nm_ip4_config_get_address (config, i);
- guint32 prefix = nm_ip4_address_get_prefix (addr);
- guint32 address = nm_ip4_address_get_address (addr);
-
- if ( prefix == nl_addr_get_prefixlen (dst)
- && (address & nm_utils_ip4_prefix_to_netmask (prefix)) == dst_addr->s_addr)
- return route;
- }
- return NULL;
-}
-
-static void
-nm_system_device_set_priority (int ifindex,
- NMIP4Config *config,
- int priority)
-{
- struct nl_sock *nlh;
- struct rtnl_route *found;
-
- found = nm_netlink_foreach_route (ifindex, AF_INET, RT_SCOPE_LINK, FALSE, find_route, config);
- if (found) {
- nlh = nm_netlink_get_default_handle ();
- nm_netlink_route_delete (found);
- rtnl_route_set_priority (found, priority);
- rtnl_route_add (nlh, found, 0);
- rtnl_route_put (found);
- }
-}
-
-static const struct {
- const char *option;
- const char *default_value;
-} bonding_defaults[] = {
- { "mode", "balance-rr" },
- { "arp_interval", "0" },
- { "miimon", "0" },
-
- { "ad_select", "stable" },
- { "arp_validate", "none" },
- { "downdelay", "0" },
- { "fail_over_mac", "none" },
- { "lacp_rate", "slow" },
- { "min_links", "0" },
- { "num_grat_arp", "1" },
- { "num_unsol_na", "1" },
- { "primary", "" },
- { "primary_reselect", "always" },
- { "resend_igmp", "1" },
- { "updelay", "0" },
- { "use_carrier", "1" },
- { "xmit_hash_policy", "layer2" },
- { NULL, NULL }
-};
-
-static void
-remove_bonding_entries (const char *iface, const char *path)
-{
- char cmd[20];
- char *value, **entries;
- gboolean ret;
- int i;
-
- if (!g_file_get_contents (path, &value, NULL, NULL))
- return;
-
- entries = g_strsplit (value, " ", -1);
- for (i = 0; entries[i]; i++) {
- snprintf (cmd, sizeof (cmd), "-%s", g_strstrip (entries[i]));
- ret = nm_utils_do_sysctl (path, cmd);
- if (!ret) {
- nm_log_warn (LOGD_HW, "(%s): failed to remove entry '%s' from '%s'",
- iface, entries[i], path);
- }
- }
- g_strfreev (entries);
-}
-
-static gboolean
-option_valid_for_nm_setting (const char *option, const char **valid_opts)
-{
- while (*valid_opts) {
- if (strcmp (option, *valid_opts) == 0)
- return TRUE;
- valid_opts++;
- }
- return FALSE;
-}
-
-gboolean
-nm_system_apply_bonding_config (const char *iface, NMSettingBond *s_bond)
-{
- const char **valid_opts;
- const char *option, *value;
- char path[FILENAME_MAX];
- char *current, *space;
- gboolean ret;
- int i;
-
- g_return_val_if_fail (iface != NULL, FALSE);
-
- /* Remove old slaves and arp_ip_targets */
- snprintf (path, sizeof (path), "/sys/class/net/%s/bonding/arp_ip_target", iface);
- remove_bonding_entries (iface, path);
- snprintf (path, sizeof (path), "/sys/class/net/%s/bonding/slaves", iface);
- remove_bonding_entries (iface, path);
-
- /* Apply config/defaults */
- valid_opts = nm_setting_bond_get_valid_options (s_bond);
- for (i = 0; bonding_defaults[i].option; i++) {
- option = bonding_defaults[i].option;
- if (option_valid_for_nm_setting (option, valid_opts))
- value = nm_setting_bond_get_option_by_name (s_bond, option);
- else
- value = NULL;
- if (!value)
- value = bonding_defaults[i].default_value;
-
- snprintf (path, sizeof (path), "/sys/class/net/%s/bonding/%s", iface, option);
- if (g_file_get_contents (path, &current, NULL, NULL)) {
- g_strstrip (current);
- space = strchr (current, ' ');
- if (space)
- *space = '\0';
- if (strcmp (current, value) != 0) {
- ret = nm_utils_do_sysctl (path, value);
- if (!ret) {
- nm_log_warn (LOGD_HW, "(%s): failed to set bonding attribute "
- "'%s' to '%s'", iface, option, value);
- }
- }
- }
- }
-
- /* Handle arp_ip_target */
- value = nm_setting_bond_get_option_by_name (s_bond, "arp_ip_target");
- if (value) {
- char **addresses, cmd[20];
-
- snprintf (path, sizeof (path), "/sys/class/net/%s/bonding/arp_ip_target", iface);
- addresses = g_strsplit (value, ",", -1);
- for (i = 0; addresses[i]; i++) {
- snprintf (cmd, sizeof (cmd), "+%s", g_strstrip (addresses[i]));
- ret = nm_utils_do_sysctl (path, cmd);
- if (!ret) {
- nm_log_warn (LOGD_HW, "(%s): failed to add arp_ip_target '%s'",
- iface, addresses[i]);
- }
- }
- g_strfreev (addresses);
- }
-
- return TRUE;
-}
-
-/**
- * nm_system_add_bonding_master:
- * @iface: the interface name for the new bond master
- *
- * Adds a virtual bonding device if it does not exist yet.
- *
- * Returns: %TRUE on success, %FALSE on failure
- */
-gboolean
-nm_system_add_bonding_master (const char *iface)
-{
- struct nl_sock *sock;
- int err;
-
- g_return_val_if_fail (iface != NULL, FALSE);
-
- /* When the kernel loads the bond module, either via explicit modprobe
- * or automatically in response to creating a bond master, it will also
- * create a 'bond0' interface. Since the bond we're about to create may
- * or may not be named 'bond0' prevent potential confusion about a bond
- * that the user didn't want by telling the bonding module not to create
- * bond0 automatically.
- */
- if (!g_file_test ("/sys/class/net/bonding_masters", G_FILE_TEST_EXISTS))
- nm_spawn_process ("modprobe bonding max_bonds=0");
-
- sock = nm_netlink_get_default_handle ();
-
- /* Existing bonding devices with matching name will be reused */
- err = rtnl_link_bond_add (sock, iface, NULL);
- if (err < 0) {
- nm_log_err (LOGD_DEVICE, "(%s): error %d returned from "
- "rtnl_link_bond_add(): %s",
- iface, err, nl_geterror (err));
- return FALSE;
- }
- return TRUE;
-}
-
-static gboolean
-nm_system_bond_compat_enslave (const char *master_iface, const char *slave_iface)
-{
- struct ifreq ifr;
- int fd;
- gboolean ret = FALSE;
-
- memset (&ifr, 0, sizeof (ifr));
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return FALSE;
- }
-
- strncpy (ifr.ifr_name, master_iface, IFNAMSIZ);
- strncpy (ifr.ifr_slave, slave_iface, IFNAMSIZ);
-
- if (ioctl (fd, SIOCBONDENSLAVE, &ifr) < 0 &&
- ioctl (fd, BOND_ENSLAVE_OLD, &ifr) < 0) {
- nm_log_err (LOGD_DEVICE, "(%s): error enslaving %s: %d (%s)",
- master_iface, slave_iface, errno, strerror (errno));
- } else
- ret = TRUE;
-
- close (fd);
-
- return ret;
-}
-
-/**
- * nm_system_bond_enslave:
- * @master_ifindex: master device interface index
- * @master_iface: master device interface name
- * @slave_ifindex: slave device interface index
- * @slave_iface: slave device interface name
- *
- * Enslaves the 'slave' to 'master. This function targets implementing a
- * generic interface to attaching all kinds of slaves to masters. Currently
- * only bonding is properly supported due to the backwards compatibility
- * function being bonding specific.
- *
- * The slave device needs to be down as a prerequisite.
- *
- * Returns: %TRUE on success, or %FALSE
- */
-gboolean
-nm_system_bond_enslave (gint master_ifindex,
- const char *master_iface,
- gint slave_ifindex,
- const char *slave_iface)
-{
- struct nl_sock *sock;
- int err;
-
- g_return_val_if_fail (master_ifindex > 0, FALSE);
- g_return_val_if_fail (master_iface != NULL, FALSE);
- g_return_val_if_fail (slave_ifindex > 0, FALSE);
- g_return_val_if_fail (slave_iface != NULL, FALSE);
-
- sock = nm_netlink_get_default_handle ();
-
- if (!(nm_system_iface_get_flags (master_ifindex) & IFF_MASTER)) {
- nm_log_err (LOGD_DEVICE, "(%s): interface is not a master", master_iface);
- return FALSE;
- }
-
- g_assert (!nm_system_iface_is_up (slave_ifindex));
-
- if (nm_system_iface_get_flags (slave_ifindex) & IFF_SLAVE) {
- struct rtnl_link *lk;
- int existing_master = -1;
-
- /* Get the ifindex of the existing master device */
- lk = nm_netlink_index_to_rtnl_link (slave_ifindex);
- g_warn_if_fail (lk != NULL);
- if (lk) {
- existing_master = rtnl_link_get_master (lk);
- rtnl_link_put (lk);
- }
-
- if (existing_master > 0) {
- /* Fail if the device is already a slave of a different master */
- if (existing_master != master_ifindex) {
- nm_log_err (LOGD_DEVICE, "(%s): already a slave of a different master",
- slave_iface);
- return FALSE;
- }
-
- nm_log_dbg (LOGD_DEVICE, "(%s): %s is already enslaved",
- master_iface, slave_iface);
- return TRUE;
- }
- }
-
- err = rtnl_link_bond_enslave_ifindex (sock, master_ifindex, slave_ifindex);
- if (err == -NLE_OPNOTSUPP)
- return nm_system_bond_compat_enslave (master_iface, slave_iface);
-
- if (err < 0) {
- nm_log_err (LOGD_DEVICE, "(%s): error enslaving %s: %d (%s)",
- master_iface, slave_iface, err, nl_geterror (err));
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-nm_system_bond_compat_release (const char *master_iface, const char *slave_iface)
-{
- struct ifreq ifr;
- int fd;
- gboolean ret = FALSE;
-
- memset (&ifr, 0, sizeof (ifr));
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return FALSE;
- }
-
- strncpy (ifr.ifr_name, master_iface, IFNAMSIZ);
- strncpy (ifr.ifr_slave, slave_iface, IFNAMSIZ);
-
- if (ioctl (fd, SIOCBONDRELEASE, &ifr) < 0 &&
- ioctl (fd, BOND_RELEASE_OLD, &ifr) < 0) {
- nm_log_err (LOGD_DEVICE, "(%s): error releasing slave %s: %d (%s)",
- master_iface, slave_iface, errno, strerror (errno));
- } else
- ret = TRUE;
-
- close (fd);
- return ret;
-}
-
-/**
- * nm_system_bond_release:
- * @master_ifindex: master device interface index
- * @master_iface: master device interface name
- * @slave_ifindex: slave device interface index
- * @slave_iface: slave device interface name
- *
- * Releases the 'slave' which is attached to 'master. This function targets
- * implementing a generic interface to releasing all kinds of slaves. Currently
- * only bonding is properly supported due to the backwards compatibility
- * function being bonding specific.
- *
- * Returns: %TRUE on success, or %FALSE
- */
-gboolean
-nm_system_bond_release (gint master_ifindex,
- const char *master_iface,
- gint slave_ifindex,
- const char *slave_iface)
-{
- struct nl_sock *sock;
- int err;
-
- g_return_val_if_fail (master_ifindex > 0, FALSE);
- g_return_val_if_fail (master_iface != NULL, FALSE);
- g_return_val_if_fail (slave_ifindex > 0, FALSE);
- g_return_val_if_fail (slave_iface != NULL, FALSE);
-
- sock = nm_netlink_get_default_handle ();
-
- /* Only release if this is actually a slave */
- if (!(nm_system_iface_get_flags (slave_ifindex) & IFF_SLAVE))
- return TRUE;
-
- err = rtnl_link_bond_release_ifindex (sock, slave_ifindex);
- if (err == -NLE_OPNOTSUPP)
- return nm_system_bond_compat_release (master_iface, slave_iface);
- else if (err < 0) {
- nm_log_err (LOGD_DEVICE, "(%s): error releasing slave %s: %d (%s)",
- master_iface, slave_iface, err, nl_geterror (err));
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- * nm_system_compat_get_iface_type:
- * @ifindex: interface index
- * @name: name of interface
- *
- * Lookup the type of an interface. At least one of @ifindex or @name must
- * be provided.
- *
- * Returns: Interface type (NM_IFACE_TYPE_*) or NM_IFACE_TYPE_UNSPEC.
- **/
-static int
-nm_system_compat_get_iface_type (int ifindex, const char *name)
-{
- int res = NM_IFACE_TYPE_UNSPEC;
- char *ifname = NULL, *path = NULL;
- struct vlan_ioctl_args ifv;
- struct ifreq ifr;
- struct ifbond ifb;
- struct stat st;
- int fd;
-
- g_return_val_if_fail (ifindex > 0 || name, NM_IFACE_TYPE_UNSPEC);
-
- if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- goto out;
- }
-
- if (!name) {
- g_assert (ifindex > 0);
- ifname = nm_netlink_index_to_iface (ifindex);
- }
-
- /* Check VLAN */
- memset (&ifv, 0, sizeof (ifv));
- ifv.cmd = GET_VLAN_VID_CMD;
- strncpy (ifv.device1, ifname ? ifname : name, sizeof (ifv.device1) - 1);
- if (ioctl (fd, SIOCGIFVLAN, &ifv) == 0) {
- res = NM_IFACE_TYPE_VLAN;
- goto out;
- }
-
- /* and bond */
- memset (&ifr, 0, sizeof (ifr));
- strncpy (ifr.ifr_name, ifname ? ifname : name, sizeof (ifr.ifr_name) - 1);
- memset (&ifb, 0, sizeof (ifb));
- ifr.ifr_data = (caddr_t) &ifb;
- if (ioctl (fd, SIOCBONDINFOQUERY, &ifr) == 0) {
- res = NM_IFACE_TYPE_BOND;
- goto out;
- }
-
- /* and bridge */
- path = g_strdup_printf ("/sys/class/net/%s/bridge", ifname ? ifname : name);
- if ((stat (path, &st) == 0) && S_ISDIR (st.st_mode)) {
- res = NM_IFACE_TYPE_BRIDGE;
- goto out;
- }
-
-out:
- g_free (path);
- close (fd);
- g_free (ifname);
- return res;
-}
-
-/**
- * nm_system_get_iface_type:
- * @ifindex: interface index
- * @name: name of interface
- *
- * Lookup the type of an interface. At least one of @ifindex or @name must
- * be provided.
- *
- * Returns: Interface type (NM_IFACE_TYPE_*) or NM_IFACE_TYPE_UNSPEC.
- **/
-int
-nm_system_get_iface_type (int ifindex, const char *name)
-{
- struct rtnl_link *result;
- struct nl_sock *nlh;
- char *type;
- int res = NM_IFACE_TYPE_UNSPEC;
- int err;
-
- g_return_val_if_fail (ifindex > 0 || name, NM_IFACE_TYPE_UNSPEC);
-
- nlh = nm_netlink_get_default_handle ();
- if (!nlh)
- goto out;
-
- /* Prefer interface indexes to names */
- err = rtnl_link_get_kernel (nlh, ifindex, ifindex <= 0 ? name : NULL, &result);
- if (err < 0) {
- if (err == -NLE_OPNOTSUPP)
- res = nm_system_compat_get_iface_type (ifindex, name);
- goto out;
- }
-
- type = rtnl_link_get_type (result);
-
- if (!g_strcmp0 (type, "bond"))
- res = NM_IFACE_TYPE_BOND;
- else if (!g_strcmp0 (type, "vlan"))
- res = NM_IFACE_TYPE_VLAN;
- else if (!g_strcmp0 (type, "bridge"))
- res = NM_IFACE_TYPE_BRIDGE;
- else if (!g_strcmp0 (type, "dummy"))
- res = NM_IFACE_TYPE_DUMMY;
-
- rtnl_link_put (result);
-out:
- return res;
-}
-
-/**
- * nm_system_get_iface_vlan_info:
- * @ifindex: the VLAN interface index
- * @out_parent_ifindex: on success, the interface index of the parent interface of
- * @iface
- * @out_vlan_id: on success, the VLAN ID of @iface
- *
- * Gets the VLAN parent interface name and VLAN ID.
- *
- * Returns: %TRUE if the interface is a VLAN device and no error occurred;
- * %FALSE if the interface was not a VLAN interface or an error occurred
- **/
-gboolean
-nm_system_get_iface_vlan_info (int ifindex,
- int *out_parent_ifindex,
- int *out_vlan_id)
-{
- struct nl_sock *nlh;
- struct rtnl_link *lk;
- struct nl_cache *cache = NULL;
- gboolean success = FALSE;
- int ret;
-
- if (nm_system_get_iface_type (ifindex, NULL) != NM_IFACE_TYPE_VLAN)
- return FALSE;
-
- nlh = nm_netlink_get_default_handle ();
- if (!nlh)
- return FALSE;
-
- ret = rtnl_link_alloc_cache (nlh, AF_UNSPEC, &cache);
- g_return_val_if_fail (ret == 0, FALSE);
- g_return_val_if_fail (cache != NULL, FALSE);
-
- lk = rtnl_link_get (cache, ifindex);
- if (lk) {
- if (out_parent_ifindex)
- *out_parent_ifindex = rtnl_link_get_link (lk);
- if (out_vlan_id)
- *out_vlan_id = rtnl_link_vlan_get_id (lk);
-
- rtnl_link_put (lk);
- success = TRUE;
- }
-
- nl_cache_free (cache);
- return success;
-}
-
-static gboolean
-nm_system_iface_compat_set_name (const char *old_name, const char *new_name)
-{
- int fd;
- struct ifreq ifr;
-
- if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -1;
- }
-
- memset (&ifr, 0, sizeof (struct ifreq));
- strncpy (ifr.ifr_name, old_name, sizeof (ifr.ifr_name));
- strncpy (ifr.ifr_newname, new_name, sizeof (ifr.ifr_newname));
-
- if (ioctl (fd, SIOCSIFNAME, &ifr) < 0) {
- nm_log_err (LOGD_DEVICE, "cann't change %s with %s.", old_name, new_name);
- close (fd);
- return FALSE;
- }
-
- close (fd);
- return TRUE;
-}
-
-static gboolean
-nm_system_iface_compat_set_vlan_name_type (int name_type)
-{
- int fd;
- struct vlan_ioctl_args if_request;
-
- if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -1;
- }
-
- memset (&if_request, 0, sizeof (struct vlan_ioctl_args));
- if_request.cmd = SET_VLAN_NAME_TYPE_CMD;
- if_request.u.name_type = name_type;
-
- if (ioctl (fd, SIOCSIFVLAN, &if_request) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't set name type.");
- close (fd);
- return FALSE;
- }
-
- close (fd);
- return TRUE;
-}
-
-static gboolean
-nm_system_iface_compat_add_vlan_device (const char *master, int vid)
-{
- int fd;
- struct vlan_ioctl_args if_request;
-
- g_return_val_if_fail (master, FALSE);
- g_return_val_if_fail (vid < 4096, FALSE);
-
- /*
- * use VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD as default,
- * we will overwrite it with rtnl_link_set_name() later.
- */
- if (!nm_system_iface_compat_set_vlan_name_type (VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD))
- return FALSE;
-
- if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -1;
- }
-
- memset (&if_request, 0, sizeof (struct vlan_ioctl_args));
- g_strlcpy (if_request.device1, master, sizeof (if_request.device1));
- if_request.cmd = ADD_VLAN_CMD;
- if_request.u.VID = vid;
-
- if (ioctl (fd, SIOCSIFVLAN, &if_request) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't add vlan device %s vid %d: %d.", master, vid, errno);
- close (fd);
- return FALSE;
- }
-
- close (fd);
- return TRUE;
-}
-
-static gboolean
-nm_system_iface_compat_rem_vlan_device (const char *iface)
-{
- int fd;
- struct vlan_ioctl_args if_request;
-
- if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -1;
- }
-
- memset (&if_request, 0, sizeof (struct vlan_ioctl_args));
- g_strlcpy (if_request.device1, iface, sizeof (if_request.device1));
- if_request.cmd = DEL_VLAN_CMD;
-
- if (ioctl (fd, SIOCSIFVLAN, &if_request) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't rem vlan device %s.", iface);
- close (fd);
- return FALSE;
- }
-
- close (fd);
- return TRUE;
-}
-
-static gboolean
-nm_system_iface_compat_add_vlan (NMConnection *connection,
- const char *iface,
- int master_ifindex)
-{
- NMSettingVlan *s_vlan;
- int vlan_id;
- guint32 vlan_flags = 0;
- guint32 num, i, from, to;
- int ifindex;
- struct rtnl_link *new_link = NULL;
- char *master = nm_netlink_index_to_iface (master_ifindex);
- int itype;
- gboolean created = FALSE;
-
- s_vlan = nm_connection_get_setting_vlan (connection);
- g_return_val_if_fail (s_vlan, FALSE);
-
- vlan_id = nm_setting_vlan_get_id (s_vlan);
-
- if (!iface) {
- iface = nm_connection_get_virtual_iface_name (connection);
- g_return_val_if_fail (iface != NULL, FALSE);
- }
-
- itype = nm_system_get_iface_type (-1, iface);
- if (itype == NM_IFACE_TYPE_UNSPEC) {
- char *name;
-
- /* Create the VLAN interface. Use VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD as
- * default and change the name later via nm_system_iface_compat_set_name().
- * The old ioctl-based VLAN kernel API has no ability to directly return
- * the new interface's name or index, so we have to create it with a
- * known name and do the rename dance instead.
- */
- if (!nm_system_iface_compat_add_vlan_device (master, vlan_id))
- return FALSE;
-
- /* And rename it to what the connection wants */
- name = nm_utils_new_vlan_name (master, vlan_id);
- if (strcmp (name, iface) != 0) {
- if (!nm_system_iface_compat_set_name (name, iface)) {
- nm_system_iface_compat_rem_vlan_device (name);
- g_free (name);
- return FALSE;
- }
- }
- g_free (name);
- created = TRUE;
- } else if (itype != NM_IFACE_TYPE_VLAN) {
- nm_log_err (LOGD_DEVICE, "(%s): already exists but is not a VLAN interface.", iface);
- return FALSE;
- } else {
- int tmp_vlan_id = -1, tmp_master_ifindex = -1;
-
- /* VLAN interface with this name already exists. Be a bit paranoid and
- * double-check the VLAN ID and parent ifindex.
- */
- ifindex = nm_netlink_iface_to_index (iface);
- if (ifindex <= 0)
- return FALSE;
-
- if (!nm_system_get_iface_vlan_info (ifindex, &tmp_master_ifindex, &tmp_vlan_id)) {
- nm_log_err (LOGD_DEVICE, "(%s): failed to get VLAN interface info.", iface);
- return FALSE;
- }
-
- if (tmp_master_ifindex != master_ifindex) {
- nm_log_err (LOGD_DEVICE, "(%s): master ifindex (%d) does match expected (%d).",
- iface, tmp_master_ifindex, master_ifindex);
- return FALSE;
- }
-
- if (tmp_vlan_id != vlan_id) {
- nm_log_err (LOGD_DEVICE, "(%s): VLAN ID %d does match expected ID %d.",
- iface, tmp_vlan_id, vlan_id);
- return FALSE;
- }
-
- nm_log_dbg (LOGD_DEVICE, "(%s): found existing VLAN interface.", iface);
- }
-
- ifindex = nm_netlink_iface_to_index (iface);
- if (ifindex <= 0)
- goto error;
-
- new_link = nm_netlink_index_to_rtnl_link (ifindex);
- if (!new_link)
- goto error;
-
- /* vconfig set_flag */
- vlan_flags = nm_setting_vlan_get_flags (s_vlan);
- if (vlan_flags) {
- if (rtnl_link_vlan_set_flags (new_link, vlan_flags))
- goto error_new_link;
- }
-
- /* vconfig set_ingress_map */
- num = nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_INGRESS_MAP);
- for (i = 0; i < num; i++) {
- if (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_INGRESS_MAP, i, &from, &to)) {
- if (rtnl_link_vlan_set_ingress_map (new_link, from, to))
- goto error_new_link;
- }
- }
-
- /* vconfig set_egress_map */
- num = nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_EGRESS_MAP);
- for (i = 0; i < num; i++) {
- if (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, i, &from, &to)) {
- if (rtnl_link_vlan_set_egress_map (new_link, from, to))
- goto error_new_link;
- }
- }
-
- rtnl_link_put (new_link);
- return TRUE;
-
-error_new_link:
- rtnl_link_put (new_link);
- /* fall through */
-
-error:
- if (created)
- nm_system_iface_compat_rem_vlan_device (iface);
- return FALSE;
-}
-
-/**
- * nm_system_add_vlan_iface:
- * @connection: the #NMConnection that describes the VLAN interface
- * @iface: the interface name of the new VLAN interface
- * @parent_ifindex: the interface index of the new VLAN interface's master
- * interface
- *
- * Add a VLAN device named @iface and specified in @connection.
- *
- * Returns: %TRUE on success, %FALSE on failure
- */
-gboolean
-nm_system_add_vlan_iface (NMConnection *connection,
- const char *iface,
- int parent_ifindex)
-{
- NMSettingVlan *s_vlan;
- int ret = -1;
- struct rtnl_link *new_link = NULL;
- struct nl_sock *nlh = NULL;
- guint32 vlan_id = 0;
- guint32 vlan_flags = 0;
- guint32 num, i, from, to;
-
- g_return_val_if_fail (parent_ifindex > 0, FALSE);
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, FALSE);
-
- s_vlan = nm_connection_get_setting_vlan (connection);
- g_return_val_if_fail (s_vlan, FALSE);
-
- vlan_id = nm_setting_vlan_get_id (s_vlan);
-
- if (!iface) {
- iface = nm_connection_get_virtual_iface_name (connection);
- g_return_val_if_fail (iface != NULL, FALSE);
- }
-
- new_link = rtnl_link_alloc ();
- if (!new_link) {
- g_warn_if_fail (new_link != NULL);
- goto out;
- }
-
- ret = rtnl_link_set_type (new_link, "vlan");
- if (ret == -NLE_OPNOTSUPP) {
- /*
- * There is no linbl3, try ioctl.
- */
- ret = -1;
- if (nm_system_iface_compat_add_vlan (connection, iface, parent_ifindex))
- ret = 0;
- goto out;
- }
-
- rtnl_link_set_link (new_link, parent_ifindex);
- rtnl_link_set_name (new_link, iface);
- rtnl_link_vlan_set_id (new_link, vlan_id);
-
- vlan_flags = nm_setting_vlan_get_flags (s_vlan);
- if (vlan_flags) {
- guint kernel_flags = 0;
-
- if (vlan_flags & NM_VLAN_FLAG_REORDER_HEADERS)
- kernel_flags |= VLAN_FLAG_REORDER_HDR;
- if (vlan_flags & NM_VLAN_FLAG_GVRP)
- kernel_flags |= VLAN_FLAG_GVRP;
- if (vlan_flags & NM_VLAN_FLAG_LOOSE_BINDING)
- kernel_flags |= VLAN_FLAG_LOOSE_BINDING;
-
- rtnl_link_vlan_set_flags (new_link, kernel_flags);
- }
-
- num = nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_INGRESS_MAP);
- for (i = 0; i < num; i++) {
- if (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_INGRESS_MAP, i, &from, &to))
- rtnl_link_vlan_set_ingress_map (new_link, (int) from, (int) to);
- }
-
- num = nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_EGRESS_MAP);
- for (i = 0; i < num; i++) {
- if (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, i, &from, &to))
- rtnl_link_vlan_set_egress_map (new_link, (int) from, (int) to);
- }
-
- ret = rtnl_link_add (nlh, new_link, NLM_F_CREATE);
-
-out:
- if (new_link)
- rtnl_link_put (new_link);
- return (ret == 0);
-}
-
-/**
- * nm_system_del_vlan_iface:
- * @iface: the interface name
- *
- * Delete a VLAN interface specified by @iface.
- *
- * Returns: %TRUE on success, or %FALSE
- */
-gboolean
-nm_system_del_vlan_iface (const char *iface)
-{
- int ret = 0;
- struct nl_sock *nlh = NULL;
- struct nl_cache *cache = NULL;
- struct rtnl_link *new_link = NULL;
- int itype;
-
- g_return_val_if_fail (iface != NULL, FALSE);
-
- itype = nm_system_get_iface_type (-1, iface);
- g_return_val_if_fail (itype == NM_IFACE_TYPE_VLAN, FALSE);
-
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, FALSE);
-
- ret = rtnl_link_alloc_cache (nlh, AF_UNSPEC, &cache);
- g_return_val_if_fail (ret == 0, FALSE);
- g_return_val_if_fail (cache != NULL, FALSE);
-
- new_link = rtnl_link_get_by_name (cache, iface);
- if (new_link) {
- ret = rtnl_link_delete (nlh, new_link);
- if (ret == -NLE_OPNOTSUPP) {
- /*
- * There is no linbl3, try ioctl.
- */
- ret = -1;
- if (nm_system_iface_compat_rem_vlan_device (iface))
- ret = 0;
- }
- }
-
- rtnl_link_put (new_link);
- nl_cache_free (cache);
- return (ret == 0) ? TRUE : FALSE;
-}
-
-static int
-_bridge_create_compat (const char *iface)
-{
- int ret = 0, fd;
-
- if ((fd = socket (AF_LOCAL, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -EBADF;
- }
-
- if (ioctl (fd, SIOCBRADDBR, iface) < 0)
- ret = -errno;
-
- close (fd);
- return ret;
-}
-
-/**
- * nm_system_create_bridge:
- * @iface: Name bridging device to create
- * @out_exists: on return, %TRUE if the bridge already exists
- *
- * Creates a new bridging device in the kernel. If a bridging device with
- * the specified name already exists, it is reused and no error is returned,
- * but @out_exists is set to %TRUE.
- *
- * Returns: %TRUE on success, %FALSE on error.
- */
-gboolean
-nm_system_create_bridge (const char *iface, gboolean *out_exists)
-{
- int err;
-
- /* FIXME: use netlink */
- err = _bridge_create_compat (iface);
- if (err < 0 && err != -EEXIST) {
- nm_log_err (LOGD_DEVICE, "(%s): error while adding bridge: %s",
- iface, strerror (-err));
- return FALSE;
- }
- if (out_exists && err == -EEXIST)
- *out_exists = TRUE;
- return TRUE;
-}
-
-static int
-_bridge_del_compat (const char *iface)
-{
- int ret = 0, fd;
-
- if ((fd = socket (AF_LOCAL, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -EBADF;
- }
-
- if (ioctl (fd, SIOCBRDELBR, iface) < 0)
- ret = -errno;
-
- close (fd);
- return ret;
-}
-
-/**
- * nm_system_del_bridge:
- * @iface: Name of bridging device to delete
- *
- * Deletes the specified bridging device in the kernel.
- *
- * Returns: %TRUE on success, %FALSE on error.
- */
-gboolean
-nm_system_del_bridge (const char *iface)
-{
- int err;
-
- /* FIXME: use netlink */
- err = _bridge_del_compat (iface);
- if (err < 0 && err != -ENXIO) {
- nm_log_err (LOGD_DEVICE, "(%s): error while deleting bridge: %s ",
- iface, strerror (-err));
- return FALSE;
- }
- return TRUE;
-}
-
-static int
-_bridge_attach_compat (int master_ifindex,
- const char *master_iface,
- int slave_ifindex,
- const char *slave_iface)
-{
- int ret = 0, fd;
- struct ifreq ifr;
-
- if ((fd = socket (AF_LOCAL, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -EBADF;
- }
-
- memset (&ifr, 0, sizeof (ifr));
- strncpy (ifr.ifr_name, master_iface, IFNAMSIZ);
- ifr.ifr_ifindex = slave_ifindex;
- if (ioctl (fd, SIOCBRADDIF, &ifr) < 0)
- ret = -errno;
-
- close (fd);
- return ret;
-}
-
-static int
-_bridge_detach_compat (int master_ifindex,
- const char *master_iface,
- int slave_ifindex,
- const char *slave_iface)
-{
- int ret = 0, fd;
- struct ifreq ifr;
-
- if ((fd = socket (AF_LOCAL, SOCK_STREAM, 0)) < 0) {
- nm_log_err (LOGD_DEVICE, "couldn't open control socket.");
- return -EBADF;
- }
-
- memset (&ifr, 0, sizeof(ifr));
- strncpy (ifr.ifr_name, master_iface, IFNAMSIZ);
- ifr.ifr_ifindex = slave_ifindex;
- if (ioctl (fd, SIOCBRDELIF, &ifr) < 0)
- ret = -errno;
-
- close (fd);
- return ret;
-}
-
-/**
- * nm_system_bridge_attach:
- * @master_ifindex: master device interface index
- * @master_iface: master device interface name
- * @slave_ifindex: slave device interface index
- * @slave_iface: slave device interface name
- *
- * Attaches interface 'slave' to bridge 'master'
- *
- * Returns: %TRUE on success, or %FALSE
- */
-gboolean
-nm_system_bridge_attach (int master_ifindex,
- const char *master_iface,
- int slave_ifindex,
- const char *slave_iface)
-{
- char *mif = NULL, *sif = NULL;
- int err = -1;
-
- g_return_val_if_fail (master_ifindex >= 0, FALSE);
- g_return_val_if_fail (slave_ifindex >= 0, FALSE);
-
- if (!master_iface) {
- mif = nm_netlink_index_to_iface (master_ifindex);
- if (mif == NULL) {
- nm_log_err (LOGD_DEVICE, "interface name lookup failed for index %d", master_ifindex);
- goto out;
- }
- }
-
- if (!slave_ifindex) {
- sif = nm_netlink_index_to_iface (slave_ifindex);
- if (sif == NULL) {
- nm_log_err (LOGD_DEVICE, "interface name lookup failed for index %d", slave_ifindex);
- goto out;
- }
- }
-
- /* FIXME: long term plan is to use netlink for this */
- err = _bridge_attach_compat (master_ifindex,
- mif ? mif : master_iface,
- slave_ifindex,
- sif ? sif : slave_iface);
- if (err < 0) {
- if (err == -EBUSY) {
- /* Interface already attached to the given bridge */
- err = 0;
- } else {
- nm_log_err (LOGD_DEVICE, "(%s): failed to attach slave %s: %s",
- master_iface, slave_iface, strerror (-err));
- }
- }
-
-out:
- g_free (sif);
- g_free (mif);
- return err == 0 ? TRUE : FALSE;
-}
-
-/**
- * nm_system_bridge_detach:
- * @master_ifindex: master device interface index
- * @master_iface: master device interface name
- * @slave_ifindex: slave device interface index
- * @slave_iface: slave device interface name
- *
- * Detaches the interface 'slave' from the bridge 'master'.
- *
- * Returns: %TRUE on success, or %FALSE
- */
-gboolean
-nm_system_bridge_detach (int master_ifindex,
- const char *master_iface,
- int slave_ifindex,
- const char *slave_iface)
-{
- char *mif = NULL, *sif = NULL;
- int err = -1;
-
- g_return_val_if_fail (master_ifindex >= 0, FALSE);
- g_return_val_if_fail (slave_ifindex >= 0, FALSE);
-
- if (!master_iface) {
- mif = nm_netlink_index_to_iface (master_ifindex);
- if (mif == NULL) {
- nm_log_err (LOGD_DEVICE, "interface name lookup failed for index %d", master_ifindex);
- goto out;
- }
- }
-
- if (!slave_ifindex) {
- sif = nm_netlink_index_to_iface (slave_ifindex);
- if (sif == NULL) {
- nm_log_err (LOGD_DEVICE, "interface name lookup failed for index %d", slave_ifindex);
- goto out;
- }
- }
-
- /* FIXME: long term plan is to use netlink for this */
- err = _bridge_detach_compat (master_ifindex,
- mif ? mif : master_iface,
- slave_ifindex,
- sif ? sif : slave_iface);
- /* Kernel doesn't return an error detaching an already-detached interface */
- if (err < 0) {
- nm_log_err (LOGD_DEVICE, "(%s): failed to detach slave %s: %s",
- master_iface, slave_iface, strerror (-err));
- }
-
-out:
- g_free (mif);
- g_free (sif);
- return err == 0 ? TRUE : FALSE;
-}
diff --git a/src/nm-system.h b/src/nm-system.h
deleted file mode 100644
index 632786d3d..000000000
--- a/src/nm-system.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2004 - 2010 Red Hat, Inc.
- * Copyright (C) 2005 - 2008 Novell, Inc.
- */
-
-#ifndef NETWORK_MANAGER_SYSTEM_H
-#define NETWORK_MANAGER_SYSTEM_H
-
-#include <netlink/route/rtnl.h>
-#include <netlink/route/route.h>
-
-#include <net/ethernet.h>
-
-#include <glib.h>
-#include "nm-device.h"
-#include "nm-ip4-config.h"
-#include "nm-setting-bond.h"
-#include "nm-setting-vlan.h"
-
-gboolean nm_system_iface_flush_routes (int ifindex, int family);
-
-gboolean nm_system_replace_default_ip4_route (int ifindex,
- guint32 gw,
- guint32 mss);
-
-gboolean nm_system_replace_default_ip6_route (int ifindex,
- const struct in6_addr *gw);
-
-gboolean nm_system_replace_default_ip4_route_vpn (int ifindex,
- guint32 ext_gw,
- guint32 int_gw,
- guint32 mss,
- int parent_ifindex,
- guint32 parent_mss);
-
-gboolean nm_system_replace_default_ip6_route_vpn (int ifindex,
- const struct in6_addr *ext_gw,
- const struct in6_addr *int_gw,
- guint32 mss,
- int parent_ifindex,
- guint32 parent_mss);
-
-struct rtnl_route *nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device,
- guint32 vpn_gw);
-struct rtnl_route *nm_system_add_ip6_vpn_gateway_route (NMDevice *parent_device,
- const struct in6_addr *vpn_gw);
-
-gboolean nm_system_iface_flush_addresses (int ifindex, int family);
-
-gboolean nm_system_apply_ip4_config (int ifindex,
- NMIP4Config *config,
- int priority,
- NMIP4ConfigCompareFlags flags);
-
-int nm_system_set_ip6_route (int ifindex,
- const struct in6_addr *ip6_dest,
- guint32 ip6_prefix,
- const struct in6_addr *ip6_gateway,
- guint32 metric,
- int mss,
- int protocol,
- int table,
- struct rtnl_route **out_route);
-
-gboolean nm_system_apply_ip6_config (int ifindex,
- NMIP6Config *config,
- int priority,
- NMIP6ConfigCompareFlags flags);
-
-gboolean nm_system_iface_set_up (int ifindex,
- gboolean up,
- gboolean *no_firmware);
-
-guint32 nm_system_iface_get_flags (int ifindex);
-gboolean nm_system_iface_is_up (int ifindex);
-
-gboolean nm_system_iface_set_mtu (int ifindex, guint32 mtu);
-
-gboolean nm_system_iface_set_mac (int ifindex, const struct ether_addr *mac);
-
-gboolean nm_system_iface_set_arp (int ifindex, gboolean arp);
-
-gboolean nm_system_apply_bonding_config (const char *iface,
- NMSettingBond *s_bond);
-gboolean nm_system_add_bonding_master (const char *iface);
-
-gboolean nm_system_bond_enslave (gint master_ifindex,
- const char *master_iface,
- gint slave_ifindex,
- const char *slave_iface);
-gboolean nm_system_bond_release (gint master_ifindex,
- const char *master_iface,
- gint slave_ifindex,
- const char *slave_iface);
-
-enum {
- NM_IFACE_TYPE_UNSPEC = 0,
- NM_IFACE_TYPE_BOND,
- NM_IFACE_TYPE_VLAN,
- NM_IFACE_TYPE_BRIDGE,
- NM_IFACE_TYPE_DUMMY
-};
-
-int nm_system_get_iface_type (int ifindex, const char *name);
-
-gboolean nm_system_get_iface_vlan_info (int ifindex,
- int *out_parent_ifindex,
- int *out_vlan_id);
-
-gboolean nm_system_add_vlan_iface (NMConnection *connection,
- const char *iface,
- int parent_ifindex);
-gboolean nm_system_del_vlan_iface (const char *iface);
-
-gboolean nm_system_create_bridge (const char *iface, gboolean *out_exists);
-gboolean nm_system_del_bridge (const char *iface);
-
-gboolean nm_system_bridge_attach (int master_ifindex,
- const char *master_iface,
- int slave_ifindex,
- const char *slave_iface);
-gboolean nm_system_bridge_detach (int master_ifindex,
- const char *master_iface,
- int slave_ifindex,
- const char *slave_iface);
-
-#endif
diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c
deleted file mode 100644
index 7e8674066..000000000
--- a/src/nm-udev-manager.c
+++ /dev/null
@@ -1,674 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
- */
-
-#include <config.h>
-#include <net/if_arp.h>
-
-#include <gmodule.h>
-#include <gudev/gudev.h>
-
-#include "nm-udev-manager.h"
-#include "nm-marshal.h"
-#include "nm-logging.h"
-#include "nm-system.h"
-
-typedef struct {
- GUdevClient *client;
-
- /* Authoritative rfkill state (RFKILL_* enum) */
- RfKillState rfkill_states[RFKILL_TYPE_MAX];
- GSList *killswitches;
-
- gboolean disposed;
-} NMUdevManagerPrivate;
-
-#define NM_UDEV_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_UDEV_MANAGER, NMUdevManagerPrivate))
-
-G_DEFINE_TYPE (NMUdevManager, nm_udev_manager, G_TYPE_OBJECT)
-
-enum {
- DEVICE_ADDED,
- DEVICE_REMOVED,
- RFKILL_CHANGED,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-typedef struct {
- char *name;
- guint64 seqnum;
- char *path;
- char *driver;
- RfKillType rtype;
- gint state;
- gboolean platform;
-} Killswitch;
-
-RfKillState
-nm_udev_manager_get_rfkill_state (NMUdevManager *self, RfKillType rtype)
-{
- g_return_val_if_fail (self != NULL, RFKILL_UNBLOCKED);
- g_return_val_if_fail (rtype < RFKILL_TYPE_MAX, RFKILL_UNBLOCKED);
-
- return NM_UDEV_MANAGER_GET_PRIVATE (self)->rfkill_states[rtype];
-}
-
-static const char *
-rfkill_type_to_desc (RfKillType rtype)
-{
- if (rtype == 0)
- return "WiFi";
- else if (rtype == 1)
- return "WWAN";
- else if (rtype == 2)
- return "WiMAX";
- return "unknown";
-}
-
-static const char *
-rfkill_state_to_desc (RfKillState rstate)
-{
- if (rstate == 0)
- return "unblocked";
- else if (rstate == 1)
- return "soft-blocked";
- else if (rstate == 2)
- return "hard-blocked";
- return "unknown";
-}
-
-static Killswitch *
-killswitch_new (GUdevDevice *device, RfKillType rtype)
-{
- Killswitch *ks;
- GUdevDevice *parent = NULL, *grandparent = NULL;
- const char *driver, *subsys, *parent_subsys = NULL;
-
- ks = g_malloc0 (sizeof (Killswitch));
- ks->name = g_strdup (g_udev_device_get_name (device));
- ks->seqnum = g_udev_device_get_seqnum (device);
- ks->path = g_strdup (g_udev_device_get_sysfs_path (device));
- ks->rtype = rtype;
-
- driver = g_udev_device_get_property (device, "DRIVER");
- subsys = g_udev_device_get_subsystem (device);
-
- /* Check parent for various attributes */
- parent = g_udev_device_get_parent (device);
- if (parent) {
- parent_subsys = g_udev_device_get_subsystem (parent);
- if (!driver)
- driver = g_udev_device_get_property (parent, "DRIVER");
- if (!driver) {
- /* Sigh; try the grandparent */
- grandparent = g_udev_device_get_parent (parent);
- if (grandparent)
- driver = g_udev_device_get_property (grandparent, "DRIVER");
- }
- }
-
- if (!driver)
- driver = "(unknown)";
- ks->driver = g_strdup (driver);
-
- if ( g_strcmp0 (subsys, "platform") == 0
- || g_strcmp0 (parent_subsys, "platform") == 0
- || g_strcmp0 (subsys, "acpi") == 0
- || g_strcmp0 (parent_subsys, "acpi") == 0)
- ks->platform = TRUE;
-
- if (grandparent)
- g_object_unref (grandparent);
- if (parent)
- g_object_unref (parent);
- return ks;
-}
-
-static void
-killswitch_destroy (Killswitch *ks)
-{
- g_return_if_fail (ks != NULL);
-
- g_free (ks->name);
- g_free (ks->path);
- g_free (ks->driver);
- memset (ks, 0, sizeof (Killswitch));
- g_free (ks);
-}
-
-NMUdevManager *
-nm_udev_manager_new (void)
-{
- return NM_UDEV_MANAGER (g_object_new (NM_TYPE_UDEV_MANAGER, NULL));
-}
-
-static RfKillState
-sysfs_state_to_nm_state (gint sysfs_state)
-{
- switch (sysfs_state) {
- case 0:
- return RFKILL_SOFT_BLOCKED;
- case 1:
- return RFKILL_UNBLOCKED;
- case 2:
- return RFKILL_HARD_BLOCKED;
- default:
- nm_log_warn (LOGD_RFKILL, "unhandled rfkill state %d", sysfs_state);
- break;
- }
- return RFKILL_UNBLOCKED;
-}
-
-static void
-recheck_killswitches (NMUdevManager *self)
-{
- NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
- GSList *iter;
- RfKillState poll_states[RFKILL_TYPE_MAX];
- RfKillState platform_states[RFKILL_TYPE_MAX];
- gboolean platform_checked[RFKILL_TYPE_MAX];
- int i;
-
- /* Default state is unblocked */
- for (i = 0; i < RFKILL_TYPE_MAX; i++) {
- poll_states[i] = RFKILL_UNBLOCKED;
- platform_states[i] = RFKILL_UNBLOCKED;
- platform_checked[i] = FALSE;
- }
-
- /* Poll the states of all killswitches */
- for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
- Killswitch *ks = iter->data;
- GUdevDevice *device;
- RfKillState dev_state;
- int sysfs_state;
-
- device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name);
- if (device) {
- sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE");
- dev_state = sysfs_state_to_nm_state (sysfs_state);
-
- nm_log_dbg (LOGD_RFKILL, "%s rfkill%s switch %s state now %d/%u",
- rfkill_type_to_desc (ks->rtype),
- ks->platform ? " platform" : "",
- ks->name,
- sysfs_state,
- dev_state);
-
- if (ks->platform == FALSE) {
- if (dev_state > poll_states[ks->rtype])
- poll_states[ks->rtype] = dev_state;
- } else {
- platform_checked[ks->rtype] = TRUE;
- if (dev_state > platform_states[ks->rtype])
- platform_states[ks->rtype] = dev_state;
- }
- g_object_unref (device);
- }
- }
-
- /* Log and emit change signal for final rfkill states */
- for (i = 0; i < RFKILL_TYPE_MAX; i++) {
- if (platform_checked[i] == TRUE) {
- /* blocked platform switch state overrides device state, otherwise
- * let the device state stand. (bgo #655773)
- */
- if (platform_states[i] != RFKILL_UNBLOCKED)
- poll_states[i] = platform_states[i];
- }
-
- if (poll_states[i] != priv->rfkill_states[i]) {
- nm_log_dbg (LOGD_RFKILL, "%s rfkill state now '%s'",
- rfkill_type_to_desc (i),
- rfkill_state_to_desc (poll_states[i]));
-
- priv->rfkill_states[i] = poll_states[i];
- g_signal_emit (self, signals[RFKILL_CHANGED], 0, i, priv->rfkill_states[i]);
- }
- }
-}
-
-static Killswitch *
-killswitch_find_by_name (NMUdevManager *self, const char *name)
-{
- NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
- GSList *iter;
-
- g_return_val_if_fail (name != NULL, NULL);
-
- for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
- Killswitch *candidate = iter->data;
-
- if (!strcmp (name, candidate->name))
- return candidate;
- }
- return NULL;
-}
-
-static const RfKillType
-rfkill_type_to_enum (const char *str)
-{
- g_return_val_if_fail (str != NULL, RFKILL_TYPE_UNKNOWN);
-
- if (!strcmp (str, "wlan"))
- return RFKILL_TYPE_WLAN;
- else if (!strcmp (str, "wwan"))
- return RFKILL_TYPE_WWAN;
- else if (!strcmp (str, "wimax"))
- return RFKILL_TYPE_WIMAX;
-
- return RFKILL_TYPE_UNKNOWN;
-}
-
-static void
-add_one_killswitch (NMUdevManager *self, GUdevDevice *device)
-{
- NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
- const char *str_type;
- RfKillType rtype;
- Killswitch *ks;
-
- str_type = g_udev_device_get_property (device, "RFKILL_TYPE");
- rtype = rfkill_type_to_enum (str_type);
- if (rtype == RFKILL_TYPE_UNKNOWN)
- return;
-
- ks = killswitch_new (device, rtype);
- priv->killswitches = g_slist_prepend (priv->killswitches, ks);
-
- nm_log_info (LOGD_RFKILL, "%s: found %s radio killswitch (at %s) (%sdriver %s)",
- ks->name,
- rfkill_type_to_desc (rtype),
- ks->path,
- ks->platform ? "platform " : "",
- ks->driver ? ks->driver : "<unknown>");
-}
-
-static void
-rfkill_add (NMUdevManager *self, GUdevDevice *device)
-{
- const char *name;
-
- g_return_if_fail (device != NULL);
- name = g_udev_device_get_name (device);
- g_return_if_fail (name != NULL);
-
- if (!killswitch_find_by_name (self, name))
- add_one_killswitch (self, device);
-}
-
-static void
-rfkill_remove (NMUdevManager *self,
- GUdevDevice *device)
-{
- NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
- GSList *iter;
- const char *name;
-
- g_return_if_fail (device != NULL);
- name = g_udev_device_get_name (device);
- g_return_if_fail (name != NULL);
-
- for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
- Killswitch *ks = iter->data;
-
- if (!strcmp (ks->name, name)) {
- nm_log_info (LOGD_RFKILL, "radio killswitch %s disappeared", ks->path);
- priv->killswitches = g_slist_remove (priv->killswitches, ks);
- killswitch_destroy (ks);
- break;
- }
- }
-}
-
-static gboolean
-dev_get_attrs (GUdevDevice *udev_device,
- const char **out_ifname,
- const char **out_path,
- char **out_driver,
- int *out_ifindex)
-{
- GUdevDevice *parent = NULL, *grandparent = NULL;
- const char *ifname, *driver, *path, *subsys;
- gint ifindex = -1;
- gboolean success = FALSE;
-
- g_return_val_if_fail (udev_device != NULL, FALSE);
- g_return_val_if_fail (out_ifname != NULL, FALSE);
- g_return_val_if_fail (out_path != NULL, FALSE);
- g_return_val_if_fail (out_driver != NULL, FALSE);
- g_return_val_if_fail (out_ifindex != NULL, FALSE);
-
- ifname = g_udev_device_get_name (udev_device);
- if (!ifname) {
- nm_log_dbg (LOGD_HW, "failed to get device's interface");
- return FALSE;
- }
-
- path = g_udev_device_get_sysfs_path (udev_device);
- if (!path) {
- nm_log_warn (LOGD_HW, "couldn't determine device path; ignoring...");
- return FALSE;
- }
-
- driver = g_udev_device_get_driver (udev_device);
- if (!driver) {
- /* Try the parent */
- parent = g_udev_device_get_parent (udev_device);
- if (parent) {
- driver = g_udev_device_get_driver (parent);
- if (!driver) {
- /* try the grandparent if it's an ibmebus device or if the
- * subsys is NULL which usually indicates some sort of
- * platform device like a 'gadget' net interface.
- */
- subsys = g_udev_device_get_subsystem (parent);
- if ( (g_strcmp0 (subsys, "ibmebus") == 0)
- || (subsys == NULL)) {
- grandparent = g_udev_device_get_parent (parent);
- if (grandparent)
- driver = g_udev_device_get_driver (grandparent);
- }
- }
- }
- }
-
- if (g_udev_device_get_sysfs_attr (udev_device, "ifindex"))
- ifindex = g_udev_device_get_sysfs_attr_as_int (udev_device, "ifindex");
-
- if (!driver) {
- switch (nm_system_get_iface_type (ifindex, ifname)) {
- case NM_IFACE_TYPE_BOND:
- driver = "bonding";
- break;
- case NM_IFACE_TYPE_BRIDGE:
- driver = "bridge";
- break;
- case NM_IFACE_TYPE_VLAN:
- driver = "8021q";
- break;
- default:
- if (g_str_has_prefix (ifname, "easytether"))
- driver = "easytether";
- break;
- }
-
- if (!driver) {
- nm_log_warn (LOGD_HW, "%s: couldn't determine device driver; ignoring...", path);
- goto out;
- }
- }
-
- *out_ifname = ifname;
- *out_path = path;
- *out_driver = g_strdup (driver);
- *out_ifindex = ifindex;
- success = TRUE;
-
-out:
- if (grandparent)
- g_object_unref (grandparent);
- if (parent)
- g_object_unref (parent);
-
- return success;
-}
-
-static void
-net_add (NMUdevManager *self, GUdevDevice *udev_device)
-{
- gint ifindex = -1;
- gint etype;
- const char *ifname = NULL, *path = NULL, *tmp;
- char *driver = NULL;
- gboolean is_ctc;
-
- g_return_if_fail (udev_device != NULL);
-
- if (!dev_get_attrs (udev_device, &ifname, &path, &driver, &ifindex))
- return;
-
- if (ifindex < 0) {
- nm_log_warn (LOGD_HW, "%s: device had invalid ifindex %d; ignoring...", path, ifindex);
- goto out;
- }
-
- etype = g_udev_device_get_sysfs_attr_as_int (udev_device, "type");
- is_ctc = (strncmp (ifname, "ctc", 3) == 0) && (etype == 256);
-
- /* Ignore devices that don't report Ethernet encapsulation, except for
- * s390 CTC-type devices that report 256 for some reason.
- * FIXME: use something other than interface name to detect CTC here.
- */
- if ((etype != ARPHRD_ETHER) && (etype != ARPHRD_INFINIBAND) && (is_ctc == FALSE)) {
- nm_log_dbg (LOGD_HW, "(%s): ignoring interface with type %d", ifname, etype);
- goto out;
- }
-
- /* Not all ethernet devices are immediately usable; newer mobile broadband
- * devices (Ericsson, Option, Sierra) require setup on the tty before the
- * ethernet device is usable. 2.6.33 and later kernels set the 'DEVTYPE'
- * uevent variable which we can use to ignore the interface as a NMDevice
- * subclass. ModemManager will pick it up though and so we'll handle it
- * through the mobile broadband stuff.
- */
- tmp = g_udev_device_get_property (udev_device, "DEVTYPE");
- if (g_strcmp0 (tmp, "wwan") == 0) {
- nm_log_dbg (LOGD_HW, "(%s): ignoring interface with devtype '%s'", ifname, tmp);
- goto out;
- }
-
- g_signal_emit (self, signals[DEVICE_ADDED], 0, udev_device, ifname, path, driver, ifindex);
-
-out:
- g_free (driver);
-}
-
-static void
-net_remove (NMUdevManager *self, GUdevDevice *device)
-{
- g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
-}
-
-static void
-adsl_add (NMUdevManager *self, GUdevDevice *udev_device)
-{
- gint ifindex = -1;
- const char *ifname = NULL, *path = NULL;
- char *driver = NULL;
-
- g_return_if_fail (udev_device != NULL);
-
- nm_log_dbg (LOGD_HW, "adsl_add: ATM Device detected from udev. Adding ..");
-
- if (dev_get_attrs (udev_device, &ifname, &path, &driver, &ifindex))
- g_signal_emit (self, signals[DEVICE_ADDED], 0, udev_device, ifname, path, driver, ifindex);
- g_free (driver);
-}
-
-static void
-adsl_remove (NMUdevManager *self, GUdevDevice *device)
-{
- nm_log_dbg (LOGD_HW, "adsl_remove: Removing ATM Device");
-
- g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
-}
-
-void
-nm_udev_manager_query_devices (NMUdevManager *self)
-{
- NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
- GUdevEnumerator *enumerator;
- GList *devices, *iter;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (NM_IS_UDEV_MANAGER (self));
-
- enumerator = g_udev_enumerator_new (priv->client);
- g_udev_enumerator_add_match_subsystem (enumerator, "net");
- g_udev_enumerator_add_match_is_initialized (enumerator);
-
- devices = g_udev_enumerator_execute (enumerator);
- for (iter = devices; iter; iter = g_list_next (iter)) {
- net_add (self, G_UDEV_DEVICE (iter->data));
- g_object_unref (G_UDEV_DEVICE (iter->data));
- }
- g_list_free (devices);
- g_object_unref (enumerator);
-
-
- enumerator = g_udev_enumerator_new (priv->client);
- g_udev_enumerator_add_match_subsystem (enumerator, "atm");
- g_udev_enumerator_add_match_is_initialized (enumerator);
- devices = g_udev_enumerator_execute (enumerator);
- for (iter = devices; iter; iter = g_list_next (iter)) {
- adsl_add (self, G_UDEV_DEVICE (iter->data));
- g_object_unref (G_UDEV_DEVICE (iter->data));
- }
- g_list_free (devices);
- g_object_unref (enumerator);
-}
-
-static void
-handle_uevent (GUdevClient *client,
- const char *action,
- GUdevDevice *device,
- gpointer user_data)
-{
- NMUdevManager *self = NM_UDEV_MANAGER (user_data);
- const char *subsys;
-
- g_return_if_fail (action != NULL);
-
- /* A bit paranoid */
- subsys = g_udev_device_get_subsystem (device);
- g_return_if_fail (subsys != NULL);
-
- nm_log_dbg (LOGD_HW, "UDEV event: action '%s' subsys '%s' device '%s'",
- action, subsys, g_udev_device_get_name (device));
-
- g_return_if_fail (!strcmp (subsys, "rfkill") || !strcmp (subsys, "net") ||
- !strcmp (subsys, "atm"));
-
- if (!strcmp (action, "add")) {
- if (!strcmp (subsys, "rfkill"))
- rfkill_add (self, device);
- else if (!strcmp (subsys, "net"))
- net_add (self, device);
- else if (!strcmp (subsys, "atm"))
- adsl_add (self, device);
- } else if (!strcmp (action, "remove")) {
- if (!strcmp (subsys, "rfkill"))
- rfkill_remove (self, device);
- else if (!strcmp (subsys, "net"))
- net_remove (self, device);
- else if (!strcmp (subsys, "atm"))
- adsl_remove (self, device);
- }
-
- recheck_killswitches (self);
-}
-
-static void
-nm_udev_manager_init (NMUdevManager *self)
-{
- NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
- const char *subsys[4] = { "rfkill", "net", "atm", NULL };
- GList *switches, *iter;
- guint32 i;
-
- for (i = 0; i < RFKILL_TYPE_MAX; i++)
- priv->rfkill_states[i] = RFKILL_UNBLOCKED;
-
- priv->client = g_udev_client_new (subsys);
- g_signal_connect (priv->client, "uevent", G_CALLBACK (handle_uevent), self);
-
- switches = g_udev_client_query_by_subsystem (priv->client, "rfkill");
- for (iter = switches; iter; iter = g_list_next (iter)) {
- add_one_killswitch (self, G_UDEV_DEVICE (iter->data));
- g_object_unref (G_UDEV_DEVICE (iter->data));
- }
- g_list_free (switches);
-
- recheck_killswitches (self);
-}
-
-static void
-dispose (GObject *object)
-{
- NMUdevManager *self = NM_UDEV_MANAGER (object);
- NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
-
- if (priv->disposed) {
- G_OBJECT_CLASS (nm_udev_manager_parent_class)->dispose (object);
- return;
- }
- priv->disposed = TRUE;
-
- g_object_unref (priv->client);
-
- g_slist_foreach (priv->killswitches, (GFunc) killswitch_destroy, NULL);
- g_slist_free (priv->killswitches);
-
- G_OBJECT_CLASS (nm_udev_manager_parent_class)->dispose (object);
-}
-
-static void
-nm_udev_manager_class_init (NMUdevManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (NMUdevManagerPrivate));
-
- /* virtual methods */
- object_class->dispose = dispose;
-
- /* Signals */
- signals[DEVICE_ADDED] =
- g_signal_new ("device-added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMUdevManagerClass, device_added),
- NULL, NULL,
- _nm_marshal_VOID__POINTER_POINTER_POINTER_POINTER_INT,
- G_TYPE_NONE, 5, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_INT);
-
- signals[DEVICE_REMOVED] =
- g_signal_new ("device-removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMUdevManagerClass, device_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- signals[RFKILL_CHANGED] =
- g_signal_new ("rfkill-changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMUdevManagerClass, rfkill_changed),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
- G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
-}
-
diff --git a/src/nm-udev-manager.h b/src/nm-udev-manager.h
deleted file mode 100644
index 2c982e6d0..000000000
--- a/src/nm-udev-manager.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
- */
-
-#ifndef NM_UDEV_MANAGER_H
-#define NM_UDEV_MANAGER_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include <gudev/gudev.h>
-
-#include "nm-rfkill.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_UDEV_MANAGER (nm_udev_manager_get_type ())
-#define NM_UDEV_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_UDEV_MANAGER, NMUdevManager))
-#define NM_UDEV_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_UDEV_MANAGER, NMUdevManagerClass))
-#define NM_IS_UDEV_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_UDEV_MANAGER))
-#define NM_IS_UDEV_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_UDEV_MANAGER))
-#define NM_UDEV_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_UDEV_MANAGER, NMUdevManagerClass))
-
-typedef struct {
- GObject parent;
-} NMUdevManager;
-
-typedef GObject *(*NMDeviceCreatorFn) (NMUdevManager *manager,
- GUdevDevice *device,
- gboolean sleeping);
-
-typedef struct {
- GObjectClass parent;
-
- /* Virtual functions */
- void (*device_added) (NMUdevManager *manager,
- GUdevDevice *device,
- const char *iface,
- const char *sysfs_path,
- const char *driver,
- int ifindex);
-
- void (*device_removed) (NMUdevManager *manager, GUdevDevice *device);
-
- void (*rfkill_changed) (NMUdevManager *manager, RfKillType rtype, RfKillState state);
-} NMUdevManagerClass;
-
-GType nm_udev_manager_get_type (void);
-
-NMUdevManager *nm_udev_manager_new (void);
-
-void nm_udev_manager_query_devices (NMUdevManager *manager);
-
-RfKillState nm_udev_manager_get_rfkill_state (NMUdevManager *manager, RfKillType rtype);
-
-#endif /* NM_UDEV_MANAGER_H */
-
diff --git a/src/nm-vpn-connection-glue.h b/src/nm-vpn-connection-glue.h
new file mode 100644
index 000000000..74b8c7dc6
--- /dev/null
+++ b/src/nm-vpn-connection-glue.h
@@ -0,0 +1,73 @@
+/* Generated by dbus-binding-tool; do not edit! */
+
+
+#ifndef __dbus_glib_marshal_nm_vpn_connection_MARSHAL_H__
+#define __dbus_glib_marshal_nm_vpn_connection_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+G_END_DECLS
+
+#endif /* __dbus_glib_marshal_nm_vpn_connection_MARSHAL_H__ */
+
+#include <dbus/dbus-glib.h>
+static const DBusGMethodInfo dbus_glib_nm_vpn_connection_methods[] = {
+};
+
+const DBusGObjectInfo dbus_glib_nm_vpn_connection_object_info = { 1,
+ dbus_glib_nm_vpn_connection_methods,
+ 0,
+"\0",
+"org.freedesktop.NetworkManager.VPN.Connection\0PropertiesChanged\0org.freedesktop.NetworkManager.VPN.Connection\0VpnStateChanged\0\0",
+"org.freedesktop.NetworkManager.VPN.Connection\0VpnState\0vpn_state\0read\0org.freedesktop.NetworkManager.VPN.Connection\0Banner\0banner\0read\0\0"
+};
+
diff --git a/src/org.freedesktop.NetworkManager.conf b/src/org.freedesktop.NetworkManager.conf
index db68374cc..bdfe3e677 100644
--- a/src/org.freedesktop.NetworkManager.conf
+++ b/src/org.freedesktop.NetworkManager.conf
@@ -26,93 +26,99 @@
<allow send_destination="org.freedesktop.NetworkManager.ssh"/>
<allow send_destination="org.freedesktop.NetworkManager.iodine"/>
</policy>
- <policy at_console="true">
- <allow send_destination="org.freedesktop.NetworkManager"/>
+ <policy context="default">
+ <deny own="org.freedesktop.NetworkManager"/>
+ <deny send_destination="org.freedesktop.NetworkManager"/>
+
+ <!-- Basic D-Bus API stuff -->
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.DBus.Introspectable"/>
-
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.DBus.Properties"/>
+ <!-- Devices (read-only properties, no methods) -->
<allow send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"/>
-
+ send_interface="org.freedesktop.NetworkManager.Device.Adsl"/>
<allow send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager.AccessPoint"/>
-
+ send_interface="org.freedesktop.NetworkManager.Device.Bond"/>
<allow send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager.Connection.Active"/>
-
+ send_interface="org.freedesktop.NetworkManager.Device.Bridge"/>
<allow send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager.Device.Modem"/>
-
+ send_interface="org.freedesktop.NetworkManager.Device.Bluetooth"/>
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.Device.Wired"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Generic"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Gre"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Infiniband"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Macvlan"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Modem"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.OlpcMesh"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Team"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Tun"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Veth"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Device.Vlan"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.WiMax.Nsp"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.AccessPoint"/>
+ <!-- Devices (read-only, no security required) -->
<allow send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager.Device.Serial"/>
+ send_interface="org.freedesktop.NetworkManager.Device.WiMax"/>
+ <!-- Devices (read/write, secured with PolicyKit) -->
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.Device.Wireless"/>
-
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.Device"/>
+ <!-- Core stuff (read-only properties, no methods) -->
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Connection.Active"/>
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.DHCP4Config"/>
-
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.DHCP6Config"/>
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.IP4Config"/>
-
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.IP6Config"/>
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.VPN.Connection"/>
+ <!-- Core stuff (read/write, secured with PolicyKit) -->
<allow send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager.AgentManager"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="SetLogging"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="Sleep"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="sleep"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="wake"/>
- </policy>
- <policy context="default">
- <deny own="org.freedesktop.NetworkManager"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"/>
-
+ send_interface="org.freedesktop.NetworkManager"/>
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.Settings"/>
+ <allow send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager.Settings.Connection"/>
+ <!-- Agents; secured with PolicyKit. Any process can talk to
+ the AgentManager API, but only NetworkManager can talk
+ to the agents themselves. -->
<allow send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager.AgentManager"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="SetLogging"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="Sleep"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="sleep"/>
-
- <deny send_destination="org.freedesktop.NetworkManager"
- send_interface="org.freedesktop.NetworkManager"
- send_member="wake"/>
+ <deny send_interface="org.freedesktop.NetworkManager.SecretAgent"/>
+
+ <!-- Root-only functions -->
+ <deny send_interface="org.freedesktop.NetworkManager" send_member="SetLogging"/>
+ <deny send_interface="org.freedesktop.NetworkManager" send_member="Sleep"/>
+ <deny send_interface="org.freedesktop.NetworkManager.Settings" send_member="LoadConnections"/>
+ <deny send_interface="org.freedesktop.NetworkManager.Settings" send_member="ReloadConnections"/>
+ <deny send_interface="org.freedesktop.NetworkManager.VPN.Plugin"/>
+ <deny send_interface="org.freedesktop.NetworkManager.PPP"/>
</policy>
</busconfig>
diff --git a/src/platform/Makefile.am b/src/platform/Makefile.am
new file mode 100644
index 000000000..3c6155b9c
--- /dev/null
+++ b/src/platform/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = tests
diff --git a/src/firewall-manager/Makefile.in b/src/platform/Makefile.in
index 690f0b3dd..9358879f3 100644
--- a/src/firewall-manager/Makefile.in
+++ b/src/platform/Makefile.in
@@ -13,7 +13,6 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
-
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
@@ -78,11 +77,11 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/firewall-manager
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/build-aux/depcomp
+subdir = src/platform
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,18 +99,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libfirewall_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libfirewall_manager_la_OBJECTS = \
- libfirewall_manager_la-nm-firewall-manager.lo
-libfirewall_manager_la_OBJECTS = $(am_libfirewall_manager_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -124,35 +111,29 @@ AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo " CCLD " $@;
-am__v_CCLD_1 =
-SOURCES = $(libfirewall_manager_la_SOURCES)
-DIST_SOURCES = $(libfirewall_manager_la_SOURCES)
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -172,7 +153,33 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
@@ -198,12 +205,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -228,7 +238,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -273,12 +282,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -295,6 +308,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -322,11 +337,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -341,6 +361,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -403,6 +424,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -413,30 +435,11 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libfirewall-manager.la
-libfirewall_manager_la_CPPFLAGS = \
- -I${top_srcdir}/src \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/include \
- -I${top_srcdir}/libnm-util \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNM_PKGDATADIR=\"$(pkgdatadir)\" \
- -DNM_LOCALSTATEDIR=\"$(localstatedir)\"
-
-libfirewall_manager_la_SOURCES = \
- nm-firewall-manager.h \
- nm-firewall-manager.c
-
-libfirewall_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-all: all-am
+with_valgrind = @with_valgrind@
+SUBDIRS = tests
+all: all-recursive
.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -446,9 +449,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/firewall-manager/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/platform/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/firewall-manager/Makefile
+ $(AUTOMAKE) --gnu src/platform/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -468,70 +471,67 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-libfirewall-manager.la: $(libfirewall_manager_la_OBJECTS) $(libfirewall_manager_la_DEPENDENCIES) $(EXTRA_libfirewall_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libfirewall_manager_la_OBJECTS) $(libfirewall_manager_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfirewall_manager_la-nm-firewall-manager.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-libfirewall_manager_la-nm-firewall-manager.lo: nm-firewall-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfirewall_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libfirewall_manager_la-nm-firewall-manager.lo -MD -MP -MF $(DEPDIR)/libfirewall_manager_la-nm-firewall-manager.Tpo -c -o libfirewall_manager_la-nm-firewall-manager.lo `test -f 'nm-firewall-manager.c' || echo '$(srcdir)/'`nm-firewall-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libfirewall_manager_la-nm-firewall-manager.Tpo $(DEPDIR)/libfirewall_manager_la-nm-firewall-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-firewall-manager.c' object='libfirewall_manager_la-nm-firewall-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfirewall_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libfirewall_manager_la-nm-firewall-manager.lo `test -f 'nm-firewall-manager.c' || echo '$(srcdir)/'`nm-firewall-manager.c
-
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
+tags: tags-recursive
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
@@ -544,7 +544,7 @@ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$$unique; \
fi; \
fi
-ctags: ctags-am
+ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
@@ -557,7 +557,7 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
+cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
@@ -606,19 +606,45 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -640,92 +666,86 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+clean: clean-recursive
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+distclean: distclean-recursive
-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
+distclean-am: clean-am distclean-generic distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
install-data-am:
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am:
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/src/platform/nm-fake-platform.c b/src/platform/nm-fake-platform.c
new file mode 100644
index 000000000..46272217d
--- /dev/null
+++ b/src/platform/nm-fake-platform.c
@@ -0,0 +1,1352 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-platform-fake.c - Fake platform interaction code for testing NetworkManager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2012–2013 Red Hat, Inc.
+ */
+
+#include <errno.h>
+#include <unistd.h>
+#include <netinet/icmp6.h>
+#include <netinet/in.h>
+
+#include "NetworkManagerUtils.h"
+#include "nm-fake-platform.h"
+#include "nm-logging.h"
+
+#define debug(format, ...) nm_log_dbg (LOGD_PLATFORM, format, __VA_ARGS__)
+
+typedef struct {
+ GHashTable *options;
+ GArray *links;
+ GArray *ip4_addresses;
+ GArray *ip6_addresses;
+ GArray *ip4_routes;
+ GArray *ip6_routes;
+} NMFakePlatformPrivate;
+
+typedef struct {
+ NMPlatformLink link;
+
+ char *udi;
+ GBytes *address;
+ int vlan_id;
+} NMFakePlatformLink;
+
+#define NM_FAKE_PLATFORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_FAKE_PLATFORM, NMFakePlatformPrivate))
+
+G_DEFINE_TYPE (NMFakePlatform, nm_fake_platform, NM_TYPE_PLATFORM)
+
+/******************************************************************/
+
+void
+nm_fake_platform_setup (void)
+{
+ nm_platform_setup (NM_TYPE_FAKE_PLATFORM);
+}
+
+/******************************************************************/
+
+static gboolean
+sysctl_set (NMPlatform *platform, const char *path, const char *value)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+
+ g_hash_table_insert (priv->options, g_strdup (path), g_strdup (value));
+
+ return TRUE;
+}
+
+static char *
+sysctl_get (NMPlatform *platform, const char *path)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+
+ return g_strdup (g_hash_table_lookup (priv->options, path));
+}
+
+static const char *
+type_to_type_name (NMLinkType type)
+{
+ switch (type) {
+ case NM_LINK_TYPE_UNKNOWN:
+ return "unknown";
+ case NM_LINK_TYPE_LOOPBACK:
+ return "loopback";
+ case NM_LINK_TYPE_ETHERNET:
+ return "ethernet";
+ case NM_LINK_TYPE_DUMMY:
+ return "dummy";
+ case NM_LINK_TYPE_BRIDGE:
+ return "bridge";
+ case NM_LINK_TYPE_BOND:
+ return "bond";
+ case NM_LINK_TYPE_TEAM:
+ return "team";
+ case NM_LINK_TYPE_VLAN:
+ return "vlan";
+ case NM_LINK_TYPE_NONE:
+ default:
+ return NULL;
+ }
+}
+
+static void
+link_init (NMFakePlatformLink *device, int ifindex, int type, const char *name)
+{
+ g_assert (!name || strlen (name) < sizeof(device->link.name));
+
+ memset (device, 0, sizeof (*device));
+
+ device->link.ifindex = name ? ifindex : 0;
+ device->link.type = type;
+ device->link.type_name = type_to_type_name (type);
+ device->link.driver = type_to_type_name (type);
+ device->link.udi = device->udi = g_strdup_printf ("fake:%d", ifindex);
+ if (name)
+ strcpy (device->link.name, name);
+ switch (device->link.type) {
+ case NM_LINK_TYPE_DUMMY:
+ device->link.arp = FALSE;
+ break;
+ default:
+ device->link.arp = TRUE;
+ }
+ device->address = NULL;
+}
+
+static NMFakePlatformLink *
+link_get (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ NMFakePlatformLink *device;
+
+ if (ifindex >= priv->links->len)
+ goto not_found;
+ device = &g_array_index (priv->links, NMFakePlatformLink, ifindex);
+ if (!device->link.ifindex)
+ goto not_found;
+
+ return device;
+not_found:
+ debug ("link not found: %d", ifindex);
+ platform->error = NM_PLATFORM_ERROR_NOT_FOUND;
+ return NULL;
+}
+
+static GArray *
+link_get_all (NMPlatform *platform)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ GArray *links = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformLink), priv->links->len);
+ int i;
+
+ for (i = 0; i < priv->links->len; i++)
+ if (g_array_index (priv->links, NMFakePlatformLink, i).link.ifindex)
+ g_array_append_val (links, g_array_index (priv->links, NMFakePlatformLink, i).link);
+
+ return links;
+}
+
+static gboolean
+_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *link)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (device)
+ *link = device->link;
+ return !!device;
+}
+
+static gboolean
+link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *address, size_t address_len)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ NMFakePlatformLink device;
+
+ link_init (&device, priv->links->len, type, name);
+
+ g_array_append_val (priv->links, device);
+
+ if (device.link.ifindex)
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_LINK_CHANGED, device.link.ifindex, &device, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_INTERNAL);
+
+ return TRUE;
+}
+
+static gboolean
+link_delete (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+ NMPlatformLink deleted_device;
+ int i;
+
+ if (!device || !device->link.ifindex)
+ return FALSE;
+
+ memcpy (&deleted_device, &device->link, sizeof (deleted_device));
+ memset (&device->link, 0, sizeof (device->link));
+
+ /* Remove addresses and routes which belong to the deleted interface */
+ for (i = 0; i < priv->ip4_addresses->len; i++) {
+ NMPlatformIP4Address *address = &g_array_index (priv->ip4_addresses, NMPlatformIP4Address, i);
+
+ if (address->ifindex == ifindex)
+ memset (address, 0, sizeof (*address));
+ }
+ for (i = 0; i < priv->ip6_addresses->len; i++) {
+ NMPlatformIP6Address *address = &g_array_index (priv->ip6_addresses, NMPlatformIP6Address, i);
+
+ if (address->ifindex == ifindex)
+ memset (address, 0, sizeof (*address));
+ }
+ for (i = 0; i < priv->ip4_routes->len; i++) {
+ NMPlatformIP4Route *route = &g_array_index (priv->ip4_routes, NMPlatformIP4Route, i);
+
+ if (route->ifindex == ifindex)
+ memset (route, 0, sizeof (*route));
+ }
+ for (i = 0; i < priv->ip6_routes->len; i++) {
+ NMPlatformIP6Route *route = &g_array_index (priv->ip6_routes, NMPlatformIP6Route, i);
+
+ if (route->ifindex == ifindex)
+ memset (route, 0, sizeof (*route));
+ }
+
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_LINK_CHANGED, ifindex, &deleted_device, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_INTERNAL);
+
+ return TRUE;
+}
+
+static int
+link_get_ifindex (NMPlatform *platform, const char *name)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->links->len; i++) {
+ NMFakePlatformLink *device = &g_array_index (priv->links, NMFakePlatformLink, i);
+
+ if (device && !g_strcmp0 (device->link.name, name))
+ return device->link.ifindex;
+ }
+
+ return 0;
+}
+
+static const char *
+link_get_name (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ return device ? device->link.name : NULL;
+}
+
+static NMLinkType
+link_get_type (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ return device ? device->link.type : NM_LINK_TYPE_NONE;
+}
+
+static const char *
+link_get_type_name (NMPlatform *platform, int ifindex)
+{
+ return type_to_type_name (link_get_type (platform, ifindex));
+}
+
+static void
+link_changed (NMPlatform *platform, NMFakePlatformLink *device)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_LINK_CHANGED, device->link.ifindex, &device->link, NM_PLATFORM_SIGNAL_CHANGED, NM_PLATFORM_REASON_INTERNAL);
+
+ if (device->link.master) {
+ NMFakePlatformLink *master = link_get (platform, device->link.master);
+
+ g_return_if_fail (master != device);
+
+ master->link.connected = FALSE;
+ for (i = 0; i < priv->links->len; i++) {
+ NMFakePlatformLink *slave = &g_array_index (priv->links, NMFakePlatformLink, i);
+
+ if (slave && slave->link.master == master->link.ifindex && slave->link.connected)
+ master->link.connected = TRUE;
+ }
+
+ link_changed (platform, master);
+ }
+}
+
+static gboolean
+link_set_up (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (!device)
+ return FALSE;
+
+ device->link.up = TRUE;
+ switch (device->link.type) {
+ case NM_LINK_TYPE_DUMMY:
+ case NM_LINK_TYPE_VLAN:
+ device->link.connected = TRUE;
+ break;
+ case NM_LINK_TYPE_BRIDGE:
+ case NM_LINK_TYPE_BOND:
+ case NM_LINK_TYPE_TEAM:
+ device->link.connected = FALSE;
+ break;
+ default:
+ device->link.connected = FALSE;
+ g_error ("Unexpected device type: %d", device->link.type);
+ }
+
+ link_changed (platform, device);
+
+ return TRUE;
+}
+
+static gboolean
+link_set_down (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (!device)
+ return FALSE;
+
+ device->link.up = FALSE;
+ device->link.connected = FALSE;
+
+ link_changed (platform, device);
+
+ return TRUE;
+}
+
+static gboolean
+link_set_arp (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (!device)
+ return FALSE;
+
+ device->link.arp = TRUE;
+
+ link_changed (platform, device);
+
+ return TRUE;
+}
+
+static gboolean
+link_set_noarp (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (!device)
+ return FALSE;
+
+ device->link.arp = FALSE;
+
+ link_changed (platform, device);
+
+ return TRUE;
+}
+
+static gboolean
+link_is_up (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ return device ? device->link.up : FALSE;
+}
+
+static gboolean
+link_is_connected (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ return device ? device->link.connected : FALSE;
+}
+
+static gboolean
+link_uses_arp (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ return device ? device->link.arp : FALSE;
+}
+
+static gboolean
+link_set_address (NMPlatform *platform, int ifindex, gconstpointer addr, size_t len)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (device->address)
+ g_bytes_unref (device->address);
+
+ device->address = g_bytes_new (addr, len);
+
+ link_changed (platform, link_get (platform, ifindex));
+
+ return TRUE;
+}
+
+static gconstpointer
+link_get_address (NMPlatform *platform, int ifindex, size_t *length)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (!device || !device->address) {
+ if (length)
+ *length = 0;
+ return NULL;
+ }
+
+ return g_bytes_get_data (device->address, length);
+}
+
+static gboolean
+link_set_mtu (NMPlatform *platform, int ifindex, guint32 mtu)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (device) {
+ device->link.mtu = mtu;
+ link_changed (platform, device);
+ }
+
+ return !!device;
+}
+
+static guint32
+link_get_mtu (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ return device ? device->link.mtu : 0;
+}
+
+static char *
+link_get_physical_port_id (NMPlatform *platform, int ifindex)
+{
+ /* We call link_get just to cause an error to be set if @ifindex is bad. */
+ link_get (platform, ifindex);
+
+ return NULL;
+}
+
+static gboolean
+link_get_wake_on_lan (NMPlatform *platform, int ifindex)
+{
+ /* We call link_get just to cause an error to be set if @ifindex is bad. */
+ link_get (platform, ifindex);
+
+ return FALSE;
+}
+
+static gboolean
+link_supports_carrier_detect (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (!device)
+ return FALSE;
+
+ switch (device->link.type) {
+ case NM_LINK_TYPE_DUMMY:
+ return FALSE;
+ default:
+ return TRUE;
+ }
+}
+
+static gboolean
+link_supports_vlans (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ if (!device)
+ return FALSE;
+
+ switch (device->link.type) {
+ case NM_LINK_TYPE_LOOPBACK:
+ return FALSE;
+ default:
+ return TRUE;
+ }
+}
+
+static gboolean
+link_enslave (NMPlatform *platform, int master, int slave)
+{
+ NMFakePlatformLink *device = link_get (platform, slave);
+
+ g_return_val_if_fail (device, FALSE);
+
+ device->link.master = master;
+
+ link_changed (platform, device);
+
+ return TRUE;
+}
+
+static gboolean
+link_release (NMPlatform *platform, int master_idx, int slave_idx)
+{
+ NMFakePlatformLink *master = link_get (platform, master_idx);
+ NMFakePlatformLink *slave = link_get (platform, slave_idx);
+
+ g_return_val_if_fail (master, FALSE);
+ g_return_val_if_fail (slave, FALSE);
+
+ if (slave->link.master != master->link.ifindex) {
+ platform->error = NM_PLATFORM_ERROR_NOT_SLAVE;
+ return FALSE;
+ }
+
+ slave->link.master = 0;
+
+ link_changed (platform, slave);
+ link_changed (platform, master);
+
+ return TRUE;
+}
+
+static int
+link_get_master (NMPlatform *platform, int slave)
+{
+ NMFakePlatformLink *device = link_get (platform, slave);
+
+ g_return_val_if_fail (device, FALSE);
+
+ return device->link.master;
+}
+
+static gboolean
+master_set_option (NMPlatform *platform, int master, const char *option, const char *value)
+{
+ auto_g_free char *path = g_strdup_printf ("master:%d:%s", master, option);
+
+ return sysctl_set (platform, path, value);
+}
+
+static char *
+master_get_option (NMPlatform *platform, int master, const char *option)
+{
+ auto_g_free char *path = g_strdup_printf ("master:%d:%s", master, option);
+
+ return sysctl_get (platform, path);
+}
+
+static gboolean
+slave_set_option (NMPlatform *platform, int slave, const char *option, const char *value)
+{
+ auto_g_free char *path = g_strdup_printf ("slave:%d:%s", slave, option);
+
+ return sysctl_set (platform, path, value);
+}
+
+static char *
+slave_get_option (NMPlatform *platform, int slave, const char *option)
+{
+ auto_g_free char *path = g_strdup_printf ("slave:%d:%s", slave, option);
+
+ return sysctl_get (platform, path);
+}
+
+static gboolean
+vlan_add (NMPlatform *platform, const char *name, int parent, int vlan_id, guint32 vlan_flags)
+{
+ NMFakePlatformLink *device;
+
+ if (!link_add (platform, name, NM_LINK_TYPE_VLAN, NULL, 0))
+ return FALSE;
+
+ device = link_get (platform, link_get_ifindex (platform, name));
+
+ g_return_val_if_fail (device, FALSE);
+
+ device->vlan_id = vlan_id;
+ device->link.parent = parent;
+
+ return TRUE;
+}
+
+static gboolean
+vlan_get_info (NMPlatform *platform, int ifindex, int *parent, int *vlan_id)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ g_return_val_if_fail (device, FALSE);
+
+ if (parent)
+ *parent = device->link.parent;
+ if (vlan_id)
+ *vlan_id = device->vlan_id;
+
+ return TRUE;
+}
+
+static gboolean
+vlan_set_ingress_map (NMPlatform *platform, int ifindex, int from, int to)
+{
+ return !!link_get (platform, ifindex);
+}
+
+static gboolean
+vlan_set_egress_map (NMPlatform *platform, int ifindex, int from, int to)
+{
+ return !!link_get (platform, ifindex);
+}
+
+static gboolean
+infiniband_partition_add (NMPlatform *platform, int parent, int p_key)
+{
+ NMFakePlatformLink *parent_device;
+ char *name;
+ gboolean success;
+
+ parent_device = link_get (platform, parent);
+ g_return_val_if_fail (parent_device != NULL, FALSE);
+
+ name = g_strdup_printf ("%s.%04x", parent_device->link.name, p_key);
+ success = link_add (platform, name, NM_LINK_TYPE_INFINIBAND, NULL, 0);
+ g_free (name);
+
+ return success;
+}
+
+static gboolean
+veth_get_properties (NMPlatform *platform, int ifindex, NMPlatformVethProperties *props)
+{
+ return FALSE;
+}
+
+static gboolean
+tun_get_properties (NMPlatform *platform, int ifindex, NMPlatformTunProperties *props)
+{
+ return FALSE;
+}
+
+static gboolean
+macvlan_get_properties (NMPlatform *platform, int ifindex, NMPlatformMacvlanProperties *props)
+{
+ return FALSE;
+}
+
+static gboolean
+vxlan_get_properties (NMPlatform *platform, int ifindex, NMPlatformVxlanProperties *props)
+{
+ return FALSE;
+}
+
+static gboolean
+gre_get_properties (NMPlatform *platform, int ifindex, NMPlatformGreProperties *props)
+{
+ return FALSE;
+}
+
+static gboolean
+wifi_get_capabilities (NMPlatform *platform, int ifindex, NMDeviceWifiCapabilities *caps)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ g_return_val_if_fail (device, FALSE);
+
+ if (device->link.type != NM_LINK_TYPE_WIFI)
+ return FALSE;
+
+ if (caps) {
+ *caps = ( NM_WIFI_DEVICE_CAP_CIPHER_WEP40
+ | NM_WIFI_DEVICE_CAP_CIPHER_WEP104
+ | NM_WIFI_DEVICE_CAP_CIPHER_TKIP
+ | NM_WIFI_DEVICE_CAP_CIPHER_CCMP
+ | NM_WIFI_DEVICE_CAP_WPA
+ | NM_WIFI_DEVICE_CAP_RSN
+ | NM_WIFI_DEVICE_CAP_AP
+ | NM_WIFI_DEVICE_CAP_ADHOC);
+ }
+ return TRUE;
+}
+
+static gboolean
+wifi_get_bssid (NMPlatform *platform, int ifindex, struct ether_addr *bssid)
+{
+ return FALSE;
+}
+
+static GByteArray *
+wifi_get_ssid (NMPlatform *platform, int ifindex)
+{
+ return NULL;
+}
+
+static guint32
+wifi_get_frequency (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static int
+wifi_get_quality (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static guint32
+wifi_get_rate (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static NM80211Mode
+wifi_get_mode (NMPlatform *platform, int ifindex)
+{
+ return NM_802_11_MODE_UNKNOWN;
+}
+
+static void
+wifi_set_mode (NMPlatform *platform, int ifindex, NM80211Mode mode)
+{
+ ;
+}
+
+static guint32
+wifi_find_frequency (NMPlatform *platform, int ifindex, const guint32 *freqs)
+{
+ return freqs[0];
+}
+
+static void
+wifi_indicate_addressing_running (NMPlatform *platform, int ifindex, gboolean running)
+{
+ ;
+}
+
+static guint32
+mesh_get_channel (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static gboolean
+mesh_set_channel (NMPlatform *platform, int ifindex, guint32 channel)
+{
+ return FALSE;
+}
+
+static gboolean
+mesh_set_ssid (NMPlatform *platform, int ifindex, const GByteArray *ssid)
+{
+ return FALSE;
+}
+
+/******************************************************************/
+
+static GArray *
+ip4_address_get_all (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ GArray *addresses;
+ NMPlatformIP4Address *address;
+ int count = 0, i;
+
+ /* Count addresses */
+ for (i = 0; i < priv->ip4_addresses->len; i++) {
+ address = &g_array_index (priv->ip4_addresses, NMPlatformIP4Address, i);
+ if (address && address->ifindex == ifindex)
+ count++;
+ }
+
+ addresses = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformIP4Address), count);
+
+ /* Fill addresses */
+ for (i = 0; i < priv->ip4_addresses->len; i++) {
+ address = &g_array_index (priv->ip4_addresses, NMPlatformIP4Address, i);
+ if (address && address->ifindex == ifindex)
+ g_array_append_val (addresses, *address);
+ }
+
+ return addresses;
+}
+
+static GArray *
+ip6_address_get_all (NMPlatform *platform, int ifindex)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ GArray *addresses;
+ NMPlatformIP6Address *address;
+ int count = 0, i;
+
+ /* Count addresses */
+ for (i = 0; i < priv->ip6_addresses->len; i++) {
+ address = &g_array_index (priv->ip6_addresses, NMPlatformIP6Address, i);
+ if (address && address->ifindex == ifindex)
+ count++;
+ }
+
+ addresses = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformIP6Address), count);
+
+ /* Fill addresses */
+ count = 0;
+ for (i = 0; i < priv->ip6_addresses->len; i++) {
+ address = &g_array_index (priv->ip6_addresses, NMPlatformIP6Address, i);
+ if (address && address->ifindex == ifindex)
+ g_array_append_val (addresses, *address);
+ }
+
+ return addresses;
+}
+
+static gboolean
+ip4_address_add (NMPlatform *platform, int ifindex,
+ in_addr_t addr, in_addr_t peer_addr,
+ int plen, guint32 lifetime, guint32 preferred,
+ const char *label)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ NMPlatformIP4Address address;
+ int i;
+
+ memset (&address, 0, sizeof (address));
+ address.source = NM_PLATFORM_SOURCE_KERNEL;
+ address.ifindex = ifindex;
+ address.address = addr;
+ address.peer_address = peer_addr;
+ address.plen = plen;
+ address.timestamp = nm_utils_get_monotonic_timestamp_s ();
+ address.lifetime = lifetime;
+ address.preferred = preferred;
+ if (label)
+ g_strlcpy (address.label, label, sizeof (address.label));
+
+ for (i = 0; i < priv->ip4_addresses->len; i++) {
+ NMPlatformIP4Address *item = &g_array_index (priv->ip4_addresses, NMPlatformIP4Address, i);
+
+ if (item->ifindex != address.ifindex)
+ continue;
+ if (item->address != address.address)
+ continue;
+ if (item->plen != address.plen)
+ continue;
+
+ memcpy (item, &address, sizeof (address));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, ifindex, &address, NM_PLATFORM_SIGNAL_CHANGED, NM_PLATFORM_REASON_INTERNAL);
+ return TRUE;
+ }
+
+ g_array_append_val (priv->ip4_addresses, address);
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, ifindex, &address, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_INTERNAL);
+
+ return TRUE;
+}
+
+static gboolean
+ip6_address_add (NMPlatform *platform, int ifindex,
+ struct in6_addr addr, struct in6_addr peer_addr,
+ int plen, guint32 lifetime, guint32 preferred, guint flags)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ NMPlatformIP6Address address;
+ int i;
+
+ memset (&address, 0, sizeof (address));
+ address.source = NM_PLATFORM_SOURCE_KERNEL;
+ address.ifindex = ifindex;
+ address.address = addr;
+ address.peer_address = peer_addr;
+ address.plen = plen;
+ address.timestamp = nm_utils_get_monotonic_timestamp_s ();
+ address.lifetime = lifetime;
+ address.preferred = preferred;
+ address.flags = flags;
+
+ for (i = 0; i < priv->ip6_addresses->len; i++) {
+ NMPlatformIP6Address *item = &g_array_index (priv->ip6_addresses, NMPlatformIP6Address, i);
+
+ if (item->ifindex != address.ifindex)
+ continue;
+ if (!IN6_ARE_ADDR_EQUAL (&item->address, &address.address))
+ continue;
+ if (item->plen != address.plen)
+ continue;
+
+ memcpy (item, &address, sizeof (address));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, ifindex, &address, NM_PLATFORM_SIGNAL_CHANGED, NM_PLATFORM_REASON_INTERNAL);
+ return TRUE;
+ }
+
+ g_array_append_val (priv->ip6_addresses, address);
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, ifindex, &address, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_INTERNAL);
+
+ return TRUE;
+}
+
+static gboolean
+ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip4_addresses->len; i++) {
+ NMPlatformIP4Address *address = &g_array_index (priv->ip4_addresses, NMPlatformIP4Address, i);
+
+ if (address->ifindex == ifindex && address->plen == plen && address->address == addr) {
+ NMPlatformIP4Address deleted_address;
+
+ memcpy (&deleted_address, address, sizeof (deleted_address));
+ memset (address, 0, sizeof (*address));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, ifindex, &deleted_address, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_INTERNAL);
+ return TRUE;
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+ip6_address_delete (NMPlatform *platform, int ifindex, struct in6_addr addr, int plen)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip6_addresses->len; i++) {
+ NMPlatformIP6Address *address = &g_array_index (priv->ip6_addresses, NMPlatformIP6Address, i);
+
+ if (address->ifindex == ifindex && address->plen == plen
+ && IN6_ARE_ADDR_EQUAL (&address->address, &addr)) {
+ NMPlatformIP6Address deleted_address;
+
+ memcpy (&deleted_address, address, sizeof (deleted_address));
+ memset (address, 0, sizeof (*address));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, ifindex, &deleted_address, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_INTERNAL);
+ return TRUE;
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+ip4_address_exists (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip4_addresses->len; i++) {
+ NMPlatformIP4Address *address = &g_array_index (priv->ip4_addresses, NMPlatformIP4Address, i);
+
+ if (address->ifindex == ifindex && address->plen == plen && address->address == addr)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ip6_address_exists (NMPlatform *platform, int ifindex, struct in6_addr addr, int plen)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip6_addresses->len; i++) {
+ NMPlatformIP6Address *address = &g_array_index (priv->ip6_addresses, NMPlatformIP6Address, i);
+
+ if (address->ifindex == ifindex && address->plen == plen &&
+ IN6_ARE_ADDR_EQUAL (&address->address, &addr))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/******************************************************************/
+
+static GArray *
+ip4_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ GArray *routes;
+ NMPlatformIP4Route *route;
+ int count = 0, i;
+
+ /* Count routes */
+ for (i = 0; i < priv->ip4_routes->len; i++) {
+ route = &g_array_index (priv->ip4_routes, NMPlatformIP4Route, i);
+ if (route && route->ifindex == ifindex)
+ count++;
+ }
+
+ routes = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformIP4Route), count);
+
+ /* Fill routes */
+ for (i = 0; i < priv->ip4_routes->len; i++) {
+ route = &g_array_index (priv->ip4_routes, NMPlatformIP4Route, i);
+ if (route && route->ifindex == ifindex) {
+ if (route->plen != 0 || include_default)
+ g_array_append_val (routes, *route);
+ }
+ }
+
+ return routes;
+}
+
+static GArray *
+ip6_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ GArray *routes;
+ NMPlatformIP6Route *route;
+ int count = 0, i;
+
+ /* Count routes */
+ for (i = 0; i < priv->ip6_routes->len; i++) {
+ route = &g_array_index (priv->ip6_routes, NMPlatformIP6Route, i);
+ if (route && route->ifindex == ifindex)
+ count++;
+ }
+
+ routes = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformIP6Route), count);
+
+ /* Fill routes */
+ for (i = 0; i < priv->ip6_routes->len; i++) {
+ route = &g_array_index (priv->ip6_routes, NMPlatformIP6Route, i);
+ if (route && route->ifindex == ifindex) {
+ if (route->plen != 0 || include_default)
+ g_array_append_val (routes, *route);
+ }
+ }
+
+ return routes;
+}
+
+static gboolean
+ip4_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ in_addr_t network, int plen, in_addr_t gateway,
+ int metric, int mss)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ NMPlatformIP4Route route;
+ guint i;
+
+ memset (&route, 0, sizeof (route));
+ route.source = NM_PLATFORM_SOURCE_KERNEL;
+ route.ifindex = ifindex;
+ route.source = source;
+ route.network = network;
+ route.plen = plen;
+ route.gateway = gateway;
+ route.metric = metric;
+ route.mss = mss;
+
+ for (i = 0; i < priv->ip4_routes->len; i++) {
+ NMPlatformIP4Route *item = &g_array_index (priv->ip4_routes, NMPlatformIP4Route, i);
+
+ if (item->ifindex != route.ifindex)
+ continue;
+ if (item->network != route.network)
+ continue;
+ if (item->plen != route.plen)
+ continue;
+
+ memcpy (item, &route, sizeof (route));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, ifindex, &route, NM_PLATFORM_SIGNAL_CHANGED, NM_PLATFORM_REASON_INTERNAL);
+ return TRUE;
+ }
+
+ g_array_append_val (priv->ip4_routes, route);
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, ifindex, &route, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_INTERNAL);
+
+ return TRUE;
+}
+
+static gboolean
+ip6_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ struct in6_addr network, int plen, struct in6_addr gateway,
+ int metric, int mss)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ NMPlatformIP6Route route;
+ guint i;
+
+ memset (&route, 0, sizeof (route));
+ route.source = NM_PLATFORM_SOURCE_KERNEL;
+ route.ifindex = ifindex;
+ route.source = source;
+ route.network = network;
+ route.plen = plen;
+ route.gateway = gateway;
+ route.metric = metric;
+ route.mss = mss;
+
+ for (i = 0; i < priv->ip6_routes->len; i++) {
+ NMPlatformIP6Route *item = &g_array_index (priv->ip6_routes, NMPlatformIP6Route, i);
+
+ if (item->ifindex != route.ifindex)
+ continue;
+ if (!IN6_ARE_ADDR_EQUAL (&item->network, &route.network))
+ continue;
+ if (item->plen != route.plen)
+ continue;
+
+ memcpy (item, &route, sizeof (route));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, ifindex, &route, NM_PLATFORM_SIGNAL_CHANGED, NM_PLATFORM_REASON_INTERNAL);
+ return TRUE;
+ }
+
+ g_array_append_val (priv->ip6_routes, route);
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, ifindex, &route, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_INTERNAL);
+
+ return TRUE;
+}
+
+static NMPlatformIP4Route *
+ip4_route_get (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip4_routes->len; i++) {
+ NMPlatformIP4Route *route = &g_array_index (priv->ip4_routes, NMPlatformIP4Route, i);
+
+ if (route->ifindex == ifindex
+ && route->network == network
+ && route->plen == plen
+ && route->metric == metric)
+ return route;
+ }
+
+ return NULL;
+}
+
+static NMPlatformIP6Route *
+ip6_route_get (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip6_routes->len; i++) {
+ NMPlatformIP6Route *route = &g_array_index (priv->ip6_routes, NMPlatformIP6Route, i);
+
+ if (route->ifindex == ifindex
+ && IN6_ARE_ADDR_EQUAL (&route->network, &network)
+ && route->plen == plen
+ && route->metric == metric)
+ return route;
+ }
+
+ return NULL;
+}
+
+static gboolean
+ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+{
+ NMPlatformIP4Route *route = ip4_route_get (platform, ifindex, network, plen, metric);
+ NMPlatformIP4Route deleted_route;
+
+ if (route) {
+ memcpy (&deleted_route, route, sizeof (deleted_route));
+ memset (route, 0, sizeof (*route));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, ifindex, &deleted_route, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_INTERNAL);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+{
+ NMPlatformIP6Route *route = ip6_route_get (platform, ifindex, network, plen, metric);
+ NMPlatformIP6Route deleted_route;
+
+ if (route) {
+ memcpy (&deleted_route, route, sizeof (deleted_route));
+ memset (route, 0, sizeof (*route));
+ g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, ifindex, &deleted_route, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_INTERNAL);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+ip4_route_exists (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+{
+ return !!ip4_route_get (platform, ifindex, network, plen, metric);
+}
+
+static gboolean
+ip6_route_exists (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+{
+ return !!ip6_route_get (platform, ifindex, network, plen, metric);
+}
+
+/******************************************************************/
+
+static void
+nm_fake_platform_init (NMFakePlatform *fake_platform)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (fake_platform);
+
+ priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ priv->links = g_array_new (TRUE, TRUE, sizeof (NMFakePlatformLink));
+ priv->ip4_addresses = g_array_new (TRUE, TRUE, sizeof (NMPlatformIP4Address));
+ priv->ip6_addresses = g_array_new (TRUE, TRUE, sizeof (NMPlatformIP6Address));
+ priv->ip4_routes = g_array_new (TRUE, TRUE, sizeof (NMPlatformIP4Route));
+ priv->ip6_routes = g_array_new (TRUE, TRUE, sizeof (NMPlatformIP6Route));
+}
+
+static gboolean
+setup (NMPlatform *platform)
+{
+ /* skip zero element */
+ link_add (platform, NULL, NM_LINK_TYPE_NONE, NULL, 0);
+
+ /* add loopback interface */
+ link_add (platform, "lo", NM_LINK_TYPE_LOOPBACK, NULL, 0);
+
+ /* add some ethernets */
+ link_add (platform, "eth0", NM_LINK_TYPE_ETHERNET, NULL, 0);
+ link_add (platform, "eth1", NM_LINK_TYPE_ETHERNET, NULL, 0);
+ link_add (platform, "eth2", NM_LINK_TYPE_ETHERNET, NULL, 0);
+
+ return TRUE;
+}
+
+static void
+nm_fake_platform_finalize (GObject *object)
+{
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (object);
+ int i;
+
+ g_hash_table_unref (priv->options);
+ for (i = 0; i < priv->links->len; i++) {
+ NMFakePlatformLink *device = &g_array_index (priv->links, NMFakePlatformLink, i);
+
+ g_bytes_unref (device->address);
+ g_free (device->udi);
+ }
+ g_array_unref (priv->links);
+ g_array_unref (priv->ip4_addresses);
+ g_array_unref (priv->ip6_addresses);
+ g_array_unref (priv->ip4_routes);
+ g_array_unref (priv->ip6_routes);
+
+ G_OBJECT_CLASS (nm_fake_platform_parent_class)->finalize (object);
+}
+
+static void
+nm_fake_platform_class_init (NMFakePlatformClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMPlatformClass *platform_class = NM_PLATFORM_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMFakePlatformPrivate));
+
+ /* virtual methods */
+ object_class->finalize = nm_fake_platform_finalize;
+
+ platform_class->setup = setup;
+
+ platform_class->sysctl_set = sysctl_set;
+ platform_class->sysctl_get = sysctl_get;
+
+ platform_class->link_get = _nm_platform_link_get;
+ platform_class->link_get_all = link_get_all;
+ platform_class->link_add = link_add;
+ platform_class->link_delete = link_delete;
+ platform_class->link_get_ifindex = link_get_ifindex;
+ platform_class->link_get_name = link_get_name;
+ platform_class->link_get_type = link_get_type;
+ platform_class->link_get_type_name = link_get_type_name;
+
+ platform_class->link_set_up = link_set_up;
+ platform_class->link_set_down = link_set_down;
+ platform_class->link_set_arp = link_set_arp;
+ platform_class->link_set_noarp = link_set_noarp;
+ platform_class->link_is_up = link_is_up;
+ platform_class->link_is_connected = link_is_connected;
+ platform_class->link_uses_arp = link_uses_arp;
+
+ platform_class->link_set_address = link_set_address;
+ platform_class->link_get_address = link_get_address;
+ platform_class->link_get_mtu = link_get_mtu;
+ platform_class->link_set_mtu = link_set_mtu;
+
+ platform_class->link_get_physical_port_id = link_get_physical_port_id;
+ platform_class->link_get_wake_on_lan = link_get_wake_on_lan;
+
+ platform_class->link_supports_carrier_detect = link_supports_carrier_detect;
+ platform_class->link_supports_vlans = link_supports_vlans;
+
+ platform_class->link_enslave = link_enslave;
+ platform_class->link_release = link_release;
+ platform_class->link_get_master = link_get_master;
+ platform_class->master_set_option = master_set_option;
+ platform_class->master_get_option = master_get_option;
+ platform_class->slave_set_option = slave_set_option;
+ platform_class->slave_get_option = slave_get_option;
+
+ platform_class->vlan_add = vlan_add;
+ platform_class->vlan_get_info = vlan_get_info;
+ platform_class->vlan_set_ingress_map = vlan_set_ingress_map;
+ platform_class->vlan_set_egress_map = vlan_set_egress_map;
+
+ platform_class->infiniband_partition_add = infiniband_partition_add;
+
+ platform_class->veth_get_properties = veth_get_properties;
+ platform_class->tun_get_properties = tun_get_properties;
+ platform_class->macvlan_get_properties = macvlan_get_properties;
+ platform_class->vxlan_get_properties = vxlan_get_properties;
+ platform_class->gre_get_properties = gre_get_properties;
+
+ platform_class->wifi_get_capabilities = wifi_get_capabilities;
+ platform_class->wifi_get_bssid = wifi_get_bssid;
+ platform_class->wifi_get_ssid = wifi_get_ssid;
+ platform_class->wifi_get_frequency = wifi_get_frequency;
+ platform_class->wifi_get_quality = wifi_get_quality;
+ platform_class->wifi_get_rate = wifi_get_rate;
+ platform_class->wifi_get_mode = wifi_get_mode;
+ platform_class->wifi_set_mode = wifi_set_mode;
+ platform_class->wifi_find_frequency = wifi_find_frequency;
+ platform_class->wifi_indicate_addressing_running = wifi_indicate_addressing_running;
+
+ platform_class->mesh_get_channel = mesh_get_channel;
+ platform_class->mesh_set_channel = mesh_set_channel;
+ platform_class->mesh_set_ssid = mesh_set_ssid;
+
+ platform_class->ip4_address_get_all = ip4_address_get_all;
+ platform_class->ip6_address_get_all = ip6_address_get_all;
+ platform_class->ip4_address_add = ip4_address_add;
+ platform_class->ip6_address_add = ip6_address_add;
+ platform_class->ip4_address_delete = ip4_address_delete;
+ platform_class->ip6_address_delete = ip6_address_delete;
+ platform_class->ip4_address_exists = ip4_address_exists;
+ platform_class->ip6_address_exists = ip6_address_exists;
+
+ platform_class->ip4_route_get_all = ip4_route_get_all;
+ platform_class->ip6_route_get_all = ip6_route_get_all;
+ platform_class->ip4_route_add = ip4_route_add;
+ platform_class->ip6_route_add = ip6_route_add;
+ platform_class->ip4_route_delete = ip4_route_delete;
+ platform_class->ip6_route_delete = ip6_route_delete;
+ platform_class->ip4_route_exists = ip4_route_exists;
+ platform_class->ip6_route_exists = ip6_route_exists;
+}
diff --git a/src/platform/nm-fake-platform.h b/src/platform/nm-fake-platform.h
new file mode 100644
index 000000000..c9fa42eb6
--- /dev/null
+++ b/src/platform/nm-fake-platform.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-fake-platform.h - Fake platform interaction code for testing NetworkManager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ */
+
+#ifndef NM_FAKE_PLATFORM_H
+#define NM_FAKE_PLATFORM_H
+
+#include "nm-platform.h"
+
+#define NM_TYPE_FAKE_PLATFORM (nm_fake_platform_get_type ())
+#define NM_FAKE_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_FAKE_PLATFORM, NMFakePlatform))
+#define NM_FAKE_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_FAKE_PLATFORM, NMFakePlatformClass))
+#define NM_IS_FAKE_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_FAKE_PLATFORM))
+#define NM_IS_FAKE_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_FAKE_PLATFORM))
+#define NM_FAKE_PLATFORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_FAKE_PLATFORM, NMFakePlatformClass))
+
+/******************************************************************/
+
+typedef struct {
+ NMPlatform parent;
+} NMFakePlatform;
+
+typedef struct {
+ NMPlatformClass parent;
+} NMFakePlatformClass;
+
+/******************************************************************/
+
+GType nm_fake_platform_get_type (void);
+
+void nm_fake_platform_setup (void);
+
+#endif /* NM_FAKE_PLATFORM_H */
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
new file mode 100644
index 000000000..f73ff3207
--- /dev/null
+++ b/src/platform/nm-linux-platform.c
@@ -0,0 +1,4180 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-linux-platform.c - Linux kernel & udev network configuration layer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2012-2013 Red Hat, Inc.
+ */
+#include <config.h>
+
+#include <errno.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <fcntl.h>
+#include <dlfcn.h>
+#include <netinet/icmp6.h>
+#include <netinet/in.h>
+#include <linux/ip.h>
+#include <linux/if_arp.h>
+#include <linux/if_link.h>
+#include <linux/if_tun.h>
+#include <linux/if_tunnel.h>
+#include <sys/ioctl.h>
+#include <linux/sockios.h>
+#include <linux/ethtool.h>
+#include <linux/mii.h>
+#include <netlink/netlink.h>
+#include <netlink/object.h>
+#include <netlink/cache.h>
+#include <netlink/route/link.h>
+#include <netlink/route/link/vlan.h>
+#include <netlink/route/addr.h>
+#include <netlink/route/route.h>
+#include <gudev/gudev.h>
+
+#include "NetworkManagerUtils.h"
+#include "nm-linux-platform.h"
+#include "NetworkManagerUtils.h"
+#include "nm-utils.h"
+#include "nm-logging.h"
+#include "wifi/wifi-utils.h"
+#include "wifi/wifi-utils-wext.h"
+
+/* This is only included for the translation of VLAN flags */
+#include "nm-setting-vlan.h"
+
+#define debug(...) nm_log_dbg (LOGD_PLATFORM, __VA_ARGS__)
+#define warning(...) nm_log_warn (LOGD_PLATFORM, __VA_ARGS__)
+#define error(...) nm_log_err (LOGD_PLATFORM, __VA_ARGS__)
+
+
+struct libnl_vtable
+{
+ void *handle;
+
+ int (*f_nl_has_capability) (int capability);
+};
+
+
+typedef struct {
+ struct nl_sock *nlh;
+ struct nl_sock *nlh_event;
+ struct nl_cache *link_cache;
+ struct nl_cache *address_cache;
+ struct nl_cache *route_cache;
+ GIOChannel *event_channel;
+ guint event_id;
+
+ GUdevClient *udev_client;
+ GHashTable *udev_devices;
+
+ GHashTable *wifi_data;
+
+ int support_kernel_extended_ifa_flags;
+} NMLinuxPlatformPrivate;
+
+#define NM_LINUX_PLATFORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_LINUX_PLATFORM, NMLinuxPlatformPrivate))
+
+G_DEFINE_TYPE (NMLinuxPlatform, nm_linux_platform, NM_TYPE_PLATFORM)
+
+static const char *to_string_object (NMPlatform *platform, struct nl_object *obj);
+
+void
+nm_linux_platform_setup (void)
+{
+ nm_platform_setup (NM_TYPE_LINUX_PLATFORM);
+}
+
+/******************************************************************/
+
+static int
+_nl_f_nl_has_capability (int capability)
+{
+ return FALSE;
+}
+
+static struct libnl_vtable *
+_nl_get_vtable ()
+{
+ static struct libnl_vtable vtable;
+
+ if (G_UNLIKELY (!vtable.f_nl_has_capability)) {
+ void *handle;
+
+ handle = dlopen ("libnl-3.so", RTLD_LAZY | RTLD_NOLOAD);
+ if (handle) {
+ vtable.handle = handle;
+ vtable.f_nl_has_capability = dlsym (handle, "nl_has_capability");
+ }
+
+ if (!vtable.f_nl_has_capability)
+ vtable.f_nl_has_capability = &_nl_f_nl_has_capability;
+
+ g_return_val_if_fail (vtable.handle, &vtable);
+ }
+
+ return &vtable;
+}
+
+static gboolean
+_nl_has_capability (int capability)
+{
+ return (_nl_get_vtable ()->f_nl_has_capability) (capability);
+}
+
+/******************************************************************/
+
+static guint32
+_get_expiry (guint32 now_s, guint32 lifetime_s)
+{
+ gint64 t = ((gint64) now_s) + ((gint64) lifetime_s);
+
+ return MIN (t, NM_PLATFORM_LIFETIME_PERMANENT - 1);
+}
+
+/* The rtnl_addr object contains relative lifetimes @valid and @preferred
+ * that count in seconds, starting from the moment when the kernel constructed
+ * the netlink message.
+ *
+ * There is also a field rtnl_addr_last_update_time(), which is the absolute
+ * time in 1/100th of a second of clock_gettime (CLOCK_MONOTONIC) when the address
+ * was modified (wrapping every 497 days).
+ * Immediately at the time when the address was last modified, #NOW and @last_update_time
+ * are the same, so (only) in that case @valid and @preferred are anchored at @last_update_time.
+ * However, this is not true in general. As time goes by, whenever kernel sends a new address
+ * via netlink, the lifetimes keep counting down.
+ *
+ * As we cache the rtnl_addr object we must know the absolute expiries.
+ * As a hack, modify the relative timestamps valid and preferred into absolute
+ * timestamps of scale nm_utils_get_monotonic_timestamp_s().
+ **/
+static void
+_rtnl_addr_hack_lifetimes_rel_to_abs (struct rtnl_addr *rtnladdr)
+{
+ guint32 a_valid = rtnl_addr_get_valid_lifetime (rtnladdr);
+ guint32 a_preferred = rtnl_addr_get_preferred_lifetime (rtnladdr);
+ guint32 now;
+
+ if (a_valid == NM_PLATFORM_LIFETIME_PERMANENT &&
+ a_preferred == NM_PLATFORM_LIFETIME_PERMANENT)
+ return;
+
+ now = (guint32) nm_utils_get_monotonic_timestamp_s ();
+
+ if (a_preferred > a_valid)
+ a_preferred = a_valid;
+
+ if (a_valid != NM_PLATFORM_LIFETIME_PERMANENT)
+ rtnl_addr_set_valid_lifetime (rtnladdr, _get_expiry (now, a_valid));
+ rtnl_addr_set_preferred_lifetime (rtnladdr, _get_expiry (now, a_preferred));
+}
+
+/******************************************************************/
+
+/* libnl library workarounds and additions */
+
+/* Automatic deallocation of local variables */
+#define auto_nl_cache __attribute__((cleanup(put_nl_cache)))
+static void
+put_nl_cache (void *ptr)
+{
+ struct nl_cache **cache = ptr;
+
+ if (cache && *cache) {
+ nl_cache_free (*cache);
+ *cache = NULL;
+ }
+}
+
+#define auto_nl_object __attribute__((cleanup(put_nl_object)))
+static void
+put_nl_object (void *ptr)
+{
+ struct nl_object **object = ptr;
+
+ if (object && *object) {
+ nl_object_put (*object);
+ *object = NULL;
+ }
+}
+
+#define auto_nl_addr __attribute__((cleanup(put_nl_addr)))
+static void
+put_nl_addr (void *ptr)
+{
+ struct nl_addr **object = ptr;
+
+ if (object && *object) {
+ nl_addr_put (*object);
+ *object = NULL;
+ }
+}
+
+/*******************************************************************/
+
+/* wrap the libnl alloc functions and abort on out-of-memory*/
+
+static struct nl_addr *
+_nm_nl_addr_build (int family, const void *buf, size_t size)
+{
+ struct nl_addr *addr;
+
+ addr = nl_addr_build (family, (void *) buf, size);
+ if (!addr)
+ g_error ("nl_addr_build() failed with out of memory");
+
+ return addr;
+}
+
+static struct rtnl_link *
+_nm_rtnl_link_alloc (int ifindex, const char*name)
+{
+ struct rtnl_link *rtnllink;
+
+ rtnllink = rtnl_link_alloc ();
+ if (!rtnllink)
+ g_error ("rtnl_link_alloc() failed with out of memory");
+
+ if (ifindex > 0)
+ rtnl_link_set_ifindex (rtnllink, ifindex);
+ if (name)
+ rtnl_link_set_name (rtnllink, name);
+ return rtnllink;
+}
+
+static struct rtnl_addr *
+_nm_rtnl_addr_alloc (int ifindex)
+{
+ struct rtnl_addr *rtnladdr;
+
+ rtnladdr = rtnl_addr_alloc ();
+ if (!rtnladdr)
+ g_error ("rtnl_addr_alloc() failed with out of memory");
+ if (ifindex > 0)
+ rtnl_addr_set_ifindex (rtnladdr, ifindex);
+ return rtnladdr;
+}
+
+static struct rtnl_route *
+_nm_rtnl_route_alloc ()
+{
+ struct rtnl_route *rtnlroute = rtnl_route_alloc ();
+
+ if (!rtnlroute)
+ g_error ("rtnl_route_alloc() failed with out of memory");
+ return rtnlroute;
+}
+
+static struct rtnl_nexthop *
+_nm_rtnl_route_nh_alloc ()
+{
+ struct rtnl_nexthop *nexthop;
+
+ nexthop = rtnl_route_nh_alloc ();
+ if (!nexthop)
+ g_error ("rtnl_route_nh_alloc () failed with out of memory");
+ return nexthop;
+}
+
+/*******************************************************************/
+
+/* rtnl_addr_set_prefixlen fails to update the nl_addr prefixlen */
+static void
+nm_rtnl_addr_set_prefixlen (struct rtnl_addr *rtnladdr, int plen)
+{
+ struct nl_addr *nladdr;
+
+ rtnl_addr_set_prefixlen (rtnladdr, plen);
+
+ nladdr = rtnl_addr_get_local (rtnladdr);
+ if (nladdr)
+ nl_addr_set_prefixlen (nladdr, plen);
+}
+#define rtnl_addr_set_prefixlen nm_rtnl_addr_set_prefixlen
+
+typedef enum {
+ OBJECT_TYPE_UNKNOWN,
+ OBJECT_TYPE_LINK,
+ OBJECT_TYPE_IP4_ADDRESS,
+ OBJECT_TYPE_IP6_ADDRESS,
+ OBJECT_TYPE_IP4_ROUTE,
+ OBJECT_TYPE_IP6_ROUTE,
+ __OBJECT_TYPE_LAST,
+} ObjectType;
+
+static ObjectType
+object_type_from_nl_object (const struct nl_object *object)
+{
+ const char *type_str;
+
+ if (!object || !(type_str = nl_object_get_type (object)))
+ return OBJECT_TYPE_UNKNOWN;
+
+ if (!strcmp (type_str, "route/link"))
+ return OBJECT_TYPE_LINK;
+ else if (!strcmp (type_str, "route/addr")) {
+ switch (rtnl_addr_get_family ((struct rtnl_addr *) object)) {
+ case AF_INET:
+ return OBJECT_TYPE_IP4_ADDRESS;
+ case AF_INET6:
+ return OBJECT_TYPE_IP6_ADDRESS;
+ default:
+ return OBJECT_TYPE_UNKNOWN;
+ }
+ } else if (!strcmp (type_str, "route/route")) {
+ switch (rtnl_route_get_family ((struct rtnl_route *) object)) {
+ case AF_INET:
+ return OBJECT_TYPE_IP4_ROUTE;
+ case AF_INET6:
+ return OBJECT_TYPE_IP6_ROUTE;
+ default:
+ return OBJECT_TYPE_UNKNOWN;
+ }
+ } else
+ return OBJECT_TYPE_UNKNOWN;
+}
+
+static void
+_nl_link_family_unset (struct nl_object *obj, int *family)
+{
+ if (!obj || object_type_from_nl_object (obj) != OBJECT_TYPE_LINK)
+ *family = AF_UNSPEC;
+ else {
+ *family = rtnl_link_get_family ((struct rtnl_link *) obj);
+
+ /* Always explicitly set the family to AF_UNSPEC, even if rtnl_link_get_family() might
+ * already return %AF_UNSPEC. The reason is, that %AF_UNSPEC is the default family
+ * and libnl nl_object_identical() function will only succeed, if the family is
+ * explicitly set (which we cannot be sure, unless setting it). */
+ rtnl_link_set_family ((struct rtnl_link *) obj, AF_UNSPEC);
+ }
+}
+
+/* In our link cache, we coerce the family of all link objects to AF_UNSPEC.
+ * Thus, before searching for an object, we fixup @needle to have the right
+ * id (by resetting the family). */
+static struct nl_object *
+nm_nl_cache_search (struct nl_cache *cache, struct nl_object *needle)
+{
+ int family;
+ struct nl_object *obj;
+
+ _nl_link_family_unset (needle, &family);
+ obj = nl_cache_search (cache, needle);
+ if (family != AF_UNSPEC) {
+ /* restore the family of the @needle instance. If the family was
+ * unset before, we cannot make it unset again. Thus, in that case
+ * we cannot undo _nl_link_family_unset() entirely. */
+ rtnl_link_set_family ((struct rtnl_link *) needle, family);
+ }
+
+ return obj;
+}
+
+/* Ask the kernel for an object identical (as in nl_cache_identical) to the
+ * needle argument. This is a kernel counterpart for nl_cache_search.
+ *
+ * The returned object must be freed by the caller with nl_object_put().
+ */
+static struct nl_object *
+get_kernel_object (struct nl_sock *sock, struct nl_object *needle)
+{
+ struct nl_object *object = NULL;
+ ObjectType type = object_type_from_nl_object (needle);
+
+ switch (type) {
+ case OBJECT_TYPE_LINK:
+ {
+ int ifindex = rtnl_link_get_ifindex ((struct rtnl_link *) needle);
+ const char *name = rtnl_link_get_name ((struct rtnl_link *) needle);
+ int nle;
+
+ nle = rtnl_link_get_kernel (sock, ifindex, name, (struct rtnl_link **) &object);
+ switch (nle) {
+ case -NLE_SUCCESS:
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ name = rtnl_link_get_name ((struct rtnl_link *) object);
+ debug ("get_kernel_object for link: %s (%d, family %d)",
+ name ? name : "(unknown)",
+ rtnl_link_get_ifindex ((struct rtnl_link *) object),
+ rtnl_link_get_family ((struct rtnl_link *) object));
+ }
+
+ _nl_link_family_unset (object, &nle);
+ return object;
+ case -NLE_NODEV:
+ debug ("get_kernel_object for link %s (%d) had no result",
+ name ? name : "(unknown)", ifindex);
+ return NULL;
+ default:
+ error ("get_kernel_object for link %s (%d) failed: %s (%d)",
+ name ? name : "(unknown)", ifindex, nl_geterror (nle), nle);
+ return NULL;
+ }
+ }
+ case OBJECT_TYPE_IP4_ADDRESS:
+ case OBJECT_TYPE_IP6_ADDRESS:
+ case OBJECT_TYPE_IP4_ROUTE:
+ case OBJECT_TYPE_IP6_ROUTE:
+ /* Fallback to a one-time cache allocation. */
+ {
+ struct nl_cache *cache;
+ int nle;
+
+ /* FIXME: every time we refresh *one* object, we request an
+ * entire dump. E.g. check_cache_items() gets O(n2) complexitly. */
+
+ nle = nl_cache_alloc_and_fill (
+ nl_cache_ops_lookup (nl_object_get_type (needle)),
+ sock, &cache);
+ if (nle) {
+ error ("get_kernel_object for type %d failed: %s (%d)",
+ type, nl_geterror (nle), nle);
+ return NULL;
+ }
+
+ object = nl_cache_search (cache, needle);
+
+ nl_cache_free (cache);
+
+ if (object && (type == OBJECT_TYPE_IP4_ADDRESS || type == OBJECT_TYPE_IP6_ADDRESS))
+ _rtnl_addr_hack_lifetimes_rel_to_abs ((struct rtnl_addr *) object);
+
+ if (object)
+ debug ("get_kernel_object for type %d returned %p", type, object);
+ else
+ debug ("get_kernel_object for type %d had no result", type);
+ return object;
+ }
+ default:
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+}
+
+/* libnl 3.2 doesn't seem to provide such a generic way to add libnl-route objects. */
+static int
+add_kernel_object (struct nl_sock *sock, struct nl_object *object)
+{
+ switch (object_type_from_nl_object (object)) {
+ case OBJECT_TYPE_LINK:
+ return rtnl_link_add (sock, (struct rtnl_link *) object, NLM_F_CREATE);
+ case OBJECT_TYPE_IP4_ADDRESS:
+ case OBJECT_TYPE_IP6_ADDRESS:
+ return rtnl_addr_add (sock, (struct rtnl_addr *) object, NLM_F_CREATE | NLM_F_REPLACE);
+ case OBJECT_TYPE_IP4_ROUTE:
+ case OBJECT_TYPE_IP6_ROUTE:
+ return rtnl_route_add (sock, (struct rtnl_route *) object, NLM_F_CREATE | NLM_F_REPLACE);
+ default:
+ g_return_val_if_reached (-NLE_INVAL);
+ return -NLE_INVAL;
+ }
+}
+
+/* nm_rtnl_link_parse_info_data(): Re-fetches a link from the kernel
+ * and parses its IFLA_INFO_DATA using a caller-provided parser.
+ *
+ * Code is stolen from rtnl_link_get_kernel(), nl_pickup(), and link_msg_parser().
+ */
+
+typedef int (*NMNLInfoDataParser) (struct nlattr *info_data, gpointer parser_data);
+
+typedef struct {
+ NMNLInfoDataParser parser;
+ gpointer parser_data;
+} NMNLInfoDataClosure;
+
+static struct nla_policy info_data_link_policy[IFLA_MAX + 1] = {
+ [IFLA_LINKINFO] = { .type = NLA_NESTED },
+};
+
+static struct nla_policy info_data_link_info_policy[IFLA_INFO_MAX + 1] = {
+ [IFLA_INFO_DATA] = { .type = NLA_NESTED },
+};
+
+static int
+info_data_parser (struct nl_msg *msg, void *arg)
+{
+ NMNLInfoDataClosure *closure = arg;
+ struct nlmsghdr *n = nlmsg_hdr (msg);
+ struct nlattr *tb[IFLA_MAX + 1];
+ struct nlattr *li[IFLA_INFO_MAX + 1];
+ int err;
+
+ if (!nlmsg_valid_hdr (n, sizeof (struct ifinfomsg)))
+ return -NLE_MSG_TOOSHORT;
+
+ err = nlmsg_parse (n, sizeof (struct ifinfomsg), tb, IFLA_MAX, info_data_link_policy);
+ if (err < 0)
+ return err;
+
+ if (!tb[IFLA_LINKINFO])
+ return -NLE_MISSING_ATTR;
+
+ err = nla_parse_nested (li, IFLA_INFO_MAX, tb[IFLA_LINKINFO], info_data_link_info_policy);
+ if (err < 0)
+ return err;
+
+ if (!li[IFLA_INFO_DATA])
+ return -NLE_MISSING_ATTR;
+
+ return closure->parser (li[IFLA_INFO_DATA], closure->parser_data);
+}
+
+static int
+nm_rtnl_link_parse_info_data (struct nl_sock *sk, int ifindex,
+ NMNLInfoDataParser parser, gpointer parser_data)
+{
+ NMNLInfoDataClosure data = { .parser = parser, .parser_data = parser_data };
+ struct nl_msg *msg = NULL;
+ struct nl_cb *cb;
+ int err;
+
+ err = rtnl_link_build_get_request (ifindex, NULL, &msg);
+ if (err < 0)
+ return err;
+
+ err = nl_send_auto (sk, msg);
+ nlmsg_free (msg);
+ if (err < 0)
+ return err;
+
+ cb = nl_cb_clone (nl_socket_get_cb (sk));
+ if (cb == NULL)
+ return -NLE_NOMEM;
+ nl_cb_set (cb, NL_CB_VALID, NL_CB_CUSTOM, info_data_parser, &data);
+
+ err = nl_recvmsgs (sk, cb);
+ nl_cb_put (cb);
+ if (err < 0)
+ return err;
+
+ nl_wait_for_ack (sk);
+ return 0;
+}
+
+/******************************************************************/
+
+static gboolean
+ethtool_get (const char *name, gpointer edata)
+{
+ struct ifreq ifr;
+ int fd;
+
+ memset (&ifr, 0, sizeof (ifr));
+ strncpy (ifr.ifr_name, name, IFNAMSIZ);
+ ifr.ifr_data = edata;
+
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ error ("ethtool: Could not open socket.");
+ return FALSE;
+ }
+
+ if (ioctl (fd, SIOCETHTOOL, &ifr) < 0) {
+ debug ("ethtool: Request failed: %s", strerror (errno));
+ close (fd);
+ return FALSE;
+ }
+
+ close (fd);
+ return TRUE;
+}
+
+static int
+ethtool_get_stringset_index (const char *ifname, int stringset_id, const char *string)
+{
+ auto_g_free struct ethtool_sset_info *info = NULL;
+ auto_g_free struct ethtool_gstrings *strings = NULL;
+ guint32 len, i;
+
+ info = g_malloc0 (sizeof (*info) + sizeof (guint32));
+ info->cmd = ETHTOOL_GSSET_INFO;
+ info->reserved = 0;
+ info->sset_mask = 1ULL << stringset_id;
+
+ if (!ethtool_get (ifname, info))
+ return -1;
+ if (!info->sset_mask)
+ return -1;
+
+ len = info->data[0];
+
+ strings = g_malloc0 (sizeof (*strings) + len * ETH_GSTRING_LEN);
+ strings->cmd = ETHTOOL_GSTRINGS;
+ strings->string_set = stringset_id;
+ strings->len = len;
+ if (!ethtool_get (ifname, strings))
+ return -1;
+
+ for (i = 0; i < len; i++) {
+ if (!strcmp ((char *) &strings->data[i * ETH_GSTRING_LEN], string))
+ return i;
+ }
+
+ return -1;
+}
+
+/******************************************************************/
+
+static void
+_check_support_kernel_extended_ifa_flags_init (NMLinuxPlatformPrivate *priv, struct nl_msg *msg)
+{
+ struct nlmsghdr *msg_hdr = nlmsg_hdr (msg);
+
+ g_return_if_fail (priv->support_kernel_extended_ifa_flags == 0);
+ g_return_if_fail (msg_hdr->nlmsg_type == RTM_NEWADDR);
+
+ /* the extended address flags are only set for AF_INET6 */
+ if (((struct ifaddrmsg *) nlmsg_data (msg_hdr))->ifa_family != AF_INET6)
+ return;
+
+ /* see if the nl_msg contains the IFA_FLAGS attribute. If it does,
+ * we assume, that the kernel supports extended flags, IFA_F_MANAGETEMPADDR
+ * and IFA_F_NOPREFIXROUTE (they were added together).
+ **/
+ priv->support_kernel_extended_ifa_flags =
+ nlmsg_find_attr (msg_hdr, sizeof (struct ifaddrmsg), 8 /* IFA_FLAGS */)
+ ? 1 : -1;
+}
+
+static gboolean
+check_support_kernel_extended_ifa_flags (NMPlatform *platform)
+{
+ NMLinuxPlatformPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_LINUX_PLATFORM (platform), FALSE);
+
+ priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+
+ if (priv->support_kernel_extended_ifa_flags == 0) {
+ nm_log_warn (LOGD_PLATFORM, "Unable to detect kernel support for extended IFA_FLAGS. Assume no kernel support.");
+ priv->support_kernel_extended_ifa_flags = -1;
+ }
+
+ return priv->support_kernel_extended_ifa_flags > 0;
+}
+
+
+/* Object type specific utilities */
+
+static const char *
+type_to_string (NMLinkType type)
+{
+ /* Note that this only has to support virtual types */
+ switch (type) {
+ case NM_LINK_TYPE_DUMMY:
+ return "dummy";
+ case NM_LINK_TYPE_GRE:
+ return "gre";
+ case NM_LINK_TYPE_GRETAP:
+ return "gretap";
+ case NM_LINK_TYPE_IFB:
+ return "ifb";
+ case NM_LINK_TYPE_MACVLAN:
+ return "macvlan";
+ case NM_LINK_TYPE_MACVTAP:
+ return "macvtap";
+ case NM_LINK_TYPE_TAP:
+ return "tap";
+ case NM_LINK_TYPE_TUN:
+ return "tun";
+ case NM_LINK_TYPE_VETH:
+ return "veth";
+ case NM_LINK_TYPE_VLAN:
+ return "vlan";
+ case NM_LINK_TYPE_VXLAN:
+ return "vxlan";
+ case NM_LINK_TYPE_BRIDGE:
+ return "bridge";
+ case NM_LINK_TYPE_BOND:
+ return "bond";
+ case NM_LINK_TYPE_TEAM:
+ return "team";
+ default:
+ g_warning ("Wrong type: %d", type);
+ return NULL;
+ }
+}
+
+#define return_type(t, name) \
+ G_STMT_START { \
+ if (out_name) \
+ *out_name = name; \
+ return t; \
+ } G_STMT_END
+
+static NMLinkType
+link_type_from_udev (NMPlatform *platform, int ifindex, const char *ifname, int arptype, const char **out_name)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ GUdevDevice *udev_device;
+ const char *prop, *sysfs_path;
+
+ g_assert (ifname);
+
+ udev_device = g_hash_table_lookup (priv->udev_devices, GINT_TO_POINTER (ifindex));
+ if (!udev_device)
+ return_type (NM_LINK_TYPE_UNKNOWN, "unknown");
+
+ if ( g_udev_device_get_property (udev_device, "ID_NM_OLPC_MESH")
+ || g_udev_device_get_sysfs_attr (udev_device, "anycast_mask"))
+ return_type (NM_LINK_TYPE_OLPC_MESH, "olpc-mesh");
+
+ prop = g_udev_device_get_property (udev_device, "DEVTYPE");
+ sysfs_path = g_udev_device_get_sysfs_path (udev_device);
+ if (g_strcmp0 (prop, "wlan") == 0 || wifi_utils_is_wifi (ifname, sysfs_path))
+ return_type (NM_LINK_TYPE_WIFI, "wifi");
+ else if (g_strcmp0 (prop, "wwan") == 0)
+ return_type (NM_LINK_TYPE_WWAN_ETHERNET, "wwan");
+ else if (g_strcmp0 (prop, "wimax") == 0)
+ return_type (NM_LINK_TYPE_WIMAX, "wimax");
+
+ if (arptype == ARPHRD_ETHER)
+ return_type (NM_LINK_TYPE_ETHERNET, "ethernet");
+
+ return_type (NM_LINK_TYPE_UNKNOWN, "unknown");
+}
+
+static gboolean
+link_is_software (struct rtnl_link *rtnllink)
+{
+ const char *type;
+
+ /* FIXME: replace somehow with NMLinkType or nm_platform_is_software(), but
+ * solve the infinite callstack problems that getting the type of a TUN/TAP
+ * device causes.
+ */
+
+ if ( rtnl_link_get_arptype (rtnllink) == ARPHRD_INFINIBAND
+ && strchr (rtnl_link_get_name (rtnllink), '.'))
+ return TRUE;
+
+ type = rtnl_link_get_type (rtnllink);
+ if (type == NULL)
+ return FALSE;
+
+ if (!strcmp (type, "dummy") ||
+ !strcmp (type, "gre") ||
+ !strcmp (type, "gretap") ||
+ !strcmp (type, "macvlan") ||
+ !strcmp (type, "macvtap") ||
+ !strcmp (type, "tun") ||
+ !strcmp (type, "veth") ||
+ !strcmp (type, "vlan") ||
+ !strcmp (type, "vxlan") ||
+ !strcmp (type, "bridge") ||
+ !strcmp (type, "bond") ||
+ !strcmp (type, "team"))
+ return TRUE;
+
+ return FALSE;
+}
+
+static const char *
+ethtool_get_driver (const char *ifname)
+{
+ struct ethtool_drvinfo drvinfo = { 0 };
+
+ g_return_val_if_fail (ifname != NULL, NULL);
+
+ drvinfo.cmd = ETHTOOL_GDRVINFO;
+ if (!ethtool_get (ifname, &drvinfo))
+ return NULL;
+
+ if (!*drvinfo.driver)
+ return NULL;
+
+ return g_intern_string (drvinfo.driver);
+}
+
+static gboolean
+link_is_announceable (NMPlatform *platform, struct rtnl_link *rtnllink)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+
+ /* Software devices are always visible outside the platform */
+ if (link_is_software (rtnllink))
+ return TRUE;
+
+ /* Hardware devices must be found by udev so rules get run and tags set */
+ if (g_hash_table_lookup (priv->udev_devices,
+ GINT_TO_POINTER (rtnl_link_get_ifindex (rtnllink))))
+ return TRUE;
+
+ return FALSE;
+}
+
+static NMLinkType
+link_extract_type (NMPlatform *platform, struct rtnl_link *rtnllink, const char **out_name)
+{
+ const char *type;
+
+ if (!rtnllink)
+ return_type (NM_LINK_TYPE_NONE, NULL);
+
+ type = rtnl_link_get_type (rtnllink);
+
+ if (!type) {
+ int arptype = rtnl_link_get_arptype (rtnllink);
+ const char *driver;
+ const char *ifname;
+
+ if (arptype == ARPHRD_LOOPBACK)
+ return_type (NM_LINK_TYPE_LOOPBACK, "loopback");
+ else if (arptype == ARPHRD_INFINIBAND)
+ return_type (NM_LINK_TYPE_INFINIBAND, "infiniband");
+
+ ifname = rtnl_link_get_name (rtnllink);
+ if (!ifname)
+ return_type (NM_LINK_TYPE_UNKNOWN, type);
+
+ if (arptype == 256) {
+ /* Some s390 CTC-type devices report 256 for the encapsulation type
+ * for some reason, but we need to call them Ethernet. FIXME: use
+ * something other than interface name to detect CTC here.
+ */
+ if (g_str_has_prefix (ifname, "ctc"))
+ return_type (NM_LINK_TYPE_ETHERNET, "ethernet");
+ }
+
+ driver = ethtool_get_driver (ifname);
+ if (!g_strcmp0 (driver, "openvswitch"))
+ return_type (NM_LINK_TYPE_OPENVSWITCH, "openvswitch");
+
+ return link_type_from_udev (platform,
+ rtnl_link_get_ifindex (rtnllink),
+ ifname,
+ arptype,
+ out_name);
+ } else if (!strcmp (type, "dummy"))
+ return_type (NM_LINK_TYPE_DUMMY, "dummy");
+ else if (!strcmp (type, "gre"))
+ return_type (NM_LINK_TYPE_GRE, "gre");
+ else if (!strcmp (type, "gretap"))
+ return_type (NM_LINK_TYPE_GRETAP, "gretap");
+ else if (!strcmp (type, "ifb"))
+ return_type (NM_LINK_TYPE_IFB, "ifb");
+ else if (!strcmp (type, "macvlan"))
+ return_type (NM_LINK_TYPE_MACVLAN, "macvlan");
+ else if (!strcmp (type, "macvtap"))
+ return_type (NM_LINK_TYPE_MACVTAP, "macvtap");
+ else if (!strcmp (type, "tun")) {
+ NMPlatformTunProperties props;
+ guint flags;
+
+ if (nm_platform_tun_get_properties (rtnl_link_get_ifindex (rtnllink), &props)) {
+ if (!g_strcmp0 (props.mode, "tap"))
+ return_type (NM_LINK_TYPE_TAP, "tap");
+ if (!g_strcmp0 (props.mode, "tun"))
+ return_type (NM_LINK_TYPE_TUN, "tun");
+ }
+ flags = rtnl_link_get_flags (rtnllink);
+
+ nm_log_dbg (LOGD_PLATFORM, "Failed to read tun properties for interface %d (link flags: %X)",
+ rtnl_link_get_ifindex (rtnllink), flags);
+
+ /* try guessing the type using the link flags instead... */
+ if (flags & IFF_POINTOPOINT)
+ return_type (NM_LINK_TYPE_TUN, "tun");
+ return_type (NM_LINK_TYPE_TAP, "tap");
+ } else if (!strcmp (type, "veth"))
+ return_type (NM_LINK_TYPE_VETH, "veth");
+ else if (!strcmp (type, "vlan"))
+ return_type (NM_LINK_TYPE_VLAN, "vlan");
+ else if (!strcmp (type, "vxlan"))
+ return_type (NM_LINK_TYPE_VXLAN, "vxlan");
+ else if (!strcmp (type, "bridge"))
+ return_type (NM_LINK_TYPE_BRIDGE, "bridge");
+ else if (!strcmp (type, "bond"))
+ return_type (NM_LINK_TYPE_BOND, "bond");
+ else if (!strcmp (type, "team"))
+ return_type (NM_LINK_TYPE_TEAM, "team");
+
+ return_type (NM_LINK_TYPE_UNKNOWN, type);
+}
+
+static const char *
+udev_get_driver (NMPlatform *platform, GUdevDevice *device, int ifindex)
+{
+ GUdevDevice *parent = NULL, *grandparent = NULL;
+ const char *driver, *subsys;
+
+ driver = g_udev_device_get_driver (device);
+ if (driver)
+ return driver;
+
+ /* Try the parent */
+ parent = g_udev_device_get_parent (device);
+ if (parent) {
+ driver = g_udev_device_get_driver (parent);
+ if (!driver) {
+ /* Try the grandparent if it's an ibmebus device or if the
+ * subsys is NULL which usually indicates some sort of
+ * platform device like a 'gadget' net interface.
+ */
+ subsys = g_udev_device_get_subsystem (parent);
+ if ( (g_strcmp0 (subsys, "ibmebus") == 0)
+ || (subsys == NULL)) {
+ grandparent = g_udev_device_get_parent (parent);
+ if (grandparent) {
+ driver = g_udev_device_get_driver (grandparent);
+ }
+ }
+ }
+ }
+
+ /* Intern the string so we don't have to worry about memory
+ * management in NMPlatformLink.
+ */
+ if (driver)
+ driver = g_intern_string (driver);
+
+ g_clear_object (&parent);
+ g_clear_object (&grandparent);
+
+ return driver;
+}
+
+static gboolean
+init_link (NMPlatform *platform, NMPlatformLink *info, struct rtnl_link *rtnllink)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ GUdevDevice *udev_device;
+ const char *name;
+
+ g_return_val_if_fail (rtnllink, FALSE);
+
+ name = rtnl_link_get_name (rtnllink);
+ memset (info, 0, sizeof (*info));
+
+ info->ifindex = rtnl_link_get_ifindex (rtnllink);
+ if (name)
+ g_strlcpy (info->name, name, sizeof (info->name));
+ else
+ info->name[0] = '\0';
+ info->type = link_extract_type (platform, rtnllink, &info->type_name);
+ info->up = !!(rtnl_link_get_flags (rtnllink) & IFF_UP);
+ info->connected = !!(rtnl_link_get_flags (rtnllink) & IFF_LOWER_UP);
+ info->arp = !(rtnl_link_get_flags (rtnllink) & IFF_NOARP);
+ info->master = rtnl_link_get_master (rtnllink);
+ info->parent = rtnl_link_get_link (rtnllink);
+ info->mtu = rtnl_link_get_mtu (rtnllink);
+
+ udev_device = g_hash_table_lookup (priv->udev_devices, GINT_TO_POINTER (info->ifindex));
+ if (udev_device) {
+ info->driver = udev_get_driver (platform, udev_device, info->ifindex);
+ if (!info->driver)
+ info->driver = rtnl_link_get_type (rtnllink);
+ if (!info->driver)
+ info->driver = ethtool_get_driver (info->name);
+ if (!info->driver)
+ info->driver = "unknown";
+ info->udi = g_udev_device_get_sysfs_path (udev_device);
+ }
+
+ return TRUE;
+}
+
+/* Hack: Empty bridges and bonds have IFF_LOWER_UP flag and therefore they break
+ * the carrier detection. This hack makes nm-platform think they don't have the
+ * IFF_LOWER_UP flag. This seems to also apply to bonds (specifically) with all
+ * slaves down.
+ *
+ * Note: This is still a bit racy but when NetworkManager asks for enslaving a slave,
+ * nm-platform will do that synchronously and will immediately ask for both master
+ * and slave information after the enslaving request. After the synchronous call, the
+ * master carrier is already updated with the slave carrier in mind.
+ *
+ * https://bugzilla.redhat.com/show_bug.cgi?id=910348
+ */
+static void
+hack_empty_master_iff_lower_up (NMPlatform *platform, struct nl_object *object)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ struct rtnl_link *rtnllink;
+ int ifindex;
+ struct nl_object *slave;
+ const char *type;
+
+ if (!object)
+ return;
+ if (strcmp (nl_object_get_type (object), "route/link"))
+ return;
+
+ rtnllink = (struct rtnl_link *) object;
+
+ ifindex = rtnl_link_get_ifindex (rtnllink);
+
+ type = rtnl_link_get_type (rtnllink);
+ if (!type || (strcmp (type, "bridge") != 0 && strcmp (type, "bond") != 0))
+ return;
+
+ for (slave = nl_cache_get_first (priv->link_cache); slave; slave = nl_cache_get_next (slave)) {
+ struct rtnl_link *rtnlslave = (struct rtnl_link *) slave;
+ if (rtnl_link_get_master (rtnlslave) == ifindex
+ && rtnl_link_get_flags (rtnlslave) & IFF_LOWER_UP)
+ return;
+ }
+
+ rtnl_link_unset_flags (rtnllink, IFF_LOWER_UP);
+}
+
+static guint32
+_get_remaining_time (guint32 start_timestamp, guint32 end_timestamp)
+{
+ /* Return the remaining time between @start_timestamp until @end_timestamp.
+ *
+ * If @end_timestamp is NM_PLATFORM_LIFETIME_PERMANENT, it returns
+ * NM_PLATFORM_LIFETIME_PERMANENT. If @start_timestamp already passed
+ * @end_timestamp it returns 0. Beware, NMPlatformIPAddress treats a @lifetime
+ * of 0 as permanent.
+ */
+ if (end_timestamp == NM_PLATFORM_LIFETIME_PERMANENT)
+ return NM_PLATFORM_LIFETIME_PERMANENT;
+ if (start_timestamp >= end_timestamp)
+ return 0;
+ return end_timestamp - start_timestamp;
+}
+
+/* _timestamp_nl_to_ms:
+ * @timestamp_nl: a timestamp from ifa_cacheinfo.
+ * @monotonic_ms: *now* in CLOCK_MONOTONIC. Needed to estimate the current
+ * uptime and how often timestamp_nl wrapped.
+ *
+ * Convert the timestamp from ifa_cacheinfo to CLOCK_MONOTONIC milliseconds.
+ * The ifa_cacheinfo fields tstamp and cstamp contains timestamps that counts
+ * with in 1/100th of a second of clock_gettime(CLOCK_MONOTONIC). However,
+ * the uint32 counter wraps every 497 days of uptime, so we have to compensate
+ * for that. */
+static gint64
+_timestamp_nl_to_ms (guint32 timestamp_nl, gint64 monotonic_ms)
+{
+ const gint64 WRAP_INTERVAL = (((gint64) G_MAXUINT32) + 1) * (1000 / 100);
+ gint64 timestamp_nl_ms;
+
+ /* convert timestamp from 1/100th of a second to msec. */
+ timestamp_nl_ms = ((gint64) timestamp_nl) * (1000 / 100);
+
+ /* timestamp wraps every 497 days. Try to compensate for that.*/
+ if (timestamp_nl_ms > monotonic_ms) {
+ /* timestamp_nl_ms is in the future. Truncate it to *now* */
+ timestamp_nl_ms = monotonic_ms;
+ } else if (monotonic_ms >= WRAP_INTERVAL) {
+ timestamp_nl_ms += (monotonic_ms / WRAP_INTERVAL) * WRAP_INTERVAL;
+ if (timestamp_nl_ms > monotonic_ms)
+ timestamp_nl_ms -= WRAP_INTERVAL;
+ }
+
+ return timestamp_nl_ms;
+}
+
+static guint32
+_rtnl_addr_last_update_time_to_nm (const struct rtnl_addr *rtnladdr)
+{
+ guint32 last_update_time = rtnl_addr_get_last_update_time ((struct rtnl_addr *) rtnladdr);
+ struct timespec tp;
+ gint64 now_nl, now_nm, result;
+
+ /* timestamp is unset. Default to 1. */
+ if (!last_update_time)
+ return 1;
+
+ /* do all the calculations in milliseconds scale */
+
+ clock_gettime (CLOCK_MONOTONIC, &tp);
+ now_nm = nm_utils_get_monotonic_timestamp_ms ();
+ now_nl = (((gint64) tp.tv_sec) * ((gint64) 1000)) +
+ (tp.tv_nsec / (NM_UTILS_NS_PER_SECOND/1000));
+
+ result = now_nm - (now_nl - _timestamp_nl_to_ms (last_update_time, now_nl));
+
+ /* converting the last_update_time into nm_utils_get_monotonic_timestamp_ms() scale is
+ * a good guess but fails in the following situations:
+ *
+ * - If the address existed before start of the process, the timestamp in nm scale would
+ * be negative or zero. In this case we default to 1.
+ * - during hibernation, the CLOCK_MONOTONIC/last_update_time drifts from
+ * nm_utils_get_monotonic_timestamp_ms() scale.
+ */
+ if (result <= 1000)
+ return 1;
+
+ if (result > now_nm)
+ return now_nm / 1000;
+
+ return result / 1000;
+}
+
+static void
+_init_ip_address_lifetime (NMPlatformIPAddress *address, const struct rtnl_addr *rtnladdr)
+{
+ guint32 a_valid = rtnl_addr_get_valid_lifetime ((struct rtnl_addr *) rtnladdr);
+ guint32 a_preferred = rtnl_addr_get_preferred_lifetime ((struct rtnl_addr *) rtnladdr);
+
+ /* the meaning of the valid and preferred lifetimes is different from the
+ * original meaning. See _rtnl_addr_hack_lifetimes_rel_to_abs().
+ * Beware: this function expects hacked rtnl_addr objects.
+ */
+
+ if (a_valid == NM_PLATFORM_LIFETIME_PERMANENT &&
+ a_preferred == NM_PLATFORM_LIFETIME_PERMANENT) {
+ address->timestamp = 0;
+ address->lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
+ address->preferred = NM_PLATFORM_LIFETIME_PERMANENT;
+ return;
+ }
+
+ /* The valies are hacked and absolute expiry times. They must
+ * be positive and preferred<=valid. */
+ g_assert (a_preferred <= a_valid &&
+ a_valid > 0 &&
+ a_preferred > 0);
+
+ if (a_valid <= 1) {
+ /* Since we want to have positive @timestamp and @valid != 0,
+ * we must handle this case special. */
+ address->timestamp = 1;
+ address->lifetime = 1; /* Extend the lifetime by one second */
+ address->preferred = 0; /* no longer preferred. */
+ return;
+ }
+
+ /* _rtnl_addr_last_update_time_to_nm() might be wrong, so don't rely on
+ * timestamp to have any meaning beyond anchoring the relative durations
+ * @lifetime and @preferred.
+ */
+ address->timestamp = _rtnl_addr_last_update_time_to_nm (rtnladdr);
+
+ /* We would expect @timestamp to be less then @a_valid. Just to be sure,
+ * fix it up. */
+ address->timestamp = MIN (address->timestamp, a_valid - 1);
+ address->lifetime = _get_remaining_time (address->timestamp, a_valid);
+ address->preferred = _get_remaining_time (address->timestamp, a_preferred);
+}
+
+static gboolean
+init_ip4_address (NMPlatformIP4Address *address, struct rtnl_addr *rtnladdr)
+{
+ struct nl_addr *nladdr = rtnl_addr_get_local (rtnladdr);
+ struct nl_addr *nlpeer = rtnl_addr_get_peer (rtnladdr);
+ const char *label;
+
+ g_return_val_if_fail (nladdr, FALSE);
+
+ memset (address, 0, sizeof (*address));
+
+ address->source = NM_PLATFORM_SOURCE_KERNEL;
+ address->ifindex = rtnl_addr_get_ifindex (rtnladdr);
+ address->plen = rtnl_addr_get_prefixlen (rtnladdr);
+ _init_ip_address_lifetime ((NMPlatformIPAddress *) address, rtnladdr);
+ if (!nladdr || nl_addr_get_len (nladdr) != sizeof (address->address)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&address->address, nl_addr_get_binary_addr (nladdr), sizeof (address->address));
+ if (nlpeer) {
+ if (nl_addr_get_len (nlpeer) != sizeof (address->peer_address)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&address->peer_address, nl_addr_get_binary_addr (nlpeer), sizeof (address->peer_address));
+ }
+ label = rtnl_addr_get_label (rtnladdr);
+ /* Check for ':'; we're only interested in labels used as interface aliases */
+ if (label && strchr (label, ':'))
+ g_strlcpy (address->label, label, sizeof (address->label));
+
+ return TRUE;
+}
+
+static gboolean
+init_ip6_address (NMPlatformIP6Address *address, struct rtnl_addr *rtnladdr)
+{
+ struct nl_addr *nladdr = rtnl_addr_get_local (rtnladdr);
+ struct nl_addr *nlpeer = rtnl_addr_get_peer (rtnladdr);
+
+ memset (address, 0, sizeof (*address));
+
+ address->source = NM_PLATFORM_SOURCE_KERNEL;
+ address->ifindex = rtnl_addr_get_ifindex (rtnladdr);
+ address->plen = rtnl_addr_get_prefixlen (rtnladdr);
+ _init_ip_address_lifetime ((NMPlatformIPAddress *) address, rtnladdr);
+ address->flags = rtnl_addr_get_flags (rtnladdr);
+ if (!nladdr || nl_addr_get_len (nladdr) != sizeof (address->address)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&address->address, nl_addr_get_binary_addr (nladdr), sizeof (address->address));
+ if (nlpeer) {
+ if (nl_addr_get_len (nlpeer) != sizeof (address->peer_address)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&address->peer_address, nl_addr_get_binary_addr (nlpeer), sizeof (address->peer_address));
+ }
+
+ return TRUE;
+}
+
+static guint
+source_to_rtprot (NMPlatformSource source)
+{
+ switch (source) {
+ case NM_PLATFORM_SOURCE_UNKNOWN:
+ return RTPROT_UNSPEC;
+ case NM_PLATFORM_SOURCE_KERNEL:
+ return RTPROT_KERNEL;
+ case NM_PLATFORM_SOURCE_DHCP:
+ return RTPROT_DHCP;
+ case NM_PLATFORM_SOURCE_RDISC:
+ return RTPROT_RA;
+
+ default:
+ return RTPROT_STATIC;
+ }
+}
+
+static NMPlatformSource
+rtprot_to_source (guint rtprot)
+{
+ switch (rtprot) {
+ case RTPROT_UNSPEC:
+ return NM_PLATFORM_SOURCE_UNKNOWN;
+ case RTPROT_REDIRECT:
+ case RTPROT_KERNEL:
+ return NM_PLATFORM_SOURCE_KERNEL;
+ case RTPROT_RA:
+ return NM_PLATFORM_SOURCE_RDISC;
+ case RTPROT_DHCP:
+ return NM_PLATFORM_SOURCE_DHCP;
+
+ default:
+ return NM_PLATFORM_SOURCE_USER;
+ }
+}
+
+static gboolean
+init_ip4_route (NMPlatformIP4Route *route, struct rtnl_route *rtnlroute)
+{
+ struct nl_addr *dst, *gw;
+ struct rtnl_nexthop *nexthop;
+
+ memset (route, 0, sizeof (*route));
+
+ /* Multi-hop routes not supported. */
+ if (rtnl_route_get_nnexthops (rtnlroute) != 1)
+ return FALSE;
+
+ nexthop = rtnl_route_nexthop_n (rtnlroute, 0);
+ dst = rtnl_route_get_dst (rtnlroute);
+ gw = rtnl_route_nh_get_gateway (nexthop);
+
+ route->ifindex = rtnl_route_nh_get_ifindex (nexthop);
+ route->plen = nl_addr_get_prefixlen (dst);
+ /* Workaround on previous workaround for libnl default route prefixlen bug. */
+ if (nl_addr_get_len (dst)) {
+ if (nl_addr_get_len (dst) != sizeof (route->network)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&route->network, nl_addr_get_binary_addr (dst), sizeof (route->network));
+ }
+ if (gw) {
+ if (nl_addr_get_len (gw) != sizeof (route->network)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&route->gateway, nl_addr_get_binary_addr (gw), sizeof (route->gateway));
+ }
+ route->metric = rtnl_route_get_priority (rtnlroute);
+ rtnl_route_get_metric (rtnlroute, RTAX_ADVMSS, &route->mss);
+ route->source = rtprot_to_source (rtnl_route_get_protocol (rtnlroute));
+
+ return TRUE;
+}
+
+static gboolean
+init_ip6_route (NMPlatformIP6Route *route, struct rtnl_route *rtnlroute)
+{
+ struct nl_addr *dst, *gw;
+ struct rtnl_nexthop *nexthop;
+
+ memset (route, 0, sizeof (*route));
+
+ /* Multi-hop routes not supported. */
+ if (rtnl_route_get_nnexthops (rtnlroute) != 1)
+ return FALSE;
+
+ nexthop = rtnl_route_nexthop_n (rtnlroute, 0);
+ dst = rtnl_route_get_dst (rtnlroute);
+ gw = rtnl_route_nh_get_gateway (nexthop);
+
+ route->ifindex = rtnl_route_nh_get_ifindex (nexthop);
+ route->plen = nl_addr_get_prefixlen (dst);
+ /* Workaround on previous workaround for libnl default route prefixlen bug. */
+ if (nl_addr_get_len (dst)) {
+ if (nl_addr_get_len (dst) != sizeof (route->network)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&route->network, nl_addr_get_binary_addr (dst), sizeof (route->network));
+ }
+ if (gw) {
+ if (nl_addr_get_len (gw) != sizeof (route->network)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+ memcpy (&route->gateway, nl_addr_get_binary_addr (gw), sizeof (route->gateway));
+ }
+ route->metric = rtnl_route_get_priority (rtnlroute);
+ rtnl_route_get_metric (rtnlroute, RTAX_ADVMSS, &route->mss);
+ route->source = rtprot_to_source (rtnl_route_get_protocol (rtnlroute));
+
+ return TRUE;
+}
+
+static char to_string_buffer[255];
+
+#define SET_AND_RETURN_STRING_BUFFER(...) \
+ G_STMT_START { \
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), ## __VA_ARGS__); \
+ g_return_val_if_reached (to_string_buffer); \
+ return to_string_buffer; \
+ } G_STMT_END
+
+static const char *
+to_string_link (NMPlatform *platform, struct rtnl_link *obj)
+{
+ NMPlatformLink pl_obj;
+
+ if (init_link (platform, &pl_obj, obj))
+ return nm_platform_link_to_string (&pl_obj);
+ SET_AND_RETURN_STRING_BUFFER ("(invalid link %p)", obj);
+}
+
+static const char *
+to_string_ip4_address (struct rtnl_addr *obj)
+{
+ NMPlatformIP4Address pl_obj;
+
+ if (init_ip4_address (&pl_obj, obj))
+ return nm_platform_ip4_address_to_string (&pl_obj);
+ SET_AND_RETURN_STRING_BUFFER ("(invalid ip4 address %p)", obj);
+}
+
+static const char *
+to_string_ip6_address (struct rtnl_addr *obj)
+{
+ NMPlatformIP6Address pl_obj;
+
+ if (init_ip6_address (&pl_obj, obj))
+ return nm_platform_ip6_address_to_string (&pl_obj);
+ SET_AND_RETURN_STRING_BUFFER ("(invalid ip6 address %p)", obj);
+}
+
+static const char *
+to_string_ip4_route (struct rtnl_route *obj)
+{
+ NMPlatformIP4Route pl_obj;
+
+ if (init_ip4_route (&pl_obj, obj))
+ return nm_platform_ip4_route_to_string (&pl_obj);
+ SET_AND_RETURN_STRING_BUFFER ("(invalid ip4 route %p)", obj);
+}
+
+static const char *
+to_string_ip6_route (struct rtnl_route *obj)
+{
+ NMPlatformIP6Route pl_obj;
+
+ if (init_ip6_route (&pl_obj, obj))
+ return nm_platform_ip6_route_to_string (&pl_obj);
+ SET_AND_RETURN_STRING_BUFFER ("(invalid ip6 route %p)", obj);
+}
+
+static const char *
+to_string_object_with_type (NMPlatform *platform, struct nl_object *obj, ObjectType type)
+{
+ switch (type) {
+ case OBJECT_TYPE_LINK:
+ return to_string_link (platform, (struct rtnl_link *) obj);
+ case OBJECT_TYPE_IP4_ADDRESS:
+ return to_string_ip4_address ((struct rtnl_addr *) obj);
+ case OBJECT_TYPE_IP6_ADDRESS:
+ return to_string_ip6_address ((struct rtnl_addr *) obj);
+ case OBJECT_TYPE_IP4_ROUTE:
+ return to_string_ip4_route ((struct rtnl_route *) obj);
+ case OBJECT_TYPE_IP6_ROUTE:
+ return to_string_ip6_route ((struct rtnl_route *) obj);
+ default:
+ SET_AND_RETURN_STRING_BUFFER ("(unknown netlink object %p)", obj);
+ }
+}
+
+static const char *
+to_string_object (NMPlatform *platform, struct nl_object *obj)
+{
+ return to_string_object_with_type (platform, obj, object_type_from_nl_object (obj));
+}
+
+#undef SET_AND_RETURN_STRING_BUFFER
+
+/******************************************************************/
+
+/* Object and cache manipulation */
+
+static const char *signal_by_type_and_status[__OBJECT_TYPE_LAST] = {
+ [OBJECT_TYPE_LINK] = NM_PLATFORM_SIGNAL_LINK_CHANGED,
+ [OBJECT_TYPE_IP4_ADDRESS] = NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
+ [OBJECT_TYPE_IP6_ADDRESS] = NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED,
+ [OBJECT_TYPE_IP4_ROUTE] = NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED,
+ [OBJECT_TYPE_IP6_ROUTE] = NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED,
+};
+
+static struct nl_cache *
+choose_cache_by_type (NMPlatform *platform, ObjectType object_type)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+
+ switch (object_type) {
+ case OBJECT_TYPE_LINK:
+ return priv->link_cache;
+ case OBJECT_TYPE_IP4_ADDRESS:
+ case OBJECT_TYPE_IP6_ADDRESS:
+ return priv->address_cache;
+ case OBJECT_TYPE_IP4_ROUTE:
+ case OBJECT_TYPE_IP6_ROUTE:
+ return priv->route_cache;
+ default:
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+}
+
+static struct nl_cache *
+choose_cache (NMPlatform *platform, struct nl_object *object)
+{
+ return choose_cache_by_type (platform, object_type_from_nl_object (object));
+}
+
+static gboolean
+object_has_ifindex (struct nl_object *object, int ifindex)
+{
+ switch (object_type_from_nl_object (object)) {
+ case OBJECT_TYPE_IP4_ADDRESS:
+ case OBJECT_TYPE_IP6_ADDRESS:
+ return ifindex == rtnl_addr_get_ifindex ((struct rtnl_addr *) object);
+ case OBJECT_TYPE_IP4_ROUTE:
+ case OBJECT_TYPE_IP6_ROUTE:
+ {
+ struct rtnl_route *rtnlroute = (struct rtnl_route *) object;
+ struct rtnl_nexthop *nexthop;
+
+ if (rtnl_route_get_nnexthops (rtnlroute) != 1)
+ return FALSE;
+ nexthop = rtnl_route_nexthop_n (rtnlroute, 0);
+
+ return ifindex == rtnl_route_nh_get_ifindex (nexthop);
+ }
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static gboolean refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed, NMPlatformReason reason);
+
+static void
+check_cache_items (NMPlatform *platform, struct nl_cache *cache, int ifindex)
+{
+ auto_nl_cache struct nl_cache *cloned_cache = nl_cache_clone (cache);
+ struct nl_object *object;
+ GPtrArray *objects_to_refresh = g_ptr_array_new_with_free_func ((GDestroyNotify) nl_object_put);
+ guint i;
+
+ for (object = nl_cache_get_first (cloned_cache); object; object = nl_cache_get_next (object)) {
+ if (object_has_ifindex (object, ifindex)) {
+ nl_object_get (object);
+ g_ptr_array_add (objects_to_refresh, object);
+ }
+ }
+
+ for (i = 0; i < objects_to_refresh->len; i++)
+ refresh_object (platform, objects_to_refresh->pdata[i], TRUE, NM_PLATFORM_REASON_CACHE_CHECK);
+
+ g_ptr_array_free (objects_to_refresh, TRUE);
+}
+
+static void
+announce_object (NMPlatform *platform, const struct nl_object *object, NMPlatformSignalChangeType change_type, NMPlatformReason reason)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ ObjectType object_type = object_type_from_nl_object (object);
+ const char *sig = signal_by_type_and_status[object_type];
+
+ switch (object_type) {
+ case OBJECT_TYPE_LINK:
+ {
+ NMPlatformLink device;
+ struct rtnl_link *rtnl_link = (struct rtnl_link *) object;
+
+ if (!init_link (platform, &device, rtnl_link))
+ return;
+
+ /* Skip hardware devices not yet discovered by udev. They will be
+ * announced by udev_device_added(). This doesn't apply to removed
+ * devices, as those come either from udev_device_removed(),
+ * event_notification() or link_delete() which block the announcment
+ * themselves when appropriate.
+ */
+ switch (change_type) {
+ case NM_PLATFORM_SIGNAL_ADDED:
+ case NM_PLATFORM_SIGNAL_CHANGED:
+ if (!link_is_software (rtnl_link) && !device.driver)
+ return;
+ break;
+ default:
+ break;
+ }
+
+ /* Link deletion or setting down is sometimes accompanied by address
+ * and/or route deletion.
+ *
+ * More precisely, kernel removes routes when interface goes !IFF_UP and
+ * removes both addresses and routes when interface is removed.
+ */
+ switch (change_type) {
+ case NM_PLATFORM_SIGNAL_CHANGED:
+ if (!device.connected)
+ check_cache_items (platform, priv->route_cache, device.ifindex);
+ break;
+ case NM_PLATFORM_SIGNAL_REMOVED:
+ check_cache_items (platform, priv->address_cache, device.ifindex);
+ check_cache_items (platform, priv->route_cache, device.ifindex);
+ g_hash_table_remove (priv->wifi_data, GINT_TO_POINTER (device.ifindex));
+ break;
+ default:
+ break;
+ }
+
+ g_signal_emit_by_name (platform, sig, device.ifindex, &device, change_type, reason);
+ }
+ return;
+ case OBJECT_TYPE_IP4_ADDRESS:
+ {
+ NMPlatformIP4Address address;
+
+ if (!init_ip4_address (&address, (struct rtnl_addr *) object))
+ return;
+
+ /* Address deletion is sometimes accompanied by route deletion. We need to
+ * check all routes belonging to the same interface.
+ */
+ switch (change_type) {
+ case NM_PLATFORM_SIGNAL_REMOVED:
+ check_cache_items (platform, priv->route_cache, address.ifindex);
+ break;
+ default:
+ break;
+ }
+
+ g_signal_emit_by_name (platform, sig, address.ifindex, &address, change_type, reason);
+ }
+ return;
+ case OBJECT_TYPE_IP6_ADDRESS:
+ {
+ NMPlatformIP6Address address;
+
+ if (!init_ip6_address (&address, (struct rtnl_addr *) object))
+ return;
+ g_signal_emit_by_name (platform, sig, address.ifindex, &address, change_type, reason);
+ }
+ return;
+ case OBJECT_TYPE_IP4_ROUTE:
+ {
+ NMPlatformIP4Route route;
+
+ if (init_ip4_route (&route, (struct rtnl_route *) object))
+ g_signal_emit_by_name (platform, sig, route.ifindex, &route, change_type, reason);
+ }
+ return;
+ case OBJECT_TYPE_IP6_ROUTE:
+ {
+ NMPlatformIP6Route route;
+
+ if (init_ip6_route (&route, (struct rtnl_route *) object))
+ g_signal_emit_by_name (platform, sig, route.ifindex, &route, change_type, reason);
+ }
+ return;
+ default:
+ g_return_if_reached ();
+ }
+}
+
+static struct nl_object * build_rtnl_link (int ifindex, const char *name, NMLinkType type);
+
+static gboolean
+refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed, NMPlatformReason reason)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ auto_nl_object struct nl_object *cached_object = NULL;
+ auto_nl_object struct nl_object *kernel_object = NULL;
+ struct nl_cache *cache;
+ int nle;
+
+ cache = choose_cache (platform, object);
+ cached_object = nm_nl_cache_search (cache, object);
+ kernel_object = get_kernel_object (priv->nlh, object);
+
+ if (removed) {
+ if (kernel_object)
+ return TRUE;
+
+ /* Only announce object if it was still in the cache. */
+ if (cached_object) {
+ nl_cache_remove (cached_object);
+
+ announce_object (platform, cached_object, NM_PLATFORM_SIGNAL_REMOVED, reason);
+ }
+ } else {
+ if (!kernel_object)
+ return FALSE;
+
+ hack_empty_master_iff_lower_up (platform, kernel_object);
+
+ if (cached_object)
+ nl_cache_remove (cached_object);
+ nle = nl_cache_add (cache, kernel_object);
+ if (nle) {
+ nm_log_dbg (LOGD_PLATFORM, "refresh_object(reason %d) failed during nl_cache_add with %d", reason, nle);
+ return FALSE;
+ }
+
+ announce_object (platform, kernel_object, cached_object ? NM_PLATFORM_SIGNAL_CHANGED : NM_PLATFORM_SIGNAL_ADDED, reason);
+
+ /* Refresh the master device (even on enslave/release) */
+ if (object_type_from_nl_object (kernel_object) == OBJECT_TYPE_LINK) {
+ int kernel_master = rtnl_link_get_master ((struct rtnl_link *) kernel_object);
+ int cached_master = cached_object ? rtnl_link_get_master ((struct rtnl_link *) cached_object) : 0;
+ struct nl_object *master_object;
+
+ if (kernel_master) {
+ master_object = build_rtnl_link (kernel_master, NULL, NM_LINK_TYPE_NONE);
+ refresh_object (platform, master_object, FALSE, NM_PLATFORM_REASON_INTERNAL);
+ nl_object_put (master_object);
+ }
+ if (cached_master && cached_master != kernel_master) {
+ master_object = build_rtnl_link (cached_master, NULL, NM_LINK_TYPE_NONE);
+ refresh_object (platform, master_object, FALSE, NM_PLATFORM_REASON_INTERNAL);
+ nl_object_put (master_object);
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+/* Decreases the reference count if @obj for convenience */
+static gboolean
+add_object (NMPlatform *platform, struct nl_object *obj)
+{
+ auto_nl_object struct nl_object *object = obj;
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ int nle;
+ struct nl_dump_params dp = {
+ .dp_type = NL_DUMP_DETAILS,
+ .dp_fd = stderr,
+ };
+
+ g_return_val_if_fail (object, FALSE);
+
+ nle = add_kernel_object (priv->nlh, object);
+
+ /* NLE_EXIST is considered equivalent to success to avoid race conditions. You
+ * never know when something sends an identical object just before
+ * NetworkManager.
+ */
+ switch (nle) {
+ case -NLE_SUCCESS:
+ case -NLE_EXIST:
+ break;
+ default:
+ error ("Netlink error adding %s: %s", to_string_object (platform, object), nl_geterror (nle));
+ nl_object_dump (object, &dp);
+ return FALSE;
+ }
+
+ return refresh_object (platform, object, FALSE, NM_PLATFORM_REASON_INTERNAL);
+}
+
+/* Decreases the reference count if @obj for convenience */
+static gboolean
+delete_object (NMPlatform *platform, struct nl_object *obj, gboolean do_refresh_object)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ auto_nl_object struct nl_object *obj_cleanup = obj;
+ struct nl_object *object = obj;
+ int object_type;
+ int nle;
+
+ object_type = object_type_from_nl_object (obj);
+ g_return_val_if_fail (object_type != OBJECT_TYPE_UNKNOWN, FALSE);
+
+ switch (object_type) {
+ case OBJECT_TYPE_LINK:
+ nle = rtnl_link_delete (priv->nlh, (struct rtnl_link *) object);
+ break;
+ case OBJECT_TYPE_IP4_ADDRESS:
+ case OBJECT_TYPE_IP6_ADDRESS:
+ nle = rtnl_addr_delete (priv->nlh, (struct rtnl_addr *) object, 0);
+ break;
+ case OBJECT_TYPE_IP4_ROUTE:
+ case OBJECT_TYPE_IP6_ROUTE:
+ nle = rtnl_route_delete (priv->nlh, (struct rtnl_route *) object, 0);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ switch (nle) {
+ case -NLE_SUCCESS:
+ break;
+ case -NLE_OBJ_NOTFOUND:
+ debug("delete_object failed with \"%s\" (%d), meaning the object was already removed",
+ nl_geterror (nle), nle);
+ break;
+ case -NLE_FAILURE:
+ if (object_type == OBJECT_TYPE_IP6_ADDRESS) {
+ /* On RHEL7 kernel, deleting a non existing address fails with ENXIO (which libnl maps to NLE_FAILURE) */
+ debug("delete_object for address failed with \"%s\" (%d), meaning the address was already removed",
+ nl_geterror (nle), nle);
+ break;
+ }
+ goto DEFAULT;
+ case -NLE_NOADDR:
+ if (object_type == OBJECT_TYPE_IP4_ADDRESS || object_type == OBJECT_TYPE_IP6_ADDRESS) {
+ debug("delete_object for address failed with \"%s\" (%d), meaning the address was already removed",
+ nl_geterror (nle), nle);
+ break;
+ }
+ goto DEFAULT;
+ DEFAULT:
+ default:
+ error ("Netlink error deleting %s: %s (%d)", to_string_object (platform, obj), nl_geterror (nle), nle);
+ return FALSE;
+ }
+
+ if (do_refresh_object)
+ refresh_object (platform, object, TRUE, NM_PLATFORM_REASON_INTERNAL);
+
+ return TRUE;
+}
+
+static void
+ref_object (struct nl_object *obj, void *data)
+{
+ struct nl_object **out = data;
+
+ nl_object_get (obj);
+ *out = obj;
+}
+
+static gboolean
+_rtnl_addr_timestamps_equal_fuzzy (guint32 ts1, guint32 ts2)
+{
+ guint32 diff;
+
+ if (ts1 == ts2)
+ return TRUE;
+ if (ts1 == NM_PLATFORM_LIFETIME_PERMANENT ||
+ ts2 == NM_PLATFORM_LIFETIME_PERMANENT)
+ return FALSE;
+
+ /** accept the timestamps as equal if they are within two seconds. */
+ diff = ts1 > ts2 ? ts1 - ts2 : ts2 - ts1;
+ return diff <= 2;
+}
+
+/* This function does all the magic to avoid race conditions caused
+ * by concurrent usage of synchronous commands and an asynchronous cache. This
+ * might be a nice future addition to libnl but it requires to do all operations
+ * through the cache manager. In this case, nm-linux-platform serves as the
+ * cache manager instead of the one provided by libnl.
+ */
+static int
+event_notification (struct nl_msg *msg, gpointer user_data)
+{
+ NMPlatform *platform = NM_PLATFORM (user_data);
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ struct nl_cache *cache;
+ auto_nl_object struct nl_object *object = NULL;
+ auto_nl_object struct nl_object *cached_object = NULL;
+ auto_nl_object struct nl_object *kernel_object = NULL;
+ int event;
+ int nle;
+ ObjectType type;
+
+ event = nlmsg_hdr (msg)->nlmsg_type;
+
+ if (priv->support_kernel_extended_ifa_flags == 0 && event == RTM_NEWADDR) {
+ /* if kernel support for extended ifa flags is still undecided, use the opportunity
+ * now and use @msg to decide it. This saves a blocking net link request.
+ **/
+ _check_support_kernel_extended_ifa_flags_init (priv, msg);
+ }
+
+ nl_msg_parse (msg, ref_object, &object);
+ g_return_val_if_fail (object, NL_OK);
+
+ type = object_type_from_nl_object (object);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ if (type == OBJECT_TYPE_LINK) {
+ const char *name = rtnl_link_get_name ((struct rtnl_link *) object);
+
+ debug ("netlink event (type %d) for link: %s (%d, family %d)",
+ event, name ? name : "(unknown)",
+ rtnl_link_get_ifindex ((struct rtnl_link *) object),
+ rtnl_link_get_family ((struct rtnl_link *) object));
+ } else
+ debug ("netlink event (type %d)", event);
+ }
+
+ cache = choose_cache_by_type (platform, type);
+ cached_object = nm_nl_cache_search (cache, object);
+ kernel_object = get_kernel_object (priv->nlh, object);
+
+ hack_empty_master_iff_lower_up (platform, kernel_object);
+
+ /* Removed object */
+ switch (event) {
+ case RTM_DELLINK:
+ case RTM_DELADDR:
+ case RTM_DELROUTE:
+ /* Ignore inconsistent deletion
+ *
+ * Quick external deletion and addition can be occasionally
+ * seen as just a change.
+ */
+ if (kernel_object)
+ return NL_OK;
+ /* Ignore internal deletion */
+ if (!cached_object)
+ return NL_OK;
+
+ nl_cache_remove (cached_object);
+ /* Don't announce removed interfaces that are not recognized by
+ * udev. They were either not yet discovered or they have been
+ * already removed and announced.
+ */
+ if (event == RTM_DELLINK) {
+ if (!link_is_announceable (platform, (struct rtnl_link *) cached_object))
+ return NL_OK;
+ }
+ announce_object (platform, cached_object, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_EXTERNAL);
+
+ return NL_OK;
+ case RTM_NEWLINK:
+ case RTM_NEWADDR:
+ case RTM_NEWROUTE:
+ /* Ignore inconsistent addition or change (kernel will send a good one)
+ *
+ * Quick sequence of RTM_NEWLINK notifications can be occasionally
+ * collapsed to just one addition or deletion, depending of whether we
+ * already have the object in cache.
+ */
+ if (!kernel_object)
+ return NL_OK;
+ /* Handle external addition */
+ if (!cached_object) {
+ nle = nl_cache_add (cache, kernel_object);
+ if (nle) {
+ error ("netlink cache error: %s", nl_geterror (nle));
+ return NL_OK;
+ }
+ announce_object (platform, kernel_object, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_EXTERNAL);
+ return NL_OK;
+ }
+ /* Ignore non-change
+ *
+ * This also catches notifications for internal addition or change, unless
+ * another action occured very soon after it.
+ */
+ if (!nl_object_diff (kernel_object, cached_object)) {
+ if (type == OBJECT_TYPE_IP4_ADDRESS || type == OBJECT_TYPE_IP6_ADDRESS) {
+ struct rtnl_addr *c = (struct rtnl_addr *) cached_object;
+ struct rtnl_addr *k = (struct rtnl_addr *) kernel_object;
+
+ /* libnl nl_object_diff() ignores differences in timestamp. Let's care about
+ * them (if they are large enough).
+ *
+ * Note that these valid and preferred timestamps are absolute, after
+ * _rtnl_addr_hack_lifetimes_rel_to_abs(). */
+ if ( _rtnl_addr_timestamps_equal_fuzzy (rtnl_addr_get_preferred_lifetime (c),
+ rtnl_addr_get_preferred_lifetime (k))
+ && _rtnl_addr_timestamps_equal_fuzzy (rtnl_addr_get_valid_lifetime (c),
+ rtnl_addr_get_valid_lifetime (k)))
+ return NL_OK;
+ } else
+ return NL_OK;
+ }
+ /* Handle external change */
+ nl_cache_remove (cached_object);
+ nle = nl_cache_add (cache, kernel_object);
+ if (nle) {
+ error ("netlink cache error: %s", nl_geterror (nle));
+ return NL_OK;
+ }
+ announce_object (platform, kernel_object, NM_PLATFORM_SIGNAL_CHANGED, NM_PLATFORM_REASON_EXTERNAL);
+
+ return NL_OK;
+ default:
+ error ("Unknown netlink event: %d", event);
+ return NL_OK;
+ }
+}
+
+/******************************************************************/
+
+static void
+_log_dbg_sysctl_set_impl (const char *path, const char *value)
+{
+ GError *error = NULL;
+ char *contents, *contents_escaped;
+ char *value_escaped = g_strescape (value, NULL);
+
+ if (!g_file_get_contents (path, &contents, NULL, &error)) {
+ debug ("sysctl: setting '%s' to '%s' (current value cannot be read: %s)", path, value_escaped, error->message);
+ g_clear_error (&error);
+ } else {
+ g_strstrip (contents);
+ contents_escaped = g_strescape (contents, NULL);
+ if (strcmp (contents, value) == 0)
+ debug ("sysctl: setting '%s' to '%s' (current value is identical)", path, value_escaped);
+ else
+ debug ("sysctl: setting '%s' to '%s' (current value is '%s')", path, value_escaped, contents_escaped);
+ g_free (contents);
+ g_free (contents_escaped);
+ }
+ g_free (value_escaped);
+}
+
+#define _log_dbg_sysctl_set(path, value) \
+ G_STMT_START { \
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) { \
+ _log_dbg_sysctl_set_impl (path, value); \
+ } \
+ } G_STMT_END
+
+static gboolean
+sysctl_set (NMPlatform *platform, const char *path, const char *value)
+{
+ int fd, len, nwrote, tries;
+ char *actual;
+
+ g_return_val_if_fail (path != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ /* Don't write outside known locations */
+ g_assert (g_str_has_prefix (path, "/proc/sys/")
+ || g_str_has_prefix (path, "/sys/"));
+ /* Don't write to suspicious locations */
+ g_assert (!strstr (path, "/../"));
+
+ fd = open (path, O_WRONLY | O_TRUNC);
+ if (fd == -1) {
+ if (errno == ENOENT) {
+ debug ("sysctl: failed to open '%s': (%d) %s",
+ path, errno, strerror (errno));
+ } else {
+ error ("sysctl: failed to open '%s': (%d) %s",
+ path, errno, strerror (errno));
+ }
+ return FALSE;
+ }
+
+ _log_dbg_sysctl_set (path, value);
+
+ /* Most sysfs and sysctl options don't care about a trailing LF, while some
+ * (like infiniband) do. So always add the LF. Also, neither sysfs nor
+ * sysctl support partial writes so the LF must be added to the string we're
+ * about to write.
+ */
+ actual = g_strdup_printf ("%s\n", value);
+
+ /* Try to write the entire value three times if a partial write occurs */
+ len = strlen (actual);
+ for (tries = 0, nwrote = 0; tries < 3 && nwrote != len; tries++) {
+ nwrote = write (fd, actual, len);
+ if (nwrote == -1) {
+ if (errno == EINTR) {
+ debug ("sysctl: interrupted, will try again");
+ continue;
+ }
+ break;
+ }
+ }
+ if (nwrote == -1 && errno != EEXIST) {
+ error ("sysctl: failed to set '%s' to '%s': (%d) %s",
+ path, value, errno, strerror (errno));
+ } else if (nwrote < len) {
+ error ("sysctl: failed to set '%s' to '%s' after three attempts",
+ path, value);
+ }
+
+ g_free (actual);
+ close (fd);
+ return (nwrote == len);
+}
+
+static GHashTable *sysctl_get_prev_values;
+
+static void
+_log_dbg_sysctl_get_impl (const char *path, const char *contents)
+{
+ const char *prev_value = NULL;
+
+ if (!sysctl_get_prev_values)
+ sysctl_get_prev_values = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ else
+ prev_value = g_hash_table_lookup (sysctl_get_prev_values, path);
+
+ if (prev_value) {
+ if (strcmp (prev_value, contents) != 0) {
+ char *contents_escaped = g_strescape (contents, NULL);
+ char *prev_value_escaped = g_strescape (prev_value, NULL);
+
+ debug ("sysctl: reading '%s': '%s' (changed from '%s' on last read)", path, contents_escaped, prev_value_escaped);
+ g_free (contents_escaped);
+ g_free (prev_value_escaped);
+ g_hash_table_insert (sysctl_get_prev_values, g_strdup (path), g_strdup (contents));
+ }
+ } else {
+ char *contents_escaped = g_strescape (contents, NULL);
+
+ debug ("sysctl: reading '%s': '%s'", path, contents_escaped);
+ g_free (contents_escaped);
+ g_hash_table_insert (sysctl_get_prev_values, g_strdup (path), g_strdup (contents));
+ }
+}
+
+#define _log_dbg_sysctl_get(path, contents) \
+ G_STMT_START { \
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) { \
+ _log_dbg_sysctl_get_impl (path, contents); \
+ } else if (sysctl_get_prev_values) { \
+ g_hash_table_destroy (sysctl_get_prev_values); \
+ sysctl_get_prev_values = NULL; \
+ } \
+ } G_STMT_END
+
+static char *
+sysctl_get (NMPlatform *platform, const char *path)
+{
+ GError *error = NULL;
+ char *contents;
+
+ /* Don't write outside known locations */
+ g_assert (g_str_has_prefix (path, "/proc/sys/")
+ || g_str_has_prefix (path, "/sys/"));
+ /* Don't write to suspicious locations */
+ g_assert (!strstr (path, "/../"));
+
+ if (!g_file_get_contents (path, &contents, NULL, &error)) {
+ /* We assume FAILED means EOPNOTSUP */
+ if ( g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)
+ || g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_FAILED))
+ debug ("error reading %s: %s", path, error->message);
+ else
+ error ("error reading %s: %s", path, error->message);
+ g_clear_error (&error);
+ return NULL;
+ }
+
+ g_strstrip (contents);
+
+ _log_dbg_sysctl_get (path, contents);
+
+ return contents;
+}
+
+/******************************************************************/
+
+static GArray *
+link_get_all (NMPlatform *platform)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ GArray *links = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformLink), nl_cache_nitems (priv->link_cache));
+ NMPlatformLink device;
+ struct nl_object *object;
+
+ for (object = nl_cache_get_first (priv->link_cache); object; object = nl_cache_get_next (object)) {
+ struct rtnl_link *rtnl_link = (struct rtnl_link *) object;
+
+ if (link_is_announceable (platform, rtnl_link)) {
+ if (init_link (platform, &device, rtnl_link))
+ g_array_append_val (links, device);
+ }
+ }
+
+ return links;
+}
+
+static gboolean
+_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *link)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ auto_nl_object struct rtnl_link *rtnllink = NULL;
+
+ rtnllink = rtnl_link_get (priv->link_cache, ifindex);
+ if (rtnllink) {
+ if (link_is_announceable (platform, rtnllink)) {
+ if (init_link (platform, link, rtnllink))
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static struct nl_object *
+build_rtnl_link (int ifindex, const char *name, NMLinkType type)
+{
+ struct rtnl_link *rtnllink;
+ int nle;
+
+ rtnllink = _nm_rtnl_link_alloc (ifindex, name);
+ if (type) {
+ nle = rtnl_link_set_type (rtnllink, type_to_string (type));
+ g_assert (!nle);
+ }
+ return (struct nl_object *) rtnllink;
+}
+
+static gboolean
+link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *address, size_t address_len)
+{
+ int r;
+ struct nl_object *link;
+
+ if (type == NM_LINK_TYPE_BOND) {
+ /* When the kernel loads the bond module, either via explicit modprobe
+ * or automatically in response to creating a bond master, it will also
+ * create a 'bond0' interface. Since the bond we're about to create may
+ * or may not be named 'bond0' prevent potential confusion about a bond
+ * that the user didn't want by telling the bonding module not to create
+ * bond0 automatically.
+ */
+ if (!g_file_test ("/sys/class/net/bonding_masters", G_FILE_TEST_EXISTS))
+ /* Ignore return value to shut up the compiler */
+ r = system ("modprobe bonding max_bonds=0");
+ }
+
+ debug ("link: add link '%s' of type '%s' (%d)",
+ name, type_to_string (type), (int) type);
+
+ link = build_rtnl_link (0, name, type);
+
+ g_assert ( (address != NULL) ^ (address_len == 0) );
+ if (address) {
+ auto_nl_addr struct nl_addr *nladdr = _nm_nl_addr_build (AF_LLC, address, address_len);
+
+ rtnl_link_set_addr ((struct rtnl_link *) link, nladdr);
+ }
+ return add_object (platform, link);
+}
+
+static struct rtnl_link *
+link_get (NMPlatform *platform, int ifindex)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ struct rtnl_link *rtnllink = rtnl_link_get (priv->link_cache, ifindex);
+
+ if (!rtnllink) {
+ platform->error = NM_PLATFORM_ERROR_NOT_FOUND;
+ return NULL;
+ }
+
+ /* physical interfaces must be found by udev before they can be used */
+ if (!link_is_announceable (platform, rtnllink)) {
+ platform->error = NM_PLATFORM_ERROR_NOT_FOUND;
+ rtnl_link_put (rtnllink);
+ return NULL;
+ }
+
+ return rtnllink;
+}
+
+static gboolean
+link_change (NMPlatform *platform, int ifindex, struct rtnl_link *change)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+ int nle;
+
+ if (!rtnllink)
+ return FALSE;
+ g_return_val_if_fail (rtnl_link_get_ifindex (change) > 0, FALSE);
+
+ nle = rtnl_link_change (priv->nlh, rtnllink, change, 0);
+
+ /* NLE_EXIST is considered equivalent to success to avoid race conditions. You
+ * never know when something sends an identical object just before
+ * NetworkManager.
+ *
+ * When netlink returns NLE_OBJ_NOTFOUND, it usually means it failed to find
+ * firmware for the device, especially on nm_platform_link_set_up ().
+ * This is basically the same check as in the original code and could
+ * potentially be improved.
+ */
+ switch (nle) {
+ case -NLE_SUCCESS:
+ case -NLE_EXIST:
+ break;
+ case -NLE_OBJ_NOTFOUND:
+ error ("Firmware not found for changing link %s; Netlink error: %s)", to_string_link (platform, change), nl_geterror (nle));
+ platform->error = NM_PLATFORM_ERROR_NO_FIRMWARE;
+ return FALSE;
+ default:
+ error ("Netlink error changing link %s: %s", to_string_link (platform, change), nl_geterror (nle));
+ return FALSE;
+ }
+
+ return refresh_object (platform, (struct nl_object *) rtnllink, FALSE, NM_PLATFORM_REASON_INTERNAL);
+}
+
+static gboolean
+link_delete (NMPlatform *platform, int ifindex)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ struct rtnl_link *rtnllink = rtnl_link_get (priv->link_cache, ifindex);
+
+ if (!rtnllink) {
+ platform->error = NM_PLATFORM_ERROR_NOT_FOUND;
+ return FALSE;
+ }
+
+ return delete_object (platform, build_rtnl_link (ifindex, NULL, NM_LINK_TYPE_NONE), TRUE);
+}
+
+static int
+link_get_ifindex (NMPlatform *platform, const char *ifname)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+
+ return rtnl_link_name2i (priv->link_cache, ifname);
+}
+
+static const char *
+link_get_name (NMPlatform *platform, int ifindex)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+
+ return rtnllink ? rtnl_link_get_name (rtnllink) : NULL;
+}
+
+static NMLinkType
+link_get_type (NMPlatform *platform, int ifindex)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+
+ return link_extract_type (platform, rtnllink, NULL);
+}
+
+static const char *
+link_get_type_name (NMPlatform *platform, int ifindex)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+ const char *type;
+
+ link_extract_type (platform, rtnllink, &type);
+ return type;
+}
+
+static guint32
+link_get_flags (NMPlatform *platform, int ifindex)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+
+ if (!rtnllink)
+ return IFF_NOARP;
+
+ return rtnl_link_get_flags (rtnllink);
+}
+
+static gboolean
+link_refresh (NMPlatform *platform, int ifindex)
+{
+ auto_nl_object struct rtnl_link *rtnllink = _nm_rtnl_link_alloc (ifindex, NULL);
+
+ return refresh_object (platform, (struct nl_object *) rtnllink, FALSE, NM_PLATFORM_REASON_EXTERNAL);
+}
+
+static gboolean
+link_is_up (NMPlatform *platform, int ifindex)
+{
+ return !!(link_get_flags (platform, ifindex) & IFF_UP);
+}
+
+static gboolean
+link_is_connected (NMPlatform *platform, int ifindex)
+{
+ return !!(link_get_flags (platform, ifindex) & IFF_LOWER_UP);
+}
+
+static gboolean
+link_uses_arp (NMPlatform *platform, int ifindex)
+{
+ return !(link_get_flags (platform, ifindex) & IFF_NOARP);
+}
+
+static gboolean
+link_change_flags (NMPlatform *platform, int ifindex, unsigned int flags, gboolean value)
+{
+ auto_nl_object struct rtnl_link *change = _nm_rtnl_link_alloc (ifindex, NULL);
+
+ if (value)
+ rtnl_link_set_flags (change, flags);
+ else
+ rtnl_link_unset_flags (change, flags);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ char buf[512];
+
+ rtnl_link_flags2str (flags, buf, sizeof (buf));
+ debug ("link: change %d: flags %s '%s' (%d)", ifindex, value ? "set" : "unset", buf, flags);
+ }
+
+ return link_change (platform, ifindex, change);
+}
+
+static gboolean
+link_set_up (NMPlatform *platform, int ifindex)
+{
+ return link_change_flags (platform, ifindex, IFF_UP, TRUE);
+}
+
+static gboolean
+link_set_down (NMPlatform *platform, int ifindex)
+{
+ return link_change_flags (platform, ifindex, IFF_UP, FALSE);
+}
+
+static gboolean
+link_set_arp (NMPlatform *platform, int ifindex)
+{
+ return link_change_flags (platform, ifindex, IFF_NOARP, FALSE);
+}
+
+static gboolean
+link_set_noarp (NMPlatform *platform, int ifindex)
+{
+ return link_change_flags (platform, ifindex, IFF_NOARP, TRUE);
+}
+
+static gboolean
+supports_ethtool_carrier_detect (const char *ifname)
+{
+ struct ethtool_cmd edata = { .cmd = ETHTOOL_GLINK };
+
+ /* We ignore the result. If the ETHTOOL_GLINK call succeeded, then we
+ * assume the device supports carrier-detect, otherwise we assume it
+ * doesn't.
+ */
+ return ethtool_get (ifname, &edata);
+}
+
+static gboolean
+supports_mii_carrier_detect (const char *ifname)
+{
+ int fd;
+ struct ifreq ifr;
+ struct mii_ioctl_data *mii;
+ gboolean supports_mii = FALSE;
+
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ nm_log_err (LOGD_PLATFORM, "couldn't open control socket.");
+ return FALSE;
+ }
+
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strncpy (ifr.ifr_name, ifname, IFNAMSIZ);
+
+ errno = 0;
+ if (ioctl (fd, SIOCGMIIPHY, &ifr) < 0) {
+ nm_log_dbg (LOGD_PLATFORM, "SIOCGMIIPHY failed: %d", errno);
+ goto out;
+ }
+
+ /* If we can read the BMSR register, we assume that the card supports MII link detection */
+ mii = (struct mii_ioctl_data *) &ifr.ifr_ifru;
+ mii->reg_num = MII_BMSR;
+
+ if (ioctl (fd, SIOCGMIIREG, &ifr) == 0) {
+ nm_log_dbg (LOGD_PLATFORM, "SIOCGMIIREG result 0x%X", mii->val_out);
+ supports_mii = TRUE;
+ } else {
+ nm_log_dbg (LOGD_PLATFORM, "SIOCGMIIREG failed: %d", errno);
+ }
+
+ out:
+ close (fd);
+ nm_log_dbg (LOGD_PLATFORM, "MII %s supported", supports_mii ? "is" : "not");
+ return supports_mii;
+}
+
+static gboolean
+link_supports_carrier_detect (NMPlatform *platform, int ifindex)
+{
+ const char *name = nm_platform_link_get_name (ifindex);
+
+ if (!name)
+ return FALSE;
+
+ /* We use netlink for the actual carrier detection, but netlink can't tell
+ * us whether the device actually supports carrier detection in the first
+ * place. We assume any device that does implements one of these two APIs.
+ */
+ return supports_ethtool_carrier_detect (name) || supports_mii_carrier_detect (name);
+}
+
+static gboolean
+link_supports_vlans (NMPlatform *platform, int ifindex)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+ const char *name = nm_platform_link_get_name (ifindex);
+ auto_g_free struct ethtool_gfeatures *features = NULL;
+ int idx, block, bit, size;
+
+ /* Only ARPHRD_ETHER links can possibly support VLANs. */
+ if (!rtnllink || rtnl_link_get_arptype (rtnllink) != ARPHRD_ETHER)
+ return FALSE;
+
+ if (!name)
+ return FALSE;
+
+ idx = ethtool_get_stringset_index (name, ETH_SS_FEATURES, "vlan-challenged");
+ if (idx == -1) {
+ debug ("vlan-challenged ethtool feature does not exist?");
+ return FALSE;
+ }
+
+ block = idx / 32;
+ bit = idx % 32;
+ size = block + 1;
+
+ features = g_malloc0 (sizeof (*features) + size * sizeof (struct ethtool_get_features_block));
+ features->cmd = ETHTOOL_GFEATURES;
+ features->size = size;
+
+ if (!ethtool_get (name, features))
+ return FALSE;
+
+ return !(features->features[block].active & (1 << bit));
+}
+
+static gboolean
+link_set_address (NMPlatform *platform, int ifindex, gconstpointer address, size_t length)
+{
+ auto_nl_object struct rtnl_link *change = _nm_rtnl_link_alloc (ifindex, NULL);
+ auto_nl_addr struct nl_addr *nladdr = _nm_nl_addr_build (AF_LLC, address, length);
+
+ rtnl_link_set_addr (change, nladdr);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ char *mac = nm_utils_hwaddr_ntoa_len (address, length);
+
+ debug ("link: change %d: address %s (%lu bytes)", ifindex, mac, (unsigned long) length);
+ g_free (mac);
+ }
+
+ return link_change (platform, ifindex, change);
+}
+
+static gconstpointer
+link_get_address (NMPlatform *platform, int ifindex, size_t *length)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+ struct nl_addr *nladdr;
+
+ nladdr = rtnllink ? rtnl_link_get_addr (rtnllink) : NULL;
+
+ if (length)
+ *length = nladdr ? nl_addr_get_len (nladdr) : 0;
+
+ return nladdr ? nl_addr_get_binary_addr (nladdr) : NULL;
+}
+
+static gboolean
+link_set_mtu (NMPlatform *platform, int ifindex, guint32 mtu)
+{
+ auto_nl_object struct rtnl_link *change = _nm_rtnl_link_alloc (ifindex, NULL);
+
+ rtnl_link_set_mtu (change, mtu);
+ debug ("link: change %d: mtu %lu", ifindex, (unsigned long)mtu);
+
+ return link_change (platform, ifindex, change);
+}
+
+static guint32
+link_get_mtu (NMPlatform *platform, int ifindex)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+
+ return rtnllink ? rtnl_link_get_mtu (rtnllink) : 0;
+}
+
+static char *
+link_get_physical_port_id (NMPlatform *platform, int ifindex)
+{
+ const char *ifname;
+ char *path, *id;
+
+ ifname = nm_platform_link_get_name (ifindex);
+ if (!ifname)
+ return NULL;
+
+ ifname = ASSERT_VALID_PATH_COMPONENT (ifname);
+
+ path = g_strdup_printf ("/sys/class/net/%s/phys_port_id", ifname);
+ id = sysctl_get (platform, path);
+ g_free (path);
+
+ return id;
+}
+
+static int
+vlan_add (NMPlatform *platform, const char *name, int parent, int vlan_id, guint32 vlan_flags)
+{
+ struct nl_object *object = build_rtnl_link (0, name, NM_LINK_TYPE_VLAN);
+ struct rtnl_link *rtnllink = (struct rtnl_link *) object;
+ unsigned int kernel_flags;
+
+ kernel_flags = 0;
+ if (vlan_flags & NM_VLAN_FLAG_REORDER_HEADERS)
+ kernel_flags |= VLAN_FLAG_REORDER_HDR;
+ if (vlan_flags & NM_VLAN_FLAG_GVRP)
+ kernel_flags |= VLAN_FLAG_GVRP;
+ if (vlan_flags & NM_VLAN_FLAG_LOOSE_BINDING)
+ kernel_flags |= VLAN_FLAG_LOOSE_BINDING;
+
+ rtnl_link_set_link (rtnllink, parent);
+ rtnl_link_vlan_set_id (rtnllink, vlan_id);
+ rtnl_link_vlan_set_flags (rtnllink, kernel_flags);
+
+ debug ("link: add vlan '%s', parent %d, vlan id %d, flags %X (native: %X)",
+ name, parent, vlan_id, (unsigned int) vlan_flags, kernel_flags);
+
+ return add_object (platform, object);
+}
+
+static gboolean
+vlan_get_info (NMPlatform *platform, int ifindex, int *parent, int *vlan_id)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+
+ if (parent)
+ *parent = rtnllink ? rtnl_link_get_link (rtnllink) : 0;
+ if (vlan_id)
+ *vlan_id = rtnllink ? rtnl_link_vlan_get_id (rtnllink) : 0;
+
+ return !!rtnllink;
+}
+
+static gboolean
+vlan_set_ingress_map (NMPlatform *platform, int ifindex, int from, int to)
+{
+ /* We have to use link_get() because a "blank" rtnl_link won't have the
+ * right data structures to be able to call rtnl_link_vlan_set_ingress_map()
+ * on it. (Likewise below in vlan_set_egress_map().)
+ */
+ auto_nl_object struct rtnl_link *change = link_get (platform, ifindex);
+
+ if (!change)
+ return FALSE;
+ rtnl_link_vlan_set_ingress_map (change, from, to);
+
+ debug ("link: change %d: vlan ingress map %d -> %d", ifindex, from, to);
+
+ return link_change (platform, ifindex, change);
+}
+
+static gboolean
+vlan_set_egress_map (NMPlatform *platform, int ifindex, int from, int to)
+{
+ auto_nl_object struct rtnl_link *change = link_get (platform, ifindex);
+
+ if (!change)
+ return FALSE;
+ rtnl_link_vlan_set_egress_map (change, from, to);
+
+ debug ("link: change %d: vlan egress map %d -> %d", ifindex, from, to);
+
+ return link_change (platform, ifindex, change);
+}
+
+static gboolean
+link_enslave (NMPlatform *platform, int master, int slave)
+{
+ auto_nl_object struct rtnl_link *change = _nm_rtnl_link_alloc (slave, NULL);
+
+ rtnl_link_set_master (change, master);
+ debug ("link: change %d: enslave to master %d", slave, master);
+
+ return link_change (platform, slave, change);
+}
+
+static gboolean
+link_release (NMPlatform *platform, int master, int slave)
+{
+ return link_enslave (platform, 0, slave);
+}
+
+static int
+link_get_master (NMPlatform *platform, int slave)
+{
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, slave);
+
+ return rtnllink ? rtnl_link_get_master (rtnllink) : 0;
+}
+
+static char *
+link_option_path (int master, const char *category, const char *option)
+{
+ const char *name = nm_platform_link_get_name (master);
+
+ if (!name || !category || !option)
+ return NULL;
+
+ return g_strdup_printf ("/sys/class/net/%s/%s/%s",
+ ASSERT_VALID_PATH_COMPONENT (name),
+ ASSERT_VALID_PATH_COMPONENT (category),
+ ASSERT_VALID_PATH_COMPONENT (option));
+}
+
+static gboolean
+link_set_option (int master, const char *category, const char *option, const char *value)
+{
+ auto_g_free char *path = link_option_path (master, category, option);
+
+ return path && nm_platform_sysctl_set (path, value);
+}
+
+static char *
+link_get_option (int master, const char *category, const char *option)
+{
+ auto_g_free char *path = link_option_path (master, category, option);
+
+ return path ? nm_platform_sysctl_get (path) : NULL;
+}
+
+static const char *
+master_category (NMPlatform *platform, int master)
+{
+ switch (link_get_type (platform, master)) {
+ case NM_LINK_TYPE_BRIDGE:
+ return "bridge";
+ case NM_LINK_TYPE_BOND:
+ return "bonding";
+ default:
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+}
+
+static const char *
+slave_category (NMPlatform *platform, int slave)
+{
+ int master = link_get_master (platform, slave);
+
+ if (master <= 0) {
+ platform->error = NM_PLATFORM_ERROR_NOT_SLAVE;
+ return NULL;
+ }
+
+ switch (link_get_type (platform, master)) {
+ case NM_LINK_TYPE_BRIDGE:
+ return "brport";
+ default:
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+}
+
+static gboolean
+master_set_option (NMPlatform *platform, int master, const char *option, const char *value)
+{
+ return link_set_option (master, master_category (platform, master), option, value);
+}
+
+static char *
+master_get_option (NMPlatform *platform, int master, const char *option)
+{
+ return link_get_option (master, master_category (platform, master), option);
+}
+
+static gboolean
+slave_set_option (NMPlatform *platform, int slave, const char *option, const char *value)
+{
+ return link_set_option (slave, slave_category (platform, slave), option, value);
+}
+
+static char *
+slave_get_option (NMPlatform *platform, int slave, const char *option)
+{
+ return link_get_option (slave, slave_category (platform, slave), option);
+}
+
+static gboolean
+infiniband_partition_add (NMPlatform *platform, int parent, int p_key)
+{
+ const char *parent_name;
+ char *path, *id;
+ gboolean success;
+
+ parent_name = nm_platform_link_get_name (parent);
+ g_return_val_if_fail (parent_name != NULL, FALSE);
+
+ path = g_strdup_printf ("/sys/class/net/%s/create_child", ASSERT_VALID_PATH_COMPONENT (parent_name));
+ id = g_strdup_printf ("0x%04x", p_key);
+ success = nm_platform_sysctl_set (path, id);
+ g_free (id);
+ g_free (path);
+
+ if (success) {
+ auto_g_free char *ifname = g_strdup_printf ("%s.%04x", parent_name, p_key);
+ auto_nl_object struct rtnl_link *rtnllink = _nm_rtnl_link_alloc (0, ifname);
+
+ success = refresh_object (platform, (struct nl_object *) rtnllink, FALSE, NM_PLATFORM_REASON_INTERNAL);
+ }
+
+ return success;
+}
+
+static gboolean
+veth_get_properties (NMPlatform *platform, int ifindex, NMPlatformVethProperties *props)
+{
+ const char *ifname;
+ auto_g_free struct ethtool_stats *stats = NULL;
+ int peer_ifindex_stat;
+
+ ifname = nm_platform_link_get_name (ifindex);
+ if (!ifname)
+ return FALSE;
+
+ peer_ifindex_stat = ethtool_get_stringset_index (ifname, ETH_SS_STATS, "peer_ifindex");
+ if (peer_ifindex_stat == -1) {
+ debug ("%s: peer_ifindex ethtool stat does not exist?", ifname);
+ return FALSE;
+ }
+
+ stats = g_malloc0 (sizeof (*stats) + (peer_ifindex_stat + 1) * sizeof (guint64));
+ stats->cmd = ETHTOOL_GSTATS;
+ stats->n_stats = peer_ifindex_stat + 1;
+ if (!ethtool_get (ifname, stats))
+ return FALSE;
+
+ props->peer = stats->data[peer_ifindex_stat];
+ return TRUE;
+}
+
+static gboolean
+tun_get_properties (NMPlatform *platform, int ifindex, NMPlatformTunProperties *props)
+{
+ const char *ifname;
+ char *path, *val;
+ gboolean success = TRUE;
+
+ g_return_val_if_fail (props, FALSE);
+
+ memset (props, 0, sizeof (*props));
+ props->owner = -1;
+ props->group = -1;
+
+ ifname = nm_platform_link_get_name (ifindex);
+ if (!ifname || !nm_utils_iface_valid_name (ifname))
+ return FALSE;
+ ifname = ASSERT_VALID_PATH_COMPONENT (ifname);
+
+ path = g_strdup_printf ("/sys/class/net/%s/owner", ifname);
+ val = nm_platform_sysctl_get (path);
+ g_free (path);
+ if (val) {
+ props->owner = nm_utils_ascii_str_to_int64 (val, 10, -1, G_MAXINT64, -1);
+ if (errno)
+ success = FALSE;
+ g_free (val);
+ } else
+ success = FALSE;
+
+ path = g_strdup_printf ("/sys/class/net/%s/group", ifname);
+ val = nm_platform_sysctl_get (path);
+ g_free (path);
+ if (val) {
+ props->group = nm_utils_ascii_str_to_int64 (val, 10, -1, G_MAXINT64, -1);
+ if (errno)
+ success = FALSE;
+ g_free (val);
+ } else
+ success = FALSE;
+
+ path = g_strdup_printf ("/sys/class/net/%s/tun_flags", ifname);
+ val = nm_platform_sysctl_get (path);
+ g_free (path);
+ if (val) {
+ gint64 flags;
+
+ flags = nm_utils_ascii_str_to_int64 (val, 16, 0, G_MAXINT64, 0);
+ if (!errno) {
+#ifndef IFF_MULTI_QUEUE
+ const int IFF_MULTI_QUEUE = 0x0100;
+#endif
+ props->mode = ((flags & TUN_TYPE_MASK) == TUN_TUN_DEV) ? "tun" : "tap";
+ props->no_pi = !!(flags & IFF_NO_PI);
+ props->vnet_hdr = !!(flags & IFF_VNET_HDR);
+ props->multi_queue = !!(flags & IFF_MULTI_QUEUE);
+ } else
+ success = FALSE;
+ g_free (val);
+ } else
+ success = FALSE;
+
+ return success;
+}
+
+static const struct nla_policy macvlan_info_policy[IFLA_MACVLAN_MAX + 1] = {
+ [IFLA_MACVLAN_MODE] = { .type = NLA_U32 },
+#ifdef MACVLAN_FLAG_NOPROMISC
+ [IFLA_MACVLAN_FLAGS] = { .type = NLA_U16 },
+#endif
+};
+
+static int
+macvlan_info_data_parser (struct nlattr *info_data, gpointer parser_data)
+{
+ NMPlatformMacvlanProperties *props = parser_data;
+ struct nlattr *tb[IFLA_MACVLAN_MAX + 1];
+ int err;
+
+ err = nla_parse_nested (tb, IFLA_MACVLAN_MAX, info_data,
+ (struct nla_policy *) macvlan_info_policy);
+ if (err < 0)
+ return err;
+
+ switch (nla_get_u32 (tb[IFLA_MACVLAN_MODE])) {
+ case MACVLAN_MODE_PRIVATE:
+ props->mode = "private";
+ break;
+ case MACVLAN_MODE_VEPA:
+ props->mode = "vepa";
+ break;
+ case MACVLAN_MODE_BRIDGE:
+ props->mode = "bridge";
+ break;
+ case MACVLAN_MODE_PASSTHRU:
+ props->mode = "passthru";
+ break;
+ default:
+ return -NLE_PARSE_ERR;
+ }
+
+#ifdef MACVLAN_FLAG_NOPROMISC
+ props->no_promisc = !!(nla_get_u16 (tb[IFLA_MACVLAN_FLAGS]) & MACVLAN_FLAG_NOPROMISC);
+#else
+ props->no_promisc = FALSE;
+#endif
+
+ return 0;
+}
+
+static gboolean
+macvlan_get_properties (NMPlatform *platform, int ifindex, NMPlatformMacvlanProperties *props)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ auto_nl_object struct rtnl_link *rtnllink = NULL;
+ int err;
+
+ rtnllink = link_get (platform, ifindex);
+ if (!rtnllink)
+ return FALSE;
+
+ props->parent_ifindex = rtnl_link_get_link (rtnllink);
+
+ err = nm_rtnl_link_parse_info_data (priv->nlh, ifindex,
+ macvlan_info_data_parser, props);
+ if (err != 0) {
+ warning ("(%s) could not read properties: %s",
+ rtnl_link_get_name (rtnllink), nl_geterror (err));
+ }
+ return (err == 0);
+}
+
+/* The installed kernel headers might not have VXLAN stuff at all, or
+ * they might have the original properties, but not PORT, GROUP6, or LOCAL6.
+ * So until we depend on kernel >= 3.11, we just ignore the actual enum
+ * in if_link.h and define the values ourselves.
+ */
+#define IFLA_VXLAN_UNSPEC 0
+#define IFLA_VXLAN_ID 1
+#define IFLA_VXLAN_GROUP 2
+#define IFLA_VXLAN_LINK 3
+#define IFLA_VXLAN_LOCAL 4
+#define IFLA_VXLAN_TTL 5
+#define IFLA_VXLAN_TOS 6
+#define IFLA_VXLAN_LEARNING 7
+#define IFLA_VXLAN_AGEING 8
+#define IFLA_VXLAN_LIMIT 9
+#define IFLA_VXLAN_PORT_RANGE 10
+#define IFLA_VXLAN_PROXY 11
+#define IFLA_VXLAN_RSC 12
+#define IFLA_VXLAN_L2MISS 13
+#define IFLA_VXLAN_L3MISS 14
+#define IFLA_VXLAN_PORT 15
+#define IFLA_VXLAN_GROUP6 16
+#define IFLA_VXLAN_LOCAL6 17
+#undef IFLA_VXLAN_MAX
+#define IFLA_VXLAN_MAX IFLA_VXLAN_LOCAL6
+
+static const struct nla_policy vxlan_info_policy[IFLA_VXLAN_MAX + 1] = {
+ [IFLA_VXLAN_ID] = { .type = NLA_U32 },
+ [IFLA_VXLAN_GROUP] = { .type = NLA_U32 },
+ [IFLA_VXLAN_GROUP6] = { .type = NLA_UNSPEC,
+ .minlen = sizeof (struct in6_addr) },
+ [IFLA_VXLAN_LINK] = { .type = NLA_U32 },
+ [IFLA_VXLAN_LOCAL] = { .type = NLA_U32 },
+ [IFLA_VXLAN_LOCAL6] = { .type = NLA_UNSPEC,
+ .minlen = sizeof (struct in6_addr) },
+ [IFLA_VXLAN_TOS] = { .type = NLA_U8 },
+ [IFLA_VXLAN_TTL] = { .type = NLA_U8 },
+ [IFLA_VXLAN_LEARNING] = { .type = NLA_U8 },
+ [IFLA_VXLAN_AGEING] = { .type = NLA_U32 },
+ [IFLA_VXLAN_LIMIT] = { .type = NLA_U32 },
+ [IFLA_VXLAN_PORT_RANGE] = { .type = NLA_UNSPEC,
+ .minlen = sizeof (struct ifla_vxlan_port_range) },
+ [IFLA_VXLAN_PROXY] = { .type = NLA_U8 },
+ [IFLA_VXLAN_RSC] = { .type = NLA_U8 },
+ [IFLA_VXLAN_L2MISS] = { .type = NLA_U8 },
+ [IFLA_VXLAN_L3MISS] = { .type = NLA_U8 },
+ [IFLA_VXLAN_PORT] = { .type = NLA_U16 },
+};
+
+static int
+vxlan_info_data_parser (struct nlattr *info_data, gpointer parser_data)
+{
+ NMPlatformVxlanProperties *props = parser_data;
+ struct nlattr *tb[IFLA_VXLAN_MAX + 1];
+ struct ifla_vxlan_port_range *range;
+ int err;
+
+ err = nla_parse_nested (tb, IFLA_VXLAN_MAX, info_data,
+ (struct nla_policy *) vxlan_info_policy);
+ if (err < 0)
+ return err;
+
+ memset (props, 0, sizeof (*props));
+
+ props->parent_ifindex = tb[IFLA_VXLAN_LINK] ? nla_get_u32 (tb[IFLA_VXLAN_LINK]) : 0;
+ props->id = nla_get_u32 (tb[IFLA_VXLAN_ID]);
+ if (tb[IFLA_VXLAN_GROUP])
+ props->group = nla_get_u32 (tb[IFLA_VXLAN_GROUP]);
+ if (tb[IFLA_VXLAN_LOCAL])
+ props->local = nla_get_u32 (tb[IFLA_VXLAN_LOCAL]);
+ if (tb[IFLA_VXLAN_GROUP6])
+ memcpy (&props->group6, nla_data (tb[IFLA_VXLAN_GROUP6]), sizeof (props->group6));
+ if (tb[IFLA_VXLAN_LOCAL6])
+ memcpy (&props->local6, nla_data (tb[IFLA_VXLAN_LOCAL6]), sizeof (props->local6));
+
+ props->ageing = nla_get_u32 (tb[IFLA_VXLAN_AGEING]);
+ props->limit = nla_get_u32 (tb[IFLA_VXLAN_LIMIT]);
+ props->tos = nla_get_u8 (tb[IFLA_VXLAN_TOS]);
+ props->ttl = nla_get_u8 (tb[IFLA_VXLAN_TTL]);
+
+ props->dst_port = nla_get_u16 (tb[IFLA_VXLAN_PORT]);
+ range = nla_data (tb[IFLA_VXLAN_PORT_RANGE]);
+ props->src_port_min = range->low;
+ props->src_port_max = range->high;
+
+ props->learning = !!nla_get_u8 (tb[IFLA_VXLAN_LEARNING]);
+ props->proxy = !!nla_get_u8 (tb[IFLA_VXLAN_PROXY]);
+ props->rsc = !!nla_get_u8 (tb[IFLA_VXLAN_RSC]);
+ props->l2miss = !!nla_get_u8 (tb[IFLA_VXLAN_L2MISS]);
+ props->l3miss = !!nla_get_u8 (tb[IFLA_VXLAN_L3MISS]);
+
+ return 0;
+}
+
+static gboolean
+vxlan_get_properties (NMPlatform *platform, int ifindex, NMPlatformVxlanProperties *props)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ int err;
+
+ err = nm_rtnl_link_parse_info_data (priv->nlh, ifindex,
+ vxlan_info_data_parser, props);
+ if (err != 0) {
+ warning ("(%s) could not read properties: %s",
+ link_get_name (platform, ifindex), nl_geterror (err));
+ }
+ return (err == 0);
+}
+
+static const struct nla_policy gre_info_policy[IFLA_GRE_MAX + 1] = {
+ [IFLA_GRE_LINK] = { .type = NLA_U32 },
+ [IFLA_GRE_IFLAGS] = { .type = NLA_U16 },
+ [IFLA_GRE_OFLAGS] = { .type = NLA_U16 },
+ [IFLA_GRE_IKEY] = { .type = NLA_U32 },
+ [IFLA_GRE_OKEY] = { .type = NLA_U32 },
+ [IFLA_GRE_LOCAL] = { .type = NLA_U32 },
+ [IFLA_GRE_REMOTE] = { .type = NLA_U32 },
+ [IFLA_GRE_TTL] = { .type = NLA_U8 },
+ [IFLA_GRE_TOS] = { .type = NLA_U8 },
+ [IFLA_GRE_PMTUDISC] = { .type = NLA_U8 },
+};
+
+static int
+gre_info_data_parser (struct nlattr *info_data, gpointer parser_data)
+{
+ NMPlatformGreProperties *props = parser_data;
+ struct nlattr *tb[IFLA_GRE_MAX + 1];
+ int err;
+
+ err = nla_parse_nested (tb, IFLA_GRE_MAX, info_data,
+ (struct nla_policy *) gre_info_policy);
+ if (err < 0)
+ return err;
+
+ props->parent_ifindex = tb[IFLA_GRE_LINK] ? nla_get_u32 (tb[IFLA_GRE_LINK]) : 0;
+ props->input_flags = nla_get_u16 (tb[IFLA_GRE_IFLAGS]);
+ props->output_flags = nla_get_u16 (tb[IFLA_GRE_OFLAGS]);
+ props->input_key = (props->input_flags & GRE_KEY) ? nla_get_u32 (tb[IFLA_GRE_IKEY]) : 0;
+ props->output_key = (props->output_flags & GRE_KEY) ? nla_get_u32 (tb[IFLA_GRE_OKEY]) : 0;
+ props->local = nla_get_u32 (tb[IFLA_GRE_LOCAL]);
+ props->remote = nla_get_u32 (tb[IFLA_GRE_REMOTE]);
+ props->tos = nla_get_u8 (tb[IFLA_GRE_TOS]);
+ props->ttl = nla_get_u8 (tb[IFLA_GRE_TTL]);
+ props->path_mtu_discovery = !!nla_get_u8 (tb[IFLA_GRE_PMTUDISC]);
+
+ return 0;
+}
+
+static gboolean
+gre_get_properties (NMPlatform *platform, int ifindex, NMPlatformGreProperties *props)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ int err;
+
+ err = nm_rtnl_link_parse_info_data (priv->nlh, ifindex,
+ gre_info_data_parser, props);
+ if (err != 0) {
+ warning ("(%s) could not read properties: %s",
+ link_get_name (platform, ifindex), nl_geterror (err));
+ }
+ return (err == 0);
+}
+
+static WifiData *
+wifi_get_wifi_data (NMPlatform *platform, int ifindex)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ WifiData *wifi_data;
+
+ wifi_data = g_hash_table_lookup (priv->wifi_data, GINT_TO_POINTER (ifindex));
+ if (!wifi_data) {
+ NMLinkType type;
+ const char *ifname;
+
+ type = link_get_type (platform, ifindex);
+ ifname = link_get_name (platform, ifindex);
+
+ if (type == NM_LINK_TYPE_WIFI)
+ wifi_data = wifi_utils_init (ifname, ifindex, TRUE);
+ else if (type == NM_LINK_TYPE_OLPC_MESH) {
+ /* The kernel driver now uses nl80211, but we force use of WEXT because
+ * the cfg80211 interactions are not quite ready to support access to
+ * mesh control through nl80211 just yet.
+ */
+#if HAVE_WEXT
+ wifi_data = wifi_wext_init (ifname, ifindex, FALSE);
+#endif
+ }
+
+ if (wifi_data)
+ g_hash_table_insert (priv->wifi_data, GINT_TO_POINTER (ifindex), wifi_data);
+ }
+
+ return wifi_data;
+}
+
+static gboolean
+wifi_get_capabilities (NMPlatform *platform, int ifindex, NMDeviceWifiCapabilities *caps)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+
+ if (caps)
+ *caps = wifi_utils_get_caps (wifi_data);
+ return TRUE;
+}
+
+static gboolean
+wifi_get_bssid (NMPlatform *platform, int ifindex, struct ether_addr *bssid)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+ return wifi_utils_get_bssid (wifi_data, bssid);
+}
+
+static GByteArray *
+wifi_get_ssid (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return NULL;
+ return wifi_utils_get_ssid (wifi_data);
+}
+
+static guint32
+wifi_get_frequency (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return 0;
+ return wifi_utils_get_freq (wifi_data);
+}
+
+static gboolean
+wifi_get_quality (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+ return wifi_utils_get_qual (wifi_data);
+}
+
+static guint32
+wifi_get_rate (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+ return wifi_utils_get_rate (wifi_data);
+}
+
+static NM80211Mode
+wifi_get_mode (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return NM_802_11_MODE_UNKNOWN;
+
+ return wifi_utils_get_mode (wifi_data);
+}
+
+static void
+wifi_set_mode (NMPlatform *platform, int ifindex, NM80211Mode mode)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (wifi_data)
+ wifi_utils_set_mode (wifi_data, mode);
+}
+
+static guint32
+wifi_find_frequency (NMPlatform *platform, int ifindex, const guint32 *freqs)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return 0;
+
+ return wifi_utils_find_freq (wifi_data, freqs);
+}
+
+static void
+wifi_indicate_addressing_running (NMPlatform *platform, int ifindex, gboolean running)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (wifi_data)
+ wifi_utils_indicate_addressing_running (wifi_data, running);
+}
+
+
+static guint32
+mesh_get_channel (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return 0;
+
+ return wifi_utils_get_mesh_channel (wifi_data);
+}
+
+static gboolean
+mesh_set_channel (NMPlatform *platform, int ifindex, guint32 channel)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+
+ return wifi_utils_set_mesh_channel (wifi_data, channel);
+}
+
+static gboolean
+mesh_set_ssid (NMPlatform *platform, int ifindex, const GByteArray *ssid)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+
+ return wifi_utils_set_mesh_ssid (wifi_data, ssid);
+}
+
+static gboolean
+link_get_wake_on_lan (NMPlatform *platform, int ifindex)
+{
+ NMLinkType type = link_get_type (platform, ifindex);
+
+ if (type == NM_LINK_TYPE_ETHERNET) {
+ struct ethtool_wolinfo wol;
+
+ memset (&wol, 0, sizeof (wol));
+ wol.cmd = ETHTOOL_GWOL;
+ if (!ethtool_get (link_get_name (platform, ifindex), &wol))
+ return FALSE;
+
+ return wol.wolopts != 0;
+ } else if (type == NM_LINK_TYPE_WIFI) {
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+
+ return wifi_utils_get_wowlan (wifi_data);
+ } else
+ return FALSE;
+}
+
+/******************************************************************/
+
+static gboolean
+_address_match (struct rtnl_addr *addr, int family, int ifindex)
+{
+ g_return_val_if_fail (addr, FALSE);
+
+ return rtnl_addr_get_family (addr) == family &&
+ rtnl_addr_get_ifindex (addr) == ifindex;
+}
+
+static GArray *
+ip4_address_get_all (NMPlatform *platform, int ifindex)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ GArray *addresses;
+ NMPlatformIP4Address address;
+ struct nl_object *object;
+
+ addresses = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Address));
+
+ for (object = nl_cache_get_first (priv->address_cache); object; object = nl_cache_get_next (object)) {
+ if (_address_match ((struct rtnl_addr *) object, AF_INET, ifindex)) {
+ if (init_ip4_address (&address, (struct rtnl_addr *) object))
+ g_array_append_val (addresses, address);
+ }
+ }
+
+ return addresses;
+}
+
+static GArray *
+ip6_address_get_all (NMPlatform *platform, int ifindex)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ GArray *addresses;
+ NMPlatformIP6Address address;
+ struct nl_object *object;
+
+ addresses = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP6Address));
+
+ for (object = nl_cache_get_first (priv->address_cache); object; object = nl_cache_get_next (object)) {
+ if (_address_match ((struct rtnl_addr *) object, AF_INET6, ifindex)) {
+ if (init_ip6_address (&address, (struct rtnl_addr *) object))
+ g_array_append_val (addresses, address);
+ }
+ }
+
+ return addresses;
+}
+
+#define IPV4LL_NETWORK (htonl (0xA9FE0000L))
+#define IPV4LL_NETMASK (htonl (0xFFFF0000L))
+
+static gboolean
+ip4_is_link_local (const struct in_addr *src)
+{
+ return (src->s_addr & IPV4LL_NETMASK) == IPV4LL_NETWORK;
+}
+
+static struct nl_object *
+build_rtnl_addr (int family,
+ int ifindex,
+ gconstpointer addr,
+ gconstpointer peer_addr,
+ int plen,
+ guint32 lifetime,
+ guint32 preferred,
+ guint flags,
+ const char *label)
+{
+ auto_nl_addr struct rtnl_addr *rtnladdr = _nm_rtnl_addr_alloc (ifindex);
+ struct rtnl_addr *rtnladdr_copy;
+ int addrlen = family == AF_INET ? sizeof (in_addr_t) : sizeof (struct in6_addr);
+ auto_nl_addr struct nl_addr *nladdr = _nm_nl_addr_build (family, addr, addrlen);
+ int nle;
+
+ /* IP address */
+ nle = rtnl_addr_set_local (rtnladdr, nladdr);
+ if (nle) {
+ error ("build_rtnl_addr(): rtnl_addr_set_local failed with %s (%d)", nl_geterror (nle), nle);
+ return NULL;
+ }
+
+ /* Tighten scope (IPv4 only) */
+ if (family == AF_INET && ip4_is_link_local (addr))
+ rtnl_addr_set_scope (rtnladdr, rtnl_str2scope ("link"));
+
+ /* IPv4 Broadcast address */
+ if (family == AF_INET) {
+ in_addr_t bcast;
+ auto_nl_addr struct nl_addr *bcaddr = NULL;
+
+ bcast = *((in_addr_t *) addr) | ~nm_utils_ip4_prefix_to_netmask (plen);
+ bcaddr = _nm_nl_addr_build (family, &bcast, addrlen);
+ g_assert (bcaddr);
+ rtnl_addr_set_broadcast (rtnladdr, bcaddr);
+ }
+
+ /* Peer/point-to-point address */
+ if (peer_addr) {
+ auto_nl_addr struct nl_addr *nlpeer = _nm_nl_addr_build (family, peer_addr, addrlen);
+
+ nle = rtnl_addr_set_peer (rtnladdr, nlpeer);
+ if (nle && nle != -NLE_AF_NOSUPPORT) {
+ /* IPv6 doesn't support peer addresses yet */
+ error ("build_rtnl_addr(): rtnl_addr_set_peer failed with %s (%d)", nl_geterror (nle), nle);
+ return NULL;
+ }
+ }
+
+ rtnl_addr_set_prefixlen (rtnladdr, plen);
+ if (lifetime) {
+ /* note that here we set the relative timestamps (ticking from *now*).
+ * Contrary to the rtnl_addr objects from our cache, which have absolute
+ * timestamps (see _rtnl_addr_hack_lifetimes_rel_to_abs()).
+ *
+ * This is correct, because we only use build_rtnl_addr() for
+ * add_object(), delete_object() and cache search (ip_address_exists). */
+ rtnl_addr_set_valid_lifetime (rtnladdr, lifetime);
+ rtnl_addr_set_preferred_lifetime (rtnladdr, preferred);
+ }
+ if (flags) {
+ if ((flags & ~0xFF) && !check_support_kernel_extended_ifa_flags (nm_platform_get ())) {
+ /* Older kernels don't accept unknown netlink attributes.
+ *
+ * With commit libnl commit 5206c050504f8676a24854519b9c351470fb7cc6, libnl will only set
+ * the extended address flags attribute IFA_FLAGS when necessary (> 8 bit). But it's up to
+ * us not to shove those extended flags on to older kernels.
+ *
+ * Just silently clear them. The kernel should ignore those unknown flags anyway. */
+ flags &= 0xFF;
+ }
+ rtnl_addr_set_flags (rtnladdr, flags);
+ }
+ if (label && *label)
+ rtnl_addr_set_label (rtnladdr, label);
+
+ rtnladdr_copy = rtnladdr;
+ rtnladdr = NULL;
+ return (struct nl_object *) rtnladdr_copy;
+}
+
+static gboolean
+ip4_address_add (NMPlatform *platform,
+ int ifindex,
+ in_addr_t addr,
+ in_addr_t peer_addr,
+ int plen,
+ guint32 lifetime,
+ guint32 preferred,
+ const char *label)
+{
+ return add_object (platform, build_rtnl_addr (AF_INET, ifindex, &addr,
+ peer_addr ? &peer_addr : NULL,
+ plen, lifetime, preferred, 0,
+ label));
+}
+
+static gboolean
+ip6_address_add (NMPlatform *platform,
+ int ifindex,
+ struct in6_addr addr,
+ struct in6_addr peer_addr,
+ int plen,
+ guint32 lifetime,
+ guint32 preferred,
+ guint flags)
+{
+ return add_object (platform, build_rtnl_addr (AF_INET6, ifindex, &addr,
+ IN6_IS_ADDR_UNSPECIFIED (&peer_addr) ? NULL : &peer_addr,
+ plen, lifetime, preferred, flags,
+ NULL));
+}
+
+static gboolean
+ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
+{
+ return delete_object (platform, build_rtnl_addr (AF_INET, ifindex, &addr, NULL, plen, 0, 0, 0, NULL), TRUE);
+}
+
+static gboolean
+ip6_address_delete (NMPlatform *platform, int ifindex, struct in6_addr addr, int plen)
+{
+ return delete_object (platform, build_rtnl_addr (AF_INET6, ifindex, &addr, NULL, plen, 0, 0, 0, NULL), TRUE);
+}
+
+static gboolean
+ip_address_exists (NMPlatform *platform, int family, int ifindex, gconstpointer addr, int plen)
+{
+ auto_nl_object struct nl_object *object = build_rtnl_addr (family, ifindex, addr, NULL, plen, 0, 0, 0, NULL);
+ auto_nl_object struct nl_object *cached_object = nl_cache_search (choose_cache (platform, object), object);
+
+ return !!cached_object;
+}
+
+static gboolean
+ip4_address_exists (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
+{
+ return ip_address_exists (platform, AF_INET, ifindex, &addr, plen);
+}
+
+static gboolean
+ip6_address_exists (NMPlatform *platform, int ifindex, struct in6_addr addr, int plen)
+{
+ return ip_address_exists (platform, AF_INET6, ifindex, &addr, plen);
+}
+
+/******************************************************************/
+
+static gboolean
+_route_match (struct rtnl_route *rtnlroute, int family, int ifindex)
+{
+ struct rtnl_nexthop *nexthop;
+
+ g_return_val_if_fail (rtnlroute, FALSE);
+
+ if (rtnl_route_get_type (rtnlroute) != RTN_UNICAST ||
+ rtnl_route_get_table (rtnlroute) != RT_TABLE_MAIN ||
+ rtnl_route_get_protocol (rtnlroute) == RTPROT_KERNEL ||
+ rtnl_route_get_family (rtnlroute) != family ||
+ rtnl_route_get_nnexthops (rtnlroute) != 1)
+ return FALSE;
+
+ nexthop = rtnl_route_nexthop_n (rtnlroute, 0);
+ return rtnl_route_nh_get_ifindex (nexthop) == ifindex;
+}
+
+static GArray *
+ip4_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ GArray *routes;
+ NMPlatformIP4Route route;
+ struct nl_object *object;
+
+ routes = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Route));
+
+ for (object = nl_cache_get_first (priv->route_cache); object; object = nl_cache_get_next (object)) {
+ if (_route_match ((struct rtnl_route *) object, AF_INET, ifindex)) {
+ if (init_ip4_route (&route, (struct rtnl_route *) object)) {
+ if (route.plen != 0 || include_default)
+ g_array_append_val (routes, route);
+ }
+ }
+ }
+
+ return routes;
+}
+
+static GArray *
+ip6_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ GArray *routes;
+ NMPlatformIP6Route route;
+ struct nl_object *object;
+
+ routes = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP6Route));
+
+ for (object = nl_cache_get_first (priv->route_cache); object; object = nl_cache_get_next (object)) {
+ if (_route_match ((struct rtnl_route *) object, AF_INET6, ifindex)) {
+ if (init_ip6_route (&route, (struct rtnl_route *) object)) {
+ if (route.plen != 0 || include_default)
+ g_array_append_val (routes, route);
+ }
+ }
+ }
+
+ return routes;
+}
+
+static void
+clear_host_address (int family, const void *network, int plen, void *dst)
+{
+ g_return_if_fail (plen == (guint8)plen);
+ g_return_if_fail (network);
+
+ switch (family) {
+ case AF_INET:
+ *((in_addr_t *) dst) = nm_utils_ip4_address_clear_host_address (*((in_addr_t *) network), plen);
+ break;
+ case AF_INET6:
+ nm_utils_ip6_address_clear_host_address ((struct in6_addr *) dst, (const struct in6_addr *) network, plen);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static struct nl_object *
+build_rtnl_route (int family, int ifindex, NMPlatformSource source,
+ gconstpointer network, int plen, gconstpointer gateway,
+ int metric, int mss)
+{
+ guint32 network_clean[4];
+ struct rtnl_route *rtnlroute;
+ struct rtnl_nexthop *nexthop;
+ int addrlen = (family == AF_INET) ? sizeof (in_addr_t) : sizeof (struct in6_addr);
+ /* Workaround a libnl bug by using zero destination address length for default routes */
+ auto_nl_addr struct nl_addr *dst = NULL;
+ auto_nl_addr struct nl_addr *gw = gateway ? _nm_nl_addr_build (family, gateway, addrlen) : NULL;
+
+ /* There seem to be problems adding a route with non-zero host identifier.
+ * Adding IPv6 routes is simply ignored, without error message.
+ * In the IPv4 case, we got an error. Thus, we have to make sure, that
+ * the address is sane. */
+ clear_host_address (family, network, plen, network_clean);
+ dst = _nm_nl_addr_build (family, network_clean, plen ? addrlen : 0);
+ nl_addr_set_prefixlen (dst, plen);
+
+ rtnlroute = _nm_rtnl_route_alloc ();
+ rtnl_route_set_table (rtnlroute, RT_TABLE_MAIN);
+ rtnl_route_set_tos (rtnlroute, 0);
+ rtnl_route_set_dst (rtnlroute, dst);
+ rtnl_route_set_priority (rtnlroute, metric);
+ rtnl_route_set_family (rtnlroute, family);
+ rtnl_route_set_protocol (rtnlroute, source_to_rtprot (source));
+
+ nexthop = _nm_rtnl_route_nh_alloc ();
+ rtnl_route_nh_set_ifindex (nexthop, ifindex);
+ if (gw && !nl_addr_iszero (gw))
+ rtnl_route_nh_set_gateway (nexthop, gw);
+ rtnl_route_add_nexthop (rtnlroute, nexthop);
+
+ if (mss > 0)
+ rtnl_route_set_metric (rtnlroute, RTAX_ADVMSS, mss);
+
+ return (struct nl_object *) rtnlroute;
+}
+
+static gboolean
+ip4_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ in_addr_t network, int plen, in_addr_t gateway,
+ int metric, int mss)
+{
+ return add_object (platform, build_rtnl_route (AF_INET, ifindex, source, &network, plen, &gateway, metric, mss));
+}
+
+static gboolean
+ip6_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ struct in6_addr network, int plen, struct in6_addr gateway,
+ int metric, int mss)
+{
+ return add_object (platform, build_rtnl_route (AF_INET6, ifindex, source, &network, plen, &gateway, metric, mss));
+}
+
+static struct rtnl_route *
+route_search_cache (struct nl_cache *cache, int family, int ifindex, const void *network, int plen, int metric)
+{
+ guint32 network_clean[4], dst_clean[4];
+ struct nl_object *object;
+
+ clear_host_address (family, network, plen, network_clean);
+
+ for (object = nl_cache_get_first (cache); object; object = nl_cache_get_next (object)) {
+ struct nl_addr *dst;
+ struct rtnl_route *rtnlroute = (struct rtnl_route *) object;
+
+ if (!_route_match (rtnlroute, family, ifindex))
+ continue;
+
+ if (metric && metric != rtnl_route_get_priority (rtnlroute))
+ continue;
+
+ dst = rtnl_route_get_dst (rtnlroute);
+ if ( !dst
+ || nl_addr_get_family (dst) != family
+ || nl_addr_get_prefixlen (dst) != plen)
+ continue;
+
+ clear_host_address (family, nl_addr_get_binary_addr (dst), plen, dst_clean);
+ if (memcmp (dst_clean, network_clean,
+ family == AF_INET ? sizeof (guint32) : sizeof (struct in6_addr)) != 0)
+ continue;
+
+ rtnl_route_get (rtnlroute);
+ return rtnlroute;
+ }
+ return NULL;
+}
+
+static gboolean
+refresh_route (NMPlatform *platform, int family, int ifindex, const void *network, int plen, int metric)
+{
+ struct nl_cache *cache;
+ auto_nl_object struct rtnl_route *cached_object = NULL;
+
+ cache = choose_cache_by_type (platform, family == AF_INET ? OBJECT_TYPE_IP4_ROUTE : OBJECT_TYPE_IP6_ROUTE);
+ cached_object = route_search_cache (cache, family, ifindex, network, plen, metric);
+
+ if (cached_object)
+ return refresh_object (platform, (struct nl_object *) cached_object, TRUE, NM_PLATFORM_REASON_INTERNAL);
+ return TRUE;
+}
+
+static gboolean
+ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+{
+ in_addr_t gateway = 0;
+ struct rtnl_route *cached_object;
+ struct nl_object *route = build_rtnl_route (AF_INET, ifindex, NM_PLATFORM_SOURCE_UNKNOWN, &network, plen, &gateway, metric, 0);
+ uint8_t scope = RT_SCOPE_NOWHERE;
+ struct nl_cache *cache;
+
+ g_return_val_if_fail (route, FALSE);
+
+ cache = choose_cache_by_type (platform, OBJECT_TYPE_IP4_ROUTE);
+
+ /* when deleting an IPv4 route, several fields of the provided route must match.
+ * Lookup in the cache so that we hopefully get the right values. */
+ cached_object = (struct rtnl_route *) nl_cache_search (cache, route);
+ if (!cached_object)
+ cached_object = route_search_cache (cache, AF_INET, ifindex, &network, plen, metric);
+
+ if (!_nl_has_capability (1 /* NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE */)) {
+ /* When searching for a matching IPv4 route to delete, the kernel
+ * searches for a matching scope, unless the RTM_DELROUTE message
+ * specifies RT_SCOPE_NOWHERE (see fib_table_delete()).
+ *
+ * However, if we set the scope of @rtnlroute to RT_SCOPE_NOWHERE (or
+ * leave it unset), rtnl_route_build_msg() will reset the scope to
+ * rtnl_route_guess_scope() -- which probably guesses wrong.
+ *
+ * As a workaround, we look at the cached route and use that scope.
+ *
+ * Newer versions of libnl, no longer reset the scope if explicitly set to RT_SCOPE_NOWHERE.
+ * So, this workaround is only needed unless we have NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE.
+ **/
+
+ if (cached_object)
+ scope = rtnl_route_get_scope (cached_object);
+
+ if (scope == RT_SCOPE_NOWHERE) {
+ /* If we would set the scope to RT_SCOPE_NOWHERE, libnl would guess the scope.
+ * But probably it will guess 'link' because we set the next hop of the route
+ * to zero (0.0.0.0). A better guess is 'global'. */
+ scope = RT_SCOPE_UNIVERSE;
+ }
+ }
+ rtnl_route_set_scope ((struct rtnl_route *) route, scope);
+
+ if (cached_object)
+ rtnl_route_set_tos ((struct rtnl_route *) route, rtnl_route_get_tos (cached_object));
+
+ /* The following fields are also relevant when comparing the route, but the default values
+ * are already as we want them:
+ *
+ * type: RTN_UNICAST (setting to zero would ignore the type, but we only want to delete RTN_UNICAST)
+ * pref_src: NULL
+ */
+
+ rtnl_route_put (cached_object);
+ return delete_object (platform, route, FALSE) && refresh_route (platform, AF_INET, ifindex, &network, plen, metric);
+}
+
+static gboolean
+ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+{
+ struct in6_addr gateway = IN6ADDR_ANY_INIT;
+
+ return delete_object (platform, build_rtnl_route (AF_INET6, ifindex, NM_PLATFORM_SOURCE_UNKNOWN ,&network, plen, &gateway, metric, 0), FALSE) &&
+ refresh_route (platform, AF_INET6, ifindex, &network, plen, metric);
+}
+
+static gboolean
+ip_route_exists (NMPlatform *platform, int family, int ifindex, gpointer network, int plen, int metric)
+{
+ auto_nl_object struct nl_object *object = build_rtnl_route (family, ifindex,
+ NM_PLATFORM_SOURCE_UNKNOWN,
+ network, plen, NULL, metric, 0);
+ struct nl_cache *cache = choose_cache (platform, object);
+ auto_nl_object struct nl_object *cached_object = nl_cache_search (cache, object);
+
+ if (!cached_object)
+ cached_object = (struct nl_object *) route_search_cache (cache, family, ifindex, network, plen, metric);
+ return !!cached_object;
+}
+
+static gboolean
+ip4_route_exists (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+{
+ return ip_route_exists (platform, AF_INET, ifindex, &network, plen, metric);
+}
+
+static gboolean
+ip6_route_exists (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+{
+ return ip_route_exists (platform, AF_INET6, ifindex, &network, plen, metric);
+}
+
+/******************************************************************/
+
+#define EVENT_CONDITIONS ((GIOCondition) (G_IO_IN | G_IO_PRI))
+#define ERROR_CONDITIONS ((GIOCondition) (G_IO_ERR | G_IO_NVAL))
+#define DISCONNECT_CONDITIONS ((GIOCondition) (G_IO_HUP))
+
+static int
+verify_source (struct nl_msg *msg, gpointer user_data)
+{
+ struct ucred *creds = nlmsg_get_creds (msg);
+
+ if (!creds || creds->pid || creds->uid || creds->gid) {
+ if (creds)
+ warning ("netlink: received non-kernel message (pid %d uid %d gid %d)",
+ creds->pid, creds->uid, creds->gid);
+ else
+ warning ("netlink: received message without credentials");
+ return NL_STOP;
+ }
+
+ return NL_OK;
+}
+
+static gboolean
+event_handler (GIOChannel *channel,
+ GIOCondition io_condition,
+ gpointer user_data)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (user_data);
+ int nle;
+
+ nle = nl_recvmsgs_default (priv->nlh_event);
+ if (nle < 0)
+ switch (nle) {
+ case -NLE_DUMP_INTR:
+ /* this most likely happens due to our request (RTM_GETADDR, AF_INET6, NLM_F_DUMP)
+ * to detect support for support_kernel_extended_ifa_flags. This is not critical
+ * and can happen easily. */
+ debug ("Uncritical failure to retrieve incoming events: %s (%d)", nl_geterror (nle), nle);
+ break;
+ default:
+ error ("Failed to retrieve incoming events: %s (%d)", nl_geterror (nle), nle);
+ break;
+ }
+ return TRUE;
+}
+
+static struct nl_sock *
+setup_socket (gboolean event, gpointer user_data)
+{
+ struct nl_sock *sock;
+ int nle;
+
+ sock = nl_socket_alloc ();
+ g_return_val_if_fail (sock, NULL);
+
+ /* Only ever accept messages from kernel */
+ nle = nl_socket_modify_cb (sock, NL_CB_MSG_IN, NL_CB_CUSTOM, verify_source, user_data);
+ g_assert (!nle);
+
+ /* Dispatch event messages (event socket only) */
+ if (event) {
+ nl_socket_modify_cb (sock, NL_CB_VALID, NL_CB_CUSTOM, event_notification, user_data);
+ nl_socket_disable_seq_check (sock);
+ }
+
+ nle = nl_connect (sock, NETLINK_ROUTE);
+ g_assert (!nle);
+ nle = nl_socket_set_passcred (sock, 1);
+ g_assert (!nle);
+
+ return sock;
+}
+
+/******************************************************************/
+
+static void
+udev_device_added (NMPlatform *platform,
+ GUdevDevice *udev_device)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ auto_nl_object struct rtnl_link *rtnllink = NULL;
+ const char *ifname;
+ int ifindex;
+ gboolean was_announceable = FALSE;
+
+ ifname = g_udev_device_get_name (udev_device);
+ if (!ifname) {
+ debug ("udev-add: failed to get device's interface");
+ return;
+ }
+
+ if (g_udev_device_get_property (udev_device, "IFINDEX"))
+ ifindex = g_udev_device_get_property_as_int (udev_device, "IFINDEX");
+ else {
+ warning ("(%s): udev-add: failed to get device's ifindex", ifname);
+ return;
+ }
+ if (ifindex <= 0) {
+ warning ("(%s): udev-add: retrieved invalid IFINDEX=%d", ifname, ifindex);
+ return;
+ }
+
+ if (!g_udev_device_get_sysfs_path (udev_device)) {
+ debug ("(%s): udev-add: couldn't determine device path; ignoring...", ifname);
+ return;
+ }
+
+ rtnllink = rtnl_link_get (priv->link_cache, ifindex);
+ if (rtnllink)
+ was_announceable = link_is_announceable (platform, rtnllink);
+
+ g_hash_table_insert (priv->udev_devices, GINT_TO_POINTER (ifindex),
+ g_object_ref (udev_device));
+
+ /* Announce devices only if they also have been discovered via Netlink. */
+ if (rtnllink && link_is_announceable (platform, rtnllink))
+ announce_object (platform, (struct nl_object *) rtnllink, was_announceable ? NM_PLATFORM_SIGNAL_CHANGED : NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_EXTERNAL);
+}
+
+static void
+udev_device_removed (NMPlatform *platform,
+ GUdevDevice *udev_device)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ auto_nl_object struct rtnl_link *rtnllink = NULL;
+ int ifindex = 0;
+ gboolean was_announceable = FALSE;
+
+ if (g_udev_device_get_property (udev_device, "IFINDEX"))
+ ifindex = g_udev_device_get_property_as_int (udev_device, "IFINDEX");
+ else {
+ GHashTableIter iter;
+ gpointer key, value;
+
+ /* This should not happen, but just to be sure.
+ * If we can't get IFINDEX, go through the devices and
+ * compare the pointers.
+ */
+ g_hash_table_iter_init (&iter, priv->udev_devices);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ if ((GUdevDevice *)value == udev_device) {
+ ifindex = GPOINTER_TO_INT (key);
+ break;
+ }
+ }
+ }
+
+ debug ("udev-remove: IFINDEX=%d", ifindex);
+ if (ifindex <= 0)
+ return;
+
+ rtnllink = rtnl_link_get (priv->link_cache, ifindex);
+ if (rtnllink)
+ was_announceable = link_is_announceable (platform, rtnllink);
+
+ g_hash_table_remove (priv->udev_devices, GINT_TO_POINTER (ifindex));
+
+ /* Announce device removal if it is no longer announceable. */
+ if (was_announceable && !link_is_announceable (platform, rtnllink))
+ announce_object (platform, (struct nl_object *) rtnllink, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_EXTERNAL);
+}
+
+static void
+handle_udev_event (GUdevClient *client,
+ const char *action,
+ GUdevDevice *udev_device,
+ gpointer user_data)
+{
+ NMPlatform *platform = NM_PLATFORM (user_data);
+ const char *subsys;
+ const char *ifindex;
+ guint64 seqnum;
+
+ g_return_if_fail (action != NULL);
+
+ /* A bit paranoid */
+ subsys = g_udev_device_get_subsystem (udev_device);
+ g_return_if_fail (!g_strcmp0 (subsys, "net"));
+
+ ifindex = g_udev_device_get_property (udev_device, "IFINDEX");
+ seqnum = g_udev_device_get_seqnum (udev_device);
+ debug ("UDEV event: action '%s' subsys '%s' device '%s' (%s); seqnum=%" G_GUINT64_FORMAT,
+ action, subsys, g_udev_device_get_name (udev_device),
+ ifindex ? ifindex : "unknown", seqnum);
+
+ if (!strcmp (action, "add") || !strcmp (action, "move"))
+ udev_device_added (platform, udev_device);
+ if (!strcmp (action, "remove"))
+ udev_device_removed (platform, udev_device);
+}
+
+/******************************************************************/
+
+static void
+nm_linux_platform_init (NMLinuxPlatform *platform)
+{
+}
+
+static gboolean
+setup (NMPlatform *platform)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ const char *udev_subsys[] = { "net", NULL };
+ GUdevEnumerator *enumerator;
+ GList *devices, *iter;
+ int channel_flags;
+ gboolean status;
+ int nle;
+ struct nl_object *object;
+
+ /* Initialize netlink socket for requests */
+ priv->nlh = setup_socket (FALSE, platform);
+ g_assert (priv->nlh);
+ debug ("Netlink socket for requests established: %d", nl_socket_get_local_port (priv->nlh));
+
+ /* Initialize netlink socket for events */
+ priv->nlh_event = setup_socket (TRUE, platform);
+ g_assert (priv->nlh_event);
+ /* The default buffer size wasn't enough for the testsuites. It might just
+ * as well happen with NetworkManager itself. For now let's hope 128KB is
+ * good enough.
+ */
+ nle = nl_socket_set_buffer_size (priv->nlh_event, 131072, 0);
+ g_assert (!nle);
+ nle = nl_socket_add_memberships (priv->nlh_event,
+ RTNLGRP_LINK,
+ RTNLGRP_IPV4_IFADDR, RTNLGRP_IPV6_IFADDR,
+ RTNLGRP_IPV4_ROUTE, RTNLGRP_IPV6_ROUTE,
+ 0);
+ g_assert (!nle);
+ debug ("Netlink socket for events established: %d", nl_socket_get_local_port (priv->nlh_event));
+
+ priv->event_channel = g_io_channel_unix_new (nl_socket_get_fd (priv->nlh_event));
+ g_io_channel_set_encoding (priv->event_channel, NULL, NULL);
+ g_io_channel_set_close_on_unref (priv->event_channel, TRUE);
+
+ channel_flags = g_io_channel_get_flags (priv->event_channel);
+ status = g_io_channel_set_flags (priv->event_channel,
+ channel_flags | G_IO_FLAG_NONBLOCK, NULL);
+ g_assert (status);
+ priv->event_id = g_io_add_watch (priv->event_channel,
+ (EVENT_CONDITIONS | ERROR_CONDITIONS | DISCONNECT_CONDITIONS),
+ event_handler, platform);
+
+ /* Allocate netlink caches */
+ rtnl_link_alloc_cache (priv->nlh, AF_UNSPEC, &priv->link_cache);
+ rtnl_addr_alloc_cache (priv->nlh, &priv->address_cache);
+ rtnl_route_alloc_cache (priv->nlh, AF_UNSPEC, 0, &priv->route_cache);
+ g_assert (priv->link_cache && priv->address_cache && priv->route_cache);
+
+ for (object = nl_cache_get_first (priv->address_cache); object; object = nl_cache_get_next (object))
+ _rtnl_addr_hack_lifetimes_rel_to_abs ((struct rtnl_addr *) object);
+
+ /* Set up udev monitoring */
+ priv->udev_client = g_udev_client_new (udev_subsys);
+ g_signal_connect (priv->udev_client, "uevent", G_CALLBACK (handle_udev_event), platform);
+ priv->udev_devices = g_hash_table_new_full (NULL, NULL, NULL, g_object_unref);
+
+ /* And read initial device list */
+ enumerator = g_udev_enumerator_new (priv->udev_client);
+ g_udev_enumerator_add_match_subsystem (enumerator, "net");
+ g_udev_enumerator_add_match_is_initialized (enumerator);
+
+ devices = g_udev_enumerator_execute (enumerator);
+ for (iter = devices; iter; iter = g_list_next (iter)) {
+ udev_device_added (platform, G_UDEV_DEVICE (iter->data));
+ g_object_unref (G_UDEV_DEVICE (iter->data));
+ }
+ g_list_free (devices);
+ g_object_unref (enumerator);
+
+ /* request all IPv6 addresses (hopeing that there is at least one), to check for
+ * the IFA_FLAGS attribute. */
+ nle = nl_rtgen_request (priv->nlh_event, RTM_GETADDR, AF_INET6, NLM_F_DUMP);
+ if (nle < 0)
+ nm_log_warn (LOGD_PLATFORM, "Netlink error: requesting RTM_GETADDR failed with %s", nl_geterror (nle));
+
+ priv->wifi_data = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) wifi_utils_deinit);
+
+ return TRUE;
+}
+
+static void
+nm_linux_platform_finalize (GObject *object)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (object);
+
+ /* Free netlink resources */
+ g_source_remove (priv->event_id);
+ g_io_channel_unref (priv->event_channel);
+ nl_socket_free (priv->nlh);
+ nl_socket_free (priv->nlh_event);
+ nl_cache_free (priv->link_cache);
+ nl_cache_free (priv->address_cache);
+ nl_cache_free (priv->route_cache);
+
+ g_object_unref (priv->udev_client);
+ g_hash_table_unref (priv->udev_devices);
+ g_hash_table_unref (priv->wifi_data);
+
+ G_OBJECT_CLASS (nm_linux_platform_parent_class)->finalize (object);
+}
+
+#define OVERRIDE(function) platform_class->function = function
+
+static void
+nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMPlatformClass *platform_class = NM_PLATFORM_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMLinuxPlatformPrivate));
+
+ /* virtual methods */
+ object_class->finalize = nm_linux_platform_finalize;
+
+ platform_class->setup = setup;
+
+ platform_class->sysctl_set = sysctl_set;
+ platform_class->sysctl_get = sysctl_get;
+
+ platform_class->link_get = _nm_platform_link_get;
+ platform_class->link_get_all = link_get_all;
+ platform_class->link_add = link_add;
+ platform_class->link_delete = link_delete;
+ platform_class->link_get_ifindex = link_get_ifindex;
+ platform_class->link_get_name = link_get_name;
+ platform_class->link_get_type = link_get_type;
+ platform_class->link_get_type_name = link_get_type_name;
+
+ platform_class->link_refresh = link_refresh;
+
+ platform_class->link_set_up = link_set_up;
+ platform_class->link_set_down = link_set_down;
+ platform_class->link_set_arp = link_set_arp;
+ platform_class->link_set_noarp = link_set_noarp;
+ platform_class->link_is_up = link_is_up;
+ platform_class->link_is_connected = link_is_connected;
+ platform_class->link_uses_arp = link_uses_arp;
+
+ platform_class->link_get_address = link_get_address;
+ platform_class->link_set_address = link_set_address;
+ platform_class->link_get_mtu = link_get_mtu;
+ platform_class->link_set_mtu = link_set_mtu;
+
+ platform_class->link_get_physical_port_id = link_get_physical_port_id;
+ platform_class->link_get_wake_on_lan = link_get_wake_on_lan;
+
+ platform_class->link_supports_carrier_detect = link_supports_carrier_detect;
+ platform_class->link_supports_vlans = link_supports_vlans;
+
+ platform_class->link_enslave = link_enslave;
+ platform_class->link_release = link_release;
+ platform_class->link_get_master = link_get_master;
+ platform_class->master_set_option = master_set_option;
+ platform_class->master_get_option = master_get_option;
+ platform_class->slave_set_option = slave_set_option;
+ platform_class->slave_get_option = slave_get_option;
+
+ platform_class->vlan_add = vlan_add;
+ platform_class->vlan_get_info = vlan_get_info;
+ platform_class->vlan_set_ingress_map = vlan_set_ingress_map;
+ platform_class->vlan_set_egress_map = vlan_set_egress_map;
+
+ platform_class->infiniband_partition_add = infiniband_partition_add;
+
+ platform_class->veth_get_properties = veth_get_properties;
+ platform_class->tun_get_properties = tun_get_properties;
+ platform_class->macvlan_get_properties = macvlan_get_properties;
+ platform_class->vxlan_get_properties = vxlan_get_properties;
+ platform_class->gre_get_properties = gre_get_properties;
+
+ platform_class->wifi_get_capabilities = wifi_get_capabilities;
+ platform_class->wifi_get_bssid = wifi_get_bssid;
+ platform_class->wifi_get_ssid = wifi_get_ssid;
+ platform_class->wifi_get_frequency = wifi_get_frequency;
+ platform_class->wifi_get_quality = wifi_get_quality;
+ platform_class->wifi_get_rate = wifi_get_rate;
+ platform_class->wifi_get_mode = wifi_get_mode;
+ platform_class->wifi_set_mode = wifi_set_mode;
+ platform_class->wifi_find_frequency = wifi_find_frequency;
+ platform_class->wifi_indicate_addressing_running = wifi_indicate_addressing_running;
+
+ platform_class->mesh_get_channel = mesh_get_channel;
+ platform_class->mesh_set_channel = mesh_set_channel;
+ platform_class->mesh_set_ssid = mesh_set_ssid;
+
+ platform_class->ip4_address_get_all = ip4_address_get_all;
+ platform_class->ip6_address_get_all = ip6_address_get_all;
+ platform_class->ip4_address_add = ip4_address_add;
+ platform_class->ip6_address_add = ip6_address_add;
+ platform_class->ip4_address_delete = ip4_address_delete;
+ platform_class->ip6_address_delete = ip6_address_delete;
+ platform_class->ip4_address_exists = ip4_address_exists;
+ platform_class->ip6_address_exists = ip6_address_exists;
+
+ platform_class->ip4_route_get_all = ip4_route_get_all;
+ platform_class->ip6_route_get_all = ip6_route_get_all;
+ platform_class->ip4_route_add = ip4_route_add;
+ platform_class->ip6_route_add = ip6_route_add;
+ platform_class->ip4_route_delete = ip4_route_delete;
+ platform_class->ip6_route_delete = ip6_route_delete;
+ platform_class->ip4_route_exists = ip4_route_exists;
+ platform_class->ip6_route_exists = ip6_route_exists;
+
+ platform_class->check_support_kernel_extended_ifa_flags = check_support_kernel_extended_ifa_flags;
+}
diff --git a/src/platform/nm-linux-platform.h b/src/platform/nm-linux-platform.h
new file mode 100644
index 000000000..53ea75e69
--- /dev/null
+++ b/src/platform/nm-linux-platform.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-linux-platform.h - Linux kernel & udev network configuration layer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ */
+
+#ifndef NM_LINUX_PLATFORM_H
+#define NM_LINUX_PLATFORM_H
+
+#include "nm-platform.h"
+
+#define NM_TYPE_LINUX_PLATFORM (nm_linux_platform_get_type ())
+#define NM_LINUX_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_LINUX_PLATFORM, NMLinuxPlatform))
+#define NM_LINUX_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_LINUX_PLATFORM, NMLinuxPlatformClass))
+#define NM_IS_LINUX_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_LINUX_PLATFORM))
+#define NM_IS_LINUX_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_LINUX_PLATFORM))
+#define NM_LINUX_PLATFORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_LINUX_PLATFORM, NMLinuxPlatformClass))
+
+/******************************************************************/
+
+typedef struct {
+ NMPlatform parent;
+} NMLinuxPlatform;
+
+typedef struct {
+ NMPlatformClass parent;
+} NMLinuxPlatformClass;
+
+/******************************************************************/
+
+GType nm_linux_platform_get_type (void);
+
+void nm_linux_platform_setup (void);
+
+#endif /* NM_LINUX_PLATFORM_H */
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
new file mode 100644
index 000000000..542b0faab
--- /dev/null
+++ b/src/platform/nm-platform.c
@@ -0,0 +1,2618 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-platform.c - Handle runtime kernel networking configuration
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <netlink/route/addr.h>
+
+#include "NetworkManagerUtils.h"
+#include "nm-utils.h"
+#include "nm-platform.h"
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
+#include "nm-enum-types.h"
+
+#define debug(...) nm_log_dbg (LOGD_PLATFORM, __VA_ARGS__)
+
+#define NM_PLATFORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_PLATFORM, NMPlatformPrivate))
+
+G_DEFINE_TYPE (NMPlatform, nm_platform, G_TYPE_OBJECT)
+
+/* NMPlatform signals */
+enum {
+ SIGNAL_LINK_CHANGED,
+ SIGNAL_IP4_ADDRESS_CHANGED,
+ SIGNAL_IP6_ADDRESS_CHANGED,
+ SIGNAL_IP4_ROUTE_CHANGED,
+ SIGNAL_IP6_ROUTE_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/******************************************************************/
+
+/* Singleton NMPlatform subclass instance and cached class object */
+static NMPlatform *platform = NULL;
+static NMPlatformClass *klass = NULL;
+
+/**
+ * nm_platform_setup:
+ * @type: The #GType for a subclass of #NMPlatform
+ *
+ * Do not use this function directly, it is intended to be called by
+ * NMPlatform subclasses. For the linux platform initialization use
+ * nm_linux_platform_setup() instead.
+ *
+ * Failing to set up #NMPlatform singleton results in a fatal error,
+ * as well as trying to initialize it multiple times without freeing
+ * it.
+ *
+ * NetworkManager will typically use only one platform object during
+ * its run. Test programs might want to switch platform implementations,
+ * though. This is done with a combination of nm_platform_free() and
+ * nm_*_platform_setup().
+ */
+void
+nm_platform_setup (GType type)
+{
+ gboolean status;
+
+ g_assert (platform == NULL);
+
+ platform = g_object_new (type, NULL);
+ g_assert (NM_IS_PLATFORM (platform));
+
+ klass = NM_PLATFORM_GET_CLASS (platform);
+ g_assert (klass->setup);
+
+ status = klass->setup (platform);
+ g_assert (status);
+}
+
+/**
+ * nm_platform_free:
+ *
+ * Free #NMPlatform singleton created by nm_*_platform_setup().
+ */
+void
+nm_platform_free (void)
+{
+ g_assert (platform);
+
+ g_object_unref (platform);
+ platform = NULL;
+}
+
+/**
+ * nm_platform_get:
+ *
+ * Retrieve #NMPlatform singleton. Use this whenever you want to connect to
+ * #NMPlatform signals. It is an error to call it before nm_*_platform_setup()
+ * or after nm_platform_free().
+ *
+ * Returns: (transfer none): The #NMPlatform singleton reference.
+ */
+NMPlatform *
+nm_platform_get (void)
+{
+ g_assert (platform);
+
+ return platform;
+}
+
+/******************************************************************/
+
+/**
+ * nm_platform_set_error:
+ * @error: The error code
+ *
+ * Convenience function to falsify platform->error. It can be used for example
+ * by functions that want to save the error, execute some operations and
+ * restore it.
+ */
+void nm_platform_set_error (NMPlatformError error)
+{
+ platform->error = error;
+}
+
+/**
+ * nm_platform_get_error:
+ *
+ * Convenience function to quickly retrieve the error code of the last
+ * operation.
+ *
+ * Returns: Integer error code.
+ */
+NMPlatformError
+nm_platform_get_error (void)
+{
+ g_assert (platform);
+
+ return platform->error;
+}
+
+/**
+ * nm_platform_get_error_message:
+ *
+ * Returns: Static human-readable string for the error. Don't free.
+ */
+const char *
+nm_platform_get_error_msg (void)
+{
+ g_assert (platform);
+
+ switch (platform->error) {
+ case NM_PLATFORM_ERROR_NONE:
+ return "unknown error";
+ case NM_PLATFORM_ERROR_NOT_FOUND:
+ return "object not found";
+ case NM_PLATFORM_ERROR_EXISTS:
+ return "object already exists";
+ case NM_PLATFORM_ERROR_WRONG_TYPE:
+ return "object is wrong type";
+ case NM_PLATFORM_ERROR_NOT_SLAVE:
+ return "link not a slave";
+ case NM_PLATFORM_ERROR_NO_FIRMWARE:
+ return "firmware not found";
+ default:
+ return "invalid error number";
+ }
+}
+
+static void
+reset_error (void)
+{
+ g_assert (platform);
+ platform->error = NM_PLATFORM_ERROR_NONE;
+}
+
+#define IFA_F_MANAGETEMPADDR_STR "mngtmpaddr"
+#define IFA_F_NOPREFIXROUTE_STR "noprefixroute"
+gboolean
+nm_platform_check_support_libnl_extended_ifa_flags ()
+{
+ static int supported = -1;
+
+ /* support for extended ifa-flags was added together
+ * with the IFA_F_MANAGETEMPADDR flag. So, check if libnl
+ * is able to parse this flag. */
+ if (supported == -1)
+ supported = rtnl_addr_str2flags (IFA_F_MANAGETEMPADDR_STR) == IFA_F_MANAGETEMPADDR;
+
+ return supported;
+}
+
+gboolean
+nm_platform_check_support_kernel_extended_ifa_flags ()
+{
+ g_return_val_if_fail (NM_IS_PLATFORM (platform), FALSE);
+
+ if (!klass->check_support_kernel_extended_ifa_flags)
+ return FALSE;
+
+ return klass->check_support_kernel_extended_ifa_flags (platform);
+}
+
+/******************************************************************/
+
+/**
+ * nm_platform_sysctl_set:
+ * @path: Absolute option path
+ * @value: Value to write
+ *
+ * This function is intended to be used for writing values to sysctl-style
+ * virtual runtime configuration files. This includes not only /proc/sys
+ * but also for example /sys/class.
+ *
+ * Returns: %TRUE on success.
+ */
+gboolean
+nm_platform_sysctl_set (const char *path, const char *value)
+{
+ reset_error ();
+
+ g_return_val_if_fail (path, FALSE);
+ g_return_val_if_fail (value, FALSE);
+ g_return_val_if_fail (klass->sysctl_set, FALSE);
+
+ return klass->sysctl_set (platform, path, value);
+}
+
+/**
+ * nm_platform_sysctl_get:
+ * @path: Absolute path to sysctl
+ *
+ * Returns: (transfer full): Contents of the virtual sysctl file.
+ */
+char *
+nm_platform_sysctl_get (const char *path)
+{
+ reset_error ();
+
+ g_return_val_if_fail (path, NULL);
+ g_return_val_if_fail (klass->sysctl_get, NULL);
+
+ return klass->sysctl_get (platform, path);
+}
+
+/**
+ * nm_platform_sysctl_get_int32:
+ * @path: Absolute path to sysctl
+ * @fallback: default value, if the content of path could not be read
+ * as decimal integer.
+ *
+ * Returns: contents of the sysctl file parsed as s32 integer, or
+ * @fallback on error. On error, %errno will be set to a non-zero
+ * value, on success %errno will be set to zero.
+ */
+gint32
+nm_platform_sysctl_get_int32 (const char *path, gint32 fallback)
+{
+ return nm_platform_sysctl_get_int_checked (path, 10, G_MININT32, G_MAXINT32, fallback);
+}
+
+/**
+ * nm_platform_sysctl_get_int_checked:
+ * @path: Absolute path to sysctl
+ * @base: base of numeric conversion
+ * @min: minimal value that is still valid
+ * @max: maximal value that is still valid
+ * @fallback: default value, if the content of path could not be read
+ * as valid integer.
+ *
+ * Returns: contents of the sysctl file parsed as s64 integer, or
+ * @fallback on error. On error, %errno will be set to a non-zero
+ * value. On success, %errno will be set to zero. The returned value
+ * will always be in the range between @min and @max
+ * (inclusive) or @fallback.
+ */
+gint64
+nm_platform_sysctl_get_int_checked (const char *path, guint base, gint64 min, gint64 max, gint64 fallback)
+{
+ char *value = NULL;
+ gint32 ret;
+
+ g_return_val_if_fail (path, fallback);
+
+ if (path)
+ value = nm_platform_sysctl_get (path);
+
+ if (!value) {
+ errno = EINVAL;
+ return fallback;
+ }
+
+ ret = nm_utils_ascii_str_to_int64 (value, base, min, max, fallback);
+ g_free (value);
+ return ret;
+}
+
+/******************************************************************/
+
+/**
+ * nm_platform_query_devices:
+ *
+ * Emit #NMPlatform:link-changed ADDED signals for all currently-known links.
+ * Should only be called at startup.
+ */
+void
+nm_platform_query_devices (void)
+{
+ GArray *links_array;
+ NMPlatformLink *links;
+ int i;
+
+ links_array = nm_platform_link_get_all ();
+ links = (NMPlatformLink *) links_array->data;
+ for (i = 0; i < links_array->len; i++) {
+ g_signal_emit (platform, signals[SIGNAL_LINK_CHANGED], 0,
+ links[i].ifindex, &links[i], NM_PLATFORM_SIGNAL_ADDED,
+ NM_PLATFORM_REASON_INTERNAL);
+ }
+ g_array_unref (links_array);
+}
+
+/**
+ * nm_platform_link_get_all:
+ *
+ * Retrieve a snapshot of configuration for all links at once. The result is
+ * owned by the caller and should be freed with g_array_unref().
+ */
+GArray *
+nm_platform_link_get_all (void)
+{
+ GArray *links, *result;
+ guint i, j, nresult;
+ GHashTable *unseen;
+ NMPlatformLink *item;
+
+ reset_error ();
+
+ g_return_val_if_fail (klass->link_get_all, NULL);
+
+ links = klass->link_get_all (platform);
+
+ if (!links || links->len == 0)
+ return links;
+
+ unseen = g_hash_table_new (g_direct_hash, g_direct_equal);
+ for (i = 0; i < links->len; i++) {
+ item = &g_array_index (links, NMPlatformLink, i);
+
+ if (item->ifindex <= 0 || g_hash_table_contains (unseen, GINT_TO_POINTER (item->ifindex))) {
+ g_warn_if_reached ();
+ item->ifindex = 0;
+ continue;
+ }
+
+ g_hash_table_insert (unseen, GINT_TO_POINTER (item->ifindex), NULL);
+ }
+
+#ifndef G_DISABLE_ASSERT
+ /* Ensure that link_get_all returns a consistent and valid result. */
+ for (i = 0; i < links->len; i++) {
+ item = &g_array_index (links, NMPlatformLink, i);
+
+ if (!item->ifindex)
+ continue;
+ if (item->master != 0) {
+ g_warn_if_fail (item->master > 0);
+ g_warn_if_fail (item->master != item->ifindex);
+ g_warn_if_fail (g_hash_table_contains (unseen, GINT_TO_POINTER (item->master)));
+ }
+ if (item->parent != 0) {
+ g_warn_if_fail (item->parent > 0);
+ g_warn_if_fail (item->parent != item->ifindex);
+ g_warn_if_fail (g_hash_table_contains (unseen, GINT_TO_POINTER (item->parent)));
+ }
+ }
+#endif
+
+ /* Re-order the links list such that children/slaves come after all ancestors */
+ nresult = g_hash_table_size (unseen);
+ result = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformLink), nresult);
+ g_array_set_size (result, nresult);
+
+ j = 0;
+ do {
+ gboolean found_something = FALSE;
+ guint first_idx = G_MAXUINT;
+
+ for (i = 0; i < links->len; i++) {
+ item = &g_array_index (links, NMPlatformLink, i);
+
+ if (!item->ifindex)
+ continue;
+
+ if (first_idx == G_MAXUINT)
+ first_idx = i;
+
+ g_assert (g_hash_table_contains (unseen, GINT_TO_POINTER (item->ifindex)));
+
+ if (item->master > 0 && g_hash_table_contains (unseen, GINT_TO_POINTER (item->master)))
+ continue;
+ if (item->parent > 0 && g_hash_table_contains (unseen, GINT_TO_POINTER (item->parent)))
+ continue;
+
+ g_hash_table_remove (unseen, GINT_TO_POINTER (item->ifindex));
+ g_array_index (result, NMPlatformLink, j++) = *item;
+ item->ifindex = 0;
+ found_something = TRUE;
+ }
+
+ if (!found_something) {
+ /* there is a circle, pop the first (remaining) element from the list */
+ g_warn_if_reached ();
+ item = &g_array_index (links, NMPlatformLink, first_idx);
+
+ g_hash_table_remove (unseen, GINT_TO_POINTER (item->ifindex));
+ g_array_index (result, NMPlatformLink, j++) = *item;
+ item->ifindex = 0;
+ }
+ } while (j < nresult);
+
+ g_hash_table_destroy (unseen);
+ g_array_free (links, TRUE);
+
+ return result;
+}
+
+/**
+ * nm_platform_link_get:
+ * @ifindex: ifindex of the link
+ * @link: (out): output NMPlatformLink structure.
+ *
+ * If a link with given @ifindex exists, fill the given NMPlatformLink
+ * structure.
+ *
+ * Returns: %TRUE, if such a link exists, %FALSE otherwise.
+ * If the link does not exist, the content of @link is undefined.
+ **/
+gboolean
+nm_platform_link_get (int ifindex, NMPlatformLink *link)
+{
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (link, FALSE);
+
+ g_return_val_if_fail (klass->link_get, FALSE);
+ return !!klass->link_get (platform, ifindex, link);
+}
+
+/**
+ * nm_platform_link_add:
+ * @name: Interface name
+ * @type: Interface type
+ * @address: (allow-none): set the mac address of the link
+ * @address_len: the length of the @address
+ *
+ * Add a software interface. Sets platform->error to NM_PLATFORM_ERROR_EXISTS
+ * if interface is already already exists. Any link-changed ADDED signal will be
+ * emitted directly, before this function finishes.
+ */
+static gboolean
+nm_platform_link_add (const char *name, NMLinkType type, const void *address, size_t address_len)
+{
+ reset_error ();
+
+ g_return_val_if_fail (name, FALSE);
+ g_return_val_if_fail (klass->link_add, FALSE);
+ g_return_val_if_fail ( (address != NULL) ^ (address_len == 0) , FALSE);
+
+ if (nm_platform_link_exists (name)) {
+ debug ("link: already exists");
+ platform->error = NM_PLATFORM_ERROR_EXISTS;
+ return FALSE;
+ }
+
+ return klass->link_add (platform, name, type, address, address_len);
+}
+
+/**
+ * nm_platform_dummy_add:
+ * @name: New interface name
+ *
+ * Create a software ethernet-like interface
+ */
+gboolean
+nm_platform_dummy_add (const char *name)
+{
+ g_return_val_if_fail (name, FALSE);
+
+ debug ("link: adding dummy '%s'", name);
+ return nm_platform_link_add (name, NM_LINK_TYPE_DUMMY, NULL, 0);
+}
+
+/**
+ * nm_platform_link_exists:
+ * @name: Interface name
+ *
+ * Returns: %TRUE if an interface of this name exists, %FALSE otherwise.
+ */
+gboolean
+nm_platform_link_exists (const char *name)
+{
+ int ifindex = nm_platform_link_get_ifindex (name);
+
+ reset_error();
+ return ifindex > 0;
+}
+
+/**
+ * nm_platform_link_delete:
+ * @ifindex: Interface index
+ *
+ * Delete a software interface. Sets platform->error to
+ * NM_PLATFORM_ERROR_NOT_FOUND if ifindex not available.
+ */
+gboolean
+nm_platform_link_delete (int ifindex)
+{
+ const char *name;
+
+ reset_error ();
+
+ g_return_val_if_fail (klass->link_delete, FALSE);
+
+ name = nm_platform_link_get_name (ifindex);
+
+ if (!name)
+ return FALSE;
+
+ debug ("link: deleting '%s' (%d)", name, ifindex);
+ return klass->link_delete (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_get_index:
+ * @name: Interface name
+ *
+ * Returns: The interface index corresponding to the given interface name
+ * or 0. Inteface name is owned by #NMPlatform, don't free it.
+ */
+int
+nm_platform_link_get_ifindex (const char *name)
+{
+ int ifindex;
+
+ reset_error ();
+
+ g_return_val_if_fail (name, 0);
+ g_return_val_if_fail (klass->link_get_ifindex, 0);
+
+ ifindex = klass->link_get_ifindex (platform, name);
+
+ if (!ifindex) {
+ debug ("link not found: %s", name);
+ platform->error = NM_PLATFORM_ERROR_NOT_FOUND;
+ }
+
+ return ifindex;
+}
+
+/**
+ * nm_platform_link_get_name:
+ * @name: Interface name
+ *
+ * Returns: The interface name corresponding to the given interface index
+ * or %NULL.
+ */
+const char *
+nm_platform_link_get_name (int ifindex)
+{
+ const char *name;
+
+ reset_error ();
+
+ g_return_val_if_fail (klass->link_get_name, NULL);
+
+ name = klass->link_get_name (platform, ifindex);
+
+ if (!name) {
+ debug ("link not found: %d", ifindex);
+ platform->error = NM_PLATFORM_ERROR_NOT_FOUND;
+ return FALSE;
+ }
+
+ return name;
+}
+
+/**
+ * nm_platform_link_get_type:
+ * @ifindex: Interface index.
+ *
+ * Returns: Link type constant as defined in nm-platform.h. On error,
+ * NM_LINK_TYPE_NONE is returned.
+ */
+NMLinkType
+nm_platform_link_get_type (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (klass->link_get_type, NM_LINK_TYPE_NONE);
+
+ return klass->link_get_type (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_get_type_name:
+ * @ifindex: Interface index.
+ *
+ * Returns: A string describing the type of link. In some cases this
+ * may be more specific than nm_platform_link_get_type(), but in
+ * other cases it may not. On error, %NULL is returned.
+ */
+const char *
+nm_platform_link_get_type_name (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (klass->link_get_type_name, NULL);
+
+ return klass->link_get_type_name (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_is_software:
+ * @ifindex: Interface index.
+ *
+ * Returns: %TRUE if ifindex belongs to a software interface, not backed by
+ * a physical device.
+ */
+gboolean
+nm_platform_link_is_software (int ifindex)
+{
+ return (nm_platform_link_get_type (ifindex) & 0x10000);
+}
+
+/**
+ * nm_platform_link_supports_slaves:
+ * @ifindex: Interface index.
+ *
+ * Returns: %TRUE if ifindex belongs to an interface capable of enslaving
+ * other interfaces.
+ */
+gboolean
+nm_platform_link_supports_slaves (int ifindex)
+{
+ return (nm_platform_link_get_type (ifindex) & 0x20000);
+}
+
+/**
+ * nm_platform_link_refresh:
+ * @ifindex: Interface index
+ *
+ * Reload the cache for ifindex synchronously.
+ */
+gboolean
+nm_platform_link_refresh (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ if (klass->link_refresh)
+ return klass->link_refresh (platform, ifindex);
+
+ return TRUE;
+}
+
+/**
+ * nm_platform_link_is_up:
+ * @ifindex: Interface index
+ *
+ * Check if the interface is up.
+ */
+gboolean
+nm_platform_link_is_up (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_is_up, FALSE);
+
+ return klass->link_is_up (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_is_connected:
+ * @ifindex: Interface index
+ *
+ * Check if the interface is connected.
+ */
+gboolean
+nm_platform_link_is_connected (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_is_connected, FALSE);
+
+ return klass->link_is_connected (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_uses_arp:
+ * @ifindex: Interface index
+ *
+ * Check if the interface is configured to use ARP.
+ */
+gboolean
+nm_platform_link_uses_arp (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_uses_arp, FALSE);
+
+ return klass->link_uses_arp (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_set_address:
+ * @ifindex: Interface index
+ * @address: The new MAC address
+ *
+ * Set interface MAC address.
+ */
+gboolean
+nm_platform_link_set_address (int ifindex, gconstpointer address, size_t length)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (address, FALSE);
+ g_return_val_if_fail (length > 0, FALSE);
+ g_return_val_if_fail (klass->link_set_address, FALSE);
+
+ debug ("link: setting '%s' (%d) hardware address", nm_platform_link_get_name (ifindex), ifindex);
+ return klass->link_set_address (platform, ifindex, address, length);
+}
+
+/**
+ * nm_platform_link_get_address:
+ * @ifindex: Interface index
+ * @length: Pointer to a variable to store address length
+ *
+ * Saves interface hardware address to @address.
+ */
+gconstpointer
+nm_platform_link_get_address (int ifindex, size_t *length)
+{
+ reset_error ();
+
+ if (length)
+ *length = 0;
+
+ g_return_val_if_fail (ifindex > 0, NULL);
+ g_return_val_if_fail (klass->link_get_address, NULL);
+
+ return klass->link_get_address (platform, ifindex, length);
+}
+
+gboolean
+nm_platform_link_supports_carrier_detect (int ifindex)
+{
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_supports_carrier_detect, FALSE);
+
+ return klass->link_supports_carrier_detect (platform, ifindex);
+}
+
+gboolean
+nm_platform_link_supports_vlans (int ifindex)
+{
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_supports_vlans, FALSE);
+
+ return klass->link_supports_vlans (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_set_up:
+ * @ifindex: Interface index
+ *
+ * Bring the interface up.
+ */
+gboolean
+nm_platform_link_set_up (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (klass->link_set_up, FALSE);
+
+ debug ("link: setting up '%s' (%d)", nm_platform_link_get_name (ifindex), ifindex);
+ return klass->link_set_up (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_set_down:
+ * @ifindex: Interface index
+ *
+ * Take the interface down.
+ */
+gboolean
+nm_platform_link_set_down (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (klass->link_set_down, FALSE);
+
+ debug ("link: setting down '%s' (%d)", nm_platform_link_get_name (ifindex), ifindex);
+ return klass->link_set_down (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_set_arp:
+ * @ifindex: Interface index
+ *
+ * Enable ARP on the interface.
+ */
+gboolean
+nm_platform_link_set_arp (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_set_arp, FALSE);
+
+ debug ("link: setting arp '%s' (%d)", nm_platform_link_get_name (ifindex), ifindex);
+ return klass->link_set_arp (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_set_noarp:
+ * @ifindex: Interface index
+ *
+ * Disable ARP on the interface.
+ */
+gboolean
+nm_platform_link_set_noarp (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_set_noarp, FALSE);
+
+ debug ("link: setting noarp '%s' (%d)", nm_platform_link_get_name (ifindex), ifindex);
+ return klass->link_set_noarp (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_set_mtu:
+ * @ifindex: Interface index
+ * @mtu: The new MTU value
+ *
+ * Set interface MTU.
+ */
+gboolean
+nm_platform_link_set_mtu (int ifindex, guint32 mtu)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (mtu > 0, FALSE);
+ g_return_val_if_fail (klass->link_set_mtu, FALSE);
+
+ debug ("link: setting '%s' (%d) mtu %d", nm_platform_link_get_name (ifindex), ifindex, mtu);
+ return klass->link_set_mtu (platform, ifindex, mtu);
+}
+
+/**
+ * nm_platform_link_get_mtu:
+ * @ifindex: Interface index
+ *
+ * Returns: MTU value for the interface or 0 on error.
+ */
+guint32
+nm_platform_link_get_mtu (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, 0);
+ g_return_val_if_fail (klass->link_get_mtu, 0);
+
+ return klass->link_get_mtu (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_get_mtu:
+ * @ifindex: Interface index
+ *
+ * Returns: physical port ID for the interface, or %NULL on error
+ * or if the interface has no physical port ID.
+ */
+char *
+nm_platform_link_get_physical_port_id (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, NULL);
+ g_return_val_if_fail (klass->link_get_physical_port_id, NULL);
+
+ return klass->link_get_physical_port_id (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_get_wake_onlan:
+ * @ifindex: Interface index
+ *
+ * Returns: the "Wake-on-LAN" status for @ifindex.
+ */
+gboolean
+nm_platform_link_get_wake_on_lan (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->link_get_wake_on_lan, FALSE);
+
+ return klass->link_get_wake_on_lan (platform, ifindex);
+}
+
+/**
+ * nm_platform_link_enslave:
+ * @master: Interface index of the master
+ * @slave: Interface index of the slave
+ *
+ * Enslave @slave to @master.
+ */
+gboolean
+nm_platform_link_enslave (int master, int slave)
+{
+ reset_error ();
+
+ g_assert (platform);
+ g_return_val_if_fail (master > 0, FALSE);
+ g_return_val_if_fail (slave> 0, FALSE);
+ g_return_val_if_fail (klass->link_enslave, FALSE);
+
+ debug ("link: enslaving '%s' (%d) to master '%s' (%d)",
+ nm_platform_link_get_name (slave), slave,
+ nm_platform_link_get_name (master), master);
+ return klass->link_enslave (platform, master, slave);
+}
+
+/**
+ * nm_platform_link_release:
+ * @master: Interface index of the master
+ * @slave: Interface index of the slave
+ *
+ * Release @slave from @master.
+ */
+gboolean
+nm_platform_link_release (int master, int slave)
+{
+ reset_error ();
+
+ g_assert (platform);
+ g_return_val_if_fail (master > 0, FALSE);
+ g_return_val_if_fail (slave > 0, FALSE);
+ g_return_val_if_fail (klass->link_release, FALSE);
+
+ if (nm_platform_link_get_master (slave) != master) {
+ platform->error = NM_PLATFORM_ERROR_NOT_SLAVE;
+ return FALSE;
+ }
+
+ debug ("link: releasing '%s' (%d) from master '%s' (%d)",
+ nm_platform_link_get_name (slave), slave,
+ nm_platform_link_get_name (master), master);
+ return klass->link_release (platform, master, slave);
+}
+
+/**
+ * nm_platform_link_get_master:
+ * @slave: Interface index of the slave.
+ *
+ * Returns: Interfase index of the slave's master.
+ */
+int
+nm_platform_link_get_master (int slave)
+{
+ reset_error ();
+
+ g_assert (platform);
+ g_return_val_if_fail (slave >= 0, FALSE);
+ g_return_val_if_fail (klass->link_get_master, FALSE);
+
+ if (!nm_platform_link_get_name (slave)) {
+ platform->error = NM_PLATFORM_ERROR_NOT_FOUND;
+ return 0;
+ }
+ return klass->link_get_master (platform, slave);
+}
+
+/**
+ * nm_platform_bridge_add:
+ * @name: New interface name
+ * @address: (allow-none): set the mac address of the new bridge
+ * @address_len: the length of the @address
+ *
+ * Create a software bridge.
+ */
+gboolean
+nm_platform_bridge_add (const char *name, const void *address, size_t address_len)
+{
+ debug ("link: adding bridge '%s'", name);
+ return nm_platform_link_add (name, NM_LINK_TYPE_BRIDGE, address, address_len);
+}
+
+/**
+ * nm_platform_bond_add:
+ * @name: New interface name
+ *
+ * Create a software bonding device.
+ */
+gboolean
+nm_platform_bond_add (const char *name)
+{
+ debug ("link: adding bond '%s'", name);
+ return nm_platform_link_add (name, NM_LINK_TYPE_BOND, NULL, 0);
+}
+
+/**
+ * nm_platform_team_add:
+ * @name: New interface name
+ *
+ * Create a software teaming device.
+ */
+gboolean
+nm_platform_team_add (const char *name)
+{
+ debug ("link: adding team '%s'", name);
+ return nm_platform_link_add (name, NM_LINK_TYPE_TEAM, NULL, 0);
+}
+
+/**
+ * nm_platform_vlan_add:
+ * @name: New interface name
+ * @vlanid: VLAN identifier
+ * @vlanflags: VLAN flags from libnm-util
+ *
+ * Create a software VLAN device.
+ */
+gboolean
+nm_platform_vlan_add (const char *name, int parent, int vlanid, guint32 vlanflags)
+{
+ reset_error ();
+
+ g_assert (platform);
+ g_return_val_if_fail (parent >= 0, FALSE);
+ g_return_val_if_fail (vlanid >= 0, FALSE);
+ g_return_val_if_fail (name, FALSE);
+ g_return_val_if_fail (klass->vlan_add, FALSE);
+
+ if (nm_platform_link_exists (name)) {
+ debug ("link already exists: %s", name);
+ platform->error = NM_PLATFORM_ERROR_EXISTS;
+ return FALSE;
+ }
+
+ debug ("link: adding vlan '%s' parent %d vlanid %d vlanflags %x",
+ name, parent, vlanid, vlanflags);
+ return klass->vlan_add (platform, name, parent, vlanid, vlanflags);
+}
+
+gboolean
+nm_platform_master_set_option (int ifindex, const char *option, const char *value)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (option, FALSE);
+ g_return_val_if_fail (value, FALSE);
+ g_return_val_if_fail (klass->master_set_option, FALSE);
+
+ return klass->master_set_option (platform, ifindex, option, value);
+}
+
+char *
+nm_platform_master_get_option (int ifindex, const char *option)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (option, FALSE);
+ g_return_val_if_fail (klass->master_set_option, FALSE);
+
+ return klass->master_get_option (platform, ifindex, option);
+}
+
+gboolean
+nm_platform_slave_set_option (int ifindex, const char *option, const char *value)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (option, FALSE);
+ g_return_val_if_fail (value, FALSE);
+ g_return_val_if_fail (klass->slave_set_option, FALSE);
+
+ return klass->slave_set_option (platform, ifindex, option, value);
+}
+
+char *
+nm_platform_slave_get_option (int ifindex, const char *option)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (option, FALSE);
+ g_return_val_if_fail (klass->slave_set_option, FALSE);
+
+ return klass->slave_get_option (platform, ifindex, option);
+}
+
+gboolean
+nm_platform_vlan_get_info (int ifindex, int *parent, int *vlanid)
+{
+ reset_error ();
+
+ g_assert (platform);
+ g_return_val_if_fail (klass->vlan_get_info, FALSE);
+
+ if (parent)
+ *parent = 0;
+ if (vlanid)
+ *vlanid = 0;
+
+ if (nm_platform_link_get_type (ifindex) != NM_LINK_TYPE_VLAN)
+ return FALSE;
+
+ return klass->vlan_get_info (platform, ifindex, parent, vlanid);
+}
+
+gboolean
+nm_platform_vlan_set_ingress_map (int ifindex, int from, int to)
+{
+ reset_error ();
+
+ g_assert (platform);
+ g_return_val_if_fail (klass->vlan_set_ingress_map, FALSE);
+
+ debug ("link: setting vlan ingress map for %d from %d to %d", ifindex, from, to);
+ return klass->vlan_set_ingress_map (platform, ifindex, from, to);
+}
+
+gboolean
+nm_platform_vlan_set_egress_map (int ifindex, int from, int to)
+{
+ reset_error ();
+
+ g_assert (platform);
+ g_return_val_if_fail (klass->vlan_set_egress_map, FALSE);
+
+ debug ("link: setting vlan egress map for %d from %d to %d", ifindex, from, to);
+ return klass->vlan_set_egress_map (platform, ifindex, from, to);
+}
+
+gboolean
+nm_platform_infiniband_partition_add (int parent, int p_key)
+{
+ const char *parent_name;
+ char *name;
+
+ reset_error ();
+
+ g_return_val_if_fail (parent >= 0, FALSE);
+ g_return_val_if_fail (p_key >= 0, FALSE);
+ g_return_val_if_fail (klass->infiniband_partition_add, FALSE);
+
+ if (nm_platform_link_get_type (parent) != NM_LINK_TYPE_INFINIBAND) {
+ platform->error = NM_PLATFORM_ERROR_WRONG_TYPE;
+ return FALSE;
+ }
+
+ parent_name = nm_platform_link_get_name (parent);
+ name = g_strdup_printf ("%s.%04x", parent_name, p_key);
+ if (nm_platform_link_exists (name)) {
+ debug ("infiniband: already exists");
+ platform->error = NM_PLATFORM_ERROR_EXISTS;
+ g_free (name);
+ return FALSE;
+ }
+ g_free (name);
+
+ return klass->infiniband_partition_add (platform, parent, p_key);
+}
+
+gboolean
+nm_platform_veth_get_properties (int ifindex, NMPlatformVethProperties *props)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (props != NULL, FALSE);
+
+ return klass->veth_get_properties (platform, ifindex, props);
+}
+
+gboolean
+nm_platform_tun_get_properties (int ifindex, NMPlatformTunProperties *props)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (props != NULL, FALSE);
+
+ return klass->tun_get_properties (platform, ifindex, props);
+}
+
+gboolean
+nm_platform_macvlan_get_properties (int ifindex, NMPlatformMacvlanProperties *props)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (props != NULL, FALSE);
+
+ return klass->macvlan_get_properties (platform, ifindex, props);
+}
+
+gboolean
+nm_platform_vxlan_get_properties (int ifindex, NMPlatformVxlanProperties *props)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (props != NULL, FALSE);
+
+ return klass->vxlan_get_properties (platform, ifindex, props);
+}
+
+gboolean
+nm_platform_gre_get_properties (int ifindex, NMPlatformGreProperties *props)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (props != NULL, FALSE);
+
+ return klass->gre_get_properties (platform, ifindex, props);
+}
+
+gboolean
+nm_platform_wifi_get_capabilities (int ifindex, NMDeviceWifiCapabilities *caps)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ return klass->wifi_get_capabilities (platform, ifindex, caps);
+}
+
+gboolean
+nm_platform_wifi_get_bssid (int ifindex, struct ether_addr *bssid)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ return klass->wifi_get_bssid (platform, ifindex, bssid);
+}
+
+GByteArray *
+nm_platform_wifi_get_ssid (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NULL);
+
+ return klass->wifi_get_ssid (platform, ifindex);
+}
+
+guint32
+nm_platform_wifi_get_frequency (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->wifi_get_frequency (platform, ifindex);
+}
+
+int
+nm_platform_wifi_get_quality (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->wifi_get_quality (platform, ifindex);
+}
+
+guint32
+nm_platform_wifi_get_rate (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->wifi_get_rate (platform, ifindex);
+}
+
+NM80211Mode
+nm_platform_wifi_get_mode (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NM_802_11_MODE_UNKNOWN);
+
+ return klass->wifi_get_mode (platform, ifindex);
+}
+
+void
+nm_platform_wifi_set_mode (int ifindex, NM80211Mode mode)
+{
+ reset_error ();
+
+ g_return_if_fail (ifindex > 0);
+
+ klass->wifi_set_mode (platform, ifindex, mode);
+}
+
+guint32
+nm_platform_wifi_find_frequency (int ifindex, const guint32 *freqs)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+ g_return_val_if_fail (freqs != NULL, 0);
+
+ return klass->wifi_find_frequency (platform, ifindex, freqs);
+}
+
+void
+nm_platform_wifi_indicate_addressing_running (int ifindex, gboolean running)
+{
+ reset_error ();
+
+ g_return_if_fail (ifindex > 0);
+
+ klass->wifi_indicate_addressing_running (platform, ifindex, running);
+}
+
+guint32
+nm_platform_mesh_get_channel (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->mesh_get_channel (platform, ifindex);
+}
+
+gboolean
+nm_platform_mesh_set_channel (int ifindex, guint32 channel)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ return klass->mesh_set_channel (platform, ifindex, channel);
+}
+
+gboolean
+nm_platform_mesh_set_ssid (int ifindex, const GByteArray *ssid)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (ssid != NULL, FALSE);
+
+ return klass->mesh_set_ssid (platform, ifindex, ssid);
+}
+
+/******************************************************************/
+
+GArray *
+nm_platform_ip4_address_get_all (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NULL);
+ g_return_val_if_fail (klass->ip4_address_get_all, NULL);
+
+ return klass->ip4_address_get_all (platform, ifindex);
+}
+
+GArray *
+nm_platform_ip6_address_get_all (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NULL);
+ g_return_val_if_fail (klass->ip6_address_get_all, NULL);
+
+ return klass->ip6_address_get_all (platform, ifindex);
+}
+
+gboolean
+nm_platform_ip4_address_add (int ifindex,
+ in_addr_t address,
+ in_addr_t peer_address,
+ int plen,
+ guint32 lifetime,
+ guint32 preferred,
+ const char *label)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (plen > 0, FALSE);
+ g_return_val_if_fail (lifetime > 0, FALSE);
+ g_return_val_if_fail (preferred <= lifetime, FALSE);
+ g_return_val_if_fail (klass->ip4_address_add, FALSE);
+ g_return_val_if_fail (!label || strlen (label) < sizeof (((NMPlatformIP4Address *) NULL)->label), FALSE);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ NMPlatformIP4Address addr = { 0 };
+
+ addr.ifindex = ifindex;
+ addr.address = address;
+ addr.peer_address = peer_address;
+ addr.plen = plen;
+ addr.timestamp = 0; /* set it at zero, which to_string will treat as *now* */
+ addr.lifetime = lifetime;
+ addr.preferred = preferred;
+ if (label)
+ g_strlcpy (addr.label, label, sizeof (addr.label));
+
+ debug ("address: adding or updating IPv4 address: %s", nm_platform_ip4_address_to_string (&addr));
+ }
+ return klass->ip4_address_add (platform, ifindex, address, peer_address, plen, lifetime, preferred, label);
+}
+
+gboolean
+nm_platform_ip6_address_add (int ifindex,
+ struct in6_addr address,
+ struct in6_addr peer_address,
+ int plen,
+ guint32 lifetime,
+ guint32 preferred,
+ guint flags)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (plen > 0, FALSE);
+ g_return_val_if_fail (lifetime > 0, FALSE);
+ g_return_val_if_fail (preferred <= lifetime, FALSE);
+ g_return_val_if_fail (klass->ip6_address_add, FALSE);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ NMPlatformIP6Address addr = { 0 };
+
+ addr.ifindex = ifindex;
+ addr.address = address;
+ addr.peer_address = peer_address;
+ addr.plen = plen;
+ addr.timestamp = 0; /* set it to zero, which to_string will treat as *now* */
+ addr.lifetime = lifetime;
+ addr.preferred = preferred;
+ addr.flags = flags;
+
+ debug ("address: adding or updating IPv6 address: %s", nm_platform_ip6_address_to_string (&addr));
+ }
+ return klass->ip6_address_add (platform, ifindex, address, peer_address, plen, lifetime, preferred, flags);
+}
+
+gboolean
+nm_platform_ip4_address_delete (int ifindex, in_addr_t address, int plen)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (plen > 0, FALSE);
+ g_return_val_if_fail (klass->ip4_address_delete, FALSE);
+
+ debug ("address: deleting IPv4 address %s/%d", nm_utils_inet4_ntop (address, NULL), plen);
+ return klass->ip4_address_delete (platform, ifindex, address, plen);
+}
+
+gboolean
+nm_platform_ip6_address_delete (int ifindex, struct in6_addr address, int plen)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (plen > 0, FALSE);
+ g_return_val_if_fail (klass->ip6_address_delete, FALSE);
+
+ debug ("address: deleting IPv6 address %s/%d", nm_utils_inet6_ntop (&address, NULL), plen);
+ return klass->ip6_address_delete (platform, ifindex, address, plen);
+}
+
+gboolean
+nm_platform_ip4_address_exists (int ifindex, in_addr_t address, int plen)
+{
+ reset_error ();
+
+ g_return_val_if_fail (plen > 0, FALSE);
+ g_return_val_if_fail (klass->ip4_address_exists, FALSE);
+
+ return klass->ip4_address_exists (platform, ifindex, address, plen);
+}
+
+gboolean
+nm_platform_ip6_address_exists (int ifindex, struct in6_addr address, int plen)
+{
+ reset_error ();
+
+ g_return_val_if_fail (plen > 0, FALSE);
+ g_return_val_if_fail (klass->ip6_address_exists, FALSE);
+
+ return klass->ip6_address_exists (platform, ifindex, address, plen);
+}
+
+static gboolean
+array_contains_ip4_address (const GArray *addresses, const NMPlatformIP4Address *address)
+{
+ guint len = addresses ? addresses->len : 0;
+ guint i;
+
+ for (i = 0; i < len; i++) {
+ NMPlatformIP4Address *candidate = &g_array_index (addresses, NMPlatformIP4Address, i);
+
+ if (candidate->address == address->address && candidate->plen == address->plen)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+array_contains_ip6_address (const GArray *addresses, const NMPlatformIP6Address *address)
+{
+ guint len = addresses ? addresses->len : 0;
+ guint i;
+
+ for (i = 0; i < len; i++) {
+ NMPlatformIP6Address *candidate = &g_array_index (addresses, NMPlatformIP6Address, i);
+
+ if (IN6_ARE_ADDR_EQUAL (&candidate->address, &address->address) && candidate->plen == address->plen)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Takes a pair @timestamp and @duration, and returns the remaining duration based
+ * on the new timestamp @now.
+ */
+static guint32
+_rebase_relative_time_on_now (guint32 timestamp, guint32 duration, guint32 now, guint32 padding)
+{
+ gint64 t;
+
+ if (duration == NM_PLATFORM_LIFETIME_PERMANENT)
+ return NM_PLATFORM_LIFETIME_PERMANENT;
+
+ if (timestamp == 0) {
+ /* if the @timestamp is zero, assume it was just left unset and that the relative
+ * @duration starts counting from @now. This is convenient to construct an address
+ * and print it in nm_platform_ip4_address_to_string().
+ *
+ * In general it does not make sense to set the @duration without anchoring at
+ * @timestamp because you don't know the absolute expiration time when looking
+ * at the address at a later moment. */
+ timestamp = now;
+ }
+
+ /* For timestamp > now, just accept it and calculate the expected(?) result. */
+ t = (gint64) timestamp + (gint64) duration - (gint64) now;
+
+ /* Optional padding to avoid potential races. */
+ t += (gint64) padding;
+
+ if (t <= 0)
+ return 0;
+ if (t >= NM_PLATFORM_LIFETIME_PERMANENT)
+ return NM_PLATFORM_LIFETIME_PERMANENT - 1;
+ return t;
+}
+
+static gboolean
+_address_get_lifetime (const NMPlatformIPAddress *address, guint32 now, guint32 padding, guint32 *out_lifetime, guint32 *out_preferred)
+{
+ gint32 lifetime, preferred;
+
+ if (address->lifetime == 0) {
+ *out_lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
+ *out_preferred = NM_PLATFORM_LIFETIME_PERMANENT;
+ } else {
+ lifetime = _rebase_relative_time_on_now (address->timestamp, address->lifetime, now, padding);
+ if (!lifetime)
+ return FALSE;
+ preferred = _rebase_relative_time_on_now (address->timestamp, address->preferred, now, padding);
+
+ *out_lifetime = lifetime;
+ *out_preferred = MIN (preferred, lifetime);
+
+ /* Assert that non-permanent addresses have a (positive) @timestamp. _rebase_relative_time_on_now()
+ * treats addresses with timestamp 0 as *now*. Addresses passed to _address_get_lifetime() always
+ * should have a valid @timestamp, otherwise on every re-sync, their lifetime will be extended anew.
+ */
+ g_return_val_if_fail ( address->timestamp != 0
+ || ( address->lifetime == NM_PLATFORM_LIFETIME_PERMANENT
+ && address->preferred == NM_PLATFORM_LIFETIME_PERMANENT), TRUE);
+ g_return_val_if_fail (preferred <= lifetime, TRUE);
+ }
+ return TRUE;
+}
+
+/**
+ * nm_platform_ip4_address_sync:
+ * @ifindex: Interface index
+ * @known_addresses: List of addresses
+ *
+ * A convenience function to synchronize addresses for a specific interface
+ * with the least possible disturbance. It simply removes addresses that are
+ * not listed and adds addresses that are.
+ *
+ * Returns: %TRUE on success.
+ */
+gboolean
+nm_platform_ip4_address_sync (int ifindex, const GArray *known_addresses)
+{
+ GArray *addresses;
+ NMPlatformIP4Address *address;
+ guint32 now = nm_utils_get_monotonic_timestamp_s ();
+ int i;
+
+ /* Delete unknown addresses */
+ addresses = nm_platform_ip4_address_get_all (ifindex);
+ for (i = 0; i < addresses->len; i++) {
+ address = &g_array_index (addresses, NMPlatformIP4Address, i);
+
+ if (!array_contains_ip4_address (known_addresses, address))
+ nm_platform_ip4_address_delete (ifindex, address->address, address->plen);
+ }
+ g_array_free (addresses, TRUE);
+
+ if (!known_addresses)
+ return TRUE;
+
+ /* Add missing addresses */
+ for (i = 0; i < known_addresses->len; i++) {
+ const NMPlatformIP4Address *known_address = &g_array_index (known_addresses, NMPlatformIP4Address, i);
+ guint32 lifetime, preferred;
+
+ /* add a padding of 5 seconds to avoid potential races. */
+ if (!_address_get_lifetime ((NMPlatformIPAddress *) known_address, now, 5, &lifetime, &preferred))
+ continue;
+
+ if (!nm_platform_ip4_address_add (ifindex, known_address->address, known_address->peer_address, known_address->plen, lifetime, preferred, known_address->label))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * nm_platform_ip6_address_sync:
+ * @ifindex: Interface index
+ * @known_addresses: List of addresses
+ *
+ * A convenience function to synchronize addresses for a specific interface
+ * with the least possible disturbance. It simply removes addresses that are
+ * not listed and adds addresses that are.
+ *
+ * Returns: %TRUE on success.
+ */
+gboolean
+nm_platform_ip6_address_sync (int ifindex, const GArray *known_addresses)
+{
+ GArray *addresses;
+ NMPlatformIP6Address *address;
+ guint32 now = nm_utils_get_monotonic_timestamp_s ();
+ int i;
+
+ /* Delete unknown addresses */
+ addresses = nm_platform_ip6_address_get_all (ifindex);
+ for (i = 0; i < addresses->len; i++) {
+ address = &g_array_index (addresses, NMPlatformIP6Address, i);
+
+ /* Leave link local address management to the kernel */
+ if (IN6_IS_ADDR_LINKLOCAL (&address->address))
+ continue;
+
+ if (!array_contains_ip6_address (known_addresses, address))
+ nm_platform_ip6_address_delete (ifindex, address->address, address->plen);
+ }
+ g_array_free (addresses, TRUE);
+
+ if (!known_addresses)
+ return TRUE;
+
+ /* Add missing addresses */
+ for (i = 0; i < known_addresses->len; i++) {
+ const NMPlatformIP6Address *known_address = &g_array_index (known_addresses, NMPlatformIP6Address, i);
+ guint32 lifetime, preferred;
+
+ /* add a padding of 5 seconds to avoid potential races. */
+ if (!_address_get_lifetime ((NMPlatformIPAddress *) known_address, now, 5, &lifetime, &preferred))
+ continue;
+
+ if (!nm_platform_ip6_address_add (ifindex, known_address->address,
+ known_address->peer_address, known_address->plen,
+ lifetime, preferred, known_address->flags))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+nm_platform_address_flush (int ifindex)
+{
+ return nm_platform_ip4_address_sync (ifindex, NULL)
+ && nm_platform_ip6_address_sync (ifindex, NULL);
+}
+
+/******************************************************************/
+
+GArray *
+nm_platform_ip4_route_get_all (int ifindex, gboolean include_default)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NULL);
+ g_return_val_if_fail (klass->ip4_route_get_all, NULL);
+
+ return klass->ip4_route_get_all (platform, ifindex, include_default);
+}
+
+GArray *
+nm_platform_ip6_route_get_all (int ifindex, gboolean include_default)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NULL);
+ g_return_val_if_fail (klass->ip6_route_get_all, NULL);
+
+ return klass->ip6_route_get_all (platform, ifindex, include_default);
+}
+
+gboolean
+nm_platform_ip4_route_add (int ifindex, NMPlatformSource source,
+ in_addr_t network, int plen,
+ in_addr_t gateway, int metric, int mss)
+{
+ reset_error ();
+
+ g_return_val_if_fail (platform, FALSE);
+ g_return_val_if_fail (0 <= plen && plen <= 32, FALSE);
+ g_return_val_if_fail (metric >= 0, FALSE);
+ g_return_val_if_fail (mss >= 0, FALSE);
+ g_return_val_if_fail (klass->ip4_route_add, FALSE);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ NMPlatformIP4Route route = { 0 };
+
+ route.ifindex = ifindex;
+ route.source = source;
+ route.network = network;
+ route.plen = plen;
+ route.gateway = gateway;
+ route.metric = metric;
+ route.mss = mss;
+
+ debug ("route: adding or updating IPv4 route: %s", nm_platform_ip4_route_to_string (&route));
+ }
+ return klass->ip4_route_add (platform, ifindex, source, network, plen, gateway, metric, mss);
+}
+
+gboolean
+nm_platform_ip6_route_add (int ifindex, NMPlatformSource source,
+ struct in6_addr network, int plen, struct in6_addr gateway,
+ int metric, int mss)
+{
+ g_return_val_if_fail (platform, FALSE);
+ g_return_val_if_fail (0 <= plen && plen <= 128, FALSE);
+ g_return_val_if_fail (metric >= 0, FALSE);
+ g_return_val_if_fail (mss >= 0, FALSE);
+ g_return_val_if_fail (klass->ip6_route_add, FALSE);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
+ NMPlatformIP6Route route = { 0 };
+
+ route.ifindex = ifindex;
+ route.source = source;
+ route.network = network;
+ route.plen = plen;
+ route.gateway = gateway;
+ route.metric = metric;
+ route.mss = mss;
+
+ debug ("route: adding or updating IPv6 route: %s", nm_platform_ip6_route_to_string (&route));
+ }
+ return klass->ip6_route_add (platform, ifindex, source, network, plen, gateway, metric, mss);
+}
+
+gboolean
+nm_platform_ip4_route_delete (int ifindex, in_addr_t network, int plen, int metric)
+{
+ reset_error ();
+
+ g_return_val_if_fail (platform, FALSE);
+ g_return_val_if_fail (klass->ip4_route_delete, FALSE);
+
+ debug ("route: deleting IPv4 route %s/%d, metric=%d", nm_utils_inet4_ntop (network, NULL), plen, metric);
+ return klass->ip4_route_delete (platform, ifindex, network, plen, metric);
+}
+
+gboolean
+nm_platform_ip6_route_delete (int ifindex, struct in6_addr network, int plen, int metric)
+{
+ reset_error ();
+
+ g_return_val_if_fail (platform, FALSE);
+ g_return_val_if_fail (klass->ip6_route_delete, FALSE);
+
+ debug ("route: deleting IPv6 route %s/%d, metric=%d", nm_utils_inet6_ntop (&network, NULL), plen, metric);
+ return klass->ip6_route_delete (platform, ifindex, network, plen, metric);
+}
+
+gboolean
+nm_platform_ip4_route_exists (int ifindex, in_addr_t network, int plen, int metric)
+{
+ reset_error ();
+
+ g_return_val_if_fail (platform, FALSE);
+ g_return_val_if_fail (klass->ip4_route_exists, FALSE);
+
+ return klass->ip4_route_exists (platform,ifindex, network, plen, metric);
+}
+
+gboolean
+nm_platform_ip6_route_exists (int ifindex, struct in6_addr network, int plen, int metric)
+{
+ reset_error ();
+
+ g_return_val_if_fail (platform, FALSE);
+ g_return_val_if_fail (klass->ip6_route_exists, FALSE);
+
+ return klass->ip6_route_exists (platform, ifindex, network, plen, metric);
+}
+
+static gboolean
+array_contains_ip4_route (const GArray *routes, const NMPlatformIP4Route *route)
+{
+ guint len = routes ? routes->len : 0;
+ guint i;
+
+ for (i = 0; i < len; i++) {
+ NMPlatformIP4Route *c = &g_array_index (routes, NMPlatformIP4Route, i);
+
+ if (route->network == c->network &&
+ route->plen == c->plen &&
+ route->gateway == c->gateway &&
+ route->metric == c->metric)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+array_contains_ip6_route (const GArray *routes, const NMPlatformIP6Route *route)
+{
+ guint len = routes ? routes->len : 0;
+ guint i;
+
+ for (i = 0; i < len; i++) {
+ NMPlatformIP6Route *c = &g_array_index (routes, NMPlatformIP6Route, i);
+
+ if (IN6_ARE_ADDR_EQUAL (&route->network, &c->network) &&
+ route->plen == c->plen &&
+ IN6_ARE_ADDR_EQUAL (&route->gateway, &c->gateway) &&
+ route->metric == c->metric)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * nm_platform_ip4_route_sync:
+ * @ifindex: Interface index
+ * @known_routes: List of routes
+ *
+ * A convenience function to synchronize routes for a specific interface
+ * with the least possible disturbance. It simply removes routes that are
+ * not listed and adds routes that are.
+ *
+ * Returns: %TRUE on success.
+ */
+gboolean
+nm_platform_ip4_route_sync (int ifindex, const GArray *known_routes)
+{
+ GArray *routes;
+ NMPlatformIP4Route *route;
+ const NMPlatformIP4Route *known_route;
+ gboolean success;
+ int i, i_type;
+
+ /* Delete unknown routes */
+ routes = nm_platform_ip4_route_get_all (ifindex, FALSE);
+ for (i = 0; i < routes->len; i++) {
+ route = &g_array_index (routes, NMPlatformIP4Route, i);
+
+ if (!array_contains_ip4_route (known_routes, route))
+ nm_platform_ip4_route_delete (ifindex, route->network, route->plen, route->metric);
+ }
+
+ if (!known_routes) {
+ g_array_free (routes, TRUE);
+ return TRUE;
+ }
+
+ /* Add missing routes */
+ for (i_type = 0, success = TRUE; i_type < 2 && success; i_type++) {
+ for (i = 0; i < known_routes->len && success; i++) {
+ known_route = &g_array_index (known_routes, NMPlatformIP4Route, i);
+
+ if ((known_route->gateway == 0) ^ (i_type != 0)) {
+ /* Make two runs over the list of routes. On the first, only add
+ * device routes, on the second the others (gateway routes). */
+ continue;
+ }
+
+ /* Ignore routes that already exist */
+ if (!array_contains_ip4_route (routes, known_route)) {
+ success = nm_platform_ip4_route_add (ifindex,
+ known_route->source,
+ known_route->network,
+ known_route->plen,
+ known_route->gateway,
+ known_route->metric,
+ known_route->mss);
+ if (!success && known_route->source < NM_PLATFORM_SOURCE_USER) {
+ nm_log_dbg (LOGD_PLATFORM, "ignore error adding IPv4 route to kernel: %s",
+ nm_platform_ip4_route_to_string (known_route));
+ success = TRUE;
+ }
+ }
+ }
+ }
+
+ g_array_free (routes, TRUE);
+ return success;
+}
+
+/**
+ * nm_platform_ip6_route_sync:
+ * @ifindex: Interface index
+ * @known_routes: List of routes
+ *
+ * A convenience function to synchronize routes for a specific interface
+ * with the least possible disturbance. It simply removes routes that are
+ * not listed and adds routes that are.
+ *
+ * Returns: %TRUE on success.
+ */
+gboolean
+nm_platform_ip6_route_sync (int ifindex, const GArray *known_routes)
+{
+ GArray *routes;
+ NMPlatformIP6Route *route;
+ const NMPlatformIP6Route *known_route;
+ gboolean success;
+ int i, i_type;
+
+ /* Delete unknown routes */
+ routes = nm_platform_ip6_route_get_all (ifindex, FALSE);
+ for (i = 0; i < routes->len; i++) {
+ route = &g_array_index (routes, NMPlatformIP6Route, i);
+ route->ifindex = 0;
+
+ if (!array_contains_ip6_route (known_routes, route))
+ nm_platform_ip6_route_delete (ifindex, route->network, route->plen, route->metric);
+ }
+
+ if (!known_routes) {
+ g_array_free (routes, TRUE);
+ return TRUE;
+ }
+
+ /* Add missing routes */
+ for (i_type = 0, success = TRUE; i_type < 2 && success; i_type++) {
+ for (i = 0; i < known_routes->len && success; i++) {
+ known_route = &g_array_index (known_routes, NMPlatformIP6Route, i);
+
+ if (IN6_IS_ADDR_UNSPECIFIED (&known_route->gateway) ^ (i_type != 0)) {
+ /* Make two runs over the list of routes. On the first, only add
+ * device routes, on the second the others (gateway routes). */
+ continue;
+ }
+
+ /* Ignore routes that already exist */
+ if (!array_contains_ip6_route (routes, known_route)) {
+ success = nm_platform_ip6_route_add (ifindex,
+ known_route->source,
+ known_route->network,
+ known_route->plen,
+ known_route->gateway,
+ known_route->metric,
+ known_route->mss);
+ if (!success && known_route->source < NM_PLATFORM_SOURCE_USER) {
+ nm_log_dbg (LOGD_PLATFORM, "ignore error adding IPv6 route to kernel: %s",
+ nm_platform_ip6_route_to_string (known_route));
+ success = TRUE;
+ }
+ }
+ }
+ }
+
+ g_array_free (routes, TRUE);
+ return success;
+}
+
+gboolean
+nm_platform_route_flush (int ifindex)
+{
+ return nm_platform_ip4_route_sync (ifindex, NULL)
+ && nm_platform_ip6_route_sync (ifindex, NULL);
+}
+
+/******************************************************************/
+
+static const char *
+source_to_string (NMPlatformSource source)
+{
+ switch (source) {
+ case NM_PLATFORM_SOURCE_KERNEL:
+ return "kernel";
+ case NM_PLATFORM_SOURCE_SHARED:
+ return "shared";
+ case NM_PLATFORM_SOURCE_IP4LL:
+ return "ipv4ll";
+ case NM_PLATFORM_SOURCE_PPP:
+ return "ppp";
+ case NM_PLATFORM_SOURCE_WWAN:
+ return "wwan";
+ case NM_PLATFORM_SOURCE_VPN:
+ return "vpn";
+ case NM_PLATFORM_SOURCE_DHCP:
+ return "dhcp";
+ case NM_PLATFORM_SOURCE_RDISC:
+ return "rdisc";
+ case NM_PLATFORM_SOURCE_USER:
+ return "user";
+ default:
+ break;
+ }
+ return "unknown";
+}
+
+#define TO_STRING_DEV_BUF_SIZE (5+15+1)
+static void
+_to_string_dev (int ifindex, char *buf, size_t size)
+{
+ g_assert (buf && size >= TO_STRING_DEV_BUF_SIZE);
+
+ if (ifindex){
+ const char *name = ifindex > 0 ? nm_platform_link_get_name (ifindex) : NULL;
+
+ strcpy (buf, " dev ");
+ buf += 5;
+ size -= 5;
+
+ if (name)
+ g_strlcpy (buf, name, size);
+ else
+ g_snprintf (buf, size, "%d", ifindex);
+ } else
+ buf[0] = 0;
+}
+
+static const char *
+_lifetime_to_string (guint32 timestamp, guint32 lifetime, gint32 now, char *buf, size_t buf_size)
+{
+ if (lifetime == NM_PLATFORM_LIFETIME_PERMANENT)
+ return "forever";
+
+ g_snprintf (buf, buf_size, "%usec",
+ _rebase_relative_time_on_now (timestamp, lifetime, now, 0));
+ return buf;
+}
+
+
+static const char *
+_lifetime_summary_to_string (gint32 now, guint32 timestamp, guint32 preferred, guint32 lifetime, char *buf, size_t buf_size)
+{
+ g_snprintf (buf, buf_size, " lifetime %d-%u[%u,%u]",
+ (signed) now, (unsigned) timestamp, (unsigned) preferred, (unsigned) lifetime);
+ return buf;
+}
+
+static char to_string_buffer[256];
+
+const char *
+nm_platform_link_to_string (const NMPlatformLink *link)
+{
+ char master[20];
+ char parent[20];
+ char *driver, *udi, *type;
+ GString *str;
+
+ if (!link)
+ return "(unknown link)";
+
+ str = g_string_new (NULL);
+ if (!link->arp)
+ g_string_append (str, "NOARP,");
+ if (link->up)
+ g_string_append (str, "UP");
+ else
+ g_string_append (str, "DOWN");
+ if (link->connected)
+ g_string_append (str, ",LOWER_UP");
+
+ if (link->master)
+ g_snprintf (master, sizeof (master), " master %d", link->master);
+ else
+ master[0] = 0;
+
+ if (link->parent)
+ g_snprintf (parent, sizeof (master), "@%d", link->parent);
+ else
+ parent[0] = 0;
+
+ driver = link->driver ? g_strdup_printf (" driver '%s'", link->driver) : NULL;
+ udi = link->udi ? g_strdup_printf (" udi '%s'", link->udi) : NULL;
+ type = link->type_name ? NULL : g_strdup_printf ("(%d)", link->type);
+
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), "%d: %s%s <%s> mtu %d%s %s%s%s",
+ link->ifindex, link->name, parent, str->str,
+ link->mtu, master, link->type_name ? link->type_name : type,
+ driver ? driver : "", udi ? udi : "");
+ g_string_free (str, TRUE);
+ g_free (driver);
+ g_free (udi);
+ g_free (type);
+ return to_string_buffer;
+}
+
+/**
+ * nm_platform_ip4_address_to_string:
+ * @route: pointer to NMPlatformIP4Address address structure
+ *
+ * A method for converting an address struct into a string representation.
+ *
+ * Example output: ""
+ *
+ * Returns: a string representation of the address. The returned string
+ * is an internal buffer, so do not keep or free the returned string.
+ * Also, this function is not thread safe.
+ */
+const char *
+nm_platform_ip4_address_to_string (const NMPlatformIP4Address *address)
+{
+ char s_address[INET_ADDRSTRLEN];
+ char s_peer[INET_ADDRSTRLEN];
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+ char str_label[32];
+ char str_lft[30], str_pref[30], str_time[50];
+ char *str_peer = NULL;
+ const char *str_lft_p, *str_pref_p, *str_time_p;
+ gint32 now = nm_utils_get_monotonic_timestamp_s ();
+
+ g_return_val_if_fail (address, "(unknown)");
+
+ inet_ntop (AF_INET, &address->address, s_address, sizeof (s_address));
+
+ if (address->peer_address) {
+ inet_ntop (AF_INET, &address->peer_address, s_peer, sizeof (s_peer));
+ str_peer = g_strconcat (" ptp ", s_peer, NULL);
+ }
+
+ _to_string_dev (address->ifindex, str_dev, sizeof (str_dev));
+
+ if (*address->label)
+ g_snprintf (str_label, sizeof (str_label), " label %s", address->label);
+ else
+ str_label[0] = 0;
+
+ str_lft_p = _lifetime_to_string (address->timestamp,
+ address->lifetime ? address->lifetime : NM_PLATFORM_LIFETIME_PERMANENT,
+ now, str_lft, sizeof (str_lft)),
+ str_pref_p = (address->lifetime == address->preferred)
+ ? str_lft_p
+ : ( _lifetime_to_string (address->timestamp,
+ address->lifetime ? MIN (address->preferred, address->lifetime) : NM_PLATFORM_LIFETIME_PERMANENT,
+ now, str_pref, sizeof (str_pref)) );
+ str_time_p = _lifetime_summary_to_string (now, address->timestamp, address->preferred, address->lifetime, str_time, sizeof (str_time));
+
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), "%s/%d lft %s pref %s%s%s%s%s src %s",
+ s_address, address->plen, str_lft_p, str_pref_p, str_time_p,
+ str_peer ? str_peer : "",
+ str_dev,
+ str_label,
+ source_to_string (address->source));
+ g_free (str_peer);
+ return to_string_buffer;
+}
+
+/**
+ * nm_platform_addr_flags2str: wrapper for rtnl_addr_flags2str(),
+ * which might not yet support some recent address flags.
+ **/
+void
+nm_platform_addr_flags2str (int flags, char *buf, size_t size)
+{
+ rtnl_addr_flags2str(flags, buf, size);
+
+ /* There are two recent flags IFA_F_MANAGETEMPADDR and IFA_F_NOPREFIXROUTE.
+ * If libnl does not yet support them, add them by hand.
+ * These two flags were introduced together with the extended ifa_flags,
+ * so, check for that.
+ */
+ if ((flags & IFA_F_MANAGETEMPADDR) && !nm_platform_check_support_libnl_extended_ifa_flags ()) {
+ strncat (buf, buf[0] ? "," IFA_F_MANAGETEMPADDR_STR : IFA_F_MANAGETEMPADDR_STR,
+ size - strlen (buf) - 1);
+ }
+ if ((flags & IFA_F_NOPREFIXROUTE) && !nm_platform_check_support_libnl_extended_ifa_flags ()) {
+ strncat (buf, buf[0] ? "," IFA_F_NOPREFIXROUTE_STR : IFA_F_NOPREFIXROUTE_STR,
+ size - strlen (buf) - 1);
+ }
+}
+
+/**
+ * nm_platform_ip6_address_to_string:
+ * @route: pointer to NMPlatformIP6Address address structure
+ *
+ * A method for converting an address struct into a string representation.
+ *
+ * Example output: "2001:db8:0:f101::1/64 lft 4294967295 pref 4294967295 time 16922666 on dev em1"
+ *
+ * Returns: a string representation of the address. The returned string
+ * is an internal buffer, so do not keep or free the returned string.
+ * Also, this function is not thread safe.
+ */
+const char *
+nm_platform_ip6_address_to_string (const NMPlatformIP6Address *address)
+{
+ char s_flags[256];
+ char s_address[INET6_ADDRSTRLEN];
+ char s_peer[INET6_ADDRSTRLEN];
+ char str_lft[30], str_pref[30], str_time[50];
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+ char *str_flags;
+ char *str_peer = NULL;
+ const char *str_lft_p, *str_pref_p, *str_time_p;
+ gint32 now = nm_utils_get_monotonic_timestamp_s ();
+
+ g_return_val_if_fail (address, "(unknown)");
+
+ inet_ntop (AF_INET6, &address->address, s_address, sizeof (s_address));
+
+ if (!IN6_IS_ADDR_UNSPECIFIED (&address->peer_address)) {
+ inet_ntop (AF_INET6, &address->peer_address, s_peer, sizeof (s_peer));
+ str_peer = g_strconcat (" ptp ", s_peer, NULL);
+ }
+
+ _to_string_dev (address->ifindex, str_dev, sizeof (str_dev));
+
+ nm_platform_addr_flags2str (address->flags, s_flags, sizeof (s_flags));
+
+ str_flags = s_flags[0] ? g_strconcat (" flags ", s_flags, NULL) : NULL;
+
+ str_lft_p = _lifetime_to_string (address->timestamp,
+ address->lifetime ? address->lifetime : NM_PLATFORM_LIFETIME_PERMANENT,
+ now, str_lft, sizeof (str_lft)),
+ str_pref_p = (address->lifetime == address->preferred)
+ ? str_lft_p
+ : ( _lifetime_to_string (address->timestamp,
+ address->lifetime ? MIN (address->preferred, address->lifetime) : NM_PLATFORM_LIFETIME_PERMANENT,
+ now, str_pref, sizeof (str_pref)) );
+ str_time_p = _lifetime_summary_to_string (now, address->timestamp, address->preferred, address->lifetime, str_time, sizeof (str_time));
+
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), "%s/%d lft %s pref %s%s%s%s%s src %s",
+ s_address, address->plen, str_lft_p, str_pref_p, str_time_p,
+ str_peer ? str_peer : "",
+ str_dev,
+ str_flags ? str_flags : "",
+ source_to_string (address->source));
+ g_free (str_flags);
+ g_free (str_peer);
+ return to_string_buffer;
+}
+
+/**
+ * nm_platform_ip4_route_to_string:
+ * @route: pointer to NMPlatformIP4Route route structure
+ *
+ * A method for converting a route struct into a string representation.
+ *
+ * Example output: "192.168.1.0/24 via 0.0.0.0 dev em1 metric 0 mss 0"
+ *
+ * Returns: a string representation of the route. The returned string
+ * is an internal buffer, so do not keep or free the returned string.
+ * Also, this function is not thread safe.
+ */
+const char *
+nm_platform_ip4_route_to_string (const NMPlatformIP4Route *route)
+{
+ char s_network[INET_ADDRSTRLEN], s_gateway[INET_ADDRSTRLEN];
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+
+ g_return_val_if_fail (route, "(unknown)");
+
+ inet_ntop (AF_INET, &route->network, s_network, sizeof(s_network));
+ inet_ntop (AF_INET, &route->gateway, s_gateway, sizeof(s_gateway));
+
+ _to_string_dev (route->ifindex, str_dev, sizeof (str_dev));
+
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), "%s/%d via %s%s metric %u mss %u src %s",
+ s_network, route->plen, s_gateway,
+ str_dev,
+ route->metric, route->mss,
+ source_to_string (route->source));
+ return to_string_buffer;
+}
+
+/**
+ * nm_platform_ip6_route_to_string:
+ * @route: pointer to NMPlatformIP6Route route structure
+ *
+ * A method for converting a route struct into a string representation.
+ *
+ * Example output: "ff02::fb/128 via :: dev em1 metric 0"
+ *
+ * Returns: a string representation of the route. The returned string
+ * is an internal buffer, so do not keep or free the returned string.
+ * Also, this function is not thread safe.
+ */
+const char *
+nm_platform_ip6_route_to_string (const NMPlatformIP6Route *route)
+{
+ char s_network[INET6_ADDRSTRLEN], s_gateway[INET6_ADDRSTRLEN];
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+
+ g_return_val_if_fail (route, "(unknown)");
+
+ inet_ntop (AF_INET6, &route->network, s_network, sizeof(s_network));
+ inet_ntop (AF_INET6, &route->gateway, s_gateway, sizeof(s_gateway));
+
+ _to_string_dev (route->ifindex, str_dev, sizeof (str_dev));
+
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), "%s/%d via %s%s metric %u mss %u src %s",
+ s_network, route->plen, s_gateway,
+ str_dev,
+ route->metric, route->mss,
+ source_to_string (route->source));
+ return to_string_buffer;
+}
+
+#define _CMP_POINTER(a, b) \
+ G_STMT_START { \
+ if ((a) == (b)) \
+ return 0; \
+ if (!(a)) \
+ return -1; \
+ if (!(b)) \
+ return 1; \
+ } G_STMT_END
+
+#define _CMP_FIELD(a, b, field) \
+ G_STMT_START { \
+ if (((a)->field) != ((b)->field)) \
+ return (((a)->field) < ((b)->field)) ? -1 : 1; \
+ } G_STMT_END
+
+#define _CMP_FIELD_STR(a, b, field) \
+ G_STMT_START { \
+ int c = strcmp ((a)->field, (b)->field); \
+ if (c != 0) \
+ return c < 0 ? -1 : 1; \
+ } G_STMT_END
+
+#define _CMP_FIELD_STR0(a, b, field) \
+ G_STMT_START { \
+ int c = g_strcmp0 ((a)->field, (b)->field); \
+ if (c != 0) \
+ return c < 0 ? -1 : 1; \
+ } G_STMT_END
+
+#define _CMP_FIELD_MEMCMP(a, b, field) \
+ G_STMT_START { \
+ int c = memcmp (&((a)->field), &((b)->field), \
+ sizeof ((a)->field)); \
+ if (c != 0) \
+ return c < 0 ? -1 : 1; \
+ } G_STMT_END
+
+int
+nm_platform_link_cmp (const NMPlatformLink *a, const NMPlatformLink *b)
+{
+ _CMP_POINTER (a, b);
+ _CMP_FIELD (a, b, type);
+ _CMP_FIELD_STR (a, b, name);
+ _CMP_FIELD (a, b, master);
+ _CMP_FIELD (a, b, parent);
+ _CMP_FIELD (a, b, up);
+ _CMP_FIELD (a, b, connected);
+ _CMP_FIELD (a, b, arp);
+ _CMP_FIELD (a, b, mtu);
+ _CMP_FIELD_STR0 (a, b, type_name);
+ _CMP_FIELD_STR0 (a, b, udi);
+ _CMP_FIELD_STR0 (a, b, driver);
+ return 0;
+}
+
+int
+nm_platform_ip4_address_cmp (const NMPlatformIP4Address *a, const NMPlatformIP4Address *b)
+{
+ _CMP_POINTER (a, b);
+ _CMP_FIELD (a, b, ifindex);
+ _CMP_FIELD (a, b, source);
+ _CMP_FIELD (a, b, address);
+ _CMP_FIELD (a, b, peer_address);
+ _CMP_FIELD (a, b, plen);
+ _CMP_FIELD (a, b, timestamp);
+ _CMP_FIELD (a, b, lifetime);
+ _CMP_FIELD (a, b, preferred);
+ _CMP_FIELD_STR (a, b, label);
+ return 0;
+}
+
+int
+nm_platform_ip6_address_cmp (const NMPlatformIP6Address *a, const NMPlatformIP6Address *b)
+{
+ _CMP_POINTER (a, b);
+ _CMP_FIELD (a, b, ifindex);
+ _CMP_FIELD (a, b, source);
+ _CMP_FIELD_MEMCMP (a, b, address);
+ _CMP_FIELD_MEMCMP (a, b, peer_address);
+ _CMP_FIELD (a, b, plen);
+ _CMP_FIELD (a, b, timestamp);
+ _CMP_FIELD (a, b, lifetime);
+ _CMP_FIELD (a, b, preferred);
+ _CMP_FIELD (a, b, flags);
+ return 0;
+}
+
+int
+nm_platform_ip4_route_cmp (const NMPlatformIP4Route *a, const NMPlatformIP4Route *b)
+{
+ _CMP_POINTER (a, b);
+ _CMP_FIELD (a, b, ifindex);
+ _CMP_FIELD (a, b, source);
+ _CMP_FIELD (a, b, network);
+ _CMP_FIELD (a, b, plen);
+ _CMP_FIELD (a, b, gateway);
+ _CMP_FIELD (a, b, metric);
+ _CMP_FIELD (a, b, mss);
+ return 0;
+}
+
+int
+nm_platform_ip6_route_cmp (const NMPlatformIP6Route *a, const NMPlatformIP6Route *b)
+{
+ _CMP_POINTER (a, b);
+ _CMP_FIELD (a, b, ifindex);
+ _CMP_FIELD (a, b, source);
+ _CMP_FIELD_MEMCMP (a, b, network);
+ _CMP_FIELD (a, b, plen);
+ _CMP_FIELD_MEMCMP (a, b, gateway);
+ _CMP_FIELD (a, b, metric);
+ _CMP_FIELD (a, b, mss);
+ return 0;
+}
+
+#undef _CMP_FIELD
+#undef _CMP_FIELD_MEMCMP
+
+/**
+ * nm_platform_ip_address_cmp_expiry:
+ * @a: a NMPlatformIPAddress to compare
+ * @b: the other NMPlatformIPAddress to compare
+ *
+ * Compares two addresses and returns which one has a longer remaining lifetime.
+ * If both addresses have the same lifetime, look at the remaining preferred time.
+ *
+ * For comparison, only the timestamp, lifetime and preferred fields are considered.
+ * If they compare equal (== 0), their other fields were not considered.
+ *
+ * Returns: -1, 0, or 1 according to the comparison
+ **/
+int
+nm_platform_ip_address_cmp_expiry (const NMPlatformIPAddress *a, const NMPlatformIPAddress *b)
+{
+ gint64 ta = 0, tb = 0;
+
+ _CMP_POINTER (a, b);
+
+ if (a->lifetime == NM_PLATFORM_LIFETIME_PERMANENT || a->lifetime == 0)
+ ta = G_MAXINT64;
+ else if (a->timestamp)
+ ta = ((gint64) a->timestamp) + a->lifetime;
+
+ if (b->lifetime == NM_PLATFORM_LIFETIME_PERMANENT || b->lifetime == 0)
+ tb = G_MAXINT64;
+ else if (b->timestamp)
+ tb = ((gint64) b->timestamp) + b->lifetime;
+
+ if (ta == tb) {
+ /* if the lifetime is equal, compare the preferred time. */
+ ta = tb = 0;
+
+ if (a->preferred == NM_PLATFORM_LIFETIME_PERMANENT || a->lifetime == 0 /* liftime==0 means permanent! */)
+ ta = G_MAXINT64;
+ else if (a->timestamp)
+ ta = ((gint64) a->timestamp) + a->preferred;
+
+ if (b->preferred == NM_PLATFORM_LIFETIME_PERMANENT|| b->lifetime == 0)
+ tb = G_MAXINT64;
+ else if (b->timestamp)
+ tb = ((gint64) b->timestamp) + b->preferred;
+
+ if (ta == tb)
+ return 0;
+ }
+
+ return ta < tb ? -1 : 1;
+}
+
+#undef _CMP_POINTER
+
+static const char *
+_change_type_to_string (NMPlatformSignalChangeType change_type)
+{
+ switch (change_type) {
+ case NM_PLATFORM_SIGNAL_ADDED:
+ return "added";
+ case NM_PLATFORM_SIGNAL_CHANGED:
+ return "changed";
+ case NM_PLATFORM_SIGNAL_REMOVED:
+ return "removed";
+ default:
+ g_return_val_if_reached ("UNKNOWN");
+ }
+}
+
+static void
+log_link (NMPlatform *p, int ifindex, NMPlatformLink *device, NMPlatformSignalChangeType change_type, gpointer user_data)
+{
+
+ debug ("signal: link %7s: %s", _change_type_to_string (change_type), nm_platform_link_to_string (device));
+}
+
+static void
+log_ip4_address (NMPlatform *p, int ifindex, NMPlatformIP4Address *address, NMPlatformSignalChangeType change_type, gpointer user_data)
+{
+ debug ("signal: address 4 %7s: %s", _change_type_to_string (change_type), nm_platform_ip4_address_to_string (address));
+}
+
+static void
+log_ip6_address (NMPlatform *p, int ifindex, NMPlatformIP6Address *address, NMPlatformSignalChangeType change_type, gpointer user_data)
+{
+ debug ("signal: address 6 %7s: %s", _change_type_to_string (change_type), nm_platform_ip6_address_to_string (address));
+}
+
+static void
+log_ip4_route (NMPlatform *p, int ifindex, NMPlatformIP4Route *route, NMPlatformSignalChangeType change_type, gpointer user_data)
+{
+ debug ("signal: route 4 %7s: %s", _change_type_to_string (change_type), nm_platform_ip4_route_to_string (route));
+}
+
+static void
+log_ip6_route (NMPlatform *p, int ifindex, NMPlatformIP6Route *route, NMPlatformSignalChangeType change_type, gpointer user_data)
+{
+ debug ("signal: route 6 %7s: %s", _change_type_to_string (change_type), nm_platform_ip6_route_to_string (route));
+}
+
+/******************************************************************/
+
+static void
+nm_platform_init (NMPlatform *object)
+{
+}
+
+#define SIGNAL(signal_id, method) signals[signal_id] = \
+ g_signal_new_class_handler (NM_PLATFORM_ ## signal_id, \
+ G_OBJECT_CLASS_TYPE (object_class), \
+ G_SIGNAL_RUN_FIRST, \
+ G_CALLBACK (method), \
+ NULL, NULL, NULL, \
+ G_TYPE_NONE, 4, G_TYPE_INT, G_TYPE_POINTER, NM_TYPE_PLATFORM_SIGNAL_CHANGE_TYPE, NM_TYPE_PLATFORM_REASON);
+
+static void
+nm_platform_class_init (NMPlatformClass *platform_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (platform_class);
+
+ /* Signals */
+ SIGNAL (SIGNAL_LINK_CHANGED, log_link)
+ SIGNAL (SIGNAL_IP4_ADDRESS_CHANGED, log_ip4_address)
+ SIGNAL (SIGNAL_IP6_ADDRESS_CHANGED, log_ip6_address)
+ SIGNAL (SIGNAL_IP4_ROUTE_CHANGED, log_ip4_route)
+ SIGNAL (SIGNAL_IP6_ROUTE_CHANGED, log_ip6_route)
+}
diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h
new file mode 100644
index 000000000..96b6cfabb
--- /dev/null
+++ b/src/platform/nm-platform.h
@@ -0,0 +1,634 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-platform.c - Handle runtime kernel networking configuration
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2009 - 2010 Red Hat, Inc.
+ */
+
+#ifndef NM_PLATFORM_H
+#define NM_PLATFORM_H
+
+#include <glib-object.h>
+#include "nm-glib-compat.h"
+#include <netinet/in.h>
+#include <net/ethernet.h>
+#include <linux/if.h>
+#include <linux/if_addr.h>
+
+#include <NetworkManager.h>
+
+#define NM_TYPE_PLATFORM (nm_platform_get_type ())
+#define NM_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_PLATFORM, NMPlatform))
+#define NM_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_PLATFORM, NMPlatformClass))
+#define NM_IS_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_PLATFORM))
+#define NM_IS_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_PLATFORM))
+#define NM_PLATFORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_PLATFORM, NMPlatformClass))
+
+/******************************************************************/
+
+/* workaround for older libnl version, that does not define these flags. */
+#ifndef IFA_F_MANAGETEMPADDR
+#define IFA_F_MANAGETEMPADDR 0x100
+#endif
+#ifndef IFA_F_NOPREFIXROUTE
+#define IFA_F_NOPREFIXROUTE 0x200
+#endif
+
+typedef enum {
+ /* no error specified, sometimes this means the arguments were wrong */
+ NM_PLATFORM_ERROR_NONE,
+ /* object was not found */
+ NM_PLATFORM_ERROR_NOT_FOUND,
+ /* object already exists */
+ NM_PLATFORM_ERROR_EXISTS,
+ /* object is wrong type */
+ NM_PLATFORM_ERROR_WRONG_TYPE,
+ /* object is not a slave */
+ NM_PLATFORM_ERROR_NOT_SLAVE,
+ /* firmware is not found */
+ NM_PLATFORM_ERROR_NO_FIRMWARE
+} NMPlatformError;
+
+typedef enum {
+ NM_PLATFORM_REASON_NONE,
+ /* Event was requested by NetworkManager. */
+ NM_PLATFORM_REASON_INTERNAL,
+ /* Event came from the kernel. */
+ NM_PLATFORM_REASON_EXTERNAL,
+ /* Event is a result of cache checking and cleanups. */
+ NM_PLATFORM_REASON_CACHE_CHECK
+} NMPlatformReason;
+
+typedef enum {
+ /* Please don't interpret type numbers outside nm-platform and use functions
+ * like nm_platform_link_is_software() and nm_platform_supports_slaves().
+ *
+ * type & 0x10000 -> Software device type
+ * type & 0x20000 -> Type supports slaves
+ */
+
+ /* No type, used as error value */
+ NM_LINK_TYPE_NONE,
+
+ /* Unknown type */
+ NM_LINK_TYPE_UNKNOWN,
+
+ /* Hardware types */
+ NM_LINK_TYPE_ETHERNET,
+ NM_LINK_TYPE_INFINIBAND,
+ NM_LINK_TYPE_OLPC_MESH,
+ NM_LINK_TYPE_WIFI,
+ NM_LINK_TYPE_WWAN_ETHERNET, /* WWAN pseudo-ethernet */
+ NM_LINK_TYPE_WIMAX,
+
+ /* Software types */
+ NM_LINK_TYPE_DUMMY = 0x10000,
+ NM_LINK_TYPE_GRE,
+ NM_LINK_TYPE_GRETAP,
+ NM_LINK_TYPE_IFB,
+ NM_LINK_TYPE_LOOPBACK,
+ NM_LINK_TYPE_MACVLAN,
+ NM_LINK_TYPE_MACVTAP,
+ NM_LINK_TYPE_OPENVSWITCH,
+ NM_LINK_TYPE_TAP,
+ NM_LINK_TYPE_TUN,
+ NM_LINK_TYPE_VETH,
+ NM_LINK_TYPE_VLAN,
+ NM_LINK_TYPE_VXLAN,
+
+ /* Software types with slaves */
+ NM_LINK_TYPE_BRIDGE = 0x10000 | 0x20000,
+ NM_LINK_TYPE_BOND,
+ NM_LINK_TYPE_TEAM,
+} NMLinkType;
+
+#define __NMPlatformObject_COMMON \
+ int ifindex; \
+ ;
+
+typedef struct {
+ __NMPlatformObject_COMMON;
+ char name[IFNAMSIZ];
+ NMLinkType type;
+ const char *type_name;
+ const char *udi;
+ const char *driver;
+ int master;
+ int parent;
+ gboolean up;
+ gboolean connected;
+ gboolean arp;
+ guint mtu;
+} NMPlatformLink;
+
+typedef enum {
+ NM_PLATFORM_SIGNAL_ADDED,
+ NM_PLATFORM_SIGNAL_CHANGED,
+ NM_PLATFORM_SIGNAL_REMOVED,
+} NMPlatformSignalChangeType;
+
+#define NM_PLATFORM_LIFETIME_PERMANENT G_MAXUINT32
+
+typedef enum {
+ /* In priority order; higher number == higher priority */
+ NM_PLATFORM_SOURCE_UNKNOWN,
+ NM_PLATFORM_SOURCE_KERNEL,
+ NM_PLATFORM_SOURCE_SHARED,
+ NM_PLATFORM_SOURCE_IP4LL,
+ NM_PLATFORM_SOURCE_PPP,
+ NM_PLATFORM_SOURCE_WWAN,
+ NM_PLATFORM_SOURCE_VPN,
+ NM_PLATFORM_SOURCE_DHCP,
+ NM_PLATFORM_SOURCE_RDISC,
+ NM_PLATFORM_SOURCE_USER,
+} NMPlatformSource;
+
+
+typedef struct {
+ __NMPlatformObject_COMMON;
+} NMPlatformObject;
+
+
+#define __NMPlatformIPAddress_COMMON \
+ __NMPlatformObject_COMMON; \
+ NMPlatformSource source; \
+ \
+ /* Timestamp in seconds in the reference system of nm_utils_get_monotonic_timestamp_*().
+ *
+ * The rules are:
+ * 1 @lifetime==0: @timestamp and @preferred is irrelevant (but mostly set to 0 too). Such addresses
+ * are permanent. This rule is so that unset addresses (calloc) are permanent by default.
+ * 2 @lifetime==@preferred==NM_PLATFORM_LIFETIME_PERMANENT: @timestamp is irrelevant (but mostly
+ * set to 0). Such addresses are permanent.
+ * 3 Non permanent addreses should (almost) always have @timestamp > 0. 0 is not a valid timestamp
+ * and never returned by nm_utils_get_monotonic_timestamp_s(). In this case @valid/@preferred
+ * is anchored at @timestamp.
+ * 4 Non permanent addresses with @timestamp == 0 are implicitely anchored at *now*, thus the time
+ * moves as time goes by. This is usually not useful, except e.g. nm_platform_ip[46]_address_add().
+ *
+ * Non permanent addresses from DHCP/RA might have the @timestamp set to the moment of when the
+ * lease was received. Addresses from kernel might have the @timestamp based on the last modification
+ * time of the addresses. But don't rely on this behaviour, the @timestamp is only defined for anchoring
+ * @lifetime and @preferred.
+ */ \
+ guint32 timestamp; \
+ guint32 lifetime; /* seconds since timestamp */ \
+ guint32 preferred; /* seconds since timestamp */ \
+ int plen; \
+ ;
+
+/**
+ * NMPlatformIPAddress:
+ *
+ * Common parts of NMPlatformIP4Address and NMPlatformIP6Address.
+ **/
+typedef struct {
+ __NMPlatformIPAddress_COMMON;
+ union {
+ guint8 address_ptr[1];
+ guint32 __dummy_for_32bit_alignment;
+ };
+} NMPlatformIPAddress;
+
+/**
+ * NMPlatformIP4Address:
+ * @timestamp: timestamp as returned by nm_utils_get_monotonic_timestamp_s()
+ **/
+typedef struct {
+ __NMPlatformIPAddress_COMMON;
+ in_addr_t address;
+ in_addr_t peer_address; /* PTP peer address */
+ char label[IFNAMSIZ];
+} NMPlatformIP4Address;
+G_STATIC_ASSERT (G_STRUCT_OFFSET (NMPlatformIPAddress, address_ptr) == G_STRUCT_OFFSET (NMPlatformIP4Address, address));
+
+/**
+ * NMPlatformIP6Address:
+ * @timestamp: timestamp as returned by nm_utils_get_monotonic_timestamp_s()
+ **/
+typedef struct {
+ __NMPlatformIPAddress_COMMON;
+ struct in6_addr address;
+ struct in6_addr peer_address;
+ guint flags; /* ifa_flags from <linux/if_addr.h>, field type "unsigned int" is as used in rtnl_addr_get_flags. */
+} NMPlatformIP6Address;
+G_STATIC_ASSERT (G_STRUCT_OFFSET (NMPlatformIPAddress, address_ptr) == G_STRUCT_OFFSET (NMPlatformIP6Address, address));
+
+#undef __NMPlatformIPAddress_COMMON
+
+
+#define NM_PLATFORM_ROUTE_METRIC_DEFAULT 1024
+
+#define __NMPlatformIPRoute_COMMON \
+ __NMPlatformObject_COMMON; \
+ NMPlatformSource source; \
+ int plen; \
+ guint metric; \
+ guint mss; \
+ ;
+
+typedef struct {
+ __NMPlatformIPRoute_COMMON;
+ union {
+ guint8 network_ptr[1];
+ guint32 __dummy_for_32bit_alignment;
+ };
+} NMPlatformIPRoute;
+
+typedef struct {
+ __NMPlatformIPRoute_COMMON;
+ in_addr_t network;
+ in_addr_t gateway;
+} NMPlatformIP4Route;
+G_STATIC_ASSERT (G_STRUCT_OFFSET (NMPlatformIPRoute, network_ptr) == G_STRUCT_OFFSET (NMPlatformIP4Route, network));
+
+typedef struct {
+ __NMPlatformIPRoute_COMMON;
+ struct in6_addr network;
+ struct in6_addr gateway;
+} NMPlatformIP6Route;
+G_STATIC_ASSERT (G_STRUCT_OFFSET (NMPlatformIPRoute, network_ptr) == G_STRUCT_OFFSET (NMPlatformIP6Route, network));
+
+#undef __NMPlatformIPRoute_COMMON
+
+
+#undef __NMPlatformObject_COMMON
+
+
+typedef struct {
+ int peer;
+} NMPlatformVethProperties;
+
+typedef struct {
+ gint64 owner;
+ gint64 group;
+ const char *mode;
+ gboolean no_pi;
+ gboolean vnet_hdr;
+ gboolean multi_queue;
+} NMPlatformTunProperties;
+
+typedef struct {
+ int parent_ifindex;
+ const char *mode;
+ gboolean no_promisc;
+} NMPlatformMacvlanProperties;
+
+typedef struct {
+ int parent_ifindex;
+ guint32 id;
+ in_addr_t group;
+ in_addr_t local;
+ struct in6_addr group6;
+ struct in6_addr local6;
+ guint8 tos;
+ guint8 ttl;
+ gboolean learning;
+ guint32 ageing;
+ guint32 limit;
+ guint16 dst_port;
+ guint16 src_port_min;
+ guint16 src_port_max;
+ gboolean proxy;
+ gboolean rsc;
+ gboolean l2miss;
+ gboolean l3miss;
+} NMPlatformVxlanProperties;
+
+typedef struct {
+ int parent_ifindex;
+ guint16 input_flags;
+ guint16 output_flags;
+ guint32 input_key;
+ guint32 output_key;
+ in_addr_t local;
+ in_addr_t remote;
+ guint8 ttl;
+ guint8 tos;
+ gboolean path_mtu_discovery;
+} NMPlatformGreProperties;
+
+/******************************************************************/
+
+/* NMPlatform abstract class and its implementations provide a layer between
+ * networkmanager's device management classes and the operating system kernel.
+ *
+ * How it works, is best seen in tests/nm-platform-test.c source file.
+ *
+ * NMPlatform provides interface to configure kernel interfaces and receive
+ * notifications about both internal and external configuration changes. It
+ * respects the following rules:
+ *
+ * 1) Every change made through NMPlatform is readily available and the respective
+ * signals are called synchronously.
+ *
+ * 2) State of an object retrieved from NMPlatform (through functions or events)
+ * is at least as recent than the state retrieved before.
+ *
+ * Any failure of the above rules should be fixed in NMPlatform implementations
+ * and tested in nm-platform-test. Synchronization hacks should never be put
+ * to any other code. That's why NMPlatform was created and that's why the
+ * testing code was written for it.
+ *
+ * In future, parts of linux platform implementation may be moved to the libnl
+ * library.
+ *
+ * If you have any problems related to NMPlatform on your system, you should
+ * always first run tests/nm-linux-platform-test as root and with all
+ * network configuration daemons stopped. Look at the code first.
+ */
+
+typedef struct {
+ GObject parent;
+
+ NMPlatformError error;
+} NMPlatform;
+
+typedef struct {
+ GObjectClass parent;
+
+ gboolean (*setup) (NMPlatform *);
+
+ gboolean (*sysctl_set) (NMPlatform *, const char *path, const char *value);
+ char * (*sysctl_get) (NMPlatform *, const char *path);
+
+ gboolean (*link_get) (NMPlatform *platform, int ifindex, NMPlatformLink *link);
+ GArray *(*link_get_all) (NMPlatform *);
+ gboolean (*link_add) (NMPlatform *, const char *name, NMLinkType type, const void *address, size_t address_len);
+ gboolean (*link_delete) (NMPlatform *, int ifindex);
+ int (*link_get_ifindex) (NMPlatform *, const char *name);
+ const char *(*link_get_name) (NMPlatform *, int ifindex);
+ NMLinkType (*link_get_type) (NMPlatform *, int ifindex);
+ const char *(*link_get_type_name) (NMPlatform *, int ifindex);
+
+ gboolean (*link_refresh) (NMPlatform *, int ifindex);
+
+ gboolean (*link_set_up) (NMPlatform *, int ifindex);
+ gboolean (*link_set_down) (NMPlatform *, int ifindex);
+ gboolean (*link_set_arp) (NMPlatform *, int ifindex);
+ gboolean (*link_set_noarp) (NMPlatform *, int ifindex);
+ gboolean (*link_is_up) (NMPlatform *, int ifindex);
+ gboolean (*link_is_connected) (NMPlatform *, int ifindex);
+ gboolean (*link_uses_arp) (NMPlatform *, int ifindex);
+
+ gconstpointer (*link_get_address) (NMPlatform *, int ifindex, size_t *length);
+ gboolean (*link_set_address) (NMPlatform *, int ifindex, gconstpointer address, size_t length);
+ guint32 (*link_get_mtu) (NMPlatform *, int ifindex);
+ gboolean (*link_set_mtu) (NMPlatform *, int ifindex, guint32 mtu);
+
+ char * (*link_get_physical_port_id) (NMPlatform *, int ifindex);
+ gboolean (*link_get_wake_on_lan) (NMPlatform *, int ifindex);
+
+ gboolean (*link_supports_carrier_detect) (NMPlatform *, int ifindex);
+ gboolean (*link_supports_vlans) (NMPlatform *, int ifindex);
+
+ gboolean (*link_enslave) (NMPlatform *, int master, int slave);
+ gboolean (*link_release) (NMPlatform *, int master, int slave);
+ gboolean (*link_get_master) (NMPlatform *, int slave);
+ gboolean (*master_set_option) (NMPlatform *, int ifindex, const char *option, const char *value);
+ char * (*master_get_option) (NMPlatform *, int ifindex, const char *option);
+ gboolean (*slave_set_option) (NMPlatform *, int ifindex, const char *option, const char *value);
+ char * (*slave_get_option) (NMPlatform *, int ifindex, const char *option);
+
+ gboolean (*vlan_add) (NMPlatform *, const char *name, int parent, int vlanid, guint32 vlanflags);
+ gboolean (*vlan_get_info) (NMPlatform *, int ifindex, int *parent, int *vlan_id);
+ gboolean (*vlan_set_ingress_map) (NMPlatform *, int ifindex, int from, int to);
+ gboolean (*vlan_set_egress_map) (NMPlatform *, int ifindex, int from, int to);
+
+ gboolean (*infiniband_partition_add) (NMPlatform *, int parent, int p_key);
+
+ gboolean (*veth_get_properties) (NMPlatform *, int ifindex, NMPlatformVethProperties *properties);
+ gboolean (*tun_get_properties) (NMPlatform *, int ifindex, NMPlatformTunProperties *properties);
+ gboolean (*macvlan_get_properties) (NMPlatform *, int ifindex, NMPlatformMacvlanProperties *props);
+ gboolean (*vxlan_get_properties) (NMPlatform *, int ifindex, NMPlatformVxlanProperties *props);
+ gboolean (*gre_get_properties) (NMPlatform *, int ifindex, NMPlatformGreProperties *props);
+
+ gboolean (*wifi_get_capabilities) (NMPlatform *, int ifindex, NMDeviceWifiCapabilities *caps);
+ gboolean (*wifi_get_bssid) (NMPlatform *, int ifindex, struct ether_addr *bssid);
+ GByteArray *(*wifi_get_ssid) (NMPlatform *, int ifindex);
+ guint32 (*wifi_get_frequency) (NMPlatform *, int ifindex);
+ int (*wifi_get_quality) (NMPlatform *, int ifindex);
+ guint32 (*wifi_get_rate) (NMPlatform *, int ifindex);
+ NM80211Mode (*wifi_get_mode) (NMPlatform *, int ifindex);
+ void (*wifi_set_mode) (NMPlatform *, int ifindex, NM80211Mode mode);
+ guint32 (*wifi_find_frequency) (NMPlatform *, int ifindex, const guint32 *freqs);
+ void (*wifi_indicate_addressing_running) (NMPlatform *, int ifindex, gboolean running);
+
+ guint32 (*mesh_get_channel) (NMPlatform *, int ifindex);
+ gboolean (*mesh_set_channel) (NMPlatform *, int ifindex, guint32 channel);
+ gboolean (*mesh_set_ssid) (NMPlatform *, int ifindex, const GByteArray *ssid);
+
+ GArray * (*ip4_address_get_all) (NMPlatform *, int ifindex);
+ GArray * (*ip6_address_get_all) (NMPlatform *, int ifindex);
+ gboolean (*ip4_address_add) (NMPlatform *, int ifindex,
+ in_addr_t address, in_addr_t peer_address, int plen,
+ guint32 lifetime, guint32 preferred_lft,
+ const char *label);
+ gboolean (*ip6_address_add) (NMPlatform *, int ifindex,
+ struct in6_addr address, struct in6_addr peer_address, int plen,
+ guint32 lifetime, guint32 preferred_lft, guint flags);
+ gboolean (*ip4_address_delete) (NMPlatform *, int ifindex, in_addr_t address, int plen);
+ gboolean (*ip6_address_delete) (NMPlatform *, int ifindex, struct in6_addr address, int plen);
+ gboolean (*ip4_address_exists) (NMPlatform *, int ifindex, in_addr_t address, int plen);
+ gboolean (*ip6_address_exists) (NMPlatform *, int ifindex, struct in6_addr address, int plen);
+
+ GArray * (*ip4_route_get_all) (NMPlatform *, int ifindex, gboolean include_default);
+ GArray * (*ip6_route_get_all) (NMPlatform *, int ifindex, gboolean include_default);
+ gboolean (*ip4_route_add) (NMPlatform *, int ifindex, NMPlatformSource source,
+ in_addr_t network, int plen, in_addr_t gateway,
+ int prio, int mss);
+ gboolean (*ip6_route_add) (NMPlatform *, int ifindex, NMPlatformSource source,
+ struct in6_addr network, int plen, struct in6_addr gateway,
+ int prio, int mss);
+ gboolean (*ip4_route_delete) (NMPlatform *, int ifindex, in_addr_t network, int plen, int metric);
+ gboolean (*ip6_route_delete) (NMPlatform *, int ifindex, struct in6_addr network, int plen, int metric);
+ gboolean (*ip4_route_exists) (NMPlatform *, int ifindex, in_addr_t network, int plen, int metric);
+ gboolean (*ip6_route_exists) (NMPlatform *, int ifindex, struct in6_addr network, int plen, int metric);
+
+ gboolean (*check_support_kernel_extended_ifa_flags) (NMPlatform *);
+} NMPlatformClass;
+
+/* NMPlatform signals
+ *
+ * Each signal handler is called with a type-specific object that provides
+ * key attributes that constitute identity of the object. They may also
+ * provide additional attributes for convenience.
+ *
+ * The object only intended to be used by the signal handler to determine
+ * the current values. It is no longer valid after the signal handler exits
+ * but you are free to copy the provided information and use it for later
+ * reference.
+ */
+#define NM_PLATFORM_SIGNAL_LINK_CHANGED "link-changed"
+#define NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED "ip4-address-changed"
+#define NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED "ip6-address-changed"
+#define NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED "ip4-route-changed"
+#define NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED "ip6-route-changed"
+
+/******************************************************************/
+
+GType nm_platform_get_type (void);
+
+void nm_platform_setup (GType type);
+NMPlatform *nm_platform_get (void);
+void nm_platform_free (void);
+
+/******************************************************************/
+
+void nm_platform_set_error (NMPlatformError error);
+NMPlatformError nm_platform_get_error (void);
+const char *nm_platform_get_error_msg (void);
+
+void nm_platform_query_devices (void);
+
+gboolean nm_platform_sysctl_set (const char *path, const char *value);
+char *nm_platform_sysctl_get (const char *path);
+gint32 nm_platform_sysctl_get_int32 (const char *path, gint32 fallback);
+gint64 nm_platform_sysctl_get_int_checked (const char *path, guint base, gint64 min, gint64 max, gint64 fallback);
+
+gboolean nm_platform_link_get (int ifindex, NMPlatformLink *link);
+GArray *nm_platform_link_get_all (void);
+gboolean nm_platform_dummy_add (const char *name);
+gboolean nm_platform_bridge_add (const char *name, const void *address, size_t address_len);
+gboolean nm_platform_bond_add (const char *name);
+gboolean nm_platform_team_add (const char *name);
+gboolean nm_platform_link_exists (const char *name);
+gboolean nm_platform_link_delete (int ifindex);
+int nm_platform_link_get_ifindex (const char *name);
+const char *nm_platform_link_get_name (int ifindex);
+NMLinkType nm_platform_link_get_type (int ifindex);
+const char *nm_platform_link_get_type_name (int ifindex);
+gboolean nm_platform_link_is_software (int ifindex);
+gboolean nm_platform_link_supports_slaves (int ifindex);
+
+gboolean nm_platform_link_refresh (int ifindex);
+
+gboolean nm_platform_link_set_up (int ifindex);
+gboolean nm_platform_link_set_down (int ifindex);
+gboolean nm_platform_link_set_arp (int ifindex);
+gboolean nm_platform_link_set_noarp (int ifindex);
+gboolean nm_platform_link_is_up (int ifindex);
+gboolean nm_platform_link_is_connected (int ifindex);
+gboolean nm_platform_link_uses_arp (int ifindex);
+
+gconstpointer nm_platform_link_get_address (int ifindex, size_t *length);
+gboolean nm_platform_link_set_address (int ifindex, const void *address, size_t length);
+guint32 nm_platform_link_get_mtu (int ifindex);
+gboolean nm_platform_link_set_mtu (int ifindex, guint32 mtu);
+
+char *nm_platform_link_get_physical_port_id (int ifindex);
+gboolean nm_platform_link_get_wake_on_lan (int ifindex);
+
+gboolean nm_platform_link_supports_carrier_detect (int ifindex);
+gboolean nm_platform_link_supports_vlans (int ifindex);
+
+gboolean nm_platform_link_enslave (int master, int slave);
+gboolean nm_platform_link_release (int master, int slave);
+int nm_platform_link_get_master (int slave);
+gboolean nm_platform_master_set_option (int ifindex, const char *option, const char *value);
+char *nm_platform_master_get_option (int ifindex, const char *option);
+gboolean nm_platform_slave_set_option (int ifindex, const char *option, const char *value);
+char *nm_platform_slave_get_option (int ifindex, const char *option);
+
+gboolean nm_platform_vlan_add (const char *name, int parent, int vlanid, guint32 vlanflags);
+gboolean nm_platform_vlan_get_info (int ifindex, int *parent, int *vlanid);
+gboolean nm_platform_vlan_set_ingress_map (int ifindex, int from, int to);
+gboolean nm_platform_vlan_set_egress_map (int ifindex, int from, int to);
+
+gboolean nm_platform_infiniband_partition_add (int parent, int p_key);
+
+gboolean nm_platform_veth_get_properties (int ifindex, NMPlatformVethProperties *properties);
+gboolean nm_platform_tun_get_properties (int ifindex, NMPlatformTunProperties *properties);
+gboolean nm_platform_macvlan_get_properties (int ifindex, NMPlatformMacvlanProperties *props);
+gboolean nm_platform_vxlan_get_properties (int ifindex, NMPlatformVxlanProperties *props);
+gboolean nm_platform_gre_get_properties (int ifindex, NMPlatformGreProperties *props);
+
+gboolean nm_platform_wifi_get_capabilities (int ifindex, NMDeviceWifiCapabilities *caps);
+gboolean nm_platform_wifi_get_bssid (int ifindex, struct ether_addr *bssid);
+GByteArray *nm_platform_wifi_get_ssid (int ifindex);
+guint32 nm_platform_wifi_get_frequency (int ifindex);
+int nm_platform_wifi_get_quality (int ifindex);
+guint32 nm_platform_wifi_get_rate (int ifindex);
+NM80211Mode nm_platform_wifi_get_mode (int ifindex);
+void nm_platform_wifi_set_mode (int ifindex, NM80211Mode mode);
+guint32 nm_platform_wifi_find_frequency (int ifindex, const guint32 *freqs);
+void nm_platform_wifi_indicate_addressing_running (int ifindex, gboolean running);
+
+guint32 nm_platform_mesh_get_channel (int ifindex);
+gboolean nm_platform_mesh_set_channel (int ifindex, guint32 channel);
+gboolean nm_platform_mesh_set_ssid (int ifindex, const GByteArray *ssid);
+
+GArray *nm_platform_ip4_address_get_all (int ifindex);
+GArray *nm_platform_ip6_address_get_all (int ifindex);
+gboolean nm_platform_ip4_address_add (int ifindex,
+ in_addr_t address, in_addr_t peer_address, int plen,
+ guint32 lifetime, guint32 preferred_lft,
+ const char *label);
+gboolean nm_platform_ip6_address_add (int ifindex,
+ struct in6_addr address, struct in6_addr peer_address, int plen,
+ guint32 lifetime, guint32 preferred_lft, guint flags);
+gboolean nm_platform_ip4_address_delete (int ifindex, in_addr_t address, int plen);
+gboolean nm_platform_ip6_address_delete (int ifindex, struct in6_addr address, int plen);
+gboolean nm_platform_ip4_address_exists (int ifindex, in_addr_t address, int plen);
+gboolean nm_platform_ip6_address_exists (int ifindex, struct in6_addr address, int plen);
+gboolean nm_platform_ip4_address_sync (int ifindex, const GArray *known_addresses);
+gboolean nm_platform_ip6_address_sync (int ifindex, const GArray *known_addresses);
+gboolean nm_platform_address_flush (int ifindex);
+
+GArray *nm_platform_ip4_route_get_all (int ifindex, gboolean include_default);
+GArray *nm_platform_ip6_route_get_all (int ifindex, gboolean include_default);
+gboolean nm_platform_route_set_metric (int ifindex, int metric);
+gboolean nm_platform_ip4_route_add (int ifindex, NMPlatformSource source,
+ in_addr_t network, int plen, in_addr_t gateway,
+ int metric, int mss);
+gboolean nm_platform_ip6_route_add (int ifindex, NMPlatformSource source,
+ struct in6_addr network, int plen, struct in6_addr gateway,
+ int metric, int mss);
+gboolean nm_platform_ip4_route_delete (int ifindex, in_addr_t network, int plen, int metric);
+gboolean nm_platform_ip6_route_delete (int ifindex, struct in6_addr network, int plen, int metric);
+gboolean nm_platform_ip4_route_exists (int ifindex, in_addr_t network, int plen, int metric);
+gboolean nm_platform_ip6_route_exists (int ifindex, struct in6_addr network, int plen, int metric);
+gboolean nm_platform_ip4_route_sync (int ifindex, const GArray *known_routes);
+gboolean nm_platform_ip6_route_sync (int ifindex, const GArray *known_routes);
+gboolean nm_platform_route_flush (int ifindex);
+
+const char *nm_platform_link_to_string (const NMPlatformLink *link);
+const char *nm_platform_ip4_address_to_string (const NMPlatformIP4Address *address);
+const char *nm_platform_ip6_address_to_string (const NMPlatformIP6Address *address);
+const char *nm_platform_ip4_route_to_string (const NMPlatformIP4Route *route);
+const char *nm_platform_ip6_route_to_string (const NMPlatformIP6Route *route);
+
+int nm_platform_link_cmp (const NMPlatformLink *a, const NMPlatformLink *b);
+int nm_platform_ip4_address_cmp (const NMPlatformIP4Address *a, const NMPlatformIP4Address *b);
+int nm_platform_ip6_address_cmp (const NMPlatformIP6Address *a, const NMPlatformIP6Address *b);
+int nm_platform_ip4_route_cmp (const NMPlatformIP4Route *a, const NMPlatformIP4Route *b);
+int nm_platform_ip6_route_cmp (const NMPlatformIP6Route *a, const NMPlatformIP6Route *b);
+
+gboolean nm_platform_check_support_libnl_extended_ifa_flags (void);
+gboolean nm_platform_check_support_kernel_extended_ifa_flags (void);
+
+void nm_platform_addr_flags2str (int flags, char *buf, size_t size);
+
+int nm_platform_ip_address_cmp_expiry (const NMPlatformIPAddress *a, const NMPlatformIPAddress *b);
+
+#define auto_g_free __attribute__((cleanup(put_g_free)))
+static void __attribute__((unused))
+put_g_free (void *ptr)
+{
+ g_clear_pointer ((gpointer *) ptr, g_free);
+}
+
+#endif /* NM_PLATFORM_H */
diff --git a/src/platform/tests/Makefile.am b/src/platform/tests/Makefile.am
new file mode 100644
index 000000000..9b10ea7b2
--- /dev/null
+++ b/src/platform/tests/Makefile.am
@@ -0,0 +1,116 @@
+AM_CPPFLAGS = \
+ -I${top_srcdir} \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/include \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/libnm-util \
+ -I${top_builddir}/libnm-util \
+ -I${srcdir}/.. \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(GUDEV_CFLAGS) \
+ $(LIBNL_CFLAGS)
+
+if REQUIRE_ROOT_TESTS
+AM_CPPFLAGS += -DREQUIRE_ROOT_TESTS=1
+endif
+
+PLATFORM_SOURCES = \
+ ../nm-platform.c \
+ ../nm-fake-platform.c \
+ ../nm-linux-platform.c
+TEST_SOURCES = $(PLATFORM_SOURCES) test-common.c test-common.h
+AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
+AM_LDFLAGS = $(GLIB_LIBS) $(GUDEV_LIBS) $(LIBNL_LIBS) $(CODE_COVERAGE_LDFLAGS)
+PLATFORM_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+@GNOME_CODE_COVERAGE_RULES@
+
+noinst_PROGRAMS = \
+ dump \
+ monitor \
+ platform \
+ test-link-fake \
+ test-link-linux \
+ test-address-fake \
+ test-address-linux \
+ test-route-fake \
+ test-route-linux \
+ test-cleanup-fake \
+ test-cleanup-linux
+
+EXTRA_DIST = test-common.h
+
+monitor_SOURCES = monitor.c $(PLATFORM_SOURCES)
+monitor_LDADD = $(PLATFORM_LDADD)
+
+dump_SOURCES = dump.c $(PLATFORM_SOURCES)
+dump_LDADD = $(PLATFORM_LDADD)
+
+platform_SOURCES = platform.c $(PLATFORM_SOURCES)
+platform_LDADD = $(PLATFORM_LDADD)
+
+test_link_fake_SOURCES = test-link.c $(TEST_SOURCES)
+test_link_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+test_link_fake_LDADD = $(PLATFORM_LDADD)
+
+test_link_linux_SOURCES = test-link.c $(TEST_SOURCES)
+test_link_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+test_link_linux_LDADD = $(PLATFORM_LDADD)
+
+test_address_fake_SOURCES = test-address.c $(TEST_SOURCES)
+test_address_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+test_address_fake_LDADD = $(PLATFORM_LDADD)
+
+test_address_linux_SOURCES = test-address.c $(TEST_SOURCES)
+test_address_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+test_address_linux_LDADD = $(PLATFORM_LDADD)
+
+test_route_fake_SOURCES = test-route.c $(TEST_SOURCES)
+test_route_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+test_route_fake_LDADD = $(PLATFORM_LDADD)
+
+test_route_linux_SOURCES = test-route.c $(TEST_SOURCES)
+test_route_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+test_route_linux_LDADD = $(PLATFORM_LDADD)
+
+test_cleanup_fake_SOURCES = test-cleanup.c $(TEST_SOURCES)
+test_cleanup_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+test_cleanup_fake_LDADD = $(PLATFORM_LDADD)
+
+test_cleanup_linux_SOURCES = test-cleanup.c $(TEST_SOURCES)
+test_cleanup_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+test_cleanup_linux_LDADD = $(PLATFORM_LDADD)
+
+#@VALGRIND_RULES@
+TESTS = test-link-fake test-address-fake test-route-fake test-cleanup-fake test-link-linux test-address-linux test-route-linux test-cleanup-linux
+
+
diff --git a/src/platform/tests/Makefile.in b/src/platform/tests/Makefile.in
new file mode 100644
index 000000000..6b03e315a
--- /dev/null
+++ b/src/platform/tests/Makefile.in
@@ -0,0 +1,1702 @@
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@REQUIRE_ROOT_TESTS_TRUE@am__append_1 = -DREQUIRE_ROOT_TESTS=1
+noinst_PROGRAMS = dump$(EXEEXT) monitor$(EXEEXT) platform$(EXEEXT) \
+ test-link-fake$(EXEEXT) test-link-linux$(EXEEXT) \
+ test-address-fake$(EXEEXT) test-address-linux$(EXEEXT) \
+ test-route-fake$(EXEEXT) test-route-linux$(EXEEXT) \
+ test-cleanup-fake$(EXEEXT) test-cleanup-linux$(EXEEXT)
+TESTS = test-link-fake$(EXEEXT) test-address-fake$(EXEEXT) \
+ test-route-fake$(EXEEXT) test-cleanup-fake$(EXEEXT) \
+ test-link-linux$(EXEEXT) test-address-linux$(EXEEXT) \
+ test-route-linux$(EXEEXT) test-cleanup-linux$(EXEEXT)
+subdir = src/platform/tests
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(top_srcdir)/build-aux/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
+ $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/gnome-code-coverage.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am__objects_1 = nm-platform.$(OBJEXT) nm-fake-platform.$(OBJEXT) \
+ nm-linux-platform.$(OBJEXT)
+am_dump_OBJECTS = dump.$(OBJEXT) $(am__objects_1)
+dump_OBJECTS = $(am_dump_OBJECTS)
+dump_DEPENDENCIES = $(PLATFORM_LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_monitor_OBJECTS = monitor.$(OBJEXT) $(am__objects_1)
+monitor_OBJECTS = $(am_monitor_OBJECTS)
+monitor_DEPENDENCIES = $(PLATFORM_LDADD)
+am_platform_OBJECTS = platform.$(OBJEXT) $(am__objects_1)
+platform_OBJECTS = $(am_platform_OBJECTS)
+platform_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_2 = test_address_fake-nm-platform.$(OBJEXT) \
+ test_address_fake-nm-fake-platform.$(OBJEXT) \
+ test_address_fake-nm-linux-platform.$(OBJEXT)
+am__objects_3 = $(am__objects_2) \
+ test_address_fake-test-common.$(OBJEXT)
+am_test_address_fake_OBJECTS = \
+ test_address_fake-test-address.$(OBJEXT) $(am__objects_3)
+test_address_fake_OBJECTS = $(am_test_address_fake_OBJECTS)
+test_address_fake_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_4 = test_address_linux-nm-platform.$(OBJEXT) \
+ test_address_linux-nm-fake-platform.$(OBJEXT) \
+ test_address_linux-nm-linux-platform.$(OBJEXT)
+am__objects_5 = $(am__objects_4) \
+ test_address_linux-test-common.$(OBJEXT)
+am_test_address_linux_OBJECTS = \
+ test_address_linux-test-address.$(OBJEXT) $(am__objects_5)
+test_address_linux_OBJECTS = $(am_test_address_linux_OBJECTS)
+test_address_linux_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_6 = test_cleanup_fake-nm-platform.$(OBJEXT) \
+ test_cleanup_fake-nm-fake-platform.$(OBJEXT) \
+ test_cleanup_fake-nm-linux-platform.$(OBJEXT)
+am__objects_7 = $(am__objects_6) \
+ test_cleanup_fake-test-common.$(OBJEXT)
+am_test_cleanup_fake_OBJECTS = \
+ test_cleanup_fake-test-cleanup.$(OBJEXT) $(am__objects_7)
+test_cleanup_fake_OBJECTS = $(am_test_cleanup_fake_OBJECTS)
+test_cleanup_fake_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_8 = test_cleanup_linux-nm-platform.$(OBJEXT) \
+ test_cleanup_linux-nm-fake-platform.$(OBJEXT) \
+ test_cleanup_linux-nm-linux-platform.$(OBJEXT)
+am__objects_9 = $(am__objects_8) \
+ test_cleanup_linux-test-common.$(OBJEXT)
+am_test_cleanup_linux_OBJECTS = \
+ test_cleanup_linux-test-cleanup.$(OBJEXT) $(am__objects_9)
+test_cleanup_linux_OBJECTS = $(am_test_cleanup_linux_OBJECTS)
+test_cleanup_linux_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_10 = test_link_fake-nm-platform.$(OBJEXT) \
+ test_link_fake-nm-fake-platform.$(OBJEXT) \
+ test_link_fake-nm-linux-platform.$(OBJEXT)
+am__objects_11 = $(am__objects_10) \
+ test_link_fake-test-common.$(OBJEXT)
+am_test_link_fake_OBJECTS = test_link_fake-test-link.$(OBJEXT) \
+ $(am__objects_11)
+test_link_fake_OBJECTS = $(am_test_link_fake_OBJECTS)
+test_link_fake_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_12 = test_link_linux-nm-platform.$(OBJEXT) \
+ test_link_linux-nm-fake-platform.$(OBJEXT) \
+ test_link_linux-nm-linux-platform.$(OBJEXT)
+am__objects_13 = $(am__objects_12) \
+ test_link_linux-test-common.$(OBJEXT)
+am_test_link_linux_OBJECTS = test_link_linux-test-link.$(OBJEXT) \
+ $(am__objects_13)
+test_link_linux_OBJECTS = $(am_test_link_linux_OBJECTS)
+test_link_linux_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_14 = test_route_fake-nm-platform.$(OBJEXT) \
+ test_route_fake-nm-fake-platform.$(OBJEXT) \
+ test_route_fake-nm-linux-platform.$(OBJEXT)
+am__objects_15 = $(am__objects_14) \
+ test_route_fake-test-common.$(OBJEXT)
+am_test_route_fake_OBJECTS = test_route_fake-test-route.$(OBJEXT) \
+ $(am__objects_15)
+test_route_fake_OBJECTS = $(am_test_route_fake_OBJECTS)
+test_route_fake_DEPENDENCIES = $(PLATFORM_LDADD)
+am__objects_16 = test_route_linux-nm-platform.$(OBJEXT) \
+ test_route_linux-nm-fake-platform.$(OBJEXT) \
+ test_route_linux-nm-linux-platform.$(OBJEXT)
+am__objects_17 = $(am__objects_16) \
+ test_route_linux-test-common.$(OBJEXT)
+am_test_route_linux_OBJECTS = test_route_linux-test-route.$(OBJEXT) \
+ $(am__objects_17)
+test_route_linux_OBJECTS = $(am_test_route_linux_OBJECTS)
+test_route_linux_DEPENDENCIES = $(PLATFORM_LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(dump_SOURCES) $(monitor_SOURCES) $(platform_SOURCES) \
+ $(test_address_fake_SOURCES) $(test_address_linux_SOURCES) \
+ $(test_cleanup_fake_SOURCES) $(test_cleanup_linux_SOURCES) \
+ $(test_link_fake_SOURCES) $(test_link_linux_SOURCES) \
+ $(test_route_fake_SOURCES) $(test_route_linux_SOURCES)
+DIST_SOURCES = $(dump_SOURCES) $(monitor_SOURCES) $(platform_SOURCES) \
+ $(test_address_fake_SOURCES) $(test_address_linux_SOURCES) \
+ $(test_cleanup_fake_SOURCES) $(test_cleanup_linux_SOURCES) \
+ $(test_link_fake_SOURCES) $(test_link_linux_SOURCES) \
+ $(test_route_fake_SOURCES) $(test_route_linux_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CKDB_PATH = @CKDB_PATH@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
+DBUS_LIBS = @DBUS_LIBS@
+DBUS_SYS_DIR = @DBUS_SYS_DIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DHCLIENT_PATH = @DHCLIENT_PATH@
+DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
+DLLTOOL = @DLLTOOL@
+DNSMASQ_PATH = @DNSMASQ_PATH@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GENHTML = @GENHTML@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MAKEFILE = @GLIB_MAKEFILE@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
+GNUTLS_LIBS = @GNUTLS_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUDEV_CFLAGS = @GUDEV_CFLAGS@
+GUDEV_LIBS = @GUDEV_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IPTABLES_PATH = @IPTABLES_PATH@
+IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
+IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
+KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDL = @LIBDL@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
+LIBNL_CFLAGS = @LIBNL_CFLAGS@
+LIBNL_LIBS = @LIBNL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@
+MM_GLIB_LIBS = @MM_GLIB_LIBS@
+MOC = @MOC@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
+NM_MICRO_VERSION = @NM_MICRO_VERSION@
+NM_MINOR_VERSION = @NM_MINOR_VERSION@
+NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@
+NM_VERSION = @NM_VERSION@
+NSS_CFLAGS = @NSS_CFLAGS@
+NSS_LIBS = @NSS_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POLKIT_CFLAGS = @POLKIT_CFLAGS@
+POLKIT_LIBS = @POLKIT_LIBS@
+POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
+PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSTEMD_200_CFLAGS = @SYSTEMD_200_CFLAGS@
+SYSTEMD_200_LIBS = @SYSTEMD_200_LIBS@
+SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@
+SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@
+SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@
+SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@
+SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
+UDEV_BASE_DIR = @UDEV_BASE_DIR@
+USE_NLS = @USE_NLS@
+UUID_CFLAGS = @UUID_CFLAGS@
+UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
+VAPIGEN = @VAPIGEN@
+VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
+VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+nmbinary = @nmbinary@
+nmconfdir = @nmconfdir@
+nmdatadir = @nmdatadir@
+nmrundir = @nmrundir@
+nmstatedir = @nmstatedir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+systemdsystemunitdir = @systemdsystemunitdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+with_dhclient = @with_dhclient@
+with_dhcpcd = @with_dhcpcd@
+with_netconfig = @with_netconfig@
+with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = -I${top_srcdir} -I${top_srcdir}/include \
+ -I${top_builddir}/include -I${top_srcdir}/src \
+ -I${top_builddir}/src -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/libnm-util -I${top_builddir}/libnm-util \
+ -I${srcdir}/.. -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(GLIB_CFLAGS) \
+ $(GUDEV_CFLAGS) $(LIBNL_CFLAGS) $(am__append_1)
+PLATFORM_SOURCES = \
+ ../nm-platform.c \
+ ../nm-fake-platform.c \
+ ../nm-linux-platform.c
+
+TEST_SOURCES = $(PLATFORM_SOURCES) test-common.c test-common.h
+AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
+AM_LDFLAGS = $(GLIB_LIBS) $(GUDEV_LIBS) $(LIBNL_LIBS) $(CODE_COVERAGE_LDFLAGS)
+PLATFORM_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+EXTRA_DIST = test-common.h
+monitor_SOURCES = monitor.c $(PLATFORM_SOURCES)
+monitor_LDADD = $(PLATFORM_LDADD)
+dump_SOURCES = dump.c $(PLATFORM_SOURCES)
+dump_LDADD = $(PLATFORM_LDADD)
+platform_SOURCES = platform.c $(PLATFORM_SOURCES)
+platform_LDADD = $(PLATFORM_LDADD)
+test_link_fake_SOURCES = test-link.c $(TEST_SOURCES)
+test_link_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+
+test_link_fake_LDADD = $(PLATFORM_LDADD)
+test_link_linux_SOURCES = test-link.c $(TEST_SOURCES)
+test_link_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+
+test_link_linux_LDADD = $(PLATFORM_LDADD)
+test_address_fake_SOURCES = test-address.c $(TEST_SOURCES)
+test_address_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+
+test_address_fake_LDADD = $(PLATFORM_LDADD)
+test_address_linux_SOURCES = test-address.c $(TEST_SOURCES)
+test_address_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+
+test_address_linux_LDADD = $(PLATFORM_LDADD)
+test_route_fake_SOURCES = test-route.c $(TEST_SOURCES)
+test_route_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+
+test_route_fake_LDADD = $(PLATFORM_LDADD)
+test_route_linux_SOURCES = test-route.c $(TEST_SOURCES)
+test_route_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+
+test_route_linux_LDADD = $(PLATFORM_LDADD)
+test_cleanup_fake_SOURCES = test-cleanup.c $(TEST_SOURCES)
+test_cleanup_fake_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_fake_platform_setup \
+ -DKERNEL_HACKS=0
+
+test_cleanup_fake_LDADD = $(PLATFORM_LDADD)
+test_cleanup_linux_SOURCES = test-cleanup.c $(TEST_SOURCES)
+test_cleanup_linux_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DSETUP=nm_linux_platform_setup \
+ -DKERNEL_HACKS=1
+
+test_cleanup_linux_LDADD = $(PLATFORM_LDADD)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/platform/tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/platform/tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+dump$(EXEEXT): $(dump_OBJECTS) $(dump_DEPENDENCIES) $(EXTRA_dump_DEPENDENCIES)
+ @rm -f dump$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dump_OBJECTS) $(dump_LDADD) $(LIBS)
+
+monitor$(EXEEXT): $(monitor_OBJECTS) $(monitor_DEPENDENCIES) $(EXTRA_monitor_DEPENDENCIES)
+ @rm -f monitor$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(monitor_OBJECTS) $(monitor_LDADD) $(LIBS)
+
+platform$(EXEEXT): $(platform_OBJECTS) $(platform_DEPENDENCIES) $(EXTRA_platform_DEPENDENCIES)
+ @rm -f platform$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(platform_OBJECTS) $(platform_LDADD) $(LIBS)
+
+test-address-fake$(EXEEXT): $(test_address_fake_OBJECTS) $(test_address_fake_DEPENDENCIES) $(EXTRA_test_address_fake_DEPENDENCIES)
+ @rm -f test-address-fake$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_address_fake_OBJECTS) $(test_address_fake_LDADD) $(LIBS)
+
+test-address-linux$(EXEEXT): $(test_address_linux_OBJECTS) $(test_address_linux_DEPENDENCIES) $(EXTRA_test_address_linux_DEPENDENCIES)
+ @rm -f test-address-linux$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_address_linux_OBJECTS) $(test_address_linux_LDADD) $(LIBS)
+
+test-cleanup-fake$(EXEEXT): $(test_cleanup_fake_OBJECTS) $(test_cleanup_fake_DEPENDENCIES) $(EXTRA_test_cleanup_fake_DEPENDENCIES)
+ @rm -f test-cleanup-fake$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_cleanup_fake_OBJECTS) $(test_cleanup_fake_LDADD) $(LIBS)
+
+test-cleanup-linux$(EXEEXT): $(test_cleanup_linux_OBJECTS) $(test_cleanup_linux_DEPENDENCIES) $(EXTRA_test_cleanup_linux_DEPENDENCIES)
+ @rm -f test-cleanup-linux$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_cleanup_linux_OBJECTS) $(test_cleanup_linux_LDADD) $(LIBS)
+
+test-link-fake$(EXEEXT): $(test_link_fake_OBJECTS) $(test_link_fake_DEPENDENCIES) $(EXTRA_test_link_fake_DEPENDENCIES)
+ @rm -f test-link-fake$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_link_fake_OBJECTS) $(test_link_fake_LDADD) $(LIBS)
+
+test-link-linux$(EXEEXT): $(test_link_linux_OBJECTS) $(test_link_linux_DEPENDENCIES) $(EXTRA_test_link_linux_DEPENDENCIES)
+ @rm -f test-link-linux$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_link_linux_OBJECTS) $(test_link_linux_LDADD) $(LIBS)
+
+test-route-fake$(EXEEXT): $(test_route_fake_OBJECTS) $(test_route_fake_DEPENDENCIES) $(EXTRA_test_route_fake_DEPENDENCIES)
+ @rm -f test-route-fake$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_route_fake_OBJECTS) $(test_route_fake_LDADD) $(LIBS)
+
+test-route-linux$(EXEEXT): $(test_route_linux_OBJECTS) $(test_route_linux_DEPENDENCIES) $(EXTRA_test_route_linux_DEPENDENCIES)
+ @rm -f test-route-linux$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_route_linux_OBJECTS) $(test_route_linux_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_fake-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_fake-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_fake-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_fake-test-address.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_fake-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_linux-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_linux-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_linux-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_linux-test-address.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_address_linux-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_fake-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_fake-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_fake-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_fake-test-cleanup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_fake-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_linux-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_linux-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_linux-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_linux-test-cleanup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cleanup_linux-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_fake-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_fake-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_fake-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_fake-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_fake-test-link.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_linux-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_linux-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_linux-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_linux-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_link_linux-test-link.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_fake-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_fake-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_fake-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_fake-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_fake-test-route.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_linux-nm-fake-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_linux-nm-linux-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_linux-nm-platform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_linux-test-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_route_linux-test-route.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-platform.o -MD -MP -MF $(DEPDIR)/nm-platform.Tpo -c -o nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-platform.Tpo $(DEPDIR)/nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-platform.obj -MD -MP -MF $(DEPDIR)/nm-platform.Tpo -c -o nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-platform.Tpo $(DEPDIR)/nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-fake-platform.o -MD -MP -MF $(DEPDIR)/nm-fake-platform.Tpo -c -o nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-fake-platform.Tpo $(DEPDIR)/nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/nm-fake-platform.Tpo -c -o nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-fake-platform.Tpo $(DEPDIR)/nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-linux-platform.o -MD -MP -MF $(DEPDIR)/nm-linux-platform.Tpo -c -o nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-linux-platform.Tpo $(DEPDIR)/nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/nm-linux-platform.Tpo -c -o nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-linux-platform.Tpo $(DEPDIR)/nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_address_fake-test-address.o: test-address.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-address.o -MD -MP -MF $(DEPDIR)/test_address_fake-test-address.Tpo -c -o test_address_fake-test-address.o `test -f 'test-address.c' || echo '$(srcdir)/'`test-address.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-address.Tpo $(DEPDIR)/test_address_fake-test-address.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-address.c' object='test_address_fake-test-address.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-address.o `test -f 'test-address.c' || echo '$(srcdir)/'`test-address.c
+
+test_address_fake-test-address.obj: test-address.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-address.obj -MD -MP -MF $(DEPDIR)/test_address_fake-test-address.Tpo -c -o test_address_fake-test-address.obj `if test -f 'test-address.c'; then $(CYGPATH_W) 'test-address.c'; else $(CYGPATH_W) '$(srcdir)/test-address.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-address.Tpo $(DEPDIR)/test_address_fake-test-address.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-address.c' object='test_address_fake-test-address.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-address.obj `if test -f 'test-address.c'; then $(CYGPATH_W) 'test-address.c'; else $(CYGPATH_W) '$(srcdir)/test-address.c'; fi`
+
+test_address_fake-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_address_fake-nm-platform.Tpo -c -o test_address_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-nm-platform.Tpo $(DEPDIR)/test_address_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_address_fake-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_address_fake-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_address_fake-nm-platform.Tpo -c -o test_address_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-nm-platform.Tpo $(DEPDIR)/test_address_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_address_fake-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_address_fake-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_address_fake-nm-fake-platform.Tpo -c -o test_address_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-nm-fake-platform.Tpo $(DEPDIR)/test_address_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_address_fake-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_address_fake-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_address_fake-nm-fake-platform.Tpo -c -o test_address_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-nm-fake-platform.Tpo $(DEPDIR)/test_address_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_address_fake-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_address_fake-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_address_fake-nm-linux-platform.Tpo -c -o test_address_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-nm-linux-platform.Tpo $(DEPDIR)/test_address_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_address_fake-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_address_fake-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_address_fake-nm-linux-platform.Tpo -c -o test_address_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-nm-linux-platform.Tpo $(DEPDIR)/test_address_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_address_fake-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_address_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_address_fake-test-common.Tpo -c -o test_address_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-common.Tpo $(DEPDIR)/test_address_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_address_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_address_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_address_fake-test-common.Tpo -c -o test_address_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-common.Tpo $(DEPDIR)/test_address_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_address_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+test_address_linux-test-address.o: test-address.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-address.o -MD -MP -MF $(DEPDIR)/test_address_linux-test-address.Tpo -c -o test_address_linux-test-address.o `test -f 'test-address.c' || echo '$(srcdir)/'`test-address.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-address.Tpo $(DEPDIR)/test_address_linux-test-address.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-address.c' object='test_address_linux-test-address.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-address.o `test -f 'test-address.c' || echo '$(srcdir)/'`test-address.c
+
+test_address_linux-test-address.obj: test-address.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-address.obj -MD -MP -MF $(DEPDIR)/test_address_linux-test-address.Tpo -c -o test_address_linux-test-address.obj `if test -f 'test-address.c'; then $(CYGPATH_W) 'test-address.c'; else $(CYGPATH_W) '$(srcdir)/test-address.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-address.Tpo $(DEPDIR)/test_address_linux-test-address.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-address.c' object='test_address_linux-test-address.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-address.obj `if test -f 'test-address.c'; then $(CYGPATH_W) 'test-address.c'; else $(CYGPATH_W) '$(srcdir)/test-address.c'; fi`
+
+test_address_linux-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_address_linux-nm-platform.Tpo -c -o test_address_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-nm-platform.Tpo $(DEPDIR)/test_address_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_address_linux-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_address_linux-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_address_linux-nm-platform.Tpo -c -o test_address_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-nm-platform.Tpo $(DEPDIR)/test_address_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_address_linux-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_address_linux-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_address_linux-nm-fake-platform.Tpo -c -o test_address_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-nm-fake-platform.Tpo $(DEPDIR)/test_address_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_address_linux-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_address_linux-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_address_linux-nm-fake-platform.Tpo -c -o test_address_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-nm-fake-platform.Tpo $(DEPDIR)/test_address_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_address_linux-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_address_linux-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_address_linux-nm-linux-platform.Tpo -c -o test_address_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-nm-linux-platform.Tpo $(DEPDIR)/test_address_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_address_linux-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_address_linux-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_address_linux-nm-linux-platform.Tpo -c -o test_address_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-nm-linux-platform.Tpo $(DEPDIR)/test_address_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_address_linux-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_address_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_address_linux-test-common.Tpo -c -o test_address_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-common.Tpo $(DEPDIR)/test_address_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_address_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_address_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_address_linux-test-common.Tpo -c -o test_address_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-common.Tpo $(DEPDIR)/test_address_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_address_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+test_cleanup_fake-test-cleanup.o: test-cleanup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-cleanup.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-cleanup.Tpo -c -o test_cleanup_fake-test-cleanup.o `test -f 'test-cleanup.c' || echo '$(srcdir)/'`test-cleanup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-cleanup.Tpo $(DEPDIR)/test_cleanup_fake-test-cleanup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-cleanup.c' object='test_cleanup_fake-test-cleanup.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-cleanup.o `test -f 'test-cleanup.c' || echo '$(srcdir)/'`test-cleanup.c
+
+test_cleanup_fake-test-cleanup.obj: test-cleanup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-cleanup.obj -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-cleanup.Tpo -c -o test_cleanup_fake-test-cleanup.obj `if test -f 'test-cleanup.c'; then $(CYGPATH_W) 'test-cleanup.c'; else $(CYGPATH_W) '$(srcdir)/test-cleanup.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-cleanup.Tpo $(DEPDIR)/test_cleanup_fake-test-cleanup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-cleanup.c' object='test_cleanup_fake-test-cleanup.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-cleanup.obj `if test -f 'test-cleanup.c'; then $(CYGPATH_W) 'test-cleanup.c'; else $(CYGPATH_W) '$(srcdir)/test-cleanup.c'; fi`
+
+test_cleanup_fake-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-nm-platform.Tpo -c -o test_cleanup_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-nm-platform.Tpo $(DEPDIR)/test_cleanup_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_cleanup_fake-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_cleanup_fake-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_cleanup_fake-nm-platform.Tpo -c -o test_cleanup_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-nm-platform.Tpo $(DEPDIR)/test_cleanup_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_cleanup_fake-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_cleanup_fake-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-nm-fake-platform.Tpo -c -o test_cleanup_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-nm-fake-platform.Tpo $(DEPDIR)/test_cleanup_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_cleanup_fake-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_cleanup_fake-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_cleanup_fake-nm-fake-platform.Tpo -c -o test_cleanup_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-nm-fake-platform.Tpo $(DEPDIR)/test_cleanup_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_cleanup_fake-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_cleanup_fake-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-nm-linux-platform.Tpo -c -o test_cleanup_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-nm-linux-platform.Tpo $(DEPDIR)/test_cleanup_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_cleanup_fake-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_cleanup_fake-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_cleanup_fake-nm-linux-platform.Tpo -c -o test_cleanup_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-nm-linux-platform.Tpo $(DEPDIR)/test_cleanup_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_cleanup_fake-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_cleanup_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-common.Tpo -c -o test_cleanup_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-common.Tpo $(DEPDIR)/test_cleanup_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_cleanup_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_cleanup_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-common.Tpo -c -o test_cleanup_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-common.Tpo $(DEPDIR)/test_cleanup_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_cleanup_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+test_cleanup_linux-test-cleanup.o: test-cleanup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-cleanup.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-cleanup.Tpo -c -o test_cleanup_linux-test-cleanup.o `test -f 'test-cleanup.c' || echo '$(srcdir)/'`test-cleanup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-cleanup.Tpo $(DEPDIR)/test_cleanup_linux-test-cleanup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-cleanup.c' object='test_cleanup_linux-test-cleanup.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-cleanup.o `test -f 'test-cleanup.c' || echo '$(srcdir)/'`test-cleanup.c
+
+test_cleanup_linux-test-cleanup.obj: test-cleanup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-cleanup.obj -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-cleanup.Tpo -c -o test_cleanup_linux-test-cleanup.obj `if test -f 'test-cleanup.c'; then $(CYGPATH_W) 'test-cleanup.c'; else $(CYGPATH_W) '$(srcdir)/test-cleanup.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-cleanup.Tpo $(DEPDIR)/test_cleanup_linux-test-cleanup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-cleanup.c' object='test_cleanup_linux-test-cleanup.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-cleanup.obj `if test -f 'test-cleanup.c'; then $(CYGPATH_W) 'test-cleanup.c'; else $(CYGPATH_W) '$(srcdir)/test-cleanup.c'; fi`
+
+test_cleanup_linux-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-nm-platform.Tpo -c -o test_cleanup_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-nm-platform.Tpo $(DEPDIR)/test_cleanup_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_cleanup_linux-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_cleanup_linux-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_cleanup_linux-nm-platform.Tpo -c -o test_cleanup_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-nm-platform.Tpo $(DEPDIR)/test_cleanup_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_cleanup_linux-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_cleanup_linux-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-nm-fake-platform.Tpo -c -o test_cleanup_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-nm-fake-platform.Tpo $(DEPDIR)/test_cleanup_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_cleanup_linux-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_cleanup_linux-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_cleanup_linux-nm-fake-platform.Tpo -c -o test_cleanup_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-nm-fake-platform.Tpo $(DEPDIR)/test_cleanup_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_cleanup_linux-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_cleanup_linux-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-nm-linux-platform.Tpo -c -o test_cleanup_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-nm-linux-platform.Tpo $(DEPDIR)/test_cleanup_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_cleanup_linux-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_cleanup_linux-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_cleanup_linux-nm-linux-platform.Tpo -c -o test_cleanup_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-nm-linux-platform.Tpo $(DEPDIR)/test_cleanup_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_cleanup_linux-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_cleanup_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-common.Tpo -c -o test_cleanup_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-common.Tpo $(DEPDIR)/test_cleanup_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_cleanup_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_cleanup_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-common.Tpo -c -o test_cleanup_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-common.Tpo $(DEPDIR)/test_cleanup_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_cleanup_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+test_link_fake-test-link.o: test-link.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-link.o -MD -MP -MF $(DEPDIR)/test_link_fake-test-link.Tpo -c -o test_link_fake-test-link.o `test -f 'test-link.c' || echo '$(srcdir)/'`test-link.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-link.Tpo $(DEPDIR)/test_link_fake-test-link.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-link.c' object='test_link_fake-test-link.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-link.o `test -f 'test-link.c' || echo '$(srcdir)/'`test-link.c
+
+test_link_fake-test-link.obj: test-link.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-link.obj -MD -MP -MF $(DEPDIR)/test_link_fake-test-link.Tpo -c -o test_link_fake-test-link.obj `if test -f 'test-link.c'; then $(CYGPATH_W) 'test-link.c'; else $(CYGPATH_W) '$(srcdir)/test-link.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-link.Tpo $(DEPDIR)/test_link_fake-test-link.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-link.c' object='test_link_fake-test-link.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-link.obj `if test -f 'test-link.c'; then $(CYGPATH_W) 'test-link.c'; else $(CYGPATH_W) '$(srcdir)/test-link.c'; fi`
+
+test_link_fake-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_link_fake-nm-platform.Tpo -c -o test_link_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-nm-platform.Tpo $(DEPDIR)/test_link_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_link_fake-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_link_fake-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_link_fake-nm-platform.Tpo -c -o test_link_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-nm-platform.Tpo $(DEPDIR)/test_link_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_link_fake-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_link_fake-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_link_fake-nm-fake-platform.Tpo -c -o test_link_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-nm-fake-platform.Tpo $(DEPDIR)/test_link_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_link_fake-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_link_fake-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_link_fake-nm-fake-platform.Tpo -c -o test_link_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-nm-fake-platform.Tpo $(DEPDIR)/test_link_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_link_fake-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_link_fake-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_link_fake-nm-linux-platform.Tpo -c -o test_link_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-nm-linux-platform.Tpo $(DEPDIR)/test_link_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_link_fake-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_link_fake-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_link_fake-nm-linux-platform.Tpo -c -o test_link_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-nm-linux-platform.Tpo $(DEPDIR)/test_link_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_link_fake-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_link_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_link_fake-test-common.Tpo -c -o test_link_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-common.Tpo $(DEPDIR)/test_link_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_link_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_link_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_link_fake-test-common.Tpo -c -o test_link_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-common.Tpo $(DEPDIR)/test_link_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_link_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+test_link_linux-test-link.o: test-link.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-link.o -MD -MP -MF $(DEPDIR)/test_link_linux-test-link.Tpo -c -o test_link_linux-test-link.o `test -f 'test-link.c' || echo '$(srcdir)/'`test-link.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-link.Tpo $(DEPDIR)/test_link_linux-test-link.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-link.c' object='test_link_linux-test-link.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-link.o `test -f 'test-link.c' || echo '$(srcdir)/'`test-link.c
+
+test_link_linux-test-link.obj: test-link.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-link.obj -MD -MP -MF $(DEPDIR)/test_link_linux-test-link.Tpo -c -o test_link_linux-test-link.obj `if test -f 'test-link.c'; then $(CYGPATH_W) 'test-link.c'; else $(CYGPATH_W) '$(srcdir)/test-link.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-link.Tpo $(DEPDIR)/test_link_linux-test-link.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-link.c' object='test_link_linux-test-link.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-link.obj `if test -f 'test-link.c'; then $(CYGPATH_W) 'test-link.c'; else $(CYGPATH_W) '$(srcdir)/test-link.c'; fi`
+
+test_link_linux-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_link_linux-nm-platform.Tpo -c -o test_link_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-nm-platform.Tpo $(DEPDIR)/test_link_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_link_linux-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_link_linux-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_link_linux-nm-platform.Tpo -c -o test_link_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-nm-platform.Tpo $(DEPDIR)/test_link_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_link_linux-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_link_linux-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_link_linux-nm-fake-platform.Tpo -c -o test_link_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-nm-fake-platform.Tpo $(DEPDIR)/test_link_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_link_linux-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_link_linux-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_link_linux-nm-fake-platform.Tpo -c -o test_link_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-nm-fake-platform.Tpo $(DEPDIR)/test_link_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_link_linux-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_link_linux-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_link_linux-nm-linux-platform.Tpo -c -o test_link_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-nm-linux-platform.Tpo $(DEPDIR)/test_link_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_link_linux-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_link_linux-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_link_linux-nm-linux-platform.Tpo -c -o test_link_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-nm-linux-platform.Tpo $(DEPDIR)/test_link_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_link_linux-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_link_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_link_linux-test-common.Tpo -c -o test_link_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-common.Tpo $(DEPDIR)/test_link_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_link_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_link_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_link_linux-test-common.Tpo -c -o test_link_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-common.Tpo $(DEPDIR)/test_link_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_link_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+test_route_fake-test-route.o: test-route.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-route.o -MD -MP -MF $(DEPDIR)/test_route_fake-test-route.Tpo -c -o test_route_fake-test-route.o `test -f 'test-route.c' || echo '$(srcdir)/'`test-route.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-route.Tpo $(DEPDIR)/test_route_fake-test-route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-route.c' object='test_route_fake-test-route.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-route.o `test -f 'test-route.c' || echo '$(srcdir)/'`test-route.c
+
+test_route_fake-test-route.obj: test-route.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-route.obj -MD -MP -MF $(DEPDIR)/test_route_fake-test-route.Tpo -c -o test_route_fake-test-route.obj `if test -f 'test-route.c'; then $(CYGPATH_W) 'test-route.c'; else $(CYGPATH_W) '$(srcdir)/test-route.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-route.Tpo $(DEPDIR)/test_route_fake-test-route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-route.c' object='test_route_fake-test-route.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-route.obj `if test -f 'test-route.c'; then $(CYGPATH_W) 'test-route.c'; else $(CYGPATH_W) '$(srcdir)/test-route.c'; fi`
+
+test_route_fake-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_route_fake-nm-platform.Tpo -c -o test_route_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-nm-platform.Tpo $(DEPDIR)/test_route_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_route_fake-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_route_fake-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_route_fake-nm-platform.Tpo -c -o test_route_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-nm-platform.Tpo $(DEPDIR)/test_route_fake-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_route_fake-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_route_fake-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_route_fake-nm-fake-platform.Tpo -c -o test_route_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-nm-fake-platform.Tpo $(DEPDIR)/test_route_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_route_fake-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_route_fake-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_route_fake-nm-fake-platform.Tpo -c -o test_route_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-nm-fake-platform.Tpo $(DEPDIR)/test_route_fake-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_route_fake-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_route_fake-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_route_fake-nm-linux-platform.Tpo -c -o test_route_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-nm-linux-platform.Tpo $(DEPDIR)/test_route_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_route_fake-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_route_fake-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_route_fake-nm-linux-platform.Tpo -c -o test_route_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-nm-linux-platform.Tpo $(DEPDIR)/test_route_fake-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_route_fake-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_route_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_route_fake-test-common.Tpo -c -o test_route_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-common.Tpo $(DEPDIR)/test_route_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_route_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_route_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_route_fake-test-common.Tpo -c -o test_route_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-common.Tpo $(DEPDIR)/test_route_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_route_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+test_route_linux-test-route.o: test-route.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-route.o -MD -MP -MF $(DEPDIR)/test_route_linux-test-route.Tpo -c -o test_route_linux-test-route.o `test -f 'test-route.c' || echo '$(srcdir)/'`test-route.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-route.Tpo $(DEPDIR)/test_route_linux-test-route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-route.c' object='test_route_linux-test-route.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-route.o `test -f 'test-route.c' || echo '$(srcdir)/'`test-route.c
+
+test_route_linux-test-route.obj: test-route.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-route.obj -MD -MP -MF $(DEPDIR)/test_route_linux-test-route.Tpo -c -o test_route_linux-test-route.obj `if test -f 'test-route.c'; then $(CYGPATH_W) 'test-route.c'; else $(CYGPATH_W) '$(srcdir)/test-route.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-route.Tpo $(DEPDIR)/test_route_linux-test-route.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-route.c' object='test_route_linux-test-route.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-route.obj `if test -f 'test-route.c'; then $(CYGPATH_W) 'test-route.c'; else $(CYGPATH_W) '$(srcdir)/test-route.c'; fi`
+
+test_route_linux-nm-platform.o: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_route_linux-nm-platform.Tpo -c -o test_route_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-nm-platform.Tpo $(DEPDIR)/test_route_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_route_linux-nm-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
+
+test_route_linux-nm-platform.obj: ../nm-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-nm-platform.obj -MD -MP -MF $(DEPDIR)/test_route_linux-nm-platform.Tpo -c -o test_route_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-nm-platform.Tpo $(DEPDIR)/test_route_linux-nm-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-platform.c' object='test_route_linux-nm-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-nm-platform.obj `if test -f '../nm-platform.c'; then $(CYGPATH_W) '../nm-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-platform.c'; fi`
+
+test_route_linux-nm-fake-platform.o: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-nm-fake-platform.o -MD -MP -MF $(DEPDIR)/test_route_linux-nm-fake-platform.Tpo -c -o test_route_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-nm-fake-platform.Tpo $(DEPDIR)/test_route_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_route_linux-nm-fake-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-nm-fake-platform.o `test -f '../nm-fake-platform.c' || echo '$(srcdir)/'`../nm-fake-platform.c
+
+test_route_linux-nm-fake-platform.obj: ../nm-fake-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-nm-fake-platform.obj -MD -MP -MF $(DEPDIR)/test_route_linux-nm-fake-platform.Tpo -c -o test_route_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-nm-fake-platform.Tpo $(DEPDIR)/test_route_linux-nm-fake-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-fake-platform.c' object='test_route_linux-nm-fake-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-nm-fake-platform.obj `if test -f '../nm-fake-platform.c'; then $(CYGPATH_W) '../nm-fake-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-fake-platform.c'; fi`
+
+test_route_linux-nm-linux-platform.o: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-nm-linux-platform.o -MD -MP -MF $(DEPDIR)/test_route_linux-nm-linux-platform.Tpo -c -o test_route_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-nm-linux-platform.Tpo $(DEPDIR)/test_route_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_route_linux-nm-linux-platform.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-nm-linux-platform.o `test -f '../nm-linux-platform.c' || echo '$(srcdir)/'`../nm-linux-platform.c
+
+test_route_linux-nm-linux-platform.obj: ../nm-linux-platform.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-nm-linux-platform.obj -MD -MP -MF $(DEPDIR)/test_route_linux-nm-linux-platform.Tpo -c -o test_route_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-nm-linux-platform.Tpo $(DEPDIR)/test_route_linux-nm-linux-platform.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../nm-linux-platform.c' object='test_route_linux-nm-linux-platform.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
+
+test_route_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_route_linux-test-common.Tpo -c -o test_route_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-common.Tpo $(DEPDIR)/test_route_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_route_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_route_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_route_linux-test-common.Tpo -c -o test_route_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-common.Tpo $(DEPDIR)/test_route_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-common.c' object='test_route_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+
+@GNOME_CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/platform/tests/dump.c b/src/platform/tests/dump.c
new file mode 100644
index 000000000..e97ef138c
--- /dev/null
+++ b/src/platform/tests/dump.c
@@ -0,0 +1,136 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <arpa/inet.h>
+
+#include "nm-platform.h"
+#include "nm-linux-platform.h"
+#include "nm-fake-platform.h"
+
+static void
+dump_interface (NMPlatformLink *link)
+{
+ GArray *ip6_addresses;
+ GArray *ip4_addresses;
+ const NMPlatformIP6Address *ip6_address;
+ const NMPlatformIP4Address *ip4_address;
+ GArray *ip6_routes;
+ GArray *ip4_routes;
+ const NMPlatformIP6Route *ip6_route;
+ const NMPlatformIP4Route *ip4_route;
+ char networkstr[INET6_ADDRSTRLEN];
+ char gatewaystr[INET6_ADDRSTRLEN];
+ int vlan_id, vlan_parent;
+ const char *address;
+ size_t addrlen;
+ int i;
+
+ g_assert (link->up || !link->connected);
+
+ printf ("%d: %s: %s", link->ifindex, link->name, link->type_name);
+ if (link->up)
+ printf (" %s", link->connected ? "CONNECTED" : "DISCONNECTED");
+ else
+ printf (" DOWN");
+ if (!link->arp)
+ printf (" noarp");
+ if (link->master)
+ printf (" master %d", link->master);
+ if (link->parent)
+ printf (" parent %d", link->parent);
+ printf (" mtu %d", link->mtu);
+ printf ("\n");
+ if (link->driver)
+ printf (" driver: %s\n", link->driver);
+ printf (" UDI: %s\n", link->udi);
+ if (!nm_platform_vlan_get_info (link->ifindex, &vlan_parent, &vlan_id))
+ g_assert_not_reached ();
+ if (vlan_parent)
+ printf (" vlan parent %d id %d\n", vlan_parent, vlan_id);
+
+ if (nm_platform_link_is_software (link->ifindex))
+ printf (" class software\n");
+ if (nm_platform_link_supports_slaves (link->ifindex))
+ printf (" class supports-slaves\n");
+ if (nm_platform_link_supports_carrier_detect (link->ifindex))
+ printf (" feature carrier-detect\n");
+ if (nm_platform_link_supports_vlans (link->ifindex))
+ printf (" feature vlans\n");
+
+ address = nm_platform_link_get_address (link->ifindex, &addrlen);
+ if (address) {
+ printf (" link-address ");
+ for (i = 0; i < addrlen; i++)
+ printf ("%s%02hhx", i ? ":" : "", address[i]);
+ printf ("\n");
+ }
+
+ ip4_addresses = nm_platform_ip4_address_get_all (link->ifindex);
+ ip6_addresses = nm_platform_ip6_address_get_all (link->ifindex);
+
+ g_assert (ip4_addresses);
+ g_assert (ip6_addresses);
+
+ for (i = 0; i < ip4_addresses->len; i++) {
+ ip4_address = &g_array_index (ip4_addresses, NMPlatformIP4Address, i);
+ printf (" ip4-address %s\n", nm_platform_ip4_address_to_string (ip4_address));
+ }
+
+ for (i = 0; i < ip6_addresses->len; i++) {
+ ip6_address = &g_array_index (ip6_addresses, NMPlatformIP6Address, i);
+ printf (" ip6-address %s\n", nm_platform_ip6_address_to_string (ip6_address));
+ }
+
+ g_array_unref (ip4_addresses);
+ g_array_unref (ip6_addresses);
+
+ ip4_routes = nm_platform_ip4_route_get_all (link->ifindex, TRUE);
+ ip6_routes = nm_platform_ip6_route_get_all (link->ifindex, TRUE);
+
+ g_assert (ip4_routes);
+ g_assert (ip6_routes);
+
+ for (i = 0; i < ip4_routes->len; i++) {
+ ip4_route = &g_array_index (ip4_routes, NMPlatformIP4Route, i);
+ inet_ntop (AF_INET, &ip4_route->network, networkstr, sizeof (networkstr));
+ inet_ntop (AF_INET, &ip4_route->gateway, gatewaystr, sizeof (gatewaystr));
+ printf (" ip4-route %s/%d via %s\n", networkstr, ip4_route->plen, gatewaystr);
+ }
+
+ for (i = 0; i < ip6_routes->len; i++) {
+ ip6_route = &g_array_index (ip6_routes, NMPlatformIP6Route, i);
+ inet_ntop (AF_INET6, &ip6_route->network, networkstr, sizeof (networkstr));
+ inet_ntop (AF_INET6, &ip6_route->gateway, gatewaystr, sizeof (gatewaystr));
+ printf (" ip6-route %s/%d via %s\n", networkstr, ip6_route->plen, gatewaystr);
+ }
+
+ g_array_unref (ip4_routes);
+ g_array_unref (ip6_routes);
+}
+
+static void
+dump_all (void)
+{
+ GArray *links = nm_platform_link_get_all ();
+ int i;
+
+ for (i = 0; i < links->len; i++)
+ dump_interface (&g_array_index (links, NMPlatformLink, i));
+}
+
+int
+main (int argc, char **argv)
+{
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_assert (argc <= 2);
+ if (argc > 1 && !g_strcmp0 (argv[1], "--fake"))
+ nm_fake_platform_setup ();
+ else
+ nm_linux_platform_setup ();
+
+ dump_all ();
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/platform/tests/monitor.c b/src/platform/tests/monitor.c
new file mode 100644
index 000000000..d56cc2bf8
--- /dev/null
+++ b/src/platform/tests/monitor.c
@@ -0,0 +1,30 @@
+#include <stdlib.h>
+#include <syslog.h>
+
+#include "nm-fake-platform.h"
+#include "nm-linux-platform.h"
+#include "nm-logging.h"
+
+int
+main (int argc, char **argv)
+{
+ GMainLoop *loop;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ loop = g_main_loop_new (NULL, FALSE);
+ nm_logging_setup ("debug", NULL, NULL, NULL);
+ openlog (G_LOG_DOMAIN, LOG_CONS | LOG_PERROR, LOG_DAEMON);
+
+ g_assert (argc <= 2);
+ if (argc > 1 && !g_strcmp0 (argv[1], "--fake"))
+ nm_fake_platform_setup ();
+ else
+ nm_linux_platform_setup ();
+
+ g_main_loop_run (loop);
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/platform/tests/platform.c b/src/platform/tests/platform.c
new file mode 100644
index 000000000..ea8bd0e3b
--- /dev/null
+++ b/src/platform/tests/platform.c
@@ -0,0 +1,897 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-platform.c - Handle runtime kernel networking configuration
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <netlink/route/addr.h>
+
+#include "nm-platform.h"
+#include "nm-linux-platform.h"
+#include "nm-fake-platform.h"
+
+#define error(...) fprintf (stderr, __VA_ARGS__)
+
+typedef gboolean boolean_t;
+typedef int decimal_t;
+typedef const char *string_t;
+
+#define print_boolean(value) printf ("%s\n", value ? "yes" : "no")
+#define print_decimal(value) printf ("%d\n", value)
+#define print_string(value) printf ("%s\n", value)
+
+static gboolean
+do_sysctl_set (char **argv)
+{
+ return nm_platform_sysctl_set (argv[0], argv[1]);
+}
+
+static gboolean
+do_sysctl_get (char **argv)
+{
+ auto_g_free char *value = nm_platform_sysctl_get (argv[0]);
+
+ printf ("%s\n", value);
+
+ return !!value;
+}
+
+static int
+parse_ifindex (const char *str)
+{
+ char *endptr;
+ int ifindex = 0;
+
+ ifindex = strtol (str, &endptr, 10);
+
+ if (*endptr) {
+ ifindex = nm_platform_link_get_ifindex (str);
+ }
+
+ return ifindex;
+}
+
+static gboolean
+do_link_get_all (char **argv)
+{
+ GArray *links;
+ NMPlatformLink *device;
+ int i;
+
+ links = nm_platform_link_get_all ();
+ for (i = 0; i < links->len; i++) {
+ device = &g_array_index (links, NMPlatformLink, i);
+
+ printf ("%d: %s type %d\n", device->ifindex, device->name, device->type);
+ }
+ g_array_unref (links);
+
+ return TRUE;
+}
+
+static gboolean
+do_dummy_add (char **argv)
+{
+ return nm_platform_dummy_add (argv[0]);
+}
+
+static gboolean
+do_bridge_add (char **argv)
+{
+ return nm_platform_bridge_add (argv[0], NULL, 0);
+}
+
+static gboolean
+do_bond_add (char **argv)
+{
+ return nm_platform_bond_add (argv[0]);
+}
+
+static gboolean
+do_team_add (char **argv)
+{
+ return nm_platform_team_add (argv[0]);
+}
+
+static gboolean
+do_vlan_add (char **argv)
+{
+ const char *name = *argv++;
+ int parent = parse_ifindex (*argv++);
+ int vlanid = strtol (*argv++, NULL, 10);
+ guint32 vlan_flags = strtol (*argv++, NULL, 10);
+
+ return nm_platform_vlan_add (name, parent, vlanid, vlan_flags);
+}
+
+static gboolean
+do_link_exists (char **argv)
+{
+ gboolean value = nm_platform_link_exists (argv[0]);
+
+ print_boolean (value);
+
+ return TRUE;
+}
+
+#define LINK_CMD(cmdname) \
+ static gboolean \
+ do_link_##cmdname (char **argv) \
+ { \
+ int ifindex = parse_ifindex (argv[0]); \
+ return ifindex ? nm_platform_link_##cmdname (ifindex) : FALSE; \
+ }
+
+#define LINK_CMD_GET_FULL(cmdname, type, cond) \
+ static gboolean \
+ do_link_##cmdname (char **argv) \
+ { \
+ int ifindex = parse_ifindex (argv[0]); \
+ if (ifindex) { \
+ type##_t value = nm_platform_link_##cmdname (ifindex); \
+ if (cond) { \
+ print_##type (value); \
+ return TRUE; \
+ } \
+ } \
+ return FALSE; \
+ }
+#define LINK_CMD_GET(cmdname, type) LINK_CMD_GET_FULL (cmdname, type, TRUE);
+
+LINK_CMD (delete)
+
+/* do_link_delete_by_ifname:
+ *
+ * We don't need this as we allow ifname instead of ifindex anyway.
+ */
+
+static gboolean
+do_link_get_ifindex (char **argv)
+{
+ int ifindex = nm_platform_link_get_ifindex (argv[0]);
+
+ if (ifindex)
+ printf ("%d\n", ifindex);
+
+ return !!ifindex;
+}
+
+LINK_CMD_GET_FULL (get_name, string, value)
+LINK_CMD_GET_FULL (get_type, decimal, value > 0)
+LINK_CMD_GET (is_software, boolean)
+LINK_CMD_GET (supports_slaves, boolean)
+
+LINK_CMD (set_up)
+LINK_CMD (set_down)
+LINK_CMD (set_arp)
+LINK_CMD (set_noarp)
+LINK_CMD_GET (is_up, boolean)
+LINK_CMD_GET (is_connected, boolean)
+LINK_CMD_GET (uses_arp, boolean)
+
+static gboolean
+do_link_set_address (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ char *hex = *argv++;
+ int hexlen = strlen (hex);
+ char address[hexlen/2];
+ char *endptr;
+ int i;
+
+ g_assert (!(hexlen % 2));
+
+ for (i = 0; i < sizeof (address); i++) {
+ char digit[3];
+
+ digit[0] = hex[2*i];
+ digit[1] = hex[2*i+1];
+ digit[2] = '\0';
+
+ address[i] = strtoul (digit, &endptr, 16);
+ g_assert (!*endptr);
+ }
+
+ return nm_platform_link_set_address (ifindex, address, sizeof (address));
+}
+
+static gboolean
+do_link_get_address (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ const char *address;
+ size_t length;
+ int i;
+
+ address = nm_platform_link_get_address (ifindex, &length);
+
+ if (!address || length <= 0)
+ return FALSE;
+
+ for (i = 0; i < length; i++)
+ printf ("%02x", address[i]);
+ printf ("\n");
+
+ return TRUE;
+}
+
+static gboolean
+do_link_set_mtu (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ int mtu = strtoul (*argv++, NULL, 10);
+
+ return nm_platform_link_set_mtu (ifindex, mtu);
+}
+
+LINK_CMD_GET (get_mtu, decimal);
+LINK_CMD_GET (supports_carrier_detect, boolean)
+LINK_CMD_GET (supports_vlans, boolean)
+
+static gboolean
+do_link_enslave (char **argv)
+{
+ int master = parse_ifindex (*argv++);
+ int slave = parse_ifindex (*argv++);
+
+ return nm_platform_link_enslave (master, slave);
+}
+
+static gboolean
+do_link_release (char **argv)
+{
+ int master = parse_ifindex (*argv++);
+ int slave = parse_ifindex (*argv++);
+
+ return nm_platform_link_release (master, slave);
+}
+
+LINK_CMD_GET (get_master, decimal)
+
+static gboolean
+do_master_set_option (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ const char *option = *argv++;
+ const char *value = *argv++;
+
+ return nm_platform_master_set_option (ifindex, option, value);
+}
+
+static gboolean
+do_master_get_option (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ const char *option = *argv++;
+ auto_g_free char *value = nm_platform_master_get_option (ifindex, option);
+
+ printf ("%s\n", value);
+
+ return !!value;
+}
+
+static gboolean
+do_slave_set_option (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ const char *option = *argv++;
+ const char *value = *argv++;
+
+ return nm_platform_slave_set_option (ifindex, option, value);
+}
+
+static gboolean
+do_slave_get_option (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ const char *option = *argv++;
+ auto_g_free char *value = nm_platform_slave_get_option (ifindex, option);
+
+ printf ("%s\n", value);
+
+ return !!value;
+}
+
+static gboolean
+do_vlan_get_info (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ int parent;
+ int vlanid;
+
+ if (!nm_platform_vlan_get_info (ifindex, &parent, &vlanid))
+ return FALSE;
+
+ printf ("%d %d\n", parent, vlanid);
+
+ return TRUE;
+}
+
+static gboolean
+do_vlan_set_ingress_map (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ int from = strtol (*argv++, NULL, 10);
+ int to = strtol (*argv++, NULL, 10);
+
+ return nm_platform_vlan_set_ingress_map (ifindex, from, to);
+}
+
+static gboolean
+do_vlan_set_egress_map (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ int from = strtol (*argv++, NULL, 10);
+ int to = strtol (*argv++, NULL, 10);
+
+ return nm_platform_vlan_set_egress_map (ifindex, from, to);
+}
+
+static gboolean
+do_veth_get_properties (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ NMPlatformVethProperties props;
+
+ if (!nm_platform_veth_get_properties (ifindex, &props))
+ return FALSE;
+
+ printf ("peer: %d\n", props.peer);
+
+ return TRUE;
+}
+
+static gboolean
+do_tun_get_properties (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ NMPlatformTunProperties props;
+
+ if (!nm_platform_tun_get_properties (ifindex, &props))
+ return FALSE;
+
+ printf ("mode: %s\n", props.mode);
+ if (props.owner == -1)
+ printf ("owner: none\n");
+ else
+ printf ("owner: %lu\n", (gulong) props.owner);
+ if (props.group == -1)
+ printf ("group: none\n");
+ else
+ printf ("group: %lu\n", (gulong) props.group);
+ printf ("no-pi: ");
+ print_boolean (props.no_pi);
+ printf ("vnet-hdr: ");
+ print_boolean (props.vnet_hdr);
+ printf ("multi-queue: ");
+ print_boolean (props.multi_queue);
+
+ return TRUE;
+}
+
+static gboolean
+do_macvlan_get_properties (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ NMPlatformMacvlanProperties props;
+
+ if (!nm_platform_macvlan_get_properties (ifindex, &props))
+ return FALSE;
+
+ printf ("parent: %d\n", props.parent_ifindex);
+ printf ("mode: %s\n", props.mode);
+ printf ("no-promisc: ");
+ print_boolean (props.no_promisc);
+ return TRUE;
+}
+
+static gboolean
+do_vxlan_get_properties (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ NMPlatformVxlanProperties props;
+ char addrstr[INET6_ADDRSTRLEN];
+
+ if (!nm_platform_vxlan_get_properties (ifindex, &props))
+ return FALSE;
+
+ printf ("parent-ifindex: %u\n", props.parent_ifindex);
+ printf ("id: %u\n", props.id);
+ if (props.group)
+ inet_ntop (AF_INET, &props.group, addrstr, sizeof (addrstr));
+ else if (props.group6.s6_addr[0])
+ inet_ntop (AF_INET6, &props.group6, addrstr, sizeof (addrstr));
+ else
+ strcpy (addrstr, "-");
+ printf ("group: %s\n", addrstr);
+ if (props.local)
+ inet_ntop (AF_INET, &props.local, addrstr, sizeof (addrstr));
+ else if (props.local6.s6_addr[0])
+ inet_ntop (AF_INET6, &props.local6, addrstr, sizeof (addrstr));
+ else
+ strcpy (addrstr, "-");
+ printf ("local: %s\n", addrstr);
+ printf ("tos: %u\n", props.tos);
+ printf ("ttl: %u\n", props.ttl);
+ printf ("learning: ");
+ print_boolean (props.learning);
+ printf ("ageing: %u\n", props.ageing);
+ printf ("limit: %u\n", props.limit);
+ printf ("dst-port: %u\n", props.dst_port);
+ printf ("src-port-min: %u\n", props.src_port_min);
+ printf ("src-port-max: %u\n", props.src_port_max);
+ printf ("proxy: ");
+ print_boolean (props.proxy);
+ printf ("rsc: ");
+ print_boolean (props.rsc);
+ printf ("l2miss: ");
+ print_boolean (props.l2miss);
+ printf ("l3miss: ");
+ print_boolean (props.l3miss);
+
+ return TRUE;
+}
+
+static gboolean
+do_gre_get_properties (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ NMPlatformGreProperties props;
+ char addrstr[INET_ADDRSTRLEN];
+
+ if (!nm_platform_gre_get_properties (ifindex, &props))
+ return FALSE;
+
+ printf ("parent-ifindex: %u\n", props.parent_ifindex);
+ printf ("input-flags: %u\n", props.input_flags);
+ printf ("output-flags: %u\n", props.input_flags);
+ printf ("input-key: %u\n", props.input_key);
+ printf ("output-key: %u\n", props.output_key);
+ if (props.local)
+ inet_ntop (AF_INET, &props.local, addrstr, sizeof (addrstr));
+ else
+ strcpy (addrstr, "-");
+ printf ("local: %s\n", addrstr);
+ if (props.remote)
+ inet_ntop (AF_INET, &props.remote, addrstr, sizeof (addrstr));
+ else
+ strcpy (addrstr, "-");
+ printf ("remote: %s\n", addrstr);
+ printf ("ttl: %u\n", props.ttl);
+ printf ("tos: %u\n", props.tos);
+ printf ("path-mtu-discovery: ");
+ print_boolean (props.path_mtu_discovery);
+
+ return TRUE;
+}
+
+static gboolean
+do_ip4_address_get_all (char **argv)
+{
+ int ifindex = parse_ifindex (argv[0]);
+ GArray *addresses;
+ NMPlatformIP4Address *address;
+ char addrstr[INET_ADDRSTRLEN];
+ int i;
+
+ if (ifindex) {
+ addresses = nm_platform_ip4_address_get_all (ifindex);
+ for (i = 0; i < addresses->len; i++) {
+ address = &g_array_index (addresses, NMPlatformIP4Address, i);
+ inet_ntop (AF_INET, &address->address, addrstr, sizeof (addrstr));
+ printf ("%s/%d\n", addrstr, address->plen);
+ }
+ g_array_unref (addresses);
+ }
+
+ return !!ifindex;
+}
+
+static gboolean
+do_ip6_address_get_all (char **argv)
+{
+ int ifindex = parse_ifindex (argv[0]);
+ GArray *addresses;
+ NMPlatformIP6Address *address;
+ char addrstr[INET6_ADDRSTRLEN];
+ int i;
+
+ if (ifindex) {
+ addresses = nm_platform_ip6_address_get_all (ifindex);
+ for (i = 0; i < addresses->len; i++) {
+ address = &g_array_index (addresses, NMPlatformIP6Address, i);
+ inet_ntop (AF_INET6, &address->address, addrstr, sizeof (addrstr));
+ printf ("%s/%d\n", addrstr, address->plen);
+ }
+ g_array_unref (addresses);
+ }
+
+ return !!ifindex;
+}
+
+static gboolean
+parse_ip_address (int family, char *str, gpointer address, int *plen)
+{
+ char *endptr;
+
+ if (plen) {
+ char *ptr = strchr (str, '/');
+ if (ptr) {
+ *ptr++ = '\0';
+ *plen = strtol (ptr, &endptr, 10);
+ if (*endptr)
+ ptr = NULL;
+ }
+ if (!ptr) {
+ error ("Bad format of IP address, expected address/plen.\n");
+ return FALSE;
+ }
+ }
+
+ if (inet_pton (family, str, address))
+ return TRUE;
+
+ error ("Bad format of IP address, expected address%s.\n", plen ? "/plen" : "");
+ return FALSE;
+}
+
+typedef in_addr_t ip4_t;
+typedef struct in6_addr ip6_t;
+
+#define parse_ip4_address(s, a, p) parse_ip_address (AF_INET, s, a, p)
+#define parse_ip6_address(s, a, p) parse_ip_address (AF_INET6, s, a, p)
+
+static gboolean
+do_ip4_address_add (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ ip4_t address;
+ int plen;
+
+ if (ifindex && parse_ip4_address (*argv++, &address, &plen)) {
+ guint32 lifetime = strtol (*argv++, NULL, 10);
+ guint32 preferred = strtol (*argv++, NULL, 10);
+
+ gboolean value = nm_platform_ip4_address_add (ifindex, address, 0, plen, lifetime, preferred, NULL);
+ return value;
+ } else
+ return FALSE;
+}
+
+static gboolean
+do_ip6_address_add (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ ip6_t address;
+ int plen;
+
+ if (ifindex && parse_ip6_address (*argv++, &address, &plen)) {
+ guint32 lifetime = strtol (*argv++, NULL, 10);
+ guint32 preferred = strtol (*argv++, NULL, 10);
+ guint flags = (*argv) ? rtnl_addr_str2flags (*argv++) : 0;
+
+ gboolean value = nm_platform_ip6_address_add (ifindex, address, in6addr_any, plen, lifetime, preferred, flags);
+ return value;
+ } else
+ return FALSE;
+}
+
+#define ADDR_CMD_FULL(v, cmdname, print) \
+ static gboolean \
+ do_##v##_address_##cmdname (char **argv) \
+ { \
+ int ifindex = parse_ifindex (*argv++); \
+ v##_t address; \
+ int plen; \
+ if (ifindex && parse_##v##_address (*argv++, &address, &plen)) { \
+ gboolean value = nm_platform_##v##_address_##cmdname (ifindex, address, plen); \
+ if (print) { \
+ print_boolean (value); \
+ return TRUE; \
+ } else \
+ return value; \
+ } else \
+ return FALSE; \
+ }
+#define ADDR_CMD(cmdname) ADDR_CMD_FULL (ip4, cmdname, FALSE) ADDR_CMD_FULL (ip6, cmdname, FALSE)
+#define ADDR_CMD_PRINT(cmdname) ADDR_CMD_FULL (ip4, cmdname, TRUE) ADDR_CMD_FULL (ip6, cmdname, TRUE)
+
+ADDR_CMD (delete)
+ADDR_CMD_PRINT (exists)
+
+static gboolean
+do_ip4_route_get_all (char **argv)
+{
+ int ifindex = parse_ifindex (argv[0]);
+ GArray *routes;
+ NMPlatformIP4Route *route;
+ char networkstr[INET_ADDRSTRLEN], gatewaystr[INET_ADDRSTRLEN];
+ int i;
+
+ if (ifindex) {
+ routes = nm_platform_ip4_route_get_all (ifindex, TRUE);
+ for (i = 0; i < routes->len; i++) {
+ route = &g_array_index (routes, NMPlatformIP4Route, i);
+ inet_ntop (AF_INET, &route->network, networkstr, sizeof (networkstr));
+ inet_ntop (AF_INET, &route->gateway, gatewaystr, sizeof (gatewaystr));
+ printf ("%s/%d via %s metric %d\n",
+ networkstr, route->plen, gatewaystr, route->metric);
+ }
+ g_array_unref (routes);
+ }
+
+ return !!ifindex;
+}
+
+static gboolean
+do_ip6_route_get_all (char **argv)
+{
+ int ifindex = parse_ifindex (argv[0]);
+ GArray *routes;
+ NMPlatformIP6Route *route;
+ char networkstr[INET6_ADDRSTRLEN], gatewaystr[INET6_ADDRSTRLEN];
+ int i;
+
+ if (ifindex) {
+ routes = nm_platform_ip6_route_get_all (ifindex, TRUE);
+ for (i = 0; i < routes->len; i++) {
+ route = &g_array_index (routes, NMPlatformIP6Route, i);
+ inet_ntop (AF_INET6, &route->network, networkstr, sizeof (networkstr));
+ inet_ntop (AF_INET6, &route->gateway, gatewaystr, sizeof (gatewaystr));
+ printf ("%s/%d via %s metric %d\n",
+ networkstr, route->plen, gatewaystr, route->metric);
+ }
+ g_array_unref (routes);
+ }
+
+ return !!ifindex;
+}
+
+static gboolean
+do_ip4_route_add (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ in_addr_t network, gateway;
+ int plen, metric, mss;
+
+ parse_ip4_address (*argv++, &network, &plen);
+ parse_ip4_address (*argv++, &gateway, NULL);
+ metric = strtol (*argv++, NULL, 10);
+ mss = strtol (*argv++, NULL, 10);
+
+ return nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER,
+ network, plen, gateway,
+ metric, mss);
+}
+
+static gboolean
+do_ip6_route_add (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ struct in6_addr network, gateway;
+ int plen, metric, mss;
+
+ parse_ip6_address (*argv++, &network, &plen);
+ parse_ip6_address (*argv++, &gateway, NULL);
+ metric = strtol (*argv++, NULL, 10);
+ mss = strtol (*argv++, NULL, 10);
+ return nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER,
+ network, plen, gateway,
+ metric, mss);
+}
+
+static gboolean
+do_ip4_route_delete (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ in_addr_t network;
+ int plen, metric;
+
+ parse_ip4_address (*argv++, &network, &plen);
+ metric = strtol (*argv++, NULL, 10);
+
+ return nm_platform_ip4_route_delete (ifindex, network, plen, metric);
+}
+
+static gboolean
+do_ip6_route_delete (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ struct in6_addr network;
+ int plen, metric;
+
+ parse_ip6_address (*argv++, &network, &plen);
+ metric = strtol (*argv++, NULL, 10);
+
+ return nm_platform_ip6_route_delete (ifindex, network, plen, metric);
+}
+
+static gboolean
+do_ip4_route_exists (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ in_addr_t network;
+ int plen, metric;
+
+ parse_ip4_address (*argv++, &network, &plen);
+ metric = strtol (*argv++, NULL, 10);
+
+ print_boolean (nm_platform_ip4_route_exists (ifindex, network, plen, metric));
+ return TRUE;
+}
+
+static gboolean
+do_ip6_route_exists (char **argv)
+{
+ int ifindex = parse_ifindex (*argv++);
+ struct in6_addr network;
+ int plen, metric;
+
+ parse_ip6_address (*argv++, &network, &plen);
+ metric = strtol (*argv++, NULL, 10);
+
+ print_boolean (nm_platform_ip6_route_exists (ifindex, network, plen, metric));
+ return TRUE;
+}
+
+typedef struct {
+ const char *name;
+ const char *help;
+ int (*handler) (char **argv);
+ int argc;
+ const char *arghelp;
+} command_t;
+
+static const command_t commands[] = {
+ { "sysctl-set", "get /proc/sys or /sys value", do_sysctl_set, 2, "<path> <value>" },
+ { "sysctl-get", "get /proc/sys or /sys value", do_sysctl_get, 1, "<value>" },
+ { "link-get-all", "print all links", do_link_get_all, 0, "" },
+ { "dummy-add", "add dummy interface", do_dummy_add, 1, "<ifname>" },
+ { "bridge-add", "add bridge interface", do_bridge_add, 1, "<ifname>" },
+ { "bond-add", "add bond interface", do_bond_add, 1, "<ifname>" },
+ { "team-add", "add team interface", do_team_add, 1, "<ifname>" },
+ { "vlan-add", "add vlan interface", do_vlan_add, 4, "<ifname> <parent> <vlanid> <vlanflags>" },
+ { "link-exists", "check ifname for existance", do_link_exists, 1, "<ifname>" },
+ { "link-delete", "delete interface", do_link_delete, 1, "<ifname/ifindex>" },
+ { "link-get-ifindex>", "get interface index", do_link_get_ifindex, 1, "<ifname>" },
+ { "link-get-name", "get interface name", do_link_get_name, 1, "<ifindex>" },
+ { "link-get-type", "get interface type", do_link_get_type, 1, "<ifname/ifindex>" },
+ { "link-is-software", "check if interface is a software one", do_link_is_software, 1, "<ifname/ifindex>" },
+ { "link-supports-slaves", "check if interface supports slaves", do_link_supports_slaves, 1, "<ifname/ifindex>" },
+ { "link-set-up", "set interface up", do_link_set_up, 1, "<ifname/ifindex>" },
+ { "link-set-down", "set interface down", do_link_set_down, 1, "<ifname/ifindex>" },
+ { "link-set-arp", "activate interface arp", do_link_set_arp, 1, "<ifname/ifindex>" },
+ { "link-set-noarp", "deactivate interface arp", do_link_set_noarp, 1, "<ifname/ifindex>" },
+ { "link-is-up", "check if interface is up", do_link_is_up, 1, "<ifname/ifindex>" },
+ { "link-is-connected", "check interface carrier", do_link_is_connected, 1, "<ifname/ifindex>" },
+ { "link-uses-arp", "check whether interface uses arp", do_link_uses_arp, 1, "<ifname/ifindex>" },
+ { "link-get-address", "print link address", do_link_get_address, 1, "<ifname/ifindex>" },
+ { "link-set-address", "set link address", do_link_set_address, 2, "<ifname/ifindex> <hex>" },
+ { "link-get-mtu", "print link mtu", do_link_get_mtu, 1, "<ifname/ifindex>" },
+ { "link-set-mtu", "set link mtu", do_link_set_mtu, 2, "<ifname/ifindex> <mtu>" },
+ { "link-supports-carrier-detect", "check whether interface supports carrier detect",
+ do_link_supports_carrier_detect, 1, "<ifname/ifindex>" },
+ { "link-supports-vlans", "check whether interface supports VLANs",
+ do_link_supports_vlans, 1, "<ifname/ifindex>" },
+ { "link-enslave", "enslave slave interface with master", do_link_enslave, 2, "<master> <slave>" },
+ { "link-release", "release save interface from master", do_link_release, 2, "<master> <slave>" },
+ { "link-get-master", "print master interface of a slave", do_link_get_master, 1, "<ifname/ifindex>" },
+ { "link-master-set-option", "set master option", do_master_set_option, 3,
+ "<ifname/ifindex> <option> <value>" },
+ { "link-master-get-option", "get master option", do_master_get_option, 2,
+ "<ifname/ifindex> <option>" },
+ { "link-slave-set-option", "set slave option", do_slave_set_option, 3,
+ "<ifname/ifindex> <option>" },
+ { "link-slave-get-option", "get slave option", do_slave_get_option, 2,
+ "<ifname/ifindex> <option>" },
+ { "vlan-get-info", "get vlan info", do_vlan_get_info, 1, "<ifname/ifindex>" },
+ { "vlan-set-ingress-map", "set vlan ingress map", do_vlan_set_ingress_map, 3,
+ "<ifname/ifindex> <from> <to>" },
+ { "vlan-set-egress-map", "set vlan egress map", do_vlan_set_egress_map, 3,
+ "<ifname/ifindex> <from> <to>" },
+ { "veth-get-properties", "get veth properties", do_veth_get_properties, 1,
+ "<ifname/ifindex>" },
+ { "tun-get-properties", "get tun/tap properties", do_tun_get_properties, 1,
+ "<ifname/ifindex>" },
+ { "macvlan-get-properties", "get macvlan properties", do_macvlan_get_properties, 1,
+ "<ifname/ifindex>" },
+ { "vxlan-get-properties", "get vxlan properties", do_vxlan_get_properties, 1,
+ "<ifname/ifindex>" },
+ { "gre-get-properties", "get gre properties", do_gre_get_properties, 1,
+ "<ifname/ifindex>" },
+ { "ip4-address-get-all", "print all IPv4 addresses", do_ip4_address_get_all, 1, "<ifname/ifindex>" },
+ { "ip6-address-get-all", "print all IPv6 addresses", do_ip6_address_get_all, 1, "<ifname/ifindex>" },
+ { "ip4-address-add", "add IPv4 address", do_ip4_address_add, 4, "<ifname/ifindex> <address>/<plen> <lifetime> <>" },
+ { "ip6-address-add", "add IPv6 address", do_ip6_address_add, 4, "<ifname/ifindex> <address>/<plen> <lifetime> [<flags>] <>" },
+ { "ip4-address-delete", "delete IPv4 address", do_ip4_address_delete, 2,
+ "<ifname/ifindex> <address>/<plen>" },
+ { "ip6-address-delete", "delete IPv6 address", do_ip6_address_delete, 2,
+ "<ifname/ifindex> <address>/<plen>" },
+ { "ip4-address-exists", "check for existence of IPv4 address", do_ip4_address_exists, 2,
+ "<ifname/ifindex> <address>/<plen>" },
+ { "ip6-address-exists", "check for existence of IPv6 address", do_ip6_address_exists, 2,
+ "<ifname/ifindex> <address>/<plen>" },
+ { "ip4-route-get-all", "print all IPv4 routes", do_ip4_route_get_all, 1, "<ifname/ifindex>" },
+ { "ip6-route-get-all", "print all IPv6 routes", do_ip6_route_get_all, 1, "<ifname/ifindex>" },
+ { "ip4-route-add", "add IPv4 route", do_ip4_route_add, 5,
+ "<ifname/ifindex> <network>/<plen> <gateway> <metric> <mss>" },
+ { "ip6-route-add", "add IPv6 route", do_ip6_route_add, 5,
+ "<ifname/ifindex> <network>/<plen> <gateway> <metric> <mss>" },
+ { "ip4-route-delete", "delete IPv4 route", do_ip4_route_delete, 3,
+ "<ifname/ifindex> <network>/<plen> <metric>" },
+ { "ip6-route-delete", "delete IPv6 route", do_ip6_route_delete, 3,
+ "<ifname/ifindex> <network>/<plen> <metric>" },
+ { "ip4-route-exists", "check for existence of IPv4 route", do_ip4_route_exists, 3,
+ "<ifname/ifindex> <network>/<plen> <metric>" },
+ { "ip6-route-exists", "check for existence of IPv6 route", do_ip6_route_exists, 3,
+ "<ifname/ifindex> <network>/<plen> <metric>" },
+ { NULL, NULL, NULL, 0, NULL },
+};
+
+int
+main (int argc, char **argv)
+{
+ const char *arg0 = *argv++;
+ const command_t *command = NULL;
+ gboolean status = TRUE;
+ int error;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ if (*argv && !g_strcmp0 (argv[1], "--fake")) {
+ nm_fake_platform_setup ();
+ } else
+ nm_linux_platform_setup ();
+
+ if (*argv)
+ for (command = commands; command->name; command++)
+ if (g_str_has_prefix (command->name, *argv))
+ break;
+
+ if (command && command->name) {
+ argv++;
+ if (g_strv_length (argv) == command->argc)
+ status = command->handler (argv);
+ else {
+ error ("Wrong number of arguments to '%s' (expected %d).\n\nUsage: %s %s %s\n-- %s\n",
+ command->name, command->argc,
+ arg0, command->name, command->arghelp, command->help);
+ return EXIT_FAILURE;
+ }
+ } else {
+ error ("Usage: %s COMMAND\n\n", arg0);
+ error ("COMMAND\n");
+ for (command = commands; command->name; command++)
+ error (" %s %s\n -- %s\n", command->name, command->arghelp, command->help);
+ error ("\n");
+ }
+
+ error = nm_platform_get_error ();
+ if (error) {
+ const char *msg = nm_platform_get_error_msg ();
+
+ error ("nm-platform: %s\n", msg);
+ }
+
+ return !!error;
+}
diff --git a/src/platform/tests/test-address.c b/src/platform/tests/test-address.c
new file mode 100644
index 000000000..3fef53752
--- /dev/null
+++ b/src/platform/tests/test-address.c
@@ -0,0 +1,265 @@
+#include "test-common.h"
+
+#define DEVICE_NAME "nm-test-device"
+#define IP4_ADDRESS "192.0.2.1"
+#define IP4_PLEN 24
+#define IP6_ADDRESS "2001:db8:a:b:1:2:3:4"
+#define IP6_PLEN 64
+
+static void
+ip4_address_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Address *received, NMPlatformSignalChangeType change_type, NMPlatformReason reason, SignalData *data)
+{
+ g_assert (received);
+ g_assert_cmpint (received->ifindex, ==, ifindex);
+ g_assert (data && data->name);
+ g_assert_cmpstr (data->name, ==, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED);
+
+ if (data->ifindex && data->ifindex != received->ifindex)
+ return;
+ if (data->change_type != change_type)
+ return;
+
+ if (data->loop)
+ g_main_loop_quit (data->loop);
+
+ if (data->received)
+ g_error ("Received signal '%s' a second time.", data->name);
+
+ data->received = TRUE;
+}
+
+static void
+ip6_address_callback (NMPlatform *platform, int ifindex, NMPlatformIP6Address *received, NMPlatformSignalChangeType change_type, NMPlatformReason reason, SignalData *data)
+{
+ g_assert (received);
+ g_assert_cmpint (received->ifindex, ==, ifindex);
+ g_assert (data && data->name);
+ g_assert_cmpstr (data->name, ==, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED);
+
+ if (data->ifindex && data->ifindex != received->ifindex)
+ return;
+ if (data->change_type != change_type)
+ return;
+
+ if (data->loop)
+ g_main_loop_quit (data->loop);
+
+ if (data->received)
+ g_error ("Received signal '%s' a second time.", data->name);
+
+ data->received = TRUE;
+}
+
+static void
+test_ip4_address (void)
+{
+ int ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ SignalData *address_added = add_signal_ifindex (NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_ADDED, ip4_address_callback, ifindex);
+ SignalData *address_changed = add_signal_ifindex (NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, ip4_address_callback, ifindex);
+ SignalData *address_removed = add_signal_ifindex (NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, ip4_address_callback, ifindex);
+ GArray *addresses;
+ NMPlatformIP4Address *address;
+ in_addr_t addr;
+ guint32 lifetime = 2000;
+ guint32 preferred = 1000;
+
+ inet_pton (AF_INET, IP4_ADDRESS, &addr);
+
+ /* Add address */
+ g_assert (!nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
+ no_error ();
+ g_assert (nm_platform_ip4_address_add (ifindex, addr, 0, IP4_PLEN, lifetime, preferred, NULL));
+ no_error ();
+ g_assert (nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
+ no_error ();
+ accept_signal (address_added);
+
+ /* Add address again (aka update) */
+ g_assert (nm_platform_ip4_address_add (ifindex, addr, 0, IP4_PLEN, lifetime, preferred, NULL));
+ no_error ();
+ accept_signal (address_changed);
+
+ /* Test address listing */
+ addresses = nm_platform_ip4_address_get_all (ifindex);
+ g_assert (addresses);
+ no_error ();
+ g_assert_cmpint (addresses->len, ==, 1);
+ address = &g_array_index (addresses, NMPlatformIP4Address, 0);
+ g_assert_cmpint (address->ifindex, ==, ifindex);
+ g_assert_cmphex (address->address, ==, addr);
+ g_assert_cmpint (address->plen, ==, IP4_PLEN);
+ g_array_unref (addresses);
+
+ /* Remove address */
+ g_assert (nm_platform_ip4_address_delete (ifindex, addr, IP4_PLEN));
+ no_error ();
+ g_assert (!nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
+ accept_signal (address_removed);
+
+ /* Remove address again */
+ g_assert (nm_platform_ip4_address_delete (ifindex, addr, IP4_PLEN));
+ no_error ();
+
+ free_signal (address_added);
+ free_signal (address_changed);
+ free_signal (address_removed);
+}
+
+static void
+test_ip6_address (void)
+{
+ int ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ SignalData *address_added = add_signal_ifindex (NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_ADDED, ip6_address_callback, ifindex);
+ SignalData *address_changed = add_signal_ifindex (NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, ip6_address_callback, ifindex);
+ SignalData *address_removed = add_signal_ifindex (NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, ip6_address_callback, ifindex);
+ GArray *addresses;
+ NMPlatformIP6Address *address;
+ struct in6_addr addr;
+ guint32 lifetime = 2000;
+ guint32 preferred = 1000;
+ guint flags = 0;
+
+ inet_pton (AF_INET6, IP6_ADDRESS, &addr);
+
+ /* Add address */
+ g_assert (!nm_platform_ip6_address_exists (ifindex, addr, IP6_PLEN));
+ no_error ();
+ g_assert (nm_platform_ip6_address_add (ifindex, addr, in6addr_any, IP6_PLEN, lifetime, preferred, flags));
+ no_error ();
+ g_assert (nm_platform_ip6_address_exists (ifindex, addr, IP6_PLEN));
+ no_error ();
+ accept_signal (address_added);
+
+ /* Add address again (aka update) */
+ g_assert (nm_platform_ip6_address_add (ifindex, addr, in6addr_any, IP6_PLEN, lifetime, preferred, flags));
+ no_error ();
+ accept_signal (address_changed);
+
+ /* Test address listing */
+ addresses = nm_platform_ip6_address_get_all (ifindex);
+ g_assert (addresses);
+ no_error ();
+ g_assert_cmpint (addresses->len, ==, 1);
+ address = &g_array_index (addresses, NMPlatformIP6Address, 0);
+ g_assert_cmpint (address->ifindex, ==, ifindex);
+ g_assert (!memcmp (&address->address, &addr, sizeof (addr)));
+ g_assert_cmpint (address->plen, ==, IP6_PLEN);
+ g_array_unref (addresses);
+
+ /* Remove address */
+ g_assert (nm_platform_ip6_address_delete (ifindex, addr, IP6_PLEN));
+ no_error ();
+ g_assert (!nm_platform_ip6_address_exists (ifindex, addr, IP6_PLEN));
+ accept_signal (address_removed);
+
+ /* Remove address again */
+ g_assert (nm_platform_ip6_address_delete (ifindex, addr, IP6_PLEN));
+ no_error ();
+
+ free_signal (address_added);
+ free_signal (address_changed);
+ free_signal (address_removed);
+}
+
+static void
+test_ip4_address_external (void)
+{
+ SignalData *address_added = add_signal (NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_ADDED, ip4_address_callback);
+ SignalData *address_removed = add_signal (NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, ip4_address_callback);
+ int ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ in_addr_t addr;
+ guint32 lifetime = 2000;
+ guint32 preferred = 1000;
+
+ inet_pton (AF_INET, IP4_ADDRESS, &addr);
+ g_assert (ifindex > 0);
+
+ /* Looks like addresses are not announced by kerenl when the interface
+ * is down. Link-local IPv6 address is automatically added.
+ */
+ g_assert (nm_platform_link_set_up (nm_platform_link_get_ifindex (DEVICE_NAME)));
+
+ /* Add/delete notification */
+ run_command ("ip address add %s/%d dev %s valid_lft %d preferred_lft %d",
+ IP4_ADDRESS, IP4_PLEN, DEVICE_NAME, lifetime, preferred);
+ wait_signal (address_added);
+ g_assert (nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
+ run_command ("ip address delete %s/%d dev %s", IP4_ADDRESS, IP4_PLEN, DEVICE_NAME);
+ wait_signal (address_removed);
+ g_assert (!nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
+
+ /* Add/delete conflict */
+ run_command ("ip address add %s/%d dev %s valid_lft %d preferred_lft %d",
+ IP4_ADDRESS, IP4_PLEN, DEVICE_NAME, lifetime, preferred);
+ g_assert (nm_platform_ip4_address_add (ifindex, addr, 0, IP4_PLEN, lifetime, preferred, NULL));
+ no_error ();
+ g_assert (nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
+ accept_signal (address_added);
+ /*run_command ("ip address delete %s/%d dev %s", IP4_ADDRESS, IP4_PLEN, DEVICE_NAME);
+ g_assert (nm_platform_ip4_address_delete (ifindex, addr, IP4_PLEN));
+ no_error ();
+ g_assert (!nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
+ accept_signal (address_removed);*/
+
+ free_signal (address_added);
+ free_signal (address_removed);
+}
+
+static void
+test_ip6_address_external (void)
+{
+ SignalData *address_added = add_signal (NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_ADDED, ip6_address_callback);
+ SignalData *address_removed = add_signal (NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, ip6_address_callback);
+ int ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ struct in6_addr addr;
+ guint32 lifetime = 2000;
+ guint32 preferred = 1000;
+ guint flags = 0;
+
+ inet_pton (AF_INET6, IP6_ADDRESS, &addr);
+
+ /* Add/delete notification */
+ run_command ("ip address add %s/%d dev %s valid_lft %d preferred_lft %d",
+ IP6_ADDRESS, IP6_PLEN, DEVICE_NAME, lifetime, preferred);
+ wait_signal (address_added);
+ g_assert (nm_platform_ip6_address_exists (ifindex, addr, IP6_PLEN));
+ run_command ("ip address delete %s/%d dev %s", IP6_ADDRESS, IP6_PLEN, DEVICE_NAME);
+ wait_signal (address_removed);
+ g_assert (!nm_platform_ip6_address_exists (ifindex, addr, IP6_PLEN));
+
+ /* Add/delete conflict */
+ run_command ("ip address add %s/%d dev %s valid_lft %d preferred_lft %d",
+ IP6_ADDRESS, IP6_PLEN, DEVICE_NAME, lifetime, preferred);
+ g_assert (nm_platform_ip6_address_add (ifindex, addr, in6addr_any, IP6_PLEN, lifetime, preferred, flags));
+ no_error ();
+ g_assert (nm_platform_ip6_address_exists (ifindex, addr, IP6_PLEN));
+ accept_signal (address_added);
+ /*run_command ("ip address delete %s/%d dev %s", IP6_ADDRESS, IP6_PLEN, DEVICE_NAME);
+ g_assert (nm_platform_ip6_address_delete (ifindex, addr, IP6_PLEN));
+ no_error ();
+ g_assert (!nm_platform_ip6_address_exists (ifindex, addr, IP6_PLEN));
+ wait_signal (address_removed);*/
+
+ free_signal (address_added);
+ free_signal (address_removed);
+}
+
+void
+setup_tests (void)
+{
+ SignalData *link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, DEVICE_NAME);
+
+ nm_platform_link_delete (nm_platform_link_get_ifindex (DEVICE_NAME));
+ g_assert (!nm_platform_link_exists (DEVICE_NAME));
+ g_assert (nm_platform_dummy_add (DEVICE_NAME));
+ accept_signal (link_added);
+ free_signal (link_added);
+
+ g_test_add_func ("/address/internal/ip4", test_ip4_address);
+ g_test_add_func ("/address/internal/ip6", test_ip6_address);
+
+ if (strcmp (g_type_name (G_TYPE_FROM_INSTANCE (nm_platform_get ())), "NMFakePlatform")) {
+ g_test_add_func ("/address/external/ip4", test_ip4_address_external);
+ g_test_add_func ("/address/external/ip6", test_ip6_address_external);
+ }
+}
diff --git a/src/platform/tests/test-cleanup.c b/src/platform/tests/test-cleanup.c
new file mode 100644
index 000000000..e60d82f0e
--- /dev/null
+++ b/src/platform/tests/test-cleanup.c
@@ -0,0 +1,95 @@
+#include "test-common.h"
+
+#define DEVICE_NAME "nm-test-device"
+
+static void
+test_cleanup_internal ()
+{
+ SignalData *link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, DEVICE_NAME);
+ int ifindex;
+ GArray *addresses4;
+ GArray *addresses6;
+ GArray *routes4;
+ GArray *routes6;
+ in_addr_t addr4;
+ in_addr_t network4;
+ int plen4 = 24;
+ in_addr_t gateway4;
+ struct in6_addr addr6;
+ struct in6_addr network6;
+ int plen6 = 64;
+ struct in6_addr gateway6;
+ int lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
+ int preferred = NM_PLATFORM_LIFETIME_PERMANENT;
+ int metric = 20;
+ int mss = 1000;
+ guint flags = 0;
+
+ inet_pton (AF_INET, "192.0.2.1", &addr4);
+ inet_pton (AF_INET, "192.0.3.0", &network4);
+ inet_pton (AF_INET, "198.51.100.1", &gateway4);
+ inet_pton (AF_INET6, "2001:db8:a:b:1:2:3:4", &addr6);
+ inet_pton (AF_INET6, "2001:db8:c:d:0:0:0:0", &network6);
+ inet_pton (AF_INET6, "2001:db8:e:f:1:2:3:4", &gateway6);
+
+ /* Create and set up device */
+ g_assert (nm_platform_dummy_add (DEVICE_NAME));
+ accept_signal (link_added);
+ free_signal (link_added);
+ g_assert (nm_platform_link_set_up (nm_platform_link_get_ifindex (DEVICE_NAME)));
+ ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ g_assert (ifindex > 0);
+
+ /* Add routes and addresses */
+ g_assert (nm_platform_ip4_address_add (ifindex, addr4, 0, plen4, lifetime, preferred, NULL));
+ g_assert (nm_platform_ip6_address_add (ifindex, addr6, in6addr_any, plen6, lifetime, preferred, flags));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, gateway4, 32, INADDR_ANY, metric, mss));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, network4, plen4, gateway4, metric, mss));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, 0, 0, gateway4, metric, mss));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, gateway6, 128, in6addr_any, metric, mss));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, network6, plen6, gateway6, metric, mss));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, in6addr_any, 0, gateway6, metric, mss));
+
+ addresses4 = nm_platform_ip4_address_get_all (ifindex);
+ addresses6 = nm_platform_ip6_address_get_all (ifindex);
+ routes4 = nm_platform_ip4_route_get_all (ifindex, TRUE);
+ routes6 = nm_platform_ip6_route_get_all (ifindex, TRUE);
+
+ g_assert_cmpint (addresses4->len, ==, 1);
+ g_assert_cmpint (addresses6->len, ==, 1);
+ g_assert_cmpint (routes4->len, ==, 3);
+ g_assert_cmpint (routes6->len, ==, 3);
+
+ g_array_unref (addresses4);
+ g_array_unref (addresses6);
+ g_array_unref (routes4);
+ g_array_unref (routes6);
+
+ /* Delete interface with all addresses and routes */
+ g_assert (nm_platform_link_delete (ifindex));
+
+ addresses4 = nm_platform_ip4_address_get_all (ifindex);
+ addresses6 = nm_platform_ip6_address_get_all (ifindex);
+ routes4 = nm_platform_ip4_route_get_all (ifindex, TRUE);
+ routes6 = nm_platform_ip6_route_get_all (ifindex, TRUE);
+
+ g_assert_cmpint (addresses4->len, ==, 0);
+ g_assert_cmpint (addresses6->len, ==, 0);
+ g_assert_cmpint (routes4->len, ==, 0);
+ g_assert_cmpint (routes6->len, ==, 0);
+
+ g_array_unref (addresses4);
+ g_array_unref (addresses6);
+ g_array_unref (routes4);
+ g_array_unref (routes6);
+}
+
+void
+setup_tests (void)
+{
+ nm_platform_link_delete (nm_platform_link_get_ifindex (DEVICE_NAME));
+ g_assert (!nm_platform_link_exists (DEVICE_NAME));
+
+ g_test_add_func ("/internal", test_cleanup_internal);
+ /* FIXME: add external cleanup check */
+}
diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c
new file mode 100644
index 000000000..59a770c63
--- /dev/null
+++ b/src/platform/tests/test-common.c
@@ -0,0 +1,174 @@
+#include "test-common.h"
+
+#include "nm-test-utils.h"
+
+SignalData *
+add_signal_full (const char *name, NMPlatformSignalChangeType change_type, GCallback callback, int ifindex, const char *ifname)
+{
+ SignalData *data = g_new0 (SignalData, 1);
+
+ data->name = name;
+ data->change_type = change_type;
+ data->received = FALSE;
+ data->handler_id = g_signal_connect (nm_platform_get (), name, callback, data);
+ data->ifindex = ifindex;
+ data->ifname = ifname;
+
+ g_assert (data->handler_id >= 0);
+
+ return data;
+}
+
+static const char *
+_change_type_to_string (NMPlatformSignalChangeType change_type)
+{
+ switch (change_type) {
+ case NM_PLATFORM_SIGNAL_ADDED:
+ return "added";
+ case NM_PLATFORM_SIGNAL_CHANGED:
+ return "changed";
+ case NM_PLATFORM_SIGNAL_REMOVED:
+ return "removed";
+ default:
+ g_return_val_if_reached ("UNKNOWN");
+ }
+}
+
+void
+accept_signal (SignalData *data)
+{
+ debug ("Accepting signal '%s-%s' ifindex %d ifname %s.", data->name, _change_type_to_string (data->change_type), data->ifindex, data->ifname);
+ if (!data->received)
+ g_error ("Attemted to accept a non-received signal '%s-%s'.", data->name, _change_type_to_string (data->change_type));
+
+ data->received = FALSE;
+}
+
+void
+wait_signal (SignalData *data)
+{
+ if (data->received)
+ g_error ("Signal '%s' received before waiting for it.", data->name);
+
+ data->loop = g_main_loop_new (NULL, FALSE);
+ g_main_loop_run (data->loop);
+ g_clear_pointer (&data->loop, g_main_loop_unref);
+
+ accept_signal (data);
+}
+
+void
+free_signal (SignalData *data)
+{
+ if (data->received)
+ g_error ("Attempted to free received but not accepted signal '%s-%s'.", data->name, _change_type_to_string (data->change_type));
+
+ g_signal_handler_disconnect (nm_platform_get (), data->handler_id);
+ g_free (data);
+}
+
+void
+link_callback (NMPlatform *platform, int ifindex, NMPlatformLink *received, NMPlatformSignalChangeType change_type, NMPlatformReason reason, SignalData *data)
+{
+
+ GArray *links;
+ NMPlatformLink *cached;
+ int i;
+
+ g_assert (received);
+ g_assert_cmpint (received->ifindex, ==, ifindex);
+ g_assert (data && data->name);
+ g_assert_cmpstr (data->name, ==, NM_PLATFORM_SIGNAL_LINK_CHANGED);
+
+ if (data->ifindex && data->ifindex != received->ifindex)
+ return;
+ if (data->ifname && g_strcmp0 (data->ifname, nm_platform_link_get_name (ifindex)) != 0)
+ return;
+ if (change_type != data->change_type)
+ return;
+
+ if (data->loop) {
+ debug ("Quitting main loop.");
+ g_main_loop_quit (data->loop);
+ }
+
+ if (data->received)
+ g_error ("Received signal '%s-%s' a second time.", data->name, _change_type_to_string (data->change_type));
+
+ debug ("Received signal '%s-%s' ifindex %d ifname '%s'.", data->name, _change_type_to_string (data->change_type), ifindex, received->name);
+ data->received = TRUE;
+
+ if (change_type == NM_PLATFORM_SIGNAL_REMOVED)
+ g_assert (!nm_platform_link_get_name (ifindex));
+ else
+ g_assert (nm_platform_link_get_name (ifindex));
+
+ /* Check the data */
+ g_assert (received->ifindex > 0);
+ links = nm_platform_link_get_all ();
+ for (i = 0; i < links->len; i++) {
+ cached = &g_array_index (links, NMPlatformLink, i);
+ if (cached->ifindex == received->ifindex) {
+ g_assert_cmpint (nm_platform_link_cmp (cached, received), ==, 0);
+ g_assert (!memcmp (cached, received, sizeof (*cached)));
+ if (data->change_type == NM_PLATFORM_SIGNAL_REMOVED)
+ g_error ("Deleted link still found in the local cache.");
+ g_array_unref (links);
+ return;
+ }
+ }
+ g_array_unref (links);
+
+ if (data->change_type != NM_PLATFORM_SIGNAL_REMOVED)
+ g_error ("Added/changed link not found in the local cache.");
+}
+
+void
+run_command (const char *format, ...)
+{
+ char *command;
+ va_list ap;
+
+ va_start (ap, format);
+ command = g_strdup_vprintf (format, ap);
+ va_end (ap);
+ debug ("Running command: %s", command);
+ g_assert (!system (command));
+ debug ("Command finished.");
+ g_free (command);
+}
+
+NMTST_DEFINE();
+
+int
+main (int argc, char **argv)
+{
+ int result;
+ const char *program = *argv;
+
+ nmtst_init_with_logging (&argc, &argv, NULL, "ALL");
+
+ if (SETUP == nm_linux_platform_setup && getuid() != 0) {
+ /* Try to exec as sudo, this function does not return, if a sudo-cmd is set. */
+ nmtst_reexec_sudo ();
+
+#ifdef REQUIRE_ROOT_TESTS
+ g_message ("Fail test: requires root privileges (%s)", program);
+ return EXIT_FAILURE;
+#else
+ g_message ("Skipping test: requires root privileges (%s)", program);
+ return 77;
+#endif
+ }
+
+ SETUP ();
+
+ setup_tests ();
+
+ result = g_test_run ();
+
+ nm_platform_link_delete (nm_platform_link_get_ifindex (DEVICE_NAME));
+
+ nm_platform_free ();
+ return result;
+}
diff --git a/src/platform/tests/test-common.h b/src/platform/tests/test-common.h
new file mode 100644
index 000000000..8f6b39126
--- /dev/null
+++ b/src/platform/tests/test-common.h
@@ -0,0 +1,42 @@
+#include <stdlib.h>
+#include <unistd.h>
+#include <syslog.h>
+#include <string.h>
+#include <arpa/inet.h>
+
+#include "nm-logging.h"
+#include "nm-platform.h"
+#include "nm-fake-platform.h"
+#include "nm-linux-platform.h"
+
+#define DEVICE_NAME "nm-test-device"
+
+#define debug(...) nm_log_dbg (LOGD_PLATFORM, __VA_ARGS__)
+
+#define error(err) g_assert (nm_platform_get_error () == err)
+#define no_error() error (NM_PLATFORM_ERROR_NONE)
+
+typedef struct {
+ int handler_id;
+ const char *name;
+ NMPlatformSignalChangeType change_type;
+ gboolean received;
+ GMainLoop *loop;
+ int ifindex;
+ const char *ifname;
+} SignalData;
+
+SignalData *add_signal_full (const char *name, NMPlatformSignalChangeType change_type, GCallback callback, int ifindex, const char *ifname);
+#define add_signal(name, change_type, callback) add_signal_full (name, change_type, (GCallback) callback, 0, NULL)
+#define add_signal_ifindex(name, change_type, callback, ifindex) add_signal_full (name, change_type, (GCallback) callback, ifindex, NULL)
+#define add_signal_ifname(name, change_type, callback, ifname) add_signal_full (name, change_type, (GCallback) callback, 0, ifname)
+void accept_signal (SignalData *data);
+void wait_signal (SignalData *data);
+void free_signal (SignalData *data);
+
+void link_callback (NMPlatform *platform, int ifindex, NMPlatformLink *received, NMPlatformSignalChangeType change_type, NMPlatformReason reason, SignalData *data);
+
+void run_command (const char *format, ...);
+
+void setup_tests (void);
+
diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c
new file mode 100644
index 000000000..a3f757c2e
--- /dev/null
+++ b/src/platform/tests/test-link.c
@@ -0,0 +1,557 @@
+#include "test-common.h"
+#include "nm-test-utils.h"
+
+#define LO_INDEX 1
+#define LO_NAME "lo"
+#define LO_TYPEDESC "loopback"
+
+#define DUMMY_TYPEDESC "dummy"
+#define BOGUS_NAME "nm-bogus-device"
+#define BOGUS_IFINDEX INT_MAX
+#define SLAVE_NAME "nm-test-slave"
+#define PARENT_NAME "nm-test-parent"
+#define VLAN_ID 4077
+#define VLAN_FLAGS 0
+#define MTU 1357
+
+static void
+test_bogus(void)
+{
+ size_t addrlen;
+
+ g_assert (!nm_platform_link_exists (BOGUS_NAME));
+ no_error ();
+ g_assert (!nm_platform_link_delete (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_get_ifindex (BOGUS_NAME));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_get_name (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_get_type (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_get_type_name (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+
+ g_assert (!nm_platform_link_set_up (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_set_down (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_set_arp (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_set_noarp (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_is_up (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_is_connected (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_uses_arp (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+
+ g_assert (!nm_platform_link_get_address (BOGUS_IFINDEX, &addrlen));
+ g_assert (!addrlen);
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_get_address (BOGUS_IFINDEX, NULL));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_set_mtu (BOGUS_IFINDEX, MTU));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_get_mtu (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+
+ g_assert (!nm_platform_link_supports_carrier_detect (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_supports_vlans (BOGUS_IFINDEX));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+
+ g_assert (!nm_platform_vlan_get_info (BOGUS_IFINDEX, NULL, NULL));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_vlan_set_ingress_map (BOGUS_IFINDEX, 0, 0));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_vlan_set_egress_map (BOGUS_IFINDEX, 0, 0));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+}
+
+static void
+test_loopback (void)
+{
+ g_assert (nm_platform_link_exists (LO_NAME));
+ g_assert_cmpint (nm_platform_link_get_type (LO_INDEX), ==, NM_LINK_TYPE_LOOPBACK);
+ g_assert_cmpint (nm_platform_link_get_ifindex (LO_NAME), ==, LO_INDEX);
+ g_assert_cmpstr (nm_platform_link_get_name (LO_INDEX), ==, LO_NAME);
+ g_assert_cmpstr (nm_platform_link_get_type_name (LO_INDEX), ==, LO_TYPEDESC);
+
+ g_assert (nm_platform_link_supports_carrier_detect (LO_INDEX));
+ g_assert (!nm_platform_link_supports_vlans (LO_INDEX));
+}
+
+static int
+software_add (NMLinkType link_type, const char *name)
+{
+ switch (link_type) {
+ case NM_LINK_TYPE_DUMMY:
+ return nm_platform_dummy_add (name);
+ case NM_LINK_TYPE_BRIDGE:
+ return nm_platform_bridge_add (name, NULL, 0);
+ case NM_LINK_TYPE_BOND:
+ {
+ gboolean bond0_exists = nm_platform_link_exists ("bond0");
+ gboolean result = nm_platform_bond_add (name);
+ NMPlatformError error = nm_platform_get_error ();
+
+ /* Check that bond0 is *not* automatically created. */
+ if (!bond0_exists)
+ g_assert (!nm_platform_link_exists ("bond0"));
+
+ nm_platform_set_error (error);
+ return result;
+ }
+ case NM_LINK_TYPE_TEAM:
+ return nm_platform_team_add (name);
+ case NM_LINK_TYPE_VLAN: {
+ SignalData *parent_added;
+ SignalData *parent_changed;
+
+ /* Don't call link_callback for the bridge interface */
+ parent_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, PARENT_NAME);
+ if (nm_platform_bridge_add (PARENT_NAME, NULL, 0))
+ accept_signal (parent_added);
+ free_signal (parent_added);
+
+ {
+ int parent_ifindex = nm_platform_link_get_ifindex (PARENT_NAME);
+
+ parent_changed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, link_callback, parent_ifindex);
+ g_assert (nm_platform_link_set_up (parent_ifindex));
+ accept_signal (parent_changed);
+ free_signal (parent_changed);
+
+ return nm_platform_vlan_add (name, parent_ifindex, VLAN_ID, 0);
+ }
+ }
+ default:
+ g_error ("Link type %d unhandled.", link_type);
+ }
+}
+
+static void
+test_slave (int master, int type, SignalData *master_changed)
+{
+ int ifindex;
+ SignalData *link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, SLAVE_NAME);
+ SignalData *link_changed, *link_removed;
+ char *value;
+
+ g_assert (software_add (type, SLAVE_NAME));
+ ifindex = nm_platform_link_get_ifindex (SLAVE_NAME);
+ g_assert (ifindex > 0);
+ link_changed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, link_callback, ifindex);
+ link_removed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, link_callback, ifindex);
+ accept_signal (link_added);
+
+ /* Set the slave up to see whether master's IFF_LOWER_UP is set correctly.
+ *
+ * See https://bugzilla.redhat.com/show_bug.cgi?id=910348
+ */
+ g_assert (nm_platform_link_set_down (ifindex));
+ g_assert (!nm_platform_link_is_up (ifindex));
+ accept_signal (link_changed);
+
+ /* Enslave */
+ link_changed->ifindex = ifindex;
+ g_assert (nm_platform_link_enslave (master, ifindex)); no_error ();
+ g_assert_cmpint (nm_platform_link_get_master (ifindex), ==, master); no_error ();
+ accept_signal (link_changed);
+ accept_signal (master_changed);
+
+ /* Set master up */
+ g_assert (nm_platform_link_set_up (master));
+ accept_signal (master_changed);
+
+ /* Master with a disconnected slave is disconnected
+ *
+ * For some reason, bonding and teaming slaves are automatically set up. We
+ * need to set them back down for this test.
+ */
+ switch (nm_platform_link_get_type (master)) {
+ case NM_LINK_TYPE_BOND:
+ case NM_LINK_TYPE_TEAM:
+ g_assert (nm_platform_link_set_down (ifindex));
+ accept_signal (link_changed);
+ accept_signal (master_changed);
+ break;
+ default:
+ break;
+ }
+ g_assert (!nm_platform_link_is_up (ifindex));
+ g_assert (!nm_platform_link_is_connected (ifindex));
+ if (nm_platform_link_is_connected (master)) {
+ if (nm_platform_link_get_type (master) == NM_LINK_TYPE_TEAM) {
+ /* Older team versions (e.g. Fedora 17) have a bug that team master stays
+ * IFF_LOWER_UP even if its slave is down. Double check it with iproute2 and if
+ * `ip link` also claims master to be up, accept it. */
+ char *stdout = NULL;
+
+ nmtst_spawn_sync (NULL, &stdout, NULL, 0, "/sbin/ip", "link", "show", "dev", nm_platform_link_get_name (master));
+
+ g_assert (strstr (stdout, "LOWER_UP"));
+ g_free (stdout);
+ } else
+ g_assert_not_reached ();
+ }
+
+ /* Set slave up and see if master gets up too */
+ g_assert (nm_platform_link_set_up (ifindex)); no_error ();
+ g_assert (nm_platform_link_is_connected (ifindex));
+ g_assert (nm_platform_link_is_connected (master));
+ accept_signal (link_changed);
+ accept_signal (master_changed);
+
+ /* Enslave again
+ *
+ * Gracefully succeed if already enslaved.
+ */
+ g_assert (nm_platform_link_enslave (master, ifindex)); no_error ();
+ accept_signal (link_changed);
+ accept_signal (master_changed);
+
+ /* Set slave option */
+ switch (type) {
+ case NM_LINK_TYPE_BRIDGE:
+ g_assert (nm_platform_slave_set_option (ifindex, "priority", "789"));
+ no_error ();
+ value = nm_platform_slave_get_option (ifindex, "priority");
+ no_error ();
+ g_assert_cmpstr (value, ==, "789");
+ g_free (value);
+ break;
+ default:
+ break;
+ }
+
+ /* Release */
+ g_assert (nm_platform_link_release (master, ifindex));
+ g_assert_cmpint (nm_platform_link_get_master (ifindex), ==, 0); no_error ();
+ accept_signal (link_changed);
+ accept_signal (master_changed);
+
+ /* Release again */
+ g_assert (!nm_platform_link_release (master, ifindex));
+ error (NM_PLATFORM_ERROR_NOT_SLAVE);
+
+ /* Remove */
+ g_assert (nm_platform_link_delete (ifindex));
+ no_error ();
+ accept_signal (link_removed);
+
+ free_signal (link_added);
+ free_signal (link_changed);
+ free_signal (link_removed);
+}
+
+static void
+test_software (NMLinkType link_type, const char *link_typename)
+{
+ int ifindex;
+ char *value;
+ int vlan_parent, vlan_id;
+
+ SignalData *link_added, *link_changed, *link_removed;
+
+ /* Add */
+ link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, DEVICE_NAME);
+ g_assert (software_add (link_type, DEVICE_NAME));
+ no_error ();
+ accept_signal (link_added);
+ g_assert (nm_platform_link_exists (DEVICE_NAME));
+ ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ g_assert (ifindex >= 0);
+ g_assert_cmpint (nm_platform_link_get_type (ifindex), ==, link_type);
+ g_assert_cmpstr (nm_platform_link_get_type_name (ifindex), ==, link_typename);
+ link_changed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, link_callback, ifindex);
+ link_removed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, link_callback, ifindex);
+ if (link_type == NM_LINK_TYPE_VLAN) {
+ g_assert (nm_platform_vlan_get_info (ifindex, &vlan_parent, &vlan_id));
+ g_assert_cmpint (vlan_parent, ==, nm_platform_link_get_ifindex (PARENT_NAME));
+ g_assert_cmpint (vlan_id, ==, VLAN_ID);
+ no_error ();
+ }
+
+ /* Add again */
+ g_assert (!software_add (link_type, DEVICE_NAME));
+ error (NM_PLATFORM_ERROR_EXISTS);
+
+ /* Set ARP/NOARP */
+ g_assert (nm_platform_link_uses_arp (ifindex));
+ g_assert (nm_platform_link_set_noarp (ifindex));
+ g_assert (!nm_platform_link_uses_arp (ifindex));
+ accept_signal (link_changed);
+ g_assert (nm_platform_link_set_arp (ifindex));
+ g_assert (nm_platform_link_uses_arp (ifindex));
+ accept_signal (link_changed);
+
+ /* Set master option */
+ switch (link_type) {
+ case NM_LINK_TYPE_BRIDGE:
+ g_assert (nm_platform_master_set_option (ifindex, "forward_delay", "789"));
+ no_error ();
+ value = nm_platform_master_get_option (ifindex, "forward_delay");
+ no_error ();
+ g_assert_cmpstr (value, ==, "789");
+ g_free (value);
+ break;
+ case NM_LINK_TYPE_BOND:
+ g_assert (nm_platform_master_set_option (ifindex, "mode", "active-backup"));
+ no_error ();
+ value = nm_platform_master_get_option (ifindex, "mode");
+ no_error ();
+ /* When reading back, the output looks slightly different. */
+ g_assert (g_str_has_prefix (value, "active-backup"));
+ g_free (value);
+ break;
+ default:
+ break;
+ }
+
+ /* Enslave and release */
+ switch (link_type) {
+ case NM_LINK_TYPE_BRIDGE:
+ case NM_LINK_TYPE_BOND:
+ case NM_LINK_TYPE_TEAM:
+ link_changed->ifindex = ifindex;
+ test_slave (ifindex, NM_LINK_TYPE_DUMMY, link_changed);
+ link_changed->ifindex = 0;
+ break;
+ default:
+ break;
+ }
+
+ /* Delete */
+ g_assert (nm_platform_link_delete (ifindex));
+ no_error ();
+ g_assert (!nm_platform_link_exists (DEVICE_NAME)); no_error ();
+ g_assert_cmpint (nm_platform_link_get_type (ifindex), ==, NM_LINK_TYPE_NONE);
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ g_assert (!nm_platform_link_get_type (ifindex));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+ accept_signal (link_removed);
+
+ /* Delete again */
+ g_assert (!nm_platform_link_delete (nm_platform_link_get_ifindex (DEVICE_NAME)));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+
+ /* VLAN: Delete parent */
+ if (link_type == NM_LINK_TYPE_VLAN) {
+ SignalData *link_removed_parent = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, link_callback, vlan_parent);
+
+ g_assert (nm_platform_link_delete (vlan_parent));
+ accept_signal (link_removed_parent);
+ free_signal (link_removed_parent);
+ }
+
+ /* No pending signal */
+ free_signal (link_added);
+ free_signal (link_changed);
+ free_signal (link_removed);
+}
+
+static void
+test_bridge (void)
+{
+ test_software (NM_LINK_TYPE_BRIDGE, "bridge");
+}
+
+static void
+test_bond (void)
+{
+ if (SETUP == nm_linux_platform_setup &&
+ !g_file_test ("/proc/1/net/bonding", G_FILE_TEST_IS_DIR) &&
+ system("modprobe --show bonding") != 0) {
+ g_test_skip ("Skipping test for bonding: bonding module not available");
+ return;
+ }
+
+ test_software (NM_LINK_TYPE_BOND, "bond");
+}
+
+static void
+test_team (void)
+{
+ test_software (NM_LINK_TYPE_TEAM, "team");
+}
+
+static void
+test_vlan ()
+{
+ test_software (NM_LINK_TYPE_VLAN, "vlan");
+}
+
+static void
+test_internal (void)
+{
+ SignalData *link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, DEVICE_NAME);
+ SignalData *link_changed, *link_removed;
+ const char mac[6] = { 0x00, 0xff, 0x11, 0xee, 0x22, 0xdd };
+ const char *address;
+ size_t addrlen;
+ int ifindex;
+
+ /* Check the functions for non-existent devices */
+ g_assert (!nm_platform_link_exists (DEVICE_NAME)); no_error ();
+ g_assert (!nm_platform_link_get_ifindex (DEVICE_NAME));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+
+ /* Add device */
+ g_assert (nm_platform_dummy_add (DEVICE_NAME));
+ no_error ();
+ accept_signal (link_added);
+
+ /* Try to add again */
+ g_assert (!nm_platform_dummy_add (DEVICE_NAME));
+ error (NM_PLATFORM_ERROR_EXISTS);
+
+ /* Check device index, name and type */
+ ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ g_assert (ifindex > 0);
+ g_assert_cmpstr (nm_platform_link_get_name (ifindex), ==, DEVICE_NAME);
+ g_assert_cmpint (nm_platform_link_get_type (ifindex), ==, NM_LINK_TYPE_DUMMY);
+ g_assert_cmpstr (nm_platform_link_get_type_name (ifindex), ==, DUMMY_TYPEDESC);
+ link_changed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, link_callback, ifindex);
+ link_removed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, link_callback, ifindex);
+
+ /* Up/connected */
+ g_assert (!nm_platform_link_is_up (ifindex)); no_error ();
+ g_assert (!nm_platform_link_is_connected (ifindex)); no_error ();
+ g_assert (nm_platform_link_set_up (ifindex)); no_error ();
+ g_assert (nm_platform_link_is_up (ifindex)); no_error ();
+ g_assert (nm_platform_link_is_connected (ifindex)); no_error ();
+ accept_signal (link_changed);
+ g_assert (nm_platform_link_set_down (ifindex)); no_error ();
+ g_assert (!nm_platform_link_is_up (ifindex)); no_error ();
+ g_assert (!nm_platform_link_is_connected (ifindex)); no_error ();
+ accept_signal (link_changed);
+
+ /* arp/noarp */
+ g_assert (!nm_platform_link_uses_arp (ifindex));
+ g_assert (nm_platform_link_set_arp (ifindex));
+ g_assert (nm_platform_link_uses_arp (ifindex));
+ accept_signal (link_changed);
+ g_assert (nm_platform_link_set_noarp (ifindex));
+ g_assert (!nm_platform_link_uses_arp (ifindex));
+ accept_signal (link_changed);
+
+ /* Features */
+ g_assert (!nm_platform_link_supports_carrier_detect (ifindex));
+ g_assert (nm_platform_link_supports_vlans (ifindex));
+
+ /* Set MAC address */
+ g_assert (nm_platform_link_set_address (ifindex, mac, sizeof (mac)));
+ address = nm_platform_link_get_address (ifindex, &addrlen);
+ g_assert (addrlen == sizeof(mac));
+ g_assert (!memcmp (address, mac, addrlen));
+ address = nm_platform_link_get_address (ifindex, NULL);
+ g_assert (!memcmp (address, mac, addrlen));
+ accept_signal (link_changed);
+
+ /* Set MTU */
+ g_assert (nm_platform_link_set_mtu (ifindex, MTU));
+ no_error ();
+ g_assert_cmpint (nm_platform_link_get_mtu (ifindex), ==, MTU);
+ accept_signal (link_changed);
+
+ /* Delete device */
+ g_assert (nm_platform_link_delete (ifindex));
+ no_error ();
+ accept_signal (link_removed);
+
+ /* Try to delete again */
+ g_assert (!nm_platform_link_delete (ifindex));
+ error (NM_PLATFORM_ERROR_NOT_FOUND);
+
+ free_signal (link_added);
+ free_signal (link_changed);
+ free_signal (link_removed);
+}
+
+static void
+test_external (void)
+{
+ NMPlatformLink link;
+ SignalData *link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, DEVICE_NAME);
+ SignalData *link_changed, *link_removed;
+ int ifindex;
+ gboolean success;
+
+ run_command ("ip link add %s type %s", DEVICE_NAME, "dummy");
+ wait_signal (link_added);
+ g_assert (nm_platform_link_exists (DEVICE_NAME));
+ ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ g_assert (ifindex > 0);
+ g_assert_cmpstr (nm_platform_link_get_name (ifindex), ==, DEVICE_NAME);
+ g_assert_cmpint (nm_platform_link_get_type (ifindex), ==, NM_LINK_TYPE_DUMMY);
+ g_assert_cmpstr (nm_platform_link_get_type_name (ifindex), ==, DUMMY_TYPEDESC);
+ link_changed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, link_callback, ifindex);
+ link_removed = add_signal_ifindex (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, link_callback, ifindex);
+
+ success = nm_platform_link_get (ifindex, &link);
+ g_assert (success);
+ if (!link.driver) {
+ /* we still lack the notification via UDEV. Expect another link changed signal. */
+ wait_signal (link_changed);
+ }
+
+ /* Up/connected/arp */
+ g_assert (!nm_platform_link_is_up (ifindex));
+ g_assert (!nm_platform_link_is_connected (ifindex));
+ g_assert (!nm_platform_link_uses_arp (ifindex));
+ run_command ("ip link set %s up", DEVICE_NAME);
+ wait_signal (link_changed);
+ g_assert (nm_platform_link_is_up (ifindex));
+ g_assert (nm_platform_link_is_connected (ifindex));
+ run_command ("ip link set %s down", DEVICE_NAME);
+ wait_signal (link_changed);
+ g_assert (!nm_platform_link_is_up (ifindex));
+ g_assert (!nm_platform_link_is_connected (ifindex));
+ /* This test doesn't trigger a netlink event at least on
+ * 3.8.2-206.fc18.x86_64. Disabling the waiting and checking code
+ * because of that.
+ */
+ run_command ("ip link set %s arp on", DEVICE_NAME);
+#if 0
+ wait_signal (link_changed);
+ g_assert (nm_platform_link_uses_arp (ifindex));
+#endif
+ run_command ("ip link set %s arp off", DEVICE_NAME);
+#if 0
+ wait_signal (link_changed);
+ g_assert (!nm_platform_link_uses_arp (ifindex));
+#endif
+
+ run_command ("ip link del %s", DEVICE_NAME);
+ wait_signal (link_removed);
+ g_assert (!nm_platform_link_exists (DEVICE_NAME));
+
+ free_signal (link_added);
+ free_signal (link_changed);
+ free_signal (link_removed);
+}
+
+void
+setup_tests (void)
+{
+ nm_platform_link_delete (nm_platform_link_get_ifindex (DEVICE_NAME));
+ nm_platform_link_delete (nm_platform_link_get_ifindex (SLAVE_NAME));
+ nm_platform_link_delete (nm_platform_link_get_ifindex (PARENT_NAME));
+ g_assert (!nm_platform_link_exists (DEVICE_NAME));
+ g_assert (!nm_platform_link_exists (SLAVE_NAME));
+ g_assert (!nm_platform_link_exists (PARENT_NAME));
+
+ g_test_add_func ("/link/bogus", test_bogus);
+ g_test_add_func ("/link/loopback", test_loopback);
+ g_test_add_func ("/link/internal", test_internal);
+ g_test_add_func ("/link/software/bridge", test_bridge);
+ g_test_add_func ("/link/software/bond", test_bond);
+ g_test_add_func ("/link/software/team", test_team);
+ g_test_add_func ("/link/software/vlan", test_vlan);
+
+ if (strcmp (g_type_name (G_TYPE_FROM_INSTANCE (nm_platform_get ())), "NMFakePlatform"))
+ g_test_add_func ("/link/external", test_external);
+}
diff --git a/src/platform/tests/test-route.c b/src/platform/tests/test-route.c
new file mode 100644
index 000000000..d45730ac5
--- /dev/null
+++ b/src/platform/tests/test-route.c
@@ -0,0 +1,255 @@
+#include "test-common.h"
+#include "nm-test-utils.h"
+
+#define DEVICE_NAME "nm-test-device"
+
+static void
+ip4_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Route *received, NMPlatformSignalChangeType change_type, NMPlatformReason reason, SignalData *data)
+{
+ g_assert (received);
+ g_assert_cmpint (received->ifindex, ==, ifindex);
+ g_assert (data && data->name);
+ g_assert_cmpstr (data->name, ==, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED);
+
+ if (data->ifindex && data->ifindex != received->ifindex)
+ return;
+ if (data->change_type != change_type)
+ return;
+
+ if (data->loop)
+ g_main_loop_quit (data->loop);
+
+ if (data->received)
+ g_error ("Received signal '%s' a second time.", data->name);
+
+ data->received = TRUE;
+}
+
+static void
+ip6_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP6Route *received, NMPlatformSignalChangeType change_type, NMPlatformReason reason, SignalData *data)
+{
+ g_assert (received);
+ g_assert_cmpint (received->ifindex, ==, ifindex);
+ g_assert (data && data->name);
+ g_assert_cmpstr (data->name, ==, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED);
+
+ if (data->ifindex && data->ifindex != received->ifindex)
+ return;
+ if (data->change_type != change_type)
+ return;
+
+ if (data->loop)
+ g_main_loop_quit (data->loop);
+
+ if (data->received)
+ g_error ("Received signal '%s' a second time.", data->name);
+
+ data->received = TRUE;
+}
+
+static void
+test_ip4_route ()
+{
+ int ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ SignalData *route_added = add_signal (NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, NM_PLATFORM_SIGNAL_ADDED, ip4_route_callback);
+ SignalData *route_changed = add_signal (NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, ip4_route_callback);
+ SignalData *route_removed = add_signal (NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, ip4_route_callback);
+ GArray *routes;
+ NMPlatformIP4Route rts[3];
+ in_addr_t network;
+ int plen = 24;
+ in_addr_t gateway;
+ int metric = 20;
+ int mss = 1000;
+
+ inet_pton (AF_INET, "192.0.3.0", &network);
+ inet_pton (AF_INET, "198.51.100.1", &gateway);
+
+ /* Add route to gateway */
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, gateway, 32, INADDR_ANY, metric, mss));
+ no_error ();
+ accept_signal (route_added);
+
+ /* Add route */
+ g_assert (!nm_platform_ip4_route_exists (ifindex, network, plen, metric));
+ no_error ();
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, network, plen, gateway, metric, mss));
+ no_error ();
+ g_assert (nm_platform_ip4_route_exists (ifindex, network, plen, metric));
+ no_error ();
+ accept_signal (route_added);
+
+ /* Add route again */
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, network, plen, gateway, metric, mss));
+ no_error ();
+ accept_signal (route_changed);
+
+ /* Add default route */
+ g_assert (!nm_platform_ip4_route_exists (ifindex, 0, 0, metric));
+ no_error ();
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, 0, 0, gateway, metric, mss));
+ no_error ();
+ g_assert (nm_platform_ip4_route_exists (ifindex, 0, 0, metric));
+ no_error ();
+ accept_signal (route_added);
+
+ /* Add default route again */
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER, 0, 0, gateway, metric, mss));
+ no_error ();
+ accept_signal (route_changed);
+
+ /* Test route listing */
+ routes = nm_platform_ip4_route_get_all (ifindex, TRUE);
+ memset (rts, 0, sizeof (rts));
+ rts[0].source = NM_PLATFORM_SOURCE_USER;
+ rts[0].network = gateway;
+ rts[0].plen = 32;
+ rts[0].ifindex = ifindex;
+ rts[0].gateway = INADDR_ANY;
+ rts[0].metric = metric;
+ rts[0].mss = mss;
+ rts[1].source = NM_PLATFORM_SOURCE_USER;
+ rts[1].network = network;
+ rts[1].plen = plen;
+ rts[1].ifindex = ifindex;
+ rts[1].gateway = gateway;
+ rts[1].metric = metric;
+ rts[1].mss = mss;
+ rts[2].source = NM_PLATFORM_SOURCE_USER;
+ rts[2].network = 0;
+ rts[2].plen = 0;
+ rts[2].ifindex = ifindex;
+ rts[2].gateway = gateway;
+ rts[2].metric = metric;
+ rts[2].mss = mss;
+ g_assert_cmpint (routes->len, ==, 3);
+ g_assert (!memcmp (routes->data, rts, sizeof (rts)));
+ nmtst_platform_ip4_routes_equal ((NMPlatformIP4Route *) routes->data, rts, routes->len);
+ g_array_unref (routes);
+
+ /* Remove route */
+ g_assert (nm_platform_ip4_route_delete (ifindex, network, plen, metric));
+ no_error ();
+ g_assert (!nm_platform_ip4_route_exists (ifindex, network, plen, metric));
+ accept_signal (route_removed);
+
+ /* Remove route again */
+ g_assert (nm_platform_ip4_route_delete (ifindex, network, plen, metric));
+ no_error ();
+
+ free_signal (route_added);
+ free_signal (route_changed);
+ free_signal (route_removed);
+}
+
+static void
+test_ip6_route ()
+{
+ int ifindex = nm_platform_link_get_ifindex (DEVICE_NAME);
+ SignalData *route_added = add_signal (NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, NM_PLATFORM_SIGNAL_ADDED, ip6_route_callback);
+ SignalData *route_changed = add_signal (NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, NM_PLATFORM_SIGNAL_CHANGED, ip6_route_callback);
+ SignalData *route_removed = add_signal (NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, NM_PLATFORM_SIGNAL_REMOVED, ip6_route_callback);
+ GArray *routes;
+ NMPlatformIP6Route rts[3];
+ struct in6_addr network;
+ int plen = 64;
+ struct in6_addr gateway;
+ int metric = 20;
+ int mss = 1000;
+
+ inet_pton (AF_INET6, "2001:db8:a:b:0:0:0:0", &network);
+ inet_pton (AF_INET6, "2001:db8:c:d:1:2:3:4", &gateway);
+
+ /* Add route to gateway */
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, gateway, 128, in6addr_any, metric, mss));
+ no_error ();
+ accept_signal (route_added);
+
+ /* Add route */
+ g_assert (!nm_platform_ip6_route_exists (ifindex, network, plen, metric));
+ no_error ();
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, network, plen, gateway, metric, mss));
+ no_error ();
+ g_assert (nm_platform_ip6_route_exists (ifindex, network, plen, metric));
+ no_error ();
+ accept_signal (route_added);
+
+ /* Add route again */
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, network, plen, gateway, metric, mss));
+ no_error ();
+ accept_signal (route_changed);
+
+ /* Add default route */
+ g_assert (!nm_platform_ip6_route_exists (ifindex, in6addr_any, 0, metric));
+ no_error ();
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, in6addr_any, 0, gateway, metric, mss));
+ no_error ();
+ g_assert (nm_platform_ip6_route_exists (ifindex, in6addr_any, 0, metric));
+ no_error ();
+ accept_signal (route_added);
+
+ /* Add default route again */
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_PLATFORM_SOURCE_USER, in6addr_any, 0, gateway, metric, mss));
+ no_error ();
+ accept_signal (route_changed);
+
+ /* Test route listing */
+ routes = nm_platform_ip6_route_get_all (ifindex, TRUE);
+ memset (rts, 0, sizeof (rts));
+ rts[0].source = NM_PLATFORM_SOURCE_USER;
+ rts[0].network = gateway;
+ rts[0].plen = 128;
+ rts[0].ifindex = ifindex;
+ rts[0].gateway = in6addr_any;
+ rts[0].metric = metric;
+ rts[0].mss = mss;
+ rts[1].source = NM_PLATFORM_SOURCE_USER;
+ rts[1].network = network;
+ rts[1].plen = plen;
+ rts[1].ifindex = ifindex;
+ rts[1].gateway = gateway;
+ rts[1].metric = metric;
+ rts[1].mss = mss;
+ rts[2].source = NM_PLATFORM_SOURCE_USER;
+ rts[2].network = in6addr_any;
+ rts[2].plen = 0;
+ rts[2].ifindex = ifindex;
+ rts[2].gateway = gateway;
+ rts[2].metric = metric;
+ rts[2].mss = mss;
+ g_assert_cmpint (routes->len, ==, 3);
+ g_assert (!memcmp (routes->data, rts, sizeof (rts)));
+ nmtst_platform_ip6_routes_equal ((NMPlatformIP6Route *) routes->data, rts, routes->len);
+ g_array_unref (routes);
+
+ /* Remove route */
+ g_assert (nm_platform_ip6_route_delete (ifindex, network, plen, metric));
+ no_error ();
+ g_assert (!nm_platform_ip6_route_exists (ifindex, network, plen, metric));
+ accept_signal (route_removed);
+
+ /* Remove route again */
+ g_assert (nm_platform_ip6_route_delete (ifindex, network, plen, metric));
+ no_error ();
+
+ free_signal (route_added);
+ free_signal (route_changed);
+ free_signal (route_removed);
+}
+
+void
+setup_tests (void)
+{
+ SignalData *link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, DEVICE_NAME);
+
+ nm_platform_link_delete (nm_platform_link_get_ifindex (DEVICE_NAME));
+ g_assert (!nm_platform_link_exists (DEVICE_NAME));
+ g_assert (nm_platform_dummy_add (DEVICE_NAME));
+ accept_signal (link_added);
+ free_signal (link_added);
+
+ g_assert (nm_platform_link_set_up (nm_platform_link_get_ifindex (DEVICE_NAME)));
+
+ g_test_add_func ("/route/ip4", test_ip4_route);
+ g_test_add_func ("/route/ip6", test_ip6_route);
+}
diff --git a/src/wifi/wifi-utils-nl80211.c b/src/platform/wifi/wifi-utils-nl80211.c
index 5f909c442..25ebd1b3c 100644
--- a/src/wifi/wifi-utils-nl80211.c
+++ b/src/platform/wifi/wifi-utils-nl80211.c
@@ -33,12 +33,12 @@
#include <netlink/genl/genl.h>
#include <netlink/genl/family.h>
#include <netlink/genl/ctrl.h>
-#include <netlink/route/link.h>
#include <linux/nl80211.h>
#include "wifi-utils-private.h"
#include "wifi-utils-nl80211.h"
+#include "nm-platform.h"
#include "nm-logging.h"
#include "nm-utils.h"
@@ -49,24 +49,27 @@ typedef struct {
struct nl_cb *nl_cb;
guint32 *freqs;
int num_freqs;
+ int phy;
} WifiDataNl80211;
-static int ack_handler (struct nl_msg *msg, void *arg)
+static int
+ack_handler (struct nl_msg *msg, void *arg)
{
int *done = arg;
*done = 1;
return NL_STOP;
}
-static int finish_handler (struct nl_msg *msg, void *arg)
+static int
+finish_handler (struct nl_msg *msg, void *arg)
{
int *done = arg;
*done = 1;
return NL_SKIP;
}
-static int error_handler (struct sockaddr_nl *nla, struct nlmsgerr *err,
- void *arg)
+static int
+error_handler (struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg)
{
int *done = arg;
*done = err->error;
@@ -74,7 +77,7 @@ static int error_handler (struct sockaddr_nl *nla, struct nlmsgerr *err,
}
static struct nl_msg *
-_nl80211_alloc_msg (int id, int ifindex, guint32 cmd, guint32 flags)
+_nl80211_alloc_msg (int id, int ifindex, int phy, guint32 cmd, guint32 flags)
{
struct nl_msg *msg;
@@ -82,6 +85,8 @@ _nl80211_alloc_msg (int id, int ifindex, guint32 cmd, guint32 flags)
if (msg) {
genlmsg_put (msg, 0, 0, id, 0, flags, cmd, 0);
NLA_PUT_U32 (msg, NL80211_ATTR_IFINDEX, ifindex);
+ if (phy != -1)
+ NLA_PUT_U32 (msg, NL80211_ATTR_WIPHY, phy);
}
return msg;
@@ -93,15 +98,15 @@ _nl80211_alloc_msg (int id, int ifindex, guint32 cmd, guint32 flags)
static struct nl_msg *
nl80211_alloc_msg (WifiDataNl80211 *nl80211, guint32 cmd, guint32 flags)
{
- return _nl80211_alloc_msg (nl80211->id, nl80211->parent.ifindex, cmd, flags);
+ return _nl80211_alloc_msg (nl80211->id, nl80211->parent.ifindex, nl80211->phy, cmd, flags);
}
/* NOTE: this function consumes 'msg' */
static int
-_nl80211_send_and_recv (struct nl_sock *nl_sock,
+_nl80211_send_and_recv (struct nl_sock *nl_sock,
struct nl_cb *nl_cb,
struct nl_msg *msg,
- int (*valid_handler)(struct nl_msg *, void *),
+ int (*valid_handler) (struct nl_msg *, void *),
void *valid_data)
{
struct nl_cb *cb;
@@ -158,10 +163,11 @@ _nl80211_send_and_recv (struct nl_sock *nl_sock,
static int
nl80211_send_and_recv (WifiDataNl80211 *nl80211,
struct nl_msg *msg,
- int (*valid_handler)(struct nl_msg *, void *),
+ int (*valid_handler) (struct nl_msg *, void *),
void *valid_data)
{
- return _nl80211_send_and_recv (nl80211->nl_sock, nl80211->nl_cb, msg, valid_handler, valid_data);
+ return _nl80211_send_and_recv (nl80211->nl_sock, nl80211->nl_cb, msg,
+ valid_handler, valid_data);
}
static void
@@ -180,12 +186,13 @@ struct nl80211_iface_info {
NM80211Mode mode;
};
-static int nl80211_iface_info_handler (struct nl_msg *msg, void *arg)
+static int
+nl80211_iface_info_handler (struct nl_msg *msg, void *arg)
{
struct nl80211_iface_info *info = arg;
struct genlmsghdr *gnlh = nlmsg_data (nlmsg_hdr (msg));
struct nlattr *tb[NL80211_ATTR_MAX + 1];
-
+
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata (gnlh, 0),
genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
@@ -204,7 +211,7 @@ static int nl80211_iface_info_handler (struct nl_msg *msg, void *arg)
info->mode = NM_802_11_MODE_INFRA;
break;
}
-
+
return NL_SKIP;
}
@@ -258,7 +265,8 @@ wifi_nl80211_set_mode (WifiData *data, const NM80211Mode mode)
}
/* @divisor: pass what value @xbm should be divided by to get dBm */
-static guint32 nl80211_xbm_to_percent (gint32 xbm, guint32 divisor)
+static guint32
+nl80211_xbm_to_percent (gint32 xbm, guint32 divisor)
{
#define NOISE_FLOOR_DBM -90
#define SIGNAL_MAX_DBM -20
@@ -281,8 +289,9 @@ struct nl80211_bss_info {
#define WLAN_EID_SSID 0
-static void find_ssid (guint8 *ies, guint32 ies_len,
- guint8 **ssid, guint32 *ssid_len)
+static void
+find_ssid (guint8 *ies, guint32 ies_len,
+ guint8 **ssid, guint32 *ssid_len)
{
*ssid = NULL;
*ssid_len = 0;
@@ -300,7 +309,8 @@ static void find_ssid (guint8 *ies, guint32 ies_len,
*ssid = ies + 2;
}
-static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
+static int
+nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
{
struct nl80211_bss_info *info = arg;
struct genlmsghdr *gnlh = nlmsg_data (nlmsg_hdr (msg));
@@ -318,7 +328,7 @@ static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
[NL80211_BSS_STATUS] = { .type = NLA_U32 },
};
guint32 status;
-
+
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata (gnlh, 0),
genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
@@ -362,7 +372,7 @@ static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
find_ssid(nla_data (bss[NL80211_BSS_INFORMATION_ELEMENTS]),
nla_len (bss[NL80211_BSS_INFORMATION_ELEMENTS]),
&ssid, &ssid_len);
- if (ssid && ssid_len && ssid_len <= sizeof(info->ssid)) {
+ if (ssid && ssid_len && ssid_len <= sizeof (info->ssid)) {
memcpy (info->ssid, ssid, ssid_len);
info->ssid_len = ssid_len;
}
@@ -373,12 +383,13 @@ static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
return NL_SKIP;
}
-static void nl80211_get_bss_info (WifiDataNl80211 *nl80211,
- struct nl80211_bss_info *bss_info)
+static void
+nl80211_get_bss_info (WifiDataNl80211 *nl80211,
+ struct nl80211_bss_info *bss_info)
{
struct nl_msg *msg;
- memset(bss_info, 0, sizeof(*bss_info));
+ memset(bss_info, 0, sizeof (*bss_info));
msg = nl80211_alloc_msg (nl80211, NL80211_CMD_GET_SCAN, NLM_F_DUMP);
@@ -451,7 +462,8 @@ struct nl80211_station_info {
gboolean signal_valid;
};
-static int nl80211_station_handler (struct nl_msg *msg, void *arg)
+static int
+nl80211_station_handler (struct nl_msg *msg, void *arg)
{
struct nl80211_station_info *info = arg;
struct nlattr *tb[NL80211_ATTR_MAX + 1];
@@ -479,23 +491,23 @@ static int nl80211_station_handler (struct nl_msg *msg, void *arg)
};
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata (gnlh, 0),
- genlmsg_attrlen (gnlh, 0), NULL) < 0)
+ genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
if (tb[NL80211_ATTR_STA_INFO] == NULL)
return NL_SKIP;
if (nla_parse_nested (sinfo, NL80211_STA_INFO_MAX,
- tb[NL80211_ATTR_STA_INFO],
- stats_policy))
+ tb[NL80211_ATTR_STA_INFO],
+ stats_policy))
return NL_SKIP;
if (sinfo[NL80211_STA_INFO_TX_BITRATE] == NULL)
return NL_SKIP;
if (nla_parse_nested (rinfo, NL80211_RATE_INFO_MAX,
- sinfo[NL80211_STA_INFO_TX_BITRATE],
- rate_policy))
+ sinfo[NL80211_STA_INFO_TX_BITRATE],
+ rate_policy))
return NL_SKIP;
if (rinfo[NL80211_RATE_INFO_BITRATE] == NULL)
@@ -513,13 +525,14 @@ static int nl80211_station_handler (struct nl_msg *msg, void *arg)
return NL_SKIP;
}
-static void nl80211_get_ap_info (WifiDataNl80211 *nl80211,
- struct nl80211_station_info *sta_info)
+static void
+nl80211_get_ap_info (WifiDataNl80211 *nl80211,
+ struct nl80211_station_info *sta_info)
{
struct nl_msg *msg;
struct nl80211_bss_info bss_info;
- memset(sta_info, 0, sizeof(*sta_info));
+ memset(sta_info, 0, sizeof (*sta_info));
nl80211_get_bss_info (nl80211, &bss_info);
if (!bss_info.valid)
@@ -564,7 +577,74 @@ wifi_nl80211_get_qual (WifiData *data)
return sta_info.signal;
}
+#if HAVE_NL80211_CRITICAL_PROTOCOL_CMDS
+static gboolean
+wifi_nl80211_indicate_addressing_running (WifiData *data, gboolean running)
+{
+ WifiDataNl80211 *nl80211 = (WifiDataNl80211 *) data;
+ struct nl_msg *msg;
+ int err;
+
+ msg = nl80211_alloc_msg (nl80211,
+ running ? NL80211_CMD_CRIT_PROTOCOL_START :
+ NL80211_CMD_CRIT_PROTOCOL_STOP,
+ 0);
+ /* Despite the DHCP name, we're using this for any type of IP addressing,
+ * DHCPv4, DHCPv6, and IPv6 SLAAC.
+ */
+ NLA_PUT_U16 (msg, NL80211_ATTR_CRIT_PROT_ID, NL80211_CRIT_PROTO_DHCP);
+ if (running) {
+ /* Give DHCP 5 seconds to complete */
+ NLA_PUT_U16 (msg, NL80211_ATTR_MAX_CRIT_PROT_DURATION, 5000);
+ }
+
+ err = nl80211_send_and_recv (nl80211, msg, NULL, NULL);
+ return err ? FALSE : TRUE;
+
+nla_put_failure:
+ nlmsg_free (msg);
+ return FALSE;
+}
+#endif
+
+struct nl80211_wowlan_info {
+ gboolean enabled;
+};
+
+static int
+nl80211_wowlan_handler (struct nl_msg *msg, void *arg)
+{
+ struct nlattr *tb[NL80211_ATTR_MAX + 1];
+ struct genlmsghdr *gnlh = nlmsg_data (nlmsg_hdr (msg));
+ struct nl80211_wowlan_info *info = arg;
+
+ info->enabled = FALSE;
+
+ if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
+ genlmsg_attrlen (gnlh, 0), NULL) < 0)
+ return NL_SKIP;
+
+ if (tb[NL80211_ATTR_WOWLAN_TRIGGERS])
+ info->enabled = TRUE;
+
+ return NL_SKIP;
+}
+
+static gboolean
+wifi_nl80211_get_wowlan (WifiData *data)
+{
+ WifiDataNl80211 *nl80211 = (WifiDataNl80211 *) data;
+ struct nl_msg *msg;
+ struct nl80211_wowlan_info info;
+
+ msg = nl80211_alloc_msg (nl80211, NL80211_CMD_GET_WOWLAN, 0);
+ nl80211_send_and_recv (nl80211, msg, nl80211_wowlan_handler, &info);
+
+ return info.enabled;
+}
+
struct nl80211_device_info {
+ int phy;
guint32 *freqs;
int num_freqs;
guint32 caps;
@@ -572,6 +652,7 @@ struct nl80211_device_info {
gboolean can_scan_ssid;
gboolean supported;
gboolean success;
+ gboolean can_wowlan;
};
#define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00
@@ -605,12 +686,15 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
};
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
- genlmsg_attrlen (gnlh, 0), NULL) < 0)
+ genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
- if (tb[NL80211_ATTR_WIPHY_BANDS] == NULL)
+ if ( tb[NL80211_ATTR_WIPHY] == NULL
+ || tb[NL80211_ATTR_WIPHY_BANDS] == NULL)
return NL_SKIP;
+ info->phy = nla_get_u32 (tb[NL80211_ATTR_WIPHY]);
+
if (tb[NL80211_ATTR_MAX_NUM_SCAN_SSIDS]) {
info->can_scan_ssid =
nla_get_u8 (tb[NL80211_ATTR_MAX_NUM_SCAN_SSIDS]) > 0;
@@ -663,18 +747,18 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
}
}
- info->freqs = g_malloc0 (sizeof(guint32) * info->num_freqs);
+ info->freqs = g_malloc0 (sizeof (guint32) * info->num_freqs);
freq_idx = 0;
nla_for_each_nested (nl_band, tb[NL80211_ATTR_WIPHY_BANDS], rem_band) {
if (nla_parse_nested (tb_band, NL80211_BAND_ATTR_MAX, nl_band,
- NULL) < 0)
+ NULL) < 0)
return NL_SKIP;
nla_for_each_nested(nl_freq, tb_band[NL80211_BAND_ATTR_FREQS],
- rem_freq) {
+ rem_freq) {
nla_parse_nested (tb_freq, NL80211_FREQUENCY_ATTR_MAX,
- nl_freq, freq_policy);
+ nl_freq, freq_policy);
if (!tb_freq[NL80211_FREQUENCY_ATTR_FREQ])
continue;
@@ -690,7 +774,7 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
int i;
__u32 *ciphers = nla_data (tb[NL80211_ATTR_CIPHER_SUITES]);
- num = nla_len (tb[NL80211_ATTR_CIPHER_SUITES]) / sizeof(__u32);
+ num = nla_len (tb[NL80211_ATTR_CIPHER_SUITES]) / sizeof (__u32);
for (i = 0; i < num; i++) {
switch (ciphers[i]) {
case WLAN_CIPHER_SUITE_WEP40:
@@ -700,12 +784,12 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
info->caps |= NM_WIFI_DEVICE_CAP_CIPHER_WEP104;
break;
case WLAN_CIPHER_SUITE_TKIP:
- info->caps |= NM_WIFI_DEVICE_CAP_CIPHER_TKIP |
- NM_WIFI_DEVICE_CAP_WPA;
+ info->caps |= (NM_WIFI_DEVICE_CAP_CIPHER_TKIP |
+ NM_WIFI_DEVICE_CAP_WPA);
break;
case WLAN_CIPHER_SUITE_CCMP:
- info->caps |= NM_WIFI_DEVICE_CAP_CIPHER_CCMP |
- NM_WIFI_DEVICE_CAP_RSN;
+ info->caps |= (NM_WIFI_DEVICE_CAP_CIPHER_CCMP |
+ NM_WIFI_DEVICE_CAP_RSN);
break;
case WLAN_CIPHER_SUITE_AES_CMAC:
case WLAN_CIPHER_SUITE_GCMP:
@@ -730,6 +814,9 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
}
}
+ if (tb[NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED])
+ info->can_wowlan = TRUE;
+
info->success = TRUE;
return NL_SKIP;
@@ -751,6 +838,9 @@ wifi_nl80211_init (const char *iface, int ifindex)
nl80211->parent.get_bssid = wifi_nl80211_get_bssid;
nl80211->parent.get_rate = wifi_nl80211_get_rate;
nl80211->parent.get_qual = wifi_nl80211_get_qual;
+#if HAVE_NL80211_CRITICAL_PROTOCOL_CMDS
+ nl80211->parent.indicate_addressing_running = wifi_nl80211_indicate_addressing_running;
+#endif
nl80211->parent.deinit = wifi_nl80211_deinit;
nl80211->nl_sock = nl_socket_alloc ();
@@ -768,10 +858,12 @@ wifi_nl80211_init (const char *iface, int ifindex)
if (nl80211->nl_cb == NULL)
goto error;
+ nl80211->phy = -1;
+
msg = nl80211_alloc_msg (nl80211, NL80211_CMD_GET_WIPHY, 0);
if (nl80211_send_and_recv (nl80211, msg, nl80211_wiphy_info_handler,
- &device_info) < 0) {
+ &device_info) < 0) {
nm_log_dbg (LOGD_HW | LOGD_WIFI,
"(%s): NL80211_CMD_GET_WIPHY request failed",
nl80211->parent.iface);
@@ -813,11 +905,14 @@ wifi_nl80211_init (const char *iface, int ifindex)
goto error;
}
+ nl80211->phy = device_info.phy;
nl80211->freqs = device_info.freqs;
nl80211->num_freqs = device_info.num_freqs;
- nl80211->parent.can_scan_ssid = device_info.can_scan_ssid;
nl80211->parent.caps = device_info.caps;
+ if (device_info.can_wowlan)
+ nl80211->parent.get_wowlan = wifi_nl80211_get_wowlan;
+
nm_log_info (LOGD_HW | LOGD_WIFI,
"(%s): using nl80211 for WiFi device control",
nl80211->parent.iface);
@@ -829,27 +924,6 @@ error:
return NULL;
}
-static int
-iface_to_index (struct nl_sock *nl_sock, const char *iface)
-{
- struct nl_cache *link_cache = NULL;
- int err, ifindex;
-
- /* name to index */
- err = rtnl_link_alloc_cache (nl_sock, AF_UNSPEC, &link_cache);
- if (err < 0) {
- nm_log_warn (LOGD_HW, "failed to allocate link cache: (%d) %s",
- err, nl_geterror (err));
- return -1;
- }
- nl_cache_mngt_provide (link_cache);
- nl_cache_refill (nl_sock, link_cache);
- ifindex = rtnl_link_name2i (link_cache, iface);
- nl_cache_free (link_cache);
-
- return ifindex;
-}
-
gboolean
wifi_nl80211_is_wifi (const char *iface)
{
@@ -869,7 +943,7 @@ wifi_nl80211_is_wifi (const char *iface)
if (genl_connect (nl_sock))
goto error;
- ifindex = iface_to_index (nl_sock, iface);
+ ifindex = nm_platform_link_get_ifindex (iface);
if (ifindex < 0)
goto error;
@@ -879,7 +953,7 @@ wifi_nl80211_is_wifi (const char *iface)
nl_cb = nl_cb_alloc (NL_CB_DEFAULT);
if (nl_cb) {
- msg = _nl80211_alloc_msg (id, ifindex, NL80211_CMD_GET_INTERFACE, 0);
+ msg = _nl80211_alloc_msg (id, ifindex, -1, NL80211_CMD_GET_INTERFACE, 0);
if (_nl80211_send_and_recv (nl_sock,
nl_cb,
msg,
diff --git a/src/wifi/wifi-utils-nl80211.h b/src/platform/wifi/wifi-utils-nl80211.h
index 2a7fe874a..2a7fe874a 100644
--- a/src/wifi/wifi-utils-nl80211.h
+++ b/src/platform/wifi/wifi-utils-nl80211.h
diff --git a/src/wifi/wifi-utils-private.h b/src/platform/wifi/wifi-utils-private.h
index 83075090d..e7601752d 100644
--- a/src/wifi/wifi-utils-private.h
+++ b/src/platform/wifi/wifi-utils-private.h
@@ -30,7 +30,6 @@ struct WifiData {
char *iface;
int ifindex;
NMDeviceWifiCapabilities caps;
- gboolean can_scan_ssid;
NM80211Mode (*get_mode) (WifiData *data);
@@ -57,6 +56,8 @@ struct WifiData {
void (*deinit) (WifiData *data);
+ gboolean (*get_wowlan) (WifiData *data);
+
/* OLPC Mesh-only functions */
guint32 (*get_mesh_channel) (WifiData *data);
@@ -66,6 +67,8 @@ struct WifiData {
/* ssid == NULL means "auto SSID" */
gboolean (*set_mesh_ssid) (WifiData *data, const GByteArray *ssid);
+
+ gboolean (*indicate_addressing_running) (WifiData *data, gboolean running);
};
gpointer wifi_data_new (const char *iface, int ifindex, gsize len);
diff --git a/src/wifi/wifi-utils-wext.c b/src/platform/wifi/wifi-utils-wext.c
index 6e990aed7..cc94b69a3 100644
--- a/src/wifi/wifi-utils-wext.c
+++ b/src/platform/wifi/wifi-utils-wext.c
@@ -69,7 +69,7 @@ struct iw_range_with_scan_capa
guint8 old_num_frequency;
guint8 scan_capa;
-/* don't need the rest... */
+ /* don't need the rest... */
};
static guint32
@@ -284,7 +284,7 @@ wext_qual_to_percent (const struct iw_quality *qual,
max_qual->updated);
/* Try using the card's idea of the signal quality first as long as it tells us what the max quality is.
- * Drivers that fill in quality values MUST treat them as percentages, ie the "Link Quality" MUST be
+ * Drivers that fill in quality values MUST treat them as percentages, ie the "Link Quality" MUST be
* bounded by 0 and max_qual->qual, and MUST change in a linear fashion. Within those bounds, drivers
* are free to use whatever they want to calculate "Link Quality".
*/
@@ -302,10 +302,10 @@ wext_qual_to_percent (const struct iw_quality *qual,
* If drivers don't conform to it, they are wrong and need to be fixed.
*/
- if ( (max_qual->level == 0) && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level == 0 */
- && !(qual->updated & IW_QUAL_LEVEL_INVALID) /* Must have valid qual->level */
- && ( ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID)) /* Must have valid max_qual->noise */
- || ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))) /* OR valid qual->noise */
+ if ( (max_qual->level == 0) && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level == 0 */
+ && !(qual->updated & IW_QUAL_LEVEL_INVALID) /* Must have valid qual->level */
+ && ( ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID)) /* Must have valid max_qual->noise */
+ || ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))) /* OR valid qual->noise */
) {
/* Absolute power values (dBm) */
@@ -325,9 +325,8 @@ wext_qual_to_percent (const struct iw_quality *qual,
noise = CLAMP (noise, FALLBACK_NOISE_FLOOR_DBM, FALLBACK_SIGNAL_MAX_DBM);
/* A sort of signal-to-noise ratio calculation */
- level_percent = (int)(100 - 70 *(
- ((double)max_level - (double)level) /
- ((double)max_level - (double)noise)));
+ level_percent = (int) (100 - 70 * (((double)max_level - (double)level) /
+ ((double)max_level - (double)noise)));
nm_log_dbg (LOGD_WIFI, "QL1: level_percent is %d. max_level %d, level %d, noise_floor %d.",
level_percent, max_level, level, noise);
} else if ( (max_qual->level != 0)
@@ -412,7 +411,7 @@ wifi_wext_set_mesh_channel (WifiData *data, guint32 channel)
}
if (ioctl (wext->fd, SIOCSIWFREQ, &wrq) < 0) {
- nm_log_err (LOGD_HW | LOGD_WIFI | LOGD_OLPC_MESH,
+ nm_log_err (LOGD_HW | LOGD_WIFI | LOGD_OLPC,
"(%s): error setting channel to %d: %s",
wext->parent.iface, channel, strerror (errno));
return FALSE;
@@ -443,7 +442,7 @@ wifi_wext_set_mesh_ssid (WifiData *data, const GByteArray *ssid)
return TRUE;
if (errno != ENODEV) {
- nm_log_err (LOGD_HW | LOGD_WIFI | LOGD_OLPC_MESH,
+ nm_log_err (LOGD_HW | LOGD_WIFI | LOGD_OLPC,
"(%s): error setting SSID to '%s': %s",
wext->parent.iface,
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(null)",
@@ -630,7 +629,6 @@ wifi_wext_init (const char *iface, int ifindex, gboolean check_scan)
*/
scan_capa_range = (struct iw_range_with_scan_capa *) &range;
if (scan_capa_range->scan_capa & NM_IW_SCAN_CAPA_ESSID) {
- wext->parent.can_scan_ssid = TRUE;
nm_log_info (LOGD_HW | LOGD_WIFI,
"(%s): driver supports SSID scans (scan_capa 0x%02X).",
wext->parent.iface,
@@ -671,4 +669,3 @@ wifi_wext_is_wifi (const char *iface)
}
return is_wifi;
}
-
diff --git a/src/wifi/wifi-utils-wext.h b/src/platform/wifi/wifi-utils-wext.h
index 96ad74eb4..96ad74eb4 100644
--- a/src/wifi/wifi-utils-wext.h
+++ b/src/platform/wifi/wifi-utils-wext.h
diff --git a/src/wifi/wifi-utils.c b/src/platform/wifi/wifi-utils.c
index fc491ec4f..ff4802752 100644
--- a/src/wifi/wifi-utils.c
+++ b/src/platform/wifi/wifi-utils.c
@@ -78,13 +78,6 @@ wifi_utils_get_caps (WifiData *data)
return data->caps;
}
-gboolean
-wifi_utils_can_scan_ssid (WifiData *data)
-{
- g_return_val_if_fail (data != NULL, FALSE);
- return data->can_scan_ssid;
-}
-
NM80211Mode
wifi_utils_get_mode (WifiData *data)
{
@@ -150,6 +143,15 @@ wifi_utils_get_qual (WifiData *data)
return data->get_qual (data);
}
+gboolean
+wifi_utils_get_wowlan (WifiData *data)
+{
+ g_return_val_if_fail (data != NULL, 0);
+ if (!data->get_wowlan)
+ return FALSE;
+ return data->get_wowlan (data);
+}
+
void
wifi_utils_deinit (WifiData *data)
{
@@ -168,7 +170,7 @@ wifi_utils_is_wifi (const char *iface, const char *sysfs_path)
if (sysfs_path) {
/* Check for nl80211 sysfs paths */
- snprintf (phy80211_path, sizeof (phy80211_path), "%s/phy80211", sysfs_path);
+ g_snprintf (phy80211_path, sizeof (phy80211_path), "%s/phy80211", sysfs_path);
if ((stat (phy80211_path, &s) == 0 && (s.st_mode & S_IFDIR)))
return TRUE;
}
@@ -199,7 +201,6 @@ gboolean
wifi_utils_set_mesh_channel (WifiData *data, guint32 channel)
{
g_return_val_if_fail (data != NULL, FALSE);
- g_return_val_if_fail (channel >= 0, FALSE);
g_return_val_if_fail (channel <= 13, FALSE);
g_return_val_if_fail (data->set_mesh_channel != NULL, FALSE);
return data->set_mesh_channel (data, channel);
@@ -213,3 +214,12 @@ wifi_utils_set_mesh_ssid (WifiData *data, const GByteArray *ssid)
return data->set_mesh_ssid (data, ssid);
}
+gboolean
+wifi_utils_indicate_addressing_running (WifiData *data, gboolean running)
+{
+ g_return_val_if_fail (data != NULL, FALSE);
+ if (data->indicate_addressing_running)
+ return data->indicate_addressing_running (data, running);
+ return FALSE;
+}
+
diff --git a/src/wifi/wifi-utils.h b/src/platform/wifi/wifi-utils.h
index 09583e7bd..455e075f5 100644
--- a/src/wifi/wifi-utils.h
+++ b/src/platform/wifi/wifi-utils.h
@@ -37,8 +37,6 @@ void wifi_utils_deinit (WifiData *data);
NMDeviceWifiCapabilities wifi_utils_get_caps (WifiData *data);
-gboolean wifi_utils_can_scan_ssid (WifiData *data);
-
NM80211Mode wifi_utils_get_mode (WifiData *data);
gboolean wifi_utils_set_mode (WifiData *data, const NM80211Mode mode);
@@ -61,6 +59,12 @@ guint32 wifi_utils_get_rate (WifiData *data);
/* Returns quality 0 - 100% on succes, or -1 on error */
int wifi_utils_get_qual (WifiData *data);
+/* Tells the driver DHCP or SLAAC is running */
+gboolean wifi_utils_indicate_addressing_running (WifiData *data, gboolean running);
+
+/* Returns true if WoWLAN is enabled on device */
+gboolean wifi_utils_get_wowlan (WifiData *data);
+
/* OLPC Mesh-only functions */
guint32 wifi_utils_get_mesh_channel (WifiData *data);
diff --git a/src/posix-signals/Makefile.am b/src/posix-signals/Makefile.am
deleted file mode 100644
index 183214bd7..000000000
--- a/src/posix-signals/Makefile.am
+++ /dev/null
@@ -1,14 +0,0 @@
-noinst_LTLIBRARIES = libnm-posix-signals.la
-
-libnm_posix_signals_la_SOURCES = \
- nm-posix-signals.c \
- nm-posix-signals.h
-
-libnm_posix_signals_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- -DLIBEXECDIR=\"$(libexecdir)\"
-
-libnm_posix_signals_la_LIBADD = \
- -ldl \
- $(GLIB_LIBS)
-
diff --git a/src/ppp-manager/Makefile.am b/src/ppp-manager/Makefile.am
index 4ad4ff811..46fc91388 100644
--- a/src/ppp-manager/Makefile.am
+++ b/src/ppp-manager/Makefile.am
@@ -1,46 +1,13 @@
+if WITH_PPP
+
AM_CPPFLAGS = \
- -I${top_srcdir} \
-I${top_builddir}/include \
-I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
+ -DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS)
-noinst_LTLIBRARIES = libppp-manager.la
-
-libppp_manager_la_SOURCES = \
- nm-ppp-manager.c \
- nm-ppp-manager.h \
- nm-ppp-status.h
-
-nm-ppp-manager-glue.h: $(top_srcdir)/introspection/nm-ppp-manager.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_ppp_manager --mode=glib-server --output=$@ $<
-
-built_sources = nm-ppp-manager-glue.h
-
-$(libppp_manager_la_OBJECTS): $(built_sources)
-
-libppp_manager_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBDIR=\"$(libdir)\" \
- -DPLUGINDIR=\"$(PPPD_PLUGIN_DIR)\"
-
-libppp_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-if WITH_PPP
-
pppd_plugindir = $(PPPD_PLUGIN_DIR)
pppd_plugin_LTLIBRARIES = nm-pppd-plugin.la
@@ -57,8 +24,3 @@ nm_pppd_plugin_la_LIBADD = \
$(GLIB_LIBS)
endif
-
-BUILT_SOURCES = nm-ppp-manager-glue.h
-
-CLEANFILES = $(BUILT_SOURCES)
-
diff --git a/src/ppp-manager/Makefile.in b/src/ppp-manager/Makefile.in
index 97465f0c1..731a94592 100644
--- a/src/ppp-manager/Makefile.in
+++ b/src/ppp-manager/Makefile.in
@@ -82,7 +82,8 @@ subdir = src/ppp-manager
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -128,19 +129,8 @@ am__uninstall_files_from_dir = { \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(pppd_plugindir)"
-LTLIBRARIES = $(noinst_LTLIBRARIES) $(pppd_plugin_LTLIBRARIES)
+LTLIBRARIES = $(pppd_plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libppp_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libppp_manager_la_OBJECTS = libppp_manager_la-nm-ppp-manager.lo
-libppp_manager_la_OBJECTS = $(am_libppp_manager_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 =
@WITH_PPP_TRUE@nm_pppd_plugin_la_DEPENDENCIES = \
@WITH_PPP_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
@WITH_PPP_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -148,6 +138,10 @@ am__nm_pppd_plugin_la_SOURCES_DIST = nm-pppd-plugin.c nm-pppd-plugin.h \
nm-ppp-status.h
@WITH_PPP_TRUE@am_nm_pppd_plugin_la_OBJECTS = nm-pppd-plugin.lo
nm_pppd_plugin_la_OBJECTS = $(am_nm_pppd_plugin_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
nm_pppd_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(nm_pppd_plugin_la_LDFLAGS) $(LDFLAGS) \
@@ -187,9 +181,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libppp_manager_la_SOURCES) $(nm_pppd_plugin_la_SOURCES)
-DIST_SOURCES = $(libppp_manager_la_SOURCES) \
- $(am__nm_pppd_plugin_la_SOURCES_DIST)
+SOURCES = $(nm_pppd_plugin_la_SOURCES)
+DIST_SOURCES = $(am__nm_pppd_plugin_la_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -240,12 +233,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -270,7 +266,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -315,12 +310,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -337,6 +336,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -364,11 +365,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -383,6 +389,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -445,6 +452,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -455,39 +463,14 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS)
-
-noinst_LTLIBRARIES = libppp-manager.la
-libppp_manager_la_SOURCES = \
- nm-ppp-manager.c \
- nm-ppp-manager.h \
- nm-ppp-status.h
-
-built_sources = nm-ppp-manager-glue.h
-libppp_manager_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DLIBDIR=\"$(libdir)\" \
- -DPLUGINDIR=\"$(PPPD_PLUGIN_DIR)\"
-
-libppp_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
+with_valgrind = @with_valgrind@
+@WITH_PPP_TRUE@AM_CPPFLAGS = \
+@WITH_PPP_TRUE@ -I${top_builddir}/include \
+@WITH_PPP_TRUE@ -I${top_srcdir}/include \
+@WITH_PPP_TRUE@ -DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \
+@WITH_PPP_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@WITH_PPP_TRUE@ $(DBUS_CFLAGS) \
+@WITH_PPP_TRUE@ $(GLIB_CFLAGS)
@WITH_PPP_TRUE@pppd_plugindir = $(PPPD_PLUGIN_DIR)
@WITH_PPP_TRUE@pppd_plugin_LTLIBRARIES = nm-pppd-plugin.la
@@ -502,10 +485,7 @@ libppp_manager_la_LIBADD = \
@WITH_PPP_TRUE@ $(DBUS_LIBS) \
@WITH_PPP_TRUE@ $(GLIB_LIBS)
-BUILT_SOURCES = nm-ppp-manager-glue.h
-CLEANFILES = $(BUILT_SOURCES)
-all: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) all-am
+all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -540,17 +520,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
install-pppd_pluginLTLIBRARIES: $(pppd_plugin_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(pppd_plugin_LTLIBRARIES)'; test -n "$(pppd_plugindir)" || list=; \
@@ -586,9 +555,6 @@ clean-pppd_pluginLTLIBRARIES:
rm -f $${locs}; \
}
-libppp-manager.la: $(libppp_manager_la_OBJECTS) $(libppp_manager_la_DEPENDENCIES) $(EXTRA_libppp_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libppp_manager_la_OBJECTS) $(libppp_manager_la_LIBADD) $(LIBS)
-
nm-pppd-plugin.la: $(nm_pppd_plugin_la_OBJECTS) $(nm_pppd_plugin_la_DEPENDENCIES) $(EXTRA_nm_pppd_plugin_la_DEPENDENCIES)
$(AM_V_CCLD)$(nm_pppd_plugin_la_LINK) $(am_nm_pppd_plugin_la_rpath) $(nm_pppd_plugin_la_OBJECTS) $(nm_pppd_plugin_la_LIBADD) $(LIBS)
@@ -598,7 +564,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libppp_manager_la-nm-ppp-manager.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-pppd-plugin.Plo@am__quote@
.c.o:
@@ -622,13 +587,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libppp_manager_la-nm-ppp-manager.lo: nm-ppp-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libppp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libppp_manager_la-nm-ppp-manager.lo -MD -MP -MF $(DEPDIR)/libppp_manager_la-nm-ppp-manager.Tpo -c -o libppp_manager_la-nm-ppp-manager.lo `test -f 'nm-ppp-manager.c' || echo '$(srcdir)/'`nm-ppp-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libppp_manager_la-nm-ppp-manager.Tpo $(DEPDIR)/libppp_manager_la-nm-ppp-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ppp-manager.c' object='libppp_manager_la-nm-ppp-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libppp_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libppp_manager_la-nm-ppp-manager.lo `test -f 'nm-ppp-manager.c' || echo '$(srcdir)/'`nm-ppp-manager.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -718,15 +676,13 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) check-am
+check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(pppd_plugindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) install-am
+install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -748,7 +704,6 @@ install-strip:
mostlyclean-generic:
clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -757,11 +712,10 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- clean-pppd_pluginLTLIBRARIES mostlyclean-am
+clean-am: clean-generic clean-libtool clean-pppd_pluginLTLIBRARIES \
+ mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
@@ -829,12 +783,11 @@ ps-am:
uninstall-am: uninstall-pppd_pluginLTLIBRARIES
-.MAKE: all check install install-am install-strip
+.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES \
- clean-pppd_pluginLTLIBRARIES cscopelist-am ctags ctags-am \
- distclean distclean-compile distclean-generic \
+ clean-libtool clean-pppd_pluginLTLIBRARIES cscopelist-am ctags \
+ ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
@@ -848,11 +801,6 @@ uninstall-am: uninstall-pppd_pluginLTLIBRARIES
uninstall-pppd_pluginLTLIBRARIES
-nm-ppp-manager-glue.h: $(top_srcdir)/introspection/nm-ppp-manager.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_ppp_manager --mode=glib-server --output=$@ $<
-
-$(libppp_manager_la_OBJECTS): $(built_sources)
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index aa03c82a5..e856fc195 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -52,32 +52,28 @@
#include "nm-setting-cdma.h"
#include "nm-dbus-manager.h"
#include "nm-logging.h"
-#include "nm-marshal.h"
#include "nm-posix-signals.h"
static void impl_ppp_manager_need_secrets (NMPPPManager *manager,
DBusGMethodInvocation *context);
static gboolean impl_ppp_manager_set_state (NMPPPManager *manager,
- guint32 state,
- GError **err);
+ guint32 state,
+ GError **err);
static gboolean impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
- GHashTable *config,
- GError **err);
+ GHashTable *config,
+ GError **err);
#include "nm-ppp-manager-glue.h"
static void _ppp_cleanup (NMPPPManager *manager);
-#define NM_PPPD_PLUGIN PLUGINDIR "/nm-pppd-plugin.so"
+#define NM_PPPD_PLUGIN PPPD_PLUGIN_DIR "/nm-pppd-plugin.so"
#define PPP_MANAGER_SECRET_TRIES "ppp-manager-secret-tries"
typedef struct {
- gboolean disposed;
-
GPid pid;
- NMDBusManager *dbus_manager;
char *dbus_path;
char *parent_iface;
@@ -85,6 +81,7 @@ typedef struct {
NMActRequest *act_req;
DBusGMethodInvocation *pending_secrets_context;
guint32 secrets_id;
+ const char *secrets_setting_name;
guint32 ppp_watch_id;
guint32 ppp_timeout_handler;
@@ -135,34 +132,18 @@ nm_ppp_manager_init (NMPPPManager *manager)
{
}
-static GObject *
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
+static void
+constructed (GObject *object)
{
- GObject *object;
- NMPPPManagerPrivate *priv;
+ NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (object);
DBusGConnection *connection;
static guint32 counter = 0;
- object = G_OBJECT_CLASS (nm_ppp_manager_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
- if (!object)
- return NULL;
-
- priv = NM_PPP_MANAGER_GET_PRIVATE (object);
- priv->dbus_manager = nm_dbus_manager_get ();
- if (!priv->dbus_manager) {
- g_object_unref (object);
- return NULL;
- }
-
- connection = nm_dbus_manager_get_connection (priv->dbus_manager);
priv->dbus_path = g_strdup_printf (NM_DBUS_PATH "/PPP/%d", counter++);
+ connection = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
dbus_g_connection_register_g_object (connection, priv->dbus_path, object);
- return object;
+ G_OBJECT_CLASS (nm_ppp_manager_parent_class)->constructed (object);
}
static void
@@ -170,19 +151,9 @@ dispose (GObject *object)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (object);
- if (priv->disposed == FALSE) {
- priv->disposed = TRUE;
+ _ppp_cleanup (NM_PPP_MANAGER (object));
- _ppp_cleanup (NM_PPP_MANAGER (object));
-
- if (priv->act_req) {
- g_object_unref (priv->act_req);
- priv->act_req = NULL;
- }
-
- g_object_unref (priv->dbus_manager);
- priv->dbus_manager = NULL;
- }
+ g_clear_object (&priv->act_req);
G_OBJECT_CLASS (nm_ppp_manager_parent_class)->dispose (object);
}
@@ -200,7 +171,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (object);
@@ -217,7 +188,7 @@ set_property (GObject *object, guint prop_id,
static void
get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (object);
@@ -238,7 +209,7 @@ nm_ppp_manager_class_init (NMPPPManagerClass *manager_class)
g_type_class_add_private (manager_class, sizeof (NMPPPManagerPrivate));
- object_class->constructor = constructor;
+ object_class->constructed = constructed;
object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
@@ -248,45 +219,42 @@ nm_ppp_manager_class_init (NMPPPManagerClass *manager_class)
g_object_class_install_property
(object_class, PROP_PARENT_IFACE,
g_param_spec_string (NM_PPP_MANAGER_PARENT_IFACE,
- "ParentIface",
- "Parent interface",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ "ParentIface",
+ "Parent interface",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/* signals */
signals[STATE_CHANGED] =
g_signal_new ("state-changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMPPPManagerClass, state_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1,
- G_TYPE_UINT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMPPPManagerClass, state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_UINT);
signals[IP4_CONFIG] =
g_signal_new ("ip4-config",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMPPPManagerClass, ip4_config),
- NULL, NULL,
- _nm_marshal_VOID__STRING_OBJECT,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_OBJECT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMPPPManagerClass, ip4_config),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2,
+ G_TYPE_STRING,
+ G_TYPE_OBJECT);
signals[STATS] =
g_signal_new ("stats",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMPPPManagerClass, stats),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
- G_TYPE_NONE, 2,
- G_TYPE_UINT, G_TYPE_UINT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMPPPManagerClass, stats),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (manager_class),
- &dbus_glib_nm_ppp_manager_object_info);
+ &dbus_glib_nm_ppp_manager_object_info);
}
NMPPPManager *
@@ -363,36 +331,50 @@ cancel_get_secrets (NMPPPManager *self)
nm_act_request_cancel_secrets (priv->act_req, priv->secrets_id);
priv->secrets_id = 0;
}
+ priv->secrets_setting_name = NULL;
}
static gboolean
extract_details_from_connection (NMConnection *connection,
+ const char *secrets_setting_name,
const char **username,
const char **password,
GError **error)
{
NMSettingConnection *s_con;
NMSetting *setting;
- const char *connection_type;
+ const char *setting_name;
g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (username != NULL, FALSE);
g_return_val_if_fail (password != NULL, FALSE);
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
-
- connection_type = nm_setting_connection_get_connection_type (s_con);
- g_assert (connection_type);
+ if (secrets_setting_name)
+ setting_name = secrets_setting_name;
+ else {
+ /* Get the setting matching the connection type */
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ setting_name = nm_setting_connection_get_connection_type (s_con);
+ g_assert (setting_name);
+
+ /* In case of bluetooth connection, use GSM or CDMA setting */
+ if (strcmp (setting_name, NM_SETTING_BLUETOOTH_SETTING_NAME) == 0) {
+ if (nm_connection_get_setting_gsm (connection))
+ setting_name = NM_SETTING_GSM_SETTING_NAME;
+ else
+ setting_name = NM_SETTING_CDMA_SETTING_NAME;
+ }
+ }
- setting = nm_connection_get_setting_by_name (connection, connection_type);
+ setting = nm_connection_get_setting_by_name (connection, setting_name);
if (!setting) {
g_set_error_literal (error, NM_PPP_MANAGER_ERROR, NM_PPP_MANAGER_ERROR_UNKOWN,
"Missing type-specific setting; no secrets could be found.");
return FALSE;
}
- /* FIXME: push this down to the settings and keep PPP manager generic */
if (NM_IS_SETTING_PPPOE (setting)) {
*username = nm_setting_pppoe_get_username (NM_SETTING_PPPOE (setting));
*password = nm_setting_pppoe_get_password (NM_SETTING_PPPOE (setting));
@@ -433,7 +415,7 @@ ppp_secrets_cb (NMActRequest *req,
goto out;
}
- if (!extract_details_from_connection (connection, &username, &password, &local)) {
+ if (!extract_details_from_connection (connection, priv->secrets_setting_name, &username, &password, &local)) {
nm_log_warn (LOGD_PPP, "%s", local->message);
dbus_g_method_return_error (priv->pending_secrets_context, local);
g_clear_error (&local);
@@ -448,9 +430,10 @@ ppp_secrets_cb (NMActRequest *req,
*/
dbus_g_method_return (priv->pending_secrets_context, username, password);
-out:
+ out:
priv->pending_secrets_context = NULL;
priv->secrets_id = 0;
+ priv->secrets_setting_name = NULL;
}
static void
@@ -459,7 +442,6 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
NMConnection *connection;
- const char *setting_name;
const char *username = NULL;
const char *password = NULL;
guint32 tries;
@@ -470,10 +452,10 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
connection = nm_act_request_get_connection (priv->act_req);
nm_connection_clear_secrets (connection);
- setting_name = nm_connection_need_secrets (connection, &hints);
- if (!setting_name) {
+ priv->secrets_setting_name = nm_connection_need_secrets (connection, &hints);
+ if (!priv->secrets_setting_name) {
/* Use existing secrets from the connection */
- if (extract_details_from_connection (connection, &username, &password, &error)) {
+ if (extract_details_from_connection (connection, NULL, &username, &password, &error)) {
/* Send existing secrets to the PPP plugin */
priv->pending_secrets_context = context;
ppp_secrets_cb (priv->act_req, priv->secrets_id, connection, NULL, manager);
@@ -494,7 +476,7 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
priv->secrets_id = nm_act_request_get_secrets (priv->act_req,
- setting_name,
+ priv->secrets_setting_name,
flags,
hints ? g_ptr_array_index (hints, 0) : NULL,
ppp_secrets_cb,
@@ -507,8 +489,8 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
}
static gboolean impl_ppp_manager_set_state (NMPPPManager *manager,
- guint32 state,
- GError **err)
+ guint32 state,
+ GError **err)
{
g_signal_emit (manager, signals[STATE_CHANGED], 0, state);
@@ -517,14 +499,14 @@ static gboolean impl_ppp_manager_set_state (NMPPPManager *manager,
static gboolean
impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
- GHashTable *config_hash,
- GError **err)
+ GHashTable *config_hash,
+ GError **err)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
NMConnection *connection;
NMSettingPPP *s_ppp;
NMIP4Config *config;
- NMIP4Address *addr;
+ NMPlatformIP4Address address;
GValue *val;
int i;
@@ -533,28 +515,28 @@ impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
remove_timeout_handler (manager);
config = nm_ip4_config_new ();
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_prefix (addr, 32);
+ memset (&address, 0, sizeof (address));
+ address.plen = 32;
val = (GValue *) g_hash_table_lookup (config_hash, NM_PPP_IP4_CONFIG_GATEWAY);
if (val) {
- nm_ip4_address_set_gateway (addr, g_value_get_uint (val));
- nm_ip4_config_set_ptp_address (config, g_value_get_uint (val));
+ nm_ip4_config_set_gateway (config, g_value_get_uint (val));
+ address.peer_address = g_value_get_uint (val);
}
val = (GValue *) g_hash_table_lookup (config_hash, NM_PPP_IP4_CONFIG_ADDRESS);
if (val)
- nm_ip4_address_set_address (addr, g_value_get_uint (val));
+ address.address = g_value_get_uint (val);
val = (GValue *) g_hash_table_lookup (config_hash, NM_PPP_IP4_CONFIG_PREFIX);
if (val)
- nm_ip4_address_set_prefix (addr, g_value_get_uint (val));
+ address.plen = g_value_get_uint (val);
- if (nm_ip4_address_get_address (addr) && nm_ip4_address_get_prefix (addr)) {
- nm_ip4_config_take_address (config, addr);
+ if (address.address && address.plen) {
+ address.source = NM_PLATFORM_SOURCE_PPP;
+ nm_ip4_config_add_address (config, &address);
} else {
nm_log_err (LOGD_PPP, "invalid IPv4 address received!");
- nm_ip4_address_unref (addr);
goto out;
}
@@ -665,25 +647,34 @@ nm_cmd_line_add_int (NMCmdLine *cmd, int i)
/*******************************************/
+static const char *pppd_binary_paths[] = {
+ PPPD_PATH,
+ "/usr/local/sbin/pppd",
+ "/usr/sbin/pppd",
+ "/sbin/pppd",
+ NULL
+};
+
+static const char *pppoe_binary_paths[] = {
+ PPPOE_PATH,
+ "/usr/local/sbin/pppoe",
+ "/usr/sbin/pppoe",
+ "/sbin/pppoe",
+ NULL
+};
+
static inline const char *
-nm_find_pppd (void)
+nm_find_binary (const char *paths[])
{
- static const char *pppd_binary_paths[] = {
- "/usr/local/sbin/pppd",
- "/usr/sbin/pppd",
- "/sbin/pppd",
- NULL
- };
-
- const char **pppd_binary = pppd_binary_paths;
+ const char **binary = paths;
- while (*pppd_binary != NULL) {
- if (g_file_test (*pppd_binary, G_FILE_TEST_EXISTS))
+ while (*binary != NULL) {
+ if (**binary && g_file_test (*binary, G_FILE_TEST_EXISTS))
break;
- pppd_binary++;
+ binary++;
}
- return *pppd_binary;
+ return *binary;
}
static void
@@ -805,22 +796,32 @@ create_pppd_cmd_line (NMPPPManager *self,
GError **err)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (self);
- const char *ppp_binary;
+ const char *pppd_binary, *pppoe_binary = NULL;
NMCmdLine *cmd;
gboolean ppp_debug;
g_return_val_if_fail (setting != NULL, NULL);
- ppp_binary = nm_find_pppd ();
- if (!ppp_binary) {
+ pppd_binary = nm_find_binary (pppd_binary_paths);
+ if (!pppd_binary) {
g_set_error (err, NM_PPP_MANAGER_ERROR, NM_PPP_MANAGER_ERROR,
- "Could not find ppp binary.");
+ "Could not find pppd binary.");
return NULL;
}
+ if ( pppoe
+ || (adsl && strcmp (nm_setting_adsl_get_protocol (adsl), NM_SETTING_ADSL_PROTOCOL_PPPOE))) {
+ pppoe_binary = nm_find_binary (pppoe_binary_paths);
+ if (!pppoe_binary) {
+ g_set_error (err, NM_PPP_MANAGER_ERROR, NM_PPP_MANAGER_ERROR,
+ "Could not find pppoe binary.");
+ return NULL;
+ }
+ }
+
/* Create pppd command line */
cmd = nm_cmd_line_new ();
- nm_cmd_line_add_string (cmd, ppp_binary);
+ nm_cmd_line_add_string (cmd, pppd_binary);
nm_cmd_line_add_string (cmd, "nodetach");
nm_cmd_line_add_string (cmd, "lock");
@@ -833,8 +834,7 @@ create_pppd_cmd_line (NMPPPManager *self,
nm_cmd_line_add_string (cmd, ",");
ppp_debug = !!getenv ("NM_PPP_DEBUG");
- if ( nm_logging_level_enabled (LOGL_DEBUG)
- && nm_logging_domain_enabled (LOGD_PPP))
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_PPP))
ppp_debug = TRUE;
if (ppp_debug)
@@ -846,21 +846,30 @@ create_pppd_cmd_line (NMPPPManager *self,
}
if (pppoe) {
- char *dev_str;
+ GString *pppoe_arg;
const char *pppoe_service;
+ char *quoted;
- nm_cmd_line_add_string (cmd, "plugin");
- nm_cmd_line_add_string (cmd, "rp-pppoe.so");
+ g_assert (pppoe_binary != NULL);
+ pppoe_arg = g_string_new (pppoe_binary);
- dev_str = g_strdup_printf ("nic-%s", priv->parent_iface);
- nm_cmd_line_add_string (cmd, dev_str);
- g_free (dev_str);
+ g_string_append (pppoe_arg, " -I ");
+ quoted = g_shell_quote (priv->parent_iface);
+ g_string_append (pppoe_arg, quoted);
+ g_free (quoted);
pppoe_service = nm_setting_pppoe_get_service (pppoe);
if (pppoe_service) {
- nm_cmd_line_add_string (cmd, "rp_pppoe_service");
- nm_cmd_line_add_string (cmd, pppoe_service);
+ g_string_append (pppoe_arg, " -S ");
+ quoted = g_shell_quote (pppoe_service);
+ g_string_append (pppoe_arg, quoted);
+ g_free (quoted);
}
+
+ nm_cmd_line_add_string (cmd, "pty");
+ nm_cmd_line_add_string (cmd, pppoe_arg->str);
+
+ g_string_free (pppoe_arg, TRUE);
} else if (adsl) {
const gchar *protocol = nm_setting_adsl_get_protocol (adsl);
@@ -883,9 +892,14 @@ create_pppd_cmd_line (NMPPPManager *self,
nm_cmd_line_add_string (cmd, "vc-encaps");
} else if (!strcmp (protocol, NM_SETTING_ADSL_PROTOCOL_PPPOE)) {
- nm_cmd_line_add_string (cmd, "plugin");
- nm_cmd_line_add_string (cmd, "rp-pppoe.so");
- nm_cmd_line_add_string (cmd, priv->parent_iface);
+ char *pppoe_arg;
+
+ g_assert (pppoe_binary != NULL);
+
+ pppoe_arg = g_strdup_printf ("%s -I %s", pppoe_binary, priv->parent_iface);
+ nm_cmd_line_add_string (cmd, "pty");
+ nm_cmd_line_add_string (cmd, pppoe_arg);
+ g_free (pppoe_arg);
}
nm_cmd_line_add_string (cmd, "noipdefault");
@@ -950,6 +964,10 @@ create_pppd_cmd_line (NMPPPManager *self,
nm_cmd_line_add_string (cmd, "lcp-echo-interval");
nm_cmd_line_add_int (cmd, nm_setting_ppp_get_lcp_echo_interval (setting));
+ /* Avoid pppd to exit if no traffic going through */
+ nm_cmd_line_add_string (cmd, "idle");
+ nm_cmd_line_add_int (cmd, 0);
+
nm_cmd_line_add_string (cmd, "ipparam");
nm_cmd_line_add_string (cmd, priv->dbus_path);
@@ -983,9 +1001,9 @@ pppoe_fill_defaults (NMSettingPPP *setting)
g_object_set (setting, NM_SETTING_PPP_MRU, (guint32) 1492, NULL);
g_object_set (setting,
- NM_SETTING_PPP_NOAUTH, TRUE,
- NM_SETTING_PPP_NODEFLATE, TRUE,
- NULL);
+ NM_SETTING_PPP_NOAUTH, TRUE,
+ NM_SETTING_PPP_NODEFLATE, TRUE,
+ NULL);
/* FIXME: These commented settings should be set as well, update NMSettingPPP first. */
#if 0
@@ -1070,9 +1088,9 @@ nm_ppp_manager_start (NMPPPManager *manager,
priv->pid = 0;
if (!g_spawn_async (NULL, (char **) ppp_cmd->array->pdata, NULL,
- G_SPAWN_DO_NOT_REAP_CHILD,
- pppd_child_setup,
- NULL, &priv->pid, err)) {
+ G_SPAWN_DO_NOT_REAP_CHILD,
+ pppd_child_setup,
+ NULL, &priv->pid, err)) {
goto out;
}
@@ -1082,7 +1100,7 @@ nm_ppp_manager_start (NMPPPManager *manager,
priv->ppp_timeout_handler = g_timeout_add_seconds (timeout_secs, pppd_timed_out, manager);
priv->act_req = g_object_ref (req);
- out:
+out:
if (s_ppp_created)
g_object_unref (s_ppp);
diff --git a/src/ppp-manager/nm-pppd-plugin.c b/src/ppp-manager/nm-pppd-plugin.c
index e2e5c7099..e6ee86f7a 100644
--- a/src/ppp-manager/nm-pppd-plugin.c
+++ b/src/ppp-manager/nm-pppd-plugin.c
@@ -174,13 +174,13 @@ nm_ip_up (void *data, int arg)
}
hash = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL, value_destroy);
+ NULL, value_destroy);
g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_INTERFACE,
- str_to_gvalue (ifname));
+ str_to_gvalue (ifname));
g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_ADDRESS,
- uint_to_gvalue (opts.ouraddr));
+ uint_to_gvalue (opts.ouraddr));
/* Prefer the peer options remote address first, _unless_ pppd made the
* address up, at which point prefer the local options remote address,
@@ -259,22 +259,22 @@ get_credentials (char *username, char *password)
size_t len;
GError *err = NULL;
- if (username && !password) {
+ if (!password) {
/* pppd is checking pap support; return 1 for supported */
+ g_return_val_if_fail (username, -1);
return 1;
}
+ g_return_val_if_fail (username, -1);
g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), -1);
g_message ("nm-ppp-plugin: (%s): passwd-hook, requesting credentials...", __func__);
- dbus_g_proxy_call (proxy, "NeedSecrets", &err,
- G_TYPE_INVALID,
- G_TYPE_STRING, &my_username,
- G_TYPE_STRING, &my_password,
- G_TYPE_INVALID);
-
- if (err) {
+ if (!dbus_g_proxy_call (proxy, "NeedSecrets", &err,
+ G_TYPE_INVALID,
+ G_TYPE_STRING, &my_username,
+ G_TYPE_STRING, &my_password,
+ G_TYPE_INVALID)) {
g_warning ("nm-ppp-plugin: (%s): could not get secrets: (%d) %s",
__func__,
err ? err->code : -1,
@@ -325,7 +325,9 @@ plugin_init (void)
DBusGConnection *bus;
GError *err = NULL;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
g_message ("nm-ppp-plugin: (%s): initializing", __func__);
diff --git a/src/rdisc/Makefile.am b/src/rdisc/Makefile.am
new file mode 100644
index 000000000..3c6155b9c
--- /dev/null
+++ b/src/rdisc/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = tests
diff --git a/src/rdisc/Makefile.in b/src/rdisc/Makefile.in
new file mode 100644
index 000000000..bee23500b
--- /dev/null
+++ b/src/rdisc/Makefile.in
@@ -0,0 +1,753 @@
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/rdisc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
+ $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/gnome-code-coverage.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CKDB_PATH = @CKDB_PATH@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
+DBUS_LIBS = @DBUS_LIBS@
+DBUS_SYS_DIR = @DBUS_SYS_DIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DHCLIENT_PATH = @DHCLIENT_PATH@
+DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
+DLLTOOL = @DLLTOOL@
+DNSMASQ_PATH = @DNSMASQ_PATH@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GENHTML = @GENHTML@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MAKEFILE = @GLIB_MAKEFILE@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
+GNUTLS_LIBS = @GNUTLS_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUDEV_CFLAGS = @GUDEV_CFLAGS@
+GUDEV_LIBS = @GUDEV_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IPTABLES_PATH = @IPTABLES_PATH@
+IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
+IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
+KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDL = @LIBDL@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
+LIBNL_CFLAGS = @LIBNL_CFLAGS@
+LIBNL_LIBS = @LIBNL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@
+MM_GLIB_LIBS = @MM_GLIB_LIBS@
+MOC = @MOC@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
+NM_MICRO_VERSION = @NM_MICRO_VERSION@
+NM_MINOR_VERSION = @NM_MINOR_VERSION@
+NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@
+NM_VERSION = @NM_VERSION@
+NSS_CFLAGS = @NSS_CFLAGS@
+NSS_LIBS = @NSS_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POLKIT_CFLAGS = @POLKIT_CFLAGS@
+POLKIT_LIBS = @POLKIT_LIBS@
+POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
+PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSTEMD_200_CFLAGS = @SYSTEMD_200_CFLAGS@
+SYSTEMD_200_LIBS = @SYSTEMD_200_LIBS@
+SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@
+SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@
+SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@
+SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@
+SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
+UDEV_BASE_DIR = @UDEV_BASE_DIR@
+USE_NLS = @USE_NLS@
+UUID_CFLAGS = @UUID_CFLAGS@
+UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
+VAPIGEN = @VAPIGEN@
+VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
+VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+nmbinary = @nmbinary@
+nmconfdir = @nmconfdir@
+nmdatadir = @nmdatadir@
+nmrundir = @nmrundir@
+nmstatedir = @nmstatedir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+systemdsystemunitdir = @systemdsystemunitdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+with_dhclient = @with_dhclient@
+with_dhcpcd = @with_dhcpcd@
+with_netconfig = @with_netconfig@
+with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
+SUBDIRS = tests
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/rdisc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/rdisc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/rdisc/nm-fake-rdisc.c b/src/rdisc/nm-fake-rdisc.c
new file mode 100644
index 000000000..bdd207ca4
--- /dev/null
+++ b/src/rdisc/nm-fake-rdisc.c
@@ -0,0 +1,134 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-fake-rdisc.c - Fake implementation of router discovery
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <arpa/inet.h>
+
+#include "nm-fake-rdisc.h"
+
+#include "nm-logging.h"
+
+#define debug(...) nm_log_dbg (LOGD_IP6, __VA_ARGS__)
+#define warning(...) nm_log_warn (LOGD_IP6, __VA_ARGS__)
+#define error(...) nm_log_err (LOGD_IP6, __VA_ARGS__)
+
+#define NM_FAKE_RDISC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_FAKE_RDISC, NMFakeRDiscPrivate))
+
+G_DEFINE_TYPE (NMFakeRDisc, nm_fake_rdisc, NM_TYPE_RDISC)
+
+/******************************************************************/
+
+NMRDisc *
+nm_fake_rdisc_new (int ifindex, const char *ifname)
+{
+ NMRDisc *rdisc = g_object_new (NM_TYPE_FAKE_RDISC, NULL);
+
+ rdisc->ifindex = ifindex;
+ rdisc->ifname = g_strdup (ifname);
+ rdisc->max_addresses = NM_RDISC_MAX_ADDRESSES_DEFAULT;
+ rdisc->rtr_solicitations = NM_RDISC_RTR_SOLICITATIONS_DEFAULT;
+ rdisc->rtr_solicitation_interval = NM_RDISC_RTR_SOLICITATION_INTERVAL_DEFAULT;
+
+ return rdisc;
+}
+
+static void
+delayed_start (NMRDisc *rdisc)
+{
+ int changed =
+ NM_RDISC_CONFIG_GATEWAYS | NM_RDISC_CONFIG_ADDRESSES | NM_RDISC_CONFIG_ROUTES |
+ NM_RDISC_CONFIG_DNS_SERVERS | NM_RDISC_CONFIG_DNS_DOMAINS;
+ debug ("%d", rdisc->dhcp_level);
+
+ g_signal_emit_by_name (
+ rdisc, NM_RDISC_CONFIG_CHANGED, changed);
+}
+
+static void
+start (NMRDisc *rdisc)
+{
+ g_idle_add ((GSourceFunc) (delayed_start), rdisc);
+}
+
+/******************************************************************/
+
+static void
+nm_fake_rdisc_init (NMFakeRDisc *fake_rdisc)
+{
+ NMRDisc *rdisc = NM_RDISC (fake_rdisc);
+ NMRDiscGateway gateway;
+ NMRDiscAddress address;
+ NMRDiscRoute route;
+ NMRDiscDNSServer dns_server;
+ NMRDiscDNSDomain dns_domain;
+
+ rdisc->dhcp_level = NM_RDISC_DHCP_LEVEL_NONE;
+
+ memset (&gateway, 0, sizeof (gateway));
+ inet_pton (AF_INET6, "fe80::1", &gateway.address);
+ g_array_append_val (rdisc->gateways, gateway);
+ inet_pton (AF_INET6, "fe80::2", &gateway.address);
+ g_array_append_val (rdisc->gateways, gateway);
+ inet_pton (AF_INET6, "fe80::3", &gateway.address);
+ g_array_append_val (rdisc->gateways, gateway);
+
+ memset (&address, 0, sizeof (address));
+ inet_pton (AF_INET6, "2001:db8:a:a::1", &address.address);
+ g_array_append_val (rdisc->addresses, address);
+ inet_pton (AF_INET6, "2001:db8:a:a::2", &address.address);
+ g_array_append_val (rdisc->addresses, address);
+ inet_pton (AF_INET6, "2001:db8:f:f::1", &address.address);
+ g_array_append_val (rdisc->addresses, address);
+
+ memset (&route, 0, sizeof (route));
+ route.plen = 64;
+ inet_pton (AF_INET6, "2001:db8:a:a::", &route.network);
+ g_array_append_val (rdisc->routes, route);
+ inet_pton (AF_INET6, "2001:db8:b:b::", &route.network);
+ g_array_append_val (rdisc->routes, route);
+
+ memset (&dns_server, 0, sizeof (dns_server));
+ inet_pton (AF_INET6, "2001:db8:c:c::1", &dns_server.address);
+ g_array_append_val (rdisc->dns_servers, dns_server);
+ inet_pton (AF_INET6, "2001:db8:c:c::2", &dns_server.address);
+ g_array_append_val (rdisc->dns_servers, dns_server);
+ inet_pton (AF_INET6, "2001:db8:c:c::3", &dns_server.address);
+ g_array_append_val (rdisc->dns_servers, dns_server);
+ inet_pton (AF_INET6, "2001:db8:c:c::4", &dns_server.address);
+ g_array_append_val (rdisc->dns_servers, dns_server);
+ inet_pton (AF_INET6, "2001:db8:c:c::5", &dns_server.address);
+ g_array_append_val (rdisc->dns_servers, dns_server);
+
+ memset (&dns_domain, 0, sizeof (dns_domain));
+ dns_domain.domain = g_strdup ("example.net");
+ g_array_append_val (rdisc->dns_domains, dns_domain);
+ dns_domain.domain = g_strdup ("example.com");
+ g_array_append_val (rdisc->dns_domains, dns_domain);
+ dns_domain.domain = g_strdup ("example.org");
+ g_array_append_val (rdisc->dns_domains, dns_domain);
+}
+
+static void
+nm_fake_rdisc_class_init (NMFakeRDiscClass *klass)
+{
+ NMRDiscClass *rdisc_class = NM_RDISC_CLASS (klass);
+
+ rdisc_class->start = start;
+}
diff --git a/src/rdisc/nm-fake-rdisc.h b/src/rdisc/nm-fake-rdisc.h
new file mode 100644
index 000000000..248283b22
--- /dev/null
+++ b/src/rdisc/nm-fake-rdisc.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-fake-rdisc.h - Fake implementation of router discovery
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_FAKE_RDISC_H
+#define NM_FAKE_RDISC_H
+
+#include "nm-rdisc.h"
+
+#define NM_TYPE_FAKE_RDISC (nm_fake_rdisc_get_type ())
+#define NM_FAKE_RDISC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_FAKE_RDISC, NMFakeRDisc))
+#define NM_FAKE_RDISC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_FAKE_RDISC, NMFakeRDiscClass))
+#define NM_IS_FAKE_RDISC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_FAKE_RDISC))
+#define NM_IS_FAKE_RDISC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_FAKE_RDISC))
+#define NM_FAKE_RDISC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_FAKE_RDISC, NMFakeRDiscClass))
+
+/******************************************************************/
+
+typedef struct {
+ NMRDisc parent;
+} NMFakeRDisc;
+
+typedef struct {
+ NMRDiscClass parent;
+} NMFakeRDiscClass;
+
+/******************************************************************/
+
+GType nm_fake_rdisc_get_type (void);
+
+NMRDisc *nm_fake_rdisc_new (int ifindex, const char *ifname);
+
+#endif /* NM_FAKE_RDISC_H */
diff --git a/src/rdisc/nm-lndp-rdisc.c b/src/rdisc/nm-lndp-rdisc.c
new file mode 100644
index 000000000..cf0267d1c
--- /dev/null
+++ b/src/rdisc/nm-lndp-rdisc.c
@@ -0,0 +1,700 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-lndp-rdisc.c - Router discovery implementation using libndp
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <arpa/inet.h>
+/* stdarg.h included because of a bug in ndp.h */
+#include <stdarg.h>
+#include <ndp.h>
+
+#include "nm-lndp-rdisc.h"
+
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
+
+#define debug(...) nm_log_dbg (LOGD_IP6, __VA_ARGS__)
+#define warning(...) nm_log_warn (LOGD_IP6, __VA_ARGS__)
+#define error(...) nm_log_err (LOGD_IP6, __VA_ARGS__)
+
+typedef struct {
+ struct ndp *ndp;
+
+ guint send_rs_id;
+ GIOChannel *event_channel;
+ guint event_id;
+ guint timeout_id;
+
+ int solicitations_left;
+} NMLNDPRDiscPrivate;
+
+#define NM_LNDP_RDISC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_LNDP_RDISC, NMLNDPRDiscPrivate))
+
+G_DEFINE_TYPE (NMLNDPRDisc, nm_lndp_rdisc, NM_TYPE_RDISC)
+
+/******************************************************************/
+
+static inline gint32
+ipv6_sysctl_get (const char *ifname, const char *property, gint32 defval)
+{
+ return nm_platform_sysctl_get_int32 (nm_utils_ip6_property_path (ifname, property), defval);
+}
+
+NMRDisc *
+nm_lndp_rdisc_new (int ifindex, const char *ifname)
+{
+ NMRDisc *rdisc;
+ NMLNDPRDiscPrivate *priv;
+ int error;
+
+ rdisc = g_object_new (NM_TYPE_LNDP_RDISC, NULL);
+
+ rdisc->ifindex = ifindex;
+ rdisc->ifname = g_strdup (ifname);
+
+ rdisc->max_addresses = ipv6_sysctl_get (ifname, "max_addresses",
+ NM_RDISC_MAX_ADDRESSES_DEFAULT);
+ rdisc->rtr_solicitations = ipv6_sysctl_get (ifname, "router_solicitations",
+ NM_RDISC_RTR_SOLICITATIONS_DEFAULT);
+ rdisc->rtr_solicitation_interval = ipv6_sysctl_get (ifname, "router_solicitation_interval",
+ NM_RDISC_RTR_SOLICITATION_INTERVAL_DEFAULT);
+
+ priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+ error = ndp_open (&priv->ndp);
+ if (error != 0) {
+ g_object_unref (rdisc);
+ debug ("(%s): error creating socket for NDP; errno=%d", ifname, -error);
+ return NULL;
+ }
+ return rdisc;
+}
+
+static gboolean
+add_gateway (NMRDisc *rdisc, const NMRDiscGateway *new)
+{
+ int i;
+
+ for (i = 0; i < rdisc->gateways->len; i++) {
+ NMRDiscGateway *item = &g_array_index (rdisc->gateways, NMRDiscGateway, i);
+
+ if (IN6_ARE_ADDR_EQUAL (&item->address, &new->address)) {
+ if (item->preference != new->preference) {
+ g_array_remove_index (rdisc->gateways, i--);
+ continue;
+ }
+ memcpy (item, new, sizeof (*new));
+ return FALSE;
+ }
+
+ /* Put before less preferable gateways. */
+ if (item->preference < new->preference)
+ break;
+ }
+
+ g_array_insert_val (rdisc->gateways, i, *new);
+ return TRUE;
+}
+
+static gboolean
+add_address (NMRDisc *rdisc, const NMRDiscAddress *new)
+{
+ int i;
+
+ for (i = 0; i < rdisc->addresses->len; i++) {
+ NMRDiscAddress *item = &g_array_index (rdisc->addresses, NMRDiscAddress, i);
+
+ if (IN6_ARE_ADDR_EQUAL (&item->address, &new->address)) {
+ gboolean changed = item->timestamp + item->lifetime != new->timestamp + new->lifetime ||
+ item->timestamp + item->preferred != new->timestamp + new->preferred;
+
+ *item = *new;
+ return changed;
+ }
+ }
+
+ /* we create at most max_addresses autoconf addresses. This is different from
+ * what the kernel does, because it considers *all* addresses (including
+ * static and other temporary addresses).
+ **/
+ if (rdisc->max_addresses && rdisc->addresses->len >= rdisc->max_addresses)
+ return FALSE;
+
+ g_array_insert_val (rdisc->addresses, i, *new);
+ return TRUE;
+}
+
+static gboolean
+add_route (NMRDisc *rdisc, const NMRDiscRoute *new)
+{
+ int i;
+
+ for (i = 0; i < rdisc->routes->len; i++) {
+ NMRDiscRoute *item = &g_array_index (rdisc->routes, NMRDiscRoute, i);
+
+ if (IN6_ARE_ADDR_EQUAL (&item->network, &new->network) && item->plen == new->plen) {
+ if (item->preference != new->preference) {
+ g_array_remove_index (rdisc->routes, i--);
+ continue;
+ }
+ memcpy (item, new, sizeof (*new));
+ return FALSE;
+ }
+
+ /* Put before less preferable routes. */
+ if (item->preference < new->preference)
+ break;
+ }
+
+ g_array_insert_val (rdisc->routes, i, *new);
+ return TRUE;
+}
+
+static gboolean
+add_dns_server (NMRDisc *rdisc, const NMRDiscDNSServer *new)
+{
+ int i;
+
+ for (i = 0; i < rdisc->dns_servers->len; i++) {
+ NMRDiscDNSServer *item = &g_array_index (rdisc->dns_servers, NMRDiscDNSServer, i);
+
+ if (IN6_ARE_ADDR_EQUAL (&item->address, &new->address)) {
+ gboolean changed = item->timestamp != new->timestamp ||
+ item->lifetime != new->lifetime;
+ if (changed) {
+ item->timestamp = new->timestamp;
+ item->lifetime = new->lifetime;
+ }
+ return changed;
+ }
+ }
+
+ /* DNS server should no longer be used */
+ if (new->lifetime == 0)
+ return FALSE;
+
+ g_array_insert_val (rdisc->dns_servers, i, *new);
+ return TRUE;
+}
+
+/* Copies new->domain if 'new' is added to the dns_domains list */
+static gboolean
+add_dns_domain (NMRDisc *rdisc, const NMRDiscDNSDomain *new)
+{
+ NMRDiscDNSDomain *item;
+ int i;
+
+ for (i = 0; i < rdisc->dns_domains->len; i++) {
+ item = &g_array_index (rdisc->dns_domains, NMRDiscDNSDomain, i);
+
+ if (!g_strcmp0 (item->domain, new->domain)) {
+ gboolean changed = item->timestamp != new->timestamp ||
+ item->lifetime != new->lifetime;
+ if (changed) {
+ item->timestamp = new->timestamp;
+ item->lifetime = new->lifetime;
+ }
+ return changed;
+ }
+ }
+
+ /* Domain should no longer be used */
+ if (new->lifetime == 0)
+ return FALSE;
+
+ g_array_insert_val (rdisc->dns_domains, i, *new);
+ item = &g_array_index (rdisc->dns_domains, NMRDiscDNSDomain, i);
+ item->domain = g_strdup (new->domain);
+ return TRUE;
+}
+
+static gboolean
+send_rs (NMRDisc *rdisc)
+{
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+ struct ndp_msg *msg;
+ int error;
+
+ error = ndp_msg_new (&msg, NDP_MSG_RS);
+ g_assert (!error);
+ ndp_msg_ifindex_set (msg, rdisc->ifindex);
+
+ debug ("(%s): sending router solicitation", rdisc->ifname);
+
+ error = ndp_msg_send (priv->ndp, msg);
+ if (error)
+ error ("(%s): cannot send router solicitation: %d.", rdisc->ifname, error);
+ else
+ priv->solicitations_left--;
+
+ ndp_msg_destroy (msg);
+
+ if (priv->solicitations_left > 0) {
+ debug ("(%s): scheduling router solicitation retry in %d seconds.",
+ rdisc->ifname, rdisc->rtr_solicitation_interval);
+ priv->send_rs_id = g_timeout_add_seconds (rdisc->rtr_solicitation_interval,
+ (GSourceFunc) send_rs, rdisc);
+ } else {
+ debug ("(%s): did not receive a router advertisement after %d solicitations.",
+ rdisc->ifname, rdisc->rtr_solicitations);
+ priv->send_rs_id = 0;
+ }
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+solicit (NMRDisc *rdisc)
+{
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+
+ if (!priv->send_rs_id) {
+ debug ("(%s): scheduling router solicitation.", rdisc->ifname);
+ priv->send_rs_id = g_idle_add ((GSourceFunc) send_rs, rdisc);
+ priv->solicitations_left = rdisc->rtr_solicitations;
+ }
+}
+
+static void
+clean_gateways (NMRDisc *rdisc, guint32 now, NMRDiscConfigMap *changed, guint32 *nextevent)
+{
+ int i;
+
+ for (i = 0; i < rdisc->gateways->len; i++) {
+ NMRDiscGateway *item = &g_array_index (rdisc->gateways, NMRDiscGateway, i);
+ guint64 expiry = (guint64) item->timestamp + item->lifetime;
+
+ if (item->lifetime == G_MAXUINT32)
+ continue;
+
+ if (now >= expiry) {
+ g_array_remove_index (rdisc->gateways, i--);
+ *changed |= NM_RDISC_CONFIG_GATEWAYS;
+ } else if (*nextevent > expiry)
+ *nextevent = expiry;
+ }
+}
+
+static void
+clean_addresses (NMRDisc *rdisc, guint32 now, NMRDiscConfigMap *changed, guint32 *nextevent)
+{
+ int i;
+
+ for (i = 0; i < rdisc->addresses->len; i++) {
+ NMRDiscAddress *item = &g_array_index (rdisc->addresses, NMRDiscAddress, i);
+ guint64 expiry = (guint64) item->timestamp + item->lifetime;
+
+ if (item->lifetime == G_MAXUINT32)
+ continue;
+
+ if (now >= expiry) {
+ g_array_remove_index (rdisc->addresses, i--);
+ *changed |= NM_RDISC_CONFIG_ADDRESSES;
+ } else if (*nextevent > expiry)
+ *nextevent = expiry;
+ }
+}
+
+static void
+clean_routes (NMRDisc *rdisc, guint32 now, NMRDiscConfigMap *changed, guint32 *nextevent)
+{
+ int i;
+
+ for (i = 0; i < rdisc->routes->len; i++) {
+ NMRDiscRoute *item = &g_array_index (rdisc->routes, NMRDiscRoute, i);
+ guint64 expiry = (guint64) item->timestamp + item->lifetime;
+
+ if (item->lifetime == G_MAXUINT32)
+ continue;
+
+ if (now >= expiry) {
+ g_array_remove_index (rdisc->routes, i--);
+ *changed |= NM_RDISC_CONFIG_ROUTES;
+ } else if (*nextevent > expiry)
+ *nextevent = expiry;
+ }
+}
+
+static void
+clean_dns_servers (NMRDisc *rdisc, guint32 now, NMRDiscConfigMap *changed, guint32 *nextevent)
+{
+ int i;
+
+ for (i = 0; i < rdisc->dns_servers->len; i++) {
+ NMRDiscDNSServer *item = &g_array_index (rdisc->dns_servers, NMRDiscDNSServer, i);
+ guint64 expiry = (guint64) item->timestamp + item->lifetime;
+ guint64 refresh = (guint64) item->timestamp + item->lifetime / 2;
+
+ if (item->lifetime == G_MAXUINT32)
+ continue;
+
+ if (now >= expiry) {
+ g_array_remove_index (rdisc->dns_servers, i--);
+ *changed |= NM_RDISC_CONFIG_DNS_SERVERS;
+ } else if (now >= refresh)
+ solicit (rdisc);
+ else if (*nextevent > refresh)
+ *nextevent = refresh;
+ }
+}
+
+static void
+clean_dns_domains (NMRDisc *rdisc, guint32 now, NMRDiscConfigMap *changed, guint32 *nextevent)
+{
+ int i;
+
+ for (i = 0; i < rdisc->dns_domains->len; i++) {
+ NMRDiscDNSDomain *item = &g_array_index (rdisc->dns_domains, NMRDiscDNSDomain, i);
+ guint64 expiry = (guint64) item->timestamp + item->lifetime;
+ guint64 refresh = (guint64) item->timestamp + item->lifetime / 2;
+
+ if (item->lifetime == G_MAXUINT32)
+ continue;
+
+ if (now >= expiry) {
+ g_free (item->domain);
+ g_array_remove_index (rdisc->dns_domains, i--);
+ *changed |= NM_RDISC_CONFIG_DNS_DOMAINS;
+ } else if (now >= refresh)
+ solicit (rdisc);
+ else if (*nextevent > refresh)
+ *nextevent = refresh;
+ }
+}
+
+static gboolean timeout_cb (gpointer user_data);
+
+static void
+check_timestamps (NMRDisc *rdisc, guint32 now, NMRDiscConfigMap changed)
+{
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+ /* Use a magic date in the distant future (~68 years) */
+ guint32 never = G_MAXINT32;
+ guint32 nextevent = never;
+
+ if (priv->timeout_id) {
+ g_source_remove (priv->timeout_id);
+ priv->timeout_id = 0;
+ }
+
+ clean_gateways (rdisc, now, &changed, &nextevent);
+ clean_addresses (rdisc, now, &changed, &nextevent);
+ clean_routes (rdisc, now, &changed, &nextevent);
+ clean_dns_servers (rdisc, now, &changed, &nextevent);
+ clean_dns_domains (rdisc, now, &changed, &nextevent);
+
+ if (changed)
+ g_signal_emit_by_name (rdisc, NM_RDISC_CONFIG_CHANGED, changed);
+
+ if (nextevent != never) {
+ g_return_if_fail (nextevent > now);
+ debug ("(%s): scheduling next now/lifetime check: %u seconds",
+ rdisc->ifname, nextevent - now);
+ priv->timeout_id = g_timeout_add_seconds (nextevent - now, timeout_cb, rdisc);
+ }
+}
+
+static gboolean
+timeout_cb (gpointer user_data)
+{
+ check_timestamps (user_data, nm_utils_get_monotonic_timestamp_s (), 0);
+
+ return TRUE;
+}
+
+static NMRDiscPreference
+translate_preference (enum ndp_route_preference preference)
+{
+ switch (preference) {
+ case NDP_ROUTE_PREF_LOW:
+ return NM_RDISC_PREFERENCE_LOW;
+ case NDP_ROUTE_PREF_MEDIUM:
+ return NM_RDISC_PREFERENCE_MEDIUM;
+ case NDP_ROUTE_PREF_HIGH:
+ return NM_RDISC_PREFERENCE_HIGH;
+ default:
+ return NM_RDISC_PREFERENCE_INVALID;
+ }
+}
+
+static void
+fill_address_from_mac (struct in6_addr *address, const char *mac)
+{
+ unsigned char *identifier = address->s6_addr + 8;
+
+ if (!mac)
+ return;
+
+ /* Translate 48-bit MAC address to a 64-bit modified interface identifier
+ * and write it to the second half of the IPv6 address.
+ *
+ * See http://tools.ietf.org/html/rfc3513#page-21
+ */
+ memcpy (identifier, mac, 3);
+ identifier[0] ^= 0x02;
+ identifier[3] = 0xff;
+ identifier[4] = 0xfe;
+ memcpy (identifier + 5, mac + 3, 3);
+}
+
+static int
+receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
+{
+ NMRDisc *rdisc = (NMRDisc *) user_data;
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+ NMRDiscConfigMap changed = 0;
+ size_t lladdrlen = 0;
+ const char *lladdr = NULL;
+ struct ndp_msgra *msgra = ndp_msgra (msg);
+ NMRDiscGateway gateway;
+ guint32 now = nm_utils_get_monotonic_timestamp_s ();
+ int offset;
+ int hop_limit;
+
+ if (rdisc->lladdr)
+ lladdr = g_bytes_get_data (rdisc->lladdr, &lladdrlen);
+
+ /* Router discovery is subject to the following RFC documents:
+ *
+ * http://tools.ietf.org/html/rfc4861
+ * http://tools.ietf.org/html/rfc4862
+ *
+ * The biggest difference from good old DHCP is that all configuration
+ * items have their own lifetimes and they are merged from various
+ * sources. Router discovery is *not* contract-based, so there is *no*
+ * single time when the configuration is finished and updates can
+ * come at any time.
+ */
+ debug ("(%s): received router advertisement at %u", rdisc->ifname, now);
+
+ if (priv->send_rs_id) {
+ g_source_remove (priv->send_rs_id);
+ priv->send_rs_id = 0;
+ }
+
+ /* DHCP level:
+ *
+ * The problem with DHCP level is what to do if subsequent
+ * router advertisements carry different flags. Currently we just
+ * rewrite the flag with every inbound RA.
+ */
+ {
+ NMRDiscDHCPLevel dhcp_level;
+
+ if (ndp_msgra_flag_managed (msgra))
+ dhcp_level = NM_RDISC_DHCP_LEVEL_MANAGED;
+ else if (ndp_msgra_flag_other (msgra))
+ dhcp_level = NM_RDISC_DHCP_LEVEL_OTHERCONF;
+ else
+ dhcp_level = NM_RDISC_DHCP_LEVEL_NONE;
+
+ if (dhcp_level != rdisc->dhcp_level) {
+ rdisc->dhcp_level = dhcp_level;
+ changed |= NM_RDISC_CONFIG_DHCP_LEVEL;
+ }
+ }
+
+ /* Default gateway:
+ *
+ * Subsequent router advertisements can represent new default gateways
+ * on the network. We should present all of them in router preference
+ * order.
+ */
+ memset (&gateway, 0, sizeof (gateway));
+ gateway.address = *ndp_msg_addrto (msg);
+ gateway.timestamp = now;
+ gateway.lifetime = ndp_msgra_router_lifetime (msgra);
+ gateway.preference = translate_preference (ndp_msgra_route_preference (msgra));
+ if (add_gateway (rdisc, &gateway))
+ changed |= NM_RDISC_CONFIG_GATEWAYS;
+
+ /* Addresses & Routes */
+ ndp_msg_opt_for_each_offset (offset, msg, NDP_MSG_OPT_PREFIX) {
+ NMRDiscRoute route;
+ NMRDiscAddress address;
+
+ /* Device route */
+ memset (&route, 0, sizeof (route));
+ route.plen = ndp_msg_opt_prefix_len (msg, offset);
+ nm_utils_ip6_address_clear_host_address (&route.network, ndp_msg_opt_prefix (msg, offset), route.plen);
+ route.timestamp = now;
+ if (ndp_msg_opt_prefix_flag_on_link (msg, offset)) {
+ route.lifetime = ndp_msg_opt_prefix_valid_time (msg, offset);
+ if (add_route (rdisc, &route))
+ changed |= NM_RDISC_CONFIG_ROUTES;
+ }
+
+ /* Address */
+ if (ndp_msg_opt_prefix_flag_auto_addr_conf (msg, offset)) {
+ if (route.plen == 64 && lladdrlen == 6) {
+ memset (&address, 0, sizeof (address));
+ address.address = route.network;
+ address.timestamp = now;
+ address.lifetime = ndp_msg_opt_prefix_valid_time (msg, offset);
+ address.preferred = ndp_msg_opt_prefix_preferred_time (msg, offset);
+ if (address.preferred > address.lifetime)
+ address.preferred = address.lifetime;
+
+ fill_address_from_mac (&address.address, lladdr);
+
+ if (add_address (rdisc, &address))
+ changed |= NM_RDISC_CONFIG_ADDRESSES;
+ }
+ }
+ }
+ ndp_msg_opt_for_each_offset(offset, msg, NDP_MSG_OPT_ROUTE) {
+ NMRDiscRoute route;
+
+ /* Routers through this particular gateway */
+ memset (&route, 0, sizeof (route));
+ route.gateway = gateway.address;
+ route.plen = ndp_msg_opt_route_prefix_len (msg, offset);
+ nm_utils_ip6_address_clear_host_address (&route.network, ndp_msg_opt_route_prefix (msg, offset), route.plen);
+ route.timestamp = now;
+ route.lifetime = ndp_msg_opt_route_lifetime (msg, offset);
+ route.preference = translate_preference (ndp_msg_opt_route_preference (msg, offset));
+ if (add_route (rdisc, &route))
+ changed |= NM_RDISC_CONFIG_ROUTES;
+ }
+
+ /* DNS information */
+ ndp_msg_opt_for_each_offset(offset, msg, NDP_MSG_OPT_RDNSS) {
+ static struct in6_addr *addr;
+ int addr_index;
+
+ ndp_msg_opt_rdnss_for_each_addr (addr, addr_index, msg, offset) {
+ NMRDiscDNSServer dns_server;
+
+ memset (&dns_server, 0, sizeof (dns_server));
+ dns_server.address = *addr;
+ dns_server.timestamp = now;
+ dns_server.lifetime = ndp_msg_opt_rdnss_lifetime (msg, offset);
+ /* Pad the lifetime somewhat to give a bit of slack in cases
+ * where one RA gets lost or something (which can happen on unreliable
+ * links like WiFi where certain types of frames are not retransmitted).
+ * Note that 0 has special meaning and is therefore not adjusted.
+ */
+ if (dns_server.lifetime && dns_server.lifetime < 7200)
+ dns_server.lifetime = 7200;
+ if (add_dns_server (rdisc, &dns_server))
+ changed |= NM_RDISC_CONFIG_DNS_SERVERS;
+ }
+ }
+ ndp_msg_opt_for_each_offset(offset, msg, NDP_MSG_OPT_DNSSL) {
+ char *domain;
+ int domain_index;
+
+ ndp_msg_opt_dnssl_for_each_domain (domain, domain_index, msg, offset) {
+ NMRDiscDNSDomain dns_domain;
+
+ memset (&dns_domain, 0, sizeof (dns_domain));
+ dns_domain.domain = domain;
+ dns_domain.timestamp = now;
+ dns_domain.lifetime = ndp_msg_opt_rdnss_lifetime (msg, offset);
+ /* Pad the lifetime somewhat to give a bit of slack in cases
+ * where one RA gets lost or something (which can happen on unreliable
+ * links like WiFi where certain types of frames are not retransmitted).
+ * Note that 0 has special meaning and is therefore not adjusted.
+ */
+ if (dns_domain.lifetime && dns_domain.lifetime < 7200)
+ dns_domain.lifetime = 7200;
+ if (add_dns_domain (rdisc, &dns_domain))
+ changed |= NM_RDISC_CONFIG_DNS_DOMAINS;
+ }
+ }
+
+ hop_limit = ndp_msgra_curhoplimit (msgra);
+ if (rdisc->hop_limit != hop_limit) {
+ rdisc->hop_limit = hop_limit;
+ changed |= NM_RDISC_CONFIG_HOP_LIMIT;
+ }
+
+ check_timestamps (rdisc, now, changed);
+
+ return 0;
+}
+
+static void
+process_events (NMRDisc *rdisc)
+{
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+
+ debug ("(%s): processing libndp events.", rdisc->ifname);
+ ndp_callall_eventfd_handler (priv->ndp);
+}
+
+static gboolean
+event_ready (GIOChannel *source, GIOCondition condition, NMRDisc *rdisc)
+{
+ process_events (rdisc);
+
+ return TRUE;
+}
+
+static void
+start (NMRDisc *rdisc)
+{
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+ int fd = ndp_get_eventfd (priv->ndp);
+
+ priv->event_channel = g_io_channel_unix_new (fd);
+ priv->event_id = g_io_add_watch (priv->event_channel, G_IO_IN, (GIOFunc) event_ready, rdisc);
+
+ /* Flush any pending messages to avoid using obsolete information */
+ process_events (rdisc);
+
+ ndp_msgrcv_handler_register (priv->ndp, &receive_ra, NDP_MSG_RA, rdisc->ifindex, rdisc);
+ solicit (rdisc);
+}
+
+/******************************************************************/
+
+static void
+nm_lndp_rdisc_init (NMLNDPRDisc *lndp_rdisc)
+{
+}
+
+static void
+nm_lndp_rdisc_finalize (GObject *object)
+{
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (object);
+
+ if (priv->send_rs_id)
+ g_source_remove (priv->send_rs_id);
+ if (priv->timeout_id)
+ g_source_remove (priv->timeout_id);
+ if (priv->event_channel)
+ g_io_channel_unref (priv->event_channel);
+ if (priv->event_id)
+ g_source_remove (priv->event_id);
+
+ if (priv->ndp)
+ ndp_close (priv->ndp);
+}
+
+static void
+nm_lndp_rdisc_class_init (NMLNDPRDiscClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMRDiscClass *rdisc_class = NM_RDISC_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMLNDPRDiscPrivate));
+
+ object_class->finalize = nm_lndp_rdisc_finalize;
+ rdisc_class->start = start;
+}
diff --git a/src/rdisc/nm-lndp-rdisc.h b/src/rdisc/nm-lndp-rdisc.h
new file mode 100644
index 000000000..eb6a1df6d
--- /dev/null
+++ b/src/rdisc/nm-lndp-rdisc.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-lndp-rdisc.h - Implementation of router discovery using libndp
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_LNDP_RDISC_H
+#define NM_LNDP_RDISC_H
+
+#include "nm-rdisc.h"
+
+#define NM_TYPE_LNDP_RDISC (nm_lndp_rdisc_get_type ())
+#define NM_LNDP_RDISC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_LNDP_RDISC, NMLNDPRDisc))
+#define NM_LNDP_RDISC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_LNDP_RDISC, NMLNDPRDiscClass))
+#define NM_IS_LNDP_RDISC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_LNDP_RDISC))
+#define NM_IS_LNDP_RDISC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_LNDP_RDISC))
+#define NM_LNDP_RDISC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_LNDP_RDISC, NMLNDPRDiscClass))
+
+/******************************************************************/
+
+typedef struct {
+ NMRDisc parent;
+} NMLNDPRDisc;
+
+typedef struct {
+ NMRDiscClass parent;
+} NMLNDPRDiscClass;
+
+/******************************************************************/
+
+GType nm_lndp_rdisc_get_type (void);
+
+NMRDisc *nm_lndp_rdisc_new (int ifindex, const char *ifname);
+
+#endif /* NM_LNDP_RDISC_H */
diff --git a/src/rdisc/nm-rdisc.c b/src/rdisc/nm-rdisc.c
new file mode 100644
index 000000000..1682924c2
--- /dev/null
+++ b/src/rdisc/nm-rdisc.c
@@ -0,0 +1,191 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-rdisc.c - Perform IPv6 router discovery
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#include <stdlib.h>
+#include <arpa/inet.h>
+
+#include "nm-rdisc.h"
+
+#include "nm-logging.h"
+#include "nm-utils.h"
+
+#define debug(...) nm_log_dbg (LOGD_IP6, __VA_ARGS__)
+
+G_DEFINE_TYPE (NMRDisc, nm_rdisc, G_TYPE_OBJECT)
+
+enum {
+ CONFIG_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/******************************************************************/
+
+void
+nm_rdisc_set_lladdr (NMRDisc *rdisc, const char *addr, size_t addrlen)
+{
+ if (rdisc->lladdr)
+ g_bytes_unref (rdisc->lladdr);
+ rdisc->lladdr = addr ? g_bytes_new (addr, addrlen) : NULL;
+}
+
+void
+nm_rdisc_start (NMRDisc *rdisc)
+{
+ NMRDiscClass *klass = NM_RDISC_GET_CLASS (rdisc);
+
+ g_assert (klass->start);
+
+ debug ("(%s): starting router discovery: %d", rdisc->ifname, rdisc->ifindex);
+
+ if (klass->start)
+ klass->start (rdisc);
+}
+
+#define CONFIG_MAP_MAX_STR 7
+
+static void
+config_map_to_string (NMRDiscConfigMap map, char *p)
+{
+ if (map & NM_RDISC_CONFIG_DHCP_LEVEL)
+ *p++ = 'd';
+ if (map & NM_RDISC_CONFIG_GATEWAYS)
+ *p++ = 'G';
+ if (map & NM_RDISC_CONFIG_ADDRESSES)
+ *p++ = 'A';
+ if (map & NM_RDISC_CONFIG_ROUTES)
+ *p++ = 'R';
+ if (map & NM_RDISC_CONFIG_DNS_SERVERS)
+ *p++ = 'S';
+ if (map & NM_RDISC_CONFIG_DNS_DOMAINS)
+ *p++ = 'D';
+ *p = '\0';
+}
+
+static const char *
+dhcp_level_to_string (NMRDiscDHCPLevel dhcp_level)
+{
+ switch (dhcp_level) {
+ case NM_RDISC_DHCP_LEVEL_NONE:
+ return "none";
+ case NM_RDISC_DHCP_LEVEL_OTHERCONF:
+ return "otherconf";
+ case NM_RDISC_DHCP_LEVEL_MANAGED:
+ return "managed";
+ default:
+ return "INVALID";
+ }
+}
+
+#define expiry(item) (item->timestamp + item->lifetime)
+
+static void
+config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed)
+{
+ int i;
+ char changedstr[CONFIG_MAP_MAX_STR];
+ char addrstr[INET6_ADDRSTRLEN];
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_IP6)) {
+ config_map_to_string (changed, changedstr);
+ debug ("(%s): router discovery configuration changed [%s]:", rdisc->ifname, changedstr);
+ debug (" dhcp-level %s", dhcp_level_to_string (rdisc->dhcp_level));
+ for (i = 0; i < rdisc->gateways->len; i++) {
+ NMRDiscGateway *gateway = &g_array_index (rdisc->gateways, NMRDiscGateway, i);
+
+ inet_ntop (AF_INET6, &gateway->address, addrstr, sizeof (addrstr));
+ debug (" gateway %s pref %d exp %u", addrstr, gateway->preference, expiry (gateway));
+ }
+ for (i = 0; i < rdisc->addresses->len; i++) {
+ NMRDiscAddress *address = &g_array_index (rdisc->addresses, NMRDiscAddress, i);
+
+ inet_ntop (AF_INET6, &address->address, addrstr, sizeof (addrstr));
+ debug (" address %s exp %u", addrstr, expiry (address));
+ }
+ for (i = 0; i < rdisc->routes->len; i++) {
+ NMRDiscRoute *route = &g_array_index (rdisc->routes, NMRDiscRoute, i);
+
+ inet_ntop (AF_INET6, &route->network, addrstr, sizeof (addrstr));
+ debug (" route %s/%d via %s pref %d exp %u", addrstr, route->plen,
+ nm_utils_inet6_ntop (&route->gateway, NULL), route->preference,
+ expiry (route));
+ }
+ for (i = 0; i < rdisc->dns_servers->len; i++) {
+ NMRDiscDNSServer *dns_server = &g_array_index (rdisc->dns_servers, NMRDiscDNSServer, i);
+
+ inet_ntop (AF_INET6, &dns_server->address, addrstr, sizeof (addrstr));
+ debug (" dns_server %s exp %u", addrstr, expiry (dns_server));
+ }
+ for (i = 0; i < rdisc->dns_domains->len; i++) {
+ NMRDiscDNSDomain *dns_domain = &g_array_index (rdisc->dns_domains, NMRDiscDNSDomain, i);
+
+ debug (" dns_domain %s exp %u", dns_domain->domain, expiry (dns_domain));
+ }
+ }
+}
+
+/******************************************************************/
+
+static void
+nm_rdisc_init (NMRDisc *rdisc)
+{
+ rdisc->gateways = g_array_new (FALSE, FALSE, sizeof (NMRDiscGateway));
+ rdisc->addresses = g_array_new (FALSE, FALSE, sizeof (NMRDiscAddress));
+ rdisc->routes = g_array_new (FALSE, FALSE, sizeof (NMRDiscRoute));
+ rdisc->dns_servers = g_array_new (FALSE, FALSE, sizeof (NMRDiscDNSServer));
+ rdisc->dns_domains = g_array_new (FALSE, FALSE, sizeof (NMRDiscDNSDomain));
+ rdisc->lladdr = NULL;
+ rdisc->hop_limit = 64;
+}
+
+static void
+nm_rdisc_finalize (GObject *object)
+{
+ NMRDisc *rdisc = NM_RDISC (object);
+
+ g_free (rdisc->ifname);
+ g_array_unref (rdisc->gateways);
+ g_array_unref (rdisc->addresses);
+ g_array_unref (rdisc->routes);
+ g_array_unref (rdisc->dns_servers);
+ g_array_unref (rdisc->dns_domains);
+
+ if (rdisc->lladdr)
+ g_bytes_unref (rdisc->lladdr);
+}
+
+static void
+nm_rdisc_class_init (NMRDiscClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = nm_rdisc_finalize;
+
+ klass->config_changed = config_changed;
+
+ signals[CONFIG_CHANGED] = g_signal_new (
+ NM_RDISC_CONFIG_CHANGED,
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMRDiscClass, config_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_INT);
+}
diff --git a/src/rdisc/nm-rdisc.h b/src/rdisc/nm-rdisc.h
new file mode 100644
index 000000000..fba06bc21
--- /dev/null
+++ b/src/rdisc/nm-rdisc.h
@@ -0,0 +1,139 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* nm-rdisc.h - Perform IPv6 router discovery
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_RDISC_H
+#define NM_RDISC_H
+
+#include <glib-object.h>
+
+#include <stdlib.h>
+#include <netinet/in.h>
+
+#define NM_TYPE_RDISC (nm_rdisc_get_type ())
+#define NM_RDISC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_RDISC, NMRDisc))
+#define NM_RDISC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_RDISC, NMRDiscClass))
+#define NM_IS_RDISC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_RDISC))
+#define NM_IS_RDISC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_RDISC))
+#define NM_RDISC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_RDISC, NMRDiscClass))
+
+#define NM_RDISC_CONFIG_CHANGED "config-changed"
+
+typedef enum {
+ NM_RDISC_DHCP_LEVEL_UNKNOWN,
+ NM_RDISC_DHCP_LEVEL_NONE,
+ NM_RDISC_DHCP_LEVEL_OTHERCONF,
+ NM_RDISC_DHCP_LEVEL_MANAGED
+} NMRDiscDHCPLevel;
+
+typedef enum {
+ NM_RDISC_PREFERENCE_INVALID,
+ NM_RDISC_PREFERENCE_LOW,
+ NM_RDISC_PREFERENCE_MEDIUM,
+ NM_RDISC_PREFERENCE_HIGH
+} NMRDiscPreference;
+
+typedef struct {
+ struct in6_addr address;
+ guint32 timestamp;
+ guint32 lifetime;
+ NMRDiscPreference preference;
+} NMRDiscGateway;
+
+typedef struct {
+ struct in6_addr address;
+ guint32 timestamp;
+ guint32 lifetime;
+ guint32 preferred;
+} NMRDiscAddress;
+
+typedef struct {
+ struct in6_addr network;
+ int plen;
+ struct in6_addr gateway;
+ guint32 timestamp;
+ guint32 lifetime;
+ NMRDiscPreference preference;
+} NMRDiscRoute;
+
+typedef struct {
+ struct in6_addr address;
+ guint32 timestamp;
+ guint32 lifetime;
+} NMRDiscDNSServer;
+
+typedef struct {
+ char *domain;
+ guint32 timestamp;
+ guint32 lifetime;
+} NMRDiscDNSDomain;
+
+typedef enum {
+ NM_RDISC_CONFIG_DHCP_LEVEL = 1 << 0,
+ NM_RDISC_CONFIG_GATEWAYS = 1 << 1,
+ NM_RDISC_CONFIG_ADDRESSES = 1 << 2,
+ NM_RDISC_CONFIG_ROUTES = 1 << 3,
+ NM_RDISC_CONFIG_DNS_SERVERS = 1 << 4,
+ NM_RDISC_CONFIG_DNS_DOMAINS = 1 << 5,
+ NM_RDISC_CONFIG_HOP_LIMIT = 1 << 6,
+} NMRDiscConfigMap;
+
+#define NM_RDISC_MAX_ADDRESSES_DEFAULT 16
+#define NM_RDISC_RTR_SOLICITATIONS_DEFAULT 3
+#define NM_RDISC_RTR_SOLICITATION_INTERVAL_DEFAULT 4
+
+/**
+ * NMRDisc:
+ * @ifindex: Interface index
+ *
+ * Interface-specific structure that handles incoming router advertisements,
+ * caches advertised items and removes them when they are obsolete.
+ */
+typedef struct {
+ GObject parent;
+
+ int ifindex;
+ char *ifname;
+ GBytes *lladdr;
+ gint32 max_addresses;
+ gint32 rtr_solicitations;
+ gint32 rtr_solicitation_interval;
+
+ NMRDiscDHCPLevel dhcp_level;
+ GArray *gateways;
+ GArray *addresses;
+ GArray *routes;
+ GArray *dns_servers;
+ GArray *dns_domains;
+ int hop_limit;
+} NMRDisc;
+
+typedef struct {
+ GObjectClass parent;
+
+ void (*start) (NMRDisc *rdisc);
+ void (*config_changed) (NMRDisc *rdisc, NMRDiscConfigMap changed);
+} NMRDiscClass;
+
+GType nm_rdisc_get_type (void);
+
+void nm_rdisc_set_lladdr (NMRDisc *rdisc, const char *addr, size_t addrlen);
+void nm_rdisc_start (NMRDisc *rdisc);
+
+#endif /* NM_RDISC_H */
diff --git a/src/rdisc/tests/Makefile.am b/src/rdisc/tests/Makefile.am
new file mode 100644
index 000000000..cf351d619
--- /dev/null
+++ b/src/rdisc/tests/Makefile.am
@@ -0,0 +1,36 @@
+AM_CPPFLAGS = \
+ -I${top_srcdir} \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I${top_srcdir}/src \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/posix-signals \
+ -I${top_srcdir}/libnm-util \
+ -I${srcdir}/.. \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(LIBNDP_CFLAGS)
+
+AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
+AM_LDFLAGS = \
+ $(GLIB_LIBS) \
+ $(DBUS_LIBS) \
+ $(CODE_COVERAGE_LDFLAGS)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+noinst_PROGRAMS = \
+ rdisc
+
+rdisc_SOURCES = \
+ rdisc.c
+rdisc_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la \
+ $(LIBNDP_LIBS)
+
diff --git a/src/logging/Makefile.in b/src/rdisc/tests/Makefile.in
index c5192bf06..97ade88f1 100644
--- a/src/logging/Makefile.in
+++ b/src/rdisc/tests/Makefile.in
@@ -78,11 +78,13 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/logging
+noinst_PROGRAMS = rdisc$(EXEEXT)
+subdir = src/rdisc/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,11 +102,12 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+PROGRAMS = $(noinst_PROGRAMS)
+am_rdisc_OBJECTS = rdisc.$(OBJEXT)
+rdisc_OBJECTS = $(am_rdisc_OBJECTS)
am__DEPENDENCIES_1 =
-libnm_logging_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_libnm_logging_la_OBJECTS = libnm_logging_la-nm-logging.lo
-libnm_logging_la_OBJECTS = $(am_libnm_logging_la_OBJECTS)
+rdisc_DEPENDENCIES = $(top_builddir)/src/libNetworkManager.la \
+ $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -143,8 +146,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libnm_logging_la_SOURCES)
-DIST_SOURCES = $(libnm_logging_la_SOURCES)
+SOURCES = $(rdisc_SOURCES)
+DIST_SOURCES = $(rdisc_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -195,12 +198,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -225,7 +231,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -270,12 +275,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -292,6 +301,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -319,11 +330,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -338,6 +354,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -400,6 +417,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -410,18 +428,38 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libnm-logging.la
-libnm_logging_la_SOURCES = \
- nm-logging.c \
- nm-logging.h
-
-libnm_logging_la_CPPFLAGS = \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I${top_srcdir} \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I${top_srcdir}/src \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/src/posix-signals \
+ -I${top_srcdir}/libnm-util \
+ -I${srcdir}/.. \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- -DLIBEXECDIR=\"$(libexecdir)\"
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(LIBNL_CFLAGS) \
+ $(LIBNDP_CFLAGS)
+
+AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
+AM_LDFLAGS = \
+ $(GLIB_LIBS) \
+ $(DBUS_LIBS) \
+ $(CODE_COVERAGE_LDFLAGS)
+
+rdisc_SOURCES = \
+ rdisc.c
-libnm_logging_la_LIBADD = \
- -ldl \
- $(GLIB_LIBS)
+rdisc_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la \
+ $(LIBNDP_LIBS)
all: all-am
@@ -436,9 +474,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/logging/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/rdisc/tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/logging/Makefile
+ $(AUTOMAKE) --gnu src/rdisc/tests/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -458,19 +496,18 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
-libnm-logging.la: $(libnm_logging_la_OBJECTS) $(libnm_logging_la_DEPENDENCIES) $(EXTRA_libnm_logging_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libnm_logging_la_OBJECTS) $(libnm_logging_la_LIBADD) $(LIBS)
+rdisc$(EXEEXT): $(rdisc_OBJECTS) $(rdisc_DEPENDENCIES) $(EXTRA_rdisc_DEPENDENCIES)
+ @rm -f rdisc$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(rdisc_OBJECTS) $(rdisc_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -478,7 +515,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_logging_la-nm-logging.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdisc.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -501,13 +538,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_logging_la-nm-logging.lo: nm-logging.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_logging_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_logging_la-nm-logging.lo -MD -MP -MF $(DEPDIR)/libnm_logging_la-nm-logging.Tpo -c -o libnm_logging_la-nm-logging.lo `test -f 'nm-logging.c' || echo '$(srcdir)/'`nm-logging.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_logging_la-nm-logging.Tpo $(DEPDIR)/libnm_logging_la-nm-logging.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-logging.c' object='libnm_logging_la-nm-logging.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_logging_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_logging_la-nm-logging.lo `test -f 'nm-logging.c' || echo '$(srcdir)/'`nm-logging.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -598,7 +628,7 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
@@ -632,7 +662,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
@@ -704,7 +734,7 @@ uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
@@ -718,6 +748,8 @@ uninstall-am:
tags tags-am uninstall uninstall-am
+@GNOME_CODE_COVERAGE_RULES@
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/rdisc/tests/rdisc.c b/src/rdisc/tests/rdisc.c
new file mode 100644
index 000000000..1fdf5b67a
--- /dev/null
+++ b/src/rdisc/tests/rdisc.c
@@ -0,0 +1,80 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* rdisc.c - test program
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <syslog.h>
+
+#include "nm-rdisc.h"
+#include "nm-fake-rdisc.h"
+#include "nm-lndp-rdisc.h"
+#include "nm-logging.h"
+
+#include "nm-fake-platform.h"
+#include "nm-linux-platform.h"
+
+int
+main (int argc, char **argv)
+{
+ GMainLoop *loop;
+ NMRDisc *rdisc;
+ NMRDisc *(*new) (int ifindex, const char *ifname);
+ int ifindex = 1;
+ const char *ifname;
+ char mac[6] = { 0x02, 0xaa, 0xbb, 0xcc, 0xdd, 0xee };
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ loop = g_main_loop_new (NULL, FALSE);
+ nm_logging_setup ("debug", "ip6", NULL, NULL);
+ openlog (G_LOG_DOMAIN, LOG_CONS | LOG_PERROR, LOG_DAEMON);
+
+ argv++;
+ if (!g_strcmp0 (argv[0], "--fake")) {
+ new = nm_fake_rdisc_new;
+ nm_fake_platform_setup ();
+ argv++;
+ } else {
+ new = nm_lndp_rdisc_new;
+ nm_linux_platform_setup ();
+ }
+
+ if (argv[0]) {
+ ifname = argv[0];
+ ifindex = nm_platform_link_get_ifindex (ifname);
+ } else {
+ ifindex = 1;
+ ifname = nm_platform_link_get_name (ifindex);
+ }
+
+ rdisc = new (ifindex, ifname);
+ if (!rdisc)
+ return EXIT_FAILURE;
+
+ nm_rdisc_set_lladdr (rdisc, mac, 6);
+
+ nm_rdisc_start (rdisc);
+ g_main_loop_run (loop);
+
+ g_clear_object (&rdisc);
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/settings/Makefile.am b/src/settings/Makefile.am
deleted file mode 100644
index ea81a7c40..000000000
--- a/src/settings/Makefile.am
+++ /dev/null
@@ -1,86 +0,0 @@
-SUBDIRS = plugins . tests
-
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS)
-
-noinst_LTLIBRARIES = libsettings.la libtest-settings-utils.la
-
-libtest_settings_utils_la_SOURCES = \
- nm-settings-utils.c \
- nm-settings-utils.h
-
-libtest_settings_utils_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-BUILT_SOURCES = \
- nm-settings-glue.h \
- nm-settings-connection-glue.h \
- nm-agent-manager-glue.h
-
-libsettings_la_SOURCES = \
- nm-settings.c \
- nm-settings.h \
- nm-inotify-helper.c \
- nm-inotify-helper.h \
- nm-settings-error.c \
- nm-settings-error.h \
- nm-system-config-interface.c \
- nm-system-config-interface.h \
- nm-settings-connection.c \
- nm-settings-connection.h \
- nm-default-wired-connection.c \
- nm-default-wired-connection.h \
- nm-agent-manager.c \
- nm-agent-manager.h \
- nm-secret-agent.c \
- nm-secret-agent.h \
- nm-settings-utils.h \
- nm-settings-utils.c
-
-libsettings_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- $(POLKIT_CFLAGS) \
- -DBINDIR=\"$(bindir)\" \
- -DSBINDIR=\"$(sbindir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DDATADIR=\"$(datadir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DNMSTATEDIR=\"$(nmstatedir)\" \
- -DGNOMELOCALEDIR=\"$(datadir)/locale\" \
- -DPLUGINDIR=\"$(pkglibdir)\"
-
-libsettings_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(builddir)/plugins/keyfile/libnm-settings-plugin-keyfile.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS) \
- $(POLKIT_LIBS)
-
-libsettings_la_LDFLAGS = -rdynamic
-
-nm-settings-glue.h: $(top_srcdir)/introspection/nm-settings.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-server --output=$@ $<
-
-nm-settings-connection-glue.h: $(top_srcdir)/introspection/nm-settings-connection.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_connection --mode=glib-server --output=$@ $<
-
-nm-agent-manager-glue.h: $(top_srcdir)/introspection/nm-agent-manager.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_agent_manager --mode=glib-server --output=$@ $<
-
-CLEANFILES = \
- $(BUILT_SOURCES)
-
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index d3635706d..ae9306929 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2010 - 2011 Red Hat, Inc.
+ * Copyright (C) 2010 - 2013 Red Hat, Inc.
*/
#include <config.h>
@@ -47,7 +47,6 @@ typedef struct {
gboolean disposed;
NMDBusManager *dbus_mgr;
- NMSessionMonitor *session_monitor;
/* Auth chains for checking agent permissions */
GSList *chains;
@@ -70,16 +69,21 @@ static guint signals[LAST_SIGNAL] = { 0 };
typedef struct _Request Request;
-static void request_add_agent (Request *req,
- NMSecretAgent *agent,
- NMSessionMonitor *session_monitor);
+static void request_add_agent (Request *req, NMSecretAgent *agent);
-static void request_remove_agent (gpointer key, gpointer value, gpointer user_data);
+static void request_remove_agent (Request *req, NMSecretAgent *agent, GSList **pending_reqs);
+
+static void request_next_agent (Request *req);
static void impl_agent_manager_register (NMAgentManager *self,
const char *identifier,
DBusGMethodInvocation *context);
+static void impl_agent_manager_register_with_capabilities (NMAgentManager *self,
+ const char *identifier,
+ NMSecretAgentCapabilities capabilities,
+ DBusGMethodInvocation *context);
+
static void impl_agent_manager_unregister (NMAgentManager *self,
DBusGMethodInvocation *context);
@@ -101,60 +105,14 @@ nm_agent_manager_error_quark (void)
/*************************************************************/
-/*----------------------------------------------------------------------------*/
-/* GHashTable safe iterating function: x_g_hash_table_safe_for_each()
- * GHashTable can't be modified while iterating, the common solution for that is
- * to flatten the hash table first and iterate over list.
- * Taken from https://github.com/linuxmint/nemo/blob/master/eel/eel-glib-extensions.c
- */
-typedef struct {
- GList *keys;
- GList *values;
-} FlattenedHashTable;
-
-static void
-flatten_hash_table_element (gpointer key, gpointer value, gpointer callback_data)
-{
- FlattenedHashTable *flattened_table;
-
- flattened_table = callback_data;
- flattened_table->keys = g_list_prepend
- (flattened_table->keys, key);
- flattened_table->values = g_list_prepend
- (flattened_table->values, value);
-}
-
-static void
-x_g_hash_table_safe_for_each (GHashTable *hash_table,
- GHFunc callback,
- gpointer callback_data)
-{
- FlattenedHashTable flattened;
- GList *p, *q;
-
- flattened.keys = NULL;
- flattened.values = NULL;
-
- g_hash_table_foreach (hash_table,
- flatten_hash_table_element,
- &flattened);
-
- for (p = flattened.keys, q = flattened.values;
- p != NULL;
- p = p->next, q = q->next) {
- (* callback) (p->data, q->data, callback_data);
- }
-
- g_list_free (flattened.keys);
- g_list_free (flattened.values);
-}
-/*----------------------------------------------------------------------------*/
-
static gboolean
remove_agent (NMAgentManager *self, const char *owner)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
NMSecretAgent *agent;
+ GHashTableIter iter;
+ gpointer data;
+ GSList *pending_reqs = NULL;
g_return_val_if_fail (owner != NULL, FALSE);
@@ -163,11 +121,20 @@ remove_agent (NMAgentManager *self, const char *owner)
if (!agent)
return FALSE;
- nm_log_dbg (LOGD_AGENTS, "(%s) agent unregistered",
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent unregistered or disappeared",
nm_secret_agent_get_description (agent));
/* Remove this agent from any in-progress secrets requests */
- x_g_hash_table_safe_for_each (priv->requests, request_remove_agent, agent);
+ g_hash_table_iter_init (&iter, priv->requests);
+ while (g_hash_table_iter_next (&iter, NULL, &data))
+ request_remove_agent ((Request *) data, agent, &pending_reqs);
+
+ /* We cannot call request_next_agent() from from within hash iterating loop,
+ * because it may remove the request from the hash table, which invalidates
+ * the iterator. So, only remove the agent from requests. And store the requests
+ * that should be sent to other agent to a temporary list to proceed afterwards.
+ */
+ g_slist_free_full (pending_reqs, (GDestroyNotify) request_next_agent);
/* And dispose of the agent */
g_hash_table_remove (priv->agents, owner);
@@ -246,6 +213,8 @@ agent_register_permissions_done (NMAuthChain *chain,
GHashTableIter iter;
Request *req;
+ g_assert (context);
+
priv->chains = g_slist_remove (priv->chains, chain);
if (error) {
@@ -257,6 +226,7 @@ agent_register_permissions_done (NMAuthChain *chain,
g_error_free (local);
} else {
agent = nm_auth_chain_steal_data (chain, "agent");
+ g_assert (agent);
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED);
if (result == NM_AUTH_CALL_RESULT_YES)
@@ -278,37 +248,54 @@ agent_register_permissions_done (NMAuthChain *chain,
/* Add this agent to any in-progress secrets requests */
g_hash_table_iter_init (&iter, priv->requests);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &req))
- request_add_agent (req, agent, priv->session_monitor);
+ request_add_agent (req, agent);
}
nm_auth_chain_unref (chain);
}
+static NMSecretAgent *
+find_agent_by_identifier_and_uid (NMAgentManager *self,
+ const char *identifier,
+ gulong sender_uid)
+{
+ NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ NMSecretAgent *agent;
+
+ g_hash_table_iter_init (&iter, priv->agents);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
+ if ( g_strcmp0 (nm_secret_agent_get_identifier (agent), identifier) == 0
+ && nm_secret_agent_get_owner_uid (agent) == sender_uid)
+ return agent;
+ }
+ return NULL;
+}
+
static void
-impl_agent_manager_register (NMAgentManager *self,
- const char *identifier,
- DBusGMethodInvocation *context)
+impl_agent_manager_register_with_capabilities (NMAgentManager *self,
+ const char *identifier,
+ NMSecretAgentCapabilities capabilities,
+ DBusGMethodInvocation *context)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- char *error_desc = NULL, *sender = NULL;
+ NMAuthSubject *subject;
gulong sender_uid = G_MAXULONG;
GError *error = NULL, *local = NULL;
NMSecretAgent *agent;
NMAuthChain *chain;
- if (!nm_auth_get_caller_uid (context,
- priv->dbus_mgr,
- &sender_uid,
- &error_desc)) {
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
- error_desc);
- g_free (error_desc);
+ "Unable to determine request sender and UID.");
goto done;
}
+ sender_uid = nm_auth_subject_get_uid (subject);
if ( 0 != sender_uid
- && !nm_session_monitor_uid_has_session (priv->session_monitor,
+ && !nm_session_monitor_uid_has_session (nm_session_monitor_get (),
sender_uid,
NULL,
&local)) {
@@ -318,20 +305,20 @@ impl_agent_manager_register (NMAgentManager *self,
goto done;
}
- sender = dbus_g_method_get_sender (context);
- if (!sender) {
- error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
- NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
- "Failed to get D-Bus request sender");
- goto done;
- }
-
/* Validate the identifier */
if (!validate_identifier (identifier, &error))
goto done;
+ /* Only one agent for each identifier is allowed per user */
+ if (find_agent_by_identifier_and_uid (self, identifier, sender_uid)) {
+ error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
+ NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED,
+ "An agent with this ID is already registered for this user.");
+ goto done;
+ }
+
/* Success, add the new agent */
- agent = nm_secret_agent_new (priv->dbus_mgr, sender, identifier, sender_uid);
+ agent = nm_secret_agent_new (context, subject, identifier, capabilities);
if (!agent) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_INTERNAL_ERROR,
@@ -343,33 +330,51 @@ impl_agent_manager_register (NMAgentManager *self,
nm_secret_agent_get_description (agent));
/* Kick off permissions requests for this agent */
- chain = nm_auth_chain_new (context, NULL, agent_register_permissions_done, self);
- nm_auth_chain_set_data (chain, "agent", agent, g_object_unref);
- nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE);
- nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE);
+ chain = nm_auth_chain_new_subject (subject, context, agent_register_permissions_done, self);
+ if (chain) {
+ nm_auth_chain_set_data (chain, "agent", agent, g_object_unref);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE);
- priv->chains = g_slist_append (priv->chains, chain);
+ priv->chains = g_slist_append (priv->chains, chain);
+ } else {
+ error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
+ NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
+ "Unable to start agent authentication.");
+ }
done:
if (error)
dbus_g_method_return_error (context, error);
g_clear_error (&error);
g_clear_error (&local);
- g_free (sender);
+ g_clear_object (&subject);
+}
+
+static void
+impl_agent_manager_register (NMAgentManager *self,
+ const char *identifier,
+ DBusGMethodInvocation *context)
+{
+ impl_agent_manager_register_with_capabilities (self, identifier, 0, context);
}
static void
impl_agent_manager_unregister (NMAgentManager *self,
DBusGMethodInvocation *context)
{
+ NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
char *sender = NULL;
- sender = dbus_g_method_get_sender (context);
- if (!sender) {
+ if (!nm_dbus_manager_get_caller_info (priv->dbus_mgr,
+ context,
+ &sender,
+ NULL,
+ NULL)) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
- "Failed to get D-Bus request sender");
+ "Unable to determine request sender.");
goto done;
}
@@ -396,27 +401,23 @@ typedef void (*RequestCompleteFunc) (Request *req,
GHashTable *secrets,
const char *agent_dbus_owner,
const char *agent_username,
- gboolean agent_has_modify,
GError *error,
gpointer user_data);
+typedef gboolean (*RequestAddAgentFunc) (Request *req, NMSecretAgent *agent);
typedef void (*RequestNextFunc) (Request *req);
typedef void (*RequestCancelFunc) (Request *req);
+/* Basic secrets request structure */
struct _Request {
guint32 reqid;
- NMAuthChain *chain;
+ char *detail;
+ char *verb;
- NMConnection *connection;
- gboolean filter_by_uid;
- gulong uid_filter;
- char *setting_name;
- NMSettingsGetSecretsFlags flags;
- char *hint;
+ NMAuthSubject *subject;
/* Current agent being asked for secrets */
NMSecretAgent *current;
gconstpointer current_call_id;
- gboolean current_has_modify;
/* Stores the sorted list of NMSecretAgents which will be asked for secrets */
GSList *pending;
@@ -429,102 +430,64 @@ struct _Request {
guint32 idle_id;
- GHashTable *existing_secrets;
-
- NMAgentSecretsResultFunc callback;
- gpointer callback_data;
- gpointer other_data2;
- gpointer other_data3;
-
+ RequestAddAgentFunc add_agent_callback;
RequestCancelFunc cancel_callback;
RequestNextFunc next_callback;
RequestCompleteFunc complete_callback;
gpointer complete_callback_data;
+ gboolean completed;
+
+ GDestroyNotify free_func;
};
static guint32 next_req_id = 1;
static Request *
-request_new_get (NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid_filter,
- GHashTable *existing_secrets,
- const char *setting_name,
- NMSettingsGetSecretsFlags flags,
- const char *hint,
- NMAgentSecretsResultFunc callback,
- gpointer callback_data,
- gpointer other_data2,
- gpointer other_data3,
- RequestCompleteFunc complete_callback,
- gpointer complete_callback_data,
- RequestNextFunc next_callback,
- RequestCancelFunc cancel_callback)
+request_new (gsize struct_size,
+ const char *detail,
+ const char *verb,
+ NMAuthSubject *subject,
+ RequestCompleteFunc complete_callback,
+ gpointer complete_callback_data,
+ RequestAddAgentFunc add_agent_callback,
+ RequestNextFunc next_callback,
+ RequestCancelFunc cancel_callback,
+ GDestroyNotify free_func)
{
Request *req;
- req = g_malloc0 (sizeof (Request));
+ req = g_malloc0 (struct_size);
req->reqid = next_req_id++;
- req->connection = g_object_ref (connection);
- req->filter_by_uid = filter_by_uid;
- req->uid_filter = uid_filter;
- if (existing_secrets)
- req->existing_secrets = g_hash_table_ref (existing_secrets);
- req->setting_name = g_strdup (setting_name);
- req->flags = flags;
- req->hint = g_strdup (hint);
- req->callback = callback;
- req->callback_data = callback_data;
- req->other_data2 = other_data2;
- req->other_data3 = other_data3;
+ req->detail = g_strdup (detail);
+ req->verb = g_strdup (verb);
+ req->subject = g_object_ref (subject);
req->complete_callback = complete_callback;
req->complete_callback_data = complete_callback_data;
+ req->add_agent_callback = add_agent_callback,
req->next_callback = next_callback;
req->cancel_callback = cancel_callback;
-
- return req;
-}
-
-static Request *
-request_new_other (NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid_filter,
- RequestCompleteFunc complete_callback,
- gpointer complete_callback_data,
- RequestNextFunc next_callback)
-{
- Request *req;
-
- req = g_malloc0 (sizeof (Request));
- req->reqid = next_req_id++;
- req->connection = g_object_ref (connection);
- req->filter_by_uid = filter_by_uid;
- req->uid_filter = uid_filter;
- req->complete_callback = complete_callback;
- req->complete_callback_data = complete_callback_data;
- req->next_callback = next_callback;
-
+ req->free_func = free_func;
return req;
}
static void
request_free (Request *req)
{
+ if (req->free_func)
+ req->free_func ((gpointer) req);
+
if (req->idle_id)
g_source_remove (req->idle_id);
- if (req->cancel_callback)
+ if (!req->completed && req->cancel_callback)
req->cancel_callback (req);
+ g_object_unref (req->subject);
+
+ g_free (req->detail);
+ g_free (req->verb);
g_slist_free_full (req->pending, g_object_unref);
g_slist_free (req->asked);
- g_object_unref (req->connection);
- g_free (req->setting_name);
- g_free (req->hint);
- if (req->existing_secrets)
- g_hash_table_unref (req->existing_secrets);
- if (req->chain)
- nm_auth_chain_unref (req->chain);
memset (req, 0, sizeof (Request));
g_free (req);
}
@@ -533,14 +496,13 @@ static void
req_complete_success (Request *req,
GHashTable *secrets,
const char *agent_dbus_owner,
- const char *agent_uname,
- gboolean agent_has_modify)
+ const char *agent_uname)
{
+ req->completed = TRUE;
req->complete_callback (req,
secrets,
agent_dbus_owner,
agent_uname,
- agent_has_modify,
NULL,
req->complete_callback_data);
}
@@ -548,27 +510,38 @@ req_complete_success (Request *req,
static void
req_complete_error (Request *req, GError *error)
{
- req->complete_callback (req, NULL, NULL, NULL, FALSE, error, req->complete_callback_data);
+ req->completed = TRUE;
+ req->complete_callback (req, NULL, NULL, NULL, error, req->complete_callback_data);
}
static gint
-agent_compare_func (NMSecretAgent *a, NMSecretAgent *b, gpointer user_data)
+agent_compare_func (gconstpointer aa, gconstpointer bb, gpointer user_data)
{
- NMSessionMonitor *session_monitor = NM_SESSION_MONITOR (user_data);
+ NMSecretAgent *a = (NMSecretAgent *)aa;
+ NMSecretAgent *b = (NMSecretAgent *)bb;
+ Request *req = user_data;
gboolean a_active, b_active;
-
- if (a && !b)
- return -1;
- else if (a == b)
- return 0;
- else if (!a && b)
- return 1;
+ gulong a_pid, b_pid, requester;
+
+ /* Prefer agents in the process the request came from */
+ requester = nm_auth_subject_get_pid (req->subject);
+ if (requester != G_MAXULONG) {
+ a_pid = nm_secret_agent_get_pid (a);
+ b_pid = nm_secret_agent_get_pid (b);
+
+ if (a_pid != b_pid) {
+ if (a_pid == requester)
+ return -1;
+ else if (b_pid == requester)
+ return 1;
+ }
+ }
/* Prefer agents in active sessions */
- a_active = nm_session_monitor_uid_active (session_monitor,
+ a_active = nm_session_monitor_uid_active (nm_session_monitor_get (),
nm_secret_agent_get_owner_uid (a),
NULL);
- b_active = nm_session_monitor_uid_active (session_monitor,
+ b_active = nm_session_monitor_uid_active (nm_session_monitor_get (),
nm_secret_agent_get_owner_uid (b),
NULL);
if (a_active && !b_active)
@@ -582,48 +555,42 @@ agent_compare_func (NMSecretAgent *a, NMSecretAgent *b, gpointer user_data)
}
static void
-request_add_agent (Request *req,
- NMSecretAgent *agent,
- NMSessionMonitor *session_monitor)
+request_add_agent (Request *req, NMSecretAgent *agent)
{
- uid_t agent_uid;
-
g_return_if_fail (req != NULL);
g_return_if_fail (agent != NULL);
if (g_slist_find (req->asked, GUINT_TO_POINTER (nm_secret_agent_get_hash (agent))))
return;
- /* Ensure the caller's username exists in the connection's permissions,
- * or that the permissions is empty (ie, visible by everyone).
- */
- agent_uid = nm_secret_agent_get_owner_uid (agent);
- if (!nm_auth_uid_in_acl (req->connection, session_monitor, agent_uid, NULL)) {
- nm_log_dbg (LOGD_AGENTS, "(%s) agent ignored for secrets request %p/%s (not in ACL)",
- nm_secret_agent_get_description (agent),
- req, req->setting_name);
- /* Connection not visible to this agent's user */
+ if (req->add_agent_callback && !req->add_agent_callback (req, agent))
return;
- }
/* If the request should filter agents by UID, do that now */
- if (req->filter_by_uid && (agent_uid != req->uid_filter)) {
- nm_log_dbg (LOGD_AGENTS, "(%s) agent ignored for secrets request %p/%s "
- "(uid %d not required %ld)",
- nm_secret_agent_get_description (agent),
- req, req->setting_name, agent_uid, req->uid_filter);
- return;
+ if (!nm_auth_subject_get_internal (req->subject)) {
+ uid_t agent_uid, subject_uid;
+
+ agent_uid = nm_secret_agent_get_owner_uid (agent);
+ subject_uid = nm_auth_subject_get_uid (req->subject);
+ if (agent_uid != subject_uid) {
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent ignored for secrets request %p/%s "
+ "(uid %ld not required %ld)",
+ nm_secret_agent_get_description (agent),
+ req, req->detail,
+ (long)agent_uid, (long)subject_uid);
+ return;
+ }
}
nm_log_dbg (LOGD_AGENTS, "(%s) agent allowed for secrets request %p/%s",
- nm_secret_agent_get_description (agent),
- req, req->setting_name);
+ nm_secret_agent_get_description (agent),
+ req, req->detail);
- /* Add this agent to the list, preferring active sessions */
+ /* Add this agent to the list, sorted appropriately */
req->pending = g_slist_insert_sorted_with_data (req->pending,
g_object_ref (agent),
- (GCompareDataFunc) agent_compare_func,
- session_monitor);
+ agent_compare_func,
+ req);
}
static void
@@ -635,94 +602,197 @@ request_add_agents (NMAgentManager *self, Request *req)
g_hash_table_iter_init (&iter, priv->agents);
while (g_hash_table_iter_next (&iter, NULL, &data))
- request_add_agent (req, NM_SECRET_AGENT (data), priv->session_monitor);
+ request_add_agent (req, NM_SECRET_AGENT (data));
}
static void
-request_remove_agent (gpointer key, gpointer value, gpointer user_data)
+request_next_agent (Request *req)
{
- Request *req = (Request *) value;
- NMSecretAgent *agent = (NMSecretAgent *) user_data;
- gboolean try_next = FALSE;
- const char *detail = "";
- GSList *found;
-
- g_return_if_fail (req != NULL);
- g_return_if_fail (agent != NULL);
+ GError *error = NULL;
- /* If this agent is being asked right now, cancel the request */
- if (agent == req->current) {
- if (req->cancel_callback)
- req->cancel_callback (req);
- req->current_has_modify = FALSE;
- req->current = NULL;
+ if (req->pending) {
+ /* Send the request to the next agent */
req->current_call_id = NULL;
- try_next = TRUE;
- detail = " current";
- }
-
- nm_log_dbg (LOGD_AGENTS, "(%s)%s agent removed from secrets request %p/%s",
- nm_secret_agent_get_description (agent),
- detail, req, req->setting_name);
+ if (req->current)
+ g_object_unref (req->current);
+ req->current = req->pending->data;
+ req->pending = g_slist_remove (req->pending, req->current);
- found = g_slist_find (req->pending, agent);
- if (found) {
- req->pending = g_slist_remove_link (req->pending, found);
- g_object_unref (found->data);
- g_slist_free_1 (found);
- }
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent %s secrets for request %p/%s",
+ nm_secret_agent_get_description (req->current),
+ req->verb, req, req->detail);
- if (try_next) {
- /* If the agent serving the in-progress secrets request went away then
- * we need to send the request to the next agent.
- */
req->next_callback (req);
- }
-}
-
-static gboolean
-next_generic (Request *req, const char *detail)
-{
- GError *error = NULL;
- gboolean success = FALSE;
+ } else {
+ req->current_call_id = NULL;
+ req->current = NULL;
- if (req->pending == NULL) {
/* No more secret agents are available to fulfill this secrets request */
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_NO_SECRETS,
"No agents were available for this request.");
req_complete_error (req, error);
g_error_free (error);
- } else {
- /* Send a secrets request to the next agent */
- req->current_has_modify = FALSE;
- if (req->current)
- g_object_unref (req->current);
- req->current = req->pending->data;
- req->pending = g_slist_remove (req->pending, req->current);
-
- nm_log_dbg (LOGD_AGENTS, "(%s) agent %s secrets for request %p/%s",
- nm_secret_agent_get_description (req->current),
- detail, req, req->setting_name);
- success = TRUE;
}
+}
+
+static void
+request_remove_agent (Request *req, NMSecretAgent *agent, GSList **pending_reqs)
+{
+ g_return_if_fail (req != NULL);
+ g_return_if_fail (agent != NULL);
- return success;
+ req->pending = g_slist_remove (req->pending, agent);
+
+ if (agent == req->current) {
+ nm_log_dbg (LOGD_AGENTS, "(%s) current agent removed from secrets request %p/%s",
+ nm_secret_agent_get_description (agent), req, req->detail);
+ *pending_reqs = g_slist_prepend (*pending_reqs, req);
+ } else {
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent removed from secrets request %p/%s",
+ nm_secret_agent_get_description (agent), req, req->detail);
+ }
}
static gboolean
-start_generic (gpointer user_data)
+request_start (gpointer user_data)
{
Request *req = user_data;
req->idle_id = 0;
- req->next_callback (req);
+ request_next_agent (req);
return FALSE;
}
-
/*************************************************************/
+/* Request subclass for connection secrets */
+typedef struct {
+ Request parent;
+
+ NMSettingsGetSecretsFlags flags;
+ NMConnection *connection;
+ char *setting_name;
+ char **hints;
+
+ GHashTable *existing_secrets;
+
+ NMAgentSecretsResultFunc callback;
+ gpointer callback_data;
+ gpointer other_data2;
+ gpointer other_data3;
+
+ NMAuthChain *chain;
+
+ /* Whether the agent currently being asked for secrets
+ * has the system.modify privilege.
+ */
+ gboolean current_has_modify;
+} ConnectionRequest;
+
+static void
+connection_request_free (gpointer data)
+{
+ ConnectionRequest *req = data;
+
+ g_object_unref (req->connection);
+ g_free (req->setting_name);
+ g_strfreev (req->hints);
+ if (req->existing_secrets)
+ g_hash_table_unref (req->existing_secrets);
+ if (req->chain)
+ nm_auth_chain_unref (req->chain);
+}
+
+static gboolean
+connection_request_add_agent (Request *parent, NMSecretAgent *agent)
+{
+ ConnectionRequest *req = (ConnectionRequest *) parent;
+ uid_t agent_uid = nm_secret_agent_get_owner_uid (agent);
+
+ /* Ensure the caller's username exists in the connection's permissions,
+ * or that the permissions is empty (ie, visible by everyone).
+ */
+ if (!nm_auth_uid_in_acl (req->connection, nm_session_monitor_get (), agent_uid, NULL)) {
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent ignored for secrets request %p/%s (not in ACL)",
+ nm_secret_agent_get_description (agent),
+ parent, parent->detail);
+ /* Connection not visible to this agent's user */
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static ConnectionRequest *
+connection_request_new_get (NMConnection *connection,
+ NMAuthSubject *subject,
+ GHashTable *existing_secrets,
+ const char *setting_name,
+ const char *verb,
+ NMSettingsGetSecretsFlags flags,
+ const char **hints,
+ NMAgentSecretsResultFunc callback,
+ gpointer callback_data,
+ gpointer other_data2,
+ gpointer other_data3,
+ RequestCompleteFunc complete_callback,
+ gpointer complete_callback_data,
+ RequestNextFunc next_callback,
+ RequestCancelFunc cancel_callback)
+{
+ ConnectionRequest *req;
+
+ req = (ConnectionRequest *) request_new (sizeof (ConnectionRequest),
+ nm_connection_get_id (connection),
+ verb,
+ subject,
+ complete_callback,
+ complete_callback_data,
+ connection_request_add_agent,
+ next_callback,
+ cancel_callback,
+ connection_request_free);
+ g_assert (req);
+
+ req->connection = g_object_ref (connection);
+ if (existing_secrets)
+ req->existing_secrets = g_hash_table_ref (existing_secrets);
+ req->setting_name = g_strdup (setting_name);
+ req->hints = g_strdupv ((char **) hints);
+ req->flags = flags;
+ req->callback = callback;
+ req->callback_data = callback_data;
+ req->other_data2 = other_data2;
+ req->other_data3 = other_data3;
+ return req;
+}
+
+static ConnectionRequest *
+connection_request_new_other (NMConnection *connection,
+ NMAuthSubject *subject,
+ const char *verb,
+ RequestCompleteFunc complete_callback,
+ gpointer complete_callback_data,
+ RequestNextFunc next_callback)
+{
+ ConnectionRequest *req;
+
+ req = (ConnectionRequest *) request_new (sizeof (ConnectionRequest),
+ nm_connection_get_id (connection),
+ verb,
+ subject,
+ complete_callback,
+ complete_callback_data,
+ NULL,
+ next_callback,
+ NULL,
+ connection_request_free);
+ g_assert (req);
+ req->connection = g_object_ref (connection);
+ return req;
+}
+
static void
get_done_cb (NMSecretAgent *agent,
gconstpointer call_id,
@@ -730,47 +800,49 @@ get_done_cb (NMSecretAgent *agent,
GError *error,
gpointer user_data)
{
- Request *req = user_data;
+ Request *parent = user_data;
+ ConnectionRequest *req = user_data;
GHashTable *setting_secrets;
const char *agent_dbus_owner;
- gboolean agent_has_modify;
struct passwd *pw;
char *agent_uname = NULL;
- g_return_if_fail (call_id == req->current_call_id);
-
- agent_has_modify = req->current_has_modify;
- req->current_has_modify = FALSE;
- req->current = NULL;
- req->current_call_id = NULL;
+ g_return_if_fail (call_id == parent->current_call_id);
if (error) {
- nm_log_dbg (LOGD_AGENTS, "(%s) agent failed secrets request %p/%s: (%d) %s",
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent failed secrets request %p/%s/%s: (%d) %s",
nm_secret_agent_get_description (agent),
- req, req->setting_name,
+ req, parent->detail, req->setting_name,
error ? error->code : -1,
(error && error->message) ? error->message : "(unknown)");
- /* Try the next agent */
- req->next_callback (req);
+ if (dbus_g_error_has_name (error, NM_DBUS_INTERFACE_SECRET_AGENT ".UserCanceled")) {
+ error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
+ NM_AGENT_MANAGER_ERROR_USER_CANCELED,
+ "User canceled the secrets request.");
+ req_complete_error (parent, error);
+ g_error_free (error);
+ } else {
+ /* Try the next agent */
+ request_next_agent (parent);
+ }
return;
}
/* Ensure the setting we wanted secrets for got returned and has something in it */
setting_secrets = g_hash_table_lookup (secrets, req->setting_name);
if (!setting_secrets || !g_hash_table_size (setting_secrets)) {
- nm_log_dbg (LOGD_AGENTS, "(%s) agent returned no secrets for request %p/%s",
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent returned no secrets for request %p/%s/%s",
nm_secret_agent_get_description (agent),
- req, req->setting_name);
-
+ req, parent->detail, req->setting_name);
/* Try the next agent */
- req->next_callback (req);
+ request_next_agent (parent);
return;
}
- nm_log_dbg (LOGD_AGENTS, "(%s) agent returned secrets for request %p/%s",
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent returned secrets for request %p/%s/%s",
nm_secret_agent_get_description (agent),
- req, req->setting_name);
+ req, parent->detail, req->setting_name);
/* Get the agent's username */
pw = getpwuid (nm_secret_agent_get_owner_uid (agent));
@@ -781,7 +853,7 @@ get_done_cb (NMSecretAgent *agent,
}
agent_dbus_owner = nm_secret_agent_get_dbus_owner (agent);
- req_complete_success (req, secrets, agent_dbus_owner, agent_uname, agent_has_modify);
+ req_complete_success (parent, secrets, agent_dbus_owner, agent_uname);
g_free (agent_uname);
}
@@ -827,15 +899,16 @@ set_secrets_not_required (NMConnection *connection, GHashTable *hash)
}
static void
-get_agent_request_secrets (Request *req, gboolean include_system_secrets)
+get_agent_request_secrets (ConnectionRequest *req, gboolean include_system_secrets)
{
+ Request *parent = (Request *) req;
NMConnection *tmp;
tmp = nm_connection_duplicate (req->connection);
nm_connection_clear_secrets (tmp);
if (include_system_secrets) {
if (req->existing_secrets)
- nm_connection_update_secrets (tmp, req->setting_name, req->existing_secrets, NULL);
+ (void) nm_connection_update_secrets (tmp, req->setting_name, req->existing_secrets, NULL);
} else {
/* Update secret flags in the temporary connection to indicate that
* the system secrets we're not sending to the agent aren't required,
@@ -845,19 +918,17 @@ get_agent_request_secrets (Request *req, gboolean include_system_secrets)
set_secrets_not_required (tmp, req->existing_secrets);
}
- req->current_call_id = nm_secret_agent_get_secrets (NM_SECRET_AGENT (req->current),
- tmp,
- req->setting_name,
- req->hint,
- req->flags,
- get_done_cb,
- req);
- if (req->current_call_id == NULL) {
+ parent->current_call_id = nm_secret_agent_get_secrets (parent->current,
+ tmp,
+ req->setting_name,
+ (const char **) req->hints,
+ req->flags,
+ get_done_cb,
+ req);
+ if (parent->current_call_id == NULL) {
/* Shouldn't hit this, but handle it anyway */
- g_warn_if_fail (req->current_call_id != NULL);
- req->current_has_modify = FALSE;
- req->current = NULL;
- req->next_callback (req);
+ g_warn_if_fail (parent->current_call_id != NULL);
+ request_next_agent (parent);
}
g_object_unref (tmp);
@@ -869,19 +940,19 @@ get_agent_modify_auth_cb (NMAuthChain *chain,
DBusGMethodInvocation *context,
gpointer user_data)
{
- Request *req = user_data;
- NMAuthCallResult result;
+ Request *parent = user_data;
+ ConnectionRequest *req = user_data;
const char *perm;
req->chain = NULL;
if (error) {
- nm_log_dbg (LOGD_AGENTS, "(%p/%s) agent MODIFY check error: (%d) %s",
- req, req->setting_name,
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent %p/%s/%s MODIFY check error: (%d) %s",
+ nm_secret_agent_get_description (parent->current),
+ req, parent->detail, req->setting_name,
error->code, error->message ? error->message : "(unknown)");
-
/* Try the next agent */
- req->next_callback (req);
+ request_next_agent (parent);
} else {
/* If the agent obtained the 'modify' permission, we send all system secrets
* to it. If it didn't, we still ask it for secrets, but we don't send
@@ -889,15 +960,17 @@ get_agent_modify_auth_cb (NMAuthChain *chain,
*/
perm = nm_auth_chain_get_data (chain, "perm");
g_assert (perm);
- result = nm_auth_chain_get_result (chain, perm);
- if (result == NM_AUTH_CALL_RESULT_YES)
+ if (nm_auth_chain_get_result (chain, perm) == NM_AUTH_CALL_RESULT_YES)
req->current_has_modify = TRUE;
- nm_log_dbg (LOGD_AGENTS, "(%p/%s) agent MODIFY check result %d",
- req, req->setting_name, result);
+ nm_log_dbg (LOGD_AGENTS, "(%s) agent %p/%s/%s MODIFY check result %s",
+ nm_secret_agent_get_description (parent->current),
+ req, parent->detail, req->setting_name,
+ req->current_has_modify ? "YES" : "NO");
get_agent_request_secrets (req, req->current_has_modify);
}
+
nm_auth_chain_unref (chain);
}
@@ -944,15 +1017,15 @@ has_system_secrets (NMConnection *connection)
}
static void
-get_next_cb (Request *req)
+get_next_cb (Request *parent)
{
+ ConnectionRequest *req = (ConnectionRequest *) parent;
NMSettingConnection *s_con;
const char *agent_dbus_owner, *perm;
- if (!next_generic (req, "getting"))
- return;
+ req->current_has_modify = FALSE;
- agent_dbus_owner = nm_secret_agent_get_dbus_owner (NM_SECRET_AGENT (req->current));
+ agent_dbus_owner = nm_secret_agent_get_dbus_owner (parent->current);
/* If the request flags allow user interaction, and there are existing
* system secrets (or blank secrets that are supposed to be system-owned),
@@ -962,12 +1035,13 @@ get_next_cb (Request *req)
*/
if ( (req->flags != NM_SETTINGS_GET_SECRETS_FLAG_NONE)
&& (req->existing_secrets || has_system_secrets (req->connection))) {
- nm_log_dbg (LOGD_AGENTS, "(%p/%s) request has system secrets; checking agent %s for MODIFY",
- req, req->setting_name, agent_dbus_owner);
+ nm_log_dbg (LOGD_AGENTS, "(%p/%s/%s) request has system secrets; checking agent %s for MODIFY",
+ req, parent->detail, req->setting_name, agent_dbus_owner);
- req->chain = nm_auth_chain_new_dbus_sender (agent_dbus_owner,
- get_agent_modify_auth_cb,
- req);
+ req->chain = nm_auth_chain_new_subject (nm_secret_agent_get_subject (parent->current),
+ NULL,
+ get_agent_modify_auth_cb,
+ req);
g_assert (req->chain);
/* If the caller is the only user in the connection's permissions, then
@@ -984,8 +1058,8 @@ get_next_cb (Request *req)
nm_auth_chain_add_call (req->chain, perm, TRUE);
} else {
- nm_log_dbg (LOGD_AGENTS, "(%p/%s) requesting user-owned secrets from agent %s",
- req, req->setting_name, agent_dbus_owner);
+ nm_log_dbg (LOGD_AGENTS, "(%p/%s/%s) requesting user-owned secrets from agent %s",
+ req, parent->detail, req->setting_name, agent_dbus_owner);
get_agent_request_secrets (req, FALSE);
}
@@ -994,10 +1068,11 @@ get_next_cb (Request *req)
static gboolean
get_start (gpointer user_data)
{
- Request *req = user_data;
+ Request *parent = user_data;
+ ConnectionRequest *req = user_data;
GHashTable *setting_secrets = NULL;
- req->idle_id = 0;
+ parent->idle_id = 0;
/* Check if there are any existing secrets */
if (req->existing_secrets)
@@ -1006,7 +1081,7 @@ get_start (gpointer user_data)
if (setting_secrets && g_hash_table_size (setting_secrets)) {
NMConnection *tmp;
GError *error = NULL;
- gboolean request_new = (req->flags & NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW);
+ gboolean new_secrets = (req->flags & NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW);
/* The connection already had secrets; check if any more are required.
* If no more are required, we're done. If secrets are still needed,
@@ -1017,23 +1092,23 @@ get_start (gpointer user_data)
g_assert (tmp);
if (!nm_connection_update_secrets (tmp, req->setting_name, req->existing_secrets, &error)) {
- req_complete_error (req, error);
+ req_complete_error (parent, error);
g_clear_error (&error);
} else {
/* Do we have everything we need? */
if ( (req->flags & NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM)
- || ((nm_connection_need_secrets (tmp, NULL) == NULL) && (request_new == FALSE))) {
- nm_log_dbg (LOGD_AGENTS, "(%p/%s) system settings secrets sufficient",
- req, req->setting_name);
+ || ((nm_connection_need_secrets (tmp, NULL) == NULL) && (new_secrets == FALSE))) {
+ nm_log_dbg (LOGD_AGENTS, "(%p/%s/%s) system settings secrets sufficient",
+ req, parent->detail, req->setting_name);
/* Got everything, we're done */
- req_complete_success (req, req->existing_secrets, NULL, NULL, FALSE);
+ req_complete_success (parent, req->existing_secrets, NULL, NULL);
} else {
- nm_log_dbg (LOGD_AGENTS, "(%p/%s) system settings secrets insufficient, asking agents",
- req, req->setting_name);
+ nm_log_dbg (LOGD_AGENTS, "(%p/%s/%s) system settings secrets insufficient, asking agents",
+ req, parent->detail, req->setting_name);
/* We don't, so ask some agents for additional secrets */
- req->next_callback (req);
+ request_next_agent (parent);
}
}
g_object_unref (tmp);
@@ -1042,30 +1117,30 @@ get_start (gpointer user_data)
* agents for secrets. Let the Agent Manager handle which agents
* we'll ask and in which order.
*/
- req->next_callback (req);
+ request_next_agent (parent);
}
return FALSE;
}
static void
-get_complete_cb (Request *req,
+get_complete_cb (Request *parent,
GHashTable *secrets,
const char *agent_dbus_owner,
const char *agent_username,
- gboolean agent_has_modify,
GError *error,
gpointer user_data)
{
NMAgentManager *self = NM_AGENT_MANAGER (user_data);
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
+ ConnectionRequest *req = (ConnectionRequest *) parent;
/* Send secrets back to the requesting object */
req->callback (self,
- req->reqid,
+ parent->reqid,
agent_dbus_owner,
agent_username,
- agent_has_modify,
+ req->current_has_modify,
req->setting_name,
req->flags,
error ? NULL : secrets,
@@ -1074,41 +1149,44 @@ get_complete_cb (Request *req,
req->other_data2,
req->other_data3);
- g_hash_table_remove (priv->requests, GUINT_TO_POINTER (req->reqid));
+ g_hash_table_remove (priv->requests, GUINT_TO_POINTER (parent->reqid));
}
static void
-get_cancel_cb (Request *req)
+get_cancel_cb (Request *parent)
{
- if (req->current && req->current_call_id)
- nm_secret_agent_cancel_secrets (req->current, req->current_call_id);
+ ConnectionRequest *req = (ConnectionRequest *) parent;
+
+ req->current_has_modify = FALSE;
+ if (parent->current && parent->current_call_id)
+ nm_secret_agent_cancel_secrets (parent->current, parent->current_call_id);
}
guint32
nm_agent_manager_get_secrets (NMAgentManager *self,
NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid_filter,
+ NMAuthSubject *subject,
GHashTable *existing_secrets,
const char *setting_name,
NMSettingsGetSecretsFlags flags,
- const char *hint,
+ const char **hints,
NMAgentSecretsResultFunc callback,
gpointer callback_data,
gpointer other_data2,
gpointer other_data3)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- Request *req;
+ Request *parent;
+ ConnectionRequest *req;
g_return_val_if_fail (self != NULL, 0);
- g_return_val_if_fail (connection != NULL, 0);
g_return_val_if_fail (NM_IS_CONNECTION (connection), 0);
g_return_val_if_fail (callback != NULL, 0);
nm_log_dbg (LOGD_SETTINGS,
- "Secrets requested for connection %s (%s)",
+ "Secrets requested for connection %s (%s/%s)",
nm_connection_get_path (connection),
+ nm_connection_get_id (connection),
setting_name);
/* NOTE: a few things in the Request handling depend on existing_secrets
@@ -1117,29 +1195,29 @@ nm_agent_manager_get_secrets (NMAgentManager *self,
* both returning NULL if they didn't hash anything.
*/
- req = request_new_get (connection,
- filter_by_uid,
- uid_filter,
- existing_secrets,
- setting_name,
- flags,
- hint,
- callback,
- callback_data,
- other_data2,
- other_data3,
- get_complete_cb,
- self,
- get_next_cb,
- get_cancel_cb);
- g_hash_table_insert (priv->requests, GUINT_TO_POINTER (req->reqid), req);
+ req = connection_request_new_get (connection,
+ subject,
+ existing_secrets,
+ setting_name,
+ "getting",
+ flags,
+ hints,
+ callback,
+ callback_data,
+ other_data2,
+ other_data3,
+ get_complete_cb,
+ self,
+ get_next_cb,
+ get_cancel_cb);
+ parent = (Request *) req;
+ g_hash_table_insert (priv->requests, GUINT_TO_POINTER (parent->reqid), req);
/* Kick off the request */
if (!(req->flags & NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM))
- request_add_agents (self, req);
- req->idle_id = g_idle_add (get_start, req);
-
- return req->reqid;
+ request_add_agents (self, parent);
+ parent->idle_id = g_idle_add (get_start, req);
+ return parent->reqid;
}
void
@@ -1162,49 +1240,44 @@ save_done_cb (NMSecretAgent *agent,
GError *error,
gpointer user_data)
{
- Request *req = user_data;
+ Request *parent = user_data;
+ ConnectionRequest *req = user_data;
const char *agent_dbus_owner;
- g_return_if_fail (call_id == req->current_call_id);
-
- req->current = NULL;
- req->current_call_id = NULL;
+ g_return_if_fail (call_id == parent->current_call_id);
if (error) {
nm_log_dbg (LOGD_AGENTS, "(%s) agent failed save secrets request %p/%s: (%d) %s",
nm_secret_agent_get_description (agent),
- req, req->setting_name,
+ req, parent->detail,
error ? error->code : -1,
(error && error->message) ? error->message : "(unknown)");
-
/* Try the next agent */
- req->next_callback (req);
+ request_next_agent (parent);
return;
}
nm_log_dbg (LOGD_AGENTS, "(%s) agent saved secrets for request %p/%s",
nm_secret_agent_get_description (agent),
- req, req->setting_name);
+ req, parent->detail);
agent_dbus_owner = nm_secret_agent_get_dbus_owner (agent);
- req_complete_success (req, NULL, NULL, agent_dbus_owner, FALSE);
+ req_complete_success (parent, NULL, NULL, agent_dbus_owner);
}
static void
-save_next_cb (Request *req)
+save_next_cb (Request *parent)
{
- if (!next_generic (req, "saving"))
- return;
+ ConnectionRequest *req = (ConnectionRequest *) parent;
- req->current_call_id = nm_secret_agent_save_secrets (NM_SECRET_AGENT (req->current),
- req->connection,
- save_done_cb,
- req);
- if (req->current_call_id == NULL) {
+ parent->current_call_id = nm_secret_agent_save_secrets (parent->current,
+ req->connection,
+ save_done_cb,
+ req);
+ if (parent->current_call_id == NULL) {
/* Shouldn't hit this, but handle it anyway */
- g_warn_if_fail (req->current_call_id != NULL);
- req->current = NULL;
- req->next_callback (req);
+ g_warn_if_fail (parent->current_call_id != NULL);
+ request_next_agent (parent);
}
}
@@ -1213,46 +1286,43 @@ save_complete_cb (Request *req,
GHashTable *secrets,
const char *agent_dbus_owner,
const char *agent_username,
- gboolean agent_has_modify,
GError *error,
gpointer user_data)
{
- NMAgentManager *self = NM_AGENT_MANAGER (user_data);
- NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
-
- g_hash_table_remove (priv->requests, GUINT_TO_POINTER (req->reqid));
+ g_hash_table_remove (NM_AGENT_MANAGER_GET_PRIVATE (user_data)->requests,
+ GUINT_TO_POINTER (req->reqid));
}
guint32
nm_agent_manager_save_secrets (NMAgentManager *self,
NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid_filter)
+ NMAuthSubject *subject)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- Request *req;
+ ConnectionRequest *req;
+ Request *parent;
g_return_val_if_fail (self != NULL, 0);
- g_return_val_if_fail (connection != NULL, 0);
g_return_val_if_fail (NM_IS_CONNECTION (connection), 0);
nm_log_dbg (LOGD_SETTINGS,
- "Saving secrets for connection %s",
- nm_connection_get_path (connection));
+ "Saving secrets for connection %s (%s)",
+ nm_connection_get_path (connection),
+ nm_connection_get_id (connection));
- req = request_new_other (connection,
- filter_by_uid,
- uid_filter,
- save_complete_cb,
- self,
- save_next_cb);
- g_hash_table_insert (priv->requests, GUINT_TO_POINTER (req->reqid), req);
+ req = connection_request_new_other (connection,
+ subject,
+ "saving",
+ save_complete_cb,
+ self,
+ save_next_cb);
+ parent = (Request *) req;
+ g_hash_table_insert (priv->requests, GUINT_TO_POINTER (parent->reqid), req);
/* Kick off the request */
- request_add_agents (self, req);
- req->idle_id = g_idle_add (start_generic, req);
-
- return req->reqid;
+ request_add_agents (self, parent);
+ parent->idle_id = g_idle_add (request_start, req);
+ return parent->reqid;
}
/*************************************************************/
@@ -1268,40 +1338,33 @@ delete_done_cb (NMSecretAgent *agent,
g_return_if_fail (call_id == req->current_call_id);
- req->current = NULL;
- req->current_call_id = NULL;
-
if (error) {
nm_log_dbg (LOGD_AGENTS, "(%s) agent failed delete secrets request %p/%s: (%d) %s",
- nm_secret_agent_get_description (agent),
- req, req->setting_name,
+ nm_secret_agent_get_description (agent), req, req->detail,
error ? error->code : -1,
(error && error->message) ? error->message : "(unknown)");
} else {
nm_log_dbg (LOGD_AGENTS, "(%s) agent deleted secrets for request %p/%s",
- nm_secret_agent_get_description (agent),
- req, req->setting_name);
+ nm_secret_agent_get_description (agent), req, req->detail);
}
/* Tell the next agent to delete secrets */
- req->next_callback (req);
+ request_next_agent (req);
}
static void
-delete_next_cb (Request *req)
+delete_next_cb (Request *parent)
{
- if (!next_generic (req, "deleting"))
- return;
+ ConnectionRequest *req = (ConnectionRequest *) parent;
- req->current_call_id = nm_secret_agent_delete_secrets (NM_SECRET_AGENT (req->current),
- req->connection,
- delete_done_cb,
- req);
- if (req->current_call_id == NULL) {
+ parent->current_call_id = nm_secret_agent_delete_secrets (parent->current,
+ req->connection,
+ delete_done_cb,
+ req);
+ if (parent->current_call_id == NULL) {
/* Shouldn't hit this, but handle it anyway */
- g_warn_if_fail (req->current_call_id != NULL);
- req->current = NULL;
- req->next_callback (req);
+ g_warn_if_fail (parent->current_call_id != NULL);
+ request_next_agent (parent);
}
}
@@ -1310,46 +1373,45 @@ delete_complete_cb (Request *req,
GHashTable *secrets,
const char *agent_dbus_owner,
const char *agent_username,
- gboolean agent_has_modify,
GError *error,
gpointer user_data)
{
- NMAgentManager *self = NM_AGENT_MANAGER (user_data);
- NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
-
- g_hash_table_remove (priv->requests, GUINT_TO_POINTER (req->reqid));
+ g_hash_table_remove (NM_AGENT_MANAGER_GET_PRIVATE (user_data)->requests,
+ GUINT_TO_POINTER (req->reqid));
}
guint32
nm_agent_manager_delete_secrets (NMAgentManager *self,
- NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid_filter)
+ NMConnection *connection)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- Request *req;
+ NMAuthSubject *subject;
+ ConnectionRequest *req;
+ Request *parent;
g_return_val_if_fail (self != NULL, 0);
- g_return_val_if_fail (connection != NULL, 0);
g_return_val_if_fail (NM_IS_CONNECTION (connection), 0);
nm_log_dbg (LOGD_SETTINGS,
- "Deleting secrets for connection %s",
- nm_connection_get_path (connection));
-
- req = request_new_other (connection,
- filter_by_uid,
- uid_filter,
- delete_complete_cb,
- self,
- delete_next_cb);
- g_hash_table_insert (priv->requests, GUINT_TO_POINTER (req->reqid), req);
+ "Deleting secrets for connection %s (%s)",
+ nm_connection_get_path (connection),
+ nm_connection_get_id (connection));
+
+ subject = nm_auth_subject_new_internal ();
+ req = connection_request_new_other (connection,
+ subject,
+ "deleting",
+ delete_complete_cb,
+ self,
+ delete_next_cb);
+ g_object_unref (subject);
+ parent = (Request *) req;
+ g_hash_table_insert (priv->requests, GUINT_TO_POINTER (parent->reqid), req);
/* Kick off the request */
- request_add_agents (self, req);
- req->idle_id = g_idle_add (start_generic, req);
-
- return req->reqid;
+ request_add_agents (self, parent);
+ parent->idle_id = g_idle_add (request_start, req);
+ return parent->reqid;
}
/*************************************************************/
@@ -1372,6 +1434,30 @@ nm_agent_manager_get_agent_by_user (NMAgentManager *self, const char *username)
/*************************************************************/
+gboolean
+nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
+ NMAuthSubject *subject,
+ NMSecretAgentCapabilities capability)
+{
+ NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (manager);
+ GHashTableIter iter;
+ NMSecretAgent *agent;
+
+ g_hash_table_iter_init (&iter, priv->agents);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
+ if ( !nm_auth_subject_get_internal (subject)
+ && nm_secret_agent_get_owner_uid (agent) != nm_auth_subject_get_uid (subject))
+ continue;
+
+ if (!(nm_secret_agent_get_capabilities (agent) & capability))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*************************************************************/
+
static void
name_owner_changed_cb (NMDBusManager *dbus_mgr,
const char *name,
@@ -1394,32 +1480,29 @@ agent_permissions_changed_done (NMAuthChain *chain,
NMAgentManager *self = NM_AGENT_MANAGER (user_data);
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
NMSecretAgent *agent;
- NMAuthCallResult result;
+ gboolean share_protected = FALSE, share_open = FALSE;
priv->chains = g_slist_remove (priv->chains, chain);
agent = nm_auth_chain_get_data (chain, "agent");
+ g_assert (agent);
if (error) {
nm_log_dbg (LOGD_AGENTS, "(%s) failed to request updated agent permissions",
nm_secret_agent_get_description (agent));
- nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE);
- nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE);
} else {
nm_log_dbg (LOGD_AGENTS, "(%s) updated agent permissions",
nm_secret_agent_get_description (agent));
- result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED);
- nm_secret_agent_add_permission (agent,
- NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED,
- (result == NM_AUTH_CALL_RESULT_YES));
-
- result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN);
- nm_secret_agent_add_permission (agent,
- NM_AUTH_PERMISSION_WIFI_SHARE_OPEN,
- (result == NM_AUTH_CALL_RESULT_YES));
+ if (nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED) == NM_AUTH_CALL_RESULT_YES)
+ share_protected = TRUE;
+ if (nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN) == NM_AUTH_CALL_RESULT_YES)
+ share_open = TRUE;
}
+ nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, share_protected);
+ nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, share_open);
+
nm_auth_chain_unref (chain);
}
@@ -1435,11 +1518,14 @@ authority_changed_cb (gpointer user_data)
g_hash_table_iter_init (&iter, priv->agents);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
NMAuthChain *chain;
- const char *sender;
/* Kick off permissions requests for this agent */
- sender = nm_secret_agent_get_dbus_owner (agent);
- chain = nm_auth_chain_new_dbus_sender (sender, agent_permissions_changed_done, self);
+ chain = nm_auth_chain_new_subject (nm_secret_agent_get_subject (agent),
+ NULL,
+ agent_permissions_changed_done,
+ self);
+ g_assert (chain);
+ priv->chains = g_slist_append (priv->chains, chain);
/* Make sure if the agent quits while the permissions call is in progress
* that the object sticks around until our callback.
@@ -1447,8 +1533,6 @@ authority_changed_cb (gpointer user_data)
nm_auth_chain_set_data (chain, "agent", g_object_ref (agent), g_object_unref);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE);
-
- priv->chains = g_slist_append (priv->chains, chain);
}
}
@@ -1459,7 +1543,6 @@ nm_agent_manager_get (void)
{
static NMAgentManager *singleton = NULL;
NMAgentManagerPrivate *priv;
- DBusGConnection *connection;
if (singleton)
return g_object_ref (singleton);
@@ -1468,13 +1551,9 @@ nm_agent_manager_get (void)
g_assert (singleton);
priv = NM_AGENT_MANAGER_GET_PRIVATE (singleton);
- priv->session_monitor = nm_session_monitor_get ();
priv->dbus_mgr = nm_dbus_manager_get ();
- connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
- dbus_g_connection_register_g_object (connection,
- NM_DBUS_PATH_AGENT_MANAGER,
- G_OBJECT (singleton));
+ nm_dbus_manager_register_object (priv->dbus_mgr, NM_DBUS_PATH_AGENT_MANAGER, singleton);
g_signal_connect (priv->dbus_mgr,
NM_DBUS_MANAGER_NAME_OWNER_CHANGED,
@@ -1513,8 +1592,7 @@ dispose (GObject *object)
g_hash_table_destroy (priv->agents);
g_hash_table_destroy (priv->requests);
- g_object_unref (priv->session_monitor);
- g_object_unref (priv->dbus_mgr);
+ priv->dbus_mgr = NULL;
}
G_OBJECT_CLASS (nm_agent_manager_parent_class)->dispose (object);
diff --git a/src/settings/nm-agent-manager.h b/src/settings/nm-agent-manager.h
index 343f8a939..5fdd66ef6 100644
--- a/src/settings/nm-agent-manager.h
+++ b/src/settings/nm-agent-manager.h
@@ -41,7 +41,8 @@ typedef enum {
NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER, /*< nick=InvalidIdentifier >*/
NM_AGENT_MANAGER_ERROR_NOT_REGISTERED, /*< nick=NotRegistered >*/
NM_AGENT_MANAGER_ERROR_INTERNAL_ERROR, /*< nick=InternalError >*/
- NM_AGENT_MANAGER_ERROR_NO_SECRETS /*< nick=NoSecrets >*/
+ NM_AGENT_MANAGER_ERROR_NO_SECRETS, /*< nick=NoSecrets >*/
+ NM_AGENT_MANAGER_ERROR_USER_CANCELED /*< nick=UserCanceled >*/
} NMAgentManagerError;
typedef struct {
@@ -75,12 +76,11 @@ typedef void (*NMAgentSecretsResultFunc) (NMAgentManager *manager,
guint32 nm_agent_manager_get_secrets (NMAgentManager *manager,
NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid,
+ NMAuthSubject *subject,
GHashTable *existing_secrets,
const char *setting_name,
NMSettingsGetSecretsFlags flags,
- const char *hint,
+ const char **hints,
NMAgentSecretsResultFunc callback,
gpointer callback_data,
gpointer other_data2,
@@ -91,15 +91,16 @@ void nm_agent_manager_cancel_secrets (NMAgentManager *manager,
guint32 nm_agent_manager_save_secrets (NMAgentManager *manager,
NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid_filter);
+ NMAuthSubject *subject);
guint32 nm_agent_manager_delete_secrets (NMAgentManager *manager,
- NMConnection *connection,
- gboolean filter_by_uid,
- gulong uid_filter);
+ NMConnection *connection);
NMSecretAgent *nm_agent_manager_get_agent_by_user (NMAgentManager *manager,
const char *username);
+gboolean nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
+ NMAuthSubject *subject,
+ NMSecretAgentCapabilities capability);
+
#endif /* NM_AGENT_MANAGER_H */
diff --git a/src/settings/nm-default-wired-connection.c b/src/settings/nm-default-wired-connection.c
deleted file mode 100644
index 9cbfc7608..000000000
--- a/src/settings/nm-default-wired-connection.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager system settings service
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2009 - 2011 Red Hat, Inc.
- */
-
-#include "config.h"
-
-#include <netinet/ether.h>
-
-#include <NetworkManager.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-utils.h>
-
-#include "nm-dbus-glib-types.h"
-#include "nm-marshal.h"
-#include "nm-default-wired-connection.h"
-
-G_DEFINE_TYPE (NMDefaultWiredConnection, nm_default_wired_connection, NM_TYPE_SETTINGS_CONNECTION)
-
-#define NM_DEFAULT_WIRED_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEFAULT_WIRED_CONNECTION, NMDefaultWiredConnectionPrivate))
-
-typedef struct {
- gboolean disposed;
- NMDevice *device;
- GByteArray *mac;
-} NMDefaultWiredConnectionPrivate;
-
-enum {
- TRY_UPDATE,
- DELETED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-/****************************************************************/
-
-NMDevice *
-nm_default_wired_connection_get_device (NMDefaultWiredConnection *wired)
-{
- g_return_val_if_fail (NM_IS_DEFAULT_WIRED_CONNECTION (wired), NULL);
-
- return NM_DEFAULT_WIRED_CONNECTION_GET_PRIVATE (wired)->device;
-}
-
-static void
-commit_changes (NMSettingsConnection *connection,
- NMSettingsConnectionCommitFunc callback,
- gpointer user_data)
-{
- NMDefaultWiredConnection *self = NM_DEFAULT_WIRED_CONNECTION (connection);
-
- /* Keep the object alive over try-update since it might get removed
- * from the settings service there, but we still need it for the callback.
- */
- g_object_ref (connection);
- g_signal_emit (self, signals[TRY_UPDATE], 0);
- callback (connection, NULL, user_data);
- g_object_unref (connection);
-}
-
-static void
-do_delete (NMSettingsConnection *connection,
- NMSettingsConnectionDeleteFunc callback,
- gpointer user_data)
-{
- NMDefaultWiredConnection *self = NM_DEFAULT_WIRED_CONNECTION (connection);
- NMDefaultWiredConnectionPrivate *priv = NM_DEFAULT_WIRED_CONNECTION_GET_PRIVATE (connection);
-
- g_signal_emit (self, signals[DELETED], 0, priv->mac);
- NM_SETTINGS_CONNECTION_CLASS (nm_default_wired_connection_parent_class)->delete (connection,
- callback,
- user_data);
-}
-
-/****************************************************************/
-
-NMDefaultWiredConnection *
-nm_default_wired_connection_new (const GByteArray *mac,
- NMDevice *device,
- const char *defname,
- gboolean read_only)
-{
- NMDefaultWiredConnection *self;
- NMDefaultWiredConnectionPrivate *priv;
- NMSetting *setting;
- char *uuid;
-
- g_return_val_if_fail (mac != NULL, NULL);
- g_return_val_if_fail (mac->len == ETH_ALEN, NULL);
- g_return_val_if_fail (device != NULL, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
- g_return_val_if_fail (defname != NULL, NULL);
-
- self = (NMDefaultWiredConnection *) g_object_new (NM_TYPE_DEFAULT_WIRED_CONNECTION, NULL);
- if (self) {
- priv = NM_DEFAULT_WIRED_CONNECTION_GET_PRIVATE (self);
- priv->device = g_object_ref (device);
- priv->mac = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (priv->mac, mac->data, mac->len);
-
- setting = nm_setting_connection_new ();
-
- uuid = nm_utils_uuid_generate ();
- g_object_set (setting,
- NM_SETTING_CONNECTION_ID, defname,
- NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
- NM_SETTING_CONNECTION_UUID, uuid,
- NM_SETTING_CONNECTION_READ_ONLY, read_only,
- NM_SETTING_CONNECTION_TIMESTAMP, (guint64) time (NULL),
- NULL);
- g_free (uuid);
-
- nm_connection_add_setting (NM_CONNECTION (self), setting);
-
- /* Lock the connection to the specific device */
- setting = nm_setting_wired_new ();
- g_object_set (setting, NM_SETTING_WIRED_MAC_ADDRESS, priv->mac, NULL);
- nm_connection_add_setting (NM_CONNECTION (self), setting);
- }
-
- return self;
-}
-
-static void
-nm_default_wired_connection_init (NMDefaultWiredConnection *self)
-{
-}
-
-static void
-dispose (GObject *object)
-{
- NMDefaultWiredConnectionPrivate *priv = NM_DEFAULT_WIRED_CONNECTION_GET_PRIVATE (object);
-
- if (priv->disposed == FALSE) {
- priv->disposed = TRUE;
- g_object_unref (priv->device);
- g_byte_array_free (priv->mac, TRUE);
- }
-
- G_OBJECT_CLASS (nm_default_wired_connection_parent_class)->dispose (object);
-}
-
-static void
-nm_default_wired_connection_class_init (NMDefaultWiredConnectionClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- NMSettingsConnectionClass *settings_class = NM_SETTINGS_CONNECTION_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (NMDefaultWiredConnectionPrivate));
-
- /* Virtual methods */
- object_class->dispose = dispose;
- settings_class->commit_changes = commit_changes;
- settings_class->delete = do_delete;
-
- /* Signals */
- signals[TRY_UPDATE] =
- g_signal_new ("try-update",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- /* The 'deleted' signal is used to signal intentional deletions (like
- * updating or user-requested deletion) rather than using the
- * superclass' 'removed' signal, since that signal doesn't have the
- * semantics we want; it gets emitted as a side-effect of various operations
- * and is meant more for D-Bus clients instead of in-service uses.
- */
- signals[DELETED] =
- g_signal_new ("deleted",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-}
diff --git a/src/settings/nm-default-wired-connection.h b/src/settings/nm-default-wired-connection.h
deleted file mode 100644
index bf185cd03..000000000
--- a/src/settings/nm-default-wired-connection.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager system settings service
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2009 - 2011 Red Hat, Inc.
- */
-
-#ifndef NM_DEFAULT_WIRED_CONNECTION_H
-#define NM_DEFAULT_WIRED_CONNECTION_H
-
-#include "nm-settings-connection.h"
-#include "nm-device.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_DEFAULT_WIRED_CONNECTION (nm_default_wired_connection_get_type ())
-#define NM_DEFAULT_WIRED_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEFAULT_WIRED_CONNECTION, NMDefaultWiredConnection))
-#define NM_DEFAULT_WIRED_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEFAULT_WIRED_CONNECTION, NMDefaultWiredConnectionClass))
-#define NM_IS_DEFAULT_WIRED_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEFAULT_WIRED_CONNECTION))
-#define NM_IS_DEFAULT_WIRED_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEFAULT_WIRED_CONNECTION))
-#define NM_DEFAULT_WIRED_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEFAULT_WIRED_CONNECTION, NMDefaultWiredConnectionClass))
-
-typedef struct {
- NMSettingsConnection parent;
-} NMDefaultWiredConnection;
-
-typedef struct {
- NMSettingsConnectionClass parent;
-} NMDefaultWiredConnectionClass;
-
-GType nm_default_wired_connection_get_type (void);
-
-NMDefaultWiredConnection *nm_default_wired_connection_new (const GByteArray *mac,
- NMDevice *device,
- const char *defname,
- gboolean read_only);
-
-NMDevice *nm_default_wired_connection_get_device (NMDefaultWiredConnection *wired);
-
-G_END_DECLS
-
-#endif /* NM_DEFAULT_WIRED_CONNECTION_H */
diff --git a/src/settings/nm-inotify-helper.c b/src/settings/nm-inotify-helper.c
index 2391d993b..7231b57ec 100644
--- a/src/settings/nm-inotify-helper.c
+++ b/src/settings/nm-inotify-helper.c
@@ -23,7 +23,6 @@
#include <sys/inotify.h>
#include <glib.h>
-#include "nm-marshal.h"
#include "nm-inotify-helper.h"
#include "nm-logging.h"
@@ -133,13 +132,6 @@ init_inotify (NMInotifyHelper *self)
/* Watch the inotify descriptor for file/directory change events */
channel = g_io_channel_unix_new (priv->ifd);
- if (!channel) {
- nm_log_warn (LOGD_SETTINGS, "couldn't create new GIOChannel");
- close (priv->ifd);
- priv->ifd = -1;
- return FALSE;
- }
-
g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL);
g_io_channel_set_encoding (channel, NULL, NULL);
@@ -158,11 +150,9 @@ nm_inotify_helper_get (void)
if (!singleton) {
singleton = (NMInotifyHelper *) g_object_new (NM_TYPE_INOTIFY_HELPER, NULL);
- if (!singleton)
- return NULL;
if (!init_inotify (singleton)) {
- g_object_unref (singleton);
+ g_clear_object (&singleton);
return NULL;
}
} else
@@ -209,8 +199,7 @@ nm_inotify_helper_class_init (NMInotifyHelperClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMInotifyHelperClass, event),
- NULL, NULL,
- _nm_marshal_VOID__POINTER_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_STRING);
}
diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c
index 4594ca880..bf0bba129 100644
--- a/src/settings/nm-secret-agent.c
+++ b/src/settings/nm-secret-agent.c
@@ -29,7 +29,9 @@
#include "NetworkManager.h"
#include "nm-secret-agent.h"
+#include "nm-dbus-manager.h"
#include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
#include "nm-logging.h"
G_DEFINE_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT)
@@ -39,18 +41,15 @@ G_DEFINE_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT)
NMSecretAgentPrivate))
typedef struct {
- gboolean disposed;
-
char *description;
- char *owner;
+ NMAuthSubject *subject;
char *identifier;
- uid_t owner_uid;
char *owner_username;
+ NMSecretAgentCapabilities capabilities;
guint32 hash;
GSList *permissions;
- NMDBusManager *dbus_mgr;
DBusGProxy *proxy;
guint proxy_destroy_id;
@@ -101,15 +100,14 @@ nm_secret_agent_get_description (NMSecretAgent *agent)
{
NMSecretAgentPrivate *priv;
- g_return_val_if_fail (agent != NULL, NULL);
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
priv = NM_SECRET_AGENT_GET_PRIVATE (agent);
if (!priv->description) {
- priv->description = g_strdup_printf ("%s/%s/%u",
- priv->owner,
+ priv->description = g_strdup_printf ("%s/%s/%lu",
+ nm_auth_subject_get_dbus_sender (priv->subject),
priv->identifier,
- priv->owner_uid);
+ nm_auth_subject_get_uid (priv->subject));
}
return priv->description;
@@ -118,48 +116,67 @@ nm_secret_agent_get_description (NMSecretAgent *agent)
const char *
nm_secret_agent_get_dbus_owner (NMSecretAgent *agent)
{
- g_return_val_if_fail (agent != NULL, NULL);
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
- return NM_SECRET_AGENT_GET_PRIVATE (agent)->owner;
+ return nm_auth_subject_get_dbus_sender (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
}
const char *
nm_secret_agent_get_identifier (NMSecretAgent *agent)
{
- g_return_val_if_fail (agent != NULL, NULL);
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
return NM_SECRET_AGENT_GET_PRIVATE (agent)->identifier;
}
-uid_t
+gulong
nm_secret_agent_get_owner_uid (NMSecretAgent *agent)
{
- g_return_val_if_fail (agent != NULL, G_MAXUINT);
- g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), G_MAXUINT);
+ g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), G_MAXULONG);
- return NM_SECRET_AGENT_GET_PRIVATE (agent)->owner_uid;
+ return nm_auth_subject_get_uid (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
}
const char *
-nm_secret_agent_get_owner_username(NMSecretAgent *agent)
+nm_secret_agent_get_owner_username (NMSecretAgent *agent)
{
- g_return_val_if_fail (agent != NULL, NULL);
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
return NM_SECRET_AGENT_GET_PRIVATE (agent)->owner_username;
}
+gulong
+nm_secret_agent_get_pid (NMSecretAgent *agent)
+{
+ g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), G_MAXULONG);
+
+ return nm_auth_subject_get_pid (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
+}
+
+NMSecretAgentCapabilities
+nm_secret_agent_get_capabilities (NMSecretAgent *agent)
+{
+ g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NM_SECRET_AGENT_CAPABILITY_NONE);
+
+ return NM_SECRET_AGENT_GET_PRIVATE (agent)->capabilities;
+}
+
guint32
-nm_secret_agent_get_hash (NMSecretAgent *agent)
+nm_secret_agent_get_hash (NMSecretAgent *agent)
{
- g_return_val_if_fail (agent != NULL, 0);
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), 0);
return NM_SECRET_AGENT_GET_PRIVATE (agent)->hash;
}
+NMAuthSubject *
+nm_secret_agent_get_subject (NMSecretAgent *agent)
+{
+ g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
+
+ return NM_SECRET_AGENT_GET_PRIVATE (agent)->subject;
+}
+
/**
* nm_secret_agent_add_permission:
* @agent: A #NMSecretAgent.
@@ -258,14 +275,13 @@ gconstpointer
nm_secret_agent_get_secrets (NMSecretAgent *self,
NMConnection *connection,
const char *setting_name,
- const char *hint,
+ const char **hints,
NMSettingsGetSecretsFlags flags,
NMSecretAgentCallback callback,
gpointer callback_data)
{
NMSecretAgentPrivate *priv;
GHashTable *hash;
- const char *hints[2] = { hint, NULL };
Request *r;
g_return_val_if_fail (self != NULL, NULL);
@@ -440,48 +456,45 @@ proxy_cleanup (NMSecretAgent *self)
/*************************************************************/
NMSecretAgent *
-nm_secret_agent_new (NMDBusManager *dbus_mgr,
- const char *owner,
+nm_secret_agent_new (DBusGMethodInvocation *context,
+ NMAuthSubject *subject,
const char *identifier,
- uid_t owner_uid)
+ NMSecretAgentCapabilities capabilities)
{
NMSecretAgent *self;
NMSecretAgentPrivate *priv;
- DBusGConnection *bus;
char *hash_str, *username;
struct passwd *pw;
- g_return_val_if_fail (owner != NULL, NULL);
+ g_return_val_if_fail (context != NULL, NULL);
+ g_return_val_if_fail (NM_IS_AUTH_SUBJECT (subject), NULL);
g_return_val_if_fail (identifier != NULL, NULL);
- pw = getpwuid (owner_uid);
+ pw = getpwuid (nm_auth_subject_get_uid (subject));
g_return_val_if_fail (pw != NULL, NULL);
g_return_val_if_fail (pw->pw_name[0] != '\0', NULL);
username = g_strdup (pw->pw_name);
self = (NMSecretAgent *) g_object_new (NM_TYPE_SECRET_AGENT, NULL);
- if (self) {
- priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-
- priv->owner = g_strdup (owner);
- priv->identifier = g_strdup (identifier);
- priv->owner_uid = owner_uid;
- priv->owner_username = g_strdup (username);
-
- hash_str = g_strdup_printf ("%08u%s", owner_uid, identifier);
- priv->hash = g_str_hash (hash_str);
- g_free (hash_str);
-
- priv->dbus_mgr = g_object_ref (dbus_mgr);
- bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
- priv->proxy = dbus_g_proxy_new_for_name (bus,
- owner,
- NM_DBUS_PATH_SECRET_AGENT,
- NM_DBUS_INTERFACE_SECRET_AGENT);
- g_assert (priv->proxy);
- priv->proxy_destroy_id = g_signal_connect_swapped (priv->proxy, "destroy",
- G_CALLBACK (proxy_cleanup), self);
- }
+ priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+
+ priv->identifier = g_strdup (identifier);
+ priv->owner_username = g_strdup (username);
+ priv->capabilities = capabilities;
+ priv->subject = g_object_ref (subject);
+
+ hash_str = g_strdup_printf ("%16lu%s", nm_auth_subject_get_uid (subject), identifier);
+ priv->hash = g_str_hash (hash_str);
+ g_free (hash_str);
+
+ priv->proxy = nm_dbus_manager_new_proxy (nm_dbus_manager_get (),
+ context,
+ nm_auth_subject_get_dbus_sender (subject),
+ NM_DBUS_PATH_SECRET_AGENT,
+ NM_DBUS_INTERFACE_SECRET_AGENT);
+ g_assert (priv->proxy);
+ priv->proxy_destroy_id = g_signal_connect_swapped (priv->proxy, "destroy",
+ G_CALLBACK (proxy_cleanup), self);
g_free (username);
return self;
@@ -501,24 +514,25 @@ dispose (GObject *object)
{
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (object);
- if (!priv->disposed) {
- priv->disposed = TRUE;
+ proxy_cleanup (NM_SECRET_AGENT (object));
+ g_clear_object (&priv->subject);
- g_free (priv->description);
- g_free (priv->owner);
- g_free (priv->identifier);
- g_free (priv->owner_username);
+ G_OBJECT_CLASS (nm_secret_agent_parent_class)->dispose (object);
+}
- g_slist_foreach (priv->permissions, (GFunc) g_free, NULL);
- g_slist_free (priv->permissions);
+static void
+finalize (GObject *object)
+{
+ NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (object);
- g_hash_table_destroy (priv->requests);
+ g_free (priv->description);
+ g_free (priv->identifier);
+ g_free (priv->owner_username);
- proxy_cleanup (NM_SECRET_AGENT (object));
- g_object_unref (priv->dbus_mgr);
- }
+ g_slist_free_full (priv->permissions, g_free);
+ g_hash_table_destroy (priv->requests);
- G_OBJECT_CLASS (nm_secret_agent_parent_class)->dispose (object);
+ G_OBJECT_CLASS (nm_secret_agent_parent_class)->finalize (object);
}
static void
@@ -530,5 +544,6 @@ nm_secret_agent_class_init (NMSecretAgentClass *config_class)
/* virtual methods */
object_class->dispose = dispose;
+ object_class->finalize = finalize;
}
diff --git a/src/settings/nm-secret-agent.h b/src/settings/nm-secret-agent.h
index 1bb74eac5..69699af1a 100644
--- a/src/settings/nm-secret-agent.h
+++ b/src/settings/nm-secret-agent.h
@@ -29,6 +29,15 @@
#include <nm-connection.h>
#include "nm-dbus-manager.h"
#include "nm-settings-flags.h"
+#include "nm-auth-subject.h"
+
+/* NOTE: ensure these capabilities match those in introspection/nm-secret-agent.xml and
+ * libnm-glib/nm-secret-agent.h.
+ */
+typedef enum {
+ NM_SECRET_AGENT_CAPABILITY_NONE = 0x0,
+ NM_SECRET_AGENT_CAPABILITY_VPN_HINTS = 0x1,
+} NMSecretAgentCapabilities;
#define NM_TYPE_SECRET_AGENT (nm_secret_agent_get_type ())
#define NM_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SECRET_AGENT, NMSecretAgent))
@@ -47,10 +56,10 @@ typedef struct {
GType nm_secret_agent_get_type (void);
-NMSecretAgent *nm_secret_agent_new (NMDBusManager *dbus_mgr,
- const char *owner,
+NMSecretAgent *nm_secret_agent_new (DBusGMethodInvocation *context,
+ NMAuthSubject *subject,
const char *identifier,
- uid_t owner_uid);
+ NMSecretAgentCapabilities capabilities);
const char *nm_secret_agent_get_description (NMSecretAgent *agent);
@@ -58,12 +67,18 @@ const char *nm_secret_agent_get_dbus_owner (NMSecretAgent *agent);
const char *nm_secret_agent_get_identifier (NMSecretAgent *agent);
-uid_t nm_secret_agent_get_owner_uid (NMSecretAgent *agent);
+gulong nm_secret_agent_get_owner_uid (NMSecretAgent *agent);
const char *nm_secret_agent_get_owner_username (NMSecretAgent *agent);
+gulong nm_secret_agent_get_pid (NMSecretAgent *agent);
+
+NMSecretAgentCapabilities nm_secret_agent_get_capabilities (NMSecretAgent *agent);
+
guint32 nm_secret_agent_get_hash (NMSecretAgent *agent);
+NMAuthSubject *nm_secret_agent_get_subject (NMSecretAgent *agent);
+
void nm_secret_agent_add_permission (NMSecretAgent *agent,
const char *permission,
gboolean allowed);
@@ -80,7 +95,7 @@ typedef void (*NMSecretAgentCallback) (NMSecretAgent *agent,
gconstpointer nm_secret_agent_get_secrets (NMSecretAgent *agent,
NMConnection *connection,
const char *setting_name,
- const char *hint,
+ const char **hints,
NMSettingsGetSecretsFlags flags,
NMSecretAgentCallback callback,
gpointer callback_data);
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index 7bd35cf8d..d20dbc984 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2008 - 2012 Red Hat, Inc.
+ * (C) Copyright 2008 - 2013 Red Hat, Inc.
*/
#include "config.h"
@@ -38,9 +38,9 @@
#include "nm-dbus-glib-types.h"
#include "nm-logging.h"
#include "nm-manager-auth.h"
-#include "nm-marshal.h"
#include "nm-agent-manager.h"
#include "NetworkManagerUtils.h"
+#include "nm-properties-changed-signal.h"
#define SETTINGS_TIMESTAMPS_FILE NMSTATEDIR "/timestamps"
#define SETTINGS_SEEN_BSSIDS_FILE NMSTATEDIR "/seen-bssids"
@@ -52,6 +52,13 @@ static void impl_settings_connection_update (NMSettingsConnection *connection,
GHashTable *new_settings,
DBusGMethodInvocation *context);
+static void impl_settings_connection_update_unsaved (NMSettingsConnection *connection,
+ GHashTable *new_settings,
+ DBusGMethodInvocation *context);
+
+static void impl_settings_connection_save (NMSettingsConnection *connection,
+ DBusGMethodInvocation *context);
+
static void impl_settings_connection_delete (NMSettingsConnection *connection,
DBusGMethodInvocation *context);
@@ -70,12 +77,13 @@ G_DEFINE_TYPE (NMSettingsConnection, nm_settings_connection, NM_TYPE_CONNECTION)
enum {
PROP_0 = 0,
PROP_VISIBLE,
+ PROP_UNSAVED,
};
enum {
UPDATED,
REMOVED,
- UNREGISTER,
+ UPDATED_BY_USER,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -83,11 +91,22 @@ static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
gboolean disposed;
- NMDBusManager *dbus_mgr;
NMAgentManager *agent_mgr;
NMSessionMonitor *session_monitor;
guint session_changed_id;
+ /* TRUE if the connection has not yet been saved to disk,
+ * or if it contains changes that have not been saved to disk.
+ */
+ gboolean unsaved;
+
+ /* TRUE if the connection was generated by NetworkManager and has
+ * not been saved or modified by the user.
+ */
+ gboolean nm_generated;
+
+ guint updated_idle_id;
+
GSList *pending_auths; /* List of pending authentication requests */
gboolean visible; /* Is this connection is visible by some session? */
GSList *reqs; /* in-progress secrets requests */
@@ -110,6 +129,11 @@ typedef struct {
guint64 timestamp; /* Up-to-date timestamp of connection use */
gboolean timestamp_set;
GHashTable *seen_bssids; /* Up-to-date BSSIDs that's been seen for the connection */
+
+ int autoconnect_retries;
+ gint32 autoconnect_retry_time;
+ NMDeviceStateReason autoconnect_blocked_reason;
+
} NMSettingsConnectionPrivate;
/**************************************************************/
@@ -205,7 +229,6 @@ set_visible (NMSettingsConnection *self, gboolean new_visible)
gboolean
nm_settings_connection_is_visible (NMSettingsConnection *self)
{
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE);
return NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->visible;
@@ -218,7 +241,6 @@ nm_settings_connection_recheck_visibility (NMSettingsConnection *self)
NMSettingConnection *s_con;
guint32 num, i;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_SETTINGS_CONNECTION (self));
priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
@@ -269,7 +291,6 @@ nm_settings_connection_check_permission (NMSettingsConnection *self,
guint32 num, i;
const char *puser;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE);
priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
@@ -371,28 +392,80 @@ secrets_cleared_cb (NMSettingsConnection *self)
priv->agent_secrets = NULL;
}
-/* Update the settings of this connection to match that of 'new', taking care to
- * make a private copy of secrets.
+static gboolean
+emit_updated (NMSettingsConnection *self)
+{
+ NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->updated_idle_id = 0;
+ g_signal_emit (self, signals[UPDATED], 0);
+ return FALSE;
+}
+
+static void
+set_unsaved (NMSettingsConnection *self, gboolean now_unsaved)
+{
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+
+ if (priv->unsaved != now_unsaved) {
+ priv->unsaved = now_unsaved;
+ if (!priv->unsaved)
+ priv->nm_generated = FALSE;
+
+ g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_UNSAVED);
+ }
+}
+
+static void
+changed_cb (NMSettingsConnection *self, gpointer user_data)
+{
+ gboolean update_unsaved = !!user_data;
+
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+
+ if (update_unsaved)
+ set_unsaved (self, TRUE);
+ if (priv->updated_idle_id == 0)
+ priv->updated_idle_id = g_idle_add ((GSourceFunc) emit_updated, self);
+}
+
+/* Update the settings of this connection to match that of 'new_connection',
+ * taking care to make a private copy of secrets.
*/
gboolean
nm_settings_connection_replace_settings (NMSettingsConnection *self,
- NMConnection *new,
+ NMConnection *new_connection,
+ gboolean update_unsaved,
GError **error)
{
NMSettingsConnectionPrivate *priv;
- GHashTable *new_settings, *hash = NULL;
+ GHashTable *hash = NULL;
gboolean success = FALSE;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE);
- g_return_val_if_fail (new != NULL, FALSE);
- g_return_val_if_fail (NM_IS_CONNECTION (new), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (new_connection), FALSE);
priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- new_settings = nm_connection_to_hash (new, NM_SETTING_HASH_FLAG_ALL);
- g_assert (new_settings);
- if (nm_connection_replace_settings (NM_CONNECTION (self), new_settings, error)) {
+ nm_utils_normalize_connection (new_connection, TRUE);
+ if (!nm_connection_verify (new_connection, error))
+ return FALSE;
+
+ /* Do nothing if there's nothing to update */
+ if (nm_connection_compare (NM_CONNECTION (self),
+ new_connection,
+ NM_SETTING_COMPARE_FLAG_EXACT)) {
+ return TRUE;
+ }
+
+ /* Disconnect the changed signal to ensure we don't set Unsaved when
+ * it's not required.
+ */
+ g_signal_handlers_block_by_func (self, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
+
+ if (nm_connection_replace_settings_from_connection (NM_CONNECTION (self),
+ new_connection,
+ error)) {
+ priv->nm_generated = FALSE;
+
/* Cache the just-updated system secrets in case something calls
* nm_connection_clear_secrets() and clears them.
*/
@@ -405,14 +478,23 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
if (priv->agent_secrets) {
hash = nm_connection_to_hash (priv->agent_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
if (hash) {
- success = nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, error);
+ (void) nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, NULL);
g_hash_table_destroy (hash);
}
}
nm_settings_connection_recheck_visibility (self);
+
+ /* Manually emit changed signal since we disconnected the handler, but
+ * only update Unsaved if the caller wanted us to.
+ */
+ changed_cb (self, GUINT_TO_POINTER (update_unsaved));
+
+ g_signal_emit (self, signals[UPDATED_BY_USER], 0);
}
- g_hash_table_destroy (new_settings);
+
+ g_signal_handlers_unblock_by_func (self, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
+
return success;
}
@@ -423,61 +505,63 @@ ignore_cb (NMSettingsConnection *connection,
{
}
-/* Replaces the settings in this connection with those in 'new'. If any changes
- * are made, commits them to permanent storage and to any other subsystems
- * watching this connection. Before returning, 'callback' is run with the given
- * 'user_data' along with any errors encountered.
+/* Replaces the settings in this connection with those in 'new_connection'. If
+ * any changes are made, commits them to permanent storage and to any other
+ * subsystems watching this connection. Before returning, 'callback' is run
+ * with the given 'user_data' along with any errors encountered.
*/
void
nm_settings_connection_replace_and_commit (NMSettingsConnection *self,
- NMConnection *new,
+ NMConnection *new_connection,
NMSettingsConnectionCommitFunc callback,
gpointer user_data)
{
GError *error = NULL;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_SETTINGS_CONNECTION (self));
- g_return_if_fail (new != NULL);
- g_return_if_fail (NM_IS_CONNECTION (new));
+ g_return_if_fail (NM_IS_CONNECTION (new_connection));
- if (!callback)
- callback = ignore_cb;
-
- /* Do nothing if there's nothing to update */
- if (nm_connection_compare (NM_CONNECTION (self),
- NM_CONNECTION (new),
- NM_SETTING_COMPARE_FLAG_EXACT)) {
- callback (self, NULL, user_data);
- return;
- }
-
- if (nm_settings_connection_replace_settings (self, new, &error)) {
+ if (nm_settings_connection_replace_settings (self, new_connection, TRUE, &error)) {
nm_settings_connection_commit_changes (self, callback, user_data);
} else {
- callback (self, error, user_data);
+ if (callback)
+ callback (self, error, user_data);
g_clear_error (&error);
}
}
+static void
+commit_changes (NMSettingsConnection *self,
+ NMSettingsConnectionCommitFunc callback,
+ gpointer user_data)
+{
+ /* Subclasses only call this function if the save was successful, so at
+ * this point the connection is synced to disk and no longer unsaved.
+ */
+ set_unsaved (self, FALSE);
+
+ g_object_ref (self);
+ callback (self, NULL, user_data);
+ g_object_unref (self);
+}
+
void
nm_settings_connection_commit_changes (NMSettingsConnection *connection,
NMSettingsConnectionCommitFunc callback,
gpointer user_data)
{
- g_return_if_fail (connection != NULL);
g_return_if_fail (NM_IS_SETTINGS_CONNECTION (connection));
- g_return_if_fail (callback != NULL);
if (NM_SETTINGS_CONNECTION_GET_CLASS (connection)->commit_changes) {
NM_SETTINGS_CONNECTION_GET_CLASS (connection)->commit_changes (connection,
- callback,
+ callback ? callback : ignore_cb,
user_data);
} else {
GError *error = g_error_new (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INTERNAL_ERROR,
"%s: %s:%d commit_changes() unimplemented", __func__, __FILE__, __LINE__);
- callback (connection, error, user_data);
+ if (callback)
+ callback (connection, error, user_data);
g_error_free (error);
}
}
@@ -487,35 +571,23 @@ nm_settings_connection_delete (NMSettingsConnection *connection,
NMSettingsConnectionDeleteFunc callback,
gpointer user_data)
{
- g_return_if_fail (connection != NULL);
g_return_if_fail (NM_IS_SETTINGS_CONNECTION (connection));
- g_return_if_fail (callback != NULL);
if (NM_SETTINGS_CONNECTION_GET_CLASS (connection)->delete) {
NM_SETTINGS_CONNECTION_GET_CLASS (connection)->delete (connection,
- callback,
+ callback ? callback : ignore_cb,
user_data);
} else {
GError *error = g_error_new (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INTERNAL_ERROR,
"%s: %s:%d delete() unimplemented", __func__, __FILE__, __LINE__);
- callback (connection, error, user_data);
+ if (callback)
+ callback (connection, error, user_data);
g_error_free (error);
}
}
static void
-commit_changes (NMSettingsConnection *connection,
- NMSettingsConnectionCommitFunc callback,
- gpointer user_data)
-{
- g_object_ref (connection);
- g_signal_emit (connection, signals[UPDATED], 0);
- callback (connection, NULL, user_data);
- g_object_unref (connection);
-}
-
-static void
remove_entry_from_db (NMSettingsConnection *connection, const char* db_name)
{
GKeyFile *key_file;
@@ -565,7 +637,7 @@ do_delete (NMSettingsConnection *connection,
/* Tell agents to remove secrets for this connection */
for_agents = nm_connection_duplicate (NM_CONNECTION (connection));
nm_connection_clear_secrets (for_agents);
- nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents, FALSE, 0);
+ nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents);
g_object_unref (for_agents);
/* Remove timestamp from timestamps database file */
@@ -574,7 +646,10 @@ do_delete (NMSettingsConnection *connection,
/* Remove connection from seen-bssids database file */
remove_entry_from_db (connection, "seen-bssids");
+ nm_settings_connection_signal_remove (connection);
+
callback (connection, NULL, user_data);
+
g_object_unref (connection);
}
@@ -792,13 +867,11 @@ agent_secrets_done_cb (NMAgentManager *manager,
/**
* nm_settings_connection_get_secrets:
* @connection: the #NMSettingsConnection
- * @filter_by_uid: if TRUE, only request secrets from agents registered by the
- * same UID as @uid.
- * @uid: when @filter_by_uid is TRUE, only request secrets from agents belonging
- * to this UID
+ * @subject: the #NMAuthSubject originating the request
* @setting_name: the setting to return secrets for
* @flags: flags to modify the secrets request
- * @hint: the name of a key in @setting_name for which a secret may be required
+ * @hints: key names in @setting_name for which secrets may be required, or some
+ * other information about the request
* @callback: the function to call with returned secrets
* @callback_data: user data to pass to @callback
*
@@ -809,11 +882,10 @@ agent_secrets_done_cb (NMAgentManager *manager,
**/
guint32
nm_settings_connection_get_secrets (NMSettingsConnection *self,
- gboolean filter_by_uid,
- gulong uid,
+ NMAuthSubject *subject,
const char *setting_name,
NMSettingsGetSecretsFlags flags,
- const char *hint,
+ const char **hints,
NMSettingsConnectionSecretsFunc callback,
gpointer callback_data,
GError **error)
@@ -821,6 +893,7 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
GHashTable *existing_secrets;
guint32 call_id = 0;
+ char *joined_hints = NULL;
/* Use priv->secrets to work around the fact that nm_connection_clear_secrets()
* will clear secrets on this object's settings.
@@ -843,12 +916,11 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
existing_secrets = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
call_id = nm_agent_manager_get_secrets (priv->agent_mgr,
NM_CONNECTION (self),
- filter_by_uid,
- uid,
+ subject,
existing_secrets,
setting_name,
flags,
- hint,
+ hints,
agent_secrets_done_cb,
self,
callback,
@@ -856,12 +928,17 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
if (existing_secrets)
g_hash_table_unref (existing_secrets);
- nm_log_dbg (LOGD_SETTINGS, "(%s/%s:%u) secrets requested flags 0x%X hint '%s'",
- nm_connection_get_uuid (NM_CONNECTION (self)),
- setting_name,
- call_id,
- flags,
- hint);
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_SETTINGS)) {
+ if (hints)
+ joined_hints = g_strjoinv (",", (char **) hints);
+ nm_log_dbg (LOGD_SETTINGS, "(%s/%s:%u) secrets requested flags 0x%X hints '%s'",
+ nm_connection_get_uuid (NM_CONNECTION (self)),
+ setting_name,
+ call_id,
+ flags,
+ joined_hints ? joined_hints : "(none)");
+ g_free (joined_hints);
+ }
return call_id;
}
@@ -884,7 +961,7 @@ nm_settings_connection_cancel_secrets (NMSettingsConnection *self,
typedef void (*AuthCallback) (NMSettingsConnection *connection,
DBusGMethodInvocation *context,
- gulong sender_uid,
+ NMAuthSubject *subject,
GError *error,
gpointer data);
@@ -901,115 +978,114 @@ pk_auth_cb (NMAuthChain *chain,
const char *perm;
AuthCallback callback;
gpointer callback_data;
- gulong sender_uid;
+ NMAuthSubject *subject;
priv->pending_auths = g_slist_remove (priv->pending_auths, chain);
+ perm = nm_auth_chain_get_data (chain, "perm");
+ g_assert (perm);
+ result = nm_auth_chain_get_result (chain, perm);
+
/* If our NMSettingsConnection is already gone, do nothing */
if (chain_error) {
error = g_error_new (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_GENERAL,
"Error checking authorization: %s",
chain_error->message ? chain_error->message : "(unknown)");
- } else {
- perm = nm_auth_chain_get_data (chain, "perm");
- g_assert (perm);
- result = nm_auth_chain_get_result (chain, perm);
-
- /* Caller didn't successfully authenticate */
- if (result != NM_AUTH_CALL_RESULT_YES) {
- error = g_error_new_literal (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_NOT_PRIVILEGED,
- "Insufficient privileges.");
- }
+ } else if (result != NM_AUTH_CALL_RESULT_YES) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Insufficient privileges.");
}
callback = nm_auth_chain_get_data (chain, "callback");
callback_data = nm_auth_chain_get_data (chain, "callback-data");
- sender_uid = nm_auth_chain_get_data_ulong (chain, "sender-uid");
- callback (self, context, sender_uid, error, callback_data);
+ subject = nm_auth_chain_get_data (chain, "subject");
+ callback (self, context, subject, error, callback_data);
g_clear_error (&error);
nm_auth_chain_unref (chain);
}
-static gboolean
-check_user_in_acl (NMConnection *connection,
- DBusGMethodInvocation *context,
- NMDBusManager *dbus_mgr,
- NMSessionMonitor *session_monitor,
- gulong *out_sender_uid,
- GError **error)
-{
- gulong sender_uid = G_MAXULONG;
- char *error_desc = NULL;
-
- g_return_val_if_fail (connection != NULL, FALSE);
- g_return_val_if_fail (context != NULL, FALSE);
- g_return_val_if_fail (session_monitor != NULL, FALSE);
-
- /* Get the caller's UID */
- if (!nm_auth_get_caller_uid (context, dbus_mgr, &sender_uid, &error_desc)) {
- g_set_error_literal (error,
- NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_PERMISSION_DENIED,
- error_desc);
- g_free (error_desc);
- return FALSE;
- }
+/**
+ * _new_auth_subject:
+ * @context: the D-Bus method invocation context
+ * @error: on failure, a #GError
+ *
+ * Creates an NMAuthSubject for the caller.
+ *
+ * Returns: the #NMAuthSubject on success, or %NULL on failure and sets @error
+ */
+static NMAuthSubject *
+_new_auth_subject (DBusGMethodInvocation *context, GError **error)
+{
+ NMAuthSubject *subject;
- /* Make sure the UID can view this connection */
- if (!nm_auth_uid_in_acl (connection, session_monitor, sender_uid, &error_desc)) {
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject) {
g_set_error_literal (error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
- error_desc);
- g_free (error_desc);
- return FALSE;
+ "Unable to determine UID of request.");
}
- if (out_sender_uid)
- *out_sender_uid = sender_uid;
- return TRUE;
+ return subject;
}
static void
auth_start (NMSettingsConnection *self,
DBusGMethodInvocation *context,
+ NMAuthSubject *subject,
const char *check_permission,
AuthCallback callback,
gpointer callback_data)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
NMAuthChain *chain;
- gulong sender_uid = G_MAXULONG;
GError *error = NULL;
+ char *error_desc = NULL;
- if (!check_user_in_acl (NM_CONNECTION (self),
- context,
- priv->dbus_mgr,
- priv->session_monitor,
- &sender_uid,
- &error)) {
- callback (self, context, G_MAXULONG, error, callback_data);
+ g_return_if_fail (context != NULL);
+ g_return_if_fail (NM_IS_AUTH_SUBJECT (subject));
+
+ /* Ensure the caller can view this connection */
+ if (!nm_auth_uid_in_acl (NM_CONNECTION (self),
+ priv->session_monitor,
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ error_desc);
+ g_free (error_desc);
+
+ callback (self, context, subject, error, callback_data);
g_clear_error (&error);
return;
}
- if (check_permission) {
- chain = nm_auth_chain_new (context, NULL, pk_auth_cb, self);
- g_assert (chain);
- nm_auth_chain_set_data (chain, "perm", (gpointer) check_permission, NULL);
- nm_auth_chain_set_data (chain, "callback", callback, NULL);
- nm_auth_chain_set_data (chain, "callback-data", callback_data, NULL);
- nm_auth_chain_set_data_ulong (chain, "sender-uid", sender_uid);
-
- nm_auth_chain_add_call (chain, check_permission, TRUE);
- priv->pending_auths = g_slist_append (priv->pending_auths, chain);
- } else {
+ if (!check_permission) {
/* Don't need polkit auth, automatic success */
- callback (self, context, sender_uid, NULL, callback_data);
+ callback (self, context, subject, NULL, callback_data);
+ return;
+ }
+
+ chain = nm_auth_chain_new_subject (subject, context, pk_auth_cb, self);
+ if (!chain) {
+ g_set_error_literal (&error,
+ NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Unable to authenticate the request.");
+ callback (self, context, subject, error, callback_data);
+ g_clear_error (&error);
+ return;
}
+
+ priv->pending_auths = g_slist_append (priv->pending_auths, chain);
+ nm_auth_chain_set_data (chain, "perm", (gpointer) check_permission, NULL);
+ nm_auth_chain_set_data (chain, "callback", callback, NULL);
+ nm_auth_chain_set_data (chain, "callback-data", callback_data, NULL);
+ nm_auth_chain_set_data (chain, "subject", g_object_ref (subject), g_object_unref);
+ nm_auth_chain_add_call (chain, check_permission, TRUE);
}
/**** DBus method handlers ************************************/
@@ -1019,7 +1095,6 @@ check_writable (NMConnection *connection, GError **error)
{
NMSettingConnection *s_con;
- g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
s_con = nm_connection_get_setting_connection (connection);
@@ -1049,7 +1124,7 @@ check_writable (NMConnection *connection, GError **error)
static void
get_settings_auth_cb (NMSettingsConnection *self,
DBusGMethodInvocation *context,
- gulong sender_uid,
+ NMAuthSubject *subject,
GError *error,
gpointer data)
{
@@ -1086,7 +1161,19 @@ get_settings_auth_cb (NMSettingsConnection *self,
s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (dupl_con));
if (bssid_list && s_wifi) {
g_object_set (s_wifi, NM_SETTING_WIRELESS_SEEN_BSSIDS, bssid_list, NULL);
- nm_utils_slist_free (bssid_list, g_free);
+ g_slist_free_full (bssid_list, g_free);
+ }
+
+ /* 802-11-wireless.security property is deprecated. But we set it here so that
+ * we don't disturb old clients that might expect it being properly set for
+ * secured Wi-Fi connections.
+ */
+ if (nm_connection_get_setting_wireless_security (NM_CONNECTION (dupl_con))) {
+ s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (dupl_con));
+ g_assert (s_wifi);
+ g_object_set (s_wifi,
+ NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NULL);
}
/* Secrets should *never* be returned by the GetSettings method, they
@@ -1105,16 +1192,45 @@ static void
impl_settings_connection_get_settings (NMSettingsConnection *self,
DBusGMethodInvocation *context)
{
- auth_start (self, context, NULL, get_settings_auth_cb, NULL);
+ NMAuthSubject *subject;
+ GError *error = NULL;
+
+ subject = _new_auth_subject (context, &error);
+ if (subject) {
+ auth_start (self, context, subject, NULL, get_settings_auth_cb, NULL);
+ g_object_unref (subject);
+ } else {
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ }
}
typedef struct {
DBusGMethodInvocation *context;
NMAgentManager *agent_mgr;
- gulong sender_uid;
+ NMAuthSubject *subject;
+ NMConnection *new_settings;
+ gboolean save_to_disk;
} UpdateInfo;
static void
+update_complete (NMSettingsConnection *self,
+ UpdateInfo *info,
+ GError *error)
+{
+ if (error)
+ dbus_g_method_return_error (info->context, error);
+ else
+ dbus_g_method_return (info->context);
+
+ g_clear_object (&info->subject);
+ g_clear_object (&info->agent_mgr);
+ g_clear_object (&info->new_settings);
+ memset (info, 0, sizeof (*info));
+ g_free (info);
+}
+
+static void
con_update_cb (NMSettingsConnection *self,
GError *error,
gpointer user_data)
@@ -1122,9 +1238,7 @@ con_update_cb (NMSettingsConnection *self,
UpdateInfo *info = user_data;
NMConnection *for_agent;
- if (error)
- dbus_g_method_return_error (info->context, error);
- else {
+ if (!error) {
/* Dupe the connection so we can clear out non-agent-owned secrets,
* as agent-owned secrets are the only ones we send back be saved.
* Only send secrets to agents of the same UID that called update too.
@@ -1133,54 +1247,52 @@ con_update_cb (NMSettingsConnection *self,
nm_connection_clear_secrets_with_flags (for_agent,
secrets_filter_cb,
GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
- nm_agent_manager_save_secrets (info->agent_mgr, for_agent, TRUE, info->sender_uid);
+ nm_agent_manager_save_secrets (info->agent_mgr, for_agent, info->subject);
g_object_unref (for_agent);
-
- dbus_g_method_return (info->context);
}
- g_object_unref (info->agent_mgr);
- memset (info, 0, sizeof (*info));
- g_free (info);
+ update_complete (self, info, error);
}
static void
update_auth_cb (NMSettingsConnection *self,
DBusGMethodInvocation *context,
- gulong sender_uid,
+ NMAuthSubject *subject,
GError *error,
gpointer data)
{
- NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- NMConnection *new_settings = data;
- UpdateInfo *info;
+ UpdateInfo *info = data;
+ GError *local = NULL;
- if (error)
- dbus_g_method_return_error (context, error);
- else {
- info = g_malloc0 (sizeof (*info));
- info->context = context;
- info->agent_mgr = g_object_ref (priv->agent_mgr);
- info->sender_uid = sender_uid;
-
- /* Cache the new secrets from the agent, as stuff like inotify-triggered
- * changes to connection's backing config files will blow them away if
- * they're in the main connection.
- */
- update_agent_secrets_cache (self, new_settings);
+ if (error) {
+ update_complete (self, info, error);
+ return;
+ }
- /* Update and commit our settings. */
+ /* Cache the new secrets from the agent, as stuff like inotify-triggered
+ * changes to connection's backing config files will blow them away if
+ * they're in the main connection.
+ */
+ update_agent_secrets_cache (self, info->new_settings);
+
+ if (info->save_to_disk) {
nm_settings_connection_replace_and_commit (self,
- new_settings,
- con_update_cb,
- info);
+ info->new_settings,
+ con_update_cb,
+ info);
+ } else {
+ /* Do nothing if there's nothing to update */
+ if (!nm_connection_compare (NM_CONNECTION (self), info->new_settings, NM_SETTING_COMPARE_FLAG_EXACT)) {
+ if (!nm_settings_connection_replace_settings (self, info->new_settings, TRUE, &local))
+ g_assert (local);
+ }
+ con_update_cb (self, local, info);
+ g_clear_error (&local);
}
-
- g_object_unref (new_settings);
}
static const char *
-get_modify_permission_update (NMConnection *old, NMConnection *new)
+get_update_modify_permission (NMConnection *old, NMConnection *new)
{
NMSettingConnection *s_con;
guint32 orig_num = 0, new_num = 0;
@@ -1206,54 +1318,103 @@ get_modify_permission_update (NMConnection *old, NMConnection *new)
}
static void
-impl_settings_connection_update (NMSettingsConnection *self,
- GHashTable *new_settings,
- DBusGMethodInvocation *context)
+impl_settings_connection_update_helper (NMSettingsConnection *self,
+ GHashTable *new_settings,
+ DBusGMethodInvocation *context,
+ gboolean save_to_disk)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- NMConnection *tmp;
+ NMAuthSubject *subject = NULL;
+ NMConnection *tmp = NULL;
GError *error = NULL;
+ UpdateInfo *info;
+ const char *permission;
+ char *error_desc = NULL;
+
+ g_assert (new_settings != NULL || save_to_disk == TRUE);
/* If the connection is read-only, that has to be changed at the source of
* the problem (ex a system settings plugin that can't write connections out)
* instead of over D-Bus.
*/
- if (!check_writable (NM_CONNECTION (self), &error)) {
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
- }
+ if (!check_writable (NM_CONNECTION (self), &error))
+ goto error;
/* Check if the settings are valid first */
- tmp = nm_connection_new_from_hash (new_settings, &error);
- if (!tmp) {
- g_assert (error);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
+ if (new_settings) {
+ tmp = nm_connection_new_from_hash (new_settings, &error);
+ if (!tmp) {
+ g_assert (error);
+ goto error;
+ }
}
+ subject = _new_auth_subject (context, &error);
+ if (!subject)
+ goto error;
+
/* And that the new connection settings will be visible to the user
* that's sending the update request. You can't make a connection
* invisible to yourself.
*/
- if (!check_user_in_acl (tmp,
- context,
- priv->dbus_mgr,
- priv->session_monitor,
- NULL,
- &error)) {
- dbus_g_method_return_error (context, error);
- g_clear_error (&error);
- g_object_unref (tmp);
- return;
+ if (!nm_auth_uid_in_acl (tmp ? tmp : NM_CONNECTION (self),
+ priv->session_monitor,
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ error_desc);
+ g_free (error_desc);
+ goto error;
}
- auth_start (self,
- context,
- get_modify_permission_update (NM_CONNECTION (self), tmp),
- update_auth_cb,
- tmp);
+ info = g_malloc0 (sizeof (*info));
+ info->context = context;
+ info->agent_mgr = g_object_ref (priv->agent_mgr);
+ info->subject = subject;
+ info->save_to_disk = save_to_disk;
+ info->new_settings = tmp;
+
+ permission = get_update_modify_permission (NM_CONNECTION (self),
+ tmp ? tmp : NM_CONNECTION (self));
+ auth_start (self, context, subject, permission, update_auth_cb, info);
+ return;
+
+error:
+ g_clear_object (&tmp);
+ g_clear_object (&subject);
+
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&error);
+}
+
+static void
+impl_settings_connection_update (NMSettingsConnection *self,
+ GHashTable *new_settings,
+ DBusGMethodInvocation *context)
+{
+ g_assert (new_settings);
+ impl_settings_connection_update_helper (self, new_settings, context, TRUE);
+}
+
+static void
+impl_settings_connection_update_unsaved (NMSettingsConnection *self,
+ GHashTable *new_settings,
+ DBusGMethodInvocation *context)
+{
+ g_assert (new_settings);
+ impl_settings_connection_update_helper (self, new_settings, context, FALSE);
+}
+
+static void
+impl_settings_connection_save (NMSettingsConnection *self,
+ DBusGMethodInvocation *context)
+{
+ /* Do nothing if the connection is already synced with disk */
+ if (NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->unsaved == TRUE)
+ impl_settings_connection_update_helper (self, NULL, context, TRUE);
+ else
+ dbus_g_method_return (context);
}
static void
@@ -1272,7 +1433,7 @@ con_delete_cb (NMSettingsConnection *connection,
static void
delete_auth_cb (NMSettingsConnection *self,
DBusGMethodInvocation *context,
- gulong sender_uid,
+ NMAuthSubject *subject,
GError *error,
gpointer data)
{
@@ -1305,6 +1466,7 @@ static void
impl_settings_connection_delete (NMSettingsConnection *self,
DBusGMethodInvocation *context)
{
+ NMAuthSubject *subject;
GError *error = NULL;
if (!check_writable (NM_CONNECTION (self), &error)) {
@@ -1313,7 +1475,14 @@ impl_settings_connection_delete (NMSettingsConnection *self,
return;
}
- auth_start (self, context, get_modify_permission_basic (self), delete_auth_cb, NULL);
+ subject = _new_auth_subject (context, &error);
+ if (subject) {
+ auth_start (self, context, subject, get_modify_permission_basic (self), delete_auth_cb, NULL);
+ g_object_unref (subject);
+ } else {
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ }
}
/**************************************************************/
@@ -1351,7 +1520,7 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self,
static void
dbus_secrets_auth_cb (NMSettingsConnection *self,
DBusGMethodInvocation *context,
- gulong sender_uid,
+ NMAuthSubject *subject,
GError *error,
gpointer user_data)
{
@@ -1362,8 +1531,7 @@ dbus_secrets_auth_cb (NMSettingsConnection *self,
if (!error) {
call_id = nm_settings_connection_get_secrets (self,
- TRUE,
- sender_uid,
+ subject,
setting_name,
NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED,
NULL,
@@ -1389,11 +1557,22 @@ impl_settings_connection_get_secrets (NMSettingsConnection *self,
const gchar *setting_name,
DBusGMethodInvocation *context)
{
- auth_start (self,
- context,
- get_modify_permission_basic (self),
- dbus_secrets_auth_cb,
- g_strdup (setting_name));
+ NMAuthSubject *subject;
+ GError *error = NULL;
+
+ subject = _new_auth_subject (context, &error);
+ if (subject) {
+ auth_start (self,
+ context,
+ subject,
+ get_modify_permission_basic (self),
+ dbus_secrets_auth_cb,
+ g_strdup (setting_name));
+ g_object_unref (subject);
+ } else {
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ }
}
/**************************************************************/
@@ -1407,9 +1586,17 @@ nm_settings_connection_signal_remove (NMSettingsConnection *self)
/* And unregistered last to ensure the removed signal goes out before
* we take the connection off the bus.
*/
- g_signal_emit_by_name (self, "unregister");
+ nm_dbus_manager_unregister_object (nm_dbus_manager_get (), G_OBJECT (self));
+}
+
+gboolean
+nm_settings_connection_get_unsaved (NMSettingsConnection *self)
+{
+ return NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->unsaved;
}
+/**************************************************************/
+
/**
* nm_settings_connection_get_timestamp:
* @connection: the #NMSettingsConnection
@@ -1573,7 +1760,6 @@ nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection)
char *bssid_str;
GSList *bssid_list = NULL;
- g_return_val_if_fail (connection != NULL, 0);
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), NULL);
g_hash_table_iter_init (&iter, priv->seen_bssids);
@@ -1594,7 +1780,6 @@ gboolean
nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection,
const struct ether_addr *bssid)
{
- g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), FALSE);
g_return_val_if_fail (bssid != NULL, FALSE);
@@ -1630,7 +1815,6 @@ nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection,
/* Add the new BSSID; let the hash take ownership of the allocated BSSID string */
bssid_str = nm_utils_hwaddr_ntoa (seen_bssid, ARPHRD_ETHER);
- g_return_if_fail (bssid_str != NULL);
g_hash_table_insert (priv->seen_bssids, mac_dup (seen_bssid), bssid_str);
/* Build up a list of all the BSSIDs in string form */
@@ -1729,6 +1913,111 @@ nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connecti
}
}
+#define AUTOCONNECT_RETRIES_DEFAULT 4
+#define AUTOCONNECT_RESET_RETRIES_TIMER 300
+
+int
+nm_settings_connection_get_autoconnect_retries (NMSettingsConnection *connection)
+{
+ return NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->autoconnect_retries;
+}
+
+void
+nm_settings_connection_set_autoconnect_retries (NMSettingsConnection *connection,
+ int retries)
+{
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection);
+
+ priv->autoconnect_retries = retries;
+ if (retries)
+ priv->autoconnect_retry_time = 0;
+ else
+ priv->autoconnect_retry_time = nm_utils_get_monotonic_timestamp_s () + AUTOCONNECT_RESET_RETRIES_TIMER;
+}
+
+void
+nm_settings_connection_reset_autoconnect_retries (NMSettingsConnection *connection)
+{
+ nm_settings_connection_set_autoconnect_retries (connection, AUTOCONNECT_RETRIES_DEFAULT);
+}
+
+gint32
+nm_settings_connection_get_autoconnect_retry_time (NMSettingsConnection *connection)
+{
+ return NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->autoconnect_retry_time;
+}
+
+NMDeviceStateReason
+nm_settings_connection_get_autoconnect_blocked_reason (NMSettingsConnection *connection)
+{
+ return NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->autoconnect_blocked_reason;
+}
+
+void
+nm_settings_connection_set_autoconnect_blocked_reason (NMSettingsConnection *connection,
+ NMDeviceStateReason reason)
+{
+ NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->autoconnect_blocked_reason = reason;
+}
+
+gboolean
+nm_settings_connection_can_autoconnect (NMSettingsConnection *connection)
+{
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection);
+ NMSettingConnection *s_con;
+ const char *permission;
+
+ if ( !priv->visible
+ || priv->autoconnect_retries == 0
+ || priv->autoconnect_blocked_reason != NM_DEVICE_STATE_REASON_NONE)
+ return FALSE;
+
+ s_con = nm_connection_get_setting_connection (NM_CONNECTION (connection));
+ if (!nm_setting_connection_get_autoconnect (s_con))
+ return FALSE;
+
+ permission = nm_utils_get_shared_wifi_permission (NM_CONNECTION (connection));
+ if (permission) {
+ if (nm_settings_connection_check_permission (connection, permission) == FALSE)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * nm_settings_connection_get_nm_generated:
+ * @connection: an #NMSettingsConnection
+ *
+ * Gets the "nm-generated" flag on @connection.
+ *
+ * A connection is "nm-generated" if it was generated by
+ * nm_device_generate_connection() and then assumed by #NMManager, and
+ * it has not been modified or saved by the user since then. In other
+ * words, an "nm-generated" connection reflects state that is entirely
+ * external to NetworkManager.
+ */
+gboolean
+nm_settings_connection_get_nm_generated (NMSettingsConnection *connection)
+{
+ return NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->nm_generated;
+}
+
+/**
+ * nm_settings_connection_set_nm_generated:
+ * @connection: an #NMSettingsConnection
+ *
+ * Sets the "nm-generated" flag on @connection; see
+ * nm_settings_connection_get_nm_generated().
+ */
+void
+nm_settings_connection_set_nm_generated (NMSettingsConnection *connection)
+{
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection);
+
+ priv->nm_generated = TRUE;
+}
+
/**************************************************************/
static void
@@ -1736,8 +2025,6 @@ nm_settings_connection_init (NMSettingsConnection *self)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- priv->dbus_mgr = nm_dbus_manager_get ();
-
priv->visible = FALSE;
priv->session_monitor = nm_session_monitor_get ();
@@ -1750,7 +2037,11 @@ nm_settings_connection_init (NMSettingsConnection *self)
priv->seen_bssids = g_hash_table_new_full (mac_hash, mac_equal, g_free, g_free);
- g_signal_connect (self, "secrets-cleared", G_CALLBACK (secrets_cleared_cb), NULL);
+ priv->autoconnect_retries = AUTOCONNECT_RETRIES_DEFAULT;
+ priv->autoconnect_blocked_reason = NM_DEVICE_STATE_REASON_NONE;
+
+ g_signal_connect (self, NM_CONNECTION_SECRETS_CLEARED, G_CALLBACK (secrets_cleared_cb), NULL);
+ g_signal_connect (self, NM_CONNECTION_CHANGED, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
}
static void
@@ -1764,6 +2055,11 @@ dispose (GObject *object)
goto out;
priv->disposed = TRUE;
+ if (priv->updated_idle_id) {
+ g_source_remove (priv->updated_idle_id);
+ priv->updated_idle_id = 0;
+ }
+
if (priv->system_secrets)
g_object_unref (priv->system_secrets);
if (priv->agent_secrets)
@@ -1786,9 +2082,7 @@ dispose (GObject *object)
if (priv->session_changed_id)
g_signal_handler_disconnect (priv->session_monitor, priv->session_changed_id);
- g_object_unref (priv->session_monitor);
g_object_unref (priv->agent_mgr);
- g_object_unref (priv->dbus_mgr);
out:
G_OBJECT_CLASS (nm_settings_connection_parent_class)->dispose (object);
@@ -1798,9 +2092,14 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (object);
+
switch (prop_id) {
case PROP_VISIBLE:
- g_value_set_boolean (value, NM_SETTINGS_CONNECTION_GET_PRIVATE (object)->visible);
+ g_value_set_boolean (value, priv->visible);
+ break;
+ case PROP_UNSAVED:
+ g_value_set_boolean (value, priv->unsaved);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1840,7 +2139,19 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class)
FALSE,
G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_UNSAVED,
+ g_param_spec_boolean (NM_SETTINGS_CONNECTION_UNSAVED,
+ "Unsaved",
+ "TRUE when the connection has not yet been saved "
+ "to permanent storage (eg disk) or when it "
+ "has been changed but not yet saved.",
+ FALSE,
+ G_PARAM_READABLE));
+
/* Signals */
+
+ /* Emitted when the connection is changed for any reason */
signals[UPDATED] =
g_signal_new (NM_SETTINGS_CONNECTION_UPDATED,
G_TYPE_FROM_CLASS (class),
@@ -1850,18 +2161,17 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- signals[REMOVED] =
- g_signal_new (NM_SETTINGS_CONNECTION_REMOVED,
+ /* Emitted when connection is changed from D-Bus */
+ signals[UPDATED_BY_USER] =
+ g_signal_new (NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
- 0,
- NULL, NULL,
+ 0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- /* Not exported */
- signals[UNREGISTER] =
- g_signal_new ("unregister",
+ signals[REMOVED] =
+ g_signal_new (NM_SETTINGS_CONNECTION_REMOVED,
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0,
@@ -1869,6 +2179,7 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
- &dbus_glib_nm_settings_connection_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (class),
+ &dbus_glib_nm_settings_connection_object_info);
}
diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h
index 7875afbe2..0c2ca849b 100644
--- a/src/settings/nm-settings-connection.h
+++ b/src/settings/nm-settings-connection.h
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2008 - 2011 Red Hat, Inc.
+ * (C) Copyright 2008 - 2013 Red Hat, Inc.
*/
#ifndef NM_SETTINGS_CONNECTION_H
@@ -24,6 +24,7 @@
#include <nm-connection.h>
#include "nm-settings-flags.h"
+#include "nm-auth-subject.h"
#include <net/ethernet.h>
G_BEGIN_DECLS
@@ -35,15 +36,20 @@ G_BEGIN_DECLS
#define NM_IS_SETTINGS_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTINGS_CONNECTION))
#define NM_SETTINGS_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTINGS_CONNECTION, NMSettingsConnectionClass))
+/* Signals */
#define NM_SETTINGS_CONNECTION_UPDATED "updated"
#define NM_SETTINGS_CONNECTION_REMOVED "removed"
#define NM_SETTINGS_CONNECTION_GET_SECRETS "get-secrets"
#define NM_SETTINGS_CONNECTION_CANCEL_SECRETS "cancel-secrets"
+/* Emitted when connection is changed by a user action */
+#define NM_SETTINGS_CONNECTION_UPDATED_BY_USER "updated-by-user"
+
+/* Properties */
#define NM_SETTINGS_CONNECTION_VISIBLE "visible"
+#define NM_SETTINGS_CONNECTION_UNSAVED "unsaved"
typedef struct _NMSettingsConnection NMSettingsConnection;
-
typedef struct _NMSettingsConnectionClass NMSettingsConnectionClass;
typedef void (*NMSettingsConnectionCommitFunc) (NMSettingsConnection *connection,
@@ -81,11 +87,12 @@ void nm_settings_connection_commit_changes (NMSettingsConnection *connection,
gpointer user_data);
gboolean nm_settings_connection_replace_settings (NMSettingsConnection *self,
- NMConnection *new_settings,
+ NMConnection *new_connection,
+ gboolean update_unsaved,
GError **error);
void nm_settings_connection_replace_and_commit (NMSettingsConnection *self,
- NMConnection *new_settings,
+ NMConnection *new_connection,
NMSettingsConnectionCommitFunc callback,
gpointer user_data);
@@ -101,11 +108,10 @@ typedef void (*NMSettingsConnectionSecretsFunc) (NMSettingsConnection *connectio
gpointer user_data);
guint32 nm_settings_connection_get_secrets (NMSettingsConnection *connection,
- gboolean filter_by_uid,
- gulong uid,
+ NMAuthSubject *subject,
const char *setting_name,
NMSettingsGetSecretsFlags flags,
- const char *hint,
+ const char **hints,
NMSettingsConnectionSecretsFunc callback,
gpointer callback_data,
GError **error);
@@ -122,6 +128,8 @@ gboolean nm_settings_connection_check_permission (NMSettingsConnection *self,
void nm_settings_connection_signal_remove (NMSettingsConnection *self);
+gboolean nm_settings_connection_get_unsaved (NMSettingsConnection *self);
+
gboolean nm_settings_connection_get_timestamp (NMSettingsConnection *connection,
guint64 *out_timestamp);
@@ -141,6 +149,22 @@ void nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection,
void nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connection);
+int nm_settings_connection_get_autoconnect_retries (NMSettingsConnection *connection);
+void nm_settings_connection_set_autoconnect_retries (NMSettingsConnection *connection,
+ int retries);
+void nm_settings_connection_reset_autoconnect_retries (NMSettingsConnection *connection);
+
+gint32 nm_settings_connection_get_autoconnect_retry_time (NMSettingsConnection *connection);
+
+NMDeviceStateReason nm_settings_connection_get_autoconnect_blocked_reason (NMSettingsConnection *connection);
+void nm_settings_connection_set_autoconnect_blocked_reason (NMSettingsConnection *connection,
+ NMDeviceStateReason reason);
+
+gboolean nm_settings_connection_can_autoconnect (NMSettingsConnection *connection);
+
+void nm_settings_connection_set_nm_generated (NMSettingsConnection *connection);
+gboolean nm_settings_connection_get_nm_generated (NMSettingsConnection *connection);
+
G_END_DECLS
#endif /* NM_SETTINGS_CONNECTION_H */
diff --git a/src/settings/nm-settings-error.h b/src/settings/nm-settings-error.h
index 085ef9550..a2b4cd466 100644
--- a/src/settings/nm-settings-error.h
+++ b/src/settings/nm-settings-error.h
@@ -34,7 +34,6 @@ typedef enum {
NM_SETTINGS_ERROR_SECRETS_REQUEST_CANCELED, /*< nick=SecretsRequestCanceled >*/
NM_SETTINGS_ERROR_PERMISSION_DENIED, /*< nick=PermissionDenied >*/
NM_SETTINGS_ERROR_INVALID_SETTING, /*< nick=InvalidSetting >*/
- NM_SETTINGS_ERROR_NOT_PRIVILEGED, /*< nick=NotPrivileged >*/
NM_SETTINGS_ERROR_ADD_NOT_SUPPORTED, /*< nick=AddNotSupported >*/
NM_SETTINGS_ERROR_UPDATE_NOT_SUPPORTED, /*< nick=UpdateNotSupported >*/
NM_SETTINGS_ERROR_DELETE_NOT_SUPPORTED, /*< nick=DeleteNotSupported >*/
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index 71009a0c7..e90776abe 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -28,7 +28,6 @@
#include <unistd.h>
#include <string.h>
#include <gmodule.h>
-#include <net/if_arp.h>
#include <pwd.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -54,13 +53,11 @@
#include <nm-setting-bond.h>
#include <nm-utils.h>
-#include "../nm-device-ethernet.h"
-#include "../nm-device-wired.h"
+#include "nm-device-ethernet.h"
#include "nm-dbus-glib-types.h"
#include "nm-settings.h"
#include "nm-settings-connection.h"
#include "nm-settings-error.h"
-#include "nm-default-wired-connection.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
#include "nm-manager-auth.h"
@@ -69,8 +66,8 @@
#include "nm-agent-manager.h"
#include "nm-settings-utils.h"
#include "nm-connection-provider.h"
-
-#define CONFIG_KEY_NO_AUTO_DEFAULT "no-auto-default"
+#include "nm-config.h"
+#include "NetworkManagerUtils.h"
/* LINKER CRACKROCK */
#define EXPORT(sym) void * __export_##sym = &sym;
@@ -94,15 +91,25 @@ static gboolean impl_settings_list_connections (NMSettings *self,
GPtrArray **connections,
GError **error);
-static gboolean impl_settings_get_connection_by_uuid (NMSettings *self,
- const char *uuid,
- char **out_object_path,
- GError **error);
+static void impl_settings_get_connection_by_uuid (NMSettings *self,
+ const char *uuid,
+ DBusGMethodInvocation *context);
static void impl_settings_add_connection (NMSettings *self,
GHashTable *settings,
DBusGMethodInvocation *context);
+static void impl_settings_add_connection_unsaved (NMSettings *self,
+ GHashTable *settings,
+ DBusGMethodInvocation *context);
+
+static void impl_settings_load_connections (NMSettings *self,
+ char **filenames,
+ DBusGMethodInvocation *context);
+
+static void impl_settings_reload_connections (NMSettings *self,
+ DBusGMethodInvocation *context);
+
static void impl_settings_save_hostname (NMSettings *self,
const char *hostname,
DBusGMethodInvocation *context);
@@ -110,6 +117,7 @@ static void impl_settings_save_hostname (NMSettings *self,
#include "nm-settings-glue.h"
static void unmanaged_specs_changed (NMSystemConfigInterface *config, gpointer user_data);
+static void unrecognized_specs_changed (NMSystemConfigInterface *config, gpointer user_data);
static void connection_provider_init (NMConnectionProvider *cp_class);
@@ -119,19 +127,19 @@ G_DEFINE_TYPE_EXTENDED (NMSettings, nm_settings, G_TYPE_OBJECT, 0,
typedef struct {
NMDBusManager *dbus_mgr;
- DBusGConnection *bus;
NMAgentManager *agent_mgr;
- char *config_file;
+ NMConfig *config;
- NMSessionMonitor *session_monitor;
GSList *auths;
GSList *plugins;
gboolean connections_loaded;
GHashTable *connections;
GSList *unmanaged_specs;
+ GSList *unrecognized_specs;
+ GSList *get_connections_cache;
} NMSettingsPrivate;
#define NM_SETTINGS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTINGS, NMSettingsPrivate))
@@ -140,9 +148,9 @@ enum {
PROPERTIES_CHANGED,
CONNECTION_ADDED,
CONNECTION_UPDATED,
+ CONNECTION_UPDATED_BY_USER,
CONNECTION_REMOVED,
CONNECTION_VISIBILITY_CHANGED,
- CONNECTIONS_LOADED,
AGENT_REGISTERED,
NEW_CONNECTION, /* exported, not used internally */
@@ -155,19 +163,25 @@ enum {
PROP_UNMANAGED_SPECS,
PROP_HOSTNAME,
PROP_CAN_MODIFY,
+ PROP_CONNECTIONS,
LAST_PROP
};
static void
+plugin_connection_added (NMSystemConfigInterface *config,
+ NMSettingsConnection *connection,
+ gpointer user_data)
+{
+ claim_connection (NM_SETTINGS (user_data), connection, TRUE);
+}
+
+static void
load_connections (NMSettings *self)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GSList *iter;
- if (priv->connections_loaded)
- return;
-
for (iter = priv->plugins; iter; iter = g_slist_next (iter)) {
NMSystemConfigInterface *plugin = NM_SYSTEM_CONFIG_INTERFACE (iter->data);
GSList *plugin_connections;
@@ -183,15 +197,19 @@ load_connections (NMSettings *self)
claim_connection (self, NM_SETTINGS_CONNECTION (elt->data), TRUE);
g_slist_free (plugin_connections);
+
+ g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED,
+ G_CALLBACK (plugin_connection_added), self);
+ g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED,
+ G_CALLBACK (unmanaged_specs_changed), self);
+ g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNRECOGNIZED_SPECS_CHANGED,
+ G_CALLBACK (unrecognized_specs_changed), self);
}
priv->connections_loaded = TRUE;
- /* FIXME: Bad hack */
unmanaged_specs_changed (NULL, self);
-
- g_signal_emit (self, signals[CONNECTIONS_LOADED], 0);
- g_signal_emit_by_name (self, NM_CP_SIGNAL_CONNECTIONS_LOADED);
+ unrecognized_specs_changed (NULL, self);
}
void
@@ -203,14 +221,11 @@ nm_settings_for_each_connection (NMSettings *self,
GHashTableIter iter;
gpointer data;
- g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_SETTINGS (self));
g_return_if_fail (for_each_func != NULL);
priv = NM_SETTINGS_GET_PRIVATE (self);
- load_connections (self);
-
g_hash_table_iter_init (&iter, priv->connections);
while (g_hash_table_iter_next (&iter, NULL, &data))
for_each_func (self, NM_SETTINGS_CONNECTION (data), user_data);
@@ -225,8 +240,6 @@ impl_settings_list_connections (NMSettings *self,
GHashTableIter iter;
gpointer key;
- load_connections (self);
-
*connections = g_ptr_array_sized_new (g_hash_table_size (priv->connections) + 1);
g_hash_table_iter_init (&iter, priv->connections);
while (g_hash_table_iter_next (&iter, &key, NULL))
@@ -241,14 +254,11 @@ nm_settings_get_connection_by_uuid (NMSettings *self, const char *uuid)
NMSettingsConnection *candidate;
GHashTableIter iter;
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_SETTINGS (self), NULL);
g_return_val_if_fail (uuid != NULL, NULL);
priv = NM_SETTINGS_GET_PRIVATE (self);
- load_connections (self);
-
g_hash_table_iter_init (&iter, priv->connections);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &candidate)) {
if (g_strcmp0 (uuid, nm_connection_get_uuid (NM_CONNECTION (candidate))) == 0)
@@ -258,25 +268,52 @@ nm_settings_get_connection_by_uuid (NMSettings *self, const char *uuid)
return NULL;
}
-static gboolean
+static void
impl_settings_get_connection_by_uuid (NMSettings *self,
const char *uuid,
- char **out_object_path,
- GError **error)
+ DBusGMethodInvocation *context)
{
NMSettingsConnection *connection = NULL;
+ NMAuthSubject *subject = NULL;
+ GError *error = NULL;
+ char *error_desc = NULL;
connection = nm_settings_get_connection_by_uuid (self, uuid);
- if (connection)
- *out_object_path = g_strdup (nm_connection_get_path (NM_CONNECTION (connection)));
- else {
- g_set_error_literal (error,
- NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_INVALID_CONNECTION,
- "No connection with the UUID was found.");
+ if (!connection) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "No connection with the UUID was found.");
+ goto error;
}
- return !!connection;
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Unable to determine UID of request.");
+ goto error;
+ }
+
+ if (!nm_auth_uid_in_acl (NM_CONNECTION (connection),
+ nm_session_monitor_get (),
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ error_desc);
+ g_free (error_desc);
+ goto error;
+ }
+
+ g_clear_object (&subject);
+ dbus_g_method_return (context, nm_connection_get_path (NM_CONNECTION (connection)));
+ return;
+
+error:
+ g_assert (error);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ g_clear_object (&subject);
}
static int
@@ -308,8 +345,10 @@ connection_sort (gconstpointer pa, gconstpointer pb)
return 1;
}
-/* Returns a list of NMSettingsConnections. Caller must free the list with
- * g_slist_free().
+/* Returns a list of NMSettingsConnections.
+ * The list is sorted in the order suitable for auto-connecting, i.e.
+ * first go connections with autoconnect=yes and most recent timestamp.
+ * Caller must free the list with g_slist_free().
*/
GSList *
nm_settings_get_connections (NMSettings *self)
@@ -331,27 +370,14 @@ nm_settings_get_connection_by_path (NMSettings *self, const char *path)
{
NMSettingsPrivate *priv;
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_SETTINGS (self), NULL);
g_return_val_if_fail (path != NULL, NULL);
priv = NM_SETTINGS_GET_PRIVATE (self);
- load_connections (self);
-
return (NMSettingsConnection *) g_hash_table_lookup (priv->connections, path);
}
-static void
-clear_unmanaged_specs (NMSettings *self)
-{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
-
- g_slist_foreach (priv->unmanaged_specs, (GFunc) g_free, NULL);
- g_slist_free (priv->unmanaged_specs);
- priv->unmanaged_specs = NULL;
-}
-
static char*
uscore_to_wincaps (const char *uscore)
{
@@ -402,7 +428,6 @@ nm_settings_get_unmanaged_specs (NMSettings *self)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- load_connections (self);
return priv->unmanaged_specs;
}
@@ -452,56 +477,67 @@ nm_settings_get_hostname (NMSettings *self)
return NULL;
}
-static void
-plugin_connection_added (NMSystemConfigInterface *config,
- NMSettingsConnection *connection,
- gpointer user_data)
-{
- claim_connection (NM_SETTINGS (user_data), connection, TRUE);
-}
-
static gboolean
-find_unmanaged_device (NMSettings *self, const char *needle)
+find_spec (GSList *spec_list, const char *spec)
{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GSList *iter;
- for (iter = priv->unmanaged_specs; iter; iter = g_slist_next (iter)) {
- if (!strcmp ((const char *) iter->data, needle))
+ for (iter = spec_list; iter; iter = g_slist_next (iter)) {
+ if (!strcmp ((const char *) iter->data, spec))
return TRUE;
}
return FALSE;
}
static void
-unmanaged_specs_changed (NMSystemConfigInterface *config,
- gpointer user_data)
+update_specs (NMSettings *self, GSList **specs_ptr,
+ GSList * (*get_specs_func) (NMSystemConfigInterface *))
{
- NMSettings *self = NM_SETTINGS (user_data);
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GSList *iter;
- clear_unmanaged_specs (self);
+ g_slist_free_full (*specs_ptr, g_free);
+ *specs_ptr = NULL;
- /* Ask all the plugins for their unmanaged specs */
for (iter = priv->plugins; iter; iter = g_slist_next (iter)) {
GSList *specs, *specs_iter;
- specs = nm_system_config_interface_get_unmanaged_specs (NM_SYSTEM_CONFIG_INTERFACE (iter->data));
+ specs = get_specs_func (NM_SYSTEM_CONFIG_INTERFACE (iter->data));
for (specs_iter = specs; specs_iter; specs_iter = specs_iter->next) {
- if (!find_unmanaged_device (self, (const char *) specs_iter->data)) {
- priv->unmanaged_specs = g_slist_prepend (priv->unmanaged_specs, specs_iter->data);
+ if (!find_spec (*specs_ptr, (const char *) specs_iter->data)) {
+ *specs_ptr = g_slist_prepend (*specs_ptr, specs_iter->data);
} else
g_free (specs_iter->data);
}
g_slist_free (specs);
}
+}
+static void
+unmanaged_specs_changed (NMSystemConfigInterface *config,
+ gpointer user_data)
+{
+ NMSettings *self = NM_SETTINGS (user_data);
+ NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
+
+ update_specs (self, &priv->unmanaged_specs,
+ nm_system_config_interface_get_unmanaged_specs);
g_object_notify (G_OBJECT (self), NM_SETTINGS_UNMANAGED_SPECS);
}
static void
+unrecognized_specs_changed (NMSystemConfigInterface *config,
+ gpointer user_data)
+{
+ NMSettings *self = NM_SETTINGS (user_data);
+ NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
+
+ update_specs (self, &priv->unrecognized_specs,
+ nm_system_config_interface_get_unrecognized_specs);
+}
+
+static void
hostname_changed (NMSystemConfigInterface *config,
GParamSpec *pspec,
gpointer user_data)
@@ -523,8 +559,6 @@ add_plugin (NMSettings *self, NMSystemConfigInterface *plugin)
priv->plugins = g_slist_append (priv->plugins, g_object_ref (plugin));
- g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED,
- G_CALLBACK (plugin_connection_added), self);
g_signal_connect (plugin, "notify::hostname", G_CALLBACK (hostname_changed), self);
nm_system_config_interface_init (plugin, NULL);
@@ -534,9 +568,6 @@ add_plugin (NMSettings *self, NMSystemConfigInterface *plugin)
NM_SYSTEM_CONFIG_INTERFACE_INFO, &pinfo,
NULL);
- g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED,
- G_CALLBACK (unmanaged_specs_changed), self);
-
nm_log_info (LOGD_SETTINGS, "Loaded plugin %s: %s", pname, pinfo);
g_free (pname);
g_free (pinfo);
@@ -570,10 +601,9 @@ find_plugin (GSList *list, const char *pname)
static void
add_keyfile_plugin (NMSettings *self)
{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GObject *keyfile_plugin;
- keyfile_plugin = nm_settings_keyfile_plugin_new (priv->config_file);
+ keyfile_plugin = nm_settings_keyfile_plugin_new ();
g_assert (keyfile_plugin);
add_plugin (self, NM_SYSTEM_CONFIG_INTERFACE (keyfile_plugin));
}
@@ -581,7 +611,6 @@ add_keyfile_plugin (NMSettings *self)
static gboolean
load_plugins (NMSettings *self, const char **plugins, GError **error)
{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GSList *list = NULL;
const char **iter;
gboolean keyfile_added = FALSE;
@@ -592,7 +621,7 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
char *full_name, *path;
const char *pname = *iter;
GObject *obj;
- GObject * (*factory_func) (const char *);
+ GObject * (*factory_func) (void);
/* strip leading spaces */
while (g_ascii_isspace (*pname))
@@ -616,7 +645,7 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
}
full_name = g_strdup_printf ("nm-settings-plugin-%s", pname);
- path = g_module_build_path (PLUGINDIR, full_name);
+ path = g_module_build_path (NMPLUGINDIR, full_name);
plugin = g_module_open (path, G_MODULE_BIND_LOCAL);
if (!plugin) {
@@ -640,7 +669,7 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
break;
}
- obj = (*factory_func) (priv->config_file);
+ obj = (*factory_func) ();
if (!obj || !NM_IS_SYSTEM_CONFIG_INTERFACE (obj)) {
g_set_error (error, 0, 0,
"Plugin '%s' returned invalid system config object.",
@@ -659,77 +688,30 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
if (!keyfile_added)
add_keyfile_plugin (self);
- g_slist_foreach (list, (GFunc) g_object_unref, NULL);
- g_slist_free (list);
+ g_slist_free_full (list, g_object_unref);
return success;
}
-#define REMOVED_ID_TAG "removed-id-tag"
-#define UPDATED_ID_TAG "updated-id-tag"
-#define VISIBLE_ID_TAG "visible-id-tag"
-#define UNREG_ID_TAG "unreg-id-tag"
-
static void
-connection_removed (NMSettingsConnection *obj, gpointer user_data)
+connection_updated (NMSettingsConnection *connection, gpointer user_data)
{
- GObject *connection = G_OBJECT (obj);
- guint id;
-
- g_object_ref (connection);
-
- /* Disconnect signal handlers, as plugins might still keep references
- * to the connection (and thus the signal handlers would still be live)
- * even after NMSettings has dropped all its references.
- */
-
- id = GPOINTER_TO_UINT (g_object_get_data (connection, REMOVED_ID_TAG));
- if (id)
- g_signal_handler_disconnect (connection, id);
-
- id = GPOINTER_TO_UINT (g_object_get_data (connection, UPDATED_ID_TAG));
- if (id)
- g_signal_handler_disconnect (connection, id);
-
- id = GPOINTER_TO_UINT (g_object_get_data (connection, VISIBLE_ID_TAG));
- if (id)
- g_signal_handler_disconnect (connection, id);
-
- /* Forget about the connection internally */
- g_hash_table_remove (NM_SETTINGS_GET_PRIVATE (user_data)->connections,
- (gpointer) nm_connection_get_path (NM_CONNECTION (connection)));
-
/* Re-emit for listeners like NMPolicy */
- g_signal_emit (NM_SETTINGS (user_data), signals[CONNECTION_REMOVED], 0, connection);
- g_signal_emit_by_name (NM_SETTINGS (user_data), NM_CP_SIGNAL_CONNECTION_REMOVED, connection);
-
- g_object_unref (connection);
-}
-
-static void
-connection_unregister (NMSettingsConnection *obj, gpointer user_data)
-{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (user_data);
- GObject *connection = G_OBJECT (obj);
- guint id;
-
- /* Make sure it's unregistered from the bus now that's removed */
- dbus_g_connection_unregister_g_object (priv->bus, connection);
-
- id = GPOINTER_TO_UINT (g_object_get_data (connection, UNREG_ID_TAG));
- if (id)
- g_signal_handler_disconnect (connection, id);
+ g_signal_emit (NM_SETTINGS (user_data),
+ signals[CONNECTION_UPDATED],
+ 0,
+ connection);
+ g_signal_emit_by_name (NM_SETTINGS (user_data), NM_CP_SIGNAL_CONNECTION_UPDATED, connection);
}
static void
-connection_updated (NMSettingsConnection *connection, gpointer user_data)
+connection_updated_by_user (NMSettingsConnection *connection, gpointer user_data)
{
/* Re-emit for listeners like NMPolicy */
g_signal_emit (NM_SETTINGS (user_data),
- signals[CONNECTION_UPDATED],
+ signals[CONNECTION_UPDATED_BY_USER],
0,
connection);
- g_signal_emit_by_name (NM_SETTINGS (user_data), NM_CP_SIGNAL_CONNECTION_UPDATED, connection);
}
static void
@@ -745,6 +727,37 @@ connection_visibility_changed (NMSettingsConnection *connection,
}
static void
+connection_removed (NMSettingsConnection *connection, gpointer user_data)
+{
+ NMSettings *self = NM_SETTINGS (user_data);
+
+ g_object_ref (connection);
+
+ /* Disconnect signal handlers, as plugins might still keep references
+ * to the connection (and thus the signal handlers would still be live)
+ * even after NMSettings has dropped all its references.
+ */
+
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_removed), self);
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_updated), self);
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_updated_by_user), self);
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_visibility_changed), self);
+
+ /* Forget about the connection internally */
+ g_hash_table_remove (NM_SETTINGS_GET_PRIVATE (user_data)->connections,
+ (gpointer) nm_connection_get_path (NM_CONNECTION (connection)));
+
+ /* Notify D-Bus */
+ g_signal_emit (self, signals[CONNECTION_REMOVED], 0, connection);
+
+ /* Re-emit for listeners like NMPolicy */
+ g_signal_emit_by_name (self, NM_CP_SIGNAL_CONNECTION_REMOVED, connection);
+ g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTIONS);
+
+ g_object_unref (connection);
+}
+
+static void
secret_agent_registered (NMAgentManager *agent_mgr,
NMSecretAgent *agent,
gpointer user_data)
@@ -807,7 +820,6 @@ claim_connection (NMSettings *self,
GHashTableIter iter;
gpointer data;
char *path;
- guint id;
g_return_if_fail (NM_IS_SETTINGS_CONNECTION (connection));
g_return_if_fail (nm_connection_get_path (NM_CONNECTION (connection)) == NULL);
@@ -819,6 +831,8 @@ claim_connection (NMSettings *self,
return;
}
+ nm_utils_normalize_connection (NM_CONNECTION (connection), TRUE);
+
if (!nm_connection_verify (NM_CONNECTION (connection), &error)) {
nm_log_warn (LOGD_SETTINGS, "plugin provided invalid connection: '%s' / '%s' invalid: %d",
g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)),
@@ -839,31 +853,21 @@ claim_connection (NMSettings *self,
/* Evil openconnect migration hack */
openconnect_migrate_hack (NM_CONNECTION (connection));
- id = g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED,
- G_CALLBACK (connection_removed),
- self);
- g_object_set_data (G_OBJECT (connection), REMOVED_ID_TAG, GUINT_TO_POINTER (id));
-
- id = g_signal_connect (connection, "unregister",
- G_CALLBACK (connection_unregister),
- self);
- g_object_set_data (G_OBJECT (connection), UNREG_ID_TAG, GUINT_TO_POINTER (id));
-
- id = g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED,
- G_CALLBACK (connection_updated),
- self);
- g_object_set_data (G_OBJECT (connection), UPDATED_ID_TAG, GUINT_TO_POINTER (id));
-
- id = g_signal_connect (connection, "notify::" NM_SETTINGS_CONNECTION_VISIBLE,
- G_CALLBACK (connection_visibility_changed),
- self);
- g_object_set_data (G_OBJECT (connection), VISIBLE_ID_TAG, GUINT_TO_POINTER (id));
+ g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed), self);
+ g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED,
+ G_CALLBACK (connection_updated), self);
+ g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
+ G_CALLBACK (connection_updated_by_user), self);
+ g_signal_connect (connection, "notify::" NM_SETTINGS_CONNECTION_VISIBLE,
+ G_CALLBACK (connection_visibility_changed),
+ self);
/* Export the connection over D-Bus */
g_warn_if_fail (nm_connection_get_path (NM_CONNECTION (connection)) == NULL);
path = g_strdup_printf ("%s/%u", NM_DBUS_PATH_SETTINGS, ec_counter++);
nm_connection_set_path (NM_CONNECTION (connection), path);
- dbus_g_connection_register_g_object (priv->bus, path, G_OBJECT (connection));
+ nm_dbus_manager_register_object (priv->dbus_mgr, path, G_OBJECT (connection));
g_free (path);
g_hash_table_insert (priv->connections,
@@ -871,39 +875,38 @@ claim_connection (NMSettings *self,
g_object_ref (connection));
/* Only emit the individual connection-added signal after connections
- * have been initially loaded. While getting the first list of connections
- * we suppress it, then send the connections-loaded signal after we're all
- * done to minimize processing.
+ * have been initially loaded.
*/
if (priv->connections_loaded) {
/* Internal added signal */
g_signal_emit (self, signals[CONNECTION_ADDED], 0, connection);
g_signal_emit_by_name (self, NM_CP_SIGNAL_CONNECTION_ADDED, connection);
+ g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTIONS);
/* Exported D-Bus signal */
g_signal_emit (self, signals[NEW_CONNECTION], 0, connection);
}
}
-static void
-remove_default_wired_connection (NMSettings *self,
- NMSettingsConnection *connection,
- gboolean do_signal)
-{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- const char *path = nm_connection_get_path (NM_CONNECTION (connection));
-
- if (g_hash_table_lookup (priv->connections, path)) {
- if (do_signal)
- g_signal_emit_by_name (G_OBJECT (connection), NM_SETTINGS_CONNECTION_REMOVED);
- g_hash_table_remove (priv->connections, path);
- }
-}
-
-static NMSettingsConnection *
-add_new_connection (NMSettings *self,
- NMConnection *connection,
- GError **error)
+/**
+ * nm_settings_add_connection:
+ * @self: the #NMSettings object
+ * @connection: the source connection to create a new #NMSettingsConnection from
+ * @save_to_disk: %TRUE to save the connection to disk immediately, %FALSE to
+ * not save to disk
+ * @error: on return, a location to store any errors that may occur
+ *
+ * Creates a new #NMSettingsConnection for the given source @connection.
+ * The returned object is owned by @self and the caller must reference
+ * the object to continue using it.
+ *
+ * Returns: the new #NMSettingsConnection or %NULL
+ */
+NMSettingsConnection *
+nm_settings_add_connection (NMSettings *self,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GError **error)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GSList *iter;
@@ -936,24 +939,31 @@ add_new_connection (NMSettings *self,
NMSystemConfigInterface *plugin = NM_SYSTEM_CONFIG_INTERFACE (iter->data);
GError *add_error = NULL;
- g_clear_error (error);
- added = nm_system_config_interface_add_connection (plugin, connection, &add_error);
+ added = nm_system_config_interface_add_connection (plugin, connection, save_to_disk, &add_error);
if (added) {
claim_connection (self, added, TRUE);
return added;
}
- g_propagate_error (error, add_error);
+ nm_log_dbg (LOGD_SETTINGS, "Failed to add %s/'%s': %s",
+ nm_connection_get_uuid (connection),
+ nm_connection_get_id (connection),
+ add_error ? add_error->message : "(unknown)");
+ g_clear_error (&add_error);
}
+
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_ADD_FAILED,
+ "No plugin supported adding this connection");
return NULL;
}
static NMConnection *
_nm_connection_provider_add_connection (NMConnectionProvider *provider,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error)
{
g_assert (NM_IS_CONNECTION_PROVIDER (provider) && NM_IS_SETTINGS (provider));
- return (NMConnection *) add_new_connection (NM_SETTINGS (provider), connection, error);
+ return NM_CONNECTION (nm_settings_add_connection (NM_SETTINGS (provider), connection, save_to_disk, error));
}
static gboolean
@@ -978,7 +988,7 @@ secrets_filter_cb (NMSetting *setting,
static void
send_agent_owned_secrets (NMSettings *self,
NMSettingsConnection *connection,
- gulong caller_uid)
+ NMAuthSubject *subject)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
NMConnection *for_agent;
@@ -991,7 +1001,7 @@ send_agent_owned_secrets (NMSettings *self,
nm_connection_clear_secrets_with_flags (for_agent,
secrets_filter_cb,
GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
- nm_agent_manager_save_secrets (priv->agent_mgr, for_agent, TRUE, caller_uid);
+ nm_agent_manager_save_secrets (priv->agent_mgr, for_agent, subject);
g_object_unref (for_agent);
}
@@ -1004,76 +1014,54 @@ pk_add_cb (NMAuthChain *chain,
NMSettings *self = NM_SETTINGS (user_data);
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
NMAuthCallResult result;
- GError *error = NULL, *add_error = NULL;
+ GError *error = NULL;
NMConnection *connection;
NMSettingsConnection *added = NULL;
NMSettingsAddCallback callback;
gpointer callback_data;
- gulong caller_uid;
+ NMAuthSubject *subject;
const char *perm;
+ gboolean save_to_disk;
+
+ g_assert (context);
priv->auths = g_slist_remove (priv->auths, chain);
+ perm = nm_auth_chain_get_data (chain, "perm");
+ g_assert (perm);
+ result = nm_auth_chain_get_result (chain, perm);
+
if (chain_error) {
error = g_error_new (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_GENERAL,
"Error checking authorization: %s",
chain_error->message ? chain_error->message : "(unknown)");
- goto done;
- }
-
- perm = nm_auth_chain_get_data (chain, "perm");
- g_assert (perm);
- result = nm_auth_chain_get_result (chain, perm);
-
- /* Caller didn't successfully authenticate */
- if (result != NM_AUTH_CALL_RESULT_YES) {
+ } else if (result != NM_AUTH_CALL_RESULT_YES) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_NOT_PRIVILEGED,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
"Insufficient privileges.");
- goto done;
- }
-
- connection = nm_auth_chain_get_data (chain, "connection");
- g_assert (connection);
- added = add_new_connection (self, connection, &add_error);
- if (!added) {
- error = g_error_new (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_ADD_FAILED,
- "Saving connection failed: (%d) %s",
- add_error ? add_error->code : -1,
- (add_error && add_error->message) ? add_error->message : "(unknown)");
- g_error_free (add_error);
+ } else {
+ /* Authorized */
+ connection = nm_auth_chain_get_data (chain, "connection");
+ g_assert (connection);
+ save_to_disk = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "save-to-disk"));
+ added = nm_settings_add_connection (self, connection, save_to_disk, &error);
}
-done:
callback = nm_auth_chain_get_data (chain, "callback");
callback_data = nm_auth_chain_get_data (chain, "callback-data");
- caller_uid = nm_auth_chain_get_data_ulong (chain, "caller-uid");
+ subject = nm_auth_chain_get_data (chain, "subject");
callback (self, added, error, context, callback_data);
/* Send agent-owned secrets to the agents */
if (!error && added)
- send_agent_owned_secrets (self, added, caller_uid);
+ send_agent_owned_secrets (self, added, subject);
g_clear_error (&error);
nm_auth_chain_unref (chain);
}
-static void
-add_cb (NMSettings *self,
- NMSettingsConnection *connection,
- GError *error,
- DBusGMethodInvocation *context,
- gpointer user_data)
-{
- if (error)
- dbus_g_method_return_error (context, error);
- else
- dbus_g_method_return (context, nm_connection_get_path (NM_CONNECTION (connection)));
-}
-
/* FIXME: remove if/when kernel supports adhoc wpa */
static gboolean
is_adhoc_wpa (NMConnection *connection)
@@ -1107,20 +1095,24 @@ is_adhoc_wpa (NMConnection *connection)
}
void
-nm_settings_add_connection (NMSettings *self,
+nm_settings_add_connection_dbus (NMSettings *self,
NMConnection *connection,
+ gboolean save_to_disk,
DBusGMethodInvocation *context,
NMSettingsAddCallback callback,
gpointer user_data)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
NMSettingConnection *s_con;
+ NMAuthSubject *subject = NULL;
NMAuthChain *chain;
GError *error = NULL, *tmp_error = NULL;
- gulong caller_uid = G_MAXULONG;
char *error_desc = NULL;
const char *perm;
+ g_return_if_fail (connection != NULL);
+ g_return_if_fail (context != NULL);
+
/* Connection must be valid, of course */
if (!nm_connection_verify (connection, &tmp_error)) {
error = g_error_new (NM_SETTINGS_ERROR,
@@ -1128,9 +1120,7 @@ nm_settings_add_connection (NMSettings *self,
"The connection was invalid: %s",
tmp_error ? tmp_error->message : "(unknown)");
g_error_free (tmp_error);
- callback (self, NULL, error, context, user_data);
- g_error_free (error);
- return;
+ goto done;
}
/* The kernel doesn't support Ad-Hoc WPA connections well at this time,
@@ -1141,9 +1131,7 @@ nm_settings_add_connection (NMSettings *self,
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INVALID_CONNECTION,
"WPA Ad-Hoc disabled due to kernel bugs");
- callback (self, NULL, error, context, user_data);
- g_error_free (error);
- return;
+ goto done;
}
/* Do any of the plugins support adding? */
@@ -1151,34 +1139,29 @@ nm_settings_add_connection (NMSettings *self,
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_ADD_NOT_SUPPORTED,
"None of the registered plugins support add.");
- callback (self, NULL, error, context, user_data);
- g_error_free (error);
- return;
+ goto done;
}
- /* Get the caller's UID */
- if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &caller_uid, &error_desc)) {
- error = g_error_new (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_NOT_PRIVILEGED,
- "Unable to determine UID of request: %s.",
- error_desc ? error_desc : "(unknown)");
- g_free (error_desc);
- callback (self, NULL, error, context, user_data);
- g_error_free (error);
- return;
+ subject = nm_auth_subject_new_from_context (context);
+ if (!subject) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Unable to determine UID of request.");
+ goto done;
}
/* Ensure the caller's username exists in the connection's permissions,
* or that the permissions is empty (ie, visible by everyone).
*/
- if (!nm_auth_uid_in_acl (connection, priv->session_monitor, caller_uid, &error_desc)) {
+ if (!nm_auth_uid_in_acl (connection,
+ nm_session_monitor_get (),
+ nm_auth_subject_get_uid (subject),
+ &error_desc)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
error_desc);
g_free (error_desc);
- callback (self, NULL, error, context, user_data);
- g_error_free (error);
- return;
+ goto done;
}
/* If the caller is the only user in the connection's permissions, then
@@ -1192,29 +1175,62 @@ nm_settings_add_connection (NMSettings *self,
else
perm = NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM;
- /* Otherwise validate the user request */
- chain = nm_auth_chain_new (context, NULL, pk_add_cb, self);
- g_assert (chain);
+ /* Validate the user request */
+ chain = nm_auth_chain_new_subject (subject, context, pk_add_cb, self);
+ if (!chain) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Unable to authenticate the request.");
+ goto done;
+ }
+
priv->auths = g_slist_append (priv->auths, chain);
nm_auth_chain_add_call (chain, perm, TRUE);
nm_auth_chain_set_data (chain, "perm", (gpointer) perm, NULL);
nm_auth_chain_set_data (chain, "connection", g_object_ref (connection), g_object_unref);
nm_auth_chain_set_data (chain, "callback", callback, NULL);
nm_auth_chain_set_data (chain, "callback-data", user_data, NULL);
- nm_auth_chain_set_data_ulong (chain, "caller-uid", caller_uid);
+ nm_auth_chain_set_data (chain, "subject", g_object_ref (subject), g_object_unref);
+ nm_auth_chain_set_data (chain, "save-to-disk", GUINT_TO_POINTER (save_to_disk), NULL);
+
+done:
+ if (error)
+ callback (self, NULL, error, context, user_data);
+
+ g_clear_error (&error);
+ g_clear_object (&subject);
}
static void
-impl_settings_add_connection (NMSettings *self,
- GHashTable *settings,
- DBusGMethodInvocation *context)
+impl_settings_add_connection_add_cb (NMSettings *self,
+ NMSettingsConnection *connection,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ if (error)
+ dbus_g_method_return_error (context, error);
+ else
+ dbus_g_method_return (context, nm_connection_get_path (NM_CONNECTION (connection)));
+}
+
+static void
+impl_settings_add_connection_helper (NMSettings *self,
+ GHashTable *settings,
+ gboolean save_to_disk,
+ DBusGMethodInvocation *context)
{
NMConnection *connection;
GError *error = NULL;
connection = nm_connection_new_from_hash (settings, &error);
if (connection) {
- nm_settings_add_connection (self, connection, context, add_cb, NULL);
+ nm_settings_add_connection_dbus (self,
+ connection,
+ save_to_disk,
+ context,
+ impl_settings_add_connection_add_cb,
+ NULL);
g_object_unref (connection);
} else {
g_assert (error);
@@ -1224,6 +1240,103 @@ impl_settings_add_connection (NMSettings *self,
}
static void
+impl_settings_add_connection (NMSettings *self,
+ GHashTable *settings,
+ DBusGMethodInvocation *context)
+{
+ impl_settings_add_connection_helper (self, settings, TRUE, context);
+}
+
+static void
+impl_settings_add_connection_unsaved (NMSettings *self,
+ GHashTable *settings,
+ DBusGMethodInvocation *context)
+{
+ impl_settings_add_connection_helper (self, settings, FALSE, context);
+}
+
+static gboolean
+ensure_root (NMDBusManager *dbus_mgr,
+ DBusGMethodInvocation *context)
+{
+ gulong caller_uid;
+ GError *error = NULL;
+
+ if (!nm_dbus_manager_get_caller_info (dbus_mgr, context, NULL, &caller_uid, NULL)) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Unable to determine request UID.");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return FALSE;
+ }
+ if (caller_uid != 0) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Permission denied");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+impl_settings_load_connections (NMSettings *self,
+ char **filenames,
+ DBusGMethodInvocation *context)
+{
+ NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
+ GPtrArray *failures;
+ GSList *iter;
+ int i;
+
+ if (!ensure_root (priv->dbus_mgr, context))
+ return;
+
+ failures = g_ptr_array_new ();
+
+ for (i = 0; filenames[i]; i++) {
+ for (iter = priv->plugins; iter; iter = g_slist_next (iter)) {
+ NMSystemConfigInterface *plugin = NM_SYSTEM_CONFIG_INTERFACE (iter->data);
+
+ if (nm_system_config_interface_load_connection (plugin, filenames[i]))
+ break;
+ }
+
+ if (!iter) {
+ if (!g_path_is_absolute (filenames[i]))
+ nm_log_warn (LOGD_SETTINGS, "Connection filename '%s' is not an absolute path", filenames[i]);
+ g_ptr_array_add (failures, (char *) filenames[i]);
+ }
+ }
+
+ g_ptr_array_add (failures, NULL);
+ dbus_g_method_return (context, failures->len == 1, failures->pdata);
+ g_ptr_array_unref (failures);
+}
+
+static void
+impl_settings_reload_connections (NMSettings *self,
+ DBusGMethodInvocation *context)
+{
+ NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
+ GSList *iter;
+
+ if (!ensure_root (priv->dbus_mgr, context))
+ return;
+
+ for (iter = priv->plugins; iter; iter = g_slist_next (iter)) {
+ NMSystemConfigInterface *plugin = NM_SYSTEM_CONFIG_INTERFACE (iter->data);
+
+ nm_system_config_interface_reload_connections (plugin);
+ }
+
+ dbus_g_method_return (context, TRUE);
+}
+
+static void
pk_hostname_cb (NMAuthChain *chain,
GError *chain_error,
DBusGMethodInvocation *context,
@@ -1232,51 +1345,45 @@ pk_hostname_cb (NMAuthChain *chain,
NMSettings *self = NM_SETTINGS (user_data);
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
NMAuthCallResult result;
- gboolean success = FALSE;
GError *error = NULL;
GSList *iter;
const char *hostname;
+ g_assert (context);
+
priv->auths = g_slist_remove (priv->auths, chain);
+ result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME);
+
/* If our NMSettingsConnection is already gone, do nothing */
if (chain_error) {
error = g_error_new (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_GENERAL,
"Error checking authorization: %s",
chain_error->message ? chain_error->message : "(unknown)");
- goto done;
- }
-
- result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME);
-
- /* Caller didn't successfully authenticate */
- if (result != NM_AUTH_CALL_RESULT_YES) {
+ } else if (result != NM_AUTH_CALL_RESULT_YES) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_NOT_PRIVILEGED,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
"Insufficient privileges.");
- goto done;
- }
-
- /* Set the hostname in all plugins */
- hostname = nm_auth_chain_get_data (chain, "hostname");
- for (iter = priv->plugins; iter; iter = iter->next) {
- NMSystemConfigInterfaceCapabilities caps = NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE;
-
- g_object_get (G_OBJECT (iter->data), NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES, &caps, NULL);
- if (caps & NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME) {
- g_object_set (G_OBJECT (iter->data), NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME, hostname, NULL);
- success = TRUE;
+ } else {
+ /* Set the hostname in all plugins */
+ hostname = nm_auth_chain_get_data (chain, "hostname");
+ for (iter = priv->plugins; iter; iter = iter->next) {
+ NMSystemConfigInterfaceCapabilities caps = NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE;
+
+ /* error will be cleared if any plugin supports saving the hostname */
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_SAVE_HOSTNAME_FAILED,
+ "Saving the hostname failed.");
+
+ g_object_get (G_OBJECT (iter->data), NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES, &caps, NULL);
+ if (caps & NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME) {
+ g_object_set (G_OBJECT (iter->data), NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME, hostname, NULL);
+ g_clear_error (&error);
+ }
}
}
- if (!success) {
- error = g_error_new_literal (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_SAVE_HOSTNAME_FAILED,
- "Saving the hostname failed.");
- }
-
-done:
if (error)
dbus_g_method_return_error (context, error);
else
@@ -1327,9 +1434,7 @@ impl_settings_save_hostname (NMSettings *self,
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_HOSTNAME_INVALID,
"The hostname was too long or contained invalid characters.");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
+ goto done;
}
/* Do any of the plugins support setting the hostname? */
@@ -1337,33 +1442,42 @@ impl_settings_save_hostname (NMSettings *self,
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_SAVE_HOSTNAME_NOT_SUPPORTED,
"None of the registered plugins support setting the hostname.");
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
+ goto done;
+ }
+
+ chain = nm_auth_chain_new_context (context, pk_hostname_cb, self);
+ if (!chain) {
+ error = g_error_new_literal (NM_SETTINGS_ERROR,
+ NM_SETTINGS_ERROR_PERMISSION_DENIED,
+ "Unable to authenticate the request.");
+ goto done;
}
- /* Otherwise validate the user request */
- chain = nm_auth_chain_new (context, NULL, pk_hostname_cb, self);
- g_assert (chain);
priv->auths = g_slist_append (priv->auths, chain);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, TRUE);
nm_auth_chain_set_data (chain, "hostname", g_strdup (hostname), g_free);
+
+done:
+ if (error)
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&error);
}
static gboolean
-have_connection_for_device (NMSettings *self, GByteArray *mac, NMDevice *device)
+have_connection_for_device (NMSettings *self, NMDevice *device)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GHashTableIter iter;
gpointer data;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingInfiniband *s_infiniband;
const GByteArray *setting_mac;
- gboolean ret = FALSE;
+ const guint8 *hwaddr;
+ guint hwaddr_len = 0;
g_return_val_if_fail (NM_IS_SETTINGS (self), FALSE);
- g_return_val_if_fail (mac != NULL, FALSE);
+
+ hwaddr = nm_device_get_hw_address (device, &hwaddr_len);
/* Find a wired connection locked to the given MAC address, if any */
g_hash_table_iter_init (&iter, priv->connections);
@@ -1372,344 +1486,221 @@ have_connection_for_device (NMSettings *self, GByteArray *mac, NMDevice *device)
const char *ctype, *iface;
s_con = nm_connection_get_setting_connection (connection);
- ctype = nm_setting_connection_get_connection_type (s_con);
- iface = nm_connection_get_virtual_iface_name (connection);
- if (iface) {
- if (!strcmp (iface, nm_device_get_iface (device))) {
- ret = TRUE;
- break;
- } else
- continue;
- }
+ iface = nm_setting_connection_get_interface_name (s_con);
+ if (iface && strcmp (iface, nm_device_get_iface (device)) != 0)
+ continue;
+ ctype = nm_setting_connection_get_connection_type (s_con);
if ( strcmp (ctype, NM_SETTING_WIRED_SETTING_NAME)
- && strcmp (ctype, NM_SETTING_INFINIBAND_SETTING_NAME)
&& strcmp (ctype, NM_SETTING_PPPOE_SETTING_NAME))
continue;
s_wired = nm_connection_get_setting_wired (connection);
- s_infiniband = nm_connection_get_setting_infiniband (connection);
- /* No wired setting; therefore the PPPoE connection applies to any device */
if (!s_wired && !strcmp (ctype, NM_SETTING_PPPOE_SETTING_NAME)) {
- ret = TRUE;
- break;
+ /* No wired setting; therefore the PPPoE connection applies to any device */
+ return TRUE;
}
- g_assert (s_wired != NULL || s_infiniband != NULL);
+ g_assert (s_wired != NULL);
- setting_mac = s_wired ?
- nm_setting_wired_get_mac_address (s_wired) :
- nm_setting_infiniband_get_mac_address (s_infiniband);
+ setting_mac = nm_setting_wired_get_mac_address (s_wired);
if (setting_mac) {
/* A connection mac-locked to this device */
- if (mac->len == setting_mac->len &&
- !memcmp (setting_mac->data, mac->data, mac->len)) {
- ret = TRUE;
- break;
- }
+ if (hwaddr_len == setting_mac->len &&
+ !memcmp (setting_mac->data, hwaddr, hwaddr_len))
+ return TRUE;
} else {
/* A connection that applies to any wired device */
- ret = TRUE;
- break;
- }
- }
-
- return ret;
-}
-
-/* Search through the list of blacklisted MAC addresses in the config file. */
-static gboolean
-is_mac_auto_wired_blacklisted (NMSettings *self, const GByteArray *mac)
-{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- GKeyFile *config;
- char **list, **iter;
- gboolean found = FALSE;
- int hwaddr_type;
-
- g_return_val_if_fail (mac != NULL, FALSE);
-
- if (!priv->config_file)
- return FALSE;
-
- config = g_key_file_new ();
- if (!config) {
- nm_log_warn (LOGD_SETTINGS, "not enough memory to load config file.");
- return FALSE;
- }
-
- g_key_file_set_list_separator (config, ',');
- if (!g_key_file_load_from_file (config, priv->config_file, G_KEY_FILE_NONE, NULL))
- goto out;
-
- hwaddr_type = nm_utils_hwaddr_type (mac->len);
-
- list = g_key_file_get_string_list (config, "main", CONFIG_KEY_NO_AUTO_DEFAULT, NULL, NULL);
- for (iter = list; iter && *iter; iter++) {
- guint8 *candidate, buffer[NM_UTILS_HWADDR_LEN_MAX];
-
- if (strcmp (g_strstrip (*iter), "*") == 0) {
- found = TRUE;
- break;
- }
-
- candidate = nm_utils_hwaddr_aton (*iter, hwaddr_type, buffer);
- if (candidate && !memcmp (mac->data, candidate, mac->len)) {
- found = TRUE;
- break;
+ return TRUE;
}
}
- if (list)
- g_strfreev (list);
+ /* See if there's a known non-NetworkManager configuration for the device */
+ if (nm_device_spec_match_list (device, priv->unrecognized_specs))
+ return TRUE;
-out:
- g_key_file_free (config);
- return found;
+ return FALSE;
}
-#define DEFAULT_WIRED_TAG "default-wired"
+#define DEFAULT_WIRED_CONNECTION_TAG "default-wired-connection"
+#define DEFAULT_WIRED_DEVICE_TAG "default-wired-device"
+
+static void default_wired_clear_tag (NMSettings *self,
+ NMDevice *device,
+ NMSettingsConnection *connection,
+ gboolean add_to_no_auto_default);
static void
-default_wired_deleted (NMDefaultWiredConnection *wired,
- const GByteArray *mac,
- NMSettings *self)
+default_wired_connection_removed_cb (NMSettingsConnection *connection, NMSettings *self)
{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- NMSettingConnection *s_con;
- int hwaddr_type;
- char *tmp;
- GKeyFile *config;
- char **list, **iter, **updated;
- gboolean found = FALSE;
- gsize len = 0, i;
- char *data;
-
- /* If there was no config file specified, there's nothing to do */
- if (!priv->config_file)
- goto cleanup;
-
- /* When the default wired connection is removed (either deleted or saved
- * to a new persistent connection by a plugin), write the MAC address of
- * the wired device to the config file and don't create a new default wired
- * connection for that device again.
- */
+ NMDevice *device;
- s_con = nm_connection_get_setting_connection (NM_CONNECTION (wired));
- g_assert (s_con);
-
- /* Ignore removals of read-only connections, since they couldn't have
- * been removed by the user.
+ /* When the default wired connection is removed (either deleted or saved to
+ * a new persistent connection by a plugin), write the MAC address of the
+ * wired device to the config file and don't create a new default wired
+ * connection for that device again.
*/
- if (nm_setting_connection_get_read_only (s_con))
- goto cleanup;
-
- config = g_key_file_new ();
- if (!config)
- goto cleanup;
-
- if (nm_connection_get_setting_wired (NM_CONNECTION (wired)))
- hwaddr_type = ARPHRD_ETHER;
- else if (nm_connection_get_setting_infiniband (NM_CONNECTION (wired)))
- hwaddr_type = ARPHRD_INFINIBAND;
- else
- goto cleanup;
-
- g_key_file_set_list_separator (config, ',');
- g_key_file_load_from_file (config, priv->config_file, G_KEY_FILE_KEEP_COMMENTS, NULL);
-
- list = g_key_file_get_string_list (config, "main", CONFIG_KEY_NO_AUTO_DEFAULT, &len, NULL);
- for (iter = list; iter && *iter; iter++) {
- guint8 *candidate, buffer[NM_UTILS_HWADDR_LEN_MAX];
-
- if (strcmp (g_strstrip (*iter), "*") == 0) {
- found = TRUE;
- break;
- }
-
- candidate = nm_utils_hwaddr_aton (*iter, hwaddr_type, buffer);
- if (candidate && !memcmp (mac->data, candidate, mac->len)) {
- found = TRUE;
- break;
- }
- }
-
- /* Add this device's MAC to the list */
- if (!found) {
- tmp = nm_utils_hwaddr_ntoa (mac->data, hwaddr_type);
-
- /* New list; size + 1 for the new element, + 1 again for ending NULL */
- updated = g_malloc0 (sizeof (char*) * (len + 2));
-
- /* Copy original list and add new MAC */
- for (i = 0; list && list[i]; i++)
- updated[i] = list[i];
- updated[i++] = tmp;
- updated[i] = NULL;
-
- g_key_file_set_string_list (config,
- "main", CONFIG_KEY_NO_AUTO_DEFAULT,
- (const char **) updated,
- len + 2);
- /* g_free() not g_strfreev() since 'updated' isn't a deep-copy */
- g_free (updated);
- g_free (tmp);
-
- data = g_key_file_to_data (config, &len, NULL);
- if (data) {
- g_file_set_contents (priv->config_file, data, len, NULL);
- g_free (data);
- }
- }
-
- if (list)
- g_strfreev (list);
- g_key_file_free (config);
-
-cleanup:
- g_object_set_data (G_OBJECT (nm_default_wired_connection_get_device (wired)),
- DEFAULT_WIRED_TAG,
- NULL);
+ device = g_object_get_data (G_OBJECT (connection), DEFAULT_WIRED_DEVICE_TAG);
+ if (device)
+ default_wired_clear_tag (self, device, connection, TRUE);
}
static void
-delete_cb (NMSettingsConnection *connection, GError *error, gpointer user_data)
+default_wired_connection_updated_by_user_cb (NMSettingsConnection *connection, NMSettings *self)
{
+ NMDevice *device;
+
+ /* The connection has been changed by the user, it should no longer be
+ * considered a default wired connection, and should no longer affect
+ * the no-auto-default configuration option.
+ */
+ device = g_object_get_data (G_OBJECT (connection), DEFAULT_WIRED_DEVICE_TAG);
+ if (device)
+ default_wired_clear_tag (self, device, connection, FALSE);
}
static void
-default_wired_try_update (NMDefaultWiredConnection *wired,
- NMSettings *self)
+default_wired_clear_tag (NMSettings *self,
+ NMDevice *device,
+ NMSettingsConnection *connection,
+ gboolean add_to_no_auto_default)
{
- GError *error = NULL;
- const char *id;
- NMSettingsConnection *added;
-
- /* Try to move this default wired conneciton to a plugin so that it has
- * persistent storage.
- */
-
- /* Keep it alive over removal so we can re-add it if we need to */
- g_object_ref (wired);
+ g_return_if_fail (NM_IS_SETTINGS (self));
+ g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (device == g_object_get_data (G_OBJECT (connection), DEFAULT_WIRED_DEVICE_TAG));
+ g_return_if_fail (connection == g_object_get_data (G_OBJECT (device), DEFAULT_WIRED_CONNECTION_TAG));
- id = nm_connection_get_id (NM_CONNECTION (wired));
- g_assert (id);
+ g_object_set_data (G_OBJECT (connection), DEFAULT_WIRED_DEVICE_TAG, NULL);
+ g_object_set_data (G_OBJECT (device), DEFAULT_WIRED_CONNECTION_TAG, NULL);
- remove_default_wired_connection (self, NM_SETTINGS_CONNECTION (wired), FALSE);
- added = add_new_connection (self, NM_CONNECTION (wired), &error);
- if (added) {
- nm_settings_connection_delete (NM_SETTINGS_CONNECTION (wired), delete_cb, NULL);
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (default_wired_connection_removed_cb), self);
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (default_wired_connection_updated_by_user_cb), self);
- g_object_set_data (G_OBJECT (nm_default_wired_connection_get_device (wired)),
- DEFAULT_WIRED_TAG,
- NULL);
- nm_log_info (LOGD_SETTINGS, "Saved default wired connection '%s' to persistent storage", id);
- } else {
- nm_log_warn (LOGD_SETTINGS, "couldn't save default wired connection '%s': %d / %s",
- id,
- error ? error->code : -1,
- (error && error->message) ? error->message : "(unknown)");
- g_clear_error (&error);
-
- /* If there was an error, don't destroy the default wired connection,
- * but add it back to the system settings service. Connection is already
- * exported on the bus, don't export it again, thus do_export == FALSE.
- */
- claim_connection (self, NM_SETTINGS_CONNECTION (wired), FALSE);
- }
-
- g_object_unref (wired);
+ if (add_to_no_auto_default)
+ nm_config_set_ethernet_no_auto_default (NM_SETTINGS_GET_PRIVATE (self)->config, NM_CONFIG_DEVICE (device));
}
void
nm_settings_device_added (NMSettings *self, NMDevice *device)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- GByteArray *mac = NULL;
- const guint8 *hwaddr;
- guint hwaddr_len = 0;
- NMDefaultWiredConnection *wired;
- gboolean read_only = TRUE;
- const char *id;
- char *defname;
+ NMConnection *connection;
+ NMSettingsConnection *added;
+ NMSetting *setting;
+ GError *error = NULL;
+ const guint8 *hw_address;
+ char *defname, *uuid;
+ guint len = 0;
+ GByteArray *mac;
- if (!NM_IS_DEVICE_WIRED (device))
+ if (!NM_IS_DEVICE_ETHERNET (device))
return;
/* If the device isn't managed or it already has a default wired connection,
* ignore it.
*/
if ( !nm_device_get_managed (device)
- || g_object_get_data (G_OBJECT (device), DEFAULT_WIRED_TAG))
+ || g_object_get_data (G_OBJECT (device), DEFAULT_WIRED_CONNECTION_TAG)
+ || have_connection_for_device (self, device)
+ || !nm_config_get_ethernet_can_auto_default (priv->config, NM_CONFIG_DEVICE (device)))
return;
- hwaddr = nm_device_get_hw_address (device, &hwaddr_len);
-
- mac = g_byte_array_sized_new (hwaddr_len);
- g_byte_array_append (mac, hwaddr, hwaddr_len);
-
- if ( have_connection_for_device (self, mac, device)
- || is_mac_auto_wired_blacklisted (self, mac))
- goto ignore;
+ hw_address = nm_device_get_hw_address (device, &len);
+ if (!hw_address)
+ return;
- if (get_plugin (self, NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS))
- read_only = FALSE;
+ connection = nm_connection_new ();
+ g_assert (connection);
+ setting = nm_setting_connection_new ();
+ g_assert (setting);
+ nm_connection_add_setting (connection, setting);
defname = nm_settings_utils_get_default_wired_name (priv->connections);
- wired = nm_default_wired_connection_new (mac, device, defname, read_only);
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (setting,
+ NM_SETTING_CONNECTION_ID, defname,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TIMESTAMP, (guint64) time (NULL),
+ NULL);
+ g_free (uuid);
g_free (defname);
- if (!wired)
- goto ignore;
- id = nm_connection_get_id (NM_CONNECTION (wired));
- g_assert (id);
+ /* Lock the connection to the device */
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+
+ mac = g_byte_array_sized_new (len);
+ g_byte_array_append (mac, hw_address, len);
+ g_object_set (setting, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
+ g_byte_array_unref (mac);
+
+ /* Add the connection */
+ added = nm_settings_add_connection (self, connection, FALSE, &error);
+ g_object_unref (connection);
- nm_log_info (LOGD_SETTINGS, "Added default wired connection '%s' for %s",
- id, nm_device_get_udi (device));
+ if (!added) {
+ nm_log_warn (LOGD_SETTINGS, "(%s) couldn't create default wired connection: %s",
+ nm_device_get_iface (device),
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
+ return;
+ }
- g_signal_connect (wired, "try-update", (GCallback) default_wired_try_update, self);
- g_signal_connect (wired, "deleted", (GCallback) default_wired_deleted, self);
- claim_connection (self, NM_SETTINGS_CONNECTION (wired), TRUE);
- g_object_unref (wired);
+ g_object_set_data (G_OBJECT (added), DEFAULT_WIRED_DEVICE_TAG, device);
+ g_object_set_data (G_OBJECT (device), DEFAULT_WIRED_CONNECTION_TAG, added);
- g_object_set_data (G_OBJECT (device), DEFAULT_WIRED_TAG, wired);
+ g_signal_connect (added, NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
+ G_CALLBACK (default_wired_connection_updated_by_user_cb), self);
+ g_signal_connect (added, NM_SETTINGS_CONNECTION_REMOVED,
+ G_CALLBACK (default_wired_connection_removed_cb), self);
-ignore:
- g_byte_array_free (mac, TRUE);
+ nm_log_info (LOGD_SETTINGS, "(%s): created default wired connection '%s'",
+ nm_device_get_iface (device),
+ nm_connection_get_id (NM_CONNECTION (added)));
}
void
-nm_settings_device_removed (NMSettings *self, NMDevice *device)
+nm_settings_device_removed (NMSettings *self, NMDevice *device, gboolean quitting)
{
- NMDefaultWiredConnection *connection;
+ NMSettingsConnection *connection;
- if (!NM_IS_DEVICE_WIRED (device))
- return;
+ connection = g_object_get_data (G_OBJECT (device), DEFAULT_WIRED_CONNECTION_TAG);
+ if (connection) {
+ default_wired_clear_tag (self, device, connection, FALSE);
- connection = (NMDefaultWiredConnection *) g_object_get_data (G_OBJECT (device), DEFAULT_WIRED_TAG);
- if (connection)
- remove_default_wired_connection (self, NM_SETTINGS_CONNECTION (connection), TRUE);
+ /* Don't delete the default wired connection on shutdown, so that it
+ * remains up and can be assumed if NM starts again.
+ */
+ if (quitting == FALSE)
+ nm_settings_connection_delete (connection, NULL, NULL);
+ }
}
/***************************************************************/
-static gint
-best_connection_sort (gconstpointer a, gconstpointer b, gpointer user_data)
+/* GCompareFunc helper for sorting "best" connections.
+ * The function sorts connections in ascending timestamp order.
+ * That means an older connection (lower timestamp) goes before
+ * a newer one.
+ */
+gint
+nm_settings_sort_connections (gconstpointer a, gconstpointer b)
{
NMSettingsConnection *ac = (NMSettingsConnection *) a;
NMSettingsConnection *bc = (NMSettingsConnection *) b;
guint64 ats = 0, bts = 0;
- if (!ac && bc)
+ if (ac == bc)
+ return 0;
+ if (!ac)
return -1;
- else if (ac && !bc)
+ if (!bc)
return 1;
- else if (!ac && !bc)
- return 0;
-
- g_assert (ac && bc);
/* In the future we may use connection priorities in addition to timestamps */
nm_settings_connection_get_timestamp (ac, &ats);
@@ -1757,7 +1748,7 @@ get_best_connections (NMConnectionProvider *provider,
}
/* List is sorted with oldest first */
- sorted = g_slist_insert_sorted_with_data (sorted, connection, best_connection_sort, NULL);
+ sorted = g_slist_insert_sorted (sorted, connection, nm_settings_sort_connections);
added++;
if (max_requested && added > max_requested) {
@@ -1775,58 +1766,53 @@ get_best_connections (NMConnectionProvider *provider,
static const GSList *
get_connections (NMConnectionProvider *provider)
{
- static GSList *list = NULL;
+ GSList *list = NULL;
NMSettings *self = NM_SETTINGS (provider);
+ NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GHashTableIter iter;
NMSettingsConnection *connection;
- /* Lazily free the list with every call so we can keep it 'const' for callers */
- g_slist_free (list);
- list = NULL;
-
- g_hash_table_iter_init (&iter, NM_SETTINGS_GET_PRIVATE (self)->connections);
+ g_hash_table_iter_init (&iter, priv->connections);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &connection))
list = g_slist_prepend (list, connection);
- return g_slist_reverse (list);
+ list = g_slist_reverse (list);
+
+ /* Cache the list every call so we can keep it 'const' for callers */
+ g_slist_free (priv->get_connections_cache);
+ priv->get_connections_cache = list;
+ return list;
}
-static gboolean
-has_connections_loaded (NMConnectionProvider *provider)
+static NMConnection *
+cp_get_connection_by_uuid (NMConnectionProvider *provider, const char *uuid)
{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (provider);
-
- return priv->connections_loaded;
+ return NM_CONNECTION (nm_settings_get_connection_by_uuid (NM_SETTINGS (provider), uuid));
}
/***************************************************************/
NMSettings *
-nm_settings_new (const char *config_file,
- const char **plugins,
- GError **error)
+nm_settings_new (GError **error)
{
NMSettings *self;
NMSettingsPrivate *priv;
self = g_object_new (NM_TYPE_SETTINGS, NULL);
- if (!self)
- return NULL;
priv = NM_SETTINGS_GET_PRIVATE (self);
- priv->config_file = g_strdup (config_file);
+ priv->config = nm_config_get ();
priv->dbus_mgr = nm_dbus_manager_get ();
- priv->bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
/* Load the plugins; fail if a plugin is not found. */
- if (!load_plugins (self, plugins, error)) {
+ if (!load_plugins (self, nm_config_get_plugins (priv->config), error)) {
g_object_unref (self);
return NULL;
}
- unmanaged_specs_changed (NULL, self);
+ load_connections (self);
- dbus_g_connection_register_g_object (priv->bus, NM_DBUS_PATH_SETTINGS, G_OBJECT (self));
+ nm_dbus_manager_register_object (priv->dbus_mgr, NM_DBUS_PATH_SETTINGS, self);
return self;
}
@@ -1835,8 +1821,8 @@ connection_provider_init (NMConnectionProvider *cp_class)
{
cp_class->get_best_connections = get_best_connections;
cp_class->get_connections = get_connections;
- cp_class->has_connections_loaded = has_connections_loaded;
cp_class->add_connection = _nm_connection_provider_add_connection;
+ cp_class->get_connection_by_uuid = cp_get_connection_by_uuid;
}
static void
@@ -1846,8 +1832,6 @@ nm_settings_init (NMSettings *self)
priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
- priv->session_monitor = nm_session_monitor_get ();
-
/* Hold a reference to the agent manager so it stays alive; the only
* other holders are NMSettingsConnection objects which are often
* transient, and we don't want the agent manager to get destroyed and
@@ -1863,15 +1847,12 @@ dispose (GObject *object)
{
NMSettings *self = NM_SETTINGS (object);
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- GSList *iter;
- for (iter = priv->auths; iter; iter = g_slist_next (iter))
- nm_auth_chain_unref ((NMAuthChain *) iter->data);
- g_slist_free (priv->auths);
+ g_slist_free_full (priv->auths, (GDestroyNotify) nm_auth_chain_unref);
+ priv->auths = NULL;
- g_object_unref (priv->dbus_mgr);
+ priv->dbus_mgr = NULL;
- g_object_unref (priv->session_monitor);
g_object_unref (priv->agent_mgr);
G_OBJECT_CLASS (nm_settings_parent_class)->dispose (object);
@@ -1884,13 +1865,12 @@ finalize (GObject *object)
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
g_hash_table_destroy (priv->connections);
+ g_slist_free (priv->get_connections_cache);
- clear_unmanaged_specs (self);
-
- g_slist_foreach (priv->plugins, (GFunc) g_object_unref, NULL);
- g_slist_free (priv->plugins);
+ g_slist_free_full (priv->unmanaged_specs, g_free);
+ g_slist_free_full (priv->unrecognized_specs, g_free);
- g_free (priv->config_file);
+ g_slist_free_full (priv->plugins, g_object_unref);
G_OBJECT_CLASS (nm_settings_parent_class)->finalize (object);
}
@@ -1900,8 +1880,12 @@ get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMSettings *self = NM_SETTINGS (object);
+ NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
const GSList *specs, *iter;
GSList *copy = NULL;
+ GHashTableIter citer;
+ GPtrArray *array;
+ const char *path;
switch (prop_id) {
case PROP_UNMANAGED_SPECS:
@@ -1920,6 +1904,13 @@ get_property (GObject *object, guint prop_id,
case PROP_CAN_MODIFY:
g_value_set_boolean (value, !!get_plugin (self, NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS));
break;
+ case PROP_CONNECTIONS:
+ array = g_ptr_array_sized_new (g_hash_table_size (priv->connections));
+ g_hash_table_iter_init (&citer, priv->connections);
+ while (g_hash_table_iter_next (&citer, (gpointer) &path, NULL))
+ g_ptr_array_add (array, g_strdup (path));
+ g_value_take_boxed (value, array);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1965,6 +1956,14 @@ nm_settings_class_init (NMSettingsClass *class)
FALSE,
G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_CONNECTIONS,
+ g_param_spec_boxed (NM_SETTINGS_CONNECTIONS,
+ "Connections",
+ "Connections",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE));
+
/* signals */
signals[PROPERTIES_CHANGED] =
g_signal_new ("properties-changed",
@@ -1992,6 +1991,15 @@ nm_settings_class_init (NMSettingsClass *class)
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
+ signals[CONNECTION_UPDATED_BY_USER] =
+ g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
signals[CONNECTION_REMOVED] =
g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
G_OBJECT_CLASS_TYPE (object_class),
@@ -2010,15 +2018,6 @@ nm_settings_class_init (NMSettingsClass *class)
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
- signals[CONNECTIONS_LOADED] =
- g_signal_new (NM_SETTINGS_SIGNAL_CONNECTIONS_LOADED,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMSettingsClass, connections_loaded),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
signals[AGENT_REGISTERED] =
g_signal_new (NM_SETTINGS_SIGNAL_AGENT_REGISTERED,
G_OBJECT_CLASS_TYPE (object_class),
diff --git a/src/settings/nm-settings.h b/src/settings/nm-settings.h
index 9a02f8feb..67b7d0f69 100644
--- a/src/settings/nm-settings.h
+++ b/src/settings/nm-settings.h
@@ -43,12 +43,13 @@
#define NM_SETTINGS_UNMANAGED_SPECS "unmanaged-specs"
#define NM_SETTINGS_HOSTNAME "hostname"
#define NM_SETTINGS_CAN_MODIFY "can-modify"
+#define NM_SETTINGS_CONNECTIONS "connections"
#define NM_SETTINGS_SIGNAL_CONNECTION_ADDED "connection-added"
#define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED "connection-updated"
+#define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER "connection-updated-by-user"
#define NM_SETTINGS_SIGNAL_CONNECTION_REMOVED "connection-removed"
#define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed"
-#define NM_SETTINGS_SIGNAL_CONNECTIONS_LOADED "connections-loaded"
#define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered"
typedef struct {
@@ -69,16 +70,12 @@ typedef struct {
void (*connection_visibility_changed) (NMSettings *self, NMSettingsConnection *connection);
- void (*connections_loaded) (NMSettings *self);
-
void (*agent_registered) (NMSettings *self, NMSecretAgent *agent);
} NMSettingsClass;
GType nm_settings_get_type (void);
-NMSettings *nm_settings_new (const char *config_file,
- const char **plugins,
- GError **error);
+NMSettings *nm_settings_new (GError **error);
typedef void (*NMSettingsForEachFunc) (NMSettings *settings,
NMSettingsConnection *connection,
@@ -94,17 +91,22 @@ typedef void (*NMSettingsAddCallback) (NMSettings *settings,
DBusGMethodInvocation *context,
gpointer user_data);
-void nm_settings_add_connection (NMSettings *self,
- NMConnection *connection,
- DBusGMethodInvocation *context,
- NMSettingsAddCallback callback,
- gpointer user_data);
+void nm_settings_add_connection_dbus (NMSettings *self,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ DBusGMethodInvocation *context,
+ NMSettingsAddCallback callback,
+ gpointer user_data);
/* Returns a list of NMSettingsConnections. Caller must free the list with
* g_slist_free().
*/
GSList *nm_settings_get_connections (NMSettings *settings);
+NMSettingsConnection *nm_settings_add_connection (NMSettings *settings,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GError **error);
NMSettingsConnection *nm_settings_get_connection_by_path (NMSettings *settings,
const char *path);
@@ -117,6 +119,8 @@ char *nm_settings_get_hostname (NMSettings *self);
void nm_settings_device_added (NMSettings *self, NMDevice *device);
-void nm_settings_device_removed (NMSettings *self, NMDevice *device);
+void nm_settings_device_removed (NMSettings *self, NMDevice *device, gboolean quitting);
+
+gint nm_settings_sort_connections (gconstpointer a, gconstpointer b);
#endif /* __NM_SETTINGS_H__ */
diff --git a/src/settings/nm-system-config-interface.c b/src/settings/nm-system-config-interface.c
index 45aa6305d..2249efeba 100644
--- a/src/settings/nm-system-config-interface.c
+++ b/src/settings/nm-system-config-interface.c
@@ -84,6 +84,14 @@ interface_init (gpointer g_iface)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ g_signal_new (NM_SYSTEM_CONFIG_INTERFACE_UNRECOGNIZED_SPECS_CHANGED,
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMSystemConfigInterface, unrecognized_specs_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
initialized = TRUE;
}
@@ -137,6 +145,26 @@ nm_system_config_interface_get_connections (NMSystemConfigInterface *config)
return NULL;
}
+gboolean
+nm_system_config_interface_load_connection (NMSystemConfigInterface *config,
+ const char *filename)
+{
+ g_return_val_if_fail (config != NULL, FALSE);
+
+ if (NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->load_connection)
+ return NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->load_connection (config, filename);
+ return FALSE;
+}
+
+void
+nm_system_config_interface_reload_connections (NMSystemConfigInterface *config)
+{
+ g_return_if_fail (config != NULL);
+
+ if (NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->reload_connections)
+ NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->reload_connections (config);
+}
+
GSList *
nm_system_config_interface_get_unmanaged_specs (NMSystemConfigInterface *config)
{
@@ -147,16 +175,43 @@ nm_system_config_interface_get_unmanaged_specs (NMSystemConfigInterface *config)
return NULL;
}
+GSList *
+nm_system_config_interface_get_unrecognized_specs (NMSystemConfigInterface *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+
+ if (NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->get_unrecognized_specs)
+ return NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->get_unrecognized_specs (config);
+ return NULL;
+}
+
+/**
+ * nm_system_config_interface_add_connection:
+ * @config: the #NMSystemConfigInterface
+ * @connection: the source connection to create a plugin-specific
+ * #NMSettingsConnection from
+ * @save_to_disk: %TRUE to save the connection to disk immediately, %FALSE to
+ * not save to disk
+ * @error: on return, a location to store any errors that may occur
+ *
+ * Creates a new #NMSettingsConnection for the given source @connection. If the
+ * plugin cannot handle the given connection type, it should return %NULL and
+ * set @error. The plugin owns the returned object and the caller must reference
+ * the object if it wishes to continue using it.
+ *
+ * Returns: the new #NMSettingsConnection or %NULL
+ */
NMSettingsConnection *
nm_system_config_interface_add_connection (NMSystemConfigInterface *config,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error)
{
g_return_val_if_fail (config != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
if (NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->add_connection)
- return NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->add_connection (config, connection, error);
+ return NM_SYSTEM_CONFIG_INTERFACE_GET_INTERFACE (config)->add_connection (config, connection, save_to_disk, error);
return NULL;
}
diff --git a/src/settings/nm-system-config-interface.h b/src/settings/nm-system-config-interface.h
index bbe74d492..c04fae2de 100644
--- a/src/settings/nm-system-config-interface.h
+++ b/src/settings/nm-system-config-interface.h
@@ -29,17 +29,10 @@
G_BEGIN_DECLS
-#define PLUGIN_PRINT(pname, fmt, args...) \
- { g_message (" " pname ": " fmt, ##args); }
-
-#define PLUGIN_WARN(pname, fmt, args...) \
- { g_warning (" " pname ": " fmt, ##args); }
-
-
/* Plugin's factory function that returns a GObject that implements
* NMSystemConfigInterface.
*/
-GObject * nm_system_config_factory (const char *config_file);
+GObject * nm_system_config_factory (void);
#define NM_TYPE_SYSTEM_CONFIG_INTERFACE (nm_system_config_interface_get_type ())
#define NM_SYSTEM_CONFIG_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SYSTEM_CONFIG_INTERFACE, NMSystemConfigInterface))
@@ -53,6 +46,7 @@ GObject * nm_system_config_factory (const char *config_file);
#define NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME "hostname"
#define NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED "unmanaged-specs-changed"
+#define NM_SYSTEM_CONFIG_INTERFACE_UNRECOGNIZED_SPECS_CHANGED "unrecognized-specs-changed"
#define NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED "connection-added"
typedef enum {
@@ -89,33 +83,50 @@ struct _NMSystemConfigInterface {
*/
GSList * (*get_connections) (NMSystemConfigInterface *config);
+ /* Requests that the plugin load/reload a single connection, if it
+ * recognizes the filename. Returns success or failure.
+ */
+ gboolean (*load_connection) (NMSystemConfigInterface *config,
+ const char *filename);
+
+ /* Requests that the plugin reload all connection files from disk,
+ * and emit signals reflecting new, changed, and removed connections.
+ */
+ void (*reload_connections) (NMSystemConfigInterface *config);
+
/*
* Return a string list of specifications of devices which NetworkManager
* should not manage. Returned list will be freed by the system settings
* service, and each element must be allocated using g_malloc() or its
* variants (g_strdup, g_strdup_printf, etc).
*
- * Each string in the list must follow the format <method>:<data>, where
- * the method and data are one of the following:
- *
- * Method: mac Data: device MAC address formatted with leading zeros and
- * lowercase letters, like 00:0a:0b:0c:0d:0e
- *
- * Method: s390-subchannels Data: string of 2 or 3 s390 subchannels
- * separated by commas (,) that identify the
- * device, like "0.0.09a0,0.0.09a1,0.0.09a2".
- * The string may contain only the following
- * characters: [a-fA-F0-9,.]
+ * Each string in the list must be in one of the formats recognized by
+ * nm_device_spec_match_list().
*/
GSList * (*get_unmanaged_specs) (NMSystemConfigInterface *config);
/*
- * Save the given connection to backing storage, and return a new
+ * Return a string list of specifications of devices for which at least
+ * one non-NetworkManager-based configuration is defined. Returned list
+ * will be freed by the system settings service, and each element must be
+ * allocated using g_malloc() or its variants (g_strdup, g_strdup_printf,
+ * etc).
+ *
+ * Each string in the list must be in one of the formats recognized by
+ * nm_device_spec_match_list().
+ */
+ GSList * (*get_unrecognized_specs) (NMSystemConfigInterface *config);
+
+ /*
+ * Initialize the plugin-specific connection and return a new
* NMSettingsConnection subclass that contains the same settings as the
- * original connection.
+ * original connection. The connection should only be saved to backing
+ * storage if @save_to_disk is TRUE. The returned object is owned by the
+ * plugin and must be referenced by the owner if necessary.
*/
NMSettingsConnection * (*add_connection) (NMSystemConfigInterface *config,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error);
/* Signals */
@@ -126,6 +137,9 @@ struct _NMSystemConfigInterface {
/* Emitted when the list of unmanaged device specifications changes */
void (*unmanaged_specs_changed) (NMSystemConfigInterface *config);
+
+ /* Emitted when the list of devices with unrecognized connections changes */
+ void (*unrecognized_specs_changed) (NMSystemConfigInterface *config);
};
GType nm_system_config_interface_get_type (void);
@@ -135,10 +149,16 @@ void nm_system_config_interface_init (NMSystemConfigInterface *config,
GSList *nm_system_config_interface_get_connections (NMSystemConfigInterface *config);
+gboolean nm_system_config_interface_load_connection (NMSystemConfigInterface *config,
+ const char *filename);
+void nm_system_config_interface_reload_connections (NMSystemConfigInterface *config);
+
GSList *nm_system_config_interface_get_unmanaged_specs (NMSystemConfigInterface *config);
+GSList *nm_system_config_interface_get_unrecognized_specs (NMSystemConfigInterface *config);
NMSettingsConnection *nm_system_config_interface_add_connection (NMSystemConfigInterface *config,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error);
G_END_DECLS
diff --git a/src/settings/plugins/Makefile.am b/src/settings/plugins/Makefile.am
index 8b39b3fce..41694e7e4 100644
--- a/src/settings/plugins/Makefile.am
+++ b/src/settings/plugins/Makefile.am
@@ -1,5 +1,7 @@
SUBDIRS=keyfile example
+@GNOME_CODE_COVERAGE_RULES@
+
if CONFIG_PLUGIN_IFCFG_RH
SUBDIRS+=ifcfg-rh
endif
diff --git a/src/settings/plugins/Makefile.in b/src/settings/plugins/Makefile.in
index 4a8bc8718..8c7c0bb8d 100644
--- a/src/settings/plugins/Makefile.in
+++ b/src/settings/plugins/Makefile.in
@@ -84,7 +84,8 @@ host_triplet = @host@
subdir = src/settings/plugins
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -208,12 +209,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -238,7 +242,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -283,12 +286,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -305,6 +312,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -332,11 +341,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -351,6 +365,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -413,6 +428,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -423,6 +439,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = keyfile example $(am__append_1) $(am__append_2) \
$(am__append_3) $(am__append_4)
all: all-recursive
@@ -736,6 +753,8 @@ uninstall-am:
ps ps-am tags tags-am uninstall uninstall-am
+@GNOME_CODE_COVERAGE_RULES@
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/settings/plugins/example/Makefile.am b/src/settings/plugins/example/Makefile.am
index f3aa11b6b..8233a71fd 100644
--- a/src/settings/plugins/example/Makefile.am
+++ b/src/settings/plugins/example/Makefile.am
@@ -1,16 +1,22 @@
-# 'noinst' here because this is an example plugin we don't want to install
-noinst_LTLIBRARIES = libnm-settings-plugin-example.la
-
-libnm_settings_plugin_example_la_CPPFLAGS = \
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/config \
+ -I$(top_srcdir)/src/logging \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-example"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
-DNMCONFDIR=\"$(nmconfdir)\"
+# 'noinst' here because this is an example plugin we don't want to install
+noinst_LTLIBRARIES = libnm-settings-plugin-example.la
+
# The actual plugins typically pull reader.c and writer.c out into
# their own static library so that unit tests can use them without
# having to build the entire plugin. But since this is a simple
@@ -27,6 +33,7 @@ libnm_settings_plugin_example_la_SOURCES = \
writer.c
libnm_settings_plugin_example_la_LIBADD = \
+ $(top_builddir)/src/libNetworkManager.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(GLIB_LIBS)
diff --git a/src/settings/plugins/example/Makefile.in b/src/settings/plugins/example/Makefile.in
index d991bc440..26aa0a603 100644
--- a/src/settings/plugins/example/Makefile.in
+++ b/src/settings/plugins/example/Makefile.in
@@ -82,7 +82,8 @@ subdir = src/settings/plugins/example
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp README
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -103,13 +104,11 @@ CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
libnm_settings_plugin_example_la_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la \
$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1)
am_libnm_settings_plugin_example_la_OBJECTS = \
- libnm_settings_plugin_example_la-nm-example-connection.lo \
- libnm_settings_plugin_example_la-plugin.lo \
- libnm_settings_plugin_example_la-errors.lo \
- libnm_settings_plugin_example_la-reader.lo \
- libnm_settings_plugin_example_la-writer.lo
+ nm-example-connection.lo plugin.lo errors.lo reader.lo \
+ writer.lo
libnm_settings_plugin_example_la_OBJECTS = \
$(am_libnm_settings_plugin_example_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -206,12 +205,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -236,7 +238,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -281,12 +282,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -303,6 +308,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -330,11 +337,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -349,6 +361,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -411,6 +424,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -421,20 +435,27 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-
-# 'noinst' here because this is an example plugin we don't want to install
-noinst_LTLIBRARIES = libnm-settings-plugin-example.la
-libnm_settings_plugin_example_la_CPPFLAGS = \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/config \
+ -I$(top_srcdir)/src/logging \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-example"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
-DNMCONFDIR=\"$(nmconfdir)\"
+# 'noinst' here because this is an example plugin we don't want to install
+noinst_LTLIBRARIES = libnm-settings-plugin-example.la
+
# The actual plugins typically pull reader.c and writer.c out into
# their own static library so that unit tests can use them without
# having to build the entire plugin. But since this is a simple
@@ -450,6 +471,7 @@ libnm_settings_plugin_example_la_SOURCES = \
writer.c
libnm_settings_plugin_example_la_LIBADD = \
+ $(top_builddir)/src/libNetworkManager.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(GLIB_LIBS)
@@ -509,11 +531,11 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_example_la-errors.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_example_la-nm-example-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_example_la-plugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_example_la-reader.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_example_la-writer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-example-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writer.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -536,41 +558,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_settings_plugin_example_la-nm-example-connection.lo: nm-example-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_example_la-nm-example-connection.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_example_la-nm-example-connection.Tpo -c -o libnm_settings_plugin_example_la-nm-example-connection.lo `test -f 'nm-example-connection.c' || echo '$(srcdir)/'`nm-example-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_example_la-nm-example-connection.Tpo $(DEPDIR)/libnm_settings_plugin_example_la-nm-example-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-example-connection.c' object='libnm_settings_plugin_example_la-nm-example-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_example_la-nm-example-connection.lo `test -f 'nm-example-connection.c' || echo '$(srcdir)/'`nm-example-connection.c
-
-libnm_settings_plugin_example_la-plugin.lo: plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_example_la-plugin.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_example_la-plugin.Tpo -c -o libnm_settings_plugin_example_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_example_la-plugin.Tpo $(DEPDIR)/libnm_settings_plugin_example_la-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libnm_settings_plugin_example_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_example_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-
-libnm_settings_plugin_example_la-errors.lo: errors.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_example_la-errors.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_example_la-errors.Tpo -c -o libnm_settings_plugin_example_la-errors.lo `test -f 'errors.c' || echo '$(srcdir)/'`errors.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_example_la-errors.Tpo $(DEPDIR)/libnm_settings_plugin_example_la-errors.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='errors.c' object='libnm_settings_plugin_example_la-errors.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_example_la-errors.lo `test -f 'errors.c' || echo '$(srcdir)/'`errors.c
-
-libnm_settings_plugin_example_la-reader.lo: reader.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_example_la-reader.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_example_la-reader.Tpo -c -o libnm_settings_plugin_example_la-reader.lo `test -f 'reader.c' || echo '$(srcdir)/'`reader.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_example_la-reader.Tpo $(DEPDIR)/libnm_settings_plugin_example_la-reader.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='reader.c' object='libnm_settings_plugin_example_la-reader.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_example_la-reader.lo `test -f 'reader.c' || echo '$(srcdir)/'`reader.c
-
-libnm_settings_plugin_example_la-writer.lo: writer.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_example_la-writer.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_example_la-writer.Tpo -c -o libnm_settings_plugin_example_la-writer.lo `test -f 'writer.c' || echo '$(srcdir)/'`writer.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_example_la-writer.Tpo $(DEPDIR)/libnm_settings_plugin_example_la-writer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='writer.c' object='libnm_settings_plugin_example_la-writer.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_example_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_example_la-writer.lo `test -f 'writer.c' || echo '$(srcdir)/'`writer.c
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/src/settings/plugins/example/nm-example-connection.c b/src/settings/plugins/example/nm-example-connection.c
index e4a69f9b0..e22268297 100644
--- a/src/settings/plugins/example/nm-example-connection.c
+++ b/src/settings/plugins/example/nm-example-connection.c
@@ -71,16 +71,16 @@ nm_example_connection_new (const char *full_path,
/* Actually create the new NMExampleConnection object */
object = (GObject *) g_object_new (NM_TYPE_EXAMPLE_CONNECTION, NULL);
- if (!object)
- goto out;
-
priv = NM_EXAMPLE_CONNECTION_GET_PRIVATE (object);
priv->path = g_strdup (full_path);
/* Update our settings with what was read from the file or what got passed
* in as a source NMConnection.
*/
- if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object), tmp, error)) {
+ if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object),
+ tmp,
+ TRUE,
+ error)) {
g_object_unref (object);
object = NULL;
goto out;
diff --git a/src/settings/plugins/example/plugin.c b/src/settings/plugins/example/plugin.c
index 04af03e74..eea949460 100644
--- a/src/settings/plugins/example/plugin.c
+++ b/src/settings/plugins/example/plugin.c
@@ -33,6 +33,9 @@
#include <nm-connection.h>
#include <nm-setting.h>
#include <nm-setting-connection.h>
+#include <nm-utils.h>
+#include <nm-config.h>
+#include <nm-logging.h>
#include "plugin.h"
#include "nm-system-config-interface.h"
@@ -98,7 +101,7 @@ typedef struct {
* plugin has some specific options (like unmanaged devices) that
* might be changed at runtime.
*/
- char *conf_file;
+ const char *conf_file;
GFileMonitor *conf_file_monitor;
guint conf_file_monitor_id;
@@ -134,7 +137,7 @@ _internal_new_connection (SCPluginExample *self,
connection = nm_example_connection_new (full_path, source, error);
if (connection) {
g_hash_table_insert (priv->connections,
- (gpointer) nm_example_connection_get_path (connection),
+ g_strdup (nm_example_connection_get_path (connection)),
connection);
}
@@ -154,7 +157,7 @@ read_connections (NMSystemConfigInterface *config)
dir = g_dir_open (EXAMPLE_DIR, 0, &error);
if (!dir) {
- PLUGIN_WARN (EXAMPLE_PLUGIN_NAME, "Cannot read directory '%s': (%d) %s",
+ nm_log_warn (LOGD_SETTINGS, "Cannot read directory '%s': (%d) %s",
EXAMPLE_DIR,
error ? error->code : -1,
error && error->message ? error->message : "(unknown)");
@@ -169,15 +172,15 @@ read_connections (NMSystemConfigInterface *config)
/* XXX: Check file extension and ignore "~", ".tmp", ".bak", etc */
full_path = g_build_filename (EXAMPLE_DIR, item, NULL);
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, "parsing %s ... ", item);
+ nm_log_info (LOGD_SETTINGS, "parsing %s ... ", item);
connection = _internal_new_connection (self, full_path, NULL, &error);
if (connection) {
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, " read connection '%s'",
- nm_connection_get_id (NM_CONNECTION (connection)));
+ nm_log_info (LOGD_SETTINGS, " read connection '%s'",
+ nm_connection_get_id (NM_CONNECTION (connection)));
} else {
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, " error: %s",
- (error && error->message) ? error->message : "(unknown)");
+ nm_log_info (LOGD_SETTINGS, " error: %s",
+ (error && error->message) ? error->message : "(unknown)");
}
g_clear_error (&error);
g_free (full_path);
@@ -195,11 +198,11 @@ update_connection_settings_commit_cb (NMSettingsConnection *orig, GError *error,
* an error here.
*/
if (error) {
- g_warning ("%s: '%s' / '%s' invalid: %d",
- __func__,
- error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
- (error && error->message) ? error->message : "(none)",
- error ? error->code : -1);
+ nm_log_warn (LOGD_SETTINGS, "%s: '%s' / '%s' invalid: %d",
+ __func__,
+ error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
+ (error && error->message) ? error->message : "(none)",
+ error ? error->code : -1);
g_clear_error (&error);
nm_settings_connection_signal_remove (orig);
@@ -286,7 +289,7 @@ dir_changed (GFileMonitor *monitor,
switch (event_type) {
case G_FILE_MONITOR_EVENT_DELETED:
if (connection) {
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, "removed %s.", full_path);
+ nm_log_info (LOGD_SETTINGS, "removed %s.", full_path);
remove_connection (SC_PLUGIN_EXAMPLE (config), connection, full_path);
}
break;
@@ -306,7 +309,7 @@ dir_changed (GFileMonitor *monitor,
NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) {
/* Connection changed; update our internal connection object */
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, "updating %s", full_path);
+ nm_log_info (LOGD_SETTINGS, "updating %s", full_path);
update_connection_settings (connection, tmp);
}
g_object_unref (tmp);
@@ -316,13 +319,13 @@ dir_changed (GFileMonitor *monitor,
* becomes valid again later we'll get another change
* notification, we'll re-read it, and we'll treat it as new.
*/
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, " error: %s",
- (error && error->message) ? error->message : "(unknown)");
+ nm_log_info (LOGD_SETTINGS, " error: %s",
+ (error && error->message) ? error->message : "(unknown)");
remove_connection (SC_PLUGIN_EXAMPLE (config), connection, full_path);
}
g_clear_error (&error);
} else {
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, "updating %s", full_path);
+ nm_log_info (LOGD_SETTINGS, "updating %s", full_path);
/* We don't know about the connection yet, so the change represents
* a completely new connection.
@@ -353,7 +356,7 @@ dir_changed (GFileMonitor *monitor,
/* Re-insert the connection back into the hash with the new filename */
g_hash_table_insert (priv->connections,
- (gpointer) nm_example_connection_get_path (found),
+ g_strdup (nm_example_connection_get_path (found)),
found);
/* Get rid of the temporary connection */
@@ -361,14 +364,13 @@ dir_changed (GFileMonitor *monitor,
} else {
/* Completely new connection, not a rename. */
g_hash_table_insert (priv->connections,
- (gpointer) nm_example_connection_get_path (connection),
+ g_strdup (nm_example_connection_get_path (connection)),
connection);
/* Tell NM we found a new connection */
g_signal_emit_by_name (config, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, connection);
}
} else {
- PLUGIN_PRINT (EXAMPLE_PLUGIN_NAME, " error: %s",
- (error && error->message) ? error->message : "(unknown)");
+ nm_log_info (LOGD_SETTINGS, " error: %s", (error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
}
}
@@ -419,10 +421,9 @@ conf_file_changed (GFileMonitor *monitor,
}
/* This function starts the inotify monitors that watch the plugin's config
- * file directory for new connections and changes to existing connections.
- * At this time all plugins are expected to make NM aware of changes on-the-fly
- * instead of requiring a SIGHUP or SIGUSR1 or some D-Bus method to say
- * "reload".
+ * file directory for new connections and changes to existing connections
+ * (if not disabled by NetworkManager.conf), and for changes to the plugin's
+ * non-connection config files.
*/
static void
setup_monitoring (NMSystemConfigInterface *config)
@@ -434,18 +435,20 @@ setup_monitoring (NMSystemConfigInterface *config)
/* Initialize connection hash here; we use the connection hash as the
* "are we initialized yet" variable.
*/
- priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
-
- /* Set up the watch for our config directory */
- file = g_file_new_for_path (EXAMPLE_DIR);
- monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
- g_object_unref (file);
- if (monitor) {
- /* This registers the dir_changed() function to be called whenever
- * the GFileMonitor object notices a change in the directory.
- */
- priv->monitor_id = g_signal_connect (monitor, "changed", G_CALLBACK (dir_changed), config);
- priv->monitor = monitor;
+ priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
+ if (nm_config_get_monitor_connection_files (nm_config_get ())) {
+ /* Set up the watch for our config directory */
+ file = g_file_new_for_path (EXAMPLE_DIR);
+ monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
+ g_object_unref (file);
+ if (monitor) {
+ /* This registers the dir_changed() function to be called whenever
+ * the GFileMonitor object notices a change in the directory.
+ */
+ priv->monitor_id = g_signal_connect (monitor, "changed", G_CALLBACK (dir_changed), config);
+ priv->monitor = monitor;
+ }
}
/* Set up a watch on our configuration file, basically just for watching
@@ -501,6 +504,7 @@ get_connections (NMSystemConfigInterface *config)
static NMSettingsConnection *
add_connection (NMSystemConfigInterface *config,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error)
{
SCPluginExample *self = SC_PLUGIN_EXAMPLE (config);
@@ -511,18 +515,20 @@ add_connection (NMSystemConfigInterface *config,
* way we don't trigger the new NMSettingsConnection subclass' file watch
* functions needlessly.
*/
- if (write_connection (connection, NULL, &path, error)) {
- added = _internal_new_connection (self, path, connection, error);
- g_free (path);
- }
+ if (save_to_disk && !write_connection (connection, NULL, &path, error))
+ return NULL;
+
+ added = _internal_new_connection (self, path, connection, error);
+ g_free (path);
return added;
}
/* This function returns a list of "unmanaged device specs" which represent
* a list of devices that NetworkManager should not manage. Each unmanaged
* spec item has a specific format starting with a "tag" and followed by
- * tag-specific data. The only currently specified item is "mac:" followed
- * by the MAC address of the interface NM should not manage. This function
+ * tag-specific data. The only currently specified items are "mac:" followed
+ * by the MAC address of the interface NM should not manage, or "interface-name:"
+ * followed by the name of the interface NM should not manage. This function
* reads the list of unmanaged devices from wherever the plugin wants to
* store them and returns that list to NetworkManager.
*/
@@ -533,7 +539,7 @@ get_unmanaged_specs (NMSystemConfigInterface *config)
GKeyFile *key_file;
GSList *specs = NULL;
GError *error = NULL;
- char *str, **macs;
+ char *str, **ids;
int i;
if (!priv->conf_file)
@@ -541,7 +547,7 @@ get_unmanaged_specs (NMSystemConfigInterface *config)
key_file = g_key_file_new ();
if (!g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error)) {
- g_warning ("Error parsing file '%s': %s", priv->conf_file, error->message);
+ nm_log_warn (LOGD_SETTINGS, "Error parsing file '%s': %s", priv->conf_file, error->message);
g_error_free (error);
goto out;
}
@@ -551,29 +557,20 @@ get_unmanaged_specs (NMSystemConfigInterface *config)
if (!str)
goto out;
- macs = g_strsplit (str, ";", -1);
- for (i = 0; macs[i] != NULL; i++) {
+ ids = g_strsplit (str, ";", -1);
+ for (i = 0; ids[i] != NULL; i++) {
/* Verify unmanaged specification and add it to the list */
- if (strlen (macs[i]) > 4 && !strncmp (macs[i], "mac:", 4) && ether_aton (macs[i] + 4)) {
- char *p = macs[i];
-
- /* To accept uppercase MACs in configuration file, we have to
- * convert values to lowercase here. Unmanaged MACs in specs are
- * always in lowercase.
- */
- while (*p) {
- *p = g_ascii_tolower (*p);
- p++;
- }
-
- specs = g_slist_append (specs, macs[i]);
+ if (!strncmp (ids[i], "mac:", 4) && nm_utils_hwaddr_valid (ids[i] + 4)) {
+ specs = g_slist_append (specs, ids[i]);
+ } else if (!strncmp (ids[i], "interface-name:", 15) && nm_utils_iface_valid_name (ids[i] + 15)) {
+ specs = g_slist_append (specs, ids[i]);
} else {
- g_warning ("Error in file '%s': invalid unmanaged-devices entry: '%s'", priv->conf_file, macs[i]);
- g_free (macs[i]);
+ nm_log_warn (LOGD_SETTINGS, "Error in file '%s': invalid unmanaged-devices entry: '%s'", priv->conf_file, ids[i]);
+ g_free (ids[i]);
}
}
- g_free (macs); /* Yes, g_free, not g_strfreev because we need the strings in the list */
+ g_free (ids); /* Yes, g_free, not g_strfreev because we need the strings in the list */
g_free (str);
out:
@@ -601,7 +598,7 @@ plugin_get_hostname (SCPluginExample *plugin)
if (g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error))
hostname = g_key_file_get_value (key_file, "keyfile", "hostname", NULL);
else {
- g_warning ("Error parsing file '%s': %s", priv->conf_file, error->message);
+ nm_log_warn (LOGD_SETTINGS, "Error parsing file '%s': %s", priv->conf_file, error->message);
g_error_free (error);
}
@@ -620,7 +617,7 @@ plugin_set_hostname (SCPluginExample *plugin, const char *hostname)
gsize len;
if (!priv->conf_file) {
- g_warning ("Error saving hostname: no config file");
+ nm_log_warn (LOGD_SETTINGS, "Error saving hostname: no config file");
return FALSE;
}
@@ -629,7 +626,7 @@ plugin_set_hostname (SCPluginExample *plugin, const char *hostname)
*/
key_file = g_key_file_new ();
if (!g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error)) {
- g_warning ("Error parsing file '%s': %s", priv->conf_file, error->message);
+ nm_log_warn (LOGD_SETTINGS, "Error parsing file '%s': %s", priv->conf_file, error->message);
g_error_free (error);
goto out;
}
@@ -649,7 +646,7 @@ plugin_set_hostname (SCPluginExample *plugin, const char *hostname)
}
if (error) {
- g_warning ("Error saving hostname: %s", error->message);
+ nm_log_warn (LOGD_SETTINGS, "Error saving hostname: %s", error->message);
g_error_free (error);
}
@@ -771,8 +768,6 @@ dispose (GObject *object)
g_free (priv->hostname);
priv->hostname = NULL;
- g_free (priv->conf_file);
- priv->conf_file = NULL;
/* Chain up to the superclass */
G_OBJECT_CLASS (sc_plugin_example_parent_class)->dispose (object);
@@ -838,13 +833,13 @@ system_config_interface_init (NMSystemConfigInterface *sci_intf)
/*******************************************************************/
/* Factory function: this is the first entry point for NetworkManager, which
- * gets called during NM startup to create the the instance of this plugin
+ * gets called during NM startup to create the instance of this plugin
* that NetworkManager will actually use. Since every plugin is a singleton
* we just return a singleton instance. This function should never be called
* twice.
*/
G_MODULE_EXPORT GObject *
-nm_system_config_factory (const char *config_file)
+nm_system_config_factory (void)
{
static SCPluginExample *singleton = NULL;
SCPluginExamplePrivate *priv;
@@ -852,12 +847,10 @@ nm_system_config_factory (const char *config_file)
if (!singleton) {
/* Instantiate our plugin */
singleton = SC_PLUGIN_EXAMPLE (g_object_new (SC_TYPE_PLUGIN_EXAMPLE, NULL));
- if (singleton) {
- priv = SC_PLUGIN_EXAMPLE_GET_PRIVATE (singleton);
+ priv = SC_PLUGIN_EXAMPLE_GET_PRIVATE (singleton);
- /* Cache the config file path */
- priv->conf_file = g_strdup (config_file);
- }
+ /* Cache the config file path */
+ priv->conf_file = nm_config_get_path (nm_config_get ());
} else {
/* This function should never be called twice */
g_assert_not_reached ();
diff --git a/src/settings/plugins/example/writer.c b/src/settings/plugins/example/writer.c
index 4703fa948..f0a9ea210 100644
--- a/src/settings/plugins/example/writer.c
+++ b/src/settings/plugins/example/writer.c
@@ -42,7 +42,7 @@ write_connection (NMConnection *connection,
/* There are two approaches to converting the data. The first more manual
* approach consists of grabbing each setting value from the NMConnection
* and converting it into the appropriate value for the plugin's data
- * format. This is usually taken by distro plugins becuase their format
+ * format. This is usually taken by distro plugins because their format
* is significantly different than NetworkManager's internal format.
* The second uses nm_connection_for_each_setting_value() to iterate
* through each value of each setting in the NMConnection, convert it to
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.am b/src/settings/plugins/ifcfg-rh/Makefile.am
index 3faa60d44..c5e458af5 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/Makefile.am
@@ -1,5 +1,7 @@
SUBDIRS = . tests
+@GNOME_CODE_COVERAGE_RULES@
+
nm-ifcfg-rh-glue.h: nm-ifcfg-rh.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_ifcfg_rh --mode=glib-server --output=$@ $<
@@ -23,27 +25,26 @@ libifcfg_rh_io_la_SOURCES = \
utils.h
AM_CPPFLAGS = \
- -I$(top_srcdir)/src/wifi \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/src/posix-signals \
+ -I$(top_srcdir)/src/config \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-glib \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
$(NSS_CFLAGS) \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
-DSBINDIR=\"$(sbindir)\"
-libifcfg_rh_io_la_LIBADD = \
- $(top_builddir)/src/wifi/libwifi-utils.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(NSS_LIBS)
-
libnm_settings_plugin_ifcfg_rh_la_SOURCES = \
plugin.c \
plugin.h \
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.in b/src/settings/plugins/ifcfg-rh/Makefile.in
index 848d470ca..7b1a7ddaf 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/Makefile.in
@@ -83,7 +83,8 @@ subdir = src/settings/plugins/ifcfg-rh
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -131,12 +132,7 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(pkglibdir)" \
"$(DESTDIR)$(dbusservicedir)"
LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libifcfg_rh_io_la_DEPENDENCIES = \
- $(top_builddir)/src/wifi/libwifi-utils.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
+libifcfg_rh_io_la_LIBADD =
am_libifcfg_rh_io_la_OBJECTS = shvar.lo reader.lo writer.lo errors.lo \
utils.lo
libifcfg_rh_io_la_OBJECTS = $(am_libifcfg_rh_io_la_OBJECTS)
@@ -144,6 +140,7 @@ AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+am__DEPENDENCIES_1 =
libnm_settings_plugin_ifcfg_rh_la_DEPENDENCIES = \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la libifcfg-rh-io.la \
@@ -287,12 +284,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -317,7 +317,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -362,12 +361,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -384,6 +387,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -411,11 +416,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -430,6 +440,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -492,6 +503,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -502,6 +514,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
BUILT_SOURCES = \
nm-ifcfg-rh-glue.h
@@ -521,27 +534,26 @@ libifcfg_rh_io_la_SOURCES = \
utils.h
AM_CPPFLAGS = \
- -I$(top_srcdir)/src/wifi \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/src/posix-signals \
+ -I$(top_srcdir)/src/config \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-glib \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
$(NSS_CFLAGS) \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
-DSBINDIR=\"$(sbindir)\"
-libifcfg_rh_io_la_LIBADD = \
- $(top_builddir)/src/wifi/libwifi-utils.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(NSS_LIBS)
-
libnm_settings_plugin_ifcfg_rh_la_SOURCES = \
plugin.c \
plugin.h \
@@ -1000,6 +1012,8 @@ uninstall-am: uninstall-dbusserviceDATA uninstall-pkglibLTLIBRARIES
uninstall-pkglibLTLIBRARIES
+@GNOME_CODE_COVERAGE_RULES@
+
nm-ifcfg-rh-glue.h: nm-ifcfg-rh.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_ifcfg_rh --mode=glib-server --output=$@ $<
diff --git a/src/settings/plugins/ifcfg-rh/common.h b/src/settings/plugins/ifcfg-rh/common.h
index fc8ce22a5..d9627bdde 100644
--- a/src/settings/plugins/ifcfg-rh/common.h
+++ b/src/settings/plugins/ifcfg-rh/common.h
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2008 - 2011 Red Hat, Inc.
+ * (C) Copyright 2008 - 2013 Red Hat, Inc.
*/
#ifndef __COMMON_H__
@@ -39,7 +39,7 @@
#define IFCFG_DIR SYSCONFDIR"/sysconfig/network-scripts"
#define IFCFG_PLUGIN_NAME "ifcfg-rh"
-#define IFCFG_PLUGIN_INFO "(c) 2007 - 2010 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
+#define IFCFG_PLUGIN_INFO "(c) 2007 - 2013 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
#define TYPE_ETHERNET "Ethernet"
#define TYPE_WIRELESS "Wireless"
@@ -47,11 +47,37 @@
#define TYPE_BRIDGE "Bridge"
#define TYPE_BOND "Bond"
#define TYPE_VLAN "Vlan"
+#define TYPE_TEAM "Team"
+#define TYPE_TEAM_PORT "TeamPort"
#define SECRET_FLAG_AGENT "user"
#define SECRET_FLAG_NOT_SAVED "ask"
#define SECRET_FLAG_NOT_REQUIRED "unused"
+/* DCB key names */
+#define KEY_DCB_APP_FCOE_ENABLE "DCB_APP_FCOE_ENABLE"
+#define KEY_DCB_APP_FCOE_ADVERTISE "DCB_APP_FCOE_ADVERTISE"
+#define KEY_DCB_APP_FCOE_WILLING "DCB_APP_FCOE_WILLING"
+#define KEY_DCB_APP_FCOE_MODE "DCB_APP_FCOE_MODE"
+#define KEY_DCB_APP_ISCSI_ENABLE "DCB_APP_ISCSI_ENABLE"
+#define KEY_DCB_APP_ISCSI_ADVERTISE "DCB_APP_ISCSI_ADVERTISE"
+#define KEY_DCB_APP_ISCSI_WILLING "DCB_APP_ISCSI_WILLING"
+#define KEY_DCB_APP_FIP_ENABLE "DCB_APP_FIP_ENABLE"
+#define KEY_DCB_APP_FIP_ADVERTISE "DCB_APP_FIP_ADVERTISE"
+#define KEY_DCB_APP_FIP_WILLING "DCB_APP_FIP_WILLING"
+#define KEY_DCB_PFC_ENABLE "DCB_PFC_ENABLE"
+#define KEY_DCB_PFC_ADVERTISE "DCB_PFC_ADVERTISE"
+#define KEY_DCB_PFC_WILLING "DCB_PFC_WILLING"
+#define KEY_DCB_PFC_UP "DCB_PFC_UP"
+#define KEY_DCB_PG_ENABLE "DCB_PG_ENABLE"
+#define KEY_DCB_PG_ADVERTISE "DCB_PG_ADVERTISE"
+#define KEY_DCB_PG_WILLING "DCB_PG_WILLING"
+#define KEY_DCB_PG_ID "DCB_PG_ID"
+#define KEY_DCB_PG_PCT "DCB_PG_PCT"
+#define KEY_DCB_PG_UPPCT "DCB_PG_UPPCT"
+#define KEY_DCB_PG_STRICT "DCB_PG_STRICT"
+#define KEY_DCB_PG_UP2TC "DCB_PG_UP2TC"
+
#define IFCFG_PLUGIN_ERROR (ifcfg_plugin_error_quark ())
GQuark ifcfg_plugin_error_quark (void);
diff --git a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
index 04d3d3e45..3db06f17d 100644
--- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
+++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
@@ -35,10 +35,12 @@
#include <nm-setting-8021x.h>
#include "common.h"
+#include "nm-config.h"
#include "nm-ifcfg-connection.h"
#include "reader.h"
#include "writer.h"
#include "nm-inotify-helper.h"
+#include "utils.h"
G_DEFINE_TYPE (NMIfcfgConnection, nm_ifcfg_connection, NM_TYPE_SETTINGS_CONNECTION)
@@ -59,12 +61,14 @@ typedef struct {
char *route6file;
int route6file_wd;
- char *unmanaged;
+ char *unmanaged_spec;
+ char *unrecognized_spec;
} NMIfcfgConnectionPrivate;
enum {
PROP_0,
- PROP_UNMANAGED,
+ PROP_UNMANAGED_SPEC,
+ PROP_UNRECOGNIZED_SPEC,
LAST_PROP
};
@@ -96,86 +100,159 @@ files_changed_cb (NMInotifyHelper *ih,
}
NMIfcfgConnection *
-nm_ifcfg_connection_new (const char *full_path,
- NMConnection *source,
+nm_ifcfg_connection_new (NMConnection *source,
+ const char *full_path,
GError **error,
gboolean *ignore_error)
{
GObject *object;
- NMIfcfgConnectionPrivate *priv;
NMConnection *tmp;
- char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- NMInotifyHelper *ih;
+ char *unhandled_spec = NULL;
+ const char *unmanaged_spec = NULL, *unrecognized_spec = NULL;
+ gboolean update_unsaved = TRUE;
- g_return_val_if_fail (full_path != NULL, NULL);
+ g_assert (source || full_path);
/* If we're given a connection already, prefer that instead of re-reading */
if (source)
tmp = g_object_ref (source);
else {
+ char *keyfile = NULL, *routefile = NULL, *route6file = NULL;
+
tmp = connection_from_file (full_path, NULL, NULL, NULL,
- &unmanaged,
+ &unhandled_spec,
&keyfile,
&routefile,
&route6file,
error,
ignore_error);
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
if (!tmp)
return NULL;
+
+ /* If we just read the connection from disk, it's clearly not Unsaved */
+ update_unsaved = FALSE;
}
+ if (unhandled_spec && g_str_has_prefix (unhandled_spec, "unmanaged:"))
+ unmanaged_spec = unhandled_spec + strlen ("unmanaged:");
+ else if (unhandled_spec && g_str_has_prefix (unhandled_spec, "unrecognized:"))
+ unrecognized_spec = unhandled_spec + strlen ("unrecognized:");
+
object = (GObject *) g_object_new (NM_TYPE_IFCFG_CONNECTION,
- NM_IFCFG_CONNECTION_UNMANAGED, unmanaged,
+ NM_IFCFG_CONNECTION_UNMANAGED_SPEC, unmanaged_spec,
+ NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC, unrecognized_spec,
NULL);
- if (!object)
- goto out;
-
- /* Update our settings with what was read from the file */
- if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object), tmp, error)) {
- g_object_unref (object);
- object = NULL;
- goto out;
+ if (object) {
+ /* Update our settings with what was read from the file */
+ if (nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object),
+ tmp,
+ update_unsaved,
+ error)) {
+ /* Set the path and start monitoring */
+ if (full_path)
+ nm_ifcfg_connection_set_path (NM_IFCFG_CONNECTION (object), full_path);
+ } else {
+ g_object_unref (object);
+ object = NULL;
+ }
}
- priv = NM_IFCFG_CONNECTION_GET_PRIVATE (object);
- priv->path = g_strdup (full_path);
+ g_object_unref (tmp);
+ g_free (unhandled_spec);
+ return (NMIfcfgConnection *) object;
+}
+
+const char *
+nm_ifcfg_connection_get_path (NMIfcfgConnection *self)
+{
+ g_return_val_if_fail (NM_IS_IFCFG_CONNECTION (self), NULL);
+
+ return NM_IFCFG_CONNECTION_GET_PRIVATE (self)->path;
+}
+
+static void
+path_watch_stop (NMIfcfgConnection *self)
+{
+ NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (self);
+ NMInotifyHelper *ih;
ih = nm_inotify_helper_get ();
- priv->ih_event_id = g_signal_connect (ih, "event", G_CALLBACK (files_changed_cb), object);
- priv->file_wd = nm_inotify_helper_add_watch (ih, full_path);
+ if (priv->ih_event_id) {
+ g_signal_handler_disconnect (ih, priv->ih_event_id);
+ priv->ih_event_id = 0;
+ }
- priv->keyfile = keyfile;
- priv->keyfile_wd = nm_inotify_helper_add_watch (ih, keyfile);
+ if (priv->file_wd >= 0) {
+ nm_inotify_helper_remove_watch (ih, priv->file_wd);
+ priv->file_wd = -1;
+ }
- priv->routefile = routefile;
- priv->routefile_wd = nm_inotify_helper_add_watch (ih, routefile);
+ g_free (priv->keyfile);
+ priv->keyfile = NULL;
+ if (priv->keyfile_wd >= 0) {
+ nm_inotify_helper_remove_watch (ih, priv->keyfile_wd);
+ priv->keyfile_wd = -1;
+ }
- priv->route6file = route6file;
- priv->route6file_wd = nm_inotify_helper_add_watch (ih, route6file);
+ g_free (priv->routefile);
+ priv->routefile = NULL;
+ if (priv->routefile_wd >= 0) {
+ nm_inotify_helper_remove_watch (ih, priv->routefile_wd);
+ priv->routefile_wd = -1;
+ }
-out:
- g_object_unref (tmp);
- return (NMIfcfgConnection *) object;
+ g_free (priv->route6file);
+ priv->route6file = NULL;
+ if (priv->route6file_wd >= 0) {
+ nm_inotify_helper_remove_watch (ih, priv->route6file_wd);
+ priv->route6file_wd = -1;
+ }
+}
+
+void
+nm_ifcfg_connection_set_path (NMIfcfgConnection *self, const char *ifcfg_path)
+{
+ NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (self);
+
+ g_return_if_fail (ifcfg_path != NULL);
+
+ path_watch_stop (self);
+ g_free (priv->path);
+
+ priv->path = g_strdup (ifcfg_path);
+ priv->keyfile = utils_get_keys_path (ifcfg_path);
+ priv->routefile = utils_get_route_path (ifcfg_path);
+ priv->route6file = utils_get_route6_path (ifcfg_path);
+
+ if (nm_config_get_monitor_connection_files (nm_config_get ())) {
+ NMInotifyHelper *ih = nm_inotify_helper_get ();
+
+ priv->ih_event_id = g_signal_connect (ih, "event", G_CALLBACK (files_changed_cb), self);
+ priv->file_wd = nm_inotify_helper_add_watch (ih, ifcfg_path);
+ priv->keyfile_wd = nm_inotify_helper_add_watch (ih, priv->keyfile);
+ priv->routefile_wd = nm_inotify_helper_add_watch (ih, priv->routefile);
+ priv->route6file_wd = nm_inotify_helper_add_watch (ih, priv->route6file);
+ }
}
const char *
-nm_ifcfg_connection_get_path (NMIfcfgConnection *self)
+nm_ifcfg_connection_get_unmanaged_spec (NMIfcfgConnection *self)
{
g_return_val_if_fail (NM_IS_IFCFG_CONNECTION (self), NULL);
- return NM_IFCFG_CONNECTION_GET_PRIVATE (self)->path;
+ return NM_IFCFG_CONNECTION_GET_PRIVATE (self)->unmanaged_spec;
}
const char *
-nm_ifcfg_connection_get_unmanaged_spec (NMIfcfgConnection *self)
+nm_ifcfg_connection_get_unrecognized_spec (NMIfcfgConnection *self)
{
g_return_val_if_fail (NM_IS_IFCFG_CONNECTION (self), NULL);
- return NM_IFCFG_CONNECTION_GET_PRIVATE (self)->unmanaged;
+ return NM_IFCFG_CONNECTION_GET_PRIVATE (self)->unrecognized_spec;
}
static void
@@ -186,41 +263,50 @@ commit_changes (NMSettingsConnection *connection,
NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (connection);
GError *error = NULL;
NMConnection *reread;
- char *unmanaged = NULL, *keyfile = NULL, *routefile = NULL, *route6file = NULL;
- gboolean same = FALSE;
+ gboolean same = FALSE, success = FALSE;
+ char *ifcfg_path = NULL;
/* To ensure we don't rewrite files that are only changed from other
* processes on-disk, read the existing connection back in and only rewrite
* it if it's really changed.
*/
- reread = connection_from_file (priv->path, NULL, NULL, NULL,
- &unmanaged, &keyfile, &routefile, &route6file,
- NULL, NULL);
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
-
- if (reread) {
- same = nm_connection_compare (NM_CONNECTION (connection),
- reread,
- NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
- NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS);
- g_object_unref (reread);
-
- /* Don't bother writing anything out if in-memory and on-disk data are the same */
- if (same) {
- /* But chain up to parent to handle success - emits updated signal */
- NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->commit_changes (connection, callback, user_data);
- return;
+ if (priv->path) {
+ reread = connection_from_file (priv->path, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ &error, NULL);
+ g_clear_error (&error);
+ if (reread) {
+ same = nm_connection_compare (NM_CONNECTION (connection),
+ reread,
+ NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
+ NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS);
+ g_object_unref (reread);
+
+ /* Don't bother writing anything out if in-memory and on-disk data are the same */
+ if (same) {
+ /* But chain up to parent to handle success - emits updated signal */
+ NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->commit_changes (connection, callback, user_data);
+ return;
+ }
+ }
+
+ success = writer_update_connection (NM_CONNECTION (connection),
+ IFCFG_DIR,
+ priv->path,
+ priv->keyfile,
+ &error);
+ } else {
+ success = writer_new_connection (NM_CONNECTION (connection),
+ IFCFG_DIR,
+ &ifcfg_path,
+ &error);
+ if (success) {
+ nm_ifcfg_connection_set_path (NM_IFCFG_CONNECTION (connection), ifcfg_path);
+ g_free (ifcfg_path);
}
}
- if (writer_update_connection (NM_CONNECTION (connection),
- IFCFG_DIR,
- priv->path,
- priv->keyfile,
- &error)) {
+ if (success) {
/* Chain up to parent to handle success */
NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->commit_changes (connection, callback, user_data);
} else {
@@ -237,14 +323,16 @@ do_delete (NMSettingsConnection *connection,
{
NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (connection);
- g_unlink (priv->path);
- if (priv->keyfile)
- g_unlink (priv->keyfile);
- if (priv->routefile)
- g_unlink (priv->routefile);
+ if (priv->path) {
+ g_unlink (priv->path);
+ if (priv->keyfile)
+ g_unlink (priv->keyfile);
+ if (priv->routefile)
+ g_unlink (priv->routefile);
- if (priv->route6file)
- g_unlink (priv->route6file);
+ if (priv->route6file)
+ g_unlink (priv->route6file);
+ }
NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->delete (connection, callback, user_data);
}
@@ -259,31 +347,10 @@ nm_ifcfg_connection_init (NMIfcfgConnection *connection)
static void
finalize (GObject *object)
{
- NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (object);
- NMInotifyHelper *ih;
-
nm_connection_clear_secrets (NM_CONNECTION (object));
- ih = nm_inotify_helper_get ();
-
- if (priv->ih_event_id)
- g_signal_handler_disconnect (ih, priv->ih_event_id);
-
- g_free (priv->path);
- if (priv->file_wd >= 0)
- nm_inotify_helper_remove_watch (ih, priv->file_wd);
-
- g_free (priv->keyfile);
- if (priv->keyfile_wd >= 0)
- nm_inotify_helper_remove_watch (ih, priv->keyfile_wd);
-
- g_free (priv->routefile);
- if (priv->routefile_wd >= 0)
- nm_inotify_helper_remove_watch (ih, priv->routefile_wd);
-
- g_free (priv->route6file);
- if (priv->route6file_wd >= 0)
- nm_inotify_helper_remove_watch (ih, priv->route6file_wd);
+ path_watch_stop (NM_IFCFG_CONNECTION (object));
+ g_free (NM_IFCFG_CONNECTION_GET_PRIVATE (object)->path);
G_OBJECT_CLASS (nm_ifcfg_connection_parent_class)->finalize (object);
}
@@ -295,8 +362,11 @@ set_property (GObject *object, guint prop_id,
NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_UNMANAGED:
- priv->unmanaged = g_value_dup_string (value);
+ case PROP_UNMANAGED_SPEC:
+ priv->unmanaged_spec = g_value_dup_string (value);
+ break;
+ case PROP_UNRECOGNIZED_SPEC:
+ priv->unrecognized_spec = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -311,8 +381,11 @@ get_property (GObject *object, guint prop_id,
NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_UNMANAGED:
- g_value_set_string (value, priv->unmanaged);
+ case PROP_UNMANAGED_SPEC:
+ g_value_set_string (value, priv->unmanaged_spec);
+ break;
+ case PROP_UNRECOGNIZED_SPEC:
+ g_value_set_string (value, priv->unrecognized_spec);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -337,12 +410,19 @@ nm_ifcfg_connection_class_init (NMIfcfgConnectionClass *ifcfg_connection_class)
/* Properties */
g_object_class_install_property
- (object_class, PROP_UNMANAGED,
- g_param_spec_string (NM_IFCFG_CONNECTION_UNMANAGED,
- "Unmanaged",
- "Unmanaged",
+ (object_class, PROP_UNMANAGED_SPEC,
+ g_param_spec_string (NM_IFCFG_CONNECTION_UNMANAGED_SPEC,
+ "Unmanaged spec",
+ "Unmanaged spec",
NULL,
G_PARAM_READWRITE));
+ g_object_class_install_property
+ (object_class, PROP_UNRECOGNIZED_SPEC,
+ g_param_spec_string (NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC,
+ "Unrecognized spec",
+ "Unrecognized spec",
+ NULL,
+ G_PARAM_READWRITE));
signals[IFCFG_CHANGED] =
g_signal_new ("ifcfg-changed",
diff --git a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h
index 5a36dcdfe..47422b5db 100644
--- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h
+++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h
@@ -33,7 +33,8 @@ G_BEGIN_DECLS
#define NM_IS_IFCFG_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IFCFG_CONNECTION))
#define NM_IFCFG_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IFCFG_CONNECTION, NMIfcfgConnectionClass))
-#define NM_IFCFG_CONNECTION_UNMANAGED "unmanaged"
+#define NM_IFCFG_CONNECTION_UNMANAGED_SPEC "unmanaged-spec"
+#define NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC "unrecognized-spec"
typedef struct {
NMSettingsConnection parent;
@@ -45,14 +46,18 @@ typedef struct {
GType nm_ifcfg_connection_get_type (void);
-NMIfcfgConnection *nm_ifcfg_connection_new (const char *filename,
- NMConnection *source,
+NMIfcfgConnection *nm_ifcfg_connection_new (NMConnection *source,
+ const char *full_path,
GError **error,
gboolean *ignore_error);
const char *nm_ifcfg_connection_get_path (NMIfcfgConnection *self);
+void nm_ifcfg_connection_set_path (NMIfcfgConnection *self,
+ const char *ifcfg_path);
+
const char *nm_ifcfg_connection_get_unmanaged_spec (NMIfcfgConnection *self);
+const char *nm_ifcfg_connection_get_unrecognized_spec (NMIfcfgConnection *self);
gboolean nm_ifcfg_connection_update (NMIfcfgConnection *self,
GHashTable *new_settings,
diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c
index 50cbdf072..8a3f328c8 100644
--- a/src/settings/plugins/ifcfg-rh/plugin.c
+++ b/src/settings/plugins/ifcfg-rh/plugin.c
@@ -27,6 +27,8 @@
#include <errno.h>
#include <net/ethernet.h>
#include <netinet/ether.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#include <gmodule.h>
#include <glib-object.h>
@@ -37,6 +39,10 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
+#if HAVE_SELINUX
+#include <selinux/selinux.h>
+#endif
+
#include <nm-setting-connection.h>
#include "common.h"
@@ -44,10 +50,13 @@
#include "plugin.h"
#include "nm-system-config-interface.h"
#include "nm-settings-error.h"
+#include "nm-config.h"
+#include "nm-logging.h"
#include "nm-ifcfg-connection.h"
#include "nm-inotify-helper.h"
#include "shvar.h"
+#include "reader.h"
#include "writer.h"
#include "utils.h"
@@ -64,7 +73,8 @@ static gboolean impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
static void connection_new_or_changed (SCPluginIfcfg *plugin,
const char *path,
- NMIfcfgConnection *existing);
+ NMIfcfgConnection *existing,
+ char **out_old_path);
static void system_config_interface_init (NMSystemConfigInterface *system_config_interface_class);
@@ -76,8 +86,9 @@ G_DEFINE_TYPE_EXTENDED (SCPluginIfcfg, sc_plugin_ifcfg, G_TYPE_OBJECT, 0,
typedef struct {
- GHashTable *connections;
+ GHashTable *connections; /* uuid::connection */
+ gboolean initialized;
gulong ih_event_id;
int sc_network_wd;
GFileMonitor *hostname_monitor;
@@ -92,14 +103,6 @@ typedef struct {
static void
-connection_unmanaged_changed (NMIfcfgConnection *connection,
- GParamSpec *pspec,
- gpointer user_data)
-{
- g_signal_emit_by_name (SC_PLUGIN_IFCFG (user_data), NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
-}
-
-static void
connection_ifcfg_changed (NMIfcfgConnection *connection, gpointer user_data)
{
SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (user_data);
@@ -108,7 +111,14 @@ connection_ifcfg_changed (NMIfcfgConnection *connection, gpointer user_data)
path = nm_ifcfg_connection_get_path (connection);
g_return_if_fail (path != NULL);
- connection_new_or_changed (plugin, path, connection);
+ connection_new_or_changed (plugin, path, connection, NULL);
+}
+
+static void
+connection_removed_cb (NMSettingsConnection *obj, gpointer user_data)
+{
+ g_hash_table_remove (SC_PLUGIN_IFCFG_GET_PRIVATE (user_data)->connections,
+ nm_connection_get_uuid (NM_CONNECTION (obj)));
}
static NMIfcfgConnection *
@@ -123,17 +133,17 @@ _internal_new_connection (SCPluginIfcfg *self,
GError *local = NULL;
gboolean ignore_error = FALSE;
- if (!source) {
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "parsing %s ... ", path);
- }
+ if (!source)
+ nm_log_info (LOGD_SETTINGS, "parsing %s ... ", path);
- connection = nm_ifcfg_connection_new (path, source, &local, &ignore_error);
+ connection = nm_ifcfg_connection_new (source, path, &local, &ignore_error);
if (!connection) {
- if (!ignore_error) {
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, " error: %s",
- (local && local->message) ? local->message : "(unknown)");
- }
- g_propagate_error (error, local);
+ if (!ignore_error)
+ nm_log_warn (LOGD_SETTINGS, " %s", (local && local->message) ? local->message : "(unknown)");
+ if (local)
+ g_propagate_error (error, local);
+ else
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "(unknown)");
return NULL;
}
@@ -141,19 +151,27 @@ _internal_new_connection (SCPluginIfcfg *self,
g_assert (cid);
g_hash_table_insert (priv->connections,
- (gpointer) nm_ifcfg_connection_get_path (connection),
+ g_strdup (nm_connection_get_uuid (NM_CONNECTION (connection))),
connection);
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, " read connection '%s'", cid);
+ nm_log_info (LOGD_SETTINGS, " read connection '%s'", cid);
+ g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed_cb),
+ self);
if (nm_ifcfg_connection_get_unmanaged_spec (connection)) {
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "Ignoring connection '%s' and its "
- "device due to NM_CONTROLLED/BRIDGE/VLAN.", cid);
- } else {
- /* Wait for the connection to become unmanaged once it knows the
- * hardware IDs of its device, if/when the device gets plugged in.
- */
- g_signal_connect (G_OBJECT (connection), "notify::" NM_IFCFG_CONNECTION_UNMANAGED,
- G_CALLBACK (connection_unmanaged_changed), self);
+ const char *spec;
+ const char *device_id;
+
+ spec = nm_ifcfg_connection_get_unmanaged_spec (connection);
+ device_id = strchr (spec, ':');
+ if (device_id)
+ device_id++;
+ else
+ device_id = spec;
+ nm_log_warn (LOGD_SETTINGS, " Ignoring connection '%s' / device '%s' due to NM_CONTROLLED=no.",
+ cid, device_id);
+ } else if (nm_ifcfg_connection_get_unrecognized_spec (connection)) {
+ nm_log_warn (LOGD_SETTINGS, " Ignoring connection '%s' of unrecognized type.", cid);
}
/* watch changes of ifcfg hardlinks */
@@ -163,108 +181,118 @@ _internal_new_connection (SCPluginIfcfg *self,
return connection;
}
-static void
-read_connections (SCPluginIfcfg *plugin)
-{
- GDir *dir;
- GError *err = NULL;
-
- dir = g_dir_open (IFCFG_DIR, 0, &err);
- if (dir) {
- const char *item;
-
- while ((item = g_dir_read_name (dir))) {
- char *full_path;
-
- if (utils_should_ignore_file (item, TRUE))
- continue;
-
- full_path = g_build_filename (IFCFG_DIR, item, NULL);
- if (utils_get_ifcfg_name (full_path, TRUE))
- _internal_new_connection (plugin, full_path, NULL, NULL);
- g_free (full_path);
- }
-
- g_dir_close (dir);
- } else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Can not read directory '%s': %s", IFCFG_DIR, err->message);
- g_error_free (err);
- }
-}
-
/* Monitoring */
-/* Callback for nm_settings_connection_replace_and_commit. Report any errors
- * encountered when commiting connection settings updates. */
-static void
-commit_cb (NMSettingsConnection *connection, GError *error, gpointer unused)
-{
- if (error) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " error updating: %s",
- (error && error->message) ? error->message : "(unknown)");
- }
-}
-
static void
remove_connection (SCPluginIfcfg *self, NMIfcfgConnection *connection)
{
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (self);
- gboolean managed = FALSE;
- const char *path;
+ gboolean unmanaged, unrecognized;
g_return_if_fail (self != NULL);
g_return_if_fail (connection != NULL);
- managed = !nm_ifcfg_connection_get_unmanaged_spec (connection);
- path = nm_ifcfg_connection_get_path (connection);
+ unmanaged = !!nm_ifcfg_connection_get_unmanaged_spec (connection);
+ unrecognized = !!nm_ifcfg_connection_get_unrecognized_spec (connection);
g_object_ref (connection);
- g_hash_table_remove (priv->connections, path);
+ g_hash_table_remove (priv->connections, nm_connection_get_uuid (NM_CONNECTION (connection)));
nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection));
g_object_unref (connection);
- /* Emit unmanaged changes _after_ removing the connection */
- if (managed == FALSE)
+ /* Emit changes _after_ removing the connection */
+ if (unmanaged)
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+ if (unrecognized)
+ g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNRECOGNIZED_SPECS_CHANGED);
+}
+
+static NMIfcfgConnection *
+find_by_path (SCPluginIfcfg *self, const char *path)
+{
+ SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (self);
+ GHashTableIter iter;
+ NMIfcfgConnection *candidate = NULL;
+
+ g_return_val_if_fail (path != NULL, NULL);
+
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &candidate)) {
+ if (g_strcmp0 (path, nm_ifcfg_connection_get_path (candidate)) == 0)
+ return candidate;
+ }
+ return NULL;
+}
+
+static NMIfcfgConnection *
+find_by_uuid_from_path (SCPluginIfcfg *self, const char *path)
+{
+ SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (self);
+ char *uuid;
+
+ g_return_val_if_fail (path != NULL, NULL);
+
+ uuid = uuid_from_file (path);
+ if (uuid)
+ return g_hash_table_lookup (priv->connections, uuid);
+ else
+ return NULL;
}
static void
connection_new_or_changed (SCPluginIfcfg *self,
const char *path,
- NMIfcfgConnection *existing)
+ NMIfcfgConnection *existing,
+ char **out_old_path)
{
+ SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (self);
NMIfcfgConnection *new;
GError *error = NULL;
gboolean ignore_error = FALSE;
const char *new_unmanaged = NULL, *old_unmanaged = NULL;
+ const char *new_unrecognized = NULL, *old_unrecognized = NULL;
+ gboolean unmanaged_changed, unrecognized_changed;
g_return_if_fail (self != NULL);
g_return_if_fail (path != NULL);
+ if (out_old_path)
+ *out_old_path = NULL;
+
+ if (!existing) {
+ /* See if it's a rename */
+ existing = find_by_uuid_from_path (self, path);
+ if (existing) {
+ const char *old_path = nm_ifcfg_connection_get_path (existing);
+ nm_log_info (LOGD_SETTINGS, "renaming %s -> %s", old_path, path);
+ if (out_old_path)
+ *out_old_path = g_strdup (old_path);
+ nm_ifcfg_connection_set_path (existing, path);
+ }
+ }
+
if (!existing) {
- /* Completely new connection */
+ /* New connection */
new = _internal_new_connection (self, path, NULL, NULL);
if (new) {
- if (nm_ifcfg_connection_get_unmanaged_spec (new)) {
+ if (nm_ifcfg_connection_get_unmanaged_spec (new))
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
- } else {
- /* Only managed connections are announced to the settings service */
+ else if (nm_ifcfg_connection_get_unrecognized_spec (new))
+ g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNRECOGNIZED_SPECS_CHANGED);
+ else
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, new);
- }
}
return;
}
- new = (NMIfcfgConnection *) nm_ifcfg_connection_new (path, NULL, &error, &ignore_error);
+ new = (NMIfcfgConnection *) nm_ifcfg_connection_new (NULL, path, &error, &ignore_error);
if (!new) {
/* errors reading connection; remove it */
- if (!ignore_error) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " error: %s",
- (error && error->message) ? error->message : "(unknown)");
- }
+ if (!ignore_error)
+ nm_log_warn (LOGD_SETTINGS, " %s", (error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "removed %s.", path);
+ nm_log_info (LOGD_SETTINGS, "removed %s.", path);
remove_connection (self, existing);
return;
}
@@ -273,57 +301,71 @@ connection_new_or_changed (SCPluginIfcfg *self,
old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (existing));
new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (new));
-
- /* When interface is unmanaged or the connections and unmanaged specs are the same
- * there's nothing to do */
- if ( (g_strcmp0 (old_unmanaged, new_unmanaged) == 0 && new_unmanaged != NULL)
- || ( nm_connection_compare (NM_CONNECTION (existing),
- NM_CONNECTION (new),
- NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
- NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)
- && g_strcmp0 (old_unmanaged, new_unmanaged) == 0)) {
-
+ unmanaged_changed = g_strcmp0 (old_unmanaged, new_unmanaged);
+
+ old_unrecognized = nm_ifcfg_connection_get_unrecognized_spec (NM_IFCFG_CONNECTION (existing));
+ new_unrecognized = nm_ifcfg_connection_get_unrecognized_spec (NM_IFCFG_CONNECTION (new));
+ unrecognized_changed = g_strcmp0 (old_unrecognized, new_unrecognized);
+
+ if ( !unmanaged_changed
+ && !unrecognized_changed
+ && nm_connection_compare (NM_CONNECTION (existing),
+ NM_CONNECTION (new),
+ NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
+ NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) {
g_object_unref (new);
return;
}
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path);
+ nm_log_info (LOGD_SETTINGS, "updating %s", path);
+ g_object_set (existing,
+ NM_IFCFG_CONNECTION_UNMANAGED_SPEC, new_unmanaged,
+ NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC, new_unrecognized,
+ NULL);
- if (new_unmanaged) {
- if (!old_unmanaged) {
+ if (new_unmanaged || new_unrecognized) {
+ if (!old_unmanaged && !old_unrecognized) {
+ g_object_ref (existing);
/* Unexport the connection by telling the settings service it's
- * been removed, and notify the settings service by signalling that
- * unmanaged specs have changed.
+ * been removed.
*/
nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (existing));
/* Remove the path so that claim_connection() doesn't complain later when
* interface gets managed and connection is re-added. */
nm_connection_set_path (NM_CONNECTION (existing), NULL);
- g_object_set (existing, NM_IFCFG_CONNECTION_UNMANAGED, new_unmanaged, NULL);
- g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+ /* signal_remove() will end up removing the connection from our hash,
+ * so add it back now.
+ */
+ g_hash_table_insert (priv->connections,
+ g_strdup (nm_connection_get_uuid (NM_CONNECTION (existing))),
+ existing);
}
} else {
- if (old_unmanaged) { /* now managed */
- const char *cid;
+ const char *cid = nm_connection_get_id (NM_CONNECTION (new));
- cid = nm_connection_get_id (NM_CONNECTION (new));
- g_assert (cid);
-
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "Managing connection '%s' and its "
- "device because NM_CONTROLLED was true.", cid);
+ if (old_unmanaged /* && !new_unmanaged */) {
+ nm_log_info (LOGD_SETTINGS, "Managing connection '%s' and its device because NM_CONTROLLED was true.", cid);
+ g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, existing);
+ } else if (old_unrecognized /* && !new_unrecognized */) {
+ nm_log_info (LOGD_SETTINGS, "Managing connection '%s' because it is now a recognized type.", cid);
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, existing);
}
- nm_settings_connection_replace_and_commit (NM_SETTINGS_CONNECTION (existing),
- NM_CONNECTION (new),
- commit_cb, NULL);
-
- /* Update unmanaged status */
- g_object_set (existing, NM_IFCFG_CONNECTION_UNMANAGED, new_unmanaged, NULL);
- g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+ if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (existing),
+ NM_CONNECTION (new),
+ FALSE, /* don't set Unsaved */
+ &error)) {
+ /* Shouldn't ever get here as 'new' was verified by the reader already */
+ g_assert_no_error (error);
+ }
}
g_object_unref (new);
+
+ if (unmanaged_changed)
+ g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+ if (unrecognized_changed)
+ g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNRECOGNIZED_SPECS_CHANGED);
}
static void
@@ -334,8 +376,7 @@ ifcfg_dir_changed (GFileMonitor *monitor,
gpointer user_data)
{
SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (user_data);
- SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
- char *path, *name;
+ char *path, *base, *ifcfg_path;
NMIfcfgConnection *connection;
path = g_file_get_path (file);
@@ -344,27 +385,34 @@ ifcfg_dir_changed (GFileMonitor *monitor,
return;
}
- /* Given any ifcfg, keys, or routes file, get the ifcfg file path */
- name = utils_get_ifcfg_path (path);
- g_free (path);
- if (name) {
- connection = g_hash_table_lookup (priv->connections, name);
+ base = g_file_get_basename (file);
+ if (utils_is_ifcfg_alias_file (base, NULL)) {
+ /* Alias file changed. Get the base ifcfg file from it */
+ ifcfg_path = utils_get_ifcfg_from_alias (path);
+ } else {
+ /* Given any ifcfg, keys, or routes file, get the ifcfg file path */
+ ifcfg_path = utils_get_ifcfg_path (path);
+ }
+ if (ifcfg_path) {
+ connection = find_by_path (plugin, ifcfg_path);
switch (event_type) {
case G_FILE_MONITOR_EVENT_DELETED:
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "removed %s.", name);
+ nm_log_info (LOGD_SETTINGS, "removed %s.", ifcfg_path);
if (connection)
remove_connection (plugin, connection);
break;
case G_FILE_MONITOR_EVENT_CREATED:
case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
/* Update or new */
- connection_new_or_changed (plugin, name, connection);
+ connection_new_or_changed (plugin, ifcfg_path, connection, NULL);
break;
default:
break;
}
- g_free (name);
+ g_free (ifcfg_path);
}
+ g_free (path);
+ g_free (base);
}
static void
@@ -374,8 +422,6 @@ setup_ifcfg_monitoring (SCPluginIfcfg *plugin)
GFile *file;
GFileMonitor *monitor;
- priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
-
file = g_file_new_for_path (IFCFG_DIR "/");
monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
g_object_unref (file);
@@ -387,6 +433,70 @@ setup_ifcfg_monitoring (SCPluginIfcfg *plugin)
}
}
+static void
+read_connections (SCPluginIfcfg *plugin)
+{
+ SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
+ GDir *dir;
+ GError *err = NULL;
+ const char *item;
+ GHashTable *oldconns;
+ GHashTableIter iter;
+ gpointer key, value;
+ NMIfcfgConnection *connection;
+
+ dir = g_dir_open (IFCFG_DIR, 0, &err);
+ if (!dir) {
+ nm_log_warn (LOGD_SETTINGS, "Could not read directory '%s': %s", IFCFG_DIR, err->message);
+ g_error_free (err);
+ return;
+ }
+
+ oldconns = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, NULL, &value)) {
+ const char *ifcfg_path = nm_ifcfg_connection_get_path (value);
+ if (ifcfg_path)
+ g_hash_table_insert (oldconns, g_strdup (ifcfg_path), value);
+ }
+
+ while ((item = g_dir_read_name (dir))) {
+ char *full_path, *old_path;
+
+ if (utils_should_ignore_file (item, TRUE))
+ continue;
+ if (utils_is_ifcfg_alias_file (item, NULL))
+ continue;
+
+ full_path = g_build_filename (IFCFG_DIR, item, NULL);
+ if (!utils_get_ifcfg_name (full_path, TRUE))
+ goto next;
+
+ connection = g_hash_table_lookup (oldconns, full_path);
+ g_hash_table_remove (oldconns, full_path);
+ connection_new_or_changed (plugin, full_path, connection, &old_path);
+
+ if (old_path) {
+ g_hash_table_remove (oldconns, old_path);
+ g_free (old_path);
+ }
+
+ next:
+ g_free (full_path);
+ }
+
+ g_dir_close (dir);
+
+ g_hash_table_iter_init (&iter, oldconns);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ nm_log_info (LOGD_SETTINGS, "removed %s.", (char *)key);
+ g_hash_table_iter_remove (&iter);
+ remove_connection (plugin, value);
+ }
+
+ g_hash_table_destroy (oldconns);
+}
+
static GSList *
get_connections (NMSystemConfigInterface *config)
{
@@ -394,75 +504,123 @@ get_connections (NMSystemConfigInterface *config)
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
GSList *list = NULL;
GHashTableIter iter;
- gpointer value;
+ NMIfcfgConnection *connection;
- if (!priv->connections) {
- setup_ifcfg_monitoring (plugin);
+ if (!priv->initialized) {
+ if (nm_config_get_monitor_connection_files (nm_config_get ()))
+ setup_ifcfg_monitoring (plugin);
read_connections (plugin);
+ priv->initialized = TRUE;
}
g_hash_table_iter_init (&iter, priv->connections);
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- NMIfcfgConnection *exported = NM_IFCFG_CONNECTION (value);
-
- if (!nm_ifcfg_connection_get_unmanaged_spec (exported))
- list = g_slist_prepend (list, value);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &connection)) {
+ if ( !nm_ifcfg_connection_get_unmanaged_spec (connection)
+ && !nm_ifcfg_connection_get_unrecognized_spec (connection))
+ list = g_slist_prepend (list, connection);
}
return list;
}
-static void
-check_unmanaged (gpointer key, gpointer data, gpointer user_data)
+static gboolean
+load_connection (NMSystemConfigInterface *config,
+ const char *filename)
{
- GSList **list = (GSList **) user_data;
- NMIfcfgConnection *connection = NM_IFCFG_CONNECTION (data);
- const char *unmanaged_spec;
- GSList *iter;
+ SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (config);
+ NMIfcfgConnection *connection;
+ int dir_len = strlen (IFCFG_DIR);
- unmanaged_spec = nm_ifcfg_connection_get_unmanaged_spec (connection);
- if (!unmanaged_spec)
- return;
+ if ( strncmp (filename, IFCFG_DIR, dir_len) != 0
+ || filename[dir_len] != '/'
+ || strchr (filename + dir_len + 1, '/') != NULL)
+ return FALSE;
- /* Just return if the unmanaged spec is already in the list */
- for (iter = *list; iter; iter = g_slist_next (iter)) {
- if (!strcmp ((char *) iter->data, unmanaged_spec))
- return;
- }
+ if (utils_should_ignore_file (filename + dir_len + 1, TRUE))
+ return FALSE;
- *list = g_slist_prepend (*list, g_strdup (unmanaged_spec));
+ connection = find_by_path (plugin, filename);
+ connection_new_or_changed (plugin, filename, connection, NULL);
+ if (!connection)
+ connection = find_by_path (plugin, filename);
+
+ return (connection != NULL);
}
-static GSList *
-get_unmanaged_specs (NMSystemConfigInterface *config)
+static void
+reload_connections (NMSystemConfigInterface *config)
{
SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (config);
+
+ read_connections (plugin);
+}
+
+static GSList *
+get_unhandled_specs (NMSystemConfigInterface *config,
+ const char *property)
+{
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (config);
- GSList *list = NULL;
+ GSList *list = NULL, *list_iter;
+ GHashTableIter iter;
+ gpointer connection;
+ char *spec;
+ gboolean found;
- if (!priv->connections) {
- setup_ifcfg_monitoring (plugin);
- read_connections (plugin);
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, NULL, &connection)) {
+ g_object_get (connection, property, &spec, NULL);
+ if (spec) {
+ /* Ignore duplicates */
+ for (list_iter = list, found = FALSE; list_iter; list_iter = g_slist_next (list_iter)) {
+ if (g_str_equal (list_iter->data, spec)) {
+ found = TRUE;
+ break;
+ }
+ }
+ if (found)
+ g_free (spec);
+ else
+ list = g_slist_prepend (list, spec);
+ }
}
-
- g_hash_table_foreach (priv->connections, check_unmanaged, &list);
return list;
}
+static GSList *
+get_unmanaged_specs (NMSystemConfigInterface *config)
+{
+ return get_unhandled_specs (config, NM_IFCFG_CONNECTION_UNMANAGED_SPEC);
+}
+
+static GSList *
+get_unrecognized_specs (NMSystemConfigInterface *config)
+{
+ return get_unhandled_specs (config, NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC);
+}
+
static NMSettingsConnection *
add_connection (NMSystemConfigInterface *config,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error)
{
SCPluginIfcfg *self = SC_PLUGIN_IFCFG (config);
NMIfcfgConnection *added = NULL;
char *path = NULL;
- /* Write it out first, then add the connection to our internal list */
- if (writer_new_connection (connection, IFCFG_DIR, &path, error)) {
- added = _internal_new_connection (self, path, connection, error);
- g_free (path);
+ /* Ensure we reject attempts to add the connection long before we're
+ * asked to write it to disk.
+ */
+ if (!writer_can_write_connection (connection, error))
+ return NULL;
+
+ if (save_to_disk) {
+ if (!writer_new_connection (connection, IFCFG_DIR, &path, error))
+ return NULL;
}
+
+ added = _internal_new_connection (self, path, connection, error);
+ g_free (path);
return (NMSettingsConnection *) added;
}
@@ -481,9 +639,9 @@ plugin_get_hostname (SCPluginIfcfg *plugin)
return hostname;
}
- network = svNewFile (SC_NETWORK_FILE);
+ network = svOpenFile (SC_NETWORK_FILE, NULL);
if (!network) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Could not get hostname: failed to read " SC_NETWORK_FILE);
+ nm_log_warn (LOGD_SETTINGS, "Could not get hostname: failed to read " SC_NETWORK_FILE);
return NULL;
}
@@ -508,20 +666,45 @@ plugin_set_hostname (SCPluginIfcfg *plugin, const char *hostname)
{
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
shvarFile *network;
-
- if (!g_file_set_contents (HOSTNAME_FILE, hostname, -1, NULL)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Could not save hostname: failed to create/open " HOSTNAME_FILE);
+ char *hostname_eol;
+ gboolean ret;
+#if HAVE_SELINUX
+ security_context_t se_ctx_prev, se_ctx = NULL;
+ struct stat file_stat = { .st_mode = 0 };
+
+ /* Get default context for HOSTNAME_FILE and set it for fscreate */
+ stat (HOSTNAME_FILE, &file_stat);
+ matchpathcon (HOSTNAME_FILE, file_stat.st_mode, &se_ctx);
+ matchpathcon_fini ();
+ getfscreatecon (&se_ctx_prev);
+ setfscreatecon (se_ctx);
+#endif
+
+ hostname_eol = g_strdup_printf ("%s\n", hostname);
+ ret = g_file_set_contents (HOSTNAME_FILE, hostname_eol, -1, NULL);
+
+#if HAVE_SELINUX
+ /* Restore previous context and cleanup */
+ setfscreatecon (se_ctx_prev);
+ freecon (se_ctx);
+ freecon (se_ctx_prev);
+#endif
+
+ if (!ret) {
+ nm_log_warn (LOGD_SETTINGS, "Could not save hostname: failed to create/open " HOSTNAME_FILE);
+ g_free (hostname_eol);
return FALSE;
}
g_free (priv->hostname);
priv->hostname = g_strdup (hostname);
+ g_free (hostname_eol);
/* Remove "HOSTNAME" from SC_NETWORK_FILE, if present */
- network = svNewFile (SC_NETWORK_FILE);
+ network = svOpenFile (SC_NETWORK_FILE, NULL);
if (network) {
svSetValue (network, "HOSTNAME", NULL, FALSE);
- svWriteFile (network, 0644);
+ svWriteFile (network, 0644, NULL);
svCloseFile (network);
}
@@ -579,7 +762,6 @@ impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
const char **out_path,
GError **error)
{
- SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
NMIfcfgConnection *connection;
NMSettingConnection *s_con;
const char *uuid;
@@ -593,8 +775,10 @@ impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
return FALSE;
}
- connection = g_hash_table_lookup (priv->connections, in_ifcfg);
- if (!connection || nm_ifcfg_connection_get_unmanaged_spec (connection)) {
+ connection = find_by_path (plugin, in_ifcfg);
+ if ( !connection
+ || nm_ifcfg_connection_get_unmanaged_spec (connection)
+ || nm_ifcfg_connection_get_unrecognized_spec (connection)) {
g_set_error (error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INVALID_CONNECTION,
@@ -650,6 +834,8 @@ sc_plugin_ifcfg_init (SCPluginIfcfg *plugin)
GFile *file;
GFileMonitor *monitor;
+ priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
/* We watch SC_NETWORK_FILE via NMInotifyHelper (which doesn't track file creation but
* *does* track modifications made via other hard links), since we expect it to always
* exist. But we watch HOSTNAME_FILE via GFileMonitor (which has the opposite
@@ -674,8 +860,7 @@ sc_plugin_ifcfg_init (SCPluginIfcfg *plugin)
priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
if (!priv->bus) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Couldn't connect to D-Bus: %s",
- error->message);
+ nm_log_warn (LOGD_SETTINGS, "Couldn't connect to D-Bus: %s", error->message);
g_clear_error (&error);
} else {
DBusConnection *tmp;
@@ -696,11 +881,10 @@ sc_plugin_ifcfg_init (SCPluginIfcfg *plugin)
G_TYPE_INVALID,
G_TYPE_UINT, &result,
G_TYPE_INVALID)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Couldn't acquire D-Bus service: %s",
- error->message);
+ nm_log_warn (LOGD_SETTINGS, "Couldn't acquire D-Bus service: %s", error->message);
g_clear_error (&error);
} else if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Couldn't acquire ifcfgrh1 D-Bus service (already taken)");
+ nm_log_warn (LOGD_SETTINGS, "Couldn't acquire ifcfgrh1 D-Bus service (already taken)");
} else
success = TRUE;
}
@@ -745,8 +929,10 @@ dispose (GObject *object)
g_free (priv->hostname);
- if (priv->connections)
+ if (priv->connections) {
g_hash_table_destroy (priv->connections);
+ priv->connections = NULL;
+ }
if (priv->ifcfg_monitor) {
if (priv->ifcfg_monitor_id)
@@ -760,12 +946,6 @@ dispose (GObject *object)
}
static void
-finalize (GObject *object)
-{
- G_OBJECT_CLASS (sc_plugin_ifcfg_parent_class)->finalize (object);
-}
-
-static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
@@ -817,7 +997,6 @@ sc_plugin_ifcfg_class_init (SCPluginIfcfgClass *req_class)
g_type_class_add_private (req_class, sizeof (SCPluginIfcfgPrivate));
object_class->dispose = dispose;
- object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
@@ -847,26 +1026,27 @@ system_config_interface_init (NMSystemConfigInterface *system_config_interface_c
/* interface implementation */
system_config_interface_class->get_connections = get_connections;
system_config_interface_class->add_connection = add_connection;
+ system_config_interface_class->load_connection = load_connection;
+ system_config_interface_class->reload_connections = reload_connections;
system_config_interface_class->get_unmanaged_specs = get_unmanaged_specs;
+ system_config_interface_class->get_unrecognized_specs = get_unrecognized_specs;
system_config_interface_class->init = init;
}
G_MODULE_EXPORT GObject *
-nm_system_config_factory (const char *config_file)
+nm_system_config_factory (void)
{
static SCPluginIfcfg *singleton = NULL;
SCPluginIfcfgPrivate *priv;
if (!singleton) {
singleton = SC_PLUGIN_IFCFG (g_object_new (SC_TYPE_PLUGIN_IFCFG, NULL));
- if (singleton) {
- priv = SC_PLUGIN_IFCFG_GET_PRIVATE (singleton);
- if (priv->bus)
- dbus_g_connection_register_g_object (priv->bus,
- DBUS_OBJECT_PATH,
- G_OBJECT (singleton));
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "Acquired D-Bus service %s", DBUS_SERVICE_NAME);
- }
+ priv = SC_PLUGIN_IFCFG_GET_PRIVATE (singleton);
+ if (priv->bus)
+ dbus_g_connection_register_g_object (priv->bus,
+ DBUS_OBJECT_PATH,
+ G_OBJECT (singleton));
+ nm_log_info (LOGD_SETTINGS, "Acquired D-Bus service %s", DBUS_SERVICE_NAME);
} else
g_object_ref (singleton);
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index a40bf21e6..7a616707e 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2012 Red Hat, Inc.
+ * Copyright (C) 2008 - 2013 Red Hat, Inc.
*/
#include <config.h>
@@ -44,12 +44,19 @@
#include <nm-setting-wireless.h>
#include <nm-setting-8021x.h>
#include <nm-setting-bond.h>
+#include <nm-setting-team.h>
+#include <nm-setting-team-port.h>
#include <nm-setting-bridge.h>
#include <nm-setting-bridge-port.h>
+#include <nm-setting-dcb.h>
+#include <nm-setting-generic.h>
+#include <nm-utils-private.h>
#include <nm-utils.h>
-#include "wifi-utils.h"
+#include "nm-platform.h"
#include "nm-posix-signals.h"
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
#include "common.h"
#include "shvar.h"
@@ -57,11 +64,7 @@
#include "reader.h"
-#define PLUGIN_PRINT(pname, fmt, args...) \
- { g_message (" " pname ": " fmt, ##args); }
-
-#define PLUGIN_WARN(pname, fmt, args...) \
- { g_warning (" " pname ": " fmt, ##args); }
+#define PARSE_WARNING(msg...) nm_log_warn (LOGD_SETTINGS, " " msg)
static gboolean
get_int (const char *str, int *value)
@@ -71,7 +74,7 @@ get_int (const char *str, int *value)
errno = 0;
tmp = strtol (str, &e, 0);
- if (errno || *e != '\0')
+ if (errno || *e != '\0' || tmp > G_MAXINT || tmp < G_MININT)
return FALSE;
*value = (int) tmp;
return TRUE;
@@ -155,6 +158,17 @@ make_connection_setting (const char *file,
NULL);
g_free (uuid);
+ value = svGetValue (ifcfg, "DEVICE", FALSE);
+ if (value) {
+ if (nm_utils_iface_valid_name (value)) {
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, value,
+ NULL);
+ } else
+ PARSE_WARNING ("invalid DEVICE name '%s'", value);
+ g_free (value);
+ }
+
/* Missing ONBOOT is treated as "ONBOOT=true" by the old network service */
g_object_set (s_con, NM_SETTING_CONNECTION_AUTOCONNECT,
svTrueValue (ifcfg, "ONBOOT", TRUE),
@@ -168,7 +182,7 @@ make_connection_setting (const char *file,
for (iter = items; iter && *iter; iter++) {
if (strlen (*iter)) {
if (!nm_setting_connection_add_permission (s_con, "user", *iter, NULL))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid USERS item '%s'", *iter);
+ PARSE_WARNING ("invalid USERS item '%s'", *iter);
}
}
g_free (value);
@@ -192,8 +206,7 @@ make_connection_setting (const char *file,
for (iter = items; iter && *iter; iter++) {
if (strlen (*iter)) {
if (!nm_setting_connection_add_secondary (s_con, *iter))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME,
- " warning: secondary connection UUID '%s' already added", *iter);
+ PARSE_WARNING ("secondary connection UUID '%s' already added", *iter);
}
}
g_free (value);
@@ -202,18 +215,31 @@ make_connection_setting (const char *file,
value = svGetValue (ifcfg, "BRIDGE", FALSE);
if (value) {
- const char *bridge;
+ const char *old_value;
- if ((bridge = nm_setting_connection_get_master (s_con))) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME,
- " warning: Already configured as slave of %s. "
- "Ignoring BRIDGE=\"%s\"", bridge, value);
- g_free (value);
+ if ((old_value = nm_setting_connection_get_master (s_con))) {
+ PARSE_WARNING ("Already configured as slave of %s. Ignoring BRIDGE=\"%s\"",
+ old_value, value);
+ } else {
+ g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
+ g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE,
+ NM_SETTING_BRIDGE_SETTING_NAME, NULL);
}
+ g_free (value);
+ }
- g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
- g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE,
- NM_SETTING_BRIDGE_SETTING_NAME, NULL);
+ value = svGetValue (ifcfg, "GATEWAY_PING_TIMEOUT", FALSE);
+ if (value) {
+ long int tmp;
+ guint32 timeout;
+
+ errno = 0;
+ tmp = strtol (value, NULL, 10);
+ if (errno == 0 && tmp >= 0 && tmp < G_MAXINT32) {
+ timeout = (guint32) tmp;
+ g_object_set (s_con, NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, timeout, NULL);
+ } else
+ PARSE_WARNING ("invalid GATEWAY_PING_TIMEOUT time");
g_free (value);
}
@@ -229,8 +255,8 @@ read_mac_address (shvarFile *ifcfg, const char *key, int type,
g_return_val_if_fail (ifcfg != NULL, FALSE);
g_return_val_if_fail (array != NULL, FALSE);
g_return_val_if_fail (*array == NULL, FALSE);
- g_return_val_if_fail (error != NULL, FALSE);
- g_return_val_if_fail (*error == NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
value = svGetValue (ifcfg, key, FALSE);
if (!value || !strlen (value)) {
@@ -276,8 +302,7 @@ match_iscsiadm_tag (const char *line, const char *tag, gboolean *skip)
p = strchr (line, '=');
if (!p) {
- g_warning ("%s: malformed iscsiadm record: no = in '%s'.",
- __func__, line);
+ PARSE_WARNING ("malformed iscsiadm record: no = in '%s'.", line);
*skip = TRUE;
return NULL;
}
@@ -308,10 +333,10 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
GByteArray *ifcfg_mac = NULL;
char **lines = NULL, **iter;
const char *method = NULL;
- struct in_addr ipaddr;
- struct in_addr gateway;
- struct in_addr dns1;
- struct in_addr dns2;
+ guint32 ipaddr;
+ guint32 gateway;
+ guint32 dns1;
+ guint32 dns2;
guint32 prefix = 0;
g_return_val_if_fail (s_ip4 != NULL, FALSE);
@@ -355,14 +380,14 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
if (!g_ascii_strcasecmp (*iter, "# BEGIN RECORD")) {
if (in_record) {
- g_warning ("%s: malformed iscsiadm record: already parsing record.", __func__);
+ PARSE_WARNING ("malformed iscsiadm record: already parsing record.");
skip = TRUE;
}
} else if (!g_ascii_strcasecmp (*iter, "# END RECORD")) {
if (!skip && hwaddr_matched) {
/* Record is good; fill IP4 config with its info */
if (!method) {
- g_warning ("%s: malformed iscsiadm record: missing BOOTPROTO.", __func__);
+ PARSE_WARNING ("malformed iscsiadm record: missing BOOTPROTO.");
goto done;
}
@@ -371,23 +396,23 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
NMIP4Address *addr;
- if (!ipaddr.s_addr || !prefix) {
- g_warning ("%s: malformed iscsiadm record: BOOTPROTO=static "
- "but missing IP address or prefix.", __func__);
+ if (!ipaddr || !prefix) {
+ PARSE_WARNING ("malformed iscsiadm record: BOOTPROTO=static "
+ "but missing IP address or prefix.");
goto done;
}
addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ipaddr.s_addr);
+ nm_ip4_address_set_address (addr, ipaddr);
nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gateway.s_addr);
+ nm_ip4_address_set_gateway (addr, gateway);
nm_setting_ip4_config_add_address (s_ip4, addr);
nm_ip4_address_unref (addr);
- if (dns1.s_addr)
- nm_setting_ip4_config_add_dns (s_ip4, dns1.s_addr);
- if (dns2.s_addr)
- nm_setting_ip4_config_add_dns (s_ip4, dns2.s_addr);
+ if (dns1)
+ nm_setting_ip4_config_add_dns (s_ip4, dns1);
+ if (dns2)
+ nm_setting_ip4_config_add_dns (s_ip4, dns2);
// FIXME: DNS search domains?
}
@@ -413,7 +438,7 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
ibft_mac = ether_aton (p);
if (!ibft_mac) {
- g_warning ("%s: malformed iscsiadm record: invalid hwaddress.", __func__);
+ PARSE_WARNING ("malformed iscsiadm record: invalid hwaddress.");
skip = TRUE;
continue;
}
@@ -435,8 +460,7 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
else if (!g_ascii_strcasecmp (p, "static"))
method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
else {
- g_warning ("%s: malformed iscsiadm record: unknown BOOTPROTO '%s'.",
- __func__, p);
+ PARSE_WARNING ("malformed iscsiadm record: unknown BOOTPROTO '%s'.", p);
skip = TRUE;
continue;
}
@@ -444,30 +468,27 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_IPADDR_TAG, &skip))) {
if (inet_pton (AF_INET, p, &ipaddr) < 1) {
- g_warning ("%s: malformed iscsiadm record: invalid IP address '%s'.",
- __func__, p);
+ PARSE_WARNING ("malformed iscsiadm record: invalid IP address '%s'.", p);
skip = TRUE;
continue;
}
}
if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_SUBNET_TAG, &skip))) {
- struct in_addr mask;
+ guint32 mask;
if (inet_pton (AF_INET, p, &mask) < 1) {
- g_warning ("%s: malformed iscsiadm record: invalid subnet mask '%s'.",
- __func__, p);
+ PARSE_WARNING ("malformed iscsiadm record: invalid subnet mask '%s'.", p);
skip = TRUE;
continue;
}
- prefix = nm_utils_ip4_netmask_to_prefix (mask.s_addr);
+ prefix = nm_utils_ip4_netmask_to_prefix (mask);
}
if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_GATEWAY_TAG, &skip))) {
if (inet_pton (AF_INET, p, &gateway) < 1) {
- g_warning ("%s: malformed iscsiadm record: invalid IP gateway '%s'.",
- __func__, p);
+ PARSE_WARNING ("malformed iscsiadm record: invalid IP gateway '%s'.", p);
skip = TRUE;
continue;
}
@@ -475,8 +496,7 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_DNS1_TAG, &skip))) {
if (inet_pton (AF_INET, p, &dns1) < 1) {
- g_warning ("%s: malformed iscsiadm record: invalid DNS1 address '%s'.",
- __func__, p);
+ PARSE_WARNING ("malformed iscsiadm record: invalid DNS1 address '%s'.", p);
skip = TRUE;
continue;
}
@@ -484,8 +504,7 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_DNS2_TAG, &skip))) {
if (inet_pton (AF_INET, p, &dns2) < 1) {
- g_warning ("%s: malformed iscsiadm record: invalid DNS2 address '%s'.",
- __func__, p);
+ PARSE_WARNING ("malformed iscsiadm record: invalid DNS2 address '%s'.", p);
skip = TRUE;
continue;
}
@@ -503,6 +522,7 @@ done:
return success;
}
+/* Returns TRUE on missing address or valid address */
static gboolean
read_ip4_address (shvarFile *ifcfg,
const char *tag,
@@ -510,14 +530,14 @@ read_ip4_address (shvarFile *ifcfg,
GError **error)
{
char *value = NULL;
- struct in_addr ip4_addr;
+ guint32 ip4_addr;
gboolean success = FALSE;
g_return_val_if_fail (ifcfg != NULL, FALSE);
g_return_val_if_fail (tag != NULL, FALSE);
g_return_val_if_fail (out_addr != NULL, FALSE);
- g_return_val_if_fail (error != NULL, FALSE);
- g_return_val_if_fail (*error == NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
*out_addr = 0;
@@ -526,7 +546,7 @@ read_ip4_address (shvarFile *ifcfg,
return TRUE;
if (inet_pton (AF_INET, value, &ip4_addr) > 0) {
- *out_addr = ip4_addr.s_addr;
+ *out_addr = ip4_addr;
success = TRUE;
} else {
g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
@@ -536,87 +556,125 @@ read_ip4_address (shvarFile *ifcfg,
return success;
}
+/* Returns TRUE on valid address, including unspecified (::) */
static gboolean
parse_ip6_address (const char *value,
- struct in6_addr *out_addr,
- GError **error)
+ struct in6_addr *out_addr,
+ GError **error)
{
struct in6_addr ip6_addr;
- gboolean success = FALSE;
g_return_val_if_fail (value != NULL, FALSE);
g_return_val_if_fail (out_addr != NULL, FALSE);
- g_return_val_if_fail (error != NULL, FALSE);
- g_return_val_if_fail (*error == NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
*out_addr = in6addr_any;
-
- if (inet_pton (AF_INET6, value, &ip6_addr) > 0) {
- *out_addr = ip6_addr;
- success = TRUE;
- } else {
+ if (inet_pton (AF_INET6, value, &ip6_addr) <= 0) {
g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 address '%s'", value);
+ return FALSE;
}
- return success;
+
+ *out_addr = ip6_addr;
+ return TRUE;
+}
+
+static char *
+get_numbered_tag (char *tag_name, int which)
+{
+ if (which == -1)
+ return g_strdup (tag_name);
+ return g_strdup_printf ("%s%u", tag_name, which);
+}
+
+static gboolean
+is_any_ip4_address_defined (shvarFile *ifcfg)
+{
+ int i;
+
+ for (i = -1; i <= 2; i++) {
+ char *tag;
+ char *value;
+
+ tag = get_numbered_tag ("IPADDR", i);
+ value = svGetValue (ifcfg, tag, FALSE);
+ g_free (tag);
+ if (value) {
+ g_free (value);
+ return TRUE;
+ }
+
+ tag = get_numbered_tag ("PREFIX", i);
+ value = svGetValue (ifcfg, tag, FALSE);
+ g_free(tag);
+ if (value) {
+ g_free (value);
+ return TRUE;
+ }
+
+ tag = get_numbered_tag ("NETMASK", i);
+ value = svGetValue (ifcfg, tag, FALSE);
+ g_free(tag);
+ if (value) {
+ g_free (value);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-static NMIP4Address *
+/* Returns TRUE on missing address or valid address */
+static gboolean
read_full_ip4_address (shvarFile *ifcfg,
const char *network_file,
gint32 which,
+ NMIP4Address *addr,
GError **error)
{
- NMIP4Address *addr;
char *ip_tag, *prefix_tag, *netmask_tag, *gw_tag;
guint32 tmp;
gboolean success = FALSE;
shvarFile *network_ifcfg;
char *value;
- g_return_val_if_fail (which >= -1, NULL);
- g_return_val_if_fail (ifcfg != NULL, NULL);
- g_return_val_if_fail (network_file != NULL, NULL);
-
- addr = nm_ip4_address_new ();
- if (which == -1) {
- ip_tag = g_strdup ("IPADDR");
- prefix_tag = g_strdup ("PREFIX");
- netmask_tag = g_strdup ("NETMASK");
- gw_tag = g_strdup ("GATEWAY");
- } else {
- ip_tag = g_strdup_printf ("IPADDR%u", which);
- prefix_tag = g_strdup_printf ("PREFIX%u", which);
- netmask_tag = g_strdup_printf ("NETMASK%u", which);
- gw_tag = g_strdup_printf ("GATEWAY%u", which);
- }
+ g_return_val_if_fail (which >= -1, FALSE);
+ g_return_val_if_fail (ifcfg != NULL, FALSE);
+ g_return_val_if_fail (network_file != NULL, FALSE);
+ g_return_val_if_fail (addr != NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
+
+ ip_tag = get_numbered_tag ("IPADDR", which);
+ prefix_tag = get_numbered_tag ("PREFIX", which);
+ netmask_tag = get_numbered_tag ("NETMASK", which);
+ gw_tag = get_numbered_tag ("GATEWAY", which);
/* IP address */
if (!read_ip4_address (ifcfg, ip_tag, &tmp, error))
- goto error;
- if (!tmp) {
- nm_ip4_address_unref (addr);
- addr = NULL;
- success = TRUE; /* done */
- goto error;
+ goto done;
+ if (tmp)
+ nm_ip4_address_set_address (addr, tmp);
+ else if (!nm_ip4_address_get_address (addr)) {
+ success = TRUE;
+ goto done;
}
- nm_ip4_address_set_address (addr, tmp);
/* Gateway */
if (!read_ip4_address (ifcfg, gw_tag, &tmp, error))
- goto error;
+ goto done;
if (tmp)
nm_ip4_address_set_gateway (addr, tmp);
else {
gboolean read_success;
/* If no gateway in the ifcfg, try /etc/sysconfig/network instead */
- network_ifcfg = svNewFile (network_file);
+ network_ifcfg = svOpenFile (network_file, NULL);
if (network_ifcfg) {
read_success = read_ip4_address (network_ifcfg, "GATEWAY", &tmp, error);
svCloseFile (network_ifcfg);
if (!read_success)
- goto error;
+ goto done;
nm_ip4_address_set_gateway (addr, tmp);
}
}
@@ -632,7 +690,7 @@ read_full_ip4_address (shvarFile *ifcfg,
g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP4 prefix '%s'", value);
g_free (value);
- goto error;
+ goto done;
}
nm_ip4_address_set_prefix (addr, (guint32) prefix);
g_free (value);
@@ -641,7 +699,7 @@ read_full_ip4_address (shvarFile *ifcfg,
/* Fall back to NETMASK if no PREFIX was specified */
if (!nm_ip4_address_get_prefix (addr)) {
if (!read_ip4_address (ifcfg, netmask_tag, &tmp, error))
- goto error;
+ goto done;
if (tmp)
nm_ip4_address_set_prefix (addr, nm_utils_ip4_netmask_to_prefix (tmp));
}
@@ -654,8 +712,7 @@ read_full_ip4_address (shvarFile *ifcfg,
nm_ip4_address_set_prefix (addr, prefix);
value = svGetValue (ifcfg, ip_tag, FALSE);
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: missing %s, assuming %s/%u",
- prefix_tag, value, prefix);
+ PARSE_WARNING ("missing %s, assuming %s/%u", prefix_tag, value, prefix);
g_free (value);
}
@@ -664,28 +721,26 @@ read_full_ip4_address (shvarFile *ifcfg,
g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing or invalid IP4 prefix '%d'",
nm_ip4_address_get_prefix (addr));
- goto error;
+ goto done;
}
success = TRUE;
-error:
- if (!success) {
- nm_ip4_address_unref (addr);
- addr = NULL;
- }
-
+done:
g_free (ip_tag);
g_free (prefix_tag);
g_free (netmask_tag);
g_free (gw_tag);
- return addr;
+
+ return success;
}
-static NMIP4Route *
+/* Returns TRUE on missing route or valid route */
+static gboolean
read_one_ip4_route (shvarFile *ifcfg,
const char *network_file,
guint32 which,
+ NMIP4Route **out_route,
GError **error)
{
NMIP4Route *route;
@@ -693,8 +748,12 @@ read_one_ip4_route (shvarFile *ifcfg,
guint32 tmp;
gboolean success = FALSE;
- g_return_val_if_fail (ifcfg != NULL, NULL);
- g_return_val_if_fail (network_file != NULL, NULL);
+ g_return_val_if_fail (ifcfg != NULL, FALSE);
+ g_return_val_if_fail (network_file != NULL, FALSE);
+ g_return_val_if_fail (out_route != NULL, FALSE);
+ g_return_val_if_fail (*out_route == NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
route = nm_ip4_route_new ();
@@ -713,7 +772,7 @@ read_one_ip4_route (shvarFile *ifcfg,
if (!val) {
nm_ip4_route_unref (route);
route = NULL;
- success = TRUE; /* done */
+ success = TRUE; /* missing route = success */
goto out;
}
g_free (val);
@@ -758,19 +817,18 @@ read_one_ip4_route (shvarFile *ifcfg,
g_free (value);
}
+ *out_route = route;
success = TRUE;
out:
- if (!success) {
+ if (!success && route)
nm_ip4_route_unref (route);
- route = NULL;
- }
g_free (ip_tag);
g_free (netmask_tag);
g_free (gw_tag);
g_free (metric_tag);
- return route;
+ return success;
}
static gboolean
@@ -782,8 +840,8 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
GRegex *regex_to1, *regex_to2, *regex_via, *regex_metric;
GMatchInfo *match_info;
NMIP4Route *route;
- struct in_addr ip4_addr;
- char *dest = NULL, *prefix = NULL, *next_hop = NULL, *metric = NULL;
+ guint32 ip4_addr;
+ char *dest = NULL, *prefix = NULL, *metric = NULL;
long int prefix_int, metric_int;
gboolean success = FALSE;
@@ -797,16 +855,13 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_return_val_if_fail (filename != NULL, FALSE);
g_return_val_if_fail (s_ip4 != NULL, FALSE);
- g_return_val_if_fail (error != NULL, FALSE);
- g_return_val_if_fail (*error == NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
/* Read the route file */
- if (!g_file_get_contents (filename, &contents, &len, NULL))
- return FALSE;
-
- if (len == 0) {
+ if (!g_file_get_contents (filename, &contents, &len, NULL) || !len) {
g_free (contents);
- return FALSE;
+ return TRUE; /* missing/empty = success */
}
/* Create regexes for pieces to be matched */
@@ -847,7 +902,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_free (dest);
goto error;
}
- nm_ip4_route_set_dest (route, ip4_addr.s_addr);
+ nm_ip4_route_set_dest (route, ip4_addr);
g_free (dest);
/* Prefix - is optional; 32 if missing */
@@ -869,22 +924,23 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
/* Next hop */
g_regex_match (regex_via, *iter, 0, &match_info);
- if (!g_match_info_matches (match_info)) {
- g_match_info_free (match_info);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Missing IP4 route gateway address in record: '%s'", *iter);
- goto error;
- }
- next_hop = g_match_info_fetch (match_info, 1);
- g_match_info_free (match_info);
- if (inet_pton (AF_INET, next_hop, &ip4_addr) != 1) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid IP4 route gateway address '%s'", next_hop);
+ if (g_match_info_matches (match_info)) {
+ char *next_hop = g_match_info_fetch (match_info, 1);
+ if (inet_pton (AF_INET, next_hop, &ip4_addr) != 1) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Invalid IP4 route gateway address '%s'",
+ next_hop);
+ g_match_info_free (match_info);
+ g_free (next_hop);
+ goto error;
+ }
g_free (next_hop);
- goto error;
+ } else {
+ /* we don't make distinction between missing GATEWAY IP and 0.0.0.0 */
+ ip4_addr = 0;
}
- nm_ip4_route_set_next_hop (route, ip4_addr.s_addr);
- g_free (next_hop);
+ nm_ip4_route_set_next_hop (route, ip4_addr);
+ g_match_info_free (match_info);
/* Metric */
g_regex_match (regex_metric, *iter, 0, &match_info);
@@ -907,7 +963,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_match_info_free (match_info);
if (!nm_setting_ip4_config_add_route (s_ip4, route))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate IP4 route");
+ PARSE_WARNING ("duplicate IP4 route");
}
@@ -925,11 +981,12 @@ error:
return success;
}
-static NMIP6Address *
+static gboolean
parse_full_ip6_address (shvarFile *ifcfg,
const char *network_file,
const char *addr_str,
int i,
+ NMIP6Address **out_address,
GError **error)
{
NMIP6Address *addr = NULL;
@@ -940,11 +997,13 @@ parse_full_ip6_address (shvarFile *ifcfg,
struct in6_addr tmp = IN6ADDR_ANY_INIT;
gboolean success = FALSE;
- g_return_val_if_fail (addr_str != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail (*error == NULL, NULL);
+ g_return_val_if_fail (addr_str != NULL, FALSE);
+ g_return_val_if_fail (out_address != NULL, FALSE);
+ g_return_val_if_fail (*out_address == NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
- /* Split the adddress and prefix */
+ /* Split the address and prefix */
list = g_strsplit_set (addr_str, "/", 2);
if (g_strv_length (list) < 1) {
g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
@@ -957,9 +1016,12 @@ parse_full_ip6_address (shvarFile *ifcfg,
addr = nm_ip6_address_new ();
/* IP address */
- if (ip_val) {
- if (!parse_ip6_address (ip_val, &tmp, error))
- goto error;
+ if (!parse_ip6_address (ip_val, &tmp, error))
+ goto error;
+ if (IN6_IS_ADDR_UNSPECIFIED (&tmp)) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Invalid IP6 address '%s'", ip_val);
+ goto error;
}
nm_ip6_address_set_address (addr, &tmp);
@@ -990,7 +1052,7 @@ parse_full_ip6_address (shvarFile *ifcfg,
}
if (!value) {
/* If no gateway in the ifcfg, try global /etc/sysconfig/network instead */
- network_ifcfg = svNewFile (network_file);
+ network_ifcfg = svOpenFile (network_file, NULL);
if (network_ifcfg) {
value = svGetValue (network_ifcfg, "IPV6_DEFAULTGW", FALSE);
svCloseFile (network_ifcfg);
@@ -1006,17 +1068,16 @@ parse_full_ip6_address (shvarFile *ifcfg,
nm_ip6_address_set_gateway (addr, &tmp);
}
+ *out_address = addr;
success = TRUE;
error:
- if (!success) {
+ if (!success && addr)
nm_ip6_address_unref (addr);
- addr = NULL;
- }
g_strfreev (list);
g_free (value);
- return addr;
+ return success;
}
/* IPv6 address is very complex to describe completely by a regular expression,
@@ -1036,7 +1097,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
GMatchInfo *match_info;
NMIP6Route *route;
struct in6_addr ip6_addr;
- char *dest = NULL, *prefix = NULL, *next_hop = NULL, *metric = NULL;
+ char *dest = NULL, *prefix = NULL, *metric = NULL;
long int prefix_int, metric_int;
gboolean success = FALSE;
@@ -1050,16 +1111,13 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
g_return_val_if_fail (filename != NULL, FALSE);
g_return_val_if_fail (s_ip6 != NULL, FALSE);
- g_return_val_if_fail (error != NULL, FALSE);
- g_return_val_if_fail (*error == NULL, FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
/* Read the route file */
- if (!g_file_get_contents (filename, &contents, &len, NULL))
- return FALSE;
-
- if (len == 0) {
+ if (!g_file_get_contents (filename, &contents, &len, NULL) || !len) {
g_free (contents);
- return FALSE;
+ return TRUE; /* missing/empty = success */
}
/* Create regexes for pieces to be matched */
@@ -1096,8 +1154,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
/* Ignore default route - NM handles it internally */
g_free (dest);
g_match_info_free (match_info);
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignoring manual default route: '%s' (%s)",
- *iter, filename);
+ PARSE_WARNING ("ignoring manual default route: '%s' (%s)", *iter, filename);
continue;
}
if (inet_pton (AF_INET6, dest, &ip6_addr) != 1) {
@@ -1128,22 +1185,23 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
/* Next hop */
g_regex_match (regex_via, *iter, 0, &match_info);
- if (!g_match_info_matches (match_info)) {
- g_match_info_free (match_info);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Missing IP6 route gateway address in record: '%s'", *iter);
- goto error;
- }
- next_hop = g_match_info_fetch (match_info, 1);
- g_match_info_free (match_info);
- if (inet_pton (AF_INET6, next_hop, &ip6_addr) != 1) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid IP6 route gateway address '%s'", next_hop);
+ if (g_match_info_matches (match_info)) {
+ char *next_hop = g_match_info_fetch (match_info, 1);
+ if (inet_pton (AF_INET6, next_hop, &ip6_addr) != 1) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Invalid IPv6 route nexthop address '%s'",
+ next_hop);
+ g_match_info_free (match_info);
+ g_free (next_hop);
+ goto error;
+ }
g_free (next_hop);
- goto error;
+ } else {
+ /* Missing "via" is taken as :: */
+ ip6_addr = in6addr_any;
}
nm_ip6_route_set_next_hop (route, &ip6_addr);
- g_free (next_hop);
+ g_match_info_free (match_info);
/* Metric */
g_regex_match (regex_metric, *iter, 0, &match_info);
@@ -1166,7 +1224,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
g_match_info_free (match_info);
if (!nm_setting_ip6_config_add_route (s_ip6, route))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate IP6 route");
+ PARSE_WARNING ("duplicate IP6 route");
}
success = TRUE;
@@ -1188,24 +1246,18 @@ static NMSetting *
make_ip4_setting (shvarFile *ifcfg,
const char *network_file,
const char *iscsiadm_path,
- gboolean can_disable_ip4,
GError **error)
{
NMSettingIP4Config *s_ip4 = NULL;
char *value = NULL;
char *route_path = NULL;
- char *method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
+ char *method;
gint32 i;
shvarFile *network_ifcfg;
shvarFile *route_ifcfg;
- gboolean never_default = FALSE, tmp_success;
+ gboolean never_default = FALSE;
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- if (!s_ip4) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Could not allocate IP4 setting");
- return NULL;
- }
/* First check if DEFROUTE is set for this device; DEFROUTE has the
* opposite meaning from never-default. The default if DEFROUTE is not
@@ -1215,7 +1267,7 @@ make_ip4_setting (shvarFile *ifcfg,
never_default = !svTrueValue (ifcfg, "DEFROUTE", TRUE);
/* Then check if GATEWAYDEV; it's global and overrides DEFROUTE */
- network_ifcfg = svNewFile (network_file);
+ network_ifcfg = svOpenFile (network_file, NULL);
if (network_ifcfg) {
char *gatewaydev;
@@ -1235,93 +1287,47 @@ make_ip4_setting (shvarFile *ifcfg,
}
value = svGetValue (ifcfg, "BOOTPROTO", FALSE);
- if (value) {
- if (!g_ascii_strcasecmp (value, "bootp") || !g_ascii_strcasecmp (value, "dhcp"))
- method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
- else if (!g_ascii_strcasecmp (value, "ibft")) {
- g_free (value);
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default, NULL);
- /* iSCSI Boot Firmware Table: need to read values from the iSCSI
- * firmware for this device and create the IP4 setting using those.
- */
- if (fill_ip4_setting_from_ibft (ifcfg, s_ip4, iscsiadm_path, error))
- return NM_SETTING (s_ip4);
- g_object_unref (s_ip4);
- return NULL;
- } else if (!g_ascii_strcasecmp (value, "autoip")) {
- g_free (value);
- g_object_set (s_ip4,
- NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default,
- NULL);
- return NM_SETTING (s_ip4);
- } else if (!g_ascii_strcasecmp (value, "shared")) {
- g_free (value);
- g_object_set (s_ip4,
- NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_SHARED,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default,
- NULL);
+
+ if (!value || !*value || !g_ascii_strcasecmp (value, "none")) {
+ if (is_any_ip4_address_defined (ifcfg))
+ method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
+ else
+ method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
+ } else if (!g_ascii_strcasecmp (value, "bootp") || !g_ascii_strcasecmp (value, "dhcp")) {
+ method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
+ } else if (!g_ascii_strcasecmp (value, "static")) {
+ method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
+ } else if (!g_ascii_strcasecmp (value, "ibft")) {
+ g_free (value);
+ g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default, NULL);
+ /* iSCSI Boot Firmware Table: need to read values from the iSCSI
+ * firmware for this device and create the IP4 setting using those.
+ */
+ if (fill_ip4_setting_from_ibft (ifcfg, s_ip4, iscsiadm_path, error))
return NM_SETTING (s_ip4);
- } else if (!g_ascii_strcasecmp (value, "none") || !g_ascii_strcasecmp (value, "static")) {
- /* Static IP */
- } else if (strlen (value)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Unknown BOOTPROTO '%s'", value);
- g_free (value);
- goto done;
- }
+ g_object_unref (s_ip4);
+ return NULL;
+ } else if (!g_ascii_strcasecmp (value, "autoip")) {
g_free (value);
+ g_object_set (s_ip4,
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
+ NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default,
+ NULL);
+ return NM_SETTING (s_ip4);
+ } else if (!g_ascii_strcasecmp (value, "shared")) {
+ g_free (value);
+ g_object_set (s_ip4,
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_SHARED,
+ NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default,
+ NULL);
+ return NM_SETTING (s_ip4);
} else {
- char *tmp_ip4, *tmp_prefix, *tmp_netmask;
- char *tmp_ip4_0, *tmp_prefix_0, *tmp_netmask_0;
- char *tmp_ip4_1, *tmp_prefix_1, *tmp_netmask_1;
- char *tmp_ip4_2, *tmp_prefix_2, *tmp_netmask_2;
-
- /* If there is no BOOTPROTO, no IPADDR, no PREFIX, no NETMASK, but
- * valid IPv6 configuration, assume that IPv4 is disabled. Otherwise,
- * if there is no IPv6 configuration, assume DHCP is to be used.
- * Happens with minimal ifcfg files like the following that anaconda
- * sometimes used to write out:
- *
- * DEVICE=eth0
- * HWADDR=11:22:33:44:55:66
- *
- */
- tmp_ip4 = svGetValue (ifcfg, "IPADDR", FALSE);
- tmp_prefix = svGetValue (ifcfg, "PREFIX", FALSE);
- tmp_netmask = svGetValue (ifcfg, "NETMASK", FALSE);
- tmp_ip4_0 = svGetValue (ifcfg, "IPADDR0", FALSE);
- tmp_prefix_0 = svGetValue (ifcfg, "PREFIX0", FALSE);
- tmp_netmask_0 = svGetValue (ifcfg, "NETMASK0", FALSE);
- tmp_ip4_1 = svGetValue (ifcfg, "IPADDR1", FALSE);
- tmp_prefix_1 = svGetValue (ifcfg, "PREFIX1", FALSE);
- tmp_netmask_1 = svGetValue (ifcfg, "NETMASK1", FALSE);
- tmp_ip4_2 = svGetValue (ifcfg, "IPADDR2", FALSE);
- tmp_prefix_2 = svGetValue (ifcfg, "PREFIX2", FALSE);
- tmp_netmask_2 = svGetValue (ifcfg, "NETMASK2", FALSE);
- if ( !tmp_ip4 && !tmp_prefix && !tmp_netmask
- && !tmp_ip4_0 && !tmp_prefix_0 && !tmp_netmask_0
- && !tmp_ip4_1 && !tmp_prefix_1 && !tmp_netmask_1
- && !tmp_ip4_2 && !tmp_prefix_2 && !tmp_netmask_2) {
- if (can_disable_ip4)
- /* Nope, no IPv4 */
- method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
- else
- method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
- }
- g_free (tmp_ip4);
- g_free (tmp_prefix);
- g_free (tmp_netmask);
- g_free (tmp_ip4_0);
- g_free (tmp_prefix_0);
- g_free (tmp_netmask_0);
- g_free (tmp_ip4_1);
- g_free (tmp_prefix_1);
- g_free (tmp_netmask_1);
- g_free (tmp_ip4_2);
- g_free (tmp_prefix_2);
- g_free (tmp_netmask_2);
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Unknown BOOTPROTO '%s'", value);
+ g_free (value);
+ goto done;
}
+ g_free (value);
g_object_set (s_ip4,
NM_SETTING_IP4_CONFIG_METHOD, method,
@@ -1334,27 +1340,8 @@ make_ip4_setting (shvarFile *ifcfg,
if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0)
return NM_SETTING (s_ip4);
- /* Handle manual settings */
- if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
- NMIP4Address *addr;
-
- for (i = -1; i < 256; i++) {
- addr = read_full_ip4_address (ifcfg, network_file, i, error);
- if (error && *error)
- goto done;
- if (!addr) {
- /* The first mandatory variable is 2-indexed (IPADDR2)
- * Variables IPADDR, IPADDR0 and IPADDR1 are optional */
- if (i > 1)
- break;
- continue;
- }
-
- if (!nm_setting_ip4_config_add_address (s_ip4, addr))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate IP4 address");
- nm_ip4_address_unref (addr);
- }
- } else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
+ /* Handle DHCP settings */
+ if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
value = svGetValue (ifcfg, "DHCP_HOSTNAME", FALSE);
if (value && strlen (value))
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, value, NULL);
@@ -1371,27 +1358,54 @@ make_ip4_setting (shvarFile *ifcfg,
g_free (value);
}
+ /* Read static IP addresses.
+ * Read them even for AUTO method - in this case the addresses are
+ * added to the automatic ones. Note that this is not currently supported by
+ * the legacy 'network' service (ifup-eth).
+ */
+ for (i = -1; i < 256; i++) {
+ NMIP4Address *addr = NULL;
+
+ addr = nm_ip4_address_new ();
+ if (!read_full_ip4_address (ifcfg, network_file, i, addr, error)) {
+ nm_ip4_address_unref (addr);
+ goto done;
+ }
+ if (!nm_ip4_address_get_address (addr)) {
+ nm_ip4_address_unref (addr);
+
+ /* The first mandatory variable is 2-indexed (IPADDR2)
+ * Variables IPADDR, IPADDR0 and IPADDR1 are optional */
+ if (i > 1)
+ break;
+ continue;
+ }
+
+ if (!nm_setting_ip4_config_add_address (s_ip4, addr))
+ PARSE_WARNING ("duplicate IP4 address");
+ nm_ip4_address_unref (addr);
+ }
+
/* DNS servers
* Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
*/
- for (i = 1, tmp_success = TRUE; i <= 10 && tmp_success; i++) {
+ for (i = 1; i <= 10; i++) {
char *tag;
guint32 dns;
struct in6_addr ip6_dns;
- GError *tmp_err = NULL;
tag = g_strdup_printf ("DNS%u", i);
- tmp_success = read_ip4_address (ifcfg, tag, &dns, error);
- if (!tmp_success) {
- /* if it's IPv6, don't exit */
+ if (!read_ip4_address (ifcfg, tag, &dns, error)) {
+ gboolean valid = TRUE;
+
+ /* Ignore IPv6 addresses */
dns = 0;
value = svGetValue (ifcfg, tag, FALSE);
- if (value) {
- tmp_success = parse_ip6_address (value, &ip6_dns, &tmp_err);
- g_clear_error (&tmp_err);
- g_free (value);
- }
- if (!tmp_success) {
+ if (value)
+ valid = parse_ip6_address (value, &ip6_dns, NULL);
+ g_free (value);
+
+ if (!valid) {
g_free (tag);
goto done;
}
@@ -1399,7 +1413,7 @@ make_ip4_setting (shvarFile *ifcfg,
}
if (dns && !nm_setting_ip4_config_add_dns (s_ip4, dns))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate DNS server %s", tag);
+ PARSE_WARNING ("duplicate DNS server %s", tag);
g_free (tag);
}
@@ -1414,7 +1428,7 @@ make_ip4_setting (shvarFile *ifcfg,
for (item = searches; *item; item++) {
if (strlen (*item)) {
if (!nm_setting_ip4_config_add_dns_search (s_ip4, *item))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate DNS domain '%s'", *item);
+ PARSE_WARNING ("duplicate DNS domain '%s'", *item);
}
}
g_strfreev (searches);
@@ -1433,29 +1447,27 @@ make_ip4_setting (shvarFile *ifcfg,
/* First test new/legacy syntax */
if (utils_has_route_file_new_syntax (route_path)) {
/* Parse route file in new syntax */
- g_free (route_path);
route_ifcfg = utils_get_route_ifcfg (ifcfg->fileName, FALSE);
if (route_ifcfg) {
- NMIP4Route *route;
for (i = 0; i < 256; i++) {
- route = read_one_ip4_route (route_ifcfg, network_file, i, error);
- if (error && *error) {
+ NMIP4Route *route = NULL;
+
+ if (!read_one_ip4_route (route_ifcfg, network_file, i, &route, error)) {
svCloseFile (route_ifcfg);
goto done;
}
+
if (!route)
break;
if (!nm_setting_ip4_config_add_route (s_ip4, route))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate IP4 route");
+ PARSE_WARNING ("duplicate IP4 route");
nm_ip4_route_unref (route);
}
svCloseFile (route_ifcfg);
}
} else {
- read_route_file_legacy (route_path, s_ip4, error);
- g_free (route_path);
- if (error && *error)
+ if (!read_route_file_legacy (route_path, s_ip4, error))
goto done;
}
@@ -1471,7 +1483,7 @@ make_ip4_setting (shvarFile *ifcfg,
for (item = searches; *item; item++) {
if (strlen (*item)) {
if (!nm_setting_ip4_config_add_dns_search (s_ip4, *item))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate DNS search '%s'", *item);
+ PARSE_WARNING ("duplicate DNS search '%s'", *item);
}
}
g_strfreev (searches);
@@ -1483,10 +1495,111 @@ make_ip4_setting (shvarFile *ifcfg,
return NM_SETTING (s_ip4);
done:
+ g_free (route_path);
g_object_unref (s_ip4);
return NULL;
}
+static void
+read_aliases (NMSettingIP4Config *s_ip4, const char *filename, const char *network_file)
+{
+ GDir *dir;
+ char *dirname, *base;
+ shvarFile *parsed;
+ NMIP4Address *base_addr;
+ GError *err = NULL;
+
+ g_return_if_fail (s_ip4 != NULL);
+ g_return_if_fail (filename != NULL);
+
+ base_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+ if (!base_addr)
+ return;
+
+ dirname = g_path_get_dirname (filename);
+ g_return_if_fail (dirname != NULL);
+ base = g_path_get_basename (filename);
+ g_return_if_fail (base != NULL);
+
+ dir = g_dir_open (dirname, 0, &err);
+ if (dir) {
+ const char *item;
+ NMIP4Address *addr;
+ gboolean ok;
+
+ while ((item = g_dir_read_name (dir))) {
+ char *full_path, *device;
+ const char *p;
+
+ if (!utils_is_ifcfg_alias_file (item, base))
+ continue;
+
+ full_path = g_build_filename (dirname, item, NULL);
+
+ p = strchr (item, ':');
+ g_assert (p != NULL); /* we know this is true from utils_is_ifcfg_alias_file() */
+ for (p++; *p; p++) {
+ if (!g_ascii_isalnum (*p) && *p != '_')
+ break;
+ }
+ if (*p) {
+ PARSE_WARNING ("ignoring alias file '%s' with invalid name", full_path);
+ g_free (full_path);
+ continue;
+ }
+
+ parsed = svOpenFile (full_path, &err);
+ if (!parsed) {
+ PARSE_WARNING ("couldn't parse alias file '%s': %s", full_path, err->message);
+ g_free (full_path);
+ g_clear_error (&err);
+ continue;
+ }
+
+ device = svGetValue (parsed, "DEVICE", FALSE);
+ if (!device) {
+ PARSE_WARNING ("alias file '%s' has no DEVICE", full_path);
+ svCloseFile (parsed);
+ g_free (full_path);
+ continue;
+ }
+ /* We know that item starts with IFCFG_TAG from utils_is_ifcfg_alias_file() */
+ if (strcmp (device, item + strlen (IFCFG_TAG)) != 0) {
+ PARSE_WARNING ("alias file '%s' has invalid DEVICE (%s) for filename",
+ full_path, device);
+ g_free (device);
+ svCloseFile (parsed);
+ g_free (full_path);
+ continue;
+ }
+
+ addr = nm_ip4_address_dup (base_addr);
+ ok = read_full_ip4_address (parsed, network_file, -1, addr, &err);
+ svCloseFile (parsed);
+ if (ok) {
+ if (!NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_add_address_with_label (s_ip4, addr, device)))
+ PARSE_WARNING ("duplicate IP4 address in alias file %s", item);
+ } else {
+ PARSE_WARNING ("error reading IP4 address from alias file '%s': %s",
+ full_path, err ? err->message : "no address");
+ g_clear_error (&err);
+ }
+ nm_ip4_address_unref (addr);
+
+ g_free (device);
+ g_free (full_path);
+ }
+
+ g_dir_close (dir);
+ } else {
+ PARSE_WARNING ("can not read directory '%s': %s", dirname, err->message);
+ g_error_free (err);
+ }
+
+ g_free (base);
+ g_free (dirname);
+}
+
static NMSetting *
make_ip6_setting (shvarFile *ifcfg,
const char *network_file,
@@ -1499,19 +1612,16 @@ make_ip6_setting (shvarFile *ifcfg,
char *route6_path = NULL;
gboolean ipv6init, ipv6forwarding, ipv6_autoconf, dhcp6 = FALSE;
char *method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
+ char *ipv6addr, *ipv6addr_secondaries;
+ char **list = NULL, **iter;
guint32 i;
shvarFile *network_ifcfg;
- gboolean never_default = FALSE, tmp_success;
+ gboolean never_default = FALSE;
gboolean ip6_privacy = FALSE, ip6_privacy_prefer_public_ip;
char *ip6_privacy_str;
NMSettingIP6ConfigPrivacy ip6_privacy_val;
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- if (!s_ip6) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Could not allocate IP6 setting");
- return NULL;
- }
/* First check if IPV6_DEFROUTE is set for this device; IPV6_DEFROUTE has the
* opposite meaning from never-default. The default if IPV6_DEFROUTE is not
@@ -1524,7 +1634,7 @@ make_ip6_setting (shvarFile *ifcfg,
* they are global and override IPV6_DEFROUTE
* When both are set, the device specified in IPV6_DEFAULTGW takes preference.
*/
- network_ifcfg = svNewFile (network_file);
+ network_ifcfg = svOpenFile (network_file, NULL);
if (network_ifcfg) {
char *ipv6_defaultgw, *ipv6_defaultdev;
char *default_dev = NULL;
@@ -1559,7 +1669,7 @@ make_ip6_setting (shvarFile *ifcfg,
str_value = svGetValue (ifcfg, "IPV6INIT", FALSE);
ipv6init = svTrueValue (ifcfg, "IPV6INIT", FALSE);
if (!str_value) {
- network_ifcfg = svNewFile (network_file);
+ network_ifcfg = svOpenFile (network_file, NULL);
if (network_ifcfg) {
ipv6init = svTrueValue (network_ifcfg, "IPV6INIT", FALSE);
svCloseFile (network_ifcfg);
@@ -1620,38 +1730,8 @@ make_ip6_setting (shvarFile *ifcfg,
if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0)
return NM_SETTING (s_ip6);
- if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
- NMIP6Address *addr;
- char *val;
- char *ipv6addr, *ipv6addr_secondaries;
- char **list = NULL, **iter;
-
- ipv6addr = svGetValue (ifcfg, "IPV6ADDR", FALSE);
- ipv6addr_secondaries = svGetValue (ifcfg, "IPV6ADDR_SECONDARIES", FALSE);
-
- val = g_strjoin (ipv6addr && ipv6addr_secondaries ? " " : NULL,
- ipv6addr ? ipv6addr : "",
- ipv6addr_secondaries ? ipv6addr_secondaries : "",
- NULL);
- g_free (ipv6addr);
- g_free (ipv6addr_secondaries);
-
- list = g_strsplit_set (val, " ", 0);
- g_free (val);
- for (iter = list, i = 0; iter && *iter; iter++, i++) {
- addr = parse_full_ip6_address (ifcfg, network_file, *iter, i, error);
- if (!addr) {
- g_strfreev (list);
- goto error;
- }
-
- if (!nm_setting_ip6_config_add_address (s_ip6, addr))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate IP6 address");
- nm_ip6_address_unref (addr);
- }
- g_strfreev (list);
- } else if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
- || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
+ if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
+ || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
/* METHOD_AUTO may trigger DHCPv6, so save the hostname to send to DHCP */
value = svGetValue (ifcfg, "DHCP_HOSTNAME", FALSE);
if (value && value[0])
@@ -1659,33 +1739,66 @@ make_ip6_setting (shvarFile *ifcfg,
g_free (value);
}
+ /* Read static IP addresses.
+ * Read them even for AUTO and DHCP methods - in this case the addresses are
+ * added to the automatic ones. Note that this is not currently supported by
+ * the legacy 'network' service (ifup-eth).
+ */
+ ipv6addr = svGetValue (ifcfg, "IPV6ADDR", FALSE);
+ ipv6addr_secondaries = svGetValue (ifcfg, "IPV6ADDR_SECONDARIES", FALSE);
+
+ value = g_strjoin (ipv6addr && ipv6addr_secondaries ? " " : NULL,
+ ipv6addr ? ipv6addr : "",
+ ipv6addr_secondaries ? ipv6addr_secondaries : "",
+ NULL);
+ g_free (ipv6addr);
+ g_free (ipv6addr_secondaries);
+
+ list = g_strsplit_set (value, " ", 0);
+ g_free (value);
+ for (iter = list, i = 0; iter && *iter; iter++, i++) {
+ NMIP6Address *addr = NULL;
+
+ if (!parse_full_ip6_address (ifcfg, network_file, *iter, i, &addr, error)) {
+ g_strfreev (list);
+ goto error;
+ }
+
+ if (!nm_setting_ip6_config_add_address (s_ip6, addr))
+ PARSE_WARNING ("duplicate IP6 address");
+ nm_ip6_address_unref (addr);
+ }
+ g_strfreev (list);
+
/* DNS servers
* Pick up just IPv6 addresses (IPv4 addresses are taken by make_ip4_setting())
*/
- for (i = 1, tmp_success = TRUE; i <= 10 && tmp_success; i++) {
+ for (i = 1; i <= 10; i++) {
char *tag;
struct in6_addr ip6_dns;
+ guint32 ip4_addr;
- ip6_dns = in6addr_any;
tag = g_strdup_printf ("DNS%u", i);
value = svGetValue (ifcfg, tag, FALSE);
- if (value)
- tmp_success = parse_ip6_address (value, &ip6_dns, error);
+ if (!value) {
+ g_free (tag);
+ break; /* all done */
+ }
- if (!tmp_success) {
- struct in_addr ip4_addr;
+ ip6_dns = in6addr_any;
+ if (parse_ip6_address (value, &ip6_dns, NULL)) {
+ if (!IN6_IS_ADDR_UNSPECIFIED (&ip6_dns) && !nm_setting_ip6_config_add_dns (s_ip6, &ip6_dns))
+ PARSE_WARNING ("duplicate DNS server %s", tag);
+ } else {
+ /* Maybe an IPv4 address? If so ignore it */
if (inet_pton (AF_INET, value, &ip4_addr) != 1) {
g_free (tag);
g_free (value);
+ PARSE_WARNING ("duplicate IP6 address");
goto error;
}
- /* ignore error - it is IPv4 address */
- tmp_success = TRUE;
- g_clear_error (error);
}
- if (!IN6_IS_ADDR_UNSPECIFIED (&ip6_dns) && !nm_setting_ip6_config_add_dns (s_ip6, &ip6_dns))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: duplicate DNS server %s", tag);
g_free (tag);
g_free (value);
}
@@ -1700,14 +1813,14 @@ make_ip6_setting (shvarFile *ifcfg,
goto error;
}
- read_route6_file (route6_path, s_ip6, error);
- g_free (route6_path);
- if (error && *error)
+ if (!read_route6_file (route6_path, s_ip6, error))
goto error;
+ g_free (route6_path);
return NM_SETTING (s_ip6);
error:
+ g_free (route6_path);
g_object_unref (s_ip6);
return NULL;
}
@@ -1726,6 +1839,423 @@ check_if_bond_slave (shvarFile *ifcfg,
NULL);
g_free (value);
}
+
+ /* We should be checking for SLAVE=yes as well, but NM used to not set that,
+ * so for backward-compatibility, we don't check.
+ */
+}
+
+static void
+check_if_team_slave (shvarFile *ifcfg,
+ NMSettingConnection *s_con)
+{
+ char *value;
+
+ value = svGetValue (ifcfg, "DEVICETYPE", FALSE);
+ if (!value)
+ return;
+ if (strcasecmp (value, TYPE_TEAM_PORT)) {
+ g_free (value);
+ return;
+ }
+ g_free (value);
+ value = svGetValue (ifcfg, "TEAM_MASTER", FALSE);
+ if (!value)
+ return;
+ g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
+ g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME, NULL);
+ g_free (value);
+}
+
+typedef struct {
+ const char *enable_key;
+ const char *advertise_key;
+ const char *willing_key;
+ const char *flags_prop;
+} DcbFlagsProperty;
+
+enum {
+ DCB_APP_FCOE_FLAGS = 0,
+ DCB_APP_ISCSI_FLAGS = 1,
+ DCB_APP_FIP_FLAGS = 2,
+ DCB_PFC_FLAGS = 3,
+ DCB_PG_FLAGS = 4,
+};
+
+static DcbFlagsProperty dcb_flags_props[] = {
+ { KEY_DCB_APP_FCOE_ENABLE, KEY_DCB_APP_FCOE_ADVERTISE, KEY_DCB_APP_FCOE_WILLING, NM_SETTING_DCB_APP_FCOE_FLAGS },
+ { KEY_DCB_APP_ISCSI_ENABLE, KEY_DCB_APP_ISCSI_ADVERTISE, KEY_DCB_APP_ISCSI_WILLING, NM_SETTING_DCB_APP_ISCSI_FLAGS },
+ { KEY_DCB_APP_FIP_ENABLE, KEY_DCB_APP_FIP_ADVERTISE, KEY_DCB_APP_FIP_WILLING, NM_SETTING_DCB_APP_FIP_FLAGS },
+ { KEY_DCB_PFC_ENABLE, KEY_DCB_PFC_ADVERTISE, KEY_DCB_PFC_WILLING, NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS },
+ { KEY_DCB_PG_ENABLE, KEY_DCB_PG_ADVERTISE, KEY_DCB_PG_WILLING, NM_SETTING_DCB_PRIORITY_GROUP_FLAGS },
+ { NULL },
+};
+
+static NMSettingDcbFlags
+read_dcb_flags (shvarFile *ifcfg, DcbFlagsProperty *property)
+{
+ NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE;
+
+ if (svTrueValue (ifcfg, property->enable_key, FALSE))
+ flags |= NM_SETTING_DCB_FLAG_ENABLE;
+ if (svTrueValue (ifcfg, property->advertise_key, FALSE))
+ flags |= NM_SETTING_DCB_FLAG_ADVERTISE;
+ if (svTrueValue (ifcfg, property->willing_key, FALSE))
+ flags |= NM_SETTING_DCB_FLAG_WILLING;
+
+ return flags;
+}
+
+static gboolean
+read_dcb_app (shvarFile *ifcfg,
+ NMSettingDcb *s_dcb,
+ const char *app,
+ DcbFlagsProperty *flags_prop,
+ const char *priority_prop,
+ GError **error)
+{
+ NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE;
+ char *tmp, *val;
+ gboolean success = TRUE;
+ int priority = -1;
+
+ flags = read_dcb_flags (ifcfg, flags_prop);
+
+ /* Priority */
+ tmp = g_strdup_printf ("DCB_APP_%s_PRIORITY", app);
+ val = svGetValue (ifcfg, tmp, FALSE);
+ if (val) {
+ success = get_int (val, &priority);
+ if (success)
+ success = (priority >= 0 && priority <= 7);
+ if (!success) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Invalid %s value '%s' (expected 0 - 7)",
+ tmp, val);
+ }
+ g_free (val);
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE))
+ PARSE_WARNING ("ignoring DCB %s priority; app not enabled", app);
+ }
+ g_free (tmp);
+
+ if (success) {
+ g_object_set (G_OBJECT (s_dcb),
+ flags_prop->flags_prop, flags,
+ priority_prop, (guint) priority,
+ NULL);
+ }
+
+ return success;
+}
+
+typedef void (*DcbSetBoolFunc) (NMSettingDcb *, guint, gboolean);
+
+static gboolean
+read_dcb_bool_array (shvarFile *ifcfg,
+ NMSettingDcb *s_dcb,
+ NMSettingDcbFlags flags,
+ const char *prop,
+ const char *desc,
+ DcbSetBoolFunc set_func,
+ GError **error)
+{
+ char *val;
+ gboolean success = FALSE;
+ guint i;
+
+ val = svGetValue (ifcfg, prop, FALSE);
+ if (!val)
+ return TRUE;
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
+ PARSE_WARNING ("ignoring %s; %s is not enabled", prop, desc);
+ success = TRUE;
+ goto out;
+ }
+
+ val = g_strstrip (val);
+ if (strlen (val) != 8) {
+ PARSE_WARNING ("%s value '%s' must be 8 characters long", prop, val);
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "boolean array must be 8 characters");
+ goto out;
+ }
+
+ /* All characters must be either 0 or 1 */
+ for (i = 0; i < 8; i++) {
+ if (val[i] != '0' && val[i] != '1') {
+ PARSE_WARNING ("invalid %s value '%s': not all 0s and 1s", prop, val);
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "invalid boolean digit");
+ goto out;
+ }
+ set_func (s_dcb, i, (val[i] == '1'));
+ }
+ success = TRUE;
+
+out:
+ g_free (val);
+ return success;
+}
+
+typedef void (*DcbSetUintFunc) (NMSettingDcb *, guint, guint);
+
+static gboolean
+read_dcb_uint_array (shvarFile *ifcfg,
+ NMSettingDcb *s_dcb,
+ NMSettingDcbFlags flags,
+ const char *prop,
+ const char *desc,
+ gboolean f_allowed,
+ DcbSetUintFunc set_func,
+ GError **error)
+{
+ char *val;
+ gboolean success = FALSE;
+ guint i;
+
+ val = svGetValue (ifcfg, prop, FALSE);
+ if (!val)
+ return TRUE;
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
+ PARSE_WARNING ("ignoring %s; %s is not enabled", prop, desc);
+ success = TRUE;
+ goto out;
+ }
+
+ val = g_strstrip (val);
+ if (strlen (val) != 8) {
+ PARSE_WARNING ("%s value '%s' must be 8 characters long", prop, val);
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "uint array must be 8 characters");
+ goto out;
+ }
+
+ /* All characters must be either 0 - 7 or (optionally) f */
+ for (i = 0; i < 8; i++) {
+ if (val[i] >= '0' && val[i] <= '7')
+ set_func (s_dcb, i, val[i] - '0');
+ else if (f_allowed && (val[i] == 'f' || val[i] == 'F'))
+ set_func (s_dcb, i, 15);
+ else {
+ PARSE_WARNING ("invalid %s value '%s': not 0 - 7%s",
+ prop, val, f_allowed ? " or 'f'" : "");
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "invalid uint digit");
+ goto out;
+ }
+ }
+ success = TRUE;
+
+out:
+ g_free (val);
+ return success;
+}
+
+static gboolean
+read_dcb_percent_array (shvarFile *ifcfg,
+ NMSettingDcb *s_dcb,
+ NMSettingDcbFlags flags,
+ const char *prop,
+ const char *desc,
+ gboolean sum_pct,
+ DcbSetUintFunc set_func,
+ GError **error)
+{
+ char *val;
+ gboolean success = FALSE;
+ char **split = NULL, **iter;
+ int tmp;
+ guint i, sum = 0;
+
+ val = svGetValue (ifcfg, prop, FALSE);
+ if (!val)
+ return TRUE;
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
+ PARSE_WARNING ("ignoring %s; %s is not enabled", prop, desc);
+ success = TRUE;
+ goto out;
+ }
+
+ val = g_strstrip (val);
+ split = g_strsplit_set (val, ",", 0);
+ if (!split || (g_strv_length (split) != 8)) {
+ PARSE_WARNING ("invalid %s percentage list value '%s'", prop, val);
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "percent array must be 8 elements");
+ goto out;
+ }
+
+ for (iter = split, i = 0; iter && *iter; iter++, i++) {
+ if (!get_int (*iter, &tmp) || tmp < 0 || tmp > 100) {
+ PARSE_WARNING ("invalid %s percentage value '%s'", prop, *iter);
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "invalid percent element");
+ goto out;
+ }
+ set_func (s_dcb, i, (guint) tmp);
+ sum += (guint) tmp;
+ }
+
+ if (sum_pct && (sum != 100)) {
+ PARSE_WARNING ("%s percentages do not equal 100%%", prop);
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "invalid percentage sum");
+ goto out;
+ }
+
+ success = TRUE;
+
+out:
+ if (split)
+ g_strfreev (split);
+ g_free (val);
+ return success;
+}
+
+static gboolean
+make_dcb_setting (shvarFile *ifcfg,
+ const char *network_file,
+ NMSetting **out_setting,
+ GError **error)
+{
+ NMSettingDcb *s_dcb = NULL;
+ gboolean dcb_on;
+ NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE;
+ char *val;
+
+ g_return_val_if_fail (out_setting != NULL, FALSE);
+
+ dcb_on = !!svTrueValue (ifcfg, "DCB", FALSE);
+ if (!dcb_on)
+ return TRUE;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_assert (s_dcb);
+
+ /* FCOE */
+ if (!read_dcb_app (ifcfg, s_dcb, "FCOE",
+ &dcb_flags_props[DCB_APP_FCOE_FLAGS],
+ NM_SETTING_DCB_APP_FCOE_PRIORITY,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+ if (nm_setting_dcb_get_app_fcoe_flags (s_dcb) & NM_SETTING_DCB_FLAG_ENABLE) {
+ val = svGetValue (ifcfg, KEY_DCB_APP_FCOE_MODE, FALSE);
+ if (val) {
+ if (strcmp (val, NM_SETTING_DCB_FCOE_MODE_FABRIC) == 0 ||
+ strcmp (val, NM_SETTING_DCB_FCOE_MODE_VN2VN) == 0)
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_FCOE_MODE, val, NULL);
+ else {
+ PARSE_WARNING ("invalid FCoE mode '%s'", val);
+ g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "invalid FCoE mode");
+ g_free (val);
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+ g_free (val);
+ }
+ }
+
+ /* iSCSI */
+ if (!read_dcb_app (ifcfg, s_dcb, "ISCSI",
+ &dcb_flags_props[DCB_APP_ISCSI_FLAGS],
+ NM_SETTING_DCB_APP_ISCSI_PRIORITY,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ /* FIP */
+ if (!read_dcb_app (ifcfg, s_dcb, "FIP",
+ &dcb_flags_props[DCB_APP_FIP_FLAGS],
+ NM_SETTING_DCB_APP_FIP_PRIORITY,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ /* Priority Flow Control */
+ flags = read_dcb_flags (ifcfg, &dcb_flags_props[DCB_PFC_FLAGS]);
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, flags, NULL);
+
+ if (!read_dcb_bool_array (ifcfg,
+ s_dcb,
+ flags,
+ KEY_DCB_PFC_UP,
+ "PFC",
+ nm_setting_dcb_set_priority_flow_control,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ /* Priority Groups */
+ flags = read_dcb_flags (ifcfg, &dcb_flags_props[DCB_PG_FLAGS]);
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, flags, NULL);
+
+ if (!read_dcb_uint_array (ifcfg,
+ s_dcb,
+ flags,
+ KEY_DCB_PG_ID,
+ "PGID",
+ TRUE,
+ nm_setting_dcb_set_priority_group_id,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ /* Group bandwidth */
+ if (!read_dcb_percent_array (ifcfg,
+ s_dcb,
+ flags,
+ KEY_DCB_PG_PCT,
+ "PGPCT",
+ TRUE,
+ nm_setting_dcb_set_priority_group_bandwidth,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ /* Priority bandwidth */
+ if (!read_dcb_percent_array (ifcfg,
+ s_dcb,
+ flags,
+ KEY_DCB_PG_UPPCT,
+ "UPPCT",
+ FALSE,
+ nm_setting_dcb_set_priority_bandwidth,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ /* Strict Bandwidth */
+ if (!read_dcb_bool_array (ifcfg,
+ s_dcb,
+ flags,
+ KEY_DCB_PG_STRICT,
+ "STRICT",
+ nm_setting_dcb_set_priority_strict_bandwidth,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ if (!read_dcb_uint_array (ifcfg,
+ s_dcb,
+ flags,
+ KEY_DCB_PG_UP2TC,
+ "UP2TC",
+ FALSE,
+ nm_setting_dcb_set_priority_traffic_class,
+ error)) {
+ g_object_unref (s_dcb);
+ return FALSE;
+ }
+
+ *out_setting = NM_SETTING (s_dcb);
+ return TRUE;
}
static gboolean
@@ -1998,12 +2528,12 @@ fill_wpa_ciphers (shvarFile *ifcfg,
*/
if (adhoc) {
if (group && (i > 0)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignoring group cipher '%s' (only one group cipher allowed in Ad-Hoc mode)",
- *iter);
+ PARSE_WARNING ("ignoring group cipher '%s' (only one group cipher allowed "
+ "in Ad-Hoc mode)", *iter);
continue;
} else if (!group) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignoring pairwise cipher '%s' (pairwise not used in Ad-Hoc mode)",
- *iter);
+ PARSE_WARNING ("ignoring pairwise cipher '%s' (pairwise not used "
+ "in Ad-Hoc mode)", *iter);
continue;
}
}
@@ -2023,9 +2553,9 @@ fill_wpa_ciphers (shvarFile *ifcfg,
else if (group && !strcmp (*iter, "WEP40"))
nm_setting_wireless_security_add_group (wsec, "wep40");
else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignoring invalid %s cipher '%s'",
- group ? "CIPHER_GROUP" : "CIPHER_PAIRWISE",
- *iter);
+ PARSE_WARNING ("ignoring invalid %s cipher '%s'",
+ group ? "CIPHER_GROUP" : "CIPHER_PAIRWISE",
+ *iter);
}
}
@@ -2240,10 +2770,8 @@ eap_tls_reader (const char *eap_method,
g_free (real_path);
real_path = NULL;
} else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: missing %s for EAP"
- " method '%s'; this is insecure!",
- ca_cert_key,
- eap_method);
+ PARSE_WARNING ("missing %s for EAP method '%s'; this is insecure!",
+ ca_cert_key, eap_method);
}
/* Read and set private key password flags */
@@ -2373,10 +2901,8 @@ eap_peap_reader (const char *eap_method,
error))
goto done;
} else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: missing "
- "IEEE_8021X_CA_CERT for EAP method '%s'; this is"
- " insecure!",
- eap_method);
+ PARSE_WARNING ("missing IEEE_8021X_CA_CERT for EAP method '%s'; this is insecure!",
+ eap_method);
}
peapver = svGetValue (ifcfg, "IEEE_8021X_PEAP_VERSION", FALSE);
@@ -2479,10 +3005,8 @@ eap_ttls_reader (const char *eap_method,
error))
goto done;
} else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: missing "
- "IEEE_8021X_CA_CERT for EAP method '%s'; this is"
- " insecure!",
- eap_method);
+ PARSE_WARNING ("missing IEEE_8021X_CA_CERT for EAP method '%s'; this is insecure!",
+ eap_method);
}
anon_ident = svGetValue (ifcfg, "IEEE_8021X_ANON_IDENTITY", FALSE);
@@ -2516,10 +3040,12 @@ eap_ttls_reader (const char *eap_method,
if (!eap_tls_reader (*iter, ifcfg, keys, s_8021x, TRUE, error))
goto done;
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP, "tls", NULL);
- } else if (!strcmp (*iter, "eap-mschapv2") || !strcmp (*iter, "eap-md5")) {
+ } else if ( !strcmp (*iter, "eap-mschapv2")
+ || !strcmp (*iter, "eap-md5")
+ || !strcmp (*iter, "eap-gtc")) {
if (!eap_simple_reader (*iter, ifcfg, keys, s_8021x, TRUE, error))
goto done;
- g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP, (*iter + strlen ("eap-")), NULL);
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP, (*iter + STRLEN ("eap-")), NULL);
} else {
g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
@@ -2577,9 +3103,9 @@ eap_fast_reader (const char *eap_method,
else if (strcmp (*iter, "allow-auth") == 0)
allow_auth = TRUE;
else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid IEEE_8021X_FAST_PROVISIONING '%s' "
- "(space-separated list of these values [allow-auth, allow-unauth] expected)",
- *iter);
+ PARSE_WARNING ("invalid IEEE_8021X_FAST_PROVISIONING '%s' "
+ "(space-separated list of these values [allow-auth, allow-unauth] expected)",
+ *iter);
}
}
g_strfreev (list);
@@ -2664,6 +3190,7 @@ static EAPReader eap_readers[] = {
{ "mschap", eap_simple_reader, TRUE },
{ "mschapv2", eap_simple_reader, TRUE },
{ "leap", eap_simple_reader, FALSE },
+ { "pwd", eap_simple_reader, FALSE },
{ "tls", eap_tls_reader, FALSE },
{ "peap", eap_peap_reader, FALSE },
{ "ttls", eap_ttls_reader, FALSE },
@@ -2671,6 +3198,39 @@ static EAPReader eap_readers[] = {
{ NULL, NULL }
};
+static void
+read_8021x_list_value (shvarFile *ifcfg,
+ const char *ifcfg_var_name,
+ NMSetting8021x *setting,
+ const char *prop_name)
+{
+ char *value;
+ char **strv, **iter;
+ GSList *gslist = NULL;
+
+ g_return_if_fail (ifcfg != NULL);
+ g_return_if_fail (ifcfg_var_name != NULL);
+ g_return_if_fail (prop_name != NULL);
+
+ value = svGetValue (ifcfg, ifcfg_var_name, FALSE);
+ if (!value)
+ return;
+
+ strv = g_strsplit_set (value, " \t", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ if (*iter[0] == '\0')
+ continue;
+ gslist = g_slist_prepend (gslist, *iter);
+ }
+ if (gslist) {
+ gslist = g_slist_reverse (gslist);
+ g_object_set (setting, prop_name, gslist, NULL);
+ g_slist_free (gslist);
+ }
+ g_strfreev (strv);
+ g_free (value);
+}
+
static NMSetting8021x *
fill_8021x (shvarFile *ifcfg,
const char *file,
@@ -2715,9 +3275,8 @@ fill_8021x (shvarFile *ifcfg,
* used with TTLS or PEAP or whatever.
*/
if (wifi && eap->wifi_phase2_only) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignored invalid "
- "IEEE_8021X_EAP_METHOD '%s'; not allowed for wifi.",
- lower);
+ PARSE_WARNING ("ignored invalid IEEE_8021X_EAP_METHOD '%s'; not allowed for wifi.",
+ lower);
goto next;
}
@@ -2733,11 +3292,8 @@ fill_8021x (shvarFile *ifcfg,
eap++;
}
- if (!found) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignored unknown"
- "IEEE_8021X_EAP_METHOD '%s'.",
- lower);
- }
+ if (!found)
+ PARSE_WARNING ("ignored unknown IEEE_8021X_EAP_METHOD '%s'.", lower);
g_free (lower);
}
@@ -2747,6 +3303,19 @@ fill_8021x (shvarFile *ifcfg,
goto error;
}
+ value = svGetValue (ifcfg, "IEEE_8021X_SUBJECT_MATCH", FALSE);
+ g_object_set (s_8021x, NM_SETTING_802_1X_SUBJECT_MATCH, value, NULL);
+ g_free (value);
+
+ value = svGetValue (ifcfg, "IEEE_8021X_PHASE2_SUBJECT_MATCH", FALSE);
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, value, NULL);
+ g_free (value);
+
+ read_8021x_list_value (ifcfg, "IEEE_8021X_ALTSUBJECT_MATCHES",
+ s_8021x, NM_SETTING_802_1X_ALTSUBJECT_MATCHES);
+ read_8021x_list_value (ifcfg, "IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES",
+ s_8021x, NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES);
+
if (list)
g_strfreev (list);
if (keys)
@@ -2816,6 +3385,7 @@ make_wpa_setting (shvarFile *ifcfg,
g_free (allow_rsn);
}
+ /* coverity[dereference] */
if (!strcmp (value, "WPA-PSK")) {
NMSettingSecretFlags psk_flags;
@@ -2966,8 +3536,6 @@ make_wireless_security_setting (shvarFile *ifcfg,
static NMSetting *
make_wireless_setting (shvarFile *ifcfg,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMSettingWireless *s_wireless;
@@ -2980,20 +3548,7 @@ make_wireless_setting (shvarFile *ifcfg,
if (read_mac_address (ifcfg, "HWADDR", ARPHRD_ETHER, &array, error)) {
if (array) {
g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS, array, NULL);
-
- /* A connection can only be unmanaged if we know the MAC address */
- if (!nm_controlled) {
- *unmanaged = g_strdup_printf ("mac:%02x:%02x:%02x:%02x:%02x:%02x",
- array->data[0], array->data[1], array->data[2],
- array->data[3], array->data[4], array->data[5]);
- }
-
g_byte_array_free (array, TRUE);
- } else if (!nm_controlled) {
- /* If NM_CONTROLLED=no but there wasn't a MAC address, notify
- * the user that the device cannot be unmanaged.
- */
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: NM_CONTROLLED was false but HWADDR was missing; device will be managed");
}
} else {
g_object_unref (s_wireless);
@@ -3007,7 +3562,7 @@ make_wireless_setting (shvarFile *ifcfg,
g_byte_array_free (array, TRUE);
}
} else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: %s", (*error)->message);
+ PARSE_WARNING ("%s", (*error)->message);
g_clear_error (error);
}
@@ -3021,7 +3576,7 @@ make_wireless_setting (shvarFile *ifcfg,
if (**iter == '\0')
continue;
if (!ether_aton_r (*iter, &addr)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid MAC in HWADDR_BLACKLIST '%s'", *iter);
+ PARSE_WARNING ("invalid MAC in HWADDR_BLACKLIST '%s'", *iter);
continue;
}
macaddr_blacklist = g_slist_prepend (macaddr_blacklist, *iter);
@@ -3072,7 +3627,7 @@ make_wireless_setting (shvarFile *ifcfg,
p++;
}
- tmp = utils_hexstr2bin (value + 2, value_len - 2);
+ tmp = nm_utils_hexstr2bin (value + 2, value_len - 2);
ssid_len = (value_len - 2) / 2;
memcpy (buf, tmp, ssid_len);
p = &buf[0];
@@ -3092,17 +3647,8 @@ make_wireless_setting (shvarFile *ifcfg,
g_object_set (s_wireless, NM_SETTING_WIRELESS_SSID, array, NULL);
g_byte_array_free (array, TRUE);
g_free (value);
- } else {
- /* Only fail on lack of SSID if device is managed */
- if (nm_controlled) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Missing SSID");
- goto error;
- }
}
- if (!nm_controlled)
- goto done;
-
value = svGetValue (ifcfg, "MODE", FALSE);
if (value) {
char *lcase;
@@ -3180,7 +3726,11 @@ make_wireless_setting (shvarFile *ifcfg,
g_free (value);
}
-done:
+ g_object_set (s_wireless,
+ NM_SETTING_WIRELESS_HIDDEN,
+ svTrueValue (ifcfg, "SSID_HIDDEN", FALSE),
+ NULL);
+
return NM_SETTING (s_wireless);
error:
@@ -3192,8 +3742,6 @@ error:
static NMConnection *
wireless_connection_from_ifcfg (const char *file,
shvarFile *ifcfg,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMConnection *connection = NULL;
@@ -3212,14 +3760,9 @@ wireless_connection_from_ifcfg (const char *file,
g_return_val_if_fail (*error == NULL, NULL);
connection = nm_connection_new ();
- if (!connection) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to allocate new connection for %s.", file);
- return NULL;
- }
/* Wireless */
- wireless_setting = make_wireless_setting (ifcfg, nm_controlled, unmanaged, error);
+ wireless_setting = make_wireless_setting (ifcfg, error);
if (!wireless_setting) {
g_object_unref (connection);
return NULL;
@@ -3232,26 +3775,21 @@ wireless_connection_from_ifcfg (const char *file,
else
printable_ssid = g_strdup_printf ("unmanaged");
- if (nm_controlled) {
- mode = nm_setting_wireless_get_mode (NM_SETTING_WIRELESS (wireless_setting));
- if (mode && !strcmp (mode, "adhoc"))
- adhoc = TRUE;
-
- /* Wireless security */
- security_setting = make_wireless_security_setting (ifcfg, file, ssid, adhoc, &s_8021x, error);
- if (*error) {
- g_free (printable_ssid);
- g_object_unref (connection);
- return NULL;
- }
- if (security_setting) {
- nm_connection_add_setting (connection, security_setting);
- if (s_8021x)
- nm_connection_add_setting (connection, NM_SETTING (s_8021x));
+ mode = nm_setting_wireless_get_mode (NM_SETTING_WIRELESS (wireless_setting));
+ if (mode && !strcmp (mode, "adhoc"))
+ adhoc = TRUE;
- g_object_set (wireless_setting, NM_SETTING_WIRELESS_SEC,
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NULL);
- }
+ /* Wireless security */
+ security_setting = make_wireless_security_setting (ifcfg, file, ssid, adhoc, &s_8021x, error);
+ if (*error) {
+ g_free (printable_ssid);
+ g_object_unref (connection);
+ return NULL;
+ }
+ if (security_setting) {
+ nm_connection_add_setting (connection, security_setting);
+ if (s_8021x)
+ nm_connection_add_setting (connection, NM_SETTING (s_8021x));
}
/* Connection */
@@ -3267,12 +3805,9 @@ wireless_connection_from_ifcfg (const char *file,
}
nm_connection_add_setting (connection, con_setting);
- /* Don't verify if unmanaged since we may not have an SSID or whatever */
- if (nm_controlled) {
- if (!nm_connection_verify (connection, error)) {
- g_object_unref (connection);
- return NULL;
- }
+ if (!nm_connection_verify (connection, error)) {
+ g_object_unref (connection);
+ return NULL;
}
return connection;
@@ -3281,8 +3816,6 @@ wireless_connection_from_ifcfg (const char *file,
static NMSetting *
make_wired_setting (shvarFile *ifcfg,
const char *file,
- gboolean nm_controlled,
- char **unmanaged,
NMSetting8021x **s_8021x,
GError **error)
{
@@ -3302,7 +3835,7 @@ make_wired_setting (shvarFile *ifcfg,
g_object_set (s_wired, NM_SETTING_WIRED_MTU, mtu, NULL);
} else {
/* Shouldn't be fatal... */
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid MTU '%s'", value);
+ PARSE_WARNING ("invalid MTU '%s'", value);
}
g_free (value);
}
@@ -3310,14 +3843,6 @@ make_wired_setting (shvarFile *ifcfg,
if (read_mac_address (ifcfg, "HWADDR", ARPHRD_ETHER, &mac, error)) {
if (mac) {
g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
-
- /* A connection can only be unmanaged if we know the MAC address */
- if (!nm_controlled) {
- *unmanaged = g_strdup_printf ("mac:%02x:%02x:%02x:%02x:%02x:%02x",
- mac->data[0], mac->data[1], mac->data[2],
- mac->data[3], mac->data[4], mac->data[5]);
- }
-
g_byte_array_free (mac, TRUE);
}
} else {
@@ -3334,7 +3859,7 @@ make_wired_setting (shvarFile *ifcfg,
/* basic sanity checks */
while (*p) {
if (!g_ascii_isxdigit (*p) && (*p != ',') && (*p != '.')) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid SUBCHANNELS '%s'", value);
+ PARSE_WARNING ("invalid SUBCHANNELS '%s'", value);
success = FALSE;
break;
}
@@ -3347,8 +3872,8 @@ make_wired_setting (shvarFile *ifcfg,
chans = g_strsplit_set (value, ",", 0);
num_chans = g_strv_length (chans);
if (num_chans < 2 || num_chans > 3) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid SUBCHANNELS '%s' (%d channels, 2 or 3 expected)",
- value, g_strv_length (chans));
+ PARSE_WARNING ("invalid SUBCHANNELS '%s' (%d channels, 2 or 3 expected)",
+ value, g_strv_length (chans));
} else {
GPtrArray *array = g_ptr_array_sized_new (num_chans);
@@ -3359,10 +3884,6 @@ make_wired_setting (shvarFile *ifcfg,
g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, array, NULL);
g_ptr_array_free (array, TRUE);
-
- /* set the unmanaged spec too */
- if (!nm_controlled && !*unmanaged)
- *unmanaged = g_strdup_printf ("s390-subchannels:%s", value);
}
g_strfreev (chans);
}
@@ -3385,7 +3906,7 @@ make_wired_setting (shvarFile *ifcfg,
if (!strcmp (nettype, "qeth") || !strcmp (nettype, "lcs") || !strcmp (nettype, "ctc"))
g_object_set (s_wired, NM_SETTING_WIRED_S390_NETTYPE, nettype, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: unknown s390 NETTYPE '%s'", nettype);
+ PARSE_WARNING ("unknown s390 NETTYPE '%s'", nettype);
}
g_free (nettype);
@@ -3403,20 +3924,13 @@ make_wired_setting (shvarFile *ifcfg,
valid = nm_setting_wired_add_s390_option (s_wired, *iter, equals + 1);
}
if (!valid)
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid s390 OPTION '%s'", *iter);
+ PARSE_WARNING ("invalid s390 OPTION '%s'", *iter);
iter++;
}
g_strfreev (options);
}
g_free (value);
- if (!nm_controlled && !*unmanaged) {
- /* If NM_CONTROLLED=no but there wasn't a MAC address or z/VM
- * subchannels, notify the user that the device cannot be unmanaged.
- */
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: NM_CONTROLLED was false but HWADDR or SUBCHANNELS was missing; device will be managed");
- }
-
mac = NULL;
if (read_mac_address (ifcfg, "MACADDR", ARPHRD_ETHER, &mac, error)) {
if (mac) {
@@ -3424,7 +3938,7 @@ make_wired_setting (shvarFile *ifcfg,
g_byte_array_free (mac, TRUE);
}
} else {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: %s", (*error)->message);
+ PARSE_WARNING ("%s", (*error)->message);
g_clear_error (error);
}
@@ -3438,7 +3952,7 @@ make_wired_setting (shvarFile *ifcfg,
if (**iter == '\0')
continue;
if (!ether_aton_r (*iter, &addr)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid MAC in HWADDR_BLACKLIST '%s'", *iter);
+ PARSE_WARNING ("invalid MAC in HWADDR_BLACKLIST '%s'", *iter);
continue;
}
macaddr_blacklist = g_slist_prepend (macaddr_blacklist, *iter);
@@ -3477,8 +3991,6 @@ error:
static NMConnection *
wired_connection_from_ifcfg (const char *file,
shvarFile *ifcfg,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMConnection *connection = NULL;
@@ -3490,11 +4002,6 @@ wired_connection_from_ifcfg (const char *file,
g_return_val_if_fail (ifcfg != NULL, NULL);
connection = nm_connection_new ();
- if (!connection) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to allocate new connection for %s.", file);
- return NULL;
- }
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_WIRED_SETTING_NAME, NULL, NULL);
if (!con_setting) {
@@ -3504,9 +4011,10 @@ wired_connection_from_ifcfg (const char *file,
return NULL;
}
check_if_bond_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
+ check_if_team_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
nm_connection_add_setting (connection, con_setting);
- wired_setting = make_wired_setting (ifcfg, file, nm_controlled, unmanaged, &s_8021x, error);
+ wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error);
if (!wired_setting) {
g_object_unref (connection);
return NULL;
@@ -3524,11 +4032,75 @@ wired_connection_from_ifcfg (const char *file,
return connection;
}
+static gboolean
+parse_infiniband_p_key (shvarFile *ifcfg,
+ int *out_p_key,
+ char **out_parent,
+ GError **error)
+{
+ char *device = NULL, *physdev = NULL, *pkey_id = NULL, *end;
+ char *ifname = NULL;
+ guint32 id = G_MAXUINT32;
+ gboolean ret = FALSE;
+
+ device = svGetValue (ifcfg, "DEVICE", FALSE);
+ if (!device) {
+ PARSE_WARNING ("InfiniBand connection specified PKEY but not DEVICE");
+ goto done;
+ }
+
+ physdev = svGetValue (ifcfg, "PHYSDEV", FALSE);
+ if (!physdev) {
+ PARSE_WARNING ("InfiniBand connection specified PKEY but not PHYSDEV");
+ goto done;
+ }
+
+ pkey_id = svGetValue (ifcfg, "PKEY_ID", FALSE);
+ if (!pkey_id) {
+ PARSE_WARNING ("InfiniBand connection specified PKEY but not PKEY_ID");
+ goto done;
+ }
+
+ if (g_str_has_prefix (pkey_id, "0x"))
+ id = strtoul (pkey_id, &end, 16);
+ else if (!g_str_has_prefix (pkey_id, "0"))
+ id = strtoul (pkey_id, &end, 10);
+ else
+ end = pkey_id;
+ if (end == pkey_id || *end || id > 0xFFFF) {
+ PARSE_WARNING ("invalid InfiniBand PKEY_ID '%s'", pkey_id);
+ goto done;
+ }
+ id = (id | 0x8000);
+
+ ifname = g_strdup_printf ("%s.%04x", physdev, id);
+ if (strcmp (device, ifname) != 0) {
+ PARSE_WARNING ("InfiniBand DEVICE (%s) does not match PHYSDEV+PKEY_ID (%s)",
+ device, ifname);
+ goto done;
+ }
+
+ *out_p_key = id;
+ *out_parent = g_strdup (physdev);
+ ret = TRUE;
+
+ done:
+ g_free (device);
+ g_free (physdev);
+ g_free (pkey_id);
+ g_free (ifname);
+
+ if (!ret) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Failed to create InfiniBand setting.");
+ }
+ return ret;
+}
+
+
static NMSetting *
make_infiniband_setting (shvarFile *ifcfg,
const char *file,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMSettingInfiniband *s_infiniband;
@@ -3545,7 +4117,7 @@ make_infiniband_setting (shvarFile *ifcfg,
g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MTU, mtu, NULL);
} else {
/* Shouldn't be fatal... */
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid MTU '%s'", value);
+ PARSE_WARNING ("invalid MTU '%s'", value);
}
g_free (value);
}
@@ -3553,14 +4125,6 @@ make_infiniband_setting (shvarFile *ifcfg,
if (read_mac_address (ifcfg, "HWADDR", ARPHRD_INFINIBAND, &mac, error)) {
if (mac) {
g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL);
-
- /* A connection can only be unmanaged if we know the MAC address */
- if (!nm_controlled) {
- char *mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_INFINIBAND);
- *unmanaged = g_strdup_printf ("mac:%s", mac_str);
- g_free (mac_str);
- }
-
g_byte_array_free (mac, TRUE);
}
} else {
@@ -3573,11 +4137,19 @@ make_infiniband_setting (shvarFile *ifcfg,
else
g_object_set (s_infiniband, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram", NULL);
- if (!nm_controlled && !*unmanaged) {
- /* If NM_CONTROLLED=no but there wasn't a MAC address, notify
- the user that the device cannot be unmanaged.
- */
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: NM_CONTROLLED was false but HWADDR was missing; device will be managed");
+ if (svTrueValue (ifcfg, "PKEY", FALSE)) {
+ int p_key;
+ char *parent;
+
+ if (!parse_infiniband_p_key (ifcfg, &p_key, &parent, error)) {
+ g_object_unref (s_infiniband);
+ return NULL;
+ }
+
+ g_object_set (s_infiniband,
+ NM_SETTING_INFINIBAND_P_KEY, p_key,
+ NM_SETTING_INFINIBAND_PARENT, parent,
+ NULL);
}
return (NMSetting *) s_infiniband;
@@ -3586,8 +4158,6 @@ make_infiniband_setting (shvarFile *ifcfg,
static NMConnection *
infiniband_connection_from_ifcfg (const char *file,
shvarFile *ifcfg,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMConnection *connection = NULL;
@@ -3598,11 +4168,6 @@ infiniband_connection_from_ifcfg (const char *file,
g_return_val_if_fail (ifcfg != NULL, NULL);
connection = nm_connection_new ();
- if (!connection) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to allocate new connection for %s.", file);
- return NULL;
- }
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_INFINIBAND_SETTING_NAME, NULL, NULL);
if (!con_setting) {
@@ -3612,9 +4177,10 @@ infiniband_connection_from_ifcfg (const char *file,
return NULL;
}
check_if_bond_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
+ check_if_team_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
nm_connection_add_setting (connection, con_setting);
- infiniband_setting = make_infiniband_setting (ifcfg, file, nm_controlled, unmanaged, error);
+ infiniband_setting = make_infiniband_setting (ifcfg, file, error);
if (!infiniband_setting) {
g_object_unref (connection);
return NULL;
@@ -3634,15 +4200,29 @@ handle_bond_option (NMSettingBond *s_bond,
const char *key,
const char *value)
{
- if (!nm_setting_bond_add_option (s_bond, key, value))
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid bonding option '%s'", key);
+ char *sanitized = NULL, *j;
+ const char *p = value;
+
+ /* Remove any quotes or +/- from arp_ip_target */
+ if (!g_strcmp0 (key, NM_SETTING_BOND_OPTION_ARP_IP_TARGET) && value && value[0]) {
+ if (*p == '\'' || *p == '"')
+ p++;
+ j = sanitized = g_malloc0 (strlen (p) + 1);
+ while (*p) {
+ if (*p != '+' && *p != '-' && *p != '\'' && *p != '"')
+ *j++ = *p;
+ p++;
+ }
+ }
+
+ if (!nm_setting_bond_add_option (s_bond, key, sanitized ? sanitized : value))
+ PARSE_WARNING ("invalid bonding option '%s'", key);
+ g_free (sanitized);
}
static NMSetting *
make_bond_setting (shvarFile *ifcfg,
const char *file,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMSettingBond *s_bond;
@@ -3693,8 +4273,6 @@ error:
static NMConnection *
bond_connection_from_ifcfg (const char *file,
shvarFile *ifcfg,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMConnection *connection = NULL;
@@ -3707,11 +4285,6 @@ bond_connection_from_ifcfg (const char *file,
g_return_val_if_fail (ifcfg != NULL, NULL);
connection = nm_connection_new ();
- if (!connection) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to allocate new connection for %s.", file);
- return NULL;
- }
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_BOND_SETTING_NAME, NULL, _("Bond"));
if (!con_setting) {
@@ -3722,14 +4295,125 @@ bond_connection_from_ifcfg (const char *file,
}
nm_connection_add_setting (connection, con_setting);
- bond_setting = make_bond_setting (ifcfg, file, nm_controlled, unmanaged, error);
+ bond_setting = make_bond_setting (ifcfg, file, error);
if (!bond_setting) {
g_object_unref (connection);
return NULL;
}
nm_connection_add_setting (connection, bond_setting);
- wired_setting = make_wired_setting (ifcfg, file, nm_controlled, unmanaged, &s_8021x, error);
+ wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error);
+ if (!wired_setting) {
+ g_object_unref (connection);
+ return NULL;
+ }
+ nm_connection_add_setting (connection, wired_setting);
+
+ if (s_8021x)
+ nm_connection_add_setting (connection, NM_SETTING (s_8021x));
+
+ if (!nm_connection_verify (connection, error)) {
+ g_object_unref (connection);
+ return NULL;
+ }
+
+ return connection;
+}
+
+/* Check 'error' for errors. Missing config (NULL return value) is a valid case. */
+static char *
+read_team_config (shvarFile *ifcfg, const char *key, GError **error)
+{
+ char *value;
+ size_t l;
+
+ /* FIXME: validate the JSON at some point */
+ value = svGetValue (ifcfg, key, TRUE);
+ if (!value)
+ return NULL;
+
+ /* No reason Team config should be over 20k. The config is read
+ * verbatim, length-checked, then unescaped. svUnescape() does not
+ * deal well with extremely long strings.
+ */
+ l = strlen (value);
+ if (l > 20000) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "%s too long (size %zd)", key, l);
+ g_free (value);
+ return NULL;
+ }
+ svUnescape (value);
+ return value;
+}
+
+static NMSetting *
+make_team_setting (shvarFile *ifcfg,
+ const char *file,
+ GError **error)
+{
+ NMSettingTeam *s_team;
+ char *value;
+ GError *local_err = NULL;
+
+ s_team = NM_SETTING_TEAM (nm_setting_team_new ());
+
+ value = svGetValue (ifcfg, "DEVICE", FALSE);
+ if (!value || !strlen (value)) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "mandatory DEVICE keyword missing");
+ goto error;
+ }
+
+ g_object_set (s_team, NM_SETTING_TEAM_INTERFACE_NAME, value, NULL);
+ g_free (value);
+
+ value = read_team_config (ifcfg, "TEAM_CONFIG", &local_err);
+ if (local_err) {
+ g_propagate_error (error, local_err);
+ goto error;
+ }
+ g_object_set (s_team, NM_SETTING_TEAM_CONFIG, value, NULL);
+ g_free (value);
+
+ return (NMSetting *) s_team;
+
+error:
+ g_object_unref (s_team);
+ return NULL;
+}
+
+static NMConnection *
+team_connection_from_ifcfg (const char *file,
+ shvarFile *ifcfg,
+ GError **error)
+{
+ NMConnection *connection = NULL;
+ NMSetting *con_setting = NULL;
+ NMSetting *team_setting = NULL;
+ NMSetting *wired_setting = NULL;
+ NMSetting8021x *s_8021x = NULL;
+
+ g_return_val_if_fail (file != NULL, NULL);
+ g_return_val_if_fail (ifcfg != NULL, NULL);
+
+ connection = nm_connection_new ();
+
+ con_setting = make_connection_setting (file, ifcfg, NM_SETTING_TEAM_SETTING_NAME, NULL, _("Team"));
+ if (!con_setting) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Failed to create connection setting.");
+ g_object_unref (connection);
+ return NULL;
+ }
+ nm_connection_add_setting (connection, con_setting);
+
+ team_setting = make_team_setting (ifcfg, file, error);
+ if (!team_setting) {
+ g_object_unref (connection);
+ return NULL;
+ }
+ nm_connection_add_setting (connection, team_setting);
+
+ wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error);
if (!wired_setting) {
g_object_unref (connection);
return NULL;
@@ -3762,32 +4446,32 @@ handle_bridge_option (NMSetting *setting,
if (!strcmp (key, "priority")) {
if (stp == FALSE) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: 'priority' invalid when STP is disabled");
+ PARSE_WARNING ("'priority' invalid when STP is disabled");
} else if (get_uint (value, &u))
g_object_set (setting, NM_SETTING_BRIDGE_PRIORITY, u, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid priority value '%s'", value);
+ PARSE_WARNING ("invalid priority value '%s'", value);
} else if (!strcmp (key, "hello_time")) {
if (stp == FALSE) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: 'hello_time' invalid when STP is disabled");
+ PARSE_WARNING ("'hello_time' invalid when STP is disabled");
} else if (get_uint (value, &u))
g_object_set (setting, NM_SETTING_BRIDGE_HELLO_TIME, u, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid hello_time value '%s'", value);
+ PARSE_WARNING ("invalid hello_time value '%s'", value);
} else if (!strcmp (key, "max_age")) {
if (stp == FALSE) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: 'max_age' invalid when STP is disabled");
+ PARSE_WARNING ("'max_age' invalid when STP is disabled");
} else if (get_uint (value, &u))
g_object_set (setting, NM_SETTING_BRIDGE_MAX_AGE, u, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid max_age value '%s'", value);
+ PARSE_WARNING ("invalid max_age value '%s'", value);
} else if (!strcmp (key, "ageing_time")) {
if (get_uint (value, &u))
g_object_set (setting, NM_SETTING_BRIDGE_AGEING_TIME, u, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid ageing_time value '%s'", value);
+ PARSE_WARNING ("invalid ageing_time value '%s'", value);
} else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: unhandled bridge option '%s'", key);
+ PARSE_WARNING ("unhandled bridge option '%s'", key);
}
static void
@@ -3820,8 +4504,6 @@ handle_bridging_opts (NMSetting *setting,
static NMSetting *
make_bridge_setting (shvarFile *ifcfg,
const char *file,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMSettingBridge *s_bridge;
@@ -3829,6 +4511,7 @@ make_bridge_setting (shvarFile *ifcfg,
guint32 u;
gboolean stp = FALSE;
gboolean stp_set = FALSE;
+ GByteArray *array = NULL;
s_bridge = NM_SETTING_BRIDGE (nm_setting_bridge_new ());
@@ -3841,6 +4524,16 @@ make_bridge_setting (shvarFile *ifcfg,
g_object_set (s_bridge, NM_SETTING_BRIDGE_INTERFACE_NAME, value, NULL);
g_free (value);
+ if (read_mac_address (ifcfg, "MACADDR", ARPHRD_ETHER, &array, error)) {
+ if (array) {
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, array, NULL);
+ g_byte_array_free (array, TRUE);
+ }
+ } else {
+ PARSE_WARNING ("%s", (*error)->message);
+ g_clear_error (error);
+ }
+
value = svGetValue (ifcfg, "STP", FALSE);
if (value) {
if (!strcasecmp (value, "on") || !strcasecmp (value, "yes")) {
@@ -3851,7 +4544,7 @@ make_bridge_setting (shvarFile *ifcfg,
g_object_set (s_bridge, NM_SETTING_BRIDGE_STP, FALSE, NULL);
stp_set = TRUE;
} else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid STP value '%s'", value);
+ PARSE_WARNING ("invalid STP value '%s'", value);
g_free (value);
}
@@ -3866,9 +4559,9 @@ make_bridge_setting (shvarFile *ifcfg,
if (get_uint (value, &u))
g_object_set (s_bridge, NM_SETTING_BRIDGE_FORWARD_DELAY, u, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid forward delay value '%s'", value);
+ PARSE_WARNING ("invalid forward delay value '%s'", value);
} else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: DELAY invalid when STP is disabled");
+ PARSE_WARNING ("DELAY invalid when STP is disabled");
g_free (value);
}
@@ -3888,8 +4581,6 @@ error:
static NMConnection *
bridge_connection_from_ifcfg (const char *file,
shvarFile *ifcfg,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMConnection *connection = NULL;
@@ -3900,11 +4591,6 @@ bridge_connection_from_ifcfg (const char *file,
g_return_val_if_fail (ifcfg != NULL, NULL);
connection = nm_connection_new ();
- if (!connection) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to allocate new connection for %s.", file);
- return NULL;
- }
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_BRIDGE_SETTING_NAME, NULL, _("Bridge"));
if (!con_setting) {
@@ -3915,7 +4601,7 @@ bridge_connection_from_ifcfg (const char *file,
}
nm_connection_add_setting (connection, con_setting);
- bridge_setting = make_bridge_setting (ifcfg, file, nm_controlled, unmanaged, error);
+ bridge_setting = make_bridge_setting (ifcfg, file, error);
if (!bridge_setting) {
g_object_unref (connection);
return NULL;
@@ -3942,40 +4628,60 @@ handle_bridge_port_option (NMSetting *setting,
if (get_uint (value, &u))
g_object_set (setting, NM_SETTING_BRIDGE_PORT_PRIORITY, u, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid priority value '%s'", value);
+ PARSE_WARNING ("invalid priority value '%s'", value);
} else if (!strcmp (key, "path_cost")) {
if (get_uint (value, &u))
g_object_set (setting, NM_SETTING_BRIDGE_PORT_PATH_COST, u, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid path_cost value '%s'", value);
+ PARSE_WARNING ("invalid path_cost value '%s'", value);
} else if (!strcmp (key, "hairpin_mode")) {
if (!strcasecmp (value, "on") || !strcasecmp (value, "yes") || !strcmp (value, "1"))
g_object_set (setting, NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, TRUE, NULL);
else if (!strcasecmp (value, "off") || !strcasecmp (value, "no"))
g_object_set (setting, NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, FALSE, NULL);
else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid hairpin_mode value '%s'", value);
+ PARSE_WARNING ("invalid hairpin_mode value '%s'", value);
} else
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: unhandled bridge port option '%s'", key);
+ PARSE_WARNING ("unhandled bridge port option '%s'", key);
}
static NMSetting *
-make_bridge_port_setting (shvarFile *ifcfg, GError **error)
+make_bridge_port_setting (shvarFile *ifcfg)
{
- NMSetting *s_port;
+ NMSetting *s_port = NULL;
char *value;
+ g_return_val_if_fail (ifcfg != NULL, FALSE);
+
value = svGetValue (ifcfg, "BRIDGE", FALSE);
- if (!value)
- return NULL;
- g_free (value);
+ if (value) {
+ g_free (value);
+
+ s_port = nm_setting_bridge_port_new ();
+ value = svGetValue (ifcfg, "BRIDGING_OPTS", FALSE);
+ if (value)
+ handle_bridging_opts (s_port, FALSE, value, handle_bridge_port_option);
+ g_free (value);
+ }
- s_port = nm_setting_bridge_port_new ();
+ return s_port;
+}
- value = svGetValue (ifcfg, "BRIDGING_OPTS", FALSE);
+static NMSetting *
+make_team_port_setting (shvarFile *ifcfg)
+{
+ NMSetting *s_port = NULL;
+ char *value;
+ GError *error = NULL;
+
+ value = read_team_config (ifcfg, "TEAM_PORT_CONFIG", &error);
if (value) {
- handle_bridging_opts (s_port, FALSE, value, handle_bridge_port_option);
+ s_port = nm_setting_team_port_new ();
+ g_object_set (s_port, NM_SETTING_TEAM_PORT_CONFIG, value, NULL);
g_free (value);
+ } else if (error) {
+ PARSE_WARNING ("%s", error->message);
+ g_error_free (error);
}
return s_port;
@@ -4007,6 +4713,21 @@ is_vlan_device (const char *name, shvarFile *parsed)
return FALSE;
}
+static gboolean
+is_wifi_device (const char *name, shvarFile *parsed)
+{
+ int ifindex;
+
+ g_return_val_if_fail (name != NULL, FALSE);
+ g_return_val_if_fail (parsed != NULL, FALSE);
+
+ ifindex = nm_platform_link_get_ifindex (name);
+ if (ifindex == 0)
+ return FALSE;
+
+ return nm_platform_link_get_type (ifindex) == NM_LINK_TYPE_WIFI;
+}
+
static void
parse_prio_map_list (NMSettingVlan *s_vlan,
shvarFile *ifcfg,
@@ -4027,10 +4748,8 @@ parse_prio_map_list (NMSettingVlan *s_vlan,
if (!*iter || !strchr (*iter, ':'))
continue;
- if (!nm_setting_vlan_add_priority_str (s_vlan, map, *iter)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid %s priority map item '%s'",
- key, *iter);
- }
+ if (!nm_setting_vlan_add_priority_str (s_vlan, map, *iter))
+ PARSE_WARNING ("invalid %s priority map item '%s'", key, *iter);
}
g_strfreev (list);
}
@@ -4038,9 +4757,7 @@ parse_prio_map_list (NMSettingVlan *s_vlan,
static NMSetting *
make_vlan_setting (shvarFile *ifcfg,
const char *file,
- gboolean nm_controlled,
char **out_master,
- char **unmanaged,
NMSetting8021x **s_8021x,
GError **error)
{
@@ -4160,8 +4877,6 @@ error:
static NMConnection *
vlan_connection_from_ifcfg (const char *file,
shvarFile *ifcfg,
- gboolean nm_controlled,
- char **unmanaged,
GError **error)
{
NMConnection *connection = NULL;
@@ -4175,11 +4890,6 @@ vlan_connection_from_ifcfg (const char *file,
g_return_val_if_fail (ifcfg != NULL, NULL);
connection = nm_connection_new ();
- if (!connection) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to allocate new connection for %s.", file);
- return NULL;
- }
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_VLAN_SETTING_NAME, NULL, "Vlan");
if (!con_setting) {
@@ -4190,7 +4900,7 @@ vlan_connection_from_ifcfg (const char *file,
}
nm_connection_add_setting (connection, con_setting);
- vlan_setting = make_vlan_setting (ifcfg, file, nm_controlled, &master, unmanaged, &s_8021x, error);
+ vlan_setting = make_vlan_setting (ifcfg, file, &master, &s_8021x, error);
if (!vlan_setting) {
g_object_unref (connection);
return NULL;
@@ -4206,7 +4916,7 @@ vlan_connection_from_ifcfg (const char *file,
g_free (master);
}
- wired_setting = make_wired_setting (ifcfg, file, nm_controlled, unmanaged, &s_8021x, error);
+ wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error);
if (!wired_setting) {
g_object_unref (connection);
return NULL;
@@ -4223,36 +4933,140 @@ vlan_connection_from_ifcfg (const char *file,
return connection;
}
+static NMConnection *
+create_unhandled_connection (const char *filename, shvarFile *ifcfg,
+ const char *type, char **out_spec)
+{
+ NMConnection *connection;
+ NMSetting *s_con;
+ char *value;
+
+ g_assert (out_spec != NULL);
+
+ connection = nm_connection_new ();
+
+ /* Get NAME, UUID, etc. We need to set a connection type (generic) and add
+ * an empty type-specific setting as well, to make sure it passes
+ * nm_connection_verify() later.
+ */
+ s_con = make_connection_setting (filename, ifcfg, NM_SETTING_GENERIC_SETTING_NAME,
+ NULL, NULL);
+ nm_connection_add_setting (connection, s_con);
+
+ nm_connection_add_setting (connection, nm_setting_generic_new ());
+
+ /* Get a spec */
+ value = svGetValue (ifcfg, "HWADDR", FALSE);
+ if (value) {
+ char *lower = g_ascii_strdown (value, -1);
+ *out_spec = g_strdup_printf ("%s:mac:%s", type, lower);
+ g_free (lower);
+ g_free (value);
+ return connection;
+ }
+
+ value = svGetValue (ifcfg, "SUBCHANNELS", FALSE);
+ if (value) {
+ *out_spec = g_strdup_printf ("%s:s390-subchannels:%s", type, value);
+ g_free (value);
+ return connection;
+ }
+
+ value = svGetValue (ifcfg, "DEVICE", FALSE);
+ if (value) {
+ *out_spec = g_strdup_printf ("%s:interface-name:%s", type, value);
+ g_free (value);
+ return connection;
+ }
+
+ g_object_unref (connection);
+ return NULL;
+}
+
+char *
+uuid_from_file (const char *filename)
+{
+ const char *ifcfg_name = NULL;
+ shvarFile *ifcfg;
+ char *uuid;
+
+ g_return_val_if_fail (filename != NULL, NULL);
+
+ ifcfg_name = utils_get_ifcfg_name (filename, TRUE);
+ if (!ifcfg_name)
+ return NULL;
+
+ ifcfg = svOpenFile (filename, NULL);
+ if (!ifcfg)
+ return NULL;
+
+ /* Try for a UUID key before falling back to hashing the file name */
+ uuid = svGetValue (ifcfg, "UUID", FALSE);
+ if (!uuid || !strlen (uuid)) {
+ g_free (uuid);
+ uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName);
+ }
+
+ svCloseFile (ifcfg);
+ return uuid;
+}
+
+static void
+check_dns_search_domains (shvarFile *ifcfg, NMSetting *s_ip4, NMSetting *s_ip6)
+{
+ if (!s_ip6)
+ return;
+
+ /* If there is no IPv4 config or it doesn't contain DNS searches,
+ * read DOMAIN and put the domains into IPv6.
+ */
+ if (!s_ip4 || nm_setting_ip4_config_get_num_dns_searches (NM_SETTING_IP4_CONFIG (s_ip4)) == 0) {
+ /* DNS searches */
+ char *value = svGetValue (ifcfg, "DOMAIN", FALSE);
+ if (value) {
+ char **searches = g_strsplit (value, " ", 0);
+ if (searches) {
+ char **item;
+ for (item = searches; *item; item++) {
+ if (strlen (*item)) {
+ if (!nm_setting_ip6_config_add_dns_search (NM_SETTING_IP6_CONFIG (s_ip6), *item))
+ PARSE_WARNING ("duplicate DNS domain '%s'", *item);
+ }
+ }
+ g_strfreev (searches);
+ }
+ g_free (value);
+ }
+ }
+}
+
NMConnection *
connection_from_file (const char *filename,
const char *network_file, /* for unit tests only */
const char *test_type, /* for unit tests only */
const char *iscsiadm_path, /* for unit tests only */
- char **unmanaged,
- char **keyfile,
- char **routefile,
- char **route6file,
- GError **out_error,
- gboolean *ignore_error)
+ char **out_unhandled,
+ char **out_keyfile,
+ char **out_routefile,
+ char **out_route6file,
+ GError **error,
+ gboolean *out_ignore_error)
{
NMConnection *connection = NULL;
shvarFile *parsed;
- char *type, *nmc = NULL, *bootproto;
- NMSetting *s_ip4, *s_ip6, *s_port;
+ char *type, *devtype, *bootproto;
+ NMSetting *s_ip4, *s_ip6, *s_port, *s_dcb = NULL;
const char *ifcfg_name = NULL;
- gboolean nm_controlled = TRUE;
- gboolean can_disable_ip4 = FALSE;
- GError *error = NULL;
g_return_val_if_fail (filename != NULL, NULL);
- g_return_val_if_fail (unmanaged != NULL, NULL);
- g_return_val_if_fail (*unmanaged == NULL, NULL);
- g_return_val_if_fail (keyfile != NULL, NULL);
- g_return_val_if_fail (*keyfile == NULL, NULL);
- g_return_val_if_fail (routefile != NULL, NULL);
- g_return_val_if_fail (*routefile == NULL, NULL);
- g_return_val_if_fail (route6file != NULL, NULL);
- g_return_val_if_fail (*route6file == NULL, NULL);
+ if (out_unhandled)
+ g_return_val_if_fail (*out_unhandled == NULL, NULL);
+ if (out_keyfile)
+ g_return_val_if_fail (*out_keyfile == NULL, NULL);
+ if (out_routefile)
+ g_return_val_if_fail (*out_routefile == NULL, NULL);
+ if (out_route6file)
+ g_return_val_if_fail (*out_route6file == NULL, NULL);
/* Non-NULL only for unit tests; normally use /etc/sysconfig/network */
if (!network_file)
@@ -4263,33 +5077,52 @@ connection_from_file (const char *filename,
ifcfg_name = utils_get_ifcfg_name (filename, TRUE);
if (!ifcfg_name) {
- g_set_error (out_error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Ignoring connection '%s' because it's not an ifcfg file.", filename);
return NULL;
}
- parsed = svNewFile (filename);
- if (!parsed) {
- g_set_error (out_error, IFCFG_PLUGIN_ERROR, 0,
- "Couldn't parse file '%s'", filename);
+ parsed = svOpenFile (filename, error);
+ if (!parsed)
return NULL;
+
+ if (!svTrueValue (parsed, "NM_CONTROLLED", TRUE)) {
+ g_assert (out_unhandled != NULL);
+
+ connection = create_unhandled_connection (filename, parsed, "unmanaged", out_unhandled);
+ if (!connection)
+ PARSE_WARNING ("NM_CONTROLLED was false but device was not uniquely identified; device will be managed");
+ goto done;
+ }
+
+ type = NULL;
+
+ devtype = svGetValue (parsed, "DEVICETYPE", FALSE);
+ if (devtype) {
+ if (!strcasecmp (devtype, TYPE_TEAM))
+ type = g_strdup (TYPE_TEAM);
+ else if (!strcasecmp (devtype, TYPE_TEAM_PORT))
+ type = g_strdup (TYPE_ETHERNET);
+ g_free (devtype);
}
- type = svGetValue (parsed, "TYPE", FALSE);
+ if (!type)
+ type = svGetValue (parsed, "TYPE", FALSE);
+
if (!type) {
char *device;
device = svGetValue (parsed, "DEVICE", FALSE);
if (!device) {
- g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"File '%s' had neither TYPE nor DEVICE keys.", filename);
goto done;
}
if (!strcmp (device, "lo")) {
- if (ignore_error)
- *ignore_error = TRUE;
- g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
+ if (out_ignore_error)
+ *out_ignore_error = TRUE;
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Ignoring loopback device config.");
g_free (device);
goto done;
@@ -4300,8 +5133,7 @@ connection_from_file (const char *filename,
type = g_strdup (TYPE_BOND);
else if (is_vlan_device (device, parsed))
type = g_strdup (TYPE_VLAN);
- /* Test wireless extensions */
- else if (wifi_utils_is_wifi (device, NULL))
+ else if (is_wifi_device (device, parsed))
type = g_strdup (TYPE_WIRELESS);
else
type = g_strdup (TYPE_ETHERNET);
@@ -4322,90 +5154,82 @@ connection_from_file (const char *filename,
}
}
- nmc = svGetValue (parsed, "NM_CONTROLLED", FALSE);
- if (nmc) {
- char *lower;
-
- lower = g_ascii_strdown (nmc, -1);
- g_free (nmc);
-
- if (!strcmp (lower, "no") || !strcmp (lower, "n") || !strcmp (lower, "false"))
- nm_controlled = FALSE;
- g_free (lower);
- }
-
if (svTrueValue (parsed, "BONDING_MASTER", FALSE) &&
strcasecmp (type, TYPE_BOND)) {
- g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"BONDING_MASTER=yes key only allowed in TYPE=bond connections");
goto done;
}
/* Construct the connection */
if (!strcasecmp (type, TYPE_ETHERNET))
- connection = wired_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
+ connection = wired_connection_from_ifcfg (filename, parsed, error);
else if (!strcasecmp (type, TYPE_WIRELESS))
- connection = wireless_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
+ connection = wireless_connection_from_ifcfg (filename, parsed, error);
else if (!strcasecmp (type, TYPE_INFINIBAND))
- connection = infiniband_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
+ connection = infiniband_connection_from_ifcfg (filename, parsed, error);
else if (!strcasecmp (type, TYPE_BOND))
- connection = bond_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
+ connection = bond_connection_from_ifcfg (filename, parsed, error);
+ else if (!strcasecmp (type, TYPE_TEAM))
+ connection = team_connection_from_ifcfg (filename, parsed, error);
else if (!strcasecmp (type, TYPE_VLAN))
- connection = vlan_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
+ connection = vlan_connection_from_ifcfg (filename, parsed, error);
else if (!strcasecmp (type, TYPE_BRIDGE))
- connection = bridge_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
+ connection = bridge_connection_from_ifcfg (filename, parsed, error);
else {
- g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
- "Unknown connection type '%s'", type);
- }
+ g_assert (out_unhandled != NULL);
- if (nm_controlled) {
- g_free (*unmanaged);
- *unmanaged = NULL;
+ connection = create_unhandled_connection (filename, parsed, "unrecognized", out_unhandled);
+ if (!connection)
+ PARSE_WARNING ("connection type was unrecognized but device was not uniquely identified; device may be managed");
+ goto done;
}
-
g_free (type);
- /* Don't bother reading the connection fully if it's unmanaged or ignored */
- if (!connection || *unmanaged)
+ if (!connection)
goto done;
- s_ip6 = make_ip6_setting (parsed, network_file, iscsiadm_path, &error);
- if (error) {
+ s_ip6 = make_ip6_setting (parsed, network_file, iscsiadm_path, error);
+ if (!s_ip6) {
g_object_unref (connection);
connection = NULL;
goto done;
- } else if (s_ip6 && utils_ignore_ip_config (connection)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignoring IP6 configuration");
- g_object_unref (s_ip6);
- } else if (s_ip6) {
- const char *method;
-
+ } else
nm_connection_add_setting (connection, s_ip6);
- method = nm_setting_ip6_config_get_method (NM_SETTING_IP6_CONFIG (s_ip6));
- if (method && strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE))
- can_disable_ip4 = TRUE;
- }
- s_ip4 = make_ip4_setting (parsed, network_file, iscsiadm_path, can_disable_ip4, &error);
- if (error) {
+ s_ip4 = make_ip4_setting (parsed, network_file, iscsiadm_path, error);
+ if (!s_ip4) {
g_object_unref (connection);
connection = NULL;
goto done;
- } else if (s_ip4 && utils_ignore_ip_config (connection)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: ignoring IP4 configuration");
- g_object_unref (s_ip4);
- } else if (s_ip4)
+ } else {
+ read_aliases (NM_SETTING_IP4_CONFIG (s_ip4), filename, network_file);
nm_connection_add_setting (connection, s_ip4);
+ }
+
+ /* There is only one DOMAIN variable and it is read and put to IPv4 config
+ * But if IPv4 is disabled or the config fails for some reason, we read
+ * DOMAIN and put the values into IPv6 config instead.
+ */
+ check_dns_search_domains (parsed, s_ip4, s_ip6);
/* Bridge port? */
- s_port = make_bridge_port_setting (parsed, &error);
- if (error) {
+ s_port = make_bridge_port_setting (parsed);
+ if (s_port)
+ nm_connection_add_setting (connection, s_port);
+
+ /* Team port? */
+ s_port = make_team_port_setting (parsed);
+ if (s_port)
+ nm_connection_add_setting (connection, s_port);
+
+ if (!make_dcb_setting (parsed, network_file, &s_dcb, error)) {
g_object_unref (connection);
connection = NULL;
goto done;
- } else if (s_port)
- nm_connection_add_setting (connection, s_port);
+ }
+ if (s_dcb)
+ nm_connection_add_setting (connection, s_dcb);
/* iSCSI / ibft connections are read-only since their settings are
* stored in NVRAM and can only be changed in BIOS.
@@ -4423,21 +5247,22 @@ connection_from_file (const char *filename,
}
g_free (bootproto);
- if (!nm_connection_verify (connection, &error)) {
+ nm_utils_normalize_connection (connection, TRUE);
+
+ if (!nm_connection_verify (connection, error)) {
g_object_unref (connection);
connection = NULL;
}
- *keyfile = utils_get_keys_path (filename);
- *routefile = utils_get_route_path (filename);
- *route6file = utils_get_route6_path (filename);
+ if (out_keyfile)
+ *out_keyfile = utils_get_keys_path (filename);
+ if (out_routefile)
+ *out_routefile = utils_get_route_path (filename);
+ if (out_route6file)
+ *out_route6file = utils_get_route6_path (filename);
done:
svCloseFile (parsed);
- if (error && out_error)
- *out_error = error;
- else
- g_clear_error (&error);
return connection;
}
diff --git a/src/settings/plugins/ifcfg-rh/reader.h b/src/settings/plugins/ifcfg-rh/reader.h
index 97c727cc7..371f4504f 100644
--- a/src/settings/plugins/ifcfg-rh/reader.h
+++ b/src/settings/plugins/ifcfg-rh/reader.h
@@ -30,11 +30,13 @@ NMConnection *connection_from_file (const char *filename,
const char *network_file, /* for unit tests only */
const char *test_type, /* for unit tests only */
const char *iscsiadm_path, /* for unit tests only */
- char **unmanaged,
- char **keyfile,
- char **routefile,
- char **route6file,
+ char **out_unhandled,
+ char **out_keyfile,
+ char **out_routefile,
+ char **out_route6file,
GError **error,
- gboolean *ignore_error);
+ gboolean *out_ignore_error);
+
+char *uuid_from_file (const char *filename);
#endif /* __READER_H__ */
diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c
index cdbd7f24d..4e8e29ce5 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.c
+++ b/src/settings/plugins/ifcfg-rh/shvar.c
@@ -1,15 +1,10 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* shvar.c
*
* Implementation of non-destructively reading/writing files containing
* only shell variable declarations and full-line comments.
*
- * Includes explicit inheritance mechanism intended for use with
- * Red Hat Linux ifcfg-* files. There is no protection against
- * inheritance loops; they will generally cause stack overflows.
- * Furthermore, they are only intended for one level of inheritance;
- * the value setting algorithm assumes this.
- *
* Copyright 1999,2000 Red Hat, Inc.
*
* This is free software; you can redistribute it and/or modify it
@@ -28,6 +23,7 @@
*
*/
+#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@@ -39,103 +35,162 @@
#include "shvar.h"
/* Open the file <name>, returning a shvarFile on success and NULL on failure.
- Add a wrinkle to let the caller specify whether or not to create the file
- (actually, return a structure anyway) if it doesn't exist. */
+ * Add a wrinkle to let the caller specify whether or not to create the file
+ * (actually, return a structure anyway) if it doesn't exist.
+ */
static shvarFile *
-svOpenFile(const char *name, gboolean create)
+svOpenFileInternal (const char *name, gboolean create, GError **error)
{
- shvarFile *s = NULL;
- int closefd = 0;
-
- s = g_malloc0(sizeof(shvarFile));
-
- s->fd = -1;
- if (create)
- s->fd = open(name, O_RDWR); /* NOT O_CREAT */
-
- if (!create || s->fd == -1) {
- /* try read-only */
- s->fd = open(name, O_RDONLY); /* NOT O_CREAT */
- if (s->fd != -1) closefd = 1;
- }
- s->fileName = g_strdup(name);
-
- if (s->fd != -1) {
- struct stat buf;
- char *p, *q;
-
- if (fstat(s->fd, &buf) < 0) goto bail;
- s->arena = g_malloc0(buf.st_size + 1);
-
- if (read(s->fd, s->arena, buf.st_size) < 0) goto bail;
-
- /* we'd use g_strsplit() here, but we want a list, not an array */
- for(p = s->arena; (q = strchr(p, '\n')) != NULL; p = q + 1) {
- s->lineList = g_list_append(s->lineList, g_strndup(p, q - p));
+ shvarFile *s = NULL;
+ gboolean closefd = FALSE;
+ int errsv = 0;
+
+ s = g_slice_new0 (shvarFile);
+
+ s->fd = -1;
+ if (create)
+ s->fd = open (name, O_RDWR); /* NOT O_CREAT */
+
+ if (!create || s->fd == -1) {
+ /* try read-only */
+ s->fd = open (name, O_RDONLY); /* NOT O_CREAT */
+ if (s->fd == -1)
+ errsv = errno;
+ else
+ closefd = TRUE;
}
-
- /* closefd is set if we opened the file read-only, so go ahead and
- close it, because we can't write to it anyway */
- if (closefd) {
- close(s->fd);
- s->fd = -1;
+ s->fileName = g_strdup (name);
+
+ if (s->fd != -1) {
+ struct stat buf;
+ char *arena, *p, *q;
+ ssize_t nread, total = 0;
+
+ if (fstat (s->fd, &buf) < 0) {
+ errsv = errno;
+ goto bail;
+ }
+ arena = g_malloc (buf.st_size + 1);
+ arena[buf.st_size] = '\0';
+
+ while (total < buf.st_size) {
+ nread = read (s->fd, arena + total, buf.st_size - total);
+ if (nread == -1 && errno == EINTR)
+ continue;
+ if (nread <= 0) {
+ errsv = errno;
+ g_free (arena);
+ goto bail;
+ }
+ total += nread;
+ }
+
+ /* we'd use g_strsplit() here, but we want a list, not an array */
+ for (p = arena; (q = strchr (p, '\n')) != NULL; p = q + 1)
+ s->lineList = g_list_append (s->lineList, g_strndup (p, q - p));
+ g_free (arena);
+
+ /* closefd is set if we opened the file read-only, so go ahead and
+ * close it, because we can't write to it anyway
+ */
+ if (closefd) {
+ close (s->fd);
+ s->fd = -1;
+ }
+
+ return s;
}
- return s;
- }
+ if (create)
+ return s;
- if (create) {
- return s;
- }
+ bail:
+ if (s->fd != -1)
+ close (s->fd);
+ g_free (s->fileName);
+ g_slice_free (shvarFile, s);
-bail:
- if (s->fd != -1) close(s->fd);
- g_free (s->arena);
- g_free (s->fileName);
- g_free (s);
- return NULL;
+ g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errsv),
+ "Could not read file '%s': %s",
+ name, errsv ? strerror (errsv) : "Unknown error");
+ return NULL;
}
/* Open the file <name>, return shvarFile on success, NULL on failure */
shvarFile *
-svNewFile(const char *name)
+svOpenFile (const char *name, GError **error)
{
- return svOpenFile(name, FALSE);
+ return svOpenFileInternal (name, FALSE, error);
}
/* Create a new file structure, returning actual data if the file exists,
- * and a suitable starting point if it doesn't. */
+ * and a suitable starting point if it doesn't.
+ */
shvarFile *
-svCreateFile(const char *name)
+svCreateFile (const char *name)
{
- return svOpenFile(name, TRUE);
+ return svOpenFileInternal (name, TRUE, NULL);
}
/* remove escaped characters in place */
void
-svUnescape(char *s) {
- int len, i;
-
- len = strlen(s);
- if (len >= 2 && (s[0] == '"' || s[0] == '\'') && s[0] == s[len-1]) {
- i = len - 2;
- if (i == 0)
- s[0] = '\0';
- else {
- memmove(s, s+1, i);
- s[i+1] = '\0';
- len = i;
+svUnescape (char *s)
+{
+ size_t len, idx_rd = 0, idx_wr = 0;
+ char c;
+
+ len = strlen (s);
+ if (len < 2) {
+ if (s[0] == '\\')
+ s[0] = '\0';
+ return;
}
- }
- for (i = 0; i < len; i++) {
- if (s[i] == '\\') {
- memmove(s+i, s+i+1, len-(i+1));
- len--;
+
+ if ((s[0] == '"' || s[0] == '\'') && s[0] == s[len-1]) {
+ if (len == 2) {
+ s[0] = '\0';
+ return;
+ }
+ if (len == 3) {
+ if (s[1] == '\\') {
+ s[0] = '\0';
+ } else {
+ s[0] = s[1];
+ s[1] = '\0';
+ }
+ return;
+ }
+ s[--len] = '\0';
+ idx_rd = 1;
+ } else {
+ /* seek for the first escape... */
+ char *p = strchr (s, '\\');
+
+ if (!p)
+ return;
+ if (p[1] == '\0') {
+ p[0] = '\0';
+ return;
+ }
+ idx_wr = idx_rd = (p - s);
}
- s[len] = '\0';
- }
-}
+ /* idx_rd points to the first escape. Walk the string and shift the
+ * characters from idx_rd to idx_wr.
+ */
+ while ((c = s[idx_rd++])) {
+ if (c == '\\') {
+ if (s[idx_rd] == '\0') {
+ s[idx_wr] = '\0';
+ return;
+ }
+ s[idx_wr++] = s[idx_rd++];
+ continue;
+ }
+ s[idx_wr++] = c;
+ }
+ s[idx_wr] = '\0';
+}
/* create a new string with all necessary characters escaped.
* caller must free returned string
@@ -143,42 +198,46 @@ svUnescape(char *s) {
static const char escapees[] = "\"'\\$~`"; /* must be escaped */
static const char spaces[] = " \t|&;()<>"; /* only require "" */
static const char newlines[] = "\n\r"; /* will be removed */
+
char *
-svEscape(const char *s) {
- char *new;
- int i, j, mangle = 0, space = 0, newline = 0;
- int newlen, slen;
- static int esclen, splen;
-
- if (!esclen) esclen = strlen(escapees);
- if (!splen) splen = strlen(spaces);
- slen = strlen(s);
-
- for (i = 0; i < slen; i++) {
- if (strchr(escapees, s[i])) mangle++;
- if (strchr(spaces, s[i])) space++;
- if (strchr(newlines, s[i])) newline++;
- }
- if (!mangle && !space && !newline) return strdup(s);
-
- newlen = slen + mangle - newline + 3; /* 3 is extra ""\0 */
- new = g_malloc0(newlen);
- if (!new) return NULL;
-
- j = 0;
- new[j++] = '"';
- for (i = 0; i < slen; i++) {
- if (strchr(newlines, s[i]))
- continue;
- if (strchr(escapees, s[i])) {
- new[j++] = '\\';
+svEscape (const char *s)
+{
+ char *new;
+ int i, j, mangle = 0, space = 0, newline = 0;
+ int newlen, slen;
+
+ slen = strlen (s);
+
+ for (i = 0; i < slen; i++) {
+ if (strchr (escapees, s[i]))
+ mangle++;
+ if (strchr (spaces, s[i]))
+ space++;
+ if (strchr (newlines, s[i]))
+ newline++;
}
- new[j++] = s[i];
- }
- new[j++] = '"';
- g_assert(j == slen + mangle - newline + 2); /* j is the index of the '\0' */
+ if (!mangle && !space && !newline)
+ return strdup (s);
+
+ newlen = slen + mangle - newline + 3; /* 3 is extra ""\0 */
+ new = g_malloc (newlen);
+
+ j = 0;
+ new[j++] = '"';
+ for (i = 0; i < slen; i++) {
+ if (strchr (newlines, s[i]))
+ continue;
+ if (strchr (escapees, s[i])) {
+ new[j++] = '\\';
+ }
+ new[j++] = s[i];
+ }
+ new[j++] = '"';
+ new[j++] = '\0'
+;
+ g_assert (j == slen + mangle - newline + 3);
- return new;
+ return new;
}
/* Get the value associated with the key, and leave the current pointer
@@ -186,215 +245,190 @@ svEscape(const char *s) {
* be freed by the caller.
*/
char *
-svGetValue(shvarFile *s, const char *key, gboolean verbatim)
+svGetValue (shvarFile *s, const char *key, gboolean verbatim)
{
- char *value = NULL;
- char *line;
- char *keyString;
- int len;
-
- g_assert(s);
- g_assert(key);
-
- keyString = g_malloc0(strlen(key) + 2);
- strcpy(keyString, key);
- keyString[strlen(key)] = '=';
- len = strlen(keyString);
-
- for (s->current = s->lineList; s->current; s->current = s->current->next) {
- line = s->current->data;
- if (!strncmp(keyString, line, len)) {
- value = g_strdup(line + len);
- if (!verbatim)
- svUnescape(value);
- break;
+ char *value = NULL;
+ char *line;
+ char *keyString;
+ int len;
+
+ g_return_val_if_fail (s != NULL, NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+
+ keyString = g_strdup_printf ("%s=", key);
+ len = strlen (keyString);
+
+ for (s->current = s->lineList; s->current; s->current = s->current->next) {
+ line = s->current->data;
+ if (!strncmp (keyString, line, len)) {
+ value = g_strdup (line + len);
+ if (!verbatim)
+ svUnescape (value);
+ break;
+ }
}
- }
- g_free(keyString);
+ g_free (keyString);
- if (value) {
- if (value[0]) {
- return value;
+ if (value && value[0]) {
+ return value;
} else {
- g_free(value);
- return NULL;
+ g_free (value);
+ return NULL;
}
- }
- if (s->parent) value = svGetValue(s->parent, key, verbatim);
- return value;
}
-/* return 1 if <key> resolves to any truth value (e.g. "yes", "y", "true")
- * return 0 if <key> resolves to any non-truth value (e.g. "no", "n", "false")
+/* return TRUE if <key> resolves to any truth value (e.g. "yes", "y", "true")
+ * return FALSE if <key> resolves to any non-truth value (e.g. "no", "n", "false")
* return <default> otherwise
*/
-int
-svTrueValue(shvarFile *s, const char *key, int def)
+gboolean
+svTrueValue (shvarFile *s, const char *key, gboolean def)
{
- char *tmp;
- int returnValue = def;
-
- tmp = svGetValue(s, key, FALSE);
- if (!tmp) return returnValue;
-
- if ( (!strcasecmp("yes", tmp)) ||
- (!strcasecmp("true", tmp)) ||
- (!strcasecmp("t", tmp)) ||
- (!strcasecmp("y", tmp)) ) returnValue = 1;
- else
- if ( (!strcasecmp("no", tmp)) ||
- (!strcasecmp("false", tmp)) ||
- (!strcasecmp("f", tmp)) ||
- (!strcasecmp("n", tmp)) ) returnValue = 0;
-
- g_free (tmp);
- return returnValue;
+ char *tmp;
+ gboolean returnValue = def;
+
+ tmp = svGetValue (s, key, FALSE);
+ if (!tmp)
+ return returnValue;
+
+ if ( !g_ascii_strcasecmp ("yes", tmp)
+ || !g_ascii_strcasecmp ("true", tmp)
+ || !g_ascii_strcasecmp ("t", tmp)
+ || !g_ascii_strcasecmp ("y", tmp))
+ returnValue = TRUE;
+ else if ( !g_ascii_strcasecmp ("no", tmp)
+ || !g_ascii_strcasecmp ("false", tmp)
+ || !g_ascii_strcasecmp ("f", tmp)
+ || !g_ascii_strcasecmp ("n", tmp))
+ returnValue = FALSE;
+
+ g_free (tmp);
+ return returnValue;
}
/* Set the variable <key> equal to the value <value>.
* If <key> does not exist, and the <current> pointer is set, append
- * the key=value pair after that line. Otherwise, prepend the pair
- * to the top of the file. Here's the algorithm, as the C code
- * seems to be rather dense:
- *
- * if (value == NULL), then:
- * if val2 (parent): change line to key= or append line key=
- * if val1 (this) : delete line
- * else noop
- * else use this table:
- * val2
- * NULL value other
- * v NULL append line noop append line
- * a
- * l value noop noop noop
- * 1
- * other change line delete line change line
- *
- * No changes are ever made to the parent config file, only to the
- * specific file passed on the command line.
- *
+ * the key=value pair after that line. Otherwise, append the pair
+ * to the bottom of the file.
*/
void
-svSetValue(shvarFile *s, const char *key, const char *value, gboolean verbatim)
+svSetValue (shvarFile *s, const char *key, const char *value, gboolean verbatim)
{
- char *newval = NULL, *val1 = NULL, *val2 = NULL;
- char *keyValue;
-
- g_assert(s);
- g_assert(key);
- /* value may be NULL */
-
- if (value)
- newval = verbatim ? g_strdup(value) : svEscape(value);
- keyValue = g_strdup_printf("%s=%s", key, newval ? newval : "");
-
- val1 = svGetValue(s, key, FALSE);
- if (val1 && newval && !strcmp(val1, newval)) goto bail;
- if (s->parent) val2 = svGetValue(s->parent, key, FALSE);
-
- if (!newval || !newval[0]) {
- /* delete value somehow */
- if (val2) {
- /* change/append line to get key= */
- if (s->current) s->current->data = keyValue;
- else s->lineList = g_list_append(s->lineList, keyValue);
- s->modified = 1;
- goto end;
- } else if (val1) {
- /* delete line */
- s->lineList = g_list_remove_link(s->lineList, s->current);
- g_list_free_1(s->current);
- s->modified = 1;
+ char *newval = NULL, *oldval = NULL;
+ char *keyValue;
+
+ g_return_if_fail (s != NULL);
+ g_return_if_fail (key != NULL);
+ /* value may be NULL */
+
+ if (value)
+ newval = verbatim ? g_strdup (value) : svEscape (value);
+ keyValue = g_strdup_printf ("%s=%s", key, newval ? newval : "");
+
+ oldval = svGetValue (s, key, FALSE);
+
+ if (!newval || !newval[0]) {
+ /* delete value */
+ if (oldval) {
+ /* delete line */
+ s->lineList = g_list_remove_link (s->lineList, s->current);
+ g_list_free_1 (s->current);
+ s->modified = TRUE;
+ }
+ goto bail; /* do not need keyValue */
+ }
+
+ if (!oldval) {
+ /* append line */
+ s->lineList = g_list_append (s->lineList, keyValue);
+ s->modified = TRUE;
+ goto end;
+ }
+
+ if (strcmp (oldval, newval) != 0) {
+ /* change line */
+ if (s->current)
+ s->current->data = keyValue;
+ else
+ s->lineList = g_list_append (s->lineList, keyValue);
+ s->modified = TRUE;
}
- goto bail; /* do not need keyValue */
- }
-
- if (!val1) {
- if (val2 && !strcmp(val2, newval)) goto end;
- /* append line */
- s->lineList = g_list_append(s->lineList, keyValue);
- s->modified = 1;
+
+ end:
+ g_free (newval);
+ g_free (oldval);
+ return;
+
+ bail:
+ g_free (keyValue);
goto end;
- }
-
- /* deal with a whole line of noops */
- if (val1 && !strcmp(val1, newval)) goto end;
-
- /* At this point, val1 && val1 != value */
- if (val2 && !strcmp(val2, newval)) {
- /* delete line */
- s->lineList = g_list_remove_link(s->lineList, s->current);
- g_list_free_1(s->current);
- s->modified = 1;
- goto bail; /* do not need keyValue */
- } else {
- /* change line */
- if (s->current) s->current->data = keyValue;
- else s->lineList = g_list_append(s->lineList, keyValue);
- s->modified = 1;
- }
-
-end:
- g_free(newval);
- g_free(val1);
- g_free(val2);
- return;
-
-bail:
- g_free (keyValue);
- goto end;
}
-/* Write the current contents iff modified. Returns -1 on error
- * and 0 on success. Do not write if no values have been modified.
+/* Write the current contents iff modified. Returns FALSE on error
+ * and TRUE on success. Do not write if no values have been modified.
* The mode argument is only used if creating the file, not if
* re-writing an existing file, and is passed unchanged to the
* open() syscall.
*/
-int
-svWriteFile(shvarFile *s, int mode)
+gboolean
+svWriteFile (shvarFile *s, int mode, GError **error)
{
- FILE *f;
- int tmpfd;
-
- if (s->modified) {
- if (s->fd == -1)
- s->fd = open(s->fileName, O_WRONLY|O_CREAT, mode);
- if (s->fd == -1)
- return -1;
- if (ftruncate(s->fd, 0) < 0)
- return -1;
-
- tmpfd = dup(s->fd);
- f = fdopen(tmpfd, "w");
- fseek(f, 0, SEEK_SET);
- for (s->current = s->lineList; s->current; s->current = s->current->next) {
- char *line = s->current->data;
- fprintf(f, "%s\n", line);
+ FILE *f;
+ int tmpfd;
+
+ if (s->modified) {
+ if (s->fd == -1)
+ s->fd = open (s->fileName, O_WRONLY | O_CREAT, mode);
+ if (s->fd == -1) {
+ int errsv = errno;
+
+ g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errsv),
+ "Could not open file '%s' for writing: %s",
+ s->fileName, strerror (errsv));
+ return FALSE;
+ }
+ if (ftruncate (s->fd, 0) < 0) {
+ int errsv = errno;
+
+ g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errsv),
+ "Could not overwrite file '%s': %s",
+ s->fileName, strerror (errsv));
+ return FALSE;
+ }
+
+ tmpfd = dup (s->fd);
+ if (tmpfd == -1) {
+ int errsv = errno;
+
+ g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errsv),
+ "Internal error writing file '%s': %s",
+ s->fileName, strerror (errsv));
+ return FALSE;
+ }
+ f = fdopen (tmpfd, "w");
+ fseek (f, 0, SEEK_SET);
+ for (s->current = s->lineList; s->current; s->current = s->current->next) {
+ char *line = s->current->data;
+ fprintf (f, "%s\n", line);
+ }
+ fclose (f);
}
- fclose(f);
- }
- return 0;
+ return TRUE;
}
-
-/* Close the file descriptor (if open) and delete the shvarFile.
- * Returns -1 on error and 0 on success.
- */
-int
-svCloseFile(shvarFile *s)
-{
- g_assert(s);
+/* Close the file descriptor (if open) and free the shvarFile. */
+void
+svCloseFile (shvarFile *s)
+{
+ g_return_if_fail (s != NULL);
- if (s->fd != -1) close(s->fd);
+ if (s->fd != -1)
+ close (s->fd);
- g_free(s->arena);
- g_free(s->fileName);
- g_list_foreach (s->lineList, (GFunc) g_free, NULL);
- g_list_free(s->lineList); /* implicitly frees s->current */
- g_free(s);
- return 0;
+ g_free (s->fileName);
+ g_list_free_full (s->lineList, g_free); /* implicitly frees s->current */
+ g_slice_free (shvarFile, s);
}
diff --git a/src/settings/plugins/ifcfg-rh/shvar.h b/src/settings/plugins/ifcfg-rh/shvar.h
index 4b650d2a9..4cbf1a31a 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.h
+++ b/src/settings/plugins/ifcfg-rh/shvar.h
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* shvar.h
*
@@ -32,79 +33,61 @@
#include <glib.h>
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
typedef struct _shvarFile shvarFile;
struct _shvarFile {
- char *fileName; /* read-only */
- int fd; /* read-only */
- char *arena; /* ignore */
- GList *lineList; /* read-only */
- GList *current; /* set implicitly or explicitly,
- points to element of lineList */
- shvarFile *parent; /* set explicitly */
- int modified; /* ignore */
+ char *fileName; /* read-only */
+ int fd; /* read-only */
+ GList *lineList; /* read-only */
+ GList *current; /* set implicitly or explicitly, points to element of lineList */
+ gboolean modified; /* ignore */
};
-/* Create the file <name>, return shvarFile on success, NULL on failure */
-shvarFile *
-svCreateFile(const char *name);
+/* Create the file <name>, return a shvarFile (never fails) */
+shvarFile *svCreateFile (const char *name);
/* Open the file <name>, return shvarFile on success, NULL on failure */
-shvarFile *
-svNewFile(const char *name);
+shvarFile *svOpenFile (const char *name, GError **error);
/* Get the value associated with the key, and leave the current pointer
* pointing at the line containing the value. The char* returned MUST
* be freed by the caller.
*/
-char *
-svGetValue(shvarFile *s, const char *key, gboolean verbatim);
+char *svGetValue (shvarFile *s, const char *key, gboolean verbatim);
-/* return 1 if <key> resolves to any truth value (e.g. "yes", "y", "true")
- * return 0 if <key> resolves to any non-truth value (e.g. "no", "n", "false")
+/* return TRUE if <key> resolves to any truth value (e.g. "yes", "y", "true")
+ * return FALSE if <key> resolves to any non-truth value (e.g. "no", "n", "false")
* return <def> otherwise
*/
-int
-svTrueValue(shvarFile *s, const char *key, int def);
+gboolean svTrueValue (shvarFile *s, const char *key, gboolean def);
/* Set the variable <key> equal to the value <value>.
* If <key> does not exist, and the <current> pointer is set, append
* the key=value pair after that line. Otherwise, prepend the pair
* to the top of the file.
*/
-void
-svSetValue(shvarFile *s, const char *key, const char *value, gboolean verbatim);
+void svSetValue (shvarFile *s, const char *key, const char *value, gboolean verbatim);
-/* Write the current contents iff modified. Returns -1 on error
- * and 0 on success. Do not write if no values have been modified.
+/* Write the current contents iff modified. Returns FALSE on error
+ * and TRUE on success. Do not write if no values have been modified.
* The mode argument is only used if creating the file, not if
* re-writing an existing file, and is passed unchanged to the
* open() syscall.
*/
-int
-svWriteFile(shvarFile *s, int mode);
+gboolean svWriteFile (shvarFile *s, int mode, GError **error);
-/* Close the file descriptor (if open) and delete the shvarFile.
- * Returns -1 on error and 0 on success.
- */
-int
-svCloseFile(shvarFile *s);
+/* Close the file descriptor (if open) and free the shvarFile. */
+void svCloseFile (shvarFile *s);
/* Return a new escaped string */
-char *
-svEscape(const char *s);
+char *svEscape (const char *s);
/* Unescape a string in-place */
-void
-svUnescape(char *s);
+void svUnescape (char *s);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
#endif /* ! _SHVAR_H */
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
index d1b75fc31..e758776da 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
@@ -2,43 +2,61 @@ if ENABLE_TESTS
SUBDIRS=network-scripts
+@GNOME_CODE_COVERAGE_RULES@
+
AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(CODE_COVERAGE_CFLAGS) \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/platform \
+ -I$(top_srcdir)/src/settings \
+ -I$(top_srcdir)/src/posix-signals \
-I$(srcdir)/../ \
- $(GLIB_CFLAGS)
+ -DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DTEST_IFCFG_DIR=\"$(abs_srcdir)\" \
+ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/\" \
+ -DSYSCONFDIR=\"nonexistent\" \
+ -DSBINDIR=\"nonexistent\"
+
+AM_LDFLAGS = \
+ $(GLIB_LIBS) \
+ $(DBUS_LIBS) \
+ $(CODE_COVERAGE_LDFLAGS)
+
+AM_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/libnm-glib/libnm-glib.la
noinst_PROGRAMS = test-ifcfg-rh test-ifcfg-rh-utils
test_ifcfg_rh_SOURCES = \
- test-ifcfg-rh.c
-
-test_ifcfg_rh_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- $(DBUS_CFLAGS) \
- -DTEST_IFCFG_DIR=\"$(abs_srcdir)\" \
- -DTEST_SCRATCH_DIR=\"$(abs_builddir)/\"
+ test-ifcfg-rh.c \
+ ../errors.c \
+ ../reader.c \
+ ../shvar.c \
+ ../utils.c \
+ ../writer.c
test_ifcfg_rh_LDADD = \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/wifi/libwifi-utils.la \
- $(builddir)/../libifcfg-rh-io.la \
- $(LIBM)
- $(DBUS_LIBS)
+ $(top_builddir)/src/libNetworkManager.la
test_ifcfg_rh_utils_SOURCES = \
- test-ifcfg-rh-utils.c
+ test-ifcfg-rh-utils.c \
+ ../utils.c \
+ ../shvar.c
test_ifcfg_rh_utils_LDADD = \
- $(builddir)/../libifcfg-rh-io.la
+ $(AM_LDADD)
-check-local: test-ifcfg-rh
- $(abs_builddir)/test-ifcfg-rh-utils
- $(abs_builddir)/test-ifcfg-rh
+TESTS = test-ifcfg-rh-utils test-ifcfg-rh
EXTRA_DIST = \
iscsiadm-test-dhcp \
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
index 94c0dc69a..2018134aa 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
@@ -80,11 +80,14 @@ build_triplet = @build@
host_triplet = @host@
@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-ifcfg-rh$(EXEEXT) \
@ENABLE_TESTS_TRUE@ test-ifcfg-rh-utils$(EXEEXT)
+@ENABLE_TESTS_TRUE@TESTS = test-ifcfg-rh-utils$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-ifcfg-rh$(EXEEXT)
subdir = src/settings/plugins/ifcfg-rh/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -103,27 +106,26 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_ifcfg_rh_SOURCES_DIST = test-ifcfg-rh.c
-@ENABLE_TESTS_TRUE@am_test_ifcfg_rh_OBJECTS = \
-@ENABLE_TESTS_TRUE@ test_ifcfg_rh-test-ifcfg-rh.$(OBJEXT)
+am__test_ifcfg_rh_SOURCES_DIST = test-ifcfg-rh.c ../errors.c \
+ ../reader.c ../shvar.c ../utils.c ../writer.c
+@ENABLE_TESTS_TRUE@am_test_ifcfg_rh_OBJECTS = test-ifcfg-rh.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ errors.$(OBJEXT) reader.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ shvar.$(OBJEXT) utils.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ writer.$(OBJEXT)
test_ifcfg_rh_OBJECTS = $(am_test_ifcfg_rh_OBJECTS)
-am__DEPENDENCIES_1 =
@ENABLE_TESTS_TRUE@test_ifcfg_rh_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/wifi/libwifi-utils.la \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libifcfg-rh-io.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-am__test_ifcfg_rh_utils_SOURCES_DIST = test-ifcfg-rh-utils.c
+am__test_ifcfg_rh_utils_SOURCES_DIST = test-ifcfg-rh-utils.c \
+ ../utils.c ../shvar.c
@ENABLE_TESTS_TRUE@am_test_ifcfg_rh_utils_OBJECTS = \
-@ENABLE_TESTS_TRUE@ test-ifcfg-rh-utils.$(OBJEXT)
+@ENABLE_TESTS_TRUE@ test-ifcfg-rh-utils.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ utils.$(OBJEXT) shvar.$(OBJEXT)
test_ifcfg_rh_utils_OBJECTS = $(am_test_ifcfg_rh_utils_OBJECTS)
-@ENABLE_TESTS_TRUE@test_ifcfg_rh_utils_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libifcfg-rh-io.la
+@ENABLE_TESTS_TRUE@test_ifcfg_rh_utils_DEPENDENCIES = $(AM_LDADD)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -201,6 +203,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DIST_SUBDIRS = network-scripts
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
@@ -253,12 +277,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -283,7 +310,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -328,12 +354,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -350,6 +380,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -377,11 +409,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -396,6 +433,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -458,6 +496,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -468,37 +507,57 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@SUBDIRS = network-scripts
@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
+@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_CFLAGS) \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-glib \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/ \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/logging \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/platform \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/settings \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/posix-signals \
@ENABLE_TESTS_TRUE@ -I$(srcdir)/../ \
-@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS)
+@ENABLE_TESTS_TRUE@ -DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ -DTEST_IFCFG_DIR=\"$(abs_srcdir)\" \
+@ENABLE_TESTS_TRUE@ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/\" \
+@ENABLE_TESTS_TRUE@ -DSYSCONFDIR=\"nonexistent\" \
+@ENABLE_TESTS_TRUE@ -DSBINDIR=\"nonexistent\"
-@ENABLE_TESTS_TRUE@test_ifcfg_rh_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-ifcfg-rh.c
+@ENABLE_TESTS_TRUE@AM_LDFLAGS = \
+@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
+@ENABLE_TESTS_TRUE@ $(DBUS_LIBS) \
+@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_LDFLAGS)
-@ENABLE_TESTS_TRUE@test_ifcfg_rh_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ $(AM_CPPFLAGS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
-@ENABLE_TESTS_TRUE@ -DTEST_IFCFG_DIR=\"$(abs_srcdir)\" \
-@ENABLE_TESTS_TRUE@ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/\"
+@ENABLE_TESTS_TRUE@AM_LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la
+
+@ENABLE_TESTS_TRUE@test_ifcfg_rh_SOURCES = \
+@ENABLE_TESTS_TRUE@ test-ifcfg-rh.c \
+@ENABLE_TESTS_TRUE@ ../errors.c \
+@ENABLE_TESTS_TRUE@ ../reader.c \
+@ENABLE_TESTS_TRUE@ ../shvar.c \
+@ENABLE_TESTS_TRUE@ ../utils.c \
+@ENABLE_TESTS_TRUE@ ../writer.c
@ENABLE_TESTS_TRUE@test_ifcfg_rh_LDADD = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/wifi/libwifi-utils.la \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libifcfg-rh-io.la \
-@ENABLE_TESTS_TRUE@ $(LIBM)
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
@ENABLE_TESTS_TRUE@test_ifcfg_rh_utils_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-ifcfg-rh-utils.c
+@ENABLE_TESTS_TRUE@ test-ifcfg-rh-utils.c \
+@ENABLE_TESTS_TRUE@ ../utils.c \
+@ENABLE_TESTS_TRUE@ ../shvar.c
@ENABLE_TESTS_TRUE@test_ifcfg_rh_utils_LDADD = \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libifcfg-rh-io.la
+@ENABLE_TESTS_TRUE@ $(AM_LDADD)
@ENABLE_TESTS_TRUE@EXTRA_DIST = \
@ENABLE_TESTS_TRUE@ iscsiadm-test-dhcp \
@@ -568,8 +627,13 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shvar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ifcfg-rh-utils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ifcfg_rh-test-ifcfg-rh.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ifcfg-rh.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writer.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -592,19 +656,75 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-test_ifcfg_rh-test-ifcfg-rh.o: test-ifcfg-rh.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_ifcfg_rh_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_ifcfg_rh-test-ifcfg-rh.o -MD -MP -MF $(DEPDIR)/test_ifcfg_rh-test-ifcfg-rh.Tpo -c -o test_ifcfg_rh-test-ifcfg-rh.o `test -f 'test-ifcfg-rh.c' || echo '$(srcdir)/'`test-ifcfg-rh.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ifcfg_rh-test-ifcfg-rh.Tpo $(DEPDIR)/test_ifcfg_rh-test-ifcfg-rh.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-ifcfg-rh.c' object='test_ifcfg_rh-test-ifcfg-rh.o' libtool=no @AMDEPBACKSLASH@
+errors.o: ../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT errors.o -MD -MP -MF $(DEPDIR)/errors.Tpo -c -o errors.o `test -f '../errors.c' || echo '$(srcdir)/'`../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/errors.Tpo $(DEPDIR)/errors.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../errors.c' object='errors.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o errors.o `test -f '../errors.c' || echo '$(srcdir)/'`../errors.c
+
+errors.obj: ../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT errors.obj -MD -MP -MF $(DEPDIR)/errors.Tpo -c -o errors.obj `if test -f '../errors.c'; then $(CYGPATH_W) '../errors.c'; else $(CYGPATH_W) '$(srcdir)/../errors.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/errors.Tpo $(DEPDIR)/errors.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../errors.c' object='errors.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o errors.obj `if test -f '../errors.c'; then $(CYGPATH_W) '../errors.c'; else $(CYGPATH_W) '$(srcdir)/../errors.c'; fi`
+
+reader.o: ../reader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reader.o -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.o `test -f '../reader.c' || echo '$(srcdir)/'`../reader.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../reader.c' object='reader.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_ifcfg_rh_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_ifcfg_rh-test-ifcfg-rh.o `test -f 'test-ifcfg-rh.c' || echo '$(srcdir)/'`test-ifcfg-rh.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reader.o `test -f '../reader.c' || echo '$(srcdir)/'`../reader.c
-test_ifcfg_rh-test-ifcfg-rh.obj: test-ifcfg-rh.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_ifcfg_rh_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_ifcfg_rh-test-ifcfg-rh.obj -MD -MP -MF $(DEPDIR)/test_ifcfg_rh-test-ifcfg-rh.Tpo -c -o test_ifcfg_rh-test-ifcfg-rh.obj `if test -f 'test-ifcfg-rh.c'; then $(CYGPATH_W) 'test-ifcfg-rh.c'; else $(CYGPATH_W) '$(srcdir)/test-ifcfg-rh.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ifcfg_rh-test-ifcfg-rh.Tpo $(DEPDIR)/test_ifcfg_rh-test-ifcfg-rh.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-ifcfg-rh.c' object='test_ifcfg_rh-test-ifcfg-rh.obj' libtool=no @AMDEPBACKSLASH@
+reader.obj: ../reader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reader.obj -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.obj `if test -f '../reader.c'; then $(CYGPATH_W) '../reader.c'; else $(CYGPATH_W) '$(srcdir)/../reader.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../reader.c' object='reader.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_ifcfg_rh_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_ifcfg_rh-test-ifcfg-rh.obj `if test -f 'test-ifcfg-rh.c'; then $(CYGPATH_W) 'test-ifcfg-rh.c'; else $(CYGPATH_W) '$(srcdir)/test-ifcfg-rh.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reader.obj `if test -f '../reader.c'; then $(CYGPATH_W) '../reader.c'; else $(CYGPATH_W) '$(srcdir)/../reader.c'; fi`
+
+shvar.o: ../shvar.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shvar.o -MD -MP -MF $(DEPDIR)/shvar.Tpo -c -o shvar.o `test -f '../shvar.c' || echo '$(srcdir)/'`../shvar.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/shvar.Tpo $(DEPDIR)/shvar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../shvar.c' object='shvar.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shvar.o `test -f '../shvar.c' || echo '$(srcdir)/'`../shvar.c
+
+shvar.obj: ../shvar.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shvar.obj -MD -MP -MF $(DEPDIR)/shvar.Tpo -c -o shvar.obj `if test -f '../shvar.c'; then $(CYGPATH_W) '../shvar.c'; else $(CYGPATH_W) '$(srcdir)/../shvar.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/shvar.Tpo $(DEPDIR)/shvar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../shvar.c' object='shvar.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shvar.obj `if test -f '../shvar.c'; then $(CYGPATH_W) '../shvar.c'; else $(CYGPATH_W) '$(srcdir)/../shvar.c'; fi`
+
+utils.o: ../utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utils.o -MD -MP -MF $(DEPDIR)/utils.Tpo -c -o utils.o `test -f '../utils.c' || echo '$(srcdir)/'`../utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/utils.Tpo $(DEPDIR)/utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../utils.c' object='utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.o `test -f '../utils.c' || echo '$(srcdir)/'`../utils.c
+
+utils.obj: ../utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utils.obj -MD -MP -MF $(DEPDIR)/utils.Tpo -c -o utils.obj `if test -f '../utils.c'; then $(CYGPATH_W) '../utils.c'; else $(CYGPATH_W) '$(srcdir)/../utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/utils.Tpo $(DEPDIR)/utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../utils.c' object='utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.obj `if test -f '../utils.c'; then $(CYGPATH_W) '../utils.c'; else $(CYGPATH_W) '$(srcdir)/../utils.c'; fi`
+
+writer.o: ../writer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT writer.o -MD -MP -MF $(DEPDIR)/writer.Tpo -c -o writer.o `test -f '../writer.c' || echo '$(srcdir)/'`../writer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/writer.Tpo $(DEPDIR)/writer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../writer.c' object='writer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o writer.o `test -f '../writer.c' || echo '$(srcdir)/'`../writer.c
+
+writer.obj: ../writer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT writer.obj -MD -MP -MF $(DEPDIR)/writer.Tpo -c -o writer.obj `if test -f '../writer.c'; then $(CYGPATH_W) '../writer.c'; else $(CYGPATH_W) '$(srcdir)/../writer.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/writer.Tpo $(DEPDIR)/writer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../writer.c' object='writer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o writer.obj `if test -f '../writer.c'; then $(CYGPATH_W) '../writer.c'; else $(CYGPATH_W) '$(srcdir)/../writer.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
@@ -711,6 +831,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -766,9 +979,8 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile $(PROGRAMS)
installdirs: installdirs-recursive
@@ -877,7 +1089,7 @@ uninstall-am:
.MAKE: $(am__recursive_targets) check-am install-am install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am check-local clean clean-generic clean-libtool \
+ check-TESTS check-am clean clean-generic clean-libtool \
clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
@@ -891,11 +1103,8 @@ uninstall-am:
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am
-@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
-@ENABLE_TESTS_TRUE@check-local: test-ifcfg-rh
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-ifcfg-rh-utils
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-ifcfg-rh
+@ENABLE_TESTS_TRUE@@GNOME_CODE_COVERAGE_RULES@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
index df3ebb124..1701aeeb3 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
@@ -2,9 +2,13 @@ EXTRA_DIST = \
ifcfg-test-minimal \
ifcfg-test-variables-corner-cases-1 \
ifcfg-test-nm-controlled \
+ ifcfg-test-nm-controlled-unrecognized \
+ ifcfg-test-unrecognized \
ifcfg-test-wired-static \
ifcfg-test-wired-static-bootproto \
ifcfg-test-wired-dhcp \
+ ifcfg-test-wired-dhcp-plus-ip \
+ ifcfg-test-wired-dhcp-send-hostname \
ifcfg-test-wired-dhcp6-only \
ifcfg-test-wired-global-gateway \
network-test-wired-global-gateway \
@@ -17,7 +21,10 @@ EXTRA_DIST = \
keys-test-wired-8021x-peap-mschapv2 \
ifcfg-test-wired-8021x-tls-agent \
ifcfg-test-wired-8021x-tls-always \
+ ifcfg-test-wired-802-1X-subj-matches \
+ ifcfg-test-wired-802-1x-ttls-eapgtc \
ifcfg-test-onboot-no \
+ ifcfg-test-noip \
ifcfg-test-wifi-open \
ifcfg-test-wifi-open-auto \
ifcfg-test-wifi-open-ssid-quoted \
@@ -51,6 +58,7 @@ EXTRA_DIST = \
keys-test-wifi-wpa-eap-tls \
ifcfg-test-wifi-wpa-eap-ttls-tls \
keys-test-wifi-wpa-eap-ttls-tls \
+ ifcfg-test-wifi-hidden \
test_ca_cert.pem \
test1_key_and_cert.pem \
ifcfg-test-ibft-dhcp \
@@ -94,10 +102,41 @@ EXTRA_DIST = \
ifcfg-test-infiniband \
ifcfg-test-bond-main \
ifcfg-test-bond-slave \
- ifcfg-test-bond-slave-ib
+ ifcfg-test-bond-slave-ib \
+ ifcfg-test-dcb \
+ ifcfg-test-dcb-default-app-priorities \
+ ifcfg-test-dcb-bad-booleans \
+ ifcfg-test-dcb-short-booleans \
+ ifcfg-test-dcb-bad-uints \
+ ifcfg-test-dcb-short-uints \
+ ifcfg-test-dcb-bad-percent \
+ ifcfg-test-dcb-short-percent \
+ ifcfg-test-dcb-pgpct-not-100 \
+ ifcfg-test-fcoe-fabric \
+ ifcfg-test-fcoe-vn2vn \
+ ifcfg-test-team-master \
+ ifcfg-test-team-port \
+ ifcfg-test-team-port-empty-config
+
+# make target dependencies can't have colons in their names, which ends up
+# meaning that we can't add the alias files to EXTRA_DIST
+ALIAS_FILES = \
+ ifcfg-aliasem0 \
+ ifcfg-aliasem0:1 \
+ ifcfg-aliasem0:2 \
+ ifcfg-aliasem0:99 \
+ ifcfg-aliasem1 \
+ ifcfg-aliasem1:1 \
+ ifcfg-aliasem2 \
+ ifcfg-aliasem2:1
+
+dist-hook:
+ @for f in $(ALIAS_FILES); do \
+ cp $(abs_srcdir)/$$f $(distdir)/; \
+ done
check-local:
- @for f in $(EXTRA_DIST); do \
+ @for f in $(EXTRA_DIST) $(ALIAS_FILES); do \
chmod 0600 $(abs_srcdir)/$$f; \
done
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
index a8933e304..eff763e8a 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = src/settings/plugins/ifcfg-rh/tests/network-scripts
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -144,12 +145,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -174,7 +178,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -219,12 +222,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -241,6 +248,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -268,11 +277,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -287,6 +301,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -349,6 +364,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -359,13 +375,18 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
ifcfg-test-minimal \
ifcfg-test-variables-corner-cases-1 \
ifcfg-test-nm-controlled \
+ ifcfg-test-nm-controlled-unrecognized \
+ ifcfg-test-unrecognized \
ifcfg-test-wired-static \
ifcfg-test-wired-static-bootproto \
ifcfg-test-wired-dhcp \
+ ifcfg-test-wired-dhcp-plus-ip \
+ ifcfg-test-wired-dhcp-send-hostname \
ifcfg-test-wired-dhcp6-only \
ifcfg-test-wired-global-gateway \
network-test-wired-global-gateway \
@@ -378,7 +399,10 @@ EXTRA_DIST = \
keys-test-wired-8021x-peap-mschapv2 \
ifcfg-test-wired-8021x-tls-agent \
ifcfg-test-wired-8021x-tls-always \
+ ifcfg-test-wired-802-1X-subj-matches \
+ ifcfg-test-wired-802-1x-ttls-eapgtc \
ifcfg-test-onboot-no \
+ ifcfg-test-noip \
ifcfg-test-wifi-open \
ifcfg-test-wifi-open-auto \
ifcfg-test-wifi-open-ssid-quoted \
@@ -412,6 +436,7 @@ EXTRA_DIST = \
keys-test-wifi-wpa-eap-tls \
ifcfg-test-wifi-wpa-eap-ttls-tls \
keys-test-wifi-wpa-eap-ttls-tls \
+ ifcfg-test-wifi-hidden \
test_ca_cert.pem \
test1_key_and_cert.pem \
ifcfg-test-ibft-dhcp \
@@ -455,7 +480,34 @@ EXTRA_DIST = \
ifcfg-test-infiniband \
ifcfg-test-bond-main \
ifcfg-test-bond-slave \
- ifcfg-test-bond-slave-ib
+ ifcfg-test-bond-slave-ib \
+ ifcfg-test-dcb \
+ ifcfg-test-dcb-default-app-priorities \
+ ifcfg-test-dcb-bad-booleans \
+ ifcfg-test-dcb-short-booleans \
+ ifcfg-test-dcb-bad-uints \
+ ifcfg-test-dcb-short-uints \
+ ifcfg-test-dcb-bad-percent \
+ ifcfg-test-dcb-short-percent \
+ ifcfg-test-dcb-pgpct-not-100 \
+ ifcfg-test-fcoe-fabric \
+ ifcfg-test-fcoe-vn2vn \
+ ifcfg-test-team-master \
+ ifcfg-test-team-port \
+ ifcfg-test-team-port-empty-config
+
+
+# make target dependencies can't have colons in their names, which ends up
+# meaning that we can't add the alias files to EXTRA_DIST
+ALIAS_FILES = \
+ ifcfg-aliasem0 \
+ ifcfg-aliasem0:1 \
+ ifcfg-aliasem0:2 \
+ ifcfg-aliasem0:99 \
+ ifcfg-aliasem1 \
+ ifcfg-aliasem1:1 \
+ ifcfg-aliasem2 \
+ ifcfg-aliasem2:1
all: all-am
@@ -533,6 +585,9 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) check-local
check: check-am
@@ -637,7 +692,7 @@ uninstall-am:
.MAKE: check-am install-am install-strip
.PHONY: all all-am check check-am check-local clean clean-generic \
- clean-libtool cscopelist-am ctags-am distclean \
+ clean-libtool cscopelist-am ctags-am dist-hook distclean \
distclean-generic distclean-libtool distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
@@ -650,8 +705,13 @@ uninstall-am:
uninstall-am
+dist-hook:
+ @for f in $(ALIAS_FILES); do \
+ cp $(abs_srcdir)/$$f $(distdir)/; \
+ done
+
check-local:
- @for f in $(EXTRA_DIST); do \
+ @for f in $(EXTRA_DIST) $(ALIAS_FILES); do \
chmod 0600 $(abs_srcdir)/$$f; \
done
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0
new file mode 100644
index 000000000..4f9d645c8
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=aliasem0
+HWADDR=00:11:22:33:44:55
+BOOTPROTO=none
+ONBOOT=yes
+DNS1=4.2.2.1
+DNS2=4.2.2.2
+IPADDR=192.168.1.5
+PREFIX=24
+NETMASK=255.255.255.0
+GATEWAY=192.168.1.1
+IPV6INIT=no
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:1 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:1
new file mode 100644
index 000000000..37c0df118
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:1
@@ -0,0 +1,2 @@
+DEVICE=aliasem0:1
+IPADDR=192.168.1.6
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:2 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:2
new file mode 100644
index 000000000..0c3b6a7e9
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:2
@@ -0,0 +1,2 @@
+DEVICE=aliasem0:2
+IPADDR=192.168.1.9
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:99 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:99
new file mode 100644
index 000000000..5df3f154b
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem0:99
@@ -0,0 +1,2 @@
+DEVICE=aliasem0:99
+IPADDR=192.168.1.99
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem1 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem1
new file mode 100644
index 000000000..f6fefc0d0
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem1
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=aliasem1
+HWADDR=00:11:22:33:44:55
+BOOTPROTO=none
+ONBOOT=yes
+DNS1=4.2.2.1
+DNS2=4.2.2.2
+IPADDR=192.168.1.5
+PREFIX=24
+NETMASK=255.255.255.0
+GATEWAY=192.168.1.1
+IPV6INIT=no
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem1:1 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem1:1
new file mode 100644
index 000000000..21971611e
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem1:1
@@ -0,0 +1,2 @@
+# bad, no DEVICE
+IPADDR=192.168.1.12
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem2 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem2
new file mode 100644
index 000000000..92ed461e4
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem2
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=aliasem2
+HWADDR=00:11:22:33:44:55
+BOOTPROTO=none
+ONBOOT=yes
+DNS1=4.2.2.1
+DNS2=4.2.2.2
+IPADDR=192.168.1.5
+PREFIX=24
+NETMASK=255.255.255.0
+GATEWAY=192.168.1.1
+IPV6INIT=no
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem2:1 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem2:1
new file mode 100644
index 000000000..ce0f23ba3
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-aliasem2:1
@@ -0,0 +1,3 @@
+# bad: wrong DEVICE
+DEVICE=aliasem0:1
+IPADDR=192.168.1.20
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main
index c406bbb34..8507628e3 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main
@@ -5,3 +5,4 @@ BOOTPROTO=dhcp
STP=on
DELAY=0
BRIDGING_OPTS="priority=32744 hello_time=7 max_age=39 ageing_time=235352"
+MACADDR=00:16:41:11:22:33
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb
new file mode 100644
index 000000000..6e6589d39
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb
@@ -0,0 +1,43 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+# dcb global switch
+# use DCB=no to turn it off
+DCB=yes
+
+# application settings
+DCB_APP_FCOE_PRIORITY=7
+DCB_APP_FCOE_ENABLE=yes
+DCB_APP_FCOE_ADVERTISE=yes
+DCB_APP_FCOE_WILLING=yes
+
+DCB_APP_ISCSI_PRIORITY=6
+DCB_APP_ISCSI_ENABLE=yes
+DCB_APP_ISCSI_ADVERTISE=yes
+DCB_APP_ISCSI_WILLING=yes
+
+DCB_APP_FIP_PRIORITY=2
+DCB_APP_FIP_ENABLE=yes
+DCB_APP_FIP_ADVERTISE=yes
+DCB_APP_FIP_WILLING=yes
+
+# priority group settings
+DCB_PG_UP2TC=76543210
+DCB_PG_PCT=25,0,0,75,0,0,0,0
+DCB_PG_ID=0000111f
+DCB_PG_UPPCT=5,10,30,25,10,50,5,0
+DCB_PG_STRICT=00110101
+DCB_PG_ENABLE=yes
+DCB_PG_ADVERTISE=yes
+DCB_PG_WILLING=yes
+
+# priority flow control settings
+DCB_PFC_UP=10011010
+DCB_PFC_ENABLE=yes
+DCB_PFC_ADVERTISE=yes
+DCB_PFC_WILLING=no
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-booleans b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-booleans
new file mode 100644
index 000000000..2f46a0823
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-booleans
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+DCB=yes
+DCB_PG_STRICT=02030101
+DCB_PG_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-percent b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-percent
new file mode 100644
index 000000000..0c5d7b887
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-percent
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+DCB=yes
+DCB_PG_PCT=25,0,0,75,0,0,110,0
+DCB_PG_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-uints b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-uints
new file mode 100644
index 000000000..8334999b1
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-bad-uints
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+DCB=yes
+DCB_PG_UP2TC=96543210
+DCB_PG_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-default-app-priorities b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-default-app-priorities
new file mode 100644
index 000000000..5bdcb63ce
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-default-app-priorities
@@ -0,0 +1,7 @@
+TYPE=Ethernet
+DEVICE=eth0
+DCB=yes
+DCB_APP_FCOE_ENABLE=yes
+DCB_APP_ISCSI_ENABLE=yes
+DCB_APP_FIP_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-pgpct-not-100 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-pgpct-not-100
new file mode 100644
index 000000000..95eb7c5b5
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-pgpct-not-100
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+DCB=yes
+DCB_PG_PCT=25,0,0,3,75,0,25,0
+DCB_PG_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-booleans b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-booleans
new file mode 100644
index 000000000..fbe1cbbc5
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-booleans
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+DCB=yes
+DCB_PG_STRICT=0111010
+DCB_PG_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-percent b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-percent
new file mode 100644
index 000000000..07ba6b641
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-percent
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+DCB=yes
+DCB_PG_PCT=25,0,0,75,0,0,0
+DCB_PG_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-uints b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-uints
new file mode 100644
index 000000000..05ae39cb6
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dcb-short-uints
@@ -0,0 +1,12 @@
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+
+DCB=yes
+DCB_PG_UP2TC=7654321
+DCB_PG_ENABLE=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-fabric b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-fabric
new file mode 100644
index 000000000..cde1c28d6
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-fabric
@@ -0,0 +1,6 @@
+TYPE=Ethernet
+DEVICE=eth0
+DCB=yes
+DCB_APP_FCOE_ENABLE=yes
+DCB_APP_FCOE_MODE=fabric
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-vn2vn b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-vn2vn
new file mode 100644
index 000000000..20c08451e
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-fcoe-vn2vn
@@ -0,0 +1,6 @@
+TYPE=Ethernet
+DEVICE=eth0
+DCB=yes
+DCB_APP_FCOE_ENABLE=yes
+DCB_APP_FCOE_MODE=vn2vn
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-nm-controlled-unrecognized b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-nm-controlled-unrecognized
new file mode 100644
index 000000000..58263ece4
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-nm-controlled-unrecognized
@@ -0,0 +1,6 @@
+TYPE=IPoAC
+NAME=PigeonNet
+DEVICE=ipoac0
+BOOTPROTO=dhcp
+ONBOOT=yes
+NM_CONTROLLED=no
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-noip b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-noip
new file mode 100644
index 000000000..b5028daac
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-noip
@@ -0,0 +1,3 @@
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master
new file mode 100644
index 000000000..7edc736af
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master
@@ -0,0 +1,6 @@
+DEVICE=team0
+ONBOOT=no
+DEVICETYPE=Team
+BOOTPROTO=dhcp
+TEAM_CONFIG="{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }"
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port
new file mode 100644
index 000000000..966bec677
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port
@@ -0,0 +1,5 @@
+TYPE=Ethernet
+TEAM_PORT_CONFIG="{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }"
+DEVICE=p4p1
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port-empty-config b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port-empty-config
new file mode 100644
index 000000000..04df69387
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port-empty-config
@@ -0,0 +1,4 @@
+TYPE=Ethernet
+DEVICE=p4p1
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-unrecognized b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-unrecognized
new file mode 100644
index 000000000..18da66c1d
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-unrecognized
@@ -0,0 +1,7 @@
+TYPE=PPP-over-InfiniBand
+NAME=U Can't Touch This
+DEVICE=pppoipoib0
+HWADDR=00:11:22:33
+BOOTPROTO=dhcp
+ONBOOT=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-hidden b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-hidden
new file mode 100644
index 000000000..08b9a730a
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-hidden
@@ -0,0 +1,10 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Wireless
+DEVICE=eth2
+HWADDR=00:16:41:11:22:33
+BOOTPROTO=dhcp
+ONBOOT=yes
+ESSID=blahblah
+MODE=Managed
+SSID_HIDDEN=yes
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1X-subj-matches b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1X-subj-matches
new file mode 100644
index 000000000..70d69bf52
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1X-subj-matches
@@ -0,0 +1,17 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=dhcp
+ONBOOT=yes
+NM_CONTROLLED=yes
+KEY_MGMT=IEEE8021X
+IEEE_8021X_EAP_METHODS=PEAP
+IEEE_8021X_IDENTITY="Jara Cimrman"
+IEEE_8021X_PEAP_VERSION=1
+IEEE_8021X_INNER_AUTH_METHODS=GTC
+IEEE_8021X_PASSWORD_FLAGS="user ask"
+IEEE_8021X_SUBJECT_MATCH=server1.yourdomain.tld
+IEEE_8021X_ALTSUBJECT_MATCHES="a.yourdomain.tld b.yourdomain.tld c.yourdomain.tld"
+IEEE_8021X_PHASE2_SUBJECT_MATCH=server2.yourdomain.tld
+IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES="x.yourdomain.tld y.yourdomain.tld"
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1x-ttls-eapgtc b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1x-ttls-eapgtc
new file mode 100644
index 000000000..fad927726
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-802-1x-ttls-eapgtc
@@ -0,0 +1,13 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=dhcp
+ONBOOT=yes
+NM_CONTROLLED=yes
+KEY_MGMT=IEEE8021X
+IEEE_8021X_EAP_METHODS=TTLS
+IEEE_8021X_IDENTITY="Bill Smith"
+IEEE_8021X_CA_CERT=test_ca_cert.pem
+IEEE_8021X_INNER_AUTH_METHODS=EAP-GTC
+IEEE_8021X_PASSWORD_FLAGS=ask
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-plus-ip b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-plus-ip
new file mode 100644
index 000000000..f0c022a9d
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-plus-ip
@@ -0,0 +1,26 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=dhcp
+ONBOOT=yes
+IPV6INIT=yes
+IPV6_AUTOCONF=yes
+USERCTL=yes
+NM_CONTROLLED=yes
+PEERDNS=no
+DNS1=4.2.2.1
+DNS2=4.2.2.2
+DNS3=1:2:3:4::a
+DNS4=1:2:3:4::b
+
+# additional IPs
+IPADDR0=1.2.3.4
+PREFIX0=24
+GATEWAY0=1.1.1.1
+IPADDR1=9.8.7.6
+PREFIX1=16
+
+IPV6ADDR="1001:abba::1234/56"
+IPV6ADDR_SECONDARIES="2001:abba::2234/64 3001:abba::3234/96"
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-send-hostname b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-send-hostname
new file mode 100644
index 000000000..cba380db3
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-send-hostname
@@ -0,0 +1,12 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=dhcp
+ONBOOT=yes
+IPV6INIT=yes
+IPV6_AUTOCONF=yes
+USERCTL=yes
+NM_CONTROLLED=yes
+PEERDNS=no
+DHCP_HOSTNAME="svata-pulec"
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-static-routes-legacy b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-static-routes-legacy
index 3db42ab5b..c9e422e76 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-static-routes-legacy
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-static-routes-legacy
@@ -1,3 +1,4 @@
1.2.3.0/24 via 222.173.190.239 metric 0
3.2.1.0/24 via 202.254.171.190 metric 77
7.7.7.7/32 via 10.0.2.2 metric 11
+8.8.8.8/32 metric 12
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route6-test-wired-ipv6-manual b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route6-test-wired-ipv6-manual
index 2a994c502..b3259ab7f 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route6-test-wired-ipv6-manual
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route6-test-wired-ipv6-manual
@@ -2,3 +2,6 @@
# default route is ignored by ifcfg-rh reader, because NM handles it internally
default via dead::beaf
+
+# routes without "via" are valid
+abbe::cafe/64 metric 777
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
index e32ad7890..39c81027f 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
@@ -23,11 +23,10 @@
#include <unistd.h>
#include <string.h>
-#include "nm-test-helpers.h"
-
#include "common.h"
#include "utils.h"
+#include "nm-test-utils.h"
static void
test_get_ifcfg_name (const char *desc,
@@ -114,10 +113,14 @@ test_ignored (const char *desc, const char *path, gboolean expected_ignored)
ASSERT (result == expected_ignored, desc, "unexpected ignore result for path '%s'", path);
}
+NMTST_DEFINE ();
+
int main (int argc, char **argv)
{
char *base;
+ nmtst_init (&argc, &argv, TRUE);
+
/* The tests */
test_get_ifcfg_name ("get-ifcfg-name-bad", "/foo/bar/adfasdfadf", FALSE, NULL);
test_get_ifcfg_name ("get-ifcfg-name-good", "/foo/bar/ifcfg-FooBar", FALSE, "FooBar");
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 668dcd9bf..c1b14f125 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -45,13 +45,18 @@
#include <nm-setting-cdma.h>
#include <nm-setting-serial.h>
#include <nm-setting-vlan.h>
+#include <nm-setting-dcb.h>
+#include <nm-utils-private.h>
-#include "nm-test-helpers.h"
+#include "NetworkManagerUtils.h"
#include "common.h"
#include "reader.h"
#include "writer.h"
#include "utils.h"
+#include "nm-logging.h"
+
+#include "nm-test-utils.h"
#if 0
static void
@@ -74,20 +79,11 @@ connection_diff (NMConnection *a, NMConnection *b)
}
#endif
-typedef enum {
- CK_CA_CERT = 0,
- CK_CLIENT_CERT = 1,
- CK_PRIV_KEY = 2
-} CertKeyType;
-
static gboolean
-verify_cert_or_key (CertKeyType ck_type,
- NMSetting8021x *s_compare,
+verify_cert_or_key (NMSetting8021x *s_compare,
const char *file,
const char *privkey_password,
- const char *ifcfg,
- const char *test_name,
- const char *setting_key)
+ const char *property)
{
NMSetting8021x *s_8021x;
GError *error = NULL;
@@ -96,512 +92,304 @@ verify_cert_or_key (CertKeyType ck_type,
gboolean phase2 = FALSE;
NMSetting8021xCKScheme scheme = NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
- if (strstr (setting_key, "phase2"))
+ if (strstr (property, "phase2"))
phase2 = TRUE;
- /* CA Cert */
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (s_8021x != NULL,
- test_name, "failed to verify %s: could not create temp 802.1x setting",
- ifcfg);
- if (ck_type == CK_CA_CERT) {
+ /* Load the certificate into an empty setting */
+ if (strstr (property, "ca-cert")) {
if (phase2)
success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
else
success = nm_setting_802_1x_set_ca_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
- } else if (ck_type == CK_CLIENT_CERT) {
+ } else if (strstr (property, "client-cert")) {
if (phase2)
success = nm_setting_802_1x_set_phase2_client_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
else
success = nm_setting_802_1x_set_client_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
- } else if (ck_type == CK_PRIV_KEY) {
+ } else if (strstr (property, "private-key")) {
if (phase2)
success = nm_setting_802_1x_set_phase2_private_key (s_8021x, file, privkey_password, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
else
success = nm_setting_802_1x_set_private_key (s_8021x, file, privkey_password, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
}
- ASSERT (success == TRUE,
- test_name, "failed to verify %s: could not load item for %s / %s: %s",
- ifcfg, NM_SETTING_802_1X_SETTING_NAME, setting_key, error->message);
+ g_assert_no_error (error);
+ g_assert_cmpint (success, ==, TRUE);
- if (ck_type == CK_CA_CERT) {
+ /* Ensure it was loaded using the PATH scheme */
+ if (strstr (property, "ca-cert")) {
if (phase2)
scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (s_8021x);
else
scheme = nm_setting_802_1x_get_ca_cert_scheme (s_8021x);
- } else if (ck_type == CK_CLIENT_CERT) {
+ } else if (strstr (property, "client-cert")) {
if (phase2)
scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (s_8021x);
else
scheme = nm_setting_802_1x_get_client_cert_scheme (s_8021x);
- } else if (ck_type == CK_PRIV_KEY) {
+ } else if (strstr (property, "private-key")) {
if (phase2)
scheme = nm_setting_802_1x_get_phase2_private_key_scheme (s_8021x);
else
scheme = nm_setting_802_1x_get_private_key_scheme (s_8021x);
}
- ASSERT (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
- test_name, "failed to verify %s: unexpected cert/key scheme for %s / %s",
- ifcfg, NM_SETTING_802_1X_SETTING_NAME, setting_key);
+ g_assert_cmpint (scheme, ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
- if (ck_type == CK_CA_CERT) {
+ /* Grab the path back out */
+ if (strstr (property, "ca-cert")) {
if (phase2)
expected = nm_setting_802_1x_get_phase2_ca_cert_path (s_8021x);
else
expected = nm_setting_802_1x_get_ca_cert_path (s_8021x);
- } else if (ck_type == CK_CLIENT_CERT) {
+ } else if (strstr (property, "client-cert")) {
if (phase2)
expected = nm_setting_802_1x_get_phase2_client_cert_path (s_8021x);
else
expected = nm_setting_802_1x_get_client_cert_path (s_8021x);
- } else if (ck_type == CK_PRIV_KEY) {
+ } else if (strstr (property, "private-key")) {
if (phase2)
expected = nm_setting_802_1x_get_phase2_private_key_path (s_8021x);
else
expected = nm_setting_802_1x_get_private_key_path (s_8021x);
}
- ASSERT (expected != NULL,
- test_name, "failed to verify %s: failed to get read item for %s / %s",
- ifcfg, NM_SETTING_802_1X_SETTING_NAME, setting_key);
+ g_assert_cmpstr (expected, ==, file);
- if (ck_type == CK_CA_CERT) {
+ /* Compare the path with the expected path from the real setting */
+ if (strstr (property, "ca-cert")) {
if (phase2)
setting = nm_setting_802_1x_get_phase2_ca_cert_path (s_compare);
else
setting = nm_setting_802_1x_get_ca_cert_path (s_compare);
- } else if (ck_type == CK_CLIENT_CERT) {
+ } else if (strstr (property, "client-cert")) {
if (phase2)
setting = nm_setting_802_1x_get_phase2_client_cert_path (s_compare);
else
setting = nm_setting_802_1x_get_client_cert_path (s_compare);
- } else if (ck_type == CK_PRIV_KEY) {
+ } else if (strstr (property, "private-key")) {
if (phase2)
setting = nm_setting_802_1x_get_phase2_private_key_path (s_compare);
else
setting = nm_setting_802_1x_get_private_key_path (s_compare);
}
- ASSERT (setting != NULL,
- test_name, "failed to verify %s: missing %s / %s key",
- ifcfg, NM_SETTING_802_1X_SETTING_NAME, setting_key);
-
- ASSERT (strlen (setting) == strlen (expected),
- test_name, "failed to verify %s: unexpected %s / %s certificate length",
- test_name, NM_SETTING_802_1X_SETTING_NAME, setting_key);
-
- ASSERT (strcmp (setting, expected) == 0,
- test_name, "failed to verify %s: %s / %s key certificate mismatch",
- ifcfg, NM_SETTING_802_1X_SETTING_NAME, setting_key);
+ g_assert_cmpstr (setting, ==, expected);
g_object_unref (s_8021x);
return TRUE;
}
-#define TEST_IFCFG_MINIMAL TEST_IFCFG_DIR"/network-scripts/ifcfg-test-minimal"
-
static void
-test_read_minimal (void)
+test_read_basic (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIP4Config *s_ip4;
- char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- gboolean ignore_error = FALSE;
+ NMSettingIP6Config *s_ip6;
GError *error = NULL;
- const char *tmp;
const GByteArray *array;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
const char *expected_id = "System test-minimal";
guint64 expected_timestamp = 0;
+ gboolean success;
- connection = connection_from_file (TEST_IFCFG_MINIMAL,
- NULL,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "minimal-wired-read", "failed to read %s: %s", TEST_IFCFG_MINIMAL, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "minimal-wired-verify", "failed to verify %s: %s", TEST_IFCFG_MINIMAL, error->message);
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-minimal",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
/* ===== CONNECTION SETTING ===== */
-
s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "minimal-wired-verify-connection", "failed to verify %s: missing %s setting",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "minimal-wired-verify-connection", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "minimal-wired-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
+ g_assert (nm_setting_connection_get_autoconnect (s_con));
/* UUID can't be tested if the ifcfg does not contain the UUID key, because
* the UUID is generated on the full path of the ifcfg file, which can change
* depending on where the tests are run.
*/
- /* Timestamp */
- ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
- "minimal-wired-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_TIMESTAMP);
-
- /* Autoconnect */
- ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
- "minimal-wired-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_AUTOCONNECT);
-
/* ===== WIRED SETTING ===== */
-
s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "minimal-wired-verify-wired", "failed to verify %s: missing %s setting",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_WIRED_SETTING_NAME);
+ g_assert (s_wired);
+ g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
/* MAC address */
array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
- "minimal-wired-verify-wired", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "minimal-wired-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
- "minimal-wired-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
-
- ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
- "minimal-wired-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MTU);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, ETH_ALEN);
+ g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
/* ===== IPv4 SETTING ===== */
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "minimal-wired-verify-ip4", "failed to verify %s: missing %s setting",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
-
- /* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
- ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
- "minimal-wired-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
- ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
- "minimal-wired-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_MINIMAL,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
+ /* ===== IPv6 SETTING ===== */
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+ g_assert (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE);
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
g_object_unref (connection);
}
static void
-test_read_variables_corner_cases (const char *file, const char *expected_id)
+test_read_variables_corner_cases (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIP4Config *s_ip4;
- char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- gboolean ignore_error = FALSE;
GError *error = NULL;
- const char *tmp;
const GByteArray *array;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
const char *expected_zone = "'";
+ const char *expected_id = "\"";
guint64 expected_timestamp = 0;
+ gboolean success;
- connection = connection_from_file (file,
- NULL,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "corner-cases-read", "failed to read %s: %s", file, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "corner-cases-verify", "failed to verify %s: %s", file, error->message);
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-variables-corner-cases-1",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
/* ===== CONNECTION SETTING ===== */
-
s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "corner-cases-verify-connection", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID - that is NAME= variable */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "corner-cases-verify-connection", "failed to verify %s: missing %s / %s key",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "corner-cases-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
-
- /* ZONE */
- tmp = nm_setting_connection_get_zone (s_con);
- ASSERT (tmp != NULL,
- "corner-cases-verify-connection", "failed to verify %s: missing %s / %s key",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_zone) == 0,
- "corner-cases-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
-
-
- /* Timestamp */
- ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
- "corner-cases-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_TIMESTAMP);
-
- /* Autoconnect */
- ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
- "corner-cases-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_AUTOCONNECT);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpstr (nm_setting_connection_get_zone (s_con), ==, expected_zone);
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
+ g_assert (nm_setting_connection_get_autoconnect (s_con));
/* ===== WIRED SETTING ===== */
-
s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "corner-cases-verify-wired", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_WIRED_SETTING_NAME);
+ g_assert (s_wired);
+ g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
/* MAC address */
array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
- "corner-cases-verify-wired", "failed to verify %s: missing %s / %s key",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "corner-cases-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
- "corner-cases-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
-
- ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
- "corner-cases-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MTU);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, ETH_ALEN);
+ g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
/* ===== IPv4 SETTING ===== */
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "corner-cases-verify-ip4", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
-
- /* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
- ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
- "corner-cases-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
-
- ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
- "corner-cases-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
g_object_unref (connection);
}
-#define TEST_IFCFG_UNMANAGED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-nm-controlled"
-
static void
test_read_unmanaged (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- gboolean ignore_error = FALSE;
+ char *unhandled_spec = NULL;
GError *error = NULL;
- const char *tmp;
- const GByteArray *array;
- char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0xf8, 0x9f };
const char *expected_id = "System test-nm-controlled";
guint64 expected_timestamp = 0;
+ gboolean success;
- connection = connection_from_file (TEST_IFCFG_UNMANAGED,
- NULL,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "unmanaged-read", "failed to read %s: %s", TEST_IFCFG_UNMANAGED, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "unmanaged-verify", "failed to verify %s: %s", TEST_IFCFG_UNMANAGED, error->message);
-
- ASSERT (unmanaged != NULL,
- "unmanaged-verify", "failed to verify %s: expected unmanaged", TEST_IFCFG_UNMANAGED);
-
- ASSERT (strcmp (unmanaged, "mac:00:11:22:33:f8:9f") == 0,
- "unmanaged-verify", "failed to verify %s: expected unmanaged", TEST_IFCFG_UNMANAGED);
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-nm-controlled",
+ NULL, TYPE_ETHERNET, NULL,
+ &unhandled_spec,
+ NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert_cmpstr (unhandled_spec, ==, "unmanaged:mac:00:11:22:33:f8:9f");
/* ===== CONNECTION SETTING ===== */
-
s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "unmanaged-verify-connection", "failed to verify %s: missing %s setting",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_CONNECTION_SETTING_NAME);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
+ g_assert (nm_setting_connection_get_autoconnect (s_con));
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "unmanaged-verify-connection", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "unmanaged-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
+ g_free (unhandled_spec);
+ g_object_unref (connection);
+}
- /* Timestamp */
- ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
- "unmanaged-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_TIMESTAMP);
+static void
+test_read_unmanaged_unrecognized (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ char *unhandled_spec = NULL;
+ GError *error = NULL;
+ const char *expected_id = "PigeonNet";
+ guint64 expected_timestamp = 0;
+ gboolean success;
- /* Autoconnect */
- /* Since the unmanaged connections are not completely read, defaults will
- * be used for many settings.
- */
- ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
- "unmanaged-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_AUTOCONNECT);
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-nm-controlled-unrecognized",
+ NULL, NULL, NULL,
+ &unhandled_spec,
+ NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert_cmpstr (unhandled_spec, ==, "unmanaged:interface-name:ipoac0");
- /* ===== WIRED SETTING ===== */
+ /* ===== CONNECTION SETTING ===== */
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
- s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "unmanaged-verify-wired", "failed to verify %s: missing %s setting",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_WIRED_SETTING_NAME);
+ g_object_unref (connection);
+}
- /* MAC address */
- array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
- "unmanaged-verify-wired", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "unmanaged-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
- "unmanaged-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
+static void
+test_read_unrecognized (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ char *unhandled_spec = NULL;
+ GError *error = NULL;
+ const char *expected_id = "U Can't Touch This";
+ guint64 expected_timestamp = 0;
+ gboolean success;
- /* ===== IPv4 SETTING ===== */
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-unrecognized",
+ NULL, NULL, NULL,
+ &unhandled_spec,
+ NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert_cmpstr (unhandled_spec, ==, "unrecognized:mac:00:11:22:33");
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 == NULL,
- "unmanaged-verify-ip4", "failed to verify %s: unexpected %s setting",
- TEST_IFCFG_UNMANAGED,
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ /* ===== CONNECTION SETTING ===== */
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
- g_free (unmanaged);
g_object_unref (connection);
}
static void
-test_read_wired_static (const char *file, const char *expected_id)
+test_read_wired_static (const char *file,
+ const char *expected_id,
+ gboolean expect_ip6)
{
NMConnection *connection;
NMSettingConnection *s_con;
@@ -609,17 +397,12 @@ test_read_wired_static (const char *file, const char *expected_id)
NMSettingIP4Config *s_ip4;
NMSettingIP6Config *s_ip6;
char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- gboolean ignore_error = FALSE;
GError *error = NULL;
const GByteArray *array;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
- const char *tmp;
const char *expected_dns1 = "4.2.2.1";
const char *expected_dns2 = "4.2.2.2";
- struct in_addr addr;
+ guint32 addr;
struct in6_addr addr6;
const char *expected_address1 = "192.168.1.5";
const char *expected_address1_gw = "192.168.1.1";
@@ -629,392 +412,134 @@ test_read_wired_static (const char *file, const char *expected_id)
const char *expected6_dns2 = "1:2:3:4::b";
NMIP4Address *ip4_addr;
NMIP6Address *ip6_addr;
+ gboolean success;
- connection = connection_from_file (file,
- NULL,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "wired-static-read", "failed to read %s: %s", file, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "wired-static-verify", "failed to verify %s: %s", file, error->message);
-
- ASSERT (unmanaged == NULL,
- "wired-static-verify", "failed to verify %s: unexpected unmanaged value", file);
+ connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL,
+ &unmanaged, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert_cmpstr (unmanaged, ==, NULL);
/* ===== CONNECTION SETTING ===== */
-
s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "wired-static-verify-connection", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "wired-static-verify-connection", "failed to verify %s: missing %s / %s key",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "wired-static-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
-
- /* Timestamp */
- ASSERT (nm_setting_connection_get_timestamp (s_con) == 0,
- "wired-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_TIMESTAMP);
-
- /* Autoconnect */
- ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
- "wired-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_AUTOCONNECT);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
+ g_assert (nm_setting_connection_get_autoconnect (s_con));
/* ===== WIRED SETTING ===== */
-
s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "wired-static-verify-wired", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_WIRED_SETTING_NAME);
+ g_assert (s_wired);
+ g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 1492);
/* MAC address */
array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
- "wired-static-verify-wired", "failed to verify %s: missing %s / %s key",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "wired-static-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
- "wired-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
-
- ASSERT (nm_setting_wired_get_mtu (s_wired) == 1492,
- "wired-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MTU);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, ETH_ALEN);
+ g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
/* ===== IPv4 SETTING ===== */
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "wired-static-verify-ip4", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
-
- /* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
- ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
- "wired-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
-
- /* Implicit may-fail */
- ASSERT (nm_setting_ip4_config_get_may_fail (s_ip4) == TRUE,
- "wired-static-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_MAY_FAIL);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
+ g_assert (nm_setting_ip4_config_get_may_fail (s_ip4));
/* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
- "wired-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
-
- ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
- "wired-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr.s_addr,
- "wired-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
-
- ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
- "wired-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr.s_addr,
- "wired-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
-
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
- "wired-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 2);
+ g_assert_cmpint (inet_pton (AF_INET, expected_dns1, &addr), >, 0);
+ g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 0), ==, addr);
+ g_assert_cmpint (inet_pton (AF_INET, expected_dns2, &addr), >, 0);
+ g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 1), ==, addr);
- /* Address #1 */
+ /* IP addresses */
+ g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1);
ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
- ASSERT (ip4_addr,
- "wired-static-verify-ip4", "failed to verify %s: missing IP4 address #1",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ g_assert (ip4_addr);
+ g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24);
+ g_assert_cmpint (inet_pton (AF_INET, expected_address1, &addr), >, 0);
+ g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr);
+ g_assert_cmpint (inet_pton (AF_INET, expected_address1_gw, &addr), >, 0);
+ g_assert_cmpint (nm_ip4_address_get_gateway (ip4_addr), ==, addr);
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 24,
- "wired-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
- "wired-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
- "wired-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ /* ===== IPv6 SETTING ===== */
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ if (expect_ip6) {
+ g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_MANUAL);
+ g_assert (nm_setting_ip6_config_get_may_fail (s_ip6));
- ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
- "wired-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
- ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr.s_addr,
- "wired-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ /* DNS Addresses */
+ g_assert_cmpint (nm_setting_ip6_config_get_num_dns (s_ip6), ==, 2);
+ g_assert_cmpint (inet_pton (AF_INET6, expected6_dns1, &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6));
+ g_assert_cmpint (inet_pton (AF_INET6, expected6_dns2, &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6));
- if (!strcmp (expected_id, "System test-wired-static")) {
- /* ===== IPv6 SETTING ===== */
-
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
- ASSERT (s_ip6 != NULL,
- "wired-static-verify-ip6", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
-
- /* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
- ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
- "wired-static-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
-
- /* Implicit may-fail */
- ASSERT (nm_setting_ip6_config_get_may_fail (s_ip6) == TRUE,
- "wired-static-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_MAY_FAIL);
+ /* IP addresses */
+ g_assert_cmpint (nm_setting_ip6_config_get_num_addresses (s_ip6), ==, 2);
- /* DNS Addresses */
- ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
- "wired-static-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
-
- ASSERT (inet_pton (AF_INET6, expected6_dns1, &addr6) > 0,
- "wired-static-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #1",
- file);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6),
- "wired-static-verify-ip6", "failed to verify %s: unexpected %s / %s key value #1",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
-
- ASSERT (inet_pton (AF_INET6, expected6_dns2, &addr6) > 0,
- "wired-static-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #2",
- file);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6),
- "wired-static-verify-ip6", "failed to verify %s: unexpected %s / %s key value #2",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
-
- ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 2,
- "wired-static-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ADDRESSES);
-
- /* Address #1 */
ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
- ASSERT (ip6_addr,
- "wired-static-verify-ip6", "failed to verify %s: missing IP6 address #1",
- file);
-
- ASSERT (nm_ip6_address_get_prefix (ip6_addr) == 64,
- "wired-static-verify-ip6", "failed to verify %s: unexpected IP6 address #1 prefix",
- file);
-
- ASSERT (inet_pton (AF_INET6, expected6_address1, &addr6) > 0,
- "wired-static-verify-ip6", "failed to verify %s: couldn't convert IP address #1",
- file);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6),
- "wired-static-verify-ip6", "failed to verify %s: unexpected IP6 address #1",
- file);
-
- /* Address #2 */
+ g_assert (ip6_addr);
+ g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 64);
+ g_assert_cmpint (inet_pton (AF_INET6, expected6_address1, &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
+
ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
- ASSERT (ip6_addr,
- "wired-static-verify-ip6", "failed to verify %s: missing IP6 address #2",
- file);
-
- ASSERT (nm_ip6_address_get_prefix (ip6_addr) == 56,
- "wired-static-verify-ip6", "failed to verify %s: unexpected IP6 address #2 prefix",
- file);
-
- ASSERT (inet_pton (AF_INET6, expected6_address2, &addr6) > 0,
- "wired-static-verify-ip6", "failed to verify %s: couldn't convert IP address #2",
- file);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6),
- "wired-static-verify-ip6", "failed to verify %s: unexpected IP6 address #2",
- file);
+ g_assert (ip6_addr);
+ g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 56);
+ g_assert_cmpint (inet_pton (AF_INET6, expected6_address2, &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
+ } else {
+ g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
}
g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
g_object_unref (connection);
}
-#define TEST_IFCFG_STATIC_NO_PREFIX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-no-prefix"
-
static void
-test_read_wired_static_no_prefix (guint32 expected_prefix)
+test_read_wired_static_no_prefix (gconstpointer user_data)
{
+ guint32 expected_prefix = GPOINTER_TO_UINT (user_data);
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingIP4Config *s_ip4;
- char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- gboolean ignore_error = FALSE;
GError *error = NULL;
NMIP4Address *ip4_addr;
char *file, *expected_id;
- const char *tmp;
-
- file = g_strdup_printf (TEST_IFCFG_STATIC_NO_PREFIX "-%u", expected_prefix);
- ASSERT (file != NULL,
- "wired-static-no-prefix-read", "failed to create path to file");
+ file = g_strdup_printf (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-wired-static-no-prefix-%u", expected_prefix);
expected_id = g_strdup_printf ("System test-wired-static-no-prefix-%u", expected_prefix);
- ASSERT (expected_id != NULL,
- "wired-static-no-prefix-read", "failed to expected connection ID");
- connection = connection_from_file (file,
- NULL,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "wired-static-no-prefix-read", "failed to read %s: %s", file, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "wired-static-no-prefix-verify", "failed to verify %s: %s", file, error->message);
-
- ASSERT (unmanaged == NULL,
- "wired-static-no-prefix-verify", "failed to verify %s: unexpected unmanaged value", file);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*missing PREFIX, assuming*");
+ connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+ g_assert_no_error (error);
+ g_assert (connection);
+ g_assert (nm_connection_verify (connection, &error));
/* ===== CONNECTION SETTING ===== */
-
s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "wired-static-no-prefix-verify-connection", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "wired-static-no-prefix-verify-connection", "failed to verify %s: missing %s / %s key",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "wired-static-no-prefix-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- g_free (expected_id);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
/* ===== IPv4 SETTING ===== */
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "wired-static-no-prefix-verify-ip4", "failed to verify %s: missing %s setting",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
-
- /* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
- ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
- "wired-static-no-prefix-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
-
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
- "wired-static-no-prefix-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
- /* Address #1 */
+ g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1);
ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
- ASSERT (ip4_addr,
- "wired-static-no-prefix-verify-ip4", "failed to verify %s: missing IP4 address #1",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix,
- "wired-static-no-prefix-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
- file,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ g_assert (ip4_addr);
+ g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, expected_prefix);
g_free (file);
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
+ g_free (expected_id);
g_object_unref (connection);
}
@@ -1039,7 +564,7 @@ test_read_wired_dhcp (void)
const char *expected_id = "System test-wired-dhcp";
const char *expected_dns1 = "4.2.2.1";
const char *expected_dns2 = "4.2.2.2";
- struct in_addr addr;
+ guint32 addr;
const char *expected_dhcp_hostname = "foobar";
connection = connection_from_file (TEST_IFCFG_WIRED_DHCP,
@@ -1168,7 +693,7 @@ test_read_wired_dhcp (void)
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1179,7 +704,7 @@ test_read_wired_dhcp (void)
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1192,6 +717,93 @@ test_read_wired_dhcp (void)
g_object_unref (connection);
}
+static void
+test_read_wired_dhcp_plus_ip (void)
+{
+ NMConnection *connection;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ GError *error = NULL;
+ guint32 addr4;
+ struct in6_addr addr6;
+ NMIP4Address *ip4_addr;
+ NMIP6Address *ip6_addr;
+ gboolean success;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip",
+ NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* ===== IPv4 SETTING ===== */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+ g_assert (nm_setting_ip4_config_get_may_fail (s_ip4));
+
+ /* DNS Addresses */
+ g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 2);
+ g_assert_cmpint (inet_pton (AF_INET, "4.2.2.1", &addr4), >, 0);
+ g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 0), ==, addr4);
+ g_assert_cmpint (inet_pton (AF_INET, "4.2.2.2", &addr4), >, 0);
+ g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 1), ==, addr4);
+
+ /* IP addresses */
+ g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 2);
+ ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr);
+ g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24);
+ g_assert_cmpint (inet_pton (AF_INET, "1.2.3.4", &addr4), >, 0);
+ g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr4);
+ g_assert_cmpint (inet_pton (AF_INET, "1.1.1.1", &addr4), >, 0);
+ g_assert_cmpint (nm_ip4_address_get_gateway (ip4_addr), ==, addr4);
+
+ ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
+ g_assert (ip4_addr);
+ g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 16);
+ g_assert_cmpint (inet_pton (AF_INET, "9.8.7.6", &addr4), >, 0);
+ g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr4);
+
+ /* ===== IPv6 SETTING ===== */
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
+ g_assert (nm_setting_ip6_config_get_may_fail (s_ip6));
+
+ /* DNS Addresses */
+ g_assert_cmpint (nm_setting_ip6_config_get_num_dns (s_ip6), ==, 2);
+ g_assert_cmpint (inet_pton (AF_INET6, "1:2:3:4::a", &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6));
+ g_assert_cmpint (inet_pton (AF_INET6, "1:2:3:4::b", &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6));
+
+ /* IP addresses */
+ g_assert_cmpint (nm_setting_ip6_config_get_num_addresses (s_ip6), ==, 3);
+ ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
+ g_assert (ip6_addr);
+ g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 56);
+ g_assert_cmpint (inet_pton (AF_INET6, "1001:abba::1234", &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
+
+ ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
+ g_assert (ip6_addr);
+ g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 64);
+ g_assert_cmpint (inet_pton (AF_INET6, "2001:abba::2234", &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
+
+ ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 2);
+ g_assert (ip6_addr);
+ g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 96);
+ g_assert_cmpint (inet_pton (AF_INET6, "3001:abba::3234", &addr6), >, 0);
+ g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
+
+ g_object_unref (connection);
+}
+
#define TEST_IFCFG_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-global-gateway"
#define TEST_NETWORK_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/network-test-wired-global-gateway"
@@ -1210,7 +822,7 @@ test_read_wired_global_gateway (void)
GError *error = NULL;
const char *tmp;
const char *expected_id = "System test-wired-global-gateway";
- struct in_addr addr;
+ guint32 addr;
const char *expected_address1 = "192.168.1.5";
const char *expected_address1_gw = "192.168.1.2";
NMIP4Address *ip4_addr;
@@ -1298,7 +910,7 @@ test_read_wired_global_gateway (void)
TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
"wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1309,7 +921,7 @@ test_read_wired_global_gateway (void)
TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
- ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr,
"wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway",
TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1710,7 +1322,7 @@ test_read_wired_static_routes (void)
GError *error = NULL;
const char *tmp;
NMIP4Route *ip4_route;
- struct in_addr addr;
+ guint32 addr;
const char *expected_id = "System test-wired-static-routes";
const char *expected_dst1 = "11.22.33.0";
const char *expected_dst2 = "44.55.66.77";
@@ -1802,7 +1414,7 @@ test_read_wired_static_routes (void)
ASSERT (inet_pton (AF_INET, expected_dst1, &addr) > 0,
"wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #1",
TEST_IFCFG_WIRED_STATIC_ROUTES);
- ASSERT (nm_ip4_route_get_dest (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
"wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_STATIC_ROUTES,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1815,7 +1427,7 @@ test_read_wired_static_routes (void)
ASSERT (inet_pton (AF_INET, expected_gw1, &addr) > 0,
"wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #1",
TEST_IFCFG_WIRED_STATIC_ROUTES);
- ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
"wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_STATIC_ROUTES,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1829,7 +1441,7 @@ test_read_wired_static_routes (void)
ASSERT (inet_pton (AF_INET, expected_dst2, &addr) > 0,
"wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #2",
TEST_IFCFG_WIRED_STATIC_ROUTES);
- ASSERT (nm_ip4_route_get_dest (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
"wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIRED_STATIC_ROUTES,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1842,7 +1454,7 @@ test_read_wired_static_routes (void)
ASSERT (inet_pton (AF_INET, expected_gw2, &addr) > 0,
"wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #2",
TEST_IFCFG_WIRED_STATIC_ROUTES);
- ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
"wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIRED_STATIC_ROUTES,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1875,7 +1487,7 @@ test_read_wired_static_routes_legacy (void)
GError *error = NULL;
const char *tmp;
NMIP4Route *ip4_route;
- struct in_addr addr;
+ guint32 addr;
const char *expected_id = "System test-wired-static-routes-legacy";
const char *expected_dst1 = "21.31.41.0";
const char *expected_dst2 = "32.42.52.62";
@@ -1970,7 +1582,7 @@ test_read_wired_static_routes_legacy (void)
ASSERT (inet_pton (AF_INET, expected_dst1, &addr) > 0,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #1",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
- ASSERT (nm_ip4_route_get_dest (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -1983,7 +1595,7 @@ test_read_wired_static_routes_legacy (void)
ASSERT (inet_pton (AF_INET, expected_gw1, &addr) > 0,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #1",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
- ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -2002,7 +1614,7 @@ test_read_wired_static_routes_legacy (void)
ASSERT (inet_pton (AF_INET, expected_dst2, &addr) > 0,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #2",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
- ASSERT (nm_ip4_route_get_dest (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -2015,7 +1627,7 @@ test_read_wired_static_routes_legacy (void)
ASSERT (inet_pton (AF_INET, expected_gw2, &addr) > 0,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #2",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
- ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -2034,7 +1646,7 @@ test_read_wired_static_routes_legacy (void)
ASSERT (inet_pton (AF_INET, expected_dst3, &addr) > 0,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #3",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
- ASSERT (nm_ip4_route_get_dest (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #3",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -2047,7 +1659,7 @@ test_read_wired_static_routes_legacy (void)
ASSERT (inet_pton (AF_INET, expected_gw3, &addr) > 0,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #3",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
- ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr.s_addr,
+ ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #3",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -2085,7 +1697,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
guint32 expected_prefix2 = 16;
guint32 expected_prefix3 = 8;
NMIP4Address *ip4_addr;
- struct in_addr addr;
+ guint32 addr;
connection = connection_from_file (file,
NULL,
@@ -2171,7 +1783,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
file);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
file);
@@ -2188,7 +1800,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
ASSERT (inet_pton (AF_INET, expected_address2, &addr) > 0,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #2",
file);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2",
file);
@@ -2205,7 +1817,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
ASSERT (inet_pton (AF_INET, expected_address3, &addr) > 0,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #3",
file);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3",
file);
@@ -2240,16 +1852,14 @@ test_read_wired_ipv6_manual (void)
guint32 expected_prefix1 = 56;
guint32 expected_prefix2 = 64;
guint32 expected_prefix3 = 96;
- const char *expected_route1_dest = "9876::1234";
- guint32 expected_route1_prefix = 96;
- const char *expected_route1_nexthop = "9876::7777";
- guint32 expected_route1_metric = 2;
const char *expected_dns1 = "1:2:3:4::a";
const char *expected_dns2 = "1:2:3:4::b";
NMIP6Address *ip6_addr;
NMIP6Route *ip6_route;
struct in6_addr addr;
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring manual default route*");
connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_MANUAL,
NULL,
TYPE_ETHERNET,
@@ -2260,6 +1870,8 @@ test_read_wired_ipv6_manual (void)
&route6file,
&error,
&ignore_error);
+ g_test_assert_expected_messages ();
+
ASSERT (connection != NULL,
"wired-ipv6-manual-read", "failed to read %s: %s", TEST_IFCFG_WIRED_IPV6_MANUAL, error->message);
@@ -2443,39 +2055,25 @@ test_read_wired_ipv6_manual (void)
TEST_IFCFG_WIRED_IPV6_MANUAL);
/* Routes */
- ASSERT (nm_setting_ip6_config_get_num_routes (s_ip6) == 1,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_IPV6_MANUAL,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ROUTES);
-
+ g_assert_cmpint (nm_setting_ip6_config_get_num_routes (s_ip6), ==, 2);
/* Route #1 */
ip6_route = nm_setting_ip6_config_get_route (s_ip6, 0);
- ASSERT (ip6_route,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 route #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (inet_pton (AF_INET6, expected_route1_dest, &addr) > 0,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP route dest #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_dest (ip6_route), &addr),
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route dest #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (nm_ip6_route_get_prefix (ip6_route) == expected_route1_prefix,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route #1 prefix",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (inet_pton (AF_INET6, expected_route1_nexthop, &addr) > 0,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP route next_hop #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_next_hop (ip6_route), &addr),
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route next hop #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (nm_ip6_route_get_metric (ip6_route) == expected_route1_metric,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route #1 metric",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
+ g_assert (ip6_route);
+ g_assert_cmpint (inet_pton (AF_INET6, "9876::1234", &addr), >, 0);
+ g_assert_cmpint (memcmp (nm_ip6_route_get_dest (ip6_route), &addr, sizeof (struct in6_addr)), ==, 0);
+ g_assert_cmpint (nm_ip6_route_get_prefix (ip6_route), ==, 96);
+ g_assert_cmpint (inet_pton (AF_INET6, "9876::7777", &addr), >, 0);
+ g_assert_cmpint (memcmp (nm_ip6_route_get_next_hop (ip6_route), &addr, sizeof (struct in6_addr)), ==, 0);
+ g_assert_cmpint (nm_ip6_route_get_metric (ip6_route), ==, 2);
+ /* Route #2 */
+ ip6_route = nm_setting_ip6_config_get_route (s_ip6, 1);
+ g_assert (ip6_route);
+ g_assert_cmpint (inet_pton (AF_INET6, "abbe::cafe", &addr), >, 0);
+ g_assert_cmpint (memcmp (nm_ip6_route_get_dest (ip6_route), &addr, sizeof (struct in6_addr)), ==, 0);
+ g_assert_cmpint (nm_ip6_route_get_prefix (ip6_route), ==, 64);
+ g_assert_cmpint (inet_pton (AF_INET6, "::", &addr), >, 0);
+ g_assert_cmpint (memcmp (nm_ip6_route_get_next_hop (ip6_route), &addr, sizeof (struct in6_addr)), ==, 0);
+ g_assert_cmpint (nm_ip6_route_get_metric (ip6_route), ==, 777);
/* DNS Addresses */
ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
@@ -2507,7 +2105,7 @@ test_read_wired_ipv6_manual (void)
"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP6_CONFIG_DNS_SEARCH);
g_free (unmanaged);
g_free (keyfile);
@@ -2660,12 +2258,11 @@ test_read_wired_ipv6_only (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
- /* DNS domains - none as domains are stuffed to 'ipv4' setting */
- ASSERT (nm_setting_ip6_config_get_num_dns_searches (s_ip6) == 0,
- "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_IPV6_MANUAL,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ /* DNS domains should be in IPv6, because IPv4 is disabled */
+ g_assert_cmpint (nm_setting_ip6_config_get_num_dns_searches (s_ip6), ==, 3);
+ g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 0), ==, "lorem.com");
+ g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 1), ==, "ipsum.org");
+ g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 2), ==, "dolor.edu");
g_free (unmanaged);
g_free (keyfile);
@@ -2835,6 +2432,52 @@ test_read_onboot_no (void)
g_object_unref (connection);
}
+#define TEST_IFCFG_NOIP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-noip"
+
+static void
+test_read_noip (void)
+{
+ NMConnection *connection;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_NOIP,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ g_assert (connection);
+ g_assert (nm_connection_verify (connection, &error));
+ g_assert_no_error (error);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
+
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+ g_assert (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE);
+
+ g_free (unmanaged);
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+ g_object_unref (connection);
+}
+
#define TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-8021x-peap-mschapv2"
#define TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
@@ -2995,10 +2638,6 @@ test_read_wired_8021x_peap_mschapv2 (void)
/* CA Cert */
tmp_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (tmp_8021x != NULL,
- "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: could not create temp 802.1x setting",
- TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
- NM_SETTING_802_1X_SETTING_NAME);
success = nm_setting_802_1x_set_ca_cert (tmp_8021x,
TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT,
@@ -3106,6 +2745,406 @@ test_read_wired_8021x_tls_secret_flags (const char *ifcfg, NMSettingSecretFlags
g_object_unref (connection);
}
+static void
+test_read_write_802_1X_subj_matches (void)
+{
+ NMConnection *connection, *reread;
+ NMSetting8021x *s_8021x;
+ char *written = NULL;
+ GError *error = NULL;
+ gboolean success = FALSE;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*missing IEEE_8021X_CA_CERT*peap*");
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-802-1X-subj-matches",
+ NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+ g_assert_no_error (error);
+ g_assert (connection != NULL);
+
+ /* ===== 802.1x SETTING ===== */
+ s_8021x = nm_connection_get_setting_802_1x (connection);
+ g_assert (s_8021x);
+ g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
+ g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "peap");
+ g_assert_cmpstr (nm_setting_802_1x_get_identity (s_8021x), ==, "Jara Cimrman");
+ g_assert_cmpstr (nm_setting_802_1x_get_subject_match (s_8021x), ==, "server1.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_subject_match (s_8021x), ==, "server2.yourdomain.tld");
+ g_assert_cmpint (nm_setting_802_1x_get_num_altsubject_matches (s_8021x), ==, 3);
+ g_assert_cmpstr (nm_setting_802_1x_get_altsubject_match (s_8021x, 0), ==, "a.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_altsubject_match (s_8021x, 1), ==, "b.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_altsubject_match (s_8021x, 2), ==, "c.yourdomain.tld");
+ g_assert_cmpint (nm_setting_802_1x_get_num_phase2_altsubject_matches (s_8021x), ==, 2);
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_altsubject_match (s_8021x, 0), ==, "x.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_altsubject_match (s_8021x, 1), ==, "y.yourdomain.tld");
+
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &written,
+ &error);
+ g_assert (success);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
+ /* re-read the connection for comparison */
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*missing IEEE_8021X_CA_CERT*peap*");
+ reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+ unlink (written);
+ g_free (written);
+
+ g_assert_no_error (error);
+ g_assert (reread != NULL);
+
+ success = nm_connection_verify (reread, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (success);
+
+ /* Check 802.1X stuff of the re-read connection. */
+ s_8021x = nm_connection_get_setting_802_1x (reread);
+ g_assert (s_8021x);
+ g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
+ g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "peap");
+ g_assert_cmpstr (nm_setting_802_1x_get_identity (s_8021x), ==, "Jara Cimrman");
+ g_assert_cmpstr (nm_setting_802_1x_get_subject_match (s_8021x), ==, "server1.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_subject_match (s_8021x), ==, "server2.yourdomain.tld");
+ g_assert_cmpint (nm_setting_802_1x_get_num_altsubject_matches (s_8021x), ==, 3);
+ g_assert_cmpstr (nm_setting_802_1x_get_altsubject_match (s_8021x, 0), ==, "a.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_altsubject_match (s_8021x, 1), ==, "b.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_altsubject_match (s_8021x, 2), ==, "c.yourdomain.tld");
+ g_assert_cmpint (nm_setting_802_1x_get_num_phase2_altsubject_matches (s_8021x), ==, 2);
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_altsubject_match (s_8021x, 0), ==, "x.yourdomain.tld");
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_altsubject_match (s_8021x, 1), ==, "y.yourdomain.tld");
+
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
+test_read_802_1x_ttls_eapgtc (void)
+{
+ NMConnection *connection;
+ NMSetting8021x *s_8021x;
+ GError *error = NULL;
+ gboolean success;
+
+ /* Test that EAP-* inner methods are correctly read into the
+ * NMSetting8021x::autheap property.
+ */
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-802-1x-ttls-eapgtc",
+ NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* ===== 802.1x SETTING ===== */
+ s_8021x = nm_connection_get_setting_802_1x (connection);
+ g_assert (s_8021x);
+
+ /* EAP methods */
+ g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
+ g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "ttls");
+
+ /* Auth methods */
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_auth (s_8021x), ==, NULL);
+ g_assert_cmpstr (nm_setting_802_1x_get_phase2_autheap (s_8021x), ==, "gtc");
+
+ g_object_unref (connection);
+}
+
+#define TEST_IFCFG_ALIASES_GOOD TEST_IFCFG_DIR"/network-scripts/ifcfg-aliasem0"
+
+static void
+test_read_wired_aliases_good (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingIP4Config *s_ip4;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+ const char *tmp;
+ const char *expected_id = "System aliasem0";
+ int expected_num_addresses = 4, expected_prefix = 24;
+ const char *expected_address[4] = { "192.168.1.5", "192.168.1.6", "192.168.1.9", "192.168.1.99" };
+ const char *expected_label[4] = { NULL, "aliasem0:1", "aliasem0:2", "aliasem0:99" };
+ const char *expected_gateway[4] = { "192.168.1.1", "192.168.1.1", "192.168.1.1", "192.168.1.1" };
+ int i, j;
+
+ connection = connection_from_file (TEST_IFCFG_ALIASES_GOOD,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection != NULL,
+ "aliases-good-read", "failed to read %s: %s", TEST_IFCFG_ALIASES_GOOD, error->message);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "aliases-good-verify", "failed to verify %s: %s", TEST_IFCFG_ALIASES_GOOD, error->message);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = nm_connection_get_setting_connection (connection);
+ ASSERT (s_con != NULL,
+ "aliases-good-verify-connection", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_ALIASES_GOOD,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ID */
+ tmp = nm_setting_connection_get_id (s_con);
+ ASSERT (tmp != NULL,
+ "aliases-good-verify-connection", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_ALIASES_GOOD,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+ ASSERT (strcmp (tmp, expected_id) == 0,
+ "aliases-good-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_ALIASES_GOOD,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+
+ /* ===== IPv4 SETTING ===== */
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ ASSERT (s_ip4 != NULL,
+ "aliases-good-verify-ip4", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_ALIASES_GOOD,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+
+ /* Method */
+ tmp = nm_setting_ip4_config_get_method (s_ip4);
+ ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
+ "aliases-good-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_ALIASES_GOOD,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_METHOD);
+
+ ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == expected_num_addresses,
+ "aliases-good-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_ALIASES_GOOD,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_ADDRESSES);
+
+ /* Addresses */
+ for (i = 0; i < expected_num_addresses; i++) {
+ NMIP4Address *ip4_addr;
+ char buf[INET_ADDRSTRLEN];
+ struct in_addr addr;
+
+ ip4_addr = nm_setting_ip4_config_get_address (s_ip4, i);
+ ASSERT (ip4_addr,
+ "aliases-good-verify-ip4", "failed to verify %s: missing IP4 address #%d",
+ TEST_IFCFG_ALIASES_GOOD,
+ i);
+
+ addr.s_addr = nm_ip4_address_get_address (ip4_addr);
+ ASSERT (inet_ntop (AF_INET, &addr, buf, sizeof (buf)) > 0,
+ "aliases-good-verify-ip4", "failed to verify %s: couldn't convert IP address #%d",
+ TEST_IFCFG_ALIASES_GOOD,
+ i);
+
+ for (j = 0; j < expected_num_addresses; j++) {
+ if (!g_strcmp0 (buf, expected_address[j]))
+ break;
+ }
+
+ ASSERT (j < expected_num_addresses,
+ "aliases-good-verify-ip4", "failed to verify %s: unexpected IP4 address #%d",
+ TEST_IFCFG_ALIASES_GOOD,
+ i);
+
+ ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix,
+ "aliases-good-verify-ip4", "failed to verify %s: unexpected IP4 address prefix #%d",
+ TEST_IFCFG_ALIASES_GOOD,
+ i);
+
+ if (expected_gateway[j]) {
+ ASSERT (inet_pton (AF_INET, expected_gateway[j], &addr) > 0,
+ "aliases-good-verify-ip4", "failed to verify %s: couldn't convert IP address gateway #%d",
+ TEST_IFCFG_ALIASES_GOOD,
+ i);
+ } else
+ addr.s_addr = 0;
+ ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr.s_addr,
+ "aliases-good-verify-ip4", "failed to verify %s: unexpected IP4 address gateway #%d",
+ TEST_IFCFG_ALIASES_GOOD,
+ i);
+
+ ASSERT (g_strcmp0 (NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, i)), expected_label[j]) == 0,
+ "aliases-good-verify-ip4", "failed to verify %s: unexpected IP4 address label #%d",
+ TEST_IFCFG_ALIASES_GOOD,
+ i);
+
+ expected_address[j] = NULL;
+ expected_gateway[j] = NULL;
+ expected_label[j] = NULL;
+ }
+
+ for (i = 0; i < expected_num_addresses; i++) {
+ ASSERT (expected_address[i] == NULL,
+ "aliases-good-verify-ip4", "failed to verify %s: did not find IP4 address %s",
+ TEST_IFCFG_ALIASES_GOOD,
+ expected_address[i]);
+ }
+
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+ g_object_unref (connection);
+}
+
+static void
+test_read_wired_aliases_bad (const char *base, const char *expected_id)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingIP4Config *s_ip4;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+ const char *tmp;
+ int expected_num_addresses = 1, expected_prefix = 24;
+ const char *expected_address = "192.168.1.5";
+ const char *expected_label = NULL;
+ const char *expected_gateway = "192.168.1.1";
+ NMIP4Address *ip4_addr;
+ struct in_addr addr;
+
+ connection = connection_from_file (base,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ g_test_assert_expected_messages ();
+ ASSERT (connection != NULL,
+ "aliases-bad-read", "failed to read %s: %s", base, error->message);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "aliases-bad-verify", "failed to verify %s: %s", base, error->message);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = nm_connection_get_setting_connection (connection);
+ ASSERT (s_con != NULL,
+ "aliases-bad-verify-connection", "failed to verify %s: missing %s setting",
+ base,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ID */
+ tmp = nm_setting_connection_get_id (s_con);
+ ASSERT (tmp != NULL,
+ "aliases-bad-verify-connection", "failed to verify %s: missing %s / %s key",
+ base,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+ ASSERT (strcmp (tmp, expected_id) == 0,
+ "aliases-bad-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ base,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+
+ /* ===== IPv4 SETTING ===== */
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ ASSERT (s_ip4 != NULL,
+ "aliases-bad-verify-ip4", "failed to verify %s: missing %s setting",
+ base,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+
+ /* Method */
+ tmp = nm_setting_ip4_config_get_method (s_ip4);
+ ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
+ "aliases-bad-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ base,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_METHOD);
+
+ ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == expected_num_addresses,
+ "aliases-bad-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ base,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_ADDRESSES);
+
+ /* Addresses */
+ ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+ ASSERT (ip4_addr,
+ "aliases-bad-verify-ip4", "failed to verify %s: missing IP4 address",
+ base);
+
+ ASSERT (inet_pton (AF_INET, expected_address, &addr) > 0,
+ "aliases-bad-verify-ip4", "failed to verify %s: couldn't convert IP address",
+ base);
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ "aliases-bad-verify-ip4", "failed to verify %s: unexpected IP4 address",
+ base);
+
+ ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix,
+ "aliases-bad-verify-ip4", "failed to verify %s: unexpected IP4 address prefix",
+ base);
+
+ ASSERT (inet_pton (AF_INET, expected_gateway, &addr) > 0,
+ "aliases-bad-verify-ip4", "failed to verify %s: couldn't convert IP address gateway",
+ base);
+ ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr.s_addr,
+ "aliases-bad-verify-ip4", "failed to verify %s: unexpected IP4 address gateway",
+ base);
+
+ ASSERT (g_strcmp0 (NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, 0)), expected_label) == 0,
+ "aliases-bad-verify-ip4", "failed to verify %s: unexpected IP4 address label",
+ base);
+
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+ g_object_unref (connection);
+}
+
+#define TEST_IFCFG_ALIASES_BAD_1 TEST_IFCFG_DIR"/network-scripts/ifcfg-aliasem1"
+
+static void
+test_read_wired_aliases_bad_1 (void)
+{
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*aliasem1:1*has no DEVICE*");
+ test_read_wired_aliases_bad (TEST_IFCFG_ALIASES_BAD_1, "System aliasem1");
+}
+
+#define TEST_IFCFG_ALIASES_BAD_2 TEST_IFCFG_DIR"/network-scripts/ifcfg-aliasem2"
+
+static void
+test_read_wired_aliases_bad_2 (void)
+{
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*aliasem2:1*has invalid DEVICE*");
+ test_read_wired_aliases_bad (TEST_IFCFG_ALIASES_BAD_2, "System aliasem2");
+}
+
#define TEST_IFCFG_WIFI_OPEN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open"
static void
@@ -3114,6 +3153,7 @@ test_read_wifi_open (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
+ NMSettingWirelessSecurity *s_wsec;
NMSettingIP4Config *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
@@ -3253,18 +3293,16 @@ test_read_wifi_open (void)
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_MODE);
- ASSERT (nm_setting_wireless_get_security (s_wireless) == NULL,
- "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_OPEN,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
ASSERT (nm_setting_wireless_get_channel (s_wireless) == expected_channel,
"wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_CHANNEL);
+ /* ===== WiFi SECURITY SETTING ===== */
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ g_assert (s_wsec == NULL);
+
/* ===== IPv4 SETTING ===== */
s_ip4 = nm_connection_get_setting_ip4_config (connection);
@@ -3739,20 +3777,6 @@ test_read_wifi_wep (void)
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_CHANNEL);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WEP,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WEP,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -3877,7 +3901,7 @@ test_read_wifi_wep_adhoc (void)
const char *expected_ssid = "blahblah";
const char *expected_mode = "adhoc";
const char *expected_wep_key0 = "0123456789abcdef0123456789";
- struct in_addr addr;
+ guint32 addr;
const char *expected_dns1 = "4.2.2.1";
const char *expected_dns2 = "4.2.2.2";
@@ -3983,20 +4007,6 @@ test_read_wifi_wep_adhoc (void)
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_CHANNEL);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WEP_ADHOC,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WEP_ADHOC,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -4099,7 +4109,7 @@ test_read_wifi_wep_adhoc (void)
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
"wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -4110,7 +4120,7 @@ test_read_wifi_wep_adhoc (void)
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
"wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -4176,20 +4186,6 @@ test_read_wifi_wep_passphrase (void)
TEST_IFCFG_WIFI_WEP_PASSPHRASE,
NM_SETTING_WIRELESS_SETTING_NAME);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WEP_PASSPHRASE,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WEP_PASSPHRASE,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -4314,19 +4310,6 @@ test_read_wifi_wep_40_ascii (void)
TEST_IFCFG_WIFI_WEP_40_ASCII,
NM_SETTING_WIRELESS_SETTING_NAME);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WEP_40_ASCII,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WEP_40_ASCII,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -4451,19 +4434,6 @@ test_read_wifi_wep_104_ascii (void)
TEST_IFCFG_WIFI_WEP_104_ASCII,
NM_SETTING_WIRELESS_SETTING_NAME);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WEP_104_ASCII,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WEP_104_ASCII,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -4602,20 +4572,6 @@ test_read_wifi_leap (void)
TEST_IFCFG_WIFI_LEAP,
NM_SETTING_WIRELESS_SETTING_NAME);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_LEAP,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-leap-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_LEAP,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -4716,8 +4672,6 @@ test_read_wifi_leap_secret_flags (const char *file, NMSettingSecretFlags expecte
s_wifi = nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
- g_assert (g_strcmp0 (nm_setting_wireless_get_security (s_wifi), NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
g_assert (s_wsec);
@@ -4906,19 +4860,6 @@ test_read_wifi_wpa_psk (void)
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_CHANNEL);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WPA_PSK,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WPA_PSK,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -5119,19 +5060,6 @@ test_read_wifi_wpa_psk_2 (void)
TEST_IFCFG_WIFI_WPA_PSK_2,
NM_SETTING_WIRELESS_SETTING_NAME);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WPA_PSK_2,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WPA_PSK_2,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -5224,19 +5152,6 @@ test_read_wifi_wpa_psk_unquoted (void)
TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
NM_SETTING_WIRELESS_SETTING_NAME);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -5384,19 +5299,6 @@ test_read_wifi_wpa_psk_adhoc (void)
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_MODE);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -5580,19 +5482,6 @@ test_read_wifi_wpa_psk_hex (void)
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WPA_PSK_HEX,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WPA_PSK_HEX,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -5754,21 +5643,15 @@ test_read_wifi_wpa_eap_tls (void)
NM_SETTING_802_1X_IDENTITY);
/* CA Cert */
- verify_cert_or_key (CK_CA_CERT,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
NULL,
- TEST_IFCFG_WIFI_WPA_EAP_TLS,
- "wifi-wpa-eap-tls-verify-8021x",
NM_SETTING_802_1X_CA_CERT);
/* Client Cert */
- verify_cert_or_key (CK_CLIENT_CERT,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
NULL,
- TEST_IFCFG_WIFI_WPA_EAP_TLS,
- "wifi-wpa-eap-tls-verify-8021x",
NM_SETTING_802_1X_CLIENT_CERT);
/* Private Key Password */
@@ -5786,12 +5669,9 @@ test_read_wifi_wpa_eap_tls (void)
NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
/* Private key */
- verify_cert_or_key (CK_PRIV_KEY,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
expected_privkey_password,
- TEST_IFCFG_WIFI_WPA_EAP_TLS,
- "wifi-wpa-eap-tls-verify-8021x",
NM_SETTING_802_1X_PRIVATE_KEY);
g_free (unmanaged);
@@ -5891,12 +5771,9 @@ test_read_wifi_wpa_eap_ttls_tls (void)
NM_SETTING_802_1X_EAP);
/* CA Cert */
- verify_cert_or_key (CK_CA_CERT,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS_CA_CERT,
NULL,
- TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
- "wifi-wpa-eap-ttls-tls-verify-8021x",
NM_SETTING_802_1X_CA_CERT);
/* Inner auth method */
@@ -5913,21 +5790,15 @@ test_read_wifi_wpa_eap_ttls_tls (void)
NM_SETTING_802_1X_PHASE2_AUTHEAP);
/* Inner CA Cert */
- verify_cert_or_key (CK_CA_CERT,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
NULL,
- TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
- "wifi-wpa-eap-ttls-tls-verify-8021x",
NM_SETTING_802_1X_PHASE2_CA_CERT);
/* Inner Client Cert */
- verify_cert_or_key (CK_CLIENT_CERT,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
NULL,
- TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
- "wifi-wpa-eap-ttls-tls-verify-8021x",
NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
/* Inner Private Key Password */
@@ -5945,12 +5816,9 @@ test_read_wifi_wpa_eap_ttls_tls (void)
NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
/* Inner private key */
- verify_cert_or_key (CK_PRIV_KEY,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
expected_privkey_password,
- TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
- "wifi-wpa-eap-ttls-tls-verify-8021x",
NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
/* Identity */
@@ -6011,8 +5879,6 @@ test_read_wifi_dynamic_wep_leap (void)
s_wifi = nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
- g_assert_cmpstr (nm_setting_wireless_get_security (s_wifi), ==, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
-
/* ===== WiFi SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
g_assert (s_wsec);
@@ -6159,12 +6025,9 @@ test_read_wifi_wep_eap_ttls_chap (void)
NM_SETTING_802_1X_EAP);
/* CA Cert */
- verify_cert_or_key (CK_CA_CERT,
- s_8021x,
+ verify_cert_or_key (s_8021x,
TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP_CA_CERT,
NULL,
- TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
- "wifi-wep-eap-ttls-chap-verify-8021x",
NM_SETTING_802_1X_CA_CERT);
/* Inner auth method */
@@ -6213,6 +6076,121 @@ test_read_wifi_wep_eap_ttls_chap (void)
g_object_unref (connection);
}
+static void
+test_read_wifi_hidden (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wifi;
+ gboolean success;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-hidden",
+ NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRELESS_SETTING_NAME);
+
+ s_wifi = nm_connection_get_setting_wireless (connection);
+ g_assert (s_wifi);
+ g_assert (nm_setting_wireless_get_hidden (s_wifi) == TRUE);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_wifi_hidden (void)
+{
+ NMConnection *connection, *reread;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wifi;
+ char *uuid, *testfile = NULL, *val;
+ gboolean success;
+ GError *error = NULL;
+ shvarFile *f;
+ GByteArray *ssid;
+ const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
+
+ connection = nm_connection_new ();
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write WiFi Hidden",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wifi setting */
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+ ssid = g_byte_array_sized_new (sizeof (ssid_data));
+ g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
+
+ g_object_set (s_wifi,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NM_SETTING_WIRELESS_MODE, "infrastructure",
+ NM_SETTING_WIRELESS_HIDDEN, TRUE,
+ NULL);
+
+ g_byte_array_free (ssid, TRUE);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ f = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
+ g_assert (f);
+
+ /* re-read the file to check that what key was written. */
+ val = svGetValue (f, "SSID_HIDDEN", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, "yes");
+ g_free (val);
+ svCloseFile (f);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL,
+ NULL, NULL, NULL, NULL, &error, NULL);
+ unlink (testfile);
+ g_assert_no_error (error);
+ g_assert (reread);
+
+ success = nm_connection_verify (reread, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ g_free (testfile);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
#define TEST_IFCFG_WIRED_QETH_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-qeth-static"
static void
@@ -6531,20 +6509,6 @@ test_read_wifi_wep_no_keys (void)
TEST_IFCFG_WIFI_WEP_NO_KEYS,
NM_SETTING_WIRELESS_SETTING_NAME);
- /* Security */
- tmp = nm_setting_wireless_get_security (s_wireless);
- ASSERT (tmp != NULL,
- "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIFI_WEP_NO_KEYS,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
- ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
- "wifi-wep-no-keys-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIFI_WEP_NO_KEYS,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_SEC);
-
-
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -6677,7 +6641,6 @@ test_read_wifi_wep_agent_keys (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
GError *error = NULL;
- const char *tmp;
NMWepKeyType key_type;
gboolean success;
NMSettingSecretFlags flags;
@@ -6705,8 +6668,6 @@ test_read_wifi_wep_agent_keys (void)
/* ===== WIRELESS SETTING ===== */
s_wifi = nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
- tmp = nm_setting_wireless_get_security (s_wifi);
- g_assert (g_strcmp0 (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0);
/* ===== WIRELESS SECURITY SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -6782,14 +6743,9 @@ test_write_wired_static (void)
inet_pton (AF_INET6, "cafe:ffff:eeee:dddd:cccc:bbbb:aaaa:feed", &dns6_2);
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wired-static-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wired-static-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -6803,9 +6759,6 @@ test_write_wired_static (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "wired-static-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
mac = g_byte_array_sized_new (sizeof (tmpmac));
@@ -6819,9 +6772,6 @@ test_write_wired_static (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wired-static-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -6851,9 +6801,6 @@ test_write_wired_static (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-static-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -6921,6 +6868,9 @@ test_write_wired_static (void)
ASSERT (testfile != NULL,
"wired-static-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -6986,14 +6936,9 @@ test_write_wired_dhcp (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wired-dhcp-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wired-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -7007,16 +6952,10 @@ test_write_wired_dhcp (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "wired-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wired-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -7033,9 +6972,6 @@ test_write_wired_dhcp (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -7055,6 +6991,9 @@ test_write_wired_dhcp (void)
ASSERT (testfile != NULL,
"wired-dhcp-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -7087,6 +7026,118 @@ test_write_wired_dhcp (void)
}
static void
+test_write_wired_dhcp_plus_ip (void)
+{
+ NMConnection *connection, *reread;
+ char *written = NULL;
+ GError *error = NULL;
+ gboolean success = FALSE;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip",
+ NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection != NULL);
+
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &written,
+ &error);
+ g_assert (success);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ unlink (written);
+ g_free (written);
+
+ g_assert_no_error (error);
+ g_assert (reread != NULL);
+
+ success = nm_connection_verify (reread, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (success);
+
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
+test_read_write_wired_dhcp_send_hostname (void)
+{
+ NMConnection *connection, *reread;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ const char * dhcp_hostname = "kamil-patka";
+ char *written = NULL;
+ GError *error = NULL;
+ gboolean success = FALSE;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-send-hostname",
+ NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection != NULL);
+
+ /* Check dhcp-hostname and dhcp-send-hostname */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip4);
+ g_assert (s_ip6);
+ g_assert (nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4) == TRUE);
+ g_assert_cmpstr (nm_setting_ip4_config_get_dhcp_hostname (s_ip4), ==, "svata-pulec");
+ g_assert_cmpstr (nm_setting_ip6_config_get_dhcp_hostname (s_ip6), ==, "svata-pulec");
+
+ /* Set dhcp-send-hostname=false dhcp-hostname="kamil-patka" and write the connection. */
+ g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME, FALSE, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, dhcp_hostname, NULL);
+ g_object_set (s_ip6, NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, dhcp_hostname, NULL);
+
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &written,
+ &error);
+ g_assert (success);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ unlink (written);
+ g_free (written);
+
+ g_assert_no_error (error);
+ g_assert (reread != NULL);
+
+ success = nm_connection_verify (reread, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (success);
+
+ /* Check dhcp-hostname and dhcp-send-hostname from the re-read connection. */
+ s_ip4 = nm_connection_get_setting_ip4_config (reread);
+ s_ip6 = nm_connection_get_setting_ip6_config (reread);
+ g_assert (s_ip4);
+ g_assert (s_ip6);
+ g_assert (nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4) == FALSE);
+ g_assert_cmpstr (nm_setting_ip4_config_get_dhcp_hostname (s_ip4), ==, dhcp_hostname);
+ g_assert_cmpstr (nm_setting_ip6_config_get_dhcp_hostname (s_ip6), ==, dhcp_hostname);
+
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
test_write_wired_static_ip6_only (void)
{
NMConnection *connection;
@@ -7114,14 +7165,9 @@ test_write_wired_static_ip6_only (void)
inet_pton (AF_INET6, "fade:0102:0103::face", &dns6);
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wired-static-ip6-only-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wired-static-ip6-only-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -7135,9 +7181,6 @@ test_write_wired_static_ip6_only (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "wired-static-ip6-only-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
mac = g_byte_array_sized_new (sizeof (tmpmac));
@@ -7147,9 +7190,6 @@ test_write_wired_static_ip6_only (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wired-static-ip6-only-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -7158,9 +7198,6 @@ test_write_wired_static_ip6_only (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-static-ip6-only-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -7193,6 +7230,9 @@ test_write_wired_static_ip6_only (void)
ASSERT (testfile != NULL,
"wired-static-ip6-only-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -7236,7 +7276,7 @@ test_write_wired_static_ip6_only (void)
* That way, the gateway actually defaults to "::".
*/
static void
-test_write_wired_static_ip6_only_gw (const char *gateway_addr)
+test_write_wired_static_ip6_only_gw (gconstpointer user_data)
{
NMConnection *connection;
NMConnection *reread;
@@ -7259,12 +7299,11 @@ test_write_wired_static_ip6_only_gw (const char *gateway_addr)
char s_gateway6[INET6_ADDRSTRLEN] = { 0 };
struct in6_addr gateway6_autovar;
const struct in6_addr *gateway6 = NULL;
- char *unmanaged = NULL, *keyfile = NULL, *routefile = NULL, *route6file = NULL;
/* parsing the input argument and set the struct in6_addr "gateway6" to
* the gateway address. NULL means "do not set the gateway explicitly". */
- if (gateway_addr) {
- g_assert_cmpint (inet_pton (AF_INET6, gateway_addr, &gateway6_autovar), ==, 1);
+ if (user_data) {
+ g_assert_cmpint (inet_pton (AF_INET6, user_data, &gateway6_autovar), ==, 1);
gateway6 = &gateway6_autovar;
}
@@ -7338,22 +7377,27 @@ test_write_wired_static_ip6_only_gw (const char *gateway_addr)
g_assert (success);
g_assert (testfile);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
+ NULL, NULL, NULL,
+ NULL, NULL,
&error,
&ignore_error);
+ g_assert_no_error (error);
+ g_assert (reread);
+ g_assert (nm_connection_verify (reread, &error));
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
{
/* re-read the file to check that what key was written. */
- shvarFile *ifcfg = svNewFile (testfile);
+ shvarFile *ifcfg = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
g_assert (ifcfg);
written_ifcfg_gateway = svGetValue (ifcfg, "IPV6_DEFAULTGW", FALSE);
svCloseFile (ifcfg);
@@ -7361,17 +7405,6 @@ test_write_wired_static_ip6_only_gw (const char *gateway_addr)
unlink (testfile);
- g_assert_no_error (error);
- g_assert (reread);
-
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
-
- g_assert (nm_connection_verify (reread, &error));
- g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
-
/* access the gateway from the loaded connection. */
s_ip6 = nm_connection_get_setting_ip6_config (reread);
g_assert (s_ip6 && nm_setting_ip6_config_get_num_addresses (s_ip6)==1);
@@ -7502,6 +7535,9 @@ test_read_write_static_routes_legacy (void)
ASSERT (testfile != NULL,
"read-write-static-routes-legacy-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -7578,14 +7614,9 @@ test_write_wired_static_routes (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wired-static-routes-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wired-static-routes-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -7599,9 +7630,6 @@ test_write_wired_static_routes (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "wired-static-routes-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
mac = g_byte_array_sized_new (sizeof (tmpmac));
@@ -7615,9 +7643,6 @@ test_write_wired_static_routes (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wired-static-routes-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -7662,9 +7687,6 @@ test_write_wired_static_routes (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-dhcp-8021x-peap-mschapv2write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -7688,6 +7710,9 @@ test_write_wired_static_routes (void)
ASSERT (testfile != NULL,
"wired-static-routes-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -7744,14 +7769,9 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wired-dhcp-8021x-peap-mschapv2write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wired-dhcp-8021x-peap-mschapv2write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -7765,25 +7785,16 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "wired-dhcp-8021x-peap-mschapv2write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wired-dhcp-8021x-peap-mschapv2write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-dhcp-8021x-peap-mschapv2write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -7793,9 +7804,6 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
/* 802.1x setting */
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (s_8021x != NULL,
- "wired-dhcp-8021x-peap-mschapv2write", "failed to allocate new %s setting",
- NM_SETTING_802_1X_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_8021x));
g_object_set (s_8021x,
@@ -7834,6 +7842,9 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
ASSERT (testfile != NULL,
"wired-dhcp-8021x-peap-mschapv2write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -7879,10 +7890,8 @@ file_to_byte_array (const char *filename)
if (g_file_get_contents (filename, &contents, &length, NULL)) {
array = g_byte_array_sized_new (length);
- if (array) {
- g_byte_array_append (array, (guint8 *) contents, length);
- g_assert (array->len == length);
- }
+ g_byte_array_append (array, (guint8 *) contents, length);
+ g_assert (array->len == length);
g_free (contents);
}
return array;
@@ -8018,6 +8027,9 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
g_assert (success);
g_assert (testfile != NULL);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -8104,6 +8116,354 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
g_object_unref (reread);
}
+#define TEST_SCRATCH_ALIAS_BASE TEST_SCRATCH_DIR "/network-scripts/ifcfg-alias0"
+
+static void
+test_write_wired_aliases (void)
+{
+ NMConnection *connection;
+ NMConnection *reread;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ char *uuid;
+ int num_addresses = 4;
+ guint32 ip[] = { 0x01010101, 0x01010102, 0x01010103, 0x01010104 };
+ const char *label[] = { NULL, "alias0:2", NULL, "alias0:3" };
+ const guint32 gw = htonl (0x01010101);
+ const guint32 prefix = 24;
+ NMIP4Address *addr;
+ gboolean success;
+ GError *error = NULL;
+ char *testfile = NULL;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ shvarFile *ifcfg;
+ int i, j;
+
+ connection = nm_connection_new ();
+ ASSERT (connection != NULL,
+ "wired-aliases-write", "failed to allocate new connection");
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ ASSERT (s_con != NULL,
+ "wired-aliases-write", "failed to allocate new %s setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "alias0",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ ASSERT (s_wired != NULL,
+ "wired-aliases-write", "failed to allocate new %s setting",
+ NM_SETTING_WIRED_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* IP4 setting */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ ASSERT (s_ip4 != NULL,
+ "wired-aliases-write", "failed to allocate new %s setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ g_object_set (s_ip4,
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+
+ for (i = 0; i < num_addresses; i++) {
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, ip[i]);
+ nm_ip4_address_set_prefix (addr, prefix);
+ nm_ip4_address_set_gateway (addr, gw);
+ NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_add_address_with_label (s_ip4, addr, label[i]));
+ nm_ip4_address_unref (addr);
+ }
+
+ ASSERT (nm_connection_verify (connection, &error) == TRUE,
+ "wired-aliases-write", "failed to verify connection: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ /* Create some pre-existing alias files, to make sure they get overwritten / deleted. */
+ ifcfg = svCreateFile (TEST_SCRATCH_ALIAS_BASE ":2");
+ svSetValue (ifcfg, "DEVICE", "alias0:2", FALSE);
+ svSetValue (ifcfg, "IPADDR", "192.168.1.2", FALSE);
+ svWriteFile (ifcfg, 0644, NULL);
+ svCloseFile (ifcfg);
+ ASSERT (g_file_test (TEST_SCRATCH_ALIAS_BASE ":2", G_FILE_TEST_EXISTS),
+ "wired-aliases-write", "failed to write extra alias file");
+
+ ifcfg = svCreateFile (TEST_SCRATCH_ALIAS_BASE ":5");
+ svSetValue (ifcfg, "DEVICE", "alias0:5", FALSE);
+ svSetValue (ifcfg, "IPADDR", "192.168.1.5", FALSE);
+ svWriteFile (ifcfg, 0644, NULL);
+ svCloseFile (ifcfg);
+ ASSERT (g_file_test (TEST_SCRATCH_ALIAS_BASE ":5", G_FILE_TEST_EXISTS),
+ "wired-aliases-write", "failed to write extra alias file");
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ ASSERT (success == TRUE,
+ "wired-aliases-write", "failed to write connection to disk: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ ASSERT (testfile != NULL,
+ "wired-aliases-write", "didn't get ifcfg file path back after writing connection");
+
+ /* Re-check the alias files */
+ ASSERT (g_file_test (TEST_SCRATCH_ALIAS_BASE ":2", G_FILE_TEST_EXISTS),
+ "wired-aliases-write", "saving failed to write ifcfg-alias0:2");
+ ASSERT (g_file_test (TEST_SCRATCH_ALIAS_BASE ":3", G_FILE_TEST_EXISTS),
+ "wired-aliases-write", "saving failed to write ifcfg-alias0:3");
+ ASSERT (!g_file_test (TEST_SCRATCH_ALIAS_BASE ":5", G_FILE_TEST_EXISTS),
+ "wired-aliases-write", "saving failed to delete unused ifcfg-alias0:5");
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ unlink (testfile);
+ unlink (TEST_SCRATCH_ALIAS_BASE ":2");
+ unlink (TEST_SCRATCH_ALIAS_BASE ":3");
+
+ ASSERT (reread != NULL,
+ "wired-aliases-write-reread", "failed to read %s: %s", testfile, error->message);
+
+ ASSERT (nm_connection_verify (reread, &error),
+ "wired-aliases-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
+
+ /* nm_connection_compare() is not guaranteed to succeed, because the
+ * aliases get read back in essentially random order. So just
+ * verify the aliases manually.
+ */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == num_addresses,
+ "wired-aliases-write-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ testfile,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_ADDRESSES);
+
+ /* Addresses */
+ for (i = 0; i < num_addresses; i++) {
+ guint32 addrbytes;
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, i);
+ ASSERT (addr,
+ "wired-aliases-write-verify-ip4", "failed to verify %s: missing IP4 address #%d",
+ testfile,
+ i);
+
+ addrbytes = nm_ip4_address_get_address (addr);
+ for (j = 0; j < num_addresses; j++) {
+ if (addrbytes == ip[j])
+ break;
+ }
+
+ ASSERT (j < num_addresses,
+ "wired-aliases-write-verify-ip4", "failed to verify %s: unexpected IP4 address #%d",
+ testfile,
+ i);
+
+ ASSERT (nm_ip4_address_get_prefix (addr) == prefix,
+ "wired-aliases-write-verify-ip4", "failed to verify %s: unexpected IP4 address prefix #%d",
+ testfile,
+ i);
+
+ ASSERT (nm_ip4_address_get_gateway (addr) == gw,
+ "wired-aliases-write-verify-ip4", "failed to verify %s: unexpected IP4 address gateway #%d",
+ testfile,
+ i);
+
+ ASSERT (g_strcmp0 (NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, i)), label[j]) == 0,
+ "wired-aliases-write-verify-ip4", "failed to verify %s: unexpected IP4 address label #%d",
+ testfile,
+ i);
+
+ ip[j] = 0;
+ }
+
+ for (i = 0; i < num_addresses; i++) {
+ ASSERT (ip[i] == 0,
+ "wired-aliases-write-verify-ip4", "failed to verify %s: did not find IP4 address 0x%08x",
+ testfile,
+ ip[i]);
+ }
+
+ g_free (testfile);
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
+test_write_gateway (void)
+{
+ NMConnection *connection, *reread;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ char *uuid, *testfile = NULL, *val;
+ gboolean success;
+ GError *error = NULL;
+ shvarFile *f;
+ NMIP4Address *addr;
+ const char *ip1_str = "1.1.1.3";
+ const char *ip2_str = "2.2.2.5";
+ const char *gw1_str = "1.1.1.254";
+ const char *gw2_str = "2.2.2.254";
+ struct in_addr ip1, ip2, gw1, gw2;
+ const guint32 prefix = 24;
+
+ connection = nm_connection_new ();
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Static Addresses Gateway",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* IP4 setting */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ g_object_set (s_ip4,
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+
+ inet_pton (AF_INET, ip1_str, &ip1);
+ inet_pton (AF_INET, ip2_str, &ip2);
+ inet_pton (AF_INET, gw1_str, &gw1);
+ inet_pton (AF_INET, gw2_str, &gw2);
+
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, ip1.s_addr);
+ nm_ip4_address_set_prefix (addr, prefix);
+ nm_ip4_address_set_gateway (addr, gw1.s_addr);
+ nm_setting_ip4_config_add_address (s_ip4, addr);
+ nm_ip4_address_unref (addr);
+
+ addr = nm_ip4_address_new ();
+ nm_ip4_address_set_address (addr, ip2.s_addr);
+ nm_ip4_address_set_prefix (addr, prefix);
+ nm_ip4_address_set_gateway (addr, gw2.s_addr);
+ nm_setting_ip4_config_add_address (s_ip4, addr);
+ nm_ip4_address_unref (addr);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ f = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
+ g_assert (f);
+
+ /* re-read the file to check that the keys was written as IPADDR, GATEWAY and IPADDR1, GATEWAY1 */
+ val = svGetValue (f, "IPADDR", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, ip1_str);
+ g_free (val);
+
+ val = svGetValue (f, "IPADDR1", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, ip2_str);
+ g_free (val);
+
+ val = svGetValue (f, "IPADDR0", FALSE);
+ g_assert (val == NULL);
+
+ val = svGetValue (f, "PREFIX", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, "24");
+ g_free (val);
+
+ val = svGetValue (f, "PREFIX1", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, "24");
+ g_free (val);
+
+ val = svGetValue (f, "PREFIX0", FALSE);
+ g_assert (val == NULL);
+
+ val = svGetValue (f, "GATEWAY", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, gw1_str);
+ g_free (val);
+
+ val = svGetValue (f, "GATEWAY1", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, gw2_str);
+ g_free (val);
+
+ val = svGetValue (f, "GATEWAY0", FALSE);
+ g_assert (val == NULL);
+
+
+ svCloseFile (f);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL,
+ NULL, NULL, NULL, NULL, &error, NULL);
+ unlink (testfile);
+ g_assert_no_error (error);
+ g_assert (reread);
+
+ success = nm_connection_verify (reread, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ g_free (testfile);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+
static void
test_write_wifi_open (void)
{
@@ -8133,14 +8493,9 @@ test_write_wifi_open (void)
char *tmp;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-open-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-open-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -8154,9 +8509,6 @@ test_write_wifi_open (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-open-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -8182,18 +8534,12 @@ test_write_wifi_open (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-open-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-open-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -8217,6 +8563,9 @@ test_write_wifi_open (void)
ASSERT (testfile != NULL,
"wifi-open-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -8228,11 +8577,12 @@ test_write_wifi_open (void)
&route6file,
&error,
&ignore_error);
+ g_assert_no_error (error);
/* Now make sure that the ESSID item isn't double-quoted (rh #606518) */
- ifcfg = svNewFile (testfile);
- ASSERT (ifcfg != NULL,
- "wifi-open-write-reread", "failed to load %s as shvarfile", testfile);
+ ifcfg = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
+ g_assert (ifcfg != NULL);
tmp = svGetValue (ifcfg, "ESSID", TRUE);
ASSERT (tmp != NULL,
@@ -8286,14 +8636,9 @@ test_write_wifi_open_hex_ssid (void)
const unsigned char ssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd };
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-open-hex-ssid-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-open-hex-ssid-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -8307,9 +8652,6 @@ test_write_wifi_open_hex_ssid (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-open-hex-ssid-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -8324,18 +8666,12 @@ test_write_wifi_open_hex_ssid (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-open-hex-ssid-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-open-hex-ssid-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -8359,6 +8695,9 @@ test_write_wifi_open_hex_ssid (void)
ASSERT (testfile != NULL,
"wifi-open-hex-ssid-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -8414,14 +8753,9 @@ test_write_wifi_wep (void)
struct stat statbuf;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wep-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wep-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -8435,9 +8769,6 @@ test_write_wifi_wep (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wep-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -8446,16 +8777,12 @@ test_write_wifi_wep (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wep-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -8470,18 +8797,12 @@ test_write_wifi_wep (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wep-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wep-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -8505,6 +8826,9 @@ test_write_wifi_wep (void)
ASSERT (testfile != NULL,
"wifi-wep-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -8577,14 +8901,9 @@ test_write_wifi_wep_adhoc (void)
const guint32 prefix = 24;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wep-adhoc-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wep-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -8598,9 +8917,6 @@ test_write_wifi_wep_adhoc (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wep-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -8609,16 +8925,12 @@ test_write_wifi_wep_adhoc (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "adhoc",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wep-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", NULL);
@@ -8626,9 +8938,6 @@ test_write_wifi_wep_adhoc (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wep-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
@@ -8645,9 +8954,6 @@ test_write_wifi_wep_adhoc (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wep-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -8671,6 +8977,9 @@ test_write_wifi_wep_adhoc (void)
ASSERT (testfile != NULL,
"wifi-wep-adhoc-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -8738,14 +9047,9 @@ test_write_wifi_wep_passphrase (void)
struct stat statbuf;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wep-passphrase-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wep-passphrase-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -8759,9 +9063,6 @@ test_write_wifi_wep_passphrase (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wep-passphrase-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -8770,16 +9071,12 @@ test_write_wifi_wep_passphrase (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wep-passphrase-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -8792,18 +9089,12 @@ test_write_wifi_wep_passphrase (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wep-passphrase-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wep-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -8827,6 +9118,9 @@ test_write_wifi_wep_passphrase (void)
ASSERT (testfile != NULL,
"wifi-wep-passphrase-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -8894,14 +9188,9 @@ test_write_wifi_wep_40_ascii (void)
struct stat statbuf;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wep-40-ascii-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -8915,9 +9204,6 @@ test_write_wifi_wep_40_ascii (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -8926,16 +9212,12 @@ test_write_wifi_wep_40_ascii (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -8950,18 +9232,12 @@ test_write_wifi_wep_40_ascii (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -8985,6 +9261,9 @@ test_write_wifi_wep_40_ascii (void)
ASSERT (testfile != NULL,
"wifi-wep-40-ascii-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -9052,14 +9331,9 @@ test_write_wifi_wep_104_ascii (void)
struct stat statbuf;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wep-104-ascii-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -9073,9 +9347,6 @@ test_write_wifi_wep_104_ascii (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -9084,16 +9355,12 @@ test_write_wifi_wep_104_ascii (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -9108,18 +9375,12 @@ test_write_wifi_wep_104_ascii (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -9143,6 +9404,9 @@ test_write_wifi_wep_104_ascii (void)
ASSERT (testfile != NULL,
"wifi-wep-104-ascii-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -9210,14 +9474,9 @@ test_write_wifi_leap (void)
struct stat statbuf;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-leap-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-leap-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -9231,9 +9490,6 @@ test_write_wifi_leap (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-leap-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -9242,16 +9498,12 @@ test_write_wifi_leap (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-leap-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -9263,18 +9515,12 @@ test_write_wifi_leap (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-leap-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-leap-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -9298,6 +9544,9 @@ test_write_wifi_leap (void)
ASSERT (testfile != NULL,
"wifi-leap-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -9389,7 +9638,6 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
@@ -9435,6 +9683,9 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
g_assert (success);
g_assert (testfile);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -9505,14 +9756,9 @@ test_write_wifi_wpa_psk (const char *name,
g_return_if_fail (psk != NULL);
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- test_name, "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- test_name, "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -9526,9 +9772,6 @@ test_write_wifi_wpa_psk (const char *name,
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- test_name, "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -9537,16 +9780,12 @@ test_write_wifi_wpa_psk (const char *name,
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- test_name, "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -9571,18 +9810,12 @@ test_write_wifi_wpa_psk (const char *name,
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- test_name, "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- test_name, "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -9606,6 +9839,9 @@ test_write_wifi_wpa_psk (const char *name,
ASSERT (testfile != NULL,
test_name, "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -9671,14 +9907,9 @@ test_write_wifi_wpa_psk_adhoc (void)
const guint32 prefix = 24;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wpa-psk-adhoc-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wpa-psk-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -9692,9 +9923,6 @@ test_write_wifi_wpa_psk_adhoc (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wpa-psk-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -9703,7 +9931,6 @@ test_write_wifi_wpa_psk_adhoc (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "adhoc",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NM_SETTING_WIRELESS_CHANNEL, 11,
NM_SETTING_WIRELESS_BAND, "bg",
NULL);
@@ -9712,9 +9939,6 @@ test_write_wifi_wpa_psk_adhoc (void)
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wpa-psk-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -9727,9 +9951,6 @@ test_write_wifi_wpa_psk_adhoc (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wpa-psk-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
@@ -9746,9 +9967,6 @@ test_write_wifi_wpa_psk_adhoc (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wpa-psk-adhoc-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -9772,6 +9990,9 @@ test_write_wifi_wpa_psk_adhoc (void)
ASSERT (testfile != NULL,
"wifi-wpa-psk-adhoc-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -9831,14 +10052,9 @@ test_write_wifi_wpa_eap_tls (void)
const char *ssid_data = "blahblah";
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wpa-eap-tls-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wpa-eap-tls-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -9852,9 +10068,6 @@ test_write_wifi_wpa_eap_tls (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wpa-eap-tls-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (strlen (ssid_data));
@@ -9863,16 +10076,12 @@ test_write_wifi_wpa_eap_tls (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wpa-eap-tls-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
@@ -9882,9 +10091,6 @@ test_write_wifi_wpa_eap_tls (void)
/* Wireless security setting */
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (s_8021x != NULL,
- "wifi-wpa-eap-tls-write", "failed to allocate new %s setting",
- NM_SETTING_802_1X_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_8021x));
g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
@@ -9921,18 +10127,12 @@ test_write_wifi_wpa_eap_tls (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wpa-eap-tls-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wpa-eap-tls-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -9956,6 +10156,9 @@ test_write_wifi_wpa_eap_tls (void)
ASSERT (testfile != NULL,
"wifi-wpa-eap-tls-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10015,14 +10218,9 @@ test_write_wifi_wpa_eap_ttls_tls (void)
const char *ssid_data = "blahblah";
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wpa-eap-ttls-tls-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wpa-eap-ttls-tls-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -10036,9 +10234,6 @@ test_write_wifi_wpa_eap_ttls_tls (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wpa-eap-ttls-tls-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (strlen (ssid_data));
@@ -10047,16 +10242,12 @@ test_write_wifi_wpa_eap_ttls_tls (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wpa-eap-ttls-tls-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
@@ -10066,9 +10257,6 @@ test_write_wifi_wpa_eap_ttls_tls (void)
/* Wireless security setting */
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (s_8021x != NULL,
- "wifi-wpa-eap-ttls-tls-write", "failed to allocate new %s setting",
- NM_SETTING_802_1X_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_8021x));
nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
@@ -10123,18 +10311,12 @@ test_write_wifi_wpa_eap_ttls_tls (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wpa-eap-ttls-tls-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wpa-eap-ttls-tls-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -10158,6 +10340,9 @@ test_write_wifi_wpa_eap_ttls_tls (void)
ASSERT (testfile != NULL,
"wifi-wpa-eap-ttls-tls-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10217,14 +10402,9 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
const char *ssid_data = "blahblah";
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-wpa-eap-ttls-mschapv2-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-wpa-eap-ttls-mschapv2-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -10238,9 +10418,6 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-wpa-eap-ttls-mschapv2-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (strlen (ssid_data));
@@ -10249,16 +10426,12 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- "wifi-wpa-eap-ttls-mschapv2-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
@@ -10271,9 +10444,6 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
/* Wireless security setting */
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
- ASSERT (s_8021x != NULL,
- "wifi-wpa-eap-ttls-mschapv2-write", "failed to allocate new %s setting",
- NM_SETTING_802_1X_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_8021x));
nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
@@ -10297,18 +10467,12 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-wpa-eap-ttls-mschapv2-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wifi-wpa-eap-ttls-mschapv2-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -10332,6 +10496,9 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
ASSERT (testfile != NULL,
"wifi-wpa-eap-ttls-mschapv2-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10421,7 +10588,6 @@ test_write_wifi_wpa_then_open (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
@@ -10474,6 +10640,9 @@ test_write_wifi_wpa_then_open (void)
g_assert (success);
g_assert (testfile);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10503,9 +10672,6 @@ test_write_wifi_wpa_then_open (void)
g_object_unref (reread);
/* Now change the connection to open and recheck */
- s_wifi = nm_connection_get_setting_wireless (connection);
- g_assert (s_wifi);
- g_object_set (s_wifi, NM_SETTING_WIRELESS_SEC, NULL, NULL);
nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
/* Write it back out */
@@ -10521,6 +10687,9 @@ test_write_wifi_wpa_then_open (void)
g_free (keyfile);
keyfile = NULL;
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read it for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10618,7 +10787,6 @@ test_write_wifi_wpa_then_wep_with_perms (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
@@ -10671,6 +10839,9 @@ test_write_wifi_wpa_then_wep_with_perms (void)
g_assert (success);
g_assert (testfile);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10721,6 +10892,9 @@ test_write_wifi_wpa_then_wep_with_perms (void)
g_free (keyfile);
keyfile = NULL;
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read it for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10811,7 +10985,6 @@ test_write_wifi_dynamic_wep_leap (void)
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
@@ -10864,6 +11037,9 @@ test_write_wifi_dynamic_wep_leap (void)
g_assert (success);
g_assert (testfile);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -10891,7 +11067,8 @@ test_write_wifi_dynamic_wep_leap (void)
* did not get written. Check first that the auth alg is not set to "LEAP"
* and next that the only IEEE 802.1x EAP method is "LEAP".
*/
- ifcfg = svNewFile (testfile);
+ ifcfg = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
g_assert (ifcfg);
tmp = svGetValue (ifcfg, "SECURITYMODE", FALSE);
g_assert_cmpstr (tmp, ==, NULL);
@@ -11074,7 +11251,7 @@ test_read_ibft_static (void)
guint64 expected_timestamp = 0;
const char *expected_dns1 = "10.16.255.2";
const char *expected_dns2 = "10.16.255.3";
- struct in_addr addr;
+ guint32 addr;
const char *expected_address1 = "192.168.32.72";
const char *expected_address1_gw = "192.168.35.254";
NMIP4Address *ip4_addr;
@@ -11202,7 +11379,7 @@ test_read_ibft_static (void)
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
"ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -11213,7 +11390,7 @@ test_read_ibft_static (void)
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
"ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -11244,7 +11421,7 @@ test_read_ibft_static (void)
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
"ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -11255,7 +11432,7 @@ test_read_ibft_static (void)
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
- ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr,
"ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway",
TEST_IFCFG_IBFT_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -11269,7 +11446,7 @@ test_read_ibft_static (void)
}
static void
-test_read_ibft_malformed (const char *name, const char *iscsiadm_path)
+test_read_ibft_malformed (const char *name, const char *iscsiadm_path, gboolean expect_warning)
{
NMConnection *connection;
char *unmanaged = NULL;
@@ -11281,6 +11458,10 @@ test_read_ibft_malformed (const char *name, const char *iscsiadm_path)
g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS));
+ if (expect_warning) {
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*malformed iscsiadm record*");
+ }
connection = connection_from_file (TEST_IFCFG_IBFT_STATIC,
NULL,
TYPE_ETHERNET,
@@ -11291,6 +11472,8 @@ test_read_ibft_malformed (const char *name, const char *iscsiadm_path)
&route6file,
&error,
&ignore_error);
+ if (expect_warning)
+ g_test_assert_expected_messages ();
ASSERT (connection == NULL,
name, "unexpectedly able to read %s", TEST_IFCFG_IBFT_STATIC);
@@ -11321,14 +11504,9 @@ test_write_wired_qeth_dhcp (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wired-qeth-dhcp-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wired-qeth-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -11342,9 +11520,6 @@ test_write_wired_qeth_dhcp (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "wired-qeth-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
subchans = g_ptr_array_sized_new (3);
@@ -11364,9 +11539,6 @@ test_write_wired_qeth_dhcp (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wired-qeth-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -11375,9 +11547,6 @@ test_write_wired_qeth_dhcp (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-qeth-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -11402,6 +11571,9 @@ test_write_wired_qeth_dhcp (void)
ASSERT (testfile != NULL,
"wired-qeth-dhcp-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -11520,7 +11692,8 @@ test_write_wired_ctc_dhcp (void)
g_assert (testfile != NULL);
/* Ensure the CTCPROT item gets written out as it's own option */
- ifcfg = svNewFile (testfile);
+ ifcfg = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
g_assert (ifcfg);
tmp = svGetValue (ifcfg, "CTCPROT", TRUE);
@@ -11535,6 +11708,9 @@ test_write_wired_ctc_dhcp (void)
svCloseFile (ifcfg);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -11588,14 +11764,9 @@ test_write_permissions (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "permissions-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "permissions-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -11613,16 +11784,10 @@ test_write_permissions (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "permissions-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "permissions-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -11631,9 +11796,6 @@ test_write_permissions (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-qeth-dhcp-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -11658,6 +11820,9 @@ test_write_permissions (void)
ASSERT (testfile != NULL,
"permissions-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -11755,7 +11920,6 @@ test_write_wifi_wep_agent_keys (void)
g_byte_array_append (ssid, (guint8 *) str_ssid, strlen (str_ssid));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
g_byte_array_free (ssid, TRUE);
@@ -11786,6 +11950,9 @@ test_write_wifi_wep_agent_keys (void)
g_assert (success);
g_assert (testfile != NULL);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -11847,14 +12014,9 @@ test_write_wired_pppoe (void)
char *testfile = NULL;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wired-pppoe-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wired-pppoe-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -11868,16 +12030,10 @@ test_write_wired_pppoe (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "wired-pppoe-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wired-pppoe-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -11886,9 +12042,6 @@ test_write_wired_pppoe (void)
/* PPPoE setting */
s_pppoe = (NMSettingPPPOE *) nm_setting_pppoe_new ();
- ASSERT (s_pppoe != NULL,
- "wired-pppoe-write", "failed to allocate new %s setting",
- NM_SETTING_PPPOE_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_pppoe));
g_object_set (G_OBJECT (s_pppoe),
@@ -11899,9 +12052,6 @@ test_write_wired_pppoe (void)
/* PPP setting */
s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
- ASSERT (s_ppp != NULL,
- "wired-pppoe-write", "failed to allocate new %s setting",
- NM_SETTING_PPP_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ppp));
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -11932,14 +12082,9 @@ test_write_vpn (void)
char *testfile = NULL;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "vpn-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "vpn-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -11953,9 +12098,6 @@ test_write_vpn (void)
/* VPN setting */
s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
- ASSERT (s_vpn != NULL,
- "vpn-write", "failed to allocate new %s setting",
- NM_SETTING_VPN_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_vpn));
g_object_set (s_vpn,
@@ -11968,9 +12110,6 @@ test_write_vpn (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "vpn-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -12008,14 +12147,9 @@ test_write_mobile_broadband (gboolean gsm)
char *testfile = NULL;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "mobile-broadband-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "mobile-broadband-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -12030,18 +12164,12 @@ test_write_mobile_broadband (gboolean gsm)
if (gsm) {
/* GSM setting */
s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
- ASSERT (s_gsm != NULL,
- "mobile-broadband-write", "failed to allocate new %s setting",
- NM_SETTING_GSM_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_gsm));
g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
} else {
/* CDMA setting */
s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
- ASSERT (s_cdma != NULL,
- "mobile-broadband-write", "failed to allocate new %s setting",
- NM_SETTING_CDMA_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_cdma));
g_object_set (s_cdma, NM_SETTING_CDMA_NUMBER, "#777", NULL);
@@ -12049,9 +12177,6 @@ test_write_mobile_broadband (gboolean gsm)
/* Serial setting */
s_serial = (NMSettingSerial *) nm_setting_serial_new ();
- ASSERT (s_serial != NULL,
- "mobile-broadband-write", "failed to allocate new %s setting",
- NM_SETTING_SERIAL_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_serial));
g_object_set (s_serial,
@@ -12063,9 +12188,6 @@ test_write_mobile_broadband (gboolean gsm)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "mobile-broadband-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -12074,9 +12196,6 @@ test_write_mobile_broadband (gboolean gsm)
/* PPP setting */
s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
- ASSERT (s_ppp != NULL,
- "mobile-broadband-write", "failed to allocate new %s setting",
- NM_SETTING_PPP_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ppp));
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -12101,6 +12220,8 @@ test_read_bridge_main (void)
{
NMConnection *connection;
NMSettingBridge *s_bridge;
+ const GByteArray *array;
+ char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -12128,11 +12249,16 @@ test_read_bridge_main (void)
g_assert (s_bridge);
g_assert_cmpstr (nm_setting_bridge_get_interface_name (s_bridge), ==, "br0");
g_assert_cmpuint (nm_setting_bridge_get_forward_delay (s_bridge), ==, 0);
- g_assert_cmpuint (nm_setting_bridge_get_stp (s_bridge), ==, TRUE);
+ g_assert (nm_setting_bridge_get_stp (s_bridge));
g_assert_cmpuint (nm_setting_bridge_get_priority (s_bridge), ==, 32744);
g_assert_cmpuint (nm_setting_bridge_get_hello_time (s_bridge), ==, 7);
g_assert_cmpuint (nm_setting_bridge_get_max_age (s_bridge), ==, 39);
g_assert_cmpuint (nm_setting_bridge_get_ageing_time (s_bridge), ==, 235352);
+ /* MAC address */
+ array = nm_setting_bridge_get_mac_address (s_bridge);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, ETH_ALEN);
+ g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
g_free (unmanaged);
g_free (keyfile);
@@ -12155,6 +12281,8 @@ test_write_bridge_main (void)
const guint32 gw = htonl (0x01010101);
const guint32 prefix = 24;
NMIP4Address *addr;
+ static unsigned char bridge_mac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
+ GByteArray *mac_array;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -12186,9 +12314,13 @@ test_write_bridge_main (void)
g_assert (s_bridge);
nm_connection_add_setting (connection, NM_SETTING (s_bridge));
+ mac_array = g_byte_array_sized_new (sizeof (bridge_mac));
+ g_byte_array_append (mac_array, bridge_mac, sizeof (bridge_mac));
g_object_set (s_bridge,
NM_SETTING_BRIDGE_INTERFACE_NAME, "br0",
+ NM_SETTING_BRIDGE_MAC_ADDRESS, mac_array,
NULL);
+ g_byte_array_free (mac_array, TRUE);
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
@@ -12227,6 +12359,9 @@ test_write_bridge_main (void)
g_assert (success);
g_assert_cmpstr (testfile, !=, NULL);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -12379,6 +12514,9 @@ test_write_bridge_component (void)
g_assert (success);
g_assert (testfile);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -12442,7 +12580,7 @@ test_read_bridge_missing_stp (void)
s_bridge = nm_connection_get_setting_bridge (connection);
g_assert (s_bridge);
g_assert_cmpstr (nm_setting_bridge_get_interface_name (s_bridge), ==, "br0");
- g_assert_cmpuint (nm_setting_bridge_get_stp (s_bridge), ==, FALSE);
+ g_assert (nm_setting_bridge_get_stp (s_bridge) == FALSE);
g_free (unmanaged);
g_free (keyfile);
@@ -12612,15 +12750,10 @@ test_read_vlan_physdev (void)
NMConnection *connection;
GError *error = NULL;
NMSettingVlan *s_vlan;
- char *unmanaged = NULL, *keyfile = NULL, *routefile = NULL, *route6file = NULL;
connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-physdev",
- NULL, TYPE_ETHERNET, NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error, NULL);
+ NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
g_assert (nm_connection_verify (connection, &error));
@@ -12633,11 +12766,6 @@ test_read_vlan_physdev (void)
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 3);
g_object_unref (connection);
-
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
}
static void
@@ -12721,6 +12849,9 @@ test_write_vlan_only_vlanid (void)
&error);
g_assert (success);
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (written,
NULL,
@@ -12827,6 +12958,9 @@ test_write_ethernet_missing_ipv6 (void)
ASSERT (testfile != NULL,
"ethernet-missing-ipv6", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -12949,14 +13083,9 @@ test_write_bond_main (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "bond-main-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "bond-main-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -12970,16 +13099,10 @@ test_write_bond_main (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "bond-main-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* bond setting */
s_bond = (NMSettingBond *) nm_setting_bond_new ();
- ASSERT (s_bond != NULL,
- "bond-main-write", "failed to allocate new %s setting",
- NM_SETTING_BOND_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_bond));
g_object_set (s_bond,
@@ -12988,9 +13111,6 @@ test_write_bond_main (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "bond-main-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -13007,9 +13127,6 @@ test_write_bond_main (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "bond-main-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -13032,6 +13149,9 @@ test_write_bond_main (void)
ASSERT (testfile != NULL,
"bond-main-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -13077,6 +13197,8 @@ test_read_bond_slave (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring IP4 config on slave*");
connection = connection_from_file (TEST_IFCFG_BOND_SLAVE,
NULL,
TYPE_ETHERNET,
@@ -13087,6 +13209,8 @@ test_read_bond_slave (void)
&route6file,
&error,
&ignore_error);
+ g_test_assert_expected_messages ();
+
ASSERT (connection != NULL,
"bond-slave-read", "unexpected failure reading %s", TEST_IFCFG_BOND_SLAVE);
@@ -13134,14 +13258,9 @@ test_write_bond_slave (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "bond-slave-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "bond-slave-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -13157,9 +13276,6 @@ test_write_bond_slave (void)
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
- ASSERT (s_wired != NULL,
- "bond-main-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
mac = g_byte_array_sized_new (sizeof (tmpmac));
@@ -13187,6 +13303,9 @@ test_write_bond_slave (void)
ASSERT (testfile != NULL,
"bond-slave-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -13330,14 +13449,9 @@ test_write_infiniband (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "infiniband-write", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "infiniband-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -13351,9 +13465,6 @@ test_write_infiniband (void)
/* InfiniBand setting */
s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
- ASSERT (s_infiniband != NULL,
- "infiniband-write", "failed to allocate new %s setting",
- NM_SETTING_INFINIBAND_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
mac = g_byte_array_sized_new (sizeof (tmpmac));
@@ -13368,9 +13479,6 @@ test_write_infiniband (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "infiniband-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -13387,9 +13495,6 @@ test_write_infiniband (void)
/* IP6 setting */
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- ASSERT (s_ip6 != NULL,
- "wired-static-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -13412,6 +13517,9 @@ test_write_infiniband (void)
ASSERT (testfile != NULL,
"infiniband-write", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -13457,6 +13565,8 @@ test_read_bond_slave_ib (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring IP4 config on slave*");
connection = connection_from_file (TEST_IFCFG_BOND_SLAVE_IB,
NULL,
NULL,
@@ -13467,6 +13577,8 @@ test_read_bond_slave_ib (void)
&route6file,
&error,
&ignore_error);
+ g_test_assert_expected_messages();
+
ASSERT (connection != NULL,
"bond-slave-read-ib", "unexpected failure reading %s", TEST_IFCFG_BOND_SLAVE_IB);
@@ -13516,14 +13628,9 @@ test_write_bond_slave_ib (void)
gboolean ignore_error = FALSE;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "bond-slave-write-ib", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "bond-slave-write-ib", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -13539,9 +13646,6 @@ test_write_bond_slave_ib (void)
/* InfiniBand setting */
s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
- ASSERT (s_infiniband != NULL,
- "bond-main-write", "failed to allocate new %s setting",
- NM_SETTING_INFINIBAND_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
mac = g_byte_array_sized_new (sizeof (tmpmac));
@@ -13570,6 +13674,9 @@ test_write_bond_slave_ib (void)
ASSERT (testfile != NULL,
"bond-slave-write-ib", "didn't get ifcfg file path back after writing connection");
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
@@ -13604,6 +13711,819 @@ test_write_bond_slave_ib (void)
g_object_unref (reread);
}
+#define DCB_ALL_FLAGS (NM_SETTING_DCB_FLAG_ENABLE | \
+ NM_SETTING_DCB_FLAG_ADVERTISE | \
+ NM_SETTING_DCB_FLAG_WILLING)
+
+static void
+test_read_dcb_basic (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+ NMSettingDcb *s_dcb;
+ gboolean success;
+ guint i;
+ guint expected_group_ids[8] = { 0, 0, 0, 0, 1, 1, 1, 0xF };
+ guint expected_group_bandwidths[8] = { 25, 0, 0, 75, 0, 0, 0, 0 };
+ guint expected_bandwidths[8] = { 5, 10, 30, 25, 10, 50, 5, 0 };
+ gboolean expected_strict[8] = { FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE };
+ guint expected_traffic_classes[8] = { 7, 6, 5, 4, 3, 2, 1, 0 };
+ gboolean expected_pfcs[8] = { TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE };
+
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_dcb = nm_connection_get_setting_dcb (connection);
+ g_assert (s_dcb);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, DCB_ALL_FLAGS);
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_priority (s_dcb), ==, 7);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, DCB_ALL_FLAGS);
+ g_assert_cmpint (nm_setting_dcb_get_app_iscsi_priority (s_dcb), ==, 6);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, DCB_ALL_FLAGS);
+ g_assert_cmpint (nm_setting_dcb_get_app_fip_priority (s_dcb), ==, 2);
+
+ g_assert_cmpint (nm_setting_dcb_get_priority_flow_control_flags (s_dcb), ==, (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE));
+ for (i = 0; i < 8; i++)
+ g_assert_cmpint (nm_setting_dcb_get_priority_flow_control (s_dcb, i), ==, expected_pfcs[i]);
+
+ g_assert_cmpint (nm_setting_dcb_get_priority_group_flags (s_dcb), ==, DCB_ALL_FLAGS);
+
+ /* Group IDs */
+ for (i = 0; i < 8; i++)
+ g_assert_cmpint (nm_setting_dcb_get_priority_group_id (s_dcb, i), ==, expected_group_ids[i]);
+
+ /* Group bandwidth */
+ for (i = 0; i < 8; i++)
+ g_assert_cmpint (nm_setting_dcb_get_priority_group_bandwidth (s_dcb, i), ==, expected_group_bandwidths[i]);
+
+ /* User priority bandwidth */
+ for (i = 0; i < 8; i++)
+ g_assert_cmpint (nm_setting_dcb_get_priority_bandwidth (s_dcb, i), ==, expected_bandwidths[i]);
+
+ /* Strict bandwidth */
+ for (i = 0; i < 8; i++)
+ g_assert_cmpint (nm_setting_dcb_get_priority_strict_bandwidth (s_dcb, i), ==, expected_strict[i]);
+
+ /* Traffic class */
+ for (i = 0; i < 8; i++)
+ g_assert_cmpint (nm_setting_dcb_get_priority_traffic_class (s_dcb, i), ==, expected_traffic_classes[i]);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_dcb_basic (void)
+{
+ NMConnection *connection, *reread;
+ GError *error = NULL;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingDcb *s_dcb;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ gboolean success, ignore_error;
+ guint i;
+ char *uuid, *testfile;
+ const guint group_ids[8] = { 4, 0xF, 6, 0xF, 1, 7, 3, 0xF };
+ const guint group_bandwidths[8] = { 10, 20, 15, 10, 2, 3, 35, 5 };
+ const guint bandwidths[8] = { 10, 20, 30, 40, 50, 10, 0, 25 };
+ const gboolean strict[8] = { TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE };
+ const guint traffic_classes[8] = { 3, 4, 7, 2, 1, 0, 5, 6 };
+ const gboolean pfcs[8] = { TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE };
+
+ connection = nm_connection_new ();
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_ID, "dcb-test",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "eth0",
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* IP stuff */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ g_object_set (G_OBJECT (s_ip6), NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ /* DCB */
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_dcb));
+
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_FCOE_FLAGS, DCB_ALL_FLAGS,
+ NM_SETTING_DCB_APP_FCOE_PRIORITY, 5,
+ NM_SETTING_DCB_APP_ISCSI_FLAGS, DCB_ALL_FLAGS,
+ NM_SETTING_DCB_APP_ISCSI_PRIORITY, 1,
+ NM_SETTING_DCB_APP_FIP_FLAGS, DCB_ALL_FLAGS,
+ NM_SETTING_DCB_APP_FIP_PRIORITY, 3,
+ NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, DCB_ALL_FLAGS,
+ NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, DCB_ALL_FLAGS,
+ NULL);
+
+ for (i = 0; i < 8; i++) {
+ nm_setting_dcb_set_priority_flow_control (s_dcb, i, pfcs[i]);
+ nm_setting_dcb_set_priority_group_id (s_dcb, i, group_ids[i]);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, group_bandwidths[i]);
+ nm_setting_dcb_set_priority_bandwidth (s_dcb, i, bandwidths[i]);
+ nm_setting_dcb_set_priority_strict_bandwidth (s_dcb, i, strict[i]);
+ nm_setting_dcb_set_priority_traffic_class (s_dcb, i, traffic_classes[i]);
+ }
+
+ g_assert (nm_connection_verify (connection, &error));
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (testfile);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile,
+ NULL,
+ TYPE_ETHERNET,
+ NULL, NULL, NULL,
+ NULL, NULL,
+ &error,
+ &ignore_error);
+ unlink (testfile);
+
+ g_assert_no_error (error);
+ g_assert (reread);
+ g_assert (nm_connection_verify (reread, &error));
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ g_object_unref (connection);
+ g_object_unref (reread);
+ g_free (testfile);
+}
+
+static void
+test_read_dcb_default_app_priorities (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+ NMSettingDcb *s_dcb;
+ gboolean success;
+
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-default-app-priorities",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_dcb = nm_connection_get_setting_dcb (connection);
+ g_assert (s_dcb);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, NM_SETTING_DCB_FLAG_ENABLE);
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_priority (s_dcb), ==, -1);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, NM_SETTING_DCB_FLAG_ENABLE);
+ g_assert_cmpint (nm_setting_dcb_get_app_iscsi_priority (s_dcb), ==, -1);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, NM_SETTING_DCB_FLAG_ENABLE);
+ g_assert_cmpint (nm_setting_dcb_get_app_fip_priority (s_dcb), ==, -1);
+
+ g_object_unref (connection);
+}
+
+static void
+test_read_dcb_bad_booleans (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*invalid DCB_PG_STRICT value*not all 0s and 1s*");
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-bad-booleans",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert (strstr (error->message, "invalid boolean digit"));
+ g_assert (connection == NULL);
+}
+
+static void
+test_read_dcb_short_booleans (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*DCB_PG_STRICT value*8 characters*");
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-short-booleans",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert (strstr (error->message, "boolean array must be 8 characters"));
+ g_assert (connection == NULL);
+}
+
+static void
+test_read_dcb_bad_uints (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*invalid DCB_PG_UP2TC value*not 0 - 7*");
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-bad-uints",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert (strstr (error->message, "invalid uint digit"));
+ g_assert (connection == NULL);
+}
+
+static void
+test_read_dcb_short_uints (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*DCB_PG_UP2TC value*8 characters*");
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-short-uints",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert (strstr (error->message, "uint array must be 8 characters"));
+ g_assert (connection == NULL);
+}
+
+static void
+test_read_dcb_bad_percent (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*invalid DCB_PG_PCT percentage value*");
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-bad-percent",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert (strstr (error->message, "invalid percent element"));
+ g_assert (connection == NULL);
+}
+
+static void
+test_read_dcb_short_percent (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*invalid DCB_PG_PCT percentage list value*");
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-short-percent",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert (strstr (error->message, "percent array must be 8 elements"));
+ g_assert (connection == NULL);
+}
+
+static void
+test_read_dcb_pgpct_not_100 (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*DCB_PG_PCT percentages do not equal 100*");
+ connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-pgpct-not-100",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert (strstr (error->message, "invalid percentage sum"));
+ g_assert (connection == NULL);
+}
+
+static void
+test_read_fcoe_mode (gconstpointer user_data)
+{
+ const char *expected_mode = user_data;
+ NMConnection *connection;
+ GError *error = NULL;
+ NMSettingDcb *s_dcb;
+ gboolean success;
+ char *file;
+
+ file = g_strdup_printf (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-fcoe-%s", expected_mode);
+ connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_free (file);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_dcb = nm_connection_get_setting_dcb (connection);
+ g_assert (s_dcb);
+
+ g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, NM_SETTING_DCB_FLAG_ENABLE);
+ g_assert_cmpstr (nm_setting_dcb_get_app_fcoe_mode (s_dcb), ==, expected_mode);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_fcoe_mode (gconstpointer user_data)
+{
+ const char *expected_mode = user_data;
+ NMConnection *connection, *reread;
+ GError *error = NULL;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingDcb *s_dcb;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ gboolean success, ignore_error;
+ char *uuid, *testfile;
+
+ connection = nm_connection_new ();
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_ID, "fcoe-test",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "eth0",
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* IP stuff */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ g_object_set (G_OBJECT (s_ip6), NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ /* DCB */
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_dcb));
+
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_FCOE_FLAGS, NM_SETTING_DCB_FLAG_ENABLE,
+ NM_SETTING_DCB_APP_FCOE_MODE, expected_mode,
+ NULL);
+
+ g_assert (nm_connection_verify (connection, &error));
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (testfile);
+
+ {
+ shvarFile *ifcfg = svOpenFile (testfile, &error);
+ char *written_mode;
+
+ g_assert_no_error (error);
+ g_assert (ifcfg);
+ written_mode = svGetValue (ifcfg, "DCB_APP_FCOE_MODE", FALSE);
+ svCloseFile (ifcfg);
+ g_assert_cmpstr (written_mode, ==, expected_mode);
+ g_free (written_mode);
+ }
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile,
+ NULL,
+ TYPE_ETHERNET,
+ NULL, NULL, NULL,
+ NULL, NULL,
+ &error,
+ &ignore_error);
+ unlink (testfile);
+
+ g_assert_no_error (error);
+ g_assert (reread);
+ g_assert (nm_connection_verify (reread, &error));
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ g_object_unref (connection);
+ g_object_unref (reread);
+ g_free (testfile);
+}
+
+static void
+test_read_team_master (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingTeam *s_team;
+ gboolean success;
+ GError *error = NULL;
+ const char *expected_config = "{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }";
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-master",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_TEAM_SETTING_NAME);
+
+ s_team = nm_connection_get_setting_team (connection);
+ g_assert (s_team);
+ g_assert_cmpstr (nm_setting_team_get_interface_name (s_team), ==, "team0");
+ g_assert_cmpstr (nm_setting_team_get_config (s_team), ==, expected_config);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_team_master (void)
+{
+ NMConnection *connection, *reread;
+ NMSettingConnection *s_con;
+ NMSettingTeam *s_team;
+ NMSettingWired *s_wired;
+ char *uuid, *testfile = NULL, *val;
+ gboolean success;
+ GError *error = NULL;
+ const char *expected_config = "{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }";
+ const char *escaped_expected_config = "\"{ \\\"device\\\": \\\"team0\\\", \\\"link_watch\\\": { \\\"name\\\": \\\"ethtool\\\" } }\"";
+ shvarFile *f;
+
+ connection = nm_connection_new ();
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Team Master",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_TEAM_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Team setting */
+ s_team = (NMSettingTeam *) nm_setting_team_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_team));
+
+ g_object_set (s_team,
+ NM_SETTING_TEAM_INTERFACE_NAME, "team0",
+ NM_SETTING_TEAM_CONFIG, expected_config,
+ NULL);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ f = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
+ g_assert (f);
+
+ /* re-read the file to check that what key was written. */
+ val = svGetValue (f, "DEVICETYPE", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, "Team");
+ g_free (val);
+ val = svGetValue (f, "TEAM_CONFIG", TRUE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, escaped_expected_config);
+ g_free (val);
+ svCloseFile (f);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL,
+ NULL, NULL, NULL, NULL, &error, NULL);
+ unlink (testfile);
+ g_assert_no_error (error);
+ g_assert (reread);
+
+ success = nm_connection_verify (reread, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ g_free (testfile);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
+test_read_team_port (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingTeamPort *s_team_port;
+ gboolean success;
+ GError *error = NULL;
+ const char *expected_config = "{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }";
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME);
+ g_assert_cmpstr (nm_setting_connection_get_master (s_con), ==, "team0");
+
+ s_team_port = nm_connection_get_setting_team_port (connection);
+ g_assert (s_team_port);
+ g_assert_cmpstr (nm_setting_team_port_get_config (s_team_port), ==, expected_config);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_team_port (void)
+{
+ NMConnection *connection, *reread;
+ NMSettingConnection *s_con;
+ NMSettingTeamPort *s_team_port;
+ NMSettingWired *s_wired;
+ char *uuid, *testfile = NULL, *val;
+ gboolean success;
+ GError *error = NULL;
+ const char *expected_config = "{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }";
+ const char *escaped_expected_config = "\"{ \\\"p4p1\\\": { \\\"prio\\\": -10, \\\"sticky\\\": true } }\"";
+ shvarFile *f;
+
+ connection = nm_connection_new ();
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Team Port",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_MASTER, "team0",
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Team setting */
+ s_team_port = (NMSettingTeamPort *) nm_setting_team_port_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_team_port));
+ g_object_set (s_team_port, NM_SETTING_TEAM_PORT_CONFIG, expected_config, NULL);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ f = svOpenFile (testfile, &error);
+ g_assert_no_error (error);
+ g_assert (f);
+
+ /* re-read the file to check that what key was written. */
+ val = svGetValue (f, "TYPE", FALSE);
+ g_assert (!val);
+ val = svGetValue (f, "DEVICETYPE", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, "TeamPort");
+ g_free (val);
+ val = svGetValue (f, "TEAM_PORT_CONFIG", TRUE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, escaped_expected_config);
+ val = svGetValue (f, "TEAM_MASTER", TRUE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, "team0");
+ g_free (val);
+ svCloseFile (f);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_utils_normalize_connection (connection, TRUE);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL,
+ NULL, NULL, NULL, NULL, &error, NULL);
+ unlink (testfile);
+ g_assert_no_error (error);
+ g_assert (reread);
+
+ success = nm_connection_verify (reread, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ g_free (testfile);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
+test_read_team_port_empty_config (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ gboolean success;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port-empty-config",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME);
+ g_assert_cmpstr (nm_setting_connection_get_master (s_con), ==, "team0");
+
+ /* Empty TEAM_PORT_CONFIG means no team-port setting */
+ g_assert (nm_connection_get_setting_team_port (connection) == NULL);
+
+ g_object_unref (connection);
+}
+
+/* Old algorithm for "remove escaped characters in place".
+ *
+ * This function is obsolete because it has O(n^2) runtime
+ * complexity and got replaced. Keep it here for testing,
+ * that both functions behave identical.
+ **/
+static void
+svUnescape_On2 (char *s)
+{
+ int len, i;
+
+ len = strlen(s);
+ if (len >= 2 && (s[0] == '"' || s[0] == '\'') && s[0] == s[len-1]) {
+ i = len - 2;
+ if (i == 0)
+ s[0] = '\0';
+ else {
+ memmove(s, s+1, i);
+ s[i+1] = '\0';
+ len = i;
+ }
+ }
+ for (i = 0; i < len; i++) {
+ if (s[i] == '\\') {
+ memmove(s+i, s+i+1, len-(i+1));
+ len--;
+ }
+ s[len] = '\0';
+ }
+}
+
+static void
+test_svUnescape_assert (const char *str)
+{
+ char *s1 = g_strdup (str);
+ char *s2 = g_strdup (str);
+
+ svUnescape (s1);
+ svUnescape_On2 (s2);
+
+ g_assert_cmpstr (s1, ==, s2);
+
+ g_free (s1);
+ g_free (s2);
+}
+
+static void
+test_svUnescape ()
+{
+ int len, repeat, i, k;
+ GRand *rand = g_rand_new ();
+ guint32 seed = g_random_int ();
+
+ g_rand_set_seed (rand, seed);
+
+ test_svUnescape_assert ("");
+ test_svUnescape_assert ("'");
+ test_svUnescape_assert ("\"");
+ test_svUnescape_assert ("\\");
+ test_svUnescape_assert ("x");
+ test_svUnescape_assert (" ");
+ test_svUnescape_assert ("' '");
+ test_svUnescape_assert ("'x'");
+ test_svUnescape_assert ("\'some string\'");
+ test_svUnescape_assert ("Bob outside LAN");
+ test_svUnescape_assert ("{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }");
+
+ for (len = 1; len < 25; len++) {
+ char *s = g_new0 (char, len+1);
+
+ for (repeat = 0; repeat < MAX (4*len, 20); repeat++) {
+
+ /* fill the entire string with random. */
+ for (i = 0; i < len; i++)
+ s[i] = g_rand_int (rand);
+
+ /* randomly place escape characters into the string */
+ k = g_rand_int (rand) % (len);
+ while (k-- > 0)
+ s[g_rand_int (rand) % len] = '\\';
+
+ if (len > 1) {
+ /* quote the string. */
+ k = g_rand_int (rand) % (10);
+ if (k < 4) {
+ char quote = k < 2 ? '"' : '\'';
+
+ s[0] = quote;
+ s[len-1] = quote;
+ }
+ }
+
+ /*g_message (">>%s<<", s);*/
+ test_svUnescape_assert (s);
+ }
+
+ g_free (s);
+ }
+
+ g_rand_free (rand);
+}
+
+
#define TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-bad-hex"
#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-quoted"
#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-hex"
@@ -13619,34 +14539,34 @@ test_write_bond_slave_ib (void)
#define DEFAULT_HEX_PSK "7d308b11df1b4243b0f78e5f3fc68cdbb9a264ed0edf4c188edf329ff5b467f0"
-#define TEST_IFCFG_VARIABLES_CORNER_CASES_1 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-variables-corner-cases-1"
+#define TPATH "/settings/plugins/ifcfg-rh/"
+
+NMTST_DEFINE ();
int main (int argc, char **argv)
{
- GError *error = NULL;
- char *base;
-
- g_type_init ();
-
- if (!nm_utils_init (&error))
- FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
-
- /* The tests */
- test_read_unmanaged ();
- test_read_minimal ();
- test_read_variables_corner_cases (TEST_IFCFG_VARIABLES_CORNER_CASES_1, "\"");
- test_read_wired_static (TEST_IFCFG_WIRED_STATIC, "System test-wired-static");
- test_read_wired_static (TEST_IFCFG_WIRED_STATIC_BOOTPROTO, "System test-wired-static-bootproto");
- test_read_wired_static_no_prefix (8);
- test_read_wired_static_no_prefix (16);
- test_read_wired_static_no_prefix (24);
-
- test_write_wired_static_ip6_only_gw (NULL);
- test_write_wired_static_ip6_only_gw ("::");
- test_write_wired_static_ip6_only_gw ("2001:db8:8:4::2");
- test_write_wired_static_ip6_only_gw ("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255");
-
+ nmtst_init_assert_logging (&argc, &argv);
+
+ g_test_add_func (TPATH "svUnescape", test_svUnescape);
+
+ g_test_add_func (TPATH "unmanaged", test_read_unmanaged);
+ g_test_add_func (TPATH "unmanaged-unrecognized", test_read_unmanaged_unrecognized);
+ g_test_add_func (TPATH "unrecognized", test_read_unrecognized);
+ g_test_add_func (TPATH "basic", test_read_basic);
+ g_test_add_func (TPATH "variables-corner-cases", test_read_variables_corner_cases);
+ g_test_add_data_func (TPATH "no-prefix/8", GUINT_TO_POINTER (8), test_read_wired_static_no_prefix);
+ g_test_add_data_func (TPATH "no-prefix/16", GUINT_TO_POINTER (16), test_read_wired_static_no_prefix);
+ g_test_add_data_func (TPATH "no-prefix/24", GUINT_TO_POINTER (24), test_read_wired_static_no_prefix);
+ g_test_add_data_func (TPATH "static-ip6-only-gw/_NULL_", NULL, test_write_wired_static_ip6_only_gw);
+ g_test_add_data_func (TPATH "static-ip6-only-gw/::", "::", test_write_wired_static_ip6_only_gw);
+ g_test_add_data_func (TPATH "static-ip6-only-gw/2001:db8:8:4::2", "2001:db8:8:4::2", test_write_wired_static_ip6_only_gw);
+ g_test_add_data_func (TPATH "static-ip6-only-gw/ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255", "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255", test_write_wired_static_ip6_only_gw);
+
+ test_read_wired_static (TEST_IFCFG_WIRED_STATIC, "System test-wired-static", TRUE);
+ test_read_wired_static (TEST_IFCFG_WIRED_STATIC_BOOTPROTO, "System test-wired-static-bootproto", FALSE);
test_read_wired_dhcp ();
+ g_test_add_func (TPATH "dhcp-plus-ip", test_read_wired_dhcp_plus_ip);
+ g_test_add_func (TPATH "dhcp-send-hostname", test_read_write_wired_dhcp_send_hostname);
test_read_wired_global_gateway ();
test_read_wired_never_default ();
test_read_wired_defroute_no ();
@@ -13661,10 +14581,16 @@ int main (int argc, char **argv)
test_read_wired_ipv6_only ();
test_read_wired_dhcp6_only ();
test_read_onboot_no ();
+ test_read_noip ();
test_read_wired_8021x_peap_mschapv2 ();
test_read_wired_8021x_tls_secret_flags (TEST_IFCFG_WIRED_8021X_TLS_AGENT, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
test_read_wired_8021x_tls_secret_flags (TEST_IFCFG_WIRED_8021X_TLS_ALWAYS,
NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
+ g_test_add_func (TPATH "802-1x/subj-matches", test_read_write_802_1X_subj_matches);
+ g_test_add_func (TPATH "802-1x/ttls-eapgtc", test_read_802_1x_ttls_eapgtc);
+ test_read_wired_aliases_good ();
+ test_read_wired_aliases_bad_1 ();
+ test_read_wired_aliases_bad_2 ();
test_read_wifi_open ();
test_read_wifi_open_auto ();
test_read_wifi_open_ssid_hex ();
@@ -13691,6 +14617,7 @@ int main (int argc, char **argv)
test_read_wifi_wpa_eap_tls ();
test_read_wifi_wpa_eap_ttls_tls ();
test_read_wifi_wep_eap_ttls_chap ();
+ g_test_add_func (TPATH "wifi/read-hidden", test_read_wifi_hidden);
test_read_wired_qeth_static ();
test_read_wired_ctc_static ();
test_read_wifi_wep_no_keys ();
@@ -13700,18 +14627,21 @@ int main (int argc, char **argv)
test_read_vlan_interface ();
test_read_vlan_only_vlan_id ();
test_read_vlan_only_device ();
- test_read_vlan_physdev ();
+ g_test_add_func (TPATH "vlan/physdev", test_read_vlan_physdev);
test_write_wired_static ();
test_write_wired_static_ip6_only ();
test_write_wired_static_routes ();
test_read_write_static_routes_legacy ();
test_write_wired_dhcp ();
+ g_test_add_func (TPATH "dhcp-plus-ip", test_write_wired_dhcp_plus_ip);
test_write_wired_dhcp_8021x_peap_mschapv2 ();
test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_NOT_SAVED);
test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_BLOB, NM_SETTING_SECRET_FLAG_NONE);
+ test_write_wired_aliases ();
+ g_test_add_func (TPATH "ipv4/write-static-addresses-GATEWAY", test_write_gateway);
test_write_wifi_open ();
test_write_wifi_open_hex_ssid ();
test_write_wifi_wep ();
@@ -13766,6 +14696,7 @@ int main (int argc, char **argv)
test_write_wifi_dynamic_wep_leap ();
test_write_wifi_wpa_then_open ();
test_write_wifi_wpa_then_wep_with_perms ();
+ g_test_add_func (TPATH "wifi/write-hidden", test_write_wifi_hidden);
test_write_wired_qeth_dhcp ();
test_write_wired_ctc_dhcp ();
test_write_permissions ();
@@ -13778,12 +14709,26 @@ int main (int argc, char **argv)
/* iSCSI / ibft */
test_read_ibft_dhcp ();
test_read_ibft_static ();
- test_read_ibft_malformed ("ibft-bad-record-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-record");
- test_read_ibft_malformed ("ibft-bad-entry-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-entry");
- test_read_ibft_malformed ("ibft-bad-ipaddr-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-ipaddr");
- test_read_ibft_malformed ("ibft-bad-gateway-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-gateway");
- test_read_ibft_malformed ("ibft-bad-dns1-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns1");
- test_read_ibft_malformed ("ibft-bad-dns2-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns2");
+ test_read_ibft_malformed ("ibft-bad-record-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-record", FALSE);
+ test_read_ibft_malformed ("ibft-bad-entry-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-entry", TRUE);
+ test_read_ibft_malformed ("ibft-bad-ipaddr-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-ipaddr", TRUE);
+ test_read_ibft_malformed ("ibft-bad-gateway-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-gateway", TRUE);
+ test_read_ibft_malformed ("ibft-bad-dns1-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns1", TRUE);
+ test_read_ibft_malformed ("ibft-bad-dns2-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns2", TRUE);
+ g_test_add_func (TPATH "dcb/read-basic", test_read_dcb_basic);
+ g_test_add_func (TPATH "dcb/write-basic", test_write_dcb_basic);
+ g_test_add_func (TPATH "dcb/default-app-priorities", test_read_dcb_default_app_priorities);
+ g_test_add_func (TPATH "dcb/bad-booleans", test_read_dcb_bad_booleans);
+ g_test_add_func (TPATH "dcb/short-booleans", test_read_dcb_short_booleans);
+ g_test_add_func (TPATH "dcb/bad-uints", test_read_dcb_bad_uints);
+ g_test_add_func (TPATH "dcb/short-uints", test_read_dcb_short_uints);
+ g_test_add_func (TPATH "dcb/bad-percent", test_read_dcb_bad_percent);
+ g_test_add_func (TPATH "dcb/short-percent", test_read_dcb_short_percent);
+ g_test_add_func (TPATH "dcb/pgpct-not-100", test_read_dcb_pgpct_not_100);
+ g_test_add_data_func (TPATH "fcoe/fabric", (gpointer) NM_SETTING_DCB_FCOE_MODE_FABRIC, test_read_fcoe_mode);
+ g_test_add_data_func (TPATH "fcoe/vn2vn", (gpointer) NM_SETTING_DCB_FCOE_MODE_VN2VN, test_read_fcoe_mode);
+ g_test_add_data_func (TPATH "fcoe/write-fabric", (gpointer) NM_SETTING_DCB_FCOE_MODE_FABRIC, test_write_fcoe_mode);
+ g_test_add_data_func (TPATH "fcoe/write-vn2vn", (gpointer) NM_SETTING_DCB_FCOE_MODE_VN2VN, test_write_fcoe_mode);
/* bonding */
test_read_bond_main ();
@@ -13800,15 +14745,19 @@ int main (int argc, char **argv)
test_write_bridge_component ();
test_read_bridge_missing_stp ();
+ /* Team */
+ g_test_add_func (TPATH "team/read-master", test_read_team_master);
+ g_test_add_func (TPATH "team/write-master", test_write_team_master);
+ g_test_add_func (TPATH "team/read-port", test_read_team_port);
+ g_test_add_func (TPATH "team/write-port", test_write_team_port);
+ g_test_add_func (TPATH "team/read-port-empty-config", test_read_team_port_empty_config);
+
/* Stuff we expect to fail for now */
test_write_wired_pppoe ();
test_write_vpn ();
test_write_mobile_broadband (TRUE);
test_write_mobile_broadband (FALSE);
- base = g_path_get_basename (argv[0]);
- fprintf (stdout, "%s: SUCCESS\n", base);
- g_free (base);
- return 0;
+ return g_test_run ();
}
diff --git a/src/settings/plugins/ifcfg-rh/utils.c b/src/settings/plugins/ifcfg-rh/utils.c
index 04df66713..8318a65da 100644
--- a/src/settings/plugins/ifcfg-rh/utils.c
+++ b/src/settings/plugins/ifcfg-rh/utils.c
@@ -25,97 +25,6 @@
#include "shvar.h"
/*
- * utils_bin2hexstr
- *
- * Convert a byte-array into a hexadecimal string.
- *
- * Code originally by Alex Larsson <alexl@redhat.com> and
- * copyright Red Hat, Inc. under terms of the LGPL.
- *
- */
-char *
-utils_bin2hexstr (const char *bytes, int len, int final_len)
-{
- static char hex_digits[] = "0123456789abcdef";
- char *result;
- int i;
- gsize buflen = (len * 2) + 1;
-
- g_return_val_if_fail (bytes != NULL, NULL);
- g_return_val_if_fail (len > 0, NULL);
- g_return_val_if_fail (len < 4096, NULL); /* Arbitrary limit */
- if (final_len > -1)
- g_return_val_if_fail (final_len < buflen, NULL);
-
- result = g_malloc0 (buflen);
- for (i = 0; i < len; i++)
- {
- result[2*i] = hex_digits[(bytes[i] >> 4) & 0xf];
- result[2*i+1] = hex_digits[bytes[i] & 0xf];
- }
- /* Cut converted key off at the correct length for this cipher type */
- if (final_len > -1)
- result[final_len] = '\0';
- else
- result[buflen - 1] = '\0';
-
- return result;
-}
-
-/* From hostap, Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi> */
-
-static int hex2num (char c)
-{
- if (c >= '0' && c <= '9')
- return c - '0';
- if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- return -1;
-}
-
-static int hex2byte (const char *hex)
-{
- int a, b;
- a = hex2num(*hex++);
- if (a < 0)
- return -1;
- b = hex2num(*hex++);
- if (b < 0)
- return -1;
- return (a << 4) | b;
-}
-
-char *
-utils_hexstr2bin (const char *hex, size_t len)
-{
- size_t i;
- int a;
- const char * ipos = hex;
- char * buf = NULL;
- char * opos;
-
- /* Length must be a multiple of 2 */
- if ((len % 2) != 0)
- return NULL;
-
- opos = buf = g_malloc0 ((len / 2) + 1);
- for (i = 0; i < len; i += 2) {
- a = hex2byte (ipos);
- if (a < 0) {
- g_free (buf);
- return NULL;
- }
- *opos++ = a;
- ipos += 2;
- }
- return buf;
-}
-
-/* End from hostap */
-
-/*
* utils_single_quote_string
*
* Put string inside single quotes and remove CR, LF characters. If single quote
@@ -143,7 +52,6 @@ utils_single_quote_string (const char *str)
drop++;
}
new_str = g_malloc0 (slen + extra - drop + 4); /* 4 is for $''\0*/
- if (!new_str) return NULL;
if (extra > 0)
new_str[j++] = '$';
@@ -179,7 +87,6 @@ utils_single_unquote_string (const char *str)
slen = strlen (str);
new_str = g_malloc0 (slen + 1);
- if (!new_str) return NULL;
if ( (slen >= 2 && (str[0] == dq_char || str[0] == q_char) && str[0] == str[slen-1])
|| (slen >= 3 && str[0] == '$' && str[1] == q_char && str[1] == str[slen-1])) {
@@ -389,7 +296,7 @@ utils_get_extra_ifcfg (const char *parent, const char *tag, gboolean should_crea
ifcfg = svCreateFile (path);
if (!ifcfg)
- ifcfg = svNewFile (path);
+ ifcfg = svOpenFile (path, NULL);
g_free (path);
return ifcfg;
@@ -455,8 +362,55 @@ utils_ignore_ip_config (NMConnection *connection)
* scripts just ignore it if it's there.
*/
if ( nm_setting_connection_is_slave_type (s_con, NM_SETTING_BOND_SETTING_NAME)
- || nm_setting_connection_is_slave_type (s_con, NM_SETTING_BRIDGE_SETTING_NAME))
+ || nm_setting_connection_is_slave_type (s_con, NM_SETTING_BRIDGE_SETTING_NAME)
+ || nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME))
return TRUE;
return FALSE;
}
+
+/* Find out if the 'alias' file name might be an alias file for 'ifcfg' file name,
+ * or any alias when 'ifcfg' is NULL. Does not check that it's actually a valid
+ * alias name; that happens in reader.c
+ */
+gboolean
+utils_is_ifcfg_alias_file (const char *alias, const char *ifcfg)
+{
+ g_return_val_if_fail (alias != NULL, FALSE);
+
+ if (strncmp (alias, IFCFG_TAG, strlen (IFCFG_TAG)))
+ return FALSE;
+
+ if (ifcfg) {
+ size_t len = strlen (ifcfg);
+
+ return (strncmp (alias, ifcfg, len) == 0 && alias[len] == ':');
+ } else {
+ return (strchr (alias, ':') != NULL);
+ }
+}
+
+char *
+utils_get_ifcfg_from_alias (const char *alias)
+{
+ char *base, *ptr, *ifcfg = NULL;
+
+ g_return_val_if_fail (alias != NULL, NULL);
+
+ base = g_path_get_basename (alias);
+ g_return_val_if_fail (base != NULL, NULL);
+
+ if (utils_is_ifcfg_alias_file (base, NULL)) {
+ ifcfg = g_strdup (alias);
+ ptr = strrchr (ifcfg, ':');
+ if (ptr)
+ *ptr = '\0';
+ else {
+ g_free (ifcfg);
+ ifcfg = NULL;
+ }
+ }
+
+ g_free (base);
+ return ifcfg;
+}
diff --git a/src/settings/plugins/ifcfg-rh/utils.h b/src/settings/plugins/ifcfg-rh/utils.h
index 9262ef720..95af828bb 100644
--- a/src/settings/plugins/ifcfg-rh/utils.h
+++ b/src/settings/plugins/ifcfg-rh/utils.h
@@ -26,10 +26,6 @@
#include "shvar.h"
#include "common.h"
-char *utils_bin2hexstr (const char *bytes, int len, int final_len);
-
-char *utils_hexstr2bin (const char *hex, size_t len);
-
char *utils_single_quote_string (const char *str);
char *utils_single_unquote_string (const char *str);
@@ -54,5 +50,8 @@ gboolean utils_has_route_file_new_syntax (const char *filename);
gboolean utils_ignore_ip_config (NMConnection *connection);
+gboolean utils_is_ifcfg_alias_file (const char *alias, const char *ifcfg);
+char *utils_get_ifcfg_from_alias (const char *alias);
+
#endif /* _UTILS_H_ */
diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
index 8ecbf2bdf..60af599bf 100644
--- a/src/settings/plugins/ifcfg-rh/writer.c
+++ b/src/settings/plugins/ifcfg-rh/writer.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
+ * Copyright (C) 2009 - 2013 Red Hat, Inc.
*/
#include <string.h>
@@ -37,8 +37,12 @@
#include <nm-setting-ip6-config.h>
#include <nm-setting-pppoe.h>
#include <nm-setting-vlan.h>
+#include <nm-setting-team.h>
+#include <nm-setting-team-port.h>
+#include <nm-utils-private.h>
#include <nm-utils.h>
+#include "nm-logging.h"
#include "common.h"
#include "shvar.h"
#include "reader.h"
@@ -46,8 +50,13 @@
#include "utils.h"
#include "crypto.h"
-#define PLUGIN_WARN(pname, fmt, args...) \
- { g_warning (" " pname ": " fmt, ##args); }
+
+static void
+svSetValue_free (shvarFile *s, const char *key, char *value, gboolean verbatim)
+{
+ svSetValue (s, key, value, verbatim);
+ g_free (value);
+}
static void
save_secret_flags (shvarFile *ifcfg,
@@ -94,6 +103,7 @@ set_secret (shvarFile *ifcfg,
gboolean verbatim)
{
shvarFile *keyfile;
+ GError *error = NULL;
/* Clear the secret from the ifcfg and the associated "keys" file */
svSetValue (ifcfg, key, NULL, FALSE);
@@ -103,8 +113,7 @@ set_secret (shvarFile *ifcfg,
keyfile = utils_get_keys_ifcfg (ifcfg->fileName, TRUE);
if (!keyfile) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: could not create key file for '%s'",
- ifcfg->fileName);
+ nm_log_warn (LOGD_SETTINGS, " could not create ifcfg file for '%s'", ifcfg->fileName);
goto error;
}
@@ -115,9 +124,10 @@ set_secret (shvarFile *ifcfg,
if (flags == NM_SETTING_SECRET_FLAG_NONE)
svSetValue (keyfile, key, value, verbatim);
- if (svWriteFile (keyfile, 0600)) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: could not update key file '%s'",
- keyfile->fileName);
+ if (!svWriteFile (keyfile, 0600, &error)) {
+ nm_log_warn (LOGD_SETTINGS, " could not update ifcfg file '%s': %s",
+ keyfile->fileName, error->message);
+ g_clear_error (&error);
svCloseFile (keyfile);
goto error;
}
@@ -140,13 +150,6 @@ write_secret_file (const char *path,
gboolean success = FALSE;
tmppath = g_malloc0 (strlen (path) + 10);
- if (!tmppath) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Could not allocate memory for temporary file for '%s'",
- path);
- return FALSE;
- }
-
memcpy (tmppath, path, strlen (path));
strcat (tmppath, ".XXXXXX");
@@ -452,10 +455,12 @@ write_8021x_setting (NMConnection *connection,
GError **error)
{
NMSetting8021x *s_8021x;
- const char *value;
+ const char *value, *match;
char *tmp = NULL;
gboolean success = FALSE;
GString *phase2_auth;
+ GString *str;
+ guint32 i, num;
s_8021x = nm_connection_get_setting_802_1x (connection);
if (!s_8021x) {
@@ -550,6 +555,40 @@ write_8021x_setting (NMConnection *connection,
g_string_free (phase2_auth, TRUE);
+ svSetValue (ifcfg, "IEEE_8021X_SUBJECT_MATCH",
+ nm_setting_802_1x_get_subject_match (s_8021x),
+ FALSE);
+
+ svSetValue (ifcfg, "IEEE_8021X_PHASE2_SUBJECT_MATCH",
+ nm_setting_802_1x_get_phase2_subject_match (s_8021x),
+ FALSE);
+
+ svSetValue (ifcfg, "IEEE_8021X_ALTSUBJECT_MATCHES", NULL, FALSE);
+ str = g_string_new (NULL);
+ num = nm_setting_802_1x_get_num_altsubject_matches (s_8021x);
+ for (i = 0; i < num; i++) {
+ if (i > 0)
+ g_string_append_c (str, ' ');
+ match = nm_setting_802_1x_get_altsubject_match (s_8021x, i);
+ g_string_append (str, match);
+ }
+ if (str->len > 0)
+ svSetValue (ifcfg, "IEEE_8021X_ALTSUBJECT_MATCHES", str->str, FALSE);
+ g_string_free (str, TRUE);
+
+ svSetValue (ifcfg, "IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES", NULL, FALSE);
+ str = g_string_new (NULL);
+ num = nm_setting_802_1x_get_num_phase2_altsubject_matches (s_8021x);
+ for (i = 0; i < num; i++) {
+ if (i > 0)
+ g_string_append_c (str, ' ');
+ match = nm_setting_802_1x_get_phase2_altsubject_match (s_8021x, i);
+ g_string_append (str, match);
+ }
+ if (str->len > 0)
+ svSetValue (ifcfg, "IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES", str->str, FALSE);
+ g_string_free (str, TRUE);
+
success = write_8021x_certs (s_8021x, FALSE, ifcfg, error);
if (success) {
/* phase2/inner certs */
@@ -786,21 +825,15 @@ write_wireless_setting (NMConnection *connection,
svSetValue (ifcfg, "HWADDR", NULL, FALSE);
device_mac = nm_setting_wireless_get_mac_address (s_wireless);
if (device_mac) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- device_mac->data[0], device_mac->data[1], device_mac->data[2],
- device_mac->data[3], device_mac->data[4], device_mac->data[5]);
- svSetValue (ifcfg, "HWADDR", tmp, FALSE);
- g_free (tmp);
+ svSetValue_free (ifcfg, "HWADDR",
+ nm_utils_hwaddr_ntoa_len (device_mac->data, device_mac->len), FALSE);
}
svSetValue (ifcfg, "MACADDR", NULL, FALSE);
cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
if (cloned_mac) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- cloned_mac->data[0], cloned_mac->data[1], cloned_mac->data[2],
- cloned_mac->data[3], cloned_mac->data[4], cloned_mac->data[5]);
- svSetValue (ifcfg, "MACADDR", tmp, FALSE);
- g_free (tmp);
+ svSetValue_free (ifcfg, "MACADDR",
+ nm_utils_hwaddr_ntoa_len (cloned_mac->data, cloned_mac->len), FALSE);
}
svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE);
@@ -902,11 +935,8 @@ write_wireless_setting (NMConnection *connection,
svSetValue (ifcfg, "BSSID", NULL, FALSE);
bssid = nm_setting_wireless_get_bssid (s_wireless);
if (bssid) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- bssid->data[0], bssid->data[1], bssid->data[2],
- bssid->data[3], bssid->data[4], bssid->data[5]);
- svSetValue (ifcfg, "BSSID", tmp, FALSE);
- g_free (tmp);
+ svSetValue_free (ifcfg, "BSSID",
+ nm_utils_hwaddr_ntoa_len (bssid->data, bssid->len), FALSE);
}
/* Ensure DEFAULTKEY and SECURITYMODE are cleared unless there's security;
@@ -916,7 +946,7 @@ write_wireless_setting (NMConnection *connection,
svSetValue (ifcfg, "DEFAULTKEY", NULL, FALSE);
svSetValue (ifcfg, "SECURITYMODE", NULL, FALSE);
- if (nm_setting_wireless_get_security (s_wireless)) {
+ if (nm_connection_get_setting_wireless_security (connection)) {
if (!write_wireless_security_setting (connection, ifcfg, adhoc, no_8021x, error))
return FALSE;
} else {
@@ -953,6 +983,8 @@ write_wireless_setting (NMConnection *connection,
g_free (keys_path);
}
+ svSetValue (ifcfg, "SSID_HIDDEN", nm_setting_wireless_get_hidden (s_wireless) ? "yes" : NULL, TRUE);
+
svSetValue (ifcfg, "TYPE", TYPE_WIRELESS, FALSE);
return TRUE;
@@ -964,8 +996,9 @@ write_infiniband_setting (NMConnection *connection, shvarFile *ifcfg, GError **e
NMSettingInfiniband *s_infiniband;
const GByteArray *mac;
char *tmp;
- const char *transport_mode;
+ const char *transport_mode, *parent;
guint32 mtu;
+ int p_key;
s_infiniband = nm_connection_get_setting_infiniband (connection);
if (!s_infiniband) {
@@ -995,6 +1028,18 @@ write_infiniband_setting (NMConnection *connection, shvarFile *ifcfg, GError **e
strcmp (transport_mode, "connected") == 0 ? "yes" : "no",
FALSE);
+ p_key = nm_setting_infiniband_get_p_key (s_infiniband);
+ if (p_key != -1) {
+ svSetValue (ifcfg, "PKEY", "yes", FALSE);
+ tmp = g_strdup_printf ("%u", p_key);
+ svSetValue (ifcfg, "PKEY_ID", tmp, FALSE);
+ g_free (tmp);
+
+ parent = nm_setting_infiniband_get_parent (s_infiniband);
+ if (parent)
+ svSetValue (ifcfg, "PHYSDEV", parent, FALSE);
+ }
+
svSetValue (ifcfg, "TYPE", TYPE_INFINIBAND, FALSE);
return TRUE;
@@ -1022,21 +1067,15 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "HWADDR", NULL, FALSE);
device_mac = nm_setting_wired_get_mac_address (s_wired);
if (device_mac) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- device_mac->data[0], device_mac->data[1], device_mac->data[2],
- device_mac->data[3], device_mac->data[4], device_mac->data[5]);
- svSetValue (ifcfg, "HWADDR", tmp, FALSE);
- g_free (tmp);
+ svSetValue_free (ifcfg, "HWADDR",
+ nm_utils_hwaddr_ntoa_len (device_mac->data, device_mac->len), FALSE);
}
svSetValue (ifcfg, "MACADDR", NULL, FALSE);
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
if (cloned_mac) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- cloned_mac->data[0], cloned_mac->data[1], cloned_mac->data[2],
- cloned_mac->data[3], cloned_mac->data[4], cloned_mac->data[5]);
- svSetValue (ifcfg, "MACADDR", tmp, FALSE);
- g_free (tmp);
+ svSetValue_free (ifcfg, "MACADDR",
+ nm_utils_hwaddr_ntoa_len (cloned_mac->data, cloned_mac->len), FALSE);
}
svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE);
@@ -1139,7 +1178,7 @@ vlan_priority_maplist_to_stringlist (NMSettingVlan *s_vlan, NMVlanPriorityMap ma
for (iter = strlist; iter; iter = g_slist_next (iter))
g_string_append_printf (value, "%s%s", value->len ? "," : "", (const char *) iter->data);
- nm_utils_slist_free (strlist, g_free);
+ g_slist_free_full (strlist, g_free);
return value;
}
@@ -1288,11 +1327,39 @@ write_bonding_setting (NMConnection *connection, shvarFile *ifcfg, GError **erro
return TRUE;
}
+static gboolean
+write_team_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
+{
+ NMSettingTeam *s_team;
+ const char *iface;
+ const char *config;
+
+ s_team = nm_connection_get_setting_team (connection);
+ if (!s_team) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Missing '%s' setting", NM_SETTING_TEAM_SETTING_NAME);
+ return FALSE;
+ }
+
+ iface = nm_setting_team_get_interface_name (s_team);
+ if (!iface) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Missing interface name");
+ return FALSE;
+ }
+
+ svSetValue (ifcfg, "DEVICE", iface, FALSE);
+ config = nm_setting_team_get_config (s_team);
+ svSetValue (ifcfg, "TEAM_CONFIG", config, FALSE);
+ svSetValue (ifcfg, "DEVICETYPE", TYPE_TEAM, FALSE);
+
+ return TRUE;
+}
+
static guint32
get_setting_default (NMSetting *setting, const char *prop)
{
GParamSpec *pspec;
- GValue val = { 0 };
+ GValue val = G_VALUE_INIT;
guint32 ret = 0;
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop);
@@ -1312,6 +1379,7 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error
const char *iface;
guint32 i;
GString *opts;
+ const GByteArray *mac;
char *s;
s_bridge = nm_connection_get_setting_bridge (connection);
@@ -1331,6 +1399,11 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error
svSetValue (ifcfg, "BRIDGING_OPTS", NULL, FALSE);
svSetValue (ifcfg, "STP", "no", FALSE);
svSetValue (ifcfg, "DELAY", NULL, FALSE);
+ svSetValue (ifcfg, "MACADDR", NULL, FALSE);
+
+ mac = nm_setting_bridge_get_mac_address (s_bridge);
+ if (mac)
+ svSetValue_free (ifcfg, "MACADDR", nm_utils_hwaddr_ntoa_len (mac->data, mac->len), FALSE);
/* Bridge options */
opts = g_string_sized_new (32);
@@ -1339,7 +1412,7 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error
svSetValue (ifcfg, "STP", "yes", FALSE);
i = nm_setting_bridge_get_forward_delay (s_bridge);
- if (i && i != get_setting_default (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_FORWARD_DELAY)) {
+ if (i != get_setting_default (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_FORWARD_DELAY)) {
s = g_strdup_printf ("%u", i);
svSetValue (ifcfg, "DELAY", s, FALSE);
g_free (s);
@@ -1348,14 +1421,14 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error
g_string_append_printf (opts, "priority=%u", nm_setting_bridge_get_priority (s_bridge));
i = nm_setting_bridge_get_hello_time (s_bridge);
- if (i && i != get_setting_default (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_HELLO_TIME)) {
+ if (i != get_setting_default (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_HELLO_TIME)) {
if (opts->len)
g_string_append_c (opts, ' ');
g_string_append_printf (opts, "hello_time=%u", i);
}
i = nm_setting_bridge_get_max_age (s_bridge);
- if (i && i != get_setting_default (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MAX_AGE)) {
+ if (i != get_setting_default (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MAX_AGE)) {
if (opts->len)
g_string_append_c (opts, ' ');
g_string_append_printf (opts, "max_age=%u", i);
@@ -1395,11 +1468,11 @@ write_bridge_port_setting (NMConnection *connection, shvarFile *ifcfg, GError **
opts = g_string_sized_new (32);
i = nm_setting_bridge_port_get_priority (s_port);
- if (i && i != get_setting_default (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PRIORITY))
+ if (i != get_setting_default (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PRIORITY))
g_string_append_printf (opts, "priority=%u", i);
i = nm_setting_bridge_port_get_path_cost (s_port);
- if (i && i != get_setting_default (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PATH_COST)) {
+ if (i != get_setting_default (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PATH_COST)) {
if (opts->len)
g_string_append_c (opts, ' ');
g_string_append_printf (opts, "path_cost=%u", i);
@@ -1418,15 +1491,220 @@ write_bridge_port_setting (NMConnection *connection, shvarFile *ifcfg, GError **
return TRUE;
}
+static gboolean
+write_team_port_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
+{
+ NMSettingTeamPort *s_port;
+ const char *config;
+
+ s_port = nm_connection_get_setting_team_port (connection);
+ if (!s_port)
+ return TRUE;
+
+ config = nm_setting_team_port_get_config (s_port);
+ svSetValue (ifcfg, "TEAM_PORT_CONFIG", config, FALSE);
+
+ return TRUE;
+}
+
+static void
+write_dcb_flags (shvarFile *ifcfg, const char *tag, NMSettingDcbFlags flags)
+{
+ char *prop;
+
+ prop = g_strdup_printf ("DCB_%s_ENABLE", tag);
+ svSetValue (ifcfg, prop, (flags & NM_SETTING_DCB_FLAG_ENABLE) ? "yes" : NULL, FALSE);
+ g_free (prop);
+
+ prop = g_strdup_printf ("DCB_%s_ADVERTISE", tag);
+ svSetValue (ifcfg, prop, (flags & NM_SETTING_DCB_FLAG_ADVERTISE) ? "yes" : NULL, FALSE);
+ g_free (prop);
+
+ prop = g_strdup_printf ("DCB_%s_WILLING", tag);
+ svSetValue (ifcfg, prop, (flags & NM_SETTING_DCB_FLAG_WILLING) ? "yes" : NULL, FALSE);
+ g_free (prop);
+}
+
+static void
+write_dcb_app (shvarFile *ifcfg,
+ const char *tag,
+ NMSettingDcbFlags flags,
+ gint priority)
+{
+ char *prop, *tmp = NULL;
+
+ write_dcb_flags (ifcfg, tag, flags);
+
+ if ((flags & NM_SETTING_DCB_FLAG_ENABLE) && (priority >= 0))
+ tmp = g_strdup_printf ("%d", priority);
+ prop = g_strdup_printf ("DCB_%s_PRIORITY", tag);
+ svSetValue (ifcfg, prop, tmp, FALSE);
+ g_free (prop);
+ g_free (tmp);
+}
+
+typedef gboolean (*DcbGetBoolFunc) (NMSettingDcb *, guint);
+
+static void
+write_dcb_bool_array (shvarFile *ifcfg,
+ const char *key,
+ NMSettingDcb *s_dcb,
+ NMSettingDcbFlags flags,
+ DcbGetBoolFunc get_func)
+{
+ char str[9];
+ guint i;
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
+ svSetValue (ifcfg, key, NULL, FALSE);
+ return;
+ }
+
+ str[8] = 0;
+ for (i = 0; i < 8; i++)
+ str[i] = get_func (s_dcb, i) ? '1' : '0';
+ svSetValue (ifcfg, key, str, FALSE);
+}
+
+typedef guint (*DcbGetUintFunc) (NMSettingDcb *, guint);
+
+static void
+write_dcb_uint_array (shvarFile *ifcfg,
+ const char *key,
+ NMSettingDcb *s_dcb,
+ NMSettingDcbFlags flags,
+ DcbGetUintFunc get_func)
+{
+ char str[9];
+ guint i, num;
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
+ svSetValue (ifcfg, key, NULL, FALSE);
+ return;
+ }
+
+ str[8] = 0;
+ for (i = 0; i < 8; i++) {
+ num = get_func (s_dcb, i);
+ if (num < 10)
+ str[i] = '0' + num;
+ else if (num == 15)
+ str[i] = 'f';
+ else
+ g_assert_not_reached ();
+ }
+ svSetValue (ifcfg, key, str, FALSE);
+}
+
+static void
+write_dcb_percent_array (shvarFile *ifcfg,
+ const char *key,
+ NMSettingDcb *s_dcb,
+ NMSettingDcbFlags flags,
+ DcbGetUintFunc get_func)
+{
+ GString *str;
+ guint i;
+
+ if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
+ svSetValue (ifcfg, key, NULL, FALSE);
+ return;
+ }
+
+ str = g_string_sized_new (30);
+ for (i = 0; i < 8; i++) {
+ if (str->len)
+ g_string_append_c (str, ',');
+ g_string_append_printf (str, "%d", get_func (s_dcb, i));
+ }
+ svSetValue (ifcfg, key, str->str, FALSE);
+ g_string_free (str, TRUE);
+}
+
+static gboolean
+write_dcb_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
+{
+ NMSettingDcb *s_dcb;
+ NMSettingDcbFlags flags;
+
+ s_dcb = nm_connection_get_setting_dcb (connection);
+ if (!s_dcb) {
+ static const char *clear_keys[] = {
+ "DCB",
+ KEY_DCB_APP_FCOE_ENABLE,
+ KEY_DCB_APP_FCOE_ADVERTISE,
+ KEY_DCB_APP_FCOE_WILLING,
+ KEY_DCB_APP_FCOE_MODE,
+ KEY_DCB_APP_ISCSI_ENABLE,
+ KEY_DCB_APP_ISCSI_ADVERTISE,
+ KEY_DCB_APP_ISCSI_WILLING,
+ KEY_DCB_APP_FIP_ENABLE,
+ KEY_DCB_APP_FIP_ADVERTISE,
+ KEY_DCB_APP_FIP_WILLING,
+ KEY_DCB_PFC_ENABLE,
+ KEY_DCB_PFC_ADVERTISE,
+ KEY_DCB_PFC_WILLING,
+ KEY_DCB_PFC_UP,
+ KEY_DCB_PG_ENABLE,
+ KEY_DCB_PG_ADVERTISE,
+ KEY_DCB_PG_WILLING,
+ KEY_DCB_PG_ID,
+ KEY_DCB_PG_PCT,
+ KEY_DCB_PG_UPPCT,
+ KEY_DCB_PG_STRICT,
+ KEY_DCB_PG_UP2TC,
+ NULL };
+ const char **iter;
+
+ for (iter = clear_keys; *iter; iter++)
+ svSetValue (ifcfg, *iter, NULL, FALSE);
+ return TRUE;
+ }
+
+ svSetValue (ifcfg, "DCB", "yes", FALSE);
+
+ write_dcb_app (ifcfg, "APP_FCOE",
+ nm_setting_dcb_get_app_fcoe_flags (s_dcb),
+ nm_setting_dcb_get_app_fcoe_priority (s_dcb));
+ if (nm_setting_dcb_get_app_fcoe_flags (s_dcb) & NM_SETTING_DCB_FLAG_ENABLE)
+ svSetValue (ifcfg, KEY_DCB_APP_FCOE_MODE, nm_setting_dcb_get_app_fcoe_mode (s_dcb), FALSE);
+ else
+ svSetValue (ifcfg, KEY_DCB_APP_FCOE_MODE, NULL, FALSE);
+
+ write_dcb_app (ifcfg, "APP_ISCSI",
+ nm_setting_dcb_get_app_iscsi_flags (s_dcb),
+ nm_setting_dcb_get_app_iscsi_priority (s_dcb));
+ write_dcb_app (ifcfg, "APP_FIP",
+ nm_setting_dcb_get_app_fip_flags (s_dcb),
+ nm_setting_dcb_get_app_fip_priority (s_dcb));
+
+ write_dcb_flags (ifcfg, "PFC", nm_setting_dcb_get_priority_flow_control_flags (s_dcb));
+ write_dcb_bool_array (ifcfg, KEY_DCB_PFC_UP, s_dcb,
+ nm_setting_dcb_get_priority_flow_control_flags (s_dcb),
+ nm_setting_dcb_get_priority_flow_control);
+
+ flags = nm_setting_dcb_get_priority_group_flags (s_dcb);
+ write_dcb_flags (ifcfg, "PG", flags);
+ write_dcb_uint_array (ifcfg, KEY_DCB_PG_ID, s_dcb, flags, nm_setting_dcb_get_priority_group_id);
+ write_dcb_percent_array (ifcfg, KEY_DCB_PG_PCT, s_dcb, flags, nm_setting_dcb_get_priority_group_bandwidth);
+ write_dcb_percent_array (ifcfg, KEY_DCB_PG_UPPCT, s_dcb, flags, nm_setting_dcb_get_priority_bandwidth);
+ write_dcb_bool_array (ifcfg, KEY_DCB_PG_STRICT, s_dcb, flags, nm_setting_dcb_get_priority_strict_bandwidth);
+ write_dcb_uint_array (ifcfg, KEY_DCB_PG_UP2TC, s_dcb, flags, nm_setting_dcb_get_priority_traffic_class);
+
+ return TRUE;
+}
+
static void
write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
{
guint32 n, i;
GString *str;
const char *master;
+ char *tmp;
svSetValue (ifcfg, "NAME", nm_setting_connection_get_id (s_con), FALSE);
svSetValue (ifcfg, "UUID", nm_setting_connection_get_uuid (s_con), FALSE);
+ svSetValue (ifcfg, "DEVICE", nm_setting_connection_get_interface_name (s_con), FALSE);
svSetValue (ifcfg, "ONBOOT",
nm_setting_connection_get_autoconnect (s_con) ? "yes" : "no",
FALSE);
@@ -1457,10 +1735,16 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
master = nm_setting_connection_get_master (s_con);
if (master) {
- if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_BOND_SETTING_NAME))
+ if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_BOND_SETTING_NAME)) {
svSetValue (ifcfg, "MASTER", master, FALSE);
- else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_BRIDGE_SETTING_NAME))
+ svSetValue (ifcfg, "SLAVE", "yes", FALSE);
+ } else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_BRIDGE_SETTING_NAME))
svSetValue (ifcfg, "BRIDGE", master, FALSE);
+ else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME)) {
+ svSetValue (ifcfg, "TEAM_MASTER", master, FALSE);
+ svSetValue (ifcfg, "DEVICETYPE", TYPE_TEAM_PORT, FALSE);
+ svSetValue (ifcfg, "TYPE", NULL, FALSE);
+ }
}
/* secondary connection UUIDs */
@@ -1484,6 +1768,13 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
svSetValue (ifcfg, "SECONDARY_UUIDS", str->str, FALSE);
g_string_free (str, TRUE);
}
+
+ svSetValue (ifcfg, "GATEWAY_PING_TIMEOUT", NULL, FALSE);
+ if (nm_setting_connection_get_gateway_ping_timeout (s_con)) {
+ tmp = g_strdup_printf ("%" G_GUINT32_FORMAT, nm_setting_connection_get_gateway_ping_timeout (s_con));
+ svSetValue (ifcfg, "GATEWAY_PING_TIMEOUT", tmp, FALSE);
+ g_free (tmp);
+ }
}
static gboolean
@@ -1553,7 +1844,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
char *addr_key, *prefix_key, *netmask_key, *gw_key, *metric_key, *tmp;
char *route_path = NULL;
gint32 j;
- guint32 i, num;
+ guint32 i, n, num;
GString *searches;
gboolean success = FALSE;
gboolean fake_ip4 = FALSE;
@@ -1617,48 +1908,85 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
svSetValue (ifcfg, "BOOTPROTO", "shared", FALSE);
- /* Write out IPADDR0 .. IPADDR255, PREFIX0 .. PREFIX255, GATEWAY0 .. GATEWAY255
- * Possible NETMASK<n> is removed only (it's obsolete) */
- num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ /* Clear out un-numbered IP address fields */
svSetValue (ifcfg, "IPADDR", NULL, FALSE);
svSetValue (ifcfg, "PREFIX", NULL, FALSE);
svSetValue (ifcfg, "NETMASK", NULL, FALSE);
svSetValue (ifcfg, "GATEWAY", NULL, FALSE);
- for (i = 0; i < 256; i++) {
+ /* Clear out zero-indexed IP address fields */
+ svSetValue (ifcfg, "IPADDR0", NULL, FALSE);
+ svSetValue (ifcfg, "PREFIX0", NULL, FALSE);
+ svSetValue (ifcfg, "NETMASK0", NULL, FALSE);
+ svSetValue (ifcfg, "GATEWAY0", NULL, FALSE);
+
+ /* Write out IPADDR<n>, PREFIX<n>, GATEWAY<n> for current IP addresses
+ * without labels. Unset obsolete NETMASK<n>.
+ */
+ num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ for (i = n = 0; i < num; i++) {
char buf[INET_ADDRSTRLEN];
NMIP4Address *addr;
guint32 ip;
- addr_key = g_strdup_printf ("IPADDR%d", i);
- prefix_key = g_strdup_printf ("PREFIX%d", i);
- netmask_key = g_strdup_printf ("NETMASK%d", i);
- gw_key = g_strdup_printf ("GATEWAY%d", i);
+ if (i > 0 && NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, i)))
+ continue;
- if (i >= num) {
- svSetValue (ifcfg, addr_key, NULL, FALSE);
- svSetValue (ifcfg, prefix_key, NULL, FALSE);
- svSetValue (ifcfg, netmask_key, NULL, FALSE);
- svSetValue (ifcfg, gw_key, NULL, FALSE);
+ if (n == 0) {
+ /* Instead of index 0 use un-numbered variables.
+ * It's needed for compatibility with ifup that only recognizes 'GATEAWAY'
+ * See https://bugzilla.redhat.com/show_bug.cgi?id=771673
+ * and https://bugzilla.redhat.com/show_bug.cgi?id=1105770
+ */
+ addr_key = g_strdup ("IPADDR");
+ prefix_key = g_strdup ("PREFIX");
+ netmask_key = g_strdup ("NETMASK");
+ gw_key = g_strdup ("GATEWAY");
} else {
- addr = nm_setting_ip4_config_get_address (s_ip4, i);
+ addr_key = g_strdup_printf ("IPADDR%d", n);
+ prefix_key = g_strdup_printf ("PREFIX%d", n);
+ netmask_key = g_strdup_printf ("NETMASK%d", n);
+ gw_key = g_strdup_printf ("GATEWAY%d", n);
+ }
+ addr = nm_setting_ip4_config_get_address (s_ip4, i);
+
+ memset (buf, 0, sizeof (buf));
+ ip = nm_ip4_address_get_address (addr);
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
+ svSetValue (ifcfg, addr_key, &buf[0], FALSE);
+
+ tmp = g_strdup_printf ("%u", nm_ip4_address_get_prefix (addr));
+ svSetValue (ifcfg, prefix_key, tmp, FALSE);
+ g_free (tmp);
+
+ svSetValue (ifcfg, netmask_key, NULL, FALSE);
+
+ if (nm_ip4_address_get_gateway (addr)) {
memset (buf, 0, sizeof (buf));
- ip = nm_ip4_address_get_address (addr);
+ ip = nm_ip4_address_get_gateway (addr);
inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
- svSetValue (ifcfg, addr_key, &buf[0], FALSE);
+ svSetValue (ifcfg, gw_key, &buf[0], FALSE);
+ } else
+ svSetValue (ifcfg, gw_key, NULL, FALSE);
- tmp = g_strdup_printf ("%u", nm_ip4_address_get_prefix (addr));
- svSetValue (ifcfg, prefix_key, tmp, FALSE);
- g_free (tmp);
+ g_free (addr_key);
+ g_free (prefix_key);
+ g_free (netmask_key);
+ g_free (gw_key);
+ n++;
+ }
- if (nm_ip4_address_get_gateway (addr)) {
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_address_get_gateway (addr);
- inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
- svSetValue (ifcfg, gw_key, &buf[0], FALSE);
- } else
- svSetValue (ifcfg, gw_key, NULL, FALSE);
- }
+ /* Clear remaining IPADDR<n..255>, etc */
+ for (; n < 256; n++) {
+ addr_key = g_strdup_printf ("IPADDR%d", n);
+ prefix_key = g_strdup_printf ("PREFIX%d", n);
+ netmask_key = g_strdup_printf ("NETMASK%d", n);
+ gw_key = g_strdup_printf ("GATEWAY%d", n);
+
+ svSetValue (ifcfg, addr_key, NULL, FALSE);
+ svSetValue (ifcfg, prefix_key, NULL, FALSE);
+ svSetValue (ifcfg, netmask_key, NULL, FALSE);
+ svSetValue (ifcfg, gw_key, NULL, FALSE);
g_free (addr_key);
g_free (prefix_key);
@@ -1719,6 +2047,13 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
if (value)
svSetValue (ifcfg, "DHCP_HOSTNAME", value, FALSE);
+ /* Missing DHCP_SEND_HOSTNAME means TRUE, and we prefer not write it explicitly
+ * in that case, because it is NM-specific variable
+ */
+ svSetValue (ifcfg, "DHCP_SEND_HOSTNAME",
+ nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4) ? NULL : "no",
+ FALSE);
+
value = nm_setting_ip4_config_get_dhcp_client_id (s_ip4);
if (value)
svSetValue (ifcfg, "DHCP_CLIENT_ID", value, FALSE);
@@ -1798,9 +2133,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (gw_key);
g_free (metric_key);
}
- if (svWriteFile (routefile, 0644)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Could not update route file '%s'", routefile->fileName);
+ if (!svWriteFile (routefile, 0644, error)) {
svCloseFile (routefile);
goto out;
}
@@ -1821,6 +2154,101 @@ out:
return success;
}
+static void
+write_ip4_aliases (NMConnection *connection, char *base_ifcfg_path)
+{
+ NMSettingIP4Config *s_ip4;
+ char *base_ifcfg_dir, *base_ifcfg_name, *base_name;
+ int i, num, base_ifcfg_name_len, base_name_len;
+ GDir *dir;
+
+ base_ifcfg_dir = g_path_get_dirname (base_ifcfg_path);
+ base_ifcfg_name = g_path_get_basename (base_ifcfg_path);
+ base_ifcfg_name_len = strlen (base_ifcfg_name);
+ base_name = base_ifcfg_name + strlen (IFCFG_TAG);
+ base_name_len = strlen (base_name);
+
+ /* Remove all existing aliases for this file first */
+ dir = g_dir_open (base_ifcfg_dir, 0, NULL);
+ if (dir) {
+ const char *item;
+
+ while ((item = g_dir_read_name (dir))) {
+ char *full_path;
+
+ if ( strncmp (item, base_ifcfg_name, base_ifcfg_name_len) != 0
+ || item[base_ifcfg_name_len] != ':')
+ continue;
+
+ full_path = g_build_filename (base_ifcfg_dir, item, NULL);
+ unlink (full_path);
+ g_free (full_path);
+ }
+
+ g_dir_close (dir);
+ }
+
+ if (utils_ignore_ip_config (connection))
+ return;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (!s_ip4)
+ return;
+
+ num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ for (i = 0; i < num; i++) {
+ const char *label, *p;
+ char buf[INET_ADDRSTRLEN], *path, *tmp;
+ NMIP4Address *addr;
+ guint32 ip;
+ shvarFile *ifcfg;
+
+ label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, i));
+ if (!label)
+ continue;
+ if ( strncmp (label, base_name, base_name_len) != 0
+ || label[base_name_len] != ':')
+ continue;
+
+ for (p = label; *p; p++) {
+ if (!g_ascii_isalnum (*p) && *p != '_' && *p != ':')
+ break;
+ }
+ if (*p)
+ continue;
+
+ path = g_strdup_printf ("%s%s", base_ifcfg_path, label + base_name_len);
+ ifcfg = svCreateFile (path);
+ g_free (path);
+
+ svSetValue (ifcfg, "DEVICE", label, FALSE);
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, i);
+
+ memset (buf, 0, sizeof (buf));
+ ip = nm_ip4_address_get_address (addr);
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
+ svSetValue (ifcfg, "IPADDR", &buf[0], FALSE);
+
+ tmp = g_strdup_printf ("%u", nm_ip4_address_get_prefix (addr));
+ svSetValue (ifcfg, "PREFIX", tmp, FALSE);
+ g_free (tmp);
+
+ if (nm_ip4_address_get_gateway (addr)) {
+ memset (buf, 0, sizeof (buf));
+ ip = nm_ip4_address_get_gateway (addr);
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
+ svSetValue (ifcfg, "GATEWAY", &buf[0], FALSE);
+ }
+
+ svWriteFile (ifcfg, 0644, NULL);
+ svCloseFile (ifcfg);
+ }
+
+ g_free (base_ifcfg_name);
+ g_free (base_ifcfg_dir);
+}
+
static gboolean
write_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **error)
{
@@ -1890,6 +2318,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
guint32 i, num, num4;
GString *searches;
char buf[INET6_ADDRSTRLEN];
+ char ipv6_defaultgw[INET6_ADDRSTRLEN];
NMIP6Address *addr;
const struct in6_addr *ip;
GString *ip_str1, *ip_str2, *ip_ptr;
@@ -1940,51 +2369,41 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* TODO */
}
- if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
- char ipv6_defaultgw[INET6_ADDRSTRLEN];
-
- /* Write out IP addresses */
- num = nm_setting_ip6_config_get_num_addresses (s_ip6);
+ /* Write out IP addresses */
+ num = nm_setting_ip6_config_get_num_addresses (s_ip6);
+ ip_str1 = g_string_new (NULL);
+ ip_str2 = g_string_new (NULL);
+ ipv6_defaultgw[0] = 0;
+ for (i = 0; i < num; i++) {
+ if (i == 0)
+ ip_ptr = ip_str1;
+ else
+ ip_ptr = ip_str2;
- ip_str1 = g_string_new (NULL);
- ip_str2 = g_string_new (NULL);
- ipv6_defaultgw[0] = 0;
- for (i = 0; i < num; i++) {
- if (i == 0)
- ip_ptr = ip_str1;
- else
- ip_ptr = ip_str2;
-
- addr = nm_setting_ip6_config_get_address (s_ip6, i);
- ip = nm_ip6_address_get_address (addr);
- prefix = g_strdup_printf ("%u", nm_ip6_address_get_prefix (addr));
- memset (buf, 0, sizeof (buf));
- inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
- if (i > 1)
- g_string_append_c (ip_ptr, ' '); /* separate addresses in IPV6ADDR_SECONDARIES */
- g_string_append (ip_ptr, buf);
- g_string_append_c (ip_ptr, '/');
- g_string_append (ip_ptr, prefix);
- g_free (prefix);
-
- /* We only support gateway for the first IP address for now */
- if (i == 0) {
- ip = nm_ip6_address_get_gateway (addr);
- if (!IN6_IS_ADDR_UNSPECIFIED (ip))
- inet_ntop (AF_INET6, ip, ipv6_defaultgw, sizeof (ipv6_defaultgw));
- }
+ addr = nm_setting_ip6_config_get_address (s_ip6, i);
+ ip = nm_ip6_address_get_address (addr);
+ prefix = g_strdup_printf ("%u", nm_ip6_address_get_prefix (addr));
+ memset (buf, 0, sizeof (buf));
+ inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
+ if (i > 1)
+ g_string_append_c (ip_ptr, ' '); /* separate addresses in IPV6ADDR_SECONDARIES */
+ g_string_append (ip_ptr, buf);
+ g_string_append_c (ip_ptr, '/');
+ g_string_append (ip_ptr, prefix);
+ g_free (prefix);
+
+ /* We only support gateway for the first IP address for now */
+ if (i == 0) {
+ ip = nm_ip6_address_get_gateway (addr);
+ if (!IN6_IS_ADDR_UNSPECIFIED (ip))
+ inet_ntop (AF_INET6, ip, ipv6_defaultgw, sizeof (ipv6_defaultgw));
}
-
- svSetValue (ifcfg, "IPV6ADDR", ip_str1->str, FALSE);
- svSetValue (ifcfg, "IPV6ADDR_SECONDARIES", ip_str2->str, FALSE);
- svSetValue (ifcfg, "IPV6_DEFAULTGW", ipv6_defaultgw, FALSE);
- g_string_free (ip_str1, TRUE);
- g_string_free (ip_str2, TRUE);
- } else {
- svSetValue (ifcfg, "IPV6ADDR", NULL, FALSE);
- svSetValue (ifcfg, "IPV6ADDR_SECONDARIES", NULL, FALSE);
- svSetValue (ifcfg, "IPV6_DEFAULTGW", NULL, FALSE);
}
+ svSetValue (ifcfg, "IPV6ADDR", ip_str1->str, FALSE);
+ svSetValue (ifcfg, "IPV6ADDR_SECONDARIES", ip_str2->str, FALSE);
+ svSetValue (ifcfg, "IPV6_DEFAULTGW", ipv6_defaultgw, FALSE);
+ g_string_free (ip_str1, TRUE);
+ g_string_free (ip_str2, TRUE);
/* Write out DNS - 'DNS' key is used both for IPv4 and IPv6 */
s_ip4 = nm_connection_get_setting_ip4_config (connection);
@@ -2115,16 +2534,18 @@ write_connection (NMConnection *connection,
gboolean no_8021x = FALSE;
gboolean wired = FALSE;
- s_con = nm_connection_get_setting_connection (connection);
- if (!s_con) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Missing '%s' setting", NM_SETTING_CONNECTION_SETTING_NAME);
+ if (!writer_can_write_connection (connection, error))
return FALSE;
- }
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
if (filename) {
/* For existing connections, 'filename' should be full path to ifcfg file */
- ifcfg = svNewFile (filename);
+ ifcfg = svOpenFile (filename, error);
+ if (!ifcfg)
+ return FALSE;
+
ifcfg_name = g_strdup (filename);
} else {
char *escaped;
@@ -2160,12 +2581,6 @@ write_connection (NMConnection *connection,
ifcfg = svCreateFile (ifcfg_name);
}
- if (!ifcfg) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to open/create ifcfg file '%s'", ifcfg_name);
- goto out;
- }
-
type = nm_setting_connection_get_connection_type (s_con);
if (!type) {
g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
@@ -2197,6 +2612,9 @@ write_connection (NMConnection *connection,
} else if (!strcmp (type, NM_SETTING_BOND_SETTING_NAME)) {
if (!write_bonding_setting (connection, ifcfg, error))
goto out;
+ } else if (!strcmp (type, NM_SETTING_TEAM_SETTING_NAME)) {
+ if (!write_team_setting (connection, ifcfg, error))
+ goto out;
} else if (!strcmp (type, NM_SETTING_BRIDGE_SETTING_NAME)) {
if (!write_bridge_setting (connection, ifcfg, error))
goto out;
@@ -2214,11 +2632,18 @@ write_connection (NMConnection *connection,
if (!write_bridge_port_setting (connection, ifcfg, error))
goto out;
+ if (!write_team_port_setting (connection, ifcfg, error))
+ goto out;
+
+ if (!write_dcb_setting (connection, ifcfg, error))
+ goto out;
+
if (!utils_ignore_ip_config (connection)) {
svSetValue (ifcfg, "DHCP_HOSTNAME", NULL, FALSE);
if (!write_ip4_setting (connection, ifcfg, error))
goto out;
+ write_ip4_aliases (connection, ifcfg_name);
if (!write_ip6_setting (connection, ifcfg, error))
goto out;
@@ -2226,11 +2651,8 @@ write_connection (NMConnection *connection,
write_connection_setting (s_con, ifcfg);
- if (svWriteFile (ifcfg, 0644)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Can't write connection '%s'", ifcfg->fileName);
+ if (!svWriteFile (ifcfg, 0644, error))
goto out;
- }
/* Only return the filename if this was a newly written ifcfg */
if (out_filename && !filename)
@@ -2246,6 +2668,31 @@ out:
}
gboolean
+writer_can_write_connection (NMConnection *connection, GError **error)
+{
+ NMSettingConnection *s_con;
+
+ if ( ( nm_connection_is_type (connection, NM_SETTING_WIRED_SETTING_NAME)
+ && !nm_connection_get_setting_pppoe (connection))
+ || nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_WIRELESS_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME)
+ || nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
+ return TRUE;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "The ifcfg-rh plugin cannot write the connection '%s' (type '%s' pppoe %d)",
+ nm_connection_get_id (connection),
+ nm_setting_connection_get_connection_type (s_con),
+ !!nm_connection_get_setting_pppoe (connection));
+ return FALSE;
+}
+
+gboolean
writer_new_connection (NMConnection *connection,
const char *ifcfg_dir,
char **out_filename,
diff --git a/src/settings/plugins/ifcfg-rh/writer.h b/src/settings/plugins/ifcfg-rh/writer.h
index edeac0ccc..894313dd0 100644
--- a/src/settings/plugins/ifcfg-rh/writer.h
+++ b/src/settings/plugins/ifcfg-rh/writer.h
@@ -25,6 +25,9 @@
#include <glib.h>
#include <nm-connection.h>
+gboolean writer_can_write_connection (NMConnection *connection,
+ GError **error);
+
gboolean writer_new_connection (NMConnection *connection,
const char *ifcfg_dir,
char **out_filename,
diff --git a/src/settings/plugins/ifcfg-suse/Makefile.am b/src/settings/plugins/ifcfg-suse/Makefile.am
index 6b14bfe20..d4f1cf74d 100644
--- a/src/settings/plugins/ifcfg-suse/Makefile.am
+++ b/src/settings/plugins/ifcfg-suse/Makefile.am
@@ -1,20 +1,23 @@
-
-pkglib_LTLIBRARIES = libnm-settings-plugin-ifcfg-suse.la
-
-libnm_settings_plugin_ifcfg_suse_la_SOURCES = \
- plugin.c \
- plugin.h
-
-libnm_settings_plugin_ifcfg_suse_la_CPPFLAGS = \
+AM_CPPFLAGS = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ -I${top_srcdir}/src \
-I${top_srcdir}/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifcfg-suse"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DSYSCONFDIR=\"$(sysconfdir)\"
+pkglib_LTLIBRARIES = libnm-settings-plugin-ifcfg-suse.la
+
+libnm_settings_plugin_ifcfg_suse_la_SOURCES = \
+ plugin.c \
+ plugin.h
+
libnm_settings_plugin_ifcfg_suse_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifcfg_suse_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
diff --git a/src/settings/plugins/ifcfg-suse/Makefile.in b/src/settings/plugins/ifcfg-suse/Makefile.in
index 1bc5bd607..5ff5bfb2c 100644
--- a/src/settings/plugins/ifcfg-suse/Makefile.in
+++ b/src/settings/plugins/ifcfg-suse/Makefile.in
@@ -82,7 +82,8 @@ subdir = src/settings/plugins/ifcfg-suse
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -133,8 +134,7 @@ am__DEPENDENCIES_1 =
libnm_settings_plugin_ifcfg_suse_la_DEPENDENCIES = \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la $(am__DEPENDENCIES_1)
-am_libnm_settings_plugin_ifcfg_suse_la_OBJECTS = \
- libnm_settings_plugin_ifcfg_suse_la-plugin.lo
+am_libnm_settings_plugin_ifcfg_suse_la_OBJECTS = plugin.lo
libnm_settings_plugin_ifcfg_suse_la_OBJECTS = \
$(am_libnm_settings_plugin_ifcfg_suse_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -232,12 +232,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -262,7 +265,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -307,12 +309,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -329,6 +335,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -356,11 +364,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -375,6 +388,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -437,6 +451,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -447,21 +462,26 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-pkglib_LTLIBRARIES = libnm-settings-plugin-ifcfg-suse.la
-libnm_settings_plugin_ifcfg_suse_la_SOURCES = \
- plugin.c \
- plugin.h
-
-libnm_settings_plugin_ifcfg_suse_la_CPPFLAGS = \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ -I${top_srcdir}/src \
-I${top_srcdir}/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifcfg-suse"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DSYSCONFDIR=\"$(sysconfdir)\"
+pkglib_LTLIBRARIES = libnm-settings-plugin-ifcfg-suse.la
+libnm_settings_plugin_ifcfg_suse_la_SOURCES = \
+ plugin.c \
+ plugin.h
+
libnm_settings_plugin_ifcfg_suse_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifcfg_suse_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
@@ -547,7 +567,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_ifcfg_suse_la-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -570,13 +590,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_settings_plugin_ifcfg_suse_la-plugin.lo: plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifcfg_suse_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_ifcfg_suse_la-plugin.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_ifcfg_suse_la-plugin.Tpo -c -o libnm_settings_plugin_ifcfg_suse_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_ifcfg_suse_la-plugin.Tpo $(DEPDIR)/libnm_settings_plugin_ifcfg_suse_la-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libnm_settings_plugin_ifcfg_suse_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifcfg_suse_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_ifcfg_suse_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/src/settings/plugins/ifcfg-suse/plugin.c b/src/settings/plugins/ifcfg-suse/plugin.c
index 2ec90d81c..d6aa79fb5 100644
--- a/src/settings/plugins/ifcfg-suse/plugin.c
+++ b/src/settings/plugins/ifcfg-suse/plugin.c
@@ -309,7 +309,7 @@ system_config_interface_init (NMSystemConfigInterface *system_config_interface_c
}
G_MODULE_EXPORT GObject *
-nm_system_config_factory (const char *config_file)
+nm_system_config_factory (void)
{
static SCPluginIfcfg *singleton = NULL;
diff --git a/src/settings/plugins/ifnet/Makefile.am b/src/settings/plugins/ifnet/Makefile.am
index 66d706b6a..a22ea557a 100644
--- a/src/settings/plugins/ifnet/Makefile.am
+++ b/src/settings/plugins/ifnet/Makefile.am
@@ -1,32 +1,37 @@
SUBDIRS = . tests
-pkglib_LTLIBRARIES = libnm-settings-plugin-ifnet.la
-
-noinst_LTLIBRARIES = lib-ifnet-io.la
+@GNOME_CODE_COVERAGE_RULES@
AM_CPPFLAGS = \
- -I$(top_srcdir)/src/wifi \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/config \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-glib \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
+ $(POLKIT_CFLAGS) \
+ $(GUDEV_CFLAGS) \
+ -DSYSCONFDIR=\"$(sysconfdir)\"
-DSBINDIR=\"$(sbindir)\"
+pkglib_LTLIBRARIES = libnm-settings-plugin-ifnet.la
+
+noinst_LTLIBRARIES = lib-ifnet-io.la
+
libnm_settings_plugin_ifnet_la_SOURCES = \
nm-ifnet-connection.c \
nm-ifnet-connection.h \
plugin.c \
plugin.h
-libnm_settings_plugin_ifnet_la_CPPFLAGS = \
- $(GUDEV_CFLAGS) \
- $(AM_CPPFLAGS)
-
libnm_settings_plugin_ifnet_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifnet_la_LIBADD = \
@@ -44,9 +49,10 @@ lib_ifnet_io_la_SOURCES = \
net_utils.h\
net_utils.c\
wpa_parser.h\
- wpa_parser.c
+ wpa_parser.c \
+ errors.h \
+ errors.c
lib_ifnet_io_la_LIBADD = \
- $(top_builddir)/src/wifi/libwifi-utils.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(GLIB_LIBS)
diff --git a/src/settings/plugins/ifnet/Makefile.in b/src/settings/plugins/ifnet/Makefile.in
index f12de4fa3..6a6581896 100644
--- a/src/settings/plugins/ifnet/Makefile.in
+++ b/src/settings/plugins/ifnet/Makefile.in
@@ -82,7 +82,8 @@ subdir = src/settings/plugins/ifnet
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -131,10 +132,9 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
lib_ifnet_io_la_DEPENDENCIES = \
- $(top_builddir)/src/wifi/libwifi-utils.la \
$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1)
am_lib_ifnet_io_la_OBJECTS = net_parser.lo connection_parser.lo \
- net_utils.lo wpa_parser.lo
+ net_utils.lo wpa_parser.lo errors.lo
lib_ifnet_io_la_OBJECTS = $(am_lib_ifnet_io_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -144,9 +144,8 @@ libnm_settings_plugin_ifnet_la_DEPENDENCIES = \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la lib-ifnet-io.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libnm_settings_plugin_ifnet_la_OBJECTS = \
- libnm_settings_plugin_ifnet_la-nm-ifnet-connection.lo \
- libnm_settings_plugin_ifnet_la-plugin.lo
+am_libnm_settings_plugin_ifnet_la_OBJECTS = nm-ifnet-connection.lo \
+ plugin.lo
libnm_settings_plugin_ifnet_la_OBJECTS = \
$(am_libnm_settings_plugin_ifnet_la_OBJECTS)
libnm_settings_plugin_ifnet_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
@@ -283,12 +282,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -313,7 +315,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -358,12 +359,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -380,6 +385,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -407,11 +414,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -426,6 +438,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -488,6 +501,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -498,32 +512,35 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
-pkglib_LTLIBRARIES = libnm-settings-plugin-ifnet.la
-noinst_LTLIBRARIES = lib-ifnet-io.la
AM_CPPFLAGS = \
- -I$(top_srcdir)/src/wifi \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/config \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-glib \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DSBINDIR=\"$(sbindir)\"
+ $(POLKIT_CFLAGS) \
+ $(GUDEV_CFLAGS) \
+ -DSYSCONFDIR=\"$(sysconfdir)\"
+pkglib_LTLIBRARIES = libnm-settings-plugin-ifnet.la
+noinst_LTLIBRARIES = lib-ifnet-io.la
libnm_settings_plugin_ifnet_la_SOURCES = \
nm-ifnet-connection.c \
nm-ifnet-connection.h \
plugin.c \
plugin.h
-libnm_settings_plugin_ifnet_la_CPPFLAGS = \
- $(GUDEV_CFLAGS) \
- $(AM_CPPFLAGS)
-
libnm_settings_plugin_ifnet_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifnet_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
@@ -540,10 +557,11 @@ lib_ifnet_io_la_SOURCES = \
net_utils.h\
net_utils.c\
wpa_parser.h\
- wpa_parser.c
+ wpa_parser.c \
+ errors.h \
+ errors.c
lib_ifnet_io_la_LIBADD = \
- $(top_builddir)/src/wifi/libwifi-utils.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(GLIB_LIBS)
@@ -641,10 +659,11 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection_parser.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_ifnet_la-nm-ifnet-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_ifnet_la-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net_parser.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net_utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ifnet-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wpa_parser.Plo@am__quote@
.c.o:
@@ -668,20 +687,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_settings_plugin_ifnet_la-nm-ifnet-connection.lo: nm-ifnet-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifnet_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_ifnet_la-nm-ifnet-connection.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_ifnet_la-nm-ifnet-connection.Tpo -c -o libnm_settings_plugin_ifnet_la-nm-ifnet-connection.lo `test -f 'nm-ifnet-connection.c' || echo '$(srcdir)/'`nm-ifnet-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_ifnet_la-nm-ifnet-connection.Tpo $(DEPDIR)/libnm_settings_plugin_ifnet_la-nm-ifnet-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ifnet-connection.c' object='libnm_settings_plugin_ifnet_la-nm-ifnet-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifnet_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_ifnet_la-nm-ifnet-connection.lo `test -f 'nm-ifnet-connection.c' || echo '$(srcdir)/'`nm-ifnet-connection.c
-
-libnm_settings_plugin_ifnet_la-plugin.lo: plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifnet_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_ifnet_la-plugin.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_ifnet_la-plugin.Tpo -c -o libnm_settings_plugin_ifnet_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_ifnet_la-plugin.Tpo $(DEPDIR)/libnm_settings_plugin_ifnet_la-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libnm_settings_plugin_ifnet_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifnet_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_ifnet_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -970,6 +975,9 @@ uninstall-am: uninstall-pkglibLTLIBRARIES
uninstall-am uninstall-pkglibLTLIBRARIES
+@GNOME_CODE_COVERAGE_RULES@
+ -DSBINDIR=\"$(sbindir)\"
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c
index da3f913dd..85873d5f7 100644
--- a/src/settings/plugins/ifnet/connection_parser.c
+++ b/src/settings/plugins/ifnet/connection_parser.c
@@ -37,38 +37,25 @@
#include <nm-setting-wireless.h>
#include <nm-setting-8021x.h>
#include <nm-system-config-interface.h>
+#include <nm-logging.h>
#include <nm-utils.h>
#include "net_utils.h"
#include "wpa_parser.h"
#include "connection_parser.h"
#include "nm-ifnet-connection.h"
+#include "errors.h"
-static void
-update_connection_id (NMConnection *connection, const char *conn_name)
+static char *
+connection_id_from_ifnet_name (const char *conn_name)
{
- gchar *idstr = NULL;
- gchar *uuid_base = NULL;
- gchar *uuid = NULL;
- int name_len;
- NMSettingConnection *setting;
-
- name_len = strlen (conn_name);
- if ((name_len > 2) && (g_str_has_prefix (conn_name, "0x"))) {
- idstr = utils_hexstr2bin (conn_name + 2, name_len - 2);
- } else
- idstr = g_strdup_printf ("%s", conn_name);
- uuid_base = idstr;
- uuid = nm_utils_uuid_generate_from_string (uuid_base);
- setting = nm_connection_get_setting_connection (connection);
- g_object_set (setting, NM_SETTING_CONNECTION_ID, idstr,
- NM_SETTING_CONNECTION_UUID, uuid, NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "update_connection_setting_from_config_block: name:%s, id:%s, uuid: %s",
- conn_name, idstr, uuid);
+ int name_len = strlen (conn_name);
- g_free (uuid);
- g_free (idstr);
+ /* Convert a hex-encoded conn_name (only used for wifi SSIDs) to human-readable one */
+ if ((name_len > 2) && (g_str_has_prefix (conn_name, "0x")))
+ return nm_utils_hexstr2bin (conn_name + 2, name_len - 2);
+
+ return g_strdup (conn_name);
}
static gboolean eap_simple_reader (const char *eap_method,
@@ -112,6 +99,7 @@ typedef struct {
static EAPReader eap_readers[] = {
{"md5", eap_simple_reader, TRUE},
+ {"pwd", eap_simple_reader, TRUE},
{"pap", eap_simple_reader, TRUE},
{"chap", eap_simple_reader, TRUE},
{"mschap", eap_simple_reader, TRUE},
@@ -213,11 +201,9 @@ eap_tls_reader (const char *eap_method,
goto done;
}
} else {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: missing %s for EAP"
- " method '%s'; this is insecure!",
- phase2 ? "IEEE_8021X_INNER_CA_CERT" :
- "IEEE_8021X_CA_CERT", eap_method);
+ nm_log_warn (LOGD_SETTINGS, " missing %s for EAP method '%s'; this is insecure!",
+ phase2 ? "IEEE_8021X_INNER_CA_CERT" :
+ "IEEE_8021X_CA_CERT", eap_method);
}
/* Private key password */
@@ -323,9 +309,8 @@ eap_peap_reader (const char *eap_method,
NULL, error))
goto done;
} else {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, " warning: missing "
- "IEEE_8021X_CA_CERT for EAP method '%s'; this is"
- " insecure!", eap_method);
+ nm_log_warn (LOGD_SETTINGS, " missing IEEE_8021X_CA_CERT for EAP method '%s'; this is insecure!",
+ eap_method);
}
peapver = wpa_get_value (ssid, "phase1");
@@ -426,9 +411,8 @@ eap_ttls_reader (const char *eap_method,
NULL, error))
goto done;
} else {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, " warning: missing "
- "IEEE_8021X_CA_CERT for EAP method '%s'; this is"
- " insecure!", eap_method);
+ nm_log_warn (LOGD_SETTINGS, " missing IEEE_8021X_CA_CERT for EAP method '%s'; this is insecure!",
+ eap_method);
}
/* anonymous indentity for tls */
@@ -468,7 +452,7 @@ eap_ttls_reader (const char *eap_method,
} else if ((pos = strstr (*iter, "mschapv2")) != NULL
|| (pos = strstr (*iter, "md5")) != NULL) {
if (!eap_simple_reader (pos, ssid, s_8021x, TRUE, basepath, error)) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "SIMPLE ERROR");
+ nm_log_warn (LOGD_SETTINGS, "SIMPLE ERROR");
goto done;
}
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP,
@@ -508,8 +492,7 @@ guess_connection_type (const char *conn_name)
if (!ret_type)
ret_type = NM_SETTING_WIRED_SETTING_NAME;
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "guessed connection type (%s) = %s", conn_name, ret_type);
+ nm_log_info (LOGD_SETTINGS, "guessed connection type (%s) = %s", conn_name, ret_type);
return ret_type;
}
@@ -552,9 +535,7 @@ make_wired_connection_setting (NMConnection *connection,
errno = 0;
mtu = strtol (value, NULL, 10);
if (errno || mtu < 0 || mtu > 65535) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: invalid MTU '%s' for %s",
- value, conn_name);
+ nm_log_warn (LOGD_SETTINGS, " invalid MTU '%s' for %s", value, conn_name);
} else
g_object_set (s_wired, NM_SETTING_WIRED_MTU,
(guint32) mtu, NULL);
@@ -628,8 +609,7 @@ make_ip4_setting (NMConnection *connection,
g_object_unref (ip4_setting);
return;
}
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Using %s method for %s",
- method, conn_name);
+ nm_log_info (LOGD_SETTINGS, "Using %s method for %s", method, conn_name);
}else {
iblock = convert_ip4_config_block (conn_name);
if (!iblock) {
@@ -655,8 +635,7 @@ make_ip4_setting (NMConnection *connection,
NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES,
TRUE, NULL);
if (!nm_setting_ip4_config_add_address (ip4_setting, ip4_addr))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "ignoring duplicate IP4 address");
+ nm_log_warn (LOGD_SETTINGS, "ignoring duplicate IP4 address");
nm_ip4_address_unref (ip4_addr);
current_iblock = iblock;
iblock = iblock->next;
@@ -678,16 +657,14 @@ make_ip4_setting (NMConnection *connection,
g_object_set (ip4_setting,
NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME,
dhcp_hostname, NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "DHCP hostname: %s",
- dhcp_hostname);
+ nm_log_info (LOGD_SETTINGS, "DHCP hostname: %s", dhcp_hostname);
g_free (dhcp_hostname);
}
if (client_id) {
g_object_set (ip4_setting,
NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID,
client_id, NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "DHCP client id: %s",
- client_id);
+ nm_log_info (LOGD_SETTINGS, "DHCP client id: %s", client_id);
g_free (client_id);
}
}
@@ -710,10 +687,7 @@ make_ip4_setting (NMConnection *connection,
for (item = searches; *item; item++) {
if (strlen (*item)) {
if (!nm_setting_ip4_config_add_dns_search (ip4_setting, *item))
- PLUGIN_WARN
- (IFNET_PLUGIN_NAME,
- " warning: duplicate DNS domain '%s'",
- *item);
+ nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *item);
}
}
g_strfreev (searches);
@@ -750,10 +724,8 @@ make_ip4_setting (NMConnection *connection,
}
if (!nm_setting_ip4_config_add_route (ip4_setting, route))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "warning: duplicate IP4 route");
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "new IP4 route:%d\n", iblock->ip);
+ nm_log_warn (LOGD_SETTINGS, "duplicate IP4 route");
+ nm_log_info (LOGD_SETTINGS, "new IP4 route:%d\n", iblock->ip);
nm_ip4_route_unref (route);
@@ -782,11 +754,6 @@ make_ip6_setting (NMConnection *connection,
gboolean never_default = !has_default_ip6_route (conn_name);
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
- if (!s_ip6) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
- "Could not allocate IP6 setting");
- return;
- }
value = ifnet_get_data (conn_name, "enable_ipv6");
if (value && is_true (value))
@@ -810,8 +777,7 @@ make_ip6_setting (NMConnection *connection,
else
// doesn't have "dhcp6" && has at least one ipv6 address
method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "IPv6 for %s enabled, using %s",
- conn_name, method);
+ nm_log_info (LOGD_SETTINGS, "IPv6 for %s enabled, using %s", conn_name, method);
g_object_set (s_ip6,
NM_SETTING_IP6_CONFIG_METHOD, method,
@@ -837,13 +803,10 @@ make_ip6_setting (NMConnection *connection,
nm_ip6_address_set_address (ip6_addr, iblock->ip);
nm_ip6_address_set_prefix (ip6_addr, iblock->prefix);
if (nm_setting_ip6_config_add_address (s_ip6, ip6_addr)) {
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "ipv6 addresses count: %d",
- nm_setting_ip6_config_get_num_addresses
- (s_ip6));
+ nm_log_info (LOGD_SETTINGS, "ipv6 addresses count: %d",
+ nm_setting_ip6_config_get_num_addresses (s_ip6));
} else {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "ignoring duplicate IP4 address");
+ nm_log_warn (LOGD_SETTINGS, "ignoring duplicate IP4 address");
}
nm_ip6_address_unref (ip6_addr);
current_iblock = iblock;
@@ -893,10 +856,10 @@ make_ip6_setting (NMConnection *connection,
nm_ip6_route_set_metric (route, (guint32) 1);
}
- if (!nm_setting_ip6_config_add_route (s_ip6, route))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: duplicate IP6 route");
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, " info: new IP6 route");
+ if (nm_setting_ip6_config_add_route (s_ip6, route))
+ nm_log_info (LOGD_SETTINGS, " new IP6 route");
+ else
+ nm_log_warn (LOGD_SETTINGS, " duplicate IP6 route");
nm_ip6_route_unref (route);
current_iblock = iblock;
@@ -910,8 +873,7 @@ done:
error:
g_object_unref (s_ip6);
- PLUGIN_WARN (IFNET_PLUGIN_NAME, " warning: Ignore IPv6 for %s",
- conn_name);
+ nm_log_warn (LOGD_SETTINGS, " Ignore IPv6 for %s", conn_name);
return;
}
@@ -932,8 +894,7 @@ make_wireless_connection_setting (const char *conn_name,
"ppp") != 0, NULL);
type = ifnet_get_data (conn_name, "type");
if (strcmp (type, "ppp") == 0) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "PPP over WIFI is not supported yet");
+ nm_log_warn (LOGD_SETTINGS, "PPP over WIFI is not supported yet");
return NULL;
}
@@ -978,7 +939,7 @@ make_wireless_connection_setting (const char *conn_name,
goto error;
}
- tmp = utils_hexstr2bin (p, value_len - 2);
+ tmp = nm_utils_hexstr2bin (p, value_len - 2);
ssid_len = (value_len - 2) / 2;
converted = g_malloc0 (ssid_len + 1);
memcpy (converted, tmp, ssid_len);
@@ -1013,7 +974,7 @@ make_wireless_connection_setting (const char *conn_name,
g_object_set (wireless_setting, NM_SETTING_WIRELESS_MODE, mode,
NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Using mode: %s", mode);
+ nm_log_info (LOGD_SETTINGS, "Using mode: %s", mode);
}
/* BSSID setting */
@@ -1042,17 +1003,14 @@ make_wireless_connection_setting (const char *conn_name,
errno = 0;
mtu = strtol (value, NULL, 10);
if (errno || mtu < 0 || mtu > 50000) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: invalid MTU '%s' for %s",
- value, conn_name);
+ nm_log_warn (LOGD_SETTINGS, " invalid MTU '%s' for %s", value, conn_name);
} else
g_object_set (wireless_setting, NM_SETTING_WIRELESS_MTU,
(guint32) mtu, NULL);
}
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "wireless_setting added for %s",
- conn_name);
+ nm_log_info (LOGD_SETTINGS, "wireless_setting added for %s", conn_name);
return NM_SETTING (wireless_setting);
error:
if (wireless_setting)
@@ -1146,7 +1104,7 @@ add_one_wep_key (const char *ssid,
}
- converted = utils_bin2hexstr (tmp, strlen (tmp), strlen (tmp) * 2);
+ converted = nm_utils_bin2hexstr (tmp, strlen (tmp), strlen (tmp) * 2);
g_free (tmp);
} else {
g_set_error (error, ifnet_plugin_error_quark (), 0,
@@ -1201,8 +1159,7 @@ make_wep_setting (const char *ssid, GError **error)
g_object_set (s_wireless_sec,
NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX,
default_key_idx, NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "Default key index: %d", default_key_idx);
+ nm_log_info (LOGD_SETTINGS, "Default key index: %d", default_key_idx);
} else {
g_set_error (error, ifnet_plugin_error_quark (), 0,
"Invalid default WEP key '%s'", value);
@@ -1240,14 +1197,12 @@ make_wep_setting (const char *ssid, GError **error)
g_object_set (s_wireless_sec,
NM_SETTING_WIRELESS_SECURITY_AUTH_ALG,
"open", NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "WEP: Use open system authentication");
+ nm_log_info (LOGD_SETTINGS, "WEP: Use open system authentication");
} else if (strcmp (auth_alg, "SHARED") == 0) {
g_object_set (s_wireless_sec,
NM_SETTING_WIRELESS_SECURITY_AUTH_ALG,
"shared", NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "WEP: Use shared system authentication");
+ nm_log_info (LOGD_SETTINGS, "WEP: Use shared system authentication");
} else {
g_set_error (error, ifnet_plugin_error_quark (), 0,
"Invalid WEP authentication algorithm '%s'",
@@ -1292,7 +1247,7 @@ parse_wpa_psk (const char *psk, GError **error)
return NULL;
}
- /* Passphrase must be between 10 and 66 characters in length becuase WPA
+ /* Passphrase must be between 10 and 66 characters in length because WPA
* hex keys are exactly 64 characters (no quoting), and WPA passphrases
* are between 8 and 63 characters (inclusive), plus optional quoting if
* the passphrase contains spaces.
@@ -1359,14 +1314,12 @@ fill_wpa_ciphers (const char *ssid,
*/
if (adhoc) {
if (group && (i > 0)) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: ignoring group cipher '%s' (only one group cipher allowed in Ad-Hoc mode)",
- *iter);
+ nm_log_warn (LOGD_SETTINGS, " ignoring group cipher '%s' (only one group cipher allowed in Ad-Hoc mode)",
+ *iter);
continue;
} else if (!group) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: ignoring pairwise cipher '%s' (pairwise not used in Ad-Hoc mode)",
- *iter);
+ nm_log_warn (LOGD_SETTINGS, " ignoring pairwise cipher '%s' (pairwise not used in Ad-Hoc mode)",
+ *iter);
continue;
}
}
@@ -1390,10 +1343,9 @@ fill_wpa_ciphers (const char *ssid,
else if (group && !strcmp (*iter, "WEP40"))
nm_setting_wireless_security_add_group (wsec, "wep40");
else {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: ignoring invalid %s cipher '%s'",
- group ? "CIPHER_GROUP" : "CIPHER_PAIRWISE",
- *iter);
+ nm_log_warn (LOGD_SETTINGS, " ignoring invalid %s cipher '%s'",
+ group ? "CIPHER_GROUP" : "CIPHER_PAIRWISE",
+ *iter);
}
}
@@ -1440,10 +1392,8 @@ fill_8021x (const char *ssid,
* used with TTLS or PEAP or whatever.
*/
if (wifi && eap->wifi_phase2_only) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: ignored invalid "
- "IEEE_8021X_EAP_METHOD '%s'; not allowed for wifi.",
- lower);
+ nm_log_warn (LOGD_SETTINGS, " ignored invalid IEEE_8021X_EAP_METHOD '%s'; not allowed for wifi.",
+ lower);
goto next;
}
@@ -1460,9 +1410,7 @@ fill_8021x (const char *ssid,
}
if (!found) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: ignored unknown"
- "IEEE_8021X_EAP_METHOD '%s'.", lower);
+ nm_log_warn (LOGD_SETTINGS, " ignored unknown IEEE_8021X_EAP_METHOD '%s'.", lower);
}
g_free (lower);
}
@@ -1586,8 +1534,7 @@ make_wireless_security_setting (const char *conn_name,
"ppp") != 0, NULL);
if (!wpa_get_value (conn_name, "ssid"))
return NULL;
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "updating wireless security settings (%s).", conn_name);
+ nm_log_info (LOGD_SETTINGS, "updating wireless security settings (%s).", conn_name);
ssid = conn_name;
value = wpa_get_value (ssid, "mode");
@@ -1668,11 +1615,10 @@ ifnet_update_connection_from_config_block (const char *conn_name,
NMSettingWirelessSecurity *wsec = NULL;
gboolean auto_conn = TRUE;
const char *value = NULL;
+ gchar *id, *uuid;
gboolean success = FALSE;
connection = nm_connection_new ();
- if (!connection)
- return NULL;
setting = nm_connection_get_setting_connection (connection);
if (!setting) {
setting = NM_SETTING_CONNECTION (nm_setting_connection_new ());
@@ -1684,18 +1630,33 @@ ifnet_update_connection_from_config_block (const char *conn_name,
value = ifnet_get_data (conn_name, "auto");
if (value && !strcmp (value, "false"))
auto_conn = FALSE;
- update_connection_id (connection, conn_name);
- g_object_set (setting, NM_SETTING_CONNECTION_TYPE, type,
- NM_SETTING_CONNECTION_READ_ONLY, FALSE,
- NM_SETTING_CONNECTION_AUTOCONNECT, auto_conn, NULL);
+
+ /* Try to read UUID from the ifnet block, otherwise generate UUID from
+ * the connection ID.
+ */
+ id = connection_id_from_ifnet_name (conn_name);
+ uuid = g_strdup (ifnet_get_data (conn_name, "uuid"));
+ if (!uuid)
+ uuid = nm_utils_uuid_generate_from_string (id);
+
+ g_object_set (setting,
+ NM_SETTING_CONNECTION_TYPE, type,
+ NM_SETTING_CONNECTION_ID, id,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, conn_name,
+ NM_SETTING_CONNECTION_READ_ONLY, FALSE,
+ NM_SETTING_CONNECTION_AUTOCONNECT, auto_conn,
+ NULL);
+ nm_log_info (LOGD_SETTINGS, "name:%s, id:%s, uuid: %s", conn_name, id, uuid);
+ g_free (id);
+ g_free (uuid);
if (!strcmp (NM_SETTING_WIRED_SETTING_NAME, type)
|| !strcmp (NM_SETTING_PPPOE_SETTING_NAME, type)) {
/* wired setting */
make_wired_connection_setting (connection, conn_name, error);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto error;
}
/* pppoe setting */
@@ -1703,8 +1664,7 @@ ifnet_update_connection_from_config_block (const char *conn_name,
make_pppoe_connection_setting (connection, conn_name,
error);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto error;
}
} else if (!strcmp (NM_SETTING_WIRELESS_SETTING_NAME, type)) {
@@ -1717,28 +1677,20 @@ ifnet_update_connection_from_config_block (const char *conn_name,
nm_connection_add_setting (connection, wireless_setting);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto error;
}
/* wireless security setting */
wsec = make_wireless_security_setting (conn_name, basepath, &s_8021x, error);
if (wsec) {
- nm_connection_add_setting (connection,
- NM_SETTING (wsec));
+ nm_connection_add_setting (connection, NM_SETTING (wsec));
if (s_8021x)
- nm_connection_add_setting (connection,
- NM_SETTING
- (s_8021x));
- g_object_set (wireless_setting, NM_SETTING_WIRELESS_SEC,
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
- NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_8021x));
}
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto error;
}
@@ -1748,21 +1700,22 @@ ifnet_update_connection_from_config_block (const char *conn_name,
/* IPv4 setting */
make_ip4_setting (connection, conn_name, error);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto error;
}
/* IPv6 setting */
make_ip6_setting (connection, conn_name, error);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto error;
}
success = nm_connection_verify (connection, error);
if (error && *error)
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Connection verified %s:%d", conn_name, success);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
+ else
+ nm_log_info (LOGD_SETTINGS, "Connection verified %s:%d", conn_name, success);
if (!success)
goto error;
return connection;
@@ -1899,10 +1852,8 @@ write_object (NMSetting8021x *s_8021x,
}
/* does not support writing encryption data now */
- if (blob) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- " warning: Currently we do not support certs writing.");
- }
+ if (blob)
+ nm_log_warn (LOGD_SETTINGS, " Currently we do not support cert writing.");
return TRUE;
}
@@ -2031,8 +1982,7 @@ write_8021x_setting (NMConnection *connection,
return TRUE;
}
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding 8021x setting for %s",
- conn_name);
+ nm_log_info (LOGD_SETTINGS, "Adding 8021x setting for %s", conn_name);
/* If wired, write KEY_MGMT */
if (wired)
@@ -2149,7 +2099,7 @@ write_wireless_security_setting (NMConnection * connection,
wpa_set_data (conn_name, "key_mgmt", "WPA-EAP");
wpa = TRUE;
} else
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Unknown key_mgmt: %s", key_mgmt);
+ nm_log_warn (LOGD_SETTINGS, "Unknown key_mgmt: %s", key_mgmt);
if (auth_alg) {
if (!strcmp (auth_alg, "shared"))
@@ -2342,10 +2292,7 @@ write_wireless_setting (NMConnection *connection,
ifnet_set_data (ssid_str, "mac", NULL);
mac = nm_setting_wireless_get_mac_address (s_wireless);
if (mac) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- mac->data[0], mac->data[1], mac->data[2],
- mac->data[3], mac->data[4],
- mac->data[5]);
+ tmp = nm_utils_hwaddr_ntoa_len (mac->data, mac->len);
ifnet_set_data (ssid_str, "mac", tmp);
g_free (tmp);
}
@@ -2366,24 +2313,20 @@ write_wireless_setting (NMConnection *connection,
wpa_set_data (ssid_str, "mode", "1");
adhoc = TRUE;
} else {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Invalid mode '%s' in '%s' setting",
- mode, NM_SETTING_WIRELESS_SETTING_NAME);
+ nm_log_warn (LOGD_SETTINGS, "Invalid mode '%s' in '%s' setting",
+ mode, NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
wpa_set_data (ssid_str, "bssid", NULL);
bssid = nm_setting_wireless_get_bssid (s_wireless);
if (bssid) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- bssid->data[0], bssid->data[1],
- bssid->data[2], bssid->data[3],
- bssid->data[4], bssid->data[5]);
+ tmp = nm_utils_hwaddr_ntoa_len (bssid->data, bssid->len);
wpa_set_data (ssid_str, "bssid", tmp);
g_free (tmp);
}
- if (nm_setting_wireless_get_security (s_wireless)) {
+ if (nm_connection_get_setting_wireless_security (connection)) {
if (!write_wireless_security_setting
(connection, ssid_str, adhoc, no_8021x, error))
return FALSE;
@@ -2417,10 +2360,7 @@ write_wired_setting (NMConnection *connection,
ifnet_set_data (conn_name, "mac", NULL);
mac = nm_setting_wired_get_mac_address (s_wired);
if (mac) {
- tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
- mac->data[0], mac->data[1], mac->data[2],
- mac->data[3], mac->data[4],
- mac->data[5]);
+ tmp = nm_utils_hwaddr_ntoa_len (mac->data, mac->len);
ifnet_set_data (conn_name, "mac", tmp);
g_free (tmp);
}
@@ -2438,14 +2378,6 @@ write_wired_setting (NMConnection *connection,
return TRUE;
}
-static void
-write_connection_setting (NMSettingConnection *s_con, const char *conn_name)
-{
- ifnet_set_data (conn_name, "auto",
- nm_setting_connection_get_autoconnect (s_con) ? "true" :
- "false");
-}
-
static gboolean
write_ip4_setting (NMConnection *connection, const char *conn_name, GError **error)
{
@@ -2819,16 +2751,11 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
gboolean wired = FALSE, pppoe = TRUE;
const char *new_name = NULL;
- s_con =
- NM_SETTING_CONNECTION (nm_connection_get_setting
- (connection, NM_TYPE_SETTING_CONNECTION));
- if (!s_con) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
- "Missing '%s' setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
+ if (!ifnet_can_write_connection (connection, error))
return FALSE;
- }
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
type = nm_setting_connection_get_connection_type (s_con);
if (!type) {
@@ -2887,11 +2814,11 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
}
/* Connection Setting */
- write_connection_setting (s_con, conn_name);
-
- /* connection id will be displayed in nm-applet */
- update_connection_id (connection, conn_name);
+ ifnet_set_data (conn_name, "auto",
+ nm_setting_connection_get_autoconnect (s_con) ? "true" : "false");
+ ifnet_set_data (conn_name, "uuid", nm_connection_get_uuid (connection));
+ /* Write changes to disk */
success = ifnet_flush_to_file (config_file, out_backup);
if (success)
wpa_flush_to_file (wpa_file);
@@ -2923,6 +2850,66 @@ ifnet_delete_connection_in_parsers (const char *conn_name,
return result;
}
+static void
+check_unsupported_secrets (NMSetting *setting,
+ const char *key,
+ const GValue *value,
+ GParamFlags flags,
+ gpointer user_data)
+{
+ gboolean *unsupported_secret = user_data;
+
+ if (flags & NM_SETTING_PARAM_SECRET) {
+ NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
+ if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
+ *unsupported_secret = TRUE;
+ }
+}
+
+gboolean
+ifnet_can_write_connection (NMConnection *connection, GError **error)
+{
+ NMSettingConnection *s_con;
+ gboolean has_unsupported_secrets = FALSE;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ /* If the connection is not available for all users, ignore
+ * it as this plugin only deals with System Connections */
+ if (nm_setting_connection_get_num_permissions (s_con)) {
+ g_set_error_literal (error, IFNET_PLUGIN_ERROR, 0,
+ "The ifnet plugin does not support non-system-wide connections.");
+ return FALSE;
+ }
+
+ /* If the connection has flagged secrets, ignore
+ * it as this plugin does not deal with user agent service */
+ nm_connection_for_each_setting_value (connection,
+ check_unsupported_secrets,
+ &has_unsupported_secrets);
+ if (has_unsupported_secrets) {
+ g_set_error_literal (error, IFNET_PLUGIN_ERROR, 0,
+ "The ifnet plugin only supports persistent system secrets.");
+ return FALSE;
+ }
+
+ /* Only support wired, wifi, and PPPoE */
+ if ( !nm_connection_is_type (connection, NM_SETTING_WIRED_SETTING_NAME)
+ && !nm_connection_is_type (connection, NM_SETTING_WIRELESS_SETTING_NAME)
+ && !nm_connection_is_type (connection, NM_SETTING_PPPOE_SETTING_NAME)) {
+ g_set_error (error, IFNET_PLUGIN_ERROR, 0,
+ "The ifnet plugin cannot write the connection '%s' (type '%s')",
+ nm_connection_get_id (connection),
+ nm_setting_connection_get_connection_type (s_con));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
/* get the available wired name(eth*). */
static gchar *
get_wired_name ()
@@ -3003,10 +2990,11 @@ get_wireless_name (NMConnection * connection)
return result;
}
-char *
+gboolean
ifnet_add_new_connection (NMConnection *connection,
const char *config_file,
const char *wpa_file,
+ gchar **out_new_name,
gchar **out_backup,
GError **error)
{
@@ -3015,12 +3003,15 @@ ifnet_add_new_connection (NMConnection *connection,
const char *type;
gchar *new_type, *new_name = NULL;
+ if (!ifnet_can_write_connection (connection, error))
+ return FALSE;
+
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
type = nm_setting_connection_get_connection_type (s_con);
g_assert (type);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding %s connection", type);
+ nm_log_info (LOGD_SETTINGS, "Adding %s connection", type);
/* get name and type
* Wireless type: wireless
@@ -3055,11 +3046,14 @@ ifnet_add_new_connection (NMConnection *connection,
error);
}
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Added new connection: %s, result: %s",
- new_name, success ? "success" : "fail");
+ nm_log_info (LOGD_SETTINGS, "Added new connection: %s, result: %s",
+ new_name, success ? "success" : "fail");
out:
- if (!success)
+ if (!success || !out_new_name)
g_free (new_name);
- return success ? new_name : NULL;
+ else if (out_new_name)
+ *out_new_name = new_name;
+ return success;
}
+
diff --git a/src/settings/plugins/ifnet/connection_parser.h b/src/settings/plugins/ifnet/connection_parser.h
index e8596a64e..74213669d 100644
--- a/src/settings/plugins/ifnet/connection_parser.h
+++ b/src/settings/plugins/ifnet/connection_parser.h
@@ -24,6 +24,8 @@
#include <nm-connection.h>
#include "net_parser.h"
+gboolean ifnet_can_write_connection (NMConnection *connection, GError **error);
+
NMConnection *ifnet_update_connection_from_config_block (const char *conn_name,
const char *basepath,
GError **error);
@@ -42,9 +44,10 @@ gboolean ifnet_delete_connection_in_parsers (const char *conn_name,
const char *wpa_file,
gchar **out_backup);
-char * ifnet_add_new_connection (NMConnection *connection,
- const char *config_file,
- const char *wpa_file,
- gchar **out_backup,
- GError ** error);
+gboolean ifnet_add_new_connection (NMConnection *connection,
+ const char *config_file,
+ const char *wpa_file,
+ gchar **out_new_name,
+ gchar **out_backup,
+ GError ** error);
#endif
diff --git a/src/nm-policy-hosts.h b/src/settings/plugins/ifnet/errors.c
index 9f4bf9a9a..295db18ba 100644
--- a/src/nm-policy-hosts.h
+++ b/src/settings/plugins/ifnet/errors.c
@@ -1,5 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
+/* NetworkManager system settings service
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,18 +15,21 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2004 - 2010 Red Hat, Inc.
+ * (C) Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_POLICY_HOSTS_H
-#define NM_POLICT_HOSTS_H
-
#include <glib.h>
+#include "errors.h"
+
+GQuark
+ifnet_plugin_error_quark (void)
+{
+ static GQuark error_quark = 0;
-void nm_policy_hosts_clean_etc_hosts (void);
+ if (G_UNLIKELY (error_quark == 0))
+ error_quark = g_quark_from_static_string ("ifnet-plugin-error-quark");
-/* Only for testcases; don't use outside of nm-policy-hosts.c */
-GString *nm_policy_get_etc_hosts (const char *contents, gsize contents_len);
+ return error_quark;
+}
-#endif /* NM_POLICY_HOSTS_H */
diff --git a/src/settings/plugins/ifnet/errors.h b/src/settings/plugins/ifnet/errors.h
new file mode 100644
index 000000000..52517d007
--- /dev/null
+++ b/src/settings/plugins/ifnet/errors.h
@@ -0,0 +1,30 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef __ERRORS_H__
+#define __ERRORS_H__
+
+#include <glib.h>
+
+#define IFNET_PLUGIN_ERROR (ifnet_plugin_error_quark ())
+GQuark ifnet_plugin_error_quark (void);
+
+#endif /* __ERRORS_H__ */
+
diff --git a/src/settings/plugins/ifnet/net_parser.c b/src/settings/plugins/ifnet/net_parser.c
index f37366afe..95add14fc 100644
--- a/src/settings/plugins/ifnet/net_parser.c
+++ b/src/settings/plugins/ifnet/net_parser.c
@@ -20,15 +20,15 @@
*/
#include <string.h>
-#include <nm-system-config-interface.h>
#include <stdio.h>
-
#include <sys/ioctl.h>
-#include <net/if.h>
#include <unistd.h>
+#include <nm-system-config-interface.h>
+#include <nm-logging.h>
+
#include "plugin.h"
-#include "wifi-utils.h"
+#include "nm-platform.h"
#include "net_parser.h"
#include "net_utils.h"
@@ -71,7 +71,7 @@ ifnet_add_network (const char *name, const char *type)
if (ifnet_has_network (name))
return TRUE;
if (add_new_connection_config (type, name)) {
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding network for %s", name);
+ nm_log_info (LOGD_SETTINGS, "Adding network for %s", name);
net_parser_data_changed = TRUE;
return TRUE;
}
@@ -129,24 +129,6 @@ is_global_setting (char *key)
return 0;
}
-/* Find out whether the 'iface' is an interface */
-static gboolean
-name_is_interface (const char *iface)
-{
- int fd;
- struct ifreq ifr;
- gboolean is_iface = FALSE;
-
- fd = socket (PF_INET, SOCK_DGRAM, 0);
- if (fd >= 0) {
- strncpy (ifr.ifr_name, iface, IFNAMSIZ);
- if (ioctl (fd, SIOCGIFHWADDR, &ifr) == 0)
- is_iface = TRUE;
- close (fd);
- }
- return is_iface;
-}
-
/* Parse a complete line */
/* Connection type is determined here */
static void
@@ -160,8 +142,7 @@ init_block_by_line (gchar * buf)
key_value = g_strsplit (buf, "=", 2);
if (g_strv_length (key_value) != 2) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle this line: %s\n",
- buf);
+ nm_log_warn (LOGD_SETTINGS, "Can't handle this line: %s\n", buf);
g_strfreev (key_value);
return;
}
@@ -171,7 +152,7 @@ init_block_by_line (gchar * buf)
data = g_strdup (key_value[1]);
tmp = strip_string (data, '"');
strip_string (tmp, '\'');
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "global:%s-%s\n", key_value[0], tmp);
+ nm_log_info (LOGD_SETTINGS, "global:%s-%s\n", key_value[0], tmp);
g_hash_table_insert (global_settings_table, g_strdup (key_value[0]), g_strdup (tmp));
g_strfreev (key_value);
g_free (data);
@@ -190,13 +171,16 @@ init_block_by_line (gchar * buf)
else if (ignore_connection_name (pos)) {
/* ignored connection */
conn = add_new_connection_config ("ignore", pos);
- } else
- if (name_is_interface (pos) && !wifi_utils_is_wifi (pos, NULL))
+ } else {
+ int ifindex = nm_platform_link_get_ifindex (pos);
+
+ if (ifindex && nm_platform_link_get_type (ifindex) != NM_LINK_TYPE_WIFI)
/* wired connection */
conn = add_new_connection_config ("wired", pos);
else
/* wireless connection */
conn = add_new_connection_config ("wireless", pos);
+ }
}
data = g_strdup (key_value[1]);
tmp = strip_string (data, '"');
@@ -223,34 +207,6 @@ destroy_connection_config (GHashTable * conn)
g_hash_table_destroy (conn);
}
-/* Read settings from NetworkManager's config file */
-const char *
-ifnet_get_global_setting (const char *group, const char *key)
-{
- GError *error = NULL;
- GKeyFile *keyfile = g_key_file_new ();
- gchar *result = NULL;
- const char *conf_file;
-
- /* Get confing file name from plugin. */
- conf_file = ifnet_plugin_get_conf_file ();
-
- if (!g_key_file_load_from_file (keyfile,
- conf_file,
- G_KEY_FILE_NONE, &error)) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "loading system config file (%s) caused error: (%d) %s",
- conf_file,
- error ? error->code : -1, error
- && error->message ? error->message : "(unknown)");
- } else {
- result = g_key_file_get_string (keyfile, group, key, &error);
- }
- g_key_file_free (keyfile);
-
- return result;
-}
-
static void
strip_function (GIOChannel * channel, gchar * line)
{
@@ -308,8 +264,7 @@ is_function (gchar * line)
for (i = 0; func_names[i]; i++) {
if (g_str_has_prefix (line, func_names[i])) {
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "Ignoring function: %s", func_names[i]);
+ nm_log_info (LOGD_SETTINGS, "Ignoring function: %s", func_names[i]);
return TRUE;
}
}
@@ -353,8 +308,7 @@ ifnet_init (gchar * config_file)
if (g_file_test (config_file, G_FILE_TEST_IS_REGULAR))
channel = g_io_channel_new_file (config_file, "r", NULL);
if (channel == NULL) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Error: Can't open %s\n", config_file);
+ nm_log_warn (LOGD_SETTINGS, "Can't open %s", config_file);
return FALSE;
}
@@ -483,7 +437,7 @@ ifnet_set_data (const char *conn_name, const char *key, const char *value)
gchar * stripped = NULL;
if (!conn) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "%s does not exsit!", conn_name);
+ nm_log_warn (LOGD_SETTINGS, "%s does not exist!", conn_name);
return;
}
if (value){
@@ -611,13 +565,12 @@ ifnet_flush_to_file (const char *config_file, gchar **out_backup)
channel = g_io_channel_new_file (config_file, "w", NULL);
if (!channel) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Can't open file %s for writing", config_file);
+ nm_log_warn (LOGD_SETTINGS, "Can't open file %s for writing", config_file);
g_free (backup);
return FALSE;
}
g_hash_table_iter_init (&iter, global_settings_table);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Writing to %s", config_file);
+ nm_log_info (LOGD_SETTINGS, "Writing to %s", config_file);
g_io_channel_write_chars (channel,
"#Generated by NetworkManager\n"
"###### Global Configuration ######\n",
@@ -633,8 +586,7 @@ ifnet_flush_to_file (const char *config_file, gchar **out_backup)
g_free (out_line);
}
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto done;
}
@@ -680,8 +632,7 @@ ifnet_flush_to_file (const char *config_file, gchar **out_backup)
}
}
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto done;
}
@@ -702,16 +653,14 @@ ifnet_flush_to_file (const char *config_file, gchar **out_backup)
g_free (out_line);
}
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto done;
}
}
g_io_channel_flush (channel, error);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Found error: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto done;
}
result = TRUE;
@@ -734,7 +683,7 @@ ifnet_delete_network (const char *conn_name)
GHashTable *network = NULL;
g_return_val_if_fail (conn_table != NULL && conn_name != NULL, FALSE);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Deleting network for %s", conn_name);
+ nm_log_info (LOGD_SETTINGS, "Deleting network for %s", conn_name);
network = g_hash_table_lookup (conn_table, conn_name);
if (!network)
return FALSE;
diff --git a/src/settings/plugins/ifnet/net_parser.h b/src/settings/plugins/ifnet/net_parser.h
index 47086c762..005207adf 100644
--- a/src/settings/plugins/ifnet/net_parser.h
+++ b/src/settings/plugins/ifnet/net_parser.h
@@ -34,7 +34,6 @@ void ifnet_destroy (void);
GList *ifnet_get_connection_names (void);
const char *ifnet_get_data (const char *conn_name, const char *key);
const char *ifnet_get_global_data (const char *key);
-const char *ifnet_get_global_setting (const char *group, const char *key);
gboolean ifnet_has_network (const char *conn_name);
/* Writer functions */
diff --git a/src/settings/plugins/ifnet/net_utils.c b/src/settings/plugins/ifnet/net_utils.c
index 17eb16771..86ab8537d 100644
--- a/src/settings/plugins/ifnet/net_utils.c
+++ b/src/settings/plugins/ifnet/net_utils.c
@@ -25,6 +25,8 @@
#include <errno.h>
#include <nm-utils.h>
#include <nm-system-config-interface.h>
+#include <nm-logging.h>
+#include <nm-config.h>
#include <gio/gio.h>
#include "net_utils.h"
#include "wpa_parser.h"
@@ -94,99 +96,6 @@ is_true (const char *str)
return FALSE;
}
-static int
-hex2num (char c)
-{
- if (c >= '0' && c <= '9')
- return c - '0';
- if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- return -1;
-}
-
-static int
-hex2byte (const char *hex)
-{
- int a, b;
-
- a = hex2num (*hex++);
- if (a < 0)
- return -1;
- b = hex2num (*hex++);
- if (b < 0)
- return -1;
- return (a << 4) | b;
-}
-
-/* free return value by caller */
-gchar *
-utils_hexstr2bin (const gchar * hex, size_t len)
-{
- size_t i;
- int a;
- const gchar *ipos = hex;
- gchar *buf = NULL;
- gchar *opos;
-
- /* Length must be a multiple of 2 */
- if ((len % 2) != 0)
- return NULL;
-
- opos = buf = g_malloc0 ((len / 2) + 1);
- for (i = 0; i < len; i += 2) {
- a = hex2byte (ipos);
- if (a < 0) {
- g_free (buf);
- return NULL;
- }
- *opos++ = a;
- ipos += 2;
- }
- return buf;
-}
-
-/* free return value by caller */
-gchar *
-utils_bin2hexstr (const gchar * bytes, int len, int final_len)
-{
- static gchar hex_digits[] = "0123456789abcdef";
- gchar *result;
- int i;
- gsize buflen = (len * 2) + 1;
-
- g_return_val_if_fail (bytes != NULL, NULL);
- g_return_val_if_fail (len > 0, NULL);
- g_return_val_if_fail (len < 4096, NULL); /* Arbitrary limit */
- if (final_len > -1)
- g_return_val_if_fail (final_len < buflen, NULL);
-
- result = g_malloc0 (buflen);
- for (i = 0; i < len; i++) {
- result[2 * i] = hex_digits[(bytes[i] >> 4) & 0xf];
- result[2 * i + 1] = hex_digits[bytes[i] & 0xf];
- }
- /* Cut converted key off at the correct length for this cipher type */
- if (final_len > -1)
- result[final_len] = '\0';
- else
- result[buflen - 1] = '\0';
-
- return result;
-}
-
-GQuark
-ifnet_plugin_error_quark (void)
-{
- static GQuark error_quark = 0;
-
- if (G_UNLIKELY (error_quark == 0))
- error_quark =
- g_quark_from_static_string ("ifnet-plugin-error-quark");
- return error_quark;
-}
-
static char *
find_default_gateway_str (char *str)
{
@@ -445,7 +354,7 @@ static ip_block *
create_ip4_block (gchar * ip)
{
ip_block *iblock = g_slice_new0 (ip_block);
- struct in_addr tmp_ip4_addr;
+ guint32 tmp_ip4_addr;
int i;
guint length;
gchar **ip_mask;
@@ -458,7 +367,7 @@ create_ip4_block (gchar * ip)
length = g_strv_length (ip_mask);
if (!inet_pton (AF_INET, ip_mask[0], &tmp_ip4_addr))
goto error;
- iblock->ip = tmp_ip4_addr.s_addr;
+ iblock->ip = tmp_ip4_addr;
prefix = ip_mask[1];
i = 0;
while (i < length && g_ascii_isdigit (prefix[i]))
@@ -472,7 +381,7 @@ create_ip4_block (gchar * ip)
length = g_strv_length (ip_mask);
if (!inet_pton (AF_INET, ip_mask[0], &tmp_ip4_addr))
goto error;
- iblock->ip = tmp_ip4_addr.s_addr;
+ iblock->ip = tmp_ip4_addr;
i = 0;
while (i < length && !strstr (ip_mask[++i], "netmask")) ;
while (i < length && ip_mask[++i][0] == '\0') ;
@@ -480,21 +389,18 @@ create_ip4_block (gchar * ip)
goto error;
if (!inet_pton (AF_INET, ip_mask[i], &tmp_ip4_addr))
goto error;
- iblock->netmask = tmp_ip4_addr.s_addr;
+ iblock->netmask = tmp_ip4_addr;
} else {
g_slice_free (ip_block, iblock);
if (!is_ip6_address (ip) && !strstr (ip, "dhcp"))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Can't handle ipv4 address: %s, missing netmask or prefix",
- ip);
+ nm_log_warn (LOGD_SETTINGS, "Can't handle ipv4 address: %s, missing netmask or prefix", ip);
return NULL;
}
g_strfreev (ip_mask);
return iblock;
error:
if (!is_ip6_address (ip))
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle IPv4 address: %s",
- ip);
+ nm_log_warn (LOGD_SETTINGS, "Can't handle IPv4 address: %s", ip);
g_strfreev (ip_mask);
g_slice_free (ip_block, iblock);
return NULL;
@@ -528,8 +434,7 @@ create_ip6_block (gchar * ip)
return iblock;
error:
if (!is_ip4_address (ip))
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle IPv6 address: %s",
- ip);
+ nm_log_warn (LOGD_SETTINGS, "Can't handle IPv6 address: %s", ip);
g_slice_free (ip6_block, iblock);
g_slice_free (struct in6_addr, tmp_ip6_addr);
@@ -541,14 +446,13 @@ static guint32
get_ip4_gateway (gchar * gateway)
{
gchar *tmp, *split;
- struct in_addr tmp_ip4_addr;
+ guint32 tmp_ip4_addr;
if (!gateway)
return 0;
tmp = find_gateway_str (gateway);
if (!tmp) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Couldn't obtain gateway in \"%s\"", gateway);
+ nm_log_warn (LOGD_SETTINGS, "Couldn't obtain gateway in \"%s\"", gateway);
return 0;
}
tmp = g_strdup (tmp);
@@ -562,11 +466,10 @@ get_ip4_gateway (gchar * gateway)
if (!inet_pton (AF_INET, tmp, &tmp_ip4_addr))
goto error;
g_free (tmp);
- return tmp_ip4_addr.s_addr;
+ return tmp_ip4_addr;
error:
if (!is_ip6_address (tmp))
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle IPv4 gateway: %s",
- tmp);
+ nm_log_warn (LOGD_SETTINGS, "Can't handle IPv4 gateway: %s", tmp);
g_free (tmp);
return 0;
}
@@ -581,8 +484,7 @@ get_ip6_next_hop (gchar * next_hop)
return 0;
tmp = find_gateway_str (next_hop);
if (!tmp) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Couldn't obtain next_hop in \"%s\"", next_hop);
+ nm_log_warn (LOGD_SETTINGS, "Couldn't obtain next_hop in \"%s\"", next_hop);
return 0;
}
tmp = g_strdup (tmp);
@@ -595,8 +497,7 @@ get_ip6_next_hop (gchar * next_hop)
return tmp_ip6_addr;
error:
if (!is_ip4_address (tmp))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Can't handle IPv6 next_hop: %s", tmp);
+ nm_log_warn (LOGD_SETTINGS, "Can't handle IPv6 next_hop: %s", tmp);
g_free (tmp);
g_slice_free (struct in6_addr, tmp_ip6_addr);
@@ -780,7 +681,7 @@ set_ip4_dns_servers (NMSettingIP4Config *s_ip4, const char *conn_name)
const char *dns_servers;
gchar **server_list, *stripped;
guint length, i;
- struct in_addr tmp_ip4_addr;
+ guint32 tmp_ip4_addr;
guint32 new_dns;
dns_servers = ifnet_get_data (conn_name, "dns_servers");
@@ -801,16 +702,12 @@ set_ip4_dns_servers (NMSettingIP4Config *s_ip4, const char *conn_name)
continue;
if (!inet_pton (AF_INET, server_list[i], &tmp_ip4_addr)) {
if (!is_ip6_address (server_list[i]))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "ignored dns: %s\n",
- server_list[i]);
+ nm_log_warn (LOGD_SETTINGS, "ignored dns: %s\n", server_list[i]);
continue;
}
- new_dns = tmp_ip4_addr.s_addr;
+ new_dns = tmp_ip4_addr;
if (new_dns && !nm_setting_ip4_config_add_dns (s_ip4, new_dns))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "warning: duplicate DNS server %s",
- server_list[i]);
+ nm_log_warn (LOGD_SETTINGS, "warning: duplicate DNS server %s", server_list[i]);
}
g_strfreev (server_list);
}
@@ -842,16 +739,12 @@ set_ip6_dns_servers (NMSettingIP6Config *s_ip6, const char *conn_name)
continue;
if (!inet_pton (AF_INET6, server_list[i], &tmp_ip6_addr)) {
if (is_ip6_address (server_list[i]))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "ignored dns: %s\n",
- server_list[i]);
+ nm_log_warn (LOGD_SETTINGS, "ignored dns: %s\n", server_list[i]);
continue;
}
if (!IN6_IS_ADDR_UNSPECIFIED (&tmp_ip6_addr)
&& !nm_setting_ip6_config_add_dns (s_ip6, &tmp_ip6_addr))
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "warning: duplicate DNS server %s",
- server_list[i]);
+ nm_log_warn (LOGD_SETTINGS, "warning: duplicate DNS server %s", server_list[i]);
}
g_strfreev (server_list);
}
@@ -882,7 +775,7 @@ get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
*hostname = NULL;
*client_id = NULL;
- dhcp_client = ifnet_get_global_setting ("main", "dhcp");
+ dhcp_client = nm_config_get_dhcp_client (nm_config_get ());
if (dhcp_client) {
if (!strcmp (dhcp_client, "dhclient"))
g_file_get_contents (dhclient_conf, &contents, NULL,
@@ -912,16 +805,14 @@ get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
if (tmp[0] != '\0')
*hostname = g_strdup (tmp);
else
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "dhcpcd hostname not defined, ignoring");
+ nm_log_info (LOGD_SETTINGS, "dhcpcd hostname not defined, ignoring");
} else if (g_str_has_prefix (line, "clientid")) {
tmp = line + strlen ("clientid");
g_strstrip (tmp);
if (tmp[0] != '\0')
*client_id = g_strdup (tmp);
else
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "dhcpcd clientid not defined, ignoring");
+ nm_log_info (LOGD_SETTINGS, "dhcpcd clientid not defined, ignoring");
}
// dhclient.conf
else if ((tmp = strstr (line, "send host-name")) != NULL) {
@@ -932,8 +823,7 @@ get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
if (tmp[0] != '\0')
*hostname = g_strdup (tmp);
else
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "dhclient hostname not defined, ignoring");
+ nm_log_info (LOGD_SETTINGS, "dhclient hostname not defined, ignoring");
} else if ((tmp = strstr (line, "send dhcp-client-identifier"))
!= NULL) {
tmp += strlen ("send dhcp-client-identifier");
@@ -942,8 +832,7 @@ get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
if (tmp[0] != '\0')
*client_id = g_strdup (tmp);
else
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "dhclient clientid not defined, ignoring");
+ nm_log_info (LOGD_SETTINGS, "dhclient clientid not defined, ignoring");
}
}
g_strfreev (all_lines);
@@ -962,7 +851,7 @@ gchar *backup_file (const gchar* target)
g_file_copy (source, backup, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, error);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Backup failed: %s", (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Backup failed: %s", (*error)->message);
g_free (backup_path);
backup_path = NULL;
}
diff --git a/src/settings/plugins/ifnet/net_utils.h b/src/settings/plugins/ifnet/net_utils.h
index c2ed83a13..cee71d57e 100644
--- a/src/settings/plugins/ifnet/net_utils.h
+++ b/src/settings/plugins/ifnet/net_utils.h
@@ -67,10 +67,6 @@ void set_ip6_dns_servers (NMSettingIP6Config * s_ip6, const char *conn_name);
gchar *strip_string (gchar *str, gchar t);
gboolean is_managed (const char *conn_name);
-GQuark ifnet_plugin_error_quark (void);
-gchar *utils_hexstr2bin (const gchar * hex, size_t len);
-gchar *utils_bin2hexstr (const gchar * bytes, int len, int final_len);
-
gboolean is_hex (const char *value);
gboolean is_ascii (const char *value);
gboolean is_true (const char *str);
diff --git a/src/settings/plugins/ifnet/nm-ifnet-connection.c b/src/settings/plugins/ifnet/nm-ifnet-connection.c
index 873a62ecd..478d6e32e 100644
--- a/src/settings/plugins/ifnet/nm-ifnet-connection.c
+++ b/src/settings/plugins/ifnet/nm-ifnet-connection.c
@@ -26,6 +26,7 @@
#include <nm-setting-wireless-security.h>
#include <nm-settings-connection.h>
#include <nm-system-config-interface.h>
+#include <nm-logging.h>
#include <nm-settings-error.h>
#include "nm-ifnet-connection.h"
#include "connection_parser.h"
@@ -37,11 +38,6 @@
G_DEFINE_TYPE (NMIfnetConnection, nm_ifnet_connection, NM_TYPE_SETTINGS_CONNECTION)
#define NM_IFNET_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IFNET_CONNECTION, NMIfnetConnectionPrivate))
-enum {
- PROP_ZERO,
- PROP_CONN_NAME,
- _PROP_END,
-};
enum {
IFNET_SETUP_MONITORS,
@@ -57,32 +53,35 @@ typedef struct {
} NMIfnetConnectionPrivate;
NMIfnetConnection *
-nm_ifnet_connection_new (const char *conn_name, NMConnection *source)
+nm_ifnet_connection_new (NMConnection *source, const char *conn_name)
{
NMConnection *tmp;
GObject *object;
GError *error = NULL;
+ gboolean update_unsaved = TRUE;
- g_return_val_if_fail (conn_name != NULL, NULL);
+ g_return_val_if_fail (source || conn_name, NULL);
if (source)
tmp = g_object_ref (source);
else {
tmp = ifnet_update_connection_from_config_block (conn_name, NULL, &error);
- if (!tmp){
+ if (!tmp) {
g_error_free (error);
return NULL;
}
- }
- object = (GObject *) g_object_new (NM_TYPE_IFNET_CONNECTION, NULL);
- if (!object) {
- g_object_unref (tmp);
- return NULL;
+ /* If we just read the connection from disk, it's clearly not Unsaved */
+ update_unsaved = FALSE;
}
+ object = (GObject *) g_object_new (NM_TYPE_IFNET_CONNECTION, NULL);
+ g_assert (object);
NM_IFNET_CONNECTION_GET_PRIVATE (object)->conn_name = g_strdup (conn_name);
- nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object), tmp, NULL);
+ nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object),
+ tmp,
+ update_unsaved,
+ NULL);
g_object_unref (tmp);
return NM_IFNET_CONNECTION (object);
@@ -93,6 +92,12 @@ nm_ifnet_connection_init (NMIfnetConnection * connection)
{
}
+const char *
+nm_ifnet_connection_get_conn_name (NMIfnetConnection *connection)
+{
+ return NM_IFNET_CONNECTION_GET_PRIVATE (connection)->conn_name;
+}
+
static void
commit_changes (NMSettingsConnection *connection,
NMSettingsConnectionCommitFunc callback,
@@ -101,29 +106,48 @@ commit_changes (NMSettingsConnection *connection,
GError *error = NULL;
NMIfnetConnectionPrivate *priv = NM_IFNET_CONNECTION_GET_PRIVATE (connection);
gchar *new_name = NULL;
+ gboolean success = FALSE;
g_signal_emit (connection, signals[IFNET_CANCEL_MONITORS], 0);
- if (!ifnet_update_parsers_by_connection (NM_CONNECTION (connection),
- priv->conn_name,
- CONF_NET_FILE,
- WPA_SUPPLICANT_CONF,
- &new_name,
- NULL,
- &error)) {
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Failed to update %s", priv->conn_name);
+
+ if (priv->conn_name) {
+ /* Existing connection; update it */
+ success = ifnet_update_parsers_by_connection (NM_CONNECTION (connection),
+ priv->conn_name,
+ CONF_NET_FILE,
+ WPA_SUPPLICANT_CONF,
+ &new_name,
+ NULL,
+ &error);
+ } else {
+ /* New connection, add it */
+ success = ifnet_add_new_connection (NM_CONNECTION (connection),
+ CONF_NET_FILE,
+ WPA_SUPPLICANT_CONF,
+ &new_name,
+ NULL,
+ &error);
+ if (success)
+ reload_parsers ();
+ }
+
+ if (success) {
+ /* update connection name */
+ g_assert (new_name);
+ g_free (priv->conn_name);
+ priv->conn_name = new_name;
+
+ NM_SETTINGS_CONNECTION_CLASS (nm_ifnet_connection_parent_class)->commit_changes (connection, callback, user_data);
+ nm_log_info (LOGD_SETTINGS, "Successfully updated %s", priv->conn_name);
+ } else {
+ nm_log_warn (LOGD_SETTINGS, "Failed to update %s",
+ priv->conn_name ? priv->conn_name :
+ nm_connection_get_id (NM_CONNECTION (connection)));
reload_parsers ();
callback (connection, error, user_data);
g_error_free (error);
- g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
- return;
}
- g_free (priv->conn_name);
- priv->conn_name = new_name;
-
- NM_SETTINGS_CONNECTION_CLASS (nm_ifnet_connection_parent_class)->commit_changes (connection, callback, user_data);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Successfully updated %s", priv->conn_name);
-
g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
}
@@ -136,31 +160,32 @@ do_delete (NMSettingsConnection *connection,
NMIfnetConnectionPrivate *priv = NM_IFNET_CONNECTION_GET_PRIVATE (connection);
g_signal_emit (connection, signals[IFNET_CANCEL_MONITORS], 0);
- if (!ifnet_delete_connection_in_parsers (priv->conn_name, CONF_NET_FILE, WPA_SUPPLICANT_CONF, NULL)) {
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Failed to delete %s",
- priv->conn_name);
- reload_parsers ();
- callback (connection, error, user_data);
- g_error_free (error);
- g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
- return;
+
+ /* Only connections which exist in /etc/conf.d/net will have a conn_name */
+ if (priv->conn_name) {
+ if (!ifnet_delete_connection_in_parsers (priv->conn_name, CONF_NET_FILE, WPA_SUPPLICANT_CONF, NULL)) {
+ nm_log_warn (LOGD_SETTINGS, "Failed to delete %s", priv->conn_name);
+ reload_parsers ();
+ callback (connection, error, user_data);
+ g_error_free (error);
+ g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+ return;
+ }
}
NM_SETTINGS_CONNECTION_CLASS (nm_ifnet_connection_parent_class)->delete (connection, callback, user_data);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Successfully deleted %s",
- priv->conn_name);
g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+
+ nm_log_info (LOGD_SETTINGS, "Successfully deleted %s",
+ priv->conn_name ? priv->conn_name :
+ nm_connection_get_id (NM_CONNECTION (connection)));
}
static void
finalize (GObject * object)
{
- NMIfnetConnectionPrivate *priv =
- NM_IFNET_CONNECTION_GET_PRIVATE (object);
- g_return_if_fail (priv);
-
- g_free (priv->conn_name);
+ g_free (NM_IFNET_CONNECTION_GET_PRIVATE (object)->conn_name);
G_OBJECT_CLASS (nm_ifnet_connection_parent_class)->finalize (object);
}
@@ -170,8 +195,7 @@ nm_ifnet_connection_class_init (NMIfnetConnectionClass * ifnet_connection_class)
GObjectClass *object_class = G_OBJECT_CLASS (ifnet_connection_class);
NMSettingsConnectionClass *settings_class = NM_SETTINGS_CONNECTION_CLASS (ifnet_connection_class);
- g_type_class_add_private (ifnet_connection_class,
- sizeof (NMIfnetConnectionPrivate));
+ g_type_class_add_private (ifnet_connection_class, sizeof (NMIfnetConnectionPrivate));
object_class->finalize = finalize;
settings_class->delete = do_delete;
diff --git a/src/settings/plugins/ifnet/nm-ifnet-connection.h b/src/settings/plugins/ifnet/nm-ifnet-connection.h
index 0647a94db..1cb67c341 100644
--- a/src/settings/plugins/ifnet/nm-ifnet-connection.h
+++ b/src/settings/plugins/ifnet/nm-ifnet-connection.h
@@ -44,8 +44,10 @@ typedef struct {
GType nm_ifnet_connection_get_type (void);
-NMIfnetConnection *nm_ifnet_connection_new (const char *conn_name,
- NMConnection *source);
+NMIfnetConnection *nm_ifnet_connection_new (NMConnection *source,
+ const char *conn_name);
+
+const char *nm_ifnet_connection_get_conn_name (NMIfnetConnection *connection);
G_END_DECLS
#endif /* NM_IFNET_CONNECTION_H */
diff --git a/src/settings/plugins/ifnet/plugin.c b/src/settings/plugins/ifnet/plugin.c
index 5100ad3e4..ab07b8d62 100644
--- a/src/settings/plugins/ifnet/plugin.c
+++ b/src/settings/plugins/ifnet/plugin.c
@@ -31,7 +31,9 @@
#include "NetworkManager.h"
#include "nm-system-config-interface.h"
+#include "nm-logging.h"
#include "nm-ifnet-connection.h"
+#include "nm-config.h"
#include "plugin.h"
#include "net_utils.h"
@@ -46,9 +48,8 @@
#define IFNET_KEY_FILE_KEY_MANAGED "managed"
typedef struct {
- GHashTable *config_connections;
+ GHashTable *connections; /* uuid::connection */
gchar *hostname;
- char *conf_file;
gboolean unmanaged_well_known;
GFileMonitor *hostname_monitor;
@@ -66,7 +67,7 @@ typedef struct {
static void system_config_interface_init (NMSystemConfigInterface *class);
-static void reload_connections (gpointer config);
+static void reload_connections (NMSystemConfigInterface *config);
G_DEFINE_TYPE_EXTENDED (SCPluginIfnet, sc_plugin_ifnet, G_TYPE_OBJECT, 0,
G_IMPLEMENT_INTERFACE (NM_TYPE_SYSTEM_CONFIG_INTERFACE, system_config_interface_init))
@@ -95,8 +96,7 @@ update_system_hostname (gpointer config)
g_object_notify (G_OBJECT (config),
NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Hostname updated to: %s",
- priv->hostname);
+ nm_log_info (LOGD_SETTINGS, "Hostname updated to: %s", priv->hostname);
}
static void
@@ -106,26 +106,29 @@ write_system_hostname (NMSystemConfigInterface * config,
SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
g_return_if_fail (newhostname);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Write system hostname: %s",
- newhostname);
+ nm_log_info (LOGD_SETTINGS, "Write system hostname: %s", newhostname);
if (write_hostname (IFNET_SYSTEM_HOSTNAME_FILE, newhostname)) {
g_free (priv->hostname);
priv->hostname = g_strdup (newhostname);
g_object_notify (G_OBJECT (config),
NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
} else
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Write system hostname: %s failed", newhostname);
+ nm_log_warn (LOGD_SETTINGS, "Write system hostname: %s failed", newhostname);
}
static gboolean
-is_managed_plugin ()
+is_managed_plugin (void)
{
- const char *result = NULL;
-
- result = ifnet_get_global_setting (IFNET_KEY_FILE_GROUP, IFNET_KEY_FILE_KEY_MANAGED);
- if (result)
- return is_true (result);
+ char *result = NULL;
+
+ result = nm_config_get_value (nm_config_get (),
+ IFNET_KEY_FILE_GROUP, IFNET_KEY_FILE_KEY_MANAGED,
+ NULL);
+ if (result) {
+ gboolean ret = is_true (result);
+ g_free (result);
+ return ret;
+ }
return IFNET_MANAGE_WELL_KNOWN_DEFAULT;
}
@@ -170,30 +173,12 @@ monitor_file_changes (const char *filename,
info);
g_signal_connect (monitor, "changed", G_CALLBACK (file_changed),
info);
- } else
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Monitoring %s failed, error: %s", filename,
- error == NULL ? "nothing" : (*error)->message);
-
- return monitor;
-}
-
-/* Callback for nm_settings_connection_replace_and_commit. Report any errors
- * encountered when commiting connection settings updates. */
-static void
-commit_cb (NMSettingsConnection *connection, GError *error, gpointer unused)
-{
- if (error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, " error updating: %s",
- (error && error->message) ? error->message : "(unknown)");
} else {
- NMSettingConnection *s_con;
-
- s_con = nm_connection_get_setting_connection (NM_CONNECTION (connection));
- g_assert (s_con);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Connection %s updated",
- nm_setting_connection_get_id (s_con));
+ nm_log_warn (LOGD_SETTINGS, "Monitoring %s failed, error: %s", filename,
+ error == NULL ? "nothing" : (*error)->message);
}
+
+ return monitor;
}
static void
@@ -204,12 +189,15 @@ setup_monitors (NMIfnetConnection * connection, gpointer user_data)
priv->hostname_monitor =
monitor_file_changes (IFNET_SYSTEM_HOSTNAME_FILE,
- update_system_hostname, user_data);
- priv->net_monitor =
- monitor_file_changes (CONF_NET_FILE, reload_connections, user_data);
- priv->wpa_monitor =
- monitor_file_changes (WPA_SUPPLICANT_CONF, reload_connections,
- user_data);
+ update_system_hostname, user_data);
+ if (nm_config_get_monitor_connection_files (nm_config_get ())) {
+ priv->net_monitor =
+ monitor_file_changes (CONF_NET_FILE, (FileChangedFn) reload_connections,
+ user_data);
+ priv->wpa_monitor =
+ monitor_file_changes (WPA_SUPPLICANT_CONF, (FileChangedFn) reload_connections,
+ user_data);
+ }
}
static void
@@ -233,17 +221,38 @@ cancel_monitors (NMIfnetConnection * connection, gpointer user_data)
}
static void
-reload_connections (gpointer config)
+connection_removed_cb (NMSettingsConnection *obj, gpointer user_data)
+{
+ g_hash_table_remove (SC_PLUGIN_IFNET_GET_PRIVATE (user_data)->connections,
+ nm_connection_get_uuid (NM_CONNECTION (obj)));
+}
+
+static void
+track_new_connection (SCPluginIfnet *self, NMIfnetConnection *connection)
+{
+ g_hash_table_insert (SC_PLUGIN_IFNET_GET_PRIVATE (self)->connections,
+ g_strdup (nm_connection_get_uuid (NM_CONNECTION (connection))),
+ g_object_ref (connection));
+ g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed_cb),
+ self);
+}
+
+static void
+reload_connections (NMSystemConfigInterface *config)
{
SCPluginIfnet *self = SC_PLUGIN_IFNET (config);
SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (self);
GList *conn_names = NULL, *n_iter = NULL;
+ gboolean auto_refresh = FALSE;
+ char *str_auto_refresh;
+ GError *error = NULL;
/* save names for removing unused connections */
- GHashTable *new_conn_names = NULL;
+ GHashTable *new_connections = NULL;
GHashTableIter iter;
- gpointer key;
- gpointer value;
+ const char *uuid;
+ NMSettingsConnection *candidate;
if (priv->unmanaged_well_known)
return;
@@ -251,17 +260,26 @@ reload_connections (gpointer config)
if (!reload_parsers ())
return;
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Loading connections");
+ nm_log_info (LOGD_SETTINGS, "Loading connections");
+
+ str_auto_refresh = nm_config_get_value (nm_config_get (),
+ IFNET_KEY_FILE_GROUP, "auto_refresh",
+ NULL);
+ if (str_auto_refresh && is_true (str_auto_refresh))
+ auto_refresh = TRUE;
+ g_free (str_auto_refresh);
+ new_connections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
+
+ /* Reread on-disk data and refresh in-memory connections from it */
conn_names = ifnet_get_connection_names ();
- new_conn_names = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL);
for (n_iter = conn_names; n_iter; n_iter = g_list_next (n_iter)) {
NMIfnetConnection *new;
NMIfnetConnection *old;
const char *conn_name = n_iter->data;
/* read the new connection */
- new = nm_ifnet_connection_new (conn_name, NULL);
+ new = nm_ifnet_connection_new (NULL, conn_name);
if (!new)
continue;
@@ -270,129 +288,129 @@ reload_connections (gpointer config)
g_signal_connect (G_OBJECT (new), "ifnet_cancel_monitors",
G_CALLBACK (cancel_monitors), config);
- old = g_hash_table_lookup (priv->config_connections, conn_name);
+ old = g_hash_table_lookup (priv->connections,
+ nm_connection_get_uuid (NM_CONNECTION (new)));
if (old && new) {
- const char *auto_refresh;
-
- auto_refresh = ifnet_get_global_setting (IFNET_KEY_FILE_GROUP, "auto_refresh");
- if (auto_refresh && is_true (auto_refresh)) {
+ if (auto_refresh) {
+ /* If connection has changed, remove the old one and add the
+ * new one to force a disconnect/reconnect with new settings
+ */
if (!nm_connection_compare (NM_CONNECTION (old),
NM_CONNECTION (new),
NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) {
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Auto refreshing %s", conn_name);
+ nm_log_info (LOGD_SETTINGS, "Auto refreshing %s", conn_name);
- /* Remove and re-add to disconnect and reconnect with new settings */
nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (old));
- g_hash_table_remove (priv->config_connections, conn_name);
- g_hash_table_insert (priv->config_connections, g_strdup (conn_name), new);
+ track_new_connection (self, new);
if (is_managed_plugin () && is_managed (conn_name))
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, new);
}
} else {
/* Update existing connection with new settings */
- nm_settings_connection_replace_and_commit (NM_SETTINGS_CONNECTION (old),
- NM_CONNECTION (new),
- commit_cb, NULL);
- g_object_unref (new);
+ if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (old),
+ NM_CONNECTION (new),
+ FALSE, /* don't set Unsaved */
+ &error)) {
+ /* Shouldn't ever get here as 'new' was verified by the reader already */
+ g_assert_no_error (error);
+ }
+ nm_log_info (LOGD_SETTINGS, "Connection %s updated",
+ nm_connection_get_id (NM_CONNECTION (new)));
}
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
} else if (new) {
- g_hash_table_insert (priv->config_connections, g_strdup (conn_name), new);
+ track_new_connection (self, new);
if (is_managed_plugin () && is_managed (conn_name))
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, new);
}
- g_hash_table_insert (new_conn_names, (gpointer) conn_name, (gpointer) conn_name);
- }
- /* remove unused connections */
- g_hash_table_iter_init (&iter, priv->config_connections);
- while (g_hash_table_iter_next (&iter, &key, &value)) {
- if (!g_hash_table_lookup (new_conn_names, key)) {
- nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (value));
- g_hash_table_remove (priv->config_connections, key);
- }
+ /* Track all valid connections so we can remove deleted ones later */
+ g_hash_table_insert (new_connections,
+ (gpointer) nm_connection_get_uuid (NM_CONNECTION (new)),
+ new);
}
- g_hash_table_destroy (new_conn_names);
- g_list_free (conn_names);
-}
-static void
-check_flagged_secrets (NMSetting *setting,
- const char *key,
- const GValue *value,
- GParamFlags flags,
- gpointer user_data)
-{
- gboolean *is_system_secret = user_data;
-
- if (flags & NM_SETTING_PARAM_SECRET) {
- NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
-
- nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
-
- if (secret_flags != NM_SETTING_SECRET_FLAG_NONE) {
- *is_system_secret = TRUE;
+ /* remove deleted/unused connections */
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, (gpointer) &uuid, (gpointer) &candidate)) {
+ /* only saved connections (which have a conn_name) get removed; unsaved
+ * ones obviously don't exist in /etc/conf.d/net yet and shouldn't get
+ * blown away by net file changes.
+ */
+ if ( nm_ifnet_connection_get_conn_name (NM_IFNET_CONNECTION (candidate))
+ && !g_hash_table_lookup (new_connections, uuid)) {
+ nm_settings_connection_signal_remove (candidate);
+ g_hash_table_iter_remove (&iter);
}
}
+ g_hash_table_destroy (new_connections);
+ g_list_free (conn_names);
}
static NMSettingsConnection *
add_connection (NMSystemConfigInterface *config,
NMConnection *source,
+ gboolean save_to_disk,
GError **error)
{
- NMIfnetConnection *connection = NULL;
- char *conn_name;
- gboolean has_flagged_secrets = FALSE;
- NMSettingConnection *s_con;
-
- s_con = nm_connection_get_setting_connection (source);
- g_assert (s_con);
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
+ NMIfnetConnection *new = NULL;
- /* If the connection is not available for all users, ignore
- * it as this plugin only deals with System Connections */
- if (nm_setting_connection_get_num_permissions (s_con))
+ /* Ensure we reject attempts to add the connection long before we're
+ * asked to write it to disk.
+ */
+ if (!ifnet_can_write_connection (source, error))
return NULL;
- /* If the connection has flagged secrets, ignore
- * it as this plugin does not deal with user agent service */
- nm_connection_for_each_setting_value (source, check_flagged_secrets, &has_flagged_secrets);
-
- if (!has_flagged_secrets) {
- conn_name = ifnet_add_new_connection (source, CONF_NET_FILE, WPA_SUPPLICANT_CONF, NULL, error);
- if (conn_name)
- connection = nm_ifnet_connection_new (conn_name, source);
+ if (save_to_disk) {
+ if (!ifnet_add_new_connection (source, CONF_NET_FILE, WPA_SUPPLICANT_CONF, NULL, NULL, error))
+ return NULL;
reload_connections (config);
+ new = g_hash_table_lookup (priv->connections, nm_connection_get_uuid (source));
+ } else {
+ new = nm_ifnet_connection_new (source, NULL);
+ if (new) {
+ track_new_connection (SC_PLUGIN_IFNET (config), new);
+ /* track_new_connection refs 'new' */
+ g_object_unref (new);
+ }
}
- return connection ? NM_SETTINGS_CONNECTION (connection) : NULL;
+ return (NMSettingsConnection *) new;
}
static void
check_unmanaged (gpointer key, gpointer data, gpointer user_data)
{
+ NMIfnetConnection *connection = NM_IFNET_CONNECTION (data);
GSList **list = (GSList **) user_data;
- gchar *conn_name = (gchar *) key;
- const char *unmanaged_spec;
+ const char *mac, *conn_name;
+ char *unmanaged_spec;
GSList *iter;
+ conn_name = nm_ifnet_connection_get_conn_name (connection);
+
if (is_managed (conn_name))
return;
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Checking unmanaged: %s", conn_name);
- unmanaged_spec = ifnet_get_data (conn_name, "mac");
- if (!unmanaged_spec)
- return;
+
+ nm_log_info (LOGD_SETTINGS, "Checking unmanaged: %s", conn_name);
+ mac = ifnet_get_data (conn_name, "mac");
+ if (mac)
+ unmanaged_spec = g_strdup_printf ("mac:%s", mac);
+ else
+ unmanaged_spec = g_strdup_printf ("interface-name:%s", conn_name);
/* Just return if the unmanaged spec is already in the list */
for (iter = *list; iter; iter = g_slist_next (iter)) {
- if (!strcmp ((char *) iter->data, unmanaged_spec))
+ if (g_str_equal (iter->data, unmanaged_spec)) {
+ g_free (unmanaged_spec);
return;
+ }
}
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Add unmanaged: %s", unmanaged_spec);
- *list =
- g_slist_prepend (*list, g_strdup_printf ("mac:%s", unmanaged_spec));
+ nm_log_info (LOGD_SETTINGS, "Add unmanaged: %s", unmanaged_spec);
+ *list = g_slist_prepend (*list, unmanaged_spec);
}
static GSList *
@@ -401,68 +419,61 @@ get_unmanaged_specs (NMSystemConfigInterface * config)
SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
GSList *list = NULL;
- g_return_val_if_fail (priv->config_connections != NULL, NULL);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "getting unmanaged specs...");
- g_hash_table_foreach (priv->config_connections, check_unmanaged, &list);
+ nm_log_info (LOGD_SETTINGS, "getting unmanaged specs...");
+ g_hash_table_foreach (priv->connections, check_unmanaged, &list);
return list;
}
static void
-SCPluginIfnet_init (NMSystemConfigInterface * config)
+init (NMSystemConfigInterface *config)
{
SCPluginIfnet *self = SC_PLUGIN_IFNET (config);
SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (self);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Initializing!");
- if (!priv->config_connections)
- priv->config_connections =
- g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
- g_object_unref);
+ nm_log_info (LOGD_SETTINGS, "Initializing!");
+
+ priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
priv->unmanaged_well_known = !is_managed_plugin ();
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "management mode: %s",
- priv->unmanaged_well_known ? "unmanaged" : "managed");
- // GFileMonitor setup
+ nm_log_info (LOGD_SETTINGS, "management mode: %s",
+ priv->unmanaged_well_known ? "unmanaged" : "managed");
+
setup_monitors (NULL, config);
reload_connections (config);
- /* Read hostname */
update_system_hostname (self);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Initialzation complete!");
+ nm_log_info (LOGD_SETTINGS, "Initialzation complete!");
}
static GSList *
-get_connections (NMSystemConfigInterface * config)
+get_connections (NMSystemConfigInterface *config)
{
SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
GSList *connections = NULL;
GHashTableIter iter;
- gpointer key, value;
-
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "(%d) ... get_connections.",
- GPOINTER_TO_UINT (config));
- if (priv->unmanaged_well_known) {
- PLUGIN_PRINT (IFNET_PLUGIN_NAME,
- "(%d) ... get_connections (managed=false): return empty list.",
- GPOINTER_TO_UINT (config));
- return NULL;
- }
+ NMIfnetConnection *connection;
+
+ nm_log_info (LOGD_SETTINGS, "(%p) ... get_connections.", config);
- g_hash_table_iter_init (&iter, priv->config_connections);
- while (g_hash_table_iter_next (&iter, &key, &value))
- if (is_managed ((gchar *) key))
- connections = g_slist_prepend (connections, value);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "(%d) connections count: %d",
- GPOINTER_TO_UINT (config), g_slist_length (connections));
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &connection)) {
+ const char *conn_name = nm_ifnet_connection_get_conn_name (connection);
+
+ if (!conn_name || (!priv->unmanaged_well_known && is_managed (conn_name)))
+ connections = g_slist_prepend (connections, connection);
+ }
+ nm_log_info (LOGD_SETTINGS, "(%p) connections count: %d",
+ config, g_slist_length (connections));
return connections;
}
static void
system_config_interface_init (NMSystemConfigInterface *class)
{
- class->init = SCPluginIfnet_init;
+ class->init = init;
class->get_connections = get_connections;
class->get_unmanaged_specs = get_unmanaged_specs;
class->add_connection = add_connection;
+ class->reload_connections = reload_connections;
}
static void
@@ -525,13 +536,14 @@ dispose (GObject * object)
SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (plugin);
cancel_monitors (NULL, object);
- if (priv->config_connections) {
- g_hash_table_remove_all (priv->config_connections);
- g_hash_table_destroy (priv->config_connections);
+ if (priv->connections) {
+ g_hash_table_destroy (priv->connections);
+ priv->connections = NULL;
}
g_free (priv->hostname);
- g_free (priv->conf_file);
+ priv->hostname = NULL;
+
ifnet_destroy ();
wpa_parser_destroy ();
G_OBJECT_CLASS (sc_plugin_ifnet_parent_class)->dispose (object);
@@ -565,35 +577,15 @@ sc_plugin_ifnet_class_init (SCPluginIfnetClass * req_class)
NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
}
-const char *
-ifnet_plugin_get_conf_file (void)
-{
- SCPluginIfnet *ifnet_plugin;
- SCPluginIfnetPrivate *priv;
-
- /* Get config file name. Plugin's singleton has already been created
- * with correct config file path, so the string passed here has no efect
- * and we get the valid file name.
- */
- ifnet_plugin = SC_PLUGIN_IFNET (nm_system_config_factory ("fake string"));
- priv = SC_PLUGIN_IFNET_GET_PRIVATE (ifnet_plugin);
- g_object_unref (ifnet_plugin);
-
- return priv->conf_file;
-}
-
G_MODULE_EXPORT GObject *
-nm_system_config_factory (const char *config_file)
+nm_system_config_factory (void)
{
static SCPluginIfnet *singleton = NULL;
SCPluginIfnetPrivate *priv;
if (!singleton) {
singleton = SC_PLUGIN_IFNET (g_object_new (SC_TYPE_PLUGIN_IFNET, NULL));
- if (singleton) {
- priv = SC_PLUGIN_IFNET_GET_PRIVATE (singleton);
- priv->conf_file = strdup (config_file);
- }
+ priv = SC_PLUGIN_IFNET_GET_PRIVATE (singleton);
} else
g_object_ref (singleton);
diff --git a/src/settings/plugins/ifnet/plugin.h b/src/settings/plugins/ifnet/plugin.h
index 27e71eead..6ac0f482f 100644
--- a/src/settings/plugins/ifnet/plugin.h
+++ b/src/settings/plugins/ifnet/plugin.h
@@ -43,7 +43,5 @@ struct _SCPluginIfnetClass {
GObjectClass parent;
};
-const char * ifnet_plugin_get_conf_file (void);
-
GType sc_plugin_ifnet_get_type (void);
#endif
diff --git a/src/settings/plugins/ifnet/tests/Makefile.am b/src/settings/plugins/ifnet/tests/Makefile.am
index 8d80b7308..f66a6a3dd 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.am
+++ b/src/settings/plugins/ifnet/tests/Makefile.am
@@ -1,5 +1,7 @@
if ENABLE_TESTS
+@GNOME_CODE_COVERAGE_RULES@
+
AM_CPPFLAGS= \
-I$(srcdir)/../ \
-I$(top_srcdir)/libnm-glib \
@@ -7,19 +9,35 @@ AM_CPPFLAGS= \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/config \
+ -I$(top_srcdir)/src/logging \
-I$(top_srcdir)/src/settings \
+ -I$(top_srcdir)/src/platform \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(CHECK_CFLAGS) \
$(GLIB_CFLAGS) \
- -DTEST_WPA_SUPPLICANT_CONF='"$(srcdir)/wpa_supplicant.conf"'
+ $(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(CODE_COVERAGE_CFLAGS) \
+ -DTEST_WPA_SUPPLICANT_CONF='"$(srcdir)/wpa_supplicant.conf"' \
+ -DSYSCONFDIR=\"nonexistent\"
noinst_PROGRAMS = check_ifnet
-check_ifnet_SOURCES = test_all.c
+check_ifnet_SOURCES = \
+ test_all.c \
+ ../connection_parser.c \
+ ../net_parser.c \
+ ../net_utils.c \
+ ../wpa_parser.c \
+ ../errors.c
+
+check_ifnet_LDFLAGS = \
+ $(CODE_COVERAGE_LDFLAGS)
+
+check_ifnet_LDADD = $(top_builddir)/src/libNetworkManager.la
-check_ifnet_LDADD = $(top_builddir)/libnm-util/libnm-util.la \
- $(builddir)/../lib-ifnet-io.la \
- $(CHECK_LIBS) \
- $(GLIB_LIBS) \
- $(LIBM)
check-local: check_ifnet
$(abs_builddir)/check_ifnet $(abs_srcdir) $(abs_builddir)
diff --git a/src/settings/plugins/ifnet/tests/Makefile.in b/src/settings/plugins/ifnet/tests/Makefile.in
index 17ec85d0f..cd6042377 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.in
+++ b/src/settings/plugins/ifnet/tests/Makefile.in
@@ -83,7 +83,8 @@ subdir = src/settings/plugins/ifnet/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,18 +103,22 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__check_ifnet_SOURCES_DIST = test_all.c
-@ENABLE_TESTS_TRUE@am_check_ifnet_OBJECTS = test_all.$(OBJEXT)
+am__check_ifnet_SOURCES_DIST = test_all.c ../connection_parser.c \
+ ../net_parser.c ../net_utils.c ../wpa_parser.c ../errors.c
+@ENABLE_TESTS_TRUE@am_check_ifnet_OBJECTS = test_all.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ connection_parser.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ net_parser.$(OBJEXT) net_utils.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ wpa_parser.$(OBJEXT) errors.$(OBJEXT)
check_ifnet_OBJECTS = $(am_check_ifnet_OBJECTS)
-am__DEPENDENCIES_1 =
@ENABLE_TESTS_TRUE@check_ifnet_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(builddir)/../lib-ifnet-io.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+check_ifnet_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(check_ifnet_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -200,12 +205,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -230,7 +238,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -275,12 +282,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -297,6 +308,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -324,11 +337,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -343,6 +361,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -405,6 +424,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -415,6 +435,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
@ENABLE_TESTS_TRUE@ -I$(srcdir)/../ \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-glib \
@@ -422,18 +443,33 @@ with_resolvconf = @with_resolvconf@
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/config \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/logging \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/settings \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/platform \
+@ENABLE_TESTS_TRUE@ -DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
@ENABLE_TESTS_TRUE@ $(CHECK_CFLAGS) \
@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@ENABLE_TESTS_TRUE@ -DTEST_WPA_SUPPLICANT_CONF='"$(srcdir)/wpa_supplicant.conf"'
-
-@ENABLE_TESTS_TRUE@check_ifnet_SOURCES = test_all.c
-@ENABLE_TESTS_TRUE@check_ifnet_LDADD = $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(builddir)/../lib-ifnet-io.la \
-@ENABLE_TESTS_TRUE@ $(CHECK_LIBS) \
-@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
-@ENABLE_TESTS_TRUE@ $(LIBM)
-
+@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(POLKIT_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_CFLAGS) \
+@ENABLE_TESTS_TRUE@ -DTEST_WPA_SUPPLICANT_CONF='"$(srcdir)/wpa_supplicant.conf"' \
+@ENABLE_TESTS_TRUE@ -DSYSCONFDIR=\"nonexistent\"
+
+@ENABLE_TESTS_TRUE@check_ifnet_SOURCES = \
+@ENABLE_TESTS_TRUE@ test_all.c \
+@ENABLE_TESTS_TRUE@ ../connection_parser.c \
+@ENABLE_TESTS_TRUE@ ../net_parser.c \
+@ENABLE_TESTS_TRUE@ ../net_utils.c \
+@ENABLE_TESTS_TRUE@ ../wpa_parser.c \
+@ENABLE_TESTS_TRUE@ ../errors.c
+
+@ENABLE_TESTS_TRUE@check_ifnet_LDFLAGS = \
+@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_LDFLAGS)
+
+@ENABLE_TESTS_TRUE@check_ifnet_LDADD = $(top_builddir)/src/libNetworkManager.la
@ENABLE_TESTS_TRUE@EXTRA_DIST = \
@ENABLE_TESTS_TRUE@ hostname \
@ENABLE_TESTS_TRUE@ net \
@@ -488,7 +524,7 @@ clean-noinstPROGRAMS:
check_ifnet$(EXEEXT): $(check_ifnet_OBJECTS) $(check_ifnet_DEPENDENCIES) $(EXTRA_check_ifnet_DEPENDENCIES)
@rm -f check_ifnet$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(check_ifnet_OBJECTS) $(check_ifnet_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(check_ifnet_LINK) $(check_ifnet_OBJECTS) $(check_ifnet_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -496,7 +532,12 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection_parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net_parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net_utils.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wpa_parser.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -519,6 +560,76 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+connection_parser.o: ../connection_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT connection_parser.o -MD -MP -MF $(DEPDIR)/connection_parser.Tpo -c -o connection_parser.o `test -f '../connection_parser.c' || echo '$(srcdir)/'`../connection_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/connection_parser.Tpo $(DEPDIR)/connection_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../connection_parser.c' object='connection_parser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o connection_parser.o `test -f '../connection_parser.c' || echo '$(srcdir)/'`../connection_parser.c
+
+connection_parser.obj: ../connection_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT connection_parser.obj -MD -MP -MF $(DEPDIR)/connection_parser.Tpo -c -o connection_parser.obj `if test -f '../connection_parser.c'; then $(CYGPATH_W) '../connection_parser.c'; else $(CYGPATH_W) '$(srcdir)/../connection_parser.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/connection_parser.Tpo $(DEPDIR)/connection_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../connection_parser.c' object='connection_parser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o connection_parser.obj `if test -f '../connection_parser.c'; then $(CYGPATH_W) '../connection_parser.c'; else $(CYGPATH_W) '$(srcdir)/../connection_parser.c'; fi`
+
+net_parser.o: ../net_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_parser.o -MD -MP -MF $(DEPDIR)/net_parser.Tpo -c -o net_parser.o `test -f '../net_parser.c' || echo '$(srcdir)/'`../net_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/net_parser.Tpo $(DEPDIR)/net_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../net_parser.c' object='net_parser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net_parser.o `test -f '../net_parser.c' || echo '$(srcdir)/'`../net_parser.c
+
+net_parser.obj: ../net_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_parser.obj -MD -MP -MF $(DEPDIR)/net_parser.Tpo -c -o net_parser.obj `if test -f '../net_parser.c'; then $(CYGPATH_W) '../net_parser.c'; else $(CYGPATH_W) '$(srcdir)/../net_parser.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/net_parser.Tpo $(DEPDIR)/net_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../net_parser.c' object='net_parser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net_parser.obj `if test -f '../net_parser.c'; then $(CYGPATH_W) '../net_parser.c'; else $(CYGPATH_W) '$(srcdir)/../net_parser.c'; fi`
+
+net_utils.o: ../net_utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_utils.o -MD -MP -MF $(DEPDIR)/net_utils.Tpo -c -o net_utils.o `test -f '../net_utils.c' || echo '$(srcdir)/'`../net_utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/net_utils.Tpo $(DEPDIR)/net_utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../net_utils.c' object='net_utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net_utils.o `test -f '../net_utils.c' || echo '$(srcdir)/'`../net_utils.c
+
+net_utils.obj: ../net_utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_utils.obj -MD -MP -MF $(DEPDIR)/net_utils.Tpo -c -o net_utils.obj `if test -f '../net_utils.c'; then $(CYGPATH_W) '../net_utils.c'; else $(CYGPATH_W) '$(srcdir)/../net_utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/net_utils.Tpo $(DEPDIR)/net_utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../net_utils.c' object='net_utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net_utils.obj `if test -f '../net_utils.c'; then $(CYGPATH_W) '../net_utils.c'; else $(CYGPATH_W) '$(srcdir)/../net_utils.c'; fi`
+
+wpa_parser.o: ../wpa_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT wpa_parser.o -MD -MP -MF $(DEPDIR)/wpa_parser.Tpo -c -o wpa_parser.o `test -f '../wpa_parser.c' || echo '$(srcdir)/'`../wpa_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wpa_parser.Tpo $(DEPDIR)/wpa_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../wpa_parser.c' object='wpa_parser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o wpa_parser.o `test -f '../wpa_parser.c' || echo '$(srcdir)/'`../wpa_parser.c
+
+wpa_parser.obj: ../wpa_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT wpa_parser.obj -MD -MP -MF $(DEPDIR)/wpa_parser.Tpo -c -o wpa_parser.obj `if test -f '../wpa_parser.c'; then $(CYGPATH_W) '../wpa_parser.c'; else $(CYGPATH_W) '$(srcdir)/../wpa_parser.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wpa_parser.Tpo $(DEPDIR)/wpa_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../wpa_parser.c' object='wpa_parser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o wpa_parser.obj `if test -f '../wpa_parser.c'; then $(CYGPATH_W) '../wpa_parser.c'; else $(CYGPATH_W) '$(srcdir)/../wpa_parser.c'; fi`
+
+errors.o: ../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT errors.o -MD -MP -MF $(DEPDIR)/errors.Tpo -c -o errors.o `test -f '../errors.c' || echo '$(srcdir)/'`../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/errors.Tpo $(DEPDIR)/errors.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../errors.c' object='errors.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o errors.o `test -f '../errors.c' || echo '$(srcdir)/'`../errors.c
+
+errors.obj: ../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT errors.obj -MD -MP -MF $(DEPDIR)/errors.Tpo -c -o errors.obj `if test -f '../errors.c'; then $(CYGPATH_W) '../errors.c'; else $(CYGPATH_W) '$(srcdir)/../errors.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/errors.Tpo $(DEPDIR)/errors.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../errors.c' object='errors.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o errors.obj `if test -f '../errors.c'; then $(CYGPATH_W) '../errors.c'; else $(CYGPATH_W) '$(srcdir)/../errors.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -730,6 +841,9 @@ uninstall-am:
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
+
+@ENABLE_TESTS_TRUE@@GNOME_CODE_COVERAGE_RULES@
+
@ENABLE_TESTS_TRUE@check-local: check_ifnet
@ENABLE_TESTS_TRUE@ $(abs_builddir)/check_ifnet $(abs_srcdir) $(abs_builddir)
diff --git a/src/settings/plugins/ifnet/tests/net.all b/src/settings/plugins/ifnet/tests/net.all
index a30a1b95e..285a4cdf2 100644
--- a/src/settings/plugins/ifnet/tests/net.all
+++ b/src/settings/plugins/ifnet/tests/net.all
@@ -327,7 +327,7 @@ arping_wait_lan=2
# Please ensure your VLAN IDs are NOT zero-padded
vlans_eth0="1 2"
-# You may not want to assign an IP the the physical interface, but we still
+# You may not want to assign an IP to the physical interface, but we still
# need it up.
config_eth0=( "null" )
@@ -361,7 +361,7 @@ vlan_start_eth0="no"
# To bond interfaces together
slaves_bond0="eth0 eth1 eth2"
-config_bond0=( "null" ) # You may not want to assign an IP the the bond
+config_bond0=( "null" ) # You may not want to assign an IP to the bond
# If any of the slaves require extra configuration - for example wireless or
# ppp devices - we need to depend function on the bonded interfaces
diff --git a/src/settings/plugins/ifnet/tests/test_all.c b/src/settings/plugins/ifnet/tests/test_all.c
index 4c3126010..c320ed5f8 100644
--- a/src/settings/plugins/ifnet/tests/test_all.c
+++ b/src/settings/plugins/ifnet/tests/test_all.c
@@ -28,21 +28,31 @@
#include <unistd.h>
#include <nm-utils.h>
+#include "nm-linux-platform.h"
+#include "nm-logging.h"
+
#include "net_parser.h"
-#include "nm-test-helpers.h"
#include "net_utils.h"
#include "wpa_parser.h"
#include "connection_parser.h"
+#include "nm-config.h"
-/* Fake config file function to make the linker happy */
-const char *ifnet_plugin_get_conf_file (void);
+#include "nm-test-utils.h"
-const char *
-ifnet_plugin_get_conf_file (void)
+/* Fake NMConfig handling; the values it returns don't matter, so this
+ * is easier than forcing it to read our own config file, etc.
+ */
+NMConfig *
+nm_config_get (void)
{
- return "/etc/foo/barasdfasdfasdfasdf";
+ return NULL;
}
+const char *
+nm_config_get_dhcp_client (NMConfig *config)
+{
+ return "dhclient";
+}
static void
test_getdata ()
@@ -153,18 +163,18 @@ static void
check_ip_block (ip_block * iblock, gchar * ip, gchar * netmask, gchar * gateway)
{
char *str;
- struct in_addr tmp_ip4_addr;
+ guint32 tmp_ip4_addr;
str = malloc (INET_ADDRSTRLEN);
- tmp_ip4_addr.s_addr = iblock->ip;
+ tmp_ip4_addr = iblock->ip;
inet_ntop (AF_INET, &tmp_ip4_addr, str, INET_ADDRSTRLEN);
ASSERT (strcmp (ip, str) == 0, "check ip",
"ip expected:%s, find:%s", ip, str);
- tmp_ip4_addr.s_addr = iblock->netmask;
+ tmp_ip4_addr = iblock->netmask;
inet_ntop (AF_INET, &tmp_ip4_addr, str, INET_ADDRSTRLEN);
ASSERT (strcmp (netmask, str) == 0, "check netmask",
"netmask expected:%s, find:%s", netmask, str);
- tmp_ip4_addr.s_addr = iblock->gateway;
+ tmp_ip4_addr = iblock->gateway;
inet_ntop (AF_INET, &tmp_ip4_addr, str, INET_ADDRSTRLEN);
ASSERT (strcmp (gateway, str) == 0, "check gateway",
"gateway expected:%s, find:%s", gateway, str);
@@ -188,12 +198,19 @@ test_convert_ipv4_config_block ()
check_ip_block (iblock, "192.168.4.121", "255.255.255.0",
"202.117.16.1");
destroy_ip_block (iblock);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Can't handle IPv4 address*202.117.16.1211*");
iblock = convert_ip4_config_block ("eth2");
+ g_test_assert_expected_messages ();
ASSERT (iblock != NULL
&& iblock->next == NULL,
"convert error IPv4 address", "should only get one address");
check_ip_block (iblock, "192.168.4.121", "255.255.255.0", "0.0.0.0");
destroy_ip_block (iblock);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*missing netmask or prefix*");
iblock = convert_ip4_config_block ("eth3");
ASSERT (iblock == NULL, "convert config_block",
"convert error configuration");
@@ -274,7 +291,12 @@ test_new_connection ()
GError *error = NULL;
NMConnection *connection;
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Can't handle IPv4 address*202.117.16.1211*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Can't handle IPv6 address*202.117.16.1211*");
connection = ifnet_update_connection_from_config_block ("eth2", NULL, &error);
+ g_test_assert_expected_messages ();
ASSERT (connection != NULL, "new connection",
"new connection failed: %s",
error ? error->message : "None");
@@ -366,13 +388,18 @@ test_add_connection (const char *basepath)
char *backup = NULL;
connection = ifnet_update_connection_from_config_block ("eth0", basepath, NULL);
- ASSERT (ifnet_add_new_connection (connection, NET_GEN_NAME, SUP_GEN_NAME, &backup, NULL),
+ ASSERT (ifnet_add_new_connection (connection, NET_GEN_NAME, SUP_GEN_NAME, NULL, &backup, NULL),
"add connection", "add connection failed: %s", "eth0");
kill_backup (&backup);
g_object_unref (connection);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Can't handle ipv4 address: brd, missing netmask or prefix*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Can't handle ipv4 address: 202.117.16.255, missing netmask or prefix*");
connection = ifnet_update_connection_from_config_block ("myxjtu2", basepath, NULL);
- ASSERT (ifnet_add_new_connection (connection, NET_GEN_NAME, SUP_GEN_NAME, &backup, NULL),
+ g_test_assert_expected_messages ();
+ ASSERT (ifnet_add_new_connection (connection, NET_GEN_NAME, SUP_GEN_NAME, NULL, &backup, NULL),
"add connection", "add connection failed: %s", "myxjtu2");
kill_backup (&backup);
g_object_unref (connection);
@@ -416,17 +443,25 @@ test_missing_config ()
GError *error = NULL;
NMConnection *connection;
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Unknown config for eth8*");
connection = ifnet_update_connection_from_config_block ("eth8", NULL, &error);
+ g_test_assert_expected_messages ();
ASSERT (connection == NULL && error != NULL, "get connection",
"get connection should fail with 'Unknown config for eth8'");
}
+NMTST_DEFINE ();
+
int
main (int argc, char **argv)
{
char *f;
- g_type_init ();
+ nm_linux_platform_setup ();
+
+ nmtst_init_assert_logging (&argc, &argv);
+ nm_logging_setup ("WARN", "DEFAULT", NULL, NULL);
f = g_build_filename (argv[1], "net", NULL);
ifnet_init (f);
diff --git a/src/settings/plugins/ifnet/wpa_parser.c b/src/settings/plugins/ifnet/wpa_parser.c
index e517bf125..748eb351d 100644
--- a/src/settings/plugins/ifnet/wpa_parser.c
+++ b/src/settings/plugins/ifnet/wpa_parser.c
@@ -22,6 +22,7 @@
#include <string.h>
#include <stdlib.h>
#include <nm-system-config-interface.h>
+#include <nm-logging.h>
#include "wpa_parser.h"
#include "net_parser.h"
#include "net_utils.h"
@@ -236,8 +237,7 @@ add_global_data (gchar * line)
g_strstrip (line);
key_value = g_strsplit (line, "=", 2);
if (g_strv_length (key_value) != 2) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle this line: %s\n",
- line);
+ nm_log_warn (LOGD_SETTINGS, "Can't handle this line: %s\n", line);
g_strfreev (key_value);
return;
}
@@ -262,9 +262,8 @@ wpa_parser_init (const char *wpa_supplicant_conf)
channel =
g_io_channel_new_file (wpa_supplicant_conf, "r", NULL);
if (channel == NULL) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Can't open %s for wireless security",
- wpa_supplicant_conf);
+ nm_log_warn (LOGD_SETTINGS, "Can't open %s for wireless security",
+ wpa_supplicant_conf);
return;
}
@@ -380,12 +379,11 @@ wpa_flush_to_file (const char *config_file)
channel = g_io_channel_new_file (config_file, "w", NULL);
if (!channel) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME,
- "Can't open file %s for writing", config_file);
+ nm_log_warn (LOGD_SETTINGS, "Can't open file %s for writing", config_file);
return FALSE;
}
g_hash_table_iter_init (&iter, wsec_global_table);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Writing to %s", config_file);
+ nm_log_info (LOGD_SETTINGS, "Writing to %s", config_file);
g_io_channel_write_chars (channel,
"#Generated by NetworkManager\n"
"###### Global Configuration ######\n",
@@ -402,8 +400,7 @@ wpa_flush_to_file (const char *config_file)
g_free (out_line);
}
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s",
- (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto done;
}
g_io_channel_write_chars (channel,
@@ -433,15 +430,13 @@ wpa_flush_to_file (const char *config_file)
}
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s",
- (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto done;
}
g_io_channel_flush (channel, error);
if (error && *error) {
- PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s",
- (*error)->message);
+ nm_log_warn (LOGD_SETTINGS, "Found error: %s", (*error)->message);
goto done;
}
wpa_parser_data_changed = FALSE;
@@ -504,8 +499,7 @@ wpa_add_security (const char *ssid)
g_hash_table_new (g_str_hash, g_str_equal);
gchar *ssid_i;
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding security for %s",
- ssid);
+ nm_log_info (LOGD_SETTINGS, "Adding security for %s", ssid);
if (g_str_has_prefix (ssid, "0x")) {
/* hex ssid */
ssid_i = g_strdup (ssid + 2);
@@ -528,7 +522,7 @@ wpa_delete_security (const char *ssid)
gpointer old_key, old_value;
g_return_val_if_fail (wsec_table != NULL && ssid != NULL, FALSE);
- PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Deleting security for %s", ssid);
+ nm_log_info (LOGD_SETTINGS, "Deleting security for %s", ssid);
if (!g_hash_table_lookup_extended
(wsec_table, ssid, &old_key, &old_value))
return FALSE;
diff --git a/src/settings/plugins/ifupdown/Makefile.am b/src/settings/plugins/ifupdown/Makefile.am
index ae07f7b0d..fd98f8fe5 100644
--- a/src/settings/plugins/ifupdown/Makefile.am
+++ b/src/settings/plugins/ifupdown/Makefile.am
@@ -1,15 +1,23 @@
SUBDIRS = . tests
+@GNOME_CODE_COVERAGE_RULES@
+
AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
-I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/config \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-glib \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(GUDEV_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\"
noinst_LTLIBRARIES = libifupdown-io.la
@@ -32,14 +40,9 @@ libnm_settings_plugin_ifupdown_la_SOURCES = \
plugin.c \
plugin.h
-libnm_settings_plugin_ifupdown_la_CPPFLAGS = \
- $(GUDEV_CFLAGS) \
- $(AM_CPPFLAGS)
-
libnm_settings_plugin_ifupdown_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifupdown_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/logging/libnm-logging.la \
libifupdown-io.la \
$(GLIB_LIBS) \
$(GUDEV_LIBS)
diff --git a/src/settings/plugins/ifupdown/Makefile.in b/src/settings/plugins/ifupdown/Makefile.in
index 05629ea05..50d4ca089 100644
--- a/src/settings/plugins/ifupdown/Makefile.in
+++ b/src/settings/plugins/ifupdown/Makefile.in
@@ -82,7 +82,8 @@ subdir = src/settings/plugins/ifupdown
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -139,12 +140,10 @@ am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
libnm_settings_plugin_ifupdown_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/logging/libnm-logging.la libifupdown-io.la \
+ $(top_builddir)/libnm-util/libnm-util.la libifupdown-io.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libnm_settings_plugin_ifupdown_la_OBJECTS = \
- libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.lo \
- libnm_settings_plugin_ifupdown_la-plugin.lo
+ nm-ifupdown-connection.lo plugin.lo
libnm_settings_plugin_ifupdown_la_OBJECTS = \
$(am_libnm_settings_plugin_ifupdown_la_OBJECTS)
libnm_settings_plugin_ifupdown_la_LINK = $(LIBTOOL) $(AM_V_lt) \
@@ -281,12 +280,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -311,7 +313,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -356,12 +357,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -378,6 +383,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -405,11 +412,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -424,6 +436,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -486,6 +499,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -496,17 +510,24 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
-I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/config \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-glib \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(GUDEV_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\"
noinst_LTLIBRARIES = libifupdown-io.la
@@ -527,14 +548,9 @@ libnm_settings_plugin_ifupdown_la_SOURCES = \
plugin.c \
plugin.h
-libnm_settings_plugin_ifupdown_la_CPPFLAGS = \
- $(GUDEV_CFLAGS) \
- $(AM_CPPFLAGS)
-
libnm_settings_plugin_ifupdown_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifupdown_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/logging/libnm-logging.la \
libifupdown-io.la \
$(GLIB_LIBS) \
$(GUDEV_LIBS)
@@ -633,9 +649,9 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface_parser.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_settings_plugin_ifupdown_la-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ifupdown-connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -658,20 +674,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.lo: nm-ifupdown-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifupdown_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.Tpo -c -o libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.lo `test -f 'nm-ifupdown-connection.c' || echo '$(srcdir)/'`nm-ifupdown-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.Tpo $(DEPDIR)/libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ifupdown-connection.c' object='libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifupdown_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_ifupdown_la-nm-ifupdown-connection.lo `test -f 'nm-ifupdown-connection.c' || echo '$(srcdir)/'`nm-ifupdown-connection.c
-
-libnm_settings_plugin_ifupdown_la-plugin.lo: plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifupdown_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm_settings_plugin_ifupdown_la-plugin.lo -MD -MP -MF $(DEPDIR)/libnm_settings_plugin_ifupdown_la-plugin.Tpo -c -o libnm_settings_plugin_ifupdown_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_settings_plugin_ifupdown_la-plugin.Tpo $(DEPDIR)/libnm_settings_plugin_ifupdown_la-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libnm_settings_plugin_ifupdown_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_settings_plugin_ifupdown_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm_settings_plugin_ifupdown_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -960,6 +962,8 @@ uninstall-am: uninstall-pkglibLTLIBRARIES
uninstall-am uninstall-pkglibLTLIBRARIES
+@GNOME_CODE_COVERAGE_RULES@
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/settings/plugins/ifupdown/interface_parser.c b/src/settings/plugins/ifupdown/interface_parser.c
index 38ed14792..ee233c93a 100644
--- a/src/settings/plugins/ifupdown/interface_parser.c
+++ b/src/settings/plugins/ifupdown/interface_parser.c
@@ -25,7 +25,10 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <wordexp.h>
+#include <libgen.h>
#include "nm-utils.h"
+#include "nm-logging.h"
if_block* first;
if_block* last;
@@ -96,21 +99,33 @@ static char *join_values_with_spaces(char *dst, char **src)
return(dst);
}
-void ifparser_init (const char *eni_file, int quiet)
+static void _ifparser_source (const char *path, const char *en_dir, int quiet);
+
+static void
+_recursive_ifparser (const char *eni_file, int quiet)
{
- FILE *inp = fopen (eni_file, "r");
+ FILE *inp;
char line[255];
int skip_to_block = 1;
int skip_long_line = 0;
int offs = 0;
+ // Check if interfaces file exists and open it
+ if (!g_file_test (eni_file, G_FILE_TEST_EXISTS)) {
+ if (!quiet)
+ nm_log_warn (LOGD_SETTINGS, "interfaces file %s doesn't exist\n", eni_file);
+ return;
+ }
+ inp = fopen (eni_file, "r");
if (inp == NULL) {
if (!quiet)
- g_warning ("Error: Can't open %s\n", eni_file);
+ nm_log_warn (LOGD_SETTINGS, "Can't open %s\n", eni_file);
return;
}
+ if (!quiet)
+ nm_log_info (LOGD_SETTINGS, " interface-parser: parsing file %s\n", eni_file);
+
- first = last = NULL;
while (!feof(inp))
{
char *token[128]; // 255 chars can only be split into 127 tokens
@@ -128,7 +143,7 @@ void ifparser_init (const char *eni_file, int quiet)
if (!feof(inp) && len > 0 && line[len-1] != '\n') {
if (!skip_long_line) {
if (!quiet)
- g_message ("Error: Skipping over-long-line '%s...'\n", line);
+ nm_log_warn (LOGD_SETTINGS, "Skipping over-long-line '%s...'\n", line);
}
skip_long_line = 1;
continue;
@@ -168,22 +183,23 @@ void ifparser_init (const char *eni_file, int quiet)
if (toknum < 2) {
if (!quiet) {
- g_message ("Error: Can't parse interface line '%s'\n",
- join_values_with_spaces(value, token));
+ nm_log_warn (LOGD_SETTINGS, "Can't parse interface line '%s'\n",
+ join_values_with_spaces(value, token));
}
skip_to_block = 1;
continue;
}
- // There are four different stanzas:
- // iface, mapping, auto and allow-*. Create a block for each of them.
+ // There are five different stanzas:
+ // iface, mapping, auto, allow-* and source.
+ // Create a block for each of them except source.
// iface stanza takes at least 3 parameters
if (strcmp(token[0], "iface") == 0) {
if (toknum < 4) {
if (!quiet) {
- g_message ("Error: Can't parse iface line '%s'\n",
- join_values_with_spaces(value, token));
+ nm_log_warn (LOGD_SETTINGS, "Can't parse iface line '%s'\n",
+ join_values_with_spaces(value, token));
}
continue;
}
@@ -211,17 +227,71 @@ void ifparser_init (const char *eni_file, int quiet)
add_block(token[0], token[i]);
skip_to_block = 0;
}
+ // source stanza takes one or more filepaths as parameters
+ else if (strcmp(token[0], "source") == 0) {
+ int i;
+ char *en_dir;
+
+ skip_to_block = 0;
+
+ if (toknum == 1) {
+ if (!quiet)
+ nm_log_warn (LOGD_SETTINGS, "Invalid source line without parameters\n");
+ continue;
+ }
+
+ en_dir = g_path_get_dirname (eni_file);
+ for (i = 1; i < toknum; ++i)
+ _ifparser_source (token[i], en_dir, quiet);
+ g_free (en_dir);
+ }
else {
if (skip_to_block) {
if (!quiet) {
- g_message ("Error: ignoring out-of-block data '%s'\n",
- join_values_with_spaces(value, token));
+ nm_log_warn (LOGD_SETTINGS, "ignoring out-of-block data '%s'\n",
+ join_values_with_spaces(value, token));
}
} else
add_data(token[0], join_values_with_spaces(value, token + 1));
}
}
fclose(inp);
+
+ if (!quiet)
+ nm_log_info (LOGD_SETTINGS, " interface-parser: finished parsing file %s\n", eni_file);
+}
+
+static void
+_ifparser_source (const char *path, const char *en_dir, int quiet)
+{
+ char *abs_path;
+ wordexp_t we;
+ uint i;
+
+ if (g_path_is_absolute (path))
+ abs_path = g_strdup (path);
+ else
+ abs_path = g_build_filename (en_dir, path, NULL);
+
+ if (!quiet)
+ nm_log_info (LOGD_SETTINGS, " interface-parser: source line includes interfaces file(s) %s\n", abs_path);
+
+ /* ifupdown uses WRDE_NOCMD for wordexp. */
+ if (wordexp (abs_path, &we, WRDE_NOCMD)) {
+ if (!quiet)
+ nm_log_warn (LOGD_SETTINGS, "word expansion for %s failed\n", abs_path);
+ } else {
+ for (i = 0; i < we.we_wordc; i++)
+ _recursive_ifparser (we.we_wordv[i], quiet);
+ wordfree (&we);
+ }
+ g_free (abs_path);
+}
+
+void ifparser_init (const char *eni_file, int quiet)
+{
+ first = last = NULL;
+ _recursive_ifparser (eni_file, quiet);
}
void _destroy_data(if_data *ifd)
diff --git a/src/settings/plugins/ifupdown/nm-ifupdown-connection.c b/src/settings/plugins/ifupdown/nm-ifupdown-connection.c
index 0cc73b34f..4e13a2b83 100644
--- a/src/settings/plugins/ifupdown/nm-ifupdown-connection.c
+++ b/src/settings/plugins/ifupdown/nm-ifupdown-connection.c
@@ -29,6 +29,7 @@
#include <nm-settings-connection.h>
#include <nm-system-config-interface.h>
#include <nm-settings-error.h>
+#include <nm-logging.h>
#include "nm-ifupdown-connection.h"
#include "parser.h"
@@ -60,7 +61,7 @@ nm_ifupdown_connection_new (if_block *block)
static gboolean
supports_secrets (NMSettingsConnection *connection, const char *setting_name)
{
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "supports_secrets() for setting_name: '%s'", setting_name);
+ nm_log_info (LOGD_SETTINGS, "supports_secrets() for setting_name: '%s'", setting_name);
return (strcmp (setting_name, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0);
}
@@ -84,20 +85,20 @@ constructor (GType type,
priv = NM_IFUPDOWN_CONNECTION_GET_PRIVATE (object);
if (!priv) {
- g_warning ("%s.%d - no private instance.", __FILE__, __LINE__);
+ nm_log_warn (LOGD_SETTINGS, "%s.%d - no private instance.", __FILE__, __LINE__);
goto err;
}
if (!priv->ifblock) {
- g_warning ("(ifupdown) ifblock not provided to constructor.");
+ nm_log_warn (LOGD_SETTINGS, "(ifupdown) ifblock not provided to constructor.");
goto err;
}
if (!ifupdown_update_connection_from_if_block (NM_CONNECTION (object), priv->ifblock, &error)) {
- g_warning ("%s.%d - invalid connection read from /etc/network/interfaces: (%d) %s",
- __FILE__,
- __LINE__,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
+ nm_log_warn (LOGD_SETTINGS, "%s.%d - invalid connection read from /etc/network/interfaces: (%d) %s",
+ __FILE__,
+ __LINE__,
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
goto err;
}
diff --git a/src/settings/plugins/ifupdown/parser.c b/src/settings/plugins/ifupdown/parser.c
index d81fd84d8..91ed3e21b 100644
--- a/src/settings/plugins/ifupdown/parser.c
+++ b/src/settings/plugins/ifupdown/parser.c
@@ -36,6 +36,7 @@
#include <nm-setting-8021x.h>
#include <nm-system-config-interface.h>
#include <nm-utils.h>
+#include <nm-logging.h>
#include <ctype.h>
#include "parser.h"
@@ -67,9 +68,7 @@ _ifupdownplugin_guess_connection_type (if_block *block)
if(!ret_type)
ret_type = NM_SETTING_WIRED_SETTING_NAME;
- PLUGIN_PRINT("SCPluginIfupdown",
- "guessed connection type (%s) = %s",
- block->name, ret_type);
+ nm_log_info (LOGD_SETTINGS, "guessed connection type (%s) = %s", block->name, ret_type);
return ret_type;
}
@@ -111,15 +110,14 @@ update_wireless_setting_from_if_block(NMConnection *connection,
return;
}
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "update wireless settings (%s).", block->name);
+ nm_log_info (LOGD_SETTINGS, "update wireless settings (%s).", block->name);
wireless_setting = NM_SETTING_WIRELESS(nm_setting_wireless_new());
while(curr) {
if(strlen(curr->key) > wireless_l &&
!strncmp("wireless-", curr->key, wireless_l)) {
const gchar* newkey = map_by_mapping(mapping, curr->key+wireless_l);
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "wireless setting key: %s='%s'",
- newkey, curr->data);
+ nm_log_info (LOGD_SETTINGS, "wireless setting key: %s='%s'", newkey, curr->data);
if(newkey && !strcmp("ssid", newkey)) {
GByteArray *ssid;
gint len = strlen(curr->data);
@@ -128,7 +126,7 @@ update_wireless_setting_from_if_block(NMConnection *connection,
g_byte_array_append (ssid, (const guint8 *) curr->data, len);
g_object_set (wireless_setting, NM_SETTING_WIRELESS_SSID, ssid, NULL);
g_byte_array_free (ssid, TRUE);
- PLUGIN_PRINT("SCPlugin-Ifupdown", "setting wireless ssid = %d", len);
+ nm_log_info (LOGD_SETTINGS, "setting wireless ssid = %d", len);
} else {
g_object_set(wireless_setting,
newkey, curr->data,
@@ -146,13 +144,13 @@ update_wireless_setting_from_if_block(NMConnection *connection,
g_byte_array_append (ssid, (const guint8 *) curr->data, len);
g_object_set (wireless_setting, NM_SETTING_WIRELESS_SSID, ssid, NULL);
g_byte_array_free (ssid, TRUE);
- PLUGIN_PRINT("SCPlugin-Ifupdown", "setting wpa ssid = %d", len);
+ nm_log_info (LOGD_SETTINGS, "setting wpa ssid = %d", len);
} else if(newkey) {
g_object_set(wireless_setting,
newkey, curr->data,
NULL);
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "setting wpa newkey(%s)=data(%s)", newkey, curr->data);
+ nm_log_info (LOGD_SETTINGS, "setting wpa newkey(%s)=data(%s)", newkey, curr->data);
}
}
curr = curr->next;
@@ -240,9 +238,7 @@ string_to_glist_of_strings(const gchar* data)
static void
slist_free_all(gpointer slist)
{
- GSList *list = (GSList *) slist;
- g_slist_foreach (list, (GFunc) g_free, NULL);
- g_slist_free (list);
+ g_slist_free_full ((GSList *) slist, g_free);
}
static void
@@ -315,7 +311,7 @@ update_wireless_security_setting_from_if_block(NMConnection *connection,
s_wireless = nm_connection_get_setting_wireless(connection);
g_return_if_fail(s_wireless);
- PLUGIN_PRINT ("SCPlugin-Ifupdown","update wireless security settings (%s).", block->name);
+ nm_log_info (LOGD_SETTINGS, "update wireless security settings (%s).", block->name);
wireless_security_setting =
NM_SETTING_WIRELESS_SECURITY(nm_setting_wireless_security_new());
@@ -330,12 +326,13 @@ update_wireless_security_setting_from_if_block(NMConnection *connection,
IfupdownStrToTypeFunc type_map_func = map_by_mapping (type_mapping, curr->key+wireless_l);
GFreeFunc free_func = map_by_mapping (free_type_mapping, curr->key+wireless_l);
if(!newkey || !dupe_func) {
- g_warning("no (wireless) mapping found for key: %s", curr->key);
+ nm_log_warn (LOGD_SETTINGS, "no (wireless) mapping found for key: %s",
+ curr->key);
goto next;
}
property_value = (*dupe_func) (curr->data, connection);
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "setting wireless security key: %s=%s",
- newkey, property_value);
+ nm_log_info (LOGD_SETTINGS, "setting wireless security key: %s=%s",
+ newkey, property_value);
if (type_map_func) {
errno = 0;
@@ -367,23 +364,23 @@ update_wireless_security_setting_from_if_block(NMConnection *connection,
goto next;
}
property_value = (*dupe_func) (curr->data, connection);
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "setting wpa security key: %s=%s",
- newkey,
+ nm_log_info (LOGD_SETTINGS, "setting wpa security key: %s=%s",
+ newkey,
#ifdef DEBUG_SECRETS
- property_value
+ property_value
#else // DEBUG_SECRETS
- !strcmp("key", newkey) ||
- !strcmp("leap-password", newkey) ||
- !strcmp("pin", newkey) ||
- !strcmp("psk", newkey) ||
- !strcmp("wep-key0", newkey) ||
- !strcmp("wep-key1", newkey) ||
- !strcmp("wep-key2", newkey) ||
- !strcmp("wep-key3", newkey) ||
- NULL ?
- "<omitted>" : property_value
+ !strcmp("key", newkey) ||
+ !strcmp("leap-password", newkey) ||
+ !strcmp("pin", newkey) ||
+ !strcmp("psk", newkey) ||
+ !strcmp("wep-key0", newkey) ||
+ !strcmp("wep-key1", newkey) ||
+ !strcmp("wep-key2", newkey) ||
+ !strcmp("wep-key3", newkey) ||
+ NULL ?
+ "<omitted>" : property_value
#endif // DEBUG_SECRETS
- );
+ );
if (type_map_func) {
errno = 0;
@@ -407,11 +404,8 @@ update_wireless_security_setting_from_if_block(NMConnection *connection,
}
- if(security) {
- nm_connection_add_setting(connection, NM_SETTING(wireless_security_setting));
- g_object_set(s_wireless, NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NULL);
- }
-
+ if (security)
+ nm_connection_add_setting (connection, NM_SETTING (wireless_security_setting));
}
static void
@@ -437,7 +431,7 @@ eni_plugin_error_quark() {
static void
ifupdown_ip4_add_dns (NMSettingIP4Config *s_ip4, const char *dns)
{
- struct in_addr addr;
+ guint32 addr;
char **list, **iter;
if (dns == NULL)
@@ -449,15 +443,12 @@ ifupdown_ip4_add_dns (NMSettingIP4Config *s_ip4, const char *dns)
if (g_ascii_isspace (*iter[0]))
continue;
if (!inet_pton (AF_INET, *iter, &addr)) {
- PLUGIN_WARN ("SCPlugin-Ifupdown",
- " warning: ignoring invalid nameserver '%s'", *iter);
+ nm_log_warn (LOGD_SETTINGS, " ignoring invalid nameserver '%s'", *iter);
continue;
}
- if (!nm_setting_ip4_config_add_dns (s_ip4, addr.s_addr)) {
- PLUGIN_WARN ("SCPlugin-Ifupdown",
- " warning: duplicate DNS domain '%s'", *iter);
- }
+ if (!nm_setting_ip4_config_add_dns (s_ip4, addr))
+ nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
}
@@ -475,7 +466,7 @@ update_ip4_setting_from_if_block(NMConnection *connection,
if (!is_static) {
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
} else {
- struct in_addr tmp_addr, tmp_mask, tmp_gw;
+ guint32 tmp_addr, tmp_mask, tmp_gw;
NMIP4Address *addr;
const char *address_v;
const char *netmask_v;
@@ -510,7 +501,7 @@ update_ip4_setting_from_if_block(NMConnection *connection,
"Invalid IPv4 netmask '%s'", netmask_v);
goto error;
} else {
- netmask_int = nm_utils_ip4_netmask_to_prefix (tmp_mask.s_addr);
+ netmask_int = nm_utils_ip4_netmask_to_prefix (tmp_mask);
}
}
@@ -526,16 +517,17 @@ update_ip4_setting_from_if_block(NMConnection *connection,
/* Add the new address to the setting */
addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, tmp_addr.s_addr);
+ nm_ip4_address_set_address (addr, tmp_addr);
nm_ip4_address_set_prefix (addr, netmask_int);
- nm_ip4_address_set_gateway (addr, tmp_gw.s_addr);
+ nm_ip4_address_set_gateway (addr, tmp_gw);
if (nm_setting_ip4_config_add_address (s_ip4, addr)) {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "addresses count: %d",
+ nm_log_info (LOGD_SETTINGS, "addresses count: %d",
nm_setting_ip4_config_get_num_addresses (s_ip4));
} else {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "ignoring duplicate IP4 address");
+ nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP4 address");
}
+ nm_ip4_address_unref (addr);
nameserver_v = ifparser_getkey (block, "dns-nameserver");
ifupdown_ip4_add_dns (s_ip4, nameserver_v);
@@ -544,7 +536,7 @@ update_ip4_setting_from_if_block(NMConnection *connection,
ifupdown_ip4_add_dns (s_ip4, nameservers_v);
if (!nm_setting_ip4_config_get_num_dns (s_ip4))
- PLUGIN_PRINT("SCPlugin-Ifupdown", "No dns-nameserver configured in /etc/network/interfaces");
+ nm_log_info (LOGD_SETTINGS, "No dns-nameserver configured in /etc/network/interfaces");
/* DNS searches */
search_v = ifparser_getkey (block, "dns-search");
@@ -554,10 +546,8 @@ update_ip4_setting_from_if_block(NMConnection *connection,
g_strstrip (*iter);
if (g_ascii_isspace (*iter[0]))
continue;
- if (!nm_setting_ip4_config_add_dns_search (s_ip4, *iter)) {
- PLUGIN_WARN ("SCPlugin-Ifupdown",
- " warning: duplicate DNS domain '%s'", *iter);
- }
+ if (!nm_setting_ip4_config_add_dns_search (s_ip4, *iter))
+ nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
}
@@ -588,15 +578,12 @@ ifupdown_ip6_add_dns (NMSettingIP6Config *s_ip6, const char *dns)
if (g_ascii_isspace (*iter[0]))
continue;
if (!inet_pton (AF_INET6, *iter, &addr)) {
- PLUGIN_WARN ("SCPlugin-Ifupdown",
- " warning: ignoring invalid nameserver '%s'", *iter);
+ nm_log_warn (LOGD_SETTINGS, " ignoring invalid nameserver '%s'", *iter);
continue;
}
- if (!nm_setting_ip6_config_add_dns (s_ip6, &addr)) {
- PLUGIN_WARN ("SCPlugin-Ifupdown",
- " warning: duplicate DNS domain '%s'", *iter);
- }
+ if (!nm_setting_ip6_config_add_dns (s_ip6, &addr))
+ nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
}
@@ -656,11 +643,12 @@ update_ip6_setting_from_if_block(NMConnection *connection,
nm_ip6_address_set_gateway (addr, &tmp_gw);
if (nm_setting_ip6_config_add_address (s_ip6, addr)) {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "addresses count: %d",
- nm_setting_ip6_config_get_num_addresses (s_ip6));
+ nm_log_info (LOGD_SETTINGS, "addresses count: %d",
+ nm_setting_ip6_config_get_num_addresses (s_ip6));
} else {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "ignoring duplicate IP6 address");
+ nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP6 address");
}
+ nm_ip6_address_unref (addr);
nameserver_v = ifparser_getkey(block, "dns-nameserver");
ifupdown_ip6_add_dns (s_ip6, nameserver_v);
@@ -669,7 +657,7 @@ update_ip6_setting_from_if_block(NMConnection *connection,
ifupdown_ip6_add_dns (s_ip6, nameservers_v);
if (!nm_setting_ip6_config_get_num_dns (s_ip6))
- PLUGIN_PRINT("SCPlugin-Ifupdown", "No dns-nameserver configured in /etc/network/interfaces");
+ nm_log_info (LOGD_SETTINGS, "No dns-nameserver configured in /etc/network/interfaces");
/* DNS searches */
search_v = ifparser_getkey (block, "dns-search");
@@ -679,10 +667,8 @@ update_ip6_setting_from_if_block(NMConnection *connection,
g_strstrip (*iter);
if (isblank (*iter[0]))
continue;
- if (!nm_setting_ip6_config_add_dns_search (s_ip6, *iter)) {
- PLUGIN_WARN ("SCPlugin-Ifupdown",
- " warning: duplicate DNS domain '%s'", *iter);
- }
+ if (!nm_setting_ip6_config_add_dns_search (s_ip6, *iter))
+ nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
}
@@ -726,6 +712,7 @@ ifupdown_update_connection_from_if_block (NMConnection *connection,
uuid = nm_utils_uuid_generate_from_string (uuid_base);
g_object_set (s_con,
NM_SETTING_CONNECTION_TYPE, type,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, block->name,
NM_SETTING_CONNECTION_ID, idstr,
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_READ_ONLY, TRUE,
@@ -733,8 +720,8 @@ ifupdown_update_connection_from_if_block (NMConnection *connection,
NULL);
g_free (uuid);
- PLUGIN_PRINT("SCPlugin-Ifupdown", "update_connection_setting_from_if_block: name:%s, type:%s, id:%s, uuid: %s",
- block->name, type, idstr, nm_setting_connection_get_uuid (s_con));
+ nm_log_info (LOGD_SETTINGS, "update_connection_setting_from_if_block: name:%s, type:%s, id:%s, uuid: %s",
+ block->name, type, idstr, nm_setting_connection_get_uuid (s_con));
if (!strcmp (NM_SETTING_WIRED_SETTING_NAME, type))
update_wired_setting_from_if_block (connection, block);
diff --git a/src/settings/plugins/ifupdown/plugin.c b/src/settings/plugins/ifupdown/plugin.c
index a46ea2e8e..dcae211c4 100644
--- a/src/settings/plugins/ifupdown/plugin.c
+++ b/src/settings/plugins/ifupdown/plugin.c
@@ -50,6 +50,7 @@
#include "nm-inotify-helper.h"
#include "nm-logging.h"
+#include "nm-config.h"
#include <arpa/inet.h>
@@ -85,7 +86,6 @@ typedef struct {
GHashTable *kernel_ifaces;
gboolean unmanage_well_known;
- char *conf_file;
gulong inotify_event_id;
int inotify_system_hostname_wd;
@@ -182,13 +182,6 @@ sc_plugin_ifupdown_class_init (SCPluginIfupdownClass *req_class)
}
static void
-ignore_cb (NMSettingsConnection *connection,
- GError *error,
- gpointer user_data)
-{
-}
-
-static void
bind_device_to_connection (SCPluginIfupdown *self,
GUdevDevice *device,
NMIfupdownConnection *exported)
@@ -200,19 +193,19 @@ bind_device_to_connection (SCPluginIfupdown *self,
iface = g_udev_device_get_name (device);
if (!iface) {
- PLUGIN_WARN ("SCPluginIfupdown", "failed to get ifname for device.");
+ nm_log_warn (LOGD_SETTINGS, "failed to get ifname for device.");
return;
}
address = g_udev_device_get_sysfs_attr (device, "address");
if (!address || !strlen (address)) {
- PLUGIN_WARN ("SCPluginIfupdown", "failed to get MAC address for %s", iface);
+ nm_log_warn (LOGD_SETTINGS, "failed to get MAC address for %s", iface);
return;
}
mac_address = nm_utils_hwaddr_atoba (address, ARPHRD_ETHER);
if (!mac_address) {
- PLUGIN_WARN ("SCPluginIfupdown", "failed to parse MAC address '%s' for %s",
+ nm_log_warn (LOGD_SETTINGS, "failed to parse MAC address '%s' for %s",
address, iface);
return;
}
@@ -220,15 +213,15 @@ bind_device_to_connection (SCPluginIfupdown *self,
s_wired = nm_connection_get_setting_wired (NM_CONNECTION (exported));
s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (exported));
if (s_wired) {
- PLUGIN_PRINT ("SCPluginIfupdown", "locking wired connection setting");
+ nm_log_info (LOGD_SETTINGS, "locking wired connection setting");
g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac_address, NULL);
} else if (s_wifi) {
- PLUGIN_PRINT ("SCPluginIfupdown", "locking wireless connection setting");
+ nm_log_info (LOGD_SETTINGS, "locking wireless connection setting");
g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, mac_address, NULL);
}
g_byte_array_free (mac_address, TRUE);
- nm_settings_connection_commit_changes (NM_SETTINGS_CONNECTION (exported), ignore_cb, NULL);
+ nm_settings_connection_commit_changes (NM_SETTINGS_CONNECTION (exported), NULL, NULL);
}
static void
@@ -243,16 +236,15 @@ udev_device_added (SCPluginIfupdown *self, GUdevDevice *device)
if (!iface || !path)
return;
- PLUGIN_PRINT("SCPlugin-Ifupdown",
- "devices added (path: %s, iface: %s)", path, iface);
+ nm_log_info (LOGD_SETTINGS, "devices added (path: %s, iface: %s)", path, iface);
/* if we have a configured connection for this particular iface
* we want to either unmanage the device or lock it
*/
exported = g_hash_table_lookup (priv->connections, iface);
if (!exported && !g_hash_table_lookup (priv->eni_ifaces, iface)) {
- PLUGIN_PRINT("SCPlugin-Ifupdown",
- "device added (path: %s, iface: %s): no ifupdown configuration found.", path, iface);
+ nm_log_info (LOGD_SETTINGS, "device added (path: %s, iface: %s): no ifupdown configuration found.",
+ path, iface);
return;
}
@@ -276,8 +268,7 @@ udev_device_removed (SCPluginIfupdown *self, GUdevDevice *device)
if (!iface || !path)
return;
- PLUGIN_PRINT("SCPlugin-Ifupdown",
- "devices removed (path: %s, iface: %s)", path, iface);
+ nm_log_info (LOGD_SETTINGS, "devices removed (path: %s, iface: %s)", path, iface);
if (!g_hash_table_remove (priv->kernel_ifaces, iface))
return;
@@ -297,7 +288,7 @@ udev_device_changed (SCPluginIfupdown *self, GUdevDevice *device)
if (!iface || !path)
return;
- PLUGIN_PRINT("SCPlugin-Ifupdown", "device changed (path: %s, iface: %s)", path, iface);
+ nm_log_info (LOGD_SETTINGS, "device changed (path: %s, iface: %s)", path, iface);
if (!g_hash_table_lookup (priv->kernel_ifaces, iface))
return;
@@ -338,7 +329,7 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
GHashTable *auto_ifaces;
if_block *block = NULL;
NMInotifyHelper *inotify_helper;
- GKeyFile* keyfile;
+ char *value;
GError *error = NULL;
GList *keys, *iter;
GHashTableIter con_iter;
@@ -357,11 +348,11 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
if(!priv->eni_ifaces)
priv->eni_ifaces = g_hash_table_new (g_str_hash, g_str_equal);
- PLUGIN_PRINT("SCPlugin-Ifupdown", "init!");
+ nm_log_info (LOGD_SETTINGS, "init!");
priv->client = g_udev_client_new (subsys);
if (!priv->client) {
- PLUGIN_WARN ("SCPlugin-Ifupdown", " error initializing libgudev");
+ nm_log_warn (LOGD_SETTINGS, " error initializing libgudev");
} else
g_signal_connect (priv->client, "uevent", G_CALLBACK (handle_uevent), self);
@@ -396,7 +387,7 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
int state = 0;
char **port_ifaces;
- PLUGIN_PRINT("SCPlugin-Ifupdown", "found bridge ports %s for %s", ports, block->name);
+ nm_log_info (LOGD_SETTINGS, "found bridge ports %s for %s", ports, block->name);
port_ifaces = g_strsplit_set (ports, " \t", -1);
for (i = 0; i < g_strv_length (port_ifaces); i++) {
@@ -415,7 +406,7 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
continue;
}
if (state == 0 && strlen (token) > 0) {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "adding bridge port %s to eni_ifaces", token);
+ nm_log_info (LOGD_SETTINGS, "adding bridge port %s to eni_ifaces", token);
g_hash_table_insert (priv->eni_ifaces, g_strdup (token), "known");
}
}
@@ -432,22 +423,22 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
/* Remove any connection for this block that was previously found */
exported = g_hash_table_lookup (priv->connections, block->name);
if (exported) {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "deleting %s from connections", block->name);
- nm_settings_connection_delete (NM_SETTINGS_CONNECTION (exported), ignore_cb, NULL);
+ nm_log_info (LOGD_SETTINGS, "deleting %s from connections", block->name);
+ nm_settings_connection_delete (NM_SETTINGS_CONNECTION (exported), NULL, NULL);
g_hash_table_remove (priv->connections, block->name);
}
/* add the new connection */
exported = nm_ifupdown_connection_new (block);
if (exported) {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "adding %s to connections", block->name);
+ nm_log_info (LOGD_SETTINGS, "adding %s to connections", block->name);
g_hash_table_insert (priv->connections, block->name, exported);
}
- PLUGIN_PRINT("SCPlugin-Ifupdown", "adding iface %s to eni_ifaces", block->name);
+ nm_log_info (LOGD_SETTINGS, "adding iface %s to eni_ifaces", block->name);
g_hash_table_insert (priv->eni_ifaces, block->name, "known");
} else if (!strcmp ("mapping", block->type)) {
g_hash_table_insert (priv->eni_ifaces, block->name, "known");
- PLUGIN_PRINT("SCPlugin-Ifupdown", "adding mapping %s to eni_ifaces", block->name);
+ nm_log_info (LOGD_SETTINGS, "adding mapping %s to eni_ifaces", block->name);
}
next:
block = block->next;
@@ -461,41 +452,28 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
if (g_hash_table_lookup (auto_ifaces, block_name)) {
setting = nm_connection_get_setting_connection (NM_CONNECTION (connection));
g_object_set (setting, NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, NULL);
- PLUGIN_PRINT("SCPlugin-Ifupdown", "autoconnect");
+ nm_log_info (LOGD_SETTINGS, "autoconnect");
}
}
g_hash_table_destroy (auto_ifaces);
- /* Read the config file to find out whether to manage interfaces */
- keyfile = g_key_file_new ();
- if (!g_key_file_load_from_file (keyfile,
- priv->conf_file,
- G_KEY_FILE_NONE,
- &error)) {
- nm_log_info (LOGD_SETTINGS, "loading system config file (%s) caused error: (%d) %s",
- priv->conf_file,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
+ /* Check the config file to find out whether to manage interfaces */
+ value = nm_config_get_value (nm_config_get (),
+ IFUPDOWN_KEY_FILE_GROUP, IFUPDOWN_KEY_FILE_KEY_MANAGED,
+ &error);
+ if (error) {
+ nm_log_info (LOGD_SETTINGS, "loading system config file (%s) caused error: %s",
+ nm_config_get_path (nm_config_get ()),
+ error->message);
} else {
gboolean manage_well_known;
error = NULL;
- manage_well_known = g_key_file_get_boolean (keyfile,
- IFUPDOWN_KEY_FILE_GROUP,
- IFUPDOWN_KEY_FILE_KEY_MANAGED,
- &error);
- if (error) {
- nm_log_info (LOGD_SETTINGS, "getting keyfile key '%s' in group '%s' failed: (%d) %s",
- IFUPDOWN_KEY_FILE_GROUP,
- IFUPDOWN_KEY_FILE_KEY_MANAGED,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- } else
- priv->unmanage_well_known = !manage_well_known;
+ manage_well_known = !g_strcmp0 (value, "true") || !g_strcmp0 (value, "1");
+ priv->unmanage_well_known = !manage_well_known;
+ g_free (value);
}
- PLUGIN_PRINT ("SCPluginIfupdown", "management mode: %s", priv->unmanage_well_known ? "unmanaged" : "managed");
- if (keyfile)
- g_key_file_free (keyfile);
+ nm_log_info (LOGD_SETTINGS, "management mode: %s", priv->unmanage_well_known ? "unmanaged" : "managed");
/* Add well-known interfaces */
keys = g_udev_client_query_by_subsystem (priv->client, "net");
@@ -518,7 +496,7 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
g_list_free (con_list);
}
- PLUGIN_PRINT("SCPlugin-Ifupdown", "end _init.");
+ nm_log_info (LOGD_SETTINGS, "end _init.");
}
@@ -533,10 +511,10 @@ SCPluginIfupdown_get_connections (NMSystemConfigInterface *config)
GHashTableIter iter;
gpointer value;
- PLUGIN_PRINT("SCPlugin-Ifupdown", "(%d) ... get_connections.", GPOINTER_TO_UINT(config));
+ nm_log_info (LOGD_SETTINGS, "(%d) ... get_connections.", GPOINTER_TO_UINT(config));
if(priv->unmanage_well_known) {
- PLUGIN_PRINT("SCPlugin-Ifupdown", "(%d) ... get_connections (managed=false): return empty list.", GPOINTER_TO_UINT(config));
+ nm_log_info (LOGD_SETTINGS, "(%d) ... get_connections (managed=false): return empty list.", GPOINTER_TO_UINT(config));
return NULL;
}
@@ -544,7 +522,7 @@ SCPluginIfupdown_get_connections (NMSystemConfigInterface *config)
while (g_hash_table_iter_next (&iter, NULL, &value))
connections = g_slist_prepend (connections, value);
- PLUGIN_PRINT("SCPlugin-Ifupdown", "(%d) connections count: %d", GPOINTER_TO_UINT(config), g_slist_length(connections));
+ nm_log_info (LOGD_SETTINGS, "(%d) connections count: %d", GPOINTER_TO_UINT(config), g_slist_length(connections));
return connections;
}
@@ -559,22 +537,24 @@ SCPluginIfupdown_get_unmanaged_specs (NMSystemConfigInterface *config)
SCPluginIfupdownPrivate *priv = SC_PLUGIN_IFUPDOWN_GET_PRIVATE (config);
GSList *specs = NULL;
GHashTableIter iter;
- gpointer value;
+ GUdevDevice *device;
+ const char *iface;
if (!ALWAYS_UNMANAGE && !priv->unmanage_well_known)
return NULL;
- PLUGIN_PRINT("Ifupdown", "get unmanaged devices count: %d",
+ nm_log_info (LOGD_SETTINGS, "get unmanaged devices count: %d",
g_hash_table_size (priv->kernel_ifaces));
g_hash_table_iter_init (&iter, priv->kernel_ifaces);
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- GUdevDevice *device = G_UDEV_DEVICE (value);
+ while (g_hash_table_iter_next (&iter, (gpointer) &iface, (gpointer) &device)) {
const char *address;
address = g_udev_device_get_sysfs_attr (device, "address");
if (address)
specs = g_slist_append (specs, g_strdup_printf ("mac:%s", address));
+ else
+ specs = g_slist_append (specs, g_strdup_printf ("interface-name:%s", iface));
}
return specs;
}
@@ -598,7 +578,7 @@ update_system_hostname(NMInotifyHelper *inotify_helper,
gsize hostname_file_len = 0;
GError *error = NULL;
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "update_system_hostname");
+ nm_log_info (LOGD_SETTINGS, "update_system_hostname");
if (evt && evt->wd != priv->inotify_system_hostname_wd)
return;
@@ -608,8 +588,8 @@ update_system_hostname(NMInotifyHelper *inotify_helper,
&hostname_file_len,
&error)) {
nm_log_warn (LOGD_SETTINGS, "update_system_hostname() - couldn't read "
- IFUPDOWN_SYSTEM_HOSTNAME_FILE " (%d/%s)",
- error->code, error->message);
+ IFUPDOWN_SYSTEM_HOSTNAME_FILE " (%d/%s)",
+ error->code, error->message);
return;
}
@@ -631,7 +611,7 @@ write_system_hostname(NMSystemConfigInterface *config,
{
GError *error = NULL;
SCPluginIfupdownPrivate *priv = SC_PLUGIN_IFUPDOWN_GET_PRIVATE (config);
- PLUGIN_PRINT ("SCPlugin-Ifupdown", "write_system_hostname: %s", newhostname);
+ nm_log_info (LOGD_SETTINGS, "write_system_hostname: %s", newhostname);
g_return_if_fail (newhostname);
@@ -640,8 +620,8 @@ write_system_hostname(NMSystemConfigInterface *config,
-1,
&error)) {
nm_log_warn (LOGD_SETTINGS, "update_system_hostname() - couldn't write hostname (%s) to "
- IFUPDOWN_SYSTEM_HOSTNAME_FILE " (%d/%s)",
- newhostname, error->code, error->message);
+ IFUPDOWN_SYSTEM_HOSTNAME_FILE " (%d/%s)",
+ newhostname, error->code, error->message);
} else {
priv->hostname = g_strdup (newhostname);
}
@@ -719,8 +699,6 @@ GObject__dispose (GObject *object)
if (priv->eni_ifaces)
g_hash_table_destroy(priv->eni_ifaces);
- g_free (priv->conf_file);
-
if (priv->client)
g_object_unref (priv->client);
@@ -729,17 +707,14 @@ GObject__dispose (GObject *object)
}
G_MODULE_EXPORT GObject *
-nm_system_config_factory (const char *config_file)
+nm_system_config_factory (void)
{
static SCPluginIfupdown *singleton = NULL;
SCPluginIfupdownPrivate *priv;
if (!singleton) {
singleton = SC_PLUGIN_IFUPDOWN (g_object_new (SC_TYPE_PLUGIN_IFUPDOWN, NULL));
- if (singleton) {
- priv = SC_PLUGIN_IFUPDOWN_GET_PRIVATE (singleton);
- priv->conf_file = strdup (config_file);
- }
+ priv = SC_PLUGIN_IFUPDOWN_GET_PRIVATE (singleton);
} else
g_object_ref (singleton);
diff --git a/src/settings/plugins/ifupdown/tests/Makefile.am b/src/settings/plugins/ifupdown/tests/Makefile.am
index d82868679..160b33272 100644
--- a/src/settings/plugins/ifupdown/tests/Makefile.am
+++ b/src/settings/plugins/ifupdown/tests/Makefile.am
@@ -1,33 +1,41 @@
if ENABLE_TESTS
-noinst_PROGRAMS = test-ifupdown
-
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/settings \
-I$(srcdir)/../ \
+ -DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
-DTEST_ENI_DIR=\"$(abs_srcdir)\"
+noinst_PROGRAMS = test-ifupdown
+
test_ifupdown_SOURCES = \
- test-ifupdown.c
+ test-ifupdown.c \
+ ../interface_parser.c \
+ ../parser.c
test_ifupdown_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la \
$(top_builddir)/libnm-glib/libnm-glib.la \
$(top_builddir)/libnm-util/libnm-util.la \
- $(builddir)/../libifupdown-io.la \
$(DBUS_LIBS)
-check-local: test-ifupdown
- $(abs_builddir)/test-ifupdown
+TESTS = test-ifupdown
EXTRA_DIST = \
test1 test2 test3 test4 test5 test6 test7 test8 test9 test11 test12 \
test13 test14 test15 test16 test17-wired-static-verify-ip4 \
- test18-wired-static-verify-ip6 test19-wired-static-verify-ip4-plen
+ test18-wired-static-verify-ip6 test19-wired-static-verify-ip4-plen \
+ test20-source-stanza test20-source-stanza.eth0 test20-source-stanza.eth1
endif
diff --git a/src/settings/plugins/ifupdown/tests/Makefile.in b/src/settings/plugins/ifupdown/tests/Makefile.in
index 7fea5c877..86afefe66 100644
--- a/src/settings/plugins/ifupdown/tests/Makefile.in
+++ b/src/settings/plugins/ifupdown/tests/Makefile.in
@@ -79,11 +79,13 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-ifupdown$(EXEEXT)
+@ENABLE_TESTS_TRUE@TESTS = test-ifupdown$(EXEEXT)
subdir = src/settings/plugins/ifupdown/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,14 +104,16 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_ifupdown_SOURCES_DIST = test-ifupdown.c
-@ENABLE_TESTS_TRUE@am_test_ifupdown_OBJECTS = test-ifupdown.$(OBJEXT)
+am__test_ifupdown_SOURCES_DIST = test-ifupdown.c ../interface_parser.c \
+ ../parser.c
+@ENABLE_TESTS_TRUE@am_test_ifupdown_OBJECTS = test-ifupdown.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ interface_parser.$(OBJEXT) parser.$(OBJEXT)
test_ifupdown_OBJECTS = $(am_test_ifupdown_OBJECTS)
am__DEPENDENCIES_1 =
@ENABLE_TESTS_TRUE@test_ifupdown_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libifupdown-io.la \
@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -175,6 +179,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -201,12 +227,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -231,7 +260,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -276,12 +304,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -298,6 +330,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -325,11 +359,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -344,6 +383,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -406,6 +446,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -416,30 +457,40 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-glib \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/logging \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/settings \
@ENABLE_TESTS_TRUE@ -I$(srcdir)/../ \
+@ENABLE_TESTS_TRUE@ -DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(POLKIT_CFLAGS) \
@ENABLE_TESTS_TRUE@ -DTEST_ENI_DIR=\"$(abs_srcdir)\"
@ENABLE_TESTS_TRUE@test_ifupdown_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-ifupdown.c
+@ENABLE_TESTS_TRUE@ test-ifupdown.c \
+@ENABLE_TESTS_TRUE@ ../interface_parser.c \
+@ENABLE_TESTS_TRUE@ ../parser.c
@ENABLE_TESTS_TRUE@test_ifupdown_LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libifupdown-io.la \
@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
@ENABLE_TESTS_TRUE@EXTRA_DIST = \
@ENABLE_TESTS_TRUE@ test1 test2 test3 test4 test5 test6 test7 test8 test9 test11 test12 \
@ENABLE_TESTS_TRUE@ test13 test14 test15 test16 test17-wired-static-verify-ip4 \
-@ENABLE_TESTS_TRUE@ test18-wired-static-verify-ip6 test19-wired-static-verify-ip4-plen
+@ENABLE_TESTS_TRUE@ test18-wired-static-verify-ip6 test19-wired-static-verify-ip4-plen \
+@ENABLE_TESTS_TRUE@ test20-source-stanza test20-source-stanza.eth0 test20-source-stanza.eth1
all: all-am
@@ -495,6 +546,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface_parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ifupdown.Po@am__quote@
.c.o:
@@ -518,6 +571,34 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+interface_parser.o: ../interface_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interface_parser.o -MD -MP -MF $(DEPDIR)/interface_parser.Tpo -c -o interface_parser.o `test -f '../interface_parser.c' || echo '$(srcdir)/'`../interface_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/interface_parser.Tpo $(DEPDIR)/interface_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../interface_parser.c' object='interface_parser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o interface_parser.o `test -f '../interface_parser.c' || echo '$(srcdir)/'`../interface_parser.c
+
+interface_parser.obj: ../interface_parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interface_parser.obj -MD -MP -MF $(DEPDIR)/interface_parser.Tpo -c -o interface_parser.obj `if test -f '../interface_parser.c'; then $(CYGPATH_W) '../interface_parser.c'; else $(CYGPATH_W) '$(srcdir)/../interface_parser.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/interface_parser.Tpo $(DEPDIR)/interface_parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../interface_parser.c' object='interface_parser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o interface_parser.obj `if test -f '../interface_parser.c'; then $(CYGPATH_W) '../interface_parser.c'; else $(CYGPATH_W) '$(srcdir)/../interface_parser.c'; fi`
+
+parser.o: ../parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parser.o -MD -MP -MF $(DEPDIR)/parser.Tpo -c -o parser.o `test -f '../parser.c' || echo '$(srcdir)/'`../parser.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parser.Tpo $(DEPDIR)/parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../parser.c' object='parser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parser.o `test -f '../parser.c' || echo '$(srcdir)/'`../parser.c
+
+parser.obj: ../parser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parser.obj -MD -MP -MF $(DEPDIR)/parser.Tpo -c -o parser.obj `if test -f '../parser.c'; then $(CYGPATH_W) '../parser.c'; else $(CYGPATH_W) '$(srcdir)/../parser.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parser.Tpo $(DEPDIR)/parser.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../parser.c' object='parser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parser.obj `if test -f '../parser.c'; then $(CYGPATH_W) '../parser.c'; else $(CYGPATH_W) '$(srcdir)/../parser.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -576,6 +657,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -606,9 +780,8 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
@@ -715,7 +888,7 @@ uninstall-am:
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
@@ -730,9 +903,6 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-@ENABLE_TESTS_TRUE@check-local: test-ifupdown
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-ifupdown
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/settings/plugins/ifupdown/tests/test-ifupdown.c b/src/settings/plugins/ifupdown/tests/test-ifupdown.c
index 81a0c64a5..838642870 100644
--- a/src/settings/plugins/ifupdown/tests/test-ifupdown.c
+++ b/src/settings/plugins/ifupdown/tests/test-ifupdown.c
@@ -23,10 +23,12 @@
#include <nm-utils.h>
-#include "nm-test-helpers.h"
+#include "nm-logging.h"
#include "interface_parser.h"
#include "parser.h"
+#include "nm-test-utils.h"
+
typedef struct {
char *key;
char *data;
@@ -48,17 +50,16 @@ expected_key_new (const char *key, const char *data)
ExpectedKey *k;
k = g_malloc0 (sizeof (ExpectedKey));
- g_assert (k);
k->key = g_strdup (key);
- g_assert (k->key);
k->data = g_strdup (data);
- g_assert (k->data);
return k;
}
static void
-expected_key_free (ExpectedKey *k)
+expected_key_free (gpointer ptr)
{
+ ExpectedKey *k = ptr;
+
g_assert (k);
g_free (k->key);
g_free (k->data);
@@ -81,11 +82,12 @@ expected_block_new (const char *type, const char *name)
}
static void
-expected_block_free (ExpectedBlock *b)
+expected_block_free (gpointer ptr)
{
+ ExpectedBlock *b = ptr;
+
g_assert (b);
- g_slist_foreach (b->keys, (GFunc) expected_key_free, NULL);
- g_slist_free (b->keys);
+ g_slist_free_full (b->keys, expected_key_free);
g_free (b->type);
g_free (b->name);
memset (b, 0, sizeof (ExpectedBlock));
@@ -103,11 +105,7 @@ expected_block_add_key (ExpectedBlock *b, ExpectedKey *k)
static Expected *
expected_new (void)
{
- Expected *e;
-
- e = g_malloc0 (sizeof (Expected));
- g_assert (e);
- return e;
+ return g_malloc0 (sizeof (Expected));
}
static void
@@ -122,8 +120,7 @@ static void
expected_free (Expected *e)
{
g_assert (e);
- g_slist_foreach (e->blocks, (GFunc) expected_block_free, NULL);
- g_slist_free (e->blocks);
+ g_slist_free_full (e->blocks, expected_block_free);
memset (e, 0, sizeof (Expected));
g_free (e);
}
@@ -476,7 +473,7 @@ test17_read_static_ipv4 (const char *path)
const char *expected_search2 = "foo.example.com";
guint32 expected_prefix = 8;
NMIP4Address *ip4_addr;
- struct in_addr addr;
+ guint32 addr;
#define TEST17_NAME "wired-static-verify-ip4"
if_block *block = NULL;
@@ -561,9 +558,9 @@ test17_read_static_ipv4 (const char *path)
TEST17_NAME, "failed to verify %s: unexpected IP4 address prefix",
file);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
TEST17_NAME, "failed to verify %s: unexpected IP4 address: %s",
- file, addr.s_addr);
+ file, addr);
/* DNS Addresses */
ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
@@ -578,7 +575,7 @@ test17_read_static_ipv4 (const char *path)
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value #1",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -590,7 +587,7 @@ test17_read_static_ipv4 (const char *path)
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value #2",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -848,7 +845,7 @@ test19_read_static_ipv4_plen (const char *path)
const char *expected_address = "10.0.0.3";
guint32 expected_prefix = 8;
NMIP4Address *ip4_addr;
- struct in_addr addr;
+ guint32 addr;
#define TEST19_NAME "wired-static-verify-ip4-plen"
if_block *block = NULL;
@@ -896,57 +893,96 @@ test19_read_static_ipv4_plen (const char *path)
TEST19_NAME, "failed to verify %s: unexpected IP4 address prefix",
file);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+ ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
TEST19_NAME, "failed to verify %s: unexpected IP4 address: %s",
- file, addr.s_addr);
+ file, addr);
g_object_unref (connection);
}
+static void
+test20_source_stanza (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
+ e = expected_new ();
+
+ b = expected_block_new ("auto", "eth0");
+ expected_add_block (e, b);
+ b = expected_block_new ("iface", "eth0");
+ expected_add_block (e, b);
+ expected_block_add_key (b, expected_key_new ("inet", "dhcp"));
-#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
+ b = expected_block_new ("auto", "eth1");
+ expected_add_block (e, b);
+ b = expected_block_new ("iface", "eth1");
+ expected_add_block (e, b);
+ expected_block_add_key (b, expected_key_new ("inet", "dhcp"));
-int main (int argc, char **argv)
+ init_ifparser_with_file (path, "test20-source-stanza");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+int
+main (int argc, char **argv)
{
- GTestSuite *suite;
GError *error = NULL;
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
if (!nm_utils_init (&error))
FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
+ nm_logging_setup ("WARN", "DEFAULT", NULL, NULL);
g_test_init (&argc, &argv, NULL);
- suite = g_test_get_root ();
-
if (0)
dump_blocks ();
- g_test_suite_add (suite, TESTCASE (test1_ignore_line_before_first_block, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test2_wrapped_line, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test3_wrapped_multiline_multiarg, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test4_allow_auto_is_auto, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test5_allow_auto_multiarg, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test6_mixed_whitespace, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test7_long_line, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test8_long_line_wrapped, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test9_wrapped_lines_in_block, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test11_complex_wrap, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test12_complex_wrap_split_word, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test13_more_mixed_whitespace, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test14_mixed_whitespace_block_start, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test15_trailing_space, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test16_missing_newline, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test17_read_static_ipv4, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test18_read_static_ipv6, TEST_ENI_DIR));
- g_test_suite_add (suite, TESTCASE (test19_read_static_ipv4_plen, TEST_ENI_DIR));
+ g_test_add_data_func ("/ifupdate/ignore_line_before_first_block", TEST_ENI_DIR,
+ (GTestDataFunc) test1_ignore_line_before_first_block);
+ g_test_add_data_func ("/ifupdate/wrapped_line", TEST_ENI_DIR,
+ (GTestDataFunc) test2_wrapped_line);
+ g_test_add_data_func ("/ifupdate/wrapped_multiline_multiarg", TEST_ENI_DIR,
+ (GTestDataFunc) test3_wrapped_multiline_multiarg);
+ g_test_add_data_func ("/ifupdate/allow_auto_is_auto", TEST_ENI_DIR,
+ (GTestDataFunc) test4_allow_auto_is_auto);
+ g_test_add_data_func ("/ifupdate/allow_auto_multiarg", TEST_ENI_DIR,
+ (GTestDataFunc) test5_allow_auto_multiarg);
+ g_test_add_data_func ("/ifupdate/mixed_whitespace", TEST_ENI_DIR,
+ (GTestDataFunc) test6_mixed_whitespace);
+ g_test_add_data_func ("/ifupdate/long_line", TEST_ENI_DIR,
+ (GTestDataFunc) test7_long_line);
+ g_test_add_data_func ("/ifupdate/long_line_wrapped", TEST_ENI_DIR,
+ (GTestDataFunc) test8_long_line_wrapped);
+ g_test_add_data_func ("/ifupdate/wrapped_lines_in_block", TEST_ENI_DIR,
+ (GTestDataFunc) test9_wrapped_lines_in_block);
+ g_test_add_data_func ("/ifupdate/complex_wrap", TEST_ENI_DIR,
+ (GTestDataFunc) test11_complex_wrap);
+ g_test_add_data_func ("/ifupdate/complex_wrap_split_word", TEST_ENI_DIR,
+ (GTestDataFunc) test12_complex_wrap_split_word);
+ g_test_add_data_func ("/ifupdate/more_mixed_whitespace", TEST_ENI_DIR,
+ (GTestDataFunc) test13_more_mixed_whitespace);
+ g_test_add_data_func ("/ifupdate/mixed_whitespace_block_start", TEST_ENI_DIR,
+ (GTestDataFunc) test14_mixed_whitespace_block_start);
+ g_test_add_data_func ("/ifupdate/trailing_space", TEST_ENI_DIR,
+ (GTestDataFunc) test15_trailing_space);
+ g_test_add_data_func ("/ifupdate/missing_newline", TEST_ENI_DIR,
+ (GTestDataFunc) test16_missing_newline);
+ g_test_add_data_func ("/ifupdate/read_static_ipv4", TEST_ENI_DIR,
+ (GTestDataFunc) test17_read_static_ipv4);
+ g_test_add_data_func ("/ifupdate/read_static_ipv6", TEST_ENI_DIR,
+ (GTestDataFunc) test18_read_static_ipv6);
+ g_test_add_data_func ("/ifupdate/read_static_ipv4_plen", TEST_ENI_DIR,
+ (GTestDataFunc) test19_read_static_ipv4_plen);
+ g_test_add_data_func ("/ifupdate/source_stanza", TEST_ENI_DIR,
+ (GTestDataFunc) test20_source_stanza);
return g_test_run ();
}
diff --git a/src/settings/plugins/ifupdown/tests/test20-source-stanza b/src/settings/plugins/ifupdown/tests/test20-source-stanza
new file mode 100644
index 000000000..5cfe1730c
--- /dev/null
+++ b/src/settings/plugins/ifupdown/tests/test20-source-stanza
@@ -0,0 +1 @@
+source test20-source-stanza.eth*
diff --git a/src/settings/plugins/ifupdown/tests/test20-source-stanza.eth0 b/src/settings/plugins/ifupdown/tests/test20-source-stanza.eth0
new file mode 100644
index 000000000..81922cea6
--- /dev/null
+++ b/src/settings/plugins/ifupdown/tests/test20-source-stanza.eth0
@@ -0,0 +1,2 @@
+auto eth0
+iface eth0 inet dhcp
diff --git a/src/settings/plugins/ifupdown/tests/test20-source-stanza.eth1 b/src/settings/plugins/ifupdown/tests/test20-source-stanza.eth1
new file mode 100644
index 000000000..b8a783f58
--- /dev/null
+++ b/src/settings/plugins/ifupdown/tests/test20-source-stanza.eth1
@@ -0,0 +1,2 @@
+auto eth1
+iface eth1 inet dhcp
diff --git a/src/settings/plugins/keyfile/Makefile.am b/src/settings/plugins/keyfile/Makefile.am
index b0cd688a0..cac97e7fb 100644
--- a/src/settings/plugins/keyfile/Makefile.am
+++ b/src/settings/plugins/keyfile/Makefile.am
@@ -1,13 +1,21 @@
SUBDIRS = . tests
+@GNOME_CODE_COVERAGE_RULES@
+
AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/config \
+ -I$(top_srcdir)/src/logging \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
-DNMCONFDIR=\"$(nmconfdir)\"
noinst_LTLIBRARIES = \
diff --git a/src/settings/plugins/keyfile/Makefile.in b/src/settings/plugins/keyfile/Makefile.in
index 79dfcb423..8c4d6101b 100644
--- a/src/settings/plugins/keyfile/Makefile.in
+++ b/src/settings/plugins/keyfile/Makefile.in
@@ -82,7 +82,8 @@ subdir = src/settings/plugins/keyfile
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -250,12 +251,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -280,7 +284,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -325,12 +328,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -347,6 +354,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -374,11 +383,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -393,6 +407,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -455,6 +470,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -465,15 +481,22 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
SUBDIRS = . tests
AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/config \
+ -I$(top_srcdir)/src/logging \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
-DNMCONFDIR=\"$(nmconfdir)\"
noinst_LTLIBRARIES = \
@@ -881,6 +904,8 @@ uninstall-am:
tags tags-am uninstall uninstall-am
+@GNOME_CODE_COVERAGE_RULES@
+
install-data-hook:
$(mkinstalldirs) -m 0755 $(DESTDIR)$(keyfiledir)
diff --git a/src/settings/plugins/keyfile/common.h b/src/settings/plugins/keyfile/common.h
index d48c32f28..4faa5a848 100644
--- a/src/settings/plugins/keyfile/common.h
+++ b/src/settings/plugins/keyfile/common.h
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2008 - 2010 Red Hat, Inc.
+ * (C) Copyright 2008 - 2013 Red Hat, Inc.
*/
#ifndef __COMMON_H__
@@ -24,7 +24,7 @@
#include <glib.h>
#define KEYFILE_PLUGIN_NAME "keyfile"
-#define KEYFILE_PLUGIN_INFO "(c) 2007 - 2010 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
+#define KEYFILE_PLUGIN_INFO "(c) 2007 - 2013 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
#define KEYFILE_DIR NMCONFDIR "/system-connections"
diff --git a/src/settings/plugins/keyfile/nm-keyfile-connection.c b/src/settings/plugins/keyfile/nm-keyfile-connection.c
index 6d72bbfe5..4ef761c6f 100644
--- a/src/settings/plugins/keyfile/nm-keyfile-connection.c
+++ b/src/settings/plugins/keyfile/nm-keyfile-connection.c
@@ -41,16 +41,17 @@ typedef struct {
} NMKeyfileConnectionPrivate;
NMKeyfileConnection *
-nm_keyfile_connection_new (const char *full_path,
- NMConnection *source,
+nm_keyfile_connection_new (NMConnection *source,
+ const char *full_path,
GError **error)
{
GObject *object;
NMKeyfileConnectionPrivate *priv;
NMConnection *tmp;
const char *uuid;
+ gboolean update_unsaved = TRUE;
- g_return_val_if_fail (full_path != NULL, NULL);
+ g_assert (source || full_path);
/* If we're given a connection already, prefer that instead of re-reading */
if (source)
@@ -59,31 +60,33 @@ nm_keyfile_connection_new (const char *full_path,
tmp = nm_keyfile_plugin_connection_from_file (full_path, error);
if (!tmp)
return NULL;
+
+ uuid = nm_connection_get_uuid (NM_CONNECTION (tmp));
+ if (!uuid) {
+ g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ "Connection in file %s had no UUID", full_path);
+ g_object_unref (tmp);
+ return NULL;
+ }
+
+ /* If we just read the connection from disk, it's clearly not Unsaved */
+ update_unsaved = FALSE;
}
object = (GObject *) g_object_new (NM_TYPE_KEYFILE_CONNECTION, NULL);
- if (!object)
- goto out;
priv = NM_KEYFILE_CONNECTION_GET_PRIVATE (object);
priv->path = g_strdup (full_path);
/* Update our settings with what was read from the file */
- if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object), tmp, error)) {
- g_object_unref (object);
- object = NULL;
- goto out;
- }
-
- uuid = nm_connection_get_uuid (NM_CONNECTION (object));
- if (!uuid) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
- "Connection in file %s had no UUID", full_path);
+ if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object),
+ tmp,
+ update_unsaved,
+ error)) {
g_object_unref (object);
object = NULL;
}
-out:
g_object_unref (tmp);
return (NMKeyfileConnection *) object;
}
@@ -145,7 +148,8 @@ do_delete (NMSettingsConnection *connection,
{
NMKeyfileConnectionPrivate *priv = NM_KEYFILE_CONNECTION_GET_PRIVATE (connection);
- g_unlink (priv->path);
+ if (priv->path)
+ g_unlink (priv->path);
NM_SETTINGS_CONNECTION_CLASS (nm_keyfile_connection_parent_class)->delete (connection,
callback,
diff --git a/src/settings/plugins/keyfile/nm-keyfile-connection.h b/src/settings/plugins/keyfile/nm-keyfile-connection.h
index e3bce11b5..07dcafcb2 100644
--- a/src/settings/plugins/keyfile/nm-keyfile-connection.h
+++ b/src/settings/plugins/keyfile/nm-keyfile-connection.h
@@ -43,8 +43,8 @@ typedef struct {
GType nm_keyfile_connection_get_type (void);
-NMKeyfileConnection *nm_keyfile_connection_new (const char *filename,
- NMConnection *source,
+NMKeyfileConnection *nm_keyfile_connection_new (NMConnection *source,
+ const char *filename,
GError **error);
const char *nm_keyfile_connection_get_path (NMKeyfileConnection *self);
diff --git a/src/settings/plugins/keyfile/plugin.c b/src/settings/plugins/keyfile/plugin.c
index ef6613e6f..10c839718 100644
--- a/src/settings/plugins/keyfile/plugin.c
+++ b/src/settings/plugins/keyfile/plugin.c
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2008 - 2012 Red Hat, Inc.
+ * Copyright (C) 2008 - 2013 Red Hat, Inc.
*/
#include <config.h>
@@ -34,6 +34,9 @@
#include <nm-connection.h>
#include <nm-setting.h>
#include <nm-setting-connection.h>
+#include <nm-utils.h>
+#include <nm-config.h>
+#include <nm-logging.h>
#include "plugin.h"
#include "nm-system-config-interface.h"
@@ -52,12 +55,13 @@ G_DEFINE_TYPE_EXTENDED (SCPluginKeyfile, sc_plugin_keyfile, G_TYPE_OBJECT, 0,
#define SC_PLUGIN_KEYFILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SC_TYPE_PLUGIN_KEYFILE, SCPluginKeyfilePrivate))
typedef struct {
- GHashTable *hash;
+ GHashTable *connections; /* uuid::connection */
+ gboolean initialized;
GFileMonitor *monitor;
guint monitor_id;
- char *conf_file;
+ const char *conf_file;
GFileMonitor *conf_file_monitor;
guint conf_file_monitor_id;
@@ -66,127 +70,132 @@ typedef struct {
gboolean disposed;
} SCPluginKeyfilePrivate;
-static NMSettingsConnection *
-_internal_new_connection (SCPluginKeyfile *self,
- const char *full_path,
- NMConnection *source,
- GError **error)
+static void
+connection_removed_cb (NMSettingsConnection *obj, gpointer user_data)
{
- SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (self);
- NMKeyfileConnection *connection;
+ g_hash_table_remove (SC_PLUGIN_KEYFILE_GET_PRIVATE (user_data)->connections,
+ nm_connection_get_uuid (NM_CONNECTION (obj)));
+}
- g_return_val_if_fail (full_path != NULL, NULL);
+/* Monitoring */
- connection = nm_keyfile_connection_new (full_path, source, error);
- if (connection) {
- g_hash_table_insert (priv->hash,
- (gpointer) nm_keyfile_connection_get_path (connection),
- connection);
- }
+static void
+remove_connection (SCPluginKeyfile *self, NMKeyfileConnection *connection)
+{
+ gboolean removed;
+
+ g_return_if_fail (connection != NULL);
+
+ nm_log_info (LOGD_SETTINGS, "removed %s.", nm_keyfile_connection_get_path (connection));
- return (NMSettingsConnection *) connection;
+ /* Removing from the hash table should drop the last reference */
+ g_object_ref (connection);
+ g_signal_handlers_disconnect_by_func (connection, connection_removed_cb, self);
+ removed = g_hash_table_remove (SC_PLUGIN_KEYFILE_GET_PRIVATE (self)->connections,
+ nm_connection_get_uuid (NM_CONNECTION (connection)));
+ nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection));
+ g_object_unref (connection);
+
+ g_return_if_fail (removed);
}
static void
-read_connections (NMSystemConfigInterface *config)
+update_connection (SCPluginKeyfile *self,
+ NMKeyfileConnection *connection,
+ const char *name)
{
- SCPluginKeyfile *self = SC_PLUGIN_KEYFILE (config);
- GDir *dir;
+ NMKeyfileConnection *tmp;
GError *error = NULL;
- const char *item;
- dir = g_dir_open (KEYFILE_DIR, 0, &error);
- if (!dir) {
- PLUGIN_WARN (KEYFILE_PLUGIN_NAME, "Cannot read directory '%s': (%d) %s",
- KEYFILE_DIR,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
+ tmp = nm_keyfile_connection_new (NULL, name, &error);
+ if (!tmp) {
+ /* Error; remove the connection */
+ nm_log_warn (LOGD_SETTINGS, " error in connection %s: %s", name,
+ (error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
+ remove_connection (self, connection);
return;
}
- while ((item = g_dir_read_name (dir))) {
- NMSettingsConnection *connection;
- char *full_path;
-
- if (nm_keyfile_plugin_utils_should_ignore_file (item))
- continue;
-
- full_path = g_build_filename (KEYFILE_DIR, item, NULL);
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "parsing %s ... ", item);
-
- connection = _internal_new_connection (self, full_path, NULL, &error);
- if (connection) {
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " read connection '%s'",
- nm_connection_get_id (NM_CONNECTION (connection)));
- } else {
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " error: %s",
- (error && error->message) ? error->message : "(unknown)");
+ if (!nm_connection_compare (NM_CONNECTION (connection),
+ NM_CONNECTION (tmp),
+ NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
+ NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) {
+ nm_log_info (LOGD_SETTINGS, "updating %s", name);
+ if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (connection),
+ NM_CONNECTION (tmp),
+ FALSE, /* don't set Unsaved */
+ &error)) {
+ /* Shouldn't ever get here as 'new' was verified by the reader already */
+ g_assert_no_error (error);
}
- g_clear_error (&error);
- g_free (full_path);
}
- g_dir_close (dir);
+ g_object_unref (tmp);
}
-static void
-update_connection_settings_commit_cb (NMSettingsConnection *orig, GError *error, gpointer user_data)
+static NMKeyfileConnection *
+find_by_path (SCPluginKeyfile *self, const char *path)
{
- if (error) {
- g_warning ("%s: '%s' / '%s' invalid: %d",
- __func__,
- error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
- (error && error->message) ? error->message : "(none)",
- error ? error->code : -1);
- g_clear_error (&error);
+ SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (self);
+ GHashTableIter iter;
+ NMKeyfileConnection *candidate = NULL;
- nm_settings_connection_signal_remove (orig);
- }
-}
+ g_return_val_if_fail (path != NULL, NULL);
-static void
-update_connection_settings (NMKeyfileConnection *orig,
- NMKeyfileConnection *new)
-{
- nm_settings_connection_replace_and_commit (NM_SETTINGS_CONNECTION (orig),
- NM_CONNECTION (new),
- update_connection_settings_commit_cb, NULL);
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &candidate)) {
+ if (g_strcmp0 (path, nm_keyfile_connection_get_path (candidate)) == 0)
+ return candidate;
+ }
+ return NULL;
}
-/* Monitoring */
-
static void
-remove_connection (SCPluginKeyfile *self,
- NMKeyfileConnection *connection,
- const char *name)
-{
- g_return_if_fail (connection != NULL);
- g_return_if_fail (name != NULL);
-
- /* Removing from the hash table should drop the last reference */
- g_object_ref (connection);
- g_hash_table_remove (SC_PLUGIN_KEYFILE_GET_PRIVATE (self)->hash, name);
- nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection));
- g_object_unref (connection);
-}
-
-static NMKeyfileConnection *
-find_by_uuid (SCPluginKeyfile *self, const char *uuid)
+new_connection (SCPluginKeyfile *self,
+ const char *name,
+ char **out_old_path)
{
SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (self);
- GHashTableIter iter;
- gpointer data = NULL;
+ NMKeyfileConnection *tmp, *connection;
+ GError *error = NULL;
+ const char *uuid;
- g_return_val_if_fail (uuid != NULL, NULL);
+ if (out_old_path)
+ *out_old_path = NULL;
- g_hash_table_iter_init (&iter, priv->hash);
- while (g_hash_table_iter_next (&iter, NULL, &data)) {
- NMConnection *candidate = NM_CONNECTION (data);
+ tmp = nm_keyfile_connection_new (NULL, name, &error);
+ if (!tmp) {
+ nm_log_warn (LOGD_SETTINGS, " error in connection %s: %s", name,
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
+ return;
+ }
- if (strcmp (uuid, nm_connection_get_uuid (candidate)) == 0)
- return NM_KEYFILE_CONNECTION (candidate);
+ /* Connection renames will show as different paths but same UUID */
+ uuid = nm_connection_get_uuid (NM_CONNECTION (tmp));
+ connection = g_hash_table_lookup (priv->connections, uuid);
+ if (connection) {
+ nm_log_info (LOGD_SETTINGS, "rename %s -> %s", nm_keyfile_connection_get_path (connection), name);
+ if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (connection),
+ NM_CONNECTION (tmp),
+ FALSE, /* don't set Unsaved */
+ &error)) {
+ /* Shouldn't ever get here as 'tmp' was verified by the reader already */
+ g_assert_no_error (error);
+ }
+ g_object_unref (tmp);
+ if (out_old_path)
+ *out_old_path = g_strdup (nm_keyfile_connection_get_path (connection));
+ nm_keyfile_connection_set_path (connection, name);
+ } else {
+ nm_log_info (LOGD_SETTINGS, "new connection %s", name);
+ g_hash_table_insert (priv->connections, g_strdup (uuid), tmp);
+ g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, tmp);
+
+ g_signal_connect (tmp, NM_SETTINGS_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed_cb),
+ self);
}
- return NULL;
}
static void
@@ -198,10 +207,8 @@ dir_changed (GFileMonitor *monitor,
{
NMSystemConfigInterface *config = NM_SYSTEM_CONFIG_INTERFACE (user_data);
SCPluginKeyfile *self = SC_PLUGIN_KEYFILE (config);
- SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (self);
- char *full_path;
NMKeyfileConnection *connection;
- GError *error = NULL;
+ char *full_path;
full_path = g_file_get_path (file);
if (nm_keyfile_plugin_utils_should_ignore_file (full_path)) {
@@ -209,89 +216,19 @@ dir_changed (GFileMonitor *monitor,
return;
}
- connection = g_hash_table_lookup (priv->hash, full_path);
+ connection = find_by_path (self, full_path);
switch (event_type) {
case G_FILE_MONITOR_EVENT_DELETED:
- if (connection) {
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "removed %s.", full_path);
- remove_connection (SC_PLUGIN_KEYFILE (config), connection, full_path);
- }
+ if (connection)
+ remove_connection (SC_PLUGIN_KEYFILE (config), connection);
break;
case G_FILE_MONITOR_EVENT_CREATED:
case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
- if (connection) {
- /* Update */
- NMKeyfileConnection *tmp;
-
- tmp = nm_keyfile_connection_new (full_path, NULL, &error);
- if (tmp) {
- if (!nm_connection_compare (NM_CONNECTION (connection),
- NM_CONNECTION (tmp),
- NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
- NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) {
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "updating %s", full_path);
- update_connection_settings (connection, tmp);
- }
- g_object_unref (tmp);
- } else {
- /* Error; remove the connection */
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " error: %s",
- (error && error->message) ? error->message : "(unknown)");
- g_clear_error (&error);
- remove_connection (SC_PLUGIN_KEYFILE (config), connection, full_path);
- }
- } else {
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "updating %s", full_path);
-
- /* New */
- connection = nm_keyfile_connection_new (full_path, NULL, &error);
- if (connection) {
- NMKeyfileConnection *found = NULL;
-
- /* Connection renames will show up as different files but with
- * the same UUID. Try to find the original connection.
- * A connection rename is treated just like an update except
- * there's a bit more housekeeping with the hash table.
- */
- found = find_by_uuid (self, nm_connection_get_uuid (NM_CONNECTION (connection)));
- if (found) {
- const char *old_path = nm_keyfile_connection_get_path (connection);
-
- /* Removing from the hash table should drop the last reference,
- * but of course we want to keep the connection around.
- */
- g_object_ref (found);
- g_hash_table_remove (priv->hash, old_path);
-
- /* Updating settings should update the NMKeyfileConnection's
- * filename property too.
- */
- update_connection_settings (found, connection);
- /* However, when connections are the same and only the filename changed
- * we need to update the path manually (commit_changes() is not called.
- */
- nm_keyfile_connection_set_path (found, full_path);
-
- /* Re-insert the connection back into the hash with the new filename */
- g_hash_table_insert (priv->hash,
- (gpointer) nm_keyfile_connection_get_path (found),
- found);
-
- /* Get rid of the temporary connection */
- g_object_unref (connection);
- } else {
- g_hash_table_insert (priv->hash,
- (gpointer) nm_keyfile_connection_get_path (connection),
- connection);
- g_signal_emit_by_name (config, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, connection);
- }
- } else {
- PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " error: %s",
- (error && error->message) ? error->message : "(unknown)");
- g_clear_error (&error);
- }
- }
+ if (connection)
+ update_connection (SC_PLUGIN_KEYFILE (config), connection, full_path);
+ else
+ new_connection (SC_PLUGIN_KEYFILE (config), full_path, NULL);
break;
default:
break;
@@ -344,15 +281,15 @@ setup_monitoring (NMSystemConfigInterface *config)
GFile *file;
GFileMonitor *monitor;
- priv->hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
-
- file = g_file_new_for_path (KEYFILE_DIR);
- monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
- g_object_unref (file);
+ if (nm_config_get_monitor_connection_files (nm_config_get ())) {
+ file = g_file_new_for_path (KEYFILE_DIR);
+ monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
+ g_object_unref (file);
- if (monitor) {
- priv->monitor_id = g_signal_connect (monitor, "changed", G_CALLBACK (dir_changed), config);
- priv->monitor = monitor;
+ if (monitor) {
+ priv->monitor_id = g_signal_connect (monitor, "changed", G_CALLBACK (dir_changed), config);
+ priv->monitor = monitor;
+ }
}
if (priv->conf_file) {
@@ -367,6 +304,69 @@ setup_monitoring (NMSystemConfigInterface *config)
}
}
+static void
+read_connections (NMSystemConfigInterface *config)
+{
+ SCPluginKeyfile *self = SC_PLUGIN_KEYFILE (config);
+ SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (self);
+ GDir *dir;
+ GError *error = NULL;
+ const char *item;
+ GHashTable *oldconns;
+ GHashTableIter iter;
+ gpointer data;
+
+ dir = g_dir_open (KEYFILE_DIR, 0, &error);
+ if (!dir) {
+ nm_log_warn (LOGD_SETTINGS, "Cannot read directory '%s': (%d) %s",
+ KEYFILE_DIR,
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ return;
+ }
+
+ oldconns = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ const char *con_path = nm_keyfile_connection_get_path (data);
+ if (con_path)
+ g_hash_table_insert (oldconns, g_strdup (con_path), data);
+ }
+
+ while ((item = g_dir_read_name (dir))) {
+ NMKeyfileConnection *connection;
+ char *full_path, *old_path;
+
+ if (nm_keyfile_plugin_utils_should_ignore_file (item))
+ continue;
+
+ full_path = g_build_filename (KEYFILE_DIR, item, NULL);
+
+ connection = g_hash_table_lookup (oldconns, full_path);
+ if (connection) {
+ g_hash_table_remove (oldconns, full_path);
+ update_connection (self, connection, full_path);
+ } else {
+ new_connection (self, full_path, &old_path);
+ if (old_path) {
+ g_hash_table_remove (oldconns, old_path);
+ g_free (old_path);
+ }
+ }
+
+ g_free (full_path);
+ }
+ g_dir_close (dir);
+
+ g_hash_table_iter_init (&iter, oldconns);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ g_hash_table_iter_remove (&iter);
+ remove_connection (self, data);
+ }
+ g_hash_table_destroy (oldconns);
+}
+
/* Plugin */
static GSList *
@@ -377,34 +377,104 @@ get_connections (NMSystemConfigInterface *config)
gpointer data = NULL;
GSList *list = NULL;
- if (!priv->hash) {
+ if (!priv->initialized) {
setup_monitoring (config);
read_connections (config);
+ priv->initialized = TRUE;
}
- g_hash_table_iter_init (&iter, priv->hash);
+ g_hash_table_iter_init (&iter, priv->connections);
while (g_hash_table_iter_next (&iter, NULL, &data))
list = g_slist_prepend (list, data);
return list;
}
+static gboolean
+load_connection (NMSystemConfigInterface *config,
+ const char *filename)
+{
+ SCPluginKeyfile *self = SC_PLUGIN_KEYFILE (config);
+ NMKeyfileConnection *connection;
+ int dir_len = strlen (KEYFILE_DIR);
+
+ if ( strncmp (filename, KEYFILE_DIR, dir_len) != 0
+ || filename[dir_len] != '/'
+ || strchr (filename + dir_len + 1, '/') != NULL)
+ return FALSE;
+
+ if (nm_keyfile_plugin_utils_should_ignore_file (filename + dir_len + 1))
+ return FALSE;
+
+ connection = find_by_path (self, filename);
+ if (connection)
+ update_connection (self, connection, filename);
+ else {
+ new_connection (self, filename, NULL);
+ connection = find_by_path (self, filename);
+ }
+
+ return (connection != NULL);
+}
+
+static void
+reload_connections (NMSystemConfigInterface *config)
+{
+ read_connections (config);
+}
+
static NMSettingsConnection *
add_connection (NMSystemConfigInterface *config,
NMConnection *connection,
+ gboolean save_to_disk,
GError **error)
{
SCPluginKeyfile *self = SC_PLUGIN_KEYFILE (config);
+ SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (self);
NMSettingsConnection *added = NULL;
char *path = NULL;
- /* Write it out first, then add the connection to our internal list */
- if (nm_keyfile_plugin_write_connection (connection, NULL, &path, error)) {
- added = _internal_new_connection (self, path, connection, error);
- g_free (path);
+ if (save_to_disk) {
+ if (!nm_keyfile_plugin_write_connection (connection, NULL, &path, error))
+ return NULL;
}
+
+ added = (NMSettingsConnection *) nm_keyfile_connection_new (connection, path, error);
+ if (added) {
+ g_hash_table_insert (priv->connections,
+ g_strdup (nm_connection_get_uuid (NM_CONNECTION (added))),
+ added);
+ g_signal_connect (added, NM_SETTINGS_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed_cb),
+ self);
+ }
+ g_free (path);
return added;
}
+static gboolean
+parse_key_file_allow_none (SCPluginKeyfilePrivate *priv,
+ GKeyFile *key_file,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GError *local_error = NULL;
+
+ if (!g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &local_error)) {
+ if (g_error_matches (local_error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+ g_clear_error (&local_error);
+ else {
+ g_propagate_prefixed_error (error, local_error,
+ "Error parsing file '%s': ",
+ priv->conf_file);
+ goto out;
+ }
+ }
+ ret = TRUE;
+
+ out:
+ return ret;
+}
+
static GSList *
get_unmanaged_specs (NMSystemConfigInterface *config)
{
@@ -412,48 +482,45 @@ get_unmanaged_specs (NMSystemConfigInterface *config)
GKeyFile *key_file;
GSList *specs = NULL;
GError *error = NULL;
+ char *str;
if (!priv->conf_file)
return NULL;
key_file = g_key_file_new ();
- if (g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error)) {
- char *str;
-
- str = g_key_file_get_value (key_file, "keyfile", "unmanaged-devices", NULL);
- if (str) {
- char **udis;
- int i;
-
- udis = g_strsplit (str, ";", -1);
- g_free (str);
-
- for (i = 0; udis[i] != NULL; i++) {
- /* Verify unmanaged specification and add it to the list */
- if (strlen (udis[i]) > 4 && !strncmp (udis[i], "mac:", 4) && ether_aton (udis[i] + 4)) {
- char *p = udis[i];
-
- /* To accept uppercase MACs in configuration file, we have to convert values to lowercase here.
- * Unmanaged MACs in specs are always in lowercase. */
- while (*p) {
- *p = g_ascii_tolower (*p);
- p++;
- }
- specs = g_slist_append (specs, udis[i]);
- } else {
- g_warning ("Error in file '%s': invalid unmanaged-devices entry: '%s'", priv->conf_file, udis[i]);
- g_free (udis[i]);
- }
- }
+ if (!parse_key_file_allow_none (priv, key_file, &error))
+ goto out;
+
+ str = g_key_file_get_value (key_file, "keyfile", "unmanaged-devices", NULL);
+ if (str) {
+ char **udis;
+ int i;
+
+ udis = g_strsplit (str, ";", -1);
+ g_free (str);
- g_free (udis); /* Yes, g_free, not g_strfreev because we need the strings in the list */
+ for (i = 0; udis[i] != NULL; i++) {
+ /* Verify unmanaged specification and add it to the list */
+ if (!strncmp (udis[i], "mac:", 4) && nm_utils_hwaddr_valid (udis[i] + 4)) {
+ specs = g_slist_append (specs, udis[i]);
+ } else if (!strncmp (udis[i], "interface-name:", 15) && nm_utils_iface_valid_name (udis[i] + 15)) {
+ specs = g_slist_append (specs, udis[i]);
+ } else {
+ nm_log_warn (LOGD_SETTINGS, "Error in file '%s': invalid unmanaged-devices entry: '%s'", priv->conf_file, udis[i]);
+ g_free (udis[i]);
+ }
}
- } else {
- g_warning ("Error parsing file '%s': %s", priv->conf_file, error->message);
- g_error_free (error);
+
+ g_free (udis); /* Yes, g_free, not g_strfreev because we need the strings in the list */
}
- g_key_file_free (key_file);
+ out:
+ if (error) {
+ nm_log_warn (LOGD_SETTINGS, "%s", error->message);
+ g_error_free (error);
+ }
+ if (key_file)
+ g_key_file_free (key_file);
return specs;
}
@@ -470,14 +537,18 @@ plugin_get_hostname (SCPluginKeyfile *plugin)
return NULL;
key_file = g_key_file_new ();
- if (g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error))
- hostname = g_key_file_get_value (key_file, "keyfile", "hostname", NULL);
- else {
- g_warning ("Error parsing file '%s': %s", priv->conf_file, error->message);
+ if (!parse_key_file_allow_none (priv, key_file, &error))
+ goto out;
+
+ hostname = g_key_file_get_value (key_file, "keyfile", "hostname", NULL);
+
+ out:
+ if (error) {
+ nm_log_warn (LOGD_SETTINGS, "%s", error->message);
g_error_free (error);
}
-
- g_key_file_free (key_file);
+ if (key_file)
+ g_key_file_free (key_file);
return hostname;
}
@@ -485,45 +556,49 @@ plugin_get_hostname (SCPluginKeyfile *plugin)
static gboolean
plugin_set_hostname (SCPluginKeyfile *plugin, const char *hostname)
{
+ gboolean ret = FALSE;
SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (plugin);
- GKeyFile *key_file;
+ GKeyFile *key_file = NULL;
GError *error = NULL;
- gboolean result = FALSE;
+ char *data = NULL;
+ gsize len;
if (!priv->conf_file) {
- g_warning ("Error saving hostname: no config file");
- return FALSE;
+ g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Error saving hostname: no config file");
+ goto out;
}
+ g_free (priv->hostname);
+ priv->hostname = g_strdup (hostname);
+
key_file = g_key_file_new ();
- if (g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error)) {
- char *data;
- gsize len;
+ if (!parse_key_file_allow_none (priv, key_file, &error))
+ goto out;
- g_key_file_set_string (key_file, "keyfile", "hostname", hostname);
+ g_key_file_set_string (key_file, "keyfile", "hostname", hostname);
- data = g_key_file_to_data (key_file, &len, &error);
- if (data) {
- g_file_set_contents (priv->conf_file, data, len, &error);
- g_free (data);
+ data = g_key_file_to_data (key_file, &len, &error);
+ if (!data)
+ goto out;
- g_free (priv->hostname);
- priv->hostname = g_strdup (hostname);
- result = TRUE;
- }
+ if (!g_file_set_contents (priv->conf_file, data, len, &error)) {
+ g_prefix_error (&error, "Error saving hostname: ");
+ goto out;
+ }
- if (error) {
- g_warning ("Error saving hostname: %s", error->message);
- g_error_free (error);
- }
- } else {
- g_warning ("Error parsing file '%s': %s", priv->conf_file, error->message);
+ ret = TRUE;
+
+ out:
+ if (error) {
+ nm_log_warn (LOGD_SETTINGS, "%s", error->message);
g_error_free (error);
}
+ g_free (data);
+ if (key_file)
+ g_key_file_free (key_file);
- g_key_file_free (key_file);
-
- return result;
+ return ret;
}
/* GObject */
@@ -531,6 +606,9 @@ plugin_set_hostname (SCPluginKeyfile *plugin, const char *hostname)
static void
sc_plugin_keyfile_init (SCPluginKeyfile *plugin)
{
+ SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (plugin);
+
+ priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
}
static void
@@ -603,10 +681,11 @@ dispose (GObject *object)
}
g_free (priv->hostname);
- g_free (priv->conf_file);
- if (priv->hash)
- g_hash_table_destroy (priv->hash);
+ if (priv->connections) {
+ g_hash_table_destroy (priv->connections);
+ priv->connections = NULL;
+ }
out:
G_OBJECT_CLASS (sc_plugin_keyfile_parent_class)->dispose (object);
@@ -645,26 +724,26 @@ system_config_interface_init (NMSystemConfigInterface *system_config_interface_c
{
/* interface implementation */
system_config_interface_class->get_connections = get_connections;
+ system_config_interface_class->load_connection = load_connection;
+ system_config_interface_class->reload_connections = reload_connections;
system_config_interface_class->add_connection = add_connection;
system_config_interface_class->get_unmanaged_specs = get_unmanaged_specs;
}
GObject *
-nm_settings_keyfile_plugin_new (const char *config_file)
+nm_settings_keyfile_plugin_new (void)
{
static SCPluginKeyfile *singleton = NULL;
SCPluginKeyfilePrivate *priv;
if (!singleton) {
singleton = SC_PLUGIN_KEYFILE (g_object_new (SC_TYPE_PLUGIN_KEYFILE, NULL));
- if (singleton) {
- priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (singleton);
+ priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (singleton);
- priv->conf_file = g_strdup (config_file);
+ priv->conf_file = nm_config_get_path (nm_config_get ());
- /* plugin_set_hostname() has to be called *after* priv->conf_file is set */
- priv->hostname = plugin_get_hostname (singleton);
- }
+ /* plugin_set_hostname() has to be called *after* priv->conf_file is set */
+ priv->hostname = plugin_get_hostname (singleton);
} else
g_object_ref (singleton);
diff --git a/src/settings/plugins/keyfile/plugin.h b/src/settings/plugins/keyfile/plugin.h
index 9b317333d..5f4373905 100644
--- a/src/settings/plugins/keyfile/plugin.h
+++ b/src/settings/plugins/keyfile/plugin.h
@@ -43,6 +43,6 @@ GType sc_plugin_keyfile_get_type (void);
GQuark keyfile_plugin_error_quark (void);
-GObject *nm_settings_keyfile_plugin_new (const char *config_file);
+GObject *nm_settings_keyfile_plugin_new (void);
#endif /* _PLUGIN_H_ */
diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c
index ec4661eb7..735f8c288 100644
--- a/src/settings/plugins/keyfile/reader.c
+++ b/src/settings/plugins/keyfile/reader.c
@@ -41,9 +41,35 @@
#include <string.h>
#include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
#include "nm-system-config-interface.h"
+#include "nm-logging.h"
#include "reader.h"
#include "common.h"
+#include "utils.h"
+
+/* Some setting properties also contain setting names, such as
+ * NMSettingConnection's 'type' property (which specifies the base type of the
+ * connection, e.g. ethernet or wifi) or 'slave-type' (specifies type of slave
+ * connection, e.g. bond or bridge). This function handles translating those
+ * properties' values to the real setting name if they are an alias.
+ */
+static void
+setting_alias_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ char *s;
+ const char *key_setting_name;
+
+ s = nm_keyfile_plugin_kf_get_string (keyfile, setting_name, key, NULL);
+ if (s) {
+ key_setting_name = nm_keyfile_plugin_get_setting_name_for_alias (s);
+ g_object_set (G_OBJECT (setting),
+ key, key_setting_name ? key_setting_name : s,
+ NULL);
+ g_free (s);
+ }
+}
static gboolean
read_array_of_uint (GKeyFile *file,
@@ -55,7 +81,7 @@ read_array_of_uint (GKeyFile *file,
int i;
gint *tmp;
- tmp = g_key_file_get_integer_list (file, nm_setting_get_name (setting), key, &length, NULL);
+ tmp = nm_keyfile_plugin_kf_get_integer_list (file, nm_setting_get_name (setting), key, &length, NULL);
array = g_array_sized_new (FALSE, FALSE, sizeof (guint32), length);
g_return_val_if_fail (array != NULL, FALSE);
@@ -72,11 +98,19 @@ static gboolean
get_one_int (const char *str, guint32 max_val, const char *key_name, guint32 *out)
{
long tmp;
+ char *endptr;
+
+ if (!str || !str[0]) {
+ if (key_name)
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring missing number %s", __func__, key_name);
+ return FALSE;
+ }
errno = 0;
- tmp = strtol (str, NULL, 10);
- if (errno || (tmp < 0) || (tmp > max_val)) {
- g_warning ("%s: ignoring invalid IP %s item '%s'", __func__, key_name, str);
+ tmp = strtol (str, &endptr, 10);
+ if (errno || (tmp < 0) || (tmp > max_val) || *endptr != 0) {
+ if (key_name)
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid number %s '%s'", __func__, key_name, str);
return FALSE;
}
@@ -85,12 +119,13 @@ get_one_int (const char *str, guint32 max_val, const char *key_name, guint32 *ou
}
static gpointer
-build_ip4_address_or_route (const char *address_str, guint32 plen, const char *gateway_str, guint32 metric, gboolean route)
+build_ip4_address_or_route (const char *key_name, const char *address_str, guint32 plen, const char *gateway_str, const char *metric_str, gboolean route)
{
GArray *result;
- struct in_addr addr;
+ guint32 addr;
guint32 address = 0;
guint32 gateway = 0;
+ guint32 metric = 0;
int err;
g_return_val_if_fail (address_str, NULL);
@@ -98,23 +133,30 @@ build_ip4_address_or_route (const char *address_str, guint32 plen, const char *g
/* Address */
err = inet_pton (AF_INET, address_str, &addr);
if (err <= 0) {
- g_warning ("%s: ignoring invalid IPv4 address '%s'", __func__, address_str);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid IPv4 address '%s'", __func__, address_str);
return NULL;
}
- address = addr.s_addr;
+ address = addr;
+
/* Gateway */
- if (gateway_str) {
+ if (gateway_str && gateway_str[0]) {
err = inet_pton (AF_INET, gateway_str, &addr);
if (err <= 0) {
- g_warning ("%s: ignoring invalid IPv4 gateway '%s'", __func__, gateway_str);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid IPv4 gateway '%s'", __func__, gateway_str);
return NULL;
}
- gateway = addr.s_addr;
+ gateway = addr;
}
else
gateway = 0;
- result = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3);
+ /* parse metric, default to 0 */
+ if (metric_str) {
+ if (!get_one_int (metric_str, G_MAXUINT32, key_name, &metric))
+ return NULL;
+ }
+
+ result = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3 + !!route);
g_array_append_val (result, address);
g_array_append_val (result, plen);
g_array_append_val (result, gateway);
@@ -125,13 +167,14 @@ build_ip4_address_or_route (const char *address_str, guint32 plen, const char *g
}
static gpointer
-build_ip6_address_or_route (const char *address_str, guint32 plen, const char *gateway_str, guint32 metric, gboolean route)
+build_ip6_address_or_route (const char *key_name, const char *address_str, guint32 plen, const char *gateway_str, const char *metric_str, gboolean route)
{
GValueArray *result;
struct in6_addr addr;
GByteArray *address;
GByteArray *gateway;
- GValue value = { 0, };
+ guint32 metric = 0;
+ GValue value = G_VALUE_INIT;
int err;
g_return_val_if_fail (address_str, NULL);
@@ -141,9 +184,8 @@ build_ip6_address_or_route (const char *address_str, guint32 plen, const char *g
/* add address */
err = inet_pton (AF_INET6, address_str, &addr);
if (err <= 0) {
- g_warning ("%s: ignoring invalid IPv6 address '%s'", __func__, address_str);
- g_value_array_free (result);
- return NULL;
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid IPv6 address '%s'", __func__, address_str);
+ goto error_out;
}
address = g_byte_array_new ();
g_byte_array_append (address, (guint8 *) addr.s6_addr, 16);
@@ -159,15 +201,33 @@ build_ip6_address_or_route (const char *address_str, guint32 plen, const char *g
g_value_unset (&value);
/* add gateway */
- if (gateway_str) {
+ if (gateway_str && gateway_str[0]) {
err = inet_pton (AF_INET6, gateway_str, &addr);
if (err <= 0) {
- g_warning ("%s: ignoring invalid IPv6 gateway '%s'", __func__, gateway_str);
- g_value_array_free (result);
- return NULL;
+ /* Try workaround for routes written by broken keyfile writer.
+ * Due to bug bgo#719851, an older version of writer would have
+ * written "a:b:c:d::/plen,metric" if the gateway was ::, instead
+ * of "a:b:c:d::/plen,,metric" or "a:b:c:d::/plen,::,metric"
+ * Try workaround by interepeting gateway_str as metric to accept such
+ * invalid routes. This broken syntax should not be not officially
+ * supported.
+ **/
+ if (route && !metric_str && get_one_int (gateway_str, G_MAXUINT32, NULL, &metric))
+ addr = in6addr_any;
+ else {
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid IPv6 gateway '%s'", __func__, gateway_str);
+ goto error_out;
+ }
}
} else
- memset (&addr, 0, 16);
+ addr = in6addr_any;
+
+ /* parse metric, default to 0 */
+ if (metric_str) {
+ if (!get_one_int (metric_str, G_MAXUINT32, key_name, &metric))
+ goto error_out;
+ }
+
gateway = g_byte_array_new ();
g_byte_array_append (gateway, (guint8 *) addr.s6_addr, 16);
g_value_init (&value, DBUS_TYPE_G_UCHAR_ARRAY);
@@ -184,6 +244,10 @@ build_ip6_address_or_route (const char *address_str, guint32 plen, const char *g
}
return result;
+
+error_out:
+ g_value_array_free (result);
+ return NULL;
}
/* On success, returns pointer to the zero-terminated field (original @current).
@@ -214,7 +278,8 @@ read_field (char **current, char **error, const char *characters, const char *de
}
/* fail on empty input */
- g_return_val_if_fail (**current, NULL);
+ if (!**current)
+ return NULL;
/* remember beginning of input */
start = *current;
@@ -251,18 +316,18 @@ read_field (char **current, char **error, const char *characters, const char *de
* address (DEPRECATED)
* address/plen
* address/gateway (DEPRECATED)
- * address/plen/gateway
+ * address/plen,gateway
*
* The following IPv4 and IPv6 route formats are supported:
*
* address/plen (NETWORK dev DEVICE)
- * address/plen/gateway (NETWORK via GATEWAY dev DEVICE)
- * address/plen//gateway (NETWORK dev DEVICE metric METRIC)
- * address/plen/gateway/metric (NETWORK via GATEWAY dev DEVICE metric METRIC)
+ * address/plen,gateway (NETWORK via GATEWAY dev DEVICE)
+ * address/plen,,metric (NETWORK dev DEVICE metric METRIC)
+ * address/plen,gateway,metric (NETWORK via GATEWAY dev DEVICE metric METRIC)
*
* For backward, forward and sideward compatibility, slash (/),
- * semicolon (;) and comma (,) are interchangable. The use of
- * slash in the above examples is therefore not significant.
+ * semicolon (;) and comma (,) are interchangable. The choice of
+ * separator in the above examples is therefore not significant.
*
* Leaving out the prefix length is discouraged and DEPRECATED. The
* default value of IPv6 prefix length was 64 and has not been
@@ -279,19 +344,19 @@ read_one_ip_address_or_route (GKeyFile *file,
gboolean ipv6,
gboolean route)
{
- guint32 plen, metric;
+ guint32 plen;
gpointer result;
char *address_str, *plen_str, *gateway_str, *metric_str, *value, *current, *error;
- current = value = g_key_file_get_string (file, setting_name, key_name, NULL);
+ current = value = nm_keyfile_plugin_kf_get_string (file, setting_name, key_name, NULL);
if (!value)
return NULL;
/* get address field */
address_str = read_field (&current, &error, IP_ADDRESS_CHARS, DELIMITERS);
if (error) {
- g_warning ("keyfile: Unexpected character '%c' in '%s.%s' address (position %td of '%s').",
- *error, setting_name, key_name, error - current, current);
+ nm_log_warn (LOGD_SETTINGS, "keyfile: Unexpected character '%c' in '%s.%s' address (position %td of '%s').",
+ *error, setting_name, key_name, error - current, current);
goto error;
}
/* get prefix length field (skippable) */
@@ -299,18 +364,18 @@ read_one_ip_address_or_route (GKeyFile *file,
/* get gateway field */
gateway_str = read_field (&current, &error, IP_ADDRESS_CHARS, DELIMITERS);
if (error) {
- g_warning ("keyfile: Unexpected character '%c' in '%s.%s' %s (position %td of '%s').",
- *error, setting_name, key_name,
- plen_str ? "gateway" : "gateway or prefix length",
- error - current, current);
+ nm_log_warn (LOGD_SETTINGS, "keyfile: Unexpected character '%c' in '%s.%s' %s (position %td of '%s').",
+ *error, setting_name, key_name,
+ plen_str ? "gateway" : "gateway or prefix length",
+ error - current, current);
goto error;
}
/* for routes, get metric */
if (route) {
metric_str = read_field (&current, &error, DIGITS, DELIMITERS);
if (error) {
- g_warning ("keyfile: Unexpected character '%c' in '%s.%s' prefix length (position %td of '%s').",
- *error, setting_name, key_name, error - current, current);
+ nm_log_warn (LOGD_SETTINGS, "keyfile: Unexpected character '%c' in '%s.%s' prefix length (position %td of '%s').",
+ *error, setting_name, key_name, error - current, current);
goto error;
}
} else
@@ -319,13 +384,13 @@ read_one_ip_address_or_route (GKeyFile *file,
/* there is still some data */
if (*current) {
/* another field follows */
- g_warning ("keyfile: %s.%s: Garbage at the and of the line: %s",
- setting_name, key_name, current);
+ nm_log_warn (LOGD_SETTINGS, "keyfile: %s.%s: Garbage at the and of the line: %s",
+ setting_name, key_name, current);
goto error;
} else {
/* semicolon at the end of input */
- g_message ("keyfile: %s.%s: Deprecated semicolon at the end of value.",
- setting_name, key_name);
+ nm_log_info (LOGD_SETTINGS, "keyfile: %s.%s: Deprecated semicolon at the end of value.",
+ setting_name, key_name);
}
}
@@ -338,23 +403,13 @@ read_one_ip_address_or_route (GKeyFile *file,
plen = ipv6 ? 128 : 24;
else
plen = ipv6 ? 64 : 24;
- g_warning ("keyfile: Missing prefix length in '%s.%s', defaulting to %d",
- setting_name, key_name, plen);
+ nm_log_warn (LOGD_SETTINGS, "keyfile: Missing prefix length in '%s.%s', defaulting to %d",
+ setting_name, key_name, plen);
}
- /* parse metric, default to 0 */
- metric = 0;
- if (metric_str)
- g_return_val_if_fail (get_one_int (metric_str, G_MAXUINT32,
- key_name, &metric), NULL);
-
/* build the appropriate data structure for NetworkManager settings */
- if (route)
- g_debug ("keyfile: %s.%s: route %s/%d gateway %s metric %d", setting_name, key_name, address_str, plen, gateway_str, metric);
- else
- g_debug ("keyfile: %s.%s: address %s/%d gateway %s", setting_name, key_name, address_str, plen, gateway_str);
result = (ipv6 ? build_ip6_address_or_route : build_ip4_address_or_route) (
- address_str, plen, gateway_str, metric, route);
+ key_name, address_str, plen, gateway_str, metric_str, route);
g_free (value);
return result;
@@ -375,8 +430,10 @@ ip_address_or_route_parser (NMSetting *setting, const char *key, GKeyFile *keyfi
GPtrArray *list;
int i;
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
list = g_ptr_array_new_with_free_func (
ipv6 ? (GDestroyNotify) g_value_array_free : (GDestroyNotify) g_array_unref);
+ G_GNUC_END_IGNORE_DEPRECATIONS;
for (i = -1; i < 1000; i++) {
const char **key_basename;
@@ -415,21 +472,21 @@ ip4_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
char **list, **iter;
int ret;
- list = g_key_file_get_string_list (keyfile, setting_name, key, &length, NULL);
+ list = nm_keyfile_plugin_kf_get_string_list (keyfile, setting_name, key, &length, NULL);
if (!list || !g_strv_length (list))
return;
array = g_array_sized_new (FALSE, FALSE, sizeof (guint32), length);
for (iter = list; *iter; iter++) {
- struct in_addr addr;
+ guint32 addr;
ret = inet_pton (AF_INET, *iter, &addr);
if (ret <= 0) {
- g_warning ("%s: ignoring invalid DNS server address '%s'", __func__, *iter);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid DNS server address '%s'", __func__, *iter);
continue;
}
- g_array_append_val (array, addr.s_addr);
+ g_array_append_val (array, addr);
}
g_strfreev (list);
@@ -448,7 +505,7 @@ ip6_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
char **list, **iter;
int ret;
- list = g_key_file_get_string_list (keyfile, setting_name, key, &length, NULL);
+ list = nm_keyfile_plugin_kf_get_string_list (keyfile, setting_name, key, &length, NULL);
if (!list || !g_strv_length (list))
return;
@@ -460,7 +517,7 @@ ip6_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
ret = inet_pton (AF_INET6, *iter, &addr);
if (ret <= 0) {
- g_warning ("%s: ignoring invalid DNS server IPv6 address '%s'", __func__, *iter);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid DNS server IPv6 address '%s'", __func__, *iter);
continue;
}
byte_array = g_byte_array_new ();
@@ -477,46 +534,52 @@ ip6_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
}
static void
-mac_address_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
+mac_address_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path, gsize enforce_length)
{
const char *setting_name = nm_setting_get_name (setting);
char *tmp_string = NULL, *p;
gint *tmp_list;
GByteArray *array = NULL;
gsize length;
- int i, type;
- p = tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL);
- if (tmp_string) {
+ p = tmp_string = nm_keyfile_plugin_kf_get_string (keyfile, setting_name, key, NULL);
+ if (tmp_string && tmp_string[0]) {
/* Look for enough ':' characters to signify a MAC address */
- i = 0;
+ guint i = 0;
+
while (*p) {
if (*p == ':')
i++;
p++;
}
- /* If we found enough it's probably a string-format MAC address */
- type = nm_utils_hwaddr_type (i + 1);
- if (type > 0)
- array = nm_utils_hwaddr_atoba (tmp_string, type);
+ if (enforce_length == 0 || enforce_length == i+1) {
+ /* If we found enough it's probably a string-format MAC address */
+ array = g_byte_array_sized_new (i+1);
+ g_byte_array_set_size (array, i+1);
+ if (!nm_utils_hwaddr_aton_len (tmp_string, array->data, array->len)) {
+ g_byte_array_unref (array);
+ array = NULL;
+ }
+ }
}
g_free (tmp_string);
if (array == NULL) {
/* Old format; list of ints */
- tmp_list = g_key_file_get_integer_list (keyfile, setting_name, key, &length, NULL);
- type = nm_utils_hwaddr_type (length);
- if (type < 0) {
+ tmp_list = nm_keyfile_plugin_kf_get_integer_list (keyfile, setting_name, key, &length, NULL);
+ if (length > 0 && (enforce_length == 0 || enforce_length == length)) {
+ gsize i;
+
array = g_byte_array_sized_new (length);
for (i = 0; i < length; i++) {
int val = tmp_list[i];
const guint8 v = (guint8) (val & 0xFF);
if (val < 0 || val > 255) {
- g_warning ("%s: %s / %s ignoring invalid byte element '%d' (not "
- " between 0 and 255 inclusive)", __func__, setting_name,
- key, val);
+ nm_log_warn (LOGD_SETTINGS, "%s: %s / %s ignoring invalid byte element '%d' (not "
+ " between 0 and 255 inclusive)", __func__, setting_name,
+ key, val);
g_byte_array_free (array, TRUE);
array = NULL;
break;
@@ -531,29 +594,41 @@ mac_address_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, cons
g_object_set (setting, key, array, NULL);
g_byte_array_free (array, TRUE);
} else {
- g_warning ("%s: ignoring invalid MAC address for %s / %s",
- __func__, setting_name, key);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid MAC address for %s / %s",
+ __func__, setting_name, key);
}
}
static void
+mac_address_parser_ETHER (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
+{
+ mac_address_parser (setting, key, keyfile, keyfile_path, ETH_ALEN);
+}
+
+static void
+mac_address_parser_INFINIBAND (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
+{
+ mac_address_parser (setting, key, keyfile, keyfile_path, INFINIBAND_ALEN);
+}
+
+static void
read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key)
{
char **keys, **iter;
char *value;
const char *setting_name = nm_setting_get_name (setting);
- keys = g_key_file_get_keys (file, setting_name, NULL, NULL);
+ keys = nm_keyfile_plugin_kf_get_keys (file, setting_name, NULL, NULL);
if (!keys || !*keys)
return;
for (iter = keys; *iter; iter++) {
- value = g_key_file_get_string (file, setting_name, *iter, NULL);
+ value = nm_keyfile_plugin_kf_get_string (file, setting_name, *iter, NULL);
if (!value)
continue;
if (NM_IS_SETTING_VPN (setting)) {
- if (strcmp (*iter, NM_SETTING_VPN_SERVICE_TYPE))
+ if (strcmp (*iter, NM_SETTING_VPN_SERVICE_TYPE) && strcmp (*iter, NM_SETTING_VPN_USER_NAME))
nm_setting_vpn_add_data_item (NM_SETTING_VPN (setting), *iter, value);
}
if (NM_IS_SETTING_BOND (setting)) {
@@ -596,7 +671,7 @@ get_uchar_array (GKeyFile *keyfile,
/* New format: just a string
* Old format: integer list; e.g. 11;25;38;
*/
- tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL);
+ tmp_string = nm_keyfile_plugin_kf_get_string (keyfile, setting_name, key, NULL);
if (tmp_string) {
GRegex *regex;
GMatchInfo *match_info;
@@ -621,16 +696,16 @@ get_uchar_array (GKeyFile *keyfile,
if (!array) {
/* Old format; list of ints */
- tmp_list = g_key_file_get_integer_list (keyfile, setting_name, key, &length, NULL);
+ tmp_list = nm_keyfile_plugin_kf_get_integer_list (keyfile, setting_name, key, &length, NULL);
array = g_byte_array_sized_new (length);
for (i = 0; i < length; i++) {
int val = tmp_list[i];
unsigned char v = (unsigned char) (val & 0xFF);
if (val < 0 || val > 255) {
- g_warning ("%s: %s / %s ignoring invalid byte element '%d' (not "
- " between 0 and 255 inclusive)", __func__, setting_name,
- key, val);
+ nm_log_warn (LOGD_SETTINGS, "%s: %s / %s ignoring invalid byte element '%d' (not "
+ " between 0 and 255 inclusive)", __func__, setting_name,
+ key, val);
} else
g_byte_array_append (array, (const unsigned char *) &v, sizeof (v));
}
@@ -655,8 +730,8 @@ ssid_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char
g_object_set (setting, key, array, NULL);
g_byte_array_free (array, TRUE);
} else {
- g_warning ("%s: ignoring invalid SSID for %s / %s",
- __func__, setting_name, key);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid SSID for %s / %s",
+ __func__, setting_name, key);
}
}
@@ -671,8 +746,8 @@ password_raw_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, con
g_object_set (setting, key, array, NULL);
g_byte_array_free (array, TRUE);
} else {
- g_warning ("%s: ignoring invalid raw password for %s / %s",
- __func__, setting_name, key);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid raw password for %s / %s",
+ __func__, setting_name, key);
}
}
@@ -773,7 +848,7 @@ handle_as_path (GByteArray *array,
/* Warn if the certificate didn't exist */
if (exists == FALSE)
- PLUGIN_WARN (KEYFILE_PLUGIN_NAME, " certificate or key %s does not exist", path);
+ nm_log_warn (LOGD_SETTINGS, "certificate or key %s does not exist", path);
}
g_free (path);
@@ -800,8 +875,8 @@ cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char
if (success == FALSE)
g_object_set (setting, key, array, NULL);
} else {
- g_warning ("%s: ignoring invalid key/cert value for %s / %s",
- __func__, setting_name, key);
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid key/cert value for %s / %s",
+ __func__, setting_name, key);
}
if (array)
@@ -822,6 +897,14 @@ typedef struct {
* in struct in6_addr internally, but as string in keyfiles.
*/
static KeyParser key_parsers[] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_TYPE,
+ TRUE,
+ setting_alias_parser },
+ { NM_SETTING_BRIDGE_SETTING_NAME,
+ NM_SETTING_BRIDGE_MAC_ADDRESS,
+ TRUE,
+ mac_address_parser_ETHER },
{ NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES,
FALSE,
@@ -849,35 +932,35 @@ static KeyParser key_parsers[] = {
{ NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS,
TRUE,
- mac_address_parser },
+ mac_address_parser_ETHER },
{ NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
TRUE,
- mac_address_parser },
+ mac_address_parser_ETHER },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_MAC_ADDRESS,
TRUE,
- mac_address_parser },
+ mac_address_parser_ETHER },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
TRUE,
- mac_address_parser },
+ mac_address_parser_ETHER },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_BSSID,
TRUE,
- mac_address_parser },
+ mac_address_parser_ETHER },
{ NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_BLUETOOTH_BDADDR,
TRUE,
- mac_address_parser },
+ mac_address_parser_ETHER },
{ NM_SETTING_INFINIBAND_SETTING_NAME,
NM_SETTING_INFINIBAND_MAC_ADDRESS,
TRUE,
- mac_address_parser },
+ mac_address_parser_INFINIBAND },
{ NM_SETTING_WIMAX_SETTING_NAME,
NM_SETTING_WIMAX_MAC_ADDRESS,
TRUE,
- mac_address_parser },
+ mac_address_parser_ETHER },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID,
TRUE,
@@ -969,10 +1052,10 @@ read_one_setting_value (NMSetting *setting,
* like IP addresses and routes where more than one value is actually
* encoded by the setting property, this won't be true.
*/
- if (check_for_key && !g_key_file_has_key (info->keyfile, setting_name, key, &err)) {
+ if (check_for_key && !nm_keyfile_plugin_kf_has_key (info->keyfile, setting_name, key, &err)) {
/* Key doesn't exist or an error ocurred, thus nothing to do. */
if (err) {
- g_warning ("Error loading setting '%s' value: %s", setting_name, err->message);
+ nm_log_warn (LOGD_SETTINGS, "Error loading setting '%s' value: %s", setting_name, err->message);
g_error_free (err);
}
return;
@@ -981,7 +1064,7 @@ read_one_setting_value (NMSetting *setting,
/* If there's a custom parser for this key, handle that before the generic
* parsers below.
*/
- if (parser && parser->setting_name) {
+ if (parser->setting_name) {
(*parser->parser) (setting, key, info->keyfile, info->keyfile_path);
return;
}
@@ -991,39 +1074,39 @@ read_one_setting_value (NMSetting *setting,
if (type == G_TYPE_STRING) {
char *str_val;
- str_val = g_key_file_get_string (info->keyfile, setting_name, key, NULL);
+ str_val = nm_keyfile_plugin_kf_get_string (info->keyfile, setting_name, key, NULL);
g_object_set (setting, key, str_val, NULL);
g_free (str_val);
} else if (type == G_TYPE_UINT) {
int int_val;
- int_val = g_key_file_get_integer (info->keyfile, setting_name, key, NULL);
+ int_val = nm_keyfile_plugin_kf_get_integer (info->keyfile, setting_name, key, NULL);
if (int_val < 0)
- g_warning ("Casting negative value (%i) to uint", int_val);
+ nm_log_warn (LOGD_SETTINGS, "Casting negative value (%i) to uint", int_val);
g_object_set (setting, key, int_val, NULL);
} else if (type == G_TYPE_INT) {
int int_val;
- int_val = g_key_file_get_integer (info->keyfile, setting_name, key, NULL);
+ int_val = nm_keyfile_plugin_kf_get_integer (info->keyfile, setting_name, key, NULL);
g_object_set (setting, key, int_val, NULL);
} else if (type == G_TYPE_BOOLEAN) {
gboolean bool_val;
- bool_val = g_key_file_get_boolean (info->keyfile, setting_name, key, NULL);
+ bool_val = nm_keyfile_plugin_kf_get_boolean (info->keyfile, setting_name, key, NULL);
g_object_set (setting, key, bool_val, NULL);
} else if (type == G_TYPE_CHAR) {
int int_val;
- int_val = g_key_file_get_integer (info->keyfile, setting_name, key, NULL);
+ int_val = nm_keyfile_plugin_kf_get_integer (info->keyfile, setting_name, key, NULL);
if (int_val < G_MININT8 || int_val > G_MAXINT8)
- g_warning ("Casting value (%i) to char", int_val);
+ nm_log_warn (LOGD_SETTINGS, "Casting value (%i) to char", int_val);
g_object_set (setting, key, int_val, NULL);
} else if (type == G_TYPE_UINT64) {
char *tmp_str;
guint64 uint_val;
- tmp_str = g_key_file_get_value (info->keyfile, setting_name, key, NULL);
+ tmp_str = nm_keyfile_plugin_kf_get_value (info->keyfile, setting_name, key, NULL);
uint_val = g_ascii_strtoull (tmp_str, NULL, 10);
g_free (tmp_str);
g_object_set (setting, key, uint_val, NULL);
@@ -1033,7 +1116,7 @@ read_one_setting_value (NMSetting *setting,
gsize length;
int i;
- tmp = g_key_file_get_integer_list (info->keyfile, setting_name, key, &length, NULL);
+ tmp = nm_keyfile_plugin_kf_get_integer_list (info->keyfile, setting_name, key, &length, NULL);
array = g_byte_array_sized_new (length);
for (i = 0; i < length; i++) {
@@ -1041,9 +1124,9 @@ read_one_setting_value (NMSetting *setting,
unsigned char v = (unsigned char) (val & 0xFF);
if (val < 0 || val > 255) {
- g_warning ("%s: %s / %s ignoring invalid byte element '%d' (not "
- " between 0 and 255 inclusive)", __func__, setting_name,
- key, val);
+ nm_log_warn (LOGD_SETTINGS, "%s: %s / %s ignoring invalid byte element '%d' (not "
+ " between 0 and 255 inclusive)", __func__, setting_name,
+ key, val);
} else
g_byte_array_append (array, (const unsigned char *) &v, sizeof (v));
}
@@ -1057,7 +1140,7 @@ read_one_setting_value (NMSetting *setting,
int i;
GSList *list = NULL;
- sa = g_key_file_get_string_list (info->keyfile, setting_name, key, &length, NULL);
+ sa = nm_keyfile_plugin_kf_get_string_list (info->keyfile, setting_name, key, &length, NULL);
for (i = 0; i < length; i++)
list = g_slist_prepend (list, sa[i]);
@@ -1070,26 +1153,28 @@ read_one_setting_value (NMSetting *setting,
read_hash_of_string (info->keyfile, setting, key);
} else if (type == DBUS_TYPE_G_UINT_ARRAY) {
if (!read_array_of_uint (info->keyfile, setting, key)) {
- g_warning ("Unhandled setting property type (read): '%s/%s' : '%s'",
- setting_name, key, G_VALUE_TYPE_NAME (value));
+ nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (read): '%s/%s' : '%s'",
+ setting_name, key, G_VALUE_TYPE_NAME (value));
}
} else {
- g_warning ("Unhandled setting property type (read): '%s/%s' : '%s'",
- setting_name, key, G_VALUE_TYPE_NAME (value));
+ nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (read): '%s/%s' : '%s'",
+ setting_name, key, G_VALUE_TYPE_NAME (value));
}
}
static NMSetting *
-read_setting (GKeyFile *file, const char *keyfile_path, const char *setting_name)
+read_setting (GKeyFile *file, const char *keyfile_path, const char *group)
{
NMSetting *setting;
ReadInfo info = { file, keyfile_path };
+ const char *alias;
- setting = nm_connection_create_setting (setting_name);
+ alias = nm_keyfile_plugin_get_setting_name_for_alias (group);
+ setting = nm_connection_create_setting (alias ? alias : group);
if (setting)
nm_setting_enumerate_values (setting, read_one_setting_value, &info);
else
- g_warning ("Invalid setting name '%s'", setting_name);
+ nm_log_warn (LOGD_SETTINGS, "Invalid setting name '%s'", group);
return setting;
}
@@ -1099,11 +1184,11 @@ read_vpn_secrets (GKeyFile *file, NMSettingVPN *s_vpn)
{
char **keys, **iter;
- keys = g_key_file_get_keys (file, VPN_SECRETS_GROUP, NULL, NULL);
+ keys = nm_keyfile_plugin_kf_get_keys (file, VPN_SECRETS_GROUP, NULL, NULL);
for (iter = keys; *iter; iter++) {
char *secret;
- secret = g_key_file_get_string (file, VPN_SECRETS_GROUP, *iter, NULL);
+ secret = nm_keyfile_plugin_kf_get_string (file, VPN_SECRETS_GROUP, *iter, NULL);
if (secret) {
nm_setting_vpn_add_secret (s_vpn, *iter, secret);
g_free (secret);
@@ -1112,12 +1197,36 @@ read_vpn_secrets (GKeyFile *file, NMSettingVPN *s_vpn)
g_strfreev (keys);
}
+static void
+ensure_slave_setting (NMConnection *connection)
+{
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
+ const char *slave_type;
+ GType slave_gtype = G_TYPE_INVALID;
+ NMSetting *setting;
+
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if (!slave_type)
+ return;
+
+ if (g_strcmp0 (slave_type, NM_SETTING_BRIDGE_SETTING_NAME) == 0)
+ slave_gtype = NM_TYPE_SETTING_BRIDGE_PORT;
+ else if (g_strcmp0 (slave_type, NM_SETTING_TEAM_SETTING_NAME) == 0)
+ slave_gtype = NM_TYPE_SETTING_TEAM_PORT;
+
+ if (slave_gtype != G_TYPE_INVALID && !nm_connection_get_setting (connection, slave_gtype)) {
+ setting = (NMSetting *) g_object_new (slave_gtype, NULL);
+ g_assert (setting);
+ nm_connection_add_setting (connection, setting);
+ }
+}
+
NMConnection *
nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
{
GKeyFile *key_file;
struct stat statbuf;
- gboolean bad_owner, bad_permissions;
+ gboolean bad_permissions;
NMConnection *connection = NULL;
NMSettingConnection *s_con;
NMSetting *setting;
@@ -1134,13 +1243,12 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
return NULL;
}
- bad_owner = getuid () != statbuf.st_uid;
bad_permissions = statbuf.st_mode & 0077;
- if (bad_owner || bad_permissions) {
+ if (bad_permissions) {
g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
- "File permissions (%o) or owner (%d) were insecure",
- statbuf.st_mode, statbuf.st_uid);
+ "File permissions (%o) were insecure",
+ statbuf.st_mode);
return NULL;
}
@@ -1163,26 +1271,31 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
nm_connection_add_setting (connection, setting);
}
- /* Make sure that we have the base device type setting even if
- * the keyfile didn't include it, which can happen when the base
- * device type setting is all default values (like ethernet where
- * the MAC address isn't given, or VLAN when the VLAN ID is zero).
+ /* Make sure that we have the base device type and slave type settings
+ * even if the keyfile didn't include it, which can happen when the
+ * setting in question is all default values (like ethernet where
+ * the MAC address isn't given, or VLAN when the VLAN ID is zero, or
+ * bridge port with all default settings).
*/
s_con = nm_connection_get_setting_connection (connection);
if (s_con) {
ctype = nm_setting_connection_get_connection_type (s_con);
- setting = nm_connection_get_setting_by_name (connection, ctype);
- if (ctype && !setting) {
- NMSetting *base_setting;
- GType base_setting_type;
-
- base_setting_type = nm_connection_lookup_setting_type (ctype);
- if (base_setting_type != G_TYPE_INVALID) {
- base_setting = (NMSetting *) g_object_new (base_setting_type, NULL);
- g_assert (base_setting);
- nm_connection_add_setting (connection, base_setting);
+ if (ctype) {
+ setting = nm_connection_get_setting_by_name (connection, ctype);
+ if (!setting) {
+ NMSetting *base_setting;
+ GType base_setting_type;
+
+ base_setting_type = nm_connection_lookup_setting_type (ctype);
+ if (base_setting_type != G_TYPE_INVALID) {
+ base_setting = (NMSetting *) g_object_new (base_setting_type, NULL);
+ g_assert (base_setting);
+ nm_connection_add_setting (connection, base_setting);
+ }
}
}
+
+ ensure_slave_setting (connection);
}
/* Handle vpn secrets after the 'vpn' setting was read */
@@ -1205,8 +1318,6 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
g_clear_error (&verify_error);
g_object_unref (connection);
connection = NULL;
- g_warning ("Connection failed to verify: %s",
- verify_error ? g_type_name (nm_connection_lookup_setting_type_by_quark (verify_error->domain)) : "(unknown)");
}
out:
diff --git a/src/settings/plugins/keyfile/tests/Makefile.am b/src/settings/plugins/keyfile/tests/Makefile.am
index c2f5fe3d2..fae6e4eaf 100644
--- a/src/settings/plugins/keyfile/tests/Makefile.am
+++ b/src/settings/plugins/keyfile/tests/Makefile.am
@@ -2,7 +2,7 @@ if ENABLE_TESTS
SUBDIRS=keyfiles
-noinst_PROGRAMS = test-keyfile
+@GNOME_CODE_COVERAGE_RULES@
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
@@ -10,22 +10,36 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/settings \
-I$(srcdir)/../ \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(CODE_COVERAGE_CFLAGS) \
+ -DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DTEST_KEYFILES_DIR=\"$(abs_srcdir)/keyfiles\" \
- -DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\"
+ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\" \
+ -DNMCONFDIR=\"nonexistent\"
+
+noinst_PROGRAMS = test-keyfile
test_keyfile_SOURCES = \
- test-keyfile.c
+ test-keyfile.c \
+ ../reader.c \
+ ../writer.c \
+ ../errors.c \
+ ../utils.c
test_keyfile_LDADD = \
- $(builddir)/../libkeyfile-io.la \
+ $(top_builddir)/src/libNetworkManager.la \
$(top_builddir)/libnm-glib/libnm-glib.la \
$(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(CODE_COVERAGE_LDFLAGS)
-check-local: test-keyfile
- $(abs_builddir)/test-keyfile
+TESTS = test-keyfile
endif
diff --git a/src/settings/plugins/keyfile/tests/Makefile.in b/src/settings/plugins/keyfile/tests/Makefile.in
index 675a9fcfc..f7b4b62a2 100644
--- a/src/settings/plugins/keyfile/tests/Makefile.in
+++ b/src/settings/plugins/keyfile/tests/Makefile.in
@@ -79,11 +79,13 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-keyfile$(EXEEXT)
+@ENABLE_TESTS_TRUE@TESTS = test-keyfile$(EXEEXT)
subdir = src/settings/plugins/keyfile/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,15 +104,18 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_keyfile_SOURCES_DIST = test-keyfile.c
-@ENABLE_TESTS_TRUE@am_test_keyfile_OBJECTS = test-keyfile.$(OBJEXT)
+am__test_keyfile_SOURCES_DIST = test-keyfile.c ../reader.c ../writer.c \
+ ../errors.c ../utils.c
+@ENABLE_TESTS_TRUE@am_test_keyfile_OBJECTS = test-keyfile.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ reader.$(OBJEXT) writer.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ errors.$(OBJEXT) utils.$(OBJEXT)
test_keyfile_OBJECTS = $(am_test_keyfile_OBJECTS)
am__DEPENDENCIES_1 =
@ENABLE_TESTS_TRUE@test_keyfile_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libkeyfile-io.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -191,6 +196,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DIST_SUBDIRS = keyfiles
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
@@ -243,12 +270,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -273,7 +303,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -318,12 +347,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -340,6 +373,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -367,11 +402,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -386,6 +426,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -448,6 +489,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -458,6 +500,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@SUBDIRS = keyfiles
@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
@@ -465,20 +508,33 @@ with_resolvconf = @with_resolvconf@
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-glib \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/logging \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/settings \
@ENABLE_TESTS_TRUE@ -I$(srcdir)/../ \
@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(POLKIT_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_CFLAGS) \
+@ENABLE_TESTS_TRUE@ -DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
@ENABLE_TESTS_TRUE@ -DTEST_KEYFILES_DIR=\"$(abs_srcdir)/keyfiles\" \
-@ENABLE_TESTS_TRUE@ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\"
+@ENABLE_TESTS_TRUE@ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\" \
+@ENABLE_TESTS_TRUE@ -DNMCONFDIR=\"nonexistent\"
@ENABLE_TESTS_TRUE@test_keyfile_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-keyfile.c
+@ENABLE_TESTS_TRUE@ test-keyfile.c \
+@ENABLE_TESTS_TRUE@ ../reader.c \
+@ENABLE_TESTS_TRUE@ ../writer.c \
+@ENABLE_TESTS_TRUE@ ../errors.c \
+@ENABLE_TESTS_TRUE@ ../utils.c
@ENABLE_TESTS_TRUE@test_keyfile_LDADD = \
-@ENABLE_TESTS_TRUE@ $(builddir)/../libkeyfile-io.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+@ENABLE_TESTS_TRUE@ $(DBUS_LIBS) \
+@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_LDFLAGS)
all: all-recursive
@@ -534,7 +590,11 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-keyfile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writer.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -557,6 +617,62 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+reader.o: ../reader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reader.o -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.o `test -f '../reader.c' || echo '$(srcdir)/'`../reader.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../reader.c' object='reader.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reader.o `test -f '../reader.c' || echo '$(srcdir)/'`../reader.c
+
+reader.obj: ../reader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reader.obj -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.obj `if test -f '../reader.c'; then $(CYGPATH_W) '../reader.c'; else $(CYGPATH_W) '$(srcdir)/../reader.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../reader.c' object='reader.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reader.obj `if test -f '../reader.c'; then $(CYGPATH_W) '../reader.c'; else $(CYGPATH_W) '$(srcdir)/../reader.c'; fi`
+
+writer.o: ../writer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT writer.o -MD -MP -MF $(DEPDIR)/writer.Tpo -c -o writer.o `test -f '../writer.c' || echo '$(srcdir)/'`../writer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/writer.Tpo $(DEPDIR)/writer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../writer.c' object='writer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o writer.o `test -f '../writer.c' || echo '$(srcdir)/'`../writer.c
+
+writer.obj: ../writer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT writer.obj -MD -MP -MF $(DEPDIR)/writer.Tpo -c -o writer.obj `if test -f '../writer.c'; then $(CYGPATH_W) '../writer.c'; else $(CYGPATH_W) '$(srcdir)/../writer.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/writer.Tpo $(DEPDIR)/writer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../writer.c' object='writer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o writer.obj `if test -f '../writer.c'; then $(CYGPATH_W) '../writer.c'; else $(CYGPATH_W) '$(srcdir)/../writer.c'; fi`
+
+errors.o: ../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT errors.o -MD -MP -MF $(DEPDIR)/errors.Tpo -c -o errors.o `test -f '../errors.c' || echo '$(srcdir)/'`../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/errors.Tpo $(DEPDIR)/errors.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../errors.c' object='errors.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o errors.o `test -f '../errors.c' || echo '$(srcdir)/'`../errors.c
+
+errors.obj: ../errors.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT errors.obj -MD -MP -MF $(DEPDIR)/errors.Tpo -c -o errors.obj `if test -f '../errors.c'; then $(CYGPATH_W) '../errors.c'; else $(CYGPATH_W) '$(srcdir)/../errors.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/errors.Tpo $(DEPDIR)/errors.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../errors.c' object='errors.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o errors.obj `if test -f '../errors.c'; then $(CYGPATH_W) '../errors.c'; else $(CYGPATH_W) '$(srcdir)/../errors.c'; fi`
+
+utils.o: ../utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utils.o -MD -MP -MF $(DEPDIR)/utils.Tpo -c -o utils.o `test -f '../utils.c' || echo '$(srcdir)/'`../utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/utils.Tpo $(DEPDIR)/utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../utils.c' object='utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.o `test -f '../utils.c' || echo '$(srcdir)/'`../utils.c
+
+utils.obj: ../utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utils.obj -MD -MP -MF $(DEPDIR)/utils.Tpo -c -o utils.obj `if test -f '../utils.c'; then $(CYGPATH_W) '../utils.c'; else $(CYGPATH_W) '$(srcdir)/../utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/utils.Tpo $(DEPDIR)/utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../utils.c' object='utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.obj `if test -f '../utils.c'; then $(CYGPATH_W) '../utils.c'; else $(CYGPATH_W) '$(srcdir)/../utils.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -662,6 +778,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -717,9 +926,8 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile $(PROGRAMS)
installdirs: installdirs-recursive
@@ -828,7 +1036,7 @@ uninstall-am:
.MAKE: $(am__recursive_targets) check-am install-am install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am check-local clean clean-generic clean-libtool \
+ check-TESTS check-am clean clean-generic clean-libtool \
clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
@@ -843,8 +1051,7 @@ uninstall-am:
uninstall-am
-@ENABLE_TESTS_TRUE@check-local: test-keyfile
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-keyfile
+@ENABLE_TESTS_TRUE@@GNOME_CODE_COVERAGE_RULES@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
index bbad8e305..576164d27 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
@@ -3,6 +3,8 @@ KEYFILES = \
Test_GSM_Connection \
Test_Wireless_Connection \
Test_Wired_Connection_MAC_Case \
+ Test_MAC_Old_Format \
+ Test_MAC_IB_Old_Format \
Test_Wired_Connection_IP6 \
ATT_Data_Connect_BT \
ATT_Data_Connect_Plain \
@@ -17,6 +19,8 @@ KEYFILES = \
Test_InfiniBand_Connection \
Test_Bridge_Main \
Test_Bridge_Component \
+ Test_New_Wired_Group_Name \
+ Test_New_Wireless_Group_Names \
Test_Missing_Vlan_Setting
CERTS = \
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
index 450269b42..05660e3e5 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
@@ -80,7 +80,8 @@ host_triplet = @host@
subdir = src/settings/plugins/keyfile/tests/keyfiles
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -144,12 +145,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -174,7 +178,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -219,12 +222,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -241,6 +248,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -268,11 +277,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -287,6 +301,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -349,6 +364,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -359,11 +375,14 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
KEYFILES = \
Test_Wired_Connection \
Test_GSM_Connection \
Test_Wireless_Connection \
Test_Wired_Connection_MAC_Case \
+ Test_MAC_Old_Format \
+ Test_MAC_IB_Old_Format \
Test_Wired_Connection_IP6 \
ATT_Data_Connect_BT \
ATT_Data_Connect_Plain \
@@ -378,6 +397,8 @@ KEYFILES = \
Test_InfiniBand_Connection \
Test_Bridge_Main \
Test_Bridge_Component \
+ Test_New_Wired_Group_Name \
+ Test_New_Wireless_Group_Names \
Test_Missing_Vlan_Setting
CERTS = \
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_IB_Old_Format b/src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_IB_Old_Format
new file mode 100644
index 000000000..b2bf91550
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_IB_Old_Format
@@ -0,0 +1,13 @@
+[connection]
+id=Test InfiniBand Connection
+uuid=5680a56d-c99f-45ad-a6dd-b44d5c398c12
+type=infiniband
+
+[infiniband]
+mac-address=0;17;34;51;68;85;102;119;136;153;1;18;35;52;69;86;103;120;137;144;
+transport-mode=datagram
+mtu=1400
+
+[ipv4]
+method=auto
+
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_Old_Format b/src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_Old_Format
new file mode 100644
index 000000000..9427b16c5
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_MAC_Old_Format
@@ -0,0 +1,10 @@
+[connection]
+id=Test MAC Old Format
+uuid=8980a26d-c99f-4aad-a6bd-b439bc348ca4
+type=802-3-ethernet
+
+[802-3-ethernet]
+mac-address=00:11:aa:BB:CC:55
+cloned-mac-address=00;22;170;187;204;254;
+mtu=1400
+
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wired_Group_Name b/src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wired_Group_Name
new file mode 100644
index 000000000..f27cd4a34
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wired_Group_Name
@@ -0,0 +1,13 @@
+
+[connection]
+id=Test Wired Connection
+uuid=4e80a56d-c99f-4aad-a6dd-b449bc398c57
+type=ethernet
+
+[ethernet]
+mac-address=00:11:22:33:44:55
+mtu=1400
+
+[ipv4]
+method=auto
+
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wireless_Group_Names b/src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wireless_Group_Names
new file mode 100644
index 000000000..d9ac58649
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_New_Wireless_Group_Names
@@ -0,0 +1,16 @@
+[connection]
+id=Test New Wireless Group Names
+uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa
+type=wifi
+
+[wifi]
+ssid=foobar
+mode=infrastructure
+
+[wifi-security]
+key-mgmt=wpa-psk
+psk=s3cu4e passphrase
+
+[ipv4]
+method=auto
+
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
index 203441ef0..de8373bef 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
@@ -20,8 +20,20 @@ addresses1=192.168.0.5;24;192.168.0.1;
addresses2=1.2.3.4;16;1.2.1.1;
address=2.3.4.5/24,2.3.4.6
address3=3.4.5.6/16
+address4=4.5.6.7/1.2.3.4
+address5=5.6.7.8
routes1=1.2.3.0/24,2.3.4.8,99
route=5.6.7.8/32
+routes2=1.1.1.2/12,
+routes3=1.1.1.3/13,,
+routes4=1.1.1.4/14,2.2.2.4
+routes5=1.1.1.5/15,2.2.2.5,
+routes6=1.1.1.6/16,2.2.2.6,0
+routes7=1.1.1.7/17,0.0.0.0
+routes8=1.1.1.8/18,0.0.0.0,
+routes9=1.1.1.9/19,0.0.0.0,0
+routes10=1.1.1.10/20,,0
+routes11=1.1.1.11/21,,21
ignore-auto-routes=false
ignore-auto-dns=false
@@ -33,8 +45,18 @@ addresses1=abcd:1234:ffff::cdde/64
addresses2=1:2:3:4:5:6:7:8/96
address=2:3:4:5:6:7:8:9/64,2:3:4:5:1:2:3:4
address3=3:4:5:6:7:8:9:0/128
+address4=3:4:5:6:7:8:9:14
+address5=3:4:5:6:7:8:9:15,
+address6=3:4:5:6:7:8:9:16,66
+address7=3:4:5:6:7:8:9:17,67,
+address8=3:4:5:6:7:8:9:18,68,::
+address9=3:4:5:6:7:8:9:19,69,1::09
routes1=a:b:c:d::/64;f:e:d:c:1:2:3:4;99;
route=d:e:f:0:1:2:3:4/64,f:e:d:c:1:2:3:4
route2=8:7:6:5:4:3:2:1/128
+route3=6:7:8:9:0:1:2:3/126,,1
+route4=7:8:9:0:1:2:3:4/125/::,5
+route5=8:9:0:1:2:3:4:5/124,6
+route6=8:9:0:1:2:3:4:6/123,,
ignore-auto-routes=false
ignore-auto-dns=false
diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c
index 2f89c5f18..cc57c1c39 100644
--- a/src/settings/plugins/keyfile/tests/test-keyfile.c
+++ b/src/settings/plugins/keyfile/tests/test-keyfile.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright (C) 2008 - 2014 Red Hat, Inc.
*/
#include <stdio.h>
@@ -40,12 +40,13 @@
#include <nm-setting-gsm.h>
#include <nm-setting-8021x.h>
#include <nm-setting-infiniband.h>
-
-#include "nm-test-helpers.h"
+#include <nm-logging.h>
#include "reader.h"
#include "writer.h"
+#include "nm-test-utils.h"
+
#define TEST_WIRED_FILE TEST_KEYFILES_DIR"/Test_Wired_Connection"
#define TEST_WIRELESS_FILE TEST_KEYFILES_DIR"/Test_Wireless_Connection"
@@ -53,16 +54,15 @@ static void
check_ip4_address (NMSettingIP4Config *config, int idx, const char *address_str, int plen, const char *gateway_str)
{
NMIP4Address *ip4 = nm_setting_ip4_config_get_address (config, idx);
- struct in_addr address;
- struct in_addr gateway;
+ guint32 address, gateway;
g_assert (inet_pton (AF_INET, address_str, &address) == 1);
g_assert (inet_pton (AF_INET, gateway_str, &gateway) == 1);
g_assert (ip4);
- g_assert (nm_ip4_address_get_address (ip4) == address.s_addr);
+ g_assert (nm_ip4_address_get_address (ip4) == address);
g_assert (nm_ip4_address_get_prefix (ip4) == plen);
- g_assert (nm_ip4_address_get_gateway (ip4) == gateway.s_addr);
+ g_assert (nm_ip4_address_get_gateway (ip4) == gateway);
}
static void
@@ -86,16 +86,15 @@ check_ip4_route (NMSettingIP4Config *config, int idx, const char *destination_st
const char *nexthop_str, int metric)
{
NMIP4Route *route = nm_setting_ip4_config_get_route (config, idx);
- struct in_addr destination;
- struct in_addr nexthop;
+ guint32 destination, nexthop;
g_assert (inet_pton (AF_INET, destination_str, &destination) == 1);
g_assert (inet_pton (AF_INET, nexthop_str, &nexthop) == 1);
g_assert (route);
- g_assert (nm_ip4_route_get_dest (route) == destination.s_addr);
+ g_assert (nm_ip4_route_get_dest (route) == destination);
g_assert (nm_ip4_route_get_prefix (route) == plen);
- g_assert (nm_ip4_route_get_next_hop (route) == nexthop.s_addr);
+ g_assert (nm_ip4_route_get_next_hop (route) == nexthop);
g_assert (nm_ip4_route_get_metric (route) == metric);
}
@@ -135,7 +134,7 @@ test_read_valid_wired_connection (void)
guint64 timestamp;
const char *expected_dns1 = "4.2.2.1";
const char *expected_dns2 = "4.2.2.2";
- struct in_addr addr;
+ guint32 addr;
struct in6_addr addr6;
const char *expected6_dns1 = "1111:dddd::aaaa";
const char *expected6_dns2 = "1::cafe";
@@ -143,7 +142,36 @@ test_read_valid_wired_connection (void)
const char *expected6_dnssearch2 = "redhat.com";
const char *expected6_dnssearch3 = "gnu.org";
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.addresses1*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.addresses2*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Missing prefix length*ipv4.address4*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Missing prefix length*ipv4.address5*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.routes2*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.routes3*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.routes5*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.routes8*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Missing prefix length*ipv6.address4*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv6.address5*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*Missing prefix length*ipv6.address5*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv6.address7*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv6.routes1*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv6.route6*semicolon at the end*");
connection = nm_keyfile_plugin_connection_from_file (TEST_WIRED_FILE, NULL);
+ g_test_assert_expected_messages ();
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_FILE);
@@ -259,7 +287,7 @@ test_read_valid_wired_connection (void)
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #1",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
@@ -270,23 +298,35 @@ test_read_valid_wired_connection (void)
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr.s_addr,
+ ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #2",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
/* IPv4 addresses */
- g_assert (nm_setting_ip4_config_get_num_addresses (s_ip4) == 4);
+ g_assert (nm_setting_ip4_config_get_num_addresses (s_ip4) == 6);
check_ip4_address (s_ip4, 0, "2.3.4.5", 24, "2.3.4.6");
check_ip4_address (s_ip4, 1, "192.168.0.5", 24, "192.168.0.1");
check_ip4_address (s_ip4, 2, "1.2.3.4", 16, "1.2.1.1");
check_ip4_address (s_ip4, 3, "3.4.5.6", 16, "0.0.0.0");
+ check_ip4_address (s_ip4, 4, "4.5.6.7", 24, "1.2.3.4");
+ check_ip4_address (s_ip4, 5, "5.6.7.8", 24, "0.0.0.0");
/* IPv4 routes */
- g_assert (nm_setting_ip4_config_get_num_routes (s_ip4) == 2);
+ g_assert (nm_setting_ip4_config_get_num_routes (s_ip4) == 12);
check_ip4_route (s_ip4, 0, "5.6.7.8", 32, "0.0.0.0", 0);
check_ip4_route (s_ip4, 1, "1.2.3.0", 24, "2.3.4.8", 99);
+ check_ip4_route (s_ip4, 2, "1.1.1.2", 12, "0.0.0.0", 0);
+ check_ip4_route (s_ip4, 3, "1.1.1.3", 13, "0.0.0.0", 0);
+ check_ip4_route (s_ip4, 4, "1.1.1.4", 14, "2.2.2.4", 0);
+ check_ip4_route (s_ip4, 5, "1.1.1.5", 15, "2.2.2.5", 0);
+ check_ip4_route (s_ip4, 6, "1.1.1.6", 16, "2.2.2.6", 0);
+ check_ip4_route (s_ip4, 7, "1.1.1.7", 17, "0.0.0.0", 0);
+ check_ip4_route (s_ip4, 8, "1.1.1.8", 18, "0.0.0.0", 0);
+ check_ip4_route (s_ip4, 9, "1.1.1.9", 19, "0.0.0.0", 0);
+ check_ip4_route (s_ip4, 10, "1.1.1.10", 20, "0.0.0.0", 0);
+ check_ip4_route (s_ip4, 11, "1.1.1.11", 21, "0.0.0.0", 21);
/* ===== IPv6 SETTING ===== */
@@ -357,17 +397,27 @@ test_read_valid_wired_connection (void)
NM_SETTING_IP6_CONFIG_DNS_SEARCH);
/* IPv6 addresses */
- g_assert (nm_setting_ip6_config_get_num_addresses (s_ip6) == 4);
+ g_assert (nm_setting_ip6_config_get_num_addresses (s_ip6) == 10);
check_ip6_address (s_ip6, 0, "2:3:4:5:6:7:8:9", 64, "2:3:4:5:1:2:3:4");
check_ip6_address (s_ip6, 1, "abcd:1234:ffff::cdde", 64, "::");
check_ip6_address (s_ip6, 2, "1:2:3:4:5:6:7:8", 96, "::");
check_ip6_address (s_ip6, 3, "3:4:5:6:7:8:9:0", 128, "::");
+ check_ip6_address (s_ip6, 4, "3:4:5:6:7:8:9:14", 64, "::");
+ check_ip6_address (s_ip6, 5, "3:4:5:6:7:8:9:15", 64, "::");
+ check_ip6_address (s_ip6, 6, "3:4:5:6:7:8:9:16", 66, "::");
+ check_ip6_address (s_ip6, 7, "3:4:5:6:7:8:9:17", 67, "::");
+ check_ip6_address (s_ip6, 8, "3:4:5:6:7:8:9:18", 68, "::");
+ check_ip6_address (s_ip6, 9, "3:4:5:6:7:8:9:19", 69, "1::09");
/* Route #1 */
- g_assert (nm_setting_ip6_config_get_num_routes (s_ip6) == 3);
+ g_assert (nm_setting_ip6_config_get_num_routes (s_ip6) == 7);
check_ip6_route (s_ip6, 0, "d:e:f:0:1:2:3:4", 64, "f:e:d:c:1:2:3:4", 0);
check_ip6_route (s_ip6, 1, "a:b:c:d::", 64, "f:e:d:c:1:2:3:4", 99);
check_ip6_route (s_ip6, 2, "8:7:6:5:4:3:2:1", 128, "::", 0);
+ check_ip6_route (s_ip6, 3, "6:7:8:9:0:1:2:3", 126, "::", 1);
+ check_ip6_route (s_ip6, 4, "7:8:9:0:1:2:3:4", 125, "::", 5);
+ check_ip6_route (s_ip6, 5, "8:9:0:1:2:3:4:5", 124, "::", 6);
+ check_ip6_route (s_ip6, 6, "8:9:0:1:2:3:4:6", 123, "::", 0);
g_object_unref (connection);
}
@@ -377,17 +427,17 @@ add_one_ip4_address (NMSettingIP4Config *s_ip4,
const char *gw,
guint32 prefix)
{
- struct in_addr tmp;
+ guint32 tmp;
NMIP4Address *ip4_addr;
ip4_addr = nm_ip4_address_new ();
nm_ip4_address_set_prefix (ip4_addr, prefix);
inet_pton (AF_INET, addr, &tmp);
- nm_ip4_address_set_address (ip4_addr, tmp.s_addr);
+ nm_ip4_address_set_address (ip4_addr, tmp);
inet_pton (AF_INET, gw, &tmp);
- nm_ip4_address_set_gateway (ip4_addr, tmp.s_addr);
+ nm_ip4_address_set_gateway (ip4_addr, tmp);
nm_setting_ip4_config_add_address (s_ip4, ip4_addr);
nm_ip4_address_unref (ip4_addr);
@@ -400,7 +450,7 @@ add_one_ip4_route (NMSettingIP4Config *s_ip4,
guint32 prefix,
guint32 metric)
{
- struct in_addr addr;
+ guint32 addr;
NMIP4Route *route;
route = nm_ip4_route_new ();
@@ -408,10 +458,10 @@ add_one_ip4_route (NMSettingIP4Config *s_ip4,
nm_ip4_route_set_metric (route, metric);
inet_pton (AF_INET, dest, &addr);
- nm_ip4_route_set_dest (route, addr.s_addr);
+ nm_ip4_route_set_dest (route, addr);
inet_pton (AF_INET, nh, &addr);
- nm_ip4_route_set_next_hop (route, addr.s_addr);
+ nm_ip4_route_set_next_hop (route, addr);
nm_setting_ip4_config_add_route (s_ip4, route);
nm_ip4_route_unref (route);
@@ -483,7 +533,7 @@ test_write_wired_connection (void)
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
- struct in_addr addr;
+ guint32 addr;
struct in6_addr addr6;
const char *dns1 = "4.2.2.1";
const char *dns2 = "4.2.2.2";
@@ -495,6 +545,10 @@ test_write_wired_connection (void)
const char *route1_nh = "10.10.10.1";
const char *route2 = "1.1.1.1";
const char *route2_nh = "1.2.1.1";
+ const char *route3 = "2.2.2.2";
+ const char *route3_nh = "0.0.0.0";
+ const char *route4 = "3.3.3.3";
+ const char *route4_nh = "0.0.0.0";
const char *dns6_1 = "1::cafe";
const char *dns6_2 = "2::cafe";
const char *address6_1 = "abcd::beef";
@@ -503,18 +557,17 @@ test_write_wired_connection (void)
const char *route6_1_nh = "8:7:6:5:4:3:2:1";
const char *route6_2 = "2001::1000";
const char *route6_2_nh = "2001::1111";
+ const char *route6_3 = "4:5:6:7:8:9:0:1";
+ const char *route6_3_nh = "::";
+ const char *route6_4 = "5:6:7:8:9:0:1:2";
+ const char *route6_4_nh = "::";
guint64 timestamp = 0x12345678L;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
- ASSERT (s_con != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -530,9 +583,6 @@ test_write_wired_connection (void)
/* Wired setting */
s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
- ASSERT (s_wired != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
mac = g_byte_array_sized_new (ETH_ALEN);
@@ -546,9 +596,6 @@ test_write_wired_connection (void)
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
- ASSERT (s_ip4 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -562,19 +609,18 @@ test_write_wired_connection (void)
/* Routes */
add_one_ip4_route (s_ip4, route1, route1_nh, 24, 3);
add_one_ip4_route (s_ip4, route2, route2_nh, 8, 1);
+ add_one_ip4_route (s_ip4, route3, route3_nh, 7, 0);
+ add_one_ip4_route (s_ip4, route4, route4_nh, 6, 4);
/* DNS servers */
inet_pton (AF_INET, dns1, &addr);
- nm_setting_ip4_config_add_dns (s_ip4, addr.s_addr);
+ nm_setting_ip4_config_add_dns (s_ip4, addr);
inet_pton (AF_INET, dns2, &addr);
- nm_setting_ip4_config_add_dns (s_ip4, addr.s_addr);
+ nm_setting_ip4_config_add_dns (s_ip4, addr);
/* IP6 setting */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
- ASSERT (s_ip6 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -588,6 +634,8 @@ test_write_wired_connection (void)
/* Routes */
add_one_ip6_route (s_ip6, route6_1, route6_1_nh, 64, 3);
add_one_ip6_route (s_ip6, route6_2, route6_2_nh, 56, 1);
+ add_one_ip6_route (s_ip6, route6_3, route6_3_nh, 63, 5);
+ add_one_ip6_route (s_ip6, route6_4, route6_4_nh, 62, 0);
/* DNS servers */
inet_pton (AF_INET6, dns6_1, &addr6);
@@ -754,15 +802,10 @@ test_write_ip6_wired_connection (void)
const char *gw = "dcba::beef";
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
- ASSERT (s_con != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -777,17 +820,11 @@ test_write_ip6_wired_connection (void)
/* Wired setting */
s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
- ASSERT (s_wired != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
- ASSERT (s_ip4 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -797,9 +834,6 @@ test_write_ip6_wired_connection (void)
/* IP6 setting */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
- ASSERT (s_ip6 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -857,7 +891,14 @@ test_read_wired_mac_case (void)
const char *expected_id = "Test Wired Connection MAC Case";
const char *expected_uuid = "4e80a56d-c99f-4aad-a6dd-b449bc398c57";
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.addresses1*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv4.addresses2*semicolon at the end*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*ipv6.routes1*semicolon at the end*");
connection = nm_keyfile_plugin_connection_from_file (TEST_WIRED_MAC_CASE_FILE, NULL);
+ g_test_assert_expected_messages ();
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_MAC_CASE_FILE);
@@ -927,6 +968,79 @@ test_read_wired_mac_case (void)
g_object_unref (connection);
}
+#define TEST_MAC_OLD_FORMAT_FILE TEST_KEYFILES_DIR"/Test_MAC_Old_Format"
+
+static void
+test_read_mac_old_format (void)
+{
+ NMConnection *connection;
+ NMSettingWired *s_wired;
+ GError *error = NULL;
+ gboolean success;
+ const GByteArray *array;
+ char expected_mac[ETH_ALEN] = { 0x00, 0x11, 0xaa, 0xbb, 0xcc, 0x55 };
+ char expected_cloned_mac[ETH_ALEN] = { 0x00, 0x16, 0xaa, 0xbb, 0xcc, 0xfe };
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_MAC_OLD_FORMAT_FILE, &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_wired = nm_connection_get_setting_wired (connection);
+ g_assert (s_wired);
+
+ /* MAC address */
+ array = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, ETH_ALEN);
+ g_assert (memcmp (array->data, expected_mac, ETH_ALEN) == 0);
+
+ /* Cloned MAC address */
+ array = nm_setting_wired_get_cloned_mac_address (s_wired);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, ETH_ALEN);
+ g_assert (memcmp (array->data, expected_cloned_mac, ETH_ALEN) == 0);
+
+ g_object_unref (connection);
+}
+
+#define TEST_MAC_IB_OLD_FORMAT_FILE TEST_KEYFILES_DIR"/Test_MAC_IB_Old_Format"
+
+static void
+test_read_mac_ib_old_format (void)
+{
+ NMConnection *connection;
+ NMSettingInfiniband *s_ib;
+ GError *error = NULL;
+ gboolean success;
+ const GByteArray *array;
+ guint8 expected_mac[INFINIBAND_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
+ 0x77, 0x88, 0x99, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89,
+ 0x90 };
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_MAC_IB_OLD_FORMAT_FILE, &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s_ib = nm_connection_get_setting_infiniband (connection);
+ g_assert (s_ib);
+
+ /* MAC address */
+ array = nm_setting_infiniband_get_mac_address (s_ib);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, INFINIBAND_ALEN);
+ g_assert_cmpint (memcmp (array->data, expected_mac, sizeof (expected_mac)), ==, 0);
+
+ g_object_unref (connection);
+}
+
static void
test_read_valid_wireless_connection (void)
{
@@ -1066,15 +1180,10 @@ test_write_wireless_connection (void)
guint64 timestamp = 0x12344433L;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
- ASSERT (s_con != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -1090,9 +1199,6 @@ test_write_wireless_connection (void)
/* Wireless setting */
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
- ASSERT (s_wireless != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wireless));
bssid = g_byte_array_sized_new (ETH_ALEN);
@@ -1113,9 +1219,6 @@ test_write_wireless_connection (void)
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
- ASSERT (s_ip4 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -1125,9 +1228,6 @@ test_write_wireless_connection (void)
/* IP6 setting */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
- ASSERT (s_ip6 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
@@ -1217,15 +1317,10 @@ test_write_string_ssid (void)
GKeyFile *keyfile;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
- ASSERT (s_con != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -1239,9 +1334,6 @@ test_write_string_ssid (void)
/* Wireless setting */
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
- ASSERT (s_wireless != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wireless));
ssid = g_byte_array_sized_new (sizeof (tmpssid));
@@ -1252,9 +1344,6 @@ test_write_string_ssid (void)
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
- ASSERT (s_ip4 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -1276,7 +1365,7 @@ test_write_string_ssid (void)
keyfile = g_key_file_new ();
ASSERT (g_key_file_load_from_file (keyfile, testfile, 0, NULL) == TRUE,
"string-ssid-verify", "failed to load keyfile to verify");
- tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, NULL);
+ tmp = g_key_file_get_string (keyfile, "wifi", NM_SETTING_WIRELESS_SSID, NULL);
ASSERT (tmp, "string-ssid-verify", "failed to load 'ssid' key from file");
ASSERT (strlen (tmp) == sizeof (tmpssid),
"string-ssid-verify", "reread SSID and expected were different sizes");
@@ -1398,7 +1487,7 @@ test_write_intlist_ssid (void)
g_assert_no_error (error);
g_assert (success);
- intlist = g_key_file_get_integer_list (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &len, &error);
+ intlist = g_key_file_get_integer_list (keyfile, "wifi", NM_SETTING_WIRELESS_SSID, &len, &error);
g_assert_no_error (error);
g_assert (intlist);
g_assert_cmpint (len, ==, sizeof (tmpssid));
@@ -1554,7 +1643,7 @@ test_write_intlike_ssid (void)
g_assert_no_error (error);
g_assert (success);
- tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &error);
+ tmp = g_key_file_get_string (keyfile, "wifi", NM_SETTING_WIRELESS_SSID, &error);
g_assert_no_error (error);
g_assert (tmp);
g_assert_cmpstr (tmp, ==, "101");
@@ -1642,7 +1731,7 @@ test_write_intlike_ssid_2 (void)
g_assert_no_error (error);
g_assert (success);
- tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &error);
+ tmp = g_key_file_get_string (keyfile, "wifi", NM_SETTING_WIRELESS_SSID, &error);
g_assert_no_error (error);
g_assert (tmp);
g_assert_cmpstr (tmp, ==, "11\\;12\\;13\\;");
@@ -1843,15 +1932,10 @@ test_write_bt_dun_connection (void)
guint64 timestamp = 0x12344433L;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
- ASSERT (s_con != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -1867,9 +1951,6 @@ test_write_bt_dun_connection (void)
/* Bluetooth setting */
s_bt = NM_SETTING_BLUETOOTH (nm_setting_bluetooth_new ());
- ASSERT (s_bt != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_BLUETOOTH_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_bt));
bdaddr = g_byte_array_sized_new (ETH_ALEN);
@@ -1885,9 +1966,6 @@ test_write_bt_dun_connection (void)
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
- ASSERT (s_ip4 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -1896,9 +1974,6 @@ test_write_bt_dun_connection (void)
/* GSM setting */
s_gsm = NM_SETTING_GSM (nm_setting_gsm_new ());
- ASSERT (s_gsm != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_GSM_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_gsm));
g_object_set (s_gsm,
@@ -2103,15 +2178,10 @@ test_write_gsm_connection (void)
guint64 timestamp = 0x12344433L;
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
- ASSERT (s_con != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -2127,9 +2197,6 @@ test_write_gsm_connection (void)
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
- ASSERT (s_ip4 != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
@@ -2138,9 +2205,6 @@ test_write_gsm_connection (void)
/* GSM setting */
s_gsm = NM_SETTING_GSM (nm_setting_gsm_new ());
- ASSERT (s_gsm != NULL,
- "connection-write", "failed to allocate new %s setting",
- NM_SETTING_GSM_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_gsm));
g_object_set (s_gsm,
@@ -2228,7 +2292,10 @@ test_read_wired_8021x_tls_blob_connection (void)
g_assert_cmpint (nm_setting_802_1x_get_ca_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_BLOB);
/* Make sure it's not a path, since it's a blob */
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL,
+ "*assertion*scheme == NM_SETTING_802_1X_CK_SCHEME_PATH*");
tmp = nm_setting_802_1x_get_ca_cert_path (s_8021x);
+ g_test_assert_expected_messages ();
g_assert (tmp == NULL);
/* Validate the path */
@@ -2258,7 +2325,10 @@ test_read_wired_8021x_tls_bad_path_connection (void)
char *tmp2;
gboolean success;
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*does not exist*");
connection = nm_keyfile_plugin_connection_from_file (TEST_WIRED_TLS_PATH_MISSING_FILE, &error);
+ g_test_assert_expected_messages ();
if (connection == NULL) {
g_assert (error);
g_warning ("Failed to read %s: %s", TEST_WIRED_TLS_PATH_MISSING_FILE, error->message);
@@ -2894,6 +2964,7 @@ test_write_bridge_main (void)
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "br0",
NULL);
g_free (uuid);
@@ -3076,6 +3147,247 @@ test_write_bridge_component (void)
}
static void
+test_read_new_wired_group_name (void)
+{
+ NMConnection *connection;
+ NMSettingWired *s_wired;
+ const GByteArray *array;
+ guint8 expected_mac[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
+ GError *error = NULL;
+ gboolean success;
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_KEYFILES_DIR"/Test_New_Wired_Group_Name", &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Wired setting */
+ s_wired = nm_connection_get_setting_wired (connection);
+ g_assert (s_wired);
+ g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 1400);
+
+ array = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, ETH_ALEN);
+ g_assert_cmpint (memcmp (array->data, expected_mac, sizeof (expected_mac)), ==, 0);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_new_wired_group_name (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ char *uuid;
+ gboolean success;
+ NMConnection *reread;
+ char *testfile = NULL;
+ GError *error = NULL;
+ pid_t owner_grp;
+ uid_t owner_uid;
+ GKeyFile *kf;
+ char *s;
+ gint mtu;
+
+ connection = nm_connection_new ();
+ g_assert (connection);
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ g_assert (s_con);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Wired New Group Name",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ g_assert (s_wired);
+ g_object_set (s_wired, NM_SETTING_WIRED_MTU, 1400, NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* Write out the connection */
+ owner_uid = geteuid ();
+ owner_grp = getegid ();
+ success = nm_keyfile_plugin_write_test_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (testfile);
+
+ /* Read the connection back in and compare it to the one we just wrote out */
+ reread = nm_keyfile_plugin_connection_from_file (testfile, &error);
+ g_assert_no_error (error);
+ g_assert (reread);
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ /* Look at the keyfile itself to ensure we wrote out the new group names and type */
+ kf = g_key_file_new ();
+ success = g_key_file_load_from_file (kf, testfile, G_KEY_FILE_NONE, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s = g_key_file_get_string (kf, NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE, &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (s, ==, "ethernet");
+ g_free (s);
+
+ mtu = g_key_file_get_integer (kf, "ethernet", NM_SETTING_WIRED_MTU, &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (mtu, ==, 1400);
+
+ unlink (testfile);
+ g_free (testfile);
+
+ g_object_unref (reread);
+ g_object_unref (connection);
+}
+
+static void
+test_read_new_wireless_group_names (void)
+{
+ NMConnection *connection;
+ NMSettingWireless *s_wifi;
+ NMSettingWirelessSecurity *s_wsec;
+ const GByteArray *array;
+ const char *expected_ssid = "foobar";
+ GError *error = NULL;
+ gboolean success;
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_KEYFILES_DIR"/Test_New_Wireless_Group_Names", &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Wifi setting */
+ s_wifi = nm_connection_get_setting_wireless (connection);
+ g_assert (s_wifi);
+
+ array = nm_setting_wireless_get_ssid (s_wifi);
+ g_assert (array);
+ g_assert_cmpint (array->len, ==, strlen (expected_ssid));
+ g_assert_cmpint (memcmp (array->data, expected_ssid, array->len), ==, 0);
+
+ g_assert_cmpstr (nm_setting_wireless_get_mode (s_wifi), ==, NM_SETTING_WIRELESS_MODE_INFRA);
+
+ /* Wifi security setting */
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ g_assert (s_wsec);
+ g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "wpa-psk");
+ g_assert_cmpstr (nm_setting_wireless_security_get_psk (s_wsec), ==, "s3cu4e passphrase");
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_new_wireless_group_names (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wifi;
+ NMSettingWirelessSecurity *s_wsec;
+ char *uuid;
+ GByteArray *ssid;
+ unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 };
+ const char *expected_psk = "asdfasdfasdfa12315";
+ gboolean success;
+ NMConnection *reread;
+ char *testfile = NULL;
+ GError *error = NULL;
+ pid_t owner_grp;
+ uid_t owner_uid;
+ GKeyFile *kf;
+ char *s;
+
+ connection = nm_connection_new ();
+
+ /* Connection setting */
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write New Wireless Group Names",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* WiFi setting */
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+ ssid = g_byte_array_sized_new (sizeof (tmpssid));
+ g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
+ g_object_set (s_wifi,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA,
+ NULL);
+ g_byte_array_free (ssid, TRUE);
+
+ /* WiFi security setting */
+ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+ g_object_set (s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
+ NM_SETTING_WIRELESS_SECURITY_PSK, expected_psk,
+ NULL);
+
+ /* Write out the connection */
+ owner_uid = geteuid ();
+ owner_grp = getegid ();
+ success = nm_keyfile_plugin_write_test_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert (testfile);
+
+ /* Read the connection back in and compare it to the one we just wrote out */
+ reread = nm_keyfile_plugin_connection_from_file (testfile, &error);
+ g_assert_no_error (error);
+ g_assert (reread);
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ /* Look at the keyfile itself to ensure we wrote out the new group names and type */
+ kf = g_key_file_new ();
+ success = g_key_file_load_from_file (kf, testfile, G_KEY_FILE_NONE, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ s = g_key_file_get_string (kf, NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE, &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (s, ==, "wifi");
+ g_free (s);
+
+ s = g_key_file_get_string (kf, "wifi", NM_SETTING_WIRELESS_MODE, &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (s, ==, NM_SETTING_WIRELESS_MODE_INFRA);
+ g_free (s);
+
+ s = g_key_file_get_string (kf, "wifi-security", NM_SETTING_WIRELESS_SECURITY_PSK, &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (s, ==, expected_psk);
+ g_free (s);
+
+ unlink (testfile);
+ g_free (testfile);
+
+ g_object_unref (reread);
+ g_object_unref (connection);
+}
+
+static void
test_read_missing_vlan_setting (void)
{
NMConnection *connection;
@@ -3098,15 +3410,13 @@ test_read_missing_vlan_setting (void)
g_object_unref (connection);
}
+NMTST_DEFINE ();
+
int main (int argc, char **argv)
{
- GError *error = NULL;
char *base;
- g_type_init ();
-
- if (!nm_utils_init (&error))
- FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
+ nmtst_init_assert_logging (&argc, &argv);
/* The tests */
test_read_valid_wired_connection ();
@@ -3116,6 +3426,8 @@ int main (int argc, char **argv)
test_write_ip6_wired_connection ();
test_read_wired_mac_case ();
+ test_read_mac_old_format ();
+ test_read_mac_ib_old_format ();
test_read_valid_wireless_connection ();
test_write_wireless_connection ();
@@ -3154,6 +3466,11 @@ int main (int argc, char **argv)
test_read_bridge_component ();
test_write_bridge_component ();
+ test_read_new_wired_group_name ();
+ test_write_new_wired_group_name ();
+ test_read_new_wireless_group_names ();
+ test_write_new_wireless_group_names ();
+
test_read_missing_vlan_setting ();
base = g_path_get_basename (argv[0]);
diff --git a/src/settings/plugins/keyfile/utils.c b/src/settings/plugins/keyfile/utils.c
index 8db5d524a..e2bfc38c1 100644
--- a/src/settings/plugins/keyfile/utils.c
+++ b/src/settings/plugins/keyfile/utils.c
@@ -22,6 +22,9 @@
#include <stdlib.h>
#include <string.h>
#include "utils.h"
+#include <nm-setting-wired.h>
+#include <nm-setting-wireless.h>
+#include <nm-setting-wireless-security.h>
static const char temp_letters[] =
@@ -104,3 +107,176 @@ nm_keyfile_plugin_utils_should_ignore_file (const char *filename)
return ignore;
}
+typedef struct {
+ const char *setting;
+ const char *alias;
+} SettingAlias;
+
+static const SettingAlias alias_list[] = {
+ { NM_SETTING_WIRED_SETTING_NAME, "ethernet" },
+ { NM_SETTING_WIRELESS_SETTING_NAME, "wifi" },
+ { NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, "wifi-security" },
+};
+
+const char *
+nm_keyfile_plugin_get_alias_for_setting_name (const char *setting_name)
+{
+ guint i;
+
+ g_return_val_if_fail (setting_name != NULL, NULL);
+
+ for (i = 0; i < G_N_ELEMENTS (alias_list); i++) {
+ if (strcmp (setting_name, alias_list[i].setting) == 0)
+ return alias_list[i].alias;
+ }
+ return NULL;
+}
+
+const char *
+nm_keyfile_plugin_get_setting_name_for_alias (const char *alias)
+{
+ guint i;
+
+ g_return_val_if_fail (alias != NULL, NULL);
+
+ for (i = 0; i < G_N_ELEMENTS (alias_list); i++) {
+ if (strcmp (alias, alias_list[i].alias) == 0)
+ return alias_list[i].setting;
+ }
+ return NULL;
+}
+
+/**********************************************************************/
+
+/* List helpers */
+#define DEFINE_KF_LIST_WRAPPER(stype, get_ctype, set_ctype) \
+get_ctype \
+nm_keyfile_plugin_kf_get_##stype##_list (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ gsize *out_length, \
+ GError **error) \
+{ \
+ get_ctype list; \
+ const char *alias; \
+ GError *local = NULL; \
+ \
+ list = g_key_file_get_##stype##_list (kf, group, key, out_length, &local); \
+ if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { \
+ alias = nm_keyfile_plugin_get_alias_for_setting_name (group); \
+ if (alias) { \
+ g_clear_error (&local); \
+ list = g_key_file_get_##stype##_list (kf, alias, key, out_length, &local); \
+ } \
+ } \
+ if (local) \
+ g_propagate_error (error, local); \
+ return list; \
+} \
+ \
+void \
+nm_keyfile_plugin_kf_set_##stype##_list (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ set_ctype list[], \
+ gsize length) \
+{ \
+ const char *alias; \
+ \
+ alias = nm_keyfile_plugin_get_alias_for_setting_name (group); \
+ g_key_file_set_##stype##_list (kf, alias ? alias : group, key, list, length); \
+}
+
+DEFINE_KF_LIST_WRAPPER(integer, gint*, gint);
+DEFINE_KF_LIST_WRAPPER(string, gchar **, const gchar* const);
+
+/* Single value helpers */
+#define DEFINE_KF_WRAPPER(stype, get_ctype, set_ctype) \
+get_ctype \
+nm_keyfile_plugin_kf_get_##stype (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ GError **error) \
+{ \
+ get_ctype val; \
+ const char *alias; \
+ GError *local = NULL; \
+ \
+ val = g_key_file_get_##stype (kf, group, key, &local); \
+ if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { \
+ alias = nm_keyfile_plugin_get_alias_for_setting_name (group); \
+ if (alias) { \
+ g_clear_error (&local); \
+ val = g_key_file_get_##stype (kf, alias, key, &local); \
+ } \
+ } \
+ if (local) \
+ g_propagate_error (error, local); \
+ return val; \
+} \
+ \
+void \
+nm_keyfile_plugin_kf_set_##stype (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ set_ctype value) \
+{ \
+ const char *alias; \
+ \
+ alias = nm_keyfile_plugin_get_alias_for_setting_name (group); \
+ g_key_file_set_##stype (kf, alias ? alias : group, key, value); \
+}
+
+DEFINE_KF_WRAPPER(string, gchar*, const gchar*);
+DEFINE_KF_WRAPPER(integer, gint, gint);
+DEFINE_KF_WRAPPER(boolean, gboolean, gboolean);
+DEFINE_KF_WRAPPER(value, gchar*, const gchar*);
+
+
+gchar **
+nm_keyfile_plugin_kf_get_keys (GKeyFile *kf,
+ const char *group,
+ gsize *out_length,
+ GError **error)
+{
+ gchar **keys;
+ const char *alias;
+ GError *local = NULL;
+
+ keys = g_key_file_get_keys (kf, group, out_length, &local);
+ if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
+ alias = nm_keyfile_plugin_get_alias_for_setting_name (group);
+ if (alias) {
+ g_clear_error (&local);
+ keys = g_key_file_get_keys (kf, alias, out_length, &local);
+ }
+ }
+ if (local)
+ g_propagate_error (error, local);
+ return keys;
+}
+
+gboolean
+nm_keyfile_plugin_kf_has_key (GKeyFile *kf,
+ const char *group,
+ const char *key,
+ GError **error)
+{
+ gboolean has;
+ const char *alias;
+ GError *local = NULL;
+
+ has = g_key_file_has_key (kf, group, key, &local);
+ if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
+ alias = nm_keyfile_plugin_get_alias_for_setting_name (group);
+ if (alias) {
+ g_clear_error (&local);
+ has = g_key_file_has_key (kf, alias, key, &local);
+ }
+ }
+ if (local)
+ g_propagate_error (error, local);
+ return has;
+}
+
+
diff --git a/src/settings/plugins/keyfile/utils.h b/src/settings/plugins/keyfile/utils.h
index 68e6e56f2..9a2e485bc 100644
--- a/src/settings/plugins/keyfile/utils.h
+++ b/src/settings/plugins/keyfile/utils.h
@@ -26,5 +26,54 @@
gboolean nm_keyfile_plugin_utils_should_ignore_file (const char *filename);
+const char *nm_keyfile_plugin_get_alias_for_setting_name (const char *setting_name);
+
+const char *nm_keyfile_plugin_get_setting_name_for_alias (const char *alias);
+
+/*********************************************************/
+
+/* List helpers */
+#define DEFINE_KF_LIST_WRAPPER_PROTO(stype, get_ctype, set_ctype) \
+get_ctype nm_keyfile_plugin_kf_get_##stype##_list (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ gsize *out_length, \
+ GError **error); \
+\
+void nm_keyfile_plugin_kf_set_##stype##_list (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ set_ctype list[], \
+ gsize length);
+DEFINE_KF_LIST_WRAPPER_PROTO(integer, gint*, gint)
+DEFINE_KF_LIST_WRAPPER_PROTO(string, gchar**, const gchar* const)
+
+/* Single-value helpers */
+#define DEFINE_KF_WRAPPER_PROTO(stype, get_ctype, set_ctype) \
+get_ctype nm_keyfile_plugin_kf_get_##stype (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ GError **error); \
+\
+void nm_keyfile_plugin_kf_set_##stype (GKeyFile *kf, \
+ const char *group, \
+ const char *key, \
+ set_ctype value);
+DEFINE_KF_WRAPPER_PROTO(string, gchar*, const gchar*)
+DEFINE_KF_WRAPPER_PROTO(integer, gint, gint)
+DEFINE_KF_WRAPPER_PROTO(boolean, gboolean, gboolean)
+DEFINE_KF_WRAPPER_PROTO(value, gchar*, const gchar*)
+
+/* Misc */
+gchar ** nm_keyfile_plugin_kf_get_keys (GKeyFile *kf,
+ const char *group,
+ gsize *out_length,
+ GError **error);
+
+gboolean nm_keyfile_plugin_kf_has_key (GKeyFile *kf,
+ const char *group,
+ const char *key,
+ GError **error);
+
#endif /* _UTILS_H_ */
diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c
index 38061a5d1..5f3ebe25f 100644
--- a/src/settings/plugins/keyfile/writer.c
+++ b/src/settings/plugins/keyfile/writer.c
@@ -44,8 +44,35 @@
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
+#include "nm-logging.h"
#include "writer.h"
#include "common.h"
+#include "utils.h"
+
+/* Some setting properties also contain setting names, such as
+ * NMSettingConnection's 'type' property (which specifies the base type of the
+ * connection, eg ethernet or wifi) or the 802-11-wireless setting's
+ * 'security' property which specifies whether or not the AP requires
+ * encrpytion. This function handles translating those properties' values
+ * from the real setting name to the more-readable alias.
+ */
+static void
+setting_alias_writer (GKeyFile *file,
+ const char *keyfile_dir,
+ const char *uuid,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
+{
+ const char *str, *alias;
+
+ str = g_value_get_string (value);
+ alias = nm_keyfile_plugin_get_alias_for_setting_name (str);
+ nm_keyfile_plugin_kf_set_string (file,
+ nm_setting_get_name (setting),
+ key,
+ alias ? alias : str);
+}
static gboolean
write_array_of_uint (GKeyFile *file,
@@ -65,7 +92,7 @@ write_array_of_uint (GKeyFile *file,
for (i = 0; i < array->len; i++)
tmp_array[i] = g_array_index (array, int, i);
- g_key_file_set_integer_list (file, nm_setting_get_name (setting), key, tmp_array, array->len);
+ nm_keyfile_plugin_kf_set_integer_list (file, nm_setting_get_name (setting), key, tmp_array, array->len);
g_free (tmp_array);
return TRUE;
}
@@ -91,71 +118,63 @@ ip4_dns_writer (GKeyFile *file,
list = g_new0 (char *, array->len + 1);
for (i = 0; i < array->len; i++) {
- char buf[INET_ADDRSTRLEN + 1];
- struct in_addr addr;
-
- addr.s_addr = g_array_index (array, guint32, i);
- if (!inet_ntop (AF_INET, &addr, buf, sizeof (buf))) {
- g_warning ("%s: error converting IP4 address 0x%X",
- __func__, ntohl (addr.s_addr));
- } else
- list[num++] = g_strdup (buf);
+ char *buf = g_new (char, INET_ADDRSTRLEN);
+ guint32 addr;
+
+ addr = g_array_index (array, guint32, i);
+ nm_utils_inet4_ntop (addr, buf);
+ list[num++] = buf;
}
- g_key_file_set_string_list (file, nm_setting_get_name (setting), key, (const char **) list, num);
+ nm_keyfile_plugin_kf_set_string_list (file, nm_setting_get_name (setting), key, (const char **) list, num);
g_strfreev (list);
}
static void
write_ip4_values (GKeyFile *file,
const char *setting_name,
- const char *key,
GPtrArray *array,
- guint32 tuple_len,
- guint32 addr1_pos,
- guint32 addr2_pos)
+ gboolean is_route)
{
GString *output;
- int i, j;
+ int i;
+ guint32 addr, gw, plen, metric;
+ char key_name[30], *key_name_idx;
- for (i = 0, j = 0; i < array->len; i++, j++) {
- GArray *tuple = g_ptr_array_index (array, i);
- gboolean success = TRUE;
- char *key_name;
- int k;
+ if (!array->len)
+ return;
- output = g_string_new ("");
+ strcpy (key_name, is_route ? "route" : "address");
+ key_name_idx = key_name + strlen (key_name);
- for (k = 0; k < tuple_len; k++) {
- if (k == addr1_pos || k == addr2_pos) {
- char buf[INET_ADDRSTRLEN + 1];
- struct in_addr addr;
-
- /* IP addresses */
- addr.s_addr = g_array_index (tuple, guint32, k);
- if (!inet_ntop (AF_INET, &addr, buf, sizeof (buf))) {
- g_warning ("%s: error converting IP4 address 0x%X",
- __func__, ntohl (addr.s_addr));
- success = FALSE;
- break;
- } else {
- g_string_append_printf (output, "%s%s", k == 0 ? "" : ",", buf);
- }
- } else {
- /* prefix, metric */
- g_string_append_printf (output, "%c%d", k == 1 ? '/' : ',', g_array_index (tuple, guint32, k));
- }
- }
+ output = g_string_sized_new (2*INET_ADDRSTRLEN + 10);
+ for (i = 0; i < array->len; i++) {
+ GArray *tuple = g_ptr_array_index (array, i);
- if (success) {
- key_name = g_strdup_printf ("%s%d", key, j + 1);
- g_key_file_set_string (file, setting_name, key_name, output->str);
- g_free (key_name);
+ addr = g_array_index (tuple, guint32, 0);
+ plen = g_array_index (tuple, guint32, 1);
+ gw = g_array_index (tuple, guint32, 2);
+ metric = is_route ? g_array_index (tuple, guint32, 3) : 0;
+
+ g_string_set_size (output, 0);
+ g_string_append_printf (output, "%s/%u",
+ nm_utils_inet4_ntop (addr, NULL),
+ (unsigned) plen);
+ if (metric || gw) {
+ /* Older versions of the plugin do not support the form
+ * "a.b.c.d/plen,,metric", so, we always have to write the
+ * gateway, even if it's 0.0.0.0.
+ * The current version support reading of the above form. */
+ g_string_append_c (output, ',');
+ g_string_append (output, nm_utils_inet4_ntop (gw, NULL));
+ if (metric)
+ g_string_append_printf (output, ",%lu", (unsigned long) metric);
}
- g_string_free (output, TRUE);
-
+ sprintf (key_name_idx, "%d", i + 1);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, key_name, output->str);
}
+ g_string_free (output, TRUE);
}
static void
@@ -173,7 +192,18 @@ ip4_addr_writer (GKeyFile *file,
array = (GPtrArray *) g_value_get_boxed (value);
if (array && array->len)
- write_ip4_values (file, setting_name, "address", array, 3, 0, 2);
+ write_ip4_values (file, setting_name, array, FALSE);
+}
+
+static void
+ip4_addr_label_writer (GKeyFile *file,
+ const char *keyfile_dir,
+ const char *uuid,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
+{
+ /* skip */
}
static void
@@ -191,7 +221,7 @@ ip4_route_writer (GKeyFile *file,
array = (GPtrArray *) g_value_get_boxed (value);
if (array && array->len)
- write_ip4_values (file, setting_name, "route", array, 4, 0, 2);
+ write_ip4_values (file, setting_name, array, TRUE);
}
static void
@@ -216,90 +246,63 @@ ip6_dns_writer (GKeyFile *file,
list = g_new0 (char *, array->len + 1);
for (i = 0; i < array->len; i++) {
- char buf[INET6_ADDRSTRLEN];
+ char *buf = g_new (char, INET6_ADDRSTRLEN);
byte_array = g_ptr_array_index (array, i);
- if (!inet_ntop (AF_INET6, (struct in6_addr *) byte_array->data, buf, sizeof (buf))) {
- int j;
- GString *ip6_str = g_string_new (NULL);
- g_string_append_printf (ip6_str, "%02X", byte_array->data[0]);
- for (j = 1; j < 16; j++)
- g_string_append_printf (ip6_str, " %02X", byte_array->data[j]);
- g_warning ("%s: error converting IP6 address %s",
- __func__, ip6_str->str);
- g_string_free (ip6_str, TRUE);
- } else
- list[num++] = g_strdup (buf);
+ nm_utils_inet6_ntop ((const struct in6_addr *) byte_array->data, buf);
+ list[num++] = buf;
}
- g_key_file_set_string_list (file, nm_setting_get_name (setting), key, (const char **) list, num);
+ nm_keyfile_plugin_kf_set_string_list (file, nm_setting_get_name (setting), key, (const char **) list, num);
g_strfreev (list);
}
-static gboolean
+static void
ip6_array_to_addr (GValueArray *values,
guint32 idx,
char *buf,
- size_t buflen,
- gboolean *out_is_unspec)
+ struct in6_addr *out_addr)
{
GByteArray *byte_array;
GValue *addr_val;
- struct in6_addr *addr;
-
- g_return_val_if_fail (buflen >= INET6_ADDRSTRLEN, FALSE);
+ const struct in6_addr *addr;
addr_val = g_value_array_get_nth (values, idx);
byte_array = g_value_get_boxed (addr_val);
- addr = (struct in6_addr *) byte_array->data;
+ addr = (const struct in6_addr *) byte_array->data;
- if (out_is_unspec && IN6_IS_ADDR_UNSPECIFIED (addr))
- *out_is_unspec = TRUE;
+ nm_utils_inet6_ntop (addr, buf);
- errno = 0;
- if (!inet_ntop (AF_INET6, addr, buf, buflen)) {
- GString *ip6_str = g_string_sized_new (INET6_ADDRSTRLEN + 10);
-
- /* error converting the address */
- g_string_append_printf (ip6_str, "%02X", byte_array->data[0]);
- for (idx = 1; idx < 16; idx++)
- g_string_append_printf (ip6_str, " %02X", byte_array->data[idx]);
- g_warning ("%s: error %d converting IP6 address %s",
- __func__, errno, ip6_str->str);
- g_string_free (ip6_str, TRUE);
- return FALSE;
- }
-
- return TRUE;
+ if (out_addr)
+ *out_addr = *addr;
}
static char *
-ip6_array_to_addr_prefix (GValueArray *values)
+ip6_array_to_addr_prefix (GValueArray *values, gboolean force_write_gateway)
{
GValue *prefix_val;
char *ret = NULL;
GString *ip6_str;
- char buf[INET6_ADDRSTRLEN + 1];
- gboolean is_unspec = FALSE;
+ char buf[INET6_ADDRSTRLEN];
+ struct in6_addr addr;
/* address */
- if (ip6_array_to_addr (values, 0, buf, sizeof (buf), NULL)) {
- /* Enough space for the address, '/', and the prefix */
- ip6_str = g_string_sized_new ((INET6_ADDRSTRLEN * 2) + 5);
-
- /* prefix */
- g_string_append (ip6_str, buf);
- prefix_val = g_value_array_get_nth (values, 1);
- g_string_append_printf (ip6_str, "/%u", g_value_get_uint (prefix_val));
-
- if (ip6_array_to_addr (values, 2, buf, sizeof (buf), &is_unspec)) {
- if (!is_unspec)
- g_string_append_printf (ip6_str, ",%s", buf);
- }
+ ip6_array_to_addr (values, 0, buf, NULL);
- ret = ip6_str->str;
- g_string_free (ip6_str, FALSE);
- }
+ /* Enough space for the address, '/', and the prefix */
+ ip6_str = g_string_sized_new ((INET6_ADDRSTRLEN * 2) + 5);
+
+ /* prefix */
+ g_string_append (ip6_str, buf);
+ prefix_val = g_value_array_get_nth (values, 1);
+ g_string_append_printf (ip6_str, "/%u", g_value_get_uint (prefix_val));
+
+ ip6_array_to_addr (values, 2, buf, &addr);
+ if (force_write_gateway || !IN6_IS_ADDR_UNSPECIFIED (&addr))
+ g_string_append_printf (ip6_str, ",%s", buf);
+
+ ret = ip6_str->str;
+ g_string_free (ip6_str, FALSE);
return ret;
}
@@ -327,20 +330,18 @@ ip6_addr_writer (GKeyFile *file,
char *key_name, *ip6_addr;
if (values->n_values != 3) {
- g_warning ("%s: error writing IP6 address %d (address array length "
- "%d is not 3)",
- __func__, i, values->n_values);
+ nm_log_warn (LOGD_SETTINGS, "%s: error writing IP6 address %d (address array "
+ "length %d is not 3)", __func__, i, values->n_values);
continue;
}
- ip6_addr = ip6_array_to_addr_prefix (values);
- if (ip6_addr) {
- /* Write it out */
- key_name = g_strdup_printf ("address%d", j++);
- g_key_file_set_string (file, setting_name, key_name, ip6_addr);
- g_free (key_name);
- g_free (ip6_addr);
- }
+ /* we allow omitting the gateway if it's :: */
+ ip6_addr = ip6_array_to_addr_prefix (values, FALSE);
+ /* Write it out */
+ key_name = g_strdup_printf ("address%d", j++);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, key_name, ip6_addr);
+ g_free (key_name);
+ g_free (ip6_addr);
}
}
@@ -366,21 +367,35 @@ ip6_route_writer (GKeyFile *file,
for (i = 0, j = 1; i < array->len; i++) {
GValueArray *values = g_ptr_array_index (array, i);
char *key_name;
- guint32 int_val;
+ char *addr_str;
+ guint metric;
output = g_string_new ("");
- /* Address, prefix and next hop*/
- g_string_append (output, ip6_array_to_addr_prefix (values));
-
/* Metric */
value = g_value_array_get_nth (values, 3);
- int_val = g_value_get_uint (value);
- g_string_append_printf (output, ",%d", int_val);
+ metric = g_value_get_uint (value);
+
+ /* Address, prefix and next hop
+ * We allow omitting the gateway ::, if we also omit the metric
+ * and force writing of the gateway, if we add a non zero metric.
+ * The current version of the reader also supports the syntax
+ * "a:b:c::/plen,,metric" for a gateway ::.
+ * As older versions of the plugin, cannot read this form,
+ * we always write the gateway, whenever we also write the metric.
+ * But if possible, we omit them both (",::,0") or only the metric
+ * (",0").
+ **/
+ addr_str = ip6_array_to_addr_prefix (values, metric != 0);
+ g_string_append (output, addr_str);
+ g_free (addr_str);
+
+ if (metric != 0)
+ g_string_append_printf (output, ",%u", metric);
/* Write it out */
key_name = g_strdup_printf ("route%d", j++);
- g_key_file_set_string (file, setting_name, key_name, output->str);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, key_name, output->str);
g_free (key_name);
g_string_free (output, TRUE);
@@ -399,23 +414,15 @@ mac_address_writer (GKeyFile *file,
GByteArray *array;
const char *setting_name = nm_setting_get_name (setting);
char *mac;
- int type;
g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY));
array = (GByteArray *) g_value_get_boxed (value);
- if (!array)
- return;
-
- type = nm_utils_hwaddr_type (array->len);
- if (type < 0) {
- g_warning ("%s: invalid %s / %s MAC address length %d",
- __func__, setting_name, key, array->len);
+ if (!array || !array->len)
return;
- }
- mac = nm_utils_hwaddr_ntoa (array->data, type);
- g_key_file_set_string (file, setting_name, key, mac);
+ mac = nm_utils_hwaddr_ntoa_len (array->data, array->len);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, key, mac);
g_free (mac);
}
@@ -453,7 +460,7 @@ write_hash_of_string (GKeyFile *file,
}
if (write_item)
- g_key_file_set_string (file, group_name, property, data);
+ nm_keyfile_plugin_kf_set_string (file, group_name, property, data);
}
}
@@ -505,13 +512,13 @@ ssid_writer (GKeyFile *file,
ssid[j++] = array->data[i];
}
}
- g_key_file_set_string (file, setting_name, key, ssid);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, key, ssid);
g_free (ssid);
} else {
tmp_array = g_new (gint, array->len);
for (i = 0; i < array->len; i++)
tmp_array[i] = (int) array->data[i];
- g_key_file_set_integer_list (file, setting_name, key, tmp_array, array->len);
+ nm_keyfile_plugin_kf_set_integer_list (file, setting_name, key, tmp_array, array->len);
g_free (tmp_array);
}
}
@@ -537,7 +544,7 @@ password_raw_writer (GKeyFile *file,
tmp_array = g_new (gint, array->len);
for (i = 0; i < array->len; i++)
tmp_array[i] = (int) array->data[i];
- g_key_file_set_integer_list (file, setting_name, key, tmp_array, array->len);
+ nm_keyfile_plugin_kf_set_integer_list (file, setting_name, key, tmp_array, array->len);
g_free (tmp_array);
}
@@ -686,7 +693,10 @@ cert_writer (GKeyFile *file,
break;
}
}
- g_return_if_fail (objtype != NULL);
+ if (!objtype) {
+ g_return_if_fail (objtype);
+ return;
+ }
scheme = objtype->scheme_func (NM_SETTING_802_1X (setting));
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
@@ -702,7 +712,7 @@ cert_writer (GKeyFile *file,
path++;
}
- g_key_file_set_string (file, setting_name, key, path);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, key, path);
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
const GByteArray *blob;
gboolean success;
@@ -732,9 +742,10 @@ cert_writer (GKeyFile *file,
success = write_cert_key_file (new_path, blob, &error);
if (success) {
/* Write the path value to the keyfile */
- g_key_file_set_string (file, setting_name, key, new_path);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, key, new_path);
} else {
- g_warning ("Failed to write certificate/key %s: %s", new_path, error->message);
+ nm_log_warn (LOGD_SETTINGS, "Failed to write certificate/key %s: %s",
+ new_path, error->message);
g_error_free (error);
}
g_free (new_path);
@@ -760,9 +771,18 @@ typedef struct {
* in struct in6_addr internally, but as string in keyfiles.
*/
static KeyWriter key_writers[] = {
+ { NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_TYPE,
+ setting_alias_writer },
+ { NM_SETTING_BRIDGE_SETTING_NAME,
+ NM_SETTING_BRIDGE_MAC_ADDRESS,
+ mac_address_writer },
{ NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES,
ip4_addr_writer },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ "address-labels",
+ ip4_addr_label_writer },
{ NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES,
ip6_addr_writer },
@@ -873,7 +893,7 @@ write_setting_value (NMSetting *setting,
* the secret flags there are in a third-level hash in the 'secrets'
* property.
*/
- if (pspec->flags & NM_SETTING_PARAM_SECRET && !NM_IS_SETTING_VPN (setting)) {
+ if (pspec && (pspec->flags & NM_SETTING_PARAM_SECRET) && !NM_IS_SETTING_VPN (setting)) {
NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
@@ -895,21 +915,21 @@ write_setting_value (NMSetting *setting,
str = g_value_get_string (value);
if (str)
- g_key_file_set_string (info->keyfile, setting_name, key, str);
+ nm_keyfile_plugin_kf_set_string (info->keyfile, setting_name, key, str);
} else if (type == G_TYPE_UINT)
- g_key_file_set_integer (info->keyfile, setting_name, key, (int) g_value_get_uint (value));
+ nm_keyfile_plugin_kf_set_integer (info->keyfile, setting_name, key, (int) g_value_get_uint (value));
else if (type == G_TYPE_INT)
- g_key_file_set_integer (info->keyfile, setting_name, key, g_value_get_int (value));
+ nm_keyfile_plugin_kf_set_integer (info->keyfile, setting_name, key, g_value_get_int (value));
else if (type == G_TYPE_UINT64) {
char *numstr;
numstr = g_strdup_printf ("%" G_GUINT64_FORMAT, g_value_get_uint64 (value));
- g_key_file_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
g_free (numstr);
} else if (type == G_TYPE_BOOLEAN) {
- g_key_file_set_boolean (info->keyfile, setting_name, key, g_value_get_boolean (value));
+ nm_keyfile_plugin_kf_set_boolean (info->keyfile, setting_name, key, g_value_get_boolean (value));
} else if (type == G_TYPE_CHAR) {
- g_key_file_set_integer (info->keyfile, setting_name, key, (int) g_value_get_schar (value));
+ nm_keyfile_plugin_kf_set_integer (info->keyfile, setting_name, key, (int) g_value_get_schar (value));
} else if (type == DBUS_TYPE_G_UCHAR_ARRAY) {
GByteArray *array;
@@ -922,7 +942,7 @@ write_setting_value (NMSetting *setting,
for (i = 0; i < array->len; i++)
tmp_array[i] = (int) array->data[i];
- g_key_file_set_integer_list (info->keyfile, setting_name, key, tmp_array, array->len);
+ nm_keyfile_plugin_kf_set_integer_list (info->keyfile, setting_name, key, tmp_array, array->len);
g_free (tmp_array);
}
} else if (type == DBUS_TYPE_G_LIST_OF_STRING) {
@@ -938,19 +958,19 @@ write_setting_value (NMSetting *setting,
for (iter = list; iter; iter = iter->next)
array[i++] = iter->data;
- g_key_file_set_string_list (info->keyfile, setting_name, key, (const gchar **const) array, i);
+ nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_name, key, (const gchar **const) array, i);
g_free (array);
}
} else if (type == DBUS_TYPE_G_MAP_OF_STRING) {
write_hash_of_string (info->keyfile, setting, key, value);
} else if (type == DBUS_TYPE_G_UINT_ARRAY) {
if (!write_array_of_uint (info->keyfile, setting, key, value)) {
- g_warning ("Unhandled setting property type (write) '%s/%s' : '%s'",
- setting_name, key, g_type_name (type));
+ nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (write) '%s/%s' : '%s'",
+ setting_name, key, g_type_name (type));
}
} else {
- g_warning ("Unhandled setting property type (write) '%s/%s' : '%s'",
- setting_name, key, g_type_name (type));
+ nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (write) '%s/%s' : '%s'",
+ setting_name, key, g_type_name (type));
}
}
@@ -995,6 +1015,11 @@ _internal_write_connection (NMConnection *connection,
if (out_path)
g_return_val_if_fail (*out_path == NULL, FALSE);
+ if (!nm_connection_verify (connection, error)) {
+ g_return_val_if_reached (FALSE);
+ return FALSE;
+ }
+
id = nm_connection_get_id (connection);
if (!id) {
g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
diff --git a/src/settings/tests/Makefile.am b/src/settings/tests/Makefile.am
index 9471bcb7b..4115d4bad 100644
--- a/src/settings/tests/Makefile.am
+++ b/src/settings/tests/Makefile.am
@@ -1,10 +1,9 @@
-if ENABLE_TESTS
-
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_srcdir)/src/settings \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
@@ -17,14 +16,8 @@ test_wired_defname_SOURCES = \
test-wired-defname.c
test_wired_defname_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/settings/libtest-settings-utils.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS)
+ $(top_builddir)/src/libNetworkManager.la
###########################################
-check-local: test-wired-defname
- $(abs_builddir)/test-wired-defname
-
-endif
+TESTS = test-wired-defname
diff --git a/src/settings/tests/Makefile.in b/src/settings/tests/Makefile.in
index 1a8b6e1cd..7016c27fd 100644
--- a/src/settings/tests/Makefile.in
+++ b/src/settings/tests/Makefile.in
@@ -78,12 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-wired-defname$(EXEEXT)
+noinst_PROGRAMS = test-wired-defname$(EXEEXT)
+TESTS = test-wired-defname$(EXEEXT)
subdir = src/settings/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,15 +104,10 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_wired_defname_SOURCES_DIST = test-wired-defname.c
-@ENABLE_TESTS_TRUE@am_test_wired_defname_OBJECTS = \
-@ENABLE_TESTS_TRUE@ test-wired-defname.$(OBJEXT)
+am_test_wired_defname_OBJECTS = test-wired-defname.$(OBJEXT)
test_wired_defname_OBJECTS = $(am_test_wired_defname_OBJECTS)
-am__DEPENDENCIES_1 =
-@ENABLE_TESTS_TRUE@test_wired_defname_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/settings/libtest-settings-utils.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+test_wired_defname_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -150,7 +147,7 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(test_wired_defname_SOURCES)
-DIST_SOURCES = $(am__test_wired_defname_SOURCES_DIST)
+DIST_SOURCES = $(test_wired_defname_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -175,6 +172,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -201,12 +220,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -231,7 +253,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -276,12 +297,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -298,6 +323,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -325,11 +352,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -344,6 +376,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -406,6 +439,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -416,24 +450,23 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
-@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/settings \
-@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS)
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_srcdir)/src/settings \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS)
####### wired defname test #######
-@ENABLE_TESTS_TRUE@test_wired_defname_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-wired-defname.c
+test_wired_defname_SOURCES = \
+ test-wired-defname.c
-@ENABLE_TESTS_TRUE@test_wired_defname_LDADD = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/settings/libtest-settings-utils.la \
-@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+test_wired_defname_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
all: all-am
@@ -570,6 +603,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -600,9 +726,8 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
@@ -709,7 +834,7 @@ uninstall-am:
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
@@ -724,11 +849,6 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-###########################################
-
-@ENABLE_TESTS_TRUE@check-local: test-wired-defname
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-wired-defname
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/settings/tests/test-wired-defname.c b/src/settings/tests/test-wired-defname.c
index f6627fa9c..2d88dd775 100644
--- a/src/settings/tests/test-wired-defname.c
+++ b/src/settings/tests/test-wired-defname.c
@@ -120,27 +120,19 @@ test_defname_multiple_conflicts (void)
/*******************************************/
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
-
-#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
-
-int main (int argc, char **argv)
+int
+main (int argc, char **argv)
{
- GTestSuite *suite;
-
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
- g_test_init (&argc, &argv, NULL);
+#endif
- suite = g_test_get_root ();
+ g_test_init (&argc, &argv, NULL);
- g_test_suite_add (suite, TESTCASE (test_defname_no_connections, NULL));
- g_test_suite_add (suite, TESTCASE (test_defname_no_conflict, NULL));
- g_test_suite_add (suite, TESTCASE (test_defname_conflict, NULL));
- g_test_suite_add (suite, TESTCASE (test_defname_multiple_conflicts, NULL));
+ g_test_add_func ("/defname/no_connections", test_defname_no_connections);
+ g_test_add_func ("/defname/no_conflict", test_defname_no_conflict);
+ g_test_add_func ("/defname/conflict", test_defname_conflict);
+ g_test_add_func ("/defname/multiple_conflicts", test_defname_multiple_conflicts);
return g_test_run ();
}
diff --git a/src/supplicant-manager/Makefile.am b/src/supplicant-manager/Makefile.am
deleted file mode 100644
index a4d2f250b..000000000
--- a/src/supplicant-manager/Makefile.am
+++ /dev/null
@@ -1,34 +0,0 @@
-SUBDIRS = . tests
-
-noinst_LTLIBRARIES = libsupplicant-manager.la
-
-libsupplicant_manager_la_CPPFLAGS = \
- -I${top_srcdir}/src \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNM_PKGDATADIR=\"$(pkgdatadir)\" \
- -DNM_LOCALSTATEDIR=\"$(localstatedir)\"
-
-libsupplicant_manager_la_SOURCES = \
- nm-supplicant-types.h \
- nm-supplicant-manager.h \
- nm-supplicant-manager.c \
- nm-supplicant-config.h \
- nm-supplicant-config.c \
- nm-supplicant-interface.c \
- nm-supplicant-interface.h \
- nm-supplicant-settings-verify.h \
- nm-supplicant-settings-verify.c
-
-libsupplicant_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
diff --git a/src/supplicant-manager/nm-call-store.c b/src/supplicant-manager/nm-call-store.c
new file mode 100644
index 000000000..4b427549d
--- /dev/null
+++ b/src/supplicant-manager/nm-call-store.c
@@ -0,0 +1,111 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2010 Red Hat, Inc.
+ */
+
+#include "nm-call-store.h"
+#include "nm-logging.h"
+
+NMCallStore *
+nm_call_store_new (void)
+{
+ /* Maps { DBusGProxy :: GHashTable { DBusGProxyCall :: NULL } } */
+ return g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) g_hash_table_destroy);
+}
+
+static void
+proxy_destroyed_cb (gpointer data, GObject *proxy)
+{
+ g_hash_table_remove ((NMCallStore *) data, proxy);
+}
+
+void
+nm_call_store_add (NMCallStore *store,
+ DBusGProxy *proxy,
+ DBusGProxyCall *call)
+{
+ GHashTable *calls;
+
+ g_return_if_fail (store != NULL);
+ g_return_if_fail (proxy != NULL);
+ g_return_if_fail (call != NULL);
+
+ calls = g_hash_table_lookup (store, proxy);
+ if (!calls) {
+ calls = g_hash_table_new (NULL, NULL);
+ g_hash_table_insert (store, proxy, calls);
+ g_object_weak_ref (G_OBJECT (proxy), proxy_destroyed_cb, store);
+ }
+
+ g_hash_table_add (calls, call);
+}
+
+void
+nm_call_store_remove (NMCallStore *store,
+ DBusGProxy *proxy,
+ DBusGProxyCall *call)
+{
+ GHashTable *calls;
+
+ g_return_if_fail (store != NULL);
+ g_return_if_fail (proxy != NULL);
+ g_return_if_fail (call != NULL);
+
+ calls = g_hash_table_lookup (store, proxy);
+ if (!calls)
+ return;
+
+ g_hash_table_remove (calls, call);
+ if (g_hash_table_size (calls) == 0) {
+ g_hash_table_remove (store, proxy);
+ g_object_weak_unref (G_OBJECT (proxy), proxy_destroyed_cb, store);
+ }
+}
+
+void
+nm_call_store_clear (NMCallStore *store)
+{
+ DBusGProxy *proxy;
+ GHashTable *calls;
+ GHashTableIter proxies_iter;
+
+ g_return_if_fail (store != NULL);
+
+ g_hash_table_iter_init (&proxies_iter, store);
+ while (g_hash_table_iter_next (&proxies_iter, (gpointer) &proxy, (gpointer) &calls)) {
+ GHashTableIter calls_iter;
+ DBusGProxyCall *call;
+
+ g_hash_table_iter_init (&calls_iter, calls);
+ while (g_hash_table_iter_next (&calls_iter, (gpointer) &call, NULL)) {
+ dbus_g_proxy_cancel_call (proxy, call);
+ g_hash_table_iter_remove (&calls_iter);
+ }
+ g_object_weak_unref (G_OBJECT (proxy), proxy_destroyed_cb, store);
+ g_hash_table_iter_remove (&proxies_iter);
+ }
+ g_assert_cmpint (g_hash_table_size (store), ==, 0);
+}
+
+void
+nm_call_store_destroy (NMCallStore *store)
+{
+ g_return_if_fail (store);
+ g_hash_table_destroy (store);
+}
diff --git a/src/nm-call-store.h b/src/supplicant-manager/nm-call-store.h
index 0ae5a769b..b24c97a46 100644
--- a/src/nm-call-store.h
+++ b/src/supplicant-manager/nm-call-store.h
@@ -22,24 +22,18 @@
#define NM_CALLBACK_STORE_H
#include <glib-object.h>
+#include <dbus/dbus-glib.h>
typedef GHashTable NMCallStore;
-typedef gboolean (*NMCallStoreFunc) (GObject *object, gpointer call_id, gpointer user_data);
-
NMCallStore *nm_call_store_new (void);
void nm_call_store_add (NMCallStore *store,
- GObject *object,
- gpointer *call_id);
+ DBusGProxy *proxy,
+ DBusGProxyCall *call);
void nm_call_store_remove (NMCallStore *store,
- GObject *object,
- gpointer call_id);
-
-int nm_call_store_foreach (NMCallStore *store,
- GObject *object,
- NMCallStoreFunc callback,
- gpointer user_data);
+ DBusGProxy *proxy,
+ DBusGProxyCall *call);
void nm_call_store_clear (NMCallStore *store);
void nm_call_store_destroy (NMCallStore *store);
diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c
index f5fc15425..438b436eb 100644
--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -34,8 +34,7 @@
#include "nm-logging.h"
#include "nm-setting.h"
#include "NetworkManagerUtils.h"
-
-static char *hexstr2bin (const char *hex, size_t len);
+#include "nm-utils.h"
#define NM_SUPPLICANT_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_SUPPLICANT_CONFIG, \
@@ -136,17 +135,7 @@ nm_supplicant_config_add_option_with_type (NMSupplicantConfig *self,
}
opt = g_slice_new0 (ConfigOption);
- if (opt == NULL) {
- nm_log_warn (LOGD_SUPPLICANT, "Couldn't allocate memory for new config option.");
- return FALSE;
- }
-
opt->value = g_malloc0 ((sizeof (char) * len) + 1);
- if (opt->value == NULL) {
- nm_log_warn (LOGD_SUPPLICANT, "Couldn't allocate memory for new config option value.");
- g_slice_free (ConfigOption, opt);
- return FALSE;
- }
memcpy (opt->value, value, len);
opt->len = len;
@@ -207,27 +196,10 @@ nm_supplicant_config_add_blob (NMSupplicantConfig *self,
}
blob = g_byte_array_sized_new (value->len);
- if (!blob) {
- nm_log_warn (LOGD_SUPPLICANT, "Couldn't allocate memory for new config blob.");
- return FALSE;
- }
g_byte_array_append (blob, value->data, value->len);
opt = g_slice_new0 (ConfigOption);
- if (opt == NULL) {
- nm_log_warn (LOGD_SUPPLICANT, "Couldn't allocate memory for new config option.");
- g_byte_array_free (blob, TRUE);
- return FALSE;
- }
-
opt->value = g_strdup_printf ("blob://%s", blobid);
- if (opt->value == NULL) {
- nm_log_warn (LOGD_SUPPLICANT, "Couldn't allocate memory for new config option value.");
- g_byte_array_free (blob, TRUE);
- g_slice_free (ConfigOption, opt);
- return FALSE;
- }
-
opt->len = strlen (opt->value);
opt->type = type;
@@ -274,7 +246,7 @@ nm_supplicant_config_set_ap_scan (NMSupplicantConfig * self,
guint32 ap_scan)
{
g_return_if_fail (NM_IS_SUPPLICANT_CONFIG (self));
- g_return_if_fail (ap_scan >= 0 && ap_scan <= 2);
+ g_return_if_fail (ap_scan <= 2);
NM_SUPPLICANT_CONFIG_GET_PRIVATE (self)->ap_scan = ap_scan;
}
@@ -359,16 +331,21 @@ nm_supplicant_config_get_blobs (NMSupplicantConfig * self)
#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
#define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5]
+#define TWO_GHZ_FREQS "2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484"
+#define FIVE_GHZ_FREQS "4915,4920,4925,4935,4940,4945,4960,4980,5035,5040,5045,5055,5060,5080," \
+ "5170,5180,5190,5200,5210,5220,5230,5240,5260,5280,5300,5320,5500," \
+ "5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5745,5765,5785," \
+ "5805,5825"
+
+
gboolean
nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self,
NMSettingWireless * setting,
- gboolean is_broadcast,
- guint32 fixed_freq,
- gboolean has_scan_capa_ssid)
+ guint32 fixed_freq)
{
NMSupplicantConfigPrivate *priv;
gboolean is_adhoc, is_ap;
- const char *mode;
+ const char *mode, *band;
const GByteArray *id;
g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), FALSE);
@@ -381,12 +358,8 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self,
is_ap = (mode && !strcmp (mode, "ap")) ? TRUE : FALSE;
if (is_adhoc || is_ap)
priv->ap_scan = 2;
- else if (is_broadcast == FALSE) {
- /* drivers that support scanning specific SSIDs should use
- * ap_scan=1, while those that do not should use ap_scan=2.
- */
- priv->ap_scan = has_scan_capa_ssid ? 1 : 2;
- }
+ else
+ priv->ap_scan = 1;
id = nm_setting_wireless_get_ssid (setting);
if (!nm_supplicant_config_add_option (self, "ssid", (char *) id->data, id->len, FALSE)) {
@@ -443,7 +416,22 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self,
g_free (str_bssid);
}
- // FIXME: band & channel config items
+ band = nm_setting_wireless_get_band (setting);
+ if (band) {
+ const char *freqs = NULL;
+
+ if (!strcmp (band, "a"))
+ freqs = FIVE_GHZ_FREQS;
+ else if (!strcmp (band, "bg"))
+ freqs = TWO_GHZ_FREQS;
+
+ if (freqs && !nm_supplicant_config_add_option (self, "freq_list", freqs, strlen (freqs), FALSE)) {
+ nm_log_warn (LOGD_SUPPLICANT, "Error adding frequency list/band to supplicant config.");
+ return FALSE;
+ }
+ }
+
+ // FIXME: channel config item
return TRUE;
}
@@ -565,7 +553,7 @@ add_wep_key (NMSupplicantConfig *self,
if ( (wep_type == NM_WEP_KEY_TYPE_UNKNOWN)
|| (wep_type == NM_WEP_KEY_TYPE_KEY)) {
if ((key_len == 10) || (key_len == 26)) {
- value = hexstr2bin (key, strlen (key));
+ value = nm_utils_hexstr2bin (key, strlen (key));
success = nm_supplicant_config_add_option (self, name, value, key_len / 2, TRUE);
g_free (value);
if (!success) {
@@ -626,7 +614,7 @@ nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self,
if (psk_len == 64) {
/* Hex PSK */
- value = hexstr2bin (psk, psk_len);
+ value = nm_utils_hexstr2bin (psk, psk_len);
success = nm_supplicant_config_add_option (self, "psk", value, psk_len / 2, TRUE);
g_free (value);
if (!success) {
@@ -1073,56 +1061,3 @@ nm_supplicant_config_add_no_security (NMSupplicantConfig *self)
return nm_supplicant_config_add_option (self, "key_mgmt", "NONE", -1, FALSE);
}
-/* From hostap, Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi> */
-
-static int hex2num (char c)
-{
- if (c >= '0' && c <= '9')
- return c - '0';
- if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- return -1;
-}
-
-static int hex2byte (const char *hex)
-{
- int a, b;
- a = hex2num(*hex++);
- if (a < 0)
- return -1;
- b = hex2num(*hex++);
- if (b < 0)
- return -1;
- return (a << 4) | b;
-}
-
-static char *
-hexstr2bin (const char *hex, size_t len)
-{
- size_t i;
- int a;
- const char * ipos = hex;
- char * buf = NULL;
- char * opos;
-
- /* Length must be a multiple of 2 */
- if ((len % 2) != 0)
- return NULL;
-
- opos = buf = g_malloc0 ((len / 2) + 1);
- for (i = 0; i < len; i += 2) {
- a = hex2byte (ipos);
- if (a < 0) {
- g_free (buf);
- return NULL;
- }
- *opos++ = a;
- ipos += 2;
- }
- return buf;
-}
-
-/* End from hostap */
-
diff --git a/src/supplicant-manager/nm-supplicant-config.h b/src/supplicant-manager/nm-supplicant-config.h
index a8d304709..75d6b779f 100644
--- a/src/supplicant-manager/nm-supplicant-config.h
+++ b/src/supplicant-manager/nm-supplicant-config.h
@@ -65,9 +65,7 @@ GHashTable *nm_supplicant_config_get_blobs (NMSupplicantConfig *self);
gboolean nm_supplicant_config_add_setting_wireless (NMSupplicantConfig *self,
NMSettingWireless *setting,
- gboolean is_broadcast,
- guint32 adhoc_freq,
- gboolean has_scan_capa_ssid);
+ guint32 fixed_freq);
gboolean nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self,
NMSettingWirelessSecurity *setting,
diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c
index 75450a0a1..15138dc81 100644
--- a/src/supplicant-manager/nm-supplicant-interface.c
+++ b/src/supplicant-manager/nm-supplicant-interface.c
@@ -24,10 +24,10 @@
#include <string.h>
#include <glib.h>
+#include "NetworkManagerUtils.h"
#include "nm-supplicant-interface.h"
#include "nm-supplicant-manager.h"
#include "nm-logging.h"
-#include "nm-marshal.h"
#include "nm-supplicant-config.h"
#include "nm-dbus-manager.h"
#include "nm-call-store.h"
@@ -100,120 +100,20 @@ typedef struct {
gboolean scanning;
DBusGProxy * wpas_proxy;
+ DBusGProxy * introspect_proxy;
DBusGProxy * iface_proxy;
DBusGProxy * props_proxy;
char * net_path;
guint32 blobs_left;
GHashTable * bss_proxies;
- time_t last_scan;
+ gint32 last_scan; /* timestamp as returned by nm_utils_get_monotonic_timestamp_s() */
NMSupplicantConfig * cfg;
gboolean disposed;
} NMSupplicantInterfacePrivate;
-/* FIXME: remove this and just store the standard D-Bus properties
- * proxy object in bss_proxies when we drop support for wpa_supplicant
- * 0.7.x.
- */
-typedef struct {
- /* Proxy for standard D-Bus Properties interface */
- DBusGProxy *props;
- /* Proxy for old wpa_supplicant-specific PropertiesChanged signal */
- DBusGProxy *old_props;
-} BssProxies;
-
-static void
-bss_proxies_free (gpointer data)
-{
- BssProxies *proxies = data;
-
- g_object_unref (proxies->props);
- g_object_unref (proxies->old_props);
- memset (proxies, 0, sizeof (*proxies));
- g_free (proxies);
-}
-
-static gboolean
-cancel_all_cb (GObject *object, gpointer call_id, gpointer user_data)
-{
- dbus_g_proxy_cancel_call (DBUS_G_PROXY (object), (DBusGProxyCall *) call_id);
-
- return TRUE;
-}
-
-static void
-cancel_all_callbacks (NMCallStore *store)
-{
- nm_call_store_foreach (store, NULL, cancel_all_cb, NULL);
- nm_call_store_clear (store);
-}
-
-typedef struct {
- NMSupplicantInterface *interface;
- DBusGProxy *proxy;
- NMCallStore *store;
- DBusGProxyCall *call;
- gboolean disposing;
-} NMSupplicantInfo;
-
-static NMSupplicantInfo *
-nm_supplicant_info_new (NMSupplicantInterface *interface,
- DBusGProxy *proxy,
- NMCallStore *store)
-{
- NMSupplicantInfo *info;
-
- info = g_slice_new0 (NMSupplicantInfo);
- info->interface = g_object_ref (interface);
- info->proxy = g_object_ref (proxy);
- info->store = store;
-
- return info;
-}
-
-static void
-nm_supplicant_info_set_call (NMSupplicantInfo *info, DBusGProxyCall *call)
-{
- g_return_if_fail (info != NULL);
- g_return_if_fail (call != NULL);
-
- nm_call_store_add (info->store, G_OBJECT (info->proxy), (gpointer) call);
- info->call = call;
-}
-
-static void
-nm_supplicant_info_destroy (gpointer user_data)
-{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
-
- /* Guard against double-disposal; since DBusGProxy doesn't guard against
- * double-disposal, we could infinite loop here if we're in the middle of
- * some wpa_supplicant D-Bus calls. When the supplicant dies we'll dispose
- * of the proxy, which kills all its pending calls, which brings us here.
- * Then when we unref the proxy here, its dispose() function will get called
- * again, and we get right back here until we segfault because our callstack
- * is too long.
- */
- if (!info->disposing) {
- info->disposing = TRUE;
-
- if (info->call) {
- nm_call_store_remove (info->store, G_OBJECT (info->proxy), info->call);
- info->call = NULL;
- }
-
- g_object_unref (info->proxy);
- info->proxy = NULL;
- g_object_unref (info->interface);
- info->interface = NULL;
-
- memset (info, 0, sizeof (NMSupplicantInfo));
- g_slice_free (NMSupplicantInfo, info);
- }
-}
-
static void
emit_error_helper (NMSupplicantInterface *self,
GError *err)
@@ -237,14 +137,16 @@ signal_new_bss (NMSupplicantInterface *self,
static void
bssid_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *error = NULL;
GHashTable *props = NULL;
+ nm_call_store_remove (priv->other_pcalls, proxy, call_id);
if (dbus_g_proxy_end_call (proxy, call_id, &error,
DBUS_TYPE_G_MAP_OF_VARIANT, &props,
G_TYPE_INVALID)) {
- signal_new_bss (info->interface, dbus_g_proxy_get_path (proxy), props);
+ signal_new_bss (self, dbus_g_proxy_get_path (proxy), props);
g_hash_table_destroy (props);
} else {
if (!strstr (error->message, "The BSSID requested was invalid")) {
@@ -266,91 +168,56 @@ bss_properties_changed (DBusGProxy *proxy,
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
if (priv->scanning)
- priv->last_scan = time (NULL);
+ priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
if (g_strcmp0 (interface, WPAS_DBUS_IFACE_BSS) == 0)
g_signal_emit (self, signals[BSS_UPDATED], 0, dbus_g_proxy_get_path (proxy), props);
}
static void
-old_bss_properties_changed (DBusGProxy *proxy,
- GHashTable *props,
- gpointer user_data)
-{
- NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
-
- if (priv->scanning)
- priv->last_scan = time (NULL);
-
- g_signal_emit (self, signals[BSS_UPDATED], 0, dbus_g_proxy_get_path (proxy), props);
-}
-
-static void
handle_new_bss (NMSupplicantInterface *self,
const char *object_path,
GHashTable *props)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
+ DBusGProxy *bss_proxy;
DBusGProxyCall *call;
- BssProxies *proxies;
g_return_if_fail (object_path != NULL);
if (g_hash_table_lookup (priv->bss_proxies, object_path))
return;
- proxies = g_malloc0 (sizeof (*proxies));
- proxies->props = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
- WPAS_DBUS_SERVICE,
- object_path,
- DBUS_INTERFACE_PROPERTIES);
- proxies->old_props = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
- WPAS_DBUS_SERVICE,
- object_path,
- WPAS_DBUS_IFACE_BSS);
+ bss_proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
+ WPAS_DBUS_SERVICE,
+ object_path,
+ DBUS_INTERFACE_PROPERTIES);
g_hash_table_insert (priv->bss_proxies,
- (gpointer) dbus_g_proxy_get_path (proxies->props),
- proxies);
+ (gpointer) dbus_g_proxy_get_path (bss_proxy),
+ bss_proxy);
/* Standard D-Bus PropertiesChanged signal */
- dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_BOXED_BOXED,
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_STRV,
G_TYPE_INVALID);
- dbus_g_proxy_add_signal (proxies->props, "PropertiesChanged",
+ dbus_g_proxy_add_signal (bss_proxy, "PropertiesChanged",
G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_STRV,
G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (proxies->props, "PropertiesChanged",
+ dbus_g_proxy_connect_signal (bss_proxy, "PropertiesChanged",
G_CALLBACK (bss_properties_changed),
self, NULL);
- /* Old wpa_supplicant-specific PropertiesChanged signal; since it's using
- * a different interface, we have to use a different DBusGProxy
- */
- dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
- dbus_g_proxy_add_signal (proxies->old_props, "PropertiesChanged",
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (proxies->old_props, "PropertiesChanged",
- G_CALLBACK (old_bss_properties_changed),
- self, NULL);
-
if (props) {
signal_new_bss (self, object_path, props);
} else {
- info = nm_supplicant_info_new (self, proxies->props, priv->other_pcalls);
- call = dbus_g_proxy_begin_call (proxies->props, "GetAll",
+ call = dbus_g_proxy_begin_call (bss_proxy, "GetAll",
bssid_properties_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
G_TYPE_STRING, WPAS_DBUS_IFACE_BSS,
G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->other_pcalls, bss_proxy, call);
}
}
@@ -364,7 +231,7 @@ wpas_iface_bss_added (DBusGProxy *proxy,
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
if (priv->scanning)
- priv->last_scan = time (NULL);
+ priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
handle_new_bss (self, object_path, props);
}
@@ -435,8 +302,8 @@ set_state (NMSupplicantInterface *self, guint32 new_state)
wpas_iface_get_props (self);
} else if (new_state == NM_SUPPLICANT_INTERFACE_STATE_DOWN) {
/* Cancel all pending calls when going down */
- cancel_all_callbacks (priv->other_pcalls);
- cancel_all_callbacks (priv->assoc_pcalls);
+ nm_call_store_clear (priv->other_pcalls);
+ nm_call_store_clear (priv->assoc_pcalls);
/* Disconnect supplicant manager state listeners since we're done */
if (priv->smgr_avail_id) {
@@ -468,7 +335,7 @@ set_state (NMSupplicantInterface *self, guint32 new_state)
if ( priv->state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING
|| old_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING)
- priv->last_scan = time (NULL);
+ priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
/* Disconnect reason is no longer relevant when not in the DISCONNECTED state */
if (priv->state != NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED)
@@ -501,7 +368,7 @@ set_scanning (NMSupplicantInterface *self, gboolean new_scanning)
/* Cache time of last scan completion */
if (priv->scanning == FALSE)
- priv->last_scan = time (NULL);
+ priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
g_object_notify (G_OBJECT (self), "scanning");
}
@@ -522,7 +389,7 @@ nm_supplicant_interface_get_scanning (NMSupplicantInterface *self)
return FALSE;
}
-time_t
+gint32
nm_supplicant_interface_get_last_scan_time (NMSupplicantInterface *self)
{
return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->last_scan;
@@ -537,7 +404,7 @@ wpas_iface_scan_done (DBusGProxy *proxy,
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
/* Cache last scan completed time */
- priv->last_scan = time (NULL);
+ priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
g_signal_emit (self, signals[SCAN_DONE], 0, success);
}
@@ -648,38 +515,38 @@ iface_check_ready (NMSupplicantInterface *self)
static void
iface_get_props_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GHashTable *props = NULL;
GError *error = NULL;
+ nm_call_store_remove (priv->other_pcalls, proxy, call_id);
if (dbus_g_proxy_end_call (proxy, call_id, &error,
DBUS_TYPE_G_MAP_OF_VARIANT, &props,
G_TYPE_INVALID)) {
- wpas_iface_properties_changed (NULL, props, info->interface);
+ wpas_iface_properties_changed (NULL, props, self);
g_hash_table_destroy (props);
} else {
nm_log_warn (LOGD_SUPPLICANT, "could not get interface properties: %s.",
error && error->message ? error->message : "(unknown)");
g_clear_error (&error);
}
- iface_check_ready (info->interface);
+ iface_check_ready (self);
}
static void
wpas_iface_get_props (NMSupplicantInterface *self)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
DBusGProxyCall *call;
- info = nm_supplicant_info_new (self, priv->props_proxy, priv->other_pcalls);
call = dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
iface_get_props_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
G_TYPE_STRING, WPAS_DBUS_IFACE_INTERFACE,
G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->other_pcalls, priv->props_proxy, call);
}
gboolean
@@ -690,7 +557,6 @@ nm_supplicant_interface_credentials_reply (NMSupplicantInterface *self,
{
NMSupplicantInterfacePrivate *priv;
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), FALSE);
g_return_val_if_fail (field != NULL, FALSE);
g_return_val_if_fail (value != NULL, FALSE);
@@ -729,10 +595,11 @@ wpas_iface_network_request (DBusGProxy *proxy,
static void
iface_check_netreply_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *error = NULL;
+ nm_call_store_remove (priv->other_pcalls, proxy, call_id);
if ( dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)
|| dbus_g_error_has_name (error, "fi.w1.wpa_supplicant1.InvalidArgs")) {
/* We know NetworkReply is supported if the NetworkReply method returned
@@ -748,27 +615,25 @@ iface_check_netreply_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer us
}
g_clear_error (&error);
- iface_check_ready (info->interface);
+ iface_check_ready (self);
}
static void
wpas_iface_check_network_reply (NMSupplicantInterface *self)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
DBusGProxyCall *call;
priv->ready_count++;
- info = nm_supplicant_info_new (self, priv->props_proxy, priv->other_pcalls);
call = dbus_g_proxy_begin_call (priv->iface_proxy, "NetworkReply",
iface_check_netreply_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
DBUS_TYPE_G_OBJECT_PATH, "/foobaraasdfasdf",
G_TYPE_STRING, "foobar",
G_TYPE_STRING, "foobar",
G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->other_pcalls, priv->iface_proxy, call);
}
ApSupport
@@ -793,11 +658,12 @@ nm_supplicant_interface_set_ap_support (NMSupplicantInterface *self,
static void
iface_check_ap_mode_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
char *data;
/* The ProbeRequest method only exists if AP mode has been enabled */
+ nm_call_store_remove (priv->other_pcalls, proxy, call_id);
if (dbus_g_proxy_end_call (proxy, call_id, NULL,
G_TYPE_STRING,
&data,
@@ -807,38 +673,28 @@ iface_check_ap_mode_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer use
g_free (data);
}
- iface_check_ready (info->interface);
+ iface_check_ready (self);
}
static void
wpas_iface_check_ap_mode (NMSupplicantInterface *self)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
DBusGProxyCall *call;
- DBusGProxy *proxy;
priv->ready_count++;
- proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
- WPAS_DBUS_SERVICE,
- priv->object_path,
- DBUS_INTERFACE_INTROSPECTABLE);
-
- info = nm_supplicant_info_new (self, proxy, priv->other_pcalls);
- g_object_unref (proxy);
-
/* If the global supplicant capabilities property is not present, we can
* fall back to checking whether the ProbeRequest method is supported. If
* neither of these works we have no way of determining if AP mode is
* supported or not. hostap 1.0 and earlier don't support either of these.
*/
- call = dbus_g_proxy_begin_call (proxy, "Introspect",
+ call = dbus_g_proxy_begin_call (priv->introspect_proxy, "Introspect",
iface_check_ap_mode_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->other_pcalls, priv->introspect_proxy, call);
}
static void
@@ -872,7 +728,7 @@ interface_add_done (NMSupplicantInterface *self, char *path)
self,
NULL);
- dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_BOXED,
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
DBUS_TYPE_G_OBJECT_PATH, DBUS_TYPE_G_MAP_OF_VARIANT,
G_TYPE_INVALID);
@@ -896,7 +752,7 @@ interface_add_done (NMSupplicantInterface *self, char *path)
self,
NULL);
- dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_STRING_STRING,
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
DBUS_TYPE_G_OBJECT_PATH, G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_INVALID);
@@ -908,6 +764,11 @@ interface_add_done (NMSupplicantInterface *self, char *path)
self,
NULL);
+ priv->introspect_proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
+ WPAS_DBUS_SERVICE,
+ priv->object_path,
+ DBUS_INTERFACE_INTROSPECTABLE);
+
priv->props_proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
WPAS_DBUS_SERVICE,
path,
@@ -923,24 +784,23 @@ interface_add_done (NMSupplicantInterface *self, char *path)
}
static void
-interface_get_cb (DBusGProxy *proxy,
- DBusGProxyCall *call_id,
- gpointer user_data)
+interface_get_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *error = NULL;
char *path = NULL;
+ nm_call_store_remove (priv->other_pcalls, proxy, call_id);
if (dbus_g_proxy_end_call (proxy, call_id, &error,
DBUS_TYPE_G_OBJECT_PATH, &path,
G_TYPE_INVALID)) {
- interface_add_done (info->interface, path);
+ interface_add_done (self, path);
} else {
nm_log_err (LOGD_SUPPLICANT, "(%s): error getting interface: %s",
priv->dev, error->message);
g_clear_error (&error);
- set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
+ set_state (self, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
}
}
@@ -948,54 +808,53 @@ static void
interface_get (NMSupplicantInterface *self)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
DBusGProxyCall *call;
- info = nm_supplicant_info_new (self, priv->wpas_proxy, priv->other_pcalls);
call = dbus_g_proxy_begin_call (priv->wpas_proxy, "GetInterface",
interface_get_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
G_TYPE_STRING, priv->dev,
G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->other_pcalls, priv->wpas_proxy, call);
}
static void
-interface_add_cb (DBusGProxy *proxy,
- DBusGProxyCall *call_id,
- gpointer user_data)
+interface_add_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *error = NULL;
char *path = NULL;
+ nm_call_store_remove (priv->other_pcalls, proxy, call_id);
if (dbus_g_proxy_end_call (proxy, call_id, &error,
DBUS_TYPE_G_OBJECT_PATH, &path,
G_TYPE_INVALID)) {
- interface_add_done (info->interface, path);
+ interface_add_done (self, path);
} else {
if (dbus_g_error_has_name (error, WPAS_ERROR_EXISTS_ERROR)) {
/* Interface already added, just get its object path */
- interface_get (info->interface);
+ interface_get (self);
} else if ( g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN)
|| g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SPAWN_EXEC_FAILED)
|| g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SPAWN_FORK_FAILED)
|| g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SPAWN_FAILED)
|| g_error_matches (error, DBUS_GERROR, DBUS_GERROR_TIMEOUT)
+ || g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NO_REPLY)
+ || g_error_matches (error, DBUS_GERROR, DBUS_GERROR_TIMED_OUT)
|| dbus_g_error_has_name (error, DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND)) {
- /* Supplicant wasn't running and could be launched via service
+ /* Supplicant wasn't running and could not be launched via service
* activation. Wait for it to start by moving back to the INIT
* state.
*/
nm_log_dbg (LOGD_SUPPLICANT, "(%s): failed to activate supplicant: %s",
priv->dev, error->message);
- set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_INIT);
+ set_state (self, NM_SUPPLICANT_INTERFACE_STATE_INIT);
} else {
nm_log_err (LOGD_SUPPLICANT, "(%s): error adding interface: %s",
priv->dev, error->message);
- set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
+ set_state (self, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
}
g_clear_error (&error);
}
@@ -1012,9 +871,9 @@ interface_add (NMSupplicantInterface *self, gboolean is_wireless)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
DBusGProxyCall *call;
- NMSupplicantInfo *info;
GHashTable *hash;
- GValue *driver, *ifname;
+ GValue driver = G_VALUE_INIT;
+ GValue ifname = G_VALUE_INIT;
/* Can only start the interface from INIT state */
g_return_if_fail (priv->state == NM_SUPPLICANT_INTERFACE_STATE_INIT);
@@ -1029,34 +888,27 @@ interface_add (NMSupplicantInterface *self, gboolean is_wireless)
* when the supplicant has started.
*/
- info = nm_supplicant_info_new (self, priv->wpas_proxy, priv->other_pcalls);
-
hash = g_hash_table_new (g_str_hash, g_str_equal);
- driver = g_new0 (GValue, 1);
- g_value_init (driver, G_TYPE_STRING);
- g_value_set_string (driver, is_wireless ? DEFAULT_WIFI_DRIVER : "wired");
- g_hash_table_insert (hash, "Driver", driver);
+ g_value_init (&driver, G_TYPE_STRING);
+ g_value_set_string (&driver, is_wireless ? DEFAULT_WIFI_DRIVER : "wired");
+ g_hash_table_insert (hash, "Driver", &driver);
- ifname = g_new0 (GValue, 1);
- g_value_init (ifname, G_TYPE_STRING);
- g_value_set_string (ifname, priv->dev);
- g_hash_table_insert (hash, "Ifname", ifname);
+ g_value_init (&ifname, G_TYPE_STRING);
+ g_value_set_string (&ifname, priv->dev);
+ g_hash_table_insert (hash, "Ifname", &ifname);
call = dbus_g_proxy_begin_call (priv->wpas_proxy, "CreateInterface",
interface_add_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
DBUS_TYPE_G_MAP_OF_VARIANT, hash,
G_TYPE_INVALID);
+ nm_call_store_add (priv->other_pcalls, priv->wpas_proxy, call);
g_hash_table_destroy (hash);
- g_value_unset (driver);
- g_free (driver);
- g_value_unset (ifname);
- g_free (ifname);
-
- nm_supplicant_info_set_call (info, call);
+ g_value_unset (&driver);
+ g_value_unset (&ifname);
}
static void
@@ -1115,7 +967,7 @@ nm_supplicant_interface_disconnect (NMSupplicantInterface * self)
/* Clear and cancel all pending calls related to a prior
* connection attempt.
*/
- cancel_all_callbacks (priv->assoc_pcalls);
+ nm_call_store_clear (priv->assoc_pcalls);
/* Don't do anything if there is no connection to the supplicant yet. */
if (!priv->iface_proxy)
@@ -1145,12 +997,14 @@ nm_supplicant_interface_disconnect (NMSupplicantInterface * self)
static void
select_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *err = NULL;
+ nm_call_store_remove (priv->assoc_pcalls, proxy, call_id);
if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't select network config: %s.", err->message);
- emit_error_helper (info->interface, err);
+ emit_error_helper (self, err);
g_error_free (err);
}
}
@@ -1160,61 +1014,59 @@ call_select_network (NMSupplicantInterface *self)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
DBusGProxyCall *call;
- NMSupplicantInfo *info;
/* We only select the network after all blobs (if any) have been set */
- if (priv->blobs_left > 0)
- return;
-
- info = nm_supplicant_info_new (self, priv->iface_proxy, priv->assoc_pcalls);
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "SelectNetwork",
- select_network_cb,
- info,
- nm_supplicant_info_destroy,
- DBUS_TYPE_G_OBJECT_PATH, priv->net_path,
- G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
+ if (priv->blobs_left == 0) {
+ call = dbus_g_proxy_begin_call (priv->iface_proxy, "SelectNetwork",
+ select_network_cb,
+ self,
+ NULL,
+ DBUS_TYPE_G_OBJECT_PATH, priv->net_path,
+ G_TYPE_INVALID);
+ nm_call_store_add (priv->assoc_pcalls, priv->iface_proxy, call);
+ }
}
static void
add_blob_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *err = NULL;
guint tmp;
priv->blobs_left--;
+ nm_call_store_remove (priv->assoc_pcalls, proxy, call_id);
if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_UINT, &tmp, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't set network certificates: %s.", err->message);
- emit_error_helper (info->interface, err);
+ emit_error_helper (self, err);
g_error_free (err);
} else
- call_select_network (info->interface);
+ call_select_network (self);
}
static void
add_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *err = NULL;
GHashTable *blobs;
GHashTableIter iter;
gpointer name, data;
DBusGProxyCall *call;
- NMSupplicantInfo *blob_info;
g_free (priv->net_path);
priv->net_path = NULL;
+ nm_call_store_remove (priv->assoc_pcalls, proxy, call_id);
if (!dbus_g_proxy_end_call (proxy, call_id, &err,
DBUS_TYPE_G_OBJECT_PATH, &priv->net_path,
G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't add a network to the supplicant interface: %s.",
err->message);
- emit_error_helper (info->interface, err);
+ emit_error_helper (self, err);
g_error_free (err);
return;
}
@@ -1224,33 +1076,33 @@ add_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
priv->blobs_left = g_hash_table_size (blobs);
g_hash_table_iter_init (&iter, blobs);
while (g_hash_table_iter_next (&iter, &name, &data)) {
- blob_info = nm_supplicant_info_new (info->interface, priv->iface_proxy, priv->assoc_pcalls);
call = dbus_g_proxy_begin_call (priv->iface_proxy, "AddBlob",
add_blob_cb,
- blob_info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
DBUS_TYPE_STRING, name,
- DBUS_TYPE_G_UCHAR_ARRAY, blobs,
+ DBUS_TYPE_G_UCHAR_ARRAY, data,
G_TYPE_INVALID);
- nm_supplicant_info_set_call (blob_info, call);
+ nm_call_store_add (priv->assoc_pcalls, priv->iface_proxy, call);
}
- call_select_network (info->interface);
+ call_select_network (self);
}
static void
set_ap_scan_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *err = NULL;
DBusGProxyCall *call;
GHashTable *config_hash;
+ nm_call_store_remove (priv->assoc_pcalls, proxy, call_id);
if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't send AP scan mode to the supplicant interface: %s.",
err->message);
- emit_error_helper (info->interface, err);
+ emit_error_helper (self, err);
g_error_free (err);
return;
}
@@ -1258,26 +1110,24 @@ set_ap_scan_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
nm_log_info (LOGD_SUPPLICANT, "Config: set interface ap_scan to %d",
nm_supplicant_config_get_ap_scan (priv->cfg));
- info = nm_supplicant_info_new (info->interface, priv->iface_proxy, info->store);
config_hash = nm_supplicant_config_get_hash (priv->cfg);
call = dbus_g_proxy_begin_call (priv->iface_proxy, "AddNetwork",
add_network_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
DBUS_TYPE_G_MAP_OF_VARIANT, config_hash,
G_TYPE_INVALID);
g_hash_table_destroy (config_hash);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->assoc_pcalls, priv->iface_proxy, call);
}
gboolean
-nm_supplicant_interface_set_config (NMSupplicantInterface * self,
- NMSupplicantConfig * cfg)
+nm_supplicant_interface_set_config (NMSupplicantInterface *self,
+ NMSupplicantConfig *cfg)
{
NMSupplicantInterfacePrivate *priv;
- NMSupplicantInfo *info;
DBusGProxyCall *call;
- GValue value = { 0, };
+ GValue value = G_VALUE_INIT;
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), FALSE);
@@ -1305,16 +1155,15 @@ nm_supplicant_interface_set_config (NMSupplicantInterface * self,
g_value_init (&value, G_TYPE_UINT);
g_value_set_uint (&value, nm_supplicant_config_get_ap_scan (priv->cfg));
- info = nm_supplicant_info_new (self, priv->props_proxy, priv->other_pcalls);
call = dbus_g_proxy_begin_call (priv->props_proxy, "Set",
set_ap_scan_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
G_TYPE_STRING, WPAS_DBUS_IFACE_INTERFACE,
G_TYPE_STRING, "ApScan",
G_TYPE_VALUE, &value,
G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->assoc_pcalls, priv->props_proxy, call);
g_value_unset (&value);
return call != NULL;
@@ -1323,13 +1172,15 @@ nm_supplicant_interface_set_config (NMSupplicantInterface * self,
static void
scan_request_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
GError *err = NULL;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID)) {
+ nm_call_store_remove (priv->other_pcalls, proxy, call_id);
+ if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID))
nm_log_warn (LOGD_SUPPLICANT, "Could not get scan request result: %s", err->message);
- }
- g_signal_emit (info->interface, signals[SCAN_DONE], 0, err ? FALSE : TRUE);
+
+ g_signal_emit (self, signals[SCAN_DONE], 0, err ? FALSE : TRUE);
g_clear_error (&err);
}
@@ -1366,7 +1217,6 @@ gboolean
nm_supplicant_interface_request_scan (NMSupplicantInterface *self, const GPtrArray *ssids)
{
NMSupplicantInterfacePrivate *priv;
- NMSupplicantInfo *info;
DBusGProxyCall *call;
GHashTable *hash;
@@ -1380,15 +1230,14 @@ nm_supplicant_interface_request_scan (NMSupplicantInterface *self, const GPtrArr
if (ssids)
g_hash_table_insert (hash, "SSIDs", byte_array_array_to_gvalue (ssids));
- info = nm_supplicant_info_new (self, priv->iface_proxy, priv->other_pcalls);
call = dbus_g_proxy_begin_call (priv->iface_proxy, "Scan",
scan_request_cb,
- info,
- nm_supplicant_info_destroy,
+ self,
+ NULL,
DBUS_TYPE_G_MAP_OF_VARIANT, hash,
G_TYPE_INVALID);
g_hash_table_destroy (hash);
- nm_supplicant_info_set_call (info, call);
+ nm_call_store_add (priv->other_pcalls, priv->iface_proxy, call);
return call != NULL;
}
@@ -1442,7 +1291,6 @@ nm_supplicant_interface_state_to_string (guint32 state)
const char *
nm_supplicant_interface_get_device (NMSupplicantInterface * self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), NULL);
return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev;
@@ -1451,7 +1299,6 @@ nm_supplicant_interface_get_device (NMSupplicantInterface * self)
const char *
nm_supplicant_interface_get_object_path (NMSupplicantInterface *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), NULL);
return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->object_path;
@@ -1460,7 +1307,6 @@ nm_supplicant_interface_get_object_path (NMSupplicantInterface *self)
const char *
nm_supplicant_interface_get_ifname (NMSupplicantInterface *self)
{
- g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), NULL);
return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev;
@@ -1469,7 +1315,6 @@ nm_supplicant_interface_get_ifname (NMSupplicantInterface *self)
guint
nm_supplicant_interface_get_max_scan_ssids (NMSupplicantInterface *self)
{
- g_return_val_if_fail (self != NULL, 0);
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), 0);
return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->max_scan_ssids;
@@ -1493,24 +1338,22 @@ nm_supplicant_interface_new (NMSupplicantManager *smgr,
g_return_val_if_fail (ifname != NULL, NULL);
self = g_object_new (NM_TYPE_SUPPLICANT_INTERFACE, NULL);
- if (self) {
- priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
-
- priv->smgr = g_object_ref (smgr);
- id = g_signal_connect (priv->smgr,
- "notify::" NM_SUPPLICANT_MANAGER_AVAILABLE,
- G_CALLBACK (smgr_avail_cb),
- self);
- priv->smgr_avail_id = id;
-
- priv->dev = g_strdup (ifname);
- priv->is_wireless = is_wireless;
- priv->fast_supported = fast_supported;
- priv->ap_support = ap_support;
+ priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- if (start_now)
- interface_add (self, priv->is_wireless);
- }
+ priv->smgr = g_object_ref (smgr);
+ id = g_signal_connect (priv->smgr,
+ "notify::" NM_SUPPLICANT_MANAGER_AVAILABLE,
+ G_CALLBACK (smgr_avail_cb),
+ self);
+ priv->smgr_avail_id = id;
+
+ priv->dev = g_strdup (ifname);
+ priv->is_wireless = is_wireless;
+ priv->fast_supported = fast_supported;
+ priv->ap_support = ap_support;
+
+ if (start_now)
+ interface_add (self, priv->is_wireless);
return self;
}
@@ -1532,7 +1375,7 @@ nm_supplicant_interface_init (NMSupplicantInterface * self)
WPAS_DBUS_PATH,
WPAS_DBUS_INTERFACE);
- priv->bss_proxies = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, bss_proxies_free);
+ priv->bss_proxies = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
}
static void
@@ -1576,10 +1419,10 @@ dispose (GObject *object)
priv->disposed = TRUE;
/* Cancel pending calls before unrefing the dbus manager */
- cancel_all_callbacks (priv->other_pcalls);
+ nm_call_store_clear (priv->other_pcalls);
nm_call_store_destroy (priv->other_pcalls);
- cancel_all_callbacks (priv->assoc_pcalls);
+ nm_call_store_clear (priv->assoc_pcalls);
nm_call_store_destroy (priv->assoc_pcalls);
if (priv->props_proxy)
@@ -1590,6 +1433,9 @@ dispose (GObject *object)
g_free (priv->net_path);
+ if (priv->introspect_proxy)
+ g_object_unref (priv->introspect_proxy);
+
if (priv->wpas_proxy)
g_object_unref (priv->wpas_proxy);
@@ -1603,8 +1449,7 @@ dispose (GObject *object)
g_free (priv->dev);
- if (priv->dbus_mgr)
- g_object_unref (priv->dbus_mgr);
+ priv->dbus_mgr = NULL;
if (priv->cfg)
g_object_unref (priv->cfg);
@@ -1640,8 +1485,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, state),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT_INT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT);
signals[REMOVED] =
@@ -1649,8 +1493,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[NEW_BSS] =
@@ -1658,8 +1501,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, new_bss),
- NULL, NULL,
- _nm_marshal_VOID__STRING_POINTER,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_POINTER);
signals[BSS_UPDATED] =
@@ -1667,8 +1509,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, bss_updated),
- NULL, NULL,
- _nm_marshal_VOID__STRING_POINTER,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_POINTER);
signals[BSS_REMOVED] =
@@ -1676,8 +1517,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, bss_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_STRING);
signals[SCAN_DONE] =
@@ -1685,8 +1525,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, scan_done),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOOLEAN,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
signals[CONNECTION_ERROR] =
@@ -1694,8 +1533,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, connection_error),
- NULL, NULL,
- _nm_marshal_VOID__STRING_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
signals[CREDENTIALS_REQUEST] =
@@ -1703,8 +1541,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMSupplicantInterfaceClass, credentials_request),
- NULL, NULL,
- _nm_marshal_VOID__STRING_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
}
diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h
index 2f0233cf7..633c16cc5 100644
--- a/src/supplicant-manager/nm-supplicant-interface.h
+++ b/src/supplicant-manager/nm-supplicant-interface.h
@@ -144,7 +144,7 @@ const char *nm_supplicant_interface_state_to_string (guint32 state);
gboolean nm_supplicant_interface_get_scanning (NMSupplicantInterface *self);
-time_t nm_supplicant_interface_get_last_scan_time (NMSupplicantInterface *self);
+gint32 nm_supplicant_interface_get_last_scan_time (NMSupplicantInterface *self);
const char *nm_supplicant_interface_get_ifname (NMSupplicantInterface *self);
diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c
index adc460082..f146b2398 100644
--- a/src/supplicant-manager/nm-supplicant-manager.c
+++ b/src/supplicant-manager/nm-supplicant-manager.c
@@ -210,7 +210,6 @@ check_capabilities (NMSupplicantManager *self)
gboolean
nm_supplicant_manager_available (NMSupplicantManager *self)
{
- g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), FALSE);
if (die_count_exceeded (NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->die_count))
@@ -379,7 +378,7 @@ dispose (GObject *object)
if (priv->dbus_mgr) {
if (priv->name_owner_id)
g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id);
- g_object_unref (G_OBJECT (priv->dbus_mgr));
+ priv->dbus_mgr = NULL;
}
g_hash_table_destroy (priv->ifaces);
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.c b/src/supplicant-manager/nm-supplicant-settings-verify.c
index 143e51a36..f7d4ca58c 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.c
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.c
@@ -74,7 +74,7 @@ const char * key_mgmt_allowed[] = { "WPA-PSK", "WPA-EAP", "IEEE8021X", "WPA-NONE
"NONE", NULL };
const char * auth_alg_allowed[] = { "OPEN", "SHARED", "LEAP", NULL };
const char * eap_allowed[] = { "LEAP", "MD5", "TLS", "PEAP", "TTLS", "SIM",
- "PSK", "FAST", NULL };
+ "PSK", "FAST", "PWD", NULL };
const char * phase1_allowed[] = {"peapver=0", "peapver=1", "peaplabel=1",
"peap_outer_success=0", "include_tls_length=1",
@@ -137,6 +137,7 @@ static const struct Opt opt_table[] = {
{ "proactive_key_caching", TYPE_INT, 0, 1, FALSE, NULL },
{ "bgscan", TYPE_BYTES, 0, 0, FALSE, NULL },
{ "pac_file", TYPE_BYTES, 0, 1024, FALSE, NULL },
+ { "freq_list", TYPE_BYTES, 0, 0, FALSE, NULL },
};
diff --git a/src/supplicant-manager/tests/Makefile.am b/src/supplicant-manager/tests/Makefile.am
index 58132a602..9defe66b1 100644
--- a/src/supplicant-manager/tests/Makefile.am
+++ b/src/supplicant-manager/tests/Makefile.am
@@ -1,26 +1,21 @@
-if ENABLE_TESTS
-
-noinst_PROGRAMS = test-supplicant-config
-
-test_supplicant_config_CPPFLAGS = \
+AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/supplicant-manager \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
+noinst_PROGRAMS = test-supplicant-config
+
test_supplicant_config_SOURCES = \
test-supplicant-config.c
test_supplicant_config_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/supplicant-manager/libsupplicant-manager.la \
- $(DBUS_LIBS)
-
-check-local: test-supplicant-config
- $(abs_builddir)/test-supplicant-config
+ $(top_builddir)/src/libNetworkManager.la
-endif
+TESTS = test-supplicant-config
diff --git a/src/supplicant-manager/tests/Makefile.in b/src/supplicant-manager/tests/Makefile.in
index 11dc6d5c8..42a7f6ff8 100644
--- a/src/supplicant-manager/tests/Makefile.in
+++ b/src/supplicant-manager/tests/Makefile.in
@@ -78,12 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-supplicant-config$(EXEEXT)
+noinst_PROGRAMS = test-supplicant-config$(EXEEXT)
+TESTS = test-supplicant-config$(EXEEXT)
subdir = src/supplicant-manager/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,14 +104,10 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_supplicant_config_SOURCES_DIST = test-supplicant-config.c
-@ENABLE_TESTS_TRUE@am_test_supplicant_config_OBJECTS = test_supplicant_config-test-supplicant-config.$(OBJEXT)
+am_test_supplicant_config_OBJECTS = test-supplicant-config.$(OBJEXT)
test_supplicant_config_OBJECTS = $(am_test_supplicant_config_OBJECTS)
-am__DEPENDENCIES_1 =
-@ENABLE_TESTS_TRUE@test_supplicant_config_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/supplicant-manager/libsupplicant-manager.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+test_supplicant_config_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -149,7 +147,7 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(test_supplicant_config_SOURCES)
-DIST_SOURCES = $(am__test_supplicant_config_SOURCES_DIST)
+DIST_SOURCES = $(test_supplicant_config_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -174,6 +172,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -200,12 +220,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -230,7 +253,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -275,12 +297,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -297,6 +323,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -324,11 +352,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -343,6 +376,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -405,6 +439,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -415,23 +450,24 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-@ENABLE_TESTS_TRUE@test_supplicant_config_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
-@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/supplicant-manager \
-@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS)
-
-@ENABLE_TESTS_TRUE@test_supplicant_config_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-supplicant-config.c
-
-@ENABLE_TESTS_TRUE@test_supplicant_config_LDADD = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/supplicant-manager/libsupplicant-manager.la \
-@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/supplicant-manager \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+test_supplicant_config_SOURCES = \
+ test-supplicant-config.c
+
+test_supplicant_config_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
all: all-am
@@ -487,7 +523,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_supplicant_config-test-supplicant-config.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-supplicant-config.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -510,20 +546,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-test_supplicant_config-test-supplicant-config.o: test-supplicant-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_supplicant_config_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_supplicant_config-test-supplicant-config.o -MD -MP -MF $(DEPDIR)/test_supplicant_config-test-supplicant-config.Tpo -c -o test_supplicant_config-test-supplicant-config.o `test -f 'test-supplicant-config.c' || echo '$(srcdir)/'`test-supplicant-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_supplicant_config-test-supplicant-config.Tpo $(DEPDIR)/test_supplicant_config-test-supplicant-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-supplicant-config.c' object='test_supplicant_config-test-supplicant-config.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_supplicant_config_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_supplicant_config-test-supplicant-config.o `test -f 'test-supplicant-config.c' || echo '$(srcdir)/'`test-supplicant-config.c
-
-test_supplicant_config-test-supplicant-config.obj: test-supplicant-config.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_supplicant_config_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_supplicant_config-test-supplicant-config.obj -MD -MP -MF $(DEPDIR)/test_supplicant_config-test-supplicant-config.Tpo -c -o test_supplicant_config-test-supplicant-config.obj `if test -f 'test-supplicant-config.c'; then $(CYGPATH_W) 'test-supplicant-config.c'; else $(CYGPATH_W) '$(srcdir)/test-supplicant-config.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_supplicant_config-test-supplicant-config.Tpo $(DEPDIR)/test_supplicant_config-test-supplicant-config.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-supplicant-config.c' object='test_supplicant_config-test-supplicant-config.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_supplicant_config_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_supplicant_config-test-supplicant-config.obj `if test -f 'test-supplicant-config.c'; then $(CYGPATH_W) 'test-supplicant-config.c'; else $(CYGPATH_W) '$(srcdir)/test-supplicant-config.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
@@ -582,6 +604,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -612,9 +727,8 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
@@ -721,7 +835,7 @@ uninstall-am:
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
@@ -736,9 +850,6 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-@ENABLE_TESTS_TRUE@check-local: test-supplicant-config
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-supplicant-config
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/supplicant-manager/tests/test-supplicant-config.c b/src/supplicant-manager/tests/test-supplicant-config.c
index d92fb0d17..ce884a8dd 100644
--- a/src/supplicant-manager/tests/test-supplicant-config.c
+++ b/src/supplicant-manager/tests/test-supplicant-config.c
@@ -39,11 +39,11 @@
#include <nm-setting-ip4-config.h>
#include <nm-setting-8021x.h>
-#include "nm-test-helpers.h"
-
#include "nm-supplicant-config.h"
#include "nm-supplicant-settings-verify.h"
+#include "nm-test-utils.h"
+
static gboolean
validate_opt (const char *detail,
GHashTable *hash,
@@ -128,14 +128,9 @@ test_wifi_open (void)
const char *bssid_str = "11:22:33:44:55:66";
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- "wifi-open", "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- "wifi-open", "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -149,9 +144,6 @@ test_wifi_open (void)
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- "wifi-open", "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -171,9 +163,6 @@ test_wifi_open (void)
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- "wifi-open", "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
@@ -183,16 +172,26 @@ test_wifi_open (void)
(error && error->message) ? error->message : "(unknown)");
config = nm_supplicant_config_new ();
- ASSERT (config != NULL,
- "wifi-open", "failed to create new supplicant config");
- success = nm_supplicant_config_add_setting_wireless (config, s_wifi, TRUE, 0, TRUE);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'ssid' value 'Test SSID'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'scan_ssid' value '1'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'bssid' value '11:22:33:44:55:66'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'freq_list' value *");
+ success = nm_supplicant_config_add_setting_wireless (config, s_wifi, 0);
ASSERT (success == TRUE,
"wifi-open", "failed to add wireless setting to supplicant config.");
+ g_test_assert_expected_messages ();
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'key_mgmt' value 'NONE'");
success = nm_supplicant_config_add_no_security (config);
ASSERT (success == TRUE,
"wifi-open", "failed to add wireless security to supplicant config.");
+ g_test_assert_expected_messages ();
hash = nm_supplicant_config_get_hash (config);
ASSERT (hash != NULL,
@@ -230,14 +229,9 @@ test_wifi_wep_key (const char *detail,
const char *bssid_str = "11:22:33:44:55:66";
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- detail, "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -251,9 +245,6 @@ test_wifi_wep_key (const char *detail,
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -266,7 +257,6 @@ test_wifi_wep_key (const char *detail,
NM_SETTING_WIRELESS_BSSID, bssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NM_SETTING_WIRELESS_BAND, "bg",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
@@ -274,9 +264,6 @@ test_wifi_wep_key (const char *detail,
/* Wifi Security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -287,9 +274,6 @@ test_wifi_wep_key (const char *detail,
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
@@ -299,19 +283,33 @@ test_wifi_wep_key (const char *detail,
(error && error->message) ? error->message : "(unknown)");
config = nm_supplicant_config_new ();
- ASSERT (config != NULL,
- detail, "failed to create new supplicant config");
- success = nm_supplicant_config_add_setting_wireless (config, s_wifi, TRUE, 0, TRUE);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'ssid' value 'Test SSID'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'scan_ssid' value '1'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'bssid' value '11:22:33:44:55:66'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'freq_list' value *");
+ success = nm_supplicant_config_add_setting_wireless (config, s_wifi, 0);
ASSERT (success == TRUE,
detail, "failed to add wireless setting to supplicant config.");
-
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'key_mgmt' value 'NONE'");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'wep_key0' value *");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'wep_tx_keyidx' value '0'");
success = nm_supplicant_config_add_setting_wireless_security (config,
s_wsec,
NULL,
"376aced7-b28c-46be-9a62-fcdf072571da");
ASSERT (success == TRUE,
detail, "failed to add wireless security to supplicant config.");
+ g_test_assert_expected_messages ();
hash = nm_supplicant_config_get_hash (config);
ASSERT (hash != NULL,
@@ -374,14 +372,9 @@ test_wifi_wpa_psk (const char *detail,
const char *bssid_str = "11:22:33:44:55:66";
connection = nm_connection_new ();
- ASSERT (connection != NULL,
- detail, "failed to allocate new connection");
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
- ASSERT (s_con != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
@@ -395,9 +388,6 @@ test_wifi_wpa_psk (const char *detail,
/* Wifi setting */
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
- ASSERT (s_wifi != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
ssid = g_byte_array_sized_new (sizeof (ssid_data));
@@ -410,7 +400,6 @@ test_wifi_wpa_psk (const char *detail,
NM_SETTING_WIRELESS_BSSID, bssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NM_SETTING_WIRELESS_BAND, "bg",
- NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NULL);
g_byte_array_free (ssid, TRUE);
@@ -418,9 +407,6 @@ test_wifi_wpa_psk (const char *detail,
/* Wifi Security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
- ASSERT (s_wsec != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
g_object_set (s_wsec,
@@ -437,9 +423,6 @@ test_wifi_wpa_psk (const char *detail,
/* IP4 setting */
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- ASSERT (s_ip4 != NULL,
- detail, "failed to allocate new %s setting",
- NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
@@ -449,19 +432,37 @@ test_wifi_wpa_psk (const char *detail,
(error && error->message) ? error->message : "(unknown)");
config = nm_supplicant_config_new ();
- ASSERT (config != NULL,
- detail, "failed to create new supplicant config");
- success = nm_supplicant_config_add_setting_wireless (config, s_wifi, TRUE, 0, TRUE);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'ssid' value 'Test SSID'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'scan_ssid' value '1'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'bssid' value '11:22:33:44:55:66'*");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'freq_list' value *");
+ success = nm_supplicant_config_add_setting_wireless (config, s_wifi, 0);
ASSERT (success == TRUE,
detail, "failed to add wireless setting to supplicant config.");
-
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'key_mgmt' value 'WPA-PSK'");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'psk' value *");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'proto' value 'WPA RSN'");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'pairwise' value 'TKIP CCMP'");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE,
+ "*added 'group' value 'TKIP CCMP'");
success = nm_supplicant_config_add_setting_wireless_security (config,
s_wsec,
NULL,
"376aced7-b28c-46be-9a62-fcdf072571da");
ASSERT (success == TRUE,
detail, "failed to add wireless security to supplicant config.");
+ g_test_assert_expected_messages ();
hash = nm_supplicant_config_get_hash (config);
ASSERT (hash != NULL,
@@ -493,15 +494,13 @@ test_wifi_wpa_psk_types (void)
test_wifi_wpa_psk ("wifi-wep-psk-passphrase", TYPE_STRING, key2, (gconstpointer) key2, strlen (key2));
}
+NMTST_DEFINE ();
+
int main (int argc, char **argv)
{
- GError *error = NULL;
char *base;
- g_type_init ();
-
- if (!nm_utils_init (&error))
- FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
+ nmtst_init (&argc, &argv, TRUE);
/* The tests */
test_wifi_open ();
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 77e6c0f52..ee5be17d7 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -1,20 +1,25 @@
-if ENABLE_TESTS
-
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/dhcp-manager \
-I$(top_srcdir)/src \
-I$(top_builddir)/src \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
noinst_PROGRAMS = \
test-dhcp-options \
- test-policy-hosts \
- test-wifi-ap-utils
+ test-general \
+ test-ip4-config \
+ test-ip6-config \
+ test-dcb \
+ test-resolvconf-capture
####### DHCP options test #######
@@ -27,32 +32,47 @@ test_dhcp_options_CPPFLAGS = \
-DDHCPCD_PATH=\"$(DHCPCD_PATH)\"
test_dhcp_options_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/dhcp-manager/libdhcp-manager.la \
- $(top_builddir)/src/libtest-dhcp.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS)
+ $(top_builddir)/src/libNetworkManager.la
+
+####### ip4 config test #######
+
+test_ip4_config_SOURCES = \
+ test-ip4-config.c
+
+test_ip4_config_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+####### ip6 config test #######
+
+test_ip6_config_SOURCES = \
+ test-ip6-config.c
+
+test_ip6_config_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+####### DCB test #######
+
+test_dcb_SOURCES = \
+ test-dcb.c
+
+test_dcb_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
-####### policy /etc/hosts test #######
+####### resolv.conf capture test #######
-test_policy_hosts_SOURCES = \
- test-policy-hosts.c
+test_resolvconf_capture_SOURCES = \
+ test-resolvconf-capture.c
-test_policy_hosts_LDADD = \
- -ldl \
- $(top_builddir)/src/libtest-policy-hosts.la \
- $(GLIB_LIBS)
+test_resolvconf_capture_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
-####### wifi ap utils test #######
+####### general test #######
-test_wifi_ap_utils_SOURCES = \
- test-wifi-ap-utils.c
+test_general_SOURCES = \
+ test-general.c
-test_wifi_ap_utils_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/libtest-wifi-ap-utils.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS)
+test_general_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
####### secret agent interface test #######
@@ -60,9 +80,5 @@ EXTRA_DIST = test-secret-agent.py
###########################################
-check-local: test-dhcp-options test-policy-hosts test-wifi-ap-utils
- $(abs_builddir)/test-dhcp-options
- $(abs_builddir)/test-policy-hosts
- $(abs_builddir)/test-wifi-ap-utils
+TESTS = test-dhcp-options test-ip4-config test-ip6-config test-dcb test-resolvconf-capture test-general
-endif
diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in
index 177cc4e9f..b9af7c317 100644
--- a/src/tests/Makefile.in
+++ b/src/tests/Makefile.in
@@ -78,14 +78,18 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-dhcp-options$(EXEEXT) \
-@ENABLE_TESTS_TRUE@ test-policy-hosts$(EXEEXT) \
-@ENABLE_TESTS_TRUE@ test-wifi-ap-utils$(EXEEXT)
+noinst_PROGRAMS = test-dhcp-options$(EXEEXT) test-general$(EXEEXT) \
+ test-ip4-config$(EXEEXT) test-ip6-config$(EXEEXT) \
+ test-dcb$(EXEEXT) test-resolvconf-capture$(EXEEXT)
+TESTS = test-dhcp-options$(EXEEXT) test-ip4-config$(EXEEXT) \
+ test-ip6-config$(EXEEXT) test-dcb$(EXEEXT) \
+ test-resolvconf-capture$(EXEEXT) test-general$(EXEEXT)
subdir = src/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -104,33 +108,35 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__test_dhcp_options_SOURCES_DIST = test-dhcp-options.c
-@ENABLE_TESTS_TRUE@am_test_dhcp_options_OBJECTS = test_dhcp_options-test-dhcp-options.$(OBJEXT)
-test_dhcp_options_OBJECTS = $(am_test_dhcp_options_OBJECTS)
-am__DEPENDENCIES_1 =
-@ENABLE_TESTS_TRUE@test_dhcp_options_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/dhcp-manager/libdhcp-manager.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libtest-dhcp.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_test_dcb_OBJECTS = test-dcb.$(OBJEXT)
+test_dcb_OBJECTS = $(am_test_dcb_OBJECTS)
+test_dcb_DEPENDENCIES = $(top_builddir)/src/libNetworkManager.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-am__test_policy_hosts_SOURCES_DIST = test-policy-hosts.c
-@ENABLE_TESTS_TRUE@am_test_policy_hosts_OBJECTS = \
-@ENABLE_TESTS_TRUE@ test-policy-hosts.$(OBJEXT)
-test_policy_hosts_OBJECTS = $(am_test_policy_hosts_OBJECTS)
-@ENABLE_TESTS_TRUE@test_policy_hosts_DEPENDENCIES = $(top_builddir)/src/libtest-policy-hosts.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
-am__test_wifi_ap_utils_SOURCES_DIST = test-wifi-ap-utils.c
-@ENABLE_TESTS_TRUE@am_test_wifi_ap_utils_OBJECTS = \
-@ENABLE_TESTS_TRUE@ test-wifi-ap-utils.$(OBJEXT)
-test_wifi_ap_utils_OBJECTS = $(am_test_wifi_ap_utils_OBJECTS)
-@ENABLE_TESTS_TRUE@test_wifi_ap_utils_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libtest-wifi-ap-utils.la \
-@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_test_dhcp_options_OBJECTS = \
+ test_dhcp_options-test-dhcp-options.$(OBJEXT)
+test_dhcp_options_OBJECTS = $(am_test_dhcp_options_OBJECTS)
+test_dhcp_options_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
+am_test_general_OBJECTS = test-general.$(OBJEXT)
+test_general_OBJECTS = $(am_test_general_OBJECTS)
+test_general_DEPENDENCIES = $(top_builddir)/src/libNetworkManager.la
+am_test_ip4_config_OBJECTS = test-ip4-config.$(OBJEXT)
+test_ip4_config_OBJECTS = $(am_test_ip4_config_OBJECTS)
+test_ip4_config_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
+am_test_ip6_config_OBJECTS = test-ip6-config.$(OBJEXT)
+test_ip6_config_OBJECTS = $(am_test_ip6_config_OBJECTS)
+test_ip6_config_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
+am_test_resolvconf_capture_OBJECTS = \
+ test-resolvconf-capture.$(OBJEXT)
+test_resolvconf_capture_OBJECTS = \
+ $(am_test_resolvconf_capture_OBJECTS)
+test_resolvconf_capture_DEPENDENCIES = \
+ $(top_builddir)/src/libNetworkManager.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -165,11 +171,12 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(test_dhcp_options_SOURCES) $(test_policy_hosts_SOURCES) \
- $(test_wifi_ap_utils_SOURCES)
-DIST_SOURCES = $(am__test_dhcp_options_SOURCES_DIST) \
- $(am__test_policy_hosts_SOURCES_DIST) \
- $(am__test_wifi_ap_utils_SOURCES_DIST)
+SOURCES = $(test_dcb_SOURCES) $(test_dhcp_options_SOURCES) \
+ $(test_general_SOURCES) $(test_ip4_config_SOURCES) \
+ $(test_ip6_config_SOURCES) $(test_resolvconf_capture_SOURCES)
+DIST_SOURCES = $(test_dcb_SOURCES) $(test_dhcp_options_SOURCES) \
+ $(test_general_SOURCES) $(test_ip4_config_SOURCES) \
+ $(test_ip6_config_SOURCES) $(test_resolvconf_capture_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -194,6 +201,28 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -220,12 +249,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -250,7 +282,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -295,12 +326,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -317,6 +352,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -344,11 +381,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -363,6 +405,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -425,6 +468,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -435,58 +479,78 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
-@ENABLE_TESTS_TRUE@ -I$(top_builddir)/include \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-util \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/dhcp-manager \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src \
-@ENABLE_TESTS_TRUE@ -I$(top_builddir)/src \
-@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS)
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src/logging \
+ -I$(top_srcdir)/src/platform \
+ -I$(top_srcdir)/src/dhcp-manager \
+ -I$(top_srcdir)/src \
+ -I$(top_builddir)/src \
+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS)
####### DHCP options test #######
-@ENABLE_TESTS_TRUE@test_dhcp_options_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-dhcp-options.c
+test_dhcp_options_SOURCES = \
+ test-dhcp-options.c
+
+test_dhcp_options_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
+ -DDHCPCD_PATH=\"$(DHCPCD_PATH)\"
+
+test_dhcp_options_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+
+####### ip4 config test #######
+test_ip4_config_SOURCES = \
+ test-ip4-config.c
-@ENABLE_TESTS_TRUE@test_dhcp_options_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@ $(AM_CPPFLAGS) \
-@ENABLE_TESTS_TRUE@ -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
-@ENABLE_TESTS_TRUE@ -DDHCPCD_PATH=\"$(DHCPCD_PATH)\"
+test_ip4_config_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
-@ENABLE_TESTS_TRUE@test_dhcp_options_LDADD = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/dhcp-manager/libdhcp-manager.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libtest-dhcp.la \
-@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+####### ip6 config test #######
+test_ip6_config_SOURCES = \
+ test-ip6-config.c
-####### policy /etc/hosts test #######
-@ENABLE_TESTS_TRUE@test_policy_hosts_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-policy-hosts.c
+test_ip6_config_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
-@ENABLE_TESTS_TRUE@test_policy_hosts_LDADD = \
-@ENABLE_TESTS_TRUE@ -ldl \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libtest-policy-hosts.la \
-@ENABLE_TESTS_TRUE@ $(GLIB_LIBS)
+####### DCB test #######
+test_dcb_SOURCES = \
+ test-dcb.c
-####### wifi ap utils test #######
-@ENABLE_TESTS_TRUE@test_wifi_ap_utils_SOURCES = \
-@ENABLE_TESTS_TRUE@ test-wifi-ap-utils.c
+test_dcb_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
-@ENABLE_TESTS_TRUE@test_wifi_ap_utils_LDADD = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libtest-wifi-ap-utils.la \
-@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
-@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+
+####### resolv.conf capture test #######
+test_resolvconf_capture_SOURCES = \
+ test-resolvconf-capture.c
+
+test_resolvconf_capture_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+
+####### general test #######
+test_general_SOURCES = \
+ test-general.c
+
+test_general_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
####### secret agent interface test #######
-@ENABLE_TESTS_TRUE@EXTRA_DIST = test-secret-agent.py
+EXTRA_DIST = test-secret-agent.py
all: all-am
.SUFFIXES:
@@ -531,17 +595,29 @@ clean-noinstPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
+test-dcb$(EXEEXT): $(test_dcb_OBJECTS) $(test_dcb_DEPENDENCIES) $(EXTRA_test_dcb_DEPENDENCIES)
+ @rm -f test-dcb$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_dcb_OBJECTS) $(test_dcb_LDADD) $(LIBS)
+
test-dhcp-options$(EXEEXT): $(test_dhcp_options_OBJECTS) $(test_dhcp_options_DEPENDENCIES) $(EXTRA_test_dhcp_options_DEPENDENCIES)
@rm -f test-dhcp-options$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_dhcp_options_OBJECTS) $(test_dhcp_options_LDADD) $(LIBS)
-test-policy-hosts$(EXEEXT): $(test_policy_hosts_OBJECTS) $(test_policy_hosts_DEPENDENCIES) $(EXTRA_test_policy_hosts_DEPENDENCIES)
- @rm -f test-policy-hosts$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(test_policy_hosts_OBJECTS) $(test_policy_hosts_LDADD) $(LIBS)
+test-general$(EXEEXT): $(test_general_OBJECTS) $(test_general_DEPENDENCIES) $(EXTRA_test_general_DEPENDENCIES)
+ @rm -f test-general$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_general_OBJECTS) $(test_general_LDADD) $(LIBS)
+
+test-ip4-config$(EXEEXT): $(test_ip4_config_OBJECTS) $(test_ip4_config_DEPENDENCIES) $(EXTRA_test_ip4_config_DEPENDENCIES)
+ @rm -f test-ip4-config$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_ip4_config_OBJECTS) $(test_ip4_config_LDADD) $(LIBS)
+
+test-ip6-config$(EXEEXT): $(test_ip6_config_OBJECTS) $(test_ip6_config_DEPENDENCIES) $(EXTRA_test_ip6_config_DEPENDENCIES)
+ @rm -f test-ip6-config$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_ip6_config_OBJECTS) $(test_ip6_config_LDADD) $(LIBS)
-test-wifi-ap-utils$(EXEEXT): $(test_wifi_ap_utils_OBJECTS) $(test_wifi_ap_utils_DEPENDENCIES) $(EXTRA_test_wifi_ap_utils_DEPENDENCIES)
- @rm -f test-wifi-ap-utils$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(test_wifi_ap_utils_OBJECTS) $(test_wifi_ap_utils_LDADD) $(LIBS)
+test-resolvconf-capture$(EXEEXT): $(test_resolvconf_capture_OBJECTS) $(test_resolvconf_capture_DEPENDENCIES) $(EXTRA_test_resolvconf_capture_DEPENDENCIES)
+ @rm -f test-resolvconf-capture$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_resolvconf_capture_OBJECTS) $(test_resolvconf_capture_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -549,8 +625,11 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-policy-hosts.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wifi-ap-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dcb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-general.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ip4-config.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ip6-config.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-resolvconf-capture.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dhcp_options-test-dhcp-options.Po@am__quote@
.c.o:
@@ -646,6 +725,99 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -676,9 +848,8 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
@@ -785,7 +956,7 @@ uninstall-am:
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
@@ -800,13 +971,6 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-###########################################
-
-@ENABLE_TESTS_TRUE@check-local: test-dhcp-options test-policy-hosts test-wifi-ap-utils
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-dhcp-options
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-policy-hosts
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-wifi-ap-utils
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/tests/test-dcb.c b/src/tests/test-dcb.c
new file mode 100644
index 000000000..c28f05b92
--- /dev/null
+++ b/src/tests/test-dcb.c
@@ -0,0 +1,357 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+
+#include "nm-dcb.h"
+
+typedef struct {
+ guint num;
+ const char *cmds[];
+} DcbExpected;
+
+static gboolean
+test_dcb_func (char **argv, guint which, gpointer user_data, GError **error)
+{
+ DcbExpected *e = user_data;
+ char *f;
+
+ g_assert (argv[0] == NULL);
+ argv[0] = (which == DCBTOOL) ? "dcbtool" : "fcoeadm";
+
+ f = g_strjoinv (" ", argv);
+ if (e->cmds[e->num] == NULL)
+ g_assert_cmpstr (f, ==, NULL);
+ g_assert_cmpstr (e->cmds[e->num], !=, NULL);
+ g_assert_cmpstr (f, ==, e->cmds[e->num++]);
+ g_free (f);
+ return TRUE;
+}
+
+#define DCB_FLAGS_ALL (NM_SETTING_DCB_FLAG_ENABLE | \
+ NM_SETTING_DCB_FLAG_ADVERTISE | \
+ NM_SETTING_DCB_FLAG_WILLING)
+
+static void
+test_dcb_fcoe (void)
+{
+ static DcbExpected expected = { 0,
+ { "dcbtool sc eth0 app:fcoe e:1 a:1 w:1",
+ "dcbtool sc eth0 app:fcoe appcfg:40",
+ "dcbtool sc eth0 app:iscsi e:0 a:0 w:0",
+ "dcbtool sc eth0 app:fip e:0 a:0 w:0",
+ "dcbtool sc eth0 pfc e:0 a:0 w:0",
+ "dcbtool sc eth0 pg e:0",
+ NULL },
+ };
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_FCOE_FLAGS, DCB_FLAGS_ALL,
+ NM_SETTING_DCB_APP_FCOE_PRIORITY, 6,
+ NULL);
+
+ success = _dcb_setup ("eth0", s_dcb, test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (expected.cmds[expected.num], ==, NULL);
+ g_object_unref (s_dcb);
+}
+
+static void
+test_dcb_iscsi (void)
+{
+ static DcbExpected expected = { 0,
+ { "dcbtool sc eth0 app:fcoe e:0 a:0 w:0",
+ "dcbtool sc eth0 app:iscsi e:1 a:0 w:1",
+ "dcbtool sc eth0 app:iscsi appcfg:08",
+ "dcbtool sc eth0 app:fip e:0 a:0 w:0",
+ "dcbtool sc eth0 pfc e:0 a:0 w:0",
+ "dcbtool sc eth0 pg e:0",
+ NULL },
+ };
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_ISCSI_FLAGS, (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_WILLING),
+ NM_SETTING_DCB_APP_ISCSI_PRIORITY, 3,
+ NULL);
+
+ success = _dcb_setup ("eth0", s_dcb, test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (expected.cmds[expected.num], ==, NULL);
+ g_object_unref (s_dcb);
+}
+
+static void
+test_dcb_fip (void)
+{
+ static DcbExpected expected = { 0,
+ { "dcbtool sc eth0 app:fcoe e:0 a:0 w:0",
+ "dcbtool sc eth0 app:iscsi e:0 a:0 w:0",
+ "dcbtool sc eth0 app:fip e:1 a:1 w:0",
+ "dcbtool sc eth0 app:fip appcfg:01",
+ "dcbtool sc eth0 pfc e:0 a:0 w:0",
+ "dcbtool sc eth0 pg e:0",
+ NULL },
+ };
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_FIP_FLAGS, (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE),
+ NM_SETTING_DCB_APP_FIP_PRIORITY, 0,
+ NULL);
+
+ success = _dcb_setup ("eth0", s_dcb, test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (expected.cmds[expected.num], ==, NULL);
+ g_object_unref (s_dcb);
+}
+
+static void
+test_dcb_fip_default_prio (void)
+{
+ static DcbExpected expected = { 0,
+ { "dcbtool sc eth0 app:fcoe e:0 a:0 w:0",
+ "dcbtool sc eth0 app:iscsi e:0 a:0 w:0",
+ "dcbtool sc eth0 app:fip e:1 a:1 w:0",
+ "dcbtool sc eth0 pfc e:0 a:0 w:0",
+ "dcbtool sc eth0 pg e:0",
+ NULL },
+ };
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_FIP_FLAGS, (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE),
+ NM_SETTING_DCB_APP_FIP_PRIORITY, -1,
+ NULL);
+
+ success = _dcb_setup ("eth0", s_dcb, test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (expected.cmds[expected.num], ==, NULL);
+ g_object_unref (s_dcb);
+}
+
+static void
+test_dcb_pfc (void)
+{
+ static DcbExpected expected = { 0,
+ { "dcbtool sc eth0 app:fcoe e:0 a:0 w:0",
+ "dcbtool sc eth0 app:iscsi e:0 a:0 w:0",
+ "dcbtool sc eth0 app:fip e:0 a:0 w:0",
+ "dcbtool sc eth0 pfc e:1 a:1 w:1",
+ "dcbtool sc eth0 pfc pfcup:01101100",
+ "dcbtool sc eth0 pg e:0",
+ NULL },
+ };
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, DCB_FLAGS_ALL,
+ NULL);
+
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 0, FALSE);
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 1, TRUE);
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 2, TRUE);
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 3, FALSE);
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 4, TRUE);
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 5, TRUE);
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 6, FALSE);
+ nm_setting_dcb_set_priority_flow_control (s_dcb, 7, FALSE);
+
+ success = _dcb_setup ("eth0", s_dcb, test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (expected.cmds[expected.num], ==, NULL);
+ g_object_unref (s_dcb);
+}
+
+static void
+test_dcb_priority_groups (void)
+{
+ static DcbExpected expected = { 0,
+ { "dcbtool sc eth0 app:fcoe e:0 a:0 w:0",
+ "dcbtool sc eth0 app:iscsi e:0 a:0 w:0",
+ "dcbtool sc eth0 app:fip e:0 a:0 w:0",
+ "dcbtool sc eth0 pfc e:0 a:0 w:0",
+ "dcbtool sc eth0 pg e:1 a:1 w:1" \
+ " pgid:765f3210" \
+ " pgpct:10,40,5,10,5,20,7,3" \
+ " uppct:100,50,33,25,20,16,14,12" \
+ " strict:01010101" \
+ " up2tc:01201201",
+ NULL },
+ };
+ NMSettingDcb *s_dcb;
+ GError *error = NULL;
+ gboolean success;
+ guint i;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, DCB_FLAGS_ALL,
+ NULL);
+
+ for (i = 0; i < 8; i++) {
+ /* Make sure at least one 15/f is present in the group IDs */
+ nm_setting_dcb_set_priority_group_id (s_dcb, i, (i == 3) ? 15 : 7 - i);
+ nm_setting_dcb_set_priority_bandwidth (s_dcb, i, 100 / (i + 1));
+ nm_setting_dcb_set_priority_strict_bandwidth (s_dcb, i, i % 2);
+ nm_setting_dcb_set_priority_traffic_class (s_dcb, i, i % 3);
+ }
+
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 0, 10);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 1, 40);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 2, 5);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 3, 10);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 4, 5);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 5, 20);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 6, 7);
+ nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 3);
+
+ success = _dcb_setup ("eth0", s_dcb, test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (expected.cmds[expected.num], ==, NULL);
+ g_object_unref (s_dcb);
+}
+
+static void
+test_dcb_cleanup (void)
+{
+ static DcbExpected expected = { 0,
+ { "fcoeadm -d eth0",
+ "dcbtool sc eth0 app:fcoe e:0",
+ "dcbtool sc eth0 app:iscsi e:0",
+ "dcbtool sc eth0 app:fip e:0",
+ "dcbtool sc eth0 pfc e:0",
+ "dcbtool sc eth0 pg e:0",
+ "dcbtool sc eth0 dcb off",
+ NULL },
+ };
+ GError *error = NULL;
+ gboolean success;
+
+ success = _fcoe_cleanup ("eth0", test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ success = _dcb_cleanup ("eth0", test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (expected.cmds[expected.num], ==, NULL);
+}
+
+static void
+test_fcoe_create (void)
+{
+ static DcbExpected expected1 = { 0,
+ { "fcoeadm -m fabric -c eth0", NULL },
+ };
+ static DcbExpected expected2 = { 0,
+ { "fcoeadm -m vn2vn -c eth0", NULL },
+ };
+ GError *error = NULL;
+ gboolean success;
+ NMSettingDcb *s_dcb;
+
+ s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
+ g_object_set (G_OBJECT (s_dcb),
+ NM_SETTING_DCB_APP_FCOE_FLAGS, DCB_FLAGS_ALL,
+ NULL);
+
+ /* Default mode is fabric */
+ success = _fcoe_setup ("eth0", s_dcb, test_dcb_func, &expected1, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Test VN2VN */
+ g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_FCOE_MODE, NM_SETTING_DCB_FCOE_MODE_VN2VN, NULL);
+ success = _fcoe_setup ("eth0", s_dcb, test_dcb_func, &expected2, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_object_unref (s_dcb);
+}
+
+static void
+test_fcoe_cleanup (void)
+{
+ static DcbExpected expected = { 0,
+ { "fcoeadm -d eth0", NULL },
+ };
+ GError *error = NULL;
+ gboolean success;
+
+ success = _fcoe_cleanup ("eth0", test_dcb_func, &expected, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+}
+
+/*******************************************/
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_add_func ("/dcb/fcoe", test_dcb_fcoe);
+ g_test_add_func ("/dcb/iscsi", test_dcb_iscsi);
+ g_test_add_func ("/dcb/fip", test_dcb_fip);
+ g_test_add_func ("/dcb/fip-default-priority", test_dcb_fip_default_prio);
+ g_test_add_func ("/dcb/pfc", test_dcb_pfc);
+ g_test_add_func ("/dcb/priority-groups", test_dcb_priority_groups);
+ g_test_add_func ("/dcb/cleanup", test_dcb_cleanup);
+ g_test_add_func ("/fcoe/create", test_fcoe_create);
+ g_test_add_func ("/fcoe/cleanup", test_fcoe_cleanup);
+
+ return g_test_run ();
+}
+
diff --git a/src/tests/test-dhcp-options.c b/src/tests/test-dhcp-options.c
index 9463ed5be..5df17e587 100644
--- a/src/tests/test-dhcp-options.c
+++ b/src/tests/test-dhcp-options.c
@@ -25,10 +25,12 @@
#include <arpa/inet.h>
#include <string.h>
-#include "nm-test-helpers.h"
#include <nm-utils.h>
#include "nm-dhcp-manager.h"
+#include "nm-logging.h"
+
+#include "nm-test-utils.h"
typedef struct {
const char *name;
@@ -97,13 +99,14 @@ static Option generic_options[] = {
};
static void
-test_generic_options (const char *client)
+test_generic_options (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Address *addr;
- NMIP4Route *route;
- struct in_addr tmp;
+ const NMPlatformIP4Address *address;
+ const NMPlatformIP4Route *route;
+ guint32 tmp;
const char *expected_addr = "192.168.1.106";
const char *expected_gw = "192.168.1.1";
const char *expected_dns1 = "216.254.95.2";
@@ -123,25 +126,24 @@ test_generic_options (const char *client)
/* IP4 address */
ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
"dhcp-generic", "unexpected number of IP addresses");
- addr = nm_ip4_config_get_address (ip4_config, 0);
+ address = nm_ip4_config_get_address (ip4_config, 0);
ASSERT (inet_pton (AF_INET, expected_addr, &tmp) > 0,
"dhcp-generic", "couldn't convert expected IP address");
- ASSERT (nm_ip4_address_get_address (addr) == tmp.s_addr,
+ ASSERT (address->address == tmp,
"dhcp-generic", "unexpected IP address");
+ ASSERT (address->peer_address == 0,
+ "dhcp-generic", "unexpected PTP address");
- ASSERT (nm_ip4_address_get_prefix (addr) == 24,
+ ASSERT (address->plen == 24,
"dhcp-generic", "unexpected IP address prefix length");
/* Gateway */
ASSERT (inet_pton (AF_INET, expected_gw, &tmp) > 0,
"dhcp-generic", "couldn't convert expected IP gateway");
- ASSERT (nm_ip4_address_get_gateway (addr) == tmp.s_addr,
+ ASSERT (nm_ip4_config_get_gateway (ip4_config) == tmp,
"dhcp-generic", "unexpected IP gateway");
- ASSERT (nm_ip4_config_get_ptp_address (ip4_config) == 0,
- "dhcp-generic", "unexpected PTP address");
-
ASSERT (nm_ip4_config_get_num_wins (ip4_config) == 0,
"dhcp-generic", "unexpected number of WINS servers");
@@ -161,11 +163,11 @@ test_generic_options (const char *client)
"dhcp-generic", "unexpected number of domain name servers");
ASSERT (inet_pton (AF_INET, expected_dns1, &tmp) > 0,
"dhcp-generic", "couldn't convert expected DNS server address #1");
- ASSERT (nm_ip4_config_get_nameserver (ip4_config, 0) == tmp.s_addr,
+ ASSERT (nm_ip4_config_get_nameserver (ip4_config, 0) == tmp,
"dhcp-generic", "unexpected domain name server #1");
ASSERT (inet_pton (AF_INET, expected_dns2, &tmp) > 0,
"dhcp-generic", "couldn't convert expected DNS server address #2");
- ASSERT (nm_ip4_config_get_nameserver (ip4_config, 1) == tmp.s_addr,
+ ASSERT (nm_ip4_config_get_nameserver (ip4_config, 1) == tmp,
"dhcp-generic", "unexpected domain name server #2");
/* Routes */
@@ -176,34 +178,34 @@ test_generic_options (const char *client)
route = nm_ip4_config_get_route (ip4_config, 0);
ASSERT (inet_pton (AF_INET, expected_route1_dest, &tmp) > 0,
"dhcp-generic", "couldn't convert expected route destination #1");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
+ ASSERT (route->network == tmp,
"dhcp-generic", "unexpected route #1 destination");
ASSERT (inet_pton (AF_INET, expected_route1_gw, &tmp) > 0,
"dhcp-generic", "couldn't convert expected route next hop #1");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
+ ASSERT (route->gateway == tmp,
"dhcp-generic", "unexpected route #1 next hop");
- ASSERT (nm_ip4_route_get_prefix (route) == 32,
+ ASSERT (route->plen == 32,
"dhcp-generic", "unexpected route #1 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
+ ASSERT (route->metric == 0,
"dhcp-generic", "unexpected route #1 metric");
/* Route #2 */
route = nm_ip4_config_get_route (ip4_config, 1);
ASSERT (inet_pton (AF_INET, expected_route2_dest, &tmp) > 0,
"dhcp-generic", "couldn't convert expected route destination #2");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
+ ASSERT (route->network == tmp,
"dhcp-generic", "unexpected route #2 destination");
ASSERT (inet_pton (AF_INET, expected_route2_gw, &tmp) > 0,
"dhcp-generic", "couldn't convert expected route next hop #2");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
+ ASSERT (route->gateway == tmp,
"dhcp-generic", "unexpected route #2 next hop");
- ASSERT (nm_ip4_route_get_prefix (route) == 32,
+ ASSERT (route->plen == 32,
"dhcp-generic", "unexpected route #2 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
+ ASSERT (route->metric == 0,
"dhcp-generic", "unexpected route #2 metric");
g_hash_table_destroy (options);
@@ -215,12 +217,13 @@ static Option wins_options[] = {
};
static void
-test_wins_options (const char *client)
+test_wins_options (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Address *addr;
- struct in_addr tmp;
+ const NMPlatformIP4Address *address;
+ guint32 tmp;
const char *expected_wins1 = "63.12.199.5";
const char *expected_wins2 = "150.4.88.120";
@@ -234,17 +237,18 @@ test_wins_options (const char *client)
/* IP4 address */
ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
"dhcp-wins", "unexpected number of IP addresses");
- addr = nm_ip4_config_get_address (ip4_config, 0);
+ address = nm_ip4_config_get_address (ip4_config, 0);
+ ASSERT (address != NULL, "dhcp-wins", "unexpectedly did not get address #0");
ASSERT (nm_ip4_config_get_num_wins (ip4_config) == 2,
"dhcp-wins", "unexpected number of WINS servers");
ASSERT (inet_pton (AF_INET, expected_wins1, &tmp) > 0,
"dhcp-wins", "couldn't convert expected WINS server address #1");
- ASSERT (nm_ip4_config_get_wins (ip4_config, 0) == tmp.s_addr,
+ ASSERT (nm_ip4_config_get_wins (ip4_config, 0) == tmp,
"dhcp-wins", "unexpected WINS server #1");
ASSERT (inet_pton (AF_INET, expected_wins2, &tmp) > 0,
"dhcp-wins", "couldn't convert expected WINS server address #1");
- ASSERT (nm_ip4_config_get_wins (ip4_config, 1) == tmp.s_addr,
+ ASSERT (nm_ip4_config_get_wins (ip4_config, 1) == tmp,
"dhcp-wins", "unexpected WINS server #1");
g_hash_table_destroy (options);
@@ -258,24 +262,24 @@ ip4_test_route (const char *test,
const char *expected_gw,
guint expected_prefix)
{
- NMIP4Route *route;
- struct in_addr tmp;
+ const NMPlatformIP4Route *route;
+ guint32 tmp;
route = nm_ip4_config_get_route (ip4_config, route_num);
ASSERT (inet_pton (AF_INET, expected_dest, &tmp) > 0,
test, "couldn't convert expected route destination #1");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
+ ASSERT (route->network == tmp,
test, "unexpected route %d destination", route_num + 1);
ASSERT (inet_pton (AF_INET, expected_gw, &tmp) > 0,
test, "couldn't convert expected route next hop %d",
route_num + 1);
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
+ ASSERT (route->gateway == tmp,
test, "unexpected route %d next hop", route_num + 1);
- ASSERT (nm_ip4_route_get_prefix (route) == expected_prefix,
+ ASSERT (route->plen == expected_prefix,
test, "unexpected route %d prefix", route_num + 1);
- ASSERT (nm_ip4_route_get_metric (route) == 0,
+ ASSERT (route->metric == 0,
test, "unexpected route %d metric", route_num + 1);
}
@@ -284,21 +288,20 @@ ip4_test_gateway (const char *test,
NMIP4Config *ip4_config,
const char *expected_gw)
{
- NMIP4Address *addr;
- struct in_addr tmp;
+ guint32 tmp;
ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
test, "unexpected number of IP addresses");
- addr = nm_ip4_config_get_address (ip4_config, 0);
ASSERT (inet_pton (AF_INET, expected_gw, &tmp) > 0,
test, "couldn't convert expected IP gateway");
- ASSERT (nm_ip4_address_get_gateway (addr) == tmp.s_addr,
+ ASSERT (nm_ip4_config_get_gateway (ip4_config) == tmp,
test, "unexpected IP gateway");
}
static void
-test_classless_static_routes_1 (const char *client)
+test_classless_static_routes_1 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "192.168.10.0";
@@ -330,8 +333,9 @@ test_classless_static_routes_1 (const char *client)
}
static void
-test_classless_static_routes_2 (const char *client)
+test_classless_static_routes_2 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "192.168.10.0";
@@ -363,8 +367,9 @@ test_classless_static_routes_2 (const char *client)
}
static void
-test_fedora_dhclient_classless_static_routes (const char *client)
+test_fedora_dhclient_classless_static_routes (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "129.210.177.128";
@@ -400,8 +405,9 @@ test_fedora_dhclient_classless_static_routes (const char *client)
}
static void
-test_dhclient_invalid_classless_routes_1 (const char *client)
+test_dhclient_invalid_classless_routes_1 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "192.168.10.0";
@@ -415,9 +421,12 @@ test_dhclient_invalid_classless_routes_1 (const char *client)
options = fill_table (generic_options, NULL);
options = fill_table (data, options);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring invalid classless static routes*");
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
"dhcp-dhclient-classless-invalid-1", "failed to parse DHCP4 options");
+ g_test_assert_expected_messages ();
/* IP4 routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
@@ -430,8 +439,9 @@ test_dhclient_invalid_classless_routes_1 (const char *client)
}
static void
-test_dhcpcd_invalid_classless_routes_1 (const char *client)
+test_dhcpcd_invalid_classless_routes_1 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "10.1.1.5";
@@ -447,9 +457,12 @@ test_dhcpcd_invalid_classless_routes_1 (const char *client)
options = fill_table (generic_options, NULL);
options = fill_table (data, options);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring invalid classless static routes*");
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
"dhcp-dhcpcd-classless-invalid-1", "failed to parse DHCP4 options");
+ g_test_assert_expected_messages ();
/* Test falling back to old-style static routes if the classless static
* routes are invalid.
@@ -465,8 +478,9 @@ test_dhcpcd_invalid_classless_routes_1 (const char *client)
}
static void
-test_dhclient_invalid_classless_routes_2 (const char *client)
+test_dhclient_invalid_classless_routes_2 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "10.1.1.5";
@@ -481,9 +495,12 @@ test_dhclient_invalid_classless_routes_2 (const char *client)
options = fill_table (generic_options, NULL);
options = fill_table (data, options);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring invalid classless static routes*");
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
"dhcp-dhclient-classless-invalid-2", "failed to parse DHCP4 options");
+ g_test_assert_expected_messages ();
/* Test falling back to old-style static routes if the classless static
* routes are invalid.
@@ -499,8 +516,9 @@ test_dhclient_invalid_classless_routes_2 (const char *client)
}
static void
-test_dhcpcd_invalid_classless_routes_2 (const char *client)
+test_dhcpcd_invalid_classless_routes_2 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "10.1.1.5";
@@ -515,9 +533,12 @@ test_dhcpcd_invalid_classless_routes_2 (const char *client)
options = fill_table (generic_options, NULL);
options = fill_table (data, options);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring invalid classless static routes*");
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
"dhcp-dhcpcd-classless-invalid-2", "failed to parse DHCP4 options");
+ g_test_assert_expected_messages ();
/* Test falling back to old-style static routes if the classless static
* routes are invalid.
@@ -535,8 +556,9 @@ test_dhcpcd_invalid_classless_routes_2 (const char *client)
}
static void
-test_dhclient_invalid_classless_routes_3 (const char *client)
+test_dhclient_invalid_classless_routes_3 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "192.168.10.0";
@@ -549,9 +571,12 @@ test_dhclient_invalid_classless_routes_3 (const char *client)
options = fill_table (generic_options, NULL);
options = fill_table (data, options);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*ignoring invalid classless static routes*");
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
"dhcp-dhclient-classless-invalid-3", "failed to parse DHCP4 options");
+ g_test_assert_expected_messages ();
/* IP4 routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
@@ -563,8 +588,9 @@ test_dhclient_invalid_classless_routes_3 (const char *client)
}
static void
-test_dhcpcd_invalid_classless_routes_3 (const char *client)
+test_dhcpcd_invalid_classless_routes_3 (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "192.168.10.0";
@@ -577,9 +603,12 @@ test_dhcpcd_invalid_classless_routes_3 (const char *client)
options = fill_table (generic_options, NULL);
options = fill_table (data, options);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*DHCP provided invalid classless static route*");
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
"dhcp-dhcpcd-classless-invalid-3", "failed to parse DHCP4 options");
+ g_test_assert_expected_messages ();
/* IP4 routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
@@ -591,8 +620,9 @@ test_dhcpcd_invalid_classless_routes_3 (const char *client)
}
static void
-test_dhclient_gw_in_classless_routes (const char *client)
+test_dhclient_gw_in_classless_routes (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "192.168.10.0";
@@ -623,8 +653,9 @@ test_dhclient_gw_in_classless_routes (const char *client)
}
static void
-test_dhcpcd_gw_in_classless_routes (const char *client)
+test_dhcpcd_gw_in_classless_routes (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_route1_dest = "192.168.10.0";
@@ -660,8 +691,9 @@ static Option escaped_searches_options[] = {
};
static void
-test_escaped_domain_searches (const char *client)
+test_escaped_domain_searches (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
const char *expected_search0 = "host1";
@@ -694,17 +726,21 @@ static Option invalid_escaped_searches_options[] = {
};
static void
-test_invalid_escaped_domain_searches (const char *client)
+test_invalid_escaped_domain_searches (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
options = fill_table (generic_options, NULL);
options = fill_table (invalid_escaped_searches_options, options);
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*invalid domain search*");
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
"dhcp-invalid-escaped-domain-searches", "failed to parse DHCP4 options");
+ g_test_assert_expected_messages ();
/* domain searches */
ASSERT (nm_ip4_config_get_num_searches (ip4_config) == 0,
@@ -718,7 +754,7 @@ test_ip4_missing_prefix (const char *client, const char *ip, guint32 expected_pr
{
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Address *addr;
+ const NMPlatformIP4Address *address;
options = fill_table (generic_options, NULL);
g_hash_table_insert (options, "new_ip_address", string_to_byte_array_gvalue (ip));
@@ -731,23 +767,48 @@ test_ip4_missing_prefix (const char *client, const char *ip, guint32 expected_pr
ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
"dhcp-ip4-missing-prefix", "unexpected number of IP4 addresses (not 1)");
- addr = nm_ip4_config_get_address (ip4_config, 0);
- ASSERT (addr != NULL,
+ address = nm_ip4_config_get_address (ip4_config, 0);
+ ASSERT (address,
"dhcp-ip4-missing-prefix", "missing IP4 address #1");
- ASSERT (nm_ip4_address_get_prefix (addr) == expected_prefix,
+ ASSERT (address->plen == expected_prefix,
"dhcp-ip4-missing-prefix", "unexpected IP4 address prefix %d (expected %d)",
- nm_ip4_address_get_prefix (addr), expected_prefix);
+ address->plen, expected_prefix);
g_hash_table_destroy (options);
}
static void
-test_ip4_prefix_classless (const char *client)
+test_ip4_missing_prefix_24 (gconstpointer test_data)
+{
+ const char *client = test_data;
+
+ test_ip4_missing_prefix (client, "192.168.1.10", 24);
+}
+
+static void
+test_ip4_missing_prefix_16 (gconstpointer test_data)
+{
+ const char *client = test_data;
+
+ test_ip4_missing_prefix (client, "172.16.54.50", 16);
+}
+
+static void
+test_ip4_missing_prefix_8 (gconstpointer test_data)
+{
+ const char *client = test_data;
+
+ test_ip4_missing_prefix (client, "10.1.2.3", 8);
+}
+
+static void
+test_ip4_prefix_classless (gconstpointer test_data)
{
+ const char *client = test_data;
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Address *addr;
+ const NMPlatformIP4Address *address;
/* Ensure that the missing-subnet-mask handler doesn't mangle classless
* subnet masks at all. The handler should trigger only if the server
@@ -765,30 +826,28 @@ test_ip4_prefix_classless (const char *client)
ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
"dhcp-ip4-prefix-classless", "unexpected number of IP4 addresses (not 1)");
- addr = nm_ip4_config_get_address (ip4_config, 0);
- ASSERT (addr != NULL,
+ address = nm_ip4_config_get_address (ip4_config, 0);
+ ASSERT (address,
"dhcp-ip4-prefix-classless", "missing IP4 address #1");
- ASSERT (nm_ip4_address_get_prefix (addr) == 22,
+ ASSERT (address->plen == 22,
"dhcp-ip4-prefix-classless", "unexpected IP4 address prefix %d (expected 22)",
- nm_ip4_address_get_prefix (addr));
+ address->plen);
g_hash_table_destroy (options);
}
+NMTST_DEFINE ();
+
int main (int argc, char **argv)
{
- GError *error = NULL;
- char *base;
+ char *path;
const char *clients[2][2] = { {DHCLIENT_PATH, "dhclient"}, {DHCPCD_PATH, "dhcpcd"} };
guint32 i;
- g_type_init ();
+ nmtst_init_assert_logging (&argc, &argv);
+ nm_logging_setup ("WARN", "DEFAULT", NULL, NULL);
- if (!nm_utils_init (&error))
- FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
-
- /* The tests */
for (i = 0; i < 2; i++) {
const char *client_path = clients[i][0];
const char *client = clients[i][1];
@@ -796,30 +855,83 @@ int main (int argc, char **argv)
if (!client_path || !strlen (client_path))
continue;
- test_generic_options (client);
- test_wins_options (client);
- test_classless_static_routes_1 (client);
- test_classless_static_routes_2 (client);
- test_fedora_dhclient_classless_static_routes (client);
- test_dhclient_invalid_classless_routes_1 (client);
- test_dhcpcd_invalid_classless_routes_1 (client);
- test_dhclient_invalid_classless_routes_2 (client);
- test_dhcpcd_invalid_classless_routes_2 (client);
- test_dhclient_invalid_classless_routes_3 (client);
- test_dhcpcd_invalid_classless_routes_3 (client);
- test_dhclient_gw_in_classless_routes (client);
- test_dhcpcd_gw_in_classless_routes (client);
- test_escaped_domain_searches (client);
- test_invalid_escaped_domain_searches (client);
- test_ip4_missing_prefix (client, "192.168.1.10", 24);
- test_ip4_missing_prefix (client, "172.16.54.50", 16);
- test_ip4_missing_prefix (client, "10.1.2.3", 8);
- test_ip4_prefix_classless (client);
+ path = g_strdup_printf ("/dhcp/%s/generic-options", client);
+ g_test_add_data_func (path, client, test_generic_options);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/wins-options", client);
+ g_test_add_data_func (path, client, test_wins_options);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/classless-static-routes-1", client);
+ g_test_add_data_func (path, client, test_classless_static_routes_1);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/classless-static-routes-2", client);
+ g_test_add_data_func (path, client, test_classless_static_routes_2);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/fedora-dhclient-classless-static-routes", client);
+ g_test_add_data_func (path, client, test_fedora_dhclient_classless_static_routes);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhclient-invalid-classless-routes-1", client);
+ g_test_add_data_func (path, client, test_dhclient_invalid_classless_routes_1);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhcpcd-invalid-classless-routes-1", client);
+ g_test_add_data_func (path, client, test_dhcpcd_invalid_classless_routes_1);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhclient-invalid-classless-routes-2", client);
+ g_test_add_data_func (path, client, test_dhclient_invalid_classless_routes_2);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhcpcd-invalid-classless-routes-2", client);
+ g_test_add_data_func (path, client, test_dhcpcd_invalid_classless_routes_2);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhclient-invalid-classless-routes-3", client);
+ g_test_add_data_func (path, client, test_dhclient_invalid_classless_routes_3);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhcpcd-invalid-classless-routes-3", client);
+ g_test_add_data_func (path, client, test_dhcpcd_invalid_classless_routes_3);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhclient-gw-in-classless-routes", client);
+ g_test_add_data_func (path, client, test_dhclient_gw_in_classless_routes);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/dhcpcd-gw-in-classless-routes", client);
+ g_test_add_data_func (path, client, test_dhcpcd_gw_in_classless_routes);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/escaped-domain-searches", client);
+ g_test_add_data_func (path, client, test_escaped_domain_searches);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/invalid-escaped-domain-searches", client);
+ g_test_add_data_func (path, client, test_invalid_escaped_domain_searches);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/ip4-missing-prefix-24", client);
+ g_test_add_data_func (path, client, test_ip4_missing_prefix_24);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/ip4-missing-prefix-16", client);
+ g_test_add_data_func (path, client, test_ip4_missing_prefix_16);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/ip4-missing-prefix-8", client);
+ g_test_add_data_func (path, client, test_ip4_missing_prefix_8);
+ g_free (path);
+
+ path = g_strdup_printf ("/dhcp/%s/ip4-prefix-classless", client);
+ g_test_add_data_func (path, client, test_ip4_prefix_classless);
+ g_free (path);
}
- base = g_path_get_basename (argv[0]);
- fprintf (stdout, "%s: SUCCESS\n", base);
- g_free (base);
- return 0;
+ return g_test_run ();
}
diff --git a/src/tests/test-general.c b/src/tests/test-general.c
new file mode 100644
index 000000000..11c03f0db
--- /dev/null
+++ b/src/tests/test-general.c
@@ -0,0 +1,614 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <errno.h>
+#include <netinet/ether.h>
+
+#include "NetworkManagerUtils.h"
+#include "nm-utils.h"
+
+
+static void
+test_nm_utils_ascii_str_to_int64_check (const char *str, guint base, gint64 min,
+ gint64 max, gint64 fallback, int exp_errno,
+ gint64 exp_val)
+{
+ gint64 v;
+
+ errno = 1;
+ v = nm_utils_ascii_str_to_int64 (str, base, min, max, fallback);
+ g_assert_cmpint (errno, ==, exp_errno);
+ g_assert_cmpint (v, ==, exp_val);
+}
+
+static void
+test_nm_utils_ascii_str_to_int64_do (const char *str, guint base, gint64 min,
+ gint64 max, gint64 fallback, int exp_errno,
+ gint64 exp_val)
+{
+ const char *sign = "";
+ const char *val;
+ static const char *whitespaces[] = {
+ "",
+ " ",
+ "\r\n\t",
+ " \r\n\t ",
+ " \r\n\t \t\r\n\t",
+ NULL,
+ };
+ static const char *nulls[] = {
+ "",
+ "0",
+ "00",
+ "0000",
+ "0000000000000000",
+ "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ NULL,
+ };
+ const char **ws_pre, **ws_post, **null;
+ int i;
+
+ if (str == NULL || exp_errno != 0) {
+ test_nm_utils_ascii_str_to_int64_check (str, base, min, max, fallback, exp_errno, exp_val);
+ return;
+ }
+
+ if (strncmp (str, "-", 1) == 0)
+ sign = "-";
+
+ val = str + strlen (sign);
+
+ for (ws_pre = whitespaces; *ws_pre; ws_pre++) {
+ for (ws_post = whitespaces; *ws_post; ws_post++) {
+ for (null = nulls; *null; null++) {
+ for (i = 0; ; i++) {
+ char *s;
+ const char *str_base = "";
+
+ if (base == 16) {
+ if (i == 1)
+ str_base = "0x";
+ else if (i > 1)
+ break;
+ } else if (base == 8) {
+ if (i == 1)
+ str_base = "0";
+ else if (i > 1)
+ break;
+ } else if (base == 0) {
+ if (i > 0)
+ break;
+ /* with base==0, a leading zero would be interpreted as octal. Only test without *null */
+ if ((*null)[0])
+ break;
+ } else {
+ if (i > 0)
+ break;
+ }
+
+ s = g_strdup_printf ("%s%s%s%s%s%s", *ws_pre, sign, str_base, *null, val, *ws_post);
+
+ test_nm_utils_ascii_str_to_int64_check (s, base, min, max, fallback, exp_errno, exp_val);
+ g_free (s);
+ }
+ }
+ }
+ }
+}
+
+static void
+test_nm_utils_ascii_str_to_int64 (void)
+{
+ test_nm_utils_ascii_str_to_int64_do (NULL, 10, 0, 10000, -1, EINVAL, -1);
+ test_nm_utils_ascii_str_to_int64_do ("", 10, 0, 10000, -1, EINVAL, -1);
+ test_nm_utils_ascii_str_to_int64_do ("1x", 10, 0, 10000, -1, EINVAL, -1);
+ test_nm_utils_ascii_str_to_int64_do ("4711", 10, 0, 10000, -1, 0, 4711);
+ test_nm_utils_ascii_str_to_int64_do ("10000", 10, 0, 10000, -1, 0, 10000);
+ test_nm_utils_ascii_str_to_int64_do ("10001", 10, 0, 10000, -1, ERANGE, -1);
+ test_nm_utils_ascii_str_to_int64_do ("FF", 16, 0, 10000, -1, 0, 255);
+ test_nm_utils_ascii_str_to_int64_do ("FF", 10, 0, 10000, -2, EINVAL, -2);
+ test_nm_utils_ascii_str_to_int64_do ("9223372036854775807", 10, 0, G_MAXINT64, -2, 0, G_MAXINT64);
+ test_nm_utils_ascii_str_to_int64_do ("7FFFFFFFFFFFFFFF", 16, 0, G_MAXINT64, -2, 0, G_MAXINT64);
+ test_nm_utils_ascii_str_to_int64_do ("9223372036854775808", 10, 0, G_MAXINT64, -2, ERANGE, -2);
+ test_nm_utils_ascii_str_to_int64_do ("-9223372036854775808", 10, G_MININT64, 0, -2, 0, G_MININT64);
+ test_nm_utils_ascii_str_to_int64_do ("-9223372036854775808", 10, G_MININT64+1, 0, -2, ERANGE, -2);
+ test_nm_utils_ascii_str_to_int64_do ("-9223372036854775809", 10, G_MININT64, 0, -2, ERANGE, -2);
+ test_nm_utils_ascii_str_to_int64_do ("1.0", 10, 1, 1, -1, EINVAL, -1);
+ test_nm_utils_ascii_str_to_int64_do ("1x0", 16, -10, 10, -100, EINVAL, -100);
+ test_nm_utils_ascii_str_to_int64_do ("0", 16, -10, 10, -100, 0, 0);
+ test_nm_utils_ascii_str_to_int64_do ("10001111", 2, -1000, 1000, -100000, 0, 0x8F);
+ test_nm_utils_ascii_str_to_int64_do ("-10001111", 2, -1000, 1000, -100000, 0, -0x8F);
+ test_nm_utils_ascii_str_to_int64_do ("1111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7F);
+ test_nm_utils_ascii_str_to_int64_do ("111111111111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFF);
+ test_nm_utils_ascii_str_to_int64_do ("11111111111111111111111111111111111111111111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFFFFFFFFFF);
+ test_nm_utils_ascii_str_to_int64_do ("111111111111111111111111111111111111111111111111111111111111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFFFFFFFFFFFFFF);
+ test_nm_utils_ascii_str_to_int64_do ("100000000000000000000000000000000000000000000000000000000000000", 2, G_MININT64, G_MAXINT64, -1, 0, 0x4000000000000000);
+ test_nm_utils_ascii_str_to_int64_do ("1000000000000000000000000000000000000000000000000000000000000000", 2, G_MININT64, G_MAXINT64, -1, ERANGE, -1);
+ test_nm_utils_ascii_str_to_int64_do ("-100000000000000000000000000000000000000000000000000000000000000", 2, G_MININT64, G_MAXINT64, -1, 0, -0x4000000000000000);
+ test_nm_utils_ascii_str_to_int64_do ("111111111111111111111111111111111111111111111111111111111111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFFFFFFFFFFFFFF);
+ test_nm_utils_ascii_str_to_int64_do ("-100000000000000000000000000000000000000000000000000000000000000", 2, G_MININT64, G_MAXINT64, -1, 0, -0x4000000000000000);
+ test_nm_utils_ascii_str_to_int64_do ("0x70", 10, G_MININT64, G_MAXINT64, -1, EINVAL, -1);
+ test_nm_utils_ascii_str_to_int64_do ("4711", 0, G_MININT64, G_MAXINT64, -1, 0, 4711);
+ test_nm_utils_ascii_str_to_int64_do ("04711", 0, G_MININT64, G_MAXINT64, -1, 0, 04711);
+ test_nm_utils_ascii_str_to_int64_do ("0x4711", 0, G_MININT64, G_MAXINT64, -1, 0, 0x4711);
+ test_nm_utils_ascii_str_to_int64_do ("080", 0, G_MININT64, G_MAXINT64, -1, EINVAL, -1);
+ test_nm_utils_ascii_str_to_int64_do ("070", 0, G_MININT64, G_MAXINT64, -1, 0, 7*8);
+ test_nm_utils_ascii_str_to_int64_do ("0x70", 0, G_MININT64, G_MAXINT64, -1, 0, 0x70);
+}
+
+/* Reference implementation for nm_utils_ip6_address_clear_host_address.
+ * Taken originally from set_address_masked(), src/rdisc/nm-lndp-rdisc.c
+ **/
+static void
+ip6_address_clear_host_address_reference (struct in6_addr *dst, struct in6_addr *src, guint8 plen)
+{
+ guint nbytes = plen / 8;
+ guint nbits = plen % 8;
+
+ g_return_if_fail (plen <= 128);
+ g_assert (src);
+ g_assert (dst);
+
+ if (plen >= 128)
+ *dst = *src;
+ else {
+ memset (dst, 0, sizeof (*dst));
+ memcpy (dst, src, nbytes);
+ dst->s6_addr[nbytes] = (src->s6_addr[nbytes] & (0xFF << (8 - nbits)));
+ }
+}
+
+static void
+_randomize_in6_addr (struct in6_addr *addr, GRand *rand)
+{
+ int i;
+
+ for (i=0; i < 4; i++)
+ ((guint32 *)addr)[i] = g_rand_int (rand);
+}
+
+static void
+test_nm_utils_ip6_address_clear_host_address (void)
+{
+ GRand *rand = g_rand_new ();
+ int plen, i;
+
+ g_rand_set_seed (rand, 0);
+
+ for (plen = 0; plen <= 128; plen++) {
+ for (i =0; i<50; i++) {
+ struct in6_addr addr_src, addr_ref;
+ struct in6_addr addr1, addr2;
+
+ _randomize_in6_addr (&addr_src, rand);
+ _randomize_in6_addr (&addr_ref, rand);
+ _randomize_in6_addr (&addr1, rand);
+ _randomize_in6_addr (&addr2, rand);
+
+ addr1 = addr_src;
+ ip6_address_clear_host_address_reference (&addr_ref, &addr1, plen);
+
+ _randomize_in6_addr (&addr1, rand);
+ _randomize_in6_addr (&addr2, rand);
+ addr1 = addr_src;
+ nm_utils_ip6_address_clear_host_address (&addr2, &addr1, plen);
+ g_assert_cmpint (memcmp (&addr1, &addr_src, sizeof (struct in6_addr)), ==, 0);
+ g_assert_cmpint (memcmp (&addr2, &addr_ref, sizeof (struct in6_addr)), ==, 0);
+
+ /* test for self assignment/inplace update. */
+ _randomize_in6_addr (&addr1, rand);
+ addr1 = addr_src;
+ nm_utils_ip6_address_clear_host_address (&addr1, &addr1, plen);
+ g_assert_cmpint (memcmp (&addr1, &addr_ref, sizeof (struct in6_addr)), ==, 0);
+ }
+ }
+
+ g_rand_free (rand);
+}
+
+/*******************************************/
+
+static NMConnection *
+_match_connection_new (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ char *uuid;
+
+ connection = nm_connection_new ();
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_con);
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_ID, "blahblah",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NULL);
+ g_free (uuid);
+
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_wired);
+
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_ip4);
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL);
+
+ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ nm_connection_add_setting (connection, (NMSetting *) s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NULL);
+
+ return connection;
+}
+
+static void
+test_connection_match_basic (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingIP4Config *s_ip4;
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == copy);
+
+ /* Now change a material property like IPv4 method and ensure matching fails */
+ s_ip4 = nm_connection_get_setting_ip4_config (orig);
+ g_assert (s_ip4);
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
+ NULL);
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == NULL);
+
+ g_slist_free (connections);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+static void
+test_connection_match_ip6_method (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingIP6Config *s_ip6;
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ /* Check that if the generated connection is IPv6 method=link-local, and the
+ * candidate is both method=auto and may-faily=true, that the candidate is
+ * matched.
+ */
+ s_ip6 = nm_connection_get_setting_ip6_config (orig);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL,
+ NULL);
+
+ s_ip6 = nm_connection_get_setting_ip6_config (copy);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == copy);
+
+ g_slist_free (connections);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+static void
+test_connection_match_ip6_method_ignore (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingIP6Config *s_ip6;
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ /* Check that if the generated connection is IPv6 method=link-local, and the
+ * candidate is method=ignore, that the candidate is matched.
+ */
+ s_ip6 = nm_connection_get_setting_ip6_config (orig);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL,
+ NULL);
+
+ s_ip6 = nm_connection_get_setting_ip6_config (copy);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NULL);
+
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == copy);
+
+ g_slist_free (connections);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+static void
+test_connection_match_ip6_method_ignore_auto (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingIP6Config *s_ip6;
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ /* Check that if the generated connection is IPv6 method=auto, and the
+ * candidate is method=ignore, that the candidate is matched.
+ */
+ s_ip6 = nm_connection_get_setting_ip6_config (orig);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NULL);
+
+ s_ip6 = nm_connection_get_setting_ip6_config (copy);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NULL);
+
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == copy);
+
+ g_slist_free (connections);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+
+static void
+test_connection_match_ip4_method (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingIP4Config *s_ip4;
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ /* Check that if the generated connection is IPv4 method=disabled, and the
+ * candidate is both method=auto and may-faily=true, and the device has no
+ * carrier that the candidate is matched.
+ */
+ s_ip4 = nm_connection_get_setting_ip4_config (orig);
+ g_assert (s_ip4);
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
+ NULL);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (copy);
+ g_assert (s_ip4);
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+
+ matched = nm_utils_match_connection (connections, orig, FALSE, NULL, NULL);
+ g_assert (matched == copy);
+
+ /* Ensure when carrier=true matching fails */
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == NULL);
+
+ g_slist_free (connections);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+static void
+test_connection_match_interface_name (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingConnection *s_con;
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ /* Check that if the generated connection has an interface name and the
+ * candidate's interface name is NULL, that the candidate is matched.
+ */
+ s_con = nm_connection_get_setting_connection (orig);
+ g_assert (s_con);
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "em1",
+ NULL);
+
+ s_con = nm_connection_get_setting_connection (copy);
+ g_assert (s_con);
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_INTERFACE_NAME, NULL,
+ NULL);
+
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == copy);
+
+ g_slist_free (connections);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+static void
+test_connection_match_wired (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingWired *s_wired;
+ GPtrArray *subchan_arr = g_ptr_array_sized_new (3);
+ GByteArray *mac;
+
+ g_ptr_array_add (subchan_arr, "0.0.8000");
+ g_ptr_array_add (subchan_arr, "0.0.8001");
+ g_ptr_array_add (subchan_arr, "0.0.8002");
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ mac = nm_utils_hwaddr_atoba ("52:54:00:ab:db:23", ARPHRD_ETHER);
+ s_wired = nm_connection_get_setting_wired (orig);
+ g_assert (s_wired);
+ g_object_set (G_OBJECT (s_wired),
+ NM_SETTING_WIRED_PORT, "tp", /* port is not compared */
+ NM_SETTING_WIRED_MAC_ADDRESS, mac, /* we allow MAC address just in one connection */
+ NM_SETTING_WIRED_S390_SUBCHANNELS, subchan_arr,
+ NM_SETTING_WIRED_S390_NETTYPE, "qeth",
+ NULL);
+ g_byte_array_free (mac, TRUE);
+
+ s_wired = nm_connection_get_setting_wired (copy);
+ g_assert (s_wired);
+ g_object_set (G_OBJECT (s_wired),
+ NM_SETTING_WIRED_S390_SUBCHANNELS, subchan_arr,
+ NM_SETTING_WIRED_S390_NETTYPE, "qeth",
+ NULL);
+
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched == copy);
+
+ g_slist_free (connections);
+ g_ptr_array_free (subchan_arr, TRUE);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+static void
+test_connection_no_match_ip4_addr (void)
+{
+ NMConnection *orig, *copy, *matched;
+ GSList *connections = NULL;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ NMIP4Address *nm_addr;
+ guint32 addr, gw;
+
+ orig = _match_connection_new ();
+ copy = nm_connection_duplicate (orig);
+ connections = g_slist_append (connections, copy);
+
+ /* Check that if we have two differences, ipv6.method (exception we allow) and
+ * ipv4.addresses (which is fatal), we don't match the connections.
+ */
+ s_ip6 = nm_connection_get_setting_ip6_config (orig);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL,
+ NULL);
+
+ s_ip6 = nm_connection_get_setting_ip6_config (copy);
+ g_assert (s_ip6);
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NULL);
+
+
+ s_ip4 = nm_connection_get_setting_ip4_config (orig);
+ g_assert (s_ip4);
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NULL);
+ nm_addr = nm_ip4_address_new ();
+ inet_pton (AF_INET, "1.1.1.4", &addr);
+ inet_pton (AF_INET, "1.1.1.254", &gw);
+ nm_ip4_address_set_address (nm_addr, addr);
+ nm_ip4_address_set_prefix (nm_addr, 24);
+ nm_ip4_address_set_gateway (nm_addr, gw);
+ nm_setting_ip4_config_add_address (s_ip4, nm_addr);
+ nm_ip4_address_unref (nm_addr);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (copy);
+ g_assert (s_ip4);
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NULL);
+ nm_addr = nm_ip4_address_new ();
+ inet_pton (AF_INET, "2.2.2.4", &addr);
+ inet_pton (AF_INET, "2.2.2.254", &gw);
+ nm_ip4_address_set_address (nm_addr, addr);
+ nm_ip4_address_set_prefix (nm_addr, 24);
+ nm_ip4_address_set_gateway (nm_addr, gw);
+ nm_setting_ip4_config_add_address (s_ip4, nm_addr);
+ nm_ip4_address_unref (nm_addr);
+
+ matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
+ g_assert (matched != copy);
+
+ g_slist_free (connections);
+ g_object_unref (orig);
+ g_object_unref (copy);
+}
+
+/*******************************************/
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_add_func ("/general/nm_utils_ascii_str_to_int64", test_nm_utils_ascii_str_to_int64);
+ g_test_add_func ("/general/nm_utils_ip6_address_clear_host_address", test_nm_utils_ip6_address_clear_host_address);
+
+ g_test_add_func ("/general/connection-match/basic", test_connection_match_basic);
+ g_test_add_func ("/general/connection-match/ip6-method", test_connection_match_ip6_method);
+ g_test_add_func ("/general/connection-match/ip6-method-ignore", test_connection_match_ip6_method_ignore);
+ g_test_add_func ("/general/connection-match/ip6-method-ignore-auto", test_connection_match_ip6_method_ignore_auto);
+ g_test_add_func ("/general/connection-match/ip4-method", test_connection_match_ip4_method);
+ g_test_add_func ("/general/connection-match/con-interface-name", test_connection_match_interface_name);
+ g_test_add_func ("/general/connection-match/wired", test_connection_match_wired);
+ g_test_add_func ("/general/connection-match/no-match-ip4-addr", test_connection_no_match_ip4_addr);
+
+ return g_test_run ();
+}
+
diff --git a/src/tests/test-ip4-config.c b/src/tests/test-ip4-config.c
new file mode 100644
index 000000000..3eee5f136
--- /dev/null
+++ b/src/tests/test-ip4-config.c
@@ -0,0 +1,355 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 - 2014 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <arpa/inet.h>
+
+#include "nm-ip4-config.h"
+
+static void
+addr_init (NMPlatformIP4Address *a, const char *addr, const char *peer, guint plen)
+{
+ memset (a, 0, sizeof (*a));
+ g_assert (inet_pton (AF_INET, addr, (void *) &a->address) == 1);
+ if (peer)
+ g_assert (inet_pton (AF_INET, peer, (void *) &a->peer_address) == 1);
+ a->plen = plen;
+}
+
+static void
+route_new (NMPlatformIP4Route *route, const char *network, guint plen, const char *gw)
+{
+ guint n;
+
+ g_assert (route);
+ memset (route, 0, sizeof (*route));
+ g_assert (inet_pton (AF_INET, network, (void *) &n) == 1);
+ route->network = n;
+ route->plen = plen;
+ if (gw) {
+ n = 0;
+ g_assert (inet_pton (AF_INET, gw, (void *) &n) == 1);
+ route->gateway = n;
+ }
+}
+
+static guint32
+addr_to_num (const char *addr)
+{
+ guint n;
+
+ g_assert (inet_pton (AF_INET, addr, (void *) &n) == 1);
+ return n;
+}
+
+static NMIP4Config *
+build_test_config (void)
+{
+ NMIP4Config *config;
+ NMPlatformIP4Address addr;
+ NMPlatformIP4Route route;
+
+ /* Build up the config to subtract */
+ config = nm_ip4_config_new ();
+
+ addr_init (&addr, "192.168.1.10", "1.2.3.4", 24);
+ nm_ip4_config_add_address (config, &addr);
+
+ route_new (&route, "10.0.0.0", 8, "192.168.1.1");
+ nm_ip4_config_add_route (config, &route);
+
+ route_new (&route, "172.16.0.0", 16, "192.168.1.1");
+ nm_ip4_config_add_route (config, &route);
+
+ nm_ip4_config_set_gateway (config, addr_to_num ("192.168.1.1"));
+
+ nm_ip4_config_add_nameserver (config, addr_to_num ("4.2.2.1"));
+ nm_ip4_config_add_nameserver (config, addr_to_num ("4.2.2.2"));
+ nm_ip4_config_add_domain (config, "foobar.com");
+ nm_ip4_config_add_domain (config, "baz.com");
+ nm_ip4_config_add_search (config, "blahblah.com");
+ nm_ip4_config_add_search (config, "beatbox.com");
+
+ nm_ip4_config_add_nis_server (config, addr_to_num ("1.2.3.9"));
+ nm_ip4_config_add_nis_server (config, addr_to_num ("1.2.3.10"));
+
+ nm_ip4_config_add_wins (config, addr_to_num ("4.2.3.9"));
+ nm_ip4_config_add_wins (config, addr_to_num ("4.2.3.10"));
+
+ return config;
+}
+
+static void
+test_subtract (void)
+{
+ NMIP4Config *src, *dst;
+ NMPlatformIP4Address addr;
+ NMPlatformIP4Route route;
+ const NMPlatformIP4Address *test_addr;
+ const NMPlatformIP4Route *test_route;
+ const char *expected_addr = "192.168.1.12";
+ guint32 expected_addr_plen = 24;
+ const char *expected_route_dest = "8.7.6.5";
+ guint32 expected_route_plen = 8;
+ const char *expected_route_next_hop = "192.168.1.1";
+ guint32 expected_ns1 = addr_to_num ("8.8.8.8");
+ guint32 expected_ns2 = addr_to_num ("8.8.8.9");
+ const char *expected_domain = "wonderfalls.com";
+ const char *expected_search = "somewhere.com";
+ guint32 expected_nis = addr_to_num ("1.2.3.13");
+ guint32 expected_wins = addr_to_num ("2.3.4.5");
+ guint32 expected_mss = 1400;
+ guint32 expected_mtu = 1492;
+
+ src = build_test_config ();
+
+ /* add a couple more things to the test config */
+ dst = build_test_config ();
+ addr_init (&addr, expected_addr, NULL, expected_addr_plen);
+ nm_ip4_config_add_address (dst, &addr);
+
+ route_new (&route, expected_route_dest, expected_route_plen, expected_route_next_hop);
+ nm_ip4_config_add_route (dst, &route);
+
+ nm_ip4_config_add_nameserver (dst, expected_ns1);
+ nm_ip4_config_add_nameserver (dst, expected_ns2);
+ nm_ip4_config_add_domain (dst, expected_domain);
+ nm_ip4_config_add_search (dst, expected_search);
+
+ nm_ip4_config_add_nis_server (dst, expected_nis);
+ nm_ip4_config_add_wins (dst, expected_wins);
+
+ nm_ip4_config_set_mss (dst, expected_mss);
+ nm_ip4_config_set_mtu (dst, expected_mtu);
+
+ nm_ip4_config_subtract (dst, src);
+
+ /* ensure what's left is what we expect */
+ g_assert_cmpuint (nm_ip4_config_get_num_addresses (dst), ==, 1);
+ test_addr = nm_ip4_config_get_address (dst, 0);
+ g_assert (test_addr != NULL);
+ g_assert_cmpuint (test_addr->address, ==, addr_to_num (expected_addr));
+ g_assert_cmpuint (test_addr->peer_address, ==, 0);
+ g_assert_cmpuint (test_addr->plen, ==, expected_addr_plen);
+
+ g_assert_cmpuint (nm_ip4_config_get_gateway (dst), ==, 0);
+
+ g_assert_cmpuint (nm_ip4_config_get_num_routes (dst), ==, 1);
+ test_route = nm_ip4_config_get_route (dst, 0);
+ g_assert (test_route != NULL);
+ g_assert_cmpuint (test_route->network, ==, addr_to_num (expected_route_dest));
+ g_assert_cmpuint (test_route->plen, ==, expected_route_plen);
+ g_assert_cmpuint (test_route->gateway, ==, addr_to_num (expected_route_next_hop));
+
+ g_assert_cmpuint (nm_ip4_config_get_num_nameservers (dst), ==, 2);
+ g_assert_cmpuint (nm_ip4_config_get_nameserver (dst, 0), ==, expected_ns1);
+ g_assert_cmpuint (nm_ip4_config_get_nameserver (dst, 1), ==, expected_ns2);
+
+ g_assert_cmpuint (nm_ip4_config_get_num_domains (dst), ==, 1);
+ g_assert_cmpstr (nm_ip4_config_get_domain (dst, 0), ==, expected_domain);
+ g_assert_cmpuint (nm_ip4_config_get_num_searches (dst), ==, 1);
+ g_assert_cmpstr (nm_ip4_config_get_search (dst, 0), ==, expected_search);
+
+ g_assert_cmpuint (nm_ip4_config_get_num_nis_servers (dst), ==, 1);
+ g_assert_cmpuint (nm_ip4_config_get_nis_server (dst, 0), ==, expected_nis);
+
+ g_assert_cmpuint (nm_ip4_config_get_num_wins (dst), ==, 1);
+ g_assert_cmpuint (nm_ip4_config_get_wins (dst, 0), ==, expected_wins);
+
+ g_assert_cmpuint (nm_ip4_config_get_mss (dst), ==, expected_mss);
+ g_assert_cmpuint (nm_ip4_config_get_mtu (dst), ==, expected_mtu);
+
+ g_object_unref (src);
+ g_object_unref (dst);
+}
+
+static void
+test_compare_with_source (void)
+{
+ NMIP4Config *a, *b;
+ NMPlatformIP4Address addr;
+ NMPlatformIP4Route route;
+
+ a = nm_ip4_config_new ();
+ b = nm_ip4_config_new ();
+
+ /* Address */
+ addr_init (&addr, "1.2.3.4", NULL, 24);
+ addr.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip4_config_add_address (a, &addr);
+
+ addr.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip4_config_add_address (b, &addr);
+
+ /* Route */
+ route_new (&route, "10.0.0.0", 8, "192.168.1.1");
+ route.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip4_config_add_route (a, &route);
+
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip4_config_add_route (b, &route);
+
+ /* Assert that the configs are basically the same, eg that the source is ignored */
+ g_assert (nm_ip4_config_equal (a, b));
+
+ g_object_unref (a);
+ g_object_unref (b);
+}
+
+static void
+test_add_address_with_source (void)
+{
+ NMIP4Config *a;
+ NMPlatformIP4Address addr;
+ const NMPlatformIP4Address *test_addr;
+
+ a = nm_ip4_config_new ();
+
+ /* Test that a higher priority source is not overwritten */
+ addr_init (&addr, "1.2.3.4", NULL, 24);
+ addr.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip4_config_add_address (a, &addr);
+
+ test_addr = nm_ip4_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ addr.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip4_config_add_address (a, &addr);
+
+ test_addr = nm_ip4_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ /* Test that a lower priority address source is overwritten */
+ nm_ip4_config_del_address (a, 0);
+ addr.source = NM_PLATFORM_SOURCE_KERNEL;
+ nm_ip4_config_add_address (a, &addr);
+
+ test_addr = nm_ip4_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_KERNEL);
+
+ addr.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip4_config_add_address (a, &addr);
+
+ test_addr = nm_ip4_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ g_object_unref (a);
+}
+
+static void
+test_add_route_with_source (void)
+{
+ NMIP4Config *a;
+ NMPlatformIP4Route route;
+ const NMPlatformIP4Route *test_route;
+
+ a = nm_ip4_config_new ();
+
+ /* Test that a higher priority source is not overwritten */
+ route_new (&route, "1.2.3.4", 24, "1.2.3.1");
+ route.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip4_config_add_route (a, &route);
+
+ test_route = nm_ip4_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip4_config_add_route (a, &route);
+
+ test_route = nm_ip4_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ /* Test that a lower priority address source is overwritten */
+ nm_ip4_config_del_route (a, 0);
+ route.source = NM_PLATFORM_SOURCE_KERNEL;
+ nm_ip4_config_add_route (a, &route);
+
+ test_route = nm_ip4_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_KERNEL);
+
+ route.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip4_config_add_route (a, &route);
+
+ test_route = nm_ip4_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ g_object_unref (a);
+}
+
+static void
+test_merge_subtract_mss_mtu (void)
+{
+ NMIP4Config *cfg1, *cfg2, *cfg3;
+ guint32 expected_mss2 = 1400;
+ guint32 expected_mtu2 = 1492;
+ guint32 expected_mss3 = 555;
+ guint32 expected_mtu3 = 666;
+
+ cfg1 = build_test_config ();
+ cfg2 = build_test_config ();
+ cfg3 = build_test_config ();
+
+ /* add MSS, MTU to configs to test them */
+ nm_ip4_config_set_mss (cfg2, expected_mss2);
+ nm_ip4_config_set_mtu (cfg2, expected_mtu2);
+ nm_ip4_config_set_mss (cfg3, expected_mss3);
+ nm_ip4_config_set_mtu (cfg3, expected_mtu3);
+
+ nm_ip4_config_merge (cfg1, cfg2);
+ /* ensure MSS and MTU are in cfg1 */
+ g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, expected_mss2);
+ g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu2);
+
+ nm_ip4_config_merge (cfg1, cfg3);
+ /* ensure again the same MSS and MTU are in cfg1 */
+ g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, expected_mss2);
+ g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu2);
+
+ nm_ip4_config_subtract (cfg1, cfg2);
+ /* ensure MSS and MTU are zero in cfg1 */
+ g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, 0);
+ g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, 0);
+
+ g_object_unref (cfg1);
+ g_object_unref (cfg2);
+ g_object_unref (cfg3);
+}
+
+/*******************************************/
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_add_func ("/ip4-config/subtract", test_subtract);
+ g_test_add_func ("/ip4-config/compare-with-source", test_compare_with_source);
+ g_test_add_func ("/ip4-config/add-address-with-source", test_add_address_with_source);
+ g_test_add_func ("/ip4-config/add-route-with-source", test_add_route_with_source);
+ g_test_add_func ("/ip4-config/merge-subtract-mss-mtu", test_merge_subtract_mss_mtu);
+
+ return g_test_run ();
+}
+
diff --git a/src/tests/test-ip6-config.c b/src/tests/test-ip6-config.c
new file mode 100644
index 000000000..75fe28eef
--- /dev/null
+++ b/src/tests/test-ip6-config.c
@@ -0,0 +1,338 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <arpa/inet.h>
+
+#include "nm-ip6-config.h"
+
+#include "nm-logging.h"
+#include "nm-test-utils.h"
+
+static NMIP6Config *
+build_test_config (void)
+{
+ NMIP6Config *config;
+
+ /* Build up the config to subtract */
+ config = nm_ip6_config_new ();
+
+ nm_ip6_config_add_address (config, nmtst_platform_ip6_address ("abcd:1234:4321::cdde", "1:2:3:4::5", 64));
+ nm_ip6_config_add_route (config, nmtst_platform_ip6_route ("abcd:1234:4321::", 24, "abcd:1234:4321:cdde::2"));
+ nm_ip6_config_add_route (config, nmtst_platform_ip6_route ("2001:abba::", 16, "2001:abba::2234"));
+
+ nm_ip6_config_set_gateway (config, nmtst_inet6_from_string ("3001:abba::3234"));
+
+ nm_ip6_config_add_nameserver (config, nmtst_inet6_from_string ("1:2:3:4::1"));
+ nm_ip6_config_add_nameserver (config, nmtst_inet6_from_string ("1:2:3:4::2"));
+ nm_ip6_config_add_domain (config, "foobar.com");
+ nm_ip6_config_add_domain (config, "baz.com");
+ nm_ip6_config_add_search (config, "blahblah.com");
+ nm_ip6_config_add_search (config, "beatbox.com");
+
+ return config;
+}
+
+static void
+test_subtract (void)
+{
+ NMIP6Config *src, *dst;
+ const NMPlatformIP6Address *test_addr;
+ const NMPlatformIP6Route *test_route;
+ const char *expected_addr = "1122:3344:5566::7788";
+ guint32 expected_addr_plen = 96;
+ const char *expected_route_dest = "9991:8882:7773::";
+ guint32 expected_route_plen = 24;
+ const char *expected_route_next_hop = "1119:2228:3337:4446::5555";
+ struct in6_addr expected_ns1;
+ struct in6_addr expected_ns2;
+ const char *expected_domain = "wonderfalls.com";
+ const char *expected_search = "somewhere.com";
+ struct in6_addr tmp;
+
+ src = build_test_config ();
+
+ /* add a couple more things to the test config */
+ dst = build_test_config ();
+ nm_ip6_config_add_address (dst, nmtst_platform_ip6_address (expected_addr, NULL, expected_addr_plen));
+ nm_ip6_config_add_route (dst, nmtst_platform_ip6_route (expected_route_dest, expected_route_plen, expected_route_next_hop));
+
+ expected_ns1 = *nmtst_inet6_from_string ("2222:3333:4444::5555");
+ nm_ip6_config_add_nameserver (dst, &expected_ns1);
+ expected_ns2 = *nmtst_inet6_from_string ("2222:3333:4444::5556");
+ nm_ip6_config_add_nameserver (dst, &expected_ns2);
+
+ nm_ip6_config_add_domain (dst, expected_domain);
+ nm_ip6_config_add_search (dst, expected_search);
+
+ nm_ip6_config_subtract (dst, src);
+
+ /* ensure what's left is what we expect */
+ g_assert_cmpuint (nm_ip6_config_get_num_addresses (dst), ==, 1);
+ test_addr = nm_ip6_config_get_address (dst, 0);
+ g_assert (test_addr != NULL);
+ tmp = *nmtst_inet6_from_string (expected_addr);
+ g_assert (memcmp (&test_addr->address, &tmp, sizeof (tmp)) == 0);
+ g_assert (memcmp (&test_addr->peer_address, &in6addr_any, sizeof (tmp)) == 0);
+ g_assert_cmpuint (test_addr->plen, ==, expected_addr_plen);
+
+ g_assert (nm_ip6_config_get_gateway (dst) == NULL);
+
+ g_assert_cmpuint (nm_ip6_config_get_num_routes (dst), ==, 1);
+ test_route = nm_ip6_config_get_route (dst, 0);
+ g_assert (test_route != NULL);
+
+ tmp = *nmtst_inet6_from_string (expected_route_dest);
+ g_assert (memcmp (&test_route->network, &tmp, sizeof (tmp)) == 0);
+ g_assert_cmpuint (test_route->plen, ==, expected_route_plen);
+ tmp = *nmtst_inet6_from_string (expected_route_next_hop);
+ g_assert (memcmp (&test_route->gateway, &tmp, sizeof (tmp)) == 0);
+
+ g_assert_cmpuint (nm_ip6_config_get_num_nameservers (dst), ==, 2);
+ g_assert (memcmp (nm_ip6_config_get_nameserver (dst, 0), &expected_ns1, sizeof (expected_ns1)) == 0);
+ g_assert (memcmp (nm_ip6_config_get_nameserver (dst, 1), &expected_ns2, sizeof (expected_ns2)) == 0);
+
+ g_assert_cmpuint (nm_ip6_config_get_num_domains (dst), ==, 1);
+ g_assert_cmpstr (nm_ip6_config_get_domain (dst, 0), ==, expected_domain);
+ g_assert_cmpuint (nm_ip6_config_get_num_searches (dst), ==, 1);
+ g_assert_cmpstr (nm_ip6_config_get_search (dst, 0), ==, expected_search);
+
+ g_object_unref (src);
+ g_object_unref (dst);
+}
+
+static void
+test_compare_with_source (void)
+{
+ NMIP6Config *a, *b;
+ NMPlatformIP6Address addr;
+ NMPlatformIP6Route route;
+
+ a = nm_ip6_config_new ();
+ b = nm_ip6_config_new ();
+
+ /* Address */
+ addr = *nmtst_platform_ip6_address ("1122:3344:5566::7788", NULL, 64);
+ addr.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip6_config_add_address (a, &addr);
+
+ addr.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip6_config_add_address (b, &addr);
+
+ /* Route */
+ route = *nmtst_platform_ip6_route ("abcd:1234:4321::", 24, "abcd:1234:4321:cdde::2");
+ route.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip6_config_add_route (a, &route);
+
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip6_config_add_route (b, &route);
+
+ /* Assert that the configs are basically the same, eg that the source is ignored */
+ g_assert (nm_ip6_config_equal (a, b));
+
+ g_object_unref (a);
+ g_object_unref (b);
+}
+
+static void
+test_add_address_with_source (void)
+{
+ NMIP6Config *a;
+ NMPlatformIP6Address addr;
+ const NMPlatformIP6Address *test_addr;
+
+ a = nm_ip6_config_new ();
+
+ /* Test that a higher priority source is not overwritten */
+ addr = *nmtst_platform_ip6_address ("1122:3344:5566::7788", NULL, 64);
+ addr.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip6_config_add_address (a, &addr);
+
+ test_addr = nm_ip6_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ addr.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip6_config_add_address (a, &addr);
+
+ test_addr = nm_ip6_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ /* Test that a lower priority address source is overwritten */
+ nm_ip6_config_del_address (a, 0);
+ addr.source = NM_PLATFORM_SOURCE_KERNEL;
+ nm_ip6_config_add_address (a, &addr);
+
+ test_addr = nm_ip6_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_KERNEL);
+
+ addr.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip6_config_add_address (a, &addr);
+
+ test_addr = nm_ip6_config_get_address (a, 0);
+ g_assert_cmpint (test_addr->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ g_object_unref (a);
+}
+
+static void
+test_add_route_with_source (void)
+{
+ NMIP6Config *a;
+ NMPlatformIP6Route route;
+ const NMPlatformIP6Route *test_route;
+
+ a = nm_ip6_config_new ();
+
+ /* Test that a higher priority source is not overwritten */
+ route = *nmtst_platform_ip6_route ("abcd:1234:4321::", 24, "abcd:1234:4321:cdde::2");
+ route.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip6_config_add_route (a, &route);
+
+ test_route = nm_ip6_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip6_config_add_route (a, &route);
+
+ test_route = nm_ip6_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ /* Test that a lower priority address source is overwritten */
+ nm_ip6_config_del_route (a, 0);
+ route.source = NM_PLATFORM_SOURCE_KERNEL;
+ nm_ip6_config_add_route (a, &route);
+
+ test_route = nm_ip6_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_KERNEL);
+
+ route.source = NM_PLATFORM_SOURCE_USER;
+ nm_ip6_config_add_route (a, &route);
+
+ test_route = nm_ip6_config_get_route (a, 0);
+ g_assert_cmpint (test_route->source, ==, NM_PLATFORM_SOURCE_USER);
+
+ g_object_unref (a);
+}
+
+static void
+test_nm_ip6_config_addresses_sort_check (NMIP6Config *config, NMSettingIP6ConfigPrivacy use_tempaddr, int repeat)
+{
+ int addr_count = nm_ip6_config_get_num_addresses (config);
+ int i, irepeat;
+ NMIP6Config *copy = nmtst_ip6_config_clone (config);
+ NMIP6Config *copy2 = nmtst_ip6_config_clone (config);
+ int *idx = g_new (int, addr_count);
+
+ /* initialize the array of indeces, and keep shuffling them for every @repeat iteration. */
+ for (i = 0; i < addr_count; i++)
+ idx[i] = i;
+
+ for (irepeat = 0; irepeat < repeat; irepeat++) {
+ /* randomly shuffle the addresses. */
+ nm_ip6_config_reset_addresses (copy);
+ for (i = 0; i < addr_count; i++) {
+ int j = g_rand_int_range (nmtst_get_rand (), i, addr_count);
+
+ NMTST_SWAP (idx[i], idx[j]);
+ nm_ip6_config_add_address (copy, nm_ip6_config_get_address (config, idx[i]));
+ }
+
+ /* reorder them again */
+ nm_ip6_config_addresses_sort (copy, use_tempaddr);
+
+ /* check equality using nm_ip6_config_equal() */
+ if (!nm_ip6_config_equal (copy, config)) {
+ g_message ("%s", "SORTING yields unexpected output:");
+ for (i = 0; i < addr_count; i++) {
+ g_message (" >> [%d] = %s", i, nm_platform_ip6_address_to_string (nm_ip6_config_get_address (config, i)));
+ g_message (" << [%d] = %s", i, nm_platform_ip6_address_to_string (nm_ip6_config_get_address (copy, i)));
+ }
+ g_assert_not_reached ();
+ }
+
+ /* also check equality using nm_ip6_config_replace() */
+ g_assert (nm_ip6_config_replace (copy2, copy, NULL) == FALSE);
+ }
+
+ g_free (idx);
+ g_object_unref (copy);
+ g_object_unref (copy2);
+}
+
+static void
+test_nm_ip6_config_addresses_sort (void)
+{
+ NMIP6Config *config = build_test_config ();
+
+#define ADDR_ADD(...) nm_ip6_config_add_address (config, nmtst_platform_ip6_address_full (__VA_ARGS__))
+
+ nm_ip6_config_reset_addresses (config);
+ ADDR_ADD("2607:f0d0:1002:51::4", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::5", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::6", NULL, 64, 0, NM_PLATFORM_SOURCE_RDISC, 0, 0, 0, IFA_F_MANAGETEMPADDR);
+ ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("fec0::1", NULL, 128, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625c", NULL, 128, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625d", NULL, 128, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("::1", NULL, 128, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::2", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, IFA_F_TENTATIVE);
+ test_nm_ip6_config_addresses_sort_check (config, NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN, 8);
+ test_nm_ip6_config_addresses_sort_check (config, NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED, 8);
+ test_nm_ip6_config_addresses_sort_check (config, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR, 8);
+
+ nm_ip6_config_reset_addresses (config);
+ ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::4", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::5", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::6", NULL, 64, 0, NM_PLATFORM_SOURCE_RDISC, 0, 0, 0, IFA_F_MANAGETEMPADDR);
+ ADDR_ADD("fec0::1", NULL, 128, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625c", NULL, 128, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625d", NULL, 128, 0, NM_PLATFORM_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("::1", NULL, 128, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::2", NULL, 64, 0, NM_PLATFORM_SOURCE_USER, 0, 0, 0, IFA_F_TENTATIVE);
+ test_nm_ip6_config_addresses_sort_check (config, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR, 8);
+
+#undef ADDR_ADD
+ g_object_unref (config);
+}
+
+/*******************************************/
+
+NMTST_DEFINE();
+
+int
+main (int argc, char **argv)
+{
+ nmtst_init_with_logging (&argc, &argv, NULL, "ALL");
+
+ g_test_add_func ("/ip6-config/subtract", test_subtract);
+ g_test_add_func ("/ip6-config/compare-with-source", test_compare_with_source);
+ g_test_add_func ("/ip6-config/add-address-with-source", test_add_address_with_source);
+ g_test_add_func ("/ip6-config/add-route-with-source", test_add_route_with_source);
+ g_test_add_func ("/ip6-config/test_nm_ip6_config_addresses_sort", test_nm_ip6_config_addresses_sort);
+
+ return g_test_run ();
+}
+
diff --git a/src/tests/test-policy-hosts.c b/src/tests/test-policy-hosts.c
deleted file mode 100644
index 681758900..000000000
--- a/src/tests/test-policy-hosts.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2010 Red Hat, Inc.
- *
- */
-
-#include <glib.h>
-#include <string.h>
-
-#include "nm-policy-hosts.h"
-
-#define DEBUG 0
-
-static void
-test_generic (const char *before, const char *after)
-{
- GString *newc;
-
- /* Get the new /etc/hosts contents */
- newc = nm_policy_get_etc_hosts (before, strlen (before));
-
- if (after == NULL) {
- /* No change to /etc/hosts required */
-#if DEBUG
- if (newc != NULL) {
- g_message ("\n- NEW ---------------------------------\n"
- "%s"
- "+ EXPECTED NONE +++++++++++++++++++++++++\n",
- newc->str);
- }
-#endif
- g_assert (newc == NULL);
- } else {
- g_assert (newc != NULL);
-
-#if DEBUG
- g_message ("\n- NEW ---------------------------------\n"
- "%s"
- "+ EXPECTED ++++++++++++++++++++++++++++++\n"
- "%s"
- "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
- newc->str, after);
-#endif
- g_assert (strcmp (newc->str, after) == 0);
- g_string_free (newc, TRUE);
- }
-}
-
-/*******************************************/
-
-static const char *generic_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static void
-test_hosts_generic (void)
-{
- test_generic (generic_before, NULL);
-}
-
-/*******************************************/
-
-static const char *generic_no_boilerplate_before = \
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static void
-test_hosts_generic_no_boilerplate (void)
-{
- test_generic (generic_no_boilerplate_before, NULL);
-}
-
-/*******************************************/
-
-static const char *leftover_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "192.168.1.2 comet # Added by NetworkManager\n"
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "192.168.1.3 comet\n"
- "3001:abba::3234 comet\n"
- "\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static const char *leftover_after = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "192.168.1.3 comet\n"
- "3001:abba::3234 comet\n"
- "\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static void
-test_hosts_leftover (void)
-{
- test_generic (leftover_before, leftover_after);
-}
-
-/*******************************************/
-
-static const char *leftover_double_newline_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "192.168.1.2 comet # Added by NetworkManager\n"
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "192.168.1.3 comet\n"
- "3001:abba::3234 comet\n"
- "\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "\n";
-
-static const char *leftover_double_newline_after = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "192.168.1.3 comet\n"
- "3001:abba::3234 comet\n"
- "\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "\n";
-
-static void
-test_hosts_leftover_double_newline (void)
-{
- test_generic (leftover_double_newline_before, leftover_double_newline_after);
-}
-
-/*******************************************/
-
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
-
-#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
-
-int main (int argc, char **argv)
-{
- GTestSuite *suite;
-
- g_test_init (&argc, &argv, NULL);
-
- suite = g_test_get_root ();
-
- g_test_suite_add (suite, TESTCASE (test_hosts_generic, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_generic_no_boilerplate, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_leftover, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_leftover_double_newline, NULL));
-
- return g_test_run ();
-}
-
diff --git a/src/tests/test-resolvconf-capture.c b/src/tests/test-resolvconf-capture.c
new file mode 100644
index 000000000..cde4bbe5b
--- /dev/null
+++ b/src/tests/test-resolvconf-capture.c
@@ -0,0 +1,226 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2013 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+
+#include "NetworkManagerUtils.h"
+#include "nm-platform.h"
+
+static void
+test_capture_empty (void)
+{
+ GArray *ns4 = g_array_new (FALSE, FALSE, sizeof (guint32));
+ GArray *ns6 = g_array_new (FALSE, FALSE, sizeof (struct in6_addr));
+
+ g_assert (nm_ip4_config_capture_resolv_conf (ns4, "") == FALSE);
+ g_assert_cmpint (ns4->len, ==, 0);
+
+ g_assert (nm_ip6_config_capture_resolv_conf (ns6, "") == FALSE);
+ g_assert_cmpint (ns6->len, ==, 0);
+
+ g_array_free (ns4, TRUE);
+ g_array_free (ns6, TRUE);
+}
+
+static void
+assert_dns4_entry (const GArray *a, guint i, const char *s)
+{
+ guint32 n, m;
+
+ g_assert (inet_aton (s, (void *) &n) != 0);
+ m = g_array_index (a, guint32, i);
+ g_assert_cmpint (m, ==, n);
+}
+
+static void
+assert_dns6_entry (const GArray *a, guint i, const char *s)
+{
+ struct in6_addr n = IN6ADDR_ANY_INIT;
+ struct in6_addr *m;
+
+ g_assert (inet_pton (AF_INET6, s, (void *) &n) == 1);
+ m = &g_array_index (a, struct in6_addr, i);
+ g_assert (IN6_ARE_ADDR_EQUAL (&n, m));
+}
+
+static void
+test_capture_basic4 (void)
+{
+ GArray *ns4 = g_array_new (FALSE, FALSE, sizeof (guint32));
+ const char *rc =
+"# neato resolv.conf\r\n"
+"domain foobar.com\r\n"
+"search foobar.com\r\n"
+"nameserver 4.2.2.1\r\n"
+"nameserver 4.2.2.2\r\n";
+
+ g_assert (nm_ip4_config_capture_resolv_conf (ns4, rc));
+ g_assert_cmpint (ns4->len, ==, 2);
+ assert_dns4_entry (ns4, 0, "4.2.2.1");
+ assert_dns4_entry (ns4, 1, "4.2.2.2");
+
+ g_array_free (ns4, TRUE);
+}
+
+static void
+test_capture_dup4 (void)
+{
+ GArray *ns4 = g_array_new (FALSE, FALSE, sizeof (guint32));
+ const char *rc =
+"# neato resolv.conf\r\n"
+"domain foobar.com\r\n"
+"search foobar.com\r\n"
+"nameserver 4.2.2.1\r\n"
+"nameserver 4.2.2.1\r\n"
+"nameserver 4.2.2.2\r\n";
+
+ /* Check that duplicates are ignored */
+ g_assert (nm_ip4_config_capture_resolv_conf (ns4, rc));
+ g_assert_cmpint (ns4->len, ==, 2);
+ assert_dns4_entry (ns4, 0, "4.2.2.1");
+ assert_dns4_entry (ns4, 1, "4.2.2.2");
+
+ g_array_free (ns4, TRUE);
+}
+
+static void
+test_capture_basic6 (void)
+{
+ GArray *ns6 = g_array_new (FALSE, FALSE, sizeof (struct in6_addr));
+ const char *rc =
+"# neato resolv.conf\r\n"
+"domain foobar.com\r\n"
+"search foobar.com\r\n"
+"nameserver 2001:4860:4860::8888\r\n"
+"nameserver 2001:4860:4860::8844\r\n";
+
+ g_assert (nm_ip6_config_capture_resolv_conf (ns6, rc));
+ g_assert_cmpint (ns6->len, ==, 2);
+ assert_dns6_entry (ns6, 0, "2001:4860:4860::8888");
+ assert_dns6_entry (ns6, 1, "2001:4860:4860::8844");
+
+ g_array_free (ns6, TRUE);
+}
+
+static void
+test_capture_dup6 (void)
+{
+ GArray *ns6 = g_array_new (FALSE, FALSE, sizeof (struct in6_addr));
+ const char *rc =
+"# neato resolv.conf\r\n"
+"domain foobar.com\r\n"
+"search foobar.com\r\n"
+"nameserver 2001:4860:4860::8888\r\n"
+"nameserver 2001:4860:4860::8888\r\n"
+"nameserver 2001:4860:4860::8844\r\n";
+
+ /* Check that duplicates are ignored */
+ g_assert (nm_ip6_config_capture_resolv_conf (ns6, rc));
+ g_assert_cmpint (ns6->len, ==, 2);
+ assert_dns6_entry (ns6, 0, "2001:4860:4860::8888");
+ assert_dns6_entry (ns6, 1, "2001:4860:4860::8844");
+
+ g_array_free (ns6, TRUE);
+}
+
+static void
+test_capture_addr4_with_6 (void)
+{
+ GArray *ns4 = g_array_new (FALSE, FALSE, sizeof (guint32));
+ const char *rc =
+"# neato resolv.conf\r\n"
+"domain foobar.com\r\n"
+"search foobar.com\r\n"
+"nameserver 4.2.2.1\r\n"
+"nameserver 4.2.2.2\r\n"
+"nameserver 2001:4860:4860::8888\r\n";
+
+ g_assert (nm_ip4_config_capture_resolv_conf (ns4, rc));
+ g_assert_cmpint (ns4->len, ==, 2);
+ assert_dns4_entry (ns4, 0, "4.2.2.1");
+ assert_dns4_entry (ns4, 1, "4.2.2.2");
+
+ g_array_free (ns4, TRUE);
+}
+
+static void
+test_capture_addr6_with_4 (void)
+{
+ GArray *ns6 = g_array_new (FALSE, FALSE, sizeof (struct in6_addr));
+ const char *rc =
+"# neato resolv.conf\r\n"
+"domain foobar.com\r\n"
+"search foobar.com\r\n"
+"nameserver 4.2.2.1\r\n"
+"nameserver 2001:4860:4860::8888\r\n"
+"nameserver 2001:4860:4860::8844\r\n";
+
+ g_assert (nm_ip6_config_capture_resolv_conf (ns6, rc));
+ g_assert_cmpint (ns6->len, ==, 2);
+ assert_dns6_entry (ns6, 0, "2001:4860:4860::8888");
+ assert_dns6_entry (ns6, 1, "2001:4860:4860::8844");
+
+ g_array_free (ns6, TRUE);
+}
+
+static void
+test_capture_format (void)
+{
+ GArray *ns4 = g_array_new (FALSE, FALSE, sizeof (guint32));
+ const char *rc =
+" nameserver 4.2.2.1\r\n" /* bad */
+"nameserver4.2.2.1\r\n" /* bad */
+"nameserver 4.2.2.3\r" /* good */
+"nameserver\t\t4.2.2.4\r\n" /* good */
+"nameserver 4.2.2.5\t\t\r\n"; /* good */
+
+ g_assert (nm_ip4_config_capture_resolv_conf (ns4, rc));
+ g_assert_cmpint (ns4->len, ==, 3);
+ assert_dns4_entry (ns4, 0, "4.2.2.3");
+ assert_dns4_entry (ns4, 1, "4.2.2.4");
+ assert_dns4_entry (ns4, 2, "4.2.2.5");
+
+ g_array_free (ns4, TRUE);
+}
+
+/*******************************************/
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2,35,0)
+ g_type_init ();
+#endif
+
+ g_test_add_func ("/resolvconf-capture/empty", test_capture_empty);
+ g_test_add_func ("/resolvconf-capture/basic4", test_capture_basic4);
+ g_test_add_func ("/resolvconf-capture/dup4", test_capture_dup4);
+ g_test_add_func ("/resolvconf-capture/basic6", test_capture_basic6);
+ g_test_add_func ("/resolvconf-capture/dup6", test_capture_dup6);
+ g_test_add_func ("/resolvconf-capture/addr4-with-6", test_capture_addr4_with_6);
+ g_test_add_func ("/resolvconf-capture/addr6-with-4", test_capture_addr6_with_4);
+ g_test_add_func ("/resolvconf-capture/format", test_capture_format);
+
+ return g_test_run ();
+}
+
diff --git a/src/vpn-manager/Makefile.am b/src/vpn-manager/Makefile.am
deleted file mode 100644
index 94809ddd0..000000000
--- a/src/vpn-manager/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-noinst_LTLIBRARIES = libvpn-manager.la
-
-libvpn_manager_la_SOURCES = \
- nm-vpn-manager.c \
- nm-vpn-manager.h \
- nm-vpn-service.c \
- nm-vpn-service.h \
- nm-vpn-connection.c \
- nm-vpn-connection.h
-
-libvpn_manager_la_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/src \
- -I${top_srcdir}/src/dns-manager \
- $(LIBNL_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DVPN_NAME_FILES_DIR=\""$(sysconfdir)/NetworkManager/VPN"\"
-
-libvpn_manager_la_LIBADD = \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(LIBNL_LIBS) \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-nm-vpn-connection-glue.h: $(top_srcdir)/introspection/nm-vpn-connection.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-server --output=$@ $<
-
-nm-vpn-plugin-bindings.h: $(top_srcdir)/introspection/nm-vpn-plugin.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-client --output=$@ $<
-
-
-BUILT_SOURCES = \
- nm-vpn-connection-glue.h \
- nm-vpn-plugin-bindings.h
-
-CLEANFILES = $(BUILT_SOURCES)
-
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index f2e31a8d6..d66dcfdb7 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2012 Red Hat, Inc.
+ * Copyright (C) 2005 - 2013 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -34,20 +34,16 @@
#include "nm-setting-vpn.h"
#include "nm-setting-ip4-config.h"
#include "nm-dbus-manager.h"
-#include "nm-system.h"
+#include "nm-platform.h"
#include "nm-logging.h"
#include "nm-utils.h"
-#include "nm-vpn-plugin-bindings.h"
-#include "nm-marshal.h"
#include "nm-active-connection.h"
-#include "nm-properties-changed-signal.h"
#include "nm-dbus-glib-types.h"
#include "NetworkManagerUtils.h"
-#include "nm-netlink-monitor.h"
-#include "nm-netlink-utils.h"
#include "nm-glib-compat.h"
#include "settings/nm-settings-connection.h"
#include "nm-dispatcher.h"
+#include "nm-agent-manager.h"
#include "nm-vpn-connection-glue.h"
@@ -60,28 +56,41 @@ typedef enum {
SECRETS_REQ_EXISTING = 1,
/* New secrets required; ask an agent */
SECRETS_REQ_NEW = 2,
+ /* Plugin requests secrets interactively */
+ SECRETS_REQ_INTERACTIVE = 3,
/* Placeholder for bounds checking */
SECRETS_REQ_LAST
} SecretsReq;
-typedef struct {
- gboolean disposed;
+/* Internal VPN states, private to NMVPNConnection */
+typedef enum {
+ STATE_UNKNOWN = 0,
+ STATE_WAITING,
+ STATE_PREPARE,
+ STATE_NEED_AUTH,
+ STATE_CONNECT,
+ STATE_IP_CONFIG_GET,
+ STATE_PRE_UP,
+ STATE_ACTIVATED,
+ STATE_DEACTIVATING,
+ STATE_DISCONNECTED,
+ STATE_FAILED,
+} VpnState;
+typedef struct {
NMConnection *connection;
guint32 secrets_id;
SecretsReq secrets_idx;
char *username;
- NMDevice *parent_dev;
- gulong device_monitor;
- gulong device_ip4;
- gulong device_ip6;
-
- NMVPNConnectionState vpn_state;
+ VpnState vpn_state;
+ guint dispatcher_id;
NMVPNConnectionStateReason failure_reason;
+
DBusGProxy *proxy;
- guint ipconfig_timeout;
+ GHashTable *connect_hash;
+ guint connect_timeout;
gboolean has_ip4;
NMIP4Config *ip4_config;
guint32 ip4_internal_gw;
@@ -94,14 +103,11 @@ typedef struct {
int ip_ifindex;
char *banner;
guint32 mtu;
-
- struct rtnl_route *gw_route;
} NMVPNConnectionPrivate;
#define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVPNConnectionPrivate))
enum {
- PROPERTIES_CHANGED,
VPN_STATE_CHANGED,
INTERNAL_STATE_CHANGED,
@@ -114,27 +120,81 @@ enum {
PROP_0,
PROP_VPN_STATE,
PROP_BANNER,
+ PROP_IP4_CONFIG,
+ PROP_IP6_CONFIG,
PROP_MASTER = 2000,
LAST_PROP
};
-static void get_secrets (NMVPNConnection *self, SecretsReq secrets_idx);
+static void get_secrets (NMVPNConnection *self,
+ SecretsReq secrets_idx,
+ const char **hints);
+
+static void plugin_interactive_secrets_required (DBusGProxy *proxy,
+ const char *message,
+ const char **secrets,
+ gpointer user_data);
+
+static void _set_vpn_state (NMVPNConnection *connection,
+ VpnState vpn_state,
+ NMVPNConnectionStateReason reason,
+ gboolean quitting);
+
+/*********************************************************************/
+
+static NMVPNConnectionState
+_state_to_nm_vpn_state (VpnState state)
+{
+ switch (state) {
+ case STATE_WAITING:
+ case STATE_PREPARE:
+ return NM_VPN_CONNECTION_STATE_PREPARE;
+ case STATE_NEED_AUTH:
+ return NM_VPN_CONNECTION_STATE_NEED_AUTH;
+ case STATE_CONNECT:
+ return NM_VPN_CONNECTION_STATE_CONNECT;
+ case STATE_IP_CONFIG_GET:
+ case STATE_PRE_UP:
+ return NM_VPN_CONNECTION_STATE_IP_CONFIG_GET;
+ case STATE_ACTIVATED:
+ return NM_VPN_CONNECTION_STATE_ACTIVATED;
+ case STATE_DEACTIVATING: {
+ /* Map DEACTIVATING to ACTIVATED to preserve external API behavior,
+ * since our API has no DEACTIVATING state of its own. Since this can
+ * take some time, and the VPN isn't actually disconnected until it
+ * hits the DISCONNECTED state, to clients it should still appear
+ * connected.
+ */
+ return NM_VPN_CONNECTION_STATE_ACTIVATED;
+ }
+ case STATE_DISCONNECTED:
+ return NM_VPN_CONNECTION_STATE_DISCONNECTED;
+ case STATE_FAILED:
+ return NM_VPN_CONNECTION_STATE_FAILED;
+ default:
+ return STATE_UNKNOWN;
+ }
+}
static NMActiveConnectionState
-ac_state_from_vpn_state (NMVPNConnectionState vpn_state)
+_state_to_ac_state (VpnState vpn_state)
{
/* Set the NMActiveConnection state based on VPN state */
switch (vpn_state) {
- case NM_VPN_CONNECTION_STATE_PREPARE:
- case NM_VPN_CONNECTION_STATE_NEED_AUTH:
- case NM_VPN_CONNECTION_STATE_CONNECT:
- case NM_VPN_CONNECTION_STATE_IP_CONFIG_GET:
+ case STATE_WAITING:
+ case STATE_PREPARE:
+ case STATE_NEED_AUTH:
+ case STATE_CONNECT:
+ case STATE_IP_CONFIG_GET:
+ case STATE_PRE_UP:
return NM_ACTIVE_CONNECTION_STATE_ACTIVATING;
- case NM_VPN_CONNECTION_STATE_ACTIVATED:
+ case STATE_ACTIVATED:
return NM_ACTIVE_CONNECTION_STATE_ACTIVATED;
- case NM_VPN_CONNECTION_STATE_FAILED:
- case NM_VPN_CONNECTION_STATE_DISCONNECTED:
+ case STATE_DEACTIVATING:
+ return NM_ACTIVE_CONNECTION_STATE_DEACTIVATING;
+ case STATE_DISCONNECTED:
+ case STATE_FAILED:
return NM_ACTIVE_CONNECTION_STATE_DEACTIVATED;
default:
break;
@@ -149,10 +209,12 @@ call_plugin_disconnect (NMVPNConnection *self)
GError *error = NULL;
if (priv->proxy) {
- org_freedesktop_NetworkManager_VPN_Plugin_disconnect (priv->proxy, &error);
- if (error)
+ if (!dbus_g_proxy_call (priv->proxy, "Disconnect", &error,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID)) {
nm_log_warn (LOGD_VPN, "error disconnecting VPN: %s", error->message);
- g_clear_error (&error);
+ g_error_free (error);
+ }
g_object_unref (priv->proxy);
priv->proxy = NULL;
@@ -160,21 +222,18 @@ call_plugin_disconnect (NMVPNConnection *self)
}
static void
-vpn_cleanup (NMVPNConnection *connection)
+vpn_cleanup (NMVPNConnection *connection, NMDevice *parent_dev)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
if (priv->ip_ifindex) {
- nm_system_iface_set_up (priv->ip_ifindex, FALSE, NULL);
- nm_system_iface_flush_routes (priv->ip_ifindex, AF_UNSPEC);
- nm_system_iface_flush_addresses (priv->ip_ifindex, AF_UNSPEC);
+ nm_platform_link_set_down (priv->ip_ifindex);
+ nm_platform_route_flush (priv->ip_ifindex);
+ nm_platform_address_flush (priv->ip_ifindex);
}
- if (priv->gw_route) {
- nm_netlink_route_delete (priv->gw_route);
- rtnl_route_put (priv->gw_route);
- priv->gw_route = NULL;
- }
+ nm_device_set_vpn4_config (parent_dev, NULL);
+ nm_device_set_vpn6_config (parent_dev, NULL);
g_free (priv->banner);
priv->banner = NULL;
@@ -191,12 +250,46 @@ vpn_cleanup (NMVPNConnection *connection)
}
static void
-nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
- NMVPNConnectionState vpn_state,
- NMVPNConnectionStateReason reason)
+dispatcher_pre_down_done (guint call_id, gpointer user_data)
+{
+ NMVPNConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+
+ priv->dispatcher_id = 0;
+ _set_vpn_state (self, STATE_DISCONNECTED, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+}
+
+static void
+dispatcher_pre_up_done (guint call_id, gpointer user_data)
+{
+ NMVPNConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+
+ priv->dispatcher_id = 0;
+ _set_vpn_state (self, STATE_ACTIVATED, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+}
+
+static void
+dispatcher_cleanup (NMVPNConnection *self)
+{
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+
+ if (priv->dispatcher_id) {
+ nm_dispatcher_call_cancel (priv->dispatcher_id);
+ priv->dispatcher_id = 0;
+ }
+}
+
+static void
+_set_vpn_state (NMVPNConnection *connection,
+ VpnState vpn_state,
+ NMVPNConnectionStateReason reason,
+ gboolean quitting)
{
NMVPNConnectionPrivate *priv;
- NMVPNConnectionState old_vpn_state;
+ VpnState old_vpn_state;
+ NMVPNConnectionState new_external_state, old_external_state;
+ NMDevice *parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (connection));
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
@@ -208,16 +301,23 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
old_vpn_state = priv->vpn_state;
priv->vpn_state = vpn_state;
+ /* The device gets destroyed by active connection when it enters
+ * the deactivated state, so we need to ref it for usage below.
+ */
+ if (parent_dev)
+ g_object_ref (parent_dev);
+
/* Update active connection base class state */
nm_active_connection_set_state (NM_ACTIVE_CONNECTION (connection),
- ac_state_from_vpn_state (vpn_state));
+ _state_to_ac_state (vpn_state));
/* Clear any in-progress secrets request */
if (priv->secrets_id) {
nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (priv->connection), priv->secrets_id);
priv->secrets_id = 0;
}
- priv->secrets_idx = SECRETS_REQ_SYSTEM;
+
+ dispatcher_cleanup (connection);
/* The connection gets destroyed by the VPN manager when it enters the
* disconnected/failed state, but we need to keep it around for a bit
@@ -225,144 +325,254 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
*/
g_object_ref (connection);
- g_signal_emit (connection, signals[VPN_STATE_CHANGED], 0, vpn_state, reason);
- g_signal_emit (connection, signals[INTERNAL_STATE_CHANGED], 0, vpn_state, old_vpn_state, reason);
- g_object_notify (G_OBJECT (connection), NM_VPN_CONNECTION_VPN_STATE);
+ old_external_state = _state_to_nm_vpn_state (old_vpn_state);
+ new_external_state = _state_to_nm_vpn_state (priv->vpn_state);
+ if (new_external_state != old_external_state) {
+ g_signal_emit (connection, signals[VPN_STATE_CHANGED], 0, new_external_state, reason);
+ g_signal_emit (connection, signals[INTERNAL_STATE_CHANGED], 0,
+ new_external_state,
+ old_external_state,
+ reason);
+ g_object_notify (G_OBJECT (connection), NM_VPN_CONNECTION_VPN_STATE);
+ }
switch (vpn_state) {
- case NM_VPN_CONNECTION_STATE_NEED_AUTH:
- /* Kick off the secrets requests; first we get existing system secrets
- * and ask the plugin if these are sufficient, next we get all existing
- * secrets from system and from user agents and ask the plugin again,
- * and last we ask the user for new secrets if required.
+ case STATE_NEED_AUTH:
+ /* Do nothing; not part of 'default' because we don't want to touch
+ * priv->secrets_req as NEED_AUTH is re-entered during interactive
+ * secrets.
*/
- get_secrets (connection, SECRETS_REQ_SYSTEM);
break;
- case NM_VPN_CONNECTION_STATE_ACTIVATED:
+ case STATE_PRE_UP:
+ if (!nm_dispatcher_call_vpn (DISPATCHER_ACTION_VPN_PRE_UP,
+ priv->connection,
+ parent_dev,
+ priv->ip_iface,
+ priv->ip4_config,
+ priv->ip6_config,
+ dispatcher_pre_up_done,
+ connection,
+ &priv->dispatcher_id)) {
+ /* Just proceed on errors */
+ dispatcher_pre_up_done (0, connection);
+ }
+ break;
+ case STATE_ACTIVATED:
/* Secrets no longer needed now that we're connected */
nm_connection_clear_secrets (priv->connection);
/* Let dispatcher scripts know we're up and running */
nm_dispatcher_call_vpn (DISPATCHER_ACTION_VPN_UP,
priv->connection,
- priv->parent_dev,
+ parent_dev,
priv->ip_iface,
priv->ip4_config,
priv->ip6_config,
NULL,
+ NULL,
NULL);
break;
- case NM_VPN_CONNECTION_STATE_FAILED:
- case NM_VPN_CONNECTION_STATE_DISCONNECTED:
- if (old_vpn_state == NM_VPN_CONNECTION_STATE_ACTIVATED) {
+ case STATE_DEACTIVATING:
+ if (quitting) {
+ nm_dispatcher_call_vpn_sync (DISPATCHER_ACTION_VPN_PRE_DOWN,
+ priv->connection,
+ parent_dev,
+ priv->ip_iface,
+ priv->ip4_config,
+ priv->ip6_config);
+ } else {
+ if (!nm_dispatcher_call_vpn (DISPATCHER_ACTION_VPN_PRE_DOWN,
+ priv->connection,
+ parent_dev,
+ priv->ip_iface,
+ priv->ip4_config,
+ priv->ip6_config,
+ dispatcher_pre_down_done,
+ connection,
+ &priv->dispatcher_id)) {
+ /* Just proceed on errors */
+ dispatcher_pre_down_done (0, connection);
+ }
+ }
+ break;
+ case STATE_FAILED:
+ case STATE_DISCONNECTED:
+ if ( old_vpn_state >= STATE_ACTIVATED
+ && old_vpn_state <= STATE_DEACTIVATING) {
/* Let dispatcher scripts know we're about to go down */
- nm_dispatcher_call_vpn (DISPATCHER_ACTION_VPN_DOWN,
- priv->connection,
- priv->parent_dev,
- priv->ip_iface,
- NULL,
- NULL,
- NULL,
- NULL);
+ if (quitting) {
+ nm_dispatcher_call_vpn_sync (DISPATCHER_ACTION_VPN_DOWN,
+ priv->connection,
+ parent_dev,
+ priv->ip_iface,
+ NULL,
+ NULL);
+ } else {
+ nm_dispatcher_call_vpn (DISPATCHER_ACTION_VPN_DOWN,
+ priv->connection,
+ parent_dev,
+ priv->ip_iface,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ }
}
/* Tear down and clean up the connection */
call_plugin_disconnect (connection);
- vpn_cleanup (connection);
- break;
+ vpn_cleanup (connection, parent_dev);
+ /* Fall through */
default:
+ priv->secrets_idx = SECRETS_REQ_SYSTEM;
break;
}
g_object_unref (connection);
+ if (parent_dev)
+ g_object_unref (parent_dev);
}
static void
-device_state_changed (NMDevice *device,
+device_state_changed (NMActiveConnection *active,
+ NMDevice *device,
NMDeviceState new_state,
- NMDeviceState old_state,
- NMDeviceStateReason reason,
- gpointer user_data)
+ NMDeviceState old_state)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
-
if (new_state <= NM_DEVICE_STATE_DISCONNECTED) {
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_DISCONNECTED,
- NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED);
+ _set_vpn_state (NM_VPN_CONNECTION (active),
+ STATE_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED,
+ FALSE);
} else if (new_state == NM_DEVICE_STATE_FAILED) {
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_FAILED,
- NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED);
+ _set_vpn_state (NM_VPN_CONNECTION (active),
+ STATE_FAILED,
+ NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED,
+ FALSE);
}
+
+ /* FIXME: map device DEACTIVATING state to VPN DEACTIVATING state and
+ * block device deactivation on VPN deactivation.
+ */
}
static void
-device_ip4_config_changed (NMDevice *device,
- GParamSpec *pspec,
- gpointer user_data)
+add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32 vpn_gw)
{
- NMVPNConnection *vpn = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (vpn);
+ NMIP4Config *parent_config;
+ guint32 parent_gw;
+ NMPlatformIP4Route route;
+
+ g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ g_return_if_fail (NM_IS_DEVICE (parent_device));
+ g_return_if_fail (vpn_gw != 0);
- if ( (priv->vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
- || !nm_device_get_ip4_config (device))
+ /* Set up a route to the VPN gateway's public IP address through the default
+ * network device if the VPN gateway is on a different subnet.
+ */
+
+ parent_config = nm_device_get_ip4_config (parent_device);
+ g_return_if_fail (parent_config != NULL);
+ parent_gw = nm_ip4_config_get_gateway (parent_config);
+ if (!parent_gw)
return;
- /* Re-add the VPN gateway route */
- if (priv->ip4_external_gw) {
- if (priv->gw_route)
- rtnl_route_put (priv->gw_route);
- priv->gw_route = nm_system_add_ip4_vpn_gateway_route (priv->parent_dev,
- priv->ip4_external_gw);
- }
+ memset (&route, 0, sizeof (route));
+ route.network = vpn_gw;
+ route.plen = 32;
+ route.gateway = parent_gw;
+
+ /* If the VPN gateway is in the same subnet as one of the parent device's
+ * IP addresses, don't add the host route to it, but a route through the
+ * parent device.
+ */
+ if (nm_ip4_config_destination_is_direct (parent_config, vpn_gw, 32))
+ route.gateway = 0;
+
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ route.metric = nm_device_get_priority (parent_device);
+ nm_ip4_config_add_route (config, &route);
+
+ /* Ensure there's a route to the parent device's gateway through the
+ * parent device, since if the VPN claims the default route and the VPN
+ * routes include a subnet that matches the parent device's subnet,
+ * the parent device's gateway would get routed through the VPN and fail.
+ */
+ memset (&route, 0, sizeof (route));
+ route.network = parent_gw;
+ route.plen = 32;
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ route.metric = nm_device_get_priority (parent_device);
+
+ nm_ip4_config_add_route (config, &route);
}
static void
-device_ip6_config_changed (NMDevice *device,
- GParamSpec *pspec,
- gpointer user_data)
+add_ip6_vpn_gateway_route (NMIP6Config *config,
+ NMDevice *parent_device,
+ const struct in6_addr *vpn_gw)
{
- NMVPNConnection *vpn = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (vpn);
-
- if ( (priv->vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
- || !nm_device_get_ip6_config (device))
+ NMIP6Config *parent_config;
+ const struct in6_addr *parent_gw;
+ NMPlatformIP6Route route;
+
+ g_return_if_fail (NM_IS_IP6_CONFIG (config));
+ g_return_if_fail (NM_IS_DEVICE (parent_device));
+ g_return_if_fail (vpn_gw != NULL);
+
+ parent_config = nm_device_get_ip6_config (parent_device);
+ g_return_if_fail (parent_config != NULL);
+ parent_gw = nm_ip6_config_get_gateway (parent_config);
+ if (!parent_gw)
return;
- /* Re-add the VPN gateway route */
- if (priv->ip6_external_gw) {
- if (priv->gw_route)
- rtnl_route_put (priv->gw_route);
- priv->gw_route = nm_system_add_ip6_vpn_gateway_route (priv->parent_dev,
- priv->ip6_external_gw);
- }
+ memset (&route, 0, sizeof (route));
+ route.network = *vpn_gw;
+ route.plen = 128;
+ route.gateway = *parent_gw;
+
+ /* If the VPN gateway is in the same subnet as one of the parent device's
+ * IP addresses, don't add the host route to it, but a route through the
+ * parent device.
+ */
+ if (nm_ip6_config_destination_is_direct (parent_config, vpn_gw, 128))
+ route.gateway = in6addr_any;
+
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ route.metric = nm_device_get_priority (parent_device);
+ nm_ip6_config_add_route (config, &route);
+
+ /* Ensure there's a route to the parent device's gateway through the
+ * parent device, since if the VPN claims the default route and the VPN
+ * routes include a subnet that matches the parent device's subnet,
+ * the parent device's gateway would get routed through the VPN and fail.
+ */
+ memset (&route, 0, sizeof (route));
+ route.network = *parent_gw;
+ route.plen = 128;
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ route.metric = nm_device_get_priority (parent_device);
+
+ nm_ip6_config_add_route (config, &route);
}
NMVPNConnection *
nm_vpn_connection_new (NMConnection *connection,
NMDevice *parent_device,
const char *specific_object,
- gboolean user_requested,
- gulong user_uid)
+ NMAuthSubject *subject)
{
- NMVPNConnection *self;
-
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
g_return_val_if_fail (NM_IS_DEVICE (parent_device), NULL);
- self = (NMVPNConnection *) g_object_new (NM_TYPE_VPN_CONNECTION,
+ return (NMVPNConnection *) g_object_new (NM_TYPE_VPN_CONNECTION,
NM_ACTIVE_CONNECTION_INT_CONNECTION, connection,
NM_ACTIVE_CONNECTION_INT_DEVICE, parent_device,
NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, specific_object,
- NM_ACTIVE_CONNECTION_INT_USER_REQUESTED, user_requested,
- NM_ACTIVE_CONNECTION_INT_USER_UID, user_uid,
+ NM_ACTIVE_CONNECTION_INT_SUBJECT, subject,
NM_ACTIVE_CONNECTION_VPN, TRUE,
NULL);
- if (self)
- nm_active_connection_export (NM_ACTIVE_CONNECTION (self));
-
- return self;
}
static const char *
@@ -375,14 +585,31 @@ nm_vpn_connection_get_service (NMVPNConnection *connection)
return nm_setting_vpn_get_service_type (s_vpn);
}
+static const char *
+vpn_plugin_failure_to_string (NMVPNPluginFailure failure)
+{
+ switch (failure) {
+ case NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED:
+ return "login-failed";
+ case NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED:
+ return "connect-failed";
+ case NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG:
+ return "bad-ip-config";
+ default:
+ break;
+ }
+ return "unknown";
+}
+
static void
plugin_failed (DBusGProxy *proxy,
- NMVPNPluginFailure plugin_failure,
- gpointer user_data)
+ NMVPNPluginFailure plugin_failure,
+ gpointer user_data)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (user_data);
- nm_log_warn (LOGD_VPN, "VPN plugin failed: %d", plugin_failure);
+ nm_log_warn (LOGD_VPN, "VPN plugin failed: %s (%d)",
+ vpn_plugin_failure_to_string (plugin_failure), plugin_failure);
switch (plugin_failure) {
case NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED:
@@ -397,7 +624,7 @@ plugin_failed (DBusGProxy *proxy,
}
static const char *
-vpn_state_to_string (NMVPNServiceState state)
+vpn_service_state_to_string (NMVPNServiceState state)
{
switch (state) {
case NM_VPN_SERVICE_STATE_INIT:
@@ -418,6 +645,60 @@ vpn_state_to_string (NMVPNServiceState state)
return "unknown";
}
+static const char *state_table[] = {
+ [STATE_UNKNOWN] = "unknown",
+ [STATE_WAITING] = "waiting",
+ [STATE_PREPARE] = "prepare",
+ [STATE_NEED_AUTH] = "need-auth",
+ [STATE_CONNECT] = "connect",
+ [STATE_IP_CONFIG_GET] = "ip-config-get",
+ [STATE_PRE_UP] = "pre-up",
+ [STATE_ACTIVATED] = "activated",
+ [STATE_DEACTIVATING] = "deactivating",
+ [STATE_DISCONNECTED] = "disconnected",
+ [STATE_FAILED] = "failed",
+};
+
+static const char *
+vpn_state_to_string (VpnState state)
+{
+ if (state >= 0 && state < G_N_ELEMENTS (state_table))
+ return state_table[state];
+ return "unknown";
+}
+
+static const char *
+vpn_reason_to_string (NMVPNConnectionStateReason reason)
+{
+ switch (reason) {
+ case NM_VPN_CONNECTION_STATE_REASON_NONE:
+ return "none";
+ case NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED:
+ return "user-disconnected";
+ case NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED:
+ return "device-disconnected";
+ case NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED:
+ return "service-stopped";
+ case NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID:
+ return "ip-config-invalid";
+ case NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT:
+ return "connect-timeout";
+ case NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT:
+ return "service-start-timeout";
+ case NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED:
+ return "service-start-failed";
+ case NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS:
+ return "no-secrets";
+ case NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED:
+ return "login-failed";
+ case NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED:
+ return "connection-removed";
+ default:
+ break;
+ }
+ return "unknown";
+}
+
static void
plugin_state_changed (DBusGProxy *proxy,
NMVPNServiceState state,
@@ -427,7 +708,7 @@ plugin_state_changed (DBusGProxy *proxy,
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
nm_log_info (LOGD_VPN, "VPN plugin state changed: %s (%d)",
- vpn_state_to_string (state), state);
+ vpn_service_state_to_string (state), state);
if (state == NM_VPN_SERVICE_STATE_STOPPED) {
/* Clear connection secrets to ensure secrets get requested each time the
@@ -435,107 +716,66 @@ plugin_state_changed (DBusGProxy *proxy,
*/
nm_connection_clear_secrets (priv->connection);
- switch (nm_vpn_connection_get_vpn_state (connection)) {
- case NM_VPN_CONNECTION_STATE_PREPARE:
- case NM_VPN_CONNECTION_STATE_NEED_AUTH:
- case NM_VPN_CONNECTION_STATE_CONNECT:
- case NM_VPN_CONNECTION_STATE_IP_CONFIG_GET:
- case NM_VPN_CONNECTION_STATE_ACTIVATED:
- nm_log_info (LOGD_VPN, "VPN plugin state change reason: %d", priv->failure_reason);
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_FAILED,
- priv->failure_reason);
+ if ((priv->vpn_state >= STATE_WAITING) && (priv->vpn_state <= STATE_ACTIVATED)) {
+ nm_log_info (LOGD_VPN, "VPN plugin state change reason: %s (%d)",
+ vpn_reason_to_string (priv->failure_reason), priv->failure_reason);
+ _set_vpn_state (connection, STATE_FAILED, priv->failure_reason, FALSE);
/* Reset the failure reason */
priv->failure_reason = NM_VPN_CONNECTION_STATE_REASON_UNKNOWN;
- break;
- default:
- break;
}
}
}
-static char addr_to_string_buf[INET6_ADDRSTRLEN + 1];
-
-static const char *
-ip_address_to_string (guint32 numeric)
-{
- struct in_addr temp_addr;
-
- memset (&addr_to_string_buf, '\0', sizeof (addr_to_string_buf));
- temp_addr.s_addr = numeric;
-
- if (inet_ntop (AF_INET, &temp_addr, addr_to_string_buf, INET_ADDRSTRLEN)) {
- return addr_to_string_buf;
- } else {
- nm_log_warn (LOGD_VPN, "error converting IP4 address 0x%X",
- ntohl (temp_addr.s_addr));
- return NULL;
- }
-}
-
-static const char *
-ip6_address_to_string (const struct in6_addr *addr)
-{
- memset (addr_to_string_buf, '\0', sizeof (addr_to_string_buf));
- if (inet_ntop (AF_INET6, addr, addr_to_string_buf, INET6_ADDRSTRLEN)) {
- return addr_to_string_buf;
- } else {
- nm_log_warn (LOGD_VPN, "error converting IP6 address");
- return NULL;
- }
-}
-
static void
print_vpn_config (NMVPNConnection *connection)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- NMIP4Address *addr;
- NMIP6Address *addr6;
+ const NMPlatformIP4Address *address4;
+ const NMPlatformIP6Address *address6;
char *dns_domain = NULL;
guint32 num, i;
+ char buf[NM_UTILS_INET_ADDRSTRLEN];
if (priv->ip4_external_gw) {
nm_log_info (LOGD_VPN, "VPN Gateway: %s",
- ip_address_to_string (priv->ip4_external_gw));
+ nm_utils_inet4_ntop (priv->ip4_external_gw, NULL));
} else if (priv->ip6_external_gw) {
nm_log_info (LOGD_VPN, "VPN Gateway: %s",
- ip6_address_to_string (priv->ip6_external_gw));
- }
+ nm_utils_inet6_ntop (priv->ip6_external_gw, NULL));
+ }
- nm_log_info (LOGD_VPN, "Tunnel Device: %s", priv->ip_iface);
+ nm_log_info (LOGD_VPN, "Tunnel Device: %s", priv->ip_iface ? priv->ip_iface : "(none)");
if (priv->ip4_config) {
nm_log_info (LOGD_VPN, "IPv4 configuration:");
- addr = nm_ip4_config_get_address (priv->ip4_config, 0);
+ address4 = nm_ip4_config_get_address (priv->ip4_config, 0);
if (priv->ip4_internal_gw)
- nm_log_info (LOGD_VPN, " Internal Gateway: %s", ip_address_to_string (priv->ip4_internal_gw));
- nm_log_info (LOGD_VPN, " Internal Address: %s", ip_address_to_string (nm_ip4_address_get_address (addr)));
- nm_log_info (LOGD_VPN, " Internal Prefix: %d", nm_ip4_address_get_prefix (addr));
- nm_log_info (LOGD_VPN, " Internal Point-to-Point Address: %s",
- ip_address_to_string (nm_ip4_config_get_ptp_address (priv->ip4_config)));
+ nm_log_info (LOGD_VPN, " Internal Gateway: %s", nm_utils_inet4_ntop (priv->ip4_internal_gw, NULL));
+ nm_log_info (LOGD_VPN, " Internal Address: %s", nm_utils_inet4_ntop (address4->address, NULL));
+ nm_log_info (LOGD_VPN, " Internal Prefix: %d", address4->plen);
+ nm_log_info (LOGD_VPN, " Internal Point-to-Point Address: %s", nm_utils_inet4_ntop (address4->peer_address, NULL));
nm_log_info (LOGD_VPN, " Maximum Segment Size (MSS): %d", nm_ip4_config_get_mss (priv->ip4_config));
num = nm_ip4_config_get_num_routes (priv->ip4_config);
for (i = 0; i < num; i++) {
- NMIP4Route *route;
+ const NMPlatformIP4Route *route = nm_ip4_config_get_route (priv->ip4_config, i);
- route = nm_ip4_config_get_route (priv->ip4_config, i);
nm_log_info (LOGD_VPN, " Static Route: %s/%d Next Hop: %s",
- ip_address_to_string (nm_ip4_route_get_dest (route)),
- nm_ip4_route_get_prefix (route),
- ip_address_to_string (nm_ip4_route_get_next_hop (route)));
+ nm_utils_inet4_ntop (route->network, NULL),
+ route->plen,
+ nm_utils_inet4_ntop (route->gateway, buf));
}
nm_log_info (LOGD_VPN, " Forbid Default Route: %s",
- nm_ip4_config_get_never_default (priv->ip4_config) ? "yes" : "no");
+ nm_ip4_config_get_never_default (priv->ip4_config) ? "yes" : "no");
num = nm_ip4_config_get_num_nameservers (priv->ip4_config);
for (i = 0; i < num; i++) {
nm_log_info (LOGD_VPN, " Internal DNS: %s",
- ip_address_to_string (nm_ip4_config_get_nameserver (priv->ip4_config, i)));
+ nm_utils_inet4_ntop (nm_ip4_config_get_nameserver (priv->ip4_config, i), NULL));
}
if (nm_ip4_config_get_num_domains (priv->ip4_config) > 0)
@@ -548,34 +788,32 @@ print_vpn_config (NMVPNConnection *connection)
if (priv->ip6_config) {
nm_log_info (LOGD_VPN, "IPv6 configuration:");
- addr6 = nm_ip6_config_get_address (priv->ip6_config, 0);
+ address6 = nm_ip6_config_get_address (priv->ip6_config, 0);
if (priv->ip6_internal_gw)
- nm_log_info (LOGD_VPN, " Internal Gateway: %s", ip6_address_to_string (priv->ip6_internal_gw));
- nm_log_info (LOGD_VPN, " Internal Address: %s", ip6_address_to_string (nm_ip6_address_get_address (addr6)));
- nm_log_info (LOGD_VPN, " Internal Prefix: %d", nm_ip6_address_get_prefix (addr6));
- nm_log_info (LOGD_VPN, " Internal Point-to-Point Address: %s",
- ip6_address_to_string (nm_ip6_config_get_ptp_address (priv->ip6_config)));
+ nm_log_info (LOGD_VPN, " Internal Gateway: %s", nm_utils_inet6_ntop (priv->ip6_internal_gw, NULL));
+ nm_log_info (LOGD_VPN, " Internal Address: %s", nm_utils_inet6_ntop (&address6->address, NULL));
+ nm_log_info (LOGD_VPN, " Internal Prefix: %d", address6->plen);
+ nm_log_info (LOGD_VPN, " Internal Point-to-Point Address: %s", nm_utils_inet6_ntop (&address6->peer_address, NULL));
nm_log_info (LOGD_VPN, " Maximum Segment Size (MSS): %d", nm_ip6_config_get_mss (priv->ip6_config));
num = nm_ip6_config_get_num_routes (priv->ip6_config);
for (i = 0; i < num; i++) {
- NMIP6Route *route;
+ const NMPlatformIP6Route *route = nm_ip6_config_get_route (priv->ip6_config, i);
- route = nm_ip6_config_get_route (priv->ip6_config, i);
nm_log_info (LOGD_VPN, " Static Route: %s/%d Next Hop: %s",
- ip6_address_to_string (nm_ip6_route_get_dest (route)),
- nm_ip6_route_get_prefix (route),
- ip6_address_to_string (nm_ip6_route_get_next_hop (route)));
+ nm_utils_inet6_ntop (&route->network, NULL),
+ route->plen,
+ nm_utils_inet6_ntop (&route->gateway, buf));
}
nm_log_info (LOGD_VPN, " Forbid Default Route: %s",
- nm_ip6_config_get_never_default (priv->ip6_config) ? "yes" : "no");
+ nm_ip6_config_get_never_default (priv->ip6_config) ? "yes" : "no");
num = nm_ip6_config_get_num_nameservers (priv->ip6_config);
for (i = 0; i < num; i++) {
nm_log_info (LOGD_VPN, " Internal DNS: %s",
- ip6_address_to_string (nm_ip6_config_get_nameserver (priv->ip6_config, i)));
+ nm_utils_inet6_ntop (nm_ip6_config_get_nameserver (priv->ip6_config, i), NULL));
}
if (nm_ip6_config_get_num_domains (priv->ip6_config) > 0)
@@ -597,38 +835,59 @@ static gboolean
nm_vpn_connection_apply_config (NMVPNConnection *connection)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMDevice *parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (connection));
+ NMIP4Config *vpn4_parent_config = NULL;
+ NMIP6Config *vpn6_parent_config = NULL;
- nm_system_iface_set_up (priv->ip_ifindex, TRUE, NULL);
+ if (priv->ip_ifindex > 0) {
+ nm_platform_link_set_up (priv->ip_ifindex);
- if (priv->ip4_config) {
- if (!nm_system_apply_ip4_config (priv->ip_ifindex, priv->ip4_config,
- 0, NM_IP4_COMPARE_FLAG_ALL))
- return FALSE;
+ if (priv->ip4_config) {
+ if (!nm_ip4_config_commit (priv->ip4_config, priv->ip_ifindex))
+ return FALSE;
+ }
+
+ if (priv->ip6_config) {
+ if (!nm_ip6_config_commit (priv->ip6_config, priv->ip_ifindex))
+ return FALSE;
+ }
+
+ if (priv->ip4_config)
+ vpn4_parent_config = nm_ip4_config_new ();
+ if (priv->ip6_config)
+ vpn6_parent_config = nm_ip6_config_new ();
+ } else {
+ /* If the VPN didn't return a network interface, it is a route-based
+ * VPN (like kernel IPSec) and all IP addressing and routing should
+ * be done on the parent interface instead.
+ */
+
+ if (priv->ip4_config)
+ vpn4_parent_config = g_object_ref (priv->ip4_config);
+ if (priv->ip6_config)
+ vpn6_parent_config = g_object_ref (priv->ip6_config);
}
- if (priv->ip6_config) {
- if (!nm_system_apply_ip6_config (priv->ip_ifindex, priv->ip6_config,
- 0, NM_IP6_COMPARE_FLAG_ALL))
- /* FIXME: remove ip4 config */
- return FALSE;
+ if (vpn4_parent_config) {
+ /* Add any explicit route to the VPN gateway through the parent device */
+ if (priv->ip4_external_gw)
+ add_ip4_vpn_gateway_route (vpn4_parent_config, parent_dev, priv->ip4_external_gw);
+
+ nm_device_set_vpn4_config (parent_dev, vpn4_parent_config);
+ g_object_unref (vpn4_parent_config);
}
+ if (vpn6_parent_config) {
+ /* Add any explicit route to the VPN gateway through the parent device */
+ if (priv->ip6_external_gw)
+ add_ip6_vpn_gateway_route (vpn6_parent_config, parent_dev, priv->ip6_external_gw);
- /* Add any explicit route to the VPN gateway through the parent device */
- if (priv->ip4_external_gw) {
- priv->gw_route = nm_system_add_ip4_vpn_gateway_route (priv->parent_dev,
- priv->ip4_external_gw);
- } else if (priv->ip6_external_gw) {
- priv->gw_route = nm_system_add_ip6_vpn_gateway_route (priv->parent_dev,
- priv->ip6_external_gw);
- } else {
- priv->gw_route = NULL;
+ nm_device_set_vpn6_config (parent_dev, vpn6_parent_config);
+ g_object_unref (vpn6_parent_config);
}
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP Config Get) complete.",
nm_connection_get_id (priv->connection));
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_ACTIVATED,
- NM_VPN_CONNECTION_STATE_REASON_NONE);
+ _set_vpn_state (connection, STATE_PRE_UP, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
return TRUE;
}
@@ -638,7 +897,7 @@ nm_vpn_connection_config_maybe_complete (NMVPNConnection *connection,
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- if (priv->ipconfig_timeout == 0) {
+ if (priv->connect_timeout == 0) {
/* config_complete() was already called with an error;
* ignore further calls.
*/
@@ -653,8 +912,8 @@ nm_vpn_connection_config_maybe_complete (NMVPNConnection *connection,
}
}
- g_source_remove (priv->ipconfig_timeout);
- priv->ipconfig_timeout = 0;
+ g_source_remove (priv->connect_timeout);
+ priv->connect_timeout = 0;
if (success) {
print_vpn_config (connection);
@@ -668,11 +927,13 @@ nm_vpn_connection_config_maybe_complete (NMVPNConnection *connection,
nm_log_warn (LOGD_VPN, "VPN connection '%s' did not receive valid IP config information.",
nm_connection_get_id (priv->connection));
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_FAILED,
- NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID);
+ _set_vpn_state (connection, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID, FALSE);
}
+#define LOG_INVALID_ARG(property) \
+ nm_log_dbg (LOGD_VPN, "VPN connection '%s' has invalid argument %s", \
+ nm_connection_get_id (priv->connection), property)
+
static gboolean
process_generic_config (NMVPNConnection *connection,
GHashTable *config_hash)
@@ -680,41 +941,51 @@ process_generic_config (NMVPNConnection *connection,
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
GValue *val;
+ g_clear_pointer (&priv->ip_iface, g_free);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CONFIG_TUNDEV);
- if (val)
- priv->ip_iface = g_strdup (g_value_get_string (val));
- else {
- nm_log_err (LOGD_VPN, "invalid or missing tunnel device received!");
- nm_vpn_connection_config_maybe_complete (connection, FALSE);
- return FALSE;
+ if (val) {
+ if (G_VALUE_HOLDS (val, G_TYPE_STRING)) {
+ const char *tmp = g_value_get_string (val);
+
+ /* Backwards compat with NM-openswan */
+ if (g_strcmp0 (tmp, "_none_") != 0)
+ priv->ip_iface = g_strdup (tmp);
+ } else
+ LOG_INVALID_ARG (NM_VPN_PLUGIN_CONFIG_TUNDEV);
}
- /* Grab the interface index for address/routing operations */
- priv->ip_ifindex = nm_netlink_iface_to_index (priv->ip_iface);
- if (priv->ip_ifindex <= 0) {
- nm_log_err (LOGD_VPN, "(%s): failed to look up VPN interface index", priv->ip_iface);
- nm_vpn_connection_config_maybe_complete (connection, FALSE);
- return FALSE;
+ if (priv->ip_iface) {
+ /* Grab the interface index for address/routing operations */
+ priv->ip_ifindex = nm_platform_link_get_ifindex (priv->ip_iface);
+ if (!priv->ip_ifindex) {
+ nm_log_err (LOGD_VPN, "(%s): failed to look up VPN interface index", priv->ip_iface);
+ nm_vpn_connection_config_maybe_complete (connection, FALSE);
+ return FALSE;
+ }
}
+ g_clear_pointer (&priv->banner, g_free);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CONFIG_BANNER);
if (val) {
- g_free (priv->banner);
- priv->banner = g_strdup (g_value_get_string (val));
+ if (G_VALUE_HOLDS (val, G_TYPE_STRING))
+ priv->banner = g_strdup (g_value_get_string (val));
+ else
+ LOG_INVALID_ARG (NM_VPN_PLUGIN_CONFIG_BANNER);
}
/* External world-visible address of the VPN server */
priv->ip4_external_gw = 0;
- priv->ip6_external_gw = NULL;
+ g_clear_pointer (&priv->ip6_external_gw, g_free);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY);
if (val) {
+ GByteArray *ba;
+
if (G_VALUE_HOLDS (val, G_TYPE_UINT)) {
priv->ip4_external_gw = g_value_get_uint (val);
- } else if (G_VALUE_HOLDS (val, DBUS_TYPE_G_UCHAR_ARRAY)) {
- GByteArray *ba = g_value_get_boxed (val);
-
- if (ba->len == sizeof (struct in6_addr))
- priv->ip6_external_gw = g_memdup (ba->data, ba->len);
+ } else if (G_VALUE_HOLDS (val, DBUS_TYPE_G_UCHAR_ARRAY) &&
+ (ba = g_value_get_boxed (val)) &&
+ ba->len == sizeof (struct in6_addr)) {
+ priv->ip6_external_gw = g_memdup (ba->data, ba->len);
} else {
nm_log_err (LOGD_VPN, "(%s): VPN gateway is neither IPv4 nor IPv6", priv->ip_iface);
nm_vpn_connection_config_maybe_complete (connection, FALSE);
@@ -726,11 +997,14 @@ process_generic_config (NMVPNConnection *connection,
* like it's IP4-specific. So we store it for now and retrieve it
* later in ip4_config_get.
*/
+ priv->mtu = 0;
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CONFIG_MTU);
- if (val)
- priv->mtu = g_value_get_uint (val);
- else
- priv->mtu = 0;
+ if (val) {
+ if (G_VALUE_HOLDS (val, G_TYPE_UINT)) {
+ priv->mtu = g_value_get_uint (val);
+ } else
+ LOG_INVALID_ARG (NM_VPN_PLUGIN_CONFIG_MTU);
+ }
return TRUE;
}
@@ -747,19 +1021,48 @@ nm_vpn_connection_config_get (DBusGProxy *proxy,
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP Config Get) reply received.",
nm_connection_get_id (priv->connection));
+ if (priv->vpn_state == STATE_CONNECT)
+ _set_vpn_state (connection, STATE_IP_CONFIG_GET, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+
if (!process_generic_config (connection, config_hash))
return;
/* Note whether to expect IPv4 and IPv6 configs */
val = g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CONFIG_HAS_IP4);
- priv->has_ip4 = val ? g_value_get_boolean (val) : FALSE;
+ priv->has_ip4 = FALSE;
+ if (val) {
+ if (G_VALUE_HOLDS (val, G_TYPE_BOOLEAN))
+ priv->has_ip4 = g_value_get_boolean (val);
+ else
+ LOG_INVALID_ARG (NM_VPN_PLUGIN_CONFIG_HAS_IP4);
+ }
g_clear_object (&priv->ip4_config);
val = g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CONFIG_HAS_IP6);
- priv->has_ip6 = val ? g_value_get_boolean (val) : FALSE;
+ priv->has_ip6 = FALSE;
+ if (val) {
+ if (G_VALUE_HOLDS (val, G_TYPE_BOOLEAN))
+ priv->has_ip6 = g_value_get_boolean (val);
+ else
+ LOG_INVALID_ARG (NM_VPN_PLUGIN_CONFIG_HAS_IP6);
+ }
g_clear_object (&priv->ip6_config);
}
+static guint
+vpn_routing_metric (NMVPNConnection *connection)
+{
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+
+ if (priv->ip_ifindex)
+ return NM_PLATFORM_ROUTE_METRIC_DEFAULT;
+ else {
+ NMDevice *parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (connection));
+
+ return nm_device_get_priority (parent_dev);
+ }
+}
+
static void
nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
GHashTable *config_hash,
@@ -767,12 +1070,14 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
{
NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- NMSettingIP4Config *s_ip4;
- NMIP4Address *addr;
+ NMPlatformIP4Address address;
NMIP4Config *config;
GValue *val;
int i;
+ if (priv->vpn_state == STATE_CONNECT)
+ _set_vpn_state (connection, STATE_IP_CONFIG_GET, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+
if (priv->has_ip4) {
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP4 Config Get) reply received.",
nm_connection_get_id (priv->connection));
@@ -798,10 +1103,10 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
config = nm_ip4_config_new ();
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_prefix (addr, 24); /* default to class C */
+ memset (&address, 0, sizeof (address));
+ address.plen = 24;
if (priv->ip4_external_gw)
- nm_ip4_address_set_gateway (addr, priv->ip4_external_gw);
+ nm_ip4_config_set_gateway (config, priv->ip4_external_gw);
/* Internal address of the VPN subnet's gateway */
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY);
@@ -810,21 +1115,21 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS);
if (val)
- nm_ip4_address_set_address (addr, g_value_get_uint (val));
+ address.address = g_value_get_uint (val);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_PTP);
if (val)
- nm_ip4_config_set_ptp_address (config, g_value_get_uint (val));
+ address.peer_address = g_value_get_uint (val);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_PREFIX);
if (val)
- nm_ip4_address_set_prefix (addr, g_value_get_uint (val));
+ address.plen = g_value_get_uint (val);
- if (nm_ip4_address_get_address (addr) && nm_ip4_address_get_prefix (addr)) {
- nm_ip4_config_take_address (config, addr);
+ if (address.address && address.plen) {
+ address.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip4_config_add_address (config, &address);
} else {
nm_log_err (LOGD_VPN, "invalid IP4 config received!");
- nm_ip4_address_unref (addr);
g_object_unref (config);
nm_vpn_connection_config_maybe_complete (connection, FALSE);
return;
@@ -873,25 +1178,29 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
routes = nm_utils_ip4_routes_from_gvalue (val);
for (iter = routes; iter; iter = iter->next) {
- NMIP4Route *route = iter->data;
+ NMIP4Route *item = iter->data;
+ NMPlatformIP4Route route;
+
+ memset (&route, 0, sizeof (route));
+ route.network = nm_ip4_route_get_dest (item);
+ route.plen = nm_ip4_route_get_prefix (item);
+ route.gateway = nm_ip4_route_get_next_hop (item);
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ route.metric = vpn_routing_metric (connection);
/* Ignore host routes to the VPN gateway since NM adds one itself
* below. Since NM knows more about the routing situation than
* the VPN server, we want to use the NM created route instead of
* whatever the server provides.
*/
- if ( priv->ip4_external_gw
- && nm_ip4_route_get_dest (route) == priv->ip4_external_gw
- && nm_ip4_route_get_prefix (route) == 32) {
- nm_ip4_route_unref (route);
+ if (priv->ip4_external_gw && route.network == priv->ip4_external_gw && route.plen == 32)
continue;
- }
/* Otherwise accept the VPN-provided route */
- nm_ip4_config_take_route (config, route);
+ nm_ip4_config_add_route (config, &route);
}
- g_slist_free (routes);
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip4_route_unref);
}
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT);
@@ -899,10 +1208,13 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
nm_ip4_config_set_never_default (config, g_value_get_boolean (val));
/* Merge in user overrides from the NMConnection's IPv4 setting */
- s_ip4 = nm_connection_get_setting_ip4_config (priv->connection);
- nm_utils_merge_ip4_config (config, s_ip4);
+ nm_ip4_config_merge_setting (config,
+ nm_connection_get_setting_ip4_config (priv->connection),
+ vpn_routing_metric (connection));
priv->ip4_config = config;
+ nm_ip4_config_export (config);
+ g_object_notify (G_OBJECT (connection), NM_ACTIVE_CONNECTION_IP4_CONFIG);
nm_vpn_connection_config_maybe_complete (connection, TRUE);
}
@@ -913,8 +1225,7 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
{
NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- NMSettingIP6Config *s_ip6;
- NMIP6Address *addr;
+ NMPlatformIP6Address address;
NMIP6Config *config;
GValue *val;
int i;
@@ -922,6 +1233,9 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP6 Config Get) reply received.",
nm_connection_get_id (priv->connection));
+ if (priv->vpn_state == STATE_CONNECT)
+ _set_vpn_state (connection, STATE_IP_CONFIG_GET, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+
if (g_hash_table_size (config_hash) == 0) {
priv->has_ip6 = FALSE;
nm_vpn_connection_config_maybe_complete (connection, TRUE);
@@ -930,12 +1244,13 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
config = nm_ip6_config_new ();
- addr = nm_ip6_address_new ();
- nm_ip6_address_set_prefix (addr, 128); /* default to class C */
+ memset (&address, 0, sizeof (address));
+ address.plen = 128;
if (priv->ip6_external_gw)
- nm_ip6_address_set_gateway (addr, priv->ip6_external_gw);
+ nm_ip6_config_set_gateway (config, priv->ip6_external_gw);
/* Internal address of the VPN subnet's gateway */
+ g_clear_pointer (&priv->ip6_internal_gw, g_free);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY);
if (val) {
GByteArray *ba = g_value_get_boxed (val);
@@ -949,7 +1264,7 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
GByteArray *ba = g_value_get_boxed (val);
if (ba->len == sizeof (struct in6_addr))
- nm_ip6_address_set_address (addr, (struct in6_addr *)ba->data);
+ address.address = *(struct in6_addr *) ba->data;
}
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP6_CONFIG_PTP);
@@ -957,18 +1272,18 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
GByteArray *ba = g_value_get_boxed (val);
if (ba->len == sizeof (struct in6_addr))
- nm_ip6_config_set_ptp_address (config, (struct in6_addr *)ba->data);
+ address.peer_address = *(struct in6_addr *) ba->data;
}
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP6_CONFIG_PREFIX);
if (val)
- nm_ip6_address_set_prefix (addr, g_value_get_uint (val));
+ address.plen = g_value_get_uint (val);
- if (nm_ip6_address_get_address (addr) && nm_ip6_address_get_prefix (addr)) {
- nm_ip6_config_take_address (config, addr);
+ if (!IN6_IS_ADDR_UNSPECIFIED (&address.address) && address.plen) {
+ address.source = NM_PLATFORM_SOURCE_VPN;
+ nm_ip6_config_add_address (config, &address);
} else {
nm_log_err (LOGD_VPN, "invalid IP6 config received!");
- nm_ip6_address_unref (addr);
g_object_unref (config);
nm_vpn_connection_config_maybe_complete (connection, FALSE);
}
@@ -1009,26 +1324,29 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
routes = nm_utils_ip6_routes_from_gvalue (val);
for (iter = routes; iter; iter = iter->next) {
- NMIP6Route *route = iter->data;
+ NMIP6Route *item = iter->data;
+ NMPlatformIP6Route route;
+
+ memset (&route, 0, sizeof (route));
+ route.network = *nm_ip6_route_get_dest (item);
+ route.plen = nm_ip6_route_get_prefix (item);
+ route.gateway = *nm_ip6_route_get_next_hop (item);
+ route.source = NM_PLATFORM_SOURCE_VPN;
+ route.metric = vpn_routing_metric (connection);
/* Ignore host routes to the VPN gateway since NM adds one itself
* below. Since NM knows more about the routing situation than
* the VPN server, we want to use the NM created route instead of
* whatever the server provides.
*/
- if ( priv->ip6_external_gw
- && nm_ip6_route_get_prefix (route) == 128
- && memcmp (nm_ip6_route_get_dest (route), priv->ip6_external_gw,
- sizeof (struct in6_addr)) == 0) {
- nm_ip6_route_unref (route);
+ if (priv->ip6_external_gw && IN6_ARE_ADDR_EQUAL (&route.network, priv->ip6_external_gw) && route.plen == 128)
continue;
- }
/* Otherwise accept the VPN-provided route */
- nm_ip6_config_take_route (config, route);
+ nm_ip6_config_add_route (config, &route);
}
- g_slist_free (routes);
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip6_route_unref);
}
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT);
@@ -1036,57 +1354,96 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
nm_ip6_config_set_never_default (config, g_value_get_boolean (val));
/* Merge in user overrides from the NMConnection's IPv6 setting */
- s_ip6 = nm_connection_get_setting_ip6_config (priv->connection);
- nm_utils_merge_ip6_config (config, s_ip6);
+ nm_ip6_config_merge_setting (config,
+ nm_connection_get_setting_ip6_config (priv->connection),
+ vpn_routing_metric (connection));
priv->ip6_config = config;
+ nm_ip6_config_export (config);
+ g_object_notify (G_OBJECT (connection), NM_ACTIVE_CONNECTION_IP6_CONFIG);
nm_vpn_connection_config_maybe_complete (connection, TRUE);
}
static gboolean
-nm_vpn_connection_ip_config_timeout (gpointer user_data)
+connect_timeout_cb (gpointer user_data)
{
NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- priv->ipconfig_timeout = 0;
+ priv->connect_timeout = 0;
- /* If the activation request's state is still IP_CONFIG_GET and we're
- * in this timeout, cancel activation because it's taken too long.
- */
- if (nm_vpn_connection_get_vpn_state (connection) == NM_VPN_CONNECTION_STATE_IP_CONFIG_GET) {
- nm_log_warn (LOGD_VPN, "VPN connection '%s' (IP Config Get) timeout exceeded.",
+ /* Cancel activation if it's taken too long */
+ if (priv->vpn_state == STATE_CONNECT ||
+ priv->vpn_state == STATE_IP_CONFIG_GET) {
+ nm_log_warn (LOGD_VPN, "VPN connection '%s' connect timeout exceeded.",
nm_connection_get_id (priv->connection));
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_FAILED,
- NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT);
+ _set_vpn_state (connection, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT, FALSE);
}
return FALSE;
}
static void
-nm_vpn_connection_connect_cb (DBusGProxy *proxy, GError *err, gpointer user_data)
+connect_success (NMVPNConnection *connection)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ /* 40 second timeout waiting for IP config signal from VPN service */
+ priv->connect_timeout = g_timeout_add_seconds (40, connect_timeout_cb, connection);
+
+ g_hash_table_destroy (priv->connect_hash);
+ priv->connect_hash = NULL;
+}
+
+static void
+connect_cb (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+ NMVPNConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ GError *err = NULL;
+
nm_log_info (LOGD_VPN, "VPN connection '%s' (Connect) reply received.",
nm_connection_get_id (priv->connection));
- if (err) {
- nm_log_warn (LOGD_VPN, "VPN connection '%s' failed to connect: '%s'.",
- nm_connection_get_id (priv->connection), err->message);
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_FAILED,
- NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED);
+ dbus_g_proxy_end_call (proxy, call, &err, G_TYPE_INVALID);
+ if (!err) {
+ connect_success (self);
+ return;
+ }
+
+ nm_log_warn (LOGD_VPN, "VPN connection '%s' failed to connect: '%s'.",
+ nm_connection_get_id (priv->connection), err->message);
+ g_error_free (err);
+ _set_vpn_state (self, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED, FALSE);
+}
+
+static void
+connect_interactive_cb (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+ NMVPNConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ GError *err = NULL;
+
+ nm_log_info (LOGD_VPN, "VPN connection '%s' (ConnectInteractive) reply received.",
+ nm_connection_get_id (priv->connection));
+
+ dbus_g_proxy_end_call (proxy, call, &err, G_TYPE_INVALID);
+ if (!err) {
+ connect_success (self);
+ return;
+ }
+
+ if (dbus_g_error_has_name (err, NM_DBUS_VPN_ERROR_PREFIX "." NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED)) {
+ /* Fall back to Connect() */
+ dbus_g_proxy_begin_call (priv->proxy, "Connect",
+ connect_cb, self, NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, priv->connect_hash,
+ G_TYPE_INVALID);
} else {
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_IP_CONFIG_GET,
- NM_VPN_CONNECTION_STATE_REASON_NONE);
-
- /* 40 second timeout waiting for IP config signal from VPN service */
- priv->ipconfig_timeout = g_timeout_add_seconds (40, nm_vpn_connection_ip_config_timeout, connection);
+ nm_log_warn (LOGD_VPN, "VPN connection '%s' failed to connect interactively: '%s'.",
+ nm_connection_get_id (priv->connection), err->message);
+ g_error_free (err);
+ _set_vpn_state (self, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED, FALSE);
}
}
@@ -1122,74 +1479,90 @@ static void
really_activate (NMVPNConnection *connection, const char *username)
{
NMVPNConnectionPrivate *priv;
- GHashTable *hash;
+ NMAgentManager *agent_mgr;
+ GHashTable *details;
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
- g_return_if_fail (nm_vpn_connection_get_vpn_state (connection) == NM_VPN_CONNECTION_STATE_NEED_AUTH);
priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ g_return_if_fail (priv->vpn_state == STATE_NEED_AUTH);
dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE, G_TYPE_VALUE, G_TYPE_INVALID);
+ G_TYPE_NONE, G_TYPE_VALUE, G_TYPE_INVALID);
- /* Config signal */
- dbus_g_proxy_add_signal (priv->proxy, "Config",
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->proxy, "Config", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "Config",
- G_CALLBACK (nm_vpn_connection_config_get),
- connection, NULL);
+ G_CALLBACK (nm_vpn_connection_config_get),
+ connection, NULL);
/* Ip4Config signal */
- dbus_g_proxy_add_signal (priv->proxy, "Ip4Config",
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->proxy, "Ip4Config", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "Ip4Config",
- G_CALLBACK (nm_vpn_connection_ip4_config_get),
- connection, NULL);
+ G_CALLBACK (nm_vpn_connection_ip4_config_get),
+ connection, NULL);
/* Ip6Config signal */
- dbus_g_proxy_add_signal (priv->proxy, "Ip6Config",
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->proxy, "Ip6Config", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "Ip6Config",
- G_CALLBACK (nm_vpn_connection_ip6_config_get),
- connection, NULL);
-
- hash = _hash_with_username (priv->connection, username);
- org_freedesktop_NetworkManager_VPN_Plugin_connect_async (priv->proxy,
- hash,
- nm_vpn_connection_connect_cb,
- connection);
- g_hash_table_destroy (hash);
-
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_CONNECT,
- NM_VPN_CONNECTION_STATE_REASON_NONE);
+ G_CALLBACK (nm_vpn_connection_ip6_config_get),
+ connection, NULL);
+
+ if (priv->connect_hash)
+ g_hash_table_destroy (priv->connect_hash);
+ priv->connect_hash = _hash_with_username (priv->connection, username);
+ details = g_hash_table_new (g_str_hash, g_str_equal);
+
+ /* If at least one agent doesn't support VPN hints, then we can't use
+ * ConnectInteractive(), because that agent won't be able to pass hints
+ * from the VPN plugin's interactive secrets requests to the VPN authentication
+ * dialog and we won't get the secrets we need. In this case fall back to
+ * the old Connect() call.
+ */
+ agent_mgr = nm_agent_manager_get ();
+ if (nm_agent_manager_all_agents_have_capability (agent_mgr,
+ nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (connection)),
+ NM_SECRET_AGENT_CAPABILITY_VPN_HINTS)) {
+ nm_log_dbg (LOGD_VPN, "Allowing interactive secrets as all agents have that capability");
+ dbus_g_proxy_begin_call (priv->proxy, "ConnectInteractive",
+ connect_interactive_cb, connection, NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, priv->connect_hash,
+ DBUS_TYPE_G_MAP_OF_VARIANT, details,
+ G_TYPE_INVALID);
+ } else {
+ nm_log_dbg (LOGD_VPN, "Calling old Connect function as not all agents support interactive secrets");
+ dbus_g_proxy_begin_call (priv->proxy, "Connect",
+ connect_cb, connection, NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, priv->connect_hash,
+ G_TYPE_INVALID);
+ }
+ g_object_unref (agent_mgr);
+ g_hash_table_destroy (details);
+
+ _set_vpn_state (connection, STATE_CONNECT, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
}
void
nm_vpn_connection_activate (NMVPNConnection *connection)
{
NMVPNConnectionPrivate *priv;
- NMDBusManager *dbus_mgr;
+ DBusGConnection *bus;
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
- g_return_if_fail (nm_vpn_connection_get_vpn_state (connection) == NM_VPN_CONNECTION_STATE_PREPARE);
priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- dbus_mgr = nm_dbus_manager_get ();
- priv->proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (dbus_mgr),
+ _set_vpn_state (connection, STATE_PREPARE, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+
+ bus = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
+ priv->proxy = dbus_g_proxy_new_for_name (bus,
nm_vpn_connection_get_service (connection),
NM_VPN_DBUS_PLUGIN_PATH,
NM_VPN_DBUS_PLUGIN_INTERFACE);
- g_object_unref (dbus_mgr);
dbus_g_proxy_add_signal (priv->proxy, "Failure", G_TYPE_UINT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "Failure",
- G_CALLBACK (plugin_failed),
- connection, NULL);
+ G_CALLBACK (plugin_failed),
+ connection, NULL);
/* StateChanged signal */
dbus_g_proxy_add_signal (priv->proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID);
@@ -1197,9 +1570,21 @@ nm_vpn_connection_activate (NMVPNConnection *connection)
G_CALLBACK (plugin_state_changed),
connection, NULL);
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_NEED_AUTH,
- NM_VPN_CONNECTION_STATE_REASON_NONE);
+ dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
+ G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->proxy, "SecretsRequired", G_TYPE_STRING, G_TYPE_STRV, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->proxy, "SecretsRequired",
+ G_CALLBACK (plugin_interactive_secrets_required),
+ connection, NULL);
+
+ _set_vpn_state (connection, STATE_NEED_AUTH, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+
+ /* Kick off the secrets requests; first we get existing system secrets
+ * and ask the plugin if these are sufficient, next we get all existing
+ * secrets from system and from user agents and ask the plugin again,
+ * and last we ask the user for new secrets if required.
+ */
+ get_secrets (connection, SECRETS_REQ_SYSTEM, NULL);
}
NMConnection *
@@ -1215,7 +1600,7 @@ nm_vpn_connection_get_vpn_state (NMVPNConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NM_VPN_CONNECTION_STATE_UNKNOWN);
- return NM_VPN_CONNECTION_GET_PRIVATE (connection)->vpn_state;
+ return _state_to_nm_vpn_state (NM_VPN_CONNECTION_GET_PRIVATE (connection)->vpn_state);
}
const char *
@@ -1258,14 +1643,6 @@ nm_vpn_connection_get_ip_ifindex (NMVPNConnection *connection)
return NM_VPN_CONNECTION_GET_PRIVATE (connection)->ip_ifindex;
}
-NMDevice *
-nm_vpn_connection_get_parent_device (NMVPNConnection *connection)
-{
- g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
-
- return NM_VPN_CONNECTION_GET_PRIVATE (connection)->parent_dev;
-}
-
guint32
nm_vpn_connection_get_ip4_internal_gateway (NMVPNConnection *connection)
{
@@ -1283,38 +1660,46 @@ nm_vpn_connection_get_ip6_internal_gateway (NMVPNConnection *connection)
}
void
-nm_vpn_connection_fail (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason)
+nm_vpn_connection_disconnect (NMVPNConnection *connection,
+ NMVPNConnectionStateReason reason,
+ gboolean quitting)
{
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_FAILED,
- reason);
+ _set_vpn_state (connection, STATE_DISCONNECTED, reason, quitting);
}
-void
-nm_vpn_connection_disconnect (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason)
+gboolean
+nm_vpn_connection_deactivate (NMVPNConnection *connection,
+ NMVPNConnectionStateReason reason,
+ gboolean quitting)
{
- g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
+ NMVPNConnectionPrivate *priv;
+ gboolean success = FALSE;
- nm_vpn_connection_set_vpn_state (connection,
- NM_VPN_CONNECTION_STATE_DISCONNECTED,
- reason);
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), FALSE);
+
+ priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ if (priv->vpn_state > STATE_UNKNOWN && priv->vpn_state <= STATE_DEACTIVATING) {
+ _set_vpn_state (connection, STATE_DEACTIVATING, reason, quitting);
+ success = TRUE;
+ }
+ return success;
}
/******************************************************************************/
static void
-plugin_need_secrets_cb (DBusGProxy *proxy,
- char *setting_name,
- GError *error,
- gpointer user_data)
+plugin_need_secrets_cb (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
{
NMVPNConnection *self = NM_VPN_CONNECTION (user_data);
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ GError *error = NULL;
+ char *setting_name;
+ dbus_g_proxy_end_call (proxy, call, &error,
+ G_TYPE_STRING, &setting_name,
+ G_TYPE_INVALID);
if (error) {
nm_log_err (LOGD_VPN, "(%s/%s) plugin NeedSecrets request #%d failed: %s %s",
nm_connection_get_uuid (priv->connection),
@@ -1322,7 +1707,8 @@ plugin_need_secrets_cb (DBusGProxy *proxy,
priv->secrets_idx + 1,
g_quark_to_string (error->domain),
error->message);
- nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS);
+ _set_vpn_state (self, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS, FALSE);
+ g_error_free (error);
return;
}
@@ -1333,13 +1719,13 @@ plugin_need_secrets_cb (DBusGProxy *proxy,
nm_log_err (LOGD_VPN, "(%s/%s) final secrets request failed to provide sufficient secrets",
nm_connection_get_uuid (priv->connection),
nm_connection_get_id (priv->connection));
- nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS);
+ _set_vpn_state (self, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS, FALSE);
} else {
nm_log_dbg (LOGD_VPN, "(%s/%s) service indicated additional secrets required",
nm_connection_get_uuid (priv->connection),
nm_connection_get_id (priv->connection));
- get_secrets (self, priv->secrets_idx + 1);
+ get_secrets (self, priv->secrets_idx + 1, NULL);
}
return;
}
@@ -1353,6 +1739,24 @@ plugin_need_secrets_cb (DBusGProxy *proxy,
}
static void
+plugin_new_secrets_cb (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+ NMVPNConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ GError *error = NULL;
+
+ if (!dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) {
+ nm_log_err (LOGD_VPN, "(%s/%s) sending new secrets to the plugin failed: %s %s",
+ nm_connection_get_uuid (priv->connection),
+ nm_connection_get_id (priv->connection),
+ g_quark_to_string (error->domain),
+ error->message);
+ _set_vpn_state (self, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS, FALSE);
+ g_error_free (error);
+ }
+}
+
+static void
get_secrets_cb (NMSettingsConnection *connection,
guint32 call_id,
const char *agent_username,
@@ -1372,41 +1776,54 @@ get_secrets_cb (NMSettingsConnection *connection,
if (error) {
nm_log_err (LOGD_VPN, "Failed to request VPN secrets #%d: (%d) %s",
priv->secrets_idx + 1, error->code, error->message);
- nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS);
+ _set_vpn_state (self, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS, FALSE);
} else {
- nm_log_dbg (LOGD_VPN, "(%s/%s) asking service if additional secrets are required",
- nm_connection_get_uuid (priv->connection),
- nm_connection_get_id (priv->connection));
-
/* Cache the username for later */
if (agent_username) {
g_free (priv->username);
priv->username = g_strdup (agent_username);
}
- /* Ask the VPN service if more secrets are required */
hash = _hash_with_username (priv->connection, priv->username);
- org_freedesktop_NetworkManager_VPN_Plugin_need_secrets_async (priv->proxy,
- hash,
- plugin_need_secrets_cb,
- self);
+
+ if (priv->secrets_idx == SECRETS_REQ_INTERACTIVE) {
+ nm_log_dbg (LOGD_VPN, "(%s/%s) sending secrets to the plugin",
+ nm_connection_get_uuid (priv->connection),
+ nm_connection_get_id (priv->connection));
+
+ /* Send the secrets back to the plugin */
+ dbus_g_proxy_begin_call (priv->proxy, "NewSecrets",
+ plugin_new_secrets_cb, self, NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, hash,
+ G_TYPE_INVALID);
+ } else {
+ nm_log_dbg (LOGD_VPN, "(%s/%s) asking service if additional secrets are required",
+ nm_connection_get_uuid (priv->connection),
+ nm_connection_get_id (priv->connection));
+
+ /* Ask the VPN service if more secrets are required */
+ dbus_g_proxy_begin_call (priv->proxy, "NeedSecrets",
+ plugin_need_secrets_cb, self, NULL,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, hash,
+ G_TYPE_INVALID);
+ }
+
g_hash_table_destroy (hash);
}
}
static void
-get_secrets (NMVPNConnection *self, SecretsReq secrets_idx)
+get_secrets (NMVPNConnection *self,
+ SecretsReq secrets_idx,
+ const char **hints)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_NONE;
GError *error = NULL;
- gboolean filter_by_uid;
g_return_if_fail (secrets_idx < SECRETS_REQ_LAST);
priv->secrets_idx = secrets_idx;
- filter_by_uid = nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self));
-
nm_log_dbg (LOGD_VPN, "(%s/%s) requesting VPN secrets pass #%d",
nm_connection_get_uuid (priv->connection),
nm_connection_get_id (priv->connection),
@@ -1415,12 +1832,12 @@ get_secrets (NMVPNConnection *self, SecretsReq secrets_idx)
switch (priv->secrets_idx) {
case SECRETS_REQ_SYSTEM:
flags = NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM;
- filter_by_uid = FALSE;
break;
case SECRETS_REQ_EXISTING:
flags = NM_SETTINGS_GET_SECRETS_FLAG_NONE;
break;
case SECRETS_REQ_NEW:
+ case SECRETS_REQ_INTERACTIVE:
flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
break;
default:
@@ -1431,11 +1848,10 @@ get_secrets (NMVPNConnection *self, SecretsReq secrets_idx)
flags |= NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED;
priv->secrets_id = nm_settings_connection_get_secrets (NM_SETTINGS_CONNECTION (priv->connection),
- filter_by_uid,
- nm_active_connection_get_user_uid (NM_ACTIVE_CONNECTION (self)),
+ nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (self)),
NM_SETTING_VPN_SETTING_NAME,
flags,
- NULL,
+ hints,
get_secrets_cb,
self,
&error);
@@ -1444,46 +1860,63 @@ get_secrets (NMVPNConnection *self, SecretsReq secrets_idx)
nm_log_err (LOGD_VPN, "failed to request VPN secrets #%d: (%d) %s",
priv->secrets_idx + 1, error->code, error->message);
}
- nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS);
+ _set_vpn_state (self, STATE_FAILED, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS, FALSE);
g_clear_error (&error);
}
}
+static void
+plugin_interactive_secrets_required (DBusGProxy *proxy,
+ const char *message,
+ const char **secrets,
+ gpointer user_data)
+{
+ NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ guint32 secrets_len = secrets ? g_strv_length ((char **) secrets) : 0;
+ char **hints;
+ guint32 i;
+
+ nm_log_info (LOGD_VPN, "VPN plugin requested secrets; state %s (%d)",
+ vpn_state_to_string (priv->vpn_state), priv->vpn_state);
+
+ g_return_if_fail (priv->vpn_state == STATE_CONNECT ||
+ priv->vpn_state == STATE_NEED_AUTH);
+
+ priv->secrets_idx = SECRETS_REQ_INTERACTIVE;
+ _set_vpn_state (connection, STATE_NEED_AUTH, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+
+ /* Copy hints and add message to the end */
+ hints = g_malloc0 (sizeof (char *) * (secrets_len + 2));
+ for (i = 0; i < secrets_len; i++)
+ hints[i] = g_strdup (secrets[i]);
+ if (message)
+ hints[i] = g_strdup_printf ("x-vpn-message:%s", message);
+
+ get_secrets (connection, SECRETS_REQ_INTERACTIVE, (const char **) hints);
+ g_strfreev (hints);
+}
+
/******************************************************************************/
static void
nm_vpn_connection_init (NMVPNConnection *self)
{
- NM_VPN_CONNECTION_GET_PRIVATE (self)->vpn_state = NM_VPN_CONNECTION_STATE_PREPARE;
+ NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+
+ priv->vpn_state = STATE_WAITING;
+ priv->secrets_idx = SECRETS_REQ_SYSTEM;
}
static void
constructed (GObject *object)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
NMConnection *connection;
- NMDevice *device;
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->constructed (object);
connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (object));
- priv->connection = g_object_ref (connection);
-
- device = (NMDevice *) nm_active_connection_get_device (NM_ACTIVE_CONNECTION (object));
- g_assert (device);
-
- priv->parent_dev = g_object_ref (device);
-
- priv->device_monitor = g_signal_connect (device, "state-changed",
- G_CALLBACK (device_state_changed),
- object);
-
- priv->device_ip4 = g_signal_connect (device, "notify::" NM_DEVICE_IP4_CONFIG,
- G_CALLBACK (device_ip4_config_changed),
- object);
- priv->device_ip6 = g_signal_connect (device, "notify::" NM_DEVICE_IP6_CONFIG,
- G_CALLBACK (device_ip6_config_changed),
- object);
+ NM_VPN_CONNECTION_GET_PRIVATE (object)->connection = g_object_ref (connection);
}
static void
@@ -1491,47 +1924,28 @@ dispose (GObject *object)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
- if (priv->disposed) {
- G_OBJECT_CLASS (nm_vpn_connection_parent_class)->dispose (object);
- return;
+ if (priv->connect_hash) {
+ g_hash_table_destroy (priv->connect_hash);
+ priv->connect_hash = NULL;
}
- priv->disposed = TRUE;
-
- if (priv->gw_route)
- rtnl_route_put (priv->gw_route);
- if (priv->ip6_internal_gw)
- g_free (priv->ip6_internal_gw);
- if (priv->ip6_external_gw)
- g_free (priv->ip6_external_gw);
-
- if (priv->device_ip4)
- g_signal_handler_disconnect (priv->parent_dev, priv->device_ip4);
- if (priv->device_ip6)
- g_signal_handler_disconnect (priv->parent_dev, priv->device_ip6);
- if (priv->device_monitor)
- g_signal_handler_disconnect (priv->parent_dev, priv->device_monitor);
-
- g_clear_object (&priv->parent_dev);
-
- if (priv->ip4_config)
- g_object_unref (priv->ip4_config);
- if (priv->ip6_config)
- g_object_unref (priv->ip6_config);
-
- if (priv->ipconfig_timeout)
- g_source_remove (priv->ipconfig_timeout);
+ if (priv->connect_timeout) {
+ g_source_remove (priv->connect_timeout);
+ priv->connect_timeout = 0;
+ }
- if (priv->proxy)
- g_object_unref (priv->proxy);
+ dispatcher_cleanup (NM_VPN_CONNECTION (object));
if (priv->secrets_id) {
nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (priv->connection),
priv->secrets_id);
+ priv->secrets_id = 0;
}
+ g_clear_object (&priv->ip4_config);
+ g_clear_object (&priv->ip6_config);
+ g_clear_object (&priv->proxy);
g_clear_object (&priv->connection);
- g_free (priv->username);
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->dispose (object);
}
@@ -1543,25 +1957,48 @@ finalize (GObject *object)
g_free (priv->banner);
g_free (priv->ip_iface);
+ g_free (priv->username);
+ g_free (priv->ip6_internal_gw);
+ g_free (priv->ip6_external_gw);
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->finalize (object);
}
+static gboolean
+ip_config_valid (VpnState state)
+{
+ return (state == STATE_PRE_UP || state == STATE_ACTIVATED);
+}
+
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+ NMDevice *parent_dev;
switch (prop_id) {
case PROP_VPN_STATE:
- g_value_set_uint (value, priv->vpn_state);
+ g_value_set_uint (value, _state_to_nm_vpn_state (priv->vpn_state));
break;
case PROP_BANNER:
g_value_set_string (value, priv->banner ? priv->banner : "");
break;
+ case PROP_IP4_CONFIG:
+ if (ip_config_valid (priv->vpn_state) && priv->ip4_config)
+ g_value_set_boxed (value, nm_ip4_config_get_dbus_path (priv->ip4_config));
+ else
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_IP6_CONFIG:
+ if (ip_config_valid (priv->vpn_state) && priv->ip6_config)
+ g_value_set_boxed (value, nm_ip6_config_get_dbus_path (priv->ip6_config));
+ else
+ g_value_set_boxed (value, "/");
+ break;
case PROP_MASTER:
- g_value_set_boxed (value, nm_device_get_path (priv->parent_dev));
+ parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (object));
+ g_value_set_boxed (value, parent_dev ? nm_device_get_path (parent_dev) : "/");
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1573,6 +2010,7 @@ static void
nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (connection_class);
+ NMActiveConnectionClass *active_class = NM_ACTIVE_CONNECTION_CLASS (connection_class);
g_type_class_add_private (connection_class, sizeof (NMVPNConnectionPrivate));
@@ -1581,6 +2019,7 @@ nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
object_class->constructed = constructed;
object_class->dispose = dispose;
object_class->finalize = finalize;
+ active_class->device_state_changed = device_state_changed;
g_object_class_override_property (object_class, PROP_MASTER, NM_ACTIVE_CONNECTION_MASTER);
@@ -1601,24 +2040,28 @@ nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
NULL,
G_PARAM_READABLE));
+ g_object_class_override_property (object_class, PROP_IP4_CONFIG,
+ NM_ACTIVE_CONNECTION_IP4_CONFIG);
+ g_object_class_override_property (object_class, PROP_IP6_CONFIG,
+ NM_ACTIVE_CONNECTION_IP6_CONFIG);
+
/* signals */
signals[VPN_STATE_CHANGED] =
g_signal_new ("vpn-state-changed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
signals[INTERNAL_STATE_CHANGED] =
g_signal_new (NM_VPN_CONNECTION_INTERNAL_STATE_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL,
- _nm_marshal_VOID__UINT_UINT_UINT,
+ 0, NULL, NULL, NULL,
G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
- dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (object_class),
- &dbus_glib_nm_vpn_connection_object_info);
+ nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
+ G_TYPE_FROM_CLASS (object_class),
+ &dbus_glib_nm_vpn_connection_object_info);
}
diff --git a/src/vpn-manager/nm-vpn-connection.h b/src/vpn-manager/nm-vpn-connection.h
index bf5433456..c9c88cda1 100644
--- a/src/vpn-manager/nm-vpn-connection.h
+++ b/src/vpn-manager/nm-vpn-connection.h
@@ -26,6 +26,7 @@
#include <glib-object.h>
#include "NetworkManagerVPN.h"
#include "nm-device.h"
+#include "nm-auth-subject.h"
#define NM_TYPE_VPN_CONNECTION (nm_vpn_connection_get_type ())
#define NM_VPN_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_CONNECTION, NMVPNConnection))
@@ -67,22 +68,24 @@ GType nm_vpn_connection_get_type (void);
NMVPNConnection * nm_vpn_connection_new (NMConnection *connection,
NMDevice *parent_device,
const char *specific_object,
- gboolean user_requested,
- gulong user_uid);
+ NMAuthSubject *subject);
void nm_vpn_connection_activate (NMVPNConnection *connection);
NMConnection * nm_vpn_connection_get_connection (NMVPNConnection *connection);
NMVPNConnectionState nm_vpn_connection_get_vpn_state (NMVPNConnection *connection);
const char * nm_vpn_connection_get_banner (NMVPNConnection *connection);
-void nm_vpn_connection_fail (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason);
+
+gboolean nm_vpn_connection_deactivate (NMVPNConnection *connection,
+ NMVPNConnectionStateReason reason,
+ gboolean quitting);
void nm_vpn_connection_disconnect (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason);
+ NMVPNConnectionStateReason reason,
+ gboolean quitting);
+
NMIP4Config * nm_vpn_connection_get_ip4_config (NMVPNConnection *connection);
NMIP6Config * nm_vpn_connection_get_ip6_config (NMVPNConnection *connection);
const char * nm_vpn_connection_get_ip_iface (NMVPNConnection *connection);
int nm_vpn_connection_get_ip_ifindex (NMVPNConnection *connection);
-NMDevice * nm_vpn_connection_get_parent_device (NMVPNConnection *connection);
guint32 nm_vpn_connection_get_ip4_internal_gateway (NMVPNConnection *connection);
struct in6_addr * nm_vpn_connection_get_ip6_internal_gateway (NMVPNConnection *connection);
diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c
index 7743fddd7..5550d4d6c 100644
--- a/src/vpn-manager/nm-vpn-manager.c
+++ b/src/vpn-manager/nm-vpn-manager.c
@@ -28,17 +28,16 @@
#include "nm-setting-vpn.h"
#include "nm-dbus-manager.h"
#include "NetworkManagerVPN.h"
-#include "nm-marshal.h"
#include "nm-enum-types.h"
#include "nm-logging.h"
+#define VPN_NAME_FILES_DIR NMCONFDIR "/VPN"
+
G_DEFINE_TYPE (NMVPNManager, nm_vpn_manager, G_TYPE_OBJECT)
#define NM_VPN_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_MANAGER, NMVPNManagerPrivate))
typedef struct {
- gboolean disposed;
-
GHashTable *services;
GFileMonitor *monitor;
guint monitor_id;
@@ -76,93 +75,47 @@ get_service_by_namefile (NMVPNManager *self, const char *namefile)
return NULL;
}
-static NMVPNConnection *
-find_active_vpn_connection_by_connection (NMVPNManager *self, NMConnection *connection)
-{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
- GHashTableIter iter;
- gpointer data;
- const GSList *active, *aiter;
- NMVPNConnection *found = NULL;
-
- g_return_val_if_fail (connection, NULL);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-
- g_hash_table_iter_init (&iter, priv->services);
- while (g_hash_table_iter_next (&iter, NULL, &data) && (found == NULL)) {
- active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data));
- for (aiter = active; aiter; aiter = g_slist_next (aiter)) {
- NMVPNConnection *vpn = NM_VPN_CONNECTION (aiter->data);
-
- if (nm_vpn_connection_get_connection (vpn) == connection) {
- found = vpn;
- break;
- }
- }
- }
- return found;
-}
-
-NMActiveConnection *
+gboolean
nm_vpn_manager_activate_connection (NMVPNManager *manager,
- NMConnection *connection,
- NMDevice *device,
- const char *specific_object,
- gboolean user_requested,
- gulong user_uid,
+ NMVPNConnection *vpn,
GError **error)
{
- NMSettingVPN *vpn_setting;
+ NMConnection *connection;
+ NMSettingVPN *s_vpn;
NMVPNService *service;
- NMVPNConnection *vpn = NULL;
const char *service_name;
+ NMDevice *device;
- g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), NULL);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
- g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail (*error == NULL, NULL);
+ g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), FALSE);
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), FALSE);
+ g_return_val_if_fail (error != NULL, FALSE);
+ g_return_val_if_fail (*error == NULL, FALSE);
+ device = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
+ g_assert (device);
if ( nm_device_get_state (device) != NM_DEVICE_STATE_ACTIVATED
&& nm_device_get_state (device) != NM_DEVICE_STATE_SECONDARIES) {
- g_set_error (error,
- NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE,
- "%s", "The base device for the VPN connection was not active.");
- return NULL;
- }
-
- vpn_setting = nm_connection_get_setting_vpn (connection);
- if (!vpn_setting) {
- g_set_error (error,
- NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_CONNECTION_INVALID,
- "%s", "The connection was not a VPN connection.");
- return NULL;
+ g_set_error_literal (error, NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE,
+ "The base device for the VPN connection was not active.");
+ return FALSE;
}
- vpn = find_active_vpn_connection_by_connection (manager, connection);
- if (vpn) {
- nm_vpn_connection_disconnect (vpn, NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED);
- vpn = NULL;
- }
+ connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (vpn));
+ g_assert (connection);
+ s_vpn = nm_connection_get_setting_vpn (connection);
+ g_assert (s_vpn);
- service_name = nm_setting_vpn_get_service_type (vpn_setting);
+ service_name = nm_setting_vpn_get_service_type (s_vpn);
g_assert (service_name);
service = g_hash_table_lookup (NM_VPN_MANAGER_GET_PRIVATE (manager)->services, service_name);
if (!service) {
- g_set_error (error,
- NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_SERVICE_INVALID,
+ g_set_error (error, NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_SERVICE_INVALID,
"The VPN service '%s' was not installed.",
service_name);
- return NULL;
+ return FALSE;
}
- return (NMActiveConnection *) nm_vpn_service_activate (service,
- connection,
- device,
- specific_object,
- user_requested,
- user_uid,
- error);
+ return nm_vpn_service_activate (service, vpn, error);
}
gboolean
@@ -170,51 +123,7 @@ nm_vpn_manager_deactivate_connection (NMVPNManager *self,
NMVPNConnection *connection,
NMVPNConnectionStateReason reason)
{
- NMVPNManagerPrivate *priv;
- GHashTableIter iter;
- gpointer data;
- const GSList *active, *aiter;
- gboolean success = FALSE;
-
- g_return_val_if_fail (self, FALSE);
- g_return_val_if_fail (NM_IS_VPN_MANAGER (self), FALSE);
- g_return_val_if_fail (connection != NULL, FALSE);
-
- priv = NM_VPN_MANAGER_GET_PRIVATE (self);
- g_hash_table_iter_init (&iter, priv->services);
- while (g_hash_table_iter_next (&iter, NULL, &data) && (success == FALSE)) {
- active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data));
- for (aiter = active; aiter; aiter = g_slist_next (aiter)) {
- NMVPNConnection *candidate = aiter->data;
-
- if (connection == candidate) {
- nm_vpn_connection_disconnect (connection, reason);
- success = TRUE;
- break;
- }
- }
- }
-
- return success;
-}
-
-static char *
-service_name_from_file (const char *path)
-{
- GKeyFile *kf = NULL;
- char *service_name = NULL;
-
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- if (!g_str_has_suffix (path, ".name"))
- return NULL;
-
- kf = g_key_file_new ();
- if (g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, NULL))
- service_name = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "service", NULL);
-
- g_key_file_free (kf);
- return service_name;
+ return nm_vpn_connection_deactivate (connection, reason, FALSE);
}
static void
@@ -222,34 +131,32 @@ try_add_service (NMVPNManager *self, const char *namefile)
{
NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
NMVPNService *service = NULL;
+ GHashTableIter iter;
GError *error = NULL;
const char *service_name;
- char *tmp;
g_return_if_fail (g_path_is_absolute (namefile));
/* Make sure we don't add dupes */
- tmp = service_name_from_file (namefile);
- if (tmp)
- service = g_hash_table_lookup (priv->services, tmp);
- g_free (tmp);
- if (service)
- return;
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &service)) {
+ if (g_strcmp0 (namefile, nm_vpn_service_get_name_file (service)) == 0)
+ return;
+ }
- /* New service, add it */
+ /* New service */
service = nm_vpn_service_new (namefile, &error);
- if (!service) {
+ if (service) {
+ service_name = nm_vpn_service_get_dbus_service (service);
+ g_hash_table_insert (priv->services, (char *) service_name, service);
+ nm_log_info (LOGD_VPN, "VPN: loaded %s", service_name);
+ } else {
nm_log_warn (LOGD_VPN, "failed to load VPN service file %s: (%d) %s",
namefile,
error ? error->code : -1,
error && error->message ? error->message : "(unknown)");
g_clear_error (&error);
- return;
}
-
- service_name = nm_vpn_service_get_dbus_service (service);
- g_hash_table_insert (priv->services, (char *) service_name, service);
- nm_log_info (LOGD_VPN, "VPN: loaded %s", service_name);
}
static void
@@ -279,7 +186,7 @@ vpn_dir_changed (GFileMonitor *monitor,
const char *service_name = nm_vpn_service_get_dbus_service (service);
/* Stop active VPN connections and destroy the service */
- nm_vpn_service_connections_stop (service, TRUE,
+ nm_vpn_service_stop_connections (service, FALSE,
NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
nm_log_info (LOGD_VPN, "VPN: unloaded %s", service_name);
g_hash_table_remove (priv->services, service_name);
@@ -351,21 +258,36 @@ nm_vpn_manager_init (NMVPNManager *self)
}
static void
+stop_all_services (NMVPNManager *self)
+{
+ NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ NMVPNService *service;
+
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &service)) {
+ nm_vpn_service_stop_connections (service,
+ TRUE,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
+ }
+}
+
+static void
dispose (GObject *object)
{
NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (object);
- if (!priv->disposed) {
- priv->disposed = TRUE;
-
- if (priv->monitor) {
- if (priv->monitor_id)
- g_signal_handler_disconnect (priv->monitor, priv->monitor_id);
- g_file_monitor_cancel (priv->monitor);
- g_object_unref (priv->monitor);
- }
+ if (priv->monitor) {
+ if (priv->monitor_id)
+ g_signal_handler_disconnect (priv->monitor, priv->monitor_id);
+ g_file_monitor_cancel (priv->monitor);
+ g_clear_object (&priv->monitor);
+ }
+ if (priv->services) {
+ stop_all_services (NM_VPN_MANAGER (object));
g_hash_table_destroy (priv->services);
+ priv->services = NULL;
}
G_OBJECT_CLASS (nm_vpn_manager_parent_class)->dispose (object);
diff --git a/src/vpn-manager/nm-vpn-manager.h b/src/vpn-manager/nm-vpn-manager.h
index 1d398ea2c..57f947b0e 100644
--- a/src/vpn-manager/nm-vpn-manager.h
+++ b/src/vpn-manager/nm-vpn-manager.h
@@ -59,13 +59,9 @@ GType nm_vpn_manager_get_type (void);
NMVPNManager *nm_vpn_manager_get (void);
-NMActiveConnection *nm_vpn_manager_activate_connection (NMVPNManager *manager,
- NMConnection *connection,
- NMDevice *device,
- const char *specific_object,
- gboolean user_requested,
- gulong user_uid,
- GError **error);
+gboolean nm_vpn_manager_activate_connection (NMVPNManager *manager,
+ NMVPNConnection *vpn,
+ GError **error);
gboolean nm_vpn_manager_deactivate_connection (NMVPNManager *manager,
NMVPNConnection *connection,
diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c
index 668cbf2e3..824543fa4 100644
--- a/src/vpn-manager/nm-vpn-service.c
+++ b/src/vpn-manager/nm-vpn-service.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2012 Red Hat, Inc.
+ * Copyright (C) 2005 - 2014 Red Hat, Inc.
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
@@ -38,30 +38,30 @@
G_DEFINE_TYPE (NMVPNService, nm_vpn_service, G_TYPE_OBJECT)
typedef struct {
- gboolean disposed;
-
- NMDBusManager *dbus_mgr;
char *name;
char *dbus_service;
char *program;
char *namefile;
- GPid pid;
- GSList *connections;
+ NMVPNConnection *active;
+ GSList *pending;
+
guint start_timeout;
- guint quit_timeout;
- guint child_watch;
- gulong name_owner_id;
+ gboolean service_running;
} NMVPNServicePrivate;
#define NM_VPN_SERVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_SERVICE, NMVPNServicePrivate))
+#define VPN_CONNECTION_GROUP "VPN Connection"
+
+static gboolean start_pending_vpn (NMVPNService *self);
+
NMVPNService *
nm_vpn_service_new (const char *namefile, GError **error)
{
- NMVPNService *self = NULL;
+ NMVPNService *self;
+ NMVPNServicePrivate *priv;
GKeyFile *kf;
- char *dbus_service = NULL, *program = NULL, *name = NULL;
g_return_val_if_fail (namefile != NULL, NULL);
g_return_val_if_fail (g_path_is_absolute (namefile), NULL);
@@ -72,41 +72,31 @@ nm_vpn_service_new (const char *namefile, GError **error)
return NULL;
}
- dbus_service = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "service", NULL);
- if (!dbus_service) {
- g_set_error (error, 0, 0, "VPN service file %s had no 'service' key", namefile);
- goto out;
- }
+ self = (NMVPNService *) g_object_new (NM_TYPE_VPN_SERVICE, NULL);
+ priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+ priv->namefile = g_strdup (namefile);
- program = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "program", NULL);
- if (!program) {
- g_set_error (error, 0, 0, "VPN service file %s had no 'program' key", namefile);
- goto out;
- }
+ priv->dbus_service = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "service", error);
+ if (!priv->dbus_service)
+ goto error;
- name = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "name", NULL);
- if (!name) {
- g_set_error (error, 0, 0, "VPN service file %s had no 'name' key", namefile);
- goto out;
- }
+ priv->program = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "program", error);
+ if (!priv->program)
+ goto error;
- self = (NMVPNService *) g_object_new (NM_TYPE_VPN_SERVICE, NULL);
- if (!self) {
- g_set_error (error, 0, 0, "out of memory creating VPN service object");
- goto out;
- }
+ priv->name = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "name", error);
+ if (!priv->name)
+ goto error;
- NM_VPN_SERVICE_GET_PRIVATE (self)->name = g_strdup (name);
- NM_VPN_SERVICE_GET_PRIVATE (self)->dbus_service = g_strdup (dbus_service);
- NM_VPN_SERVICE_GET_PRIVATE (self)->program = g_strdup (program);
- NM_VPN_SERVICE_GET_PRIVATE (self)->namefile = g_strdup (namefile);
+ priv->service_running = nm_dbus_manager_name_has_owner (nm_dbus_manager_get (), priv->dbus_service);
- out:
g_key_file_free (kf);
- g_free (dbus_service);
- g_free (program);
- g_free (name);
return self;
+
+error:
+ g_object_unref (self);
+ g_key_file_free (kf);
+ return NULL;
}
const char *
@@ -125,46 +115,60 @@ nm_vpn_service_get_name_file (NMVPNService *service)
return NM_VPN_SERVICE_GET_PRIVATE (service)->namefile;
}
+static void
+connection_vpn_state_changed (NMVPNConnection *connection,
+ NMVPNConnectionState new_state,
+ NMVPNConnectionState old_state,
+ NMVPNConnectionStateReason reason,
+ gpointer user_data)
+{
+ NMVPNService *self = NM_VPN_SERVICE (user_data);
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+
+ if (new_state == NM_VPN_CONNECTION_STATE_FAILED ||
+ new_state == NM_VPN_CONNECTION_STATE_DISCONNECTED) {
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_vpn_state_changed), self);
+ if (connection == priv->active) {
+ priv->active = NULL;
+ start_pending_vpn (self);
+ } else
+ priv->pending = g_slist_remove (priv->pending, connection);
+ g_object_unref (connection);
+ }
+}
+
void
-nm_vpn_service_connections_stop (NMVPNService *service,
- gboolean fail,
+nm_vpn_service_stop_connections (NMVPNService *service,
+ gboolean quitting,
NMVPNConnectionStateReason reason)
{
NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
- GSList *iter, *copy;
+ GSList *iter;
- /* Copy because stopping the connection may remove it from the list
- * in the the NMVPNService objects' VPN connection state handler.
+ /* Just add priv->active to the beginning of priv->pending,
+ * since we're going to clear priv->pending immediately anyway.
*/
- copy = g_slist_copy (priv->connections);
- for (iter = copy; iter; iter = iter->next) {
- if (fail)
- nm_vpn_connection_fail (NM_VPN_CONNECTION (iter->data), reason);
- else
- nm_vpn_connection_disconnect (NM_VPN_CONNECTION (iter->data), reason);
+ if (priv->active) {
+ priv->pending = g_slist_prepend (priv->pending, priv->active);
+ priv->active = NULL;
}
- g_slist_free (copy);
-}
-static void
-clear_quit_timeout (NMVPNService *self)
-{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+ for (iter = priv->pending; iter; iter = iter->next) {
+ NMVPNConnection *vpn = NM_VPN_CONNECTION (iter->data);
- if (priv->quit_timeout) {
- g_source_remove (priv->quit_timeout);
- priv->quit_timeout = 0;
+ g_signal_handlers_disconnect_by_func (vpn, G_CALLBACK (connection_vpn_state_changed), service);
+ if (quitting) {
+ /* Deactivate to allow pre-down before disconnecting */
+ nm_vpn_connection_deactivate (vpn, reason, quitting);
+ }
+ nm_vpn_connection_disconnect (vpn, reason, quitting);
+ g_object_unref (vpn);
}
+ g_clear_pointer (&priv->pending, g_slist_free);
}
-/*
- * nm_vpn_service_child_setup
- *
- * Set the process group ID of the newly forked process
- *
- */
static void
-nm_vpn_service_child_setup (gpointer user_data G_GNUC_UNUSED)
+_daemon_setup (gpointer user_data G_GNUC_UNUSED)
{
/* We are in the child process at this point */
pid_t pid = getpid ();
@@ -177,73 +181,37 @@ nm_vpn_service_child_setup (gpointer user_data G_GNUC_UNUSED)
nm_unblock_posix_signals (NULL);
}
-static void
-vpn_service_watch_cb (GPid pid, gint status, gpointer user_data)
-{
- NMVPNService *service = NM_VPN_SERVICE (user_data);
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
-
- if (WIFEXITED (status)) {
- guint err = WEXITSTATUS (status);
-
- if (err != 0) {
- nm_log_warn (LOGD_VPN, "VPN service '%s' exited with error: %d",
- priv->name, WSTOPSIG (status));
- }
- } else if (WIFSTOPPED (status)) {
- nm_log_warn (LOGD_VPN, "VPN service '%s' stopped unexpectedly with signal %d",
- priv->name, WSTOPSIG (status));
- } else if (WIFSIGNALED (status)) {
- nm_log_warn (LOGD_VPN, "VPN service '%s' died with signal %d",
- priv->name, WTERMSIG (status));
- } else {
- nm_log_warn (LOGD_VPN, "VPN service '%s' died from an unknown cause",
- priv->name);
- }
-
- priv->pid = 0;
- priv->child_watch = 0;
- clear_quit_timeout (service);
-
- nm_vpn_service_connections_stop (service, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
-}
-
static gboolean
-nm_vpn_service_timeout (gpointer data)
+_daemon_exec_timeout (gpointer data)
{
NMVPNService *self = NM_VPN_SERVICE (data);
NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
nm_log_warn (LOGD_VPN, "VPN service '%s' start timed out", priv->name);
priv->start_timeout = 0;
- nm_vpn_service_connections_stop (self, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT);
- return FALSE;
+ nm_vpn_service_stop_connections (self, FALSE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT);
+ return G_SOURCE_REMOVE;
}
static gboolean
nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
{
NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
+ GPid pid;
char *vpn_argv[2];
gboolean success = FALSE;
GError *spawn_error = NULL;
g_return_val_if_fail (NM_IS_VPN_SERVICE (service), FALSE);
- g_return_val_if_fail (error != NULL, FALSE);
- g_return_val_if_fail (*error == NULL, FALSE);
vpn_argv[0] = priv->program;
vpn_argv[1] = NULL;
- success = g_spawn_async (NULL, vpn_argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
- nm_vpn_service_child_setup, NULL, &priv->pid,
- &spawn_error);
+ success = g_spawn_async (NULL, vpn_argv, NULL, 0, _daemon_setup, NULL, &pid, &spawn_error);
if (success) {
- nm_log_info (LOGD_VPN, "VPN service '%s' started (%s), PID %d",
- priv->name, priv->dbus_service, priv->pid);
-
- priv->child_watch = g_child_watch_add (priv->pid, vpn_service_watch_cb, service);
- priv->start_timeout = g_timeout_add_seconds (5, nm_vpn_service_timeout, service);
+ nm_log_info (LOGD_VPN, "VPN service '%s' started (%s), PID %ld",
+ priv->name, priv->dbus_service, (long int) pid);
+ priv->start_timeout = g_timeout_add_seconds (5, _daemon_exec_timeout, service);
} else {
nm_log_warn (LOGD_VPN, "VPN service '%s': could not launch the VPN service. error: (%d) %s.",
priv->name,
@@ -254,7 +222,7 @@ nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED,
"%s", spawn_error ? spawn_error->message : "unknown g_spawn_async() error");
- nm_vpn_service_connections_stop (service, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED);
+ nm_vpn_service_stop_connections (service, FALSE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED);
if (spawn_error)
g_error_free (spawn_error);
}
@@ -263,132 +231,88 @@ nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
}
static gboolean
-ensure_killed (gpointer data)
+start_active_vpn (NMVPNService *self, GError **error)
{
- int pid = GPOINTER_TO_INT (data);
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
- if (kill (pid, 0) == 0)
- kill (pid, SIGKILL);
+ if (!priv->active)
+ return TRUE;
- /* ensure the child is reaped */
- nm_log_dbg (LOGD_VPN, "waiting for VPN service pid %d to exit", pid);
- waitpid (pid, NULL, 0);
- nm_log_dbg (LOGD_VPN, "VPN service pid %d cleaned up", pid);
+ if (priv->service_running) {
+ /* Just activate the VPN */
+ nm_vpn_connection_activate (priv->active);
+ return TRUE;
+ } else if (priv->start_timeout == 0) {
+ /* VPN service not running, start it */
+ nm_log_info (LOGD_VPN, "Starting VPN service '%s'...", priv->name);
+ return nm_vpn_service_daemon_exec (self, error);
+ }
- return FALSE;
+ /* Already started VPN service, waiting for it to appear on D-Bus */
+ return TRUE;
}
static gboolean
-service_quit (gpointer user_data)
+start_pending_vpn (NMVPNService *self)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (user_data);
-
- if (priv->pid) {
- if (kill (priv->pid, SIGTERM) == 0)
- g_timeout_add_seconds (2, ensure_killed, GINT_TO_POINTER (priv->pid));
- else {
- kill (priv->pid, SIGKILL);
-
- /* ensure the child is reaped */
- nm_log_dbg (LOGD_VPN, "waiting for VPN service pid %d to exit", priv->pid);
- waitpid (priv->pid, NULL, 0);
- nm_log_dbg (LOGD_VPN, "VPN service pid %d cleaned up", priv->pid);
- }
- priv->pid = 0;
- }
- priv->quit_timeout = 0;
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
- return FALSE;
-}
+ g_assert (priv->active == NULL);
-static void
-connection_vpn_state_changed (NMVPNConnection *connection,
- NMVPNConnectionState new_state,
- NMVPNConnectionState old_state,
- NMVPNConnectionStateReason reason,
- gpointer user_data)
-{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (user_data);
+ if (!priv->pending)
+ return TRUE;
- switch (new_state) {
- case NM_VPN_CONNECTION_STATE_FAILED:
- case NM_VPN_CONNECTION_STATE_DISCONNECTED:
- /* Remove the connection from our list */
- priv->connections = g_slist_remove (priv->connections, connection);
- g_object_unref (connection);
+ /* Make next VPN active */
+ priv->active = g_slist_nth_data (priv->pending, 0);
+ priv->pending = g_slist_remove (priv->pending, priv->active);
- if (priv->connections == NULL) {
- /* Tell the service to quit in a few seconds */
- if (!priv->quit_timeout)
- priv->quit_timeout = g_timeout_add_seconds (5, service_quit, user_data);
- }
- break;
- default:
- break;
- }
+ return start_active_vpn (self, NULL);
}
-NMVPNConnection *
+gboolean
nm_vpn_service_activate (NMVPNService *service,
- NMConnection *connection,
- NMDevice *device,
- const char *specific_object,
- gboolean user_requested,
- gulong user_uid,
+ NMVPNConnection *vpn,
GError **error)
{
- NMVPNConnection *vpn;
NMVPNServicePrivate *priv;
- g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
- g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail (*error == NULL, NULL);
+ g_return_val_if_fail (NM_IS_VPN_SERVICE (service), FALSE);
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), FALSE);
+ g_return_val_if_fail (error != NULL, FALSE);
+ g_return_val_if_fail (*error == NULL, FALSE);
priv = NM_VPN_SERVICE_GET_PRIVATE (service);
- clear_quit_timeout (service);
-
- vpn = nm_vpn_connection_new (connection, device, specific_object, user_requested, user_uid);
g_signal_connect (vpn, NM_VPN_CONNECTION_INTERNAL_STATE_CHANGED,
G_CALLBACK (connection_vpn_state_changed),
service);
- priv->connections = g_slist_prepend (priv->connections, g_object_ref (vpn));
+ /* Queue up the new VPN connection */
+ priv->pending = g_slist_append (priv->pending, g_object_ref (vpn));
- if (nm_dbus_manager_name_has_owner (priv->dbus_mgr, priv->dbus_service)) {
- // FIXME: fill in error when errors happen
- nm_vpn_connection_activate (vpn);
- } else if (priv->start_timeout == 0) {
- nm_log_info (LOGD_VPN, "Starting VPN service '%s'...", priv->name);
- if (!nm_vpn_service_daemon_exec (service, error))
- vpn = NULL;
+ /* Tell the active VPN to deactivate and wait for it to quit before we
+ * start the next VPN. The just-queued VPN will then be started from
+ * connection_vpn_state_changed().
+ */
+ if (priv->active) {
+ nm_vpn_connection_deactivate (priv->active, NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED, FALSE);
+ return TRUE;
}
- return vpn;
-}
-
-const GSList *
-nm_vpn_service_get_active_connections (NMVPNService *service)
-{
- g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL);
-
- return NM_VPN_SERVICE_GET_PRIVATE (service)->connections;
+ /* Otherwise start the next VPN */
+ return start_pending_vpn (service);
}
static void
-nm_vpn_service_name_owner_changed (NMDBusManager *mgr,
- const char *name,
- const char *old,
- const char *new,
- gpointer user_data)
+_name_owner_changed (NMDBusManager *mgr,
+ const char *name,
+ const char *old,
+ const char *new,
+ gpointer user_data)
{
NMVPNService *service = NM_VPN_SERVICE (user_data);
NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
- gboolean old_owner_good;
- gboolean new_owner_good;
- GSList *iter;
+ gboolean old_owner_good, new_owner_good, success;
if (strcmp (name, priv->dbus_service))
return;
@@ -399,20 +323,21 @@ nm_vpn_service_name_owner_changed (NMDBusManager *mgr,
priv->start_timeout = 0;
}
- old_owner_good = (old && (strlen (old) > 0));
- new_owner_good = (new && (strlen (new) > 0));
+ old_owner_good = (old && old[0]);
+ new_owner_good = (new && new[0]);
if (!old_owner_good && new_owner_good) {
- /* service just appeared */
+ /* service appeared */
+ priv->service_running = TRUE;
nm_log_info (LOGD_VPN, "VPN service '%s' appeared; activating connections", priv->name);
- clear_quit_timeout (service);
-
- for (iter = priv->connections; iter; iter = iter->next)
- nm_vpn_connection_activate (NM_VPN_CONNECTION (iter->data));
+ /* Expect success because the VPN service has already appeared */
+ success = start_active_vpn (service, NULL);
+ g_warn_if_fail (success);
} else if (old_owner_good && !new_owner_good) {
/* service went away */
+ priv->service_running = FALSE;
nm_log_info (LOGD_VPN, "VPN service '%s' disappeared", priv->name);
- nm_vpn_service_connections_stop (service, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
+ nm_vpn_service_stop_connections (service, FALSE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
}
}
@@ -421,13 +346,10 @@ nm_vpn_service_name_owner_changed (NMDBusManager *mgr,
static void
nm_vpn_service_init (NMVPNService *self)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
-
- priv->dbus_mgr = nm_dbus_manager_get ();
- priv->name_owner_id = g_signal_connect (priv->dbus_mgr,
- NM_DBUS_MANAGER_NAME_OWNER_CHANGED,
- G_CALLBACK (nm_vpn_service_name_owner_changed),
- self);
+ g_signal_connect (nm_dbus_manager_get (),
+ NM_DBUS_MANAGER_NAME_OWNER_CHANGED,
+ G_CALLBACK (_name_owner_changed),
+ self);
}
static void
@@ -436,34 +358,33 @@ dispose (GObject *object)
NMVPNService *self = NM_VPN_SERVICE (object);
NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
- if (priv->disposed)
- goto out;
- priv->disposed = TRUE;
-
- if (priv->start_timeout)
+ if (priv->start_timeout) {
g_source_remove (priv->start_timeout);
+ priv->start_timeout = 0;
+ }
- nm_vpn_service_connections_stop (NM_VPN_SERVICE (object),
- FALSE,
- NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
-
- g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id);
+ /* VPNService owner is required to stop connections before releasing */
+ g_assert (priv->active == NULL);
+ g_assert (priv->pending == NULL);
- if (priv->child_watch)
- g_source_remove (priv->child_watch);
+ g_signal_handlers_disconnect_by_func (nm_dbus_manager_get (),
+ G_CALLBACK (_name_owner_changed),
+ self);
- clear_quit_timeout (self);
- service_quit (self);
+ G_OBJECT_CLASS (nm_vpn_service_parent_class)->dispose (object);
+}
- g_object_unref (priv->dbus_mgr);
+static void
+finalize (GObject *object)
+{
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (object);
g_free (priv->name);
g_free (priv->dbus_service);
g_free (priv->program);
g_free (priv->namefile);
-out:
- G_OBJECT_CLASS (nm_vpn_service_parent_class)->dispose (object);
+ G_OBJECT_CLASS (nm_vpn_service_parent_class)->finalize (object);
}
static void
@@ -475,4 +396,5 @@ nm_vpn_service_class_init (NMVPNServiceClass *service_class)
/* virtual methods */
object_class->dispose = dispose;
+ object_class->finalize = finalize;
}
diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h
index e883d55f8..4545d1f07 100644
--- a/src/vpn-manager/nm-vpn-service.h
+++ b/src/vpn-manager/nm-vpn-service.h
@@ -34,8 +34,6 @@
#define NM_IS_VPN_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_SERVICE))
#define NM_VPN_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_SERVICE, NMVPNServiceClass))
-#define VPN_CONNECTION_GROUP "VPN Connection"
-
typedef struct {
GObject parent;
} NMVPNService;
@@ -54,18 +52,12 @@ const char *nm_vpn_service_get_dbus_service (NMVPNService *service);
/* Returns the path of the VPN service's .name file */
const char *nm_vpn_service_get_name_file (NMVPNService *service);
-NMVPNConnection * nm_vpn_service_activate (NMVPNService *service,
- NMConnection *connection,
- NMDevice *device,
- const char *specific_object,
- gboolean user_requested,
- gulong user_uid,
- GError **error);
-
-const GSList *nm_vpn_service_get_active_connections (NMVPNService *service);
+gboolean nm_vpn_service_activate (NMVPNService *service,
+ NMVPNConnection *vpn,
+ GError **error);
-void nm_vpn_service_connections_stop (NMVPNService *service,
- gboolean fail,
+void nm_vpn_service_stop_connections (NMVPNService *service,
+ gboolean quitting,
NMVPNConnectionStateReason reason);
#endif /* NM_VPN_VPN_SERVICE_H */
diff --git a/src/wifi/Makefile.am b/src/wifi/Makefile.am
deleted file mode 100644
index 41007432f..000000000
--- a/src/wifi/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-noinst_LTLIBRARIES = libwifi-utils.la
-
-libwifi_utils_la_SOURCES = \
- wifi-utils.c \
- wifi-utils.h \
- wifi-utils-private.h \
- wifi-utils-nl80211.c \
- wifi-utils-nl80211.h
-
-if WITH_WEXT
-libwifi_utils_la_SOURCES += wifi-utils-wext.c wifi-utils-wext.h
-endif
-
-libwifi_utils_la_CPPFLAGS = \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/src \
- $(GLIB_CFLAGS) \
- $(LIBNL_CFLAGS)
-
-libwifi_utils_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(LIBNL_LIBS)
-
diff --git a/src/wifi/Makefile.in b/src/wifi/Makefile.in
deleted file mode 100644
index cace5d688..000000000
--- a/src/wifi/Makefile.in
+++ /dev/null
@@ -1,755 +0,0 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
- case $${target_option-} in \
- ?) ;; \
- *) echo "am__make_running_with_option: internal error: invalid" \
- "target option '$${target_option-}' specified" >&2; \
- exit 1;; \
- esac; \
- has_opt=no; \
- sane_makeflags=$$MAKEFLAGS; \
- if $(am__is_gnu_make); then \
- sane_makeflags=$$MFLAGS; \
- else \
- case $$MAKEFLAGS in \
- *\\[\ \ ]*) \
- bs=\\; \
- sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
- | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
- esac; \
- fi; \
- skip_next=no; \
- strip_trailopt () \
- { \
- flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
- }; \
- for flg in $$sane_makeflags; do \
- test $$skip_next = yes && { skip_next=no; continue; }; \
- case $$flg in \
- *=*|--*) continue;; \
- -*I) strip_trailopt 'I'; skip_next=yes;; \
- -*I?*) strip_trailopt 'I';; \
- -*O) strip_trailopt 'O'; skip_next=yes;; \
- -*O?*) strip_trailopt 'O';; \
- -*l) strip_trailopt 'l'; skip_next=yes;; \
- -*l?*) strip_trailopt 'l';; \
- -[dEDm]) skip_next=yes;; \
- -[JT]) skip_next=yes;; \
- esac; \
- case $$flg in \
- *$$target_option*) has_opt=yes; break;; \
- esac; \
- done; \
- test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@WITH_WEXT_TRUE@am__append_1 = wifi-utils-wext.c wifi-utils-wext.h
-subdir = src/wifi
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/build-aux/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
- $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gnome-code-coverage.m4 \
- $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
- $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
- $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
- $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
- $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
- $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
- $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
- $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
- $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libwifi_utils_la_DEPENDENCIES = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am__libwifi_utils_la_SOURCES_DIST = wifi-utils.c wifi-utils.h \
- wifi-utils-private.h wifi-utils-nl80211.c wifi-utils-nl80211.h \
- wifi-utils-wext.c wifi-utils-wext.h
-@WITH_WEXT_TRUE@am__objects_1 = libwifi_utils_la-wifi-utils-wext.lo
-am_libwifi_utils_la_OBJECTS = libwifi_utils_la-wifi-utils.lo \
- libwifi_utils_la-wifi-utils-nl80211.lo $(am__objects_1)
-libwifi_utils_la_OBJECTS = $(am_libwifi_utils_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo " GEN " $@;
-am__v_GEN_1 =
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 =
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo " CCLD " $@;
-am__v_CCLD_1 =
-SOURCES = $(libwifi_utils_la_SOURCES)
-DIST_SOURCES = $(am__libwifi_utils_la_SOURCES_DIST)
-am__can_run_installinfo = \
- case $$AM_UPDATE_INFO_DIR in \
- n|no|NO) false;; \
- *) (install-info --version) >/dev/null 2>&1;; \
- esac
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates. Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
- BEGIN { nonempty = 0; } \
- { items[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique. This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
- list='$(am__tagged_files)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CKDB_PATH = @CKDB_PATH@
-CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
-CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
-CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DBUS_CFLAGS = @DBUS_CFLAGS@
-DBUS_LIBS = @DBUS_LIBS@
-DBUS_SYS_DIR = @DBUS_SYS_DIR@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DHCLIENT_PATH = @DHCLIENT_PATH@
-DHCPCD_PATH = @DHCPCD_PATH@
-DLLTOOL = @DLLTOOL@
-DNSMASQ_PATH = @DNSMASQ_PATH@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GENHTML = @GENHTML@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MAKEFILE = @GLIB_MAKEFILE@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
-GNUTLS_LIBS = @GNUTLS_LIBS@
-GREP = @GREP@
-GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
-GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
-GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
-GTKDOC_MKPDF = @GTKDOC_MKPDF@
-GTKDOC_REBASE = @GTKDOC_REBASE@
-GUDEV_CFLAGS = @GUDEV_CFLAGS@
-GUDEV_LIBS = @GUDEV_LIBS@
-HTML_DIR = @HTML_DIR@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
-INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
-INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
-INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
-INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
-INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
-INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
-INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
-INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
-INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
-INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
-IPTABLES_PATH = @IPTABLES_PATH@
-IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
-IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
-KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
-LCOV = @LCOV@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBDL = @LIBDL@
-LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
-LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
-LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
-LIBM = @LIBM@
-LIBNL_CFLAGS = @LIBNL_CFLAGS@
-LIBNL_LIBS = @LIBNL_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
-LIBSOUP_LIBS = @LIBSOUP_LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@
-MM_GLIB_LIBS = @MM_GLIB_LIBS@
-MOC = @MOC@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
-NM_MICRO_VERSION = @NM_MICRO_VERSION@
-NM_MINOR_VERSION = @NM_MINOR_VERSION@
-NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@
-NM_VERSION = @NM_VERSION@
-NSS_CFLAGS = @NSS_CFLAGS@
-NSS_LIBS = @NSS_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POLKIT_CFLAGS = @POLKIT_CFLAGS@
-POLKIT_LIBS = @POLKIT_LIBS@
-POSUB = @POSUB@
-PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
-QT_CFLAGS = @QT_CFLAGS@
-QT_LIBS = @QT_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-SYSTEMD_200_CFLAGS = @SYSTEMD_200_CFLAGS@
-SYSTEMD_200_LIBS = @SYSTEMD_200_LIBS@
-SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@
-SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@
-SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@
-SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@
-SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
-UDEV_BASE_DIR = @UDEV_BASE_DIR@
-USE_NLS = @USE_NLS@
-UUID_CFLAGS = @UUID_CFLAGS@
-UUID_LIBS = @UUID_LIBS@
-VAPIGEN = @VAPIGEN@
-VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
-VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-intltool__v_merge_options_ = @intltool__v_merge_options_@
-intltool__v_merge_options_0 = @intltool__v_merge_options_0@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-nmbinary = @nmbinary@
-nmconfdir = @nmconfdir@
-nmdatadir = @nmdatadir@
-nmrundir = @nmrundir@
-nmstatedir = @nmstatedir@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-systemdsystemunitdir = @systemdsystemunitdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-with_dhclient = @with_dhclient@
-with_dhcpcd = @with_dhcpcd@
-with_netconfig = @with_netconfig@
-with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libwifi-utils.la
-libwifi_utils_la_SOURCES = wifi-utils.c wifi-utils.h \
- wifi-utils-private.h wifi-utils-nl80211.c wifi-utils-nl80211.h \
- $(am__append_1)
-libwifi_utils_la_CPPFLAGS = \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/src \
- $(GLIB_CFLAGS) \
- $(LIBNL_CFLAGS)
-
-libwifi_utils_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(LIBNL_LIBS)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/wifi/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/wifi/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-libwifi-utils.la: $(libwifi_utils_la_OBJECTS) $(libwifi_utils_la_DEPENDENCIES) $(EXTRA_libwifi_utils_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libwifi_utils_la_OBJECTS) $(libwifi_utils_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwifi_utils_la-wifi-utils-nl80211.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwifi_utils_la-wifi-utils-wext.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwifi_utils_la-wifi-utils.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-libwifi_utils_la-wifi-utils.lo: wifi-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwifi_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwifi_utils_la-wifi-utils.lo -MD -MP -MF $(DEPDIR)/libwifi_utils_la-wifi-utils.Tpo -c -o libwifi_utils_la-wifi-utils.lo `test -f 'wifi-utils.c' || echo '$(srcdir)/'`wifi-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwifi_utils_la-wifi-utils.Tpo $(DEPDIR)/libwifi_utils_la-wifi-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wifi-utils.c' object='libwifi_utils_la-wifi-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwifi_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwifi_utils_la-wifi-utils.lo `test -f 'wifi-utils.c' || echo '$(srcdir)/'`wifi-utils.c
-
-libwifi_utils_la-wifi-utils-nl80211.lo: wifi-utils-nl80211.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwifi_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwifi_utils_la-wifi-utils-nl80211.lo -MD -MP -MF $(DEPDIR)/libwifi_utils_la-wifi-utils-nl80211.Tpo -c -o libwifi_utils_la-wifi-utils-nl80211.lo `test -f 'wifi-utils-nl80211.c' || echo '$(srcdir)/'`wifi-utils-nl80211.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwifi_utils_la-wifi-utils-nl80211.Tpo $(DEPDIR)/libwifi_utils_la-wifi-utils-nl80211.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wifi-utils-nl80211.c' object='libwifi_utils_la-wifi-utils-nl80211.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwifi_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwifi_utils_la-wifi-utils-nl80211.lo `test -f 'wifi-utils-nl80211.c' || echo '$(srcdir)/'`wifi-utils-nl80211.c
-
-libwifi_utils_la-wifi-utils-wext.lo: wifi-utils-wext.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwifi_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwifi_utils_la-wifi-utils-wext.lo -MD -MP -MF $(DEPDIR)/libwifi_utils_la-wifi-utils-wext.Tpo -c -o libwifi_utils_la-wifi-utils-wext.lo `test -f 'wifi-utils-wext.c' || echo '$(srcdir)/'`wifi-utils-wext.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwifi_utils_la-wifi-utils-wext.Tpo $(DEPDIR)/libwifi_utils_la-wifi-utils-wext.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wifi-utils-wext.c' object='libwifi_utils_la-wifi-utils-wext.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwifi_utils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwifi_utils_la-wifi-utils-wext.lo `test -f 'wifi-utils-wext.c' || echo '$(srcdir)/'`wifi-utils-wext.c
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-ID: $(am__tagged_files)
- $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- set x; \
- here=`pwd`; \
- $(am__define_uniq_tagged_files); \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- $(am__define_uniq_tagged_files); \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
- list='$(am__tagged_files)'; \
- case "$(srcdir)" in \
- [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
- *) sdir=$(subdir)/$(srcdir) ;; \
- esac; \
- for i in $$list; do \
- if test -f "$$i"; then \
- echo "$(subdir)/$$i"; \
- else \
- echo "$$sdir/$$i"; \
- fi; \
- done >> $(top_builddir)/cscope.files
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- if test -z '$(STRIP)'; then \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- install; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
- fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/wimax/nm-wimax-factory.c b/src/wimax/nm-wimax-factory.c
deleted file mode 100644
index 95cb4bf74..000000000
--- a/src/wimax/nm-wimax-factory.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#include <gmodule.h>
-
-#include "nm-device-factory.h"
-#include "nm-device-wimax.h"
-
-G_MODULE_EXPORT GObject *
-nm_device_factory_create_device (GUdevDevice *device,
- const char *devpath,
- const char *ifname,
- const char *driver,
- GError **error)
-{
- GObject *dev;
-
- /* FIXME: check 'DEVTYPE' instead; but since we only support Intel
- * WiMAX devices for now this is appropriate.
- */
- if (g_strcmp0 (driver, "i2400m_usb") != 0)
- return NULL; /* unsupported */
-
- dev = (GObject *) nm_device_wimax_new (devpath, ifname, driver);
- if (dev == NULL)
- g_set_error_literal (error, 0, 0, "Failed to create WiMAX device.");
- return dev;
-}
-
-G_MODULE_EXPORT guint32
-nm_device_factory_get_priority (void)
-{
- return 0;
-}
-
-G_MODULE_EXPORT NMDeviceType
-nm_device_factory_get_type (void)
-{
- return NM_DEVICE_TYPE_WIMAX;
-}
-
diff --git a/test/Makefile.am b/test/Makefile.am
index 4b7ca439d..830019ba4 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -3,27 +3,26 @@ AM_CPPFLAGS = \
-I${top_srcdir}/libnm-util \
-I${top_builddir}/libnm-util \
-I${top_srcdir}/libnm-glib \
- -I${top_srcdir}/include \
+ -I${top_srcdir}/include \
-I${top_builddir}/include \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DBINDIR=\"$(bindir)\" \
-DDATADIR=\"$(datadir)\" \
-DNMLOCALEDIR=\"$(datadir)/locale\"
-bin_PROGRAMS = nm-tool nm-online
+bin_PROGRAMS = nm-online
noinst_PROGRAMS = libnm-glib-test
-nm_tool_SOURCES = nm-tool.c
-nm_tool_LDADD = \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
nm_online_SOURCES = nm-online.c
+nm_online_CPPFLAGS = \
+ -DG_LOG_DOMAIN=\""nm-online"\" \
+ $(AM_CPPFLAGS)
+
nm_online_LDADD = \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/test/Makefile.in b/test/Makefile.in
index f904b534f..174ca77f8 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -78,13 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-bin_PROGRAMS = nm-tool$(EXEEXT) nm-online$(EXEEXT)
+bin_PROGRAMS = nm-online$(EXEEXT)
noinst_PROGRAMS = libnm-glib-test$(EXEEXT)
subdir = test
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -120,13 +121,9 @@ libnm_glib_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libnm_glib_test_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
-am_nm_online_OBJECTS = nm-online.$(OBJEXT)
+am_nm_online_OBJECTS = nm_online-nm-online.$(OBJEXT)
nm_online_OBJECTS = $(am_nm_online_OBJECTS)
-nm_online_DEPENDENCIES = $(top_builddir)/libnm-util/libnm-util.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_nm_tool_OBJECTS = nm-tool.$(OBJEXT)
-nm_tool_OBJECTS = $(am_nm_tool_OBJECTS)
-nm_tool_DEPENDENCIES = $(top_builddir)/libnm-glib/libnm-glib.la \
+nm_online_DEPENDENCIES = $(top_builddir)/libnm-glib/libnm-glib.la \
$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
@@ -163,10 +160,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libnm_glib_test_SOURCES) $(nm_online_SOURCES) \
- $(nm_tool_SOURCES)
-DIST_SOURCES = $(libnm_glib_test_SOURCES) $(nm_online_SOURCES) \
- $(nm_tool_SOURCES)
+SOURCES = $(libnm_glib_test_SOURCES) $(nm_online_SOURCES)
+DIST_SOURCES = $(libnm_glib_test_SOURCES) $(nm_online_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -217,12 +212,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -247,7 +245,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -292,12 +289,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -314,6 +315,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -341,11 +344,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -360,6 +368,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -422,6 +431,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -432,28 +442,28 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
AM_CPPFLAGS = \
-I${top_srcdir} \
-I${top_srcdir}/libnm-util \
-I${top_builddir}/libnm-util \
-I${top_srcdir}/libnm-glib \
- -I${top_srcdir}/include \
+ -I${top_srcdir}/include \
-I${top_builddir}/include \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DBINDIR=\"$(bindir)\" \
-DDATADIR=\"$(datadir)\" \
-DNMLOCALEDIR=\"$(datadir)/locale\"
-nm_tool_SOURCES = nm-tool.c
-nm_tool_LDADD = \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
nm_online_SOURCES = nm-online.c
+nm_online_CPPFLAGS = \
+ -DG_LOG_DOMAIN=\""nm-online"\" \
+ $(AM_CPPFLAGS)
+
nm_online_LDADD = \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(DBUS_LIBS) \
$(GLIB_LIBS)
@@ -570,10 +580,6 @@ nm-online$(EXEEXT): $(nm_online_OBJECTS) $(nm_online_DEPENDENCIES) $(EXTRA_nm_on
@rm -f nm-online$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(nm_online_OBJECTS) $(nm_online_LDADD) $(LIBS)
-nm-tool$(EXEEXT): $(nm_tool_OBJECTS) $(nm_tool_DEPENDENCIES) $(EXTRA_nm_tool_DEPENDENCIES)
- @rm -f nm-tool$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(nm_tool_OBJECTS) $(nm_tool_LDADD) $(LIBS)
-
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -581,8 +587,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test-libnm-glib-test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-online.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-tool.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm_online-nm-online.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -619,6 +624,20 @@ libnm_glib_test-libnm-glib-test.obj: libnm-glib-test.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_CFLAGS) $(CFLAGS) -c -o libnm_glib_test-libnm-glib-test.obj `if test -f 'libnm-glib-test.c'; then $(CYGPATH_W) 'libnm-glib-test.c'; else $(CYGPATH_W) '$(srcdir)/libnm-glib-test.c'; fi`
+nm_online-nm-online.o: nm-online.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_online_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_online-nm-online.o -MD -MP -MF $(DEPDIR)/nm_online-nm-online.Tpo -c -o nm_online-nm-online.o `test -f 'nm-online.c' || echo '$(srcdir)/'`nm-online.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_online-nm-online.Tpo $(DEPDIR)/nm_online-nm-online.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-online.c' object='nm_online-nm-online.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_online_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_online-nm-online.o `test -f 'nm-online.c' || echo '$(srcdir)/'`nm-online.c
+
+nm_online-nm-online.obj: nm-online.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_online_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm_online-nm-online.obj -MD -MP -MF $(DEPDIR)/nm_online-nm-online.Tpo -c -o nm_online-nm-online.obj `if test -f 'nm-online.c'; then $(CYGPATH_W) 'nm-online.c'; else $(CYGPATH_W) '$(srcdir)/nm-online.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm_online-nm-online.Tpo $(DEPDIR)/nm_online-nm-online.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-online.c' object='nm_online-nm-online.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nm_online_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm_online-nm-online.obj `if test -f 'nm-online.c'; then $(CYGPATH_W) 'nm-online.c'; else $(CYGPATH_W) '$(srcdir)/nm-online.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
diff --git a/test/nm-online.c b/test/nm-online.c
index f1777374c..811928746 100644
--- a/test/nm-online.c
+++ b/test/nm-online.c
@@ -15,6 +15,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2006 - 2008 Novell, Inc.
+ * Copyright (C) 2008 - 2014 Red Hat, Inc.
*
*/
@@ -37,75 +38,49 @@
#include <getopt.h>
#include <locale.h>
-#include <glib.h>
#include <glib/gi18n.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus-glib.h>
-#include "NetworkManager.h"
-#include "nm-glib-compat.h"
+#include "nm-client.h"
#define PROGRESS_STEPS 15
+#define WAIT_STARTUP_TAG "wait-startup"
-typedef struct
+typedef struct
{
int value;
double norm;
gboolean quiet;
} Timeout;
-static GMainLoop *loop;
-
-static DBusHandlerResult dbus_filter (DBusConnection *connection G_GNUC_UNUSED,
- DBusMessage *message,
- void *user_data G_GNUC_UNUSED)
+static void
+client_properties_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer loop)
{
+ NMClient *client = NM_CLIENT (object);
NMState state;
-
- if (!dbus_message_is_signal (message, NM_DBUS_INTERFACE, "StateChanged"))
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- if (!dbus_message_get_args (message, NULL, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID))
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- if ( state == NM_STATE_CONNECTED_LOCAL
- || state == NM_STATE_CONNECTED_SITE
- || state == NM_STATE_CONNECTED_GLOBAL)
- g_main_loop_quit (loop);
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static NMState check_online (DBusConnection *connection)
-{
- DBusMessage *message, *reply;
- DBusError error;
- dbus_uint32_t state;
-
- message = dbus_message_new_method_call (NM_DBUS_SERVICE, NM_DBUS_PATH,
- NM_DBUS_INTERFACE, "state");
- if (!message)
- exit (2);
-
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (connection, message,
- -1, &error);
- dbus_message_unref (message);
- if (!reply)
- return NM_STATE_UNKNOWN;
-
- if (!dbus_message_get_args (reply, NULL, DBUS_TYPE_UINT32, &state,
- DBUS_TYPE_INVALID))
- exit (2);
-
- return state;
+ gboolean wait_startup = GPOINTER_TO_UINT (g_object_get_data (object, WAIT_STARTUP_TAG));
+
+ if (!nm_client_get_manager_running (client))
+ return;
+
+ if (wait_startup) {
+ if (!nm_client_get_startup (client))
+ g_main_loop_quit (loop);
+ } else {
+ state = nm_client_get_state (client);
+ if ( state == NM_STATE_CONNECTED_LOCAL
+ || state == NM_STATE_CONNECTED_SITE
+ || state == NM_STATE_CONNECTED_GLOBAL)
+ g_main_loop_quit (loop);
+ }
}
-static gboolean handle_timeout (gpointer data)
+static gboolean
+handle_timeout (gpointer data)
{
int i = PROGRESS_STEPS;
- Timeout *timeout = (Timeout *) data;
+ Timeout *timeout = data;
if (!timeout->quiet) {
g_print (_("\rConnecting"));
@@ -126,25 +101,29 @@ static gboolean handle_timeout (gpointer data)
return TRUE;
}
-int main (int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
- DBusConnection *connection;
- DBusError error;
- NMState state;
gint t_secs = -1;
gboolean exit_no_nm = FALSE;
- gboolean quiet = FALSE;
+ gboolean wait_startup = FALSE;
Timeout timeout;
GOptionContext *opt_ctx = NULL;
gboolean success;
+ NMClient *client;
+ NMState state = NM_STATE_UNKNOWN;
+ GMainLoop *loop;
GOptionEntry options[] = {
{"timeout", 't', 0, G_OPTION_ARG_INT, &t_secs, N_("Time to wait for a connection, in seconds (without the option, default value is 30)"), "<timeout>"},
{"exit", 'x', 0, G_OPTION_ARG_NONE, &exit_no_nm, N_("Exit immediately if NetworkManager is not running or connecting"), NULL},
- {"quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet, N_("Don't print anything"), NULL},
+ {"quiet", 'q', 0, G_OPTION_ARG_NONE, &timeout.quiet, N_("Don't print anything"), NULL},
+ {"wait-for-startup", 's', 0, G_OPTION_ARG_NONE, &wait_startup, N_("Wait for NetworkManager startup instead of a connection"), NULL},
{NULL}
};
+ timeout.quiet = FALSE;
+
/* Set locale to be able to use environment variables */
setlocale (LC_ALL, "");
@@ -159,13 +138,14 @@ int main (int argc, char *argv[])
g_option_context_add_main_entries (opt_ctx, options, NULL);
g_option_context_set_summary (opt_ctx,
- _("Waits for a successful connection in NetworkManager."));
+ _("Waits for NetworkManager to finish activating startup network connections."));
success = g_option_context_parse (opt_ctx, &argc, &argv, NULL);
g_option_context_free (opt_ctx);
if (!success) {
- g_warning (_("Invalid option. Please use --help to see a list of valid options."));
+ g_printerr ("%s: %s\n", argv[0],
+ _("Invalid option. Please use --help to see a list of valid options."));
return 2;
}
@@ -174,51 +154,63 @@ int main (int argc, char *argv[])
else
timeout.value = 30;
if (timeout.value < 0 || timeout.value > 3600) {
- g_warning (_("Invalid option. Please use --help to see a list of valid options."));
+ g_printerr ("%s: %s\n", argv[0],
+ _("Invalid option. Please use --help to see a list of valid options."));
return 2;
}
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
- loop = g_main_loop_new (NULL, FALSE);
+#endif
- dbus_error_init (&error);
- connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
- if (connection == NULL) {
- dbus_error_free (&error);
+ client = nm_client_new ();
+ if (!client) {
+ g_printerr (_("Error: Could not create NMClient object."));
return 2;
}
- dbus_connection_setup_with_g_main (connection, NULL);
-
- if (!dbus_connection_add_filter (connection, dbus_filter, NULL, NULL))
- return 2;
+ loop = g_main_loop_new (NULL, FALSE);
- dbus_bus_add_match (connection,
- "type='signal',"
- "interface='" NM_DBUS_INTERFACE "',"
- "sender='" NM_DBUS_SERVICE "',"
- "path='" NM_DBUS_PATH "'", &error);
- if (dbus_error_is_set (&error)) {
- dbus_error_free (&error);
- return 2;
+ g_object_set_data (G_OBJECT (client), WAIT_STARTUP_TAG, GUINT_TO_POINTER (wait_startup));
+ state = nm_client_get_state (client);
+ if (!nm_client_get_manager_running (client)) {
+ if (exit_no_nm) {
+ g_object_unref (client);
+ return 1;
+ }
+ } else if (wait_startup) {
+ if (!nm_client_get_startup (client)) {
+ g_object_unref (client);
+ return 0;
+ }
+ } else {
+ if ( state == NM_STATE_CONNECTED_LOCAL
+ || state == NM_STATE_CONNECTED_SITE
+ || state == NM_STATE_CONNECTED_GLOBAL) {
+ g_object_unref (client);
+ return 0;
+ }
}
-
- /* Check after we setup the filter to ensure that we cannot race. */
- state = check_online (connection);
- if ( state == NM_STATE_CONNECTED_LOCAL
- || state == NM_STATE_CONNECTED_SITE
- || state == NM_STATE_CONNECTED_GLOBAL)
- return 0;
- if (exit_no_nm && (state != NM_STATE_CONNECTING))
+ if (exit_no_nm && (state != NM_STATE_CONNECTING)) {
+ g_object_unref (client);
return 1;
+ }
- if (timeout.value) {
- timeout.norm = (double) timeout.value / (double) PROGRESS_STEPS;
- g_timeout_add_seconds (1, handle_timeout, &timeout);
+ if (!timeout.value) {
+ g_object_unref (client);
+ return 1;
}
- timeout.quiet = quiet;
+
+ timeout.norm = (double) timeout.value / (double) PROGRESS_STEPS;
+ g_timeout_add_seconds (1, handle_timeout, &timeout);
+
+ g_signal_connect (client, "notify",
+ G_CALLBACK (client_properties_changed), loop);
g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+
+ g_object_unref (client);
return 0;
}
diff --git a/test/nm-tool.c b/test/nm-tool.c
deleted file mode 100644
index 47bf2e2f7..000000000
--- a/test/nm-tool.c
+++ /dev/null
@@ -1,795 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* nm-tool - information tool for NetworkManager
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2005 - 2011 Red Hat, Inc.
- * (C) Copyright 2007 Novell, Inc.
- */
-
-#include <config.h>
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <nm-client.h>
-#include <nm-device.h>
-#include <nm-device-ethernet.h>
-#include <nm-device-wifi.h>
-#include <nm-device-modem.h>
-#include <nm-device-bt.h>
-#include <nm-device-wimax.h>
-#include <nm-utils.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ip6-config.h>
-#include <nm-vpn-connection.h>
-#include <nm-setting-connection.h>
-
-/* Don't use nm-dbus-glib-types.h so that we can keep nm-tool
- * building standalone outside of the NM tree.
- */
-#define DBUS_TYPE_G_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE))
-#define DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT))
-#define DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH))
-
-static GHashTable *connections = NULL;
-
-static gboolean
-get_nm_state (NMClient *client)
-{
- NMState state;
- char *state_string;
- gboolean success = TRUE;
-
- state = nm_client_get_state (client);
-
- switch (state) {
- case NM_STATE_ASLEEP:
- state_string = "asleep";
- break;
- case NM_STATE_CONNECTING:
- state_string = "connecting";
- break;
- case NM_STATE_CONNECTED_LOCAL:
- state_string = "connected (local only)";
- break;
- case NM_STATE_CONNECTED_SITE:
- state_string = "connected (site only)";
- break;
- case NM_STATE_CONNECTED_GLOBAL:
- state_string = "connected (global)";
- break;
- case NM_STATE_DISCONNECTED:
- state_string = "disconnected";
- break;
- case NM_STATE_UNKNOWN:
- default:
- state_string = "unknown";
- success = FALSE;
- break;
- }
-
- printf ("State: %s\n\n", state_string);
-
- return success;
-}
-
-static void
-print_header (const char *label, const char *iface, const char *connection)
-{
- GString *string;
-
- string = g_string_sized_new (79);
- g_string_append_printf (string, "- %s: ", label);
- if (iface)
- g_string_append_printf (string, "%s ", iface);
- if (connection)
- g_string_append_printf (string, " [%s] ", connection);
-
- while (string->len < 80)
- g_string_append_c (string, '-');
-
- printf ("%s\n", string->str);
-
- g_string_free (string, TRUE);
-}
-
-static void
-print_string (const char *label, const char *data)
-{
-#define SPACING 18
- int label_len = 0;
- char spaces[50];
- int i;
-
- g_return_if_fail (label != NULL);
- g_return_if_fail (data != NULL);
-
- label_len = strlen (label);
- if (label_len > SPACING)
- label_len = SPACING - 1;
- for (i = 0; i < (SPACING - label_len); i++)
- spaces[i] = 0x20;
- spaces[i] = 0x00;
-
- printf (" %s:%s%s\n", label, &spaces[0], data);
-}
-
-
-static void
-detail_access_point (gpointer data, gpointer user_data)
-{
- NMAccessPoint *ap = NM_ACCESS_POINT (data);
- const char *active_bssid = (const char *) user_data;
- GString *str;
- gboolean active = FALSE;
- guint32 flags, wpa_flags, rsn_flags;
- const GByteArray * ssid;
- char *tmp;
-
- flags = nm_access_point_get_flags (ap);
- wpa_flags = nm_access_point_get_wpa_flags (ap);
- rsn_flags = nm_access_point_get_rsn_flags (ap);
-
- if (active_bssid) {
- const char *current_bssid = nm_access_point_get_hw_address (ap);
- if (current_bssid && !strcmp (current_bssid, active_bssid))
- active = TRUE;
- }
-
- str = g_string_new (NULL);
- g_string_append_printf (str,
- "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d",
- nm_access_point_get_mode (ap) == NM_802_11_MODE_ADHOC ? "Ad-Hoc"
- : nm_access_point_get_mode (ap) == NM_802_11_MODE_INFRA ? "Infra"
- : "Unknown",
- nm_access_point_get_hw_address (ap),
- nm_access_point_get_frequency (ap),
- nm_access_point_get_max_bitrate (ap) / 1000,
- nm_access_point_get_strength (ap));
-
- if ( !(flags & NM_802_11_AP_FLAGS_PRIVACY)
- && (wpa_flags != NM_802_11_AP_SEC_NONE)
- && (rsn_flags != NM_802_11_AP_SEC_NONE))
- g_string_append (str, ", Encrypted: ");
-
- if ( (flags & NM_802_11_AP_FLAGS_PRIVACY)
- && (wpa_flags == NM_802_11_AP_SEC_NONE)
- && (rsn_flags == NM_802_11_AP_SEC_NONE))
- g_string_append (str, " WEP");
- if (wpa_flags != NM_802_11_AP_SEC_NONE)
- g_string_append (str, " WPA");
- if (rsn_flags != NM_802_11_AP_SEC_NONE)
- g_string_append (str, " WPA2");
- if ( (wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
- || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
- g_string_append (str, " Enterprise");
-
- /* FIXME: broadcast/hidden */
-
- ssid = nm_access_point_get_ssid (ap);
- tmp = g_strdup_printf (" %s%s", active ? "*" : "",
- ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)");
-
- print_string (tmp, str->str);
-
- g_string_free (str, TRUE);
- g_free (tmp);
-}
-
-static const char *
-wimax_network_type_to_str (NMWimaxNspNetworkType type)
-{
- switch (type) {
- case NM_WIMAX_NSP_NETWORK_TYPE_HOME:
- return "Home";
- case NM_WIMAX_NSP_NETWORK_TYPE_PARTNER:
- return "Partner";
- case NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER:
- return "Roaming";
- default:
- return "Unknown";
- }
-}
-
-static void
-detail_nsp (gpointer data, gpointer user_data)
-{
- NMWimaxNsp *nsp = NM_WIMAX_NSP (data);
- const char *active_name = (const char *) user_data;
- const char *name;
- char *label;
- char *data_str;
- gboolean active = FALSE;
-
- name = nm_wimax_nsp_get_name (nsp);
-
- if (active_name)
- active = g_strcmp0 (active_name, name) == 0;
-
- label = g_strdup_printf (" %s%s", active ? "*" : "", name);
- data_str = g_strdup_printf ("%d%% (%s)",
- nm_wimax_nsp_get_signal_quality (nsp),
- wimax_network_type_to_str (nm_wimax_nsp_get_network_type (nsp)));
-
- print_string (label, data_str);
- g_free (label);
- g_free (data_str);
-}
-
-static gchar *
-ip4_address_as_string (guint32 ip)
-{
- struct in_addr tmp_addr;
- char buf[INET_ADDRSTRLEN+1];
-
- memset (&buf, '\0', sizeof (buf));
- tmp_addr.s_addr = ip;
-
- if (inet_ntop (AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN)) {
- return g_strdup (buf);
- } else {
- g_warning ("%s: error converting IP4 address 0x%X",
- __func__, ntohl (tmp_addr.s_addr));
- return NULL;
- }
-}
-
-static gchar *
-ip6_address_as_string (const struct in6_addr *ip)
-{
- char buf[INET6_ADDRSTRLEN];
-
- memset (&buf, '\0', sizeof (buf));
-
- if (inet_ntop (AF_INET6, ip, buf, INET6_ADDRSTRLEN)) {
- return g_strdup (buf);
- } else {
- int j;
- GString *ip6_str = g_string_new (NULL);
- g_string_append_printf (ip6_str, "%02X", ip->s6_addr[0]);
- for (j = 1; j < 16; j++)
- g_string_append_printf (ip6_str, " %02X", ip->s6_addr[j]);
- g_warning ("%s: error converting IP6 address %s",
- __func__, ip6_str->str);
- g_string_free (ip6_str, TRUE);
- return NULL;
- }
-}
-
-static const char *
-get_dev_state_string (NMDeviceState state)
-{
- if (state == NM_DEVICE_STATE_UNMANAGED)
- return "unmanaged";
- else if (state == NM_DEVICE_STATE_UNAVAILABLE)
- return "unavailable";
- else if (state == NM_DEVICE_STATE_DISCONNECTED)
- return "disconnected";
- else if (state == NM_DEVICE_STATE_PREPARE)
- return "connecting (prepare)";
- else if (state == NM_DEVICE_STATE_CONFIG)
- return "connecting (configuring)";
- else if (state == NM_DEVICE_STATE_NEED_AUTH)
- return "connecting (need authentication)";
- else if (state == NM_DEVICE_STATE_IP_CONFIG)
- return "connecting (getting IP configuration)";
- else if (state == NM_DEVICE_STATE_IP_CHECK)
- return "connecting (checking IP connectivity)";
- else if (state == NM_DEVICE_STATE_SECONDARIES)
- return "connecting (starting dependent connections)";
- else if (state == NM_DEVICE_STATE_ACTIVATED)
- return "connected";
- else if (state == NM_DEVICE_STATE_DEACTIVATING)
- return "disconnecting";
- else if (state == NM_DEVICE_STATE_FAILED)
- return "connection failed";
- return "unknown";
-}
-
-static NMConnection *
-get_connection_for_active (NMActiveConnection *active)
-{
- const char *path;
-
- g_return_val_if_fail (active != NULL, NULL);
-
- path = nm_active_connection_get_connection (active);
- g_return_val_if_fail (path != NULL, NULL);
-
- return (NMConnection *) g_hash_table_lookup (connections, path);
-}
-
-static void
-detail_device (gpointer data, gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (data);
- char *tmp;
- NMDeviceState state;
- guint32 caps;
- guint32 speed;
- const GArray *array;
- gboolean is_default = FALSE;
- const char *id = NULL;
- NMActiveConnection *active;
-
- active = nm_device_get_active_connection (device);
- if (active) {
- NMConnection *connection;
- NMSettingConnection *s_con;
-
- is_default = nm_active_connection_get_default (active);
-
- connection = get_connection_for_active (active);
- if (connection) {
- s_con = nm_connection_get_setting_connection (connection);
- if (s_con)
- id = nm_setting_connection_get_id (s_con);
- }
- }
-
- print_header ("Device", nm_device_get_iface (device), id);
-
- /* General information */
- if (NM_IS_DEVICE_ETHERNET (device))
- print_string ("Type", "Wired");
- else if (NM_IS_DEVICE_WIFI (device))
- print_string ("Type", "802.11 WiFi");
- else if (NM_IS_DEVICE_MODEM (device)) {
- NMDeviceModemCapabilities modem_caps;
-
- modem_caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
- if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
- print_string ("Type", "Mobile Broadband (GSM)");
- else if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
- print_string ("Type", "Mobile Broadband (CDMA)");
- else
- print_string ("Type", "Mobile Broadband (unknown)");
- } else if (NM_IS_DEVICE_BT (device))
- print_string ("Type", "Bluetooth");
- else if (NM_IS_DEVICE_WIMAX (device))
- print_string ("Type", "WiMAX");
-
- print_string ("Driver", nm_device_get_driver (device) ? nm_device_get_driver (device) : "(unknown)");
-
- state = nm_device_get_state (device);
- print_string ("State", get_dev_state_string (state));
-
- if (is_default)
- print_string ("Default", "yes");
- else
- print_string ("Default", "no");
-
- tmp = NULL;
- if (NM_IS_DEVICE_ETHERNET (device))
- tmp = g_strdup (nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device)));
- else if (NM_IS_DEVICE_WIFI (device))
- tmp = g_strdup (nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device)));
- else if (NM_IS_DEVICE_WIMAX (device))
- tmp = g_strdup (nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device)));
-
- if (tmp) {
- print_string ("HW Address", tmp);
- g_free (tmp);
- }
-
- /* Capabilities */
- caps = nm_device_get_capabilities (device);
- printf ("\n Capabilities:\n");
- if (caps & NM_DEVICE_CAP_CARRIER_DETECT)
- print_string (" Carrier Detect", "yes");
-
- speed = 0;
- if (NM_IS_DEVICE_ETHERNET (device)) {
- /* Speed in Mb/s */
- speed = nm_device_ethernet_get_speed (NM_DEVICE_ETHERNET (device));
- } else if (NM_IS_DEVICE_WIFI (device)) {
- /* Speed in b/s */
- speed = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device));
- speed /= 1000;
- }
-
- if (speed) {
- char *speed_string;
-
- speed_string = g_strdup_printf ("%u Mb/s", speed);
- print_string (" Speed", speed_string);
- g_free (speed_string);
- }
-
- /* Wireless specific information */
- if ((NM_IS_DEVICE_WIFI (device))) {
- guint32 wcaps;
- NMAccessPoint *active_ap = NULL;
- const char *active_bssid = NULL;
- const GPtrArray *aps;
-
- printf ("\n Wireless Properties\n");
-
- wcaps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device));
-
- if (wcaps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104))
- print_string (" WEP Encryption", "yes");
- if (wcaps & NM_WIFI_DEVICE_CAP_WPA)
- print_string (" WPA Encryption", "yes");
- if (wcaps & NM_WIFI_DEVICE_CAP_RSN)
- print_string (" WPA2 Encryption", "yes");
-
- if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
- active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device));
- active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL;
- }
-
- printf ("\n Wireless Access Points %s\n", active_ap ? "(* = current AP)" : "");
-
- aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
- if (aps && aps->len)
- g_ptr_array_foreach ((GPtrArray *) aps, detail_access_point, (gpointer) active_bssid);
- } else if (NM_IS_DEVICE_ETHERNET (device)) {
- printf ("\n Wired Properties\n");
-
- if (nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device)))
- print_string (" Carrier", "on");
- else
- print_string (" Carrier", "off");
- } else if (NM_IS_DEVICE_WIMAX (device)) {
- NMDeviceWimax *wimax = NM_DEVICE_WIMAX (device);
- NMWimaxNsp *active_nsp = NULL;
- const char *active_name = NULL;
- const GPtrArray *nsps;
-
- if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
- guint tmp_uint;
- gint tmp_int;
- const char *tmp_str;
-
- active_nsp = nm_device_wimax_get_active_nsp (wimax);
- active_name = active_nsp ? nm_wimax_nsp_get_name (active_nsp) : NULL;
-
- printf ("\n Link Status\n");
-
- tmp_uint = nm_device_wimax_get_center_frequency (wimax);
- if (tmp_uint)
- tmp = g_strdup_printf ("%'.1f MHz", (double) tmp_uint / 1000.0);
- else
- tmp = g_strdup ("(unknown)");
- print_string (" Center Freq.", tmp);
- g_free (tmp);
-
- tmp_int = nm_device_wimax_get_rssi (wimax);
- if (tmp_int)
- tmp = g_strdup_printf ("%d dBm", tmp_int);
- else
- tmp = g_strdup ("(unknown)");
- print_string (" RSSI", tmp);
- g_free (tmp);
-
- tmp_int = nm_device_wimax_get_cinr (wimax);
- if (tmp_int)
- tmp = g_strdup_printf ("%d dB", tmp_int);
- else
- tmp = g_strdup ("(unknown)");
- print_string (" CINR", tmp);
- g_free (tmp);
-
- tmp_int = nm_device_wimax_get_tx_power (wimax);
- if (tmp_int)
- tmp = g_strdup_printf ("%'.2f dBm", (float) tmp_int / 2.0);
- else
- tmp = g_strdup ("(unknown)");
- print_string (" TX Power", tmp);
- g_free (tmp);
-
- tmp_str = nm_device_wimax_get_bsid (wimax);
- if (tmp_str)
- print_string (" BSID", tmp_str);
- else
- print_string (" BSID", "(unknown)");
- }
-
- printf ("\n WiMAX NSPs %s\n", active_nsp ? "(* current NSP)" : "");
-
- nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (device));
- if (nsps && nsps->len)
- g_ptr_array_foreach ((GPtrArray *) nsps, detail_nsp, (gpointer) active_name);
- }
-
- /* IP Setup info */
- if (state == NM_DEVICE_STATE_ACTIVATED) {
- NMIP4Config *cfg4 = nm_device_get_ip4_config (device);
- NMIP6Config *cfg6 = nm_device_get_ip6_config (device);
- GSList *iter;
-
- if (cfg4) {
- printf ("\n IPv4 Settings:\n");
-
- for (iter = (GSList *) nm_ip4_config_get_addresses (cfg4); iter; iter = g_slist_next (iter)) {
- NMIP4Address *addr = (NMIP4Address *) iter->data;
- guint32 prefix = nm_ip4_address_get_prefix (addr);
- char *tmp2;
-
- tmp = ip4_address_as_string (nm_ip4_address_get_address (addr));
- print_string (" Address", tmp);
- g_free (tmp);
-
- tmp2 = ip4_address_as_string (nm_utils_ip4_prefix_to_netmask (prefix));
- tmp = g_strdup_printf ("%d (%s)", prefix, tmp2);
- g_free (tmp2);
- print_string (" Prefix", tmp);
- g_free (tmp);
-
- tmp = ip4_address_as_string (nm_ip4_address_get_gateway (addr));
- print_string (" Gateway", tmp);
- g_free (tmp);
- printf ("\n");
- }
-
- array = nm_ip4_config_get_nameservers (cfg4);
- if (array) {
- int i;
-
- for (i = 0; i < array->len; i++) {
- tmp = ip4_address_as_string (g_array_index (array, guint32, i));
- print_string (" DNS", tmp);
- g_free (tmp);
- }
- }
- }
-
- if (cfg6) {
- printf ("\n IPv6 Settings:\n");
-
- for (iter = (GSList *) nm_ip6_config_get_addresses (cfg6); iter; iter = g_slist_next (iter)) {
- NMIP6Address *addr = (NMIP6Address *) iter->data;
- guint32 prefix = nm_ip6_address_get_prefix (addr);
-
- tmp = ip6_address_as_string (nm_ip6_address_get_address (addr));
- print_string (" Address", tmp);
- g_free (tmp);
-
- tmp = g_strdup_printf ("%d", prefix);
- print_string (" Prefix", tmp);
- g_free (tmp);
-
- tmp = ip6_address_as_string (nm_ip6_address_get_gateway (addr));
- print_string (" Gateway", tmp);
- g_free (tmp);
- printf ("\n");
- }
-
- for (iter = (GSList *) nm_ip6_config_get_nameservers (cfg6); iter; iter = g_slist_next (iter)) {
- tmp = ip6_address_as_string (iter->data);
- print_string (" DNS", tmp);
- g_free (tmp);
- }
- }
- }
-
- printf ("\n\n");
-}
-
-static const char *
-get_vpn_state_string (NMVPNConnectionState state)
-{
- switch (state) {
- case NM_VPN_CONNECTION_STATE_PREPARE:
- return "connecting (prepare)";
- case NM_VPN_CONNECTION_STATE_NEED_AUTH:
- return "connecting (need authentication)";
- case NM_VPN_CONNECTION_STATE_CONNECT:
- return "connecting";
- case NM_VPN_CONNECTION_STATE_IP_CONFIG_GET:
- return "connecting (getting IP configuration)";
- case NM_VPN_CONNECTION_STATE_ACTIVATED:
- return "connected";
- case NM_VPN_CONNECTION_STATE_FAILED:
- return "connection failed";
- case NM_VPN_CONNECTION_STATE_DISCONNECTED:
- return "disconnected";
- default:
- break;
- }
-
- return "unknown";
-}
-
-static void
-detail_vpn (gpointer data, gpointer user_data)
-{
- NMActiveConnection *active = NM_ACTIVE_CONNECTION (data);
- NMConnection *connection;
- NMSettingConnection *s_con;
- NMVPNConnectionState state;
- const char *banner;
-
- if (!NM_IS_VPN_CONNECTION (active))
- return;
-
- connection = get_connection_for_active (active);
- g_return_if_fail (connection != NULL);
-
- s_con = nm_connection_get_setting_connection (connection);
- g_return_if_fail (s_con != NULL);
-
- print_header ("VPN", NULL, nm_setting_connection_get_id (s_con));
-
- state = nm_vpn_connection_get_vpn_state (NM_VPN_CONNECTION (active));
- print_string ("State", get_vpn_state_string (state));
-
- if (nm_active_connection_get_default (active))
- print_string ("Default", "yes");
- else
- print_string ("Default", "no");
-
- banner = nm_vpn_connection_get_banner (NM_VPN_CONNECTION (active));
- if (banner) {
- char **lines, **iter;
-
- printf ("\n Message:\n");
- lines = g_strsplit_set (banner, "\n\r", -1);
- for (iter = lines; *iter; iter++) {
- if (*iter && strlen (*iter))
- printf (" %s\n", *iter);
- }
- g_strfreev (lines);
- }
-
- printf ("\n\n");
-}
-
-static void
-get_one_connection (DBusGConnection *bus,
- const char *path,
- GHashTable *table)
-{
- DBusGProxy *proxy;
- NMConnection *connection = NULL;
- GError *error = NULL;
- GHashTable *settings = NULL;
-
- g_return_if_fail (bus != NULL);
- g_return_if_fail (path != NULL);
- g_return_if_fail (table != NULL);
-
- proxy = dbus_g_proxy_new_for_name (bus, NM_DBUS_SERVICE,
- path, NM_DBUS_IFACE_SETTINGS_CONNECTION);
- if (!proxy)
- return;
-
- if (!dbus_g_proxy_call (proxy, "GetSettings", &error,
- G_TYPE_INVALID,
- DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &settings,
- G_TYPE_INVALID)) {
- g_warning ("error: cannot retrieve connection: %s", error ? error->message : "(unknown)");
- goto out;
- }
-
- connection = nm_connection_new_from_hash (settings, &error);
- g_hash_table_destroy (settings);
-
- if (!connection) {
- g_warning ("error: invalid connection: '%s' / '%s' invalid: %d",
- error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(unknown)",
- error ? error->message : "(unknown)",
- error ? error->code : -1);
- goto out;
- }
-
- nm_connection_set_path (connection, path);
- g_hash_table_insert (table, g_strdup (path), g_object_ref (connection));
-
-out:
- g_clear_error (&error);
- if (connection)
- g_object_unref (connection);
- g_object_unref (proxy);
-}
-
-static gboolean
-get_all_connections (void)
-{
- GError *error = NULL;
- DBusGConnection *bus;
- DBusGProxy *proxy = NULL;
- GPtrArray *paths = NULL;
- int i;
- gboolean sucess = FALSE;
-
- bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (error || !bus) {
- g_warning ("error: could not connect to dbus");
- goto out;
- }
-
- proxy = dbus_g_proxy_new_for_name (bus,
- NM_DBUS_SERVICE,
- NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS);
- if (!proxy) {
- g_warning ("error: failed to create DBus proxy for settings service");
- goto out;
- }
-
- if (!dbus_g_proxy_call (proxy, "ListConnections", &error,
- G_TYPE_INVALID,
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &paths,
- G_TYPE_INVALID)) {
- /* No connections or settings service may not be running */
- g_clear_error (&error);
- goto out;
- }
-
- connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
-
- for (i = 0; paths && (i < paths->len); i++)
- get_one_connection (bus, g_ptr_array_index (paths, i), connections);
-
- sucess = TRUE;
-
-out:
- if (bus)
- dbus_g_connection_unref (bus);
- if (proxy)
- g_object_unref (proxy);
-
- return sucess;
-}
-
-int
-main (int argc, char *argv[])
-{
- NMClient *client;
- const GPtrArray *devices;
- const GPtrArray *active;
-
- g_type_init ();
-
- client = nm_client_new ();
- if (!client) {
- exit (1);
- }
-
- printf ("\nNetworkManager Tool\n\n");
-
- if (!get_nm_state (client)) {
- g_warning ("error: could not connect to NetworkManager");
- exit (1);
- }
-
- if (!get_all_connections ())
- exit (1);
-
- devices = nm_client_get_devices (client);
- if (devices)
- g_ptr_array_foreach ((GPtrArray *) devices, detail_device, NULL);
-
- active = nm_client_get_active_connections (client);
- if (active)
- g_ptr_array_foreach ((GPtrArray *) active, detail_vpn, NULL);
-
- g_object_unref (client);
- g_hash_table_unref (connections);
-
- return 0;
-}
diff --git a/tools/Makefile.am b/tools/Makefile.am
index abb7c5fa4..2fea947bb 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -1,19 +1,20 @@
GENERATE_SETTINGS_SPEC_SOURCE = generate-settings-spec.c
-noinst_PROGRAMS = \
- generate-settings-spec
-
-generate_settings_spec_SOURCES = \
- $(GENERATE_SETTINGS_SPEC_SOURCE)
-
-generate_settings_spec_CPPFLAGS = \
+AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
+noinst_PROGRAMS = \
+ generate-settings-spec
+
+generate_settings_spec_SOURCES = \
+ $(GENERATE_SETTINGS_SPEC_SOURCE)
+
generate_settings_spec_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(GLIB_LIBS) \
@@ -21,7 +22,5 @@ generate_settings_spec_LDADD = \
EXTRA_DIST = \
doc-generator.xsl \
- manpages-docbook.xsl \
check-exports.sh \
- glib-mkenums \
$(GENERATE_SETTINGS_SPEC_SOURCE)
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 9b0005b1b..e2102094e 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -83,7 +83,8 @@ subdir = tools
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -102,8 +103,7 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am__objects_1 = \
- generate_settings_spec-generate-settings-spec.$(OBJEXT)
+am__objects_1 = generate-settings-spec.$(OBJEXT)
am_generate_settings_spec_OBJECTS = $(am__objects_1)
generate_settings_spec_OBJECTS = $(am_generate_settings_spec_OBJECTS)
am__DEPENDENCIES_1 =
@@ -200,12 +200,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -230,7 +233,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -275,12 +277,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -297,6 +303,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -324,11 +332,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -343,6 +356,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -405,6 +419,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -415,18 +430,20 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
GENERATE_SETTINGS_SPEC_SOURCE = generate-settings-spec.c
-generate_settings_spec_SOURCES = \
- $(GENERATE_SETTINGS_SPEC_SOURCE)
-
-generate_settings_spec_CPPFLAGS = \
+AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
+generate_settings_spec_SOURCES = \
+ $(GENERATE_SETTINGS_SPEC_SOURCE)
+
generate_settings_spec_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(GLIB_LIBS) \
@@ -434,9 +451,7 @@ generate_settings_spec_LDADD = \
EXTRA_DIST = \
doc-generator.xsl \
- manpages-docbook.xsl \
check-exports.sh \
- glib-mkenums \
$(GENERATE_SETTINGS_SPEC_SOURCE)
all: all-am
@@ -493,7 +508,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_settings_spec-generate-settings-spec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate-settings-spec.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -516,20 +531,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-generate_settings_spec-generate-settings-spec.o: generate-settings-spec.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_settings_spec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT generate_settings_spec-generate-settings-spec.o -MD -MP -MF $(DEPDIR)/generate_settings_spec-generate-settings-spec.Tpo -c -o generate_settings_spec-generate-settings-spec.o `test -f 'generate-settings-spec.c' || echo '$(srcdir)/'`generate-settings-spec.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_settings_spec-generate-settings-spec.Tpo $(DEPDIR)/generate_settings_spec-generate-settings-spec.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='generate-settings-spec.c' object='generate_settings_spec-generate-settings-spec.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_settings_spec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o generate_settings_spec-generate-settings-spec.o `test -f 'generate-settings-spec.c' || echo '$(srcdir)/'`generate-settings-spec.c
-
-generate_settings_spec-generate-settings-spec.obj: generate-settings-spec.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_settings_spec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT generate_settings_spec-generate-settings-spec.obj -MD -MP -MF $(DEPDIR)/generate_settings_spec-generate-settings-spec.Tpo -c -o generate_settings_spec-generate-settings-spec.obj `if test -f 'generate-settings-spec.c'; then $(CYGPATH_W) 'generate-settings-spec.c'; else $(CYGPATH_W) '$(srcdir)/generate-settings-spec.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_settings_spec-generate-settings-spec.Tpo $(DEPDIR)/generate_settings_spec-generate-settings-spec.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='generate-settings-spec.c' object='generate_settings_spec-generate-settings-spec.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_settings_spec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o generate_settings_spec-generate-settings-spec.obj `if test -f 'generate-settings-spec.c'; then $(CYGPATH_W) 'generate-settings-spec.c'; else $(CYGPATH_W) '$(srcdir)/generate-settings-spec.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/tools/generate-settings-spec.c b/tools/generate-settings-spec.c
index 5281dcbf3..f53fdba16 100644
--- a/tools/generate-settings-spec.c
+++ b/tools/generate-settings-spec.c
@@ -30,29 +30,32 @@
#include <dbus/dbus-glib.h>
#include "config.h"
+#include <nm-setting.h>
#include <nm-setting-8021x.h>
#include <nm-setting-adsl.h>
#include <nm-setting-bluetooth.h>
+#include <nm-setting-bond.h>
+#include <nm-setting-bridge.h>
+#include <nm-setting-bridge-port.h>
#include <nm-setting-cdma.h>
#include <nm-setting-connection.h>
+#include <nm-setting-dcb.h>
#include <nm-setting-gsm.h>
-#include <nm-setting.h>
+#include <nm-setting-infiniband.h>
#include <nm-setting-ip4-config.h>
#include <nm-setting-ip6-config.h>
#include <nm-setting-olpc-mesh.h>
#include <nm-setting-ppp.h>
#include <nm-setting-pppoe.h>
#include <nm-setting-serial.h>
+#include <nm-setting-team.h>
+#include <nm-setting-team-port.h>
+#include <nm-setting-vlan.h>
#include <nm-setting-vpn.h>
#include <nm-setting-wimax.h>
#include <nm-setting-wired.h>
#include <nm-setting-wireless.h>
#include <nm-setting-wireless-security.h>
-#include <nm-setting-infiniband.h>
-#include <nm-setting-bond.h>
-#include <nm-setting-bridge.h>
-#include <nm-setting-bridge-port.h>
-#include <nm-setting-vlan.h>
#include <nm-utils.h>
@@ -67,6 +70,7 @@ static SettingNewFunc funcs[] = {
nm_setting_bridge_port_new,
nm_setting_cdma_new,
nm_setting_connection_new,
+ nm_setting_dcb_new,
nm_setting_gsm_new,
nm_setting_infiniband_new,
nm_setting_ip4_config_new,
@@ -75,6 +79,8 @@ static SettingNewFunc funcs[] = {
nm_setting_ppp_new,
nm_setting_pppoe_new,
nm_setting_serial_new,
+ nm_setting_team_new,
+ nm_setting_team_port_new,
nm_setting_vlan_new,
nm_setting_vpn_new,
nm_setting_wimax_new,
@@ -138,7 +144,7 @@ write_one_setting (FILE *f, gboolean book, SettingNewFunc func)
const char *key_name, *value_type, *value_desc;
char *default_value;
TypeNameElement *name_iter;
- GValue value = { 0, };
+ GValue value = G_VALUE_INIT;
char *flags_str = NULL;
value_type = g_type_name (G_PARAM_SPEC_VALUE_TYPE (*iter));
@@ -255,20 +261,23 @@ writer_header_docbook_manpage (FILE *f)
" </refmeta>\n"
" <refnamediv>\n"
" <refname>nm-settings</refname>\n"
- " <refpurpose>Description of settings and parameters of NetworkManager connections.</refpurpose>\n"
+ " <refpurpose>Description of settings and properties of NetworkManager connection profiles</refpurpose>\n"
" </refnamediv>\n"
" <refsect1>\n"
" <title>DESCRIPTION</title>\n"
" <para>\n"
- " NetworkManager is based on a concept of connections. These connections are\n"
- " then applied to a device to make an active network connection. Users can create\n"
- " as many connections as they see fit. The connections are handled by NetworkManager\n"
- " via <emphasis>settings service</emphasis> and are exported on D-Bus \n"
+ " NetworkManager is based on a concept of connection profiles, sometimes referred to as\n"
+ " connections only. These connection profiles contain a network configuration. When\n"
+ " NetworkManager activates a connection profile on a network device the configuration will\n"
+ " be applied and an active network connection will be established. Users are free to create\n"
+ " as many connection profiles as they see fit. Thus they are flexible in having various network\n"
+ " configurations for different networking needs. The connection profiles are handled by\n"
+ " NetworkManager via <emphasis>settings service</emphasis> and are exported on D-Bus\n"
" (<emphasis>/org/freedesktop/NetworkManager/Settings/&lt;num&gt;</emphasis> objects).\n"
" The conceptual objects can be described as follows:\n"
" <variablelist>\n"
" <varlistentry>\n"
- " <term>Connection</term>\n"
+ " <term>Connection (profile)</term>\n"
" <listitem>\n"
" <para>\n"
" A specific, encapsulated, independent group of settings describing\n"
@@ -279,7 +288,7 @@ writer_header_docbook_manpage (FILE *f)
" objects.\n"
" </para>\n"
" </listitem>\n"
- " </varlistentry>\n"
+ " </varlistentry>\n"
" </variablelist>\n"
" <variablelist>\n"
" <varlistentry>\n"
@@ -287,13 +296,25 @@ writer_header_docbook_manpage (FILE *f)
" <listitem>\n"
" <para>\n"
" A group of related key/value pairs describing a specific piece of a\n"
- " <emphasis>Connection</emphasis>. Settings keys and allowed values are\n"
- " described in the tables below. Developers can find the settings\n"
- " objects in the libnm-util sources. Look for the <function>class_init</function>\n"
- " functions near the bottoms of each setting source file.\n"
+ " <emphasis>Connection (profile)</emphasis>. Settings keys and allowed values are\n"
+ " described in the tables below. Keys are also reffered to as properties.\n"
+ " Developers can find the setting objects and their properties in the libnm-util\n"
+ " sources. Look for the <function>class_init</function> functions near the bottom of\n"
+ " each setting source file.\n"
" </para>\n"
" </listitem>\n"
- " </varlistentry>\n"
+ " </varlistentry>\n"
+ " </variablelist>\n"
+ " <variablelist>\n"
+ " <para>\n"
+ " The settings and properties shown in tables below list all available connection\n"
+ " configuration options. However, note that not all settings are applicable to all\n"
+ " connection types. NetworkManager provides a command-line tool <emphasis>nmcli</emphasis>\n"
+ " that allows direct configuration of the settings and properties according to a connection\n"
+ " profile type. <emphasis>nmcli</emphasis> connection editor has also a built-in\n"
+ " <emphasis>describe</emphasis> command that can display description of particular settings\n"
+ " and properties of this page.\n"
+ " </para>\n"
" </variablelist>\n",
time_str, VERSION);
}
@@ -346,7 +367,7 @@ writer_footer_docbook_manpage (FILE *f)
" <refsect1>\n"
" <title>SEE ALSO</title>\n"
" <para>https://live.gnome.org/NetworkManagerConfiguration</para>\n"
- " <para>NetworkManager(8), nmcli(1), NetworkManager.conf(5)</para>\n"
+ " <para>NetworkManager(8), nmcli(1), nmcli-examples(5), NetworkManager.conf(5)</para>\n"
" </refsect1>\n"
"</refentry>\n");
}
@@ -387,7 +408,9 @@ main (int argc, char *argv[])
usage (argv[0]);
}
+#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
+#endif
if (!nm_utils_init (&error)) {
fprintf (stderr, "ERR: failed to initialize libnm-util: %s", error->message);
diff --git a/tools/glib-mkenums b/tools/glib-mkenums
deleted file mode 100755
index 470f0939b..000000000
--- a/tools/glib-mkenums
+++ /dev/null
@@ -1,570 +0,0 @@
-#! /usr/bin/perl
-
-# This is glib-mkenums from glib 2.31.17, which adds the
-# --identifier-prefix and --symbol-prefix arguments which
-# are needed to correctly parse NM's enum names. It can
-# go away when NetworkManager depends on glib >= 2.32
-
-use warnings;
-use File::Basename;
-use Safe;
-
-# glib-mkenums.pl
-# Information about the current enumeration
-my $flags; # Is enumeration a bitmask?
-my $option_underscore_name; # Overriden underscore variant of the enum name
- # for example to fix the cases we don't get the
- # mixed-case -> underscorized transform right.
-my $option_lowercase_name; # DEPRECATED. A lower case name to use as part
- # of the *_get_type() function, instead of the
- # one that we guess. For instance, when an enum
- # uses abnormal capitalization and we can not
- # guess where to put the underscores.
-my $seenbitshift; # Have we seen bitshift operators?
-my $enum_prefix; # Prefix for this enumeration
-my $enumname; # Name for this enumeration
-my $enumshort; # $enumname without prefix
-my $enumname_prefix; # prefix of $enumname
-my $enumindex = 0; # Global enum counter
-my $firstenum = 1; # Is this the first enumeration per file?
-my @entries; # [ $name, $val ] for each entry
-my $sandbox = Safe->new; # sandbox for safe evaluation of expressions
-
-sub parse_trigraph {
- my $opts = shift;
- my @opts;
-
- for $opt (split /\s*,\s*/, $opts) {
- $opt =~ s/^\s*//;
- $opt =~ s/\s*$//;
- my ($key,$val) = $opt =~ /(\w+)(?:=(.+))?/;
- defined $val or $val = 1;
- push @opts, $key, $val;
- }
- @opts;
-}
-sub parse_entries {
- my $file = shift;
- my $file_name = shift;
- my $looking_for_name = 0;
-
- while (<$file>) {
- # read lines until we have no open comments
- while (m@/\*([^*]|\*(?!/))*$@) {
- my $new;
- defined ($new = <$file>) || die "Unmatched comment in $ARGV";
- $_ .= $new;
- }
- # strip comments w/o options
- s@/\*(?!<)
- ([^*]+|\*(?!/))*
- \*/@@gx;
-
- # strip newlines
- s@\n@ @;
-
- # skip empty lines
- next if m@^\s*$@;
-
- if ($looking_for_name) {
- if (/^\s*(\w+)/) {
- $enumname = $1;
- return 1;
- }
- }
-
- # Handle include files
- if (/^\#include\s*<([^>]*)>/ ) {
- my $file= "../$1";
- open NEWFILE, $file or die "Cannot open include file $file: $!\n";
-
- if (parse_entries (\*NEWFILE, $NEWFILE)) {
- return 1;
- } else {
- next;
- }
- }
-
- if (/^\s*\}\s*(\w+)/) {
- $enumname = $1;
- $enumindex++;
- return 1;
- }
-
- if (/^\s*\}/) {
- $enumindex++;
- $looking_for_name = 1;
- next;
- }
-
- if (m@^\s*
- (\w+)\s* # name
- (?:=( # value
- \s*\w+\s*\(.*\)\s* # macro with multiple args
- | # OR
- (?:[^,/]|/(?!\*))* # anything but a comma or comment
- ))?,?\s*
- (?:/\*< # options
- (([^*]|\*(?!/))*)
- >\s*\*/)?,?
- \s*$
- @x) {
- my ($name, $value, $options) = ($1,$2,$3);
-
- if (!defined $flags && defined $value && $value =~ /<</) {
- $seenbitshift = 1;
- }
-
- if (defined $options) {
- my %options = parse_trigraph($options);
- if (!defined $options{skip}) {
- push @entries, [ $name, $value, $options{nick} ];
- }
- } else {
- push @entries, [ $name, $value ];
- }
- } elsif (m@^\s*\#@) {
- # ignore preprocessor directives
- } else {
- print STDERR "$0: $file_name:$.: Failed to parse `$_'\n";
- }
- }
-
- return 0;
-}
-
-sub version {
- print "glib-mkenums version glib-2.31.17\n";
- print "glib-mkenums comes with ABSOLUTELY NO WARRANTY.\n";
- print "You may redistribute copies of glib-mkenums under the terms of\n";
- print "the GNU General Public License which can be found in the\n";
- print "GLib source package. Sources, examples and contact\n";
- print "information are available at http://www.gtk.org\n";
- exit 0;
-}
-sub usage {
- print "Usage:\n";
- print " glib-mkenums [OPTION...] [FILES...]\n\n";
- print "Help Options:\n";
- print " -h, --help Show this help message\n\n";
- print "Utility Options:\n";
- print " --identifier-prefix <text> Identifier prefix\n";
- print " --symbol-prefix <text> Symbol prefix\n";
- print " --fhead <text> Output file header\n";
- print " --fprod <text> Per input file production\n";
- print " --ftail <text> Output file trailer\n";
- print " --eprod <text> Per enum text (produced prior to value itarations)\n";
- print " --vhead <text> Value header, produced before iterating over enum values\n";
- print " --vprod <text> Value text, produced for each enum value\n";
- print " --vtail <text> Value tail, produced after iterating over enum values\n";
- print " --comments <text> Comment structure\n";
- print " --template file Template file\n";
- print " -v, --version Print version informations\n\n";
- print "Production text substitutions:\n";
- print " \@EnumName\@ PrefixTheXEnum\n";
- print " \@enum_name\@ prefix_the_xenum\n";
- print " \@ENUMNAME\@ PREFIX_THE_XENUM\n";
- print " \@ENUMSHORT\@ THE_XENUM\n";
- print " \@ENUMPREFIX\@ PREFIX\n";
- print " \@VALUENAME\@ PREFIX_THE_XVALUE\n";
- print " \@valuenick\@ the-xvalue\n";
- print " \@valuenum\@ the integer value (limited support, Since: 2.26)\n";
- print " \@type\@ either enum or flags\n";
- print " \@Type\@ either Enum or Flags\n";
- print " \@TYPE\@ either ENUM or FLAGS\n";
- print " \@filename\@ name of current input file\n";
- print " \@basename\@ base name of the current input file (Since: 2.22)\n";
- exit 0;
-}
-
-# production variables:
-my $idprefix = ""; # "G", "Gtk", etc
-my $symprefix = ""; # "g", "gtk", etc, if not just lc($idprefix)
-my $fhead = ""; # output file header
-my $fprod = ""; # per input file production
-my $ftail = ""; # output file trailer
-my $eprod = ""; # per enum text (produced prior to value itarations)
-my $vhead = ""; # value header, produced before iterating over enum values
-my $vprod = ""; # value text, produced for each enum value
-my $vtail = ""; # value tail, produced after iterating over enum values
-my $comment_tmpl = ""; # comment template
-
-sub read_template_file {
- my ($file) = @_;
- my %tmpl = ('file-header', $fhead,
- 'file-production', $fprod,
- 'file-tail', $ftail,
- 'enumeration-production', $eprod,
- 'value-header', $vhead,
- 'value-production', $vprod,
- 'value-tail', $vtail,
- 'comment', $comment_tmpl);
- my $in = 'junk';
- open (FILE, $file) || die "Can't open $file: $!\n";
- while (<FILE>) {
- if (/^\/\*\*\*\s+(BEGIN|END)\s+([\w-]+)\s+\*\*\*\//) {
- if (($in eq 'junk') && ($1 eq 'BEGIN') && (exists($tmpl{$2}))) {
- $in = $2;
- next;
- }
- elsif (($in eq $2) && ($1 eq 'END') && (exists($tmpl{$2}))) {
- $in = 'junk';
- next;
- } else {
- die "Malformed template file $file\n";
- }
- }
- if (!($in eq 'junk')) {
- $tmpl{$in} .= $_;
- }
- }
- close (FILE);
- if (!($in eq 'junk')) {
- die "Malformed template file $file\n";
- }
- $fhead = $tmpl{'file-header'};
- $fprod = $tmpl{'file-production'};
- $ftail = $tmpl{'file-tail'};
- $eprod = $tmpl{'enumeration-production'};
- $vhead = $tmpl{'value-header'};
- $vprod = $tmpl{'value-production'};
- $vtail = $tmpl{'value-tail'};
- $comment_tmpl = $tmpl{'comment'};
-
- # default to C-style comments
- $comment_tmpl = "/* \@comment\@ */" if $comment_tmpl eq "";
-}
-
-if (!defined $ARGV[0]) {
- usage;
-}
-while ($_=$ARGV[0],/^-/) {
- shift;
- last if /^--$/;
- if (/^--template$/) { read_template_file (shift); }
- elsif (/^--identifier-prefix$/) { $idprefix = shift }
- elsif (/^--symbol-prefix$/) { $symprefix = shift }
- elsif (/^--fhead$/) { $fhead = $fhead . shift }
- elsif (/^--fprod$/) { $fprod = $fprod . shift }
- elsif (/^--ftail$/) { $ftail = $ftail . shift }
- elsif (/^--eprod$/) { $eprod = $eprod . shift }
- elsif (/^--vhead$/) { $vhead = $vhead . shift }
- elsif (/^--vprod$/) { $vprod = $vprod . shift }
- elsif (/^--vtail$/) { $vtail = $vtail . shift }
- elsif (/^--comments$/) { $comment_tmpl = shift }
- elsif (/^--help$/ || /^-h$/ || /^-\?$/) { usage; }
- elsif (/^--version$/ || /^-v$/) { version; }
- else { usage; }
- last if not defined($ARGV[0]);
-}
-
-# put auto-generation comment
-{
- my $comment = $comment_tmpl;
- $comment =~ s/\@comment\@/Generated data (by glib-mkenums)/;
- print "\n" . $comment . "\n\n";
-}
-
-if (length($fhead)) {
- my $prod = $fhead;
- my $base = basename ($ARGV[0]);
-
- $prod =~ s/\@filename\@/$ARGV[0]/g;
- $prod =~ s/\@basename\@/$base/g;
- $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
- $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
- chomp ($prod);
-
- print "$prod\n";
-}
-
-while (<>) {
- if (eof) {
- close (ARGV); # reset line numbering
- $firstenum = 1; # Flag to print filename at next enum
- }
-
- # read lines until we have no open comments
- while (m@/\*([^*]|\*(?!/))*$@) {
- my $new;
- defined ($new = <>) || die "Unmatched comment in $ARGV";
- $_ .= $new;
- }
- # strip comments w/o options
- s@/\*(?!<)
- ([^*]+|\*(?!/))*
- \*/@@gx;
-
- # ignore forward declarations
- next if /^\s*typedef\s+enum.*;/;
-
- if (m@^\s*typedef\s+enum\s*
- ({)?\s*
- (?:/\*<
- (([^*]|\*(?!/))*)
- >\s*\*/)?
- \s*({)?
- @x) {
- if (defined $2) {
- my %options = parse_trigraph ($2);
- next if defined $options{skip};
- $enum_prefix = $options{prefix};
- $flags = $options{flags};
- $option_lowercase_name = $options{lowercase_name};
- $option_underscore_name = $options{underscore_name};
- } else {
- $enum_prefix = undef;
- $flags = undef;
- $option_lowercase_name = undef;
- $option_underscore_name = undef;
- }
- if (defined $option_lowercase_name) {
- if (defined $option_underscore_name) {
- print STDERR "$0: $ARGV:$.: lowercase_name overriden with underscore_name\n";
- $option_lowercase_name = undef;
- } else {
- print STDERR "$0: $ARGV:$.: lowercase_name is deprecated, use underscore_name\n";
- }
- }
- # Didn't have trailing '{' look on next lines
- if (!defined $1 && !defined $4) {
- while (<>) {
- if (eof) {
- die "Hit end of file while parsing enum in $ARGV";
- }
- if (s/^\s*\{//) {
- last;
- }
- }
- }
-
- $seenbitshift = 0;
- @entries = ();
-
- # Now parse the entries
- parse_entries (\*ARGV, $ARGV);
-
- # figure out if this was a flags or enums enumeration
- if (!defined $flags) {
- $flags = $seenbitshift;
- }
-
- # Autogenerate a prefix
- if (!defined $enum_prefix) {
- for (@entries) {
- my $nick = $_->[2];
- if (!defined $nick) {
- my $name = $_->[0];
- if (defined $enum_prefix) {
- my $tmp = ~ ($name ^ $enum_prefix);
- ($tmp) = $tmp =~ /(^\xff*)/;
- $enum_prefix = $enum_prefix & $tmp;
- } else {
- $enum_prefix = $name;
- }
- }
- }
- if (!defined $enum_prefix) {
- $enum_prefix = "";
- } else {
- # Trim so that it ends in an underscore
- $enum_prefix =~ s/_[^_]*$/_/;
- }
- } else {
- # canonicalize user defined prefixes
- $enum_prefix = uc($enum_prefix);
- $enum_prefix =~ s/-/_/g;
- $enum_prefix =~ s/(.*)([^_])$/$1$2_/;
- }
-
- for $entry (@entries) {
- my ($name,$num,$nick) = @{$entry};
- if (!defined $nick) {
- ($nick = $name) =~ s/^$enum_prefix//;
- $nick =~ tr/_/-/;
- $nick = lc($nick);
- @{$entry} = ($name, $num, $nick);
- }
- }
-
-
- # Spit out the output
- if (defined $option_underscore_name) {
- $enumlong = uc $option_underscore_name;
- $enumsym = lc $option_underscore_name;
- $enumshort = $enumlong;
- $enumshort =~ s/^[A-Z][A-Z0-9]*_//;
-
- $enumname_prefix = $enumlong;
- $enumname_prefix =~ s/_$enumshort$//;
- } elsif (!$symprefix && !$idprefix) {
- # enumname is e.g. GMatchType
- $enspace = $enumname;
- $enspace =~ s/^([A-Z][a-z]*).*$/$1/;
-
- $enumshort = $enumname;
- $enumshort =~ s/^[A-Z][a-z]*//;
- $enumshort =~ s/([^A-Z])([A-Z])/$1_$2/g;
- $enumshort =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g;
- $enumshort = uc($enumshort);
-
- $enumname_prefix = $enumname;
- $enumname_prefix =~ s/^([A-Z][a-z]*).*$/$1/;
- $enumname_prefix = uc($enumname_prefix);
-
- $enumlong = uc($enspace) . "_" . $enumshort;
- $enumsym = lc($enspace) . "_" . lc($enumshort);
-
- if (defined($option_lowercase_name)) {
- $enumsym = $option_lowercase_name;
- }
- } else {
- $enumshort = $enumname;
- if ($idprefix) {
- $enumshort =~ s/^${idprefix}//;
- } else {
- $enumshort =~ s/^[A-Z][a-z]*//;
- }
- $enumshort =~ s/([^A-Z])([A-Z])/$1_$2/g;
- $enumshort =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g;
- $enumshort = uc($enumshort);
-
- $enumname_prefix = $symprefix && uc($symprefix) || uc($idprefix);
-
- $enumlong = $enumname_prefix . "_" . $enumshort;
- $enumsym = lc($enumlong);
- }
-
- if ($firstenum) {
- $firstenum = 0;
-
- if (length($fprod)) {
- my $prod = $fprod;
- my $base = basename ($ARGV);
-
- $prod =~ s/\@filename\@/$ARGV/g;
- $prod =~ s/\@basename\@/$base/g;
- $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
- $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
- chomp ($prod);
-
- print "$prod\n";
- }
- }
-
- if (length($eprod)) {
- my $prod = $eprod;
-
- $prod =~ s/\@enum_name\@/$enumsym/g;
- $prod =~ s/\@EnumName\@/$enumname/g;
- $prod =~ s/\@ENUMSHORT\@/$enumshort/g;
- $prod =~ s/\@ENUMNAME\@/$enumlong/g;
- $prod =~ s/\@ENUMPREFIX\@/$enumname_prefix/g;
- if ($flags) { $prod =~ s/\@type\@/flags/g; } else { $prod =~ s/\@type\@/enum/g; }
- if ($flags) { $prod =~ s/\@Type\@/Flags/g; } else { $prod =~ s/\@Type\@/Enum/g; }
- if ($flags) { $prod =~ s/\@TYPE\@/FLAGS/g; } else { $prod =~ s/\@TYPE\@/ENUM/g; }
- $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
- $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
- chomp ($prod);
-
- print "$prod\n";
- }
-
- if (length($vhead)) {
- my $prod = $vhead;
-
- $prod =~ s/\@enum_name\@/$enumsym/g;
- $prod =~ s/\@EnumName\@/$enumname/g;
- $prod =~ s/\@ENUMSHORT\@/$enumshort/g;
- $prod =~ s/\@ENUMNAME\@/$enumlong/g;
- $prod =~ s/\@ENUMPREFIX\@/$enumname_prefix/g;
- if ($flags) { $prod =~ s/\@type\@/flags/g; } else { $prod =~ s/\@type\@/enum/g; }
- if ($flags) { $prod =~ s/\@Type\@/Flags/g; } else { $prod =~ s/\@Type\@/Enum/g; }
- if ($flags) { $prod =~ s/\@TYPE\@/FLAGS/g; } else { $prod =~ s/\@TYPE\@/ENUM/g; }
- $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
- $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
- chomp ($prod);
-
- print "$prod\n";
- }
-
- if (length($vprod)) {
- my $prod = $vprod;
- my $next_num = 0;
-
- $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
- $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
- for (@entries) {
- my ($name,$num,$nick) = @{$_};
- my $tmp_prod = $prod;
-
- if ($prod =~ /\@valuenum\@/) {
- # only attempt to eval the value if it is requested
- # this prevents us from throwing errors otherwise
- if (defined $num) {
- # use sandboxed perl evaluation as a reasonable
- # approximation to C constant folding
- $num = $sandbox->reval ($num);
-
- # make sure it parsed to an integer
- if (!defined $num or $num !~ /^-?\d+$/) {
- die "Unable to parse enum value '$num'";
- }
- } else {
- $num = $next_num;
- }
-
- $tmp_prod =~ s/\@valuenum\@/$num/g;
- $next_num = $num + 1;
- }
-
- $tmp_prod =~ s/\@VALUENAME\@/$name/g;
- $tmp_prod =~ s/\@valuenick\@/$nick/g;
- if ($flags) { $tmp_prod =~ s/\@type\@/flags/g; } else { $tmp_prod =~ s/\@type\@/enum/g; }
- if ($flags) { $tmp_prod =~ s/\@Type\@/Flags/g; } else { $tmp_prod =~ s/\@Type\@/Enum/g; }
- if ($flags) { $tmp_prod =~ s/\@TYPE\@/FLAGS/g; } else { $tmp_prod =~ s/\@TYPE\@/ENUM/g; }
- chomp ($tmp_prod);
-
- print "$tmp_prod\n";
- }
- }
-
- if (length($vtail)) {
- my $prod = $vtail;
-
- $prod =~ s/\@enum_name\@/$enumsym/g;
- $prod =~ s/\@EnumName\@/$enumname/g;
- $prod =~ s/\@ENUMSHORT\@/$enumshort/g;
- $prod =~ s/\@ENUMNAME\@/$enumlong/g;
- $prod =~ s/\@ENUMPREFIX\@/$enumname_prefix/g;
- if ($flags) { $prod =~ s/\@type\@/flags/g; } else { $prod =~ s/\@type\@/enum/g; }
- if ($flags) { $prod =~ s/\@Type\@/Flags/g; } else { $prod =~ s/\@Type\@/Enum/g; }
- if ($flags) { $prod =~ s/\@TYPE\@/FLAGS/g; } else { $prod =~ s/\@TYPE\@/ENUM/g; }
- $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
- $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
- chomp ($prod);
-
- print "$prod\n";
- }
- }
-}
-
-if (length($ftail)) {
- my $prod = $ftail;
- my $base = basename ($ARGV);
-
- $prod =~ s/\@filename\@/$ARGV/g;
- $prod =~ s/\@basename\@/$base/g;
- $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
- $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
- chomp ($prod);
-
- print "$prod\n";
-}
-
-# put auto-generation comment
-{
- my $comment = $comment_tmpl;
- $comment =~ s/\@comment\@/Generated data ends here/;
- print "\n" . $comment . "\n\n";
-}
diff --git a/tools/manpages-docbook.xsl b/tools/manpages-docbook.xsl
deleted file mode 100644
index 15e87a0f5..000000000
--- a/tools/manpages-docbook.xsl
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0'?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version='1.0'>
-<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"/>
-</xsl:stylesheet>
diff --git a/tui/Makefile.am b/tui/Makefile.am
new file mode 100644
index 000000000..755b68941
--- /dev/null
+++ b/tui/Makefile.am
@@ -0,0 +1,126 @@
+if BUILD_NMTUI
+
+SUBDIRS = newt .
+
+AM_CPPFLAGS= \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/libnm-glib \
+ -I$(srcdir)/newt \
+ $(GLIB_CFLAGS) \
+ $(NEWT_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(GUDEV_CFLAGS) \
+ -DG_LOG_DOMAIN=\""nmtui"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DLOCALEDIR=\""$(localedir)"\" \
+ $(NULL)
+
+bin_PROGRAMS = nmtui
+links = nmtui-edit nmtui-connect nmtui-hostname
+
+install-exec-hook:
+ for link in $(links); do \
+ ln -f $(DESTDIR)$(bindir)/nmtui $(DESTDIR)$(bindir)/$$link; \
+ done
+
+uninstall-hook:
+ for link in $(links); do \
+ rm -f $(DESTDIR)$(bindir)/$$link; \
+ done
+
+nmtui_SOURCES = \
+ nmtui.c \
+ nmtui.h \
+ nmtui-connect.c \
+ nmtui-connect.h \
+ nmtui-edit.c \
+ nmtui-edit.h \
+ nmtui-hostname.c \
+ nmtui-hostname.h \
+ \
+ nm-editor-bindings.c \
+ nm-editor-bindings.h \
+ nm-editor-utils.c \
+ nm-editor-utils.h \
+ \
+ nmt-address-list.c \
+ nmt-address-list.h \
+ nmt-connect-connection-list.c \
+ nmt-connect-connection-list.h \
+ nmt-device-entry.c \
+ nmt-device-entry.h \
+ nmt-edit-connection-list.c \
+ nmt-edit-connection-list.h \
+ nmt-editor-page.c \
+ nmt-editor-page.h \
+ nmt-editor.c \
+ nmt-editor.h \
+ nmt-ip-entry.c \
+ nmt-ip-entry.h \
+ nmt-mac-entry.c \
+ nmt-mac-entry.h \
+ nmt-mtu-entry.c \
+ nmt-mtu-entry.h \
+ nmt-page-bond.c \
+ nmt-page-bond.h \
+ nmt-page-bridge.c \
+ nmt-page-bridge.h \
+ nmt-page-bridge-port.c \
+ nmt-page-bridge-port.h \
+ nmt-page-device.c \
+ nmt-page-device.h \
+ nmt-page-ethernet.c \
+ nmt-page-ethernet.h \
+ nmt-page-grid.c \
+ nmt-page-grid.h \
+ nmt-page-infiniband.c \
+ nmt-page-infiniband.h \
+ nmt-page-ip4.c \
+ nmt-page-ip4.h \
+ nmt-page-ip6.c \
+ nmt-page-ip6.h \
+ nmt-page-main.c \
+ nmt-page-main.h \
+ nmt-page-team.c \
+ nmt-page-team.h \
+ nmt-page-team-port.c \
+ nmt-page-team-port.h \
+ nmt-page-vlan.c \
+ nmt-page-vlan.h \
+ nmt-page-wifi.c \
+ nmt-page-wifi.h \
+ nmt-password-dialog.c \
+ nmt-password-dialog.h \
+ nmt-password-fields.c \
+ nmt-password-fields.h \
+ nmt-route-editor.c \
+ nmt-route-editor.h \
+ nmt-route-entry.c \
+ nmt-route-entry.h \
+ nmt-route-table.c \
+ nmt-route-table.h \
+ nmt-secret-agent.c \
+ nmt-secret-agent.h \
+ nmt-slave-list.c \
+ nmt-slave-list.h \
+ nmt-utils.c \
+ nmt-utils.h \
+ nmt-widget-list.c \
+ nmt-widget-list.h \
+ $(NULL)
+
+nmtui_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
+ $(builddir)/newt/libnmt-newt.a \
+ $(GUDEV_LIBS) \
+ $(DBUS_LIBS) \
+ $(NEWT_LIBS) \
+ $(GLIB_LIBS) \
+ $(NULL)
+
+endif
diff --git a/src/settings/Makefile.in b/tui/Makefile.in
index 55269361b..e7368d059 100644
--- a/src/settings/Makefile.in
+++ b/tui/Makefile.in
@@ -78,11 +78,13 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/settings
+@BUILD_NMTUI_TRUE@bin_PROGRAMS = nmtui$(EXEEXT)
+subdir = tui
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,39 +102,80 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__nmtui_SOURCES_DIST = nmtui.c nmtui.h nmtui-connect.c \
+ nmtui-connect.h nmtui-edit.c nmtui-edit.h nmtui-hostname.c \
+ nmtui-hostname.h nm-editor-bindings.c nm-editor-bindings.h \
+ nm-editor-utils.c nm-editor-utils.h nmt-address-list.c \
+ nmt-address-list.h nmt-connect-connection-list.c \
+ nmt-connect-connection-list.h nmt-device-entry.c \
+ nmt-device-entry.h nmt-edit-connection-list.c \
+ nmt-edit-connection-list.h nmt-editor-page.c nmt-editor-page.h \
+ nmt-editor.c nmt-editor.h nmt-ip-entry.c nmt-ip-entry.h \
+ nmt-mac-entry.c nmt-mac-entry.h nmt-mtu-entry.c \
+ nmt-mtu-entry.h nmt-page-bond.c nmt-page-bond.h \
+ nmt-page-bridge.c nmt-page-bridge.h nmt-page-bridge-port.c \
+ nmt-page-bridge-port.h nmt-page-device.c nmt-page-device.h \
+ nmt-page-ethernet.c nmt-page-ethernet.h nmt-page-grid.c \
+ nmt-page-grid.h nmt-page-infiniband.c nmt-page-infiniband.h \
+ nmt-page-ip4.c nmt-page-ip4.h nmt-page-ip6.c nmt-page-ip6.h \
+ nmt-page-main.c nmt-page-main.h nmt-page-team.c \
+ nmt-page-team.h nmt-page-team-port.c nmt-page-team-port.h \
+ nmt-page-vlan.c nmt-page-vlan.h nmt-page-wifi.c \
+ nmt-page-wifi.h nmt-password-dialog.c nmt-password-dialog.h \
+ nmt-password-fields.c nmt-password-fields.h nmt-route-editor.c \
+ nmt-route-editor.h nmt-route-entry.c nmt-route-entry.h \
+ nmt-route-table.c nmt-route-table.h nmt-secret-agent.c \
+ nmt-secret-agent.h nmt-slave-list.c nmt-slave-list.h \
+ nmt-utils.c nmt-utils.h nmt-widget-list.c nmt-widget-list.h
+@BUILD_NMTUI_TRUE@am_nmtui_OBJECTS = nmtui.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmtui-connect.$(OBJEXT) nmtui-edit.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmtui-hostname.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nm-editor-bindings.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nm-editor-utils.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-address-list.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-connect-connection-list.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-device-entry.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-edit-connection-list.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-editor-page.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-editor.$(OBJEXT) nmt-ip-entry.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-mac-entry.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-mtu-entry.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-bond.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-bridge.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-bridge-port.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-device.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-ethernet.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-grid.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-infiniband.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-ip4.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-ip6.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-main.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-team.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-team-port.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-vlan.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-page-wifi.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-password-dialog.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-password-fields.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-route-editor.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-route-entry.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-route-table.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-secret-agent.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-slave-list.$(OBJEXT) nmt-utils.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-widget-list.$(OBJEXT)
+nmtui_OBJECTS = $(am_nmtui_OBJECTS)
am__DEPENDENCIES_1 =
-libsettings_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(builddir)/plugins/keyfile/libnm-settings-plugin-keyfile.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_libsettings_la_OBJECTS = libsettings_la-nm-settings.lo \
- libsettings_la-nm-inotify-helper.lo \
- libsettings_la-nm-settings-error.lo \
- libsettings_la-nm-system-config-interface.lo \
- libsettings_la-nm-settings-connection.lo \
- libsettings_la-nm-default-wired-connection.lo \
- libsettings_la-nm-agent-manager.lo \
- libsettings_la-nm-secret-agent.lo \
- libsettings_la-nm-settings-utils.lo
-libsettings_la_OBJECTS = $(am_libsettings_la_OBJECTS)
+@BUILD_NMTUI_TRUE@nmtui_DEPENDENCIES = \
+@BUILD_NMTUI_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@BUILD_NMTUI_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
+@BUILD_NMTUI_TRUE@ $(builddir)/newt/libnmt-newt.a \
+@BUILD_NMTUI_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+@BUILD_NMTUI_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-libsettings_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(AM_CFLAGS) $(CFLAGS) $(libsettings_la_LDFLAGS) $(LDFLAGS) -o \
- $@
-libtest_settings_utils_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_libtest_settings_utils_la_OBJECTS = nm-settings-utils.lo
-libtest_settings_utils_la_OBJECTS = \
- $(am_libtest_settings_utils_la_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -167,10 +210,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libsettings_la_SOURCES) \
- $(libtest_settings_utils_la_SOURCES)
-DIST_SOURCES = $(libsettings_la_SOURCES) \
- $(libtest_settings_utils_la_SOURCES)
+SOURCES = $(nmtui_SOURCES)
+DIST_SOURCES = $(am__nmtui_SOURCES_DIST)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -211,7 +252,7 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
+DIST_SUBDIRS = newt .
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -263,12 +304,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -293,7 +337,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -338,12 +381,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -360,6 +407,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -387,11 +436,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -406,6 +460,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -468,6 +523,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -478,82 +534,118 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-SUBDIRS = plugins . tests
-AM_CPPFLAGS = \
- -I${top_srcdir} \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/src/generated \
- -I${top_srcdir}/src/generated \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS)
-
-noinst_LTLIBRARIES = libsettings.la libtest-settings-utils.la
-libtest_settings_utils_la_SOURCES = \
- nm-settings-utils.c \
- nm-settings-utils.h
-
-libtest_settings_utils_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-BUILT_SOURCES = \
- nm-settings-glue.h \
- nm-settings-connection-glue.h \
- nm-agent-manager-glue.h
-
-libsettings_la_SOURCES = \
- nm-settings.c \
- nm-settings.h \
- nm-inotify-helper.c \
- nm-inotify-helper.h \
- nm-settings-error.c \
- nm-settings-error.h \
- nm-system-config-interface.c \
- nm-system-config-interface.h \
- nm-settings-connection.c \
- nm-settings-connection.h \
- nm-default-wired-connection.c \
- nm-default-wired-connection.h \
- nm-agent-manager.c \
- nm-agent-manager.h \
- nm-secret-agent.c \
- nm-secret-agent.h \
- nm-settings-utils.h \
- nm-settings-utils.c
-
-libsettings_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- $(POLKIT_CFLAGS) \
- -DBINDIR=\"$(bindir)\" \
- -DSBINDIR=\"$(sbindir)\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DDATADIR=\"$(datadir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
- -DNMSTATEDIR=\"$(nmstatedir)\" \
- -DGNOMELOCALEDIR=\"$(datadir)/locale\" \
- -DPLUGINDIR=\"$(pkglibdir)\"
-
-libsettings_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/src/generated/libnm-generated.la \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(builddir)/plugins/keyfile/libnm-settings-plugin-keyfile.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS) \
- $(POLKIT_LIBS)
-
-libsettings_la_LDFLAGS = -rdynamic
-CLEANFILES = \
- $(BUILT_SOURCES)
-
-all: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) all-recursive
+with_valgrind = @with_valgrind@
+@BUILD_NMTUI_TRUE@SUBDIRS = newt .
+@BUILD_NMTUI_TRUE@AM_CPPFLAGS = \
+@BUILD_NMTUI_TRUE@ -I$(top_srcdir) \
+@BUILD_NMTUI_TRUE@ -I$(top_srcdir)/include \
+@BUILD_NMTUI_TRUE@ -I$(top_builddir)/include \
+@BUILD_NMTUI_TRUE@ -I$(top_srcdir)/libnm-util \
+@BUILD_NMTUI_TRUE@ -I$(top_builddir)/libnm-util \
+@BUILD_NMTUI_TRUE@ -I$(top_srcdir)/libnm-glib \
+@BUILD_NMTUI_TRUE@ -I$(srcdir)/newt \
+@BUILD_NMTUI_TRUE@ $(GLIB_CFLAGS) \
+@BUILD_NMTUI_TRUE@ $(NEWT_CFLAGS) \
+@BUILD_NMTUI_TRUE@ $(DBUS_CFLAGS) \
+@BUILD_NMTUI_TRUE@ $(GUDEV_CFLAGS) \
+@BUILD_NMTUI_TRUE@ -DG_LOG_DOMAIN=\""nmtui"\" \
+@BUILD_NMTUI_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@BUILD_NMTUI_TRUE@ -DLOCALEDIR=\""$(localedir)"\" \
+@BUILD_NMTUI_TRUE@ $(NULL)
+
+@BUILD_NMTUI_TRUE@links = nmtui-edit nmtui-connect nmtui-hostname
+@BUILD_NMTUI_TRUE@nmtui_SOURCES = \
+@BUILD_NMTUI_TRUE@ nmtui.c \
+@BUILD_NMTUI_TRUE@ nmtui.h \
+@BUILD_NMTUI_TRUE@ nmtui-connect.c \
+@BUILD_NMTUI_TRUE@ nmtui-connect.h \
+@BUILD_NMTUI_TRUE@ nmtui-edit.c \
+@BUILD_NMTUI_TRUE@ nmtui-edit.h \
+@BUILD_NMTUI_TRUE@ nmtui-hostname.c \
+@BUILD_NMTUI_TRUE@ nmtui-hostname.h \
+@BUILD_NMTUI_TRUE@ \
+@BUILD_NMTUI_TRUE@ nm-editor-bindings.c \
+@BUILD_NMTUI_TRUE@ nm-editor-bindings.h \
+@BUILD_NMTUI_TRUE@ nm-editor-utils.c \
+@BUILD_NMTUI_TRUE@ nm-editor-utils.h \
+@BUILD_NMTUI_TRUE@ \
+@BUILD_NMTUI_TRUE@ nmt-address-list.c \
+@BUILD_NMTUI_TRUE@ nmt-address-list.h \
+@BUILD_NMTUI_TRUE@ nmt-connect-connection-list.c \
+@BUILD_NMTUI_TRUE@ nmt-connect-connection-list.h \
+@BUILD_NMTUI_TRUE@ nmt-device-entry.c \
+@BUILD_NMTUI_TRUE@ nmt-device-entry.h \
+@BUILD_NMTUI_TRUE@ nmt-edit-connection-list.c \
+@BUILD_NMTUI_TRUE@ nmt-edit-connection-list.h \
+@BUILD_NMTUI_TRUE@ nmt-editor-page.c \
+@BUILD_NMTUI_TRUE@ nmt-editor-page.h \
+@BUILD_NMTUI_TRUE@ nmt-editor.c \
+@BUILD_NMTUI_TRUE@ nmt-editor.h \
+@BUILD_NMTUI_TRUE@ nmt-ip-entry.c \
+@BUILD_NMTUI_TRUE@ nmt-ip-entry.h \
+@BUILD_NMTUI_TRUE@ nmt-mac-entry.c \
+@BUILD_NMTUI_TRUE@ nmt-mac-entry.h \
+@BUILD_NMTUI_TRUE@ nmt-mtu-entry.c \
+@BUILD_NMTUI_TRUE@ nmt-mtu-entry.h \
+@BUILD_NMTUI_TRUE@ nmt-page-bond.c \
+@BUILD_NMTUI_TRUE@ nmt-page-bond.h \
+@BUILD_NMTUI_TRUE@ nmt-page-bridge.c \
+@BUILD_NMTUI_TRUE@ nmt-page-bridge.h \
+@BUILD_NMTUI_TRUE@ nmt-page-bridge-port.c \
+@BUILD_NMTUI_TRUE@ nmt-page-bridge-port.h \
+@BUILD_NMTUI_TRUE@ nmt-page-device.c \
+@BUILD_NMTUI_TRUE@ nmt-page-device.h \
+@BUILD_NMTUI_TRUE@ nmt-page-ethernet.c \
+@BUILD_NMTUI_TRUE@ nmt-page-ethernet.h \
+@BUILD_NMTUI_TRUE@ nmt-page-grid.c \
+@BUILD_NMTUI_TRUE@ nmt-page-grid.h \
+@BUILD_NMTUI_TRUE@ nmt-page-infiniband.c \
+@BUILD_NMTUI_TRUE@ nmt-page-infiniband.h \
+@BUILD_NMTUI_TRUE@ nmt-page-ip4.c \
+@BUILD_NMTUI_TRUE@ nmt-page-ip4.h \
+@BUILD_NMTUI_TRUE@ nmt-page-ip6.c \
+@BUILD_NMTUI_TRUE@ nmt-page-ip6.h \
+@BUILD_NMTUI_TRUE@ nmt-page-main.c \
+@BUILD_NMTUI_TRUE@ nmt-page-main.h \
+@BUILD_NMTUI_TRUE@ nmt-page-team.c \
+@BUILD_NMTUI_TRUE@ nmt-page-team.h \
+@BUILD_NMTUI_TRUE@ nmt-page-team-port.c \
+@BUILD_NMTUI_TRUE@ nmt-page-team-port.h \
+@BUILD_NMTUI_TRUE@ nmt-page-vlan.c \
+@BUILD_NMTUI_TRUE@ nmt-page-vlan.h \
+@BUILD_NMTUI_TRUE@ nmt-page-wifi.c \
+@BUILD_NMTUI_TRUE@ nmt-page-wifi.h \
+@BUILD_NMTUI_TRUE@ nmt-password-dialog.c \
+@BUILD_NMTUI_TRUE@ nmt-password-dialog.h \
+@BUILD_NMTUI_TRUE@ nmt-password-fields.c \
+@BUILD_NMTUI_TRUE@ nmt-password-fields.h \
+@BUILD_NMTUI_TRUE@ nmt-route-editor.c \
+@BUILD_NMTUI_TRUE@ nmt-route-editor.h \
+@BUILD_NMTUI_TRUE@ nmt-route-entry.c \
+@BUILD_NMTUI_TRUE@ nmt-route-entry.h \
+@BUILD_NMTUI_TRUE@ nmt-route-table.c \
+@BUILD_NMTUI_TRUE@ nmt-route-table.h \
+@BUILD_NMTUI_TRUE@ nmt-secret-agent.c \
+@BUILD_NMTUI_TRUE@ nmt-secret-agent.h \
+@BUILD_NMTUI_TRUE@ nmt-slave-list.c \
+@BUILD_NMTUI_TRUE@ nmt-slave-list.h \
+@BUILD_NMTUI_TRUE@ nmt-utils.c \
+@BUILD_NMTUI_TRUE@ nmt-utils.h \
+@BUILD_NMTUI_TRUE@ nmt-widget-list.c \
+@BUILD_NMTUI_TRUE@ nmt-widget-list.h \
+@BUILD_NMTUI_TRUE@ $(NULL)
+
+@BUILD_NMTUI_TRUE@nmtui_LDADD = \
+@BUILD_NMTUI_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@BUILD_NMTUI_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
+@BUILD_NMTUI_TRUE@ $(builddir)/newt/libnmt-newt.a \
+@BUILD_NMTUI_TRUE@ $(GUDEV_LIBS) \
+@BUILD_NMTUI_TRUE@ $(DBUS_LIBS) \
+@BUILD_NMTUI_TRUE@ $(NEWT_LIBS) \
+@BUILD_NMTUI_TRUE@ $(GLIB_LIBS) \
+@BUILD_NMTUI_TRUE@ $(NULL)
+
+all: all-recursive
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -566,9 +658,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/settings/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tui/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/settings/Makefile
+ $(AUTOMAKE) --gnu tui/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -587,23 +679,59 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-libsettings.la: $(libsettings_la_OBJECTS) $(libsettings_la_DEPENDENCIES) $(EXTRA_libsettings_la_DEPENDENCIES)
- $(AM_V_CCLD)$(libsettings_la_LINK) $(libsettings_la_OBJECTS) $(libsettings_la_LIBADD) $(LIBS)
-
-libtest-settings-utils.la: $(libtest_settings_utils_la_OBJECTS) $(libtest_settings_utils_la_DEPENDENCIES) $(EXTRA_libtest_settings_utils_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libtest_settings_utils_la_OBJECTS) $(libtest_settings_utils_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+nmtui$(EXEEXT): $(nmtui_OBJECTS) $(nmtui_DEPENDENCIES) $(EXTRA_nmtui_DEPENDENCIES)
+ @rm -f nmtui$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(nmtui_OBJECTS) $(nmtui_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -611,16 +739,44 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-agent-manager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-default-wired-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-inotify-helper.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-secret-agent.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-settings-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-settings-error.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-settings-utils.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-settings.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsettings_la-nm-system-config-interface.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-editor-bindings.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-editor-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-address-list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-connect-connection-list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-device-entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-edit-connection-list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-editor-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-editor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-ip-entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-mac-entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-mtu-entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-bond.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-bridge-port.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-bridge.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-device.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-ethernet.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-grid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-infiniband.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-ip4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-ip6.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-team-port.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-team.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-vlan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-page-wifi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-password-dialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-password-fields.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-route-editor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-route-entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-route-table.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-secret-agent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-slave-list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-widget-list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmtui-connect.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmtui-edit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmtui-hostname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmtui.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -643,69 +799,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libsettings_la-nm-settings.lo: nm-settings.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-settings.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-settings.Tpo -c -o libsettings_la-nm-settings.lo `test -f 'nm-settings.c' || echo '$(srcdir)/'`nm-settings.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-settings.Tpo $(DEPDIR)/libsettings_la-nm-settings.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-settings.c' object='libsettings_la-nm-settings.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-settings.lo `test -f 'nm-settings.c' || echo '$(srcdir)/'`nm-settings.c
-
-libsettings_la-nm-inotify-helper.lo: nm-inotify-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-inotify-helper.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-inotify-helper.Tpo -c -o libsettings_la-nm-inotify-helper.lo `test -f 'nm-inotify-helper.c' || echo '$(srcdir)/'`nm-inotify-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-inotify-helper.Tpo $(DEPDIR)/libsettings_la-nm-inotify-helper.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-inotify-helper.c' object='libsettings_la-nm-inotify-helper.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-inotify-helper.lo `test -f 'nm-inotify-helper.c' || echo '$(srcdir)/'`nm-inotify-helper.c
-
-libsettings_la-nm-settings-error.lo: nm-settings-error.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-settings-error.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-settings-error.Tpo -c -o libsettings_la-nm-settings-error.lo `test -f 'nm-settings-error.c' || echo '$(srcdir)/'`nm-settings-error.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-settings-error.Tpo $(DEPDIR)/libsettings_la-nm-settings-error.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-settings-error.c' object='libsettings_la-nm-settings-error.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-settings-error.lo `test -f 'nm-settings-error.c' || echo '$(srcdir)/'`nm-settings-error.c
-
-libsettings_la-nm-system-config-interface.lo: nm-system-config-interface.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-system-config-interface.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-system-config-interface.Tpo -c -o libsettings_la-nm-system-config-interface.lo `test -f 'nm-system-config-interface.c' || echo '$(srcdir)/'`nm-system-config-interface.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-system-config-interface.Tpo $(DEPDIR)/libsettings_la-nm-system-config-interface.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-system-config-interface.c' object='libsettings_la-nm-system-config-interface.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-system-config-interface.lo `test -f 'nm-system-config-interface.c' || echo '$(srcdir)/'`nm-system-config-interface.c
-
-libsettings_la-nm-settings-connection.lo: nm-settings-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-settings-connection.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-settings-connection.Tpo -c -o libsettings_la-nm-settings-connection.lo `test -f 'nm-settings-connection.c' || echo '$(srcdir)/'`nm-settings-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-settings-connection.Tpo $(DEPDIR)/libsettings_la-nm-settings-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-settings-connection.c' object='libsettings_la-nm-settings-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-settings-connection.lo `test -f 'nm-settings-connection.c' || echo '$(srcdir)/'`nm-settings-connection.c
-
-libsettings_la-nm-default-wired-connection.lo: nm-default-wired-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-default-wired-connection.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-default-wired-connection.Tpo -c -o libsettings_la-nm-default-wired-connection.lo `test -f 'nm-default-wired-connection.c' || echo '$(srcdir)/'`nm-default-wired-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-default-wired-connection.Tpo $(DEPDIR)/libsettings_la-nm-default-wired-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-default-wired-connection.c' object='libsettings_la-nm-default-wired-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-default-wired-connection.lo `test -f 'nm-default-wired-connection.c' || echo '$(srcdir)/'`nm-default-wired-connection.c
-
-libsettings_la-nm-agent-manager.lo: nm-agent-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-agent-manager.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-agent-manager.Tpo -c -o libsettings_la-nm-agent-manager.lo `test -f 'nm-agent-manager.c' || echo '$(srcdir)/'`nm-agent-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-agent-manager.Tpo $(DEPDIR)/libsettings_la-nm-agent-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-agent-manager.c' object='libsettings_la-nm-agent-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-agent-manager.lo `test -f 'nm-agent-manager.c' || echo '$(srcdir)/'`nm-agent-manager.c
-
-libsettings_la-nm-secret-agent.lo: nm-secret-agent.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-secret-agent.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-secret-agent.Tpo -c -o libsettings_la-nm-secret-agent.lo `test -f 'nm-secret-agent.c' || echo '$(srcdir)/'`nm-secret-agent.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-secret-agent.Tpo $(DEPDIR)/libsettings_la-nm-secret-agent.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-secret-agent.c' object='libsettings_la-nm-secret-agent.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-secret-agent.lo `test -f 'nm-secret-agent.c' || echo '$(srcdir)/'`nm-secret-agent.c
-
-libsettings_la-nm-settings-utils.lo: nm-settings-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsettings_la-nm-settings-utils.lo -MD -MP -MF $(DEPDIR)/libsettings_la-nm-settings-utils.Tpo -c -o libsettings_la-nm-settings-utils.lo `test -f 'nm-settings-utils.c' || echo '$(srcdir)/'`nm-settings-utils.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsettings_la-nm-settings-utils.Tpo $(DEPDIR)/libsettings_la-nm-settings-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-settings-utils.c' object='libsettings_la-nm-settings-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsettings_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsettings_la-nm-settings-utils.lo `test -f 'nm-settings-utils.c' || echo '$(srcdir)/'`nm-settings-utils.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -867,13 +960,14 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LTLIBRARIES)
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
installdirs: installdirs-recursive
installdirs-am:
-install: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) install-recursive
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
@@ -895,7 +989,6 @@ install-strip:
mostlyclean-generic:
clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -904,11 +997,11 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+@BUILD_NMTUI_FALSE@install-exec-hook:
+@BUILD_NMTUI_FALSE@uninstall-hook:
clean: clean-recursive
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
@@ -934,8 +1027,9 @@ install-dvi: install-dvi-recursive
install-dvi-am:
-install-exec-am:
-
+install-exec-am: install-binPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
install-html: install-html-recursive
install-html-am:
@@ -974,35 +1068,38 @@ ps: ps-recursive
ps-am:
-uninstall-am:
-
-.MAKE: $(am__recursive_targets) all check install install-am \
- install-strip
+uninstall-am: uninstall-binPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: $(am__recursive_targets) install-am install-exec-am \
+ install-strip uninstall-am
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am clean clean-generic clean-libtool \
- clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
- distclean-compile distclean-generic distclean-libtool \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- installdirs-am maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
- uninstall-am
-
-
-nm-settings-glue.h: $(top_srcdir)/introspection/nm-settings.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-server --output=$@ $<
-
-nm-settings-connection-glue.h: $(top_srcdir)/introspection/nm-settings-connection.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_connection --mode=glib-server --output=$@ $<
-
-nm-agent-manager-glue.h: $(top_srcdir)/introspection/nm-agent-manager.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_agent_manager --mode=glib-server --output=$@ $<
+ check-am clean clean-binPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-exec-hook \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-hook
+
+
+@BUILD_NMTUI_TRUE@install-exec-hook:
+@BUILD_NMTUI_TRUE@ for link in $(links); do \
+@BUILD_NMTUI_TRUE@ ln -f $(DESTDIR)$(bindir)/nmtui $(DESTDIR)$(bindir)/$$link; \
+@BUILD_NMTUI_TRUE@ done
+
+@BUILD_NMTUI_TRUE@uninstall-hook:
+@BUILD_NMTUI_TRUE@ for link in $(links); do \
+@BUILD_NMTUI_TRUE@ rm -f $(DESTDIR)$(bindir)/$$link; \
+@BUILD_NMTUI_TRUE@ done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tui/newt/Makefile.am b/tui/newt/Makefile.am
new file mode 100644
index 000000000..0db5525d0
--- /dev/null
+++ b/tui/newt/Makefile.am
@@ -0,0 +1,54 @@
+AM_CPPFLAGS= \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -DG_LOG_DOMAIN=\""nmtui"\" \
+ $(GLIB_CFLAGS) \
+ $(NEWT_CFLAGS) \
+ $(NULL)
+
+noinst_LIBRARIES = libnmt-newt.a
+
+libnmt_newt_a_SOURCES = \
+ nmt-newt.h \
+ nmt-newt-types.h \
+ nmt-newt-button.c \
+ nmt-newt-button.h \
+ nmt-newt-button-box.c \
+ nmt-newt-button-box.h \
+ nmt-newt-checkbox.c \
+ nmt-newt-checkbox.h \
+ nmt-newt-component.c \
+ nmt-newt-component.h \
+ nmt-newt-container.c \
+ nmt-newt-container.h \
+ nmt-newt-entry.c \
+ nmt-newt-entry.h \
+ nmt-newt-entry-numeric.c \
+ nmt-newt-entry-numeric.h \
+ nmt-newt-form.c \
+ nmt-newt-form.h \
+ nmt-newt-grid.c \
+ nmt-newt-grid.h \
+ nmt-newt-hacks.c \
+ nmt-newt-hacks.h \
+ nmt-newt-label.c \
+ nmt-newt-label.h \
+ nmt-newt-listbox.c \
+ nmt-newt-listbox.h \
+ nmt-newt-popup.c \
+ nmt-newt-popup.h \
+ nmt-newt-section.c \
+ nmt-newt-section.h \
+ nmt-newt-separator.c \
+ nmt-newt-separator.h \
+ nmt-newt-stack.c \
+ nmt-newt-stack.h \
+ nmt-newt-textbox.c \
+ nmt-newt-textbox.h \
+ nmt-newt-toggle-button.c \
+ nmt-newt-toggle-button.h \
+ nmt-newt-utils.c \
+ nmt-newt-utils.h \
+ nmt-newt-widget.c \
+ nmt-newt-widget.h \
+ $(NULL)
diff --git a/src/dnsmasq-manager/Makefile.in b/tui/newt/Makefile.in
index 9b20331f6..043382bea 100644
--- a/src/dnsmasq-manager/Makefile.in
+++ b/tui/newt/Makefile.in
@@ -78,11 +78,12 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/dnsmasq-manager
+subdir = tui/newt
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -100,19 +101,26 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libdnsmasq_manager_la_DEPENDENCIES = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(am__DEPENDENCIES_1)
-am_libdnsmasq_manager_la_OBJECTS = \
- libdnsmasq_manager_la-nm-dnsmasq-manager.lo
-libdnsmasq_manager_la_OBJECTS = $(am_libdnsmasq_manager_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libnmt_newt_a_AR = $(AR) $(ARFLAGS)
+libnmt_newt_a_LIBADD =
+am_libnmt_newt_a_OBJECTS = nmt-newt-button.$(OBJEXT) \
+ nmt-newt-button-box.$(OBJEXT) nmt-newt-checkbox.$(OBJEXT) \
+ nmt-newt-component.$(OBJEXT) nmt-newt-container.$(OBJEXT) \
+ nmt-newt-entry.$(OBJEXT) nmt-newt-entry-numeric.$(OBJEXT) \
+ nmt-newt-form.$(OBJEXT) nmt-newt-grid.$(OBJEXT) \
+ nmt-newt-hacks.$(OBJEXT) nmt-newt-label.$(OBJEXT) \
+ nmt-newt-listbox.$(OBJEXT) nmt-newt-popup.$(OBJEXT) \
+ nmt-newt-section.$(OBJEXT) nmt-newt-separator.$(OBJEXT) \
+ nmt-newt-stack.$(OBJEXT) nmt-newt-textbox.$(OBJEXT) \
+ nmt-newt-toggle-button.$(OBJEXT) nmt-newt-utils.$(OBJEXT) \
+ nmt-newt-widget.$(OBJEXT)
+libnmt_newt_a_OBJECTS = $(am_libnmt_newt_a_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -131,6 +139,10 @@ am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
@@ -147,8 +159,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libdnsmasq_manager_la_SOURCES)
-DIST_SOURCES = $(libdnsmasq_manager_la_SOURCES)
+SOURCES = $(libnmt_newt_a_SOURCES)
+DIST_SOURCES = $(libnmt_newt_a_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -199,12 +211,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -229,7 +244,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -274,12 +288,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -296,6 +314,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -323,11 +343,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -342,6 +367,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -404,6 +430,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -414,24 +441,60 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
-noinst_LTLIBRARIES = libdnsmasq-manager.la
-libdnsmasq_manager_la_CPPFLAGS = \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/posix-signals \
- -I${top_srcdir}/src \
- -I${top_srcdir}/include \
+with_valgrind = @with_valgrind@
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -DG_LOG_DOMAIN=\""nmtui"\" \
$(GLIB_CFLAGS) \
- -DLOCALSTATEDIR=\"$(localstatedir)\"
-
-libdnsmasq_manager_la_SOURCES = \
- nm-dnsmasq-manager.h \
- nm-dnsmasq-manager.c
-
-libdnsmasq_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(top_builddir)/src/posix-signals/libnm-posix-signals.la \
- $(GLIB_LIBS)
+ $(NEWT_CFLAGS) \
+ $(NULL)
+
+noinst_LIBRARIES = libnmt-newt.a
+libnmt_newt_a_SOURCES = \
+ nmt-newt.h \
+ nmt-newt-types.h \
+ nmt-newt-button.c \
+ nmt-newt-button.h \
+ nmt-newt-button-box.c \
+ nmt-newt-button-box.h \
+ nmt-newt-checkbox.c \
+ nmt-newt-checkbox.h \
+ nmt-newt-component.c \
+ nmt-newt-component.h \
+ nmt-newt-container.c \
+ nmt-newt-container.h \
+ nmt-newt-entry.c \
+ nmt-newt-entry.h \
+ nmt-newt-entry-numeric.c \
+ nmt-newt-entry-numeric.h \
+ nmt-newt-form.c \
+ nmt-newt-form.h \
+ nmt-newt-grid.c \
+ nmt-newt-grid.h \
+ nmt-newt-hacks.c \
+ nmt-newt-hacks.h \
+ nmt-newt-label.c \
+ nmt-newt-label.h \
+ nmt-newt-listbox.c \
+ nmt-newt-listbox.h \
+ nmt-newt-popup.c \
+ nmt-newt-popup.h \
+ nmt-newt-section.c \
+ nmt-newt-section.h \
+ nmt-newt-separator.c \
+ nmt-newt-separator.h \
+ nmt-newt-stack.c \
+ nmt-newt-stack.h \
+ nmt-newt-textbox.c \
+ nmt-newt-textbox.h \
+ nmt-newt-toggle-button.c \
+ nmt-newt-toggle-button.h \
+ nmt-newt-utils.c \
+ nmt-newt-utils.h \
+ nmt-newt-widget.c \
+ nmt-newt-widget.h \
+ $(NULL)
all: all-am
@@ -446,9 +509,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/dnsmasq-manager/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tui/newt/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/dnsmasq-manager/Makefile
+ $(AUTOMAKE) --gnu tui/newt/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -468,19 +531,13 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libdnsmasq-manager.la: $(libdnsmasq_manager_la_OBJECTS) $(libdnsmasq_manager_la_DEPENDENCIES) $(EXTRA_libdnsmasq_manager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libdnsmasq_manager_la_OBJECTS) $(libdnsmasq_manager_la_LIBADD) $(LIBS)
+libnmt-newt.a: $(libnmt_newt_a_OBJECTS) $(libnmt_newt_a_DEPENDENCIES) $(EXTRA_libnmt_newt_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libnmt-newt.a
+ $(AM_V_AR)$(libnmt_newt_a_AR) libnmt-newt.a $(libnmt_newt_a_OBJECTS) $(libnmt_newt_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libnmt-newt.a
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -488,7 +545,26 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdnsmasq_manager_la-nm-dnsmasq-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-button-box.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-button.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-checkbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-component.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-container.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-entry-numeric.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-form.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-grid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-hacks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-label.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-listbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-popup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-section.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-separator.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-stack.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-textbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-toggle-button.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-newt-widget.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -511,13 +587,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libdnsmasq_manager_la-nm-dnsmasq-manager.lo: nm-dnsmasq-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdnsmasq_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdnsmasq_manager_la-nm-dnsmasq-manager.lo -MD -MP -MF $(DEPDIR)/libdnsmasq_manager_la-nm-dnsmasq-manager.Tpo -c -o libdnsmasq_manager_la-nm-dnsmasq-manager.lo `test -f 'nm-dnsmasq-manager.c' || echo '$(srcdir)/'`nm-dnsmasq-manager.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdnsmasq_manager_la-nm-dnsmasq-manager.Tpo $(DEPDIR)/libdnsmasq_manager_la-nm-dnsmasq-manager.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dnsmasq-manager.c' object='libdnsmasq_manager_la-nm-dnsmasq-manager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdnsmasq_manager_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdnsmasq_manager_la-nm-dnsmasq-manager.lo `test -f 'nm-dnsmasq-manager.c' || echo '$(srcdir)/'`nm-dnsmasq-manager.c
-
mostlyclean-libtool:
-rm -f *.lo
@@ -608,7 +677,7 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(LIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
@@ -642,7 +711,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -714,7 +783,7 @@ uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+ clean-libtool clean-noinstLIBRARIES cscopelist-am ctags \
ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
diff --git a/tui/newt/nmt-newt-button-box.c b/tui/newt/nmt-newt-button-box.c
new file mode 100644
index 000000000..0199ebe93
--- /dev/null
+++ b/tui/newt/nmt-newt-button-box.c
@@ -0,0 +1,385 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-button-box
+ * @short_description: A container for #NmtNewtButtons
+ *
+ * #NmtNewtButtonBox is a container for creating and holding
+ * #NmtNewtButtons.
+ *
+ * A button box can be either horizontally or vertically laid out, and
+ * has two sections within it: the "start" (left or top) and "end"
+ * (right or bottom). Buttons are added from left to right or top to bottom
+ * within each of the two sections.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-button-box.h"
+#include "nmt-newt-button.h"
+
+G_DEFINE_TYPE (NmtNewtButtonBox, nmt_newt_button_box, NMT_TYPE_NEWT_CONTAINER)
+
+#define NMT_NEWT_BUTTON_BOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_BUTTON_BOX, NmtNewtButtonBoxPrivate))
+
+typedef struct {
+ NmtNewtButtonBoxOrientation orientation;
+ GPtrArray *start_buttons, *end_buttons;
+} NmtNewtButtonBoxPrivate;
+
+enum {
+ PROP_0,
+
+ PROP_ORIENTATION,
+
+ LAST_PROP
+};
+
+/**
+ * NmtNewtButtonBoxOrientation:
+ * @NMT_NEWT_BUTTON_BOX_HORIZONTAL: horizontal
+ * @NMT_NEWT_BUTTON_BOX_VERTICAL: vertical
+ *
+ * The orientation of an #NmtNewtButtonBox
+ */
+
+/**
+ * nmt_newt_button_box_new:
+ * @orientation: the orientation
+ *
+ * Creates a new #NmtNewtButtonBox
+ *
+ * Returns: a new #NmtNewtButtonBox
+ */
+NmtNewtWidget *
+nmt_newt_button_box_new (NmtNewtButtonBoxOrientation orientation)
+{
+ return g_object_new (NMT_TYPE_NEWT_BUTTON_BOX,
+ "orientation", orientation,
+ NULL);
+}
+
+static void
+nmt_newt_button_box_init (NmtNewtButtonBox *bbox)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (bbox);
+
+ priv->start_buttons = g_ptr_array_new ();
+ priv->end_buttons = g_ptr_array_new ();
+}
+
+/**
+ * nmt_newt_button_box_add_start:
+ * @bbox: an #NmtNewtButtonBox
+ * @label: the label for the newt button
+ *
+ * Creates a new #NmtNewtButton with the given @label, adds it
+ * to the "start" section of @bbox, and returns the newly-created
+ * button.
+ *
+ * Returns: the newly-created button, already added to @bbox
+ */
+NmtNewtWidget *
+nmt_newt_button_box_add_start (NmtNewtButtonBox *bbox,
+ const char *label)
+{
+ NmtNewtWidget *button;
+
+ button = nmt_newt_button_new (label);
+ nmt_newt_button_box_add_widget_start (bbox, button);
+ return button;
+}
+
+/**
+ * nmt_newt_button_box_add_widget_start:
+ * @bbox: an #NmtNewtButtonBox
+ * @widget: the #NmtNewtWidget to add
+ *
+ * Adds the given widget to the "start" section of @bbox.
+ */
+void
+nmt_newt_button_box_add_widget_start (NmtNewtButtonBox *bbox,
+ NmtNewtWidget *widget)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (bbox);
+
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_button_box_parent_class)->
+ add (NMT_NEWT_CONTAINER (bbox), widget);
+ g_ptr_array_add (priv->start_buttons, widget);
+}
+
+/**
+ * nmt_newt_button_box_add_end:
+ * @bbox: an #NmtNewtButtonBox
+ * @label: the label for the newt button
+ *
+ * Creates a new #NmtNewtButton with the given @label, adds it
+ * to the "end" section of @bbox, and returns the newly-created
+ * button.
+ *
+ * Returns: the newly-created button, already added to @bbox
+ */
+NmtNewtWidget *
+nmt_newt_button_box_add_end (NmtNewtButtonBox *bbox,
+ const char *label)
+{
+ NmtNewtWidget *button;
+
+ button = nmt_newt_button_new (label);
+ nmt_newt_button_box_add_widget_end (bbox, button);
+ return button;
+}
+
+/**
+ * nmt_newt_button_box_add_widget_end:
+ * @bbox: an #NmtNewtButtonBox
+ * @widget: the #NmtNewtWidget to add
+ *
+ * Adds the given widget to the "end" section of @bbox.
+ */
+void
+nmt_newt_button_box_add_widget_end (NmtNewtButtonBox *bbox,
+ NmtNewtWidget *widget)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (bbox);
+
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_button_box_parent_class)->
+ add (NMT_NEWT_CONTAINER (bbox), widget);
+ g_ptr_array_add (priv->end_buttons, widget);
+}
+
+static void
+nmt_newt_button_box_remove (NmtNewtContainer *container,
+ NmtNewtWidget *child)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (container);
+ int i;
+
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_button_box_parent_class)->
+ remove (container, child);
+
+ for (i = 0; i < priv->start_buttons->len; i++) {
+ if (priv->start_buttons->pdata[i] == (gpointer) child) {
+ g_ptr_array_remove_index (priv->start_buttons, i);
+ return;
+ }
+ }
+ for (i = 0; i < priv->end_buttons->len; i++) {
+ if (priv->end_buttons->pdata[i] == (gpointer) child) {
+ g_ptr_array_remove_index (priv->end_buttons, i);
+ return;
+ }
+ }
+}
+
+static void
+add_buttons (GPtrArray *buttons, GPtrArray *cos)
+{
+ NmtNewtWidget *child;
+ newtComponent *child_cos;
+ int i, c;
+
+ for (i = 0; i < buttons->len; i++) {
+ child = buttons->pdata[i];
+
+ if (!nmt_newt_widget_get_visible (child))
+ continue;
+
+ child_cos = nmt_newt_widget_get_components (child);
+ for (c = 0; child_cos[c]; c++)
+ g_ptr_array_add (cos, child_cos[c]);
+ g_free (child_cos);
+ }
+}
+
+static newtComponent *
+nmt_newt_button_box_get_components (NmtNewtWidget *widget)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (widget);
+ GPtrArray *cos;
+
+ cos = g_ptr_array_new ();
+ add_buttons (priv->start_buttons, cos);
+ add_buttons (priv->end_buttons, cos);
+ g_ptr_array_add (cos, NULL);
+
+ return (newtComponent *) g_ptr_array_free (cos, FALSE);
+}
+
+static void
+size_request_buttons (NmtNewtButtonBox *bbox,
+ GPtrArray *buttons,
+ int *width,
+ int *height)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (bbox);
+ int child_width, child_height;
+ int i;
+
+ for (i = 0; i < buttons->len; i++) {
+ NmtNewtWidget *child = buttons->pdata[i];
+
+ nmt_newt_widget_size_request (child, &child_width, &child_height);
+ if (priv->orientation == NMT_NEWT_BUTTON_BOX_HORIZONTAL) {
+ *width += child_width;
+ if (i > 0)
+ *width += 1;
+ *height = MAX (*height, child_height);
+ } else {
+ *height += child_height;
+ if (i > 0)
+ *height += 1;
+ *width = MAX (*width, child_width);
+ }
+ }
+}
+
+static void
+nmt_newt_button_box_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NmtNewtButtonBox *bbox = NMT_NEWT_BUTTON_BOX (widget);
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (widget);
+
+ *width = *height = 0;
+ size_request_buttons (bbox, priv->start_buttons, width, height);
+ size_request_buttons (bbox, priv->end_buttons, width, height);
+
+ if (priv->start_buttons && priv->end_buttons) {
+ if (priv->orientation == NMT_NEWT_BUTTON_BOX_HORIZONTAL)
+ *width += 1;
+ else
+ *height += 1;
+ }
+}
+
+static void
+nmt_newt_button_box_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (widget);
+ NmtNewtWidget *child;
+ int child_x, child_y, child_width, child_height;
+ int i;
+
+ child_x = x;
+ child_y = y;
+ for (i = 0; i < priv->start_buttons->len; i++) {
+ child = priv->start_buttons->pdata[i];
+ nmt_newt_widget_size_request (child, &child_width, &child_height);
+
+ if (priv->orientation == NMT_NEWT_BUTTON_BOX_HORIZONTAL) {
+ nmt_newt_widget_size_allocate (child, child_x, child_y, child_width, child_height);
+ child_x += child_width + 1;
+ } else {
+ nmt_newt_widget_size_allocate (child, child_x, child_y, child_width, child_height);
+ child_y += child_height + 1;
+ }
+ }
+
+ if (priv->orientation == NMT_NEWT_BUTTON_BOX_HORIZONTAL)
+ child_x = x + width;
+ else
+ child_y = y + height;
+
+ for (i = priv->end_buttons->len - 1; i >= 0; i--) {
+ child = priv->end_buttons->pdata[i];
+ nmt_newt_widget_size_request (child, &child_width, &child_height);
+
+ if (priv->orientation == NMT_NEWT_BUTTON_BOX_HORIZONTAL) {
+ nmt_newt_widget_size_allocate (child,
+ child_x - child_width, child_y,
+ child_width, child_height);
+ child_x -= child_width + 1;
+ } else {
+ nmt_newt_widget_size_allocate (child,
+ child_x, child_y - child_height,
+ child_width, child_height);
+ child_y -= child_height + 1;
+ }
+ }
+}
+
+static void
+nmt_newt_button_box_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_ORIENTATION:
+ priv->orientation = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_button_box_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtButtonBoxPrivate *priv = NMT_NEWT_BUTTON_BOX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_ORIENTATION:
+ g_value_set_int (value, priv->orientation);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_button_box_class_init (NmtNewtButtonBoxClass *bbox_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (bbox_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (bbox_class);
+ NmtNewtContainerClass *container_class = NMT_NEWT_CONTAINER_CLASS (bbox_class);
+
+ g_type_class_add_private (bbox_class, sizeof (NmtNewtButtonBoxPrivate));
+
+ object_class->get_property = nmt_newt_button_box_get_property;
+ object_class->set_property = nmt_newt_button_box_set_property;
+
+ widget_class->get_components = nmt_newt_button_box_get_components;
+ widget_class->size_request = nmt_newt_button_box_size_request;
+ widget_class->size_allocate = nmt_newt_button_box_size_allocate;
+
+ container_class->remove = nmt_newt_button_box_remove;
+
+ g_object_class_install_property (object_class, PROP_ORIENTATION,
+ g_param_spec_int ("orientation", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-button-box.h b/tui/newt/nmt-newt-button-box.h
new file mode 100644
index 000000000..970588a4d
--- /dev/null
+++ b/tui/newt/nmt-newt-button-box.h
@@ -0,0 +1,65 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_BUTTON_BOX_H
+#define NMT_NEWT_BUTTON_BOX_H
+
+#include "nmt-newt-grid.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_BUTTON_BOX (nmt_newt_button_box_get_type ())
+#define NMT_NEWT_BUTTON_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_BUTTON_BOX, NmtNewtButtonBox))
+#define NMT_NEWT_BUTTON_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_BUTTON_BOX, NmtNewtButtonBoxClass))
+#define NMT_IS_NEWT_BUTTON_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_BUTTON_BOX))
+#define NMT_IS_NEWT_BUTTON_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_BUTTON_BOX))
+#define NMT_NEWT_BUTTON_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_BUTTON_BOX, NmtNewtButtonBoxClass))
+
+struct _NmtNewtButtonBox {
+ NmtNewtContainer parent;
+
+};
+
+typedef struct {
+ NmtNewtContainerClass parent;
+
+} NmtNewtButtonBoxClass;
+
+GType nmt_newt_button_box_get_type (void);
+
+typedef enum {
+ NMT_NEWT_BUTTON_BOX_HORIZONTAL,
+ NMT_NEWT_BUTTON_BOX_VERTICAL
+} NmtNewtButtonBoxOrientation;
+
+NmtNewtWidget *nmt_newt_button_box_new (NmtNewtButtonBoxOrientation orientation);
+
+NmtNewtWidget *nmt_newt_button_box_add_start (NmtNewtButtonBox *bbox,
+ const char *label);
+NmtNewtWidget *nmt_newt_button_box_add_end (NmtNewtButtonBox *bbox,
+ const char *label);
+
+void nmt_newt_button_box_add_widget_start (NmtNewtButtonBox *bbox,
+ NmtNewtWidget *widget);
+void nmt_newt_button_box_add_widget_end (NmtNewtButtonBox *bbox,
+ NmtNewtWidget *widget);
+
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_BUTTON_BOX_H */
diff --git a/tui/newt/nmt-newt-button.c b/tui/newt/nmt-newt-button.c
new file mode 100644
index 000000000..97ad50ca6
--- /dev/null
+++ b/tui/newt/nmt-newt-button.c
@@ -0,0 +1,260 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-button
+ * @short_description: Push buttons
+ *
+ * #NmtNewtButton implements a button widget.
+ */
+
+#include "config.h"
+
+#include "nmt-newt-button.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtButton, nmt_newt_button, NMT_TYPE_NEWT_COMPONENT)
+
+#define NMT_NEWT_BUTTON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_BUTTON, NmtNewtButtonPrivate))
+
+typedef struct {
+ char *label;
+} NmtNewtButtonPrivate;
+
+enum {
+ PROP_0,
+ PROP_LABEL,
+
+ LAST_PROP
+};
+
+enum {
+ CLICKED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/**
+ * nmt_newt_button_new:
+ * @label: the (initial) button label
+ *
+ * Creates a new button.
+ *
+ * Returns: a new #NmtNewtButton
+ */
+NmtNewtWidget *
+nmt_newt_button_new (const char *label)
+{
+ return g_object_new (NMT_TYPE_NEWT_BUTTON,
+ "label", label,
+ NULL);
+}
+
+/**
+ * nmt_newt_button_set_label:
+ * @button: an #NmtNewtButton
+ * @label: the new label
+ *
+ * Updates @button's label.
+ */
+void
+nmt_newt_button_set_label (NmtNewtButton *button,
+ const char *label)
+{
+ NmtNewtButtonPrivate *priv = NMT_NEWT_BUTTON_GET_PRIVATE (button);
+
+ if (!g_strcmp0 (priv->label, label))
+ return;
+
+ g_free (priv->label);
+ priv->label = g_strdup (label);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (button));
+}
+
+/**
+ * nmt_newt_button_get_label:
+ * @button: an #NmtNewtButton
+ *
+ * Gets @button's label.
+ *
+ * Returns: @button's label.
+ */
+const char *
+nmt_newt_button_get_label (NmtNewtButton *button)
+{
+ NmtNewtButtonPrivate *priv = NMT_NEWT_BUTTON_GET_PRIVATE (button);
+
+ return priv->label;
+}
+
+static void
+nmt_newt_button_init (NmtNewtButton *button)
+{
+}
+
+static void
+nmt_newt_button_finalize (GObject *object)
+{
+ NmtNewtButtonPrivate *priv = NMT_NEWT_BUTTON_GET_PRIVATE (object);
+
+ g_free (priv->label);
+
+ G_OBJECT_CLASS (nmt_newt_button_parent_class)->finalize (object);
+}
+
+static newtComponent
+nmt_newt_button_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtButtonPrivate *priv = NMT_NEWT_BUTTON_GET_PRIVATE (component);
+ newtComponent co;
+ char *label = NULL, *label_lc;
+
+ if (sensitive) {
+ label_lc = nmt_newt_locale_from_utf8 (priv->label);
+ co = newtCompactButton (-1, -1, label_lc);
+ g_free (label_lc);
+ } else {
+ label = g_strdup_printf (" <%s>", priv->label);
+ label_lc = nmt_newt_locale_from_utf8 (label);
+ co = newtLabel (-1, -1, label_lc);
+ g_free (label_lc);
+ newtLabelSetColors (co, NMT_NEWT_COLORSET_DISABLED_BUTTON);
+ }
+
+ return co;
+}
+
+static void
+nmt_newt_button_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_button_parent_class)->size_request (widget, width, height);
+
+ /* remove the automatically-added left padding */
+ (*width)--;
+}
+
+static void
+nmt_newt_button_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ /* account for the automatically-added left padding */
+ x--;
+ width++;
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_button_parent_class)->size_allocate (widget, x, y, width, height);
+}
+
+static void
+nmt_newt_button_activated (NmtNewtWidget *widget)
+{
+ g_signal_emit (widget, signals[CLICKED], 0);
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_button_parent_class)->activated (widget);
+}
+
+static void
+nmt_newt_button_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id) {
+ case PROP_LABEL:
+ nmt_newt_button_set_label (NMT_NEWT_BUTTON (object),
+ g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_button_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtButtonPrivate *priv = NMT_NEWT_BUTTON_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_LABEL:
+ g_value_set_string (value, priv->label);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_button_class_init (NmtNewtButtonClass *button_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (button_class);
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (button_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (button_class);
+
+ g_type_class_add_private (button_class, sizeof (NmtNewtButtonPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_button_set_property;
+ object_class->get_property = nmt_newt_button_get_property;
+ object_class->finalize = nmt_newt_button_finalize;
+
+ widget_class->size_request = nmt_newt_button_size_request;
+ widget_class->size_allocate = nmt_newt_button_size_allocate;
+ widget_class->activated = nmt_newt_button_activated;
+
+ component_class->build_component = nmt_newt_button_build_component;
+
+ /* signals */
+
+ /**
+ * NmtNewtButton::clicked:
+ * @button: the #NmtNewtButton
+ *
+ * Emitted when the button is clicked.
+ */
+ signals[CLICKED] =
+ g_signal_new ("clicked",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ /* properties */
+
+ /**
+ * NmtNewtButton:label:
+ *
+ * The button's label
+ */
+ g_object_class_install_property (object_class, PROP_LABEL,
+ g_param_spec_string ("label", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-button.h b/tui/newt/nmt-newt-button.h
new file mode 100644
index 000000000..52e95c5d1
--- /dev/null
+++ b/tui/newt/nmt-newt-button.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_BUTTON_H
+#define NMT_NEWT_BUTTON_H
+
+#include "nmt-newt-component.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_BUTTON (nmt_newt_button_get_type ())
+#define NMT_NEWT_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_BUTTON, NmtNewtButton))
+#define NMT_NEWT_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_BUTTON, NmtNewtButtonClass))
+#define NMT_IS_NEWT_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_BUTTON))
+#define NMT_IS_NEWT_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_BUTTON))
+#define NMT_NEWT_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_BUTTON, NmtNewtButtonClass))
+
+struct _NmtNewtButton {
+ NmtNewtComponent parent;
+
+};
+
+typedef struct {
+ NmtNewtComponentClass parent;
+
+} NmtNewtButtonClass;
+
+GType nmt_newt_button_get_type (void);
+
+NmtNewtWidget *nmt_newt_button_new (const char *label);
+
+void nmt_newt_button_set_label (NmtNewtButton *button,
+ const char *label);
+const char *nmt_newt_button_get_label (NmtNewtButton *button);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_BUTTON_H */
diff --git a/tui/newt/nmt-newt-checkbox.c b/tui/newt/nmt-newt-checkbox.c
new file mode 100644
index 000000000..168fada20
--- /dev/null
+++ b/tui/newt/nmt-newt-checkbox.c
@@ -0,0 +1,235 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-checkbox
+ * @short_description: Checkboxes
+ *
+ * #NmtNewtCheckbox implements a checkbox widget.
+ */
+
+#include "config.h"
+
+#include "nmt-newt-checkbox.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtCheckbox, nmt_newt_checkbox, NMT_TYPE_NEWT_COMPONENT)
+
+#define NMT_NEWT_CHECKBOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_CHECKBOX, NmtNewtCheckboxPrivate))
+
+typedef struct {
+ char *label_lc;
+ gboolean active;
+} NmtNewtCheckboxPrivate;
+
+enum {
+ PROP_0,
+ PROP_LABEL,
+ PROP_ACTIVE,
+
+ LAST_PROP
+};
+
+#define CHECKBOX_INACTIVE ' '
+#define CHECKBOX_ACTIVE 'X'
+#define CHECKBOX_STATES " X"
+
+/**
+ * nmt_newt_checkbox_new:
+ * @label: the (initial) checkbox label
+ *
+ * Creates a new checkbox.
+ *
+ * Returns: a new #NmtNewtCheckbox
+ */
+NmtNewtWidget *
+nmt_newt_checkbox_new (const char *label)
+{
+ return g_object_new (NMT_TYPE_NEWT_CHECKBOX,
+ "label", label,
+ NULL);
+}
+
+/**
+ * nmt_newt_checkbox_set_active:
+ * @checkbox: an #NmtNewtCheckbox
+ * @active: whether @checkbox should be checked
+ *
+ * Updates @checkbox's checked state
+ */
+void
+nmt_newt_checkbox_set_active (NmtNewtCheckbox *checkbox,
+ gboolean active)
+{
+ NmtNewtCheckboxPrivate *priv = NMT_NEWT_CHECKBOX_GET_PRIVATE (checkbox);
+ newtComponent co;
+
+ active = !!active;
+ if (active == priv->active)
+ return;
+
+ priv->active = active;
+
+ co = nmt_newt_component_get_component (NMT_NEWT_COMPONENT (checkbox));
+ if (co)
+ newtCheckboxSetValue (co, priv->active ? CHECKBOX_ACTIVE : CHECKBOX_INACTIVE);
+
+ g_object_notify (G_OBJECT (checkbox), "active");
+}
+
+/**
+ * nmt_newt_checkbox_get_active:
+ * @checkbox: an #NmtNewtCheckbox
+ *
+ * Gets @checkbox's checked state
+ *
+ * Returns: @checkbox's checked state
+ */
+gboolean
+nmt_newt_checkbox_get_active (NmtNewtCheckbox *checkbox)
+{
+ NmtNewtCheckboxPrivate *priv = NMT_NEWT_CHECKBOX_GET_PRIVATE (checkbox);
+
+ return priv->active;
+}
+
+static void
+nmt_newt_checkbox_init (NmtNewtCheckbox *checkbox)
+{
+}
+
+static void
+nmt_newt_checkbox_finalize (GObject *object)
+{
+ NmtNewtCheckboxPrivate *priv = NMT_NEWT_CHECKBOX_GET_PRIVATE (object);
+
+ g_free (priv->label_lc);
+
+ G_OBJECT_CLASS (nmt_newt_checkbox_parent_class)->finalize (object);
+}
+
+static void
+checkbox_toggled_callback (newtComponent co,
+ void *checkbox)
+{
+ NmtNewtCheckboxPrivate *priv = NMT_NEWT_CHECKBOX_GET_PRIVATE (checkbox);
+ gboolean active;
+
+ active = (newtCheckboxGetValue (co) == CHECKBOX_ACTIVE);
+ if (active != priv->active) {
+ priv->active = active;
+ g_object_notify (checkbox, "active");
+ }
+}
+
+static newtComponent
+nmt_newt_checkbox_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtCheckboxPrivate *priv = NMT_NEWT_CHECKBOX_GET_PRIVATE (component);
+ newtComponent co;
+
+ co = newtCheckbox (-1, -1, priv->label_lc,
+ priv->active ? CHECKBOX_ACTIVE : CHECKBOX_INACTIVE,
+ CHECKBOX_STATES, NULL);
+ if (!sensitive)
+ newtCheckboxSetFlags (co, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET);
+ newtComponentAddCallback (co, checkbox_toggled_callback, component);
+ return co;
+}
+
+static void
+nmt_newt_checkbox_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtCheckbox *checkbox = NMT_NEWT_CHECKBOX (object);
+ NmtNewtCheckboxPrivate *priv = NMT_NEWT_CHECKBOX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_LABEL:
+ g_free (priv->label_lc);
+ priv->label_lc = nmt_newt_locale_from_utf8 (g_value_get_string (value));
+ break;
+ case PROP_ACTIVE:
+ nmt_newt_checkbox_set_active (checkbox, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_checkbox_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtCheckboxPrivate *priv = NMT_NEWT_CHECKBOX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_LABEL:
+ g_value_take_string (value, nmt_newt_locale_to_utf8 (priv->label_lc));
+ break;
+ case PROP_ACTIVE:
+ g_value_set_boolean (value, priv->active);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_checkbox_class_init (NmtNewtCheckboxClass *checkbox_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (checkbox_class);
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (checkbox_class);
+
+ g_type_class_add_private (checkbox_class, sizeof (NmtNewtCheckboxPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_checkbox_set_property;
+ object_class->get_property = nmt_newt_checkbox_get_property;
+ object_class->finalize = nmt_newt_checkbox_finalize;
+
+ component_class->build_component = nmt_newt_checkbox_build_component;
+
+ /**
+ * NmtNewtCheckbox:label:
+ *
+ * The checkbox's label
+ */
+ g_object_class_install_property (object_class, PROP_LABEL,
+ g_param_spec_string ("label", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtCheckbox:active:
+ *
+ * The checkbox's checked state
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE,
+ g_param_spec_boolean ("active", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-checkbox.h b/tui/newt/nmt-newt-checkbox.h
new file mode 100644
index 000000000..c277386b1
--- /dev/null
+++ b/tui/newt/nmt-newt-checkbox.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_CHECKBOX_H
+#define NMT_NEWT_CHECKBOX_H
+
+#include "nmt-newt-component.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_CHECKBOX (nmt_newt_checkbox_get_type ())
+#define NMT_NEWT_CHECKBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_CHECKBOX, NmtNewtCheckbox))
+#define NMT_NEWT_CHECKBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_CHECKBOX, NmtNewtCheckboxClass))
+#define NMT_IS_NEWT_CHECKBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_CHECKBOX))
+#define NMT_IS_NEWT_CHECKBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_CHECKBOX))
+#define NMT_NEWT_CHECKBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_CHECKBOX, NmtNewtCheckboxClass))
+
+struct _NmtNewtCheckbox {
+ NmtNewtComponent parent;
+
+};
+
+typedef struct {
+ NmtNewtComponentClass parent;
+
+} NmtNewtCheckboxClass;
+
+GType nmt_newt_checkbox_get_type (void);
+
+NmtNewtWidget *nmt_newt_checkbox_new (const char *label);
+
+void nmt_newt_checkbox_set_active (NmtNewtCheckbox *checkbox,
+ gboolean active);
+gboolean nmt_newt_checkbox_get_active (NmtNewtCheckbox *checkbox);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_CHECKBOX_H */
diff --git a/tui/newt/nmt-newt-component.c b/tui/newt/nmt-newt-component.c
new file mode 100644
index 000000000..877b53dbf
--- /dev/null
+++ b/tui/newt/nmt-newt-component.c
@@ -0,0 +1,307 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-component
+ * @short_description: Base class for widgets that wrap #newtComponents
+ *
+ * #NmtNewtComponent is the abstract class for #NmtNewtWidgets that
+ * wrap a (single) #newtComponent.
+ */
+
+#include "config.h"
+
+#include "nmt-newt-component.h"
+#include "nmt-newt-form.h"
+#include "nmt-newt-hacks.h"
+
+G_DEFINE_ABSTRACT_TYPE (NmtNewtComponent, nmt_newt_component, NMT_TYPE_NEWT_WIDGET)
+
+#define NMT_NEWT_COMPONENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_COMPONENT, NmtNewtComponentPrivate))
+
+typedef struct {
+ newtComponent co;
+ gboolean own_component;
+ gboolean sensitive;
+} NmtNewtComponentPrivate;
+
+enum {
+ PROP_0,
+
+ PROP_COMPONENT,
+ PROP_SENSITIVE,
+
+ LAST_PROP
+};
+
+static void
+nmt_newt_component_init (NmtNewtComponent *component)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (component);
+
+ priv->sensitive = TRUE;
+}
+
+static void
+nmt_newt_component_unrealize (NmtNewtWidget *widget)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (widget);
+
+ if (!priv->co)
+ return;
+
+ newtComponentAddCallback (priv->co, NULL, NULL);
+ newtComponentAddDestroyCallback (priv->co, NULL, NULL);
+
+ if (priv->own_component)
+ newtComponentDestroy (priv->co);
+ priv->co = NULL;
+}
+
+static void
+component_destroy_callback (newtComponent co,
+ void *component)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (component);
+
+ priv->own_component = FALSE;
+ nmt_newt_widget_unrealize (component);
+ nmt_newt_widget_needs_rebuild (component);
+}
+
+static void
+nmt_newt_component_realize (NmtNewtWidget *widget)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (widget);
+
+ nmt_newt_component_unrealize (widget);
+ priv->co = NMT_NEWT_COMPONENT_GET_CLASS (widget)->
+ build_component (NMT_NEWT_COMPONENT (widget), priv->sensitive);
+ priv->own_component = TRUE;
+ if (!priv->sensitive)
+ newtComponentTakesFocus (priv->co, FALSE);
+ newtComponentAddDestroyCallback (priv->co, component_destroy_callback, widget);
+}
+
+static newtComponent *
+nmt_newt_component_get_components (NmtNewtWidget *widget)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (widget);
+ newtComponent *cos;
+
+ priv->own_component = FALSE;
+ cos = g_new0 (newtComponent, 2);
+ cos[0] = priv->co;
+ return cos;
+}
+
+static NmtNewtWidget *
+nmt_newt_component_find_component (NmtNewtWidget *widget,
+ newtComponent co)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (widget);
+
+ if (co == priv->co)
+ return widget;
+ else
+ return NULL;
+}
+
+static void
+nmt_newt_component_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (widget);
+
+ newtComponentGetSize (priv->co, width, height);
+}
+
+static void
+nmt_newt_component_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (widget);
+ newtGrid grid;
+
+ /* You can't directly place a newtComponent, so we create a newtGrid,
+ * position the component within that, and then place the grid.
+ */
+ grid = newtCreateGrid (1, 1);
+ newtGridSetField (grid, 0, 0,
+ NEWT_GRID_COMPONENT, priv->co,
+ x, y, 0, 0,
+ NEWT_ANCHOR_LEFT | NEWT_ANCHOR_TOP, 0);
+ newtGridPlace (grid, 0, 0);
+ newtGridFree (grid, FALSE);
+}
+
+static newtComponent
+nmt_newt_component_get_focus_component (NmtNewtWidget *widget)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (widget);
+
+ return priv->co;
+}
+
+/**
+ * nmt_newt_component_get_component:
+ * @component: an #NmtNewtComponent
+ *
+ * A simpler version of nmt_newt_widget_get_components() for the
+ * single-component case. Also, unlike
+ * nmt_newt_widget_get_component(), this does not realize the widget
+ * if it isn't already realized. FIXME: why?
+ *
+ * Returns: @component's #newtComponent
+ */
+newtComponent
+nmt_newt_component_get_component (NmtNewtComponent *component)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (component);
+
+ return priv->co;
+}
+
+/**
+ * nmt_newt_component_get_sensitive:
+ * @component: an #NmtNewtComponent
+ *
+ * Gets @component's #NmtNewtComponent:sensitive property, indicating
+ * whether the widget is available for manipulation. Insensitive
+ * components will be skipped over in the keyboard tab chain, and may
+ * be displayed differently.
+ *
+ * Returns: @component's #NmtNewtComponent:sensitive property
+ */
+gboolean
+nmt_newt_component_get_sensitive (NmtNewtComponent *component)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (component);
+
+ return priv->sensitive;
+}
+
+/**
+ * nmt_newt_component_set_sensitive:
+ * @component: an #NmtNewtComponent
+ * @sensitive: whether @component should be sensitive
+ *
+ * Sets @component's #NmtNewtComponent:sensitive property.
+ */
+void
+nmt_newt_component_set_sensitive (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtComponentPrivate *priv = NMT_NEWT_COMPONENT_GET_PRIVATE (component);
+
+ sensitive = !!sensitive;
+ if (priv->sensitive == sensitive)
+ return;
+
+ priv->sensitive = sensitive;
+ g_object_notify (G_OBJECT (component), "sensitive");
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (component));
+}
+
+static void
+nmt_newt_component_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtComponent *component = NMT_NEWT_COMPONENT (object);
+
+ switch (prop_id) {
+ case PROP_SENSITIVE:
+ nmt_newt_component_set_sensitive (component, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_component_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtComponent *component = NMT_NEWT_COMPONENT (object);
+
+ switch (prop_id) {
+ case PROP_COMPONENT:
+ g_value_set_pointer (value, nmt_newt_component_get_component (component));
+ break;
+ case PROP_SENSITIVE:
+ g_value_set_boolean (value, nmt_newt_component_get_sensitive (component));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_component_class_init (NmtNewtComponentClass *component_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (component_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (component_class);
+
+ g_type_class_add_private (component_class, sizeof (NmtNewtComponentPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_component_set_property;
+ object_class->get_property = nmt_newt_component_get_property;
+
+ widget_class->realize = nmt_newt_component_realize;
+ widget_class->unrealize = nmt_newt_component_unrealize;
+ widget_class->get_components = nmt_newt_component_get_components;
+ widget_class->find_component = nmt_newt_component_find_component;
+ widget_class->size_request = nmt_newt_component_size_request;
+ widget_class->size_allocate = nmt_newt_component_size_allocate;
+ widget_class->get_focus_component = nmt_newt_component_get_focus_component;
+
+ /* properties */
+
+ /**
+ * NmtNewtComponent:component:
+ *
+ * The component's #newtComponent
+ */
+ g_object_class_install_property (object_class, PROP_COMPONENT,
+ g_param_spec_pointer ("component", "", "",
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtComponent:sensitive:
+ *
+ * Whether the component is sensitive. Insensitive components will
+ * be skipped over in the keyboard tab chain, and may be displayed
+ * differently.
+ */
+ g_object_class_install_property (object_class, PROP_SENSITIVE,
+ g_param_spec_boolean ("sensitive", "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-component.h b/tui/newt/nmt-newt-component.h
new file mode 100644
index 000000000..2ffa018e1
--- /dev/null
+++ b/tui/newt/nmt-newt-component.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_COMPONENT_H
+#define NMT_NEWT_COMPONENT_H
+
+#include "nmt-newt-widget.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_COMPONENT (nmt_newt_component_get_type ())
+#define NMT_NEWT_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_COMPONENT, NmtNewtComponent))
+#define NMT_NEWT_COMPONENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_COMPONENT, NmtNewtComponentClass))
+#define NMT_IS_NEWT_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_COMPONENT))
+#define NMT_IS_NEWT_COMPONENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_COMPONENT))
+#define NMT_NEWT_COMPONENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_COMPONENT, NmtNewtComponentClass))
+
+struct _NmtNewtComponent {
+ NmtNewtWidget parent;
+
+};
+
+typedef struct {
+ NmtNewtWidgetClass parent;
+
+ /* methods */
+ newtComponent (*build_component) (NmtNewtComponent *component,
+ gboolean sensitive);
+
+} NmtNewtComponentClass;
+
+GType nmt_newt_component_get_type (void);
+
+newtComponent nmt_newt_component_get_component (NmtNewtComponent *component);
+
+gboolean nmt_newt_component_get_sensitive (NmtNewtComponent *component);
+void nmt_newt_component_set_sensitive (NmtNewtComponent *component,
+ gboolean sensitive);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_COMPONENT_H */
diff --git a/tui/newt/nmt-newt-container.c b/tui/newt/nmt-newt-container.c
new file mode 100644
index 000000000..03f677fbd
--- /dev/null
+++ b/tui/newt/nmt-newt-container.c
@@ -0,0 +1,252 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-container
+ * @short_description: Base class for containers
+ *
+ * #NmtNewtContainer is the base class for #NmtNewtWidgets that
+ * contain other widgets.
+ *
+ * #NmtNewtGrid is the most generic container type.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-container.h"
+#include "nmt-newt-component.h"
+
+G_DEFINE_ABSTRACT_TYPE (NmtNewtContainer, nmt_newt_container, NMT_TYPE_NEWT_WIDGET)
+
+#define NMT_NEWT_CONTAINER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_CONTAINER, NmtNewtContainerPrivate))
+
+typedef struct {
+ GPtrArray *children;
+
+} NmtNewtContainerPrivate;
+
+static void child_needs_rebuild (NmtNewtWidget *widget, gpointer user_data);
+
+static void
+nmt_newt_container_init (NmtNewtContainer *container)
+{
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (container);
+
+ priv->children = g_ptr_array_new ();
+}
+
+static void
+nmt_newt_container_finalize (GObject *object)
+{
+ NmtNewtContainer *container = NMT_NEWT_CONTAINER (object);
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (object);
+
+ while (priv->children->len)
+ nmt_newt_container_remove (container, priv->children->pdata[0]);
+
+ G_OBJECT_CLASS (nmt_newt_container_parent_class)->finalize (object);
+}
+
+static void
+nmt_newt_container_realize (NmtNewtWidget *widget)
+{
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (widget);
+ int i;
+
+ for (i = 0; i < priv->children->len; i++)
+ nmt_newt_widget_realize (priv->children->pdata[i]);
+}
+
+static void
+nmt_newt_container_unrealize (NmtNewtWidget *widget)
+{
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (widget);
+ int i;
+
+ for (i = 0; i < priv->children->len; i++)
+ nmt_newt_widget_unrealize (priv->children->pdata[i]);
+}
+
+static void
+child_needs_rebuild (NmtNewtWidget *widget,
+ gpointer user_data)
+{
+ NmtNewtWidget *container = user_data;
+
+ nmt_newt_widget_needs_rebuild (container);
+}
+
+static void
+nmt_newt_container_real_child_validity_changed (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtContainerPrivate *priv;
+ int i;
+
+ if (widget) {
+ if (!nmt_newt_widget_get_visible (widget))
+ return;
+ if (!nmt_newt_widget_get_valid (widget)) {
+ nmt_newt_widget_set_valid (NMT_NEWT_WIDGET (container), FALSE);
+ return;
+ }
+ }
+
+ priv = NMT_NEWT_CONTAINER_GET_PRIVATE (container);
+ for (i = 0; i < priv->children->len; i++) {
+ widget = priv->children->pdata[i];
+ if ( nmt_newt_widget_get_visible (widget)
+ && !nmt_newt_widget_get_valid (widget)) {
+ nmt_newt_widget_set_valid (NMT_NEWT_WIDGET (container), FALSE);
+ return;
+ }
+ }
+
+ nmt_newt_widget_set_valid (NMT_NEWT_WIDGET (container), TRUE);
+}
+
+static void
+nmt_newt_container_child_validity_changed (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NMT_NEWT_CONTAINER_GET_CLASS (container)->child_validity_changed (container, widget);
+}
+
+static void
+child_validity_notify (GObject *object,
+ GParamSpec *pspec,
+ gpointer container)
+{
+ nmt_newt_container_child_validity_changed (container, NMT_NEWT_WIDGET (object));
+}
+
+static void
+nmt_newt_container_real_add (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (container);
+
+ g_signal_connect (widget, "needs-rebuild", G_CALLBACK (child_needs_rebuild), container);
+ g_signal_connect (widget, "notify::valid", G_CALLBACK (child_validity_notify), container);
+ g_ptr_array_add (priv->children, g_object_ref_sink (widget));
+ nmt_newt_widget_set_parent (widget, NMT_NEWT_WIDGET (container));
+
+ nmt_newt_container_child_validity_changed (container, widget);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (container));
+}
+
+static void
+nmt_newt_container_real_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (container);
+ int i;
+
+ for (i = 0; i < priv->children->len; i++) {
+ if (widget == priv->children->pdata[i]) {
+ g_ptr_array_remove_index (priv->children, i);
+ g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (child_needs_rebuild), container);
+ g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (child_validity_notify), container);
+ nmt_newt_widget_set_parent (widget, NULL);
+ g_object_unref (widget);
+
+ nmt_newt_container_child_validity_changed (container, NULL);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (container));
+ return;
+ }
+ }
+}
+
+/**
+ * nmt_newt_container_remove:
+ * @container: the #NmtNewtContainer
+ * @widget: the child to remove
+ *
+ * Removes @widget from @container.
+ *
+ * Note that there is not a corresponding
+ * <literal>nmt_newt_container_add ()</literal>; you must use
+ * container-type-specific methods to add widgets to containers.
+ */
+void
+nmt_newt_container_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NMT_NEWT_CONTAINER_GET_CLASS (container)->remove (container, widget);
+}
+
+static NmtNewtWidget *
+nmt_newt_container_find_component (NmtNewtWidget *widget,
+ newtComponent co)
+{
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (widget);
+ NmtNewtWidget *found, *child;
+ int i;
+
+ for (i = 0; i < priv->children->len; i++) {
+ child = priv->children->pdata[i];
+
+ found = nmt_newt_widget_find_component (child, co);
+ if (found)
+ return found;
+ }
+
+ return NULL;
+}
+
+/**
+ * nmt_newt_container_get_children:
+ * @container: an #NmtNewtContainer
+ *
+ * Gets a list of @container's children.
+ *
+ * Returns: (transfer full): a list of @container's children.
+ */
+GSList *
+nmt_newt_container_get_children (NmtNewtContainer *container)
+{
+ NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (container);
+ GSList *ret;
+ int i;
+
+ for (i = 0, ret = NULL; i < priv->children->len; i++)
+ ret = g_slist_prepend (ret, g_object_ref (priv->children->pdata[i]));
+ return g_slist_reverse (ret);
+}
+
+static void
+nmt_newt_container_class_init (NmtNewtContainerClass *container_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (container_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (container_class);
+
+ g_type_class_add_private (container_class, sizeof (NmtNewtContainerPrivate));
+
+ /* virtual methods */
+ object_class->finalize = nmt_newt_container_finalize;
+
+ widget_class->realize = nmt_newt_container_realize;
+ widget_class->unrealize = nmt_newt_container_unrealize;
+ widget_class->find_component = nmt_newt_container_find_component;
+
+ container_class->add = nmt_newt_container_real_add;
+ container_class->remove = nmt_newt_container_real_remove;
+ container_class->child_validity_changed = nmt_newt_container_real_child_validity_changed;
+}
diff --git a/tui/newt/nmt-newt-container.h b/tui/newt/nmt-newt-container.h
new file mode 100644
index 000000000..6f182925d
--- /dev/null
+++ b/tui/newt/nmt-newt-container.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_CONTAINER_H
+#define NMT_NEWT_CONTAINER_H
+
+#include "nmt-newt-widget.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_CONTAINER (nmt_newt_container_get_type ())
+#define NMT_NEWT_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_CONTAINER, NmtNewtContainer))
+#define NMT_NEWT_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_CONTAINER, NmtNewtContainerClass))
+#define NMT_IS_NEWT_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_CONTAINER))
+#define NMT_IS_NEWT_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_CONTAINER))
+#define NMT_NEWT_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_CONTAINER, NmtNewtContainerClass))
+
+struct _NmtNewtContainer {
+ NmtNewtWidget parent;
+
+};
+
+typedef struct {
+ NmtNewtWidgetClass parent;
+
+ /* methods */
+ void (*add) (NmtNewtContainer *container,
+ NmtNewtWidget *child);
+ void (*remove) (NmtNewtContainer *container,
+ NmtNewtWidget *child);
+
+ void (*child_validity_changed) (NmtNewtContainer *container,
+ NmtNewtWidget *child);
+
+} NmtNewtContainerClass;
+
+GType nmt_newt_container_get_type (void);
+
+void nmt_newt_container_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget);
+
+GSList *nmt_newt_container_get_children (NmtNewtContainer *container);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_CONTAINER_H */
diff --git a/tui/newt/nmt-newt-entry-numeric.c b/tui/newt/nmt-newt-entry-numeric.c
new file mode 100644
index 000000000..753c209a3
--- /dev/null
+++ b/tui/newt/nmt-newt-entry-numeric.c
@@ -0,0 +1,213 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-entry-numeric
+ * @short_description: Numeric text entry
+ *
+ * #NmtNewtEntryNumeric implements a numeric-only #NmtNewtEntry.
+ *
+ * #NmtNewtEntryNumeric provides its own #NmtNewtEntryFilter and
+ * #NmtNewtEntryValidator functions, so you should not set your own.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include "nmt-newt-entry-numeric.h"
+
+G_DEFINE_TYPE (NmtNewtEntryNumeric, nmt_newt_entry_numeric, NMT_TYPE_NEWT_ENTRY)
+
+#define NMT_NEWT_ENTRY_NUMERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_ENTRY_NUMERIC, NmtNewtEntryNumericPrivate))
+
+typedef struct {
+ int min, max;
+} NmtNewtEntryNumericPrivate;
+
+enum {
+ PROP_0,
+ PROP_MINIMUM,
+ PROP_MAXIMUM,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_newt_entry_numeric_new:
+ * @width: the entry's width in characters
+ * @min: the minimum valid value
+ * @max: the maximum valid value
+ *
+ * Creates a new #NmtNewtEntryNumeric, accepting values in the
+ * indicated range.
+ *
+ * Returns: a new #NmtNewtEntryNumeric
+ */
+NmtNewtWidget *
+nmt_newt_entry_numeric_new (int width,
+ int min,
+ int max)
+{
+ return g_object_new (NMT_TYPE_NEWT_ENTRY_NUMERIC,
+ "width", width,
+ "minimum", min,
+ "maximum", max,
+ NULL);
+}
+
+static gboolean
+newt_entry_numeric_filter (NmtNewtEntry *entry,
+ const char *text,
+ int ch,
+ int position,
+ gpointer user_data)
+{
+ NmtNewtEntryNumericPrivate *priv = NMT_NEWT_ENTRY_NUMERIC_GET_PRIVATE (entry);
+
+ if (g_ascii_isdigit (ch))
+ return TRUE;
+
+ if (ch == '-' && position == 0 && priv->min < 0)
+ return TRUE;
+
+ return FALSE;
+}
+
+static gboolean
+newt_entry_numeric_validate (NmtNewtEntry *entry,
+ const char *text,
+ gpointer user_data)
+{
+ NmtNewtEntryNumericPrivate *priv = NMT_NEWT_ENTRY_NUMERIC_GET_PRIVATE (entry);
+ int val;
+ char *end;
+
+ if (!*text)
+ return FALSE;
+
+ val = strtoul (text, &end, 10);
+ if (*end)
+ return FALSE;
+ if (val < priv->min || val > priv->max)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+nmt_newt_entry_numeric_init (NmtNewtEntryNumeric *entry)
+{
+ nmt_newt_entry_set_filter (NMT_NEWT_ENTRY (entry), newt_entry_numeric_filter, NULL);
+ nmt_newt_entry_set_validator (NMT_NEWT_ENTRY (entry), newt_entry_numeric_validate, NULL);
+}
+
+static void
+nmt_newt_entry_numeric_constructed (GObject *object)
+{
+ NmtNewtEntryNumericPrivate *priv = NMT_NEWT_ENTRY_NUMERIC_GET_PRIVATE (object);
+
+ if (!*nmt_newt_entry_get_text (NMT_NEWT_ENTRY (object))) {
+ char buf[32];
+
+ g_snprintf (buf, sizeof (buf), "%d", priv->min);
+ nmt_newt_entry_set_text (NMT_NEWT_ENTRY (object), buf);
+ }
+
+ G_OBJECT_CLASS (nmt_newt_entry_numeric_parent_class)->constructed (object);
+}
+
+static void
+nmt_newt_entry_numeric_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtEntryNumericPrivate *priv = NMT_NEWT_ENTRY_NUMERIC_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MINIMUM:
+ priv->min = g_value_get_int (value);
+ break;
+ case PROP_MAXIMUM:
+ priv->max = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_entry_numeric_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtEntryNumericPrivate *priv = NMT_NEWT_ENTRY_NUMERIC_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MINIMUM:
+ g_value_set_int (value, priv->min);
+ break;
+ case PROP_MAXIMUM:
+ g_value_set_int (value, priv->max);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_entry_numeric_class_init (NmtNewtEntryNumericClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtNewtEntryNumericPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_newt_entry_numeric_constructed;
+ object_class->set_property = nmt_newt_entry_numeric_set_property;
+ object_class->get_property = nmt_newt_entry_numeric_get_property;
+
+ /**
+ * NmtNewtEntryNumeric:minimum:
+ *
+ * The minimum #NmtNewtWidget:valid value for the entry. If this
+ * is non-negative, then the entry will not allow negative numbers
+ * to be entered.
+ */
+ g_object_class_install_property (object_class, PROP_MINIMUM,
+ g_param_spec_int ("minimum", "", "",
+ G_MININT, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtEntryNumeric:maximum:
+ *
+ * The maximum #NmtNewtWidget:valid value for the entry.
+ */
+ g_object_class_install_property (object_class, PROP_MAXIMUM,
+ g_param_spec_int ("maximum", "", "",
+ G_MININT, G_MAXINT, G_MAXINT,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-entry-numeric.h b/tui/newt/nmt-newt-entry-numeric.h
new file mode 100644
index 000000000..43ac34490
--- /dev/null
+++ b/tui/newt/nmt-newt-entry-numeric.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_ENTRY_NUMERIC_H
+#define NMT_NEWT_ENTRY_NUMERIC_H
+
+#include "nmt-newt-entry.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_ENTRY_NUMERIC (nmt_newt_entry_numeric_get_type ())
+#define NMT_NEWT_ENTRY_NUMERIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_ENTRY_NUMERIC, NmtNewtEntryNumeric))
+#define NMT_NEWT_ENTRY_NUMERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_ENTRY_NUMERIC, NmtNewtEntryNumericClass))
+#define NMT_IS_NEWT_ENTRY_NUMERIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_ENTRY_NUMERIC))
+#define NMT_IS_NEWT_ENTRY_NUMERIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_ENTRY_NUMERIC))
+#define NMT_NEWT_ENTRY_NUMERIC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_ENTRY_NUMERIC, NmtNewtEntryNumericClass))
+
+struct _NmtNewtEntryNumeric {
+ NmtNewtEntry parent;
+
+};
+
+typedef struct {
+ NmtNewtEntryClass parent;
+
+} NmtNewtEntryNumericClass;
+
+GType nmt_newt_entry_numeric_get_type (void);
+
+NmtNewtWidget *nmt_newt_entry_numeric_new (int width,
+ int min,
+ int max);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_ENTRY_NUMERIC_H */
diff --git a/tui/newt/nmt-newt-entry.c b/tui/newt/nmt-newt-entry.c
new file mode 100644
index 000000000..c98fcee8a
--- /dev/null
+++ b/tui/newt/nmt-newt-entry.c
@@ -0,0 +1,536 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-entry
+ * @short_description: Text entries
+ *
+ * #NmtNewtEntry implements entry widgets, with optional filtering and
+ * validation.
+ *
+ * See also #NmtNewtEntryNumeric, for numeric-only entries.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-entry.h"
+#include "nmt-newt-form.h"
+#include "nmt-newt-hacks.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtEntry, nmt_newt_entry, NMT_TYPE_NEWT_COMPONENT)
+
+#define NMT_NEWT_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_ENTRY, NmtNewtEntryPrivate))
+
+typedef struct {
+ int width;
+ NmtNewtEntryFlags flags;
+ char *text;
+ int last_cursor_pos;
+ guint idle_update;
+
+ NmtNewtEntryFilter filter;
+ gpointer filter_data;
+
+ NmtNewtEntryValidator validator;
+ gpointer validator_data;
+} NmtNewtEntryPrivate;
+
+enum {
+ PROP_0,
+ PROP_TEXT,
+ PROP_WIDTH,
+ PROP_FLAGS,
+ PROP_PASSWORD,
+
+ LAST_PROP
+};
+
+/**
+ * NmtNewtEntryFlags:
+ * @NMT_NEWT_ENTRY_NOSCROLL: the entry content should not scroll left
+ * and right
+ * @NMT_NEWT_ENTRY_PASSWORD: the entry should show '*'s instead of its
+ * actual contents
+ * @NMT_NEWT_ENTRY_NONEMPTY: the entry should be considered not
+ * #NmtNewtWidget:valid if it is empty.
+ *
+ * Flags describing an #NmtNewtEntry
+ */
+
+/**
+ * nmt_newt_entry_new:
+ * @width: the width in characters for the entry
+ * @flags: flags describing the entry
+ *
+ * Creates a new #NmtNewtEntry.
+ *
+ * Returns: a new #NmtNewtEntry
+ */
+NmtNewtWidget *
+nmt_newt_entry_new (int width,
+ NmtNewtEntryFlags flags)
+{
+ return g_object_new (NMT_TYPE_NEWT_ENTRY,
+ "width", width,
+ "flags", flags,
+ NULL);
+}
+
+/**
+ * NmtNewtEntryFilter:
+ * @entry: the #NmtNewtEntry
+ * @text: the current contents of @entry
+ * @ch: the character just typed
+ * @position: the position of the cursor in @entry
+ * @user_data: the data passed to nmt_newt_entry_set_filter()
+ *
+ * Callback function used to filter the contents of an entry.
+ *
+ * Returns: %TRUE if @ch should be accepted, %FALSE if not
+ */
+
+/**
+ * nmt_newt_entry_set_filter:
+ * @entry: an #NmtNewtEntry
+ * @filter: the function to use to filter the entry
+ * @user_data: data for @filter
+ *
+ * Sets a #NmtNewtEntryFilter on @entry, to allow filtering out
+ * certain characters from the entry.
+ *
+ * Note that @filter will only be called for printable characters (eg,
+ * not for cursor-control characters or the like), and that it will
+ * only be called for user input, not, eg, for
+ * nmt_newt_entry_set_text().
+ */
+void
+nmt_newt_entry_set_filter (NmtNewtEntry *entry,
+ NmtNewtEntryFilter filter,
+ gpointer user_data)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ priv->filter = filter;
+ priv->filter_data = user_data;
+}
+
+static void
+nmt_newt_entry_check_valid (NmtNewtEntry *entry)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+ gboolean valid;
+
+ if ( (priv->flags & NMT_NEWT_ENTRY_NONEMPTY)
+ && *priv->text == '\0')
+ valid = FALSE;
+ else if (priv->validator)
+ valid = !!priv->validator (entry, priv->text, priv->validator_data);
+ else
+ valid = TRUE;
+
+ nmt_newt_widget_set_valid (NMT_NEWT_WIDGET (entry), valid);
+}
+
+/**
+ * NmtNewtEntryValidator:
+ * @entry: the #NmtNewtEntry
+ * @text: the current contents of @entry
+ * @user_data: the data passed to nmt_newt_entry_set_validator()
+ *
+ * Callback function used to validate the contents of an entry.
+ *
+ * Returns: whether the entry is #NmtNewtWidget:valid
+ */
+
+/**
+ * nmt_newt_entry_set_validator:
+ * @entry: an #NmtNewtEntry
+ * @validator: the function to use to validate the entry
+ * @user_data: data for @validator
+ *
+ * Sets a #NmtNewtEntryValidator on @entry, to allow validation of
+ * the entry contents. If @validator returns %FALSE, then the entry
+ * will not be considered #NmtNewtWidget:valid.
+ */
+void
+nmt_newt_entry_set_validator (NmtNewtEntry *entry,
+ NmtNewtEntryValidator validator,
+ gpointer user_data)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ priv->validator = validator;
+ priv->validator_data = user_data;
+
+ nmt_newt_entry_check_valid (entry);
+}
+
+static void
+nmt_newt_entry_set_text_internal (NmtNewtEntry *entry,
+ const char *text,
+ newtComponent co)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ if (!text)
+ text = "";
+
+ if (!strcmp (priv->text, text))
+ return;
+
+ g_free (priv->text);
+ priv->text = g_strdup (text);
+
+ if (co) {
+ char *text_lc;
+
+ text_lc = priv->text ? nmt_newt_locale_from_utf8 (priv->text) : NULL;
+ newtEntrySet (co, text_lc, TRUE);
+ g_free (text_lc);
+ priv->last_cursor_pos = -1;
+ }
+
+ g_object_freeze_notify (G_OBJECT (entry));
+ nmt_newt_entry_check_valid (entry);
+ g_object_notify (G_OBJECT (entry), "text");
+ g_object_thaw_notify (G_OBJECT (entry));
+}
+
+/**
+ * nmt_newt_entry_set_text:
+ * @entry: an #NmtNewtEntry
+ * @text: the new text
+ *
+ * Updates @entry's text. Note that this skips the entry's
+ * #NmtNewtEntryFilter, but will cause its #NmtNewtEntryValidator to
+ * be re-run.
+ */
+void
+nmt_newt_entry_set_text (NmtNewtEntry *entry,
+ const char *text)
+{
+ newtComponent co;
+
+ co = nmt_newt_component_get_component (NMT_NEWT_COMPONENT (entry));
+ nmt_newt_entry_set_text_internal (entry, text, co);
+}
+
+/**
+ * nmt_newt_entry_get_text:
+ * @entry: an #NmtNewtEntry
+ *
+ * Gets @entry's text
+ *
+ * Returns: @entry's text
+ */
+const char *
+nmt_newt_entry_get_text (NmtNewtEntry *entry)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ return priv->text;
+}
+
+/**
+ * nmt_newt_entry_set_width:
+ * @entry: an #NmtNewtEntpry
+ * @widget: the new width
+ *
+ * Updates @entry's width
+ */
+void
+nmt_newt_entry_set_width (NmtNewtEntry *entry,
+ int width)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ if (priv->width == width)
+ return;
+
+ priv->width = width;
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (entry));
+
+ g_object_notify (G_OBJECT (entry), "width");
+}
+
+/**
+ * nmt_newt_entry_get_width:
+ * @entry: an #NmtNewtEntry
+ *
+ * Gets @entry's width
+ *
+ * Returns: @entry's width
+ */
+int
+nmt_newt_entry_get_width (NmtNewtEntry *entry)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ return priv->width;
+}
+
+static void
+nmt_newt_entry_init (NmtNewtEntry *entry)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ priv->text = g_strdup ("");
+ priv->last_cursor_pos = -1;
+}
+
+static void
+nmt_newt_entry_constructed (GObject *object)
+{
+ nmt_newt_entry_check_valid (NMT_NEWT_ENTRY (object));
+
+ G_OBJECT_CLASS (nmt_newt_entry_parent_class)->constructed (object);
+}
+
+static void
+nmt_newt_entry_finalize (GObject *object)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (object);
+
+ g_free (priv->text);
+ if (priv->idle_update)
+ g_source_remove (priv->idle_update);
+
+ G_OBJECT_CLASS (nmt_newt_entry_parent_class)->finalize (object);
+}
+
+static gboolean
+idle_update_entry (gpointer entry)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+ newtComponent co = nmt_newt_component_get_component (entry);
+ char *text;
+
+ priv->idle_update = 0;
+ if (!co)
+ return FALSE;
+
+ priv->last_cursor_pos = newtEntryGetCursorPosition (co);
+
+ text = nmt_newt_locale_to_utf8 (newtEntryGetValue (co));
+ nmt_newt_entry_set_text_internal (entry, text, NULL);
+ g_free (text);
+
+ return FALSE;
+}
+
+static int
+entry_filter (newtComponent entry,
+ void *self,
+ int ch,
+ int cursor)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (self);
+
+ if (g_ascii_isprint (ch)) {
+ if (priv->filter) {
+ char *text = nmt_newt_locale_to_utf8 (newtEntryGetValue (entry));
+
+ if (!priv->filter (self, text, ch, cursor, priv->filter_data)) {
+ g_free (text);
+ return 0;
+ }
+ g_free (text);
+ }
+ }
+
+ if (!priv->idle_update)
+ priv->idle_update = g_idle_add (idle_update_entry, self);
+ return ch;
+}
+
+static guint
+convert_flags (NmtNewtEntryFlags flags)
+{
+ guint newt_flags = NEWT_FLAG_RETURNEXIT;
+
+ if (!(flags & NMT_NEWT_ENTRY_NOSCROLL))
+ newt_flags |= NEWT_FLAG_SCROLL;
+ if (flags & NMT_NEWT_ENTRY_PASSWORD)
+ newt_flags |= NEWT_FLAG_PASSWORD;
+
+ return newt_flags;
+}
+
+static newtComponent
+nmt_newt_entry_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (component);
+ newtComponent co;
+ char *text_lc;
+ int flags;
+
+ flags = convert_flags (priv->flags);
+ if (!sensitive)
+ flags |= NEWT_FLAG_DISABLED;
+
+ text_lc = priv->text ? nmt_newt_locale_from_utf8 (priv->text) : NULL;
+ co = newtEntry (-1, -1, text_lc, priv->width, NULL, flags);
+ g_free (text_lc);
+
+ if (priv->last_cursor_pos != -1)
+ newtEntrySetCursorPosition (co, priv->last_cursor_pos);
+
+ newtEntrySetFilter (co, entry_filter, component);
+ return co;
+}
+
+static void
+nmt_newt_entry_activated (NmtNewtWidget *widget)
+{
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (widget);
+
+ if (priv->idle_update) {
+ g_source_remove (priv->idle_update);
+ idle_update_entry (widget);
+ }
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_entry_parent_class)->activated (widget);
+}
+
+static void
+nmt_newt_entry_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtEntry *entry = NMT_NEWT_ENTRY (object);
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ nmt_newt_entry_set_text (entry, g_value_get_string (value));
+ break;
+ case PROP_WIDTH:
+ nmt_newt_entry_set_width (entry, g_value_get_int (value));
+ break;
+ case PROP_FLAGS:
+ priv->flags = g_value_get_uint (value);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (entry));
+ break;
+ case PROP_PASSWORD:
+ if (g_value_get_boolean (value))
+ priv->flags |= NMT_NEWT_ENTRY_PASSWORD;
+ else
+ priv->flags &= ~NMT_NEWT_ENTRY_PASSWORD;
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (entry));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_entry_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtEntry *entry = NMT_NEWT_ENTRY (object);
+ NmtNewtEntryPrivate *priv = NMT_NEWT_ENTRY_GET_PRIVATE (entry);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ g_value_set_string (value, nmt_newt_entry_get_text (entry));
+ break;
+ case PROP_WIDTH:
+ g_value_set_int (value, priv->width);
+ break;
+ case PROP_FLAGS:
+ g_value_set_uint (value, priv->flags);
+ break;
+ case PROP_PASSWORD:
+ g_value_set_boolean (value, (priv->flags & NMT_NEWT_ENTRY_PASSWORD) != 0);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_entry_class_init (NmtNewtEntryClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (entry_class);
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtNewtEntryPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_newt_entry_constructed;
+ object_class->set_property = nmt_newt_entry_set_property;
+ object_class->get_property = nmt_newt_entry_get_property;
+ object_class->finalize = nmt_newt_entry_finalize;
+
+ widget_class->activated = nmt_newt_entry_activated;
+
+ component_class->build_component = nmt_newt_entry_build_component;
+
+ /**
+ * NmtNewtEntry:text
+ *
+ * The entry's text
+ */
+ g_object_class_install_property (object_class, PROP_TEXT,
+ g_param_spec_string ("text", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtEntry:width
+ *
+ * The entry's width in characters
+ */
+ g_object_class_install_property (object_class, PROP_WIDTH,
+ g_param_spec_int ("width", "", "",
+ -1, 80, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtEntry:flags
+ *
+ * The entry's #NmtNewtEntryFlags
+ */
+ g_object_class_install_property (object_class, PROP_FLAGS,
+ g_param_spec_uint ("flags", "", "",
+ 0, 0xFFFF, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtEntry:password
+ *
+ * %TRUE if #NmtNewtEntry:flags contains %NMT_NEWT_ENTRY_PASSWORD,
+ * %FALSE if not.
+ */
+ g_object_class_install_property (object_class, PROP_PASSWORD,
+ g_param_spec_boolean ("password", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-entry.h b/tui/newt/nmt-newt-entry.h
new file mode 100644
index 000000000..8df0b1370
--- /dev/null
+++ b/tui/newt/nmt-newt-entry.h
@@ -0,0 +1,74 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_ENTRY_H
+#define NMT_NEWT_ENTRY_H
+
+#include "nmt-newt-component.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_ENTRY (nmt_newt_entry_get_type ())
+#define NMT_NEWT_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_ENTRY, NmtNewtEntry))
+#define NMT_NEWT_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_ENTRY, NmtNewtEntryClass))
+#define NMT_IS_NEWT_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_ENTRY))
+#define NMT_IS_NEWT_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_ENTRY))
+#define NMT_NEWT_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_ENTRY, NmtNewtEntryClass))
+
+struct _NmtNewtEntry {
+ NmtNewtComponent parent;
+
+};
+
+typedef struct {
+ NmtNewtComponentClass parent;
+
+} NmtNewtEntryClass;
+
+GType nmt_newt_entry_get_type (void);
+
+typedef gboolean (*NmtNewtEntryFilter) (NmtNewtEntry *, const char *text, int ch, int position, gpointer);
+typedef gboolean (*NmtNewtEntryValidator) (NmtNewtEntry *, const char *text, gpointer);
+
+typedef enum {
+ NMT_NEWT_ENTRY_NOSCROLL = (1 << 0),
+ NMT_NEWT_ENTRY_PASSWORD = (1 << 1),
+ NMT_NEWT_ENTRY_NONEMPTY = (1 << 2)
+} NmtNewtEntryFlags;
+
+NmtNewtWidget *nmt_newt_entry_new (int width,
+ NmtNewtEntryFlags flags);
+
+void nmt_newt_entry_set_filter (NmtNewtEntry *entry,
+ NmtNewtEntryFilter filter,
+ gpointer user_data);
+void nmt_newt_entry_set_validator (NmtNewtEntry *entry,
+ NmtNewtEntryValidator validator,
+ gpointer user_data);
+
+void nmt_newt_entry_set_text (NmtNewtEntry *entry,
+ const char *text);
+const char *nmt_newt_entry_get_text (NmtNewtEntry *entry);
+
+void nmt_newt_entry_set_width (NmtNewtEntry *entry,
+ int width);
+int nmt_newt_entry_get_width (NmtNewtEntry *entry);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_ENTRY_H */
diff --git a/tui/newt/nmt-newt-form.c b/tui/newt/nmt-newt-form.c
new file mode 100644
index 000000000..0c2063be7
--- /dev/null
+++ b/tui/newt/nmt-newt-form.c
@@ -0,0 +1,743 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-form
+ * @short_description: The top-level NmtNewt widget
+ *
+ * #NmtNewtForm is the top-level widget that contains and presents a
+ * "form" (aka dialog) to the user.
+ */
+
+#include "config.h"
+
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-newt-form.h"
+#include "nmt-newt-button.h"
+#include "nmt-newt-grid.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtForm, nmt_newt_form, NMT_TYPE_NEWT_CONTAINER)
+
+#define NMT_NEWT_FORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_FORM, NmtNewtFormPrivate))
+
+typedef struct {
+ newtComponent form;
+ NmtNewtWidget *content;
+
+ guint x, y, width, height;
+ guint padding;
+ gboolean fixed_x, fixed_y;
+ gboolean fixed_width, fixed_height;
+ char *title_lc;
+
+ gboolean dirty, escape_exits;
+ NmtNewtWidget *focus;
+#ifdef HAVE_NEWTFORMGETSCROLLPOSITION
+ int scroll_position = 0;
+#endif
+} NmtNewtFormPrivate;
+
+enum {
+ PROP_0,
+ PROP_TITLE,
+ PROP_FULLSCREEN,
+ PROP_FULLSCREEN_VERTICAL,
+ PROP_FULLSCREEN_HORIZONTAL,
+ PROP_X,
+ PROP_Y,
+ PROP_WIDTH,
+ PROP_HEIGHT,
+ PROP_PADDING,
+ PROP_ESCAPE_EXITS,
+
+ LAST_PROP
+};
+
+enum {
+ QUIT,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void nmt_newt_form_redraw (NmtNewtForm *form);
+
+/**
+ * nmt_newt_form_new:
+ * @title: (allow-none): the form title
+ *
+ * Creates a new form, which will be shown centered on the screen.
+ * Compare nmt_newt_form_new_fullscreen(). You can also position a
+ * form manually by setting its #NmtNewtForm:x and #NmtNewtForm:y
+ * properties at construct time, and/or by setting
+ * #NmtNewtForm:fullscreen, #NmtNewtform:fullscreen-horizontal, or
+ * #NmtNewtForm:fullscreen-vertical.
+ *
+ * If @title is NULL, the form will have no title.
+ *
+ * Returns: a new #NmtNewtForm
+ */
+NmtNewtForm *
+nmt_newt_form_new (const char *title)
+{
+ return g_object_new (NMT_TYPE_NEWT_FORM,
+ "title", title,
+ NULL);
+}
+
+/**
+ * nmt_newt_form_new_fullscreen:
+ * @title: (allow-none): the form title
+ *
+ * Creates a new fullscreen form. Compare nmt_newt_form_new().
+ *
+ * If @title is NULL, the form will have no title.
+ *
+ * Returns: a new #NmtNewtForm
+ */
+NmtNewtForm *
+nmt_newt_form_new_fullscreen (const char *title)
+{
+ return g_object_new (NMT_TYPE_NEWT_FORM,
+ "title", title,
+ "fullscreen", TRUE,
+ NULL);
+}
+
+static void
+nmt_newt_form_init (NmtNewtForm *form)
+{
+ g_object_ref_sink (form);
+}
+
+static void
+nmt_newt_form_finalize (GObject *object)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (object);
+
+ g_free (priv->title_lc);
+ g_clear_object (&priv->focus);
+
+ G_OBJECT_CLASS (nmt_newt_form_parent_class)->finalize (object);
+}
+
+static void
+nmt_newt_form_needs_rebuild (NmtNewtWidget *widget)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (widget);
+
+ if (!priv->dirty) {
+ priv->dirty = TRUE;
+ nmt_newt_form_redraw (NMT_NEWT_FORM (widget));
+ }
+}
+
+static void
+nmt_newt_form_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (container);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_newt_form_parent_class);
+
+ g_return_if_fail (widget == priv->content);
+
+ parent_class->remove (container, widget);
+ priv->content = NULL;
+}
+
+/**
+ * nmt_newt_form_set_content:
+ * @form: the #NmtNewtForm
+ * @content: the form's content
+ *
+ * Sets @form's content to be @content.
+ */
+void
+nmt_newt_form_set_content (NmtNewtForm *form,
+ NmtNewtWidget *content)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (form);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_newt_form_parent_class);
+
+ if (priv->content)
+ nmt_newt_form_remove (NMT_NEWT_CONTAINER (form), priv->content);
+
+ priv->content = content;
+
+ if (priv->content)
+ parent_class->add (NMT_NEWT_CONTAINER (form), content);
+}
+
+static void
+nmt_newt_form_build (NmtNewtForm *form)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (form);
+ int screen_height, screen_width, form_height, form_width;
+ newtComponent *cos;
+ int i;
+
+ priv->dirty = FALSE;
+ nmt_newt_widget_realize (NMT_NEWT_WIDGET (form));
+
+ nmt_newt_widget_size_request (priv->content, &form_width, &form_height);
+ newtGetScreenSize (&screen_width, &screen_height);
+
+ if (!priv->fixed_width)
+ priv->width = MIN (form_width + 2 * priv->padding, screen_width - 2);
+ if (!priv->fixed_height)
+ priv->height = MIN (form_height + 2 * priv->padding, screen_height - 2);
+
+ if (!priv->fixed_x)
+ priv->x = (screen_width - form_width) / 2;
+ if (!priv->fixed_y)
+ priv->y = (screen_height - form_height) / 2;
+
+ nmt_newt_widget_size_allocate (priv->content,
+ priv->padding,
+ priv->padding,
+ priv->width - 2 * priv->padding,
+ priv->height - 2 * priv->padding);
+
+ if (priv->height - 2 * priv->padding < form_height) {
+ newtComponent scroll_bar =
+ newtVerticalScrollbar (priv->width - 1, 0, priv->height,
+ NEWT_COLORSET_WINDOW,
+ NEWT_COLORSET_ACTCHECKBOX);
+
+ priv->form = newtForm (scroll_bar, NULL, NEWT_FLAG_NOF12);
+ newtFormAddComponent (priv->form, scroll_bar);
+ newtFormSetHeight (priv->form, priv->height - 2);
+ } else
+ priv->form = newtForm (NULL, NULL, NEWT_FLAG_NOF12);
+
+ if (priv->escape_exits)
+ newtFormAddHotKey (priv->form, NEWT_KEY_ESCAPE);
+
+ cos = nmt_newt_widget_get_components (priv->content);
+ for (i = 0; cos[i]; i++)
+ newtFormAddComponent (priv->form, cos[i]);
+ g_free (cos);
+
+ if (priv->focus) {
+ newtComponent fco;
+
+ fco = nmt_newt_widget_get_focus_component (priv->focus);
+ if (fco)
+ newtFormSetCurrent (priv->form, fco);
+ }
+#ifdef HAVE_NEWTFORMGETSCROLLPOSITION
+ if (priv->scroll_position)
+ newtFormSetScrollPosition (priv->form, priv->scroll_position);
+#endif
+
+ newtOpenWindow (priv->x, priv->y, priv->width, priv->height, priv->title_lc);
+}
+
+static void
+nmt_newt_form_destroy (NmtNewtForm *form)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (form);
+
+#ifdef HAVE_NEWTFORMGETSCROLLPOSITION
+ priv->scroll_position = newtFormGetScrollPosition (priv->form);
+#endif
+
+ newtFormDestroy (priv->form);
+ priv->form = NULL;
+ newtPopWindowNoRefresh ();
+
+ nmt_newt_widget_unrealize (NMT_NEWT_WIDGET (form));
+}
+
+/* A "normal" newt program would call newtFormRun() to run newt's main loop
+ * and process events. But we want to let GLib's main loop control the program
+ * (eg, so libnm-glib can process D-Bus notifications). So we call this function
+ * to run a single iteration of newt's main loop (or rather, to run newt's
+ * main loop for 1ms) whenever there are events for newt to process (redrawing
+ * or keypresses).
+ */
+static void
+nmt_newt_form_iterate (NmtNewtForm *form)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (form);
+ NmtNewtWidget *focus;
+ struct newtExitStruct es;
+
+ if (priv->dirty) {
+ nmt_newt_form_destroy (form);
+ nmt_newt_form_build (form);
+ }
+
+ newtFormSetTimer (priv->form, 1);
+ newtFormRun (priv->form, &es);
+
+ if ( es.reason == NEWT_EXIT_HOTKEY
+ || es.reason == NEWT_EXIT_ERROR) {
+ /* The user hit Esc or there was an error. */
+ g_clear_object (&priv->focus);
+ nmt_newt_form_quit (form);
+ return;
+ }
+
+ if (es.reason == NEWT_EXIT_COMPONENT) {
+ /* The user hit Return/Space on a component; update the form focus
+ * to point that that component, and activate it.
+ */
+ focus = nmt_newt_widget_find_component (priv->content, es.u.co);
+ if (focus) {
+ nmt_newt_form_set_focus (form, focus);
+ nmt_newt_widget_activated (focus);
+ }
+ } else {
+ /* The 1ms timer ran out. Update focus but don't do anything else. */
+ focus = nmt_newt_widget_find_component (priv->content,
+ newtFormGetCurrent (priv->form));
+ if (focus)
+ nmt_newt_form_set_focus (form, focus);
+ }
+}
+
+/* @form_stack keeps track of all currently-displayed forms, from top to bottom.
+ * @keypress_source is the global stdin-monitoring GSource. When it triggers,
+ * nmt_newt_form_keypress_callback() iterates the top-most form, so it can
+ * process the keypress.
+ */
+static GSList *form_stack;
+static GSource *keypress_source;
+
+static gboolean
+nmt_newt_form_keypress_callback (int fd,
+ GIOCondition condition,
+ gpointer user_data)
+{
+ g_return_val_if_fail (form_stack != NULL, FALSE);
+
+ nmt_newt_form_iterate (form_stack->data);
+ return TRUE;
+}
+
+static gboolean
+nmt_newt_form_timeout_callback (gpointer user_data)
+{
+ if (form_stack)
+ nmt_newt_form_iterate (form_stack->data);
+ return FALSE;
+}
+
+static void
+nmt_newt_form_redraw (NmtNewtForm *form)
+{
+ g_timeout_add (0, nmt_newt_form_timeout_callback, NULL);
+}
+
+static void
+nmt_newt_form_real_show (NmtNewtForm *form)
+{
+ if (!keypress_source) {
+ GIOChannel *io;
+
+ io = g_io_channel_unix_new (STDIN_FILENO);
+ keypress_source = g_io_create_watch (io, G_IO_IN);
+ g_source_set_can_recurse (keypress_source, TRUE);
+ g_source_set_callback (keypress_source,
+ (GSourceFunc) nmt_newt_form_keypress_callback,
+ NULL, NULL);
+ g_source_attach (keypress_source, NULL);
+ g_io_channel_unref (io);
+ }
+
+ nmt_newt_form_build (form);
+ form_stack = g_slist_prepend (form_stack, g_object_ref (form));
+ nmt_newt_form_redraw (form);
+}
+
+/**
+ * nmt_newt_form_show:
+ * @form: an #NmtNewtForm
+ *
+ * Displays @form and begins running it asynchronously in the default
+ * #GMainContext. If another form is currently running, it will remain
+ * visible in the background, but will not be able to receive keyboard
+ * input until @form exits.
+ *
+ * Call nmt_newt_form_quit() to quit the form.
+ */
+void
+nmt_newt_form_show (NmtNewtForm *form)
+{
+ NMT_NEWT_FORM_GET_CLASS (form)->show (form);
+}
+
+/**
+ * nmt_newt_form_run_sync:
+ * @form: an #NmtNewtForm
+ *
+ * Displays @form as with nmt_newt_form_show(), but then iterates the
+ * #GMainContext internally until @form exits.
+ *
+ * Returns: the widget whose activation caused @form to exit, or
+ * %NULL if it was not caused by a widget. FIXME: this exit value is
+ * sort of weird and may not be 100% accurate anyway.
+ */
+NmtNewtWidget *
+nmt_newt_form_run_sync (NmtNewtForm *form)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (form);
+
+ nmt_newt_form_show (form);
+ while (priv->form)
+ g_main_context_iteration (NULL, TRUE);
+
+ return priv->focus;
+}
+
+/**
+ * nmt_newt_form_quit:
+ * @form: an #NmtNewtForm
+ *
+ * Causes @form to exit.
+ */
+void
+nmt_newt_form_quit (NmtNewtForm *form)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (form);
+
+ g_return_if_fail (priv->form != NULL);
+
+ nmt_newt_form_destroy (form);
+
+ form_stack = g_slist_remove (form_stack, form);
+
+ if (form_stack)
+ nmt_newt_form_iterate (form_stack->data);
+ else if (keypress_source) {
+ g_source_destroy (keypress_source);
+ g_clear_pointer (&keypress_source, g_source_unref);
+ }
+
+ g_signal_emit (form, signals[QUIT], 0);
+ g_object_unref (form);
+}
+
+/**
+ * nmt_newt_form_set_focus:
+ * @form: an #NmtNewtForm
+ * @widget: the widget to focus
+ *
+ * Focuses @widget in @form.
+ */
+void
+nmt_newt_form_set_focus (NmtNewtForm *form,
+ NmtNewtWidget *widget)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (form);
+
+ g_return_if_fail (priv->form != NULL);
+
+ if (priv->focus == widget)
+ return;
+
+ if (priv->focus)
+ g_object_unref (priv->focus);
+ priv->focus = widget;
+ if (priv->focus)
+ g_object_ref (priv->focus);
+}
+
+static void
+nmt_newt_form_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (object);
+ int screen_width, screen_height;
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ if (g_value_get_string (value)) {
+ priv->title_lc = nmt_newt_locale_from_utf8 (g_value_get_string (value));
+ } else
+ priv->title_lc = NULL;
+ break;
+ case PROP_FULLSCREEN:
+ if (g_value_get_boolean (value)) {
+ newtGetScreenSize (&screen_width, &screen_height);
+ priv->x = priv->y = 2;
+ priv->fixed_x = priv->fixed_y = TRUE;
+ priv->width = screen_width - 4;
+ priv->height = screen_height - 4;
+ priv->fixed_width = priv->fixed_height = TRUE;
+ }
+ break;
+ case PROP_FULLSCREEN_VERTICAL:
+ if (g_value_get_boolean (value)) {
+ newtGetScreenSize (&screen_width, &screen_height);
+ priv->y = 2;
+ priv->fixed_y = TRUE;
+ priv->height = screen_height - 4;
+ priv->fixed_height = TRUE;
+ }
+ break;
+ case PROP_FULLSCREEN_HORIZONTAL:
+ if (g_value_get_boolean (value)) {
+ newtGetScreenSize (&screen_width, &screen_height);
+ priv->x = 2;
+ priv->fixed_x = TRUE;
+ priv->width = screen_width - 4;
+ priv->fixed_width = TRUE;
+ }
+ break;
+ case PROP_X:
+ if (g_value_get_uint (value)) {
+ priv->x = g_value_get_uint (value);
+ priv->fixed_x = TRUE;
+ }
+ break;
+ case PROP_Y:
+ if (g_value_get_uint (value)) {
+ priv->y = g_value_get_uint (value);
+ priv->fixed_y = TRUE;
+ }
+ break;
+ case PROP_WIDTH:
+ if (g_value_get_uint (value)) {
+ priv->width = g_value_get_uint (value);
+ priv->fixed_width = TRUE;
+ }
+ break;
+ case PROP_HEIGHT:
+ if (g_value_get_uint (value)) {
+ priv->height = g_value_get_uint (value);
+ priv->fixed_height = TRUE;
+ }
+ break;
+ case PROP_PADDING:
+ priv->padding = g_value_get_uint (value);
+ break;
+ case PROP_ESCAPE_EXITS:
+ priv->escape_exits = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_form_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtFormPrivate *priv = NMT_NEWT_FORM_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ if (priv->title_lc) {
+ g_value_take_string (value, nmt_newt_locale_to_utf8 (priv->title_lc));
+ } else
+ g_value_set_string (value, NULL);
+ break;
+ case PROP_X:
+ g_value_set_uint (value, priv->x);
+ break;
+ case PROP_Y:
+ g_value_set_uint (value, priv->y);
+ break;
+ case PROP_WIDTH:
+ g_value_set_uint (value, priv->width);
+ break;
+ case PROP_HEIGHT:
+ g_value_set_uint (value, priv->height);
+ break;
+ case PROP_PADDING:
+ g_value_set_uint (value, priv->padding);
+ break;
+ case PROP_ESCAPE_EXITS:
+ g_value_set_boolean (value, priv->escape_exits);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_form_class_init (NmtNewtFormClass *form_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (form_class);
+ NmtNewtContainerClass *container_class = NMT_NEWT_CONTAINER_CLASS (form_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (form_class);
+
+ g_type_class_add_private (form_class, sizeof (NmtNewtFormPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_form_set_property;
+ object_class->get_property = nmt_newt_form_get_property;
+ object_class->finalize = nmt_newt_form_finalize;
+
+ widget_class->needs_rebuild = nmt_newt_form_needs_rebuild;
+
+ container_class->remove = nmt_newt_form_remove;
+
+ form_class->show = nmt_newt_form_real_show;
+
+ /* signals */
+
+ /**
+ * NmtNewtForm::quit:
+ * @form: the #NmtNewtForm
+ *
+ * Emitted when the form quits.
+ */
+ signals[QUIT] =
+ g_signal_new ("quit",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtNewtFormClass, quit),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ /**
+ * NmtNewtForm:title:
+ *
+ * The form's title. If non-%NULL, this will be displayed above
+ * the form in its border.
+ */
+ g_object_class_install_property (object_class, PROP_TITLE,
+ g_param_spec_string ("title", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:fullscreen:
+ *
+ * If %TRUE, the form will fill the entire "screen" (ie, terminal
+ * window).
+ */
+ g_object_class_install_property (object_class, PROP_FULLSCREEN,
+ g_param_spec_boolean ("fullscreen", "", "",
+ FALSE,
+ G_PARAM_WRITABLE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:fullscreen-vertical:
+ *
+ * If %TRUE, the form will fill the entire "screen" (ie, terminal
+ * window) vertically, but not necessarily horizontally.
+ */
+ g_object_class_install_property (object_class, PROP_FULLSCREEN_VERTICAL,
+ g_param_spec_boolean ("fullscreen-vertical", "", "",
+ FALSE,
+ G_PARAM_WRITABLE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:fullscreen-horizontal:
+ *
+ * If %TRUE, the form will fill the entire "screen" (ie, terminal
+ * window) horizontally, but not necessarily vertically.
+ */
+ g_object_class_install_property (object_class, PROP_FULLSCREEN_HORIZONTAL,
+ g_param_spec_boolean ("fullscreen-horizontal", "", "",
+ FALSE,
+ G_PARAM_WRITABLE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:x:
+ *
+ * The form's x coordinate. By default, the form will be centered
+ * on the screen.
+ */
+ g_object_class_install_property (object_class, PROP_X,
+ g_param_spec_uint ("x", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:y:
+ *
+ * The form's y coordinate. By default, the form will be centered
+ * on the screen.
+ */
+ g_object_class_install_property (object_class, PROP_Y,
+ g_param_spec_uint ("y", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:width:
+ *
+ * The form's width. By default, this will be determined by the
+ * width of the form's content.
+ */
+ g_object_class_install_property (object_class, PROP_WIDTH,
+ g_param_spec_uint ("width", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:height:
+ *
+ * The form's height. By default, this will be determined by the
+ * height of the form's content.
+ */
+ g_object_class_install_property (object_class, PROP_HEIGHT,
+ g_param_spec_uint ("height", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:padding:
+ *
+ * The padding between the form's content and its border.
+ */
+ g_object_class_install_property (object_class, PROP_PADDING,
+ g_param_spec_uint ("padding", "", "",
+ 0, G_MAXUINT, 1,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * NmtNewtForm:escape-exits:
+ *
+ * If %TRUE, then hitting the Escape key will cause the form to
+ * exit.
+ */
+ g_object_class_install_property (object_class, PROP_ESCAPE_EXITS,
+ g_param_spec_boolean ("escape-exits", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT_ONLY));
+}
diff --git a/tui/newt/nmt-newt-form.h b/tui/newt/nmt-newt-form.h
new file mode 100644
index 000000000..be95eb68a
--- /dev/null
+++ b/tui/newt/nmt-newt-form.h
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_FORM_H
+#define NMT_NEWT_FORM_H
+
+#include "nmt-newt-container.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_FORM (nmt_newt_form_get_type ())
+#define NMT_NEWT_FORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_FORM, NmtNewtForm))
+#define NMT_NEWT_FORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_FORM, NmtNewtFormClass))
+#define NMT_IS_NEWT_FORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_FORM))
+#define NMT_IS_NEWT_FORM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_FORM))
+#define NMT_NEWT_FORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_FORM, NmtNewtFormClass))
+
+struct _NmtNewtForm {
+ NmtNewtContainer parent;
+
+};
+
+typedef struct {
+ NmtNewtContainerClass parent;
+
+ /* signals */
+ void (*quit) (NmtNewtForm *form);
+
+ /* methods */
+ void (*show) (NmtNewtForm *form);
+
+} NmtNewtFormClass;
+
+GType nmt_newt_form_get_type (void);
+
+NmtNewtForm *nmt_newt_form_new (const char *title);
+NmtNewtForm *nmt_newt_form_new_fullscreen (const char *title);
+
+void nmt_newt_form_set_content (NmtNewtForm *form,
+ NmtNewtWidget *content);
+
+void nmt_newt_form_show (NmtNewtForm *form);
+NmtNewtWidget *nmt_newt_form_run_sync (NmtNewtForm *form);
+void nmt_newt_form_quit (NmtNewtForm *form);
+
+void nmt_newt_form_set_focus (NmtNewtForm *form,
+ NmtNewtWidget *widget);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_FORM_H */
diff --git a/tui/newt/nmt-newt-grid.c b/tui/newt/nmt-newt-grid.c
new file mode 100644
index 000000000..ac9673345
--- /dev/null
+++ b/tui/newt/nmt-newt-grid.c
@@ -0,0 +1,472 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-grid
+ * @short_description: Grid container
+ *
+ * #NmtNewtGrid is the most general-purpose container widget in NmtNewt.
+ *
+ * An #NmtNewtGrid consists of a number of rows and columns. There is
+ * no pre-established maximum row or columns. Rather, rows and columns
+ * exist if and only if there are widgets in them.
+ *
+ * The width of each column is the width of the widest widget in that
+ * column, and the height of each row is the height of the tallest
+ * widget in that row. Empty rows and empty columns take up no space,
+ * so a grid with a single widget at 0,0 would look exactly the same
+ * if the widget was at 5,10 instead.
+ *
+ * If a widget's cell ends up being larger than the widget's requested
+ * size, then by default the widget will be centered in its cell.
+ * However, this can be modified by changing its #NmtNewtGridFlags.
+ * FIXME: the FILL/ANCHOR flags can be implemented in #NmtNewtWidget
+ * and so should move there. Less clear about the EXPAND flags, which
+ * must be implemented by the container...
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-grid.h"
+
+G_DEFINE_TYPE (NmtNewtGrid, nmt_newt_grid, NMT_TYPE_NEWT_CONTAINER)
+
+#define NMT_NEWT_GRID_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_GRID, NmtNewtGridPrivate))
+
+typedef struct {
+ NmtNewtWidget *widget;
+ int x, y;
+ NmtNewtGridFlags flags;
+ int req_height, req_width;
+} NmtNewtGridChild;
+
+typedef struct {
+ GArray *children;
+ int max_x, max_y;
+ int *row_heights, *col_widths;
+ gboolean *expand_rows, *expand_cols;
+ int n_expand_rows, n_expand_cols;
+ int req_height, req_width;
+} NmtNewtGridPrivate;
+
+/**
+ * nmt_newt_grid_new:
+ *
+ * Creates a new #NmtNewtGrid
+ *
+ * Returns: a new #NmtNewtGrid
+ */
+NmtNewtWidget *
+nmt_newt_grid_new (void)
+{
+ return g_object_new (NMT_TYPE_NEWT_GRID, NULL);
+}
+
+static void
+nmt_newt_grid_init (NmtNewtGrid *grid)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+
+ priv->children = g_array_new (FALSE, FALSE, sizeof (NmtNewtGridChild));
+}
+
+static void
+nmt_newt_grid_finalize (GObject *object)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (object);
+
+ g_array_unref (priv->children);
+ g_clear_pointer (&priv->row_heights, g_free);
+ g_clear_pointer (&priv->col_widths, g_free);
+ g_clear_pointer (&priv->expand_rows, g_free);
+ g_clear_pointer (&priv->expand_cols, g_free);
+
+ G_OBJECT_CLASS (nmt_newt_grid_parent_class)->finalize (object);
+}
+
+static int
+child_sort_func (gconstpointer a,
+ gconstpointer b)
+{
+ NmtNewtGridChild *child_a = (NmtNewtGridChild *)a;
+ NmtNewtGridChild *child_b = (NmtNewtGridChild *)b;
+
+ if (child_a->y != child_b->y)
+ return child_a->y - child_b->y;
+ else
+ return child_a->x - child_b->x;
+}
+
+static newtComponent *
+nmt_newt_grid_get_components (NmtNewtWidget *widget)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (widget);
+ NmtNewtGridChild *children;
+ GPtrArray *cos;
+ newtComponent *child_cos;
+ int i, c;
+
+ g_array_sort (priv->children, child_sort_func);
+ children = (NmtNewtGridChild *)priv->children->data;
+
+ cos = g_ptr_array_new ();
+
+ for (i = 0; i < priv->children->len; i++) {
+ if (!nmt_newt_widget_get_visible (children[i].widget))
+ continue;
+
+ child_cos = nmt_newt_widget_get_components (children[i].widget);
+ for (c = 0; child_cos[c]; c++)
+ g_ptr_array_add (cos, child_cos[c]);
+ g_free (child_cos);
+ }
+ g_ptr_array_add (cos, NULL);
+
+ return (newtComponent *) g_ptr_array_free (cos, FALSE);
+}
+
+static void
+nmt_newt_grid_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NmtNewtGrid *grid = NMT_NEWT_GRID (widget);
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+ NmtNewtGridChild *children = (NmtNewtGridChild *)priv->children->data;
+ int row, col, i;
+
+ g_free (priv->row_heights);
+ g_free (priv->col_widths);
+ g_free (priv->expand_rows);
+ g_free (priv->expand_cols);
+
+ priv->row_heights = g_new0 (int, priv->max_y + 1);
+ priv->col_widths = g_new0 (int, priv->max_x + 1);
+ priv->expand_rows = g_new0 (gboolean, priv->max_y + 1);
+ priv->expand_cols = g_new0 (gboolean, priv->max_x + 1);
+ priv->n_expand_rows = priv->n_expand_cols = 0;
+
+ for (row = 0; row < priv->max_y + 1; row++) {
+ for (col = 0; col < priv->max_x + 1; col++) {
+ for (i = 0; i < priv->children->len; i++) {
+ if (children[i].x != col || children[i].y != row)
+ continue;
+ if (!nmt_newt_widget_get_visible (children[i].widget))
+ continue;
+
+ nmt_newt_widget_size_request (children[i].widget,
+ &children[i].req_width,
+ &children[i].req_height);
+ if (children[i].req_height > priv->row_heights[row])
+ priv->row_heights[row] = children[i].req_height;
+ if (children[i].req_width > priv->col_widths[col])
+ priv->col_widths[col] = children[i].req_width;
+
+ if ( (children[i].flags & NMT_NEWT_GRID_EXPAND_X)
+ && !priv->expand_cols[children[i].x]) {
+ priv->expand_cols[children[i].x] = TRUE;
+ priv->n_expand_cols++;
+ }
+ if ( (children[i].flags & NMT_NEWT_GRID_EXPAND_Y)
+ && !priv->expand_rows[children[i].y]) {
+ priv->expand_rows[children[i].y] = TRUE;
+ priv->n_expand_rows++;
+ }
+ }
+ }
+ }
+
+ priv->req_height = priv->req_width = 0;
+ for (row = 0; row < priv->max_y + 1; row++)
+ priv->req_height += priv->row_heights[row];
+ for (col = 0; col < priv->max_x + 1; col++)
+ priv->req_width += priv->col_widths[col];
+
+ *height = priv->req_height;
+ *width = priv->req_width;
+}
+
+static void
+nmt_newt_grid_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (widget);
+ NmtNewtGridChild *children = (NmtNewtGridChild *)priv->children->data, *child;
+ int i, row, col;
+ int child_x, child_y, child_width, child_height;
+ int extra, extra_all, extra_some;
+
+ extra = width - priv->req_width;
+ if (extra > 0 && priv->n_expand_cols) {
+ extra_all = extra / priv->n_expand_cols;
+ extra_some = extra % priv->n_expand_cols;
+
+ for (col = 0; col < priv->max_x + 1; col++) {
+ if (!priv->expand_cols[col])
+ continue;
+ priv->col_widths[col] += extra_all;
+ if (extra_some) {
+ priv->col_widths[col]++;
+ extra_some--;
+ }
+ }
+ }
+
+ extra = height - priv->req_height;
+ if (extra > 0 && priv->n_expand_rows) {
+ extra_all = extra / priv->n_expand_rows;
+ extra_some = extra % priv->n_expand_rows;
+
+ for (row = 0; row < priv->max_y + 1; row++) {
+ if (!priv->expand_rows[row])
+ continue;
+ priv->row_heights[row] += extra_all;
+ if (extra_some) {
+ priv->row_heights[row]++;
+ extra_some--;
+ }
+ }
+ }
+
+ for (i = 0; i < priv->children->len; i++) {
+ child = &children[i];
+ if (!nmt_newt_widget_get_visible (child->widget))
+ continue;
+
+ child_x = x;
+ for (col = 0; col < child->x; col++)
+ child_x += priv->col_widths[col];
+
+ if ((child->flags & NMT_NEWT_GRID_FILL_X) == NMT_NEWT_GRID_FILL_X) {
+ child_width = priv->col_widths[child->x];
+ } else {
+ child_width = child->req_width;
+ if (child->flags & NMT_NEWT_GRID_ANCHOR_RIGHT)
+ child_x += priv->col_widths[child->x] - child->req_width;
+ else if (!(child->flags & NMT_NEWT_GRID_ANCHOR_LEFT))
+ child_x += (priv->col_widths[child->x] - child->req_width) / 2;
+ }
+
+ child_y = y;
+ for (row = 0; row < child->y; row++)
+ child_y += priv->row_heights[row];
+
+ if ((child->flags & NMT_NEWT_GRID_FILL_Y) == NMT_NEWT_GRID_FILL_Y) {
+ child_height = priv->row_heights[child->y];
+ } else {
+ child_height = child->req_height;
+ if (child->flags & NMT_NEWT_GRID_ANCHOR_BOTTOM)
+ child_y += priv->row_heights[child->y] - child->req_height;
+ else if (!(child->flags & NMT_NEWT_GRID_ANCHOR_TOP))
+ child_y += (priv->row_heights[child->y] - child->req_height) / 2;
+ }
+
+ nmt_newt_widget_size_allocate (child->widget,
+ child_x, child_y,
+ child_width, child_height);
+ }
+}
+
+static void
+nmt_newt_grid_find_size (NmtNewtGrid *grid)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+ NmtNewtGridChild *children = (NmtNewtGridChild *)priv->children->data;
+ int i;
+
+ priv->max_x = priv->max_y = 0;
+ for (i = 0; i < priv->children->len; i++) {
+ if (children[i].x > priv->max_x)
+ priv->max_x = children[i].x;
+ if (children[i].y > priv->max_y)
+ priv->max_y = children[i].y;
+ }
+}
+
+/**
+ * nmt_newt_grid_add:
+ * @grid: an #NmtNewtGrid
+ * @widget: the widget to add
+ * @x: x coordinate
+ * @y: y coordinate
+ *
+ * Adds @widget to @grid at @x, @y. See the discussion above for more
+ * details of exactly how this works.
+ */
+void
+nmt_newt_grid_add (NmtNewtGrid *grid,
+ NmtNewtWidget *widget,
+ int x,
+ int y)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+ NmtNewtGridChild child;
+
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_grid_parent_class)->add (NMT_NEWT_CONTAINER (grid), widget);
+
+ memset (&child, 0, sizeof (child));
+ child.widget = widget;
+ child.x = x;
+ child.y = y;
+ child.flags = NMT_NEWT_GRID_FILL_X | NMT_NEWT_GRID_FILL_Y;
+ g_array_append_val (priv->children, child);
+
+ if (x > priv->max_x)
+ priv->max_x = x;
+ if (y > priv->max_y)
+ priv->max_y = y;
+}
+
+static int
+find_child (NmtNewtGrid *grid,
+ NmtNewtWidget *widget)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+ NmtNewtGridChild *children = (NmtNewtGridChild *)priv->children->data;
+ int i;
+
+ for (i = 0; i < priv->children->len; i++) {
+ if (children[i].widget == widget)
+ return i;
+ }
+
+ return -1;
+}
+
+static void
+nmt_newt_grid_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtGrid *grid = NMT_NEWT_GRID (container);
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+ int i;
+
+ i = find_child (grid, widget);
+ if (i != -1) {
+ g_array_remove_index (priv->children, i);
+ nmt_newt_grid_find_size (grid);
+ }
+
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_grid_parent_class)->remove (container, widget);
+}
+
+/**
+ * nmt_newt_grid_move:
+ * @grid: an #NmtNewtGrid
+ * @widget: a child of @grid
+ * @x: x coordinate
+ * @y: y coordinate
+ *
+ * Moves @widget to the given new coordinates.
+ */
+void
+nmt_newt_grid_move (NmtNewtGrid *grid,
+ NmtNewtWidget *widget,
+ int x,
+ int y)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+ NmtNewtGridChild *children = (NmtNewtGridChild *)priv->children->data;
+ int i;
+
+ i = find_child (grid, widget);
+ if (i != -1 && (children[i].x != x || children[i].y != y)) {
+ children[i].x = x;
+ children[i].y = y;
+ nmt_newt_grid_find_size (grid);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (grid));
+ }
+}
+
+/**
+ * NmtNewtGridFlags:
+ * @NMT_NEWT_GRID_EXPAND_X: The widget's cell should expand
+ * horizontally if the grid as a whole is given more width than
+ * it requested.
+ * @NMT_NEWT_GRID_EXPAND_Y: The widget's cell should expand
+ * vertically if the grid as a whole is given more height than
+ * it requested.
+ * @NMT_NEWT_GRID_ANCHOR_LEFT: If the widget's cell is wider than
+ * the widget requested, the widget should be anchored to the
+ * left of its cell rather than being centered.
+ * @NMT_NEWT_GRID_ANCHOR_RIGHT: If the widget's cell is wider than
+ * the widget requested, the widget should be anchored to the
+ * right of its cell rather than being centered.
+ * @NMT_NEWT_GRID_FILL_X: If the widget's cell is wider than
+ * the widget requested, the widget should be allocated the
+ * full width of the cell; this is equivalent to specifying
+ * both %NMT_NEWT_GRID_ANCHOR_LEFT and %NMT_NEWT_GRID_ANCHOR_RIGHT.
+ * @NMT_NEWT_GRID_ANCHOR_TOP: If the widget's cell is taller than
+ * the widget requested, the widget should be anchored to the
+ * top of its cell rather than being centered.
+ * @NMT_NEWT_GRID_ANCHOR_BOTTOM: If the widget's cell is taller than
+ * the widget requested, the widget should be anchored to the
+ * bottom of its cell rather than being centered.
+ * @NMT_NEWT_GRID_FILL_Y: If the widget's cell is taller than
+ * the widget requested, the widget should be allocated the
+ * full height of the cell; this is equivalent to specifying
+ * both %NMT_NEWT_GRID_ANCHOR_TOP and %NMT_NEWT_GRID_ANCHOR_BOTTOM.
+ *
+ * Flags describing how a widget is placed within its grid cell.
+ */
+
+/**
+ * nmt_newt_grid_set_flags:
+ * @grid: an #NmtNewtGrid
+ * @widget: a child of @grid
+ * @flags: #NmtNewtGridFlags for @widget
+ *
+ * Sets the #NmtNewtGridFlags on @widget
+ */
+void
+nmt_newt_grid_set_flags (NmtNewtGrid *grid,
+ NmtNewtWidget *widget,
+ NmtNewtGridFlags flags)
+{
+ NmtNewtGridPrivate *priv = NMT_NEWT_GRID_GET_PRIVATE (grid);
+ NmtNewtGridChild *children = (NmtNewtGridChild *)priv->children->data;
+ int i;
+
+ i = find_child (grid, widget);
+ if (i != -1)
+ children[i].flags = flags;
+}
+
+static void
+nmt_newt_grid_class_init (NmtNewtGridClass *grid_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (grid_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (grid_class);
+ NmtNewtContainerClass *container_class = NMT_NEWT_CONTAINER_CLASS (grid_class);
+
+ g_type_class_add_private (grid_class, sizeof (NmtNewtGridPrivate));
+
+ /* virtual methods */
+ object_class->finalize = nmt_newt_grid_finalize;
+
+ widget_class->get_components = nmt_newt_grid_get_components;
+ widget_class->size_request = nmt_newt_grid_size_request;
+ widget_class->size_allocate = nmt_newt_grid_size_allocate;
+
+ container_class->remove = nmt_newt_grid_remove;
+}
diff --git a/tui/newt/nmt-newt-grid.h b/tui/newt/nmt-newt-grid.h
new file mode 100644
index 000000000..f36a38ee8
--- /dev/null
+++ b/tui/newt/nmt-newt-grid.h
@@ -0,0 +1,72 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_GRID_H
+#define NMT_NEWT_GRID_H
+
+#include "nmt-newt-container.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_GRID (nmt_newt_grid_get_type ())
+#define NMT_NEWT_GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_GRID, NmtNewtGrid))
+#define NMT_NEWT_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_GRID, NmtNewtGridClass))
+#define NMT_IS_NEWT_GRID(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_GRID))
+#define NMT_IS_NEWT_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_GRID))
+#define NMT_NEWT_GRID_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_GRID, NmtNewtGridClass))
+
+struct _NmtNewtGrid {
+ NmtNewtContainer parent;
+
+};
+
+typedef struct {
+ NmtNewtContainerClass parent;
+
+} NmtNewtGridClass;
+
+GType nmt_newt_grid_get_type (void);
+
+typedef enum {
+ NMT_NEWT_GRID_EXPAND_X = (1 << 0),
+ NMT_NEWT_GRID_EXPAND_Y = (1 << 1),
+ NMT_NEWT_GRID_ANCHOR_LEFT = (1 << 2),
+ NMT_NEWT_GRID_ANCHOR_RIGHT = (1 << 3),
+ NMT_NEWT_GRID_FILL_X = NMT_NEWT_GRID_ANCHOR_LEFT | NMT_NEWT_GRID_ANCHOR_RIGHT,
+ NMT_NEWT_GRID_ANCHOR_TOP = (1 << 4),
+ NMT_NEWT_GRID_ANCHOR_BOTTOM = (1 << 5),
+ NMT_NEWT_GRID_FILL_Y = NMT_NEWT_GRID_ANCHOR_TOP | NMT_NEWT_GRID_ANCHOR_BOTTOM,
+} NmtNewtGridFlags;
+
+NmtNewtWidget *nmt_newt_grid_new (void);
+
+void nmt_newt_grid_add (NmtNewtGrid *grid,
+ NmtNewtWidget *widget,
+ int x,
+ int y);
+void nmt_newt_grid_move (NmtNewtGrid *grid,
+ NmtNewtWidget *widget,
+ int x,
+ int y);
+void nmt_newt_grid_set_flags (NmtNewtGrid *grid,
+ NmtNewtWidget *widget,
+ NmtNewtGridFlags flags);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_GRID_H */
diff --git a/tui/newt/nmt-newt-hacks.c b/tui/newt/nmt-newt-hacks.c
new file mode 100644
index 000000000..2d9b1725a
--- /dev/null
+++ b/tui/newt/nmt-newt-hacks.c
@@ -0,0 +1,103 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-hacks
+ * @short_description: Hacks!
+ *
+ * This contains hacky cheating implementations of certain newt
+ * functions that were added after 0.52.15.
+ */
+
+#include "config.h"
+
+#include "nmt-newt-hacks.h"
+
+#if !defined (HAVE_NEWTCOMPONENTGETSIZE) || !defined (HAVE_NEWTENTRYGETCURSORPOSITION)
+struct newtComponent_0_52_15_struct_hack {
+ int height, width;
+ int top, left;
+ int takesFocus;
+ int isMapped;
+
+ struct componentOps *ops;
+
+ newtCallback callback;
+ void *callbackData;
+
+ newtCallback destroyCallback;
+ void *destroyCallbackData;
+
+ void *data;
+};
+#endif
+
+#ifndef HAVE_NEWTCOMPONENTGETSIZE
+void
+newtComponentGetSize (newtComponent component,
+ int *width,
+ int *height)
+{
+ struct newtComponent_0_52_15_struct_hack *hack = (void *) component;
+
+ *width = hack->width;
+ *height = hack->height;
+}
+
+void
+newtComponentGetPosition (newtComponent component,
+ int *left,
+ int *top)
+{
+ struct newtComponent_0_52_15_struct_hack *hack = (void *) component;
+
+ *left = hack->left;
+ *top = hack->top;
+}
+#endif
+
+#ifndef HAVE_NEWTENTRYGETCURSORPOSITION
+struct newtEntry_0_52_15_struct_hack {
+ int flags;
+ char *buf;
+ const char **resultPtr;
+ int bufAlloced;
+ int bufUsed;
+ int cursorPosition;
+ /* ... */
+};
+
+int
+newtEntryGetCursorPosition (newtComponent component)
+{
+ struct newtComponent_0_52_15_struct_hack *co_hack = (void *) component;
+ struct newtEntry_0_52_15_struct_hack *entry_hack = co_hack->data;
+
+ return entry_hack->cursorPosition;
+}
+
+void
+newtEntrySetCursorPosition (newtComponent component,
+ int position)
+{
+ struct newtComponent_0_52_15_struct_hack *co_hack = (void *) component;
+ struct newtEntry_0_52_15_struct_hack *entry_hack = co_hack->data;
+
+ entry_hack->cursorPosition = position;
+}
+#endif
diff --git a/tui/newt/nmt-newt-hacks.h b/tui/newt/nmt-newt-hacks.h
new file mode 100644
index 000000000..ba8464af0
--- /dev/null
+++ b/tui/newt/nmt-newt-hacks.h
@@ -0,0 +1,42 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_HACKS_H
+#define NMT_NEWT_HACKS_H
+
+#include "config.h"
+
+#include <newt.h>
+
+#ifndef HAVE_NEWTCOMPONENTGETSIZE
+void newtComponentGetSize (newtComponent component,
+ int *width,
+ int *height);
+
+void newtComponentGetPosition (newtComponent component,
+ int *left,
+ int *top);
+#endif
+
+#ifndef HAVE_NEWTENTRYGETCURSORPOSITION
+int newtEntryGetCursorPosition (newtComponent component);
+void newtEntrySetCursorPosition (newtComponent component,
+ int position);
+#endif
+
+#endif /* NMT_NEWT_HACKS_H */
diff --git a/tui/newt/nmt-newt-label.c b/tui/newt/nmt-newt-label.c
new file mode 100644
index 000000000..a9d44b04f
--- /dev/null
+++ b/tui/newt/nmt-newt-label.c
@@ -0,0 +1,323 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-label
+ * @short_description: Labels
+ *
+ * #NmtNewtLabel implements a single-line label.
+ *
+ * See also #NmtNewtTextbox, for multiline.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-label.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtLabel, nmt_newt_label, NMT_TYPE_NEWT_COMPONENT)
+
+#define NMT_NEWT_LABEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_LABEL, NmtNewtLabelPrivate))
+
+typedef struct {
+ char *text;
+ NmtNewtLabelStyle style;
+ gboolean highlight;
+} NmtNewtLabelPrivate;
+
+enum {
+ PROP_0,
+ PROP_TEXT,
+ PROP_STYLE,
+ PROP_HIGHLIGHT,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_newt_label_new:
+ * @text: the initial label text
+ *
+ * Creates a new #NmtNewtLabel
+ *
+ * Returns: a new #NmtNewtLabel
+ */
+NmtNewtWidget *
+nmt_newt_label_new (const char *text)
+{
+ return g_object_new (NMT_TYPE_NEWT_LABEL,
+ "text", text,
+ NULL);
+}
+
+/**
+ * nmt_newt_label_set_text:
+ * @label: an #NmtNewtLabel
+ * @text: the new text
+ *
+ * Updates @label's text.
+ */
+void
+nmt_newt_label_set_text (NmtNewtLabel *label,
+ const char *text)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (label);
+
+ if (!g_strcmp0 (priv->text, text))
+ return;
+
+ g_free (priv->text);
+ priv->text = g_strdup (text);
+
+ g_object_notify (G_OBJECT (label), "text");
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (label));
+}
+
+/**
+ * nmt_newt_label_get_text:
+ * @label: an #NmtNewtLabel
+ *
+ * Gets @label's text
+ *
+ * Returns: @label's text
+ */
+const char *
+nmt_newt_label_get_text (NmtNewtLabel *label)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (label);
+
+ return priv->text;
+}
+
+/**
+ * NmtNewtLabelStyle:
+ * @NMT_NEWT_LABEL_NORMAL: a normal label
+ * @NMT_NEWT_LABEL_PLAIN: a "plain-looking" label
+ *
+ * The label style. Normal labels are blue. Plain labels are black,
+ * making them look more like they are text in their own right rather
+ * than just being a label for something else.
+ */
+
+/**
+ * nmt_newt_label_set_style:
+ * @label: an #NmtNewtLabel
+ * @style: the #NmtNewtLabelStyle
+ *
+ * Sets the style of @label
+ */
+void
+nmt_newt_label_set_style (NmtNewtLabel *label,
+ NmtNewtLabelStyle style)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (label);
+
+ if (priv->style == style)
+ return;
+
+ priv->style = style;
+ g_object_notify (G_OBJECT (label), "style");
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (label));
+}
+
+/**
+ * nmt_newt_label_get_style:
+ * @label: an #NmtNewtLabel
+ *
+ * Gets the style of @label
+ *
+ * Returns: the style of @label
+ */
+NmtNewtLabelStyle
+nmt_newt_label_get_style (NmtNewtLabel *label)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (label);
+
+ return priv->style;
+}
+
+/**
+ * nmt_newt_label_set_highlight:
+ * @label: an #NmtNewtLabel
+ * @highlight: %TRUE if @label should be highlighted
+ *
+ * Sets whether @label is highlighted. Highlighted labels are red;
+ * this is generally used to highlight invalid widgets.
+ */
+void
+nmt_newt_label_set_highlight (NmtNewtLabel *label,
+ gboolean highlight)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (label);
+
+ highlight = !!highlight;
+ if (priv->highlight == highlight)
+ return;
+
+ priv->highlight = highlight;
+ g_object_notify (G_OBJECT (label), "highlight");
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (label));
+}
+
+/**
+ * nmt_newt_label_get_highlight:
+ * @label: an #NmtNewtLabel
+ *
+ * Gets whether @label is highlighted.
+ *
+ * Returns: whether @label is highlighted.
+ */
+gboolean
+nmt_newt_label_get_highlight (NmtNewtLabel *label)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (label);
+
+ return priv->highlight;
+}
+
+static void
+nmt_newt_label_init (NmtNewtLabel *label)
+{
+}
+
+static void
+nmt_newt_label_finalize (GObject *object)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (object);
+
+ g_free (priv->text);
+
+ G_OBJECT_CLASS (nmt_newt_label_parent_class)->finalize (object);
+}
+
+static newtComponent
+nmt_newt_label_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (component);
+ newtComponent co;
+ char *text_lc;
+
+ text_lc = nmt_newt_locale_from_utf8 (priv->text);
+ co = newtLabel (-1, -1, text_lc);
+ g_free (text_lc);
+
+ if (priv->highlight)
+ newtLabelSetColors (co, NMT_NEWT_COLORSET_BAD_LABEL);
+ else if (priv->style == NMT_NEWT_LABEL_PLAIN)
+ newtLabelSetColors (co, NMT_NEWT_COLORSET_PLAIN_LABEL);
+
+ return co;
+}
+
+static void
+nmt_newt_label_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtLabel *label = NMT_NEWT_LABEL (object);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ nmt_newt_label_set_text (label, g_value_get_string (value));
+ break;
+ case PROP_STYLE:
+ nmt_newt_label_set_style (label, g_value_get_int (value));
+ break;
+ case PROP_HIGHLIGHT:
+ nmt_newt_label_set_highlight (label, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_label_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtLabelPrivate *priv = NMT_NEWT_LABEL_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ g_value_set_string (value, priv->text);
+ break;
+ case PROP_STYLE:
+ g_value_set_int (value, priv->style);
+ break;
+ case PROP_HIGHLIGHT:
+ g_value_set_boolean (value, priv->highlight);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_label_class_init (NmtNewtLabelClass *label_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (label_class);
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (label_class);
+
+ g_type_class_add_private (label_class, sizeof (NmtNewtLabelPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_label_set_property;
+ object_class->get_property = nmt_newt_label_get_property;
+ object_class->finalize = nmt_newt_label_finalize;
+
+ component_class->build_component = nmt_newt_label_build_component;
+
+ /**
+ * NmtNewtLabel:text:
+ *
+ * The label's text
+ */
+ g_object_class_install_property (object_class, PROP_TEXT,
+ g_param_spec_string ("text", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtLabel:style:
+ *
+ * The label's #NmtNewtLabelStyle
+ */
+ g_object_class_install_property (object_class, PROP_STYLE,
+ g_param_spec_int ("style", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtLabel:highlight:
+ *
+ * Whether the label is highlighted.
+ */
+ g_object_class_install_property (object_class, PROP_HIGHLIGHT,
+ g_param_spec_boolean ("highlight", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-label.h b/tui/newt/nmt-newt-label.h
new file mode 100644
index 000000000..a4e0dcca5
--- /dev/null
+++ b/tui/newt/nmt-newt-label.h
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_LABEL_H
+#define NMT_NEWT_LABEL_H
+
+#include "nmt-newt-component.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_LABEL (nmt_newt_label_get_type ())
+#define NMT_NEWT_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_LABEL, NmtNewtLabel))
+#define NMT_NEWT_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_LABEL, NmtNewtLabelClass))
+#define NMT_IS_NEWT_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_LABEL))
+#define NMT_IS_NEWT_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_LABEL))
+#define NMT_NEWT_LABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_LABEL, NmtNewtLabelClass))
+
+struct _NmtNewtLabel {
+ NmtNewtComponent parent;
+
+};
+
+typedef struct {
+ NmtNewtComponentClass parent;
+
+} NmtNewtLabelClass;
+
+GType nmt_newt_label_get_type (void);
+
+typedef enum {
+ NMT_NEWT_LABEL_NORMAL,
+ NMT_NEWT_LABEL_PLAIN
+} NmtNewtLabelStyle;
+
+NmtNewtWidget *nmt_newt_label_new (const char *text);
+
+void nmt_newt_label_set_text (NmtNewtLabel *label,
+ const char *text);
+const char *nmt_newt_label_get_text (NmtNewtLabel *label);
+
+void nmt_newt_label_set_style (NmtNewtLabel *label,
+ NmtNewtLabelStyle style);
+NmtNewtLabelStyle nmt_newt_label_get_style (NmtNewtLabel *label);
+
+void nmt_newt_label_set_highlight (NmtNewtLabel *label,
+ gboolean highlight);
+gboolean nmt_newt_label_get_highlight (NmtNewtLabel *label);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_LABEL_H */
diff --git a/tui/newt/nmt-newt-listbox.c b/tui/newt/nmt-newt-listbox.c
new file mode 100644
index 000000000..78c55dbe3
--- /dev/null
+++ b/tui/newt/nmt-newt-listbox.c
@@ -0,0 +1,543 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-listbox
+ * @short_description: Single-choice listboxes
+ *
+ * #NmtNewtListbox implements a single-choice listbox.
+ *
+ * A listbox has some number of rows, each associated with an
+ * arbitrary pointer value. The pointer values do not need to be
+ * unique, but some APIs will not be usable if they aren't. You
+ * can also cause rows with %NULL keys to be treated specially.
+ *
+ * The listbox will emit #NmtNewtWidget::activate when the user
+ * presses Return on a selection.
+ */
+
+#include "config.h"
+
+#include "nmt-newt-listbox.h"
+#include "nmt-newt-form.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtListbox, nmt_newt_listbox, NMT_TYPE_NEWT_COMPONENT)
+
+#define NMT_NEWT_LISTBOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_LISTBOX, NmtNewtListboxPrivate))
+
+typedef struct {
+ int height, alloc_height, width;
+ gboolean fixed_height;
+ NmtNewtListboxFlags flags;
+
+ GPtrArray *entries;
+ GPtrArray *keys;
+
+ int active;
+ gpointer active_key;
+ gboolean skip_null_keys;
+
+} NmtNewtListboxPrivate;
+
+enum {
+ PROP_0,
+ PROP_HEIGHT,
+ PROP_FLAGS,
+ PROP_ACTIVE,
+ PROP_ACTIVE_KEY,
+ PROP_SKIP_NULL_KEYS,
+
+ LAST_PROP
+};
+
+/**
+ * NmtNewtListboxFlags:
+ * @NMT_NEWT_LISTBOX_SCROLL: the listbox should have a scroll bar.
+ * @NMT_NEWT_LISTBOX_BORDER: the listbox should have a border around it.
+ *
+ * Flags describing an #NmtNewtListbox
+ */
+
+/**
+ * nmt_newt_listbox_new:
+ * @height: the height of the listbox, or -1 for no fixed height
+ * @flags: the listbox flags
+ *
+ * Creates a new #NmtNewtListbox
+ *
+ * Returns: a new #NmtNewtListbox
+ */
+NmtNewtWidget *
+nmt_newt_listbox_new (int height,
+ NmtNewtListboxFlags flags)
+{
+ return g_object_new (NMT_TYPE_NEWT_LISTBOX,
+ "height", height,
+ "flags", flags,
+ NULL);
+}
+
+/**
+ * nmt_newt_listbox_append:
+ * @listbox: an #NmtNewtListbox
+ * @entry: the text for the new row
+ * @key: (allow-none): the key associated with @entry
+ *
+ * Adds a row to @listbox.
+ */
+void
+nmt_newt_listbox_append (NmtNewtListbox *listbox,
+ const char *entry,
+ gpointer key)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ g_ptr_array_add (priv->entries, nmt_newt_locale_from_utf8 (entry));
+ g_ptr_array_add (priv->keys, key);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (listbox));
+}
+
+/**
+ * nmt_newt_listbox_clear:
+ * @listbox: an #NmtNewtListbox
+ *
+ * Clears the contents of @listbox.
+ */
+void
+nmt_newt_listbox_clear (NmtNewtListbox *listbox)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ g_ptr_array_set_size (priv->entries, 0);
+ g_ptr_array_set_size (priv->keys, 0);
+
+ priv->active = -1;
+ priv->active_key = NULL;
+
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (listbox));
+}
+
+/**
+ * nmt_newt_listbox_set_active:
+ * @listbox: an #NmtNewtListbox
+ * @active: the row to make active
+ *
+ * Sets @active to be the currently-selected row in @listbox,
+ * scrolling it into view if needed.
+ */
+void
+nmt_newt_listbox_set_active (NmtNewtListbox *listbox,
+ int active)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ if (active == priv->active)
+ return;
+
+ g_return_if_fail (active >= 0 && active < priv->entries->len);
+ g_return_if_fail (!priv->skip_null_keys || priv->keys->pdata[active]);
+
+ priv->active = active;
+ priv->active_key = priv->keys->pdata[active];
+
+ g_object_notify (G_OBJECT (listbox), "active");
+ g_object_notify (G_OBJECT (listbox), "active-key");
+}
+
+/**
+ * nmt_newt_listbox_set_active_key:
+ * @listbox: an #NmtNewtListbox
+ * @active_key: the key for the row to make active
+ *
+ * Selects the (first) row in @listbox with @active_key as its key,
+ * scrolling it into view if needed.
+ */
+void
+nmt_newt_listbox_set_active_key (NmtNewtListbox *listbox,
+ gpointer active_key)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+ int i;
+
+ if (active_key == priv->active_key)
+ return;
+
+ g_return_if_fail (!priv->skip_null_keys || active_key);
+
+ for (i = 0; i < priv->keys->len; i++) {
+ if (priv->keys->pdata[i] == active_key) {
+ priv->active = i;
+ priv->active_key = active_key;
+
+ g_object_notify (G_OBJECT (listbox), "active");
+ g_object_notify (G_OBJECT (listbox), "active-key");
+ return;
+ }
+ }
+}
+
+/**
+ * nmt_newt_listbox_get_active:
+ * @listbox: an #NmtNewtListbox
+ *
+ * Gets the currently-selected row in @listbox.
+ *
+ * Returns: the currently-selected row in @listbox.
+ */
+int
+nmt_newt_listbox_get_active (NmtNewtListbox *listbox)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ return priv->active;
+}
+
+/**
+ * nmt_newt_listbox_get_active_key:
+ * @listbox: an #NmtNewtListbox
+ *
+ * Gets the key of the currently-selected row in @listbox.
+ *
+ * Returns: the key of the currently-selected row in @listbox.
+ */
+gpointer
+nmt_newt_listbox_get_active_key (NmtNewtListbox *listbox)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ return priv->active_key;
+}
+
+/**
+ * nmt_newt_listbox_set_height:
+ * @listbox: an #NmtNewtListbox
+ * @height: the new height, or -1 for no fixed heigh
+ *
+ * Updates @listbox's height.
+ */
+void
+nmt_newt_listbox_set_height (NmtNewtListbox *listbox,
+ int height)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ priv->height = height;
+ priv->fixed_height = priv->height != 0;
+ g_object_notify (G_OBJECT (listbox), "height");
+}
+
+static void
+nmt_newt_listbox_init (NmtNewtListbox *listbox)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ priv->entries = g_ptr_array_new_with_free_func (g_free);
+ priv->keys = g_ptr_array_new ();
+
+ priv->active = -1;
+}
+
+static void
+nmt_newt_listbox_finalize (GObject *object)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (object);
+
+ g_ptr_array_unref (priv->entries);
+ g_ptr_array_unref (priv->keys);
+
+ G_OBJECT_CLASS (nmt_newt_listbox_parent_class)->finalize (object);
+}
+
+static void
+nmt_newt_listbox_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (widget);
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_listbox_parent_class)->
+ size_request (widget, width, height);
+
+ priv->alloc_height = -1;
+ if (!priv->fixed_height)
+ *height = 1;
+ priv->width = *width;
+}
+
+static void
+nmt_newt_listbox_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (widget);
+
+ if (width > priv->width) {
+ newtListboxSetWidth (nmt_newt_component_get_component (NMT_NEWT_COMPONENT (widget)),
+ width);
+ }
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_listbox_parent_class)->
+ size_allocate (widget, x, y, width, height);
+
+ priv->alloc_height = height;
+
+ if (!priv->fixed_height && height != priv->height) {
+ priv->height = height;
+ nmt_newt_widget_needs_rebuild (widget);
+ }
+}
+
+static void
+update_active_internal (NmtNewtListbox *listbox,
+ int new_active)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+
+ if (priv->active == new_active)
+ return;
+ if (new_active >= priv->keys->len)
+ return;
+
+ if (priv->skip_null_keys && !priv->keys->pdata[new_active]) {
+ if (new_active > priv->active) {
+ while ( new_active < priv->entries->len
+ && !priv->keys->pdata[new_active])
+ new_active++;
+ } else {
+ while ( new_active >= 0
+ && !priv->keys->pdata[new_active])
+ new_active--;
+ }
+
+ if ( new_active < 0
+ || new_active >= priv->entries->len
+ || !priv->keys->pdata[new_active]) {
+ g_assert (priv->active >= 0 && priv->active < priv->entries->len);
+ return;
+ }
+ }
+
+ nmt_newt_listbox_set_active (listbox, new_active);
+}
+
+static void
+selection_changed_callback (newtComponent co,
+ void *user_data)
+{
+ NmtNewtListbox *listbox = user_data;
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (listbox);
+ int new_active;
+
+ new_active = GPOINTER_TO_UINT (newtListboxGetCurrent (co));
+ update_active_internal (listbox, new_active);
+
+ if (priv->active != new_active)
+ newtListboxSetCurrent (co, priv->active);
+}
+
+static guint
+convert_flags (NmtNewtListboxFlags flags)
+{
+ guint newt_flags = NEWT_FLAG_RETURNEXIT;
+
+ if (flags & NMT_NEWT_LISTBOX_SCROLL)
+ newt_flags |= NEWT_FLAG_SCROLL;
+ if (flags & NMT_NEWT_LISTBOX_BORDER)
+ newt_flags |= NEWT_FLAG_BORDER;
+
+ return newt_flags;
+}
+
+static newtComponent
+nmt_newt_listbox_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (component);
+ newtComponent co;
+ int i, active;
+
+ if (priv->active == -1)
+ update_active_internal (NMT_NEWT_LISTBOX (component), 0);
+ active = priv->active;
+
+ co = newtListbox (-1, -1, priv->height, convert_flags (priv->flags));
+ newtComponentAddCallback (co, selection_changed_callback, component);
+
+ for (i = 0; i < priv->entries->len; i++) {
+ newtListboxAppendEntry (co, priv->entries->pdata[i], GUINT_TO_POINTER (i));
+ if (active == -1 && priv->keys->pdata[i] == priv->active_key)
+ active = i;
+ }
+
+ if (active != -1)
+ newtListboxSetCurrent (co, active);
+
+ return co;
+}
+
+static void
+nmt_newt_listbox_activated (NmtNewtWidget *widget)
+{
+ NmtNewtListbox *listbox = NMT_NEWT_LISTBOX (widget);
+ newtComponent co = nmt_newt_component_get_component (NMT_NEWT_COMPONENT (widget));
+
+ nmt_newt_listbox_set_active (listbox, GPOINTER_TO_UINT (newtListboxGetCurrent (co)));
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_listbox_parent_class)->activated (widget);
+}
+
+static void
+nmt_newt_listbox_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtListbox *listbox = NMT_NEWT_LISTBOX (object);
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_HEIGHT:
+ priv->height = g_value_get_int (value);
+ priv->fixed_height = (priv->height != 0);
+ break;
+ case PROP_FLAGS:
+ priv->flags = g_value_get_uint (value);
+ break;
+ case PROP_ACTIVE:
+ nmt_newt_listbox_set_active (listbox, g_value_get_int (value));
+ break;
+ case PROP_ACTIVE_KEY:
+ nmt_newt_listbox_set_active_key (listbox, g_value_get_pointer (value));
+ break;
+ case PROP_SKIP_NULL_KEYS:
+ priv->skip_null_keys = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_listbox_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtListboxPrivate *priv = NMT_NEWT_LISTBOX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_HEIGHT:
+ g_value_set_int (value, priv->height);
+ break;
+ case PROP_FLAGS:
+ g_value_set_uint (value, priv->flags);
+ break;
+ case PROP_ACTIVE:
+ g_value_set_int (value, priv->active);
+ break;
+ case PROP_ACTIVE_KEY:
+ g_value_set_pointer (value, priv->active_key);
+ break;
+ case PROP_SKIP_NULL_KEYS:
+ g_value_set_boolean (value, priv->skip_null_keys);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_listbox_class_init (NmtNewtListboxClass *listbox_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (listbox_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (listbox_class);
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (listbox_class);
+
+ g_type_class_add_private (listbox_class, sizeof (NmtNewtListboxPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_listbox_set_property;
+ object_class->get_property = nmt_newt_listbox_get_property;
+ object_class->finalize = nmt_newt_listbox_finalize;
+
+ widget_class->size_request = nmt_newt_listbox_size_request;
+ widget_class->size_allocate = nmt_newt_listbox_size_allocate;
+ widget_class->activated = nmt_newt_listbox_activated;
+
+ component_class->build_component = nmt_newt_listbox_build_component;
+
+ /* properties */
+
+ /**
+ * NmtNewtListbox:height:
+ *
+ * The listbox's height, or -1 if it has no fixed height.
+ */
+ g_object_class_install_property (object_class, PROP_HEIGHT,
+ g_param_spec_int ("height", "", "",
+ -1, 255, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtListbox:flags:
+ *
+ * The listbox's #NmtNewtListboxFlags.
+ */
+ g_object_class_install_property (object_class, PROP_FLAGS,
+ g_param_spec_uint ("flags", "", "",
+ 0, 0xFFFF, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtListbox:active:
+ *
+ * The currently-selected row.
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE,
+ g_param_spec_int ("active", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtListbox:active-key:
+ *
+ * The key of the currently-selected row.
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE_KEY,
+ g_param_spec_pointer ("active-key", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtListbox:skip-null-keys:
+ *
+ * If %TRUE, rows with %NULL key values will be skipped over when
+ * navigating the list with the arrow keys.
+ */
+ g_object_class_install_property (object_class, PROP_SKIP_NULL_KEYS,
+ g_param_spec_boolean ("skip-null-keys", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-listbox.h b/tui/newt/nmt-newt-listbox.h
new file mode 100644
index 000000000..c18c9f8e6
--- /dev/null
+++ b/tui/newt/nmt-newt-listbox.h
@@ -0,0 +1,71 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_LISTBOX_H
+#define NMT_NEWT_LISTBOX_H
+
+#include "nmt-newt-component.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_LISTBOX (nmt_newt_listbox_get_type ())
+#define NMT_NEWT_LISTBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_LISTBOX, NmtNewtListbox))
+#define NMT_NEWT_LISTBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_LISTBOX, NmtNewtListboxClass))
+#define NMT_IS_NEWT_LISTBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_LISTBOX))
+#define NMT_IS_NEWT_LISTBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_LISTBOX))
+#define NMT_NEWT_LISTBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_LISTBOX, NmtNewtListboxClass))
+
+struct _NmtNewtListbox {
+ NmtNewtComponent parent;
+
+};
+
+typedef struct {
+ NmtNewtComponentClass parent;
+
+} NmtNewtListboxClass;
+
+GType nmt_newt_listbox_get_type (void);
+
+typedef enum {
+ NMT_NEWT_LISTBOX_SCROLL = (1 << 0),
+ NMT_NEWT_LISTBOX_BORDER = (1 << 1)
+} NmtNewtListboxFlags;
+
+NmtNewtWidget *nmt_newt_listbox_new (int height,
+ NmtNewtListboxFlags flags);
+
+void nmt_newt_listbox_set_height (NmtNewtListbox *listbox,
+ int height);
+
+void nmt_newt_listbox_append (NmtNewtListbox *listbox,
+ const char *entry,
+ gpointer key);
+void nmt_newt_listbox_clear (NmtNewtListbox *listbox);
+
+void nmt_newt_listbox_set_active (NmtNewtListbox *listbox,
+ int active);
+void nmt_newt_listbox_set_active_key (NmtNewtListbox *listbox,
+ gpointer active_key);
+
+int nmt_newt_listbox_get_active (NmtNewtListbox *listbox);
+gpointer nmt_newt_listbox_get_active_key (NmtNewtListbox *listbox);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_LISTBOX_H */
diff --git a/tui/newt/nmt-newt-popup.c b/tui/newt/nmt-newt-popup.c
new file mode 100644
index 000000000..e9757eac2
--- /dev/null
+++ b/tui/newt/nmt-newt-popup.c
@@ -0,0 +1,343 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-popup
+ * @short_description: Pop-up menus
+ *
+ * #NmtNewtPopup implements a pop-up menu. When inactive, they appear
+ * the same as #NmtNewtButtons, displaying the label from the
+ * #NmtNewtPopup:active entry. When activated, they pop up a temporary
+ * #NmtNewtForm containing an #NmtNewtListbox to select from.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-newt-popup.h"
+#include "nmt-newt-form.h"
+#include "nmt-newt-hacks.h"
+#include "nmt-newt-listbox.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtPopup, nmt_newt_popup, NMT_TYPE_NEWT_BUTTON)
+
+#define NMT_NEWT_POPUP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_POPUP, NmtNewtPopupPrivate))
+
+typedef struct {
+ GArray *entries;
+ int active;
+} NmtNewtPopupPrivate;
+
+enum {
+ PROP_0,
+ PROP_ACTIVE,
+ PROP_ACTIVE_ID,
+
+ LAST_PROP
+};
+
+/**
+ * NmtNewtPopupEntry:
+ * @label: the user-visible label for the entry
+ * @id: the internal ID of the entry
+ *
+ * A single entry in a pop-up menu.
+ */
+
+/**
+ * nmt_newt_popup_new:
+ * @entries: an array of #NmtNewtPopupEntry, terminated by an
+ * entry with a %NULL label
+ *
+ * Creates a new #NmtNewtPopup with the given entries.
+ *
+ * Returns: a new #NmtNewtPopup
+ */
+NmtNewtWidget *
+nmt_newt_popup_new (NmtNewtPopupEntry *entries)
+{
+ NmtNewtWidget *widget;
+ NmtNewtPopupPrivate *priv;
+ int i;
+
+ widget = g_object_new (NMT_TYPE_NEWT_POPUP, NULL);
+ priv = NMT_NEWT_POPUP_GET_PRIVATE (widget);
+
+ for (i = 0; entries[i].label; i++) {
+ NmtNewtPopupEntry entry;
+
+ entry.label = nmt_newt_locale_from_utf8 (_(entries[i].label));
+ entry.id = g_strdup (entries[i].id);
+ g_array_append_val (priv->entries, entry);
+ }
+
+ return widget;
+}
+
+static void
+popup_entry_clear_func (NmtNewtPopupEntry *entry)
+{
+ g_free (entry->label);
+ g_free (entry->id);
+}
+
+static void
+nmt_newt_popup_init (NmtNewtPopup *popup)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (popup);
+
+ priv->entries = g_array_sized_new (FALSE, FALSE, sizeof (NmtNewtPopupEntry), 10);
+ g_array_set_clear_func (priv->entries, (GDestroyNotify) popup_entry_clear_func);
+}
+
+static void
+nmt_newt_popup_finalize (GObject *object)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (object);
+
+ g_array_unref (priv->entries);
+
+ G_OBJECT_CLASS (nmt_newt_popup_parent_class)->finalize (object);
+}
+
+static newtComponent
+nmt_newt_popup_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (component);
+ NmtNewtPopupEntry *entries = (NmtNewtPopupEntry *)priv->entries->data;
+
+ nmt_newt_button_set_label (NMT_NEWT_BUTTON (component),
+ entries[priv->active].label);
+ return NMT_NEWT_COMPONENT_CLASS (nmt_newt_popup_parent_class)->
+ build_component (component, sensitive);
+}
+
+static void
+nmt_newt_popup_activated (NmtNewtWidget *widget)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (widget);
+ NmtNewtPopupEntry *entries = (NmtNewtPopupEntry *)priv->entries->data;
+ NmtNewtForm *form;
+ NmtNewtWidget *listbox, *ret;
+ int button_x, button_y;
+ int window_x, window_y;
+ int list_w, list_h;
+ int i, active;
+
+ listbox = nmt_newt_listbox_new (priv->entries->len, 0);
+ nmt_newt_widget_set_exit_on_activate (listbox, TRUE);
+ for (i = 0; i < priv->entries->len; i++)
+ nmt_newt_listbox_append (NMT_NEWT_LISTBOX (listbox), entries[i].label, NULL);
+ nmt_newt_listbox_set_active (NMT_NEWT_LISTBOX (listbox), priv->active);
+
+ nmt_newt_widget_size_request (listbox, &list_w, &list_h);
+ newtComponentGetPosition (nmt_newt_component_get_component (NMT_NEWT_COMPONENT (widget)),
+ &button_x, &button_y);
+ window_x = button_x + 4;
+ window_y = button_y + 2 - priv->active;
+
+ form = g_object_new (NMT_TYPE_NEWT_FORM,
+ "x", window_x,
+ "y", window_y,
+ "width", list_w,
+ "height", list_h,
+ "padding", 0,
+ "escape-exits", TRUE,
+ NULL);
+ nmt_newt_form_set_content (form, listbox);
+
+ ret = nmt_newt_form_run_sync (form);
+ if (ret == listbox)
+ active = nmt_newt_listbox_get_active (NMT_NEWT_LISTBOX (listbox));
+ else
+ active = priv->active;
+
+ g_object_unref (form);
+
+ if (active != priv->active) {
+ priv->active = active;
+ g_object_notify (G_OBJECT (widget), "active");
+ g_object_notify (G_OBJECT (widget), "active-id");
+ nmt_newt_widget_needs_rebuild (widget);
+ }
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_popup_parent_class)->activated (widget);
+}
+
+/**
+ * nmt_newt_popup_get_active:
+ * @popup: a #NmtNewtPopup
+ *
+ * Gets the index of the active entry in @popup.
+ *
+ * Returns: the index of the active entry in @popup.
+ */
+int
+nmt_newt_popup_get_active (NmtNewtPopup *popup)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (popup);
+
+ return priv->active;
+}
+
+/**
+ * nmt_newt_popup_set_active:
+ * @popup: a #NmtNewtPopup
+ * @active: the index of the new active entry
+ *
+ * Sets the active entry in @popup.
+ */
+void
+nmt_newt_popup_set_active (NmtNewtPopup *popup,
+ int active)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (popup);
+
+ active = CLAMP (active, 0, priv->entries->len - 1);
+
+ if (active != priv->active) {
+ priv->active = active;
+ g_object_notify (G_OBJECT (popup), "active");
+ g_object_notify (G_OBJECT (popup), "active-id");
+ }
+}
+
+/**
+ * nmt_newt_popup_get_active_id:
+ * @popup: a #NmtNewtPopup
+ *
+ * Gets the textual ID of the active entry in @popup.
+ *
+ * Returns: the ID of the active entry in @popup.
+ */
+const char *
+nmt_newt_popup_get_active_id (NmtNewtPopup *popup)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (popup);
+ NmtNewtPopupEntry *entries = (NmtNewtPopupEntry *)priv->entries->data;
+
+ return entries[priv->active].id;
+}
+
+/**
+ * nmt_newt_popup_set_active_id:
+ * @popup: a #NmtNewtPopup
+ * @active_id: the ID of the new active entry
+ *
+ * Sets the active entry in @popup.
+ */
+void
+nmt_newt_popup_set_active_id (NmtNewtPopup *popup,
+ const char *active_id)
+{
+ NmtNewtPopupPrivate *priv = NMT_NEWT_POPUP_GET_PRIVATE (popup);
+ NmtNewtPopupEntry *entries = (NmtNewtPopupEntry *)priv->entries->data;
+ int i;
+
+ for (i = 0; i < priv->entries->len; i++) {
+ if (!g_strcmp0 (active_id, entries[i].id)) {
+ nmt_newt_popup_set_active (popup, i);
+ return;
+ }
+ }
+}
+
+static void
+nmt_newt_popup_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtPopup *popup = NMT_NEWT_POPUP (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ nmt_newt_popup_set_active (popup, g_value_get_uint (value));
+ break;
+ case PROP_ACTIVE_ID:
+ nmt_newt_popup_set_active_id (popup, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_popup_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtPopup *popup = NMT_NEWT_POPUP (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ g_value_set_uint (value, nmt_newt_popup_get_active (popup));
+ break;
+ case PROP_ACTIVE_ID:
+ g_value_set_string (value, nmt_newt_popup_get_active_id (popup));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_popup_class_init (NmtNewtPopupClass *popup_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (popup_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (popup_class);
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (popup_class);
+
+ g_type_class_add_private (popup_class, sizeof (NmtNewtPopupPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_popup_set_property;
+ object_class->get_property = nmt_newt_popup_get_property;
+ object_class->finalize = nmt_newt_popup_finalize;
+
+ widget_class->activated = nmt_newt_popup_activated;
+
+ component_class->build_component = nmt_newt_popup_build_component;
+
+ /**
+ * NmtNewtPopup:active:
+ *
+ * The index of the currently-active entry.
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE,
+ g_param_spec_uint ("active", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtPopup:active-id:
+ *
+ * The textual ID of the currently-active entry.
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE_ID,
+ g_param_spec_string ("active-id", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-popup.h b/tui/newt/nmt-newt-popup.h
new file mode 100644
index 000000000..643ea2d8c
--- /dev/null
+++ b/tui/newt/nmt-newt-popup.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_POPUP_H
+#define NMT_NEWT_POPUP_H
+
+#include "nmt-newt-button.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_POPUP (nmt_newt_popup_get_type ())
+#define NMT_NEWT_POPUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_POPUP, NmtNewtPopup))
+#define NMT_NEWT_POPUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_POPUP, NmtNewtPopupClass))
+#define NMT_IS_NEWT_POPUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_POPUP))
+#define NMT_IS_NEWT_POPUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_POPUP))
+#define NMT_NEWT_POPUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_POPUP, NmtNewtPopupClass))
+
+struct _NmtNewtPopup {
+ NmtNewtButton parent;
+
+};
+
+typedef struct {
+ NmtNewtButtonClass parent;
+
+} NmtNewtPopupClass;
+
+GType nmt_newt_popup_get_type (void);
+
+typedef struct {
+ char *label;
+ char *id;
+} NmtNewtPopupEntry;
+
+NmtNewtWidget *nmt_newt_popup_new (NmtNewtPopupEntry *entries);
+
+int nmt_newt_popup_get_active (NmtNewtPopup *popup);
+void nmt_newt_popup_set_active (NmtNewtPopup *popup,
+ int active);
+
+const char *nmt_newt_popup_get_active_id (NmtNewtPopup *popup);
+void nmt_newt_popup_set_active_id (NmtNewtPopup *popup,
+ const char *active_id);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_POPUP_H */
diff --git a/tui/newt/nmt-newt-section.c b/tui/newt/nmt-newt-section.c
new file mode 100644
index 000000000..094b41b73
--- /dev/null
+++ b/tui/newt/nmt-newt-section.c
@@ -0,0 +1,408 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-section
+ * @short_description: A collapsible section
+ *
+ * #NmtNewtSection is a container with two children; the header and
+ * the body. The header is always visible, but the body is only
+ * visible when the container is #NmtNewtSection:open.
+ *
+ * Note that there is no default way to open and close an
+ * #NmtNewtSection. You need to implement this yourself. (Eg, by
+ * binding the #NmtToggleButton:active property of an #NmtToggleButton
+ * in the section's header to the section's #NmtNewtSection:open
+ * property.)
+ *
+ * In addition to the header and body, the #NmtNewtSection also draws
+ * a border along the left side, indicating the extent of the section.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-section.h"
+#include "nmt-newt-grid.h"
+#include "nmt-newt-label.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtSection, nmt_newt_section, NMT_TYPE_NEWT_CONTAINER)
+
+#define NMT_NEWT_SECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_SECTION, NmtNewtSectionPrivate))
+
+typedef struct {
+ NmtNewtWidget *header;
+ int hheight_req, hwidth_req;
+
+ NmtNewtWidget *body;
+ int bheight_req, bwidth_req;
+
+ NmtNewtWidget *border_grid;
+ NmtNewtWidget *border_open_label;
+ NmtNewtWidget *border_closed_label;
+ NmtNewtWidget *border_end_label;
+ GPtrArray *border_line_labels;
+
+ gboolean open;
+} NmtNewtSectionPrivate;
+
+static char *closed_glyph, *open_glyph, *line_glyph, *end_glyph;
+
+enum {
+ PROP_0,
+
+ PROP_OPEN,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_newt_section_new:
+ *
+ * Creates a new #NmtNewtSection
+ *
+ * Returns: a new #NmtNewtSection
+ */
+NmtNewtWidget *
+nmt_newt_section_new (void)
+{
+ return g_object_new (NMT_TYPE_NEWT_SECTION,
+ NULL);
+}
+
+static void
+nmt_newt_section_init (NmtNewtSection *section)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (section);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_newt_section_parent_class);
+
+ priv->border_grid = nmt_newt_grid_new ();
+ parent_class->add (NMT_NEWT_CONTAINER (section), priv->border_grid);
+
+ priv->border_open_label = nmt_newt_label_new (open_glyph);
+ nmt_newt_widget_set_visible (priv->border_open_label, FALSE);
+ nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), priv->border_open_label, 0, 0);
+
+ priv->border_closed_label = nmt_newt_label_new (closed_glyph);
+ nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), priv->border_closed_label, 0, 0);
+
+ priv->border_end_label = nmt_newt_label_new (end_glyph);
+ nmt_newt_widget_set_visible (priv->border_open_label, FALSE);
+ nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), priv->border_end_label, 0, 1);
+
+ priv->border_line_labels = g_ptr_array_new ();
+}
+
+static void
+nmt_newt_section_finalize (GObject *object)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (object);
+
+ g_ptr_array_unref (priv->border_line_labels);
+
+ G_OBJECT_CLASS (nmt_newt_section_parent_class)->finalize (object);
+}
+
+/**
+ * nmt_newt_section_set_header:
+ * @section: an #NmtNewtSection
+ * @header: the header widget
+ *
+ * Sets @section's header widget.
+ */
+void
+nmt_newt_section_set_header (NmtNewtSection *section,
+ NmtNewtWidget *header)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (section);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_newt_section_parent_class);
+ NmtNewtContainer *container = NMT_NEWT_CONTAINER (section);
+
+ if (priv->header)
+ parent_class->remove (container, priv->header);
+ priv->header = header;
+ parent_class->add (container, header);
+}
+
+/**
+ * nmt_newt_section_get_header:
+ * @section: an #NmtNewtSection
+ *
+ * Gets @section's header widget.
+ *
+ * Returns: @section's header widget.
+ */
+NmtNewtWidget *
+nmt_newt_section_get_header (NmtNewtSection *section)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (section);
+
+ return priv->header;
+}
+
+/**
+ * nmt_newt_section_set_body:
+ * @section: an #NmtNewtSection
+ * @body: the body widget
+ *
+ * Sets @section's body widget.
+ */
+void
+nmt_newt_section_set_body (NmtNewtSection *section,
+ NmtNewtWidget *body)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (section);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_newt_section_parent_class);
+ NmtNewtContainer *container = NMT_NEWT_CONTAINER (section);
+
+ if (priv->body)
+ parent_class->remove (container, priv->body);
+ priv->body = body;
+ parent_class->add (container, body);
+}
+
+/**
+ * nmt_newt_section_get_body:
+ * @section: an #NmtNewtSection
+ *
+ * Gets @section's body widget.
+ *
+ * Returns: @section's body widget.
+ */
+NmtNewtWidget *
+nmt_newt_section_get_body (NmtNewtSection *section)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (section);
+
+ return priv->body;
+}
+
+static void
+nmt_newt_section_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtSection *section = NMT_NEWT_SECTION (container);
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (section);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_newt_section_parent_class);
+
+ if (widget == priv->header)
+ priv->header = NULL;
+ else if (widget == priv->body)
+ priv->body = NULL;
+ else if (widget == priv->border_grid)
+ priv->border_grid = NULL;
+
+ parent_class->remove (container, widget);
+}
+
+static newtComponent *
+nmt_newt_section_get_components (NmtNewtWidget *widget)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (widget);
+ newtComponent *child_cos;
+ GPtrArray *cos;
+ int i;
+
+ g_return_val_if_fail (priv->header != NULL && priv->body != NULL, NULL);
+
+ cos = g_ptr_array_new ();
+
+ child_cos = nmt_newt_widget_get_components (priv->border_grid);
+ for (i = 0; child_cos[i]; i++)
+ g_ptr_array_add (cos, child_cos[i]);
+ g_free (child_cos);
+
+ child_cos = nmt_newt_widget_get_components (priv->header);
+ for (i = 0; child_cos[i]; i++)
+ g_ptr_array_add (cos, child_cos[i]);
+ g_free (child_cos);
+
+ if (priv->open) {
+ child_cos = nmt_newt_widget_get_components (priv->body);
+ for (i = 0; child_cos[i]; i++)
+ g_ptr_array_add (cos, child_cos[i]);
+ g_free (child_cos);
+ }
+
+ g_ptr_array_add (cos, NULL);
+ return (newtComponent *) g_ptr_array_free (cos, FALSE);
+}
+
+static void
+nmt_newt_section_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (widget);
+ int border_width, border_height;
+
+ g_return_if_fail (priv->header != NULL && priv->body != NULL);
+
+ nmt_newt_widget_size_request (priv->border_grid, &border_width, &border_height);
+ nmt_newt_widget_size_request (priv->header, &priv->hwidth_req, &priv->hheight_req);
+ nmt_newt_widget_size_request (priv->body, &priv->bwidth_req, &priv->bheight_req);
+
+ *width = MAX (priv->hwidth_req, priv->bwidth_req) + 2;
+ *height = priv->open ? priv->hheight_req + priv->bheight_req + 1 : priv->hheight_req;
+}
+
+static void
+adjust_border_for_allocation (NmtNewtSectionPrivate *priv,
+ int height)
+{
+ int i;
+
+ /* We have to use a series of one-line labels rather than a multi-line
+ * textbox, because newt will hide any component that's partially offscreen,
+ * but we want the on-screen portion of the border to show even if part of
+ * it is offscreen.
+ */
+
+ if (height == 1) {
+ nmt_newt_widget_set_visible (priv->border_closed_label, TRUE);
+ nmt_newt_widget_set_visible (priv->border_open_label, FALSE);
+ for (i = 0; i < priv->border_line_labels->len; i++)
+ nmt_newt_widget_set_visible (priv->border_line_labels->pdata[i], FALSE);
+ nmt_newt_widget_set_visible (priv->border_end_label, FALSE);
+ } else {
+ nmt_newt_widget_set_visible (priv->border_closed_label, FALSE);
+ nmt_newt_widget_set_visible (priv->border_open_label, TRUE);
+ for (i = 0; i < height - 2; i++) {
+ if (i >= priv->border_line_labels->len) {
+ NmtNewtWidget *label;
+
+ label = nmt_newt_label_new (line_glyph);
+ g_ptr_array_add (priv->border_line_labels, label);
+ nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), label, 0, i + 1);
+ } else
+ nmt_newt_widget_set_visible (priv->border_line_labels->pdata[i], TRUE);
+ }
+ nmt_newt_widget_set_visible (priv->border_end_label, TRUE);
+ nmt_newt_grid_move (NMT_NEWT_GRID (priv->border_grid), priv->border_end_label, 0, height - 1);
+ }
+}
+
+static void
+nmt_newt_section_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (widget);
+
+ adjust_border_for_allocation (priv, height);
+
+ nmt_newt_widget_size_allocate (priv->border_grid, x, y, 1, height);
+ nmt_newt_widget_size_allocate (priv->header, x + 2, y, width, priv->hheight_req);
+ if (priv->open) {
+ nmt_newt_widget_size_allocate (priv->body, x + 2, y + priv->hheight_req,
+ width, height - priv->hheight_req);
+ }
+}
+
+static void
+nmt_newt_section_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_OPEN:
+ priv->open = g_value_get_boolean (value);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (object));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_section_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_OPEN:
+ g_value_set_boolean (value, priv->open);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_section_class_init (NmtNewtSectionClass *section_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (section_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (section_class);
+ NmtNewtContainerClass *container_class = NMT_NEWT_CONTAINER_CLASS (section_class);
+
+ g_type_class_add_private (section_class, sizeof (NmtNewtSectionPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_section_set_property;
+ object_class->get_property = nmt_newt_section_get_property;
+ object_class->finalize = nmt_newt_section_finalize;
+
+ widget_class->get_components = nmt_newt_section_get_components;
+ widget_class->size_request = nmt_newt_section_size_request;
+ widget_class->size_allocate = nmt_newt_section_size_allocate;
+
+ container_class->remove = nmt_newt_section_remove;
+
+ /* properties */
+
+ /**
+ * NmtNewtSection:open:
+ *
+ * %TRUE if the section is open (ie, its body is visible), %FALSE
+ * if not.
+ */
+ g_object_class_install_property (object_class, PROP_OPEN,
+ g_param_spec_boolean ("open", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* globals */
+ closed_glyph = nmt_newt_locale_from_utf8 ("\342\225\220"); /* â• */
+ open_glyph = nmt_newt_locale_from_utf8 ("\342\225\244"); /* ╤ */
+ line_glyph = nmt_newt_locale_from_utf8 ("\342\224\202"); /* │ */
+ end_glyph = nmt_newt_locale_from_utf8 ("\342\224\224"); /* â”” */
+ if (!closed_glyph || !open_glyph || !line_glyph || !end_glyph) {
+ g_clear_pointer (&closed_glyph, g_free);
+ g_clear_pointer (&open_glyph, g_free);
+ g_clear_pointer (&line_glyph, g_free);
+ g_clear_pointer (&end_glyph, g_free);
+
+ closed_glyph = g_strdup ("-");
+ open_glyph = g_strdup ("+");
+ line_glyph = g_strdup ("|");
+ end_glyph = g_strdup ("\\");
+ }
+}
diff --git a/tui/newt/nmt-newt-section.h b/tui/newt/nmt-newt-section.h
new file mode 100644
index 000000000..a943ba200
--- /dev/null
+++ b/tui/newt/nmt-newt-section.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_SECTION_H
+#define NMT_NEWT_SECTION_H
+
+#include "nmt-newt-container.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_SECTION (nmt_newt_section_get_type ())
+#define NMT_NEWT_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_SECTION, NmtNewtSection))
+#define NMT_NEWT_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_SECTION, NmtNewtSectionClass))
+#define NMT_IS_NEWT_SECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_SECTION))
+#define NMT_IS_NEWT_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_SECTION))
+#define NMT_NEWT_SECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_SECTION, NmtNewtSectionClass))
+
+struct _NmtNewtSection {
+ NmtNewtContainer parent;
+
+};
+
+typedef struct {
+ NmtNewtContainerClass parent;
+
+} NmtNewtSectionClass;
+
+GType nmt_newt_section_get_type (void);
+
+NmtNewtWidget *nmt_newt_section_new (void);
+
+void nmt_newt_section_set_header (NmtNewtSection *section,
+ NmtNewtWidget *header);
+NmtNewtWidget *nmt_newt_section_get_header (NmtNewtSection *section);
+
+void nmt_newt_section_set_body (NmtNewtSection *section,
+ NmtNewtWidget *body);
+NmtNewtWidget *nmt_newt_section_get_body (NmtNewtSection *section);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_SECTION_H */
diff --git a/tui/newt/nmt-newt-separator.c b/tui/newt/nmt-newt-separator.c
new file mode 100644
index 000000000..07deb1af9
--- /dev/null
+++ b/tui/newt/nmt-newt-separator.c
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-separator
+ * @short_description: Separator
+ *
+ * #NmtNewtSeparator is just a blank label, which is used in a few places
+ * where a widget is needed but none is desired, or to add blank space
+ * between widgets in containers that don't implement padding.
+ */
+
+#include "config.h"
+
+#include "nmt-newt-separator.h"
+
+G_DEFINE_TYPE (NmtNewtSeparator, nmt_newt_separator, NMT_TYPE_NEWT_COMPONENT)
+
+/**
+ * nmt_newt_separator_new:
+ *
+ * Creates a new #NmtNewtSeparator.
+ *
+ * Returns: a new #NmtNewtSeparator
+ */
+NmtNewtWidget *
+nmt_newt_separator_new (void)
+{
+ return g_object_new (NMT_TYPE_NEWT_SEPARATOR, NULL);
+}
+
+static void
+nmt_newt_separator_init (NmtNewtSeparator *separator)
+{
+}
+
+static newtComponent
+nmt_newt_separator_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ return newtLabel (-1, -1, " ");
+}
+
+static void
+nmt_newt_separator_class_init (NmtNewtSeparatorClass *separator_class)
+{
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (separator_class);
+
+ /* virtual methods */
+ component_class->build_component = nmt_newt_separator_build_component;
+}
diff --git a/tui/newt/nmt-newt-separator.h b/tui/newt/nmt-newt-separator.h
new file mode 100644
index 000000000..3f4183d58
--- /dev/null
+++ b/tui/newt/nmt-newt-separator.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_SEPARATOR_H
+#define NMT_NEWT_SEPARATOR_H
+
+#include "nmt-newt-component.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_SEPARATOR (nmt_newt_separator_get_type ())
+#define NMT_NEWT_SEPARATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_SEPARATOR, NmtNewtSeparator))
+#define NMT_NEWT_SEPARATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_SEPARATOR, NmtNewtSeparatorClass))
+#define NMT_IS_NEWT_SEPARATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_SEPARATOR))
+#define NMT_IS_NEWT_SEPARATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_SEPARATOR))
+#define NMT_NEWT_SEPARATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_SEPARATOR, NmtNewtSeparatorClass))
+
+struct _NmtNewtSeparator {
+ NmtNewtComponent parent;
+
+};
+
+typedef struct {
+ NmtNewtComponentClass parent;
+
+} NmtNewtSeparatorClass;
+
+GType nmt_newt_separator_get_type (void);
+
+NmtNewtWidget *nmt_newt_separator_new (void);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_SEPARATOR_H */
diff --git a/tui/newt/nmt-newt-stack.c b/tui/newt/nmt-newt-stack.c
new file mode 100644
index 000000000..1b31d58fe
--- /dev/null
+++ b/tui/newt/nmt-newt-stack.c
@@ -0,0 +1,366 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-stack
+ * @short_description: A stack of alternative widgets
+ *
+ * #NmtNewtStack implements a stack of widgets, only one of which is
+ * visible at any time.
+ *
+ * The height and width of the widget is determined only by its
+ * visible child. Likewise, the widget's #NmtNewtWidget:valid is
+ * determined only by the validity of its visible child, not its other
+ * children.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-stack.h"
+
+G_DEFINE_TYPE (NmtNewtStack, nmt_newt_stack, NMT_TYPE_NEWT_CONTAINER)
+
+#define NMT_NEWT_STACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_STACK, NmtNewtStackPrivate))
+
+typedef struct {
+ GPtrArray *children;
+ GPtrArray *ids;
+
+ guint active;
+} NmtNewtStackPrivate;
+
+enum {
+ PROP_0,
+ PROP_ACTIVE,
+ PROP_ACTIVE_ID,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_newt_stack_new:
+ *
+ * Creates a new #NmtNewtStack
+ *
+ * Returns: a new #NmtNewtStack
+ */
+NmtNewtWidget *
+nmt_newt_stack_new (void)
+{
+ return g_object_new (NMT_TYPE_NEWT_STACK, NULL);
+}
+
+static void
+nmt_newt_stack_init (NmtNewtStack *stack)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+
+ priv->children = g_ptr_array_new ();
+ priv->ids = g_ptr_array_new_with_free_func (g_free);
+}
+
+static void
+nmt_newt_stack_finalize (GObject *object)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (object);
+
+ g_ptr_array_unref (priv->children);
+ g_ptr_array_unref (priv->ids);
+
+ G_OBJECT_CLASS (nmt_newt_stack_parent_class)->finalize (object);
+}
+
+static newtComponent *
+nmt_newt_stack_get_components (NmtNewtWidget *widget)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (widget);
+
+ if (priv->active > priv->children->len)
+ return NULL;
+
+ return nmt_newt_widget_get_components (priv->children->pdata[priv->active]);
+}
+
+static void
+nmt_newt_stack_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NmtNewtStack *stack = NMT_NEWT_STACK (widget);
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+ int i, child_width, child_height;
+
+ if (priv->active > priv->children->len) {
+ *width = *height = 0;
+ return;
+ }
+
+ /* We size-request all pages so that embedded NmtPageGrids will
+ * participate in their size-grouping (so that switching pages
+ * won't result in the column widths changing).
+ */
+ for (i = 0; i < priv->children->len; i++) {
+ nmt_newt_widget_size_request (priv->children->pdata[i], &child_width, &child_height);
+ if (i == priv->active) {
+ *width = child_width;
+ *height = child_height;
+ }
+ }
+}
+
+static void
+nmt_newt_stack_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (widget);
+
+ if (priv->active > priv->children->len)
+ return;
+
+ nmt_newt_widget_size_allocate (priv->children->pdata[priv->active], x, y, width, height);
+}
+
+/**
+ * nmt_newt_stack_add:
+ * @stack: an #NmtNewtStack
+ * @id: the ID for the new page
+ * @widget: the widget to add
+ *
+ * Adds @widget to @stack with the given @id.
+ */
+void
+nmt_newt_stack_add (NmtNewtStack *stack,
+ const char *id,
+ NmtNewtWidget *widget)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+
+ g_ptr_array_add (priv->children, widget);
+ g_ptr_array_add (priv->ids, g_strdup (id));
+
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_stack_parent_class)->add (NMT_NEWT_CONTAINER (stack), widget);
+}
+
+static void
+nmt_newt_stack_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtStack *stack = NMT_NEWT_STACK (container);
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+ int i;
+
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_stack_parent_class)->remove (container, widget);
+
+ for (i = 0; i < priv->children->len; i++) {
+ if (priv->children->pdata[i] == widget) {
+ g_ptr_array_remove_index (priv->children, i);
+ g_ptr_array_remove_index (priv->ids, i);
+ return;
+ }
+ }
+}
+
+static void
+nmt_newt_stack_child_validity_changed (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (container);
+
+ if (priv->active > priv->children->len)
+ return;
+
+ if (priv->children->pdata[priv->active] == (gpointer) widget) {
+ NMT_NEWT_CONTAINER_CLASS (nmt_newt_stack_parent_class)->
+ child_validity_changed (container, widget);
+ }
+}
+
+/**
+ * nmt_newt_stack_set_active:
+ * @stack: an #NmtNewtStack
+ * @active: the index of the new active page
+ *
+ * Sets the active page on @stack to @active.
+ */
+void
+nmt_newt_stack_set_active (NmtNewtStack *stack,
+ guint active)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+
+ if (priv->active == active)
+ return;
+
+ priv->active = active;
+ g_object_notify (G_OBJECT (stack), "active");
+ g_object_notify (G_OBJECT (stack), "active-id");
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (stack));
+}
+
+/**
+ * nmt_newt_stack_get_active:
+ * @stack: an #NmtNewtStack
+ *
+ * Gets the index of the active page on @stack
+ *
+ * Returns: the index of the active page on @stack
+ */
+guint
+nmt_newt_stack_get_active (NmtNewtStack *stack)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+
+ return priv->active;
+}
+
+/**
+ * nmt_newt_stack_set_active_id:
+ * @stack: an #NmtNewtStack
+ * @active_id: the ID of the new active page
+ *
+ * Sets the active page on @stack to @active_id.
+ */
+void
+nmt_newt_stack_set_active_id (NmtNewtStack *stack,
+ const char *id)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+ int i;
+
+ if (!g_strcmp0 (priv->ids->pdata[priv->active], id))
+ return;
+
+ for (i = 0; i < priv->ids->len; i++) {
+ if (!g_strcmp0 (priv->ids->pdata[i], id)) {
+ priv->active = i;
+ g_object_notify (G_OBJECT (stack), "active");
+ g_object_notify (G_OBJECT (stack), "active-id");
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (stack));
+ return;
+ }
+ }
+}
+
+/**
+ * nmt_newt_stack_get_active_id:
+ * @stack: an #NmtNewtStack
+ *
+ * Gets the ID of the active page on @stack
+ *
+ * Returns: the ID of the active page on @stack
+ */
+const char *
+nmt_newt_stack_get_active_id (NmtNewtStack *stack)
+{
+ NmtNewtStackPrivate *priv = NMT_NEWT_STACK_GET_PRIVATE (stack);
+
+ if (priv->active > priv->children->len)
+ return NULL;
+
+ return priv->ids->pdata[priv->active];
+}
+
+static void
+nmt_newt_stack_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtStack *stack = NMT_NEWT_STACK (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ nmt_newt_stack_set_active (stack, g_value_get_uint (value));
+ break;
+ case PROP_ACTIVE_ID:
+ nmt_newt_stack_set_active_id (stack, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_stack_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtStack *stack = NMT_NEWT_STACK (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ g_value_set_uint (value, nmt_newt_stack_get_active (stack));
+ break;
+ case PROP_ACTIVE_ID:
+ g_value_set_string (value, nmt_newt_stack_get_active_id (stack));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_stack_class_init (NmtNewtStackClass *stack_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (stack_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (stack_class);
+ NmtNewtContainerClass *container_class = NMT_NEWT_CONTAINER_CLASS (stack_class);
+
+ g_type_class_add_private (stack_class, sizeof (NmtNewtStackPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_stack_set_property;
+ object_class->get_property = nmt_newt_stack_get_property;
+ object_class->finalize = nmt_newt_stack_finalize;
+
+ widget_class->get_components = nmt_newt_stack_get_components;
+ widget_class->size_request = nmt_newt_stack_size_request;
+ widget_class->size_allocate = nmt_newt_stack_size_allocate;
+
+ container_class->remove = nmt_newt_stack_remove;
+ container_class->child_validity_changed = nmt_newt_stack_child_validity_changed;
+
+ /**
+ * NmtNewtStack:active:
+ *
+ * The index of the active page
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE,
+ g_param_spec_uint ("active", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtStack:active-id:
+ *
+ * The ID of the active page
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE_ID,
+ g_param_spec_string ("active-id", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-stack.h b/tui/newt/nmt-newt-stack.h
new file mode 100644
index 000000000..09afe4baf
--- /dev/null
+++ b/tui/newt/nmt-newt-stack.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_STACK_H
+#define NMT_NEWT_STACK_H
+
+#include "nmt-newt-container.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_STACK (nmt_newt_stack_get_type ())
+#define NMT_NEWT_STACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_STACK, NmtNewtStack))
+#define NMT_NEWT_STACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_STACK, NmtNewtStackClass))
+#define NMT_IS_NEWT_STACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_STACK))
+#define NMT_IS_NEWT_STACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_STACK))
+#define NMT_NEWT_STACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_STACK, NmtNewtStackClass))
+
+struct _NmtNewtStack {
+ NmtNewtContainer parent;
+
+};
+
+typedef struct {
+ NmtNewtContainerClass parent;
+
+} NmtNewtStackClass;
+
+GType nmt_newt_stack_get_type (void);
+
+NmtNewtWidget *nmt_newt_stack_new (void);
+
+void nmt_newt_stack_add (NmtNewtStack *stack,
+ const char *id,
+ NmtNewtWidget *widget);
+
+void nmt_newt_stack_set_active (NmtNewtStack *stack,
+ guint active);
+guint nmt_newt_stack_get_active (NmtNewtStack *stack);
+
+void nmt_newt_stack_set_active_id (NmtNewtStack *stack,
+ const char *id);
+const char * nmt_newt_stack_get_active_id (NmtNewtStack *stack);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_STACK_H */
diff --git a/tui/newt/nmt-newt-textbox.c b/tui/newt/nmt-newt-textbox.c
new file mode 100644
index 000000000..67b8b247d
--- /dev/null
+++ b/tui/newt/nmt-newt-textbox.c
@@ -0,0 +1,292 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-textbox
+ * @short_description: Multi-line text box
+ *
+ * #NmtNewtTextbox implements a multi-line text, optionally with
+ * word-wrapping.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-newt-textbox.h"
+#include "nmt-newt-utils.h"
+
+G_DEFINE_TYPE (NmtNewtTextbox, nmt_newt_textbox, NMT_TYPE_NEWT_COMPONENT)
+
+#define NMT_NEWT_TEXTBOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_TEXTBOX, NmtNewtTextboxPrivate))
+
+typedef struct {
+ int wrap_width;
+ NmtNewtTextboxFlags flags;
+
+ char *text;
+ int width, height;
+} NmtNewtTextboxPrivate;
+
+enum {
+ PROP_0,
+ PROP_TEXT,
+ PROP_FLAGS,
+ PROP_WRAP_WIDTH,
+
+ LAST_PROP
+};
+
+/**
+ * NmtNewtTextboxFlags:
+ * @NMT_NEWT_TEXTBOX_SCROLLABLE: the textbox should be scollable.
+ * @NMT_NEWT_TEXTBOX_SET_BACKGROUND: the textbox should have a
+ * white background
+ *
+ * Flags for an #NmtNewtTextbox
+ */
+
+/**
+ * nmt_newt_textbox_new:
+ * @flags: the textbox's flags
+ * @wrap_width: width in characters at which to word-wrap, or
+ * 0 to not wrap.
+ *
+ * Creates a new #NmtNewtTextbox.
+ *
+ * Returns: a new #NmtNewtTextbox
+ */
+NmtNewtWidget *
+nmt_newt_textbox_new (NmtNewtTextboxFlags flags,
+ int wrap_width)
+{
+ return g_object_new (NMT_TYPE_NEWT_TEXTBOX,
+ "flags", flags,
+ "wrap-width", wrap_width,
+ NULL);
+}
+
+/**
+ * nmt_newt_textbox_get_text:
+ * @textbox: an #NmtNewtTextbox
+ *
+ * Gets @textbox's text
+ *
+ * Returns: @textbox's text
+ */
+void
+nmt_newt_textbox_set_text (NmtNewtTextbox *textbox,
+ const char *text)
+{
+ NmtNewtTextboxPrivate *priv = NMT_NEWT_TEXTBOX_GET_PRIVATE (textbox);
+ char **lines;
+ int i, width;
+
+ if (!text)
+ text = "";
+ if (!strcmp (priv->text, text))
+ return;
+
+ g_free (priv->text);
+ priv->text = g_strdup (text);
+
+ priv->width = priv->height = 0;
+ lines = g_strsplit (priv->text, "\n", -1);
+ for (i = 0; lines[i]; i++) {
+ width = nmt_newt_text_width (lines[i]);
+ if (width > priv->width)
+ priv->width = width;
+ }
+ g_free (lines);
+ priv->height = MIN (i, 1);
+
+ g_object_notify (G_OBJECT (textbox), "text");
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (textbox));
+}
+
+/**
+ * nmt_newt_textbox_get_text:
+ * @textbox: an #NmtNewtTextbox
+ *
+ * Gets @textbox's text
+ *
+ * Returns: @textbox's text
+ */
+const char *
+nmt_newt_textbox_get_text (NmtNewtTextbox *textbox)
+{
+ NmtNewtTextboxPrivate *priv = NMT_NEWT_TEXTBOX_GET_PRIVATE (textbox);
+
+ return priv->text;
+}
+
+static void
+nmt_newt_textbox_init (NmtNewtTextbox *textbox)
+{
+ NmtNewtTextboxPrivate *priv = NMT_NEWT_TEXTBOX_GET_PRIVATE (textbox);
+
+ priv->text = g_strdup ("");
+}
+
+static void
+nmt_newt_textbox_finalize (GObject *object)
+{
+ NmtNewtTextboxPrivate *priv = NMT_NEWT_TEXTBOX_GET_PRIVATE (object);
+
+ g_free (priv->text);
+
+ G_OBJECT_CLASS (nmt_newt_textbox_parent_class)->finalize (object);
+}
+
+static guint
+convert_flags (NmtNewtTextboxFlags flags)
+{
+ guint newt_flags = 0;
+
+ if (flags & NMT_NEWT_TEXTBOX_SCROLLABLE)
+ newt_flags |= NEWT_FLAG_SCROLL;
+
+ return newt_flags;
+}
+
+static newtComponent
+nmt_newt_textbox_build_component (NmtNewtComponent *component,
+ gboolean sensitive)
+{
+ NmtNewtTextboxPrivate *priv = NMT_NEWT_TEXTBOX_GET_PRIVATE (component);
+ newtComponent co;
+ const char *text;
+ char *text_lc;
+
+ text = priv->text;
+ if (!*text)
+ text = "\n";
+
+ text_lc = nmt_newt_locale_from_utf8 (text);
+ if (priv->wrap_width > 0) {
+ co = newtTextboxReflowed (-1, -1, text_lc, priv->wrap_width, 0, 0, 0);
+ } else {
+ co = newtTextbox (-1, -1, priv->width, priv->height, convert_flags (priv->flags));
+ newtTextboxSetText (co, text_lc);
+ }
+ g_free (text_lc);
+
+ if (priv->flags & NMT_NEWT_TEXTBOX_SET_BACKGROUND)
+ newtTextboxSetColors (co, NMT_NEWT_COLORSET_TEXTBOX_WITH_BACKGROUND, NEWT_COLORSET_ACTTEXTBOX);
+
+ return co;
+}
+
+static void
+nmt_newt_textbox_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtTextbox *textbox = NMT_NEWT_TEXTBOX (object);
+ NmtNewtTextboxPrivate *priv = NMT_NEWT_TEXTBOX_GET_PRIVATE (textbox);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ nmt_newt_textbox_set_text (textbox, g_value_get_string (value));
+ break;
+ case PROP_FLAGS:
+ priv->flags = g_value_get_uint (value);
+ break;
+ case PROP_WRAP_WIDTH:
+ priv->wrap_width = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_textbox_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtTextboxPrivate *priv = NMT_NEWT_TEXTBOX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ g_value_set_string (value, priv->text);
+ break;
+ case PROP_FLAGS:
+ g_value_set_uint (value, priv->flags);
+ break;
+ case PROP_WRAP_WIDTH:
+ g_value_set_int (value, priv->wrap_width);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_textbox_class_init (NmtNewtTextboxClass *textbox_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (textbox_class);
+ NmtNewtComponentClass *component_class = NMT_NEWT_COMPONENT_CLASS (textbox_class);
+
+ g_type_class_add_private (textbox_class, sizeof (NmtNewtTextboxPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_textbox_set_property;
+ object_class->get_property = nmt_newt_textbox_get_property;
+ object_class->finalize = nmt_newt_textbox_finalize;
+
+ component_class->build_component = nmt_newt_textbox_build_component;
+
+ /**
+ * NmtNewtTextbox:text:
+ *
+ * The textbox's text
+ */
+ g_object_class_install_property (object_class, PROP_TEXT,
+ g_param_spec_string ("text", "", "",
+ "",
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtTextbox:flags:
+ *
+ * The textbox's flags
+ */
+ g_object_class_install_property (object_class, PROP_FLAGS,
+ g_param_spec_uint ("flags", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtTextbox:wrap-width:
+ *
+ * The width in characters at which the textbox's text
+ * will wrap, or 0 if it does not wrap.
+ */
+ g_object_class_install_property (object_class, PROP_WRAP_WIDTH,
+ g_param_spec_int ("wrap-width", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-textbox.h b/tui/newt/nmt-newt-textbox.h
new file mode 100644
index 000000000..b3743aea0
--- /dev/null
+++ b/tui/newt/nmt-newt-textbox.h
@@ -0,0 +1,59 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_TEXTBOX_H
+#define NMT_NEWT_TEXTBOX_H
+
+#include "nmt-newt-component.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_TEXTBOX (nmt_newt_textbox_get_type ())
+#define NMT_NEWT_TEXTBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_TEXTBOX, NmtNewtTextbox))
+#define NMT_NEWT_TEXTBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_TEXTBOX, NmtNewtTextboxClass))
+#define NMT_IS_NEWT_TEXTBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_TEXTBOX))
+#define NMT_IS_NEWT_TEXTBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_TEXTBOX))
+#define NMT_NEWT_TEXTBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_TEXTBOX, NmtNewtTextboxClass))
+
+struct _NmtNewtTextbox {
+ NmtNewtComponent parent;
+
+};
+
+typedef struct {
+ NmtNewtComponentClass parent;
+
+} NmtNewtTextboxClass;
+
+GType nmt_newt_textbox_get_type (void);
+
+typedef enum {
+ NMT_NEWT_TEXTBOX_SCROLLABLE = (1 << 0),
+ NMT_NEWT_TEXTBOX_SET_BACKGROUND = (1 << 1)
+} NmtNewtTextboxFlags;
+
+NmtNewtWidget *nmt_newt_textbox_new (NmtNewtTextboxFlags flags,
+ int wrap_width);
+
+void nmt_newt_textbox_set_text (NmtNewtTextbox *textbox,
+ const char *text);
+const char *nmt_newt_textbox_get_text (NmtNewtTextbox *textbox);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_TEXTBOX_H */
diff --git a/tui/newt/nmt-newt-toggle-button.c b/tui/newt/nmt-newt-toggle-button.c
new file mode 100644
index 000000000..d435e459e
--- /dev/null
+++ b/tui/newt/nmt-newt-toggle-button.c
@@ -0,0 +1,234 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-toggle-button
+ * @short_description: Toggle buttons
+ *
+ * #NmtNewtToggleButton implements a two-state toggle button.
+ */
+
+#include "config.h"
+
+#include "nmt-newt-toggle-button.h"
+
+G_DEFINE_TYPE (NmtNewtToggleButton, nmt_newt_toggle_button, NMT_TYPE_NEWT_BUTTON)
+
+#define NMT_NEWT_TOGGLE_BUTTON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_TOGGLE_BUTTON, NmtNewtToggleButtonPrivate))
+
+typedef struct {
+ char *on_label, *off_label;
+ gboolean active;
+} NmtNewtToggleButtonPrivate;
+
+enum {
+ PROP_0,
+ PROP_ON_LABEL,
+ PROP_OFF_LABEL,
+ PROP_ACTIVE,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_newt_toggle_button_new:
+ * @on_label: the button's label when it is in the "on" state
+ * @off_label: the button's label when it is in the "off" state
+ *
+ * Creates a new #NmtNewtToggleButton
+ *
+ * Returns: a new #NmtNewtToggleButton
+ */
+NmtNewtWidget *
+nmt_newt_toggle_button_new (const char *on_label,
+ const char *off_label)
+{
+ return g_object_new (NMT_TYPE_NEWT_TOGGLE_BUTTON,
+ "on-label", on_label,
+ "off-label", off_label,
+ NULL);
+}
+
+/**
+ * nmt_newt_toggle_button_get_active:
+ * @button: an #NmtNewtToggleButton
+ *
+ * Gets whether @button is currently "on" or "off"
+ *
+ * Returns: whether @button is currently "on" (%TRUE) or "off" (%FALSE)
+ */
+gboolean
+nmt_newt_toggle_button_get_active (NmtNewtToggleButton *button)
+{
+ NmtNewtToggleButtonPrivate *priv = NMT_NEWT_TOGGLE_BUTTON_GET_PRIVATE (button);
+
+ return priv->active;
+}
+
+/**
+ * nmt_newt_toggle_button_set_active:
+ * @button: an #NmtNewtToggleButton
+ * @active: whether @button should be "on" or "off"
+ *
+ * Sets whether @button is currently "on" or "off"
+ */
+void
+nmt_newt_toggle_button_set_active (NmtNewtToggleButton *button,
+ gboolean active)
+{
+ NmtNewtToggleButtonPrivate *priv = NMT_NEWT_TOGGLE_BUTTON_GET_PRIVATE (button);
+
+ if (priv->active == active)
+ return;
+
+ priv->active = active;
+ g_object_set (G_OBJECT (button),
+ "label", active ? priv->on_label : priv->off_label,
+ NULL);
+ g_object_notify (G_OBJECT (button), "active");
+}
+
+static void
+nmt_newt_toggle_button_init (NmtNewtToggleButton *button)
+{
+}
+
+static void
+nmt_newt_toggle_button_finalize (GObject *object)
+{
+ NmtNewtToggleButtonPrivate *priv = NMT_NEWT_TOGGLE_BUTTON_GET_PRIVATE (object);
+
+ g_free (priv->on_label);
+ g_free (priv->off_label);
+
+ G_OBJECT_CLASS (nmt_newt_toggle_button_parent_class)->finalize (object);
+}
+
+static void
+nmt_newt_toggle_button_activated (NmtNewtWidget *widget)
+{
+ NmtNewtToggleButton *button = NMT_NEWT_TOGGLE_BUTTON (widget);
+
+ nmt_newt_toggle_button_set_active (button, !nmt_newt_toggle_button_get_active (button));
+
+ NMT_NEWT_WIDGET_CLASS (nmt_newt_toggle_button_parent_class)->activated (widget);
+}
+
+static void
+nmt_newt_toggle_button_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtToggleButtonPrivate *priv = NMT_NEWT_TOGGLE_BUTTON_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_ON_LABEL:
+ g_free (priv->on_label);
+ priv->on_label = g_value_dup_string (value);
+ if (priv->active)
+ g_object_set (object, "label", priv->on_label, NULL);
+ break;
+ case PROP_OFF_LABEL:
+ g_free (priv->off_label);
+ priv->off_label = g_value_dup_string (value);
+ if (!priv->active)
+ g_object_set (object, "label", priv->off_label, NULL);
+ break;
+ case PROP_ACTIVE:
+ priv->active = g_value_get_boolean (value);
+ g_object_set (object,
+ "label", priv->active ? priv->on_label : priv->off_label,
+ NULL);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_toggle_button_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtToggleButtonPrivate *priv = NMT_NEWT_TOGGLE_BUTTON_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_ON_LABEL:
+ g_value_set_string (value, priv->on_label);
+ break;
+ case PROP_OFF_LABEL:
+ g_value_set_string (value, priv->off_label);
+ break;
+ case PROP_ACTIVE:
+ g_value_set_boolean (value, priv->active);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_toggle_button_class_init (NmtNewtToggleButtonClass *button_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (button_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (button_class);
+
+ g_type_class_add_private (button_class, sizeof (NmtNewtToggleButtonPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_toggle_button_set_property;
+ object_class->get_property = nmt_newt_toggle_button_get_property;
+ object_class->finalize = nmt_newt_toggle_button_finalize;
+
+ widget_class->activated = nmt_newt_toggle_button_activated;
+
+ /**
+ * NmtNewtToggleButton:on-label:
+ *
+ * The label the button displays when it is "on".
+ */
+ g_object_class_install_property (object_class, PROP_ON_LABEL,
+ g_param_spec_string ("on-label", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtToggleButton:off-label:
+ *
+ * The label the button displays when it is "off".
+ */
+ g_object_class_install_property (object_class, PROP_OFF_LABEL,
+ g_param_spec_string ("off-label", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtToggleButton:active:
+ *
+ * Whether the button is currently "on" (%TRUE) or "off" (%FALSE)
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE,
+ g_param_spec_boolean ("active", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-toggle-button.h b/tui/newt/nmt-newt-toggle-button.h
new file mode 100644
index 000000000..e54c6d3fa
--- /dev/null
+++ b/tui/newt/nmt-newt-toggle-button.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_TOGGLE_BUTTON_H
+#define NMT_NEWT_TOGGLE_BUTTON_H
+
+#include "nmt-newt-button.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_TOGGLE_BUTTON (nmt_newt_toggle_button_get_type ())
+#define NMT_NEWT_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_TOGGLE_BUTTON, NmtNewtToggleButton))
+#define NMT_NEWT_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_TOGGLE_BUTTON, NmtNewtToggleButtonClass))
+#define NMT_IS_NEWT_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_TOGGLE_BUTTON))
+#define NMT_IS_NEWT_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_TOGGLE_BUTTON))
+#define NMT_NEWT_TOGGLE_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_TOGGLE_BUTTON, NmtNewtToggleButtonClass))
+
+struct _NmtNewtToggleButton {
+ NmtNewtButton parent;
+
+};
+
+typedef struct {
+ NmtNewtButtonClass parent;
+
+} NmtNewtToggleButtonClass;
+
+GType nmt_newt_toggle_button_get_type (void);
+
+NmtNewtWidget *nmt_newt_toggle_button_new (const char *on_label,
+ const char *off_label);
+
+gboolean nmt_newt_toggle_button_get_active (NmtNewtToggleButton *button);
+void nmt_newt_toggle_button_set_active (NmtNewtToggleButton *button,
+ gboolean active);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_TOGGLE_BUTTON_H */
diff --git a/tui/newt/nmt-newt-types.h b/tui/newt/nmt-newt-types.h
new file mode 100644
index 000000000..608f7ff6f
--- /dev/null
+++ b/tui/newt/nmt-newt-types.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_TYPES_H
+#define NMT_NEWT_TYPES_H
+
+#include <glib-object.h>
+#include <newt.h>
+#include "nm-glib-compat.h"
+
+G_BEGIN_DECLS
+
+typedef struct _NmtNewtButton NmtNewtButton;
+typedef struct _NmtNewtButtonBox NmtNewtButtonBox;
+typedef struct _NmtNewtCheckbox NmtNewtCheckbox;
+typedef struct _NmtNewtComponent NmtNewtComponent;
+typedef struct _NmtNewtContainer NmtNewtContainer;
+typedef struct _NmtNewtEntry NmtNewtEntry;
+typedef struct _NmtNewtEntryNumeric NmtNewtEntryNumeric;
+typedef struct _NmtNewtForm NmtNewtForm;
+typedef struct _NmtNewtGrid NmtNewtGrid;
+typedef struct _NmtNewtLabel NmtNewtLabel;
+typedef struct _NmtNewtListbox NmtNewtListbox;
+typedef struct _NmtNewtPopup NmtNewtPopup;
+typedef struct _NmtNewtSection NmtNewtSection;
+typedef struct _NmtNewtSectionBorder NmtNewtSectionBorder;
+typedef struct _NmtNewtSeparator NmtNewtSeparator;
+typedef struct _NmtNewtStack NmtNewtStack;
+typedef struct _NmtNewtTextbox NmtNewtTextbox;
+typedef struct _NmtNewtToggleButton NmtNewtToggleButton;
+typedef struct _NmtNewtWidget NmtNewtWidget;
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_COMPONENT_H */
diff --git a/tui/newt/nmt-newt-utils.c b/tui/newt/nmt-newt-utils.c
new file mode 100644
index 000000000..68d8c449e
--- /dev/null
+++ b/tui/newt/nmt-newt-utils.c
@@ -0,0 +1,392 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-utils
+ * @short_description: Utility functions
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-newt-utils.h"
+
+static void
+nmt_newt_dialog_g_log_handler (const char *log_domain,
+ GLogLevelFlags log_level,
+ const char *message,
+ gpointer user_data)
+{
+ const char *level_name;
+ char *full_message;
+ int screen_width, screen_height;
+ newtComponent text, ok, form;
+ newtGrid grid;
+
+ g_assert (!(log_level & G_LOG_FLAG_RECURSION));
+
+ if (log_level & G_LOG_LEVEL_DEBUG)
+ return;
+
+ switch (log_level & G_LOG_LEVEL_MASK) {
+ case G_LOG_LEVEL_ERROR:
+ level_name = "ERROR";
+ break;
+ case G_LOG_LEVEL_CRITICAL:
+ level_name = "CRITICAL";
+ break;
+ case G_LOG_LEVEL_WARNING:
+ level_name = "WARNING";
+ break;
+ case G_LOG_LEVEL_MESSAGE:
+ level_name = "Message";
+ break;
+ default:
+ level_name = NULL;
+ }
+
+ full_message = g_strdup_printf ("%s%s%s%s%s",
+ log_domain ? log_domain : "",
+ log_domain && level_name ? " " : "",
+ level_name ? level_name : "",
+ log_domain || level_name ? ": " : "",
+ message);
+
+ /* newtWinMessage() wraps the window too narrowly by default, so
+ * we don't want to use that. But we intentionally avoid using any
+ * NmtNewt classes, to avoid possible error recursion.
+ */
+
+ newtGetScreenSize (&screen_width, &screen_height);
+ text = newtTextboxReflowed (-1, -1, full_message, MAX (70, screen_width - 10), 0, 0, 0);
+ g_free (full_message);
+
+ ok = newtButton (-1, -1, "OK");
+
+ grid = newtCreateGrid (1, 2);
+ newtGridSetField (grid, 0, 0, NEWT_GRID_COMPONENT, text, 0, 0, 0, 0, 0, 0);
+ newtGridSetField (grid, 0, 1, NEWT_GRID_COMPONENT, ok, 0, 1, 0, 0,
+ NEWT_ANCHOR_RIGHT, 0);
+
+ newtGridWrappedWindow (grid, (char *) (level_name ? level_name : ""));
+ newtGridFree (grid, TRUE);
+
+ form = newtForm (NULL, NULL, 0);
+ newtFormAddComponents (form, text, ok, NULL);
+ newtRunForm (form);
+ newtFormDestroy (form);
+ newtPopWindow ();
+}
+
+static void
+nmt_newt_basic_g_log_handler (const char *log_domain,
+ GLogLevelFlags log_level,
+ const char *message,
+ gpointer user_data)
+{
+ newtSuspend ();
+ g_log_default_handler (log_domain, log_level, message, NULL);
+ newtResume ();
+}
+
+static void
+nmt_newt_suspend_callback (gpointer user_data)
+{
+ newtSuspend ();
+ kill (getpid (), SIGTSTP);
+ newtResume ();
+}
+
+/**
+ * nmt_newt_init:
+ *
+ * Wrapper for newtInit() that also does some nmt-newt-internal setup.
+ * This should be called once, before any other nmt-newt functions.
+ */
+void
+nmt_newt_init (void)
+{
+ newtInit ();
+ newtCls ();
+
+ newtSetColor (NEWT_COLORSET_CHECKBOX, "black", "lightgray");
+ newtSetColor (NMT_NEWT_COLORSET_BAD_LABEL, "red", "lightgray");
+ newtSetColor (NMT_NEWT_COLORSET_PLAIN_LABEL, "black", "lightgray");
+ newtSetColor (NMT_NEWT_COLORSET_DISABLED_BUTTON, "blue", "lightgray");
+ newtSetColor (NMT_NEWT_COLORSET_TEXTBOX_WITH_BACKGROUND, "black", "white");
+
+ if (g_getenv ("NMTUI_DEBUG"))
+ g_log_set_default_handler (nmt_newt_dialog_g_log_handler, NULL);
+ else
+ g_log_set_default_handler (nmt_newt_basic_g_log_handler, NULL);
+
+ newtSetSuspendCallback (nmt_newt_suspend_callback, NULL);
+}
+
+/**
+ * nmt_newt_finished:
+ *
+ * Wrapper for newtFinished(). Should be called at the end of the program.
+ */
+void
+nmt_newt_finished (void)
+{
+ newtFinished ();
+ g_log_set_default_handler (g_log_default_handler, NULL);
+}
+
+/**
+ * nmt_newt_message_dialog:
+ * @message: a printf()-style message format
+ * @...: arguments
+ *
+ * Displays the given message in a dialog box with a single "OK"
+ * button, and returns after the user clicks "OK".
+ */
+void
+nmt_newt_message_dialog (const char *message,
+ ...)
+{
+ va_list ap;
+ char *msg, *msg_lc, *ok_lc;
+
+ va_start (ap, message);
+ msg = g_strdup_vprintf (message, ap);
+ va_end (ap);
+
+ msg_lc = nmt_newt_locale_from_utf8 (msg);
+ ok_lc = nmt_newt_locale_from_utf8 (_("OK"));
+ newtWinMessage (NULL, ok_lc, "%s", msg_lc);
+
+ g_free (ok_lc);
+ g_free (msg_lc);
+ g_free (msg);
+}
+
+/**
+ * nmt_newt_choice_dialog:
+ * @button1: the label for the first button
+ * @button2: the label for the second button
+ * @message: a printf()-style message format
+ * @...: arguments
+ *
+ * Displays the given message in a dialog box with two buttons with
+ * the indicated labels, and waits for the user to click one.
+ *
+ * Returns: which button was clicked: 0 for @button1 or 1 for @button2
+ */
+int
+nmt_newt_choice_dialog (const char *button1,
+ const char *button2,
+ const char *message,
+ ...)
+{
+ va_list ap;
+ char *msg, *msg_lc, *button1_lc, *button2_lc;
+ int choice;
+
+ va_start (ap, message);
+ msg = g_strdup_vprintf (message, ap);
+ va_end (ap);
+
+ msg_lc = nmt_newt_locale_from_utf8 (msg);
+ button1_lc = nmt_newt_locale_from_utf8 (button1);
+ button2_lc = nmt_newt_locale_from_utf8 (button2);
+ choice = newtWinChoice (NULL, button1_lc, button2_lc, "%s", msg_lc);
+
+ g_free (button1_lc);
+ g_free (button2_lc);
+ g_free (msg_lc);
+ g_free (msg);
+
+ return choice;
+}
+
+/**
+ * nmt_newt_locale_to_utf8:
+ * @str_lc: a string in the user's locale encoding
+ *
+ * Convenience wrapper around g_locale_to_utf8().
+ *
+ * Note that libnewt works in terms of the user's locale character
+ * set, NOT UTF-8, so all strings received from libnewt must be
+ * converted back to UTF-8 before being returned to the caller or used
+ * in other APIs.
+ *
+ * Returns: @str_lc, converted to UTF-8.
+ */
+char *
+nmt_newt_locale_to_utf8 (const char *str_lc)
+{
+ char *str_utf8;
+
+ str_utf8 = g_locale_to_utf8 (str_lc, -1, NULL, NULL, NULL);
+ if (!str_utf8)
+ str_utf8 = g_strdup ("");
+ return str_utf8;
+}
+
+/**
+ * nmt_newt_locale_from_utf8:
+ * @str_utf8: a UTF-8 string
+ *
+ * Convenience wrapper around g_locale_from_utf8().
+ *
+ * Note that libnewt works in terms of the user's locale character
+ * set, NOT UTF-8, so all strings from nmt-newt must be converted to
+ * locale encoding before being passed to libnewt.
+ *
+ * Returns: @str_utf8, converted to the user's locale encoding.
+ */
+char *
+nmt_newt_locale_from_utf8 (const char *str_utf8)
+{
+ char *str_lc;
+
+ str_lc = g_locale_from_utf8 (str_utf8, -1, NULL, NULL, NULL);
+ if (!str_lc)
+ str_lc = g_strdup ("");
+ return str_lc;
+}
+
+/**
+ * nmt_newt_text_width
+ * @str: a UTF-8 string
+ *
+ * Computes the width (in terminal columns) of @str.
+ *
+ * Returns: the width of @str
+ */
+int
+nmt_newt_text_width (const char *str)
+{
+ int width;
+ gunichar ch;
+
+ for (width = 0; *str; str = g_utf8_next_char (str)) {
+ ch = g_utf8_get_char (str);
+
+ /* Based on _vte_iso2022_unichar_width */
+ if (G_LIKELY (ch < 0x80))
+ width += 1;
+ else if (G_UNLIKELY (g_unichar_iszerowidth (ch)))
+ width += 0;
+ else if (G_UNLIKELY (g_unichar_iswide (ch)))
+ width += 2;
+ else
+ width += 1;
+ }
+
+ return width;
+}
+
+/**
+ * nmt_newt_edit_string:
+ * @data: data to edit
+ *
+ * libnewt does not have a multi-line editable text component, so
+ * nmt-newt provides this function instead, which will open the user's
+ * editor to edit a file containing the given @data (ensuring that the
+ * current screen state is saved before starting the editor and
+ * restored after it returns).
+ *
+ * Returns: the edited data, or %NULL if an error occurred.
+ */
+char *
+nmt_newt_edit_string (const char *data)
+{
+ gssize len, nwrote;
+ char *filename, *argv[3];
+ GError *error = NULL;
+ int fd, status;
+ char *new_data = NULL;
+
+ fd = g_file_open_tmp ("XXXXXX.json", &filename, &error);
+ if (fd == -1) {
+ nmt_newt_message_dialog (_("Could not create temporary file: %s"), error->message);
+ g_error_free (error);
+ return NULL;
+ }
+
+ len = data ? strlen (data) : 0;
+ while (len) {
+ do
+ nwrote = write (fd, data, len);
+ while (nwrote == -1 && errno == EINTR);
+
+ len -= nwrote;
+ data += nwrote;
+ }
+ close (fd);
+
+ argv[0] = (char *) g_getenv ("VISUAL");
+ if (!argv[0])
+ argv[0] = (char *) g_getenv ("EDITOR");
+ if (!argv[0])
+ argv[0] = (char *) "vi";
+ argv[1] = filename;
+ argv[2] = NULL;
+
+ newtSuspend ();
+ g_spawn_sync (NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH | G_SPAWN_CHILD_INHERITS_STDIN,
+ NULL, NULL, NULL, NULL,
+ &status, &error);
+ newtResume ();
+
+ if (error) {
+ nmt_newt_message_dialog (_("Could not create temporary file: %s"), error->message);
+ g_error_free (error);
+ goto done;
+ }
+
+#if GLIB_CHECK_VERSION (2, 34, 0)
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ if (!g_spawn_check_exit_status (status, &error)) {
+ nmt_newt_message_dialog (_("Editor failed: %s"), error->message);
+ g_error_free (error);
+ goto done;
+ }
+ G_GNUC_END_IGNORE_DEPRECATIONS
+#else
+ if (WIFEXITED (status)) {
+ if (WEXITSTATUS (status) != 0)
+ nmt_newt_message_dialog (_("Editor failed with status %d"), WEXITSTATUS (status));
+ } else if (WIFSIGNALED (status))
+ nmt_newt_message_dialog (_("Editor failed with signal %d"), WTERMSIG (status));
+#endif
+
+ if (!g_file_get_contents (filename, &new_data, NULL, &error)) {
+ nmt_newt_message_dialog (_("Could not re-read file: %s"), error->message);
+ g_error_free (error);
+ goto done;
+ }
+
+ done:
+ unlink (filename);
+ g_free (filename);
+
+ return new_data;
+}
+
diff --git a/tui/newt/nmt-newt-utils.h b/tui/newt/nmt-newt-utils.h
new file mode 100644
index 000000000..3b37868a0
--- /dev/null
+++ b/tui/newt/nmt-newt-utils.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_UTILS_H
+#define NMT_NEWT_UTILS_H
+
+#include <newt.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+void nmt_newt_init (void);
+void nmt_newt_finished (void);
+
+typedef enum {
+ NMT_NEWT_COLORSET_BAD_LABEL = NEWT_COLORSET_CUSTOM (0),
+ NMT_NEWT_COLORSET_PLAIN_LABEL,
+ NMT_NEWT_COLORSET_DISABLED_BUTTON,
+ NMT_NEWT_COLORSET_TEXTBOX_WITH_BACKGROUND
+} NmtNewtColorsets;
+
+char *nmt_newt_locale_to_utf8 (const char *str_lc);
+char *nmt_newt_locale_from_utf8 (const char *str_utf8);
+
+int nmt_newt_text_width (const char *str);
+
+void nmt_newt_message_dialog (const char *message,
+ ...);
+int nmt_newt_choice_dialog (const char *button1,
+ const char *button2,
+ const char *message,
+ ...);
+
+char *nmt_newt_edit_string (const char *data);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_UTILS_H */
diff --git a/tui/newt/nmt-newt-widget.c b/tui/newt/nmt-newt-widget.c
new file mode 100644
index 000000000..24ee8b0a6
--- /dev/null
+++ b/tui/newt/nmt-newt-widget.c
@@ -0,0 +1,664 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-newt-widget
+ * @short_description: Base TUI Widget class
+ *
+ * #NmtNewtWidget is the abstract base class for nmt-newt. All widgets
+ * inherit from one of its two subclasses: #NmtNewtComponent, for
+ * widgets that wrap a (single) #newtComponent, and #NmtNewtContainer,
+ * for widgets consisting of multiple components. See those classes
+ * for more details.
+ *
+ * With the exception of #NmtNewtForm, all widgets start out with a
+ * floating reference, which will be sunk by the container they are
+ * added to. #NmtNewtForm is the "top-level" widget type, and so does
+ * not have a floating reference.
+ *
+ * FIXME: need RTL support
+ */
+
+#include "config.h"
+
+#include "nmt-newt-widget.h"
+#include "nmt-newt-form.h"
+
+G_DEFINE_ABSTRACT_TYPE (NmtNewtWidget, nmt_newt_widget, G_TYPE_INITIALLY_UNOWNED)
+
+#define NMT_NEWT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_NEWT_WIDGET, NmtNewtWidgetPrivate))
+
+typedef struct {
+ NmtNewtWidget *parent;
+ gboolean visible, realized, valid;
+ gboolean exit_on_activate;
+
+ int pad_left, pad_top, pad_right, pad_bottom;
+} NmtNewtWidgetPrivate;
+
+enum {
+ PROP_0,
+
+ PROP_PARENT,
+ PROP_VISIBLE,
+ PROP_VALID,
+ PROP_EXIT_ON_ACTIVATE,
+
+ LAST_PROP
+};
+
+enum {
+ NEEDS_REBUILD,
+ ACTIVATED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void
+nmt_newt_widget_init (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ priv->visible = TRUE;
+ priv->valid = TRUE;
+}
+
+static void
+nmt_newt_widget_finalize (GObject *object)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (object);
+
+ nmt_newt_widget_unrealize (NMT_NEWT_WIDGET (object));
+ g_clear_object (&priv->parent);
+
+ G_OBJECT_CLASS (nmt_newt_widget_parent_class)->finalize (object);
+}
+
+/**
+ * nmt_newt_widget_realize:
+ * @widget: an #NmtNewtWidget
+ *
+ * "Realizes" @widget. That is, creates #newtComponents corresponding
+ * to @widget and its children.
+ *
+ * You should not need to call this yourself; an #NmtNewtForm will
+ * cause its children to be realized and unrealized as needed.
+ */
+void
+nmt_newt_widget_realize (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ if (!priv->realized) {
+ NMT_NEWT_WIDGET_GET_CLASS (widget)->realize (widget);
+ priv->realized = TRUE;
+ }
+}
+
+/**
+ * nmt_newt_widget_unrealize:
+ * @widget: an #NmtNewtWidget
+ *
+ * "Unrealizes" @widget, destroying its #newtComponents.
+ *
+ * You should not need to call this yourself; an #NmtNewtForm will
+ * cause its children to be realized and unrealized as needed.
+ */
+void
+nmt_newt_widget_unrealize (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ if (priv->realized) {
+ NMT_NEWT_WIDGET_GET_CLASS (widget)->unrealize (widget);
+ priv->realized = FALSE;
+ }
+}
+
+/**
+ * nmt_newt_widget_get_realized:
+ * @widget: an #NmtNewtWidget
+ *
+ * Checks if @widget is realized or not.
+ *
+ * Returns: whether @widget is realized.
+ */
+gboolean
+nmt_newt_widget_get_realized (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ return priv->realized;
+}
+
+/**
+ * nmt_newt_widget_get_components:
+ * @widget: an #NmtNewtWidget
+ *
+ * Gets the #newtComponents that make up @widget, if @widget is
+ * visible. If @widget has not yet been realized, it will be realized
+ * first.
+ *
+ * If this function is called on a widget, then the widget will assume
+ * that someone else is now responsible for destroying the components,
+ * and so it will not destroy them itself when the widget is
+ * destroyed. Normally, components will end up being destroyed by the
+ * #NmtNewtForm they are added to.
+ *
+ * Returns: a %NULL-terminated array of components, in focus-chain
+ * order. You must free the array with g_free() when you are done
+ * with it.
+ */
+newtComponent *
+nmt_newt_widget_get_components (NmtNewtWidget *widget)
+{
+ if (nmt_newt_widget_get_visible (widget)) {
+ nmt_newt_widget_realize (widget);
+ return NMT_NEWT_WIDGET_GET_CLASS (widget)->get_components (widget);
+ } else
+ return NULL;
+}
+
+/**
+ * nmt_newt_widget_find_component:
+ * @widget: an #NmtNewtWidget
+ * @co: a #newtComponent
+ *
+ * Finds the widget inside @widget that owns @co.
+ *
+ * Return value: @co's owner, or %NULL if it was not found.
+ */
+NmtNewtWidget *
+nmt_newt_widget_find_component (NmtNewtWidget *widget,
+ newtComponent co)
+{
+ return NMT_NEWT_WIDGET_GET_CLASS (widget)->find_component (widget, co);
+}
+
+/**
+ * nmt_newt_widget_set_padding:
+ * @widget: an #NmtNewtWidget
+ * @pad_left: padding on the left of @widget
+ * @pad_top: padding on the top of @widget
+ * @pad_right: padding on the right of @widget
+ * @pad_bottom: padding on the bottom of @widget
+ *
+ * Sets the padding on @widget.
+ */
+void
+nmt_newt_widget_set_padding (NmtNewtWidget *widget,
+ int pad_left,
+ int pad_top,
+ int pad_right,
+ int pad_bottom)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ priv->pad_left = pad_left;
+ priv->pad_top = pad_top;
+ priv->pad_right = pad_right;
+ priv->pad_bottom = pad_bottom;
+}
+
+/**
+ * nmt_newt_widget_size_request:
+ * @widget: an #NmtNewtWidget
+ * @width: (out): on output, the widget's requested width
+ * @height: (out): on output, the widget's requested height
+ *
+ * Asks @widget for its requested size. If @widget is not visible,
+ * this will return 0, 0. If @widget has not yet been realized, it
+ * will be realized first.
+ */
+void
+nmt_newt_widget_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ if (nmt_newt_widget_get_visible (widget)) {
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ nmt_newt_widget_realize (widget);
+ NMT_NEWT_WIDGET_GET_CLASS (widget)->size_request (widget, width, height);
+
+ *width += priv->pad_left + priv->pad_right;
+ *height += priv->pad_top + priv->pad_bottom;
+ } else
+ *width = *height = 0;
+}
+
+/**
+ * nmt_newt_widget_size_allocate:
+ * @widget: an #NmtNewtWidget
+ * @x: the widget's (absolute) X coordinate
+ * @y: the widget's (absolute) Y coordinate
+ * @width: the widget's allocated width
+ * @height: the widget's allocated height
+ *
+ * Positions @widget at the given coordinates, with the given size. If
+ * @widget is not visible, this has no effect. If @widget has not yet
+ * been realized, it will be realized first.
+ *
+ * @x and @y are absolute coordinates (ie, relative to the screen /
+ * terminal window, not relative to @widget's parent).
+ *
+ * In general, the results are undefined if @width or @height is less
+ * than the widget's requested size. If @width or @height is larger
+ * than the requested size, most #NmtNewtComponents will ignore the
+ * extra space, but some components and most containers will expand to
+ * fit.
+ */
+void
+nmt_newt_widget_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ if (nmt_newt_widget_get_visible (widget)) {
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ nmt_newt_widget_realize (widget);
+ x += priv->pad_left;
+ y += priv->pad_top;
+ width -= priv->pad_left + priv->pad_right;
+ height -= priv->pad_top + priv->pad_bottom;
+
+ NMT_NEWT_WIDGET_GET_CLASS (widget)->size_allocate (widget, x, y, width, height);
+ }
+}
+
+/**
+ * nmt_newt_widget_get_focus_component:
+ * @widget: an #NmtNewtWidget
+ *
+ * Gets the #newtComponent that should be given the keyboard focus when
+ * @widget is focused.
+ *
+ * Returns: the #newtComponent to focus, or %NULL if @widget can't
+ * take the focus.
+ */
+newtComponent
+nmt_newt_widget_get_focus_component (NmtNewtWidget *widget)
+{
+ if (!NMT_NEWT_WIDGET_GET_CLASS (widget)->get_focus_component)
+ return NULL;
+
+ return NMT_NEWT_WIDGET_GET_CLASS (widget)->get_focus_component (widget);
+}
+
+static void
+nmt_newt_widget_real_activated (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ if (priv->exit_on_activate)
+ nmt_newt_form_quit (nmt_newt_widget_get_form (widget));
+}
+
+/**
+ * nmt_newt_widget_activated:
+ * @widget: an #NmtNewtWidget
+ *
+ * Tells @widget that its #newtComponent has been activated (ie, the
+ * user hit "Return" on it) and emits #NmtNewtWidget::activated.
+ *
+ * If #NmtNewtWidget:exit-on-activate is set on @widget, then this
+ * will call nmt_newt_form_quit() on the widget's form.
+ */
+void
+nmt_newt_widget_activated (NmtNewtWidget *widget)
+{
+ g_signal_emit (widget, signals[ACTIVATED], 0);
+}
+
+/**
+ * nmt_newt_widget_get_exit_on_activate:
+ * @widget: an #NmtNewtWidget
+ *
+ * Gets @widget's #NmtNewtWidget:exit-on-activate flag, qv.
+ *
+ * Returns: @widget's #NmtNewtWidget:exit-on-activate flag
+ */
+gboolean
+nmt_newt_widget_get_exit_on_activate (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ return priv->exit_on_activate;
+}
+
+/**
+ * nmt_newt_widget_set_exit_on_activate:
+ * @widget: an #NmtNewtWidget
+ * @exit_on_activate: whether @widget should exit on activate.
+ *
+ * Sets @widget's #NmtNewtWidget:exit-on-activate flag, qv.
+ */
+void
+nmt_newt_widget_set_exit_on_activate (NmtNewtWidget *widget,
+ gboolean exit_on_activate)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ exit_on_activate = !!exit_on_activate;
+ if (priv->exit_on_activate != exit_on_activate) {
+ priv->exit_on_activate = exit_on_activate;
+ g_object_notify (G_OBJECT (widget), "exit-on-activate");
+ }
+}
+
+/**
+ * nmt_newt_widget_get_visible:
+ * @widget: an #NmtNewtWidget
+ *
+ * Gets @widget's #NmtNewtWidget:visible flag, qv.
+ *
+ * Returns: @widget's #NmtNewtWidget:visible flag
+ */
+gboolean
+nmt_newt_widget_get_visible (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ return priv->visible;
+}
+
+/**
+ * nmt_newt_widget_set_visible:
+ * @widget: an #NmtNewtWidget
+ * @visible: whether @widget should be visible
+ *
+ * Sets @widget's #NmtNewtWidget:visible flag, qv.
+ */
+void
+nmt_newt_widget_set_visible (NmtNewtWidget *widget,
+ gboolean visible)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ visible = !!visible;
+ if (priv->visible != visible) {
+ priv->visible = visible;
+ g_object_notify (G_OBJECT (widget), "visible");
+ nmt_newt_widget_needs_rebuild (widget);
+ }
+}
+
+/**
+ * nmt_newt_widget_set_parent:
+ * @widget: an #NmtNewtWidget
+ * @parent: @widget's parent
+ *
+ * Sets @widget's parent to @parent. This is used internally by
+ * #NmtNewtContainer implementations; you must use an appropriate
+ * container-specific method to actually add a widget to a container.
+ */
+void
+nmt_newt_widget_set_parent (NmtNewtWidget *widget,
+ NmtNewtWidget *parent)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ g_clear_object (&priv->parent);
+ priv->parent = parent ? g_object_ref (parent) : NULL;
+ g_object_notify (G_OBJECT (widget), "parent");
+}
+
+/**
+ * nmt_newt_widget_get_parent:
+ * @widget: an #NmtNewtWidget
+ *
+ * Gets @widget's parent
+ *
+ * Returns: @widget's parent
+ */
+NmtNewtWidget *
+nmt_newt_widget_get_parent (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ return priv->parent;
+}
+
+/**
+ * nmt_newt_widget_get_form:
+ * @widget: an #NmtNewtWidget
+ *
+ * Gets @widget's top-level form.
+ *
+ * Returns: @widget's #NmtNewtForm
+ */
+NmtNewtForm *
+nmt_newt_widget_get_form (NmtNewtWidget *widget)
+{
+ while (widget) {
+ if (NMT_IS_NEWT_FORM (widget))
+ return NMT_NEWT_FORM (widget);
+ widget = nmt_newt_widget_get_parent (widget);
+ }
+
+ return NULL;
+}
+
+/**
+ * nmt_newt_widget_get_valid:
+ * @widget: an #NmtNewtWidget
+ *
+ * Gets @widget's #NmtNewtWidget:valid flag, indicating whether its
+ * content is valid.
+ *
+ * Returns: @widget's #NmtNewtWidget:valid flag
+ */
+gboolean
+nmt_newt_widget_get_valid (NmtNewtWidget *widget)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ return priv->valid;
+}
+
+/**
+ * nmt_newt_widget_set_valid:
+ * @widget: an #NmtNewtWidget
+ * @valid: whether @widget is valid
+ *
+ * Sets @widget's #NmtNewtWidget:valid flag, indicating whether its
+ * content is valid.
+ *
+ * This method should be considered "protected"; if you change it, the
+ * widget implementation will likely just change it back at some
+ * point.
+ */
+void
+nmt_newt_widget_set_valid (NmtNewtWidget *widget,
+ gboolean valid)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (widget);
+
+ valid = !!valid;
+ if (priv->valid == valid)
+ return;
+
+ priv->valid = valid;
+ g_object_notify (G_OBJECT (widget), "valid");
+}
+
+/**
+ * nmt_newt_widget_needs_rebuilds:
+ * @widget: an #NmtNewtWidget
+ *
+ * Marks @widget as needing to be "rebuilt" (ie, re-realized). This is
+ * called automatically in some cases (such as when adding a widget to
+ * or removing it from a container). #NmtNewtComponent implementations
+ * should also call this if they need to make some change that can
+ * only be done by destroying their current #newtComponent and
+ * creating a new one.
+ */
+void
+nmt_newt_widget_needs_rebuild (NmtNewtWidget *widget)
+{
+ g_signal_emit (widget, signals[NEEDS_REBUILD], 0);
+}
+
+static void
+nmt_newt_widget_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtWidget *widget = NMT_NEWT_WIDGET (object);
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ nmt_newt_widget_set_parent (widget, g_value_get_object (value));
+ break;
+ case PROP_VISIBLE:
+ nmt_newt_widget_set_visible (widget, g_value_get_boolean (value));
+ break;
+ case PROP_EXIT_ON_ACTIVATE:
+ nmt_newt_widget_set_exit_on_activate (widget, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_widget_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtNewtWidgetPrivate *priv = NMT_NEWT_WIDGET_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ g_value_set_object (value, priv->parent);
+ break;
+ case PROP_VISIBLE:
+ g_value_set_boolean (value, priv->visible);
+ break;
+ case PROP_VALID:
+ g_value_set_boolean (value, priv->valid);
+ break;
+ case PROP_EXIT_ON_ACTIVATE:
+ g_value_set_boolean (value, priv->exit_on_activate);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_newt_widget_class_init (NmtNewtWidgetClass *widget_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (widget_class);
+
+ g_type_class_add_private (widget_class, sizeof (NmtNewtWidgetPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_newt_widget_set_property;
+ object_class->get_property = nmt_newt_widget_get_property;
+ object_class->finalize = nmt_newt_widget_finalize;
+
+ widget_class->activated = nmt_newt_widget_real_activated;
+
+ /* signals */
+
+ /**
+ * NmtNewtWidget::needs-rebuild:
+ * @widget: the #NmtNewtWidget
+ *
+ * Emitted when nmt_newt_widget_need_rebuild() is called on @widget
+ * or any of its children. This signal propagates up the container
+ * hierarchy, eventually reaching the top-level #NmtNewtForm.
+ */
+ signals[NEEDS_REBUILD] =
+ g_signal_new ("needs-rebuild",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtNewtWidgetClass, needs_rebuild),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ /**
+ * NmtNewtWidget::activated:
+ * @widget: the #NmtNewtWidget
+ *
+ * Emitted when the widget's #newtComponent is activated.
+ */
+ signals[ACTIVATED] =
+ g_signal_new ("activated",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtNewtWidgetClass, activated),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ /* properties */
+
+ /**
+ * NmtNewtWidget:parent:
+ *
+ * The widget's parent widget, or %NULL if it has no parent.
+ */
+ g_object_class_install_property (object_class, PROP_PARENT,
+ g_param_spec_object ("parent", "", "",
+ NMT_TYPE_NEWT_WIDGET,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtWidget:visible:
+ *
+ * Whether the widget is visible. Invisible widgets do not get
+ * realized or sized.
+ */
+ g_object_class_install_property (object_class, PROP_VISIBLE,
+ g_param_spec_boolean ("visible", "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtWidget:valid:
+ *
+ * Whether the widget's content is considered valid. Components
+ * determine their own validity. A container, by default, is
+ * considered valid if all of its children are valid.
+ */
+ g_object_class_install_property (object_class, PROP_VALID,
+ g_param_spec_boolean ("valid", "", "",
+ TRUE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtNewtWidget:exit-on-activate:
+ *
+ * If %TRUE, the widget will call nmt_newt_form_quit() on its form
+ * when it is activated.
+ */
+ g_object_class_install_property (object_class, PROP_EXIT_ON_ACTIVATE,
+ g_param_spec_boolean ("exit-on-activate", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/newt/nmt-newt-widget.h b/tui/newt/nmt-newt-widget.h
new file mode 100644
index 000000000..a526a674c
--- /dev/null
+++ b/tui/newt/nmt-newt-widget.h
@@ -0,0 +1,118 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_WIDGET_H
+#define NMT_NEWT_WIDGET_H
+
+#include "nmt-newt-types.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_NEWT_WIDGET (nmt_newt_widget_get_type ())
+#define NMT_NEWT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_NEWT_WIDGET, NmtNewtWidget))
+#define NMT_NEWT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_NEWT_WIDGET, NmtNewtWidgetClass))
+#define NMT_IS_NEWT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_NEWT_WIDGET))
+#define NMT_IS_NEWT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_NEWT_WIDGET))
+#define NMT_NEWT_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_NEWT_WIDGET, NmtNewtWidgetClass))
+
+struct _NmtNewtWidget {
+ GInitiallyUnowned parent;
+
+};
+
+typedef struct {
+ GInitiallyUnownedClass parent;
+
+ /* signals */
+ void (*needs_rebuild) (NmtNewtWidget *widget);
+ void (*activated) (NmtNewtWidget *widget);
+
+ /* methods */
+ void (*realize) (NmtNewtWidget *widget);
+ void (*unrealize) (NmtNewtWidget *widget);
+
+ newtComponent * (*get_components) (NmtNewtWidget *widget);
+ NmtNewtWidget * (*find_component) (NmtNewtWidget *widget,
+ newtComponent co);
+
+ void (*size_request) (NmtNewtWidget *widget,
+ int *width,
+ int *height);
+ void (*size_allocate) (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height);
+
+ newtComponent (*get_focus_component) (NmtNewtWidget *widget);
+
+} NmtNewtWidgetClass;
+
+GType nmt_newt_widget_get_type (void);
+
+void nmt_newt_widget_realize (NmtNewtWidget *widget);
+void nmt_newt_widget_unrealize (NmtNewtWidget *widget);
+gboolean nmt_newt_widget_get_realized (NmtNewtWidget *widget);
+
+newtComponent *nmt_newt_widget_get_components (NmtNewtWidget *widget);
+
+void nmt_newt_widget_set_padding (NmtNewtWidget *widget,
+ int pad_left,
+ int pad_top,
+ int pad_right,
+ int pad_bottom);
+
+void nmt_newt_widget_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height);
+void nmt_newt_widget_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height);
+
+void nmt_newt_widget_set_parent (NmtNewtWidget *widget,
+ NmtNewtWidget *parent);
+NmtNewtWidget *nmt_newt_widget_get_parent (NmtNewtWidget *widget);
+
+NmtNewtForm *nmt_newt_widget_get_form (NmtNewtWidget *widget);
+
+gboolean nmt_newt_widget_get_visible (NmtNewtWidget *widget);
+void nmt_newt_widget_set_visible (NmtNewtWidget *widget,
+ gboolean visible);
+
+newtComponent nmt_newt_widget_get_focus_component (NmtNewtWidget *widget);
+
+void nmt_newt_widget_activated (NmtNewtWidget *widget);
+gboolean nmt_newt_widget_get_exit_on_activate (NmtNewtWidget *widget);
+void nmt_newt_widget_set_exit_on_activate (NmtNewtWidget *widget,
+ gboolean exit_on_activate);
+
+gboolean nmt_newt_widget_get_valid (NmtNewtWidget *widget);
+
+NmtNewtWidget *nmt_newt_widget_find_component (NmtNewtWidget *widget,
+ newtComponent co);
+
+/* protected */
+void nmt_newt_widget_needs_rebuild (NmtNewtWidget *widget);
+void nmt_newt_widget_set_valid (NmtNewtWidget *widget,
+ gboolean valid);
+
+G_END_DECLS
+
+#endif /* NMT_NEWT_WIDGET_H */
diff --git a/tui/newt/nmt-newt.h b/tui/newt/nmt-newt.h
new file mode 100644
index 000000000..6a9c8d9fb
--- /dev/null
+++ b/tui/newt/nmt-newt.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_NEWT_H
+#define NMT_NEWT_H
+
+#include "nmt-newt-button.h"
+#include "nmt-newt-button-box.h"
+#include "nmt-newt-checkbox.h"
+#include "nmt-newt-entry.h"
+#include "nmt-newt-entry-numeric.h"
+#include "nmt-newt-form.h"
+#include "nmt-newt-grid.h"
+#include "nmt-newt-label.h"
+#include "nmt-newt-listbox.h"
+#include "nmt-newt-popup.h"
+#include "nmt-newt-section.h"
+#include "nmt-newt-separator.h"
+#include "nmt-newt-stack.h"
+#include "nmt-newt-textbox.h"
+#include "nmt-newt-toggle-button.h"
+#include "nmt-newt-utils.h"
+
+#endif /* NMT_NEWT_H */
diff --git a/tui/nm-editor-bindings.c b/tui/nm-editor-bindings.c
new file mode 100644
index 000000000..5be13588e
--- /dev/null
+++ b/tui/nm-editor-bindings.c
@@ -0,0 +1,1676 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nm-editor-bindings
+ * @short_description: #GBinding-based NM connection editor helpers
+ *
+ * nm-editor-bindings contains helper functions to bind NMSettings objects
+ * to connection editing widgets. The goal is that this should eventually be
+ * shared between nmtui, nm-connection-editor, and gnome-control-center.
+ */
+
+#include "config.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <dbus/dbus-glib.h>
+
+#include "nm-editor-bindings.h"
+#include "nm-gvaluearray-compat.h"
+
+static void
+value_transform_string_int (const GValue *src_value,
+ GValue *dest_value)
+{
+ long val;
+ char *end;
+
+ val = strtol (g_value_get_string (src_value), &end, 10);
+ if (val < G_MININT || val > G_MAXINT || *end)
+ return;
+
+ g_value_set_int (dest_value, (int) val);
+}
+
+static void
+value_transform_string_uint (const GValue *src_value,
+ GValue *dest_value)
+{
+ long val;
+ char *end;
+
+ val = strtol (g_value_get_string (src_value), &end, 10);
+ if (val < 0 || val > G_MAXUINT || *end)
+ return;
+
+ g_value_set_uint (dest_value, (gint) val);
+}
+
+void
+nm_editor_bindings_init (void)
+{
+ /* glib registers number -> string, but not string -> number */
+ g_value_register_transform_func (G_TYPE_STRING, G_TYPE_INT, value_transform_string_int);
+ g_value_register_transform_func (G_TYPE_STRING, G_TYPE_UINT, value_transform_string_uint);
+}
+
+static gboolean
+ip_string_parse (const char *text,
+ int family,
+ gpointer addr,
+ guint32 *prefix)
+{
+ const char *slash;
+ char *addrstr, *end;
+ gboolean valid;
+
+ slash = strchr (text, '/');
+
+ if (slash) {
+ if (!prefix)
+ return FALSE;
+ addrstr = g_strndup (text, slash - text);
+ } else
+ addrstr = g_strdup (text);
+ valid = (inet_pton (family, addrstr, addr) == 1);
+ g_free (addrstr);
+
+ if (!valid)
+ return FALSE;
+
+ if (slash) {
+ *prefix = strtoul (slash + 1, &end, 10);
+ if ( *end
+ || *prefix == 0
+ || (family == AF_INET && *prefix > 32)
+ || (family == AF_INET6 && *prefix > 128))
+ valid = FALSE;
+ } else if (prefix) {
+ if (family == AF_INET)
+ *prefix = 32;
+ else
+ *prefix = 128;
+ }
+
+ return valid;
+}
+
+static gboolean
+ip4_addresses_with_prefix_to_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+ GArray *addr;
+ guint32 addrbytes, prefix;
+ char buf[INET_ADDRSTRLEN], **strings;
+ int i;
+
+ addrs = g_value_get_boxed (source_value);
+ strings = g_new0 (char *, addrs->len + 1);
+
+ for (i = 0; i < addrs->len; i++) {
+ addr = addrs->pdata[i];
+ addrbytes = g_array_index (addr, guint32, 0);
+ prefix = g_array_index (addr, guint32, 1);
+
+ if (addrbytes) {
+ strings[i] = g_strdup_printf ("%s/%d",
+ inet_ntop (AF_INET, &addrbytes, buf, sizeof (buf)),
+ (int) prefix);
+ } else
+ strings[i] = g_strdup ("");
+ }
+
+ g_value_take_boxed (target_value, strings);
+ return TRUE;
+}
+
+static gboolean
+ip4_addresses_with_prefix_from_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ char **strings;
+ GPtrArray *addrs;
+ GArray *addr;
+ guint32 *addrvals;
+ int i;
+
+ strings = g_value_get_boxed (source_value);
+ /* Fetch the original property value, so as to preserve the gateway elements */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &addrs,
+ NULL);
+
+ for (i = 0; strings[i]; i++) {
+ if (i >= addrs->len) {
+ guint32 val;
+
+ addr = g_array_sized_new (FALSE, FALSE, sizeof (guint32), 3);
+ val = 0;
+ g_array_append_val (addr, val);
+ val = 32;
+ g_array_append_val (addr, val);
+ val = 0;
+ g_array_append_val (addr, val);
+ g_ptr_array_add (addrs, addr);
+ } else
+ addr = addrs->pdata[i];
+ addrvals = (guint32 *)addr->data;
+
+ if (!ip_string_parse (strings[i], AF_INET, &addrvals[0], &addrvals[1])) {
+ g_ptr_array_unref (addrs);
+ return FALSE;
+ }
+ }
+
+ g_ptr_array_set_size (addrs, i);
+ g_value_take_boxed (target_value, addrs);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip4_addresses_with_prefix_to_strv:
+ * @source: the source object (eg, an #NMSettingIP4Config)
+ * @source_property: the property on @source to bind (eg,
+ * %NM_SETTING_IP4_CONFIG_ADDRESSES)
+ * @target: the target object (eg, an #NmtAddressList)
+ * @target_property: the property on @target to bind
+ * (eg, "strings")
+ * @flags: %GBindingFlags
+ *
+ * Binds the %DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT property
+ * @source_property on @source to the %G_TYPE_STRV property
+ * @target_property on @target.
+ *
+ * Each address/prefix/gateway triplet in @source_property will be
+ * converted to a string of the form "ip.ad.dr.ess/prefix" in
+ * @target_property (and vice versa if %G_BINDING_BIDIRECTIONAL) is
+ * specified. The "gateway" fields in @source_property are ignored
+ * when converting to strings, and unmodified when converting from
+ * strings.
+ */
+void
+nm_editor_bind_ip4_addresses_with_prefix_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ target, target_property,
+ flags,
+ ip4_addresses_with_prefix_to_strv,
+ ip4_addresses_with_prefix_from_strv,
+ NULL, NULL);
+}
+
+static gboolean
+ip4_addresses_to_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GArray *addrs;
+ guint32 addrbytes;
+ char buf[INET_ADDRSTRLEN], **strings;
+ int i;
+
+ addrs = g_value_get_boxed (source_value);
+ strings = g_new0 (char *, addrs->len + 1);
+
+ for (i = 0; i < addrs->len; i++) {
+ addrbytes = g_array_index (addrs, guint32, i);
+ if (addrbytes)
+ inet_ntop (AF_INET, &addrbytes, buf, sizeof (buf));
+ else
+ buf[0] = '\0';
+ strings[i] = g_strdup (buf);
+ }
+
+ g_value_take_boxed (target_value, strings);
+ return TRUE;
+}
+
+static gboolean
+ip4_addresses_from_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ char **strings;
+ GArray *addrs;
+ guint32 addr;
+ int i;
+
+ strings = g_value_get_boxed (source_value);
+ addrs = g_array_new (FALSE, FALSE, sizeof (guint32));
+
+ for (i = 0; strings[i]; i++) {
+ if (!ip_string_parse (strings[i], AF_INET, &addr, NULL)) {
+ g_array_unref (addrs);
+ return FALSE;
+ }
+ g_array_append_val (addrs, addr);
+ }
+
+ g_value_take_boxed (target_value, addrs);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip4_addresses_to_strv:
+ * @source: the source object (eg, an #NMSettingIP4Config)
+ * @source_property: the property on @source to bind (eg,
+ * %NM_SETTING_IP4_CONFIG_DNS)
+ * @target: the target object (eg, an #NmtAddressList)
+ * @target_property: the property on @target to bind
+ * (eg, "strings")
+ * @flags: %GBindingFlags
+ *
+ * Binds the %DBUS_TYPE_G_UINT_ARRAY property @source_property on
+ * @source to the %G_TYPE_STRV property @target_property on @target.
+ *
+ * Each address in @source_property will be converted to a string of
+ * the form "ip.ad.dr.ess" in @target_property (and vice versa if
+ * %G_BINDING_BIDIRECTIONAL) is specified.
+ */
+void
+nm_editor_bind_ip4_addresses_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ target, target_property,
+ flags,
+ ip4_addresses_to_strv,
+ ip4_addresses_from_strv,
+ NULL, NULL);
+}
+
+static gboolean
+ip4_gateway_to_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+ GArray *addr;
+ guint32 gateway = 0;
+ const char *str;
+ char buf[INET_ADDRSTRLEN];
+ int i;
+
+ addrs = g_value_get_boxed (source_value);
+ for (i = 0; i < addrs->len; i++) {
+ addr = addrs->pdata[i];
+ gateway = g_array_index (addr, guint32, 2);
+ if (gateway)
+ break;
+ }
+
+ if (gateway)
+ str = inet_ntop (AF_INET, &gateway, buf, sizeof (buf));
+ else
+ str = "";
+ g_value_set_string (target_value, str);
+ return TRUE;
+}
+
+static gboolean
+ip4_gateway_from_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ const char *text;
+ GPtrArray *addrs;
+ GArray *addr;
+ guint32 addrbytes, *addrvals;
+ int i;
+
+ text = g_value_get_string (source_value);
+ if (!ip_string_parse (text, AF_INET, &addrbytes, NULL))
+ return FALSE;
+
+ /* Fetch the original property value, so as to preserve the IP address elements */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &addrs,
+ NULL);
+ if (!addrs->len) {
+ g_ptr_array_unref (addrs);
+ return FALSE;
+ }
+ addr = addrs->pdata[0];
+ addrvals = (guint32 *)addr->data;
+ if (addrbytes == addrvals[2]) {
+ g_ptr_array_unref (addrs);
+ return FALSE;
+ }
+ addrvals[2] = addrbytes;
+
+ for (i = 1; i < addrs->len; i++) {
+ addr = addrs->pdata[i];
+ addrvals = (guint32 *)addr->data;
+ addrvals[2] = 0;
+ }
+
+ g_value_take_boxed (target_value, addrs);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip4_gateway_to_string:
+ * @source: the source object (eg, an #NMSettingIP4Config)
+ * @source_property: the property on @source to bind (eg,
+ * %NM_SETTING_IP4_CONFIG_ADDRESSES)
+ * @target: the target object (eg, an #NmtNewtEntry)
+ * @target_property: the property on @target to bind
+ * (eg, "text")
+ * @flags: %GBindingFlags
+ *
+ * Binds the %DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT property
+ * @source_property on @source to the %G_TYPE_STRING property
+ * @target_property on @target.
+ *
+ * Specifically, this binds the "gateway" field of the first address
+ * in @source_property; all other addresses in @source_property are
+ * ignored, and its "address" and "prefix" fields are unmodified.
+ */
+void
+nm_editor_bind_ip4_gateway_to_string (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ target, target_property,
+ flags,
+ ip4_gateway_to_string,
+ ip4_gateway_from_string,
+ NULL, NULL);
+}
+
+static gboolean
+ip4_route_transform_to_dest_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP4Route *route;
+ char buf[INET_ADDRSTRLEN], *string;
+ guint32 addrbytes;
+
+ route = g_value_get_boxed (source_value);
+ if (route)
+ addrbytes = nm_ip4_route_get_dest (route);
+ else
+ addrbytes = 0;
+
+ if (addrbytes) {
+ string = g_strdup_printf ("%s/%d",
+ inet_ntop (AF_INET, &addrbytes, buf, sizeof (buf)),
+ (int) nm_ip4_route_get_prefix (route));
+ g_value_take_string (target_value, string);
+ } else
+ g_value_set_string (target_value, "");
+ return TRUE;
+}
+
+static gboolean
+ip4_route_transform_to_next_hop_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP4Route *route;
+ char buf[INET_ADDRSTRLEN];
+ guint32 addrbytes;
+
+ route = g_value_get_boxed (source_value);
+ if (route)
+ addrbytes = nm_ip4_route_get_next_hop (route);
+ else
+ addrbytes = 0;
+
+ if (addrbytes)
+ inet_ntop (AF_INET, &addrbytes, buf, sizeof (buf));
+ else
+ buf[0] = '\0';
+ g_value_set_string (target_value, buf);
+ return TRUE;
+}
+
+static gboolean
+ip4_route_transform_to_metric_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP4Route *route;
+ char *string;
+
+ route = g_value_get_boxed (source_value);
+ if (route && nm_ip4_route_get_dest (route)) {
+ string = g_strdup_printf ("%lu", (gulong) nm_ip4_route_get_metric (route));
+ g_value_take_string (target_value, string);
+ } else
+ g_value_set_string (target_value, "");
+ return TRUE;
+}
+
+static gboolean
+ip4_route_transform_from_dest_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP4Route *route;
+ const char *text;
+ guint32 addrbytes, prefix;
+
+ text = g_value_get_string (source_value);
+ if (!ip_string_parse (text, AF_INET, &addrbytes, &prefix))
+ return FALSE;
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip4_route_set_dest (route, addrbytes);
+ nm_ip4_route_set_prefix (route, prefix);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+static gboolean
+ip4_route_transform_from_next_hop_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP4Route *route;
+ const char *text;
+ guint32 addrbytes;
+
+ text = g_value_get_string (source_value);
+ if (*text) {
+ if (!ip_string_parse (text, AF_INET, &addrbytes, NULL))
+ return FALSE;
+ } else
+ addrbytes = 0;
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip4_route_set_next_hop (route, addrbytes);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+static gboolean
+ip4_route_transform_from_metric_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP4Route *route;
+ const char *text;
+ guint32 metric;
+
+ text = g_value_get_string (source_value);
+ metric = strtoul (text, NULL, 10);
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip4_route_set_metric (route, metric);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip4_route_to_strings:
+ * @source: the source object
+ * @source_property: the source property
+ * @dest_target: the target object for the route's destionation
+ * @dest_target_property: the property on @dest_target
+ * @next_hop_target: the target object for the route's next hop
+ * @next_hop_target_property: the property on @next_hop_target
+ * @metric_target: the target object for the route's metric
+ * @metric_target_property: the property on @metric_target
+ * @flags: %GBindingFlags
+ *
+ * Binds the #NMIP4Route-valued property @source_property on @source
+ * to the three indicated string-valued target properties (and vice
+ * versa if %G_BINDING_BIDIRECTIONAL is specified).
+ *
+ * @dest_target_property should be an "address/prefix" string, as with
+ * nm_editor_bind_ip4_addresses_with_prefix_to_strv(). @next_hop_target
+ * is a plain IP address, and @metric_target is a number.
+ */
+void
+nm_editor_bind_ip4_route_to_strings (gpointer source,
+ const gchar *source_property,
+ gpointer dest_target,
+ const gchar *dest_target_property,
+ gpointer next_hop_target,
+ const gchar *next_hop_target_property,
+ gpointer metric_target,
+ const gchar *metric_target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ dest_target, dest_target_property,
+ flags,
+ ip4_route_transform_to_dest_string,
+ ip4_route_transform_from_dest_string,
+ NULL, NULL);
+ g_object_bind_property_full (source, source_property,
+ next_hop_target, next_hop_target_property,
+ flags,
+ ip4_route_transform_to_next_hop_string,
+ ip4_route_transform_from_next_hop_string,
+ NULL, NULL);
+ g_object_bind_property_full (source, source_property,
+ metric_target, metric_target_property,
+ flags,
+ ip4_route_transform_to_metric_string,
+ ip4_route_transform_from_metric_string,
+ NULL, NULL);
+}
+
+#define IP6_ADDRESS_SET(addr) ( addr \
+ && addr->len == sizeof (struct in6_addr) \
+ && memcmp (addr->data, &in6addr_any, addr->len) != 0)
+
+static gboolean
+ip6_addresses_with_prefix_to_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+ GValueArray *addr;
+ GValue *val;
+ GByteArray *addrbytes;
+ guint prefix;
+ char **strings, buf[INET6_ADDRSTRLEN];
+ int i;
+
+ addrs = g_value_get_boxed (source_value);
+ strings = g_new0 (char *, addrs->len + 1);
+
+ for (i = 0; i < addrs->len; i++) {
+ addr = addrs->pdata[i];
+ val = g_value_array_get_nth (addr, 0);
+ addrbytes = g_value_get_boxed (val);
+ val = g_value_array_get_nth (addr, 1);
+ prefix = g_value_get_uint (val);
+
+ if (IP6_ADDRESS_SET (addrbytes)) {
+ strings[i] = g_strdup_printf ("%s/%d",
+ inet_ntop (AF_INET6, addrbytes->data, buf, sizeof (buf)),
+ prefix);
+ } else
+ strings[i] = g_strdup ("");
+ }
+
+ g_value_take_boxed (target_value, strings);
+ return TRUE;
+}
+
+static gboolean
+ip6_addresses_with_prefix_from_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ char **strings;
+ GPtrArray *addrs;
+ GValueArray *addr;
+ guint32 prefix;
+ GValue val = G_VALUE_INIT, *valp;
+ GByteArray *ba;
+ int i;
+
+ strings = g_value_get_boxed (source_value);
+
+ /* Fetch the original property value, so as to preserve the gateway elements */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &addrs,
+ NULL);
+
+ for (i = 0; strings[i]; i++) {
+ if (i >= addrs->len) {
+ addr = g_value_array_new (3);
+
+ g_value_init (&val, DBUS_TYPE_G_UCHAR_ARRAY);
+ ba = g_byte_array_sized_new (sizeof (struct in6_addr));
+ g_byte_array_append (ba, (guint8 *) &in6addr_any, sizeof (struct in6_addr));
+ g_value_take_boxed (&val, ba);
+ g_value_array_append (addr, &val);
+ g_value_unset (&val);
+
+ g_value_init (&val, G_TYPE_UINT);
+ g_value_set_uint (&val, 128);
+ g_value_array_append (addr, &val);
+ g_value_unset (&val);
+
+ g_value_init (&val, DBUS_TYPE_G_UCHAR_ARRAY);
+ ba = g_byte_array_sized_new (sizeof (struct in6_addr));
+ g_byte_array_append (ba, (guint8 *) &in6addr_any, sizeof (struct in6_addr));
+ g_value_take_boxed (&val, ba);
+ g_value_array_append (addr, &val);
+ g_value_unset (&val);
+
+ g_ptr_array_add (addrs, addr);
+ } else
+ addr = addrs->pdata[i];
+
+ valp = g_value_array_get_nth (addr, 0);
+ ba = g_value_get_boxed (valp);
+ g_assert (ba->len == sizeof (struct in6_addr));
+
+ if (!ip_string_parse (strings[i], AF_INET6, ba->data, &prefix)) {
+ g_ptr_array_unref (addrs);
+ return FALSE;
+ }
+
+ valp = g_value_array_get_nth (addr, 1);
+ g_value_set_uint (valp, prefix);
+ }
+
+ g_ptr_array_set_size (addrs, i);
+ g_value_set_boxed (target_value, addrs);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip6_addresses_with_prefix_to_strv:
+ * @source: the source object (eg, an #NMSettingIP6Config)
+ * @source_property: the property on @source to bind (eg,
+ * %NM_SETTING_IP6_CONFIG_ADDRESSES)
+ * @target: the target object (eg, an #NmtAddressList)
+ * @target_property: the property on @target to bind
+ * (eg, "strings")
+ * @flags: %GBindingFlags
+ *
+ * Binds the %DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS property
+ * @source_property on @source to the %G_TYPE_STRV property
+ * @target_property on @target.
+ *
+ * Each address/prefix/gateway triplet in @source_property will be
+ * converted to a string of the form "ip::ad:dr:ess/prefix" in
+ * @target_property (and vice versa if %G_BINDING_BIDIRECTIONAL) is
+ * specified. The "gateway" fields in @source_property are ignored
+ * when converting to strings, and unmodified when converting from
+ * strings.
+ */
+void
+nm_editor_bind_ip6_addresses_with_prefix_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ target, target_property,
+ flags,
+ ip6_addresses_with_prefix_to_strv,
+ ip6_addresses_with_prefix_from_strv,
+ NULL, NULL);
+}
+
+static gboolean
+ip6_addresses_to_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+ GByteArray *addrbytes;
+ char buf[INET6_ADDRSTRLEN], **strings;
+ int i;
+
+ addrs = g_value_get_boxed (source_value);
+ strings = g_new0 (char *, addrs->len + 1);
+
+ for (i = 0; i < addrs->len; i++) {
+ addrbytes = addrs->pdata[i];
+ if (IP6_ADDRESS_SET (addrbytes))
+ inet_ntop (AF_INET6, addrbytes->data, buf, sizeof (buf));
+ else
+ buf[0] = '\0';
+ strings[i] = g_strdup (buf);
+ }
+
+ g_value_take_boxed (target_value, strings);
+ return TRUE;
+}
+
+static gboolean
+ip6_addresses_from_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ char **strings;
+ GPtrArray *addrs;
+ GByteArray *addr;
+ struct in6_addr addrbytes;
+ int i;
+
+ strings = g_value_get_boxed (source_value);
+ addrs = g_ptr_array_new ();
+
+ for (i = 0; strings[i]; i++) {
+ if (!ip_string_parse (strings[i], AF_INET6, &addrbytes, NULL)) {
+ while (i--)
+ g_byte_array_unref (addrs->pdata[i]);
+ g_ptr_array_unref (addrs);
+ return FALSE;
+ }
+
+ addr = g_byte_array_sized_new (sizeof (addrbytes));
+ g_byte_array_append (addr, (guint8 *)&addrbytes, sizeof (addrbytes));
+ g_ptr_array_add (addrs, addr);
+ }
+
+ g_value_take_boxed (target_value, addrs);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip6_addresses_to_strv:
+ * @source: the source object (eg, an #NMSettingIP6Config)
+ * @source_property: the property on @source to bind (eg,
+ * %NM_SETTING_IP6_CONFIG_DNS)
+ * @target: the target object (eg, an #NmtAddressList)
+ * @target_property: the property on @target to bind
+ * (eg, "strings")
+ * @flags: %GBindingFlags
+ *
+ * Binds the %DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR property
+ * @source_property on @source to the %G_TYPE_STRV property
+ * @target_property on @target.
+ *
+ * Each address in @source_property will be converted to a string of
+ * the form "ip::ad:dr:ess" in @target_property (and vice versa if
+ * %G_BINDING_BIDIRECTIONAL) is specified.
+ */
+void
+nm_editor_bind_ip6_addresses_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ target, target_property,
+ flags,
+ ip6_addresses_to_strv,
+ ip6_addresses_from_strv,
+ NULL, NULL);
+}
+
+static gboolean
+ip6_gateway_to_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+ GValueArray *addr;
+ GValue *val;
+ GByteArray *gateway;
+ char buf[INET6_ADDRSTRLEN];
+ const char *str;
+
+ addrs = g_value_get_boxed (source_value);
+ if (addrs->len == 0)
+ return FALSE;
+
+ addr = addrs->pdata[0];
+ val = g_value_array_get_nth (addr, 2);
+ gateway = g_value_get_boxed (val);
+
+ if (IP6_ADDRESS_SET (gateway))
+ str = inet_ntop (AF_INET6, gateway->data, buf, sizeof (buf));
+ else
+ str = "";
+ g_value_set_string (target_value, str);
+ return TRUE;
+}
+
+static gboolean
+ip6_gateway_from_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+ const char *text;
+ GValueArray *addr;
+ struct in6_addr gateway;
+ GValue *val;
+ GByteArray *ba;
+ int i;
+
+ text = g_value_get_string (source_value);
+ if (!ip_string_parse (text, AF_INET6, &gateway, NULL))
+ return FALSE;
+
+ /* Fetch the original property value, so as to preserve the IP address elements */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &addrs,
+ NULL);
+ if (!addrs->len) {
+ g_ptr_array_unref (addrs);
+ return FALSE;
+ }
+
+ addr = addrs->pdata[0];
+
+ ba = g_byte_array_sized_new (sizeof (gateway));
+ g_byte_array_append (ba, (guint8 *) &gateway, sizeof (gateway));
+
+ val = g_value_array_get_nth (addr, 2);
+ g_value_take_boxed (val, ba);
+
+ for (i = 1; i < addrs->len; i++) {
+ addr = addrs->pdata[i];
+ val = g_value_array_get_nth (addr, 2);
+ ba = g_value_get_boxed (val);
+
+ if (ba)
+ memset (ba->data, 0, ba->len);
+ }
+
+ g_value_take_boxed (target_value, addrs);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip6_gateway_to_string:
+ * @source: the source object (eg, an #NMSettingIP6Config)
+ * @source_property: the property on @source to bind (eg,
+ * %NM_SETTING_IP6_CONFIG_ADDRESSES)
+ * @target: the target object (eg, an #NmtNewtEntry)
+ * @target_property: the property on @target to bind
+ * (eg, "text")
+ * @flags: %GBindingFlags
+ *
+ * Binds the %DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS property
+ * @source_property on @source to the %G_TYPE_STRING property
+ * @target_property on @target.
+ *
+ * Specifically, this binds the "gateway" field of the first address
+ * in @source_property; all other addresses in @source_property are
+ * ignored, and its "address" and "prefix" fields are unmodified.
+ */
+void
+nm_editor_bind_ip6_gateway_to_string (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ target, target_property,
+ flags,
+ ip6_gateway_to_string,
+ ip6_gateway_from_string,
+ NULL, NULL);
+}
+
+#define IN6_ADDR_SET(bytes) (memcmp (bytes, &in6addr_any, sizeof (struct in6_addr)) != 0)
+
+static gboolean
+ip6_route_transform_to_dest_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP6Route *route;
+ char buf[INET6_ADDRSTRLEN], *string;
+ const struct in6_addr *addrbytes;
+
+ route = g_value_get_boxed (source_value);
+ if (route)
+ addrbytes = nm_ip6_route_get_dest (route);
+ else
+ addrbytes = &in6addr_any;
+
+ if (IN6_ADDR_SET (addrbytes)) {
+ string = g_strdup_printf ("%s/%d",
+ inet_ntop (AF_INET6, addrbytes, buf, sizeof (buf)),
+ (int) nm_ip6_route_get_prefix (route));
+ g_value_take_string (target_value, string);
+ } else
+ g_value_set_string (target_value, "");
+ return TRUE;
+}
+
+static gboolean
+ip6_route_transform_to_next_hop_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP6Route *route;
+ char buf[INET6_ADDRSTRLEN];
+ const struct in6_addr *addrbytes;
+
+ route = g_value_get_boxed (source_value);
+ if (route)
+ addrbytes = nm_ip6_route_get_next_hop (route);
+ else
+ addrbytes = &in6addr_any;
+
+ if (IN6_ADDR_SET (addrbytes))
+ inet_ntop (AF_INET6, addrbytes, buf, sizeof (buf));
+ else
+ buf[0] = '\0';
+ g_value_set_string (target_value, buf);
+ return TRUE;
+}
+
+static gboolean
+ip6_route_transform_to_metric_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP6Route *route;
+ char *string;
+
+ route = g_value_get_boxed (source_value);
+ if (route && IN6_ADDR_SET (nm_ip6_route_get_dest (route))) {
+ string = g_strdup_printf ("%lu", (gulong) nm_ip6_route_get_metric (route));
+ g_value_take_string (target_value, string);
+ } else
+ g_value_set_string (target_value, "");
+ return TRUE;
+}
+
+static gboolean
+ip6_route_transform_from_dest_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP6Route *route;
+ const char *text;
+ struct in6_addr addrbytes;
+ guint32 prefix;
+
+ text = g_value_get_string (source_value);
+ if (!ip_string_parse (text, AF_INET6, &addrbytes, &prefix))
+ return FALSE;
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip6_route_set_dest (route, &addrbytes);
+ nm_ip6_route_set_prefix (route, prefix);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+static gboolean
+ip6_route_transform_from_next_hop_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP6Route *route;
+ const char *text;
+ struct in6_addr addrbytes;
+
+ text = g_value_get_string (source_value);
+ if (*text) {
+ if (!ip_string_parse (text, AF_INET6, &addrbytes, NULL))
+ return FALSE;
+ } else
+ addrbytes = in6addr_any;
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip6_route_set_next_hop (route, &addrbytes);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+static gboolean
+ip6_route_transform_from_metric_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIP6Route *route;
+ const char *text;
+ guint32 metric;
+
+ text = g_value_get_string (source_value);
+ metric = strtoul (text, NULL, 10);
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip6_route_set_metric (route, metric);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip6_route_to_strings:
+ * @source: the source object
+ * @source_property: the source property
+ * @dest_target: the target object for the route's destionation
+ * @dest_target_property: the property on @dest_target
+ * @next_hop_target: the target object for the route's next hop
+ * @next_hop_target_property: the property on @next_hop_target
+ * @metric_target: the target object for the route's metric
+ * @metric_target_property: the property on @metric_target
+ * @flags: %GBindingFlags
+ *
+ * Binds the #NMIP6Route-valued property @source_property on @source
+ * to the three indicated string-valued target properties (and vice
+ * versa if %G_BINDING_BIDIRECTIONAL is specified).
+ *
+ * @dest_target_property should be an "address/prefix" string, as with
+ * nm_editor_bind_ip6_addresses_with_prefix_to_strv(). @next_hop_target
+ * is a plain IP address, and @metric_target is a number.
+ */
+void
+nm_editor_bind_ip6_route_to_strings (gpointer source,
+ const gchar *source_property,
+ gpointer dest_target,
+ const gchar *dest_target_property,
+ gpointer next_hop_target,
+ const gchar *next_hop_target_property,
+ gpointer metric_target,
+ const gchar *metric_target_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, source_property,
+ dest_target, dest_target_property,
+ flags,
+ ip6_route_transform_to_dest_string,
+ ip6_route_transform_from_dest_string,
+ NULL, NULL);
+ g_object_bind_property_full (source, source_property,
+ next_hop_target, next_hop_target_property,
+ flags,
+ ip6_route_transform_to_next_hop_string,
+ ip6_route_transform_from_next_hop_string,
+ NULL, NULL);
+ g_object_bind_property_full (source, source_property,
+ metric_target, metric_target_property,
+ flags,
+ ip6_route_transform_to_metric_string,
+ ip6_route_transform_from_metric_string,
+ NULL, NULL);
+}
+
+/* Wireless security method binding */
+typedef struct {
+ NMConnection *connection;
+ NMSettingWirelessSecurity *s_wsec;
+ gboolean s_wsec_in_use;
+
+ GObject *target;
+ char *target_property;
+
+ gboolean updating;
+} NMEditorWirelessSecurityMethodBinding;
+
+static const char *
+get_security_type (NMEditorWirelessSecurityMethodBinding *binding)
+{
+ const char *key_mgmt, *auth_alg;
+
+ if (!binding->s_wsec_in_use)
+ return "none";
+
+ key_mgmt = nm_setting_wireless_security_get_key_mgmt (binding->s_wsec);
+ auth_alg = nm_setting_wireless_security_get_auth_alg (binding->s_wsec);
+
+ /* No IEEE 802.1x */
+ if (!strcmp (key_mgmt, "none")) {
+ NMWepKeyType wep_type = nm_setting_wireless_security_get_wep_key_type (binding->s_wsec);
+
+ if (wep_type == NM_WEP_KEY_TYPE_KEY)
+ return "wep-key";
+ else
+ return "wep-passphrase";
+ }
+
+ if (!strcmp (key_mgmt, "ieee8021x")) {
+ if (auth_alg && !strcmp (auth_alg, "leap"))
+ return "leap";
+ return "dynamic-wep";
+ }
+
+ if ( !strcmp (key_mgmt, "wpa-none")
+ || !strcmp (key_mgmt, "wpa-psk"))
+ return "wpa-personal";
+
+ if (!strcmp (key_mgmt, "wpa-eap"))
+ return "wpa-enterprise";
+
+ return NULL;
+}
+
+static void
+wireless_security_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMEditorWirelessSecurityMethodBinding *binding = user_data;
+
+ if (binding->updating)
+ return;
+
+ binding->updating = TRUE;
+ g_object_set (binding->target,
+ binding->target_property, get_security_type (binding),
+ NULL);
+ binding->updating = FALSE;
+}
+
+static void
+wireless_connection_changed (NMConnection *connection,
+ gpointer user_data)
+{
+ NMEditorWirelessSecurityMethodBinding *binding = user_data;
+ NMSettingWirelessSecurity *s_wsec;
+
+ if (binding->updating)
+ return;
+
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ if ( (s_wsec && binding->s_wsec_in_use)
+ || (!s_wsec && !binding->s_wsec_in_use))
+ return;
+
+ binding->s_wsec_in_use = !binding->s_wsec_in_use;
+ wireless_security_changed (NULL, NULL, binding);
+}
+
+static void
+wireless_security_target_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMEditorWirelessSecurityMethodBinding *binding = user_data;
+ char *method;
+
+ if (binding->updating)
+ return;
+
+ g_object_get (binding->target,
+ binding->target_property, &method,
+ NULL);
+
+ binding->updating = TRUE;
+
+ if (!strcmp (method, "none")) {
+ if (!binding->s_wsec_in_use)
+ return;
+ binding->s_wsec_in_use = FALSE;
+ nm_connection_remove_setting (binding->connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
+
+ binding->updating = FALSE;
+ return;
+ }
+
+ if (!binding->s_wsec_in_use) {
+ binding->s_wsec_in_use = TRUE;
+ nm_connection_add_setting (binding->connection, NM_SETTING (binding->s_wsec));
+ }
+
+ if (!strcmp (method, "wep-key")) {
+ g_object_set (binding->s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_KEY,
+ NULL);
+ } else if (!strcmp (method, "wep-passphrase")) {
+ g_object_set (binding->s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_PASSPHRASE,
+ NULL);
+ } else if (!strcmp (method, "leap")) {
+ g_object_set (binding->s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_UNKNOWN,
+ NULL);
+ } else if (!strcmp (method, "dynamic-wep")) {
+ g_object_set (binding->s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_UNKNOWN,
+ NULL);
+ } else if (!strcmp (method, "wpa-personal")) {
+ g_object_set (binding->s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, NULL,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_UNKNOWN,
+ NULL);
+ } else if (!strcmp (method, "wpa-enterprise")) {
+ g_object_set (binding->s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap",
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, NULL,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_UNKNOWN,
+ NULL);
+ } else
+ g_warn_if_reached ();
+
+ binding->updating = FALSE;
+}
+
+static void
+wireless_security_target_destroyed (gpointer user_data,
+ GObject *ex_target)
+{
+ NMEditorWirelessSecurityMethodBinding *binding = user_data;
+
+ g_signal_handlers_disconnect_by_func (binding->s_wsec, G_CALLBACK (wireless_security_changed), binding);
+ g_object_unref (binding->s_wsec);
+ g_object_unref (binding->connection);
+
+ g_free (binding->target_property);
+
+ g_slice_free (NMEditorWirelessSecurityMethodBinding, binding);
+}
+
+/**
+ * nm_editor_bind_wireless_security_method:
+ * @connection: an #NMConnection
+ * @s_wsec: an #NMSettingWirelessSecurity
+ * @target: the target widget
+ * @target_property: the string-valued property on @target to bind
+ * @flags: %GBindingFlags
+ *
+ * Binds the wireless security method on @connection to
+ * @target_property on @target (and vice versa if
+ * %G_BINDING_BIDIRECTIONAL).
+ *
+ * @target_property will be of the values "none", "wpa-personal",
+ * "wpa-enterprise", "wep-key", "wep-passphrase", "dynamic-wep", or
+ * "leap".
+ *
+ * If binding bidirectionally, @s_wsec will be automatically added to
+ * or removed from @connection as needed when @target_property
+ * changes.
+ */
+void
+nm_editor_bind_wireless_security_method (NMConnection *connection,
+ NMSettingWirelessSecurity *s_wsec,
+ gpointer target,
+ const char *target_property,
+ GBindingFlags flags)
+{
+ NMEditorWirelessSecurityMethodBinding *binding;
+ char *notify;
+
+ binding = g_slice_new0 (NMEditorWirelessSecurityMethodBinding);
+
+ binding->target = target;
+ binding->target_property = g_strdup (target_property);
+ if (flags & G_BINDING_BIDIRECTIONAL) {
+ notify = g_strdup_printf ("notify::%s", target_property);
+ g_signal_connect (target, notify, G_CALLBACK (wireless_security_target_changed), binding);
+ g_free (notify);
+ }
+ g_object_weak_ref (target, wireless_security_target_destroyed, binding);
+
+ binding->connection = g_object_ref (connection);
+ g_signal_connect (connection, NM_CONNECTION_CHANGED,
+ G_CALLBACK (wireless_connection_changed), binding);
+ binding->s_wsec_in_use = (nm_connection_get_setting_wireless_security (connection) != NULL);
+
+ binding->s_wsec = g_object_ref (s_wsec);
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ G_CALLBACK (wireless_security_changed), binding);
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_AUTH_ALG,
+ G_CALLBACK (wireless_security_changed), binding);
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+ G_CALLBACK (wireless_security_changed), binding);
+
+ if (flags & G_BINDING_SYNC_CREATE)
+ wireless_security_changed (NULL, NULL, binding);
+}
+
+/* WEP key binding */
+
+typedef struct {
+ NMSettingWirelessSecurity *s_wsec;
+ GObject *entry, *key_selector;
+ char *entry_property, *key_selector_property;
+
+ gboolean updating;
+} NMEditorWepKeyBinding;
+
+static void
+wep_key_setting_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMEditorWepKeyBinding *binding = user_data;
+ const char *key;
+ int index;
+
+ if (binding->updating)
+ return;
+
+ index = nm_setting_wireless_security_get_wep_tx_keyidx (binding->s_wsec);
+ key = nm_setting_wireless_security_get_wep_key (binding->s_wsec, index);
+
+ binding->updating = TRUE;
+ g_object_set (binding->key_selector,
+ binding->key_selector_property, index,
+ NULL);
+ g_object_set (binding->entry,
+ binding->entry_property, key,
+ NULL);
+ binding->updating = FALSE;
+}
+
+static void
+wep_key_ui_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMEditorWepKeyBinding *binding = user_data;
+ char *key;
+ int index;
+
+ if (binding->updating)
+ return;
+
+ g_object_get (binding->key_selector,
+ binding->key_selector_property, &index,
+ NULL);
+ g_object_get (binding->entry,
+ binding->entry_property, &key,
+ NULL);
+
+ binding->updating = TRUE;
+ g_object_set (binding->s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, index,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, index == 0 ? key : NULL,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY1, index == 1 ? key : NULL,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY2, index == 2 ? key : NULL,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY3, index == 3 ? key : NULL,
+ NULL);
+ binding->updating = FALSE;
+
+ g_free (key);
+}
+
+static void
+wep_key_target_destroyed (gpointer user_data,
+ GObject *ex_target)
+{
+ NMEditorWepKeyBinding *binding = user_data;
+
+ g_signal_handlers_disconnect_by_func (binding->s_wsec, G_CALLBACK (wep_key_setting_changed), binding);
+
+ if (ex_target != binding->entry) {
+ g_signal_handlers_disconnect_by_func (binding->entry, G_CALLBACK (wep_key_ui_changed), binding);
+ g_object_weak_unref (binding->entry, wep_key_target_destroyed, binding);
+ } else {
+ g_signal_handlers_disconnect_by_func (binding->key_selector, G_CALLBACK (wep_key_ui_changed), binding);
+ g_object_weak_unref (binding->key_selector, wep_key_target_destroyed, binding);
+ }
+
+ g_object_unref (binding->s_wsec);
+ g_free (binding->entry_property);
+ g_free (binding->key_selector_property);
+
+ g_slice_free (NMEditorWepKeyBinding, binding);
+}
+
+/**
+ * nm_editor_bind_wireless_security_wep_key:
+ * @s_wsec: an #NMSettingWirelessSecurity
+ * @entry: an entry widget
+ * @entry_property: the string-valued property on @entry to bind
+ * @key_selector: a pop-up widget of some sort
+ * @key_selector_property: the integer-valued property on
+ * @key_selector to bind
+ * @flags: %GBindingFlags
+ *
+ * Binds the "wep-tx-keyidx" property on @s_wsec to
+ * @key_selector_property on @key_selector, and the corresponding
+ * "wep-keyN" property to @entry_property on @entry (and vice versa if
+ * %G_BINDING_BIDIRECTIONAL).
+ */
+void
+nm_editor_bind_wireless_security_wep_key (NMSettingWirelessSecurity *s_wsec,
+ gpointer entry,
+ const char *entry_property,
+ gpointer key_selector,
+ const char *key_selector_property,
+ GBindingFlags flags)
+{
+ NMEditorWepKeyBinding *binding;
+ char *notify;
+
+ binding = g_slice_new0 (NMEditorWepKeyBinding);
+ binding->s_wsec = g_object_ref (s_wsec);
+ binding->entry = entry;
+ binding->entry_property = g_strdup (entry_property);
+ binding->key_selector = key_selector;
+ binding->key_selector_property = g_strdup (key_selector_property);
+
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+ G_CALLBACK (wep_key_setting_changed), binding);
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_WEP_KEY1,
+ G_CALLBACK (wep_key_setting_changed), binding);
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_WEP_KEY2,
+ G_CALLBACK (wep_key_setting_changed), binding);
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_WEP_KEY3,
+ G_CALLBACK (wep_key_setting_changed), binding);
+
+ g_signal_connect (s_wsec, "notify::" NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX,
+ G_CALLBACK (wep_key_setting_changed), binding);
+
+ if (flags & G_BINDING_BIDIRECTIONAL) {
+ notify = g_strdup_printf ("notify::%s", entry_property);
+ g_signal_connect (entry, notify, G_CALLBACK (wep_key_ui_changed), binding);
+ g_free (notify);
+
+ notify = g_strdup_printf ("notify::%s", key_selector_property);
+ g_signal_connect (key_selector, notify, G_CALLBACK (wep_key_ui_changed), binding);
+ g_free (notify);
+ }
+
+ g_object_weak_ref (entry, wep_key_target_destroyed, binding);
+ g_object_weak_ref (key_selector, wep_key_target_destroyed, binding);
+
+ if (flags & G_BINDING_SYNC_CREATE)
+ wep_key_setting_changed (NULL, NULL, binding);
+}
+
+/* VLAN binding */
+
+typedef struct {
+ NMSettingVlan *s_vlan;
+
+ char *last_ifname_parent;
+ int last_ifname_id;
+
+ gboolean updating;
+} NMEditorVlanWidgetBinding;
+
+static gboolean
+parse_interface_name (const char *ifname,
+ char **parent_ifname,
+ int *id)
+{
+ const char *ifname_end;
+ char *end;
+
+ if (!ifname || !*ifname)
+ return FALSE;
+
+ if (g_str_has_prefix (ifname, "vlan")) {
+ ifname_end = ifname + 4;
+ *id = strtoul (ifname_end, &end, 10);
+ if (*end || end == (char *)ifname_end || *id < 0)
+ return FALSE;
+ *parent_ifname = NULL;
+ return TRUE;
+ }
+
+ ifname_end = strchr (ifname, '.');
+ if (ifname_end) {
+ *id = strtoul (ifname_end + 1, &end, 10);
+ if (*end || end == (char *)ifname_end + 1 || *id < 0)
+ return FALSE;
+ *parent_ifname = g_strndup (ifname, ifname_end - ifname);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+vlan_settings_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMEditorVlanWidgetBinding *binding = user_data;
+ const char *ifname, *parent;
+ char *ifname_parent;
+ int ifname_id, id;
+
+ if (binding->updating)
+ return;
+
+ ifname = nm_setting_vlan_get_interface_name (binding->s_vlan);
+ parent = nm_setting_vlan_get_parent (binding->s_vlan);
+ id = nm_setting_vlan_get_id (binding->s_vlan);
+
+ if (!parse_interface_name (ifname, &ifname_parent, &ifname_id))
+ return;
+
+ /* If the id in INTERFACE_NAME changed, and ID is either unset, or was previously
+ * in sync with INTERFACE_NAME, then update ID.
+ */
+ if ( id != ifname_id
+ && (id == binding->last_ifname_id || id == 0)) {
+ binding->updating = TRUE;
+ g_object_set (G_OBJECT (binding->s_vlan),
+ NM_SETTING_VLAN_ID, ifname_id,
+ NULL);
+ binding->updating = FALSE;
+ }
+
+ /* If the PARENT in INTERFACE_NAME changed, and PARENT is either unset, or was
+ * previously in sync with INTERFACE_NAME, then update PARENT.
+ */
+ if ( g_strcmp0 (parent, ifname_parent) != 0
+ && ( g_strcmp0 (parent, binding->last_ifname_parent) == 0
+ || !parent || !*parent)) {
+ binding->updating = TRUE;
+ g_object_set (G_OBJECT (binding->s_vlan),
+ NM_SETTING_VLAN_PARENT, ifname_parent,
+ NULL);
+ binding->updating = FALSE;
+ }
+
+ g_free (binding->last_ifname_parent);
+ binding->last_ifname_parent = ifname_parent;
+ binding->last_ifname_id = ifname_id;
+}
+
+static void
+vlan_target_destroyed (gpointer user_data,
+ GObject *ex_target)
+{
+ NMEditorVlanWidgetBinding *binding = user_data;
+
+ g_free (binding->last_ifname_parent);
+ g_slice_free (NMEditorVlanWidgetBinding, binding);
+}
+
+/**
+ * nm_editor_bind_vlan_name:
+ * @s_vlan: an #NMSettingVlan
+ *
+ * Binds together several properties on @s_vlan, so that if the
+ * %NM_SETTING_VLAN_INTERFACE_NAME matches %NM_SETTING_VLAN_PARENT
+ * and %NM_SETTING_VLAN_ID in the obvious way, then changes to
+ * %NM_SETTING_VLAN_INTERFACE_NAME will propagate to the other
+ * two properties automatically.
+ */
+void
+nm_editor_bind_vlan_name (NMSettingVlan *s_vlan)
+{
+ NMEditorVlanWidgetBinding *binding;
+ const char *ifname;
+
+ binding = g_slice_new0 (NMEditorVlanWidgetBinding);
+ binding->s_vlan = s_vlan;
+
+ g_signal_connect (s_vlan, "notify::" NM_SETTING_VLAN_INTERFACE_NAME,
+ G_CALLBACK (vlan_settings_changed), binding);
+
+ g_object_weak_ref (G_OBJECT (s_vlan), vlan_target_destroyed, binding);
+
+ ifname = nm_setting_vlan_get_interface_name (s_vlan);
+ if (!parse_interface_name (ifname, &binding->last_ifname_parent, &binding->last_ifname_id)) {
+ binding->last_ifname_parent = NULL;
+ binding->last_ifname_id = 0;
+ }
+}
diff --git a/tui/nm-editor-bindings.h b/tui/nm-editor-bindings.h
new file mode 100644
index 000000000..a7a32dd14
--- /dev/null
+++ b/tui/nm-editor-bindings.h
@@ -0,0 +1,99 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_EDITOR_BINDINGS_H
+#define NM_EDITOR_BINDINGS_H
+
+#include <glib-object.h>
+#include <nm-connection.h>
+#include <nm-setting-wireless-security.h>
+#include <nm-setting-vlan.h>
+
+G_BEGIN_DECLS
+
+void nm_editor_bindings_init (void);
+
+void nm_editor_bind_ip4_addresses_with_prefix_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags);
+void nm_editor_bind_ip4_addresses_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags);
+void nm_editor_bind_ip4_gateway_to_string (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags);
+
+void nm_editor_bind_ip4_route_to_strings (gpointer source,
+ const gchar *source_property,
+ gpointer dest_target,
+ const gchar *dest_target_property,
+ gpointer next_hop_target,
+ const gchar *next_hop_target_property,
+ gpointer metric_target,
+ const gchar *metric_target_property,
+ GBindingFlags flags);
+
+void nm_editor_bind_ip6_addresses_with_prefix_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags);
+void nm_editor_bind_ip6_addresses_to_strv (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags);
+void nm_editor_bind_ip6_gateway_to_string (gpointer source,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags);
+
+void nm_editor_bind_ip6_route_to_strings (gpointer source,
+ const gchar *source_property,
+ gpointer dest_target,
+ const gchar *dest_target_property,
+ gpointer next_hop_target,
+ const gchar *next_hop_target_property,
+ gpointer metric_target,
+ const gchar *metric_target_property,
+ GBindingFlags flags);
+
+void nm_editor_bind_wireless_security_method (NMConnection *connection,
+ NMSettingWirelessSecurity *s_wsec,
+ gpointer target,
+ const char *target_property,
+ GBindingFlags flags);
+void nm_editor_bind_wireless_security_wep_key (NMSettingWirelessSecurity *s_wsec,
+ gpointer entry,
+ const char *entry_property,
+ gpointer key_selector,
+ const char *key_selector_property,
+ GBindingFlags flags);
+
+void nm_editor_bind_vlan_name (NMSettingVlan *s_vlan);
+
+G_END_DECLS
+
+#endif /* NM_EDITOR_BINDINGS_H */
diff --git a/tui/nm-editor-utils.c b/tui/nm-editor-utils.c
new file mode 100644
index 000000000..4ac0eb641
--- /dev/null
+++ b/tui/nm-editor-utils.c
@@ -0,0 +1,423 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2012, 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nm-editor-utils
+ * @short_description: Miscellaneous connection editor utilities
+ *
+ * nm-editor-utils contains helper functions for connection editors.
+ * The goal is that this should eventually be shared between nmtui,
+ * nm-connection-editor, and gnome-control-center.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <nm-utils.h>
+
+#include <nm-device-bond.h>
+#include <nm-device-bridge.h>
+#include <nm-device-team.h>
+#include <nm-device-ethernet.h>
+#include <nm-device-infiniband.h>
+#include <nm-device-team.h>
+#include <nm-device-vlan.h>
+#include <nm-device-wifi.h>
+
+#include "nm-editor-utils.h"
+#if 0
+#include "vpn-helpers.h"
+
+static GSList *vpn_plugins;
+
+static gint
+sort_vpn_plugins (gconstpointer a, gconstpointer b)
+{
+ NMVpnPluginUiInterface *aa = NM_VPN_PLUGIN_UI_INTERFACE (a);
+ NMVpnPluginUiInterface *bb = NM_VPN_PLUGIN_UI_INTERFACE (b);
+ char *aa_desc = NULL, *bb_desc = NULL;
+ int ret;
+
+ g_object_get (aa, NM_VPN_PLUGIN_UI_INTERFACE_NAME, &aa_desc, NULL);
+ g_object_get (bb, NM_VPN_PLUGIN_UI_INTERFACE_NAME, &bb_desc, NULL);
+
+ ret = g_strcmp0 (aa_desc, bb_desc);
+
+ g_free (aa_desc);
+ g_free (bb_desc);
+
+ return ret;
+}
+#endif
+
+static void
+wifi_connection_setup_func (NMConnection *connection,
+ NMSettingConnection *s_con,
+ NMSetting *s_hw)
+{
+ g_object_set (G_OBJECT (s_hw),
+ NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA,
+ NULL);
+}
+
+static void
+bond_connection_setup_func (NMConnection *connection,
+ NMSettingConnection *s_con,
+ NMSetting *s_hw)
+{
+ NMSettingBond *s_bond = NM_SETTING_BOND (s_hw);
+ const char **options, *def, *cur;
+ int i;
+
+ options = nm_setting_bond_get_valid_options (s_bond);
+ for (i = 0; options[i]; i++) {
+ def = nm_setting_bond_get_option_default (s_bond, options[i]);
+ cur = nm_setting_bond_get_option_by_name (s_bond, options[i]);
+ if (g_strcmp0 (def, cur) != 0)
+ nm_setting_bond_add_option (s_bond, options[i], def);
+ }
+}
+
+typedef void (*NMEditorNewConnectionSetupFunc) (NMConnection *connection,
+ NMSettingConnection *s_con,
+ NMSetting *s_hw);
+
+typedef struct {
+ NMEditorConnectionTypeData data;
+
+ const char *id_format;
+ NMEditorNewConnectionSetupFunc connection_setup_func;
+ gboolean no_autoconnect;
+} NMEditorConnectionTypeDataReal;
+
+static gint
+sort_types (gconstpointer a, gconstpointer b)
+{
+ NMEditorConnectionTypeData *typea = *(NMEditorConnectionTypeData **)a;
+ NMEditorConnectionTypeData *typeb = *(NMEditorConnectionTypeData **)b;
+
+ if (typea->virtual && !typeb->virtual)
+ return 1;
+ else if (typeb->virtual && !typea->virtual)
+ return -1;
+
+ if (typea->setting_type == NM_TYPE_SETTING_VPN &&
+ typeb->setting_type != NM_TYPE_SETTING_VPN)
+ return 1;
+ else if (typeb->setting_type == NM_TYPE_SETTING_VPN &&
+ typea->setting_type != NM_TYPE_SETTING_VPN)
+ return -1;
+
+ return g_utf8_collate (typea->name, typeb->name);
+}
+
+/**
+ * nm_editor_utils_get_connection_type_list:
+ *
+ * Gets an array of information about supported connection types. The
+ * array is sorted in a standard presentation order (hardware types
+ * first, alphabetized, then virtual types, alphabetized, then VPN
+ * types, alphabetized).
+ *
+ * Returns: the array of connection type information
+ */
+NMEditorConnectionTypeData **
+nm_editor_utils_get_connection_type_list (void)
+{
+ GPtrArray *array;
+ NMEditorConnectionTypeDataReal *item;
+ static NMEditorConnectionTypeData **list;
+#if 0
+ GHashTable *vpn_plugins_hash;
+ gboolean have_vpn_plugins;
+#endif
+
+ if (list)
+ return list;
+
+ array = g_ptr_array_new ();
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("Ethernet");
+ item->data.setting_type = NM_TYPE_SETTING_WIRED;
+ item->data.device_type = NM_TYPE_DEVICE_ETHERNET;
+ item->data.virtual = FALSE;
+ item->id_format = _("Ethernet connection %d");
+ g_ptr_array_add (array, item);
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("Wi-Fi");
+ item->data.setting_type = NM_TYPE_SETTING_WIRELESS;
+ item->data.device_type = NM_TYPE_DEVICE_WIFI;
+ item->data.virtual = FALSE;
+ item->id_format = _("Wi-Fi connection %d");
+ item->connection_setup_func = wifi_connection_setup_func;
+ g_ptr_array_add (array, item);
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("InfiniBand");
+ item->data.setting_type = NM_TYPE_SETTING_INFINIBAND;
+ item->data.device_type = NM_TYPE_DEVICE_INFINIBAND;
+ item->data.virtual = FALSE;
+ item->id_format = _("InfiniBand connection %d");
+ g_ptr_array_add (array, item);
+
+#if 0
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("Mobile Broadband");
+ item->data.setting_type = NM_TYPE_SETTING_GSM;
+ item->data.virtual = FALSE;
+ item->id_format = _("Mobile broadband connection %d");
+ item->no_autoconnect = TRUE;
+ g_ptr_array_add (array, item);
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("DSL");
+ item->data.setting_type = NM_TYPE_SETTING_PPPOE;
+ item->data.device_type = NM_TYPE_DEVICE_ETHERNET;
+ item->data.virtual = FALSE;
+ item->id_format = _("DSL connection %d");
+ item->no_autoconnect = TRUE;
+ g_ptr_array_add (array, item);
+#endif
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("Bond");
+ item->data.setting_type = NM_TYPE_SETTING_BOND;
+ item->data.device_type = NM_TYPE_DEVICE_BOND;
+ item->data.virtual = TRUE;
+ item->id_format = _("Bond connection %d");
+ item->connection_setup_func = bond_connection_setup_func;
+ g_ptr_array_add (array, item);
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("Bridge");
+ item->data.setting_type = NM_TYPE_SETTING_BRIDGE;
+ item->data.slave_setting_type = NM_TYPE_SETTING_BRIDGE_PORT;
+ item->data.device_type = NM_TYPE_DEVICE_BRIDGE;
+ item->data.virtual = TRUE;
+ item->id_format = _("Bridge connection %d");
+ g_ptr_array_add (array, item);
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("Team");
+ item->data.setting_type = NM_TYPE_SETTING_TEAM;
+ item->data.slave_setting_type = NM_TYPE_SETTING_TEAM_PORT;
+ item->data.device_type = NM_TYPE_DEVICE_TEAM;
+ item->data.virtual = TRUE;
+ item->id_format = _("Team connection %d");
+ g_ptr_array_add (array, item);
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("VLAN");
+ item->data.setting_type = NM_TYPE_SETTING_VLAN;
+ item->data.device_type = NM_TYPE_DEVICE_VLAN;
+ item->data.virtual = TRUE;
+ item->id_format = _("VLAN connection %d");
+ g_ptr_array_add (array, item);
+
+#if 0
+ /* Add "VPN" only if there are plugins */
+ vpn_plugins_hash = vpn_get_plugins (NULL);
+ have_vpn_plugins = vpn_plugins_hash && g_hash_table_size (vpn_plugins_hash);
+ if (have_vpn_plugins) {
+ GHashTableIter iter;
+ gpointer name, plugin;
+
+ item = g_new0 (NMEditorConnectionTypeDataReal, 1);
+ item->data.name = _("VPN");
+ item->data.setting_type = NM_TYPE_SETTING_VPN;
+ item->data.virtual = TRUE;
+ item->id_format = _("VPN connection %d");
+ item->no_autoconnect = TRUE;
+ g_ptr_array_add (array, item);
+
+ vpn_plugins = NULL;
+ g_hash_table_iter_init (&iter, vpn_plugins_hash);
+ while (g_hash_table_iter_next (&iter, &name, &plugin))
+ vpn_plugins = g_slist_prepend (vpn_plugins, plugin);
+ vpn_plugins = g_slist_sort (vpn_plugins, sort_vpn_plugins);
+ }
+#endif
+
+ g_ptr_array_sort (array, sort_types);
+ g_ptr_array_add (array, NULL);
+
+ list = (NMEditorConnectionTypeData **)g_ptr_array_free (array, FALSE);
+ return list;
+}
+
+static char *
+get_available_connection_name (const char *format,
+ NMRemoteSettings *settings)
+{
+ GSList *connections, *iter, *names = NULL;
+ char *cname = NULL;
+ int i = 0;
+
+ connections = nm_remote_settings_list_connections (settings);
+ for (iter = connections; iter; iter = iter->next) {
+ const char *id;
+
+ id = nm_connection_get_id (NM_CONNECTION (iter->data));
+ g_assert (id);
+ names = g_slist_append (names, (gpointer) id);
+ }
+ g_slist_free (connections);
+
+ /* Find the next available unique connection name */
+ while (!cname && (i++ < 10000)) {
+ char *temp;
+ gboolean found = FALSE;
+
+ temp = g_strdup_printf (format, i);
+ for (iter = names; iter; iter = g_slist_next (iter)) {
+ if (!strcmp (iter->data, temp)) {
+ found = TRUE;
+ break;
+ }
+ }
+ if (!found)
+ cname = temp;
+ else
+ g_free (temp);
+ }
+
+ g_slist_free (names);
+ return cname;
+}
+
+/**
+ * nm_editor_utils_create_connection:
+ * @type: the type of the connection's primary #NMSetting
+ * @master: (allow-none): the connection's master, if any
+ * @settings: an #NMRemoteSettings
+ *
+ * Creates a new #NMConnection of the given type, automatically
+ * creating a UUID and an appropriate not-currently-in-use connection
+ * name, setting #NMSettingConnection:autoconnect appropriately for
+ * the connection type, filling in slave-related information if
+ * @master is not %NULL, and initializing any other mandatory-to-set
+ * properties to reasonable initial values.
+ *
+ * Returns: a new #NMConnection
+ */
+NMConnection *
+nm_editor_utils_create_connection (GType type,
+ NMConnection *master,
+ NMRemoteSettings *settings)
+{
+ NMEditorConnectionTypeData **types;
+ NMEditorConnectionTypeDataReal *type_data = NULL;
+ const char *master_setting_type = NULL, *master_uuid = NULL;
+ GType master_type = G_TYPE_INVALID, slave_setting_type = G_TYPE_INVALID;
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSetting *s_hw, *s_slave;
+ char *uuid, *id;
+ int i;
+
+ if (master) {
+ NMSettingConnection *master_s_con;
+
+ master_s_con = nm_connection_get_setting_connection (master);
+ master_setting_type = nm_setting_connection_get_connection_type (master_s_con);
+ master_uuid = nm_setting_connection_get_uuid (master_s_con);
+ master_type = nm_connection_lookup_setting_type (master_setting_type);
+ }
+
+ types = nm_editor_utils_get_connection_type_list ();
+ for (i = 0; types[i]; i++) {
+ if (types[i]->setting_type == type)
+ type_data = (NMEditorConnectionTypeDataReal *)types[i];
+ if (types[i]->setting_type == master_type)
+ slave_setting_type = types[i]->slave_setting_type;
+
+ }
+ if (!type_data) {
+ g_return_val_if_reached (NULL);
+ return NULL;
+ }
+
+ connection = nm_connection_new ();
+
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ s_hw = g_object_new (type, NULL);
+ nm_connection_add_setting (connection, s_hw);
+
+ if (slave_setting_type != G_TYPE_INVALID) {
+ s_slave = g_object_new (slave_setting_type, NULL);
+ nm_connection_add_setting (connection, s_slave);
+ }
+
+ uuid = nm_utils_uuid_generate ();
+ id = get_available_connection_name (type_data->id_format, settings);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_ID, id,
+ NM_SETTING_CONNECTION_TYPE, nm_setting_get_name (s_hw),
+ NM_SETTING_CONNECTION_AUTOCONNECT, !type_data->no_autoconnect,
+ NM_SETTING_CONNECTION_MASTER, master_uuid,
+ NM_SETTING_CONNECTION_SLAVE_TYPE, master_setting_type,
+ NULL);
+
+ g_free (uuid);
+ g_free (id);
+
+ if (type_data->connection_setup_func)
+ type_data->connection_setup_func (connection, s_con, s_hw);
+
+ return connection;
+}
+
+/**
+ * nm_editor_utils_get_connection_type_data:
+ * @conn: an #NMConnection
+ *
+ * Gets the #NMEditorConnectionTypeData corresponding to
+ * @conn's connection type.
+ *
+ * Returns: the #NMEditorConnectionTypeData
+ */
+NMEditorConnectionTypeData *
+nm_editor_utils_get_connection_type_data (NMConnection *conn)
+{
+ NMSettingConnection *s_con;
+ const char *conn_type;
+ GType conn_gtype;
+ NMEditorConnectionTypeData **types;
+ int i;
+
+ s_con = nm_connection_get_setting_connection (conn);
+ g_return_val_if_fail (s_con != NULL, NULL);
+
+ conn_type = nm_setting_connection_get_connection_type (s_con);
+ conn_gtype = nm_connection_lookup_setting_type (conn_type);
+ g_return_val_if_fail (conn_gtype != G_TYPE_INVALID, NULL);
+
+ types = nm_editor_utils_get_connection_type_list ();
+ for (i = 0; types[i]; i++) {
+ if (types[i]->setting_type == conn_gtype)
+ return types[i];
+ }
+
+ return NULL;
+}
diff --git a/tui/nm-editor-utils.h b/tui/nm-editor-utils.h
new file mode 100644
index 000000000..4b9ad5edb
--- /dev/null
+++ b/tui/nm-editor-utils.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2012, 2013 Red Hat, Inc.
+ */
+
+#ifndef NM_EDITOR_UTILS_H
+#define NM_EDITOR_UTILS_H
+
+#include <glib-object.h>
+#include <nm-remote-settings.h>
+
+G_BEGIN_DECLS
+
+typedef struct {
+ const char *name;
+ GType setting_type;
+ GType slave_setting_type;
+ GType device_type;
+ gboolean virtual;
+} NMEditorConnectionTypeData;
+
+NMEditorConnectionTypeData **nm_editor_utils_get_connection_type_list (void);
+NMEditorConnectionTypeData *nm_editor_utils_get_connection_type_data (NMConnection *conn);
+
+NMConnection *nm_editor_utils_create_connection (GType type,
+ NMConnection *master,
+ NMRemoteSettings *settings);
+
+G_END_DECLS
+
+#endif /* NM_EDITOR_UTILS_H */
diff --git a/tui/nmt-address-list.c b/tui/nmt-address-list.c
new file mode 100644
index 000000000..da301a2fd
--- /dev/null
+++ b/tui/nmt-address-list.c
@@ -0,0 +1,284 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-address-list
+ * @short_description: An editable list of IP addresses or hostnames
+ *
+ * #NmtAddressList is a subclass of #NmtWidgetList that contains
+ * entries displaying IP addresses, address/prefix strings, or
+ * hostnames. This is designed for binding its #NmtAddressList:strings
+ * property to an appropriate #NMSettingIP4Config or
+ * #NMSettingIP6Config property via one of the nm-editor-bindings
+ * functions.
+ */
+
+#include "config.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <dbus/dbus-glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-address-list.h"
+#include "nmt-ip-entry.h"
+
+G_DEFINE_TYPE (NmtAddressList, nmt_address_list, NMT_TYPE_WIDGET_LIST)
+
+#define NMT_ADDRESS_LIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_ADDRESS_LIST, NmtAddressListPrivate))
+
+typedef struct {
+ NmtAddressListType list_type;
+ char **strings;
+} NmtAddressListPrivate;
+
+enum {
+ PROP_0,
+ PROP_LIST_TYPE,
+ PROP_STRINGS,
+
+ LAST_PROP
+};
+
+/**
+ * NmtAddressListType:
+ * @NMT_ADDRESS_LIST_IP4_WITH_PREFIX: IPv4 address/prefix strings
+ * @NMT_ADDRESS_LIST_IP4: IPv4 addresses
+ * @NMT_ADDRESS_LIST_IP6_WITH_PREFIX: IPv6 address/prefix strings
+ * @NMT_ADDRESS_LIST_IP6: IPv6 addresses
+ * @NMT_ADDRESS_LIST_HOSTNAME: hostnames
+ *
+ * The type of address in an #NmtAddressList
+ */
+
+/**
+ * nmt_address_list_new:
+ * @list_type: the type of address the list will contain
+ *
+ * Creates a new #NmtAddressList
+ *
+ * Returns: a new #NmtAddressList
+ */
+NmtNewtWidget *
+nmt_address_list_new (NmtAddressListType list_type)
+{
+ return g_object_new (NMT_TYPE_ADDRESS_LIST,
+ "list-type", list_type,
+ NULL);
+}
+
+static void
+nmt_address_list_init (NmtAddressList *list)
+{
+}
+
+static gboolean
+strings_transform_to_entry (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ int n = GPOINTER_TO_INT (user_data);
+ char **strings;
+
+ strings = g_value_get_boxed (source_value);
+ if (n >= g_strv_length (strings))
+ return FALSE;
+
+ g_value_set_string (target_value, strings[n]);
+ return TRUE;
+}
+
+static gboolean
+strings_transform_from_entry (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NmtAddressList *list = NMT_ADDRESS_LIST (g_binding_get_source (binding));
+ NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE (list);
+ int n = GPOINTER_TO_INT (user_data);
+
+ if (n >= g_strv_length (priv->strings))
+ return FALSE;
+
+ g_free (priv->strings[n]);
+ priv->strings[n] = g_value_dup_string (source_value);
+
+ g_value_set_boxed (target_value, priv->strings);
+ return TRUE;
+}
+
+static gboolean
+hostname_filter (NmtNewtEntry *entry,
+ const char *text,
+ int ch,
+ int position,
+ gpointer user_data)
+{
+ return g_ascii_isalnum (ch) || ch == '.' || ch == '-';
+}
+
+static NmtNewtWidget *
+nmt_address_list_create_widget (NmtWidgetList *list,
+ int num)
+{
+ NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE (list);
+ NmtNewtWidget *entry;
+
+ if (priv->list_type == NMT_ADDRESS_LIST_IP4_WITH_PREFIX)
+ entry = nmt_ip_entry_new (25, AF_INET, TRUE, FALSE);
+ else if (priv->list_type == NMT_ADDRESS_LIST_IP4)
+ entry = nmt_ip_entry_new (25, AF_INET, FALSE, FALSE);
+ else if (priv->list_type == NMT_ADDRESS_LIST_IP6_WITH_PREFIX)
+ entry = nmt_ip_entry_new (25, AF_INET6, TRUE, FALSE);
+ else if (priv->list_type == NMT_ADDRESS_LIST_IP6)
+ entry = nmt_ip_entry_new (25, AF_INET6, FALSE, FALSE);
+ else if (priv->list_type == NMT_ADDRESS_LIST_HOSTNAME) {
+ entry = nmt_newt_entry_new (25, NMT_NEWT_ENTRY_NONEMPTY);
+ nmt_newt_entry_set_filter (NMT_NEWT_ENTRY (entry), hostname_filter, list);
+ } else
+ g_assert_not_reached ();
+
+ g_object_bind_property_full (list, "strings", entry, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
+ strings_transform_to_entry,
+ strings_transform_from_entry,
+ GINT_TO_POINTER (num), NULL);
+
+ return entry;
+}
+
+static void
+nmt_address_list_add_clicked (NmtWidgetList *list)
+{
+ NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE (list);
+ int len;
+
+ len = g_strv_length (priv->strings);
+ priv->strings = g_renew (char *, priv->strings, len + 2);
+ priv->strings[len] = g_strdup ("");
+ priv->strings[len + 1] = NULL;
+
+ nmt_widget_list_set_length (list, len + 1);
+ g_object_notify (G_OBJECT (list), "strings");
+}
+
+static void
+nmt_address_list_remove_clicked (NmtWidgetList *list,
+ int num)
+{
+ NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE (list);
+ int len;
+
+ len = g_strv_length (priv->strings);
+ g_free (priv->strings[num]);
+ memmove (priv->strings + num, priv->strings + num + 1, (len - num) * sizeof (char *));
+
+ nmt_widget_list_set_length (list, len - 1);
+ g_object_notify (G_OBJECT (list), "strings");
+}
+
+static void
+nmt_address_list_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_LIST_TYPE:
+ priv->list_type = g_value_get_uint (value);
+ break;
+ case PROP_STRINGS:
+ g_strfreev (priv->strings);
+ priv->strings = g_value_dup_boxed (value);
+ if (!priv->strings)
+ priv->strings = g_new0 (char *, 1);
+ nmt_widget_list_set_length (NMT_WIDGET_LIST (object),
+ g_strv_length (priv->strings));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_address_list_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_LIST_TYPE:
+ g_value_set_uint (value, priv->list_type);
+ break;
+ case PROP_STRINGS:
+ g_value_set_boxed (value, priv->strings);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_address_list_class_init (NmtAddressListClass *list_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (list_class);
+ NmtWidgetListClass *widget_list_class = NMT_WIDGET_LIST_CLASS (list_class);
+
+ g_type_class_add_private (list_class, sizeof (NmtAddressListPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_address_list_set_property;
+ object_class->get_property = nmt_address_list_get_property;
+
+ widget_list_class->create_widget = nmt_address_list_create_widget;
+ widget_list_class->add_clicked = nmt_address_list_add_clicked;
+ widget_list_class->remove_clicked = nmt_address_list_remove_clicked;
+
+ /**
+ * NmtAddressList:list-type:
+ *
+ * The type of address the list holds.
+ */
+ g_object_class_install_property (object_class, PROP_LIST_TYPE,
+ g_param_spec_uint ("list-type", "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtAddressList:strings:
+ *
+ * The strings in the list's entries.
+ */
+ g_object_class_install_property (object_class, PROP_STRINGS,
+ g_param_spec_boxed ("strings", "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-address-list.h b/tui/nmt-address-list.h
new file mode 100644
index 000000000..df7a4f796
--- /dev/null
+++ b/tui/nmt-address-list.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_ADDRESS_LIST_H
+#define NMT_ADDRESS_LIST_H
+
+#include "nmt-widget-list.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_ADDRESS_LIST (nmt_address_list_get_type ())
+#define NMT_ADDRESS_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_ADDRESS_LIST, NmtAddressList))
+#define NMT_ADDRESS_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_ADDRESS_LIST, NmtAddressListClass))
+#define NMT_IS_ADDRESS_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_ADDRESS_LIST))
+#define NMT_IS_ADDRESS_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_ADDRESS_LIST))
+#define NMT_ADDRESS_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_ADDRESS_LIST, NmtAddressListClass))
+
+typedef struct {
+ NmtWidgetList parent;
+
+} NmtAddressList;
+
+typedef struct {
+ NmtWidgetListClass parent;
+
+} NmtAddressListClass;
+
+GType nmt_address_list_get_type (void);
+
+typedef enum {
+ NMT_ADDRESS_LIST_IP4_WITH_PREFIX,
+ NMT_ADDRESS_LIST_IP4,
+ NMT_ADDRESS_LIST_IP6_WITH_PREFIX,
+ NMT_ADDRESS_LIST_IP6,
+ NMT_ADDRESS_LIST_HOSTNAME
+} NmtAddressListType;
+
+NmtNewtWidget *nmt_address_list_new (NmtAddressListType list_type);
+
+G_END_DECLS
+
+#endif /* NMT_ADDRESS_LIST_H */
diff --git a/tui/nmt-connect-connection-list.c b/tui/nmt-connect-connection-list.c
new file mode 100644
index 000000000..54923ea54
--- /dev/null
+++ b/tui/nmt-connect-connection-list.c
@@ -0,0 +1,720 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-connect-connection-list
+ * @short_description: Connection list for "nmtui connect"
+ *
+ * #NmtConnectConnectionList is the list of devices, connections, and
+ * access points displayed by "nmtui connect".
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include <nm-access-point.h>
+#include <nm-device-wifi.h>
+#include <nm-utils.h>
+
+#include "nmtui.h"
+#include "nmt-connect-connection-list.h"
+
+G_DEFINE_TYPE (NmtConnectConnectionList, nmt_connect_connection_list, NMT_TYPE_NEWT_LISTBOX)
+
+#define NMT_CONNECT_CONNECTION_LIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_CONNECT_CONNECTION_LIST, NmtConnectConnectionListPrivate))
+
+typedef struct {
+ char *name;
+ NMDevice *device;
+
+ int sort_order;
+
+ GSList *conns;
+} NmtConnectDevice;
+
+typedef struct {
+ const char *name;
+ char *ssid;
+
+ NMConnection *conn;
+ NMAccessPoint *ap;
+ NMDevice *device;
+ NMActiveConnection *active;
+} NmtConnectConnection;
+
+typedef struct {
+ GSList *nmt_devices;
+} NmtConnectConnectionListPrivate;
+
+/**
+ * nmt_connect_connection_list_new:
+ *
+ * Creates a new #NmtConnectConnectionList
+ *
+ * Returns: a new #NmtConnectConnectionList
+ */
+NmtNewtWidget *
+nmt_connect_connection_list_new (void)
+{
+ return g_object_new (NMT_TYPE_CONNECT_CONNECTION_LIST,
+ "flags", NMT_NEWT_LISTBOX_SCROLL | NMT_NEWT_LISTBOX_BORDER,
+ "skip-null-keys", TRUE,
+ NULL);
+}
+
+static void
+nmt_connect_connection_list_init (NmtConnectConnectionList *list)
+{
+}
+
+static void
+nmt_connect_connection_free (NmtConnectConnection *nmtconn)
+{
+ g_clear_object (&nmtconn->conn);
+ g_clear_object (&nmtconn->ap);
+ g_clear_object (&nmtconn->active);
+ g_free (nmtconn->ssid);
+}
+
+static void
+nmt_connect_device_free (NmtConnectDevice *nmtdev)
+{
+ g_clear_pointer (&nmtdev->name, g_free);
+ g_clear_object (&nmtdev->device);
+
+ g_slist_free_full (nmtdev->conns, (GDestroyNotify) nmt_connect_connection_free);
+}
+
+static const char *device_sort_order[] = {
+ "NMDeviceEthernet",
+ "NMDeviceInfiniband",
+ "NMDeviceWifi",
+ NM_SETTING_VLAN_SETTING_NAME,
+ NM_SETTING_BOND_SETTING_NAME,
+ NM_SETTING_TEAM_SETTING_NAME,
+ NM_SETTING_BRIDGE_SETTING_NAME,
+ "NMDeviceModem",
+ "NMDeviceBt"
+};
+static const int device_sort_order_len = G_N_ELEMENTS (device_sort_order);
+
+static int
+get_sort_order_for_device (NMDevice *device)
+{
+ const char *type;
+ int i;
+
+ type = G_OBJECT_TYPE_NAME (device);
+ for (i = 0; i < device_sort_order_len; i++) {
+ if (!strcmp (type, device_sort_order[i]))
+ return i;
+ }
+
+ return -1;
+}
+
+static int
+get_sort_order_for_connection (NMConnection *conn)
+{
+ NMSettingConnection *s_con;
+ const char *type;
+ int i;
+
+ s_con = nm_connection_get_setting_connection (conn);
+ type = nm_setting_connection_get_connection_type (s_con);
+
+ for (i = 0; i < device_sort_order_len; i++) {
+ if (!strcmp (type, device_sort_order[i]))
+ return i;
+ }
+
+ return -1;
+}
+
+static int
+sort_connections (gconstpointer a,
+ gconstpointer b)
+{
+ NmtConnectConnection *nmta = (NmtConnectConnection *)a;
+ NmtConnectConnection *nmtb = (NmtConnectConnection *)b;
+
+ /* If nmta and nmtb both have NMConnections, sort them by timestamp */
+ if (nmta->conn && nmtb->conn) {
+ NMSettingConnection *s_con_a, *s_con_b;
+ guint64 time_a, time_b;
+
+ s_con_a = nm_connection_get_setting_connection (nmta->conn);
+ s_con_b = nm_connection_get_setting_connection (nmtb->conn);
+
+ time_a = nm_setting_connection_get_timestamp (s_con_a);
+ time_b = nm_setting_connection_get_timestamp (s_con_b);
+
+ return (int) (time_b - time_a);
+ }
+
+ /* If one is an NMConnection and the other is an NMAccessPoint, the
+ * connection comes first.
+ */
+ if (nmta->conn)
+ return -1;
+ else if (nmtb->conn)
+ return 1;
+
+ g_return_val_if_fail (nmta->ap && nmtb->ap, 0);
+
+ /* If both are access points, then sort by strength */
+ return nm_access_point_get_strength (nmtb->ap) - nm_access_point_get_strength (nmta->ap);
+}
+
+static void
+add_connections_for_device (NmtConnectDevice *nmtdev,
+ GSList *connections)
+{
+ GSList *iter;
+
+ for (iter = connections; iter; iter = iter->next) {
+ NMConnection *conn = iter->data;
+ NMSettingConnection *s_con;
+
+ s_con = nm_connection_get_setting_connection (conn);
+ if (nm_setting_connection_get_master (s_con))
+ continue;
+
+ if (nm_device_connection_valid (nmtdev->device, conn)) {
+ NmtConnectConnection *nmtconn = g_slice_new0 (NmtConnectConnection);
+
+ nmtconn->name = nm_connection_get_id (conn);
+ nmtconn->device = nmtdev->device;
+ nmtconn->conn = g_object_ref (conn);
+ nmtdev->conns = g_slist_prepend (nmtdev->conns, nmtconn);
+ }
+ }
+}
+
+/* stolen from nm-applet */
+static char *
+hash_ap (NMAccessPoint *ap)
+{
+ unsigned char input[66];
+ const GByteArray *ssid;
+ NM80211Mode mode;
+ guint32 flags;
+ guint32 wpa_flags;
+ guint32 rsn_flags;
+
+ memset (&input[0], 0, sizeof (input));
+
+ ssid = nm_access_point_get_ssid (ap);
+ if (ssid)
+ memcpy (input, ssid->data, ssid->len);
+
+ mode = nm_access_point_get_mode (ap);
+ if (mode == NM_802_11_MODE_INFRA)
+ input[32] |= (1 << 0);
+ else if (mode == NM_802_11_MODE_ADHOC)
+ input[32] |= (1 << 1);
+ else
+ input[32] |= (1 << 2);
+
+ /* Separate out no encryption, WEP-only, and WPA-capable */
+ flags = nm_access_point_get_flags (ap);
+ wpa_flags = nm_access_point_get_wpa_flags (ap);
+ rsn_flags = nm_access_point_get_rsn_flags (ap);
+ if ( !(flags & NM_802_11_AP_FLAGS_PRIVACY)
+ && (wpa_flags == NM_802_11_AP_SEC_NONE)
+ && (rsn_flags == NM_802_11_AP_SEC_NONE))
+ input[32] |= (1 << 3);
+ else if ( (flags & NM_802_11_AP_FLAGS_PRIVACY)
+ && (wpa_flags == NM_802_11_AP_SEC_NONE)
+ && (rsn_flags == NM_802_11_AP_SEC_NONE))
+ input[32] |= (1 << 4);
+ else if ( !(flags & NM_802_11_AP_FLAGS_PRIVACY)
+ && (wpa_flags != NM_802_11_AP_SEC_NONE)
+ && (rsn_flags != NM_802_11_AP_SEC_NONE))
+ input[32] |= (1 << 5);
+ else
+ input[32] |= (1 << 6);
+
+ /* duplicate it */
+ memcpy (&input[33], &input[0], 32);
+ return g_compute_checksum_for_data (G_CHECKSUM_MD5, input, sizeof (input));
+}
+
+static void
+add_connections_for_aps (NmtConnectDevice *nmtdev,
+ GSList *connections)
+{
+ NmtConnectConnection *nmtconn;
+ NMConnection *conn;
+ NMAccessPoint *ap;
+ const GPtrArray *aps;
+ GHashTable *seen_ssids;
+ char *ap_hash;
+ GSList *iter;
+ int i;
+
+ aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nmtdev->device));
+ if (!aps)
+ return;
+
+ seen_ssids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+ for (i = 0; i < aps->len; i++) {
+ ap = aps->pdata[i];
+
+ if (!nm_access_point_get_ssid (ap))
+ continue;
+
+ ap_hash = hash_ap (ap);
+ if (g_hash_table_contains (seen_ssids, ap_hash)) {
+ g_free (ap_hash);
+ continue;
+ }
+ g_hash_table_add (seen_ssids, ap_hash);
+
+ nmtconn = g_slice_new0 (NmtConnectConnection);
+ nmtconn->device = nmtdev->device;
+ nmtconn->ap = g_object_ref (ap);
+ nmtconn->ssid = nm_utils_ssid_to_utf8 (nm_access_point_get_ssid (ap));
+
+ for (iter = connections; iter; iter = iter->next) {
+ conn = iter->data;
+ if ( nm_device_connection_valid (nmtdev->device, conn)
+ && nm_access_point_connection_valid (ap, conn)) {
+ nmtconn->name = nm_connection_get_id (conn);
+ nmtconn->conn = g_object_ref (conn);
+ break;
+ }
+ }
+
+ if (!iter)
+ nmtconn->name = nmtconn->ssid;
+
+ nmtdev->conns = g_slist_prepend (nmtdev->conns, nmtconn);
+ }
+
+ g_hash_table_unref (seen_ssids);
+}
+
+static GSList *
+append_nmt_devices_for_devices (GSList *nmt_devices,
+ const GPtrArray *devices,
+ char **names,
+ GSList *connections)
+{
+ NmtConnectDevice *nmtdev;
+ NMDevice *device;
+ int i, sort_order;
+
+ for (i = 0; i < devices->len; i++) {
+ device = devices->pdata[i];
+
+ sort_order = get_sort_order_for_device (device);
+ if (sort_order == -1)
+ continue;
+
+ nmtdev = g_slice_new0 (NmtConnectDevice);
+ nmtdev->name = g_strdup (names[i]);
+ nmtdev->device = g_object_ref (device);
+ nmtdev->sort_order = sort_order;
+
+ if (NM_IS_DEVICE_WIFI (device))
+ add_connections_for_aps (nmtdev, connections);
+ else
+ add_connections_for_device (nmtdev, connections);
+ nmtdev->conns = g_slist_sort (nmtdev->conns, sort_connections);
+
+ nmt_devices = g_slist_prepend (nmt_devices, nmtdev);
+ }
+
+ return nmt_devices;
+}
+
+static GSList *
+append_nmt_devices_for_virtual_devices (GSList *nmt_devices,
+ GSList *connections)
+{
+ NmtConnectDevice *nmtdev = NULL;
+ GSList *iter;
+ GHashTable *devices_by_name;
+ char *name;
+ NMConnection *conn;
+ NmtConnectConnection *nmtconn;
+ int sort_order;
+
+ devices_by_name = g_hash_table_new (g_str_hash, g_str_equal);
+
+ for (iter = connections; iter; iter = iter->next) {
+ conn = iter->data;
+ sort_order = get_sort_order_for_connection (conn);
+ if (sort_order == -1)
+ continue;
+
+ name = nm_connection_get_virtual_device_description (conn);
+ if (name)
+ nmtdev = g_hash_table_lookup (devices_by_name, name);
+ if (nmtdev)
+ g_free (name);
+ else {
+ nmtdev = g_slice_new0 (NmtConnectDevice);
+ nmtdev->name = name ? name : g_strdup ("Unknown");
+ nmtdev->sort_order = sort_order;
+
+ g_hash_table_insert (devices_by_name, nmtdev->name, nmtdev);
+ nmt_devices = g_slist_prepend (nmt_devices, nmtdev);
+ }
+
+ nmtconn = g_slice_new0 (NmtConnectConnection);
+ nmtconn->name = nm_connection_get_id (conn);
+ nmtconn->conn = g_object_ref (conn);
+
+ nmtdev->conns = g_slist_insert_sorted (nmtdev->conns, nmtconn, sort_connections);
+ }
+
+ g_hash_table_destroy (devices_by_name);
+ return nmt_devices;
+}
+
+static GSList *
+append_nmt_devices_for_vpns (GSList *nmt_devices,
+ GSList *connections)
+{
+ NmtConnectDevice *nmtdev;
+ GSList *iter;
+ NMConnection *conn;
+ NmtConnectConnection *nmtconn;
+
+ nmtdev = g_slice_new0 (NmtConnectDevice);
+ nmtdev->name = g_strdup (_("VPN"));
+ nmtdev->sort_order = 100;
+
+ for (iter = connections; iter; iter = iter->next) {
+ conn = iter->data;
+ if (!nm_connection_is_type (conn, NM_SETTING_VPN_SETTING_NAME))
+ continue;
+
+ nmtconn = g_slice_new0 (NmtConnectConnection);
+ nmtconn->name = nm_connection_get_id (conn);
+ nmtconn->conn = g_object_ref (conn);
+
+ nmtdev->conns = g_slist_insert_sorted (nmtdev->conns, nmtconn, sort_connections);
+ }
+
+ if (nmtdev->conns)
+ nmt_devices = g_slist_prepend (nmt_devices, nmtdev);
+ else
+ nmt_connect_device_free (nmtdev);
+
+ return nmt_devices;
+}
+
+static int
+sort_nmt_devices (gconstpointer a,
+ gconstpointer b)
+{
+ NmtConnectDevice *nmta = (NmtConnectDevice *)a;
+ NmtConnectDevice *nmtb = (NmtConnectDevice *)b;
+
+ if (nmta->sort_order != nmtb->sort_order)
+ return nmta->sort_order - nmtb->sort_order;
+
+ return strcmp (nmta->name, nmtb->name);
+}
+
+static NMActiveConnection *
+connection_find_ac (NMConnection *conn,
+ const GPtrArray *acs)
+{
+ NMActiveConnection *ac;
+ const char *path, *ac_path;
+ int i;
+
+ path = nm_connection_get_path (conn);
+ for (i = 0; acs && i < acs->len; i++) {
+ ac = acs->pdata[i];
+ ac_path = nm_active_connection_get_connection (ac);
+
+ if (!g_strcmp0 (path, ac_path))
+ return ac;
+ }
+
+ return NULL;
+}
+
+static void
+nmt_connect_connection_list_rebuild (NmtConnectConnectionList *list)
+{
+ NmtConnectConnectionListPrivate *priv = NMT_CONNECT_CONNECTION_LIST_GET_PRIVATE (list);
+ NmtNewtListbox *listbox = NMT_NEWT_LISTBOX (list);
+ const GPtrArray *devices, *acs;
+ int max_width;
+ char **names, *row, active_col;
+ const char *strength_col;
+ GSList *connections;
+ GSList *nmt_devices, *diter, *citer;
+ NmtConnectDevice *nmtdev;
+ NmtConnectConnection *nmtconn;
+
+ g_slist_free_full (priv->nmt_devices, (GDestroyNotify) nmt_connect_device_free);
+ priv->nmt_devices = NULL;
+ nmt_newt_listbox_clear (listbox);
+
+ devices = nm_client_get_devices (nm_client);
+ acs = nm_client_get_active_connections (nm_client);
+ connections = nm_remote_settings_list_connections (nm_settings);
+
+ nmt_devices = NULL;
+ if (devices) {
+ names = nm_device_disambiguate_names ((NMDevice **) devices->pdata, devices->len);
+ nmt_devices = append_nmt_devices_for_devices (nmt_devices, devices, names, connections);
+ g_strfreev (names);
+ }
+ nmt_devices = append_nmt_devices_for_virtual_devices (nmt_devices, connections);
+ nmt_devices = append_nmt_devices_for_vpns (nmt_devices, connections);
+
+ nmt_devices = g_slist_sort (nmt_devices, sort_nmt_devices);
+ g_slist_free (connections);
+
+ max_width = 0;
+ for (diter = nmt_devices; diter; diter = diter->next) {
+ nmtdev = diter->data;
+ for (citer = nmtdev->conns; citer; citer = citer->next) {
+ nmtconn = citer->data;
+
+ max_width = MAX (max_width, nmt_newt_text_width (nmtconn->name));
+ }
+ }
+
+ for (diter = nmt_devices; diter; diter = diter->next) {
+ nmtdev = diter->data;
+
+ if (diter != nmt_devices)
+ nmt_newt_listbox_append (listbox, "", NULL);
+ nmt_newt_listbox_append (listbox, nmtdev->name, NULL);
+
+ for (citer = nmtdev->conns; citer; citer = citer->next) {
+ nmtconn = citer->data;
+
+ if (nmtconn->conn)
+ nmtconn->active = connection_find_ac (nmtconn->conn, acs);
+ if (nmtconn->active) {
+ g_object_ref (nmtconn->active);
+ active_col = '*';
+ } else
+ active_col = ' ';
+
+ if (nmtconn->ap) {
+ guint8 strength = nm_access_point_get_strength (nmtconn->ap);
+
+ if (strength > 80)
+ strength_col = " ▂▄▆█";
+ else if (strength > 55)
+ strength_col = " â–‚â–„â–†_";
+ else if (strength > 30)
+ strength_col = " â–‚â–„__";
+ else if (strength > 5)
+ strength_col = " â–‚___";
+ else
+ strength_col = " ____";
+ } else
+ strength_col = "";
+
+ row = g_strdup_printf ("%c %s%-*s%s",
+ active_col,
+ nmtconn->name,
+ (int)(max_width - nmt_newt_text_width (nmtconn->name)), "",
+ strength_col);
+
+ nmt_newt_listbox_append (listbox, row, nmtconn);
+ g_free (row);
+ }
+ }
+
+ priv->nmt_devices = nmt_devices;
+
+ g_object_notify (G_OBJECT (listbox), "active");
+ g_object_notify (G_OBJECT (listbox), "active-key");
+}
+
+static void
+rebuild_on_acs_changed (GObject *object,
+ GParamSpec *spec,
+ gpointer list)
+{
+ nmt_connect_connection_list_rebuild (list);
+}
+
+static void
+rebuild_on_devices_changed (NMClient *client,
+ NMDevice *device,
+ gpointer list)
+{
+ nmt_connect_connection_list_rebuild (list);
+}
+
+static void
+nmt_connect_connection_list_constructed (GObject *object)
+{
+ NmtConnectConnectionList *list = NMT_CONNECT_CONNECTION_LIST (object);
+
+ g_signal_connect (nm_client, "notify::" NM_CLIENT_ACTIVE_CONNECTIONS,
+ G_CALLBACK (rebuild_on_acs_changed), list);
+ g_signal_connect (nm_client, "device-added",
+ G_CALLBACK (rebuild_on_devices_changed), list);
+ g_signal_connect (nm_client, "device-removed",
+ G_CALLBACK (rebuild_on_devices_changed), list);
+
+ nmt_connect_connection_list_rebuild (list);
+
+ G_OBJECT_CLASS (nmt_connect_connection_list_parent_class)->constructed (object);
+}
+
+static void
+nmt_connect_connection_list_finalize (GObject *object)
+{
+ NmtConnectConnectionListPrivate *priv = NMT_CONNECT_CONNECTION_LIST_GET_PRIVATE (object);
+
+ g_slist_free_full (priv->nmt_devices, (GDestroyNotify) nmt_connect_device_free);
+
+ g_signal_handlers_disconnect_by_func (nm_client, G_CALLBACK (rebuild_on_acs_changed), object);
+ g_signal_handlers_disconnect_by_func (nm_client, G_CALLBACK (rebuild_on_devices_changed), object);
+
+ G_OBJECT_CLASS (nmt_connect_connection_list_parent_class)->finalize (object);
+}
+
+static void
+nmt_connect_connection_list_class_init (NmtConnectConnectionListClass *list_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (list_class);
+
+ g_type_class_add_private (list_class, sizeof (NmtConnectConnectionListPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_connect_connection_list_constructed;
+ object_class->finalize = nmt_connect_connection_list_finalize;
+}
+
+/**
+ * nmt_connect_connection_list_get_connection:
+ * @list: an #NmtConnectConnectionList
+ * @identifier: a connection ID or UUID, or device name
+ * @connection: (out) (transfer none): the #NMConnection to be activated
+ * @device: (out) (transfer none): the #NMDevice to activate @connection on
+ * @specific_object: (out) (transfer none): the "specific object" to connect to
+ * @active: (out) (transfer none): the #NMActiveConnection corresponding
+ * to the selection, if any.
+ *
+ * Gets information about the indicated connection.
+ *
+ * Returns: %TRUE if there was a match, %FALSE if not.
+ */
+gboolean
+nmt_connect_connection_list_get_connection (NmtConnectConnectionList *list,
+ const char *identifier,
+ NMConnection **connection,
+ NMDevice **device,
+ NMObject **specific_object,
+ NMActiveConnection **active)
+{
+ NmtConnectConnectionListPrivate *priv = NMT_CONNECT_CONNECTION_LIST_GET_PRIVATE (list);
+ GSList *diter, *citer;
+ NmtConnectDevice *nmtdev;
+ NmtConnectConnection *nmtconn = NULL;
+ NMConnection *conn = NULL;
+
+ g_return_val_if_fail (identifier, FALSE);
+
+ if (nm_utils_is_uuid (identifier))
+ conn = NM_CONNECTION (nm_remote_settings_get_connection_by_uuid (nm_settings, identifier));
+ if (!conn)
+ conn = NM_CONNECTION (nm_remote_settings_get_connection_by_id (nm_settings, identifier));
+
+ for (diter = priv->nmt_devices; diter; diter = diter->next) {
+ nmtdev = diter->data;
+ if (!nmtdev->conns)
+ continue;
+
+ for (citer = nmtdev->conns; citer; citer = citer->next) {
+ nmtconn = citer->data;
+ if (conn) {
+ if (conn == nmtconn->conn)
+ goto found;
+ } else if (nmtconn->ssid && !strcmp (identifier, nmtconn->ssid))
+ goto found;
+ }
+
+ if (!conn && nmtdev->device && !strcmp (identifier, nm_device_get_ip_iface (nmtdev->device))) {
+ nmtconn = nmtdev->conns->data;
+ goto found;
+ }
+ }
+
+ return FALSE;
+
+ found:
+ if (connection)
+ *connection = nmtconn->conn;
+ if (device)
+ *device = nmtconn->device;
+ if (specific_object)
+ *specific_object = NM_OBJECT (nmtconn->ap);
+ if (active)
+ *active = nmtconn->active;
+
+ return TRUE;
+}
+
+/**
+ * nmt_connect_connection_list_get_selection:
+ * @list: an #NmtConnectConnectionList
+ * @connection: (out) (transfer none): the #NMConnection to be activated
+ * @device: (out) (transfer none): the #NMDevice to activate @connection on
+ * @specific_object: (out) (transfer none): the "specific object" to connect to
+ * @active: (out) (transfer none): the #NMActiveConnection corresponding
+ * to the selection, if any.
+ *
+ * Gets information about the selected row.
+ *
+ * Returns: %TRUE if there is a selection, %FALSE if not.
+ */
+gboolean
+nmt_connect_connection_list_get_selection (NmtConnectConnectionList *list,
+ NMConnection **connection,
+ NMDevice **device,
+ NMObject **specific_object,
+ NMActiveConnection **active)
+{
+ NmtConnectConnection *nmtconn;
+
+ nmtconn = nmt_newt_listbox_get_active_key (NMT_NEWT_LISTBOX (list));
+ if (!nmtconn)
+ return FALSE;
+
+ if (connection)
+ *connection = nmtconn->conn;
+ if (device)
+ *device = nmtconn->device;
+ if (specific_object)
+ *specific_object = NM_OBJECT (nmtconn->ap);
+ if (active)
+ *active = nmtconn->active;
+
+ return TRUE;
+}
diff --git a/tui/nmt-connect-connection-list.h b/tui/nmt-connect-connection-list.h
new file mode 100644
index 000000000..d47900437
--- /dev/null
+++ b/tui/nmt-connect-connection-list.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_CONNECT_CONNECTION_LIST_H
+#define NMT_CONNECT_CONNECTION_LIST_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_CONNECT_CONNECTION_LIST (nmt_connect_connection_list_get_type ())
+#define NMT_CONNECT_CONNECTION_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_CONNECT_CONNECTION_LIST, NmtConnectConnectionList))
+#define NMT_CONNECT_CONNECTION_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_CONNECT_CONNECTION_LIST, NmtConnectConnectionListClass))
+#define NMT_IS_CONNECT_CONNECTION_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_CONNECT_CONNECTION_LIST))
+#define NMT_IS_CONNECT_CONNECTION_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_CONNECT_CONNECTION_LIST))
+#define NMT_CONNECT_CONNECTION_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_CONNECT_CONNECTION_LIST, NmtConnectConnectionListClass))
+
+typedef struct {
+ NmtNewtListbox parent;
+
+} NmtConnectConnectionList;
+
+typedef struct {
+ NmtNewtListboxClass parent;
+
+} NmtConnectConnectionListClass;
+
+GType nmt_connect_connection_list_get_type (void);
+
+NmtNewtWidget *nmt_connect_connection_list_new (void);
+
+gboolean nmt_connect_connection_list_get_connection (NmtConnectConnectionList *list,
+ const char *identifier,
+ NMConnection **connection,
+ NMDevice **device,
+ NMObject **specific_object,
+ NMActiveConnection **active);
+gboolean nmt_connect_connection_list_get_selection (NmtConnectConnectionList *list,
+ NMConnection **connection,
+ NMDevice **device,
+ NMObject **specific_object,
+ NMActiveConnection **active);
+
+G_END_DECLS
+
+#endif /* NMT_CONNECT_CONNECTION_LIST_H */
diff --git a/tui/nmt-device-entry.c b/tui/nmt-device-entry.c
new file mode 100644
index 000000000..7ce6d7d42
--- /dev/null
+++ b/tui/nmt-device-entry.c
@@ -0,0 +1,589 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-device-entry
+ * @short_description: #NmtNewtEntry for identifying a device
+ *
+ * #NmtDeviceEntry provides a widget for identifying a device, either
+ * by interface name or by hardware address. The user can enter either
+ * value, and the entry's #NmtDeviceEntry:interface-name or
+ * #NmtDeviceEntry:mac-address property will be set accordingly. If
+ * the entry recognizes the interface name or mac address typed in as
+ * matching a known #NMDevice, then it will also display the other
+ * property in parentheses.
+ *
+ * FIXME: #NmtDeviceEntry is currently an #NmtPageGrid object, so that
+ * we can possibly eventually add a button to its "extra" field, that
+ * would pop up a form for selecting a device. But if we're not going
+ * to implement that then we should make it just an #NmtNewtEntry.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <sys/socket.h>
+#include <linux/if_arp.h>
+
+#include <glib/gi18n-lib.h>
+#include <nm-device.h>
+#include <nm-device-infiniband.h>
+#include <nm-utils.h>
+
+#include "nmtui.h"
+#include "nmt-device-entry.h"
+
+G_DEFINE_TYPE (NmtDeviceEntry, nmt_device_entry, NMT_TYPE_PAGE_GRID)
+
+#define NMT_DEVICE_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_DEVICE_ENTRY, NmtDeviceEntryPrivate))
+
+typedef struct {
+ GType hardware_type;
+ NmtDeviceEntryDeviceFilter device_filter;
+ gpointer device_filter_data;
+ int arptype;
+
+ char *interface_name;
+ GByteArray *mac_address;
+
+ char *label;
+ NmtNewtEntry *entry;
+ NmtNewtWidget *button;
+
+ gboolean updating;
+} NmtDeviceEntryPrivate;
+
+enum {
+ PROP_0,
+ PROP_LABEL,
+ PROP_WIDTH,
+ PROP_HARDWARE_TYPE,
+ PROP_INTERFACE_NAME,
+ PROP_MAC_ADDRESS,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_device_entry_new:
+ * @label: the label for the entry
+ * @width: the width of the entry
+ * @hardware_type: the type of #NMDevice to be selected, or
+ * %G_TYPE_NONE if this is for a virtual device type.
+ *
+ * Creates a new #NmtDeviceEntry, for identifying a device of type
+ * @hardware_type. If @hardware_type is %G_TYPE_NONE (and you do not
+ * set a #NmtDeviceEntryDeviceFilter), then this will only allow
+ * specifying an interface name, not a hardware address.
+ *
+ * Returns: a new #NmtDeviceEntry.
+ */
+NmtNewtWidget *
+nmt_device_entry_new (const char *label,
+ int width,
+ GType hardware_type)
+{
+ return g_object_new (NMT_TYPE_DEVICE_ENTRY,
+ "label", label,
+ "width", width,
+ "hardware-type", hardware_type,
+ NULL);
+}
+
+static gboolean
+device_entry_parse (NmtDeviceEntry *deventry,
+ const char *text,
+ char **interface_name,
+ char **mac_address)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ guint8 buf[NM_UTILS_HWADDR_LEN_MAX];
+ char **words;
+ int len;
+
+ *interface_name = *mac_address = NULL;
+ if (!*text)
+ return TRUE;
+
+ if (priv->hardware_type == G_TYPE_NONE && !priv->device_filter) {
+ if (nm_utils_iface_valid_name (text)) {
+ *interface_name = g_strdup (text);
+ return TRUE;
+ } else
+ return FALSE;
+ }
+
+ words = g_strsplit (text, " ", -1);
+ if (g_strv_length (words) > 2) {
+ g_strfreev (words);
+ return FALSE;
+ }
+
+ if (words[1]) {
+ len = strlen (words[1]);
+ if (len < 3 || words[1][0] != '(' || words[1][len - 1] != ')')
+ goto fail;
+
+ memmove (words[1], words[1] + 1, len - 2);
+ words[1][len - 2] = '\0';
+ }
+
+ if ( nm_utils_hwaddr_aton (words[0], priv->arptype, buf)
+ && (!words[1] || nm_utils_iface_valid_name (words[1]))) {
+ *mac_address = words[0];
+ *interface_name = NULL;
+ g_free (words);
+ return TRUE;
+ } else if ( nm_utils_iface_valid_name (words[0])
+ && (!words[1] || nm_utils_hwaddr_aton (words[1], priv->arptype, buf))) {
+ *interface_name = words[0];
+ *mac_address = NULL;
+ g_free (words);
+ return TRUE;
+ }
+
+ fail:
+ g_strfreev (words);
+ return FALSE;
+}
+
+static gboolean
+device_entry_validate (NmtNewtEntry *entry,
+ const char *text,
+ gpointer user_data)
+{
+ NmtDeviceEntry *deventry = user_data;
+ char *ifname, *mac;
+
+ if (!device_entry_parse (deventry, text, &ifname, &mac))
+ return FALSE;
+
+ g_free (ifname);
+ g_free (mac);
+ return TRUE;
+}
+
+static NMDevice *
+find_device_by_interface_name (NmtDeviceEntry *deventry,
+ const char *interface_name)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ const GPtrArray *devices;
+ NMDevice *device = NULL;
+ int i;
+
+ devices = nm_client_get_devices (nm_client);
+ if (!devices)
+ return NULL;
+
+ for (i = 0; i < devices->len && !device; i++) {
+ NMDevice *candidate = devices->pdata[i];
+
+ if ( priv->hardware_type != G_TYPE_NONE
+ && !G_TYPE_CHECK_INSTANCE_TYPE (candidate, priv->hardware_type))
+ continue;
+
+ if ( priv->device_filter
+ && !priv->device_filter (deventry, candidate, priv->device_filter_data))
+ continue;
+
+ if (!g_strcmp0 (interface_name, nm_device_get_iface (candidate)))
+ device = candidate;
+ }
+
+ return device;
+}
+
+static NMDevice *
+find_device_by_mac_address (NmtDeviceEntry *deventry,
+ const char *mac_address)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ const GPtrArray *devices;
+ NMDevice *device = NULL;
+ int i;
+
+ devices = nm_client_get_devices (nm_client);
+ if (!devices)
+ return NULL;
+
+ for (i = 0; i < devices->len && !device; i++) {
+ NMDevice *candidate = devices->pdata[i];
+ char *hwaddr;
+
+ if ( priv->hardware_type != G_TYPE_NONE
+ && !G_TYPE_CHECK_INSTANCE_TYPE (candidate, priv->hardware_type))
+ continue;
+
+ if ( priv->device_filter
+ && !priv->device_filter (deventry, candidate, priv->device_filter_data))
+ continue;
+
+ g_object_get (G_OBJECT (candidate), "hw-address", &hwaddr, NULL);
+ if (hwaddr && !g_ascii_strcasecmp (mac_address, hwaddr))
+ device = candidate;
+ g_free (hwaddr);
+ }
+
+ return device;
+}
+
+static void
+update_entry (NmtDeviceEntry *deventry)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ const char *ifname;
+ char *mac, *text;
+ NMDevice *ifname_device, *mac_device;
+
+ if (priv->interface_name) {
+ ifname = priv->interface_name;
+ ifname_device = find_device_by_interface_name (deventry, priv->interface_name);
+ } else {
+ ifname = NULL;
+ ifname_device = NULL;
+ }
+
+ if (priv->mac_address) {
+ mac = nm_utils_hwaddr_ntoa (priv->mac_address->data, priv->arptype);
+ mac_device = find_device_by_mac_address (deventry, mac);
+ } else {
+ mac = NULL;
+ mac_device = NULL;
+ }
+
+ if (!ifname && mac_device)
+ ifname = nm_device_get_iface (mac_device);
+ if (!mac && ifname_device && (priv->hardware_type != G_TYPE_NONE))
+ g_object_get (G_OBJECT (ifname_device), "hw-address", &mac, NULL);
+
+ if (ifname_device && mac_device && ifname_device != mac_device) {
+ /* Mismatch! */
+ text = g_strdup_printf ("%s != %s", priv->interface_name, mac);
+ } else if (ifname && mac) {
+ if (ifname_device)
+ text = g_strdup_printf ("%s (%s)", ifname, mac);
+ else
+ text = g_strdup_printf ("%s (%s)", mac, ifname);
+ } else if (ifname)
+ text = g_strdup (ifname);
+ else if (mac)
+ text = g_strdup (mac);
+ else
+ text = g_strdup ("");
+
+ priv->updating = TRUE;
+ g_object_set (G_OBJECT (priv->entry), "text", text, NULL);
+ priv->updating = FALSE;
+ g_free (text);
+
+ g_free (mac);
+}
+
+static gboolean
+nmt_device_entry_set_interface_name (NmtDeviceEntry *deventry,
+ const char *interface_name)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+
+ if (g_strcmp0 (interface_name, priv->interface_name) != 0) {
+ g_free (priv->interface_name);
+ priv->interface_name = g_strdup (interface_name);
+
+ g_object_notify (G_OBJECT (deventry), "interface-name");
+ return TRUE;
+ } else
+ return FALSE;
+}
+
+static gboolean
+nmt_device_entry_set_mac_address (NmtDeviceEntry *deventry,
+ GByteArray *mac_address)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ gboolean changed;
+
+ if (mac_address)
+ g_return_val_if_fail (mac_address->len == nm_utils_hwaddr_len (priv->arptype), FALSE);
+
+ if (mac_address && !priv->mac_address) {
+ priv->mac_address = g_boxed_copy (DBUS_TYPE_G_UCHAR_ARRAY, mac_address);
+ changed = TRUE;
+ } else if (!mac_address && priv->mac_address) {
+ g_clear_pointer (&priv->mac_address, g_byte_array_unref);
+ changed = TRUE;
+ } else if ( mac_address && priv->mac_address
+ && memcmp (mac_address->data, priv->mac_address->data, mac_address->len) != 0) {
+ g_byte_array_unref (priv->mac_address);
+ priv->mac_address = g_boxed_copy (DBUS_TYPE_G_UCHAR_ARRAY, mac_address);
+ changed = TRUE;
+ } else
+ changed = FALSE;
+
+ if (changed)
+ g_object_notify (G_OBJECT (deventry), "mac-address");
+ return changed;
+}
+
+static void
+entry_text_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer deventry)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ const char *text;
+ char *ifname, *mac;
+
+ if (priv->updating)
+ return;
+
+ text = nmt_newt_entry_get_text (priv->entry);
+ if (!device_entry_parse (deventry, text, &ifname, &mac))
+ return;
+
+ if (ifname) {
+ nmt_device_entry_set_interface_name (deventry, ifname);
+ g_free (ifname);
+ } else
+ nmt_device_entry_set_interface_name (deventry, NULL);
+
+ if (mac) {
+ GByteArray *mac_address;
+
+ mac_address = nm_utils_hwaddr_atoba (mac, priv->arptype);
+ nmt_device_entry_set_mac_address (deventry, mac_address);
+ g_byte_array_unref (mac_address);
+ g_free (mac);
+ } else
+ nmt_device_entry_set_mac_address (deventry, NULL);
+}
+
+static void
+nmt_device_entry_init (NmtDeviceEntry *deventry)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ NmtNewtWidget *entry;
+
+ priv->hardware_type = G_TYPE_NONE;
+
+ entry = nmt_newt_entry_new (-1, 0);
+ priv->entry = NMT_NEWT_ENTRY (entry);
+ nmt_newt_entry_set_validator (priv->entry, device_entry_validate, deventry);
+ g_signal_connect (priv->entry, "notify::text",
+ G_CALLBACK (entry_text_changed), deventry);
+
+#if 0
+ priv->button = nmt_newt_button_new (_("Select..."));
+ g_signal_connect (priv->button, "clicked",
+ G_CALLBACK (do_select_dialog), deventry);
+#endif
+}
+
+static void
+nmt_device_entry_constructed (GObject *object)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (object);
+
+ nmt_page_grid_append (NMT_PAGE_GRID (object), priv->label, NMT_NEWT_WIDGET (priv->entry), NULL);
+
+ G_OBJECT_CLASS (nmt_device_entry_parent_class)->constructed (object);
+}
+
+static void
+nmt_device_entry_finalize (GObject *object)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (object);
+
+ g_free (priv->interface_name);
+ if (priv->mac_address)
+ g_byte_array_unref (priv->mac_address);
+
+ G_OBJECT_CLASS (nmt_device_entry_parent_class)->finalize (object);
+}
+
+/**
+ * NmtDeviceEntryDeviceFilter:
+ * @deventry: the #NmtDeviceEntry
+ * @device: an #NMDevice
+ * @user_data: user data
+ *
+ * Filter function for determining which devices can be specified
+ * on an entry.
+ *
+ * Returns: %TRUE if @device is acceptable for @deventry
+ */
+
+/**
+ * nmt_device_entry_set_device_filter:
+ * @deventry: the #NmtDeviceEntry
+ * @filter: the filter
+ * @user_data: data for @filter
+ *
+ * Sets a device filter on @deventry. Only devices that pass @filter
+ * will be recognized by @deventry.
+ *
+ * If the entry's #NmtDeviceEntry:hardware-type is not %G_TYPE_NONE,
+ * then only devices that both match the hardware type and are
+ * accepted by the filter will be allowed.
+ */
+void
+nmt_device_entry_set_device_filter (NmtDeviceEntry *deventry,
+ NmtDeviceEntryDeviceFilter filter,
+ gpointer user_data)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+
+ priv->device_filter = filter;
+ priv->device_filter_data = user_data;
+}
+
+static void
+nmt_device_entry_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtDeviceEntry *deventry = NMT_DEVICE_ENTRY (object);
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
+ const char *interface_name;
+ GByteArray *mac_address;
+
+ switch (prop_id) {
+ case PROP_LABEL:
+ priv->label = g_value_dup_string (value);
+ break;
+ case PROP_WIDTH:
+ nmt_newt_entry_set_width (priv->entry, g_value_get_int (value));
+ break;
+ case PROP_HARDWARE_TYPE:
+ priv->hardware_type = g_value_get_gtype (value);
+ priv->arptype = (priv->hardware_type == NM_TYPE_DEVICE_INFINIBAND) ? ARPHRD_INFINIBAND : ARPHRD_ETHER;
+ break;
+ case PROP_INTERFACE_NAME:
+ interface_name = g_value_get_string (value);
+ if (nmt_device_entry_set_interface_name (deventry, interface_name))
+ update_entry (deventry);
+ break;
+ case PROP_MAC_ADDRESS:
+ mac_address = g_value_get_boxed (value);
+ if (nmt_device_entry_set_mac_address (deventry, mac_address))
+ update_entry (deventry);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_device_entry_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_LABEL:
+ g_value_set_string (value, priv->label);
+ break;
+ case PROP_WIDTH:
+ g_value_set_int (value, nmt_newt_entry_get_width (priv->entry));
+ break;
+ case PROP_HARDWARE_TYPE:
+ g_value_set_gtype (value, priv->hardware_type);
+ break;
+ case PROP_INTERFACE_NAME:
+ g_value_set_string (value, priv->interface_name);
+ break;
+ case PROP_MAC_ADDRESS:
+ g_value_set_boxed (value, priv->mac_address);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_device_entry_class_init (NmtDeviceEntryClass *deventry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (deventry_class);
+
+ g_type_class_add_private (deventry_class, sizeof (NmtDeviceEntryPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_device_entry_constructed;
+ object_class->set_property = nmt_device_entry_set_property;
+ object_class->get_property = nmt_device_entry_get_property;
+ object_class->finalize = nmt_device_entry_finalize;
+
+ /**
+ * NmtDeviceEntry:label:
+ *
+ * The entry's label
+ */
+ g_object_class_install_property (object_class, PROP_LABEL,
+ g_param_spec_string ("label", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtDeviceEntry:width:
+ *
+ * The entry's width in characters
+ */
+ g_object_class_install_property (object_class, PROP_WIDTH,
+ g_param_spec_int ("width", "", "",
+ -1, 80, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtDeviceEntry:hardware-type:
+ *
+ * The type of #NMDevice to limit the entry to, or %G_TYPE_NONE
+ * if the entry is for a virtual device and should not accept
+ * hardware addresses.
+ */
+ g_object_class_install_property (object_class, PROP_HARDWARE_TYPE,
+ g_param_spec_gtype ("hardware-type", "", "",
+ G_TYPE_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtDeviceEntry:interface-name:
+ *
+ * The interface name of the device identified by the entry.
+ */
+ g_object_class_install_property (object_class, PROP_INTERFACE_NAME,
+ g_param_spec_string ("interface-name", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtDeviceEntry:mac-address:
+ *
+ * The hardware address of the device identified by the entry.
+ */
+ g_object_class_install_property (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_boxed ("mac-address", "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-device-entry.h b/tui/nmt-device-entry.h
new file mode 100644
index 000000000..2b959aaa8
--- /dev/null
+++ b/tui/nmt-device-entry.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_DEVICE_ENTRY_H
+#define NMT_DEVICE_ENTRY_H
+
+#include "nmt-page-grid.h"
+
+#include <nm-connection.h>
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_DEVICE_ENTRY (nmt_device_entry_get_type ())
+#define NMT_DEVICE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_DEVICE_ENTRY, NmtDeviceEntry))
+#define NMT_DEVICE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_DEVICE_ENTRY, NmtDeviceEntryClass))
+#define NMT_IS_DEVICE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_DEVICE_ENTRY))
+#define NMT_IS_DEVICE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_DEVICE_ENTRY))
+#define NMT_DEVICE_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_DEVICE_ENTRY, NmtDeviceEntryClass))
+
+typedef struct {
+ NmtPageGrid parent;
+
+} NmtDeviceEntry;
+
+typedef struct {
+ NmtPageGridClass parent;
+
+} NmtDeviceEntryClass;
+
+GType nmt_device_entry_get_type (void);
+
+NmtNewtWidget *nmt_device_entry_new (const char *label,
+ int width,
+ GType hardware_type);
+
+typedef gboolean (*NmtDeviceEntryDeviceFilter) (NmtDeviceEntry *deventry,
+ NMDevice *device,
+ gpointer user_data);
+void nmt_device_entry_set_device_filter (NmtDeviceEntry *deventry,
+ NmtDeviceEntryDeviceFilter filter,
+ gpointer user_data);
+
+G_END_DECLS
+
+#endif /* NMT_DEVICE_ENTRY_H */
diff --git a/tui/nmt-edit-connection-list.c b/tui/nmt-edit-connection-list.c
new file mode 100644
index 000000000..ec0a66845
--- /dev/null
+++ b/tui/nmt-edit-connection-list.c
@@ -0,0 +1,568 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-edit-connection-list
+ * @short_description: Connection list for "nmtui edit"
+ *
+ * #NmtEditConnectionList is the list of connections displayed by
+ * "nmtui edit".
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmtui.h"
+#include "nmtui-edit.h"
+#include "nmt-edit-connection-list.h"
+#include "nmt-editor.h"
+
+#include "nm-editor-utils.h"
+
+G_DEFINE_TYPE (NmtEditConnectionList, nmt_edit_connection_list, NMT_TYPE_NEWT_GRID)
+
+#define NMT_EDIT_CONNECTION_LIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_EDIT_CONNECTION_LIST, NmtEditConnectionListPrivate))
+
+typedef struct {
+ GSList *connections;
+
+ gboolean grouped;
+ NmtEditConnectionListFilter connection_filter;
+ gpointer connection_filter_data;
+
+ NmtNewtListbox *listbox;
+ NmtNewtButtonBox *buttons;
+
+ NmtNewtWidget *add;
+ NmtNewtWidget *edit;
+ NmtNewtWidget *delete;
+ NmtNewtWidget *extra;
+} NmtEditConnectionListPrivate;
+
+enum {
+ PROP_0,
+
+ PROP_GROUPED,
+ PROP_CONNECTION_FILTER,
+ PROP_CONNECTION_FILTER_DATA,
+ PROP_EXTRA_WIDGET,
+ PROP_CONNECTIONS,
+ PROP_NUM_CONNECTIONS,
+
+ LAST_PROP
+};
+
+enum {
+ ADD_CONNECTION,
+ EDIT_CONNECTION,
+ REMOVE_CONNECTION,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void add_clicked (NmtNewtButton *button, gpointer list);
+static void edit_clicked (NmtNewtButton *button, gpointer list);
+static void delete_clicked (NmtNewtButton *button, gpointer list);
+static void listbox_activated (NmtNewtWidget *listbox, gpointer list);
+
+/**
+ * nmt_edit_connection_list_get_connections:
+ * @list: an #NmtEditConnectionList
+ *
+ * Gets the list's list of connections
+ *
+ * Returns: (transfer none) (element-type #NMConnection): the
+ * list of connections.
+ */
+GSList *
+nmt_edit_connection_list_get_connections (NmtEditConnectionList *list)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+
+ return priv->connections;
+}
+
+static void
+nmt_edit_connection_list_init (NmtEditConnectionList *list)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+ NmtNewtWidget *listbox, *buttons;
+ NmtNewtGrid *grid = NMT_NEWT_GRID (list);
+
+ listbox = g_object_new (NMT_TYPE_NEWT_LISTBOX,
+ "flags", NMT_NEWT_LISTBOX_SCROLL | NMT_NEWT_LISTBOX_BORDER,
+ "skip-null-keys", TRUE,
+ NULL);
+ priv->listbox = NMT_NEWT_LISTBOX (listbox);
+ nmt_newt_grid_add (grid, listbox, 0, 0);
+ nmt_newt_grid_set_flags (grid, listbox,
+ NMT_NEWT_GRID_FILL_X | NMT_NEWT_GRID_FILL_Y |
+ NMT_NEWT_GRID_EXPAND_X | NMT_NEWT_GRID_EXPAND_Y);
+ g_signal_connect (priv->listbox, "activated", G_CALLBACK (listbox_activated), list);
+
+ buttons = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_VERTICAL);
+ priv->buttons = NMT_NEWT_BUTTON_BOX (buttons);
+ nmt_newt_grid_add (grid, buttons, 1, 0);
+ nmt_newt_widget_set_padding (buttons, 1, 1, 0, 1);
+ nmt_newt_grid_set_flags (grid, buttons,
+ NMT_NEWT_GRID_FILL_X | NMT_NEWT_GRID_FILL_Y |
+ NMT_NEWT_GRID_EXPAND_Y);
+
+ priv->add = nmt_newt_button_box_add_start (priv->buttons, _("Add"));
+ g_signal_connect (priv->add, "clicked", G_CALLBACK (add_clicked), list);
+
+ priv->edit = nmt_newt_button_box_add_start (priv->buttons, _("Edit..."));
+ g_signal_connect (priv->edit, "clicked", G_CALLBACK (edit_clicked), list);
+
+ priv->delete = nmt_newt_button_box_add_start (priv->buttons, _("Delete"));
+ g_signal_connect (priv->delete, "clicked", G_CALLBACK (delete_clicked), list);
+}
+
+static int
+sort_by_timestamp (gconstpointer a,
+ gconstpointer b)
+{
+ NMSettingConnection *s_con_a, *s_con_b;
+ guint64 time_a, time_b;
+
+ s_con_a = nm_connection_get_setting_connection ((NMConnection *) a);
+ s_con_b = nm_connection_get_setting_connection ((NMConnection *) b);
+
+ time_a = nm_setting_connection_get_timestamp (s_con_a);
+ time_b = nm_setting_connection_get_timestamp (s_con_b);
+
+ return (int) (time_b - time_a);
+}
+
+static void nmt_edit_connection_list_rebuild (NmtEditConnectionList *list);
+
+static void
+rebuild_on_connection_updated (NMRemoteConnection *connection,
+ gpointer list)
+{
+ nmt_edit_connection_list_rebuild (list);
+}
+
+static void
+free_connections (NmtEditConnectionList *list)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+ NMConnection *conn;
+ GSList *iter;
+
+ for (iter = priv->connections; iter; iter = iter->next) {
+ conn = iter->data;
+
+ g_signal_handlers_disconnect_by_func (conn, G_CALLBACK (rebuild_on_connection_updated), list);
+ g_object_unref (conn);
+ }
+ g_slist_free (priv->connections);
+}
+
+static void
+nmt_edit_connection_list_rebuild (NmtEditConnectionList *list)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+ GSList *iter, *next;
+ gboolean did_header = FALSE, did_vpn = FALSE;
+ NMEditorConnectionTypeData **types;
+ NMConnection *conn, *selected_conn;
+ int i, row, selected_row;
+
+ selected_row = nmt_newt_listbox_get_active (priv->listbox);
+ selected_conn = nmt_newt_listbox_get_active_key (priv->listbox);
+
+ free_connections (list);
+ priv->connections = nm_remote_settings_list_connections (nm_settings);
+ for (iter = priv->connections; iter; iter = next) {
+ conn = iter->data;
+ next = iter->next;
+
+ if ( priv->connection_filter
+ && !priv->connection_filter (list, conn, priv->connection_filter_data)) {
+ priv->connections = g_slist_delete_link (priv->connections, iter);
+ continue;
+ }
+
+ g_signal_connect (conn, NM_REMOTE_CONNECTION_UPDATED,
+ G_CALLBACK (rebuild_on_connection_updated), list);
+ g_signal_connect (conn, NM_REMOTE_CONNECTION_REMOVED,
+ G_CALLBACK (rebuild_on_connection_updated), list);
+ g_object_ref (iter->data);
+ }
+ priv->connections = g_slist_sort (priv->connections, sort_by_timestamp);
+ g_object_notify (G_OBJECT (list), "connections");
+ g_object_notify (G_OBJECT (list), "num-connections");
+
+ nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->edit),
+ priv->connections != NULL);
+ nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->delete),
+ priv->connections != NULL);
+
+ nmt_newt_listbox_clear (priv->listbox);
+
+ if (!priv->grouped) {
+ /* Just add the connections in order */
+ for (iter = priv->connections, row = 0; iter; iter = iter->next, row++) {
+ conn = iter->data;
+ nmt_newt_listbox_append (priv->listbox, nm_connection_get_id (conn), conn);
+ if (conn == selected_conn)
+ selected_row = row;
+ }
+ if (selected_row >= row)
+ selected_row = row - 1;
+ nmt_newt_listbox_set_active (priv->listbox, selected_row);
+
+ return;
+ }
+
+ types = nm_editor_utils_get_connection_type_list ();
+ for (i = row = 0; types[i]; i++) {
+ if (types[i]->setting_type == NM_TYPE_SETTING_VPN) {
+ if (did_vpn)
+ continue;
+ did_vpn = TRUE;
+ }
+
+ did_header = FALSE;
+
+ for (iter = priv->connections; iter; iter = iter->next) {
+ NMSetting *setting;
+ char *indented;
+
+ conn = iter->data;
+ setting = nm_connection_get_setting (conn, types[i]->setting_type);
+ if (!setting)
+ continue;
+ if (!nm_connection_is_type (conn, nm_setting_get_name (setting)))
+ continue;
+
+ if (!did_header) {
+ nmt_newt_listbox_append (priv->listbox, types[i]->name, NULL);
+ if (row == selected_row)
+ selected_row++;
+ row++;
+ did_header = TRUE;
+ }
+
+ indented = g_strdup_printf (" %s", nm_connection_get_id (conn));
+ nmt_newt_listbox_append (priv->listbox, indented, conn);
+ g_free (indented);
+
+ if (conn == selected_conn)
+ selected_row = row;
+ row++;
+ }
+ }
+
+ if (selected_row >= row)
+ selected_row = row - 1;
+ nmt_newt_listbox_set_active (priv->listbox, selected_row);
+}
+
+static void
+rebuild_on_new_connection (NMRemoteSettings *settings,
+ NMRemoteConnection *connection,
+ gpointer list)
+{
+ nmt_edit_connection_list_rebuild (list);
+}
+
+static void
+nmt_edit_connection_list_constructed (GObject *object)
+{
+ NmtEditConnectionList *list = NMT_EDIT_CONNECTION_LIST (object);
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+
+ if (priv->extra)
+ nmt_newt_button_box_add_widget_end (priv->buttons, priv->extra);
+
+ g_signal_connect (nm_settings, NM_REMOTE_SETTINGS_NEW_CONNECTION,
+ G_CALLBACK (rebuild_on_new_connection), list);
+
+ nmt_edit_connection_list_rebuild (list);
+
+ G_OBJECT_CLASS (nmt_edit_connection_list_parent_class)->constructed (object);
+}
+
+static void
+add_clicked (NmtNewtButton *button, gpointer list)
+{
+ g_signal_emit (list, signals[ADD_CONNECTION], 0);
+}
+
+static void
+edit_clicked (NmtNewtButton *button, gpointer list)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+ NMConnection *connection;
+
+ connection = nmt_newt_listbox_get_active_key (priv->listbox);
+ g_return_if_fail (connection != NULL);
+
+ g_signal_emit (list, signals[EDIT_CONNECTION], 0, connection);
+}
+
+static void
+delete_clicked (NmtNewtButton *button, gpointer list)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+ NMRemoteConnection *connection;
+
+ connection = nmt_newt_listbox_get_active_key (priv->listbox);
+ g_return_if_fail (connection != NULL);
+
+ g_signal_emit (list, signals[REMOVE_CONNECTION], 0, connection);
+}
+
+static void
+listbox_activated (NmtNewtWidget *listbox, gpointer list)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
+
+ edit_clicked (NMT_NEWT_BUTTON (priv->edit), list);
+}
+
+static void
+nmt_edit_connection_list_finalize (GObject *object)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (object);
+
+ free_connections (NMT_EDIT_CONNECTION_LIST (object));
+ g_clear_object (&priv->extra);
+
+ G_OBJECT_CLASS (nmt_edit_connection_list_parent_class)->finalize (object);
+}
+
+static void
+nmt_edit_connection_list_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_GROUPED:
+ priv->grouped = g_value_get_boolean (value);
+ break;
+ case PROP_CONNECTION_FILTER:
+ priv->connection_filter = g_value_get_pointer (value);
+ break;
+ case PROP_CONNECTION_FILTER_DATA:
+ priv->connection_filter_data = g_value_get_pointer (value);
+ break;
+ case PROP_EXTRA_WIDGET:
+ priv->extra = g_value_get_object (value);
+ if (priv->extra)
+ g_object_ref_sink (priv->extra);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_edit_connection_list_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (object);
+ GPtrArray *connections;
+ GSList *iter;
+
+ switch (prop_id) {
+ case PROP_GROUPED:
+ g_value_set_boolean (value, priv->grouped);
+ break;
+ case PROP_CONNECTION_FILTER:
+ g_value_set_pointer (value, priv->connection_filter);
+ break;
+ case PROP_CONNECTION_FILTER_DATA:
+ g_value_set_pointer (value, priv->connection_filter_data);
+ break;
+ case PROP_EXTRA_WIDGET:
+ g_value_set_object (value, priv->extra);
+ break;
+ case PROP_CONNECTIONS:
+ connections = g_ptr_array_new_with_free_func (g_object_unref);
+ for (iter = priv->connections; iter; iter = iter->next)
+ g_ptr_array_add (connections, g_object_ref (iter->data));
+ g_value_take_boxed (value, connections);
+ break;
+ case PROP_NUM_CONNECTIONS:
+ g_value_set_int (value, g_slist_length (priv->connections));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_edit_connection_list_class_init (NmtEditConnectionListClass *list_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (list_class);
+
+ g_type_class_add_private (list_class, sizeof (NmtEditConnectionListPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_edit_connection_list_constructed;
+ object_class->set_property = nmt_edit_connection_list_set_property;
+ object_class->get_property = nmt_edit_connection_list_get_property;
+ object_class->finalize = nmt_edit_connection_list_finalize;
+
+ /* signals */
+
+ /**
+ * NmtEditConnectionList::add-connection:
+ * @list: the #NmtEditConnectionList
+ *
+ * Emitted when the user clicks the list's "Add" button.
+ */
+ signals[ADD_CONNECTION] =
+ g_signal_new ("add-connection",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtEditConnectionListClass, add_connection),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ /**
+ * NmtEditConnectionList::edit-connection:
+ * @list: the #NmtEditConnectionList
+ * @connection: the connection to edit
+ *
+ * Emitted when the user clicks the list's "Edit" button, or
+ * hits "Return" on the listbox.
+ */
+ signals[EDIT_CONNECTION] =
+ g_signal_new ("edit-connection",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtEditConnectionListClass, edit_connection),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_CONNECTION);
+
+ /**
+ * NmtEditConnectionList::remove-connection:
+ * @list: the #NmtEditConnectionList
+ * @connection: the connection to remove
+ *
+ * Emitted when the user clicks the list's "Delete" button.
+ */
+ signals[REMOVE_CONNECTION] =
+ g_signal_new ("remove-connection",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtEditConnectionListClass, remove_connection),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_CONNECTION);
+
+ /* properties */
+
+ /**
+ * NmtEditConnectionList:grouped:
+ *
+ * If %TRUE, connections should be grouped by type, with headers
+ * indicating the types (as in the main connection list). If %FALSE,
+ * they will not be grouped (as in slave connection lists).
+ */
+ g_object_class_install_property (object_class, PROP_GROUPED,
+ g_param_spec_boolean ("grouped", "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NmtEditConnectionListFilter:
+ * @list: the #NmtEditConnectionList
+ * @connection: an #NMConnection
+ * @user_data: the user data
+ *
+ * Decides whether @connection should be displayed in @list.
+ *
+ * Returns: %TRUE or %FALSE
+ */
+ /**
+ * NmtEditConnectionList:connection-filter:
+ *
+ * A callback function for filtering which connections appear in
+ * the list.
+ */
+ g_object_class_install_property (object_class, PROP_CONNECTION_FILTER,
+ g_param_spec_pointer ("connection-filter", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtEditConnectionList:connection-filter-data:
+ *
+ * Data for the #NmtEditConnectionList:connection-filter.
+ */
+ g_object_class_install_property (object_class, PROP_CONNECTION_FILTER_DATA,
+ g_param_spec_pointer ("connection-filter-data", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NmtEditConnectionList:extra-widget:
+ *
+ * An extra button widget to display at the bottom of the button
+ * box.
+ */
+ g_object_class_install_property (object_class, PROP_EXTRA_WIDGET,
+ g_param_spec_object ("extra-widget", "", "",
+ NMT_TYPE_NEWT_WIDGET,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NmtEditConnectionList:connections:
+ *
+ * The list of connections in the widget.
+ *
+ * Element-Type: #NMConnection
+ */
+ g_object_class_install_property (object_class, PROP_CONNECTIONS,
+ g_param_spec_boxed ("connections", "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NmtEditConnectionList:num-connections:
+ *
+ * The number of connections in the widget.
+ */
+ g_object_class_install_property (object_class, PROP_NUM_CONNECTIONS,
+ g_param_spec_int ("num-connections", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-edit-connection-list.h b/tui/nmt-edit-connection-list.h
new file mode 100644
index 000000000..35157e94d
--- /dev/null
+++ b/tui/nmt-edit-connection-list.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_EDIT_CONNECTION_LIST_H
+#define NMT_EDIT_CONNECTION_LIST_H
+
+#include "nmt-newt.h"
+
+#include <nm-remote-connection.h>
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_EDIT_CONNECTION_LIST (nmt_edit_connection_list_get_type ())
+#define NMT_EDIT_CONNECTION_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_EDIT_CONNECTION_LIST, NmtEditConnectionList))
+#define NMT_EDIT_CONNECTION_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_EDIT_CONNECTION_LIST, NmtEditConnectionListClass))
+#define NMT_IS_EDIT_CONNECTION_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_EDIT_CONNECTION_LIST))
+#define NMT_IS_EDIT_CONNECTION_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_EDIT_CONNECTION_LIST))
+#define NMT_EDIT_CONNECTION_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_EDIT_CONNECTION_LIST, NmtEditConnectionListClass))
+
+typedef struct {
+ NmtNewtGrid parent;
+
+} NmtEditConnectionList;
+
+typedef struct {
+ NmtNewtGridClass parent;
+
+ /* signals */
+ void (*add_connection) (NmtEditConnectionList *list);
+ void (*edit_connection) (NmtEditConnectionList *list,
+ NMConnection *connection);
+ void (*remove_connection) (NmtEditConnectionList *list,
+ NMRemoteConnection *connection);
+} NmtEditConnectionListClass;
+
+GType nmt_edit_connection_list_get_type (void);
+
+typedef gboolean (*NmtEditConnectionListFilter) (NmtEditConnectionList *list,
+ NMConnection *connection,
+ gpointer user_data);
+
+GSList *nmt_edit_connection_list_get_connections (NmtEditConnectionList *list);
+
+G_END_DECLS
+
+#endif /* NMT_EDIT_CONNECTION_LIST_H */
diff --git a/tui/nmt-editor-page.c b/tui/nmt-editor-page.c
new file mode 100644
index 000000000..549a86a6f
--- /dev/null
+++ b/tui/nmt-editor-page.c
@@ -0,0 +1,227 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-editor-page:
+ * @short_description: An #NmtEditor "page"
+ *
+ * #NmtEditorPage is the abstract base class for #NmtEditor "pages".
+ * Note that despite the name, currently all "page" types except
+ * #NmtPageMain are actually displayed as collapsible sections, not
+ * separate tabs/forms.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-editor-page.h"
+
+G_DEFINE_ABSTRACT_TYPE (NmtEditorPage, nmt_editor_page, NMT_TYPE_PAGE_GRID)
+
+#define NMT_EDITOR_PAGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_EDITOR_PAGE, NmtEditorPagePrivate))
+
+typedef struct {
+ char *title;
+ NmtNewtWidget *header_widget;
+ NMConnection *connection;
+
+} NmtEditorPagePrivate;
+
+enum {
+ PROP_0,
+
+ PROP_CONNECTION,
+ PROP_TITLE,
+
+ LAST_PROP
+};
+
+static void
+nmt_editor_page_init (NmtEditorPage *page)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (page);
+
+ priv->header_widget = g_object_ref_sink (nmt_newt_separator_new ());
+}
+
+static void
+nmt_editor_page_finalize (GObject *object)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (object);
+
+ g_free (priv->title);
+ g_clear_object (&priv->header_widget);
+ g_clear_object (&priv->connection);
+
+ G_OBJECT_CLASS (nmt_editor_page_parent_class)->finalize (object);
+}
+
+/**
+ * nmt_editor_page_get_connection:
+ * @page: the #NmtEditorPage
+ *
+ * Gets the page's #NMConnection.
+ *
+ * Returns: (transfer none): the page's #NMConnection.
+ */
+NMConnection *
+nmt_editor_page_get_connection (NmtEditorPage *page)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (page);
+
+ return priv->connection;
+}
+
+/**
+ * nmt_editor_page_set_header_widget:
+ * @page: the #NmtEditorPage
+ * @widget: an #NmtNewtWidget
+ *
+ * Sets the page's header widget. When displayed as a subpage of
+ * #NmtPageMain, this widget will be put into the corresponding
+ * #NmtNewtSection's header.
+ *
+ * FIXME: for consistency, this should be a property as well.
+ */
+void
+nmt_editor_page_set_header_widget (NmtEditorPage *page,
+ NmtNewtWidget *widget)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (page);
+
+ g_clear_object (&priv->header_widget);
+
+ if (!widget)
+ widget = nmt_newt_separator_new ();
+ priv->header_widget = g_object_ref_sink (widget);
+}
+
+/**
+ * nmt_editor_page_get_header_widget:
+ * @page: the #NmtEditorPage
+ *
+ * Gets the page's header widget. When displayed as a subpage of
+ * #NmtPageMain, this widget will be put into the corresponding
+ * #NmtNewtSection's header.
+ *
+ * Returns: (transfer none): the page's header widget.
+ */
+NmtNewtWidget *
+nmt_editor_page_get_header_widget (NmtEditorPage *page)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (page);
+
+ return priv->header_widget;
+}
+
+/**
+ * nmt_editor_page_get_title:
+ * @page: the #NmtEditorPage
+ *
+ * Gets the page's title.
+ *
+ * Returns: the page's title
+ */
+const char *
+nmt_editor_page_get_title (NmtEditorPage *page)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (page);
+
+ return priv->title;
+}
+
+static void
+nmt_editor_page_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CONNECTION:
+ priv->connection = g_value_dup_object (value);
+ break;
+ case PROP_TITLE:
+ priv->title = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_page_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CONNECTION:
+ g_value_set_object (value, priv->connection);
+ break;
+ case PROP_TITLE:
+ g_value_set_string (value, priv->title);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_page_class_init (NmtEditorPageClass *page_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (page_class);
+
+ g_type_class_add_private (page_class, sizeof (NmtEditorPagePrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_editor_page_set_property;
+ object_class->get_property = nmt_editor_page_get_property;
+ object_class->finalize = nmt_editor_page_finalize;
+
+ /* properties */
+
+ /**
+ * NmtEditorPage:connection:
+ *
+ * The page's #NMConnection.
+ */
+ g_object_class_install_property (object_class, PROP_CONNECTION,
+ g_param_spec_object ("connection", "", "",
+ NM_TYPE_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtEditorPage:title:
+ *
+ * The page's title.
+ */
+ g_object_class_install_property (object_class, PROP_TITLE,
+ g_param_spec_string ("title", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-editor-page.h b/tui/nmt-editor-page.h
new file mode 100644
index 000000000..d9a97102e
--- /dev/null
+++ b/tui/nmt-editor-page.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_EDITOR_PAGE_H
+#define NMT_EDITOR_PAGE_H
+
+#include <nm-connection.h>
+
+#include "nmt-page-grid.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_EDITOR_PAGE (nmt_editor_page_get_type ())
+#define NMT_EDITOR_PAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_EDITOR_PAGE, NmtEditorPage))
+#define NMT_EDITOR_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_EDITOR_PAGE, NmtEditorPageClass))
+#define NMT_IS_EDITOR_PAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_EDITOR_PAGE))
+#define NMT_IS_EDITOR_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_EDITOR_PAGE))
+#define NMT_EDITOR_PAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_EDITOR_PAGE, NmtEditorPageClass))
+
+typedef struct {
+ NmtPageGrid parent;
+
+} NmtEditorPage;
+
+typedef struct {
+ NmtPageGridClass parent;
+
+} NmtEditorPageClass;
+
+GType nmt_editor_page_get_type (void);
+
+NMConnection *nmt_editor_page_get_connection (NmtEditorPage *page);
+
+void nmt_editor_page_set_header_widget (NmtEditorPage *page,
+ NmtNewtWidget *widget);
+NmtNewtWidget *nmt_editor_page_get_header_widget (NmtEditorPage *page);
+
+const char *nmt_editor_page_get_title (NmtEditorPage *page);
+
+G_END_DECLS
+
+#endif /* NMT_EDITOR_PAGE_H */
diff --git a/tui/nmt-editor.c b/tui/nmt-editor.c
new file mode 100644
index 000000000..b204a5c86
--- /dev/null
+++ b/tui/nmt-editor.c
@@ -0,0 +1,330 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-editor
+ * @short_description: Connection editing form
+ *
+ * #NmtEditor is the top-level form for editing a connection.
+ */
+
+#include "config.h"
+
+#include "nmt-editor.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#include <nm-utils.h>
+
+#include "nmtui.h"
+
+#include "nm-editor-utils.h"
+#include "nmt-page-main.h"
+#include "nmt-utils.h"
+
+G_DEFINE_TYPE (NmtEditor, nmt_editor, NMT_TYPE_NEWT_FORM)
+
+#define NMT_EDITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_EDITOR, NmtEditorPrivate))
+
+typedef struct {
+ NMConnection *orig_connection;
+ NMConnection *edit_connection;
+
+ NMEditorConnectionTypeData *type_data;
+
+ NmtNewtWidget *ok, *cancel;
+ gboolean running;
+} NmtEditorPrivate;
+
+enum {
+ PROP_0,
+ PROP_CONNECTION,
+ PROP_TYPE_DATA,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_editor_new:
+ * @connection: the #NMConnection to edit
+ *
+ * Creates a new #NmtEditor to edit @connection.
+ *
+ * Returns: a new #NmtEditor
+ */
+NmtNewtForm *
+nmt_editor_new (NMConnection *connection)
+{
+ NMEditorConnectionTypeData *type_data;
+
+ type_data = nm_editor_utils_get_connection_type_data (connection);
+ if (!type_data) {
+ NMSettingConnection *s_con;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ if (s_con) {
+ nmt_newt_message_dialog (_("Could not create editor for connection '%s' of type '%s'."),
+ nm_connection_get_id (connection),
+ nm_setting_connection_get_connection_type (s_con));
+ } else {
+ nmt_newt_message_dialog (_("Could not create editor for invalid connection '%s'."),
+ nm_connection_get_id (connection));
+ }
+
+ return NULL;
+ }
+
+ return g_object_new (NMT_TYPE_EDITOR,
+ "connection", connection,
+ "type-data", type_data,
+ "title", _("Edit Connection"),
+ "fullscreen-vertical", TRUE,
+ NULL);
+}
+
+static void
+nmt_editor_init (NmtEditor *entry)
+{
+}
+
+static void
+connection_updated (NMRemoteConnection *connection,
+ GError *error,
+ gpointer op)
+{
+ nmt_sync_op_complete_boolean (op, error == NULL, error);
+}
+
+static void
+connection_added (NMRemoteSettings *settings,
+ NMRemoteConnection *connection,
+ GError *error,
+ gpointer op)
+{
+ nmt_sync_op_complete_boolean (op, error == NULL, error);
+}
+
+static void
+save_connection_and_exit (NmtNewtButton *button,
+ gpointer user_data)
+{
+ NmtEditor *editor = user_data;
+ NmtEditorPrivate *priv = NMT_EDITOR_GET_PRIVATE (editor);
+ NmtSyncOp op;
+ GError *error = NULL;
+
+ if (!nm_connection_replace_settings_from_connection (priv->orig_connection,
+ priv->edit_connection,
+ &error)) {
+ nmt_newt_message_dialog (_("Error saving connection: %s"), error->message);
+ g_error_free (error);
+ return;
+ }
+
+ nmt_sync_op_init (&op);
+ if (NM_IS_REMOTE_CONNECTION (priv->orig_connection)) {
+ nm_remote_connection_commit_changes (NM_REMOTE_CONNECTION (priv->orig_connection),
+ connection_updated, &op);
+ if (!nmt_sync_op_wait_boolean (&op, &error)) {
+ nmt_newt_message_dialog (_("Unable to save connection: %s"),
+ error->message);
+ g_error_free (error);
+ return;
+ }
+
+ /* Clear secrets so they don't lay around in memory; they'll get
+ * requested again anyway next time the connection is edited.
+ */
+ nm_connection_clear_secrets (priv->orig_connection);
+ } else {
+ nm_remote_settings_add_connection (nm_settings, priv->orig_connection,
+ connection_added, &op);
+ if (!nmt_sync_op_wait_boolean (&op, &error)) {
+ nmt_newt_message_dialog (_("Unable to add new connection: %s"),
+ error->message);
+ g_error_free (error);
+ return;
+ }
+ }
+
+ nmt_newt_form_quit (NMT_NEWT_FORM (editor));
+}
+
+static void
+got_secrets (NMRemoteConnection *connection,
+ GHashTable *secrets,
+ GError *error,
+ gpointer op)
+{
+ nmt_sync_op_complete_pointer (op, secrets, error);
+}
+
+static NMConnection *
+build_edit_connection (NMConnection *orig_connection)
+{
+ NMConnection *edit_connection;
+ GHashTable *settings, *secrets;
+ GHashTableIter iter;
+ const char *setting_name;
+ NmtSyncOp op;
+
+ edit_connection = nm_connection_duplicate (orig_connection);
+
+ if (!NM_IS_REMOTE_CONNECTION (orig_connection))
+ return edit_connection;
+
+ settings = nm_connection_to_hash (orig_connection, NM_SETTING_HASH_FLAG_NO_SECRETS);
+ g_hash_table_iter_init (&iter, settings);
+ while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, NULL)) {
+ nmt_sync_op_init (&op);
+ nm_remote_connection_get_secrets (NM_REMOTE_CONNECTION (orig_connection),
+ setting_name, got_secrets, &op);
+ /* FIXME: error handling */
+ secrets = nmt_sync_op_wait_pointer (&op, NULL);
+ if (secrets)
+ (void) nm_connection_update_secrets (edit_connection, setting_name, secrets, NULL);
+ }
+ g_hash_table_unref (settings);
+
+ return edit_connection;
+}
+
+static void
+nmt_editor_constructed (GObject *object)
+{
+ NmtEditor *editor = NMT_EDITOR (object);
+ NmtEditorPrivate *priv = NMT_EDITOR_GET_PRIVATE (editor);
+ NmtNewtWidget *vbox, *buttons, *page;
+
+ if (G_OBJECT_CLASS (nmt_editor_parent_class)->constructed)
+ G_OBJECT_CLASS (nmt_editor_parent_class)->constructed (object);
+
+ priv->edit_connection = build_edit_connection (priv->orig_connection);
+
+ vbox = nmt_newt_grid_new ();
+
+ page = nmt_page_main_new (priv->edit_connection, priv->type_data);
+ nmt_newt_grid_add (NMT_NEWT_GRID (vbox), page, 0, 0);
+
+ buttons = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_HORIZONTAL);
+ nmt_newt_grid_add (NMT_NEWT_GRID (vbox), buttons, 0, 1);
+ nmt_newt_widget_set_padding (buttons, 0, 1, 0, 0);
+
+ priv->cancel = nmt_newt_button_box_add_end (NMT_NEWT_BUTTON_BOX (buttons), _("Cancel"));
+ nmt_newt_widget_set_exit_on_activate (priv->cancel, TRUE);
+
+ priv->ok = nmt_newt_button_box_add_end (NMT_NEWT_BUTTON_BOX (buttons), _("OK"));
+ g_signal_connect (priv->ok, "clicked", G_CALLBACK (save_connection_and_exit), editor);
+ g_object_bind_property (page, "valid",
+ priv->ok, "sensitive",
+ G_BINDING_SYNC_CREATE);
+
+ nmt_newt_form_set_content (NMT_NEWT_FORM (editor), vbox);
+}
+
+static void
+nmt_editor_finalize (GObject *object)
+{
+ NmtEditorPrivate *priv = NMT_EDITOR_GET_PRIVATE (object);
+
+ g_clear_object (&priv->orig_connection);
+ g_clear_object (&priv->edit_connection);
+
+ g_clear_object (&priv->ok);
+ g_clear_object (&priv->cancel);
+
+ G_OBJECT_CLASS (nmt_editor_parent_class)->finalize (object);
+}
+
+static void
+nmt_editor_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorPrivate *priv = NMT_EDITOR_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CONNECTION:
+ priv->orig_connection = g_value_dup_object (value);
+ break;
+ case PROP_TYPE_DATA:
+ priv->type_data = g_value_get_pointer (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorPrivate *priv = NMT_EDITOR_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CONNECTION:
+ g_value_set_object (value, priv->orig_connection);
+ break;
+ case PROP_TYPE_DATA:
+ g_value_set_pointer (value, priv->type_data);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_class_init (NmtEditorClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtEditorPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_editor_constructed;
+ object_class->set_property = nmt_editor_set_property;
+ object_class->get_property = nmt_editor_get_property;
+ object_class->finalize = nmt_editor_finalize;
+
+ /**
+ * NmtEditor:connection:
+ *
+ * The connection being edited.
+ */
+ g_object_class_install_property (object_class, PROP_CONNECTION,
+ g_param_spec_object ("connection", "", "",
+ NM_TYPE_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtEditor:type-data:
+ *
+ * The #NmEditorConnectionTypeData for #NmtEditor:connection.
+ */
+ g_object_class_install_property (object_class, PROP_TYPE_DATA,
+ g_param_spec_pointer ("type-data", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-editor.h b/tui/nmt-editor.h
new file mode 100644
index 000000000..a991a7666
--- /dev/null
+++ b/tui/nmt-editor.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_EDITOR_H
+#define NMT_EDITOR_H
+
+#include <nm-connection.h>
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_EDITOR (nmt_editor_get_type ())
+#define NMT_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_EDITOR, NmtEditor))
+#define NMT_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_EDITOR, NmtEditorClass))
+#define NMT_IS_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_EDITOR))
+#define NMT_IS_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_EDITOR))
+#define NMT_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_EDITOR, NmtEditorClass))
+
+typedef struct {
+ NmtNewtForm parent;
+
+} NmtEditor;
+
+typedef struct {
+ NmtNewtFormClass parent;
+
+} NmtEditorClass;
+
+GType nmt_editor_get_type (void);
+
+NmtNewtForm *nmt_editor_new (NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* NMT_EDITOR_H */
diff --git a/tui/nmt-ip-entry.c b/tui/nmt-ip-entry.c
new file mode 100644
index 000000000..85a29fcce
--- /dev/null
+++ b/tui/nmt-ip-entry.c
@@ -0,0 +1,265 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-ip-entry
+ * @short_description: #NmtNewtEntry for IP address entry
+ *
+ * #NmtIPEntry is an #NmtNewtEntry for entering IP addresses, or IP
+ * address/prefix combination. It will only allow typing characters
+ * that are valid in an IP address, and will set its
+ * #NmtNewtWidget:valid property depending on whether it currently
+ * contains a valid IP address.
+ */
+
+#include "config.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-ip-entry.h"
+
+G_DEFINE_TYPE (NmtIPEntry, nmt_ip_entry, NMT_TYPE_NEWT_ENTRY)
+
+#define NMT_IP_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_IP_ENTRY, NmtIPEntryPrivate))
+
+typedef struct {
+ int family;
+ gboolean prefix;
+ gboolean optional;
+
+} NmtIPEntryPrivate;
+
+enum {
+ PROP_0,
+ PROP_FAMILY,
+ PROP_PREFIX,
+ PROP_OPTIONAL,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_ip_entry_new:
+ * @width: the width of the entry
+ * @family: the IP address family. Eg, %AF_INET
+ * @prefix: whether to require a trailing "/prefix"
+ * @optional: whether the address is optional
+ *
+ * Creates a new #NmtIPEntry, to accept IP addresses in the indicated
+ * @family, or (if @prefix is %TRUE), to accept IP address/prefix combos.
+ *
+ * If @optional is %TRUE then the address is considered optional, and
+ * so will still be #NmtNewtWidget:valid even when it is empty. If
+ * @optional is %FALSE, the entry will be invalid when it is empty.
+ */
+NmtNewtWidget *
+nmt_ip_entry_new (int width,
+ int family,
+ gboolean prefix,
+ gboolean optional)
+{
+ return g_object_new (NMT_TYPE_IP_ENTRY,
+ "width", width,
+ "family", family,
+ "prefix", prefix,
+ "optional", optional,
+ NULL);
+}
+
+static gboolean
+ip_entry_filter (NmtNewtEntry *entry,
+ const char *text,
+ int ch,
+ int position,
+ gpointer user_data)
+{
+ NmtIPEntryPrivate *priv = NMT_IP_ENTRY_GET_PRIVATE (entry);
+ const char *slash;
+ gboolean inaddr;
+
+ if (g_ascii_isdigit (ch))
+ return TRUE;
+
+ slash = strchr (text, '/');
+ if (ch == '/')
+ return priv->prefix && slash == NULL;
+
+ inaddr = !slash || (position <= (slash - text));
+
+ if (priv->family == AF_INET) {
+ if (ch == '.')
+ return inaddr;
+ else
+ return FALSE;
+ } else if (priv->family == AF_INET6) {
+ if (g_ascii_isxdigit (ch) || ch == ':')
+ return inaddr;
+ else
+ return FALSE;
+ } else
+ g_return_val_if_reached (FALSE);
+}
+
+static gboolean
+ip_entry_validate (NmtNewtEntry *entry,
+ const char *text,
+ gpointer user_data)
+{
+ NmtIPEntryPrivate *priv = NMT_IP_ENTRY_GET_PRIVATE (entry);
+ guchar buf[16];
+ guint32 prefix;
+ const char *slash;
+ char *addrstr, *end;
+ gboolean valid;
+
+ if (!*text)
+ return priv->optional;
+
+ slash = strchr (text, '/');
+
+ if (slash) {
+ if (!priv->prefix)
+ return FALSE;
+ addrstr = g_strndup (text, slash - text);
+ } else
+ addrstr = g_strdup (text);
+ valid = (inet_pton (priv->family, addrstr, buf) == 1);
+ g_free (addrstr);
+
+ if (!valid)
+ return FALSE;
+
+ if (slash) {
+ prefix = strtoul (slash + 1, &end, 10);
+ if ( *end
+ || prefix == 0
+ || (priv->family == AF_INET && prefix > 32)
+ || (priv->family == AF_INET6 && prefix > 128))
+ valid = FALSE;
+ }
+
+ return valid;
+}
+
+static void
+nmt_ip_entry_init (NmtIPEntry *entry)
+{
+ nmt_newt_entry_set_filter (NMT_NEWT_ENTRY (entry), ip_entry_filter, NULL);
+ nmt_newt_entry_set_validator (NMT_NEWT_ENTRY (entry), ip_entry_validate, NULL);
+}
+
+static void
+nmt_ip_entry_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtIPEntryPrivate *priv = NMT_IP_ENTRY_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ priv->family = g_value_get_int (value);
+ break;
+ case PROP_PREFIX:
+ priv->prefix = g_value_get_boolean (value);
+ break;
+ case PROP_OPTIONAL:
+ priv->optional = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_ip_entry_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtIPEntryPrivate *priv = NMT_IP_ENTRY_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ g_value_set_int (value, priv->family);
+ break;
+ case PROP_PREFIX:
+ g_value_set_boolean (value, priv->prefix);
+ break;
+ case PROP_OPTIONAL:
+ g_value_set_boolean (value, priv->optional);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_ip_entry_class_init (NmtIPEntryClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtIPEntryPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_ip_entry_set_property;
+ object_class->get_property = nmt_ip_entry_get_property;
+
+ /**
+ * NmtIPEntry:family:
+ *
+ * The address family. Eg, %AF_INET
+ */
+ g_object_class_install_property (object_class, PROP_FAMILY,
+ g_param_spec_int ("family", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtIPEntry:prefix:
+ *
+ * If %TRUE, the entry accepts address/prefix combinations. If
+ * %FALSE it accepts just addresses.
+ */
+ g_object_class_install_property (object_class, PROP_PREFIX,
+ g_param_spec_boolean ("prefix", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtIPEntry:optional:
+ *
+ * If %TRUE, the entry will be #NmtNewtWidget:valid when it is
+ * empty. If %FALSE, it will only be valid when it contains a
+ * valid address or address/prefix.
+ */
+ g_object_class_install_property (object_class, PROP_OPTIONAL,
+ g_param_spec_boolean ("optional", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-ip-entry.h b/tui/nmt-ip-entry.h
new file mode 100644
index 000000000..ceb355efc
--- /dev/null
+++ b/tui/nmt-ip-entry.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_IP_ENTRY_H
+#define NMT_IP_ENTRY_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_IP_ENTRY (nmt_ip_entry_get_type ())
+#define NMT_IP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_IP_ENTRY, NmtIPEntry))
+#define NMT_IP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_IP_ENTRY, NmtIPEntryClass))
+#define NMT_IS_IP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_IP_ENTRY))
+#define NMT_IS_IP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_IP_ENTRY))
+#define NMT_IP_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_IP_ENTRY, NmtIPEntryClass))
+
+typedef struct {
+ NmtNewtEntry parent;
+
+} NmtIPEntry;
+
+typedef struct {
+ NmtNewtEntryClass parent;
+
+} NmtIPEntryClass;
+
+GType nmt_ip_entry_get_type (void);
+
+NmtNewtWidget *nmt_ip_entry_new (int width,
+ int family,
+ gboolean prefix,
+ gboolean optional);
+
+G_END_DECLS
+
+#endif /* NMT_IP_ENTRY_H */
diff --git a/tui/nmt-mac-entry.c b/tui/nmt-mac-entry.c
new file mode 100644
index 000000000..5e1c41743
--- /dev/null
+++ b/tui/nmt-mac-entry.c
@@ -0,0 +1,236 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-mac-entry
+ * @short_description: #NmtNewtEntry for hardware address entry
+ *
+ * #NmtMacEntry is an #NmtNewtEntry for entering hardware addresses.
+ * It will only allow typing characters that are valid in a hardware
+ * address, and will set its #NmtNewtWidget:valid property depending
+ * on whether it currently contains a valid hardware address.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <dbus/dbus-glib.h>
+#include <nm-utils.h>
+
+#include "nmt-mac-entry.h"
+
+G_DEFINE_TYPE (NmtMacEntry, nmt_mac_entry, NMT_TYPE_NEWT_ENTRY)
+
+#define NMT_MAC_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_MAC_ENTRY, NmtMacEntryPrivate))
+
+typedef struct {
+ int mac_length;
+ int mac_str_length;
+
+} NmtMacEntryPrivate;
+
+enum {
+ PROP_0,
+ PROP_MAC_LENGTH,
+ PROP_MAC_ADDRESS,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_mac_entry_new:
+ * @width: the width in characters of the entry
+ * @mac_length: the length in bytes of the hardware address
+ * (either %ETH_ALEN or %INFINIBAND_ALEN)
+ *
+ * Creates a new #NmtMacEntry.
+ *
+ * Returns: a new #NmtMacEntry.
+ */
+NmtNewtWidget *
+nmt_mac_entry_new (int width,
+ int mac_length)
+{
+ return g_object_new (NMT_TYPE_MAC_ENTRY,
+ "width", width,
+ "mac-length", mac_length,
+ NULL);
+}
+
+static gboolean
+mac_filter (NmtNewtEntry *entry,
+ const char *text,
+ int ch,
+ int position,
+ gpointer user_data)
+{
+ NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (entry);
+
+ if (position >= priv->mac_str_length)
+ return FALSE;
+
+ return g_ascii_isxdigit (ch) || ch == ':';
+}
+
+static gboolean
+mac_validator (NmtNewtEntry *entry,
+ const char *text,
+ gpointer user_data)
+{
+ NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (entry);
+ const char *p;
+
+ if (!*text)
+ return TRUE;
+
+ p = text;
+ while ( g_ascii_isxdigit (p[0])
+ && g_ascii_isxdigit (p[1])
+ && p[2] == ':')
+ p += 3;
+
+ if ( !g_ascii_isxdigit (p[0])
+ || !g_ascii_isxdigit (p[1]))
+ return FALSE;
+ p += 2;
+
+ if (!*p)
+ return (p - text == priv->mac_str_length);
+
+ if (g_ascii_isxdigit (p[0]) && !p[1]) {
+ char *fixed = g_strdup_printf ("%.*s:%c", (int)(p - text), text, *p);
+
+ nmt_newt_entry_set_text (entry, fixed);
+ g_free (fixed);
+
+ /* FIXME: NmtNewtEntry doesn't correctly deal with us calling set_text()
+ * from inside the validator.
+ */
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (entry));
+ }
+
+ return FALSE;
+}
+
+static void
+nmt_mac_entry_init (NmtMacEntry *entry)
+{
+ nmt_newt_entry_set_filter (NMT_NEWT_ENTRY (entry), mac_filter, NULL);
+ nmt_newt_entry_set_validator (NMT_NEWT_ENTRY (entry), mac_validator, NULL);
+}
+
+static void
+nmt_mac_entry_notify (GObject *object,
+ GParamSpec *pspec)
+{
+ if (G_OBJECT_CLASS (nmt_mac_entry_parent_class)->notify)
+ G_OBJECT_CLASS (nmt_mac_entry_parent_class)->notify (object, pspec);
+
+ if (pspec->owner_type == NMT_TYPE_NEWT_ENTRY && !strcmp (pspec->name, "text"))
+ g_object_notify (object, "mac-address");
+}
+
+static void
+nmt_mac_entry_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (object);
+ GByteArray *addr;
+ char *addr_str;
+
+ switch (prop_id) {
+ case PROP_MAC_LENGTH:
+ priv->mac_length = g_value_get_int (value);
+ priv->mac_str_length = priv->mac_length * 3 - 1;
+ break;
+ case PROP_MAC_ADDRESS:
+ addr = g_value_get_boxed (value);
+ if (addr) {
+ addr_str = nm_utils_hwaddr_ntoa_len (addr->data, addr->len);
+ nmt_newt_entry_set_text (NMT_NEWT_ENTRY (object), addr_str);
+ g_free (addr_str);
+ } else
+ nmt_newt_entry_set_text (NMT_NEWT_ENTRY (object), "");
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_mac_entry_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (object);
+ GByteArray *addr;
+
+ switch (prop_id) {
+ case PROP_MAC_LENGTH:
+ g_value_set_int (value, priv->mac_length);
+ break;
+ case PROP_MAC_ADDRESS:
+ addr = nm_utils_hwaddr_atoba (nmt_newt_entry_get_text (NMT_NEWT_ENTRY (object)), ARPHRD_ETHER);
+ g_value_take_boxed (value, addr);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_mac_entry_class_init (NmtMacEntryClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtMacEntryPrivate));
+
+ /* virtual methods */
+ object_class->notify = nmt_mac_entry_notify;
+ object_class->set_property = nmt_mac_entry_set_property;
+ object_class->get_property = nmt_mac_entry_get_property;
+
+ /**
+ * NmtMacEntry:mac-length:
+ *
+ * The length in bytes of the hardware address type the entry
+ * accepts: either %ETH_ALEN or %INFINIBAND_ALEN.
+ */
+ g_object_class_install_property (object_class, PROP_MAC_LENGTH,
+ g_param_spec_int ("mac-length", "", "",
+ 0, INFINIBAND_ALEN, ETH_ALEN,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtMacEntry:mac-address:
+ *
+ * The MAC address, in binary (in the same format used by the various
+ * #NMSetting "mac-address" properties).
+ */
+ g_object_class_install_property (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_boxed ("mac-address", "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-mac-entry.h b/tui/nmt-mac-entry.h
new file mode 100644
index 000000000..33a323298
--- /dev/null
+++ b/tui/nmt-mac-entry.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_MAC_ENTRY_H
+#define NMT_MAC_ENTRY_H
+
+#include <linux/if_ether.h>
+#include <linux/if_infiniband.h>
+#include <linux/if_arp.h>
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_MAC_ENTRY (nmt_mac_entry_get_type ())
+#define NMT_MAC_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_MAC_ENTRY, NmtMacEntry))
+#define NMT_MAC_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_MAC_ENTRY, NmtMacEntryClass))
+#define NMT_IS_MAC_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_MAC_ENTRY))
+#define NMT_IS_MAC_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_MAC_ENTRY))
+#define NMT_MAC_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_MAC_ENTRY, NmtMacEntryClass))
+
+typedef struct {
+ NmtNewtEntry parent;
+
+} NmtMacEntry;
+
+typedef struct {
+ NmtNewtEntryClass parent;
+
+} NmtMacEntryClass;
+
+GType nmt_mac_entry_get_type (void);
+
+NmtNewtWidget *nmt_mac_entry_new (int width,
+ int mac_length);
+
+G_END_DECLS
+
+#endif /* NMT_MAC_ENTRY_H */
diff --git a/tui/nmt-mtu-entry.c b/tui/nmt-mtu-entry.c
new file mode 100644
index 000000000..da3746ccb
--- /dev/null
+++ b/tui/nmt-mtu-entry.c
@@ -0,0 +1,191 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-mtu-entry
+ * @short_description: #NmtNewtEntry for MTU entry
+ *
+ * #NmtMtuEntry is an #NmtNewtEntry for entering MTU values. It will
+ * only allow typing numeric characters, and will set its
+ * #NmtNewtWidget:valid property depending on whether it currently
+ * contains a valid MTU.
+ *
+ * The entry also has an attached #NmtNewtLabel. When the entry value
+ * is "0", the label will read "(default)". Otherwise it reads "bytes",
+ * indicating the units used by the entry.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-mtu-entry.h"
+
+G_DEFINE_TYPE (NmtMtuEntry, nmt_mtu_entry, NMT_TYPE_NEWT_GRID)
+
+#define NMT_MTU_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_MTU_ENTRY, NmtMtuEntryPrivate))
+
+typedef struct {
+ int mtu;
+
+ NmtNewtEntry *entry;
+ NmtNewtLabel *label;
+
+} NmtMtuEntryPrivate;
+
+enum {
+ PROP_0,
+ PROP_MTU,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_mtu_entry_new:
+ *
+ * Creates a new #NmtMtuEntry
+ *
+ * Returns: a new #NmtMtuEntry
+ */
+NmtNewtWidget *
+nmt_mtu_entry_new (void)
+{
+ return g_object_new (NMT_TYPE_MTU_ENTRY, NULL);
+}
+
+static gboolean
+mtu_validator (NmtNewtEntry *entry,
+ const char *text,
+ gpointer user_data)
+{
+ NmtMtuEntryPrivate *priv = NMT_MTU_ENTRY_GET_PRIVATE (user_data);
+
+ if (*text && !atoi (text)) {
+ nmt_newt_entry_set_text (entry, "");
+ text = "";
+ }
+
+ if (!*text)
+ nmt_newt_label_set_text (priv->label, _("(default)"));
+ else
+ nmt_newt_label_set_text (priv->label, _("bytes"));
+
+ return TRUE;
+}
+
+static gboolean
+mtu_transform_to_text (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ int mtu = g_value_get_int (source_value);
+
+ if (mtu)
+ g_value_transform (source_value, target_value);
+ else
+ g_value_set_string (target_value, "");
+ return TRUE;
+}
+
+static void
+nmt_mtu_entry_init (NmtMtuEntry *entry)
+{
+
+ NmtMtuEntryPrivate *priv = NMT_MTU_ENTRY_GET_PRIVATE (entry);
+ NmtNewtGrid *grid = NMT_NEWT_GRID (entry);
+ NmtNewtWidget *real_entry, *label;
+
+ real_entry = nmt_newt_entry_numeric_new (10, 0, 65535);
+ priv->entry = NMT_NEWT_ENTRY (real_entry);
+
+ label = nmt_newt_label_new (_("bytes"));
+ priv->label = NMT_NEWT_LABEL (label);
+
+ nmt_newt_grid_add (grid, real_entry, 0, 0);
+ nmt_newt_grid_add (grid, label, 1, 0);
+ nmt_newt_widget_set_padding (label, 1, 0, 0, 0);
+
+ nmt_newt_entry_set_validator (priv->entry, mtu_validator, entry);
+ g_object_bind_property_full (entry, "mtu", real_entry, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
+ mtu_transform_to_text,
+ NULL,
+ NULL, NULL);
+}
+
+static void
+nmt_mtu_entry_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtMtuEntryPrivate *priv = NMT_MTU_ENTRY_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MTU:
+ priv->mtu = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_mtu_entry_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtMtuEntryPrivate *priv = NMT_MTU_ENTRY_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MTU:
+ g_value_set_int (value, priv->mtu);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_mtu_entry_class_init (NmtMtuEntryClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtMtuEntryPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_mtu_entry_set_property;
+ object_class->get_property = nmt_mtu_entry_get_property;
+
+ /**
+ * NmtMtuEntry:mtu:
+ *
+ * The contents of the entry, as a number.
+ */
+ g_object_class_install_property (object_class, PROP_MTU,
+ g_param_spec_int ("mtu", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-mtu-entry.h b/tui/nmt-mtu-entry.h
new file mode 100644
index 000000000..dfe416d0e
--- /dev/null
+++ b/tui/nmt-mtu-entry.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_MTU_ENTRY_H
+#define NMT_MTU_ENTRY_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_MTU_ENTRY (nmt_mtu_entry_get_type ())
+#define NMT_MTU_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_MTU_ENTRY, NmtMtuEntry))
+#define NMT_MTU_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_MTU_ENTRY, NmtMtuEntryClass))
+#define NMT_IS_MTU_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_MTU_ENTRY))
+#define NMT_IS_MTU_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_MTU_ENTRY))
+#define NMT_MTU_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_MTU_ENTRY, NmtMtuEntryClass))
+
+typedef struct {
+ NmtNewtGrid parent;
+
+} NmtMtuEntry;
+
+typedef struct {
+ NmtNewtGridClass parent;
+
+} NmtMtuEntryClass;
+
+GType nmt_mtu_entry_get_type (void);
+
+NmtNewtWidget *nmt_mtu_entry_new (void);
+
+G_END_DECLS
+
+#endif /* NMT_MTU_ENTRY_H */
diff --git a/tui/nmt-page-bond.c b/tui/nmt-page-bond.c
new file mode 100644
index 000000000..55a6ffeeb
--- /dev/null
+++ b/tui/nmt-page-bond.c
@@ -0,0 +1,436 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-bond
+ * @short_description: The editor page for Bond connections
+ *
+ * Note that this is fairly different from most of the other editor
+ * pages, because #NMSettingBond doesn't have properties, so we
+ * can't just use #GBinding.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-bond.h"
+
+#include "nmt-address-list.h"
+#include "nmt-slave-list.h"
+
+G_DEFINE_TYPE (NmtPageBond, nmt_page_bond, NMT_TYPE_PAGE_DEVICE)
+
+#define NMT_PAGE_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_BOND, NmtPageBondPrivate))
+
+typedef enum {
+ NMT_PAGE_BOND_MONITORING_UNKNOWN = -1,
+ NMT_PAGE_BOND_MONITORING_MII = 0,
+ NMT_PAGE_BOND_MONITORING_ARP = 1,
+} NmtPageBondMonitoringMode;
+
+typedef struct {
+ NmtSlaveList *slaves;
+
+ NmtNewtPopup *mode;
+ NmtNewtEntry *primary;
+ NmtNewtPopup *monitoring;
+ NmtNewtEntry *miimon;
+ NmtNewtEntry *updelay;
+ NmtNewtEntry *downdelay;
+ NmtNewtEntry *arp_interval;
+ NmtAddressList *arp_ip_target;
+
+ NmtPageBondMonitoringMode monitoring_mode;
+
+ NMSettingBond *s_bond;
+ GType slave_type;
+ gboolean updating;
+} NmtPageBondPrivate;
+
+NmtNewtWidget *
+nmt_page_bond_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_BOND,
+ "connection", conn,
+ "title", _("BOND"),
+ "device-entry", deventry,
+ NULL);
+}
+
+static void
+nmt_page_bond_init (NmtPageBond *bond)
+{
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+
+ priv->monitoring_mode = NMT_PAGE_BOND_MONITORING_UNKNOWN;
+ priv->slave_type = G_TYPE_NONE;
+}
+
+static NmtNewtPopupEntry bond_mode[] = {
+ { N_("Round-robin"), "balance-rr" },
+ { N_("Active Backup"), "active-backup" },
+ { N_("XOR"), "balance-xor" },
+ { N_("Broadcast"), "broadcast" },
+ { N_("802.3ad"), "802.3ad" },
+ { N_("Adaptive Transmit Load Balancing (tlb)"), "balance-tlb" },
+ { N_("Adaptive Load Balancing (alb)"), "balance-alb" },
+ { NULL, NULL }
+};
+
+/* NB: the ordering/numbering here corresponds to NmtPageBondMonitoringMode */
+static NmtNewtPopupEntry bond_monitoring[] = {
+ { N_("MII (recommended)"), "mii" },
+ { N_("ARP"), "arp" },
+ { NULL, NULL }
+};
+
+static void
+bond_options_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMSettingBond *s_bond = NM_SETTING_BOND (object);
+ NmtPageBond *bond = NMT_PAGE_BOND (user_data);
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+ const char *val;
+ char **ips;
+
+ if (priv->updating)
+ return;
+
+ priv->updating = TRUE;
+
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MODE);
+ nmt_newt_popup_set_active_id (priv->mode, val);
+
+ if (!strcmp (val, "active-backup")) {
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), TRUE);
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_PRIMARY);
+ nmt_newt_entry_set_text (priv->primary, val);
+ } else
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), FALSE);
+
+ if (priv->monitoring_mode == NMT_PAGE_BOND_MONITORING_UNKNOWN) {
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ if (val && strcmp (val, "0") != 0)
+ priv->monitoring_mode = NMT_PAGE_BOND_MONITORING_ARP;
+ else
+ priv->monitoring_mode = NMT_PAGE_BOND_MONITORING_MII;
+ }
+ nmt_newt_popup_set_active (priv->monitoring, priv->monitoring_mode);
+
+ if (priv->monitoring_mode == NMT_PAGE_BOND_MONITORING_MII) {
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), TRUE);
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON);
+ nmt_newt_entry_set_text (priv->miimon, val);
+
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), TRUE);
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_UPDELAY);
+ nmt_newt_entry_set_text (priv->updelay, val);
+
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), TRUE);
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY);
+ nmt_newt_entry_set_text (priv->downdelay, val);
+
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), FALSE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), FALSE);
+ } else {
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), TRUE);
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ nmt_newt_entry_set_text (priv->arp_interval, val);
+
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), TRUE);
+ val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ ips = g_strsplit (val, ",", -1);
+ g_object_set (G_OBJECT (priv->arp_ip_target),
+ "string", ips,
+ NULL);
+ g_strfreev (ips);
+
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), FALSE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), FALSE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), FALSE);
+ }
+
+ priv->updating = FALSE;
+}
+
+static void
+slaves_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NmtPageBond *bond = NMT_PAGE_BOND (user_data);
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+ GPtrArray *slaves;
+
+ g_object_get (object, "connections", &slaves, NULL);
+ if (slaves->len == 0) {
+ if (priv->slave_type == G_TYPE_NONE)
+ return;
+ priv->slave_type = G_TYPE_NONE;
+ } else {
+ NMConnection *slave = slaves->pdata[0];
+
+ if (priv->slave_type != G_TYPE_NONE)
+ return;
+
+ if (nm_connection_is_type (slave, NM_SETTING_INFINIBAND_SETTING_NAME))
+ priv->slave_type = NM_TYPE_SETTING_INFINIBAND;
+ else
+ priv->slave_type = NM_TYPE_SETTING_WIRED;
+ }
+
+ if (priv->slave_type == NM_TYPE_SETTING_INFINIBAND) {
+ nmt_newt_popup_set_active_id (priv->mode, "active-backup");
+ nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->mode), FALSE);
+ } else
+ nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->mode), TRUE);
+}
+
+#define WIDGET_CHANGED_FUNC(widget, func, option) \
+static void \
+widget ## _widget_changed (GObject *object, \
+ GParamSpec *pspec, \
+ gpointer user_data) \
+{ \
+ NmtPageBond *bond = NMT_PAGE_BOND (user_data); \
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond); \
+ \
+ if (priv->updating) \
+ return; \
+ \
+ priv->updating = TRUE; \
+ nm_setting_bond_add_option (priv->s_bond, option, func (priv->widget)); \
+ priv->updating = FALSE; \
+}
+
+WIDGET_CHANGED_FUNC (primary, nmt_newt_entry_get_text, NM_SETTING_BOND_OPTION_PRIMARY)
+WIDGET_CHANGED_FUNC (miimon, nmt_newt_entry_get_text, NM_SETTING_BOND_OPTION_MIIMON)
+WIDGET_CHANGED_FUNC (updelay, nmt_newt_entry_get_text, NM_SETTING_BOND_OPTION_UPDELAY)
+WIDGET_CHANGED_FUNC (downdelay, nmt_newt_entry_get_text, NM_SETTING_BOND_OPTION_DOWNDELAY)
+WIDGET_CHANGED_FUNC (arp_interval, nmt_newt_entry_get_text, NM_SETTING_BOND_OPTION_ARP_INTERVAL)
+
+static void
+mode_widget_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NmtPageBond *bond = NMT_PAGE_BOND (user_data);
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+ const char *mode;
+
+ if (priv->updating)
+ return;
+
+ mode = nmt_newt_popup_get_active_id (priv->mode);
+ priv->updating = TRUE;
+ nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_MODE, mode);
+ priv->updating = FALSE;
+
+ if (!strcmp (mode, "balance-tlb") || !strcmp (mode, "balance-alb")) {
+ nmt_newt_popup_set_active (priv->monitoring, NMT_PAGE_BOND_MONITORING_MII);
+ nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), FALSE);
+ } else
+ nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), TRUE);
+
+ if (!strcmp (mode, "active-backup"))
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), TRUE);
+ else
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), FALSE);
+}
+
+static void
+monitoring_widget_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NmtPageBond *bond = NMT_PAGE_BOND (user_data);
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+
+ if (priv->updating)
+ return;
+
+ priv->monitoring_mode = nmt_newt_popup_get_active (priv->monitoring);
+ if (priv->monitoring_mode == NMT_PAGE_BOND_MONITORING_MII) {
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), TRUE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), TRUE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), TRUE);
+
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), FALSE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), FALSE);
+ } else {
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), TRUE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), TRUE);
+
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), FALSE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), FALSE);
+ nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), FALSE);
+ }
+}
+
+static void
+arp_ip_target_widget_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NmtPageBond *bond = NMT_PAGE_BOND (user_data);
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+ char **ips, *target;
+
+ if (priv->updating)
+ return;
+
+ g_object_get (G_OBJECT (priv->arp_ip_target),
+ "strings", &ips,
+ NULL);
+ target = g_strjoinv (",", ips);
+
+ priv->updating = TRUE;
+ nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET, target);
+ priv->updating = FALSE;
+
+ g_free (target);
+ g_strfreev (ips);
+}
+
+static gboolean
+bond_connection_type_filter (GType connection_type,
+ gpointer user_data)
+{
+ NmtPageBond *bond = user_data;
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+
+ if ( priv->slave_type != NM_TYPE_SETTING_WIRED
+ && connection_type == NM_TYPE_SETTING_INFINIBAND)
+ return TRUE;
+ if ( priv->slave_type != NM_TYPE_SETTING_INFINIBAND
+ && connection_type == NM_TYPE_SETTING_WIRED)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void
+nmt_page_bond_constructed (GObject *object)
+{
+ NmtPageBond *bond = NMT_PAGE_BOND (object);
+ NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
+ NmtDeviceEntry *deventry;
+ NmtPageGrid *grid;
+ NMSettingBond *s_bond;
+ NmtNewtWidget *widget, *label;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (bond));
+ s_bond = nm_connection_get_setting_bond (conn);
+ if (!s_bond) {
+ nm_connection_add_setting (conn, nm_setting_bond_new ());
+ s_bond = nm_connection_get_setting_bond (conn);
+ }
+ priv->s_bond = s_bond;
+
+ deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ g_object_bind_property (s_bond, NM_SETTING_BOND_INTERFACE_NAME,
+ deventry, "interface-name",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ grid = NMT_PAGE_GRID (bond);
+
+ widget = nmt_newt_separator_new ();
+ nmt_page_grid_append (grid, _("Slaves"), widget, NULL);
+ nmt_page_grid_set_row_flags (grid, widget, NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT);
+
+ widget = nmt_slave_list_new (conn, bond_connection_type_filter, bond);
+ g_signal_connect (widget, "notify::connections",
+ G_CALLBACK (slaves_changed), bond);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+ priv->slaves = NMT_SLAVE_LIST (widget);
+
+ widget = nmt_newt_popup_new (bond_mode);
+ g_signal_connect (widget, "notify::active-id",
+ G_CALLBACK (mode_widget_changed), bond);
+ nmt_page_grid_append (grid, _("Mode"), widget, NULL);
+ priv->mode = NMT_NEWT_POPUP (widget);
+
+ widget = nmt_newt_entry_new (40, 0);
+ g_signal_connect (widget, "notify::text",
+ G_CALLBACK (primary_widget_changed), bond);
+ nmt_page_grid_append (grid, _("Primary"), widget, NULL);
+ priv->primary = NMT_NEWT_ENTRY (widget);
+
+ widget = nmt_newt_popup_new (bond_monitoring);
+ g_signal_connect (widget, "notify::active",
+ G_CALLBACK (monitoring_widget_changed), bond);
+ nmt_page_grid_append (grid, _("Link monitoring"), widget, NULL);
+ priv->monitoring = NMT_NEWT_POPUP (widget);
+
+ widget = nmt_newt_entry_numeric_new (10, 0, G_MAXINT);
+ g_signal_connect (widget, "notify::text",
+ G_CALLBACK (miimon_widget_changed), bond);
+ label = nmt_newt_label_new (C_("milliseconds", "ms"));
+ nmt_page_grid_append (grid, _("Monitoring frequency"), widget, label);
+ priv->miimon = NMT_NEWT_ENTRY (widget);
+
+ widget = nmt_newt_entry_numeric_new (10, 0, G_MAXINT);
+ g_signal_connect (widget, "notify::text",
+ G_CALLBACK (updelay_widget_changed), bond);
+ label = nmt_newt_label_new (C_("milliseconds", "ms"));
+ nmt_page_grid_append (grid, _("Link up delay"), widget, label);
+ priv->updelay = NMT_NEWT_ENTRY (widget);
+
+ widget = nmt_newt_entry_numeric_new (10, 0, G_MAXINT);
+ g_signal_connect (widget, "notify::text",
+ G_CALLBACK (downdelay_widget_changed), bond);
+ label = nmt_newt_label_new (C_("milliseconds", "ms"));
+ nmt_page_grid_append (grid, _("Link down delay"), widget, label);
+ priv->downdelay = NMT_NEWT_ENTRY (widget);
+
+ widget = nmt_newt_entry_numeric_new (10, 0, G_MAXINT);
+ g_signal_connect (widget, "notify::text",
+ G_CALLBACK (arp_interval_widget_changed), bond);
+ label = nmt_newt_label_new (C_("milliseconds", "ms"));
+ nmt_page_grid_append (grid, _("Monitoring frequency"), widget, label);
+ priv->arp_interval = NMT_NEWT_ENTRY (widget);
+
+ widget = nmt_address_list_new (NMT_ADDRESS_LIST_IP4);
+ g_signal_connect (widget, "notify::strings",
+ G_CALLBACK (arp_ip_target_widget_changed), bond);
+ nmt_page_grid_append (grid, _("ARP targets"), widget, NULL);
+ priv->arp_ip_target = NMT_ADDRESS_LIST (widget);
+
+ g_signal_connect (s_bond, "notify::" NM_SETTING_BOND_OPTIONS,
+ G_CALLBACK (bond_options_changed), bond);
+ bond_options_changed (G_OBJECT (s_bond), NULL, bond);
+ slaves_changed (G_OBJECT (priv->slaves), NULL, bond);
+
+ G_OBJECT_CLASS (nmt_page_bond_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_bond_class_init (NmtPageBondClass *bond_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (bond_class);
+
+ g_type_class_add_private (bond_class, sizeof (NmtPageBondPrivate));
+
+ object_class->constructed = nmt_page_bond_constructed;
+}
diff --git a/tui/nmt-page-bond.h b/tui/nmt-page-bond.h
new file mode 100644
index 000000000..c8e69dd5e
--- /dev/null
+++ b/tui/nmt-page-bond.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_BOND_H
+#define NMT_PAGE_BOND_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_BOND (nmt_page_bond_get_type ())
+#define NMT_PAGE_BOND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_BOND, NmtPageBond))
+#define NMT_PAGE_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_BOND, NmtPageBondClass))
+#define NMT_IS_PAGE_BOND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_BOND))
+#define NMT_IS_PAGE_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_BOND))
+#define NMT_PAGE_BOND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_BOND, NmtPageBondClass))
+
+typedef struct {
+ NmtPageDevice parent;
+
+} NmtPageBond;
+
+typedef struct {
+ NmtPageDeviceClass parent;
+
+} NmtPageBondClass;
+
+GType nmt_page_bond_get_type (void);
+
+NmtNewtWidget *nmt_page_bond_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_BOND_H */
diff --git a/tui/nmt-page-bridge-port.c b/tui/nmt-page-bridge-port.c
new file mode 100644
index 000000000..ab7a78887
--- /dev/null
+++ b/tui/nmt-page-bridge-port.c
@@ -0,0 +1,92 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-bridge-port
+ * @short_description: The editor page for Bridge ports
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-bridge-port.h"
+
+G_DEFINE_TYPE (NmtPageBridgePort, nmt_page_bridge_port, NMT_TYPE_EDITOR_PAGE)
+
+NmtNewtWidget *
+nmt_page_bridge_port_new (NMConnection *conn)
+{
+ return g_object_new (NMT_TYPE_PAGE_BRIDGE_PORT,
+ "connection", conn,
+ "title", _("BRIDGE PORT"),
+ NULL);
+}
+
+static void
+nmt_page_bridge_port_init (NmtPageBridgePort *bridge)
+{
+}
+
+static void
+nmt_page_bridge_port_constructed (GObject *object)
+{
+ NmtPageBridgePort *bridge = NMT_PAGE_BRIDGE_PORT (object);
+ NmtPageGrid *grid;
+ NMSettingBridgePort *s_port;
+ NmtNewtWidget *widget;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (bridge));
+ s_port = nm_connection_get_setting_bridge_port (conn);
+ if (!s_port) {
+ nm_connection_add_setting (conn, nm_setting_bridge_port_new ());
+ s_port = nm_connection_get_setting_bridge_port (conn);
+ }
+
+ grid = NMT_PAGE_GRID (bridge);
+
+ widget = nmt_newt_entry_numeric_new (10, 0, 63);
+ g_object_bind_property (s_port, NM_SETTING_BRIDGE_PORT_PRIORITY,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Priority"), widget, NULL);
+
+ widget = nmt_newt_entry_numeric_new (10, 1, 65535);
+ g_object_bind_property (s_port, NM_SETTING_BRIDGE_PORT_PATH_COST,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Path cost"), widget, NULL);
+
+ widget = nmt_newt_checkbox_new (_("Hairpin mode"));
+ g_object_bind_property (s_port, NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_bridge_port_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_bridge_port_class_init (NmtPageBridgePortClass *bridge_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (bridge_class);
+
+ object_class->constructed = nmt_page_bridge_port_constructed;
+}
diff --git a/tui/nmt-page-bridge-port.h b/tui/nmt-page-bridge-port.h
new file mode 100644
index 000000000..7fe3a92c4
--- /dev/null
+++ b/tui/nmt-page-bridge-port.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_BRIDGE_PORT_H
+#define NMT_PAGE_BRIDGE_PORT_H
+
+#include "nmt-editor-page.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_BRIDGE_PORT (nmt_page_bridge_port_get_type ())
+#define NMT_PAGE_BRIDGE_PORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_BRIDGE_PORT, NmtPageBridgePort))
+#define NMT_PAGE_BRIDGE_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_BRIDGE_PORT, NmtPageBridgePortClass))
+#define NMT_IS_PAGE_BRIDGE_PORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_BRIDGE_PORT))
+#define NMT_IS_PAGE_BRIDGE_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_BRIDGE_PORT))
+#define NMT_PAGE_BRIDGE_PORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_BRIDGE_PORT, NmtPageBridgePortClass))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtPageBridgePort;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtPageBridgePortClass;
+
+GType nmt_page_bridge_port_get_type (void);
+
+NmtNewtWidget *nmt_page_bridge_port_new (NMConnection *conn);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_BRIDGE_PORT_H */
diff --git a/tui/nmt-page-bridge.c b/tui/nmt-page-bridge.c
new file mode 100644
index 000000000..713d83507
--- /dev/null
+++ b/tui/nmt-page-bridge.c
@@ -0,0 +1,153 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-bridge
+ * @short_description: The editor page for Bridge connections
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-bridge.h"
+
+#include "nmt-address-list.h"
+#include "nmt-slave-list.h"
+
+G_DEFINE_TYPE (NmtPageBridge, nmt_page_bridge, NMT_TYPE_PAGE_DEVICE)
+
+NmtNewtWidget *
+nmt_page_bridge_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_BRIDGE,
+ "connection", conn,
+ "title", _("BRIDGE"),
+ "device-entry", deventry,
+ NULL);
+}
+
+static void
+nmt_page_bridge_init (NmtPageBridge *bridge)
+{
+}
+
+static gboolean
+bridge_connection_type_filter (GType connection_type,
+ gpointer user_data)
+{
+ return ( connection_type == NM_TYPE_SETTING_WIRED
+ || connection_type == NM_TYPE_SETTING_WIRELESS
+ || connection_type == NM_TYPE_SETTING_VLAN);
+}
+
+static void
+nmt_page_bridge_constructed (GObject *object)
+{
+ NmtPageBridge *bridge = NMT_PAGE_BRIDGE (object);
+ NmtDeviceEntry *deventry;
+ NmtPageGrid *grid;
+ NMSettingBridge *s_bridge;
+ NmtNewtWidget *widget, *label, *stp;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (bridge));
+ s_bridge = nm_connection_get_setting_bridge (conn);
+ if (!s_bridge) {
+ nm_connection_add_setting (conn, nm_setting_bridge_new ());
+ s_bridge = nm_connection_get_setting_bridge (conn);
+ }
+
+ deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_INTERFACE_NAME,
+ deventry, "interface-name",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ grid = NMT_PAGE_GRID (bridge);
+
+ widget = nmt_newt_separator_new ();
+ nmt_page_grid_append (grid, _("Slaves"), widget, NULL);
+ nmt_page_grid_set_row_flags (grid, widget, NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT);
+
+ widget = nmt_slave_list_new (conn, bridge_connection_type_filter, bridge);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ widget = nmt_newt_entry_numeric_new (10, 0, 1000000);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_AGEING_TIME,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ label = nmt_newt_label_new (_("seconds"));
+ nmt_page_grid_append (grid, _("Aging time"), widget, label);
+
+ widget = stp = nmt_newt_checkbox_new (_("Enable STP (Spanning Tree Protocol)"));
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_STP,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ widget = nmt_newt_entry_numeric_new (10, 0, G_MAXINT);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_PRIORITY,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_STP,
+ widget, "sensitive",
+ G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Priority"), widget, NULL);
+
+ widget = nmt_newt_entry_numeric_new (10, 2, 30);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_FORWARD_DELAY,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_STP,
+ widget, "sensitive",
+ G_BINDING_SYNC_CREATE);
+ label = nmt_newt_label_new (_("seconds"));
+ nmt_page_grid_append (grid, _("Forward delay"), widget, label);
+
+ widget = nmt_newt_entry_numeric_new (10, 1, 10);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_HELLO_TIME,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_STP,
+ widget, "sensitive",
+ G_BINDING_SYNC_CREATE);
+ label = nmt_newt_label_new (_("seconds"));
+ nmt_page_grid_append (grid, _("Hello time"), widget, label);
+
+ widget = nmt_newt_entry_numeric_new (10, 6, 40);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_MAX_AGE,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_STP,
+ widget, "sensitive",
+ G_BINDING_SYNC_CREATE);
+ label = nmt_newt_label_new (_("seconds"));
+ nmt_page_grid_append (grid, _("Max age"), widget, label);
+
+ G_OBJECT_CLASS (nmt_page_bridge_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_bridge_class_init (NmtPageBridgeClass *bridge_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (bridge_class);
+
+ object_class->constructed = nmt_page_bridge_constructed;
+}
diff --git a/tui/nmt-page-bridge.h b/tui/nmt-page-bridge.h
new file mode 100644
index 000000000..b11d35029
--- /dev/null
+++ b/tui/nmt-page-bridge.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_BRIDGE_H
+#define NMT_PAGE_BRIDGE_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_BRIDGE (nmt_page_bridge_get_type ())
+#define NMT_PAGE_BRIDGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_BRIDGE, NmtPageBridge))
+#define NMT_PAGE_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_BRIDGE, NmtPageBridgeClass))
+#define NMT_IS_PAGE_BRIDGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_BRIDGE))
+#define NMT_IS_PAGE_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_BRIDGE))
+#define NMT_PAGE_BRIDGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_BRIDGE, NmtPageBridgeClass))
+
+typedef struct {
+ NmtPageDevice parent;
+
+} NmtPageBridge;
+
+typedef struct {
+ NmtPageDeviceClass parent;
+
+} NmtPageBridgeClass;
+
+GType nmt_page_bridge_get_type (void);
+
+NmtNewtWidget *nmt_page_bridge_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_BRIDGE_H */
diff --git a/tui/nmt-page-device.c b/tui/nmt-page-device.c
new file mode 100644
index 000000000..8ab0747e5
--- /dev/null
+++ b/tui/nmt-page-device.c
@@ -0,0 +1,151 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-device
+ * @short_description: Abstract base class for "device" editor pages
+ *
+ * #NmtPageDevice is the base class for #NmtEditorPage subclasses
+ * representing device-type-specific data. (Eg, #NmtPageEthernet,
+ * #NmtPageVlan, etc).
+ *
+ * FIXME: rename to NmtEditorPageDevice, so it doesn't sound like it's
+ * an actual page type.
+ */
+
+#include "config.h"
+
+#include "nmt-page-device.h"
+
+G_DEFINE_TYPE (NmtPageDevice, nmt_page_device, NMT_TYPE_EDITOR_PAGE)
+
+#define NMT_PAGE_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_DEVICE, NmtPageDevicePrivate))
+
+typedef struct {
+ NmtDeviceEntry *device_entry;
+ gboolean show_by_default;
+} NmtPageDevicePrivate;
+
+enum {
+ PROP_0,
+
+ PROP_DEVICE_ENTRY,
+ PROP_SHOW_BY_DEFAULT,
+
+ LAST_PROP
+};
+
+static void
+nmt_page_device_init (NmtPageDevice *device)
+{
+}
+
+static void
+nmt_page_device_finalize (GObject *object)
+{
+ NmtPageDevicePrivate *priv = NMT_PAGE_DEVICE_GET_PRIVATE (object);
+
+ g_clear_object (&priv->device_entry);
+
+ G_OBJECT_CLASS (nmt_page_device_parent_class)->finalize (object);
+}
+
+NmtDeviceEntry *
+nmt_page_device_get_device_entry (NmtPageDevice *page)
+{
+ NmtPageDevicePrivate *priv = NMT_PAGE_DEVICE_GET_PRIVATE (page);
+
+ return priv->device_entry;
+}
+
+gboolean
+nmt_page_device_get_show_by_default (NmtPageDevice *page)
+{
+ NmtPageDevicePrivate *priv = NMT_PAGE_DEVICE_GET_PRIVATE (page);
+
+ return priv->show_by_default;
+}
+
+static void
+nmt_page_device_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPageDevicePrivate *priv = NMT_PAGE_DEVICE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE_ENTRY:
+ priv->device_entry = g_value_dup_object (value);
+ break;
+ case PROP_SHOW_BY_DEFAULT:
+ priv->show_by_default = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_page_device_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPageDevicePrivate *priv = NMT_PAGE_DEVICE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE_ENTRY:
+ g_value_set_object (value, priv->device_entry);
+ break;
+ case PROP_SHOW_BY_DEFAULT:
+ g_value_set_boolean (value, priv->show_by_default);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_page_device_class_init (NmtPageDeviceClass *page_device_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (page_device_class);
+
+ g_type_class_add_private (page_device_class, sizeof (NmtPageDevicePrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_page_device_set_property;
+ object_class->get_property = nmt_page_device_get_property;
+ object_class->finalize = nmt_page_device_finalize;
+
+ /* properties */
+ g_object_class_install_property (object_class, PROP_DEVICE_ENTRY,
+ g_param_spec_object ("device-entry", "", "",
+ NMT_TYPE_DEVICE_ENTRY,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_SHOW_BY_DEFAULT,
+ g_param_spec_boolean ("show-by-default", "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-page-device.h b/tui/nmt-page-device.h
new file mode 100644
index 000000000..8c90a67a0
--- /dev/null
+++ b/tui/nmt-page-device.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_DEVICE_H
+#define NMT_PAGE_DEVICE_H
+
+#include "nmt-editor-page.h"
+#include "nmt-device-entry.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_DEVICE (nmt_page_device_get_type ())
+#define NMT_PAGE_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_DEVICE, NmtPageDevice))
+#define NMT_PAGE_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_DEVICE, NmtPageDeviceClass))
+#define NMT_IS_PAGE_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_DEVICE))
+#define NMT_IS_PAGE_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_DEVICE))
+#define NMT_PAGE_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_DEVICE, NmtPageDeviceClass))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtPageDevice;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtPageDeviceClass;
+
+GType nmt_page_device_get_type (void);
+
+NmtDeviceEntry *nmt_page_device_get_device_entry (NmtPageDevice *page);
+gboolean nmt_page_device_get_show_by_default (NmtPageDevice *page);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_DEVICE_H */
diff --git a/tui/nmt-page-ethernet.c b/tui/nmt-page-ethernet.c
new file mode 100644
index 000000000..9eb08fe5b
--- /dev/null
+++ b/tui/nmt-page-ethernet.c
@@ -0,0 +1,97 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-ethernet
+ * @short_description: The editor page for Ethernet connections
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-ethernet.h"
+#include "nmt-mac-entry.h"
+#include "nmt-mtu-entry.h"
+
+G_DEFINE_TYPE (NmtPageEthernet, nmt_page_ethernet, NMT_TYPE_PAGE_DEVICE)
+
+NmtNewtWidget *
+nmt_page_ethernet_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_ETHERNET,
+ "connection", conn,
+ "title", _("ETHERNET"),
+ "device-entry", deventry,
+ "show-by-default", FALSE,
+ NULL);
+}
+
+static void
+nmt_page_ethernet_init (NmtPageEthernet *ethernet)
+{
+}
+
+static void
+nmt_page_ethernet_constructed (GObject *object)
+{
+ NmtPageEthernet *ethernet = NMT_PAGE_ETHERNET (object);
+ NmtDeviceEntry *deventry;
+ NmtPageGrid *grid;
+ NMSettingWired *s_wired;
+ NmtNewtWidget *widget;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (ethernet));
+ s_wired = nm_connection_get_setting_wired (conn);
+ if (!s_wired) {
+ nm_connection_add_setting (conn, nm_setting_wired_new ());
+ s_wired = nm_connection_get_setting_wired (conn);
+ }
+
+ deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ g_object_bind_property (s_wired, NM_SETTING_WIRED_MAC_ADDRESS,
+ deventry, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ grid = NMT_PAGE_GRID (ethernet);
+
+ widget = nmt_mac_entry_new (40, ETH_ALEN);
+ g_object_bind_property (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
+ widget, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Cloned MAC address"), widget, NULL);
+
+ widget = nmt_mtu_entry_new ();
+ g_object_bind_property (s_wired, NM_SETTING_WIRED_MTU,
+ widget, "mtu",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("MTU"), widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_ethernet_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_ethernet_class_init (NmtPageEthernetClass *ethernet_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ethernet_class);
+
+ object_class->constructed = nmt_page_ethernet_constructed;
+}
diff --git a/tui/nmt-page-ethernet.h b/tui/nmt-page-ethernet.h
new file mode 100644
index 000000000..5e001562f
--- /dev/null
+++ b/tui/nmt-page-ethernet.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_ETHERNET_H
+#define NMT_PAGE_ETHERNET_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_ETHERNET (nmt_page_ethernet_get_type ())
+#define NMT_PAGE_ETHERNET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_ETHERNET, NmtPageEthernet))
+#define NMT_PAGE_ETHERNET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_ETHERNET, NmtPageEthernetClass))
+#define NMT_IS_PAGE_ETHERNET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_ETHERNET))
+#define NMT_IS_PAGE_ETHERNET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_ETHERNET))
+#define NMT_PAGE_ETHERNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_ETHERNET, NmtPageEthernetClass))
+
+typedef struct {
+ NmtPageDevice parent;
+
+} NmtPageEthernet;
+
+typedef struct {
+ NmtPageDeviceClass parent;
+
+} NmtPageEthernetClass;
+
+GType nmt_page_ethernet_get_type (void);
+
+NmtNewtWidget *nmt_page_ethernet_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_ETHERNET_H */
diff --git a/tui/nmt-page-grid.c b/tui/nmt-page-grid.c
new file mode 100644
index 000000000..89ba9330f
--- /dev/null
+++ b/tui/nmt-page-grid.c
@@ -0,0 +1,458 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-grid
+ * @short_description: Grid widget for #NmtEditorPages
+ *
+ * #NmtPageGrid is the layout grid used by #NmtEditorPages. It
+ * consists of a number of rows, each containing either a single
+ * widget that spans the entire width of the row, or else containing a
+ * label, a widget, and an optional extra widget.
+ *
+ * Each row of the grid can take up multiple on-screen rows, if
+ * its main widget is multiple rows high. The label and extra widgets
+ * will be top-aligned if the row is taller than they are.
+ *
+ * The #NmtPageGrids in a form behave as though they are all in a
+ * "size group" together; they will all use the same column widths,
+ * which will be wide enough for the widest labels/widgets in any of
+ * the grids. #NmtPageGrid is also specially aware of #NmtNewtSection,
+ * and grids inside sections will automatically take the size of the
+ * section border into account as well.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-page-grid.h"
+
+G_DEFINE_TYPE (NmtPageGrid, nmt_page_grid, NMT_TYPE_NEWT_CONTAINER)
+
+#define NMT_PAGE_GRID_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_GRID, NmtPageGridPrivate))
+
+typedef struct {
+ GArray *rows;
+ int *row_heights;
+ int indent;
+} NmtPageGridPrivate;
+
+typedef struct {
+ NmtNewtWidget *label;
+ NmtNewtWidget *widget;
+ NmtNewtWidget *extra;
+ NmtPageGridRowFlags flags;
+} NmtPageGridRow;
+
+typedef struct {
+ int col_widths[3];
+} NmtPageGridFormState;
+
+/**
+ * nmt_page_grid_new:
+ *
+ * Creates a new #NmtPageGrid
+ *
+ * Returns: a new #NmtPageGrid
+ */
+NmtNewtWidget *
+nmt_page_grid_new (void)
+{
+ return g_object_new (NMT_TYPE_PAGE_GRID,
+ NULL);
+}
+
+static void
+nmt_page_grid_init (NmtPageGrid *grid)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
+
+ priv->rows = g_array_new (FALSE, TRUE, sizeof (NmtPageGridRow));
+}
+
+static void
+nmt_page_grid_finalize (GObject *object)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (object);
+
+ g_array_unref (priv->rows);
+ g_clear_pointer (&priv->row_heights, g_free);
+
+ G_OBJECT_CLASS (nmt_page_grid_parent_class)->finalize (object);
+}
+
+/**
+ * nmt_page_grid_append:
+ * @grid: the #NmtPageGrid
+ * @label: (allow-none): the label text for @widget, or %NULL
+ * @widget: the (main) widget
+ * @extra: (allow-none): optional extra widget
+ *
+ * Adds a row to @grid.
+ *
+ * If @label is non-%NULL, this will add a three-column row,
+ * containing a right-aligned #NmtNewtLabel in the first column,
+ * @widget in the second column, and @extra (if non-%NULL) in
+ * the third column.
+ *
+ * If @label is %NULL, then this will add a row with a single
+ * grid-spanning column, containing @widget.
+ *
+ * FIXME: That's sort of weird.
+ *
+ * See also nmt_page_grid_set_row_flags().
+ */
+void
+nmt_page_grid_append (NmtPageGrid *grid,
+ const char *label,
+ NmtNewtWidget *widget,
+ NmtNewtWidget *extra)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_page_grid_parent_class);
+ NmtNewtContainer *container = NMT_NEWT_CONTAINER (grid);
+ NmtPageGridRow row;
+
+ memset (&row, 0, sizeof (row));
+
+ if (label) {
+ row.label = nmt_newt_label_new (label);
+ parent_class->add (container, row.label);
+ }
+
+ row.widget = widget;
+ parent_class->add (container, widget);
+ if (row.label) {
+ g_object_bind_property (row.widget, "valid",
+ row.label, "highlight",
+ G_BINDING_INVERT_BOOLEAN | G_BINDING_SYNC_CREATE);
+ }
+
+ if (extra) {
+ row.extra = extra;
+ parent_class->add (container, extra);
+ }
+
+ g_array_append_val (priv->rows, row);
+}
+
+static int
+nmt_page_grid_find_widget (NmtPageGrid *grid,
+ NmtNewtWidget *widget)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
+ NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ int i;
+
+ for (i = 0; i < priv->rows->len; i++) {
+ if (rows[i].label == widget || rows[i].widget == widget || rows[i].extra == widget)
+ return i;
+ }
+
+ return -1;
+}
+
+/**
+ * NmtPageGridRowFlags:
+ * @NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT: the row's label should be
+ * aligned left instead of right.
+ * @NMT_PAGE_GRID_ROW_EXTRA_ALIGN_RIGHT: the row's extra widget
+ * should be aligned right instead of left.
+ *
+ * Flags to alter an #NmtPageGrid row's layout.
+ */
+
+/**
+ * nmt_page_grid_set_row_flags:
+ * @grid: an #NmtPageGrid
+ * @widget: the widget whose row you want to adjust
+ * @flags: the flags to set
+ *
+ * Sets flags to adjust the layout of @widget's row in @grid.
+ */
+void
+nmt_page_grid_set_row_flags (NmtPageGrid *grid,
+ NmtNewtWidget *widget,
+ NmtPageGridRowFlags flags)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
+ NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ int i;
+
+ i = nmt_page_grid_find_widget (grid, widget);
+ if (i != -1)
+ rows[i].flags = flags;
+}
+
+static void
+nmt_page_grid_remove (NmtNewtContainer *container,
+ NmtNewtWidget *widget)
+{
+ NmtPageGrid *grid = NMT_PAGE_GRID (container);
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_page_grid_parent_class);
+ NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ int i;
+
+ i = nmt_page_grid_find_widget (grid, widget);
+ if (i != -1) {
+ if (rows[i].label)
+ parent_class->remove (container, rows[i].label);
+ parent_class->remove (container, rows[i].widget);
+ if (rows[i].extra)
+ parent_class->remove (container, rows[i].extra);
+
+ g_array_remove_index (priv->rows, i);
+ return;
+ }
+
+ // FIXME: shouldn't happen
+ parent_class->remove (container, widget);
+}
+
+static newtComponent *
+nmt_page_grid_get_components (NmtNewtWidget *widget)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (widget);
+ NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ newtComponent *child_cos;
+ GPtrArray *cos;
+ int i, c;
+
+ cos = g_ptr_array_new ();
+
+ for (i = 0; i < priv->rows->len; i++) {
+ if (!nmt_newt_widget_get_visible (rows[i].widget))
+ continue;
+
+ if (rows[i].label) {
+ child_cos = nmt_newt_widget_get_components (rows[i].label);
+ g_assert (child_cos[0] && !child_cos[1]);
+ g_ptr_array_add (cos, child_cos[0]);
+ g_free (child_cos);
+ }
+
+ child_cos = nmt_newt_widget_get_components (rows[i].widget);
+ for (c = 0; child_cos[c]; c++)
+ g_ptr_array_add (cos, child_cos[c]);
+ g_free (child_cos);
+
+ if (rows[i].extra) {
+ child_cos = nmt_newt_widget_get_components (rows[i].extra);
+ for (c = 0; child_cos[c]; c++)
+ g_ptr_array_add (cos, child_cos[c]);
+ g_free (child_cos);
+ }
+ }
+
+ g_ptr_array_add (cos, NULL);
+ return (newtComponent *) g_ptr_array_free (cos, FALSE);
+}
+
+static NmtPageGridFormState *
+get_form_state (NmtNewtWidget *widget)
+{
+ NmtNewtForm *form = nmt_newt_widget_get_form (widget);
+ NmtPageGridFormState *state;
+
+ if (!form)
+ return NULL;
+
+ state = g_object_get_data (G_OBJECT (form), "NmtPageGridFormState");
+ if (state)
+ return state;
+
+ state = g_new0 (NmtPageGridFormState, 1);
+ g_object_set_data_full (G_OBJECT (form), "NmtPageGridFormState", state, g_free);
+ return state;
+}
+
+static void
+nmt_page_grid_realize (NmtNewtWidget *widget)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (widget);
+ NmtNewtWidget *parent;
+
+ NMT_NEWT_WIDGET_CLASS (nmt_page_grid_parent_class)->realize (widget);
+
+ /* This is a hack, but it's the simplest way to make it work... */
+ priv->indent = 0;
+
+ parent = nmt_newt_widget_get_parent (widget);
+ while (parent) {
+ if (NMT_IS_NEWT_SECTION (parent)) {
+ priv->indent = 2;
+ break;
+ }
+ parent = nmt_newt_widget_get_parent (parent);
+ }
+}
+
+static void
+nmt_page_grid_unrealize (NmtNewtWidget *widget)
+{
+ NmtPageGridFormState *state = get_form_state (widget);
+
+ if (state)
+ memset (state->col_widths, 0, sizeof (state->col_widths));
+
+ NMT_NEWT_WIDGET_CLASS (nmt_page_grid_parent_class)->unrealize (widget);
+}
+
+static void
+nmt_page_grid_size_request (NmtNewtWidget *widget,
+ int *width,
+ int *height)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (widget);
+ NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ NmtPageGridFormState *state = get_form_state (widget);
+ gboolean add_padding = FALSE;
+ int i;
+
+ g_free (priv->row_heights);
+ priv->row_heights = g_new0 (int, priv->rows->len);
+
+ *height = 0;
+ for (i = 0; i < priv->rows->len; i++) {
+ int lwidth, lheight, wwidth, wheight, ewidth, eheight;
+
+ if (!nmt_newt_widget_get_visible (rows[i].widget))
+ continue;
+
+ if (rows[i].label) {
+ nmt_newt_widget_size_request (rows[i].label, &lwidth, &lheight);
+ lwidth += priv->indent;
+ state->col_widths[0] = MAX (state->col_widths[0], lwidth);
+
+ nmt_newt_widget_size_request (rows[i].widget, &wwidth, &wheight);
+ state->col_widths[1] = MAX (state->col_widths[1], wwidth);
+ priv->row_heights[i] = wheight;
+
+ add_padding = TRUE;
+ } else {
+ nmt_newt_widget_size_request (rows[i].widget, &wwidth, &wheight);
+ priv->row_heights[i] = wheight;
+ }
+
+ if (rows[i].extra) {
+ nmt_newt_widget_size_request (rows[i].extra, &ewidth, &eheight);
+ state->col_widths[2] = MAX (state->col_widths[2], ewidth);
+ priv->row_heights[i] = MAX (priv->row_heights[i], eheight);
+ }
+
+ *height += priv->row_heights[i];
+ }
+
+ *width = state->col_widths[0] + state->col_widths[1] + state->col_widths[2];
+ if (add_padding)
+ *width += 2;
+}
+
+
+static void
+nmt_page_grid_size_allocate (NmtNewtWidget *widget,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (widget);
+ NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ NmtPageGridFormState *state = get_form_state (widget);
+ int col0_width, col1_width, col2_width;
+ int i, row;
+
+ col0_width = state->col_widths[0] - priv->indent;
+ col1_width = state->col_widths[1];
+ col2_width = state->col_widths[2];
+
+ for (i = row = 0; i < priv->rows->len; i++) {
+ if (!nmt_newt_widget_get_visible (rows[i].widget))
+ continue;
+
+ if (rows[i].label) {
+ int lwidth, lheight, lx;
+
+ if (rows[i].flags & NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT)
+ lx = x;
+ else {
+ nmt_newt_widget_size_request (rows[i].label, &lwidth, &lheight);
+ lx = x + col0_width - lwidth;
+ }
+
+ nmt_newt_widget_size_allocate (rows[i].label,
+ lx,
+ y + row,
+ col0_width,
+ priv->row_heights[i]);
+
+ nmt_newt_widget_size_allocate (rows[i].widget,
+ x + col0_width + 1,
+ y + row,
+ col1_width,
+ priv->row_heights[i]);
+ if (rows[i].extra) {
+ int wwidth, wheight, ex;
+
+ if (rows[i].flags & NMT_PAGE_GRID_ROW_EXTRA_ALIGN_RIGHT)
+ ex = x + col0_width + col1_width + 2;
+ else {
+ nmt_newt_widget_size_request (rows[i].widget, &wwidth, &wheight);
+ ex = x + col0_width + wwidth + 2;
+ }
+
+ nmt_newt_widget_size_allocate (rows[i].extra,
+ ex,
+ y + row,
+ col2_width,
+ priv->row_heights[i]);
+ }
+ } else {
+ nmt_newt_widget_size_allocate (rows[i].widget,
+ x,
+ y + row,
+ col0_width + col1_width + col2_width + 2,
+ priv->row_heights[i]);
+ }
+
+ row += priv->row_heights[i];
+ }
+}
+
+static void
+nmt_page_grid_class_init (NmtPageGridClass *grid_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (grid_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (grid_class);
+ NmtNewtContainerClass *container_class = NMT_NEWT_CONTAINER_CLASS (grid_class);
+
+ g_type_class_add_private (grid_class, sizeof (NmtPageGridPrivate));
+
+ /* virtual methods */
+ object_class->finalize = nmt_page_grid_finalize;
+
+ widget_class->realize = nmt_page_grid_realize;
+ widget_class->unrealize = nmt_page_grid_unrealize;
+ widget_class->get_components = nmt_page_grid_get_components;
+ widget_class->size_request = nmt_page_grid_size_request;
+ widget_class->size_allocate = nmt_page_grid_size_allocate;
+
+ container_class->remove = nmt_page_grid_remove;
+}
diff --git a/tui/nmt-page-grid.h b/tui/nmt-page-grid.h
new file mode 100644
index 000000000..40ff96c41
--- /dev/null
+++ b/tui/nmt-page-grid.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_GRID_H
+#define NMT_PAGE_GRID_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_GRID (nmt_page_grid_get_type ())
+#define NMT_PAGE_GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_GRID, NmtPageGrid))
+#define NMT_PAGE_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_GRID, NmtPageGridClass))
+#define NMT_IS_PAGE_GRID(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_GRID))
+#define NMT_IS_PAGE_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_GRID))
+#define NMT_PAGE_GRID_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_GRID, NmtPageGridClass))
+
+typedef struct {
+ NmtNewtContainer parent;
+
+} NmtPageGrid;
+
+typedef struct {
+ NmtNewtContainerClass parent;
+
+} NmtPageGridClass;
+
+GType nmt_page_grid_get_type (void);
+
+typedef enum {
+ NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT = (1 << 0),
+ NMT_PAGE_GRID_ROW_EXTRA_ALIGN_RIGHT = (1 << 1)
+} NmtPageGridRowFlags;
+
+NmtNewtWidget *nmt_page_grid_new (void);
+
+void nmt_page_grid_append (NmtPageGrid *grid,
+ const char *label,
+ NmtNewtWidget *widget,
+ NmtNewtWidget *extra);
+void nmt_page_grid_set_row_flags (NmtPageGrid *grid,
+ NmtNewtWidget *widget,
+ NmtPageGridRowFlags flags);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_GRID_H */
diff --git a/tui/nmt-page-infiniband.c b/tui/nmt-page-infiniband.c
new file mode 100644
index 000000000..59fa68000
--- /dev/null
+++ b/tui/nmt-page-infiniband.c
@@ -0,0 +1,107 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-infiniband
+ * @short_description: The editor page for InfiniBand connections
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-infiniband.h"
+#include "nmt-mtu-entry.h"
+
+G_DEFINE_TYPE (NmtPageInfiniband, nmt_page_infiniband, NMT_TYPE_PAGE_DEVICE)
+
+NmtNewtWidget *
+nmt_page_infiniband_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_INFINIBAND,
+ "connection", conn,
+ "title", _("INFINIBAND"),
+ "device-entry", deventry,
+ NULL);
+}
+
+static void
+nmt_page_infiniband_init (NmtPageInfiniband *infiniband)
+{
+}
+
+static NmtNewtPopupEntry transport_mode[] = {
+ { N_("Datagram"), "datagram" },
+ { N_("Connected"), "connected" },
+ { NULL, NULL }
+};
+
+static void
+nmt_page_infiniband_constructed (GObject *object)
+{
+ NmtPageInfiniband *infiniband = NMT_PAGE_INFINIBAND (object);
+ NmtDeviceEntry *deventry;
+ NmtPageGrid *grid;
+ NMSettingInfiniband *s_ib;
+ NmtNewtWidget *widget;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (infiniband));
+ s_ib = nm_connection_get_setting_infiniband (conn);
+ if (!s_ib) {
+ nm_connection_add_setting (conn, nm_setting_infiniband_new ());
+ s_ib = nm_connection_get_setting_infiniband (conn);
+ }
+ /* initialize 'transport-mode' if it is NULL */
+ if (!nm_setting_infiniband_get_transport_mode (s_ib)) {
+ g_object_set (G_OBJECT (s_ib),
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
+ NULL);
+ }
+
+ deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ g_object_bind_property (s_ib, NM_SETTING_INFINIBAND_MAC_ADDRESS,
+ deventry, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ grid = NMT_PAGE_GRID (infiniband);
+
+ widget = nmt_newt_popup_new (transport_mode);
+ g_object_bind_property (s_ib, NM_SETTING_INFINIBAND_TRANSPORT_MODE,
+ widget, "active-id",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Transport mode"), widget, NULL);
+
+ widget = nmt_mtu_entry_new ();
+ g_object_bind_property (s_ib, NM_SETTING_INFINIBAND_MTU,
+ widget, "mtu",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("MTU"), widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_infiniband_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_infiniband_class_init (NmtPageInfinibandClass *infiniband_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (infiniband_class);
+
+ object_class->constructed = nmt_page_infiniband_constructed;
+}
diff --git a/tui/nmt-page-infiniband.h b/tui/nmt-page-infiniband.h
new file mode 100644
index 000000000..706b7b60c
--- /dev/null
+++ b/tui/nmt-page-infiniband.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_INFINIBAND_H
+#define NMT_PAGE_INFINIBAND_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_INFINIBAND (nmt_page_infiniband_get_type ())
+#define NMT_PAGE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_INFINIBAND, NmtPageInfiniband))
+#define NMT_PAGE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_INFINIBAND, NmtPageInfinibandClass))
+#define NMT_IS_PAGE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_INFINIBAND))
+#define NMT_IS_PAGE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_INFINIBAND))
+#define NMT_PAGE_INFINIBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_INFINIBAND, NmtPageInfinibandClass))
+
+typedef struct {
+ NmtPageDevice parent;
+
+} NmtPageInfiniband;
+
+typedef struct {
+ NmtPageDeviceClass parent;
+
+} NmtPageInfinibandClass;
+
+GType nmt_page_infiniband_get_type (void);
+
+NmtNewtWidget *nmt_page_infiniband_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_INFINIBAND_H */
diff --git a/tui/nmt-page-ip4.c b/tui/nmt-page-ip4.c
new file mode 100644
index 000000000..1c2d31744
--- /dev/null
+++ b/tui/nmt-page-ip4.c
@@ -0,0 +1,203 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-ip4
+ * @short_description: The editor page for IP4 configuration
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-ip4.h"
+#include "nmt-ip-entry.h"
+#include "nmt-address-list.h"
+#include "nmt-route-editor.h"
+
+#include "nm-editor-bindings.h"
+
+G_DEFINE_TYPE (NmtPageIP4, nmt_page_ip4, NMT_TYPE_EDITOR_PAGE)
+
+static NmtNewtPopupEntry ip4methods[] = {
+ { N_("Disabled"), NM_SETTING_IP4_CONFIG_METHOD_DISABLED },
+ { N_("Automatic"), NM_SETTING_IP4_CONFIG_METHOD_AUTO },
+ { N_("Link-Local"), NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL },
+ { N_("Manual"), NM_SETTING_IP4_CONFIG_METHOD_MANUAL },
+ { N_("Shared"), NM_SETTING_IP4_CONFIG_METHOD_SHARED },
+ { NULL, NULL }
+};
+
+NmtNewtWidget *
+nmt_page_ip4_new (NMConnection *conn)
+{
+ return g_object_new (NMT_TYPE_PAGE_IP4,
+ "connection", conn,
+ "title", _("IPv4 CONFIGURATION"),
+ NULL);
+}
+
+gboolean
+nmt_page_ip4_is_non_empty (NmtPageIP4 *ip4)
+{
+ NMConnection *conn;
+ NMSettingIP4Config *s_ip4;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (ip4));
+ s_ip4 = nm_connection_get_setting_ip4_config (conn);
+ if ( !g_strcmp0 (nm_setting_ip4_config_get_method (s_ip4), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)
+ || nm_setting_ip4_config_get_num_addresses (s_ip4))
+ return TRUE;
+ return FALSE;
+}
+
+static void
+nmt_page_ip4_init (NmtPageIP4 *ip4)
+{
+}
+
+static void
+edit_routes (NmtNewtButton *button,
+ gpointer user_data)
+{
+ NMSetting *s_ip4 = user_data;
+ NmtNewtForm *form;
+
+ form = nmt_route_editor_new (s_ip4);
+ nmt_newt_form_run_sync (form);
+ g_object_unref (form);
+}
+
+static gboolean
+ip4_routes_transform_to_description (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *routes;
+ char *text;
+
+ routes = g_value_get_boxed (source_value);
+ if (!routes || !routes->len)
+ text = g_strdup (_("(No custom routes)"));
+ else {
+ text = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE,
+ "One custom route",
+ "%d custom routes",
+ routes->len),
+ routes->len);
+ }
+
+ g_value_take_string (target_value, text);
+ return TRUE;
+}
+
+static void
+nmt_page_ip4_constructed (GObject *object)
+{
+ NmtPageIP4 *ip4 = NMT_PAGE_IP4 (object);
+ NmtPageGrid *grid;
+ NMSettingIP4Config *s_ip4;
+ NmtNewtWidget *widget, *button;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (ip4));
+ s_ip4 = nm_connection_get_setting_ip4_config (conn);
+ if (!s_ip4) {
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL);
+ nm_connection_add_setting (conn, (NMSetting *) s_ip4);
+ }
+
+ widget = nmt_newt_popup_new (ip4methods);
+ g_object_bind_property (s_ip4, NM_SETTING_IP4_CONFIG_METHOD,
+ widget, "active-id",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_page_set_header_widget (NMT_EDITOR_PAGE (ip4), widget);
+
+ grid = NMT_PAGE_GRID (ip4);
+
+ widget = nmt_address_list_new (NMT_ADDRESS_LIST_IP4_WITH_PREFIX);
+ nm_editor_bind_ip4_addresses_with_prefix_to_strv (s_ip4, NM_SETTING_IP4_CONFIG_ADDRESSES,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Addresses"), widget, NULL);
+
+ widget = nmt_ip_entry_new (25, AF_INET, FALSE, TRUE);
+ nm_editor_bind_ip4_gateway_to_string (s_ip4, NM_SETTING_IP4_CONFIG_ADDRESSES,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Gateway"), widget, NULL);
+
+ widget = nmt_address_list_new (NMT_ADDRESS_LIST_IP4);
+ nm_editor_bind_ip4_addresses_to_strv (s_ip4, NM_SETTING_IP4_CONFIG_DNS,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("DNS servers"), widget, NULL);
+
+ widget = nmt_address_list_new (NMT_ADDRESS_LIST_HOSTNAME);
+ g_object_bind_property (s_ip4, NM_SETTING_IP4_CONFIG_DNS_SEARCH,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Search domains"), widget, NULL);
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = g_object_new (NMT_TYPE_NEWT_LABEL,
+ "text", "",
+ "style", NMT_NEWT_LABEL_PLAIN,
+ NULL);
+ g_object_bind_property_full (s_ip4, NM_SETTING_IP4_CONFIG_ROUTES,
+ widget, "text",
+ G_BINDING_SYNC_CREATE,
+ ip4_routes_transform_to_description,
+ NULL, NULL, NULL);
+ button = nmt_newt_button_new (_("Edit..."));
+ g_signal_connect (button, "clicked", G_CALLBACK (edit_routes), s_ip4);
+ nmt_page_grid_append (grid, _("Routing"), widget, button);
+
+ widget = nmt_newt_checkbox_new (_("Never use this network for default route"));
+ g_object_bind_property (s_ip4, NM_SETTING_IP4_CONFIG_NEVER_DEFAULT,
+ widget, "active",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = nmt_newt_checkbox_new (_("Require IPv4 addressing for this connection"));
+ g_object_bind_property (s_ip4, NM_SETTING_IP4_CONFIG_MAY_FAIL,
+ widget, "active",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_ip4_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_ip4_class_init (NmtPageIP4Class *ip4_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ip4_class);
+
+ object_class->constructed = nmt_page_ip4_constructed;
+}
diff --git a/tui/nmt-page-ip4.h b/tui/nmt-page-ip4.h
new file mode 100644
index 000000000..f3bb933e0
--- /dev/null
+++ b/tui/nmt-page-ip4.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_IP4_H
+#define NMT_PAGE_IP4_H
+
+#include "nmt-editor-page.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_IP4 (nmt_page_ip4_get_type ())
+#define NMT_PAGE_IP4(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_IP4, NmtPageIP4))
+#define NMT_PAGE_IP4_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_IP4, NmtPageIP4Class))
+#define NMT_IS_PAGE_IP4(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_IP4))
+#define NMT_IS_PAGE_IP4_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_IP4))
+#define NMT_PAGE_IP4_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_IP4, NmtPageIP4Class))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtPageIP4;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtPageIP4Class;
+
+GType nmt_page_ip4_get_type (void);
+
+NmtNewtWidget *nmt_page_ip4_new (NMConnection *conn);
+
+gboolean nmt_page_ip4_is_non_empty (NmtPageIP4 *ip4);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_IP4_H */
diff --git a/tui/nmt-page-ip6.c b/tui/nmt-page-ip6.c
new file mode 100644
index 000000000..ae859bd93
--- /dev/null
+++ b/tui/nmt-page-ip6.c
@@ -0,0 +1,201 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-ip6
+ * @short_description: The editor page for IP6 configuration
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-ip6.h"
+#include "nmt-ip-entry.h"
+#include "nmt-address-list.h"
+#include "nmt-route-editor.h"
+
+#include "nm-editor-bindings.h"
+
+G_DEFINE_TYPE (NmtPageIP6, nmt_page_ip6, NMT_TYPE_EDITOR_PAGE)
+
+static NmtNewtPopupEntry ip6methods[] = {
+ { N_("Ignore"), NM_SETTING_IP6_CONFIG_METHOD_IGNORE },
+ { N_("Automatic"), NM_SETTING_IP6_CONFIG_METHOD_AUTO },
+ { N_("Automatic (DHCP-only)"), NM_SETTING_IP6_CONFIG_METHOD_DHCP },
+ { N_("Link-Local"), NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL },
+ { N_("Manual"), NM_SETTING_IP6_CONFIG_METHOD_MANUAL },
+ { NULL, NULL }
+};
+
+NmtNewtWidget *
+nmt_page_ip6_new (NMConnection *conn)
+{
+ return g_object_new (NMT_TYPE_PAGE_IP6,
+ "connection", conn,
+ "title", _("IPv6 CONFIGURATION"),
+ NULL);
+}
+
+gboolean
+nmt_page_ip6_is_non_empty (NmtPageIP6 *ip6)
+{
+ NMConnection *conn;
+ NMSettingIP6Config *s_ip6;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (ip6));
+ s_ip6 = nm_connection_get_setting_ip6_config (conn);
+ if ( !g_strcmp0 (nm_setting_ip6_config_get_method (s_ip6), NM_SETTING_IP6_CONFIG_METHOD_MANUAL)
+ || nm_setting_ip6_config_get_num_addresses (s_ip6))
+ return TRUE;
+ return FALSE;
+}
+
+static void
+nmt_page_ip6_init (NmtPageIP6 *ip6)
+{
+}
+
+static void
+edit_routes (NmtNewtButton *button,
+ gpointer user_data)
+{
+ NMSetting *s_ip6 = user_data;
+ NmtNewtForm *form;
+
+ form = nmt_route_editor_new (s_ip6);
+ nmt_newt_form_run_sync (form);
+ g_object_unref (form);
+}
+
+static gboolean
+ip6_routes_transform_to_description (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *routes;
+ char *text;
+
+ routes = g_value_get_boxed (source_value);
+ if (!routes || !routes->len)
+ text = g_strdup (_("(No custom routes)"));
+ else {
+ text = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE,
+ "One custom route",
+ "%d custom routes",
+ routes->len),
+ routes->len);
+ }
+
+ g_value_take_string (target_value, text);
+ return TRUE;
+}
+
+static void
+nmt_page_ip6_constructed (GObject *object)
+{
+ NmtPageIP6 *ip6 = NMT_PAGE_IP6 (object);
+ NmtPageGrid *grid;
+ NMSettingIP6Config *s_ip6;
+ NmtNewtWidget *widget, *button;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (ip6));
+ s_ip6 = nm_connection_get_setting_ip6_config (conn);
+ if (!s_ip6) {
+ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ g_object_set (G_OBJECT (s_ip6),
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NULL);
+ nm_connection_add_setting (conn, (NMSetting *) s_ip6);
+ }
+
+ widget = nmt_newt_popup_new (ip6methods);
+ g_object_bind_property (s_ip6, NM_SETTING_IP6_CONFIG_METHOD,
+ widget, "active-id",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_page_set_header_widget (NMT_EDITOR_PAGE (ip6), widget);
+
+ grid = NMT_PAGE_GRID (ip6);
+
+ widget = nmt_address_list_new (NMT_ADDRESS_LIST_IP6_WITH_PREFIX);
+ nm_editor_bind_ip6_addresses_with_prefix_to_strv (s_ip6, NM_SETTING_IP6_CONFIG_ADDRESSES,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Addresses"), widget, NULL);
+
+ widget = nmt_ip_entry_new (25, AF_INET6, FALSE, TRUE);
+ nm_editor_bind_ip6_gateway_to_string (s_ip6, NM_SETTING_IP6_CONFIG_ADDRESSES,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Gateway"), widget, NULL);
+
+ widget = nmt_address_list_new (NMT_ADDRESS_LIST_IP6);
+ nm_editor_bind_ip6_addresses_to_strv (s_ip6, NM_SETTING_IP6_CONFIG_DNS,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("DNS servers"), widget, NULL);
+
+ widget = nmt_address_list_new (NMT_ADDRESS_LIST_HOSTNAME);
+ g_object_bind_property (s_ip6, NM_SETTING_IP6_CONFIG_DNS_SEARCH,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Search domains"), widget, NULL);
+
+ widget = g_object_new (NMT_TYPE_NEWT_LABEL,
+ "text", "",
+ "style", NMT_NEWT_LABEL_PLAIN,
+ NULL);
+ g_object_bind_property_full (s_ip6, NM_SETTING_IP6_CONFIG_ROUTES,
+ widget, "text",
+ G_BINDING_SYNC_CREATE,
+ ip6_routes_transform_to_description,
+ NULL, NULL, NULL);
+ button = nmt_newt_button_new (_("Edit..."));
+ g_signal_connect (button, "clicked", G_CALLBACK (edit_routes), s_ip6);
+ nmt_page_grid_append (grid, _("Routing"), widget, button);
+
+ widget = nmt_newt_checkbox_new (_("Never use this network for default route"));
+ g_object_bind_property (s_ip6, NM_SETTING_IP6_CONFIG_NEVER_DEFAULT,
+ widget, "active",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = nmt_newt_checkbox_new (_("Require IPv6 addressing for this connection"));
+ g_object_bind_property (s_ip6, NM_SETTING_IP6_CONFIG_MAY_FAIL,
+ widget, "active",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_ip6_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_ip6_class_init (NmtPageIP6Class *ip6_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ip6_class);
+
+ object_class->constructed = nmt_page_ip6_constructed;
+}
diff --git a/tui/nmt-page-ip6.h b/tui/nmt-page-ip6.h
new file mode 100644
index 000000000..d0d2bfa29
--- /dev/null
+++ b/tui/nmt-page-ip6.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_IP6_H
+#define NMT_PAGE_IP6_H
+
+#include "nmt-editor-page.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_IP6 (nmt_page_ip6_get_type ())
+#define NMT_PAGE_IP6(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_IP6, NmtPageIP6))
+#define NMT_PAGE_IP6_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_IP6, NmtPageIP6Class))
+#define NMT_IS_PAGE_IP6(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_IP6))
+#define NMT_IS_PAGE_IP6_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_IP6))
+#define NMT_PAGE_IP6_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_IP6, NmtPageIP6Class))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtPageIP6;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtPageIP6Class;
+
+GType nmt_page_ip6_get_type (void);
+
+NmtNewtWidget *nmt_page_ip6_new (NMConnection *conn);
+
+gboolean nmt_page_ip6_is_non_empty (NmtPageIP6 *ip6);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_IP6_H */
diff --git a/tui/nmt-page-main.c b/tui/nmt-page-main.c
new file mode 100644
index 000000000..f49b155b3
--- /dev/null
+++ b/tui/nmt-page-main.c
@@ -0,0 +1,327 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-main
+ * @short_description: The top-level #NmtEditorPage for a connection
+ *
+ * #NmtPageMain is the top-level #NmtEditorPage for a connection. It
+ * handles #NMSettingConnection properties, and embeds the other pages
+ * within itself.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include <nm-device.h>
+#include <nm-utils.h>
+
+#include "nmt-page-main.h"
+#include "nmt-device-entry.h"
+#include "nmt-mac-entry.h"
+#include "nmt-mtu-entry.h"
+#include "nmtui.h"
+
+#include "nmt-page-bond.h"
+#include "nmt-page-bridge.h"
+#include "nmt-page-bridge-port.h"
+#include "nmt-page-ethernet.h"
+#include "nmt-page-infiniband.h"
+#include "nmt-page-ip4.h"
+#include "nmt-page-ip6.h"
+#include "nmt-page-team.h"
+#include "nmt-page-team-port.h"
+#include "nmt-page-vlan.h"
+#include "nmt-page-wifi.h"
+
+G_DEFINE_TYPE (NmtPageMain, nmt_page_main, NMT_TYPE_EDITOR_PAGE)
+
+#define NMT_PAGE_MAIN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_MAIN, NmtPageMainPrivate))
+
+typedef struct {
+ NMEditorConnectionTypeData *type_data;
+} NmtPageMainPrivate;
+
+enum {
+ PROP_0,
+
+ PROP_TYPE_DATA,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_page_main_new:
+ * @conn: the #NMConnection to display
+ * @type_data: @conn's #NMEditorConnectionTypeData
+ *
+ * Creates a new #NmtPageMain
+ *
+ * Returns: a new #NmtPageMain
+ */
+NmtNewtWidget *
+nmt_page_main_new (NMConnection *conn,
+ NMEditorConnectionTypeData *type_data)
+{
+ return g_object_new (NMT_TYPE_PAGE_MAIN,
+ "connection", conn,
+ "type-data", type_data,
+ NULL);
+}
+
+static void
+nmt_page_main_init (NmtPageMain *page)
+{
+}
+
+static gboolean
+permissions_transform_to_allusers (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GSList *perms = g_value_get_boxed (source_value);
+
+ g_value_set_boolean (target_value, perms == NULL);
+ return TRUE;
+}
+
+static gboolean
+permissions_transform_from_allusers (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ gboolean allusers = g_value_get_boolean (source_value);
+ GSList *perms = NULL;
+
+ if (allusers) {
+ char *perm = g_strdup_printf ("user:%s:", g_get_user_name ());
+
+ perms = g_slist_prepend (perms, perm);
+ }
+ g_value_take_boxed (target_value, perms);
+ return TRUE;
+}
+
+static NmtNewtWidget *
+build_section_for_page (NmtEditorPage *page,
+ gboolean open)
+{
+ NmtNewtWidget *section, *header, *toggle;
+
+ g_return_val_if_fail (nmt_newt_widget_get_parent (NMT_NEWT_WIDGET (page)) == NULL, NULL);
+
+ section = nmt_newt_section_new ();
+
+ toggle = nmt_newt_toggle_button_new (_("Hide"), _("Show"));
+
+ header = nmt_page_grid_new ();
+ nmt_page_grid_append (NMT_PAGE_GRID (header),
+ nmt_editor_page_get_title (page),
+ nmt_editor_page_get_header_widget (page),
+ toggle);
+ nmt_page_grid_set_row_flags (NMT_PAGE_GRID (header),
+ nmt_editor_page_get_header_widget (page),
+ NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT |
+ NMT_PAGE_GRID_ROW_EXTRA_ALIGN_RIGHT);
+ nmt_newt_section_set_header (NMT_NEWT_SECTION (section), header);
+
+ nmt_newt_section_set_body (NMT_NEWT_SECTION (section), NMT_NEWT_WIDGET (page));
+
+ g_object_bind_property (toggle, "active",
+ section, "open",
+ G_BINDING_SYNC_CREATE);
+
+ if (open || !nmt_newt_widget_get_valid (section))
+ nmt_newt_toggle_button_set_active (NMT_NEWT_TOGGLE_BUTTON (toggle), TRUE);
+
+ return section;
+}
+
+static void
+nmt_page_main_constructed (GObject *object)
+{
+ NmtPageMain *page_main = NMT_PAGE_MAIN (object);
+ NmtPageMainPrivate *priv = NMT_PAGE_MAIN_GET_PRIVATE (page_main);
+ NmtPageGrid *grid;
+ NMConnection *conn;
+ NMSettingConnection *s_con;
+ NmtNewtWidget *widget, *section, *page, *separator;
+ NmtDeviceEntry *deventry;
+ GType hardware_type;
+ const char *slave_type;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (page_main));
+ s_con = nm_connection_get_setting_connection (conn);
+
+ grid = NMT_PAGE_GRID (page_main);
+
+ widget = nmt_newt_entry_new (40, NMT_NEWT_ENTRY_NONEMPTY);
+ g_object_bind_property (s_con, NM_SETTING_CONNECTION_ID,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Profile name"), widget, NULL);
+
+ if (priv->type_data->virtual)
+ hardware_type = G_TYPE_NONE;
+ else
+ hardware_type = priv->type_data->device_type;
+
+ widget = nmt_device_entry_new (_("Device"), 40, hardware_type);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+ deventry = NMT_DEVICE_ENTRY (widget);
+ g_object_bind_property (s_con, NM_SETTING_CONNECTION_INTERFACE_NAME,
+ deventry, "interface-name",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ if (nm_connection_is_type (conn, NM_SETTING_BOND_SETTING_NAME))
+ page = nmt_page_bond_new (conn, deventry);
+ else if (nm_connection_is_type (conn, NM_SETTING_BRIDGE_SETTING_NAME))
+ page = nmt_page_bridge_new (conn, deventry);
+ else if (nm_connection_is_type (conn, NM_SETTING_INFINIBAND_SETTING_NAME))
+ page = nmt_page_infiniband_new (conn, deventry);
+ else if (nm_connection_is_type (conn, NM_SETTING_TEAM_SETTING_NAME))
+ page = nmt_page_team_new (conn, deventry);
+ else if (nm_connection_is_type (conn, NM_SETTING_VLAN_SETTING_NAME))
+ page = nmt_page_vlan_new (conn, deventry);
+ else if (nm_connection_is_type (conn, NM_SETTING_WIRED_SETTING_NAME))
+ page = nmt_page_ethernet_new (conn, deventry);
+ else if (nm_connection_is_type (conn, NM_SETTING_WIRELESS_SETTING_NAME))
+ page = nmt_page_wifi_new (conn, deventry);
+ else
+ page = NULL;
+
+ if (page) {
+ gboolean show_by_default = nmt_page_device_get_show_by_default (NMT_PAGE_DEVICE (page));
+
+ section = build_section_for_page (NMT_EDITOR_PAGE (page), show_by_default);
+ nmt_page_grid_append (grid, NULL, section, NULL);
+ }
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if (slave_type) {
+ if (!strcmp (slave_type, NM_SETTING_BRIDGE_SETTING_NAME)) {
+ page = nmt_page_bridge_port_new (conn);
+ section = build_section_for_page (NMT_EDITOR_PAGE (page), TRUE);
+ nmt_page_grid_append (grid, NULL, section, NULL);
+ } else if (!strcmp (slave_type, NM_SETTING_TEAM_SETTING_NAME)) {
+ page = nmt_page_team_port_new (conn);
+ section = build_section_for_page (NMT_EDITOR_PAGE (page), TRUE);
+ nmt_page_grid_append (grid, NULL, section, NULL);
+ }
+ } else {
+ page = nmt_page_ip4_new (conn);
+ section = build_section_for_page (NMT_EDITOR_PAGE (page),
+ nmt_page_ip4_is_non_empty (NMT_PAGE_IP4 (page)));
+ nmt_page_grid_append (grid, NULL, section, NULL);
+
+ /* Add a separator between ip4 and ip6 that's only visible if ip4 is open */
+ separator = nmt_newt_separator_new ();
+ g_object_bind_property (section, "open", separator, "visible", G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, NULL, separator, NULL);
+
+ page = nmt_page_ip6_new (conn);
+ section = build_section_for_page (NMT_EDITOR_PAGE (page),
+ nmt_page_ip6_is_non_empty (NMT_PAGE_IP6 (page)));
+ nmt_page_grid_append (grid, NULL, section, NULL);
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+ }
+
+ widget = nmt_newt_checkbox_new (_("Automatically connect"));
+ g_object_bind_property (s_con, NM_SETTING_CONNECTION_AUTOCONNECT,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ widget = nmt_newt_checkbox_new (_("Available to all users"));
+ g_object_bind_property_full (s_con, NM_SETTING_CONNECTION_PERMISSIONS,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
+ permissions_transform_to_allusers,
+ permissions_transform_from_allusers,
+ NULL, NULL);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_main_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_main_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPageMainPrivate *priv = NMT_PAGE_MAIN_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_TYPE_DATA:
+ priv->type_data = g_value_get_pointer (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_page_main_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPageMainPrivate *priv = NMT_PAGE_MAIN_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_TYPE_DATA:
+ g_value_set_pointer (value, priv->type_data);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_page_main_class_init (NmtPageMainClass *main_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (main_class);
+
+ g_type_class_add_private (main_class, sizeof (NmtPageMainPrivate));
+
+ object_class->constructed = nmt_page_main_constructed;
+ object_class->set_property = nmt_page_main_set_property;
+ object_class->get_property = nmt_page_main_get_property;
+
+ /**
+ * NmtPageMain:type-data:
+ *
+ * The page's connection's #NMEditorConnectionTypeData
+ */
+ g_object_class_install_property (object_class, PROP_TYPE_DATA,
+ g_param_spec_pointer ("type-data", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-page-main.h b/tui/nmt-page-main.h
new file mode 100644
index 000000000..20de14f36
--- /dev/null
+++ b/tui/nmt-page-main.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_MAIN_H
+#define NMT_PAGE_MAIN_H
+
+#include "nmt-editor-page.h"
+#include "nm-editor-utils.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_MAIN (nmt_page_main_get_type ())
+#define NMT_PAGE_MAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_MAIN, NmtPageMain))
+#define NMT_PAGE_MAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_MAIN, NmtPageMainClass))
+#define NMT_IS_PAGE_MAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_MAIN))
+#define NMT_IS_PAGE_MAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_MAIN))
+#define NMT_PAGE_MAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_MAIN, NmtPageMainClass))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtPageMain;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtPageMainClass;
+
+GType nmt_page_main_get_type (void);
+
+NmtNewtWidget *nmt_page_main_new (NMConnection *conn,
+ NMEditorConnectionTypeData *type_data);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_MAIN_H */
diff --git a/tui/nmt-page-team-port.c b/tui/nmt-page-team-port.c
new file mode 100644
index 000000000..aec6b8039
--- /dev/null
+++ b/tui/nmt-page-team-port.c
@@ -0,0 +1,125 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-team-port
+ * @short_description: The editor page for Team ports.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-team-port.h"
+
+G_DEFINE_TYPE (NmtPageTeamPort, nmt_page_team_port, NMT_TYPE_EDITOR_PAGE)
+
+#define NMT_PAGE_TEAM_PORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_TEAM_PORT, NmtPageTeamPortPrivate))
+
+typedef struct {
+ NMSettingTeamPort *s_port;
+
+} NmtPageTeamPortPrivate;
+
+NmtNewtWidget *
+nmt_page_team_port_new (NMConnection *conn)
+{
+ return g_object_new (NMT_TYPE_PAGE_TEAM_PORT,
+ "connection", conn,
+ "title", _("TEAM PORT"),
+ NULL);
+}
+
+static void
+nmt_page_team_port_init (NmtPageTeamPort *team)
+{
+}
+
+static void
+edit_clicked (NmtNewtButton *button,
+ gpointer user_data)
+{
+ NmtPageTeamPort *team = user_data;
+ NmtPageTeamPortPrivate *priv = NMT_PAGE_TEAM_PORT_GET_PRIVATE (team);
+ const char *config;
+ char *new_config;
+
+ config = nm_setting_team_port_get_config (priv->s_port);
+ if (!config)
+ config = "";
+
+ new_config = nmt_newt_edit_string (config);
+
+ if (new_config && !*new_config)
+ g_clear_pointer (&new_config, g_free);
+ g_object_set (G_OBJECT (priv->s_port),
+ NM_SETTING_TEAM_PORT_CONFIG, new_config,
+ NULL);
+ g_free (new_config);
+}
+
+static void
+nmt_page_team_port_constructed (GObject *object)
+{
+ NmtPageTeamPort *team = NMT_PAGE_TEAM_PORT (object);
+ NmtPageTeamPortPrivate *priv = NMT_PAGE_TEAM_PORT_GET_PRIVATE (team);
+ NmtNewtGrid *grid;
+ NMSettingTeamPort *s_port;
+ NmtNewtWidget *widget;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (team));
+ s_port = nm_connection_get_setting_team_port (conn);
+ if (!s_port) {
+ nm_connection_add_setting (conn, nm_setting_team_port_new ());
+ s_port = nm_connection_get_setting_team_port (conn);
+ }
+ priv->s_port = s_port;
+
+ widget = nmt_newt_grid_new ();
+ nmt_page_grid_append (NMT_PAGE_GRID (team), NULL, widget, NULL);
+
+ grid = NMT_NEWT_GRID (widget);
+
+ widget = nmt_newt_label_new (_("JSON configuration"));
+ nmt_newt_grid_add (grid, widget, 0, 2);
+
+ widget = nmt_newt_textbox_new (NMT_NEWT_TEXTBOX_SCROLLABLE | NMT_NEWT_TEXTBOX_SET_BACKGROUND, 60);
+ g_object_bind_property (s_port, NM_SETTING_TEAM_PORT_CONFIG,
+ widget, "text",
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (grid, widget, 0, 3);
+ nmt_newt_widget_set_padding (widget, 2, 0, 2, 1);
+
+ widget = nmt_newt_button_new (_("Edit..."));
+ g_signal_connect (widget, "clicked", G_CALLBACK (edit_clicked), team);
+ nmt_newt_grid_add (grid, widget, 0, 4);
+
+ G_OBJECT_CLASS (nmt_page_team_port_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_team_port_class_init (NmtPageTeamPortClass *team_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (team_class);
+
+ g_type_class_add_private (team_class, sizeof (NmtPageTeamPortPrivate));
+
+ object_class->constructed = nmt_page_team_port_constructed;
+}
diff --git a/tui/nmt-page-team-port.h b/tui/nmt-page-team-port.h
new file mode 100644
index 000000000..d4ec7a557
--- /dev/null
+++ b/tui/nmt-page-team-port.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_TEAM_PORT_H
+#define NMT_PAGE_TEAM_PORT_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_TEAM_PORT (nmt_page_team_port_get_type ())
+#define NMT_PAGE_TEAM_PORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_TEAM_PORT, NmtPageTeamPort))
+#define NMT_PAGE_TEAM_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_TEAM_PORT, NmtPageTeamPortClass))
+#define NMT_IS_PAGE_TEAM_PORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_TEAM_PORT))
+#define NMT_IS_PAGE_TEAM_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_TEAM_PORT))
+#define NMT_PAGE_TEAM_PORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_TEAM_PORT, NmtPageTeamPortClass))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtPageTeamPort;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtPageTeamPortClass;
+
+GType nmt_page_team_port_get_type (void);
+
+NmtNewtWidget *nmt_page_team_port_new (NMConnection *conn);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_TEAM_PORT_H */
diff --git a/tui/nmt-page-team.c b/tui/nmt-page-team.c
new file mode 100644
index 000000000..81db3d33f
--- /dev/null
+++ b/tui/nmt-page-team.c
@@ -0,0 +1,195 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-team
+ * @short_description: The editor page for Team connections
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-team.h"
+
+#include "nmt-slave-list.h"
+
+G_DEFINE_TYPE (NmtPageTeam, nmt_page_team, NMT_TYPE_PAGE_DEVICE)
+
+#define NMT_PAGE_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_TEAM, NmtPageTeamPrivate))
+
+typedef struct {
+ NmtSlaveList *slaves;
+
+ NMSettingTeam *s_team;
+ GType slave_type;
+
+} NmtPageTeamPrivate;
+
+NmtNewtWidget *
+nmt_page_team_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_TEAM,
+ "connection", conn,
+ "title", _("TEAM"),
+ "device-entry", deventry,
+ NULL);
+}
+
+static void
+nmt_page_team_init (NmtPageTeam *team)
+{
+ NmtPageTeamPrivate *priv = NMT_PAGE_TEAM_GET_PRIVATE (team);
+
+ priv->slave_type = G_TYPE_NONE;
+}
+
+static void
+slaves_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NmtPageTeam *team = NMT_PAGE_TEAM (user_data);
+ NmtPageTeamPrivate *priv = NMT_PAGE_TEAM_GET_PRIVATE (team);
+ GPtrArray *slaves;
+
+ g_object_get (object, "connections", &slaves, NULL);
+ if (slaves->len == 0) {
+ priv->slave_type = G_TYPE_NONE;
+ } else if (priv->slave_type == G_TYPE_NONE) {
+ NMConnection *slave = slaves->pdata[0];
+
+ if (nm_connection_is_type (slave, NM_SETTING_INFINIBAND_SETTING_NAME))
+ priv->slave_type = NM_TYPE_SETTING_INFINIBAND;
+ else
+ priv->slave_type = NM_TYPE_SETTING_WIRED;
+ }
+}
+
+static gboolean
+team_connection_type_filter (GType connection_type,
+ gpointer user_data)
+{
+ NmtPageTeam *team = user_data;
+ NmtPageTeamPrivate *priv = NMT_PAGE_TEAM_GET_PRIVATE (team);
+
+ if (priv->slave_type != NM_TYPE_SETTING_WIRED) {
+ if (connection_type == NM_TYPE_SETTING_INFINIBAND)
+ return TRUE;
+ }
+ if (priv->slave_type != NM_TYPE_SETTING_INFINIBAND) {
+ if ( connection_type == NM_TYPE_SETTING_WIRED
+ || connection_type == NM_TYPE_SETTING_WIRELESS
+ || connection_type == NM_TYPE_SETTING_VLAN)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+edit_clicked (NmtNewtButton *button,
+ gpointer user_data)
+{
+ NmtPageTeam *team = user_data;
+ NmtPageTeamPrivate *priv = NMT_PAGE_TEAM_GET_PRIVATE (team);
+ const char *config;
+ char *new_config;
+
+ config = nm_setting_team_get_config (priv->s_team);
+ if (!config)
+ config = "";
+
+ new_config = nmt_newt_edit_string (config);
+
+ if (new_config && !*new_config)
+ g_clear_pointer (&new_config, g_free);
+ g_object_set (G_OBJECT (priv->s_team),
+ NM_SETTING_TEAM_CONFIG, new_config,
+ NULL);
+ g_free (new_config);
+}
+
+static void
+nmt_page_team_constructed (GObject *object)
+{
+ NmtPageTeam *team = NMT_PAGE_TEAM (object);
+ NmtPageTeamPrivate *priv = NMT_PAGE_TEAM_GET_PRIVATE (team);
+ NmtDeviceEntry *deventry;
+ NmtNewtGrid *grid;
+ NMSettingTeam *s_team;
+ NmtNewtWidget *widget;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (team));
+ s_team = nm_connection_get_setting_team (conn);
+ if (!s_team) {
+ nm_connection_add_setting (conn, nm_setting_team_new ());
+ s_team = nm_connection_get_setting_team (conn);
+ }
+ priv->s_team = s_team;
+
+ deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ g_object_bind_property (s_team, NM_SETTING_TEAM_INTERFACE_NAME,
+ deventry, "interface-name",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ widget = nmt_newt_grid_new ();
+ nmt_page_grid_append (NMT_PAGE_GRID (team), NULL, widget, NULL);
+
+ grid = NMT_NEWT_GRID (widget);
+
+ widget = nmt_newt_label_new (_("Slaves"));
+ nmt_newt_grid_add (grid, widget, 0, 0);
+
+ widget = nmt_slave_list_new (conn, team_connection_type_filter, team);
+ g_signal_connect (widget, "notify::connections",
+ G_CALLBACK (slaves_changed), team);
+ nmt_newt_grid_add (grid, widget, 0, 1);
+ nmt_newt_widget_set_padding (widget, 0, 0, 0, 1);
+ priv->slaves = NMT_SLAVE_LIST (widget);
+ slaves_changed (G_OBJECT (priv->slaves), NULL, team);
+
+ widget = nmt_newt_label_new (_("JSON configuration"));
+ nmt_newt_grid_add (grid, widget, 0, 2);
+
+ widget = nmt_newt_textbox_new (NMT_NEWT_TEXTBOX_SCROLLABLE | NMT_NEWT_TEXTBOX_SET_BACKGROUND, 60);
+ g_object_bind_property (s_team, NM_SETTING_TEAM_CONFIG,
+ widget, "text",
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (grid, widget, 0, 3);
+ nmt_newt_widget_set_padding (widget, 2, 0, 2, 1);
+
+ widget = nmt_newt_button_new (_("Edit..."));
+ g_signal_connect (widget, "clicked", G_CALLBACK (edit_clicked), team);
+ nmt_newt_grid_add (grid, widget, 0, 4);
+
+ G_OBJECT_CLASS (nmt_page_team_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_team_class_init (NmtPageTeamClass *team_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (team_class);
+
+ g_type_class_add_private (team_class, sizeof (NmtPageTeamPrivate));
+
+ object_class->constructed = nmt_page_team_constructed;
+}
diff --git a/tui/nmt-page-team.h b/tui/nmt-page-team.h
new file mode 100644
index 000000000..49a81dd55
--- /dev/null
+++ b/tui/nmt-page-team.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_TEAM_H
+#define NMT_PAGE_TEAM_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_TEAM (nmt_page_team_get_type ())
+#define NMT_PAGE_TEAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_TEAM, NmtPageTeam))
+#define NMT_PAGE_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_TEAM, NmtPageTeamClass))
+#define NMT_IS_PAGE_TEAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_TEAM))
+#define NMT_IS_PAGE_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_TEAM))
+#define NMT_PAGE_TEAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_TEAM, NmtPageTeamClass))
+
+typedef struct {
+ NmtPageDevice parent;
+
+} NmtPageTeam;
+
+typedef struct {
+ NmtPageDeviceClass parent;
+
+} NmtPageTeamClass;
+
+GType nmt_page_team_get_type (void);
+
+NmtNewtWidget *nmt_page_team_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_TEAM_H */
diff --git a/tui/nmt-page-vlan.c b/tui/nmt-page-vlan.c
new file mode 100644
index 000000000..f6de671c8
--- /dev/null
+++ b/tui/nmt-page-vlan.c
@@ -0,0 +1,163 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-vlan
+ * @short_description: The editor page for VLAN connections
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include <nm-device-ethernet.h>
+
+#include "nm-editor-bindings.h"
+
+#include "nmt-page-vlan.h"
+#include "nmt-device-entry.h"
+#include "nmt-mac-entry.h"
+#include "nmt-mtu-entry.h"
+
+G_DEFINE_TYPE (NmtPageVlan, nmt_page_vlan, NMT_TYPE_PAGE_DEVICE)
+
+#define NMT_PAGE_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_VLAN, NmtPageVlanPrivate))
+
+typedef struct {
+ NMSettingWired *s_wired;
+
+} NmtPageVlanPrivate;
+
+NmtNewtWidget *
+nmt_page_vlan_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_VLAN,
+ "connection", conn,
+ "title", _("VLAN"),
+ "device-entry", deventry,
+ NULL);
+}
+
+static void
+nmt_page_vlan_init (NmtPageVlan *vlan)
+{
+}
+
+static gboolean
+vlan_device_filter (NmtDeviceEntry *deventry,
+ NMDevice *device,
+ gpointer user_data)
+{
+ // FIXME
+ return NM_IS_DEVICE_ETHERNET (device);
+}
+
+static void
+nmt_page_vlan_constructed (GObject *object)
+{
+ NmtPageVlan *vlan = NMT_PAGE_VLAN (object);
+ NmtPageVlanPrivate *priv = NMT_PAGE_VLAN_GET_PRIVATE (vlan);
+ NmtDeviceEntry *deventry;
+ NmtPageGrid *grid;
+ NMSettingWired *s_wired;
+ NMSettingVlan *s_vlan;
+ NmtNewtWidget *widget, *parent, *id_entry;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (vlan));
+ s_vlan = nm_connection_get_setting_vlan (conn);
+ if (!s_vlan) {
+ nm_connection_add_setting (conn, nm_setting_vlan_new ());
+ s_vlan = nm_connection_get_setting_vlan (conn);
+ }
+ s_wired = nm_connection_get_setting_wired (conn);
+ if (!s_wired) {
+ /* It makes things simpler if we always have a NMSettingWired;
+ * we'll hold a ref on one, and add it to and remove it from
+ * the connection as needed.
+ */
+ s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
+ }
+ priv->s_wired = g_object_ref_sink (s_wired);
+
+ deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ g_object_bind_property (s_vlan, NM_SETTING_VLAN_INTERFACE_NAME,
+ deventry, "interface-name",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ grid = NMT_PAGE_GRID (vlan);
+
+ nm_editor_bind_vlan_name (s_vlan);
+
+ widget = parent = nmt_device_entry_new (_("Parent"), 40, G_TYPE_NONE);
+ nmt_device_entry_set_device_filter (NMT_DEVICE_ENTRY (widget),
+ vlan_device_filter, vlan);
+ g_object_bind_property (s_vlan, NM_SETTING_VLAN_PARENT,
+ widget, "interface-name",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ g_object_bind_property (s_wired, NM_SETTING_WIRED_MAC_ADDRESS,
+ widget, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, NULL, widget, NULL);
+
+ widget = id_entry = nmt_newt_entry_numeric_new (8, 0, 4095);
+ g_object_bind_property (s_vlan, NM_SETTING_VLAN_ID,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("VLAN id"), widget, NULL);
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = nmt_mac_entry_new (40, ETH_ALEN);
+ g_object_bind_property (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
+ widget, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Cloned MAC address"), widget, NULL);
+
+ widget = nmt_mtu_entry_new ();
+ g_object_bind_property (s_wired, NM_SETTING_WIRED_MTU,
+ widget, "mtu",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("MTU"), widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_vlan_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_vlan_finalize (GObject *object)
+{
+ NmtPageVlanPrivate *priv = NMT_PAGE_VLAN_GET_PRIVATE (object);
+
+ g_clear_object (&priv->s_wired);
+
+ G_OBJECT_CLASS (nmt_page_vlan_parent_class)->finalize (object);
+}
+
+static void
+nmt_page_vlan_class_init (NmtPageVlanClass *vlan_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (vlan_class);
+
+ g_type_class_add_private (vlan_class, sizeof (NmtPageVlanPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_page_vlan_constructed;
+ object_class->finalize = nmt_page_vlan_finalize;
+}
diff --git a/tui/nmt-page-vlan.h b/tui/nmt-page-vlan.h
new file mode 100644
index 000000000..57d002438
--- /dev/null
+++ b/tui/nmt-page-vlan.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_VLAN_H
+#define NMT_PAGE_VLAN_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_VLAN (nmt_page_vlan_get_type ())
+#define NMT_PAGE_VLAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_VLAN, NmtPageVlan))
+#define NMT_PAGE_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_VLAN, NmtPageVlanClass))
+#define NMT_IS_PAGE_VLAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_VLAN))
+#define NMT_IS_PAGE_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_VLAN))
+#define NMT_PAGE_VLAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_VLAN, NmtPageVlanClass))
+
+typedef struct {
+ NmtPageDevice parent;
+
+} NmtPageVlan;
+
+typedef struct {
+ NmtPageDeviceClass parent;
+
+} NmtPageVlanClass;
+
+GType nmt_page_vlan_get_type (void);
+
+NmtNewtWidget *nmt_page_vlan_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_VLAN_H */
diff --git a/tui/nmt-page-wifi.c b/tui/nmt-page-wifi.c
new file mode 100644
index 000000000..153aee7ca
--- /dev/null
+++ b/tui/nmt-page-wifi.c
@@ -0,0 +1,389 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-wifi
+ * @short_description: The editor page for Wi-Fi connections
+ *
+ * #NmtPageWifi is the editor page for Wi-Fi connections, which
+ * includes both #NMSettingWireless and #NMSettingWirelessSecurity
+ * properties.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#include <nm-utils.h>
+
+#include "nmt-page-wifi.h"
+#include "nmt-mac-entry.h"
+#include "nmt-mtu-entry.h"
+#include "nmt-password-fields.h"
+
+#include "nm-editor-bindings.h"
+
+G_DEFINE_TYPE (NmtPageWifi, nmt_page_wifi, NMT_TYPE_PAGE_DEVICE)
+
+#define NMT_PAGE_WIFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_WIFI, NmtPageWifiPrivate))
+
+typedef struct {
+ NMSettingWirelessSecurity *s_wsec;
+
+} NmtPageWifiPrivate;
+
+NmtNewtWidget *
+nmt_page_wifi_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_WIFI,
+ "connection", conn,
+ "title", _("WI-FI"),
+ "device-entry", deventry,
+ NULL);
+}
+
+static void
+nmt_page_wifi_init (NmtPageWifi *wifi)
+{
+}
+
+static NmtNewtPopupEntry wifi_mode[] = {
+ { NC_("Wi-Fi", "Client"), NM_SETTING_WIRELESS_MODE_INFRA },
+ { N_("Access Point"), NM_SETTING_WIRELESS_MODE_AP },
+ { N_("Ad-Hoc Network"), NM_SETTING_WIRELESS_MODE_ADHOC },
+ { NULL, NULL }
+};
+
+static NmtNewtPopupEntry wifi_band[] = {
+ { NC_("Wi-Fi", "Automatic"), NULL },
+ /* 802.11a Wi-Fi network */
+ { N_("A (5 GHz)"), "a" },
+ /* 802.11b / 802.11g Wi-Fi network */
+ { N_("B/G (2.4 GHz)"), "bg" },
+ { NULL, NULL }
+};
+
+static NmtNewtPopupEntry wifi_security[] = {
+ { NC_("Wi-Fi security", "None"), "none" },
+ { N_("WPA & WPA2 Personal"), "wpa-personal" },
+ { N_("WPA & WPA2 Enterprise"), "wpa-enterprise" },
+ { N_("WEP 40/128-bit Key (Hex or ASCII)"), "wep-key" },
+ { N_("WEP 128-bit Passphrase"), "wep-passphrase" },
+ { N_("Dynamic WEP (802.1x)"), "dynamic-wep" },
+ { N_("LEAP"), "leap" },
+ { NULL, NULL }
+};
+
+static NmtNewtPopupEntry wep_index[] = {
+ { NC_("WEP key index", "1 (Default)"), "1" },
+ { NC_("WEP key index", "2"), "2" },
+ { NC_("WEP key index", "3"), "3" },
+ { NC_("WEP key index", "4"), "4" },
+ { NULL, NULL }
+};
+
+static NmtNewtPopupEntry wep_auth[] = {
+ { N_("Open System"), "open" },
+ { N_("Shared Key"), "shared" },
+ { NULL, NULL }
+};
+
+static gboolean
+mode_transform_to_band_visibility (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ if (!g_strcmp0 (g_value_get_string (source_value), NM_SETTING_WIRELESS_MODE_INFRA))
+ g_value_set_boolean (target_value, FALSE);
+ else
+ g_value_set_boolean (target_value, TRUE);
+ return TRUE;
+}
+
+static gboolean
+band_transform_to_channel_visibility (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ g_value_set_boolean (target_value, g_value_get_string (source_value) != NULL);
+ return TRUE;
+}
+
+static gboolean
+ssid_transform_to_entry (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GByteArray *ssid;
+ char *utf8;
+
+ ssid = g_value_get_boxed (source_value);
+ utf8 = nm_utils_ssid_to_utf8 (ssid);
+ g_value_take_string (target_value, utf8);
+ return TRUE;
+}
+
+static gboolean
+ssid_transform_from_entry (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMSettingWireless *s_wireless = user_data;
+ const char *text;
+ const GByteArray *old_ssid;
+ GByteArray *ssid;
+ char *utf8;
+
+ text = g_value_get_string (source_value);
+
+ old_ssid = nm_setting_wireless_get_ssid (s_wireless);
+ utf8 = nm_utils_ssid_to_utf8 (old_ssid);
+
+ if (!g_strcmp0 (text, utf8)) {
+ g_free (utf8);
+ return FALSE;
+ }
+ g_free (utf8);
+
+ ssid = g_byte_array_new ();
+ g_byte_array_append (ssid, (guint8 *)text, strlen (text));
+ g_value_take_boxed (target_value, ssid);
+ return TRUE;
+}
+
+static void
+nmt_page_wifi_constructed (GObject *object)
+{
+ NmtPageWifiPrivate *priv = NMT_PAGE_WIFI_GET_PRIVATE (object);
+ NmtPageWifi *wifi = NMT_PAGE_WIFI (object);
+ NmtDeviceEntry *deventry;
+ NmtPageGrid *grid;
+ NMSettingWireless *s_wireless;
+ NMSettingWirelessSecurity *s_wsec;
+ NmtNewtWidget *widget, *hbox, *subgrid;
+ NmtNewtWidget *mode, *band, *security, *entry;
+ NmtNewtStack *stack;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (wifi));
+ s_wireless = nm_connection_get_setting_wireless (conn);
+ if (!s_wireless) {
+ nm_connection_add_setting (conn, nm_setting_wireless_new ());
+ s_wireless = nm_connection_get_setting_wireless (conn);
+ }
+
+ s_wsec = nm_connection_get_setting_wireless_security (conn);
+ if (!s_wsec) {
+ /* It makes things simpler if we always have a
+ * NMSettingWirelessSecurity; we'll hold a ref on one, and add
+ * it to and remove it from the connection as needed.
+ */
+ s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_new ());
+ }
+ priv->s_wsec = g_object_ref_sink (s_wsec);
+
+ deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ g_object_bind_property (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS,
+ deventry, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ grid = NMT_PAGE_GRID (wifi);
+
+ widget = nmt_newt_entry_new (40, NMT_NEWT_ENTRY_NONEMPTY);
+ g_object_bind_property_full (s_wireless, NM_SETTING_WIRELESS_SSID,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
+ ssid_transform_to_entry,
+ ssid_transform_from_entry,
+ s_wireless, NULL);
+ nmt_page_grid_append (grid, _("SSID"), widget, NULL);
+
+ widget = nmt_newt_popup_new (wifi_mode);
+ g_object_bind_property (s_wireless, NM_SETTING_WIRELESS_MODE,
+ widget, "active-id",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Mode"), widget, NULL);
+ mode = widget;
+
+ hbox = nmt_newt_grid_new ();
+ widget = nmt_newt_popup_new (wifi_band);
+ g_object_bind_property (s_wireless, NM_SETTING_WIRELESS_BAND,
+ widget, "active-id",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (NMT_NEWT_GRID (hbox), widget, 0, 0);
+ band = widget;
+
+ widget = nmt_newt_entry_numeric_new (10, 0, 255);
+ g_object_bind_property (s_wireless, NM_SETTING_WIRELESS_CHANNEL,
+ widget, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (NMT_NEWT_GRID (hbox), widget, 1, 0);
+ nmt_newt_widget_set_padding (widget, 1, 0, 0, 0);
+
+ g_object_bind_property_full (band, "active-id", widget, "visible",
+ G_BINDING_SYNC_CREATE,
+ band_transform_to_channel_visibility,
+ NULL, NULL, NULL);
+ g_object_bind_property_full (mode, "active-id", hbox, "visible",
+ G_BINDING_SYNC_CREATE,
+ mode_transform_to_band_visibility,
+ NULL, NULL, NULL);
+ nmt_page_grid_append (grid, _("Channel"), hbox, NULL);
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = nmt_newt_popup_new (wifi_security);
+ nmt_page_grid_append (grid, _("Security"), widget, NULL);
+ security = widget;
+
+ widget = nmt_newt_stack_new ();
+ stack = NMT_NEWT_STACK (widget);
+
+ /* none */
+ subgrid = nmt_page_grid_new ();
+ nmt_newt_stack_add (stack, "none", subgrid);
+
+ /* wpa-personal */
+ subgrid = nmt_page_grid_new ();
+ widget = nmt_password_fields_new (40, NMT_PASSWORD_FIELDS_SHOW_PASSWORD);
+ g_object_bind_property (s_wsec, NM_SETTING_WIRELESS_SECURITY_PSK,
+ widget, "password",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Password"), widget, NULL);
+ nmt_newt_stack_add (stack, "wpa-personal", subgrid);
+
+ /* "wpa-enterprise" */
+ // FIXME
+ widget = nmt_newt_label_new (_("(No support for wpa-enterprise yet...)"));
+ nmt_newt_stack_add (stack, "wpa-enterprise", widget);
+
+ /* wep-key */
+ subgrid = nmt_page_grid_new ();
+
+ widget = entry = nmt_password_fields_new (40, NMT_PASSWORD_FIELDS_SHOW_PASSWORD);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Key"), widget, NULL);
+
+ widget = nmt_newt_popup_new (wep_index);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("WEP index"), widget, NULL);
+
+ nm_editor_bind_wireless_security_wep_key (s_wsec,
+ entry, "password",
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ widget = nmt_newt_popup_new (wep_auth);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Authentication"), widget, NULL);
+
+ nmt_newt_stack_add (stack, "wep-key", subgrid);
+
+ /* wep-passphrase */
+ subgrid = nmt_page_grid_new ();
+
+ widget = entry = nmt_password_fields_new (40, NMT_PASSWORD_FIELDS_SHOW_PASSWORD);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Password"), widget, NULL);
+
+ widget = nmt_newt_popup_new (wep_index);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("WEP index"), widget, NULL);
+
+ nm_editor_bind_wireless_security_wep_key (s_wsec,
+ entry, "password",
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ widget = nmt_newt_popup_new (wep_auth);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Authentication"), widget, NULL);
+
+ nmt_newt_stack_add (stack, "wep-passphrase", subgrid);
+
+ /* "dynamic-wep" */
+ // FIXME
+ widget = nmt_newt_label_new (_("(No support for dynamic-wep yet...)"));
+ nmt_newt_stack_add (stack, "dynamic-wep", widget);
+
+ /* leap */
+ subgrid = nmt_page_grid_new ();
+
+ widget = nmt_newt_entry_new (40, NMT_NEWT_ENTRY_NONEMPTY);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Username"), widget, NULL);
+
+ widget = nmt_password_fields_new (40, NMT_PASSWORD_FIELDS_SHOW_PASSWORD);
+ g_object_bind_property (s_wsec, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD,
+ widget, "password",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Password"), widget, NULL);
+
+ nmt_newt_stack_add (stack, "leap", subgrid);
+
+ nmt_page_grid_append (grid, NULL, NMT_NEWT_WIDGET (stack), NULL);
+ g_object_bind_property (security, "active-id",
+ stack, "active-id",
+ G_BINDING_SYNC_CREATE);
+ nm_editor_bind_wireless_security_method (conn, s_wsec, security, "active-id",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+ nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = nmt_mac_entry_new (40, ETH_ALEN);
+ g_object_bind_property (s_wireless, NM_SETTING_WIRELESS_BSSID,
+ widget, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("BSSID"), widget, NULL);
+
+ widget = nmt_mac_entry_new (40, ETH_ALEN);
+ g_object_bind_property (s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
+ widget, "mac-address",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("Cloned MAC address"), widget, NULL);
+
+ widget = nmt_mtu_entry_new ();
+ g_object_bind_property (s_wireless, NM_SETTING_WIRELESS_MTU,
+ widget, "mtu",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_page_grid_append (grid, _("MTU"), widget, NULL);
+
+ G_OBJECT_CLASS (nmt_page_wifi_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_wifi_finalize (GObject *object)
+{
+ NmtPageWifiPrivate *priv = NMT_PAGE_WIFI_GET_PRIVATE (object);
+
+ g_clear_object (&priv->s_wsec);
+
+ G_OBJECT_CLASS (nmt_page_wifi_parent_class)->constructed (object);
+}
+
+
+static void
+nmt_page_wifi_class_init (NmtPageWifiClass *wifi_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (wifi_class);
+
+ g_type_class_add_private (wifi_class, sizeof (NmtPageWifiPrivate));
+
+ object_class->constructed = nmt_page_wifi_constructed;
+ object_class->finalize = nmt_page_wifi_finalize;
+}
diff --git a/tui/nmt-page-wifi.h b/tui/nmt-page-wifi.h
new file mode 100644
index 000000000..06cb2a980
--- /dev/null
+++ b/tui/nmt-page-wifi.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_WIFI_H
+#define NMT_PAGE_WIFI_H
+
+#include "nmt-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_WIFI (nmt_page_wifi_get_type ())
+#define NMT_PAGE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_WIFI, NmtPageWifi))
+#define NMT_PAGE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_WIFI, NmtPageWifiClass))
+#define NMT_IS_PAGE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_WIFI))
+#define NMT_IS_PAGE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_WIFI))
+#define NMT_PAGE_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_WIFI, NmtPageWifiClass))
+
+typedef struct {
+ NmtPageDevice parent;
+
+} NmtPageWifi;
+
+typedef struct {
+ NmtPageDeviceClass parent;
+
+} NmtPageWifiClass;
+
+GType nmt_page_wifi_get_type (void);
+
+NmtNewtWidget *nmt_page_wifi_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_WIFI_H */
diff --git a/tui/nmt-password-dialog.c b/tui/nmt-password-dialog.c
new file mode 100644
index 000000000..6d52c75ab
--- /dev/null
+++ b/tui/nmt-password-dialog.c
@@ -0,0 +1,343 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-password-dialog
+ * @short_description: A password dialog
+ *
+ * #NmtPasswordDialog is the password dialog used to get connection
+ * secrets when activating a connection.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-password-dialog.h"
+#include "nmt-secret-agent.h"
+#include "nmtui.h"
+
+G_DEFINE_TYPE (NmtPasswordDialog, nmt_password_dialog, NMT_TYPE_NEWT_FORM)
+
+#define NMT_PASSWORD_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PASSWORD_DIALOG, NmtPasswordDialogPrivate))
+
+typedef struct {
+ char *request_id;
+ char *prompt;
+ GPtrArray *secrets;
+ GPtrArray *entries;
+
+ NmtNewtWidget *ok, *cancel;
+ NmtNewtWidget *last_entry;
+ NmtNewtWidget *secret_grid;
+
+ gboolean succeeded;
+} NmtPasswordDialogPrivate;
+
+enum {
+ PROP_0,
+ PROP_REQUEST_ID,
+ PROP_PROMPT,
+ PROP_SECRETS,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_password_dialog_new:
+ * @request_id: the request ID from the #NmtSecretAgent
+ * @title: the dialog title
+ * @prompt: the prompt text to display
+ * @secrets: (element-type #NmtSecretAgentSecret): the secrets requested
+ *
+ * Creates a new #NmtPasswordDialog to request passwords from
+ * the user.
+ *
+ * Returns: a new #NmtPasswordDialog.
+ */
+NmtNewtForm *
+nmt_password_dialog_new (const char *request_id,
+ const char *title,
+ const char *prompt,
+ GPtrArray *secrets)
+{
+ return g_object_new (NMT_TYPE_PASSWORD_DIALOG,
+ "request-id", request_id,
+ "title", title,
+ "prompt", prompt,
+ "secrets", secrets,
+ "escape-exits", TRUE,
+ NULL);
+}
+
+static void
+nmt_password_dialog_init (NmtPasswordDialog *dialog)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ priv->entries = g_ptr_array_new ();
+}
+
+static void
+maybe_save_input_and_exit (NmtNewtWidget *widget,
+ gpointer dialog,
+ newtComponent co)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+ int i;
+
+ /* This gets invoked when the user types Return in the final entry,
+ * but the form may not be fully valid in that case.
+ */
+ if (!nmt_newt_widget_get_valid (priv->secret_grid))
+ return;
+
+ priv->succeeded = TRUE;
+
+ for (i = 0; i < priv->secrets->len; i++) {
+ NmtSecretAgentSecret *secret = priv->secrets->pdata[i];
+
+ g_free (secret->value);
+ g_object_get (priv->entries->pdata[i], "text", &secret->value, NULL);
+ }
+
+ nmt_newt_form_quit (nmt_newt_widget_get_form (widget));
+}
+
+static void
+nmt_password_dialog_constructed (GObject *object)
+{
+ NmtPasswordDialog *dialog = NMT_PASSWORD_DIALOG (object);
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+ NmtNewtWidget *widget;
+ NmtNewtGrid *grid, *secret_grid;
+ NmtNewtButtonBox *bbox;
+ int i;
+
+ widget = nmt_newt_grid_new ();
+ nmt_newt_form_set_content (NMT_NEWT_FORM (dialog), widget);
+ grid = NMT_NEWT_GRID (widget);
+
+ widget = nmt_newt_textbox_new (0, 60);
+ nmt_newt_textbox_set_text (NMT_NEWT_TEXTBOX (widget), priv->prompt);
+ nmt_newt_grid_add (grid, widget, 0, 0);
+
+ widget = nmt_newt_grid_new ();
+ nmt_newt_grid_add (grid, widget, 0, 1);
+ nmt_newt_widget_set_padding (widget, 0, 1, 0, 1);
+ priv->secret_grid = widget;
+ secret_grid = NMT_NEWT_GRID (widget);
+
+ for (i = 0; i < priv->secrets->len; i++) {
+ NmtSecretAgentSecret *secret = priv->secrets->pdata[i];
+ NmtNewtEntryFlags flags;
+
+ widget = nmt_newt_label_new (secret->name);
+ nmt_newt_grid_add (secret_grid, widget, 0, i);
+ nmt_newt_widget_set_padding (widget, 4, 0, 1, 0);
+
+ flags = NMT_NEWT_ENTRY_NONEMPTY;
+ if (secret->password)
+ flags |= NMT_NEWT_ENTRY_PASSWORD;
+ widget = nmt_newt_entry_new (30, flags);
+ nmt_newt_grid_add (secret_grid, widget, 1, i);
+ g_ptr_array_add (priv->entries, widget);
+
+ if (i == priv->secrets->len - 1) {
+ priv->last_entry = widget;
+ g_signal_connect (widget, "activated",
+ G_CALLBACK (maybe_save_input_and_exit), dialog);
+ }
+ }
+
+ widget = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_HORIZONTAL);
+ nmt_newt_grid_add (grid, widget, 0, 2);
+ bbox = NMT_NEWT_BUTTON_BOX (widget);
+
+ priv->cancel = nmt_newt_button_box_add_end (NMT_NEWT_BUTTON_BOX (bbox), _("Cancel"));
+ nmt_newt_widget_set_exit_on_activate (priv->cancel, TRUE);
+
+ priv->ok = nmt_newt_button_box_add_end (NMT_NEWT_BUTTON_BOX (bbox), _("OK"));
+ g_signal_connect (priv->ok, "activated",
+ G_CALLBACK (maybe_save_input_and_exit), dialog);
+ g_object_bind_property (priv->secret_grid, "valid",
+ priv->ok, "sensitive",
+ G_BINDING_SYNC_CREATE);
+
+ G_OBJECT_CLASS (nmt_password_dialog_parent_class)->constructed (object);
+}
+
+static void
+nmt_password_dialog_finalize (GObject *object)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (object);
+
+ g_free (priv->request_id);
+ g_free (priv->prompt);
+ g_clear_pointer (&priv->entries, g_ptr_array_unref);
+ g_clear_pointer (&priv->secrets, g_ptr_array_unref);
+
+ G_OBJECT_CLASS (nmt_password_dialog_parent_class)->finalize (object);
+}
+
+static void
+nmt_password_dialog_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_REQUEST_ID:
+ priv->request_id = g_value_dup_string (value);
+ break;
+ case PROP_PROMPT:
+ priv->prompt = g_value_dup_string (value);
+ break;
+ case PROP_SECRETS:
+ priv->secrets = g_value_dup_boxed (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_password_dialog_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_REQUEST_ID:
+ g_value_set_string (value, priv->request_id);
+ break;
+ case PROP_PROMPT:
+ g_value_set_string (value, priv->prompt);
+ break;
+ case PROP_SECRETS:
+ g_value_set_boxed (value, priv->secrets);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_password_dialog_class_init (NmtPasswordDialogClass *dialog_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (dialog_class);
+
+ g_type_class_add_private (dialog_class, sizeof (NmtPasswordDialogPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_password_dialog_constructed;
+ object_class->set_property = nmt_password_dialog_set_property;
+ object_class->get_property = nmt_password_dialog_get_property;
+ object_class->finalize = nmt_password_dialog_finalize;
+
+ /**
+ * NmtPasswordDialog:request-id:
+ *
+ * The request ID from the #NmtSecretAgent
+ */
+ g_object_class_install_property (object_class, PROP_REQUEST_ID,
+ g_param_spec_string ("request-id", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtPasswordDialog:prompt:
+ *
+ * The prompt text.
+ */
+ g_object_class_install_property (object_class, PROP_PROMPT,
+ g_param_spec_string ("prompt", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtPasswordDialog:secrets:
+ *
+ * The array of request secrets
+ *
+ * Element-Type: #NmtSecretAgentSecret.
+ */
+ g_object_class_install_property (object_class, PROP_SECRETS,
+ g_param_spec_boxed ("secrets", "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * nmt_password_dialog_succeeded:
+ * @dialog: the #NmtPasswordDialog
+ *
+ * After the dialog has exited, returns %TRUE if the user clicked
+ * "OK", %FALSE if "Cancel".
+ *
+ * Returns: whether the dialog succeeded.
+ */
+gboolean
+nmt_password_dialog_succeeded (NmtPasswordDialog *dialog)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ return priv->succeeded;
+}
+
+/**
+ * nmt_password_dialog_get_request_id:
+ * @dialog: the #NmtPasswordDialog
+ *
+ * Gets the dialog's request ID.
+ *
+ * Returns: the dialog's request ID.
+ */
+const char *
+nmt_password_dialog_get_request_id (NmtPasswordDialog *dialog)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ return priv->request_id;
+}
+
+/**
+ * nmt_password_dialog_get_secrets:
+ * @dialog: the #NmtPasswordDialog
+ *
+ * Gets the dialog's secrets array.
+ *
+ * Returns: (transfer none): the dialog's secrets array.
+ */
+GPtrArray *
+nmt_password_dialog_get_secrets (NmtPasswordDialog *dialog)
+{
+ NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ return priv->secrets;
+}
diff --git a/tui/nmt-password-dialog.h b/tui/nmt-password-dialog.h
new file mode 100644
index 000000000..36c9f51e1
--- /dev/null
+++ b/tui/nmt-password-dialog.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PASSWORD_DIALOG_H
+#define NMT_PASSWORD_DIALOG_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PASSWORD_DIALOG (nmt_password_dialog_get_type ())
+#define NMT_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PASSWORD_DIALOG, NmtPasswordDialog))
+#define NMT_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PASSWORD_DIALOG, NmtPasswordDialogClass))
+#define NMT_IS_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PASSWORD_DIALOG))
+#define NMT_IS_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PASSWORD_DIALOG))
+#define NMT_PASSWORD_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PASSWORD_DIALOG, NmtPasswordDialogClass))
+
+typedef struct {
+ NmtNewtForm parent;
+
+} NmtPasswordDialog;
+
+typedef struct {
+ NmtNewtFormClass parent;
+
+} NmtPasswordDialogClass;
+
+GType nmt_password_dialog_get_type (void);
+
+NmtNewtForm *nmt_password_dialog_new (const char *request_id,
+ const char *title,
+ const char *prompt,
+ GPtrArray *secrets);
+
+gboolean nmt_password_dialog_succeeded (NmtPasswordDialog *dialog);
+
+const char *nmt_password_dialog_get_request_id (NmtPasswordDialog *dialog);
+GPtrArray *nmt_password_dialog_get_secrets (NmtPasswordDialog *dialog);
+
+G_END_DECLS
+
+#endif /* NMT_PASSWORD_DIALOG_H */
diff --git a/tui/nmt-password-fields.c b/tui/nmt-password-fields.c
new file mode 100644
index 000000000..ec8b52182
--- /dev/null
+++ b/tui/nmt-password-fields.c
@@ -0,0 +1,310 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-password-fields
+ * @short_description: Widgets for password-related data
+ *
+ * #NmtPasswordFields provides an entry to type a password into, followed
+ * optionally by an "Ask for this password every time" checkbox and/or a
+ * "Show password" checkbox that toggles whether the password is visible.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-password-fields.h"
+
+G_DEFINE_TYPE (NmtPasswordFields, nmt_password_fields, NMT_TYPE_NEWT_GRID)
+
+#define NMT_PASSWORD_FIELDS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PASSWORD_FIELDS, NmtPasswordFieldsPrivate))
+
+typedef struct {
+ NmtPasswordFieldsExtras extras;
+
+ NmtNewtEntry *entry;
+ NmtNewtCheckbox *always_ask;
+ NmtNewtCheckbox *show_password;
+
+ char *init_password;
+
+} NmtPasswordFieldsPrivate;
+
+enum {
+ PROP_0,
+ PROP_WIDTH,
+ PROP_EXTRAS,
+ PROP_PASSWORD,
+ PROP_ALWAYS_ASK,
+ PROP_SHOW_PASSWORD,
+
+ LAST_PROP
+};
+
+/**
+ * NmtPasswordFieldsExtras:
+ * @NMT_PASSWORD_FIELDS_ALWAYS_ASK: show an "Always ask" checkbox
+ * @NMT_PASSWORD_FIELDS_SHOW_PASSWORD: show a "Show password" checkbox
+ *
+ * Extra widgets to include in an #NmtPasswordFields
+ */
+
+/**
+ * nmt_password_fields_new:
+ * @width: width in characters of the password entry
+ * @extras: extra widgets to show
+ *
+ * Creates a new #NmtPasswordFields
+ *
+ * Returns: a new #NmtPasswordFields
+ */
+NmtNewtWidget *
+nmt_password_fields_new (int width,
+ NmtPasswordFieldsExtras extras)
+{
+ return g_object_new (NMT_TYPE_PASSWORD_FIELDS,
+ "width", width,
+ "extras", extras,
+ NULL);
+}
+
+static void
+nmt_password_fields_set_password (NmtPasswordFields *fields,
+ const char *password)
+{
+ NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE (fields);
+
+ if (!g_strcmp0 (password, nmt_newt_entry_get_text (priv->entry)))
+ return;
+
+ nmt_newt_entry_set_text (priv->entry, password);
+ g_object_notify (G_OBJECT (fields), "password");
+}
+
+static const char *
+nmt_password_fields_get_password (NmtPasswordFields *fields)
+{
+ NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE (fields);
+
+ return nmt_newt_entry_get_text (priv->entry);
+}
+
+static void
+always_ask_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer fields)
+{
+ g_object_notify (fields, "always-ask");
+}
+
+static void
+show_password_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer fields)
+{
+ g_object_notify (fields, "show-password");
+}
+
+static void
+nmt_password_fields_init (NmtPasswordFields *fields)
+{
+ NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE (fields);
+
+ priv->entry = NMT_NEWT_ENTRY (nmt_newt_entry_new (-1, 0));
+ priv->always_ask = NMT_NEWT_CHECKBOX (nmt_newt_checkbox_new (_("Ask for this password every time")));
+ priv->show_password = NMT_NEWT_CHECKBOX (nmt_newt_checkbox_new (_("Show password")));
+}
+
+static void
+nmt_password_fields_constructed (GObject *object)
+{
+ NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE (object);
+ NmtNewtGrid *grid = NMT_NEWT_GRID (object);
+
+ nmt_newt_grid_add (grid, NMT_NEWT_WIDGET (priv->entry), 0, 0);
+
+ if (priv->extras & NMT_PASSWORD_FIELDS_ALWAYS_ASK) {
+ nmt_newt_grid_add (grid, NMT_NEWT_WIDGET (priv->always_ask), 0, 1);
+ g_signal_connect (priv->always_ask, "notify::active",
+ G_CALLBACK (always_ask_changed), object);
+ } else
+ g_clear_object (&priv->always_ask);
+
+ if (priv->extras & NMT_PASSWORD_FIELDS_SHOW_PASSWORD) {
+ nmt_newt_grid_add (grid, NMT_NEWT_WIDGET (priv->show_password), 0, 2);
+ g_signal_connect (priv->show_password, "notify::active",
+ G_CALLBACK (show_password_changed), object);
+ g_object_bind_property (priv->show_password, "active",
+ priv->entry, "password",
+ G_BINDING_INVERT_BOOLEAN | G_BINDING_SYNC_CREATE);
+ } else
+ g_clear_object (&priv->show_password);
+
+ G_OBJECT_CLASS (nmt_password_fields_parent_class)->constructed (object);
+}
+
+static void
+nmt_password_fields_finalize (GObject *object)
+{
+ NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE (object);
+
+ if (priv->always_ask) {
+ g_signal_handlers_disconnect_by_func (priv->always_ask,
+ G_CALLBACK (always_ask_changed), object);
+ }
+ if (priv->show_password) {
+ g_signal_handlers_disconnect_by_func (priv->show_password,
+ G_CALLBACK (show_password_changed), object);
+ }
+
+ G_OBJECT_CLASS (nmt_password_fields_parent_class)->finalize (object);
+}
+
+static void
+nmt_password_fields_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPasswordFields *fields = NMT_PASSWORD_FIELDS (object);
+ NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE (fields);
+
+ switch (prop_id) {
+ case PROP_WIDTH:
+ nmt_newt_entry_set_width (priv->entry, g_value_get_int (value));
+ break;
+ case PROP_EXTRAS:
+ priv->extras = g_value_get_uint (value);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (fields));
+ break;
+ case PROP_PASSWORD:
+ nmt_password_fields_set_password (fields, g_value_get_string (value));
+ break;
+ case PROP_ALWAYS_ASK:
+ if (priv->always_ask)
+ nmt_newt_checkbox_set_active (priv->always_ask, g_value_get_boolean (value));
+ break;
+ case PROP_SHOW_PASSWORD:
+ if (priv->show_password)
+ nmt_newt_checkbox_set_active (priv->show_password, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_password_fields_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtPasswordFields *entry = NMT_PASSWORD_FIELDS (object);
+ NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE (entry);
+
+ switch (prop_id) {
+ case PROP_WIDTH:
+ g_value_set_int (value, nmt_newt_entry_get_width (priv->entry));
+ break;
+ case PROP_EXTRAS:
+ g_value_set_uint (value, priv->extras);
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string (value, nmt_password_fields_get_password (entry));
+ break;
+ case PROP_ALWAYS_ASK:
+ if (priv->always_ask)
+ g_value_set_boolean (value, nmt_newt_checkbox_get_active (priv->always_ask));
+ break;
+ case PROP_SHOW_PASSWORD:
+ if (priv->show_password)
+ g_value_set_boolean (value, nmt_newt_checkbox_get_active (priv->show_password));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_password_fields_class_init (NmtPasswordFieldsClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtPasswordFieldsPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_password_fields_constructed;
+ object_class->set_property = nmt_password_fields_set_property;
+ object_class->get_property = nmt_password_fields_get_property;
+ object_class->finalize = nmt_password_fields_finalize;
+
+ /**
+ * NmtPasswordFields:width:
+ *
+ * The width in characters of the password entry
+ */
+ g_object_class_install_property (object_class, PROP_WIDTH,
+ g_param_spec_int ("width", "", "",
+ -1, 80, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtPasswordFields:extras:
+ *
+ * The extra widgets to show
+ */
+ g_object_class_install_property (object_class, PROP_EXTRAS,
+ g_param_spec_uint ("extras", "", "",
+ 0, 0xFFFF, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtPasswordFields:password:
+ *
+ * The entered password.
+ */
+ g_object_class_install_property (object_class, PROP_PASSWORD,
+ g_param_spec_string ("password", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtPasswordFields:always-ask:
+ *
+ * The current state of the "Always ask" checkbox.
+ */
+ g_object_class_install_property (object_class, PROP_ALWAYS_ASK,
+ g_param_spec_boolean ("always-ask", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtPasswordFields:show-password:
+ *
+ * The current state of the "Show password" checkbox.
+ */
+ g_object_class_install_property (object_class, PROP_SHOW_PASSWORD,
+ g_param_spec_boolean ("show-password", "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-password-fields.h b/tui/nmt-password-fields.h
new file mode 100644
index 000000000..2ef830aa2
--- /dev/null
+++ b/tui/nmt-password-fields.h
@@ -0,0 +1,55 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_PASSWORD_FIELDS_H
+#define NMT_PASSWORD_FIELDS_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PASSWORD_FIELDS (nmt_password_fields_get_type ())
+#define NMT_PASSWORD_FIELDS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PASSWORD_FIELDS, NmtPasswordFields))
+#define NMT_PASSWORD_FIELDS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PASSWORD_FIELDS, NmtPasswordFieldsClass))
+#define NMT_IS_PASSWORD_FIELDS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PASSWORD_FIELDS))
+#define NMT_IS_PASSWORD_FIELDS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PASSWORD_FIELDS))
+#define NMT_PASSWORD_FIELDS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PASSWORD_FIELDS, NmtPasswordFieldsClass))
+
+typedef struct {
+ NmtNewtGrid parent;
+
+} NmtPasswordFields;
+
+typedef struct {
+ NmtNewtGridClass parent;
+
+} NmtPasswordFieldsClass;
+
+GType nmt_password_fields_get_type (void);
+
+typedef enum {
+ NMT_PASSWORD_FIELDS_ALWAYS_ASK = (1 << 0),
+ NMT_PASSWORD_FIELDS_SHOW_PASSWORD = (1 << 1),
+} NmtPasswordFieldsExtras;
+
+NmtNewtWidget *nmt_password_fields_new (int width,
+ NmtPasswordFieldsExtras extras);
+
+G_END_DECLS
+
+#endif /* NMT_PASSWORD_FIELDS_H */
diff --git a/tui/nmt-route-editor.c b/tui/nmt-route-editor.c
new file mode 100644
index 000000000..053cdb027
--- /dev/null
+++ b/tui/nmt-route-editor.c
@@ -0,0 +1,219 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-route-editor
+ * @short_description: Route editing dialog
+ *
+ * #NmtRouteEditor implements a form for editing IPv4 or IPv6 routes.
+ * This was implemented as a separate dialog because it seemed too
+ * wide to fit into the main window.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-route-editor.h"
+#include "nmt-route-table.h"
+
+G_DEFINE_TYPE (NmtRouteEditor, nmt_route_editor, NMT_TYPE_NEWT_FORM)
+
+#define NMT_ROUTE_EDITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_ROUTE_EDITOR, NmtRouteEditorPrivate))
+
+typedef struct {
+ NMSetting *orig_setting;
+ NMSetting *edit_setting;
+
+} NmtRouteEditorPrivate;
+
+enum {
+ PROP_0,
+ PROP_SETTING,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_route_editor_new:
+ * @setting: the #NMSettingIP4Config or #NMSettingIP6Config to edit
+ *
+ * Creates a new #NmtRouteEditor to edit the routes in @setting
+ *
+ * Returns: a new #NmtRouteEditor
+ */
+NmtNewtForm *
+nmt_route_editor_new (NMSetting *setting)
+{
+ return g_object_new (NMT_TYPE_ROUTE_EDITOR,
+ "setting", setting,
+ NULL);
+}
+
+static void
+nmt_route_editor_init (NmtRouteEditor *entry)
+{
+}
+
+static void
+save_routes_and_exit (NmtNewtButton *button,
+ gpointer user_data)
+{
+ NmtRouteEditor *editor = user_data;
+ NmtRouteEditorPrivate *priv = NMT_ROUTE_EDITOR_GET_PRIVATE (editor);
+ const char *property;
+ GBinding *binding;
+
+ if (NM_IS_SETTING_IP4_CONFIG (priv->edit_setting))
+ property = NM_SETTING_IP4_CONFIG_ROUTES;
+ else
+ property = NM_SETTING_IP6_CONFIG_ROUTES;
+
+ /* Because of the complicated dbus-glib GTypes, it's easier to cheat
+ * and use GBinding to do this than it is to copy the value by hand.
+ */
+ binding = g_object_bind_property (priv->edit_setting, property,
+ priv->orig_setting, property,
+ G_BINDING_SYNC_CREATE);
+ g_object_unref (binding);
+
+ nmt_newt_form_quit (NMT_NEWT_FORM (editor));
+}
+
+static void
+nmt_route_editor_constructed (GObject *object)
+{
+ NmtRouteEditor *editor = NMT_ROUTE_EDITOR (object);
+ NmtRouteEditorPrivate *priv = NMT_ROUTE_EDITOR_GET_PRIVATE (editor);
+ NmtNewtWidget *vbox, *routes, *buttons, *ok, *cancel;
+
+ if (G_OBJECT_CLASS (nmt_route_editor_parent_class)->constructed)
+ G_OBJECT_CLASS (nmt_route_editor_parent_class)->constructed (object);
+
+ if (NM_IS_SETTING_IP4_CONFIG (priv->edit_setting)) {
+ routes = nmt_route_table_new (AF_INET);
+ g_object_bind_property (priv->edit_setting, NM_SETTING_IP4_CONFIG_ROUTES,
+ routes, "ip4-routes",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ } else {
+ routes = nmt_route_table_new (AF_INET6);
+ g_object_bind_property (priv->edit_setting, NM_SETTING_IP6_CONFIG_ROUTES,
+ routes, "ip6-routes",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ }
+
+ vbox = nmt_newt_grid_new ();
+ nmt_newt_grid_add (NMT_NEWT_GRID (vbox), routes, 0, 0);
+
+ buttons = nmt_newt_grid_new ();
+ nmt_newt_grid_add (NMT_NEWT_GRID (vbox), buttons, 0, 1);
+ nmt_newt_widget_set_padding (buttons, 0, 1, 0, 0);
+
+ cancel = g_object_ref_sink (nmt_newt_button_new (_("Cancel")));
+ nmt_newt_widget_set_exit_on_activate (cancel, TRUE);
+ nmt_newt_grid_add (NMT_NEWT_GRID (buttons), cancel, 0, 0);
+ nmt_newt_grid_set_flags (NMT_NEWT_GRID (buttons), cancel,
+ NMT_NEWT_GRID_EXPAND_X | NMT_NEWT_GRID_ANCHOR_RIGHT |
+ NMT_NEWT_GRID_FILL_Y);
+
+ ok = g_object_ref_sink (nmt_newt_button_new (_("OK")));
+ g_signal_connect (ok, "clicked", G_CALLBACK (save_routes_and_exit), editor);
+ nmt_newt_grid_add (NMT_NEWT_GRID (buttons), ok, 1, 0);
+ nmt_newt_widget_set_padding (ok, 1, 0, 0, 0);
+ g_object_bind_property (routes, "valid",
+ ok, "sensitive",
+ G_BINDING_SYNC_CREATE);
+
+ nmt_newt_form_set_content (NMT_NEWT_FORM (editor), vbox);
+}
+
+static void
+nmt_route_editor_finalize (GObject *object)
+{
+ NmtRouteEditorPrivate *priv = NMT_ROUTE_EDITOR_GET_PRIVATE (object);
+
+ g_clear_object (&priv->orig_setting);
+ g_clear_object (&priv->edit_setting);
+
+ G_OBJECT_CLASS (nmt_route_editor_parent_class)->finalize (object);
+}
+
+static void
+nmt_route_editor_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtRouteEditorPrivate *priv = NMT_ROUTE_EDITOR_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_SETTING:
+ priv->orig_setting = g_value_dup_object (value);
+ priv->edit_setting = nm_setting_duplicate (priv->orig_setting);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_route_editor_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtRouteEditorPrivate *priv = NMT_ROUTE_EDITOR_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_SETTING:
+ g_value_set_object (value, priv->edit_setting);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_route_editor_class_init (NmtRouteEditorClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtRouteEditorPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_route_editor_constructed;
+ object_class->set_property = nmt_route_editor_set_property;
+ object_class->get_property = nmt_route_editor_get_property;
+ object_class->finalize = nmt_route_editor_finalize;
+
+ /**
+ * NmtRouteEditor:setting:
+ *
+ * The #NMSettingIP4Config or #NMSettingIP6Config whose routes are
+ * being edited.
+ */
+ g_object_class_install_property (object_class, PROP_SETTING,
+ g_param_spec_object ("setting", "", "",
+ NM_TYPE_SETTING,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-route-editor.h b/tui/nmt-route-editor.h
new file mode 100644
index 000000000..e1040dffd
--- /dev/null
+++ b/tui/nmt-route-editor.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_ROUTE_EDITOR_H
+#define NMT_ROUTE_EDITOR_H
+
+#include <nm-connection.h>
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_ROUTE_EDITOR (nmt_route_editor_get_type ())
+#define NMT_ROUTE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_ROUTE_EDITOR, NmtRouteEditor))
+#define NMT_ROUTE_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_ROUTE_EDITOR, NmtRouteEditorClass))
+#define NMT_IS_ROUTE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_ROUTE_EDITOR))
+#define NMT_IS_ROUTE_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_ROUTE_EDITOR))
+#define NMT_ROUTE_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_ROUTE_EDITOR, NmtRouteEditorClass))
+
+typedef struct {
+ NmtNewtForm parent;
+
+} NmtRouteEditor;
+
+typedef struct {
+ NmtNewtFormClass parent;
+
+} NmtRouteEditorClass;
+
+GType nmt_route_editor_get_type (void);
+
+NmtNewtForm *nmt_route_editor_new (NMSetting *setting);
+
+G_END_DECLS
+
+#endif /* NMT_ROUTE_EDITOR_H */
diff --git a/tui/nmt-route-entry.c b/tui/nmt-route-entry.c
new file mode 100644
index 000000000..1b20ca646
--- /dev/null
+++ b/tui/nmt-route-entry.c
@@ -0,0 +1,323 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-route-entry
+ * @short_description: A set of widgets describing a single route.
+ *
+ * #NmtRouteEntry provides a set of three entry widgets, for entering
+ * a network/prefix, a next hop, and a metric.
+ *
+ * This is used as a building block by #NmtRouteTable.
+ */
+
+#include "config.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+
+#include <glib/gi18n-lib.h>
+#include <nm-setting-ip4-config.h>
+#include <nm-setting-ip6-config.h>
+
+#include "nmt-route-entry.h"
+#include "nmt-ip-entry.h"
+
+#include "nm-editor-bindings.h"
+
+G_DEFINE_TYPE (NmtRouteEntry, nmt_route_entry, NMT_TYPE_NEWT_GRID)
+
+#define NMT_ROUTE_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_ROUTE_ENTRY, NmtRouteEntryPrivate))
+
+typedef struct {
+ NmtNewtWidget *dest, *next_hop, *metric;
+
+ int family;
+ int ip_entry_width, metric_entry_width;
+ NMIP4Route *ip4_route;
+ NMIP6Route *ip6_route;
+} NmtRouteEntryPrivate;
+
+enum {
+ PROP_0,
+ PROP_FAMILY,
+ PROP_IP_ENTRY_WIDTH,
+ PROP_METRIC_ENTRY_WIDTH,
+ PROP_IP4_ROUTE,
+ PROP_IP6_ROUTE,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_route_entry_new:
+ * @family: the address family, eg %AF_INET
+ * @ip_entry_width: the width in characters for the IP address entries
+ * @metric_entry_width: the width in characters for the metric entry
+ *
+ * Creates a new #NmtRouteEntry
+ *
+ * Returns: a new #NmtRouteEntry
+ */
+NmtNewtWidget *
+nmt_route_entry_new (int family,
+ int ip_entry_width,
+ int metric_entry_width)
+{
+ return g_object_new (NMT_TYPE_ROUTE_ENTRY,
+ "family", family,
+ "ip-entry-width", ip_entry_width,
+ "metric-entry-width", metric_entry_width,
+ NULL);
+}
+
+static void
+nmt_route_entry_init (NmtRouteEntry *entry)
+{
+}
+
+static gboolean
+entry_validity_transform_to_warning_label (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ if (g_value_get_boolean (source_value))
+ g_value_set_string (target_value, " ");
+ else
+ g_value_set_string (target_value, "!");
+ return TRUE;
+}
+
+static NmtNewtWidget *
+create_warning_label (NmtNewtWidget *entry)
+{
+ NmtNewtWidget *label;
+
+ label = g_object_new (NMT_TYPE_NEWT_LABEL,
+ "highlight", TRUE,
+ NULL);
+ g_object_bind_property_full (entry, "valid",
+ label, "text",
+ G_BINDING_SYNC_CREATE,
+ entry_validity_transform_to_warning_label,
+ NULL, NULL, NULL);
+ return label;
+}
+
+static void
+nmt_route_entry_constructed (GObject *object)
+{
+ NmtRouteEntryPrivate *priv = NMT_ROUTE_ENTRY_GET_PRIVATE (object);
+ NmtNewtGrid *grid = NMT_NEWT_GRID (object);
+ NmtNewtWidget *warning_label;
+
+ priv->dest = nmt_ip_entry_new (priv->ip_entry_width, priv->family, TRUE, FALSE);
+ priv->next_hop = nmt_ip_entry_new (priv->ip_entry_width, priv->family, FALSE, TRUE);
+ priv->metric = nmt_newt_entry_numeric_new (priv->metric_entry_width, 0, 65535);
+
+ nmt_newt_grid_add (grid, priv->dest, 0, 0);
+ warning_label = create_warning_label (priv->dest);
+ nmt_newt_grid_add (grid, warning_label, 1, 0);
+
+ nmt_newt_grid_add (grid, priv->next_hop, 2, 0);
+ nmt_newt_widget_set_padding (priv->next_hop, 1, 0, 0, 0);
+ warning_label = create_warning_label (priv->next_hop);
+ nmt_newt_grid_add (grid, warning_label, 3, 0);
+
+ nmt_newt_grid_add (grid, priv->metric, 4, 0);
+ nmt_newt_widget_set_padding (priv->metric, 1, 0, 0, 0);
+
+ if (priv->family == AF_INET) {
+ nm_editor_bind_ip4_route_to_strings (object, "ip4-route",
+ priv->dest, "text",
+ priv->next_hop, "text",
+ priv->metric, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ } else if (priv->family == AF_INET6) {
+ nm_editor_bind_ip6_route_to_strings (object, "ip6-route",
+ priv->dest, "text",
+ priv->next_hop, "text",
+ priv->metric, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ } else
+ g_assert_not_reached ();
+
+ G_OBJECT_CLASS (nmt_route_entry_parent_class)->constructed (object);
+}
+
+static newtComponent
+nmt_route_entry_get_focus_component (NmtNewtWidget *widget)
+{
+ NmtRouteEntryPrivate *priv = NMT_ROUTE_ENTRY_GET_PRIVATE (widget);
+
+ return nmt_newt_widget_get_focus_component (priv->dest);
+}
+
+static void
+nmt_route_entry_finalize (GObject *object)
+{
+ NmtRouteEntryPrivate *priv = NMT_ROUTE_ENTRY_GET_PRIVATE (object);
+
+ g_clear_pointer (&priv->ip4_route, nm_ip4_route_unref);
+ g_clear_pointer (&priv->ip6_route, nm_ip6_route_unref);
+
+ G_OBJECT_CLASS (nmt_route_entry_parent_class)->finalize (object);
+}
+
+static void
+nmt_route_entry_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtRouteEntryPrivate *priv = NMT_ROUTE_ENTRY_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ priv->family = g_value_get_int (value);
+ break;
+ case PROP_IP_ENTRY_WIDTH:
+ priv->ip_entry_width = g_value_get_int (value);
+ break;
+ case PROP_METRIC_ENTRY_WIDTH:
+ priv->metric_entry_width = g_value_get_int (value);
+ break;
+ case PROP_IP4_ROUTE:
+ g_return_if_fail (priv->family == AF_INET);
+ if (priv->ip4_route)
+ nm_ip4_route_unref (priv->ip4_route);
+ priv->ip4_route = g_value_dup_boxed (value);
+ break;
+ case PROP_IP6_ROUTE:
+ g_return_if_fail (priv->family == AF_INET6);
+ if (priv->ip6_route)
+ nm_ip6_route_unref (priv->ip6_route);
+ priv->ip6_route = g_value_dup_boxed (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_route_entry_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtRouteEntryPrivate *priv = NMT_ROUTE_ENTRY_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ g_value_set_int (value, priv->family);
+ break;
+ case PROP_IP_ENTRY_WIDTH:
+ g_value_set_int (value, priv->ip_entry_width);
+ break;
+ case PROP_METRIC_ENTRY_WIDTH:
+ g_value_set_int (value, priv->metric_entry_width);
+ break;
+ case PROP_IP4_ROUTE:
+ g_return_if_fail (priv->family == AF_INET);
+ g_value_set_boxed (value, priv->ip4_route);
+ break;
+ case PROP_IP6_ROUTE:
+ g_return_if_fail (priv->family == AF_INET6);
+ g_value_set_boxed (value, priv->ip6_route);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_route_entry_class_init (NmtRouteEntryClass *entry_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (entry_class);
+ NmtNewtWidgetClass *widget_class = NMT_NEWT_WIDGET_CLASS (entry_class);
+
+ g_type_class_add_private (entry_class, sizeof (NmtRouteEntryPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_route_entry_constructed;
+ object_class->set_property = nmt_route_entry_set_property;
+ object_class->get_property = nmt_route_entry_get_property;
+ object_class->finalize = nmt_route_entry_finalize;
+
+ widget_class->get_focus_component = nmt_route_entry_get_focus_component;
+
+ /**
+ * NmtRouteEntry:family:
+ *
+ * The address family of the route, eg, %AF_INET
+ */
+ g_object_class_install_property (object_class, PROP_FAMILY,
+ g_param_spec_int ("family", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtRouteEntry:ip-entry-width:
+ *
+ * The width in characters of the IP address entries
+ */
+ g_object_class_install_property (object_class, PROP_IP_ENTRY_WIDTH,
+ g_param_spec_int ("ip-entry-width", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtRouteEntry:metric-entry-width:
+ *
+ * The width in characters of the metric entry
+ */
+ g_object_class_install_property (object_class, PROP_METRIC_ENTRY_WIDTH,
+ g_param_spec_int ("metric-entry-width", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtRouteEntry:ip4-route:
+ *
+ * The contents of the entries, as an #NMIP4Route. Only valid
+ * if #NmtRouteEntry:family is %AF_INET.
+ */
+ g_object_class_install_property (object_class, PROP_IP4_ROUTE,
+ g_param_spec_boxed ("ip4-route", "", "",
+ nm_ip4_route_get_type (),
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtRouteEntry:ip6-route:
+ *
+ * The contents of the entries, as an #NMIP6Route. Only valid
+ * if #NmtRouteEntry:family is %AF_INET6.
+ */
+ g_object_class_install_property (object_class, PROP_IP6_ROUTE,
+ g_param_spec_boxed ("ip6-route", "", "",
+ nm_ip6_route_get_type (),
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-route-entry.h b/tui/nmt-route-entry.h
new file mode 100644
index 000000000..d37b14cd5
--- /dev/null
+++ b/tui/nmt-route-entry.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_ROUTE_ENTRY_H
+#define NMT_ROUTE_ENTRY_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_ROUTE_ENTRY (nmt_route_entry_get_type ())
+#define NMT_ROUTE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_ROUTE_ENTRY, NmtRouteEntry))
+#define NMT_ROUTE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_ROUTE_ENTRY, NmtRouteEntryClass))
+#define NMT_IS_ROUTE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_ROUTE_ENTRY))
+#define NMT_IS_ROUTE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_ROUTE_ENTRY))
+#define NMT_ROUTE_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_ROUTE_ENTRY, NmtRouteEntryClass))
+
+typedef struct {
+ NmtNewtGrid parent;
+
+} NmtRouteEntry;
+
+typedef struct {
+ NmtNewtGridClass parent;
+
+} NmtRouteEntryClass;
+
+GType nmt_route_entry_get_type (void);
+
+NmtNewtWidget *nmt_route_entry_new (int family,
+ int ip_entry_width,
+ int metric_entry_width);
+
+G_END_DECLS
+
+#endif /* NMT_ROUTE_ENTRY_H */
diff --git a/tui/nmt-route-table.c b/tui/nmt-route-table.c
new file mode 100644
index 000000000..d6173a0bc
--- /dev/null
+++ b/tui/nmt-route-table.c
@@ -0,0 +1,395 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-route-table
+ * @short_description: An editable list of IP4 or IP6 routes
+ *
+ * #NmtRouteTable implements a list of #NmtRouteEntry, plus headers,
+ * and buttons to add and remove entries.
+ */
+
+#include "config.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+
+#include <glib/gi18n-lib.h>
+#include <dbus/dbus-glib.h>
+#include <nm-utils.h>
+
+#include "nmt-route-table.h"
+#include "nmt-route-entry.h"
+#include "nmt-widget-list.h"
+
+G_DEFINE_TYPE (NmtRouteTable, nmt_route_table, NMT_TYPE_NEWT_GRID)
+
+#define NMT_ROUTE_TABLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_ROUTE_TABLE, NmtRouteTablePrivate))
+
+typedef struct {
+ int family;
+
+ int ip_entry_width;
+ int metric_entry_width;
+
+ GSList *routes;
+ NmtNewtWidget *list;
+} NmtRouteTablePrivate;
+
+enum {
+ PROP_0,
+ PROP_FAMILY,
+ PROP_IP4_ROUTES,
+ PROP_IP6_ROUTES,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_route_table_new:
+ * @family: the address family, eg %AF_INET
+ *
+ * Creates a new #NmtRouteTable
+ *
+ * Returns: a new #NmtRouteTable
+ */
+NmtNewtWidget *
+nmt_route_table_new (int family)
+{
+ return g_object_new (NMT_TYPE_ROUTE_TABLE,
+ "family", family,
+ NULL);
+}
+
+static gboolean
+route_list_transform_to_route (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NmtRouteTable *table = NMT_ROUTE_TABLE (g_binding_get_source (binding));
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
+ int n = GPOINTER_TO_INT (user_data);
+ gpointer route;
+
+ route = g_slist_nth_data (priv->routes, n);
+ if (route)
+ g_value_set_boxed (target_value, route);
+ return route != NULL;
+}
+
+static gboolean
+route_list_transform_from_route (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NmtRouteTable *table = NMT_ROUTE_TABLE (g_binding_get_source (binding));
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
+ int n = GPOINTER_TO_INT (user_data);
+ GSList *routes, *nth;
+
+ nth = g_slist_nth (priv->routes, n);
+ if (!nth)
+ return FALSE;
+
+ routes = priv->routes;
+ priv->routes = NULL;
+
+ if (nth->data) {
+ if (priv->family == AF_INET)
+ nm_ip4_route_unref (nth->data);
+ else if (priv->family == AF_INET6)
+ nm_ip6_route_unref (nth->data);
+ }
+ nth->data = g_value_dup_boxed (source_value);
+
+ if (priv->family == AF_INET) {
+ nm_utils_ip4_routes_to_gvalue (routes, target_value);
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip4_route_unref);
+ } else if (priv->family == AF_INET6) {
+ nm_utils_ip6_routes_to_gvalue (routes, target_value);
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip6_route_unref);
+ }
+
+ return TRUE;
+}
+
+static NmtNewtWidget *
+create_route_entry (NmtWidgetList *list,
+ int num,
+ gpointer table)
+{
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
+ NmtNewtWidget *entry;
+
+ entry = nmt_route_entry_new (priv->family,
+ priv->ip_entry_width,
+ priv->metric_entry_width);
+
+ if (priv->family == AF_INET) {
+ g_object_bind_property_full (table, "ip4-routes",
+ entry, "ip4-route",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
+ route_list_transform_to_route,
+ route_list_transform_from_route,
+ GINT_TO_POINTER (num), NULL);
+ } else {
+ g_object_bind_property_full (table, "ip6-routes",
+ entry, "ip6-route",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
+ route_list_transform_to_route,
+ route_list_transform_from_route,
+ GINT_TO_POINTER (num), NULL);
+ }
+ return entry;
+}
+
+static void
+add_route (NmtWidgetList *list,
+ gpointer table)
+{
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
+
+ if (priv->family == AF_INET) {
+ NMIP4Route *route;
+
+ route = nm_ip4_route_new ();
+ nm_ip4_route_set_prefix (route, 32);
+ priv->routes = g_slist_append (priv->routes, route);
+ nmt_widget_list_set_length (list, g_slist_length (priv->routes));
+ g_object_notify (table, "ip4-routes");
+ } else {
+ NMIP6Route *route;
+
+ route = nm_ip6_route_new ();
+ nm_ip6_route_set_prefix (route, 128);
+ priv->routes = g_slist_append (priv->routes, route);
+ nmt_widget_list_set_length (list, g_slist_length (priv->routes));
+ g_object_notify (table, "ip6-routes");
+ }
+}
+
+static void
+remove_route (NmtWidgetList *list,
+ int num,
+ gpointer table)
+{
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
+ GSList *nth;
+ gpointer route;
+
+ nth = g_slist_nth (priv->routes, num);
+ if (!nth)
+ return;
+
+ route = nth->data;
+ priv->routes = g_slist_delete_link (priv->routes, nth);
+ nmt_widget_list_set_length (list, g_slist_length (priv->routes));
+
+ if (priv->family == AF_INET) {
+ nm_ip4_route_unref (route);
+ g_object_notify (table, "ip4-routes");
+ } else {
+ nm_ip6_route_unref (route);
+ g_object_notify (table, "ip6-routes");
+ }
+}
+
+static void
+nmt_route_table_init (NmtRouteTable *table)
+{
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
+ NmtNewtWidget *header, *empty;
+ NmtNewtWidget *dest_prefix_label, *next_hop_label, *metric_label;
+ int dest_prefix_width, next_hop_width, metric_width;
+ char *text;
+
+ header = nmt_newt_grid_new ();
+
+ text = g_strdup_printf ("%s/%s", _("Destination"), _("Prefix"));
+ dest_prefix_width = nmt_newt_text_width (text);
+ dest_prefix_label = g_object_new (NMT_TYPE_NEWT_LABEL,
+ "text", text,
+ "style", NMT_NEWT_LABEL_PLAIN,
+ NULL);
+ g_free (text);
+ nmt_newt_grid_add (NMT_NEWT_GRID (header), dest_prefix_label, 0, 0);
+
+ text = _("Next Hop");
+ next_hop_label = g_object_new (NMT_TYPE_NEWT_LABEL,
+ "text", text,
+ "style", NMT_NEWT_LABEL_PLAIN,
+ NULL);
+ next_hop_width = nmt_newt_text_width (text);
+ nmt_newt_grid_add (NMT_NEWT_GRID (header), next_hop_label, 1, 0);
+
+ text = _("Metric");
+ metric_label = g_object_new (NMT_TYPE_NEWT_LABEL,
+ "text", text,
+ "style", NMT_NEWT_LABEL_PLAIN,
+ NULL);
+ metric_width = nmt_newt_text_width (text);
+ nmt_newt_grid_add (NMT_NEWT_GRID (header), metric_label, 2, 0);
+
+ priv->ip_entry_width = MAX (20, MAX (dest_prefix_width, next_hop_width));
+ priv->metric_entry_width = MAX (7, metric_width);
+
+ nmt_newt_widget_set_padding (dest_prefix_label,
+ 0, 0, priv->ip_entry_width - dest_prefix_width, 0);
+ nmt_newt_widget_set_padding (next_hop_label,
+ 2, 0, priv->ip_entry_width - next_hop_width, 0);
+ nmt_newt_widget_set_padding (metric_label,
+ 2, 0, priv->metric_entry_width - metric_width, 0);
+
+ nmt_newt_grid_add (NMT_NEWT_GRID (table), header, 0, 0);
+
+ empty = nmt_newt_label_new (_("No custom routes are defined."));
+ priv->list = nmt_widget_list_new (create_route_entry, table, NULL, empty);
+ g_signal_connect (priv->list, "add-clicked", G_CALLBACK (add_route), table);
+ g_signal_connect (priv->list, "remove-clicked", G_CALLBACK (remove_route), table);
+ nmt_newt_grid_add (NMT_NEWT_GRID (table), priv->list, 0, 1);
+}
+
+static void
+nmt_route_table_finalize (GObject *object)
+{
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (object);
+
+ if (priv->family == AF_INET)
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
+ else if (priv->family == AF_INET6)
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
+
+ G_OBJECT_CLASS (nmt_route_table_parent_class)->finalize (object);
+}
+
+static void
+nmt_route_table_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ priv->family = g_value_get_int (value);
+ break;
+ case PROP_IP4_ROUTES:
+ g_return_if_fail (priv->family == AF_INET);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
+ priv->routes = nm_utils_ip4_routes_from_gvalue (value);
+ nmt_widget_list_set_length (NMT_WIDGET_LIST (priv->list),
+ g_slist_length (priv->routes));
+ break;
+ case PROP_IP6_ROUTES:
+ g_return_if_fail (priv->family == AF_INET6);
+ g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
+ priv->routes = nm_utils_ip6_routes_from_gvalue (value);
+ nmt_widget_list_set_length (NMT_WIDGET_LIST (priv->list),
+ g_slist_length (priv->routes));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_route_table_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ g_value_set_int (value, priv->family);
+ break;
+ case PROP_IP4_ROUTES:
+ g_return_if_fail (priv->family == AF_INET);
+ nm_utils_ip4_routes_to_gvalue (priv->routes, value);
+ break;
+ case PROP_IP6_ROUTES:
+ g_return_if_fail (priv->family == AF_INET6);
+ nm_utils_ip6_routes_to_gvalue (priv->routes, value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+#define DBUS_TYPE_G_ARRAY_OF_UINT (dbus_g_type_get_collection ("GArray", G_TYPE_UINT))
+#define DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_ARRAY_OF_UINT))
+#define DBUS_TYPE_G_IP6_ROUTE (dbus_g_type_get_struct ("GValueArray", DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, G_TYPE_INVALID))
+#define DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_IP6_ROUTE))
+
+static void
+nmt_route_table_class_init (NmtRouteTableClass *table_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (table_class);
+
+ g_type_class_add_private (table_class, sizeof (NmtRouteTablePrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_route_table_set_property;
+ object_class->get_property = nmt_route_table_get_property;
+ object_class->finalize = nmt_route_table_finalize;
+
+ /**
+ * NmtRouteTable:family:
+ *
+ * The network address family of the routes, eg %AF_INET
+ */
+ g_object_class_install_property (object_class, PROP_FAMILY,
+ g_param_spec_int ("family", "", "",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtRouteTable:ip4-routes:
+ *
+ * The array of routes, suitable for binding to
+ * #NMSettingIP4Config:routes.
+ *
+ * Only valid if #NmtRouteTable:family is %AF_INET
+ */
+ g_object_class_install_property (object_class, PROP_IP4_ROUTES,
+ g_param_spec_boxed ("ip4-routes", "", "",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtRouteTable:ip6-routes:
+ *
+ * The array of routes, suitable for binding to
+ * #NMSettingIP6Config:routes.
+ *
+ * Only valid if #NmtRouteTable:family is %AF_INET6
+ */
+ g_object_class_install_property (object_class, PROP_IP6_ROUTES,
+ g_param_spec_boxed ("ip6-routes", "", "",
+ DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-route-table.h b/tui/nmt-route-table.h
new file mode 100644
index 000000000..217bf40da
--- /dev/null
+++ b/tui/nmt-route-table.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_ROUTE_TABLE_H
+#define NMT_ROUTE_TABLE_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_ROUTE_TABLE (nmt_route_table_get_type ())
+#define NMT_ROUTE_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_ROUTE_TABLE, NmtRouteTable))
+#define NMT_ROUTE_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_ROUTE_TABLE, NmtRouteTableClass))
+#define NMT_IS_ROUTE_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_ROUTE_TABLE))
+#define NMT_IS_ROUTE_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_ROUTE_TABLE))
+#define NMT_ROUTE_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_ROUTE_TABLE, NmtRouteTableClass))
+
+typedef struct {
+ NmtNewtGrid parent;
+
+} NmtRouteTable;
+
+typedef struct {
+ NmtNewtGridClass parent;
+
+} NmtRouteTableClass;
+
+GType nmt_route_table_get_type (void);
+
+NmtNewtWidget *nmt_route_table_new (int family);
+
+G_END_DECLS
+
+#endif /* NMT_ROUTE_TABLE_H */
diff --git a/tui/nmt-secret-agent.c b/tui/nmt-secret-agent.c
new file mode 100644
index 000000000..7939a8437
--- /dev/null
+++ b/tui/nmt-secret-agent.c
@@ -0,0 +1,646 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2011-2013 Red Hat, Inc.
+ * Copyright 2011 Giovanni Campagna <scampa.giovanni@gmail.com>
+ */
+
+/**
+ * SECTION:nmt-secret-agent
+ * @short_description: A secret agent
+ *
+ * #NmtSecretAgent is the secret agent used by nmtui-connect.
+ *
+ * This is a stripped-down version of gnome-shell's ShellNetworkAgent,
+ * with bits of the corresponding JavaScript code squished down into
+ * it. It is intended to eventually be generic enough that it could
+ * replace ShellNetworkAgent.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <dbus/dbus-glib.h>
+#include <glib/gi18n-lib.h>
+
+#include <nm-utils.h>
+
+#include "nmt-secret-agent.h"
+#include "nmt-newt.h"
+
+G_DEFINE_TYPE (NmtSecretAgent, nmt_secret_agent, NM_TYPE_SECRET_AGENT)
+
+#define NMT_SECRET_AGENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_SECRET_AGENT, NmtSecretAgentPrivate))
+
+enum {
+ REQUEST_SECRETS,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+typedef struct {
+ NmtSecretAgent *self;
+
+ gchar *request_id;
+ NMConnection *connection;
+ gchar **hints;
+ NMSecretAgentGetSecretsFunc callback;
+ gpointer callback_data;
+} NmtSecretAgentRequest;
+
+typedef struct {
+ /* <char *request_id, NmtSecretAgentRequest *request> */
+ GHashTable *requests;
+} NmtSecretAgentPrivate;
+
+static void
+nmt_secret_agent_request_free (gpointer data)
+{
+ NmtSecretAgentRequest *request = data;
+
+ g_object_unref (request->self);
+ g_object_unref (request->connection);
+ g_strfreev (request->hints);
+
+ g_slice_free (NmtSecretAgentRequest, request);
+}
+
+static void
+nmt_secret_agent_init (NmtSecretAgent *agent)
+{
+ NmtSecretAgentPrivate *priv = NMT_SECRET_AGENT_GET_PRIVATE (agent);
+
+ priv->requests = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, nmt_secret_agent_request_free);
+}
+
+static void
+nmt_secret_agent_finalize (GObject *object)
+{
+ NmtSecretAgentPrivate *priv = NMT_SECRET_AGENT_GET_PRIVATE (object);
+ GError *error;
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ error = g_error_new (NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
+ "The secret agent is going away");
+
+ g_hash_table_iter_init (&iter, priv->requests);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ NmtSecretAgentRequest *request = value;
+
+ request->callback (NM_SECRET_AGENT (object),
+ request->connection,
+ NULL, error,
+ request->callback_data);
+ }
+
+ g_hash_table_destroy (priv->requests);
+ g_error_free (error);
+
+ G_OBJECT_CLASS (nmt_secret_agent_parent_class)->finalize (object);
+}
+
+static gboolean
+strv_has (gchar **haystack,
+ gchar *needle)
+{
+ gchar *iter;
+
+ for (iter = *haystack; iter; iter++) {
+ if (g_strcmp0 (iter, needle) == 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * NmtSecretAgentSecret:
+ * @name: the user-visible name of the secret. Eg, "WEP Passphrase".
+ * @value: the value of the secret
+ * @password: %TRUE if this secret represents a password, %FALSE
+ * if it represents non-secret data.
+ *
+ * A single "secret" being requested.
+ */
+
+typedef struct {
+ NmtSecretAgentSecret base;
+
+ NMSetting *setting;
+ char *property;
+
+ NmtNewtEntryValidator validator;
+ gpointer validator_data;
+} NmtSecretAgentSecretReal;
+
+static void
+nmt_secret_agent_secret_free (NmtSecretAgentSecret *secret)
+{
+ NmtSecretAgentSecretReal *real = (NmtSecretAgentSecretReal *)secret;
+
+ g_free (secret->name);
+ g_free (secret->value);
+ g_free (real->property);
+ g_clear_object (&real->setting);
+
+ g_slice_free (NmtSecretAgentSecretReal, real);
+}
+
+static NmtSecretAgentSecret *
+nmt_secret_agent_secret_new (const char *name,
+ NMSetting *setting,
+ const char *property,
+ gboolean password)
+{
+ NmtSecretAgentSecretReal *real;
+
+ real = g_slice_new0 (NmtSecretAgentSecretReal);
+ real->base.name = g_strdup (name);
+ real->base.password = password;
+
+ if (setting) {
+ real->setting = g_object_ref (setting);
+ real->property = g_strdup (property);
+
+ g_object_get (setting, property, &real->base.value, NULL);
+ }
+
+ return &real->base;
+}
+
+static gboolean
+add_8021x_secrets (NmtSecretAgentRequest *request,
+ GPtrArray *secrets)
+{
+ NMSetting8021x *s_8021x = nm_connection_get_setting_802_1x (request->connection);
+ const char *eap_method;
+ NmtSecretAgentSecret *secret;
+
+ eap_method = nm_setting_802_1x_get_eap_method (s_8021x, 0);
+ if (!eap_method)
+ return FALSE;
+
+ if ( !strcmp (eap_method, "md5")
+ || !strcmp (eap_method, "leap")
+ || !strcmp (eap_method, "ttls")
+ || !strcmp (eap_method, "peap")) {
+ /* TTLS and PEAP are actually much more complicated, but this complication
+ * is not visible here since we only care about phase2 authentication
+ * (and don't even care of which one)
+ */
+ secret = nmt_secret_agent_secret_new (_("Username"),
+ NM_SETTING (s_8021x),
+ NM_SETTING_802_1X_IDENTITY,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nmt_secret_agent_secret_new (_("Password"),
+ NM_SETTING (s_8021x),
+ NM_SETTING_802_1X_PASSWORD,
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ return TRUE;
+ }
+
+ if (!strcmp (eap_method, "tls")) {
+ secret = nmt_secret_agent_secret_new (_("Identity"),
+ NM_SETTING (s_8021x),
+ NM_SETTING_802_1X_IDENTITY,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nmt_secret_agent_secret_new (_("Private key password"),
+ NM_SETTING (s_8021x),
+ NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD,
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+add_wireless_secrets (NmtSecretAgentRequest *request,
+ GPtrArray *secrets)
+{
+ NMSettingWirelessSecurity *s_wsec = nm_connection_get_setting_wireless_security (request->connection);
+ const char *key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
+ NmtSecretAgentSecret *secret;
+
+ if (!key_mgmt)
+ return FALSE;
+
+ if (!strcmp (key_mgmt, "wpa-none") || !strcmp (key_mgmt, "wpa-psk")) {
+ secret = nmt_secret_agent_secret_new (_("Password"),
+ NM_SETTING (s_wsec),
+ NM_SETTING_WIRELESS_SECURITY_PSK,
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ return TRUE;
+ }
+
+ if (!strcmp (key_mgmt, "none")) {
+ int index;
+ char *key;
+
+ index = nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec);
+ key = g_strdup_printf ("wep-key%d", index);
+ secret = nmt_secret_agent_secret_new (_("Key"),
+ NM_SETTING (s_wsec),
+ key,
+ TRUE);
+ g_free (key);
+
+#if 0
+ nmt_secret_agent_secret_set_validator (secret, static_wep_key_validate,
+ nm_setting_wireless_security_get_wep_key_type (s_wsec));
+#endif
+ g_ptr_array_add (secrets, secret);
+ return TRUE;
+ }
+
+ if (!strcmp (key_mgmt, "iee8021x")) {
+ if (!g_strcmp0 (nm_setting_wireless_security_get_auth_alg (s_wsec), "leap")) {
+ secret = nmt_secret_agent_secret_new (_("Password"),
+ NM_SETTING (s_wsec),
+ NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD,
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ return TRUE;
+ } else
+ return add_8021x_secrets (request, secrets);
+ }
+
+ if (!strcmp (key_mgmt, "wpa-eap"))
+ return add_8021x_secrets (request, secrets);
+
+ return FALSE;
+}
+
+static gboolean
+add_pppoe_secrets (NmtSecretAgentRequest *request,
+ GPtrArray *secrets)
+{
+ NMSettingPPPOE *s_pppoe = nm_connection_get_setting_pppoe (request->connection);
+ NmtSecretAgentSecret *secret;
+
+ secret = nmt_secret_agent_secret_new (_("Username"),
+ NM_SETTING (s_pppoe),
+ NM_SETTING_PPPOE_USERNAME,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nmt_secret_agent_secret_new (_("Service"),
+ NM_SETTING (s_pppoe),
+ NM_SETTING_PPPOE_SERVICE,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nmt_secret_agent_secret_new (_("Password"),
+ NM_SETTING (s_pppoe),
+ NM_SETTING_PPPOE_PASSWORD,
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ return TRUE;
+}
+
+static void
+request_secrets_from_ui (NmtSecretAgentRequest *request)
+{
+ GPtrArray *secrets;
+ NmtSecretAgentSecret *secret;
+ const char *title;
+ char *msg;
+ gboolean ok = TRUE;
+
+ secrets = g_ptr_array_new_with_free_func ((GDestroyNotify) nmt_secret_agent_secret_free);
+
+ if (nm_connection_is_type (request->connection, NM_SETTING_WIRELESS_SETTING_NAME)) {
+ NMSettingWireless *s_wireless;
+ char *ssid;
+
+ s_wireless = nm_connection_get_setting_wireless (request->connection);
+ ssid = nm_utils_ssid_to_utf8 (nm_setting_wireless_get_ssid (s_wireless));
+
+ title = _("Authentication required by wireless network");
+ msg = g_strdup_printf (_("Passwords or encryption keys are required to access the wireless network '%s'."), ssid);
+
+ ok = add_wireless_secrets (request, secrets);
+ } else if (nm_connection_is_type (request->connection, NM_SETTING_WIRED_SETTING_NAME)) {
+ NMSettingConnection *s_con;
+
+ s_con = nm_connection_get_setting_connection (request->connection);
+
+ title = _("Wired 802.1X authentication");
+ msg = NULL;
+
+ secret = nmt_secret_agent_secret_new (_("Network name"),
+ NM_SETTING (s_con),
+ NM_SETTING_CONNECTION_ID,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ ok = add_8021x_secrets (request, secrets);
+ } else if (nm_connection_is_type (request->connection, NM_SETTING_PPPOE_SETTING_NAME)) {
+ title = _("DSL authentication");
+ msg = NULL;
+
+ ok = add_pppoe_secrets (request, secrets);
+ } else if (nm_connection_is_type (request->connection, NM_SETTING_GSM_SETTING_NAME)) {
+ NMSettingGsm *s_gsm = nm_connection_get_setting_gsm (request->connection);
+
+ if (strv_has (request->hints, "pin")) {
+ title = _("PIN code required");
+ msg = g_strdup (_("PIN code is needed for the mobile broadband device"));
+
+ secret = nmt_secret_agent_secret_new (_("PIN"),
+ NM_SETTING (s_gsm),
+ NM_SETTING_GSM_PIN,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ } else {
+ title = _("Mobile broadband network password");
+ msg = g_strdup_printf (_("A password is required to connect to '%s'."),
+ nm_connection_get_id (request->connection));
+
+ secret = nmt_secret_agent_secret_new (_("Password"),
+ NM_SETTING (s_gsm),
+ NM_SETTING_GSM_PASSWORD,
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ }
+ } else if (nm_connection_is_type (request->connection, NM_SETTING_CDMA_SETTING_NAME)) {
+ NMSettingCdma *s_cdma = nm_connection_get_setting_cdma (request->connection);
+
+ title = _("Mobile broadband network password");
+ msg = g_strdup_printf (_("A password is required to connect to '%s'."),
+ nm_connection_get_id (request->connection));
+
+ secret = nmt_secret_agent_secret_new (_("Password"),
+ NM_SETTING (s_cdma),
+ NM_SETTING_CDMA_PASSWORD,
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ } else if (nm_connection_is_type (request->connection, NM_SETTING_BLUETOOTH_SETTING_NAME)) {
+ NMSetting *setting;
+
+ setting = nm_connection_get_setting_by_name (request->connection, NM_SETTING_GSM_SETTING_NAME);
+ if (!setting)
+ setting = nm_connection_get_setting_by_name (request->connection, NM_SETTING_CDMA_SETTING_NAME);
+
+ title = _("Mobile broadband network password");
+ msg = g_strdup_printf (_("A password is required to connect to '%s'."),
+ nm_connection_get_id (request->connection));
+
+ secret = nmt_secret_agent_secret_new (_("Password"),
+ setting,
+ "password",
+ TRUE);
+ g_ptr_array_add (secrets, secret);
+ } else
+ ok = FALSE;
+
+ if (!ok) {
+ g_ptr_array_unref (secrets);
+ return;
+ }
+
+ g_signal_emit (request->self, signals[REQUEST_SECRETS], 0,
+ request->request_id, title, msg, secrets);
+}
+
+static void
+nmt_secret_agent_get_secrets (NMSecretAgent *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ const gchar *setting_name,
+ const gchar **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFunc callback,
+ gpointer callback_data)
+{
+ NmtSecretAgent *self = NMT_SECRET_AGENT (agent);
+ NmtSecretAgentPrivate *priv = NMT_SECRET_AGENT_GET_PRIVATE (self);
+ NmtSecretAgentRequest *request;
+ NMSettingConnection *s_con;
+ const char *connection_type;
+ char *request_id;
+ GError *error;
+
+ request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
+ if (g_hash_table_lookup (priv->requests, request_id) != NULL) {
+ /* We already have a request pending for this (connection, setting) */
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
+ "Request for %s secrets already pending", request_id);
+ nope:
+ callback (agent, connection, NULL, error, callback_data);
+ g_error_free (error);
+ g_free (request_id);
+ return;
+ }
+
+ s_con = nm_connection_get_setting_connection (connection);
+ connection_type = nm_setting_connection_get_connection_type (s_con);
+
+ if (!strcmp (connection_type, NM_SETTING_VPN_SETTING_NAME)) {
+ /* We don't support VPN secrets yet */
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_NO_SECRETS,
+ "VPN secrets not supported");
+ goto nope;
+ }
+
+ if (!(flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION)) {
+ /* We don't do stored passwords */
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_NO_SECRETS,
+ "Stored passwords not supported");
+ goto nope;
+ }
+
+ request = g_slice_new (NmtSecretAgentRequest);
+ request->self = g_object_ref (self);
+ request->connection = g_object_ref (connection);
+ request->hints = g_strdupv ((gchar **)hints);
+ request->callback = callback;
+ request->callback_data = callback_data;
+ request->request_id = request_id;
+ g_hash_table_replace (priv->requests, request->request_id, request);
+
+ request_secrets_from_ui (request);
+}
+
+static void
+gvalue_destroy_notify (gpointer data)
+{
+ GValue *value = data;
+ g_value_unset (value);
+ g_slice_free (GValue, value);
+}
+
+/**
+ * nmt_secret_agent_response:
+ * @self: the #NmtSecretAgent
+ * @request_id: the request ID being responded to
+ * @secrets: (allow-none): the array of secrets, or %NULL
+ *
+ * Response to a #NmtSecretAgent::get-secrets signal.
+ *
+ * If the user provided secrets, the caller should set the
+ * corresponding <literal>value</literal> fields in the
+ * #NmtSecretAgentSecrets (freeing any initial values they had), and
+ * pass the array to nmt_secret_agent_response(). If the user
+ * cancelled the request, @secrets should be NULL.
+ */
+void
+nmt_secret_agent_response (NmtSecretAgent *self,
+ const char *request_id,
+ GPtrArray *secrets)
+{
+ NmtSecretAgentPrivate *priv;
+ NmtSecretAgentRequest *request;
+ GHashTable *hash = NULL, *setting_hash;
+ GValue *value;
+ GError *error = NULL;
+ int i;
+
+ g_return_if_fail (NMT_IS_SECRET_AGENT (self));
+
+ priv = NMT_SECRET_AGENT_GET_PRIVATE (self);
+ request = g_hash_table_lookup (priv->requests, request_id);
+ g_return_if_fail (request != NULL);
+
+ if (secrets) {
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_hash_table_unref);
+ for (i = 0; i < secrets->len; i++) {
+ NmtSecretAgentSecretReal *secret = secrets->pdata[i];
+
+ setting_hash = g_hash_table_lookup (hash, nm_setting_get_name (secret->setting));
+ if (!setting_hash) {
+ setting_hash = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, gvalue_destroy_notify);
+ g_hash_table_insert (hash, (char *)nm_setting_get_name (secret->setting),
+ setting_hash);
+ }
+
+ value = g_slice_new0 (GValue);
+ g_value_init (value, G_TYPE_STRING);
+ g_value_set_string (value, secret->base.value);
+
+ g_hash_table_insert (setting_hash, g_strdup (secret->property), value);
+ }
+ } else {
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_USER_CANCELED,
+ "User cancelled");
+ }
+
+ request->callback (NM_SECRET_AGENT (self), request->connection, hash, error, request->callback_data);
+
+ g_clear_pointer (&hash, g_hash_table_unref);
+ g_clear_error (&error);
+ g_hash_table_remove (priv->requests, request_id);
+}
+
+static void
+nmt_secret_agent_cancel_get_secrets (NMSecretAgent *agent,
+ const gchar *connection_path,
+ const gchar *setting_name)
+{
+ /* We don't support cancellation. Sorry! */
+}
+
+static void
+nmt_secret_agent_save_secrets (NMSecretAgent *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ NMSecretAgentSaveSecretsFunc callback,
+ gpointer callback_data)
+{
+ /* We don't support secret storage */
+ callback (agent, connection, NULL, callback_data);}
+
+static void
+nmt_secret_agent_delete_secrets (NMSecretAgent *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ NMSecretAgentDeleteSecretsFunc callback,
+ gpointer callback_data)
+{
+ /* We don't support secret storage, so there's nothing to delete. */
+ callback (agent, connection, NULL, callback_data);
+}
+
+void
+nmt_secret_agent_class_init (NmtSecretAgentClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ NMSecretAgentClass *agent_class = NM_SECRET_AGENT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NmtSecretAgentPrivate));
+
+ gobject_class->finalize = nmt_secret_agent_finalize;
+
+ agent_class->get_secrets = nmt_secret_agent_get_secrets;
+ agent_class->cancel_get_secrets = nmt_secret_agent_cancel_get_secrets;
+ agent_class->save_secrets = nmt_secret_agent_save_secrets;
+ agent_class->delete_secrets = nmt_secret_agent_delete_secrets;
+
+ /**
+ * NmtSecretAgent::request-secrets:
+ * @agent: the #NmtSecretAgent
+ * @request_id: request ID, to eventually pass to
+ * nmt_secret_agent_response().
+ * @title: a title for the password dialog
+ * @prompt: a prompt message for the password dialog
+ * @secrets: (element-type #NmtSecretAgentSecret): array of secrets
+ * being requested.
+ *
+ * Emitted when the agent requires secrets from the user.
+ *
+ * The application should create a password dialog (eg,
+ * #NmtPasswordDialog) with the given title and prompt, and an
+ * entry for each element of @secrets. If any of the secrets
+ * already have a <literal>value</literal> filled in, the
+ * corresponding entry should be initialized to that value.
+ *
+ * When the dialog is complete, the app must call
+ * nmt_secret_agent_response() with the results.
+ */
+ signals[REQUEST_SECRETS] = g_signal_new ("request-secrets",
+ G_TYPE_FROM_CLASS (klass),
+ 0, 0, NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 4,
+ G_TYPE_STRING, /* request_id */
+ G_TYPE_STRING, /* title */
+ G_TYPE_STRING, /* prompt */
+ G_TYPE_PTR_ARRAY);
+}
+
+/**
+ * nmt_secret_agent_new:
+ *
+ * Creates a new #NmtSecretAgent.
+ *
+ * Returns: a new #NmtSecretAgent
+ */
+NMSecretAgent *
+nmt_secret_agent_new (void)
+{
+ return g_object_new (NMT_TYPE_SECRET_AGENT,
+ NM_SECRET_AGENT_IDENTIFIER, "nmtui",
+ NM_SECRET_AGENT_AUTO_REGISTER, FALSE,
+ NULL);
+}
diff --git a/tui/nmt-secret-agent.h b/tui/nmt-secret-agent.h
new file mode 100644
index 000000000..04b158194
--- /dev/null
+++ b/tui/nmt-secret-agent.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_SECRET_AGENT_H
+#define NMT_SECRET_AGENT_H
+
+#include <nm-secret-agent.h>
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_SECRET_AGENT (nmt_secret_agent_get_type ())
+#define NMT_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_SECRET_AGENT, NmtSecretAgent))
+#define NMT_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_SECRET_AGENT, NmtSecretAgentClass))
+#define NMT_IS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_SECRET_AGENT))
+#define NMT_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_SECRET_AGENT))
+#define NMT_SECRET_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_SECRET_AGENT, NmtSecretAgentClass))
+
+typedef struct {
+ NMSecretAgent parent;
+
+} NmtSecretAgent;
+
+typedef struct {
+ NMSecretAgentClass parent;
+
+} NmtSecretAgentClass;
+
+typedef struct {
+ char *name, *value;
+ gboolean password;
+} NmtSecretAgentSecret;
+
+GType nmt_secret_agent_get_type (void);
+
+NMSecretAgent *nmt_secret_agent_new (void);
+void nmt_secret_agent_response (NmtSecretAgent *self,
+ const char *request_id,
+ GPtrArray *secrets);
+
+G_END_DECLS
+
+#endif /* NMT_SECRET_AGENT_H */
diff --git a/tui/nmt-slave-list.c b/tui/nmt-slave-list.c
new file mode 100644
index 000000000..284614aa2
--- /dev/null
+++ b/tui/nmt-slave-list.c
@@ -0,0 +1,264 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-slave-list:
+ * @short_description: An editable list of a connection's slaves
+ *
+ * #NmtSlaveList implements an #NmtEditConnectionList for the
+ * slaves of a connection.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include <nm-remote-connection.h>
+
+#include "nmt-slave-list.h"
+
+G_DEFINE_TYPE (NmtSlaveList, nmt_slave_list, NMT_TYPE_EDIT_CONNECTION_LIST)
+
+#define NMT_SLAVE_LIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_SLAVE_LIST, NmtSlaveListPrivate))
+
+typedef struct {
+ NMConnection *master;
+ const char *master_type, *master_uuid;
+
+ NmtAddConnectionTypeFilter type_filter;
+ gpointer type_filter_data;
+} NmtSlaveListPrivate;
+
+enum {
+ PROP_0,
+ PROP_MASTER,
+ PROP_TYPE_FILTER,
+ PROP_TYPE_FILTER_DATA,
+
+ LAST_PROP
+};
+
+static gboolean nmt_slave_list_connection_filter (NmtEditConnectionList *list,
+ NMConnection *connection,
+ gpointer user_data);
+
+/**
+ * nmt_slave_list_new:
+ * @master: the master #NMConnection whose slaves are being listed
+ * @type_filter: (allow-none): a function to limit the availble slave types
+ * @type_filter_data: (allow-none): data for @type_filter.
+ *
+ * Creates a new #NmtSlaveList.
+ *
+ * If @type_filter is non-%NULL, it will be used to limit the connection
+ * types that are available when the user clicks on the "Add" button to add
+ * a new slave. If the @type_filter filters the list down to only a single
+ * connection type, then the user will not be presented with a connection-type
+ * dialog, and will instead be immediately taken to an editor window for the
+ * new slave after clicking "Add".
+ *
+ * Returns: a new #NmtSlaveList.
+ */
+NmtNewtWidget *
+nmt_slave_list_new (NMConnection *master,
+ NmtAddConnectionTypeFilter type_filter,
+ gpointer type_filter_data)
+{
+ return g_object_new (NMT_TYPE_SLAVE_LIST,
+ "master", master,
+ "type-filter", type_filter,
+ "type-filter-data", type_filter_data,
+ "grouped", FALSE,
+ "connection-filter", nmt_slave_list_connection_filter,
+ NULL);
+}
+
+static void
+nmt_slave_list_init (NmtSlaveList *list)
+{
+}
+
+static void
+nmt_slave_list_finalize (GObject *object)
+{
+ NmtSlaveListPrivate *priv = NMT_SLAVE_LIST_GET_PRIVATE (object);
+
+ g_object_unref (priv->master);
+
+ G_OBJECT_CLASS (nmt_slave_list_parent_class)->finalize (object);
+}
+
+static gboolean
+nmt_slave_list_connection_filter (NmtEditConnectionList *list,
+ NMConnection *connection,
+ gpointer user_data)
+{
+ NmtSlaveListPrivate *priv = NMT_SLAVE_LIST_GET_PRIVATE (list);
+ NMSettingConnection *s_con;
+ const char *master, *master_ifname, *slave_type;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_return_val_if_fail (s_con != NULL, FALSE);
+
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if (g_strcmp0 (slave_type, priv->master_type) != 0)
+ return FALSE;
+
+ master = nm_setting_connection_get_master (s_con);
+ if (!master)
+ return FALSE;
+
+ master_ifname = nm_connection_get_virtual_iface_name (priv->master);
+ if (g_strcmp0 (master, master_ifname) != 0 && g_strcmp0 (master, priv->master_uuid) != 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+nmt_slave_list_add_connection (NmtEditConnectionList *list)
+{
+ NmtSlaveListPrivate *priv = NMT_SLAVE_LIST_GET_PRIVATE (list);
+
+ nmt_add_connection_full (_("Select the type of slave connection you wish to add."), NULL,
+ priv->master, priv->type_filter, priv->type_filter_data);
+}
+
+static void
+nmt_slave_list_edit_connection (NmtEditConnectionList *list,
+ NMConnection *connection)
+{
+ nmt_edit_connection (connection);
+}
+
+static void
+nmt_slave_list_remove_connection (NmtEditConnectionList *list,
+ NMRemoteConnection *connection)
+{
+ nmt_remove_connection (connection);
+}
+
+static void
+nmt_slave_list_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtSlaveListPrivate *priv = NMT_SLAVE_LIST_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MASTER:
+ priv->master = g_value_dup_object (value);
+ if (priv->master) {
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (priv->master);
+
+ priv->master_type = nm_setting_connection_get_connection_type (s_con);
+ priv->master_uuid = nm_setting_connection_get_uuid (s_con);
+ }
+ break;
+ case PROP_TYPE_FILTER:
+ priv->type_filter = g_value_get_pointer (value);
+ break;
+ case PROP_TYPE_FILTER_DATA:
+ priv->type_filter_data = g_value_get_pointer (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_slave_list_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtSlaveListPrivate *priv = NMT_SLAVE_LIST_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MASTER:
+ g_value_set_object (value, priv->master);
+ break;
+ case PROP_TYPE_FILTER:
+ g_value_set_pointer (value, priv->type_filter);
+ break;
+ case PROP_TYPE_FILTER_DATA:
+ g_value_set_pointer (value, priv->type_filter_data);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_slave_list_class_init (NmtSlaveListClass *list_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (list_class);
+ NmtEditConnectionListClass *connection_list_class = NMT_EDIT_CONNECTION_LIST_CLASS (list_class);
+
+ g_type_class_add_private (list_class, sizeof (NmtSlaveListPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_slave_list_set_property;
+ object_class->get_property = nmt_slave_list_get_property;
+ object_class->finalize = nmt_slave_list_finalize;
+
+ connection_list_class->add_connection = nmt_slave_list_add_connection;
+ connection_list_class->edit_connection = nmt_slave_list_edit_connection;
+ connection_list_class->remove_connection = nmt_slave_list_remove_connection;
+
+ /**
+ * NmtSlaveList:master:
+ *
+ * The master #NMConnection whose slaves are being displayed.
+ */
+ g_object_class_install_property (object_class, PROP_MASTER,
+ g_param_spec_object ("master", "", "",
+ NM_TYPE_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtSlaveList:type-filter:
+ *
+ * If non-%NULL, this will be used to limit the connection types
+ * that are available when the user clicks on the "Add" button to
+ * add a new slave. If the filter filters the list down to only a
+ * single connection type, then the user will not be presented
+ * with a connection-type dialog, and will instead be immediately
+ * taken to an editor window for the new slave after clicking
+ * "Add".
+ */
+ g_object_class_install_property (object_class, PROP_TYPE_FILTER,
+ g_param_spec_pointer ("type-filter", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtSlaveList:type-filter-data:
+ *
+ * User data passed to #NmtSlaveList:type-filter
+ */
+ g_object_class_install_property (object_class, PROP_TYPE_FILTER_DATA,
+ g_param_spec_pointer ("type-filter-data", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-slave-list.h b/tui/nmt-slave-list.h
new file mode 100644
index 000000000..d10cd3a73
--- /dev/null
+++ b/tui/nmt-slave-list.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_SLAVE_LIST_H
+#define NMT_SLAVE_LIST_H
+
+#include "nmt-edit-connection-list.h"
+#include "nmtui-edit.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_SLAVE_LIST (nmt_slave_list_get_type ())
+#define NMT_SLAVE_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_SLAVE_LIST, NmtSlaveList))
+#define NMT_SLAVE_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_SLAVE_LIST, NmtSlaveListClass))
+#define NMT_IS_SLAVE_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_SLAVE_LIST))
+#define NMT_IS_SLAVE_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_SLAVE_LIST))
+#define NMT_SLAVE_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_SLAVE_LIST, NmtSlaveListClass))
+
+typedef struct {
+ NmtEditConnectionList parent;
+
+} NmtSlaveList;
+
+typedef struct {
+ NmtEditConnectionListClass parent;
+
+} NmtSlaveListClass;
+
+GType nmt_slave_list_get_type (void);
+
+NmtNewtWidget *nmt_slave_list_new (NMConnection *master,
+ NmtAddConnectionTypeFilter type_filter,
+ gpointer type_filter_data);
+
+G_END_DECLS
+
+#endif /* NMT_SLAVE_LIST_H */
diff --git a/tui/nmt-utils.c b/tui/nmt-utils.c
new file mode 100644
index 000000000..f2bf70db8
--- /dev/null
+++ b/tui/nmt-utils.c
@@ -0,0 +1,151 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-utils
+ * @short_description: Miscellaneous nmtui-specific utilities
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nmt-utils.h"
+
+/**
+ * NmtSyncOp:
+ *
+ * A helper object used when synchronously waiting for an asynchronous
+ * operation to complete.
+ *
+ * The caller first does:
+ *
+ * |[
+ * NmtSyncOp op;
+ *
+ * nmt_sync_op_init (&op);
+ * ]|
+ *
+ * It then passes the op as the user_data to the async operation's
+ * callback function, and then calls nmt_sync_op_wait_boolean() or
+ * nmt_sync_op_wait_pointer() to wait for the result.
+ *
+ * When the async callback is invoked, it should call
+ * nmt_sync_op_complete_boolean() or nmt_sync_op_complete_pointer() to
+ * return a result or an error to the caller.
+ *
+ * There is no free/clear function; any memory that needs to be freed
+ * will have been returned to the caller from
+ * nmt_sync_op_wait_boolean() or nmt_sync_op_wait_pointer(), so there
+ * is nothing left that needs to be freed.
+ */
+
+typedef struct {
+ gpointer result;
+ GError *error;
+ gpointer complete;
+} NmtSyncOpReal;
+
+/**
+ * nmt_sync_op_init:
+ * @op: pointer to a stack-allocated #NmtSyncOp
+ *
+ * Initializes @op before use.
+ */
+void
+nmt_sync_op_init (NmtSyncOp *op)
+{
+ memset (op, 0, sizeof (*op));
+}
+
+/**
+ * nmt_sync_op_wait_boolean:
+ * @op: the #NmtSyncOp
+ * @error: return location for a #GError
+ *
+ * This runs the main loop until @op's operation returns, and then
+ * returns the result or error.
+ *
+ * Returns: the result of the operation.
+ */
+gboolean
+nmt_sync_op_wait_boolean (NmtSyncOp *op,
+ GError **error)
+{
+ return GPOINTER_TO_UINT (nmt_sync_op_wait_pointer (op, error));
+}
+
+/**
+ * nmt_sync_op_complete_boolean:
+ * @op: the #NmtSyncOp
+ * @result: the result of the operation
+ * @error: (allow-none): the error, or %NULL
+ *
+ * Completes @op and returns @result and/or @error to the caller.
+ */
+void
+nmt_sync_op_complete_boolean (NmtSyncOp *op,
+ gboolean result,
+ GError *error)
+{
+ nmt_sync_op_complete_pointer (op, GUINT_TO_POINTER (result), error);
+}
+
+/**
+ * nmt_sync_op_wait_pointer:
+ * @op: the #NmtSyncOp
+ * @error: return location for a #GError
+ *
+ * This runs the main loop until @op's operation returns, and then
+ * returns the result or error.
+ *
+ * Returns: the result of the operation.
+ */
+gpointer
+nmt_sync_op_wait_pointer (NmtSyncOp *op,
+ GError **error)
+{
+ NmtSyncOpReal *real = (NmtSyncOpReal *)op;
+
+ while (!real->complete)
+ g_main_context_iteration (NULL, TRUE);
+
+ if (real->error)
+ g_propagate_error (error, real->error);
+ return real->result;
+}
+
+/**
+ * nmt_sync_op_complete_pointer:
+ * @op: the #NmtSyncOp
+ * @result: the result of the operation
+ * @error: (allow-none): the error, or %NULL
+ *
+ * Completes @op and returns @result and/or @error to the caller.
+ */
+void
+nmt_sync_op_complete_pointer (NmtSyncOp *op,
+ gpointer result,
+ GError *error)
+{
+ NmtSyncOpReal *real = (NmtSyncOpReal *)op;
+
+ real->result = result;
+ real->error = error ? g_error_copy (error) : NULL;
+ real->complete = GUINT_TO_POINTER (TRUE);
+}
diff --git a/tui/nmt-utils.h b/tui/nmt-utils.h
new file mode 100644
index 000000000..7e24fcab1
--- /dev/null
+++ b/tui/nmt-utils.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_UTILS_H
+#define NMT_UTILS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct {
+ gpointer private[3];
+} NmtSyncOp;
+
+void nmt_sync_op_init (NmtSyncOp *op);
+
+gboolean nmt_sync_op_wait_boolean (NmtSyncOp *op,
+ GError **error);
+void nmt_sync_op_complete_boolean (NmtSyncOp *op,
+ gboolean result,
+ GError *error);
+
+gpointer nmt_sync_op_wait_pointer (NmtSyncOp *op,
+ GError **error);
+void nmt_sync_op_complete_pointer (NmtSyncOp *op,
+ gpointer result,
+ GError *error);
+
+G_END_DECLS
+
+#endif /* NMT_UTILS_H */
diff --git a/tui/nmt-widget-list.c b/tui/nmt-widget-list.c
new file mode 100644
index 000000000..83c0b9b9e
--- /dev/null
+++ b/tui/nmt-widget-list.c
@@ -0,0 +1,491 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-widget-list
+ * @short_description: A list of widgets, with Add and Remove buttons
+ *
+ * #NmtWidgetList presents a homogeneous list of widgets, with "Remove"
+ * buttons next to each one, and an "Add" button at the button to add
+ * new ones.
+ *
+ * It is the base class for #NmtAddressList, and is used internally by
+ * #NmtRouteTable.
+ *
+ * FIXME: The way this works is sort of weird.
+ */
+
+#include "config.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <dbus/dbus-glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-widget-list.h"
+#include "nmt-newt.h"
+
+G_DEFINE_TYPE (NmtWidgetList, nmt_widget_list, NMT_TYPE_NEWT_GRID)
+
+#define NMT_WIDGET_LIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_WIDGET_LIST, NmtWidgetListPrivate))
+
+typedef struct {
+ int length;
+
+ NmtWidgetListCallback create_callback;
+ gpointer user_data;
+ GDestroyNotify destroy_notify;
+
+ NmtNewtWidget *empty_widget;
+
+ GPtrArray *widgets;
+ GPtrArray *remove_buttons;
+
+ NmtNewtWidget *add_button;
+ GBinding *add_sensitivity;
+} NmtWidgetListPrivate;
+
+enum {
+ PROP_0,
+ PROP_CREATE_CALLBACK,
+ PROP_USER_DATA,
+ PROP_DESTROY_NOTIFY,
+ PROP_EMPTY_WIDGET,
+ PROP_LENGTH,
+
+ LAST_PROP
+};
+
+enum {
+ ADD_CLICKED,
+ REMOVE_CLICKED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void add_clicked (NmtNewtButton *button, gpointer user_data);
+static void remove_clicked (NmtNewtButton *button, gpointer user_data);
+
+/**
+ * NmtWidgetListCallback:
+ * @list: the #NmtWidgetList
+ * @n: the number of the widget being added
+ * @user_data: the callback's user data
+ *
+ * Called by #NmtWidgetList to ask for a new widget to be created.
+ *
+ * Note that the widget is not created to go with any particular
+ * value, but rather is created to be at a certain spot in the list.
+ * When an element is deleted from the list, it is actually always
+ * the last widget in the list that is removed, but it is assumed
+ * that the widget list is bound to some array-valued property, and
+ * so when an element is deleted from that array, the widgets will
+ * all update themselves automatically when the array changes.
+ *
+ * Returns: a new widget for the list
+ */
+
+/**
+ * nmt_widget_list_new:
+ * @create_callback: callback to create new widgets
+ * @user_data: user data for @create_callback
+ * @destroy_notify: #GDestroyNotify for @user_data
+ * @empty_widget: (allow-none): a widget to display when there are
+ * no "real" widgets in the list.
+ *
+ * Creates a new #NmtWidgetList.
+ *
+ * Returns: a new #NmtWidgetList.
+ */
+NmtNewtWidget *
+nmt_widget_list_new (NmtWidgetListCallback create_callback,
+ gpointer user_data,
+ GDestroyNotify destroy_notify,
+ NmtNewtWidget *empty_widget)
+{
+ return g_object_new (NMT_TYPE_WIDGET_LIST,
+ "create-callback", create_callback,
+ "user-data", user_data,
+ "destroy-notify", destroy_notify,
+ "empty-widget", empty_widget,
+ NULL);
+}
+
+static void
+nmt_widget_list_init (NmtWidgetList *list)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list);
+
+ priv->widgets = g_ptr_array_new ();
+ priv->remove_buttons = g_ptr_array_new ();
+
+ priv->add_button = nmt_newt_button_new (_("Add..."));
+ g_signal_connect (priv->add_button, "clicked",
+ G_CALLBACK (add_clicked), list);
+ nmt_newt_grid_add (NMT_NEWT_GRID (list), priv->add_button, 0, 0);
+}
+
+static void
+nmt_widget_list_constructed (GObject *object)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (object);
+
+ if (priv->length == 0 && priv->empty_widget) {
+ nmt_newt_widget_set_visible (priv->empty_widget, TRUE);
+ nmt_newt_grid_move (NMT_NEWT_GRID (object), priv->add_button, 0, 1);
+ }
+
+ G_OBJECT_CLASS (nmt_widget_list_parent_class)->constructed (object);
+}
+
+static void
+nmt_widget_list_finalize (GObject *object)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (object);
+
+ g_ptr_array_unref (priv->widgets);
+ g_ptr_array_unref (priv->remove_buttons);
+
+ if (priv->user_data && priv->destroy_notify)
+ priv->destroy_notify (priv->user_data);
+
+ g_clear_object (&priv->empty_widget);
+
+ G_OBJECT_CLASS (nmt_widget_list_parent_class)->finalize (object);
+}
+
+static void
+ensure_widgets (NmtWidgetList *list)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list);
+ NmtNewtWidget *widget, *button, *focus;
+ gboolean was_empty;
+ NmtNewtForm *form;
+ int i;
+
+ was_empty = priv->widgets->len == 0;
+
+ if (priv->length < priv->widgets->len) {
+ /* remove excess widgets */
+ for (i = priv->length; i < priv->widgets->len; i++) {
+ nmt_newt_container_remove (NMT_NEWT_CONTAINER (list), priv->widgets->pdata[i]);
+ nmt_newt_container_remove (NMT_NEWT_CONTAINER (list), priv->remove_buttons->pdata[i]);
+ }
+ g_ptr_array_set_size (priv->widgets, priv->length);
+ g_ptr_array_set_size (priv->remove_buttons, priv->length);
+
+ } else if (priv->length > priv->widgets->len) {
+ /* add new widgets */
+ for (i = priv->widgets->len; i < priv->length; i++) {
+ widget = NMT_WIDGET_LIST_GET_CLASS (list)->create_widget (list, i);
+
+ nmt_newt_grid_add (NMT_NEWT_GRID (list), widget, 0, i);
+ g_ptr_array_add (priv->widgets, widget);
+
+ button = nmt_newt_button_new (_("Remove"));
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (remove_clicked), list);
+
+ nmt_newt_grid_add (NMT_NEWT_GRID (list), button, 1, i);
+ nmt_newt_widget_set_padding (button, 1, 0, 0, 0);
+ g_ptr_array_add (priv->remove_buttons, button);
+ }
+
+ } else
+ return;
+
+ if (priv->widgets->len == 0 && priv->empty_widget) {
+ nmt_newt_widget_set_visible (priv->empty_widget, TRUE);
+ nmt_newt_grid_move (NMT_NEWT_GRID (list), priv->add_button, 0, 1);
+ } else {
+ if (was_empty && priv->empty_widget)
+ nmt_newt_widget_set_visible (priv->empty_widget, FALSE);
+ nmt_newt_grid_move (NMT_NEWT_GRID (list), priv->add_button, 0, priv->length);
+ }
+
+ form = nmt_newt_widget_get_form (NMT_NEWT_WIDGET (list));
+ if (form) {
+ if (priv->widgets->len) {
+ if (was_empty)
+ focus = priv->widgets->pdata[0];
+ else
+ focus = priv->widgets->pdata[priv->widgets->len - 1];
+ } else
+ focus = priv->add_button;
+ nmt_newt_form_set_focus (form, focus);
+ }
+
+ g_clear_object (&priv->add_sensitivity);
+ if (priv->widgets->len) {
+ widget = priv->widgets->pdata[priv->widgets->len - 1];
+ priv->add_sensitivity = g_object_bind_property (widget, "valid",
+ priv->add_button, "sensitive",
+ G_BINDING_SYNC_CREATE);
+ g_object_add_weak_pointer (G_OBJECT (priv->add_sensitivity),
+ (gpointer *)&priv->add_sensitivity);
+ }
+}
+
+static void
+add_clicked (NmtNewtButton *button, gpointer list)
+{
+ g_signal_emit (G_OBJECT (list), signals[ADD_CLICKED], 0, NULL);
+}
+
+static void
+remove_clicked (NmtNewtButton *button, gpointer list)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list);
+ int i;
+
+ for (i = 0; i < priv->remove_buttons->len; i++) {
+ if (priv->remove_buttons->pdata[i] == (gpointer)button)
+ break;
+ }
+ g_return_if_fail (i < priv->remove_buttons->len);
+
+ g_signal_emit (G_OBJECT (list), signals[REMOVE_CLICKED], 0, i, NULL);
+}
+
+static NmtNewtWidget *
+nmt_widget_list_real_create_widget (NmtWidgetList *list,
+ int n)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list);
+
+ g_return_val_if_fail (priv->create_callback != NULL, NULL);
+
+ return priv->create_callback (list, n, priv->user_data);
+}
+
+/**
+ * nmt_widget_list_get_length:
+ * @list: the #NmtNewtWidgetList
+ *
+ * Gets the number of widgets in the list.
+ *
+ * Returns: the number of widgets in the list.
+ */
+int
+nmt_widget_list_get_length (NmtWidgetList *list)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list);
+
+ return priv->length;
+}
+
+/**
+ * nmt_widget_list_set_length:
+ * @list: the #NmtNewtWidgetList
+ * @length: the new length
+ *
+ * Changes the number of widgets in the list. Widgets will be added or
+ * deleted as necessary.
+ */
+void
+nmt_widget_list_set_length (NmtWidgetList *list,
+ int length)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list);
+
+ if (priv->length != length) {
+ priv->length = length;
+ g_object_notify (G_OBJECT (list), "length");
+ }
+
+ ensure_widgets (list);
+}
+
+static void
+nmt_widget_list_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CREATE_CALLBACK:
+ priv->create_callback = g_value_get_pointer (value);
+ break;
+ case PROP_USER_DATA:
+ priv->user_data = g_value_get_pointer (value);
+ break;
+ case PROP_DESTROY_NOTIFY:
+ priv->destroy_notify = g_value_get_pointer (value);
+ break;
+ case PROP_LENGTH:
+ priv->length = g_value_get_int (value);
+ ensure_widgets (NMT_WIDGET_LIST (object));
+ break;
+ case PROP_EMPTY_WIDGET:
+ priv->empty_widget = g_value_get_object (value);
+ if (priv->empty_widget) {
+ g_object_ref_sink (priv->empty_widget);
+ nmt_newt_grid_add (NMT_NEWT_GRID (object), priv->empty_widget, 0, 0);
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_widget_list_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CREATE_CALLBACK:
+ g_value_set_pointer (value, priv->create_callback);
+ break;
+ case PROP_USER_DATA:
+ g_value_set_pointer (value, priv->user_data);
+ break;
+ case PROP_DESTROY_NOTIFY:
+ g_value_set_pointer (value, priv->destroy_notify);
+ break;
+ case PROP_LENGTH:
+ g_value_set_int (value, priv->length);
+ break;
+ case PROP_EMPTY_WIDGET:
+ g_value_set_object (value, priv->empty_widget);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_widget_list_class_init (NmtWidgetListClass *list_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (list_class);
+
+ g_type_class_add_private (list_class, sizeof (NmtWidgetListPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_widget_list_constructed;
+ object_class->set_property = nmt_widget_list_set_property;
+ object_class->get_property = nmt_widget_list_get_property;
+ object_class->finalize = nmt_widget_list_finalize;
+
+ list_class->create_widget = nmt_widget_list_real_create_widget;
+
+ /* signals */
+
+ /**
+ * NmtNewtWidget::add-clicked:
+ * @list: the #NmtNewtWidgetList
+ *
+ * Emitted when the user clicks the "Add" button. The caller can
+ * decide whether or not to add a new widget, and call
+ * nmt_widget_list_set_length() with the new length if so.
+ *
+ * FIXME: the "Add" button should be insensitive if it's
+ * not going to work.
+ */
+ signals[ADD_CLICKED] =
+ g_signal_new ("add-clicked",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtWidgetListClass, add_clicked),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+ /**
+ * NmtNewtWidget::remove-clicked:
+ * @list: the #NmtNewtWidgetList
+ * @n: the widget being removed
+ *
+ * Emitted when the user clicks one of the "Remove" buttons. The
+ * caller can decide whether or not to remove the widget, and
+ * call nmt_widget_list_set_length() with the new length if so.
+ *
+ * FIXME: the "Remove" button should be insensitive if it's not
+ * going to work.
+ */
+ signals[REMOVE_CLICKED] =
+ g_signal_new ("remove-clicked",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NmtWidgetListClass, remove_clicked),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_INT);
+
+ /* properties */
+
+ /**
+ * NmtWidgetList:create-callback:
+ *
+ * Callback called to create a new widget.
+ */
+ g_object_class_install_property (object_class, PROP_CREATE_CALLBACK,
+ g_param_spec_pointer ("create-callback", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtWidgetList:user-data:
+ *
+ * User data for #NmtWidgetList:create-callback
+ */
+ g_object_class_install_property (object_class, PROP_USER_DATA,
+ g_param_spec_pointer ("user-data", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtWidgetList:destroy-notify:
+ *
+ * #GDestroyNotify for #NmtWidgetList:user-data
+ */
+ g_object_class_install_property (object_class, PROP_DESTROY_NOTIFY,
+ g_param_spec_pointer ("destroy-notify", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtWidgetList:length:
+ *
+ * The length of the widget list; changing this value will add or
+ * remove widgets from the list.
+ */
+ g_object_class_install_property (object_class, PROP_LENGTH,
+ g_param_spec_int ("length", "", "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NmtWidgetList:empty-widget:
+ *
+ * If non-%NULL, this widget will be displayed when there are
+ * no "real" widgets in the list.
+ */
+ g_object_class_install_property (object_class, PROP_EMPTY_WIDGET,
+ g_param_spec_object ("empty-widget", "", "",
+ NMT_TYPE_NEWT_WIDGET,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/tui/nmt-widget-list.h b/tui/nmt-widget-list.h
new file mode 100644
index 000000000..7dbeb2158
--- /dev/null
+++ b/tui/nmt-widget-list.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMT_WIDGET_LIST_H
+#define NMT_WIDGET_LIST_H
+
+#include "nmt-newt-grid.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_WIDGET_LIST (nmt_widget_list_get_type ())
+#define NMT_WIDGET_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_WIDGET_LIST, NmtWidgetList))
+#define NMT_WIDGET_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_WIDGET_LIST, NmtWidgetListClass))
+#define NMT_IS_WIDGET_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_WIDGET_LIST))
+#define NMT_IS_WIDGET_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_WIDGET_LIST))
+#define NMT_WIDGET_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_WIDGET_LIST, NmtWidgetListClass))
+
+typedef struct {
+ NmtNewtGrid parent;
+
+} NmtWidgetList;
+
+typedef struct {
+ NmtNewtGridClass parent;
+
+ /* signals */
+ void (*add_clicked) (NmtWidgetList *list);
+ void (*remove_clicked) (NmtWidgetList *list,
+ int n);
+
+ /* methods */
+ NmtNewtWidget * (*create_widget) (NmtWidgetList *list,
+ int n);
+
+} NmtWidgetListClass;
+
+GType nmt_widget_list_get_type (void);
+
+typedef NmtNewtWidget * (*NmtWidgetListCallback) (NmtWidgetList *list,
+ int n,
+ gpointer user_data);
+
+NmtNewtWidget *nmt_widget_list_new (NmtWidgetListCallback create_callback,
+ gpointer user_data,
+ GDestroyNotify destroy_notify,
+ NmtNewtWidget *empty_widget);
+
+int nmt_widget_list_get_length (NmtWidgetList *list);
+void nmt_widget_list_set_length (NmtWidgetList *list,
+ int length);
+
+G_END_DECLS
+
+#endif /* NMT_WIDGET_LIST_H */
diff --git a/tui/nmtui-connect.c b/tui/nmtui-connect.c
new file mode 100644
index 000000000..a86b8df57
--- /dev/null
+++ b/tui/nmtui-connect.c
@@ -0,0 +1,353 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmtui-connect
+ * @short_description: nm-applet-like functionality
+ *
+ * nmtui-connect implements activating #NMConnections, including
+ * presenting a password dialog if necessary.
+ *
+ * It's supposed to also implement deactivating them, but it doesn't.
+ * FIXME.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include <glib/gi18n-lib.h>
+#include <nm-utils.h>
+
+#include "nmt-newt.h"
+
+#include "nmtui.h"
+#include "nmtui-connect.h"
+#include "nmt-connect-connection-list.h"
+#include "nmt-password-dialog.h"
+#include "nmt-secret-agent.h"
+#include "nmt-utils.h"
+
+static void
+secrets_requested (NmtSecretAgent *agent,
+ const char *request_id,
+ const char *title,
+ const char *msg,
+ GPtrArray *secrets,
+ gpointer user_data)
+{
+ NmtNewtForm *form;
+
+ form = nmt_password_dialog_new (request_id, title, msg, secrets);
+ nmt_newt_form_run_sync (form);
+
+ if (nmt_password_dialog_succeeded (NMT_PASSWORD_DIALOG (form)))
+ nmt_secret_agent_response (agent, request_id, secrets);
+ else
+ nmt_secret_agent_response (agent, request_id, NULL);
+
+ g_object_unref (form);
+}
+
+static void
+connect_cancelled (NmtNewtForm *form,
+ gpointer user_data)
+{
+ NmtSyncOp *op = user_data;
+ GError *error = NULL;
+
+ error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_CANCELLED, "Cancelled");
+ nmt_sync_op_complete_boolean (op, FALSE, error);
+ g_clear_error (&error);
+}
+
+static void
+activate_ac_state_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NmtSyncOp *op = user_data;
+ NMActiveConnectionState state;
+ GError *error = NULL;
+
+ state = nm_active_connection_get_state (NM_ACTIVE_CONNECTION (object));
+ if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING)
+ return;
+
+ if (state != NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ error = g_error_new_literal (NM_CLIENT_ERROR, NM_CLIENT_ERROR_UNKNOWN,
+ _("Activation failed"));
+ }
+
+ nmt_sync_op_complete_boolean (op, error == NULL, error);
+ g_clear_error (&error);
+}
+
+static void
+activate_callback (NMClient *client,
+ NMActiveConnection *ac,
+ GError *error,
+ gpointer user_data)
+{
+ NmtSyncOp *op = user_data;
+
+ if (error)
+ nmt_sync_op_complete_pointer (op, NULL, error);
+ else
+ nmt_sync_op_complete_pointer (op, g_object_ref (ac), NULL);
+}
+
+static void
+add_and_activate_callback (NMClient *client,
+ NMActiveConnection *ac,
+ const char *new_connection_path,
+ GError *error,
+ gpointer user_data)
+{
+ /* We don't care about @new_connection_path, so... */
+ activate_callback (client, ac, error, user_data);
+}
+
+static void
+activate_connection (NMConnection *connection,
+ NMDevice *device,
+ NMObject *specific_object)
+{
+ NmtNewtForm *form;
+ NMSecretAgent *agent;
+ NmtNewtWidget *label;
+ NmtSyncOp op;
+ const char *specific_object_path;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ form = g_object_new (NMT_TYPE_NEWT_FORM,
+ "escape-exits", TRUE,
+ NULL);
+ label = nmt_newt_label_new (_("Connecting..."));
+ nmt_newt_form_set_content (form, label);
+
+ agent = nmt_secret_agent_new ();
+ nm_secret_agent_register (agent);
+ g_signal_connect (agent, "request-secrets", G_CALLBACK (secrets_requested), NULL);
+
+ specific_object_path = specific_object ? nm_object_get_path (specific_object) : NULL;
+
+ /* There's no way to cancel an nm_client_activate_connection() /
+ * nm_client_add_and_activate_connection() call, so we always let them
+ * complete, even if the user hits Esc; they shouldn't normally take long
+ * to complete anyway.
+ */
+
+ nmt_sync_op_init (&op);
+ if (connection) {
+ nm_client_activate_connection (nm_client,
+ connection, device, specific_object_path,
+ activate_callback, &op);
+ } else {
+ nm_client_add_and_activate_connection (nm_client,
+ NULL, device, specific_object_path,
+ add_and_activate_callback, &op);
+ }
+
+ nmt_newt_form_show (form);
+
+ ac = nmt_sync_op_wait_pointer (&op, &error);
+ if (!ac) {
+ nmt_newt_message_dialog (_("Could not activate connection: %s"), error->message);
+ g_clear_error (&error);
+ goto done;
+ } else if (nm_active_connection_get_state (ac) == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ /* Already active */
+ goto done;
+ } else if (!nmt_newt_widget_get_realized (NMT_NEWT_WIDGET (form))) {
+ /* User already hit Esc */
+ goto done;
+ }
+
+ /* Now wait for the connection to actually reach the ACTIVATED state,
+ * allowing the user to cancel if it takes too long.
+ */
+
+ nmt_sync_op_init (&op);
+
+ g_signal_connect (form, "quit", G_CALLBACK (connect_cancelled), &op);
+ g_signal_connect (ac, "notify::" NM_ACTIVE_CONNECTION_STATE,
+ G_CALLBACK (activate_ac_state_changed), &op);
+
+ if (!nmt_sync_op_wait_boolean (&op, &error)) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ nmt_newt_message_dialog (_("Could not activate connection: %s"), error->message);
+ g_clear_error (&error);
+ }
+
+ g_signal_handlers_disconnect_by_func (form, G_CALLBACK (connect_cancelled), &op);
+ g_signal_handlers_disconnect_by_func (ac, G_CALLBACK (activate_ac_state_changed), &op);
+
+ done:
+ if (nmt_newt_widget_get_realized (NMT_NEWT_WIDGET (form)))
+ nmt_newt_form_quit (form);
+ g_object_unref (form);
+
+ /* If the activation failed very quickly, then agent won't be registered yet,
+ * and nm_secret_agent_unregister() would complain if we called it...
+ */
+ if (nm_secret_agent_get_registered (agent))
+ nm_secret_agent_unregister (agent);
+ g_object_unref (agent);
+}
+
+static void
+listbox_activated (NmtNewtListbox *listbox,
+ gpointer user_data)
+{
+ NmtConnectConnectionList *list = NMT_CONNECT_CONNECTION_LIST (listbox);
+ NMConnection *connection;
+ NMDevice *device;
+ NMObject *specific_object;
+ NMActiveConnection *ac;
+
+ if (!nmt_connect_connection_list_get_selection (list,
+ &connection,
+ &device,
+ &specific_object,
+ &ac))
+ return;
+
+ if (ac)
+ nm_client_deactivate_connection (nm_client, ac);
+ else
+ activate_connection (connection, device, specific_object);
+}
+
+static void
+activate_clicked (NmtNewtButton *button,
+ gpointer listbox)
+{
+ listbox_activated (listbox, NULL);
+}
+
+static void
+listbox_active_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer button)
+{
+ NmtConnectConnectionList *list = NMT_CONNECT_CONNECTION_LIST (object);
+ static const char *activate, *deactivate;
+ static int deactivate_padding, activate_padding;
+ NMActiveConnection *ac;
+ gboolean has_selection;
+
+ if (G_UNLIKELY (activate == NULL)) {
+ int activate_width, deactivate_width;
+
+ activate = _("Activate");
+ activate_width = nmt_newt_text_width (activate);
+ deactivate = _("Deactivate");
+ deactivate_width = nmt_newt_text_width (deactivate);
+
+ activate_padding = MAX (0, deactivate_width - activate_width);
+ deactivate_padding = MAX (0, activate_width - deactivate_width);
+ }
+
+ has_selection = nmt_connect_connection_list_get_selection (list, NULL, NULL, NULL, &ac);
+
+ nmt_newt_component_set_sensitive (button, has_selection);
+ if (has_selection && ac) {
+ nmt_newt_button_set_label (button, deactivate);
+ nmt_newt_widget_set_padding (button, 0, 0, deactivate_padding, 0);
+ } else {
+ nmt_newt_button_set_label (button, activate);
+ nmt_newt_widget_set_padding (button, 0, 0, activate_padding, 0);
+ }
+}
+
+static NmtNewtForm *
+nmt_connect_connection_list (void)
+{
+ int screen_width, screen_height;
+ NmtNewtForm *form;
+ NmtNewtWidget *list, *activate, *quit, *bbox, *grid;
+
+ newtGetScreenSize (&screen_width, &screen_height);
+
+ form = g_object_new (NMT_TYPE_NEWT_FORM,
+ "y", 2,
+ "height", screen_height - 4,
+ "escape-exits", TRUE,
+ NULL);
+
+ grid = nmt_newt_grid_new ();
+
+ list = nmt_connect_connection_list_new ();
+ nmt_newt_grid_add (NMT_NEWT_GRID (grid), list, 0, 0);
+ nmt_newt_grid_set_flags (NMT_NEWT_GRID (grid), list,
+ NMT_NEWT_GRID_FILL_X | NMT_NEWT_GRID_FILL_Y |
+ NMT_NEWT_GRID_EXPAND_X | NMT_NEWT_GRID_EXPAND_Y);
+ g_signal_connect (list, "activated", G_CALLBACK (listbox_activated), NULL);
+
+ bbox = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_VERTICAL);
+ nmt_newt_grid_add (NMT_NEWT_GRID (grid), bbox, 1, 0);
+ nmt_newt_widget_set_padding (bbox, 1, 1, 0, 1);
+
+ activate = nmt_newt_button_box_add_start (NMT_NEWT_BUTTON_BOX (bbox), _("Activate"));
+ g_signal_connect (list, "notify::active", G_CALLBACK (listbox_active_changed), activate);
+ listbox_active_changed (G_OBJECT (list), NULL, activate);
+ g_signal_connect (activate, "clicked", G_CALLBACK (activate_clicked), list);
+
+ quit = nmt_newt_button_box_add_end (NMT_NEWT_BUTTON_BOX (bbox), _("Quit"));
+ nmt_newt_widget_set_exit_on_activate (quit, TRUE);
+
+ nmt_newt_form_set_content (form, grid);
+ return form;
+}
+
+static NmtNewtForm *
+nmt_connect_connection (const char *identifier)
+{
+ NmtNewtWidget *list;
+ NMConnection *connection;
+ NMDevice *device;
+ NMObject *specific_object;
+ NMActiveConnection *ac;
+
+ list = nmt_connect_connection_list_new ();
+ if (!nmt_connect_connection_list_get_connection (NMT_CONNECT_CONNECTION_LIST (list),
+ identifier,
+ &connection,
+ &device,
+ &specific_object,
+ &ac))
+ nmt_newt_message_dialog (_("No such connection '%s'"), identifier);
+ else if (ac)
+ nmt_newt_message_dialog (_("Connection is already active"));
+ else
+ activate_connection (connection, device, specific_object);
+ g_object_unref (list);
+
+ return NULL;
+}
+
+NmtNewtForm *
+nmtui_connect (int argc, char **argv)
+{
+ if (argc == 2)
+ return nmt_connect_connection (argv[1]);
+ else
+ return nmt_connect_connection_list ();
+}
diff --git a/tui/nmtui-connect.h b/tui/nmtui-connect.h
new file mode 100644
index 000000000..8310ac389
--- /dev/null
+++ b/tui/nmtui-connect.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMTUI_CONNECT_H
+#define NMTUI_CONNECT_H
+
+G_BEGIN_DECLS
+
+NmtNewtForm *nmtui_connect (int argc, char **argv);
+
+G_END_DECLS
+
+#endif /* NMTUI_CONNECT_H */
diff --git a/tui/nmtui-edit.c b/tui/nmtui-edit.c
new file mode 100644
index 000000000..2a17b4540
--- /dev/null
+++ b/tui/nmtui-edit.c
@@ -0,0 +1,505 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmtui-edit
+ * @short_description: nm-connection-editor-like functionality
+ *
+ * nmtui-edit implements editing #NMConnections.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include <glib/gi18n-lib.h>
+#include <nm-utils.h>
+
+#include "nmtui.h"
+#include "nmtui-edit.h"
+#include "nmt-edit-connection-list.h"
+#include "nmt-editor.h"
+#include "nmt-utils.h"
+
+#include "nm-editor-utils.h"
+
+static void
+list_add_connection (NmtEditConnectionList *list,
+ gpointer form)
+{
+ nmt_add_connection ();
+ nmt_newt_form_set_focus (form, NMT_NEWT_WIDGET (list));
+}
+
+static void
+list_edit_connection (NmtEditConnectionList *list,
+ NMConnection *connection,
+ gpointer form)
+{
+ nmt_edit_connection (connection);
+ nmt_newt_form_set_focus (form, NMT_NEWT_WIDGET (list));
+}
+
+static void
+list_remove_connection (NmtEditConnectionList *list,
+ NMRemoteConnection *connection,
+ gpointer form)
+{
+ nmt_remove_connection (connection);
+ nmt_newt_form_set_focus (form, NMT_NEWT_WIDGET (list));
+}
+
+static gboolean
+edit_connection_list_filter (NmtEditConnectionList *list,
+ NMConnection *connection,
+ gpointer user_data)
+{
+ NMSettingConnection *s_con;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_return_val_if_fail (s_con != NULL, FALSE);
+
+ return (nm_setting_connection_get_slave_type (s_con) == NULL);
+}
+
+static NmtNewtForm *
+nmt_edit_main_connection_list (void)
+{
+ int screen_width, screen_height;
+ NmtNewtForm *form;
+ NmtNewtWidget *quit, *list;
+
+ newtGetScreenSize (&screen_width, &screen_height);
+
+ form = g_object_new (NMT_TYPE_NEWT_FORM,
+ "y", 2,
+ "height", screen_height - 4,
+ "escape-exits", TRUE,
+ NULL);
+
+ quit = nmt_newt_button_new (_("Quit"));
+ nmt_newt_widget_set_exit_on_activate (quit, TRUE);
+
+ list = g_object_new (NMT_TYPE_EDIT_CONNECTION_LIST,
+ "extra-widget", quit,
+ "connection-filter", edit_connection_list_filter,
+ NULL);
+
+ g_signal_connect (list, "add-connection",
+ G_CALLBACK (list_add_connection), form);
+ g_signal_connect (list, "edit-connection",
+ G_CALLBACK (list_edit_connection), form);
+ g_signal_connect (list, "remove-connection",
+ G_CALLBACK (list_remove_connection), form);
+
+ nmt_newt_form_set_content (form, list);
+ return form;
+}
+
+#define NMT_TYPE_ADD_CONNECTION (nmt_add_connection_get_type ())
+#define NMT_ADD_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_ADD_CONNECTION, NmtAddConnection))
+#define NMT_IS_ADD_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_ADD_CONNECTION))
+
+typedef NmtNewtForm NmtAddConnection;
+typedef NmtNewtFormClass NmtAddConnectionClass;
+
+GType nmt_add_connection_get_type (void);
+
+G_DEFINE_TYPE (NmtAddConnection, nmt_add_connection, NMT_TYPE_NEWT_FORM)
+
+#define NMT_ADD_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_ADD_CONNECTION, NmtAddConnectionPrivate))
+
+typedef struct {
+ NmtNewtTextbox *textbox;
+ NmtNewtListbox *listbox;
+
+ char *primary_text;
+ char *secondary_text;
+ NMConnection *master;
+ NmtAddConnectionTypeFilter type_filter;
+ gpointer type_filter_data;
+
+ gboolean single_type;
+} NmtAddConnectionPrivate;
+
+enum {
+ PROP_0,
+
+ PROP_PRIMARY_TEXT,
+ PROP_SECONDARY_TEXT,
+ PROP_MASTER,
+ PROP_TYPE_FILTER,
+ PROP_TYPE_FILTER_DATA,
+
+ LAST_PROP
+};
+
+static void
+create_connection (NmtNewtWidget *widget, gpointer list)
+{
+ NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (list);
+ GType type = (GType) GPOINTER_TO_SIZE (nmt_newt_listbox_get_active_key (priv->listbox));
+ NMConnection *connection;
+
+ connection = nm_editor_utils_create_connection (type, priv->master, nm_settings);
+ nmt_edit_connection (connection);
+ g_object_unref (connection);
+
+ nmt_newt_form_quit (list);
+}
+
+static void
+nmt_add_connection_init (NmtAddConnection *form)
+{
+ NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (form);
+ NmtNewtWidget *textbox, *listbox, *button;
+ NmtNewtGrid *grid, *buttons;
+
+ grid = NMT_NEWT_GRID (nmt_newt_grid_new ());
+
+ textbox = nmt_newt_textbox_new (0, 60);
+ priv->textbox = NMT_NEWT_TEXTBOX (textbox);
+ nmt_newt_grid_add (grid, textbox, 0, 0);
+
+ listbox = nmt_newt_listbox_new (5, NMT_NEWT_LISTBOX_SCROLL);
+ priv->listbox = NMT_NEWT_LISTBOX (listbox);
+ g_signal_connect (priv->listbox, "activated", G_CALLBACK (create_connection), form);
+ nmt_newt_grid_add (grid, listbox, 0, 1);
+ nmt_newt_widget_set_padding (listbox, 0, 1, 0, 0);
+ nmt_newt_grid_set_flags (grid, listbox, NMT_NEWT_GRID_EXPAND_X);
+
+ // FIXME: VPN description textbox
+
+ buttons = NMT_NEWT_GRID (nmt_newt_grid_new ());
+ nmt_newt_grid_add (grid, NMT_NEWT_WIDGET (buttons), 0, 2);
+ nmt_newt_widget_set_padding (NMT_NEWT_WIDGET (buttons), 0, 1, 0, 0);
+
+ button = g_object_ref_sink (nmt_newt_button_new (_("Cancel")));
+ nmt_newt_widget_set_exit_on_activate (button, TRUE);
+ nmt_newt_grid_add (NMT_NEWT_GRID (buttons), button, 0, 0);
+ nmt_newt_widget_set_padding (button, 0, 0, 1, 0);
+ nmt_newt_grid_set_flags (NMT_NEWT_GRID (buttons), button,
+ NMT_NEWT_GRID_EXPAND_X | NMT_NEWT_GRID_ANCHOR_RIGHT |
+ NMT_NEWT_GRID_FILL_Y);
+
+ button = g_object_ref_sink (nmt_newt_button_new (_("Create")));
+ g_signal_connect (button, "clicked", G_CALLBACK (create_connection), form);
+ nmt_newt_grid_add (NMT_NEWT_GRID (buttons), button, 1, 0);
+
+ nmt_newt_form_set_content (NMT_NEWT_FORM (form), NMT_NEWT_WIDGET (grid));
+}
+
+static void
+nmt_add_connection_constructed (GObject *object)
+{
+ NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (object);
+ NMEditorConnectionTypeData **types;
+ char *text;
+ int i, num_types;
+
+ if (priv->secondary_text) {
+ text = g_strdup_printf ("%s\n\n%s",
+ priv->primary_text,
+ priv->secondary_text);
+ } else
+ text = g_strdup (priv->primary_text);
+ nmt_newt_textbox_set_text (priv->textbox, text);
+ g_free (text);
+
+ types = nm_editor_utils_get_connection_type_list ();
+ for (i = num_types = 0; types[i]; i++) {
+ if (priv->type_filter && !priv->type_filter (types[i]->setting_type, priv->type_filter_data))
+ continue;
+ nmt_newt_listbox_append (priv->listbox, types[i]->name,
+ GSIZE_TO_POINTER (types[i]->setting_type));
+ num_types++;
+ }
+
+ if (num_types == 1)
+ priv->single_type = TRUE;
+
+ G_OBJECT_CLASS (nmt_add_connection_parent_class)->constructed (object);
+}
+
+static void
+nmt_add_connection_show (NmtNewtForm *form)
+{
+ NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (form);
+
+ if (priv->single_type) {
+ nmt_newt_listbox_set_active (priv->listbox, 0);
+ create_connection (NMT_NEWT_WIDGET (priv->listbox), g_object_ref (form));
+ } else
+ NMT_NEWT_FORM_CLASS (nmt_add_connection_parent_class)->show (form);
+}
+
+static void
+nmt_add_connection_finalize (GObject *object)
+{
+ NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (object);
+
+ g_free (priv->primary_text);
+ g_free (priv->secondary_text);
+ g_clear_object (&priv->master);
+
+ G_OBJECT_CLASS (nmt_add_connection_parent_class)->finalize (object);
+}
+
+static void
+nmt_add_connection_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PRIMARY_TEXT:
+ priv->primary_text = g_value_dup_string (value);
+ break;
+ case PROP_SECONDARY_TEXT:
+ priv->secondary_text = g_value_dup_string (value);
+ break;
+ case PROP_MASTER:
+ priv->master = g_value_dup_object (value);
+ break;
+ case PROP_TYPE_FILTER:
+ priv->type_filter = g_value_get_pointer (value);
+ break;
+ case PROP_TYPE_FILTER_DATA:
+ priv->type_filter_data = g_value_get_pointer (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_add_connection_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PRIMARY_TEXT:
+ g_value_set_string (value, priv->primary_text);
+ break;
+ case PROP_SECONDARY_TEXT:
+ g_value_set_string (value, priv->secondary_text);
+ break;
+ case PROP_MASTER:
+ g_value_set_object (value, priv->master);
+ break;
+ case PROP_TYPE_FILTER:
+ g_value_set_pointer (value, priv->type_filter);
+ break;
+ case PROP_TYPE_FILTER_DATA:
+ g_value_set_pointer (value, priv->type_filter_data);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_add_connection_class_init (NmtAddConnectionClass *add_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (add_class);
+ NmtNewtFormClass *form_class = NMT_NEWT_FORM_CLASS (add_class);
+
+ g_type_class_add_private (add_class, sizeof (NmtAddConnectionPrivate));
+
+ /* virtual methods */
+ object_class->constructed = nmt_add_connection_constructed;
+ object_class->set_property = nmt_add_connection_set_property;
+ object_class->get_property = nmt_add_connection_get_property;
+ object_class->finalize = nmt_add_connection_finalize;
+
+ form_class->show = nmt_add_connection_show;
+
+ g_object_class_install_property (object_class, PROP_PRIMARY_TEXT,
+ g_param_spec_string ("primary-text", "", "",
+ _("Select the type of connection you wish to create."),
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_SECONDARY_TEXT,
+ g_param_spec_string ("secondary-text", "", "",
+#if 0
+ _("If you are creating a VPN, and the VPN connection you "
+ "wish to create does not appear in the list, you may "
+ "not have the correct VPN plugin installed."),
+#else
+ NULL,
+#endif
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_MASTER,
+ g_param_spec_object ("master", "", "",
+ NM_TYPE_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_TYPE_FILTER,
+ g_param_spec_pointer ("type-filter", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_TYPE_FILTER_DATA,
+ g_param_spec_pointer ("type-filter-data", "", "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
+
+void
+nmt_add_connection (void)
+{
+ NmtNewtForm *form;
+
+ form = g_object_new (NMT_TYPE_ADD_CONNECTION,
+ "title", _("New Connection"),
+ NULL);
+ nmt_newt_form_show (form);
+ g_object_unref (form);
+}
+
+void
+nmt_add_connection_full (const char *primary_text,
+ const char *secondary_text,
+ NMConnection *master,
+ NmtAddConnectionTypeFilter type_filter,
+ gpointer type_filter_data)
+{
+ NmtNewtForm *form;
+
+ form = g_object_new (NMT_TYPE_ADD_CONNECTION,
+ "title", _("New Connection"),
+ "primary-text", primary_text,
+ "secondary-text", secondary_text,
+ "master", master,
+ "type-filter", type_filter,
+ "type-filter-data", type_filter_data,
+ NULL);
+ nmt_newt_form_show (form);
+ g_object_unref (form);
+}
+
+void
+nmt_edit_connection (NMConnection *connection)
+{
+ NmtNewtForm *editor;
+
+ editor = nmt_editor_new (connection);
+ if (!editor)
+ return;
+
+ nmt_newt_form_show (editor);
+ g_object_unref (editor);
+}
+
+typedef struct {
+ NmtSyncOp op;
+ gboolean got_callback, got_signal;
+} ConnectionDeleteData;
+
+static void
+connection_deleted_callback (NMRemoteConnection *connection,
+ GError *error,
+ gpointer user_data)
+{
+ ConnectionDeleteData *data = user_data;
+
+ if (error) {
+ nmt_newt_message_dialog (_("Unable to delete connection: %s"),
+ error->message);
+ } else
+ data->got_callback = TRUE;
+
+ if (error || (data->got_callback && data->got_signal))
+ nmt_sync_op_complete_boolean (&data->op, error == NULL, error);
+}
+
+static void
+connection_removed_signal (NMRemoteConnection *connection,
+ gpointer user_data)
+{
+ ConnectionDeleteData *data = user_data;
+
+ data->got_signal = TRUE;
+ if (data->got_callback && data->got_signal)
+ nmt_sync_op_complete_boolean (&data->op, TRUE, NULL);
+}
+
+void
+nmt_remove_connection (NMRemoteConnection *connection)
+{
+ ConnectionDeleteData data;
+ int choice;
+ GError *error = NULL;
+
+ choice = nmt_newt_choice_dialog (_("Cancel"),
+ _("Delete"),
+ _("Are you sure you want to delete the connection '%s'?"),
+ nm_connection_get_id (NM_CONNECTION (connection)));
+ if (choice == 1)
+ return;
+
+ data.got_callback = data.got_signal = FALSE;
+ nmt_sync_op_init (&data.op);
+
+ g_object_ref (connection);
+ g_signal_connect (connection, NM_REMOTE_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed_signal), &data);
+ nm_remote_connection_delete (connection, connection_deleted_callback, &data);
+
+ if (!nmt_sync_op_wait_boolean (&data.op, &error)) {
+ nmt_newt_message_dialog (_("Could not delete connection: %s"),
+ error->message);
+ g_error_free (error);
+ }
+
+ g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_removed_signal), &data);
+ g_object_unref (connection);
+}
+
+NmtNewtForm *
+nmtui_edit (int argc, char **argv)
+{
+ NMConnection *conn = NULL;
+
+ if (argc == 2) {
+ if (nm_utils_is_uuid (argv[1]))
+ conn = NM_CONNECTION (nm_remote_settings_get_connection_by_uuid (nm_settings, argv[1]));
+ if (!conn)
+ conn = NM_CONNECTION (nm_remote_settings_get_connection_by_id (nm_settings, argv[1]));
+
+ if (!conn) {
+ nmt_newt_message_dialog ("%s: no such connection '%s'\n", argv[0], argv[1]);
+ return NULL;
+ }
+
+ return nmt_editor_new (conn);
+ } else
+ return nmt_edit_main_connection_list ();
+}
diff --git a/tui/nmtui-edit.h b/tui/nmtui-edit.h
new file mode 100644
index 000000000..dae91cfac
--- /dev/null
+++ b/tui/nmtui-edit.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMTUI_EDIT_H
+#define NMTUI_EDIT_H
+
+#include "nmt-newt.h"
+
+G_BEGIN_DECLS
+
+typedef gboolean (*NmtAddConnectionTypeFilter) (GType connection_type,
+ gpointer user_data);
+
+NmtNewtForm *nmtui_edit (int argc, char **argv);
+
+void nmt_add_connection (void);
+void nmt_add_connection_full (const char *primary_text,
+ const char *secondary_text,
+ NMConnection *master,
+ NmtAddConnectionTypeFilter type_filter,
+ gpointer type_filter_data);
+
+void nmt_edit_connection (NMConnection *connection);
+
+void nmt_remove_connection (NMRemoteConnection *connection);
+
+G_END_DECLS
+
+#endif /* NMTUI_EDIT_H */
diff --git a/tui/nmtui-hostname.c b/tui/nmtui-hostname.c
new file mode 100644
index 000000000..7c8aff3a8
--- /dev/null
+++ b/tui/nmtui-hostname.c
@@ -0,0 +1,124 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmtui-hostname
+ * @short_description: hostname-setting functionality
+ *
+ * nmtui-hostname implements the "set hostname" functionality
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-newt.h"
+
+#include "nmtui.h"
+#include "nmtui-hostname.h"
+#include "nmt-utils.h"
+
+static char *
+nmtui_hostname_run_dialog (void)
+{
+ NmtNewtForm *form;
+ NmtNewtWidget *widget, *ok, *cancel;
+ NmtNewtGrid *grid;
+ NmtNewtEntry *entry;
+ NmtNewtButtonBox *bbox;
+ char *hostname, *ret = NULL;
+
+ form = g_object_new (NMT_TYPE_NEWT_FORM,
+ "title", _("Set Hostname"),
+ "escape-exits", TRUE,
+ NULL);
+
+ widget = nmt_newt_grid_new ();
+ nmt_newt_form_set_content (form, widget);
+ grid = NMT_NEWT_GRID (widget);
+
+ widget = nmt_newt_label_new (_("Hostname"));
+ nmt_newt_grid_add (grid, widget, 0, 0);
+
+ widget = nmt_newt_entry_new (40, 0);
+ nmt_newt_widget_set_exit_on_activate (widget, TRUE);
+ nmt_newt_grid_add (grid, widget, 1, 0);
+ nmt_newt_widget_set_padding (widget, 1, 0, 0, 0);
+ entry = NMT_NEWT_ENTRY (widget);
+
+ widget = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_HORIZONTAL);
+ nmt_newt_grid_add (grid, widget, 1, 1);
+ nmt_newt_widget_set_padding (widget, 0, 1, 0, 0);
+ bbox = NMT_NEWT_BUTTON_BOX (widget);
+
+ cancel = nmt_newt_button_box_add_end (bbox, _("Cancel"));
+ nmt_newt_widget_set_exit_on_activate (cancel, TRUE);
+ ok = nmt_newt_button_box_add_end (bbox, _("OK"));
+ nmt_newt_widget_set_exit_on_activate (ok, TRUE);
+
+ g_object_get (G_OBJECT (nm_settings),
+ NM_REMOTE_SETTINGS_HOSTNAME, &hostname,
+ NULL);
+ nmt_newt_entry_set_text (entry, hostname);
+ g_free (hostname);
+
+ widget = nmt_newt_form_run_sync (form);
+ if (widget == (NmtNewtWidget *)entry || widget == ok)
+ ret = g_strdup (nmt_newt_entry_get_text (entry));
+
+ g_object_unref (form);
+ return ret;
+}
+
+static void
+hostname_set (NMRemoteSettings *settings,
+ GError *error,
+ gpointer op)
+{
+ nmt_sync_op_complete_boolean (op, error == NULL, error);
+}
+
+NmtNewtForm *
+nmtui_hostname (int argc, char **argv)
+{
+ const char *hostname;
+ char *tmp = NULL;
+ NmtSyncOp op;
+ GError *error = NULL;
+
+ if (argc == 2)
+ hostname = argv[1];
+ else
+ hostname = tmp = nmtui_hostname_run_dialog ();
+
+ if (hostname) {
+ nmt_sync_op_init (&op);
+ nm_remote_settings_save_hostname (nm_settings, hostname, hostname_set, &op);
+ if (nmt_sync_op_wait_boolean (&op, &error)) {
+ /* Translators: this indicates the result. ie, "I have set the hostname to ..." */
+ nmt_newt_message_dialog (_("Set hostname to '%s'"), hostname);
+ } else {
+ nmt_newt_message_dialog (_("Unable to set hostname: %s"), error->message);
+ g_error_free (error);
+ }
+
+ g_free (tmp);
+ }
+
+ return NULL;
+}
diff --git a/tui/nmtui-hostname.h b/tui/nmtui-hostname.h
new file mode 100644
index 000000000..a14bc6993
--- /dev/null
+++ b/tui/nmtui-hostname.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMTUI_HOSTNAME_H
+#define NMTUI_HOSTNAME_H
+
+G_BEGIN_DECLS
+
+NmtNewtForm *nmtui_hostname (int argc, char **argv);
+
+G_END_DECLS
+
+#endif /* NMTUI_HOSTNAME_H */
diff --git a/tui/nmtui.c b/tui/nmtui.c
new file mode 100644
index 000000000..7fcac445a
--- /dev/null
+++ b/tui/nmtui.c
@@ -0,0 +1,310 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmtui
+ * @short_description: nmtui toplevel
+ *
+ * The top level of nmtui. Exists mostly just to call nmtui_connect(),
+ * nmtui_edit(), and nmtui_hostname().
+ */
+
+#include "config.h"
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include <nm-client.h>
+#include <nm-connection.h>
+#include <nm-remote-settings.h>
+#include <nm-utils.h>
+
+#include "nmt-newt.h"
+#include "nm-editor-bindings.h"
+
+#include "nmtui.h"
+#include "nmtui-edit.h"
+#include "nmtui-connect.h"
+#include "nmtui-hostname.h"
+
+NMClient *nm_client;
+NMRemoteSettings *nm_settings;
+static GMainLoop *loop;
+
+typedef NmtNewtForm * (*NmtuiSubprogram) (int argc, char **argv);
+
+static const struct {
+ const char *name, *shortcut, *arg;
+ const char *display_name;
+ NmtuiSubprogram func;
+} subprograms[] = {
+ { "edit", "nmtui-edit", N_("connection"),
+ N_("Edit a connection"),
+ nmtui_edit },
+ { "connect", "nmtui-connect", N_("connection"),
+ N_("Activate a connection"),
+ nmtui_connect },
+ { "hostname", "nmtui-hostname", N_("new hostname"),
+ N_("Set system hostname"),
+ nmtui_hostname }
+};
+static const int num_subprograms = G_N_ELEMENTS (subprograms);
+
+static void
+quit_func (int argc, char **argv)
+{
+ nmtui_quit ();
+}
+
+static NmtNewtForm *
+nmtui_main (int argc, char **argv)
+{
+ NmtNewtForm *form;
+ NmtNewtWidget *widget, *ok;
+ NmtNewtGrid *grid;
+ NmtNewtListbox *listbox;
+ NmtNewtButtonBox *bbox;
+ NmtuiSubprogram subprogram = NULL;
+ int i;
+
+ form = g_object_new (NMT_TYPE_NEWT_FORM,
+ "title", _("NetworkManager TUI"),
+ "escape-exits", TRUE,
+ NULL);
+
+ widget = nmt_newt_grid_new ();
+ nmt_newt_form_set_content (form, widget);
+ grid = NMT_NEWT_GRID (widget);
+
+ widget = nmt_newt_label_new (_("Please select an option"));
+ nmt_newt_grid_add (grid, widget, 0, 0);
+
+ widget = g_object_new (NMT_TYPE_NEWT_LISTBOX,
+ "height", num_subprograms + 2,
+ "skip-null-keys", TRUE,
+ NULL);
+ nmt_newt_grid_add (grid, widget, 0, 1);
+ nmt_newt_widget_set_padding (widget, 0, 1, 0, 1);
+ nmt_newt_widget_set_exit_on_activate (widget, TRUE);
+ listbox = NMT_NEWT_LISTBOX (widget);
+
+ for (i = 0; i < num_subprograms; i++) {
+ nmt_newt_listbox_append (listbox, _(subprograms[i].display_name),
+ subprograms[i].func);
+ }
+ nmt_newt_listbox_append (listbox, "", NULL);
+ nmt_newt_listbox_append (listbox, _("Quit"), quit_func);
+
+ widget = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_HORIZONTAL);
+ nmt_newt_grid_add (grid, widget, 0, 2);
+ bbox = NMT_NEWT_BUTTON_BOX (widget);
+
+ ok = nmt_newt_button_box_add_end (bbox, _("OK"));
+ nmt_newt_widget_set_exit_on_activate (ok, TRUE);
+
+ widget = nmt_newt_form_run_sync (form);
+ if (widget)
+ subprogram = nmt_newt_listbox_get_active_key (listbox);
+ g_object_unref (form);
+
+ if (subprogram)
+ return subprogram (argc, argv);
+ else
+ return NULL;
+}
+
+/**
+ * nmtui_quit:
+ *
+ * Causes nmtui to exit.
+ */
+void
+nmtui_quit (void)
+{
+ g_main_loop_quit (loop);
+}
+
+static void
+connections_read (NMRemoteSettings *settings,
+ gpointer user_data)
+{
+ gboolean *got_connections = user_data;
+
+ *got_connections = TRUE;
+}
+
+static void
+usage (void)
+{
+ const char *argv0 = g_get_prgname ();
+ const char *usage_str = _("Usage");
+ int i;
+
+ for (i = 0; i < num_subprograms; i++) {
+ if (!strcmp (argv0, subprograms[i].shortcut)) {
+ g_printerr ("%s: %s [%s]\n", usage_str, argv0, _(subprograms[i].arg));
+ exit (1);
+ }
+ }
+
+ g_printerr ("%s: nmtui\n", usage_str);
+ for (i = 0; i < num_subprograms; i++) {
+ g_printerr ("%*s nmtui %s [%s]\n",
+ nmt_newt_text_width (usage_str), " ",
+ subprograms[i].name,
+ _(subprograms[i].arg));
+ }
+ exit (1);
+}
+
+typedef struct {
+ NmtuiSubprogram subprogram;
+ int argc;
+ char **argv;
+} NmtuiStartupData;
+
+static void
+toplevel_form_quit (NmtNewtForm *form,
+ gpointer user_data)
+{
+ nmtui_quit ();
+}
+
+static gboolean
+idle_run_subprogram (gpointer user_data)
+{
+ NmtuiStartupData *data = user_data;
+ NmtNewtForm *form;
+
+ form = data->subprogram (data->argc, data->argv);
+ if (form) {
+ g_signal_connect (form, "quit", G_CALLBACK (toplevel_form_quit), NULL);
+ nmt_newt_form_show (form);
+ g_object_unref (form);
+ } else
+ nmtui_quit ();
+
+ return FALSE;
+}
+
+gboolean sleep_on_startup = FALSE;
+gboolean noinit = FALSE;
+
+GOptionEntry entries[] = {
+ { "sleep", 's', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &sleep_on_startup,
+ "Sleep on startup", NULL },
+ { "noinit", 'n', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &noinit,
+ "Don't initialize newt", NULL },
+ { NULL }
+};
+
+int
+main (int argc, char **argv)
+{
+ gboolean got_connections = FALSE;
+ GOptionContext *opts;
+ GError *error = NULL;
+ NmtuiStartupData startup_data;
+ const char *prgname;
+ int i;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ opts = g_option_context_new (NULL);
+ g_option_context_add_main_entries (opts, entries, NULL);
+
+ if (!g_option_context_parse (opts, &argc, &argv, &error)) {
+ g_printerr ("%s: %s: %s\n",
+ argv[0],
+ _("Could not parse arguments"),
+ error->message);
+ exit (1);
+ }
+ g_option_context_free (opts);
+
+ nm_editor_bindings_init ();
+
+ nm_client = nm_client_new ();
+ if (!nm_client_get_manager_running (nm_client)) {
+ g_printerr ("%s\n", _("NetworkManager is not running."));
+ exit (1);
+ }
+
+ nm_settings = nm_remote_settings_new (NULL);
+ g_signal_connect (nm_settings, NM_REMOTE_SETTINGS_CONNECTIONS_READ,
+ G_CALLBACK (connections_read), &got_connections);
+ /* coverity[loop_condition] */
+ while (!got_connections)
+ g_main_context_iteration (NULL, TRUE);
+
+ if (sleep_on_startup)
+ sleep (5);
+
+ startup_data.subprogram = NULL;
+ prgname = g_get_prgname ();
+ if (g_str_has_prefix (prgname, "lt-"))
+ prgname += 3;
+ if (!strcmp (prgname, "nmtui")) {
+ if (argc > 1) {
+ for (i = 0; i < num_subprograms; i++) {
+ if (!strcmp (argv[1], subprograms[i].name)) {
+ argc--;
+ argv[0] = (char *) subprograms[i].shortcut;
+ memmove (&argv[1], &argv[2], argc * sizeof (char *));
+ startup_data.subprogram = subprograms[i].func;
+ break;
+ }
+ }
+ } else
+ startup_data.subprogram = nmtui_main;
+ } else {
+ for (i = 0; i < num_subprograms; i++) {
+ if (!strcmp (prgname, subprograms[i].shortcut)) {
+ startup_data.subprogram = subprograms[i].func;
+ break;
+ }
+ }
+ }
+ if (!startup_data.subprogram)
+ usage ();
+
+ if (!noinit)
+ nmt_newt_init ();
+
+ startup_data.argc = argc;
+ startup_data.argv = argv;
+ g_idle_add (idle_run_subprogram, &startup_data);
+ loop = g_main_loop_new (NULL, FALSE);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+
+ if (!noinit)
+ nmt_newt_finished ();
+
+ g_object_unref (nm_client);
+ g_object_unref (nm_settings);
+
+ return 0;
+}
diff --git a/tui/nmtui.h b/tui/nmtui.h
new file mode 100644
index 000000000..3e462b113
--- /dev/null
+++ b/tui/nmtui.h
@@ -0,0 +1,34 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Red Hat, Inc.
+ */
+
+#ifndef NMTUI_H
+#define NMTUI_H
+
+#include <nm-client.h>
+#include <nm-remote-settings.h>
+
+G_BEGIN_DECLS
+
+extern NMClient *nm_client;
+extern NMRemoteSettings *nm_settings;
+
+void nmtui_quit (void);
+
+G_END_DECLS
+
+#endif /* NMTUI_H */
diff --git a/valgrind.suppressions b/valgrind.suppressions
new file mode 100644
index 000000000..c418b4b61
--- /dev/null
+++ b/valgrind.suppressions
@@ -0,0 +1,131 @@
+{
+ NSS_NoDB_Init
+ Memcheck:Leak
+ ...
+ fun:NSS_NoDB_Init
+ ...
+}
+{
+ g_type_init_with_debug_flags
+ Memcheck:Leak
+ ...
+ fun:g_type_init_with_debug_flags
+ ...
+}
+{
+ g_type_register_static
+ Memcheck:Leak
+ ...
+ fun:g_type_register_static
+ ...
+}
+{
+ g_param_spec_boxed
+ Memcheck:Leak
+ ...
+ fun:g_param_spec_boxed
+ ...
+}
+{
+ g_type_add_interface_static
+ Memcheck:Leak
+ ...
+ fun:g_type_add_interface_static
+ ...
+}
+{
+ g_signal_type_cclosure_new
+ Memcheck:Leak
+ ...
+ fun:g_malloc0
+ fun:g_closure_new_simple
+ fun:g_signal_type_cclosure_new
+ fun:g_signal_new
+ ...
+}
+{
+ dbus_g_value_types_init
+ Memcheck:Leak
+ fun:realloc
+ fun:g_realloc
+ fun:g_type_set_qdata
+ fun:_dbus_g_value_types_init
+ fun:dbus_g_bus_get
+ ...
+}
+{
+ type_iface_vtable_base_init_Wm
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_memdup
+ fun:type_iface_vtable_base_init_Wm
+ fun:g_type_class_ref
+ ...
+}
+{
+ g_type_create_instance
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_slice_alloc
+ fun:g_slice_alloc0
+ fun:g_type_create_instance
+ fun:g_object_constructor
+ ...
+}
+{
+ g_signal_new_class_handler
+ Memcheck:Leak
+ ...
+ fun:g_closure_new_simple
+ fun:g_cclosure_new
+ fun:g_signal_new_class_handler
+ ...
+}
+{
+ _dl_init_g_type_register_fundamental
+ Memcheck:Leak
+ ...
+ fun:g_type_register_fundamental
+ ...
+ fun:_dl_init
+ obj:/*/ld-*.so
+}
+{
+ _dl_init_g_malloc0
+ Memcheck:Leak
+ fun:calloc
+ fun:g_malloc0
+ ...
+ fun:_dl_init
+ obj:/*/ld-*.so
+}
+{
+ all_gobject_init_ctor
+ Memcheck:Leak
+ ...
+ fun:gobject_init_ctor
+ ...
+}
+
+
+# The following suppressions were needed on fc20.armv7hl
+{
+ _fun_malloc
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:malloc
+}
+{
+ _fun_realloc
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:realloc
+}
+{
+ _fun_calloc
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:calloc
+}
diff --git a/vapi/Makefile.in b/vapi/Makefile.in
index 4fec961d4..8274cda1f 100644
--- a/vapi/Makefile.in
+++ b/vapi/Makefile.in
@@ -120,7 +120,8 @@ DIST_COMMON = $(srcdir)/Makefile.vapigen $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am
subdir = vapi
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
+ $(top_srcdir)/m4/compiler_warnings.m4 \
$(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnome-code-coverage.m4 \
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \
@@ -213,12 +214,15 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_GLIB_100_CFLAGS = @DBUS_GLIB_100_CFLAGS@
+DBUS_GLIB_100_LIBS = @DBUS_GLIB_100_LIBS@
DBUS_LIBS = @DBUS_LIBS@
DBUS_SYS_DIR = @DBUS_SYS_DIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DHCLIENT_PATH = @DHCLIENT_PATH@
DHCPCD_PATH = @DHCPCD_PATH@
+DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@
DLLTOOL = @DLLTOOL@
DNSMASQ_PATH = @DNSMASQ_PATH@
DSYMUTIL = @DSYMUTIL@
@@ -243,7 +247,6 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
GNUTLS_LIBS = @GNUTLS_LIBS@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -288,12 +291,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
+LIBNDP_CFLAGS = @LIBNDP_CFLAGS@
+LIBNDP_LIBS = @LIBNDP_LIBS@
LIBNL_CFLAGS = @LIBNL_CFLAGS@
LIBNL_LIBS = @LIBNL_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@
+LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -310,6 +317,8 @@ MOC = @MOC@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
+NEWT_CFLAGS = @NEWT_CFLAGS@
+NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
@@ -337,11 +346,16 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POLKIT_CFLAGS = @POLKIT_CFLAGS@
POLKIT_LIBS = @POLKIT_LIBS@
POSUB = @POSUB@
+PPPD_PATH = @PPPD_PATH@
PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
+PPPOE_PATH = @PPPOE_PATH@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
+READLINE_LIBS = @READLINE_LIBS@
SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -356,6 +370,7 @@ UDEV_BASE_DIR = @UDEV_BASE_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
+VALGRIND_RULES = @VALGRIND_RULES@
VAPIGEN = @VAPIGEN@
VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@
VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@
@@ -418,6 +433,7 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
systemdsystemunitdir = @systemdsystemunitdir@
target_alias = @target_alias@
@@ -428,6 +444,7 @@ with_dhclient = @with_dhclient@
with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
+with_valgrind = @with_valgrind@
EXTRA_DIST = \
NetworkManager-1.0.metadata \
NMClient-1.0.metadata \